How to Replace Infiniti Battery

One morning my Infiniti G35 engine wasn’t starting. I would turn the key and the lights would come on but it didn’t have enough power to run the engine. I decided to walk to the auto parts store to buy a battery charger. I live in the city, so the stores aren’t that far apart and I like walking. When I got to the store, I ended up buying a battery jump starter. I just figured it was a charger, but actually it only jump starts. I didn’t look at the box close enough when I bought it. Only after I used it did I realize that it wouldn’t charge the battery…

Nevertheless I was able to jump start the car and the car was able to normally charge its own battery just by having the engine running as I drove. I thought the reason for the problem was that I had left the lights on too long. However, next week the same thing happened. I realized that I just needed a new battery.

Once again I walked to the auto parts store, but this time I came back with a new battery in my backpack. I popped open the hood and opened the lid to the battery compartment. They also gave me some red gel called battery protector and two felt rings, which are supposed to stop corrosion. Personally, I have replaced batteries before without these things but they were cheap so I didn’t argue with the cashier.

Dead battery in its compartment with the lid open

You need to remove the larger cover though too, not just the little door. There is not enough room to take out the battery through the door. I used a flat screwdriver to pop off the plastic “screws” holding it in place and a 10mm wrench to loosen all the nuts. Basically, you want to get the battery out and there are a lot of things in the way that have to be loosened or detached. I found removing the battery was a little tough, but squeezing the new one in was even more difficult.

Here is what it looks like with the battery out.

battery removed

I then placed the new battery in the same spot. You’d think that since the new battery had a handle, it would be easier to drop in. However, I found that it kept getting caught on the back part of the hole. There is some plastic tab that it gets hung up on. I also kept bumping into the positive (red) battery connector. You just have to pull at things and reposition it a bit, but eventually it will go in.

After dropping in the battery, I tightened all the nuts and put the felt rings in place. I greased the terminals with the red battery protector gel.

New battery in place

You are supposed to return the old battery to the auto parts store, but I am thinking of keeping it for another project I have in mind. It know it does have some juice left in it. However, I am still undecided if it is worth keeping because I don’t know how I’ll charge it without a charger or car to hook it up to.

Easy Guide to Understanding C Pointers

When I was teaching myself C programming, one thing I found that is common to get stuck on are pointers. For some reason, every book made the explanation needlessly complex. I never could grasp what they were saying until I finally stopped reading and sat down to figure it out myself. Here I will give you a simple lesson that will make sense in no time at all. You don’t need a lot of fancy diagrams and terminology to figure this out, I promise.

The simplest explanation of a pointer is that it is just another type of variable. If you want a variable to hold a character, you use char. If you want a variable to hold an integer, you use int. Well, a pointer is no different. If you want a variable to hold a memory address you use a pointer. Yeah, that is really all it is. A pointer is just another variable type which holds a memory address rather than a number or letter.

It does have an additional modifier that other variable types don’t. You have to include the type of the data that is going to be stored at the memory address. However, even this isn’t actually strictly required. You can just make the type “void” — but generally you only need that with certain algorithms liked linked lists that can accept any variable type.

Here is an example program I’ll use to demonstrate pointers:

#include <stdio.h>

void main()
{
        int ival;
        int *iaddress;

        ival = 66;
        iaddress = NULL;
/* insert breakpoint here */
        iaddress = &ival;
/* insert another breakpoint here */
        return;
}

On line 5 I declare a standard integer, followed by an integer pointer on line 6. What does “int *” on line 6 mean? It means that iaddress is a memory address. The data located at this address will be a number.

On line 8 I assign a value of “66″ to ival. I then assign NULL to iaddress. NULL is just a synonym for the number zero. This is not to be confused with the character NUL (note the single L) which is used to terminate a string. I am just mentioning that because you might see those two in documentation. I could have just as well have put iaddress = 0 in my code, but NULL makes it clearer what I am trying to do. When a pointer’s value is 0 or NULL it means that it is invalid. It is memory address zero, which is a location inaccessible to your program.

Here is some debugger output which will make this clearer:

% gdb ex1
Reading symbols from /home/mpc/ptr/ex1...done.
(gdb) break 10
Breakpoint 1 at 0x400487: file ex1.c, line 10.
(gdb) break 12
Breakpoint 2 at 0x40048f: file ex1.c, line 12.
(gdb) run
Starting program: /home/mpc/ptr/ex1

