Category: Annoyances

Fixing my Buffalo Linkstation Live LS-CHL

I bought a NAS drive a year or two ago and I was trying to upgrade the firmware to the latest version, 1.60. Unfortunately along the way the firmware update managed to fail and I ended up with a bricked NAS. The result was a RED LED light blinking at me six times in a row upon reboot requiring. I tried quite a few combinations before I was able to restore anything. I’m writing them out here, step by step, just in case it helps someone.

Pre-requisites
I work on a mac, but the only software they provide to reset firmware effectively runs on windows. Fortunately I had a windows netbook still around that I could use to reset it.

Boot the machine using TFTP
This approach for booting the machine remotely is well-documented here, but unfortunately their linked software didn’t work for my case. A kirkwood one floating the internet and listed on this forum post seemed to work best for me.

The steps that worked for me included:

  1. Connect the NAS via ethernet directly to the windows laptop
  2. Set a fixed IP to 192.168.11.1, allowing the default gateway details to fill in (tabbing away works). Save this
  3. Start the TFTP Boot.exe program from the kirkwood zip
  4. Start the LS-CHL Linkstation Live in TFTP mode (hold the function key down for a while, turn on the power and wait for the blinking blue lights). The red flashing lights came on, and when I hit the function key again, it would eventually bootstrap
  5. You should see two console messages as described in the post saying “uImage.buffalo, xxx Blocks Served” and “initrd.buffalo, xxx Blocks Served”

Reset the firmware
At this point, I figured, the machine is rebooted, now you have to apply some firmware. I downloaded the latest, and then waited to see if the machine would come up for an update. At this point, you need to make sure you follow the Force Firmware Update post instructions.

One extra step that I ended up having to do was in response to a “Couldn’t connect” problems. At this point, another post pointed out that I needed to remove my static IP I had set earlier. I changed the windows box, fired up the NasNavi (to obtain a different IP and to establish a connection to the Linkstation) and then I could follow the firmware update.

I rebooted the machine, and it still flashed red, but trying to go through this cycle again, at some point – I don’t remember when I saw yellow blinking lights. I counted them, and they informed me and, according to the manual, the machine was resetting its firmware. Yay! A little bit more waiting, and I had to repartition the drive and it was blue lights all on again.

Another maven workaround – Disabling parent defined plugins from running

Perfect. Just what we need when someone forces a parent pom onto your project…

<build>
  <plugins>
     <plugin>
        <artifactId>thePluginArtifact</artifactId>
        <groupId>thePluginGroup</groupId>
        <executions>
           <execution>
              <id>the-execution-id</id>
              <phase>none</phase>
           </execution>
        </executions>
     </plugin>
  </plugins>
</build>

Details provided from here.

We’re not trying to be rude, honest!

I got included in on a twitter conversation by Mark responding to Brian talking about how ThoughtWorks people at a particular conference huddled around together. It’s not the first time people have observed that. A natural reaction by people outside of that circle is to comment on this, such as, “You’re not very inclusive,” or “Crowding around together is so rude.” Having been part of these circles before, and being told this judgement (with accompanying observation), I can tell you where it stems from.

ThoughtWorks is a distributed company
Though I can only observe consultants I interact with from other companies, I feel ours is definitely very global. We encourage people to travel from one country to another, frequently rotating projects and encourage each other to present at conferences. Being located pretty much all around the world, it’s natural you don’t get to meet everyone face to face. Even here in London, I am now used to turning up for a new office event only to meet several new people. We work on different projects, so it’s natural not to meet anyone.

Our electronic-social ties are extremely strong
Internally we have, at least what I like to think of as a very active mailing list. When I post something on there, I generally get some pretty good responses particularly from the largest community of software developers. Over time, you get to know someone’s online persona. You have a picture of them in your head, and start to see the nuances of how they express themselves. Even things like twitter help to do this. It’s not uncommon for me to feel more strongly attached to people actively participating in email conversations than some people in the same office of who I rarely see or talk to.

