Yearly Archives: 2007

Nix Monitor V0.6

November 13, 2007 » Geek

I’m releasing version 0.6 of Nix Monitor today. It’s gotten a bit bigger and harder to configure, so I wrote a kickin configurator script using Zenity for all my prompts. Check it out at

VCReviews – A MediaWiki Extension

November 4, 2007 » Geek

Recently I worked on a review extension for the Omaha Wiki. They wanted to give users of the wiki the ability to write reviews for pages, recipe while still keeping control of the content and separating the factual information from the opinions.

Initially I just worked on adapting the Rating extension by Sanford Poon, order but it was getting hard to deal with and make all the changes that were needed, view so I started over.

The end result is VCReviews which combines the rating and review process into one submission, and is only accessible by logged in users. You can check it out at the Omaha Wiki. Just pick an article and click on a “reviews” tab.

Source is available: VCReviews Version 0.2.2

Recursive Word Count With Bash

November 3, 2007 » Geek

I was curious how many lines were in the new OurUNO rewrite, so I decided to write a little script to find out. Well, that all got out of hand and I kept adding things and masks and depth recursion limiting and I managed to stop myself before I added color to the script, so I did okay I guess.

Anyway, here it is. I’m sure there is some really clever way to do an equivalent one-liner of this, but hey, that’s life.


function printUsage {

  echo "Usage: countLines directory [options]"
  echo "Options:"
  echo " -m=XX   --mask=XX    - The mask may be any grep style regular expression."
  echo " -d=XX   --depth=XX   - The maximum depth of recursion. Defaults to 20."

if [ $# -le 0 ]; then

if [  "$1" == "-v" ]; then


# Drag out our options...
for i in [email protected]; do
  if [ `echo $i | sed 's/^\(-m=\).*$/\1/'` == "-m=" ]; then
     FILEMASK=`echo $i | sed 's/^-m=\(.*\)$/\1/'`
  elif [ `echo $i | sed 's/^\(--mask=\).*$/\1/'` == "--mask=" ]; then
    FILEMASK=`echo $i | sed 's/^--mask=\(.*\)$/\1/'`
  elif [ "$i" == "$1" ]; then
  elif [ `echo $i | sed 's/^\(-d=\)[0-9]*$/\1/'` == "-d=" ]; then
    MAXDEPTH=`echo $i | sed 's/^-d=\(.*\)$/\1/'`
  elif [ `echo $i | sed 's/^\(--depth=\)[0-9]*$/\1/'` == "--depth=" ]; then
    MAXDEPTH=`echo $i | sed 's/^--depth=\(.*\)$/\1/'`


function wcDir {
  FILES=`ls -l $1 | grep ^- | awk '{print $8}' | grep -e "$FILEMASK"`

  for i in $FILES; do
    LINES=`wc -l $1/$i | awk '{print $1}'`

function recurseDir {
  COUNT=`ls -l $1 | grep ^d | awk '{print $8}' | wc -l`


  if [ $COUNT != 0 ] && [ $CURDEPTH -lt $MAXDEPTH ]; then
    for i in `ls -l $1 | grep ^d | awk '{print $8}'`; do
      recurseDir $1/$i

  wcDir $1


recurseDir $1


Bonus! Here’s a tip for posting scripts on the interwebs. Replace your tabs with spaces before copying them into your posts with:
$ cat scriptOrCodeSource | sed 's/\t/ /g'

Update (11/08/07)So that doesn’t work as advertised. I think it’s doing some double counting or something. I’ll post the rewrite when I finish it.

My WordPress Was Broken

November 3, 2007 » Geek

Whew. My WordPress was broken for a while now. I did an update using Dreamhost’s one-click installs and it blew to pieces. Obviously I have it working again though :) Never found the problem, just did it from scratch.

Also switched to a new highlighting plugin. I like it better, but I had to hand correct all my tags, so if I missed some, my bad.


Cool Camera

October 18, 2007 » Geek

At work we’ve been working with a cool little camera from Prosilica. Michael wrote a nice wrapper and I spent the last week or two wrangling the data out of the buffers and into the application. The cameras are pretty cool, they spew out 1620×1220 frames at about 300 milliseconds a frame in Bayer 8, and about 500ms in rgb24. The driver they gave us has a really quick conversion from Bayer 8 built in, so we went with that.

The big problem moving to these from the Nikon kits we had, is that the Nikons had their own processing box that did the work of converting the raw data into jpegs. They work pretty fast, around 250ms a frame, but those are 320×240 frames, 640×480 take a tiny bit longer.

Anyway, without that processing box, we have that load moved directly onto our weak little clients, which take about 3 seconds to crush a frame down to a 320×240 jpeg with Magick++. So we decided to just do a raw, fullscreen live image, and it is really cool.

The point of all this introduction is that I like the little guys, and were they under 2 grand I might buy one for myself. Regardless, I get to play with one at work, so here are some pictures I took when we were still working on the full screen mode. They have, of course, been compressed down from the full size. Click through for a 640×480 version.