Straight Pool & Equal Offense Scoresheet/Spreadsheet Update

I’ve made some updates to the score sheets.

I’ve uploaded all of them now to GoogleDocs for one. That’s the big change.

Other small changes, currently exclusive to the GoogleDocs versions, are minor formatting changes, formulaic changes to rid the sheets of #DIV/0 errors, and the removal of some extraneous columns to help with formula drag filling.

Furthermore, I’ve shared all the GoogleDocs versions so they’re public for the finding, though I’ve retained exclusive editing rights.

As always, suggestions and tweaks, especially those that stem from trial-by-fire experience, are always welcome.

Straight Pool & Equal Offense Scores and Stats Sheets

Biting the NAS Bullet

UPDATE 2011.03.09 – I think I got a handle on it. I’m still pursuing the subject of this post, but I’m no longer worried about the backups.

I’m done.

I’ve given up on USB based backup solution. Sunday morning has become my standard “find out what went wrong with the full backups last night and see what I can do to fix them.” I tire of it. Granted, the failures this weekend were because I ran out of room on my little 80GB USB drives. Totally my fault. It was just a matter of time. I wasn’t paying attention and the backups failed. Fortunately, that’s all that happened, as opposed to something more insidious. At least it wasn’t some sort of kernel panic, or soft-updates issue again.

I could easily solve it by spending a few bucks on a larger drive, but that would just be another stopgap. I want a solution that will carry us a few years and then some.

So, I’m thinking NAS*. Something that would serve my family’s needs (which amounts to my wife and I at this point, but we’re really hoping for a little papoose sometime here real soon). That means a lot of storage space. That means seamless connectivity with our existing machines, and that means dead simple to use.

I could spend a few hundred dollars on hardware and many hours putting together my own FreeNAS server from pieces parts (or any one of a number of other free options). Or I could spend a few hundred dollars and a few minutes on an OOTB solution.

I’m leaning towards the OOTB solution.

Sure, it’s not as proudly geeky as a home grown solution, but my gorgeous wife doesn’t appreciate geekery as much as some of you and I do. She appreciates things that work and work now. If I’m going to spend this amount of time and money, she has approval powers – it’s just part of that thing called Happily Married. Frankly, the older I get, the more I agree with her. So, OOTB NAS it is.

So far, though I’m still keeping my eyes and mind open, I’ve narrowed my choices down to:

Synology Disk Station DS410
Synology Disk Station DS410j
Netgear ReadyNAS NV+
Netgear ReadyNAS Ultra
Netgear ReadyNAS Ultra Plus
QNAP Systems 419P+
Thecus N4200Eco/Pro
Seagate BlackArmor NAS 400

Each of them fits my base requirements:

  1. Interoperability between Windows, Mac and *nix machines
  2. Function as a print server
  3. Four drive bays for RAID5 or better (hot swappable a huge plus)
  4. Small physical footprint

Each of them will do the job. So now, it’s a question of features, performance, future-resistance and of course, price.

I’ll be researching each of these models (and any others that come across my screen in my research) over the next couple of weeks (or less).

* Yeah, I know NAS != backup. This is just a step in the right direction. For backups of the NAS, I’ll grab a big 1 or 2TB disk, throw it into my dev server, and rsync the data from the NAS to it. I’ll keep my backups scripts running for my server data, but I’ll point them over NFS to the NAS, rather than to flakey USB drives.

Near Native FreeBSD Full and Incremental Backups to a Removable USB Storage Drive

UPDATE 2011/03/09 – I updated the code to backup to an NFS mount, and to include the “-h 0″ flag to skip all nodump flags. That was causing me serious problems.

Summary

I’ve given quite a bit of thought to backup procedures at home since my FreeBSD 8.1 box dropped my mirrored filesystem. The signs of impending apocalypse were there, I just didn’t pay them proper heed. Fortunately, all of my data was salvaged; unfortunately, I lost all the custom PHP code I wrote over the last 6 months, my wordpress themes, plugins and modifications, and everything else that actually DID anything with all that data. So, while I’ve been rewriting that, I’ve been giving equal, if not more attention to backing it up. I’ll catch up again, but before I do that, I’ll make sure I won’t fall behind again.

I did a few searches for FreeBSD backup solutions, and rolled my own little backup script using dump. It was decent, but it didn’t do everything I wanted as well as I wanted it to. Every night was a full backup, and there were no incrementals. I had to implement some pretty inelegant code to accomplish a couple things simply b/c I didn’t know how else to do it. So I kept looking and eventually zeroed in on David Andrzejewski’s work. He clearly states what he put out there is a use-at-your-own risk kind of script. I took it anyway as a starting block, and fleshed it out for my own purposes.

My requirements were similar to his, with the exception that I don’t have a cloud based storage account at the time of this writing and instead will be using a removable USB connected storage drive.

Project Goals

  • Run with native or easily accessible tools.
  • Full off-system backup of entire system once a week.
  • Incremental off-system backup of entire system nightly.
  • Separate off-system backups of individual critical files to make future restores easier.

Future Goals

  • Play with ${DUMPCACHE} to see how it affects the time to execute in my environment. Drop it back to 8MB for a week. Ramp it up to 64MB for a week. Recommended is 32MB, but it’s a party! Let’s see what happens.
  • Continue monitoring and fine tuning the hardware, OS environment and script to ensure maximum performance and stability. I haven’t recompiled a kernel in a while, maybe I’ll see about that.
  • These are “as money allows” goals. I’m sure my wife is getting tired of me spending money on hardware. Then again, she does appreciate that I have a hobby that keeps me off the streets and out of the brothels.
    • Continue looking for consumer level, but sufficiently robust NAS solutions featuring RAID5 mirroring and access via secure and/or open protocols (ssh, smb, rsync, etc.) to replace (or augment) the removable drives I’m using now. No Windows-Only solutions please.
    • Evaluate cloud based storage for off-site backups. I’m looking at SpiderOak right now at the recommendation of a friend. I like their zero-knowledge solution and pricing, but more research is required. We’ll have upwards of 500GB of storage requirements, so we’ll have to weigh the monetary costs of cloud storage and bandwidth usage carefully against the risk of my solution failing when (!if) I need to restore. For the moment, I’m relatively comfortable with dumping the filesystems to removable drives, and keeping certain ultra-critical bits of recovery text (bsdlabels, fstabs, choice config files, etc.) in Google Docs.

