All posts by houstin

This winter I replaced the light bar with something a little slicker.

2 Rigid Industries Dually D2’s in the driving configuration.  I built two mirror image bars that share the center hood release mount bolt and then go to the radiator support bolts just below the headlights.  The LEDs only fit toward the center, but it makes a better pattern this way.

More pictures once this fog finally lifts.


Putting this together ahead of Sno*Drift.  Bar vibrates some forward and backward, still want to put 2 pencil beams in the front.  It’s also ugly as can be.  Hopefully I can find someone with a pipe bender and make a much better version!


Lights are the Hella Optilux 4″ Driving HIDs, bought from the awesome guys at as well as a set of supertones I finally put in.  It’s wired up to an aircraft-style safety switch in the cabin for complete control.  Pictures of the switch, and more (read non-cell phone) pictures soon!

I’ve been working at quite a few rallies now, and one of the biggest things that a radio volunteer gets to do is listen.  When people listen long enough they start to think they know it all and can do a better job.  After Rally West Virginia I’ve kind of reached that point and humbly want to start compiling information into a more complete resource.  This is the start of that.

So, where to begin…..


Every rally that I have worked relies on the 2 meter amateur radio band for its communication.  Communication that is vital to both the safety of everyone involved and the logistics of running a rally.  The radio communications are usually directed by one individual called ‘Net’ that is typically located at the rally HQ.  Now there are lots of exceptions to both of those things, but I will cover that later.  The volunteers give information to Net who then disseminates it to the proper individual.  For example the 0 car will radio to Net from the finish that the course is clear and suitable for competition.  Then Net radios the stage captain, gets his assessment, then radios the start control and tells start that the stage is hot and to begin competition.

Order in this structure is absolutely critical for a smoothly functioning rally.  If one point needs to communicate with another point they either have Net transfer the information or ask to speak directly.

Most rallies also work through devices called repeaters.  Instead of each radio talking to every other radio, they communicate to a completely independent device on top of a nearby tower.  This device then repeats the information back out immediately, hence the name.  This allows for a much longer range and lets a spread out rally all work as one.

Like I said earlier, there are exceptions to all of these.  At NEFR for example each stage is run as it’s own self-contained unit.  Radios communicate using Simplex, where each radio just talks to each radio and works without a repeater.  In this case the Stage Captain or someone near the Stage Captain should be functioning as Net.

This leads us to hardware.  Almost all of use have gotten into rally due to hardware, but typically it’s automotive hardware and once a ralliest has his technicians license he doesn’t care anymore.

The absolute best mobile communication setup that one can have is a 75 watt 2 meter radio (like the Yaesu FT-2900) connected to a drilled NMO mount on the roof with a clean ground equipped with either a 1/4 wave antenna or a 5/8 wave antenna.  The quarter wave has 0 dBi of gain while the 5/8 has about 3 dBi.  The way to understand what this means is to imagine the radio being put out of the antenna as a donut.  The more gain it has the flatter the donut.  A flatter donut pushes more out the sides while having less height.  So a 1/4 wave is better for a more mountainous region.  For a general way to figure which is better if the target is over 45 degrees above/below you the 1/4 wave will be better.  If 60 degrees the 1/4 wave will be significantly better.

It should be noted that both of these antennas need a ground plane.  The roof of the car (or the trunk for those less willing) when tied in correctly acts as a ground plane.  It actually becomes part of the antenna allowing the maximum amount of signal to get out.

If one doesn’t want to drill, and use one of the many magnetic options a 1/2 wave antenna becomes needed.  The half wave doesn’t need to be coupled to the roof as a ground plane.  For maximum performance here the antenna’s whip has to be cut to ideal length.  This is called tuning, and a poorly tuned antenna can be the difference between putting out 20 watts or 65.  This is best done by someone who has the right tools and has done it before.

Another option is the HT or hand-held transceiver. These are mostly limited to 5 watts, and are great for listening and control working especially with a nearby repeater.  Some rallies can be conducted entirely with HTs, but there are not many.

