2011, Day 1

I'm not quite sure when it happened, but several years ago, I fell in love with New Year's Day.  There's something about the artificial marker of a new era that excites me.  The slate is wiped clean.  The previous year is quantified, cataloged, stored in a neat package in my brain.  There is closure.

This gives me a serious sense of contentment.

The thing that really does it for me, though, is the goal-setting.  I'm a sucker for a carrot.  I can't resist or subdue the urge to move toward something better than who I am at this moment.  I revel in the process of evaluating life's areas of greatest importance, analyzing my successes and failures over the past year, envisioning what perfection looks like in those areas, and setting smart goals that move me towards those visions of perfection.  I was never a very grounded individual growing up, and this goal-setting is my way of finding the horizon, identifying which way is 'up', making sure that I don't lose my way in the coming year.

My five goal areas this year are faith, family, fitness, education, and community - probably in that order.  Generally, I want to become more founded in my faith, a better father and husband to my wife and kids, healthier and stronger, smarter, and more concerned about those around me.  What follows is a list of general goals that will be my horizon for the coming year.

  • Read the Bible, cover to cover, following this plan.
  • (Re)-Memorize the books of Hebrews and James, by chapter and verse.
  • Get involved in a discipleship or mentorship program.
  • Continue to become involved at Life Center, on a technical or non-technical level.
  • Two weekend getaways with Erin.
  • Two camping trips with the family (and maybe the Andersons and Kings?).
  • Read a series of books to Ben and Gemma (A. A. Milne?  Rudyard Kipling?  John White?  C. S. Lewis?)
  • Teach Ben and Gemma about Genesis, and the God who created everything.
  • Teach Ben arithmetic.
  • At least 6 dates with Ben at Frank's Diner.
  • Monthly dates with Erin.
  • Run one 6 minute mile.
  • Run a half marathon.
  • Perform 100 push-ups in a row.
  • Perform 15 pull-ups in a row.
  • Weigh in at 190 pounds.
  • Learn and use 100 new words.
  • Read 6 novels, "for fun" (you are welcome, Erin).
  • Learn a programming language, probably TCL (for use in routers and such).
  • Learn more physics and calculus than I knew in high school.
  • Learn French.
  • Socialize with twenty-or-thirty-something Spokane folks.
  • Help the community in some way once a quarter (soup kitchen, homeless shelter, etc.).
I still need to flesh some of this out, I'll probably need to create smart goals for each item here, but it's a start.

This is going to be the best year of my life yet!


Making a Multi-Distro Linux Boot Disk

While getting ready to throw the latest ArchBang iso onto a jump drive and give it a spin, I came across this article by psychoticspoon about the installing the Gujin bootloader on a jump drive. The wife and kids are still asleep, I don't have to work today, snow is falling outside, and I have the central air on - it's the perfect environment for a little geeking out! Spoon's article was a little outdated, so I'm updating it for the current version of Gujin (2.8.2), which I grabbed from SourceForge here.

First things first, grab a USB drive that you can wipe clean. I'm using a Patriot Xporter XT 8Gb stick (thanks, Dad!), which seems to boot systems a lot faster than some of the other jump drives that I've tried.

Locate your drive in /dev (mine is at /dev/sdb), make sure that you are really okay with losing all of the data currently stored on it, and proceed with fdisk. Spoon's recommendations work just fine, minus the need to format your primary partition. Create a 16 Mb bootable primary partition, and then fill the rest of the disk with an extended partition. Create a logical partition for each of the distros that you want to be able to boot, and save the partition table to disk. I just created 3 705 Mb partitions, because I'm feeling too lazy to be exact. They just need to be big enough to hold your live iso images - if you are booting small distros, you could be much more thrifty.

Download, unpack, and expand Gujin 2.8.2, and run gujin against your fresh primary partition with the '--full' flag. My command was '.install/gujin /dev/sdb1 --full'. Answer 'yes' to format the boot partition as FAT16.

All that's left is to drop your live images onto the drive with cat. I ran 'cat archbang-2010.10-i686.iso > /dev/sdb5' to fill my first logical partition. Not quite sure why, but I had to run this using 'su', as 'sudo' didn't seem to do the trick.

And that's it! You now have a bootable USB drive, and can load it up with as many live iso images as you want. If you have Qemu, you can test the drive out without a reboot by running 'qemu -usb /dev/sdb' or something of the like.

Happy Thanksgiving!


DDNS without DDNS: The PowerShell Edition

I've been meaning to do this for a while. My Wife needs tech support at home while I am at work every once in a while, but it is often something that I need to see to help her with. However, I don't afford the convenience of a static IP address from my ISP, so I am usually unable to connect to her computer remotely. Hence, the need to know what my public address is.

Now I know that anyone lured into this blog post by the title will be asking, "Colin, why not use a DDNS provider?", and the answer would be, "Because I don't want to!". It's a lot easier to justify spent time on technology to your wife than it is to justify spent money. ;)

So, the code:

#$F = File
#$U = Username
#$P = Password
#$B = Browser
#$C = Credentials
#$E = Email Address
#$I = IP Address
#$S = SMTP Server

function Store-myPass
$global:U = $args[0]
$global:F = $args[1]
$Credential = Get-Credential $U
$credential.Password | ConvertFrom-SecureString | Set-Content $F

function Get-myCred
$U = $args[0]
$F = $args[1]
$P = Get-Content $F | ConvertTo-SecureString
$C = New-Object System.Management.Automation.PsCredential($U,$P)

