Last 5 Posts from 2008

Webkit-EFL interface prototype

After INdT guys released Webkit-EFL port last week some E hackers started to work an user interface on top of it, with Raoul creating a prototype called "ewww". I joined the hacking by creating my git repository with patches on top of Raoul's, refactored some bits and made two smart objects: one for the scrolled webview and another with controls. Graphics and layout should be read from EDC descriptions and it looks like this: This screenshot shows no scrollbars, but they exist on the right and bottom sides, they're indicators only and will fade away after 1 second they're displayed (usually by movements). Movements can be done by keyboard, mouse wheel or panning (drag on an "blank" area). Progress bar is under location text, like Safari. You can notice some details like smooth shadow on the viewport. It is still very preliminary, Webkit-EFL needs lots of interfaces exposed and some bugs fixed, but we hope this can serve as a testbed for development and gather requirements. After some more work we'll move it into E's SVN under PROTO, but the name should change to something else since not everybody likes ewww. The good thing is that many people have ideas with regard to browser UI for embedded systems, raster wants to implement it as a little dragable icon that expands into full contros. I want to have each browser tab as a separate process and reparent its X window to a master process window/tab manager, much like Google Chrome. Let's see how it works out in real use. For those which would like to test:
    # if you don't have webkit-efl port, check it out: WARNING: this is HUGE!
    git clone git://code.staikos.net/webkit
    cd webkit
    git checkout origin/kenneth/efl-port
    ./autogen.sh --with-port=efl --enable-web-workers=no
    make all install

    # checkout my ewww:
    git clone git://git.profusion.mobi/users/gustavo/ewww.git
    cd ewww
    ./autogen.sh && make all install

EDIT: ewww repository missed ".git" extension.

EDIT.2: to get ewww you need git clone instead of git checkout.

ELC-E 2008 was great!

Back from The Netherlands after an amazing Embedded Linux Conference (ELC-E 2008) at Ede and then some good days at Amsterdam.

I really liked ELC-E, talked with lots of guys, my presentation was good as well (I hope so! let's wait for the videos), you can see the slides at: http://palestras.gustavobarbieri.com.br/efl/elce2008/Rich_GUI_without_pain.pdf

After the main conference we had an extra UPnP/DLNA conference, it was really small, but interesting nonetheless.

Then I traveled to Amsterdam, it was my first time there and I really enjoyed the city, the people, the beer... and the museums, of course. There I could see the awesome piece that shows in this post called "For The Love of God".

work and pleasure

Today I finished integrating some cool code into Evas: box and table. These utility smart objects are now in Evas for good, we can stop replicating those in many projects and people who just want to use them and not a full featured toolkit like ETK or EWL are now free. More importantly: we can now expose these in Edje, making all layout elements dependent on theme, not having to rely on SWALLOW slots!

The integrated code is very flexible, it make use of the recently introduced "size hints" and also postpone heavy calculations to pre-render time with calculate smart callback. Table has three modes: regular, homogeneous based on table size and homogeneous based on largest minimum item size. Box, since it just represent a sequence of items, is more extensible and allows you to specify a layout function, we provide some like vertical, horizontal, stack, homogeneous based on box, homogeneous based on the largest minimum item size, etc... but you can easily write your "snake layout" and use it. If you need more option details than "size hints", you can extend the class and implement options_* virtuals.

These code were integrated by me, but not totally written. Gustavo Lima, from ProFUSION, wrote the box for their sequence_box.c (it was relicensed to E's BSD with permission) and Rasterman wrote table for his elementary "toolkit for mobiles" els_table.c.

On the pleasure and work side, I'll fly to The Netherlands next Tuesday so I can attend ELC-E 2008 where I'll present a talk about Rich Graphical User Interfaces on mobile systems, covering Evas, Edje and the new kids on the block Elementary and Guarana.

Last but not least, due trip and other stuff to do I'll not be able to integrate table and box into Edje soon. If you always wanted to help E17 and EFL, now it's your chance! :-) See my mail to the list and start hacking, I can reply to you by mail and IRC (when I'm online). We will also need Python bindings for those, so patches to python-evas and python-edje are also welcome!

Running Illume everywhere!

The Gang

Rasterman's Gang: Nokia N810, Sharp Zaurus, OpenMoko Freerunner and Palm Treo-650

After Rasterman announced he had "The Gang" running Illume we decided to help him and run it in yet-another platform, the Freescale iMX31:

Some days ago raster already posted video of his virtual keyboard doing correction/prediction and operating on various resolutions, for those that liked my iPhone-like virtual keyboard demo for n800, this one looks better and is for real, check out his videos: 01, 02, 03 and 04

x11 benchmark on embedded systems

Unlike most would say, x11 does quite well. See our benchmarks comparing X11, FB, DirectFB on a Fresscale imx31. There you can see how x11-16 bitch-slaps everything... that's even better on n8x0 and that's why Canola runs fast ;-)

Guarana and Enjoy 0.1.0 released!

ProFUSION is proud to announce the first public release of our Guarana framework and its demo Enjoy.

Guarana is a set of free software libraries to aid embedded application development. It comes with with a remote control access library, module loader, model-view-controller machinery, basic data structures and a fast growing widget set.

Enjoy is a demo music player targeted at embedded touchscreen devices. It uses Guarana's MVC and widgets and Emotion to play media.

Here's a video running on the target demo platform, a Freescale imx31 3-stack board. (it will run on N8x0, but will not play music because Emotion's gstreamer backend uses decodebin, we need to patch it to use DSP decoders/sinks)

