Sunteți pe pagina 1din 46

Nr. 29 Noiembrie 2014 www.todaysoftmag.ro www.todaysoftmag.

com

TSM

T O D A Y
S O F T WA R E
MAG A Z I NE

ShareCluj - Jurnal tehnic

Interviu cu Peter Lawrey

Sfaturi strvechi pentru


un Product Owner
Comunicarea cu clientul Un joc mai greu dect ne imaginm
Automatizare folosind Puppet
5 greeli frecvente n securizarea
reelelor windows
Comunicarea ntr-un startup

De ce Agile?
Componente vizuale java fx
Tradiia dus mai departe: Bionic Bird
Dosare de Startup: Foody
Java vs. Objective-C
Cum poate o companie de outsourcing
s devin un partener de ncredere

6
Interviu cu Peter Lawrey
Ovidiu Man

8
Tradiia dus mai departe:
Bionic Bird
Laurence Blestel

10
Dosare de startup: Foody
Radu Popovici

12
Comunicarea ntr-un startup
Mircea Vdan

14
How to Web
Startup
Spotlight
Irina Scarlat

17
Share Cluj Jurnal tehnic
Silvia Rusanu

20
Cum poate o companie de
outsourcing s devin
un partener de ncredere
Clin Lupo

22
5 greeli frecvente n
securizarea reelelor windows
Teodor Olteanu

25
Comunicarea cu clientul
Bogdan Murean

28
De ce
Agile?
Alexandru Bolboac

31
Componente vizuale Java FX
Silviu Dumitrescu i Diana Blan

34
Automatizare folosind puppet
Claudiu Demian

36
Cod curat limitri,
gestionarea erorilor i a
obiectelor
Radu Vunvulea

38
Sfaturi strvechi pentru un Product Owner
Sun Tzu Arta rzboiului
Liviu tefni Baiu

41
Java
vs.
Objective-C
Bogdan-Alexandru Vldu

44
Eliminarea diferenelor dintre business i
tehnologie n zona testrii automate
Mdlin Ilie

editorial

Ovidiu Man

ovidiu.matan@todaysoftmag.com
Editor-in-chief
Today Software Magazine

e pare c educaia se impune din ce n ce mai mult n atenia mediului de afaceri


care contientizeaz necesitatea unor viitori angajai ct mai bine pregtii i ct
mai competitivi. ntlnirea grupului de HR din cadrul Cluster-ului de IT Cluj, la
care am asistat n aceast primvar, a inclus printre subiectele importante i pe acesta
al nivelului slab de pregtire al studenilor. Fapt n general mprtit de cei ce lucreaz
n domeniu. Rspunsul reprezentanilor universitilor a justificat aceast stare de fapt
prin atragerea ateniei asupra timpului redus de studiu pe care i-l dedic studenii, din
moment ce muli dintre ei sunt angajai deja din anul II. Un punct de vedere perfect
valid dac ne gndim c dup opt ore de lucru este puin probabil ca un student chiar
i foarte bun s mai poat nva ceva i pentru coal. Dincolo de retorica explicaiilor
i a justificrilor venite din ambele direcii, este de dorit s se ajung la un numitor
comun menit s mai dilueze starea de criz. Poate ar fi momentul s se considere o
abordare unificat a companiilor clujene care s aib doar un intership pe perioada
vacanelor de var, iar angajarea s se ntmple la finalizarea studiilor. De asemenea,
sincronizarea cu un sistem de burse private cred c ar oferi ansa formrii unor generaii
de excepie n acest domeniu. Dou evenimente care s-au desfurat n aceast lun la
Cluj i la care am participat ofer sperana c acest decalaj ntre expectenele mediului de afaceri i gradul de pregtire al angajailor poate fi mult diminuat. Este vorba
de Academy+Plus, un program care s-a bucurat la inaugurare de prezena ambasadorului Franei n Romnia, Francois Saint-Paul i a altor oficialiti locale i naionale.
Programul Academiei, preluat de la coala 42, care este una dintre cele mai mari coli
private de informatic din Frana, i propune un program de studii pe durata a trei ani,
care s formeze programatori cu o bun experien n ceea ce privete lucrul n echip.
Al doilea program este dedicat doar elevilor. Denumit IT Brainiacs, susinut i organizat
de ctre Telenav n colaborare cu Apex Edu, acest program se va desfura sub forma
unui mentorat pe durata unui an colar de zile. Le dorim mult succes i ne bucurm s
vedem din ce n ce mai multe iniiative private n acest domeniu !
Luna aceasta, revista a propus tema generic a comunicrii. Articolele precum,
Comunicarea cu clientul - Un joc mai greu dect ne imaginm, Comunicarea ntr-un
startup, ShareCluj - Share Cluj - Jurnal tehnic sau Cum poate o companie de outsourcing
s devin un partener de ncredere, dezvolt fiecare n parte aceast tem vast. n zona
de startup-uri se integreaz un prim articol dintr-o serie denumit Dosare de startup,
startup-urile nscrise n competiia How To Web Startup Spotlight, proiectul francez
de pe IndieGoGo - Bionic Bird. Conceptul Agile este dezbtut de Alexandru Bolboac
n articolul De ce Agile ?. O abordare tehnic destinat programatorilor, v oferim n
articolele: Java vs. Objective-C, Automatizare folosind puppet sau Componente vizuale
Java FX.
Sperm c v-am trezit atenia i v invitm s citii sptmnal revista Today
Software Magazine online deoarece vom publica articole noi odat la cteva zile.

V dorim o lectur plcut !!!

Ovidiu Man

Fondator al Today Software Magazine

nr. 29/2014 | www.todaysoftmag.ro

Redacia Today Software Magazine


Fondator / Editor in chief: Ovidiu Man
ovidiu.matan@todaysoftmag.com
Graphic designer: Dan Hdru
dan.hadarau@todaysoftmag.com
Copyright/Corector: Emilia Toma
emilia.toma@todaysoftmag.com

Lista autorilor
Liviu tefni Baiu

Mircea Vdan

Senior Business Consultant


@ Endava

www.clujstartups.com

Claudiu Demian

Irina Scarlat

Systems Administrator
@ Yardi

PR Manager
@ How to Web &
TechHub Bucharest

Bogdan-Alexandru Vldu

Mdlin Ilie

liviu.baiu@endava.com

claudiu.demian@yardi.com

Traductor: Roxana Elena


roxana.elena@todaysoftmag.com
Editor startups: Mircea Vdan
mircea.vadan@todaysoftmag.com
Reviewer: Tavi Bolog
tavi.bolog@todaysoftmag.com
Reviewer: Adrian Lupei
adrian.lupei@todaysoftmag.com
Contabil : Delia Coman
delia.coman@todaysoftmag.com
Produs de

Today Software Solutions SRL


str. Plopilor, nr. 75/77
Cluj-Napoca, Cluj, Romania
contact@todaysoftmag.com
www.todaysoftmag.ro
www.facebook.com/todaysoftmag
twitter.com/todaysoftmag

ISSN 2284 6352

Bogdan-Alexandru.Vladut@
msg-systems.com
Java Developer
@ msg systems Romnia

mircea.vadan@gmail.com

irina.scarlat@howtoweb.co

mdlin.ilie@endava.com
Cluj Java Discipline Lead
@ endava

Alexandru Bolboac

Bogdan Murean

Agile Coach and Trainer, with a


focus on technical practices
@Mozaic Works

Director of Engineering
@ 3Pillar Global

Silvia Rusanu

Clin Lupo

Senior Developer
@ ISDC

Client Engagement Manager


@ Endava

Radu Vunvulea

Silviu Dumitrescu

Senior Software Engineer


@iQuest

Java Line Manager


@ Accesa

Laurence Blestel

Radu Popovici

Relations presse
@ XTIM

Associate
@ Gemini Solutions Foundry

Teodor Olteanu

Diana Blan

End User Computing Lead


@ Betfair

Java developer
@ Accesa

alex.bolboaca@mozaicworks.com

Silvia.Rausanu@isdc.eu

Radu.Vunvulea@iquestgroup.com

laurence@mybionicbird.com

Teodor.Olteanu@betfair.com

bogdan.muresan@3pillarglobal.com

calin.lupo@endava.com

silviu.dumitrescu@accesa.eu

radu.popovici@geminisols.com

Diana.Balan@accesa.eu

Copyright Today Software Magazine


Reproducerea parial sau total a articolelor
din revista Today Software Magazine
fr acordul redaciei este strict interzis.
www.todaysoftmag.ro
www.todaysoftmag.com

www.todaysoftmag.ro | nr. 28/octombrie, 2014

interviu

Interviu cu Peter Lawrey, invitat


special la Cluj IT Days 2014

Ovidiu Man

ovidiu.matan@todaysoftmag.com
Editor-in-chief
Today Software Magazine

nr. 29/2014 | www.todaysoftmag.ro

eter Lawrey este un profesionist Java, specializarea sa fiind performana n Java


fiind n top 3 pe StackOverflow. Avem plcerea de a-l avea invitat special la Cluj
IT Days 2014, ocazie cu care va prezenta un subiect tehnic Hot topics in Java
Performance Tuning precum i o prezentare despre experiena sa de consultant independent What I have learnt by becoming an independent consultant. De asemenea, Peter
va susine un training de o zi despre Java Performance, mai multe detalii putei gsi
pe www.itdays.ro. Am avut aadar plcerea de a l provoca pe Peter la cteva ntrebri
tehnice nainte de eveniment.
[Ovidiu Man]. Cum vezi Java 8 din
perspectiva performanei?
[Peter Lawrey] Poate c cea mai
important mbuntire a performanei
a fost extinderea Compressed Oops la o
memorie de 64 GB. Dac ai un heap ntre
32 GB i 64 GB, poi obine o mbuntire
a eficienei memoriei. Poi folosi compressed oops pentru 128 GB heaps, dar este
puin probabil s ajute n aceast faz.
Ades e a, mai imp or t ant dect
performana CPU este performana
dezvoltatorului. n aceast privin, adugarea de lambda i lanul API pot face o
mare diferen dac le poi folosi efectiv.
Un dezvoltator cost de obicei mai mult
ntr-un an dect un server scump, aa c
economisirea timpului de dezvoltare este
important, adesea mai important dect
salvarea CPU.
Putem lua n considerare orice clase
care se comport mai bine din punctul de

vedere al utilizrii memoriei dect n Java


7 sau 6?
JSR 310 are o bibliotec DateTime
mbuntit; este mult mai bun dect
Calendarul din mai multe motive, iar
performana este unul dintre ele.
Optimizarea aplicaiilor necesit un
mod de testare adecvat i repetat. Folosii
de obicei un framework sau alt mecanism
pentru a obine acest lucru?
[Peter] Clienii notri utilizeaz
Chronicle Queue pentru a nregistra fiecare intrare ntr-un sistem timp de o zi /
zile. Derularea acestui ir care persist le
permite s recreeze bug-uri obscure i s
investigheze probleme de performan
dificil de gsit. ncercarea de a recrea
probleme de performan cu un test sintetic este un nceput bun, dar este dificil
s gseti mai mult de jumtate din problemele de performan n acest mod. n

TODAY SOFTWARE MAGAZINE

schimb, este mai bine s foloseti un volum o metod simpl i rapid de stocare de
de lucru real pentru o zi sau o sptmn. date. Not: deoarece harta este pstrat
pe disk, ea este limitat numai de mrin agenda workshop-ului, avem subiec- mea spaiului liber de pe discul tu i nu
tul Low level Java programming, how to de mrimea heap. Cum este off heap, nu
make using Unsafe safer? (Programarea contribuie la timpul de pauz al GC-ului
Java low level,cum s faci utilizarea Unsafe tu, indiferent ct este de mare. De asemes fie mai sigur?), ceea ce sun foarte inte- nea, necesit un timp scurt de ncrcare la
resant. Poi s oferi un indiciu cititorilor restart, cci nu este nevoie s fie ncrcat n
heap. O hart de 1000M poate dura 10ms
notri?
[Peter] Pe scurt, vrei o bibliotec care pentru a fi gata de utilizare.
te ncurajeaz s utilizezi Unsafe ntr-un
n ultimul articol al tu de pe blog,
mod sigur. Noi folosim o bibliotec pe care
o numim Java-Lang, care are un thread (fir) Chronicle Map i Yahoo Cloud Service
sigur, versiuni de 64 bii ale ByteBuffer, Benchmark, propunerea ta era de a utiliza
care v permite accesul la fiierele de valori de 100 bii pentru perechi valori cheie
memorie partajate, ntr-o manier rela- pentru a obine rezultate mai bune. Totui,
tiv sigur. Ceea ce ar trebui s fie i mai menionezi efectul de colectare de deeuri n
interesant este c putei utiliza structuri de teste. Cum putem de asemenea minimiza
date pe care noi le-am construit pe aceast intervenia cumulrilor de deeu n codul
bibliotec pentru a susine irurile, Maps i de performan nalt?
[Peter] n Yahoo Cloud Ser vice
Sets, care au interfee mai simple cu care s
lucrezi. Ambele Queue i Map pot persista Benchmark, deeurile produse devin n
i distribui date ntre procese pe acelai final o constrngere. La aproximativ 3
aparat ntr-un ritm de 30+ M operaii per milioane de citiri/scrieri pe secund, bensecund. Ceea ce ar fi fost imposibil de chmark-ul poate utiliza pn la 90% din
CPU.
fcut n Java pur, n oricare alt mod.
Cel mai bun loc pentru a ncepe s
De exemplu, poi scrie
reduci
reziduul este s rulezi un test reaMap<String, String> map =
list
ntr-un
profiler de memorie. Eu utilizez
ChronicleMapBuilder.of(String.
class, String.class).
YourKit,
dar
mai exist i alte profiler-e
createPersistedTo(file);
comerciale
bune.
Odat ce vezi unde se
// you can now use the map as normal.
genereaz
cea
mai
mare
parte a reziduului,
map.put(hello, world);
le
poi
nlocui
cu
alternative
care creeaz
String s = map.get(hello);
mai puine reziduuri sau deloc. De exem[Peter] Ceea ce e magic n legtur cu plu, utilizai primitive, obiecte simple n
aceasta este c intrarea este vizibil n mai loc de Maps, obiecte mutabile reciclate, sau
puin de o micro-secund la toate JVM- structuri de date off heap.
Cel mai mare beneficiu al reducerii
urile de pe computerul tu i persist. Este

reziduurilor este pe lng durata de pauz


GC, i viteza de rulare a codului tu ntre
pauze. Reducerea ratei alocate poate
mbunti rezultatul de 2- 5x excluznd
timpul de pauz GC. Rate de alocare mai
mici nseamn c nu i umpli cache-urile
din CPU-ul tu cu reziduuri n fiecare
fraciune de milisecund i c thread-urile
(firele) tale lucreaz mai eficient. L1 cache
nu este numai de 10-20x mai rapid dect
L3 cache-ul tu, dar L3 cache este o resurs
partajat, aa c thread-urile tale ncep s
se ncurce unele pe altele cu ct utilizezi
mai mult L3 cache, iar programul tu nu
mai scaleaz la fel de bine atunci cnd
foloseti mai multe nuclee.

www.todaysoftmag.ro | nr. 29/noiembrie, 2014

startups

Tradiia dus mai departe: Bionic Bird

ai mult dect o dron acionat de elice, Pasrea Bionic prima pasre veridic, controlabil prin micarea minii, este
obiectul unei campanii crowdfunding pe Indiegogo. Edwin Van Ruymbeke, director al XTIM, inginer aeronautic i
inventator al Psrii Bionice, prezint ornitopterul care poate zbura cu o agilitate asemntoare psrilor. XTIM a lucrat
timp de 3 ani la aceast pasre extraordinar controlat de smartphone.

Etapele diferite ale acestei campanii


crowdfunding

Lansat pe 21 Octombrie, compania


francez XTIM a ales aceast platform
de crowdfunding internaional care se
concentreaz n special pe inovaiile tehnologice, pentru a supune pasrea lor
aprobrii publicului.
Primul pas n campania noastr
crowdfunding ($ 25,000, care au fost deja
colectai) este s crem un numr de psri
n ediie limitat care vor fi un obiect al
colecionarului. Primele 1000 de psri
vor fi oferite la un pre de 100 $, mult mai
ieftine dect preul viitor propus pentru
vnzarea cu amnuntul. Acestea vor fi
livrate de srbtori.
Al doilea pas ($ 50,000, de asemenea
atins) va permite dezvoltarea Aplicaiei
Bionic Bird, the FlyingApp, pe Android
OS. Adugat la aplicaia IOS programat iniial, aceasta a lrgit lista sa de
smartphone-uri compatibile pentru a
acoperi marea majoritate a dispozitivelor
existente pe pia.
Vor fi necesare aproximativ 2 luni pentru dezvoltarea aplicaiei, adaptarea UI la
numeroasele modele Android i n final
livrarea pe Google Play. Avem promisiunea c aplicaia va fi disponibil pentru
utilizatori pn la sfritul lui Decembrie.
Astzi, trecem mai departe la etapa a
3-a, un adevrat decalaj tehnologic care
trebuie depit! Scopul su va fi atins de
ndat ce se ajunge la fondul de $ 200,000:
controlarea cozii de la distan. Prin utilizarea bio-metalului (aliaj cu memoria
formei) dispozitivele de acionare vor
putea controla unghiul cozii de la distan,
ceea ce va deschide calea spre noi capaciti de zbor: cascadorii aeriene precum
lupingul (descrierea unor bucle), zboruri
cu vitez foarte mic, traiectorii precise.
Acest nou pas este esenial pe drumul ctre
proiectul final al unei drone Bionic Bird

Bionic Bird: miracolul micro-tehnologiei, inspirat de biomimetism.

dezvoltarea micro-bateriilor (LiPo) i a


micro-motoarelor (coreless). nainte nu ar fi
fost posibil s ai o pasre electric suficient
de uoar pentru a zbura la vitez mic cu
o aa anvergur redus a aripilor.
Dup ani de cercetri, Pasrea Bionic
a sosit! Primul prototip a zburat frumos,
mai bine dect m-am ateptat S-au deschis noi drumuri!
- Edwin Van Ruymbeke, un inginer
dintr-o familie de inventatori.

Muli ani am lucrat pentru firma bunicului i a tatlui meu, inventatori ai TIM,
bine-cunoscuta pasre care zboar btnd
din aripi, propulsat de o band elastic.
Drept parte a cursurilor mele de inginerie
aeronautic, am studiat zborul psrilor
i am visat s gsesc o cale de a nlocui
banda de cauciuc care propulsa pasrea cu
un motor electric i o baterie, astfel nct s
poat fi dirijat de la distan.
Acest lucru a devenit posibil numai
odat cu apariia noilor telefoane mobile,
care sunt uoare i compacte, ct i cu

Pentru a descoperi mai multe detalii,


i-am pus lui Edwin Van Ruymbeke cteva
ntrebri:
[Laurence Blestel]Care este cea mai
mare diferen ntre Pasrea ta Bionic i
psrile mecanice pe care le-au construit
tatl i bunicul tu?
[Edwin Van Ruymbeke] De fapt, cea
mai mare diferen n termeni de funcionalitate, este c poate zbura un timp mult
mai lung (8 minute fa de 8 secunde), c
poate fi controlat de la distan (de ctre
un smartphone) i c are o vitez de zbor
reglabil, care permite i zborul n interior.
Din punct de vedere tehnic, provocarea a
fost s nlocuim o band de cauciuc simpl, de 3 grame, cu 2 motoare, o baterie, 2
cutii de viteze i o plac cu circuit integrat
cu 2 CPU pentru o i mai mic greutate
la raportul de anvergur a aripilor. Pasrea
noastr Bionic cntrete 9 grame pentru
o anvergur a aripilor de 33 cm. Originalul
TIM cntrea 16 grame pentru o deschidere a aripilor de 40 cm. Acest lucru a fost
obinut printr-un design care nu a fcut
nicio concesie zborului n defavoarea greutii, cu mecanic ultra-miniaturizat,

complet funcional.
A patra etap ($ 400,000) este de a
controla planarea Psrii Bionice. Aceasta
va fi suficient de stabil n zborul su pentru a nregistra filmulee clare, ceea ce ne
duce la etapa final ($ 800,000): inseria
unei micro-camere de luat vederi n interiorul corpului psrii bionice.

Observnd psrile reale, Edwin Van


Ruymbeke a conceput i patentat un sistem de direcie utiliznd distorsiunea
aripilor, care permite schimbri rapide i
imediate de direcie. Ajustarea unghiului de inciden a cozii permite psrii
s zboare att n interior ct i n exterior. n spaiu deschis, raza sa este de 100
yarzi iar viteza de 12 mile pe or. Pasrea
Bionic cntrete numai 9,3 grame pentru
o lungime de 6,7 inci i o anvergur a
aripilor de 13 inci. Are 2 procesoare, 2
motoare i o baterie, dar i un mecanism
patentat similar unui mecanism de
ceasornic. Pasrea bionic se ncarc pe
oul su, printr-un contact magnetic, n mai
puin de 12 minute. Folosind oul drept un
ncrctor nomad, pasrea bionic poate
susine 10 zboruri de pn la 8 minute.
Mai mult, prin magia mimetismului, zborul psrii bionice este att de real nct
celelalte psri cred c este una de a lor.

nr. 29/noiembrie, 2014 | www.todaysoftmag.ro

TODAY SOFTWARE MAGAZINE


i alegerea celor mai avansate materiale btaie al arii componente care pot fi gsite n zilele
noastre. i un set de
soluii

inovatoare care au

fost patentate.

Care este numele bunicului i al tatlui


tu, care au inventat prima pasre mecanic? Poi s ne spui un pic mai multe
despre afacerea lor? Au vndut psrile? A
fost aceasta afacerea familiei voastre?
[Edwin Van Ruymbeke] Bunicul
Gaston i tatl meu, Gerard Van Ruymbeke
au inventat prima pasre mecanic care
putea zbura btnd din aripi i a fost
vndut drept un produs industrial. Ei au
nfiinat mpreun o fabric de jucrii i
au produs aceast pasre din 1969 i pn
acum. A fost un mare succes n ntreaga
lume n anii 70 i nc se vinde i n zilele
noastre. Eu am lucrat cu ei timp de 20 de
ani. Acum mi-am creat propriul meu proiect i propria companie, dar fratele meu
nc vinde pasrea mecanic original prin
compania familiei DeRuymbeke SARL.

