It's 2008. Where's my flying car? RSS 2.0
 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
 Thursday, June 30, 2005

I spent yesterday in Brussels at the European Parliament. I attended session at a conference and had the opportunity to speak to a few members of the European Parliament and chatting with the press. As you might know, next week the parliament votes on the EU Directive in Computer Implemented Inventions, which is supposed to regulate how and which computer-implemented inventions shall become patentable in the European Union. More precisely, the directive really only manifests what the European Patent Office practices today and aims to pull that practice under the umbrella of European law – which it is not at this point.  And what’s currently going on in Brussels in terms of lobbying, especially on the side of the patent opponents, is bordering the insane.

The Anti-Intellectual-Property Lobby

One of the events I attended briefly (I didn’t have time to sit through the whole thing) was the so called “Economic Majority Conference”. I heard 30 minutes of testimony by (three) small businesses on how patents supposedly have or will hurt their business and a little storytelling by an attorney who acted as moderator for the event. The attorney, who admitted right from the start that he is not a patent attorney (which makes me wonder why he’d be chairing a patent-law related conference), told a sobbing story about a company that built a content management system for a whopping EUR 100.000 (they’re either really productive, or they’ve outsourced development to somewhere really cheap, or their system is probably not very featured) and their patent research showed that they are violating 4 EU patents.

 Then he went on to tell the shocking things he found out working with the client: Patents protect inventions, it might cost money to license a patented method, and if you are found to violate one you could get sued. If you ever sat down with a patent attorney for 30 minutes, you know that. What stunned me was when he went into a rather obscure series of calculations of penalty license fees and associated cost and came out with a total damage of EUR 45.000 that his client would have to pay if they were found to be in violating and the patent holder would decide to sue. The numbers alone tell me one story: This sounds bogus. Building a remotely competitive CMS isn’t something you do with 100K. And if you are really found to be in substantial violation of a competitor’s patent and it’s worth the hassle for your competitor to go after you, 45K isn’t even going to pay your attorney’s expenses. Looking around in the audience I saw several people who were visibly amused about this open display of lack of expertise.

The three company testimonies I listened to were similarly “interesting”. One gentleman claimed that he had developed a mapping software together with a partner company and they had expected (it’s interesting how those numbers are all the same) 100.000 EUR in annual revenues from that software service. And because there is a company who has a patent on the same things they’re doing, they couldn’t go on with the project. He claimed that the patent precluding him from realizing his business model is as broad as “putting a point on a map”.  I am sure that he could find friends at Google (Google Maps), MSN (Mappoint), or Mapquest (do I need to go on?) who’d happily help him suing to have that patent invalidated. And, really, if the annual revenue expectation from all that work is just 100K, wouldn’t it make sense to try doing something else?

The next company presenting creates some seriously (seriously!) impressive geology software. The CEO said that they don’t need patents, because copyright is enough for them. Having been asked for it, he said they have 4 software developers and “about the same number” of geologists on staff. The software they make is, as he explained, used to search for oil reserves. What confuses me, though, is that they don’t seem to understand themselves as a “computer-aided geology company”, but as a “software for geologists” company. The CEOs claim was that they develop most of the science models behind their software themselves. So, I was asking myself, if they have geologists developing new ways to do geological analysis to find oil reserves, why wouldn’t they patent that geology science? What does that have to do with any software implementation of those methods? If that company is really as good as they claim, wouldn’t those methods alone be worth tens of millions of Euros in license revenues alone? Well, and if it turns out that that science isn’t exactly original, but they are just implementing existing models – then they indeed do not have anything to do with patents, except, possibly consuming them and paying due licenses, because in that case they’re clearly capitalizing on someone else’s method inventions. And mind that these patents wouldn’t be covering anything that has to do with software; these would be patents related to geology.

The last company presenting claimed to be a market leader in digital video processing. Again, that company says that copyright is good enough for them. They, too, had some really impressive demos on how their effects software is used to improve video footage and how customers applied their digital effects to anything from music videos to blockbuster motion pictures. And I am thinking: Talk to a lawyer. Copyright protects the concrete manifestation of a program. If someone reverse engineers (that is not forbidden by copyright law, that’d at most be a license violation) your code and comes up with a functionally equivalent reimplementation of the same underlying method, you have nothing in your hands to defend yourselves. And here again, the method worthy of protection has nothing to do with its concrete implementation in software: it’s rather a specific (and likely very complex) mathematical model applied to digital images. It’s an invention that can clearly only be implemented on a computer, but it’s not a program per-se.

