The State of Glovebox

First, I’ll show off the logo for Glovebox:

Second, Glovebox development has stalled a little bit over the last few weeks due to college starting up again for me. So, I’ll just give a quick overview over whats changed since I first announced the project.

Gloveui

Much like KDE’s libraries, Gloveui is the name for the base library I forsee all Glovebox components using. This will allow for super easy theming and other bits of consistency. As of now though, it only has an implementation of the Freedesktop icon and sound theme naming specifications, along with GIcon and GNotify classes.

A GIcon has a simple constructor. You pass it the fd.o icon name, and it uses the QIcon methods to load up images. Icons are still drawn using the basic QIconEngineV2, so it doesn’t always draw the proper size. Thats coming soon though.

The GNotify is a rough outline for a much more broad system. I soon home to have something similar to the galago-project implementation of the fd.o notification specification, where information bubbles can pop up on the display somehow. But for now, GNotify only does one thing: plays fd.o-named sounds. Since it is static, you just call GNotify::global()->sound("desktop-login"); to play the startup sound. GNotify uses Qt’s Phonon classes to accomplish this with minimal effort.

Launchpad Improvements


Over on the right is the current view of the Launchpad main window. Nothing too exciting to look at, I know, but there is now a fully-functional GPS data engine! And on the map page, I’ve implemented two handy widgets: A compass and a signal chart. The two widgets are independent of Glovebox, so any other Qt developer is welcome to use them. The only issue with them right now is the size hints aren’t working properly.

Coming Soon

With a full school schedule (class and work from 9-6 on a good day), I don’t have a whole lot of free time. I try to hack on Glovebox when I get a chance, and I’ve got a quick list of things I’m working on from time to time:

That last item is a bit troublesome to me. A main feature of my Launchpad is to show a dashboard with widgets for the home page. Idealy, I’d like to implement this using Plasma. Unfortunately, that means I’d have to add KDELibs as a requirement. Right now, my plan of attack is to strip out all the KDE-specific code and replace it with Glovebox code.

Its bothering me though that I seem to be duplicating the efforts of KDELibs just to import one (awesome) feature (set). With all the recent work on getting Plasma to work great for embedded devices, it seems like I should just bite the bullet and link in KDELibs. I feel that goes against my biggest design goal for Glovebox, in that it should be small as possible and depend on as few libraries as possible.

So, lazyweb, any input on this problem?

Comments »

The GPL’d Ext

As you are likely well aware, the Ext javascript library changed it’s license to the GPL. Instead of being reasonable people and choosing the LGPL, they want to enforce the spread of open source throughout the cloud. Sounds like a great idea, except that open source doesn’t always work. I’m a strong advocate of open source, but enforcing everyone that uses your software to suddenly be required to release their software under the GPL is a bad idea. Its the opposite of the spirit of the GPL, because it forces you to release the source of your software. You can’t do exactly what you want with it anymore.

The GPL was created to protect an author’s ideas about how their software should be used. Comparing it to other licenses such as the MIT license, the GPL is incredibly restrictive. It makes sure that source code released as open source stays open source. If something is added to it (like including it into a website’s programming), then everything that touches it must be GPL’d too. It can be quite a nasty virus. However, the LGPL tries to grant a little more freedom to the user of the software. It allows them to use the software how they want without having to release whatever uses it under the LGPL.

Releasing the Ext library under both the GPL and a commercial license effectively forces all users to either pony up some cash to use it, or they have to lose a bunch of cash by releasing their secrets under the GPL. If it used the LGPL license, they wouldn’t have to.

Then again, maybe I’m full of crap and nobody really understands how these licenses apply to a distributed language such as Javascript. Its only my two cents.

Comments »

How They Do It

Earlier today, BoingBoing posted a link to a list of how different people…you know, do it ;).

It took about an hour or two, but I created an AJAX version of the same list: http://wm161.net/labs/how-they-do-it/. People can add items to it and star good ones. Made me think that I should make some kind of AJAX library for PHP so I don’t have to duplicate the logic. Check the source to see what I mean. I don’t feel like cleaning up the code too much, but hey, it works, right?

Comments »

PHP Automatic Bug Tracker

I’ve hacked together a small but functional bug tracker for my website. My common.php has some code in it now to use my new BugTracker class to report PHP errors and uncaught exceptions.

Well, at least exceptions. I apparently forgot everything I know about bitmasks, because enabling the error report catcher fills my inbox with 200 emails in seconds flat. Whoops.

Comments »

My WPWrapper class

In my previous post, I mentioned that I had a really simple way of using my wordpress themes with regular PHP scripts. Now, according to the Codex, you are supposed to use this method:

include 'wp-blog-header.php';
get_header();
/* Do some code */
get_sidebar();
get_footer();

That works great and all, but from time to time you might change your theme to move your sidebar around or something. Now you’ve got a bunch of pages you need to update.

I’ve come up with a nifty solution that uses PHP’s output buffering callback system to catch whatever output happens and then stick it between wordpress’ get_* functions. The above code now becomes:

include 'wp-blog-header.php';
include 'WPWrapper.class.php';
WPWrapper::start()
/* Do some code */

Thanks to my commons system, I just need to do something like my documents page. Beautiful, innit?

For bonus points, read up on the API Documentation

Comments »