Este dovedit faptul c ei au fost primii care au inventat o pasre mecanic


zburtoare?
[Edwin Van Ruymbeke] Da, este dovedit i bine cunoscut n industria jucriilor
drept un produs celebru, unic pe pia.
Tatl meu deine brevetul. Toate celelalte
produse similare pe care le putei gsi sunt
copii care nu au primit niciodat dreptul s fie vndute n rile vestice sau n
Japonia datorit proteciei brevetului. Le
putei gsi numai n rile din Asia.
Care a fost cea mai mare provocare tehnic pe care a trebuit s o depii pentru a
construi Pasrea Bionic?
[Edwin Van Ruymbeke] Dup cum
am explicat mai sus, provocarea nr. 1 a
fost s reducem greutatea i dimensiunea
la minim. A doua a fost s mbuntim
n mod radical eficiena sistemului de

pilor. n

rndunelele!
Ce educaie ai? Cum ai deprins
abilitile pentru a
dezvolta
Pasrea

comparaie cu un sistem cu
elice, noi avem dezavantajul de
a
avea o micare alternativ, care, teoretic,
irosete mult energie numai prin inerie.
Trebuie s accelerezi /opreti/ accelerezi
aripile n fiecare ciclu. O elice doar se
rotete i poate nainta toat puterea sa n
aer. Dup luni ntregi de cercetare, aripile
noastre au atins o eficien apropiat de
cea a elicelor. Cu un motor identic, propulsarea vertical a psrii noastre este
similar cu cea a unui elicopter de jucrie
pe care l putei gsi pe pia.

Bionic?
[Edwin Van Ruymbeke] Eu sunt inginer aeronautic. Asta este ceea ce am studiat
i am absolvit o coal Franuzeasc de
ingineri. Dar n perioada anilor n care am
mbuntit pasrea mecanic, am mers
mult mai departe cu studiile mele dect
era necesar pentru acea jucrie. Am creat
prototipuri diverse, am fcut calcule, programe pentru a studia principiul de btaie
a aripilor. De asemenea, eu cred c a fi
inventator este o stare de spirit pe care o ai
toat viaa. i pui cap la cap toate ideile sau
n videoclip pare c ai controla pasrea gndurile care vor rezulta n final n ceva
prin micarea smartphone-ului care este cu totul nou.
tehnica din spatele acestui lucru? Cum este
De ce o pasre? Toat lumea lucreaz
pasrea controlat mai exact, prin aplicaie
la drone n zilele noastre; de ce ai decis s
sau gesturi?
[Edwin Van Ruymbeke] Noi folo- construieti o pasre, n schimb?
[Edwin Van Ruymbeke] M-am decis
sim senzorul inclus n smartphone-uri.
Senzorul G, senzorul de cmp magnetic. s fac o pasre acum mult vreme. Este
Un algoritm calculeaz unghiul de ncli- proiectul de o via. A nceput n mintea
nare a telefonului i l transform ntr-o mea cnd lucram la pasrea mecanic. La
comand ctre sistemul de direcie al acea vreme, tehnologia motoarelor i a
psrii. Cnd nclini telefonul spre stnga bateriilor nu era suficient de uoar pen(i proporional la unghi), pasrea se va tru a reui asta. Dar ateptam momentul
ntoarce spre stnga (respectiv dreapta). cnd aceasta va deveni posibil, iar acel
Precizia poate fi reglat prin setrile apli- moment a venit n sfrit odat cu batericaiei pentru a se putea adapta simului ile Lipo i motoarele fr miez. Eu nu am
oricui. Aceste gesturi foarte naturale de urmat niciodat trendul. i m mndresc
a controla direcia de zbor a psrii face destul de mult c nu sunt numrul o mie
utilizatorul s simt c interacioneaz care am fcut o dron multi-rotor, i c am
direct cu pasrea, iar, dup puin antrena- dezvoltat ceva unic.
ment, s uite de dispozitivul de control.
Devine mult mai intuitiv dect un emitor standard.
Exist vreo pasre anume care a servit
drept model pentru Pasrea Bionic sau
pentru comportamentul su de zbor?
[Edwin Van Ruymbeke] Forma corpului i proporia dintre lungimea corpului i
anvergura aripii este inspirat de o pasre
rpitoare. Arat ca un mini-vultur. n ceea
ce privete comportamentul su de zbor,
viteza de btaie a aripilor este mai mare, i
ar fi mai apropiat de cea a unui porumbel. Dar cu performana sa foarte bun de
planare, se apropie din nou de o pasre
de prad. Rezultatul este un amestec. Dar
cele care o ndrgesc cel mai mult cnd
zboar pe cer i vin s se joace cu ea sunt

Laurence Blestel

laurence@mybionicbird.com
Relations presse
@ XTIM

www.todaysoftmag.ro | nr. 29/noiembrie, 2014

startups

Dosare de startup
Foody Prima platform de loializare de restaurante din Romnia

m fcut cunotin cu Iulian si Vlad acum aproape un an cnd ne-au trecut pragul cu o idee de aplicaie destinat platformelor mobile, denumit Foody. Iulian venea la mas cu experiena sa din domeniul HORECA, Vlad, cu expertiza tehnic,
iar Gemini Solutions Foundry cu nvturile culese n urma celor 10 ani de lucru cu startup-uri. Aa c ne-am aezat la
mas i am nceput s ntoarcem acea idee pe toate prile i s o cizelm pentru a defini ct mai bine un MVP ce avea s apar mai
trziu pe pia.
Un MPV (Minimum Viable Product)
este un produs ce conine un set minimal
de funcionaliti cheie ce permit lansarea pe pia ntr-un timp ct mai scurt cu
efort i costuri minime. n urma feedbackului obinut va porni o nou iteraie ce va
rafina produsul dup dorinele pieei, n
acest fel evitndu-se un scenariu n care se
construiete produsul perfect pe care nu l
utilizeaz nimeni.
O alt definiie ar fi: MVP-ul este o
versiune a unui produs ce permite unei
echipe s primeasc o cantitate maxim de
cunotine validate despre clienii si cu un
efort minim depus.

n momentul de fa la echipa Made by


Apes (Foody este produs de echipa Made
by Apes) s-au alturat cu fore proaspete
Edmond i Cristian. Edmond are n spate
o experien de peste 12 ani n domeniul de vnzri pe parte de HORECA, iar
Cristian vine cu experiena unui business
de succes pe piaa din Romnia n domeniul vnzrilor de combustibil, lucru care a
permis continuarea proiectului cu resurse
proprii. Cu ajutorul lor, Foody a adugat
peste 100 restaurante din Bucureti i a
acumulat peste 2500 de utilizatori ce fac
zilnic rezervri prin intermediul aplicaiei.
Drumul lor nu se oprete aici, ns despre
Pentru Foody, MVP-ul arta n felul aceasta ne va povesti mai multe Iulian.
urmtor:
[Radu Popovici] Iulian, ce nseamn, de
Existena a dou aplicaii pentru
cele mai utilizate platforme mobile din fapt, Foody?
[Iulian Gean]: Foody este prima platRomnia: Android i iOS;
form de loializare din Romnia, destinat
Prin intermediul aplicaiilor:
Utilizatorul va putea descoperi restaurantelor, puburilor i barurilor,
menit s faciliteze accesul oamenilor la
restaurantele din proximitate;
Utilizatorul va putea rezerva o programele lor de fidelizare (discount-uri,
meniuri speciale, vip rewards ,etc.), prin
mas la un restaurant;
n schimbul rezervrii, utilizatorul intermediul unei aplicaii de mobil.
Mai mult dect att, Foody este
va primi un discount la nota de plat.

10

nr. 29/noiembrie, 2014 | www.todaysoftmag.ro

aplicaia destinat tuturor oamenilor care


doresc s mnnce n ora sau cltoresc
i au nevoie de un ghid care s i ajute s
aleag un restaurant n alte orae sau n
alte ri. Vrem ca FOODY s devin cel
mai bun prieten al tu cnd mnnci n
ora i care s te rsplteasc de fiecare
dat cnd iei.
De unde a pornit aceast idee?
[Iulian] Ideea de la care s-a nscut
FOODY a fost una destul de simpl la nceput. n urma unei discuii cu Vlad, ne-am
dat seama c, dei el este din Bucureti,
iar eu m-am mutat de peste zece ani n
capital i mncm destul de des n ora,
nu cunoatem dect 10-15 restaurante i
cteva shaormerii. i astfel a nceput cltoria noastr...
Prima platform de loializare: am pus
ideile pe hrtie i am realizat c putem
construi o punte de legtur ntre clieni
i restaurante; relaia existent astzi fiind
una destul de rece i nu din cauza calitii
produselor (se mnnc bine de tot n
foarte multe locuri), ci datorit serviciilor
i recompensrii oamenilor care sunt loiali
unui brand.

TODAY SOFTWARE MAGAZINE


n afar de locaiile noi, la ce s ne
ateptm n viitorul apropiat din partea
Foody?
[Iulian] Bonusuri i un joc plin de surprize alturi de un nou concept care v va
face s ieii n ora pentru o experien
culinar extraordinar i accesibil.

Sunt receptive restaurantele la soluia


oferit?
[Iulian] Restaurantele ncep s
neleag din ce n ce mai mult importana
de a-i fideliza FIECARE client care le
trece pragul prin diverse metode pentru a
oferi oamenilor un motiv n plus s revin
i a-i transforma n ambasadori ai brandului lor. Cei care au neles acest lucru mai
de mult au deja rezultate vizibile .
Restaurantele pot folosi FOODY ca
o platform de loializare pentru clienii
lor deja loiali i n acelai timp i pentru
a atrage noi clieni. Spre deosebire de alte
canale de promovare, rezultatele venite
prin FOODY sunt contorizate 100%,
fa de un banner sau o reclam ntr-o
publicaie unde return-ul nu este ceva
exact, ci doar o expunere. Iar avantajele
unei aplicaii ca FOODY vs O aplicaie
specific unui singur restaurant sunt evidente: numrul potenialilor clieni crora
te adresezi poate fi de sute sau chiar mii de
ori mai mare, costurile sunt de zeci de ori
mai mici i lista continu.

de conversie de peste 95%. Experiena


din industria HORECA ne-a ajutat foarte
mult aici. De asemenea i faptul c avem o
aplicaie de ni i nu ceva generalist, ne
ajut foarte mult s pstrm o concentrare
ridicat asupra a ceea ce facem.

Vd c pe Play Store avei cteva ratinguri negative. Ce s-a ntmplat?


[Iulian] Concurena. Este un lucru
extraordinar c primim i ratinguri negative deoarece ne arat unde greim i ne
ajut foarte mult s cretem calitatea
produsului. Cred c o aplicaie cu 100%
ratinguri de 5 stele este la fel de real ca o
Romnie cu strzi fr gropi.
Revenind la ce s-a ntamplat la noi,
greeala ne aparine deoarece ntr-un fel
sau altul mai multe persoane din afara
Bucuretiului au aflat de aplicaie i au
instalat-o i evident au avut o experien
neplcut vznd c cel mai apropiat restaurant se afla la sute de km de ei. Lucrm
la un plan de extindere pentru FOODY n
toate marile orae din Romnia. Dorim
nti s stabilim o relaie strns cu utilizatorii din Bucureti i restaurantele locale
Pentru un business ca al vostru, de obi- dup care vom ncepe extinderea.
cei primii pai sunt cei mai grei. Este greu
Ct de curnd vom vedea Foody i n
s atragi utilizatori n platform dac nu ai
ce le oferi, i este greu s atragi restaurante alte orae din ar?
[Iulian] n urmtoarele 6 luni credac nu ai muli utilizatori. Cum ai trecut
dem c putem ncepe n orae precum:
de acest impas?
[Iulian] Cred c cel mai important Constana, Cluj, Timioara, Sibiu, Braov,
lucru este execuia, viteza de reacie i capa- Iai. Depinde foarte mult de rezultabilitatea de a pivota n funcie de rezultate. tele i fine-tuning-ul din Bucureti. Ne
Uneori ns cea mai scurt distan dintre dorim foarte mult s venim cu o soluie
dou puncte nu este o linie dreapt, ci o pentru ntreaga ar. Mai ales c suntem
linie curbat care ocolete obstacolele i te naionaliti i iubim Romnia!
ajut s ajungi la capt. Paii au fost destul
Dar n alte ri?
de evideni pentru noi: construim plat[Iulian] Noi ne dorim ca FOODY s
forma, mergem la restaurante pentru a le
nrola n FOODY i a avea o baz minim ajute utilizatorii s gseasc restaurantele
de locaii i oferte pentru a fi interesant din toat lumea n viitor i s aib acces
pentru utilizatori dup care ncepem la toate beneficiile oferite de acestea.
expunerea ctre clieni. Ideea a fost destul ns pentru aceasta avem nevoie de un
de bine primit de restaurante cu o rat investitor.

Considerai util colaborarea cu Gemini


Solutions Foundry?
[Iulian] ntlnirea cu Gemini Solutions
Foundry a reprezentat un moment cheie
pentru noi. Ajutorul i motivaia oferite de
voi ne-au ajutat s mergem mai departe,
fiind lovii de Palma dezndejdii pe care
o primim toi cnd ncepem s construim
ceva nou i ne lovim de primele probleme
grele la care nu se vd soluii imediate.
Optimismul i profesionalismul voastru
au contribuit destul de mult la dezvoltarea
FOODY i sperm c o va face i n viitor.
Deci ai recomanda tiner ilor
antreprenori s ne contacteze?
[Iulian] Fr un ajutor precum cel oferit de GSF cred c ansele ca un start-up
s se mpotmoleasc sunt maxime. i noi
ne considerm destul de experimentai
n industria pe care am ales-o. Personal
recomand cu toat ncrederea oricrui
antreprenor care pornete la drum s colaboreze cu firma voastr deoarece ajutorul
pe care i-l putei oferi este inestimabil
pentru un newbie. Pornind de la expertiza tehnic, analiza codului, sfaturile pe
partea de Legal & Finance, design i user
experience sunt atuuri pe care GSF le aduce
la mas oferind anse reale de succes oricrui start-up. Iar contactele pe partea de
Venture Capital reprezint un gold-mine
pentru orice antreprenor.
Dac v-am fcut curioi, putei
download-a aplicaia Foody de pe pagina
Made By Apes1, iar dac dorii s vedei
restaurantul vostru preferat ct mai repede
n platform trimitei un email2 specificnd acest lucru.
1 http://madebyapes.com/
2 foody@madebyapes.com

Radu Popovici

radu.popovici@geminisols.com
Associate
@ Gemini Solutions Foundry

www.todaysoftmag.ro | nr. 29/noiembrie, 2014

11

startups

Comunicarea ntr-un startup

u ocazia unui startup care a implicat ca tem de gndire comunicarea, am ajuns la concluzia c, la fel ca i n alte proiecte
sau organizaii, aceast comunicare e o umbrel care formeaz baza lucrului n echip i a interaciunii umane ntre cofondatori, utilizatori sau ali stakeholder-i. Aa c din aceast perspectiv, mi-am pus ntrebarea c, dac ar fi s ncep un
nou startup, cum a face-o i ce sfaturi mi-a da valorificnd experiena de pn acum? Iar rspunsul l gsii mai jos, n rndurile
ce urmeaz. Am intrat n contact cu lumea startup-urilor acum aproape trei ani i, pn acum, am fost implicat n UseTogether cu
spinoff-ul generat (Momly) i n ZenQ. n acelai timp, am avut ocazia s vorbesc cu ali fondatori de startup-uri din comunitatea din
Cluj/Romnia, dar i cu cei prezeni n cele dou acceleratoare la care am participant (Launchub i TechPeaks).
Comunicarea intern, n echip, ncepe de fapt nainte
de startup. Extrem de rar se ntmpl ca un startup s ajung
departe cu o echip ai crei membri se cunosc de puin timp
sau superficial. Co-fondatorii sunt ca nite frai/surori n care
ncrederea ar trebui s fie extrem de mare. Iar pe lng acest
factor, e nevoie i de o potrivire n mindset i atitudine. Am
ntlnit cazuri n care co-fondatorii lucrau bine mpreun, dar
nu ncercau s se neleag sau s in legtura ca prieteni; cnd
momentele grele au aprut, nu au reuit s le depeasc, tocmai
pentru c nu aveau o legtur mai puternic. Cu ct un startup
are o echip mai mare cu att mai mult se subiaz conexiunile
ntre membrii echipei, din simplul motiv c timpul petrecut
cu una sau dou persoane se mparte, de exemplu la 4 sau la 5
persoane i inevitabil ajunge s fie mai puin, deci dureaz mai
mult ca legturile s prind rdcini. La nceputul unui startup,
cred c accentul cade mai ales pe formarea i ntrirea echipei
i nu pe dezvoltarea produsului. Dac produsul se schimb, nu

12

nr. 29/noiembrie, 2014 | www.todaysoftmag.ro

e o tragedie, dar schimbarea unei echipe sau a unui membru


genereaz conflicte mult mai mari.
S ai ncredere maxim nc de la nceput e ca i cum ai
conduce o main cu ochii nchii. Primele sptmni/luni sunt
de tatonare, ca i cum un cuplu nv s danseze vals, trebuie s
ajungi s simi acel partener. Cred c dureaz un timp pn cnd
ateptrile devin mai clar definite n mintea fiecruia ca apoi s
fie rostite.
Un contract de vesting (felul cum vor fi mprite aciunile i
n ce condiii le vor primi fiecare dintre co-fondatori sau primii
angajai) e ceva obligatoriu, poate nu chiar de la nceput, dar ct
mai repede dup ce colaborarea ajunge s fie mai statornic. E
o discuie ciudat, i vine s discui despre orice altceva dect
despre acest lucru, dar dac e amnat peste msur atunci nu
mai e cale de ntoarcere, deoarece ntre timp, ateptrile fiecruia
au crescut, au prins rdcini i sunt mai greu de lsat deoparte.
Am trecut de trei ori prin acest proces i de fiecare dat am avut

TODAY SOFTWARE MAGAZINE


strngere de inima cnd am abordat subiectul. A avea o nelegere
de tip vesting nu nseamn neaprat nfiinarea firmei imediat
dup, deci nu e o complicaie legal, dar are rolul de a limpezi
apele i ndoielile, iar co-fondatorii pot respira mai uurai. Fii
sigur c fiecare dintre ei are aceast tem n minte, dar de multe
ori ateapt momentul potrivit sau deschiderea subiectului de
ctre altcineva.
Ct despre comunicarea intern on-line, am folosit soluiile
cele mai simple: Skype (chat + video), grup privat pe Facebook,
Google Hangouts - sunt cunoscute, toat lumea le folosete i
satisfac nevoile de baz. Dar o dat ce am ncercat soluii din
generaia nou (www.slack.com, www.kato.im, www.hipchat.
com) , create expres pentru comunicarea n echip, mi-am
dat seama c exist attea alte feature-uri care sunt extrem de
folositoare: tags, chatrooms, screen sharing, integrri cu zeci de
alte tool-uri pentru teamwork i team management, toate incluse
n acelai produs.
n ultima vreme, trendul echipelor dispersate n mai multe
locaii crete i, pe bun dreptate, ofer o mai mare flexibilitate,
doar c se omite frecvent o condiie: nivelul de coeziune al echipei.
E o diferen foarte mare ntre o echip ce se ntlnete zilnic sau
o dat la cteva zile i o echip ce are edine/ntlniri la fel de
des n on-line. Doar dac o echip e nchegat i funcioneaz
deja bine, poate ncerca lucrul dispersat pe termen mai lung,
din punct de vedere al locaiei. Altfel, n timp, entuziasmul i
dedicarea scad, nu din rea voin, ci pur i simplu pentru c e
nevoie de conexiunea uman care on-line e mult mai greu de
susinut.
n zona comunicrii externe, reinerea n activiti de PR
e o simptom des ntlnit, mai ales deoarece co-fondatorii
consider c produsul nu e destul de prezentabil. Da, oamenii
vor judeca (unii vor da i feedback), dar e mai bine aa dect
supra-protecia pe care tindem s o acordm startup-ului. Dei e
copilul nostru tot trebuie s ias n lume, cu ct mai repede, cu
att mai bine. Un pericol neateptat aici este asocierea puternic
n mintea fondatorului ntre startup i propria persoan, critica
adus startup-ului sau produsului nu e o critic personal adus
co-fondatorului. Bineneles, fondatorii sunt responsabili de
startup, dar nu ar trebui s se identifice cu acesta i s ia n nume
personal toate probleme care apar. Nu doar c duneaz startupului, dar afecteaz moralul fondatorilor.
n comunicarea extern intr i comunicarea cu utilizatorii,
care nseam de multe ori, e-mailuri pe diverse subiecte mrunte,
la ore variate, cteodat pare o corvoad, dar e necesar mai ales
cu primele sute de utilizatori. mi aduc aminte c am dat atenie
sporit unui produs, chiar l-am folosit de mai multe ori dup un
e-mail primit de la unul din fondatori. Dei sunt destul de sigur
c era un e-mail automatizat, era scris att de simplu, prietenesc
nc am avut impresia c mi-a fost scris mie special. Dac a
fi primit ceva n format de newsletter l-a fi deschis (poate) i
dup dou secunde l-a fi ters. n aglomeraia de e-mailuri i
newslettere, e mult mai greu s acaparezi atenia cuiva printr-un
format standard. Ah, nc ceva: s fie scurt, ce e mai mult de trei
paragrafe (7-10 rnduri) mi pare deja prea lung ca s fie citit cu
atenie.
Per total, o problem rar identificat ce ine de comunicarea
i atitudinea intern mi se pare c este lipsa de concentrare,
att n partea de produs ct i n partea de go-to-market. Attea
feature-uri excelente pot fi adugate, attea nie pot fi atrgtoare
cu statut de clientel, nct energia disipat ntre ele face ca efectul

pe fiecare direcie s fie mai redus i rezultatele mai sczute. Un


