Miro needs your translation help!

We've been pushing hard on Miro 2.0 development for a long time now. So far I've avoided making release date predictions, but looking at the Bugzilla queue and the rate at which we're finishing things, we're probably looking at a Miro 2.0 release in the next 3 or 4 weeks.

One thing that we desperately need help with is translation work. All translation work is done in Launchpad at https://translations.launchpad.net/democracy/trunk/+pots/democracyplayer. You can see the status of translations there, too. Right now it looks something like this:

language    # untranslated strings
--------    ----------------------
German      0 (Go German!)
Slovenian   28
Polish      39
Swedish     58
French      66

The rest of the languages have more than 100 untranslated strings.

I want to thank Lukasz, who's been working on the Polish translations, for helping an enormous amount in the last few weeks. He's identified and helped me fix a bunch of problems with the strings and also worked to make the strings easier to translate. Thank you!

If you can translate strings and/or have done Launchpad translations before, we need your help. We've got a 3 or 4 week window between now (January 22nd 2009) and a release. It's not a lot of time, but hopefully it's enough time for us all to get translations into a better state.

If you have any questions or find any problems, let me know.

parasite with miro on Linux

I saw Chip's blog entry announcing Parasite yesterday and checked it out. I had problems getting it to work with Miro, but he has since fixed the bug I was bumping into.

I think this will be a really useful tool, so I'm doing a short write up of how to use Parasite with Miro.

  1. Grab Parasite from git compile and install it. Instructions are on the Parasite web-site.

  2. When you run make install It'll install libgtkparasite.so into /usr/local/lib/gtk-2.0/modules/ .

  3. Launch Miro like this:

    LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib/gtk-2.0/modules/ GTK_MODULES=parasite ./run.sh

That'll launch Miro with Parasite showing you the widget hierarchy and widget properties and all that.

There's a screencast on the Parasite site that shows off more things you can do.

How to resize a virtual disk

I use VirtualBox OSE for virtualizing test environments for Miro development. I built a Windows XP vm a year ago and when I did it, I put it on a virtual disk that was 8 GB which turned out to be waaaay too small for my needs. It's non-trivial to build a Windows build environment for Miro so I really wanted to clone the partition to a new virtual disk that was a lot bigger, then resize the partition rather than create a new virtual disk and reinstall and set everything back up.

I pretty much did that this morning in a couple of hours.

First thing I did was download the LiveCD of Clonezilla (version 1.2.1-23) and the LiveCD of GParted (version 0.4.1-2).

Second thing I did was create a 25 GB virtual disk in VirtualBox.

Then I attached the new virtual disk to the winxp vm that I had. Thus it should show up as hdb.

I booted into the Clonezilla LiveCD, cloned the old virtual disk to the new one keeping the partition sizes the same and making sure to copy over the MBR, too.

I switched around the virtual disks attached to my winxp vm and booted into the new virtual disk--worked great!

I booted into the GParted LiveCD, launched qtparted and grew the NTFS partition so that it used the whole virtual disk.

Then I booted into the new virtual disk. It did an NTFS disk check on startup which I thought might indicate the process didn't work right. Disk check passed, Windows XP booted and everything worked as well as I expected it to.

new ui for rendered items

I checked in the latest ui in r8671. I've been told that a number of tweak requests are on their way, but it's looking pretty good and there weren't any major bugs.

The new ui took me a week and a half to implement. There were a bunch of complexities that made it difficult. I thought I'd talk about some of those here so people who aren't as intimate with the code can get an idea of how much work and what kind of work is involved.

First off, Miro 2.0 uses native widgets instead of HTML/CSS/Javascript for everything. The one place this isn't quite true is in the item lists where we're rendering our own widgets using a layout/cellpacking API that abstracts over a platform-dependent implementation layer. The platform-dependent implementation layer consists of two implementations: OSX (cocoa, pyobjc, ...) and GTK (pygtk, pango, ...). The abstraction layer is very similar in style to the GTK side of things. Ben wrote most of this as we needed it a few months ago.

The first problem I had was that I wasn't familiar with the platform-independent layout/cellpacking API we had.

The second is that there are a bunch of variations on the theme. Depending on what the context is, the item gets rendered differently. In playlists, items have a "Remove from playlist" button, but in channels, the item has a "delete" button.

Additionally, items have two display modes: with details and without details. The without details mode is the easiest to render since it's just a bunch of packed things and the resizing handling is easy to deal with. The with details mode is really difficult because we want to show the entire title and description for the item but the cells these bits are in expand as the window is resized. We get into this chicken-and-egg problem where we need to lay things out, but in order to lay things out we need to know the size of the space we're laying things out in, but in order to know the size we need to lay things out....

On top of that, items are either selected or not selected--both of which look different.

The other set of problems I ran into were theming issues. The rendering code tries to "look" like the platform it's running on: the OSX buttons look different than the GTK buttons; OSX uses Finder but Windows uses Explorer and the text needs to reflect that; ...

All of this makes for very complex implementation code. Structuring that as I figured things out was difficult to do well and the result isn't great structure-wise. Ben's already done a pass at fixing the resizing issues which resulted in some structure fixes. It's likely that other things will get fixed and massaged over the next week or so.

The end result of all this work is that we went from this:

/images/screenshot_before.thumbnail.png

Before....

to this:

/images/screenshot_after.thumbnail.png

After....

intrepid, miro 2.0 status, et al

First off, I put together a set of amd64 packages for Ubuntu Intrepid--they're in our repository now.

Second, I want to point out that after working and playing with what will become Miro 2.0, it's really hard to go back and develop on and play with the Miro 1.2 series. We've done a lot of work on the Miro codebase improving it, refactoring it, adding unit tests, re-writing the user interface, fixing behavior, and adding new features (detached playback ftw!).

We still have a handful of things that Miro 1.2.8 did that Miro 2.0 doesn't do yet, but the list gets shorter every week. We also have a bunch of bugs that need to be looked at and worked on and some polish that needs to happen.

You can see the list of things we're working on here. It's loosely prioritized--we're spending more time trying to get things tested and fixed than we are in mothering over the bug data. There are 85 bugs in the queue of things to do. To put that in some perspective, we've fixed over 350 bugs so far.

I want to thank Jason who interned with us over the summer. It was great to work with him and his contributions to the Miro project were really helpful. Also, he was instrumental in making the Miro monster. I hope they put it up on Etsy or some other online shop because they're awesome!

I want to thank Pan, Davide, Bill, Markus, and Sedat for their work testing Miro over the last couple of months. Their efforts are invaluable and very much appreciated.

chris

Earlier today or yesterday (time goes so fast these days I can't remember when I did what), I added Chris' blog to the planet.

He's been contributing to Miro development for a while now and I mentioned him in a previous post. It's good to have him on the team in a more permanent fashion.

detached playback

Luc landed detached playback a little over a week ago in r8282 (and a bunch of checkins before that).

The interface for it is a little rough and might change a bit over the next few weeks. It's something a lot of people have mentioned they wanted--David Ascher gave me a stern talking to about it at OSCON 2008. It's going to be a kick-ass Miro 2.0 feature.

I need to spend some time to get it working fully on Linux and Windows, but most of the code is there now and it works pretty well on OSX. w00t!

Bad code: Part 1

If you're writing code like this:

try:
   foo = somevar.getBlah()["xyz"].split(".")[-1].decode("ascii", "replace")
except:
   pass

Please stop! You're killing the rain forest!

your youtube four

I like passively watching memes but not participating because I'm not into getting-to-know you blog posts. But... Chris has a "youtube four meme" that's amusing.

I only have two that come up. I don't visit Youtube often.

  1. Open your fancy Firefox 3 browser.

  2. Click on the awesomebar and type in ‘youtube’.

  3. Post the first four videos that come up.

Comments are working again....

Back in June I must have:

  • disabled or uninstalled suexec

  • upgraded apache without installing a new suexec

  • done a debian upgrade that did something

Anyhow, comments are working again.