Breakpoint 1, main () at ex1.c:11
11              iaddress = &ival;
(gdb) print ival
$1 = 66
(gdb) print iaddress
$2 = (int *) 0x0
(gdb) print *iaddress
Cannot access memory at address 0x0
(gdb) continue
Continuing.

Breakpoint 2, main () at ex1.c:13
13              return;
(gdb) print iaddress
$3 = (int *) 0x7fffffffce94
(gdb) print *iaddress
$4 = 66
(gdb) print &ival
$5 = (int *) 0x7fffffffce94

I break out of the program after the assignment at line 10. You can see that ival is equal to 66, as expected. When I print the value of iaddress, you see that it is 0 (aka NULL), which is also expected.

Then on line 17 I produce an error. Why? The asterisk (*) operator has a special function when used with memory address variables. It means to print the data at the address rather than the actual address itself. So, for example, if I have a pointer with a value of 100, it means that it is storing memory location 100. Behind the scenes, this is just another integer – the number 100. How do I find what data is at memory location 100? I can use the * which causes the data there to be displayed. However, since we are not allowed to look at memory location 0, the debugger returns an error.

Moving on to the next breakpoint, you can see the pointer in action. At line 11 in my program (in the first listing), I do something unusual with the amperstand (&). Any time you put a & in front of a variable in C, it gives you back the address rather than the value. What line 11 really means is “put the address of ival in the address variable (pointer) iaddress.” Now iaddress holds the memory address of ival.

On line 28 in the debugger output, I show that ival is at address 0x7fffffffce94 and on line 24 in the debugger I show that iaddress has the value of 0x7fffffffce94. To put it another way, each variable in C has two properties — its value and its address in memory. Even the pointer itself has an address in memory where it stores it’s value. Additonally, the name of the amperstand operator actually is “address of.” If you are reading the code out loud, you would say “the address of ival,” not “amperstand ival.”

Finally, at line 25 I reveal the value of the memory address 0x7fffffffce94. It’s 66, the value of ival. The * is called the indirection operator, although people will usually say something like “iaddress pointer” rather than using the word “indirection.”

There is only one more thing you need to know. Every variable type in C has a different size. For instance, a character only uses one byte. If you have a pointer to a character, the compiler needs to know that you only want one byte of data from that address. Otherwise how does it know when the data stream ends? For an integer, the size can vary depending on your computer, but on mine it is 4 bytes. When you create a pointer to an integer, you have to declare the pointer as “int *”, otherwise it won’t know that you want 4 bytes. If you used a “char *” to reference an “int” you would not get the correct result.

If you’ve gotten this far, then you understand the basics of pointers. This is a good time to go experiment with what you learned. The other hard areas of C are arrays/strings, function pointers, socket programming, threads/forks, and dynamic memory allocation. However it is important to get the basics down first.

Researching the Past: Great Western File Company

Western File Works, 1875

The encyclopedia I reviewed in the preceding post was originally owned by Norman M. Macomber of Beaver Falls, Pennsylvania. I know this because he wrote his name on the first page of both volumes and a bookbinder left a note which had the name of the company Norman worked for.

Since I spent the first eighteen years of my life in western PA, I was curious about who this person was and the company he worked for. The bookbinder’s receipt read Western File Company of Beaver Falls, PA. Searching the internet, I did not at first find a lot of information about Western File. However upon refining my terms a bit by using quotation marks around the phrase, I managed to dig something up (“western” and “file” alone are two very common words and have a lot of false positives). Western File works was founded January 1870 in Beaver Falls by J. M. Fessenden, who died in July 1886. The company outlived its owner. Here is a quote about the Western File Company from the History of Beaver County by James Patterson:

The Western File Company, Limited, ranks next in importance and has been in operation since January, 1870—working six years, and now employs about two hundred hands, and uses one and one-half tons of steel per day; pay roll $7,000 pre month; expect to make 200,000 dozen of files this present year, (1876). They use 175 tons of grindstones each year. This file works is the largest of the kind in the world, making files by patent machinery, and it is wonderful to see the machine cut the teeth in the steel, making the files more regular and uniform than is possible by hand. These works are on the east side of the town on the river bank, and are expecting the contemplated railroad to pass near to them soon, and also to have the water from the upper dam brought down to propel the works which are now operated by steam power.

