Passion * Technology * Ruthless Competence

Thursday, January 31, 2008

Morning Coffee 141 - Lang.NET '08 Edition

header I was hoping to blog my thoughts on Lang.NET as the event went along. Obviously, that didn't happen, though I was pretty good about dumping links into my del.icio.us feed. The talks were all recorded, and should be up on the website in a week or two. Rather than provide a detailed summary of everything that happened, here are my highlights:

  • The coolest thing about conferences like this is what John Rose called "N3" aka "Nerd-to-Nerd Networking". It was great to meet in person, drink with and geek out with folks who's blogs I read like Tomas Petricek, Wesner Moise and Larry O'Brien. Plus, I got to meet a bunch of other cool folks like Gilad Bracha, Stefan Wenig and Wez Furlong. That's worth the price of admission (which was admittedly nothing) right there.
  • Coolest MSFT talk: Martin Maly "Targeting DLR". I was wholly unaware that the DLR includes an entire compiler back end. Martin summarized the idea of DLR trees on his blog, but the short version is "you parse the language, DLR generates the code". That's pretty cool, and should dramatically lower the bar for language development. Of course, I want to write my parser in F#, so I'm going to port the DLR ToyScript sample to F#.
  • Runner-up, Coolest MSFT talk: Erik Meijer "Democratizing the Cloud with Volta". Erik is a great speaker and he really set the tone of his session with the comment "Division by zero is the goal, not an error". He was referring to an idea from The Change Function that user's measure of success is a function of perceived crisis divided by perceived pain of adoption. Erik wants to drive that adoption pain to zero. It's a laudable goal, but I remain unconvinced on Volta.
  • Coolest Non-MSFT talk: Gilad Bracha "Newspeak". Newspeak is a new language from one of the co-authors of Java. It's heavily smalltalk influenced, and runs on Squeak. He showed developing PEGs in Newspeak, and they were very compact and easy to read, easier even than F#. He calls them Executable grammar, and you can read his research paper or review his slides on the topic. Unfortunately, Newspeak isn't generally available at this time.
  • Runner-up, Coolest Non-MSFT talk: Miguel de Icaza "Moonlight and Mono". The talk was kinda all-over-the-place, but It's great to see how far Mono has come. Second Life just started beta testing a Mono-based script runner for their LSL language (apparently, Mono breaks many LSL scripts because it runs them so fast). He also showed off Unity, a 3D game development tool, also running on Mono.
  • Resolver One is a product that bridges the gap between spreadsheets and applications, entirely written in IronPython (around 30,000 lines of app code and 110,000 lines of test code, all in IPy). Creating a spread-sheet based app development environment is one of those ideas that seems obvious in retrospect, at least to me. If you do any kind of complicated spreadsheet based analysis, you should check out their product.
  • If you're a PowerShell user, you should check out PowerShell+. It's a free console environment designed for PowerShell and a damn sight better than CMD.exe. If you're not a PowerShell user, what the heck is wrong with you?
  • Other projects to take a deeper look at: C# Mixins and Cobra Language.
  • I thought my talk went pretty well. It's was a 15 minute version of my Practical Parsing in F# series. Several folks were surprised I've been coding F# for less than a year.
Posted By Harry Pierson at 10:25 AM Pacific Standard Time

Tuesday, January 29, 2008

Practical F# Parsing: Recursion and Predicate Functions

To prep for my Lang.NET talk, I went back and reviewed my PEG parser. One thing I was not happy with was that all the recursion was handled in a one-off manner. When I needed to match multiple characters in the comment rule, I wrote a special one-off function to recursively process the comment until it reached an EOL. When I needed to parse a series of ranges, characters or definitions, I wrote special one-off functions to handle that recursion. Obviously, that's not the best approach. So, I wrote the following active pattern functions to handle recursion.

//ZOM == Zero Or More   
let rec (|ZOM|) f input = 
    match f input with 
    | Some(i,input) -> 
        let j,input = (|ZOM|) f input
        (i :: j, input)
    | None -> [], input

//OOM == One Or More       
let (|OOM|_|) f input = 
    match (|ZOM|) f input with
    | [], input -> None
    | v, input -> Some(v,input)
    
//ZOO == Zero Or One
let (|ZOO|) f input = 
    match f input with 
    | Some(i,input) -> Some(i), input
    | None -> None,input

With these functions at the ready, I can stop writing one-off recursion functions. Instead, I write a function that matches a single item, which I pass as an argument to one of the three functions above. For example, here is the original and new version of the top level Grammar function.

