<?xml version="1.0" encoding="UTF-8"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en"><title>Latest entries from www.gaffneyware.com</title><rights>Copyright 2010 www.gaffneyware.com</rights><subtitle></subtitle><author><name></name></author><updated>2009-10-18T18:16:00Z</updated><link rel="alternate" type="text/html" href="http://www.gaffneyware.com/"/><link rel="self" type="application/atom+xml" href="http://www.gaffneyware.com/index.rss"/><id>tag:www.gaffneyware.com,2009:1</id><entry><id>tag:www.gaffneyware.com,2009-01-12:links.412147934</id><title>Integrity</title><content type="html" xml:lang="en" xml:base="http://www.gaffneyware.com/integrity.htm"><![CDATA[<p>All last week, our entire sales team was in the office. They were reviewing 2008, which turned out to be an <a href='http://www.boxtone.com/News/Press/PressReleases/01_07_2009_Record2008.aspx'>amazing year for us</a>, plus they were working through their 2009 plan. On one of those days, I had the opportunity to sit in the back and listen in on one of their meetings. The meeting I sat in on was a review of a particular deal. Our sales guy went through the multi-month deal, step by step and provided everyone with an amazing amount of detail. As he went through it, members of the sales team would pepper him with questions.</p>
<p>It seemed pretty grueling to me but he seemed to enjoy it. While I sat in there in the back and listened, two things dawned on me. First, that we have a kick-ass sales team and second, that I am damn lucky to be a part of such an amazing team.</p>
<p>I have worked at more than a few startup companies. Some of them were good and some of them were bad. But as I sat in the back listening, I remembered one that was particularly horrible and I actually remember the beginning of the end for that company, which I’ll call Havaco. It happened the day our CEO announced we had won The Big Deal.</p>
<h3>Havaco Inc.</h3>
<p>I was at my desk with my headphones on, trying to untangle a mountain of spaghetti code I had inherited from an engineer who had quit two months ago. His code was a mess! He had methods which were over 400 lines long and he repeatedly used foo and bar as variable names. Everyone in engineering agreed that his code needed to be rewritten but management kept telling us there was no time to do it.</p><p>
Unfortunately, I had to dig through this mountain of shit because somewhere in there a really nasty bug existed. You see, one of our newer customers had called me the day before to complain, yet again, that she had found yet another bug. Yes, you read that correctly, she called me directly. Havaco did not have a customer support department. Sadly, it was a typical day at Havaco for me.</p><p>
As you can imagine, I was not in a good mood so when our product manager knocked on my desk with his wedding ring to tell me the CEO wanted everyone in the conference room, I was not happy.</p>
<h3>Havaco wins The Big Deal</h3>
<p>The CEO was already in the conference room standing next to the VP of Sales when I arrived. They both stood there smiling and greeting people. The two of them looked like a pair of used car salesmen.</p><p> 
Once everyone was in the room, the CEO said something like “Everyone, I have some great news! We have just signed our largest deal. The Big Fat Cat Company is now one of our customers!” </p><p>
Everyone, including me, started clapping, but as I clapped I had this sinking feeling in my stomach. It wasn’t joy, it was dread. During the thunderous applause, I glanced around the room and noticed something awful. Not a single developer had a smile on their face. We were all experiencing that same sense of dread.</p><p>
 After the applause died down, the CEO heaped a mountain of praise on the Sales and Marketing teams. He talked about how hard this was, and what a great win it was, and lots of other crap. He finally ended the festivities with “We have a lot of hard work ahead of us. We promised The Big Fat Cat Company we could make a few minor changes for them which I know we can deliver on.” That’s when I stopped listening. </p>
