
Concept Ships - spaceships and experimental aircraft art
Some months ago I played around with code_swarm by Michael Ogawa – partly for fun and partly to see what all the fuss was about with the Processing framework (something I have yet to really investigate). Last week I came across Gource another source code visualisation tool this time using 3D rendering.
Software projects are displayed by Gource as an animated tree with the root directory of the project at its centre. Directories appear as branches with files as leaves. Developers can be seen working on the tree at the times they contributed to the project.
Some recent commits to the project fixed build issues on OSX. Despite these fixes I still had trouble compiling. So in summary here’s what I did to get it working. Note that I did resort to installing mac ports (something I’d rather NOT do) – after many attempts to download and manually compile the prerequisites (FTGL 2.1.3~rc5-2 kept giving me problems)
# get mac ports
http://www.macports.org/install.php
# get all the ports you need for gource
sudo port install pcre libsdl libsdl_image ftgl
# get and build Gource from github and follow the instructions in INSTALL
git clone git://github.com/acaudwell/Gource.git
cd Gource
autoreconf -f -i
./configure && make && sudo make install
# navigate to your project directory and type;
gource
# have a look at all the options
man gource
# here are the settings I used (to get a large user icon and change the speed/size
gource ./ -s 0.5 -b 000000 --user-image-dir ~/images/avatars/ --user-scale 2.0 -800x600
# video it in h264 using ffmpeg, first install ffmpeg via mac ports (with codecs)
sudo port install ffmpeg +gpl +lame +x264 +xvid
# pipe PPM images to ffmpeg to generate a h264 encoded movie
gource ./ -s 0.5 -b 000000 --user-image-dir ~/images/avatars/ --user-scale 2.0 -800x600 --output-ppm-stream - | ffmpeg -y -b 3000K -r 60 -f image2pipe -vcodec ppm -i - -vcodec libx264 -vpre hq -crf 28 -threads 0 bugle.mp4
# finally, if you want to add some audio to the video (from an mp3)
ffmpeg -i audio.mp3 -i bugle.mp4 -vcodec libx264 -vpre hq -crf 28 -threads 0 bugle-with-audio.mp4
(this output will be the length of the video/audio track, whichever is longer)
# phew! - now go here to see how to remove macports when you're done :)
http://trac.macports.org/wiki/FAQ#uninstall
Bugle did exist (for a time) as an open source project on github before I moved it to be privately hosted. So here is the result; Bugle’s git log from April ’09 to the present parsed through Gource, with just one committer (me).
In summary you can see real bursts of activity at the start followed by some long periods of inactivity, and coming toward the present date renewed development and work going on. Gource is more impressive when visualising big projects with multiple committers over long periods, like the history of Git itself for example.
Lately I have been using bluepill to to monitor long-running processes on my application servers. The guys at serious business wrote bluepill out of their frustrations with god and monit, which gradually leak memory over long periods in certain conditions. bluepill is a simple piece of code with a small feature set, but does all you need to keep your processes alive. It even has parent/child monitoring for the likes of Unicorn master/worker processes.
Right now I am using it in Bugle production to monitor the delayed_job master process. It will also be useful if (or when) I get a chance to try Unicorn. Delayed Job is used in Bugle for two things right now, processing uploads (storing/deleting to/from S3) and delivering all application emails asynchronously. Here is the bluepill monitoring configuration script for it;
Bluepill.application("bugle") do |app|
app.process("delayed_job") do |process|
process.start_command = "/apps/bugle/current/script/delayed_job start -eproduction"
process.pid_file = "/apps/bugle/current/tmp/pids/delayed_job.pid"
process.uid = "bugle"
process.gid = "bugle"
end
end
So, I'm back here again. Its been two years since I posted regularly and a lot has happened since then. Here's a quick summary of that, and some reasoning behind my motivation to start writing again.
read the rest of this article →
1955 Mercedes Benz 300 SLR Coupe at cartype
Some time ago I wrote a javascript class to implement keyboard short-cuts for paging through listings one item at a time (and across paginated pages). It was inspired by the navigation at FFFFOUND! and explained nicely by Ryan Singer of 37Signals.
Some time ago Ryan posted a link to my script on the 37Signals blog, now with over 130 watchers on github a creeping sense of responsibility has settled in. So the latest revision now has both jQuery and Prototype support and a handier configuration object, so you can further customise how your page and CSS work with the script.
var config = {
nodeSelector: '.hentry h2 a.entry-title', // used to select each item on the page and place in the map (must be a link)
prevPageSelector: '.prev_page', // link on this element should always jump to prev page a.prev_page (must be a link)
nextPageSelector: '.next_page', // link on this element should always jump to next page a.next_page (must be a link)
pagingNavId: 'paging-nav', // dom id of the floating page navigation element
keyNext: 'j', // hot keys used
keyPrev: 'k',
keyNextPage: 'h',
keyPrevPage: 'l',
keyRefresh: 'r',
additionalBodyClass: 'paging-keys', // this class is assigned to the page body on load
bottomAnchor: 'bottom' // the name of the anchor (without #) at end of page, e.g. set on last post on the page
};
I’m using the script on this site (see the overlay on the top right) and you can try it out by pressing j/k to navigate through the articles. Some things worth mentioning about the code;