Morning Coffee 155 – Dueling Conference Edition

  • If you don’t want to watch the video of yesterday’s MIX keynote but still want a sense of what happened, check out Tim Sneath’s keynote liveblog. (via Sam Gentile)
  • Other announcements from Mix day one keynote that I missed (all via Tim Sneath)
  • Quick side note – Installing Silverlight 2 in order to check out the DeepZoom Hard Rock demo was smooth, fast and easy. It’s hard to believe there’s a whole CLR in there.
  • Now on to public stuff I saw @ TechFest:
    • One of the problems with touch screens is that your fingers obscure what you’re trying to touch. Lucid Touch solves this by having you touch the back of the device, while rendering a virtual shadow of your hand – a technique they call “pseudo transparency”. You really need to watch the video to “get” this. It’s not currently feasible – the prototype uses a webcam on a foot long boom to track hand and finger position. However, they expect a future version will have some type of imaging sensors embedded in the body of the device.
    • The Berkeley Emulation Engine version 3 (aka BEE3) (video) is a high powered hardware simulator. Apparently several orders of magnitudes faster than conventional simulation. Frankly, most of this demo was over my head and I’m not really a HW guy. But it sounds really fast.
    • BLEWS or “what the blogosphere tells you about news”. Given my interest in political blogging, it’s not a surprise I was interested in this project. This tool categorizes news stories according to their reception in the political blogosphere. It provides a visualization showing not only how many links from a given ideological sphere there are, but how strong the emotions are running. Kinda like Memorandum on major steroids.
    • Music Steering (video) is an “interactive music-playlist generation through music-content analysis, music recommendation, and music filtering”. Sort of like LastFM + Pandora on your Zune.
    • In-Depth Image Editing (team site) showed some cool photo editing software that reminding me of Microsoft Max.
    • MashupOS (paper) is a set of abstractions to improve the browser security model, allowing for isolation between blocks of code from different sources while still allowing safe forms of communication.
    • MySong (paper, video) “automatically chooses chords to accompany a vocal melody, allowing a user with no musical training to rapidly create accompanied music”. Karaoke singers rejoice! Actually, it’s pretty cool. You can adjust sliders to adjust characteristics of the generated music like “Jazz factor” and “Happy factor”. Actually, I just want a happy factor slider in all my software.
    • I saw some cool projects from the Socio-Digital Systems group and MS Research. My wife is a sociologist and always says there’s no way she could ever get a job in the big house. Maybe after she checks out this team, she’ll stop thinking that.
    • The Worldwide Telescope booth was so crowded that I couldn’t get anywhere near it. From what I could see from standing in the back, it looked fantastic. It’s not live yet, but you can check out the video from the TED conference to get a sense of it.

Morning Coffee 154

  • Did you see yesterday’s Dilbert cartoon? Classic.
  • MIX isn’t the only Microsoft conference this week. It’s also time for the annual MS Research TechFest conference. It actually started yesterday, with a keynote from Rick Rashid and Craig Mundy (available on demand). I’ll be heading up there later today and will blog everything I saw that is public, like I did last year. In the meantime, you can check out some cool MS Research projects on the TechFest video page.
  • Speaking of MS Research, they’ve published the Singularity source code (for academic and non-commercial purposes) on CodePlex. Singularity is research OS “focused on the construction of dependable systems”. I’ve wanted to play with this, but I’ve never had the time. Frankly, that hasn’t changed, but now that it’s available to the community, I’m hoping I can live vicariously thru other people hacking around with it.
  • Some announcements coming out of MIX won’t be a surprise to anyone:
  • Here some primarily “new” news from MIX:.
    • I’m not sure which team owns it, but I’d say the biggest previously-unannounced news was SQL Server Data Services (aka SSDS), a “highly scalable, on-demand data storage and query processing utility services.” In other words, SQL in the sky. There’s a free beta sometime this month you can sign up for. Very cool, though no word on what it’s going to cost. If you’re interested in this, I’d keep an I on the Data Platform Insider blog.
    • John Lam announces the Dynamic Silverlight extension that lets you run DLR languages on Silverlight. Given that they talked about this last year, I’m not sure it’s really “news”, but John provides lots of gory details so it made the cute. But are they really using “DSL” as the acronym for this? Guys, that acronym’s already taken.
    • Mary Jo Foley has a scoop on Silverlight for Nokia Symbian mobile phones.
    • There’s a new beta of Expression Studio 2 as well as a separate Expression Blend 2.5 preview for Silverlight 2. Soma has the details. This isn’t really a surprise, but I hadn’t seen any news on new versions of all the Expression Studio products.

