Monday, 25 March 2013

Week in Review - 2013-13

photo credit: @Doug88888
via photopin cc
Installing Windows Vista

For the first time since I bought it, my old Dell Inspiron 1525 has Windows Vista back on it. It's been running Ubuntu Linux since I got it, so why does it now have Windows again? My children are using computers at school now and they are using Windows - mainly Office. So rather than confuse them with different operating systems it seems more constructive to just give them some consistency and let them have their own computer set up like it is at school. I'm going to have to buy Microsoft Office for them - which after seeing how Libre Office handles clip art, I'm quite happy to do! (MS Office has a nice search and browse for clipart which the kids love and can use well. Libre Office didn't seem to have any search and you were left to click into each folder one at a time to see the clipart - not particularly useful).

Downloading statements

I've just noticed PayPal have an interesting feature - you can download your transaction history, by date range, OR just the transactions since your LAST DOWNLOAD. Awesome - many sites are missing this feature. Some of the online banking sites don't even remember ANYTHING - date range, file type (csv etc) - from one export to another - you have to enter everything for every account. Just amazing.

Nexus 7 Android Tablet

I finally have an Android tablet - I've been thinking about getting a Kindle for a long time as a way to catch up on reading during my daily commute. The paperwhite looked good but I couldn't order it from Amazon because they aren't shipping it to Australia and Dick Smith only just started selling it at $169. So when ShoppingExpress had the Nexus 7 16GB for $199 plus postage, I thought that'd be good. A full tablet instead of an eReader, and a little bit heavier, but I think its a good compromise and I can use it for so much more.

New screen protector for my phone

When I got my HTC Incredible S (on an Optus plan) they put a screen protector on it before giving it to  me. So I never saw the screen without it. The protector had a kind of grainy-ness to it but the screen looked okay. Recently the protector started looking pretty bad and it was time for a new one - and WOW, what a difference. This protector is different, not grainy, totally clear but I assuming its not too good for reflection! It was also very easy to put on since it is a stiffer plastic and doesn't bubble. Right now my screen is looking totally awesome and like a brand new one!


Tuesday, 19 March 2013

Week in Review - 2013-12

Google Reader and Listen

I've been using Google Listen for listening to podcasts since I got my Android phone. It worked well, I would just subscribe to podcasts via Google Reader and drop it in the 'Listen Subscriptions' folder. But now with Google announcing the end of Reader, and Listen has long been abandoned, I'm looking for a suitable alternative. I really liked how I simply had to subscribe to a feed online - if I have to subscribe to things via an app, I'm stuck if I ever want to switch apps. Maybe I'll try Pocket Casts.

LinkedIn Groups

I've noticed that when contributing to LinkedIn groups, its not immediately obvious to others from your profile. Recent comments might show up in your activity stream but they'll soon disappear. If you view your profile, you'll see a Groups section that shows the groups you have joined. Click on one of those and you'll be taken to the Group page and at the top there will an area where you can start a discussion - on the left will be your picture and under that is a tiny link to 'Your activity'. Click on this and you'll be able to navigate your history within this group. You can link to this page using the group id and your   member id. Mine link to Agile and Lean Software Development looks like this:

If you are viewing a discussion, you can click on the picture of a commenter to see their activity. 

I'd prefer it if the groups section of my profile had a link to my activity, so it was easy to see. At the moment no prospective employer would ever find it.


Monday, 18 March 2013

Living without Google Reader and Listen

Since I got my Android phone, I've been using Google Listen to listen to podcasts. I really liked this solution since adding another podcast to my collection was as simple as adding it to my 'Listen subscriptions' folder in Google Reader. All from within my browser, all at the click of a button. Awesome.

Listen may not have been the best podcast player - it didn't let you speed the playback up and didn't have a sleep timer. But it was simple and worked. Pity it was discontinued last year.