More information about Guarana features and an Enjoy screenshot see the original press release.

For those that don't know, Guarana is a Brazilian plant and also the name of an excellent soft drink. It's also the base of some energetic drinks. That's why the demo is called Enjoy... okay, okay, it's also because it starts with "e" as well ;-)

LightMediaScanner 0.2.0 released

We're proud to release a new version of LightMediaScanner, the fastest media scanner for your embedded device ;-)

This version now adds the direct relationship of audios and artists table, this will allow album-less audios to have an artist as well as have collections audios to display their artists. Yes, Canola will behave better now.

Also new are the often requested single-process scan and progress reporting.

Progress is reported using callbacks. Since it is impossible to know beforehand how many files will be in the directories before walking them, there is no "total" item reporting or percentage, this is up to you if you think it is worth to pay such penalty. Check also does not report so it's uniform, but number of items to check is easier to discover, just check the database. These callbacks will also report the state of such file, so you can notify user if some files were skipped because they took too much to finish (more than slave_timeout).

Single process scan is now available, but it's mostly there to aid debugging. While it will speed up scan on single-CPU machines (ie: Nokia N810), it is less safe and if it breaks/hangs (ie: due MMC being removed during parse, or bad FAT filesystem) it will bring down your whole software, so be aware of that before using.

Last but not least, our GIT moved from http://staff.get-e.org/ to http://gitweb.profusion.mobi/ (Gitweb) with repositories being cloned from git clone git://git.profusion.mobi/$PROJECT

Please report any bugs to our project at garage.maemo.org!

Talking about Python and Maemo at Mobility Week

Next week Ulisses, Luis Felipe and I will be at "Semana da Mobilidade" (Mobility Week), to be held at USP São Carlos, Brazil.

This is a great thing because we'll be able to talk about Maemo and Python to undergrad students and try to show there is life (and paid jobs/work) beyond Windows and Java, .Net and Delphi. We already did a talk similar to that for UNICAMP students (although it was an informal talk) and attendees liked it.

I'll present both a talk and a training. I plan to show how GNU/Linux development happens on desktop, how it needs to be changed for manual cross-compiling and how Maemo (mostly scratchbox) helps with that, then cover other changes, like Hildon-ization and hints on how to change user interface to make it usable for high-dpi but small screens, then say how Python can cut to the chase and avoid most of these troubles. This is a talk, so nothing will be in-depth. As for the training, I plan to go step-by-step scratchbox on the first day, cross compiling and port on the second and Python development on the third (4hours/day). Any ideas or suggestions?

