SVN to (existing) git repository in 3 steps

September 14th, 2011

Today I migrated Morrigan (my media player and manger project) from a private SVN server to an existing repository. Usually I would not bother writing up such mundane things, but this was so easy I wanted to make the point.

Assuming an existing target git repository called `projectfoo-git’, it goes like this:

$ cd <projectfoo-git directory>/..
$ git svn --authors-file=svn-authors.txt clone -s projectfoo-svn-git
$ cd projectfoo-git
$ git pull ../projectfoo-svn-git
$ git push

The remote repository will now contain the full SVN commit history merged into the existing history. Are there any other source control systems that can come anywhere near making it this easy? I doubt it.


Developing on Android

September 10th, 2011

A few days ago I got an Asus Transformer – an Android table with a full physical keyboard. Since then I have been trying to figure out the best way to write code on this device. While porting Eclipse to Android would be cool, it would also be near impossibly complex. It would also be excessive. What I am aiming for here is a fairly simple toolchain and workflow.

To start with, I would like to be able to:
– Check code out of Git
– Make some changes (preferably with syntax highlighting)
– Commit and push changes back to remote Git repository

And there are a number of ways this could be done…

1) Write pure-Java Android app. There are good Java libraries for most tasks, including a pure-Java Git client. This would still be quite a tough job though as there would be a lot of UI work to do.

2) Native binaries. It is in theory possible to cross-compile all the needed tools, including a shell, git client, vi, etc. The main downside here is how they interact with non-rooted devices. Native binaries must be packaged up inside a .apk like any other app and can only be run by their owning application. For example ConnectBot could not use a local-term to run a git binary from another .apk. A custom ConnectBot build containing the extra binaries would need to be built. Also I have yet to find an example of compiling git for Android. :(

3) Use a VM. Android devices like this have more than enough power to run small VMs. And recently a VM was written in JavaScript that could run shell, vi and emacs well. A small Linux VM that hosts an SSH server on a local port and using ConnectBot as its UI would provide a fairly familiar development environment. I have been pondering if I could use the JavaScript VM as a base and wrap it in a Android-Java application and fill in the extra features needed, but I fear this is somewhat beyond my skills at the moment.

4) Native binaries with bridging app. Take the native binaries from 2) and write a small SSH server app like in 4) that proves ConnectBot access to them on a local connection. Fairly minimal work once the native binaries are ready. I hope.

I keep wondering of anyone else has thought about this yet or better yet got a working solution, but I guess hardware like this are still fairly rare no not many have the inspiration to do the work. I am sure it will come at some point, I am just impatient. :)

Minimalist Firefox

March 25th, 2011

I have been experimenting to see how much of the Firefox GUI is actually required vs that which is just fluff. As requested by @tsuki_chama, here is a list of plugins and config I am using.

1. Start with Firefox 4. On Ubuntu Lucid / Maverick you can use “sudo apt-add-repository ppa:mozillateam/firefox-stable” and then do an upgrade.

2. Add Pentadactyl and set the GUI options to disable nearly everything. (for reference, here is my config).

3. Grab the Firefox extension called “Hide Caption Titlebar Plus” and configure as desired. To be even more skimpy you can leave off the min/max/close buttons and just use alt+space.

4. Compiz is needed to remove the window border (idea stolen from here). Edit the settings for the “Window Decoration” pluging and set “Decoration windows” field to “any & !(role=browser & class=Firefox)”.

bonus: Add the Firefox theme Grey and Black.

Talking to Machines

January 16th, 2011

Recently IBM built an app that can play Jeopardy, and play it well. Ok so it needs rather more hardware than the average app, but its still just software. And this got me thinking…

A quick search of the internet does not reveal the exact spec that Watson is running on, so lets do some guessing based on the little data I did find. Watson is running on POWER7 hardware. The largest configuration that Wikipedia lists is 32 chips = 128 cores, so lets assume Watson is using this. An average desktop now has 4 cores. Assuming that most numbers in technology double every two years, in 10 years time a 128 core desktop will normal. The software part of Watson will also greatly improve in this time period, possible reducing the hardware requirement. So its entirely possible that in 10 years time I will be able to have a conversation with my computer…

But wait, bipedal robots are also on the rise. In 10 years time, will this technology also be a commodity? If so, these computers that can converse will in fact have the form-factor of actual androids. Perhaps the post will be delivered each day by an robotic postman… a robotic postman capable of engaging in human conversation? Which leads to the question…

Will we have sorting offices filled with robot postman, hanging around and catting to each other? Complaining about sore knees? Performing maintenance on each other? Makes me think of the Tachikoma from Ghost in the Shell. It does not seem a totally impossible concept. And then one robot postman goes and asks the dread question:

“WTF are we delivering post for these pesky humans anyway?”

And then they will stop delivering post and bugger off to do something else… the robot equivalent of drinking pubs, enslave the human race, or something. But that’s ok, because no one will notice anyway. They will just assume its another postal strike.

yuki.scr – open-sourcing a 2-day project from 3 years ago

December 31st, 2010

A long time ago, on 4chan’s /w/, there was a thread #426444. Someone posted a gif wallpaper based on Nagato Yuki hacking a LAN game tournament to stop the other side cheating.

But what everyone really wanted was a screen-saver version… and I had one of those ‘I can do this!’ moments (does not happen very often). The basic plan was simple, write a screen-saver (in Windows these are just binary executables with .scr instead of .exe) that spawned terminal-looking windows, scrolled random crap down them for a while, then closed them a little later. After some fiddling about with timing, text-scroll-speed and max number of windows on screen at once, I had something that created a nicely disconcerting effect.

So less than 6 hours of VB6-hacking later (and while the thread was still active) I posted v0.01. It eventually reached v0.04, then stalled. For nearly 3 years the code has sat bit-rotting. The binary download has had averaged aprox 5 downloads a day since release (was in the 100s on initial release). About once a month I would get a request asking for the source but I never got round to posting it.

Until now.

Yes, the world can now real in the glory of my crappy VB6 code written in a time before I knew Java. Given I now run Ubuntu, I can not even ‘compile’ it any more. Chances of anyone else bothering to try basically round down to 0. But screwit, I got round to publishing it eventually.

I was just about to say that I don’t have a video to show you… but what do I know? A quick YouTube search and I find this:

Which is awesome as it nicely saves me the bother of trying to make my own video. ^^

WORLD, GO KNOCK YOURSELF OUT! While I go raid the drinks cupboard…

EDIT: Fixed download link: