Two Microsofts

Adactio: Journal—Viva

I get the impression that there are really two Microsofts. There’s Ray Ozzie’s Microsoft. He’s a geek. He gets developers. He understands technology and users. Then there’s Steve Ballmer’s Microsoft. He’s an old-school businessman in the mold of Scrooge McDuck. If Ray Ozzie is calling the shots, then there is reason to be hopeful for the future. If the buck stops with Steve Ballmer however, Microsoft is f**ked.

Important ideas in ASP.NET MVC

In a former life, I worked in a Microsoft shop. So I’m not completely foreign to the Microsoft development tool landscape. At the time, C# and .NET were just slightly better than Java, from my perspective as a language nerd. Lucky for me, I haven’t done extensive work in J2EE frameworks or ASP.NET so I have no frame of reference for how they compared at the time.

Given my obvious interest in languages, frameworks and how that affects what programmers build, I enjoyed hearing about the new ASP.NET MVC framework from Scott Guthrie. The most promising thing about this tool, to me, is that MS is guiding people down the unit testing path by default. I don’t know if any other Visual Studio tools are doing this, but it’s a pretty big deal to me. I think that right now only the most enthusiastic programmers do some any form of TDD or BDD. Putting it in the hands of “vocational” programmers has the promise to significantly raise the state of the art in programming. As a side note, it was interesting to observe that 40-50% of the audience raised their hand about doing TDD and 33-50% raised their hand for using an MVC framework.

The framework itself is nothing surprising if you’ve looked at Rails, Django, CodeIgniter, et. al. What was interesting to me is to see how the framework is colored by running in the CLR. On the plus side, you get LINQ and a really good VM. On the downside, you have to use for loops and nullable types (wink, nudge). The rest is pretty much what you’d expect to see when you transliterate an MVC framework to C#, though they did display some creativity in making it decent to look at in terms of code style.

There was a pretty strong message that the tool is cross-platform (works with Mono) and cross-language. You can write a model in C#, a controller in Ruby and a view in Python. Scott even suggested that you could write unit tests in PHP, to which I thought, “PLEASE GOD NO!”

Scott a somewhat typical response, “Hey, I did this in Smalltalk in 1974!” – funny because it’s true. He also acknowledged its not for everyone. Some people need a car and some people need a motorcycle. Even so, the ideas that MS is putting in front of a ton of programmers are progressive and important. That’s the most important part to me.


Open Source and Research at Microsoft

So, as I’ve alluded, I’m at Microsoft Intergalactic Headquarters this week for the Microsoft Technology Summit. The crux of the biscuit here is to invite people from communities not using Microsoft technology and show them what Microsoft is up to.

There’s particular emphasis on what MS is doing in the Open Source Software space. Sam Ramji opened up the event to give us a sort of rundown on what MS is now doing in OSS and interoperability. I was unaware that IIS7 will support PHP, that MS is changing their practices to suit the Samba project or that HyperV will, in part get released as OSS.

Sam mentioned that he is committed to not confusing Open Source and Shared Source. It’s a slight distinction to most people but it really tends to rankle those who know the difference. I think he best summed it up by saying OSS at MS is in year 3 of a 10 year project and to judge it by what they actually do, and not their overtures (big nod to Ballmer rattling sabers about OSS and patent litigation).

Next up, Kevin Schofield showed off some of the work MS Research has been doing. His first point was that research does pay off. Research money into technologies like VLSI, databases, parallel databases and workstations have yielded multi-billion dollar industries. Projects that start out as pure academics can evolve into major players such as Oracle and Sun.

MS Research’s mission is to advance the state of the CS art and ensure that MS has a future. By the latter, he means that MSR is a hedge on the company’s agility. They don’t want to turn a corner and find customers demanding something that MS doesn’t know about.

To this end, they hire the best researchers around and then don’t tell them what to do. In this way, they refer to themselves as the “world’s largest CS department”. However, knowledge transfer is critical. If they don’t transfer technology to the product groups, what they’ve done is useless.

I found it very interesting that Kevin said “tech transfer is a social process.” For this reason, he specifically hires people with good relationship management. People Hacks at work ya’ll!


Warm water makes the world go 'round

I’ve been doing “very detailed” research on the correlation between the time it takes to get hot water in public bathroom sinks and affluence. Signs point to a strong correlation between the two. Shocking, I know!

Microsoft and Austin Ventures' buildings have almost instant hot water. Generic office buildings take a while. My bathroom at home: 60 seconds of astonishingly cold water.


My dog misses me

I’m at the Microsoft Technology Summit this week.

Fred, sleeping on my pillow

Of course, Fred misses me (and I miss him!), so he’s sleeping on my pillow to keep it warm.


Tough CS illustrated

Greg, who I don’t think has formal CS training, has been making some great illustrations of some of the harder ideas in operating systems and concurrency.

You can find more sprinkled throughout his lovely little tumblelog.


Fix Subversion conflicts

Got a case where you did a svn up and now you have a bunch of conflicts where you just want to overwrite your changes? I’ve got a little bit of Ruby cleverness for you:


  `svn status`.split("\n").grep(/^C/).map { |c| c.scan(/\S+/).last }.each { |c| `svn cat #{c} > #{c} && svn resolved #{c}` }

I run this from irb at the root of my Subversion working directory. It makes me happy.

Update: lord that looks ugly on one line!


  status = `svn status`.split("\n")
  conflicts = status.grep(/^C/)
  files = conflicts.map { |c| c.scan(/\S+/).last }
  conflicts.each do |c|
    `svn cat #{c} > #{c} && svn resolved #{c}`
  end

Non-chalantly rocking

Me, rocking

Rands helps you with your presentations

Out Loud. Conference season looms, folks. Rands is here to help.


Cosmic Class.new

Reading the sources of test/spec inspired me to write a whole post about Class.new on the FiveRuns weblog. Unintentionally, I ended up channelling the style of Err The Blog in writing that post. Now, Chris Wanswrath has posted a little ditty, test/spec/mini, that uses Class.new.

The “Circle Of Class.new” is complete, we can all go back to our normal lives. Also, Class.new totally has a man on your boat.


Teamwork anti-pattern: the edge case

Edge Cases are the Root of all Evil:

"I've learned over the years that Edge Cases are not meant to be normal rationale or a casual reminder of some odd circumstance that you've neglected. Rather, they usually represent an attempt by someone else to gain, show or exert power in a situation. I'll explain."

After reading this, I immediately realized the Edge Case is definitely an anti-pattern of teamwork. I’ve observed, suffered and inflicted this particular tactic countless times in the past.

Tackling this one is three-pronged:

  • Recognize it. When someone points out an edge-case, quickly try to establish with the rest of the team whether this occurrence is as rare as you think it is or whether its truly important.
  • Neutralize it. If it really is a corner case, mark it as such and get back to making actual progress.
  • Bury it. Should you throw something out there and find its really an edge case, let it go. Don’t be that guy.

“But Adam”, you say. “It would be really embarrassing if we omitted a condition for the Blurbleflaster Case!” Well, I couldn’t even find the Blurbleflaster Case in Wikipedia! So, if someone finds that we’ve omitted it, then they get the prize; it won’t be the end of the world. We should probably implement that whole social network thing first anyway.


I Like Rails 2

Tonight I gave a presentation on Rails 2 at Dallas.rb. Within, I note some of my favorite new things in Rails 2. Some things small, some things large.

If you weren’t there, I should probably explain a couple of the slides. I think Rails 2 is, despite its whole-numberness, an evolutionary release. It makes the Rails “language” smoother around the edges. Granted, its still somewhat blob-esque, but its getter rounder. I dig it.

Besides that, I think Active Resource, or ARes as they call it in the biz, is going to prove useful mostly behind the firewall in your datacenter. As you build more and more applications, you’ll find you need to use resources across multiple apps. This is exactly where ARes shines – providing a common user service, for example.

You can download I Like Rails 2 it if you missed it or, for some reason I can’t even fathom, aren’t even in Dallas.


Getting ahead on Git

Git. Soon, you’ll be using it, too. The definition of “soon” probably varies widely depending on what kind of person you are. But, no better time than now to start getting acquainted with the idea.

Finally, what I really wanted to do here was publicly commend Dr. Nic Williams for his adept use at Star Wars metaphor and humanization of Grand Moff Tarkin in his post on using Git to manage the new Rails TextMate bundle (Ed. now 404). Well done, sir. I owe you a frosty one.

