Friday, December 19, 2008

New laptop on the way: Dell XPS M1330!

NOTE: If you are looking for a good deal on a refurbished Dell XPS M1330 (and maybe 1530), read on!

My current and only machine is a 4.5 year old 15.4" laptop. It's held up surprisingly well, but a Pentium M just isn't cutting it anymore and I really want a smaller and lighter form factor. I had been eying 13" Dells for quite awhile (the XPS and Inspiron models), and was looking at paying around $1200 for a new XPS M1330. After discovering Dell Outlet (refurbished, returned, et al) and finding some decent machines for about half the price I was originally looking at, I decided to turn my focus there.

I wasn't finding anything amazing in the Outlet at first, since so many people are snapping up all the deals very quickly due to Christmas and such. However I discovered a little trick! The Product Red XPS systems are listed separetely from the others with no obvious link. But once you get to a listing of machines for a particular model, you can manually look at Product Reds by changing the model drop-down from say, "XPS 1330" to "XPS 1330 PRODUCT RED". Assuming you don't mind red (it was actually my preferred color), now you'll have a list of machines that a lot of people aren't seeing. Sort by price and you can find a few for $759, and a bunch of "Scratch and Dents" (lots of good experiences with these online, it seems) for $799. I chose a refurbished one for $759 with a 2.1GHz Core 2 Duo processor (8100), 4 gigs of RAM, Nvidia 8400 128MB graphics card, 6-cell battery, Wireless N and Bluetooth, and integrated 2MP webcam for $759 with free shipping. I was about to bite at this price although I was slightly hesitant as the tax brought it to just over $800, and was really hoping for a coupon to make it sweeter. As I was heavily debating it and rather close to buying it, someone on SlickDeals pointed me to where you can get free one-time use coupons, including 15% off Dell Outlet XPS!

I was quickly let down when the coupon didn't work online though, as it isn't valid with any other promotions, and the free shipping promotion is always there with no way to remove it. However as the coupon expired Dec 24th and the shipping Jan 5th, that meant it actually wasn't possible to use it, and figured a call to Dell could rectify this. Sure enough, I was able to get both promotions by ordering over the phone, and got the machine for $645 pre-tax!

So in summary:
  1. Go to, select XPS laptops, then change the model to the PRODUCT RED version from the drop-down.
  2. Add one to your cart to secure it for 15 minutes. Repeat as necessary throughout every 15 minutes.
  3. Visit and grab a 15% off Dell Outlet XPS coupon.
  4. Call Dell Outlet (1-866-492-6721), explain that you have a coupon but can't use it because of the shipping promotion, and they should do the order over the phone for you (if you are nice enough :)
I am very happy with the purchase, and it comes with a 1-year in home parts and labor warranty. When I was considering new XPS systems for over $1,000, I was going to get a 3 or 4 year warranty for $200-300, but at this price (half of what I was originally considering) I can afford a new laptop in 1-2 years anyway if it breaks down, and have a nicer system for those extra years!

I'll probably post this to SlickDeals eventually but I thought I'd give the Ubuntu community a head start. Let me know what you think of this deal in the comments, positive or negative, and if you had any luck doing the same.

Monday, December 8, 2008

UDS Monday Run-down!

Canonical graciously sponsored me as a community member to attend the Ubuntu Developer's Summit, and as the first day is over, I figured I should give a brief overview of the sesssions I attended.

Mark Shuttleworth opened the day, giving an overview of the general goals of Ubuntu followed by the specific goals for Jaunty. On the desktop the main goals seem to be a new notification system which looks very slick, and improved boot time. I was impressed with how down-to-earth he was, as well as being accessible throughout the day and popping into almost every session.

