Several months ago, Jon Schulman convinced me to finally give Mac a try, and I moved completely over from being a PC user. I wish I could say it had been a bad experience; but in truth - I’ve fallen totally in love with working on a Mac! For the type of work I’m doing now, it just excels!
A while back, I had done a post about what my development configuration looked like on the PC - and I’ve gotten a lot of requests to do another one now that I’m running on the Mac. Well, here we go!
A Word about
IDE Choice - Visual Studio Code
I continue to leverage Visual Studio Code for my IDE. Its just got too many features not to. Its such a complete package! I love the Git support built into the platform, and the ease of working between remote repositories and inside the IDE. It has very easy to get used to shortcut keys (sounds funny, but its real), and I love the command palette for quick “verbal” commands.
One of the most powerful aspects of VS Code is its plugin capabilities. Let’s dive into the plugins I’m currently using:
- Angular v7 Snippets - Quick shortcuts and snippets for when I’m working Angular
- Ansible - Helper extension for Ansible Playbook execution and interaction
- Code Spell Checker - Yeah… do I need to explain this one?
- Docker - I get a ton of use out of this plugin. I use this plugin to build docker images directly in VS Code, as well as push them into Docker hub repositories. This plugin also helps handle syntax checking within a Dockerfile
- Hugofy - I write my blogs in Markdown, and publish to my site using Hugo. Hugofy exposes a number of useful functions
- Kubernetes - I primarily use the Kubernetes extension for the intellisense capabilities it brings. I’ve used it to push pods into clusters. This is one of the plugins that I wish I would use functionally a lot more; but I often forget is there
- Markdown All in One - Since I write my blogs in markdown; this plugin has been a huge help in quickly applying markdown formatting to various components in my posts. A lot of great shortcuts here
- markdownlint - This is a helper/linter for markdown to make sure I’m not butchering the code styling
- Puppet - I’ve been doing a ton of automation in Puppet these days for application deployment/configuration. This plugin helps me quickly build Puppet modules as needed
- Python - Python is like a second language to me (pun intended) - this plugin helps me with linting as well as various quick actions around Python (indenting, interpreter, etc…)
- Terraform - Syntax highlighting, auto-completion, and shortcuts for HashiCorp Terraform manifests
- YAML - Seriously. Who doesn’t need help getting their YAML structured correctly?
Not much to say on this one. I’m a heavy Python user and someone who advocates pretty heavily for its usage in the community. I use Python to write API calls and SDKs (Cloud Automation Services SDK for Python hollaaaaa w/ Grant Orchard). I use it to build websites (huge fan of the Flask platform). Who am I kidding, I use it for whatever I possibly can!
Terminal - iTerm2 + Oh My ZSH + Powerlevel9k
I could do an entire blog post on my terminal setup alone, because I absolutely love it. Jon got me started looking at ZSH and things just went crazy from there.
iTerm2 is pretty standard in most peoples tool-kits. Split pane support, storing keys, great hotkey configurations, and a wide range of customization options make a no-brainer. Thing’s get really interesting through when we add in Oh My ZSH.
Oh My ZSH adds a couple of really powerful capabilities for me
- Extensive Theme Selection (coming back to this one)
- Command History
- Extensive Plugin Support
I bolt on the Powerlevel9k which continues to take my terminal to the next level.
This provides a lot more terminal level plugin functionality. I’m able to customize my prompt to include key pieces of information, In mine - I’ve made my prompt very “Git-Aware”. My prompt will alert me of things like…
- What branch I am operating i
- Do I have uncommitted changes?
- Do I have changes that are not pushed?
- Is my branch current?
Other people expand their command prompts to include key system information. IP Addressing, system load levels, running containers, etc…
I have a love hate relationship with Postman. Postman is a tool for quickly interacting with API environments. I think its a phenomenal product that provides people a really easy way to quickly start consuming REST and truly lowers the barrier of entry for starting. I love its code conversion features to take a REST call and turn it into a Python REQUESTS module call or a CURL command. I love how easy it is to share Postman collections to distribute common calls you’ve written to a platform. The exportable variables are awesome.
I’ll use Postman a lot when I’m trying to quickly prototype more complex automation in Python OR if I’m looking to give a very visual demo a customer around the API capabilities of a platform im working with.
Plus it has a Dark Theme, so it gets a pass :)
Docker and Docker-Compose
I do an unreal amount of work in Docker these days, especially as I’m getting a lot more into application authoring, pipelining, and wanting to be able to move workloads between locations much easier. I’ve easily spun up 10x as many containers vs VMs in the past month. There isn’t a lot to write about here outside of the obvious.
One thing worth mentioning is the amount that I’m using Docker-Compose. We all know that Kubernetes has won the scheduler game - and that most production container deployments these days are going to be primarily inside of Kubernetes hosts. That being said; there are times where I very quickly want to throw an app into Docker just to see how its running. Docker-Compose makes this really easy. I can create a docker-compose.yaml file, do a docker-compose build/push/up - and potentially bring up an entire environment.
The most recent use case I had around docker-compose was when I was building a 3-Tier Application for demo purposes. The docker-compose file made it very easy to define out variables, create the network stack, and reference the variables between individual containers.
Kubernetes purists would say that I could do very similar things in Minikube, and I wouldn’t disagree with that at all - I just find docker-compose to be a much simple and quicker method to developing containerized applications.
Can’t forget about VMware Fusion! With as much travel as im doing these days - its convenient to have a portable hypervisor with me that I don’t need an internet connection to consume. Often if im remote and don’t want to hit VPN, I’ll work on systems out of VMware Cloud on AWS - but if I’m on a plane, thats not as easy (reads: stable) of an option. Admittedly, this one is the least used of the items in here, but its like insurance - I sure appreciate it when its needed!
As you can see, it doesn’t take a ton of tools in order for me to do the things that I really enjoy working on. Most of these tools I use every single day. Some extensively more than others. I spend a ton of time in various terminal sessions, SSH’ing to remote systems for various reasons (debugging, building, etc…). I spend several hours a day in Visual Studio Code writing scripts, automation tasks, puppet manifests, or blogs. I use docker for a ton of local building of the applications im tinkering with.
What’s in your development environment? I’d love to hear what you’re using to stay productive and most of all, have fun!