It's 2008. Where's my flying car? RSS 2.0
 Thursday, November 03, 2005

We have some immediately open positions for employment and freelance work.

Wir haben ab sofort einige offene Stellen im Angestelltenverhältnis und auch für freiberufliche Tätigkeiten.

Bewerbungen an/Applications to  jobs@newtelligence.com

(Individuals only. Head hunters, or body shops need not apply)

Thursday, November 03, 2005 2:47:45 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback

 Saturday, October 22, 2005

This project is serious fun. Nothing is better than something that helps a geek figuring out technology and has an immediate tangible personal benefit. My “ClemensTV” (quite a humble choice of a code name!) project is one of these. The screenshot below shows what my Indigo service does to a completely innocent and unsuspecting Windows Media Player without any additional client code install/footprint. Worked on first try on my girlfriend Sabine’s notebook (that’s the benchmark; she doesn’t even have .NET 1.x on her machine) as well as on a few of my friends’ machines who I gave nothing but a username/password and an URL.  

XHTML with inline AJAX scripts, ASX stream envelopes, ASX play lists, RSS, OPML, and even raw binary GIFs all served from Indigo endpoints (one per TV channel and one for the overall channel lineup). With [ServiceContract] and [OperationContract] and all that jazz (plus, admittedly, some somewhat significant code, config and attribute “magic”).

The only thing in the Windows Media Player content pane that isn’t served up through an Indigo channel is the live video stream itself – and if it were necessary…

Tech details to come… Gotta watch TV ;-)

Saturday, October 22, 2005 4:47:43 PM (Pacific Daylight Time, UTC-07:00)  #    Comments [7] - Trackback

 Monday, October 17, 2005

End of the hibernation mode. Here’s one of the reasons (besides a lot of “actual work”) why I’ve been hiding in the past few months. And it very much feels like the start of a project I started a while ago (7/17/03 was the day I switched) and which is now this:

Since the beginning of the year I’ve been throwing around some ideas to fix a personal “problem” that I have as a frequent business traveler: Access to “my” local cable television (football!) and the recorded content that I have on my home machine. As I blogged already, I bought a Windows Media Center PC along with SnapStream’s BeyondTV product as a personal video recorder and “live streaming” server and got myself a 3072/512 KBps DSL connection.

It turned out that my concrete use case of wanting to access my home machine and content primarily from hotels and elsewhere on the road (and not so much from within my apartment) isn’t well covered by either Windows Media Center Edition or BeyondTV. Both products have options to stream content across the local network in some way. In addition to that BeyondTV has a small built-in web server that lets you access live TV and streams via a HTML interface so that you can actually get at it from anywhere. In fact, there are extensions for Media Center that let you do something similar. But somehow, none of that was really the solution I envisioned. What I wanted is a smart client that works online and offline and can replicate recorded content down to my notebook’s disk. I want to have the TV guide data (electronic program guide) cached on my notebook so I can schedule recordings locally (and replicate them down to the PVR as I get connected) and/or get alerts whenever a show is coming up that is of interest to me. I want a smart client that has a “10 feet” user interface and support for a remote control and the smart client shall look graphically appealing. And lastly, and possibly most importantly, I want a good excuse to stuff as many feature showcases for Indigo and Avalon (yeah, yeah: WCF/WPF, yadda, yadda) into the combined solution.

When I started thinking about how to approach this, I was thinking that the smart client was the thing to focus on. So by now I have acquired what I think is a rather scarily broad set of Avalon development skills (for a server guy, at least). Heck, I even taught myself how to tilt and turn a 3D plane with video on it without having to copy someone else’s XAML! The first UI prototype was sitting right on top of BeyondTV’s API, which is exposed as a set of Web Services, but somewhat feels like a COM API on a longer leash. Since using that API directly is a bit cumbersome, I wrote a wrapper around it to make it a bit more accessible and “service like”. And while that was all cute and started working, it somehow it still didn’t feel like the right thing to do.

What would I do about other sources? NASA TV provides a live web stream that I sometimes look at, not to mention various video webcasts for developers and the like. And what about podcasts? What about internet radio? Couldn’t blogs be integrated into all of that? Wait…. couldn’t my live TV and recording sources be like blogs?