My Environment

Two physically identical servers built from the ground up running FreeBSD 8.1. Each system houses a 150GB system drive (/dev/ad4s1) and a 500GB data/storage drive (/dev/ad6s1), and runs with 2GB of RAM.

I have /, /usr and /var mounted individually on the 150GB drive, and /home (containing /users and /www) mounted on the 500GB drive. I thought about getting separate drives for /www and /home, but decided I didn’t want to deal with planning for storage allocation. Instead I created /home/www for web files, and /home/users for user accounts. It’s not exactly standard, but it’s not unprecedented, and I make it work.

Off my “production” server I’ve hung a 2.5″ 320GB USB2.0 removable drive. Off my “development” server I’ve hung a 2.5″ 100GB USB2.0 removable drive. I’ll adjust the size of the drives as needed. That’s just what I had on hand. Both were UFS formatted using fdisk.

During the backup job, those drives are mounted at /backup. The rest of the time they’re plugged in, but not mounted.

The Script

You’re welcome to this, but be warned, if it borks up your machine, destroys your pr0n collection, or sends terrifying space monkeys into your engine room, don’t blame me. Use at your own risk. There, now that I’m all disclaimed…

#!/usr/local/bin/bash

# Much appreciation to David Andrzejewski, and the work he started at
# http://www.davidandrzejewski.com/2010/03/01/freebsd-backup-using-dump-and-duplicity/
# I'm sure his current script/processes far outstrip this, but this
# is my (f)stab at it

# Version: 0.5
# * Provides 1 set of full backups and 6 associated incrementals
# * Backup files stored on mounted USB drive only

# I would like to see...
# * Writing to NAS with RAID5 and standard access (ssh, SMB, etc.)
# * Retrieve the cloud based storage interaction I stripped out

# DUMPLVL: provided via a command line flag ${1})
# WEEKDAY: provided via a command line flag ${2})

# HOSTNAME: The host being backed up. Used in informational messages
HOSTNAME=$( hostname )

# FSLIST: The list of file systems that will be dumped along with the
# name of the dump Example: /dev/ad4s1a=root will dump the /dev/ad4s1a
# volume and name it DDD.root.dump.levelN.bz2 where "N" is the dump level
# and "DDD" is the weekday
FSLIST="/dev/ad4s1a=root /dev/ad4s1d=var /dev/ad4s1f=usr /dev/ad6s1d=home"

# BSDLABEL_PARTITIONS: The list of partitions to run `bsdlabel` on
# This will be saved in the backup directory during runtime as
# ${WEEKDAY}.bsdlabel_${PARTITION}.txt
BSDLABEL_PARTITIONS="ad4s1 ad6s1"

# DUMPDEVICE: The location the files will be dumped to
DUMPDEVICE=sosaria:/home/dumps/${HOSTNAME}

# DUMPDIR: The directory that the dumps will be written to
DUMPDIR=/backup

# STAGINGDIR: The directory where dumps are stored before being written
# to ${DUMPDIR}
STAGINGDIR=/home/dumps/stage

# ARCHIVEDIR: The local directory dumps are stored after being written
# to ${DUMPDIR}
ARCHIVEDIR=/home/dumps/${HOSTNAME}

# NODUMP_DIRS: List of directories to set the nodump flag
NODUMP_DIRS="/usr/ports /usr/obj /usr/src /home/www/logs /home/www/src /home/dumps"

# DUMPCACHE: The amount of memory to give dump
DUMPCACHE=32

# DUMPFLAGS: The flags to feed dump
DUMPFLAGS="uanL -h 0 -f"

# FSTYPE: The filesystem type of the mounted partition
FSTYPE=nfs

# These should be standard

# BSDLABELCMD: The bsdlabel command
BSDLABELCMD=/sbin/bsdlabel

# DUMPCMD: The dump command
DUMPCMD=/sbin/dump

# MOUNTCMD: The mount command
MOUNTCMD=/sbin/mount

# UMOUNTCMD: The mount command
UMOUNTCMD=/sbin/umount

##---------------------------------------------------------------------
# Shouldn't have to edit anything below here

# Get the start time so we can gauge how long this is taking. Useful in
# tweaking ${DUMPCACHE}
START=$( date +%s )

# Get the directory we're running from
SCRIPTDIR=$( dirname $0 )

cd ${SCRIPTDIR}
if [ $? -ne 0 ]; then
       echo "ERROR: Unable to cd to ${SCRIPTDIR}! Aborting!"
       exit 1
fi

# If we were executed like "./whatever.sh" - set SCRIPTDIR to the pwd
if [ "${SCRIPTDIR}" == "." ]; then
       SCRIPTDIR=$( pwd )
fi

echo "Script is running from ${SCRIPTDIR}"

# Check the command line to make sure we have what we need from it
# First check for the dump level
if [ "${1}" == "" ]; then
       echo "Must specify dump level. Aborting!"
       exit
else
       DUMPLVL=${1}
fi

# Sanity check
if [ "${DUMPLVL}" == "" ]; then
       echo "ERROR: For some reason DUMPLVL never got set! Aborting!"
       exit 1
fi

# Then get the weekday name off the command line
if [ "${2}" == "" ]; then
       echo "Must specify weekday name. Aborting!"
       exit
else
       WEEKDAY=${2}
fi

# Sanity check
if [ "${WEEKDAY}" == "" ]; then
       echo "ERROR: For some reason WEEKDAY never got set! Aborting!!"
       exit 1
fi

# Create the flag file so we can't run more than one instance
if [ -f "${SCRIPTDIR}/myself.flg" ]; then
       echo "Script running?! ${SCRIPTDIR}/myself.flg exists! Aborting!"
       exit 1
else
       echo "Touching myself at ${SCRIPTDIR}/myself.flg"
       touch ${SCRIPTDIR}/myself.flg
fi

# Check for the existance of ${STAGINGDIR}
if [ ! -d "${STAGINGDIR}" ]; then
       mkdir ${STAGINGDIR}
       if [ $? = 1 ]; then
               echo "Could not create ${STAGINGDIR}!  Aborting!"
               echo "Removing ${SCRIPTDIR}/myself.flg"
               rm -f ${SCRIPTDIR}/myself.flg
               exit 1
       fi
