amora: a mobile remote assistant
DESCRIPTION
Adenilson CavalcantiTRANSCRIPT
1 © INdT 2007 | Company Confidential
Amora: A mobile remote assistant
Adenilson CavalcantiCommunity Group – INdT (Nokia)[email protected]@gmail.com
2 © INdT 2007 | Company Confidential
Objectives
•Explain reasons for design/implementation of Amora
•Present tools used
•Share knowledge and lessons
3 © INdT 2007 | Company Confidential
Why create Amora
Free/OSS 'remote controllers' @ 2007/06
•Abandoned, no longer maintained
•Unstable/bad performance
•Confusing user interface
•Windows only (or poor support for Linux)
•Almost impossible to install
4 © INdT 2007 | Company Confidential
Project Size• 3342LOC (8 persons/month):
55% ANSI C, 37% Python, 8% C++• 3000 visits/month, 132 different
nations (november@2007)
5 © INdT 2007 | Company Confidential
... do brazilians love python+amora?
september@2008
6 © INdT 2007 | Company Confidential
Project
•GPL 2.0: free/opensource software•officially packaged: Mandriva, Fedora Core, Debian•code base is small•contributors are welcomewelcome
Webpage
http://amora.googlecode.com/
Repository
http://amora.googlecode.com/svn/trunk/
7 © INdT 2007 | Company Confidential
Concept
A long way to go...
*The project was codenamed P4X (Presenter 4 X)
8 © INdT 2007 | Company Confidential
Concept: design
A long way to go...
9 © INdT 2007 | Company Confidential
Implementation
Coding can get messy!
10 © INdT 2007 | Company Confidential
Implementation
“Programmers shalt not do user interface...”
11 © INdT 2007 | Company Confidential
Implementation
Clear vision of where to go is important!
2.5 months
06/16
08/31 rev. 1861616 LOCs
spare time
12 © INdT 2007 | Company Confidential
Today usability
13 © INdT 2007 | Company Confidential
Architecture
14 © INdT 2007 | Company Confidential
Amora lib
•ANSI C/POSIX: protocol + communication
•Xlib/XTest: window events (portable to other *nix)
•imlib: screenshot, resize, rotation
•BlueZ: communication
•D-BUS: dongle disconnection
15 © INdT 2007 | Company Confidential
Amora library
Exec. Server size 25KB...
16 © INdT 2007 | Company Confidential
UI applet
17 © INdT 2007 | Company Confidential
Client
Classes
•Amora: main loop•Application: main application logic•Wallpaper: main app background image•Help: display help text•Bluetooth: communication•Keyboard: required to draw in Canvas
18 © INdT 2007 | Company Confidential
Protocol
•Default log when connecting:[Apr 15 18:34:31]: Accepted connection. Client is
00:18:42:E3:EC:44
[Apr 15 18:34:31]: Read buffer = SCREEN_MODE_ON
[Apr 15 18:34:31]: Read buffer = SCREEN_RESOLUTION
[Apr 15 18:34:31]: Read buffer = 240
[Apr 15 18:34:31]: Read buffer = 320
•Protocol is:- set screenshot on or off- screen width- screen height
19 © INdT 2007 | Company Confidential
Protocol
•Log for screenshot event:[Apr 15 18:39:17]: Read buffer = SCREEN_TAKE
•Protocol is:- set orientation (rotate or not)- client ask for screenshot (SCREEN_TAKE)- server answers with image size (56732)- server starts to write data in socket- client must read this data
20 © INdT 2007 | Company Confidential
Screenshot client code
21 © INdT 2007 | Company Confidential
Other protocol commands
22 © INdT 2007 | Company Confidential
Why use Python for client side?
String tmp = new String("Hello, Java is cool!");
StringBuffer newer = new StringBuffer(tmp);
System.out.println(newer);
Symbian x Java x Python
_LIT(Scnst, “Welcome to darkness...”);
TBufC8<20> buffer(Scnst);
TBufC8<20> copy;
TPtr8 ptr = copy.Des();
ptr.Copy(buffer);
//Deprecated!
printf(“symbian string = %s\n”, ptr.PtrZ());
a = 'Python rulez!'; b = a; print b
23 © INdT 2007 | Company Confidential
How many lines a simple 'hello world' has?
import appuifwappuifw.note(u'Hello!')
Symbian Java Python0
10
20
30
40
50
60
70
LOC por linguagem
LOC
Lin
es o
f C
ode
24 © INdT 2007 | Company Confidential
Summing up: Python is fun!
25 © INdT 2007 | Company Confidential
Tools
•logging: helped to track on missing call to XFlush();•electric fence: helped to find one memory leak in
logging functions;•gtk-devel-list: help for get real root window for
GTK apps;•valgrind: server can run fine inside it;•autotools: buildsystem help to support Linux
flavors;•doxygen: source code documentation;•subversion: today I would use git...•utest: help to optimize uloop code;
26 © INdT 2007 | Company Confidential
BT terminal
•Script to create a terminalsdptool add --channel=1 SPsdptool browser localwhile true; do rfcomm listen /dev/rfcomm0 1; done
27 © INdT 2007 | Company Confidential
BT terminal
28 © INdT 2007 | Company Confidential
BT Terminal
29 © INdT 2007 | Company Confidential
BT Terminal
30 © INdT 2007 | Company Confidential
Help is welcome
•tablet amora: client for internet tablet•ports: Mac OSX, FreeBSD, Solaris (if at least it has a bluetooth stack...)
•j2me client: cover other cellphones models•Qt applet: needs some love•features: see project issues list
31 © INdT 2007 | Company Confidential
What is next
• D-BUS integration
• Tamora (Tablet amora)
• Java client
32 © INdT 2007 | Company Confidential
Acknowledgments
• INdT (Instituto Nokia de Tecnologia): for contributing to development of this project: hardware, some coding hours, travels, etc
• Wilson Prata: the UI, usability and graphic design guy
• My fellow programmer friends: Ademar Reis, Thiago M. P. Santos and Tomaz Noleto
• Ros Macmahon(j2me), Allison Azevedo (Fedora), Axel Beckert (Debian)
33 © INdT 2007 | Company Confidential
Why packagers are important?
• “It just works for me with my new, yes, Nokia 6120c smartphone... so easy! Run apt-get install amora-server” (smihael blog)
• “The best remote program i have found is Amora. Works well” (Ubuntu forum)
• “And it must have been written by someone with my exact problem... and am thrilled at how easy it was to set up and how smoothly it works.” (Foosel blog)
• “Oh, and many thanks to foosel since I found Amora in her blog. ” (Axel Beckert, 2 months before making debian package)
34 © INdT 2007 | Company Confidential
Pycon@BR staff
•O rio de janeiro continua lindo...