One of the most common questions we see here is how to show experience and expertise when you are just starting out or have no professional IT experience. Creating a resume and convincing employers to give you a chance can seem insurmountable when your only job experience is working at the local grocery store or your college bookstore. Even if you do have some professional experience, working towards a promotion or switching to a new field can be incredibly difficult if you are not able to show you have experience with the technologies employers are looking for.
Why Not Just Get Certified?
Certifications, of course, are a big help to showing experience. And micro-certifications (check out the CloudAssessments.com open beta if you haven’t already!) and technology-focused certifications are slowly becoming more popular as well. These are a great way to show expertise in a specific area; however, they don’t exist for every technology and a certification can only get you so far on its own. Employers want to see and discuss work you’ve accomplished with the technology, and certifications make for a short (although still valuable!) conversation. This is where you can use projects that, while not work related or from a professional background, can be listed and discussed to show how you’ve used technology in a real setting. Even if you were not paid for it, if you set up a personal web site in AWS with cross-region failover, a lambda script to notify you when someone leaves a comment, and CloudWatch event logging, that is still valid experience that you can list on your resume and discuss in an interview.
What Personal Projects Count as Experience?
Any project that you can relate to a technology or process used in a work environment can count as experience. There is no hard rule that says any project is or is not good experience. So with no definite answer, what sort of projects should you work on? Well, there really is no right answer to that; although, certain types of projects can help more than others. It all depends on what kind of experience you are looking to show. The best projects combine what you are learning and a product or service you will maintain and use or can publish and share. As an example, I’m going to walk through the process I went through with setting up and improving my Plex media server. The below project and events took place over the course of several years now. I have worked on this project in my spare time and I still use this today with even more ideas for ways to work on and improve it in the future as well.
I have a guide series that will cover the setup of each these as well. If you’d like to set up your own Plex server see part 1 on installing Plex here.
Plex Server Project
Several years ago, I decided that I was tired of not having access to my media when away from home. The world has only progressed farther towards the digital and relying on discs to watch my movies was no longer good enough for me. I also wanted a way to learn and practice Linux, which I was just getting started with at the time. After looking at a few different options, I settled on setting up a Plex server. Plex is available on tons of devices, has great documentation, and the core features are all free.
Setting up the Server
To get started, I set up a homelab/media server. This was simply a computer constructed from spare parts (I’ve been a PC gamer for many years so I had extra!) with the addition of a couple extra HDDs for storage and more RAM. I realized that Plex would not use up all the resources on the server, so I wanted to set up a hypervisor on it as well and install Plex in a VM. I could then use it for a homelab, as well, and practice and learn other technologies on it or set up other servers (such as a Minecraft server) on the same hardware. Again, after looking at a few hypervisor options, I decided to go with ESXi – at the time version 5.5 was the current release. As I mentioned, this computer was constructed from regular desktop parts. This resulted in not having a compatible network card for ESXi on the motherboard. I then had to research and figure out how to make a custom ESXi installation ISO that included the driver for the network adapter. (For those curious, this has the instructions I followed to run this). After that, I was able to get ESXi 5.5 installed on my new homelab/media server and create an Ubuntu 14.04 headless (meaning no GUI) server which I could use for Plex.
In review, before even starting with Plex, I already have a project where I’ve gotten experience with ESXi 5.5, including installation and driver troubleshooting. ESXi usage and VM creation/management, and Ubuntu server installation. I may not be an expert on these topics, but I can confidently say I have dealt with them and can discuss the processes I went through and how I resolved issues as they arose.
The actual Plex installation was and is pretty straightforward and easy. See part one of the guide series I mentioned previously for instructions. Because I installed it on a headless server, I did need to use another computer for the installation and set up an SSH tunnel in order to ‘claim’ the Plex server initially and get it set up properly. So even the basic installation process includes another item I can say I have used.
Adding Media to Plex
Once Plex was installed, I was faced with the issue of how to get my media onto the server. There are many options for this; unfortunately, because it can be a bit of a legal gray area, much of the software and solutions here are tied to companies and software that at best skirts the rule of the law. After some searching and testing different possible solutions, I found the software MakeMKV. While technically in beta (and still in beta as of this writing), it was available on Windows and Linux (although not compiled) and free for the duration of the beta. I installed a Blu-ray drive on my homelab and enabled passthrough for my Plex VM, then followed the instructions on the MakeMKV for Linux page (here is the link to the current version) to compile and install MakeMKV on my Plex server. I was then able to start ripping my Blu-rays and DVDs to my Plex server using MakeMKV!
For this section, I now have experience with ESXi device passthrough, and building a software package in Linux. Again, I may not be an expert just from my experience here, but I can discuss how it was used and show that I’m willing to learn and research to complete a project.
Note: As of this writing, the guide for this section is not quite ready yet. I will update this post with a link to the appropriate guide once it is complete.
Managing Plex Media
After I started adding media to Plex, I ran into some more issues: 1) Plex didn’t always know what media I was uploading or matched and labelled it incorrectly, especially tv series, and 2) After creating MKV files of Blu-ray movies, the files were 20GB-30GB in size and would not stream well.
To solve the first problem, I had to research how exactly Plex matches media and find out where the problem lies. It ended up being in the way my media was named, most movies and tv shows were simply created with filenames like ‘title01.mkv’. Not wanting to manually rename every movie and tv episode, I started looking into automated options and found Filebot. Filebot automatically matches and renames media using the same databases that Plex uses so I knew it would get the correct filenames. Because my Plex server doesn’t have a GUI, I used the terminal options and made sure the media was matched properly.
For the second problem, I looked at options to convert my media without losing quality. For this, I turned to Handbrake. Handbrake is a free and open source video transcoder. It is available on a variety of operating systems and usage and development is very active. More importantly, there is a command line option so I can run it (and later automate it) on the server itself. I used the GUI version on my desktop to find options that worked well (see the guide that will be paired with this for what options I use) and resulted in files from 4GB-10GB in size that stream much better than the files created by MakeMKV. I then translated those options to command line parameters and wrote a short bash script that would loop through the files in a directory and run them through Handbrake and output them to a new directory. While I did not at the time, I have recently added these scripts to GitHub which will allow version control and sharing easy.
Solving these two problems means I could now speak more about file management, bash scripting, and version control and development with Github.
Automating Conversion and Backing up Plex Media
As time went on, I found myself spending too much time manually adjusting my Handbrake script for conversion. I also started to worry about how much effort it would be to rip my growing library of movies and tv shows again if something happened to the server.
Backing up my media would be simple enough, but with the prevalence of online and cloud storage services, I decided to look into options there for the extra benefit of having off-site backups. After looking at options from all the major providers, I found Amazon Cloud Drive (ACD) to be the best option, but not right out of the box. Amazon Cloud Drive offers a great deal for storage with $60/year for unlimited data. Unfortunately, Amazon does not provide a command line interface or Ubuntu app option for their cloud drive. Because I wanted to back up and upload my media directly from my Plex server this posed a problem. Luckily, before Amazon closed the ACD API and SDK sign ups, a developer signed up and created an open source project on GitHub, acd_cli, to enable connections to Amazon Cloud Drive from Linux. Included in this project is a FUSE mount module to enable mounting your ACD on your server. Using this, I was now able to upload my media directly to ACD.
Of course, manually uploading all of my media would take some time. Instead of uploading manually, I dove deeper into Bash scripting and created a new script to check if a file had been converted already, and if so, upload it to my ACD folder and then delete the original. I decided to use rsync for the actual file transfer in case I move away from ACD later on. This makes the script a more universal backup script that I can repurpose for other systems as well. I also went ahead and rewrote my Handbrake script to work in a similar manner.
Project State and Experience Review
This is roughly where my Plex server project currently stands. Some items that I’ve worked on that did not get mentioned above, but could apply towards a resume or interview experience include upgrading the server from Ubuntu 14.04 to 16.04, setting up a systemd service to auto-start and mount Amazon Cloud Drive, setting my Plex media folder as an NFS server for my local network so I can mount and manage it from another computer, and migrating from ESXi to Proxmox without losing any data. My Plex project now has a backup script, automated conversion, contains all of my physical media, and still has room for improvement so I can continue using it to learn and show experience with even more.
Through what I’ve accomplished so far I can now list experience with ESXi, Proxmox, GitHub, bash scripting, backups, building packages from source, and more. I already have ideas for more improvement such as setting up file watchers to automatically start the conversion and backup process, process and performance monitoring to automatically tune priority of tasks to enable smooth streaming even when transcoding or ripping files, and automated alerts when storage or CPU usage gets too high.
Note: Again, there will be guides on all of the steps I’ve completed so far, but some are still in the process of being written and/or edited. This post will be updated as they are published with links in the appropriate sections.
I hope my Plex project experience has shown how much you can learn and how you can apply what you learn through personal and side projects to your resume and interview experience. There are tons of projects you can pick up and start working on to help you learn and show your experience. You could write an irc bot to learn Python, run a Minecraft server, or even Build Your Own Linux to really know how it all works. Just because no one is paying you to do it, doesn’t mean it’s not valid experience. The best IT workers are the ones who are passionate about it and do it because it’s what they love doing. Any of these projects or any number of open source projects are a great way to learn more, get experience, and show your passion to potential or current employers.