a blog archive
kd@ 9/1/2016

Project Announcement

I’ve been meaning, for a long time, to learn gjs, and write up a bunch of tutorials about it. Matthew Garrett’s “The Desktop and the Developer” is now two years old, and it’s sounded like a good idea since before then. I like Gnome, I like GTK+, I wish I could use it for more things in my life. I should just be the change I’d like to see in the world, and do something useful. I kind of even started doing it in gist a long time ago-

but it was all just never good enough and I never got far enough. Maybe declaring a commitment to trying to do that a little bit would be worth something in my head.

I’ve been convinced, for years, that I could never do self improvement, because it was so obvious how self improvement could fail. The patent, lame self trickery of pretending to not allow yourself a luxury without doing something else, the unmoored self-boosterism of self esteem, and all their worthless little variations. I’m starting to worry that I’m so persnickety I won’t even let myself grind towards self improvement.

So here we are. Excuse the vanity and narcissism.

kd@ 8/21/2016

Gnome is great, but I get a little grumpy about the visual design sometimes. Thankfully the technical design is elegant enough to make that a fixable problem

kd@ 3/6/2016

A Short Exploration of Github URLs

Github urls look like:

https://github.com/$user/$repo/blob/$commit/$path

A fun & interesting fact is that $commit can contain slashes.

So how do you deal with the possible ambiguities? First, it looks like git does not allow you to have commit IDs (like branches or tags) that are both root and leaf paths:

~/src/github-url-parsing$ git checkout -b release
Switched to a new branch 'release'
~/src/github-url-parsing$ git checkout -b release/README
error: unable to resolve reference refs/heads/release/README: Not a directory
fatal: Failed to lock ref for update: Not a directory

~/src/github-url-parsing$ git checkout -b test/1.5 
Switched to a new branch 'test/1.5'
~/src/github-url-parsing$ git checkout -b test
error: there are still refs under 'refs/heads/test'
fatal: Failed to lock ref for update: Is a directory

which means you can’t have both release/README (branch + path) and release/README (branch). The same holds true for tags:

~/src/github-url-parsing$ git tag foo
~/src/github-url-parsing$ git tag foo/bar
error: unable to resolve reference refs/tags/foo/bar: Not a directory
fatal: refs/tags/foo/bar: cannot lock the ref
~/src/github-url-parsing$ git tag bar/baz
~/src/github-url-parsing$ git tag bar
error: there are still refs under 'refs/tags/bar'
fatal: refs/tags/bar: cannot lock the ref

this appears to be reliably enforced by github, even though they use a non-standard git implementation:

~/src/gup2$ git tag root/branch
~/src/gup2$ git push origin root/branch
Total 0 (delta 0), reused 0 (delta 0)
To [email protected]:krakensden/github-url-parsing.git
 * [new tag]         root/branch -> root/branch

~/src/github-url-parsing$ git tag root
~/src/github-url-parsing$ git push origin root
Total 0 (delta 0), reused 0 (delta 0)
To [email protected]:krakensden/github-url-parsing.git
 ! [remote rejected] root -> root (cannot lock ref 'refs/tags/root': 'refs/tags/root/branch' exists; cannot create 'refs/tags/root')
 error: failed to push some refs to '[email protected]:krakensden/github-url-parsing.git'
kd@ 2/28/2016

Performance and Composability

I’ve read blog updates and manifestos from the Unikernel crowd for the last couple years with interest and some trepidation, and I think this article is as good an excuse as any to discuss why.

First, I’d like to mention that most of the claims are true. Context switches are expensive, the venerable socket API is a limiter for super high-traffic servers, and C code is dangerous, and subject to an un-necessary array of flaws. On the other hand, I don’t believe the cases for Xen is that strong, although I’m not sure this is the best place to litigate it.

Most deployments are worried about operability and availability, not performance. I make this assertion based on my own experience- which involves a lot of worries about application-level locks, and lots of database bottlenecking- and not much that was limited by the fundamental design of Unix sockets. It’s also worth noting that it’s really not very hard to work around this problem with money- if your application is bottle necked on context switches, adding more boxes will solve that problem. This is an amazing, and amazingly easy, situation to be in, and probably any company in this position will solve it with money. It’s not even going to be very expensive. The problems that seem to keep people up at night are about things that are really hard to solve with money, and have to be solved with engineering time instead- “how do we change our database schema to scale out”, “how do we manage a migration from X to Y”, and “how is our caching layer subtly broken?”

The author also gives no value to having a common operating layer. Given a broken application, in any application, an operating system lets me run all sorts of arbitrary tools to instrument, trace, and debug the problem. All of this breaks with a unikernel. Worse, it’s now entirely language specific, which means everything must be redone from scratch on a per-language basis. It also lets people collaborate outside of the tyranny of development tooling- running statsd alongside applications that report stats is a very effective way of keeping the complexity of batching, retries, etc., outside of the various language libraries, and inside of a common, reusable program. Footnote 10 is an interesting concession to this. But it’s not clear why every other part of the author’s critique doesn’t apply- to get between VMs, you have to context switch. You could imagine building a tower of unikernel’s to get back to something that looked like a standard Unix, but to what end?

To be frank, most of the author’s identified problems with Linux look like the problem of systemic underinvestment in boring but necessary base libraries and utilities. It’s not clear to me that rewriting that universe from scratch solves that problem- wait ten years and you’re there again.

kd@ 6/8/2015

hugo is kind of nice

hugo is kind of nice. Put a web frontend in front of it, and you’d have a serious wordpress competitor. Integrate automatic pushing to S3, and you have super-duper-bulletproof georedundant hosting. Disqus for comments.

Too bad the blog is dead.