What does my dog do all day?

My wife Kristin and I were talking about our dog, Wendy. We were wondering, what does she do all day while we’re at work?

Wendysaurus Rex
Wendy likes to stand on her hind legs.

This inspired the WendyCam. Our little pup is insanely curious, and always trying to get people food. In fact, we only recently learned that she can leap onto our kitchen table! But does she do this when we’re gone? Using a Raspberry Pi and some extra hardware, I built an always-on webcam to stream and take pictures when motion is detected.

One of the really cool things about this project was how much I learned about Linux as an OS. I learned more about how permissions work, and this was a great exercise in using Bash, as I did this entire project by logging in through SSH.

For this project I used the following:

– Raspberry Pi Zero
– USB wireless network adapter
– Raspberry Pi Camera module (You could also use a PS3 Eye Camera or any other USB camera)

Steps I followed:

  1. Prep Raspberry Pi Zero
  2. Install Motion
  3. Configure Motion
  4. Watch dog and be happy

1. Prep Raspberry Pi Zero

Wendicam on Raspberry Pi Zero
Wendycam on Raspberry Pi Zero

I choose the Pi Zero because of its small size. I want the computer to be fast so I loaded it with Raspbian Jessie Lite. This image of Raspbian does not come with a GUI, so you have to access it totally through the command line. Once the Pi was setup correctly, I connected my Pi Camera module camera. I went with this camera because of its small form factor. To use it, I had to go into the Raspberry Pi’s configuration to activate the camera. I could use almost any other USB camera. Additionally, I have tested it out with an old PS3 Eye camera I had lying around with no issues. I then plugged in a USB WiFi adapter so that the WendyCam can connect to the internet.

IMG_20170605_213310After getting Raspibian ready to go I created a case. It’s pretty fancy. I used electrical tape and a lunchmeat container.



2. Install Motion

Why Motion? Well, Motion is an open-source software that is pretty simple. It does not take many resources to run, and there is a ton of documentation out there.

sudo apt-get install motion

That installs the program. Next, I opened up a file that would allow the daemon to run on startup.

3. Configure Motion

Save the changes and open up the /etc/default/motion file and make the following changes:

sudo nano /etc/default/motion


Next, I opened up the program’s configuration file. This is what really controls the software. Starting out I edited a few things to get a higher resolution and allow streaming.

sudo nano /etc/motion/motion.conf
# Image width (pixels). Valid range: Camera dependent, default: 352
width 1920
# Image height (pixels). Valid range: Camera dependent, default: 288
height 1280

# Restrict stream connections to localhost only (default: on)
stream_localhost off

# Threshold for number of changed pixels in an image that
# triggers motion detection (default: 1500)
threshold 3000

# Picture frames must contain motion at least the specified number of frames
# in a row before they are detected as true motion. At the default of 1, all
# motion is detected. Valid range: 1 to thousands, recommended 1-5
minimum_motion_frames 4

# Target base directory for pictures and films
# Recommended to use absolute path. (Default: current working directory)
target_dir /var/lib/motion

After this, I forwarded port 8081 from the internet to the Wendy Pi’s internal IP address. This allows me to view the WendyCam from my phone.

4. Watch dog and be happy

To start I type:

sudo motion

And there we go! Kristin and I can watch Wendy all day long! Turns out she mostly sleeps. But, she looks adorable doing it.


Takeaways and future thoughts

Unexpected problems:
The settings within Motion are all over the place. It took a bit of time to optimize it for the Raspberry Pi camera module. The default settings also took a ton of pictures. At least 1GB a day. Tweaking the settings slowed this down.

I also learned that I couldn’t easily delete the photos in the /var/lib/motion folder. Although this was eventually solved by changing the app permissions

sudo chown pi /var/lib/motion
sudo chmod 777 /var/lib/motion

I also stopped it from taking pictures all together so we only use it to stream now.

Future Concerns:
As always, what happens if my IP address changes?

Future Enhancements:
I need a camera case! It’s great that I have the camera up and running, but I want to protect the camera cable, and maybe mount the Wendycam on the wall.

I received a much help from the authors of the following sites:

Google Phishing PSA

There was a phishing email going through Gmail earlier today, and Google​ pretty much solved the problem, but… Here’s some thoughts.

Don’t open it. It is from hhhhhhhhhhhhhhhh@mailinator.com, and looks like someone is sharing a document with you. They’re not. 