Ulisses will discuss more generally life outside Windows-Java environment, trying to get students willing to work with GNU/Linux and open source in general. I'm not sure about other countries, but here in Brazil lots of students completely reject learning these Free/Open Source technologies because they think there is no opportunity to get paid to do such thing, so they focus on proprietary world, mostly on Windows and Java or .Net.

Luis will run the "Python for s60" training, a hands-on training, covering the basics, how to send and run scripts on the phone, then go through some API to demo capabilities, then some real development.

Last but not least, this mark the start of a great partnership between INdT and ProFUSION.

Translucent widgets on X11, EFL version.

Today I read on Trolltech Labs Blogs a great post from Samuel Rødal about how to get translucent widgets on X11 with Qt's newest snapshot. Then I thought that if people find it cool to have such thing, why not say how to do the same in EFL?

EFL here is just Evas, Ecore and Edje. Evas does support rendering to semi-transparent buffers, including ARGB windows. Ecore and it's sub-libraries Ecore-X and Ecore-Evas know how to create ARGB windows since a long time, just use ecore_evas_alpha_set(ee, 1) if you have composite manager or ecore_evas_shaped_set(ee, 1) if you don't (it will be the best you can achieve on low end hardwares). Edje is just used to provide fancy button-like object without trouble, if you like Qt, then try QEdje.

My code is available at http://barbieri-playground.googlecode.com/svn/efl-tests/transp-bg/ and it requires a recent version of Ecore, not because of alpha/translucent support, but because I just added the helper ecore_evas_new(). If you have an older version, try to replace it with ecore_evas_software_x11_new(NULL, 0, 0, 0, 320, 240). Why I did used that function? First because I wanted to blog about it, second because it will make the same effect work elsewhere, like Windows and DirectFB ;-)

E17 running on Freescale i.MX31

We just published at ProFUSION news (shameless plug!) that we finished the port and packaging of Enlightenment DR17 on Freescale's i.MX31 development board. Packages were sent to LTIB mail list and are pending inclusion into official repository.

Hardware is very similar to Nokia N810, but with a smaller screen. Software runs smooth, but it's not usable out-of-the-box, with dialogs being too big and general hit areas too small (border buttons, etc), that's why we plan to port Illume soon, as well as Python-EFL so maybe someone can try to run Canola on it ;-)

Generating Edje files using Inkscape and Gimp

One of the most boring work while doing Edje is having to measure all the parts and write them on your EDC files. It's also very error prone. So why not make it automatic?

This idea is not new and at INdT we did that, for Gimp, where designers handle developers PSD (Photoshop) files and they open these in Gimp, outputting as edc using this script by Renato Chencarek.

Now at ProFUSION we're finishing the UI of Enjoy, a music player to demo the power of Guarana framework (to be released soon!). I did the design using Inkscape, so I was wondering that I could join Renato and write an Inkscape-to-EDC converter, and here it is! Both files are now in E SVN under edje/utils.

If you like screenshots, here they are. You can also have a glimpse of Enjoy look (hey, I'm a developer, not a designer, so don't shoot me! however suggestions are appreciated):

I hope this can help other EFL developers out there. I know some Maemo, OpenMoko and even aMSN guys are using it now.

Update#1: You need both inkscape and/or gimp to use the scripts.

Update#2: Scripts are written in Python, so you need it too.

Evas DirectFB released

This week ProFUSION released Evas DirectFB engine, adding it back to SVN. While engine is functional, it's not as fast as it could be and Denis Oliver Kropp is looking at this, that seems to be related to pre-allocated surfaces not being accelerated by DirectFB. You can work around this by using Evas software engine, that is very fast, just define DFB_USE_EVAS_IMAGE_DRAW.

Announcements:

Next steps are to provide EWL and ETK engines, just need some time to work on them.

Python-EFL 0.3.0 released

Python-EFL packages were uploaded to PyPI, making it possible to install with setuptool's easy_install.

This release is actually what is in CVS SVN for some time now and is up to date with current EFL code base.

