blog.rupamsunyata.org

Decklin’s excuse for some blogging software. Est. 2006.

Njiiri 0.2.0

Seems like it's been ages since I've been able to do this (probably because it has!): I've released a brand-new piece of software.

Njiiri is a client for MPD, using GTK+, written in Ruby. I don't see a lot of desktop apps out there using Ruby, so this was a new and fun experience for me. I've tried to make it as "boring" as possible, in the sense of looking vaguely like a proper, HIG-compliant GNOME app, with (appropriately) no pointless configuration knobs. The browser, in particular, is a mostly pixel-for-pixel clone of the standard file-open dialog. And it's accessed by a big toolbar button with a stock "Open" icon.

Basically, if desktop software makes me think ("oh, I'm in iTunes, all the controls work differently, let's adjust our approach"), it's failed. For me, anyway. So, I'm pretty happy with the direction I'm going (even though I'm very much not there yet. I haven't hooked up search, for example).

One of the things I like about MPD is that it gives me the freedom to remove things if I want to. And I like removing things; small is beautiful. For example, I originally had no place to stick a crossfading control in, so I was going to just dump it. If you need it, "mpc crossfade" is a terminal away. (It turned out that it did eventually fit nicely into my layout. I'm a bit obsessive about aesthetics.)

In a similar way, I've avoided duplicating anything I do with homegrown scripts or mpdtoys; there's just no need. What I want out of a GUI frontend is a sort-of tangible way to manipulate things when I feel like looking at them visually for a bit. Then I close it and move on.

MPD certainly isn't the most wonderful implementation of a system which allows that, but the client ecosystem is quite diverse and I'd say it deserves a look if any of this sounds interesting to you.

The cradle rocks above an abyss

In related news: with sup out of the way, I have returned to packaging Mnemosyne, the program that powers this blog. It is also in NEW, so expect to see it soon. (Like sup, which is packaged as sup-mail since sup is the Software Update Protocol, it is mnemosyne-blog since mnemosyne is the program formerly known as PyQt MemAid.)

If you're just joining us, Mnemosyne compiles a Maildir into a static site. You can use it for a blog or just about anything else where a traditional CMS would be overkill. It's all XML and Python-extensible. The documentation kind of sucks, though, so I'm also hoping I get some more users from this to tell me what to fix. It hasn't otherwise seen much action since the beginning of 2006. Drop me a line if you have any feedback!

(If it's not obvious, I think blog "comments" in general are pretty worthless. But with some craftiness, they could certainly be implemented within Mnemosyne as it stands. As could a general mailing list archive, etc...)

What's sup?

After some weeks of final testing, I've just uploaded packages for sup-mail to NEW. I'm pretty excited about this.

Sup is a console-based MUA, like mutt (which I have used for many years). A few things distinguish it from most mail readers targeted at geeks like us:

  • Sup has no folders, a la Gmail. After watching many friends and even fellow hackers switch to Gmail, I have to admit: this literal hierarchical organization thing doesn't scale. I was planning to totally redo my mail folder system Any Day Now for about six months prior to starting on this. It was never going to happen.
  • Sup uses a Ferret full-text index to make this approach plausible. Search is super fast and beats (for me) both any kind of "organization" I could have disciplined myself into and the fine-grained control of something like mutt's search. It's sort of like git: until you do it, you don't realize how much more productive you can be when previously-expensive operations become instantaneous.
  • Sup works with threads, not messages; this is another thing Gmail got right. I used to waste brain cells thinking about which messages in a thread were worthwhile enough to save or not. Given the absurdly cheap price of disk relative to what we can type out in plain text since, like, a decade ago, this is crazy. In the index, I only have to look at whether a thread has new chatter or not, not its size, shape, or where the new messages are relative to it. All that's in the thread-view buffer where I actually read content.
  • Sup is written in Ruby. Back in the dawn of time, I used Gnus, and while I wasn't very good at elisp, the hackability afforded by being written in a high-level language was very nice compared to programs mostly implemented in C (even if they had a tacked-on scripting language). Plus, I love Ruby right now.

Despite all of those wins, sup currently has many drawbacks, and I don't recommend it for everyone. (And I mean everyone who thinks that the above are good ideas and are interested in using it; plenty of people, I'm sure, already think everything about this is idiotic, not new, or inferior to their preferred MUA. That's fine! You can ignore it all.) Here's what's still problematic:

  • At version 0.6, sup is very much not-yet-1.0. While it handles insanely large amounts of email without breaking a sweat, I still keep an additional backup of everything. (If Ferret crashes, the original copies of mail will be untouched, but it never hurts to be paranoid.)
  • The flow of data from your physical mail store to the sup index is currently one-way only. Actually removing deleted/spam messages is a big hack (if it works at all), and labels/flags/etc live entirely in Ferret-land. If you want to manipulate an actual mailbox, mutt is still the tool for the job (and then, you need to re-sync sup). This is probably the deal-breaker for most of us. I jumped in anyway because I feel like it can be solved (or more likely, made irrelevant) later.
  • William (upstream) is currently re-designing the whole thing from scratch, replacing the index library with Sphinx, and decoupling the index from the console frontend. As a result, the previous item is pretty much a non-priority (and bugs in general are not going to get the same amount of love as usual). I am hoping that we end up dumping mail into the index directly, then writing more frontends to write to Maildir backup, serve as webmail/whatever, but this is a long way off. On the plus side, thanks to Thrift, they will not be limited to Ruby.
  • Ruby's ncurses library still doesn't handle Unicode correctly. It can be patched (still doesn't work totally right), but I'm trying to find a more permanent solution for Debian.

So, if you're interested enough that you want to deal with these warts for now, apt-get install sup-mail (as soon as it hits the archive) and join us! Hopefully being in Debian will increase the userbase and get things fixed faster. If you're unsure, stay tuned for the next-generation version later.

(There are screenshots and a few introductory docs over at Rubyforge that illustrate and explain all this in more depth, which I recommend checking out if you're still saying, "...huh." Me, I'm a sucker for any piece of software with a manifesto.)

Mnemosyne 0.9

Alrighty, the example blog really works again. I should spend some time on making some interesting “themes” now, probably, but I really hate making themes. Web “design” in general really.

See what I said here, really. I’ve never been entirely sure if that page is supposed to be something you should read if your attitude needs adjusting, or if my attitude needs adjusting. Probably both. (“The Pope and I can take it, but don’t pick on Pat Buchanan...”)

What I really ought to do is kill that stupid S2 friends-view layout I have, but, yuck. S2.

New Mnemosyne

0.8 is up. I was going to fix a bunch of the docs and examples, because someone requested it, but then I found an actual bug so it seemed like a good idea to get it out now.

I need to write Last.fm docs too. Procrastinate, procrastinate.

It's called cat, because, you know, dog...

Okay, I think the tag plugin is done.

New blog

Okay, I’m putting this blog on Planet Debian... now. The old one is not gone yet, because I’m tired and I don’t think I’ll do it until tomorrow.

In a fit of hubris, I wrote some software to run this blog (which is just a bunch of generated static files), called Mnemosyne. I was bored of PyBlosxom and it was slow. I believe Erinn said something like, now it’s only a matter of time until I write my own RCS... If I get to that point I will really start worrying. If anyone is looking for something along these lines, please tell me what sucks and/or what is broken.

Anyway, rather than categorizing things (ugh), I’m just putting anything tagged “planet” in the feed that goes here. I think this will work better.

Oh, and I almost forgot: my blog now has automatic flooding-prevention. Nothing older than a day gets in this feed. I don’t know why feeds in general don’t have some sort of time limit.

Generated by Mnemosyne 0.12.