November 07, 2009

Zeitgeist Hackfest

In 12 hours I’m going to board a plane at Ben Gurion Intl Airport for Munich. 8 hours later I’ll take a train to Italy and only 3 hours after that I’ll arrive in Bolzano, Italy for the Zeitgeist Hackfest.

Many thanks go to the GNOME Foundation and Canonical for sponsoring the hackfest and to the South Tyrol Free Software Center for organizing and hosting it.

I’ll see you in Bolzano! :)

case-lambda in guile

Oh man, does the hack proceed apace. I really haven't had time to write about it all, but stories don't tell themselves, so it's back behind the megaphone for me.

Guile is doing well, with the monthly release train still on the roll. Check the latest news entries for the particulars of the past; but here I'd like to write about a couple aspects of the present.

First, case-lambda. The dilly here is that sometimes you want a procedure that can take N or M arguments. For example, Scheme's write can be invoked as:

(write "Hi." (current-output-port))
=| "Hi."

(=| means "prints", in the same way that => means "yields".)

But actually you can omit the second argument, because it defaults to the current output port anyway, and just do:

(write "Hi.")
=| "Hi."

Well hello. So the question: how can one procedure take two different numbers of arguments -- how can it have two different arities?

The standard answer in Scheme is the "rest argument", as in "this procedure has two arguments, and put the rest in the third." The syntax for it is not very elegant, because it introduces improper lists into the code:

(define (foo a b . c)
  (format #t "~a ~a ~a\n" a b c))
(foo 1 2 3 4)
=| 1 2 (3 4)

You see that 1 and 2 are apart, but that 3 and 4 have been consed into a list. Rest args are great when your procedure really does take any number of arguments, but if the true situation is that your procedure simply takes 1 or 2 arguments, you end up with code like this:

(define my-write
  (lambda (obj . rest)
    (let ((port (if (pair? rest)
                    (car rest)
                    (current-output-port))))
      (write obj port))))

It's ugly, and it's not expressive. What's more, there's a bug in the code above -- that you can give it 3 arguments and it does not complain. And even more than that, it actually has to allocate memory to store the rest argument, on every function call. (Whole-program analysis can recover this, but that is an entirely different kettle of fish.)

The solution to this is case-lambda, which allows you to have one procedure with many different arities.

(define my-write
  (case-lambda
    ((obj port) (write obj port))
    ((obj)      (my-write obj (current-output-port)))))

implementation

You can implement case-lambda in terms of rest arguments, with macros. Guile did so for many years. But you don't get the efficiency benefits that way, and all of your tools still assume functions only have one arity.

Probably the first time you make a VM, you encode the arity of a procedure into the procedure itself, in some kind of header. Then the opcodes that do calls or tail-calls or what-have-you check the procedure header against the number of arguments, to make sure that everything is right before transferring control to the new procedure.

Well with case-lambda that's not a good idea. Actually if you think a bit, there are all kinds of things that procedures might want to do with their arguments -- optional and keyword arguments, for example. (I'll discuss those shortly.) Or when you are implementing Elisp, and you have a rest argument, you should make a nil-terminated list instead of a null-terminated list. Et cetera. Many variations, and yet the base case should be fast.

The answer is to make calling a procedure very simple -- just a jump to the new location. Then let the procedure that's being called handle its arguments. If it's a simple procedure, then it's a simple check, or if it's a case-lambda, then you have some dispatch. Indeed in Guile's VM now there are opcodes to branch based on the number of arguments.

So much for the VM; what about the compiler and the toolchain? For the compiler it's got its ups and downs. Instead of a <lambda> that just has its arguments and body, it now has no arguments, and a <lambda-case> as its body. Each lambda-case has an "alternate", the next one in the series. More complicated.

Then you have the debugging information about the arities. The deal here is that there are parts of a procedure that have arities, probably contiguous parts, and there are parts that have no arity at all. For example, program counter 0 in most procedures has no arity -- no bindings have been made from the arguments to local variables -- because the number of arguments hasn't been checked yet. And if that check fails, you'll want to show those arguments on your stacktrace. Complication there too.

And the introspection procedures, like procedure-arguments and such, all need to be updated. On the plus side, and this is a big plus, now there is much more debugging information available. Argument names for the different case-lambda clauses, and whether they are required or rest arguments -- and also optional and keyword arguments. This is nice. So for example my-write prints like this:

#<program my-write (obj port) | (obj)>

So yeah, Guile does efficient multiple-arity dispatch now, and has the toolchain to back it up.

Next up, efficient optional and keyword arguments. Tata for now!

gbrainy 1.20

Here we have gbrainy 1.20, eight months after the previous major version. gbrainy is a brain teaser game and trainer to have fun and to keep your brain trained. It provides the following types of games:

  • Logic puzzles. Games designed to challenge your reasoning and thinking skills.
  • Mental calculation. Games based on arithmetical operations designed to prove your mental calculation skills.
  • Memory trainers. Games designed to challenge your short term memory.
  • Verbal analogies. Games that challenge your verbal aptitude.

 

What is new in version 1.20 from the NEWS file:

* 6 new games
* Verbal analogies (new type of games)
* New translations
* Bug fixes

gbrainy 1.20 is available for download in source code from:

* http://gent.softcatala.org/jmas/gbrainy/gbrainy-1.20.tar.gz
      (md5sum a6fd944698c47beb907e39362b2b2917)

Additionally, gbrainy is available for all major Linux distributions.

On top of the already existant translations, in this version debuts the Danish translation by Joe Dalton.

Extending gbrainy

gbrainy can be extended in two main ways:

  • Developing new games as extensions. These are external assembly files that gbrainy recognizes at runtime.
  • Defining new verbal analogies using an external file.

If you extend gbrainy, please considering contributing your work to be included in gbrainy.

Windows Version

After a year without releasing a new Windows version of gbrainy I have prepared a new Windows version. This new version works much better because it includes newer versions of the GTK and Mono stacks and a few fixes in the installer.

How can you help gbrainy?

This is a common question that I get. Let me point out some areas where you can help:

  • Play the game and provide feedback about the application.
  • Translation to different languages. Check the current status of gbrainy translations.
  • Any development aid, including fixes or new Puzzles for the current system (see the development section).
  • Ideas for new logic puzzles, memory or calculation trainers.

If you like gbrainy, blog about it and tell your friends!

digital interfaces

I made some tomato and red pepper soup for lunch yesterday. Before I had a chance to eat it, the universe decided it still needed more red, and that I should try something stupid with a pocketknife. I sliced up my left forefinger and thumb pretty good.

This blog seems to be specializing in thoughts just before blood, so here it is: ah fuck, going to have to get stitches. I knew that in the first second.

Thankfully, there's a CAP (Centre d'Atenció Primària) in most neighborhoods, so after laying down on the couch to make sure I wouldn't faint, and grabbing chocolate from the cupboard, considering I hadn't yet eaten the soup, I walked the 10 minutes to the CAP, my hastily bandaged hand held high. People looked at me funny.

An hour and a half later, well, four stitches in the index finger, three on the thumb. But I'm ok.

* * *

I hear that some family of mine is going to these "tea party" protests. If you're not plugged into the States political scene, the deal is this: the Republican brand is broke, and everyone knows it. But there is so much anger at their base. So voila Republican anger without the Republican state trappings, a catchment of the neofascist tendencies in all of us, whipped up around a symbol: the idea that Obama is a foreign element, an outsider, not of us, coming to enslave us all.

One of my family writes, referring to the return of another from these "tea party" protests:

When you are released and your tracking anklet has been removed. . . what do you say we move to Montana and prepare for the movie Red Dawn? We don't have to paint Wolverine on the side of every Afghan or Obamian tank that we destroy, but we can live off the land, sleep under the stars and pee in overheated radiators. The enemy will be obvious out there. I remember Sesame Street. . . . which one does not look like the others. . . . got it. Always look for the red dot and the table cloth on the head.

This makes me so sad. And the thing that's really binding them together, even the less racist, is hatred of "Obamacare" -- the idea that one should be able to walk into a clinic, get treated well and kindly, and walk out, regardless of your employment status, without signing for anything, without paying anything, as I did yesterday, in this foreign land.

Looking forward to some improvements

I have been using Transifex based systems for a couple of days/weeks now. And, in line with what I did mention on my micro-blog, Transifex and Lotte make things really easy. The coolest devel crew makes that happen. And, since they lurk online and engage with their users, every little tweak or, improvement that is suggested and considered makes the consumers feel part of the good work they are doing. Good karma and awesome excitement all around.

At some point in time during the week, I’d put them in the tickets as feature enhancements. However, for the time being, here’s a couple:

  • Lotte should allow me to click on a file that is not yet translated for my language and, add it to the collection. If I recall correctly, the current way to add it is to download the .pot, convert to the appropriate .po and, upload it with comments etc
  • Lotte needs to allow “Copy from Source”. This should accelerate translation by removing the extra step of having to actually select, copy and paste. This comes in handy when translating strings within tags or, brands/trademarks and so forth
  • Handling and using translation memory could be built into Lotte. For a particular file in a specific language within a project, it could perhaps provide suggestions of translated words. In the future, allowing teams to add their glossaries would make it a more powerful tool too. Having said that, I’ve always wondered what happens when team glossaries are created from files across various projects – is there a license compatibility soup problem that could crop up ?
  • A Transifex installation could provide notifications of new files or, updated files for the language. This could be limited to the files for which the last translator is the person receiving the notices or, ideally, could be for the language itself.
  • Statistics – providing each language a visual representation of commits over time or, per contributor commits would also be a nice addition

So much for Transifex, in fact, I need to write out all of that in a nicer way so as to allow the possibility of these turning into GSoC projects within Transifex.

Coming to Virtaal. With lokalize being unbearably useless for me (it adds garbled text or whitespaces into files when using the stock F11 supplied one) and, before it is commented, no I haven’t filed a bug yet, getting the files done was a bit more important at that specific point. So, mea culpa. But I do check with every yum update and, it is still the same. The specific issue with Virtaal is that each time one gets a new string loaded for translation, the text input area loses the input method details. Which means that it is a constant game of switch back and forth between the inputs. Sadly enough, this is the only software that currently works for me (I don’t want to set up a local pootle/transifex instance and, do web based translation)

November 06, 2009

Get to know a Fedora Ambassador or User


We’ve got a meme!

Name: Máirín “Mo” Duffy
IRC nickname: mizmo
IRC channels: #fedora-design, #fedora-art, #fedora-admin, #fedora-mktg, #fedora-devel on freenode; #fedora-desktop on GIMPnet
Location: Boston, Massachusetts USA

Mo

Posted in Uncategorized

Making Books Available