Next I went to the desktop experience session, which was mostly a presentation and feedback session for the new notification system targeted for Jaunty. Afterwards was a session about Launchpad, where Launchpad developers asked for input from users. As it turns out, almost every complaint and feature request made is apparently solved in 3.0. It sounds like it is going to be a very progressive release which will include an overhauled AJAX interface which is apparently much faster and easier to use, requiring less clicks and page loads. Additionally, signed PPAs should land in about two weeks, with the ability to have multiple PPAs per user coming eventually as well. Pretty exciting stuff for PPA users on both sides!

After lunch at the Googleplex I attended a session on improving 5-a-day, and we talked about how the program can be tweaked to encourage more consistent contributions to bug triaging. Afterwards there was a two-hour session on improving boot speed. Canonical is measuring boot time from the point where the GRUB count-down is done until the user is at a fully functional desktop with no disk I/O, and it sounds like the goal for Jaunty is to cut this time in half!

What did anyone else at UDS think of the sessions? If you aren't at UDS, what are your thoughts or questions?

Tuesday, November 18, 2008

wxBanker 0.4 released!

Today I released a new version of wxBanker, which is a lightweight personal finance manager. It is basically a digital checkbook register for multiple accounts; think of GnuCash but easier and more lightweight. It is written in Python/wxPython and runs on Linux, OSX, and Windows. Check out my previous post on wxBanker for a slightly more in depth functionality overview and screen shots.

The main focus of this new version was localization. It now ships with translations for 8 languages (4 of them basically complete, thanks translators!), and also supports displaying the amounts in currencies other than USD including EUR and GBP. It also sports a few of the typical bug fixes / usability improvements you would expect in a new release.

Another feature new to 0.4 is a, which allows Linux users to install it easily by running "sudo python install" in the folder, and wxBanker will install itself including a shortcut in Applications -> Office in Gnome, and store your data in ~/.wxbanker. If you are upgrading from a previous release, I recommend moving your bank.db file to ~/.wxbanker/bank.db for the easiest transition, which will also future-proof you from needing to shuffle it around in the future!

I also thought I'd highlight the launchpad integration I added awhile ago in 0.3, since I saw a recent planet post regarding Inkscape doing something similar. In the Help menu I've added convenient links to view and ask questions, and report bugs:

If you have been looking to start taking control of your finances, give wxBanker a try: (or 'bzr co lp:wxbanker -r 86' for the seasoned). If you find problems or have ideas, please let me know via launchpad bugs/blueprints, blog comments, or email; if you know another language, help translate by following the Translations link on Launchpad! And remember, when you use wxBanker to count your pennies, the dollars will follow!

Tuesday, November 11, 2008

Zen and the Art of Memes

I wouldn't normally have participated in the nearest book meme going around on Planet Ubuntu, except that sentence 5 of page 56 of the nearest book happened to be divine! From Alan Watts' "The Way of Zen":

Suffering alone exists, none who suffer;
The deed there is, but no doer thereof;
Nirvana is, but no one seeking it;
The Path there is, but none who travel it.

It happened to stumble perfectly on the closing quote of that particular paragraph! If you want to participate:
  1. Grab the nearest book.
  2. Open it to page 56.
  3. Find the fifth sentence.
  4. Post the text of the sentence in your journal along with these instructions.
  5. Don’t dig for your favorite book, the cool book, or the intellectual one: pick the CLOSEST.

Wednesday, November 5, 2008

Microphones (and Rosetta Stone 3) in Wine

Recently I had an urge to brush up on my Spanish and thought I would try Rosetta Stone, however there is no Linux version. I thought instead of "messing around" with Wine I'd just install VirtualBox and use an XP Pro instance. Everything worked alright but the memory and CPU overhead was a little too much for my machine (1.7GHz Pentium M, 1GB DDR). It would run out of memory and thrash the HDD like crazy if almost any other program was running in Linux, defeating a large part of the advantage of virtualizing Windows in the first place.

