Wednesday, March 26, 2008

fixing dcommit maddness

when pushing changes from git back to the svn dcommit by default does a rebase afterwards, which causes all the time stamps of the checkins in the git log to change to the dcommit time, which is really annoying. reset can be used to get the times back, but then dcommit wont work since they're not synced. To get around this you have to use rebase before the dcommit, then reset again.

git commit
git svn rebase
git svn dcommit --no-rebase
git reflog
git reset --hard HEAD@{5}
reflog is used to list all the changes to a branch and find out the number to use between the braces in the reset command. The number you're looking for is the one of the last commit.

Unfortunately this needs to be done every time I want to push back to svn now. I would hope that using --no-rebase on every dcommit would have avoided this, but I can't test it now without messing up my repos.

Sunday, March 23, 2008

shitty senheiser cables


shitty senheiser cables
Originally uploaded by tristan.king
god damn it! they're not even a year old. And from the black tape around the jack, you can see it started to fray ages ago.

Apart from that, they're very comfortable headphones, which I was perfectly happy with whilst running and riding. They're still good, except i have to keep the cables at specific angles to get the full sound.

I shall have to find myself some new sports headphones now.

On another note: this picture was uploaded from my n82, and the post was made from flickr. very cool.

twitter status messages as an image

I love twitter, and I like to have my status message everywhere possible. Unfortunately most forums and such don't allow having the flash or javascript badges in signatures etc. What was needed was an image generater which could create a dynamic image based from the current twitter status message. After some quick googling I cam across this site which generates an image similar to the flash based twitter badge. I'm not very fond of this badge tho. It's ugly. I much prefer the facebook badge for the official twitter facebook app. So I decided to build an app which generated an image similar to the facebook badge. After a few hours of pluggin away with django and the pil I had done it!

the source can be found on github.

The app currently grabs the status message from twitter every time the image is requested. Thus I don't think this app would scale very well (altho if it was run by twitter themselves, and connected directly to their databases it probably would). But for the forum or two that I have it on, it should be fine.

dreadlocked!

Seeing that I had nothing much to do on the 4 day Easter weekend, I decided to try dreading my hair myself.

After the first minute of attempting to section the hair myself, I realised it was not gonna work. So I convinced Hai to section it for me, then went onto the backcombing myself and managed to do it all over 2 days. My left arm is still sore! It's amazing how much work it is to hold your hands above your head for an extended period of time.

I ended up with 30 dreads, some small some fat (and one extra fat one that wont sit flat at all!). Photos here

It feels good to be back on the path to dreads! :)

Wednesday, March 19, 2008

django+jython+jetty

UPDATE: since this is now 2 years old, and one of my key links is broken i've written a quick update here: http://tristanking.blogspot.com/2010/01/re-jettydjangojython.html

Yep, you read that right. Django, running ontop of jython, running inside jetty.

Why? The idea just popped into my head while in a meeting discussing our project's deployment strategy. I thought "hey, we already have a tomcat server running for other people's projects, I wonder if i can get django+jython running inside a servlet container". Seeing that jython already came with a PyServlet class, i figured the base work was already there and decided to give it a go.

So I started off looking at the PyServlet class that ships with Jython. PyServlet allows you to write servlets from python code, implementing the standard doPost, doPost, etc functions, from which you access by going to a URL which matches the path name of you .py file. This doesn't match the REST method django uses, so the PyServlet needed some work. It turned out to almost be an entire rewrite, the only things remaining from PyServlet being the PySystemState initialisation.

As well as the DjangoServlet, a django handler module had to be created to bridge the gap between the java servlet request and response objects and the django python request and response objects. The already existing modpython handler provided a great guideline to make this, and it turned out to be a breeze.

Currently, I build the DjangoServlet on it's own using maven and install it into my local maven repo (for people who have not used maven before, this involves a single command line call). The servlet handler module is put straight into django in the same location as the other handlers (django.core.handlers.servlet). I then have another maven project with a dependency on the DjangoServlet project, and a web.xml. The web.xml requires a few init-params: one for the jython home, one for the django handler class and one for the django app location.

With everything set up, using the maven jetty plugins, i fire jetty up, which loads the DjangoServlet and BAM! django running in a servlet container.

So far I've not noticed any difference in performance, but one nice 'feature' is being able to use maven's dependency management to set up the classpath with the jars required to run your app (it definitely beats having the edit the $CLASSPATH before starting jython and my settings.LIB_DIRECTORY method).

A few things still need to be done to make this really easy to setup and use, It may be best to try move the handler module out of the core django code, so that once jython is up to the task of running django without any modifications it is possible to deploy this on a pure django+jython install. I also need to write scripts to build the pom.xml and web.xml files.

