Envbox: Secure Key Storage

I wrote a few months ago about envbox, and I can say that it has proved useful to me many times over. One thing that felt unfinished was the way that envbox stores the key that it uses to encrypt all of the environment variables. It did move the problem from the shell/history to one of system security, which was acceptable. But there are better ways of storing credentials on most systems.
Read more →

Developing Clojure in Vim (2018 edition)

When I wrote about developing Clojure in Vim for the first time, I was still early in my journey. For years, I’d only been able to tinker with Clojure in my free time and I was never able to really use it for anything large. Well, now I’m 5 or so months into using it full time and I’m really enjoying the development experience. So I thought I’d update my previous post with what my Vim configuration looks like now.
Read more →

Obsessing over multiple projects

In my new job, I’ve switched each project being a unique combination of git repositories1 to all projects being in just a few repositories. For instance, my primary codebase consists of two repositories, one for the frontend and one for the backend. As time progresses, I work on multiple (mostly) independent projects in each repo, each one on its own branch. Each project requires a different constellation of files, sometimes organized in radically different ways in my Vim tabs.
Read more →

outputdiff: easily spot differences in command output

When I’m in front of a computer, I spend much of my time at the command line, logged into various systems, running commands. Now, there are two basic categories of commands: Commands that change - install a package, add a firewall rule, restart a service Commands that report - list installed packages, list firewall rules, list running services This post is about making the second category of commands more useful. Quite often, those commands have copious amounts of output.
Read more →

envbox: keeping secret environment variables secure

In my day to day work and evening and weekend side work, I do most almost all of my development working on remote systems. This has a number of advantages that are for another post, but this post is about one of the limitations. Most developers have a tool belt that they’re continually improving, and as I work on mine I come across commands - like hub that require1 putting a secret value into an environment variable, usually for authentication.
Read more →

My note-taking workflow

A few people have asked about my note-taking workflow and it’s been quite useful to me, so I thought I would describe what works for me. I’ve tried several of the popular note-taking tools out there and found them overbearing or over-engineered. I just wanted something simple, without lock-in or a crazy data format. So my notes are just a tree of files. Yup, just directories and files. It isn’t novel or revolutionary.
Read more →

My tmux configuration, refined

When I wrote about tmux for the first time, I was just getting into the idea of nesting sessions. I ran a local tmux session that wrapped remote tmux sessions for more than a year before I switched it up again. I added another level. Background # I originally started nesting tmux sessions so that I wouldn’t have to use tabs in Terminal to keep track of different remote tmux sessions.
Read more →

Talk Notes: February 2014

I was out of town two of the Fridays this month, so I was only able to get two talks in: Clojure core.async - Continuing in my fascination with Clojure, I picked this talk to explore the non-Java techniques for handling concurrency. I’m familiar with CSP from my Go experience, and it was interesting to hear Clojure’s take on the same foundation. Clojure also implements a macro that turns the spaghetti code that is callbacks into a sequential function that still operates asynchronously.
Read more →

Setting up Vim for Clojure

I’ve been experimenting with Clojure lately. A few of my coworkers had begun the discovery process as well, so I suggested that we have a weekly show-and-tell, because a little accountability and audience can turn wishes into action. Naturally, I looked around for plug-ins that would be of use in my editor of choice. Here’s what I have installed: vim-clojure-static - Syntax highlighting and indentation vim-fireplace - Slick repl integration and hot code reload rainbow_parentheses.
Read more →

Introducing Talk Notes

In the course of my work and my online reading and research, I often come across videos of talks that I want to watch. I rarely take the time to watch those videos, mostly because of the time commitment; I usually only have a few minutes to spare. Lately, I’ve done something to change that. I’m taking a little bit of time out of my Friday schedule each week to watch a talk that looks interesting.
Read more →

Using Docker to generate my Octopress blog

When I originally set up Octopress, I set it up on my Mac laptop using rvm, as recommended at the time. It worked very well for me until just a few minutes after my last post, when I decided to sync with the upstream changes. After merging in the changes, I tried to generate my blog again, just to make sure everything worked. Well, it didn’t, and things went downhill from there.
Read more →

git-annex tips

Last time I posted about git-annex, I introduced it and described the basics of my set up. Over the past year, I’ve added quite a bit of data to my main git-annex. It manages just over 100G of data for me across 9 repositories. Here’s a few bits of information that may be useful to others considering git-annex (or who are already knee deep in). Archive, not backup # The website for git-annex explicitly states that it is not a backup system.
Read more →