Pretty impressive. Beaver Falls is now part of the dying rust belt of America but at one time it was a booming town with factories.

I then found some information about the company being owned by the Harmony Society, which was a persecuted religious group:

In 1875 they (the Harmony Society) acquired an interest in the Western File Works, at Beaver Falls, a very large factory. They bought this plant entirely in 1884, and operated it at a loss, until 1892. This, as in fact all their property in Beaver Falls, has since been sold.

On a site called GenDisasters, I found that the company had burnt to the ground in 1880, but apparently it had been rebuilt by the Harmony Society and other owner(s). This article also mentions they made shovels in addition to files.

The last record of Western File is in October 1916. The Pittsburgh Radium Company bought their plant in Beaver Falls, so apparently Western File was out of business at that time. Pittsburgh Radium is interesting in itself. It owned mines of vanadium, uranium, and radium and used these to manufacture metal, medical supplies, and luminous paint. I don’t know about you, but radioactive glowing paint sounds bad to me! The Beaver Falls facility was used to make vanadium products, not the glowing paint. I had never heard of vanadium, but found that it was used to make a lightweight, strong steel.

Back to the owner of the book, Norman Macomber… I did not find out a lot about him. He worked as a machinist in Beaver Falls. He was born in Maine and lived in Boston for a while. His father died at age 25 and he was married and had two children. His descendants lived in Maine and one of them must have sold the encyclopedia to Artisan Books in Maine, which is who I bought it from.

Book Review: Appleton’s Cyclopaedia of Applied Mechanics

Imagine finding a book that is over 130 years old… the pages are falling out and the sheepskin cover is worn. It looks like a musty magical tome, lost in the sands of time. When opened, you find that it is even more than you guessed. Within the book are thousands of diagrams and descriptions of the most fantastic contraptions imaginable. Relics of the Gilded Age, when steam engines roared across the wild west and coal-fired furnaces sent black smoke into an endless blue sky. Insanely complicated diagrams with dozens of gears and levers going in every direction.

Sound too fantastic to be true? Well, guess what, I found this book…or should I say “books.” The encyclopedia has two volumes, published in 1880. There is also a supplemental volume, published in 1892. I have the first two and am buying the supplemental volume.

Two volume mechanical encyclopedia

Encyclopedia side view - definitely heavily used in its day

Below you can see the cover page of the two volumes.

Volume 1

Volume 2

Here are some randomly chosen examples of the awesome entries in this encyclopedia…

Example of the beautiful engravings of machines in this book

Page 1... Abacus!

Some unusual farm equipment

Archimedean Screw

Broom-making machine

How to enslave your dog to churn butter

Steam engine

The noble ladies of the city on a tour of a gear-cutting machine.

I didn't realize that color printing was possible in 1880.

Eighty-ton steam-hammer

Loom

The encyclopedia also has an extensive index.

All the machines that I noticed were non-electric and should be possible to build today, as most entries are pretty explicit on how the machines work. I am sure most of these machines are obsolete. However, for someone who is interested in finding new ways to do things, the entries are very interesting. I found myself coming up with new ideas just by reading. Today we have electric power, but for a farm or remote area, you might still have a use for them. You have to be amazed at some of the large ones which are several times the size of a man.

If you want to read this book without spending the money on it, you can also read it online:
Appleton’s Cyclopaedia of Applied Mechanics, Volume 1
Appleton’s Cyclopaedia of Applied Mechanics, Volume 2
Appleton’s Cyclopaedia of Applied Mechanics, Modern Mechanism (Supplemental Volume)

Using Sudo

A common thing for new Linux users to do is to always be logged in as the “root” user. I certainly was no exception to this. I remember when I first started with Slackware Linux a long time ago, I never bothered with creating any users on the system. I would just run everything as root. By using root, you have no restrictions on what you can do and this seems the normal way to operate the computer. For people from a Windows/DOS/Mac background, it is expected to just be able to do everything at all times. Although recent versions of Windows and MacOS X actually force you to create a user account, the account still has permission to do everything, so there is not really much awareness among users that they are operating at a lower privilege level. OS X will prompt you to type a password occasionally. Windows has the extremely annoying UAC popups that you must acknowledge.

