amora
DESCRIPTION
Amora (A mobile remote assistant) development history and design.TRANSCRIPT
1 © INdT 2007 | Company Confidential
Amora: A mobile remote assistant
Adenilson CavalcantiCommunity Group - Instituto [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)
4 © INdT 2007 | Company Confidential
Amora Team
•Adenilson Cavalcanti: server, client, design, even the kitchensink
•Wilson Prata: design, usability
•Ademar de Souza Reis Jr.: logging functions, buildsystem, RPM packaging
•Thiago Marcos P. Santos: uLoop code, utests
•Tomaz Noleto: Debian package, tablet client
5 © INdT 2007 | Company Confidential
Project Size• 2400LOC (6 persons/month):
68% ANSI C, 31% Python• 3000 visits/month, 93 different
nations
6 © INdT 2007 | Company Confidential
Project
•GPL 2.0: free/opensource software•officially packaged: Mandriva, Fedora Core•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
Server
Server components•ANSI C/POSIX: protocol + communication
•Xlib/XTest: window events
•imlib: screenshot, resize, rotation
•BlueZ: communication
•D-BUS: dongle disconnection
15 © INdT 2007 | Company Confidential
Server
16 © INdT 2007 | Company Confidential
Server: Why?
•ANSI C: portable, simple, stable, known-how•POSIX: sockets (read/write)•Xlib: less dependencies than GDK/QT•imlib: fast/simple/reliable•BlueZ: official bluetooth stack on Linux*•main loop: micro loop (88LOCs)
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' have?
import appuifwappuifw.note(u'Hello!')
Symbian Java Python0
5
10
15
20
25
30
35
40
45
50
55
60
LOC por linguagem
LOC
Line
s of
Cod
e
24 © 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;
25 © INdT 2007 | Company Confidential
electric fence
•overloaded 'malloc'•helpful to catch over/underflows•usage: just link with it$gcc -lefence hello.c$./a.out Electric Fence 2.1 Copyright (C) 1987-1998 Bruce Perens.
26 © INdT 2007 | Company Confidential
lcov
•info: which parts are executed and how many times. Example:
hello: hello.c gcc -o hello -Wall -fprofile-arcs -ftest-coverage hello.c
coverage: hello ./hello lcov --directory . --capture --output-file hello.info
genhtml hello.info
27 © INdT 2007 | Company Confidential
lcov output
28 © 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
29 © INdT 2007 | Company Confidential
BT terminal
30 © INdT 2007 | Company Confidential
BT Terminal
31 © INdT 2007 | Company Confidential
BT Terminal
32 © INdT 2007 | Company Confidential
Help is needed
•packaging: Gentoo, Slackware, Ubuntu•tablet amora: client for internet tablet•ports: Mac OSX, FreeBSD, Solaris (does anyone really uses it for desktop?)
•j2me client: cover other cellphones models•features: see project issues list
33 © INdT 2007 | Company Confidential
What is next
• BT webcam
• D-BUS integration
• Amora applet
• Tamora (Tablet amora)
34 © INdT 2007 | Company Confidential
Acknowledgments
• INdT (for paying my travel expenses and allowing me to write this software)
• Wilson Prata: the UI, usability and graphic design guy
• My fellow programmer friends: Ademar Reis, Thiago M. P. Santos and Tomaz Noleto