fi

# Check for the existance of ${ARCHIVEDIR}
if [ ! -d "${ARCHIVEDIR}" ]; then
       mkdir ${ARCHIVEDIR}
       if [ $? = 1 ]; then
               echo "Could not create ${ARCHIVEDIR}!  Aborting!"
               echo "Removing ${SCRIPTDIR}/myself.flg"
               rm -f ${SCRIPTDIR}/myself.flg
               exit 1
       fi
fi

echo ""
for DIR in ${NODUMP_DIRS}; do
       echo "Setting nodump on ${DIR}"
       chflags -R nodump ${DIR}
done

echo ""
echo "Dump Level: ${DUMPLVL}"

# Preserve a copy of root's crontab (/root/crontab is
# manually created with `crontab -l > ~/crontab` with every change
echo ""
echo "Copying /root/crontab to ${STAGINGDIR}/${WEEKDAY}.root_crontab"
cp -f /root/crontab ${STAGINGDIR}/${WEEKDAY}.root_crontab

# Preserve a copy of fstab
echo "Copying fstab to ${STAGINGDIR}/${WEEKDAY}.fstab.txt"
cp -f /etc/fstab ${STAGINGDIR}/${WEEKDAY}.fstab.txt

# Preserve a week's worth of bsdlabel copies for each partition
for PARTITION in ${BSDLABEL_PARTITIONS}; do
       echo "Writing bsdlabel for ${PARTITION} -> ${STAGINGDIR}/${WEEKDAY}.bsdlabel_${PARTITION}.txt"
       ${BSDLABELCMD} ${PARTITION} > ${STAGINGDIR}/${WEEKDAY}.bsdlabel_${PARTITION}.txt
done

# Dump the filesystems!
for FSITEM in ${FSLIST}; do
       # Get the devicename
       FS=$( echo ${FSITEM} | awk -F= '{ print $1 }' )
       # Get the filesystem name
       NAME=$( echo ${FSITEM} | awk -F= '{ print $2 }' )
       DUMPFILE=${WEEKDAY}.${NAME}.level${DUMPLVL}.dump
       echo ""
       echo "Dumping ${FS} to ${STAGINGDIR}/${DUMPFILE} at dump level ${DUMPLVL}"
       echo ""
       echo "${DUMPCMD} -C${DUMPCACHE} -${DUMPLVL}${DUMPFLAGS} ${STAGINGDIR}/${DUMPFILE} ${FS}"
       ${DUMPCMD} -C${DUMPCACHE} -${DUMPLVL}${DUMPFLAGS} ${STAGINGDIR}/${DUMPFILE} ${FS}
done

# Test for an existing backup device mount and either use the existing
# mountpoint or mount our backup directory

MOUNTRESULTS=$( ${MOUNTCMD} | grep "${DUMPDEVICE} on ${DUMPDIR}" )

if [ "${MOUNTRESULTS}" == "" ]; then
       echo ""
       echo "Mounting ${DUMPDEVICE} on ${DUMPDIR}"
       ${MOUNTCMD} -t ${FSTYPE} ${DUMPDEVICE} ${DUMPDIR}
       if [ $? = 1 ]; then
               echo "  ... failed. Aborting!"
               echo "Removing ${SCRIPTDIR}/myself.flg"
               rm -f ${SCRIPTDIR}/myself.flg
               exit 1
       else
               echo "  ... succeeded"
       fi
else
       echo "${HOSTNAME}:${DUMPDEVICE} already mounted on ${DUMPDIR}"
fi

# Copy the files to ${DUMPDIR} and archive them to {$ARCHIVEDIR}
cd ${STAGINGDIR}
echo ""
for FILE in *; do
       echo "Copying ${FILE} to ${DUMPDIR}"
       cp ${FILE} ${DUMPDIR}/${FILE}
       if [ $? = 1 ]; then
               echo "... Failed to copy ${FILE}! You might want to see to that."
       else
               echo "Moving ${FILE} to ${ARCHIVEDIR}"
               mv ${FILE} ${ARCHIVEDIR}/${FILE}
       fi
done

# Get a snapshot of how the dump directory looks for verification
echo ""
echo "Recent Additions to ${DUMPDIR}:"
echo ""
ls -lt ${DUMPDIR} | tail -n +2 | head -n 8

# Umount the backup filesystem
echo ""
echo "Unmounting ${DUMPDIR}"
${UMOUNTCMD} ${DUMPDIR}
if [ $? = 1 ]; then
       echo "  ... failed. You might want to see to that."
else
       echo "  ... succeeded"
fi

# Clear the running flag
echo ""
echo "Removing ${SCRIPTDIR}/myself.flg"
rm -f ${SCRIPTDIR}/myself.flg
if [ -f "${SCRIPTDIR}/myself.flg" ]; then
       echo "  ... failed. You might want to see to that."
else
       echo "  ... succeeded"
fi

echo ""
echo "Backup of ${HOSTNAME} Complete"

END=$( date +%s )
RUNTIME=$(( ${END} - ${START} ))
H=$(( ${RUNTIME}/3600 ))
M=$(( ( ${RUNTIME}/60 ) % 60 ))
S=$(( ${RUNTIME} % 60 ))

echo "It took ${H} hrs, ${M} mins and ${S} secs with -C${DUMPCACHE} (${RUNTIME} secs)"
exit 0

The Crontab

Here’s how I’ve set up my crontab. Like Mr. Andrzejewski, I opted to keep the specifics regarding the type of backup and the day it’s run in cron, rather than build it into the script. While it does make for a slightly longer crontab, it simplifies the logic in the script considerably. At the end of the day, I just feel better about telling the script what kind of backup to run (full or incremental), and the weekday name to embed in the resulting filenames, rather than letting it determine it itself. It’s a control thing.

