Wait, so Firefox in Qt is not just a dream?

Well, it would seem that my tiny-little-private dream is not just a fantasy! It looks like Nokia is helping to port Firefox to Qt instead of GTK+, which I personally believe to be butt-ugly in most instances. This is most likely because I’m a proud KDE user…

IMHO, Qt is a better technical platform but I wonder if this is just a port of Firefox or whether it’s a complete Qt version of XUL and such. A complete port of XUL would actually be amazing and would have some serious potential! Even if it’s just an Firefox thing, I’d like to have my favorite browser fit in with my desktop a little better!

Open Source in Schools

This afternoon I read a really thoughtful paper about Free/Open Source Software in schools published in the Canadian Journal of Learning and Technology. As an aside, the CJLT has a really solid collection of papers and I look forward to paging through them in the coming months. Anyway, this paper, Open Source Software and Schools: New Opportunities and Directions by Gary Hepburn, presents a tasty discussion of the benefits and advantages to using F/OSS in schools.

After a brief overview of the proprietary software model, Hepburn devotes a solid page examining the issues surrounding using proprietary software in schools. He cites the cost of doing business with Microsoft (according to the Microsoft School Agreement), as of Winter 2005 with a school of 400 machines, to be US$7200 for the OS alone and US$19,200 for a complete desktop package. Additionally, he notes that, in general, “…using proprietary software requires a high degree of accountability” on account of license compliance issues and other legal liabilities. Alongside the financial downsides, Hepburn makes a very good point when examining “…school’s complicity in exposing students to commercial products and corporate interests”. The idea of a classroom as a corporate marketing machine is rather unappealing.

While it’s not hard to find literature extolling the virtues of F/OSS, Hepburn does a nice job of emphasizing the potential benefits for schools. One particular point that caught my eye was his comment that “Schools can also burn OSS on to a compact disc and give it to staff or students to take home and do what they wish with it”. Granted, projects like OpenDisc have been leveraging the flexibility of F/OSS licenses for some time now, but I have been toying with the idea of using virtual machines as distributable workspaces. Personally, I find the idea of being able to send a student home with their own system saved on a thumb drive very compelling.

After touching briefly on the subject of Linux, Hepburn goes on to discuss some of the neater software packages from the F/OSS world. In particular, OpenOffice.org gets a shout out though I don’t know if I agree with his insinuation that OO.org requires fewer system resources (specifically hardware) than MS Office. Overall, I do agree with his other major points which support the ideas that the F/OSS community is better equipped to respond to change and correct errors. Moreover, I fully support the idea that more diverse exposure to different types of software will lead to an overall greater computing literacy.

With a healthy sprinkling of Lawrence Lessig quotes and shameless support for F/OSS, this paper is definitely worth a read.

A Paper on Self Organization in Wikipedia

I just finished reading a fascinating paper on the topic of self organization in Wikipedia. These Dutch researchers put together a very entertaining read for the 2006 WikiSym workshop on Research in Wikipedia where they analyzed the Dutch Wikipedia, as it was in 2005, looking for signs of self organization.

One of the most interesting things that the researchers measured was the degree of article connectedness. They modeled the entire Dutch Wikipedia as a giant graph with each article being a node while measuring the number of articles linking to it (indegree) and a the number of articles it links to (outdegree). The indegree and the outdegree are combined to give you the article’s total degree. In order to classify articles based on degree, the research team coined terminology to describe connectedness. Articles were designated as a guru authority, all-around authority, referring authority or a regular node. For details on the results, you  really must see the paper.

It’s really fascinating to realize that a lack of top-down control can lead to an effective working team. Even more impressive is the sheer scale of Wikipedia’s accomplishments. With 2.3+ million articles in the English Wikipedia, it’s become quite apparent that the community at large is most certainly capable of producing effectively. The specifics of this are made clear by the paper’s discussion of author expertise. Most informative are the histogram plots detailing authoring and edit patterns.

Of course now, after reading this paper, I have a strong desire to download a text dump of the English Wikipedia and crawl it to determine connectedness. Granted I could certainly find a computer capable of holding the the full dump (~3.8 Gb compressed XML) but it would most likely take an eternity to crawl the document Moreover, the resulting data would be particularly unwieldy even if stored in a decent database. Perhaps someday…

