We do what we can because we must

A recent conversation with a friend about Twitter vs identi.ca prompted the following response, slightly edited for formatting and anonymity:

<my friend>
man.. that’s my primary annoyance with the open source movement

What is?

<my friend>
the belief that everything has to be duplicated especially for open source, or it’s invalid

<my friend>
and a version of something that already exists with a smaller community around it and a worse user experience is somehow better


<my friend>
someone creates something useful, and then a bunch of people jump on it and do a piss poor job trying to replicate it because they lack the ability to actually design (in the architectural as well as UX sense) and come up with a shit product that they think everyone should use because of some subjective moral high ground

While we were having this conversation, I was sitting in a cafe, it was a lovely sunny afternoon, the sun was beginning to set, and I was feeling very peaceful. I briefly tried a sort of rebuttal but couldn’t conjure up the energy to continue when the argument started to get heated. I replied instead that my surroundings were making me feel mellow. I wanted time instead to respond, which I will attempt to do now.

Let me first try to address the concern at hand. Twitter vs identi.ca. If Twitter exists, why should identi.ca exist? The only reason I started to curiously poke around identi.ca is that I noticed Debian people were using it, and I’ve found that I’m very like-minded with other Debian users and developers. So I trusted their judgement about the usefulness and safety of identi.ca, and I started using it. I’m not particularly defensive about either website; I still think microblogging is kinda dumb. I just wanted to see for myself it would be as captivating as everyone seems to think it is, and I was glad I found a microblogging service that my friends seemed to like.

And yes, it’s true that the fact that I have the source for the website, (it’s under the AGPLv3, which is like the GPL but activates its copyleft clauses by network interaction, e.g. a website!) gives me warm fuzzies. I like having source, and I’m a little sad that the other big websites that I use frequently for their services, bitbucket and gmail, don’t give me source. I briefly tried out gitorious because I wish I could at least submit patches for bitbucket, but then that’s git, and I still prefer hg.

At any rate, if I have two websites of approximately equal functionality, one gives me source, another one doesn’t, then I will disregard popularity and choose the one with source. It’s just what I prefer. I think this is what the attack about “high moral ground” was about, that I think a website should be used because it has source.

I would like to defend against the accusation of high moral ground or holier-than-thou attitude. I now try to never personally appear or act that way, except in very obvious jest (e.g. by speaking religiously about Emacs). I have learned that telling people, don’t use that software, don’t buy that product are extremely counterproductive, so I’m not trying to impose upon anyone any sort of rules of what software I think they can or can’t use. I wish everyone was using identi.ca instead of Twitter and that identi.ca would stay free with that burst in popularity, but the way to that goal isn’t by telling people what they should do; at best you might suggest why they should value source for its own sake, because it enables other kinds of interaction, but it’s pointless to pontificate. So if I or any of my peers in the free software movement have pontificated to you, I apologise for myself and I apologise on their behalf. Empty rhetoric is not what we want you to get out of our work.

Which brings me to the rest of the accusation, what in my friend’s words is a “shit product”… which I don’t think identi.ca is, the interface seems very polished to me (I probably shouldn’t have started off showing the interface by showing off my own identi.ca dark theme; dark themes seem to provoke very intense negative reactions in people). If my wish of everyone using identi.ca or (Octave instead of Matlab!) won’t happen with preaching, then how will it happen? By building a non-shit product, one with a good user experience, one that is architecturally sound.

Clearly being free software isn’t an impediment to being of good quality. We can find software both free and not of good and bad quality. But if there is software that already exists of good quality and it’s not free, then why bother creating a free alternative? And here I come again to Octave and why I felt a poignant need to write this blog post. I am, after all, working on a free project with which I hope to give Matlab users and other people with numerical computing needs better ways to freely collaborate. Octave does frequently receive accusations of having a bad interface (but Jacob Dawid’s Quint project in our private Octave clone may very soon fix this!), of not having enough toolboxes, of being slow, of not having a JIT compiler… all of these are complaints of varying validity. Matlab users have come to expect them, and if we are to offer Octave as an alternative that respects their freedom, we also need to address user complaints.

Here I come to what I felt was the crux of my friend’s complaint. Why bother? If there is something that already works, why recreate it freely and offer something that is a worse user experience? Well, I find this defeatist. If you had the option of software of equal functionality and quality, wouldn’t you prefer it to be free? I think you, yes, you deserve free software, so I’m trying to build it for you, with you. It may not be all that you want right now, but we can always try to make it better. Perhaps you may even help me! Or not, you’re free to do what you want, just improve it privately without even giving me your improvements. That’s fine too.