//Original version
let (|Grammar|_|) input =
    let rec ParseDefinitions dl input =
        match input with
        | Definition (d, input) -> 
            ParseDefinitions (dl @ [d]) input
        | _ -> Some(dl, input)
    let (|OneOrMoreDefintions|_|) input = 
        match input with
        | Definition (d, input) -> ParseDefinitions [d] input
        | _ -> None
    match input with
    | Spacing (OneOrMoreDefintions (dl, EndOfFile)) -> 
        Some(List.to_array dl)
    | _ -> None
    
//New Version   
let (|Grammar|_|) = function
    | Spacing (OOM (|Definition|_|) (dl, EndOfFile)) ->
        Some(List.to_array dl)
    | _ -> None

The new version is much shorter, because there's already a function to match a single definition, which we can pass into OneOrMore (aka OOM). Note, when I pass an active pattern function as a parameter, I have to use it's real name (with the pipes and parameters). Having to use the real name is pretty ugly, but F# need to be able to differentiate between using a function as an active pattern vs using it as a function parameter. If you could just call "OOM Definition (dl, EndOfFile)", would F# realize Definition is a parameter?

I also defined syntactic predicate functions. If you'll recall, these syntactic predicates will try to match but automatically backtrack, returning success or failure depending on which function you called.

//FP == Failure Predicate
let (|FP|_|) f input =
    match f input with
    | Some(_) -> None
    | None -> Some(input)

//SP == Success Predicate
let (|SP|_|) f input =
    match f input with
    | Some(_) -> Some(input)
    | None -> None

To see this in action, here's the original and updated Primary function. Only the first rule is relevant, so I've omitted the others.

//Original version
let (|Primary|_|) input = 
    let (|NotLEFTARROW|_|) input = 
        match input with 
        | LEFTARROW (_) -> None 
        | _ -> Some(input) 
    match input with 
    | Identifier (id, NotLEFTARROW (input)) ->  
        Some(Primary.Identifier(id), input) 
    //rest of function omitted for clarity

//new version
let (|Primary|_|) = function 
    | Identifier (id, FP (|LEFTARROW|_|) (input)) -> 
        Some(Primary.Identifier(id), input) 
    //rest of function omitted for clarity

Instead of writing a special function to match "not left arrow", I just pass the left arrow function as a parameter to Failure Predicate (aka FP). With these recursion and syntactic predicate functions, I was able to remove all the one-off recursion functions from my parser. (Note, I posted an updated version of PegParser on my SkyDrive so you can see this in action.)

These five functions significantly reduced the complexity of the code. Unfortunately, I'm not sure it's much easier to read. The conciseness is offset IMO by the ugliness of using the active pattern's true names. Also, I would have liked to use custom operators for these five functions, but operators aren't allowed to be active pattern functions. Hopefully, that will change at some point in the future, though if we're going to dream of better syntax, can we do something about all the parens? Personally, I'd love to be able to write the following:

//This doesn't work, but I can dream, can't I?
let (|Primary|_|) = function  
    | Identifier (id) !!LEFTARROW (input) -> 
        Some(Primary.Identifier(id), input)  
    //rest of function omitted for clarity
   
let (|Grammar|_|) = function 
    | Spacing ++Definition (dl) EndOfFile -> 
        Some(List.to_array dl) 
    | _ -> None

Note to self, talk to F# team members who come to LangNET about this...

Posted By Harry Pierson at 9:40 AM Pacific Standard Time

Monday, January 28, 2008

Morning Coffee 140

  • I only posted one Morning Coffee post last week. It wasn't a lack of content, it was a lack of drive on my part. I had 20-30 items flagged in my news reader, but for some reason I couldn't work up the interest in posting them. So some of these are a bit old.
  • I'm at the Language.NET Symposium this week, so look for lots of language blogging. I've already chatted with Tomáš Petříček and John Lam. If someone kicks Ted Neward's ass because he hates Perl, I'll try and liveblog it.
  • Speaking of Ted Neward, he discusses the question "Can Dynamic Languages Scale?" without devolving into a flame-fest. I agree 100% with his point about the difference between performance scaling and complexity scaling. Personally, I tend to err on the side of better complexity scaling, since buying hardware is easier than hiring developers.
  • Nick Malik responds to me calling his shared global integration vision flawed. He points to NGOSS/eTOM as an example of a shared iterative model that works. I know squat about that shared model, so I'll refrain from commenting until I do a little homework on the telco industry.
  • Speaking of shared interop models, Microsoft is joining DataPortability.org. Dare Obasanjo and Marc Canter are skeptical that so far this effort is all hype and no substance. Reminds me a bit of AttentionTrust.org. But if DataPortability.org can get off the ground, maybe there's hope for Nick's vision (or vis-versa).
  • Don Syme lists what's new in the latest F# release. As I said, this release is pretty light on features. Hopefully, I'll get some details
  • Tomas Restrepo shows how to change your home folder in PowerShell. I need to do this.
Posted By Harry Pierson at 9:10 AM Pacific Standard Time

