<p>Version control system migrations are a fact of life for developers in any longer lived codebase. In fact, I’ve had a hand in quite a few migrations as newer, more workable version control systems became available. Also, like a lot of developers, I’ve got fragments of source code dating back quite some years floating around on various servers and development machines of mine. Not necessarily code that is still being used, but still code that I don’t want to just delete…
<p>Another one for my computer science reading list for this year. I do try to work my way through at least one classic computer science book annually and picked up Let Over Lambda a few weeks ago. Colour one of the cats not impressed, but then again she’s got more free time than I do and probably already read it.</p>
<p>I did have to learn some Prolog when I was studying CS and back then it was one of those “why do we have to learn this when everybody is programming in C or Turbo Pascal” (yes, I’m old). For some strange reason things clicked for me quicker with Prolog than Lisp, which I now find quite ironic given that I’ve been using Emacs for since the early 1990s.</p>
<p>Quite a while ago, I answered a question about <a href="https://stackoverflow.com/questions/17252441/can-someone-please-show-me-a-simple-deadlock-with-two-threads-example-in-c/17252501?noredirect=1#comment84906518_17252501">the basic deadlock scenario</a> on Stack Overflow. More recently, I got an interesting comment on it. The poster asked if it was possible to get a deadlock with a single lock and an I/O operation. My first gut reaction was “no, not really”, but it got me…
<p><em><strong>Update II - 2019-05-07</strong>: It looks like due to the recent licensing changes, the Java 8 JDK that brew used is not directly accessible anymore and likely behind some kind of paywall. The installation method described below will still work as it uses the non-versioned java cask, which installs the latest version of OpenJDK.</em></p>
<p>I’ve mentioned before that I prefer <a href="https://www.mercurial-scm.org/">Mercurial</a> to <a href="https://git-scm.com/">Git</a>, at least for my own work. That said, git has a nice feature that allows you to cherry pick revisions to merge between branches. That’s extremely useful if you want to move a single change between branches and not do a full branch merge. Turns out mercurial has that ability, too, but it goes by a slightly different name.</p>
<p>It might sound paradoxical, but in general, writing more code is easier than writing less code that accomplishes the same goals. Even if your code starts out clean, compact and beautiful, the code that is added later to cover the corner cases nobody thought of usually takes care of the code being well designed, elegant and beautiful. Agile programming offers a solution, namely constant refactoring, but who has time for that? That’s why I occasionally give myself the 10% code reduction…
<p>I’ve blogged about <a href="https://www.lonecpluspluscoder.com/2014/03/12/improving-the-performance-of-git-for-windows/">improving the performance of Git on Windows</a> in the past and rightly labelled the suggested solution as a bad hack because it requires you to manually replace binaries that are part of the installation. For people who tend to use DVCSs from the command line, manually replacing binaries is unlikely to be a big deal but it’s clunky and should really be a wakeup…
<p>Over on <a href="http://bitbashing.io/">bitbashing.io</a>, Matt Kline has an interesting blog post on how <a href="http://bitbashing.io/2015/02/16/shipping-culture.html">Shipping Culture is hurting us</a> as an industry. Hop over there and read it now, because he addresses another case of the pendulum having swung too far. Your developers take a long time to get a new version out? I know, let’s make them ship something half baked. Quality is overrated anyway. Especially when you…
<p>I encounter this on a fairly regular basis - a project uses a third-party library and there is either a bug in the library that we can’t seem to avoid hitting, or there’s a feature missing or not 100% ideal for our use case.</p>