Mass Twitter unblock python script

I subscribe to several block lists on Twitter, as part of my efforts to avoid drama. One of the lists I subscribed to turned out to be much too aggressive, and I suspect that I’m blocking a bunch of people that I probably don’t really want to be blocking.

There are about 9000 people on this particular list, so unblocking them manually is highly impractical, and unsubscribing from the list does not unblock them. So I downloaded this list as a CSV file, and wrote a python script to go through it, automagically unblocking them for me.

A couple of features:

  • It unblocks 100 IDs, then pauses for 8 seconds, so as not to run afoul of the Twitter API rate limit.
  • The CSV that you get when you export your block list from Twitter, isn’t really a CSV, because there is only one column in the file, and no delimiters of any kind. So rather than import the CSV module and read the file as a CSV, I just have it reading the files like any text file. It works fine.
  • I wanted to get an email when it finishes the list, or when it encounters errors, so I pasted in an email function that I use quite a bit in other scripts.
  • This does require having a Twitter API key. There are many sites out there with instructions on how to obtain one, so I’m not going to cover that here. I already have several, as I have several Python scripts running a variety of Twitter tasks for me.
  • Added in some error handling.
  • Added command line arguments so that you specify the list file in the command line, and can optionally specify a line number to start from if the script bombs out partway through. This was happening frequently while I sorted out how to deal with trying to unblock deleted twitter accounts and such. Instead of erroring out, it now simply moves on to the next line. Not so much an issue now, but the capability is still there.

Usage: python3 twitterunblock.py <file.csv> <optional – starting line number>

#!/usr/bin/python3
# Author: DeadTOm - deadtom@deadtom.me
# License: GPLv2 - https://www.gnu.org/licenses/gpl-2.0.html
# Python Version: 3.6.1
# Description: Unblock a list of twitter IDs from a csv
# Usage: python3 twitterunblock.py <file.csv> <optional - starting line number>

from twython import Twython, TwythonError
import time
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
import sys

APP_KEY = ''
APP_SECRET = ''
OAUTH_TOKEN = ''
OAUTH_TOKEN_SECRET = ''

twitter = Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET)

if len(sys.argv) == 2:  # Check to see what arguments were passed from the command line
   listfile = str(sys.argv[1])  # Get CSV file name from command line
   startingnum = 0  # Set the starting line number to zero, since none was specified
elif len(sys.argv) == 3:
   listfile = str(sys.argv[1])  # Get CSV file name from command line
   startingnum = int(sys.argv[2]) + 1  # Get the starting line number from the command line. Offset by one, because computers count from zero
else:  # If nothing was passed from the command line, print usage and exit
   print('Usage: python3 twitterunblock.py <file.csv> <starting line number>')
   sys.exit()


def unblock(blocklistfile, currentnum):
   linecount = 0
   global linenum  # Needed to modify the global variable, outside the function
   linenum = 0  # Keep track of line numbers when reading files
   global startingnum  # Needed to modify the global variable, outside the function
   startingnum = int(currentnum)  # Set starting num to the number passed to the function

   with open(blocklistfile) as blocklist:  # Open downloaded blocklist file, and iterate through each line
      for idnum in blocklist:
         if linenum >= startingnum:  # Skip lines we've already read
            startingnum = linenum  # Set the global variable "startingnum" to the current line number, so if the destroy_block command erros out, the function will know where to resume
            print('Line num: ' + str(linenum) + ' Line count: ' + str(linecount) + ' Unblocking ' + idnum)
            twitter.destroy_block(user_id=idnum)
            linecount += 1  # Increment linecount
            if linecount == 100:  # Every 100 lines, pause for eight seconds, then reset the counter
               time.sleep(8)
               linecount = 0
         else:
            print('Already unblocked ' + 'Line count: ' + str(linenum) + ' ' + idnum)
         linenum += 1  # Increment linenum


def sendmail(body, subj):  # Put together the mailer and send the message to me, using my mail server
   fromaddr = 'from@emailaddress'
   toaddr = 'to@emailaddress'

   msg = MIMEMultipart()
   msg['Subject'] = subj
   msg['From'] = fromaddr
   msg['To'] = toaddr

   msg.attach(MIMEText(body, 'plain'))

   server = smtplib.SMTP('mailserver', port)
   server.ehlo()
   server.starttls()
   server.ehlo()
   server.login('username', 'password')
   server.sendmail(fromaddr, toaddr.split(','), msg.as_string())
   server.quit()