Delete it.

If you already opened it, change your password ASAP.

Also go here: https://myaccount.google.com/permissions and remove permissions for “Google Docs” if it appears there. This is a really well-done phishing attack.

Mike defines tech

Hey, there! I’ve got a brief update. I’ve added a “Tech Terms” page the website. As I write these articles, I find that I’m constantly defining some terms that I use. Now, this blog is for beginners and tinkerers alike, so I want to cater to everyone. Going forward, if you are wondering what I’m talking about, click on over to the Tech Terms page and learn something new.

In the coming weeks, I have several articles in the works, and I can’t wait to share my new projects with you!

I Built a PC!!!

This is a project I wanted to do for a long time. When I started studying for my CompTIA A+ cert, I was shocked at how much I learned about the hardware side of computing. My current laptop, a great Sony Vaio, was bought in 2009 after my college laptops motherboard finally croaked. Freshly loaded with the new Windows 7 OS, my Vaio served me faithfully until a month ago when the errors started to pile up. In an effort to health the machine, I attempted to load Ubuntu onto it. Ubuntu is a Debian-based Linux operating system that requires fewer resources than Windows to run. But alas, the strain was too much for the Vaio, and it is no more.

But now what? At home, we have a Chromebook and a laptop that kind-of-works. But I want something with a little more power. Something that I can upgrade over time. Computing constantly changes, and it would be able to improve my machine over time. Spend $200 every few years instead of $700+. Plus, building would be a fun project.

Where do I start?
1. Defining my needs: To know what to build, I need to know why I’m building it.
2. Choosing and buying the parts: I need to buy each individual part of my machine. So I need to decide what will meet my needs, and where to purchase it.
3. Assemble the computer: I need to put the parts together, duh!
4. Install the OS: To use the computer I need to install Windows or a Linux system.
5. Configure PC for use: Setting up the PC to my preferences.

1. Defining my needs:

What do I plan on using this computer for? Coding, generic Raspberry Pi support, picture/video editing, and some gaming. For my purposes, picture/video editing will probably require the most power, due to the size of the files. But, I’m not a professional, and nor do I play games that are new so I can make some sacrifices there for power.

2. Choosing and buying the parts:

To assemble my plan, I went to PC Part Picker ###pcpartpicker.com. You can view my parts list here: https://pcpartpicker.com/list/jbPZD8. This list is actually modified from a build featured at Lifehacker. I’ll go down this list talk about each component, and why I chose it.

  1. Intel Core i3 6100 3.7GHz Dual-Core: The processor is the heart of a computer. It’s what controls how the computer functions. Much of what I read suggested that I go for an i5 quad-core processor, which is a newer and more updated processor from Intel. As stated above, I don’t think I need that power. the i3 should work fine for me. If it turns out it isn’t enough, I can always replace it, or by a video card at a later date. In the near-term, going with the i3 saves me $100-$150.
  2. MSI H110M Gaming MicroATX LGA1151 Motherboard: While there are a million options when picking a motherboard, I feel a few questions really narrows it down. First, are you using an AMD or Intel Processor? These two companies use different designs, which limits the type of board you can use. Next, what form factor do you want? I wanted a MicroATX, as this is the current standard. And finally, what type of interfaces do you want? VGA, HDMI, USB 2.0, USB 3.0, USB C, and audio connections are all items to take into consideration. The MSI board suggested by LifeHacker ticked off everything I wanted, so I decided to go with it.
  3. Corsair Vengeance LPX 8GB (1 x 8GB) DDR4-2400 MemoryRAM (Random Access Memory) is the memory that used by PCs to run programs. RAM generally comes into play when running programs, so I want to have enough. Modern 64-bit operating systems have an upper limit over 17 million GB of memory, but I don’t need that much. Yet. 8GB is plenty, and should I need more, there’s an extra slot to place another stick of RAM in the future.
  4. Kingston SSDNow UV400 120GB 2.5″ Solid State DriveSSD’s (Solid-state Drive) are the future. Probably. They are starting to replace traditional hard drives. They are less prone to data loss from being moved around, and the memory in the SSD can actually be used in place of RAM in some cases. The other advantage is a faster read/write capability. Programs loaded onto the SSD will load faster than ones loaded on a traditional HDD. This is where my Operating System will be loaded.
  5. Seagate BarraCuda 1TB 3.5″ 7200RPM Internal Hard Drive: Here is the traditional hard drive (HDD- Hard disk drive). Any media I have (pictures, movies, music) will be stored here. Why bother having this when I have an SSD? Byte for byte, a traditional HDD is significantly cheaper. That’s why this 1TB HDD drive is less than a 120GB SDD.
  6. Cooler Master N200 MicroATX Mini Tower Case: I went with the suggest tower here. This is the case that will hold all of the components described above. This one has plenty of space inside and two fans to ensure adequate airflow through the computer. That’s important because computers can get hot. Sometimes they get so hot, parts melt. Then it gets really expensive.
  7. EVGA 500W 80+ Bronze Certified ATX Power Supply: Again, I went with the suggested PSU (Power Supply Unit). 500W is more than enough power, with plenty to spare, and allows me to expand in the future.

