Hamish Rickerby

Mac and iPhone/iPad developer based in Melbourne, Australia

Amazons MP3 Offer

| Comments

I got an email yesterday from Amazon.com about the Verve’s new album Forth.  They were offering me a free, DRM free download of their latest song “Love is Noise”.  Having not heard anything out of the Verve for a while I was interested, and free is a pretty good price so I went to download.

The first thing I was unimpressed with was the Amazon.com downloader they tried to install on my machine.  I understand that some people may not understand how to add MP3s to iTunes, but the “skip this step” link to me was not in an intuitive place.  So, I accidentally downloaded it, went back to the page, then found the skip link.

But the real kicker with this is the below screenshot.

Dumb error message

Useless.   

Why would they send me an offer I can’t redeem, ESPECIALLY WHEN THEY KNOW THAT I DON’T LIVE IN THE US.  They have my address, I have purchased from them before.  Unimpressed.

iPhone 2.0.2 Software Update

| Comments

Apple released this update a day or two ago. I installed it yesterday morning.

Unhappy customer.

Since then, I’ve had worse performance on transition to the SMS and contacts screen. I’ve also had issues when listening to music and receiving email/sms at the same time. Sometimes the music fades out and then stops, and I need to tap the round button at the bottom to make it go again, sometimes the music just halts (no fade), I head the new email sound, then music starts up again.

I’ve noticed nothing good about this update.

Dumb Things Company Websites Dont, but Should Do

| Comments

Opening hours. I want them on every physical stores, restaurants, and bars website. They do good store locators in the UK, I guess it’s because postcodes are everywhere, everyone knows them and they identify a very small area (a street, or part of a street). How come stores, when thinking about the data on their store locator, don’t include opening hours. Address and phone are always there, but when I’m going home on the train I want to know if my local stores will still be open when I get there.

Oh well, no spending at that particular store tonight.

Radiant CMS Tutorial - Custom Javascript in Admin Pages

| Comments

At the moment I’m working on a fairly complex extension for Radiant CMS. In creating the administrative pages I want to use a javascript library that is not distributed with the core radiant code. This post will describe how to implement your own extension that can use an external javascript library, without playing around with any of the core radiant files to inject the javascript into the administrative layout.

It’s actually really easy to do. If you haven’t created a Radiant extension before I’d recommend following this tutorial on the Radiant wiki.

Inside the Radiant GEM, the standard page layout resides at app/views/layouts/application.html.haml

The lines of code that insert the javascript tags are:

1
2
- @javascripts.uniq.each do |javascript|
  = javascript_include_tag javascript

The @javascripts variable is populated from inside the app/controllers/application_controller.rb file. The culprit is below.

1
2
3
def include_javascript(script)
  @javascripts << script
end

Pretty simple huh? So, all you need to do, is call this method from within your new controller, because all controllers inherit from the application_controller.rb file, so they have access to this method, and you can have different javascript included for each method if you so wish. In (assuming the example LinkRoll extension was built as linked above) vendor/extensions/link_roll/app/controllers/admin/links_controller.rb

1
2
3
4
def index
  include_javascript("admin/mootools-1.2-core-yc.js")
  @links = Link.find(:all)
end

That will insert a link to admin/mootools-1.2-core-yc.js inside the admin/links/index page. Righto, so now the only thing left to do is get the mootools-1.2-core-yc.js file into the actual public/javascripts/admin directory within the project. What you want to do is alter the vendor/extensions/link_roll/link_roll_extension.rb file so that within the activate method the file is copied over. I’d recommend making a public/javascripts/admin directory within your extension folder, and putting the file in there. Then, when activate is called on the link_roll_extension.rb file, the activate method will copy the file over to the projects public/javascripts/admin directory. You should also delete the file when the deactivate method is called in the link_roll_extension.rb file.

Questions and comments please!

Google’s AJAX Libraries API

| Comments

This might be old news (released end of May, I’m soooo behind the times), but Google are supporting hosting for popular javascript libraries, and they are promoting people using their copies of the libraries rather than hosting their own.  I only just found this out, and I think it’s pretty cool

http://code.google.com/apis/ajaxlibs/

The service supports either programmatic inclusion using the google jsapi library, or linking directly to their hosted copies.

