Best of Breed

Tuesday, January 25th, 2011

At work I’m involved with setting up some new infrastructure, and I thought I’d write up what I am finding as well as solicit advice from others. We need what most development shops need, all of it company-wide and cross-platform (Mac, Windows):

Source Control — Git

This is pretty straightforward. We were using Subversion and are moving to Git.
There are other distributed source systems around like
Mercurial,
Darcs,
etc. but git is the clear winner in terms of power, extensibility, space and speed.

Source Hosting — Gitorious / GitHub

A little less straightforward. I honestly thought Github was a good choice, but an almost-as-good choice if you want to keep your code inside the company firewall is Gitorious, which is kind of an open-sourced Github that you can deploy for free.

Unfortunately, Gitorious is a beast to set up, with its many dependencies, some at specific versions.

Fortunately, TurnKeyLinux is on the verge of releasing a Gitorious VM appliancet. I’ve gotten a server running using some pre-release patches (you can see progress on the TurnKey Linux forums).

Bug Database

No clear winner here.

  • Bugzilla is a mainstay, but can be a beast to administer.
  • Trac has great integration with source and wiki, but is a bit limited.
  • Redmine seems ok, but has a very busy interface (all those fields!).
  • Mantis isn’t bad.

Build Machine

Every time someone checks code in, a build should kick off.
Additionally, some testing should be done.
If checkins are frequent enough, simple unit test are enough,
with full regression tests saved for the nightly builds.

Code Review

Ideally, code checked in must be reviewed before it is accepted into the tree.

  • Gerrit is often mentioned, but it runs on Java.
  • CodeCollab is really good, but commercial.
  • Gitorious has a method involving checking code into a temporary branch, which is reviewed and then merged with the trunk/current branch if it passes muster. Haven’t tried this much though.

Wiki

Having a central wiki, editable by all the developers is essential to a good dev community, even within a company.

  • MediaWiki, the heavy hitter.
  • Twiki, a popular, light-weight wiki.
  • Gitorious has a built-in wiki.
  • Redmine has a wiki.
  • Trac has a wiki with good source integration

Building a new PC

Wednesday, November 18th, 2009

So I spec’ed out a new PC to fit into the case+power supply I bought from Iain:

CPU: Intel Core i7 920
    $310 (NewEgg.ca)/ $310 (CanadaComputers.com)
Motherboard: ASUS P6TD Deluxe
    $320 / $315
Memory: OCZ Platinum 12GB (6 x 2GB) DDR3 1333 MHz OCZ3P1333LV12GS
    $264.50 / $320
Disk: 1.5TB Western Digital Caviar Green WD15EADS
    $115 / $115
Optical drive: Pioneer BDR-205BKS 12x Blu-Ray Burner
    $233.50 / $240 (203BKS)
OS: Windows 7 Professional 64-bit – OEM
    $155 / $160

Total cost, before taxes etc

NewEgg.ca: $1,398
Canada Computers: $1,460

Iain points out I haven’t looked at a video card yet.
I replied that with the speed at which prices of video cards change, I will wait until the last minute and get two mid-level cards to run in SLI, preferably DirectX 11 cards.
If I had to get them now, they might be MSI GeForce GTX 260s.
Iain prefers the much higher-end Radeon HD 5870 1GB, of which there aren’t any right now it seems. :-)

How to build 64-bit, EFI-enabled grub on Mac OS X

Saturday, October 31st, 2009
# in your dev directory..
mkdir grub; cd grub

mkdir objconv; cd objconv
# "objconv" is required by the grub build. Its home page is http://www.agner.org/optimize
wget http://www.agner.org/optimize/objconv.zip
unzip objconv.zip
unzip source.zip
g++ -o objconv -O2 *.cpp
sudo cp objconv /usr/local/bin

# rehash if you are running csh
cd ..

# you may want to pick a more recent release; release_1_97 was the latest as of this writing
# http://svn.savannah.gnu.org/viewvc/tags/?root=grub&sortby=date#dirlist
svn co svn://svn.sv.gnu.org/grub/tags/release_1_97
cd release_1_97
./autogen.sh
./configure --with-platform=efi --target=x86_64

# edit kern/misc.c and add after line 53:
# void *memcpy (void *dest, const void *src, grub_size_t n);
# void *memmove (void *dest, const void *src, grub_size_t n);

# edit symlist.c and add after line 19:
# #include <string .h>
make -j `hwprefs cpu_count`
sudo make install

# This all results in:
# /usr/local/bin/x86_64-grub-editenv
# /usr/local/bin/x86_64-grub-fstest
# /usr/local/bin/x86_64-grub-mkelfimage
# /usr/local/bin/x86_64-grub-mkfont
# /usr/local/bin/x86_64-grub-mkimage