Once I made this list I went to Amazon and purchased them. With PC Part Picker, you can actually track the prices of different components over time from several different sites. I found that Amazon tended to have the cheapest price at any given time. On the odd chance that they were more expensive, it was only by $1-$4.

Now it’s time to Build!!!

3. Assemble the computer

This whole process went much smoother than I anticipated. I followed several online instruction lists, watched a couple YouTube videos, but at the end of the day, the paperwork that came with the components was the most useful tool I could have asked for. So I grabbed my trusty screwdriver and got to work.

I started with assembling the motherboard first. I place the processor in its slot and followed that up with placing the cooling fan on top. This fan will pull heat off the processor, stopping it from, well, overheating.

Next, I plugged in my stick of RAM. Too easy.

Following that, I installed the PSU into the bottom of the case, and then connected the motherboard to the side of the case.

I followed up with installing the SSD and HDD.

The last step was plugging everything in. This took quite awhile, but fortunately, nearly every connection has a unique shape, and most cables were labeled.

I plugged in the PSU, pressed the power button, and voila! I got the BIOS!!!

4. Install the OS

I decided to use Ubuntu as the OS for my PC. I wanted to save $120 by not using Windows, and I wanted a traditional desktop feel. Ubuntu is great. It’s easy to use, it’s stable, and there is a huge community of support. Plus, it’s built on the Debian branch of Linux, which I’m familiar with thanks to my time using Raspbian.

I downloaded the image off of the Ubuntu website. I used an arcane Windows program called Win32DiskImager to flash the image to a USB Drive. The Raspberry Pi Foundation suggests using a program called Etcher. After installing Ubuntu, I will learn I don’t need extra programs, the OS has an amazing formatting tool and writer built in!

Once the flash drive was created, I booted up the computer and received instructions to try Ubuntu, or install it. I chose to install it. I followed the instructions, and I was ready to go quickly.

As an aside, most modern computers will boot an OS and run it from a flash drive. This is an excellent opportunity to try out different flavors of Linux, and see what you like the most.

5. Configure PC for use

Now that my computer has an OS, I can use it! I took some time to set up the display as I wanted, and download any additional programs that I want. Ubuntu comes with LibreOffice already installed, so I had an MS Office type suite installed. I also downloaded Chromium to use as a web browser. This list will grow as I move forward using this machine more and more, but until then, I’m psyched to play with my new toy.

Takeaways and future thoughts

Unexpected problems:
There was some difficulty loading Ubuntu. I was able to load it on my first boot, but then something broke during the install. Turns out my flash drive was bad. So grabbed a new drive, flashed a new image, and was good to go.

Future Concerns:
There is a small concern Ubuntu won’t work for me, and I’ll need to switch to Windows. But that’s a bridge I’ll cross when I need to. Otherwise, I can’t think of anything that I’m worried about right now.

Future Enhancements:
I may get a graphics card in the future, that could extend the life of the computer for little money. I’ll also probably add a webcam. Why not chat with people?

I received a much help from the authors of the following sites:

I made my ownCloud!

wp-1491187033641.jpgHave you heard the saying, “There Is No Cloud It’s Just Someone Else’s Computer”? And have you ever thought about what would happen if that person’s computer disappeared overnight? While the chances of Google or Dropbox disappearing are slim, these things do happen. After my wife and I got married, we started discussing how we’ll save all these digital photos from our wedding. We have them on a flash drive and on our Google Drive, but I wanted more control. It was time to build a Helmers Family Dropbox.

