Source: My arsenal for climate control. Yet again, I've taken a picture that looks like it was ripped from Crack House Monthly Magazine.

Note: I've never seen Game of Thrones, but I'm pretty sure the title is a reference to it.

When I was a kid, I used to watch my dad plow driveways and parking lots. He'd be out in the middle of a blizzard, wearing a sweatshirt (at most), carving out huge scoops of snow and heaving them over his shoulder. In moments like those, I thought he was a true-to-life superhero. So naturally it's no shock that I inherited his lust for needless feats of masculinity and macho-ness. As fall turned to winter every year, I'd resist transitioning to a more climate-conscious wardrobe, clinging on to my T-shirts and basketball shorts until it was borderline painful. I chose to "brave" some of the coldest, snowiest winters in Boston history wearing only a UMass hoodie and some well-worn jeans. And even when I wasn't being unnecessarily obstinate, I still spent four years with a roommate who loved keeping the windows open on frosty nights, and that's basically like sleeping outside, right? I'm well-aware that these weren't the smartest decisions, but there is an upshot: I was, without realizing it, conditioning myself for my current situation.

The Realization

As we creep closer and closer to winter, I've been noticing my reluctance to leave the warm embrace of my bed for the frigid world beyond.* Luckily, this is more my own hypochondria than actual hypothermia. After all, how bad can it really be when the record low for the area barely breaks freezing? Remembering the bitter -17° F morning I experienced last semester in Amherst, where I could literally feel my nose hairs stick together with each breath, the current climate is a comparative cakewalk. That said, there is still a big difference between it being 45° outside versus 45° in your home, where you sleep. So what am I to do about it?

The Game

The name of the game is heat control. When you step back and take a good look at the situation, a couple simple facts are pretty clear:

  1. The truck is not insulated.** The only thing separating me from the outside world is thin sheathing, made out of a material that transmits energy (or a lack thereof) very well.
  2. There is only one source of heat in the truck. As it turns out, it's my own body ripping apart the quinoa and chicken I had for dinner so it can maintain homeostasis.
  3. I can only perceive the temperatures around me. As a human being consisting of nerves packed into a tangible, physical form, I can't sense anything beyond my own body.

Brandon, are you high? Don't get all existential/Astral projection-eqsue on me, what's with that last bullet point?

Don't worry, we're getting there. Now that we've established our few basic truths, we can come to a nice logical conclusion. Since the truck is so poorly-insulated, attempts to keep it warm are going to be futile and wasteful. So really, what I have to do is make sure that the sweet, sweet heat I'm producing doesn't go far. And that's exactly what I've been doing. I picked up a bulky, patchy jacket from Goodwill, a pair of cozy sweatpants, and an extra blanket (all pictured above). That way, as my body works off the extra plate of fish tacos I opted for, I'm taking that heat and making a comfortable little cocoon out of it. I can't help but be reminded of a piece of my father's advice, uttered while expressing his relationship with the cold:

You can always put more layers on, you can only take so many off.

-My Father

Testing It Out

It's been cold enough at night for a few weeks now to warrant putting this plan into action. Each night, after I've finished unpacking and repacking my gym bag, I throw on tomorrow's workout rags, then toss on the sweatpants and sweatshirt, and top it off with a jacket. I also throw on socks for good measure, which I've found make a pretty big difference in my eagerness to get out of bed in the morning. I then waddle into my bed like the Eskimo that I am, pull the respective sweatshirt and jacket hoods up, and proceed to sleep like a small child for the ensuing 7-9 hours. As for the effectiveness, I've noticed it doesn't take a ton of mental self-coaxing to get myself out of bed anymore, even when the temperature dips below 40. In fact, I'm sleeping better than ever, though I still need a little more data before I'm ready to do a full-scale analysis.

Isn't That Bad For You?

During my fifteen minutes of fame, I received many a comment letting me know that exposure to the cold causes any and all of the following ailments: pneumonia, herpes, polio, fetal alcohol syndrome, irritable bowels, death, being placed on Santa's naughty list, etc. Though these claims were dubious at best, I certainly was curious as to what I'm doing to my body. Thusly, I did some research. And when I say "research", I really mean "Googling a phrase aligning with my preconceptions, then reading the most reputable link". As far as my "research" shows, cold weather being the cause of sickness is a total myth. From the linked article:

Cold weather also does not cause colds -- at least not directly. Despite its name, the common cold is not caused by cold. "It doesn't have any effect at all," says Tallman. "There's no correlation." In fact, you may be more likely to "catch your death of cold" indoors, where it's warm and crowded than outdoors in the chilly air.

-Matt McMillen, WebMD

They go on to explain that cold air causes people to be in closer quarters, which in turn causes less-restricted spreading of illnesses. As long as I'm sleeping alone in the truck, which is usually the case, the cold air doesn't appear to be any worse for me. In fact, sleeping in cold weather can increase your brown fat stores while you sleep, which actually burn calories in colder temperatures. So not only does living in a truck-shaped freezer not hurt my health, it actually boosts my metabolism and makes me even warmer over time. Plus, a combination of reasonable genetics, proper diet, and exercise has graced me with a formidable immune system that drops its guard less than once a year. All things considered, I think I'm in good shape for the winter. The worst case scenario I can see is that it's colder than I'm expecting. If that's the case, I'll follow dear old Dad's advice and get some more jackets, or maybe even spring for a sleeping bag. Bring it on.