try:
   unblock(listfile, startingnum)
   body = listfile + ' has been finished.'  # Set up the body for the email
   subj = 'Twitter unblock run finished - ' + listfile  # Set up the subject for the email
   sendmail(body, subj)
except TwythonError as oops:
   if '503' in str(oops):  # If a 503 error, wait five minutes and continue
      print('Encountered \"503\" error. Waiting five minutes, and continuing.')
      body = 'Error while running ' + listfile + ': ' + str(oops) + ' at line number ' + str(startingnum) + '\n Waiting five minutes and continuing...'  # Set up the body for the email
      subj = 'Twitter unblock run had an error - ' + listfile  # Set up the subject for the email
      sendmail(body, subj)  # Email the error message to me
      time.sleep(600)
      print('Starting over at line number ' + str(startingnum))
      unblock(listfile, startingnum)
   elif '404' in str(oops):  # If a 404 error, move to the next line number, and continue
      print('This user no longer exists, waiting sixty seconds and then skipping.')
      body = 'Error while running ' + listfile + ': ' + str(oops) + ' at line number ' + str(startingnum) + '\n Skipping user and continuing...'  # Set up the body for the email
      subj = 'Twitter unblock run had an error - ' + listfile  # Set up the subject for the email
      sendmail(body, subj)  # Email the error message to me
      startingnum += 1  # Increment startingnum, so as to skip the invalid ID number
      time.sleep(60)
      print('Starting over at line number ' + str(startingnum))
      unblock(listfile, startingnum)
   else:
      print(str(oops))
      body = 'Error while running ' + listfile + ': ' + str(oops)  # Set up the body for the email
      subj = 'Twitter unblock run had an error - ' + listfile  # Set up the subject for the email
      sendmail(body, subj)  # Email the error message to me

sys.exit()

You can download the script here.

 

 

Site re-vamp

In my pondering about what to do with this web space, I’ve decided to scale back on the scope of my blog. Rather than just being a general, personal, life blog, I’m going to start crafting it toward my hobbies, gaming, and techie stuff. So I’ve done considerable weeding of previous posts, and changed up the header images a bit.

More to come.

Vacation 2018 was a success

We took a two week vacation, the first five days of which were spent finishing up the teardrop. We stayed close to home for the maiden voyage, going an hour south to Lake Como. We ended up staying at the Rock Creek Horse Camp, which is about a ten minute walk from the lake.

Image

Image

Image

From there, we headed up north to Lake Koocanusa, and found a little spot a few miles up a dirt road, right on Big Creek. We spent three days there. It was pretty great.

Image

Then we spent a night at Tally lake, but literally just the night. The mosquitoes were so bad that we didn’t even try to have breakfast there. We packed up and pulled out about 8am, and had breakfast at a little day use area a few miles down the road. I imagine Tally lake would be a great place to stay when the mosquitoes aren’t so bad. Huge campground, great beach.

Image

We spent the last few nights at Ashley lake.

Image

We’re back at work this week, but planning on going out again this weekend. Still deciding where to go next. We’re so thrilled to finally have the teardrop done, and on the road.

It’s part get-home-bag, and part backpack full of random shit I use just about every day

I walk a lot. I have occasionally made the six mile trek to and from work on foot, just for the heck of it.

Laptop.
VIM pocket reference.
Travel track ball, in a snazzy hard case.
Batteries, with various charging cables.
Various extra meds.
Knife.
Emergency blanket.
Small first aid kit.
Hand warmer, one of the old original Jon-E kind, which belonged to my grampa.
Zippo lighter with small bottle of fluid, and extra flints.
Pepper spray.
Extra socks.
Gloves.
Stocking cap, when I’m not wearing it on my head.
Compass.
USB drive with encryption keys, GPG keys, encrypted password database, and various personal documents.
Several flash lights.
Dog treats, dog bags, and a leash, since I tend to come across a LOT of stray dogs in the summer time.
Other odds and ends that aren’t coming to mind right now.
I’m working on a way to affix one of my solar panels to the outside of the thing, so that it can be easily attached and detached.

