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.
Sunday, 12 October 2008
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.
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.
Labels:
freesmartphone,
openmoko,
tichy
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.

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.
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 :



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 :



Labels:
freesmartphone,
openmoko,
tichy
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) :
I can generate the C/gobject code for this module, using 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 :
Where 'test.override' is a compulsory file that looks like this :
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) :
And then we are almost done... finally we compile and link everything :
And now we finally have our library : test.so, that can be directly used from python. Here is our python script (test.py):
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 :)
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 :)
Monday, 12 May 2008
First day at OpenMoko
Today is my first working day at OpenMoko.
After I met my new coworkers - I will need some time to get used to all the new faces - I started to play with the Neo FreeRunner. So I followed the wiki instructions to flash my cell phone with the last kernel and file system image. It worked fine :-)
Of course, since I am a fan of python and gtk, the second thing I tried was to run a python / gtk / glade application. And the proof that it works with no problem :
Here is a screenshot of glade designer running on my laptop :
And here is the same interface running on the Neo FreeRunner, from a python script :
This is pretty cool. The only problem is that the menu bar looks a little bit too small for a screen touch interface.
After I met my new coworkers - I will need some time to get used to all the new faces - I started to play with the Neo FreeRunner. So I followed the wiki instructions to flash my cell phone with the last kernel and file system image. It worked fine :-)
Of course, since I am a fan of python and gtk, the second thing I tried was to run a python / gtk / glade application. And the proof that it works with no problem :
Here is a screenshot of glade designer running on my laptop :
And here is the same interface running on the Neo FreeRunner, from a python script :
This is pretty cool. The only problem is that the menu bar looks a little bit too small for a screen touch interface.
Subscribe to:
Posts (Atom)