For the single user desktop/laptop system, I actually have no problem with people running things as root (or Administrator on Windows). I use a non-root user account on Linux on desktop systems but this is more out of habit than anything else. On Windows, I turn off passwords and disable UAC. I also turn off Windows Update and only perform updates manually. I find nag screens and popups to be extremely annoying. Contrary to popular belief, updates usually break more things than they fix. A firewalled home system is extremely safe, even without updates. I like to use the computer with as few interruptions and dialogs as possible. For those who doubt my technique, I shut off all automatic updates and I have never had a virus infection since the DOS era.

Note I am only recommending disabling automatic updates on your personal home computer, not office computers. When you are working in a multi-user environment, it is a completely different story. If everyone is logged in as root, it is impossible to track who did what and when. This problem also exists for shared accounts. If you create a shared account, say for instance “dev” or “admin” and multiple people use it, it is an extremely large security hole in my opinion. Anyone can do anything with these types of accounts and they can’t be locked down and are difficult to track. For this reason, I recommend every user only use their own account. I am actually surprised at how many people don’t understand this and continue using shared accounts.

There is a solution that allows you to give people access to administrative privileges without using shared accounts – sudo. Sudo is a tool that is installed by default on Linux and OpenBSD. The only system I am aware of that requires an external package for sudo is FreeBSD. In case you are wondering how to pronounce this tool’s name, I have always heard it said as “pseudo” as in pseudo-code. Its function is to allow an administrator to define commands that can be run as another user. Besides that, it also logs all the commands run using it. This is good when you have multiple administrators, because it means you can check the log (/var/log/secure by default on Red Hat) to find whether someone else has been working on the system.

As an example, say you have a group of developers who want to be able to restart the httpd server without calling an admin. You could request that they run the daemons under their own login id, but since httpd normally has to be bound to port 80, that won’t work. They can’t listen on ports numbered below 1024 without root permissions. You could also give them the root password, but it becomes a recipe for disaster when one of them makes a change and fails to notify anyone else. When the server crashes, the admin is paged at 1 AM and has to guess what the developers were doing on the server as he works to recover it.

Sudo is the perfect tool for this sort of situation. I’ll give an example based on the above scenario.

After installing sudo, run the command visudo as root. First you will want to create a sudo group for the developers (you could also use a unix group which I will explain next). It should look like this in visudo, assuming the developer logins are named “jim” and “john”:

User_Alias DEVELOPERS = jim, john

Easy enough, right? It is sort of like a #define in C. Next you will want to setup the commands they are allowed to run:

DEVELOPERS ALL=(root) /sbin/service httpd stop, /sbin/service httpd start, /sbin/service httpd restart

That will give them the ability to manipulate the httpd daemon as though they were root. For example, one of them could restart it as follows from their own login:

sudo -u root /sbin/service httpd restart

This action will also be logged in /var/log/secure, so if someone complains about the website going down, you as the administrator can easily find who caused it and when.

As an administrator, if you are working with a team of admins, you will not want to all be logging in as root. It makes it too difficult to track who is doing what. The traditional solution to this is to put all the admins in the ‘wheel’ group and then configure sudo to allow everyone in the wheel group to run any command as root. Don’t ask me what the name ‘wheel’ comes from – I have no idea. It means administrators.

Add this using visudo:

%wheel ALL=(ALL) ALL

Then edit /etc/group and add the admins to “wheel”:

wheel:x:10:root,matt

The admin is named “matt” in this example. Also note that you could just vi /etc/sudoers, but it is better to use visudo. Visudo acts similar to crontab -e in that it will alert you if there are any syntax errors in the file when you save it.

When you’ve given somebody the ability to run ALL commands, they also have the ability to do cute things like “sudo su - root” This way they switch to a root shell and their commands are no longer being logged. I strongly recommend against permitting people to run ‘su’ via ‘sudo.’ It basically invalidates the whole reason of having sudo in the first place — you might as well have just given them a shared account.

How to Browse Privately from the Office with FoxyProxy

It is a common problem for businesses, schools, and wifi hotspots to have overly restrictive web browsing content filters. You also have to think about security. If you are using any kind of a network, it is trivial for someone to tap into the connection to record your passwords and banking information. While SSL has mitigated this to some extent, many websites are not properly configured to encrypt passwords. If you use the same password on more than one website, chances are that at some point in time, the password will be sent over the network in the clear. If you use webmail of some sort, it is possible that someone can read and a perhaps even access your account.