Conferences are attended by ThoughtWorkers from around the world
As I briefly touched upon before, as a global company we try to encourage people to travel and present at conferences. This naturally leads to opportunities for people to meet in person for the first time. It’s strange meeting people you feel like you’ve known for a long time in person for the first time. I still remember, for example, my first day in the London office where I finally met Liz Keogh and Tim Emiola for the first time after conversing with them electronically for 18 months before hand, and them now inducting me into the whole Britishness of “buying rounds” and the way that it all eventually works out.

People have a need for connectedness and belonging
Having just recently talked about it at the XP2011 conference, I noticed that we weren’t the only people to congregate into small circles. For instance, I remember a whole bunch of people from Brazil hanging around together for almost the entire conference. Likewise for a small group of people who worked for the same company in Sweden. It’s a natural thing, particularly in new environments, for people to stay close to those they already have relationships with.

It’s less about you than you think
It is all of these effects combined that lead to ThoughtWorkers aggregating at events. Perhaps it’s also because we tend to be quite loud/opinionated/noisy that it’s more noticeably. Gravitating towards each other isn’t a conscious act trying to exclude everyone. In fact, I know ThoughtWorkers like hearing other opinions, particularly if they’re even more different and based on strong experiences and though happy to contribute to conversation will be welcomed with open arms.

We can get better at this
I know it can be hard approaching a loud, opinionated group of people. I know we can do it better. Being aware of how we’re sometimes perceived, this is how I go about trying to break the perception:

  • Invite others in – If I know someone standing at the edge of a group, I’ll introduce them and explain my relationship to them to others. It helps break the awkwardness and creates more opportunities for everyone to talk about similar interests.
  • Randomly break away – If groups get too large, or hang around too long, I like to break away and meet some new people. I also try to encourage other people to do the same. It’s not only a good way of getting different perspectives, but helps address some of the above issues.
  • Explain to others the contributing factors and perceived effects – By talking people through the above elements, it helps others understand why perceptions come up the way they do. More importantly it lets them decide how they’d like to deal with it

Whilst I can only speak for myself, I do hope that other people can benefit from this by being more inclusive where possible in these sorts of situations.

UTF-8 not supported by ResourceBundleMessageSource

Every time I return to Java, I’m reminded by how hard simple things seem to be. Localisation is often quite important for applications, so I expected UTF-8 support out of the box with Spring Framework and Java via their ResourceBundleMessageSource and standard ResourceBundle classes.

Things are never that simple as pointed out by the following articles:

Despite the poor documentation not noting this, there are work arounds described in the links above. Alternatives include using the, much longer named, ReloadableResourceBundleMessageSource and InputStreamReader classes.

Making the mac more usable with keyboard shortcuts

I’m a self confessed keyboard-junkie and avoid using the mouse to do most things. Being new to a mac environment, it’s not necessarily clear how to get some of the usual things done. Inspired by the tip that Thomas wrote here, I figured it’d be worth sharing how I’m navigating my way around. Please leave a comment sharing your favourites!

Enable tabbing to all fields in webforms
The mac apparently wants to make it difficult by default to enter in web forms using a keyboard. Turn on the Full keyboard access option to All Controls. Use the dialog following System Preferences => Keyboard & Mouse => Keyboard Shortcuts page.

EnableTabbingToAllControls

Equivalent of accelerator or access keys
MenuBarMost windows applications provide underlined characters so you can access them with the ALT+<letter> key. In this manner, you can access all items without having to click the mouse.
Mac equivalent: The most effective way I’ve found so far is to use the Help (CMD+SHIFT+?) and then type in the label of the menu item. Use the up and down arrows and enter to select. Note that this isn’t guaranteed to work in all applications (like Firefox opening a help page instead)

Closing windows
Fortunately the CTRL-W option that would close applications maps directly to CMD+W although unlike windows, closing the last windows doesn’t automatically shutdown the application. CMD+Q will do the trick instead.

Opening finder
On windows, I’d use the Windows+E button to open up a new version of windows explorer to look at files. There seems to be a few ways to do this. If you have quicksilver installed, open quicksilver and then start typing Finder. If you’re using spotlight, start typing a file you know exists and then hit CMD+R (reveal in finder).

Unlike windows explorer, finder won’t necessarily always start from the root directory. Use the keyboard shortcuts CMD+SHIFT+H to start from home context or CMD+SHIFT+C to start from the computer context (useful if navigating to network drives).