startup, prin definiie, are resurse sczute , dar claritatea n focus
ajut n primele reuite, tocmai pentru c permite abordarea
unui aspect sau a unei probleme cu toat energia posibil.
Concentrai-v, concentrai-v!/ Focus, focus, focus! e mantra pe
care co-fondatorii ar trebui s i-o comunice n fiecare zi i s-i
pun ntrebarea ce nu e necesar, ce e n plus i nu ne aduce mare
lucru n schimb?

Mircea Vdan

mircea.vadan@gmail.com
www.clujstartups.com

www.todaysoftmag.ro | nr. 29/noiembrie, 2014

13

eveniment

How to Web Startup Spotlight prezint cele 32 de echipe


admise n program

ucureti, 30 octombrie 2014. 32 de startup-uri din 10 ri vor participa n luna noiembrie la How to Web Startup Spotlight,
competiie i program de mentorat adresat echipelor din Europa Central i de Est care dezvolt produse tech cu potenial
disruptiv. Acestea vor participa la workshop-uri i sesiuni de mentorat i vor avea ocazia s i prezinte produsele pe scena
principal a How to Web Conference 2014 i s intre astfel n cursa pentru premiile n valoare total de 20.000 USD oferite de IXIA,
partener principal al programului.
Startup-uri early-stage n tehnologie care dezvolt produse n domeniul tehnologiilor purtabile, internet of things, mobile,
medtech sau ecommerce au aplicat la Software-as-a-Service ntregului ecosis- utilizatorii s i monitorizeze consumul
cea de a treia ediie How to Web Startup tem (site-uri web, agenii, companii de energetic i pe furnizorii de energie s gestioneze perioadele de ncrcare crescut a
Spotlight. Participanii au fost selectai de ecommerce sau publicitate);
Axosuits (Romnia): exoschelei uor reelei;
un juriu de specialitate lund n consideEkipa (Serbia): aplicaie care conecrare experiena echipei, dimensiunea pieei de folosit i accesibili ca pre pentru perteaz grupuri de trei prieteni cu alte
i tendinele actuale, validarea utilizatori- soanele cu dizabiliti;
Bethall (Grecia): platform care aduce grupuri de trei prieteni i le faciliteaz
lor, creterea iniial, costul de achiziie al
utilizatorilor, scalabilitatea i fezabilitatea mpreun pasionaii de pariuri sportive i acestora ntlnirile n diferite localuri;
Fastrrr (Ungaria): echipament care
le permite acestora s gseasc i s publice
afacerii.
permite practicanilor de sporturi naupreviziuni;
Bitrise (Ungaria): platform care tice s determine viteza exact pe ap i s
Cine sunt participanii How to Web
automatizeaz
dezvoltarea de aplicaii iOS detecteze cele mai mici diferene de vitez
Startup Spotlight 2014?
cauzate de schimbri de vreme sau de conn
cloud;
Cele 32 de echipe dezvolt produse
Blushr (Romnia): aplicaie mobil diii tehnice;
n domenii precum software, hardware,
fittter (Romnia): aplicaie mobil
internet of things, mobile sau med- care ajut adolescenii cu vrste cuprinse
tech. Aceste echipe provin din Romnia, ntre 13 i 17 ani s descopere care dintre i web n domeniul sntii i fitnessului care conecteaz cltorii de business
Polonia, Grecia, Ungaria, Ucraina, Serbia, prietenii lor i plac.
CloudPress (Romnia): plaform prin cu antrenorii i i ajut s i menin
Muntenegru, Bulgaria, Slovenia i Moldova
i vor participa ntre 19 i 21 noiembrie care designerii pot crea site-uri Wordpress obiceiurile sntoase de via pe durata
la How to Web Startup Spotlight 2014. responsive n manier vizual i le pot deplasrilor;
Geostep (Muntenegru): aplicapublica la final printr-un singur click;
Acestea sunt:
DailyOne (Ungaria): aplicaie de ie care permite crearea de vntori de
3Deva (Romnia): adaptor hardware
care transform dispozitivele mobile n crowdfunding pentru organizaiile comori interactive i ajut utilizatorii s
descopere atracii turistice neobinuite i
nonprofit;
aparate de realitate virtual;
Devicehub (Romnia): platform web impredictibile;
Attensee (Polonia): statistici online de
Latio Inc (Ucraina): kit de dezvoleye-tracking pentru optimizarea conver- care analizeaz datele generate de miliarde
de dispozitive conectate la internet i te tare software personalizabil, care permite
siei pe site-urile web;
dezvoltatorilor i companiilor s integreze
Av an d or C on s u m er Prof i l i ng ajut s iei cele mai bune decizii;
Ecoisme (Ucraina / Polonia): un ser- tehnologiile iBeacon fr a se pierde n
(Romnia): platform deschis de
date ale consumatorilor disponibil ca viciu i un dispozitiv electronic care ajut detalii;
L i f e b o x
(Romnia): Aplicaie
mobil care i
remintete s mprteti fotografiile cu
prietenii care au fost
Young spirit
alturi de tine la un
Mature organization
eveniment;
A shared vision
Marketizator
( R om n i a ) :
Join our journey!
Platform 3 n 1 pentru optimizarea ratei
de conversie pe siteurile de ecommerce;
www.fortech.ro
O b l i c o
(Romnia): aplicaie

14

nr. 29/noiembrie, 2014 | www.todaysoftmag.ro

TODAY SOFTWARE MAGAZINE


Spotlight vor
participa la
workshop-uri i
sesiuni de mentorat dedicate
i vor ntlni
prof e s i on i t i
cunoscui din
i n du s t r i a d e
tehnologie
la nivel g lobal, precum i
reprezentani
ai unora dintre
cele mai apreciate programe
de accelerare
i fonduri de
investiii early
stage. n plus,
st ar tup - u r i l e
vor avea ocazia
s i prezinte
pro dus ele n
faa ntregii audiene a
How to Web
Conference
2014 i vor intra
astfel n cursa
pentru premiile
n valoare total de 20.000 USD oferite de
IXIA, partener principal al programului.
How to Web Startup Spotlight 2014
este un program dezvoltat n parteneriat
cu IXIA cu sprijinul partenerilor Telekom
Romania, Bitdefender, Grapefruit,
Av ang ate, S of t l aye r, Cy b e r Gho st ,
Hub:raum, Domain.me, Ambasada
Canadei n Romnia i Reea i va debuta
miercuri, 19 noiembrie, cu o sesiune de
pitching n urma creia va fi realizat un
clasament iniial. Juriul va desemna 8
echipe finaliste care vor concura pentru
toate premiile disponibile i 16 semifinaliti care se vor lupta pentru premiile
pentru cea mai bun prezentare, respectiv
IXIA Innovation Award, alturi de finaliti.
n cea de a doua parte a zilei, participanii Startup Spotlight vor avea ocazia
s participe la workshop-urile dedicate i
Startup Spotlight Office Hours care se vor
desfura la TechHub Bucharest. Pe 20 i
21 noiembrie, echipele vor avea acces la
toate activitile How to Web Conference
2014 i vor ncheia fiecare dintre zile cu
sesiuni de mentorat 1 la 1 cu profesioniti
i experi n domenii de interes pentru
ei. How to Web Startup Spotlight 2014 se
ntre 19 i 22 noiembrie, cele 32 de incheie smbt, 22 noiembrie, cu un eveechipe participante la How to Web Startup niment social n cadrul cruia participanii

mobil bazat pe geo-localizare care folosete informaiile de pe LinkedIn pentru a


te ajuta s te conectezi cu profesioniti la
evenimente i conferine;
Pocketo (Romnia): Platform i kit
de dezvoltare hardware pentru a construi
dispozitive purtabile i a le face s comunice ntre ele;
PPrintee (Romnia): imprimant de
buzunar care i permite s tipreti oriunde ai fi, pe orice format de hrtie;
Project Wipe (Romnia): ochelari
electronici care ajut persoanele cu dizabiliti de vedere s se orienteze i s evite
obstacolele;
Shipros (Romnia): Platform care
aduce mpreun clieni care doresc s
expedieze bunuri i transportatori n
cutare de comenzi n domeniul transporturilor terestre;
StudyMentors (Bulgaria): Platform
care conecteaz potenialii studeni la universiti din strintate au absolveni ai
acestora i i ajut s fac o alegere informat a programului i universitii;
Style Jukebox (Romnia): aplicaie
care i permite s accesezi ntreaga ta
colecie de muzic, de pe toate dispozitivele i la calitate foarte bun;
Susurrus (Grecia): platform care
ajut brandurile s identifice blogurile
pe care i pot promova produsele prin
postri (coninut) i s msoare eficiena
acestei activiti sponsorizate prin statistici
de trafic;
Traderion (Romnia): serviciu de
evaluare i recrutare pentru industria
financiar realizat sub forma unui joc;
TravelStarter (Slovenia): manier
alternativ de cltorie care te ajut s obii
recompense dac susii antreprenorii locali
(ex. Primeti cazare gratuit n hostelul la a
crui deschidere ai ajutat);
ViewFlux (Romnia): platform de
colaborare online pentru designeri care
i ajut s i mbunteasc procesul de
lucru;
Vintage (Re publi c a Mol d ova/
Romnia): platform care conecteaz
artitii cu afacerile pentru a-i expune
operele;
VisionBot (Romnia): linie de producie pentru transformarea prototipurilor
n produse industriale pentru cantiti
medii;
Wr1st (Bulgaria): Brar pentru pli
fr cash, control acces i recunoatere a
utilizatorului dedicat evenimentelor.

vor avea ocazia s formeze conexiuni valoroase cu personaliti cheie din industrie
la nivel global.
Startup Spotlight 2014 se desfoar n
paralel cu How to Web Conference 2014,
cel mai important eveniment dedicat inovaiei, tehnologiei i antreprenoriatului din
Europa de Sud-Est. Cea de a cincea ediie
internaional a How to Web reprezint un
nou nceput: evenimentul se maturizeaz
i propune un format mai complex care
trateaz n profunzime subiecte specifice.
Astfel, pe scena principal se va discuta
despre tendinele n tehnologie i antreprenoriat, n timp ce track-urile specializate
despre product management, dezvoltarea
de jocuri i investiiile de tip angel vor oferi
unor categorii specifice de audien ansa
de a acumula cunotine i competene
relevante pentru domeniile lor de interes.
Bilete Early Bird sunt disponibile online
pe site-ul conferinei howtoweb.co/tickets
pn joi, 13 noiembrie.

Irina Scarlat

irina.scarlat@howtoweb.co
PR Manager
@ How to Web & TechHub Bucharest

www.todaysoftmag.ro | nr. 29/noiembrie, 2014

15

comuniti

Comuniti IT

oiembrie este singura lun din acest an n care v-am recomandat s participai la toate evenimentele din calendarul nostru.
Conferine importante au loc precum: Microsoft Summit, How To Web 2014, MOBOS, OSOM, DefCamp i bineneles
evenimentul anual organizat de Today Software Magazine: Cluj IT Days 2014. V invitm s participai la ele !

Transylvania Java User Group


Comunitate dedicat tehnologiilor Java.
Website: www.transylvania-jug.org
Data nfiinrii: 15.05.2008 / Nr. Membri: 594 / Nr. Evenimente: 47
Comunitatea TSM
Comunitate construit n jurul revistei Today Software Magazine.
Websites: www.facebook.com/todaysoftmag
www.meetup.com/todaysoftmag

www.youtube.com/todaysoftmag
Data nfiinrii: 06.02.2012 /Nr. Membri: 1890/Nr. Evenimente: 25
Cluj Business Analysts
Comunitate dedicat analizei de business
Website: www.meetup.com/Business-Analysts-Cluj
Data nfiinrii: 10.07.2013 / Nr. Membri: 91 / Nr. Evenimente: 8
Cluj Mobile Developers
Comunitate dedicat tehnologiilor mobile
Website: www.meetup.com/Cluj-Mobile-Developers
Data nfiinrii: 05.08.2011 / Nr. Membri: 264 / Nr. Evenimente: 17
The Cluj Napoca Agile Software Meetup Group
Comunitate dedicat metodelor Agile de dezvoltare software.
Website: www.agileworks.ro
Data nfiinrii: 04.10.2010 / Nr. Membri: 437 / Nr. Evenimente: 93

Calendar
Noiembrie 12 (Cluj)
Lansarea numrului 29 al Today Software Magazine
www.todaysoftmag.ro
Noiembrie 12-13 (Bucureti)
Microsoft Summit 2014
www.mssummit.ro
Noiembrie 14-16 (Cluj)
3 Day Startup Cluj
cluj.3daystartup.org
Noiembrie 19 (Cluj)
4th BigData/DataScience
meetup.com/Big-Data-Data-Science-Meetup-ClujNapoca/events/216156792
Noiembrie 20-21 (Bucureti)
How To Web 2014 - recomandat de TSM
2014.howtoweb.co
Noiembrie 20-21 (Cluj)
MobOS Conference
romobos.com

Cluj Semantic WEB Meetup


Comunitate dedicat tehnologiilor semantice.
Website: www.meetup.com/Cluj-Semantic-WEB
Data nfiinrii: 08.05.2010 / Nr. Membri: 192/ Nr. Evenimente: 29

Noiembrie 23 (Cluj)
#15 PM Meetup - Monitoring & Controlling Process
meetup.com/PMI-Romania-Cluj-Napoca-Project
-Management-Meetup-Group/events/213993162/

Romanian Association for Better Software


Comunitate dedicat oamenilor cu experien din IT indiferent de
tehnologie sau specializare.
Website: www.rabs.ro
Data nfiinrii: 10.02.2011 / Nr. Membri: 251/ Nr. Evenimente: 14

Noiembrie 24 (Cluj)
OSOM Open Source Open Mind
osom.ro

Tabra de testare
Comunitate format din testeri i ali profesioniti din industria
IT care, n cadrul unor ntlniri informale lunare, mprtesc
din cunotinele proprii i nva din experienele profesionale ale
celorlali membri.
Website: www.tabaradetestare.ro
Data nfiinrii: 15.01.2012/Nr. Membri: 1243/ Nr. Evenimente: 107

16

nr. 29/noiembrie, 2014 | www.todaysoftmag.ro

Noiembrie 24 (Cluj)
Workshop-urile Cluj IT Days 2014
www.itdays.ro
Noiembrie 25-26 (Cluj)
Cluj IT Days - recomandat de TSM
itdays.ro
Noiembrie 28-29 (Bucureti)
DefCamp 2014
defcamp.ro

concurs

programare

Share Cluj - Jurnal tehnic

m auzit prima data de Share Cluj cnd nc era n stadiul de idee, cnd echipa nc
lucra s clarifice scopul proiectului, se gndea cum s implice mai mult lume
i cum s pun Clujul pe harta lumii. Iniial, rolul meu n proiect era de a fi un
ambasador al Clujului, ns participnd la o edin de proiect i avnd pe masa de discuie
partea tehnic a proiectului, am devenit imediat un membru al echipei.
Silvia Rusanu

Silvia.Rausanu@isdc.eu
Senior Developer
@ ISDC

Latura tehnic consta n a construi o


platform care s poat susine concursul
din cadrul proiectului: orice persoan din
Cluj i nu numai s promoveze Clujul n
cltoriile sale, fie ele concedii sau delegaii,
mprtind povetile lor despre Cluj cu
toi cei care nc nu au auzit de Cluj, i
apoi s ncarce pe reelele sociale dovada:
o fotografie a mesajul #sharecluj n fiecare locaie. Provocarea tehnic pe care am
vzut-o eu a fost agregarea pe baza hashtagului #sharecluj (dorit n mesajul post-ului)
a feed-urilor de pe Facebook, Twitter,
Instagram i prezentarea lor pe site-ul proiectului www.sharecluj.com.

Prima soluie

Nu am fost att de ncntat cnd am


descoperit c exist platforme/site-uri care
pot face acea agregare, ns tot aveam ocazia
s le studiez i s aleg opiunea cea mai bun
pentru nevoile proiectului: s expun un API
ce s conin feed-ul cu pozele concurenilor
de pe reelele sociale. Am analizat ce ofer
Rignite, Hashtagr, TINT, TagBord. Nici una
dintre acestea nu expunea API-ul pe care
mi-l doream, ns fiind servicii pltite, am
presupus c se poate discuta cu cei care
ntrein platformele i se poate gsi o soluie
pentru a reui o integrare ct mai rapid i o

lansare a proiectului ct mai curnd posibil.


Era deja luna iunie, iar noi ne doream
ca pn n iulie s dm drumul la concurs.
n ateptarea rspunsurilor de la Rignite i
TINT, am nceput s fac teste pentru anumite hashtag-uri pe care le tot vedeam n
feed-ul personal de Facebook. Lucrurile nu
erau prea roz, nu prea gseam nimic din ce
m ateptam, nici nu se punea problema
de a gsi tot - cum ai putea ine un concurs
dac unii concureni sunt nscrii i alii nu?
Aadar, pe lng integrarea nc sub semnul
ntrebrii cu site-ul sharecluj.com, o alt
situaie mult mai dificil se ntrezrea: nu
puteam folosi nici unul dintre serviciile existente. Deci trebuia s facem totul de la zero!

Soluia adevrat

Cnd termenul propus era din ce n ce


mai aproape, iar partea tehnic nu era nici
pe-departe rezolvat, v putei imagina c
nu eram prea fericit i nici prea ncreztoare c a putea s termin tot singur n aa
scurt timp. Suprat cum eram, am mers
la serviciu i, cu jumtate de gur, mi-am
ntrebat colegii - pe Clin, Dan i Rzvan dac vor s fac voluntariat tehnic. Nu tiu
dac starea mea de spirit i-a convins sau
dac i ei au vzut aceeai provocare pe care
am vzut-o eu iniial, dar cert e faptul c

www.todaysoftmag.ro | nr. 29/noiembrie, 2014

17

programare
Share Cluj - Jurnal tehnic

doar n 10 minute ne-am stabilit o ntlnire la Dan, pe sear, la un


pahar de vin, s ne facem un plan cum implementm sharecluj.
com. Pn sear, ne-am fcut rost i de specificaii funcionale de
la Alina, care din manager de proiect s-a transformat instant n
product owner.
Chiar dac tentaia e mare s experimentezi cu tehnologii
noi cnd ai pe mn un proiect green field, ne-am decis rapid s
folosim ca tehnologie de baz Java i framework-uri cunoscute:
Spring MVC, JDO. Costul proiectului trebuia s fie ct mai mic
posibil, deci nu se putea pune problema nchirierii unui server,
aa c am ales ceva ce nu am mai folosit pn atunci: Google
AppEngine cu o quota suficient de mare pentru stocare de date,
operaiuni pe baza de date, ore de instan, indeci, deploy-uri,
etc. . AppEngine s-a dovedit a fi cel mai potrivit pentru proiect.
Integrarea cu reelele sociale urma s fie fcut folosind API-ul
expus de fiecare prin scrierea de clieni care s aduc metadata
post-urilor i s o stocheze n baza de date.

Implementarea

Pentru a ne asigura c vom reui s terminm tot ceea ce


product owner-ul, Alina, ne-a cerut, am mpins termenul limit
ctre nceputul lui august. Implementarea fiecrui punct s-a fcut
prioritizat, n funcie de riscul pe care credeam noi c l poate
reprezenta.
Aplicaiile web bazate pe Java i Spring MVC nu reprezint
o noutate pentru echipa nou format, aa c primul pas a fost
investigaia GraphAPI-ului oferit de Facebook - Facebook,
fiind cea mai folosit reea social n Romnia (deci i cea mai
relevant pentru proiect), dar i platforma care era cel mai rar
regsit n rezultatele testelor pe agregatoarele de hasgtag-uri,
prezenta cel mai mare risc. De vreme ce exista posibilitatea de
cuta din aplicaia Facebook dup un hashtag, aveam ateptri
foarte mari de la GraphAPI ca acesta s-mi ofere exact ceea ce

18

nr. 29/noiembrie, 2014 | www.todaysoftmag.ro

mi doream: post-urile cu hashtag-ul #sharecluj. Dar nici vorb


de aa ceva! Am aflat de alternativa de a folosi API-ul de search
pentru cuvinte cheie, folosind hashtag-ul; cutarea funciona
dup reguli bizare, unele post-uri apreau printre rezultate, altele
nu. Am fcut experimente pe contul personal: am postat mesaje
de test coninand #sharecity (nu voiam s stric lansarea); am
ateptat o zi, o sptmn s mi apar - nimic; n plus, n scurt
timp, API-ul urma s devin obsolete i retras. ( Nu mai este accesibil la momentul de fa). n cutrile dup explicaii, am dat
peste seciunea FAQ de la TINT, unde precizau c pentru a avea
ntregul feed este necesar un workaround i anume ca utilizatorii
s posteze pe o pagin de Facebook sau s eticheteze (tag) un
utilizator pe coninut. Nu tocmai cea mai profi soluie, ns am
fost de acord toi c era singura.
O veste bun din zona Facebook a fost c pentru autentificare aveau OAuth2 i c se putea face i offline, dintr-u cron
job aa cum intenionam i noi. Peste GraphAPI s-au scris
suficieni clieni Java, dintre care am ales RestFB - uor de folosit
i extensibil.
Dup experiena cu Facebook, ateptrile generale fa de
orice API au sczut; nsTwitter avea ceea ce ne doream: un
API simplu, bazat pe hashtag. Conform descrierii endpoint-ului,
Twitter nu garanteaz c absolut toate tweet-urile cu un hashtag
vor fi returnate, deoarece se face automat o filtrare n funcie
de relevan/popularitate; alternativa oferit este de a ne lega i
asculta la stream-ul public. n acest caz a aprut o alt dificultate: dac alegeam stream-ul nsemna c am avea nevoie de nc
o instan n AppEngine - ceea ce ar fi ntrecut limitele gratuitii.
Lund n considerare i costul, dar i o eventual consisten n
procedur, am ales s folosim API-ul pentru mentions (un utilizator s fie menionat n tweet). Din fericire, integrarea a fost
simpl: am folosit un client Java pentru API-ul Twitter: Twitter4j.
Instagram a fost integrat mai tarziu fa de celelalte reele, iar
soluia nu a avut nevoie de nici o concesie. Am fost ncntat s
observ c au un API per hashtag, nefiltrat, singura limitare fiind
la numrul de rezultate - la fiecare apel se returneaz cel mai nou
coninut i nu se reine starea complet (prin API) a tuturor posturilor. Pentru Instragram, nu sunt att de muli clieni, ns cel
ales, jInstagram, a fost suficient. n ceea ce ine de autentificare,
i Instagram implementeaz OAuth2, ns nu se poate folosi i
offline (pentru cron job), dar exact API-ul utilizat ( /tags/{tag}/
media/recent) se putea folosi doar pe baza unui client_id.
Mi-a plcut s fac cunotin cu ntregul ecosistem Java din
AppEngine - am putut s folosesc fr probleme toate frameworkurile dorite. n primul rnd, nu a trebuit s-mi fac griji c acest
cod ar putea deveni public nainte s fie ceva cu adevrat valoros
- pentru fiecare aplicaie exist un Git repo, nu se poate clona