*As a rough estimate, I spend about 3 minutes longer in bed for every degree (Fahrenheit) below 50°.

**And I have no intention of insulating it, though weatherproofing is a different story.


Source: Totally unrelated to the subject matter at hand, but it's a great album and I stole a quote from it for the title.

Disclaimer: All salaries and bonuses in this post -- even those based on real paychecks -- are entirely fictional. All financial information is paraphrased.....poorly. The following post was written by a 23-year old man who lives in a truck entirely of his own volition and holds a degree in something wholly-unrelated to both business and finance. As such, its content should not be viewed or seriously considered as advice by anyone.

Now that that's out of the way, let's begin.

In The Beginning

There's a laundry list of reasons why I do what I do, but one of my bigger goals was to clear out my (fairly unburdensome) student loan debt quickly, certainly more expediently than the 10-year plan my loan servicer was trying to spoon-feed me (with a healthy $3,000 of interest). And despite spending months planning out the various intricacies of truck-life and trying to anticipate all possible eventualities, I had spent virtually no time formulating a proper financial plan. Sure, I had used some broad hand-wavy gestures coupled with the word "investment" before, but apart from a brief experiment using Acorns in college, I hadn't the faintest idea what I was doing. With my loans dwindling with each incoming paycheck, it's time to seriously evaluate what my long-term goals are, and how I plan to reach them.

Motivation

This post serves two mostly-orthogonal purposes:

  1. Letting people know what I'm doing with my money. Hopefully, some of the ideas here (which I've poached aggregated from a variety of sources) will be useful in some shape or form to one or more people in the future.
  2. Forcing my own hand in figuring this stuff out. I do a lot of rough-estimate, back-of-the-proverbial-envelope-type calculations, but now I have about six months of my own real-life financial data. I know how much money is coming in, and how much is going to the various things that allow me to live a happy, healthy life…sometimes with less of an emphasis on the "healthy" part.

Brief Preface

There's this (distinctly American) taboo concerning salary discussion, which I've never quite understood. I mean I get it, capitalism dictates that your sole source of worth in this life comes from how much money you can rake in (and then how grandly you can dish it out). As such, discussing salaries will always be very touchy and emotional a colossal dick-measuring contest. Also, knowing the salaries of your peers would give you leverage when negotiating your own pay (which is why sites like Glassdoor exist). But that clearly doesn't interest the bottom line of an employer. Since this is a monologue and not a discussion though, we're going to throw the taboo and stigma out the window: it's counterproductive, especially when trying to do some frank, no-frills financial planning. Not that the taboo-ness particularly matters to me, I'm clearly not a staunch defender of social convention anyway.

The Money

At work, I mash keys on my keyboard and swivel my mouse around until the pixels on my screen arrange themselves in a pattern that pleases me and those around me (nod to XKCD). For doing so, I'm compensated by my employer, and this compensation is broken into roughly three categories:

  • Salary. My base salary is $105,000.
  • Bonus. Once a year, I receive a bonus roughly equal to 15% of my salary (give or take a performance multiplier). 15% of $105,000 is $15,750.
  • Stock. Every year, I get a certain number of shares of the company. Because stocks are prone to the whims of a bunch of anxious men in fancy suits, I'm going to take about 10% off of the current value of the stock, which means roughly $40,000 a year in stocks. I know I said we'd be staying away from estimation, but this is one of those inherently nebulous things. If there was anyone who knew where the price of a stock was heading, they'd either be arrested, filthy rich, or some combination of the two.

So my total before-tax earnings are (approximately) $105,000 + $15,750 + $40,000 = $160,750.

Where's The Money Go

It's clear what money I have coming in, but where is it actually going? The way I see it, there are two categories to explore. There's the money that I'm never formally introduced to, because it's absorbed into a vast web of legislation and tax-advantaged accounts, and then there's the money that lives to see the light of day my checking account.

Death and Taxes