Tuesday, January 22, 2008

Nick's Flawed Vision of a Shared Integration Model

Of all the things you might say about Nick Malik, "thinks small" is not one of them. He takes on a significant percentage of the .NET developer community over the definition of Mort. He wants to get IT out of the applications business. He invents his own architecture TLA: SDA (aka Solution Domain Architecture). He's a man on a mission, no doubt. And for the most part, I'm with him 110% on his ideas.

However, when he starts going on about a shared global integration model, I start to wonder if he has both hands on the steering wheel, as it were.

Nick's been talking about this for over a year. As he points out, SaaS integration layer is the new vendor lock-in. One of the attractions of SaaS is that you could - theoretically, anyway - switch SaaS application providers easily which would drive said SaaS companies to constantly innovate. However, if the integration layers aren't compatible, the cost to switch goes up dramatically, leaving the customer locked-in to whatever SaaS company they initially bet on - even if that bet turns out to be bad.

OK, I'm with him so far. Not exactly breaking news here - we've seen the same integration issues inside the enterprise for decades. SaaS adds new wrinkles - if your ERP vendor goes belly-up, they can't take your data with them or worse sell it to your competition - but otherwise it sounds like the same old story to me.

However, where Nick loses me is when he recommends this solution:

"To overcome this conflict, it is imperative that we begin, now, to embark on a new approach. We need a single canonical mechanism for all enterprise app modules to integrate with each other. If done correctly, each enterprise will be able to pick and choose modules from different vendors and the integration will be smooth and relatively painless."

Yeah, and if a frog had wings, it wouldn't bump its ass when it hopped.[1] There are so many things wrong with this approach, I'm not sure I can get them all into a single web post.

First off, it won't, in fact, be done correctly - at least, not the first time. I realize everyone knocks MSFT for never getting an application right before version 3.0, but I believe it's actually systemic to the industry. Whatever you think you know about the problem to be solved, it's at best woefully incomplete and at worst wrong on all counts. So getting it right the first time is simply not possible. Getting it right the second time is very unlikely. It isn't until the third time that you really start to get a handle on the problem you're really trying to solve. Getting an effort like this off the ground in the first place would be a Herculean task. Keeping it together thru a couple of bad spec revisions would be impossible.

Meanwhile, the vendors aren't going to be waiting around twiddling their thumbs waiting for the specs to be done. We've seen efforts to unify multiple completing vendors around a single interoperable specification. By and large, those efforts (UNIX, CORBA, Java) have been failures. The technologies themselves haven't been failures, but the idea that there was going to be "relatively painless" portability or interoperability among different vendors never really materialized. If it didn't work for UNIX, CORBA or Java, what makes Nick think it will work for the significantly more complex concept of a shared global integration model? Not only more complex in terms of spec density, but the mind-boggling number of vendors in this space.

Nick is worried that either "we do this as a community or one vendor will do it and force it on the rest of us." But if you look at how specifications evolve, retroactive realization of defacto standards is the way the best standards get created. For example, I could argue that TCP was forced on us by the US Military, but I don't hear anyone complaining. I realize there's a big difference between having a vendor force a spec down our throat vs. a single big customer, but either way it's not designed by committee. Besides, if we do see get an enterprise integration standard forced on us, I don't believe it will be the vendors doing the forcing. If I were a betting man, I'd bet on Wal-Mart. Business leverage trumps IT leverage and Wal-Mart has more business leverage than anyone in this space these days.

BTW, would design-by-committee be an extreme example of BDUF? Do we really want to develop a this critical integration model using the same process that produced the XSD spec?

Finally, Nick thinks that this model will improve innovation, where I think it will have the exact opposite effect. Once you lay a standard in place, the way you innovate is to build proprietary extensions on top of that standard. However, by definition, these extensions aren't going to be interoperable. If someone has a good idea, others will copy it and eventually it will become a defacto standard.

A recent example of the process of defacto standardization is XMLHttpRequest. Microsoft created it in 1999 for IE 5, Mozilla copied it for their browser a couple of years later, followed by the other major browser vendors. Google innovated with it, Jesse James Garrett coined the term AJAX, everyone else started doing it and then finally - nearly a decade later and still counting - a standards body is getting around to putting their stamp of approval on it.

However, if you're worried about painless integration and not having something forced on you by some vendor, then you're not going to embrace these innovations - which means, you won't embrace any innovation. Well, there may be some innovation in the systems themselves that doesn't affect the interface, but once that interface is cast in stone, the amount of innovation will go way down. How do vendors differentiate themselves? There's only two ways: price and innovation. Take away innovation with standardization, and you're left with a race to the rock bottom price with no incentive to actually improve the products.