It would be amazing if we could find official Ubuntu packagers for EFL and Python-EFL (see launchpad #259098), we already have one guy working with Fedora, it's already provided as an overlay for Gentoo, OpenEmbedded has it too, Debian has it in experimental (bit old, but it's there) and we have some out-of-tree packages for this great distro. Of course Maemo packages are there thanks to Etrunko. If you are willing to package, please contact the developers, we can provide useful hints on which packages are higher priority so you don't package marginal stuff.

I've also updated the Python-EFL API documentation (automatically generated with epydoc).

Events I'll attend later this year

Although I'm very busy these days getting ProFUSION up and running, I managed to be accepted by two excellent events:

  • Maemo Summit and OSiM world September 16-20th, Berlin (Germany). I'll do a lightning talk about rich graphical user interfaces with efl and try to setup a bof about rich/alternative graphical user interfaces for maemo. Kindly sponsored by Nokia, thanks!
  • Embedded Linux Conference Europe 2008 November 6-7th, Ede (The Netherlands). I'll present about rich graphical user interfaces using efl and guarana (more to come about guarana later!). Still looking for a sponsor :-(

The ELCE presentation will continue from last year talk, with more demos and also covering real world use cases. It will also be the first presentation to cover Guarana, an open source framework on top of EFL developed by ProFUSION to aid development. I'm sure you'll like it. [Guarana is to be released soon, stay tuned!]

If you plan to attend these events, please let me know so we can schedule some beers.

One myth less

I do write C code on a daily basis since 2001 and I don't know why I always believed that free(NULL) would crash, so I always used the painful construction:

        if (p)
                free(p);

Until yesterday! While talking to Lennart Poettering and we bet about that. Damn, I was so sure about it, but I'd really want to believe I was wrong, since I could avoid such stupid "if". Well, after we got David Zeuthen's phone we checked the free(3) man page and I was proved wrong!

Thanks Lennart, I owe you some bucks ;-)

FOSSCamp

I was invited to come to FOSSCamp this year, and of course I accepted. Travel from São Paulo to Prague was quite long (home to hotel time around 20hs), but it paid off: hotel is great, (un)conference is nice and lots of hackers to talk. It was great to discuss how your desktop and mobile device will work in future ;-)

Unlike other events, this is not a conference, thus the name "unconference", instead of fixed schedule with talks, we have lots of meeting rooms with good infrastructure (wifi, enough power sockets, tables...) that we can use to discuss about various issues.

Yesterday (Friday, May 16th) was the first and I participated in some desktop-oriented discussions. Some highlights:

  • shorter release cycles: as was said everywhere last weeks, Mark pushed for shorter and coordinated release cycles (around 3months), so everyone can benefit;
  • kde-gnome integration: there was various KDE-Gnome integration meetings with people from KDE (Lubos Lunak), Gnome (Vincent Untz), Amarok guys and others. I liked these meetings since still use KDE applications on my desktop and also because I want to represent E17 there, and then help Enlightenment to behave well. Discussios ranged whenever and how to integrate components like: bookmark format and location (XBEL?), Keyring & passwords, URI schemes and how to avoid fish:// vs. ssh:// problems, session management and trying to figure out a set of settings (double-click timeout, fonts, colors) that should be moved to a common place (X Settings?). After some discussions I'm skeptical of what will really happen: technologies are almost the same, but no group want to give up on their baby. I think it will require a 3rd party to develop or isolate the base (non-GUI) technology and then have both to use them, it make no sense to have 2 keyrings, virtual i/o, ...
  • desktop search: I learned about XESAM and also raised some concerns about its use in embedded systems, that Jos van den Oever (vandenoever) wants to take a look. My initial hope was to provide some lightmediascanner (LMS) utility to integrate with XESAM, but their specification is based on DBus, XML and RDF, things that not couple well on small systems. IMHO XESAM should specify an API, a library to be used and if appropriated one can implement that library to use DBus and XML to forward it to some other daemon (like Beagle, Tracker or Strigi). Systems like Maemo or OpenMoko could just use simpler methods like LMS + SQLite. Having yet-another-process and possible transferring lots of data between processes on devices with very slow memory is not good, you gain nothing, just loose;
  • inkscape, swfdec, svg, flash: another interesting meeting with Company (swfdec), Ted (inkscape) and others. Discussion ranged from why current toolkit sucks to cairo, x11, filters and more. Most problems are due the lack of people, both in X11 (to provide good drivers), GTK (to rework the widget internals), Cairo (to provide filters and optimizations)... I have to agree to the lack of people: while lots of companies invested in server-space, almost no investment was made in GUI, it's most about some individual efforts, and if you take into account the lines of code that both GUI and server requires, you'll see that GUI needs more. Mark asked us what we should use to develop an application like Canola, of course I said EFL, but others said "choose what you feel better, all the tools suck and you'd have to rely to some dirty tricks". With regard to effects/filters: unfortunately none of us have find "the magical solution" to make filters fast, so it boils down to lots of hand work to optimize some cases, cache others and avoid doing them often.

Evas, Smart Objects and Edje

I'm often introducing new developers to Evas, part of the Enlightenment Foundation Libraries (EFL), and one common problem is to understand how Evas, Smart Objects and Edje integrates. Yesterday, while teaching some guys here at ProFUSION I came to the following picture, that describes it well:

Evas exposes just a handful object types, like solid color rectangle, gradient rectangles, images, text, text block, polygon, line and smart object.

Smart Object is the only special type because it's extensible and developers should implement its virtual methods to have it to behave like regular objects with calls like evas_object_color_set() or evas_object_resize(). Smart Objects do not have any visual representation, they can contain other objects that may have it, like images or rectangles, that's why they're represented like a box in the figure above. Their children are handled as if they were in a special layer: outside objects cannot interleave smart object children. It's recommended as good practice to not expose children to outside, instead provide methods to manipulate these children.

A regular mistake is to forget that just creating objects from inside smart object methods don't make them children! You must assign a parent to a child with evas_object_smart_member_add(child, parent). You can "unparent" them with evas_object_smart_member_del(child). As children can not have more than one parent, adding a new parent to the child will first remove its parent before adding the new one.

Edje is a smart object that loads a group of parts from a description file often called "EDJ" (or edje file). These files contains a collection of groups, each with a set of parts (evas objects), each part with various states. When a group is assigned to some Edje object with edje_object_file_set(object, file_name, group_name) the parts are created in order (first will go first, thus will stay at the bottom) using the "default" 0.0 state. If some part have relative positioning to the whole available space (Edje object geometry), when the edje object is changed, all the dependent parts are recalculated and have their geometry set. If some part is relative to other parts, then when one of these changes, the dependent part is recalculated and reset as well. One can manipulate edje by changing the state of the parts, this should be done by means of programs, which will act based on signals. Edje will dispatch some signals like "resize", "mouse,move" and "show", but users are encouraged to create their own application signals that can be emitted with edje_object_signal_emit(object, "signal", "source").

The most common mistake using Edje is to touch its children. Never, ever, change the object that you get with edje_object_part_object_get(). That call is for inspection purposes only. You're just allowed to change Edje by emitting signals from your application, EDJ should have programs to catch that signal and trigger some state change on some parts. Let's remember that it's recommended to never changed smart object children, Edje is strict, making this a rule. What can you expect if you break this rule? Before, I said that Edje would recalculate dependent parts when the dependency changes, but I lied: for simplicity purposes, when something change, Edje recalculates the whole thing, and it does so using the state information from EDJ, not the current value of the object. If you change the color of some rectangle from white to black, recalculation will enforce the rectangle to be white. Same for images, if you set the image file to be something else, it will be restored to the image specified in the EDJ.

One variation of this mistake is dealing with SWALLOW parts. These parts enable user to add an external object to be managed by Edje with the edje_object_part_swallow(object, "part_name", external_object). As said, Edje will manage this external object: it will become the object's parent, it will set clippers, colors, visibility and geometry. After that call, user don't own the object anymore, he is only allowed to change other, non managed properties, ie: images can have their file set because SWALLOW parts don't have any image property (unlike IMAGE parts!)

It's very important to understand these concepts. Real applications are a mix of smart objects and edje, one inside the other, which might led to great confusion if management ownership is not clear.