Since bonuses and stocks are distributed yearly on their own schedules, the money I get in my paychecks naturally comes from my base salary. So $105,000 divided over 26 pay periods would mean $105,000/26 = $4,038.46 every two weeks. And sure enough, that's the number I see at the beginning of my paycheck. From there, we have two types of deductions: Death and Taxes.

  • Death. This portion consists of my 401k contribution ($1,200), my HSA contribution ($293.75), and my downright ruthless dental and vision insurance ($3.57). These things go under the "Death" portion because they're health-related and I can't access any of that money (without penalty) until I'm 59.5/65 (as of the present day's legislation for the 401k and HSA respectively). And who knows what I'll be like when I'm 60 (assuming a truck-related incident doesn't take me out of the game before then)? I can only assume I'll be dead inside, hollowed out from years of engaging in such soul-sucking adult activities as sitting in traffic and having mindless conversations about the weather.
  • Taxes. This portion consists of the money I distribute among various government cubicles: a Disability Tax ($36.31), State Income Tax ($164.34), Medicare ($54.34), Federal Income Tax ($412.93), and Social Security Tax ($232.33). I've capitalized all of these terms because they sound Very Important™.

After both Death and Taxes, my biweekly take-home pay is $4,038.46 - ($1,200 + $293.75 + $3.57) - ($36.31 + $164.34 + $54.34 + $412.93 + $232.33) = $1,640.89.

Woah woah Brandon, hold on for a second. The yearly contribution limit for a 401k is $18,000, and $3,350 for a personal HSA. Crunching the numbers, your paycheck contributions are way too high!!

You'd normally be correct, over-eager eagle-eyed finance-savvy reader. The discrepancy is that I started working in May. I didn't start contributing to the 401k until June, and I didn't get my act together and start dumping small fistfuls of money into the HSA until September. The great thing about this is that starting at the beginning of next year, these two contributions are going to drop pretty dramatically (because they're spread over a full year), adding about $900 to my bi-weekly bottom line.

The Leftovers

We've established that 60% of my salary is gone before I see a cent of it (which is fine for reasons we'll get to soon), where does the rest of it go? If I were living in an apartment and paying the rate of $2,180 I estimated here, >65% of my after-tax money would go to that. But that, as we're all well-aware at this point, is not the case. So where is that money going? I was actually kind of curious myself, so I opened up my various credit card/bank statements and have itemized everything that cost more than $100 and was purchased on or after May 26th.

Non-Exhaustive List of Big Expenses

Expense Amount Thoughts
Speeding Ticket $470 I'm pretty sad that this is my most expensive "purchase". For someone who hates burning money on things with absolutely no return or value whatsoever, this one is tough to swallow. Oh well, maybe I'll be less of an idiot in the future.
Truck Insurance Round 2 $421.88 A necessary evil, made more palatable by the recent cost reduction.
Bike $380.60 Worth all 38,060 cents. In the two weeks I've had it, I've logged well over 100 miles. And for the person who asked what kind of bike it is, it's a Raleigh Misceo 1.0
Expensive "Art" $334.24 Long story short, I thought it would be funny to pretend to buy an expensive piece of art that a friend was looking at. Well the joke is on me, Hautelook has a strict "No Returns" policy.
Motorcycle Gear $330.44 Helmet, gloves, boots, jacket, etc. I don't have a motorcycle, and I don't have any plans to get one until I'm debt-free and I can buy it in cash. But I needed the gear for the lessons (see three items down). The gear is pretty nice, and inexpensive for what it is.
Projector $329.45 I haven't talked about this yet (I'll write a post eventually), but I did purchase a small, battery-powered projector for watching truck movies. Sure, it goes against my philosophy of minimizing time inside the box, but it's mostly for facilitating truck hangout sessions. I think that's a valid exception to the rule.
Rental Car $269.80 My partner in crime the fateful night I received my half-grand speeding ticket. Necessary for a week of driving between Amherst and Boston.
Motorcycle Lessons $258 I can't remember what originally motivated me to take the lessons in the first place, I think it had something to do with the electric bicycle. While learning to ride a motorcycle wasn't exactly a necessity, it was a ton of fun. It's all the fun of a bicycle, but faster (and louder, more expensive, worse for the environment, worse for your body, etc)!
Bike Gear $249.39 Helmet, lights, glasses, etc. The benefits of investing in quality cycling gear are twofold. Firstly, the gear is going to last and save you money. Secondly, the gear is nice and safe and comfortable and pleasant and just makes you feel all warm and fuzzy inside, which makes you want to ride more frequently.
Truck Wash/Detail $158.49 I try not to outsource work that I can do myself, but it's not like I have hoses or, you know, running water around to wash the truck myself. And the interior was in rough shape when I got it: from the few clues available to me (a receipt, some strange stains, and some stranger smells), I think the previous owner was really sticking to the script as far as trucker stereotypes go. Plus, my preferred parking place periodically pretends it's the Midwest during the Dust Bowl, so the truck gets pretty filthy.
New Clothes $154.37 I took a trip to JCPenny (I think?) when I first moved out here and picked up a few shirts and a few pairs of jeans. I hadn't brought much with me when I moved out here, and it seemed reasonable to look the part for my new job and disguise my inner homeless person.
Seven Hills $150 Fancy dinner with a few friends. Ordered one of everything on the menu and split the tab, each of us paid $150.
Townshend $140 Dinner date, catching up with a friend while I was back in Boston. I like to sip cocktails and discuss professional development over ambient candlelight, also known as "pretending to be a well-adjusted member of society" for a night.
Passport $136.75 Necessary for my eventual travels. What sort of eventual adventurer would I be without a proper passport? A domestic one, that's for sure.
Gochi $135 Another dinner date, ate a bunch of things I wouldn't dare attempt to pronounce.
The Boiling Crab $120 One more dinner date, this time featuring the merciless pulverization of pre-killed sea creatures slathered in fat and spices. Fun for the whole family.

