Last 5 Posts from 2007

LightMediaScanner 0.1 released!

INdT released today under LGPL the public release of LightMediaScanner (LMS), a lightweight media scanner that will be used by Canola 2.0 and, we hope, many other multimedia software!

Lightweight media scanner meant to be used in not-so-powerful devices, like embedded systems or old machines. Provides an optimized way to recursively scan directories, handling the parser in a child process, avoiding breaks of the main process when parsers break (quite common with such bad libs and tags). Parsers are plugins in the form of shared objects, so it's easy to add new without having to recompiling the scanner. The scanner will use SQLite3 to store file-mtime association, avoiding parsing files that are already up-to-date. This SQLite connection and the file id within the master table 'files' are handled to plugins for relationship with other tables.

Check out the code, it's really simple to use and write new parser plugins:

Canola driving people crazy!

After many, many... did I say many? sleepless nights finishing the new Canola version, some guys at the office were like this:

The actor is Kenneth, our little danish fellow.

Canola 2 teaser website launched!

Eager to test new Canola? Check http://openbossa.indt.org.br/canola/index2.html!

Our designers did this wonderful piece of work in order to us developers check what/how to do things and now they made it available to everyone so you can start to wonder how it would be to use it :-)

As Marcelo said in his blog, this is a teaser, not the real product, so you might expect some different bits here and there, we'll fix these issues as we find them.

Also, for those that looked at the website and thought "ah, not much compared to the previous version", don't understand this release as a feature release, but instead as the foundations that we'll build upon and then release new feature releases. It was a huge amount of work to improve underlying system, rewrite everything in Pyhton, write bindings to new libraries, rethink how some things should be done.

For those Free and Open Source developers: unfortunately we'll keep it closed for now (same talk as before), but at least much, much more of our work is open source that you can already use and benefit from our improvements: The whole graphical ui is based on EFL, media scanner is based on lightmediascanner, UPnP will be based on BRisa, video player is MPlayer...

Presentation slides from ELC-2007 available

