Fresh from the Lab

John Knight

Issue #169, May 2008

A look at promising software in development.

Zero Install System (0install.net)

You may have heard of this project before—another attempted solution to a software installation problem with Linux. What is the problem, you ask?

How do you install new software on Linux easily, in a uniform manner that won't scare off a shy Windows user? This area often needs attention, and we turn a blind eye because we're used to using apt or something similar. Are systems like apt really sufficient though? What if the program I want to install isn't within a distributions's archive? What if it's too old? What if I want a newer version than my distribution's archive provides, without upgrading a gig's worth of my whole system to satisfy all the other niggling dependencies? What if my distro dies off and its archives disappear? What if I simply want to do the same thing on each system?

Zero Install is the next in line for tackling this issue where projects like Autopackage failed, but will it tickle the fancy of the larger Linux audience?

Installation

Thankfully, a large number of binaries are available, and they will probably cover your system's needs. I grabbed the Etch .deb, and it worked without any hassles. If your system isn't covered though, the site includes a source tarball that contains a Python script, plus instructions on how to use it. There aren't any real obscure dependencies, so chances are the base package will install without any issues.

Usage

Initial usage is more of a command-line affair, which puts the Zero Install System in a different league from Autopackage immediately. Once the Zero Install Injector has been installed, you can install packages simply by typing 0launch and pasting the URL of the package into the shell after it. However, finding the page of available packages took me a minute—it's available at 0install.net/injector-feeds.html. Once you've found a package that interests you, copy the URL of the package and do as follows:

$ 0launch http://insertyourURLhere

An installer window will pop up, displaying the package name and any dependencies you may require. In a few seconds, a window may appear, presenting you with a trust key (a GPG signed key), asking you whether to allow this key to run, which is similar to when your browser asks whether to accept a site's Authentication Certificate. As there aren't a great deal of packages available yet, trusting these keys is fine for now, but should they become popular, you will want to examine closely the key presented. Once the key business is out of the way, press Run, and the download of the new package will start along with any other dependencies. Once the download has finished, the new program should launch right away. If not, any error messages will appear in the shell.

Figure 1. Zero Install chases down dependencies along with the new program.

Figure 2. Zero Install presents an interesting trust key.

This is all okay for the first time, but any other attempts to run the new program will require the same arduous steps each time. Thankfully, with some clever scripting, a local link is made that puts a filename into your path without the need for root privileges. It will require you to enter the URL once more though, coupled with the command 0alias and your chosen alias name, as follows:

$ 0alias alias http://insertyourURLhereagain

As a real-world example, I had success with a game called Barrage, and the shell input looked like this:

$ 0alias barrage http://people.freenet.de/LinuxCNC/0install/barrage

Now I can run the program in the future simply by entering barrage at the command line. Included on the package page is a selection of tools for simplifying some of these tasks, but the above steps are still required for installing them.

Zero Install definitely has an interesting interface with its own unique take on distro-independent packaging. I'm guessing many people will be turned off by the command-line nature of this beast, especially with the copying and pasting from a Web browser (command lines and GUIs have never made the best of comrades). Also, many of the tools seem to be based on the Rox file manager—a great lightweight system but still relatively obscure to the larger Linux audience.

Personally, I mourn the demise of Autopackage, an outspoken project that received a great deal of hostility from the traditional distro packagers, such as Debian, that ultimately sparked its demise. Other similar projects take a more pragmatic approach—some with a more “Windowsy” installer (not necessarily a bad thing), others as unique as this one. Zero Installer may gain popularity simply by not being Autopackage and subsequently not angering the apt-get overlords. However you see it, I hope all these distro-independent packaging projects are sending a message to the developer community that not everyone is happy with the idea of being reliant on repositories, and a major change is required soon in software installation methods. This issue won't go away.

deco—Archive File Extractor (hartlich.com/deco)

deco is great for people sick of typing tar -zxvf, -jxvf and so on. According to the project's Web site, “deco is a generic archive file extractor that has a consistent command-line interface (deco 1.tar.bz2 2.zip 3.flac 4.rar 5.deb will just work) and consistent behavior (it never deletes archives after extraction, it extracts relative to the current working directory, and it extracts just verbosely enough, all unless explicitly requested otherwise). It provides automatic handling of extractor gotchas by creating an extraction directory if there is more than one file or directory at the archive top level and by being able to fix strange permissions. Dozens of archive file extensions are supported out of the box, and adding support for others requires very little work.”

Figure 3. deco is probably the easiest archive extractor I've used.

Installation

At the time of this writing, deco is available only as a source tarball; however, installation is easy and unlikely to cause any hassles. After extracting the archive and entering the new directory, doing a standard:

$ ./configure 
$ make
(if not root) $ su 
# make install 