My last backpack was one I had for more than a decade. It went to Ireland with me. The only reason I got rid of it was that my dog peed on it, and I wasn’t able to get the smell out. I spent about $150 on this one last summer. At the time, I didn’t like shelling out that much cash, but it was worth it. This thing is built like a tank, water proof, and quite comfortable.

I’ve been wanting to put these patches on it for a while. Laure did it for me this weekend. The two army patches are from the two units I served in. 163rd Armored Cavalry on top, 40th Mechanized Infantry on the bottom. A Raspberry Pi patch that came with one of my older Pi’s, a Debian Linux patch that actually took a bit of hunting to find, an old Star Wars patch, and just barely visible on the other side is an Instructables patch. I’m trying to find an Arduino patch, but not having any luck there so far.

Thunderbird + browser

In case anyone else has wasted too much time trying to figure out how to change the browser that Thunderbird uses to open links in emails, it’s here:

  1. Go to Preferences (Menu Edit → Preferences).
  2. Click on the Attachments tab.
  3. In the Content Type and Action section set HTTPSHTTP, and FTP to Use google-chrome (or other desired browser).

Carry on…

Blowing my battery

So I’m building a tongue box for my teardrop trailer, that will contain the battery, power center, and charging station from the solar panels. I’ve been concerned about heat in that box, and was kicking around the idea of putting an Arduino controlled fan in there to keep things cool when necessary.

Yesterday, the maintenance guy at the library walks up to me, holding this big ass blower, says he found it in a pile of crap, and asks me if I could use it.

Hell yes, I can use it.

I ran the model and serial number passed Duckduckgo, and couldn’t find a datasheet on this thing. It says right on it that it operates on twelve volts. It only took about fifteen minutes of tinkering to figure out how to control it. It moves a lot of air, and should work perfect.

I’ll have that Arduino Micro, a temperature sensor, and a relay in there, and set this thing to kick on automagically when it gets to a certain temp inside that box.

Yay for old shit.

Your very own pile of shit

There is a pretty good chance that you’ve heard the term “maker” or “maker movement”, in the last ten years. The maker movement has been around for a few generations, under a lot of different names, but it’s seen a serious resurgence since the recession in ‘08 (us old cusses call it “ought eight”). Makers have become a thing for many reasons, partly because it’s just fun, but also out of necessity, since it’s much less expensive to build and modify your own stuff.

I got to thinking about this last night, standing in my garage, staring at a set of shelves built into the wall in the corner, which I refer to as “the pile of shit”. On these shelves is a bunch of bits and pieces of old, broken shit. I have to keep it under control, because the tendency is to keep hoarding stuff, and that can become a problem, especially if you’re married. It’s also kind of a pain in the ass to move with.

The pile of shit is a practice that I picked up from my grampa. My grandfather would have been ninety-one this year. He was a great guy, and a really good role model for me. I spent a lot of time puttering around in his garage with him. He taught me many invaluable lessons about self sufficiency, and tinkering with things to either improve them, or keep them running for years passed their normal life expectancy.

My grandparents lived through the great depression, during which, if you didn’t learn to re-purpose and repair things, you simply went without. I’m not just talking about mechanical stuff here, this applies to everything. My grampa repaired, re-purposed, and re-used everything, and my grandmother, my dad, and my aunts, NEVER went without. He was a damn genius when it came to fixing or improvising things around the house.

A perfect example of this is an old refrigerator that sits in my grandmother’s basement. I have no idea when they bought that fridge, but they owned it in 1964, when a nearby river overflowed, and flooded the entire town of Evergreen, Montana. I have seen photos of my grampa standing on his roof, with his little aluminum boat floating next to him. When the flood waters receded, grampa pulled all of the appliances out of the house, took them apart, dried them out, repaired them, and most of them continued to run for years. That fridge is the last of those appliances, and it’s in their basement, keeping soda ice cold, right now.

Granted, nobody builds things like that anymore. That fridge is a fucking tank. Regardless, it would not have run for as long as it has, if not for my grampa constantly tweaking and improving the thing. He’s been dead for almost twenty years, and that fridge is still humming right along.

Something else to think about here, is that nearly all American manufacturers have adopted a policy called obsolescence. People joke about it. They think it’s just an entertaining rumor, and that everything is just built shitty now-a-days. I’m sorry to say that obsolescence is a real thing, and it’s almost always a design consideration for most modern manufacturers.

