Build your own tools

Starting out my freelance career as a mobile and web developer meant I needed to have the right tools available. Sounds obvious, but its easy to overlook with everything else that you need to consider. What are the right tools for a mobile and web developer these days? Googling yields hundreds of blog sites listing “top 12” or “top 7” editors or sites or tutorials for learning x to become y. Here’s a short list of what I built and maintain.

Internet connectivity

I took it upon myself to to build my own network and physical server environment to both learn about dev ops and save money. I host my own websites on a single physical server with a Comcast business class internet connection. I’m fine with DHCP because Comcast now charges $15/month for a static IP and I setup Dynamic DNS with Google’s Domain hosting features. Its free and really easy to setup with pfSense. I also purchased my own cable modem, saving another $12/month. I have a UPS backup battery, although since I’ve been using it for a few years now the battery wont hold much of a charge so its really just keeping a constant stream of clean power – which is very helpful as my apartment suffers from rather frequent power sags and I can hear it kicking in and out. It also enables me to know how much electricity I am using for my entire setup as there is a readout on the module showing current usage.

Virtualization

esxi-dedicated-server-iconI run VMWare’s free bare-metal hypervisor ESXi version 6 on a server with 24GB memory and 2TB of storage, and install pre-loaded vm images downloaded free from Turnkey Linux. I just can’t bring myself to setting up an account on Digital Ocean or Cloudflare, even though I might save a little money on electricity costs. Each image uses between 2 and 4GB of memory and about 40GB of disk space, so I’ve got room to add more if necessary.

Firewall and Intrusion Detection

logoI run pfSense firewall and IDS, installed the Snort package which I am constantly monitoring to see how many IP’s are being blocked, what the latest penetration attempts are and to make sure it’s rulesets are being updated every night. I can see brute-force login attempts to my wordpress sites every now and then, and so I installed the free Jetpack plugin set from WordPress which is supposed to blacklist an IP if its detected that its trying a brute force login.

Load Balancing and HTTP Header re-direction

Because I run multiple websites with different domains, I needed a solution for HTTP header re-direction as I only have a single public IP. HAProxy is a package available within pfSense that does this and much more. I use it for traffic direction and caching, even though there is a lot of caching functionality built into Jetpack and other WP plugins already. Also, its all running on the same physical server anyways, so probably not gaining any real performance benefits.

Website platform

wordpress-logo-stacked-rgbI use WordPress because I’ve been using WordPress for many years. Honestly the fact that its PHP doesn’t bother me at all. Some might say its not very powerful, slow, lots of security vulnerabilities and doesn’t scale, but I’ve not experience any of these limitations. I use Jetpack plugin set because it replaced the dozens of other custom built plugins I used to have and because it enables me to centrally manage my sites from the wordpress.com dashboard.

Speaking of plugins, checkout the backup solution from Updraft. Feature loaded and free, you can save your WP backup zips to your Google drive, Dropbox, Microsoft OneDrive, or just straight up SFTP. Really nice and connecting it to the Google API to give it access to my Google Drive folders wasn’t difficult.

Development Environment

I knew I would have to hone a lot of existing skills and learn a ton more to be able to be a successful freelancer. As a freelancer you get asked to solve complex problems and build apps with complex requirements. The whole reason they are willing to pay someone is because that person is supposed to be an expert.

With this in mind I have setup an environment that is complex but also mostly free. And because I set it up, I understand it!

Hardware

IMACI have a 27″ iMac from 2009 as my main workstation. I upgraded it to OS X Yosemite anticipating it would run much slower after doing so, but was pleasantly surprised when I found that Apple’s policy of planned obsolescence of its hardware didn’t include Yosemite. I can’t say that for the other releases of OS X however.

I removed the SuperDrive DVD drive and filled the empty space within the system with a 256GB SSD from Other World Computing. The installation videos on their website and hand tools they send with the drive made it possible. Apple hardware is so cramped and customized, with lots of tiny frail connectors that bend and break, had I tried to figure it out on my own I would have likely “bricked” my 7 year old iMac.

Also replaced the older 1TB drive with a 7200 RPM 2TB drive. The 1TB drive had a recall on it I never did anything about and I was really starting to think it was going to give up at anytime. Thankfully it didn’t and I now use it as a backup drive (probably not a great idea). And added more memory to bring it up to 24GB of the maximum 32GB it can take.

The key here is that if I had included the same hardware in my original purchase it would have been a $3500 buy. In 2009 there weren’t really any SSD’s, certainly not 256GB, so its a bit of a “apples to 2×4’s” comparison, but even today if I purchased a 27″ iMac with 24GB RAM, 2TB + 256GBSSD storage, and Quad 2.4Ghz processor, it would be well over $2000. The parts I purchased to upgrade my older hardware cost around $300.

MACBOOKPROI also have a Macbook Pro from 2010. Replaced the DVD drive with a 256GB drive and added more memory for around $200. Putting an SSD in a 2010 Macbook Pro makes it run like a 2015 Macbook Air. Really. My only issue with it now is that it’s so heavy. (and I am missing a DVD drive, but hey its 2016 already)

Software

I wanted to get into Android development before taking on iOS, so that meant learning Java. Good thing I had spent time working with SAP Business One E-commerce and WebCRM in my previous jobs and had picked up some C#, because the two are pretty similar. I installed Android Studio from Jetbrains and have to say its quite a remarkable improvement from the days when you had to install an addon for Eclipse and cobble your way through compiling and testing.

After making my way through various Java and Android courses on Thinkful, Udacity, Udemy, Coursera, CodeSchool, and edX. My Thinkful mentor, and a few other people I trust, recommended I check out Ionic.

Ionic_Logo.svgSo Ionic uses Cordova to compile Angular, HTML and SaSS into native Android and iOS applications. Native in that they use a web view to display the HTML you’ve written, and the Angular and SaSS make them look like they are native buttons, lists, etc. So its not exactly native in that its an html rendering within a web view control. You can also call Cordova plugin API’s to access hardware related functionality like the camera or local storage.

I got into Ionic because I realized I was at a cross roads. Do I continue to only learn more about Android and not be able to produce an iOS app? Or do I get into Ionic and have 3 capabilities (Android, iOS, Ionic) instead of 1 (Android)  I made the choice to build my final project for my Thinkful course using Ionic because it meant I would produce an iOS app without having to learn iOS, and would mean I’d have to learn AngularJS.

I’m running Ionic build and other tools from the command line, and using Sublime Text 3 as my editing tool. Sublime took getting used to. I’m more accustomed to a full featured IDE and Sublime is just slightly better than Notepad.

Things are going well, and I feel more competent and knowledgable because I took the time to build my own tools.