Ed. revised Feb 15, 2025. URLs updated or noted as 404, copy left intact. What a time-capsule!


The Mint logo, geometric beauty

Geometry of the Mint logo:

The Mint Logo with interesting annotation

Frickin' genius.

Ed. revised Feb 15, 2025. No notes.


What good could come from MicroYahoo?

Microsoft Proposes Acquisition of Yahoo! for $31 per Share:

REDMOND, Wash., Feb. 1 -- Microsoft Corp. today announced that it has made a proposal to the Yahoo! Inc. Board of Directors to acquire all the outstanding shares of Yahoo! common stock for per share consideration of $31 representing a total equity value of approximately $44.6 billion.

So everyone’s probably gonna spill ink on this one. Understandably – in Flickr, Upcoming and del.icio.us you’ve got three of the most trusted and loved sites out in their respective communities. In addition, there’s a lot of respected people, both in web development and open source, at Yahoo. Joining Microsoft, an organization with minimal respect in the web development and open source communities, would reduce those people’s cred right out of the gate.

Were this bid successful, here’s what I hope would happen. Microsoft uses it as an opportunity to rebuild organizationally. Bury the hatchet with open source and open up the development of Internet Explorer. Yahoo continues building apps like Flickr and del.icio.us like they always have. A rewrite on .NET technologies isn’t imposed like it was on Hotmail. In the end, Microsoft becomes an organization where closed source, proprietary development can flourish with open source, standards-based processes.

This is wild guessing on my part. That said, if you look at Microsoft, its clear they are having major execution problems. Xbox is the only group that is widely successful and even they have hardware problems. All the other groups are missing timelines and customer/developer expectations. Just like Yahoo was before they picked up Flickr, del.icio.us, Upcoming, etc.

If Yahoo can make acquisitions to rebuild their culture, perhaps Microsoft can too.

Ed. revised Feb 15, 2025. Turns out this didn’t happen, but my predictions did reify with the Microsoft acquisition of GitHub. Also, it’s hard to remember the moment when Yahoo was ascendant! Take care what you wish for?


Whither Prototype or jQuery

The fact and fiction of why I choose Prototype over jQuery

FACT: I like Prototype better. It fits the way I program perfectly. I like prototypes, I like programming in a somewhat functional style. I don’t think of things in a DOM-centric way. I’m OK with having client-side state.

FICTION: jQuery is the “emo” framework. Apparently it (was) the “new wave” framework. Either way, I will always hold it against John Resig that he chose Devo hats as the logo.

FACT: jQuery is a fine framework if you think in terms of the DOM or don’t do much back-end programming.

FICTION: To become proficient at Prototype, you have to punch the first jQuery user you see every day. I have never punched a jQuery user. Attempts to verbally duck punch them have met with minimal success.

FACT: Dollar functions are sexy. Clearly one of the best abuses of a programming language grammar, ever.

FICTION: You can’t write unobtrusive JS with Prototype. I wrote a tutorial for Advanced Rails Recipes on how to do that with Dan Webb’s lovely LowPro library.

FACT: We can all agree, YUI is really unpleasant to look at. ENOUGH.with.the.fourteen.dots.before.I.can.do.something.useful!

FICTION: Sam Stephenson is an artificial intelligence akin to GLaDOS. I’ve met Sam twice. He did not attempt to coerce me into an incinerator.

Now that we’ve got the record straight, I’ll leave you with a comparison. To my jaded, biased and stubborn eyes, trying to use jQuery feels limiting. But I think that’s particular to my experience and preference. No doubt, if jQuery were a musical instrument, it’d be akin to Stevie Ray Vaughn’s guitar “First Wife”: suited to its user, iconic and specifically built to its purpose. If you were to try and play a Beethoven piano sonata on First Wife, it just wouldn’t come out right. However, your basic baby grand piano is equally suited to Beethoven or B. B. King. So in my tortured metaphor, Prototype is a piano – harder to play well, but more rewarding once you do.

Ed. revised Feb 15, 2025. I left everything intact, to remind myself where my writing/thinking was when I was 29. 🫠


Magnetic Ink

Processing might force one to use for loops, but this bit of generative art is beautiful. The music ain’t too shabby either.