When listening to this and when speaking to a few audience members when we were taken to the conference room by our escort, I started to realize why this whole debate is so complicated: Lots of people involved in the “software patent” debate seem to be against the entire idea of patents, licensing, and intellectual property protection per-se and there seems to be not much of an understanding of the patent system as it exists and how many industries wouldn’t function without it.

Biotech Engineers United Against Patents!

Now that’s a headline that you will unlikely see. Still, it seems perfectly reasonable that software developers stand up against patents? The whole pharmaceutical and biotech industry is built on the patent system. If you look at pharmaceutical and biotech SME (small and medium enterprises), it’s their stated goal to focus on a particular problem, get funding, and then drive their research to a point when they can file for patents, do studies and finally hope that a pharmacy giant with a big distribution network will licensing their research results for productization. The result of the millions or Euros that go into developing a drug often fits on a few sheets of paper; it’s a recipe for mixing together the right ingredients to produce that drug. This is why there are dozens of generic drugs appearing on the market as soon as a drug patent expires; it’s not particularly hard to copy the production process and the patent system actually guarantees that the recipe is out there for anyone to see. What the patent system does for the inventor is that they get a period of exclusivity to capitalize on their invention so they can reclaim their investments and make money off them. Once that expires, the innovation is automatically placed into the public domain (!). Because that model is fully understood in the pharmaceutical industry, you won’t see people from that industry rallying in front of the European Parliament in a call to abolish patents in their field; they’d effectively put themselves out of a job.

The Software Industry Needs to Grow Up

The software industry needs to grow up, quite literally. In which engineering science is it enough to get a computer for $200 at eBay, and load up a free compiler to claim to be a professional engineer? In which other industry is the actual intellectual capital and the result of engineering effort (research, conceptualization, architecture) regarded as mere collateral of its implementation (source code)? That is plain idiocy. Source code, no matter whether open or closed, doesn’t matter much. If today’s language of choice is C++ and in 2009 it’s something like “K-Square” running on a super-universal “VLR” runtime, that oh-so-important source code is suddenly just a legacy problem. What counts are the underlying concepts and methods. There are no software patents. Software is an implementation of a concept and implementations are subject to copyright. What’s patentable are implementation-independent technical solutions. And it is nothing less than a simple act of discrimination compared to any other field of engineering if innovators in the fields of database and transaction research, digital image and digital audio processing, or robotics are denied their right to claim protection on these inventions. 

The open-source advocates can claim and execute their right to free speech as much as they want, but when they finally gather up on stage at a conference and intonate “We are the world, we are the children”, they’re doing something good for Africa and impoverished children, because someone will have to pay license fees on a copyright protected work of art – whose proceeds go to the author and therefore, as I understand, to the Quincy Jones Listen Up foundation. That is true as soon as you can buy a drink at that conference. As it turns out, if you implement something in “free speech” (or in that case: free singing), someone may end up having a monetary claim if you do so in a public performance from which anybody has any financial gain (like the caterer).

A software implementation is, if we’ll take that as an analogy, the public performance of someone’s concepts and inventions. Just as you may certainly speak up freely, sing in the shower and recite your favorite author amongst your friends, patent law commonly and explicitly states that any hobbyist can implement any patent for their own private use in any way they wish. As soon as someone capitalizes on the implementation, they ought to pay their deeds to the inventor so they get their fair share of that financial gain. That said, as soon as “free speech”  turns into “free beer” and global services companies run around making billions of Euros of consulting revenue off “free” implementations of someone else’s inventions while the inventors don’t get their fair share, something is absolutely wrong. There are innovators and there are implementers. Sadly, many people I hear speak up against patents are implementers of other’s ideas who are more worried about writing source code in a special way or for a specific OS or under a certain license, than bring true innovation to our field of technology.  

The System Is Broken

And yet, you won’t hear me saying that I am happy with the patent system as it stands. It is blatantly obvious that there are serious issues with the U.S. Patent Office and the European Patent Office (and other patent agencies) when it comes to computer implemented inventions. Patents that are ridiculously broad or are granted on methods that have been used for decades, but have been reformulated by clever lawyers to sound new, are absolutely wrong and should either not be granted or be voided.

We all know that granting a patent claim on a mouse double-click, or on a shopping cart is stupid. But if you find that the executive branch of the administration in a particular field is severely broken, do you throw your hands up, give in to that inadequacy and change the law so that the executive doesn’t need to deal with that anymore? Or do you pass a law that’s adequate and preserves the rights of the innovators and then go and fix the broken system?