Now Reader is on its way out I've had to find a new solution to consume my podcasts. And I've found it in Pocket Casts. This does allow you to speed up playback and set a sleep timer - something particularly useful since I've found podcasts distract me so much I can fall asleep very quickly. I've imported my Reader OMPL file by doing the following:
  1. Read how to export Google Reader feeds here
  2. Now email the subscriptions.xml file to yourself
  3. Open the email on your phone and save the subscriptions.xml attachment to your phone - if you are using Gmail you might need to use something like GMail Attachment Download to save the attachment
  4. Use a file manager like ES File Explorer to move the file into the /PocketCasts/opml_import directory
  5. Go to Pocket Casts settings and select the Import & Export option, then click on the 'Import OPML file' option and let it do its stuff.
I really would like it if they had a web interface where I could add and manage subscriptions as easily as I did with Reader - hopefully they'll get there.

To get the subscribed podcasts to automatically download, I had to create a playlist, containing All Podcasts, with 'Auto Download' and 'Only on WiFi' selected.

For RSS consumption, I'm trying Feedly - so far I'm impressed by the presentation and its across all of the platforms - web, Android and IOS.

Saturday, 16 March 2013

Fixing my server 500 errors

I'm slowly working through my broken pages - which were broken during the conversion from WordPress to Blogger. I can see in Google Web Master tools I've still got 22 server 500 errors left. There must have been more like 50 to start with. Its a slow painful process of copying the content from the broken post to a new post. I suspect it may be caused by the original WordPress post having comments - something the Wordpress2Blogger script must not be able to handle and therefore creates an corrupted post. Interestingly, the contents of the post are still viewable via the monthly archive page, but viewing the individual post errors - presumably as it tries to render the comments. If I had time, I'd go look at my WordPress database to confirm this theory but all of my time is being taken with fixing the errors. I cannot recommend using the Wordpress2Blogger script, I'm feeling a lot of pain and I had no help from Blogger support or groups.

Thursday, 14 March 2013

Week in Review - 2013-11

Job interview testing

While job hunting, I've come across one company that seems to have a very good filtering process. First off, you get a series of technical questions which are obviously aimed at finding out how you think or how much you know about technologies applicable to the organisation. I'm sure these questions have been custom written for their environment - which does to some extent convey some information about the potential role. If you pass that, you get an online 2 question Codility test which you have exactly an hour to complete. This is where you actually write code and can verify it compiles and produces the right answers. If you haven't seen Codility before, have a look - as a programmer you can even complete tests to get a 'certificate' you can put on your resume.

Job hunting sites

Some interesting sites when job hunting:

LinkedIn group contributions

I enjoy participating in the groups on LinkedIn, but does anyone know how you can view all of your contributions? Seems to me once you've commented, its up to luck if you can ever find it again. If I'm going to continue, I'll have to print the discussion to PDF so I can remember what I've written. Contributions I've made in the past (couple of years ago) seem to have gone, maybe these were part of the discontinued LinkedIn Answers... I think linked in is missing an opportunity here, I'd like my contributions to be easily found on my profile by potential employers and my network - similar to my StackOverflow profile.


Friday, 8 March 2013

Week in Review - 2013-10

  • An Optus representative came knocking the other week, and explained that by having an Optus home phone, broadband and mobile phone (which I have), I'd qualify for a 25% discount and free Fetch TV. Now, this is all GOOD. I had to upgrade my mobile plan from $29 to $30 (for which they wanted a $100 plan change fee), but hopefully my next bill will be 25% smaller (down from $80ish to $60ish). And, I'm currently enjoying the Fetch TV experience. This set-top box has a 1T hard disk, and a pretty good interface for navigating the recordings and (free albeit old) IPTV movies. I'm not saying its the best, but it does have me considering turning off the MythTV media center since it takes care of recording terrestrial TV (but I would need a DNLA alternative or similar for watching audio/video/dvds - maybe a NAS? or XBMC?). See

  • An interesting point to note, now that I have FetchTV I can rent and stream movies for approx $6.50 - the price it used to cost to rent a new release DVD. However, the local video shop now has $1 Tuesdays - so, even though the convenience of streaming is AWESOME, $1 is even more so.

  • I'm working with Griffon on a JavaFX application, and I've been having a bunch of strange, almost random problems. I finally thought I should find out what version of JavaFX I'm using - turns out if was javafx.runtime.version: 2.2.1-ea-b02 - not the latest! I'm running jdk-1.7.0_07, so now I've downloaded the latest jdk-1.7.0_15, and now I have javafx.runtime.version: 2.2.7-b01. To find out what version you have, use System.getProperties().get("javafx.runtime.version"). So far I've found figuring out JavaFX with Griffon quite tedious and I'm considering switching my Griffon app to Swing.

  • It turns out there is a simple way to find out what packages are included in an Ubuntu distribution  that doesn't even require you to be running Ubuntu (i.e. via web browser) - simply point your browser at for a full list (looong page) of Ubuntu 12.10 packages. For other releases, just go to and pick the version - this will show you package groupings, but at the bottom of the page you'll see a link to 'All packages' and a 'compact compressed textlist'. This makes it real easy to find out - say - what version of Jetty is included.

