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!

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:

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.
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
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”.
“All for this one moment” is Lufthansa’s
marketing tagline for FlyNet, their in-flight Internet service. One of the ads
reads (I don’t have the exact wording right so, so I paraphrase) “Read
your email or cheer about the goal in the 92th minute”. Now… that
with the goal is of course an issue, because how could you possibly see it? Sure,
there are live text tickers on news sites and there is Internet radio, but that’s
all lame, right? So I bought myself a PC with some big disks, two TV capture
cards, upped my DSL connection at home to 3072/512KBps, and got myself a copy
of SnapStream’s Beyond TV. Outcome:
Live TV from Germany, football included, streamed from my home PC to my
notebook to anywhere I go – given that I get at least a 96 KBps link. The
maximum feed I can get out of this with a good connection to home is about 496
KBps, which gives me near VHS picture and sound quality.
The screenshot is taken in the Lufthansa lounge at Munich airport. Connection
is via Vodafone’s WLAN. Greece playing Japan in the Confederation Cup
right now. (Of course they’ve got that here on the regular TV screens,
but it seemed like a good moment to show that).
“Self inflicted damage“ is probably the right expression to use.
It’s Sunday, I am home, it’s a beautiful day and I am once again
packing a suitcase. The taxi arrives at 16:00h and I’ll be airborne at
around 16:45h (the drive to Düsseldorf airport from my apartment is about 8
minutes and I am already checked in via phone) going to Munich and from there
to Bern in Switzerland for a 1 1/2 day workshop with a customer. Tuesday
afternoon I take the train to Zürich airport and will fly straight to Brussels
for a series of meetings Tuesday evening and Wednesday all day. As per current planning,
I’ll be back at Düsseldorf airport on Wednesday by 21:45h.
And all that in a week that was supposed to be “work at home”. In
the past four months, I’ve been to the U.S. three times and I’ve
been to Singapore, Algeria, Saudia Arabia, Pakistan, and Turkey as well as in
Croatia, Slovenia, Austria, Norway, England, Italy, and Holland – with the
occasional business meeting in Germany in between. With some of these trips
being really short – like less than 2 full days in Karachi, Pakistan
coming from Miami in Florida (+9 hrs) and leaving to Europe (-3 hrs) I even
give up trying to adjust to the time zones and if I happen to wake up at 3am in
the morning I just accept that as what the body thinks is right, make or order
coffee and just stay awake. I thought last year was nuts in terms of traveling,
but this year easily beats it.
The traveling per-se isn’t all that bad, but getting up at 3:30am in
the morning or earlier or just stay awake through the evening to catch a flight
in the Middle-East, crossing more than 6 hours of time-zone differentials three
times in a week, and all the irregular sleep hours and the irregular eating
hours are definitely causing stress, are badly affecting my ability to get work
done and aren’t really healthy. And since I am always cordially invited
to be someone’s guest most of the evenings I am on the road, it’s
not a very polite thing to reject the invitation to dinner and a drink or two –
which doesn’t help keeping the weight down and doesn’t contribute
to be well rested all the time. And I really can see why some frequent business
travelers become alcoholics. If one’s body is easily vulnerable to addiction,
the “dinner meeting culture” alone drives people straight to the
edge and then they do hard liquor – done. Beer and wine in good measure is
good enough for me, thanks.
What’s somewhat frustrating about the traveling on tight schedules is
that you often get to places where you haven’t been and then you don’t
get to see anything of the city or country. Pakistan is one of these
examples, with the added, unfortunate complication of a very volatile security
situation. I’ve now been in Karachi twice and all I have seen is the
airport, the highway from the airport into the city, a particular hotel (both
times), and two restaurants. And whenever we left the hotel, we’ve been
in a bus followed by a pick-up truck with a bunch of policemen with
machine-guns. And with that “experience”, you get pulled in front
of a TV camera for an interview and get asked “what do you think of
Pakistan?” Well… What
I can say about Pakistan is that the people are great. It’s difficult to
find a room with 600-800 people who are so exuberantly enthusiastic about
information technology as in Karachi. It’s hard to find a fitting analogy
to describe it, but the way they are longing for and absorbing knowledge is as
if you had a room full of sponges and you are holding a water hose at it for an
hour and once you are done, the floor is still dry like a desert. And once you
say “that’s it, thank you for your attention” at the end of a
session, you’ve got 50 people jumping up, running up to the front, bombarding
you with questions. It’s absolutely amazing.
Also amazing is my new friend Arfa
Karim (picture), who is the youngest “Microsoft Certified Professional”
in Pakistan and – by what I have been told – the youngest girl at
that in the world, having achieved the application developer certification with
just 9 years of age. And after talking too her for quite a bit in Karachi this
year, I can say that Arfa certainly didn’t cheat there. She’s really
a C# wizard and she’s got a well developed self-esteem about it.
Speaking of “Microsoft Certified” …
Since May, I proudly carry the title of a Microsoft Certified
Architect after passing a very humbling board review in Redmond. It’s
my first ever Microsoft Certified Anything that I have, so I am very happy to
have it. The Microsoft Certified Architect program, which has only been
announced at TechEd US, is a very interesting and very ambitious program, which
is not primarily about Microsoft technologies and not about someone sitting down
and answering some questions to a program. To become an MCA, you have to be a
well-rounded person, balancing technical, business and people skills and you
have to prove that you’ve done stuff and shipped stuff. Having been
accepted into the circle of the first 50 MCAs is truly a big thing – and given
who the other folks are, I am still not sure whether I am worthy. When I was
sitting on the reviewer side of the certification board in March (they had a boot-up
“chicken and egg” issue – only MCAs can sit on the board, but
what do you do if there are none?) I had several people where I was thinking to
myself “who are you to dare making any judgment about this person?”
since we’ve had several people coming in where you just learn new stuff
with every sentence they’re saying.
From the board review in May I went straight to one of every year’s
favorite “little big conferences” in Portoroz/Slovenia, to
which I’ve been for the 4th straight year. There are just over
2 million Slovenians overall, but Microsoft manages to pull well over 1500
people to a developer and IT pro conference. Translated to the scale of
Germany, we’d have to have 64000 attendees at an event to match that. And
traditionally, Microsoft Slovenia throws one of the best event parties each
year.
Once things settle down at the end of this week and with only one (“the”)
major event left to go in this first half year (TechEd Europe in Amsterdam), I’ll
have to log some of the past months travel experiences for myself here in my
blog and also get back to writing about technology issues. There are a lot of
things that I’ve learned and I’ve actually written a bit of code here
and there that’s worth sharing, but with all the travel I just never
found time to sit down and write about it – sometimes I just need a break
as well. TTYL, gotta catch a flight.
Here’s the raw, not really well documented code drop with the sample
and framework code for my CSI360 and CSI359 talks here at TechEd US. The talks
are today at 5pm (CSI360 – Asynchronous Messaging) and on Thursday at
1:30pm (CSI359 – Handling Transaction Abort Cases). As soon as I find
time, I’ll document the framework classes a bit better here on the blog.
The archive contains, amongst other things, a WSE channel and a
WebRequest/WebResponse set that lets you use MSMQ as an alternate transport for
WSE and/or ASMX. It also has the complete queue listener code for the messaging
series I posted some
months ago.
My blogging backlog is ridiculous. In the past weeks I’ve crossed the
Atlantic several times (with one quick trip to Singapore in addition to that),
had some crazy “one city per day” trips and had to meet deadlines
for whitepapers, articles, and presentations. I guess I travel too much. From
here (Orlando,FL) I will fly straight to the Pakistan Developer Conference in
Karachi (about 24 hours, via Amsterdam and Dubai) and then back home. If all
goes well, I’ll be at home for 2 weeks. That’s a first for this
year, I think.
Download: techEd2005.zip
In the past months I’ve been throwing ideas back and forth with some of
my friends and we’re slowly realizing that “Service Oriented
Architecture” doesn’t really exist.
The term “Service Oriented Architecture” implies that there is
something special about architecture when it comes to service orientation, Web
services, XML, loose coupling and all the wonderful blessings of the past 5
years in this wave. But if you look at it, there really isn’t much
special about the good, old, proven architectural principles once you throw
services into the picture.
I’ll try to explain what I mean. There are five pillars of software
architecture (this deserves more elaboration, but I will keep it short for
now):
·
Edges: Everything that talks about how the network edge of
a software system is shaped, designed, and implemented. SOAP, WSDL, WS-*, IIOP,
RMI, DCOM are at home here, along with API and message design and ideas about
coupling, versioning, and interoperability.
·
Protocols: Which information do you exchange between two
layers of a system or between systems and how is that communication shaped?
What are the communication patterns, what are the rules of communication? There
are low-level protocols that are technically motivated, there are high-level
protocols that are about punting business documents around. Whether you render
a security token as a binary thing in DCOM or as an angle brackets thing is an
edge concern. The fact that you do and when and in which context is a protocol
thing. Each protocol can theoretically be implemented on any type of edge. If
you were completely insane, you could implement TCP on top of SOAP and
WS-Addressing and some other transport.
·
Runtimes: How do you implement a protocol? You pick an
appropriate runtime, existing class or function libraries, and a programming
language. That’s an architectural decision, really. There are good
reasons why people pick C#, Java, Visual Basic, or FORTRAN, and not all of them
are purely technical. Technically, the choice of a runtime and language is
orthogonal to the choice of a protocol and the edge technology/design.
That’s why I list it as another pillar. You could choose to do everything
in Itanium assembly language and start from scratch. Theoretically, nothing
stops you from doing that, it’s just not very pragmatic.
·
Control Flow: For a protocol to work and really for any
program to work, you need concepts like uni- and bidirectional communication
and their flavors such as datagrams, sockets, and queues, which support
communication styles such as monologues, dialogues, multicast, or broadcast.
You need to ideas like parallelization and synchronization, and iterations and
sequences. All of these are abstract ideas. You can implement those on any
runtime. They are not dependent on a special edge. They support protocols, but
don’t require them. Another pillar.
·
State: This is why we write software (most of it, at
least). We write software to transform a system from one state to the next.
Press the trigger button and a monster in Halo turns into a meatloaf, and you
score. Send a message to a banking system and $100.000 change owners. Keeping
track of state, keeping it isolated, current, and consistent or things to
consider. Is it ok to have it far away or do you need it close by? Do you
cache, and replicate it for the purpose? Is it reference data or business data?
Consolidated, preprocessed, or raw? How many concurrent clients have access to
the data and how do you deal with the concurrency? All these are questions that
have to do with state, and only state. None of this is depends on having a
special technology that is being talked through way up above at the edge.
Service orientation only speaks about the edge. Its tenets are about loose
coupling, about independent evolution and versioning of contracts, and about
technology-agnostic metadata exchange. All this is important to make systems
interoperate better and to create systems where the effects of changes to one
of its parts to any other part are minimized.
But none of the SO tenets really speaks about architecture [Sidenote: The “autonomy”
is about autonomous development teams and not about autonomous computing]. When
you look at what’s being advertised as “serviced oriented
architecture”, you see either the marketing-glorified repackaging of
Ethernet, TCP/IP, and LDAP (“Enterprise Service Bus”), or
architectural blueprints that looks strikingly similar to things that people
have been doing for a long time with DCE, CORBA, J2EE, COM, or mainframe
technologies. What’s different now is that it is easier, cheaper and
likely more productive to create bridges between systems. And even that comes
at a significant price at this point. Realistically, the (web) services stacks
yet have to catch up with these “proprietary” stacks in terms of
reliability, security, and performance.
There is Service Orientation – and that’s good. There is
appropriate architecture for a problem solution – and that’s good
too. These are two things. Combining the two is excellent. But “Service
Oriented Architecture” is not an isolated practice. I’ve started to
use “SO/A” to make clear that I mean architecture that benefits
from service orientation.
I understand that there is an additional architectural tier of “service
orientation” that sits at the business/technology boundary. On that
meta-level, there could indeed be something like “service oriented
architecture” along the lines of the service convergence that Rafal, Pat
and myself were discussing
on stage at TechEd Europe last year. But when I see or hear SOA discussed,
people speak mostly about technology and software architecture. In that
context, selling “SOA” as a completely new software architecture
school does not (no longer) make sense to me.
Or am I missing something?
Ron Jacobs has posted
podcasts of two conversations Ron and Arvindra Sehmi and
myself had at Microsoft UK two weeks ago, when we coincidentally ran into each
other there.
|