10 reasons async programming is a bad idea

Async (asynchronous) programming is very popular. It is advocated in JavaScript (NodeJS) and in the JVM (Akka). In this post you find 10 reasons why it may not be such a good idea. 1. Async makes your code hard to read IMHO the most important reason to not do async is that synchronous code gets executed more linearly and is thus easier to reason about. The amount of possible states in an async programming model easily explodes, which makes the code hard to read and understand. Of course there are people with strategies (like Flux) to avoid your code to turn into a big ball of mud (also known as spaghetti code), but why would you when you can better say “no” to async programming anyway? ...

November 9, 2017 · Maurits van der Schee

The myth of the "right tool for the job"

Discussions about “the best programming language or technology” are common in software development, but also arguably pointless. Choosing a programming language is very unlike construction work: you don’t need the “right tool for the job”. It is more like choosing clothes to wear: you shouldn’t pick shorts when it’s freezing, but all sensible choices are a matter of taste and maybe even a way of expressing your identity as a developer. ...

October 24, 2017 · Maurits van der Schee

Helping friends on the Linux command-line

I noticed that when I was helping a friend on the Linux command-line I was struggling. Spelling the commands over the phone or trying to read their screen over a bad Skype or Hangout screen sharing connection is not really fun. That’s why I spent the time to create something that works (for me at least). It allows your friend to connect to your Linux server on which you can open a shell on your friend’s computer. ...

August 15, 2017 · Maurits van der Schee

How to get an A+ rating from SSL Labs

After postponing setting up SSL for this site for about one and a half year I finally did it. Like anything I do with this blog I wanted to make it fast and secure. In order to find out whether or not I configured SSL correctly I used SSL Labs. They have a form where you can enter your domain. After a minute or two and you will receive an extensive report on your SSL setup (for free). The report is also summarized in a rating and the highest rating is an “A+”. I configured this site to receive such an A+ rating and in this post I will explain how you can do the same. ...

July 29, 2017 · Maurits van der Schee

GopherCon 2017: videos online

15th of July was the last day of GopherCon 2017, the “Largest event in the world dedicated to the Go programming language.” It was held in the Colorado Convention Center in Denver. Today (only 9 days later) the videos from the conference are online! There are 26 videos online now and 32 lightning talks, so most of the conference is available here (also from last year). GopherCon 2017 Peter Bourgon - Evolutionary Optimization with Go [39:18] Tammy Butow - Go Reliability and Durability at Dropbox [27:21] Joe Tsai - Forward Compatible Go Code [26:29] Russ Cox - The Future of Go [24:37] Fatih Arslan - Writing a Go Tool to Parse and Modify Struct Tags [35:36] Kavya Joshi - Understanding Channels [21:45] Filippo Valsorda - Encrypting the Internet with Go [41:43] David Crawshaw - Go Build Modes [44:19] Keith Randall - Generating Better Machine Code with SSA [34:44] Kris Nova - Valuable Lessons in Over-Engineering the Core of Kubernetes kops [25:02] Aaron Schlesinger - Functional Programming in Go [35:28] Scott Mansfield - Creating a Custom Serialization Format [37:32] Mitchell Hashimoto - Advanced Testing with Go [44:59] Ashley McNamara - My Journey to Go [12:25] Michael Hausenblas - The Fallacies Of Distributed Gomputing [34:15] Edward Muller - Go Anti-Patterns [38:14] Jon Bodner - Runtime Generated, Typesafe, and Declarative: Pick Any Three [39:55] Sam Boyer - The New Era of Go Package Management [32:00] Marty Schoch - Building a High-Performance Key/Value Store in Go [34:00] Liz Rice - A Go Programmer's Guide to Syscalls [34:45] Alan Shreve - grpc: From Tutorial to Production [43:51] Rhys Hiltner - An Introduction to “go tool trace” [37:21] Ian Schenck - Operability in Go [19:56] Kelsey Hightower - Self Deploying Kubernetes Applications [22:03] Waldemar Quevedo - Writing Networking Clients in Go [40:33] Will Hawkins - Go at the DARPA Cyber Grand Challenge [35:42] GopherCon 2017 - Lightning talks Areg Melik Adamyan - Let NFV Go: Experimental Framework for Network Functions [9:37] Harvey Laue - Interface Driven HTTP Response Writers [8:12] Joey Geiger - Regular expressions, do you need them? [3:12] Landon Jones - AI and Go II: Time For Action [9:54] Michael Stapelberg - RobustIRC [9:46] Aarti Parikh - A tale of two chat servers [7:23] Nyah Check - Becoming a better hacker, lessons learned from Poetry [7:02] Sukrit Handa - Introduction to Hyperledger Fabric [7:35] Daniel Selans - Distributed Remote Monitoring in Go [8:51] Pete Garcin - Building an ML-Powered Game AI Using TensorFlow in Go [7:45] George Tankersley - I wanna Go fast [8:22] Darren McCleary - Beating GCP's MapReduce with Go at The New York Times [9:45] Matt Layher - Ethernet and Go [5:34] Aditya Mukerjee - Translating Go to Other (Human) Languages, and Back Again [9:42] Chris Short - Golang to the rescue: Saving DevOps from TLS turmoil [5:55] Carolyn VanSlyck - go dep in 10 minutes [9:30] Emile Vauge - Effective ingress traffic management with Traefik [6:45] Tim Burks - A Go Platform for Polyglot REST API Code Generation [9:03] Owen Ou - Godzilla: a ES2015 to Go source code transpiler [6:04] Sergey Ignatov - Gogland Tips and Tricks [9:28] Bryan C Mills - An overview of sync.Map [8:10] Vladimir Vivien - Calling Go Functions from Other Languages [9:11] Vitor De Mario - Abracadabra - Finding genetic mutations in Go [8:22] Ramya Rao - Go with Visual Studio Code [10:07] Brian Scott - Go at Disney [8:04] Tom Elliott - Introducing Edward for Simplified Microservices [9:23] Marc Antoine Ruel - periph.io: a lean performant hardware library [9:43] Marcin Spoczyski - Anomaly Detection in Go [7:03] Blain Smith - Generating Hundreds of Video Catalog Feeds in Seconds [8:51] Bob Argenbright - Simple Plugin Architectures in Go [9:53] Sharon Allsup - Ultimate Coffee: It tastes as good as it smells [9:09] Jonathan Amsterdam - Errors as Side Notes [4:55] That should keep you busy for a while. Enjoy! ...