That accounts for most, if not all, of the big things, but naturally there are hundreds of smaller purchases that paint the picture more vividly: the (slightly) more reasonably-priced meals out, the movie tickets, the too-frequent Starbucks visits, the weekly Home Depot trips, etc. It'd be silly to have gathered all this information if we weren't going to draw some meaningful conclusions from it though. One thing I noticed is, though I haven't included the dates for the expenses, most of my earlier expenditures can be characterized by one mindset, while the later ones subscribe to a different school of thought. When I first adopted the truck life, my financial thinking was along the lines of, "I don't have to pay rent, that's ~$2,000 a month I can blow on whatever I want!" That mindset, as I'm slowly figuring out, is the wrong one to have. The new mindset is, "Consumption alone doesn't make happiness. Find what really brings you happiness, and invest your resources into that." I know, I know, I sound like a damn fortune cookie, but let me explain how that maps to my real-life plans.

The Plan

Like I said at the beginning of this post, I didn't really know what I wanted aside from freedom from debt. It wasn't until the Internet became privy to my life and started feeding me new perspectives and resources that it really clicked: I'm in the perfect position to retire early, and it aligns precisely with my goals. The more I thought about it, the less I could believe I hadn't seen it earlier. My motivation for all of this had always been "to travel the world", but what I didn't realize was how that was only a small piece of the bigger picture.

Making it a Reality

It's easy to say, "I want to retire early". But we all know talk is cheap, so let's start acting. More than a few people had pointed me towards Early Retirement Extreme, Mad Fientist, and Mr. Money Mustache, none of which I had ever heard of before. Mr. Money Mustache (MMM), in particular, has tons of ideas and philosophies that I'd been applying to my own life totally independently. His concept of "Mustachianism" centers on how to think about happiness, conscientious consumption, and life-hacks to cut unnecessary expenses, which normally circles around to his love of bikes. One thing that MMM had that I did not (aside from 20 years of extra life-experience) was a solid investment plan.

Investment

How early you can retire correlates with how much of your money you save. When you save money such that you can live on ~4% of the principal balance a year, you can retire. And by "save money", I mean take it and invest it in things that appreciate in value by, on average, >7% a year. This is something that was missing from my original plan, because I had banked (no pun intended) on maxing out my 401k for the next 35 years and then retiring on that money. Getting started with this huge shift in plans was surprisingly easy. My company uses Vanguard to manage our 401k accounts, so it was dangerously easy for me to open up a personal investment account through them and throw some money in there.

But Brandon, you know nothing about investing, how could you possibly have made a reasonable, balanced portfolio?

Because index funds are magical. I have no interest in buying individual stocks, I'm no Warren Buffett. I want something that averages out the market, smoothing over dips in different sectors and provides fairly consistent returns over long periods of time. But which index fund do I pick? I have no opinions on what direction the dividend market is heading (price-earnings ratios and their meaning are complete voodoo witchcraft to me), so I didn't put any particular emphasis on whether or not the index included dividend-paying companies. I didn't want to get too fancy with international companies, that's another area where I'm not nearly well-versed enough to make reasonable, informed decisions. I also knew that I wanted something with a low-expense ratio, so that my returns actually make it back to me and not to some hotshot banker putting a down payment on his third Lambo. All of these things led me to VOO - Vanguard S&P 500 ETF, an index fund from Vanguard that tracks the S&P 500 Index. It has a super low expense ratio (0.05%), and there's nothing too crazy or exotic about it. So I took $1,000 that I was going to use to pay down my loans, and I used it to buy a few shares of VOO.

But Brandon, I thought the goal was to pay down your student loans quickly so they don't accumulate interest?

That was (and still is) the goal, but there are a couple things to consider. First, I've paid off all of the higher interest (6.8%) student loans I had, the remaining loans all have a (dirt-cheap) 3.4% interest rate. And though past performance is not an indicator of future results, VOO has had annual returns of >10%. Even accounting for inflation, throwing my money at VOO and letting my loans accumulate interest is likely a profitable plan. That said, it's hard to put a value on the peace of mind you get from being debt-free, so my plan going forward is to split my savings-money between investing and loans, with about a 60/40 split leaning towards Vanguard. Once I get my bonus in a few months, I'll likely use that to put the final nail in the coffin of my short-lived student loan debt.

But Brandon, if you plan to retire so early, why bother with your HSA and 401k at all? It's not like you can use that money.

Good question, straw man alter ego. There are a couple perfectly valid reasons, but the biggest one is free money. My company matches 50% of my 401k contribution up to the $18,000 limit, meaning they hand me $9,000 a year extra just because I'm looking out for future me. Similarly, they drop $1,000 into the HSA every year as part of my health insurance plan. Another good reason is that I'm putting before tax money into these accounts, so they decrease my tax burden as well. On top of that, I learned that I can invest my HSA money, effectively turning it into a second retirement fund. One of the options for HSA investing was VIIIX, which is basically the same thing as VOO above, just in a different type of account. All of this means that even when I retire early, both of these funds will continue to (hopefully) earn money and compound, and I get magical cash windfalls for my 60th and 65th birthdays. Plus, with a trick I learned about here, you can actually take tax-free money out of your HSA before 65.