Well, I can program and hence they can. I wrote and I am still writing an Indigo-powered server that wraps BeyondTV (and other sources) to become a “video blog” server. My Avalon-powered smart client for which I have some bits and pieces in place of course won’t be dependent on my video server, but will understand blogs, podcasts, video blogs and whatever else I can find and will integrate it all into a remote control navigable text/radio/video UI.

I’ll drill into and write about the things that I am doing to make it all work in the next few weeks and months and as I proceed. For now, I’ll just tease you a bit and show you a selection of three (incomplete in terms of content and features) XML snippets that the server generates. If you hit the server application root directory, you get an OPML with all the live TV channels that are available (the list below is shortened considerably):

< opml >
  <
head >
    <
title > TV </ title >
    <
dateCreated > Mon, 17 Oct 2005 14:27:04 GMT </ dateCreated >
  </
head >
  <
body >
    <
outline title = " MTV " xmlUrl = " http://tattoine:8100/TV/MTV " />
    <
outline title = " TELE5 " xmlUrl = " http://tattoine:8100/TV/TELE5 " />
    <
outline title = " BAYERN " xmlUrl = " http://tattoine:8100/TV/BAYERN " />
    <
outline title = " NDR " xmlUrl = " http://tattoine:8100/TV/NDR " />
    <
outline title = " TV nrw " xmlUrl = " http://tattoine:8100/TV/TV-nrw " />
    <
outline title = " RTL " xmlUrl = " http://tattoine:8100/TV/RTL " />
    <
outline title = " SAT.1 " xmlUrl = " http://tattoine:8100/TV/SAT.1 " />
    ...
  </
body >
</
opml >

If you were follow the MTV link in the OPML you’d get the MTV RSS, with the guide data much like what I am showing below. [I just left three shows in it here for demo purposes – typically every channel has about 7-10 days worth of guide data].  Note that the <pubDate> for every item is the date/time when that show is going to air. Future dates are perfectly legal in RSS. Each item has, of course, a <link> on its own, which get you to more details on the show, like a list of actors, the status of whether you want to record the show or want an alert when it starts, or some rich media preview (there something there now, but nothing I am willing to show, yet).  

< rss xmlns:wsa = " http://schemas.xmlsoap.org/ws/2004/08/addressing " xmlns:ctv = " http://schemas.vasters.com/2005/08/clemensTV/channels " version = " 2.0 " >
   <
channel ctv:mediaChannel = " true " >
      <
title > MTV </ title >
      <
link > http://tattoine:8100/TV/MTV/media </ link >
      <
description > MTV </ description >
      <
image >
         <
url > http://www.tvtoday.de/tv/programm/bilder/senderlogos/mtv.gif </ url >
         <
title > MTV </ title >
         <
link > http://mtv.de </ link >
      </
image >
      <
copyright > (c)2005 MTV </ copyright >
      <
lastBuildDate > Mon, 17 Oct 2005 15:26:09 GMT </ lastBuildDate >
      <
generator > ClemensTV </ generator >
      <
ttl > 60 </ ttl >
      <
item >
         <
title > Viva La Bam </ title >
         <
guid > EP:0001000000055045:127744056000000000 </ guid >
         <
link > http://tattoine:8100/TV/MTV/item/EP:0001000000055045:127744056000000000 </ link >
         <
pubDate > Sat, 22 Oct 2005 00:00:00 GMT </ pubDate >
         <
description > Show mit Bam Margera, USA </ description >
         <
ctv:Duration > PT30M </ ctv:Duration >
      </
item >
      <
item >
         <
title > Masters </ title >
         <
guid > EP:0001000000055045:127744020000000000 </ guid >
         <
link > http://tattoine:8100/TV/MTV/item/EP:0001000000055045:127744020000000000 </ link >
         <
pubDate > Fri, 21 Oct 2005 23:00:00 GMT </ pubDate >
         <
description > Depeche Mode </ description >
         <
ctv:Duration > PT1H </ ctv:Duration >
      </
item >
      <
item >
         <