Remotecopy, two years later

It’s been over two years since I wrote remotecopy and I still use it every day. The most recently added feature is the -c option, which will remove the trailing newline from the copied data if it only contains one line. I found myself writing little scripts that would only output one line with the intent of using that output to build a command line on a different system, and the extra newline at the end often messed up the new command.
Read more →

A script to ease SCP use

Since I work on remote systems all the time, I use SCP repeatedly to transfer files around. One of the more cumbersome tasks is specifying the remote file or directory location. So I wrote a helper script to make it easier. It’s called scptarget, and it generates targets for SCP, either the source or the destination. For instance, if I want to copy a file down from a remote server, I run scptarget like this and copy the output:
Read more →

Seeing the Shuttle

Launch # A little over thirteen years ago, I embarked on a cross-country trip with one of my college buddies. I’ll elaborate more on the trip in another post, but the pertinent part of that story is that we happened to be in Florida in late May, 2000. We’d originally planned to see certain sights along the way, but by the time we reached the east coast we had grown quite good at adding extra stops to the itinerary.
Read more →

Managing backups with git-annex

My Situation # I have backups. Many backups. Too many backups. I use time machine to back up my macs, but that only covers the systems that I currently run. I have archives of older systems, some for nostalgic reasons, some for reference. I also have a decent set of digital artifacts (pictures, videos and documents) that I’d rather not lose. So I keep backups. Unfortunately, I’m not very organized.
Read more →

dfm graduates to its own repository and learns how to import files

I recently split dfm out into its own git repository. This should make it easier to add new features and grow the test suite without cluttering up the original dotfiles repository. I’ll sync dfm over at regular intervals, so anyone who wants to keep up to date by merging with master will be ok. I also just finished up a major new feature: dfm can now import files. So instead of:
Read more →

Extending svn, à la git

Subversion is a useful tool. It does most of what I need it to do, but sometimes there are missing features. Sometimes, it’s something that git does natively. Other times, it’s a repeated command sequence. It’s easy to write small scripts to do these new things, but they never feel like they fit in with the rest of the commands. I’ve always been fond of the way that git can be extended by simply creating a script with the right name; git-foo [args] becomes git foo [args].
Read more →

Host-specific bash configuration

Well, I was going to write about a nifty bit of bash to help with ssh-agent in tmux, but someone beat me to it, so I’ll just write up his idea instead. Every once in a while, it’s nice to have a bit of bash initialization that only runs on one system. You could just throw that at the end of the .bashrc for that system, but that’s not very persistent.
Read more →

Easy development with git_backup

I’ve been using git_backup to back up the websites I run for quite a while now. It works well and I only need to scan the daily cron emails to see if the backup went well or if there were any odd files changed the day before. One thing that I didn’t expect when I started using it was how it would enable developing those websites in a sandbox without any danger of affecting the production instances.
Read more →

Graphing presentation times with R/ggplot2

I’ve been kicking around this bit of R code for the last couple of months, and so I thought I would share it. First off, a little background. At work, we have a noon meeting every Tuesday where each team in the engineering department gets up in front of the rest of us and gives a little update on their progress from the last week. Well, over time this meeting grew in length, so a couple of months ago the suggestion was made to limit the length of the meeting to five minutes, which would give each team about 45 seconds to speak.
Read more →

Meeting Michael Connelly and Robert Crais

Tonight, I had the privilege of seeing one of my favorite authors, Michael Connelly, at a session where he and Robert Crais discussed the effect that Raymond Chandler had on their careers and on the crime fiction genre. It was a part of Santa Monica’s Citywide Reads 2012 program celebrating Chandler’s work. My sister, who introduced me to Michael Connelly in the first place, found out about it on his facebook fan page and came all the way out here to go with me.
Read more →

git-walklog

Most of the time, when looking at history in a git repository, I am most interested in changes at a higher level than an individual commit. From time to time, however, I really want to look at each commit on its own. So, I created git-walklog. For each commit in the range specified, it: Shows the standard log format: author, date, and commit message. Then it waits for input. Hitting enter then runs git difftool on just that commit, showing you any differences in your configured difftool 1.
Read more →

Git subtree tracking made easy

Last year, when I made my list of pros and cons comparing git subtrees with submodules, one of the downsides listed for subtrees was that it’s hard to figure out where the code came from originally. Well, it seems that the internet hasn’t been sitting on its hands. While the main repository remained stable, a couple forks took it upon themselves to teach git-subtree to keep a record of what it merges in a .
Read more →

