Miro (old posts, page 9)

new ui for rendered items

, | Tweet this

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:

to this:

intrepid, miro 2.0 status, et al

, | Tweet this

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

, | Tweet this

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

, | Tweet this

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!

your youtube four

, | Tweet this

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.

status (6 or something)

, | Tweet this

I haven't written much in the last couple of weeks because I was on vacation. On the first day of vacation, I went to the beach and got knocked over by a wave, somersaulted for a while, jammed my shoulder somehow, skinned my knee, and finally came up for air. I said, "Screw this!" and went back to my beach chair where I sat around, bled, whined about how my shoulder hurt and ended up with a serious sunburn. I spent the next few days indoors--vacation is dangerous.

In the last couple of weeks, I threw together a preferences panel and a channel settings dialog which, while mostly functional, are "putrid looking". Luc is going to spend some time fixing that. Ben spent time re-implementing itemlists and allowing for channel searches, saving channel searches, and some other things. We've been tweaking the widgets to make them more functional and pretty.

We still have a lot of other ui stuff that still needs fixing and tweaking. The dialogs that you sometimes see at startup when things are awry need reimplementing. The sort bars need to be reimplemented. There are some other tawdry odds and ends that also need to be redone. Generally, things are coming together and most of the big features are in, but there's a bunch of work that still needs to happen.

This morning, we talked about where we want to draw the line and encourage people to start testing the nightlies again. We haven't thus far because the laundry list of things that weren't working was pretty long. Janet thinks it's probably a good idea until most of her litmus tests pass. Otherwise you'll all be wasting your time finding things we already know about.

However, I think if you're interested in testing out Miro 2.0, we've hit a point where it's stable enough to use. I think we're at what other projects would deem an Alpha 2 state.

Definitely take the time to back up your database BEFORE you try testing a nightly.

We've got a laundry list of issues targeted for 2.0. If you encounter problems with a nightly, let us know. We hang out on #miro-hackers on freenode and on the develop mailing list, too.

If you're interested in helping out, we sure could use the help: testing, translating, triaging existing bugs, writing patches, drawing a fancy 20 page comic describing how great Miro 2.0 is going to be, ....

everything i know i learned from bugzilla

, | Tweet this

I did some bug triage today and then went through and fixed some old bug data (apologies to everyone for the bug spam). A couple of interesting things came out of that.

First off, it's interesting to note that 2.0 so far has 163 bugs marked as FIXED. That's more than any version of Miro since 0.9.5. Hard to know what happened before that because we have inadequate bug data. Go team!

Second, there are a total of 877 open bugs right now. 323 of those are targeted as Wishlist items. We've been around the 850 mark since September with a big bump between December and February in the 1000 range. I think that means generally speaking that we're keeping up with bugs which is good.

Third, it's pretty clear that the widget overhaul will clear out a lot of older bugs. Partially because we're ditching the HTML interface and the issues that caused, but also because we're re-implementing a lot of stuff and in doing that, fixing issues in the process.

Miro 2.0 is going to rock your socks!

status (5)

, | Tweet this

Progress went well this week. We've been working on the missing functionality, fixing bugs, removing dead code, cleaning up existing code, and generally progressing on Miro 2.0 development.

Last week, I wrote up the list of must-have features before Miro is ready for testing. We finished the following items:

  • diagnostics dialog.
  • open_file needs to be implemented in the OSX Application class for "show" and other things to work.
  • fullscreen playback
  • hook up volume control to playback renderer
  • Make playback take over the whole window on GTK
  • search tab
  • show/hide details - needs to be fixed on OSX
  • download tab: pause all, resume all
  • download tab: Top bar display, download / upload rate

And fixed a bunch of bugs. Ben did some optimization work on OSX, too. Some of those are new items added to the list in the last week. Some of them are smaller chunks of existing items.

We have the following list of things to do still:

  • Preference window
  • Chrome Search
  • within channel search and save
  • ff / rw / seeking
  • download tab: External Downloads section in main view
  • show/hide details - Needs seeders and leechers info for torrents
  • Channel Settings
  • overlay playback controls on OSX (including fullscreen button)

You can follow the progress on the timeline.

status trunk (4)

, | Tweet this

Things are progressing. I landed the last of the menu handling changes, Ben did a bunch of Mac OSX tweaks and Windows tweaks, there's been work on playing videos, Ben re-worked how we deal with resizing thumbnails so it no longer uses imagemagick and no longer generates lots of files in the icon-cache, and there have been a lot of bug fixes as well.

On Tuesday, a bunch of us got together in Worcester for the Miro Summit and worked out some things including the plan going forward. From that discussion, Nick wrote up a list of must-have features that need to be re-implemented before we want to get functional testing going. This list is likely to change, but here it is generally speaking:

  • Preference window
  • Chrome Search
  • search tab
  • within channel search and save
  • search all for search engines
  • fullscreen playback
  • ff / rw / seeking
  • hook up volume control to playback renderer
  • download tab: Pause all, resume all, cancel all -- Top bar display, download / upload rate -- External Downloads section in main view
  • channel details view

From that list, Chris Webber is working on a patch for channel details view which I think is close to done. I think I'm going to tackle Preferences next. I'm not sure what other items are spoken for. I'm also not sure how much time it will take to tackle all of these--maybe a month?

That brings me to my next two points:

First, I know it's taking us a long time to get things done, but it'd be faster if we/I didn't have to answer issues along the lines of "are you done yet?" and "i tested xyz nightly and the following things don't work...".

I really appreciate the fact that you all are eager to help out with Miro development and I really apologize for the frustration that comes with not being able to do anything and having to wait around for a while. We're working as hard as we can, but it's just going to take time. I'm in this weird position where I want to maximize the time I'm spending doing the work and minimize the time I'm spending talking about it and managing it, but I don't want to leave you in the dark about where we are. It's a tough thing to balance especially where I'm trying to minimize the time I spend thinking about balancing. ;)

Oddly, I bumped into this post on 43 Folders which I think is pretty relevant here.

The second thing is that we've had a lot of help from Chris Webber over the last few months. He's been working in his spare time to come up to speed with the new widget code and help re-implement functionality. His efforts are fantastic, the quality of his work is solid, and he's absolutely making a big dent in our ability to finish the work faster. You can see the efforts of his work here--I refer to him in the checkin comments as "Chris", "Christopher" and "Chris Webber". Thank you Chris!

That's it for this update!