I get where Nick is going with this. He looks around our enterprise and sees duplication of effort and massive resources being spent on hooking shit together. It sure would be nice to spend those resources on something more useful to the bottom line. But standardizing - or worse legislating - the problem out of existence isn't going to work. What will? IMO, applying Nick's ideas of Free Code to interop code. If we're going to get IT out of the app business, can't we get out of the integration business at the same time?


[1] It's exceedingly rare that you get to quote Wayne's World or Raising Arizona in a discussion about Enterprise Architecture, much less both at the same time. Savor it.

Posted By Harry Pierson at 1:56 PM Pacific Standard Time

Monday, January 21, 2008

Caps 6, Penguins 5 (SO)

NHL.com Game Summary NHL.com Game Recap

It wasn't a pretty win, but I'll take the two points just all the same. Especially given the long history Washington has of losing to the Penguins - they had lost the past six meetings before tonight. Japers' roundup mirrors my own thoughts, though On Frozen Blog's roundup was funnier - they made a drinking game out of the number of times the on-air announcers referenced Sid the Kid. Certainly, there's no love lost for Crosby among Caps fans, but the amount of on-air time spent discussing an injured player bordered on ridiculous - Sid the Kid was mentioned 27 times by OFB's count + five in the post game. Worst was probably Malkin's first goal - he hadn't even stopped celebrating and the announcer was already talking about Crosby.

Caps were pretty dreadful on special teams tonight. Pens had three goals on eight penalties while the Caps had only went one for six. However, the penalty kill came thru in overtime overtime with the Caps down 5-3 for 1:07. The Caps won both defensive zone face offs and blocked four shots - Quintin Laing had three of those blocks - and kept the Pens from registering a shot on goal for the entire power play. That was money. If they gave out game stars to unsung heroes, Laing would have gotten one.

For all the great young talent on the Caps, there's got to be real concern about goaltending. I love Olie the Goalie, but he didn't get it done tonight. The Penguins had a grand total of 15 shots (14 if you don't count the one from beyond the blue line with one second left in overtime). 5 goals on 15 shots == a pretty crappy save percentage. Malkin's first goal was very impressive skating, but he didn't so much shoot as throw the puck at the net. And letting Talbot's  open the scoring by stuffing the puck in at the post was weak sauce as it were. I'm not so much worried about it for this season, but with Kolzig talking retirement as his struggles, I'm not sure who the Caps have in the pipeline between the pipes. 

It sure was fun getting to watch an entire Caps game in its entirety with my family. Patrick and Riley watched most of it. Patrick wanted to know who the bad guys were - he figured it out after I pointed out the Penguins were wearing black...like Darth Vader. :) Julie wanted to know how I'd handle it if Patrick grew up to be a professional hockey player, but was drafted by Pittsburgh. My love for Paddy Boy far exceeds my hatred for the Penguins, though that's the only scenario I could imagine rooting for the Penguins. My boy Patrick, however, protested and said he wanted be a Capital and play with Alex the Great. Patrick will be 18 by the time Ovechkin's contract is over. It could happen. Guess I gotta teach him to skate!

Posted By Harry Pierson at 10:42 PM Pacific Standard Time

Morning Coffee 139

  • Big news on the WGA strike front: the AMPTP reached a deal with the Directors Guild last weeks. Initial reaction from United Hollywood is mixed, but I'm hopeful this will at least get the AMPTP / WGA talks started again.
  • Speaking of new media, Xbox 360 Fanboy has a rundown of 45 short films from Sundance that are getting released on Xbox Live Marketplace. That's pretty a-typical content for XBLM. Typically, new content on XBLM has been from "Hollywood Heavyweights". I'm pretty excited to see them branch out content wise.
  • Speaking of Xbox 360, seems they had a good year. Congrats!
  • Still speaking of Xbox 360, everyone gets a free copy of Undertow this week.
  • Scott Guthrie announces the availability of the .NET Framework Source Code. Shawn Burke has instructions for how to use it with VS08. So far, they've made the core base class libraries, ASP.NET, Windows Forms, WPF, ADO.NET and XML available. LINQ, WCF and WF are expected to become available "in the weeks and months ahead".
  • Ted Neward wonders if Java is "Done" like the Patriots, or "Done" like the Dolphins? If you want my opinion (I'm guessing yes, since you're reading my blog), definitely done like the Dolphins. OpenJDK was a desperation move to make Java "cool" again, but it won't work. People who want an open source stack are using LAMP and language wonks who saw Java as mainstream SmallTalk have moved on to Ruby. The question will be if Sun buying MySQL will make Sun cool or MySQL uncool by association. I'm guessing the latter.
  • Speaking of Ted, he's got a great post about the relevance of game programming to the mainstream or enterprise developer.
  • Speaking of game development, David Weller points to all the new XNA GS 2.0 content up on Creators Club Online.
  • There's a new version (1.9.3.14) of F# out, but no announcement from Don regarding what's new. I reviewed the release notes, seems like this is primarily a bug-fix release with only very minor feature additions.
  • Speaking of F#, Don points to Greg Neverov's implementation of Software Transactional Memory in F#. This immediately reminded me of Tim Sweeney's Next Mainstream Programming Language talk. Tim suggested said language would need to support a combination of side-effect free functional code and software transactional memory. F# is looking to be closer to that language all the time.
  • Still speaking of F#, Don Syme's Expert F# book is out. I read the draft version - it rocks - but I'm still going to get my own real copy. You should too.
  • With their win Saturday, the Caps are back to .500 for the first time since late October. Since Thanksgiving, the Caps are 15-7-4. Only four teams in the league have a better record over that time span. We play one of them tonight - the Penguins - and it's on Versus, so I'll even get to see it. In HD no less.