worked with no issues, and probably will do the same for you, as it doesn't have a large amount of dependencies.

Usage

The general usage is simply:

$ deco filename.tar.gz

That's about all there is for most people—short and sweet. But, what tricks lie under the hood? There are all sorts of neat optimizations.

For instance, usually Linux projects are placed in a directory within an archive to keep source directories from becoming cluttered. Unfortunately, archives sometimes have files placed straight in them, without being placed in a directory. This fills up your source directory with all sorts of unwanted files that also may be overwritten. deco places an archive's extracted contents within a directory to keep things clean. Cleverly, if an archive already has its contents contained within a directory, deco extracts the archive as is. If not, deco places them within a directory named after the filename, minus its extension.

For example, if I had a file called tuesday-jam-session.tar.gz, deco would place the contents under the directory tuesday-jam-session.

If you want further control, such as deleting the archive after extraction and so on, this also is possible with a series of command-line switches, available on the project's Web site. Even if you're happy with the way it works already, it's worth reading the site to see some of the other options available, and also what neat tricks and shortcuts lie under the hood.

Something to keep in mind is that the deco project doesn't try to re-invent the wheel—it isn't monolithic. It's reliant on having the necessary external extraction tools available, such as unrar for .rar files and so on. However, this is the approach taken by most archive tools, so most people expect that anyway. Nevertheless, it wouldn't take a great deal of work to include all these external programs in one big package, so any enthusiasts of the project may want to do just that. Although it's currently available only via source, hopefully it will make it into most distro archives soon.

Overall, deco is a lovely little program that is likely to save many a tired, caffeine-fueled coder some midnight grief and make computing just that little bit nicer.

orDrumbox (www.ordrumbox.com)

orDrumbox is a small, Java-based drum-machine applet that runs on Linux, Windows and Mac OS X. Designed less for the drummer and more for the desktop DJ, orDrumbox quickly makes funky mid-tempo electronic tunes with beats and inserted samples. Developed using Java, this drum machine is highly portable and lightweight, which is ideal for DJ enthusiasts jumping between machines and showing their friends.

Figure 4. Surprisingly, just clicking randomly probably will make a halfway decent beat.

Installation

As far as packages go, the only Linux binary available is an .rpm (not handy as I have a Debian-based system). Source code is available, but it is zipped and for Java, and not everyone will have a compatible compiler. I downloaded the .rpm and converted it to a .deb using alien, which is not difficult; check the alien man page for more info. Thankfully, it converted and installed with no major issues. When I started the program though, it required a particular version of Java, jpackage-utils (see www.jpackage.org, also available on rpmfind.net). This had no Debian file either, so I had to use alien on this package too. Luckily, there were no complaints here either, and after these two steps, the program simply worked.

Usage

To start the program, enter orDrumbox.sh into your shell. If all goes well, the program now should be working. If you look in the top half of the orDrumbox screen, there should be a window called Pattern 0 (Edit)—this is where most of your work will happen. If you look to the right of the box containing a 4 at the top of the window, you'll see a gray and yellow box. Hover your mouse over it, and it will say, “create new track”. Press this a large number of times (14 and up for the default drum kit), as each line creates a new instrument with which to play. On the left of each line are the controls for each instrument, including volume and so forth. On the right is the Note Editor area.

With the Note Editor, double-click any of the boxes, and they will change from white or gray to green and red. The green tells you what note will be played, and you'll see there are two red sliding bars: one going from bottom to top, the other from left to right. The bottom-to-top slider controls the note velocity, and the left-to-right slider determines the note and octave played (or the pitch). It defaults to C2, but it can be tuned up or down accordingly. Click randomly in any of the boxes, then click the large play icon in the bottom center of the screen. A beat will start playing—probably a strange one. Try changing the pitch and velocity randomly, as well as adding new notes and removing old ones to see how it affects the beat. To remove any notes, simply right-click in the note's box and choose delete note.

This should be enough to get you started on beats, but you'll need the user manual to get more involved and create whole songs. Check the manual available on the Web site, and try out some of the custom drum kits available too. There are some limitations with the scalability of the program, and the biggest limitation is that it's limited to 120BPM. This is enough for most electronic and dance music, but it's unsuitable for genres like punk, speed metal and so on. The sounds that are provided with these kits really are geared for more electronic genres anyway and will sound strange with anything rock-based, so those into fast rock genres will want to stick with something like Hydrogen. Overall, this is a fun little utility that will find its way into the hearts of many a home DJ.

John Knight is a 23-year-old, drumming- and climbing-obsessed maniac from the world's most isolated city—Perth, Western Australia. He can usually be found either buried in an Audacity screen or thrashing a kick-drum beyond recognition.