Congratulations, you just read through Rally Radio 101.  I’ll think of more and add it later including radios in course cars, how to absolutely positively make sure your signal gets there, and additional means of propagation that should be employed by rallies.  If I made a mistake anywhere please comment or email me.

I put a stock WRX catback exhaust on my 2.5i today. Sound and mechanical differences are negligible so far, but I have not been up to highway speeds yet.

Anyway, here are pictures of the two side by side for reference. The 2.5i has the thinner pipe, goofy looking resonator, and no chrome tip.

MATLAB functions well as a simplified platform for rapid robotics development and prototyping.  Lately I’ve been working with it to perform image analysis for basic movement control.  The first project had the robot follow an colored sign.

My approach used Lab colorspace and a kmeans algorithm for fast detection rather than the typical brute force YUV colorspace object labeling.  In this example we will assume the function is passed an image, a colorA double, and a colorB double.

First one must change the image to the Lab colorspace.  More on the benefits of this later.

img = imresize(img, 0.3);
cform = makecform(‘srgb2lab’);
cf_Img = applycform(img,cform);

ab = double(cf_Img(:,:,2:3));
nrows = size(ab,1);
ncols = size(ab,2);
ab = reshape(ab,nrows*ncols,2);

The first set of commands transforms an RGB image to Lab.  The second part isolates out the a and b components of the image.  The L is disregarded because it causes too many white balance headaches.  The a and b contain all the color information.

nColors = 3;

[cluster_idx cluster_center] = kmeans(ab,nColors);

distance = zeros(1,nColors);
for x = 1:nColors
distance(x) = sqrt((cluster_center(x,1)-colorA)^2+(cluster_center(x,2)-colorB)^2);
[smal, index] = min(distance);

Next we set how many blobs we want to be in our image.  Kmeans works by grouping the image into sets that are related by color.  The more sets we have, the more definition.  Next we execute the actual kmeans algorithm which gives us the output image and the central color point of each blob.  Remeber the colorA and colorB this function was passed?  Well that is the color of the blob we are looking for.  The next part of the function figures out which of those colors is closest to what we wanted.

After that’s done things are pretty simple:

for x = 1:length(cluster_idx)
if cluster_idx(x) == index
cluster_idx(x) = 1;
cluster_idx(x) = 0;

binImg = reshape(cluster_idx,nrows,ncols);

This part makes everything in the desired group a 1, and everything else a 0.  This creates a binary image that works with all the other built in functions.  For example:

s = regionprops(binImg, ‘centroid’);
outCentroid = cat(1, s.Centroid);

Gives you the centroid of the blob, and:

outArea = bwarea(binImg)

Gives you the area of the blob.  It’s pretty neat.  Using the built in functions can give you a lot of speed improvements too.

The problem causing the slow load times was reverse DNS look-ups throughout the server.  I had set /etc/resolv.conf to use Cablevisions DNS and they were not responding properly so I changed it to use OpenDNS’s 4.2.2.x addresses.  Everything seems happier now.

In the normal Windows fashion, it took me 2 hours to do something that should have taken 5 minutes.  Setup: A windows server is running Apache and a self-contained inventory webserver.  Going to the servers address “” should take it from Apache and bounce it to the inventory server is which incidentally requires the connection to be on port 8080.

Normally I would go into the .htaccess file and add one line

Redirect 301 / http://newip:8080

/ indicates that root is moved and 301 is the condition for a permanent move.  Easy

Here it wasn’t so.  First I had to modify the httpd.conf from:

AccessFileName .htaccess


AccessFileName ht.acl .htaccess

This makes it possible to create the file in explorer.  There are other ways around it but this is pretty easy.  Just create a file named ht.acl and treat it like a .htaccess file.