So then I read in Wine's AppDB that Rosetta 3 seemed to work alright with recent versions, so I gave it a shot and it indeed installed perfectly with Wine 1.1.7 (using the PPA in Intrepid). The best part is that Rosetta uses a single sqlite3 database to track users' progress, so all I had to do was copy that over from the VM and all my progress and history was there in my Wine install!

But then came the problem: I couldn't get my microphone to work! It worked fine in the VirtualBox setup so I knew my hardware was fundamentally compatible. I then tried as many permutations of the follow settings as I could think of:
  • changing Wine to ALSA or OSS drivers
  • enabling and disabling all sorts of ALSA and OSS levels and captures in Volume Control
  • running Wine via `padsp`
Finally I came across an ubuntuforums thread where someone's solution to getting their microphone working with Wine was setting Wine to use OSS and then:
  1. killall pulseaudio
  2. aoss wine program.exe
And that worked for me! I was so full of joy. However, I am a little worried about what consequences killing pulse will have on the system for the duration of the session, and I don't really understand what aoss does. Can anyone enlighten me on why pulseaudio is a part of the problem here, and why aoss is necessary? This was a very helpful solution to me and thought it might be useful to others as well, but does anyone know of a better way that might co-exist with pulseaudio?

Sunday, November 2, 2008

L10N: Integrating translations into your project

This post is the second half of my series on internationalization and localization; that is, making applications accessible to non-English speakers. I am going to assume now that you have followed the instructions in the first post , and have internationalized your source, put the translation template up on Launchpad, and hopefully have a translation or two.