Will we ever win? Will Octave ever be the de-facto numerical computing environment instead of Matlab like our brothers-in-GNU with the R project are for statistical computing? Will identi.ca receive Twitter refugees when the company takes an irredeemably evil turn in the future? Who knows. But we must not lose heart. We have the capacity to build something better, and because we all deserve something better, we must keep trying. It’s our duty to ourselves, as a community. It’s not a holier-than-thou attitude; it’s thou-art-just-as-holy-as-everyone-else attitude. These are worthwhile windmills to tilt at, we have the steed, we have the lance, so tilt we must.

Making posting easier

Dear lazyweb,

How can I make blogging as painless as possible? I’m an Emacs + WordPress user. I wish I could just easily post from Emacs. Right now, I still use the WordPress admin website for posting, and although of course it’s not hard to do it this way, it’s awkward to have to log in and do a few administrative tasks before I can post. I tried org2blog, but I don’t like it too much because it was almost as much as work, plus I had a hard time getting org-mode to not try to be more clever than me and no write its own HTML. Right now, the way I feel most comfortable writing in Emacs is in html-mode. I like writing my own HTML. It’s easy enough that I don’t need any pretty interface to it; plain HTML is simple enough.

I really need to lower the activation energy to blogging to almost zero. Of course, that alone might not make me blog more often, but any amount of nontrivial activation energy will slow me down. I may end up writing my own Emacs solution if I don’t find one, but perhaps there’s an easy method out there I’ve missed.

I hate git

… or at least I hate it for now.

I’m a Mercurial kinda guy (hereafter hg). Mercurial is the version control system (VCS) that Octave uses, so that’s mostly the reason why I started using it too. I started reading about it, and learning it, and liking it a lot. It makes a lot of sense to me. It’s simple when it needs to be simple and flexible when it needs to be complex.

The other big contender for a VCS is usually git. In fact, it’s quite a large contender. Just going by comparing github and bitbucket, the two large commercial hosts for git and hg respectively (don’t let that .org domain fool you, bitbucket is definitely a commercial venture), github is way larger. It is by far easier to find people praising git in the blogs, the discussion forums, and the mailing lists than it is to find people cheering for hg. I have dabbled with git in the past, and I always found it difficult to understand. I always chalked up this difficulty to just being more familiar with hg, and being nothing more than a personal preference. However, I have recently seen that I am not alone in thinking that git is complicated. Regardless, seeing how immensely popular, vastly more popular than hg it is, I decided to try git again today.

I decided to make a conscious effort again today to learn and use git. I had a practical reason too, to fix a Debian RC bug (perhaps a little late, I hope the release managers let the package back into testing after this). Also, I wanted to streamline the flow for hacking on Debian packages. The Debian packaging of Octave used to be under svn, and later turned into git packages. One thing that makes a lot of sense under svn, since it tracks individual directories, not whole projects, is to only put the debian/ directory under source control. This practice got inherited with the git repositories, and it’s really awkward. Setting yourself up to hack a Debian Octave package goes something like this:

apt-get source octave-foo
rm -r octave-foo-$version/debian
cd octave-foo
git clone git+ssh://git.debian.org/git/pkg-octave/octave-foo.git

    # ...
    # hack hack hack
    # ...


which is really awkward. My goal was to get to this:

git clone git+ssh://git.debian.org/git/pkg-octave/octave-foo.git

    # ...
    # hack hack hack
    # ...


So I set out to do that. With somewhat unfortunate results.

Let me talk a little more about where I’m coming from: hg. In hg, there are some guiding philosophical principles that have become second nature to me when working with source. One of the core hg principles is that it’s really hard to destroy data, in particular history. There are certain destructive operations with hg, but they almost all create backups, and are disabled by default. The way to enable them is to turn on extensions. In particular, hg makes it virtually impossible to destroy any data remotely unless the person who controls that remote repository somehow enables it with hooks. That is, the person would have to write a script that when you manipulate their repository remotely (and the only commands to do this are pull and push), that script would delete some data.

This vibes really well with me. One of the things that git users praise the most is how easy it is to edit history, to undo mistakes, to rebase changes… hg doesn’t make these tasks impossible, merely difficult or disabled by default; and I tend to side with that point of view. It’s safer. Mercurial takes care of my data when I want it to, and when I need it to do dangerous things, I first have to remove its muzzle, and the muzzle snaps back into place when hg is done doing its dastardly deed. It’s a bit like using “sudo” to perform just one dangerous operation instead of “su”, and then staying in the root shell, while performing several operations, none of which really needs the extra permissions.

So on to what happened: during my work of trying to make it easier to work with Debian, I had created several git branches (which are nothing like hg branches, but whatever, that’s not a big deal). When it looked like my work was in good shape, I pushed it to the Debian git repo. Oh, oops, that only pushes one branch. That’s quite unlike hg which pushes all of the work here that doesn’t exist there. Well, not a big deal, that’s a bit like git’s staging area I thought. Just one more step to get what I want. But I had like three different branches here that weren’t there, so I figured there must be some command to get them all there at once. I asked around in IRC, and someone naïvely suggested using the --mirror command, and I naïvely trusted them without checking what that option would do. I thought it would just copy all of my branches from here to there, mirroring all of them.