dfm tip: untracked binaries

The problem # From time to time, I have scripts and binaries that I only really need on one system. Since the base dotfiles repo includes a bin directory (for dfm itself), if I just drop files in there, git continually shows me that they are untracked. For instance, if I have a script called only_on_my_mac, then running dfm status shows: # On branch personal # Untracked files: # (use "git add <file>.
Read more →

My tmux configuration

Update: I refined my configuration. See it here. For the longest time, I was a screen user. Then, a little while ago, I discovered tmux, the next generation terminal multiplexer. Not only is it easier to search for on google, it has a rich and consistent configuration language. I’ve figured out a rather unique tmux configuration and I wanted to share it. Background # Originally, I just used tmux on remote servers to control several windows.
Read more →

remotecopy - copy from remote terminals into your local clipboard

Problem # I copy and paste all the time. Most of the time, I copy short pieces of information that are too long to type (I’m lazy) but too short to setup anything more complex (wget, scp, etc.). For a while, this was fine as most of my copy targets were either local to my system or in a terminal window on a remote server. However, as I increased my use of splits in tmux and windows in vim, highlighting remote text with my mouse became horribly cumbersome.
Read more →

Octopress migration details

As is customary for those who’ve converted from WordPress to Octopress, here’s a quick post about my experience converting this blog. Getting the blog up and running was a cinch, especially with a good example to examine when I had questions. Converting old entries # To convert my WordPress entries, I turned to exitwp. It worked pretty well, but I ran into two issues. The first was that the YAML blob at the top of the converted posts wasn’t formatted correctly.
Read more →

Git submodules vs. subtrees for vim plugins, part 2

When I talked about submodules vs. subtrees before, one of the things I listed as a benefit for subtrees was the speed of the initial clone. I’d written a few scripts to help me benchmark the two, and with a little extra time that I have this weekend, I thought I’d share the data. I generated 2, 4, 6, 8, and 10 plugin repositories for both submodules and subtrees and cloned each one ten times over both a local and a remote connection.
Read more →

jQuery Conference: Boston

A couple weeks ago, I had the privilege of crossing the country to attend the jQuery conference in Boston. It was a unique opportunity for me. While we use jQuery extensively at work, I haven’t done much with it lately. However, since we have a few projects coming up that will be web focused, so it was a timely occurrence. I went with my good friend and coworker David (I’d link to his blog, but he doesn’t have one yet, cough) and another coworker, Erin, who had been to Boston before.
Read more →

dfm updates: uninstall and updatemergeandinstall

In my dfm talk a couple weeks ago, I listed out some low hanging fruit; just a few things that I thought would be easy to add to the system. Well, this past weekend, I went to the jQuery conference in Boston. It was a great conference in its own right, and I hope to post on it this week, but for now I want to talk about the improvements I made to dfm while on the plane.
Read more →

dfm presentation at LA.pm

A couple days ago, I did a presentation on my dotfiles manager (dfm) at the local Perl Mongers meeting. It was a phenomenally rewarding experience. The Perl community has always been fun and engaging and this meeting was no different. Here’s the source for the slides and a PDF rendering for ease of perusing. It’s a good overview of current usage as well as a laundry list of future features.
Read more →

Scalatra on Dotcloud

I couldn’t easily find information on this, so here’s a summary for those that go after me. A working example is in the sbt-scalatra-on-dotcloud branch of my fork of my friend’s sbt-scalatra-example project. If it gets merged in, I’ll update this post. The sbt-scalatra-example project combines two great technologies. The first is Scalatra, a super light-weight web framework for Scala that’s modeled after Ruby’s Sinatra. The second is the simple-build-tool (sbt), a tool for building Scala applications that’s more like rake (config file written in real programming language) than make or ant/maven (config file written in an abstract form).
Read more →

YAPC::NA 2011

I’m about to finish up my time here in beautiful North Carolina. The rental car is returned and I’m waiting for my plane to arrive and take me back to the west coast. It’s been a week chock full of great information. It’s a good thing that the conference was only three days long though, my brain is tired. It’s going to take a while to process all the new data I have, but here are three highlights:
Read more →

Quite possibly the most useful vim shortcut I have

