VS Code

The best, most entertaining and immortal topic in software engineering is back! Editor Wars! After reading Roben Kleene’s blog post I realized that I’ve been using VS Code all-day every-day for over a year now. I’m not willing to admit it because in my mind I’m a die-hard (n)vim user, but the reality is this: VS Code is brilliant. Kleene makes many great points about key ingredients of VS Code’s success (popularity/MS backing, plugin ecosystem, client-server architecture), and you should read his post.

bora—an AWS Cloudformation wrapper

Last weekend I spent some time working on a small project: bora.1 It’s a simple wrapper around AWS Cloudformation, so obviously everyone’s question is: why the hell would I want yet another Cloudformation wrapper? tl;dr answer is: because all the ones which are available suck. But let me elaborate. Troposphere-based tools are inelegant. Troposphere itself is poorly documented, and I dislike how the Python code mixes with actual Cloudformation JSON code in it.

One of Go’s features is that it doesn’t have an excess of features, and frankly, I think that feature is undervalued.

There’s an interesting discussion on Quora about the differences between Golang and Scala.

As a former academic with tendencies towards functional programming, I used to be very tempted by Scala.1 It offers all the functional goodness without the exoticism of Haskell, and came with reasonably good tools and frameworks. Like Clojure, it’s a functional language you can actually do some work with.

The problem with Scala is, the more advanced you get, the more complicated (unreadable?) your code becomes. I remember that back in grad school the dude who was able to doodle the craziest and mathematically most challenging solution to some problem in Haskell was someone everyone looked up to. But it turns out in the “real world” simplicity always trumps virtuosity and sophistication, which is one of the many reasons I love Golang so much. A language with no “magic,” good concurrency support, great documentation and community that compiles into machine code and runs faster than Python? Yes, please.

Read the whole Quora thread, though, there’s a lot of interesting stuff there.

  1. This is not to say that I don’t like Scala. I really do, it’s just that my love for it is, hm, not as unconditional as it used to be.

AWS Cloudformation template for OpenVPN server creation

Are you traveling for Christmas to a country where Netflix/Hulu isn’t available? Are you worried you might resort to violence against your own family once you’re fed up with them? Here’s a VPN server template to help the situation (and keep you away from prison). update Jan 6, 2016: Oh, well. VPN servers can still be useful for other purposes. Netflix is brilliant and there’s no better time to catch up on your Jessica Jones episodes than Christmas break.

I’ve been trying to hone some web-development skills the last few days, and yesterday evening I read about a particularly elegant Python microframework called Flask. I read the tutorial, did some stackoverflow searches and hacked a very simple (borderline trivial, actually) app for cheating in LetterPress in just a few hours. The code that runs the whole application is merely 50 lines long, and that’s only because I’m adhering to PEP8’s blank lines policies. Karolina contributed some CSS code and a logo, and we deployed it to Heroku in a couple of minutes. As a web-development newbie I have to say I’m amazed by how quickly and easily one can learn writing simple applications from scratch these days. And Heroku deployment can be done (for free!) by just one git push. Amazing stuff, especially if you remember coding PHP in 2004.

On Haskell

Although I’ve always wanted to become a professional programmer, I never became one. I studied philosophy and went into a PhD programme in computer science because of my interest in formal logic. I like computers very much, I have professional experience in UNIX administration, and I’ve done a lot of Perl/Bash/Tcsh scripting, but I’ve never actually written any non-trivial piece of programming code. Whether you want to model something, verify, or check your proofs, being able to write a computer program that helps you with some task really comes in handy.