There are a lot of different ways to secure your connection. My personal favorite way is to use a SSH tunnel, because I know it is extremely secure. SSH also has an option to compress data, which can improve the speed that web pages load in your browser.

The first program you need is called PuTTY. This is a free SSH client for Windows. Download Putty, start it, and click on Connection->SSH->Tunnels. Fill out the source port and destination boxes and click add. Your screen should look like this…

Adding a tunnel in Putty

You should also go to Connection->SSH and checkmark the Enable compression box. This is not required, but it will create a small boost in web page download speed.

Go back to Session in Putty and you will see a box that reads Host Name. Here you have to put in the hostname of a Linux server you have access to.

Where can you get a Linux server? The easiest way is to just install it on your home PC, and log in to your home server from work. If you are inexperienced with Linux, I strongly recommend you install it inside a virtual machine rather than wiping your hard drive and replacing Windows. A good beginner’s setup is VMware workstation with Fedora or CentOS installed as a VM. You then have to open port 22 in your Cable/DSL router and have it forwarded to the new virtual machine. Since there are about ten thousand different variables in setting up a home Linux box, I’m not even going to try to explain it here. Another route if you find this too difficult is to just buy a SSH account from a hosting company. However, you will need permission to run a web proxy on the Linux server.

That brings us to the next step – setting up Squid on Linux. Squid is a very popular web proxy. The only other proxy I’ve used is Polipo, which I found to be unreliable. Here I will describe the process to setup Squid on CentOS, Fedora, or Red Hat Linux (they are all the same thing, just with different versions of software).

  1. Open a terminal window or SSH to the Linux server. Use sudo or login to your server as “root”.
  2. Type: id — it should read uid=0.
  3. Type: yum install -y squid
  4. Type: chkconfig squid on
  5. Type: service squid start
  6. Type: ps axww | grep squid — you should see something like “squid -f /etc/squid/squid.conf” if it is running correctly.

You will notice that I did not bother to configure Squid. The default CentOS configuration was fine for me. If you want better performance, you can tune it by adding a disk cache and other fun stuff, but here I am just focusing on getting the basics working. Key lines you want to be sure are in the /etc/squid.conf file are:

acl localhost src 127.0.0.1/32 ::1
http_access allow localhost
http_port 3128

Those allow access to the local server and open port 3128 to listen for connections. They are already configured that way by default on my system, but if you are using a different distribution you might have to enter them yourself.

Test that squid is working by using telnet on the Linux box: telnet localhost 3128 If you see the error “Connection refused” then either Squid is not running, there is a firewall enabled on your Linux server, or it is running but not listening on the right port. You can break out of telnet by typing ctrl+] and typing close at the prompt.

Now you are done with the difficult part. There is only one more thing you have to do — set up a proxy connection in your web browser. Here I am using Firefox with the Foxyproxy plugin. You don’t need Firefox or the plugin… you could even use Internet Explorer. The goal here is just to have your browser using an HTTP proxy of 127.0.0.1 port 3128. However I find that the Foxyproxy is the best to use.

With Foxyproxy you can easily enable and disable the proxy with just two clicks. Why would you want to do that? Because it will look suspicious to the Network Admin if you are always browsing through a proxy. When they monitor your connection, it will appear that you never connect to any web server. That isn’t likely for any modern office worker / student. What I recommend is to leave the proxy off unless you need it. This makes the proxy less obvious to a Network Snooper. I usually leave mine off unless I am visiting the websites of my bank, credit card company, stock broker, or webmail. It is also a good idea to enable the proxy when you are screwing around but are supposed to be working. Sites like Craigslist, Facebook, Twitter, and Ebay are frowned upon by some companies.

To configure Foxyproxy, install it like any other Firefox plugin, then right-click on its icon. Go to Options->Add a new proxy and in the Proxy details tab, Host or IP address, type 127.0.0.1. In port, type 3128. Under the General tab, ensure that the checkbox for performing DNS lookups through the proxy is selected. Here is a screenshot of my setup.

Foxyproxy General Tab

Foxyproxy Proxy Details Tab

Your settings should be the same as mine – compare the screenshots closely. Once you have this setup, right click on the Foxyproxy icon to verify that you are using the new proxy.