Good things about this

  • You save bandwidth costs, as your users download the libraries from google
  • Your users get faster browsing ON OTHER DOMAINS, because the more people that use a single source, the more caching should happen

Bad things about this

  • Google have more opportunity to don’t be evil - the biggest concern for me is their increased ability to understanding which users use your application, and propensity for understanding how they use it.  A malicious individual within the company could put some nasty code in the js to screw with your site, or monitor and transmit back to googlebase what the user is up to.  It’s very unlikely, but it could happen.

There Is a Better Way (and It’s About Time I Started Showing People)

| Comments

Recent blog post from 37 signals - What you expect from clients is what you get

It’s interesting - I see exactly the same thing in organisations I’ve worked for and with (I mainly deal with very large multi-national companies).  One organisation in particular has a long history of process, and gates, and hoops, and requirements, and documentation, and review periods, and signoffs.  Those things aren’t necessarily bad, but this organisation also has a long history of burning money, and not delivering anything.

Organisations often try to become more agile, deliver more, and promote efficiency through introduction of more management, more process, more rigor.  The core of the process remains the same.  The fundamental problem doesn’t go away.  And these extra layers add overhead; time in meetings, time writing status reports, time appeasing everyone, and building consensus - which will dilute of solutions, rather than making concrete decisions and promoting original vision.

Part of my job now is to help these companies break out of this mold, advise them on how things can be done better, show them a better way.  I do expect that certain companies I work with can’t be altered, and that people won’t understand advantages to the different options out there - perhaps it’s time to change that perspective of mine - give it a shot.  The worse that can happen is that they do what they’ve always done…

invisibleSHIELD Discount Codes

| Comments

I ordered an invisibleSHIELD from zagg.com for my iPhone 3G today - and they gave me 2x discount codes for 20% off in their online store.  I don’t need them, so I’m posting them below.  If they don’t work (they are one use only) let me know and I’ll post a comment saying they’re gone.

4w5vfh

m5uemw

Oh, and with the 20% discount, free shipping to the UK and Europe, and the strength of the pound, I got it for around 50% of the purchase price at easyishop.

Lost Followers on Twitter

| Comments

Twitter seems to be having some issues, well, more issues than normal.  I was surprised to not get any updates on Twitterrific on my iphone today, so though I’d check out what was going down on their site.  It appears that I’ve lost all of the people I was following, and all of my followers.  A quick check with some of the followers as well, and they’ve lost all their contacts.

Come on Twitter, what’s going on?

(and if you want, follow me on Twitter!)

Not All Software Is Created Equal

| Comments

The types of companies I (used to) work for and (now) consult to,  love release management.  At least their IT people do.

For those who are not in the know, check out the following 2 resources for a bit of background

When companies often start out, they focus on getting IT systems enhanced as soon as possible.  A simplified, but common cycle is design (maybe), build (definitely), test (should) and deploy (definitely).  Steps in this process may be skipped when an organisation is small, and the side-effects of getting something wrong in build or deploy can be handled on-the-fly.  As companies mature and grow (in both size, application complexity, and IT landscape complexity), they often wish to have more control over the processes that manages software design, development and deployment.  As enhancements start to involve distributed application development (eg, introducing a new feature on a customer care system, that requires a service on a billing system, and have that exposed by an integration bus, and that integrated with from a web or IVR channel), the process and dependencies involved with deploying that application become more complex.

To ensure that the cross system (and often) cross department, company or country design, development, test and deploy process, companies introduce Release Management Processes.  Different application development projects are collected together, and managed from a central point - who is unimaginatively known as the Release Manager.  The release manager usually has responsibility for delivery and deployment of all the changes requried within a system, and across systems for a particular instance of deployment activities (that’s a wordy way of saying that a whole load of stuff gets developed, tested, and then deployed together).

So, to recap - early days - applications designed, developed, tested and deployed whenever people want.  More mature business - applications designed, developed, tested and deployed under a managed process, with defined implementation dates.  In principle, that sounds fine.  In fact, it sounds like a sensible way to manage development and deployment.  Software can be complex, and complexity grows as you have more systems involved, different parties, different skills, and in some extreme cases, different countries and cultures.