Posted By Harry Pierson at 9:34 AM Pacific Standard Time

Sunday, January 20, 2008

365 and Counting

Steve Benen points out:

You may have noticed, on bumpers or t-shirts, the “1.20.09” slogan. It denotes, of course, Inauguration Day for Bush’s successor.

I just thought I’d mention that after seven painful years, the Bush presidency will end exactly one year from today. It’s obviously something to look forward to.

It’s an awkward period in Democratic politics right now — a contentious presidential primary, a frustrated Democratic Congress — but looking at the light at the end of the tunnel, and knowing it’s probably not a train, might serve as a morale booster.

From the morale perspective, it's worth noting the voter turnout in the primaries so far. Yesterdays' Democratic Nevada primary is the third in a row to set turnout records. On the Republican side, Benen points out that McCain won South Carolina yesterday with a 135,000 votes but eight years ago, he got nearly 100,000 more votes in a losing effort. By my calculation, Republican South Carolina turnout was 30% less than it was in 2000.

Voter turnout in early primaries doesn't make this election a sure thing by any means, but it sure is an encouraging sign.

Posted By Harry Pierson at 9:03 AM Pacific Standard Time

Wednesday, January 16, 2008

Morning Coffee 138

  • In writers strike news, the WGA has made side deals with Worldwide Pants (aka Dave Letterman's company), United Artists (aka Tom Cruise's company) and The Weinstein Company (previously known as Miramax). The WGA strategy of divide and conquer seems to me making slow progress. Update: The Weinstein Company was founded by Miramax's founders Harvey and Bob Weinstein after they left Miramax. But Miramax is still around. Thanks to GrantC for the correction.
  • They're still two games under .500, but the Caps completed a season sweep of the Eastern Conference leading Ottawa Senators last night. They're only 3 games out of the top spot in the (admittedly very weak) Southeast division
  • Big tech news today isn't coming from MSFT-land. Sun is buying MySQL and Oracle is (finally) buying BEA. Both deals seem like pretty significant culture clashes, though Sun/MySQL seems like the better fit of the two.
  • There's a new draft of Service Modeling Language 1.1 available. If you'll recall, this used to be called the System Definition Model, part of the Dynamic Systems Initiative. Hadn't heard anything from those folks in a while, good to see they're making progress.
  • Stephan Tolksdorf dropped me a line to tell me he was able to "vastly simplify" FParsec, and as a result it now runs on the current version of F#. Awesome!
  • Speaking of F#, Scott Hanselman has a new F# podcast, this time interviewing Dustin Campbell. Check out all of Dustin's F# posts.
  • I didn't know about the "Copy as Path" feature in Vista. Why is it hidden?
  • I was a big fan of the WDS deskbar shortcut feature - a feature that is missing in Vista. Enter Start++ by Brandon Paddock, which adds shortcuts to Vista's search box. It also supports "iPhone apps" and scripting. But JScript? Where's the PowerShell love, Brandon?
  • EA released the source code to the original SimCity under the GPL. Bil Simser is digging into the code and it looks like he's going to port it to XNA. (via Ozymandias)
  • Wes Haggard has published the source code to CodeHTMLer on CodePlex. He took two updates from me: the F# language definition as well as the ability to choose the font when not using PRE tags.
Posted By Harry Pierson at 11:14 AM Pacific Standard Time

Friday, January 11, 2008

Superman Signed

Big news yesterday for Washington Capitals fans. Alex "the Great" Ovechkin (aka Superman) signed the biggest contract in NHL history - $124 million over 13 years. According to Eric McErlain, that's an average of over $300k per hour of ice time and $5k per shift. Nice work if you can get it.

Actually, all kidding aside, this is a great move for the Caps.

