Linux to Windows: why is everything terrible?!

Not so long ago, I wrote a post about my first impressions of Linux as a Windows user. A while after that, I booted back into Windows to get some files and oh god Windows is a terrible shock after you’ve gotten used to Linux.

To be fair, my Windows installation at home has fallen prey to the 100% disk usage bug, which means that every reboot I have to patiently wait until task manager deigns to load and I can kill processes until my computer starts working again, so Windows made a perhaps unfairly terrible first impression.

I will, however, blame Windows for their terrible update process. On Linux, I just tell the update manager to go ahead and install whatever updates it found and I go back to work while it takes care of things for me. It’s only been a few weeks, but I forgot how terrible the Windows update process is. Not only does my computer grind to a near halt while it’s installing updates, but it has to restart to finish installing the updates and it’s completely unusable while does that. And after installing the first batch of updates, it’s not unusual to find another batch that depended on the first one and have to go through the whole miserable process all over again. Ugh.

A good 20 minutes of updating later, the problem I was trying to solve (yay 100% disk usage, that’s not inconvenient at all) was still happening and I was sick of screwing around with Windows.

I guess the moral of the story is don’t go back to Windows once you’re used to Linux, it’ll just make you sad.

Windows to Linux: first impressions

Like I mentioned in my last post, I’ve been experimenting with Linux. Somehow I broke my development environment at work and stopped being able to run our whole unit test suite. Well, technically I could run it, but it took a minimum of 40 minutes and a good quarter of the tests failed, so effectively I couldn’t run the test suite at work. Even at home, where I hadn’t broken my environment, it took a good 18-20 minutes to run the whole thing. The other upside of running it at home was that I could tell the tests were finished running when my laptop stopped running its fans like it was trying to lift off. As an aside, if any of my readers just happen to be experts in running the Play Framework on Windows, particularly the test server used for unit tests, I would really love to hear from you. The test suite runs great on Linux, but it really bothers me not to understand why I couldn’t fix it on Windows.

a dirt road bordered by trees and grass leads around a corner
Unrelated image from

So far, the switch to Linux has been eerily easy. Because I haven’t done much of anything with Linux since I graduated from Camosun in 2006, I was really worried that getting all three of my monitors at work to actually work would be a terrible experience. What actually happened was that my boss offered to give me the script he uses to get all three of his monitors configured, but by the time he got a cup of coffee and came back I had installed the proprietary drivers for my video card and restarted my window manager and everything just worked.

If you normally run Linux that proprietary drivers bit probably gave you pause. I’m running Linux Mint, which I’m told is a good distro for beginners, particularly if you’re used to Windows. It’s also convenient (as are a number of other low-maintenance distros) if you’ve been running Linux for years but you’re just not interested in screwing around getting things working again every time there’s an update.

The thing that makes Linux Mint so convenient for Windows users is the same thing that makes GNU so unhappy with them. To quote GNU’s explanation of why they don’t endorse other common distros:

Mint does not have a policy against including nonfree software, it includes nonfree binary blobs in drivers packaged with the kernel, and it includes nonfree programs in its repositories. It even includes proprietary codecs.

Totally open source and free software is a nice ideal, but I need my shit to work. My job is to build features, not to screw around trying to get stuff working. As much as Mint may offend free as in freedom software purists, it gives me the “one-click and it works” functionality I’m used to. Think of it as a gateway drug if you need to :)

Once I got all of my monitors working, Mint has been extremely easy to work with. My development environment includes java, eclipse, mongo, redis, and the play framework, all of which were incredibly easy to install and get running. Even as a newbie to Linux, I found mongo’s instructions for installing old versions easy to follow. I did hit a little bit of a snag when I discovered that the environment variables in my .profile need to be exported, but that wasn’t difficult to figure out and it was still less of a hassle than setting up environment variables on Windows.

With everything set up, our entire unit test suite runs in in less than half the time it takes on Windows and Eclipse starts much faster too. So far the minor inconvenience of installing Linux has been far outweighed by being able to run the stuff I need to.

And the inconveniences have been incredibly minor. I needed to install a driver to get all of my monitors working, and I found and installed Gnome Do because I can’t deal without a SlickRun alternative, and I’m still looking for an email/calendar client I really like (right now I’m trying Geary, which is okay but I’m not in love with it), but overall switching to Linux from Windows has largely been a non-issue.

Installing Mint on my laptop (an Alienware 17″ with a GeForce GTX 860M that came with Win 8.1) did kinda suck, to be fair. I had to mess around with my harddrive partitions a bit and it didn’t want to install from the USB drive I set up with UNetbootin so I had to resort to burning a Linux Mint iso on a dvd and using that, but at work I was able to install from the USB key to my desktop no problem. I had my environment mostly set up before our morning meeting, although it did take until after lunch to get all the fiddly little details sorted out. Things are still a little bit weird on my laptop – sometimes my window manager freaks out when I open the lid but it’s Linux on an SSD so it’s not as if a restart takes long.

All in all, I thought switching to Linux was going to be a lot harder and I’m still kind of waiting for the other shoe to drop. Isn’t this supposed to be more of a pain in the ass? But seriously, if you’re running Windows I really do recommend trying Linux.

Windows tip of the day

Windows actually has a builtin file hash function: in powershell, use Get-FileHash [filename] for a sha256 hash, and add the optional -Algorithm switch (-Algorithm MD5, for example) for other algorithms.

If you happen to be using Win8 in particular, stick with the powershell commandlet. Trying to find a windows file hash generator and then get Windows to actually run it will just make you unhappy. Screw you too, AppLocker.

Cmder rocks!

Cmder is an awesome tabbed command line interface for windows. Unlike the regular windows console, cmder is resizeable, includes handy linux commands like grep, and uses a font that isn’t hideous. Honestly, while the other features are great, being able to resize the freaking window was one of the biggest selling points for me. It’s incredibly irritating to try to read a log in a window that’s only 80 characters wide when you’re running a java server that sometimes throws very wide error messages.

Cmder can also be integrated with programs like Sublime Text. I haven’t done it myself but it’s cool to know I could. For git users, cmder has another really cool little feature – where the prompt usually shows you which directory you’re in, cmder adds which branch you have checked out to the end, and it turns that branch name red if you have changes you haven’t committed. It’s amazing how helpful that is.

Cmder with current git branch
Cmder with current git branch

If you use windows and you run anything from the command line, give cmder a try. Shiny shiny tabs await you :)


What the hell is using port 80?

Every time I need to figure out what process stole port 80 from my local server I have to look up the command again, so I’m going to share it here for my fellow windows users in hopes I’ll finally remember it :)

From a command shell running as admin:

netstat -anob

Thanks as usual to stackoverflow, where the collective memory of nerds lives.

And here’s another fun fact for windows users: Skype may well be the process that’s hogging port 80. It uses ports 80 and 443 by default because they’re usually not blocked by firewalls and hey, it’s not like developers use IM >:(