I use these every single day: noremap <leader>ew :e <C-R>=expand("%:p:h") . "/" <CR> noremap <leader>es :sp <C-R>=expand("%:p:h") . "/" <CR> noremap <leader>ev :vsp <C-R>=expand("%:p:h") . "/" <CR> noremap <leader>et :tabe <C-R>=expand("%:p:h") . "/" <CR> These make it much easier to open files next to the file in the current buffer. For instance, if I run the command “vi /etc/puppet/manifests/modules/foo/bar.pp” and I need to edit a file in the same directory as bar.
Read more →

Git submodules vs. subtrees for vim plugins

After a few months of managing my dotfiles with git, I felt the need to organize my vim plugins a little better. I chose to use pathogen (created by Tim Pope), which allows me to keep each plugin in its own subdirectory. It fits well with using git to manage dotfiles because git has two ways of tracking content from other repositories. The first is submodules, which keep a remote URL and commit SHA1 so that the other content can be pulled in after cloning.
Read more →

Sick

I’m sick today. Well, that’s a bit of a misnomer. You see, I don’t get “sick.” I get miserable. Being sick for most people is being laid out in bed with a head full of snot, hacking and coughing and blowing through two boxes of kleenex. Not me. I get miserable. What this usually means is that my nose needs to be emptied on an hourly basis and I have less of an appetite and I usually get tired faster.
Read more →

dfm - a utility to manage dotfiles

I have quite a few dotfiles. I have so many that keeping them in sync is impossible with conventional methods. So, I turned to my old friend: version control. For a while, I kept them in subversion at work. This worked well as that was where I spent most of my time. Recently, however, I’ve wanted those same dotfiles to be available at home and other non-work areas. So, I investigated moving them over to a git repository.
Read more →

Old todo list

In trying to finish transitioning from my old backup drive to my new backup mini thumper, I ran across a file with this content: -take car in to get checked -order lion king tickets -clean room +do laundry +organize honeymoon continue working on g4g saap psd write more for guestlist application call mom It’s an old todo list. The modification date on the file is 8/10/02. Yup, exactly 8 years before my daughter was born.
Read more →

Really Groking Git

I’ve been using git for a while now, and I’m just getting to the point where I can think in it. It’s the same as learning a new spoken language. I took three years of Spanish in high school, so I knew most of the rules and could translate back and forth to English, but I never really learned to think in Spanish (as opposed to thinking in English and then quickly translating).
Read more →

The world’s drinkable water

I’m a big fan of data visualization. Something about taking huge swaths of numbers and reducing them down to a set of conclusions or messages is very intriguing. For a while, I’ve been consuming blogs and articles related to data visualization, so my head is full of theories with not much practice. So here is my feeble first foray into the dataviz space. The data comes from a post on flowingdata.
Read more →

Mounting USB ext3 partitions on OpenSolaris

[Update] It looks like this only really applies to USB flash drives. When I mounted my actual backup drive, it showed up in prtpart. This post was written using the root drive on my old backup server, which is a SanDisk Cruzer flash drive. Now that I finally got my mini thumper up and online, it’s time pull everything from my previous backup drive. The problem is that it’s a USB drive with an ext3 partition on it.
Read more →

My mini thumper is online!

After basically copying my friend’s exact specifications, I now have a little server at home with 1.5T of mirrored disk space. By and large it was a straightforward process, with the following interesting tidbits. Most of the assembly went smoothly. You do have to pull the motherboard out to get the CF drive into its slot. In order to maneuver it out, you have to unclip the SATA cables and unscrew the VGA connector.
Read more →

git_backup.pl - a simple script to backup with git

For a while now, I’ve been backing up the few WordPress blogs that I run for various people with a very simple script that followed this algorithm: Copy files to a temporary directory. Dump the MySQL data into a file in that directory. Tarball it up. Scp that file to another server that I run. At the time, I did this because it was the simplest thing that could possibly work.
Read more →

Fixing R.app’s tendency to forget history

Being the data and visualization nerd that I am, I’ve been delving into R on occasion. For this purpose, I am using R.app on my Mac. To start it up for a certain working directory (to keep different projects separate), I run “open -a R <working dir>". This worked great until I noticed that my history wasn’t getting saved to the .Rhistory file in each directory. When I use the command line R executable it does, but not in the R.
Read more →

New SLR Stage 1: Blurry Backgrounds

In an attempt to pursue a hobby that does not involve a heap of monitor staring, I decided to get more serious about photography.  I’ve always enjoyed taking pictures, but I wanted to get deeper into the process.  So, I saved up some money and purchased a used Canon 30D from a friend back in March.  In the months that followed, I noticed myself passing through several stages as I got used to photography as a hobby rather than just image capture.  In retrospect, I thought they were rather funny.  I’ll share them over the next few blog posts.

