Category Archives: Software

Firebird was almost interesting…

I was looking at the Firebird database recently. Free Software, very feature complete, and one neat feature was that it could run either client/server (like PostgreSQL) or as a standalone .so (like Sqlite). I was starting to look into using it.

Then I discovered it only supports i386 on Linux, and no progress has been made in 3 years on that.

So I will not be trying Firebird.

I thought we had all learned by now that portable code is a good thing. Guess not.

I will be sticking with PostgreSQL as my preferred RDBMS for awhile.

Hello, ext3. Goodbye, reiser4.

So I’ve been trying out various filesystems over the past few months, by converting a few machines to them and using them on a daily basis.

I’ve found that reiser3, JFS, and XFS are all risky and actually corrupt data on crashes. JFS also has a few weird bugs that make the kernel oops, and sometimes cause filesystem corruption. All of the above also have starvation issues, where one IO-intensive process can dramatically slow down everything on the system (by a factor of 100 or more).

Reiser4 has proven better — only one small issue that I can recall. But it’s got a huge problem: no ability to resize a Reiser4 partition. That is rather ridiculous these days, and really reduces the utility of LVM. (Hans says he’ll make it resizable when someone pays.)

So I’ve tried out ext3 again, for the first time in a few years. I’m using data=ordered,commit=300 (or 600 on some machines), which still makes it safer than the other journaled filesystems.

And I must say that it is impressive. The old bottlenecks that I was used to were gone. The thing is reliable and fast, and scales well. I’m going to move everything back to ext3.

So why do Hans’s benchmarks show reiser4 being better? For one thing, most benchmarks measure throughput, not response time, so things like starvation don’t cause black marks in them. Most of them don’t even use multiple processes to simulate real-world activity anyway. Plus, ext3’s default mount options (commit=5, for instance) are much more conservatve than other filesystem’s. To get a fair test, one should increase that commit= number on ext3.

Here’s another discussion about ext3.

Some nice code: libarchive

Yesterday, while looking for information on the format of tar files, I discovered libarchive, which is part of FreeBSD. libarchive and read about 5 different tar formats, 4 different cpio formats, zip, and ISO images, and supports gzip and bzip2. It can also write 2 different tar formats plus cpio and shar. Very nice.

Oh, and its tar.5 is the best reference on the tar format I’ve seen.

I’ve packaged up libarchive and bsdtar (the default tar on FreeBSD, which is built using libarchive) for Debian.

Perl, Powered By Haskell

Autrijus Tang is well-known for developing the first working Perl 6 interpreter, Pugs. Pugs is written in Haskell, my new favorite language. Perl.com has an interview with Autrijus, and page 2 of that interview gets particularly interesting. Here are some quotes from Autrijus:

Haskell . . . is faster than C++, more concise than Perl, more regular than Python, more flexible than Ruby, more typeful than C#, more robust than Java, and has absolutely nothing in common with PHP.

(If it has nothing in common with PHP, it must be great, right?)

Haskell is a pure functional language optimised for conciseness and clarity. It handles infinite data structures natively, and offers rich types and function abstractions that give Haskell programs a strong declarative flavor–the entire Pugs compiler and runtime is under 3000 lines of code.

Most languages require you to pay a “language tax”: code that does nothing with the main algorithm, placed there only to make the computer happy. [Java, anyone? — jgoerzen]

On the other end of spectrum, we often shy away from abstracting huge legacy code because we are afraid of breaking the complex interplay of flow control and global and mutable variables. Besides, the paths leading to common targets of refactoring–those Design Patterns–are often non-obvious.

Because Haskell makes all side effects explicit, code can be refactored in a safe and automatic way. Indeed, you can ask a bot on to turn programs to its most abstracted form for you.

Go check out the interview (page 2) for more, including a demo program that Autrijus wrote to show off Haskell.

Thanks to metaperl for the link.

Digikam

Back when I first got my digital camera (a Canon Digial Rebel), I knew I had to find some sort of program to keep track of my photos. I looked at many different programs on Linux, but none of them really did what I wanted. I’ve used some iView software on the Mac some times. While it can do what I want, its database is proprietary, which annoys me. It means, among other things, I can’t write my own programs to pull data from that database.

Lately I’ve been checking out the Linux photo management scene again, and I’ve got to say that digiKam is quite the impressive piece of work.

It has a versatile database, nice interface, and loads of features. Its database uses sqlite, so writing my own programs to work with it will be a snap. I’ve been using version 0.7.x, and it looks like the 0.8.x beta will address all of my few remaining complaints.

I’m moving everything over to digiKam.

Kudos to the digiKam deveopers.

Recent Coding

I’ve been busy coding lately. Here’s what I’m up to:

  • A Haskell binding to OpenLDAP. I’ve got the groundwork laid (I can connect and bind to a LDAP server by now). Next up: searching. After that, the rest should be fairly easy. ETA about 1 week. Development sources: fetch with darcs get http://darcs.complete.org/ldap-haskell. See also the related haskell-cafe thread.
  • Packaged up and uploaded hsffig to Debian. hsffig will parse C .h files and automatically generate Haskell bindings and prototypes for them. It requires zero human assistance. Very, very, very cool. A little rough yet, but this is exciting stuff. Check out the source package with darcs get http://darcs.complete.org/debian/hsffig.
  • Packaged up and uploaded libcdk5, the latest version of the Curses Development Kit (CDK). CDK is a much more high-level tool than ncurses, and lets you say things like “show a dialog box” instead of “draw a border from 3,20 to 3,70 and make it gray”. Check out Debian source package with darcs get http://darcs.complete.org/debian/libcdk5.
  • Updated my MissingH Haskell library so it now builds and runs properly on Windows platforms. I now remember how much I detest them. (Urgh, drive letters complicate path manipulation in millions of annoying ways.)

Looking For Text-Mode Widget Library

I’m looking for a text-mode widget library. Something that has dialog-boxes, etc. for text-mode (curses/console/xterm) programs.

I’ve looked at these so far:

  • tvision/tv/turbovision: Questionable license situation, unsuitable for Debian
  • CDK: Fine on *nix, but unusable on Windows
  • CTK: Not maintained for several years, looks dead, not as good as CDK anyway

I want something with a C library, that supports *nix and Windows, and has support for things like menus, dialog boxes, etc. Any suggestions?