And so it did. However, it also checked that there were some branches there that I didn’t have in my local clone, and it erased them. I blinked. Wait. Did git just remotely remove some branches? Oh, well, I’m sure it’s just some metadata that got moved around. Where’s the undo button? Rollback? Restore? I went to #git in IRC to ask.

“… you do have backups, don’t you?”

I blinked again.




You’re telling me… that a VCS… one of the most popular ones out there… allows me to delete data remotely? With a command that isn’t called even called “delete” or “wipe” or “force” but innocuously called “mirror”?

I was aghast.

My conversational partners in #git gave me the usual spiel about backups, about how it’s great to be able to shoot yourself in the foot, about how it was my fault, about how I should have read the manual… but I was unable to accept any of this. I just couldn’t conceive that a tool that is supposed to keep my history … to be a little “bit-hoarder” … to never lose data … not only lets me lose data locally, which is ok, but furthermore lets me delete data remotely.

Now, granted, this wasn’t terribly important data. Nothing of great value was lost. Since branches in git are more like tags (but not what git calls tags), it’s just metadata that was lost. The functional part is all there. At the same time, a user’s most valuable possession, data, was harmed by the very tool that’s supposed to protect it. I hate the idea of having to tiptoe around my VCS, which should be a tool that lets me experiment wildly with my source, to try out crazy ideas, and at the same time keep my source safe, multiply backed up, fully mirrored in every clone of the source whether local or remote. Mercurial, for example, doesn’t let me delete data remotely. The worst I can do is add a lot of useless data remotely, but that’s much better than being able to delete it.

Reeling, I did the only thing that could be done and emailed the Debian Octave Group mailing list, asking if someone had a clone of the repository with the missing branches. I hoped that I could recover the lost data by copying it from them. If not, it won’t be a great loss, just an awkward inconvenience. The whole experience, though, has given me a great distaste for git. I still find it much more complicated than hg, even despite my best attempts to understand it. And it’s shown me that I can’t treat it carelessly, that I have to read its gargantuan manpages and thoroughly understand each and every command and option before I use them, lest I provoke damage.

Next time, I’m using the hg-git extension, and I don’t think I’ll be touching git again for a while until I recover from this nasty experience.

Это Сан Франциско, город в стиле диско

Pretty awesome day in the Bay Area today. The Russians summarised it so a couple of decades ago:

We went to the computer history museum, I discovered that I have a bit of talent for Dance Dance Revolution and loved it (how did I manage to let that game intimidate me all this time and didn’t even try playing it?), rollerskated like I hadn’t in years, and finished the day really awesomely meeting up with very cool people that I only knew from the internet.

There’s a chance to do more things tomorrow, all equally fantastic as today. This has been quite a productive trip! It remains to be seen if its ultimate goal was achieved. They said I would get an initial response very soon.

Andrew S. Tanenbaum, where have you been all my life?

I’m currently reading Modern Operating Systems by Mr Tanenbaum in preparation for an important interview, and I have to stop to interject, what a fantastic book. I wish I had come across it earlier. It has very lucid and detailed explanations of many workings of computers that I have long wondered about but never had been able to study.

Bit of background here. As I like to say, I went to maths school, not to computer school. At the time, the choice was quite a conscious one. I knew that computers would always be in my life, and that contrary to making them a more central part of my life, I could always do that on my own, but I needed the formal training to make sure mathematics always kept that central position too. And I do indeed almost instinctively keep on working with computers, as I am doing now with this book. At the same time, not having gone to computer school often makes me feel that I’m at a slight disadvantage with those who have. How to parse a programming language and build a compiler, how to do proper software architecture design, various ways of programming, how an operating system is built, the various concurrent programming algorithms; these are all things you learn in computer school, but not in maths school.

I am not complaining. I learned many other things in maths school, and when I see CS students or programmers balking at mathematics, I chuckle inwardly (and sometimes, I’m embarrassed to say, outwardly). I also learned how to program in maths school, but in a different way, with an emphasis on good numerical algorithms, not the other things they teach there.

In this regard, this book is a treat, because I feel like it’s filling the gap that my formal education didn’t, and it’s also vindicating my decision that I should have studied maths, because the computer part would always draw me throughout life. By comparison, I require much more self-discipline to absorb completely new mathematical material, but a programming language, technique, idea seems to be much easier to be passively assimilated.