Tuesday, 5 March 2013

Java on a $5 per month server from Digital Ocean

I just recently came across Digital Ocean - "Simple Cloud Hosting". I was impressed by the pricing, much cheaper than my current VPS solution so I've set up an Ubuntu 12.10 server with 512MB, 20GB SSD, for $5 USD per month. Since I've moved almost everything to Google (from self hosted WordPress to Blogger and Google Docs) the only thing I really need a VPS for is to run my Java applications (there still is the option to use AppEngine with Play 1.2.x if it makes sense to use DataStore).

But for $5 a month, this means I can use Grails or Play with a relational database - if it performs well enough.

Setting up a server with Digital Ocean really is simple. Once you've signed up (check their Twitter posts for a coupon) and added a credit card, your server can be running in minutes. I chose Ubuntu 12.10, and then they have nice and clear instructions on what to do next to secure it:
Now, a couple of other things I did to get the server up to date and install Jetty8:
  • sudo apt-get update
  • sudo apt-get upgrade
  • sudo apt-get install openjdk-7-jre-headless
  • sudo apt-get install jetty8
To get jetty to start, you've got to edit /etc/default/jetty8 and change:
  • NO_START=0
  • JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386/jre/
You can find the location of Java by using 
  • ls -al /etc/alternatives/java
which should show you the linked path such as
  • lrwxrwxrwx 1 root root 45 Mar  5 01:58 /etc/alternatives/java -> /usr/lib/jvm/java-7-openjdk-i386/jre/bin/java
Now start Jetty with
  • sudo service jetty8 start
and it should be running on port 8080. I still have to enable it on port 80, but first I'll see how well my applications run on it and how it goes with memory.

'top' is currently reporting 188MB free - not much, but to upgrade to 1G is only going to cost $10p/m - I'll just have to see how well the applications run...

top - 03:27:04 up  1:29,  3 users,  load average: 0.00, 0.01, 0.04
Tasks:  67 total,   1 running,  66 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:    508396 total,   319948 used,   188448 free,    16688 buffers
KiB Swap:        0 total,        0 used,        0 free,   250652 cached

(In the past I've usually used Apache in front of Tomcat, but since I don't need all that flexibility any more, I'm trying to simplify my setup and make the best use of my memory) 

Saturday, 2 March 2013

Integration testing Griffon services

I wanted to create an integration test for some Griffon services - where I wanted to set up some data first, then check that the service produced the appropriate results. Therefore, I wanted the database working normally, but I needed access to a configured Griffon application and the required services.

My issue was how to get hold of the services? They don't automatically get injected as I first expected. But luckily, StackOverflow and Andres to the rescue:

Friday, 1 March 2013

Griffon - restricting a textfield to numbers

With my latest Griffon+JavaFX application, I wasn't having any luck binding a textfield to a 'float' property in my model. So to work around it temporarily, I've added a change listener which will veto any input that isn't a number.

This example is basically using a very Java centric approach: Now, we can simplify this by using the Groovy way: See Groovy way to implement interfaces to understand how this is implementing the interface.

If we want to have several text fields using the same logic, we can define the closure in the Controller and reference that in many places: Still, this is not optimal since I have to use Strings instead of Floats in my model - but it does let me continue with whats important right now. Hopefully the binding bug can be fixed soon.