After that was done it seemed like Apache didn’t want to read the access file.  I had to change AllowOverride in the <Directory> command.  Originally it was “AllowOverride None” but it should be “AllowOverride All” so that the access file is given some power.  With it set as none it was as useless as a teenage boy at an anime convention.

I suppose overall it wasn’t difficult, but in the process I had to rewrite the whole .conf file.  It was an updated install that simply copied its configuration from an old one, preserving the old now incorrect file locations and all.

It’s been an extraordinarily long time since my last post.  I suppose things have  been relatively quiet.  There are a couple of possible projects coming down the pipeline so I’ve decided to finally make the push for a real server.  I’m going to retire the plentiful 1U’s for something much fancier.

Newegg is lovely as always.  There was a combo deal on the Hard Drive and the Barebones server.  I normally wouldn’t have gone for that model, but I’m not going to complain in this case.  I already have a slimline DVD drive to install and I’ll get another 4 gigs of RAM down the road.

Thankfully a good bit of the server will be subsidized by projects it will be used on, but I should probably give a brief rundown of my thought process anyway.

First, goals.  This WILL be a fully virtualized server.  I’m going to use Xen with an OpenSUSE 11.1 dom0.  My old Ubuntu webservers (2) will be virtualized from their 1Us and installed, as well as an OpenSolaris domU I’ve been wanting to experiment with.

That all being said it means I’d need 2 main things, first, a shitton of RAM, second, a processor that supports full virtualization.  I’m being kind of cheap so I went for the second cheapest one offered by Intel.  Yes, yes, I know AMD offers chips that support this for much lower cost, however, this box will be installed far away from where I’m sitting.  and has a few issues requirements.  Namely it has to be simple and silent.  The Asus barebones 1Us are amazing.  I’ve worked with this model before and it has a sturdy case, simple layout, and is silent.  When I graduate I will have more time to play with server builds but until then I’m going with the Asus.

Beyond that there really weren’t any choices.  4 gigs vs 8 gigs was purely economical, as was the hard drive, and the DVD drive was already here.

I’m at the point in my Engineering study where I really have to give up on all this sys admin crap.  I need to move onto design, be it the electro-mechanical that surrounds the server or be it software design.  I know nothing about it and that’s really got to change.  Hopefully with this commitment I can forget about infrastructure for the next 4 years and concentrate only on real engineering.

This server should eat everything I throw at it, so maybe I’ll try and bomb it while I’m at Otakon.  We’ll see.

Virtualization is a buzzword right now, but it has a very remote audience.  For the one job I work they have 4 different servers doing things.  One hosts the inventory system, one the web system, one does backups, and I have no idea what the last one does (I think it’s for ghetto VPN. I don’t touch it.)

This historically has been a very windows-centric setup.  Every computer there runs XP.  Every upgrade cycle is the same thing.  New hardware, XP, then figured out how the old software was setup.  Being a fan of new things, I decided to just virtualize the machines for this cycle.

First I wanted to use a hypervisor.  It’s a natural choice.  One can waste as little resources as possible.   I grabbed a copy of OpenSUSE and ran it with Xen and everything was dandy until I realized the processor didn’t have support for full-virtualization.  Porting the existing Windows systems would be impossible.

I was told to get away from Linux, which I guess makes sense since these are critical apps and the owner needs to know how to troubleshoot.  So I looked into my old buddy VMWare.  I first started using VMWare when I got an old PPC mac and I could experiment more with my PC.

VMWare’s converter took the 2 windows installs I wanted to port, and in about 5 hours had the machines virtualized and ready to go.  Knowing as little as I did I first tried to use VMWware player to host them, but that wasn’t quite sitting right.  I did a facepalm.jpg and moved to VMWare server.

The virtualization system has been running for about 3 months now without a problem.  The data rack has almost nothing left in it and things are dandy.

Recently I started hosting from his location with a bunch of used IBM 300’s I picked up.  These have Ubuntu 8.10 on them and run great for the price, but I think they don’t fit his deployment goals as much, so I may be virtualizing them in the near future.