Get Back
I've been using the Firefox 3.0 beta since I upgraded to Ubuntu 8.04, as it came as a standard package, but until now I had no idea that version 3.0 had a significantly different UI from 2.0. In fact, I only found out when I saw recent Flickr posts showing a Firefox comparison chart with a list of "advantageous" features. One in particular stuck out:
Large "back" button, the result of decades of market research
Large back button? I couldn't see a large back button on my Ubuntu install, even though I was running the latest 3.0 release. What were they talking about?
After installing Firefox 3.0 on my Windows 2003 machine at work I soon found out: They've enlarged the back button, presumably because it's the most commonly hit icon in the tool bar, and it looks pretty cool. I must say that I don't use the back button much, I'm more of a "delete key == back" kinda guy, but it's a nice touch.
Apparently there's a bit of backlash against this new feature, but at least they're trying. It's certainly less jarring than IE7's "hide the menu" approach to UI innovation, and it makes quite a lot of sense from a practical point of view.
I've now upgraded my Mac and XP machines to Firefox 3.0, and I'm enjoying the new UI. As an aside, and regardless of John Gruber's list of gripes, I still think that Firefox 3.0 on the Mac is a huge step forward in comparison to what they had. Versions 2.0 and 3.0 are like chalk and cheese. But I digress..
So why didn't my Linux install have this spiffy new button? Well, it turns out that Firefox 3.0 on Linux is one of the latest applications to get the Tango treatment. Tango is an attempt to bring some order to the world of open source applications by giving them a sense of consistency. This is actually a great idea, and it's done wonders for applications such as OpenOffice.Org and The GIMP, which now look somewhat respectable. There's a showroom full of projects that have had a Tango related makeover, and most of the featured applications are much better off with the new icon set.
This is all well and good, but what about Firefox? It's probably the biggest open source project in next to Linux itself, and yet it's not yet mentioned in the Tango Showroom. Surely there's a reason for this?
Well, a potential reason becomes fairly obvious once you actually open up the browser. The very first page that pops up has a picture of what the new theme looks like on Windows Vista, which is a stark contrast to what you are seeing in your native browser window.
See what I mean? The "standard icon" idea that has worked so well for OpenOffice.Org, The GIMP and VMWare Workstation has given us a fairly plain browser that has lost all traces of the innovation that the Firefox team were trying to implement. It looks pedestrian and boring, in fact if it wasn't for the deli.cio.us plugin icons I think I'd never get any work done, as a mere glance at my Firefox toolbar would send me straight to sleep.
It's sad that the most interesting, and therefore the one most likely to draw your attention at a casual glance, icon in the standard set now being the home icon. Although it is much more visually appealing than the plain forward and back arrows, it's a button that I can't remember ever clicking. Not even once. There are no paint brushes or printers to mix things up and keep your eye from settling on a useless feature that you've never wanted and will never need.
The great thing about Firefox is that you can apply a theme to get it to look however you want, so you would think that I would have no need to complain. I could just pick a theme from the Firefox website and would be happy, right? Well, yes and no. There's no "official" theme from Firefox that delivers similar functionality for Linux. There might very well be a 3rd party theme that will make my browser act like this (I did look for one without success, but that's another story altogether), but that still doesn't change the fact that the Firefox team have taken a vastly different approach to their Linux UI when compared to OSX and Windows, one which flies in the face of their obvious urge to innovate.
Alex Faaborg spoke about how they wanted to integrate with the host OS as much as possible on the proprietary platforms, and that didn't stop them from making the forward and back buttons look absolutely nothing like any native control on XP, Vista or OSX, so their integration manifesto couldn't have been that rigid. With Linux they have gone for total homogonisation, where as OSX and Windows have an "integrated, but with individual flair" feel. They haven't had all the life sucked out of them by a desire to conform to the nth degree. Standards are great, and are certainly needed on Linux given the diverse nature of the different window managers, but they shouldn't be used to stifle ideas and discourage creativity.
The Drudgery Report
I was recently interviewed by Sheila from Sheila's Wanderings. Typically for me, I ended up with a longer answer to the "Any last words?" section than any of the others. The tone of the questions really got me thinking about my first year of University, when I was amongst 200 other students looking forward to a prosperous career in a DotCom bubble.
To quote myself:
I can remember starting my degree with around 200 people in my course. By the end of the first year, over half of them had figured out that IT wasn't all about playing computer games. I'd say that around 30 students out of that initial 200 actually made it through the degree still wanting to get a job related to the field. Make sure it's something that excites you, and if you HAVE spent three years on a computer science degree and don't want to use it just remember that you can always take a post-grad degree in something totally different. You have to live and breathe IT or the grind of continuous learning will suck the life out of you. Well, either that or you'll stop learning and will soon find yourself relegated to the sidelines.
It was 1998, and the media were all over IT. The buzz surrounding anything even remotely related to computers was so prevalent that every man and his dog wanted in on the action.
Over the course of that first year I saw a large number of my classmates gradually come to realise that Computer Science was nothing like the media spin. Many of those disaffected with the degree dropped out at the end of the first year, but quite a few stuck around till the end of the degree, with some even ending up in industry jobs. The disaffected students became disaffected employees.
I'm incredibly lucky to get paid to spend 8 hours a day indulging in one of my favourite hobbies, so I guess I've always felt sorry for those who were inclined to settle for something less than that. I can't relate to other fields, but I can say for certain that a career in IT isn't for everybody, and that's nothing to be ashamed of. It's a discipline where happiness is usually accompanied by a constant desire for self improvement, and any hint of stagnation breeds disenchantment. If you have no personal desire to better yourself then you are probably in the wrong field.
The most important thing to remember is that even if you have spent several years training for a job that you have no interest in, it's not the end of the world. It's never too late to discover how to get paid for something you love to do, and there are plenty of options for re-skilling.
If you already have a Bachelor's Degree then Post Graduate Diplomas and Degrees are always a good bet, as is simple on the job training. Many degree-based jobs simply require that you have "a degree", as well as some enthusiasm for the role. You might not be starting out as the CEO, but at least you'd be on your way to enjoying your work.
If you do have a degree that you're unhappy with and want to move into a role that does not require a University education then you may end up viewing your time at Uni as wasted effort, however all is not lost. The primary goal of University is to teach you how to learn, which is always a useful skill no matter what you end up doing. If you find that a 12 month TAFE course will lead you to career fulfillment then don't let your previous efforts influence that decision. There's no point in being compelled to continue down a path of drudgery simply because you've spend 3 years walking down it. The principle of not throwing good money after bad applies to your career too.
If you're not happy with your job, regardless of the industry you are currently in, just ask yourself "what would I rather be doing?". If the answer is "not this" then you may want to give some thought to what would make you happy, and what it would take to get you there. Many of us would have been in the workforce for a long, long time before we can officially retire, so spending a few years here or there to figure out how you can be happy for the majority of your waking hours isn't really a big ask.
Twittering Heights
Until recently I honestly didn't "get" the Twitter phenomenon. I figured that it would be chock full of people posting about what they had for lunch, or other such inane comments.
There are quite a few excellent articles that go some way to refute this by pointing out the power of choosing who to follow, but that still wasn't enough for me. Finding people to follow seemed like a lot of hard work, and constantly maintaining this list was not of any particular appeal to me. I'd given up on trying to maintain a LiveJournal friends list, which also had the tendency to suffer from the same sort of noise problems, so why would Twitter be any different?
Thinking back, the reason I lost interest in LiveJournal had nothing to do with the work involved in tending the garden that was my friends list. I simply never felt compelled to post anything on the site, so I had no buy in. I was merely an observer, and I was never going to become interested in a service that I had no urge to contribute to.
Twitter is a little different. The short, 140 character messages and public API seemed like the perfect way of complimenting my blog, especially if I could put a Twitter feed on my site. I could augment the larger posts with short, train of thought ideas, and generally ignore the horrors of trying to accumulate another Facebook-like friends list and just concentrate on producing content. At last, a social networking site with a chance of holding my interest!
There are a few ways of getting at a particular Twitter feed. Aside from the obvious "code your own" approach, Twitter themselves publish a series of "badges" that provide a variety of Flash of Javascript driven ways of getting your Twitter info onto your site. This blog runs on WordPress, so I could also the variety of Twitter based tools for WordPress that let you create and display tweets on your blog. I ended up using the main Javascript driven "badge" provided by Twitter. All it took was some minimal styling and I had a working feed of all my tweets.
It only took a few hours for me to figure out that the side bar's performance was greatly affected depending on Twitter's now legendary availability problems, and the Twitter results wouldn't even show if you were behind a proxy server that didn't allow social networking sites. The feed implementation I chose worked by including two Javascript blocks sourced directly from Twitter, one being a file that defines two functions used to display tweets and the other being a JSON file representing a call to one of these functions with data from my feed. Obviously if a user was trying to view my site from a location that does not allow Twitter, e.g. most work places, then they would not see the feed on my site. Even if they could view Twitter, there was a good chance that the service itself would be down, causing an HTTP timeout to occur on the client.
One option would have been to move the Twitter call to my server, making a PHP call from the WordPress site to populate the list of tweets, or even pointing the existing Javascript at a script on my site. Contacting Twitter on the server would allow me to bypass the "social network" proxy tax, and it would also give me a point of contact to introduce a cache for the Twitter feed.
By caching the data on my server, and only fetching it from Twitter if the cache was older than a certain period of time, I could at least make sure that the feed would always display. If Twitter was down then I'd just have to wait for the request to time out and return the cache results regardless of age. Unfortunately any potential HTTP timeout could still affect the timeliness of the response from my blog, meaning that a user still had the potential to feel the wrath of Twitter's downtime on my site.
It seemed that, no matter what I did, contacting Twitter to retrieve my tweets was going to be an expensive and unreliable operation, and not one that I wanted to impose on the user when they request pages from my site. After all, I'm trying to augment my blog, not cripple it.
In situations such as this I'd normally install a service of some sort to do the request outside of the request/response life cycle experienced by users of the site. However, this site runs on shared hosting Linux environment with no SSH/shell access, and my only way to configure it is through FTP or a web interface, so I assumed that my options here would be limited.
Fortunately, after a bit of poking around in the web configuration tool, I discovered that my hosting provider lets me schedule cron jobs. This was the missing link that would allow me to use a cached approach and keep the same Javascript display code, while still enabling the cache to be updated outside of the normal request/response lifecycle. Effectively I could create a poor man's Twitter update service just by executing a Python script every 15 minutes.
In the interests of spending as little time as possible on the problem, I decided that I was going to keep all the existing Javascript for displaying the tweets. All I needed to do was point both the function definition and the JSON file links at copies on my site, and update the JSON file on a regular basis using a script executed via a cron job. A few lines of Python and some site configuration later and I had a Twitter feed that updates every 15 minutes.
One of the most interesting aspects of the exercise was deciding how to handle failures in the script. Twitter is down so often that I really don't care if the web request fails. So much so that I didn't even bother logging it. I've effectively assumed that the service will fail a good proportion of the time, and if it fails because Twitter couldn't be contacted then so be it. I get told about everything else, such as being unable to write to the cache, but I could really do without 50 email a day reminding me about the precarious nature of a service I have no control over.



