Twitter client for Maemo in Qt + Python: call for developers and UI designers

Linux, Maemo (EN), MeeGo, Programmazione, Python, Qt 14 Comments »

Introduction

My name's Andrea Grandi, I'm italian and I'm a Maemo user/lover/contributor since the Nokia 770. I love Python as development language and few months ago I also gave some contributions to the PyMaemo project.

In these days I had the idea to start writing a Twitter client for Maemo with a precise direction in my mind. I'll try to explain all my reasons here. First of all I've to thank the author of Mauku client. I use it since its first version and I'm quite happy with it. Then, why do I want to write another one?

  1. Maemo (MeeGo) is moving to Qt and for this reason I'm going to use Qt, while Mauku uses Gtk.
  2. I'm learning Qt and what is better than writing a complete (but not too complex) application to learn better?
  3. Mauku is not free as lot of people could think. Reading the source codeyou find this "You are NOT allowed to modify or redistribute the source code.", while I want to write a client and release it under GPL2 or GPL3 license.
  4. Mauku is not updated since some months and we have no news about it.
  5. I love Python and I like to write free software in this language.
  6. I want to give to Maemo a stronger contribute.

My request for help

Before lot of people start writing their own client resulting in 4-5 twitter clients for Maemo, why don't we join our strength and work to a common project? I'm not a Python expert nor a Qt one, but I've some experience as project/team leader and since this is not a complex project, I would be glad to lead it. So, I'm looking for Python developers, Qt developers, UI designers and whoever want to contribute to this project. I still have to find a good name and logo for this application.

Who want to help me?

Nokia N900: reboot loop after PR 1.1.1 upgrade is not a firmware bug

Linux, Maemo (EN), MeeGo 13 Comments »

Few days ago I published some notes about my personal experience with PR 1.1.1 firmware upgrade in Nokia N900. In particular my device got an infinite reboot loop after upgrading the firmware and I had to flash the firmware image from scratch to fix the problem. Today I was kindly contacted by Max Waterman (I suppose he works for Nokia) and he explained me what was the problem. It was caused by a little bug in Harmattan UI demo and they fixed it (the fix is already available in extras-devel).