TODAY SOFTWARE MAGAZINE


direct, ci prin SDK-ul corespunztor. Apoi, pentru
integrare cu Maven, exist att un plugin pentru
management, ct i un arhetip pentru proiecte
web. Pentru interaciunile cu baza de date se poate
folosi att JPA, ct i JDO la fel de uor (am ales
JDO). De asemenea, suportul pentru cron jobs este
inclus, avnd ca premise existena unui serviciu
REST pentru execuie i un fiier de configurare.
Aplicaia web construit cu Spring MVC
expune servicii REST att pentru a culege datele
din reelele sociale, ct i pentru a face datele accesibile pentru interfaa web. Toate datele afiate se
aduc asincron, prin apeluri de Ajax.

Lansarea

Dup toate problemele ntmpinate n locuri


neateptate, dar i ajutorul din partea tool-urilor
bine fcute, am ajuns la urmtorul design, care a
fost lansat pe 4 august, exact la termen.
Imediat dup lansare, aproape ntreaga echip de dezvoltare
a plecat n concediu. Nimic grav nu s-a ntmplat pentru c
aplicaia era stabil,dei nu am avut un tester oficial n echip.
ns, ntre timp, Facebook a lovit din nou! Pe msur ce proiectul
devenea tot mai cunoscut i poze cu #sharecluj erau uploadate n diverse forme, descopeream tot mai multe probleme i
lacune n API-ul Facebook-ului: unele poze, dei urmau ntreaga
procedur, nu erau returnate de serviciu. Am declarat n august
un defect care abia la sfritul lui octombrie a fost rezolvat, dar
nu complet, nc sunt concureni care nu au fost nregistrai pe
platform - drept urmare, am declarat un nou bug.

Unde suntem acum

Dup trei luni de cnd proiectul a fost lansat, aplicaia


este n continuare stabil. Bineneles, ajustri minore au fost
fcute pentru a corecta scpri sau pentru a completa informaii.
A fost i va continua s fie pn n octombrie 2015, o experien
foarte interesant; nu credeam niciodat c voi ajunge s cunosc
ntr-att de aproape reelele sociale sau c voi descoperi defecte la
Facebook sau c voi face deploy-uri n producie de pe canapeaua
de acas.
n concluzie, m bucur c am contribuit la proiectul Share
Cluj i c am reuit s punem deja Clujul pe harta lumii n 36 de
ri, printre care unele foarte exotice: Senegal, Singapore, Puerto
Rico, Australia. Haidei s continum s Share Cluj!

www.todaysoftmag.ro | nr. 29/noiembrie, 2014

19

management

Cum poate o companie de outsourcing s devin un


partener de ncredere

rima provocare a oricrei companii de outsourcing este gsirea de noi clieni. Odat (i dac) acest lucru se ntmpl presiunea
se mut spre a menine i dezvolta relaia. Ca s fim sinceri cu noi nsine, la nceputul relaiei cu noul client eti departe de a
fi considerat partener (chiar mai departe de a fi considerat partener de ncredere). Eti considerat un simplu furnizor i este
normal i de ateptat ca la nceput sa existe o oarecare doz de scepticism n ceea ce te privete. Dar relaiile pot evolua i ar putea
trece prin stagiile descrise n rndurile de mai jos. Nu e un model pe care l-am gndit eu i nu a dori s mi-l asum (sursa: www.
trainingindustry.com), ns mi se pare a fi valid.

Furnizor aprobat

poi dezvolta relaia cu clienii ti? Care este drumul de la furniAi un model de tarifare bun i o reputaie (destul de) bun. zor aprobat la partener de ncredere? Privind napoi la relaia de
Felicitri! Ai ajuns pe lista furnizorilor. Dar nc nu este perceput ncredere dezvoltat cu furnizorii ti, poi identifica unele aciuni
care te-au adus ntr-o astfel de relaie. Sunt sigur c exist mai
ca avnd un avantaj competitiv fa de ceilali furnizori.
multe modaliti de a deveni un partener de ncredere, dar a
vrea s i spun propunerea mea, distilat din experiena Endava
Furnizor preferat
Eti vzut ca fiind mai eficient i primeti mai mult de munc i proprie n relaiile cu clienii si furnizorii.
dect ceilali furnizori de pe lista iniial. Eti acum ntr-un club
mai select dar eti nc implicat doar n execuie. Doar c faci mai Premisele
mult dect ceilali furnizori.
Pentru a ajunge s fii un partener de ncredere exist o serie
de premise. Acestea sunt de asemenea puncte care v-ar obine
contractul n primul rnd. Nu voi insista foarte mult pe acestea,
Consultant
Aduci valoare produsului clientului tu i eti perceput ca un deoarece acestea pot fi considerate ca fiind de bun sim, ns
lider de opinie cnd vine vorba de tehnologie. Lucrezi mpreun merit menionate. Lucrurile care te pun pe lista de furnizori i
care sunt primul pas n a deveni un partener de ncredere sunt:
cu clientul i i sftuieti de CUM s lucreze.
Calitatea serviciilor livreaz mai mult i mai bine dect
se
ateapt clientul. Sau cel puin livreaz ce ai promis.
Contribuitor strategic

Preul - dac nu te poi ncadra n bugetul clienilor ti nu
Stai la masa de lucru cu privire la DE CE, care problemele de
vei primi ansa de a dovedi ct eti de bun.
afaceri pe termen mai lung. n acest moment te-ai mutat n zona
Capabilitile poi livra tot ce are nevoie clientul tu? Sau
de parteneriat i i ajui clientul n o gam mai larg de provocri
i poi construi capacitile suficient de rapid pentru a satisface
cu care se confrunt.
cererea noului tu client?

Partener de ncredere

Conducere de nivel superior cere sfatul tu. Eti perceput ca


un partener pe termen lung i ca fiind esenial succesului pe termen lung.
S inversam puin rolurile pentru o secunda i s privim lucrurile dintr-o perspectiv diferit. La fel cum ai clieni, sunt sigur c
(att ca persoan ct i ca i companie) ai civa furnizori. S ne
gndim la ei puin. Gndii-v la relaia cu contabilul, agentul de
asigurare, mecanicul sau societatea de curenie. Exist 2 puncte
cheie n relaia ta cu ei. nceputul, atunci cnd i alegi, mai ales
pentru c ai nevoie de un furnizor i te-ai decis asupra lor pentru
c poate au cel mai bun cost sau calitate, i-au fost recomandai
sau ei au fost singurii n acel moment care te puteau ajuta. Deci, ei
au devenit un furnizor aprobat. i momentul Acum, cnd acetia
sunt partenerii ti de ncredere. Tu i respeci i ai ncredere n
opinia lor i vice-versa. E o relaie reciproc avantajoas i ei au
nevoie de tine la fel de mult ct ai tu nevoie de ei.
Aadar, ntrebarea este, cum poi tu deveni un partener de
ncredere? Cum ai ajuns la acel punct cu proprii furnizori i cum

20

nr. 29/noiembrie, 2014 | www.todaysoftmag.ro

Dac satisfaci toate premisele te afli la linia de start. Pentru a


obine mai mult va trebui s i ajui noul client n diverse moduri.

Ce nevoie de ajutor are clientul tu?


Trebuie s nelegi nevoile clientului tu i provocrile afaceri
sale. Odat ce ai fcut asta, va trebui s i adaptezi oferta pentru
a satisface aceste nevoi. S-ar putea s ai cel mai bun produs sau
serviciu, dar n cazul n care clientul tu nu are nevoie de aa ceva
sau are nevoie de altceva (un alt produs sau serviciu) mai mult,
s-ar putea s cazi de pe lista de furnizori i drumul vostru mpreun s ia sfrit. tii i nelegi nevoile clientului tu? Excelent!

Ajut-l s creai o viziune comun


n stadiile incipiente este important s v cunoatei reciproc,
s setai ateptrile corecte i s stabilii o viziune comun pentru
relaia voastr (incipient) de lucru. Cum vei interaciona? Ce
vrei s realizai mpreun? Discuta tot ceea ce simi c este necesar pentru a stabili baza pentru discuii i interaciuni ulterioare.

diverse
Implic-te devreme i n mod constant n
business pentru a nelege care e direcia
business-ului i n mod constant revizuii
ateptrile voastre.

Ajut-l s creasc
i cunoti clientul i tii ce vrei s
realizai mpreun. Dar cum poi tu (i
organizaia ta) s i ajui clientul s se dezvolte i s devin mai de succes? Asigur-te
c vei crea soluii de ctig reciproc, c vei
lucra i nva mpreun. Nu te rezuma
n a-i vinde doar produsul sau serviciul.
Creeaz valoare i cretere pentru i pentru
clientul tu!

Ajut-l s i pstreze controlul asupra


sistemelor sale

TODAY SOFTWARE MAGAZINE


notri ca indivizi. Parteneri de ncredere
i cunosc clienii lor ca oameni i nu vd
relaia ca fiind una ntre dou organizaii
i att. ncearc s i cunoti clienii mai
bine prin arat grij i preocupare pentru
ei ca indivizi.

Ajut-l s inoveze. Provoac-l


Uneori poate fi dificil s i spui prerea, s adresezi acele cteva ntrebri
dificile sau pur i simplu s spui nu la
cererile clientului tu. Dar, dac tu crezi
c ai ceva de valoare pentru clientul tu,
spune-i. S-ar putea s ai ceva poate util,
o nou perspectiv, o nelegere diferit
a situaiei, resurse, instrumente sau practici noi. Acestea ar putea ajuta n a face
produsul clientului tu mai bun sau v-ar
putea ajuta s fii mai eficieni. Discut cu
clientul tu i arat-i c i pas de el, produsul su i c i doreti s contribui i s
adaugi valoare ori de cte ori poi. Nu i
face griji, acest lucru nu este nepotrivit sau
lipsit de respect. Dar acord o atenie deosebit la modul n care transmii mesajul.
Comunicarea este cheia.

Fii transparent cu munca ta. Exist


diferite moduri de a face acest lucru
i cu att mai automatizat cu att mai
bine. E momentul s i ari abilitile i
potenialul, deci concentreaz-te pe calitate i livrare continu. Dac clientul poate
vedea modul n care produsul evolueaz,
unde sunt probleme, dar poate vedea, de
asemenea, c ai abilitile i cunotinele
pentru a gestiona situaii complicate, acest Ajut-l s aib ncredere n tine
lucru le va da ncredere n a lucra cu tine
Toat lumea face greeli mai devreme
mai departe.
sau mai trziu. Mai ales n primele etape
ale relaiei voastre, acest lucru este normal fiind nc in stadiul de cunoatere
Ajut-l s se conecteze cu tine. Sau f mai
reciproc. Recunoate-i greelile i ia-ti
multe ca s te conectezi cu clientul tu
Trebuie s i pese. Cu adevrat. i responsabilitatea soluiei. Fii sincer cu
trebuie s i pese nu doar de client ca clienii ti i ei la rndul lor, te vor rsplti
organizaie (i de nevoile i provocrile cu ncrederea lor. De asemenea, respectsale), dar, de asemenea, s i pese oamenii ti angajamentele, nu face promisiuni pe
cu care interacionezi i nevoile i provoc- care nu le poi respecta i ntotdeauna
rile lor. O parte din scopul nostru de baz strduiete-te s lucrezi mai bine. Seteaz
n Endava, ADN-ul nostru cum ne place bucle i intervale scurte de feedback astfel
s spunem, este s avem grij de clienii nct s i poi ajusta i mbunti modul

de lucru constant.
Acum i cunoti clientul, i nelegi
nevoile i i tii ce vrea s realizeze. Poi
oferi calitate, servicii competitive i i poi
ajuta clientul n a dezvolta n continuare
produsul su. Ai artat c vrei s contribui,
c nu i e team s pui ntrebrile dificile
i eti interesat de succesul lor, nu numai
ctigul tu. Clientul tu are ncredere n
tine s fii sincer atunci cnd i cere prerea i are ncredere n opinia ta, deoarece ai
dovedit a fi un bun cunosctor al domeniului. Eti transparent cu munca ta i ai reuit
s te conectezi cu clientul tu ca individ.
Acum eti un partener de ncredere.
n cele din urm, nu te atepta s
dezvoli o relaie de partener de ncredere
cu toate conturile i clienii ti. Motivele
i factorii sunt destule i pot varia de la
stabilirea preurilor, calitatea perceput a
serviciului, probleme de comunicare sau
pur i simplu nu facei clic.
i ine minte c nu este vorba doar despre servicii de calitate, capabiliti, preuri
i alte lucruri pe care le-ar putea crede ca
fiind simple pentru a asigura o relaie de
lung durat. Acestea sunt importante,
dar pentru a deveni un partener de ncredere ai nevoie de mai mult. Ai nevoie s te
concentrezi pe nevoile clientului, de comunicare i transparen.
Clin Lupo

calin.lupo@endava.com
Client Engagement Manager
@ Endava

www.todaysoftmag.ro | nr. 29/noiembrie, 2014

21

securitate

programare

5 greeli frecvente n securizarea


reelelor windows

n acest articol voi descrie cteva dintre greelile frecvente care pot duce la probleme
de securitate grave i voi prezenta i unele soluii care ne permit s ne aprm mpotriva acestor tipuri de ameninri. Dac suntei interesai de securitatea sistemelor
de operare Windows, atunci acest articol este pentru voi!

Teodor Olteanu

Teodor.Olteanu@betfair.com
End User Computing Lead
@ Betfair

Desigur, exist mai mult de cinci


greeli frecvente...dar dac vei ncepe s
v gndii la cele prezentate n acest articol,
reeaua voastr va deveni mult mai sigur!
Cauzele acestor erori sunt tipice: lipsa de
timp, lipsa sistemelor de monitorizare,
lipsa de cunotine. De multe ori, greelile
sunt foarte grave si pot duce la bree serioase n securitatea reelei. Nimnui nu-i
place cnd parolele utilizatorilor sunt
sparte i sunt furate informaii preioase,
nu-i aa?
Hackerii ncearc trucuri noi, dar sunt
contracarai de administratorii de sistem
care adaug noi tehnologii n domeniul
securitii astfel nct lupta devine din ce
n ce mai grea. Totui administratorii de
sistem sunt adesea foarte ocupai cu alte
sarcini i securitatea nu se afl printre
prioritile lor. Greelile acestora i indisciplina angajailor pot fi de mare ajutor
pentru cei care doresc s obin acces la
informaii confideniale.
V invit n continuare s trecem n
revist cinci dintre cele mai frecvente
greeli pe care administratorii de sistem
le fac cu privire la securitate i s aflai
cum cteva mici mbuntiri pot avea un
impact enorm asupra securitii reelei
voastre.

p aro l a : Mi c k e y Mi nni e P l u t o Hu e y
LouieDeweyDonald GoofySacramento.
Cnd a fost ntrebat de ce folosete o
parol att de lung, el ddu ochii peste
cap spunnd: Hei! IT-ul mi-a spus c
parola trebuie s aib cel puin 8 caractere
(n.r. n englez character nseamn i personaj) i s includ cel puin o capital (n.r.
capital n englez are sens dublu: majuscul sau capital.)

Aceasta este o glum, desigur. Dar realitatea este c o parol lung i complicat,
nu v protejeaz n toate situaiile!
Un studiu realizat de BitDefender n
2010 arat c 75% dintre persoane folosesc aceeai parol pentru site-urile de
social media ct i pentru adresele lor de
e-mail. Cazuri de site-uri importante ca
Facebook, LinkedIn, Twiter i altele, care
au fost sparte i parolele a mii de utilizatori furate sunt bine cunoscute. Deci, dac
un hacker are parola de Facebook a unui
angajat de-al vostru are cel mai probabil i
acces la csua acestuia de e-mail i astfel la
date confideniale din companiei voastre.
De fiecare dat cnd introducei o
parol pentru a v autentifica, exist
cel puin un mecanism care trebuie s
cunoasc acea parol pentru a o folosi mai
trziu cu scopul de a v permite accesul.
Atunci cnd salvm o parol n Windows
Greeala 1: Nenelegerea parolelor
Un a u d i t r e c e n t , a d e s c o p e - acesta este stocat n SAM (Security
rit c un angajat utiliza urmtoarea Accounts Manager) sau n baza de date

22

nr. 29/2014 | www.todaysoftmag.ro

programare
Ntds.dit din Active Directory. Dar, faptul c sistemul de operare poate reutiliza
parola nseamn totodat i c alii o pot
decripta!
n multe cazuri, atacatorii nici nu trebuie s tie parola ci pot folosi tehnica
pass the hash pentru a rula cod maliios
pe calculatoarele voastre, autentificndu-se
folosind hash-ul parolei. Dar recent au fost
dezvoltate utilitare avansate, care permit
decriptarea hash-urilor care sunt stocate
n memorie.
Mimikatz este o aplicaie creat de
Benjamin Delpy (aka gentilkiwi), care
extrage parole n format text din WDigest
(un DLL adugat n Windows XP, care
este folosit pentru a autentifica utilizatori
prin cu ajutorul HTTP Digest) interfaat
prin LSASS (Local Security Authority
Subsystem Service) . Deci, dac v-ai
conectat vreodat la un sistem folosind
un cont de administrator de domeniu i
cineva a rulat Mimikatz pe acel sistem
atunci, practic, ntreaga voastr infrastructur este n minile atacatorului.
Nu exist o metod unic de aprare
mpotriva acestei tehnici.Drept urmare
practicile standard de aprare trebuie
aplicate n acest caz - de exemplu, utilizarea de firewall-uri, sisteme de intrusion
detection, autentificarea 802.1x, IPSec,
software-ul antivirus, criptare complet
de disc, reducerea numrului de persoane
cu privilegii sporite, aplicarea proactiv de
patch-uri de securitate etc. .
Blocarea Windows-ului de a mai stoca
parolele in cache poate limita atacatorii s
mai obin hash-uri din memorie, ceea ce
nseamn, de obicei, c acel cont int trebuie s fie conectat la main atunci cnd
atacul este executat, pentru ca atacatorul

TODAY SOFTWARE MAGAZINE


s vad parola. De aceea este important s
folosim principiul celui mai mic privilegiu
necesar care sugereaz o abordare n care
utilizatorii nu ar trebui s utilizeze conturi
cu mai multe privilegii dect le este necesar
pentru a-i ndeplini sarcinile.
Configurarea sistemelor care s nu
foloseasc LM sau NTLM poate consolida securitatea lor, dar aplicaiile noi
de cracking sunt capabile s transmit i
tichetele Kerberos ntr-un mod similar,
decriptnd parolele. Limitarea privilegiilor
de depanare de sistem (debug) poate bloca
unele atacuri care injecteaz cod sau fur
hash-uri din memorie.
Alte lucruri pe care ar trebui s le
verificai sunt parolele folosite pentru a
rula anumite servicii. Dar este important
de a nu rula un serviciu de pe un cont de
administrator, utilizai n schimb gMSA
(Group Managed Service Accounts). De
asemenea, sunt vulnerabile task-urile planificate care se execut folosind un anumit
cont cu privilegii nalte, pentru c la fel ca
i n cazul serviciilor, parola poate fi aflat.
Dac dorii s aflai mai multe detalii
despre modul n care Windowsul gestioneaz parolele stocate, v recomand un
scurt articol care v ofer o imagine mai
clar asupra a ceea ce se ntmpl cu parolele salvate. l gsii aici: technet.microsoft.
com/en-us/library/hh994565.aspx

Greeala 2: Ignorarea accesului fizic

curenie, de un laptop furat sau despre


cineva care-i duce laptopul acas unde i
alte persoane pot avea acces la el.
Pentru a diminua pierderile de date
n acest caz, exist mai multe etape de
protecie care se pot pune n aplicare:
Nu permitei boot-area de pe USB /
CD / DVD.
Implementai criptarea discurilor
(Bitlocker).
Managementul porturilor USB.
Organizarea de cursuri care s-i
informeze pe angajai cu privire la pericolele de securitate la care pot fi expui.

Greeala 3: Utilizarea de tehnologie veche


E greu s fii la zi cu tehnologia, dar
sistemele de operare antice cum ar fi
Windows XP i Windows 2000 ar trebui s
fie aruncate la gunoi! n principal datorit
faptului c Microsoft nu mai ofer suport
pentru ele i orice bre nou de securitate
nu mai este acoperit.
Efectuai verificri periodice ale infrastructurii voastre i planificai-v s aducei
la zi sistemele de operare pentru care nu se
mai ofer suport sau pentru care suportul
va expira n curnd. Sistemele i aplicaiile
fr patch-uri la zi pot lsa ui deschise
ctre reeaua voastr astfel nct se impune
s avei o strategie lunar de patching i
s meninei sistemele dumneavoastr la
curent cu ultimele patch-uri de securitate.
Puncte bine cunoscute de atac sunt i produsele Oracle i Adobe (Java, Flash, Reader
etc.). Aa c pe lng produsele Microsoft
inei cont de faptul c va trebui s facei
actualizri i pentru aceste aplicaii.

Accesul fizic permite unei persoane


s aib acces direct la un sistem i n felul
acesta s foloseasc metodele descrise mai
sus pentru a accesa date confideniale. Nu
trebuie s fie neaprat o persoan care a
reuit s intre n cldire nevzut. Poate Greeala 4: Lipsa monitorizrii
fi vorba de un vizitator, de persoana de la
n cazul reelei exist o binecunoscut

www.todaysoftmag.ro | nr. 29/noiembrie, 2014

23

