David R. MacIver's Blog
Software I actually like
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.