Perform: Programming

January 2nd, 2012

Music, films, acting, painting… art of any kind.  People always have an opinion.  It is a completely open-access system.  No special skills are required to understand and enjoy art… what would be the point in music that was only interesting to skilled musicians?

A display of great skill earns great praise and respect, possibly fame.  No one wants to know how a given tune was dreamed up, the tedious months of refining the composition, the 100 failed songs that preceded this one.  The art in a work of art is all in the interpretation, the mind of the observer.

Programming, coding, the process of making software.  Call it what you will.  I will go out on limb here and suggest that, for MEDCs at lest, software is more ubiquitous that art.  Indeed all films, music, games are themselves dependent on software.  As important as paint is to an artist.

But when an artist creates a great painting, where is the credit to the chemist who create the paint?  Paint is commodity.  The beauty in any technique is its easy of repetition.  A paint only has to be created once to benefit many artists.  But the paint is too easy to obtain.  In perfecting a manufacturing process the chemist has, ironically, removed their name from the world.  No fame or praise is afforded to them.

A job done too well is never acknowledged as having ever existed.

What drives an artist?  What do they seek?  Material gain, certainly, but I suspect that is not all.  To want to show off is to be alive.  To have your existence acknowledged and counted.  To prove that you are not just like everyone else.  That there is something that only you can do.  To a musician performing live in front of a large audience there must be such a sense of acknowledgement.

My fate now is writing software.  It has become a reflex – something not requiring exerted effort.  Thought and planning, yes.  But like the musician playing from memory, the code just flows.

I never planned to be a software engineer.  In a way, I tried quite hard not to be.  The default choice, the easy and obvious choice, is usually the wrong one.  Always taking the easy path leads to a dead end.  No, worse than that.  It leads to a straight path of more of the same.

There is no performance in programming.  With a life time of experience and honed skill and craft there is still no grand display, no art.  No fame, no praise.  The great enablers of technology so often unknown, lost in history.

In a world of billions, strive to set yourself apart and assert your existence.  Be noticed, be remembered.  In software, is this possible?  Will more remain than unfixed bugs and sarcastic commit comments?

How many are remembered for their code?  Ideas yes, but the art of coding?  If code is incomprehensible to non-coders, then can such even be possible?

A common theme in the Earthsea books is that it takes power to know power.  You can not comprehend someone’s skill without first possessing a near level of skill yourself.  People have always mistrusted magic.

This is a blog entry that I have been thinking about writing for years.  It has then been hastily written and sat on for several weeks.  Apologies for the D&D reference in the title.

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 github.com 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 https://example.com/svn/projectfoo 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.

References: http://john.albin.net/git/convert-subversion-to-git

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.