New York, New York

Mitch and I arrived at about 10pm last night in New York. We were pretty wrecked after the flight over. The flight from SYD->LAX was pretty good with Virgin Australia, but we didn’t sleep much¬†unfortunately. After a 2 hour wait to get through customs & immigration (awful when you just want to sit and relax) in LA we finally made it to the gate for our flight from LAX->JFK with Delta.

The flight was packed, and very uncomfortable! It felt like the longest 6 hours of my life, and Mitch and I weren’t sitting together so it was pretty boring.

Jumped in a cab and got taken through The Bronx & Harlem at 11pm at night which was interesting. Its great that NYC has flat rate cab fares from JFK to Manhattan for $45! We were expecting it to cost a lot more.

Continue reading

Mobile Tweete Features Update

Mobile Tweete LogoDavid and I have been working hard on getting the beta version of Mobile Tweete stable its getting there slowly. It is proving to be a bit more challenging than first anticipated as we are using an asynchronous famework .

When we aren’t fixing the bugs, we are adding features! David has been working on adding OAuth to Tweete, and I added the ability to reply to all persons mentioned in a tweet, and also the ability to copy hashtags when replying to a users tweet – this is useful for keeping the context when in a conversation.

Expect more features in the near future – we have a huge list of nice little tweaks to add!

Blog Recovered!

Hi everyone – I must appologise for the extended downtime of my blog. Right as David and I formatted our server, Mobile Tweete and work got a bit hectic and I just never got around to reinstalling my blog.

Luckily I have managed to salvage all my old blog posts so hopefully people will still find them useful. :)

Stay tuned for more ramblings from yours truly.

Wise Words

In fear of this website disappearing, I would like to re-blog the words to which I can relate to on a daily basis. Original text can (hopefully) be found here.

"You know, when you have a program that does something really
cool, and you wrote it from scratch, and it took a
significant part of your life, you grow fond of it. When it's
finished, it feels like some kind of amorphous sculpture that
you've created. It has an abstract shape in your head that's
completely independent of its actual purpose. Elegant,
simple, beautiful. Then, only a year later, after making
dozens of pragmatic alterations to suit the people who use
it, not only has your Venus- de-Milo lost both arms, she also
has a giraffe's head sticking out of her chest and a cherubic
penis that squirts colored water into a plastic bucket. The
romance has become so painful that each day you struggle with
an overwhelming urge to smash the fucking thing to pieces
with a hammer." - Nick Foster ("Life as a programmer")

That is all :)

Mobile Tweete update to 0.7b

Today I finally released the new version of Mobile Tweete (0.7). Some of you might have noticed that I skipped 0.6 which was never released publicly due to it being a very unstable codebase. It had a whole bunch of new features, but the base code kept erroring out. All of these problems have been fixed in version 0.7.

Mobile Tweete 0.7 has a bunch of new features which I decided made it a much more useable experience. I also tried to listen to comments via and incorporated a bunch of suggestions from users.  The new features in 0.7b are:

  • Top menus can now be configured
  • Individual Quick Action buttons can be turned on/off
  • Tweete now supports ‘profiles’ which apply different settings depending on the device you are browsing from
  • Change the colours of Tweete by using the colour scheme picker, or use your Twitter colour settings!
  • Ability to turn avatars on/off on the timeline
  • Search menu item now – uses api
  • Change how many tweets you want to display on each page (max 200)
  • Added themes & users can now develop and submit custom themes for inclusion in Tweete
  • Turn the header bar on/off
  • The ability to enable a restrictive input box or not. i.e. limit input at 140 chars
  • Auto-refresh interval can be specified if you would like the page automatically updated
  • Customize the ReTweet syntax
  • Reading resume line, this basically adds a line on the /home page which points out where you were up to last time you viewed the page so you don’t re-read old tweets.

For more information, you can check the help pages.

I would love to hear what you guys think about the new version :)

Google Chrome : array evals return out of order

I just want to make others aware of a little quirk with Google Chrome’s Javascript engine (V8), eval’d associative JSON arrays (aka objects) are returned in the incorrect order . The problem is that the engine doesn’t do what a programmer would expect it to do, but the programmer should be aware of why its happening and that it does happen.

Basically, take the following psuedo associative array/object and its corresponding JSON version:

Psuedo Associative array
Array (
 3503 => '',
 3847 => '',
 6852 => ''

JSON Array
var data = {3503:'',3847:'',6852:''};

Pretty basic huh? But that happens when we loop over this array/object? In Firefox, Safari and IE we get the same result, which is the array elements in the order listed above. Chrome on the other hand returns the items out of order. Now I know you are probably thinking, “its an array/object, order doesn’t matter”. This is technically true, but not if you are relying on the order for some reason, then you might find bugs cropping up. Check out the code below:

var data = {3503:'',3847:'',6852:''};
var s = '';
for(var i in data) {
	s += i + ',';
alert("Expected order: 3503,3847,6852nOrder observed: " + s)

Firefox, Safari and IE all return the following alert:

Expected order: 3503,3847,6852
Order observed: 3503,3847,6852

Chrome on the other hand returns this:

Expected order: 3503,3847,6852
Order observed: 6852,3503,3847

Weird! Give it a try in your current browser by clicking here

Javascript guru, John Resig, has posted a note about this:

Or for the official bug reports:

As always with javascript programming, expect the unexpected… and…
Be Warned!

Trac ticket: reset to new

We have recently moved from Mantis to Trac at work for our bug/task tracking, but we have encountered a slight issue with Trac’s workflow management. The issue is that we wanted to be able to move a ticket from the ‘assigned’ state to the ‘new’ state. This is a common scenario if a team member leaves or goes on holiday while they have tasks assigned to them. Quite often you wouldn’t just want to blindly ‘reassign’ these issues to another member, but reset them to their new status so another member can pick the task up when they have the time.

We decided to introduce a new state called ‘reset’ in the trac.ini [ticket-workflow] block which allows us to easily reset a ticket to the ‘new’ status as if it had just been created in the system. The new block looks like this:

reset = * -> new
reset.operations = del_resolution
reset.permissions = TICKET_MODIFY

Now at the bottom of each ticket, we have an option which says:

[ ] reset  Next status will be 'new'

Hope this works for you too :)

Tweete : a New Mobile Twitter Client

After months of complaining about the lack of features on the official mobile twitter client, and the download overhead of slandr, I decided to write my own mobile twitter client. One that focuses on most needed functionality without the huge download overhead. I call it Tweete.

I’m still working on Tweete, but at the moment I have a beta release running that you are welcome to try out which you can find here: I’ve tried to keep the pages fairly light, at the moment each page is around 5k, which is roughly the same as the official mobile twitter client, but Tweete has extra features. Slandr on the other hand is around 25k per page load (last time I checked). My mobile handset browser (WM6 IE) doesn’t support gzipping content, so I’ve tried to make pages as light as possible without gzipping.

To use Tweete, simply login with your twitter login details and away you go; no need to create an account or maintain another password.

Currently the following features are implemented in Tweete:

  • Send updates
  • User & friends timeline (with pagination)
  • View replies
  • View direct messages & send direct messages
  • Pagination for direct messages & replies
  • Mirrored Twitter URL structure
  • User profiles
  • Follow & Unfollow users
  • API Limit handling

The following features are planned:

  • Delete tweets & direct messages

And the following may or may not be implemented:

  • Customize css colours from twitter account settings

If anyone has any suggestions, feel free to contact me with them (or leave a ticket at the Tweete Trac page) and I’ll see what I can do :)

For those of you who are interested in implementation details; I used the Kohana PHP Framework. Kohana is designed from ground up as a lightweight secure php framework for rapid application development. I have had a look at a number of frameworks for php, and in my opinion, is the most easy and logical to use.

Inaugural BarCampGoldCoast was a success!

BarCamps are exploding around the world these days with new events and locations popping up all over the place. Australia is no exception! The inaugural BarCamp Gold Coast took place today at Griffith University on the Gold Coast and it was a complete success (Many thanks to Steve Dalton for organising the entire day). I won’t rattle on about what BarCamp is etc as I have already done that with my last post about BarCampBrisbane.

Topics for the day ranged from Incorporating companies through to twisted programming in python all the way to reflections in Java; a pretty broad spectrum of topics by any means.

For the first time, I decided to participate more actively and give a presentation of my own. I decided to talk about AJAX Pushing Techniques (a topic very close to my heart) as most people don’t realise there are different ways that AJAX communicates; they simply group them all together under one umbrella called titled AJAX. I talked about three common methods of AJAX communication: polling, long-polling(comet) and pushing, and the consequences/considerations one needs to take when implementing each of them. For more information, you can download my powerpoint presentation from here. If people are interested, I’ll post my code samples here too, but unfortunately they could be a little tricky to get working if you aren’t familiar with named pipes as the GPS simulator server relies on them.
Based on feedback from people after the presentation, I think a lot of people enjoyed the topic as it is very relevant at the moment. In particular, people showed great interest in the section on multipart pushing, perhaps something to keep an eye on in the future.

As with every BarCamp I have been to, the presentations come second to the networking opportunities provided by the ‘unorganised nature’ of BarCamp. If you aren’t very technical, or don’t really understand something about IT, BarCamp is still for you! You don’t even need to be technically minded to gain something from attending BarCamp, and if you have thought about going but never bothered, I strongly encourage you to attend the next one as you only have something to gain.

If you are interested in the twitter hashtags for the day, you can check them out here: #barcampgc and #bcgc

If you want to check flickr pics from the day, check them out here and here or for the twitpic stream, check them out here

Here are some links to other peoples blog posts about the day:

Steve Dalton
Michael Rees
Matt Hooper
Des Walsh