Why did I choose ownCloud? ownCloud is open source, to it is free and transparent. It has an app at the Google Play Store so I can backup photos from my phone. I happen to like the interface. Finally, there is a lot of community support and needed to rely on their help.

For this project, I used a full-sized Raspberry Pi 3. This model includes a built-in wifi card, 4 USB ports, HDMI port, and an ethernet jack. It also has a more powerful processor than the Raspberry Pi Zero, which is what I wanted. I also bought a 1TB Seagate External hard drive. This hard drive would be what our data would eventually be stored in.

Below I’ll go through the steps of building my ownCloud.

1. Raspberry Pi Prep
Basic instructions are located here

2. Build a Webserver
-I’m essentially building a website that I can store pictures on. To build and access a website, I need a server.

3. Add SSL to Webserver
-I don’t want people to be snooping and intercepting my data when I upload information, so I’m going to include a security certificate that created a secure message between my device (client) and ownCloud (server)

4. Install ownCloud
– ownCloud is an open source program that mimics Dropbox. I chose it because it has a mobile app for Android phones, and an easy to understand interface. There is also a ton of support on the web for any troubleshooting needs.

5. Prep and Mount hard drive
-The Raspberry Pi needs to know where to store my pictures, and the 16GB SD card is not enough space. I must point ownCloud towards the external hard drive.

6. Configure access to my phone, the internet, and sync data
-Time to make the device usable. Here I’ll get the program up and running, and then sync it to my phone and start copying files over.

1. Raspberry Pi Prep:

The easiest part. I used Jessie Lite with no GUI in order to save some space on the Pi and decrease its need for processing power. Once the Pi was setup, I ran apt-get update, to ensure all the package lists were current.

I also setup a static IP address for the Raspberry Pi on my local network. I went into my routers settings and used the DHCP Reservations feature. In this case, it was

2. Build a Webserver:

The web server was the second easiest part. I ran the following commands:

sudo apt-get install apache2
sudo apt-get install php5 libapache2-mod-php5 -y
sudo service apache2 restart

This installed an Apache webserver and PHP (a programming language used on the web). This forms the foundation of how I will access my ownCloud. To test that the web server was setup correctly, I navigated to my Pi’s local IP address, This brought up a default webpage.

3. Add SSL to Webserver:

This step is all about enabling HTTPS. Our friends at Sidewaysdictionary.com explain it the best: “It’s like living in a glass house. With HTTP, you have to bear in mind everything is unencrypted and theoretically open for others to see. That’s fine for some activities but gets awkward with others. With HTTPS, you can draw the curtains and close the shutters.” This ensures that regardless of where in the world I’m accessing ownCloud, no one else can see my data.

Here we go:
First, I needed to create a folder to store the security certificate.

sudo mkdir /etc/apache2/ssl

Then using openssl I generate a certificate and key.

sudo openssl req -x509 -nodes -days 1095 -newkey rsa:2048 -out /etc/apache2/ssl/server.crt -keyout /etc/apache2/ssl/server.key
nano /etc/apache2/sites-available/default-ssl.conf

After creating the key I replace the placeholder SSL Certificates (SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem and SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key) in /etc/apache2/sites-available/default-ssl.conf with the keys I just created (SSLCertificateFile /etc/apache2/ssl/server.crt and
SSLCertificateKeyFile /etc/apache2/ssl/server.key).

Then I activate the encryption.

sudo a2enmod ssl

And restarted Apache

sudo service apache2 reload

Boom, I have a HTTPS site!

4. Install ownCloud

I followed the instructions found on the ownCloud website:

sudo wget -nv https://download.owncloud.org/download/repositories/stable/Debian_8.0/Release.key -O Release.key
sudo apt-key add – < Release.key
sudo sh -c “echo ‘deb http://download.owncloud.org/download/repositories/stable/Debian_8.0/ /’ > /etc/apt/sources.list.d/owncloud.list”
sudo apt-get install owncloud

After ownCloud installed, I had to redirect the default Apache webpage to ownCloud. I completed this by editing lines within the “000-default.conf ” file. I entered:

sudo nano /etc/apache2/sites-enabled/000-default.conf

Within the 000-default.conf file, I changed the DocumentRoot to /var/www/owncloud. This redirects any port 80 (HTTP) traffic on the Raspberry Pi from the Apache Default page to the ownCloud Default page.

Expand ownCloud ability to upload:
Now, I want to make sure ownCloud can upload any files I want it to. I edited the settings in a couple of files. ownCloud can upload files up to 2GB. These edits will allow me to do that.

sudo nano /var/www/owncloud/.htaccess
hp_value_upload_max_filesize 2000M
php_value_post_max_size 2000M
php_value_memory_limit 2000M

sudo nano /var/www/owncloud/.user.ini

wp-1490186169806.jpg5. Prep and Mount hard drive

This will allow ownCloud to store data on my 1TB external drive. Why? The 16GB SD card within the Raspberry Pi is nowhere near large enough to store all of the files I want.

I need to format the drive to NTFS. This is a format that Windows can read, so down the road I can view the contents of the drive on a Windows computer if needed. I need to install a formatting program and then format the drive.

sudo apt-get install ntfs-3g

Then I formatted the drive to NTFS

sudo mkfs.ntfs /dev/sda1 -f -v -I -L untitled

Next, I made a directory to mount the drive to, a permanent location ownCloud will always know to look.

sudo mkdir /media/ownclouddrive

Now I needed the UUID. This is a unique identifier on my external drive. After updating some files, anytime the Raspberry Pi detects this UUID, it will connect it to the /media/ownclouddrive directory that we just made.

Detect the UUID with

sudo blkid

Open the fstab file

sudo nano /etc/fstab

Paste the following: UUID=”UUID from blkid” /media/ownclouddrive auto nofail,uid=33,gid=33,umask=0027,dmask=0027,noatime 0 0

6. Configure access to my phone, the internet, and sync data

Initial Setup: Now that ownCloud is up and running, it’s time to set it up! Through a web browser, navigate to the Pi’s local IP address. or I received a certificate error message, but that is OK. I just clicked on it. That error shows up because your browser sees the certificate, but does not recognize it as trusted. But I built it, so I trust it.

The first action ownCloud will have you take is to create an admin account. Do that. Then select the storage & database option. Through that link, direct ownCloud to /media/ownclouddrive. This tells ownCloud to store data on your external hard drive.

Enable access from the outside world. I forwarded TCP port 443 (HTTPS) on my router to my Pi. This means that if I enter my external IP address and point it toward port 443 (XXX.XXX.XXX.XXX:443), I can access ownCloud from anywhere on Earth.

Download the app from your preferred app store, Google or IOS. After installing the app, it was straightforward to set it up.

You can also download desktop clients, but I have not played around with that yet.

Take some time to dive into the literature at owncloud.org, as there is a ton of settings to tweak. You can even run your own email server or version of Google docs!

That’s it. Enjoy your “own” ownCloud!

Takeaways and future thoughts:

Unexpected problems:
I made so many mistakes. I constantly edited wrong files, mistyped commands… I eventually just wanted to start from scratch but wanted to overwrite what I have already edited. It took awhile, but I finally found the command to do that with:

sudo -o Dpkg::Options::=”–force-overwrite” apt-get install apache2

Future Concerns:
As always, what happens if my IP address changes? I need to find a permanent solution. I am also curious to know if I can really read the data on the external drive from a Windows machine. This is tricky to test, as I don’t want to lose what I’ve already stored.

Future Enhancements:
I want to sync my already existing Google Drive and Photos with my new cloud. I will have to look into that in the future.

I received a much help from the authors of the following sites:



Ads? What Ads?

wp-1490186202317.pngFor the last month or so there has been a noticeable decrease in the number of ads that
appear on our network. Why? I installed a Pi-hole. Using a Raspberry Pi Zero, the same one from my OpenVPN project, I installed a program call “Pi-hole”. This nifty little piece of software shuttles off ad requests into a black hole. It does this by acting as a DNS/web server, identifying ad domains before they download, and sending them down a virtual black hole.

