Archive for August, 2008

Even seemingly simple web pages involve downloading several files behind-the-scenes before your browser can render something that looks and acts sharp for you. To speed up that process our servers and your browser are constantly communicating about what files should be used to get you to the end result.

For example, when it comes time for our servers to render the login page on your first ever visit, we’re going to need to send you the login page itself + a file that details exactly how it should be displayed. After you signin, we need to show you a page that allows you to search inside your case + that same file that lets your browser know how to display it. If you’re thinking “seems a little wasteful to send that ‘how to display’ file again”, you’re absolutely right.

Part of the communication between our server and your browser is to let it know: “We already send you this file and the old copy hasn’t changed, so just re-use it instead of re-downloading”. Where this breaks down is if you’ve already reached the “max cache size” for your browser. At that point it stops saving files for re-use and just always downloads them. If this is happening to you you’ll notice the connection status in your browser cycling through waiting / connecting / connected / transferring several times for just a single page.

If you suspect this is happening to you, you could be wasting a log of time. The quickest and easiest fix is to clear the cache in your browser. Alternatively (and temporarily), you could increase the amount of space your browser is allowed to use for caching this type of files which you can do in the “Preferences” pane of your browser.

As we announced earlier, our newest release had many behind-the-scenes changes in addition to the new user facing features. This post will deliver a more technical look at what’s going on under the covers.

Rails Upgrade

Nextpoint relies on multiple frameworks and technologies but at the heart of our user facing site is Ruby on Rails. One of the most major behind-the-scenes changes in this release is our upgrade to Rails 2.1.

Partial Updates

One of the features we were most looking forward to in the newest version of Rails unfortunately fell completely flat for us: Partial Updates (and to some extent “Dirty Objects”). First reading about this functionality, it really sounded appealing: don’t spend (even minuscule amounts of) time saving data that hasn’t actually been changed. In practice though, the implementation seems pretty impractical for most non-trivial applications and for existing applications: I can’t imagine trying to retrofit (and maintain!). Unfortunately, we quickly came to the conclusion that we just need to “turn this stuff off”.

XML Handling

XML handling took a couple steps in the right direction for Rails 2. The change to start flagging null values, instead of just leaving them “blank”, caused a couple hiccups but will come in handy in the long run. And a bug fix to a pesky regular expression error in the framework (that we had fixed ourselves previously) will make for one less monkeypatch in our codebase. (Bad regular expressions can really add up when you deal in the volume that we do!)

Eager Loading

Changes to eager loading gave us a bit of trouble as statements that used to result in :include items being joined right into a single large query now (may) result in several smaller statements.

Does it make queries more efficient? Probably.

Does it increase db traffic? Probably.

Is it a bad thing? Probably Not (overall).

Is it a bad thing that stuff that worked before doesn’t? Yeah, that’s annoying.

Our specific problem is on an association defined with a :select => “distinct labels.*”. We played around a bit with potential changes down in the AR guts but in the end (unfortunately), ended up basically tricking it into running it as a single statement. It’s not at all difficult to make it happen but it’s also not straightforward – and it stinks when the framework makes you write a big comment.

Search Changes

Search is at the core of our product and we want (almost) every release to make that experience better. We’ve added designation labels and issues to our transcripts and depositions search indexes, providing users with the ability to search those sections of the applications for them. We love to see our users submitting really detailed search queries – getting straight to the data that they need to get their job done instead of forcing them down the road of an endless stream of links that never quite get the job done.

Ajaxy Goodness

We’re big believers in the “right tool for the right job” mantra. We actively try to avoid throwing in flashy javascript features just for their own sake, but sometimes it just plain makes the process much more useful. To that end, we have a couple new/reworked ajax features that we really like.

The most obvious is the new version of our “case selector”. Instead of waiting for a new page containing all your cases in alpha order – we’ve made changes to get people to their cases faster. The list now drops down with most recent cases accessed first. If you need to get something you haven’t been to in a while, those are there in the select box but for the most part: you’re really only working in a couple cases at once (at most).

In this initial implementation the dropdown is actually populated post-rendering of the requested page to avoid slowing down the “real” request. In future releases we might find ourselves not actually rending the drop until you request it. This would mean a (quite short) wait when you want to switch cases, but it would eliminate the extra work we’re doing on each request.

The most useful ajax implementation in this release is probably in our designation editor. We’ve always had the ability to designate by clicking on a preview window (click the line of text for the beginning – click the line for the end, etc). This release improves on that by tying the “edit box” to the “preview” window more directly and reworking the way that ajax is being used in the background. Page elements will only be re-rendered when absolutely necessary (this page carries ~6 individual components). This allows for smaller requests/responses and relieves the burden of constantly re-rendering elements “to their previous state”.

User Experience

Nextpoint prides itself on providing an application that is easy to use. We have a great UX process and each release brings big improvements. This release includes the changes mentioned in the section above, new images and branding, cleaner interfaces and cleared up real estate issues. We’ve also provided more cross-product integration, making it easier (for example) to find something via the primary Search product and quickly be editing in the Transcripts section.

Refactoring

As with any major production system, we always have a list of places that we’d like to cleanup and consolidate when we get the chance. This release gave us the chance to remove some deprecated code and rename some elements that have been re-tasked. This improves our development environment, making future releases more straightforward for our software engineers and thus making new feature delivery more efficient.

We’re pleased to announce our next release is scheduled for Monday 8/12, 11PM CDT – Tuesday 8/13, 3AM CDT. As always: no upgrades or changes are needed on your end. When the system comes back up, all clients will immediately have access to the new functionality.

Case Selector

We’ve streamlined the process of getting into your case in a couple ways that really improve the experience.

When you get to work you normally want to continue where you left off last night, so why make you choose a case when you login? From now on: we’ll send you to where you left off and make it easier to change should you need to.

Our handy new case selector allows you to see all the cases you have available and switch between them quickly and easily.

Search

As you know, we consider searching to be at the core of our product. Even when we set out to do a release that has nothing to do with searching, we can’t help ourselves: There’s always got to be some improvements. We’re introducing a couple new features to improve the experience.

Search by issue or designation label/objection. This functionality had available in documents but will now be available for transcripts and depositions as well. We’ve updated Advanced Search accordingly, moving the “Search by label” option out of the documents-only section and up into the general options.

Links have been added to quickly search alphabetically or by designation label/issue.

Designating Depositions and Transcripts

We’ve dramatically cleaned up our designations interface. The (potentially quite long) list of all designation labels and issues has been replaced by the ability to select a particular item to view the current designations. Items marked with asterisk are already applied to the current deposition/transcript.

The designation add/edit/import tool has been tied more directly to the viewer window itself and now sits directly above it. This should streamline the process and make it a bit more intuitive.