Only 101 days until LCA2014 begins. All very exciting!
Early Bird registrations are already open, if you haven't already you should secure your spot before they sell out.
In other news, the miniconfs are all getting themselves organised, and for various reasons, I'm quite looking forward to the LCA2014 OpenStack miniconf. Should be a blast!
Wednesday, 25 September 2013
Wednesday, 17 July 2013
Continuous Integration with python and blink(1)
I've been a big fan of Continuous Integration / Continuous Deployment (CI/CD) for some time now, and we've been using it with great success in my day job building something awesome. But that setup is team-focussed, uses a build server, is triggered from revision code checkin, with promotion between development, test, staging and production environments gated by passing all the regression suite tests. We even spam the team over Jabber when tests fail.
At the other end of the scale is personal software development on my laptop. Here I want something more lightweight that the excellent Jenkins, and I want builds triggered not on revision control checkins, but on every save. In essence, something compatible with the team-focussed environment, but something even more agile and lightweight.
My personal development is more likely to be in Python than anything else, and I like to write my code test-first. Normally I have three windows open - one editor for code, one editor for test code, and one shell with onchange.pl running to automatically run tests every time a change is made to tests or code. This is all well and good, but it still requires me to take my focus off the editors and check that tests succeeded in the shell window. This can be improved upon.
Enter my latest toy, blink(1). It's a USB multi-coloured RGB LED, that's easily programmable with code available. But they provide a command-line tool which is sufficient for many use cases.
With a small script that checks the result of the test run, it's very easy to get blink(1) to give me a quick visual indication of the result of my development efforts. It's as simple as...
#!/bin/bash
nosetests
if [ "$?" -eq "1" ]
then
blink1-tool --red --blink 5 2>&1 >/dev/null
else
blink1-tool --green 2>&1 >/dev/null
sleep 5
fi
Maybe it's a bit gimmicky, but so far I'm loving it!
At the other end of the scale is personal software development on my laptop. Here I want something more lightweight that the excellent Jenkins, and I want builds triggered not on revision control checkins, but on every save. In essence, something compatible with the team-focussed environment, but something even more agile and lightweight.
My personal development is more likely to be in Python than anything else, and I like to write my code test-first. Normally I have three windows open - one editor for code, one editor for test code, and one shell with onchange.pl running to automatically run tests every time a change is made to tests or code. This is all well and good, but it still requires me to take my focus off the editors and check that tests succeeded in the shell window. This can be improved upon.
Enter my latest toy, blink(1). It's a USB multi-coloured RGB LED, that's easily programmable with code available. But they provide a command-line tool which is sufficient for many use cases.
With a small script that checks the result of the test run, it's very easy to get blink(1) to give me a quick visual indication of the result of my development efforts. It's as simple as...
#!/bin/bash
nosetests
if [ "$?" -eq "1" ]
then
blink1-tool --red --blink 5 2>&1 >/dev/null
else
blink1-tool --green 2>&1 >/dev/null
sleep 5
fi
blink1-tool --off 2>&1 >/dev/null
Maybe it's a bit gimmicky, but so far I'm loving it!
Labels:
blink,
continuous integration,
junkcode,
python,
tdd
Monday, 8 July 2013
Updating Ubuntu's sources.list
Frustratingly, I keep on forgetting to:
sudo bash
cd /etc/apt
cp sources.list sources.list-`date +%Y%m%d`
sed -i 's#au.archive.ubuntu.com/ubuntu#mirror.internode.on.net/pub/ubuntu/ubuntu#g' sources.list
This really needs to be a post-install hook or something.
This really needs to be a post-install hook or something.
Wednesday, 26 June 2013
New Work MBP has arrived!
Just took hold of my new work MacBook Pro. It's one of the new Retina 15-inch laptops (early 2013) running Mac OS X 10.8.4. With a 2.4 GHz i7 with 8GB DDR3 1600 MHz RAM, 250Gb SSD, & NVIDIA GeForce GT 650M 1025Mb graphics it should fly.
[The old MBP was getting a little long in the tooth - it has developed some heat-related hardware faults such as wireless network failures and sticky keyboards keys. It was a 15-inch Early 2008 running Mac OS X 10.7.5, 2.4GHz Core 2 Duo, 4 Gb DDR2 667 MHz RAM, 200Gb SATA Disk, & NVIDIA GeForce 8600M GT 256Mb graphics. But at least it had an optical drive!]
Just for posterity, here's the list of things I needed to do to set it up:
[The old MBP was getting a little long in the tooth - it has developed some heat-related hardware faults such as wireless network failures and sticky keyboards keys. It was a 15-inch Early 2008 running Mac OS X 10.7.5, 2.4GHz Core 2 Duo, 4 Gb DDR2 667 MHz RAM, 200Gb SATA Disk, & NVIDIA GeForce 8600M GT 256Mb graphics. But at least it had an optical drive!]
Just for posterity, here's the list of things I needed to do to set it up:
- Apply OS updates to bring it up to the latest Mac OS X release
- Move over my GPG and SSH keys
- Install VirtualBox 4.2.14 and move over the VMs from my old laptop.
- Setup Mac Mail and Calendar to connect to the local Exchange server and to hit my Google accounts
- Install GPGTools
- Install Google Chrome
- Install Dropbox
- Install XCode (and then the Command-line Tools from inside XCode)
- Install Homebrew (and then a whole schwag of things: ack, bcrypt, berkeley-db, boost, cowsay, daemontools, gearman, git, glib, gnupg, graphviz, postgresql, python3, s3sync, sipcalc, sl, sqlite, wget etc :-)
- Install 1Password3 (moving the licence over)
- Install Caffeine
- Install Omnigraffle (moving the licence over)
- Install Things (moving the licence over)
- Install AppZapper2 (moving the licence over)
- Install BetterSnapTool (out of the Apple AppStore)
- Install Colloquy
- Install DBVisualiser
- Install SoapUI
- Transfer over ~/src, ~/Documents, ~/Downloads from my account on the old laptop
And then reimage the old laptop before handing it back.
Monday, 20 May 2013
First post!
My website disappeared earlier this month as a result of costly disk crash. I was bitten by some lovely EXT4 corruption, on an Ubuntu 10.04 image, in a VirtualBox environment. Of course I had backups, but they likewise failed me when the time came to restore.
So I've lost 9 years of weblog.
I have rediscovered the importance of testing the restorability of your backups, and yet again read The Tao of Backup. I've taken my cod liver oil and learnt my lesson.
So it's time to start again, hence this log of life that I'm now starting...
So I've lost 9 years of weblog.
I have rediscovered the importance of testing the restorability of your backups, and yet again read The Tao of Backup. I've taken my cod liver oil and learnt my lesson.
So it's time to start again, hence this log of life that I'm now starting...
Subscribe to:
Posts (Atom)