securitate
5 greeli frecvente n securizarea reelelor windows
regul: nu permite trafic pe care nu-l
recunoti. De asemenea, trebuie s fii
contieni de faptul c cele mai multe dintre protocoale conin spaiu pentru date n
ele. De exemplu, muli administratori se
concentreaz asupra monitorizrii reelei
pe protocoale TCP i UDP. ICMP este
adesea trecut cu vederea, dar este aproape
la fel de viabil pentru transferul de date.
Transferul de date prin intermediul ICMP
este posibil, dar nimeni nu monitorizeaz
traficul ICMP. Voi permitei ping-uri din
afara reelei tale?
O alt ameninare major este instalarea de coninut piratat, care de cele mai
multe ori poate avea malware ataat. V
recomand s pstrai locaia unde avei
kiturile de instalare pentru aplicaiile pe
care le utilizai intern la zi cu ultimele
versiuni i s stocai checksum-urile lor
ntr-un alt loc astfel nct s putei valida
kiturile de instalare ca fiind autentice cnd
este nevoie. Fiierele de instalare injectate
cu malware nu sunt neaprat recunoscute
de antivirus, iar injectarea fiierului cu
malware poate avea loc chiar nainte de
a descrca fiierul undeva pe reea ntre
voi i site-ul de unde l descrcai. Aadar
trebuie s fii ateni de unde descrcai
kiturile de instalare.
Se recomand s implementai o
soluie de inventariere software, astfel nct
s putei afla n orice moment ce software
este instalat n reeaua dumneavoastr.

Greeala 5: Lipsa documentaiei


Este aceasta ntr-adevr greeala administratorului ? Da, eu sunt de prere c
acest lucru este una dintre cele mai mari
greeli pe care o poate face o organizaie
IT. Cele mai multe companii nu sunt nici
mcar pregtite atunci cnd personalul IT
pleac n concediu! Fii proactivi, mprii
i rotii sarcinile ntre administratorii de

24

sistem, organizai cursuri de instruire


pentru utilizatorii votri i pstrai wikiul intern actualizat. Efectuai audituri
periodice ale infrastructurii i nu uitai s
auditai i permisiunile i ACL-urile.
Cele mai ieftine i mai eficiente atacuri sunt de multe ori cele non-tehnice.
Oamenii tind s aleag calea uoar
i inteniile lor sunt greu de controlat. Monitorizai-v utilizatorii reelei i
artai-le c o facei.
Parolele implicite pot crea guri
imense de securitate. Parolele goale din
MSSQL pot duce la un server compromis
n ntregime. Parolele goale pe interfeele
de management pot duce, de asemenea, la
reele compromise.
Utilizai scanere de vulnerabiliti i
scanai reeaua pentru servicii HTTP, FTP,
Telnet i SSH. De asemenea, asigurai-v
c utilizai parole diferite pentru contul de
administrator local i contul de administrator de domeniu.
Dac nu suntei convini de pericolul
parolelor implicite, v invit s accesai siteul shodan.io. Acest site este o baz de date
cu servicii care sunt expuse n internet i
care folosesc parole implicite sau goale. E
uimitor ce poi gsi aici - de la webcam-uri,
echipamente de reea i fiiere, toate accesibile prin internet.
n concluzie, ncercai s alegei una
dintre greelile pe care le-am descris mai
sus i gndii-v dac se aplic la locul vostru de munc i dac ai putea mbunti
situaia actual. Examinai modul n care
lucrai n prezent i ncercai s schimbai
ceva nainte de a fi prea trziu.
Dac v-am deschis apetitul pentru
acest subiect, v recomand s cutai sesiunile Paulei Januszkiewicz. Ea este expertul
meu favorit pe teme de securitate i a fost
cea care m-a insiprat s scriu acest articol.

nr. 29/noiembrie, 2014 | www.todaysoftmag.ro

V mai invit s accesai site-ul Trustworthy


Computing la adresa microsoft.com/twc.
TWC este un program pe termen lung,
care presupune un efort de colaborare cu
scopul de a oferi acces la informaie ntrun mod sigur i privat pentru toat lumea.
Aici gsii linkuri care v direcioneaz
i ctre Microsoft Security Intelligence
Report oferindu-v o imagine de ansamblu
asupra vulnerabilitilor actuale i asupra
evoluiei lor.

programare

management

Comunicarea cu clientul Un joc mai greu dect ne imaginm

Bogdan Murean

bogdan.muresan@3pillarglobal.com
Director of Engineering
@ 3Pillar Global

eoria spune c 90% din munca unui manager de proiect este comunicare. Ceea
ce este cu adevrat important este faptul c pentru un manager de proiect comunicarea se afl peste tot n jurul lui. Ceea ce nu remarcm noi ntotdeauna este c
cizelarea abilitilor noastre de comunicare ncepe mult mai devreme i este parte integrant a mediului nostru de lucru i a vieii noastre mai mult dect ne dm seama n mod
contient. Dac ne referim strict la locul de munc, comunicarea se desfoar n toate
direciile i are loc ntre persoane cu diferite abiliti de comunicare i cu diferite specializri cum ar fi: developer-i, testeri, administratori, persoanele de pe resurse umane. Dintre
toate aceste posibile conexiuni cred c cel mai sensibil canal de comunicare este cel cu
clientul i asupra acestuia mi-am propus s m focalizez n acest articol.
n contextul actual al dezvoltrii de
software, cnd trendul este dat de metodologiile Agile, ntreaga echip este expus
interaciunii cu clientul. Acest fapt deschide
un canal de comunicare destul de complex
ntre oamenii ce au un background tehnic
i oamenii orientai nspre afaceri. Dac
pentru un manager de proiect stpnirea
acestui canal de comunicare este obligatorie
i face parte din munca de zi cu zi, oamenii orientai spre tehnic ar putea ntmpina
dificulti n construirea acestei puni ce
tranziteaz limbajul tehnic spre limbajul
cotidian. Cnd este important s livrm un
mesaj, trebuie s avem n vedere, printre
altele, dou aspecte foarte importante:
Valoarea coninutului: n primul
rnd, dac vrem s demonstrm ceva,
dac vrem s ne facem nelei, trebuie s
scoatem n eviden foarte clar valoarea
adus de ideea noastr. n consecin,
primul aspect important este s putem
explica valoarea coninutului.
Coninutul: n al doilea rnd, trebuie
s punem pe mas argumentele corecte
pentru a explica ideea n sine. Orict
de bun ar fi ideea, n marea majoritate
a cazurilor nu se explic de la sine. Cu
att mai mult, dac avem de-a face cu o

idee tehnic i avem discuia cu cineva


non tehnic. Deci al doilea aspect important este s putem prezenta i explica
coninutul.
Valoarea coninutului nu numai c
este un lucru dificil de explicat, dar n
acelai timp trebuie procedat total diferit
n funcie de publicul vizat. Pentru a ne
alege strategia corect trebuie s nelegem
exact ce este important, ce anume aduce
valoare celorlalte pri participante la
discuie. Pentru persoanele tehnice valoarea este dat de expresii la mod cum ar fi
extensibilitate, tehnologie de ultim or,
ultimele framework-uri. Pentru clieni cea
mai important valoare este dat de rata
de recuperare a investiiei. ntr-o traducere liber ar fi Cum mi vor aduce aceste
tehnologii de vrf din care nu neleg o iot
mai muli clieni, mai muli bani?. Pentru
echipa de la resurse umane valoarea se traduce n fericirea oamenilor i pstrarea lor
n firm. Pentru a putea exemplifica acest
lucru mai bine s ncercm s ne jucm cu
o posibil situaie.
S presupunem c o echip vrea s
aduc unul dintre framework-urile externe
folosite pe proiectul curent la ultima

www.todaysoftmag.ro | nr. 29/noiembrie, 2014

25

management
Comunicarea cu clientul - Un joc mai greu dect ne imaginm
versiune. Bineneles c va trebui fcut
un studiu, s-ar putea s fie nevoie chiar
de un prototip i n final vor rezulta tone
de argumente care mai de care mai valide
ce vor susine aceast necesitate. Totui
beneficiile acestei schimbri vor fi explicate total diferit celor implicai (sau doar
interesai) n aceast schimbare. Echipa
de implementare va discuta despre faptul c noua versiune va permite o mai
uoar integrare cu modulul de securitate;
va discuta despre uurina cu care noul
framework poate fi personalizat n funcie
de nevoile curente i va discuta despre
suportul pe care noul framework l ofer
n mod nativ pentru scrierea unit testelor,
suport inexistent n versiunea ce se vrea a fi
nlocuit. n schimb cnd echipa va merge
n faa clientului lucrurile se complic. Ei
trebuie s tie ct timp va lua schimbarea i ci dintre membrii echipei vor fi
implicai, iar aceast combinaie va da costul operaiunii. Odat puse crile pe mas,
echipa are nenumrate variante pentru
a motiva beneficiile pe care schimbareai.
Unit testele vor asigura o stabilitate mai
mare a aplicaiei, deci vor reduce costurile
de ntreinere. n acelai timp cu noua versiune de framework implementarea noilor
funcionaliti este mult mai rapid astfel
nct dup cteva iteraii timpul investit n
upgrade va fi amortizat. Echipa nu va avea
ntotdeauna ctig de cauz, dar nelegnd
ce aduce valoare clientului cu siguran va
avea mai multe anse de reuit. i dup
multe discuii ntre membrii echipei, ntre
echip i client, ntr-o pauz de igar,
cineva de la resurse umane se va apropia
conspirativ de managerul de proiect i va
ntreba: Am auzit c v-ai ncins la discuii
nu glum e totul n regul?; Da, vrem

doar s aducem un framework la ultima


versiune i s convingem clientul c a fost
o treab destul de dureroas; Dar de ce
vrei schimbarea asta?; Pentru c-i ine
pe oameni n priz i motivai. Trei grupuri int diferite, trei moduri diferite de
a motiva acelai lucru: banala schimbare a
versiunii unui framework.
Coninutul s-ar putea s fie i mai greu
de explicat. S-ar putea s avem nevoie de
i mai multe abiliti pentru a putea face
acest lucru aa cum ne dorim. De obicei
bariera de limbaj se instaleaz ntre persoanele tehnice i cele non tehnice. Am
participat n suficiente discuii care ar fi
trebuit s dureze zece minute i s-au ntins
mult peste o or. n timpul acestor discuii
de multe ori microfoanele au fost oprite
(cnd aveau loc ntre locaii diferite) pentru ca acei implicai sa se liniteasc. Am
fost i n cteva discuii n care una dintre
pri doar a avut impresia ca microfoanele
au fost oprite n timp ce se descrca i nu
a ieit prea bine. Ceea ce ar ajuta ca aceste
discuii sa fie mai relaxate ar fi ca lumea s
fie contient de specializarea fiecrei pri
implicate n discuie i s fie concentrat
i pe acest lucru. Odat ce contientizm
acest lucru putem s ne adaptm argumentele astfel nct s fie nelese rapid
i corect de ceilali implicai. Ce credei
c este mai uor? Pentru o persoan non
tehnic s gseasc argumente tehnice sau
invers? Am vzut persoane non tehnice
care cu bune intenii au folosite cuvinte
cheie pentru a se integra ntr-o anume
discuie. Sunt situaii foarte haioase. Poi
depista cnd cineva nu tie exact ce spune
de la un kilometru. E ca i cum a ncerca
eu s povestesc cu cineva de la contabilitate despre salariul brut i salariul net.

Cred cu convingere c cel mai uor e pentru o persoan tehnic s gseasc exemple
care s aib legtur cu viaa de zi cu zi.
Ceva ce toat lumea nelege, ceva la care
se pot raporta cu toii. Pentru c discuiile
cu clienii sunt aproape ntotdeauna mici
vnzri , trebuie s ne alegem cuvintele
i analogiile cu mare grij. Haidei s
ncercm iar un mic joc imaginativ.S ne
imaginm c trebuie s explicm avantajele testrii continue de-a lungul unei
iteraii cuiva care nu tie nimic despre
Agile i Scrum. Vom ncepem s povestim
despre integrarea rapid a testrii i a fixrii erorilor n procesul de dezvoltare, vom
continua s povestim despre reducerea
numrului de erori i vom termina prin
a povesti despre o aplicaie mai stabil la
sfritul fiecrui sprint. Clientul va asculta
cu interes, va sorbi fiecare explicaie mai
mult dect valid a cum se va desfura
procesul i n acelai timp n mintea lui va
avea loc urmtorul monolog: Sprint
sprint unde am auzit eu de sprinturi?
Usain Bolt e super tare la sprinturi .
Va zmbi la propria-i glum i noi vom
pleca cu convingerea c l-am fcut s ne
mnnce din palm. Peste dou zile vom
avea aceeai discuie. O alt abordare ar
fi s facem o analogie cu gtitul. Nu spun
asta doar pentru c sunt gurmand. Toat
lumea tie, mai mult sau mai puin, cum se
pregtete mncarea. S comparm planificarea unei noi versiuni cu un plan de gtit
pe apte zile. Fiecare zi va fi o iteraie i n
fiecare zi va trebui s facem ceva diferit de
mncare. Testarea i fixarea erorilor o vom
asemna cu splatul vaselor. Dac nu splm vasele n fiecare zi, buctria s-ar putea
s fie plin de vase murdare nc din ziua
a cincea. Iar la sfritul zilei a aptea cnd
Our core competencies include:

Product
Strategy

3Pillar Global, a product development partner creating software that accelerates


speed to market in a content rich world, increasingly connected world.
Our oerings are business focused, they drive real, tangible value.

www.3pillarglobal.com

26

nr. 29/noiembrie, 2014 | www.todaysoftmag.ro

Product
Development

Product
Support

TODAY SOFTWARE MAGAZINE


ne vom apuca de splat vasele, vom ajunge
cu siguran n ziua a opta. Astfel, dei am
terminat de gtit dup apte zile, am lsat
buctria curat de-abia n ziua a opta i
ne-am ratat termenul limit deoarece la
sfritul celor apte zile, munca noastr era
plin de mizerie. Dac n schimb de fiecare
dat cnd ateptm dup ceva, cum ar fi s
dospeasc un aluat sau s se coac ceva n
cuptor, splm vasele folosite pn n acel
moment, la sfritul fiecrei zile vom avea
buctria curat, mncarea fcut i planul
nostru va evolua impecabil. Iar scopul nostru dup cele apte zile va fi atins cu succes.
Bineneles c mncarea din prima zi va fi
aproape expirat i vom vrea s o refacem,
mai ales c ntre timp am i primit un cuptor mai performant, dar asta-i cu totul alt
poveste.
Exemplul anterior a fost unul simplu,
dar n munca de zi cu zi ne ntlnim cu
siguran cu situaii mult mai complicate.
Gndii-v cum ai explica unui client non
tehnic ce nseamn un load balancer sau ce
nseamn un index compus pe o tabel din
baza de date. Acuma mi vine n minte un
exemplu amuzant din experiena proprie:
cu cteva sptmni n urm, una dintre
echipele cu care lucrez se delecta cu un
release. Am ntrebat dac sunt probleme
i rspunsul scurt, concis i profesionist
a fost: sunt probleme cu generarea unui
bundle. Vreme de dou secunde am stat i
m-am uitat la ei cu un aer ca i cum le-a
nelege perfect durerea, dup care mi-am
clcat pe mndrie i am ntrebat ce-i la.
Din nou un rspuns scurt i la obiect cu
nite termeni pe care nu i-am putut ine
minte. Dei cndva n vremuri de glorie
demult apuse am fost o persoan tehnic

(pe vremea cnd pointer-ul era cea mai tare devine mult mai uor de jucat, mai apetichestie inventat dup roat) n momen- sant i chiar mai distractiv.
tul de fa am cam pierdut trenul i mi-a
fost destul de greu s prind explicaiile.
Gndii-v cam ce simte o persoan care
chiar n-are nici o treab cu programarea
cnd aude aceti termeni. n cazul meu,
unul dintre colegi a realizat c nc atept
explicaii i mai n glum, mai n serios a
nceput sa-mi explice ca i unui copil mic:
,,tii , Bogdan, fiierele acestea sunt toate
puse la un loc ntr-unul singur. Apoi, un
mic vrjitor din calculator (unul bun, nu
unul ru) face fiierul acela mic de tot
astfel nct s ajung mai repede unde e
nevoie de el. Aadar, cteodat este nevoie
ca un om tehnic s explice ceea ce face ca
i cum s-ar adresa unui copil.
tim c este n natura noastr, n codul
nostru genetic, s acionm ntotdeauna
n acele circumstane n care ne simim
confortabili. Dac toat ziua ne nvrtim
ntr-un anturaj ce vorbete aceeai limb
ca i noi i povestim fr restricii, ne va
fi foarte greu s ne schimbm modul de a
ne pregti argumentele n acea jumtate de
or pe zi n care povestim cu clientul. Acest
lucru vine de obicei cu experiena, cu mult
munc dar i cu o mentalitate adecvat.
E important de menionat c din cauza
evoluiei n domeniu, din cauza metodologiilor Agile care ncurajeaz interaciunea
continu ntre oamenii tehnici i client
(mai ales n lumea outsourcing-ului, a
exportului de servicii) este de dorit s fim
mcar contieni de acest mod de a gndi.
Contextul n care ne manifestm, n care
au loc discuiile ne oblig la utilizarea unui
anumit tip de limbaj. Dar o dat ce tim
s jonglm cu cuvintele, cu situaiile, jocul

www.todaysoftmag.ro | nr. 29/noiembrie, 2014

27

programare

De ce Agile?
Cunoaterea adevrat const n a-i ti gradul de ignoran.
Confucius

e-a lungul carierei mele de 15 ani ca dezvoltator, technical lead, manager de


proiect, freelancer, trainer, agile/lean/technical coach i din nou dezvoltator
am vzut multe eecuri n dezvoltarea de software. Dar am vzut i succese
neateptate.

Alexandru Bolboac

alex.bolboaca@mozaicworks.com
Agile Coach and Trainer, with a
focus on technical practices
@Mozaic Works

Dintre toate industriile, dezvoltarea


de software pare destul de imprevizibil.
n calitate de client, poi cere s adaugi o
funcionalitate destul de simpl ce pare
s dureze o zi sau dou pn e gata, (ex.
Adaug euro la un sistem de contabilitate creat pentru francii francezi) i n
realitate i va lua dou luni. Sau poi
cere o funcionalitate care pare teribil
de complex dar dureaz doar o zi pentru a fi dezvoltat. La ce s te atepi? La
un buget de zece ori mai mare pentru
funcionalitatea de care ai nevoie sau la un
software livrat mai rapid dect l-ai cerut?

Mai Mult Proces


Reacia uman iniial la imprevizibilitate este de a aduga mai multe puncte
de control, mai mult proces, mai mult
management. La urma urmei, fabricile
pot produce mai repede atunci cnd acestea sunt mai bine gestionate, optimizate i
automatizate. De ce nu ar funciona i n
software?
Lucram pentru o companie de
outsourcing ca technical lead cnd managementul a decis s obin certificarea
CMMI. n caz c nu suntei familiari cu
el, CMMI este un maturity model pentru dezvoltarea de software. Nivelul 3, cel la

28

nr. 29/2014 | www.todaysoftmag.ro

care era evaluat compania se axa pe a avea


un proces standardizat i msurat. Nivelul
4 consta n mbuntiri continue bazate
pe metrici.
Fiind implicat n proces, am nvat
foarte mult despre CMMI. CMMI-ul nu
este un sistem ru, dar cerinele lui pot fi
prost interpretate. Este foarte uor pentru
o companie s dea faliment dac cerinele
sunt interpretate ad litteram. Cea mai simpl cale de ieire dintr-o evaluare CMMI
este de a lua fiecare cerin i a aduga un
document pentru ea. Acest lucru ar crea
att de mult de lucru nct ori ar trebui suspendat producia, ori compania ar trebui
s mai angajeze oameni care s scrie documentele. Din fericire, liderul proiectului
de tranziie, Managerul Calitii, a ales o
alt cale. A citit cerinele CMMI-ului i a
gsit cel mai bun mod de a rspunde la ele.
Pentru o mai bun nelegere a contextului,
CMMI cere s dovedeti c urmreti anumite practici, dar nu precizeaz exact ce fel
de dovad este necesar. Dovada poate fi
un document, dar deseori este suficient
s ai raportul dintr-un tool, o poz sau un
checklist.
Experiena CMMI m-a nvat dou
lucruri:
1. A avea un mod de lucru structurat

programare
este benefic pentru dezvoltarea de software.
2. Punctele de control ncetinesc producia.
Eram la acel moment un dezvoltator de software interesat de
cum s execui n mod repetitiv proiecte de succes. CMMI avea
potenial, dar n acelai timp putea s se transforme cu uurin
ntr-un proces greu de ntreinut care nu asigura succesul.

Confuzie
La momentul respectiv din cariera mea, am nceput s caut
orice tip de cunoatere care ar putea ajuta. Cum fac alte companii
dezvoltare de software? Exist principii fundamentale de urmat
pentru a crea software de nalt calitate n timp ce menii clienii
fericii? Care sunt ingredientele succesului?
Am nceput prin a citi cri i articole pe tema asta.
Lucrrile lui Fred Brooks _The Mythical Man Month_
i _No silver bullet_ mi-au deschis ochii ctre ceva ce nu
contientizasem nainte: dezvoltarea de software este diferit de
celelalte industrii. Pn la urm, s adaugi oameni la un proiect
de construcie ce este n ntrziere va ajuta proiectul s se termine mai repede. Nu i n cazul dezvoltrii de software: s adaugi
oameni unui proiect deja ntrziat n mod normal l va ntrzia
i mai mult (lucru tiut sub forma de legea lui Brooks). Mai
interesant, legea lui Brooks poate uneori fi evitat. Motivul pentru
care proiectul este livrat mai trziu este c oamenii care se altur
proiectului trebuie nti s nvee. Dar, dac sunt alei astfel nct
s aib deja cunotinele necesare, vor ajuta n loc s ncetineasc
livrarea.
Cartea lui Steve McConnel, Software Estimation:
Demystifying the Black Art a fost o alt lectur interesant.
Modul prin care fceam estimri la vremea respectiv era ghicitul. CMMI m expusese deja la metode de estimare, dar cartea
mi-a oferit o mai bun nelegere. Ca inginer, am gsit tentante i
cu mult sens ideile de a profita de statistici i de a face peer review
pentru a mbunti estimrile.
Pe de alt parte dezvoltarea de software prea c nu se nelege
bine cu statistica. Un lucru pe care l-am nvat din lecturile mele
(m tem c nu-mi amintesc sursa exact) a fost c bug-urile nu
erau distribuite uniform n cod. n mod ciudat, nu sunt: ele tind
s se grupeze. O prim consecin este c zonele n care un bug
este gsit ar trebui verificate cu mai mult grij pentru alte buguri. Totui, dac distribuia normal nu se aplic la localizarea
bug-urilor n cod merit s ne ntrebm: s-ar aplica distribuia
normal la estimri?
Crile i articolele au fost foarte interesante, dar tot nu am
ajuns la concluziile cutate despre cum s faci dezvoltare de software de succes. Ce ar ajuta: mai mult proces, estimri mai precise,
mai multe practici, programatori mai buni?
Nimeni nu prea s tie.
Atunci m-am decis s m mut ntr-o companie mic de dezvoltare de produs, s m implic ntr-o comunitate agile n apte
orae romneti i n mod treptat s m ndrept ctre training i
coaching agile, lean i tehnic.