Obsolescence is the practice of intentionally building things to stop working after a certain amount of time. The idea being that if you build a fridge that runs for sixty years, everyone who buys it isn’t going to buy another fridge for sixty years. Depending on your business model, this can be really bad for business. So in the early 1970’s, obsolescence was born. It took a while to catch on, but by the late 1980’s, it most certainly caught on. Unfortunately, it has resulted in today’s rampant throw-away culture, which has our land fills over flowing, our oceans and rivers and streams filling up with garbage, and it has the vast majority of us trained to needlessly buy, and re-buy, a lot of cheap shit.

Anyway, getting back to the pile of shit in my garage. I have repaired our stove, our dishwasher, our refrigerator, two of our toilets, and built and modified a bunch of random doohickeys around the house. Our family vehicle has reached that age where every few months, I’m out in the garage screwing with something on it. In such instances, when ever I need a part, the first thing I do is go out to the garage and dig through the pile of shit. It’s rare that I can’t find something that I can improvise to fix whatever it is that I’m working on. When the pile of shit fails me, I hit the local home resource center, which is one enormous pile of shit that the whole town contributes to. Buying new should be a last resort, but I get it. Some times you just have no choice, especially when dealing with complicated electronics. You would be surprised though, how often electronic components can be fixed if you spend enough time pestering people online for information.

Also granted, is that I’ve been a tinkerer, under the tutelage of a master tinkerer (grampa) since I was a kid. So I’ve had a lot of time, and a lot of expert guidance, building up a skill set. I’m telling you though, don’t let a lack of skills or experience get in the way of trying to fix something. Believe me, most of the crap you buy at Walmart is not as complicated as it might seem, and the internet is an endless resource of information. Once you fix one thing, you’ll be proud of that thing, and you’ll feel more confident fixing another thing. Pretty soon, you’ll be staring at a thing that works just fine, thinking it would work better if it only had this one minor tweak. You’ll be standing in your kitchen and notice that your fridge is making a weird, whirring noise, and a day later you’re popping in a used compressor that you found at the local community pile of shit for $15. Eventually, you have a pile of shit in your garage, but you’re spending a hell of a lot less money on cheap shit at Walmart, and you have a house full of things you’ve fixed, that you can brag to your friends about.

You’ll find yourself standing in an aisle, looking at a new thing, getting a feel for how sturdy it is, and how fixable it might be if it stops working. You’ll either put it back on the shelf because it just feels too flimsy, or dropping it into your cart because you feel confident you can get it going again if it breaks.

Maybe the things you’ve fixed aren’t shiny anymore, and they probably don’t have all the latest gadgets and doohickeys, but they work. You fixed them, you saved your family money, and those things will be points of pride for you for a long time.

Seriously though, don’t shop at Walmart. They’re evil.

Fuck Walmart.

Possibly switching distros

I’ve been a Kubuntu user for years now, prior to that, I used SUSE, played around with Fedora, and actually started my open source OS adventure on FreeBSD.

FreeBSD was pretty limiting by itself, there just wasn’t much out there for it. There were compatibility packages you could install that would allow you to run RPMs, but after a while I wondered why I was bothering, and switched over to actual Linux. I played with Arch and Fedora, and this was seventeen or eighteen years ago, which meant that installing Linux could be a trial. I found both of these to be ridiculously complicated. SUSE was fantastic in comparison. I want to say it was version 6.something-or-other. I can’t remember for sure.

I stuck with SUSE up to 9.something, not long after Novell bought them. I didn’t like where things were going then, but I had fallen in love with the Kde desktop. So instead of going with standard Ubuntu, which was defaulting to Gnome at the time, I dove into Kubuntu, and I’ve been using that ever since.

I’ve had no major complaints about Kubuntu. It’s been great. My whole family uses it and has had no issues, other than my youngest complaining about one or two Steam games that are not Linux compatible.

I won’t go into detail about why I’m wanting to move away from Ubuntu all together, because I could probably go on for pages on the subject. For the last few years, Canonical has been moving Ubuntu in some directions that I’m not so sure I agree with. I love the convenience that Ubuntu offers, but I’ve become so comfortable with Linux over the years that that convenience is more a matter of time saving than technical difficulty. Let’s just sum it up and say that my reasons are mostly philosophical.

