Ph: 000000500
Home News Projects Art Support Development Community

August 30, 2008

Sat 2008/Aug/30

I forgot to turn off the coffemaker yesterday. I just discovered that all the water boiled and all the concentrated coffee stayed on the base of the pot. Eek!

I'm developing a new addiction. Besides my well documented lemon pie dependency, I'm discovering I love cinnamon rolls. Now if I only learn to cook them..

Random Updates

I’m at this annoying stage with Orc and Liboil where I need to add a feature to Liboil to support a new feature in Schrödinger, except that the new feature would be really easy to write if Orc was further along. Sigh. So I continue to muddle along not working on either.

In other news, jirac, the Java Dirac decoder written by Bart Wiegmans as a Google Summer of Code project, is pretty much feature complete and integrated into Cortado. There are a few showstopper bugs remaining, but I’m hoping for a release soon.

And in yet other news, I will be attending IBC in Amsterdam in a few weeks to meet up with various people to talk about Dirac and GStreamer. If you would like to meet up, let me know. There will be at least 3 booths related to Dirac: the BBC will be demonstrating Dirac as used for high-definition video distribution, NHK will be demonstrating Super Hi-vision with Dirac compression (that’s 4320p, kids), and Numedia will be demoing their hardware that handles Dirac Pro (SMPTE VC-2), which is Dirac for studio compression.

I’ve been seeing comments on teh Internets about “when Dirac is ready…†Just wanted to let you all know that Dirac is ready now.

August 29, 2008

Xorg hotplugging

From Roderich Schupp I received the following instructions:

cp /usr/share/doc/hal/examples/10-x11-input.fdi /etc/hal/fdi/policy/

And in order to set a default keymap:

<deviceinfo version="0.2">
  <device>
    <match key="input.xkb.rules" contains="base">
      <merge key="input.xkb.layout" type="string">de</merge>
      <merge key="input.xkb.variant" type="string">nodeadkeys</merge>
    </match>
  </device>
</deviceinfo>
Into yet another custom file in this directory.

Thank you, I'm going to try that on my next reboot (which may take a week).

Hack Week wrap-up!

Another Hack Week @ Novell / SUSE has come to an end. I think I’ve been pretty productive, as I took on and accomplished three pretty successful mini–projects.

Redesign the one-click installer

I walked through the current one, taking screenshots and notes. My goals were simple: make it simpler, and reduce the number of clicks (at least 6, depending on what happens) down to 1, as the name implies.

When I had a mockup ready–to–go, I showed it to Benjiman Weber, who happened to be visiting the SUSE office for hack week. He thought it was good overall, but suggested a few changes. I iterated over it a few times and came up something much simpler than the current design, and got it down to 1 click if the repository is already trusted, and an additional click if the repository needs to be trusted.

Here’s the final (for now, at least) design:

If you’re interested, also check all of the mockups, including the previous two as well.

WallaWalla, a from-scratch font (which looks quite a bit like the SUSE font)

Jakub had a great idea; initially I wanted to help out, but I basically wound up making my own SUSE derivative font. Most of it was done on Monday. I spent today (Friday) tidying i up and redoing a lot of the glyphs, as well as quickly adjusting the space between letters (kerning).

Download version 0.1 of the WallaWalla OTF (OpenType File) …or if you want to play around in FontForge, you can download the SFD also.

Ubuiquity command for quickly performing a software search

This week, Ubuiquity was all the rage. It’s a quick launcher for the Web, served up as a Firefox extension. I decided, on a whim, to whip up an extension for the extension—basically make a new command for it called “software-searchâ€.

Basically, it lets you search the openSUSE software search engine all from a selection on a page (or whatever you type, optionally). It displays the results of how many hits there are (if there are), which provides a quick glance to see if you can do a one-click install from the software search to install whatever software you want, without even needing to visit the page (until you know there’s something available of course). To see the results, just hit enter, and it will open up a new tab with the software you’re seeking.

(It’s great for all of those pages that lists random software for Linux, or whenever you feel like quickly searching to see what is available in the software search.)

Here’s a demo screenshot:

Interested in trying it out? First install Ubuiquity in Firefox, then visit my page for the software-search command.

A Cure For Real Estate Amnesia

Mr. Unger of The Unger Report has outdone himself this time.

“…Real Estate Amnesia (REA) is the leading cause of real estate anxiety, next to homelessness and foreclosure…†- A Cure For Real Estate Amnesia

Have you hugged your favorite open source tool today?

I have! I just recently got a hold of a US$30 Amazon gift certificate for participating of a 1-hour phone study. I could have used it and bought something for me, right? Instead, I decided to present it to Jacek Śliwerski, the guy behind Open-Tran. There is not a day that I don’t use it for my translations, as I can use its awesome comparisson tools to QA my work!

How about you? Have you hugged your favorite open source tool today?

[image] [image] [image] [image] [image]
[image]

It looks like we’ll make it!

It seems we won’t miss another gnome release, and be able to push out ekiga 3.00 out! Of course, there are a few problems to fix yet, some features which won’t make it, but the biggest are there already : it would be a shame if there were none to add in subsequent versions…

Unrelated topic : I’m a little worried that Dodji already complains having a kid makes spare time contributions hard : eh, it’s just *one* *baby* : it spends most of its days and night sleeping! [Of course, the fact that it does it on a fast cry-sleep rhythm is pretty exhausting, but still] Congrats to both parents!

Hackweek Over

I must say I’m happy about what I picked for this year’s Hackweek. My back and neck have not enjoyed the hackweek, but all the other body parts did :) While I am far from finished, I am surprised how much can be done on a font in a week (around 60 hours I would reckon) if I don’t need to worry about anything else.

The glyph coverage is better than what I planned. The typeface is stronger to what I sketched out and I hate there is no programmatic way to get smaller widths or alter x-height. Nevertheless I think the project was a success.

#

People keep asking what tools I use – Fontforge is the master tool for all this, it’s really packed with features. But I wouldn’t be able to draw a thing in it (even though it does have a large palette of tools), so all the glyphs have been constructed in Inkscape. Big thanks to George Williams not only for the amazing tool, but also for great documentation.

I’ve realized over the week just how much work needs to be done to create a full font family. I always considered the prices to be quite high, but this stuff is years of experience and endless tweaking. I know I’ll never try anything bigger than a display face/headliner in this life. That said, I think now is the perfect time to ask you to come forward and join the fun. Lots of international glyphs I have no idea about need to be done, the spacing fixed, etc. Check out the font from opensuse-art SVN and play with it, improve it. Discussions should take place on the opensuse-art mailing list. Thank you.

Also a big thanks to Novell for a great opportunity to Free openSUSE and Linux in general one step further.

it's in your reach (concentrate)

Steph is back tomorrow. It will be nice to have her home. Her not being here has caused almost complete abandonment of the lower house.

I've been working from home since Tuesday, after I managed to do an excellent job of hurting my leg while dancing on Monday night. I was a bit concerned, but today has been more or less ok, so I don't think I've done any serious damage after all. I should probably take a couple of weeks off dancing though (this meant that I got to spend the night at home rather than dancing).

I've had quite a productive week mind. Among other things I wrote an interpolation algorithm (that I got from 130s down to 15s - but I still want it to be faster) and ported my app over to GtkUIManager. It's actually the first time that I've used GtkUIManager in an application and it's pretty neat. I need to find out if it's possible to proxy items that aren't menuitems or toolbuttons (i.e. buttons in my sidebar). Then I can do some really neat tricks.

radial like a gas? pastels vs. photons

For a reason I have yet to discern, I was inspired to do some abstract light paintings this evening, which I did using a torch and the feature wall in the stairwell. They're actually kind of neat in an abstract, desktop-background kind of way (although they're showing off the flaws in the paintwork).

While changing our address, there has been some confusion as to what suburb we now live in. I've always been saying Highgate, but some people insist that we live in Perth. According to the Town of Vincent, we do in fact live in Perth, Highgate starts at Lincoln St, not Bulwer St. What this means is that Highgate Primary School is also not in Highgate. I will be writing an angry letter to the Department of Education. While on their website I also discovered the reason our new recycling bin hasn't been getting emptied is that they're not collecting those until September. We're meant to still be using the crate.

It's beginning to get interesting to watch the US election. The fresh faced guy from a minority background chose an old, white guy as his running mate. The older, white guy chose a pro-life, self-declared feminist. I don't know enough about US politics, how does this shake things up?

Finally, here is a picture of pie with the sole purpose of making Chris jealous...

apple pie

Ubiquity: turning us all into power users

Ubiquity was officially announced this week. I installed it and I find myself using it all the time for really simple, but very useful, stuff. I use a calculator a lot. Now, when I'm in the middle of typing an email or reading a web page, I just hit two keys and type "calc 3256/3+2456" and there's my answer. If I see a word I don't know, I just hit two keys and type "define hello", read the answer and hit escape and go back to what I was doing. If I want to email something interesting that I'm looking at, two keys and "email this to mike" and it emails whatever's on my web page to Mike. (Actually it gives me a choice as to what "this" is and then it brings up Gmail with an email all addressed to Mike and filled out with the information from the web page I was looking at.)

So easy, so fast.

Have you ever watched one of those power command line users? Or power emacs users? Or even people who use the keyboard exclusively? Their fingers just fly and magic comes out of their computer. I feel like Ubiquity brings that power to the average web user. With just a couple of keystrokes and intuitive commands, they can make the computer magically generate the answer they are looking for.

Ubiquity works in the web browser and can do most things I can do inside my web browser. Now wouldn't it be cool if Ubiquity also knew about my computer and all the applications and data I have on my computer? So now I could also say "email myspreadsheet to mike" and it would find "myspreadsheet" and email it to Mike?

Luis pointed out that since Mozilla's projects are all open, and the GNOME Foundation and the Mozilla Foundation work together, we should be able to do that with GNOME. And Abhijit Nadgouda's post reminded me that we might not be the only ones who'd like Ubiquity to know about our desktop. Plus, GNOME already knows how to do task oriented commands - GNOME Do has provided Ubiquity like functions for a while now. (I'm a big GNOME Do fan as well.) Can we integrate those desktop tasks into Ubiquity?

It seems to me that since Ubiquity, Firefox and GNOME are all open source we should be able to make that happen. It's a unique opportunity to integrate the web and the desktop. I shouldn't have to remember what functionality is part of the desktop and what is part of my browser. If I say "add this to myspreadsheet", the data I selected on the webpage should just be added to "myspreadsheet" on my computer.

[image]

[image] [image] [image]

Banshee "Now Playing" Animations

Aaron has been complaining lately that writing fancy graphics hacks for Banshee by hand using low-level Cairo calls is too "hard" and too tiresome to do.

Wimp.

For Hack Week, this week, I've been fixing up the GtkSharp Moonlight widget (aka GtkSilver) to work again so that The Great Bocky can write fancy graphics hacks using XAML instead.

One area that Aaron has mentioned that he'd love to do fancier animations in is the "Now Playing" view which currently is limited to a fade-in and a fade-out of the current track info (album cover w/ a reflection), track title, artist, and album name.

It took him far too long to write the code that displays that view (+ time spent optimizing it to get better than 11 FPS) and if he ever gets around to implementing anything fancier, he'll be popping those Excedrin pills like candy.

Lucky for him, I mocked up a slightly improved version of his "Now Playing" view in XAML (no code required except to update the text, album art, and to invoke the animations). All animations and graphics are represented in just 70 lines of XAML.

The great thing about designing this view in XAML is that it is easy to change the layout or adjust the animations without having to write any new code. Users can customize their "Now Playing" screens in any way they want to, all they have to do is keep the names of the controls and animations consistent with what the application expects. It's a lot like Glade XML files, only it allows the user to do fancy things like animations as well.

The demo I hacked up uses the following XAML:


<Canvas xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Background="Black" Width="700" Height="550">
<Canvas x:Name="Display">
<TextBlock Canvas.Left="10" Canvas.Top="200" x:Name="TrackInfo" Width="280"
FontFamily="Sans" FontSize="14" TextAlignment="Right" Foreground="White">
<Run x:Name="Title" FontSize="24">Wonderboy</Run><LineBreak/>
<Run x:Name="By" FontSize="12" Foreground="Gray">by</Run>
<Run x:Name="Artist">Tenacious D</Run><LineBreak/>
<Run x:Name="From" FontSize="12" Foreground="Gray">from</Run>
<Run x:Name="Album">Tenacious D</Run>
</TextBlock>
<Rectangle x:Name="AlbumArt" Canvas.Left="300" Canvas.Top="50" Width="300" Height="300">
<Rectangle.Fill>
<ImageBrush x:Name="AlbumArtBrush" Stretch="Fill" ImageSource="tenaciousd.jpg"/>
</Rectangle.Fill>
</Rectangle>
<Rectangle x:Name="AlbumArtReflection" Canvas.Left="300" Canvas.Top="50" Width="300" Height="300"
RenderTransformOrigin="0,1">
<Rectangle.Fill>
<ImageBrush x:Name="AlbumArtReflectionBrush" Stretch="Fill" ImageSource="tenaciousd.jpg"/>
</Rectangle.Fill>
<Rectangle.OpacityMask>
<LinearGradientBrush StartPoint="0,1" EndPoint="0,0">
<LinearGradientBrush.GradientStops>
<GradientStop Color="#8f8f8f8f" Offset="0"/>


</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Rectangle.OpacityMask>
<Rectangle.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="1" ScaleY="-0.35"/>
<SkewTransform x:Name="SkewTransform" AngleX="45" AngleY="0"/>
</TransformGroup>
</Rectangle.RenderTransform>
</Rectangle>
<Canvas.Resources>
<Storyboard x:Name="ReflectionAnimation">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="AlbumArtReflection"
Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[1].(SkewTransform.AngleX)">
<SplineDoubleKeyFrame KeyTime="00:00:00" Value="-45" KeySpline="0.25,0.00 0.75,0.75"/>
<SplineDoubleKeyFrame KeyTime="00:00:02" Value="45" KeySpline="0.25,0.75 0.75,1.0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Name="FadeIn">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Display"
Storyboard.TargetProperty="Opacity">
<SplineDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
<SplineDoubleKeyFrame KeyTime="00:00:01" Value="1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Name="FadeOut">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="Display"
Storyboard.TargetProperty="Opacity">
<SplineDoubleKeyFrame KeyTime="00:00:00" Value="1"/>
<SplineDoubleKeyFrame KeyTime="00:00:01" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</Canvas.Resources>
</Canvas>
</Canvas> <GradientStop Color="#00000000" Offset="1"/> <GradientStop Color="#00000000" Offset="0.75"/>

To see this in action, you'll need to grab Moonlight out of SVN (I ended up using some Silverlight 2.0 TextBlock features like TextAlignment="Right" so that no code was needed to align the text like what Aaron has to calculate manually in the current code). Once you have that installed, you should be able to view my Banshee "Now Playing" mockup in the iframe below. Mousing over the iframe should cause the fade-in effect to start and mousing out of the iframe area should cause the fade-out to take effect.



Oh, XAML, what is the secret of your power? Won't you take me far away from the mucky-muck man?

Update: It has been pointed out that the above iframe could have been done in pure XAML using EventTriggers for MouseEnter/Leave events to trigger the animations, however I designed the XAML to be used by Banshee where Aaron will likely want to be able to control when the animations start/stop programatically and not based on mouse hover events ;-)

Update: The XAML should now work with Silverlight (apparently it didn't like my LineStackingStrategy or LineHeight property on the TextBlock).

Browser usage

Somebody said on Planet GNOME that sites ought to publish their browser usage.  I have taken this to heart, such as I can, and added a short codex to Joule, a site I set up five years ago to track friending and defriending on LiveJournal.  (Well, Joule isn’t exactly the size of Wikipedia, but it’s the largest thing I have control of.)  It shows the requests for the last day:

18369 RSS hits (51.41% LJ, 3.55% Google Reader), 4735 HTML hits (32.73% Firefox, 16.14% IE, 3.76% Safari); 29 Google hits

Friday was a bad day to push this live, really, because traffic always spikes on Monday.

Anyway, the important thing is that Firefox has been the dominant browser on Joule for a long time now. I don’t know why. And I’m also showing RSS versus HTML requests; it shows that HTML now only accounts for 20% of the traffic, although this may just be because the cache control is more honoured for HTML. Google Analytics also tells me that 15% or so of my users are in Russia, which given LJ’s demographics isn’t surprising. I suppose I should translate the site to Russian.

By the way, if any of you have access to a server running LJ’s codebase and wouldn’t mind testing something for me, I’d appreciate it a good deal.

2008-08-29: Friday.

Miriam's birthday today - much excitement, dolls house from Grandfather unveiled, and packed with suitable dollies from us. Dug at mail, interesting. Gave up trying to unwind my dbus threaded oddness, and just created a connection per thread. Lunch, the rest of the family out with Nicki.

Kiwilinux 8.08 released

I have just made a new release of Kiwilinux, the 'Ro/Hu targeted but useful for international audiences, including New Zealand' derivative of Ubuntu. It is based on 8.04.1 and updated to the most recent packages in the Ubuntu, Medibuntu and Kiwi archives. As usual, very comprehensive multimedia support, working Speedtouch 330 ADSL modem, and for Romanian users for the first time a distro with OOo and Thunderbird translations, thanks to the people working on those in Narro .

Release notes
Download links

Mono locale support in Unix systems

I have just realized that Mono supports a reduced set of locales compared to Unix systems.

Mono uses a set of hardcoded locales in the runtime to provide the .Net framework locale support. Mono reads the user's locale and sets the default framework locale to the corresponding internal Mono locale. The problem is that the locales supported officially by .Net and by the Mono runtime and are smaller set compared to the ones that Unix systems support (actually Mono supports less locales that Microsoft .Net runtime).

For example, languages like Occitan, Bosnian or Breton have no locale in Mono. Neither combinations of supported languages in other regions, for example Catalan language in Andorra (ca_AD), that is actually the official language there. The list of non-supported locales is long compared to any standard Unix system.

In Unix machines, Mono applications run under these not supported locales are not respectfully with the user's locale. I noticed this because some users were complaining that gbrainy did not show the numbers properly formatted for their locales. The issue affects actually all Mono applications.

For example, if you run Banshee, F-Spot or Tomboy under a non supported locale they always show the dates and numbers formated for the invariant locale instead of using the user locale. As example, Occitan (French) and Catalan (Andorra) locales use European date formatting but you get the American date formatting. Same for number formatting. This really breaks the locale support at application level for many users.

I have filled up bug report (#420468) in the Mono's project bug tracking system. Meanwhile, I have put together a patch for gbrainy that reads the user's locale information and sets it in the default locale when user's locale has not been identified by Mono. As result, the number formatting is now shown properly. If you can think of a more elegant fix, please let me know.

mach 0.9.4 ‘Maroc’ is released

This new release adds support for recent OpenSuSE versions, and fixes a bug where mach fails to work because yum –version now outputs much more than the usual one line:

[thomas@ana mach2]$ yum –version
3.2.17
Installed: rpm-4.4.2.3-2.fc9.i386 at 2008-05-24 02:06
Built : Fedora Project at 2008-04-18 16:52
Committed: Bill Nottingham at 2008-04-18 22:00

Installed: yum-metadata-parser-1.1.2-8.fc9.i386 at 2008-05-24 02:07
Built : Fedora Project at 2008-02-14 13:27
Committed: Seth Vidal at 2008-02-14 22:00

Installed: yum-3.2.17-2.fc9.noarch at 2008-08-01 11:00
Built : Fedora Project at 2008-07-10 16:53
Committed: Seth Vidal at 2008-07-10 22:00

I’m sure there’s a good reason for doing that, so I guess the egg is on my face for my simplistic version parsing from before.

Soon in a Fedora repository near you, or you can get the source.

Congrats

to OpenedHand on cashing out! May you all be made rich and live prosperously.

Just make sure you don’t get sucked into the Black Hole of Being Acquired, but keep hacking. Make us proud!

Crazy

Just wanted to provide a quick update on life - things have been absolutely crazy recently. Literally, a-grade crazy. There are some fairly hefty changes going on in my life right now, and this combined with nearly two months of solid travelling, finishing up LugRadio, an incredibly busy worklife and recording the debut Severed Fifth record has mean’t life has been hectic - its been tough to get all these things done when I have not been home a huge amount. All is good though, and although the Severed Fifth album has been delayed a little, it should be ready soon. :)

Storm 0.13

Yesterday, Thomas rolled the 0.13 release of Storm, which can be downloaded from Launchpad.  Storm is the object relational mapper for Python used by Launchpad and Landscape, so it is capable of supporting quite large scale applications.  It is seven months since the last release, so there is a lot of improvements.  Here are a few simple statistics:

0.12 0.13 Change
Tarball size (KB) 117 155 38
Mainline revisions 213 262 49
Revisions in ancestry 552 875 323

So it is a fairly significant update by any of these metrics.  Among the new features are:

Infrastructure for tracing the SQL statements issued by Storm.  Sample tracer implementations are provided to implement bounded statement run times and for logging statements (both features used for QA of Launchpad). A validation framework.  The property constructors take a validator keyword argument, which should be a function taking arguments (object, attr_name, value) and return the value to set.  If the function raises an exception, it can prevent a value from being set.  By returning something different to its third argument it can transform values. The find() and ResultSet API has been extended to make it possible to generate queries that use GROUP BY and HAVING.  The primary use case for result sets that contain an object plus some aggregates associated with that object. Some core parts of Storm have been accelerated through a C extension.  This code is turned off by default, but can be enabled by defining the STORM_CEXTENSIONS environment variable to 1.  While it is disabled by default, it is pretty stable.  Barring any serious problems reported over the next release cycle, I’d expect it to be enabled by default for the next release. The minimum dependencies of the storm.zope.zstorm module have been reduced to just the zope.interface and transaction modules.  This makes it easier to use the per-thread store management code and global transaction management outside of Zope apps (e.g. for integrating with Django).

It doesn’t include my Django integration code though, since that isn’t fully baked.  I’ll post some more about that later.

Lawsuit, etc

You probably read it on /. or elsewhere, but here is the important part of a PR about a lawsuit:

FACIL, a non-profit association, which promotes the collective appropriation of Free Software, contests the Quebec government purchasing methods for software used within public administrations. FACIL has filed a motion before the Quebec Superior Court in order to bring an end to these methods which the association believes are not in the best interest of the Quebec government, but more importantly, not in accordance with the regulation for supply contracts, construction contracts and service contracts of government departments and public bodies (R.Q. c. A-6.01, r.0.03).

In short when the Québec government spend millions of tax payer money buying proprietary software, after bending its rules to not have to call for bids, it does not get unnoticed. The fact that only Free Software advocate are raising the issues is just revealing.

It started a while back, in March, with a potential bidder: Savoir Faire Linux' declarative judgment request

Coverage:

August 28, 2008

comcast says no to competing video services and imposes bandwidth caps

Comcast has decided to impose a 250GB/month limit on their customers. I have a lot of friends that use Comcast for their internet service provider and are likely to hit this limit, even counting fully legit data. Linux isos aren’t small. And I know that I do a lot of backups and whoisi testing that uses a decent amount of bandwidth. I’m sure I’m well past this limit. [ Note: I am a very happy Verizon FIOS user. ]

But the real story is about what this does to competitive video services. Want to get access to better, lower-cost video than Comcast cable service from somewhere like Amazon, Netflix or Hulu? Nope, welcome to the world of false scarcity. You will use their video service and you will like it.

Om calls this “the enemy of innovation†and he’s right. Part of the explosion of video, services and data via the web has come because of the growth and availability of broadband into people’s homes. What this says is “growth is fine as long as it doesn’t compete with our video offerings.â€

I am reminded of the oldest story of this behaviour when AT&T didn’t want to support the Internet because they didn’t want competition to their proprietary long haul services. And rightfully so. It’s a good thing that AT&T didn’t win that battle, right?

Also, they list how many pieces of email you can send with a 250GB limit. (Huh? Seriously?) I wonder how many youtube videos or hulu videos that amounts to. Anyone know the avg size of one of those? That might make for a more interesting number.

[image]

2008-08-28: Thursday.

Up early, poked mail & Srini, tweaked code. Caught up with Julian's valgrind hackery. Did some more analysis of the configmgr deadlock - a simple lock ordering problem, with the magic of apartments and configmgr2 trying to be a separate thread-safe piece. Wrote up some notes for Frank. Dug at FATEal issues, long planning call in the afternoon, chat with JP.

New libcanberra backends

I released libcanberra 0.8 a few hours ago. Biggest changes are some portability fixes for Solaris/FreeBSD, inclusion of an OSS backend (contributed by Joe Marcus Clarke) and a GStreamer backend (contributed by Marc-André Lureau). This will hopefully make certain doubts regarding libcanberra void.

Oh, and libcanberra now has a homepage.

End of GSoC but not of GGet

So, GSoC ended some time ago now. Many thanks goes to the community in general and Diego for being such an awesome mentor. The plan for the project is to do a first release during the weekend. There are still bugs but I thought it would be good to get something out in the wild (â€Release early, release often.†and all that). I’ll definitely keep on working on the GGet in my spare time to get it into better shape. The thing I’ll focus on next is to start using GIO/GFS for file transfers.

PulseAudio on Transifex

Thanks to Dimitris Glezos PulseAudio and its auxiliary tools are now available on Fedora's Transifex for translation. If you want to contribute translations, please submit them via Transifex, which will then result in direct commits to our upstream source code repositories -- without further delay or workload on my side. Submission via other ways (bug report, mail ...) will no longer be accepted.

Submit your translations now for PulseAudio, for the volume control, and for the preferences dialog. And while we are at it, Avahi's waiting for your translations, too.

Scripting in applications

I was interested to read Havoc’s post about scripting in applications.  I’ve often said that, as with any other right, the right to modify your software is no good if you can’t use it– and if you need to know what a compiler is, most people throw up their hands in horror and say, “But I’m not a programmer!â€, whereas typing a few lines of magic into a textbox somewhere is a gentle introduction.  After all, the first one’s always free.

(But I do have to wonder whether it would be a sensible idea to allow, say, Metacity to bind keys to JavaScript scripts.  If it would, aren’t we turning into Sawfish?)

Another question: What are the benefits of doing this in-process, rather than having each program expose a D-BUS API which can be called by some kind of central daemon?  Would we want the script engines in each program to be able to signal the other programs in case a user wanted to write script to say “play Bach when I load my work spreadsheetâ€, or would each scripting environment be able to access only the one application?  When the user wrote any one script, would they be presented with it as part of a given application, or would it be possible to write platform-wide non-application scripts?

I think that rather than doing this piecemeal, we should consider a platform-wide policy about what language(s) are acceptable, so that people can transfer their skills from one part of the desktop to another.  They don’t necessarily have to be good to write large and complicated programs in, but they do have to be non-threatening , which JavaScript manages pretty well (consider the success of BASIC in the eighties, which raises other spectres).

I may be asking silly questions.  I often do.

Handy

[image]

Confessions at the Launchpad

I have a confession to make. I think Launchpad is pretty much the best project management site in existence for developing software[1]. And the news that Launchpad is going to be open sourced is making my day.

The big crowd of people who’ve always remained skeptical about Launchpad because they simply did not trust Canonical to open source it have some evaluation to do I believe.

And by the way; you may consider it a personal challenge - to find a “project silo†better than Launchpad…[2] We dearly need one at work ;-) GForge pretty much blows in every conceivable way.

[1]: Based on my experiences with Bugzilla, Sourceforge, GForge, Mantis, Track, Jira, and Fogbugz. Fogbugz is a worthy contender, but being closed source, and for-pay-only is a huge drawback.
[2]: It is unfair to present such a challenge without giving some specs for what I mean by “project siloâ€. The minimum requirements are: Mailing lists, some form of VCS integration, bug tracker, and a Wiki. A “silo†may consist of a collection of components such as Bugzilla, Moin, Mailman, etc. Needless to say the level of integration and the quality of the individual services is a big factor.

Hack Week III: Tomboy Joins The Dark Side

Tomboy on Windows Where It Belongs

As you all know, my job here at Novell is to migrate all worthwhile desktop Linux applications off of that ridiculous platform and onto Windows so that we can do away with this nasty open source stuff. Unfortunately I haven't yet gotten the paper work to close up my code for the latest victim of this effort, so for now dirty open source hippies can get it here:

http://svn.gnome.org/svn/tomboy/branches/tomboy-portable2/

Somebody even impersonated me and posted instructions and current limitations on our mailing list (soon to be replaced with a 1-900 number offering support for a reasonable fee).

And here's an image of what it looks like. Windows has a really awesome feature where you can press your "Print Screen" button, and then you dig around in the menus to find the excellent Microsoft Paint application, at which point you recall that you can produce a "screen shot" by "pasting". Then you save in one of a myriad of excellent file formats, and you have an image of what you were doing on your computer! You can then share it with your friends like so:



What do you think? Excited to end the Linux charade and switch to a solid and hip platform like Vista? Woo!

I feel very silly today.

Utah Open Source Conference

I was fortunate enough to get to join my friends and coworkers in Provo for this Hack Week. I normally work from my home office, so I'm having a blast seeing everybody. Today we're working at Salt Lake Community College as part of the Utah Open Source Conference. I'm actually talking with my buddy Brian Merrell about the efforts of the Mono a11y team (you know, my actual job). It should be fun, we've got some neat slides and we are both cool people so I don't really see what could go wrong. The UTOSC team has done a ridiculously awesome job setting up this conference, so I'm really excited to see everything come to fruition. We had a sweet speaker dinner last night but moron that I am I forgot my camera so you just have to take my word for it!

This Tomboy stuff still needs a bit of work so off I go. Hopefully having Tomboy run on more platforms will help us attract more users and developers. I know it's a popular request so I'm pretty serious about getting it supported in trunk. Later guys!

a little light friday fare: first aid kit



Via the ever-wonderful Andrew Weissman who echos someone who has a somewhat more sarcastic approach than I prefer to music, manufactured or not. Description of the band, the band page, single on amazon and a myspace band page.

Enjoy!

Update: Sigh. I keep thinking it’s Friday. It’s not. I know.

[image]

OpenedHand News

We just updated our website with some exciting news…

screenshot-intel-acquires-openedhand.png

Xorg evdev hotplugging anyone?

Xorg 1.4 in experimental is supposed to have input device hotplugging.

Does anyone have a Howto for Debian? I tried it, but I couldn't get it to hot-plug my USB mouse, so I'm back to using the regular mouse driver for it again, using the /dev/input/mice in-kernel-hack for hotplugging.

P.S. on a recent kernel, you might want to add

blacklist snd_pcsp
to a custom file in /etc/modutils/, in order to avoid your PC speaker showing up as regular audio device. You don't want your regular apps to consider your legacy PC speaker as audio device usually.

P.S. No, my blog doesn't have comments. Just send me an email (you know, 'legacy' email) via erich AT debian org.

Launch launch launch

OK, the new Capital Radio website, built on Django and full of loveliness, is now out. There’s six months of our lives that none of us are going to get back.

Actually, I’m pretty proud of it. Nice one, team.

Lessons I learned as a translation guy

This post is my 2 cents about Jad’s latest post trying to stir things up and attract more translators to the Ubuntu community! Having led the Brazilian team for a couple of years myself, I wanted to point out a couple of things I’ve learned along the way. Obviously advices are best taken when asked for, but here it goes anyway:

Beware that 300 volunteers working at the same time without a robust and clear way of knowing who’s doing what will make it impossible for your team to manage; Also, with this many people contributing with single, hand picked strings is extremelly detrimental to the overal quality of the entire package, not to mention the entire suite; I have always liked the idea of contributions being done upstream first, and then tricklying it down to distros and what not. It is my dream and goal to make sure that Ubuntu reverses this trend and start sending contributions upstream (translations). Check out my blueprint: https://blueprints.edge.launchpad.net/rosetta/+spec/translation-workflow-and-notification-system

Well, back to work I go. :)

[image] [image] [image] [image] [image]
[image]

GStreamer Quicktime Muxing

So the official part of the summer of code is now over. I am sure the mentors will blog about the results in general, but since I have followed the Quicktime muxing project the closest myself and since Wim do not have a blog I thought it would be nice to give it a mention. Quicktime is a quite complicated format, orignally created with both editing in use, but also tied quiet closely to the quicktime media framwork. It also has a lot of derivatives like the MPEG4 container format and the 3GPP mobile container format. So when writing a muxer one need to take into account that the user might want a muxed file conforming to any of those 3 standards.

Anyway, Thiago Sousa Santos has been working hard over the summer and we now have the basic muxer working. With the baseline in place there are of course a lot of small details that needs to be taken care of, like adding support for all the different codecs which can go into a Qt/MP4/3GPP container format for instance. Thiego is well underway with that effort already though with h264 support added just a few days ago (I found a bug in the muxer testing it though, but I am sure we will sort that out quick enough). Other codecs we would want to support soon would be Dirac in Quicktime for instance.

The code is not yet in GStreamer CVS, but currently hosted in this SVN repository. But with the Summer of Code over I guess we can look into moving it into the main GStreamer repo. The great thing is that Thiego will continue working on the muxer even though the Summer of Code project period is over so hopefully all GStreamer users will have a top notch Quicktime/mp4/3gpp muxer to use once all major media formats are supported and tested.

So I would like to congratulate Thiego on having completed this years Google Summer of Code project in a absolutely brilliant way and thank him for the effort so far. The future looks bright!

Calling things by the same name

In response to my blog post “Whatever you do, don’t fix the kernel!“, David Zeuthen (prominent plumber, the maintainer of HAL and author of DeviceKit) wrote:

Scott, here’s why you’re wrong. It’s very simple and comes down to two points

- you obviously agree we can’t break huge amounts of userspace by changing DEVPATH

- having two names emitted from the kernel (_just_ because lots of user space is
broken) is just wrong and confusing
=> much better to fix up things in user space

Besides, what’s in a freaking name _anyway_? Apps should be using stable symlinks or, gosh, a device enumeration framework like HAL or the upcoming DeviceKit.

He makes, I think, an interesting point.

Why do we have two names for devices?

The kernel maintains its own namespace for devices which is based on its tree of internal objects and exported via the sysfs virtual filesystem.  My mouse’s object path is /devices/pci0000:00/0000:00:02.0/usb2/2-4/2-4:1.0/input/input2/mouse1 (convention is to omit the /sys prefix), and a class device link also exists as /class/input/mouse1 for easy access.

Properties of the device object are exported into user space via the sysfs filesystem, at that path under its mount point, and announcements of new objects, and significant changes to or removal of existing objects are made through the uevent system.  One of those properties is details about the device node that needs to be created; the dev file contains the major and minor number, and these are also present in the MAJOR and MINOR keys of the uevent.

The udev daemon listens out for these uevents and creates device nodes under the /dev path for userspace to use. These device nodes have a naming scheme that is mostly flat, with some sub-directories used for grouping. It records both the kernel object name and device path in its database so that lookups can be performed on device removal, and queries by applications using DeviceKit.

It also passes on the uevent to HAL, which stores the mapping in its own database and performs its own actions.

Applications can then use DeviceKit or HAL to enumerate devices by type, or walk the tree of devices, and lookup the actual device node path from that. They may also use them to lookup the object information for a given device node path.

That’s quite a lot of work going on behind the scenes already to map between two different names for a single device, all my proposal tried to do was reduce a little bit of the user-space side of that work by harmonising the names.

But maybe David has a point, the real problem is that we have two names in the first place!

Obviously the /dev paths are necessary for the vast number of userspace applications that still require them. But why do applications that use DeviceKit or HAL need them?

If the kernel placed a device node inside the sysfs filesystem, we wouldn’t need to do any path lookup, we’d just append the fixed name of the node to the object name.

udev would only need to make symlinks to those devices in /dev for legacy applications.

Muinshee is a reality

Finally, Muinshee has arrived! Thanks to Brad Taylor and Gabriel Burt for making this happen. Rock on, guys! (My constant nagging at Guadec has helped, it seems…)

Muinshee's main window

I’ve been a Muine user for a long time (even did some maintenance work for a while), but to be honest the project is mostly dead. I’ve not even announced the Muine 0.8.9 release yet, even though I rolled and uploaded the tarball weeks ago. (Yes, I suck.)

Muinshee's Play Album window

Hopefully the awesome Banshee people find the time to keep the Muine user interface (which is superior to all other music player interfaces in my opinion) alive in the next era of audio players on the Linux desktop.

ZenCoder: A Video Encoding software for the Creative Zen

Few days ago was girlfriend’s 22th birthday, and I gave her a Creative Zen with video support… to let her be able to cross the world watching her favorites cartoons and youtube videos! :)

During last nights I worked hard (yeah it was my first GUI ever, and first attempt with Gtk#) to give them another gift (it is a surprise), and now something is working: ZenCoder is ready!

ZenCoder is an usable frontend to mencoder, with a simple usage: just drop your videos on the Zen icon to start the conversion!

You can also choose the video (xvid scaled 320×240) and audio bitrate (mp3lame abr), skip conversions and view queued files.

Of course it supports RGBA colormap!

Yeah my girlfriend is both pretty and uses Linux, why I’m so lucky? :)

P.S.: If you have suggestions for improvements in the code feel free to poke me, this was really my first attempt in GUI programming, and it may have odd points. It also lacks of a good Makefile, an installation script and a .desktop entry. Please write me an email if you want to contribute.

Software Freedom Day

The Wellingtonites, led by my very own Jayne, launched their initiative for Software Freedom Day. The event will, predictably, held on Saturday 20th September at the Convention Centre. We’re planning on having a hackfest organized by SuperHappyDevHouse (and br3nda), an installfest organized by WellyLug, and best of all, an open source BarCamp.

Really looking forward to this, and hoping a large crowd get out and register for this event. It’ll be a lot of fun. I’ll be doing a quick session on OpenSolaris, DTrace, and anything else I’m asked to do (perhaps an impromtu GNOME session?).

Hoping this is going to charge up the other teams around NZ into organizing events!

Evolution Source Relicensing

Following our earlier announcement of evolution sources relicensing, I committed the change of License headers, for a part of Evolution sources, from GPL to LGPL.

The license change for the remaining files will be done as we progress with the code auditing. We are really excited and feel that this would really help Evolution a lot.

I learned a lot about scripting and the importance to come up with a standard header so that any sed, awk ing can be done easily.

Muinshee

I'm enjoying being in Provo, Utah this week at the beautiful Novell campus, with coworkers from all over, hacking away on projects of our choosing. I'm grateful to Novell for having the foresight to give us Hack Week, a time to explore and experiment - above and beyond our weekly ITO and official responsibilities.

The amazing Brad Taylor, who just joined Novell last week, joined me in creating a Muine-like interface for Banshee. People love Muine's simple interface for queueing and playing songs. Our goal is to replicate that experience leveraging Banshee. In a day's work, we got things working well.

Banshee with a Muine-like interface; Muinshee

Selecting an album to queue or play in Muinshee

The code will land in trunk soon, and therefore will be in Banshee 1.4. We've already started on our next Hack Week project, adding support for AirTunes to Banshee. We will be at the Utah Open Source Conference on Thursday and Friday doing it live. On Friday Aaron and Sandy are giving talks on Banshee and a11y.

Welcome, Matt!

It’s wonderful to see that Matt Zimmerman has finally given in and started blogging. As a welcoming gift, I’d like to give him a hackergotchi. If it seems familiar, it’s because I tried to lure him into the blogging world with it way back in 2005! (You might want to click through for a hackergotchi of more conventional size…)

Hackweek, etc.

For hackweek, I have been working on implementating the "rendering" in libopenraw. This mean I need to extract metadata for the various parameters need for the demosaic and color correction, including linearization tables[1] and camera to XYZ matrices. For this I'm trying to stick to the DNG data model as it likely already abstract the different formats.

Notes

[1] not all files needs that

August 27, 2008

MOTODEV Studio for Linux: A brief review