Since my last post, many people donated their time to translate my project wxBanker, and I have 7 translations in Launchpad now! (If anyone wants to add more, please do so, and I'll put you in the credits.) Now I'll outline the steps for actually integrating these translations into your project.

  1. Download the translations. Visit the translations page for your project in Launchpad, and click the "Download translations" link on the right. From here ensure "Everything" is selected, and change the Format to "MO format". This format is what the gettext framework we are using utilizes. Now click "Request Download". They won't typically be available immediately, but you should receive an e-mail in an hour or so with a link to the file.

  2. Once you receive the email from Launchpad, download the linked file. You should now have launchpad-export.tar.gz. Right click on it and "Extract Here". Rename the resulting "launchpad-export" folder to something like "locales", and put it in your project directory.

  3. Now all you have to do is tell gettext where the translations are. Previously we installed gettext via a line like gettext.install("wxbanker"), and now all we need to do is pass in the directory as a second argument. So assuming you renamed the launchpad-export directory to "locales" and put it in the directory of your source code, you'll change it to gettext.install("wxbanker", "locales"). This isn't the most robust and flexible way to do this, and I would recommend checking out my link below for a better example, especially if you are going to be doing this for a python application.
Now, assuming you followed all the steps in the previous post and this one, your application should be completely localized and run in the native language of the person using it! If you want to see the translation yourself, check out my own version of, which allows you to pass in the language code corresponding to the subdirectory of the locales directory, such as "--lang=es" for Spanish.

In a day or two I will also add a post on how to actually install other locales in Ubuntu and run your application in it, so that you can ensure you are seeing exactly what someone from that locale sees.

Congratulations on a localized application! Any questions?

Monday, October 27, 2008

I18N: Making your Launchpad projects translatable (and a call for translations!)

Launchpad provides a wonderful translation service called Rosetta that allows multi-lingual users to translate your application to other languages. If you are a translator and want to help translate my project (only 75 strings with a fair bunch of them being quite short), skip to to help me out! I will include you permanently in the credits and you will have helped me greatly!

Now, for developers or anyone else interested, I'm going to explain the basic process to go from an English-only application in Launchpad to something that can be easily translated by anyone. This will internationalize your project, and in a later post I'll explain how to localize it; that is, once you have translations, how to integrate these into your project so users in other locales see the translated strings instead of English. My project is wxBanker (, so I'll be using that for reference.

  1. First, you'll want to make all your user-visible strings translatable in your code. I used gettext (, and it is quite easy in Python. Basically, you wrap all strings you want to be translated in a gettext call, which is typically assigned to the underscore character to be easy to type and read. So "Hello, world!" will become _("Hello, world!"). When your application is run, this call will then translate that string into the appropriate languange (once you have everything set up, which will be Part 2 of this post).

    Sometimes you may want to restructure or break up larger strings into smaller ones. If you have two strings "Sentence A. Sentence B." and "Sentence A. Sentence C", you may want to gettext those as _("Sentence A.")+_("Sentence B.") and _("Sentence A.")+_("Sentence C."), so that Sentence A only needs to be translated once. However, make sure to give enough context for translators. Basically, apply principles of resuable software design to your strings.

  2. If you try to run your application now, it probably won't work as the underscore function won't be defined. You'll need to set the locale to the user's default and install gettext. In Python this is:

    import locale
    locale.setlocale(locale.LC_ALL, '') # use the environment default '' for ALL purposes
    import gettext
    gettext.install("wxbanker") # specify the translation namespace

    Now you should be able to run your application and everything should work normally in English; we haven't broken anything! To simplify this set up, however, I like to put those above four lines in a separate file such as, and import that in any file which wraps strings using gettext, so I don't have to duplicate those each time.

  3. Now you need to generate a translation template. This is fairly straightforward; simply run xgettext at the command line on all the files you used gettext in. For example: "xgettext". This will generate a file called messages.po, which is your template. Rename this to messages.pot (the scheme Launchpad prefers) and we can proceed!

  4. Now we'll set up Launchpad. Edit your projects details (in my case: and check the box that says "Translations for this project are done in Launchpad", scroll to the bottom, and click "Change".

  5. Click the Translations tab of your project in Launchpad and upload the .pot file you generated in step #3. If this is your first time doing so, it will need to be reviewed by a human, and will take perhaps a day to get approved, at which point you will receive an email letting you know it has been and you are good to go.

  6. Your project can now be translated! Visit your Translations page again (such as to see the status. You won't see anything exciting if there aren't any translations yet and you aren't configured for more than English (click Select Languages in the lower right to change this), but otherwise you will see an option to translate the project for each language other than English that you know, and the status of the translation.
If you have been meaning to internationalize your project, give it a shot now! Also, please let me know if I have missed or botched any steps. We'll go through putting the (hopefully) resulting translations into your project in my next post!

Sunday, October 5, 2008

wxBanker 0.3 released!

I am proud today to release version 0.3 of wxBanker, a free, simple, lightweight personal financial management application for Linux, Windows, and OSX! It is written in Python and wxPython.

It is basically like the concept of the checkbook register brought into the 21st century, allowing you to keep track of balances and transactions across multiple types of accounts. It allows you to know the balances of your accounts without relying on your bank or credit card online interface, which is often slow to update and can't take things like uncashed checks into account. Not to mention that entering each transaction into wxBanker makes spending money with debit/credit cards more tangible and can help keep your spending in check. You can also keep track of "virtual accounts" like loans to/from friends, accounts receivable/payable, and allocate funds for specific purchases like a new computer.

You can also search your transactions to see how much you have spent in specific areas, and see a graph of your balance over time. Check out the screenshots below:

If you find GnuCash too complex for your purposes and decide to take control of your finances with wxBanker, let me know what you think! In Ubuntu you should only need to install python-wxgtk2.8 and python-numpy. Project page:

Tuesday, September 30, 2008

All Dell Minis Available with Ubuntu!

I just checked out the Dell website (US) and noticed that all the Dell Inspiron Minis can now be configured with Ubuntu, and for $40 cheaper than the same Windows setup! Previously you could take the base Ubuntu system and increase the specs to match the other Windows configurations, but you would miss out on the "Instant Savings", which could save you up to $40. Now you can not only get the Instant Savings, but you save another $40 just for choosing Ubuntu.

This is just another demonstration of Dell's commitment to open source. If anyone is reading this outside of the US, let us know in the comments if you have similar options. Also, I'd love to hear from anyone who has one of these Minis, or any other Dell with pre-installed Ubuntu for that matter. What do you think?

UPDATE: From what I am reading in the comments, it sounds like the US is the only place (currently) where the Ubuntu Minis are $40 cheaper than an identical Windows XP configuration. Perhaps other places will follow soon.

Also, I didn't notice before but the second model in the picture is only $10 more than the base one after the Ubuntu discount, which means you can double your 4GB SSD to 8GB for only 10 bucks! It is hard to imagine anyone buying the base model in the US, unless someone simply doesn't notice.

Finally, if you are going to snatch one, don't forget to log in through if you are a student or otherwise qualify, to get 2% off. In the aforementioned middle $359 setup, this knocks a few bucks off the total bringing it to $351.82 for the 8GB setup.

Tuesday, July 29, 2008

Blogging about Ubuntu Issues

As Ubuntu gets more popular, I am noticing a lot more blogs about Ubuntu (such as this one), including people posting their gripes about the latest release at the time.

One thing that always amused me was how many of these people never filed bug reports about their issues, even if the issues persisted across multiple releases. Another compounding issue (and perhaps the reason these people don't report the bugs) is that they assume the bug also affects every other user of Ubuntu. However often it just has to do with some nuance of their machine, if not something they explicitly did which would logically cause the issue. Because of these two issues, many people just happily (for lack of a better word) complain about the issue and continue to be shocked that it isn't fixed, even though they never reported the issue because they assume naturally everyone else is already aware of it.

Blogging about issues is a great way to get them exposure; however, an even better way which has a greater chance of actually getting the issue solved is to find the existing bug report on Launchpad, or create a new one if it hasn't been filed, and blog about the REPORTS. This allows readers to subscribe to and comment in the bug reports, increasing awareness of the issue for developers instead of just commenting on a random blog.

Since everything is more fun with examples, let me use this ArsGeek article as an example of a pretty decent blog post. It covers the poster's issues, explains why they are important, and links to some relevant bug reports. Overall, it does a great job of explaining and detailing issues which are already known about in Ubuntu, and bringing information together. However, after researching all of this information, the poster probably could have added some more information to the bug reports, or at the very least subscribed to them. As I mentioned, when people subscribe to bugs it helps the developers get a better idea of how many people the bug is affecting, and who actually cares about it.

It also falls a little short by not reporting new bugs for the issues which weren't already in Launchpad, such as not being able to add new themes by dragging and dropping URLs. While this is indeed an excellent and very user-friendly way to add themes, would you really expect that developers are adding themes this way? And if not, how would they be aware of the issue? Of course the people experiencing the issues need to make them aware, instead of just getting upset about it.

Luckily the wonderful Colin Watson picked up on the post and filed (some of) the bugs: 252885, 252904, 252907, 252925. If you find these issues important, subscribe to the bug reports, and add any new information if you have any. Remember, if you want to get something accomplished in Ubuntu, Launchpad is your friend!

UPDATE: About 6 hours after Colin filed 252885, a fix was committed upstream for it. This really demonstrates the power of using Launchpad, and the necessity of formally making developers aware of the issues. The article was posted over 2 months ago, and who knows how long the poster was annoyed by this issue. In the end though, all that was needed was a simple bug report in Launchpad, which was fixed in about 6 hours. Incredible!

Wednesday, July 16, 2008

What's Coming in Gnome: Part 1

Many people criticize Gnome for being behind the times and slow to change. Being the default desktop environment of Ubuntu, Gnome's usability is quite important, so this criticism should not be taken lightly. However in this post and the next I would like to demonstrate that Gnome is moving forward in terms of usability in multiple important (and in some cases exciting!) ways. My disclaimer here is that some of these concepts and mockups are taken from bug reports and developer mailing lists, and may not necessarily be the end result of the development. As such, not all of these features may make it into Gnome 2.24 (Intrepid); I will try to note when to expect each feature.

  1. Have you ever tried to unmount a device such as a USB thumbdrive, only to receive a message that it can't be unmounted because it is in use? Certainly you have; however, it is often the case that you have no idea which application[s] are blocking the unmount! This has been a long-standing bug upstream in Gnome, and multiple developers, not to mention a Google Summer of Code 2008 project, are aiming to greatly improve this. The idea is to have a dialog which explains that the device cannot be unmounted, and list the "offending" applications. Let's take a look:

    The old dialog. Not particularly helpful.

    One mockup of a proposed dialog. Note that the Unmount option will be enabled once all the applications are closed.

    This should make using devices like USB drives much more friendly to beginning users, especially users coming from Windows where this explicit unmounting isn't typically necessary. The option to have a button to kill unresponsive applications is also being discussed, which I think could be very useful. I would suggest looking for this in Intrepid+1 if not Intrepid. For more information look at and it's downstream Ubuntu bug.

  2. Currently users of metacity are unable to have individual backgrounds for each workspace that they may have (although this can be accomplished, albeit in a not particularly standards-friendly way, with Compiz). This will be an exciting and welcome addition, as the upstream bug is over 7 years old! This will also improve usability for users of multiple desktops by providing more obvious visual cues as to which desktop the user is currently in. There have already been numerous mentions of this online, so I won't dwell on this feature. I would look for this, if it gets completed (the GSoC student's blog is not particularly active, which may or may not be an indication of progress) in Intrepid+1, and possibly Intrepid.
In Part 2 I will cover a bunch of (potentially) upcoming features in Nautilus, which is Gnome's default file manager. I wanted to keep this section short so that I could group all of the Nautilus-related features together. These will include a much-needed enhancement of the Replace dialog when over-writing files, as well as the implementation of a tabbed Nautilus, and a new multiview ("columns") layout, and a few more random improvements. See you then, and please leave comments if you have any feedback!

Thursday, July 10, 2008

"We don't have much time," he said, "so I'll just talk about me."

Hello, and welcome to my blog! My name is Michael and I am fairly active in the Ubuntu community. I would like to use the knowledge and experience I have gained working in the community to bring a wider audience in on upcoming features, current debates and issues, and my thoughts on the future of Ubuntu and Linux.

My focus in Ubuntu is on the end-user experience: making it as easy, functional, efficient, and polished as possible, especially to novice users. I am also recently focusing on incorporating new concepts and paradigms into Ubuntu, to keep it on the cutting edge (for those that want it to be).

A lot of my work in Ubuntu involves triaging incoming bugs. This includes ensuring these bugs contain enough information to figure out what the issue is, and if not, asking for the information that is necessary. It also includes assigning bugs (correctly) to packages, setting statuses (Confirmed/Incomplete/Invalid/Won't Fix/Triaged, etc) and importances (all the way from Wishlist to Criticial) on the bugs, and poking and prodding the right people to get them fixed when a solution is apparent.

Additionally, I also do some development in avant-window-navigator/awn-extras, as well as my own application, wxBanker. Feel free to check out my Ubuntu wiki page and Launchpad page for more information.

So where is this going? Well, in working with a lot of bugs, blueprints, packages, upstream bug trackers, and developer mailing lists, as well as more direct interaction on IRC, I get to learn about how Ubuntu is structured, how the whole process works, and what is coming in newer releases; a lot of things many people never get to learn about. In doing so, I find a lot of interesting things that people might benefit from learning and enjoy reading about! Conversely, I think many of these same things would benefit from being known about and perhaps pushed for a little more. Basically, I want to use this blog to continue my aforementioned focuses: improving the Ubuntu community and user experience as a whole, but now from multiple angles.

So as not to inundate anyone I shall end this post here. However, I have a bunch of ideas already so expect to see something exciting soon!