By the way, in case the name sounds familiar to you, Mr Tanenbaum is the creator of MINIX, an academic operating system that was the original inspiration for Linus to work on the penguin-clad operating system kernel that bears his name. If I had known earlier that such a book existed, I would have done my best earlier to get it.

I’m reading the third edition, which right now is still refreshingly recent. Computer books age extremely quickly, so it’s nice to read one that’s not outdated for once. I’m also reading it in Mexican Spanish, because it’s what I could find, but I’m not complaining about this either. The translation is wonderfully done, and I really like almost all of the translation choices made. I’ve noticed that Mexicans tend to be much more industrious and precise about technical English translation, whereas most other hispanophones resort to unimaginative calques or leave the English outright untranslated. Rummaging in Spanish for just the right word is work, too much work for some, but in the end it produces much more beautiful text. For example, “deadlock”, a very Anglo-Saxon word with a meaning difficult to convey, becomes “interbloqueo”. Such precision of language! Brief word, same meaning, Latin roots, and even English speakers can guess its meaning. I wish Spanish could develop its own technical language tradition, but that’s a blogpost for another time.

We’re back in the air!

My laptop Iris is back from the shop, and it’s totally like this:

There was a bit of a mixup in that her keyboard is now the wrong layout, but they promised me that they would order the previous layout (US layout, baby, big backslash keys, no L-shaped enter key!).

For now, I got a huge backlog of patches for Octave and LiDIA that I should have written but haven’t. I’m thinking of actually putting up a semi-permanent TODO page.

Iris in the shop

Iris is my laptop. She’s a Dellbuntu, which may soon become a collector’s item. About two weeks ago, I spilled some tea with sugar on her. She worked for a week after that, but her keyboard died unexpectedly a week later. I know, I know, I should have foreseen it, should have cleaned her, but I thought I was in the clear when she mostly worked fine, until one day the keyboard completely died.

So, now she’s in the shop. I have to wait for the parts from Dell to come across the border, which they tell me will happen this Friday. In the meantime, I’ve been using public and borrowed computers, and this has only reminded me how much I hate every computer except Iris. I personalise her to such degree that it’s uncomfortable for me to use another computer.

This should all change soon, and she should come back to me safe and sound by this Friday. Can’t hardly wait. Sharing computers is unhyegenic. ;-)

Linked on Reddit

Oh, dear me.

A few years ago, I wrote a strongly-worded opinion piece on just why I believe so strongly on free software. Today it was linked on Reddit. While I do want free software everywhere, and I would like to completely abolish the notion of proprietary software, I see that as a distant dream. My immediate goal, my highest priority is to have free software for mathematics, because I think that hiding source and restricting distribution are the antithesis of mathematical work. Others have other priorities, but for me, free software in mathematics is highest.

In this vein, I wrote this some time ago. It’s a piece many people have read, and it always seems many have an opinion about. Many love it, but also many strongly disagree with it. They cite objections that say that the ends justifies that means, that having a good software package for doing mathematics trumps any need to have its source, that it’s ok to hide source if you’re making money, and that without the money that restricting distribution provides, you wouldn’t have quality software at all.

Needless to say, I believe all of these objections to be false if stated absolutely, as there are plenty of counterexamples to each, of varying degree. Nevertheless, I don’t have the energy to individually present them again, nor to address my detractors in the Reddit comments. I’m both sad and happy when I read those comments, and I wonder which direction the discussion overall will take. As for that beacon in the free software movement, Richard Stallman, whatever you might think of him, you have to admire him for his boundless stamina to be able to tirelessly participate in these discussions, and for being so self-consistent both in words and actions about what software freedom should be.

For the moment, I do not feel like arguing about this anymore. I feel like actions. Talk is cheap. I’ll show you the source. Perhaps we will never amount to anything, perhaps Octave will forever lag behind Matlab in one way or another, perhaps Sage will forever be a patchwork of individual programs of varying quality. Or perhaps not. Regardless, I don’t care. We must proceed. I must proceed. We must do, we must keep faith, because it’s obvious that even if the goal is unattainable, it’s the right goal. I would hardly be a hacker-errant of the rueful countenance if I didn’t think so.

Salve, cronica electronica!

Hello, blog!

Hopefully this post is the first of many. I plan to write about several things, both personal and more public/professional.

I must say, WordPress was quite easy to set up, but I’m still not sold on PHP. I had to patch a few things here and there, in particular with this nifty $$\LaTeX$$ plugin that I plan to put to good use. Oh, and while we’re talking about meta, thanks also to Tim Saimburg for this free nifty blog design. I tweaked it a little for some spacing, colours, and font sizes, but just barely. Thanks!

It’s a Saturday afternoon, and I’m tired of tweaking and setting up this blog — which I can barely resist to call “blag”, but I will defer to established use — so I will rest for now and do other things.