Knowing several SDKs for mobile devices available in the market such as OpenMoko Freerunner, Nokia N810 and several other I decided to take a look at the new MOTODEV Studio for Linux by Motorola. They published the preview release 0.3 a short time ago. Its quite appealing to write applications for all the MOTOMAGX devies out there. But it turned out that it is not really easy and the fun seems to be limited even if the MOTODEV Studio itself looks and feels quite nice.

The MOTODEV Studio preview comes as a 381MB zip archive which contains install instructions (PDF) and an executable binary installer. Even if the website says that it requires RHEL4 it installed without trouble on my Ubunty 8.04 after switching from GCJ to a SUN JRE. It requires ~900MB of disk space (no 3GB like the website says). There is an installer for Windows as well, but trying this is a job for someone else ;-)

The Eclipse (they use 4.0.3) IDE’s developer perspective looks pretty good and is easy to use even for developers who are not used to Eclipse at all. Only the fact that it needs a big screen to become useful is a problem for the users of many laptop computers which do not offer a screen higher than ~800 pixels. Resolutions below 1280×1024 result in a very small editor window.

Developer Perspective

Note the documetation browser at the right side of the window. There is a lot of documentation included already and integrated into the Eclipse help mechanism.

The VMware set-up and creating a configuration for the device emulator is rather trivial with the step-by-step instructions. Make sure to have VMware player 2.0.4 installed - the website still has 2.0.3 as a requirement which did not work for me.

The device emulator starts a VMware instance booting into a Linux system. Once the emulator is running it opens a tab in the IDE with a virtual device. It somewhat reminds me to Xoo :-)

IDE with emulator

IDE with emulator

With a set of example applications included it is very easy to get an application started. Creating a new project you are offered five application skeletons to choose from which includes a GUI application that shows how to use the contact database API.

So far the whole SDK looks really promising and much more convenient for Linux developers than the Series60 SDKs. But currently there are some bad limitations:

No integration of real devices yet - no binaries for a real handset and no debugging on a device. They say that current MOTOMAGX devices won’t be supported by the native SDK and support will be limited to the next generation of devices. Even if Motorola call MOTOMAGX an ‘open’ platform its openness is very limited and does not really compare with an open platform open source developers would like to see. Environmets like OpenMoko or Maemo offer a way higher degree of freedom. The developer community and therefore the number of applications available is quite likely to be small in near future - compared to established platforms at least. Some strange limitations in the IDE like the fact that source files are only usable if they have the extension ‘.cpp’ might make it quite hard to port existing software.

All in all its a big step into the right direction, but there is atill a hell of a lot of work to do. I guess it would be a nice idea for some MOTODEV Studio developers to have a chat with us Maemo people at OSiM next month.

Have a nice time…

Facebook doesn’t really support IE6

Blimey. I didn’t realise that Facebook are trending down support for IE6. The “new look†is disabled, and if you use the old look you get a big message complaining about your browser choice:

\"You may want to upgrade your browser [from IE6]\", says Facebook

'You may want to upgrade your browser (from IE6)', says Facebook

Two interesting things here: first, they recommend that you try another browser, and give a list of Firefox, Safari, and Flock as well as “upgrade to Internet Explorer 7″. Flock? I bet the Opera people are a bit hacked off about that.

Second: there have been a few cases so far of people dropping support for IE6 (MobileMe, not that that really counts because all its users are Mac people, and 37 Signals, ditto), but nothing remotely as high-profile as Facebook. This is the boot starting to descend, I think. IE6 is already the bugbear of the industry (and has been for some time: I said “Internet Explorer is the new Netscape 4†in 2005 and I was hardly the first!); how long before we see support for it drop to Netscape 4 levels of “you get the unenhanced non-JavaScript version�

I’d like to see more people publish browser stats for their websites. Yes, they’re unreliable, yes people change their user agent, blah blah blah. They’ll give us an indication, though; how many people out there are using IE6? Google Analytics tells me that 36% of my visitors are using IE, and 37% of those are using IE6, which means that IE6 visitors to my site are down to under 15%. (If you’re not using Analytics, analog -G -A +a +B <apache logfile> will give you a browser list, as will many other things.) Other people will doubtless differ, and I’d be thoroughly interested in seeing more of these percentages from sites with a different user-base to mine. If you’re a company, tell us what percentage of your users are using IE6! We’re not going to get stats out of Google or Yahoo or the BBC, but non-behemoths will do fine here. Everyone else, start thinking: where’s the cut-off point? How low does IE6’s market share need to go before it’s reasonable to not devote extra development time to it?

“Extra†is the keyword there — people thinking “hey, Opera/Safari/Firefox 3/IE8 has less than 15% market share in my statistics, let’s cut them off, Mr. Microsoft Hater†need to consider that modern browsers don’t (or at least shouldn’t) take any extra development time to work around their idiosyncrasies. (In practice, Safari does require more extra development time than I’d like, I find, but its market share is high enough (or the idiosyncracies are infrequent enough) that supporting it is broadly worth the effort.)

So: if you have IE6 stats, publish them. If you’re a web hacker: when should we cut off the ailing IE6’s life support? Speak now…

Arf. Arf.

419 Eater always amuses me - it is a website scam-baiters follow through with those Nigerian scam emails. Today though I read a case where someone manages to persuade the scammer to tattoo Baited By Shiver on his leg.

Read it here.

Comedy. :)

New backgrounds for GNOME 2.24

We chose the new backgrounds for 2.24 at GUADEC, but it wasn’t until a few weeks ago we got round to integrating them into the gnome-backgrounds module. Have a look on the theming blog for a preview of the new images.

(Yes! I get first post to the new GNOME theming blog!)

What do you care what other people think ?

A few days back, Kushal had posted some thoughts about newbies on IRC and especially related to the way they go about their business. He wrapped his comments into an audio file.

Today, I read Swaroop’s blog about providing ‘coding’ training.

So, here’s the bottom-line - the education system as it is in place in India is flawed. Not only from the perspective of content or focus, but from a deeper core objective of what it is supposed to do. This isn’t a rant. I’ve studied