What is DNS?
DNS stands for Domain Name Servers. To quote sidewaysdictionary.com:
“It’s like a contact list on your mobile phone. You know your correspondents by their names but the contact list has telephone numbers and postal addresses. When you want to go to a particular website, you look up the site’s name (such as http://www.google.com) in the Domain Name lookup service and get back from that the Internet Protocol address of the destination Web Site. ”

Pi-hole has a list of millions of ad domains, and whenever is sees one of those addresses, it throws it way.

This project only had two steps for me.

  1. Install the Pi-hole
  2. Configure DNS settings on my router

1. Install the Pi-hole

This was incredibly simple to get up and running. I simply ran one script in the command line:
curl -sSL https://install.pi-hole.net | bash

This is from the Pi-Hole.net instructions, and it really is that easy! After that script runs, it’ll ask you some questions, and after that, you’re good to go!

2. Configure DNS settings on my router

This can be a bit scarier, but if you’re comfortable enough with a Raspberry Pi, it won’t be that bad! I logged into my router by entering the router’s local IP address into a web browser ( I navigated to the DHCP settings and setup a static DNS using the Pi’s local address ( This routes all traffic through my Pi, cleansing the ads from it.

3. Update OpenVPN settings (I added a step)

OpenVPN uses a default DNS of, which is Google’s DNS servers. I want to change that to use my Pi. First I edited the DHCP options in the server.conf (located /etc/openvpn/server.conf) file, which directed the VPN’s tunnel to the new Pi-hole DNS server. I also had to create a new file in the dnsmasq.d directory (located /etc/dnsmasq.d/) called 00-openvpn.conf . Here I added the line “interface=tun0 “.

This is important. The Pi-hole is only listening to my eth0 network interface (ethernet), and not the tun0 (VPN virtual tunnel). This file enables the Pi-hole to filter data coming from the VPN.

Why go through this trouble for my phone? Blocking ads while using my cellular connection can save data. Going through my VPN stops those ads from loading, I could save quite a few MBs per month.

Screenshot_20170321-203750.pngOverall, this was a fun little project. It was simple, and I enjoy looking at the stats. In this image, you can see what our network traffic is like while sleeping, and what it changes to when we start using our phones in the morning!

Another great aspect of the Pi-hole, is its user interface. By using any web browser on my local network, I can go look at stats and settings. In this case, I navigated to Here I can manipulate the white-list and black-list of what sites are allowed on my network.

Takeaways and future thoughts:
Unexpected problems:
Port 80. The Pi-hole creates a small web server that uses port 80 (HTTP) to communicate the admin console and direct ad traffic. I was trying to set up a separate web server, and I couldn’t figure out why it wasn’t working. It’s because my Pi-hole was blocking port 80. I have not solved for this yet.

Future Concerns:
I can’t use port 80 for anything else on this Pi. For now, that’s ok. As anything public facing should be using HTTPS (which is more secure), or port 443.

Future Enhancements:
Maybe use this to monitor traffic, and look for unusual spikes in DNS requests. This could identify malware or bots on my network.

Follow the developers on GitHub here: https://github.com/pi-hole

Learn more at pi-hole.net

I also had some troubleshooting help from https://www.reddit.com/r/pihole/comments/5oh4ef/protip_getting_openvpn_and_pihole_working_together

Why is Mike Learning Tech?

My Career Change:

In June of 2016, my wife Kristin received an amazing position working with young adults with autism, and I had was offered a choice. Stay at my current job, or jump ship. My then employer had a history of letting people telecommute, so that was one option, but I wasn’t sure what I wanted.


I was nearing my 4-year anniversary with my then employer. I spent much time over the previous year trying to figure out what was next for me. My employer had few options for a lateral move and even less for promotions. In fact, the majority of my co-workers had been doing the same job for years, with no real growth options. I say “real growth options” because while there were pieces of training and workshops, it never equated to upward mobility.

It was time to take the leap. I quit.

I hate job hunting. It’s the worst. There is a lot of rejection, and you will probably never learn why another candidate was selected. About a month before I left my job, I received my A+ Certification through CompTIA. This was an effort keep myself engaged by learning new skills to help me move forward in my career. With this certification in hand, I decided to switch careers. I was going to find an entry level IT job. It took a while, but I finally found something. I found a placement agency who was able to look at the sum of my resume, not just my lack of IT experience. This brought me to where I am now. A stable job where I am picking up some first-rate experience to get me where I want to go.

My lessons here? Don’t settle. I wasn’t satisfied with where my career was going, so I took charge. I tried to make it work where I was at, but after I exhausted those possibilities, I moved on. Even when looking for work I didn’t’ settle. I was fortunate enough that my wife was making enough to support our family, allowing me to ensure that I took the right job, not just the easy job.

Many of the projects on this website come from my attempts to learn more about networking, programming, and how computers work. It’s been a long, fun journey, and I can’t wait to keep going!