title > Pimp My Whatever </ title >
         <
guid > EP:0001000000055045:127744002000000000 </ guid >
         <
link > http://tattoine:8100/TV/MTV/item/EP:0001000000055045:127744002000000000 </ link >
         <
pubDate > Fri, 21 Oct 2005 22:30:00 GMT </ pubDate >
         <
description > Day * Neue Reihe </ description >
         <
category > Reihe </ category >
         <
ctv:Duration > PT30M </ ctv:Duration >
      </
item >
      ... 
   </
channel >
</
rss >

Now up to here that’s pretty logical; if you follow the <link> for the <channel> (here: http://tattoine:8100/TV/MTV/media), you will get something like the following XML bit with the content type ‘video/x-ms-asf’:

< ASX Version = " 3.0 " >
   <
entry >
      <
ref href = " http://tattoine:8080 " />
   </
entry >
</
ASX >

Since that’s apparently a Windows Media Player ASX file my server generates, Media Player will open if you navigate to the URL using IE or Firefox (on Windows). Who said that the <link> in RSS must resolve to HTML? Guess what Media Player will play? MTV Germany of course. Live. As I generate the ASX stream, I instruct the backend video server to switch to that respective tuner channel. Also, since I am creating an indirection point here, I could also scale this over multiple stream servers and tuners.

One of the technically noteworthy aspects of this application is that I am using Indigo for all communication aspects, but this application spits out pure XML, even with varying content-types. In fact, the entire server will likely not put a single plain-text, XML 1.0 encoded SOAP envelope onto the wire, but will be rather REST’ish and POX’ish. The only exception from that is the chunking download protocol, which I am implementing with a TCP-duplex channel (which uses binary encoding and is strictly a Indigo-to-Indigo communication path for my smart client).

Stay tuned.

Monday, October 17, 2005 7:39:37 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [4] - Trackback
Blog
 Tuesday, September 13, 2005

The PDC keynote was once again way too long. Even though I found it all reasonably entertaining throughout, the sheer length makes it difficult to remember all the individual pieces. The segment where Don Box, Anders Hejlsberg, Scott Guthrie and Chris Anderson put an app together with LINQ was fabulous and refreshingly free of marketing lingo, while, and in sharp contrast, the rep from the company Northface was difficult to listen to, to say the least (even though they had a cool demo).

The Anders/Chris/Don/Scott demo was the highlight for me; the "low point" was probably (and rather unfortunately) the "Netflix" demo, which was supposed to be a demo of the cross platform story for "Windows Presentation Foundation Everywhere" (WPF/E), but turned out to be "just" 3 similarly looking, but different implementations of similar apps using similar visuals (one WPF, one Media Center and one for PocketPC) and the immediate reaction of the folks around me was "so what?". One more thing that I found a bit unfortunate was that every WPF demo stressed how "super easy" it was to do all those 3D effects and animations. After having played around with WPF/Avalon quite a bit in the past few weeks I can say that I can do lots of very cool things that were out of reach for me before, but "super easy" isn't exactly what I would call the current "hack it up in XML" development experience. Maybe they've been using tools that I don't know anything about yet.

Tuesday, September 13, 2005 2:41:16 PM (Pacific Daylight Time, UTC-07:00)  #    Comments [6] - Trackback

 Monday, September 12, 2005

I am in Los Angeles for PDC05 and I am staying at the Renaissance Hollywood Hotel. Why is that interesting? Well, because …

Someone at that hotel is apparently thinking that it is a brilliant marketing idea to put little (live) fish into tiny bowls into the guest rooms along with a note that you might want to try out their room service (the note says that you don’t have to feed the fish because the chef is doing that and the chef wants to prepare something for you too). I think that’s a really, really bad idea and it’s pretty cruel. I think I need to talk to the hotel manager there. Save the fish!   

 

Monday, September 12, 2005 9:49:45 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [8] - Trackback

 Friday, September 09, 2005

Now here is an unlikely blog post! Clemens writes VBA snippets for PowerPoint!

There’s one problem that bugs everyone who is doing lots of presentations with PowerPoint at conferences and has to adjust the slides to whatever the respective conference’s PowerPoint template is: Color Schemes. Color Schemes are quite nice when you are in control of whatever your templates are, but if you must comply with someone else’s taste for color combinations or their complete ignorance about the color scheme, you might end up spending hours re-coloring your presentation’s graphics, because whenever you import or copy & paste graphics between presentations, the graphics adopt the destination’s color scheme. Here’s how that might end up looking:

 

Bah! I have tons of very complex graphics with animations that evolve over time (and reuse) and re-coloring the slide I am showing here would take quite a bit of time. And – really – green and light gray on dark gray with light gray text on white isn’t exactly “best practice” when it comes to presentations.   

What causes this is that PowerPoint will, by default, assign the “color scheme index” to the fill and line colors of any shape if you pick the colors from the existing color scheme (and the UI is designed to make you do that). This index information takes precedence over any explicit RGB value set for the shape’s fill or line or text color. So whenever you move the shapes to a different presentation, they will adopt the color scheme setting. Luckily, and that’s something I found out yesterday because I found myself once again in the situation to have to fix a deck, it’s possible to break that link between a shape’s coloring and the color scheme by programmatically modifying the respective ColorFormat element and resetting the SchemeColor so that it doesn’t refer to one of the  preset color scheme “slots”. Below is the resulting VBA macro for PowerPoint (yes, it cost me great pain to go there) that’ll simply replace the color-scheme index information on any drawing shape so that colors of shapes (the macro ignores text) will be completely preserved as you copy stuff between presentations. Put that into the source presentation and run StripSchemeColorFromShapes() once.

Sub StripSchemeColorFromShapes()
    Dim currentShape As Shape
    Dim currentSlide As Slide

    For Each currentSlide In ActivePresentation.Slides
        For Each currentShape In currentSlide.Shapes
        If currentShape.Type = msoGroup Then
            RecolorGroup currentShape.GroupItems
        Else
            RecolorShape currentShape
        End If
        Next currentShape
    Next currentSlide
End Sub

Sub
RecolorGroup(group As GroupShapes)
   Dim currentShape As Shape

   For Each currentShape In group
      If currentShape.Type = msoGroup Then
          RecolorGroup currentShape.GroupItems
       Else
          RecolorShape currentShape
       End If
   Next currentShape
End Sub

Sub RecolorShape(currentShape As Shape)
    Dim clr As ColorFormat

    On Error Resume Next

    If currentShape.Fill.Visible Then
        Set clr = currentShape.Fill.ForeColor
        clr.SchemeColor = ppSchemeColorMixed
        currentShape.Fill.ForeColor = clr
        Set clr = currentShape.Fill.ForeColor
        clr.SchemeColor = ppSchemeColorMixed
        currentShape.Fill.BackColor = clr
    End If

    If currentShape.Line.Visible Then
        Set clr = currentShape.Line.ForeColor
        clr.SchemeColor = ppSchemeColorMixed
        currentShape.Line.ForeColor = clr

        Set clr = currentShape.Line.BackColor
        clr.SchemeColor = ppSchemeColorMixed
        currentShape.Line.BackColor = clr
    End If

   On Error GoTo 0
End Sub


Once I ran the macro in the original presentation, all I had to do was to copy & paste it into the destination and see there! Done:

Friday, September 09, 2005 2:10:45 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [3] - Trackback

 Wednesday, August 31, 2005

My blogging efforts this year aren’t really impressive, are they? Well, the first half of the year I was constantly on the road at a ton of conferences and events and didn’t really get the time to blog much. After TechEd Europe, I was simply burned out, took three weeks of vacation to recover somewhat and since then I’ve been trying to get some better traction with areas of Visual Studio that I hadn’t really looked at well enough since Beta 2 came out. And of course there’s WinFX with Avalon and Indigo that I need to track closely.

Now, of course I have the luxury of being able to dedicate a lot of time to learning, because taking all the raw information in, distilling it down and making it more accessible to folks who can’t spend all that time happens to be my job. However, I am finding myself in this rather unfortunate situation again that I will have to throw some things overboard and will have to focus on a set of areas.

At some point rather early in my career I decided that I just can’t track all hardware innovations anymore. I certainly still know what’s generally going on, but when I buy a new machine I am just a client for Dell, Siemens or Alienware like the next guy. I don’t think I could make a qualified enough choice on good hardware components to build my own PC nowadays and I actually have little interest to do so. All that stuff comes wrapped in a case and if I don’t really have to open it to put an extension card in, I have no interest to look inside. The same goes for x86 assembly language. The platform is still essentially the same even after more than a decade, and whenever Visual Studio is catching an exception right in the middle of “the land of no source code”, I can – given I have at least the debug symbols loaded – actually figure out where I am and, especially if it’s unmanaged code, often figure out what’s failing. But if someone were ask me about the instruction set innovations of the Pentium 4 processor generation I’ll happily point to someone else. In 2001, I wrote a book on BizTalk and probably knew the internals and how everything fits together as good as someone outside of Microsoft possibly could know it. BizTalk 2006 is so far away from me now that I’d have a hard time giving you the feature delta between the 2004 and 2006 versions. Over time, many things went over board that way; hardware and assembly being the first and every year it seems like something else needs to go.

The reason is very simple: Capacity. There’s a limit to how much information an individual can process and I think that by now, Microsoft managed to push the feature depth to the point where I can’t fit Visual Studio and related technologies into my head all at once any longer. In my job, it’s reasonable for people to expect that whenever I get up on stage or write an article that I give them the 10%-20% of pre-distilled “essentials” that they need 80% of the time out of a technology and that I know close to 100% of the stuff that’s underneath, so that they can ask me questions and I can give them good, well founded answers.  In the VS2003/NETFX 1.1 wave, I’ve done something (and even if it was just a demo) with every single public namespace and I am confident that I can answer a broad range of customer questions without having to guess.

Enter VS2005 and the summary of trying to achieve the same knowledge density is: “Frustrating”.

There is so much more to (have to) know, especially given that there’s now Team System and the Team Foundation Server (TFS). TFS is “designed to be customized” and the product makes that clear wherever you look. It is a bit like an ERP system in that way. You don’t really have a solution unless you set up a project to customize the product for your needs. Hence, “Foundation” is a more than fitting name choice.

I’ve been in a planning project for the past two weeks where the customer has a well thought out idea about their analysis, design and development processes and while TFS seems like a great platform for them, they will definitely need customized events, a custom-tailored version of MSF Agile with lots of new fields and custom code analysis and check-in policies, integration with and bi-directional data flow from/into “satellite products” such as a proper requirements analysis system, a help-desk solution and a documentation solution, and probably will even want to get into building their own domain specific language (DSL).  All of that is possible and the extensibility of Visual Studio and TFS is as broad as the customer would need it to be, but … who would know? The Team System Extensibility Kit has documentation to extend and customize process templates, work items, source control, the build system, the team explorer, test tools, and reporting and that’s just the headlines. Add the tools for custom domain specific languages (huge!) and the class designer extensibility and you’ve got more than enough stuff to put your head into complete overflow mode.

And at that point you haven’t even looked at the news in Windows Forms (where I like all the new data binding capabilities a lot) and much less at ASP.NET 2.0, which is an entire planet all by itself. Oh, and of course there is the new deployment model (aka “ClickOnce”), SQL 2005, with all those new features (whereby SQL/CLR is the least interesting to me) and BizTalk 2006 and, and, and …

And of course, my core interest is really with the Windows Vista WinFX technology wave including of course Indigo (don’t make me use “WCF”) and for me to a lesser degree Avalon (yes, yes: “WPF”) for which knowing the VS2005/NETFX 2.0 foundation is of course a prerequisite.

What kills me with Avalon, for instance, is that I’ve got quite a bit of the 2D stuff cornered and know how to do things even with just an XML editor in hands, but that the 3D stuff is nicely integrated and sits right there in front of me and I just don’t have the necessary knowledge depth about building 3D apps to do the simplest thing and not the time to acquire that knowledge. And I’ve got such great ideas for using that stuff.

It looks like it’s time to take some things off the table again and that’s an intensely frustrating decision to make.

Don’t get me wrong … I am not complaining about Microsoft adding too many features to the platform. Au contraire! I think that we’re seeing a wave of innovation that’s absolutely fantastic and will enable us out here to build better, more featured applications.

But for a development team to benefit from all these technologies, specialization is absolutely needed. The times when development teams had roughly the same technology knowledge breadth and everyone could do everything are absolutely coming to an end. And the number of generalists who have a broad, qualified overview on an entire platform is rapidly shrinking.

And the development teams will change shape. Come Avalon, and game developers (yes, game developers) will be in great demand in places that are as far away from gaming as you could imagine. I’ve just had meetings with a very conservative and large investment management company and they are thinking hard about adding multi-layer, alpha-blended, 3D data visualizations complete with animations and all that jazz to their trading system UIs, and they’ve got the business demand for it. Of course, the visualization experts won’t be data mining and data analysis or software integration specialists; that’s left for others to do.

For “generalists” like me, these are hard and frustrating times if they’re trying to stay generalists. Deep and consequent specialization is a great opportunity for everyone and the gamble is of course to pick the right technology to dig into and become “the expert” in. If that technology or problem space becomes the hottest thing everyone must have – you win your bet. Otherwise you might be in trouble.

Here are some ideas and “predictions” for such sought-after specialists – but, hey, that’s just my unqualified opinion:

·         Cross-platform Web service wire doctors. As much as all the vendors will try to make their service platforms such as Indigo and Web Sphere and Web Logic and Apache interoperable, customers will try hard to break it all by introducing “absolutely necessary” whacky protocol extensions and by using every extensibility point fathomable. As if that wasn’t hard enough already today where most interop happens with more or less bare-bones SOAP envelopes, just wait until bad ideas get combined with the full WS-* stack, including reliable messaging, security and routing. These folks of course will have to know everything about security aspects like federation, single-sign-on, etc.  

·         Visualization Developers. Avalon is a bit like an advanced 3D gaming engine for business application developers. While that seems like a whacky thing to say – just wait what’ll happen. Someone will come along and build a full-blown ERP or CRM package whose data visualization capabilities and advanced data capture methods will blow everything existing out of the water and everything with white entry fields on a gray background with boring fonts and some plain bar charts will suddenly look not much better than a green-screen app. In 3 years you will have people modeling 3D wire-frames on your development teams or you are history – and the type of app doesn’t really matter much.

·         Development Tool and Process Customization Specialists:  I expect Team System to become the SAP R/3 of software development. No deployment without customization, even if that only happens over time. Brace for the first product update that comes around and changes and extends the foundation’s data structures. I fully expect Team System and the Team Foundation Server to gain substantial market share and I fully expect that there’ll be a lot of people dying to get customization assistance.

 

That said: I am off to learn more stuff.

Wednesday, August 31, 2005 1:53:45 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [6] - Trackback
IT Strategy | Technology
 Wednesday, July 13, 2005

I am technically on vacation now and for the following 2 1/2 weeks, so I’ve been a little slow posting this. Below is the link to the source code archive for my TechEd Europe 2005 talks on transactions and asynchronous messaging. The “newtelligence.TechEdTools” assembly with the message queue listener and the WSE and ASMX transports for MSMQ is essentially the same as the one I posted after TechEd US, but there is now a little sample application that goes with it. People have specifically asked for the “transactional file writer” example. You can find that in the “CustomersService” code.

Download: techEd2005Europe.zip

Wednesday, July 13, 2005 4:55:17 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [3] - Trackback
Talks
Stuff
About the author/Disclaimer

The content of this site are my own personal opinions and do not represent my employer's view in anyway. In addition, my thoughts and opinions often change, and as a weblog is intended to provide a semi-permanent point in time snapshot you should not consider out of date posts to reflect my current thoughts and opinions.

© Copyright 2008
Clemens Vasters
Sign In
Statistics
Total Posts: 717
This Year: 11
This Month: 0
This Week: 0
Comments: 1220
Themes
Pick a theme:
All Content © 2008, Clemens Vasters
DasBlog theme 'Business' created by Christoph De Baene (delarou)