DerekMorrison

On software engineering, .NET, and technology

X Envy

In this post from VentureBeat, a survey is cited saying that only 8 percent of developers are writing applications for Vista this year. While these claims don't seem very substantial (I'm thinking that a more interesting question is how many developers are writing for .Net and not targeting Vista specifically over Windows XP), the following section nevertheless struck me:

Granted, the 8 percent data is taken from only 380 North American developers surveyed, but over half of them said they were still developing for previous iterations of Windows. Meanwhile, Apple’s OS X has seen a 380 percent surge in growth as a targeted development platform.

It seems for the past couple of years I've been steadily hearing about Mac OS X apps that make me envious. The other day, Andy Ihnatko mentioned one called Fluid on MacBreak Weekly that allows you to create site specific browser applications. As someone who keeps Google Calendar and Gmail tabs open all day, an app that allows me to cleanly separate key web applications into their own space that is integrated well into the OS seems very appealing.

But that's just one example. Here are several other compelling Mac OS X apps that come to mind at this moment:

* Ok, so I cheated a little and these are available for Windows too, but that's part of the point.

Of course it's easier to spout off a bunch of trendy apps than to actually derive value from them on an everyday basis, but I still can't help but feel intrigued by the amount of exciting products coming out for OS X. Looking at the development tools available for the Mac, it doesn't make me very envious (I'm thinking of you, Cocoa and Xcode), but yet there seems to be a vibrant community of Mac OS X focused developers who seem to be skilled in developing sophisticated and well-designed UIs.

I'm not sure where this stems from, and maybe it's just my perspective at the moment, but it still seems like a factor that's coming to the forefront.

And, of course, there are several key applications for Windows that I just couldn't do without such as Visual Studio.... and... maybe Microsoft Office... and... oh yeah, this issue tracking software we use at work, but wait... it has a web-based version...

We're On Google Street View

While I was looking up directions to my house on Google Maps to give to someone, I noticed that I've been indexed by Google Street View. It amazes me that they have the resources to shoot even my little house.

Here it is. Note that it may be a little off (just go North about 9 clicks until you see the blue truck out front on the right).

Maybe Developers Don't Even Know What They Want

While listening to a new podcast the other day, I stumbled up on an old presentation from a Java conference (Javapolis 2005) titled "Perspectives on Agility" by Kevlin Henny. While the talk, in general, contained several interesting points concerning agile development, one point peaked my interest in particular. I get the feeling that it's often said by developers (and I definitely know I'm guilty of this) that the customer doesn't know what they want. More specifically, they don't know what they want until they see it, and by that time, a significant amount of effort might have already been devoted to a project and more work will be needed to correct things. This might be true, and even seems reasonable to accept this as a part of human nature (as agile methods commonly do), but what about developers? Do they exhibit the same behavior to some extent?

In the presentation, Henney suggests that the most capable software engineers that could work on a software project are the ones that have seen it to its completion (or, just as likely, failure). Typical developers are constantly learning about the problem domain and may even significantly adjust their development tools and practices during a project. While the traditional waterfall process is often chided for its naive attitude towards changing requirements (which is ironic considering that in the original paper describing the process it was never called a "waterfall" and the author even warned against using it), I wonder how many times when software is planned changing developer knowledge or habits are taken into account.

When confronted once with a client who rejected "agile" software processes (the client having been burned before by a process describing itself as "agile"), Henney describes successfully re-branding his approach as a "sustainable" process. While he might have gotten some inherent acceptance owing to recent popular environmentalist attitudes, I think "sustainable" is a good term to describe a software development approach that accepts both changing customer requirements and perceptions as well as changing developer knowledge and habits.

Podcast Habits

While listening to the first episode of a new podcast by a pair of my favorite bloggers Jeff Atwood (of Coding Horror fame) and Joel Spolsky (from JoelOnSoftware.com), I heard a discussion about their new developer community site Stack Overflow and its associated podcast. They described the site, but also gave reasons for doing a podcast. This got me to thinking more about why I like listening to podcasts so much and which ones and what types of shows I have gravitated towards listening to since I started listening to them a few years ago.

First, a disclaimer: If you don't like the idea of podcasts/audio books, that's perfectly fine. Some people tend to have an aversion to them and prefer the printed word. That's fine, and you're probably better off for it. Reading's better for you brain anyway, and you can consume information faster by reading than listening to it anyway, or something like that...   So, you can just stop reading now and come back in another 2 months when I write my next post.