Its all over the web now – the Internet Archive has opened up over 1.6 million books for the OLPC XO laptops and in general, any machine running Sugar. Before going into anything else, it makes sense to provide a more specific meaning of “opening up” here – it involves two main objectives completed at the Internet Archive end:

  • Making sure that the books are readable in the XO, keeping in mind its relative low-end hardware specs and disk-space limitations
  • Ensuring that the books are available via a standardized catalog format, so that one can find, browse and download books easily using a tool more tuned for the purpose (think of feed-readers versus blog-entries in a web-page)

Now that the books are available (not just from the Internet Archive, but from a number of other sources as well), the next step is to figure out the best possible ways to actually make these books available to the XO and Sugar users. The major constraining factor is bandwidth, we do have deployments with zero, or very limited Internet connectivity, and perhaps these are the deployments which need access to these books the most. I spent most of this week working on implementing a feature in the Get Books activity which would allow books to be distributed via what has been jokingly called a sneaker-net (or sandalnet/chappalnet, if you prefer those forms of footwear). The idea is very simple – at a centralized location with Internet access, choose a few thousand books (size of a typical book is usually a few hundred KB or less), put them in a USB pen-drive and add a OPDS catalog to the mix. Make copies of the drive, and send them to the schools without connectivity. The latest version of Get Books would recognize the drive, and let the student browse through the collection, search for books, and add whatever she wants to the Sugar Journal. Once a book is in the Journal, it can be shared among all the students using the Journal object transfer support in Sugar, or via the Read Activity directly. So essentially, you get a Library on a Stick, with thousands of books, something which, till now, in its physical form, has been largely restricted to better equipped (and usually richer) schools.
Of course, even larger collections can be distributed if a School Server (XS) is present in the mix (due to the fact that the school server can have a larger disk in it), and support for this type of distribution method involving the XS would hopefully appear within the next few releases of Get Books.

Get to know a Fedora Ambassador or User

Since Paul Mellors (MooDoo) started this off, here’s what it is:

Name: sankarshan
IRC Nick: sankarshan (or, sm|CPU)
IRC Channel : #fedora-india#fedora-ambassadors
Fedora Ambassador: India

The mandatory mugshot is here.

The post is brought to you by lekhonee v0.8

HP 5735, Disappoints

I get email and know that some of you are thinking about thin clients in your organization. I have always tried to be honest and describe what works and what doesn't.

After a good amount of testing, we have been unable to get the HP 5735 to work well enough to put into production. They may work in other areas perfectly well, but our goal was to add ATI 9250 video cards to them and use them for the 3D desktop. Even though they have higher specs than the HP 5725, under no conditions have they ever run faster. 3D performance is very sluggish and certainly not fast enough for day to day use.

I know this isn't a perfect test, but the results seemed to correlate with Compiz "feel". It also could easily be replicated by anyone else. For my test, I booted an X server with just a xterm window and then connected to our remote Compiz servers and ran glxgears. The 5725 was the clear winner with 653 FPS. I also tested the onboard X1200 and then 2250 video cards.



We only purchased a few 5735s for testing, and will be moving them into our cyber cafes which don't use 3D and for that purpose they will work well.

We will continue to use the HP 5725 (which works great) until we have another device that performs as well.

Multiple branches and translations

Fellow Package Maintainers,

How are you dealing with this ?

I guess f-spot is not the only project maintaining multiple parallel branches, a STABLE one, from which the releases and bugfix releases are created, and a master, open for business, new stuffs, and experimentations.

When we need to correct something on the STABLE branch, we push a new commit over there, then merge the STABLE back to master so it gets the same fixes. That works fine.

But it gets harder with translation commits. Most of the (awesome) translators (well, all except of one) translates the master and commits right there. Then, when it's time to release, I either ignore those translations (and that's seriously annoying for translators who pushed soem work in the .po), or I blindly backport (cherry-pick) the translations back to the STABLE branch and hope that no strings was removed in master's code. Then I merge the STABLE back to master. Both solutions are seriously suboptimal. Really.

I know how this problem is "solved" in most of the GNOME projects by putting deadlines and code freezes, and string freezes, but I guess we're not the only project around with this kind of issue.

The ideal workflow would be to have the translators (hey guys) aware of the STABLE branch, make them translate that branch, have them merge it back to master, and then, optionally, translate the missing/changed strings and commit that to master. I said ideal, cause I'm NOT gonna ask any translator to understand and follow this, be able to maually merge if something goes wrong, etc...

Translators (did I say thanks for your job lately) are already doing an ant job, most of them with no tools but a text editor, and we can't really add any pain to the process.

So, what are you doing in that case. How could we improve the process ?

Comments are open.

Maemo – Barcelona Long Weekend, December 4-6


Just an extended microblog post to let you all know about something that is growing pretty fast: Maemo – Barcelona Long Weekend.

It all started with a UX Meets Code workshop for 50 invited Maemo developers but then we started getting questions in forums, emails and phone calls. Specially about local activities. This is something we wanted to start sometime, somewhere… So why not Barcelona next month! We are now proposing developer training en español, a localization workshop taking el català as test case, gatherings of local groups interested in Maemo and the N900…

GNOME, KDE, Debian, Softcatalà, Hispalinux & co: cuanto mejor sea la respuesta local más gorda la podremos liar.

Tagged: Barcelona, events, maemo

Public Service Announcement

Folks! Since quite some time now the kernel exports the DMI machine information below /sys/class/dmi/id/. You may stop now parsing the output of dmidecode thus depending on external tools and privileged code.

For example, to read your BIOS vendor string all you need to do is this:

$ read bv < /sys/class/dmi/id/bios_vendor
$ echo $bv

Which is of course much simpler, and cleaner, and safer than anything involving dmidecode.

Thank you for your time!

Dedicated separate Firefox windows

Dear intarweb,

here’s what I’d like to be able to do. I would like to start a completely separate Firefox window, in a separate process, with a given webpage. This process should be completely separate from my regular browsing, not take new links in its window when I click links somewhere else (usually they go to the most recently opened window), not crash when the regular firefox process crashes, and not bog down because my regular firefox goes to 100% CPU and beyond.

It seems to be hard to google for this idea; is it possible ?

Best post-sale screen ever

Just gave in to the geeky side of the force this morning and bought a DVD documentary about BBS’s. (the version I bought comes with a DVD full with BBS text files, ANSI art, and random crap.)

After buying, this is the screen I got:

I don’t think I ever got a chuckle out of what happened right *after* I forked over cash. Here’s to you, Bob!

Looking for a tool to draw pipe networks

Dear knowledgeable(lazy)web,

I have a friend who’s looking for a free software application to draw pipeline networks using the Piping and Instrumentation Diagram Standard Notation such as this example:

He didn’t find any and resorted to draw each possible elements in svgs he later intend to import as symbols in Dia.  Does such a thing already exist? or is there another specialized tool that comes with such symbols?

Answer in comments to this post. Thanks!

The Intersection Of Quality And Expectations

There has been a little bit o’chatter on the tubes recently regarding quality and our recent release, Ubuntu 9.10. There we were on Thursday, champagne in hand, kicking a new release out the door and while I have seen countless reports of happy users with effortless upgrades and hardware and software working better than ever before, there are of course some reports of things going less-well, some broken upgrades and unexpected quirks.

Those of us involved in the Ubuntu project, like anyone involved in any kind of endeavour, are emotionally invested in our work. When we hear of problems, it hurts us, and it is tempting to get a little defensive and find fault in those who criticise. Well, I don’t want to denigrate the experiences of our users who face problems: if something goes wrong, that user’s experience is genuinely marred. Irrespective of whether the fault was in our package, with hardware, with networking, in the upstream version of the software or elsewhere, that user had a bad experience, and we need to come together as a project to help prevent these problems from occurring again.

What I am conscious to do though is to put things in a little bit of perspective. It is tempting to believe that the sky is falling when we see patterns of negative outcomes: that is the way human beings are wired up. This concern can be further confounded when journalists write articles that look at a portion of the picture; a news-wire always makes things look more worrying than they really are. Then again, that’s what journos do: they look for patterns and they report on them. Hell, I used to be a journo, and that is what I was expected to do with the publications that I wrote for.

In the interests of keeping things in perspective, I just wanted to remind us all of some of the things going on in the background that I think are worth remembering. Take these for what they are, but I think they go a long way in helping to understand the picture before us.

Firstly, criticism is a sign of success. Ubuntu is arguably the most popular Linux distribution in the world, and has been growing every year since it started. This release of Ubuntu outdid each previous version in terms of how much data we shifted on release day. “With enough eyeballs all bugs are shallow” is one of the foundational attributes of Open Source and therefore it is not entirely surprising that when we kicked out a new release of the world’s most popular desktop Linux distribution, there were more eyeballs, more hardware, more networks, more devices, more configurations, more expectations and therefore more opportunities for things to go awry inside these attributes. If we then combine this with the natural inclination for human beings to communicate complaints as opposed to share praise, it is also not entirely surprising that we see these patterns before us, and that journalists report on said patterns.

Around the time we set the Karmic Koala loose, many comparisons were made to Windows 7. Of course, Windows 7 has generated an incredible amount of press, and the mere fact that we are being compared to the most dominant Operating System in the world is something that I consider an achievement. 11 years ago when I joined the Linux journey, it took 2 weeks to get the bloody thing installed, there was barely any device support, you needed a degree in rocket science and integration was something that happened to other people. Microsoft never stood still and we needed to catch up, but today we are direct competitors. This is a tremendous testament to the upstream community and the Ubuntu community for building an integrated system.

There is one key difference between our quality story and Microsoft’s though: we are transparent. You can download all of the source code that comprises Ubuntu, you can see all of our bugs, you can see all our patches, and because the software is free, you can download it freely and try it out, if only for shits and giggles. With a transparent development and quality assurance process, a culture of openness and transparency develops and we are all frank and honest about defects. Speaking as one dot on the Internet, I work for Canonical, a company directly invested in Ubuntu, and I feel comfortable reporting public bugs and defects in Ubuntu and I feel comfortable talking about what rocks it and what ails it: it is part of the Open Source culture in which we all exist. I love this attribute of free software: we are not afraid to talk about problems, and due to the open nature of our environment, the opportunity exists for success.

Fundamentally, if someone experiences problems with software, we need to resolve those problems. The global Ubuntu family is proud of all that we have achieved so far on this journey and we are firmly committed to the road ahead. Karmic was a ballsy release: we shipped some adventurous new technology and in the short six-month cycle that we are committed to, we tried to ship the most exciting, feature-full and compelling release that we could. It is this exact reason that attracted me to Ubuntu back in 2004: it was a project that was unafraid of pushing the envelope. The difference is that now we have millions of people who are judging our work, many of which have stories that we will never hear.

We have a tremendous opportunity to embrace these challenges. With our Ubuntu Developer Summit coming up in a few weeks, and with us focusing on a Long Term Support (LTS) release that is underlined by stability and enterprise-grade maintenance and support, we have an opportunity to really indulge in stability, QA and testing. As ever, this is a story in which we can all play a part and I welcome you all to join us.

November 05, 2009

Not Tolerating The Intolerant

Thanks to my friends over at ZDNet for allowing me to post another guest article on their Between The Lines column. This time I have written an article discussing the importance of a productive, pleasant and pleasurable community that rewards great work and celebrates the exchange of both agreeable and challenging opinions, ideas and views, and how intolerance can risk and undermine that community.

Go and read Not Tolerating The Intolerant.

JavaScript in gnome

Being away from home, bored and yet too tired to do something productive, I skimmed through the gnome-shell proposal mail thread on d-d-l and spotted the inevitable debate on the choice of javascript as a scripting language for the shell.

Personally I am not a big fan of js, quite the contrary, but lately I had to use it extensively (though not in gnome related context) and at the end of the day it is a language as any other. I am not saying it would be the one I would have chosen, but once you use it a bit and get to know its idiosyncrasies, you get what you need done and move on with life. After all any programming language sucks, each one in its own special way and some more than others, but they all suck.

Reading in the aforementioned thread the reasons why js was picked I would have been totally satisfied with valid answers like:

  • “It’s my project I and pick whatever language I please”
  • “Some of the more talented and experienced gnome hackers chose it. Trust them”
  • “It is not C++ or perl, so do not complain”

Beside given that javascript

  • has good free implementations
  • is widely used (not only in general, but at this point also by various big gnome projects)

I do not have any major problems with it. After all we have clean and consistent code bases written using GObject C conventions, I do not see why we should not be able to tame js as well.

That said, some of the rationales provided for choosing it in the above mentioned d-d-l thread really really trouble me.

js has no platform libraries, so we can use our own

What kind of reason is that? First of all when you embed another scripting language you are not forced in any way to use its standard libarary as well. Second, having a good standard library (or a large set of third party libraries) is a good thing: I thought we were focusing on implementing good applications instead of reimplementing and maintaining a “gwhatever” library for every problem in the world.

using js will attract web developers

That is plainly naive. First of all I have never hacked on something because it was written in a language, at most I have learned a language because something I wanted to hack on was written in it. Second learning the syntax of a language is nothing compared to learning library API, tools, workflows etc and even if I have not used js in gnome yet, I am pretty sure they differ a lot from what web developers are used to. Last but not least, I’d prefer to attract a single good developer than a hundred people not willing to invest an afternoon in learning a language/api/tool.

Get Moblin, get GNOME

If you were to install the new Moblin 2.1 somewhere, you'd be getting a gnome-bluetooth powered Bluetooth panel.

All the code lives upstream in the gnome-bluetooth module on master.

Stupidity of the day

I’m leaving for Texas, USA soon. Me being a German living in - guess - Germany, causes the need to apply for the US “Visa Waiver Program” using https://esta.cbp.dhs.gov (thanks again to Otto for reminding me *g*) these days. While clicking through and filling out the forms of the electronic variant of that “green sheet of paper” (the one you used to have to fill out on the plane prior to landing on US soil) I was greeted by this notice…


small_umlaut-failure-in-form_png.png

It’s almost 2010! Have the people, who implemented that web-interface, ever heard of Unicode or do they expect international travelers to not use anything but ASCII to supply their (usually non-english) names, which carry the high probability with them to not use ASCII characters only? For me it’s just the ü in my surname. I wonder what people with funkier names do, when they have to diverge from the correct name-spelling to something this ESTA-system accepts. Once they succeed there, I bet they have a hard time trying to convince the staff at customs, that they are really themselves, because the spelling of their name on the passport doesn’t even remotely match the spelling in the visa-waiver-form.

I once almost wasn’t let aboard a plane in Germany, because the travel-agency booked my flight on “Mueller”, but my passport says “Müller”. Is all that the legacy-fault of Cobol?

GNOME Miro Video Page

Will over at the Miro project, that super cool Open Source media player, sent me a link today of their Miro Community site. It is a video aggregation site that allows for communities to collect all of their video in one place even if they were originally posted elsewhere.  To that effect he has also set up a GNOME Miro Community site.  I know we have a bunch of great videos talking about GNOME and showing off its features.  This is a shout out to people who have great GNOME related video content to go ahead and start aggregating those videos so others can find them.  Let’s start building a community of open video showcasing our favorite open desktop!!!

GNOME's Miro Community Site

GNOME's Miro Community Site

[read this post in: ar de es fr it ja ko pt ru zh-CN ]

The trough of disillusionment for Ubuntu?

Reading this blog entry on Linux Magazine, the thought occurred to me that Ubuntu is making its way nicely along the path that new projects have travelled for many years. It is around the same place that Red Hat used to be around the time of Red Hat 7.

The Hype Cycle describes the way that new technologies and projects are perceived over time, if they do a good job of handling themselves, going from a technology trigger, inflated expectations, disillusionment, enlightenment, before arriving at “the plateau of productivity” – a state where there is no more hype and the new technology is simply a normal part of our lives.

Ubuntu arrived with a bang, and certainly has had inflated expectations over the past couple of years. And yet due to quality issues, it has recently been failing to meet those expectations, especially around upgrading from previous versions (by no means an easy problem to get right, don’t get me wrong).

But then, you don’t get upset about things you don’t care about.

This disillusionment, if it doesn’t turn into resignation, could be a sign of health in the Ubuntu project and community – on condition that the lessons of quality are learned and put into practice. Certainly this is a drum that Mark Shuttleworth has been beating for some time now – but unfortunately it’s not as easy as asking upstream to get their act together in a Tom Sawyer community model. It seems like an ideal opportunity for collaboration between distributions and upstream projects, as well as being the core activity of each individual distribution. Supplying quality is, after all, the market opportunity which Linux distributions base their business models on.

In any case, I for one am looking forward to the deflated expectations being met and exceeded in future releases, allowing us Ubuntu users to make it to the Plateau of Productivity as soon as possible.

Attracted to FLT

I have been a little stuck for some weeks : a new year started (no, that post hasn’t been stuck since january — scholar year start in september) and I have students to tend to. As I have the habit to say : good students bring work because you have to push them high, and bad students bring work because you have to push them from low! Either way, it has been keeping me pretty busy.

Still, I found the time to read some more maths, but got lost on something quite unrelated to my main objective : I just read about number theory and the ideas behind the proof of Fermat’s Last Theorem (Taylor and Wiles’ theorem now). That was supposed to be my second target! Oh, well, I’ll just try to hit my first target now (Deligne’s proof of the Weil conjectures). And then go back to FLT for a new and deeper reading.

I only played a little with ekiga’s code — mostly removing dead code. Not much : low motivation.

Can’t Stop Smiling

From Google Israel:

cookie_monster-hp

GNOME Color Manager and initial scanner support

Late last night, after a few hours of intense refactoring (to allow udev based devices, as well as xrandr based devices) we got the initial scanner support working:

Scanner support

Scanner support

This lets us support printers and digital cameras pretty easily too. At the moment we just need to figure out how to make gnome-scan make a scan for us and save it in tiff format, and then we can get the calibration working for all types of scanners. Of course, you need a precision printed reference image, but you can get these pretty cheaply from Wolf Faust.

Then, we need to work with the gnome-scan guys to agree an interface so that gnome-scan knows what profile to use for each device. Either a library or DBus interface (with calls in either direction) are being considered, although I think the session-activated dbus interface is probably going to win. There’s still quite a bit of integration work to make CUPS ICC profile aware, but that’s on the list after scanners are working. After all, you need a calibrated scanner to calibrate the printer. Help is always welcome, so please checkout the code and help find bugs.

Taking on a new challenge

During my graduation a new opportunity popped up on my path. After long contemplation I decided to take it on. Since October 1st, I am a PhD student in the Computer Systems group at LIACS, Leiden University. Under Professor Wijshoff I will be working on databases and compiler optimizations. For most of our implementation work we are using LLVM, which is incredibly nice to work with and its future is looking very promising. Exciting times.

I also remain associated with Lanedo, providing expert help and advice.

WotD: Trollumnist

It used to be that to get your own column in a broadsheet, you needed to add some value. Expertise, skill in interpreting social and political developments, or a distinguished history as a journalist were rewarded with a bit more space in the paper. There, you could spin out a longer-form piece analysing burning issues in a little more depth, or you could even act as an advocate for things that weren’t on the public’s radar.

As the newspaper business model heads south, though, we’ve been subjected to the rise of what we might christen the “trollumnist” — the writer who simply “trolls” in a multichannel, multimedia environment.

 — “If I Make You Angry Enough, Maybe You’ll Keep Reading” by Jason Wilson in New Matilda

Of course, this doesn’t just apply to the opinion pages of flailing newspaper websites or soap opera US cable television opinion shows… consider the newer, online, journalism-lite outfits which employ trollumnists to crank up page views and ad impressions.

It’s a terrifying media strategy: Find a niche — perhaps even an entire community, with all the politics and tragedy, highs and lows that entails — choose some regular targets for fæces-flinging, troll the living fuck out of them, and reap the blood money reward.

I’m sure my friends in various tech and politics communities will find this word instantly useful. A wonderful addition to the vocabulary for those fighting the good fight against fear, uncertainty, doubt, lies and bile.

Doh, can’t sleep…

… so… I wrote my first particle-system ever. It does not look photorealistic - by far not *g* - but implementing something like that is great fun! You see a cluster of 5000 particles in the screencasts below. Right now I’ve two emitters (a “singularity” one and a rectangle one) with a gravity force-field being applied to the particles. WASD/Quake-like camera-navigation I implemented too, so one can “walk around”. From here numerous things could be added: wind, general turbulence, attraction-/repulsion-forces between particles, collision-detection with obstacles… the visualization could be improved with motion-blur, lighting, shadows etc. Rendering- and simulation-loop are coupled and run at 60 Hz. Screencasts were recorded with 30 Hz.


<video controls="controls" src="http://macslow.net/clips/gl-particles-1.ogv" width="544">small_gl-particles-1_ogv.png
(click to play back, ogv/theora, ~85 MBytes, right click to save to disk)</video>



<video controls="controls" src="http://macslow.net/clips/gl-particles-2.ogv" width="544">small_gl-particles-2_ogv.png
(click to play back, ogv/theora, ~60 MBytes, right click to save to disk)</video>

Pig Farm Tour Oaxaca 09

April IM logs:

November 04, 2009

Updated WordPress theme

The WordPress theme I use was abandonned by the author, and recently I finished updating the features I meant to. If you are looking for something to do, please check if anything is broken. Thanks!

Introducing Debugging for MonoTouch

Today we released MonoTouch 1.2.

Perhaps the most important new feature in MonoTouch 1.2 is that it now has a debugger that supports debugging on both the iPhone simulator and on the iPhone/iPod Touch.

The debugger is integrated directly into MonoDevelop/OSX. All you have to do is select one of the debugging configurations (either Debug|iPhone or Debug|iPhoneSimulator):

and run your application:

To set breakpoints, you use the usual MonoDevelop UI, just click on the left-hand side of the editor, or use Command-/:

The debugger offers the usual watch windows, and also allows you to navigate object state by hovering over the value in the IDE:

The Technology

Although this was developed for the iPhone, I should probably have said that this is Mono's new soft debugger engine.

The iPhone is once again a challenging platform to get debugging working on. Since Apple has not published the information necessary to implement something like GDB or Mono's own MDB and we are not going to reverse engineer the protocol, instead we created a new way of debugging Mono applications.

The Mono Debugger for the iPhone platform uses a soft-debugger. Unlike traditional debuggers that act like a fully controlling entity over the Mono process, the soft-debugger is actually a debugger that is built into the Mono process itself. MonoDevelop communicates with this debugger over a compact protocol, similar to what has been done in the past with Java debuggers:

We are providing a new library, the Mono.Debugger.Soft.dll that encapsulates the protocol and offers an API that developers can use to debug a remote Mono process.

On systems where we have access to breakpoints the soft debugging engine will use the standard operating system facilities to single step and set breakpoints.

But on systems like the iPhone and some video game consoles where there is no way to modify memory without special privileges we had to resort to a different technique. The Mono static compiler inserts special code at every sequence point that checks for single stepping or breakpoints. The code generated during these debug builds is larger, but it allows us to support the iPhone without having to resort to undocumented APIs in any form or shape.

MonoDevelop and the iPhone

When the user selects an application for debugging, MonoDevelop configures the application to contact MonoDevelop on startup and link the debugger to it, starts listening on a couple of ports (one for the debugging protocol, and one for redirecting standard output/standard error) and waits for the application on either the iPhone simulator or the iPhone to contact it.

Upon contact, the debugger handshake takes place and operation continues. For the simulator, this takes place with a local socket; for the device, this happens over a TCP/IP socket over WiFi.

One of the nice side effects of this approach to debugging is that it is possible to distribute binaries to testers (using the Ad-Hoc distribution model) and debug problems on a user's iPhone over the network.

To support this scenario, when you build applications with the "Debug|iPhone" configuration, MonoDevelop will modify your application's Settings file on the iPhone.

This allows your beta-testers to enable debugging and connect to your debugger for inspection. This is what the settings looks like:

The first port is the port where MonoDevelop will be listening to. The second port is the port where the standard output and standard error will be redirected to.

All of the Console.Output and Console.Error output will be sent to this port when debugging is enabled on the application.

Pros and Cons

There are pros and cons to the soft debugger approach.

Soft debuggers are unable to do low-level debugging or debug Mono itself (mixed-mode debugging) and they are unable to stop applications at will, all it can do is request politely that the application stops, and when the Mono runtime decides that it is a good time to stop, it will stop.

On the pro side, the soft debugger is easier to port and is more robust as it eliminates some dead-lock situations. These can happen when the runtime has been forcefully stopped by the debugger, and then the debugger invokes methods on the target. These methods in turn might require an internal lock that is currently held by a different thread.

The Protocol

The protocol used between the debugging agent running inside the Mono process and a debugger is implemented in the debugger-agent.c file.

Availability

MonoTouch customers will be offered the update the next time they start MonoDevelop or if they manually "Check for Updates" on the MonoDevelop IDE.

Users of MonoTouch for the iPhone simulator can get the it from the trial page.

The source code for the soft-debugger is available on SVN. The API to communicate with the Mono runtime is available in the Mono.Debugger.Soft assembly and the debugger itself has already been integrated into the Mono 2.6 branch and Mono trunk on SVN.

This should prove useful to other users of Mono that might benefit from a soft debugger like Unity3D or Second Life.

Screenshots

Brent has a nice gallery of screenshots of the debugger in action on his MonoTouch 1.2 with debugging released! post.

Wed 2009/Nov/04

  • Zeitgeist tries, among other things, to compute this for your data.

Litl’s little netbook

I popped down to Boston today to see Litl’s internet computer and catch up with friends who now work for Litl. Unfortunately I did not see Havoc there (probably release partying too much or more likely coding) but a number of GNOME folk and others who I worked with at OLPC did show up. (I’m not going to name names because I will inevitably leave someone out).

In any case the Litl webbook looks promising. Finally someone has looked at what a target group of consumers wanted and designed a simplified interface around services instead of just dropping a Linux distribution in and saying here you go. Did they hit the mark, only time can tell but for Linux on devices to win in this area we need this sort of targeted design instead of chasing the windows generic computing market. It is how Apple won with the iPod and iPhone. Anyone who reads my blog should know my stance on this issue so I won’t beat it to death.

Some key innovative features here are

  • Browser centric design
  • Easel mode in which the UI accommodates the device’s configuration
  • Instant sharing and mobile configs – if one breaks you can log in from another and continue whatever you were doing
  • Almost zero maintenance and setup (you still need to tell it who your friends are)

Sure we have some of these features being developed in GNOME (it doesn’t come as a surprise since a lot of the UI is based on work done in GNOME and other GNOME related projects like the OLPC) but this is the first complete commercial offering which brings those features into one consumer friendly device with a laptop form factor.

As someone who is proud of GNOME’s accomplishments I wish Litl the best of luck and thank them for the code they have contributed back to the community.  As a Foundation member I hope to see even more collaboration between them and the foundation in the future.  Keep up the awesome work!!!

[read this post in: ar de es fr it ja ko pt ru zh-CN ]

litl webbook: some technical comments

litl

So, you’ve probably seen the news: litl webbook released! It’s the result of heavy work of an awesome team! Our website has a lot of information about the product from a user perspective, so I thought it would be nice to bring an overview of the more technical aspects of the litl OS that I find specially interesting. Scott has written some technical notes about our OS too.

Javascript

Almost all UI code is written in javascript using our GObject introspection-based binding called gjs (using SpiderMonkey engine). It was a quite interesting learning experience to write a large amount of UI code in javascript. By the time we started, I think no one in the team had any real experience with javascript. So, it took some time until we all agreed on the javascript programming idioms (the flexibility of the language may “cause” a lot of inconsistencies…) and on how to better/correctly take advantage of its features. Most of what we agreed in terms of coding style is in the gjs style guide. Doing stuff in javascript (i.e. not doing the whole UI in C or any other insanity like this) allowed us to prototype, refactor, rewrite things much faster. And that was crucial for us because the ideas around the UI design changed a lot during the first months of development and we ended up rewriting large chunks of code several times on the way. Doing relatively large scale stuff in javascript definitely requires very clear and strong guidelines in order to keep the code base sane – maybe a bit more than usual.

GNOME & FLOSS stuff

The OS is heavily based on well-known open source projects. Some facts: it’s based on Ubuntu (with great support by Canonical) and the UI is all written with GNOME platform and co. As I said, almost all code is written in javascript using gjs. Most of the UI is Clutter-based. We have our own specialized window and compositing manager that was implemented with our use cases in mind. We’re definitely one of the projects with the largest Clutter-dependent code base. We use GTK+ in just a few places where we needed more complex widgets (i.e. text entry). The web browser is Gecko-based and it’s pretty much implemented as a XUL app running in a separate process than the OS chrome. We use Evince and Totem (as browser plugins), GStreamer, Network Manager, and others. One interesting fact about our development process is that, in the ~2 years of heavy hacking, we had to adapt to major changes in the upstream projects we base our OS on. So, since we started, we had to port our UI to Clutter 0.6, then 0.8, and finally 1.0; had to port gjs to use the then-new GObject introspection scanner; migrated from Network Manager 0.6 to 0.7; and maybe some other major changes that I can’t remember now. We contributed to those projects as much as possible during the process.

No storage, just caching

You probably noticed that the device has “only” 2GB of storage. That won’t sound strange if you see this from a “webbook perspective”. One of the ideas behind the product concept is that the device serves as a much improved window to the web. In other words, the device provides a simple and beautiful way to access web content – among other things. So, we are pretty much only using storage for local caching. We don’t really store any real permanent data on the device. And that brings some interesting challenges on how we implemented the OS. So we had to implement some smart ways to cache as much content as possible and expire the right bits at the right time so that the general experience is nice and smooth. Simple example: the OS provides a way to access all your Flickr photos and videos (which can be a lot of photos and videos btw) but we never permanently store anything on disk. We cache things like rss feeds, profile pictures of your litl contacts, a lot of your Flickr photos and videos, website favicons, installed channels, etc. Each type of content may use a different way of expiring items and all that needs to fit in the relatively small storage space we have. You can guess how fun it was to hack on this. Hacking on syncing was even more fun though :-)

Syncing

Another interesting aspect of the device is that each device is connected to a litl account on our servers and all your stuff (browser cards, channels, settings, contacts, etc) is always synced in our servers. That means if you lose your device and get new one, you would just need to connect your device to same account and all your stuff would be nicely restored. Additionally, multiple devices can be associated to same account. In that case, they will automatically share channels and other things. If you add channel card in one, it will automatically appear on the other. We spent quite some time working on our syncing infrastructure (client and server), dealing some relatively complex problems – especially when dealing with making UI immediately react to sync-related changes in the local and remote datastores. The server side syncing stuff (and other server-side features) is implemented with Google App Engine, some bits in Amazon S3 and Django.

Seamless system updates

The OS comes with a smart update system. No package management involved. No user action needed to get system updates. In practice, we download and install a new OS image and fetch your data again from litl servers while the system is idle. The update system falls back to current image in case something goes wrong with new OS images. The update system allows us to keep updating, adding features, fixing bugs, and then push those updates to our users in a burden-free way.

We had a lot of fun hacking on the litl webbook. It’s always great to work in a team full of very smart people. Definitely learnt a lot in the process. We still have a lot of work to do of course but I already feel very proud of what we’ve accomplished so far. Exciting times!

Update: Saying that the UI is 99,99% Clutter-based is not very accurate. It’s a bit less than that :-)

How companies leave the community out of the conversation

This morning I tried to attend a webinar, The Open Source Community vs. Patent Trolls - Preserving Developer Freedom. I knew the webinar was hosting on software that wouldn't work on Linux, GoToMeeting. (Actually, who knows if it will work on Linux. The web page checks your operating system and if you are on Linux, it won't even try.) I thought I'd just dialin. No such luck, you have to dialin to the webinar (on a Windows or Mac) in order to get the code for the phone.

That means they were not targeting this webinar towards the free software community nor the developers whose freedom they are talking about. They aren't even allowing them to participate.

What are they trying to accomplish with the webinar?

I have to assume they are targeting companies whose business they want. The title of trolls and protecting developers is catchy and spreads a bit of fear which hopefully they'll address (and dispel) in the webinar. The speakers actually probably have a genuine interest in reaching out to as many people as possible.

The primary purpose of the webinar must be to educate non free software users about an existing issue.

I had (erroneously) hoped that it would be a session to start a conversation about how we could all work to preserve developer freedom and fight patent trolls. But without the community, that conversation wouldn't be complete. And the community, the developers whose freedom they are interested in preserving, are overwhelming using free operating systems like Linux, not Windows or Mac, so they were not only not invited, they were not allowed to participate. (I gave them my name and email address when I signed up, so they have my contact info, but they still required that I dial in via the web page to get the phone number.)

As a Linux user and community member, I guess I was not the target market for this webinar. And that disappoints me as I think creating connections between companies concerned about patent trolls and community members working on projects that may be affected by patent trolls would be a good start to creating a community of companies and individuals interested in solving the problem of patent trolls.

This isn't an isolated incident

While I'm using a webinar hosted on GoToMeeting as an example here, this is not the only time this has happened to me.

If companies want to work with communities, they have to try to work with the community. Most free and open source software developers don't have Windows or Mac systems. Some developers don't have one for philosophical reasons. Many don't have them because they don't need them (they are using a free software desktop!) and they don't want to spend the time and money associated with maintaining one. It is much, much easier for a company to use a more Linux friendly webinar tool (or just hand out the phone code) than it is for a free software developer to go out and buy a copy of Windows or a Mac to attend a meeting.

If you work at a large company that uses WebEx or GoToMeeting and you are holding a meeting with free software developers, why not consider using a different tool just for that meeting? You can use a simple phone conference, share slides ahead of time, you can take simultaneous notes with Gobby (a free tool that works on Windows, Linux and Mac!) ... But don't send the slides out ahead of time and still hold the meeting on WebEx or GoToMeeting - that makes some of the people feel like they are left out.

The focus (with developer conversations at least) should be on the conversation not on the slides or the lead generation.

No more stuttering

Today, as some of you guessed from my teaser yesterday, I finished implementing on-disk buffering in Totem, using playbin2's new features.

Using Totem in master with this gstreamer patch, Totem will start playing back videos as soon as enough buffering has been done on disk.

Note that this will only work for QuickTime and FLV streams, but that means that the YouTube Totem plugin and streaming trailers from Apple's website just got better, and should allow us to implement stream saving very soon.

litl by litl

Finally litl's product is out: it's a webbook. The easel mode looks quite interesting, and reading their website, it looks like the kind of gadget/netbook/appliance I'd be more than happy to have around (in a theoretical family setting, not /me as lone hacker).

But at the starting price of $700, I'm not sure who they are targeting. Sounds like Apple customers... And that does not include the remote or the HDMI cable. And the twinpack offers exactly $0 dollars discount over buying two units separately. I found these very cheap of them. Otherwise it all looks very promising.

While at gadgets, anyone knows whether n900 will have a developer program?

Mandriva 2010 is out, and me too

So, Mandriva Linux 2010 is now out, and they finished it without me as I broke my two arms two weeks ago. It was a stupid fall, no need to give details :)

It was not too serious (in each arm, the head of a bone is broken, and the bone did not move), so I can now use again my arms for most things including the laptop. I can not unfold it totally yet, or distort it too much but I can now survive alone :)

Thanks to everyone who helped me!

So, Mandriva 2010 is out and was finished without me, but I managed to improve a bit the partionning screen the day before this accident, so it looks better than in my previous post:

Mandriva partitioning

Further improvments will have to wait for 2010 Spring...

So far Mandriva 2010 seems to have quite positive reviews :)

HarfBuzz HackFest

Here is a quick update re HarfBuzz:

During May and August I finished rewriting the OpenType Layout engine to use mmap()ed font files. This is in Pango 1.26.x already. Pango and fontconfig also received a lot more optimization love. That deserves a long and separate blogpost. The net result is that the text stack's memory usage is considerably lower now. All this goodness will be in the upcoming Fedora 12.

In October, I attended the 33rd Internationalization and Unicode Conference in San Jose to present the free software text stack (useless slides) as well as present and promote HarfBuzz (useless slides). That was a very fruitful event and I received lots of interest from many major industry players. With the liberal license that we are releasing HarfBuzz under, we expect broad adoption, which is exactly what we are looking for.

This week, Jonathan Kew and myself are having a small HarfBuzz HackFest here in Mozilla's Toronto office. Here's what we have got done so far:
  • Jonathan has a version of Firefox using harfbuzz-ng (the codename for the rewrite) that has advanced layout features controlable through CSS. Very very cool stuff. He updated it to the latest harfbuzz-ng code.
  • I ripped harfbuzz-ng out of the Pango tree and into a standalone module. Finally! Took a couple hours of git surgery plus ten minutes to put together an autotools build system. Git clone URL is this. The harfbuzz-ng-external branch in Pango uses that as an external module. The plan is to reach a stable 1.0 release of harfbuzz-ng before next stable GNOME and most probably, Pango will require harfbuzz unconditionally (that is, on all platforms). Note that harfbuzz is NOT tied to FreeType, so you can use it with any rasterizer you have around.
  • We fixed all portability issues Jonathan had faced when compiling harfbuzz-ng with MSVC.
  • Jonathan is working on the shaper side, while I'm working on the API and pulling it all together.
  • I added glue code for using harfbuzz-ng with glib, ICU, and FreeType.
  • Lots of API and design review.
At the rate this is developing, by the end of the week we should have basic shaper (Latin, Cyrillic, CJK, ...) and Arabic+Syriac working perfectly and tackling Indic family. We're closer to 1.0 than you may think!

GNOME in Moblin: People panel

Previously i’d talked about how we use GNOME technologies in the Moblin Myzone. Now i’m going to talk about another component that i’m responsible for, the People Panel.

An important aspect of the Moblin user experience is about communicating with others and this panel provides quick access to do this. The core of the content is provided by an abstraction, simplification and aggregation library called Anerley. This provides a “feed” of “items” (an addressbook of people) that aggregates across the system addressbook, powered by EDS, and your IM roster, powered by Telepathy. You have small set of actions you can do on these people such as start an IM conversation / email / edit them with Contacts. The core of our IM experience is supplied by the awesome Empathy. We’ve been working with the upstream maintainers to accomodate some of the needs of Moblin into the upstream source. This included the improvements to the accounts dialog and wizard that landed for GNOME 2.28.

One of the biggest problems with the IM experience in Moblin 2.0 was that it was easy to miss when somebody was talking to you. If you were looking away when the notification popped up, whoops, it’s gone. With our switch to Mission Control 5 I was able to integrate a Telepathy Observer into Anerley and the People Panel. An Observer will be informed of channels that are requested on the system. This allows us to show ongoing conversations in the panel and by exploiting channel requests and window presentation allow the user to switch between ongoing conversations. This wouldn’t have been possible without the assistance of the nice folks in #telepathy and at Collabora: Sjoerd, Will, Jonny and countless others.

Planet can be annoying.


WordPress posted a draft a week early by accident. Planet will not forget unless I keep that post but erase the content.

So here I am replacing that post with random content to get the posted-too-early post off Planet. :)

Posted in Unpackaged Font of the Week

Wed 2009/Nov/04

Goodbye, my friend

Goodbye, Vinay

I lost a good friend Sunday.

Vinay Venkatesh, also known as djgraphite, was a friend and co-worker at VMware. We had known each other for many years, since before he joined VMware, from the #adium and #growl channels on irc.freenode.net back when I worked on libgaim and he worked on Growl. Vinay was always helpful , friendly, passionate, and full of creative ideas. This extended to his work on VMware Fusion

A few years ago, Vinay interviewed for a job at VMware in my team. We hired him for the relatively new Fusion product for the Mac. This was my first in-person experience with him, and we quickly became friends. I remember spending hours in his office talking about all sorts of things. New games coming out that we wanted to play, projects we were working on, new gadgets, ideas for Review Board, architectural changes we wanted to make to our products at work, what we did on the weekends… Anything and everything, really.

While we developed separate projects at work, we often ran ideas past each other. Vinay shared my desire to improve the common and per-platform code bases we each worked on, and while we didn’t always find the time to implement each idea, much of my discussions with him led to improvements in all of our desktop products: Workstation, Player and Fusion. Over the past month, I’ve spent considerable time on a project that was largely his brain-child. The details aren’t important, but suffice to say that it’s an important part of the future versions of all our desktop products. Every step of the way, I consulted with him, making sure I was on the right track, asking for advice in the design, and getting code reviews. Continuing on that project without him by my side is something I’m certainly not looking forward to.

His work was just a small part of his life, though. Most important to him was his friends and his family. Making friends with Vinay was easy. He was inviting, outgoing, funny, and loved meeting new people. He had a lot of friends at work and outside of work. I thought I knew a good number of them, but I realized since just how few I knew. We were important to him and he let us know that.

It was also no secret to anybody who knew him just how close he was to his family. He spoke of them often, with praise and love. He would tell us about his sister, how happy he was that she was getting married, how excited he was that she was moving closer to him. He would talk about his parents and tell us how every time he visited them they would ask when he was getting married. We would joke that one day he’d return after a trip with a bride around his arm.

When I think of Vinay, and this is how I always pictured him, I think of him laughing. He was generally a very happy, upbeat guy. Liked to joke around, share stories, and spend time with friends. One of the things he really helped drive at VMware within our team was our Thursday Movie Night. Every Thursday (more or less) we go to dinner and then come back to the office and watch a movie. Vinay loved Movie Nights with us and often provided the movies and dinner recommendations. Outside of work he’d host parties at the house he shared with many of our friends. His last party, which I regretfully didn’t attend due to conflicting plans, was a Halloween party on Friday the 30th. I hear it was a lot of fun, and I’m glad he was able to enjoy himself one last time.

On Sunday, around 1PM PST, I got the terrible news. Vinay had been in a motorcycle accident, and died on the operating table.

I got the news on Twitter, shortly after dropping off a mutual friend at the train station. I didn’t believe it at first. My mind said “No, this is a joke or just a misunderstanding,” but part of me knew the truth. I quickly dialed people, trying to find out what happened. I reached my friend Scott at the hospital, who was with Vinay when it happened. He told me the news that broke me.

I wanted to blame someone, but this was one of those freak accidents. He was with a group of people, riding his motorcycle, when he hit a groove in the road that knocked him off his bike. There were no external injuries, but they couldn’t stop the internal bleeding. He died shortly after.

News spread vast, over both Twitter and Facebook. A group of us organized at the house he shared with others, trying to comfort each other and come to terms with what had happened. None of us wanted to believe it, but we couldn’t deny it had happened. It was a night of hell. The next day wasn’t any better. Very few of us even attempted to go into work, and those that did gave up being productive quickly. Throughout the day, information spread, again over Twitter and Facebook, about the funeral plans, which were set for Tuesday the 3rd.

The funeral was hard, but it was a nice ceremony, as nice as these things go anyway. It was evident just how many people cared for Vinay and how far his influence had spread. The room we were in was not small, but it was so packed that people were overflowing into a second room. The turnout was huge. After we paid our final respects, many of us went back to the house, comforted each other, and shared stories.

It was a tragedy, and certainly too soon. I do find some comfort in knowing that Vinay went out doing what he loved to do. It also brought people together. I met some great people from one of his many groups of friends tonight, as well as finally meeting his family. I wish these meetings would have happened in better circumstances, but I’m certain Vinay would be happy to know that in some way, he brought his friends closer.

Rest in peace, my friend. We love you, and we’ll never forget you.

Ogg? Vorbis!? What?

I looked at the internet radio stations in Finland, and discovered that MetroFM does have one. The fact that their stream uses ogg/vorbis format doesnt stop me from enjoying it in the N900 though :)

  1. Install ogg support for N900 here.
  2. Enjoy MetroFM ;)

Sweet :)

edit: too bad their terms only allow streaming to ip addresses in finland.

Corner of Sydney Rd and Albion St, Brunswick Closed

Not sure what's happened, but the intersection of Sydney Rd and Albion St in Brunswick is currently closed off with police barricades. Police and Fire in attendance. As well as two news crews and about a zillion bystanders. It looks like a building has collapsed, it's taken out the #19 southbound tramstop.

It was the medical centre, which the media is reporting as being unused, but I'm sure it was still being used at least a couple of weeks ago.

sydney rd with collapsed building

Flickr Set

Update: Turns out the medical centre was open. Thankfully people realised the building was at risk and left before the collapsed, so no one was injured. Article in The Age.

Book Review: Microtrends, the small forces behind tomorrow's big changes

It was difficult to read <iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=bookreview01-20&amp;o=1&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;md=10FE9736YVPPT7A0FBG2&amp;asins=0446699764" style="width: 120px; height: 240px; float: right; margin-left: 10px;"></iframe>Microtrends: The Small Forces Behind Tomorrow's Big Changes. Mark Penn and E. Kinney Zalesne tell us about 75 trends they see in the United States. Each one is 3-6 pages long and not related to the others and that discontinuity made it hard to read. My main thought while reading it was "this would make a great blog" and it turns out there is a blog and a Wall Street Journal column.

I did find out some interesting things (that should probably be read with a certain amount of scepticism):

  • Terrorists are often middle class, well educated people.
  • Churches led by women are losing members on average compared to churches led by men.
  • Working for a nonprofit is cool. (I knew that. :)
  • There are some groups I've never heard of that are supposedly growing in numbers, like people that don't eat or don't use technology or hate the sun.
  • Geeks are social. Savvy tech users are very social. (But I knew this already - if in doubt just attend a conference like GUADEC or OSCON.)
  • Europe will have a much higher percentage of only kids in the future. This could be good as the oldest children in the family tend to do well. All astronauts are either oldest child or oldest boy in the family.
Microtrends was an interesting read but it was more a series of articles than a book. I was hoping to learn much more about how they identify microtrends but instead the book was just about the trends they'd identified.

November 03, 2009

Zeitgeist Status Update

I just posted a long status update on the Zeitgeist project to Gnome’s desktop-devel mailing list. I bring it here in bloggified form to help spread the word past the desktop-devel crowd.

With the 2.30 module deadline passed it seems appropriate that we give a status report from the Zeitgeist team.

Since there have been a good deal of confusion about what Zeitgeist is, and isn’t, about I will try clear this up in this mail as well. I will try to stay low on the buzz word factor and leave some of the more exotic use cases out to avoid too much speculation.

Zeitgeist in 1 sentence

Zeitgeist is an event logging framework used to keep a log of user activity in a structured way.

What new services do we provide for UIs and applications

Zeitgeist provides a DBus API to query and update the activity log. Clients can query on time ranges, the acting applications, mimetypes, and Nepomuk classifications of the subjects and events. Sorting can be done on various criteria such as usage frequency and recent usage.

Concrete examples could be “Get me most used files of mimetypes x,y or z between the months January till March”

One can also query for documents that are used in context with others. As in “Which documents/websites are used with http://youtube.com within the last week”.

It is also possible for the applications to get notified when the log is updated. This is for instance used by the Parental Control application as well as the GNOME Activity Journal.

What Problems can we solve

The straight forward use case is as a GtkRecentManager on drugs. Zeitgeist removes the need for each application to parse a big XML file to retrieve recently used documents. It also removes the need to ever truncate your usage history, our database format is compact and can easily contain years of history. My estimation is that 1M log entries will take up about 80mb (give or take 20mb).

Open up for a range of query capabilities that GtkRecentManager doesn’t provide. Instead of simply storing the most recent usage event on a resource we store all usage events. This way we can not only answer when the most recent use case was, but also account for the entire usage history.

One use case that is already in the works is having the most used resources within the last 3 weeks for an app in the context menu in a window list. This is for example done in Docky.

Looking past just logging resource usage we will also start monitoring window and document focus times. This opens up to a whole new world of contextual relevancy that I wont elaborate on here. I am trying to stick to the more down to earth aspects of Zeitgeist.

Which processes/daemons do we run

Zeitgeist itself is a single DBus daemon. Where the picture gets a little more fuzzy is how we collect events. The long term goal is for apps to submit events, maybe hooking directly into GtkRecentManager, or in any case provide a very convenient way for apps to do this. Apps like Pidgin or Empathy would probably need some plugin for logging usage statistics of your contacts.

Right now we resort to less elegant ways of collecting events, like running a separate daemon harvesting Firefox’s history, GtkRecentlyUsed’s and other applications’ history (this daemon is also known as the datahub). The datahub is already on its way to becoming redundant now that a Firefox extension is in the works (and one for Epiphany already exist). It is our intent that the datahub should eventually go away as application support becomes widespread, but it
may eventually still prove useful for usage together with online service.

How resource hungry are we

Normal memory usage is around 5-10mb for the core Zeitgeist daemon. The datahub process (and I repeat; we want to get rid of this) is about 12mb.

What dependencies

Right now the daemon depends on SQLite, Python 2.5, python-gobject, python-xdg, and python-dbus. For the datahub we additionally need python-gconf and python-gtk2, but the datahub is optional.

Future plans

We have spend a lot of time planning and designing lately. When we have a stable reference implementation of our design in Python we plan to use that as a template for a C implementation. To be clear – the C version will be log-format and API compatible with the Python version.

We plan to make good use of the upcoming Zeitgeist hackfest and should have a 0.3 development release ready shortly after. If we are happy about the 0.3 series we will rename it to 0.9 and go for a 1.0.

Regarding Gnome 3.0 I think we are in a situation much like Owen Taylor recently outlined for Gnome Shell on the release-team mailing list. If we are desperate for Zeitgeist to be included in a Gnome 3.0 this March I believe it would be doable. It will require that we really bust our backs and cut some corners, but it’s doable. Personally (not speaking for the Zeitgeist team here) I am not sure it would be a very good idea for the same reasons Owen mention.

Relation to Tracker and Other Semantic Technologies

The very short version of this is that Tracker and Zeitgeist does not depend on each other in any way. The catch however is that either one becomes a whole lot more powerful when working together. To take an example consider tagging. Zeitgeist is just a log so we don’t manage your tags, we are however fully equipped to understand events concerning your tags. So you manage the tags via Tracker and track their usage in Zeitgeist. The combined power enables one to reason about what tags relate to resources in a temporal manner, even with resources that are not tagged.

In the Zeitgeist world we call an application like Tracker a Repository. Nepomuk or Desktop-CouchDB might work as other Repositories. If there is some confusion in this area it is understandable, since we do have some Repository-like features in our 0.2 series. This is however removed from the 0.3 series. It is still undecided if we want to define a minimal Repostiory DBus API for Zeitgeist and then ship a reference impl. of this API (which would run in a separate process). Any full fledged Repository would be able own the Repository service on the bus and Zeitgeist would not run its own. But again let me stress that a Repository is not needed for the Zeitgeist Log daemon to be useful.

With the 2.30 module deadline passed it seems appropriate that we give
a status report from the Zeitgeist team.

Since there have been a good deal of confusion about what Zeitgeist
is, and isn’t, about I will try clear this up in this mail as well. I
will try to stay low on the buzz word factor and leave some of the
more exotic use cases out to avoid too much speculation.

Zeitgeist in 1 sentence

Zeitgeist is an event logging framework used to keep a log of user
activity in a structured way.

What new services do we provide for UIs and applications

Zeitgeist provides a DBus API to query and update the activity log.
Clients can query on time ranges, the acting applications, mimetypes,
and Nepomuk classifications of the subjects and events. Sorting can be
done on various criteria such as usage frequency and recent usage.

Concrete examples could be “Get me most used files of mimetypes x,y or
z between the months January till March”

One can also query for documents that are used in context with others.
As in “Which documents/websites are used with http://youtube.com/ within the last week”.

It is also possible for the applications to get notified when the log
is updated. This is for instance used by the Parental Control
application as well as the GNOME Activity Journal.

What Problems can we solve

The straight forward use case is as a GtkRecentManager on drugs.
Zeitgeist removes the need for each application to parse a big XML
file to retrieve recently used documents. It also removes the need to
ever truncate your usage history, our database format is compact and
can easily contain years of history. My estimation is that 1M log
entries will take up about 80mb (give or take 20mb).

Open up for a range of query capabilities that GtkRecentManager
doesn’t provide. Instead of simply storing the most recent usage event
on a resource we store all usage events. This way we can not only
answer when the most recent use case was, but also account for the
entire usage history.

One use case that is already in the works is having the most used
resources within the last 3 weeks for an app in the context menu in a
window list. This is for example done in Docky.

Looking past just logging resource usage we will also start monitoring
window and document focus times. This opens up to a whole new world of
contextual relevancy that I wont elaborate on here. I am trying to
stick to the more down to earth aspects of Zeitgeist.

Which processes/daemons do we run

Zeitgeist itself is a single DBus daemon. Where the picture gets a
little more fuzzy is how we collect events. The long term goal is for
apps to submit events, maybe hooking directly into GtkRecentManager,
or in any case provide a very convenient way for apps to do this. Apps
like Pidgin or Empathy would probably need some plugin for logging
usage statistics of your contacts.

Right now we resort to less elegant ways of collecting events, like
running a separate daemon harvesting Firefox’s history,
GtkRecentlyUsed’s and other applications’ history (this daemon is also
known as the datahub). The datahub is already on its way to becoming
redundant now that a Firefox extension is in the works (and one for
Epiphany already exist). It is our intent that the datahub should
eventually go away as application support becomes widespread, but it
may eventually still prove useful for usage together with online
service.

How resource hungry are we

Normal memory usage is around 5-10mb for the core Zeitgeist daemon.
The datahub process (and I repeat; we want to get rid of this) is
about 12mb.

What dependencies

Right now the daemon depends on SQLite, Python 2.5, python-gobject,
python-xdg, and python-dbus. For the datahub we additionally need
python-gconf and python-gtk2, but the datahub is optional.

Future plans

We have spend a lot of time planning and designing lately. When we
have a stable reference implementation of our design in Python we plan
to use that as a template for a C implementation. To be clear – the C
version will be log-format and API compatible with the Python version.

We plan to make good use of the upcoming Zeitgeist hackfest and should
have a 0.3 development release ready shortly after. If we are happy
about the 0.3 series we will rename it to 0.9 and go for a 1.0.

Regarding Gnome 3.0 I think we are in a situation much like Owen
Taylor recently outlined for Gnome Shell on the release-team mailing
list[1]. If we are desperate for Zeitgeist to be included in a Gnome
3.0 this March I believe it would be doable. It will require that we
really bust our backs and cut some corners, but it’s doable.
Personally (not speaking for the Zeitgeist team here) I am not sure it
would be a very good idea for the same reasons Owen mention.

Relation to Tracker and Other Semantic Technologies

The very short version of this is that Tracker and Zeitgeist does not
depend on each other in any way. The catch however is that either one
becomes a whole lot more powerful when working together. To take an
example consider tagging. Zeitgeist is just a log so we don’t manage
your tags, we are however fully equipped to understand events
concerning your tags. So you manage the tags via Tracker and track
their usage in Zeitgeist. The combined power enables one to reason
about what tags relate to resources in a temporal manner, even with
resources that are not tagged.

In the Zeitgeist world we call an application like Tracker a
Repository. Nepomuk or Desktop-CouchDB might work as other
Repositories. If there is some confusion in this area it is
understandable, since we do have some Repository-like features in our
0.2 series. This is however removed from the 0.3 series. It is still
undecided if we want to define a minimal Repostiory DBus API for
Zeitgeist and then ship a reference impl. of this API (which would run
in a separate process). Any full fledged Repository would be able own
the Repository service on the bus and Zeitgeist would not run its own.
But again let me stress that a Repository is not needed for the
Zeitgeist Log daemon to be useful.

3 Nov 2009

upstream hacking

I started the month with upstream bugs work. First I looked into #581873, made a fix and two days later realized that my git checkout was on a stale branch and its already fixed in gtk+-2.18. Next I looked at the mime matching issue that is already plaguing me for a while (#541236). I also have a patch for that and hope that I get green light for it or a review how it should be fixed instead.

buzztard

In buzztard I implemented copy and paste in sequence. I also found our what I did wrong in my clipboard handling code (see my previous post). Dunno what wrong with the old code, but this change made it work:

GtkClipboard *cb
-cb=gtk_clipboard_get_for_display(gdk_display_get_default(),GDK_SELECTION_CLIPBOARD);
+cb=gtk_widget_get_clipboard(widget,GDK_SELECTION_CLIPBOARD);

Next I finally got rid of the gnomevfs hard dependency. It is only needed if you have a quite old gtk to get help working. While testing I noticed that some translations disappear during run time. I made some i18n handling fixes regarding to initialisation and libraries.

I am probably the last one to figure that one has to draw with the 0.5 px offset in cairo to get non blurry gfx. After Matthias post I looked at my vu-meters and voila, I was doing it wrong. Fixes are in svn together with some small optimizations.

SUNWgtk2-print-cups /SUNWgtk2-print-papi in OpenSolaris 126

Part of the preparation for making CUPS as default on OpenSolaris, I have split out 2 packages SUNWgtk2-print-cupsand SUNWgtk2-print-papi in OpenSolaris 126 from SUNWgtk2.

Why did I do that?
The primary reason is that when LP ceases to the default print system on the LiveCD, having the PAPI print backend on the liveCD and not have /usr/lib/libpapi.so, all the applications that have print dialog will *CRASH*.

Splitting this out allows the PAPI print backend not to be installed on the liveCD when CUPS becomes default and allows applications to continue to work properly.

When will CUPS as default happen?
The basic code to switch CUPS as default is in b127, however, a lots of packages refactoring is being worked on so that CUPS will be slimmer than LP on the LiveCD. The credit for that belongs to Gowtham T (and as usual Norm as the adviser).

So when will CUPS as default becomes a reality from the LiveCD, that is all in the capable hands of Dave Miner and David Comay :).

So in the meantimes, in b126/127, you may have to do:

$ pfexec pkg install SUNWgtk2-print-cups

if you are already using CUPS and noticed that all the printers you used to see is not visible in the print dialog.

Why can this be fixed automatically?
It seems until facets is implemented in IPS, I cannot easily specify some of the interdependencies easily. (see discussion thread here, here)

While I am goggling, it is really excited to see that Bart is implementing facets with this bug.

GREAT News!

Tue 2009/Nov/03

  • Arrived in Helsinki yesterday evening after a rocking Igalia Summit near Padrón in Galicia. Unfortunately, my luggage didn't make it with me.

    This is the third time in a row that my luggage doesn't make it with me (same happened when I came back in August after spending two months in A Coruña and on my trip to Amsterdam for the Maemo Summit in October). Downside is not having things I need with me, positive side is that it's comfortable to get your luggage delivered to you instead of having to carry it all the way from the airport. Of course it would be nice if this would be predictable, in order to have the important stuff in the hand luggage instead.

    Hopefully, it will arrive safely as it did the other two times.

Making of SUSE Studio’s Failwhale

One of the best features of SUSE Studio is the ability to boot your appliance remotely on our servers without downloading it first. It’s cool to test and improve the appliance as you can actually bring the changes done interactively back to the appliance project.

Of course there are times when everybody wants to do that at the very same time, so we have a queue system to accommodate the situation with limited resources. As this is not exactly a pleasant thing for the user we thought to make it less annoying by providing a nice graphic to look at while waiting. The first idea was to have a couple of Disters (our robot mascot) standing a line.

dister-queue.png

But it looks a bit depressing, doesn’t it? Instead of cheering up the user waiting, the image of a long line actually strengthens the negativity of the situation. So back to the drawing board. How about focusing on the fact that we have our hands full rather than the user waiting.

Failwhale

As the sketch worked well and got approved, I went ahead with tracing it. The beginnings are always hard as the graphic doesn’t seem to work until the very last moment. But in the end we’ve gotten ourselves a brand new failwhale:

Failwhale

Firefox for maemo..?

So planet maemo is having a nice breeze about Fennec for N900. Nice youtube video and all.

But: dear friends, where the heck is the latest packaged version? I would like to try t out on my N900.

I tried googling, and found fennec for N810/N800 and some wikipages which I wasnt sure which version they talked about... I am left with this uncertainty, as I am not a Mozilla project insider. It would be nice if the video and blog posts would include a nice url. Maybe there is a website with all this info, but I, as a potentially interested person, havent found it..

So, where can people find it?

November 02, 2009

Fedora 12 Beta – First Impressions

A lot of blog posts about Fedora 12 recently. It’s been a while since I last tried Fedora, so I thought I’d try it out and post some of my thoughts.

Likes

  • Sweet KMS enabled boot screen – very nice
  • Yum is fast enough to be usable (but maybe that’s because of my quad core now?)
  • Custom icons for Documents/Downloads/Music/Videos etc
  • Installer re-assigned ownership attributes for old home directory. Very handy.
  • Clearlooks is the default theme (not Nodoka)
  • Control Center (Preferences) menu is no longer grouped by categories

Dislikes

  • Notifications (what is that horrible massive black square on my screen)
  • Package manager UI (often just too confusing, too animated, or too awkward)
  • Bluetooth keyboard didn’t work in the final setup screens (setting up username etc…)
  • Every other folder in Nautilus tells me I can share it using Personal File Sharing (well, at least $HOME and $HOME/Downloads – why would I want to share $HOME and why do I have to see this notice all the time?)
  • Doesn’t remember my preferred language (en_GB)

All in all, looking good apart from the few niggles I’m sure will be fixed before release. If anyone knows whether there is a meta-package to install enough packages to allow GNOME development (e.g. including gcc, intltool, libtool, gtk-doc, etc), that would be awesome.

Update: I just found sudo yum install @gnome-devel @development-tools via the Jhbuild page. It’s a start, but doesn’t include everything needed to build GTK+ for example. Shame the package manager UI doesn’t make this more obvious.

Unfortunately, I’m not going to file bugs just yet, because these are just my first impressions, and I’m not yet a Fedora user!

Idea: Book recommender

Website idea.

You take a picture of your bookshelf and upload it to the site. The site OCRs all your book spines. Once it has data from enough users it can recommend books that you might like.

This is better than Amazon recommendations because it will catch all your books, not just the ones you bought on Amazon.

You can make money through affiliate links to Amazon, though.

(bookscanr.com is free as of this writing)

Photo support for TagLib#

Together with Mike Gemünde (tigger), I am happy to announce that we are working on adding image support to Taglib#, which is the metadata library used by Banshee and currently only supports audio and video files. So why is this important? Because we will be able to vastly improve the metadata handling inside F-Spot. Furthermore, should Banshee ever decide to add photo support. it'll be ready for them to use.

The aim is to have a usable, complete and solid metadata library. This includes extensive unit testing (to the extreme). If we will handle your files, we want to guarantee that it will be done correctly.

All of this can be found on Gitorious. The code is in the photo-support branch of the mainline repository, master is a copy of the SVN repository for upstream Taglib#. Currently we support JPEG and TIFF, with Exif and XMP (see the wiki for more details). We plan to expand this to every other format out there. More instructions on how to get the code and test it can be found here.