Read more →

A Plane Birthday

Today was a great day. Today Sara and I celebrated my birthday. She planned the whole thing out, so all I had to do was go along for the ride. After sleeping in till 10:30 (due to a late night up in Hollywood catching District 9 with some old friends), we ate a breakfast of waffles and bacon with pineapple and apple juice. We took our time and really enjoyed each other’s company.
Read more →

Watch out for technical debt

I’m always looking for ways to improve myself as a programmer. It usually involves something fun, but after reading this post, I think my new area of improvement is to stop increasing my technical debt. From a related post from Steve McConnell: Other debt accumulates from taking hundreds or thousands of small shortcuts--generic variable names, sparse comments, creating one class in a case where you should create two, not following coding conventions, and so on.
Read more →

Saying good-bye to one of my favorite people

Today was the last day of work for one of my co-workers. It’s weird to call him that, he was a friend for a long time before he was a co-worker, but it’s the co-working part of our relationship that’s coming to an end. We’ve worked together for more than three and a half years, and in that time, we were able to build some really cool stuff. We worked together so well that at one point, when we were the only two developers, we were routinely referred to as “Navid,” a portmanteau of our first names.
Read more →

NDWall Milestone 2: Missed

Well, I didn’t get much of a chance to blog about the NDWall milestone 2 before it flew past this last Saturday. Dave and I agreed a few weeks ago that milestone 2 would include the following features: Add a configuration/settings area for the application. The keys are: Display Name, Username, Password, URL Move the downloading of new messages into a thread so that it happens in thebackground. We set the deadline for this milestone to be last Saturday, the 17th of January.
Read more →

Electronics Nerdery

I’ve been meaning to blog about this for about two months, so here’s a bit of background. Back in October, a friend (and coworker) of mine and I decided to start playing around with simple electronics in our spare time. We both bought the Arduino starter kit from Adafruit and during our first meeting, quickly worked through the first few tutorial lessons at ladyada.net. It didn’t take long before we decided to meet every Tuesday for lunch and hack on our new hobby.
Read more →

NDWall Milestone 1: completed

Just after 1:30PM today, I finished up my implementation of the first milestone of the NDWall project. The best part was trying to figure out to construct the request to post new messages. Here are a few screen shots of the app: It really doesn’t do much other than the two required features. I haven’t profiled it to make sure there are no memory leaks, but I’ll do that soon. The manual memory management of the iPhone is definitely odd for someone like me who’s done mostly garbage collected languages in his career.
Read more →

NDWall: an attempt to learn iPhone development

The best way to learn a new programming language/environment is to make something practical with it. To that end, Dave and I started a little side project called (at this point) NDWall. It’s an implementation of a “wall” where new messages can be posted and the 10 most recent can be viewed. The server-side api is very simple. Just two methods (GET and POST) on the api resource. The data transport is JSON, the lingua franca of web APIs.
Read more →

On Abstraction Layers

One of the things that’s been on my mind recently has been optimizing my work life so that I can either spend less time doing the same stuff or accomplish more in the same amount of time. In the back of my head has always been Joel’s test, and in my feed reader the other day, I found a similar list; the humorously titled “Your Doing it Wrong if…” I had to laugh hard at the fourth entry on that list, as I have written my own database abstraction layer (hereafter DAL).
Read more →

Goals for 2008: 500 miles and counting

As evidenced by my runnerplus page, I’ve reached one of my goals for 2008: I ran 500 miles. It happened right after the last long training run before the marathon. I definitely didn’t expect to hit this milestone so soon in the year, but training for a marathon and logging more than 30 miles a week certainly got me there. And speaking of the marathon, it was a lot of fun.
Read more →

Nothing is safe from the almighty Domain Specific Language

What Ruby on Rails is to web programming, and Capistrano is to deployment, now Castanaut is to screencasts: #!/usr/bin/env castanaut plugin "safari" plugin "mousepose" plugin "ishowu" launch "Mousepose" launch "Safari", at(20, 40, 1024, 768) url "http://gadgets.inventivelabs.com.au" ishowu_set_region at(4, 24, 1056, 800) ishowu_start_recording while_saying " Tabulate is a bookmarklet developed by Inventive Labs. You use it to open links on a web page. It's meant for iPhones, but we'll demonstrate it in Safari 3.
Read more →