<h3>Welcome to hell</h3>
<p>
After the company meeting, the CEO met with the development team. He told us what we needed to develop for The Big Fat Cat Company and when we needed to deliver it. He said that it was a do or die situation for Havaco.</p><p>
I should have quit. The changes were not small, they were huge. I asked, could we hire some more engineers? No, we didn’t have the money. I asked, could we free up the engineers from doing customer support? No, there wasn’t anyone else to do it. I really should have quit.</p><p>
We started working on the changes that day while the rest of the company went out to celebrate. I should have quit.</p><p>
The next five months were a blur. Design? No time, just code. Unit Tests? No time, just code. We broke all the rules and every time one of us suggested a way to fix our broken process, we were told it would take too much time. It was horrible. I worked twelve hour days, seven days a week for close to five months. I should have quit.</p><p>
We regularly missed our milestones. The Big Fat Cat Company turned into a tiger when we missed our first deliverable. We were late by two weeks and what we delivered just didn’t work. As the months went by, The Big Fat Cat Company got out of control. Their guys would directly call our engineers multiple times a day wanting a status update. It was hell.</p>
<h3>Liars</h3>
<p>I should have quit the moment I realized that Havaco lied to The Big Fat Cat Company. The VP of Sales said and did anything to get The Big Deal. The CEO knew that she had lied but went along with it. And the VP of Engineering lacked the courage to stop it before it even started. </p><p>
It was hell but I did learn one important lesson from Havaco: never work for a company where the executives lack integrity. Think about it, if the executive team is willing to lie to a customer, why wouldn’t they lie to the employees? </p>
<h3>BoxTone Integrity</h3>
<p>So, as I sat in the back of the room quietly listening to the <a href='http://www.boxtone.com'>BoxTone</a> Sales team grill one another, I realized something cool. Our sales team has integrity. They never lie to get a deal. They love our product and they believe in the team that built it and the team that supports it. As I pondered this new revelation, I thought about the company as a whole and realized that from top to bottom, <a href='http://www.boxtone.com'>BoxTone</a> is filled with people of high integrity. In fact, I can think of at least one person that was let go because they lacked integrity which means our executives won’t tolerate people of low integrity. </p><p>
I love working at <a href='http://www.boxtone.com'>BoxTone</a> because working with people you trust makes all the difference.</p><p><a href='http://www.gaffneyware.com/console/comments/popup/?f=integrity'>Leave Comment</a></p><p>Related Entries:</p><ul><li><a href='http://www.gaffneyware.com/the_boxtone_dashboard_and_the_blackberry_outage.htm'>The BoxTone Dashboard and the BlackBerry Outage</a></li></ul>]]></content><dc:subject>development</dc:subject><dc:subject>boxtone</dc:subject><link rel="alternate" type="text/html" href="http://www.gaffneyware.com/integrity.htm"/><dc:creator>Michael Gaffney</dc:creator><author><name>Michael Gaffney</name></author><updated>2009-01-12T11:22:00Z</updated><published>2009-01-12T11:22:00Z</published></entry><entry><id>tag:www.gaffneyware.com,2008-03-04:links.412088038</id><title>The BoxTone Dashboard and the BlackBerry Outage</title><content type="html" xml:lang="en" xml:base="http://www.gaffneyware.com/the_boxtone_dashboard_and_the_blackberry_outage.htm"><![CDATA[<blockquote>
  <p>
    "A dashboard is a visual display of the most important information needed to achieve one or more objectives;
    consolidated and arranged on a single screen so the information can be monitored at a glance."
    <span>&mdash;<cite>Stephen Few, <a href="http://www.amazon.com/gp/product/0596100167">Information Dashboard
      Design</a> (2006)</cite></span>
  </p>
</blockquote>

<p>
  The BlackBerry infrastructure went down on Monday February 11, 2008 at approximately 3:20 PM EST. This event, and the
  reasons behind it, has been covered in detail on a number of other websites so I'm not going to cover it here.
  Instead, I want to show you what this event looked like on the <a href="http://www.boxtone.com">BoxTone</a> Dashboard.
</p>

<p>Please note that I work for BoxTone. I am one of the two Principal Software Architects there and
I designed the BoxTone Dashboard.</p>

<p>
  Below are two screen shots of the Dashboard: <a href="#fig1">figure 1</a> shows the Dashboard when everything
  is normal and <a href="#fig2">figure 2</a> shows the Dashboard during the BlackBerry outage.
</p>

<div id="fig1" class="figure">
  <p>
  <span class="sidenote">* This screen shot was provided by <a href="http://www.blackberryforums.com/member.php?u=673">jibi</a>.
    It was taken on Tuesday
    February 19, 2008 at 9:54 AM EST. He blurred out names for security reasons. <br/><br/>
    * It has been resized to fit better, however the orginal can be viewed
<a href="http://files.blog-city.com/files/S05/148034/p/f/dashboard_normal_original.png">here</a>.
  </span>
    <a href="http://files.blog-city.com/files/S05/148034/p/f/dashboard_normal.png"><img id="pnormal" class="figure" alt="BoxTone Dashboard" src="http://files.blog-city.com/files/S05/148034/p/f/dashboard_normal_40.png"/></a>
  </p>

  <p class="caption">
    <span class="caption label">Figure 1:</span> BoxTone Dashboard when everything is normal. Click to enlarge.
  </p>
</div>
<div id="fig2" class="figure">
  <p>
  <span class="sidenote">* This screen shot was originally
    <a href="http://www.blackberryforums.com/bes-admin-corner/117291-boxtone-notifications-rapid-response.html">posted</a> on the
    <a href="http://www.blackberryforums.com/">BlackBerry Forums</a> by <a
    href="http://www.blackberryforums.com/member.php?u=673">jibi</a>.
    It was taken on Monday February 11, 2008 at 4:47 PM EST. For security reasons, he changed the name of each <acronym title="BlackBerry Enterprise Server">BES</acronym>
    and removed the "Users in Critical" and the "Mail Servers with hung threads" sections.
  </span>
    <a href="http://files.blog-city.com/files/S05/148034/p/f/dashboard_rim_outage.png">
      <img id="poutage" class="figure" alt="BoxTone Dashboard during BlackBerry Outage" src="http://files.blog-city.com/files/S05/148034/p/f/dashboard_rim_outage_40.png"/></a>
  </p>

  <p class="caption">
    <span class="caption label">Figure 2:</span> BoxTone Dashboard during the BlackBerry outage. Click to enlarge.
  </p>
</div>

<h3>A Global Problem</h3>

<p>
  If you quickly glance at <a href="#fig1">figure 1</a> and then quickly glance at <a href="#fig2">figure 2</a> you
  should immediately notice that <a href="#fig2">figure 2</a> stands out more. It stands out more because of the careful and restrained use of colors.
</p>

<p>Unlike many other dashboards, the BoxTone
  Dashboard uses highly saturated colors <em>only</em> when there is a problem.*
  <span class="sidenote">* Edward Tufte's, <a href="http://www.amazon.com/gp/product/0961392118">Envisioning Information</a> (1990), has a chapter entitled "Color and Information"
    which provides an excellent overview on the use of color.</span>
  When everything is normal, the BoxTone
  Dashboard looks, well ... normal.
</p>

<p>Our users are highly intelligent people. They do not need bright green check marks to make them feel good about
  themselves.
  They bought BoxTone to tell them when something is wrong.
  And when something is wrong, they want to know what it is and quickly!
</p>

<p>
  A single bright red dot on a calm page screams out and demands the user's immediate attention.
  On February 11, 2008, this technique is what allowed our users to know instantly that the problem was a global one.
</p>

<h3>The devil is in the details</h3>

<div id="fig3" class="figure">
  <p>
  <span class="sidenote">* This detail is from <a href="#fig1">Figure 1</a> above. I have replaced the blurred name
    with BES09 for illustrative purposes only.
  </span>
    <img id="besnormal" class="figure" alt="Normal BES" src="http://files.blog-city.com/files/S05/148034/p/f/bes_detail_normal_annotated.png"/>
  </p>

  <p class="caption">
    <span class="caption label">Figure 3:</span> The detail for each BES shows over 600 individual points of data.
  </p>
</div>
<p>
  The BoxTone Dashboard displays the values of 10 <acronym title="Key Performance Indicator">KPI</acronym>s over the last 3 hours at 3
  minute intervals for each <acronym title="BlackBerry Enterprise Server">BES</acronym>. All of this data is graphed using sparklines which are stacked vertically and aligned
  across their common axis of time. <a href="#fig4">Figure 3</a> shows what these KPIs look like when a BES
  is healthy.
</p>

<p>
  In addition to being aligned by time, the KPIs are organized so that the health KPIs sit on top of the performance
  KPIs.
  This ordering allows the BES Administrator to quickly detect any causal relationships which may emerge
  between the health and the performance of a BES.
</p>

<h3>The details of the BlackBerry outage</h3>
<p>
  Knowing there is a problem and knowing what the problem is, are two very different things. Bright red dots are just not enough.
</p>

<div id="fig4" class="figure">
  <p>
    <span class="sidenote">* This image is a closeup from <a href="#fig2">figure 2</a> above.</span>
    <img id="besproblem" class="figure" alt="BES with a problem" src="http://files.blog-city.com/files/S05/148034/p/f/bes_detail_outage2.png"/>
  </p>

  <p class="caption">
    <span class="caption label">Figure 4:</span> One of the BES from the BoxTone Dashboard during the BlackBerry Outage.
  </p>
</div>
<p><a href="#fig4">Figure 4</a> shows the details of the BlackBerry outage from the point of view of BES09 and, I must
  say, it's quite a view!</p>
<p>
  At <span class="outage">3:24 PM</span>, the first SRP connection failure appears on the BoxTone Dashboard. Then, for
  the next 9 minutes, the SRP connection is up but then fails again at 3:36 and stays down for 6 minutes. During this
  entire 18 minute window, the BoxTone Dashboard shows BES09 as having multiple errors.
</p>

<p>
  You can see the effects of the SRP connection failure are immediate and long lasting. The percentage of users with
  messages pending quickly jumps to nearly 100% and at the same time, the inbound and outbound message volume plummets.
  A causal relationship is clearly visible.
</p>

<p>If you look at <a href="#fig2">figure 2</a> again, you will see that almost all of the other BES display a similar
  pattern.
  That is except for three of them. </p>

<p>
  EUBES01, PACBES01, and PACBES02 were unaffected by the outage. These BES were located outside of North America and
  so another causal relationship appears. This outage was localized to North America. Again, the design of the BoxTone
  Dashboard allows the BES Administrator to quickly see what the problem is, how wide spread it is, and finally which
  users are affected by it.
</p>

<h3>The BlackBerry outage from another product's point of view</h3>
<p><a href="#fig5">Figure 5</a> is a screen shot of the <a href="http://www.zenprise.com">Zenprise</a>*<span class="sidenote">*Please note that Zenprise is considered one of BoxTone's competitors.</span>
  User Dashboard which was <a href="http://www.blackberryforums.com/bes-admin-corner/117291-boxtone-notifications-rapid-response.html#post834333">posted</a> to the
  <a href="http://www.blackberryforums.com/">BlackBerry Forums</a> by <a
    href="http://www.blackberryforums.com/member.php?u=178188">mingjing</a> on Tuesday February 13, 2008 at 4:03 PM EST, along with this message:
</p>
<blockquote><p>"We are using Zenprise to monitor our BlackBerry infrastructure ... I've included a screenshot of the Zenprise console and one alert message. We were able to see pending messages growing for critical users, as well as immediately identify the root cause to be connectivity problems with the SRP network."</p></blockquote>

<div id="fig5" class="figure">
  <p>
    <span class="sidenote">
    *I removed two big red circles that were in the original image. I did this on the assumption that someone added
      it to the screen shot. If my assumption is incorrect and those red circles do appear under normal use of the
      product, please let me know. The original image can be found <a href="http://files.blog-city.com/files/S05/148034/p/f/zenprise_dashboard.jpg">here</a>.
  </span>
    <img id="zenprise" class="figure" alt="Zenprise Screen Shot" src="http://files.blog-city.com/files/S05/148034/p/f/zenprise_cleanedup.png"/>
  </p>

  <p class="caption">
    <span class="caption label">Figure 5:</span> Zenprise Screen Shot.
  </p>
</div>

<p>So, according to the message, <a href="#fig5">figure 5</a>*
  <span class="sidenote">
  *<em>Update:</em>I noticed a larger version of figure 5 was linked to the original posting in the BlackBerryForums. It shows
    the timestamps much clearer. You can see it
    <a href="http://files.blog-city.com/files/S05/148034/p/f/zenprise_user_dashboard_outage2.jpg">here</a>.
</span> is a screen shot of what they, a customer of Zenprise, saw during the BlackBerry outage in the Zenprise User Dashboard. And, again according to this customer, they could see the number of pending messages for "critical users" was growing and they were able to "immediately identify" the global SRP connection problem to be the root cause.</p>
<p>OK, I must confess that I have been studying this screen shot for more than a few hours now, and I honestly cannot see how that would be possible.</p>

<div id="fig6" class="figure">
  <p>
    <img id="zenprise-annotated" class="figure" alt="Annotated Zenprise Screen Shot" src="http://files.blog-city.com/files/S05/148034/p/f/zenprise_analysis.png"/>
  </p>

  <p class="caption">
    <span class="caption label">Figure 6:</span> Four main problems in the Zenprise User Dashboard.
  </p>
</div>

<p>This <a href="#fig6">screen shot</a> has four major problems in it:</p>
<ol>
  <li><p><span class="imagenote">1.</span> It was taken sometime after 11:29 AM on 2/12/2008 which is nearly a full day after the BlackBerry outage. There is nothing to indicate which data might be historical and which data might be current.</p></li>
  <li><p><span class="imagenote">2.</span> SRP connections to <acronym title="Research In Motion">RIM</acronym> were working when this screen shot was taken, so this icon is just plain wrong.</p></li>
  <li><p><span class="imagenote">3.</span> The starting time of the SRP connectivity problem is shown as 2/9/2008 and the last occurrence is shown as 2/11/2008. This is horribly incorrect. The actual SRP connection was only down for approximately 15-20 minutes not 3 days.</p></li>
  <li><p><span class="imagenote">4.</span> This big blue rectangle does not give the user any useful information. It does not show growth. It does not show causality. It shows less than 2 minutes worth of data and it simply does not answer the fundamental question all good data graphics should answer: "Compared to what?"</p></li>
</ol>

<h3>Seeing the Big Picture in the BoxTone Dashboard</h3>
<div id="fig7" class="figure">
  <p>
    <span class="sidenote">* This image is a closeup from <a href="#fig2">figure 2</a> above.</span>
    <img id="small-multiples" class="figure" alt="Cluster of BES on the BoxTone Dashboard" src="http://files.blog-city.com/files/S05/148034/p/f/bes_small_multiples.png"/>
  </p>

  <p class="caption">
    <span class="caption label">Figure 7:</span> Seeing a global problem is easy in the BoxTone Dashboard.
  </p>
</div>
<p>I think <a href="#fig7">figure 7</a> speaks for itself. Seeing there was a global problem during the RIM outage was crystal clear in the BoxTone Dashboard.</p>
<h3>Wrapping it up</h3>
<p>I plan on writing more posts about the BoxTone Dashboard and other parts of our system in the future. As always, I would appreciate any comments you might want to share on this topic.</p><p><a href='http://www.gaffneyware.com/console/comments/popup/?f=the%5Fboxtone%5Fdashboard%5Fand%5Fthe%5Fblackberry%5Foutage'>Leave Comment</a></p><p>Related Entries:</p><ul><li><a href='http://www.gaffneyware.com/integrity.htm'>Integrity</a></li><li><a href='http://www.gaffneyware.com/rails2blackberry.htm'>Mobile Ajax, Ruby on Rails and the RIM Blackberry</a></li></ul>]]></content><dc:subject>blackberry</dc:subject><dc:subject>dashboard</dc:subject><dc:subject>visualization</dc:subject><dc:subject>boxtone</dc:subject><link rel="alternate" type="text/html" href="http://www.gaffneyware.com/the_boxtone_dashboard_and_the_blackberry_outage.htm"/><dc:creator>Michael Gaffney</dc:creator><author><name>Michael Gaffney</name></author><updated>2008-03-04T11:29:00Z</updated><published>2008-03-04T11:29:00Z</published></entry><entry><id>tag:www.gaffneyware.com,2006-05-17:links.311713594</id><title>Mobile Ajax, Ruby on Rails and the RIM Blackberry</title><content type="html" xml:lang="en" xml:base="http://www.gaffneyware.com/rails2blackberry.htm"><![CDATA[<p>I was reading some great stuff about the <a href="http://ajaxian.com/by/topic/mobile/">Mobile Web</a> over at
  <a href="http://ajaxian.com">Ajaxian</a>. Designing for small screens presents some unique challenges and in his
  <a href="http://ajaxian.com/archives/mobile-ajax-safari-browser">latest post</a>, Dion Almaer does a great job of highlighting some of the key ones. I've been spending a great deal of time working on a Mobile Web app, so his post inspired me to share some of my experiences.
</p>
<div class="disclaimer">
  <h3>Disclaimer</h3>
  <p>I am a Software Engineer. The title on my business card reads 'Principal Software Architect'.</p>
  <p>I am neither a sales guy nor a marketing guy, so chances are high that what you read here about my company's
     product will not be <em>100%</em> in line with the message our Marketing Department has been working so hard
     to convey. So, let me apologize now to all the fine folks in the Marketing Department who have worked so
     hard to create a message which I may possibly screw up.
  </p>
  <p>Engineering loves you. Honestly, we really do.</p>
</div>
<h2>BoxTone on the BlackBerry</h2>
<p> I'm proud to say that I helped create
  <a href="http://www.boxtone.com/">BoxTone</a>, an incredibly unique system for monitoring and managing the service quality of an enterprise's
  <a href="http://www.blackberry.com/">BlackBerry</a> users. (Wow, did I write that? It sounded alot like some marketing crap. Sorry, I'll try not to let it happen again.) We monitor tons of data in realtime to detect if a particular user is having problems. If we detect a problem, we pinpoint the exact user(s) having problems then alert a system admin.
  <a href="http://www.boxtone.com/">BoxTone</a> tells you the 'who' and 'why' so you can fix it before the user notices the problem.
</p>
<p class="sidebar"> As a developer, you might be thinking this is a bit of an overkill for when only one or two users are experiencing a problem. I did too until I found out that, in most companies, the people with the Blackberries are almost always the company's top executives who have become amazingly dependent on their
  <a href="http://www.blackberry.com/">BlackBerry</a>'s for keeping in constant communication with the rest of their organization. We've actually heard horror stories of angry CEOs calling their company's
  <a href="http://www.blackberry.com/">BlackBerry</a> admin directly in the middle of the night yelling about not receiving emails. That is definitely not how I want to wake up!
</p>
<p> One of our target users is the over worked, under appreciated system administrator. This beaten down individual is typically a mobile user themselves, so I created a
  <a href="http://www.rubyonrails.org/">Rails</a> web app designed specifically for use on the
  <a href="http://www.blackberry.com/">BlackBerry</a> browser. This app allows the system administrator to see key information about the state of their BlackBerry environment and to quickly lookup the status of any mobile user.
</p>
<div class="screenshots">
  <h2>Example Pages</h2>

    <h3>Home Page</h3>
    <p><img src="http://files.blog-city.com/files/S05/148034/b/7100g_home.png" alt="Home Page"/>This is the starting point for the app and you can easily see just how small the screen really is. With real estate at such a premium, I decided to use images to represent
      <em>status</em>. Using images in this way goes against BlackBerry's content design guidelines however, I feel it is more inline with Edward Tufte's principal of maximizing information per pixel.
    </p>
    <table id="orbs">
      <tbody>
        <tr>
          <td><img src="http://handheld.boxtone.com/images/red-ball-atps.gif" alt="Unavailable"/></td>
          <td>Unavailable</td>
        </tr>
        <tr>
          <td><img src="http://files.blog-city.com/files/S05/148034/b/red_ball_tps.png" alt="Critical"/></td>
          <td>Critical</td>
        </tr>
        <tr>
          <td><img src="http://files.blog-city.com/files/S05/148034/b/yellow_ball_tps.png" alt="Warning"/></td>
          <td>Warning</td>
        </tr>
        <tr>
          <td><img src="http://files.blog-city.com/files/S05/148034/b/green_ball_tps.png" alt="Normal"/></td>
          <td>Normal</td>
        </tr>
      </tbody>
    </table>

    <h3>Navigation</h3>
    <p><img src="http://files.blog-city.com/files/S05/148034/b/7100g_groups.png" alt="User Groups Page"/>From the home page, you can either search for a user or follow drill down into various infrastructure pieces by following the links. At the top of each page, there is always a link to the Home Page and a search box.
    </p>



    <h3>User List</h3>
    <p><img src="http://files.blog-city.com/files/S05/148034/b/7100g_users.png" alt="User List"/>You can get to a list of users by anything of the following ways: </p>
    <ul>
      <li>Following the drill down links</li>
      <li>Entering a search where multiple users are returned</li>
    </ul>

    <h3>User Detail</h3>
    <p><img src="http://files.blog-city.com/files/S05/148034/b/7100g_user.png" alt="User Detail"/>Once you get down to a specific user, you can easily see key information about the overall status of the user. Plus, three links are available to the system administrator for quickly contacting the user.</p>
  
</div>
<div class="tryit">
  <h2>Give it a try</h2>
  <img src="http://files.blog-city.com/files/S05/148034/b/7100g_options.png" alt="Browser Configuration"/>

  <p>If you have a BlackBerry, you can try the app yourself. Configure your BlackBerry browser with the settings displayed on the left. Then, open the following link in your BlackBerry browser:
    <a href="http://handheld.boxtone.com">http://handheld.boxtone.com</a></p>
</div>
<div class="clearfix">&nbsp;</div><p><a href='http://www.gaffneyware.com/console/comments/popup/?f=rails2blackberry'>Leave Comment</a></p><p>Related Entries:</p><ul><li><a href='http://www.gaffneyware.com/the_boxtone_dashboard_and_the_blackberry_outage.htm'>The BoxTone Dashboard and the BlackBerry Outage</a></li></ul>]]></content><dc:subject>mobile</dc:subject><dc:subject>blackberry</dc:subject><dc:subject>rails</dc:subject><link rel="alternate" type="text/html" href="http://www.gaffneyware.com/rails2blackberry.htm"/><dc:creator>Michael Gaffney</dc:creator><author><name>Michael Gaffney</name></author><updated>2006-05-17T04:31:00Z</updated><published>2006-05-17T04:31:00Z</published></entry><entry><id>tag:www.gaffneyware.com,2006-01-03:links.1593879</id><title>IntelliJ for Ruby</title><content type="html" xml:lang="en" xml:base="http://www.gaffneyware.com/intellijforruby.htm"><![CDATA[<a href="http://www.sixthandredriver.com/">Sixth &amp; Red River</a> is thinking about developing a Ruby Plugin for <a href="http://www.jetbrains.com/idea/">IntelliJ</a> but they want to know if anyone will buy it before they commit.&nbsp; I can honestly say that I would buy it and more importantly, I think lots of other people would too.<br /><br />I have been working with Ruby for a couple of months now, but the one thing that truly frustrates me is the lack of a great IDE for Ruby.&nbsp; As a long time user of <a href="http://www.jetbrains.com/idea/">IntelliJ</a>, I always catch myself trying to execute a 'complete code' command (CTRL-Space) when I'm developing in Ruby.<br /><br />I really believe there is a huge market potential for the guys at <a href="http://www.sixthandredriver.com/">Sixth &amp; Red River</a> but we need to convince them.&nbsp; So if there are any other Ruby developers out there longing for an <a href="http://www.jetbrains.com/idea/">IntelliJ</a> plugin please go over to Sixth &amp; Red River's <a href="http://sixthandredriver.typepad.com/river_of_code/2006/01/ruby_in_idea_.html">River of Code Blog posting</a> and let them know your feelings! <br /><br />
<div> <strong>Technorati</strong>:  <a rel="tag" href="http://technorati.com/tag/ruby">ruby</a> <a rel="tag" href="http://technorati.com/tag/IntelliJ">IntelliJ</a> <a rel="tag" href="http://technorati.com/tag/web2.0">web2.0</a> </div><p><a href='http://www.gaffneyware.com/console/comments/popup/?f=intellijforruby'>Leave Comment</a></p>]]></content><dc:subject>ruby</dc:subject><dc:subject>web2</dc:subject><dc:subject>intellij</dc:subject><link rel="alternate" type="text/html" href="http://www.gaffneyware.com/intellijforruby.htm"/><dc:creator>Michael Gaffney</dc:creator><author><name>Michael Gaffney</name></author><updated>2006-01-03T21:19:00Z</updated><published>2006-01-03T21:19:00Z</published></entry><entry><id>tag:www.gaffneyware.com,2005-11-14:links.1545158</id><title>URL Scheme Design</title><content type="html" xml:lang="en" xml:base="http://www.gaffneyware.com/urldesign.htm"><![CDATA[<p>I was recently working on the URL scheme for a new web app. In the past, I didn't give this step much
    thought, but this time I wanted to make the URLs more in line with a REST style interface. There is plenty
    of information on the web about URLs but I couldn't find anything that really addressed the dynamic nature
    of a web application with respect to URLs. I was looking for a good design pattern but I didn't come
    across any. Lacking a good design pattern, I analyzed some web sites to see who had a good URL scheme. In
    my opinion, one of the better URL schemes is Flickr's. After analyzing the Flickr URL scheme, I came up
    with these notes.</p>

<p><span style="font-weight: bold;">Create views of your data</span> -- The first level of the URL path should
    partition your data along it's major axes. For example, <code>http://flickr.com/photos</code> and
    <code>http://flickr.com/groups</code>.</p>

<p><span style="font-weight: bold;">Allow users to create 'friendly' URL names</span> -- After you signup,
    Flickr allows you to create a user-friendly alias for your account which is used to construct URLs to your
    data. For example, if I select 'foobarman' as my alias, I get the following hierarchy of URLs pointing to
    my data:
    </p><ul>
        <li><code>http://flickr.com/photos/foobarman</code></li>
        <li><code>http://flickr.com/photos/foobarman/tags</code></li>
        <li><code>http://flickr.com/photos/foobarman/sets</code></li>
        <li><code> http://flickr.com/photos/foobarman/favorites</code></li>
    </ul>
<p>&nbsp;</p><p><span style="font-weight: bold;">Create a global hierarchy that mirrors the user hierarchy</span> -- Flickr
    does this in some cases but not in others. For example, <code>http://flickr.com/photos/tags</code> shows a global tag
    cloud but <code>http://flickr.com/photos/favorites</code> does not show a global favorites. </p>

<div style="border: 1px none ; background-color: gainsboro;">As a side note: <code>http://flickr.com/photos/favorites</code>
    does two bad things. First it doesn't show a global favorites page instead it shows a Flickr 'Page Not Found'
    error page. Second, it returns an HTTP status code of 200 instead of the more appropriate 404 status code.</div>

<p><span style="font-weight: bold;">Every level of a URLs path should return an appropriate representation</span>
    -- For example each of these URLs would return an appropriate representation of the data for that level:
    </p><ul>
        <li><code>http://flickr.com/photos/foobarman/archives/date-posted/2005/11/14/</code></li>
        <li><code>http://flickr.com/photos/foobarman/archives/date-posted/2005/11/</code></li>
        <li><code>http://flickr.com/photos/foobarman/archives/date-posted/2005</code></li>
        <li><code>http://flickr.com/photos/foobarman/archives/date-posted</code></li>
        <li><code>http://flickr.com/photos/foobarman/archives</code></li>
    </ul>
<p>&nbsp;</p><p>This list is not complete but I think it's a good start. Please let me know of any other good design points
    so I can add them to the list.</p>
<div>
Technorati: 
<a href="http://technorati.com/tag/urls" rel="tag">urls</a>
<a href="http://technorati.com/tag/Design" rel="tag">Design</a>
<a href="http://technorati.com/tag/web2.0" rel="tag">web2.0</a>
</div>
<br/><p><a href='http://www.gaffneyware.com/console/comments/popup/?f=urldesign'>Leave Comment</a></p>]]></content><link rel="alternate" type="text/html" href="http://www.gaffneyware.com/urldesign.htm"/><dc:creator>Michael Gaffney</dc:creator><author><name>Michael Gaffney</name></author><updated>2005-11-14T20:33:00Z</updated><published>2005-11-14T20:33:00Z</published></entry></feed>