Archive for the ‘Free Software’ Category

KDE4, LFS: Make GTK Applications Look Like QT4 Applications

November 3rd, 2011 2 comments

Do your GTK applications (i.e. Firefox) look like something designed in the 90’s in KDE? I think I can help you.

I installed the latest Firefox, (not the one in the screenshot, I stole this.) and was very disappointed to see something like the following:

Tyler pointed me to the Gentoo guide here, which helped me find out which packages I needed.

If you install Chakra-Gtk-Config, and either oxygen-gtk or qtcurve (make sure to download the gtk2 theme), you will have better looking GTK applications in no time. Note that there are probably tons of other GTK themes for KDE4, these are just some suggestions to get you started.

That is much better.

I am currently running ArchLinux (x86_64).
Check out my profile for more information.

LFS, pre-KDE: Errors Compiling qca-2.0.3

November 2nd, 2011 No comments

If you’re going through the Beyond Linux From Scratch guide, and run into this error while compiling qca-2.0.3 (and I assume many other versions of qca), I think I can help.

You don’t seem to have ‘make’ or ‘gmake’ in your PATH.
Cannot proceed.

The fix is relatively easy. Just make sure to have which installed on the machine. Jake found this out the hard way by looking through the configure script. Doing this experiment on Linux From Scratch has really given me an appreciation for distributions that come with basic utilities such as which.

Since which is very difficult to find on Google, here is a link:

I am currently running ArchLinux (x86_64).
Check out my profile for more information.

Bye Bye Bodhi

November 1st, 2011 10 comments

Ah Linux

One website lists ten reasons to use linux my favourites of which are “Linux is easier to use than Windows” and “Linux is fun.” It is day three of the experiment and so far I haven’t installed Linux but I have taken a Dell Vostro 3350 apart about five times. I borrowed this laptop off a fellow comrade in this experiment, Jake B, as I will be sending my own netbook home this coming December.

Starting off I aimed to install both VectorLinux and Bodhi to compare them. I consider myself a relatively light computer user outside of the office and so comparing two different distributions would give me something to talk about. Alas this choice has come back to bite me in the…

I used unetbootin to begin with, on a USB key that was confirmed to be working. I then put Vector on the USB key and it brought up half a blue screen with the top of the vector logo just appearing above the black lower half of the display. After a couple of tries I figured it was corrupt files or a bad ISO so I reformated the USB in order to try Bodhi instead. Unfortunately I didn’t even get a logo this time. Next I burned a CD of Vector and got as far as the ‘find installation media’ screen but no matter how may refreshes or reloads I did it apparently couldn’t find the CD-ROM or configuration files.

From previously experiencing installers fail to find hard drives and USB keys because of the type of hard drive setting in the BIOS, I changed it from ACHI to ATA and low and behold finally some success. I managed to get the Vector installer to write partitions to the disk (using the CD at this point) after choosing the add-on applications I wanted to install. Again this failed so I tried once more with the USB key. This failed the same way except it said that it could not find live media. I even tried using the USB key and the CD together at the same time with no luck.

Switching between Bodhi and Vector in order to try and get a complete install and many, many CDs later I temporarily gave up. I downloaded a new distribution called Sabyon, a Gentoo based distro with the Enlightenment desktop environment, but alas I kept getting the same errors. I even tried Ubuntu 10.04 and Linux Mint and neither of them could not write to the disk.

Figuring it was a hard drive issue I took out the hard drive from the laptop and mounted it in an enclosure. After a quick reformat, which removed a random 500MB LVM partition that I believed to be corrupt, I put it back in the machine. Still no luck.

The errors I kept getting included disk, I/O, live media, cannot find CD-ROM, no useable media, no config file and a couple of others. Each time I tried installing it would fail at different sections of the install and the error would be different with each media used. Among all of the errors I’ve seen the main one seems to be “(initramfs) unable to find a medium containing a live filesystem”

On a whim I decided to test any other hardware errors by running diagnostics from the BIOS. No errors found. I even dug out my ancient XP Profession disc, and after a couple of BIOS changes and a couple of Blue Screens – that were my fault because I had changed the hard drive out so much – I got XP to successfully load, install, and commit changes to the hard drive.

Turning to Google, and with the help of a more advanced Linux Experiment comrade, I retried installing Linux by adding some commands to the installer boot options. Still no luck.

After more Googling I have found that there are a few possible reasons that this could be happening. I have read that it could be caused by the USB3 ports interfering with the bootable media  or that it cold be related to a CD-ROM master/slave setting. Either way, I still haven’t figured it out and I’m not willing to break someone else’s computer just to see if I can overcome this frustrating first experience with Linux. My next task is to try some ACPI hacks  and after finding this useful link, try to install the latest version of Ubuntu which seems to be compatible with the hardware of this machine. But for now its …

Windows 1 Linux 0

Men using Linux 1 Women using linux 0

I am currently running Mandriva 2011
Check out my profile for more information

Linux from Scratch: A Cautionary Tale, Part 2

November 1st, 2011 3 comments

What Next? Chroot

Once you get into the chroot environment, you will get the incredibly annoying PC speaker beep every time you foul up a command.

When compiling glibc in section 6.9, first ensure that there’s no “lib64” directory in your root; for some reason I had a symlink of lib64 pointing to itself. Make sure you’ve run the sed script correctly or the “make install” portion will fail. Specifically, use -Wl (the letter l) in the command, not -W1 (the number 1). After you fix the idiotic transposition of 1 and L, remove both the glibc-build and glibc-2.14.1 directories under /sources and restart section 6.9 from the beginning. If you don’t restart from the beginning, you’ll still get “glibc cannot find dynamic linker” even though the file exists in /lib64.

Keep Watching What You Type

In section 6.10, when running the grep command to ensure the correct startfiles are used, make sure you use [1in] with a one and not [lin] with an L in the command:

grep -o '/usr/lib.*/crt[1in].*succeeded' dummy.log

In section 6.11 and 6.12, I had to run ldconfig before the new libraries were picked up. It seems like the same problem encountered on this mailing list but I’d confirmed that my PATH was set correctly. The same applied for section 6.22; run ldconfig before attempting the configure/make/make install process for E2fsprogs.

For procps-3.2.8, when applying the sed command in chapter 6.27.1, make sure you’ve copied and pasted it (or at least check your typing.) I missed a forward slash in the regex about four times, causing an error during make:

...undefined reference to `get_pid_digits'
collect2: ld returned 1 exit status

But hey, at least I have things sort of working:

My next few posts will deal with specific problems with reasonable solutions.

I am currently running Ubuntu 14.04 LTS for a home server, with a mix of Windows, OS X and Linux clients for both work and personal use.
I prefer Ubuntu LTS releases without Unity - XFCE is much more my style of desktop interface.
Check out my profile for more information.

Linux from Scratch: A Cautionary Tale, Part 1

October 30th, 2011 1 comment

And I’m started with Linux from Scratch! Here are some helpful pointers for anyone considering running LFS on their own. Caution: this is highly nerdy and keyworded to hell to hopefully allow your favourite search engine to grab solutions from this post.

Getting Started, AKA: Use a Distribution You Know

LFS needs an existing Linux environment. Don’t try and use unetbootin on the LFS liveCD (I used lfslivecd-x86_64-6.3-r2145-min.iso to get started, but there is a newer revision 2160 available on one of the mirrors.) unetbootin in this configuration is just a bag of hurt and you’ll spend an inordinate amount of time trying to get your root volume to work, so just burn a CD.

If I was building LFS again I’d have started from a stable Debian base or other Linux distribution where I’m comfortable and have network access – there are a number of reasons below I suggest this, but you really want your host system kernel to be 2.6.25 or higher.

Make sure to have all the patches from are downloaded and in a location you can access from your host distribution. USB sticks are OK for this if you don’t have network access (mount the stick, and then copy the patches and packages to the sources directory). Use DownThemAll or a similar mass downloading application/extension on the patches page to save time and grief.

Watch What You Mount

Augh, out of space! It’s quite possible to mount /mnt/lfs on two partitions at the same time by missing a directory, like this:

$ mount /dev/sdb3 /mnt/lfs
$ mount /dev/sdb1 /mnt/lfs

Oops – I missed /boot at the end of the second mount command. To confirm this before copying any files, “mount” should show only one partition active at /mnt/lfs. Since my /dev/sdb1 partition was only 200MB I got to the GCC extraction step and was promptly disappointed. I ended up unmounting everything, recreating the filesystem (mke2fs -v /dev/sdb1) and then remounting (mkdir -pv /mnt/lfs/boot; mount -t ext2 /dev/sdb1 /mnt/lfs/boot).

For more tales of installation havoc, keep reading…

Read more…

I am currently running Ubuntu 14.04 LTS for a home server, with a mix of Windows, OS X and Linux clients for both work and personal use.
I prefer Ubuntu LTS releases without Unity - XFCE is much more my style of desktop interface.
Check out my profile for more information.

Richard M. Stallman: Troll

October 10th, 2011 15 comments

If you’ve been living under a rock for the past week, you may not be aware that Steve Jobs, co-founder and legendary CEO of Apple Inc., has recently died after a long and protracted battle with pancreatic cancer. After the announcement of his death, many news outlets (tech-oriented and otherwise) ran lengthy tributes to a man who has forever (and often disruptively) altered more industries than any other in recent memory.

The day after Jobs’ death, Free Software visionary and GNU Project founder Richard M. Stallman had this to say about the man:

Steve Jobs, the pioneer of the computer as a jail made cool, designed to sever fools from their freedom, has died.

As Chicago Mayor Harold Washington said of the corrupt former Mayor Daley, “I’m not glad he’s dead, but I’m glad he’s gone.” Nobody deserves to have to die – not Jobs, not Mr. Bill, not even people guilty of bigger evils than theirs. But we all deserve the end of Jobs’ malign influence on people’s computing.

Unfortunately, that influence continues despite his absence. We can only hope his successors, as they attempt to carry on his legacy, will be less effective.

Upon finding this post via Twitter, my immediate reaction was a deep loss of respect for Stallman, a man whose contributions to the Free Software movement cannot be understated. The way that I see it, Stallman and Jobs are one in the same. Both are (or were, in the case of the latter) visionaries, both contributed immeasurably to an industry that employs, informs, and entertains me on a daily basis, and both are/were zealots when it came to their personal opinions about software.

Now I’m not an Apple guy. Far from it, in fact. I don’t own a single Apple product, I use Linux whenever and wherever possible, and I only break from the four essential freedoms when obtaining and enjoying media that cannot be accessed otherwise. But regardless of your thoughts on Steve Jobs, the man deserves your respect.

While Stallman qualified his statement by noting that nobody deserves to die, he also focused his personal fanaticism when it comes to the perceived threat of non-free software directly on the shoulders of one man in a world of many.

There’s something about Freedom that Stallman doesn’t seem to (or want to, as all accounts paint him as a pretty smart dude) understand. It’s a simple point, and one that needs to be reiterated often: Freedom is the right to choose. In politics, in products, and in computing, freedom is the right to choose what is best for you.

Steve Jobs put his ideas and his products into the free market, and paying customers often chose them above those of Stallman. Perhaps those customers got shafted, but when faced with a choice between the freedom to edit configuration files and the beautiful design of an Apple product, they unsurprisingly chose the latter.

That’s freedom, whether you like it or not. Fuck Richard Stallman.

Further Reading:

On my Laptop, I am running Linux Mint 12.
On my home media server, I am running Ubuntu 12.04
Check out my profile for more information.

Create a GStreamer powered Java media player

March 14th, 2011 1 comment

For something to do I decided to see if I could create a very simple Java media player. After doing some research, and finding out that the Java Media Framework was no longer in development, I decided to settle on GStreamer to power my media player.

GStreamer for the uninitiated is a very powerful multimedia framework that offers both low-level pipeline building as well as high-level playback abstraction. What’s nice about GStreamer, besides being completely open source, is that it presents a unified API no matter what type of file it is playing. For instance if the user only has the free, high quality GStreamer codecs installed, referred to as the good plugins, then the API will only play those files. If however the user installs the other plugins as well, be it the bad or ugly sets, the API remains the same and thus you don’t need to update your code. Unfortunately being a C library this approach does have some drawbacks, notably the need to include the JNA jar as well as the system specific libraries. This approach can be considered similar to how SWT works.


Assuming that you already have a Java development environment, the first thing you’ll need is to install GStreamer. On Linux odds are you already have it, unless you are running a rather stripped down distro or don’t have many media players installed (both Rhythmbox and Banshee use GStreamer). If you don’t it should be pretty straight forward to install along with your choice of plugins. On Windows you’ll need to head over to ossbuild where they have downloadable installers.

The second thing you’ll need is gstreamer-java which you can grab over at their website here. You’ll need to download both gstreamer-java-1.4.jar and jna-3.2.4.jar. Both might contain some extra files that you probably don’t need and can prune out later if you’d like. Setup your development environment so that both of these jar files are in your build path.

Simple playback

GStreamer offers highly abstracted playback engines called PlayBins. This is what we will use to actually play our files. Here is a very simple code example that demonstrates how to actually make use of a PlayBin:

public static void main(String[] args) {
     args = Gst.init("MyMediaPlayer", args);

     Playbin playbin = new PlayBin("AudioPlayer");
     playbin.setVideoSink(ElementFactory.make("fakesink", "videosink"));


So what does it all mean?

public static void main(String[] args) {
     args = Gst.init("MyMediaPlayer", args);

The above line takes the incoming command line arguments and passes them to the Gst.init function and returns a new set of arguments. If you have every done any GTK+ programming before this should be instantly recognizable to you. Essentially what GStreamer is doing is grabbing, and removing, any GStreamer specific arguments before your program will actually process them.

     Playbin playbin = new PlayBin("AudioPlayer");
     playbin.setVideoSink(ElementFactory.make("fakesink", "videosink"));

The first line of code requests a standard “AudioPlayer” PlayBin. This PlayBin is built right into GStreamer and automatically sets up a default pipeline for you. Essentially this lets us avoid all of the low-level craziness that we would have to normally deal with if we were starting from scratch.

The next line sets the PlayBin’s VideoSink, think of sinks as output locations, to a “fakesink” or null sink. The reason we do this is because PlayBin’s can play both audio and video. For the purposes of this player we only want audio playback so we automatically redirect all video output to the “fakesink”.

The last line is pretty straight forward and just tells GStreamer what file to play.


Finally with the above lines of code we tell the PlayBin to actually start playing and then enter the GStreamer main loop. This loop continues for the duration. The last line is used to reset the PlayBin state and do some cleanup.

Bundle it with a quick GUI

To make it a little more friendly I wrote a very quick GUI to wrap all of the functionality with. The download links for that (binary only package), as well as the source (all package) is below. And there you have it: a very simple cross-platform media player that will playback pretty much anything you throw at it.

Please note that I have provided this software purely as a quick example. If you are really interested in developing a GStreamer powered Java application you would do yourself a favor by reading the official documentation.

Binary Only Package All Package
File name:
Version: March 13, 2011
File size: 1.5MB 1.51MB
File download: Download Here Download Here

Originally posted on my personal website here.

I am currently running a variety of distributions, primarily Linux Mint 18.
Previously I was running KDE 4.3.3 on top of Fedora 11 (for the first experiment) and KDE 4.6.5 on top of Gentoo (for the second experiment).
Feel free to visit me at my personal website here.

How to Compile Banshee 1.9.0 on Ubuntu 10.04

December 9th, 2010 1 comment

Regular readers of this site will know that I’m no fan of Rhythmbox. When I recently installed Ubuntu 10.04 on my desktop PC, I decided to give Gnome’s default media player a few days to win back my affection. Unfortunately, while Novell’s Banshee project appears to be moving ahead with lots of great new features, Rythmbox still suffers from the issues that I outlined in my now infamous lambasting of it, nearly 8 months ago. To be fair, the pre-installed version of Rythmbox is only 0.12.8 on Ubuntu 10.04 (the same one that I reviewed previously), while the project has forged ahead to version 0.13.2.

Regardless, I prefer to listen to my music with Banshee, and I’m itching to try the latest version. On November 10th, the project released Banshee 1.9.0, and it looks positively excellent. I decided to give it a go, and downloaded the source tarball from the project’s website. Following are the steps that were necessary to install it:

  1. Head over to a terminal and install intltool, libgtk2.0-dev, libgtk2.0-cil-dev, libmono-dev, mono-gmcs, libmono-addins-cil-dev, monodoc-base, boo, libboo-cil-dev, libmono-addins-gui-cil-dev, libndesk-dbus-glib1.0-cil-dev, libgdata-dev, libgdata-cil-dev, libtag1-dev, libtaglib-cil-dev, sqlite3, libsqlite3-dev, libgconf2.0-cil-dev, libmtp-dev, libmono-zeroconf1.0-cil, libmono-zeroconf1.0-cil-dev, libwebkit-dev, libwebkit-cil-dev, and libsoup-gnome2.4-dev with the following command:

    sudo apt-get install intltool libgtk2.0-dev libgtk2.0-cil-dev libmono-dev mono-gmcs libmono-addins-cil-dev libmono-addins-gui-cil-dev monodoc-base boo libboo-cil-dev libndesk-dbus-glib1.0-cil-dev libgdata-dev libgdata-cil-dev libtag1-dev libtaglib-cil-dev sqlite3 libsqlite3-dev libgconf2.0-cil-dev libmtp-dev libmono-zeroconf1.0-cil libmono-zeroconf1.0-cil-dev libwebkit-dev libwebkit-cil-dev libsoup-gnome2.4-dev

  2. Next, you’ll need GStreamer and a few of its base plugins package: libgstreamer0.10-dev and libgstreamer-plugins-base0.10-dev

    sudo apt-get install libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev

  3. If you want to play music encoded in non-free formats like mp3, you’ll also need a few restricted GStreamer libraries like gstreamer-plugins-good, gstreamer-plugins-bad, gstreamer-plugins-bad-multiverse, gstreamer-plugins-ugly, and gstreamer-plugins-ugly-multiverse.

    sudo apt-get install gstreamer-plugins-good gstreamer-plugins-bad gstreamer-plugins-bad-multiverse gstreamer-plugins-ugly gstreamer-plugins-ugly-multiverse

  4. Since I don’t have an iPod or similar Apple device, I’ve configured my installation to disable Apple device support. If you have an iPod, you can lose the –disable-apple-device and –disable-ipod flags after the configure command, but you’ll also need to add a couple of extra libraries to your system. To compile and install Banshee, navigate to the folder where you unzipped the tarball, and type the following in your terminal:

    ./configure –disable-appledevice –disable-ipod
    sudo make
    sudo make install

Banshee should now be installed. From your terminal, type


as a sanity check. Once the application launches, select Help > About and ensure that the version number is 1.9.0. If so, you should be good to go.

I’ll try to post a full review of this latest version of Banshee within a couple of days. In the mean time, happy listening!

On my Laptop, I am running Linux Mint 12.
On my home media server, I am running Ubuntu 12.04
Check out my profile for more information.

Create a GTK+ application on Linux with Objective-C

December 8th, 2010 8 comments

As sort of follow-up-in-spirit to my older post I decided to share a really straight forward way to use Objective-C to build GTK+ applications.


Objective-C is an improvement to the iconic C programming language that remains backwards compatible while adding many new and interesting features. Chief among these additions is syntax for real objects (and thus object-oriented programming). Popularized by NeXT and eventually Apple, Objective-C is most commonly seen in development for Apple OSX and iOS based platforms. It ships with or without a large standard library (sometimes referred to as the Foundation Kit library) that makes it very easy for developers to quickly create fast and efficient programs. The result is a language that compiles down to binary, requires no virtual machines (just a runtime library), and achieves performance comparable to C and C++.

Marrying Objective-C with GTK+

Normally when writing a GTK+ application the language (or a library) will supply you with bindings that let you create GUIs in a way native to that language. So for instance in C++ you would create GTK+ objects, whereas in C you would create structures or ask functions for pointers back to the objects. Unfortunately while there used to exist a couple of different Objective-C bindings for GTK+, all of them are quite out of date. So instead we are going to rely on the fact that Objective-C is backwards compatible with C to get our program to work.

What you need to start

I’m going to assume that Ubuntu will be our operating system for development. To ensure that we have what we need to compile the programs, just install the following packages:

  1. gnustep-core-devel
  2. libgtk2.0-dev

As you can see from the list above we will be using GNUstep as our Objective-C library of choice.

Setting it all up

In order to make this work we will be creating two Objective-C classes, one that will house our GTK+ window and another that will actually start our program. I’m going to call my GTK+ object MainWindow and create the two necessary files: MainWindow.h and MainWindow.m. Finally I will create a main.m that will start the program and clean it up after it is done.

Let me apologize here for the poor code formatting; apparently WordPress likes to destroy whatever I try and do to make it better. If you want properly indented code please see the download link below.


In the MainWindow.h file put the following code:

#import <gtk/gtk.h>
#import <Foundation/NSObject.h>
#import <Foundation/NSString.h>

//A pointer to this object (set on init) so C functions can call
//Objective-C functions
id myMainWindow;

* This class is responsible for initializing the GTK render loop
* as well as setting up the GUI for the user. It also handles all GTK
* callbacks for the winMain GtkWindow.
@interface MainWindow : NSObject
//The main GtkWindow
GtkWidget *winMain;
GtkWidget *button;

* Constructs the object and initializes GTK and the GUI for the
* application.
* *********************************************************************
* Input
* *********************************************************************
* argc (int *): A pointer to the arg count variable that was passed
* in at the application start. It will be returned
* with the count of the modified argv array.
* argv (char *[]): A pointer to the argument array that was passed in
* at the application start. It will be returned with
* the GTK arguments removed.
* *********************************************************************
* Returns
* *********************************************************************
* MainWindow (id): The constructed object or nil
* arc (int *): The modified input int as described above
* argv (char *[]): The modified input array modified as described above
-(id)initWithArgCount:(int *)argc andArgVals:(char *[])argv;

* Frees the Gtk widgets that we have control over

* Starts and hands off execution to the GTK main loop

* Example Objective-C function that prints some output

* C callback functions

* Called when the user closes the window
void on_MainWindow_destroy(GtkObject *object, gpointer user_data);

* Called when the user presses the button
void on_btnPushMe_clicked(GtkObject *object, gpointer user_data);



For the class’ actual code file fill it in as show below. This class will create a GTK+ window with a single button and will react to both the user pressing the button, and closing the window.

#import “MainWindow.h”

* For documentation see MainWindow.h

@implementation MainWindow

-(id)initWithArgCount:(int *)argc andArgVals:(char *[])argv
//call parent class’ init
if (self = [super init]) {

//setup the window
winMain = gtk_window_new (GTK_WINDOW_TOPLEVEL);

gtk_window_set_title (GTK_WINDOW (winMain), “Hello World”);
gtk_window_set_default_size(GTK_WINDOW(winMain), 230, 150);

//setup the button
button = gtk_button_new_with_label (“Push me!”);

gtk_container_add (GTK_CONTAINER (winMain), button);

//connect the signals
g_signal_connect (winMain, “destroy”, G_CALLBACK (on_MainWindow_destroy), NULL);
g_signal_connect (button, “clicked”, G_CALLBACK (on_btnPushMe_clicked), NULL);

//force show all

//assign C-compatible pointer
myMainWindow = self;

//return pointer to this object
return self;

//start gtk loop

NSLog(@”Printed from Objective-C’s NSLog function.”);
printf(“Also printed from standard printf function.\n”);


myMainWindow = NULL;

if(GTK_IS_WIDGET (button))
//clean up the button

if(GTK_IS_WIDGET (winMain))
//clean up the main window

[self destroyWidget];

[super dealloc];

void on_MainWindow_destroy(GtkObject *object, gpointer user_data)
//exit the main loop

void on_btnPushMe_clicked(GtkObject *object, gpointer user_data)
printf(“Button was clicked\n”);

//call Objective-C function from C function using global object pointer
[myMainWindow printSomething];



To finish I will write a main file and function that creates the MainWindow object and eventually cleans it up. Objective-C (1.0) does not support automatic garbage collection so it is important that we don’t forget to clean up after ourselves.

#import “MainWindow.h”
#import <Foundation/NSAutoreleasePool.h>

int main(int argc, char *argv[]) {

//create an AutoreleasePool
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

//init gtk engine
gtk_init(&argc, &argv);

//set up GUI
MainWindow *mainWindow = [[MainWindow alloc] initWithArgCount:&argc andArgVals:argv];

//begin the GTK loop
[mainWindow startGtkMainLoop];

//free the GUI
[mainWindow release];

//drain the pool
[pool release];

//exit application
return 0;

Compiling it all together

Use the following command to compile the program. This will automatically include all .m files in the current directory so be careful when and where you run this.

gcc `pkg-config –cflags –libs gtk+-2.0` -lgnustep-base -fconstant-string-class=NSConstantString -o “./myprogram” $(find . -name ‘*.m’) -I /usr/include/GNUstep/ -L /usr/lib/GNUstep/ -std=c99 -O3

Once complete you will notice a new executable in the directory called myprogram. Start this program and you will see our GTK+ window in action.

If you run it from the command line you can see the output that we coded when the button is pushed.

Wrapping it up

There you have it. We now have a program that is written in Objective-C, using C’s native GTK+ ‘bindings’ for the GUI, that can call both regular C and Objective-C functions and code. In addition, thanks to the porting of both GTK+ and GNUstep to Windows, this same code will also produce a cross-platform application that works on both Mac OSX and Windows.

Source Code Downloads

Source Only Package
File name:
File hashes: Download Here
File size: 2.4KB
File download: Download Here

Originally posted on my personal website here.

I am currently running a variety of distributions, primarily Linux Mint 18.
Previously I was running KDE 4.3.3 on top of Fedora 11 (for the first experiment) and KDE 4.6.5 on top of Gentoo (for the second experiment).
Feel free to visit me at my personal website here.

My Search for the Best Audio Editing Software

October 6th, 2010 7 comments

Lately, I’ve been doing some audio recording. In addition to a couple of podcasts that I work on, I occasionally like to record my own musical compositions. While there seems to be no shortage of high-end audio editing applications on either Windows or Mac, the situation on Linux is a bit more sparse. Faced with some frustration, I went out and downloaded a number of linux-based audio editors. I used Wikipedia to find the software in the tests below, and following are my totally subjective and highly biased reviews of each.

Each piece of software was used to edit some raw recordings from a podcast that I have been involved with lately. This source material is almost 100% spoken word, with some music and sound effects sprinkled throughout. It’s important to note these details, as your needs may vary drastically depending on the type of audio project that you’re working on.


The Audacity Project is kind of the Linux standard for non-professional audio editing. It was the first application that I tried to use, mainly because I was familiar with earlier versions of the program that I had once used back in my Windows days. Audacity includes a great number of features that make it ideal for post-processing of any audio project, including a wide array of effects, some great noise generators, and a few analysis tools that make it perfect for cleaning up your finished file before publication.

Audacity audio editor with a demo project loaded

Audacity audio editor with a demo project loaded

Unfortunately, I found that it lacked a usable GUI for editing podcast material. In particular, it seems to be missing the ability to edit a single track in a multi-track project without unduly affecting the other tracks.By default, if you use the selection tool to grab a portion of audio that ought to be deleted from one track in the project, it seems to delete that portion of audio from all tracks in the project.

I found this out the hard way when I played back the master track that I had assembled my finished podcast on, only to find out that significant portions of the audio had mysteriously gone missing at some point during the editing process.

To make matters worse, I closed the application, lost the undo record for the project, and had to start the editing process from the beginning.

This lack of GUI polish also exhibits itself in the way that you can interact with the audio tracks themselves. Unlike in most DAW solutions, a portion of audio that has been clipped out of a larger track cannot seemingly be moved around in the project by clicking on it and dragging it across the stage with the mouse. At least I couldn’t figure out how to do it, and ended up relying heavily on my cut, copy, and paste functions to edit my project. This is a poor way to work on a project of any kind of complexity, and makes projects that rely on audio loops a pain to assemble.


Where Audacity is suited more towards hobbyist recording setups, Ardour aims to be a professional audio solution that is capable of competing with mainstream software like ProTools. It is a fully featured audio suite that can allegedly do most everything that you may require, but as such, can also confuse the hell out of first-time users with its complicated GUI and lengthy manual.

Granted, this is hardly a slight to the project, because it really isn’t suited to my needs. It is a pro-level audio environment that can be used as the centrepiece to a full recording studio or stage

Ardour wants sole control of my audio interface

Ardour wants sole control of my audio interface

show. If you just want to edit a podcast, it may not be the tool for you. As such, if the GUI seems challenging and you find the documentation to be long-winded, you may just be using the wrong tool for the job.

The biggest issue that I had with this piece of software was getting it to run at all on my machine. It uses JACK to attach itself to your audio interfaces in the name of providing a perfect sampling environment that doesn’t get slowed down by having to share the interface with other pieces of software.

Unfortunately, this means that in order to use it, I had to quit all other processes that are capable of generating sound, including this web browser. This is a pain if you are trying to run Ardour in a multi-application environment, or need to reference the internet for anything while working.

After reading the introductory documentation and adjusting the settings in the startup dialog for about 15 minutes, I simply gave up on Ardour without ever managing to get into a workspace. It seems to be far too complicated for my needs, and doesn’t seem worth my time. Your mileage may vary.


From the moment that I started reading about this project, I like the sound of it. Jokosher is a multi-track recoding and editing environment built on top of Python and GStreamer that was

Jokosher may look cartoony, but it may be exactly what you need for small projects

Jokosher may look cartoony, but it may be exactly what you need for small projects

created by a podcaster who was unsatisfied with the audio editing tools that were available on Linux. The application focuses on being easy enough to use that non-technical people like musicians can pick it up and get their ideas down with minimal hassle. Think of it as Garage Band for Linux.

Indeed, just as the website promised, I was able to get a working environment set up in a matter of minutes. The editing tools allow for splitting the audio, grabbing it and moving it around, and non-destructively editing multiple tracks at the same time (I’m looking at you, Audacity). The GUI also has a beautiful polish to it that, although a tad cartoony, really makes the program look and feel simple. For editing something like a podcast, I’m not sure that this application can be beat.

The only issue that I encountered in my short time using Jokosher was with its support of LADSPA plugins. These are free audio plugins that can be used to apply effects to the different tracks of your audio project. When I tried to use them from within the application, it instructed me to download some from my repositories. Upon checking Synaptic, I saw that I already had a number of them downloaded. Even after installing more, the program did not seem to pick them up.

All in all, this project lived up to its hype, and I will most certainly take some time to break it in, and may write a more in-depth review once I get used to it. If you’re doing podcasting, you owe it to yourself to check this app out.

In Conclusion:

Each of the three applications that I tried to work with while writing this piece deserve your respect. The underlying audio framework of most Linux systems is a veritable rats’ nest of subsystems, platforms, daemons, plugins and helper applications. I would wager a significant amount of money on this situation as the reason that we don’t have ProTools and its ilk on our platform of choice. I’ve done a little bit of work with GStreamer, and even it, as perhaps the prettiest and best supported of all audio libraries on the platform, left me scratching my head at times.

When choosing audio software, it’s important to keep in mind that you need a tool that’s uniquely suited to your project. Since I’m editing podcasts and fooling around with drum loops and samples of my guitars, Jokosher does just about everything that I need and more. I may use Audacity for post-production, or to record my source audio (simply because I haven’t tried recording in Jokosher yet – I know that Audacity works), because it falls somewhere in between a simple editing tool and an advanced platform. Ardour, meanwhile, is probably suited towards the more hard-core audio engineer slash system administrator types who are so fanatic about recording quality that they are willing to sacrifice an entire box for running their DAW software. It’s simply more power than the majority of hobbyist enthusiasts really needs.

On my Laptop, I am running Linux Mint 12.
On my home media server, I am running Ubuntu 12.04
Check out my profile for more information.

Linux Media Players Suck – Part 1: Rhythmbox

May 5th, 2010 52 comments

The state of media players on Linux is a sad one indeed. If you’re a platform enthusiast, you may want to cover your ears and scream “la-la-la-la” while reading this article, because it will likely offend your sensibilities. In fact, the very idea behind this series is to shake up the freetards’ world view, and to make them realize that a decent Winamp or iTunes clone need not be the end of the story for media management and playback on Linux.

This article will concentrate on lambasting Rhythmbox, the default jukebox software of the GNOME desktop environment. Subsequent posts will give the same treatment to other players in this sphere, including Banshee, Amarok, and Songbird (if I can find a copy that will still build on Linux). If you’re a user of media players on Linux, keep your own annoyances firmly in mind, and if I don’t mention them, please share in the comments. If you’re a developer for one of these fine projects, try to keep an open mind and get inspired to do better. A media player is not a hard thing to build, and I do believe that together, we can do better.

For the remainder of this article, please keep in mind that I am currently running Rhythmbox under Kubuntu 9.10, so you’ll see it rendered with qt widgets in all of my screen shots. This doesn’t affect the overall performance of the app, but leads nicely into my first complaint:

  1. Poor Cross-Platform Support: There are basically two desktop environments that matter in the Linux world, GNOME and KDE. Under GNOME, Rhythmbox has a reasonably nice icon set that is comparable to other media players. Under KDE, the qt re-skinning replaces those icons with a horrible set of mismatched images that really make the program look second-rate:
    Isn't this shit awful?

    As you can see, these icons look terrible. Note that there isn't even an icon for 'Burn' and the icon for 'Browse' is a fucking question mark.

    This extends to the CD burning and help features too. They rely on programs like gnome-help and brasero to work, but don’t install them with the media player, so when I try to access these features under KDE, I just get error messages. Nice.

    Honestly, who packaged this thing?

    This is just plain stupid. Every package manager has the concept of dependencies, so why doesn't Rhythmbox use them?

  2. The Player Starts in the Tray: Under what circumstances would it be considered useful for a media player to automatically minimize itself to the system tray on startup? It doesn’t begin to play automatically. The first thing that I always do is click on the tray icon to maximize it so that I can select some music to start playing. Way to start the user experience off on the wrong foot.
  3. Missing Files View: This one is just plain stupid. Whenever I delete a file from my hard drive, it shows up under the ‘Missing Files’ view, even though my intent was clearly to remove the file from my library. Further, I use Rhythmbox to put music on my BlackBerry. Whenever I fill it with music, I first delete the files on it. Those files that I deleted from my mobile device? Yeah, they show up under ‘Missing Files’ too, as if they were a legitimate part of my library! So this view ends up being like a global garbage bin that I have to waste my precious time emptying on occasion, and serves no useful purpose in the mean time. Yeah, I deleted those files. What are you going to do about it?

    Seriously, why the hell are these files in here?

    As you can see, I've highlighted the fact that Rhythmbox is telling me that these files are missing from my mobile device. No shit.

  4. Shared Libraries that I can’t Play: So we’ve known for awhile now that Apple broke the ability to connect to iTunes via the DAAP protocol, and that it’s not possible to connect to a shared iTunes library from Linux. If that’s the case, why does Rhythmbox still show these libraries as available? And how come it shows my library under this node? Why would I listen to my own shared library? Finally, I’ve found that even if I’m running Rhythmbox on another machine, I still can’t connect to my shared library. This feature seems to be downright broken – so why is it still in the build?
  5. The GUI and Backend are on One Thread: I keep about half of my music collection as lossless FLAC files. When I want to rip these files to my portable media device, they need to be converted to the Mp3 format. Turns out that Rhythmbox thinks it appropriate to transcode these files on the same thread that it uses to update its GUI, so that while this process is taking place, the app becomes laggy, and at times, downright unusable. Further, the application doesn’t seem to give me any control over the bitrate that my songs are transcoded to. Fuck!
  6. Lack of Playlist Options: Smart playlists in Rhythmbox are missing a rather key feature: Randomness. When filling the aforementioned mobile device with music, I would like to select a random 4GB of music from my top rated playlist. But I can’t. I can select 4GB of music by most every criteria except randomness, which means that I get the same 600 or so songs on my device every time I fill it. This is strange, because I can shuffle the contents of a static playlist; But I cannot randomly fill a smart playlist. Great.

    If you have a device that has a small amount of memory, this feature is essential

    It's funny; I really want to like Rhythmbox, but it's shit like this that ruins the experience for me

  7. Columns: What the fuck. Who wrote this part of the application? When I choose the columns that are visible in the main window, I can’t re-order them. That’s right. So the only order that I can put my columns in is Track, Title, Genre, Artist, Album, Year, Time, Quality, Rating. Can’t reorder them at all, and I have to go into the preferences menu to choose which ones are displayed, instead of being able to right-click on the column headers to select them like I can in every other program written in the last 10 years. This is just ridiculous. I know that the GTK+ toolkit allows you to create re-order-able columns, because I’ve seen it done.

    This is just so incredibly backward. I mean, columns are a standard part of the GTK+ toolkit, and I've seen plenty of other apps that do this properly.

    Why, for the love of God, can't these be re-ordered?

  8. The Equalizer is Balls: No presets, and no preamp. So I can set the EQ, and my settings are magically saved, but I can only have one setting, because there doesn’t appear to be a way to create multiple profiles. And louder music sounds like balls, because I can’t turn down the preamp, so I get digital distortion throughout my signal. It would be better to just not have an equalizer at all.

    I mean, it works. But...

    I mean, it works. But...

  9. Context Menus Don’t Make Sense: Let’s just take a look at this context menu for a moment. There are three ways to remove a song from a playlist. You can Remove the song, which just removes it from the playlist, but not from your library or your hard drive. Alternatively, you can select Move to Trash, which does what you might expect – it removes the song from the playlist, the library, and your computer. I’ve got a problem with the naming conventions here. The purpose of Remove isn’t well explained, and confused the hell out of me at first. In addition, when browsing a mobile device that you’ve filled with music, the GUI breaks down even further. In this case, you can still hit Remove, which seems to remove the song from Rhythmbox’s listing, but leaves the file on the device. So now I have a file on my device that I can’t access. Great. The right-click menu also has the ability to copy and cut the song, even though there is no immediately obvious way to paste it. For that functionality, you’ll have to head up to the Edit menu.

    The right-click context menu

    I'm starting to run out of anger. The 10,000 papercuts that come along with this app are making me numb to it.

  10. No Command Line Tools: Now, normally, this wouldn’t bother me too much. A music library is something that’s meant to have a GUI, and doesn’t generally lend itself to working from the command line. In this case however, command line access to Rhythmbox would be really handy, because I’d like to set up a hot key on my keyboard that will skip songs or pause playback. Unfortunately, there’s no way to do that within the software, and it doesn’t have any command line arguments that I can call instead. Balls.

There you have it, 10 things that really ruin the Rhythmbox experience. While using this piece of software, I felt like the developers worked really hard to build something that was sort of comparable to Apple’s iTunes, and then stopped trying. That isn’t good enough! If we want to attract users to our platform of choice, and keep them here, we need to give them reasons to check it out, and even more to stick around. If I say to you that I want to have the best Linux media player, you tend to put the emphasis on the word Linux. Why not just make the best media player? GNOME is on at least half of all Linux desktops, if not more. Why hinder it with software that gives people a poor first impression of what Linux is capable of? Seriously guys, let’s step it up.

On my Laptop, I am running Linux Mint 12.
On my home media server, I am running Ubuntu 12.04
Check out my profile for more information.

Vorbis is not Theora

April 21st, 2010 17 comments

Recently I have started to mess around with the Vorbis audio codec, commonly found within the Ogg media container. Unlike Theora, which I had also experimented with but won’t post the results for fear of a backlash, I must say I am rather impressed with Vorbis. I had no idea that the open source community had such a high quality audio codec available to them. Previously I always sort of passed off Vorbis’ reason for being regarded as ‘so great’ within the community as simply a lack of options. However after some comparative tests between Vorbis and MP3 I must say I am a changed man. I would now easily recommend Vorbis as a quality choice if it fits your situation of use.

What is Vorbis?

Like I had mentioned above, Vorbis is the name of a very high quality free and open source audio codec. It is analogous to MP3 in that you can use it to shrink the size of your music collection, but still retain very good sound. Vorbis is unique in that it only offers a VBR mode, which allows it to squeeze the best sound out of the fewest number of bits. This is done by lowering the bitrate during sections of silence or unimportant audio. Additionally, unlike other audio codecs, Vorbis audio is generally encoded at a supplied ‘quality’ level. Currently the bitrate for quality level 4 is 128kbit/s, however as the encoders mature they may be able to squeeze out the same quality at a lower bitrate. This will potentially allow a modern iteration of the encoder to achieve the same quality level but by using a lower bitrate, saving you storage space/bandwidth/etc.

So Vorbis is better than MP3?

Obviously when it comes to comparing the relative quality of competing audio codecs it must always be up to the listener to decide. That being said I firmly believe that Vorbis is far better than MP3 at low bitrates and is, at the very least, very comparable to MP3 as you increase the bitrate.

The Tests

I began by grabbing a FLAC copy of the Creative Commons album The Slip by Nine Inch Nails here. I chose FLAC because it provided me with the highest quality possible (lossless CD quality) from which to encode the samples with. Then, looking around at some Internet radio websites, I decided that I should test the following bitrates: 45kbit/s, 64kbit/s, 96kbit/s, and finally 128kbit/s (for good measure). I encoded them using only the default encoder settings and the following terminal commands:

For MP3 I used LAME and the following command. I chose average bitrate (ABR) which is really just VBR with a target, similar to Vorbis:

flac -cd {input file goes here}.flac | lame –abr {target bitrate} – {output file goes here}.mp3

For Vorbis I used OggEnc and the following command:

oggenc -b {target bitrate} {input file goes here}.flac -o {output file goes here}.ogg


I think I would be a hypocrite if I didn’t tell you to just listen for yourself… The song in question is track #4, Discipline.

Note: if you are using Mozilla Firefox, Google Chrome, or anything else that supports HTML5/Vorbis, you should be able to play the Vorbis file right in your browser.

45kbit/s MP3(1.4MB) Vorbis(1.3MB)

64kbit/s MP3(2.0MB) Vorbis(1.9MB)

96kbit/s MP3(2.9MB) Vorbis(2.8MB)

128kbit/s MP3(3.8MB) Vorbis(3.6MB)

I am currently running a variety of distributions, primarily Linux Mint 18.
Previously I was running KDE 4.3.3 on top of Fedora 11 (for the first experiment) and KDE 4.6.5 on top of Gentoo (for the second experiment).
Feel free to visit me at my personal website here.

Adobe Air and Fedora 12

March 22nd, 2010 2 comments

This weekend, I installed Fedora 12 (Constantine) on my laptop, and I have to say that so far, I’m impressed. Thanks to the standard GNOME desktop, it looked familiar, and felt like a more polished version of the Debian desktop that I’m used to. The installation only took 15 minutes, and almost everything worked immediately.

One of the only things that I’ve had troubles with thus far is Adobe AIR. Now normally, I avoid Adobe apps like they’re the plague, since the great ones are really expensive (Photoshop, Premiere, etc), and the free ones are awful and full of security holes (Reader, Flash on anything but Windows). In this case however, I got hooked on the AIR framework because of Tweetdeck, an excellent little application that makes managing Twitter feeds a dream.

Unfortunately, it doesn’t work worth a shit on Fedora 12.

Now most AIR apps ship with an installer that will put the framework on your system if you don’t already have it. I’ve always had problems with this method on Linux, and have instead downloaded AIR directly from Adobe as a *.bin file, and installed it manually from a root terminal.

The next step is to install the app. In the case of Tweetdeck, the process is a little bit convoluted because they use a Flash widget on their website (Christ, why?) that starts the installation for you – sketchy from a security standpoint, but it’s always worked well for me in the past. Under Fedora, the installer just crashed.

Hoping for a workaround, I downloaded the *.air installer file to my desktop and tried to use the Adobe AIR Application Installer from my root terminal to do the job. All that got me was a bunch of angry error text. After a quick IxQuicking, I found this blog post with some answers in the comments:

#delete the AIR certs:
rm -rf /etc/opt/Adobe/certificates/crypt/

#install your application like this:
su – /opt/Adobe\ AIR/Versions/1.0/airappinstaller /path/to/install/file.air

While this worked, and the install actually completed (albeit with a bunch of angry error messages yelling at me for deleting the AIR security certs), Tweetdeck failed to function on launch first launch, complaining about Adobe AIR failing, and requesting that I file a bug.

Luckily, one quick restart later, and everything worked perfectly.

So long story short, AIR is kinda dirty on Fedora, and doesn’t work as well as on other distributions. Everything else, however, works great.

On my Laptop, I am running Linux Mint 12.
On my home media server, I am running Ubuntu 12.04
Check out my profile for more information.

The Great Linux Browser War (Well… sort of)

February 13th, 2010 1 comment

Recently while browsing the Internet I noticed that Mozilla Firefox was taking up an awfully large amount of RAM. In fact it’s RAM use continued to grow even though I had not navigated to any new website or even touched it at all! Being a KDE user I decided to try the same website within Konqueror, the KDE web browser that everyone seems to toss to the side right after install. To my amazement Konqueror seemed to render the same website, using much less RAM, and better yet it’s RAM use remained static. Perhaps there was something more to this ‘throw-away’ browser than I had first thought. And thus began my idea for a series of comparisons of four of the most popular Linux web browsers: Firefox, Chromium, Konqueror and Epiphany.

Note: The numbers you are going to see below are purely anecdotal and are based on my own personal experiences, which might not represent your own.  For the record I am running Kubuntu 9.10 with the 2.6.31-19 kernel.

Packages I had to install

This is simply a list of packages I installed for each browsers to sort of give you an idea of what to expect.

Firefox Konqueror Chromium Epiphany
firefox-3.5, firefox-3.5-branding konqueror chromium-browser ephiphany-browser, epiphany-browser-data

Startup speed (from a cold start – i.e. from reboot)

To test this I rebooted the computer and then opened the browsers for the first time.

Firefox Konqueror Chromium Epiphany
~4.5 seconds ~2.1 seconds ~3.7 seconds ~2.8 seconds

Startup speed (from a cached start – i.e. after opening and closing the program)

To test this I rebooted the computer, then opened the browsers for the first time and closed them. Then I opened them a second time and recorded the time.

Firefox Konqueror Chromium Epiphany
~1.5 seconds ~1.2 seconds ~1.1 seconds ~1.2 seconds

Memory usage (about:blank)

This is how much memory the browser took to display the web page in brackets. The memory inside of the brackets is the amount of shared memory each browser uses. This of course could change depending on your system and setup. Where there are multiple numbers separated by plus signs it means that the browser spawns multiple processes which each take up memory.

Firefox Konqueror Chromium Epiphany
24.6MiB (22.7MiB) 10.8MiB (20.8MiB) 6.6MiB (21.5MiB) + 1.6MiB (1.6MiB) + 2.3MiB (6.4MiB) + 1.5MiB (7.6MiB) 9.4MiB (20.5MiB)

Memory usage (about:blank ->

For this test I first loaded the browser to the homepage, in this case about:blank, and then navigated to the website In Konqueror’s case it spawned a few small KIO processes which I assume did the actually downloading of the webpage. I have averaged their values below.

Firefox Konqueror Chromium Epiphany
35.7MiB (24.1MiB) 22.6MiB (23.3MiB) + 4 x kio_http: 5.05MiB (6.2MiB) 7.9MiB (18.2MiB) + 13.6MiB (11.3MiB) + 1.6MiB (1.7MiB) + 1.5MiB (7.6MiB) 18.3MiB (23.1MiB)

Memory usage (about:blank -> | |

For this test I once again started with the about:blank homepage and then opened the websites in different tabs.

Firefox Konqueror Chromium Epiphany
41.7MiB (24.6MiB) 30.5MiB (24.0MiB) + 4 x kio_http: 5.3MiB (6.4MiB) 9.0MiB (28.8MiB) + 11.4MiB (11.3MiB) + 1.6MiB (1.7MiB) + 6.8MiB (11.0MiB) + 9.3MiB (11.5MiB) + 1.5MiB (7.6MiB) 21.8MiB (24.8MiB)

Memory usage (about:blank -> | | 2 minutes later

For this test I started with the above test and then waited two minutes and re-recorded the memory usage. This was to see if the browsers suffer from any sort of memory leaks, something Firefox has been famous for over the years.

Firefox Konqueror Chromium Epiphany
38.45MiB (24.6MiB) – a decline of about 0.03MiB. 30.7MiB (24.0MiB) – a growth of about 0.002MiB/second. The kio_http’s stayed the same. 13.2MiB + (20.8MiB) + 11.4MiB (11.3MiB) + 1.6MiB (1.7MiB) + 6.8MiB (11.0MiB) + 9.3MiB (11.5MiB) + 1.5MiB (7.6MiB) – a growth of about 0.04MiB/second. 21.8MiB (24.8MiB) – no change

Memory usage (about:blank -> | | |

Same as above but with one more tab.

Firefox Konqueror Chromium Epiphany
46.0MiB (24.9MiB) 45.1MiB (24.0MiB) + 6 x kio_http: 5.22MiB (6.4MiB) 9.3MiB (24.4MiB) + 14.2MiB (16.2MiB) + 9.3MiB (11.4MiB) + 13.5MiB (11.2MiB) + 11.6MiB (10.8MiB) + 1.6 (1.7MiB) + 1.5MiB (7.6MiB) 29.0MiB (24.9MiB)

Memory usage (about:blank -> | | | 2 minutes later

Same as above but with one more tab.

Firefox Konqueror Chromium Epiphany
77.8MiB (24.9MiB) – a growth of about 0.27MiB/second 50.2MiB (24.0MiB) – a growth of about 0.04MiB/second. The kio_http’s stayed the same. 9.3MiB (24.4MiB) + 23.7MiB (16.2MiB) + 9.3MiB (11.4MiB) + 13.5MiB (11.2MiB) + 11.6MiB (10.8MiB) + 1.6MiB (1.7MiB) + 1.5MiB (7.6MiB) – a growth of about 0.08MiB/second 33.2MiB (24.9MiB) – a growth of about 0.04MiB/second

Noticeable rendering glitches in pages viewed

None of the browsers had rendering glitches except for Konqueror. In Konqueror Bing’s search bar was offset from where it should be and on Kubuntu’s website the header image was overlapping text that it shouldn’t have.

Acid 2 test (

The (now old) Acid 2 test.

Firefox Konqueror Chromium Epiphany
100% 100% 100% 100%

Acid 3 test (

How well did the browsers handle the Acid 3 test?

Firefox Konqueror Chromium Epiphany
93% 89% (linktest failed) 100% 100%

SunSpider JavaScript Benchmark (

The classic JavaScript benchmark test!

Firefox Konqueror Chromium Epiphany
Total: 2380.2ms
Click here to see full results.
Total: 2940.2ms
Click here to see full results.
Total: 445.2ms
Click here to see full results.
Total: 794.8ms
Click here to see full results.


Well there you have it. Rather than ‘rate’ each browser I’m going to leave it up to you to weigh the merits of each given the above information. Even though Firefox might not be the most technically superior browser it does have the advantage of being very popular and having an excellent add-on system. Then again Epiphany can use most of those add-ons as well. Chromium, based off of Google’s Chrome browser, is also a new favourite for a lot of people and is obviously the fastest in terms of JavaScript. Being a KDE user, Konqueror might be the best browser for you thanks to its infinite customization and uniform look.

Linux is all about personalization and I think everyone should extend that to the browser they use. Who knows you might just find one you like even more.

I am currently running a variety of distributions, primarily Linux Mint 18.
Previously I was running KDE 4.3.3 on top of Fedora 11 (for the first experiment) and KDE 4.6.5 on top of Gentoo (for the second experiment).
Feel free to visit me at my personal website here.

Using KDE on Windows

February 11th, 2010 3 comments

Since the end of The Linux Experiment I have started dual booting my laptop, switching between Kubuntu 9.10 and Windows 7 as needed. While this solves all of my compatibility issues, it does pose some more annoying issues. For example after setting up one operating system just the way I like it I now need to do the same for the other. Furthermore after becoming used to using particular applications under Linux I now have to find alternatives for Windows. Well no more! The KDE guys and gals have ported the libraries to Windows!


To install KDE on Windows all you need to do is head over to and grab a copy of the installer exe. This will more or less walk you through the initial setup and then present you with a list of packages you can choose to install. Most applications are there including things like KTorrent, Konqueror, Konversation and more! Simply select them and watch as they are easily installed.

Image Walkthrough

The first screen you'll see when installing

The package list

kdebase-apps includes things like Konqueror

The installer downloads the source and compiles it locally

After installing the applications show up right in your start menu

The final result. Konqueror and KWrite running on Windows

I am currently running a variety of distributions, primarily Linux Mint 18.
Previously I was running KDE 4.3.3 on top of Fedora 11 (for the first experiment) and KDE 4.6.5 on top of Gentoo (for the second experiment).
Feel free to visit me at my personal website here.
Categories: Free Software, KDE, Tyler B Tags: ,

Finally Synching my Blackberry on Linux

January 2nd, 2010 18 comments

Some readers may recall all of the attempts that I’ve made in the past to synchronize my Blackberry with Mozilla’s Thunderbird email and calendar client. During each of these tries, I had relied on the OpenSync framework, along with the Barry project for communication with my phone, and a number of different solutions to link into Thunderbird. At various times, these included the opensync-plugin-iceowl, opensync-plugin-sunbird, and bluezync packages, none of which yielded success.

While running GNOME on my Debian laptop, I had managed to successfully synchronize my phone with the Evolution mail client. Even so, I continued to work at Thunderbird synchronization because I disliked Evolution, seeing it as a Microsoft Outlook clone, which is a platform that I have had considerable problems with in the past.

With my recent installation of Kubuntu 9.10 on my PC, I have been exposed to the Kontact PIM suite, and have thus far been impressed. Kmail is a solid email client, although the way that it handles the setup of multiple email accounts is confusing to say the least, forcing the user to create a sending, receiving, and identity object for each account, and then to link them together. Likewise, Kontact is a decent application, but is sorely lacking basic GUI configuration options, something I never thought that I would say about a KDE app. Finally, Kalendar does everything that one would expect, and allows the user to display appointments in a number of useful ways. All have excellent integration, and live in a tray widget that uses the native KDE notifications system to let me know when something important has happened.

Most importantly however, I managed to get the entire Kontact suite to sync with my Blackberry after about five minutes of playing around in the terminal. Unlike during previous installation attempts, I found the latest stable Barry packages available in my repositories, so installation was a snap. I simply added the following packages to my system:

  • libopensync0 v0.22-2
  • multisync-tools v0.92
  • libbarry0 v0.14-2.1
  • opensync-plugin-kdepim v0.22-4
  • opensync-plugin-barry v0.14-2.1

From a terminal, I then used the msynctool application and the following steps to do a little bit of configuration:

  1. msynctool –listplugins if the install went well, this command should list both kdepim-sync and barry-sync as available plugins
  2. msynctool –addgroup BB create an OpenSync sync profile for my Blackberry called BB
  3. msynctool –addmember BB barry-sync add the barry-sync plugin to the BB sync group
  4. msynctool –addmember BB kdepim-sync add the kdepim-sync plugin to the BB sync group
  5. msynctool –showgroup BB this lists each of the plugins that we just added to the BB sync group, along with their member numbers. In my case, barry-sync was member number 1, and kdepim-sync was member number 2. The output also showed that while barry-sync still needed to be configured, kdepim-sync had no configuration options to be set.
  6. msynctool –configure BB 1 configures member number 1 of the sync group BB. In my case, this was barry-sync, and simply popped a config file in the nano text editor. All that had to be changed in the file was the PIN of the Blackberry that the plugin would attempt to sync with.
  7. msynctool –sync BB actually performed the synchronization process. For safety’s sake, I made sure that Kontact was fully closed before running this command.

And that’s it! In the future, I simply have to run the msynctool –sync BB command to synchronize my Blackberry with Kontact. That’s one more reason to stick with Linux – Blackberry synchronization that isn’t tied to Microsoft Outlook!

On my Laptop, I am running Linux Mint 12.
On my home media server, I am running Ubuntu 12.04
Check out my profile for more information.

XBMC Camelot

December 28th, 2009 3 comments

In my daily RSS feeds I read about the release of the newest version of XBMC, formally the Xbox Media Center, so I decided to check it out.

While the maintainers do not specifically support Fedora with pre-built RPMs, they do offer instructions on how to build it from source here. Even so, I did run into a couple of little problems along the way. For example on the step that says to enter

*sudo ln -s /usr/lib/mysql/ /usr/lib/
*sudo ln -s /usr/lib64/mysql/ /usr/lib64/

depending on if you are running the x86 or x64 version of Fedora, I needed to change this to say

sudo ln -s /usr/lib64/mysql/ /usr/lib64/

because that is the current version of my library. In addition running


failed due to an error with OpenSSL, specifically its lack of something called “openssl/ecdsa.h”. I managed to fix this by altering the source code according to the patch found here. Then before re-running ./configure I had to run

autoreconf –force –install

(that’s two dashes in front of force and install!) from within xbmc/cores/dvdplayer/Codecs/libbnav. Once that was done the ./configure ran smoothly. From then on I simply followed the rest of the instructions and I was in business!

There really is only one word to describe this version of XBMC: AWESOME!

It picked up my pictures, videos and music from all of my network shares and local drives without issue. The user interface is absolutely stunning as well. At one point I had Star Wars playing in the background (still in view) while navigating beautifully rendered and slightly transparent menus to adjust other system settings. It can even be configured to pull down information about the movies from the Internet, including who stars in it and what the plot is. The music playback is similar and offers a variety of visualizers for your viewing pleasure. The picture options allows for very neat slideshows, accompanied by your own music playing in the background, which would be great for atmosphere at a party.

From Wikipedia here are just some of the features supported by this release:

  • Physical media: CDs, DVDs, DVD-Video, Video CDs (including VCD/SVCD/XVCD), Audio-CD (CDDA), USB Flash Drives, and Hard Disk Drives
  • Container formats: AVI, MPEG, WMV, ASF, FLV, Matroska, QuickTime, MP4, M4A, AAC, NUT, Ogg, OGM, RealMedia RAM/RM/RV/RA/RMVB, 3gp, VIVO, PVA, NUV, NSV, NSA, FLI, FLC, and DVR-MS (beta support)
  • Video formats: MPEG-1, MPEG-2, H.263, MPEG-4 SP and ASP, MPEG-4 AVC (H.264), HuffYUV, Indeo, MJPEG, RealVideo, RMVB, Sorenson, WMV, Cinepak
  • Audio formats: MIDI, AIFF, WAV/WAVE, MP2, MP3, AAC, AACplus, AC3, DTS, ALAC, AMR, FLAC, Monkey’s Audio (APE), RealAudio, SHN, WavPack, MPC/Musepack/Mpeg+, Speex, Vorbis and WMA
  • Digital picture/image formats: RAW image formats, BMP, JPEG, GIF, PNG, TIFF, MNG, ICO, PCX and Targa/TGA
  • Subtitle formats: AQTitle, ASS/SSA, CC, JACOsub, MicroDVD, MPsub, OGM, PJS, RT, SMI, SRT, SUB, VOBsub, VPlayer
  • Metadata tags: APEv1, APEv2, ID3 (ID3v1 and ID3v2), ID666 and Vorbis comments for audio file formats, Exif and IPTC (including GeoTagging) for image file formats

For a sampling of the beautiful new interface check out their official wiki here. I apologize for this sounding a lot like an advertisement but in all honesty I am floored by how impressive this application is and would highly recommend it to anyone looking for a sweet home theater setup. Try it out now!

AQTitle, ASS/SSA, CC, JACOsub, MicroDVD, MPsub, OGM, PJS, RT, SMI, SRT, SUB, VOBsub, VPlayer

I am currently running a variety of distributions, primarily Linux Mint 18.
Previously I was running KDE 4.3.3 on top of Fedora 11 (for the first experiment) and KDE 4.6.5 on top of Gentoo (for the second experiment).
Feel free to visit me at my personal website here.

Over one month later and I STILL cannot install Fedora 12

December 23rd, 2009 No comments

Thanks to incompatibilities with ATI’s catalyst drivers and the newest version of Xorg used in Fedora I am still unable to install Fedora 12 on my machine. Yes, I know there are open source alternatives but frankly they don’t work well and actually caused my system to be unstable during the brief period I did use them.

I had really hoped that I would be able to try out Fedora 12 in a meaningful way before the end of this experiment but I just don’t see that happening…

I am currently running a variety of distributions, primarily Linux Mint 18.
Previously I was running KDE 4.3.3 on top of Fedora 11 (for the first experiment) and KDE 4.6.5 on top of Gentoo (for the second experiment).
Feel free to visit me at my personal website here.

Linux: 12 Weeks of School Later

December 20th, 2009 No comments

Finished Exams

Rather than just copy Sasha’s previous post, I will do my best to try and tell the story through the eyes of a Computer Science undergrad. Now that I have finally finished my exams for this term I can safely say that Linux has not impeded my coursework and in fact has given me quite a seamless user experience.

Web Development

Designing websites and creating server side programs has been an absolute delight in Linux. Unlike within Windows, I can easily mount a remote SSH server as a browsable folder in my file system in Linux, making additional file transfer programs unnecessary. This lets me edit the files in my favourite editor, which more often than not was just KWrite, and then watch as they updated on the remote server with a simple click of the save button.

Graphics Programming

For a different course I was required to program 3D graphics in OpenGL. On Windows my professor had recommended Dev-C++, a program I am familiar with but not exactly a fan of. Thankfully we weren’t doing anything platform specific and thus I was able to make use of the exact same OpenGL and GLUT libraries to get the job done on Linux. As a replacement for Dev-C++ I started with Eclipse but eventually settled on MonoDevelop as my IDE of choice. Even better I was able to share the exact same code with a fellow classmate for our group project, which he was in turn able to compile on Windows in Dev-C++ with no modification whatsoever!

Pretty Standard Stuff

The rest of my time spent at University was of pretty standard fare: note taking, web browsing, e-mailing, instant messaging, assignments, etc. Linux performed superbly at these tasks as well and handled everything I could think to throw at it – even our school’s insane Wi-Fi network configuration.

Three Months of School Later

And there you have it. My experience with Linux during my term at school has been, like Sasha’s, excellent. For those of you out there worried that trying out Linux will impact your school or work or have concerns that you won’t be able to find replacements for your generally Windows or Mac centric worlds, I can attest to the exact opposite being true. Give Linux a shot, it might even make you more productive! Hell, you just might even like it 😉

I am currently running a variety of distributions, primarily Linux Mint 18.
Previously I was running KDE 4.3.3 on top of Fedora 11 (for the first experiment) and KDE 4.6.5 on top of Gentoo (for the second experiment).
Feel free to visit me at my personal website here.

A Tale of Two Fonts

December 10th, 2009 3 comments
Hey, where'd my text go?

Hey, where'd my text go?

I set my system font to Dingbat, which worked perfectly in every application except for Open Office. The strange part is that the font worked just fine in all of the other programs that I have installed. Silly OpenOffice.

On my Laptop, I am running Linux Mint 12.
On my home media server, I am running Ubuntu 12.04
Check out my profile for more information.