Remember, thou wast once a noob

I was handling a customer support request today and it read something like this: I changed a setting and now I get an error. What's wrong? My knee-jerk reaction was to think, "Well, then what was the error?!?" You see, I'm a problem solver. I love to dismantle things and figure out why something isn't working properly. To me, the first step toward the solution is to figure out what the problem is.
Read more →

Everybody Lies

With insight into why people don’t read manuals and why features sell products: http://www.codinghorror.com/blog/archives/001048.html Also: http://www.jnd.org/dn.mss/simplicity_is_highly.html http://www.joelonsoftware.com/uibook/chapters/fog0000000062.html From the Norman essay: Logic and reason, I have to keep explaining, are wonderful virtues, but they are irrelevant in describing human behavior. Trying to prove a point through intelligent, reasonable argumentation is what I call the “engineer’s fallacy.” (Also, the “economist’s fallacy.”) We have to design for the way people really behave, not as engineers or economists would prefer them to behave.
Read more →

Kitchen Computer: Concept and Primary Hardware

For while now I’ve wanted to put a computer in the kitchen. Here begins the process of actually realizing that goal. Why would I want a PC in the kitchen? Here are a few reasons why such a computer would be convenient: Recipes: Use the Internet to find new recipes and manage favorites digitally. Videos: Watch cooking podcasts and follow along where there's plenty of counter space. Internet: Check email, do a quick search on Google, or log into IM.
Read more →

Goals for 2008

As promised earlier, here are the goals I have set before myself to complete by the end of 2008: Run 500 miles - Yup, that’s right. I plan on running five hundred miles this year. I’ve often called myself a running rhinocerous in comparison to my gazelle of a wife, but my last run (a half marathon in San Jose) helped me to finally get over the “less than totally enjoyable” experience I had during my first marathon and consider long distance running a sport I can do.
Read more →

On Motivation

Now that I’ve started organizing myself into discrete lists of projects and contexts, I feel the weight of remembering all those tasks lifting from my mind. But even as I began this endeavor, I quickly ran into the problem of motivation. I had planned on a longer entry about this, but today I found another blog post that echoed my thoughts exactly. Basically: The best way to get things done is to do them.
Read more →

On Organizing

One of my resolutions for the new year (I’ll list them all later), is to get organized. I know that “get organized” is a wonderfully vague goal, but for me it just means that I want to do the following three things: Forget fewer tasks Spend less time thinking about what I have to do and more time doing it Always have something to look for when I'm at the bookstore/library or the movie theater/rental shop.
Read more →

What’s your Walk Score?

From this post on the venerable Joel on Software: Go to walkscore.com, and type in your address. What you’ll get is a score with detailed locations of common destinations within walking distance. My work got a 66. Where I went to college got a 72. And my current residence gets a 75. Walkability is one of the things that influenced us when we bought our home and why we like living in this area so much.
Read more →

PTHPasteboard: the lazy man’s memory

I’ve wanted to write about this for a while, so here goes… I’m lazy. I don’t like using my mouse very much. I don’t even like using my keyboard very much. In fact, if I could just think and have my computer react, I’d be happy as a clam. Well, that’s not going to happen anytime soon, so I find little ways to optimize my computer time and this utility helps out quite a bit.
Read more →

eMusic picks for July

A while ago, one of my coworkers told me about eMusic, and I’ve been a subscriber ever since. I’ve found some great music over the past year, so I thought I’d start sharing what I download. I have the (now legacy) 40 download per month account. It’s a great value for only $9.99 a month. This month, I went for comedy. John Heffron: Good Kid, Bad Adult - Heffron won Last Comic Standing a few years ago, and his "
Read more →

The last day before vacation

So I’m going on a long vacation next week, and today was my last day of work for a little while. I’ve noticed a common theme among the days that precede a vacation. They’re usually fraught with a flurry of random tasks that all must be completed before the vacation can begin. There are also several trick workarounds and special procedures that need to be scripted or documented so that if this certain server or that random process were to crash, someone other than me would be able to get it back up and running without rousing me from my self induced slumber.
Read more →

Father’s Day Cards

I seem to run into this problem every year. I guess my relationship with my dad is different from the one that most kids had. I didn’t wreak havoc on the house, sneak out late at night or throw big parties behind his back. Conversely, I don’t worship my dad, holding him in such high esteem that it’s as if he’s a deity of some kind, I and don’t have an overbearing urge to validate who I am when I give a gift.
Read more →