No surprise for me: extras-devel contains unstable packages and if user enables it, he does at his own risk. The most important thing is the fact that the official firmware without any unstable application doesn't suffer of this problem at all. The thing that really impressed me so much (in a positive sense) it's that I was contacted privately by a Nokia developer apologizing for the bug (no problem man, it's part of the game if someone want to test extras-devel software) and explaining that they already fixed it.

This is what I like of Maemo (or should I already call it MeeGo?), I really feel to be a part of it!

Nokia N900: some problems with latest PR 1.1.1 firmware

Linux, Maemo (EN), Recensione 13 Comments »

I don't know if it's just a case or if I'm the only one who had these problems, but I'll report them anyway, maybe somebody had my same problem and we could try to prepare a proper bug report to make the Maemo team fix them.

Infinite boot loop after upgrade

First of all I have to say that before upgrading to PR 1.1.1 I checked if I had enough space on the rootfs. I only had 27 Mb and so I decided to remove some unused applications, deleted some *.deb in /var/cache/apt/archives and disabled extras repositories. Of course I also did a backup of all my configuration. After the cleaning operation I had near 60 Mb free on rootfs, enough to install the upgrade.

I closed all running applications, started the application manager and began the upgrade. After the upgrade was completed, the device did a reboot... then another one, then again, again.... until I had to remove the battery to stop it.

Conclusion: I had to re-flash the device with the latest image to make it work again.

mafw-dbus-wrapper taking all the CPU

I was watching a video (using subtitles) and after some minutes the whole UI became unresponsive. Strange because I already did this before without having any problem. I tried to check the problem using "top" utility from terminal and I saw that there was a mafw process (mafw-dbus-wrapper) that was taking 80-90% of CPU. My fault is that normally there are at least 3-4 , mafw-dbus-wrapper processes and I didn't check which one was causing the problem. Anyway I made a screenshot, just in case it can help.

I hope this short report can be useful to help Maemo team to fix or at least investigate what happened. Just leave a comment or contact me if you need more informations.

Maemo 6 (Harmattan) UI Screenshots

Linux, Maemo (EN), Qt, Recensione 7 Comments »

Nokia has published a demo application for N900, available in extras-devel repository, that shows a preview of Maemo 6 (Harmattan) user interface. Here there are some screenshots of the demo:

Demo application main window

Question dialog

Text entry dialog

Progress indicator

Information banner

Event banner

You can find more pictures in my Flickr album. Please note that installing this demo will also install Qt 4.6.2 on the N900 and about 52 Mb are required.

Fon: how long are you going to play tricks on users?

Linux, Recensione 5 Comments »

Introduction

As many of you already know, Fon is a spanish company that some years ago had the interesting idea of creating a wifi community to share the Internet connection. The idea is quite simple: each "fonero" buy a Fonera (the router sold by Fon), register it on the Fon system and get a username/password. If the fonero travels around the world he's able to connect to wifi signal of other foneras and browse the web for free.

When I bought my first fonera few years ago, I was one of the first people in my city. I bought it because I was really beliving in this project. During these years Fon produced new models of fonera and I bought each of them (the WRT54 router, Fonera, Fonera+, Fonera 2.0g, Fonera 2.0n ecc....). Since first year, the Fon community has grown a lot and now there are a lot of foneros around the world.

Actual situation

Few months ago Fon launched a very interesting product: Fonera 2.0g. Thats's not only a router. Fonera 2 is capable of managing torrents, rapidshare downloads, uploading photo on Facebook and Flickr, and much more. Whats's wrong with this product? It's very unstable! There are a lot of users that bought this router when it was anounced and they're still waiting for a lot of bugs to be fixed by Fon developers team (composed by only ONE person!). Why users had to wait so long?

Simple! They were working to Fonera 2.0n! Wow! Faster router, more RAM, 4 ethernet port, wonderful! But... another very unstable router! And with unstable I mean: it disconnects/reboots often, connection is unstable, applications don't work ecc.... I'm talking about a 79€ router, not about something that users had as preview product. Me and other users were still waiting for an uograde when... Fon announced a new product! Yes, another one!

Fon priority is not to fix a product that thousand of users have already bought. Fon priority is to produce and sell a new product!

Conclusion

It could be only my opinion, but I don't trust you anymore Fon! I'm really disappointed about your behaviour you had with your customers. I've already spent (wasted) a lot of money with your not-working products and I'm not going to buy your products anymore! I'm tired of being illuded by your promises: how long are you going to play tricks on users?

UX meets Code hackfest in December @ Barcelona: confirmed!

Linux, Maemo (EN), Programmazione 1 Comment »

Quim Gil just confirmed the UX hackfest in Barcelona for 4, 5, 6 december: http://talk.maemo.org/showthread.php?t=33719

What is UX hackfest?
It's a three days meeting for Maemo developers, UX experts and people who want to learn about designing good user interfaces.

When?
On 4, 5, 6 december 2009

Where?
Barcelona, Spain. The exact location has still to be confirmed, but it should be http://citilab.eu

How many people invited?
About 50 people invited (Maemo developers, UX experts, ecc....)

If you are a Maemo developer and you have good user interface designer skills, this is the place for you.

If you are a Maemo developer and you are not a UX expert, this IS anyway the place for you: you'll have the possibility to talk with experts and improve your knowledge about UI design.

Anyone interested, please join the discussion here: http://talk.maemo.org/showthread.php?t=33719

Update 3/11/2009 - 16:00: a wiki page with all information has been created here: http://wiki.maemo.org/Maemo-Barcelona_Long_Weekend
please add your name/data to the page if you requested to join the UX hackfest.

Writing Python bindings of existing C libraries – (3) – Building and Installing with distutils

HowTo, Igalia, Linux, Maemo (EN), Programmazione, Python 1 Comment »

In the last post of this series, we saw how to write a simple binding and we finished to build and install it manually. This is of course not a good way to manage the building/installation procedure.

In Python we can use a library called distutils that let us to automatize the building and installing process. I'll use the foo source code to create the package, so it will be easier to understand.

Using distutils

All we have to do is to write a setup.py file similar to this one:

from distutils.core import setup, Extension

foomodule = Extension('foo', sources = ['foo.c'])

setup (name = 'Foo',
       version = '1.0',
       description = 'This is a package for Foo',
       ext_modules = [foomodule])

As you can see, we have to first import needed modules with: from distutils.core import setup, Extension
then we create an entry for each module we have (in this case just one, "foomodule"). We then call the setup() method passing it all the parameters and our setup.py is complete.

Building and installing

To test it we can try to build the package in this way:

python2.5 setup.py build

if we want to install the module in our system:

python2.5 setup.py install

References

PyMaemo (Python for Maemo) second beta release for Fremantle

Igalia, Linux, Maemo (EN), Programmazione, Python 1 Comment »

The PyMaemo team is pleased to announce the second beta release of PyMaemo for Fremantle!

This new release is available through the extras-devel repository, see installation instructions in
http://pymaemo.garage.maemo.org/sdk_installation.html#fremantle

What is it?

Python for Maemo (PyMaemo for short) main objective is to make possible to use Python programming language as the scripting and development language for Maemo Platform, providing a better alternative for fast prototyping and programming in Maemo environment besides the C programming language.

Python is for serious programming and to have fun. Python has a nice syntax, it is easy to learn and powerful enough for a vast range of applications, this is why we choose Python for Maemo.

What has changed?

New packages:

  • python-mafw (0.1-1maemo1)
    • Python bindings for the Media Application Framework [1]
    • Supported API is very basic at the moment, and there are some bugs. Feedback is welcome!
  • python-hildondesktop (0.0.3-1maemo1)
    • Python bindings for the home/status widgets API
  • python-notify (0.1.1-2maemo1)
    • Python bindings for libnotify
  • pyclutter (0.8.0-1maemo2)
    • Python bindings for the Clutter API [2]
    • Experimental package, waiting for developer feedback

Updated packages:

  • gnome-python (2.26.1-1maemo1)
    • major upgrade, matching current Debian testing release;
    • feedback on this is welcome, as it replaces a fairly old version (2.18).
  • pygtk (2.12.1-6maemo7)
    • Enable glade support.
  • python2.5 (2.5.4-1maemo1)
    • Updated to latest upstream 2.5.x release.
    • add support to --install-layout=deb flag.
  • python-central (0.6.11.1maemo1)
    • dependency needed by the new python-setuptools version.
  • python-defaults (2.5.2-3maemo3)
    • Change PREVVER in debian/rules, avoiding old python2.5-minimal versions that had "/usr/bin/python" and thus conflicts with python-minimal.
  • python-hildon (0.9.0-1maemo10)
    • lots of bug fixes
  • python-setuptools (0.6c9-1maemo1)
    • add support to --install-layout=deb flag.

Bugs fixed: MB#4530 [3], MB#4450 [4], MB#4629 [5], MB#4628 [6],
MB#4647 [7], MB#4632 [8],  MB#4646 [9],  MB#4750 [10],  MB#4749 [11],
MB#4791 [12]

Known issues

MB#4782 [13]: osso.Context causes segmentation fault
MB#4821 [14]: Cannot create HildonTouchSelector with single text column
MB#4824 [15]: python-mafw: source_browsing.py example does not work
MB#4839 [16]: python-mafw: mafw.Registry lacks list_plugins() method
MB#4849 [17]: python-mafw: MafwPluginDescriptorPublic structure is missing

We will not migrate to python2.6 in fremantle due to a (unresolved) bug (MB#4734 [18]), where a core SDK package explicitly conflicts with python >= 2.6, preventing any further upgrades from the 2.5.x series.

This release is supposed to be compatible with previous releases. If you have any issues regarding building your Python application on Fremantle, feel free to report it on the pymaemo-developers mailing list [19].

Acknowledgments

Thanks to everybody who helped making this release possible.

Bug reports, as always, should go to our Bugzilla [20]. Use the pymaemo-developers mailing list for help, feedback or suggestions.

References

[1] https://garage.maemo.org/projects/mafw/
[2] http://www.clutter-project.org/
[3] https://bugs.maemo.org/show_bug.cgi?id=4530
[4] https://bugs.maemo.org/show_bug.cgi?id=4450
[5] https://bugs.maemo.org/show_bug.cgi?id=4629
[6] https://bugs.maemo.org/show_bug.cgi?id=4628
[7] https://bugs.maemo.org/show_bug.cgi?id=4647
[8] https://bugs.maemo.org/show_bug.cgi?id=4632
[9] https://bugs.maemo.org/show_bug.cgi?id=4646
[10] https://bugs.maemo.org/show_bug.cgi?id=4750
[11] https://bugs.maemo.org/show_bug.cgi?id=4749
[12] https://bugs.maemo.org/show_bug.cgi?id=4791
[13] https://bugs.maemo.org/show_bug.cgi?id=4782
[14] https://bugs.maemo.org/show_bug.cgi?id=4821
[15] https://bugs.maemo.org/show_bug.cgi?id=4824
[16] https://bugs.maemo.org/show_bug.cgi?id=4839
[17] https://bugs.maemo.org/show_bug.cgi?id=4849
[18] https://bugs.maemo.org/show_bug.cgi?id=4734
[19] https://garage.maemo.org/mailman/listinfo/pymaemo-developers
[20] https://bugs.maemo.org/enter_bug.cgi?product=PyMaemo

Credits

This post was possible thanks to Anderson Lizardo, from PyMaemo team, who posted these informations on pymaemo-developers mailing list.

Making Maemo email client usable with GMail

HowTo, Igalia, Linux, Maemo (EN) 6 Comments »

I must admit, I wasn't using Maemo email client, because I did find it was simply unusable, at least with my GMail account.

I tried both POP3 and IMAP, but having about 25.000+ messages in my account, downloading just the headers was a job that the client simply couldn't manage.

Yesterday I knew about "recent mode" support in POP3, a functionality that GMail supports too. This mode allow you to download only last 30 days messages (in my case, no more than 1000)  so the client can manage them without any problem.

All you have to do to enable this mode is put the "recent:" string before the username. For example: if your username is "username@gmail.com" you have to write "recent:username@gmail.com". Important: this mode only works with POP3, not with IMAP.

To conclude, let me say thank you to the kind guy who let me discover this mode. Thank you Sergio! Now there is another thing I can do with my tablet!

Writing Python bindings of existing C libraries – (2) – A simple example of binding

HowTo, Igalia, Linux, Maemo (EN), Programmazione, Python 2 Comments »

Introduction

As I promised in the preceding post, I'll provide a very easy example of a python binding. Let's suppose we don't want to use the methods included in Python to sum two integer values and we want to do it in C and then call the add method from a python script. I'll write the complete source code first and then I'll explain all the parts of it.

Source Code

#include <Python.h>

static PyObject *foo_add(PyObject *self, PyObject *args)
{
	int a;
	int b;

	if (!PyArg_ParseTuple(args, "ii", &a, &b))
	{
		return NULL;
	}

	return Py_BuildValue("i", a + b);
}

static PyMethodDef foo_methods[] = {
	    { "add", (PyCFunction)foo_add, METH_VARARGS, NULL },
	    { NULL, NULL, 0, NULL }
};

PyMODINIT_FUNC initfoo()
{
	    Py_InitModule3("foo", foo_methods, "My first extension module.");
}

How it works

First of all we have to include Python.h in our C file. This allows us to write an extension for Python language. To be able to include this header, we must have the python development packages installed in our system. For example in Debian based distributions we can install them with this command:

sudo apt-get install python2.5-dev

Every module has at least three parts. In the first part we write methods we want to call from the final python module: in this case we have a method called foo_add where "foo" is the name of the module and "add" the name of the method. Every method is declared as static PyObject. The method does anything particular except calling PyArg_ParseTuple to validate the input (we'll discuss this later), adding the two passed numbers and returning the result.

In the second part we have something like a dictionary, defined as static PyMethodDef and called foo_methods (where "foo" again is the name of the module). For each method we want to expose in our python module, we have to add something like this:

{"add", (PyCFunction)foo_add, METH_VARARGS, NULL}

where "add" is the name of the method we want to be visible in our module, (PyCFunction)foo_add is a pointer to our foo_add method, implemented in the C module, METH_VARARGS means that we want to pass some parameters to the function and the last one would be the description of the method (we can leave it NULL if we want).

Third part allows us to register the defined method/s and the module:

Py_InitModule3("foo", foo_methods, "My first extension module.");

Parsing Parameters

The PyArg_ParseTuple function extracts arguments from the PyObject passed as parameter to the current method and follows almost the sscanf syntax to parse parameters (in this case we had "ii" for two integers). You can fin the complete reference here: http://docs.python.org/c-api/arg.html

Building and installing

To build the module, we have to be in the source directory and execute this command:

gcc -shared -I/usr/include/python2.5 foo.c -o foo.so

then we've to copy the generated module to the python's modules directory:

cp foo.so /usr/lib/python2.5/site-packages/

Testing our module

Testing the module is really easy. We've to start a python shell or create a python script with the following source code:

import foo
print foo.add(2, 3)

if all is working fine, the printed result should be 5

References

python2.5-dev
python2.5-dev
WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Log in