Now for the final step! Go back to your Putty SSH client and enter the external address of your Linux server. If you don’t know your external address, go to www.whatismyip.com whenever you are at home or where ever your Linux server is located. If you don’t have physical access to the Linux server, you can also find it from the Linux command line by typing: lynx http://www.whatismyip.com (if you receive an error about Lynx not being found, you might have to install it via Yum/Apt-get).

Next, click Open in Putty. A black box should appear with a prompt for your Linux password. Enter your password and you will see the Linux prompt. You must leave this window open whenever you are using the proxy, otherwise it won’t work. In your web browser, go to www.whatismyip.com. You should see a big message that reads “Possible proxy detected.” If you see that, congratulations, you’ve broken through to the other side!!!

What if Putty says connection refused or just hangs and doesn’t open a Linux window? This means that a firewall is blocking your outgoing TCP port 22 connections or your home DSL/cable router is not forwarding properly. One trick you can try is to run your Linux SSH daemon on port 80, but that is beyond this tutorial.

This is just one method of circumventing the thought police. If you can’t get it to work, don’t despair. There are many other methods of achieving the same result, just using different software than SSH. Search around. In the worst case scenario, you can get a cellular card for your laptop. This is the most expensive way, but it is also the safest.

How to Remove Mold from the Bathroom Ceiling

I wasn’t sure if this was really worth a post since it is so simple. However, at one point I was standing on a chair with a sponge in my hand, so I figure someone else might be doing it in a stupid way too.

One problem you might have in an older house is that the bathroom doesn’t have a ventilation fan. Well, I like to take long showers. This leads to a build up of humidity and it is only a matter of time until you have yellow-brown mold spots growing on your ceiling.

From what I understand, mold is always in the air. So, even if you manage to kill it, if the same humid conditions persist, you will run into the same problem again and again. The only way to really fix it is to install a ventilation fan, but I don’t want to cut a hole in my roof in the winter.

I leave the door open on the bathroom when I’m done to let out some moist air but still I find that I have to repeat this procedure about once a month.

Required tools:

sponge kitchen mop


generic brand bleach

Don’t laugh at my pink tile. It came with the house when I bought it.

Cleaning procedure

  1. Take off your clothes or wear all white. No matter what, bleach will drip on you and put spots on your clothes.
  2. Wash the floor mop with water and remove any dirt if you previously used it on the kitchen floor or somewhere else.
  3. Holding the floor mop over the bathtub, pour bleach on to the sponge.
  4. Once the sponge is soaked, mop the mold infested area. Personally I mop the entire ceiling because there could be some growing that isn’t visible yet.
  5. Put the mop away. You’re done.

I do this whenever I see mold spots on the ceiling (sorry I forgot to take a photo), and it works pretty well. The only downside to it is that the bleach smells really strong. I like the smell though – it means the room is clean.

Infiniti G35 Trailer Hitch Installation Part 2

When I left off last I was frustrated because I couldn’t get the bolts inside the bumper of the G35. They kept becoming stuck inside.

First, before I explain how I got around that problem, I am including a diagram of where you are supposed to jack your car while working on it. I have a 2005 model but I think they are all the same. I should have included this in the first part, but I forgot about it.

diagram of jack points on the car -- I got this off the internet somewhere

I like to put jack stands under the car after I have raised it with the floor jack. I am afraid that I could bump the handle on the floor jack while working on it and have a car fall on my head. So far that hasn’t happened but it is better to be safe.

The first problem I was having with fishing the bolt inside the bumper is that I was pushing it in from the passenger side of the car. The bumper is open on both ends and I just assumed the car was the same on both sides and never looked at the driver side. It turns out that it is a lot easier to reach the openings on the driver side than on the passenger side. I had to twist my wrist at some crazy angle to even reach the bumper opening on the passenger side. The driver side is a little easier, as pictured here.

bumper opening on the driver side (from bottom, looking up)

You should insert the bolt in the lower hole.

In the first part, I also mentioned that I was having a lot of trouble trying to pull the bumper with the wire spring that Curt provided. It was bent out of shape immediately. The solution I found was just to tie fishing line around the bottom thread of the bolt. You have to be careful to not yank it too hard, but it works. Ensure that you’ve tied the fishing line around the bottom and not near the head, otherwise it will be impossible to ‘drop’ the bolt into the half inch hole you drilled in the bumper.

Now, here is the reason why it kept getting stuck inside the bumper on my first attempt!

inside view of the bumper with stuck bolt