The financial bar was set last summer when Sid "the Kid" Crosby signed a 5-year $43.5 million contract extension - about $8.7 million a season. Since then, Caps fans have had to suffer thru rumor after rumor that our man Alex wasn't going to be playing in DC much longer. However, the suggestion that Ovechkin would be leaving never made any sense to me. He was slated to become a restricted free agent this summer - meaning the Caps would have the opportunity to match any offer. Furthermore, the max any player can get under the new CBA is 20% of the salary cap - currently about $50 million. So it was pretty obvious Ovechkin was going to stay a Cap and get paid somewhere between $8.7 and $10 a season. 

More impressive than the dollars is the length of the contract. Not only is it the wealthiest in the league, it's the second longest (Islanders goalie signed a $67.5 million 15 year contract before the start of last season). This contract means Ovechkin is slated to spend at least 16 years in a Caps uniform. In this era of free agency, more often than not you end up "rooting for the laundry" since the players come and go so quickly. It's nice to know the #8 Caps jersey I got for Christmas will be relevant until the 2020's.

Also, signing Ovechkin for that long makes massive financial sense, even if some "experts" can't (won't) see the value. The salary cap increased from $39 million for the 2005-06 season to $50 million this season. Can the league sustain 13% revenue growth for the foreseeable future? If so, the salary cap will be in the $100 million range by the time Crosby's deal expires. Even if revenues only grow at half that rate, we're still looking at a salary cap in the low $70 millions by 2013. So Crosby will be looking to make at least $14 million and maybe as much as $20 million per season when he resigns. Viewed that way, getting Ovechkin for "only" $9.5 mil a season makes good financial sense.

Of course, the last time the Caps committed this kind of money to a superstar, it didn't work out so well. But unlike Jagr, who got his new contract before skating shift one for the Caps, we know what #8 can do while wearing the Eagle. Owner Ted Leonsis isn't paying for potential on blind faith, he knows what Ovechkin can do and how much he means to this team. Based on the past two and 1/2 seasons, I think Leonsis is getting his money's worth.

Speaking of Ted, my father ran into him @ the seasons ticket holder's event they held last night. When he mentioned that he's "Devhawk's Dad", Ted recalled how I "reamed him a new one" as well as meeting me. For the record, I still think trading Bondra was a mistake, though time has demonstrated it was a fairly minor one. More importantly, it was an isolated mistake. Since then, I think Ted and the Caps have done almost everything right, both on and off the ice. If you're reading this Ted, keep up the good work and I take back that whole "abomination to the sport of hockey" thing.

