Every time I say something complimentary about a piece of software people are surprised. Doesn’t David hate everything?
This is… I won’t say it’s entirely unfair. I certainly hate most software. However there is software I like! It’s even in the double digits! I think. So here is a list of some things I like.
Web based software
Gmail
Honestly… I like Gmail a lot. I don’t particularly want to, but that’s mostly for political reasons. I keep using it because genuinely every other email client seems awful in comparison.
IRCCloud
Ask Me About The Time I Used Irssi From My Phone.
What drove me to using IRCCloud in the first place was basically that: I was a long time irssi + tmux user but I was increasingly wanting to be able to IRC from my phone and the irssi phone experience is… not good. Frankly it’s surprising that it works at all. On the other hand the IRCCloud mobile experience is excellent.
But it turns out the rest of IRCCloud is also pretty excellent. There are a few missing features I’d like, and it’s kinda annoying how they have stability issues because of how some asshat regularly decides to hit them with a DDoS (asshats on the internet are why we can’t have nice things), but it’s a really pleasant experience to use when compared to anything else I’ve tried.
Disclaimer: Friends of mine work at IRCCloud and I’ve at least met most of the rest of them.
Feedbin
When Google Reader died I was sad. Then feedbin came along and was basically Google reader but better and with a great API and I was happy. That’s more or less all I have to say about it.
I also use Press for mobile support (though the mobile web app is OK). Press doesn’t quite clear the bar of software I actually like though. It’s mostly in the category of “Software which I think the world is strictly better with than without but regularly wish was about 50% better than it is”.
todoist
Todoist is however an incredibly solid piece of software. It’s got a great interface, great mobile apps and a solid API that basically did everything that I need. I mostly don’t use it very actively these days, but that’s mostly because I’m really bad at todo lists and todoist is unable to magically fix that.
Ruby libraries
Bundler
Bundler is… remarkably good at making rubygems not terrible. I mean you’re still installing the software that’s on rubygems and using ruby, so it can only go so far, but it’s impossible to remember how bad things really were before Bundler. Bundler then brings things up to honestly probably the best piece of software I’ve used for solving the problem of language and project specific dependencies.
Sequel
Given that I like SQL and hate Ruby and ORMs, it should mean something that I think Sequel is basically the most pleasant way around to interact with a database. Its ORM is probably fine – I haven’t used it much – but its query library is excellent. It’s basically a thinly disguised version of SQL in ruby, but it composes in a way that real SQL doesn’t and normalises a lot of the annoying eccentricities. Sequel is probably the top thing I miss from ruby writing Python.
Python Libraries
py.test
One of the aggravations of writing tests is finding a good middle ground between writing simple tests and writing tests with comprehensible errors. On the one extreme of the common approaches for this you have writing bare asserts and letting the programmer figure it out if it fails, on the other hand you have complicated rspec style butchery of the language.
py.test then goes “Why can’t we have both?”. Write asserts, add enough introspection to the runtime that it prints those asserts nicely for you with all the intermediate values.
On top of that, it has a really straightforward API (for most use cases it has no API at all, though the reality of it is that you still end up creating tests that are kinda annoying to use without it) and is sufficiently extensible that it has about a million plugins.
numpy
Python without numpy is a perfectly pleasant dynamic language that is really quite good for the job of futzing around with a bit of data from a database and sticking it on a web page.
Python with numpy is a credible scientific computing environment on which a vast array of other things have been built.
I mean, numpy itself is pretty great – it makes doing calculations with large arrays of data in python both a lot nicer and also a lot faster – but it’s also great because it enabled a wide array of other things.
Libraries for other languages
Databases
As far as I’m concerned there are three databases:
- PostgreSQL
- SQLite
- Intense suffering
All three have use cases and there’s very little overlap between them. Both of the first two are very nice, solid, pieces of software that are extremely well suited for their problem domain. Most of the instances of the third are not, but sometimes you need something that you can’t get the others to do.
(Note: If you are trying to decide which of the three to use in any circumstance you are probably doing something wrong. There is almost no overlap between the use cases for SQLite and PostgreSQL. If there’s any ambiguity as to whether you should choose intense suffering you probably shouldn’t).
Misc
SSH
The world is tied together with SSH. I’m not saying it doesn’t have its problems, but somehow I basically don’t run into them. Given that I’m a bug magnet and the amount of hours I’ve spent using it, this is surprising.
Mosh
It’s SSH, but with slightly questionable but probably sound security properties! And working astonishingly well in high latency environments.
When I’m doing a significant amount of development in a remote VM I really want to be doing it in Mosh. The combination of it and tmux basically makes unreliable laggy connections just not a problem (Ask Me About The Time When I Did All My Development In A Remote VM And My Laptop Wifi Broke When People Used The Microwave) I tend not to unless it’s over a VPN / internal network because I’m a little suspicious of it but honestly it’s probably fine.
i3
It’s no secret that I live in what a friend has described as “a very 70s vision of the future”. I like my tiling window managers. i3 is the latest in a long line that I’ve used and it’s really very nice – it has a pleasant to use config system, a good RPC interface (I was using wmii before and please don’t make me use plan 9 file systems again) and generally feels like a nice baby step in the direction of a modern desktop and programming environment from wmii.
jq
jq bills itself as sed for JSON. That’s pretty accurate. It’s an interesting little single serving language that centers around operating on streams of JSON objects. It’s a little weird in places, but that’s mostly because it’s so single focus.
I do wish it had bignum support though. There’s a decent chance that one of these days I’m just going to sit down with a coffee IV and not stop coding until I’ve added it.
GNU sort
The most specific item on this list. GNU sort is really nice. It does a bit too much, but even if all it did was take lines and sort them in C locale order it would be pretty great: When you want to process data that’s larger than you can fit in memory but small enough you can feasibly fit it in under half a single disk, you might want to consider using GNU sort plus a little bit of awk instead of your complicated Hadoop based data processing pipeline.
Quickcheck, Scalacheck and family
This should come as no surprise.
Actually I’ve used Quickcheck itself relatively rarely. I’ve used Scalacheck a lot more, which is in the rare category of being an actually good port of Quickcheck. Even if you’re not using Scala, if you’re writing code for the JVM you should strongly consider testing it in Scalacheck.
VLC
VLC is the one true video player. All others are pale imitations.
VLC is the sort of software that has slightly more buttons than you really wanted, but you can imagine that there are probably some good use cases for them and tolerate because all the buttons you do want are there. It’s also just really solid in terms of range of formats supported (though I’ve recently struggled to get it to work with 3D).
It also probably ties with SSH as the item on this list I’ve been using for the longest. It might even be longer – I think I even used VLC back in the days when I was running Windows and hadn’t heard of this SSH thing.
Others
There’s a general concept that sysadmins are people who you only notice them doing their jobs if they’re not doing it well.
I think there’s probably a lot of software like that. Software that I use all the time that I just don’t notice because it never breaks, but if it did I would be noticing all the time.
As a result, this list is probably intrinsically biased to software which is atypically good for its problem domain – software where I have tried alternatives and found them painful.
This suggests that my main criterion for liking software might be “It makes this terrible thing less terrible”. Perhaps this post hasn’t been as good at refuting the image of my hating everything as I intended it to be.