Introducing Chafa


Here’s something I didn’t know: The DEC VT100 turns 40 in August. This factlet comes courtesy of Wikipedia, as I’m not quite old and wise enough to have made its acquaintance outside of a museum. None the less, the VT100 and its extended family of hard-working office furniture has always been with me in terms of the ECMA-48 standard, better known as ANSI X3.64 or simply (and these days, probably as accurately as any formal descriptor) “ANSI codes“, which it helped pioneer.

This pinnacle of 1970s UX is somehow still going strong, and recent developments like lots and lots of colors, ubiquitous Unicode support, good monospace fonts, etc. have opened up some interesting possibilities for creative abuse in a rich tradition that dates all the way back to manual typewriters, if not further. Previous entrants in this category are the venerable aalib and libcaca, and more recently there’s timg and others that use the U+2580 half-block symbol.

I wrote a small tool to further improve on this. It combines a range of Unicode symbols in an attempt to minimize the squared error of the output, and has plenty of bells and whistles besides. Check it out.

GNOME and Rust

I’ve been keeping an eye on Rust for a while now, so when I read Alberto’s statement of support for more Rust use in GNOME, I couldn’t resist piling on…

From the perspective of someone who’s quite used to C, it does indeed seem to tick all the boxes. High performance, suitability for low-level tasks and C ABI compatibility tend to be sticking points with new languages — and Rust kills it in those departments. Anyone who needs further convincing should read up on Raph Levien’s font renderer. The usual caveat about details vis-a-vis the Devil applies, but the general idea looks exactly right. Rust’s expressiveness and lack of baggage means it could even outperform C for non-trivial code, on top of all the other advantages.

There are risks too, of course. I’d worry about adoption, growth and the availability of bindings/libraries/other features, like a good optional GC for high-level apps (there is at least one in the works, but it doesn’t seem to be quite ready for prime-time yet). Rust is on an upwards trajectory, and there doesn’t seem to be many tasks where it’s eminently unsuitable, so in theory, it could have a wide reach: operating systems, platform libraries, both client- and server-side applications, games and so on. However, it doesn’t appear to be the de facto language in many contexts yet. Consider the statement “If I learn language X, I will then be able to work on Y.” Substitute for X: Java, Javascript, Python, ObjC, C, C++, C# or even Visual Basic — and Y becomes obvious. How does Rust fare?

That is, of course, a very conservative argument, while in my mind the GNOME project represents, for better or worse, and C use notwithstanding, a more radical F/OSS philosophy. Its founding was essentially formulated as a revolt against the Qt license (and a limited choice of programming languages!), it was an early adopter of Git for version control, and it’s a driver for Wayland and Flatpak now. For what it’s worth, speaking as mostly a downstream integrator, I wouldn’t mind it if GNOME embraced its DNA yet again and fully opened the door to Rust.

Novell hack week, day 4

Four days down. How time flies when you’re having fun. I must admit that Sterling is barely past the point where it creates a panel applet that does nothing – but on the other hand, I’ve absorbed a bit of how-to on C# and Mono tools. It’s rather pleasant so far.

Apart from the panel applet business, I’ve gotten the build framework for GConf schemas, gettext, icons and UI files out of the way, so I think it’s fair to say it’s getting ready to administer kicks to the proverbial hindside. I’ll have a public Git repo up sometime tomorrow.

Sterling panel applet
Hey, it’s a start.

Novell hack week, day 2

Day 2 is at an end, and I’ve spent it learning about C# and Mono tools, looking into how other projects do stuff. I now have a Git repository with a fledgling project structure, and a more solid foundation to work from knowledge-wise.

I feel a little bad for posting that Monodevelop screenshot yesterday. The intention wasn’t to make Monodevelop look bad, but rather to convey the occasional feeling of exasperation you can get when learning to use new tools, moving outside your comfort zone. I was using the older version that comes with openSUSE 10.3, assuming that would’ve been patched to fix most serious issues. I was wrong.

Fortunately, the eminent Mr. Hutchinson pointed me in the right direction – I got a newer version from one of his build service repos, and that works much better, although it still spews a little to the terminal. You can tell a lot of work went into it; this is the first time I’ve felt like I’m using a true IDE on Linux, i.e. the “integration” part actually works.

Mike arrived from Mexico City last night and will be spending the next couple of days here. His tiny new Lenovo X series Thinkpad looks totally sweet, but he spent a lot of time fighting poor wireless drivers. I guess most of us can empathize with that. Tomorrow, Tambet and Federico will hopefully join us, and we can all bask in teh hack week synergy.

Novell hack week, day 1

Novell’s hack week has started. For those of you who don’t know what a hack week is, it’s a work week where we, the programmers at Novell, get to goof around with more or less whatever project we find interesting.

I’ve chosen to start a new project called “Sterling”, the goal of which is to keep better track of my moneys. I’ve used GnuCash to do this for some time, but it’s clunky and overkill for my uses. I want to streamline the process of entering transactions and otherwise keep the complexity down, especially for people like me who know (and care) little about accounting. Indeed, I want the UI to resemble Tomboy‘s in many ways:

  • Always running, with a panel applet interface.
  • Desktop-global “new transaction” hotkey.
  • Per-user database, no open/save dialogs.
  • Implicit save on edit.
  • Type-ahead completion of transaction description.
  • Suggesting details of transaction based on similar past transactions.
  • Tagging of transactions for easy cross-sectioning.
  • Simple search-as-you-type view of transaction history.
  • Multiple currencies recognized by their ISO 4217 codes.

Star Trek future features:

  • Currency conversion (use Google?).
  • Multiple registers (similar to books in Tomboy).
  • Export to XML, merge from XML.
  • Remote synchronization (by Zeroconf discovery or specific URI) allowing for shared databases.
  • Desktop search integration.
  • Drop-dead attractive graphs.

In order to make things as difficult for myself as possible, I’ve decided to learn something new and do it in C#/Mono. Of course, I’m already running into trouble…

MonoDevelop got stuck

Strange but true. I miss C, Emacs, Automake already.