Ok, it's a long time since my last post, but I'm really busy improving EFL, developing Canola (the whole team is, that's why you see no posts from them either) and also with some presentations about EFL.

Today I've presented at CELF Embedded Linux Conference 2007, Linz, Austria, the title was "Fancy and Fast GUIs on Embedded Devices" and is now available online at http://talks.gustavobarbieri.com.br/efl/elce2007/Fancy_and_Fast_GUIs_on_Embedded_Devices.odp Maybe it's useful to you (trying to get your managers to use something else than GTK/SDL for embedded devices?).

The conference was really great, I've met some great hackers that I just know from mail/IRC and could talk again with others that I already knew from other conferences. Free software hackers are usually very kind.

People's reaction was quite positive, most people realize that trying to modify GTK to fit desired effects or building on top of SDL are both way too painful. I'm not saying that these are bad and nobody should use it, but that they have their own niche and trying to have them to cover the whole word is a bit difficult.

Related to this, Carsten Haitzler (The Rasterman) (EFL lead developer) was officially announced as "Lead Architect - Graphics" at OpenMoko, a previously GTK-only device. He will not vanish with GTK, but instead create nice native applications, full of special effects and so, that's cooperation, each technology doing their best to achieve the final goal: usable interfaces.

UPDATE: Video (OGG/Theora) is now available: http://free-electrons.com/pub/video/2007/elce/elce-2007-gustavo-sverzut-barbieri-fast-fancy-gui.ogg, http://video.google.com/videoplay?docid=-2292516949813732934&hl;=en

Nokia: just give us the right hardware!

Ok, maybe now that Apple released it's products (iPhone, iPod touch) with incredible hardware power (cpu, gpu, ... and a smaller screen, or less things to paint) Nokia will think a bit more for the next devices. We (developers) need more power to do the fancy stuff, or at least non-bogus hardware.

We already have to work on missing infrastructure bits, having us to work around these technical hardware problems is no fun!

Impressed by 3rd party iPhone apps

Marcelo got an iPhone and I could use it for a while, my initial idea was to compare my virtual keyboard with their (mine is "better", easier to type, because the screen is larger!), but I also paid attention to graphics effects, and other things that I could use to improve my own skills... BUT what impressed me most was the number of 3rd party applications already available for it!

Apple has invested no money to create a public development infrastructure, community resources and not even a cross compiler toolchain. Actually, they tried hard to avoid people writing native applications, but even with these factors they got to the point they have more useful (IMO) applications than N800, with Nokia creating Maemo, funding scratchbox, tons of resources to improve Gnome and related tools.

Sure, they already ship with great apps by default, as an excellent media player and browser and simple but good enough mail client, maps, PIM... but you can already install game emulators that works (I'm talking about on screen controls, due multi-touch) and even some web applications through Python/Django. See some apps at http://iphoneapplicationlist.com/.

Although there is no documentation on HIG or even widget API, these applications look integrated, they benefit from graphical/physics effects, support screen rotation and more, and if you consider the timeline, it is 2 months old and the cracks to install home brew software is even newer!

I still have no conclusion on what we did wrong and they right, but IMO things are more favorable for them. Maybe it's about they touching the hackers egos (forbidden is always cool), maybe it's about better infrastructure, ... What's your opinion?

PS: the device is neat, things seem well integrated, they did just the simple things, but did they right, really. Their attention to details, not just for user interface, is incredible.

iPhone-like virtual keyboard for n800

Apple doesn't sell iPhone here in Brazil, we wanted to evaluate its virtual keyboard usability... our solution here at INdT: write one using Python and Edje!

The plan was to do it in less than one week, it took a bit more since I had to work on other things, fix some bugs with the EFL itself and also implement new features (like pointer_mode: NOGRAB) and also did the initial graphics, later replaced with Ian's nice work. It does no type prediction, word hint, cursor navigation or key composition (accents are not possible).

Summary is 230 lines of Python, 1110 lines of Edje, including comments and blank lines, and a really easy to type keyboard.

EDIT: I removed n800 easy install and packages, this was meant to be a simple EFL demo, but now we have better demos and applications using EFL, like Canola and Carman.

Ottawa, here we are!

After 24h travel (Recife to São Paulo, then to Toronto, then Ottawa), Marcio, Aldenor and I arrived. We plan to join other attendees at Vineyards bar tonight, let's see who we find there.

They say it's hot, but Recife, even in winter, is much more hot than here, at least here is kinda dry.

Ottawa, here we go!

I'm heading to Ottawa Linux Symposium, my plane leaves in a few hours!

It's my first time in Canada, any suggestions for 2-3 spare days there? I'll stay from 26-June to 3-July.

Edje demo on N800: application launcher mockup

This is a demo I wrote today to demonstrate Edje running via a 60 line python script. The edje file itself is about 190 lines and kind of simple, yet complete in features.

Code can be found at http://www.enlightenment.org/viewvc/e17/proto/python-efl/python-edje/examples/evas-demo/

EFL on N800: packages and video!

As promised, packages for efl-core, python-efl-core and expedite!

This is expedite running on my N800, movie by Kenneth and myself.

I've setup a repository at http://www.gustavobarbieri.com.br/e17-n800/ with ARMEL packages: expedite "single click" install, efl-core and python-efl-core, libraries should be installed from Application Installer using "red pill" mode (they're not user-visible) or command line:

echo "deb http://www.gustavobarbieri.com.br/e17-n800/ bora free" >> /etc/apt/sources.list
apt-get -y install efl-core python-efl-core

I've some code examples at https://garage.maemo.org/svn/maemo-efl/examples/ and http://barbieri-playground.googlecode.com/svn/efl-tests/, Kenneth should post some others soon.

Evas on N800: blazing fast!

After some time working on 16bpp engine for Evas, I finally managed to get something working, and working really fast!

The code, which I've already commited it to CVS, does transparency, scale, colorize, operates on images, rectangles and fonts (gradients, polygon and lines are postponed due reduced usage).

Those interested in porting apps written with Enlightenment Foundation Libraries can start to port, since I've also made it available from Ecore_Evas. [if you are such interested guy, let me know]

Sorry for no videos, but I have no camera in hand today, maybe tomorrow I can post one. In meantime, you can get your scratchbox and compile it straight from CVS:

cvs -z3 -d :pserver:anonymous@anoncvs.enlightenment.org:/var/cvs/e checkout e17
compile e17/libs/evas and e17/apps/expedite, run expedite -e x11-16 to use my engine.

Now observer at FSFLA

Last week I was invited to become an observer of Free Software Foundation Latin America and I did accept.

Observer are not meant to do much, basically track the mail list (one more, oh god!) and provide feedback, getting used to their work flow so maybe you can turn into a more useful member if required.

"But you're hacker, WTF you'll do there, waste your code time?" you may ask (I asked that myself). Well, I'll try to keep focus on SW-related things instead of political issues I really dislike. FSF is about software in the end, and one of the few organizations that have some power to help us hackers... just hope that discussions were like those technical I was used to :-(

Evas now using rectangle split and merge!

As you might know, I'm working on getting Evas running as fast as possible on Nokia N800 but for the last 2 weeks I was being annoyed by a problem related to selecting areas to get updated by X11... I think some improvements now!

Every scene manager or drawing canvas, in order to be fast, must not redraw or ask the underlying system to redraw parts that didn't change since last iteration and we shouldn't draw the same area twice (if it's opaque drawing).

This can be solved by splitting rectangles so overlaps are removed, but this can generate a lot of rectangles, and since you have to communicate with X11 and even do some operation on this rectangles yourself, the more rectangles, the worse...

So you also need to merge neighbor rectangles, maybe let some rectangles overlap, if this area is not that big... or even merge rectangles that are not exact neighbors but have an acceptable error if you get their bounding box.

Problem: complexity of these algoritms are quadratic, at least if you compare on 2-by-2 basis.

In order to avoid this, Evas did a really nice trick: use a boolean matrix to represent the screen segmented in tiles (8x8 by default), when you add some rectangle, mark with "True", when you delete, mark with "False", when you need to discover rectangles, walk the matrix and as soon as you find a horizontal "True" span, you walk next lines to see if you can make this rectangle taller. This makes things really easy and complexity is linear on screen size ((width * height) / TILESIZE²).

On PCs, with huge data caches and enhanced branch prediction, this is really fast, but on N800, OProfile points both evas_common_tilebuf_add_redraw() and evas_common_tilebuf_get_render_rects() as time consuming. Problem is that although complexity is O(n), n = (800 * 480) / 8² = 6000, and we walk this amount even if there is no rectangles to paint! If you have the full screen to render, you'll walk it twice, so 12000 iterations.

As usually we have small amount of rectangles, and usually these overlap, we can get these merged and n will be reduced, with O(n²) worst case but something around O(nlogn) for common cases not being so bad.

So after discussing and drawing many ideas with Chenca, we found some good speedup cases and I wrote a small test in Python (pygame test), then in C (sdl test) and then moved it to Evas. Rasterman did some tests and he liked it, so he accepted my patch and code is already in CVS, it's used by default but you can have the old code by commenting out "#define EVAS_RECT_SPLIT" from evas_common.h.

I'm still looking for improvements and speed up changes to this algorithms, ideas?

Code can be downloaded from: http://barbieri-playground.googlecode.com/svn/rectangular-areas/ (SVN)

More details:

  • I keep rectangles in an unordered list, so yes I do compare rectangles that are distant on screen;
  • We've already considered using some smarter data structure, like R-Tree or Quad-Tree, but probably they would add more overhead than it worth. Probaby finding ways to simplify rectangles and keeping number of rectangles low is better (try to use bounding box more often);
  • I want to implement some checks to avoid generating 3 splits on fuzzy split, if one split is to generate 3 new rectangles, it's better to invert the order and generate just 2;
  • I want to avoid rectangles with Height/Width >> 1.0 to overlap others, overlaps just worth to rectangles with small height;
  • Evas implementation downsize resolution in order to help number of rectangles being small, to avoid 1px rectangles and to keep buffers aligned (my focus is 16bpp system, so 2 bytes per pixel, 2 pixels is 4 bytes, N800 memory alignment).

OProfile and Maemo (N800)

keywords: oprofile, maemo, n800, omap 2420, arm11, kernel, vmlinux, zImage, arm1136j-s, arm1136jf-s

Finally I managed to get OProfile running on my N800, it was not that easy, so I'm blogging about it to save your time. Packages are provided at: http://arm1136j-s.googlecode.com/svn/trunk/maemo/utils/oprofile/

Steps:

  1. recompile your kernel following official maemo howto. I've set:
    • CONFIG_PROFILING=y
    • CONFIG_OPROFILE=y
    • CONFIG_DEBUG_FS=y
  2. flash your new kernel with: flasher-3.0 -f -k arch/arm/boot/zImage
  3. download and compile binutils. It's development files are missing in scratchbox, so you need to download it and compile yourself. I've downloaded sardine version:
    • wget http://repository.maemo.org/pool/sardine/main/source/b/binutils/binutils_2.16.91cs2005q3.2-5.osso1.tar.gz
    • tar xzf binutils_2.16.91cs2005q3.2-5.osso1.tar.gz
    • cd binutils-2.16.91cs2005q3.2
    • ./configure --prefix=/usr/local && make && make install
  4. download last user land OProfile CVS (0.9.2 didn't work for me).
    • cvs -d:pserver:anonymous@oprofile.cvs.sourceforge.net:/cvsroot/oprofile login # no password, just hit ENTER
    • cvs -d:pserver:anonymous@oprofile.cvs.sourceforge.net:/cvsroot/oprofile checkout oprofile
  5. apply patch to enable arm11 support to user land OProfile CVS. This patch was provided by Riku Voipio but doesn't apply to CVS (2007-05-22), use my fixed version instead: oprofile_arm11_cvs20070522.diff
  6. configure: ./autogen.sh && ./configure --with-binutils=/usr/local --with-kernel-support --prefix=/usr/local
  7. create "package" with files to copy to device: make DESTDIR=/tmp/oprofile-install install && cd /tmp/oprofile-install && tar czf /tmp/oprofile-install.tar.gz .
  8. on your device, insert a MMC with good amount of room (64mb or more), and link /var/lib/oprofile to it:
    • mkdir /media/mmc1/oprofile
    • ln -sf /media/mmc1/oprofile /var/lib/oprofile
  9. I use the following /root/.oprofile/daemonrc (for some strange reason the last KERNEL_RANGE value was not being computed as the script expected and I could not set SEPARATE_LIB using "--separate=library"):
    • KERNEL_RANGE=c0023000,80046000
    • SEPARATE_LIB=1

Binary package oprofile_0.9.3_cvs20070522.deb already provides /root/.oprofile/daemonrc, setups /var/lib/oprofile link to available MMC and also provides /root/vmlinux with debug symbols.

On my desktop I use kcachegrind to present data in more pleasant way, just use op2calltree to convert output from opreport -gdf.

UPDATE-2007-07-11: Eugene is working on Kprobes and SystemTap for N800, check it at his blog http://eugeneteo.livejournal.com/7002.html and http://eugeneteo.livejournal.com/6172.html

GIT is really great

I've been using GIT as version control system for my Python bindings for Enlightenment Foundation Libraries and I'm really enjoying.

As most FOSS developers, I've used CVS for some time, then when SVN appeared I've tried and liked it very much, lots of problems that I had with CVS were fixed, but one remaining problem stand still: offline commits. Nothing sucks more than working with huge changes offline and having to maintain the split patches yourself... or creating a local SVN to do it for me and then producing patches and applying to the other repository.

I've started my bindings and hope them to get hosted on E.org, so I wouldn't bother opening a SF project for it, however I don't like to work without version control system. I was about to issue "svnadmin create" when I was informed about ruby bindings and I saw they use GIT, so I opted to give it a try.

The first thing you will notice is that it's damn fast! I also like some utilities they provide, that makes day-to-day development cool. I still cannot say how much hurdle is to work collaboratively and neither if I like to pull, push, merge or what, since I'm working alone, but seems that the worst case will be just like CVS/SVN, but there is a comparison of Git and SVN.

If you have not tried GIT yet, checkout the introduction tutorial, "Git crash course for {CVS,SVN} users", "Everyday GIT with 20 commands or so" and "Introduction to git-svn".

Reviving Eagle!

I'm giving new life to Eagle. It was almost dead, I had no time to write code and even keep its web space.

But these last weeks I took some time and moved it to Google Code project hosting, created a Google Groups and fixed some bugs with its site. Basic information:

Those new to Eagle: it's an abstraction layer atop existing Toolkits, currently GTK and GTK/Hildon/Maemo are supported. It has a simple, coherent and easy to use API. It does impose some limits in order to keep it simple, so it's not as flexible as GTK or QT, but it's much easier!

Maemo version still misses menu and toolbars, but I plan to add them this week, then I'll release packages and try to get them in repository.maemo.org/extras.

New maemo player: "catota"

Some time ago, just after Morpheuz posted "Prison Break: Freedom for your videos", people were asking for UI being able to play it, so I joined the bandwagon and started to write a MPlayer frontend in Python, "Catota" was born. Catota main screen, with menuCatota, which means "snot" in Brazil (see README), is a quick hack and will not evolve as yet-another-player, however it's usable and extensible, so I can continue my experiments. As the screenshots show, it has a plugin system to enable various sources, featuring now "GMyth Streamer" (broken, see below), "Local Files" and "Pass Through" (to pass anything to MPlayer, like smb://a/b/c). These experiments were really useful for both Catota and GMyth Streamer. I've discovered that MPlayer for Maemo now uses dspmp3sink by default, and that sucks a lot! Hell, just being back to ffmpeg codecs and esd output solved a lot of problems, that's why Catota ships with this by default. Also, MPlayer crashes more than expected when using Xv output and toggle fullscreen. On GMyth Streamer front, what Artur (Morpheuz) did great was to discover MEncoder settings, but his server was a bit bad (we share the same house here in Recife, so I know he did the entire code on a Sunday night!), so I got some knowledge with Python and its libraries (SocketServer and friends) and give him a hand, providing a Catota-Server as example. This Catota-Server is now the base of GMyth Streamer! Great! (However now I need to update GMyth Streamer source to use the new schema). On the Catota features, I did a really nice thing that should be adopted by every Maemo application: auto-save every input field. Catota always remember last volume, mute, selected file, entered URL... It just sucks having to set those every time you start the application. Catota Preferences Catota welcomeSource is available at: http://barbieri-playground.googlecode.com/svn/maemo/catota/ (SVN)

Generating Gantt graphs from TaskJuggler projects without using its UI

Last week I was faced with a problem I had 2 years ago: generating Gantt graphs for our projects. While at IBM/LTC, I found TaskJuggler to be a nice tool, very developer oriented, but it lacked means to generate nice graphs... I've requested this feature in 2005, it got implemented by Chris, but one issue still remain: how to generate those automatically, without any UI, and in a scalable format to be used in our LaTeX reports and maybe some multi-page poster.

So this weekend I implemented this tool and it's quite usable already! It's a Python+ElementTree+PyX application that parsers TaskJuggler's XML (tjx) and output PDF, PS or EPS, with PDF and PS being able to output segmented, multi page, poster documents.

Chenca is developing a more report oriented graph, generating LaTeX tables instead of drawings, he promised to publish it as well ;-)

Source is available at: http://barbieri-playground.googlecode.com/svn/python/taskjuggler-utils/ (SVN)

PyGame "smart" Group and Sprite implementations

These days Marcelo asked for a prototype in Python and SDL (PyGame) to work on Nokia/maemo devices.

After a preliminary attempt using pygame.sprite.OrderedUpdates I realized it was way too slow. Since heavy operations are handled in C by SDL itself, that shouldn't happen.

After some hunting and code review, it was the way PyGame's OrderedUpdates (and RenderUpdates) does clear() and mark regions to be updated after draw() that was the culprit. Both clear and updated rectangles may overlap, causing SDL to operate on the same area more than once, which is awful.

So Chenca and I started to work on a way to split rectangles that overlap into smaller pieces, avoiding more than one covering the same area, I've implemented this algorithm in Python and now the code runs about 2-3 times faster :-)

I've written 3 new classes to help development with PyGame, you can get them and the example at my SVN: http://barbieri-playground.googlecode.com/svn/pygame/smart_render/

Chenca and I will try to provide some other utilities to make pygame development for Maemo easier, like these rectangle split in C, functions to blit images with per-pixel alpha faster and also one to blit per-pixel images added to image alpha (enable fade in/out of elements with pixel transparency). Stay tuned.

UPDATE: SDL (and thus PyGame) already provide accelerated blit functions for 16bpp, just enable RLEACCEL flag of your Surface. I'm using the following code to load images (check SVN link above):

img = pygame.image.load(filename)
img.set_alpha(255, RLEACCEL)
img = img.convert()

Bossa Conference: bring your tools for Maemo Challenge!

Guys,

At Bossa Conference, 12-14 March, INdT will promote a "Maemo Challenge" to award those that enjoy hacking this platform. It'll be based on things faced and discussed extensively within documentation, blogs, IRC and mail lists. If you're tuned on these, you might enjoy. Be sure to bring your laptop armed with scratchbox and maemo rootstrap! Maybe you can win a Nokia N800 ;-)

Playing HandsFree with your Linux box

These days we came with the neat idea of using our Linux boxes, be desktop or N800, as handsfree unit for our cellphones... but how to do it?

There is no known open source handsfree profile other than Trolltech's Qtopia, so we did some quick hacks on a draft we have found, both with python-bluez and C that lead us to create the "selfone" project on garage.maemo.

"Selfone" is in its early stage, we're still testing on some phones we have around, but is much cleaner than the original draft. We already have bt-handsfree (.c, .h) module that implements the RFCOMM and bt-sco (.c, .h) for SCO (synchronous connection oriented) audio exchange. These modules are written in pure C (with minor GNU extensions) and provide clean and easy to use interfaces/callbacks. We hope to deliver some GObject wrappers later so it's easier to use with GMainLoop.

We have some basic test application that allows us to work as handsfree unit, dialing, identifying calling lines, accepting or rejecting connections, and our primary goal: be usable as speaker and microphone of your cellphone (on desktop, not N800). One guy is integrating with libgnokii so we can identify calling lines or dial using names instead of numbers.

There are still much to do: test and work around problems with different cell phones (you like how standards are implemented, don't you?), figure out how to route SCO data to HCI instead of PCM on N800 (and OpenMoko?), write sound backends properly (except by sound_file, others are totally kludge)... but we should get there, stay tuned!

Last but not least: we're looking for developers!

Bossa Conference: SDK matters

SDK will be powered by great speakers, like Chris Lattner from LLVM fame, Koen Kooi from OpenEmbedded, Mika Leppinen from Maemo, John (J5) Palmieri from RedHat/D-Bus/OLPC, Mika Rytkonen from Open-C, Leonardo Santagada from PyPy, Johan Dahlin from PyGTK... Ok, enough names! What's interesting? Chris works for Apple, he is the core developer of LLVM, which includes ARM backend, being helped by Lauro from INdT. It can be integrated into GCC as backend or "middle-end" and was even considered as a replacement for its current implementation, GIMPLE. Many things makes LLVM interesting, like SSA internal representation (also done in GCC4), vectorization (MMX, SSE), Link Time Optimizations (LTO)... It's also being considered as backend for PyPy, enabling Python to run faster... you know, develop fast and run fast :-) Koen will cover OpenEmbedded, an effort to make cross-compiling, packaging and assembling common infrastructure easy. It's already being used by some projects and is considered for Maemo. John will give hints on when and how to use D-Bus to help processes to interoperate. D-Bus is advocated by freedesktop and is being used by KDE and Gnome. It's a key component of Maemo, which uses it from Address Book to Browser to Chat. Nokia guys will present Open-C, the POSIX API for Symbian, enabling us to port some of our applications to it and also enabling Symbian developers to get used to our dear POSIX. God knows if they'll have to move to Linux in future... it's better to be ready when (if) that time come! ;-)

