Archive

Archive for the ‘Free Software’ Category

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-what?

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.

MainWindow.h

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
*/
-(void)destroyWidget;

/*
* Starts and hands off execution to the GTK main loop
*/
-(void)startGtkMainLoop;

/*
* Example Objective-C function that prints some output
*/
-(void)printSomething;

/*
********************************************************
* 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);

@end

MainWindow.m

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
gtk_widget_show_all(winMain);
}

//assign C-compatible pointer
myMainWindow = self;

//return pointer to this object
return self;
}

-(void)startGtkMainLoop
{
//start gtk loop
gtk_main();
}

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

-(void)destroyWidget{

myMainWindow = NULL;

if(GTK_IS_WIDGET (button))
{
//clean up the button
gtk_widget_destroy(button);
}

if(GTK_IS_WIDGET (winMain))
{
//clean up the main window
gtk_widget_destroy(winMain);
}
}

-(void)dealloc{
[self destroyWidget];

[super dealloc];
}

void on_MainWindow_destroy(GtkObject *object, gpointer user_data)
{
//exit the main loop
gtk_main_quit();
}

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];
}

@end

main.m

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: objective_c_gtk_source.zip
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 17.
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).
Check out my profile for more information.

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.

Audacity:

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.

Ardour:

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.

Jokosher:

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 50 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

Results

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 17.
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).
Check out my profile for more information.

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 -> kubuntu.org)

For this test I first loaded the browser to the homepage, in this case about:blank, and then navigated to the website www.kubuntu.org. 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 -> kubuntu.org | google.com | bing.com)

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 -> kubuntu.org | google.com | bing.com) 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 -> kubuntu.org | google.com | bing.com | ubuntu.com)

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 -> kubuntu.org | google.com | bing.com | ubuntu.com) 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 (http://www.webstandards.org/files/acid2/test.html)

The (now old) Acid 2 test.

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

Acid 3 test (http://acid3.acidtests.org/)

How well did the browsers handle the Acid 3 test?

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

SunSpider JavaScript Benchmark (http://www2.webkit.org/perf/sunspider-0.9/sunspider.html)

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.

Conclusion

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 17.
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).
Check out my profile for more information.

Using KDE on Windows

February 11th, 2010 2 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!

Installing

To install KDE on Windows all you need to do is head over to http://windows.kde.org/download.php 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 17.
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).
Check out my profile for more information.
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/libmysqlclient.so.15.0.0 /usr/lib/libmysqlclient.so
*sudo ln -s /usr/lib64/mysql/libmysqlclient.so.15.0.0 /usr/lib64/libmysqlclient.so

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/libmysqlclient.so.16.0.0 /usr/lib64/libmysqlclient.so

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

./configure

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
  • Network/Internet protocols: UPnP, SMB/SAMBA/CIFS, XBMSP, DAAP, HTTP, HTTPS, FTP, RTSP (RTSPU, RTSPT), MMS (MMSU, MMST), RTMP, Podcasting, TCP, UDP, SFTP, RTP
  • 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 17.
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).
Check out my profile for more information.

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 17.
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).
Check out my profile for more information.