# Daily Backups of filesystems
# Full backups on Sunday. Incremental backups every other day.
30 0 * * 0 /root/bin/backup/backup_script.sh 0 Sun 2>&1 /dev/null | mail -s "System Backup" dvicci
30 0 * * 1 /root/bin/backup/backup_script.sh 1 Mon 2>&1 /dev/null | mail -s "System Backup" dvicci
30 0 * * 2 /root/bin/backup/backup_script.sh 1 Tue 2>&1 /dev/null | mail -s "System Backup" dvicci
30 0 * * 3 /root/bin/backup/backup_script.sh 1 Wed 2>&1 /dev/null | mail -s "System Backup" dvicci
30 0 * * 4 /root/bin/backup/backup_script.sh 1 Thu 2>&1 /dev/null | mail -s "System Backup" dvicci
30 0 * * 5 /root/bin/backup/backup_script.sh 1 Fri 2>&1 /dev/null | mail -s "System Backup" dvicci
30 0 * * 6 /root/bin/backup/backup_script.sh 1 Sat 2>&1 /dev/null | mail -s "System Backup" dvicci

This will finally result in a list of files looking something like this come Sunday morning. Sort to taste.

backup/Sat.usr.level1.dump
backup/Sat.var.level1.dump
backup/Sat.root.level1.dump
backup/Sat.fstab.txt
backup/Sat.bsdlabel_ad6s1.txt
backup/Sat.bsdlabel_ad4s1.txt
backup/Sat.root_crontab.txt
backup/Fri.home.level1.dump
backup/Fri.usr.level1.dump
backup/Fri.var.level1.dump
backup/Fri.root.level1.dump
backup/Fri.fstab.txt
backup/Fri.bsdlabel_ad6s1.txt
backup/Fri.bsdlabel_ad4s1.txt
backup/Fri.root_crontab.txt
backup/Thu.home.level1.dump
backup/Thu.usr.level1.dump
backup/Thu.var.level1.dump
backup/Thu.root.level1.dump
backup/Thu.fstab.txt
backup/Thu.bsdlabel_ad6s1.txt
backup/Thu.bsdlabel_ad4s1.txt
backup/Thu.root_crontab.txt
backup/Wed.home.level1.dump
backup/Wed.usr.level1.dump
backup/Wed.var.level1.dump
backup/Wed.root.level1.dump
backup/Wed.fstab.txt
backup/Wed.bsdlabel_ad6s1.txt
backup/Wed.bsdlabel_ad4s1.txt
backup/Wed.root_crontab.txt
backup/Tue.home.level1.dump
backup/Tue.usr.level1.dump
backup/Tue.var.level1.dump
backup/Tue.root.level1.dump
backup/Tue.fstab.txt
backup/Tue.bsdlabel_ad6s1.txt
backup/Tue.bsdlabel_ad4s1.txt
backup/Tue.root_crontab.txt
backup/Mon.home.level1.dump
backup/Mon.usr.level1.dump
backup/Mon.var.level1.dump
backup/Mon.root.level1.dump
backup/Mon.fstab.txt
backup/Mon.bsdlabel_ad6s1.txt
backup/Mon.bsdlabel_ad4s1.txt
backup/Mon.root_crontab.txt
backup/Sun.home.level0.dump
backup/Sun.usr.level0.dump
backup/Sun.var.level0.dump
backup/Sun.root.level1.dump
backup/Sun.fstab.txt
backup/Sun.bsdlabel_ad6s1.txt
backup/Sun.bsdlabel_ad4s1.txt
backup/Sun.root_crontab.txt

Plan Reset, and Chromebook as Sysadmin Tool

As I suspected, my 100MB/month plan reset this morning, and I’m back up to my full allotment.

Which isn’t that much, as I also suspected. See, I’ve been tracking it, and my own data usage on my desklaptop is pretty severe, and I really haven’t used it that much. Admittedly, I’ve used it more in the last couple of weeks as I built out my two servers, and wanted the ease of side-by-side ssh sessions. Lots of research and referencing online tutorials, how-to’s, man(n) pages, and the like. Most of it was primarily text based (not a lot of imagery in man pages – don’t you think they could be prettified a bit?), but the bandwidth usage still adds up. In fact, for me, it adds up to about 100MB per day!

I could have used my Chromebook, but it really wasn’t ideal for the task. My wife was, many times, confounded by the sheer amount of LogoRhythms I was ensconced within. Throughout the bulk of the builds, I never had fewer than two sessions going (one for each server), and several times I had upwards of 5 and 6 as I tailed logs there and yonder, and ran compiles and code and configs here*. Though I got around the lack of key based ssh authentication in crosh $ with Match statements in my sshd_config, the lack of window tiling, while not fatal to the task at hand, would have hindered me a touch. It was immensely helpful to have multiple and simultaneously visible windows open at once. I’m also a stickler for the look of my terminal sessions, and crosh doesn’t allow much by way of customization.

A sysadmin platform the Chromebook is not. Then again, it was never designed to be.

Only slightly apropos of the topic, we had a lot of home showings over MLK weekend, at both houses. The Chromebook was handy to have around when we didn’t really have any place to go in particular, or errands to run. It provided for plenty of lightweight and easily portable distraction at bookstores and coffee shops with free Wi-Fi.

You better believe I browsed everything http://. That https:// stuff is for wussies. Live a little, people. I’m sure the shady characters off in the corners with their hoodies on and their screens tilted down and facing the wall appreciated that.

* I could have reduced my workload significantly by building one server and mirroring the drive with dd but… well… I didn’t. Maybe next time.

Too Many LogoRhythms to Count

You may have noticed that my site has been offline for a few days. Or you may have noticed and thought I was simply being quiet. I’m known to some to be that way now and again. Not the case this time, though. I was offline good and proper. Now, after lots and lots of LogoRhythms, I’m back on line…

What happened was this: the utter corruption of my RAID1 setup, resulting in the loss of nearly all the data in the mirrored HD partition in which my web server data was stored. My /home directory was mounted on the same drive, but it wasn’t affected for some reason. My /www directory, home to my web server and all the data it served, was nearly completely lost, with plenty of data unrecoverable. At least I have my initial configurations, and somehow, the daily MySQL backups of all my databases.

No, I didn’t have the data backed up elsewhere. I relied on RAID, figuring that HD failure was my biggest concern, not driver/controller/software failure and the loss of superblocks and disk labels.

Yes, I’m an idiot. I should have known. Lesson learned.