I’ve been occasionally exploring other options for a little over a year. Gnewsense looked attractive until I ran the LiveCD. It’s years behind, even with the latest release. Also, it’s releases come agonizingly slow. So that was a turn off for me right away.

I’ve had dealings with CentOS at my previous job, and I’ll just say “hell no”.

I looked at Arch and one of it’s derivatives, Antergos, about six months ago, and the install was still overly complicated and I ran into problems getting either of them to install on four year old hardware. If the install is tough, I’m not even going to bother.

After a few IRC conversations, and reading over various forums, I’m going to give straight up Debian a shot. I’ve been running the LiveCD at work and it’s similar enough to Kubuntu that I want to check it out a little more in depth. So I’m currently backing up my laptop, and when that’s finished, I’ll install Debian and see what I think after a few weeks.

I realize that Debian’s packages are not as current as it’s Ubuntu relatives, but I’m not too worried about that. I’m not afraid of compiling things from source if I have to, but the little research I’ve done has turned up plenty of ways to get Debian reasonably up to date.

On a semi related note, I’ve been wanting to get Laure in front of the camera for a Linux wallpaper shoot, but as busy as things have been, that’s been backburnered with a whole bunch of other things I am putting off until I finish the teardrop. So no photo to accompany this post.

 

My first D&D 5e experience

I’ve been playing pen and paper RPGs since I was 14 years old. Nearly every great and fun memory during my teenage years somehow revolves around RPGs or related forms of nerdery. After college, life took over and RPGs took a back seat for a long time. A really long time, about 15 years or so. I recently turned 40, and only about five years ago did I start seriously getting back into pen and paper gaming. Oddly enough, in all this time I’ve never played D&D.

Last fall I picked up the three main 5th edition books and started looking for games. It was pretty discouraging. No local groups were looking for new players. All of the online games that I tried to get in on fell apart before they even started. So I decided that the only way that I was going to get to play was if I ran a game myself. I’m no stranger to GMing but it had been a really long time and I had doubts about running a system that I’d never played before.

To simplify things, I went down and picked up the Starter Set. The idea being that it came with an adventure aimed at new players, as well as a simplified rulebook and pre-gen characters. I thought it would be a good, introductory path for D&D.

Most of my friends play RPGs so it wasn’t tough to track down a few people for a game. Our friends Erek and Laurie both played 3.5 but it had been a long time, and they were both chomping at the bit to get into a game. Our flatmate (Heather) and I played Earthdawn together a long time ago so she was a shoe-in, although she’d never played D&D before either. I’ve long suspected that my girlfriend Laure (no ‘i’) would really enjoy RPGs and as soon as we started building her character, she was hooked and excited to play.

Everyone opted to build their own characters, rather than use the pre-gens. We got together a few weeks ago to do that and then this last weekend we had our first session playing through “Lost Mine of Phandelver”. All three of the girls went with female characters and for the sake of consistency, Erek decided to play a female as well.

Here’s what we ended up with:

Erek – Shemael, a tiefling paladin.
Laurie – Sylthea, an elvish druid.
Laure – Verona, a half-elf ranger.
Heather – Tilly, a halfling rogue.

Three of us were complete D&D noobs and Erek and Laurie were new to 5e. So we were all pretty much on the same page going into this. Laurie texted me throughout the week prior, explaining some of the differences she was seeing from 3.5e to 5e, and seemed very pleased with the changes and excited to play.

0619161917_1
We started on Sunday night at about 6pm, after I BBQ’d while they put the finishing touches on their characters and ironed out some back story. I’d spent a little time the previous week, reading up on the first section of the campaign, making notes so as to avoid reading straight from the book anymore than I had to, and making a few minor changes to the campaign. I’d also purchased a battle mat and wet erase markers, which showed up just in time for our game.

It went well. Everyone jumped right into character and right from the beginning, the game seemed to flow very well. The first battle with the goblins on the trail had a few hiccups while everyone got used to the combat system but by the third or fourth turn, combat was moving nicely. For this I employed an Android app called “D&D Health” to keep track of enemy health, and a small white board for initiative tracking. Although next time I think I’ll just use a google sheet for initiative tracking.

