Wednesday, April 30, 2008

Generating keypresses on Linux

I was trying to simulate keypress events for some javascript based webpage - actually it was typing the whole alphabet - and I came up with the following code, using Xlib:

#include X11/extensions/XTest.h
#define XK_LATIN1
#define XK_MISCELLANY
#define XK_XKB_KEYS
#include X11/keysymdef.h
#include X11/Xlib.h
#include stdio.h
#include stdlib.h
#include sys/time.h

//notice that libraries are lacking < > because of html tags
int main(int argc, char **argv)
{
Display* pDisplay = XOpenDisplay( ":0.0" );

KeySym key[] = { XK_a,XK_b,XK_c,XK_d,XK_e,
XK_f,XK_g,XK_h,XK_i,XK_j,
XK_k,XK_l,XK_m,XK_n,XK_o,
XK_p,XK_q,XK_r,XK_s,XK_t,
XK_u,XK_v,XK_w,XK_x,XK_y,
XK_z};

system("sleep 4");
int i;
for( i = 0; i < 26; i++ )
{
XTestFakeKeyEvent ( pDisplay, XKeysymToKeycode( pDisplay, key[i] ),
True, 0 );
XTestFakeKeyEvent ( pDisplay, XKeysymToKeycode( pDisplay, key[i] ),
False, 0 );
}

if( pDisplay == NULL ) return 1;

XCloseDisplay(pDisplay);
return 0;
}

In order to compile it, just run:


gcc generateKeys.c -lX11 -lXtst


I hope it helps!

Monday, April 21, 2008

Fisl 9.0



Fiquei na arena de programação, mais especificamente verificando as novidades de desenvolvimento Open Source para Internet Tablets e celulares da Nokia.
O sistema operacional para os modelos 770, N800, N810 e N810 WiMax é o Maemo e o gerenciador de janelas é o Matchbox. O toolkit para GUI é o Hildon, também usado no Ubuntu Mobile (http://live.gnome.org/Hildon , https://stage.maemo.org/svn/maemo/projects/haf/doc/api/index.html). Alguns screenshots do Hildon podem ser vistos aqui (http://test.maemo.org/screenshots.html).
No primeiro dia, a plataforma de desenvolvimento foi o N95 (http://en.wikipedia.org/wiki/Nokia_N95), cujo sistema operacional é o Symbian OS que roda exclusivamente em processadores ARM. Dado que este sistema operacional é proprietário e sua implementação de C++ não é padrão, uma forma interessante de programar para o N95 é através de Python. Através do S60 (http://opensource.nokia.com/projects/pythonfors60/) pode-se fazer aplicações stand-alone e rápido desenvolvimento de protótipos. Um exemplo de aplicação que utilizava a câmera fotográfica para tirar uma foto e salvá-la no sistema de arquivos pôde ser feita em pouco mais de uma hora. Uma excelente referência com tutoriais para o S60 pode ser vista aqui (http://www.mobilenin.com/pys60/menu.htm). E aqui (http://www.mobilenin.com/pys60/resources/ex_camera_viewfinder.py) o código de uma aplicação para S60 que tira uma foto em 19 linhas.
Eis então que surge a pergunta, por que não desenvolver tudo em Java ME? Estas threads dão uma idéia (http://discussion.forum.nokia.com/forum/showthread.php?t=125743 , https://developer.symbian.com/forum/message.jspa?messageID=59978 ). Basicamente está ligado ao fato da virtual machine não disponibilizar algumas funções e à velocidade dos programas. Quando estas duas questões não são importantes, é muito provável que Java ME seja a melhor escolha, ainda mais visto que o C++ do Symbian não é o mesmo comumente disponível nos desktops.
Com relação ao desenvolvimento em Maemo, fica a dica do OpenBossa (http://www.openbossa.org/) com várias soluções interessantes combinando Python, Linux e embedded development.
Aqui (http://labs.vivi.eng.br/blog/?p=44 , http://labs.morpheuz.eng.br/blog/21/04/2008/fisl9-good-start/) há dois posts sobre a arena de programação do Fisl 9.0, explicando o que foi feito em cada dia. Também saiu um post bem engraçado no site do fisl: http://www.fisl.org.br/9.0/www/node/475 .
Fica aqui o meu grande abraço para todas as pessoas que conheci neste encontro, bem como um grande agradecimento pela oportunidade cedida pelo CCA e companhia dos amigos de trabalho :)

Sunday, April 06, 2008

Google SoC 2008 Work Schedule

1st Month:
* Hand tracking/gesture:
1st week: * Study and implement Viola-Jones http://research.microsoft.com/~viola/Pubs/Detect/violaJones_IJCV.pdf paper for hands
2nd week: * Study and implement Flock-of-features http://www.movesinstitute.org/~kolsch/handvu/KolschTurk2004Fast2DHandTrackingWithFlocksOfFeatures.pdf
3rd week: * Study and implement posture recognition and hand gestures http://www.movesinstitute.org/~kolsch/pubs/Dissertation_twoside.pdf
4th week: * Test features and integrate developed code in an easily accessible C++ class. Show zoom and rotate functionalities.

2nd Month:

* Head and body tracking
1st week: * Facade classes for OpenCV already implemented head and body tracking.
2nd week: * Study and implement head distance information.
3rd week: * Combine 2d head tracking and head distance, so that 3d head tracking is done.
4th week: * Integration tests and integrated classes. Deliver small OpenGL based demos and tutorials on how to use the framework.

3rd Month:
* Motion flow and augmented reality
1st week: * Create easy to access objects that react to motion flow, similar to the ones I've developed here: http://www.youtube.com/watch?v=QJvKT-NId9M
2nd week: * Study and implement 3d model tracking through wireframes http://www.bmva.ac.uk/bmvc/2000/papers/p66.pdf
3rd week: * Integrate developed research in easily accessible classes and write documentation.
4th week: * Time to develop side projects as packaging TouchLib for Linux or to use in case prior time wasn't enough for some features.