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.
I recently ran into an issue building an app which hit an existing (protected) website. Passing credentials along with each request, responses at first appeared to be cached, even after the user credentials changed from within the iPhone app. In sorting through this issue, it gave me a chance to get a bit more familiar with NSURLRequest, and NSURLRequestCachePolicy. As I later found, however, my problem turned out to be cookie-related..
Topics: iPhone, networking, web
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
It looks like the Rails news for 2008 will be dominated by the impending cats-and-dogs merger of Merb and Rails. More on that next week.
Right now, here's some links back to Rails content that our team has put out during 2008 that's still useful, or that I just plain still like. I think a lot of people reading this came to our blog during 2008, so much of this might be new to you. Enjoy.
Two posts about managing the complicated problem of taking over a project with pre-existing data or code.
A couple of tips for doing weird stuff with ActiveRecord
I was there this year, and I even wrote a blog post.
Somehow, I just knew that calling this post "Named Scopes Are Awesome" would get at least a little bit of attention...
Personally, I'm still looking around for the perfect solution to structuring views.
Who doesn't love a good argument about style?
And a couple of quick posts about how to manage security testing in your Rails application
Topics: Ruby on Rails
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

After you've gotten the hang of Rails basics, one of the fastest ways to make the leap to black-belt Rails Warrior is to become familiar with the Rails source itself. (This remains a huge side-benefit of writing about Rails -- there's nothing like the prospect of making mistakes in public that drives somebody to extra research.)
The Rails source is arguably the most scrutinized piece of Ruby code going, so in addition to learning how Rails works, the Rails source can also help you pick up on Ruby tricks (the Rails source sold me on class << self to define a bunch of class methods), and generally give insight on how to structure large Ruby programs.
While you can get some feel for the Rails source from RDoc, there is still a lot of value in browsing the actual source files to get a feel for the connections between the different pieces in Rails.
Here's a guide to browsing the Rails source tree (based on Edge Rails as of today, Dec 19, 2008).
Topics: Ruby on Rails
A new version of TeamCity is out, and while I have not taken it for a ride yet, I found this feature particularly interesting:
Risk Group Tests, Tests Re-ordering
TeamCity 4.0 is now able to determine a set of tests which are likely to fail (i.e., recently modified, those with frequent failures history, etc.), and perform those tests first the next time the project builds. This allows teams to confirm potential fixes sooner, reducing feedback time.
There are strong cases to be made for risk-based testing in certain environments. The reason why it is not more commonplace is that implementation is tricky since it requires the CI system to know a few things which are hard to generalize:
Since a risk-based approach may mean skipping certain tests on some builds, this may sound like a step backwards to the agile developer. But consider it an alternative to improving overall build time (i.e. "based on very low risk assessment, tests which never failed will not be run every time."). The hard part is defining what "low risk" means to your project, and how much value you would get reducing overall build time.
This is obviously not an issue on well-run projects with sub-minute builds, but if you were to be dropped into an existing project with, say, a large code base and a fifty-two minute build (I've seen it), this can become one way to perform triage on an otherwise untenable position. You don't need a new CI system to implement risk-based testing, but having this alternative can't hurt.
Topics: agile, continuous integration, Testing
Earlier this year I attended TECH cocktail's first Chicago conference. They've been filling a much needed local networking role for technology entrepreneurs, and their first conference here was both well attended and had a number of good speakers, with a heavy Chicago focus, from Threadless' Harper Reed & Scott VanDenPlas to Everyblock's Adrian Holovaty.
Recent events in the newspaper industry got me thinking about some of what Adrian has been saying on the subject.
Adrian, as some of you may know, developed an influential early mashup called chicagocrime.org that combined crime data from the Chicago police department with Google maps, and after a stint with the Washington Post, started Everyblock with a grant from the Knight Foundation.
Everyblock takes the concept of chicagocrime.org to it's logical conclusion, as a geographic filter that aims to collect all the news and civic goings-on that have happened recently in your city, and make it simple for you to keep track of news in particular areas. They collect information ranging from crime data, restaurant inspections and building permits to news stories and craigslist lost and found posts to help you answer the question "what's happening in my neighborhood?"
It's what newspapers everywhere have been trying to tackle with their hyperlocal strategy, but from a different perspective: The data is just as important as the story, if not more so.
That local data is what Newspapers are in a better position to collect than almost anyone else, if they made it their focus. Instead it's a means to an end for them, an end that is rapidly looking grimmer and grimmer. Meanwhile, folks for whom data collection, aggregation and synthesis are the end and not a means (like Everyblock, or business focused aggregators like IMS, Lexis Nexis, Factiva, Choicepoint and Thomson) look to have a much brighter present and future. Just another missed opportunity for Newspapers, I guess.
Topics: aggregation, everyblock, google maps, Mashups, newspapers
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
Hire us to design your site, build your application, serve billions of users and solve real problems.