Business users (ie, the people paying for the development, and specifying the functionality) rarely like release management.  It’s costly.  It’s slow.  It’s inflexible.  And this is more true if the business users know a little bit about software development, and especially if it involves the web.

The web is known for being an inherently agile environment.  Web applications are usually self-contained and loosely coupled, and can be easily and quickly altered.  There are other types of applications that exist in enterprises that do not have the same inherent agility.  Customer Management Systems, Billing Systems, Banking Systems, ERP systems.  All of these systems usually have long lead time on changes, strict testing requirements, are have historically been designed and developed in a different (monolithic) manner to web systems.   The requirements on them are often different too - they often aren’t about exposing new “services” to the public, but more about internal services, bug fixes, operational fixes, or enhancements to allow new products to be offered.  However, they don’t interface with the external customer and often aren’t driven by the same requirement for agility - it’s often easier in business (for your brand, and bottom line) to deploy something that is a bit crappy internally (manual processes, double-keying data etc) if you can get the message out to the customer.

Business users want the ability to alter the messages and functions that are delivered to their customers on their terms - when they want - not bound to some (in their eyes) arbitrary release schedule.  They don’t understand why their functionality must be deployed with another, completely unrelated, system or process.  They want to get their product to market.

I feel strongly that certain types of systems fall nicely in a “release managed” category, and others fall into a “system owner” managed category.  (sidenote: I feel that for a platform that supports as much functionality as “the web” that often The System is too coarse a unit for splitting - it could be taken down to business process, journey, or user type).  For me, I believe that systems that have a requirement to be highly agile, provide a high level of flexibility (configuration/scripting, as opposed to packaging and release of compiled code), and support essentially decoupled functions and flows, should not necessarily form part of conventional release management processes.  The “release early, release often” convention can be followed on these systems.  Obviously, a business must be made aware of the risks with this approach (e.g., more defects are likely to arise), and they should also be made aware of some of the sensible processes and changes in methodology to make this approach work (e.g., agile development methodologies).  In my mind, integration and web implementations fall into this category.

Integration systems enhance the ability for each system to remain decoupled from it’s peers - and this in turn means the systems are more modular, and should be able to support development and implementation (outside of a monster sized release), even when all of the required functions are not implemented.  Integration systems can provide stubs that indicate a service is unavailable, and when each system is finally ready, then the processes can be turned on in each.  Integration systems are inherently cross application, yet system independent at once.  This paradoxical view on integration is what makes them great candidates for exclusion from release cycles - they are self contained, but support both the situations where external systems are present, as well as when they aren’t.  This level of resilience and flexibility means that they are a core enabler to allow other systems to deploy functions, and still work when the up/downstream systems they are reliant on do not exist.

I have a couple of recommendations if your organization is considering looking to migrate to a release management style approach for application development and deployment:

  1. Applying release management only to systems where it makes sense to do so, will allow a business to maintain the necessary rigour required for financial, legal, regulatory, professional and moral obligations.  Release management should not be a one-size-fits-all approach.
  2. Shielding systems with integration and process configuration flexibility (on/off switch for process/service enabling) will reduce the dependency of each system on it’s peers to be launched - and this in turn increases the flexibility to make changes to an individual system without them having a downstream impact, and increases the ability to more quickly make changes.
  3. Applying a finer-grained design, build, test and deploy scope (i.e., not cross-system) to customer facing systems will give businesses the agility they desire to get their messages to market.  This in turn will allow businesses to try more products and services in the market, and respond to competition in a more timely manner.

I believe following an approach that ensures that your systems are shielded from changes in each other, and promotes flexibility and agility in the customer facing systems is key to delivering true value to the business in terms of both responsiveness, and reliability.

Wordpress for Iphone

| Comments

This morning I saw on the iTunes store that Automattic had their wordpress iPhone application released. I promptly downloaded and installed it onto my new phone. I’m writing this entry on it now and it seems pretty good. You can upload photos but I think writing HTML will be a bit of a pain, but for a quick blog post it seems to do the job. I say if you have an iPhone and a wordpress based blog then this is a good application to have, and the price can’t be beat.

Update: uploading a photo causes my iPhone to crash. I’ll try again :-S Hmmm, it worked that time.

Update 2: now it tells me I have an invalid image, and it won’t upload it. I hope they get that sorted soon. No images for you this post sorry.