Category Archives: C

Evas UV Mapping and WebKit-EFL

One of the most requested feature for Evas was rotation and other transformations. These are no more, Rasterman just did generic UV Mapping support, enabling rotation, perspective, 3d-simulation and more.

As usual he wrote a fast software engine to make this available on non-3d accelerated, next should come OpenGL and OpenGL-ES as some big players in the industry are now funding his work in both software and GL-ES support, as well as ARM NEON optimizations.

As ProFUSION is also being funded to work on WebKit-EFL, I thought I could demo our work using new rotation support, and the result is quite good:

As you can see, there are still bugs… actually this video was first meant to report a bug with mapping code, but raster is already fixing it.

As soon as I have time I’ll try to update EFL for N900 and try out the new expedite tests, they include 3d cubes, coverflow and more. Hopefully by the time OpenGL-ES will be ready and then we can compare software and hardware performance on this amazing hardware.

All in all, this semester is being quite busy for EFL hackers. Fast OpenGL-ES, UV Mapping, WebKit and soon-to-be-release Edje Editor were all done, with much more to come. Stay tuned!

Ecore-GLib main loop integration

It’s done: http://trac.enlightenment.org/e/changeset/42825

This was a often requested feature by friends, ProFUSION clients and people that want to use the large amount of GLib-based libraries with EFL applications.

To avoid impacting each other, the suggested way is to have each main loop in its own thread, communicating these using pipes. This is used by Emotion’s GStreamer plugin, lots of projects inside ProFUSION or for our clients. But sometimes this is not easy to do (Adobe Flash plugin for WebKit-EFL) or maybe we just want to do an experiment until native efl version is available (for example, EUPnP is still in early stages, while GUPnP is rock solid).

This enables (or makes it easier) using nice projects from EFL applications, to name a couple of personal interest:

  • Rygel: Rygel is a collection of DLNA (UPnP AV) services (devices in UPnP speak).
  • GUPnP: object-oriented (GObject) open source framework for creating UPnP devices and control points.
  • PulseAudio: sound server. Although it is possible to write your own main loop support for pulse, it’s much easier to use glib’s until someone writes ecore_pulseaudio.
  • Moblin Mojito: ocial data server which will fetch data from the “social web”, such as your friend’s blog posts and photos, upcoming events, recently played tracks, and pending eBay auctions. It also provides a service to update your status on web services which support it, such as MySpace and Twitter.
  • Google Gadgets: similar to E17 gadman, provides sandboxed widgets. It allows storing basic data and network I/O, so there are forecasts, stock options and rss feeds. It would be nice to have a native port (we’re working on it), but meanwhile using GTK’s infrastructure would help.

Enlightenment getting ready to rock!

Not 1.0 release yet, but moving towards it!

Last week I started a discussion with some packagers so we could get ride of lots of outdated and unmaintained repositories as well as updating the maintained repositories so they get improvements from SVN HEAD and also help testing our code.

This was interesting, first packagers did not know each other (even various Ubuntu/E17 package maintainers) so the first task was to get them to talk and settle differences.

Then they complained about trunk often being unstable and hard to get a consistent snapshot to package. While this is true, I also complained about their interaction, or lack of, with developers to know how to build and we agreed that having a public schedule with period to stabilize code base followed by development snapshots could help. So I did propose one monthly plan that people liked, being this weekend (Thursday April 16th) the first freeze followed by a development snapshot on Monday.

The result is turning to be better than what I imagined: all packagers are now united and talking to developers, we set up http://packages.enlightenment.org/ to release packages until they go into mainline distros and we increased SVN commits, with lots of motivated people fixing problems here and there, cutting rough edges and making experience better and better. Now let’s hope during this bug fix weekend we manage to get rock solid EFL and E17 so we can release packages to spread use of our technologies.

Having more people to know and test Enlightenment and its technologies is very important. We’re getting our Release Plan done and expect to release E17 and EFL 1.0 this year. Our project got really interesting Google Summer of Code applications covering Netbook, Browser and other areas were we can rock. But we could use more press releases and marketing, people still don’t know that Enlightenment Technologies power products from phones to home automation systems to mobile media centers and even digital tv set-top boxes around the world!

PS: expect Debian/Ubuntu/SuSE packages for Canola, Enna and other nice applications on top of EFL afterwards. Thanks to all developers and packagers to make it happen!

Presenting at PyCon US ’09

Now that the list is published I can announce that my talk was approved and I’ll present at PyCon US 2009!

My talk Python enabling mobile media centers will tell you all how Python made it possible to finish Canola2 in record time and how it does not suck performance wise in mobile devices as the Nokia N800, N810 and it is even acceptable on 770! I’ll quickly cover how painful development of first version in C was, how we profiled, tools we used to write Python-EFL bindings and more.

For my beloved Brazilian friends, I plan to present it (or a similar talk) at Bossa Conference ’09 and possible present it in Portuguese at PyCon-Brazil later this year.

Surpise: Qt goes LGPL

Wow! Making it stronger WOW to let you all know how I did feel when I received the excellent news: Qt 4.5 will be LGPL 2.1 (see official here).

I still remember myself talking to Mark Shuttleworth about possibility of Qt going LGPL and I was saying that it would never become LGPL since it was an excellent thing for Nokia, keeping adversaries away.

It turned out that I was wrong… “never say never!” they say. Nokia is seems so confident, or Motorola so non-intimidating, that it believes that doing the right thing and moving its product license to more commercial friendly will bring more developers and thus more applications.

Mark was wondering about GNOME goals could be delivered on top of Qt if this was LGPL. Well, in my opinion it is possible, but very unlikely. I dare to say GTK will get going along Qt and it will never go away. It’s about passion, not technology there.

Talking about technology and this concerns ProFUSION, I really like Qt, always did. As most of you know I hack using Qt, GTK and EFL for a long time, Qt is the easiest to use, largest and most complete library out there. And following their progress with 4.x versions you can see they’re heading the right direction, heading where EFL or MacOS libraries are today. ProFUSION will now be able to recommend Qt to a broader range of clients, those that wanted LGPL licenses to avoid licensing fees.

I’m still surprised! I expect Nokia keep doing these great surprises, the next being the next internet tablets (with $99 developer program ;-) ) and maybe a Linux phone later this year!

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:

ewww ui prototype

ewww ui prototype

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.

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 ;-)