Sunday, 11 January 2009

Paroli get a website

Happy new year everybody !
I just come back from holidays, and haven't worked for a few weeks, but now I am back to Taipei where I still work for OpenMoko, with a few news about our next software stack :

The tichy project had a lot of modifications ; it is now entirely based on etk and edje (part of raster enlightenment windows manager). It has also been renamed "paroli-core". We loose the ability to use different graphic back-ends, but the other features are still presents. Paroli-core offers :
  • Signal / slot objects (à la Qt.)
  • A service system to allow user to register and retrieve python object based on there role.
  • A tasklet library for easy creation of chained callback function.
  • A plug-in system.
  • A set of services that create a layer between the plug-ins and Mikey FSO framework.

The Paroli project based on paroli-core started.
The project includes paroli-core (ex tichy), plus a set of applets that aim at providing basic telephony functionalities.

More information (and the sources) can be found from the paroli-project web site.

Sunday, 12 October 2008

D programming on Openmoko

Today I decided to start to write a video game for OpenMoko.

I am a little bit disappointed by all the current available games for openmoko (I like action games). And the port of already existing games that I tried all have poor usability because they are not usable with a touchscreen (A touch screen is much more limited than a mouse, cause you can't move the pointer when you don't click)

So anyway, I wanted to write a very simple game where asteroids are falling from space and you have to destroy them by launching missile from the ground. The control is very simple : touch the screen to fire a missile to the pointed position.

I want the code of the game to be very small and simple, yet fast. I started to write it in vala, but after profiling got a little bit frustrated to see that a lot of time was spent getting and setting gobject properties.

I was about to consider cython + python or C++, and then I found that gdc, the gnu D programming language compiler, was available in the debian distribution for openmoko.

I immediately tried to compile my game guisterax, and it worked fine. Of course no way to play it without the keyboard, but that is great anyway.
D would be a perfect language for embedded applications.

Now the problem is that as far as I know it is not possible to compile D sources using openembedded yet, so I may have to use an other language for my game anyway.

Wednesday, 8 October 2008

OpenMoko update

I haven't post for a long time, it is time to give some update about my work at openmoko.

The last few weeks the full freesmartphone team was here in Taipei, so that we could work full time on the openmoko d-bus system interface (the so called framework).

Many changes have been done recently, I will try to update the wiki to let people that are not subscribed to the mailing list be aware of the status of the project.
To recall, the framework provides a d-bus API (the org.freesmartphone API) for applications running on the neo. The API covers usual phone functionalities (GSM, SIM, PIM, etc).

I didn't work at all on my personal project tichy, except yesterday when I stared to write a few applications that I intend to use to learn Chinese :
* A learning game application that implements the Leitner System to optimize the memorization of new words.
* An English to Chinese dictionary.
* A now working audio files player.

I think there is a interesting potential for the neo to be a learning platform.


Tuesday, 2 September 2008

Tichy running on GTK

Those days I am working on Tichy again.

Tichy is a python applet manager that allow to easily write applications for mobile phone.

From the beginning I tried to make the applets code "widget-agnostic". That means for example if an applet need to show a list of item, instead of creating the widgets for that, it will request the system for a 'design' service that will be in charge of representing the items. This way we can have totally different interfaces for the same applications.

An other advantage of this approach is that I can use any widget toolkit I want. So today I tried to make Tichy running with gtk, instead of SDL. Here is the result. The first image is using my own SDL widget toolkit, the second image is the same application using gtk toolkit.

My goal is to create a back end using etk + edje, as well as a backend using Clutter.

Monday, 21 July 2008

Tichy update

I did a video of tichy, my python applets manager, running on openmoko :



Once again the code for tichy can be retrieved from the subversion repository with this command :
svn checkout svn://svn.projects.openmoko.org/svnroot/tichy

It works fine on a desktop computer too. Parts of the program are in C, but I always provide python versions as well, so you don't need to compile anything to test it.

It is also very easy to extend tichy by adding new plugins

[Edit]: I put a copy of the video on youtube.


Friday, 4 July 2008

Introducing tichy

The last few weeks I have been working on a python applets manager for OpenMoko cell phone.

The idea is to be able to very easily develop applications in python. Each application can define a set of services and request for a given services. So if for example I write a text editor, other applications that need a text text editor will be able to use it, even if they don't know about this particular text editor.

The code can be downloaded from the subversion server :

svn checkout svn://svn.projects.openmoko.org/svnroot/tichy

It can work directly on a desktop computer, or on the open moko (See the README file for more informations)

It uses Mickey freesmartphone Framework

Here are some screen shots :







Sunday, 18 May 2008

Calling Vala code from Python

Today I gave a try at using vala and python together in my OpenMoko mobile phone.
Python is a powerful object oriented script language, and vala is a C gobject compiler that makes it easy to generate object oriented code in C. It is quite easy to mix python and vala in a same programme, allowing us to write very quickly modular and fast applications.

So here is how it works :

Let say I have a vala module, that defines one class, with one public method. Here is the file (test.vala) :

using GLib;

namespace Test {
public class Test : Object {
public int sum(int x, int y) {
return x + y;
}
}
}

I can generate the C/gobject code for this module, using vala :

valac -C test.vala

this command will create test.c and test.h. These files are conform C and can be compiled with gcc (in fact these are the files people using gobject in C would write. If we have a look at it, we understand the pain that it is to write gobject code in C !).
But to be able to call the functions from python, we need to create wrapper to the python C interface. This can be easily done using some tools (included in the debian pygtk-dev package). For more information, see this page.

Here are the commands that generate our C python interface :

python /usr/share/pygtk/2.0/codegen/h2def.py test.h > test.defs
pygtk-codegen-2.0 -o test.override -p test test.defs > test_wrap.c

Where 'test.override' is a compulsory file that looks like this :

%%
headers
#include
#include "pygobject.h"
#include "test.h"
%%
modulename test
%%
import gobject.GObject as PyGObject_Type
%%
ignore-glob
*_get_type
%%

Alright we now have a file called test_wrap.c, that contains all the wrapper functions from the python C interface to gobject C.

The next step is to actually create the C library callable from python. this library must contains a function 'inittest' (this is the function that will be called when we import the module from python.) The file looks like this (test_module.c) :

#include

void test_register_classes (PyObject *d);
extern PyMethodDef test_functions[];

DL_EXPORT(void)
inittest(void)
{
PyObject *m, *d;
init_pygobject();
m = Py_InitModule("test", test_functions);
d = PyModule_GetDict(m);
test_register_classes(d);
if (PyErr_Occurred ()) {
Py_FatalError ("can't initialise module test");
}
}

And then we are almost done... finally we compile and link everything :

CFLAGS="`pkg-config --cflags gtk+-2.0 pygtk-2.0` -I/usr/include/python2.5/ -I."
LDFLAGS=`pkg-config --libs gtk+-2.0 pygtk-2.0`
gcc -c -o test.o test.c
gcc $CFLAGS -c test_wrap.c -o test_wrap.o
gcc $CFLAGS -c test_module.c -o test_module.o
gcc $LDFLAGS -shared test.o test_wrap.o test_module.o -o test.so

And now we finally have our library : test.so, that can be directly used from python. Here is our python script (test.py):

import test
t = test.Test()
print t.sum(2,3)

Conclusion :
This combination (python + vala) is ideal to write applications for OpenMoko : there is no need to compile the python part, and since the vala code generate C code, it can be easily compiled for different targets.
So no excuses not to write great apps for OpenMoko :)