So, over the weekend, with the blessings of my lovely and incredibly understanding wife, I exercised my hardware research muscles, and put together the specs for two identical systems to serve as production (Britannia) and development (Sosaria). Then I went out and bought it all (see lovely and incredibly understanding statement above). Here’s the thing… I spent about a third on both of those systems as I spent on my gaming rig 6 years ago, and they’re both arguably nearly three times as fast (by certain measures and points of view… they screamed through the initial SSH host key generation routines so fast I didn’t even realize it was done until I was sitting at a logon prompt). The hardware is anything but crazy fancy, but it is working.

As an aside, it was interesting to watch the two machines run package installs and updates in tandem through two simultaneous PuTTY instances. Nanoscopic differences in the hardware always had one machine or the other running ahead.

It’s nice to know I still got what it takes to piece together a working computer from separate components, and have it boot the first time I give it the juice. Granted, they were all new parts, so there wasn’t any real hacking involved, but it still feels nice.

I kept costs down by sticking with on-board graphics (who needs a distinct graphics card to push console text?), and already having monitors sitting around. I’m saving space by using a KVM switch, instead of multiple monitors & keyboards. It’s a mechanical switch, so until I get a battery backup in place (not cheap), I may run into issues if a brownout causes unplanned reboots. I’m keeping it set to my prod box in that case, to at least simulate some consistent uptime. I haven’t had a brownout in a few years, either, so I’m due…

The two servers are identical in every way, from the hardware up through the OS and (at least at this time) the software packages installed. That way, I can be sure what I develop on dev will work without issue on prod. In fact, once it’s all set up the way I want, I won’t even need to log in to prod to publish new work. I’ll just check in the changes via Subversion and sip my beverage of choice as it all “just works.”

To help avoid future data loss issues (rare is the perfect solution), my dev box will serve as backup to my prod box by default, and I’ll have some large external drives hanging off my dev slow box for yet more backups (via relatively slow USB 2.0 connections – but backups just have to work, not be fast – I’m still looking into a NAS solution, b/c that would just be cool). I’m thinking about looking into off-site solutions too (cloud?), but haven’t started that yet. I’ve no doubt some of you will have opinions on this set up, which I’m more than willing to entertain, assuming they don’t involve too much more money. :)

I’m excited to finally have a semi-proper development environment again. And develop I will… not only to recreate what I lost over the last 6 months (which wasn’t that much to be honest), but also to create whatever it is I’ll create from here out.

But first, I’ll fix all the broken images, and then I’ll get to creating a new theme for this site…

Impressions on Google Chrome OS & Cr-48: Nothin’ but Web

When I filled out the Pilot Program survey the day it started on December 7th, the last thing I expected was to be chosen. Yet here I am with a Cr-48 on my lap.

Now that it’s here, I feel something of an obligation to do at least an initial impressions post on it. After all, everyone else has (march ye to the Googles to find more), and it doesn’t seem right to accept this free laptop without at least paying for it with some typing and whatnot.
The Arrival
[SinglePic not found]I opened the Fed-Ex box, and found within the now-famous illustrated box, with the explodey drawings on it. I absolutely love the drawing style. It has a distinct Captain Mark sensibility, which I worshiped as a young lad. I especially like the little mouse.dvicciChrome02

I couldn’t remember at first where I saw the drawings, but I felt my excitement build for reasons I couldn’t quite explain. Something cool lay waiting within… I just knew it. I just couldn’t quite place what it was. Then it hit me, and I immediately went to get my camera.

On the hardware

I’m not going to spent a lot of time because it’s a basic reference that won’t be sold retail, has little in the way of fancy, and because it’s been done a many times before (forget ye not the Googles, my friend). That said, on the off chance that my vote will count for something, I should at least offer a little something by way of critique.

Pocket Detail Like
The first thing I noticed, and one of the things that I continue to love is the rubberized chassis. It’s a little tougher to keep pristine, as the surface tends to hold on to blemishes (oils, spilled coffee, dog slobber, etc.), but for me it’s worth it.

I also love the chiclet keyboard. I like the weight. I like the design of the thing. It’s functional. It’s also quiet. I’m also becoming fond of the layout, including the replacement function keys above the top row, and the embedded power button. I can’t say I’ve used the search button that much, except by way of testing it’s functionality, and I miss my dedicated “Home” and “End” keys (though the shortcuts CTRL-Alt-Up and CTRL-Alt-Down respectively, are easy enough to get to after they’re committed to muscle memory).

I love the matte surface display. I’m used to the glossy display of my Alienware Aurora m9700, and I have to say I don’t miss the reflections. At 1280×800, it’s as wide as I need, and provides more vertical space than a lot of smaller laptops today, which stop at 766. That’s just not enough room for me. It’s no 1920×1200, but for a small netbook style laptop, it’s plenty.

The battery life is advertised at about 6 hours with maximum brightness, and 8 hours at minimum. I’ve not pushed it to the limits, but I’ve spent most of my Chromebook time on battery vs. AC power, and have been satisfied. There’s a nice little display in the top right of the UI that gives you battery charge percentage and time remaining. I have no reason to suspect it’s inaccurate.

Pocket Detail External I would be remiss if I didn’t mention the quality of speakers. I messed around with Grooveshark a couple nights ago and, while they’d never suffice for long term use, the speakers aren’t horrible for laptop speakers. I haven’t tested my headphones with the Cr-48 yet, but I reckon they’ll work fairly well.

At first, as a whole, the Cr-48 felt (though I hate to use the word) cheap, and more like a toy than a computer. The more I use it, though, the more solid it feels. I understand it’s a little heavier than most netbooks, but as I have zero experience with other netbooks, I can offer no thoughts on the matter.

Not so Much

I’ve never been a fan of touch pads, and as such, don’t have much experience with them. Though I do like the two finger scrolling feature, I find the use of the touch pad, as a whole, less than ideal. I’ve had a hard time getting the two-finger-tap to bring up the context menu, and my cursor tends to jump around a lot. I’m not sure if that’s me just fat-palming it, or some sort of software glitch. However, they win points with the simple and easy differentiation between the touch pad and the surrounding chassis. There’s enough of a difference so that you know where the boundaries are, without it being a distraction otherwise.