That might not look like a lot, but when you are trying to delicately pull it through with fishing line, it is a major pain in the ass. The way I unstuck it was to use electrician’s fish tape with a broke off shim tied to the end (you could use any large scrap), which I then pushed in to force the bolt past the heads of the Infiniti bolts. That might seem like overkill but I already had the fishing line break once so I didn’t want to repeat the exercise.

electrician's fish tape is required for this job

I also used the same electrian’s fish tape to initially pull the fishing line through the bolt hole in the center of the bumper. Very useful tool.

Despite having the fishing line tied to the bottom thread of the bolt, I still had a lot of trouble actually pulling it through the bolt hole. The problem is that the drilled hole is too small to fit needlenose pliers or anything else in. First I tried using tweezers to grab the bolt, however even the tweezers were too thick to hold on to the bolt while pulling it through the hole. Finally I tried a magnet, which worked great.

pulling bolt through with magnet and fishing line

What a relief – I was finally able to mount the hitch. Here are a few photos of the finished job.

underside view of attached hitch


hitch with extension part attached


hitch view from above.. hardly noticeable (see red arrow)

Unfortunately, I couldn’t get a rear photo of the car that would show the hitch because it was too dark outside. Maybe later.

Next, I am going to attach the trailer light wires, which look pretty complicated. I’ll make a separate post about that.

trailer light wires with installation manual

Configuration Management in the Tower of Babel

There are a few different configuration management tools for linux/unix systems out there. I have tried a few of the most popular of them (Puppet, CFEngine, and Chef). In fact my old blog was just posts about using Chef and Puppet, until I decided to delete that and start over again with this blog (which is about a wider variety of topics). The impression that one gets is that these tools will make everything easy and simple. However, for the most part they have not really been very helpful to me in the real world at my job.

It is easy to blame the tools – if this such-and-such tool were being used instead of what we’re using now then everything would be wonderful… yet in my experience it is not the tool’s fault.

Let’s examine the multiple different operating systems a configuration tool has to deal with… Do you think there is an operating system called Linux? WRONG! Linux is just a kernel. Every distribution is in fact a completely different OS. They have different init.d scripts, different packaging systems, different default tools, different default configurations, different names for many packages, different user ids, different default /etc/groups, different window managers, different desktops, different system administration tools, and so on. Essentially there is no commonality in Linux beyond the kernel itself, and even that is managed differently by different distros.

Besides Linux, you may have other operating systems like BSD and Solaris. Personally I like the BSDs for their consistency. I think the first one I used was FreeBSD 2.2.2 and guess what, it still uses /etc/rc.conf and /usr/ports. Of course there have been a lot of additions since then but the old tools have not been taken away. Contrast that with Linux, which seems to have a higher rate of change and Linux users in general seem to be very quick to throw away old tools and bring in something new which is completely incompatible with the old. There can be advantages to that but I think a lot of it is just the classic not invented here syndrome. For this reason I try to stick with the slowest moving distribution at my job, which is CentOS.

Another problem that configuration tools have a hard time handling are the configuration files themselves. Every, and I mean EVERY, Linux tool has a completely different method of configuration. INI files, RC files, key value files, embedded scripting languages, one-off scripting languages, sysctl variables, /proc filesystem, multiple included conf files, single conf files that have to be in a certain location, m4 files, files that must have tabs, files that cannot parse the tab character, tools that store passwords in plaintext, others that store passwords encrypted, files in /etc, others in /usr/local, and why not throw a few in /var too? I am not even mentioning the insane asylum of different filesystems and ways of dividing up hard drives and directories. Tools that use multiple daemons, others use threads, chroots, web scripting languages like PHP that create tons of files as “nobody” or “apache” or “httpd” (depending on the distro) in mode 777 littered all over the place. Users in LDAP, /etc/passwd, files in home directories, users in databases, users in this and that all over the place, encrypted and unecrypted in a thousand different forms.

It is no surprise that given the unlimited variety of possible configurations, configuration management tools struggle in this area.

What should be done to fix this problem?

Well, besides the unlikely possibility of standardization, I think the distro makers need to step up and develop some configuration tools which are suitable for managing more than one server at a time. They are the only ones who have enough influence to make a difference. If for example Red Hat said, “all configuration files will be in this format or the software will be removed from the distro” it would have a major impact. I don’t see that ever happening though.