TODAY SOFTWARE MAGAZINE


2. Agilitatea Dezvoltrii capacitatea de a produce o
funcionalitate pe care clientul o dorete, mai rapid dect are
nevoie acesta de ea.
3. Productivitate mbuntit prin nlturarea impedimentelor, reducerea procesului, ajutorul pentru ca dezvoltatorii
s se simt mai bine la lucru
Principiile sunt enunate n Manifestul Agile; n loc s le citez,
le voi enumera pe scurt (i incomplet) , dar filtrate de interpretarea mea:
Gestioneaz echipa, nu fiecare individ.
D autonomie echipei i arat-i scopul clar, lsndu-i s-i
fac treaba.
Trateaz echipa de dezvoltare ca pe nite aduli inteligeni i
motivai, nu ca pe nite copii ce au nevoie de ndrumare.
mbuntirea continu a modului n care echipa i
compania lucreaz. Cutarea continua a impedimentelor i
ndeprtarea lor cu zel.
Feedback-ul este instrumentul cel mai important de control al procesului. Asigurai-v c feedback-ul este n timp util,
de nalt calitate i se aplic la toate nivelurile de dezvoltare
software (de la cod, design, cerine i funcionaliti utilizate).
Practicile cele mai agile/lean/tehnice sunt despre feedback.
Singurul vostru scop este de a lansa software de succes.
Aceasta este deja o sarcin foarte dificil, aa c trebuie eliminat orice distragere a ateniei (de exemplu: documente
inutile, ntlniri inutile, procese de aprobare, puncte de control etc.). Acest lucru nu nseamn eliminarea practicilor care
sunt de ajutor (documente sau ntlniri utile, puncte de control care ajut la mbuntirea calitii sau dezvolt abilitile
dezvoltatorilor).
Mult lume crede c practicile sunt cele care definesc agile:
ntlnirile zilnice, retrospectivele, integrarea continu, Test
Driven Development, ca s dau doar cteva exemple. n cei cinci
ani de training i coaching am nvat despre agile, lean i practicile tehnice.

Agilitatea este mai important dect Agile.

Ori de cte ori o companie vrea s fac o transformare agile,


prima ntrebare pe care eu i colegii mei de la Mozaic Works o
avem este: Ce sperai s obinei cu asta?
Rspunsurile variate pe care le primim Am auzit c agile
este cool, concurenii notri o fac, clienii notri ne-au cerut s
facem agile necesit mai multe discuii. Cel mai bun rspuns la
care ne ateptm este avem nevoie pentru a mbunti X, unde
X este de obicei: reducerea ciclului de release, calitate, productivitate (pe baza unor criterii clare) sau inovaie.
Prin definirea unui scop de business clar, ne putem pune
de acord asupra principiilor i putem introduce practicile care
sunt cele mai potrivite pentru companie. Uneori, companiile au
nevoie de implementri complete de Scrum, alteori de Kanban,
n timp ce unii au nevoie doar s nceap cu Visual Management
i mbuntire continu.
Nu este important s fii neaprat agile, dar agilitatea n afaceri
Agile
reprezint
un avantaj competitiv.
este din pcate un termen foarte ambiguu, plin de emoie
Dar de ce ar funciona agile? Cum ajut? ntrebarea aceasta
i de marketing. n ciuda acestor provocri, am neles c este un
set de principii, un set de practici i o list de beneficii poteniale. m-a condus la o alt concluzie interesant.
Beneficiile sunt la diferite niveluri:
1. Agilitatea Businessului capacitatea unei companii de a Software-ul este cunoatere.
se adapta rapid la nevoile pieei i ale clienilor.
Am nvat acest lucru de la o discuie cu Mike Beedle, unul
www.todaysoftmag.ro | nr. 29/noiembrie, 2014

29

programare
De ce Agile?
dintre semnatarii Manifestului Agile i co-autor al uneia dintre
primele cri despre Scrum. Am simit c am cochetat cu ideea
nainte, fr a pune ns degetul pe ea.
Ca s fim mai exaci:
Software-ul este cunoatere codat i foarte precis.
Codat, din moment ce este scris n cod. Precis, deoarece
computerele nu pot lucra cu ambiguitate.
Aceast declaraie simpl are impact n fiecare aspect al dezvoltrii de software. Iat cteva aspecte pe care le-am extras:
Dezvoltarea de software const n traducerea cerinelor
ambigue n cod precis.
Ceea ce este echivalent cu a construi cunotine.
Cnd construieti cunotine, sunt de ajutor oricte creierul
poi folosi. De aceea, planificarea n echipa i programare n
pereche pot fi foarte eficiente.
Calitatea rezultatului i eficiena procesului este influenat
de cte pierderi are transferul de cunotine. Cel mai bun transfer de cunotine se face prin comunicare fa-n-fa, din cauza
feedback-ului instant i de nalt calitate (poziia corpului, gesturile feei i minilor, micarea ochilor, inflexiunile vocale
etc.). Documentele nu ofer niciun feedback-ul cititorilor; va
trebui s discutai cu autorul pentru a le nelege mai bine. (A
nu se nelege c documentaia nu este de ajutor pe termen
lung.)
Oamenii au tendina de a subestima precizia necesar.
Feedback-ul continuu este singura modalitate de a se muta
asimptotic ctre ea.
Un numr foarte mare de decizii este necesar pentru a
obine o cunoatere exact. Aceste decizii sunt mprite ntre
client i echipa de dezvoltare. Echipa are nevoie de ntregul
context, astfel nct deciziile lor s se potriveasc cu nevoile
clientului.
Structurarea cunoaterii construite este un impediment cu
care nc ne luptm n industria software.
Programatorii au nevoie de o minte special, pregtit s
transforme cerinele ambigue n cod precis.
nvarea continu este inclus n dezvoltarea de software.
Pn la urm, nvarea nu este altceva dect construirea de
cunotine.

De ce Agile?

Pentru a ncheia: de ce agile? Pentru c:


Agilitatea n afaceri, dezvoltarea agilitii i productivitatea
mbuntit pot fi obinute prin utilizarea principiilor, valorilor i practicilor agile.
Dezvoltarea de software nseamn construire de cunotine
i necesit o abordare fundamental diferit fa de construirea
de piulie i uruburi.
Dezvoltatorii au performane mai bune cnd au autonomie,
expertiz i scop (cheia ctre motivaia intrinsec dup cum
spune Dan Pink) i lucreaz ntr-un mediu care favorizeaz fluxul (vezi lucrrile lui Mihaly Csikszentmihalyi despre fericire
i productivitate)
Cnd construieti cunotine, ai nevoie de toate creierele pe
care le poi folosi.

Cnd nu este agile util? Exist situaii chiar i n dezvoltarea


de software, cnd construirea de cunotine nu joac un rol att
de important: de ex. , customizri pentru aplicaii sau platforme
existente. Exist modele de afaceri care funcioneaz i care nu au

30

nr. 29/noiembrie, 2014 | www.todaysoftmag.ro

nevoie de agilitate. De exemplu, software de contabilitate. Exist


dezvoltatori care sunt mai fericii atunci cnd primesc task-uri pe
care le rezolv fr a lua o mulime de decizii; un mediu agil i va
face nefericii.
Aadar, este agilerspunsul? Nu cred. Mai avem nc un
drum lung de parcurs pentru a obine predictibilitate n dezvoltarea de software. Cred totui c unul din dou lucruri se pot
ntmpla. Industria fie va:
Gsi moduri s minimizeze nevoia de construire de
cunotine prin specializare.
Ori va gsi noi moduri de a construi cunotine precise,
codate, prin mbriarea acestei paradigme.
Nu pot spune nc pe ce drum vom merge, dar pentru mine
a doua direcie sun foarte interesant i merit de a fi explorat.

programare

programare

Componente vizuale Java FX

abelele reprezint unul dintre cele mai puternice instrumente folosite n JavaFX pentru afiarea datelor, suportnd urmtoarele aciuni:

Silviu Dumitrescu

silviu.dumitrescu@accesa.eu
Java Line Manager
@ Accesa

Diana Blan

Diana.Balan@accesa.eu
Java developer
@ Accesa

Reordonarea coloanelor afiate de ctre utilizator,


Sortarea multipl a coloanelor,
Redimensionarea,
Factories de celul pentru customizarea coninutului celulei.

Mai multe clase din JavaFX SDK API sunt


folosite pentru reprezentarea datelor n form
tabelar. Dintre acestea cele mai importante sunt TableView, TableColumn i
TableCell. Putem popula un tabel dintrun model de date i i putem aplica apoi un
cell factory.
TableView are faciliti ce includ:
API-ul TableColumn:
Suport pentru cell factories, ce
permite o customizare a coninutului
celulei n ambele stri: de afiare i de
editare.
Sp e c i f i c are a m i n W i d t h ,
prefWidth, maxWidth, precum i a
coloanelor de dimensiune fix.
La rulare, redimensionarea de ctre user.
La rulare, reordonarea coloanelor
de ctre user.
S u p o r t p e n t r u n c u i b a r e a
coloanelor.
Diferite politici de redimensionare
care determin ce se ntmpl atunci cnd
utilizatorul redimensioneaz coloanele.
Suport pentru sortarea pe mai multe
coloane prin apsarea header-ului de
coloan (apsnd tasta Shift n timp ce
facem click pe header)

- T a b l e V i e w < S > , unde S este tipul


obiectului ce conine lista itemilor din
TableView
- TableColumn<S, T>, unde S are
tipul generic TableView, iar T este tipul
coninutului tuturor celulelor din acest
TableColumn.

TableView este construit dintr-un


numr de instane TableColumn. Fiecare
TableColumn este responsabil de afiarea i de editarea coninutului unei coloane.
n plus TableColumn conine proprieti
pentru:
Redimensionare,
Vizibilitate,
Afiarea textului de header,
Afiarea coloanelor ncuibate pe care le
poate conine,
Afiarea unui meniu de context atunci
cnd utilizatorul face click dreapta pe zona
capului de coloan,
Posibiliti de sortare.

Cnd crem o instan TableColumn,


probabil cele mai importante proprieti de
setat sunt textul (adic ce afim n capul de
tabel al coloanei) i cell value factory (utilizat
pentru popularea celulelor individuale din
coloan).
Clasa T a b l e C e l l < S , T > repreCrearea unui tabel
zint
intersecia unei linii cu o coloana
Minimal avem nevoie de clasele urmn T a b l e V i e w . Conine urmtoarele
toarele pentru a crea un tabel:
www.todaysoftmag.ro | nr. 29/noiembrie, 2014

31

programare
Componente vizuale Java FX
proprieti:
tableColumn: instana TableColumn din spatele
TableCell;
tableView, TableView-ul asociat cu TableCell;
tableRow, TableRow-ul n care TableCell-ul este
plasat;
Pentru a identifica intersecia, TableCell conine o proprietate de index.
Cell<T> este utilizat pentru o celul individual ntr-un
TableView. Fiecare celul este asociat unui singur item de
date, reprezentat de proprietatea item. O celul este responsabil
de renderizarea itemului care rezid n el, care este de obicei un
text. O celul permite customizarea printr-un cell factory.
API-ul Cell este utilizat pentru virtualizarea controalelor
precum ListView, TreeView i TableView. Un Cell
este un control etichetat, folosit pentru a renderiza o unitate ntrunul dintre controalele mai sus amintite. Cell este responsabil
att pentru afiare ct i pentru editarea item-ului. Pe lng text,
Cell poate fi reprezentat de alte controale precum CheckBox,
ChoiceBox sau orice Node precum HBox, GridPane
sau chiar Rectangle. Deoarece ListView, TreeView,
TableView precum i alte asemenea controale pot fi folosite
pentru afiarea unei cantiti mari de date, nu este practic s
crem un Cell pentru fiecare item din control. Fiecare celul
este reutilizat, ceea ce face acest control virtualizat.
Deoarece Cell este un Contro,el are n spate un model.
Skin-ul su este responsabil pentru definirea look and layoutului, n timp ce Behaviour este responsabil pentru manipularea
evenimentelor i utilizarea acelor informaii continute pentru a
modifica starea. Cell este stilizat prin CSS ca orice alt control.
Pentru a specializa o celul utilizat pentru un TableView
trebuie s furnizm o implementare a funciei callback cellFactory() definit pe TableView. Cell factory este apelat
de platform ori de cte ori o nou celul trebuie s fie creat.
Implementarea unui cell factory este responsabil pentru crearea
unei instante Cell i pentru configurarea necesar pentru ca
Cell s reacioneze la schimbrile strii sale.
Cell factory este responsabil de virtualizarea skin-urilor de
container pentru a renderiza reprezentarea predefinit a unui
item Cell. Spre exemplu, ntr-un ListView convertete itemii la un String si apeleaz Labeled.setText(String).
Dac dorim s specializm celula utilizat n ListView, trebuie s furnizm implementarea funciei callback definit pe
ListView.
Cell factory este apelat de platform ori de cte ori determin
c o celula trebuie s fie creat. Spre exemplu, un ListView are
10 milioane de itemi. Crearea tuturor celor 10 milioane este foarte
costisitoare. Aadar, implementarea skin-ului ListView va crea
doar attea celule ct s umple spaiul vizual. Dac se redimensioneaz spaiul vizual, sistemul va determina dac este nevoie
de crearea altor celule. n acest caz va apela cellFactory()
(dac exist vreuna) pentru a crea o implementare Cell. Dac
nu este furnizat niciuna implementarea predefinit este utilizat.
ObservableList este modelul de date care st la baza lui
TableView. O instan TableView este definit astfel:
TableView<Person> table = new TableView<>();

ObservableList<Person> teamMembers =
getTeamMembers();
table.setItems(teamMembers);

O dat setat lista de itemi, TableView este automat updatat ori de cte ori lista teamMembers se modific. Dac lista
de itemi este disponibil nainte ca TableView s fie instaniat,
este posibil s o trimitem direct n constructor.
Ceea ce mai trebuie s facem este s mprim datele coninute
n model n una sau mai multe instane TableColumn. Pentru
a crea un TableView cu dou coloane, ce afieaz firstName
i l a s t N a m e vom
folosi codul:
public class DataTable extends
Application {
TableView<Person>
table = new TableView<>();
BorderPane root
= new BorderPane();
VBox mainBox =
new VBox(); //
Container for content
final

ObservableList<Person> teamMembers =
FXCollections.observableArrayList(
new Person(Ion, Tech),
new Person(Petre,Petrescu),
new Person(Doru, Dorescu),
new Person(Vasile, Vasilescu));
@Override
public void init() {
Label centerLbl = new Label(Persons);
centerLbl.setStyle(-fx-font-size:16pt;
-fx-font-weight:bold;);
table.setItems(teamMembers);

TableColumn<Person, String> firstNameCol = new TableColumn<Person, String>(First Name);
firstNameCol.setCellValueFactory(
new PropertyValueFactory<Person,String>(firstName));
TableColumn<Person, String> lastNameCol =
new TableColumn<Person, String>(Last Name);
lastNameCol.setCellValueFactory(
new PropertyValueFactory<Person,String>
(lastName));
table.getColumns().setAll(firstNameCol, lastNameCol);
mainBox.getChildren().add(centerLbl);
mainBox.getChildren().add(table);

Am definit astfel un tabel primar. Modelul de date este


creat pe baza unui ObservableList. l putem seta direct n }
TableView. Spre exemplu:

32

nr. 29/noiembrie, 2014 | www.todaysoftmag.ro

programare
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle(Data Table);
root.setCenter(mainBox);
primaryStage.setScene(new Scene(root, 400, 300));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}

Prin aceasta
am d e f i n it c om plet proprietile
minime cerute pentru a crea o instan
TableView. Nici
o alt proprietate a
clasei Person nu
va fi afiat pentru c
nu avem definite alte
TableColumn.
Implementarea
unui cell fac tor y
este responsabil nu
doar pentru crearea instanei Cell,
dar i pentru configurarea acelei
celule. n exemplul
urmtor am creat
o clas Callback
ce are ca atribute
instane ale claselor
TextAlignment
i F o r m a t cu
parametrii:
S, tipul generic
al lui TableView;
T, tipul coninutului n toate celulele lui TableColumn
public class FormattedTableCellFactory<S, T>
implements Callback<TableColumn<S, T>,
TableCell<S, T>> {

private TextAlignment alignment;
private Format format;
public TextAlignment getAlignment() {
return alignment;
}
public void setAlignment(TextAlignment alignment) {
this.alignment = alignment;
}
public Format getFormat() {
return format;
}
public void setFormat(Format format) {
this.format = format;
}
@Override
public TableCell<S, T> call(TableColumn<S, T> p) {
TableCell<S, T> cell = new TableCell() {
@Override
public void updateItem(Object item, boolean empty) {
if (item == getItem())
return;

TODAY SOFTWARE MAGAZINE


super.updateItem(item, empty);
if (item == null) {
super.setText(null);
super.setGraphic(null);
} else if (format != null) {
super.setText(format.format(item));
} else if (item instanceof Node) {
super.setText(null);
super.setGraphic((Node) item);
} else {
super.setText(item.toString());
super.setGraphic(null);
}
}
};
cell.setTextAlignment(alignment);
switch (alignment) {
case CENTER:
cell.setAlignment(Pos.CENTER);

break;
case RIGHT:
cell.setAlignment(Pos.CENTER_RIGHT);
break;
default:
cell.setAlignment(Pos.CENTER_LEFT);
break;
}
return cell;
}
}

Respectiv:
FormattedTableCellFactory<Person, String> xx = new
FormattedTableCellFactory<>();
xx.setAlignment(TextAlignment.CENTER);
firstNameCol.setCellFactory(xx);

Beneficiile utilizrii CSS-urilor pentru a seta stilul unui tabel


constau n eficiena de timp i eficiena de memorie, usurina
utilizrii i construirii bibliotecilor pentru celule, usurina customizrii formatrii de afiare.
Utilizm CSS-ul pentru a seta culorile celulei:
Fiecare celul poate fi stilizat direct din CSS. Spre exemplu,
dac dorim s schimbm culoarea predefinit a backgroundului fiecarei celule din TableView la alb, trebuie s utilizm
urmatorul CSS
.table-cell {
-fx-padding: 3 3 3 3;
-fx-background-color: white;
}

Pentru a seta culorile unor celule selectate dintr-un


TableView, la albastru, vom folosi urmatorul CSS:
.table-cell:selected {
-fx-background-color: blue;
}

Pentru ca table-cell:selected s funcioneze trebuie


s setam cellSelectionEnabled la true.
Multe implementri de celula extind IndexedCell n loc
de Cell. Aceasta permite adugarea altor dou pseudoclase: odd
i even. Cu acestea putem obine colorarea alternant a liniilor
prin intermediul unui CSS de forma:
.table-row-cell:odd{
-fx-background-color:lightblue;
}

V mulumim pentru lectur i ateptm cu plcere, ca ntotdeauna, discuiile cu toi cei interesai.

www.todaysoftmag.ro | nr. 29/noiembrie, 2014

33

programare

Automatizare folosind puppet

utomatizarea reprezint o component important n IT, att n dezvoltarea


software ct i n administrarea sistemelor i a infrastructurii. n cazul mediilor mari i dinamice, implementarea unei forme de automatizare reprezint o
nevoie esenial pentru a asigura un proces optim de management al resurselor.

Claudiu Demian

claudiu.demian@yardi.com
Systems Administrator
@ Yardi

34

nr. 29/2014 | www.todaysoftmag.ro

Puppet este un sistem de management al configuraiilor care permite


administratorilor de sistem definirea
strii infrastructurii IT. Orice modificare
care trebuie efectuat se traduce ntr-o
modificare n configuraia puppet pentru
respectiva resursa (fiier/pachet/nod/grup
de noduri etc.), care este aplicat n mod
automat pe toate serverele sau nodurile
vizate de respectiva schimbare.
Descrierea acestei stri se realizeaz
folosind limbajul puppet, care este un limbaj declarativ. Configuraia general se
gsete n fiierul /etc/puppet/manifests/
site.pp. Aici sunt referite modulele, clasele
i resursele definite n /etc/puppet/modules.
Puppet poate funciona att ntr-o
arhitectur de tip client-server ct i standalone. n primul caz, serverul puppet
poart numele de puppetmaster. Pe maina
puppetmaster este definit configuraia
infrastructurii, care este mai apoi preluat
de ctre clieni la intervale regulate de timp
(modificabile de ctre administrator).
n continuare, oferim un exemplu
elocvent pentru modul de utilizare a
limbajului:

/etc/puppet/modules/lighttpd/manifests/init.pp:
class lighttpd {
package{lighttpd:
ensure => installed,
}
file{/etc/lighttpd/lighttpd.conf:
content => template(lighttpd/
lighttpd.conf.erb),
notify => Service[lighttpd];
}
service{lighttpd:
ensure => running,
enable => true,
}
}

Aceasta clas prezint o instalare a


serverului web lighttpd, descriind fiecare
component necesar. Astfel, putem identifica primele tipuri de resurse de care
dispune puppet i care sunt probabil i cele
mai folosite.
Un modul reprezint un set de
clase, definiii, template-uri i fiiere
care mpreun,ndeplinesc un singur
scop. De aici rezult i prima recomandare n scrierea unui modul: trebuie s
ndeplineasc o singur funcionalitate.
Exemplu: un server LAMP ar putea fi gestionat cu un singur modul puppet care se

programare
ocup de instalarea Apache-ului, a serverului MySQL, a PHP-ului
i a oricror alte servicii conexe din Linux (autentificare, NTP,
etc.). Problema care apare este c acest modul risc s ajung prea
mare i greu de gestionat. n plus, i pierde din portabilitate. O
soluie mai elegant este desprirea configuraiilor n patru module separate, reducndu-se astfel complexitatea fiecruia.

Clasa reprezint un bloc de cod care poate fi instaniat.
Fiecare modul are definit n fiierul manifests/init.pp clasa
principal a modulului. Instanierea unei clase la nivelul unui
nod, astfel nct s se aplice schimbrile sale se realizeaz folosind
directiva include.
/etc/puppet/manifests/site.pp:
node /web\d+/ {

include lighttpd
}

Clasele suport moteniri i pot fi instaniate de mai multe ori


n configuraia general puppet, care se gsete n fiierul site.pp.
De asemenea, clasele pot fi parametrizate.
n cadrul unei clase definim starea dorit a sistemului folosind
resurse de tipuri predefinite sau definite de administrator. n
exemplul anterior, putem identifica urmtoarele resurse: pachetul
lighttpd, fiierul /etc/lighttpd/lighttpd.conf i serviciul lighttpd.
Fiecare resurs are un tip (package, file i respectiv service), un
nume i unul sau mai multe atribute (ensure, content, notify, etc.).
Puppet dispune de un numr satisfctor de tipuri predefinite
pentru resurse, foarte bine documentate n documentaia lor
oficial.
O alt funcionalitate util a puppet-ului este aceea de template-ing. Folosind limbajul ERB (Embedded Ruby), puppet ofer
posibilitatea de a genera fiiere n funcie de parametri oferii
de administrator la instanierea clasei sau de starea sistemului,
folosind fact-uri. mpreun cu puppet-ul, pe sistem se instaleaz
i un utilitar numit facter. Acesta aduna informaii despre sistem
i le expune ca fact-uri (exemplu: ip_address, fqdn, operatingsystem etc.). Aceasta funcionalitate poate fi extins cu fact-uri
definite de administrator care, la rndul lor, pot fi utilizate n
template-uri.
Datorit faptului c modulele sunt de sine stttoare i refolosibile, puppet ofer serviciul PuppetForge prin care utilizatorii

TODAY SOFTWARE MAGAZINE


pot oferi gratuit module realizate de ei i pot descra modulele
altor utilizatori.
Pe lng funcionalitatea de baz, aceea de a descrie starea
sistemului, puppet poate fi extins pentru a aduna statistici despre
infrastructur. Aceasta se realizeaz folosind serviciul puppetdb.
Acesta are n spate o baz de date n care se agreg fact-urile
tuturor sistemelor din infrastructur. Aceste informaii pot fi utilizate ulterior n cadrul claselor pentru a genera dinamic resurse.
Un exemplu de utilizare al puppetdb-ului l reprezint un
modul de gestionare a unei instane de Nagios. Acesta, folosind
informaii despre sisteme din puppetdb (hostname, ip, din care
hostgroup-uri face parte), genereaz automat cte un fiier de
configurare pentru fiecare nou host introdus n infrastructur.
Administratorului i rmne doar sarcina de a defini comenzi,
check-uri i hostgroup-uri.
O alt posibilitate de a extinde puppet-ul este folosind puppet-dashboard. Acest serviciu ofer o interfa web prin care ni se
ofer mai multe informaii i statistici despre infrastructur. n
primul rnd, fiecare client trimite ctre serverul pe care ruleaz
puppet-dashboard un raport despre ultima rulare a clientului:
dac a rulat cu succes, dac s-a modificat ceva, ce a crpat etc.
Putem vizualiza aceste rapoarte n aplicaie, precum i statistici
generate din aceste rapoarte.
De asemenea, puppet-dashboard ne ofer i un serviciu numit
Inventory Service prin care s putem interoga starea sistemului,
tot n funcie de fact-uri. Dac folosind puppetdb putem folosi
aceste informaii n interiorul claselor, folosind Inventory Service
avem acces la ele din exterior. Folosind API-ul lor, putem construi
unelte/aplicaii care s foloseasc aceste informaii.
Acest articol s-a dorit a fi o introducere n puppet pentru
cei care nc nu l-au introdus n mediul lor. Flexibilitatea i
potenialul de a uura munca administratoriloor pe care puppet le ofer pot reprezenta argumente convingtoare n favoarea
adoptrii acestuia. Nu susinem c puppet reprezint soluia
tuturor problemelor sau c este cel mai bun sistem de gestiune
a configuraiior- mai sunt chef, cfengine sau alte sisteme comerciale- dar susinem ideea c orice administrator de sistem ar
trebui s foloseasc un astfel de sistem n infrastructura pe care
o gestioneaz.

Objective C

jobs-cluj@yardi.com
Yardi Romania

www.todaysoftmag.ro | nr. 29/noiembrie, 2014

35

programare

Cod curat
limitri, gestionarea erorilor i a obiectelor

n ultimele trei luni am ncercat s scriu despre diferite subiecte prezentate n Clean Code. Chiar dac acesta este al patrulea
articol pe aceast tem, am sentimentul c mai exist nc multe probleme despre care ar trebui s discutm atunci cnd vorbim
despre un cod curat i bine scris.

Am putea spune c aceast carte,


Clean Code scris de Robert C. Martin,
a stabilit standardele n industria noastr
din aceast perspectiv. Este biblia dezvoltatorilor i de multe ori este utilizat
drept legea codului. Nu vreau s intru
mai adnc n acest subiect, dar promit c
ntr-o zi voi vorbi n detaliu despre motivele pentru care ar trebui s utilizm sau
nu aceast carte ca un reper important al
dezvoltatorilor .

Subiectul de azi

n acest articol, analiza va fi orientat asupra obiectelor i structurii datelor


XXXX. Vom trece de la formatul codului
la cum ar trebui s arate codul i la cum
ar trebui s implementm funcionaliti
diferite.

Obiecte i structura datelor

Cred c ne amintim cu toii cursurile


de la Universitate, cnd profesorii ncercau s ne explice c ar trebui s expunem
dintr-o clas numai informaiile de care
au nevoie ceilali. Dar, din cauz c limbajul de programare actual ne ofer att
de uor posibilitatea de a expune datele
n afara unei clase, adesea sfrim prin a
avea o mulime de date private dezvluite
sistemului.
Unul dintre colegii mei s-a referit la
getter /setter drept dispozitivul diavolului.
Este amuzant, dar uneori este adevrat.
Nu este att de important dac utilizm un getter / setter al unei metode.
Cel mai important lucru este s expunem datele ntr-un mod abstract, care s
nu dezvluie detaliile de implementare.
De exemplu, dac este nevoie s dezvluim o informaie legat de greutatea unei

36

persoane, noi putem folosi un getter sau o


metod simpl. Ambele soluii sunt bune
atta timp ct nu oferim niciun fel de detalii de implementare.
public class Person
{
public double WeightInKg
{
...
}
// OR
public double GetWeightInKg()
{
...
}
}

cadrul metodei,
Metode din obiectele care sunt trimise drept argumente,
Metode din obiectele instaniate n
clasa n care metoda este implementat

Hibride

Structurile hibride sunt obiecte care


conin de asemenea i structuri de date.
Problema cu acestea este c e destul de
greu s le adaugi funcionalitate nou sau
date noi. Aceasta creeaz confuzie deoarece nu tii ce ar trebui s adaugi acolo.
n afara acestei clase, nu tii cum arat Poate indica faptul c scopul acelei entiti
aceste date sau care este formatul lor. Dac nu este clar i nici dac este necesar proam aduga getters i setters peste tot, care tejarea datelor.
ar fi valoarea ncapsulrii? ZERO.
Atunci cnd ncepei s scriei cod, e Obiect cu structur de date
important s inei cont de faptul c exist
Sunt utilizate mult cnd este nevoie s
o mare diferen ntre structurile de date stocm datele undeva (DB) sau s trimii obiecte. Cel mai bun lucru pe care putei tem date prin fir. Acestea se numesc DTO
s l facei este s pstrai o linie clar ntre i de obicei nu au nici un fel de funcionaacestea dou.
litate. Scopul lor este bun, dar ar trebui s
Structura datelor expune numai reinem c trebuie s le utilizm numai n
datele, fr nici un fel de funcionalitate, scopul pentru care eu fost create. Altfel, o
n contrast cu obiectele, care expun numai schimbare n structura de date va atrage
funcionalitatea. Bineneles, noi trebuie s multe schimbri n codul nostru.
inem minte c echilibrul dintre cele dou
Deasupra DTO avem Active Records,
este greu de pstrat. Vei avea nevoie de o care sunt similare cu DTO-urile, dar au
structur a datelor care expune funciona- metode utilizate pentru navigare, cum
litatea. Trebuie doar s ai n minte datele ar fi Fiind, Save, Delete, Send i aa mai
pe care doreti s le expui i unde ar trebui departe. Aceast funcionalitate este de
adugat implementarea funcionalitii. obicei oferit de DB. Problema cu ele este
Atunci cnd implementezi o funci- c dezvoltatorii le folosesc de obicei drept
onalitate, ar trebui s vorbeti numai cu obiecte i le adaug noi funcionaliti. De
prieteni i niciodat cu strini (Legea lui aceea ajungem s avem un Active Record
Demeter). Acest lucru nseamn c o func- care are logic business n interior.
ie ar trebui s acceseze / apeleze numai:
Ce ar trebui s facem? S crem Active
Metode din clasa n care este Records care stocheaz numai structura de
implementat,
date i s utilizm obiecte separate pentru
Metode din obiectele create n a stoca regulile de business.

nr. 29/noiembrie, 2014 | www.todaysoftmag.ro

programare

TODAY SOFTWARE MAGAZINE


Este important s
reinem c funcia n
care nate o ateptare
ar trebui s furnizeze
suficient coninut despre sursa erorii. Ar
trebui s ncercm s
definim excepiile specifice pe baza nevoilor
apelantului. De ce?
Pentru c scopul lor
principal este s l ajute
pe apelant s gseasc
sursa problemelor.

Nul

Gestionarea erorilor

De ce trebuie s discutm despre gestionarea erorilor? Deoarece, chiar dac


scopul principal al codului nu este gestionarea erorilor, ci funcionalitatea care este
implementat, ajungem s avem cod n
care poate fi vzut numai gestionarea erorilor i ne este aproape imposibil s gsim
detaliile despre funcionalitatea real care
este expus acolo.
Pentru a evita aceste situaii, exist
cteva lucruri mrunte care pot fi fcute la
nivelul codului. Mai nti de toate, evitai
s folosii coduri de eroare. Acest lucru
adaug mult cod metodelor voastre i
ascunde informaia dup excepia n sine.
De asemenea, cel care apeleaz trebuie s
verifice de fiecare dat codul raportat i s
implementeze un manipulator special pentru diferitele coduri de eroare.
Excepia poate fi utilizat cu succes n
blocuri try/catch care pot fi vzute drept
blocuri de tranzacie, unde te atepi la
excepii i eti pregtit s le gestionezi.
De asemenea, exist o separare clar ntre
funcionalitate i gestionarea excepiei.
try
{

// Functionality
} catch (FantaException nullEx)
{
...
} catch (CokeException nullEx)
{
...
}

definim un adaptor care s ne izoleze de


biblioteca terei pri. Vom avea cazuri n
care va trebui s mimm comportamentul
sau cnd API-ul terei pri se va modifica.
n acest caz, nu dorim s crem efectul de
domino n ntregul nostru cod.
Adaptorul nu ar trebui s expun 1:1
funcionalitatea expus de partea ter, ci
s expun numai funcionalitatea de care
avem nevoie, nu cea care este oferit. Toate
detaliile implementate ar trebui s fie puse
chiar n adaptor.

Concluzie

Ar mai fi att de multe lucruri de spus


despre subiectele atinse n acest articol.
Iat trei lucruri pe care a dori s le inei
minte din acest articol:
Diferena dintre un obiect i o structur de date.
Niciodat s nu returnai un NUL
sau s l trimitei mai departe unei alte
metode.
Un adaptor pentru o limit ar trebui
s expun funcionalitatea de care avei
nevoie, nu pe cea expus de tera parte.

Nu ar trebui niciodat s faci dou


lucruri:

S pasezi
NULL-ul unei alte
funcii, deoarece
funcia va trebui s
verifice dac este nul
sau nu i s gestioneze aceast situaie.
De fapt, tu pasezi proDe asemenea: Da! Fiecare dintre noi ar
blema unei alte funcii, dar fr a o
trebui s citeasc Clean Code.
rezolva.
S returnezi un NULL. Apelantul va
fi nevoit s verifice rezultatul, dac este
nul sau nu i s adauge un manipulator
specific. Mai bine ar fi s returnezi
o excepie care poate fi arhivat i
Radu Vunvulea
Radu.Vunvulea@iquestgroup.com
gestionat de ctre apelant.

Limitri

Senior Software Engineer


@iQuest

Noi suntem nconjurai de frontiere.


Atunci cnd utilizm biblioteci ale unor
pri tere, cod implementat de alte echipe,
nucleu API i aa mai departe. n toate
aceste situaii avem trasat o limit, dar i
un set de funcii pe care le putem utiliza
pentru a trece peste ea.
Este important de tiut cum s pstrm aceste hotare curate i utile. Primul
lucru pe care ar trebui s l facem cnd este
nevoie s utilizm o resurs extern este s
ne rezervm timp pentru a nva despre
ea i a o explora. Noi trebuie s descoperim
hotarul i cum putem s gestionm i s
utilizm funcionalitatea expus de acesta.
Cea mai simpl metod de a nva
este s scriem teste care valideaz scenarii diferite. Astfel, putem fi siguri 100% c
diferitele fluxuri vor funciona i c tim
cum s le gestionm. De asemenea, vom
putea valida i faptul c partea ter ne
ofer ceea ce ne trebuie cu adevrat.
Atunci cnd avem pri tere externe
care expun limitri este obligatoriu s
www.todaysoftmag.ro | nr. 29/noiembrie, 2014

37

management

Sfaturi strvechi pentru un Product Owner


Sun Tzu Arta rzboiului

nul dintre cele mai vechi i folosite tratate militare este Arta rzboiului.
Cartea a fost scris n jurul anului 500 .e.n. de ctre un general de la curtea
regelui inutului Wu i prezint un set de treisprezece capitole cu precepte
despre tactic i strategie destinate comandanilor de armate.
Am citit cartea cu destul de mult
vreme n urm, dar urmrind tendinele
actuale referitoare la tehnici de comunicare i management, am decis s o recitesc
i s mprtesc cteva dintre sfaturile
strvechi ale lui Sun Tzu aplicabile unei
poziii moderne precum aceea de Product
Owner.

Argumentaie

Liviu tefni Baiu

liviu.baiu@endava.com
Senior Business Consultant
@ Endava

Aa cum bine tim, rolul de Product


Owner este specific metodologiei Agile
SCRUM. Acest rol poate fi ocupat de o
singur persoan care, conform Ghidului
Scrum, este responsabil de:
formularea clar a cerinelor din
product backlog.
ordonarea n funcie de prioritate a
cerinelor din product backlog.
optimizarea valorii adugate a acestor cerine.
a s i g u r a r e a c o n d i i i l o r d e
transparen i claritate a cerinelor.
prezentarea cerinelor la care echipa
SCRUM va lucra n perioada urmtoare.
Dac aplicm un joc de cuvinte pentru
lista de mai sus, prin nlocuirea termenului cerine cu ordine (militare) i nlocuirea
sintagmei echipa SCRUM cu armat vom
obine urmtoarele:
formularea clar a ordinelor
(militare).
ordonarea n funcie de prioritate a
ordinelor (militare).
optimizarea valorii adugate a acestor ordinelor (militare).

38

nr. 29/2014 | www.todaysoftmag.ro

a s i g u r a r e a c o n d i i i l o r d e
transparen i claritate a ordinelor
(militare).
prezentarea ordinelor (militare) pe
care armata le va executa n perioada
urmtoare.

ntrebri

Transformarea de mai sus conduce, n


mod natural, ctre urmtoarele ntrebri:
1. Putem considera c rolul de Product
Owner poate fi asimilat celui de comandant de armat?
2. Poate fi considerat Arta rzboiului un ghid pentru un Product Owner?
Prerea mea este ca rspunsul pentru ambele ntrebri este DA. n cele ce
urmeaz voi oferi si raionamentul pe baza
cruia am ajuns la acest rspuns.

Product Owner - comandant de armat

Voi ncerca s argumentez de ce consider c rolul de Product Owner i cel de


comandant de armat sunt similare.
Un Product Owner trebuie s aduc
la via viziunea sa despre un produs, s
ating scopul proiectului prin mprirea acestuia ntr-un set de cerine clare,
ordonate dup prioritate. Fiecare dintre
cerine trebuie s aduc valoare prin sine
i trebuie s permit gruparea n iteraii,
care s aib un rezultat funcional i palpabil. Conceptele cheie prezentate mai sus
sunt: Claritate, Scop, Cerine, Prioritate,
Iteraie i Rezultat (funcional i palpabil).

management
De asemenea, un Product Owner este
singurul responsabil pentru prezentarea
viziunii ctre echip precum i pentru
asigurarea unei nelegeri comune a viziunii i a produsului n rndul tuturor
celor implicai, att membri ai echipei ct
i responsabilii de produs din exteriorul
echipei. Succesul unui proiect depinde de
modul n care Product Owner-ul reuete
s menin toate aceste persoane concentrate asupra scopului proiectului, dar i de
modul n care Product Owner-ul reuete
s canalizeze eforturile tuturor ctre livrarea cerinelor care aduc valoarea cea mai
mare produsului final.
Rolul de Product Owner implic i
responsabilitatea de a fi n permanen
informat despre schimbrile care apar pe
piaa pe care urmeaz s fie lansat produsul dar i despre modul n care evolueaz
comportamentul grupului int de consumatori. De asemenea, este important i s
reacioneze la acestea pentru ca produsul
s se poat livra n cel mai scurt timp.
Mediul de lucru al echipei este o alt
responsabilitate a Product Owner-ului,
pentru ca echipa s aib posibilitatea
de a-i desfura activitatea n condiii
optime. Aceast responsabilitate este indirect i este mprit ntre Product Owner
i Scrum Master. Aria de responsabilitate
a Product Owner-ului se refer la alinierea echipei SCRUM la mediul i procesele
interne ale organizaiei.
Toate cele de mai sus trebuie privite prin prisma livrrii produsului
ntr-un mod eficient din punct de vedere
al costurilor. Un Product Owner trebuie s compare valoarea pe care o aduc
funcionalitile care se implementeaz
cu suma costurilor implicate. Acesta este
unul dintre cei mai importani indicatori
care intervin n stabilirea prioritii unei
cerine, dar i n evaluarea maturitii i
succesului proiectului.
n Arta rzboiului, generalul este
responsabil pentru obinerea victoriei
(Scop i Rezultat). Pentru a atinge acest
rezultat, generalul are nevoie de un plan
clar, de metode pentru a menine moralul
trupelor i dedicaia acestora pentru obinerea victoriei, de resurse de calitate i de
logistic eficient, dar i de disciplin si
comunicare.
Generalul este singurul care poate da
ordine (cerine) armatei i trebuie s fie la
curent cu micrile de trupe ale inamicului pentru a putea s decid urmtoarele
manevre ale armatei sale (Prioritatea i
iteraiile).
Sun Tzu prezint in detaliu factorii

TODAY SOFTWARE MAGAZINE

care ar trebui luai n considerare la ntocmirea planurilor de lupt:


Influen Moral, descris astfel:
neleg ceea ce determin armonia dintre popor i conductorii lui
Condiii Meteorologice neleg
jocul reciproc al forelor naturii... de
asemenea, conducerea operaiunilor
militare n acord cu anotimpurile
Teren neleg distanele, uurina
sau dificultatea de a le strbate, lrgimea
sau ngustimea terenului
Comandament - Autoritate neleg calitile de nelepciune, de dreptate,
de omenie, de curaj i de severitate ale
generalului.
Doctrin neleg organizarea,
autoritatea, promovarea ofierilor la
rangul cuvenit, sigurana cilor de aprovizionare i grija de a face fa nevoilor
eseniale ale armatei.
Sunt vizibile asemnrile dintre cele
dou roluri. Desigur, nici unul dintre
factorii menionai mai sus nu se aplic
ad litteram, dar prin extrapolarea ideilor
prezentate de Sun Tzu, un cititor avizat
va ajunge relativ uor la termeni cum ar
fi Leadership, Market Conditions, Market

Trends, Consumer Behavior, Methodology


sau Processes.
n opinia mea, nu ar trebui omise alte
dou caliti care trebuie s fie proprii
pentru ambele roluri, att cel de Product
Owner ct i cel de comandant militar
Claritatea i Onestitatea n relaia cu
echipa SCRUM / armata.

Arta razboiului un ghid pentru


Product Owner

Cea de-a doua ntrebare (Poate fi considerat Arta rzboiului un ghid pentru
un Product Owner?), are acelai rspuns
Da. Iar argumentele sunt prezentate n
cele ce urmeaz.
n cartea sa, Sun Tzu a prezentat
mai mult dect rolul i responsabilitile
comandantului armatei, oferind detalii
despre ce semnific victoria, care sunt strategiile i tacticile pentru a o obine, cum
se pot folosi n mod eficient diferitele categorii de armate. De asemenea, a prezentat
importana trupelor de informaii i spionaj, care joac un rol deosebit de important
n adaptarea strategiei n funcie de manevrele inamicului, adic in capacitatea de a
reaciona la schimbare.
Un alt element important pentru un

www.todaysoftmag.ro | nr. 29/noiembrie, 2014

39

management
Sfaturi strvechi pentru un Product Owner Sun Tzu Arta rzboiului
general este capacitatea de a obine maximum de rezultate meninnd costurile la
minimum. Conform lui Sun Tzu, aceasta
se poate realiza prin folosirea resurselor
inamicului n special hrana al crei cost
crete pe msur ce armata nainteaz n
teritoriul inamic. Un alt precept specific
modul n care micrile de trupe trebuie
planificate n funcie de viteza de deplasare
a diferitelor categorii de armate (infanterie, cavalerie, care de lupt), precum i
de importana sincronizrii manevrelor
(aceasta poate fi echivalat cu importana
calculrii indicatorului velocity pentru
echipele de SCRUM i a folosirii judicioase
a resurselor).
O calitate important a unui general,
aa cum o prezint Sun Tzu, este aceea de
a identifica, msura i evalua permanent
schimbrile care survin n teatrul de rzboi
i de a reaciona rapid la acestea, adaptnd
n permanen planurile tactice. Acesta
este cel mai important argument pentru
rspunsul meu.
Evaluarea permanent a teatrului de
rzboi este descris astfel de Sun Tzu:

10. Atunci cnd elaborezi un plan


de rzboi, compar urmtoarele elemente, apreciindu-le cu cea mai mare
minuiozitate.
11. Dac imi spunei cine e suveranul
cu cea mai mare nrurire moral, comandantul ef cel mai competent, armata care
are de partea sa avantajul condiiilor meteorologice i ale terenului, i n snul creia
regulamentele sunt cel mai riguros respectate i ordinele cel mai bine executate, mi
artai care sunt trupele cele mai puternice.
12. Cine are ofierii i oamenii cei mai
bine pregtii?
13. i cine atribuie recompensele i
pedepsele cu cel mai mare discernmnt?
14. Voi fi n msur s prevd de
partea cui va fi victoria i de partea cui
nfrngerea.

moralul echipei i mediul de lucru. De


asemenea, trebuie s comunice n permanen cu echipa i cu responsabilii de
produs din exteriorul echipei, pentru a
menine un nivel ridicat de informare
despre progresele care se fac n realizarea
produsului final.
n ncheiere, sper c, prin intermediul
paralelei efectuate n acest articol, am reuit s v trezesc interesul asupra acestei
cri ale crei pagini conin sfaturi aplicabile n diferite domenii i s v conving de
actualitatea unor principii ale strvechii
nelepciuni orientale.

Bibliografie

Arta rzboiului - Sun Tzu, Editura


ANTET XX PRESS, 1993

n zilele noastre, un Product Owner


trebuie s fie n contact permanent cu
piaa pe care va fi lansat produsul, dedicat
metodologiei folosite (Agile SCRUM), s
monitorizeze n permanen procesele,

MobOS 2nd edition will consists of a 2 days-conference, first day dedicated to mobile technology presentations and open panel
talks, while the second day will host 4 workshops, iOS and Andoid related, for both beginners and advanced developers.
10 presentations, 4 workshops, 6 international speakers and 4 local speakers, 2 full-days in Cluj Napoca to engage in the
world of Mobile technology development. Were looking forward to meeting you there!
2 key speakers for each track will deliver on the second day 2 workshops
When: 20 21 November 2014
Where: Golden Tulip Ana Dome Hotel

40

nr. 29/noiembrie, 2014 | www.todaysoftmag.ro

programare

TODAY SOFTWARE MAGAZINE

Java vs. Objective-C

n rndurile acestui articol mi propun s realizez o scurt introducere n mediul de dezvoltare iOS, urmrind n special caracteristicile limbajului de programare Objective-C. Voi viza elementele definitorii ale limbajului, precum i detalii privind cel
mai utilizat framework n acest context, Cocoa-Touch. Concluziile exprimate n acest articol sunt din punctul de vedere al unui

programator Java. Vei putea identifica multe comparaii cu acest


limbaj de programare.
Nu mi propun ca acest articol s fie un tutorial detaliat de
Objective-C, ci o expunere critic a unor caracteristici ale acestui
limbaj de programare. Pentru detalii putei utiliza documentaia
oficial Apple, disponibil la adresa https://developer.apple.
com/, precum i alte tutoriale disponibile pe Internet. Cteva dintre punctele atinse pe parcursul articolului vizeaz modalitatea
de implementare a principiilor OOP n Objective-C, expresiile
lambda i o paralel a gestionrii memoriei n Java i Objective-C.
Probabil primul lucru la care ne duce cu gndul Objective-C
este sintaxa ciudat a acestui limbaj de programare. Exemplul
de cod de mai jos surprinde declararea unei metode, instanierea
unui obiect i apelul metodei anterior definite:

NSNumber *num = [NSNumber numberWithUnsignedInt: 7];

Acest tip de instaniere implementeaz practic DesignPattern-ul Abstract Factory. Clasa abstract NSNumber
returneaz, n funcie de metoda de instaniere apelat, o instan
a uneia dintre urmtoarele clase:
NSCFNumber pentru toate tipurile numerice i pentru
tipul caracter;
NSBooleanNumber pentru tipul primitiv boolean.

Ulterior, n cod, apelnd metode precum intValue, booleanValue etc., vor fi create obiecte concrete (sunt, de fapt, tipuri
primitive): fie prin returnarea valorii cu care a fost instaniat factory-ul dac este stocat acelai tip cu cel cerut de apelul metodei
-, fie convertind valoarea la tipul solicitat. Dei Objective-C nu
implementeaz auto-(un)boxing, putem identifica dou avantaje
-(void) setNumerator:(int) numerator andDenominator:
ale acestei abordri:

(int) denominator{
subclasele NSNumber cuprind metode utile de conversie
self.numerator = numerator;
ntre
tipurile de date (metode asemntoare sunt implementate
self.denominator = denominator;
}
i
de
clasele
wrapper din Java);
...

n
acest
fel vor fi utilizate preponderent tipurile de date
MSGFraction *fraction = [[MSGFraction alloc] init];
[fraction setNumerator: 3 andDenominator: 7];
primitive , fiind instaniat un obiect wrapper doar n situaiile
necesare. De exemplu, pentru stocarea datelor ntr-o list. n
Acum, dup ce am fcut cunotin cu Objective-C, putem
Java, dei conversia de la tipuri primitive la obiecte wrapper
vorbi despre tipurile de date ale acestui limbaj de programare.
este facil, folosirea celei de-a doua opiuni poate introduce
Objective-C este o extensie a limbajului C, fiind astfel motenite
probleme de performan semnificative.
toate tipurile de date existente n C: arrays, pointeri, structuri etc.

.Poate singura diferen important n ceea ce privete tipurile de
n ceea ce privete aplicarea principiilor OOP n Objective-C,
date numerice din Objective-C fa de Java sunt tipurile unsigned,
pstrate n cazul primului limbaj menionat. Spre deosebire de prima diferen fa de Java poate fi identificat n cazul definiJava, unde exist cte o clas wrapper pentru fiecare tip nume- rii unei clase. Dac n Java o clas este definit ntr-un singur
ric primitiv, aici gestionarea se realizeaz prin intermediul unei fiier, avnd extensia .java, n Objective-C o clas const din dou
singure clase, NSNumber. Aceast clas cuprinde metode utile componente:
componenta public, denumit interfa, cuprinde metode instaniere specifice pentru fiecare tip de date. De exemplu,
dele publice ale clasei. Trebuie menionat faptul c interfaa din
pentru instanierea unui obiect ce reprezint un ntreg unsigned,
Objective-C nu este echivalent cu cea din Java. Aici trebuie
poate fi utilizat una dintre urmtoarele construcii:
definite att metodele instanei, ct i metodele clasei (metoNSNumber *num = [[NSNumber alloc] initWithUnsigneddele statice din Java). O posibilitate pe care eu o consider util
Int: 7];
este aceea a declarrii cmpurilor n interfa. Dac aceste
sau
variabile sunt marcate cu identificatorul @property atunci vor
www.todaysoftmag.ro | nr. 29/noiembrie, 2014

41

programare
Java vs. Objective-C
fi generate automat metode getter i setter, n funcie de parametrii specificai. n Java, o astfel de abordare este posibil cu
ajutorul framework-ului Lombok, ns acesta necesit un compilator special;


#import <Foundation/Foundation.h>
@interface MSGFraction : NSObject
@property (nonatomic) int numerator;
@property (nonatomic) int denominator;
-(void) setNumerator:(int) numerator

andDenominator:(int) denominator;
@end

componenta privat a unei clase cuprinde implementarea


propriu-zis a metodelor declarate n interfa.

Echivalentul unei interfee din Java este denumit n
Objective-C protocol i se definete cu ajutorul identificatorului
@protocol. Un lucru merit ns amintit n cazul protocoalelor din
Objective-C: se realizeaz distincia ntre metodele ce vor trebui
implementate n mod obligatoriu ntr-o clas ce se conformeaz
unui protocol i metodele opionale (definite prin intermediul
identificatorilor @required, respectiv @optional). O utilitate
major a acestei posibiliti oferite de Objective-C se regsete
n cadrul Design Pattern-ului Delegate, acesta fiind un pattern de
baz n dezvoltarea iOS. Cel mai adesea, pentru a oferi posibilitatea ca o clas s nu implementeze o anumit metod, n Java este
folosit un adapter, adic o clas ce ofer o implementare standard
pentru toate metodele dintr-o interfa. n exemplul de mai jos a
fost definit un adapter pentru MouseListener. Ulterior, n proiect,
va fi utilizat aceast nou clas i vor fi suprascrise doar metodele de care este nevoie, cel mai adesea, doar mouseClicked.

metod) ofer o mai bun consisten i lizibilitate a codului;


au acces la variabilele de context definite anterior. Astfel
nu este nevoie ca aceste variabile s fie trimise ca parametri
pentru o metod;
sunt optimizate pentru execuia n paralel;
execuia unui bloc e mult mai rapid dect cea a unei
metode (nu este nevoie de lookup).

Cum aceste structuri de cod sunt foarte des utilizate n framework-ul Cocoa Touch, au fost incluse i n cadrul unui Design
Pattern: Completion Handler. n acest context blocurile sunt utilizate asemeni unei funcii callback: la terminarea unei aciuni va
fi apelat un bloc.
Voi realiza n cele ce urmeaz o analiz a claselor specifice
coleciilor de date din Objective-C i Java. n Objective-C, fiecare
clas destinat stocrii datelor are dou variante:
immutable coninutul unui obiect este stabilit la
instaniere i nu poate fi modificat apoi;
mutable extinde tipul immutable i conine metode pentru modificare/adugare/tergere;
Cu ajutorul unor metode utile obinerea unui obiect mutable
dintr-unul immutable (sau invers) se realizeaz foarte uor:

NSArray *immutableArray = @{A, B, C};

NSMutableArray *mutableArray = [[NSMutableArray alloc] init];

[mutableArray addObjectsFromArray: immutableArray];

Folosirea unor obiecte immutable are o utilitate foarte


important n programare, printre avantajele acestei abordri

numrndu-se:
public class MouseListenerAdapter implements
stocare eficient n memorie, ntruct nu va fi alocat mai
MouseListener{
public void mouseClicked(MouseEvent e){}
mult
spaiu dect este necesar;
public void mouseEntered(MouseEvent e){}

la
trimiterea unui obiect ca parametru pentru o metod
public void mouseExited(MouseEvent e){}
public void mousePressed(MouseEvent e){}
putem
fi siguri c acesta nu va fi modificat;
public void mouseReleased(MouseEvent e){}

cea
mai eficient metod de implementare a unui meca}
nism
thread-safe
este folosind obiecte immutable.
Dac n Java de-abia n ultima versiune au fost introduse
expresiile lambda, corespondentul din Objective-C, denumit
n Java nu exist astfel de colecii. Singura posibilitate este
bloc, poate fi utilizat ncepnd cu versiunea 4 a iOS. Un bloc este
o structur de cod manipulat asemeni unei funcii C, ce este utilizarea java.util.Collections pentru a crea un wrapper al unei
folosit cel mai adesea pentru apeluri de tip callback. Un bloc colecii trimise ca parametru. Colecia returnat va arunca o
reprezint de fapt un pointer la o funcie C. Blocurile cuprind excepie n cazul n care se apeleaz o metod de modificare a liscod nativ C, fiind gestionate de un compilator extins pentru a tei (de exemplu, add()). Dar, dac este modificat colecia iniial,
recunoate astfel de structuri, iar Apple chiar militeaz pentru aceste modificri vor fi resimite i n cea wrapper, ntruct reine
doar o referin la cealalt. n acest moment ar fi foarte dificil
acceptarea n specificaia standard de C a blocurilor.

adugarea unei astfel de posibiliti n Java: ar implica modificaint multiplier = 7;
rea ntregului framework de colecii sau crearea unuia nou.
int (^myBlock)(int) = ^(int num){ return
num*multiplier; };
O problem important n cazul oricrui limbaj de progra...
mare
o reprezint posibilitile pe care acesta le pune la dispoziie
myBlock(5);
pentru
gestionarea memoriei. Chiar dac pentru a lucra n iOS
Asemeni unei funcii, un bloc poate primi parametri. n
plus , are acces la variabilele anterior definite n cod, dar nu le nu mai este necesar nelegerea tuturor conceptelor prezentate
poate modifica. Acesta realizeaz practic un snapshot cu valorile n aceast parte, o analiz mai profund ne va ajuta s nelegem
din momentul declarrii i dac dup declararea blocului acea mecanismele utilizate pentru gestionarea memoriei n iOS.
variabil a fost modificat, va fi nregistrat totui valoarea din Fiecare obiect din Objective-C conine un cmp (denumit refemomentul declarrii. Dac la definirea unei variabile se utilizeaz rence count) ce pstreaz numrul de referine active ctre acesta.
identificatorul __block , atunci acea variabil poate fi i modificat Apelul metodei retain determin incrementarea acestui numr i
n interiorul unui bloc. Sunt apelate exact ca o funcie C i pot fi returnarea unei referine la obiect. Cnd nu mai este nevoie de
asignate unei variabile pot fi apelate metode specifice ale obiec- un obiect se apeleaz release, ceea ce determin decrementarea
reference count. Atunci cnd counter-ul a ajuns la zero, se apeleaz
telor precum: copy, retain, etc. .
imediat metoda dealloc, echivalent a metodei finalize() din Java,
Dintre avantajele utilizrii blocurilor menionm:
sunt definite acolo unde este nevoie de ele, chiar i n inte- cu deosebirea c dealloc va fi cu siguran apelat i putem deterriorul unei metode (nu mai este nevoie s fie definit o nou mina chiar i momentul. Cu alte cuvinte, vom ti nc din timpul

42

nr. 29/noiembrie, 2014 | www.todaysoftmag.ro

TODAY SOFTWARE MAGAZINE


compilrii ct timp va exista un obiect.

ncepnd cu iOS 5 a fost introdus un sistem de management al memoriei
denumit Automatic Reference Counting
(ARC). Logica utilizat este identic cu cea
anterior prezentat, cu deosebirea c nu
mai intr n atribuiile programatorului.
Compilatorul este echipat cu un analizor
al codului surs pentru a determina unde
ncepe folosirea unui obiect, precum i
cnd acest obiect nu mai este utilizat. Altfel
spus, apelul metodelor retain i release va fi
realizat automat.

Putem vedea astfel cum o constrngere a mediului (resursele limitate ale
mediului mobil) poate conduce la gsirea
unei soluii mai eficiente. Iniial, pentru
OS era utilizat un Garbage Collector (GC).
ncepnd cu OS X 10.8 (Mountain Lion)
aceast abordare este deprecated, optnduse i n acest caz pentru utilizarea ARC.

Principalul avantaj al ARC este
dat de identificarea rapid i eficient, nc
de la compilare, a garbage-ului. n acest
fel nu este nevoie ca un proces adiional,
consumator de resurse, s ruleze constant
pentru identificarea resurselor ce pot fi
reutilizate. Exist i cteva dezavantaje
importante ale ARC, care nu cred ns, c
pot nclina balana n favoarea GC:
pentru fiecare obiect va fi stocat
un cmp suplimentar, crescnd astfel
spaiul de memorie cu cel puin un byte
per obiect;
asignarea i eliminarea referinei
unui obiect aduc o problem de
performan datorit nevoii de a realiza
o operaie suplimentar;
cea mai important problem este
detectarea retain cycle (atunci cnd
dou obiecte se refereniaz reciproc,
dar nu sunt refereniate i din alt parte
a codului). Pentru a rezolva aceast

problem au fost introduse dou tipuri


de referine: strong i weak. O referin
strong determin incrementarea counter-ului intern, pe cnd una weak, nu.
Dac nu exist nicio referin strong la
un obiect, acesta este considerat garbage. n Java nu exist aceast problem.
GC determin practic referinele active,
cele la care se poate ajunge pornind de
la rdcina heap-ului. Toate celelalte
obiecte vor fi eliminate din heap.
Am vzut aadar c n Objective-C
clasa wrapper a tipurilor primitive implementeaz Design Pattern-ul Abstract
Factory i c lipsa auto-(un)boxing nu trebuie neaprat privit ca un impediment.
Am putut observa, de asemenea, faptul c
framework-ul de colecii din Objective-C
este mai rafinat dect cel din Java. Pe de
alt parte, n Objective-C nu exist tipuri
generice (dei, ar argumenta unii, implementarea din Java este la rndul ei una
problematic). n final, am realizat o
comparaie a modalitilor de gestionare
a memoriei n cele dou limbaje de programare, concluzionnd c la acest capitol,
Objective-C propune o metod mai simpl
i mai eficient dect GC.

Bogdan-Alexandru Vldu
Bogdan-Alexandru.Vladut@
msg-systems.com
Java Developer
@ msg systems Romnia

www.todaysoftmag.ro | nr. 29/noiembrie, 2014

43

testare

management

Eliminarea diferenelor dintre business i tehnologie n


zona testrii automate

na dintre cele mai mari provocri ale echipelor Agile este o planificare a activitilor de testare care s respecte urmtoarele
condiii:
Echipa testeaz exact ce Produc Owner-ul a menionat n criteriile de acceptan.
ine pasul cu specificaiile care se schimb continuu.
Preconizeaz un nivel ridicat de acoperire (coverage) a criteriilor de acceptan prin aplicarea testelor automate i gsete
echilibrul dintre efortul investit n testare (att manual ct i automat) i importana/impactul/riscul scenariului care este testat.
Testarea automat rezolv a doua parte, prin crearea unui set repetabil de teste care evolueaz continuu i care poate fi executat n
orice moment pentru a ne asigura c funcionalitatea existent nu a fost afectat de adugarea de funcionaliti noi.

BDD (Behavioral Driven


Development) rezolv prima parte prin
crearea unui limbaj comun ntre Product
Owner i echip oferindu-i Product Ownerului o vizibilitate ct mai bun i o mapare
ct mai curat ntre criteriile de acceptan
i scenariile given-when-then, care mai
departe pot fi testate automat sau manual.
Pentru a rezolva ns a treia parte
avem nevoie de ceva care s prezinte clar
Product Owner-ului ntr-un mod non-tehnic i foarte uor de neles care scenarii
de testare sunt automatizate, ajutndu-l
astfel s poat lua decizii bazate pe risc pe
partea de testare i s decid mpreun cu
echipa ce merit a fi automatizat. Aceasta
permite n acelai timp o mai bun aliniere
pe testele de regresie i optimizeaz modul
n care Product Owner-ul nelege pachetele de regresie ajutndu-l spre exemplu s
reduc lungimea fazei de UAT.

given-when-then (GWTs). Aceste GWTs se


regsesc n JIRA (aplicaia pe care o folosim pentru Agile Project Management)
ntr-un task de testare legat de story.
Fiecare GWT are un id. Convenia este ca
acest id s identifice n mod unic un scenariu GWT dintr-un story. n cadrul testelor
de Selenium vom marca scenariile acoperite de acel test folosind o adnotare Java
numit @Covers.
Spider va genera un raport precum cel
de mai jos:

Ce?

Spider este o aplicaie pe care am scriso pentru a rezolva aceast a treia parte.
Creeaz un raport al testelor automate cu
o mapare clar ntre scenariile de testare
scrise n format BDD i testele automate
efective. Folosind acest raport, Product
Owner-ul poate decide mai departe dac
vrea s ridice nivelul de acoperire al testelor automate n ariile de business mai
Raportul generat va prezenta grafic
riscante, s trag un semnal de alarm
dac user story-uri cu impact sczut sunt ct de mult dintr-un user story este acoperit de testele de Selenium. Partea verde
tratate cu o importan prea mare.
va spune valoare exact a procentului de
acoperire (lungimea total a unei bare
Cum?
Spider se bazeaz pe convenii. reprezint numrul total de story points).
Cr iter iile de accept an din User Partea albastr nu are o conotaie negaStories sunt transformate n scenarii tiv (motiv pentru care nu am ales roul).

44

nr. 29/noiembrie, 2014 | www.todaysoftmag.ro

Spune doar ca Product Onwer-ul este confortabil cu faptul c anumite scenarii nu


vor fi automatizate.
Spider va calcula i acoperirea la nivel
de sprint folosind o medie ponderat n
raport cu numrul de story points, lund
n considerare doar User Story-urile cu
valoare funcional, nu i pe cele pur tehnice. Spre exemplu, dac avem:
1 story de 5SP i o acoperire de 50%,
1 story de 2SP i o acoperire de
100%,
1 story de 8SP i o acoperire de 60%,
Media ponderat va fi:
(5*50+2*100+8*60)/(5+2+8)=62%

Raportul generat va conine i o pagin


cu maparea detaliat dintre GWT id i testul de Selenium care acoper acel scenariu.

Cnd?

Spider poate fi rulat n orice moment


pentru orice Sprint. Va considera doar
acele user stories care au scenariile GWT
deja create. Pentru a produce ns rezultate
relevante, recomandarea este s se ruleze
chiar la finalul Sprint-ului.

Unde?

Spider nu este nc o aplicaie open


source i momentan poate fi folosit doar
n cadrul Endava. Sunt planuri pentru a
transforma acest proiect ntr-unul open
source.
Mdlin Ilie

mdlin.ilie@endava.com
Cluj Java Discipline Lead
@ endava

sponsori

powered by

S-ar putea să vă placă și