As a whole, it’s a little underpowered for the more intensive flash driven web sites. For instance, Bejeweled on Facebook (yes, I’m a fan) is barely playable due to the lag. Other than that, for basic web use, the hardware is more than sufficient.

The final point regarding hardware, and this is very much specific to the Cr-48, is the size of the bezel around the display. I would love to see a laptop with a screen that fills up the lid nearly completely.

On the OS

Chrome OS basically amounts to an RDP session with the Chrome browser set with `alternate shell:s` There’s more to it than that, obviously, but that’s essentially what it is. Anything you can do from within the Chrome browser, you can do in Chrome OS. Most anything you can’t do outside the Chrome browser, you can’t do in Chrome OS. It’s been said that if you’ve worked with Chrome, then you’ve worked with Chrome OS. That’s mostly true.

Like
I like the general simplicity. Being little more than a browser, there’s not much to do except log in (Google accounts only for now) and start working. You can add different apps (or rather, bookmarks) via the a Web Store, and you can adjust a few things under the hood much the same way you do with the Chrome browser through the wrench icon to the right of the Omnibox, but for the most part you log in and get to work (or play, if that’s your preference). The downside is that there’s not much for the power user like myself to configure.

Along with the general simplicity is the fact that it takes about 14 seconds to go from a completely cold state to being out and about, doing whatever it is you want to be doing. The SSD, combined with a distinct lack of extraneous features makes for an extremely fast boot time.

I like the multiple window support (Shortcut: CTRL-N). It desktop parlance, it’s basically launching a new browser instance, which is easily accessible via the “Next Window” button above the “6″ key (SHIFT-Next Window chooses the previous window).

From a security standpoint, they’ve covered their bases fairly well as well. Like the browser, updates are done behind the scenes automatically without any user input. The trade off for never having to worry about out-of-date code is the chance that a faulty update will be released that crashes the OS, or corrupts data in some way. I’ve not had that happen, and haven’t heard of it, either. But it’s certainly possible.

Still talking security, the sandboxing feature keeps different processes isolated (on a per tab basis) from each other and the base linux-based OS, and encryption keeps the data on the SSD safe from potentially prying eyes.

The OS designers gave a nod to the CLI junkies among us with crosh>. The Chrome Shell launches in a new window that’s accessible via the “Next Window” button. It’s pretty basic, and sticks to the overall network-only philosophy by providing very little besides those basic diagnostics and an SSH client. It’s a start, and if Google isn’t lying about the OS constantly improving, we can expect good things there as well.

I’ve mentioned shortcuts. Those and quite a few more are available via the CTRL-ALT-/ shortcut. It brings up an interactive screen that displays all the shortcuts available. There are quite a few, which presents a learning curve, but not an unmanageable one.

Not so Much
The sensitivity of the touch pad sometimes causes the cursor to jump around on the screen, this could be my own lack of experience with such things, but given how often the unexpected jumps happen, I’d like to be able to adjust the sensitivity more. The plus side is that it forces me into a proper typing posture with my hands elevated well above the chassis and touch pad.

The lack of granularity and feedback in the Wi-Fi settings was troublesome at first. I had my wireless security set to WPA2, and found that the Chromebook simply would not connect. I had to drop back to WPA before it would recognize it. However, I spent too long in trial and error before I figured this out.

Tap-to-Click on the touch pad is disabled by default, and as a exceedingly rare user of touch pads, I was held up by the force it takes to actually click the touch pad without tap-to-click being enabled. I’m not sure why tap-to-click was disabled, but I’m sure there was a reason. Plugging in a USB mouse, however, was simple and instantaneous.

Which brings me to another wish… When I have foregone the use of the touch pad and have a mouse plugged in, there is no (obvious) way to adjust the speed or acceleration settings on the mouse. The mouse presents an extremely fast cursor that is somewhat difficult to control. It’s so fast, in fact, that I’ve found myself preferring the touch pad over the mouse, which is something I’ve never done before in all my years working with laptops.

Generally speaking, the downside of simplicity is lack of granularity. As a power user, I’d like to be able to adjust things more to my liking.

  • The ability to sort the Apps section on the New Tab default page. As of this release isn’t available.
  • The ability to control default click behavior of icons on New Tab default screen. It defaults to the current tab. In lieu of a start menu, or finder menu, or dock, I would like an icon to open by default in a new tab, or even a new window should I so choose. You can force it by shift-clicking an icon, but that’s not the default behavior.
  • The ability to move docked panel items (Scratchpad, chat windows, music players, etc.) to the sides or top, rather than being locked to the bottom.
  • The ability to attach more than one file at a time to an e’mail.

Though I really do like crosh> the lack of support for public/private key based authentication for the ssh client is, to my mind, a step backwards in security in favor of convenience. I’ve disabled password authentication on my own server (where I ssh to the most, by far), and have been forced to consider the issue of allowing password auth, if I want to connect via my Chromebook. From within my own network, I don’t see a problem with it, but if I’m connected to another, public network (either a coffee shop somewhere, or via the Verizon 3G plan), it could be an issue. My hope is that they allow key based authentication at some point.

Not at All
The single most frustrating thing (if I may be so bold as to allow myself to be frustrated with a free laptop) was the “easy” and “seamless” automatic setup of the Verizon 3G connection plan. It failed, forcing a call to Verizon Customer Service. As we all know, calls to customer service nearly always try one’s patience.

I called Verizon at the customer service number listed on the failed activation screen, (800) 786-8419. The first person didn’t know what I was talking about, and wanted to set something up through my already existing Verizon Account (or rather, my wife’s account, which meant she had to be there). So I called her upstairs, and she spent some time on the phone setting something up. I don’t know what it was, and I’m not convinced the CSR did either. Regardless, it didn’t work, so that person sent me over to an “Accounts” rep, who had trouble finding any information about the advertised connection plans.

I should mention that yours truly made the process a little more time consuming by misreading the MEID number, and inserting an extra “0″ (zero) after the “A”. Totally my bad, and I now have an eye appointment set up for January.

But back to the available advertised connection plans associated with the Googlebook… Seriously, it’s all listed right there on Google’s own Chrome OS site, complete with a data usage calculator to help you choose the right plan for you. That this wasn’t common knowledge to basic Verizon technical support speaks to a distinct lack of coordination between Verizon upper management and the phone jockeys (or, in other words, business-as-usual for any corporation – admittedly, I’m a tad jaded on that issue). It’s likely that as more people sign up, the process will become smoother. Apparently, I was one of the first.