Profile Your Ruby Code in One Easy Step!

Everyone has written slow code so let me make an important distinction and say that code can be slow for two main reasons:

  1. The operations being performed are, by nature, intensive in the form of being either computationally-heavy or I/O-dependent.
  2. The code is poorly written or designed such that it is sufficiently sub-optimal that it’s inefficiency becomes noticeable.

Though code slow for the first reason is often code that cannot be improved much, code slow due the second reason can often be improved through various optimization techniques like algorithmic refinement, complete reimplementation or, less frequently, refactoring. Tracking down the slow parts and to determine the best way to proceed is not always easy in large or complicated programs.

To assist in such performance analysis, there are numerous profilers available (but, as usual, Mac users should beware of foul play). For Ruby, there is the profiler module which enables automatic profile reports to be generated at the conclusion of a program’s run. When running quick analyses, you can enable profiling by telling the interpreter to require the profiler module at load-time with the -r command-line flag. If your program is contained in a file called program.rb, then you’d want to run ruby -r profiler program.rb while being conscious that the report is written to standard error. You can add a require 'profiler' to those files which you would like profiled all the time.

VirtualBox to QEMU

Recently, I had cause to convert a VirtualBox virtual machine to one compatible with QEMU and KVM. A quick search found me multiple methods for converting an image QEMU -> VirtualBox but nothing helping me to go from VirtualBox -> QEMU. After asking on the PLUG mailing list, I got some help and managed to convert it without any issues. In order to do it, you’ll need the vditool tool contained in the virtualbox-ose package available from the Debian repositories. Here’s how I got it working:

  1. vditool COPYDD vbox-image.vdi raw-image.img
  2. qemu-img convert -f raw raw-image.img -O qcow2 qemu-image.qcow

The first step copies the contents of the image (*.vdi is the VirtualBox filesystem image extension) to a raw disk image. Be advised: this file will be the full size of the virtual hard drive. That means that, unlike *.vdi and *.qcow formats, if the virtual disk has a maximum capacity of 8Gb, the raw image will be 8Gb in size regardless of how full the disk is.

Once you have the raw image, run the second step which uses the QEMU disk image manipulation tool, qemu-img, to convert the raw image into the QCOW2 format. The new QEMU image will be much smaller than the raw image was and it can be made smaller by passing qemu-img the -c option to enable transparent compression. However, seeing as how this just uses zlib on each cluster, this might introduce more overhead to I/O than is desired and will most likely degrade your overall VM performance.

Sort of stuck

Well, I’m sort of stuck right now seeing as how, after being bumped, I missed my connection and I’m holed up in the Hilton at ORD.
My flight leaves tomorrow morning and I should be back on campus by
tomorrow afternoon. Unfortunately, in addition to being a major hassle,
I’ll be missing the first day of classes. Bummer.

In other news, I’ve been trying to keep myself amused and make use
of the complimentary WiFi and testing out a Firefox extension called ScribeFire which functions as a very nice blogging client. Naturally, it’s compatible with Wordpress. It hasn’t crashed anything yet so we’ll see how it goes…

Also, a great post about KDE 4 by aseigo.

Back and Playing…

Had a great rest of the trip to Israel. I’ve flown back and am safely at home. Rather than doing something useful, I’ve taken to playing this cool real-time strategy game called Warzone 2100. It was released in 1999 and open-sourced in 2004.  Anyway, it’s 3D and loads of fun.

A Quick Recovery, A Failed Experiment

Well, it would seem that getting over the cold faster than expected sort of put a damper on my great-symptom-tracking experiment. To be honest, although I had worked out an elaborate scheme involving Post-It notes and thick books, it would have been pretty difficult to record things over the Sabbath. In any case, I did have a lot of fun tinkering with Kexi and I advise you to take a peek over at the Kexi Screencasts Page to check out tutorials. Personally, I like the one that shows you how to build a photo database in about 10 minutes. Brilliant stuff if you ever need a database application.

A Few Good Ideas