Still with me? Here's another disclaimer: I am now sure that I have a weird, geeky, anti-social, possibly unhealthy podcast habit. I can't stop listening to them, all the time. I practically always have my iPhone's earbuds in: at work basically all day (I work on a project by myself and communicate mainly with my client through email), while I'm at the gym, driving by myself (or, if my passengers are particularly uninteresting), while I'm at home doing chores, basically most of the time. I'm writing this listening to a podcast (Armin Van Buuren's State of Trance music podcast). As such, what I'm writing is coming from this perspective of podcastaholism. As soon as it's possible to get decent earphone implants, I'm in. You need the right equipment to make this practical and seamless (read - an all in one pda/phone/media player). I'm still loving the iPhone, and it look like there are plenty of these devices popping up and it's the way things are going. It's truly a geek orgasmic experience to be jogging while listening to a podcast, get a phone call from the Red Cross about setting up a donation, have the audio gently transition from iPod mode to phone mode (as the iPhone so slickly does), make the appointment, then be gently transitioned back to the audio program without skipping a beat.

Enough disclaimers. Here's a few reasons why I love audio programs:

Above all, you can listen to a podcast and still use your eyes. This means you can listen while commuting, while exercising, while working even. For my adult ADHD self, this always multi-tasking behavior is well suited.

I don't get angry in traffic (really, never). In fact, if there's an accident and I'm forced to stand in line an extra 20 or 30 minutes, I'm actually a bit glad for these, what Dale Carnegie called, "gifts of time" and I'm able to listen to more material.

Podcasts make exercising fun. I love exercising now, both because of the runner's high thing, and because I get to listen to a (usually) stimulating audio program while I'm at it.

When I can pair doing chores with listening, it makes them enjoyable. There's nothing like ironing clothes while learning about Sydney's Gay and Lesbian Mardis Gras.

People speak or converse differently than they write. While with good writing you can express a complex thought maybe more elegantly and definitely more concisely than with speech, listening to someone explain something or a group talk about something of interest gives you a better feeling for their personalities and tends to bring out more dynamic, improvised, and somewhat cruder thoughts (like everyday conversation). This can go either way. While there are many delightful, entertaining, and intelligent speakers, I've been unpleasantly surprised several times by how people (John Dvorak, Joel Spolsky, Paul Thurrott come to mind) can be fairly competent writers but stumbled through hours of bad jokes and off topic side conversation that forces me to skip to the next show in my queue.

I'm able to get a very candid and personal impression of various personalities or micro-celebrities. I'm a motorcycle racing fan, and it's very entertaining to hear a mechanic and blogger on one of Ducati's teams speak about his experiences traveling around the globe on the excellent MotoGPod podcast.

I can also hear from professionals closer to my field, such as on the This Week in Django podcast. To hear insightful talk from core Python developers data access and internationalization problems is fascinating. As a developer dealing with bugs everyday, it's particularly fun and a little comforting to hear from prominent developers on a major project deal with nuanced issues and committing fixes to a public source control repository (they discuss specific changesets even!).

I think it can be a good educational tool (if used correctly). Most notably for me, I think it's helped me as I try to learn Russian. It seems important to be exposed to a lot of spoken language if you're trying to learn another tongue to get a halfway-decent pronunciation, and I it has helped me listening and repeating the Pimsleur Russian courses and various podcasts aimed at those learning Russian (although Jamila and my Russian-speaking friends might disagree :).

There are disadvantages I've found. It's anti-social to walk around other people (especially co-workers or your girlfriend) with earbuds in for a very long time while tuning them out. I've had to learn how to politely take the earbuds out and pretend like I'm listening. I still can't decide if it's dangerous to drive with earphones, but this is probably fine judging by how many crazy drivers I see without earphones in or listening to loud crappy music blaring as they barrel down the interstate. Also, I have to be careful of what material I listen to when. It's possible to listen to a dance podcast or two while programming, but if there's a show that is particularly technical or detail oriented, I'd better save that for a jog sometime.

I'm posted a list of the podcasts I listen to here. It's really a .opml (podcast subscription file) but named "podcasts.txt" (because I couldn't get my web server to serve it correctly), so you can rename it as .opml to use with iTunes, etc or just browse through it in plain text if that's not your interest.

Queryable Endpoints

It's been several weeks since I went to the Alabama Code Camp that was held here in Huntsville, but there's been one concept that was mentioned in a session that I think has noticeably changed my development habits. It's something I heard mentioned in a talk by Shawn Wildermuth about Microsoft's Astoria project: queryable endpoints.

I think the core idea is that, when structuring a database's schema or when writing data access code, it helps to keep a data model simple and avoid baking inappropriate aspects into it such as aggregate columns or a default sort order. One's goal should instead be to create an understandable, clean model that allows its consumers to transform data themselves (via filtering, sorting, summing columns together, etc).

In the talk, Shawn discussed how the Microsoft data access team is trying to build one solution for this with Astoria. The stated goal of Astoria is "to facilitate the creation of flexible data services that are naturally integrated with the web". In its simplest form, it basically allows you to expose data in a RESTful manner via URLs like this:

http://server/data.svc/Customers

which returns a list of Customer entities, or in a more specific way like:

http://server/data.svc/Customers(’ALFKI’)/Orders?$filter=Active eq true&$orderby=OrderDate

The caller can request that entities be returned in JSON or ATOM format, and the format can be chosen with a flag in the HTTP request header. It seems Astoria provides the mechanism for such communication, but the back end (how you talk with data sources) can be constructed in a variety of ways using .NET (talking to XML files, various databases using ODBC, even remote web services).

While Astoria sounds very exciting, and I hope I get to play with it sometime, just keeping the concept of queryable endpoints conscious has proven beneficial to me on my current project in the past couple weeks. After the code camp talk, I looked back and saw where me and my team had violated this idea in a few particular ways: we had created many inflexible, overly-specific stored procedures in the database such as "GetUsersByLastLoginTimeDesc" and also ones that retrieved records given a filter which ended up being raw SQL (which is certainly not a very maintable practice).

While these may be very glaring examples, sometimes the decisions can be a little more subtle and easier to slip through. This week as I was creating a new data structure as part of the data access layer component of our application, I found myself throwing in an aggregate field which summed together several others. The data structure was to be used in forming a data grid for a specific page and this would have made things easier for that particular page, but I saw where it could easily be useful elsewhere and wanted to of course make it generic. It was a little more work to therefore customize the data grid on my page to create an aggregate column, but looking back I can easily see where that was the proper place to put that piece of logic.

A lot of this is probably common sense or just a feel for software engineering that I haven't quite development yet, but I think keeping this idea in mind has helped me to put code in the right place.

Related Links:
ADO.NET Data Services (Formerly Astoria) Page
ADO Guy
Hanselminutes Podcast 97 - ADO.NET "Astoria" Data Services with Shawn Wildermuth

How do you view your friends' info?

While I was browsing through some blog entries in my feed reader this evening, I was thinking about processing my backlog of personal pictures dumped from my camera and sitting on my desktop. I began to think of how I upload them to Flickr and set the more risque of them to be viewable only by my friends, when something struck me that's been brewing in the back of my mind. I practically live in my feed reader for consuming content - that coupled with email, podcasts (itself a type of feed), and Google aggregated news is how I drink from the firehouse of information overload these days. I have accounts at a few social networks, but don't regularly visit them, instead, for example, choosing to subscribe to friends' MySpace or FaceBook blogs with my feed reader. So, how am I handling semi-private bits of information (such as Flickr photos only visible to friends)? I'm not.

This seems to be done in many ways by a lot of services (viewing private pictures and blog entries from friends on social networks or shared pictures), but I don't have a universal, ideal way of consuming non-public information from friends. If you use a feed reader then you're notified of all public information that a source emits. But, what if I publish a new set on Flickr with some pictures marked as only for "Friends" (in this case, friends would mean everyone on Flickr who I have marked as a friend). The feed reader would need to be aware of this, and pull in my Friend's pictures.

Constrained to this example, there seems to be a few general pieces to this:

  • There would need to be a universal authentication service and a universal social network, relationship mechanism. For the former, maybe OpenID (barring security concerns) or large, consolidated corporation accounts like those from Google, Passport Windows Live, or Yahoo could be used. For the latter, maybe Open Social.
  • Sources like Flickr would need to support the social network standard.
  • The feed reader should be able to tell that I'm this account on Flickr and be able to signal to Flickr that I am me and hand display my friends' photos.

I'm sure the purely technical mechanisms exist today to do this, but at least I don't feel like I'm there yet practically. It's just exciting for me realizing what potential applications of such technologies lie ahead and how thinks might be (of course things are already amazing).

And I'm probably making too much of it anyway. After all, you can just go to individual sites and view whatever you want after logging in, but that doesn't seem very scaleable in the long run, and I don't sense that the flow of information will slow anytime soon either. And it can be at least a little confusing wrapping your head around social networking. Like my Twitter friend Shey said, we need more social media interpreters.

How do you handle this?

Last.fm

 

image

I've been using Last.fm for awhile now and (after a break) I've started using it again and placed a widget on this site for it (see sidebar). Last.fm is a social music sharing site that let's you "scrobble" songs (when you listen to music, the name of the song is sent to Last.fm and added to your music profile) and based on your listening trends you can discover artists you might like or connect with people who share your tastes. You can scrobble a few ways, including using the Last.fm client (which logs whatever you're playing in Winamp, iTunes, etc or let's you listen to personalized internet radio channels) or you can use a plug in such as iSproggler which logs plays from your iPod whenever you sync (I mostly do the latter). You can even listen to music through the site fairly easily.

Here's my profile page, and here's my music obsessed friend Sergey's. We have a music compatibility rating of "Medium" and, although I can deduce this by common sense, it's strangely comforting to be reassured by a cold, statistical algorithm.

After gathering enough data, it's exciting to look back and see your listening trends (just please ignore my fifth top artist at the time of this writing).

UPDATE (Mar 25, 08): I just found the MobileScrobbler app for the iPhone! Unfortunately you must have a jail-broken iPhone to install it until official iPhone apps are ready (this is the first time I've wanted to jail-brake my phone). Would be spectular to have whatever you listen to whereever you are be instantly logged (if you're a heavy iPod type user) or just be able to listen to Last.fm radio on the go.

Overheard at work

A consequence of both working with genuine rocket scientists and having an office next to the coffee machine is that I occasionally overhear little tidbits of interesting conversations. The other week, I started noting certain excerpts of conversations on my whiteboard, and I just got enough to list a few:

  • "The problem with using a nuclear bomb to propel a rocket is..."
  • "Now I ask you, what kind of a person takes a fuselage designed for a static structure and uses it to break the low altitude speed record?"
  • "I use inertial coordinates myself, but it's a matter of taste."
  • "The reason why I'm guessing this book was written by a German is because it was written in such a systematic manner."
  • "I'm just not really a bomb expert, so I don't know"
  • "Sometimes I think I feel out of place because I have a World War 2 mind even though I was born after the war ended."
  • "People use to believe they could do things. Now, everything is too hard."

Web App Wow

It seems for the past few years I've been continually surprised by what can be accomplished with web applications. Gmail and Google Calendar showed me that I can fairly easily live without Outlook. Mint pulls together my financial data and lets me work with it in a responsive and well-designed interface. I've almost transitioned to solely using Google Docs to manage various personal text documents and spreadsheets. Flickr has allowed me store all my pictures online which makes it easier to share with friends and stores them in the cloud where I trust that Yahoo will do a better job backing them up then I would on my own computer.

image

And speaking of online photo management, I just heard about Picnik on the latest episode of Windows Weekly and, after trying it out briefly, I was very impressed. One aspect of using Flickr that's been a little cumbersome is that I generally need to use a desktop photo editing program (for me, Picasa) to do general touch ups, rotations, etc to my photos from the time I take them from the camera to when I upload them for permanent storage to Flickr. This leaves a duplicate copy in Picasa, and I go through and delete these pics from time to time - a little messy.

Although Flickr provides some basic editing and orientation features (which have really improved since I first started using the service and generally work well), if you want more control over your pictures and still want to stay in the cloud Picnik seems like an interesting choice. With it, you can upload pics from your computer, or you can open them from sites like Flickr or Picasa Web Albums, work with them, and them save them to your computer or back to an online service. Picnik doesn't seem to offer all the various adjustments that a good desktop photo editor can do, and it still might be too slow for some people if working on large, detailed photos, but I was very impressed by the performance and will try using it more for working with my simple personal pics.

This blog post sponsored by Picnik - "Photo editing made fun"

Plans to Open ASP.NET MVC Source

From a developer perspective, I like a lot of the ways that Microsoft is heading, especially concerning web development. Despite the bad press they get for many consumer products (think Vista's poor adoption rate, XBox 360 hardware failures, and the lackluster Zune), they have a lot of exciting development tools both existing and upcoming. This may be the naive fan-boy in me talking, but I also like the more open and progressive attitude they're taking on many fronts. Here's an excerpt from a recent post by Scott Guthrie about the new ASP.NET MVC framework:

Last month I announced that the .NET Framework source code can now be downloaded and debugged.  Ultimately once it ships the ASP.NET MVC framework will be available via this mechanism as well (just like the rest of the ASP.NET source code).

Starting with this next preview, we are also going to make the ASP.NET MVC Framework source code downloadable as a buildable VS project solution.  This will enable you to easily view and debug the ASP.NET MVC Framework source code.  We are also going to include a license that permits you to optionally make patches to the ASP.NET MVC Framework source code in the event that you run into a bug in an application you are developing with it. 

The license won't enable you to redistribute your patched version of ASP.NET MVC (we want to avoid having multiple incompatible ASP.NET MVC versions floating around and colliding with each other).  But it will enable developers who want to get started building ASP.NET MVC applications immediately to make progress - and not have to worry about getting blocked by an interim bug that they can't work around.

It's good to hear that coming from a prominent manager and the co-creator of ASP.NET.