One Month With Windows

I’ve just spent four weeks using Windows at work, for the first time in about 6 years. Recently I’ve been working almost exclusively on Macs, with Linux for any deployed server processing.

However, before that I spent about 10 years on Windows, mostly as a SQL database engineer and occasional .NET programmer. Before that, however, I did a bunch of work on Macs. But that was in the olden days, when the internet was a mere babe, and many people received “catalogs”, which were strange little magazines printed on actual paper and delivered to your home for free, with the idea that you’d want to call (using a “telephone”) the company that mailed you the catalog, to buy things from them. My job in those days mostly involved weird desktop publishing programs like Quark XPress, which apparently still exists!

The point of all of that was that I’ve used Windows, I’ve used Macs, and I’m old.

When I say I’m now using Windows at work I mean old school, Windows 7 Enterprise. This version of the worlds most popular operating system became generally available to the public on Oct 22, 2009. Ah, that first year of the Obama presidency… seems very long ago, indeed!

Surprise: overall, while I have been able to get semi-productive on Windows, I’m not a fan. I need a Mac. Perhaps I can whine loud enough and make it happen?

Before going further, I should probably list out the types of activities I’ve been doing on this system, so far:

  1. Creating a big presentation in PowerPoint 2010 which is part of Office 2010, made generally available on June 15, 2010.
  2. A bunch of emailing (of course) in Outlook 2010, also part of Office 2010
  3. Limited chatting using Slack and Office Communicator 2007R2
  4. Setting up AWS infrastructure using Terraform using Visual Studio Code as the code editor and git for version control, of course
  5. Creating a python data analysis environment using Anacondapandas and such
  6. Establishing a bunch of project tracking stuff in Jira
  7. Documenting things in Confluence

So, to be fair, out of those 7 things, only 2 of them were seriously painful in Windows. The most painful was setting up an AWS infrastructure, because in order to do that I needed to set up a decent command shell and fight the proxy. By decent command shell, I mean:

  • Multiple shell tabs, like macOS Terminal
  • Ability to copy and paste code and command results from the editor the normal way (Ctrl-C, Ctrl-V)
  • Automatically resize the shell width when resizing the window
  • Command history with Ctrl-R search
  • Basic unix-y commands (ls, cp, mv, curl, ssh, more, head, cat, etc.)

I settled on Cmder with git for Windows plus gow for the basic shell environment. It’s wayyy better than the built-in cmd.exe, which is an abomination, even for 2009. But this setup still feels fragile, slow, clunky, and slapped-together. Which it is. But it does basically work.

However, running Terraform in the native windows command line environment was a nightmare. It would hang periodically, requiring the entire shell to be killed in Task Manager. I don’t know if it was because of the proxy (probably so) but it was unusable.

So I decided to try an Ubuntu Virtual Machine running in Oracle VirtualBox, and managed by Vagrant. That took some time to set up, again mostly because of fighting the proxy. The key thing that made it work for me was setting the proxy environment variables inside the VM like so:

$ export HTTP_PROXY=http://10.0.2.2:3128
$ export HTTPS_PROXY=$HTTP_PROXY

What is that magic IP? It’s the IP address of the host machine (Windows in my case) from the perspective of the VM, when it’s running as a private network with NAT, which is the default networking.

What is the magic port? It’s the default port exposed by Cntlm, which is running as a Windows service. Cntlm authenticates to the corporate proxy with my active directory credentials, then hosts a local proxy that does not require authentication. Authenticated proxies are a necessary evil of developing behind a proxy.

Once I hooked that up, I could vagrant ssh into the VM and generally speaking using tools like awscli and terraform to talk to the internet. And I was in regular Ubuntu bash, with minimal typical lag. Occassionally Cntlm hangs and needs to be restarted, but other than that, so far so good. And of course with a mapped drive, which Vagrant sets up automatically, I can code on the Windows side and use command line tools on the Ubuntu side and it mostly works.

Mostly. I need a Mac.