Archive for the ‘’ Category.

No More Tables

For the last ten (or so) years that I’ve been posting to a weblog (first as c0nsumer on LiveJournal and now here on I’ve regularly posted images at the top of the post. Embarassingly, up until today I’ve been using a templatized HTML table with 1px of padding and a black background to make the 1px black border around each image:

<center><table cellpadding=1><tr><td bgcolor=”black”><a href=””><img src=”” height= width= border=0 title=””></a></td></tr></table></center>

I’ve know that this is the wrong way to go for a while now, but not knowing much about CSS I didn’t want to take the time to learn what was needed to change things for the better. I also had something that worked, cross-posted properly to LiveJournal, and wasn’t hard to maintain. One thing that it didn’t afford me was the ability to use WordPress’s visual editor; something which would allow me to easily create more image-laden posts and edit posts more quickly.

With the recent implementation of the new MMBA Trail Guide and some updates that needed to be done I’d been reworking a few different parts of the server, and it was time to change some things on this, my personal site. The main page had been MediaWiki (MW)-based for a while, but I now prefer WordPress (WP) for a main-website CMS, especially as I make blog posts far more frequently than the long-form technical writing that MediaWiki is best for. I started by upgrading MW and returning it to a more default theme, then moving WP to be the main page reached when one visits Content on MW was the adjusted to house only Technical Pages, and links to the most useful pages were added to WP.

The result of this will be that the main page of is now WordPress based, and brings about all the ease-of-writing features that it is known for. MediaWiki remains present, but has been relegated to a repository for technical info that’d be difficult to write up cleanly in WP; something which I intend to continue using whenever I work on detailed technical topics.

Thanks to help from my friend Rob I was able to get my head around using Chrome’s Elements Panel to easily figure out what was needed to style the images with a nice 1px border without using a silly table. Hopefully I’ll stick to the use of CSS in the future, avoiding more silly hacks like using tables in 2013. All posts going back to the beginning of the year have been updated to remove the use of a table for a border, but previous posts will end up stuck with a 6px border: 1px for the original padding plus 5px added by a margin on the images. I don’t think this is terrible and is probably just part of the price of progress. I had to do it at some point.

Going forward I may also move some of the less-technical content (such as a journal written while on a solo cruise to Alaska in 2003 or mixes) to WordPress just as I did with the About page, but I’ve yet to decide on that. For now I’ll just enjoy the enhanced writing capabilites, growing CSS knowledge, and improved writing tools.

How To Disable IPv6 w/ Sendmail on FreeBSD 9.0-RELEASE

Due to some issues with Comcast flagging some email I’ve been sending via IPv6 as Spam I wanted to keep mail from being sent this way. Comcast publishes this document explaining how to keep IPv6 mail from being blocked, but I’ve got some rDNS issues to sort out before I can work through all of those. So, in the mean time I simply wanted to stop

It took a bit to figure out how to disable IPv6 in the base Sendmail, but now that I’ve got it done I figured I’d share. This is in 9.0-RELEASE, but I’m sure it applies to many other recent FreeBSD Versions:

Edit /etc/make.conf to ensure that IPv6 is turned off for Sendmail compiles. Add this line to the file:


Rebuild Sendmail as described here in the FreeBSD Handbook:

# cd /usr/src/lib/libsmutil
# make cleandir && make obj && make
# cd /usr/src/lib/libsm
# make cleandir && make obj && make
# cd /usr/src/usr.sbin/sendmail
# make cleandir && make obj && make && make install

Then, go into your Sendmail config directory (/etc/mail), and if you haven’t so before, run make all to build your machine-specific Sendmail config files.

Edit and locate the line that reads DAEMON_OPTIONS(`Name=IPv6, Family=inet6, Modifiers=O') and comment it out by adding a dnl in front of it:

dnl DAEMON_OPTIONS(`Name=IPv6, Family=inet6, Modifiers=O')

Compile the Sendmail config and restart Sendmail:

make install
make restart

And, now you’re done! Look at /var/log/maillog to ensure that mail is no longer being delivered via IPv6.

Résumé Updated for 2012

Updating one’s résumé can be quite a pain especially if done under duress, so I like to periodically update it so that a fairly fresh copy is readily available. This afternoon I put the finishing touches on the most updated version, one which takes into account some changes at work, stuff that I’ve done with CRAMBA and the MMBA, and a few other newly-acquired skills.

If you’d like to see a copy of my resume it can be found at

Time Machine for… FreeBSD?

This week I finally got around to writing a new backup script for my webserver. I have it automatically pushing backups to a device at home, but in the past I’d only been doing a nightly rsync with --delete and periodic offline backups. The problem with this was that should something happen to my server and cause a data loss, but not be noticed before the next backup ran, the current backup would be modified reflect the now-compromised data, potentially causing massive data loss. Clearly this was a bad thing, and something had to be done.

A new backup scheme was devised and now that the new scripts are tweaked I wanted to present them here. rsync is still being used, but thanks to its glorious --link-dest option which makes hard links as it can, files already stored on disk (say, from a previous version of the backup) are reused, saving space. This is how Apple's Time Machine works, just without the nice GUI. The result is that I have a series of directories starting with backup.0 up through potentially backup.30 on the target, each containing a different backup. The suffixed number represents how many versions old the backup is. These versions are generally created once per day, but on days where the backup does not complete successfully the version is not incremented.

To start, there is a script called which runs once per day on This script pushes a backup to a Mac at home as follows:

  1. If needed, remotely execute on the backup server. This will move backup.0 to backup.1, backup.1 to backup.2, keeping no more than 30 backups. The need to rotate backups is determined by the presence of backup.0/backup_complete. If there is no backup_complete file we know that the previous backup was not successful and that we should reuse backup.0.
  2. Create a new backup.0 and populate it with a backup_started flag file.
  3. Run the backup job via rsync.
  4. If the job completes successfully (exits with something other than 0 or 24), continue. Exit code 24 indicates that some files disappeared during backup, and as mail files (amongst others) tend to move and be deleted by users during the backup job, this is not a critical error for us.
  5. Remove backup_started and create the backup_complete flag.

Copies of the aforementioned scripts can be found here, if you’d like to look at / use them: ·

These scripts assume the presence of backup.0, a full copy of your backup, which you’ll have to create yourself before use. There’s also likely some necessary changes for your environment, most likely in some of the variables set at the top of the scripts, such as the number of days for which to keep backups and logs, the target hostname, SSH port, username, etc.

Busy, Busy, Busy…

A very small owl sitting on a branch outside of the window at Rochester Mills Brewery.

I’ve been really, really busy lately. This isn’t a bad thing, I just haven’t had enough time to get everything done that I’d hoped to. Lately I’ve had the MMBA website move, really bad weather on Saturday, shopping (REI, IKEA, Target, Meijer, etc) on Sunday, work then the MMBA Metro North quarterly meeting today, and now I’m making tapioca pudding.

I still have to find time (hopefully tomorrow) to fix a friend’s NAS, finish up the x0xb0x, and whatever else comes up. For now, though, have some moblog photos:

· A very small owl sitting on a branch outside of the window at Rochester Mills Brewery.
· Bags and carts at Ikea on Ford Road.
· Partially eaten veggie burger from J. Alexanders in Somerset.
· The urinal at J. Alexanders is a nice, old style model.
· After buying gas I bought this very large apple fritter.
· I do wonder why this person doesn’t just disable their touchpad.
· Partially eaten rosemary bread with jalapeno havarti melted on the top.
· Waiting for biyrani at Rangoli Express #1.

Also, this evening’s fortune (6):

Last login: Mon Jan 12 19:55:22 2009 from adsl-75-45-241-
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
        The Regents of the University of California.  All rights reserved.

FreeBSD 7.0-RELEASE (BANSTYLE) #4: Tue Dec  9 00:07:44 EST 2008
Snow Day -- stay home.

Funny that, considering the current forecast. A snow day would be rather nice, actually.

Fisheye of Website Work

Rob, me (Steve), and Nick sitting around the table in my dining area working on the MMBA website migration.

Here, have a photo of Rob, me (Steve), and Nick sitting around the table in my dining area while we worked on the MMBA website migration. Marty took this while playing around with my 20D and Peleng 8mm fisheye.

Here’s one I took of Marty, about 4″ from the lens.

MMBA Site Moved

Michigan Mountain Biking Association web site ( soft launch after moving to for hosting.

Here’s the result of something I’ve been working on for the last couple months. The new Michigan Mountain Biking Association web site has launched, and it is now hosted here on my server. This is the soft launch of the site, as we should have a new unified theme / design across the main site, forum, and other places soon. However, we wanted to get the new site itself up and running because the old one was causing us a few problems.

I’m really, really glad we got this done. Now, time for bed.

Attributor Corporation

StatPress in WordPress on the Blog showing a bunch of requests from Attributor Corporation.

Do any of you who run blogs ever notice occasional rashes of indexing from I’ve noticed this every few days when poking around in the copy of StatPress Reloaded which is running here to monitor pageviews and such.

It turns out that these queries are from Attributor Corporation, who regularly indexes blogs and such to look for copyright violations, duplications of text / image / video content, etc.

Attributor’s FAQ states that…

Attributor is the world’s first web-wide content tracking and analysis platform that enables publishers to build value with their content wherever it appears on the Internet.

With Attributor, publishers can now program when, how and where their content is presented across the web and social networks. Advanced fingerprinting algorithms, a large scale crawling infrastructure and detailed contextual analysis provide publishers with web-wide visibility of their articles, images or videos. Using the Attributor platform, customers can monitor licensed uses, identify new sales leads and revenue-sharing opportunities, and derive more links and better search engine placement.

The FAQ then goes on to talk about how they don’t want to immediately send out DMCA notices for such things, but instead enhance monetization by sending requests to those copying content asking for appropriate links back, attributions, etc. They also claim that their tool (Dashboard) can take Creative Commons licenses into account and help ensure that the license is being followed accordingly.

I don’t really mind, since all this content is fairly original and put out for everyone to see and read, but it is interesting to see the scanning actually happening.

Locking Pliers, Furnace Issues

A pair of Craftsman pliers with locking jaws found in the road around my condo complex as I was leaving for work this morning.

This morning I found this pair of Craftsman locking pliers in the road as I was leaving my condo. I’ve been wanting some of these but haven’t purchased them, so this is a nice find.

Before that, I found that my house was 58°F (14.4°C) when I woke up this morning. The thermostat was calling for heat, but the furnace wasn’t igniting. This has happened in the past, requiring a quick reset of either the thermostat (Heat -> Off -> Heat) or the furnace (power cycle) to make it work again, but in the past couple of weeks it’s been happening with alarming frequency. I’m afraid that an electrical component of my furnace is starting to go wonky. I may end up just calling Mike’s Heating & Cooling who did a nice job installing a new air conditioner in 2006. While I normally wouldn’t mind fixing such electronics myself, reproducing the issue is difficult I can’t exactly wait for parts when it’s regularly below freezing outside.

Oh, and welcome to my first post from WordPress 2.7. Hopefully it’ll continue working nicely. As long as it goes well I’ll probably be upgrading the rest of the blogs I host sometime this evening.

UPDATE: Some things are a bit weird, and plugins like StatPress Reloaded and AdSense Manager need their management / control portions tweaked so that they show up under the right part of the Dashboard, but they still seem to work.

NGROUPS_MAX to 64 under FreeBSD 7.0-RELEASE on

Just so everyone knows, I’m changing NGROUPS_MAX on to 64 shortly, which will require rebooting the box. Everything should come back up okay after this.

This change is being made so that a user can be a member of more than 15 groups, which will allow me to add far more local web hosting users under the lighttpd / PHP privilege separation model which I prefer. Due to some incoming sites this is needed in order to best host them. As far as I can currently tell this will only break NFS, which I don’t use.

I’ll update this post once the reboot is complete.

UPDATE: Well, that seemed to have gone as expected. Per usual, please let me know about any problems you are having with the server.