Experience vs. Change

My wife and I usually watch The Daily Show a day late and yesterday was no exception. Hillary Clinton was the guest Monday night in advance of yesterday’s big primaries in Ohio and Texas which Jon Stewart called the “Ultimate Last Final Showdown (Unless Hillary Wins One or Both of the Larger States)”. If you missed it, you can watch the interview online (part 1, part 2).

I haven’t seen much ‘raw footage’ from either Democratic candidate in quite some time, and through most of the interview all I could think was “I may have an Obama flair on my website, but I’d be happy with Hillary”. However, there was a section of the interview where she was trying to draw a distinction between her and Obama that didn’t sit well with me. She’s been on this whole “action not words” kick of late, trying to take the wind out of Obama’s sails. For example, in her speech last night in Ohio, she said this:

Americans don’t need more promises. They’ve heard plenty of speeches. They deserve solutions and they deserve them now.

America needs a president who’s ready to lead, ready to stand up for what’s right even when it’s hard. And after seven long years of George W. Bush, we sure are ready for a president who will be a fighter, a doer and a champion for the American people again.

To be clear, this kind of talk doesn’t bother me on it merits. Some folks aren’t happy with Clinton because she’s “dumpster diving” or they think that she’s ripping the party apart. I think she’s fighting for her political career and I would hope any Democratic candidate would go down swinging as it were. Besides, as Howard Dean said, the negative campaigning we’ve seen so far is a “tea party” compared to what the Republicans will throw at the eventual nominee. I’d also make the argument that it’s better to get as much of this stuff “out there” now so that it’s old news by November. That that doesn’t kill you makes you stronger, right?

However, I do think Clinton is painting herself into a general election corner with this experience vs. change strategy.

I get why Clinton played the experience card – she had to do something to take the wind out of Obama’s sails after 11 straight victories. If the popular primary vote results from Tuesday are any indication, the experience message is working for her. So I would expect we’ll hear a lot more about how we “don’t need more promises” but that we need a president “who’s ready to lead” in the next seven weeks ahead before the Pennsylvania primary.

However, if she does win the nomination, she’ll have to to argue the exact opposite position in the general election. I’m certainly no fan of McCain, but there’s no question his 25 years in Washington will cast him as the “experience” candidate (even though he hasn’t accomplished much in that quarter century). Plus, with the Howard Dean already framing McCain as “four more years of George Bush”, it’s pretty obvious either Democratic candidate will be cast as the “change” candidate.

Will Clinton have credibility running as the candidate for change when she’s spent the spring arguing that experience matters most? I don’t know. Combined with the rabid anti-Clinton (both her and her husband) emotions her candidacy is assuredly going invoke among conservatives, I’m much more concerned about her ability to win in November than Obama’s.

In the end, I doubt it will matter. Obama’s roughly 160 pledged delegate lead seems pretty insurmountable. Even with Clinton’s impressive victories yesterday, estimates are that she’s going to only net around ten delegates total, meaning the delegate math is largely unchanged. With only 561 delegates left in the remaining twelve contests, she would need to win almost 65% of the remaining delegates just to draw even. Frankly, that’s not possible given proportional delegate allocation method that Democrats use. At this point, her only hope is to cut the margin as much as possible and hope the undeclared superdelegates break her way. Hope isn’t a strategy, but I don’t see how she has any other option.

Kitchen Sink Variability

Nick Malik forwarded the last ZapFlash newsletter to me. I gave up on analyst newsletters like this long ago, but Nick shared it with me because it “hit directly on what [Nick] thinks an ESB is and does, and why an ESB is not a hub.” I’m not a fan of the whole ESB concept and frankly this article didn’t do much to change my opinion. However, this passage did sorta jump out at me.

