Amora

34
1 © INdT 2007 | Company Confidential Amora: A mobile remote assistant Adenilson Cavalcanti Community Group - Instituto Nokia [email protected] [email protected]

description

Amora (A mobile remote assistant) development history and design.

Transcript of Amora

Page 1: Amora

1 © INdT 2007 | Company Confidential

Amora: A mobile remote assistant

Adenilson CavalcantiCommunity Group - Instituto [email protected]@gmail.com

Page 2: Amora

2 © INdT 2007 | Company Confidential

Objectives

•Explain reasons for design/implementation of Amora

•Present tools used

•Share knowledge and lessons

Page 3: Amora

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)

Page 4: Amora

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

Page 5: Amora

5 © INdT 2007 | Company Confidential

Project Size• 2400LOC (6 persons/month):

68% ANSI C, 31% Python• 3000 visits/month, 93 different

nations

Page 6: Amora

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/

Page 7: Amora

7 © INdT 2007 | Company Confidential

Concept

A long way to go...

*The project was codenamed P4X (Presenter 4 X)

Page 8: Amora

8 © INdT 2007 | Company Confidential

Concept: design

A long way to go...

Page 9: Amora

9 © INdT 2007 | Company Confidential

Implementation

Coding can get messy!

Page 10: Amora

10 © INdT 2007 | Company Confidential

Implementation

“Programmers shalt not do user interface...”

Page 11: Amora

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

Page 12: Amora

12 © INdT 2007 | Company Confidential

Today usability

Page 13: Amora

13 © INdT 2007 | Company Confidential

Architecture

Page 14: Amora

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

Page 15: Amora

15 © INdT 2007 | Company Confidential

Server

Page 16: Amora

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)

Page 17: Amora

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

Page 18: Amora

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

Page 19: Amora

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

Page 20: Amora

20 © INdT 2007 | Company Confidential

Screenshot client code

Page 21: Amora

21 © INdT 2007 | Company Confidential

Other protocol commands

Page 22: Amora

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

Page 23: Amora

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

Page 24: Amora

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;

Page 25: Amora

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.

Page 26: Amora

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

Page 27: Amora

27 © INdT 2007 | Company Confidential

lcov output

Page 28: Amora

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

Page 29: Amora

29 © INdT 2007 | Company Confidential

BT terminal

Page 30: Amora

30 © INdT 2007 | Company Confidential

BT Terminal

Page 31: Amora

31 © INdT 2007 | Company Confidential

BT Terminal

Page 32: Amora

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

Page 33: Amora

33 © INdT 2007 | Company Confidential

What is next

• BT webcam

• D-BUS integration

• Amora applet

• Tamora (Tablet amora)

Page 34: 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