Amora
- 1. Amora: A mobile remote assistant
Adenilson Cavalcanti
Community Group - Instituto Nokia
adenilson.silva@indt.org.br
cavalcantii@gmail.com
1 © INdT 2007 | Company
Confidential
- 2. Objectives
•Explain reasons for design/implementation
of Amora
•Present tools used
•Share knowledge and lessons
2 © INdT 2007 | Company
Confidential
- 3. 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)
3 © INdT 2007 | Company
Confidential
- 4. 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
4 © INdT 2007 | Company
Confidential
- 5. Project Size
• 2400LOC (6 persons/month): • 3000 visits/month, 93 different
68% ANSI C, 31% Python nations
5 © INdT 2007 | Company
Confidential
- 6. Project
•GPL 2.0: free/opensource software
•officially packaged: Mandriva, Fedora Core
•code base is small
•contributors are welcome
Webpage
http://amora.googlecode.com/
Repository
http://amora.googlecode.com/svn/trunk/
6 © INdT 2007 | Company
Confidential
- 7. Concept
A long way to go...
*The project was codenamed P4X (Presenter 4 X)
7 © INdT 2007 | Company
Confidential
- 8. Concept: design
A long way to go...
8 © INdT 2007 | Company
Confidential
- 9. Implementation
Coding can get messy!
9 © INdT 2007 | Company
Confidential
- 10. Implementation
“Programmers shalt not do user interface...”
10 © INdT 2007 | Company
Confidential
- 11. Implementation
Clear vision of where to go is important!
06/16
2.5 months
spare time
08/31 rev. 186
1616 LOCs
11 © INdT 2007 | Company
Confidential
- 14. Server
Server components
•ANSI C/POSIX: protocol + communication
•Xlib/XTest: window events
•imlib: screenshot, resize, rotation
•BlueZ: communication
•D-BUS: dongle disconnection
14 © INdT 2007 | Company
Confidential
- 15. Server
15 © INdT 2007 | Company
Confidential
- 16. 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)
16 © INdT 2007 | Company
Confidential
- 17. 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
17 © INdT 2007 | Company
Confidential
- 18. 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
18 © INdT 2007 | Company
Confidential
- 19. 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
19 © INdT 2007 | Company
Confidential
- 22. Why use Python for client side?
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 = %sn”, ptr.PtrZ());
String tmp = new String("Hello, Java is cool!");
StringBuffer newer = new StringBuffer(tmp);
System.out.println(newer);
a = 'Python rulez!'; b = a; print b
22 © INdT 2007 | Company
Confidential
- 23. How many lines a simple 'hello world' have?
LOC por linguagem
60
55
50
45
40
Lines of Code
35
LOC
30
25
20
import appuifw
15 appuifw.note(u'Hello!')
10
5
0
Symbian Java Python
23 © INdT 2007 | Company
Confidential
- 24. 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;
24 © INdT 2007 | Company
Confidential
- 25. 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.
25 © INdT 2007 | Company
Confidential
- 26. 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
26 © INdT 2007 | Company
Confidential
- 28. BT terminal
•Script to create a terminal
sdptool add --channel=1 SP
sdptool browser local
while true; do rfcomm listen /dev/rfcomm0 1;
done
28 © INdT 2007 | Company
Confidential
- 32. 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
32 © INdT 2007 | Company
Confidential
- 33. What is next
• BT webcam
• D-BUS integration
• Amora applet
• Tamora (Tablet amora)
33 © INdT 2007 | Company
Confidential
- 34. 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
34 © INdT 2007 | Company
Confidential