Coming full-circle with MVC

Interesting how software design repeats itself so much as different groups discover old patterns and make them new again to a whole segment of developers. I’ve been developing for about 8 years, only a fraction in the history of software, but already I’m looking at repeating myself. I’m reading today about the ASP.NET MVC (Model View Controller) announcement from this past weekend. I think it was a little over 3 years ago now that, in my day job, I left Java for .NET. For the bulk of my Java days I was doing MVC development with a custom IBM framework (which I wasn’t too fond of) and with Spring (which I had a lot more fun with). I consider myself pretty agnostic with software, I’m not religiously tied with any group, but I made the switch to .NET because I wanted to write web apps, and .NET was the direction my company’s technology roadmap was going, leaving Java mostly behind as a web front-end.

Thanks to Rails generating an increased buzz in the .NET community about MVC, Microsoft is now going to ship its own MVC framework as an extension to ASP.NET. I’ve been doing traditional ASP.NET and ASP.NET with the Model View Presenter (MVP) pattern now for 3 years and am not a big fan of it’s workings, with viewstate, postbacks, controls and event lifecycle. Too often I find myself having to work too hard to do fit what I’m trying to do into the framework. The web is a simpler medium, and I like the software stacks that web apps are written to be simpler too. I’m looking forward to exploring this new framework more along with Rails and MonoRail.

Yahoo broke their GeoCode API

It appears to be working again today (Saturday, 3 days after the first reports). I wasn’t able to make the switch to Google’s yet, so I’ll still use Yahoo’s for now. But, there are some changes I need to make to better prepare if something like this happens again.

Yahoo rolled out some updates to their Maps API on Tuesday night, but unfortunately they broke their Geocode API in the process. I know, I know, don’t rely on free APIs, nothing like a day without new users to drive that point home. In spite of knowing I shouldn’t rely on this API, I’m troubled by the way this was broken. I would expect better from Yahoo, who put a lot of resources into their developer network.

First, they didn’t version this release, it’s still “V1”. If they had bumped the version and kept the old one around, the problem could have been avoided. Secondly, it’s essentially a schema problem which are much more difficult to code around than the service being down or throwing errors. While the response still technically passes schema validation, it’s easy to see that the data is not right. Third, it is still not fixed after they’ve known about it for over a day.

Here’s the bug. Run a zip code lookup:

this is the response:

<?xml version="1.0"?>
   <Result precision="zip">
      <City>Portland, OR  97201</City>
      <State>United States</State>
<!-- compressed Thu May 17 09:55:39 PDT 2007 -->

The city, state and zip are combined into the city field while the country is put into the state field. Whoops. So the city field has to be further parsed in order to put the data in the right place. I use this service to take care of that for me, and don’t have time at the moment to do it. So, I bumped the limit on my state field in the database in order to work around this, but my geo data will be all messed up until this is fixed and then I’ll have to go back through and clean it up.

I’d argue that zip code lookups are fairly common and there should be a test case for this. Time to look at Google’s geocoder I suppose.

WebVisions Day 2 review

You want irony? On the day I drive 90 minutes to the convention center and nearly 2 hours to get home, I do a brief interview with an Oregonian reporter about my 25 minute daily work commute. Doesn’t seem so bad now :-). Let’s recap day 2:

Let Go! 8 Steps to Succeeding in a Post-2.0 World

Lane Becker and Thor Muller, Satisfaction (slides)
I didn’t write down the 8 specific things, perhaps they’ll show up here, but this talk wasn’t really about presenting the 8 things, it was more a conversation about their message, “Be Like the Internet.” What does this mean? It means giving up control, opening up more, looking outside for solutions, embracing chaos, being more agile. Again, look to the wiki they setup, hopefully they’ll build it out a bit.


Social Media Strategies for your Organization? Connecting the Dots

Jeremiah Owyang (presentation) (slides)
Jeremiah discussed ways to present and implement social media strategies in organizations. The slides should sum it up well or watch the presentation. I need to try some of this stuff with my company. The Air Traffic Controller idea is a good start, though hardly anything is ever said about my company in the blogosphere (perhaps that’s as good a reason to start doing this).


Web Visions: Presentation Page Hierarchy

web application hierarchy, after lunch


Apparently neither Jacob nor Cliff have experienced a Burgerville milkshake, unbelievable. Fortunately we survived the throng of pre-teens and made it back to the conference.

Web Application Page Hierarchy

Luke Wroblewski (slides)
Luke W. is my new design hero, I just hope to never have to pronouce his last name. Not only does he work for Yahoo!, but has his own design business, writes books/articles, and is a prodigous speaker (not always covering the same topic). His slides on Best Practices for Web Form Design are the most useful, actionable advice I have ever seen in a presentation (i.e. you can put the stuff to use immediatley). I didn’t even see that presentation, just read the slides.