Bossa Conference: UI matters

Bossa Conference is almost there and we have great speakers for many areas. In this post I want to bring UI guys to your eyes. INdT has managed to get many well-known names together. While Rasterman will talk about Evas, a technology Canola will use in future versions, we'll also bring Zack Rusin, the guy behind Qt4 graphics system, including Qt/Embedded, Qt/OpenGL-ES and Qt/OpenVG, and you all should know that N800 has unused OpenGL-ES hardware acceleration... don't you? ;-) Together with the dear Canola team (like myself, mind you...) we should have a great deal of in-depth developer information. On the UI concept side, we'll have Juho Paasonen and Kalle Vahlman, both from Movial, and Marcelo Oliveira, from INdT and Canola fame, that will have a chance to discuss new ideas and talk to tech guys mentioned above. So, regarding UI matters, Bossa Conference should rock!

INdT and Maemo rocks again: Carman is out

INdT released a new product for Maemo: Carman. It's an application focused on car-lovers, in their own words "For the hobbist and the tuning addicted".

Open Source matters: Carman is LGPL! Download, Hack and Distribute it!

Canola 1.0 beta2 will be released tomorrow!

The second beta of Canola is to be released tomorrow! Many great improvements, bug fixes and N800 support!

Stay tuned!

Now back to test... ;-)