Scrolling through windows of the same application
Use the CMD+` (backquote) to do so. Use CMD+~ (tilde) to go the other way (or CMD+SHIFT+`)

Show Desktop
On windows, I would use the WIN+M to minimise all windows. On the mac, you can use F5 if you don’t map those keys to normal functions (such as volume control) or if you turn on Expose, you can use F11 to hide all.

Visual Studio 2008 – The Anti Region Shortcut

If you happen to be unfortunate enough to stumble across “region”-ised C# code, use the following short cut keys to expand all in a file:

CTRL-M + CTRL-L

Give it a go! Or better yet, disable all code folding by default:

Text Editor -> C# -> Advanced. Uncheck “Enter outlining mode when files

Go to Text Editor->C#->Advanced. Under the “Outlining” section, uncheck the option labelled “Enter outlining mode when files open”.

Failing to upgrade to iPhone 2.2 firmware

In trying to do the right thing and keep the iPhone up to date, I got the unfortunate “something went wrong” dialog. I’m sure all the fan boys will ask why I bother if I have a windows machine, but that’s not the point of this post.

In trying to fix this, I have now discovered the big difference between Apple’s “reset” (think reboot) and “restore” (reset to factory defaults or wipe and reboot) with “restore” only available through the iTunes interface. For some reason, when I used to own an iPod three years ago, I thought there was a hard reset that would effectively “restore”. Unfortunately no more.

A few searches revealed nothing that worked for. I made sure I had the latest drivers installed, uninstalled and reinstalled iTunes (restarting windows). When all other posts seemed to suggest I would find an Apple Mobile Device under Device Manager, all I could find under the USB devices was an Apple Recovery (iBoot) USB device. I followed the advice from a number of sources including Apple support, all suggesting I should unplug, restart iTunes, replug in the iPhone and it should all worked.

Eventually, a combination between restarting windows, starting iTunes, plugging in the iPhone, restarting iTunes (note that last step) seemed to finally pick up the fact that I had an iBrick. So I sit here now while I wait for it to sync to my last backup, fingers crossed for the next time I update. I’m hoping someone else benefits from this post in case they also have trouble upgrading to the 2.2 firmware update.

Death by a thousand differences

One of the most common smells I see on projects is the desire to do things slightly differently for no good reason. Triggered by many different reasons such as new people joining a project, or when new functionality is being added, or when bugs need to be fixed. Each individual difference isn’t a problem on its own, rather it’s their accumulative effect that has a significant negative impact on projects that force developers to continually context switch when trying to match their mental model against the code or to navigate their way around a new area in the system. I find the death by a thousand differences is especially a significant problem on iterative projects where change happens rapidly such as the project Frankie describes.

Code isn’t the only thing that suffers from this condition as well with many unwarranted differences built into configuration and build and deployment scripts (ant, nant and msbuild).

What to do about it?
In many ways Rails had a very strong opinion that I agree with, following convention over configuration, with a core principle that every difference should exist for a good reason. Projects need code standards to help maintain consistency, and needs to be updated to reflect the current state of the system. New team members need to understand what the standard is, why it exists and the whole team needs to be vigilant against the additional context-switch each new difference adds.

Sometimes differences must exist, but always apply the 5 whys to question if the difference is really needed. Sometimes they exist as a means to an end (a transition to a better implementation pattern) yet projects must be wary that not too many differences exist at the same time without a good reason.

Office 2007 Woes: Insert New Worksheet

Excel 2007 is quite a horrible experience. Someone recently told me a story where apparently, Micro$oft said that it’s easier for new users to learn, yet would take three weeks of re-training for existing office users. Shame I fall into the latter crowd and not the former. Read on if you are wondering where your worksheets went and want to insert a new worksheet. Continue reading

Unhelpful Error Messages in Maven

What’s wrong with this: “Cannot execute mojo: resources. It requires a project with an existing pom.xml, but the build is not using one.”

How about? What are you talking mojo to me for? What is going wrong and how do I fix it?

Perhaps something like this would be a better error message: “Maven is looking for the pom.xml file and cannot find it. Maven assumes this file is in the directory you are running it from. If you are running Maven in a different directory, perhaps you might want to use the –file switch.”