In the figure above we can see the management ownership to avoid these problems. User manages both the smart object and the background. In order to change the edje he should call some API defined in the smart object. To change the "star" image, user should call smart object that would call edje.


You can also download the printable version of the figure.

Enlightenment DR17 starting to release: EET

The Enlightenment Project DR17, the project known by non releasing any official packages, has now released their first library as "alpha": EET.

README says:

Eet is a tiny library designed to write an arbitary set of chunks of data to a file and optionally compress each chunk (very much like a zip file) and allow fast random-access reading of the file later on. It does not do zip as a zip itself has more complexity than is needed, and it was much simpler to implement this once here. It also can encode and decode data structures in memory, as well as image data for saving to eet files or sending across the network to other machines, or just writing to arbitary files on the system. All data is encoded in a platform independant way and can be written and read by any architecture.
This library is very stable already, with almost no change in the last years, the last addition was the "inlined strings" that are kept in their own read-only section, so you get them mmap()ed on load.

It's the core of E17, being used to handle configuration data and Edje themes (includes images, scripts and regular data). What I find great about it is the easy- to use struct serializer/parser that you can use to save and load structured data, including lists and hash tables. And it is almost dependency-free, just: libc, libz, libm and libjpeg.

If you are a packager of some distro, or you know some, please package it. If you find out any problems, let them know, but it should be very straightforward, with Ebuild, RPM and DEB packages already available from some sites.

Funny fact: enlightenment is the project ID "2" at sourceforge.net, the sourceforge.net project itself is the number "1" :-)

GSoC: Enlightenment and BlueZ

So it's that time of the year again, almost summer in North, winter here in South and Google helping free software projects with its Summer of Code. I'm glad some projects I'm involved were accepted, including: Enlightenment and BlueZ.

I'll be a mentor for Enlightenment and we have great ideas, if you're interested in them, mail me or go to #edevelop @ irc.freenode.net so we can discuss your ideas, experiences... It's a great way to get involved in computer graphics and a platform that is growing everyday on mobile systems, with adopters like Canola2 and now OpenMoko!

As for BlueZ, I'm not mentoring, but some friends are, they also have great ideas, things that will benefit every GNU/Linux bluetooth user, from mobile to desktops to laptops, some are really interesting like better audio support. It's a way to get into kernel and low-level user space world, and get paid for it ;-)

Canola model plugin example

You might know that INdT released Youtube plugin as free software, it's great feature-wise and touches almost every part, providing new models, views and controllers, those with complex use cases like threaded models so GUI will not block during HTTP requests and even options menu.

That's cool because one can do lots of things (and some users are already showing us some nice plugins!), but we still need some base text introducing people to the concepts, with smaller code, so here it is: Canola URLBookmark source code and text.

This introduces you to some concepts, explains about "plugins.info" and how plugins are loaded and in the end you have a list of URL to play. Of course this hard coded list of URL is on purpose so you take some time to change it to something more useful. If you ask me, I'd like to see UPnP, MPD, Samba, Avahi, Shoutcast and lots more.. I did my part, everything you need to know is there, now it's your turn. ;-)

BossaConference '08: excellent!

So BossaConference '08 is over, what a great conference! Lots of great people, some are still around, doing some hacking with us at INdT office, it's really great to have some time to discuss new ideas, drink some beers and play jokes ;-)

Let's hope next year we can keep it to the level! Congrats to all the organization members.

Old website is now dead

My old website http://www.gustavobarbieri.com.br/ is now dead and points to this blog. It was ugly and hard to keep updated, using wordpress blog is much easier than hand editing HTML and provide lots of useful features, like rss feeds.

If you need some of the files hosted there, please use http://www.gustavobarbieri.com.br/old-website, although I did keep the links to most useful folders, like http://www.gustavobarbieri.com.br/eagle, http://www.gustavobarbieri.com.br/jogos and http://www.gustavobarbieri.com.br/python

Problem solving, python rocks

So I was helping one Canola2 user to uninstall the old version and for some strange reason apt-get remove libeet0 libevas0 libecore0 libembryo0 libdownloadmanager0 was breaking with "Abort" message. Ok, use dpkg instead, I said, but since we now have split packages for all the libs we use, you'll end with a dependency nightmare.