N800 is a great improvement

So, I'm using my N800 daily, doing chat, browsing, playing media, as an alarm and I can say: it's a great improvement over 770.

Opera browser, the main application, is much faster and reliable. Just now I can use Gmail and other web applications without problems. Flash is still bad for youtube, but suck less for sure.

Thumb mode everywhere is cool, but could be better used, mainly on application menus, where it should be wider, possible taking the fullscreen (since you can't do much while menu is open), more GUI issues were pointed in a nice review by Sean Luke.

Media player is much improved and new possibilities are open due split of Gstreamer elements that were codecs and were outputing video using DSP and now are just codecs, allowing you to use Xv or X11, enabling On-Screen-Display, for example.

However, not everything is good: battery could last longer and video conference could be easier to setup with non-n800 peers and use Jabber/Gtalk instead of nokias own servers, that register your "screen name" with a weird number/hash at call.tableteer.nokia.com. Also bad is the (d)effect that you get from a faster processor and lack of sync between applications and X/video-driver: sometimes you redraw the screen while driver is updating it, then you may have half top on the previous animation frame, while the bottom on the next frame, giving an weird result. This happens in every application, more noticeable on horizontal moves, from SDL games to Opera browser (try drag and move pages). Most of issues are software-related and may go away with software upgrades.

Summary: upgrade ASAP.

Hurry up! Code, compile, test... Canola 1.0 beta2 almost there!

So, I'm quite incommunicable these days, no blog posts, no IRC, IM or mail... that's because we're heading to Canola beta2 and you know: do { code(); compile(); test () } while (1);

What should you expect in Canola 1.0 beta2:

Internationalization (i18n) support
Canola now provides i18n support and has been translated to many languages, from portuguese to russian. Just canola-conf (web-ui) will lack this, support is already there, but we still miss a final version of new HTML/JS to have translators to do the job, maybe this will go in beta3.
Many bugfixes
Over 30 bugs were reported to our tracker, just 6 are still open but most could not be fixed in our side. We removed some memory leaks, reduced CPU usage, fixed some bugs with player, improved UPnP and DMAP support and we'll ship with canola-conf binding to localhost by default.
Many improvements and features
Although we're in beta, we've implemented a lot of features, things that you've requested and things that we were missing. That's a huge list for sure, but you may expect, at least:
  • Non-fullscreen video player, with seek support
  • Internet Radio now updates song information
  • Scroll position indicator, really useful on huge folders
  • Smaller canola applet
  • Use adjacent JPEG if no album art embedded (cover.{jpg,png})
  • OPML support in configuration tool (IRadio, Podcast and Photocast)
  • Improved "Audio Library" layout, "Songs" is the first item
  • Random/Shuffle list of all songs, albums, artists and playlists
  • Dynamic playlists with all known playlists, both sequentially or joint/unique
  • Improved theme capabilities (font color/size/shadow)
  • Lots of configurable parameters using GConf (albeit no GUI for those yet)
Wow, just now, while looking at our closed bugs, SVN log and other resources I see how much we changed. It seems to be even more stable, but that's the test(); step, we need to do it even more to improve the situation and we count on you, testers, to help... stay tuned, it may happen soon!

As a final note, we'll release the 770 version now, but we will support both 770 and N800 for some time since the former is still good enough what we have now, but we may have unique features for N800 (camera, for example). Our N800 version is almost ready, but I'm still trying to solve the problem with Vertical Sync, causing shearing/tearing which is much more noticeable now due the faster processor we have.

PS: Since Thoughtfix post "Canola as an In-Car Media Player" I'm running Canola in my car and that just make me think about one thing how long will I wait to make Canola an interface for my 60Gb iPod and replace my old-fashioned cd-player? Using libgpod and this hack to use devices in usb-host mode, it may happen... just need to release the next beta and start this... what do you think? ;-)

Best buy this year: Bluetooth Mouse!

Some days ago I bought a Logitech® V270 Cordless Optical Notebook Mouse for Bluetooth® to use with my IBM T41 laptop. It's really great to be able to use a good mouse without any wires, connectors... nothing! And you can even turn it off to save battery. I can just recommend it!

Kubuntu Edgy works really well, no troubles so far, just need to set HIDD_ENABLED=1 at /etc/default/bluetooth and pair. Next time you'll just need to turn it on and it will work automatically.

Stupid decisions that makes Linux "difficult"

Three days ago I got some spare time and rebuilt my parent's "server" machine and moved away from Debian to Kubuntu.

The decision to move from Debian to Kubuntu was based on the fact that this "server" is also used as workstation, running KDE with Firefox and Amarok, among other KDE applications, and Kubuntu ships new KDE and other applications much faster than stock Debian.

I've downloaded Edgy, burned the CD and started the install on empty HDD, really easy and fast to install, it worked like a charm.

Then I started to install apache, mysql and php, they're required to run the web-apps I've developed. Also worked like a charm... just few minutes to get everything up and running, without problems.

Then I went to configure the printer (cups)... what was really easy before and never took more than minutes, turned to be my pain for the last 3 days! First I tried to just copy my old cupsd.conf/printers.conf over and restart, no go. Then I backed up to original files and tried KDE's (used to be) excellent printer management interface... which started to freeze, without any glue I did fallback to CUPs web interface (http://localhost:631/)... which is great and always work, my last resource... but then I found out that it also don't work.

After listening half hour of blaming GNU/Linux being difficult by my father and my girlfriend, I started to dig what happened to that used-to-be-easy area that is now failing and giving everybody a bad impression. I started running strace and trying to figure out why it was looping forever, consuming 100% CPU. Then I downloaded the source code ubuntu ships. After many hours hunting the problem, I've found that

/usr/lib/cups/daemon/cups-check-pam-auth
was owned by cupsys:shadow, but "cupsys" is not in the "shadow" group, thus the suid bit didn't work and pam was not allowing authentication. Just adding "cupsys" to "shadow" group solved it:
adduser cupsys shadow

I was about to report this on launchpad, then I found bug #47892 describing the same problem... first I did feel stupid, because it title contain the same error message my /var/log/cups/error_log "cupsdAuthorize: pam_authenticate() returned 7 (Authentication failure)", but then, reading the bug comments I see that ubuntu, the distro that hopes to make things easier, was making things much difficult without any acceptable reason, a really stupid decision IMHO, how can a distro think that users will read /usr/share/doc/cupsys/README.Debian.gz, possible many Ubuntu users don't even know what Debian is or why they should read a document with that name...

As I said in the bug comment, do it right, or just don't do it. Being incompatible without any good reason is not acceptable. They claim this is to make things more secure, but really, cups never did that bad in security and just changing CUPS to listen to localhost by default would suffice. I'm not the only one that had this problem, and I'll not be the last. I hope this blog entry get indexed by google, so next time one search for "cupsdAuthorize: pam_authenticate() returned 7 (Authentication failure)" he will find, because I didn't.

For those that wonder, it's quoted "server" because the machine is actually a low-end PC (900Mhz Duron, 256mb), but it used to run my http/mysql/cyrus/postfix/svn servers, aside from my parent's services and is also a workstation he uses for some web-applications I've developed, together with printing from firefox, and last but not least, he plays some music using Amarok... yeah, Linux can do so much stuff with so simple hardware!