We are a user experience design and software development firm
Hire us to design your site, build your application, serve billions of users and solve real problems.
It has been a good run, but Ajax the buzzword will dip below the radar in 2009. That's not to say that we'll all stop writing JavaScript and using XHR in the coming year -- quite the contrary. Full 100% of web applications will incorporate Ajax technologies, we just will use the "Ajax" buzzword less and less, much as "HTML" became just another acronymic noun in the early days of the web. So that's not really controversial.
What's really going to happen in 2009 that will impact all of us RIA developers? The first raft of Ajax-enable webapps will be undergoing maintenance. Supportability is the real test of frameworks, architectures and designs. How easy are they to support? How painful is the life of a maintenance programmer working on a Dojo codebase versus a JQuery codebase?
We've been emphasizing the use of application level MVC frameworks here of late.Why? Because we feel that the best and most sustainable metaphor for RIA's is that of the desktop component GUI, not of the souped up webapp -- client/server making its triumphant return. Without this guiding principle -- that we are writing applications that consume backend services rather than backend services that display interfaces -- we face escalating development and maintenance costs.
I hope then to see two front end web development trends for the coming year:
What are you predictions for the coming year?
Topics: Predictions, PureMVC, Trends
http://localhost/~username/ sites go haywire, it's time to dig into your Apache config filesAs Rails pros know, Phusion Passenger allows you to serve multiple Rails apps on the same Apache webserver instance with few configuration or deployment headaches. When you install it in your local Mac dev environment, you can easily work on a bunch of Rails projects simultaneously without having to manually start and stop individual server instances all the time. The OS X Passenger preference pane makes deployment even easier. Just add a project, give it a custom local URL, and point it at a directory. You're good to go.
But what happens if you're already using OS X's built-in Apache webserver to dish up local content such as PHP applications or static HTML? When I first got Passenger up and running, all of my local sites in /Users/<username>/Sites/ stopped working. It took a bunch of digging, but I eventually realized that something in my Apache configuration had gotten messed up during the Passenger installation process. I was missing the configuration file for my OS X user account. OS X generates this file the first time you enable web sharing for any individual user. It's responsible for mapping your /Sites subdirectory to localhost URLs, so that http://localhost/~<username>/myapplication/ points to /Sites/myapplication/index.html.

Here's a slightly edited version of my Twitter feed for December 23rd, 2008:
1:59 PM: Wow! Rails 3 = Merb 2.
2:50 PM: Merb is fun to say. Merb Merb Merb Merb Merb. We welcome our new Merby overlords.
2:50 PM: Also twitter added actual people search, so it's a weird day all around.
2:57 PM: Co-worker, over IM: "I feel like the communists and capitalists just joined forces."
2:58 PM: Let's see... the Rails/Merb backlash should start in about an hour. The backlash to the backlash is scheduled for Tuesday.
2:57 PM: Message from @faithfulgeek: @noelrap it's not like MS just open sourced Windows! ![]()
2:59 PM: @faithfulgeek Only, one hopes, with a lot fewer bugs
3:04 PM: @greggpollack So when do we get the I'm RoR/I'm Merb video that ends with the two of them... well, I guess I'd leave the ending up to you
3:25 PM: Am I in a silly mood because I've been saying "Merb Merb" for the last half hour, or am I saying "Merb Merb" because I'm in a silly mood?
What have we learned from this? A few things:
Topics: Ruby on Rails
ActiveRecord comes with a lot of nice things that aren't really dependent on having a database backed model. The most obvious example of this is the validation framework baked into ActiveRecord. Also, there are several plugins which add some useful behavior to ActiveRecord objects but don't rely on having a database.
In the future, I believe the rails team aims to make certain things more modular and easier to pull out and use separately from ActiveRecord (validation being one of those). However, if you are working on a project which is locked into a certain version of rails or you're impatient, there is a very simple plugin which can solve your needs.
Enter acts_without_database...
Continue reading »
Topics: activerecord, metaprogramming, plugin, rails, Ruby on Rails
If you read one or more of the Pathfinder blogs in our web interface, you may have noticed some tweaks to our navigation and top-level categories. Our goal in making these changes was to help different audiences drill down to the specific content that interests them. Instead of just a few top-level categories, we now boast around 20, though many posts appear in multiple categories. To subscribe via RSS to any specific category - or to our entire feed - just visit our Feeds page.
Topics: news
Rosenfeld Media contacted me after I published my review of Luke Wroblewski's "Web Form Design: Filling in the Blanks." They offered Agile Ajax readers 10% off "Web Form Design" or any other purchase at rosenfeldmedia.com. To redeem, simply enter the code PATHFINDER at checkout.
Topics: book review, forms, User Experience, UXD, web forms
Recently I've been working on a Flex prototype using the PureMVC framework. I will talk at length another time about just how much PureMVC successfully solves a lot of problems that we encounter in interface development and especially about how much this framework is important for all those complex interactions that we expect out of our RIA interfaces.
Starting out with PureMVC is not a particularly easy task. It is a good thing that there are decent documentation and examples, at least for AS3. At first when I read the documentation, it made sense only on a high level, but translating that high level understanding to code right away was out of the question. I solved this initial sticking point by looking at a couple of AS3 examples like CafeTownsend and EmployeeAdmin, where you can see how the framework works on the right size demo app, not too big and not too small.
Topics: AS3, code generator, Flash, Flash Platform, Flex, flex code generator, PureMVC