Instead of lobbing to abolish a system that successfully supports pretty much all other fields of engineering, I would expect that the people who are so highly critical of patents and believe that the Armageddon is near would offer their help in fixing the system. And what I expect from the European Commission and the U.S. Administration is that they enable the public by executive order to help the patent offices by being more progressive and aggressive about patent application publishing and more open in the review process – especially for computer implemented inventions. I expect that the lawmakers keep the system simple by dropping amendments to the patent laws (such as the “forces of nature” clause in the CII directive draft) that only complicate matters and create new business opportunities for patent lawyers (If I mandate to write things to a physical disk, is that enough “force of nature”?).

Employing the Community

First off; if you If the community would be showing their willingness to help fixing the patent system, here’s what I think could be elements of a community collaboration model that’s a bit more proactive than the current practice of “publish & wait”:

·         Any patent application should immediately be made available to the public through a filterable push-feed. Media could be, for instance, Email and RSS. If I am interested in database and transaction methods, I should get the respective applications pushed into my email inbox automatically. This service should be free and available to anybody. (Except for “push”, that actually already exists: http://ep.espacenet.com)

·         Anyone demonstrating sufficient qualification can be accredited as a subject matter expert to the patent office. “Sufficient qualification” could stem from college degrees and diplomas, membership in an accredited technology association or working for an accredited company. Accreditation is free, associated with one or more specific technology categories, and the qualification requirement serves to exclude “interested bystanders” and people whose only intent is to be generally destructive. Subject matter experts are volunteers and must constructively contribute to the patent verification process on a regular basis; otherwise they lose their accreditation and the accreditation cannot be regained for a certain waiting period. As with the current system, anyone can still file objections against a published patent application, but the input of accredited subject matter experts is handled with priority, because it is more likely to lead to a quicker refusal of unjustified applications.

·         Subject matter experts shall inspect patent applications for clarity and can recommend refusal of a patent because of technical obscurity. Patents should be clear and complete enough so that an implementation can be devised by any qualified implementation engineer or engineering group. To be clear: If there is a 3D imaging patent at hand and the engineer’s linear algebra skills are not up to speed, then he/she is likely not qualified.

·         Subject matter experts shall aid the patent office in finding and collect instances of prior art or similar existing patents.

·         Subject matter experts can recommend refusal of a patent because of technical triviality – if a complete implementation of the invented method in software is merely a matter of minutes, the invented method might not be worthy of protection or is indeed one that is an inevitable, logical, and obvious solution path for a given problem.      

All in all, this means that if you really hate the idea of patents, you could volunteer to participate in such a collaboration model and help killing unjustified patents from within the system. Employing a community model would be a constructive move to help fixing the patent system as it stands. Today, the acceptance and refusal of patents is often at the mercy of overloaded patent officers who are certainly qualified in the respective field of technology, but who are not and simply can’t be active practitioners in the field. Because patents are published, but the access to those patents and the feedback channels is relatively obscure and patents are written in language where lawyer-speak overlays the technology details simply because patent law is too complicated and there are too many special cases, exclusions and restrictions to work around, patent research and objecting against unjustified patent applications is indeed a matter than only large corporations can afford. But that is not a problem of the law, that’s a problem of the system implementing the law.

What seems problematic about a community model is that there will be doubtlessly participants whose only mission is to kill and destroy, because they are against the patentability of computer implemented inventions per-se. That’s something that has to be expected – I can’t expect that fierce advocates of the technology of vendor X will be happy about technology innovations made by vendor Y. But because such a system would be proof and facts based, such “enthusiasm” would likely only help making the system better.

Conclusion

Advocacy against patents solely on the grounds that the execution of the patent law by the patent offices is broken looks very wrong to me. There are stupid patents that should never have been granted and we as in industry need to help get rid of them and help that such patents won’t pass in the future. But inventors in any field of digital technology are entitled to patent protection just as inventors in any other field of engineering. If you develop a digital image processing methods to take a digital photograph made with an off-the-shelf digital camera that enables a doctor to detect skin-cancer risks, that’s an invention that’s doubtlessly worth patenting. It’s simply untrue that software developers casually sit down in the morning and an implementation of that exact invention forms under their fingers as an inevitable evolution of thought given the problem – and in the unlikely event that he/she still end up with the same thing – then it’s very simply (and unfortunately for the runner up) a matter of “first innovator wins”. And if you are clever enough to find that solution path by chance, I would argue that you are clever enough to find another one, too. That’s called “patents drive innovation”.

Thursday, June 30, 2005 7:17:55 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [14] - Trackback