And don't look now, but the Caps are 12-6-4 since the changing coaches. Had they been playing at that pace all season, they'd have around 55 points and the second best record in the Eastern Conference right now. Good to know, but not very relevant since they did, in fact, start the season 6-14-1. However, if they can stay on this pace for the second half of their season, they would end with around 93 points - probably enough to get them in the playoffs. (Last year's eighth seed ended with 92 points.) Furthermore, Carolina currently leads the Southeast Division, but they're only on pace to reach 86 points. So even with the horrific start, the Caps are still poised to make a playoff run.

In the press release announcing the contract, Alex is quoted saying "I want to bring the Stanley Cup to Washington". Even if they do make the playoffs, I think the Caps are still a year or two away from honestly being competitive for the Cup - though I'd love to be wrong about that. Either way, it's nice to know Alex has 13 years to make the Caps' Stanley Cup dreams a reality.

To quote Mike Vogel, "It feels like morning in Washington." I may be displaced in the "wrong" Washington, but I feel it just the same.

Posted By Harry Pierson at 10:20 AM Pacific Standard Time

Wednesday, January 09, 2008

Morning Coffee 137

  • Note, I somehow duplicated Morning Coffee 135. So I've skipped 136 to make up for it.
  • Congrats to Hillary Clinton for her unexpected win in the New Hampshire primary. As I said last week, I think Obama has a better chance of winning in November, but I've got nothing against Clinton or her politics.
  • Speaking of winning, congrats to LSU on winning the BCS. Are they the best team in college football? Personally, I don't think so - there are at least three other teams (Georgia, West VA and of course USC) who can make a persuasive argument that they should be #1. But losing to teams like Penn Pitt and Stanford, neither WVA and USC have an argument they should have been in the championship game. But that's what makes the BCS such BS. If nothing else, at least the "we need a playoff" meme is picking up steam.
  • This is sort of cool: Eye-fi is a wireless enabled SD card so you can wirelessly upload pictures from your camera to your PC or favorite photo service. However, I think the price needs to come down a bit. I recently bought a 2GB SD card for my wife's new camera for $20. A 2GB Eye-fi card is $99. Not sure wireless upload is worth 5x per card.
  • With all the focus on LINQ providing type-safe queries, it's easy to forget that some apps do need to build their queries at run time. Scott Guthrie points at a Dynamic LINQ C# sample (also available for VB) that builds LINQ expression trees from strings. It kinda takes you back to the bad-old-days of embedding SQL strings in your code, but there are scenarios - especially BI scenarios - where you need this capability.
  • Soma announces the VC++ 2008 Feature Pack Beta. This is the long-awaited (by who?) MFC update as well as support for the C++ TR1. TR1 provides some FP-esque support like function objects and tuples, so maybe this is worth a look. On the other hand, given that much (all?) of TR1 is lifted from Boost, maybe we should just use that.
  • Speaking of cool libraries, check out C5 (aka the Copenhagen Comprehensive Collection Classes for C#). It's basically a complete redesign of System.Collections.Generic (or SCG as they call it). I've read thru their online book and I'm very impressed. Of course, with me focused on F# of late, I'm primarily using immutable collections, so I'm not sure how much use I have for C5 right now.
  • There was a free CoDe magazine in my DevTeach bag back in November with a fascinating article on where LINQ goes from here - LINQ 2.0 if you will. One of things the article discusses is tier-splitting, which has seen the light of day in Volta. Will Volta also deliver External Relationships, Reshaping Combinators and Join Patterns or will those come from different projects?
  • I had to pave my workstation yesterday. I was running an interim build of Vista x64 SP1 and I couldn't make Virtual Server work with it. As part of the repave, I discovered I needed to update the firmware of my SCSI controller, but the update had to run under DOS. Freaking DOS? My workstation doesn't even have a floppy drive to boot DOS from! However, I was able to boot from a USB thumb disk instead. That's damn useful.

Monday, January 07, 2008

Morning Coffee 135

  • Bill Gates does his last CES Keynote, and we announce a PC that looks like a purse?
  • News that Warner Brothers is going exclusively Blu-Ray is disappointing. However, I'm convinced that neither side will win this format war but that online downloads will trump both. Obviously, XBLM is a significant player in this space, but the market is crowding up quickly. Netflix apparently will unveil a new set-top box @ CES to let you watch HD movies via the Internet.
  • Don Syme has a roundup of posts by John Liao about F#. Mostly, WPF + F# with a couple of ASP.NET 2.0 posts and one on XML .
  • Speaking of F#, Stephan Tolksdorf has been working on an F# port of MS Research's Parsec library called FParsec. Parsec is a "monadic parser combinator library", something I have little experience with, so I've gone back to some source research on the topic, which I hope to blog at length about soon.
  • Steve Vinoski talks about serendipitous reuse in his latest Internet Computing article. I'm not a believer in reuse in the enterprise, serendipitous or otherwise, but I liked the conclusion to Steve's article when he wrote "It's highly ironic that many enterprise architects seek to impose centralized control over their distributed organizations. In many cases, such centralization is a sure recipe for failure." Also, his point that "control without controlling" works sounds vaguely familiar.
  • Update - This is really Morning Coffee 136, but I don't want to change the title since it's part of the URL
Posted By Harry Pierson at 10:29 AM Pacific Standard Time

Friday, January 04, 2008

Morning Coffee 135

  • Congrats to Barack Obama for walking away with the Iowa Democratic Caucus, which set turnout records. Frankly, I'm pretty cool with any of the democratic front runners but I think Obama has the best chance of winning in November. I'm not sure Edwards second time around will be any more successful than the last and I believe Clinton would drive the GOP GOTV campaign better than any of the actual GOP candidates would.
  • Obviously, I like to play M-rated games like Bioshock and Mass Effect. But I also like games I can play with my kids like Lego Star Wars. There are two new Lego games coming out this year: Lego Indiana Jones and Lego Batman. I can't wait.
  • Speaking of gaming, Xbox LIVE had some issues over the holiday break, due to record setting sign-ups and concurrent users. Record setting numbers is a nice problem to have if you're on the business side, but a not-so-nice if you're a customer or work in operations. The XBL GM announced they're offering a "token of appreciation" for everyone's patience - a free XBLA game. Assuming it's not a crappy game, it's a classy move.
  • I watched Transformers on HD-DVD last night. Fun movie with lots of action, but man is it dumb. John Turturro is the only real stand-out.
  • Dustin Campbell implements cons, cdr and car from Scheme in C# and VB. While of limited production value (Dustin specifically warns readers not to use any of his code), it really demonstrates how different the functional world is from the object/imperative one, right down to the concept of type. Cons doesn't return a tuple, it returns function with two bound variables. (via DNK)
Posted By Harry Pierson at 10:00 AM Pacific Standard Time

Thursday, January 03, 2008

Morning Coffee 134

  • Bill de Hora responds to a few of my Durable and RESTful ideas. He points out that relying on a client-generated ID can be troublesome, and recommends using multiple identifiers - one created by the sender, one by the receiver and one representing the message exchange itself. However, the sender ID is vulnerable to client bugs & tampering as Bill points out, and neither the receiver ID nor the exchange ID can be used to determine if a given message is a duplicate. If you don't trust the sender, is it even possible to determine if a given message is a duplicate?
  • Pablo Castro confirms that there are "practical limits" to what ADO.NET Data Services can do with respect to idempotence. Nothing in his post was surprising, though I hope it will be more explicitly called out in the final docs. Developers used to the comforting protection of a transaction may be in for a rude awakening.
  • Dare Obasanjo has a great post comparing the new features in C# 3.0 to dynamic languages like IronPython. I believe many of the productivity aspects of dynamic languages have little to do with being dynamic.
  • Pat Helland noodles on durability and messaging, two topics near and dear to my heart (probably from working with him for a couple of years). I'm not sure where he's going with this - his conclusion that "Basically, big, complex, and distributed system are big, complex, and distributed" isn't exactly ground-breaking. But his point that "durable" isn't a binary concept is worth more consideration. Also, his description of IMS only looking at the effects of a committed transaction is very similar to how web sites work, though obviously HTTP isn't durable so you can't make event horizon optimizations like IMS did.
  • Tangentially related, Werner Vogels discusses the idea of eventually consistent distributed databases. Today, that's a problem mostly only Internet-scale sites like Amazon deal with. In the near future of continued data explosion + manycore, we'll all have to deal with it.
  • Nick Malik argues that categorizing enterprise applications by lifecycle is much less useful than categorization based on organizational impact. He might also need a new chair.
  • Jesus Rodriguez digs into one of SSB's new features in SQL 2008: conversation priorities.
  • Arnon Rotem-Gal-Oz and Sam Gentile are mixing it up over the definition of SOA. Sam thinks SOA has to include business drivers and Arnon doesn't. I'm with Sam on this, defining "SOA" independently from "Applying SOA" seems pointless. Then again, rigorously defining SOA - much less arguing about said definition - seems like a waste of time in the first place IMHO.
  • Wow, this guy Zed is mad at the Ruby community.
  • Andrew Baron has 8 Reasons Why The TV Studios Will Die. Personally, I think reason #2 - Expendable Middle-Person - is the most important. If content producers can reach consumers directly, what value-add will the networks provide? (via United Hollywood)
Posted By Harry Pierson at 10:00 AM Pacific Standard Time

Wednesday, January 02, 2008

Morning Coffee 133

  • I've been off for two weeks, so getting back into "the swing" of things will probably take a day or two - both at work and on my blog. Hope everyone had a happy holiday season.
  • I ended the year with 245 blog posts, which wasn't quite as many as either of my first two years blogging, but was much more than I had been writing for the last two years.
  • It was a Zune Xmas in the Pierson house. I got a pink Zune for my wife, and my mother and father got Zunes for each other. I got to load them all up with content for Xmas morning. Maybe I'm just used to WMP, but I'm not a huge fan of the Zune software. Yes, it's very pretty but it's missing some fairly basic features like automatic down-sampling lossless music. On the other hand, the on-device experience rocks and my wife is using her Zune regularly. I've got a trip to England coming up in April, and I'm thinking about getting one of the new 80GB ones for the trip.
  • They lost any chance of playing for the national championship, but USC sure looked like a champion yesterday. Seems appropriate for this crazy college football season that if Ohio State doesn't win big, pretty much all the other BCS bowl winners with a legitimate argument to be #1.
  • The Caps beat the eastern-conference leading Senators yesterday for the third time this season and the second time in four days. They have 13 points in the last ten games and 10-5-4 since Boudreau took over as coach. If they keep that pace up, they would likely make the playoffs - that would be quite a feat given their horrific start.
  • Speaking of hockey, I watched most of the Winter Classic yesterday, including the game-winning shootout goal by the Anointed One. It was really strange but cool to watch a hockey game between snowflakes. I agree with Scott Burnside's take that these outdoor games are good for the league, but shouldn't be a regular part of the season.
  • I finished Portal yesterday - that's a fantastic game. I also got Mass Effect, so now I need to decide which to take on first: that or Half-Life 2.
  • A few months ago, I was thinking about using HomePlug for home networking but decided to upgrade my wireless network instead. But recently I've started streaming movies from my loft computer to my Xbox, and the wireless network isn't always up to the task. I could run CAT5, but there's already an unused coax cable running up to the loft and I wondered if I could just use that? I discovered the Multimedia over Coax Alliance, but none of their certified products appear to be available. Those products have to share the home coax network with the cable company, but I can dedicate my coax cable. Anyone know a way to use coax to bridge CAT5 networks? Even something DIY?
Posted By Harry Pierson at 10:21 AM Pacific Standard Time
DevHawk
World Tour 2008
DevDays 2008

Change Congress
Recent Bookmarks