IMG_20160619_204302_1
Erek found Shemael’s intimidation skill to be quite handy and used it numerous times to frighten away or temporarily startle enemies long enough for her companions to move in and do the dirty work. Also, her fire resistance was useful when she charged into the eating cave with a cask of lamp oil, taken from the wagon load of provisions, and threw it on the fire, burning and weakening most of the goblins enough to tilt the playing field in the groups favor.

Heather’s rogue proved quite deadly, easily sneaking up on more than a few enemies and dispatching them quite quickly, also doing considerable damage to the boss bugbear before the group moved into the last cave and finished him off.

Laure used Verona’s animal handling skills several times to get passed the initial wolf kennel and to deal with the boss’s pet wolf, as everyone was very reticent to kill any of the wolves needlessly.

Laurie, unfortunately, was plagued with absolutely terrible dice rolls all night long. She rolled mostly in the low single digits, even after switching dice and attempting several interesting rituals trying to improve her luck. Still, Sylthea did do well and her thunder spell, which I can’t remember the name of, was instrumental in defeating the boss.

All of the players fell right in step and worked very well as a team, coming up with some great plans.
0619162143_1
I’ve never been big on using miniatures in RPGs. I’m a big fan of “theater of the mind” and I feel that too much miniature usage detracts from what’s going on in the players’ heads, and makes it feel more like a board game. I do employ it a little bit though, using drawings instead of tiles or detailed maps, so as to allow the players to still visualize all of the details on their own. Miniatures however, are expensive. I just happened to have a set of deluxe, female Munchkin game pieces in our Munchkin collection, and those worked perfectly for the players. We used other random items to denote enemies on the mat.

We left off with the players leaving the cave to rejoin Sildar Hallwinter at the wagon, several miles back along the trail.

My GM skills are pretty rusty so I did accidentally give away some minor details here and there. I also need to work on my exposition a bit, but over all I think I got through it pretty well. I’ll need to take more notes on the next part of the campaign, as I’d like to avoid reading from the book as much as possible. Everyone told me after the fact that they thought I did well and that they had a good time, so I’ll pronounce it a success.

The only bad point was the battle mat. I got if from Wiz Dice on amazon and if I’d bothered to read the reviews, I would have seen that everyone was having trouble removing their drawings from the mat. I even used the suggested wet erase markers and after considerable scrubbing, still didn’t manage to get some of the ink off of the mat, and in fact started to remove some of the grid instead. I tossed that map, gave it a shitty review on Amazon and instead ordered a replacement from Chessex that received high marks all around on Amazon and on Reddit. That should be here in plenty of time for next weekend’s game.

D&D 5e was very easy to pick up, for everyone, and we all had a great time and really enjoyed the game. Everyone is excited to resume the adventure next weekend.

A teardrop?

More camping with Mom and Dad, 1977-ish. Camp bathing was much easier at that age.

Camping with Mom and Dad, 1977-ish. Camp bathing was much easier at that age.

I’ve been an avid camper since I was a kid. My family on my dad’s side is quite outdoorsy, and as a result I spent a lot of time tenting and camping in campers when I was little. I discovered backpacking in the sixth grade, during a brief stint in the Boy Scouts, and that stayed with me all through high school and the first few years of college. I did a lot of hiking and backpacking.

My brother and I in Yellowstone park in 1984. I'm the one in the cowboy hat. Don't hold that against me.

My brother and I in Yellowstone park in 1984. I’m the one in the cowboy hat. Don’t hold that against me.

 

 

 

 

 

In my twenties, I backed off to mostly just car camping. Pull up to a camp site, unpack the car/truck, throw up a tent, get a fire going and inside of an hour you’ve got a camp site. During my single years I had a nice little Outback Sport, which was perfect for me, my dog and a mountain bike.

A dog impatiently waits to hit the road on our next adventure in Wyoming.

A dog impatiently waits to hit the road on our next adventure in Wyoming.

When my girlfriend and I got together, she already had two children, and we managed to take that same Outback Sport on a two week trip through Yellowstone park and part of Wyoming, and then back home to Montana. It was cramped. We had to put a big cloth topper on the car, which we dubbed “the hamburger” because it vaguely resembled a giant hamburger sitting up there. My poor dog had just enough space in the back to curl up comfortably, but it was awfully tight for everyone. That trip convinced us both that it was time to join the ranks of middle class Americans everywhere, and buy a minivan. We still own that Dodge Grand Caravan and while it’s had it’s problems, it’s served us pretty well. We’ve taken many road trips, some camping trips, with and without the kids, in that van.