Accounts was unable to complete the order, having determined that it amounted to a pre-paid plan, with Google being the purchaser. To Verizon’s credit, each person I was transferred to was friendlier than the last, and none of them were unfriendly. Accounts transferred me to the pre-paid mobile broadband accounts division to complete the transaction.

She was able to get me set up, but in keeping with the not really simple and certainly not seamless procedure, I had to go out to crosh> and manually activate the modem with the `modem status` and `modem activate` commands (the later of which is fairly long, which is made even longer by having someone explain it to you slowly over the phone. It went something like this:

crosh> modem status
This provides , the dynamic modem path. Then…
crosh> modem activate-manual /org/chromium/ModemManager/Gobi/[number] mdn [device phone #] min [the Verizon phone # to connect to] spc 000000 system_id [System ID #]

In typical *nix fashion (ChromeOS is linux based), there was no feedback, so the command was successful. We chatted for a bit on the phone (at which point I learned that I was one of the first), and after a while, all was well, and I was connected.

A bit less easy and seamless than advertised, but I have confidence that each call like mine will make subsequent calls easier. Wait. No I don’t. Customer service calls will never be easy and seamless.

Generally Speaking

Overall, I’m very happy with my Chromebook. The nits I have, though they may seem legion, are minor. Given Google’s track record with constant improvements, I do have confidence that my wishlist, and many other things besides, will be answered in time. Until then, I’ll keep submitting feedback and enjoying my Chromebook. My wife, however, has taken to referring to it as “my other woman.”

These are just my initial impressions… I’ll have more thoughts later, I’m sure.

Getting my Geek On

Previously, I mentioned that I had a good time at MicroCenter. Though it come as a major surprise to you, it was vastly different from my experience at Best Buy. I don’t fault my White Shirt sales rep for her lack of knowledge and experience. Though she did literally shudder at the thought that I would let loose the hounds of hell on my home computer by using *gasp* freeware (and I use the word “literally” in it’s true sense – she literally physically shuddered), I don’t fault her that. By virtue of her virginal White Shirt, she was new to the game, and remains a corporate shill, bless her heart.

At MicroCenter, however, my experience was vastly different. I’m no n00b to the computer hobbyist game, but let’s just say it has been a long time since I took Arctic Silver to my CPU before clamping that fan down, and leave it at that. Knowing that I have a ton of catching up to do, I struck up a conversation with Patrick, and opened my mind and just let the conversation and questions flow. He seemed knowledgeable enough, and even if he was wrong on any number of points, he was providing plenty of topics to research, and knibblets of knowledge to verify.

Our conversation started with me asking about storage solutions at home (more on that below). We spoke of NAS and SAN and RAID. We talked SATA, eSATA, SSD response times and P/E cycles and life expectancy, HDD cache size, transfer rates and platter speeds. From there, we branched out into completely unrelated topics. We touched on video cards and their chipsets. We reviewed motherboards and RAM and chassis (chassi?) and sound cards. We discussed low, medium and high end differences, and manufacturer reasoning behind this feature and that. We talked CPUs, hard drives, sound cards and RAM. He spoke with pride of liquid cooling, daisy chaining and hot swapping. I spoke with pride of being completely self-taught.

As our conversation progressed, I realized that one of my suspicions was being confirmed. In spite of all the changes, one thing remains unchanged: the price one pays. Running the most demanding apps and latest and greatest games at the highest settings with no lag, be it network or FPS, will cost roughly the same now as it did years ago. Sure, certain things are cheaper, but at the end of the day, a top of the line rig will still set a body back a few thousand.

As that realization set in (tempering my geek joy but a little), I resolved myself to research for the foreseeable future, and excused myself, feeling the better for our conversation. Turns out I enjoyed myself so much that I didn’t even realize that Jami was nowhere to be found. My best guess is that she high tailed it the heck out of there at the first mention of a techy term she didn’t understand, oh, say… somewhere around “NAS”. I found her in the Apple room, content playing Marble Mixer on an iPad while I got my geek full on. She beat me fair and square twice at that fangle contraption, and from there, we went on to Best Buy where the rest is history.

As for what started my geeky foray into current gaming rig technology, I want a simple RAID1|5 capable set up that allows us a central storage location for family files, be they music, video, images, or financial documents. I’d like at least 3 separate drives, and would be pretty pleased if they were hot-swappable, but that’s really not a deal breaker. I’d rather not mess with FTP, or silly web based transfer solutions, preferring something simple and seamless like SMB/CIFS that allows Windows, Mac and Unix to interoperate. I’m beginning to realize this means I may have to custom build my own file server, rather than just dropping a pre-fab setup into my network right OOTB. Recent experiences with printing problems and file corruption have left me a little leery of a FreeBSD-based solution, but I’m game to keep barking up that or similar trees (OpenBSD, Ubuntu, etc) if for no other reason than cost. I recognize that those issues have arisen on relatively ancient hardware using on-board RAID technology that was new at the time, and thus prone to less than stellar operation. A system built on a solid and stable motherboard without all the fancy bells and whistles included in my gaming rig-turned web/dns/smtp/file server might be just the ticket.

New Laptop in the House

IMG_0334 We’ve finally made the foray into the land of Windows 7. The old XP laptop that my wife was using started showing signs of age a couple weeks ago when the NIC decided it wasn’t going to work anymore. Right in the middle of a browsing session, it just quit. I honestly didn’t do much in the way of troubleshooting, other than disabling/enabling it, and uninstalling/reinstalling the drivers. I just declared it dead. We’ve been talking about getting her a new laptop for a few months now, so this was as good a reason as any.

We hit a couple stores, but settled on a Dell 17R from running Windows Home Pro, with the i5-460M, 8GB system memory, and a 5,400rpm 500GB drive from Best Buy. We had an interesting time obtaining it, which I’ll relate here for your edification.

  1. Sunday, Nov. 14th, 2010, the price was $749.99 in the store, and online.
  2. Sunday, Nov. 21st, 2010, the price was $799.99 in the store, and $749.99 online.
  3. We called, and they confirmed that they would honor the online price, thus saving the ~$50 that another, less observant or stand-upish individual would have spent.
  4. Arriving at the store, the sales associate (White Shirt) told us that the price was, in fact, $859.99 due to it being the last model available, and being preloaded with additional “optimization”, and the inclusion of restore media.
    • I wasn’t aware that setting the native resolution was an “optimization” service, and that it dramatically increased the speed of the machine, real or apparent.
    • I didn’t realize that laptops no longer came with restore media.
  5. We refused the “offer” and asked the White Shirt to call around.
  6. Few stores had the model (which Jami was pretty set on at this point, having encountered resistance), and the one that the White Shirt called was the same price, and also “optimized” and with media.
  7. We decided to wait until over Thanksgiving to check around again, and started to leave.
  8. The greeter at the doors held us, however, saying that a manager wanted to talk with us.
  9. A young man in a Blue Shirt came by and explained that they could, in fact, sell us the laptop for the advertised price. They wouldn’t charge us for work we did not request, and had no choice but to accept if we wanted this particular laptop. The original sales rep was unaware of how this particular sale could be finalized; she’s a new employee, as denoted by the White Shirt.
  10. We bought the laptop and left happy.

Jami postulated that it was a sales technique designed to get a few extra dollars out of unsuspecting or willing customers. By saying it was “optimized” and came with extras, customers would be more willing to part with some extra dollars. I’m inclined to agree, but we weren’t those customers. When faced with the loss of a sale, they opted to acquiesce to the formerly agreed upon lower price.

The lesson here is stick to your guns. If a price is advertised, that’s the price you pay. If they refuse, take your business elsewhere. You’ll either get the price you wanted there as they flail about trying to keep your business, or you’ll get a better deal somewhere else.

IMG_0234 We got the laptop home, and I dove in to get it setup up for Jami, and attached to our home network. I played around with Windows 7 for the (admittedly) first time last night. I was impressed by the OS itself. I haven’t played with it enough to offer more than a “seems pretty slick”, but it… well… it seems pretty slick. I’ll play around more though, I’m sure. I had some trouble getting it to see the Samba shares on my FreeBSD server. That’s my task tonight. I’m sure it’ll be a stumper. As a side note, I was immediately impressed by the fact that the hard drive (500GB 5,400RPM) was split into system (c:\) and a data (d:\) partitions. I’d not seen that before on an OEM machine. Perhaps that was one of the “optimizations”.

I’m a little discouraged by my own Alienware Aurora m9700 laptop now. I was looking to install Win 7 on it, preferably the 64bit version, b/c 64 is always inarguably better than 32, right? Well… the hardware maxes out at 2GB RAM. What I’ve found online says that 2GB is fine for the 32bit version, but at least 3GB is recommended for the 64bit version. Still, I might go with the lowly 32bit version anyway, given that it looks compatible with the specs, and might be more compatible with the various hardware bits and pieces. I’ve not done the research, but it’s possible that 64bit drivers don’t exist for all the components.

As for the original laptop with a dead wireless NIC, I’ll recondition it as a print server until I can figure out why my CUPS/Samba setup is so flaky.

Next, a positive note about my experience at MicroCenter, and NAS

Jack of all Ports, Master of None

Following my most recent foray into the world of Logo Rhythms with an upgrade from FreeBSD 5.3 to current, I decided to really clamp down on a few things and settle on some processes that made maintenance staying current easy. Ish. Of the many things I wanted to get a handle on (again), DNS, SMTP, printing, etc., I knew that keeping current was critical. It can also be a pain in the rear. It was that pain that caused me to lapse many versions behind to begin with.

So, the first place I started was with the ports collection. I was (and still am, by the way) determined to maintain a firm handle on this. I won’t go into what it, the ports collection, is in too much detail here. If you know, and care what some inconsequential geek does on his currently solitary home FreeBSD server, you’ll continue reading. If one and/or the other of those conditions does not apply, then it’s been fun! Talk with you later!

If you’re still here, then read on! Continue reading

Flic Laser Barcode Scanner

The ScannerI picked up the Flic Laser Barcode Scanner a while back with some music/book/dvd collection software, and though I let the license on the software expire without doing much with it, I still have the scanner. It didn’t just disappear when the software license expired… who’d have thunk it?

For the last few days I’ve been thinking about cataloging my books, but aside from imagining myself painstakingly writing down the ISBN or bar code numbers and manually entering them into a spreadsheet, I haven’t really given much thought to it. Browsing around tonight on GoodReads.com, however, the thought occurred to me that it might be possible to use that site as a way to generate a nice export of all my books. But spending all that time manually getting all those books into that site just so I can export them easily defeats the purpose. In fact, it slaughters the purpose. There’s a lot of blood. It’s not pretty.

The Connecting Cords - I don't have a serial connection on my laptop, I have to use a Serial/USB adapter, but that's no problem with the right drivers.So, noticing an ad for a barcode scanner, I remembered the one I had, and got to thinking… why not use it?! They’re not cheap, after all, and I already own one!

But without that expired software, how can I import what it scans into my computer?

Enter Scanner Wedge.

Scanner Wedge: ConnectionsMuch to my surprised pleasure, it found my scanner right away! I just plugged it in, clicked “Find Scanners” and after a few seconds, there it was!

Scanner Wedge: FormatI chose “<ENTER>”, b/c that makes sense to me for what I want to do with it. But there are other options to choose from.

Scanner Wedge: FormatIt shows up like this in the “Trace” tab. Just like that. Minimizing this window to the system tray allows scanned barcodes to show up directly into whatever application has the focus. It’s actually rather cool. Incidentally, the bar codes here are for The Wine Log, The Vampire Encyclopedia, and Everyone Poops.

I’m sure there are other applications out there to do it, but this is the one I found, and it worked, so why bother looking further.

So, the last remaining piece is to convert the scanned bar codes to book information. You know, actual useful information like title, author, publisher, publish date, ISBN. Stuff like that. I think it’ll probably involve a home grown perl script, rather than GoodReads.com, however. You know, because I can. That’s for another post, however. For now, being able to use the scanner independently of the original software it came with is more than enough for me. It does me fine.