function Send-IP
$U = $args[0]
$F = $args[1]
$C = get-myCred $U $F
$url = "http://www.whatismyip.com/automation/n09230945.asp"
$browser = New-Object Net.Webclient
$S = "smtp.gmail.com"
$E = $U + "@gmail.com"
$I = $browser.DownloadString($url)
Send-MailMessage -to $E -from $E -Subject $I -Credential $C -SmtpServer $S -UseSsl

$Uv1 = $args[0]
$Setup = $args[1]

if ($args[0] -eq $null){
Write-Host ""
Write-Host ""
Write-Host -ForegroundColor Yellow "Welcome to Send-IP2Gmail Usage Instructions!"
Write-Host ""
Write-Host ""
Write-Host -ForegroundColor Yellow "Running this cmdlet without specifying a username will bring you to this message."
Write-Host -ForegroundColor Yellow 'For initial configuration, or to change your password, use the "setup" command:'
Write-Host ""
Write-Host -ForegroundColor Red ".\Send-IP2Gmail davidcolinsmith setup"
Write-Host ""
Write-Host ""
Write-Host -ForegroundColor Yellow "After this command is run, your password is securely hashed in a file in the "
Write-Host -ForegroundColor Yellow 'C:\creds\ folder. Subsequent use of this command without the "setup"'
Write-Host -ForegroundColor Yellow "feature can be schedule or scripted using this syntax:"
Write-Host ""
Write-Host -ForegroundColor Red ".\Send-IP2Gmail davidcolinsmith"
Write-Host ""

if ($Setup -eq "setup")
$U = $Uv1
$Result = test-path -path "c:\creds"
if (!(test-path -path "c:\creds"))
new-item c:\creds -type directory
$credspath = "c:\creds\" + $U + ".txt"
if (!(test-path -path $credspath))
new-item $credspath -type file
Write-Host "Send your Public DHCP-assigned IP address to your gMail account"
[environment]::SetEnvironmentVariable("Send-IP-Username", $U, "User")
$global:F = "c:\creds\" + $U + ".txt"
[environment]::SetEnvironmentVariable("Send-IP-CredPath", $F, "User")
Store-myPass $U $F
Write-Host "Send your Public DHCP-assigned IP address to your gMail account"
[environment]::SetEnvironmentVariable("Send-IP-Username", $U, "User")
$global:F = "c:\creds\" + $U + ".txt"
[environment]::SetEnvironmentVariable("Send-IP-CredPath", $F, "User")
Store-myPass $U $F
else {
$U = get-childitem env:send-ip-username
$F = get-childitem env:Send-IP-CredPath
$U = $U.value
$F = $F.value
Send-IP $U $F

Comments, questions, concerns, or suggestions are welcome!


Week 3, Day 1

So it's been a bit of a rough last couple of days for me. I had a sick family and a large amount of homework due over the weekend, in addition to studying for the Cisco BCSI test that I took yesterday. Instead of waking up an hour early to exercise, I've slept in the last two days. I am committing to exercise tonight after the kids go to bed. I'll scale today's CrossFit workout, as follows:

4 laps around the block
20 pound dumbell thruster, 21 reps
21 Pull-ups
2 laps around the block
20 pound dumbell thruster, 15 reps
15 Pull-ups
1 lap around the block
20 pound dumbell thruster, 9 reps
9 Pull-ups

I only have 40 pounds of weights right now, hence the 20 pound thrusters. My gym membership should be coming in any day now, and I am looking forward to seeing how I can fit CrossFit exercises into a "normal" gym.


Week 2, Day 2

This morning's exercise went really well! I had planned to perform three sets last night, but realized that I was pretty beat after the first two. I was reading a couple of Crossfit Journal editions (May 2003 and June 2005), and I am convinced that it is just as important to not push myself too hard now as it will be later.

Today's exercises - 2 sets of:

100 jump-rope
20 push presses (each hand)
20 air squats

The jump-rope is getting better, I just need to do more of it! I got through 70 jumps before tripping my second round. Also, I had Erin check my form on the squats last night, and my first set today felt right. The second fell apart, though. Gotta get into shape!


Week 2, Day 1

It was nice to take a break this last weekend, and to spend some time enjoying nature with the family while camping at Alva Lake in Montana. We got back on Monday, and I slept in on Tuesday morning, as I did not get much sleep while camping. I was energized by the beauty of nature and the enjoyment of spending good health with family and friends, and I come back to work and home with a renewed desire to be strong for life.

Today's workout - 2 sets of:

20 bar dips
20 push-ups
10 pull-ups
20 air squats

There are a few exercises in there that I cannot get very high reps on. I really struggled through my second set of push-ups, where I can normally nail out 40-50 without much trouble. I think that I need to ease up on difficulty and focus on attaining higher-rep workouts. Also, I am planning on getting some running in there!

Found a great document of countless bodyweight exercises here (post #33). I am going to try some of these over the next weeks and months.


Day 4

This morning, I had a hard time getting motivated to go downstairs and kill it. I think that my lack of enough sleep last night contributed to my sluggishness, but I also think that my failure to plan today's workout before I went to bed last night was a bad idea. Fail to plan, plan to fail - I'll be more committed to intentionality from here on out. Anyway, here was the workout:

3 sets of:
90 yd. bear crawl
20 reduced-load pull-ups

The first set today was maybe a little easier than it should have been. Because I didn't plan the workout the night before, I was a little easier on myself than I could have been. Maybe I should have thrown in something to work the quads a little. However, after the third set I was just about ready to puke. Had I done a fourth set, I might have.

Tomorrow is a rest day, and we are leaving early to go camping in MT, but I'm still going to knock out 30 push-ups every stop that we make.