Camping with friends, 2013.

Camping with friends, 2013.

Last Summer however, Laure floated the idea of getting a camper. I’ve been firmly against that my entire life. Maybe when I hit my sixties, but for now, no big, expensive camper for me. Then not long after that, she came across a Youtube video about teardrop campers. Not the full size campers, but the little ones just big enough to sleep in, with a hatch that lifts up on the back to reveal a galley. I thought it was pretty cool but didn’t really consider it an option. The idea stuck in my head though and a few weeks later I watched that Youtube video again.

Camping with our eldest son and his friends in 2014.

Camping with our eldest son and his friends in 2014.

The idea of being able to just back that puppy into a camp site and be set up in ten minutes really appealed to me. Weekend trips to see friends three hours away would be much easier, as well as road trips and vacations. Plus, there is clearly a massive community built around these things, with conventions and get-togethers all over the country every year. That could be a lot of fun too.

I thought about it all day, and then we talked about it as we crawled into bed that night. We sat and watched more videos about them, did some reading on forums and news articles and before we went to sleep, we’d made up our minds that we were going to get a teardrop trailer.

Campground next to the interstate in Idaho, 2013. It rained that night and we woke up to a lake inside the tent. That tent went right back to Bob Ward's.

Campground next to the interstate in Idaho, 2013. It rained that night and we woke up to a lake inside the tent. That tent went right back to Bob Ward’s.

A week or so of research resulted in us settling on a Little Guy, 6×10 Silver Shadow with just about all the options. To get one locally was going to cost about $17,000. That’s about what we paid for our van. About $2500 of that price tag was just shipping, because the local dealer only kept one show model and had none in stock. More googling turned up lots in nearby states. So we decided that the following spring we would secure a loan and I would make a trip to wherever and pick one up. A few hundred dollars in gas, sleeping in the van and eating on the road, I could probably do it in a weekend and save us $2000 or more.

A few months went by with us occasionally talking about it, revising options, thinking of ways that I could build some of those options in on my own, and looking at used models. We figured we could probably get it down to around $12000 if we bought used and made some modifications on our own, in lieu of some of the manufacturer’s options.

Holland Lake, Montana. 2014.

Holland Lake, Montana. 2014.

Fast forward to February, and Laure suggests that maybe I build one instead. I dismissed that idea almost immediately. I’m pretty handy with electronics and I can manage my way around simple wood working and home maintenance, but this would be a big project. I found the idea pretty intimidating. I said I didn’t think I’d be able to do it and at the time, that seemed the end of that idea.

As a tinkerer in electronics and general home hackery, I spend a lot of time on instructables.com. A few weeks ago, I just happened across plans for a teardrop camper. Granted, the particular plans I found were a bit hack-ish, in a bad way, and I doubted the structural stability of the finished product but after reading through it and looking at all the photos, I found myself mentally correcting many of his mistakes and thinking up better ways to accomplish what he was trying to do. I realized that yes, this was indeed something I could tackle. It wouldn’t be easy, but it would be doable even at my level.

Camped on an island on Hungry Horse Reservoir, 2015.

Camped on an island on Hungry Horse Reservoir, 2015.

I did more research, looked over plans and also a few basic how-to guides that went into great detail about materials, do’s and don’ts, and lots of great advice and ideas. I then spent a few days watching Youtube walk-thru videos. Pretty soon, I found myself with a two page parts list and combing over various home improvement and automotive websites, pricing out parts and materials. A few more days went by, I revised my list a few times, rounded up on everything, added about $1500 for x-factor, and came to an estimate of about $6500 to build one on my own.

So that’s the plan now. We’ll take out a personal loan and hopefully I’ll start piecing the thing together in my garage within the next month. I have no idea how long it will take me. I intend to document not only the build, but the subsequent trip we’re planning on taking it on this summer.

The view from our campsite on an island on Hungry Horse Reservior. 2014.

The view from our campsite on an island on Hungry Horse Reservior. 2015.

As I said, I don’t think it’ll be easy. It’s by far the biggest project I’ve taken on, but it’s certainly doable.