The good news about a long writers strike

Apparently, some think that the WGA strike could continue well into 2009, affecting movies as well as TV. No Writers, No Movies? Strike May Hit '09 Films:

Also moved to the back burner are "Nine," the musical based on the Fellini film "8 1/2 "; "Angels & Demons," the second installment in the "Da Vinci Code" franchise; Michael Bay's "Transformers 2"; and 20th Century Fox's remake of the 1966 film "Fantastic Voyage."

So, really, only half of the possible outcomes are bad. ZING! Take that, Michael Bay and Dan Brown!


Overcoming "browser tab seventy-three"

So now that NetNewsWire (NNW) is free, everyone should go download it and enjoy the love. It was the first app I ever bought for Mac, and it would seem I will only have to pay for it once. Hearty shout-outs to Brent!

That said, any experienced NNW user knows that information overload is easy to get yourself into and hard to elude once you’re wrapped in its grasp. The very manly Merlin Mann brought us Inbox Zero and I knew I needed to strive for Feeds Zero, in addition to browser-tab zero, Twitter-zero, etc. Unfortunately, Feeds Zero can lead to dozens of open browser tabs in NNW. Fortunately, NNW is better than any other WebKit app I’ve seen at dealing with this.

But now I’ve got a ton of browser tabs in NNW holding down my soul. A contemporary, first-world problem. In trying to keep up with feeds, one spawns many dozens of browser windows. Lots of stuff to read. But, the sheer mass of 100+ tabs is considerable friction holding you back from, you know, acquiring all that information.

Here’s my current situation:

NetNewsWire tab overload

I get myself into it pretty frequently. I bet you do too. Here’s how I get through it.

Work from both ends

In NNW, Cmd-Shift-Left and Cmd-Shift-Right move you up and down the vertical tab bar. Sometimes what I see in the first several tabs just isn’t appealing at the moment, though I can easily convince myself that my future self will find it intriguing. So I just turn around and head the other way. I might find something I like in that direction.

In fact, if you just finished some un-bolding, the newest, freshest links will end up closer to the Cmd-Shift-Right side of the list. In theory, your current self found that intriguing enough that you could actually start reading it now. ;)

Just close the tab

As I’ve alluded, sometimes your past self just has poor taste. Your former self pulled up some article that you know, really, you’re only barely interested in reading. Or maybe you just felt guilty not reading it, but you still wanted to unbold it.

Look, sometimes your Attention Bush needs trimming. Cmd-W is your friend, people. It makes the pain go away, no matter what app you’re in.

Export to HTML, process outside of NNW

Recently, I’ve found the first two tricks weren’t helping me. My tab list just grew and grew. The guilt became intolerable. So I rebooted. Kinda.

Tab->Export Tabs in NNW is my new best friend. I used it to export all my tabs to an HTML file. Then I sorted the list in TextMate, so as to collect everything by author, rather than over time. I’ve been pulling a few links off this list every now and then. Once they’re in my real web browser, I remove them from the list.

A couple days in, I’m already a fourth of the way through the list. And I’ve been able to guiltlessly tackle my feeds. Happy.

Know what you're up against

I have an AppleScript that tells me how many tabs I have open in NNW. It’s vital for telling me whether I should focus on “feed zero” or “tab zero”. You can see the window it displays the count in the screenshot above. Here’s the code of the script:


tell application "NetNewsWire"
	set theCount to ((number of tabs) - 1) as string
	display dialog theCount & " open tabs" buttons {"OK"} default button 1
end tell

Stick it in ~/Library/Application Support/NetNewsWire/Scripts and it will appear in the Script Menu for NNW. I like to use the Keyboard Preferences pane to bind the script to Control-Cmd-C for quick use.


So. I’ve given you some chisels that you can use to work down that attention boulder you’ve made for yourself. Just remember that the goal is to acquire new and fascinating information and still get stuff done. Keeping those attention sails well trimmed is the best way to avoid hundreds of NNW browser tabs.


Wheaties for programmers

Reflections of an Interface Designer:

If you want remarkable results, feed a good programmer a diet of good design.

Kevin’s right on here. I’ve been eating up design lately. But even before that, seeing some really great design, even if its not code, inspires me to get off my butt and write more, better software.