So, the talk was great with some sound and straightforward advice on how to focus your pages on the things that matter. Good point about the importance of a good presentation layer, it’s not just making it pretty.


English: Web 2.0’s Universal Language

Kevin Smokler
I left the content square-table discussion for reasons similar to Adam’s and ended up in this one. It was ok. Kevin’s a smart, energetic guy, but the topic wasn’t the most exciting to me, or maybe I was just ready to go home. The discussion was on being clear in our language and making product descriptions easier to understand (passing the mother-in-law test). RSS was a common topic; it’s so great, but a lot of people still don’t really get what it is after all these years.


I had to jet and missed the Friday keynote, sounds like it was pretty funny. Instead I spent the next two hours in the parking lot know as I-5.

Tags: ,

WebVisions Day 1 review

WebVisions turned out all-in-all to be a good time. The sessions were great and I came out of it plenty inspired and am trying to review notes and reviews this morning so that I don’t lose track of the important bits.

AJAX Inside Out (Workshop)

Jack Herringon
Code Samples:

Waste of time. They should give refunds for this. Not sure if it was a horrible mis-communication between WV staff and Mr. Herrington, or between WV marketing and attendees. This was a demonstration of AJAX, that’s all.


Paul Ingram (slides)
Very inspiring talk on ideas; where to get them, and how to bring them to life. I’ve recently begun trying some of Paul’s ideas myself in regards “private virtual parnerships,” utilizing informal collectives of people to build projects so am glad to hear others are comfortable doing this as well (as opposed to creating formal organzations/agreements and hiring employees and contractors). I loved the Segway video (a hypothetical discussion of the importance of the Segway as if all of the initial hype came true) and will have to try to find that.


Social Architecture: Modeling the Next Generation

Sean Madden (slides)
Emergence, ubiquitous computing, calm technology, genetic algrorithms. Wow, this is heady stuff, and apparently this guy grew up in Tualatin, which is a stone’s throw from where I currently live. The driving point is about making systems more flexible and easier to change/evolve from the community’s use. I encourage you read the summaries below, this was one of my favorite sessions and I need to let this sink in a bit more.


Sensory Trasformation: How to Sip from the Information Firehose (Keynote)

David Pescovitz (BoingBoing blogger among many other pursuits)
Interesting stuff on information overload, ubiquitous computing, predicting the future. I enjoyed it. I’ll have to dump all my RSS feeds one of these days and start over, one of things David does to manage overload and find new and interesting stuff.


Tags: ,

Firebug 1.0 Beta out

If you’ve been waiting to try out Firebug for any reason, wait no longer. Skip right past the current release and install the the new 1.0 Beta.

I can describe this new version in one word: Amazing. Firebug will make debugging your web app a joy. No matter if the problem is in the markup, script, CSS, or HTTP request/response, Firebug will help you find it. You’ll actually want to have bugs just so you can use it. Great to see it’s going to stay open source too. forgot the basics logo
Turn off javascript and try to do a search on the newly launched (Scoble and TechCrunch have more on the release). What do you get? Nothing. This is a move sure to fire up accessibility advocates everywhere. You may say “But who really ever turns off javascript?”, well I say why on earth do you need to write a series of javascript functions, have 15 javascript file includes, and wire up event handlers to submit your search form? Why not keep it simple and let HTML and HTTP do a little work for you?

In looking at the source, I see they’re trying to set two things, a category to search within and the search query text. Let’s find a much simpler way to do this that still keeps the form accessible. version (minus some layout/styling markup and all of the javascript necessary to process it):

<form class="searchform" id="form1">
    <input name="mainSearchField" id="mainSearchField" type="text"
        class="textareafont" value="" onkeypress="return searchEnter(event)">
    <a href="javascript:search()"><img src="pictures/searchbutton.gif"
        width="81" height="26" align="middle" border="0"><a>

What I would do (no javascript necessary to get the default action):

<form action="search" method="GET" class="searchform" id="form1">
    <input name="btnSearch" type="hidden" value="all">
    <input name="searchText" type="text" class="textareafont" value="">
    <input type="image" src="pictures/searchbutton.gif" width="81"
        height="26" align="middle" border="0" >

Now the form works for everybody out of the gate and a user without javascript gets a search in the “all” category. Add some javascript to set the hidden “btnSearch” field (which identifies the category) when the user clicks on one of the other categories (and optionally submits the form if there is a query already there). The requirements may be more involved, but this is my 10-minute clean up.