Lifestyle and Looking Forward

I'm already on track to make this a reality, and retire at 30 (or earlier, who knows), but going into it with the right mindset will make it even easier. I've been on my soapbox talking about how true happiness, for most people, isn't hiding in shopping malls or the crevices between the fresh leather seats of a new car, but I haven't been living my own credo to the fullest. Looking back at the past six months and my expense list above, I had more than my fair share of expensive nights out that only served to fatten me up and slim my wallet, leaving me with a few fuzzy memories and a productivity-ruining hangover. I get so much more lasting happiness from taking quiet bike rides down the Bay Trail, or even just sweeping out the truck on a lazy Sunday morning, opening the back gate to let the sunshine in and the gentle breeze twirl my dust pile around. It's just a matter of training myself to look in the right places.

As for my actual "early retirement", I probably shouldn't even call it that. When I say "early retirement", I really just mean the freedom to do what I want, and not have to work to survive. It's very unlikely that I'd actually stop working; I have sketches for grand plans that involve spending months on beaches in southeast Asia coding up whatever projects cross my mind. The only tricky thing for me now is figuring out how much money I'd need to retire on. My current life is heavily subsidised by my employer, and retiring would necessarily take that away from me. Luckily, I have a few years to figure it all out. For now, I'm just going to enjoy the interesting technical challenges I'm presented with on a daily basis, and watch my future unfold.


Source: My App Engine console, with a few minor tweaks

What CMS are you using?

What WordPress plugin do I use to make a clock like yours?

You're using AppEngine right? I can tell by your blog's IP address.

Brandon, when are you going to nerd out and talk about technical stuff?

Right now, as it turns out. First, a little disclaimer:

This post is more for the technical types. You'll likely find this post mind-numbingly boring if you don't have an interest in programming or web development.

Still reading? Sweet. While I can't talk about what I work on in my day to day professional life, I can talk about my background and blog-related things, which in my opinion are more interesting. If you want juicy technical details, skip the "Background" section, that's just me reminiscing over a time in my life where I didn't have to come to grips with being an adult and stuff.

Background

On the sidebar, I mention that I'm a "Software Engineer". I capitalize Software and Engineer because it's my Official Title™ and it makes me feel Very Important™. I didn't always hold this position though, so let's start at the beginning.

For some reason unbeknownst to my current-self, a smaller, younger version of me had it in his silly little head that he wanted to be a lawyer. Maybe it was the allure of bucket-loads of bucks and the promise of putting particularly unpleasant people in prison, I can't say for sure. In any case, I shot down that dream while filling out a health form (or something similar) and realizing that I hated paperwork. Considering being a lawyer is like 99% paperwork (with the other 1% being bureaucracy and more paperwork), I opted for a far less miserable dream.

My first formal introduction to programming was at nerd camp when I was 13. I learned the fundamentals of C, building a basic command-line choose-your-own-adventure game. That was cool and all, but it was actually one of the other classes that caught my attention. A different course was using Multimedia Fusion, a programming platform with an easy click-and-drag UI. When you're 13 years old and you just made your first text-based game, that feels pretty sweet. When you look over and the kid next to you has made a full-on graphical game complete with sprites and sounds, you know it's time to step up your game.

So after camp was all over and done with, I started experimenting with this Multimedia Fusion software. I eventually got good enough with it to actually work with Clickteam, the company producing the software, and I built some educational children's games to showcase their tools. Multimedia Fusion was really a gateway programming language though, and it wasn't long before I started looking elsewhere to get my fix.