If you want to have a look at this, or deploy it yourself, you can grab the projects from github. Here for the DjangoServlet project, servlet.py for the django handler module and hydrant is my django app which has example pom.xml and web.xmls for you to use as a reference for your own (until i have proper scripts/docs to build them).

Wednesday, March 5, 2008

Music and motobikes, solved!

I went for a motorbike ride out to Charters Towers on sunday, which gave me a chance to try out the Etymotic Research ER-6 Isolator headphones that I bought specifically for highway riding.

When riding a motorbike there is a lot of noise. There's the noise of the engine, the road noise, the sound of the wind rushing past your head, and it's all very loud. This is easily pointed out by the fact that to listen to music using standard headphones i have to crank my iPod to full volume just to hear it. This is annoying for two reasons. One: The quality of the music is greatly reduced when turned up that loud, and two: the damage it is doing to my ears at that volume. But it's not only my headphones, what damage am I doing to my ears just riding the bike with all that other noise? Hence, I decided to invest in a pair of headphones to try combat these problems.

First I tried a pair of Sony MDREX52SLB in-ear headphones, which didn't work out too well. They were better then my standard iPod headphones, but not by much. The only real advantage was that the in-ear model made it easier to get my helmet on without pulling them out. So I decided to look for a noise-canceling set of Sony headphones, and in my searches instead came across the ER-6.

The ER-6 is a set of in-ear noise-isolating headphones, for which Etymotic Research claim it's noise-isolating design "far surpasses that of active noise-canceling earphones". My opinion? pretty damn good. I plugged in the headphones, cranked the iPod up to half way (which is what I put it at if i want to block most other noise out) threw my helmet on away I went. I was instantly impressed. 100km/h and i could still hear the music. 110km/h, music was fine. 140km/h, still singing along! Of course it wasn't perfectly clear. The other sounds were still there (which is a good thing, for safety reasons), they were just a lot quieter. When driving through the city, I could hear the other bikes and the cars, which is impossible with normal headphones without stopping (or fumbling around while riding) to turn the music down or off.

These headphones are exactly what I wanted. I hope my ears will thank me. And as for Etymotic Research's claim about it's noise-isolation, I've got a pair of Sony MDR-NC22 noise-canceling headphones just waiting to be tested out on my next long highway ride. They've got a lot of impressing to do though!

Connecting my n82 to uni wifi

I got a N82 yesterday, and have finally figured out how to connect it to the Wifi (ssid: walkabout) at JCU. So here's a quick run down on how I did it.

Get CA certificates

I used the Keychain access app on my MacBook to export the certificate authority that JCU uses (CACert.org), then sent the cert to the phone using bluetooth. My phone has already been paired with my mac when i set up iSync, so you may have to do that before continuing.

  1. Start "Keychain Access"
  2. Find the cert named "CAcert Class 3 Root"
  3. Right click on it, and select "Export "CAcert Class 3 Root"..."
  4. Select the directory you wish to save the file to, and click Save (make sure the file format is .cer).
  5. Find the file in Finder, Right click on it, go to: More -> Send "file name" to -> Phone name. This will send the file in a message to the phone.
  6. Open the message on the phone, it will detect that it's a cert file automatically.
  7. Select "Save" to save the cert file.
Set up WLAN
  1. Goto: Tools -> Settings -> Connection -> Access points
  2. Open the options and select New access point
  3. Set Connectiong name to "Walkabout"
  4. Set Data bearer to "Wireless LAN"
  5. Set WLAN network name to "walkabout"
  6. Set WLAN security mode to "802.1X"
  7. Enter WLAN security settings
  8. Set WPA/WPA2 to EAP
  9. Enter EAP plug-in settings
  10. Highlight EAP-PEAP, hit options, and select Enable
  11. Enter EAP-PEAP
  12. Set Authority certificate to "CAcert Class 3 Root"
  13. Set User name in use to "User defined"
  14. Set User name to jc number
  15. Set Realm in use to "User defined"
  16. Leave Realm blank
  17. Set Allow PEAPv2 to Yes
  18. Go to the EAPs settings (click the right button on the nav control)
  19. Highlight EAP-MSCHAPv2, hit options and select Enable
  20. Enter EAP-MSCHAPv2
  21. Set Username to jc number
  22. Set Password
  23. DONE!
Now when you open up the web browser, and it asks for a connection, select Walkabout and everything should work fine! The auth server will ask for your jc number and password again to auth you to the firewall, and after that everything runs smoothly.

I'll do a quick write up on what i think about the N82 in a week or two when i've played with it some more.