Solution? Hack a quick script to get dpkg errors, parse them and generate a new command line with proper ordering:

#!/usr/bin/python

import sys

pkgs = {}

infile = open(sys.argv[1])
pkg = None
for line in infile:
    line = line[:-1] # chomp n
    tokens = line.split()
    head = tokens[0]
    if head == "dpkg:":
        if tokens[1] != "dependency":
            continue
        pkg = tokens[-1][:-1]
        pkgs.setdefault(pkg, set())
    elif head in ("Package", "dpkg", "dependency"):
        continue
    elif head == "Errors":
        break # follows a list of problematic packages
    else:
        if tokens[1:3] == ['depends', 'on']:
            pkgs[pkg].add(head)

def unique_extend(lst, extent):
    for e in extent:
        if e not in lst:
            lst.append(e)

def rm_pkg(p, pkgs):
    rm_list = []
    try:
        ddeps = pkgs[p]
    except KeyError:
        return [] # no deps!

    for d in ddeps:
        unique_extend(rm_list, rm_pkg(d, pkgs) + [d])
    return rm_list

rm_list = []
for p in pkgs:
    unique_extend(rm_list, rm_pkg(p, pkgs) + [p])

print "dpkg --purge", " ".join(rm_list)

Not that efficient, but simple enough.

Canola2 beta2 is out!

After another heavy working week, we managed to deliver a new beta of Canola2, this time with lots of bug fixing (thanks for reporting!), features and optimizations. Also features 770* support, a new tool to merge albums (collections or albums with similar name) and lots of new media formats (wma/wmv and real media included!).

UPDATE: Since we replaced our download manager, previous packages conflicts! Please remove Canola2-beta1 before installing the new one. If you got it wrong, apt-get -f install from Xterm should fix it.

Hope installation will be smoother this time!

More information at: http://openbossa.indt.org/canola2/

* 770 support: gregale is regular install, but for Hacker Edition (bora ported to 770) you need a special proceeding (ain't you hackers!?):
  1. disable all repositories
  2. add the repositories:
    1. deb http://repository.maemo.org gregale free non-free
    2. deb http://repository.maemo.org/extras gregale free non-free
  3. update list
  4. install canola2
  5. remove gregale repositories
These steps are required because Hacker Edition kernel doesn't provide inotify and we compile bora EFL packages optimized for n8xx (omap 2420, arm1136jf-s).

Ruby bindings and bugfixes for LightMediaScanner

Thanks to Levi Bard we now have ruby-lightmediascanner, with even API docs!

On the bug fixes front, after Canola2 was released and it was tested with multitude of media I could fix lots of bugs with parsers, mainly on jpeg and id3lib.

Last but not least, thanks to Renato Chencarek we now have ogg support, and I also added png and audio-dummy to register known media files we still have no specific parsers (real, wma, ...)

It's already stable, when I have time I'll add a non-dual process version of process and check, so people with "correct" media files can use this and benefit from a much faster version (however this will rely on developers adding support to choose both implementations).

Bossa Conference 2008

And so the time has come, almost 1 year since the first Bossa Conference 2007. That was an amazing conference, with exuberant place near the beach, great speakers and lots of time to enjoy both. Since the scope is well defined: Linux and other Free Software in mobile devices, the speakers are really well selected, we could manage to have free time to talk to each other, without going from one side to another, running like crazy and if you have attended conferences before you know what I mean: these casual chats are the best way to know about new features and plans (maybe unofficial or secret ;-)), elaborate new ideas, etc.

That conference was so great that INdT is now promoting another, actually much improved:

Bossa Conference 2008 Come and enjoy a innovative conference on Open Source Software for Mobile Embedded Platforms. Located in Porto de Galinhas, one of the tropical paradises of Brazil, the Bossa Conference will happen during 16th to 19th of March at Summerville Beach Resort. The perfect combination of developers, pleasant environment and good ideas. Let's go! We're waiting for you. Information and registration: www.bossaconference.org.