So what's the plan here? First, we will improve the git version as is. When it is ready, we will then start embedding it into the F-Spot tree (while keeping the main repository synced in gitorious), to let it mature. Over time, we'll be working with upstream to have it merged back. I have already talked with Gabriel Burt about this, so this "fork" won't stay around forever.

We are looking for people that want to help us out. By testing it (to make sure we handle your files correctly) and off-course by hacking on it. Much to my surprise, I noticed that writing a metadata library isn't all that hard, so you don't have to be a superhero hacker to be able to do something useful.

Want to help out? Hop onto IRC and join #f-spot (on irc.gnome.org), come and talk to me (rubenv) or Mike (tigger).

bringing theora to youtube (the hard way)

I switch back and forth between Linux and Windows 7 pretty regularly these days.  But I have has this problem with Linux. I can’t run Firefox 3.6 nightlies (which are nicer than the 3.5 release) and Weave and Flash all at the same time. I can run Firefox 3.5 and I can have Flash, but Weave doesn’t work. Or I can run 3.6 with Weave but then Flash crashes the browser. It turns out that for me Weave is way more important than Flash but I still miss being able to watch the occasional Youtube video.

If you’ve ever run Linux for any period of time, you’ve had this kind of experience.

Anyway, I decided to try and make it so that I could easily play Youtube videos without having to use Flash. (Flash – in many ways – is the weak link in the chain.  In this case it’s because I can’t fix/hack it, although I’m happy to not have it because my browser is a lot more reliable.)

Theora + Youtube = Love

Theora + Youtube = Love

I wrote a greasemonkey script called Theoratube that connects to the Firefogg extension. It’s based very heavily on the really great Youtube without Flash Auto user script that lets you embed videos as a plug-in. But in my case I decided to use native Theora and HTML5 video because it’s more reliable, has controls and doesn’t require any additional software to start working.

How does it work?  It pulls down the video, uses Firefogg to transcode it, and then stuffs it back into the browser via a private URL.  It’s slow because it has to pull + encode the entire video, but it works surprisingly well for something that is as hacky as it is.

The worst part is the delay in between loading it and the first time you can play the video.  It needs a few changes to make it more usable:

1. It needs to download the video, start transcoding it and stream it into the browser as soon as possible.  This shouldn’t really be a problem and will probably be a pretty good experience.  Youtube bursts its traffic to start and then throttles it way back and at least on my machine the encoder can keep up pretty easily to transcode live.  This means taking it out of greasemonkey and putting into a proper extension to get everything inline properly.

2. The current Firefogg stuff works pretty well but it isn’t really designed for this use case.  For example, once you start a download of a file there’s no way to cancel it.  Same with encoding.  Also it needs an event feedback system instead of polling, which is what the greasemonkey script has to do right now.  But if you’re moving it to an extension above anyway this is probably pretty easy to do – just download in the extension directly and then include Firefogg for the encoding part.

3. Firefogg can only encode directly on a file instead of being part of a stream.  Not sure if ffmpeg2theora can handle this across platforms or not – I suspect so, but it’s something that needs to be fixed.

4. It really needs a big online cache to store data once you’ve downloaded it and encoded it to a free format.  Think of it as collaborate transcoding in the cloud.  Download, transcode, re-upload so that others can benefit as well.  You’ve already got the Youtube ID and the format it came from – that would make it pretty easy to key off of and do a quick lookup before trying to re-download the video and re-encode it.*

5. It needs to match particular quality formats to bitrates for the encoder.  Right now it just encodes everything at top quality since it’s just local and it’s the least loss you can buy.

6. The copyright issues here are…interesting.  There’s some content on Youtube for which the uploader actually has the copyright on that particular work.  (I mean, we’re talking about Youtube.  Your source for 15 remixes of Drunkest Guy Ever.)  And this is mostly about accessibility, not downloading.  So we’ll see if anyone gets upset.

7. It doesn’t handle youtube embedded videos on the web.  This will be a little trickier, but certainly not impossible.  Just need some more greasemonkey to help there.  Probably have to transform the object embeds into something else.

8. Seeking might be a little challenging, but not impossible.  There’s a parameter to the get_video call that lets you specify where to start pulling the video.  Probably offset in the number of seconds.  But needs some investigation/work.

So this is certainly 0.1 software.  But it raises an interesting tactic in making content more accessible in open formats – even without the participation of the original party.  Sometimes the work around isn’t what you expected.  (Note: I would like this for t61 as well.)

* No fooling, I wonder if Google would be willing to host such an archive?  People are willing to transcode to work around their lack of support for open formats – maybe they could at least provide a valid archive for them to work together?  Or maybe the Internet Archive?

GNOME Color Manager Progress

GNOME Color Manager now has a website. The mailing list will be set up soon, which means we can start building a community.

I’ve also recently completed the calibration integration, using the great ArgyllCMS to do the heavy lifting. This means it’s literally two clicks (with no options!) to generate an accurate screen profile with hardware that costs less than $50. And it only takes about 15 minutes. Anyone that takes photos or cares about colour accuracy should really invest in one of these things.

Calibration stage 4 of 5

Calibration stage 4 of 5

Also, a few people have been telling me to just write a GNOME front end for Oyranos and scrap what’s already been done. While I think Oyranos is a great project, I needed something that “just worked” and did the bare minimum integration without a hundred configuration options or integration points. I’ve also been told that some parts of colour management are heavily patented, and so I’m going to keep things as simple as possible for now so gnome-color-manager can be used in as many places as possible. If the Oyranos guys want to hook into gnome-color-manager then that would be great, but I think for now, GNOME Color Manager should aim to do much less than what the Oyranos guys have been trying to achieve.

How to use abicollab.net Part 4

Groups, View, Export in abicollab.net



This post is public domain. Feel free to copy and paste where ever you like

The first 3 articles of this series showed some basic operations of abicollab.net, how one could go about finding the friend you want to collaborate with and then how to setup a real time collaboration.

In this post I will talk about the Groups, View and Export features of abicollab.net.

Groups



One often has a collection of colleagues, friends and co-workers with similar interests who need to work together on documents. The abicollab.net webservice makes it easy to allow collections of people to form a group and to work together on common documents.

For testing purposes I've created a number of abicollab.net identities for myself and I'll use these to show how one creates such a group.

Simply click on the "my groups" link.



You see the list of groups for which you have membership.



To view the documents held by the group or the membership click on “view documents” or “view members”. The screen shot below shows the membership of the “abicollab” group. We’re the group that directly codes and tests the abicollab.net webservice. Marc and I are administrators of the group. Either of us can approve whether an applicant can join the “abicollab” group. Applicants to the group are shown in the “Aspiring members list”.



To create a new group, click on the “create a group” link, type in the name you wish and click “save group”.



The new group is created with you as the administrator.



Here I’ve created a group called “MartinSeviors”. Now suppose another user called “M. Edmund Sevior” wants to join this group. He navigates to “my groups”, searches for the group by typing in it's name, then clicks “Join a group”.



Now the administrator of the group receives an email of this request which also shows up as a message in his “message central” region.



I can now accept or decline the request. After accepting the request, navigating to “my groups” and clicking the member list shows the updated member list.



Any group administrator can promote any other member to become an administrator too.

view


The “view” link associated with every document shows the contents of your document in your browser. What you see is what you would get if you exported the document to html. With this one one can quickly tell if you have selected the right document to edit, without having to download it into AbiWord.



export


Every document on abicollab.net can be exported into a number of common word processing formats. This is accomplished via the “export” link. One chooses the preferred format then clicks “export".



This post is available on abicollab.net at the link:

https://abicollab.net/documents/embed/10651/latest.

November 01, 2009

2009-11-01: Sunday.

  • Sadly left the family - it's too tragic really; M.'s inimitable "I want come with you, stay at home !" rendeth the heart strings, despite it's abiguous solution.
  • Coach to Stanstead, Ryan-Air - the neon-yellow airline to somewhere that is not Rome: nice; read The Economist - caught up with the blog backlog. Tried to navigate the kernel's ATA power management code.
  • Enjoyed a great sermon on Church Fathers - D: Dante, from Daniel Harrel - fasincating - must read the Divine Comedy.
  • Boggled at the latest copyright-assignment idiocy (which it seems is sadly becoming fashionable again) - this time from Canonical: want to alienate and shrink your developer community - while persuing an elusive and unrealistic goal ? - try adding copyright assignment. Jonathan makes some excellent general points in his LWN article:
    Agreements like Sun's ... are common when dealing with corporate-owned projects; they clearly prioritize control and the ability to take things proprietary over the creation of an independent development community. ... When developers contribute code to a project, they tend to get intangible rewards in return. So asking them to hand over ownership of the code as well might seem to be pushing things a little too far .... allowing a competitor to take code proprietary may well be beyond those limits .... Companies which demand such rights may find that their community projects are not as successful as they would like.
    What is particularly strange is that many seem to demand copyright assignment, with the most tenuous of rationals, and for code they have no realistic chance of re-licensing for money anyway. Asking for assignment to an independant foundation is a tall enough, order, nevermind a for-profit company. Presumably a better solution is to pick a license that fits your preferred business model, and compete with other entrants by being better.
  • Landed; rather grotty, but cheap bus - with high volume Italian football commentary to Rome - waited for Thorsten while trying to unwind the Italian train system. It would be great if the ticket machines (like some German ones I've enjoyed) would print you timetables (or even just show the connection details).

Just leave it on the counter

I’d like to expand a bit on one of the Fedora 12 polish items Matthias already blogged about.  Better Tooltips.

As most of you know, tooltips are the little window-like pop-ups that (hopefully) provide helpful information about a user interface element (widget, control, etc) as you hover over it.  It seems to me they were originally used to provide textual assistance for the case where the user is unsure what a tool will do when activated.  And were particularly useful when the tool had no intrinsic text.  However, since then their use has expanded and become more generalized.  They are used for quite a few different things today and can contain more than simple text.

Now granted, you have probably never been consciously annoyed by tooltips.  More likely you haven’t really thought a lot about them at all.  But that doesn’t imply there is no room for improvement.  I spent a few hours examining my own interactions with tooltips and I came up with a few things that bothered me.  These basically fall into the categories of: color, shape, and position.

The issues with color and shape are fairly obvious.  Yellow! boxes!  right out of the mid 90s.  The issues with positioning are a bit more subtle.

Before

Notice how the tooltip:

  • Obscures what you are looking at
  • Gets all up in your shit
  • Does not appear in a stable position
  • Appears to be more closely associated with the pointer position than the thing that is providing the tip

How about something like…

After

Niiice!

Thanks Matthias.

Feeds