I have been keeping a little list of good ideas which are either ideas which I would like to point out or ideas which I would like to see implemented/used more often. It has always been interesting to watch the development of the world around me and from this I have gained an appreciation for good ideas and generally neato stuff.

  • Metalink - Have you ever tried to download a large file which is available from multiple locations and may even be retrievable using a variety of methods? Well, I have and I know it’s a real frustration that I can’t get the file faster by leveraging all of my potential options. Enter Metalink! Metalink is an open standard which provides a specification for a little XML file that lists all of the ways one can retrieve a file. For example, for a file available from multiple mirrors the Metalink file would list the available mirrors. If the file was additionally made available through rsync or BitTorrent, it would make note of that as well. This file can then be parsed by a Metalink-aware download client which will seek to initiate a download by grabbing chunks for the various sources and then piecing them together. Apparently (according to the Wikipedia article), the Metalinks spec allows for enumerating a multitude of download sources including HTTP, FTP, rsync, BitTorrent, ed2k and magnet links. I’d like to see this used by more distributors of large files and supported by more download clients (though I heard KGet supports Metalink beginning in KDE4…wahoo KDE4!).
  • Eee PC -As everything seems to be moving to web-based apps these days, it often seems silly for a person to be lugging around an expensive and overpowered computing device which they’ll generally only use to surf the web. In fact, it makes sense that many desktop users are most likely spending too much money for a computer with capabilities they’ll never use! In any case, for those looking for a lighter and cheaper alternative for network-centric computing on the go, check out the Eee PC by Acer. Runs a customized simple-GUI with Linux under the hood though I’ve heard it also comes in a less-good Windows variant. It’s light, small and cheap.
  • Jabber - I’ve said for ages now that more people should be looking to Jabber-based technologies for instant messaging and more. Having one Jabber account on one server allows me to communicate with any user on any Jabber server out there. It also allows me to use any service being offered by any Jabber server. These services could be everything from conferences and data services to gateway transports to other chat networks. It gets even better! Once an organization or community has a Jabber deployment running, the door is open to use that as connective tissue for other services and individuals to connect. This is especially true given the availability of solid XMPP (Jabber’s underlying protocol) libraries for every language you’d want to use.
  • Using Java-the-platform without Java-the-language. Now, it’s been ages since jwz published his famous “java sucks” essay, but I firmly believe that non-client Java (save neat stuff like Web Start) can be a very powerful platform. Much of the server-side Java scene is not so bad. For example, JSP is a very cool templating language which also allows for convenient development using MVC (the Right Thing™). The real pain seems to be in developing the back-end stuff in Java-the-language. Now, thanks to projects like Jython and, more notably, JRuby, things are getting better. I’ve heard about people developing whole servlets and other web-apps in Ruby and then compiling them to Java classes and deploying them as they please. The power of Java without the Java!

Headlines on a Plane

I’ve been hearing about Google Gears for awhile now and decided to give it a test drive with my new favorite web application, Google Reader. Basically, Google Gears is a framework for using web applications offline by providing a storage system (seems to be an SQLite database) which is integrated into the web browser. Installation was as simple as installing a Firefox extension (because it’s  actually packaged as an extension). Then, web apps which support GG integration have an option to go to “offline mode”. When using Google Reader, it goes ahead to populate the local cache with those headlines available at the time of mode change. Then, you can read the stories in the absence of an internet connection. Later, when you have regained connectivity, switching to online mode causes GG to re-sync everything (such as which headlines you read or which links you did something interesting with) bringing you back into step with the web.

I conducted a trial use of GG with reader to allow me to read my favorite news items and articles during my plane ride back to school earlier this week. It worked wonderfully and I have only one criticism of it. When going offline, Google Reader has to download a fairly huge amount of stories (often above 1500 items) and it takes forever. Other than that, I really liked having the functionality available to me.

I advise people to try both Google Reader and it’s integration with Google Gears because it’s really a winning combination. You can give it a spin for yourself by going to the Google Reader site and signing in with your Google account. Let’s face it, everyone should be using GMail unless you are super-happy with your current email setup for some reason (like running your own server or having a serious love affair with some one-of-a-kind feature).

Now, I just wish that more apps would use GG or have equivalent functionality…cough, GMail, Google Calendar and Wordpress, cough.

« Previous PageNext Page »