Agile Software development is all about the feedback loop. Do a little bit of something, get a little bit of feedback, change what you are doing if the feedback tells you so. There's all sorts of feedback loops in a typical agile development process, from the automated, like TDD and continuous integration, to the biological, like user testing. If one of these loops breaks down, you are in for trouble.
Which is the biggest problem? No question: the lazy stakeholder or client. By lazy, I mean those unwilling to participate in evaluating the software after every iteration. The ideal client with install the software in their environment (web or desktop), kick the tires, try to do their jobs with it, do some informal user testing with colleagues or friends. Bug reports and tweaks will flood in (you do have a defect tracking system, don't you?) and be scheduled for future iterations. More serious problems, such as a wrong or missing business requirement, will also be caught early this way. Early means cheaper. Early means better.
This ends week one of my investigations into PureMVC. So far I'm impressed with the framework itself in it's many versions and incarnations, but the documentation and tutorials for platforms other than Flex leave something to be desired. To all those folks that claim that Cairngorm is easier to learn than PureMVC, I can agree, but only because of this lack of good documentation.
So what should we Java/GWT developers do? Taking a cue from my colleague Noel Rappin, we should Read the Source, Luke. This code reading is a triangulation excercise worthy of Bill Clinton, involving API docs, source in other languages and source in other versions and platforms.
Usability and design guru Luke Wroblewski knows that web forms suck. More importantly, he knows why - and how to make them suck less.
For the past few years, the Yahoo! product design exec has been presenting his ongoing research into the humble HTML form at conferences and on his blog, Functioning Form. I attended Wroblewski's presentation at An Event Apart Chicago 2007 and came away super-impressed. His persuasive mixture of case studies, existing research and newly commissioned usability studies helped shed light on the patterns and anti-patterns that determine whether users successfully complete your forms or give up in disgust.
All of Wroblewski's preparation came to fruition earlier this year when he published "Web Form Design: Filling in the Blanks" (Rosenfeld Media). After finally taking the time to read the book cover to cover, I'm mad at myself for waiting so long.
Topics: book review, forms, User Experience, UXD, web forms
Last week, I wrote a blog post with my first impressions from trying out an early beta of JetBrains' RubyMine IDE for Ruby and Rails. I ended with this slightly glib statement:
"Overall, the help RubyMine was giving me wasn't the help I wanted, and the help I wanted, it wasn't giving me."
A representative of the JetBrains RubyMine team quite reasonably posted a comment on the blog asking me what kind of help I wanted. Or, in other words, "calling my bluff".
So here's my list. Three cautions:
Topics: Ruby on Rails
If you have used scriptaculous to do drag and drop interactions which result in a replacement of the DOM element you are dropping into, you may have noticed that you can only do one drag and drop before it breaks in IE. The problem occurs when you replace a DOM element which is defined as a Droppable; IE will fail because it will still have the original element registered as a Droppable but it does not handle the fact that it no longer exists in the DOM. Firefox and safari have no issue with this, so this is another frustrating IE specific issue.
Fortunately, this problem is easily solved with a single line of javascript.
Continue reading »
Topics: IE, rails, Ruby on Rails, Scriptaculous
At Pathfinder we do a fair amount of desktop style development -- iPhone/Cocoa, WebForms, Swing -- and web application development -- Grails, Rails, JSP, ASP.NET, etc., etc.. In the last two years we, like a lot of other software development shops, have experienced a convergence in our efforts. The web is coming to the desktop in the form of Air and the Desktop is coming to the web in the form of RIA's. Now web MVC, which used to be a pretty benign pattern mostly concerned with app flow and validation, is starting to resemble desktop MVC, which has to deal with document-centric models and long lived views and all of the plumbing that requires.
So we recently had a powwow between all the different parties to talk about MVC and this convergence. With the exception of the insufferable Mac and iPhone developers and their disgustingly mature Cocoa framework, we all agreed it would be nice to have an application level MVC framework for each platform. We also agreed that Swing is a great example of what happens when the vendor doesn't provide such a thing -- spaghetti code that relies on component level MVC and hard wiring at the application level. There are a few MVC frameworks for Swing, such as TikeSwing and Spring Rich Client (soon to be superseded by Spring Desktop), but for every Swing app that has this sort of design, there are hundreds that are just a mess.
Continue reading »
Topics: Cocoa, Design Patterns, GWT, iPhone, Java, Javascript, MVC, PHP, Swing, WinForms
Welcome to "Ask a UI Guy," an occasional new feature in which we tackle JavaScript, markup and CSS questions for an audience of server-side developers. Today's topic: strategies for organizing your style rules into reusable components.
CSS doesn't impose much structure on its practitioners. Individual developers must build their own structure if they wish to escape the trap of poorly organized, inefficient code.
If a project kicks off without a clear shape to its stylesheets, subsequent developers are likely to plop additional styles down wherever is convenient. It's hard to build reusable components if every style is a one-off tied to an element id. Stylesheets with a strong skeleton and frequent signposts encourage conscientious code that's easier to maintain.
And let's face it: CSS tools hasn't come as far as JavaScript ones. Sure, Firebug can help you track down why element X looks the way it does. But without a clear picture of a project's overall CSS architecture, it's hard to alter that element's style properties with confidence.
UPDATE: Corrected some references to RubyMATE rather than RubyMINE, because sometimes I type faster than I think...
Yesterday afternoon I had a thought.
JetBrains released a public beta of their new RubyMine IDE. Well, I thought, I'll try it out for a day, and that'll be a great blog post.
It seemed like a good idea at the time.
Here's my annotated and edited Twitter feed from yesterday afternoon.
Two disclaimers: 1) I know this is an early beta, however I've used JetBrains stuff for year and usually their betas are pretty solid, and 2) I was a big fan of IntelliJ and basically lived in it for about four years, so I really was hoping this would work out.
To the Twitter feed:
Topics: Ruby on Rails
Hire us to design your site, build your application, serve billions of users and solve real problems.