[T]he main concept of SOA is that we want to deal with frequent and unpredictable change by constructing an architectural model, discipline, and abstraction that loosely-couples the providers of capability from the consumers of capability in an environment of continuous heterogeneity. This means that we have to somehow develop capabilities without the knowledge of how they might be used…[T]his means that we need to have significant variability at a variety of aspects including the implementation, infrastructure, contract, process, policy, data schema, and semantic aspects. Having this variability allows companies to have stability in their business and IT even though the IT and business continue to change. Agility, predictability, reliability, visibility, and cost-effectiveness all become that much more realistic when we can achieve that sort of abstraction.

My reading of this is that the author, Ronald Schmelzer, is advising organizations to introduce “significant variability at a variety of aspects” in their services in order to deal with what he openly admits is “unpredictable change”.

This sounds like a mind-boggling awful idea to me.

At it’s heart, any practical design – including a service-oriented one – needs to be an exercise in tradeoff analysis. You can’t add “significant variability” without also adding significant complexity, effort, time and cost. So the real question is: Is the significant variability Ronald describes worth the inevitable tradeoff in significant time, effort, cost and complexity?

I seriously doubt it.

Since unpredictable change is – by definition – unpredictable, you have no way of knowing if you will actually need any specific aspect of variability down the road. Ronald’s strategy – if you can call it that – seems to be let everything he can think of vary except the kitchen sink. That way, when said unpredictable change happens, you might get lucky and have already enabled the variability you need to handle the change with a minimum of effort.

Getting lucky is not a strategy.

Chances are, a specific aspect of variability won’t ever be needed. In other words, most of the the time, effort and money you spent building these aspects of variability will be wasted. And remember, this isn’t just a one time cost – the increased complexity from including this significant variability means you’ll pay the price in additional time, effort and money every time you have to change the system.

I wonder if Ronald is familiar with the term “You Aren’t Gonna Need It“. He talks about increasing business agility, but he eschews many of the principles of agile development. I realize they aren’t the same thing, but I have a hard time believing that they are so diametrically opposed that a core principle of agile development should be readily violated in order to enable business agility.

Maybe it’s cliche, but I try to always come back to “What’s the simplest thing that could possibly work?”. I would think that building a ton of currently-unnecessary variability into your system on the off chance that someday you’ll need it fails the “simplest thing that could possibly work” test spectacularly.

Personally, given the choice of taking advice from Ward Cunningham or pretty much any enterprise analyst on the planet, I’ll pick Ward every time.

Play Ball Script in F#

Scott Hanselman wanted an F# version of this Play Ball! round-robin scheduling PowerShell script. Here’s what I came up with:

let randomize list =
    let random = new System.Random()
    let list'=  
        list  
        |> List.map (fun i -> (random.Next(), i))
        |> List.sort (fun (i1,_) (i2,_) -> Int32.compare i1 i2)  
    let (_,list'') = List.unzip list'
    list''

let rec makeGames teams =
    match teams with
    | first :: rest ->
        [for team in rest -> (first, team)] @ (makeGames rest)
    | [] ->  []

let teams = ['a'..'f']
let games = teams |> makeGames |> randomize

MakeGames uses pattern matching to see if the list of teams is empty or not. If the list is empty, we simply return an empty list of games. If not, we use F#’s list comprehension syntax to generate a list of games between the first team in the list and each of the remaining teams. This list is combined (via the ‘@’ operator) with the results of calling makeGames recursively. This generates the un-randomized list of games.

Once we have the list of games, we need to randomize it. I ported the randomize function above over from a version I found in Erlang. Basically, it attaches a random number to each element in the list to be randomized, sorts by those randomly generated numbers, then throws the numbers away and returns the just the randomized list. Note, the Erlang version I referenced runs randomize log(length of list) times to ensure a fair shuffle, but I thought once would be enough for this simple script.

(Note to F# team: perhaps List.randomize should be a part of the standard F# library?)