I spent five summers in my hometown as a parking lot attendant, and as the beach/lot became more popular over the years, people started asking for a way to make parking reservations online. Being the enterprising 17 year-old that I like to think I was, I whipped up a web app in PHP (for no other reason than I didn't know any better), and an accompanying Android app. This PHP app was hands-down the worst thing I'd ever written in my life. Not only did it have zero testing/version control/productionization/comments/coherence/style of any kind, the codebase was essentially a Franken-program of half-working snippets from Stack Overflow duct-taped to a MySQL instance hosted on a now-defunct web host, with all the worst CSS attributes in existence plastered onto the frontend. Somehow it worked though, and every day I'd use the Android app to keep a live-updating count of how many cars were in the lot, and people would pay me a dollar a piece to reserve a spot.

In college, I did a little bit of everything. I drove buses, programmed bus websites, graded for classes, and picked up contracts for any project I could get my hands on. Along the way I dabbled in Ruby/Rails, Python, Node.js, some Android stuff, a ragtag collection of web frameworks/technologies, and even a bit of assembly. I eventually stumbled upon Golang, and that's what most of the code I write of my own volition ends up being in, including this blog.

The Blog

At a high-level: this blog is written in Golang and hosted on Google App Engine. Posts and questions are stored in Datastore, and images are stored in Blobstore. The frontend is your standard HTML/CSS/Javascript stack with a sprinkling of Bootstrap because, let's be honest, nobody actually enjoys frontend web dev. I don't use Markdown or any other markup languages; posts are written in plain ole HTML, with the odd CSS class added to my stylesheet for new functionality.

Golang

If you haven't heard of Golang before, allow me to make the introduction. It's a fairly simple language, looks like a bastard child of C and Pascal, and puts primitives for concurrency right into the language. It's compiled and garbage-collected, which means deployments come in the form of single solitary binaries, and memory leaks are less likely to exist/ruin your day. If you're familiar with C or Java, you can probably learn the language in an afternoon. Built right into the standard library is a world-class HTTP package, as well as a templating system, and there's an extensive network of tooling covering everything from linting and formatting to deadlock detection and code coverage.

App Engine

App Engine is the magical piece of technology I use to host my code. It's kind of like Heroku, if Heroku didn't hold your hand quite so tightly and was built on big-boy infrastructure. It provides a great local development environment for me to iterate on, and deployments take <30 seconds. The built-in logging, monitoring, profiling, load-balancing, versioning, and auto-scaling, among a dozen other features, mean that I can focus on the blog and not unrelated productionization details.

Savings Clock

The code for the savings clock can be found at the bottom of this Javascript file. It's basically just a function that runs once a second and calculates my savings given some hard-coded values and the current date/time. Since my insurance rate is variable (as is the cost of rent), I divide the time between May and whenever into "epochs", each of which has a start and an end date, and the insurance and rent prices for those respective time periods. Then I iterate over the epochs, noting whether or not we're in the middle of one, and sum up the savings over all of them. Before updating the display on the page, I check if the value is negative (which it isn't anymore!) and format it appropriately.

Optimizations

I threw the blog together over the course of a few days in May, back when I was still unsure whether or not I could actually live out of a truck. Being the hectic time that it was, my main concern wasn't code quality or adequate testing coverage, but rather getting my thoughts onto the proverbial paper while they were still fresh in my mushy, unreliable mind. This was fine for a while, but I couldn't help but notice that each new feature took longer to integrate, and was more frequently broken than not. I knew it was time for an overhaul.

The Refactoring

The scenario is familiar to anyone who's ever done a bad job at maintaining a codebase: editing existing code becomes painful, and adding new features becomes brittle and burdensome, normally involving lots of copy and pasting and manual testing. In my case in particular, there was little to no isolation between components, and I was passing around global objects like it was nobody's business. So I started a new branch (because I use git and Github like a reasonable human being), and set to work. The first big change I made was wrapping App Engine's Context with my own and passing that into all my request handlers. Then I added interfaces for database lookups to decouple the implementation details from the business logic. Wrapping the default templating system with my own helped to get rid of the code duplication surrounding rendering common components, and a bunch of other small code clean up tasks around the site reduced complexity and fragility. Abstracting things like pagination and post creation out into their own independent ideas further slimmed the handler methods. Since everything is easier to test with proper abstraction, I tossed in a few more unit tests for basic functionality, and finished up by running the golint and go vet tools and implementing the suggestions they provided. A few weeks and a few thousand lines of code later, we're here, with a much more maintainable web app. To celebrate, I started adding a few new features.

Caching

When this blog was only getting 10 hits a day, it didn't matter how inefficiently I served up my content. After all, Datastore read/write requests are charged by the millions. I could have ran the website on a Raspberry Pi and nobody would have been any the wiser. But my fleeting collision with the limelight meant that suddenly those redundant calls started to add up. It wasn't until recently I realized something that should have been abundantly obvious from the outset: I'm the only one who updates the content on the site, I don't need to check the database to see if it's been updated. I can store pretty much everything in memory and serve from there, refreshing the in-memory representations anytime I create or edit a post.

Uh Brandon, you know that there's Memcached for that sort of thing, right? In fact, it's even integrated into App Engine.

I…I actually didn't know that. And if I had known that earlier, I probably would have done that. But since I had just finished my refactoring, it was a snap to add in a caching interface, and then drop the business logic into my new Context before it delegated calls to the Datastore.

Parallelism

A couple days ago, I stumbled upon the Cloud Trace feature of App Engine. So I turned it on, loaded the main page, and saw the following:

Well that's no good.

Can you spot the cardinal sin? I'm using a highly-concurrent programming language, and yet I'm loading all of my image URLs for a given page synchronously. There are five requests, because I put five posts per page and each one has a single title image. So I made a new type to represent a list of posts, and then added a prefetch function that would spin up a separate goroutine for each post, and wait until all of them had finished, using a WaitGroup. As you can imagine, it's approximately five times faster now, as shown below.

Much better.

But it turns out I had an even worse offender, the search functionality (which actually works now). A search for a common word, like "the" or "truck" or "deranged" (kidding) would load the entire corpus of posts, and all of their images serially, as shown below.

It's hard to see, but this request took nearly 3 seconds!

But running our handy-dandy new parallel prefetcher on this made quick work of that.

Down to 700ms.

Naturally, I'm still at the mercy of the longest-running lookup, plus building up the inverted index, which takes nearly 500 ms (and will grow linearly with the number of posts I write), but it's definitely an improvement.

New Features?

Now that I have a lean, reasonably sane codebase, what's next? I have a few ideas.

Post Comments

People have their own ideas about my ideas, and sometimes they'd like to share them in a forum visible to the rest of the Internet-connected planet. I'll definitely add these at some point, once I build up sufficient tooling and reasonable spam blocking.

Microposts

All of my posts are about the various mundane aspects of my life: whether it's leaky roofs, insurance, bicycles, or the weather, if the topic is boring and has no right being expounded about for paragraphs on end, there's a good change I'll write about it. But some of the prosaic things I want to talk about don't always warrant a whole essay, just a little blurb. What I'm describing is basically Twitter, but as an engineer with no interest in actually using Twitter, it seems reasonable to just whip up my own little system.

E-mail Subscription

For people who aren't a fan of RSS, but still want to read about my apathetic adventures.

Interactive Questions/Comments

Right now I have a comments/questions section, but it's one-way, so if people have a burning question and don't want to e-mail me or wait for me to do another Q&A, they're currently out of luck. I think it'd be cool if when you ask a question, you could get a link that would act as a private, topical chat and we could reply back and forth on that.

I have a few other features in the pipeline: I'd like to improve my search functionality, and maybe add a post listing by month or topic. I've been adding little features here and there and updating the layout, and if you have any good ideas for new features, I'm all ears.


Source: The creepy face-blur makes its return for the truck-people meetup at Containertopia.

TrainspottingDefinitely not the word I'm looking for, but it sounds cool

I noted early on that I wasn't the only sketchy-looking vehicle on campus. And the longer I've been doing this, the keener my eye has gotten to the subtle, but telltale signs of "unconventional" or otherwise "alternative" living situations: windows tinted a little too deeply, parking just slightly farther away from a building than everyone else, a few scattered blankets on the back seat. It was nothing more than conjecture and supposition until I made contact with another truck-person. Even then though, there were seven or eight cars I was seeing all the time, and they certainly kept me wondering.

Beyond campus, I was seeing the same signs everywhere: lines of RVs in loosely-regulated parking areas, disconnected trailers in run-down driveways, condensation on car windows long after it should have burned off, etc. I couldn't tell if they were as common as I perceived, or if my situation had made me unusually sensitive to it. It reminded me of a story recounted by a high school teacher, whereby he fell in love with a girl who drove a green VW bug, and thereafter started seeing those cars everywhere. He called it the "Green Punch Buggy Effect™," though it's likely more commonly called the Baader-Meinhof Phenomenon.

Joining the Cult

At first it was merely a hunch, yes, but once I started shouting my automobile affinities from the rooftops, it wasn't long before truck tenants, clunker colonists, sedan citizens, buggy boarders, hatchback inhabitants, and pickup people of all types started to come out of the proverbial woodwork. I quickly found myself in the CC field of an email thread with the title ATTN: Vehicle Dwellers Meetup, along with no less than fifteen other like-minded individuals. Most of the thread participants were doing some tech- or startup-related work, though I was impressed with just how diverse the group was, and how sane and reasonable everyone seemed. At this point, I really shouldn't be surprised that reasonable people are coming to this dwelling decision, assuming they're going to be crazy is more of a vestigial knee-jerk reaction on my part from before I dove headfirst into all of this (see here for my initial, incorrect preconceptions). With the voluntarily homeless corralled into a digital conclave, we started planning where we could talk about the various intricacies of our day-to-day lives (much like I do here) and show off our setups. Fittingly enough, it was decided that this shindig would take place at Containertopia, a secret and magical place in Oakland filled with shipping containers in various stages of being converted into homes.

Meeting My Contemporaries

The meetup took place on a crisp, sunny Saturday afternoon a few weeks ago, and as such I opted to bike to the Oakland meeting place.

Woah woah woah, Brandon, why would you bike up there when the whole point of going was to show off your truck house thing?

Well there's a few reasons actually. Firstly, I'm not under the illusion that my "setup" is anything more than a bed and a dresser shoved into the back of a decrepit moving van, which I (correctly) assumed would be downright embarrassing in the face of the craftier solutions of others. Plus, I've mentioned that driving the truck is a death sentence, so I opted to showcase the entirety of my lavish, expansive living space by taking a few photos instead of spontaneously combusting on the 880 during an attempted drive. Summarily, the signs seemed to say, or otherwise suggest, that cycling was surely sensical. In a textbook display of character weakness, I dramatically overestimated my own ability to do sustained cardio and ended up arriving at the agreed upon meeting place an hour or so later than planned. A few calls and texts later, I was led through a wrought iron gate and into what can only appropriately be described as a Mecca for tiny houses of all shapes and sizes.

The idea behind Containertopia is a fairly simple one: You buy a shipping container for between $1,000-$2,000 and have it delivered to the place, which is basically a large open warehouse with communal facilities (electricity, water, etc). From there, you pay a (comparatively reasonable) rent, usually temporarily as you hammer, nail, weld, rip apart, and otherwise modify your shipping container to your specifications and desires with the intention of doing something with it.

The place itself felt like a post-apocalyptic construction site…but I mean that in the most endearing of ways. There was always the distant whirring of heavy machinery as people worked on realizing their dreams, and the cold concrete floors were littered with all imaginable components and contraptions. We were given tours of a few of the containers, which ranged from barren to decked out with windows, carpeting, insulation, and all of the modern amenities you'd expect from a high-class shipping container house. As for the more mobile participants, their housing solutions ranged from standard RVs all the way down to Priuses (Prii?) outfitted with magnetically-secured insulation. We hung around for a few hours talking about the various trends in tiny housing, living in the Bay Area, and our own ideas, inspirations, and future aspirations, then we grabbed a lovely dinner and parted ways.

All in all, the experience was enlightening. Aside from the fact that I'd never before biked anything even remotely close to 50 miles, it's always interesting to talk with other people from a bunch of backgrounds who've all converged on similar solutions, executed in dramatically different ways. And between this new group of non-stationary settlers, and another group of tech-truckers I've become acquainted with at my own place of employment, I have a new-found network of truck friends, which is something I never thought I'd find myself saying.


Source: Snipped straps and super glue, combined with a little (accidentally) dramatic and gloomy lighting

It's been a while (six months almost to the day) since I did my last big Home Improvement post, and I think it's about high time we changed that. Not only because a lack of Home Improvement posts signals stagnancy on the front of truck-progress, but also because there is much to be improved upon truck-wise, and I should be more proactive and motivated to work on it. This, as is likely evident from the title, is just a "Mini" Home Improvement project, but there are two fairly large ones that I've yet to write about, so expect those soon eventually.

Meeting Michael…'s

In a shocking turn of events, a home improvement project didn't land me at Home Depot. Instead, I found myself ambling around the aisles of Michael's, a fairly ubiquitous craft chain store. I'd place Michael's pretty far down on the list of places I'd expect to find myself at, right there with "an apartment showcase", "grad school", and "a Homeowner's Association meeting". And yet there I was, shopping for leather wristbands and Super Glue like a pre-K camp counselor.

This strange shift in shopping proclivities came about as I attempted to solve a problem that has been plaguing me since before I moved in. I detailed it at the end of this post, but as a refresher, my problem was thus: I have a house on wheels that I drive sometimes, how do I properly secure dresser drawers so I'm not launching them (and pretty much everything I own) across the truck every time I take a turn too hard? My initial solution, Velcro, had failed spectacularly (and very audibly from the driver's compartment). As a stopgap solution so that I could, you know, drive, I wrapped the corners of the drawers in painter's tape, the only reasonable adhesive I had available. Naturally, this had a few problems of its own, like how it's annoying to un-peel and re-peel tape every time I want to grab a pair of socks, or how the heat during the day means that the tape loses adhesion pretty quickly and I have to reapply it, etc, etc. I got a few suggestions from strangers on the Internet readers on using childproof drawer locks and a few other ideas, but they didn't seem quite robust enough for my use case.

Leather and Bondageing Glue

Eventually (read: two weeks ago), I had a bout of divine inspiration during which I realized that some combination of buttons and snaps would suit this situation well. The aforementioned trip to Michael's happened, and then I applied the following process to save my dresser drawers from my dubious driving abilities:

  1. Remove the ineffective Velcro squares from the drawers by wedging your fingernail under them and peeling them off. Make sure to break or otherwise bend at least three fingernails in the process.
  2. Cut the male end off of the leather straps into little squares.
  3. Cut the female end of the strap to 3 (ish) inches.
  4. Measure the vertical midpoint of the drawers and mark them with a pen.
  5. Measure out where the longer straps should be glued down and mark those with a pen too.
  6. Glue those little square suckers down to the rolling-drawer-handle-part with some super glue.
  7. DO NOT GLUE YOUR FINGERS TOGETHER.
  8. DON'T GLUE YOUR FINGERS TO THE LEATHER EITHER.
  9. You glued your fingers together, didn't you?
  10. Use the acetone you bought for a different home improvement project to unstick your thoroughly bonded fingers.
  11. Apply glue to the last inch and a half of the longer straps, leaving room so that the snappy end can move around a little bit.
  12. Definitely don't immediately test it out, wait like 8 hours (at least) for the glue to fully cure.

Boom. Successful strappage.

How well does it work?

It works really well…when I remember to snap them shut. On more than one (read: three) occasions, I totally forgot to snap them into place before driving off, which, as it turns out, makes them Totally Ineffective™. But when I do remember to use them, they work swimmingly. Super glue fares especially well when the force is parallel to the surface, I just have to be careful to not tear the leather straps off like a Band-Aid® when I unsnap them. Overall, it took about hour to do all the measuring/cutting/gluing, which isn't bad in the slightest, especially when it means driving around is less like throwing my belongings in a tumble dryer.



Subscribe

If you want to get emailed when I write a post, add your email here. Don't worry, you can always unsubscribe.