July 24, 2017 · Maurits van der Schee

Ubuntu ttf-mscorefonts-installer fails

You may download Microsoft’s TrueType core fonts for free, even on Ubuntu. They are available in a packaged named ttf-mscorefonts-installer. But it is really annoying that when you try to install ttf-mscorefonts-installer it keeps failing with strange error messages like: W: Can't drop privileges for downloading as file '/var/lib/update-notifier/package-data-downloads/partial/andale32.exe' couldn't be accessed by user '_apt'. or: E: Failed to fetch https ://heanet.dl.sourceforge.net/project/corefonts/the fonts/final/andale32.exe Protocol "http" not supported or disabled in libcurl ...

July 10, 2017 · Maurits van der Schee

Client side rendering is a lie

We currently see that MVVM frameworks like Angular and React are booming in popularity. Not taking anything for granted, I was wondering last week: does “Client side rendering for scalability” even make sense? Is it a beneficial to send JSON over the wire and render it on the client? Does that lower the load on the server, compared to rendering the HTML? How expensive is the HTML templating? Is it more expensive to generate HTML than to generate the JSON it is based on? My feeling says it does, but is it true and how much does it matter? ...

June 27, 2017 · Maurits van der Schee

Xubuntu with Gedit, Nautilus and Plank

I’m using Xubuntu (Ubuntu with XFCE) as my primary operating system, because it is ridiculously fast on my NVMe SSD powered Intel NUC i7. By default Xubuntu comes with “Thunar” installed as it’s file manager and “Mousepad” as the default text editor. Mousepad is very limited in features and Thunar has some stability issues. Reasons to replace them with the older (Gnome 2 era) tools “Gedit” and “Nautilus”. Unfortunately in Xubuntu 16.04 these application have been changed beyond recognition with added buttons to the title bars and a removed main menu. Luckily some people forked the old Gedit and Nautilus and made them available under the new names “Nemo” and “Pluma”. ...

June 7, 2017 · Maurits van der Schee

Optimistic and pessimistic locking

One of the most misunderstood topics in software development is most likely concurrency. There are three kinds of operations on data rows: reads, blind (full) writes and dependent (or partial) writes. In a high concurrency web application you typically do not need to lock for the first kind. Only need to lock the write operation itself in the second case and you need to lock the row for the entire duration between read and write in the third case. ...

May 29, 2017 · Maurits van der Schee

Dash to Panel for Ubuntu Gnome

We have heard months ago that Ubuntu is stopping with Unity and switching to Gnome 3. I’m happy about this as I could never get used to Unity. For a long time I used Xubuntu, which offered a Gnome 2 like experience with the light-weight XFCE window manager. In order to get used what life will be with Gnome 3 I downloaded Ubuntu Gnome. It has a 16.04 and a 17.04 release and I conservatively chose the 16.04 release. ...

May 28, 2017 · Maurits van der Schee