You are on page 1of 46

Nr. 25 Iulie 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

Principii de design Agile


Scrum cu Programare Extrem

Folosirea JSON n PostgreSQL


Du-te (GO) i gsete instrumentul
Integrarea datelor ntre sisteme cu
Talend Open Studio
Securizarea Codului Opensource
via Analiza Static (II)
iOS 7 blur

Drive Your Community for Better,


alturi de tineri antreprenori clujeni
RICAP: drumul inovaiei de la
laborator ctre piee globale
ZenQ
Gogu i Btrnu lui Miu

6
Ecosistemul IT Clujean din
perspectiva startup-urilor
Ovidiu Man

10
RICAP: drumul inovaiei de la
laborator ctre piee globale
Silvia Ursu

11
ZenQ
Mihai Costea

12
Despre relevana
practicii studeneti
Andrei Kelemen

14
Drive Your Community
for Better, alturi de tineri
antreprenori clujeni

24
Du-te (GO) i
gsete instrumentul
Marius Ciotlos

26
Scrum cu
Programare Extrem
Alina Chereches

29
Principii de design Agile
Dumitria Munteanu

34
iOS 7
blur
Mihai Fischer

35
Integrarea datelor
ntre sisteme cu
Talend Open Studio

Paula Beudean

Dnu Chindri

17
IT-ul romnesc quo vadis

37
AOP i LinFu

Ovidiu Simionica

Radu Vunvulea

19
Java 8, nouti i mbuntiri
Silviu Dumitrescu

21
Suportul JSON n PostgreSQL
Raul Rene Lepsa

40
Securizarea codului Open source (II)
Raghudeep Kannavara

43
Gogu i Btrnu lui Miu
Florin Asavoaie

editorial

Ovidiu Man

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

ltima noutate local din Cluj este achiziionarea LiveRail de ctre Facebook.
Toate ziarele au publicat aceast informaie i sunt convins c deja muli dintre
cititorii revistei tiu detaliile despre aceast tranzacie. La ora apariiei acestei
tiri ncheiasem deja articolul despre ecosistemul de IT Clujean din perspectiva startupurilor pe care l-am ncheiat ntr-o not de optimism reinut. Principalul motiv era lipsa
unui succes real, ce ar fi putut fi dat ca un exemplu. Acum ns, descoperind LiveRail ca
o companie a crei valoare a fost confirmat prin achiziia de ctre Facebook, lucrurile
stau mult mai bine, cel puin pe hrtie.
Rmnem tot n zona promovrii IT-ului romnesc i mi face plcere s v spun
n premier despre o a doua ediie a IT Days, www.itdays.ro, 3-4 decembrie 2014. Un
eveniment organizat de ctre Today Software Magazine i care pune pe scen cei mai buni
specialiti locali din zona IT-ului. Vom avea dou seciuni dedicate prezentrilor tehnice,
una dedicat trendurilor i una pentru startup-uri i proiecte universitare. Primii invitai
care au acceptat s ni se alture sunt: Bogdan Iordache - organizator How To Web i cofondator TechHub Bucharest, Josef Dunne - co-fondator Babelverse i Silviu Dumitrescu
- specialist Java i Line Manager Accesa. Lista este doar la nceput i vom reveni cu detalii.
Deoarece este vacan, am pregtit pentru cititorii notri un concurs alturi de Honda
Cluj. Este vorba de posibilitatea de a ctiga pe durata unui week-end o main pentru o
drumeie plus un plin de benzin. Extragerea ctigtorului va avea loc la evenimentul
de lansare a numrului 25 TSM.
n acest numr vei gsi o serie de articole despre startup-uri. Ecosistemul IT clujean
din perspectiva startup-urilor v prezint elementele principale implicate n suportul ideilor inovative precum i o list a celor mai promitoare startup-uri. ZenQ, un nou startup
v propune o nou modalitate de a mulumi prietenilor. Programul RICAP invit startupurile la un program de coaching, iar Fundaia Danis prezint realizrile programului de
educaie financiar pentru tinerii antreprenori Drive your community for better. Studenii
sunt n prim plan, iar Cluj IT Cluster propune o structurare a practicii universitare n
Despre relevana practicii studeneti.
Trecem n revist articolele tehnice din acest numr: Java 8, nouti i mbuntiri
prezint o parte din noile schimbri din Java 8 care ne vor schimba modul n care scriem
cod Java. Suportul JSON n Postgress descrie abordarea inedit adugat n ultima versiune de Postgress. Principii de design Agile v supune ateniei o serie de design pattern-uri
care s se poat adapta arhitectura claselor la principiile Agile.
V dorim o lectur plcut !!!

Ovidiu Man

Fondator al Today Software Magazine

nr. 25/Iulie, 2014 | www.todaysoftmag.ro

Redacia Today Software Magazine


Fondator / Editor n chief: Ovidiu Man
ovidiu.matan@todaysoftmag.com
Editor (startups i interviuri): Marius Mornea
marius.mornea@todaysoftmag.com
Graphic designer: Dan Hdru
dan.hadarau@todaysoftmag.com

Lista autorilor
Silviu Dumitrescu

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

Raul Rene Lepsa


raul.lepsa@3pillarglobal.com
Java Devolper
@ 3Pillar Global

Radu Vunvulea

Marius Ciotlos

Senior Software Engineer


@iQuest

Delivery Manager
@ Betfair

Alina Chereches

Andrei Kelemen

Senior Software Developer


& Scrum Master
@ Yardi

Director executiv
@ IT Cluster

Dnu Chindri

Mihai Fischer

Java Developer
@ Electrobit Automotive

iOS developer
@ Dens.io

Mihai Costea
mihai.costea@gmail.com

Simona Bonghez, Ph.D.

iOS Developer
@ Zenq

Speaker, trainer and consultant


in project management,

Radu.Vunvulea@iquestgroup.com

marius.ciotlos@betfair.com

Copyright/Corector: Emilia Toma


emilia.toma@todaysoftmag.com
Traductor: Roxana Elena
roxana.elena@todaysoftmag.com
Reviewer: Tavi Bolog
tavi.bolog@todaysoftmag.com
Reviewer: Adrian Lupei
adrian.lupei@todaysoftmag.com

alina.chereche@yardi.com

danut.chindris@elektrobit.com

andrei.kelemen@clujit.ro

mihai.fischer@gmail.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

simona.bonghez@confucius.ro

Owner of Colors in Projects

Paula Beudean

paula.beudean@fundatiadanis.ro
Coordonator Proiecte
@ Fundaia Danis

Ovidiu Simionica

ovidiu.simionica@fortech.ro
Team Lead
@ Fortech

Raghudeep Kannavara

Silvia Ursu

Security Researcher, Software


and Services Group
@Intel USA

Communications Coordinator
@RICAP

raghudeep.kannavara@intel.com

silvia.ursu@cridl.org

Ovidiu Man

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

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. 25/Iulie, 2014

analiz

Ecosistemul IT Clujean din perspectiva startup-urilor

ermenul ecosistem din titlul este utilizat ca o metafor a contextului economic clujean care stabilete relaii strnse ntre
organisme precum comunitatea IT, universiti i sursele de finanare. Fiecare dintre acestea, comunitatea IT prin execuie,
universitatea prin cercetare, iar sursele locale de finanare prin susinerea primelor dou, sunt implicate n crearea unei reele
de interdependene i condiionri. Apariia startup-urilor n acest ecosistem este interpretat ca un instrument de msurare a inovaiei
i a culturii antreprenoriale.
Dei primii pai fcui n aceast direcie sunt relativ
timizi, importana acordat acestora i susinerea local sunt n
cretere. Multe dintre evenimentele locale din zona IT-ului au o
seciune dedicat startup-urilor: Cluj Innovation Days, IT Days,
Techsylvania. Acelai trend l regsim chiar i n cadrul unor evenimente cu caracter mai extins precum Cluj Business Days sau
TedX. Toate acestea arat importana acordat de comunitate
dezvoltrii unor produse locale, generarea acelui IP (Intellectual
Property) ce ofer local o mai bun stabilitate i un mare potenial
de dezvoltare. Pentru succesul unui startup ntr-o pia global
este nevoie ns de un ntreg ecosistem care s ajute creterea acestuia de la idee pn la implementare, vizibilitate i profit. Victor
Hwang a definit ntr-un mod foarte plastic imaginea de ansamblu. Industria clasic de outsourcing poate fi considerat o ferm
n care seminele plantate cresc foarte repede, au toate aceeai
dimensiune, excepiile sunt puine i n general nu reprezint un
lucru benefic. Alternativ, ntr-o pdure, seminele plantate dei au
o mic ans de supravieuire, pot ajunge nite copaci masivi, care
s existe pentru mult vreme. n acest mediu, este n regul s dai
gre, iar acest lucru duce la diversitate, n opoziie cu ferma unde
toate seminele trebuie s devin plante mature. n ambele exemple, ceea ce conteaz cel mai mult este solul n care aceste semine
cresc i care pentru noi reprezint ecosistemul. Dezvoltarea unor
produse noi nseamn comunicare, ncredere i mprtirea
experienelor acumulate.
Vom analiza n continuare principalii factori ce definesc ecosistemul de IT clujean.

ntr-o pia global: NTT Data ce a achiziionat EBS, Accenture a


cumprat Evoline, startup-ul Nok a fost luat de Intel sau Skobbler
achiziionat de Telenav.
Din perspectiva dezvoltrii personale, outsourcing-ul ofer
posibilitatea de a lucra la proiecte importante, precum i asimilarea unei pri din cultura clienilor, a modului acestora de lucru.
Din perspectiva mai general a corporaiilor, outsourcing-ul ofer
accesul la o parte din cultura celorlalte corporaii, comunicarea
ntre diferitele proiecte, dar i meeting-uri cu echipele din diferitele coluri ale lumii.
Dac acum zece ani, n Cluj exista doar simpl execuie, acum
avem de-a face cu un ownership din ce n ce mai extins. n general
arhitectura sistemelor se face acum local iar product manageri-i i
analitii de bussines sunt la mare cutare. Acest fapt nseamn i
mult ncredere i recunoatere a calitii software-ului dezvoltat
n Cluj, iar tendina este de a pune accent pe calitate n defavoarea costurilor. De altfel, costurile din ce n ce mai ridicate ce se
reflect i n salariile programatorilor reprezint i un impediment important n dezvoltarea startup-urilor. Totodat creeaz
acea comoditate aleas de majoritatea n detrimentul ncercrii de
dezvoltare a unor produse proprii.
Piaa de software local a ajuns la un prim nivel de maturitate. Exist deja angajai ce au cincisprezece ani de experien
n domeniu, dar ponderea acestora este relativ sczut. Piaa n
general este tnr fr s avem nc programatori cruni. Din
perspectiva recrutrii exist o btlie continu pentru atragerea
talentelor. Din pcate, sunt situaii n care persoane i-au dedicat
3-4 ani unui startup pentru a fi angajate. Aceasta poate fi o proComunitatea IT
blem, dar pe de alt parte asimilarea culturii unei companii i o
Este alctuit n majoritatea lor de companii de IT ce dezvolt mai bun nelegere a procesului de dezvoltare a produselor poate
produse de outsourcing. Exist cteva excepii locale, dintre care duce n civa ani spre crearea unui startup ctigtor.
a meniona dou aparinnd industriei jocurilor, Exosyphen i
Idea Studio dar i pe cele ale unor companii mari precum Arobs Universitile
sau Skobbler, acum devenit Telenav.
La cele dou universiti clujene, Babe-Bolyai i Universitatea
Un numr important de companii sunt i cele care sunt parte Tehnic sunt pregtii aproximativ 1000 de studeni pentru a
dintr-o companie internaional, au ownership pe produsele dez- deveni programatori. Numrul acestora este mic comparativ cu
voltate i exist o divizie local de R&D. Numrul acestora este n necesitiile pieei, iar acest lucru este observat prin numrul din
cretere i putem enumera cteva dintre ele precum: Betfair, Yardi, ce n ce mai mare de companii care i deschid sucursale n alte
Tora, HP, Ullink, SDL sau Gameloft.
orae. De asemenea, se construiesc programe alternative precum
O categorie interesant o reprezint companiile care activau pe 42.fr sau Ruby Girls.
piaa local i care au fost achiziionate i care se nglobeaz astfel
Importana universitilor i rolul lor n contextul dezvoltrii

nr. 25/Iulie, 2014 | www.todaysoftmag.ro

TODAY SOFTWARE MAGAZINE

startup-urilor locale este relativ sczut. ncercm prin evenimentul anual IT Days, www.itdays.ro i de asemenea prin revista
Today Software Magazine s promovm cunotiinele i proiectele
realizate de universiti. Acestea trebuie s se transforme ntr-un
motor al inovaiei i a ultimelor tehnologii, similar cu ceea ce face
Standford pentru Silicon Valley.

Investitorii

Proiecte sociale
O alternativ mai popular n special pentru companiile de
IT ce activeaz n zona outsourcing-ului i doresc orientarea ctre
produse o reprezint proiectele sociale. Astfel se realizeaz un proiect gratuit pentru comunitate. Un exemplu sugestiv este aplicaia
Statui de daci, care promoveaz lucrarea istoricului Leonard
Velcescu.
Pe plan local se poate profita de oportunitatea oferit anul viitor de Cluj, atunci cnd acesta va avea titlul de Capitala European
a Tineretului.
Realizarea unui astfel de proiect va nsemna un plus pentru
comunitate, dar i un mod simplu de a promova un brand i de a
trece prin provocrile dezvoltrii unui produs.

Investiiile principale realizate pn acum n zona startupurilor au fost reprezentate de ctre cele dou acceleratoare din
Bulgaria: Eleven i LAUNCHub. Cinci startup-uri locale au primit investiii de aproximativ 30,000 euro, dar din pcate toate au
fost nchise. Dintre nvmintele pe care le putem valorifica din
aceast abordare le semnalm pe acelea c banii acordai au fost
insuficieni pentru atingerea pragului de afacere profitabil, ideal Alte structuri
la un nivel internaional i pe acela c necesitile proiectelor nu
au fost acoperite n ceea ce privete partea de development, mar- Cluj IT Cluster
keting sau legal.
Este alctuit dintr-un grup de companii romneti, avnd
ca scop principal atragerea unor mari proiecte ce nu ar putea fi
Crowdsourcing
realizate de o singur companie. n acelai timp se realizeaz o
Reprezint o alternativ simpl de finanare. Cele dou plat- comunicare eficient ntre companiile implicate, crendu-se
forme locale, Cretem Idei i Multifinanare, nu reuit s atrag condiiile pentru o mai bun coordonare mai bun a aciunilor.
publicul larg ntr-o msur mare. Proiectele i sumele finanate Evenimentul anual organizat de ctre cluster, Cluj IT Innovation
astfel fiind la un nivel redus. Recent proiectul Multifinanare a rea- Days a adus mpreun companiile locale, reprezentani ai guverlizat o colaborare cu Universitatea Babe-Balyai prin crearea unui nului, ai Uniuni Europene precum i proiecte de cercetare. Recent,
portal pentru sprijinirea proiectelor academice.
revista Today Software Magazine mpreun cu Cluj IT Cluster am
organizat n Braov evenimentul: IT-ul Braovean: Oportuniti de
Angel investors
colaborare. Acesta s-a bucurat de un interes real din partea publiDac facem o paralel cu alte centre de dezvoltare, o parte din cului i intenionm s mai avem astfel de evenimente.
sumele cu care sunt finanate iniiativele locale vin de la cei ce au
realizat un exit. Putem s i enumerm astfel pe Phillip Kandal, StartupWeekend
unul dintre cei patru fondatori ai Skobbler, i pe Daniel Metz, cel
Este un eveniment dedicat 100% crerii startup-urilor. Dac
care a vndut compania EBS ctre NTT Data. Deocamdat cei doi nu ai participat pn acum la un astfel de eveniment, v sugerez
nu au anunat vreo investiie n zona de IT dar ne ateptm ca s o facei. Sunt acceptate doar ideile noi, iar echipele se formeaz
acest lucru s se ntmple n urmtorul an.
n jurul celor mai populare pitch-uri. Este un fenomen global i
multe startup-uri au luat natere n felul acesta. Ctigtorii din
Acceleratoare
ultimi trei ani sunt Mircea Vdan cu platforma UseTogether,
Gemini Solutions Foundry vine cu o abordare diferit. echipa Cloud Copy, iar ctigtoarea de anul acesta a fost o veche
Acceleratorul ofer tot ce este nevoie pentru a aduce startup-ul la colaboratoare a revistei, Antonia Onaca cu o idee ce ar trebui s
stadiul de MVP. Aceasta nseamn suport tehnic, mentorat, suport schimbe modul n care sunt evaluai angajaii.
legal, chiar i spaiu de lucru central n Bucureti, Cluj sau Iai.
Scopul acestui MVP este prezentarea startup-urilor unor mari Hackaton-ul Techsylvania
fonduri de investiii din SUA n vederea obinerii finanrii. n
Organizat n cadrul primei ediii a Techsylvania, acesta a pus
momentul de fa cutrile i selecia candidailor este n plin la dispoziia participanilor diverse dispozitive mobile precum
desfurare.
Google Glasses, Leap Motion, Sphero, Little Printer, Pebble i
www.todaysoftmag.ro | nr. 25/Iulie, 2014

analiz
Ecosistemul IT Clujean din perspectiva startup-urilor
multe altele. Rezultatul a fost spectaculos, miniproiectele realizate fiind cu adevrat interesante. Acestea au combinat folosirea
Google Glasses mpreun cu Leap Motion pentru realizarea unui
joc sau tastarea unui cod la bancomat prin monitorizarea micrii
ochilor. Probabil o combinaie de Startup Weekend i hackaton n
care sunt puse la dispoziie ultimele gadget-uri disponibile ar duce
la crearea unor startup-uri cu adevrat inovative.

Today Software Magazine i IT Days


Unul dintre scopurile declarate nc de la lansarea revistei a
fost sprijinirea startup-urilor. Revista Today Software Magazine
sprijin majoritatea iniiativelor din aceast zon i ajutm la promovarea acestora. De asemenea, prin evenimentul anual IT Days,
ce va avea loc n 3-4 decembrie anul acesta, vom aduce pe scen
cele mai importante startup-uri locale.

Concluzii

Fenomenul startup-urilor i orientarea companiilor ce


activeaz n zona outsourcing spre crearea de produse sunt n
continu cretere. Dei nu putem da un exemplu de succes real,
ne ateptm s putem face acest lucru n curnd. M bucur s
putem da un exemplu real, compania fondat de doi clujeni i un
american, LiveRail, a fost recent achiziionat de ctre Facebook.
Aceasta demonstreaz fr echivoc valoarea ecosistemului local
i a educaiei.
Sfatul pe care l dm celor ce vor s i creeze un startup este
s participe la ct de multe evenimente locale i internaionale,
relaiile personale fiind foarte importante la nceput de drum.
Este puin probabil c ideea ta va schimba lumea mine, dac nu
interacionezi cu mult lume.
Exist multe oportuniti, pe care le remarcm mai ales n
faptul c programatorii vor din ce n ce mai mult s i creeze produsele proprii, iar acceleratoarele locale ncep s i fac simit
prezena. Prin produsele dezvoltate n outsourcing sau parte dintro mare corporaie, s-a demonstrat faptul c tehnic putem realiza
orice, din pcate, din cauza confidenialitii, majoritatea dintre
ele nu pot fi fcute publice. Universitile devin din ce n ce mai
deschise n comunicarea cu specialitii ce nu sunt parte a lumii
academice i sperm s vedem n curnd mai multe cursuri despre
antreprenoriat i de ce nu, chiar un accelerator pentru studeni n
care practica i cercetarea se reunesc.

Startup-uri clujene

s comande mncare la birou sau acas. Marius Mocian, un


n continuare v propun o list de startup-uri locale ce merit susintor local a startup-urilor este parte din aceast echip.
s fie urmrite. Mulumesc lui Mircea Vdan i lui Marius Mornea
Evolso5 - un startup pornit de ctre Alin Stnescu i este acum
pentru realizarea acesteia. n numerele urmtoare vom reveni cu parte din programul de accelerare de la StartupYard.
un infografic.
Mira Rehub6 - unul dintre cele mai promitoare startup-uri
locale. Au realizat un sistem de recuperare a celor cu probleme
Squirrly1 - Este un plugin SEO de wordpress. Compania a fost locomotorii folosind senzorul Kinect.
nfiinat de ctre Florin Murean i se bucur deja de un numr
Mockups7 - implementez creearea de mockup-uri online
mare de clieni. De asemenea, este sprinjinit de ctre Phillip avnd o baz mare de useri online.
Kandal, co-fondator Skobbler.
HackaServer2 i CTF3653 - un vechi startup clujean condus de
Ovidiu Man
ovidiu.matan@todaysoftmag.com
ctre Marius Corci i Marius Chi. Acesta se adreseaz hackerilor ce doresc o provocare legal i administratorilor de sisteme ce
Editor-in-chief
doresc o mbuntire a securitii printr-o testarea real.
Today Software Magazine
4
HipMenu - este o aplicaie ce se adreseaz celor ce vor
1 http://www.squirrly.co

5 http://www.evolso.com

2 http://hackaserver.com

6 http://www.mirarehab.com

3 http://ctf365.com

7 https://moqups.com

4 https://www.hipmenu.ro

nr. 25/Iulie, 2014 | www.todaysoftmag.ro

TODAY SOFTWARE MAGAZINE

www.todaysoftmag.ro | nr. 25/Iulie, 2014

eveniment

RICAP: drumul inovaiei de la laborator ctre piee globale

a nceputul lunii iunie, s-au lansat aplicaiile pentru cea de-a doua ediie a Programului de Asisten n Comercializarea Inovrii
din Romnia (RICAP)!

RICAP a luat natere din dorina de


a oferi resurse inovatorilor din Romnia
pentru a iei pe piee internaionale cu produsele lor, fie c este vorba despre energie,
bio-tehnologii, agricultur, ICT sau orice
alt domeniu tehnologic. RICAP este astfel
primul program din Romnia care sprijin
inovatorii i antreprenorii cu tehnologii
inovatoare s le comercializeze pe piaa global, facilitnd drumul din laborator ctre
pia. n acest efort, programul se bazeaz
pe un parteneriat internaional cu unul
dintre cele mai importante institute din
SUA care sprijin comercializarea inovriiLarta Institute, pe legturile internaionale
i know-how-ul acestei reele, precum i pe
reeaua de mentori pe care o consolidm la
nivel local.
Cnd se vorbete despre problemele
business-urilor i startup-urilor, eu spun de
fiecare dat c i banii sunt o parte a problemei, dar cea mai important problem
este lipsa de know-how(...) Experiena pe
care am avut-o n programul RICAP a fost
n primul rnd o experien de coaching.
De-asta am i intrat, asta am cutat, un
mediu care s m ncurajeze s studiez eu,
dup programul pe care l voiam eu, dup
prioritile pe care consideram c le avem,
i s atacm problemele pas cu pas. Daniel
Homorodean, director Arxia, antreprenor
participant n program.
Aplicaiile se fac online, pn pe 31 iulie
2014, direct pe site-ul programului: www.
ricap.ro.

Ce s-a ntmplat pn acum?

Prima ediie a RICAP a avut loc n perioada ianuarie mai 2014. n acest timp, 15
inovatori au lucrat alturi de o echip dedicat de mentori i advisori extraordinari
ntr-un program de mentorat personalizat,

10

pentru a dezvolta i implementa instrumente de comercializare: strategii de


intrare pe pia, strategii de comercializare, prezentri pentru clieni. n funcie
de nivelul de dezvoltare al companiilor,
programul a facilitat peste 30 de legturi strategice cu posibili parteneri i
finanatori din SUA i din Europa, inclusiv membri ai Fortune 1000 din Industry
Advisory Board-ul Larta, partenerul american al programului. n plus, dou companii
au fost n Statele Unite unde au beneficiat
de aproximativ 15 ntlniri de business cu
posibili parteneri i finanatori.
Experiena a fost diferit pentru cei 15
participani.
Acest program se poate adapta la nevoile participanilor, oriunde v-ai afla n
spectrul de la pur om de tiin pn la om
de business. Alexandru Floare, SAIA i
Onco Predict, om de tiinta i antreprenor
participant la RICAP.

Piti, profesor, antreprenor, business angel


i neobosit susintor al ecosistemului inovrii i al start-up-urilor tech din Romnia,
pe Norina Boru, antreprenor i consultant
cu o vast experien n domeniul medical
din Romnia i la nivel internaional. De
asemenea i menionm pe Alex Mircea
Dasclu, un antrepenor i consultant cu
experien internaional, i pe Sanda
Foamete, education lead la Microsoft.
Mai multe despre mentori ct i despre
inovatorii care au participat la prima edie
RICAP, putei citi pe www.ricap.ro/blog.

Cine suntem

RICAP este rezultatul unui parteneriat ntre Centrul Romn pentru


Inovaie n Dezvoltare Local (CRIDL)
i Institutul Larta, localizat n Los
Angeles, SUA. Programul este finanat de
Romanian-American Foundation (RAF) i
implementat cu sprijinul GEA Strategy &
Consulting. RICAP construiete pe reeaua
internaional i expertiza acumulat
timp de 20 de ani de Larta Institute prin
susinerea a circa 9.700 de inovatori din 17
ri.

La nceputul lunii iunie, am lansat a


doua ediie RICAP, n cadrul creia am avut
evenimente i ntlniri n mai multe orae
ale rii. Am avut ocazia s cunoatem
inovatori pasionai i cu viziune care au Contact
dezvoltat produse incredibile.
www.ricap.ro | www.ricap.ro/blog |
ntlnirile cu toi aceti oameni i Facebook/LinkedIn: RICAP - Innovation
discuiile vibrante pe care le-am avut cu from lab to market | contact@ricap.ro
muli dintre ei ne-au validat c ceea ce
facem la RICAP le poate oferi un sprijin
real, att lor ct i utilizatorilor produselor
lor.
Un rol cheie n prima ediie RICAP
l-au avut, alturi de inovatorii selectai n
Silvia Ursu
silvia.ursu@cridl.org
program, mentorii romni care le-au fost
alturi i i-au sprijinit n definirea viziunii
Communications Coordinator
@RICAP
i strategiei de comercializare i nu numai.
I-am avut alturi de noi pe Andrei

nr. 25/Iulie, 2014 | www.todaysoftmag.ro

startups

TODAY SOFTWARE MAGAZINE

ZenQ Modul de a spune mulumesc i de a-i aprecia


prietenii i colegii extraordinari

oi credem c fiecare om n parte este extraordinar i ar trebui s aud acest lucru mai des. De aceea construim ZenQ: modul
de a spune mulumesc i de a-i aprecia prietenii i colegii extraordinari. Pe mobilul tu. n secunde.

nceput la Startup Weekend Cluj n martie drept un MVP


numai pentru iOS, proiectul a crescut rapid, cu aplicaiile iOS i
Android live n magazine din 7 mai.
Cum funcioneaz ZenQ? Imaginai-v cum ar fi s rsfoii
printre prietenii votri de pe facebook i s i aprobi, exact cum
faci pe Linkedin, dar de data asta pentru calitile lor (amuzant,
detept, creativ). Cineva i-a fcut ziua mai frumoas i vrei s faci
cunoscut acest lucru? Poi gsi acea persoan n aplicaie i i poi
lsa o nsemnare prin care i ari ct de nemaipomenit este. La

final, fiecare dintre noi dobndete un profil n care i poi descoperi punctele forte prin ochii prietenilor ti. Deci, n esen, ZenQ
nseamn rspndirea vibraiilor pozitive, distracie, bucurie.
Din spatele cortinei, ZenQ este acionat de un backend Django
care utilizeaz informaiile de login pe Facebook acumulate de
clieni pentru a obine prietenii utilizatorului de pe Facebook i
a-i oferi din nou clienilor la cerere. Lista trsturilor este de asemenea furnizat de serviciul backend, fcnd-o uor de actualizat
pe baza feed-back-ului de la utilizatori. Aceste informaii sunt apoi
folosite pentru a crea profilele utilizatorilor care acum arat o list
de trsturi cu care a fost nvestit un utilizator, ordonate dup
numrul de susintori.
Faa ZenQ o constituie clienii mobili: iOS i Android.
Interfaa utilizeaz o paradigm de navigare foarte simpl care
necesit maxim dou atingeri pentru a ajunge oricnd la orice
ecran. Totui, atenia se concentreaz n mare parte pe ecranul
ZenQify, care este primul ecran pe care l vede utilizatorul atunci
cnd deschide aplicaia. Mai mult, utilizatorul se poate ntoarce
uor la el dup ce a deschis alte ecrane, fcnd din acesta punctul central al aplicaiei. Utilizatorii pot de asemenea s susin
anumii prieteni, cutndu-i i accesndu-le profilul, unde pot
lsa i mesaje legate de trstura pentru care doresc s subscrie.

Procesul de dezvoltare al ZenQ este distractiv, iar feedback-ul


de la cteva sute de utilizatori beta a fost pozitiv pn acum. Acum
cteva zile am lansat noile versiuni pentru iOS i Android. De abia
ateptm s primim mai mult feedback i s aflm ce i-ar face pe
utilizatori mai fericii i mai implicai n aplicaie.
n primul rnd, noi credem c ZenQ poate ntri optimismul
i interaciunile pozitive din diverse comuniti, organizaii
i companii. Se ntmpl adesea ca, n aceste tipuri de mediu,
s ne concentrm att de mult pe ndeplinirea sarcinilor nct

relaiile s se ofileasc, iar acest lucru, pe termen lung, afecteaz


cu adevrat fora grupului. ntr-un al doilea scenariu, noi credem
c interaciunea uoar i distracia magic oferit de ZenQ le-ar
face plcere utilizatorilor i c se vor implica n acest joc social de
susinere a prietenilor lor.
V rugm s vizitai www.zenq.co pentru a obine aplicaia pe
smartphone-ul vostru i oferii-ne feed-back la adresa contact@
zenq.co. V mulumim mult!

Mihai Costea
mihai.costea@gmail.com
iOS Developer
@ Zenq

www.todaysoftmag.ro | nr. 25/Iulie, 2014

11

business

Despre relevana practicii studeneti

na dintre preocuprile constante ale Cluj IT Cluster este resursa uman din industrie. Este de notorietate faptul c IT-ul
clujean, nc n mod substanial bazat pe servicii de outsourcing, are nevoie constant de oameni ct mai bine pregtii i ct
mai numeroi.

Este de asemenea cunoscut faptul c


majoritatea companiilor de IT din oraul
nostru sunt n continu cutare de noi
talente. Dup datele existente vehiculate,
confirmate i de ctre membrii notri, vorbim de sute de locuri de munc vacante
i pentru care este dificil s se gseasc
candidaii potrivii. Este de asemenea
cunoscut faptul c salariile din industria IT
sunt ca medie mult peste nivelul naional
i c, ntr-o comparaie a puterii de cumprare, au devenit competitive i la nivel
global. Ca o parantez, remarc un fenomen
interesant de migraie a forei de munc,
dar care este n acelai timp paradoxal, un
fenomen pe care un CEO al uneia din companiile din Cluster l-a denumit reversed
outsourcing. Practic, din ce n ce mai
multe companii ncearc s suplineasc
penuria local de talente de pe piaa muncii
prin importul ei din alte ri i, surprinztor, nu dintre cele cu standard mai sczut
de via dect cel din Romnia.
Dar ct de cunoscute sunt toate acestea
de ctre cei pe care am dori s i vedem c
aleg o carier n IT? Le sunt i lor cunoscute aceste realiti? Sau, mai degrab,

12

trim cu impresia c realitile care ne sunt


nou apropiate (ca nivel de cunoatere sau
ca interes) sunt la fel de bine cunoscute i
de alii? Dup toate aparenele creionate
de situaia concret a nealinierii ofertei cu
o cerin cert a pieei muncii, realitile
acestea nu sunt cunoscute sau n cel mai
bun caz, sunt puin cunoscute. n aceast
situaie se nate ntrebarea fireasc de ce
anume se ntmpl acest lucru i care ar
fi mecanismele prin care putem interveni
pentru ca talentele de care avem nevoie s
fie i disponibile. Sunt mai multe rspunsuri att n ceea ce privete cauzele, ct i
pentru soluii, dar cum spaiul e limitat
am s m refer acum doar la felul n care
se organizeaz practica studeneasc n
Romnia, care, cel puin teoretic, ar trebui
s fie un instrument puternic de inserie pe
piaa muncii.
Planul de nvmnt prevede efectuarea obligatorie, contra unui numr de
credite, a unui stagiu de practic de specialitate care, de regul, este de 90 de ore.
Acestea pot fi distribuite de-a lungul a dou
semestre, fapt care se i ntmpl n realitate. Fragmentarea a unui numr extrem

nr. 25/Iulie, 2014 | www.todaysoftmag.ro

de puin de ore este, cel puin din punctul


meu de vedere, o greeal. Practic studentul nu are rgazul necesar pentru a nelege
i a trage concluziile referitoare la ceea ce
se ntmpl n compania / organizaia n
care a ajuns, dac acea instituie poate sau
nu s fie opiune real de carier. Mai mult
dect att, stagiul de practic este definit,
prin lege, ca o disciplin de sine stttoare!
Toate acestea m ndreapt spre o concluzie fireasc care spune multe despre felul n
care este de fapt perceput acest instrument.
Ca s fiu mai explicit am s aduc exemple din alte state europene. n Olanda, de
pild, programele de masterat prevd cel
puin un semestru, dac nu chiar un an
ntreg de practic studeneasc n domeniul de pregtire al persoanei respective. n
Germania, de exemplu, sunt implementate
programe speciale duale de tip vocaional
n care sunt mbinate stagiile de practic cu
cele teoretice, asigurndu-se astfel un corp
consistent de oameni bine pregtii pentru
ceea ce economia poate oferi. Exemplele
pot continua, desigur, i toate relev o
preocupare pentru realizarea i susinerea
unui mecanism ct mai eficient de inserie

TODAY SOFTWARE MAGAZINE

pe piaa muncii.
Cadrul n care evolum n Romnia
nu este, dup cum se poate constata, unul
foarte favorabil, dar acest lucru nu ne
descurajeaz. Ca parte a eforturilor de a
aduce n atenia tinerilor, dar nu numai, a
oportunitilor de carier i de via pe care
industria noastr le ofer, Cluj IT Cluster
a demarat un program prin care ncercm
s realizm acel nivel de cunoatere necesar
pentru o decizie informat asupra pregtirii
i dezvoltrii profesionale, mai ales n cazul
tinerilor care urmeaz studii superioare sau
intenioneaz s se nscrie la o unviersitate.
Programul este mai amplu, cuprinde mai
multe etape i niveluri de aciune, unele n
faz mai avansat de pregtire, altele nc
n faz de idee. Nu este nici locul i, probabil, nici momentul pentru a intra n detalii,
ns, un prim pas a fost deja fcut. Cluj IT
Cluster este partener ntr-un proiect cu
finanare nerambursabil european cu
Universitatea Babe-Bolyai prin care vom
facilita accesul la stagii de practic organizate cu precdere la companii i organizaii
membre ale Cluj IT Cluster pentru un
numr de 400 de studeni provenind de la
Facultile de Matematic i Informatic
i Facultile de tiine Economice i
Gestiunea Afacerilor (FSEGA). Proiectul
este intitulat Creterea oportunitilor
de ocupabilitate prin practic de success (PRACT-IT) i este cofinanat din
Fondul Social European prin Programul
Op erational S ec tor ial D ezvolt are a
Resurselor Umane 2007 2013.
Dincolo de declaraie de intenie i de
obiectivele seci ale unui proiect, aceast
iniiativ dorim s fie una prin care reuim
s facem mai bine neleas industria de IT,

deopotriv oportunitile pe care le ofer, participani vor reui s valorifice o ans


dar i rigorile cerute de angajatorii din acest real de carier. Aa cum arat industria de
domeniu. Acesta este i motivul pentru IT azi n Cluj, depinde doar de ei.
care designul proiectului a prevzut din
start includerea studenilor provenind de
la FSEGA, nu doar pe cei de la Matematic
i Informatic. Cu alte cuvinte am dorit s
mergem dincolo de profilul clasic al angajatului care provine de la o facultate de profil
unde industria este mai bine cunoscut i
s extindem astfel cercul de cunoatere i
n alte domenii de pregtire.
Proiectul urmrete n cele din urm
creterea att a relevanei studiilor i
competenelor dobndite n timpul stadiilor de nvare prin aprofundarea acestora
n cadrul unor stagii de practic aplicat ct i o inserie ct mai bun a celor
inclui n proiect pe piaa muncii. Creterea
oportunitilor de angajare va fi asigurat
complementar i n prealabil prin aciuni
de informare si consiliere profesional pentru un numr de 450 de studeni. Studenii
care vor participa la activitile proiectului
vor proveni de la specializrile: matematic, informatic, informatic economic,
statistic, marketing, afaceri internaionale,
economie general i contabilitate i vor fi
selectai, n baza unui proces transparent
pentru participare n proiect.
Proiectul are o durat de implementare
de 18 luni i a demarat la data de 5 mai
2014, iar activitatea efectiv cu studenii va
ncepe odat cu noul an universitar, adic
din octombrie 2014, mai nti cu selecia
Andrei Kelemen
lor, apoi parcurgerea etapei de consiliere
andrei.kelemen@clujit.ro
profesional i, n cele din urm, stagiile
de practic. Sperana este c vom reui
Director executiv
@ IT Cluster
s instituim un nou model de derulare
a acestor stagii de practic i c studenii

www.todaysoftmag.ro | nr. 25/Iulie, 2014

13

startups

Drive Your Community for Better, alturi de tineri


antreprenori clujeni

a final de iunie, Deutsche Welle publica o analiz economic artnd cum Germania e n continuare o ar cu dou economii,
din cauza diferenelor uriae de venit dintre Germania de Vest i Germania de Est (http://www.dw.de/mapping-differencesin-two-german-economies/a-17734799). Toate acestea s-au ntmplat, dup eforturi uriae fcute de guvernul federal, precum
transferul a aproape trei trilioane de euro dinspre Vest spre Est.
Banii s-au dus cel mai mult n infrastructur i nu n a porni motorul
dezvoltrii iniiativele antreprenoriale, spune profesorul Gerald Braun, de la
University of Rostock, citat n articol. Cu
alte cuvinte, antreprenoriatul face diferena iar Fundaia Danis pentru
Dezvoltare Managerial crede i promoveaz ideea c o comunitate puternic se
bazeaz pe afaceri profitabile i stabile.
Cel mai recent proiect al Fundaiei
Danis de educaie antreprenorial este
Drive Your Community for Better.
Proiectul sprijin tineri antreprenori
clujeni i, n acelai timp, mobilizeaz
comunitatea pentru recunoaterea rolului important pe care antreprenoriatul de
succes l joac n dezvoltarea economic a
unei societi. Astfel, proiectul este finanat
exclusiv de donatori individuali peste 100
de oameni, pn acum!

Educaie antreprenorial, dincolo de


clasicul plan de afaceri

Odat trecui de etapa esenial a planului de afaceri, antreprenorii trebuie s


nvee s i construiasc businessul pas
cu pas, atrgnd n visul lor investitori,
finanatori, parteneri i clieni. Drive
Your Community for Better ofer tinerilor antreprenori cunotine de baz de
educaie financiar i de economie comportamental, cunotine care contribuie la
dezvoltarea i stabilizarea financiar a firmelor aflate la nceput de drum. Proiectul
s-a nscut din nevoile pe care le au

14

tinerii antreprenori i care au


fost identificate de fundaie n
ultimii ani de activitate:
Prin proiectele noastre,
pn acum, am ajutat peste 200
de antreprenori aflai la nceput
de drum s i fac planuri de
afaceri temeinice, s i deschid
afacerile visate sau s participe
la schimburi de experien cu
antreprenori de succes. Din
interaciunile cu aceti antreprenori am vzut c cei mai
muli dintre ei au carene n
cunotine i competene n
domeniul educaiei financiare, mai precis n realizarea
planificrilor financiare, n
nelegerea principiilor de baz
de contabilitate i n obinerea
i gestionarea finanrilor.
(Cordelia Bdescu, Director
Executiv Fundaia Danis).
De asemenea, un studiu
Capital din 2013 arat c un
IMM din trei moare n primul
an de activitate (http://www.

capital.ro/un-imm-din-treimoare-in-primul-an-dela-infiintare-183199.html ).
Aproape 10% din firmele din
Romnia se nchid n primul an
de activitate i aproximativ 30%
dintre cele care rmn nfiinate

nr. 25/Iulie, 2014 | www.todaysoftmag.ro

TODAY SOFTWARE MAGAZINE


sunt inactive. Peste 75% dintre antreprenori au renunat la business pentru c nu
au avut suficiente resurse, ceea ce indic
slabe cunotine i competene de a atrage
finanri i a le gestiona n mod eficient.
Proiectul Drive Your Community for
Better rspunde acestor nevoi oferind
antreprenorilor care vor fi acceptai n
proiect ateliere de educaie financiar, organizate pe urmtoarele direcii: obinerea
de finanri (linii de finanare, atragere de
investitori) i planificarea i gestionarea
resurselor financiare (realizarea planului
financiar, calcularea pragului de rentabilitate, bugetare, folosirea cashflow-ului). De
asemenea, antreprenorii vor participa i la
un work-shop de economie comportamental, cu focus pe elemente de iraionalitate n
luarea deciziilor. Acesta este organizat probono de Danis Consulting. De asemenea,
o parte dintre antreprenorii participani la
proiect vor primi i resurse financiare pentru mici investiii de nceput de afacere.
Atelierele din cadrul proiectului vor avea
loc n a doua parte a lunii septembrie. Peste
var, are loc selecia celor mai motivai 15
tineri antreprenori.
n proiect vor fi acceptai antreprenori care acum sunt n faza de planificare
sau deschidere a unui business sau au
o experien n administrarea unei afaceri mai mic de trei ani. Selecia se
face pe baza completrii unei aplicaii
online i a unui interviu. Aplicaia poate
fi completat la urmtorul link: https://

Cele mai importante criterii de selecie


sunt nclinaia antreprenorial, motivaia
pentru participarea la proiect i planul concret de activiti pentru dezvoltarea afacerii
pentru urmtorul an. nscrierile se fac pn
la finalul lunii iulie. Detalii la: office@fundatiadanis.ro.

Astfel, pn atunci, sunt anse mari ca


numrul celor care susin proiectul Drive
Your Community for Better s creasc i
mai mult.

Proiect susinut exclusiv de donatori


individuali, oameni care cred n antreprenoriat

Drive Your Community for Better


este un proiect finanat n mod exclusiv de
donatori individuali, adic de oameni care
cred n valoarea i importana antreprenoriatului. Pn acum peste 100 de oameni
au ales s susin proiectul Fundaiei
Danis, prin dou iniiative de mobilizare
de resurse.
Una dintre iniiative este un eveniment de strngere de fonduri organizat de
Fundaia Danis n parteneriat cu Toyota
Cluj-Napoca i Tokyo Restaurant Japanese,
la finalul lunii mai. n cadrul acestui
eveniment de test drive asortat cu specialiti culinare japoneze, manageri i
antreprenori cu experien din Cluj au ales
s susin financiar proiectul Drive Your
Community for Better.
A doua iniiativ este nscrierea proiectului la Swimathon, un eveniment de
strngere de fonduri organizat de Fundaia
Comunitar Cluj. La Swimathon, proiectul e susinut de apte nottori, care
la rndul lor sunt sprijinii de prieteni,
docs.google.com/a/fundatiadanis.ro/ familie i cunotine, care contribuie
forms/d/1lyG9GmdKjNiDfm4DoZ5z_ financiar la dezvoltarea antreprenoriatului
i S m g B 7 _ e x x 5 q C n H 6 0 - Q 8 g E / clujean. Campania de strngere de fonduri
viewform.
a Swimathon-ului se ncheie la finalul verii.

Paula Beudean

paula.beudean@fundatiadanis.ro
Coordonator Proiecte
@ Fundaia Danis

www.todaysoftmag.ro | nr. 25/Iulie, 2014

15

comuniti

Comuniti IT

una iulie vine cu mai puine evenimente. V propunem Cluj Business Days i bineneles v ateptm n 22 iulie la lansarea
numului 25 TSM.

Transylvania Java User Group


Comunitate dedicat tehnologiilor Java.
Website: www.transylvania-jug.org
Data nfiinrii: 15.05.2008 / Nr. Membri: 582 / Nr. Evenimente: 44
Comunitatea TSM
Comunitate construit n jurul revistei Today Software Magazine.
Website: www.facebook.com/todaysoftmag
Data nfiinrii: 06.02.2012 /Nr. Membri: 1606/Nr. Evenimente: 20
Cluj Business Analysts
Comunitate dedicat analizei de business
Website: www.meetup.com/Business-Analysts-Cluj
Data nfiinrii: 10.07.2013 / Nr. Membri: 77 / Nr. Evenimente: 6
Cluj Mobile Developers
Comunitate dedicat tehnologiilor mobile
Website: www.meetup.com/Cluj-Mobile-Developers
Data nfiinrii: 05.08.2011 / Nr. Membri: 196 / Nr. Evenimente: 13
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: 433 / Nr. Evenimente: 76
Cluj Semantic WEB Meetup
Comunitate dedicat tehnologiilor semantice.
Website: www.meetup.com/Cluj-Semantic-WEB
Data nfiinrii: 08.05.2010 / Nr. Membri: 184/ Nr. Evenimente: 27
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: 244/ Nr. Evenimente: 14
Tabra de testare
Un proiect care i dorete s strng ct mai muli oameni care
lucreaz ca i testeri.
Website: tabaradetestare.ro
Data nfiinrii: 15.01.2012 / Nr. Membri: 323/ Nr. Evenimente: 31

16

nr. 25/Iulie, 2014 | www.todaysoftmag.ro

Calendar
Iulie 9-10 (Cluj)
Cluj Business Days - recomandarea TSM
businessdays.ro/Evenimente/Cluj-2014
Iulie 19 (Iai)
Iasi Inaugural MUG mongostat
meetup.com/Iasi-MongoDB-User-Group/events/191672362/
Iulie 14 (Cluj)
Personalized information discovery
meetup.com/Cluj-Semantic-WEB/events/186829692
Iulie 19-20 (Bucureti)
Startcelerate
bucharest.startcelerate.com
Iulie 22 (Cluj)
Lansarea numrului 25 a Today Software Magazine (Cluj)
www.todaysoftmag.ro
Iulie 23 (Cluj)
Requirements Engineering - Factor of successful projects
meetup.com/Business-Analysts-Cluj/events/192771622/
Iunie 28 (Cluj)
Mobile Monday Cluj #10
meetup.com/Cluj-Mobile-Developers/events/177046842/

programare

IT-ul romnesc quo vadis

nspirat de Ovidiu ua (ISDC) prin articolul su Ce este n neregul cu IT-ul din


Romnia? din ediia 23 a TSM, simt nevoia de a face un exerciiu de imaginaie (sau nu)
prin a picta o posibila direcie a viitorului IT-ului romnesc.

Ovidiu Simionica

ovidiu.simionica@fortech.ro
Team Lead
@ Fortech

Prerea care reiesea din articolul


menionat i pe care o mprtesc este aceea
c businessul de volum specific modelului
outsourcing a devenit dunator nsei pieei
pe care o adreseaz.
n rndurile urmtoare vom ncerca s
propunem moduri care ar putea schimba faa
software-ului romnesc.
Ca i n cazul unui chirurg, totul se reduce
la modul de execuie. mbinarea cunotinelor
cu tehnica de lucru trebuie s rezulte n
perfeciune.
Deci avem dou prti ale ecuaiei: pregtirea personalului i calitatea execuiei.
n domeniul pregtirii personalului
lucrurile stau mult mai bine dect acum 10
ani. Internetul abund de informaii, firmele
de atestare s-au maturizat i acum poi obine
validarea cunotinelor n practic orice aspect
al activitilor software (de la management la
framework-uri i limbaje de programare specifice, pn la aptitudini de testare validate
ISTQB). Singurul obstacol este modul de
aplicare n cadrul companiilor.
nvarea este parte din munca de la
birou i orice afacere care i propune s
fie pe pia i peste 30 de ani va nelege c,
dac n-a fcut-o deja, trebuie s i regndeasc strategia astfel nct s i permit o
investiie zilnic n training pe angajat cu tot

ce presupune aceasta (e.g. schimbarea formulelor de ofertare a proiectelor, achiziionarea


programelor de training etc.).
n ceea ce privete asigurarea calitii
produselor software consider c practicile
autohtone sunt deficitare. Folosirea departamentelor de testare n validarea calitii unui
produs software este greit neleas i aplicat.
Contrar convingerilor (care par generalizate)
ale organizatiilor care s-au grbit s-i promoveze pe site-urile proprii, spre exemplu,
alinierea la standardele ISO, producia de
software are foarte puine lucruri n comun
cu producia de lapte sau ou.
Alte mijloace sunt n schimb mult mai
potrivite i voi scrie despre acestea n continuare. Ele alctuiesc corpul acestui articol i
le consider absolut necesare cnd ne referim
la calitate.

Versioning tool

Versionarea codului surs n IT-ul romnesc a devenit de ceva vreme status quo,
n mare parte datorit dinamicii echipelor
de dezvoltare, dar i cerinelor clienilor.
Singurul sfat ar fi s nu rmnei n urm cu
tendinele, nu folosii CVS cnd la mod este
GIT.

www.todaysoftmag.ro | nr. 25/Iulie, 2014

17

programare
IT-ul romanesc quo vadis
Project documentation & issue tracking

Folosii tool-uri integrate i full-feature deoarece sunt att


de ieftine i aduc un aport enorm calitii. Clientul va avea prin
intermediul lor un acces i control de top asupra strii proiectului
i i va spori ncrederea n parteneriat.

Continuous integration

scrierea de unit teste, refactoring, etc.) cu prioritate codul care


are complexitate ridicat i coverage sczut.
Dependency analysis: nu permitei dependene circulare n
cod att la nivel de pachete, ct i la nivel de fiiere.

Code review

Aderai la principiile solide1 i tindei ctre simplitate atunci


Un must indiferent de limbajul de programare. Nu pot con- cnd inspectai codul.
cepe un proiect fr a ti starea codului n orice moment. Unelte ca
i Jenkins sunt indispensabile. La orice modificare adus codului Cum ne asigurm c IT-ul din Romnia nu o va lua pe drumul
vei fi ntiinai dac testele automate s-au executat cu succes i Indiei?
dac metricile de calitate sunt n limitele propuse. Combinat i cu
Dnd un exemplu n Cluj care s inspire restul comunitii.
scripturi de instalare, putei configura un sistem live unde clien- E nevoie de un cadru formal care s ofere greutate i care s fie o
tul poate accesa oricnd cea mai nou versiune a produsului. Am declaraie de anagajament ctre meninerea unui standard ridicat
lucrat n trecut n Germania la un client de renume (ce activa n de performan i profesionalism. Un astfel de cadru ar trebui s
industria de creare soluii software) care avea ca i unic moda- fie susinut de firmele de software autohtone. Sunt cunoscute deja
litate de a produce o versiune a produsului compilarea n IDE i diverse forme dintre care cel mai recent i promitor este clusterarhivarea manual. Nici urma de Gradle, Maven, Ant sau mcar ul Cluj IT (http://www.clujit.ro) i citez:
un bash script. Inutil s spun c o astfel de abordare nu poate fi
acceptabil cnd discutm despre calitate (chiar i cnd nu discuAbout us
tm despre calitate).
Cluj IT is a cluster association aiming to enhance the innovation
capabilities and competitiveness of the Romanian IT sector.

Testare automat

Nu exist motiv s nu folosim testare automat. i mai mult,


trebuie s fie de toate formele: unit testing, integration testing,
regression automation (e.g. selenium). Am auzit toate motivele
pentru a nu le face, ns nici unul ntemeiat. Recent mi s-a spus c
nu are rost s testm javascript-ul pentru c oricum e acoperit de
tastarea manual. Am insistat s fie testat automat. Argumentele
apoi s-au schimbat: e foarte dificil de testat... Dar dificil nu e un
argument.

Pare promitor i m determin s mi imaginez un grup de


programatori formnd o comisie comun de acreditare a calitii
proiectelor din fiecare firm partener la custer. Poate o idee
ambiioas, dar cu siguran cu un impact bun pe termen lung.
Atept preri de la cititori.

Metrici de calitate

Sunt foarte multe la alegere, unele mai simple analizeaz


conveniile de stil, altele merg pn la a msura complexitatea unui
bloc de cod. Construirea unui pachet de baz i aderarea la el face
parte din orice setup de proiect. Cele mai relevante sunt:
Code coverage: ca regul general pn n 74% e prea puin,
peste 85% este prea mult i n special acordai atene la conditional coverage.
Code complexity versus coverage matrix: atacai (prin

Young spirit
Mature organization
A shared vision
Join our journey!
www.fortech.ro

18

nr. 25/Iulie, 2014 | www.todaysoftmag.ro

1 http://en.wikipedia.org/wiki/SOLID_%28object-oriented_design%29

programare

programare

Java 8, nouti i mbuntiri

n numrul 23 al revistei Today Software Magazine am nceput o discuie despre ceea ce


aduce nou Java SE8. Aproape unanim, specialitii n Java susin c expresiile lambda,
ca topic general, dar i implicaiile produse de acestea, reprezint cele mai importante
feature-uri ale versiunii actuale. De aceea am considerat util ca primul articol s fie despre
acest topic.
Silviu Dumitrescu

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

Discuiile din acest articol sunt purtate


la un nivel de dificultate mai ridicat, pentru a permite evidenierea unor aspecte de
performan, productivitate i de reducere a
dimensiunii codului scris.
Pentru nceput revin la expresiile lambda.
Prin expresii lambda putem crea metode anonime. Uneori ns, expresiile lambda apeleaz
metode care au deja un nume.
Pentru a clarifica lucrurile revin la exemplul din articolul amintit la nceput. Avem o
clas Product cu dou atribute, name i price,
getter-i i setter-i. Voi mai aduga proiectului
nostru o clas POJO n care se afl diverse
metode de comparare, cu semnturi apropiate de ale metodei compare() din interfaa
Comparator:
public class ProductComparisons {
public int compareByName(
Product a, Product b) {
}

return a.getName().
compareTo(b.getName());

Aceast sintax este posibil pentru c


rezultatul expresiei lambda este o clas anotat @FunctionalInterface, n cazul nostru,
Comparator.
n locul folosirii expresiilor lambda,
Java SE8 ofer posibilitatea utilizrii referinelor de metode, prin intermediul
operatorului de domeniu ::. Sintaxa este astfel
mult simplificat.
Revin la exemplul nostru i aplic operatorul anterior. Sintaxa devine:
Arrays.sort(basket,
myComparison::compareByName);

Avem urmtoarele tipuri de referine:


La o metod a unui obiect (exemplul
anterior).
La o metod static (exemplul anterior
poate fi uor customizat).La o metod a
unui obiect arbitrar de un tip particular:
Arrays.sort(stringArray,
String::compareToIgnoreCase).

public int compareByPrice(


Product a, Product b) {
return a.getPrice() b.getPrice();
}
}

La un constructor:

n clasa de test vom crea dou obiecte


Product, p1 i p2, pe care le vom pune ntr-un
array:
Product[] basket = { p1, p2 };

Vom sorta array-ul folosind expresiile:


ProductComparisons myComparison =
new ProductComparisons();

Arrays.sort(basket,
(a,b)->myComparison.
compareByName(a, b));

Supplier<Product> s =
Product::new;

unde Supplier este din

java.util.function.Supplier;

Un alt subiect pe care vreau s vi-l supun


ateniei este legat de interfee. Interfeele
conineau, pn la aceast versiune, doar
semnturi de metode i constante. Java 8
propune o abordare care s mbuntesc

www.todaysoftmag.ro | nr. 25/Iulie, 2014

19

programare
Java 8, nouti i mbuntiri
utilizabilitatea interfeelor. Dac adaugm noi semnturi n API-urile folosite n discuiile anterioare.
interfaa atunci clasele ce o implementeaz ar trebui rescrise.
java.util.function, ce furnizeaz interfeele funcionale
Pentru a evita procesul rescrierii s-au introdus metodele default.
ce sunt returnate ca tip prin intermediul expresii lambda.
Pe lng semnturi i constante, interfeele vor conine astfel i
Interfeele funcionale reprezint concepte abstracte precum
implementri.
funciile, aciunile sau predicatele.
Voi da un exemplu simplu, care s evidenieze noile abordri:
java.util.stream, ce furnizeaz clase pentru operaii pe
stream-uri
de elemente. Stream-urile difer de colecii prin:
public interface MyInterface {

void myClassicMethod();
stream-ul nu este o structur de date, ci transform o
structur de date ntr-un pipeline de operaii.

default void myDefaultMethod() {
System.out.println(hello default!);
o operaie pe un stream produce o operaie, dar nu
}
modific
sursa.


static void myStaticMethod(){
Operaiile pe stream-uri sunt implementate lazy, ceea ce
System.out.println(hello static!);
nseamn c pot expune oportuniti de optimizare.
}
}
stream-urile sunt practic infinite. Exist i operaii
Respectiv clasa ce implementeaz interfaa:
de scurtcircuitare care s produc ieiri ntr-un timp finit
(limit(), findFirst())
public class MyClass implements MyInterface {

@Override
stream-urile sunt consumabile, adic elementele sunt

public void myClassicMethod() {
vizitate
o singur dat. Pentru o revizitare trebuie creat un
System.out.println(hello classic!);
alt stream.
}
toate clasele wrapper (Boolean, Integer, etc.) au fost mbu}
ntite cu metode care folosesc expresiile lambda i referine
Ca test avem:
de metode.
public static void main(String[] args) {
MyInterface mine = new MyClass();

mine.myClassicMethod();

mine.myDefaultMethod();
MyInterface.myStaticMethod();
}

Surprindem astfel cele trei comportamente:


C el predef init, c u calif icator ul public abstrac t
(myClassicMethod).
Cel cu implementare default.
Cel cu implementare static default.
Procesul de motenire are suport i pentru acest nou comportament. Altfel:
Metodele default care nu sunt menionate n interfaa derivat motenesc comportamentul default din interfaa de baz.
Metodele default redeclarate n interfaa derivat devin
abstracte.
Metodele default redefinite n interfaa derivat vor fi folosite suprascris.
Nu voi ncheia acest articol fr s descriu cteva dintre

20

nr. 25/Iulie, 2014 | www.todaysoftmag.ro

Discuiile despre Java SE8 vor continua i n ediiile viitoare ale


TSM. Pn atunci lectur plcut i o var frumoas!

management

programare

Suportul JSON n PostgreSQL

xist o nevoie crescnd incontestabil pentru flexibilitate i scalabilitate n ceea ce


privete datele, acesta fiind i motivul pentru care muli au apelat la baze de date
NoSQL pe durata ultimilor ani. Exist avantaje i dezavantaje n ceea ce privete folosirea lor, mai ales c acestea nu au fost destinate s nlocuiasc bazele de date relaionale.

Raul Rene Lepsa


raul.lepsa@3pillarglobal.com
Java Devolper
@ 3Pillar Global

Dezvoltatorii i arhitecii soft au deseori


dificulti n a alege una sau alta, n special
cnd formatul datelor ce urmeaz s fie folosite este necunoscut sau poate fi modificat
ulterior. O soluie de compromis este folosirea att a bazelor de date relaionale ct i a
celor non-relaionale i crearea unui sistem
de comunicare ntre ele. ns aceast soluie
poate ajunge s dea mai multe dureri de cap
i probleme dect dac s-ar folosi doar un sistem de baze de date.

De ce nu 2 n 1?

Companii precum IBM i Oracle au nceput s ofere metode prin care Sistemele de
Baze de Date Relaionale (RDBMS) i cele
non-relaionale s coexiste. PostgreSQL ofer
o alternativ prin tipuri de date speciale, cu
o structur mai liber i flexibil, care imit
comportamentul NoSQL ntr-un RDBMS.
ncepnd cu versiunea 8.3, PostgreSQL a
introdus tipul de date hstore, care este folositor pentru rnduri cu multe atribute care
sunt rar examinate i date semi-structurate.
Permite stocarea de perechi cheie-valoare
(similar cu unele NoSQL-uri), suport diferite
operaii i ofer funcii pentru manipularea
lor. n versiunea 9.2 a fost introdus tipul de
date JSON, cruia i s-au adus mbuntiri n

ceea ce privete performana n versiunea 9.3


beta. JSON (Javascript Object Notation) este
un format lightweight, lizibil i independent
de limbaj, pe care Postgres l stocheaz sub
form de text.

De ce l-ai lua n considerare?

Aproape toi dezvoltatorii au sau au avut


de-a face cu cerine schimbtoare din partea
clienilor i au simit nevoia de flexibilitate
din partea sistemului de stocare a datelor n
special cnd vine vorba de aplicaii cu clieni
multipli. n acelai timp, clienii simt deseori
nevoia de cmpuri personalizate i cer flexibilitate. Dar ce e de fcut cnd unii clieni vor
un cmp particular i alii vor patru, pentru
aceeai funcionalitate? Sunt sigur c majoritatea ai vzut coloane precum customField1,
customField2, customField3, anotherCustomField, .a.m.d. Acestea pot fi evitate folosind
un tablou (array), dar ce facem cnd avem
de stocat perechi? Sau triplete? Dac cmpul
particular are att o etichet ct i o valoare?
Sau chiar o dat asociat? Lucrurile devin
mai complicate.
O alt problem general o reprezint
tratarea numelor. Exist o list de 40 de
neadevruri despre nume1, i doar ca s v
1

Patrick McKenzie, Falsehoods Programmers Believe

www.todaysoftmag.ro | nr. 25/Iulie, 2014

21

programare
Suportul JSON n PostgreSQL
facei o idee, am enumerat cteva pe care
dezvoltatorii n general omit s le ia n
calcul:
numele oamenilor pot conine
numere;
oamenii pot avea un numr nedefinit
de nume;
oamenii pot s nu aib un prenume
sau nume de familie;
oamenii pot avea mai mult de un
nume canonic complet;
numele nu sunt neaprat n ASCII i
nu sunt neaprat scrise ntr-un singur set
de caractere;
oamenii pot s nu aib nume.

este dependent de aplicaie i de clienii


int ai acesteia, dar reprezentarea de mai
sus ofer mult flexibilitate n comparaie
cu modul clasic de stocare a numelor din
cadrul bazelor de date relaionale. Avnd
rar nevoie de accesarea tuturor numelor,
putem vedea utilitatea acestui tip de reprezentare. De ce am crea o coloan pentru
numele mamei cnd avem rareori nevoie
de el? De ce s-ar crea o coloan pentru
porecl sau nume de alint cnd unele
entiti ar putea avea mai mult de unul
singur? Aceeai logic poate fi aplicat i
celorlalte nume.

Desigur, probabil nu avem de a face


cu multe din aceste cazuri, dar nu poi fi
niciodat sigur c sistemul nu va trebui
pe viitor s suporte nume chinezeti. Un
mod tradiional de a stoca nume este o
combinaie de prenume, nume de familie i eventual al doilea prenume care este
opional. ns dac o persoan nu are
prenume sau nume de familie, aceast
implementare devine eronat.
O posibil cale de a rezolva aceast problem este prin folosirea unui JSON:

Cu toate c lista complet de funcii i


operatori poate fi gsit n documentaia
celor de la Postgres, este important de
menionat c un obiect JSON e accesat
folosind operatorul -> (poate fi returnat
i ca text folosind operatorul ->>). De
exemplu, pentru o coloan nume, accesarea numelui de familie s-ar face folosind:
names->>last_name. Operatorul prezentat
anterior poate fi folosit i pentru accesarea
unui element aflat la o anumit poziie
ntr-un tablou: (names->nicknames)->0
ar ntoarce primul obiect din tabloul nicknames din cadrul coloanei.
Pe lng operatori, ncepnd cu versiunea 9.3 au fost adugate i multiple funcii,
pentru a ajuta dezvoltatorii n folosirea
acestui tip de coloan, precum funcii pentru extragerea obiectelor dintr-un tablou
de JSON, pentru transformarea unui rnd
ntr-un obiect JSON, pentru expandarea
unui JSON ntr-un set de perechi cheievaloare sau pentru conversia oricrui
element ntr-un obiect JSON.

first_name : Ronaldo,
mother_name: de Assis,
last_name : Moreira,
nicknames :[Ronaldinho,

Gacho]
}

Implementarea de mai sus poate aduga


munc n plus prin schimbarea cmpului
de full_name de fiecare dat cnd unul din
restul cmpurilor este schimbat, dar acesta
este doar un exemplu. n general, soluia

Funcii i Operatori

About Names, Kalzumeus Blog, Iunie 2010

Avantajele tipului de coloan JSON

Primul avantaj ale acestui tip de


coloan este caracterul de format open
standard, fiind independent de limbaj. n
al doilea rnd, faciliteaz tratarea cerinelor
schimbtoare ale clienilor prin scalabilitate i flexibilitate. Devine folositor cnd
e nevoie de stocarea grafurilor de obiecte
multi-nivel, deoarece ofer performan
ridicat i codul n sine este mai uor de
scris i de meninut dect n implementrile obinuite de grafe. Coloana JSON nu
ocup mult spaiu (e stocat ca i text) i
permite stocarea de pn la 1 GB de date
ntr-o singur coloan. n plus, previne
SQL injection n mod implicit, deoarece
obiectele JSON sunt validate nainte de a fi
persistate.
Cheile strine pot fi evitate prin denormalizarea datelor i cmpurile din cadrul
interogrilor complexe pot fi accesate fr
s fie nevoie de join cu alte tabele (posibil
mari), oferind astfel un comportament
similar cu NoSQL-uri ntr-un sistem de
baze de date relaional.
Se poate dovedi a fi un plus n aplicaiile
web, facilitnd transportul i conversia
datelor de pe client ctre controller-e, i
apoi ctre nivelul de acces la date, stocnd
obiectele JSON venite dinspre client.
Aceste tipuri de date pot fi indexate, iar
n plus indeci pot fi creai n cadrul obiectelor JSON (de exemplu, pentru tablouri
din cadrul unui JSON). Indecii cureni
suportai att de hstore ct i de coloanele
JSON sunt aproape la fel de performani ca
i cei ai tipurilor de date standard. Dar se
lucreaz la noua generaie de indeci GIN2.
2

Alexander Korotkov, Oleg Bartunov, Next

Generation of GIN, PostgreSQL Conference Europe 2013, Dublin

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

22

nr. 25/Iulie, 2014 | www.todaysoftmag.ro

Product
Development

Product
Support

TODAY SOFTWARE MAGAZINE


Acetia au fost deja implementai pentru hstore n versiunea n
curs de dezvoltare 9.4. Comparaiile de performan cu MongoDB
arat c dei scanarea secvenial este aproape la fel la nivel de
performan, scanarea de indeci este mai rapid dect n Mongo.
Aceti indeci vor fi cel mai probabil aplicai i tipului de date
JSON ncepnd cu versiunea 9.4.

Dezavantaje

Cel mai mare dezavantaj al tipului de date JSON este faptul


c nu e portabil, fiind momentan suportat doar n PostgreSQL.
Alte dezavantaje includ imposibilitatea de a aduga chei strine
i sintaxa ciudat, mai puin lizibil dect n cazul interogrilor
obinuite.
n plus, interogrile care sunt simple pe tipuri de date comune
devin complicate cnd se folosete tipul de date JSON, n special
cnd avem de-a face cu tablouri de obiecte. Pentru a exemplifica
acest aspect, considerai o tabel de utilizatori users care stocheaz
numerele de telefon ca i un tablou de obiecte JSON, precum este
prezentat n Figura 1. Cu toate c acest tip de configurare arat
mai bine dect crearea de coloane pentru fiecare tip de numr,
precum home_number, work_number .a.m.d., interogarea tabelei
pentru a aduce numerele de telefon de tip primary de exemplu este
destul de complicat.Rezultatul interogrii este afiat n Figura 2:

Concluzii

A opta doar pentru un sistem de baze de date relaional sau


pentru unul NoSQL nu reprezint ntotdeauna o soluie viabil.
Cu toate c se fac pai pentru a uura integrarea acestor dou
tipuri de baze de date, cel puin pentru moment acest lucru poate
s se dovedeasc a fi o prea mare btaie de cap.
PostgreSQL ofer o soluie de compromis prin suportul
pentru coloane hstore care imit mediile de stocare cheie-valoare
i pentru coloane de tip JSON, care permit stocarea de obiecte i
tablouri JSON. n plus, ofer operatori i funcii pentru a facilita
manipularea datelor, suportnd n acelai timp i indeci att pe
date JSON ct i pe cmpuri din interiorul lor.
Dac aceast soluie este sau nu optim este o ntrebare subiectiv, dependent de sistem i de cerinele pe care acesta trebuie
s le ndeplineasc. Ceea ce este important de inut minte este c
dezvoltatorul are la dispoziie puterea i complexitatea sistemului
de baze de date relaional Postgres, indiferent dac alege sau nu s
foloseasc tipul de date JSON.

SELECT users.id, phone->>number AS number


FROM users INNER JOIN
(
SELECT id,
json_array_elements(phones)
AS phone
FROM users
WHERE id=users.id
) phones
ON phones.id = users.id
WHERE phone->>type=primary

Figura 1 - Numere de telefon stocate ca tablou de


obiecte JSON, fiecare avnd un tip i un numr.

Figura 2 - Numerele de tip primary returnate de interogare

n general, nu putem fi siguri c numrul de telefon de tip primary se afl pe prima poziie a tabloului, acest lucru fiind subiectiv
i dependent de sistem. Cu toate acestea, impunerea unor astfel de
constrngeri pot duce la interogri simplificate, avnd operatorul
-> pentru a accesa direct elementul de pe poziia n a unui tablou.
De asemenea, important de notat este c exemplul precedent prezint un caz simplu de stocare de numere de telefon. Interogrile
devin cu att mai complicate cu ct datele stocate n tablourile
JSON sunt mai complexe, n special cnd apare nevoia de a face
join acestor date din cadrul tabloului cu alte tabele.

www.todaysoftmag.ro | nr. 25/Iulie, 2014

23

programare

testare

Du-te (GO) i gsete instrumentul

e cnd am nceput s lucrez n industria IT, am avut multe roluri diferite, de la


dezvoltare software pn la suport reea i suport tehnic computer.

Marius Ciotlos

marius.ciotlos@betfair.com
Delivery Manager
@ Betfair

Dup o perioad destul de ndelungat de munc n aceast industrie, am


constatat c puine instrumente sunt cu adevrat inovatoare. De asemnea, multe dintre
instrumentele existente sunt se deosebesc
ntre ele prin puine nuane sau sunt att de
specifice n sarcina lor nct depinde de tine
cum i formezi procesul de lucru cu ele. n
rndurile urmtoare, voi atrage atenia asupra unui instrument care se numete GO i
este dezvoltat de ThoughtWorks. Este dificil
de gsit din cauza numelui simplu, elegant,
aceasta pe lng dezavantajul c limbajul de
programare GO are acelai nume.

Ce este acest instrument?

Dar destul cu introducerea; s trecem


la detaliile din spatele acestui instrument.
GO a fost conceput drept un instrument cu
care s poi face Livrare continu. A dori
s evit atingerea acestui subiect, din cauz
c exist att de multe lucrri pe aceast
tem i fiecare autor tehnic imprim terminologiei propria sa particularitate.Este
un instrument foarte personalizabil pentru
fluxul de lucru. i mai presus de toate, este
acum surs deschis (open source).
Am aflat de GO de abia acum o lun,
ntr-un seminar din cadrul companiei
mele. Unii ar putea crede c ni s-au inoculat informaii subiective de ctre vreun
furnizor pltit de ctre ThoughtWorks. Este
departe de adevr. GO era n acel moment
doar numele unui instrument obscur
(pentru mine). Am fost sceptic n privina
instrumentelor complexe universale, cci
am avut partea mea de dezamgiri cu unele
dintre ele, care ntotdeauna se promoveaz

24

nr. 25/Iulie, 2014 | www.todaysoftmag.ro

drept fcnd multe, dar sfresc de multe


ori prin a te ncurca.
Structura lui GO: Privire de ansamblu
de la nivel nalt, privind instrumentul din
spaiu
GO este un Server Arhitectur de tip
agent, unde ai serverul principal cu UI i
muli ageni care se conecteaz cu acest
Server i primesc comenzi. Agenii pot rula
pe Windows, Linux i Mac OSX, i depinde
de tine ct de muli vrei (poi chiar s rulezi
mai muli ageni pe un aparat).
Pe server ai:
Task-uri care se deruleaz succesiv.
Job-uri care se deruleaz n paralel i
conin task-uri.
Etape care se deruleaz succesiv i
conin job-uri.
Pipeline-uri care ruleaz n paralel
sau secvenial n funcie de modul n care
sunt definite, care conin Etape.
Agenii ti vor avea etichete (tags) care
specific ceea ce pot face (de exemplu, s
ruleze bash, s ruleze python s ruleze GIT,
s ruleze SSH), iar operaiile tale (jobs) au i
ele eticheta pentru a specifica resursele de
care ai nevoie pentru ca acea lucrare s se
deruleze. Serverul doar potrivete agentul
potrivit pentru job-ul potrivit!

Ce poi face cu GO?

Noi l utilizm pentru punerea n


funciune a serverelor (server deployments), rularea testelor i a automatizrii
de infrastructur. Totui modul n care este
construit, v permite s-l utilizai pentru
multe alte scopuri. Cum funcioneaz:

TODAY SOFTWARE MAGAZINE


Gseti nite comenzi (instrumente sau scrieri sau pur i
simplu comenzi de pe consol) pe care le rulezi dup un pattern
repetitiv (le vom numi sarcini).
Grupezi acele comenzi care pot fi rulate ca un unit, s spunem c creezi un utilizator n AD, i creezi e-mailul, repartizezi
utilizatorul ntr-un grup (pe aceasta o vom numi o lucrare (job)).
Grupezi mpreun lucrri (jobs) care pot s se deruleze n
paralel ca i dup ce ai utilizatorul n AD, crend diverse permisiuni bazate pe grupul AD n multe instrumente diferite ()
Grupezi etapele (stages) ntr-o secven, astfel nct s poi
face grupuri de comenzi nlnuite i complexe. Ai putea avea o
prim etap care s fac toate cele de mai sus, iar o a doua etap
care s pregteasc instalarea unui laptop sau a unui desktop n
paralel (vom numi asta un produs n curs de dezvoltare)
Poi avea chiar produse n curs de dezvoltare legate mpreun sau care s se deruleze n paralel.

utilizare ntr-o Etap diferit sau la un Produs n dezvoltare diferit. Imaginai-v un script care genereaz un binar temporar de
care ai nevoie mai ncolo n cursul dezvoltrii produsului. Ai putea
utiliza artefacte pentru a nu mai avea nevoie de un repo extern
pentru ceva care este att de volatil. De asemenea, Artefactele Test
sunt felul n care GO poate interpreta rezultatele testelor pentru
o Etap.
Pe baza artefactelor poi avea nite tab-uri speciale care s
ncarce HTML-ul pe care l-ai generat cu o comand, pentru a-l
vedea direct n instrument.

Configuraia XML

ntreaga configuraie pentru server st ntr-o versiune de


fiier XML. Dac interfaa pentru utilizator nu este suficient,
poi oricnd s editezi manual. Aceast funcie este disponibil
numai pentru Super Admin deoarece este foarte uor i posibil
s ncurci lucrurile de acolo. Configuraia XML st ntr-o zon
Principalele caracteristici care i permit s atingi acest nivel de text care are mult validare, dar un lucru pe care probabil l
ridicat de flexibilitate:
vei face n timp ce i defineti fluxul de lucru este s redenumeti
anumite Produse care sunt n dezvoltare, iar acest lucru poate s
Comenzi personalizate
i cauzeze probleme.
Comenzile personalizate (custom) sunt o list de comenzi pe
care le poi folosi pentru a face lucruri ntr-o sarcin. Ce e frumos
la GO este c poi rula literalmente orice utiliznd un terminal Bibliografie
(Linux, Windows, Mac OSX). Dac comenzile de baz nu sunt
Forum public: https://groups.google.com/forum/#!forum/
suficiente pentru tine, este posibil s i creezi singur comenzi mai go-cd
complexe, utiliznd script-uri (gndete-te la PowerShell, Python,
Documentaie: https://go.app.betfair/go/help/index.html
etc.). Comenzile personalizate i permit de asemenea s urmreti
Pagin comunitate mai veche: http://support.thoughtworks.
statutul unei comenzi care tocmai a rulat. Noi am folosit script-uri com/categories/20002778-Go-Community-Support
Python pentru a avea i mai mult flexibilitate n procesarea rezulWebinar introductiv: http://www.go.cd/2014/03/10/go-webitatului (output-ul) i trimiterea napoi a codului status astfel nar-recording.html
nct s tii dac o sarcin (care ruleaz comanda) a euat sau nu.

Artefacte Construiete i testeaz

Artefactele sunt al doilea concept grozav n GO, unde o


lucrare (care are sarcini multiple cu comenzi personalizate) poate
genera un rezultat i tu ai putea s i spui lui GO c acesta este
un artefact. Chiar dac ai doar dou tipuri de artefacte permise
de GO, Artefactul Build este destul de generic pentru a fi orice.
Cu artefactele poi aduce n instrument mai multe informaii de
la output (rezultat), dar poi de asemenea s le furnizezi pentru

www.todaysoftmag.ro | nr. 25/Iulie, 2014

25

management

Scrum cu Programare Extrem

anagementul unei echipe de dezvoltare software este o meserie pe care trecerea timpului nu a transformat-o, aa cum se ntmpl de obicei, ntr-una
mai uoar. De la publicarea lucrrii Agile Manifesto, n 2001, multe companii
i echipe care dezvolt produse soft au practicat i testat metodele i tehnicile Agile cu
succes.

Alina Chereches

alina.chereche@yardi.com
Senior Software Developer
& Scrum Master
@ Yardi

Cunoscut i sub numele de Extreme


Project Management (XPM), aceast
abordare a managementului de proiect
are ca scop mbuntirea rspunsului
produsului la schimbarea specificaiilor
clientului. Aadar, n timp ce echipa Agile
se concentreaz pe creterea nivelului de
adaptabilitate, se pierde din importana
acordat n mod normal, predictibilitii.
Lipsa de predictibilitate a echipei este
ntr-adevr dezavantajul metodologiei
Agile. Acest articol vorbete despre modul
n care metodele Agile sunt aplicate n
XPM i prezint cteva exemple, sperm
noi utile, legate de modul n care putem
traduce teoria Agile n proiecte de succes
pentru echip i profit pentru organizaie.

Echipa Agile

nti de toate, XPM nu se potrivete


oricrei echipe. Dup cum se specific n
Agile Manifesto, vorbim despre echipe care
se organizeaz singure, formate dintr-un
numr mic de dezvoltatori seniori, care
lucreaz pe proiecte ale cror specificaii se
schimb frecvent. De aceea, am avea nevoie
de o cultur n echip bazat pe un rspuns
pozitiv la schimbri - o echip n care exist
comunicare, colaborare i n care rolurile se
pot schimba n orice moment.
Rolurile ntr-o echip Agile sunt de asemenea foarte importante. O echip Agile
nu are nevoie de managerul clasic, membrii acesteia sunt direct resposabili de munca
lor. Scrum Master este managerul echipei,
iar rolul su este ca acela al unui antrenor.

26

nr. 25/Iulie, 2014 | www.todaysoftmag.ro

El are abiliti de organizare, obine resurse


pentru echip i conduce echipa spre realizarea obiectivelor sale. Alte roluri n echipa
Agile sunt: Domain Expert, Technical
Lead, Independent Tester, Product Owner
i ali Stakeholders. Aa cum vom vedea
mai trziu, fiecare dintre aceti membri se
concentreaz pe diferite aspecte ale proiectului n care sunt toi implicai i aceasta
este adevrata provocare a echipei Agile.
Aspectele pe care metodele Agile i
propun s le dezvolte ntr-o echip, le-am
structurat n trei categorii: comunicare,
eficien i calitate.
Dup cum am menionat mai sus, XPM
se bazeaz pe o comunicare constant i
productiv. Prin intermediul procedurilor Agile un astfel de mediu de lucru
poate fi construit pentru a asigura evoluia
i optimizarea proceselor. Iat care sunt
instrumentele Agile: edina de planificare
(Iteration Planning), Poker Planning, sistemul de urmrire a vitezei de lucru a echipei
(Velocity Tracking), edinele de retrospec
tiv.
Eficiena echipei este asigurat de
edinele zilnice de Scrum (stand-ups) i
obinerea de feed-back n timp scurt, ceea ce
conduce la un ciclu de lucru (Sprint) foarte
adaptabil. Echipa Agile se concentreaz, n
acelai timp, pe calitate, prin procesul de
integrare continu, pair-programming, procesele de testare, refactorizare i review al
codului, D3 (Design Driven Development)
i TDD (Test Driven Development).

management

TODAY SOFTWARE MAGAZINE

Dimensiunile Agile

Metodologia Agile ne nva multe


lucruri i abordeaz dezvoltarea de produs
din diferite puncte de vedere. Cred c una
dintre cele mai importante dimensiuni ar fi
Procesul Agile Nedefinit (the Agile Undefined
Process) - principiul conform cruia un
proces sau proiect Agile nu este n nici un
moment pe deplin definit. De asemenea, se
refer la conceptul de Agile Modeling: documentare, arhitectur i cerine care se pot
schimba n orice moment i care trebuie s
fie ntotdeauna clare i transparente. Este
principiul care pune accentul pe diferena
dintre Development Release i Production
Release, sau diferena dintre viteza de lucru
a echipei i ndeplinirea angajamentelor
privind lansarea produsului la client.
Aa cum am menionat mai sus, Agile
nu vizeaz proiecte care necesit previziuni. Nu se focalizeaz pe proceduri sau
artefacte, ci pe metodologii pentru oameni.
n terminologia Agile acestea sunt numite
Crystal Methods: lansarea frecvent de cod
utilizabil pentru client, mbuntirea prin
re-evaluare, testarea prin intermediul utilizatorilor experi, teste automate.
O alt dimensiune Agile este Feature
Driven Development. Aceasta prezint
cele mai bune practici din perspectiva
nelegerii businessului i a clientului, aa
numitul Domain Driven Development
(D3), lansri regulate i transparen n
ceea ce privete progresul proiectului i
rezultatele sale. i cu aceste practici ne
apropiem tot mai mult de cealalt parte a
Agile: managemenul resurselor i livrarea
la timp.
n Agile, managementul timpului, al

calitii i al costului se numete Dynamic


System Development Method. Se refer la
concentrarea pe necesitile businessului,
dezvoltarea i lansarea rapid, fr a se
compromite ns calitatea, la demonstrarea
controlului prin dezvoltarea gradual i la
comunicarea constant. Aceast dimensiune introduce termenul de prioritizare (the
musts, the shoulds, the coulds and the wont
haves).
Chiar dac voi prezenta utilizarea
Scrum n XPM, exist urmtoarele principii din metodologia Kanban, care vin s
completeze foarte bine ideea pe care ncerc
s o conturez privind livrarea la timp i
controlul resurselor. i aceste principii ar
putea fi rezumate prin fraza: Oprete-te
s ncepi i ncepe s termini (Stop starting and start finishing). Cu alte cuvinte,
echipa ar trebui s convin s urmreasc
schimbarea progresiv i s respecte

procesul curent i rolurile care s-au stabilit


la nceputul proiectului.
A m s pu s d e j a c Ag i l e nu s e
concentreaz pe proceduri, ci pe oameni
i metode pentru oameni. Exist aceast
ultim dimensiune Agile care se refer la
ce anume se dezvolt, mai degrab dect la
cum se dezvolt. Este vorba de teoria Agile
cunoscut sub numele de Lean Software
Development - politici i proceduri scrise n
scopul de a controla consumul de resurse.
Unele dintre aceste politici sunt: eliminarea pierderilor, luarea unor decizii ct mai
trziu posibil, livrarea ct mai rapid posibil, asigurarea unei viziuni de ansamblu i
demonstrarea integritii.

Provocarea

Ne vom ntoarce acum la meniunea


mea cum c membri diferii ai echipei Agile
au interese diferite atunci cnd particip la

Objective C

jobs-cluj@yardi.com
Yardi Romania

www.todaysoftmag.ro | nr. 25/Iulie, 2014

27

management
Scrum cu Programare Extrem
dezvoltarea unui proiect. Desigur, cu toii
i fac treaba n cel mai bun mod posibil i
neleg i respect Scopul Proiectului Agile
(ce software trebuie construit i livrat). Dar,
n timp ce membrii echipei sunt interesai
de metodele de inginerie i de practicile
Extreme Programming (XP), precum i de
scrierea de cod de calitate, Scrum Master se
axeaz pe adaptarea la cerinelor de sistem
imprevizibile, n acelai timp fiind capabil
s msoare viteza de lucru a echipei. Pe
de alt parte, Product Owner-ul nu este
interesat ns nici de viteza echipei, nici de
calitatea codului. El ar dori ca echipa s fie
n msur s fac estimri exacte privind
termenul de finalizare a proiectelor. Cu
alte cuvinte, Product Owner-ul, precum i
ali Stakeholders, ar dori ca echipa s fie ...
previzibil.
Pentru a putea prezice lansarea produsului, o echip trebuie s fie capabil s
estimeze, n primul rnd, etapele de dezvoltare. Pentru aceasta avem instrumentele
Scrum pentru managementul de proiect:
Poker Planning, Velocity Tracking i Sprint
Retrospectives.
V voi prezenta n continuare cteva
exemple concrete despre cum Scrum i XP
pot conlucra pentru a ne ajuta s atingem
scopul predictibilitii.

Scrum i XP - Cum facem s


funcioneze?

De obicei, vei gsi mai multe articole care vorbesc despre diferenele dintre
Scrum i XP. Dei ambele se concentreaz
pe producerea de software funcional n
cel mai scurt timp posibil i pun accentul
pe importana comunicrii ntre echipe,
ele sunt descrise mai degrab ca abordri
opuse n dezvoltarea de produse soft.
Acum c am vzut care sunt diferenele
dintre Scrum i XP, ne vom axa pe instrumentele care mbin avantajele celor dou
metodologii.

Documentare i Testare

Water - Cerine i specificaii (toate documentele necesare, actualizate)


Scrum - Proiectare i implementare (practici de inginerie)
Fall - Verificare, ntreinere (testare
automat, lansare i livrare)
XPM se refer la crearea de rezultate
de calitate, funcionale, care furnizeaz cea
mai mare valoare financiar posibil, n
acelai timp reducnd riscul de eec. Prin
adoptarea Water-Scrum-Fall, se face n mod
subtil trecerea de la modelul Agile, axat pe
echip, la modelul Agile axat pe nevoile
de business. Prin combinarea beneficiilor
aduse de metodologiile de dezvoltare Agile
i Waterfall, se preia controlul asupra felului
n care echipa interacioneaz cu alte pri
ale organizaiei, reducnd treptat consumul
de resurse i crescnd predictibilitatea n
ceea ce privete estimrile i livrarea.

Msurarea vitezei
n Scrum, viteza este reprezentat de
ct de mult poate dezvolta o echip n
cadrul unei iteraii. Acest lucru poate fi
estimat analiznd iteraii anterioare, presupunnd c membrii echipei i durata
sprintului rmn aceleai. Rapoartele de
vitez sunt folosite la edinele de planificare, cu scopul de a defini urmtorul sprint.
Odat stabilit, viteza va fi folosit pentru
planificarea livrrilor.
Grafice de msurarea a vitezei unei
echipe:
Burndown Chart
Velocity Tracking
Cu XP, sprint-urile sunt flexibile i noi
task-uri pot fi integrate pe msur ce apar,
n timpul unei iteraii. Aceast abordare
ngreuneaz procesul de msurare a vitezei
i face aproape imposibil folosirea unui
Burndown Chart.
Atunci cnd un nou task este adugat
n timpul unui sprint, un altul ar trebui s
se ntoarc n backlog. n acest fel, numrul
de puncte (story points) stabilite pentru un
sprint rmne aa cum a fost plnuit iniial.
Dac acest lucru nu se ntmpl i taskuri noi sunt adugate la volumul de lucru
existent, echipa nu va putea s completeze
sprint-ul conform planului i, prin urmare,
nu-i va putea respecta angajamentele.
Ecuaia Velocity Tracking:

O echip Scrum cuprinde toate persoanele necesare n dezvoltarea de software


funcional. Acest lucru nseamn dezvoltatori, testeri i analiti care lucreaz
mpreun pentru un obiectiv comun.
Chiar dac am acceptat principiile Agile
de dezvoltare, managementul de livrare i
planificarea proiectului se fac n continuare n concordan cu modelul Waterfall.
(sp) + Added (sp)
Realitatea Agile n cadrul organizaiilor a Planned
- Removed (sp) = Assigned (sp)
deviat de la ideile iniiale descrise n Agile = Burned (sp)
Manifesto i a devenit mai mult o abordare
hibrid a managementului unui ciclu de
dezvoltare, numit Water-Scrum-Fall.

28

nr. 25/Iulie, 2014 | www.todaysoftmag.ro

Pair-programming i Code reviewing

Un principiu important al XP este


proprietatea colectiv asupra codului: e
important s v asigurai c nici o bucat
de cod nu ajunge n producie fr a fi
revizuit de o a doua persoan. Scopul
acestei abordri nu este numai de a livra
cod de calitate, cu mai puine bug-uri, ci i
de a face informaia i cunotinele s circule ntre membrii echipei. Totodat, un alt
scop este acela de a da o ans developerilor s preia ideile bune de la colegii lor.
Pentru a v asigura c toate costurile
de revizuire a codului nu depesc beneficiile, v oferim o idee privind ce ar putea
funciona i cnd.
S-ar putea s cunoatei care sunt
etapele unei echipe Agile: Forming,
Storming, Norming i Performing.
n funcie de etapa n care se afl echipa
n momentul respectiv, anumite abordri
pentru revizuirea de cod sunt mai potrivite
dect altele.
n etapa de Forming, este indicat ca
membrii echipei s formeze perechi i s
lucreze mpreun. n felul acesta, cei cu mai
puin experien pot lucra cu senior developers i membrii echipei care au mai multe
cunotine despre proiect pot comunica
din informaii i celorlali. n felul acesta,
echipa este mai productiv i mai eficient
dect dac fiecare membru ar lucra pe cont
propriu.
Cnd echipa se afl n faza Norming,
sesiunile de revizuire a codului sunt mai
eficiente dac particip ntreaga echip.
Acesta este momentul n care echipa i
stabilete standardele i principiile pentru codare i cnd se iau multe decizii
importante.
n cele din urm, dac echipa este
matur i n faza de Performing, lucrul individual este mult mai eficient dect dac mai
multe persoane lucreaz pe aceeai bucat
de cod. Peer-reviewing este tipul de verificare cel mai potrivit n acest caz.

Practica bate teoria!


Ultima, dar i cea mai important
regul n XPM este s ne asigurm c
punem n practic ct mai multe dintre cunotinele pe care le avem, ct mai
repede posibil. Fiecare edin a echipei ar trebui s se finalizeze cu un set de
concluzii i propuneri de aciuni i nicio
retrospectiv nu ar trebui s stabileasc noi
scopuri pentru echip atta timp ct cele
anterioare nu au fost ndeplinite. Trebuie s
meninem echipa responsabil, concentrat
i contient de propriile responsabiliti.

arhitectur

TODAY SOFTWARE MAGAZINE

Principii de design Agile

rogramarea agile se bazeaz pe dezvoltarea produsului software n blocuri mici i incrementale, n care cerinele clienilor i
soluiile oferite de programatori evolueaz simultan.

Programarea agile are la baz o strns


legtur ntre calitatea final a produsului
i livrrile frecvente ale funcionalitilor
dezvoltate incremental. Cu ct se realizeaz mai multe livrri, cu att calitatea
produsului final va fi mai ridicat. ntr-un
proces de implementare agile, cerinele de
modificare sunt privite ca un lucru pozitiv,
indiferent de faza de dezvoltare n care se
afl proiectul. Aceasta deoarece cerinele
de modificare evideniaz faptul c echipa a
neles ceea ce este necesar pentru ca produsul software s satisfac necesitile pieei.
Din acest motiv este necesar ca o echip
agile s menin structura codului ct
mai flexibil, astfel nct noile cerine ale
clienilor s aib un impact ct mai redus
asupra arhitecturii existente. Aceasta nu
nseamn ns c echipa va face un efort
suplimentar lund in considerare viitoarele
cerine i necesiti ale clienilor sau c va
investi mai mult timp pentru a implementa
o infrastructur care s suporte posibile
cerine necesare n viitor. Dar evideniaz
faptul c accentul este pus de dezvoltarea produsului curent ct mai eficient.
n acest acest scop, vom investiga cteva
dintre principiile de software design care
se impun aplicate de la o iteraie la alta
de ctre un programator agile, pentru a
menine ct mai curat i flexibil posibil
codul i designul proiectului. Principiile
au fost propuse de ctre Robert Martin
n lucrarea Agile Software Development:
Principles, Patterns, and Practices [1].

vor implica modificri asupra celorlalte responsabiliti ale clasei. Acesta


corelaie conduce ctre un design fragil.
Fragilitatea nsemn c o modificare adus
sistemului produce o ruptur n design, n
locuri care nu au nici o legtur conceptual cu partea care a fost modificat.

n acest exemplu cele dou


responsabiliti sunt separate, astfel nct
clasa care le utilizeaz - Phone, nu trebuie
s le cupleze pe amndou. Schimbrile
asupra conexiunii nu vor influena metodele responsabile cu transmisia datelor.
Pe de alt parte n cazul n care cele
dou responsabiliti nu prezint motive
Exemplu:
de modificare n timp, nu este neceS presupunem c aveam o clas sar nici separarea lor. Cu alte cuvinte
care ncapsuleaz conceptul de tele- responsabilitile unei clase trebuie sepaf o n i f u n c i o n a l i t i l e a f e r e nt e . rate, numai dac exist anse reale ca
responsabilitile s produc modificri,
class Phone
influenndu-se reciproc.
{
public void Dial(const string&
phoneNumber);

Concluzii

Principiul singurei responsabiliti este


unul dintre cele mai simple i cu toate acestea unul dintre cele mai dificil de aplicat.
public Receive(const string&
Identificarea i separarea responsabilitilor
message);
este unul dintre aspectele fundamentale ale
};
designului software. n principiile de agile
Acesta clas ar putea fi considerat software design pe care le vom analiza n
rezonabil. Toate cele patru metode defi- continuare, vom vedea c vom reveni, ntrnite reprezint funcionaliti referitoare la un fel sau altul, asupra acestui principiu.
conceptul de telefon. i totui aceast clas
are dou responsabiliti. Metodele Dial si Principiul Deschis-nchis (Open
Hangup sunt responsabile pentru realiza- Closed Principle: OCP)
rea conexiunii, n timp ce metodele Send
i Receive sunt responsabile pentru transEntitile software (clase, module,
miterea datelor.
funcii, etc.) trebuie s fie deschise pentru
n cazul n care signatura metodelor extensii, dar nchise pentru modificri.
responsabile pentru realizarea conexiunii
Atunci cnd o singur modificare
ar fi supuse schimbrilor, acest design ar fi asupra unui modul software rezult
rigid, deoarece toate clasele care apeleaz n necesitatea de a modifica o serie de
metodele Dial i Hangup ar trebui recom- alte module, atunci designul sufer de
Principiul Singurei Responsabiliti pilate. Pentru a evita aceast situaie este rigiditate. Principiul OCP susine refacto(Single Responsability Principle : SRP)
necesar un re-design care s separe cele rizarea designului astfel nct modificri
dou responsabiliti.
ulterioare de acelai tip, nu vor mai proO clas trebuie s aib un singur motiv
duce modificri asupra codului existent
pentru a fi modificat.
, care deja funcioneaz, n schimb va
n contextul SRP, responsabilitatea
necesita doar adugarea de noi module.
poate fi definit ca un motiv pentru modificare. Atunci cnd cerinele proiectului se
Un modul software care respect princimodific, modificrile vor fi vizibile prin
piul Deschis-nchis are dou caracteristici
modificarea responsabilitii claselor. Dac
principale:
o clas are mai multe responsabiliti, atunci
D e s c h i s p e n t r u e x t e n s i i .
va avea mai multe motive de schimbare.
Acesta nseamn c acel comportament
Avnd mai multe responsabiliti cuplate,
Figura 1
al codului poate fi extins. Atunci cnd
modificri asupra unei responsabiliti
cerinele proiectului se modific, codul
public void Hangup();
public void Send(const string&
message);

www.todaysoftmag.ro | nr. 25/Iulie, 2014

29

arhitectur
Principii de design Agile
poate fi extins cu implementarea noilor
cerine, adic se poate modifica comportamentul modulului deja existent.
nchis pentr u modific ri.
Implementarea noilor cerine nu necesit
modificri asupra codului deja existent.
Abstractizarea este metoda care permite modificarea comportamentului unui
modul software, fr a modifica i codul
deja existent al acestuia. n C++, Java sau
oricare alt limbaj orientat obiect, este posibil s se creeze o abstractizare care ofer
o interfa fix i un numr nelimitat de
implementri, adic de comportamente
diferite [2].
n Fig. 2 este prezentat o diagram de
clase care nu respect principiul deschisnchis. Att clasa Client ct i clasa Server
sunt clase concrete. Clasa Client folosete
clasa Server. Dac mai trziu se dorete ca
aceast clas Client s foloseasc un alt tip
de server, va fi nevoie s se modifice clasa
Client astfel nct s utilizeze noul server.

Figure 2 Exemplu care nu respecta principiul OCP 1

n Fig. 3 se prezint acelai design ca i


n Fig. 2, dar de aceast dat principiul deschis-nchis este respectat. n acest caz a fost
introdus clasa abstract AbstractServer,
iar clasa Client folosete aceast abstractizare. Totui clasa Client va folosi de fapt
clasa Server care implementeaz clasa
ClientInterface. Dac n viitor se dorete
folosirea unui alt tip de server tot ce trebuie fcut va fi s se implementeze o nou
clas derivat din clasa ClientInterface,
dar de aceast dat clientul nu mai trebuie
modificat.

Figura 3 Exemplu care respect principiul OCP 2

Un aspect particular n acest exemplu,


este modul n care am denumit clasa abstract ClientInterface i nu ServerInterface,
spre exemplu. Motivul pentru aceast alegere este faptul c clasele abstracte sunt
mai apropiate de clasele client pe care le
folosesc, dect de clasele concrete pe care
le implementeaz.
Principiul Deschis -nchis este utilizat i

30

n design pattern-urile Strategy i Plugin [3].


Spre exemplu, Fig.4 prezint designul
corespunztor care respect principiul
deschis-nchis.

element central din programarea orientat


obiect. Conformarea la acest principiu
conduce la cele mai mari beneficii ale programrii orientate obiect, acestea fiind
flexibilitatea, reutilizarea i mentenana
codului.

Principiu de substituire Liskov (LSP)

Figura 4

Clasa Sort_Object efectueaz o operaie


de sortare a obiectelor, operaie care
poate fi descris n interfaa abstract
Sort_Object_Interface. Clasele derivate din
clasa abstract Sort_Object_Interface sunt
obligate s implementeze metoda Sort_
Function(), dar au n acelai timp libertatea
de a oferi orice implementare doresc pentru
aceast interfa. Astfel comportamentul
specificat de interfaa metodei void Sort_
Function(), poate fi extins i modificat prin
crearea de noi subtipuri ale clasei abstracte
Sort_Object_Interface.
n definiia clasei Sort_Object vom avea
urmtoarele metode:
void Sort_Object::Sort_Function()
{
m_sort_algorithm>sortFunction();
}
void Sort_Object::Set_Sort_
Algorithm(const Sort_Object_Interface* sort_algorithm)
{
std::cout << Setting a new
sorting algorithm... << std::endl;
m_sort_algorithm = sort_algorithm;
}

Concluzii

Principalele mecanisme n spatele


acestui principiu sunt abstractizarea i polimorfismul. Ori de cte ori codul trebuie
modificat pentru implementarea unei noi
funcionaliti, trebuie s se ia n considerare
i crearea unei abstracii care s furnizeze o
interfa pentru comportamentul dorit i
care s ofere n acelai timp posibilitatea
de a aduga n viitor noi comportamente
pentru aceeai interfa. Desigur nu
ntotdeauna este necesar crearea unei
abstractizri. Acestea metod este util n
general acolo unde apar modificri frecvente.
Conformarea la principiul deschis-nchis
este costisitoare. Aceasta necesit timp de
dezvoltare i efort pentru a crea abstraciile
necesare. Aceste abstracii incrementeaz
complexitatea designului software.
n schimb, principiul deschis-inchis
reprezint din multe puncte de vedere un

nr. 25/Iulie, 2014 | www.todaysoftmag.ro

Tipurile de baz trebuie s poat fi substituite de tipurile derivate.


n limbaje precum C++ sau Java,
mecanismul principal prin care se realizeaz abstractizarea i polimorfismul este
motenirea. Pentru a crea o ierarhie de
motenire corect trebuie s ne asigurm
c clasele derivate, extind fr a nlocui
funcionalitatea claselor de baz. Cu alte
cuvinte, funciile care utilizeaz pointer-i
sau referine la clasele de baz trebuie s
poat folosi instane ale claselor derivate
far s i dea seama de acest lucru. n
caz contrar, noile clase pot produce efecte
nedorite cnd sunt utilizate n entitaile
programului deja existent. Importana
principiului LSP devine evident n
momentul n care este inclcat.
Exemplu:
S presupunem c avem o clas Shape,
a crei obiecte sunt deja folosite undeva n
aplicaie i care are o metoda SetSize, care
proprietatea mSize ce poate fi folosit ca
latur sau diametru, n funcie de figura
reprezentat.
class Shape
{
public:
void SetSize(double size);
void GetSize(double& size);
private:
double mSize;
};

Mai trziu extindem aplicaia i adugm clasele Square i Circle. Avnd n


vedere faptul c motenirea modeleaz o
relaie este de tipul ( IS_A relationship)
noile clase Square si Circle, pot fi derivate
din clasa Shape.

Figura 5

S presupunem n continuare c obiectele Shape sunt returnate de o metod


factory, pe baza unor condiii stabilite la run
time, astfel nct nu cunoatem exact tipul

TODAY SOFTWARE MAGAZINE


obiectului returnat. Dar tim c este Shape.
Obinem obiectul Shape, i setm proprietatea size de 10 uniti i i calculm aria.
Pentru un obiect square aria va fi 100.
void f(Shape& shape, float& area)
{
shape.SetSize(10);
shape.GetArea(area);
assert(area == 100); // Oups!
// for circle area = 314.15927!
}

n acest exemplu, atunci cnd funcia f,


primete ca parametru r, o instan a clasei Circle va avea un comportament greit.
Deoarece, n funcia f, obiectele de tip Square
nu pot substitui obiecte de tip Rectangle,
principiul LSP este violat. Funcia f, este
fragil n raport cu ierarhia Square/Circle.

Design by Contract

Desigur c muli programatori, se vor


simi inconfortabil cu noiunea de comportament care trebuie s fie corect. Cum am
putea presupune ceea ce ateapt utilizatorii/clienii claselor pe care le implementm?
n acest scop, ne vine n ajutor tehnica
designului prin contract (design by contract - DBC). Contractul unei metode l
informeaz pe autorul unei clase client
despre comportamentele pe care se poate
baza cu siguran. Contractul este specificat prin declararea precondiiilor i
a postcondiiilor pentru fiecare metod.
Precondiiile trebuie s fie adevarate pentru ca metoda s se execute. Iar n final,
dup execuia metodei, aceasta garanteaz c postcondiiile sunt adevrate.
Anumite limbaje, precum Eiffel ofer suport
direct pentru precondiii i postcondiii.
Acestea trebuie doar declarate, iar n timpul rulrii sunt verificate automat. n C++
sau Java, aceast funcionalitate lipsete.
Contractele pot fi n schimb specificate
prin teste unitare (unit test). Prin testarea
comportamentului unei clase, testele unitare clarific comportamentul unei clase.
Programatorii care vor folosi clasele pentru care s-au implementat teste unitare,
pot folosi aceste teste pentru a ti care este
comportamentul pe care l ofer claselor
client.

Principiul Inversrii Dependenei


(Dependency Inversion Principle)
A. Modulele de pe nivelurile ierarhice superioare nu trebuie s depind de
modulele de pe nivelurile ierarhice inferioare. Toate ar trebui s depind doar de
module abstracte.
B. Abstractizrile nu trebuie s
depind de detalii. Detaliile trebuie s
depind de abstractizri.
Acest principiu enun faptul c modulele de pe nivelul ierarhic superior trebuie
s fie decuplate de cele de pe nivelurile
ierarhice inferioare. Aceast decuplare se
realizeaz prin introducerea unui nivel de
abstractizare ntre clasele care formeaz
nivelul ierarhic superior i cele care formeaz nivelurile ierarhice inferioare. n
plus principiul spune i faptul c abstractizarea nu trebuie s depind de detalii, ci
detaliile trebuie s depind de abstractizare.
Acest principiu este foarte important pentru reutilizarea componentelor software.
De asemenea, aplicarea corect a acestui
principiu face ca ntreinerea codului s fie
mult mai uor de realizat.
n Fig. 6 este prezentat o diagram
de clase organizat pe trei niveluri. Astfel
clasa PolicyLayer reprezint nivelul ierarhic superior, ea acceseaz funcionalitatea
din clasa MechanismLayer aflat pe
un nivel ierarhic inferior. La rndul
ei, clasa MechanismLayer acceseaz
funcionalitatea din clasa UtilityLayer care
de asemenea se afl pe un nivel ierarhic
inferior. n concluzie, este evident faptul c
n diagrama de clase prezentat nivelurile
superioare depind de nivelurile inferioare. Acest lucru nseamn c dac apare o
modificare la unul din nivelurile inferioare
exist anse destul de mari ca modificarea
s se propage n sus spre nivelurile ierarhice
superioare. Ceea ce nseamn c nivelurile
superioare mai abstracte depind de nivelurile inferioare care sunt mai concrete.
Aadar se ncalc principiul inversrii
dependenei.

Concluzii

Principiul LSP este doar o extensie a


principiului Deschis-nchis i nseamn c,
atunci cnd adugm o nou clas derivat
ntr-o ierarhie de motenire, trebuie s ne
asigurm c clasa nou adugat extinde
comportamentul clasei de baz, far a-l
modifica.

dependenei. Astfel, fiecrui nivel care


acceseaz funcionalitatea dintr-un nivel
ierarhic inferior i s-a adugat o interfa
care va fi implementat de nivelul ierarhic inferior. n acest fel interfaa prin care
cele dou niveluri comunic este definit
n nivelul ierarhic superior astfel nct
dependena a fost inversat i anume nivelul ierarhic inferior depinde de nivelul
ierarhic superior. Modificri fcute la nivelurile inferioare nu mai afecteaz nivelurile
superioare ci invers. n concluzie, diagrama de clase din Fig. 7 respect principiul
inversrii dependenei.

Figura 7

Concluzii

Programarea tradiional procedural creeaz polie de dependene


n care modulele ierarhice superioare depind de detaliile modulelor
ierarhice inferioare . Acest metod de
programare este ineficient deoarece
modificari ale detaliilor conduc ctre
modificri i n modulele superioare.
Programarea orientat obiect inverseaz
acest mecanism de dependen, astfel
nct atat detaliile ct i nivelurile superioare depind de abstractizri, iar serviciile
aparin deseori clienilor.
Indiferent de limbajul de programare
folosit, dac dependenele sunt inversate atunci designul codului este orientat
obiect. Dac dependenele nu sunt inversate, atunci designul este procedural.
Principiul dependenei inversate reprezint mecanismul fundamental de nivel
sczut (low level) ce st la baza multor
beneficii oferite de programarea orientat
obiect. Respectarea acestui principiu este
fundamental pentru crearea de module
reutilizabile. Este de asemenea esenial
pentru a scrie cod rezistent la modificari.
Att timp ct abstraciile i detaliile sunt
izolate reciproc, codul este mult mai uor
de meninut.

Figura 6

n Fig. 7 este prezentat aceeai diagram de clase ca i n Fig. 6, dar de aceast


dat este respectat principiul inversrii
www.todaysoftmag.ro | nr. 25/Iulie, 2014

31

arhitectur
Principii de design Agile

Principiul Segregrii Interfeei (The


Interface Segregation Principle)
Clienii nu trebuie s depind de
interfee pe care nu le folosesc.
Acest principiu pune n eviden faptul c atunci cnd se definete o interfa
trebuie avut grija ca doar acele metode
care sunt specifice clientului s fie puse
n interfa. Dac ntr-o interfa sunt
adugate metode care nu au ce cuta
acolo, atunci clasele care implementeaz
interfaa vor trebui s implementeze i
acele metode. Spre exemplu, dac se consider interfaa Angajat care are metoda
Mnnc, atunci toate clasele care implementeaz aceast interfaa vor trebui s
implementeze i metoda Mnnc. Ce se
ntmpl ns dac Angajatul este un robot?
Interfeele care conin metode nespecifice
se numesc interfee poluate sau grase.
n Fig. 8 este prezentat o diagram de
clase care conine: interfaa TimerClient,
interfaa Door i clasa TimedDoor. Interfaa
TimerClient trebuie implementat de orice
clas care are nevoie s intercepteze evenimente generate de un Timer. Interfaa
Door trebuie s fie implementat de orice
clas care implementeaz o u. Avnd n
vedere c a fost nevoie de modelarea unei
ui care se nchide automat dup un anumit
interval de timp n Fig. 3.7 este prezentat
o soluie n care a fost introdus clasa
TimedDoor derivat din interfaa Door,
iar pentru a dispune i de funcionalitatea
din TimerClient a fost modificat interfaa
Door astfel nct s moteneasca interfaa
TimerClient. Aceasta soluie ns polueaz
interfaa Door deoarece toate clasele care
vor moteni aceast interfaa vor trebui
s implementeze i funcionalitatea din
TimerClient [4].
class Timer
{
public:

void Register(int timeout,
TimerClient* client);
} ;
class TimerClient
{
public:

virtual void TimeOut();
};
class Door
{
public:

virtual void Lock() = 0;

virtual void Unlock() = 0;

virtual bool IsDoorOpen() =
0;
} ;

32

Figura 8

Separarea interfeelor se poate realiza


prin mecanismul motenirii multiple. n
Fig 9 se poate observa cum motenirea
multipl poate fi folosit pentru a respecta
n design principiul segregrii interfeelor.
n acest model, interfaa TimeDoor,
motenete din ambele interfee Door i
TimerClient.

Designul agile reprezint un proces


care se bazeaz pe aplicarea continu a
principiilor agile i a design pattern-urilor
astfel nct designul aplicaiei rmne n
mod constant simplu, curat i ct se poate
de expresiv.
Pentru o aprofundare a principiilor
enunate, recomand cu ncredere cartea lui Robert C. Martin, Agile Software
Development - Principles, Patterns, and
Practices.

Bibliografie
[1] Robert Martin. Agile Software Development:
Principles, Patterns, and Practices. Editura Prentice
Hall. 2012.
[2] Gamma, et al. Design patterns. reading Ma:
Addison-Wesley, 1998.
[3] Liskov, Barbara. Data Abstraction and Hierarchy. SIGPLAN Notices, 23.5 (May 1988)
[4] Meyer, Bertrand. Object oriented software construction, 2nd ed. upper Saddle River, Nj: Prentice
Hall, 1997.

Figura 9

Concluzii

Clasele poluate sau ,,grase conduc


ctre cuplri greite pentru clienii lor.
Cnd un client efectueaz o modificare
asupra unei clase poluate, toi ceilali
clieni ai clasei poluate sunt afectai. De
aceea, clienii trebuie s depind numai
de metodele pe care le apeleaz efectiv.
Acest lucru poate fi realizat prin separarea
interfeelor poluate, n mai multe interfee
specifice clienilor. Fiecare interfaa specific unui client va conine numai metodele
care sunt efectiv apelate de ctre client.
Clasele ,,grase pot apoi s moteneasc
toate interfeele specifice clienilor i s le
implementeze. Acest mecanism decupleaz
dependena clienilor de metode pe care nu
le apeleaz niciodat i permite clienilor s
fie independeni unii de alii.

Concluzii Agile Design

Prin aplicarea repetat - de la o iteraie


la alta, a principiilor mai sus enunate, se
evit cele trei caracteristici care definesc o
arhitectur software de slab calitate: rigiditatea - sistemul este greu de modificat
pentru c fiecare modificare afecteaz prea
multe pri ale sistemului, fragilitatea dac se modific ceva, apar tot felul de erori
neateptate i imobilitatea - este dificil s se
reutilizeze pri dintr-o aplicaie pentru c
nu pot fi separate de aplicaia pentru care
au fost dezvoltate iniial.

nr. 25/Iulie, 2014 | www.todaysoftmag.ro

Dumitria Munteanu

dumitrita.munteanu@arobs.com
Software engineer
@ Arobs

programare

TODAY SOFTWARE MAGAZINE

iOS 7 blur
Introducere n flat design

n ultimul an toat lumea mobile a adoptat conceptul de flat design, fie vorba de Android, iOS sau Windows, fiecare dintre sisteme
cu variaiunile proprii. n esena scopul e acelai: o mai bun nelegere a interfeei grafice de ctre utilizator.
where you are astfel ca utilizatorii s aib o mai bun nelegere a
contextului n care se afl. Cel mai bun exemplu este Notification
Center, care odat deschis, blureaz coninutul din spatele su.
Acest lucru permite vederea noului coninut peste vechea pagin
fr s blocheze vederea Home View-ului. Un alt exemplu bun ar fi
atunci cnd vrem s afim o alert: blurnd coninutul din spatele
ei va conduce natural atenia utilizatorului spre mesajul primit,
fr a-l scoate ns din contextul n care se afla anterior.

Cum reuete Apple


Pentru realizarea acestui lucru, cei de la Apple lucreaz
direct cu GPU-ul, acest lucru asigurndu-le vitez i calitate. De
asemenea, le permite s realizeze aa numitul live blur , adic
micarea elementelor din spate s fie redat prin blur. Din pcate,
Apple nu furnizeaz nici un API pentru a realiza acest lucru n
iOS7 SDK, probabil din diverse motive de securitate, iar s lucrezi
de la zero cu GPU necesit multe linii de cod i timp. Ca s fim
sinceri, vrem s implementm doar o interfa grafic pentru un
Odat cu iOS 7, Apple a introdus flat design mpreun cu ecran de alert, nu un joc 3D.
cteva concepte de user experience printre care i ideea de know

Soluie

Aici apare ntrebarea fireasc, cum obinem aa ceva n


aplicaiile noastre? Exist mai multe opiuni, dar n acest articol
am s prezint doar una, aleas pentru simplitatea i rapiditatea cu
care poate fi implementat. Aceast variant const n capturarea
ecranului prezent, blurarea capturii de imagine i afiarea ei ca
imagine de fundal n spatele mesajului de alert creat.
ncepem prin a crea clasa noastr proprie de alert, un
view controller bazat pe UIViewController. Pentru capturarea imaginii i blurarea ei avem nevoie de o clas numit
UIImage+ImageEffects.h pe care o vom importa n controller-ul
paginii.
#import UIImage+ImageEffects.h

ntr-una dintre metodele de lifecycle ale controlle-rului adugm urmtoarele linii i avem deja cea mai simpl modalitate de a
obine un fundal blurat:
-(void)viewWillAppear:(BOOL)animated {
UIImage *snapshot = [self takeScreenSnapshot];
www.todaysoftmag.ro | nr. 25/Iulie, 2014

33

programare
iOS 7 blur
UIColor *tintColor =
[UIColor colorWithWhite:0.2 alpha:0.15];

self.view.backgroundImage = [snapshot

applyBlurWithRadius:8 tintColor:

tintColor saturationDeltaFactor:
1.8 maskImage:nil];
}
- (UIImage *)takeScreenSnapshot {
UIGraphicsBeginImageContext(self.bounds.size);
if([self respondsToSelector:@selector(
drawViewHierarchyInRect:afterScreenUpdates:)]){
[self drawViewHierarchyInRect:
self.bounds afterScreenUpdates:NO];
}
else{
[self.layer renderInContext:
UIGraphicsGetCurrentContext()];
}
UIImage *image =
UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *imageData =
UIImageJPEGRepresentation(image, 0.75);
image = [UIImage imageWithData:imageData];
return image;
}

1. applyBlurWithRadius este
numrul de pixeli luai n calculul blur-ului. Cu ct mai
mare numrul, cu att vei avea
o imagine mai blurat.
2. tintColor este nuana care
va fi adaugat imaginii procesate. n exemplul de mai sus,
am optat pentru un tint mai
ntunecat.
3. saturationDeltaFactor este
nivelul de saturaie de culoare
aplicat imaginii procesate.
maskImage dei nil n
exemplul de mai sus, are
ntrebuinri folositoare n
momentul n care vrem s blurm doar o parte din imagine
ca n exemplul de mai jos:

Printre noile metodele din UIImage+ImageEffects.h se


numr i applyDarkEffectWithTent. Aceast variant a blurului utilizeaz un filtru bazat pe algoritmul tent, mai rapid dect
iniialul alrgoritm box. Iar n loc de 3 treceri necesare printr-un
filtru de tip box, n cazul algoritmului tent este necesar o singur trecere.
- (UIImage *)applyBlurWithRadius:(CGFloat)blurRadius
blurType: (BlurType) blurType tintColor:(UIColor *)
tintColor saturationDeltaFactor:(CGFloat)
saturationDeltaFactor maskImage:(UIImage *)maskImage
{

if (blurType == BOXFILTER)
{
vImageBoxConvolve_ARGB8888(&effectInBuffer, &effectOutBuffer, NULL, 0, 0, radius, radius, 0,
kvImageEdgeExtend);
vImageBoxConvolve_ARGB8888(&effectOutBuffer,
&effectInBuffer, NULL, 0, 0, radius, radius, 0,
kvImageEdgeExtend);
vImageBoxConvolve_ARGB8888(&effectInBuffer,
&effectOutBuffer, NULL, 0, 0, radius, radius, 0,
kvImageEdgeExtend);
}
else
{
vImageTentConvolve_ARGB8888(&effectInBuffer,
&effectOutBuffer, NULL, 0, 0, radius, radius, 0,
kvImageEdgeExtend);
}

n acest mod se reduce timpul de procesare de la 184 ms


la 16 ms. Pn la urm vrem o
aplicaie cu animaii i tranziii
ct se poate de fluente, fr
timpi mori de ateptare i sacadri, iar calitatea rezultatului e
comparabil cu aceea obinut
de Apple n Notification Center.
Finalizez prin a sugera
totui folosirea ct mai simpl i
doar n locurile n care credem
c ne foloeste blur-ul pentru a
evita ngreunarea funcionrii
fluide a aplicaiei.

n detaliu

Pentru cei care vor performa mai bun sau un altfel de blur
putem arunca o privire n interiorul UIImage+ImageEffects.h i
s facem cteva modificri.
typedef enum {
NOBLUR,
BOXFILTER,
TENTFILTER
} BlurType;
@import UIKit;
@interface UIImage (ImageEffects)
- (UIImage
- (UIImage
- (UIImage
- (UIImage
dius;
- (UIImage
tintColor;

*)
*)
*)
*)

applyLightEffect;
applyExtraLightEffect;
applyDarkEffect;
applyDarkEffectWithTent: (CGFloat) ra-

*) applyTintEffectWithColor:(UIColor *)

- (UIImage *)applyBlurWithRadius:(CGFloat)blurRadius
blurType: (BlurType) blurType tintColor:(UIColor *)
tintColor saturationDeltaFactor:
(CGFloat)saturationDeltaFactor maskImage:(UIImage *)
maskImage;
@end

34

nr. 25/Iulie, 2014 | www.todaysoftmag.ro

Mihai Fischer

mihai.fischer@gmail.com
iOS developer
@ Dens.io

programare

TODAY SOFTWARE MAGAZINE

Integrarea datelor ntre sisteme cu


Talend Open Studio

a cum meniona Jonathan Bowen n cartea sa, Getting Started with Talend Open Studio for Data Integration, de ndat ce
a aprut cel de-al doilea calculator, integrarea sistemelor a devenit o parte esenial a muncii echipelor IT.

Complexitatea sistemelor de astzi, mpreun cu ritmul alert n


care afacerile evolueaz, evideniaz nevoia de a avea la ndemn
un set de unelte care s ne permit executarea rapid a sarcinilor
de integrare. De asemenea, trebuie s fim n stare s reacionm
cu promptitudine la oportunitile de noi afaceri.
Experiena ne-a artat c, de cele mai multe ori, noii clieni vin
cu cerina de a integra n ecosistemul acestora produsul pe care
noi l oferim. Rareori un sistem informatic funcioneaz izolat, n
propriul su univers. n mai multe rnduri am observat c succesul proiectului propus unui client a depins de capacitatea noastr
de a integra sistemul cu produsele pe care acesta deja le folosea.
Procesul despre care vorbim poate nsemna sincronizarea a
dou baze de date o singur dat sau recurent, consumarea unor
servicii fie ele servicii web sau de alt natur generarea i
transferul de fiiere n diferite formate etc. Aadar, observm c
avem de-a face cu o varietate de modaliti prin care putem duce
la ndeplinire aceste sarcini, acest lucru contribuind la creterea
complexitii problemei. De asemenea, uneori este la latitudinea
noastr s decidem modalitatea prin care vom realiza integrarea
ns, de multe ori, clientul are cerine specifice i n legtur cu
acest aspect.
Atunci cnd ne confruntm cu o astfel de situaie, putem fie s
construim manual interfaa ntre sisteme, ca o soluie custom, fie
s utilizm un tool specializat pe rezolvarea problemelor de integrare. Un astfel de tool este Talend Open Studio, care vine cu o
ofert interesant pentru a ne ajuta la rezolvarea sarcinilor noastre
de integrare.

Talend Open Studio este reprezentat de modelarea grafic a proceselor pe care dorim s le definim. n tot acest timp, platforma
i face treaba de zidar n background, genernd cod Java. n fond,
fiecare component pe care o utilizm are asociat un comportament, descris prin intermediul codului Java.
Avnd n vedere faptul c acesta este un tool grafic, produsul
poate fi utilizat att de programatori, ct i de persoane care nu au
cunotine de programare. Totui, pentru a putea defini anumite
comportamente complexe, este nevoie s scriem din cnd n cnd
cod Java, lucru care ne determin s concluzionm c utilizatorii
care nu cunosc programare se confrunt cu anumite limitri.
Talend Open Studio este relativ uor de folosit, este o modalitate rapid de a modela scenarii de integrare, de cele mai multe
ori reducnd timpul de implementare de la sptmni sau luni, la
zile sau chiar ore, n funcie de complexitatea proiectului. Totui,
trebuie s avertizm cititorii c, asemeni multor altor domenii,
dac din cauza excesului de zel sau a unui design nepotrivit facem
overengineering, riscm s obinem o soluie complex, greu de
neles pentru ali utilizatori sau chiar ineficient. Exist i aici
necesitatea respectrii unor bune practici, care s asigure calitatea
soluiei noastre.
Printre alte beneficii ale utilizrii Talend Open Studio, trebuie
s remarcm c acesta este un produs open source, care permite
utilizatorilor s extind platforma dup nevoie. De asemenea,
utilizndu-l crete productivitatea, deoarece dezvoltatorii se pot
concentra mai mult la definirea procesului dect la implementarea
tehnic a acestuia. Ne sunt puse la dispoziie o mulime de componente, potrivite situaiilor mai mult sau mai puin obinuite, cu
Un overview al mediului Talend Open Studio
care putem opera pentru a ne defini procesele. n plus, comunitaTalend Open Studio for Data Integration este un mediu de tea utilizatorilor Talend este activ i gata s ofere sfaturi tehnice.
dezvoltare grafic care, dup cum spune i numele acestuia, este
specializat n integrarea datelor ntre sisteme. La baza sistemului Scenarii de utilizare
open source st mediul Eclipse. Alturi de crearea soluiilor de
Dup cum am menionat n seciunea anterioar, cele mai
integrare, Talend Open Studio cuprinde i mecanismele necesare obinuite scenarii de utilizare a proiectului Talend Open Studio
livrrii acestora job-urile pot fi rulate att din interiorul mediu- sunt urmtoarele:
lui, ct i ca script-uri de sine stttoare.
Transfer ntre baze de date: Atunci cnd sunt create sisteme
Pentru modelarea proceselor, sistemul utilizeaz conectori.
noi sau cele existente sunt actualizate, este nevoie ca datele s fie
Dezvoltatorii produsului ne ofer peste 800 de astfel de conectori,
migrate ntr-o nou baz de date. Aceasta poate s aib aceeai
care ne dau posibilitatea s conectm cu uurin baze de date,
schem sau una diferit, iar Talend Open Studio ne ofer conecs citim informaii din diverse surse, s transferm fiiere i s
torii i aciunile necesare acestui proces.
efectum operaii asupra lor. De asemenea, avem posibilitatea de a
Schimb de fiiere: Sarcinile de integrare pot necesita tranconecta componente specializate pentru a defini procese complexe
sferuri de date n cantiti mari. Acest lucru se realizeaz adesea
de integrare.
prin intermediul fiierelor. Un exemplu de astfel de fiier este
O bun parte din munca pe care o ndeplinim cu ajutorul
clasicul CSV (comma separated values). De asemenea, este
www.todaysoftmag.ro | nr. 25/Iulie, 2014

35

programare
Integrarea datelor ntre sisteme cu Talend Open Studio
posibil ca sistemul care primete fiierul de transfer s aib
nevoie de date ntr-un alt format. i acest caz este acoperit de
ctre Studio, fiindc ne d posibilitatea s definim procese care
efectueaz transformri asupra datelor transferate. n plus,
avem la dispoziie capabiliti de management al fiierelor, prin
operaii cum ar fi transferul prin FTP sau arhivarea.
Sincronizare: Sistemele care colaboreaz nu sunt conectate
ntotdeauna la acelai data repository, ceea ce nseamn c anumite informaii pot fi duplicate ntr-un ecosistem. n consecin,
avem nevoie s ne asigurm c acestea sunt sincronizate periodic. Acesta este cazul datelor despre clienii unei companii,
care pot fi prezente, spre exemplu, n sistemul de finane, cel de
distribuie sau n platforma CRM. Talend Open Studio poate
fi folosit pentru a realiza sincronizarea sistemelor, cu ajutorul
unor job-uri care automatizeaz procesul.
ETL: Acesta este un acronim pentru Extract, Transform,
Load, termeni care descriu un proces de baz pentru sistemele
data warehouse. Un astfel de proces extrage date din sisteme
operaionale, le transform aplicnd reguli sau funcii, iar apoi
le ncarc n data warehouse. Din nou, Talend Open Studio ne
face viaa mai uoar, ajutndu-ne substanial la implementarea
acestui tip de proces.

pe care am definit-o, fr ca noi s scriem vreo linie de cod. Tot


ce a trebuit s configurm n componenta de ieire a fost calea i
numele fiierului CSV.
Bineneles, putem extinde acest job, conectnd n continuare
alte componente, cum ar fi cele care lucreaz cu conexiuni FTP,
pentru a transfera fiierul nostru ctre sistemul int.

Concluzii

n seciunile anterioare am vzut pe scurt care este contextul


n care sunt realizate procesele de integrare, ce este Talend
Open Studio i care sunt beneficiile utilizrii acestui produs. De
asemenea, printr-un mic exemplu am ncercat s ilustrm simplitatea utilizrii Studio-ului, rapiditatea implementrii job-urilor i
s ne facem o prere despre capacitatea acestei platforme.

Exemplu

Pentru a ilustra uurina utilizrii acestei platforme, crem un


proiect cu un job care transform un fiier XML ntr-un fiier CSV.
Modelul grafic pentru acest job simplu este ilustrat n figura de
mai jos.

n partea stng avem o component de tip tFileInputXML,


iar n partea dreapt o component de tip tFileOutputDelimited.
Acestea sunt conectate printr-un conector Main. nainte de a trage
componenta de intrare n designer am definit un obiect metadata,
cruia i-am asociat un fiier XML. Studio-ul a detectat automat
schema documentului i ne-a dat posibilitatea s selectm ce
noduri s fie transferate ctre output. Prin intermediul conectorului Main, Talend a transferat ctre fiierul de ieire exact structura

36

nr. 25/Iulie, 2014 | www.todaysoftmag.ro

Dnu Chindri

danut.chindris@elektrobit.com
Java Developer
@ Electrobit Automotive

programare

TODAY SOFTWARE MAGAZINE

AOP i LinFu

n ultimele trei numere ale TSM, am descoperit lumea AOP folosind trei stack-uri diferite - .NET, Unity i PostSharp. Dac ne uitm
la aceste framework-uri cu un ochi critic, putem s observm c PostSharp este un framework extrem de robust care face magia
AOP-ului n momentul compilrii. Pe cnd Unity sau .NET stack insereaz toat aceast funcionalitate la runtime.

Run-time vs Build-Time

Este foarte important momentul n care aceast funcionalitate


este injectat deoarece poate s ne afecteze performana i modul
n care aplicaia noastr funcioneaz. n graficul de mai jos putem
s vedem o list cu aceste framework-uri n funcie de momentul
n care AOP este injectat n sistem.

utilizat de ctre framework-uri precum Unity pentru a oferi


aceast proprietate.
Cea mai mare diferen dintre RealProxy i un stack care ne
ofer AOP este din perspectiva proprietilor. Utilizarea RealProxy
n mod direct ne va cere s scriem toat funcionalitatea de care
avem nevoie aceasta se poate traduce n timp, bani i mai mult
cod care necesit mentenan (n cele din urm, nu dorim s reinventm roata).

Ce este LinFu

Este un set de librrii ce ne ofer suport de AOP plus alte


cteva funcionaliti precum. Mai jos gsii lista cu toate aceste
funcionaliti (am lsat denumirile n englez, deoarece traducerea n romn suna extrem de ciudat):
Aspect-Oriented Programming ,
Dynamic Proxies ,
Late Binding Mixins,
Universal Event Handling,
Closures with Lambda Arguments,
Dup cum putem observa n diagrama de mai sus, cel mai
Duck Typing,
robust framework i flexibil este PostSharp. Acesta injecteaz n
Design by Contract.
momentul compilrii tot ce este nevoie n cod pentru a putea
aduga funcionalitatea de care avem nevoie. Pe cnd un fraAm putea spune c LinFu este o colecie de funcionaliti
mework ca Unity nu va modifica codul generat de compilator, iar de care am avut nevoie mereu n .NET, dar nu le-am avut niciola runtime va injecta prin reflection i alte mecanisme cu aceast dat suportate de ctre .NET stack. Din aceast cauz am apelat
funcionalitate. Din punct de vedere a performanei, injectarea la la framework-uri precum LinFu sau Castle (dac nu ne-am scris
runtime a funcionaliti are un pre performana.
propiile noastre framework-uri).
n acest articol vom analiza caracteristicile LinFu- ului. Un
Caracteristica cea mai important a LinFu este uurina cu
framework de AOP este un framework hibrid, o combinaie ntre care poate s fie nvat. Acesta este un framework extrem de simtipul static i dinamic. Dar nainte s facem acest lucru, haidei s plu, care poate s fie nvat i integrat doar n cteva minute n
ne aducem puin aminte ce este AOP.
aplicaia noastr.
Dei LinFu are extrem de multe funcionaliti, noi ne vom
Recapitulare
concentra doar asupra celor care sunt legate de AOP. Ct despre
AOP este o paradigm de programare care are drept scop prin- celelalte funcionaliti, v las pe voi s le descoperii.
cipal creterea modularitii unei aplicaii. AOP ncearc s ating
acest scop prin permiterea separrii aspectelor secante (cross- De unde vine numele
cutting concerns) utiliznd interceptarea diferitelor comenzi sau
De unde credei c vine numele de LinFu? Un nume asiatic, al
cereri.
unui programator care a iniiat acest stack? Nu.
n ultimele articole am descoperit cum putem utiliza AOP
Language INdependent Features Underneath [.NET]
folosind Unity, PostSharp i proprieti .NET 4.5 (RealProxy).
La urma urmei LinFu este exact ce spune i numele su. O
Unity ne ofer posibilitatea de a nregistra aciunile care pot fi colecie de assembli-uri care extinde funcionalitatea pe care .NET
executate nainte i dup o aciune specific. Clasa RealProxy o are. Aceast funcionalitate este extins folosind librrii, fr s
este clasa principal n jurul tuturor acestor proprieti, care este modifice sintaxa limbajului, precum alte framework-uri de AOP.
www.todaysoftmag.ro | nr. 25/Iulie, 2014

37

programare
AOP i LinFu
DynamicProxy

DynamicProxy ne ajut s injectm la runtime cod i


funcionalitate n codul nostru fr s modificm aplicaia deja
existent. De exemplu, dac dorim s injectm un sistem de traceing sau audit far s fim nevoii s polum codul aplicaiei noastre.
LinFu ne permite s interceptm orice metod la runtime,
atta timp ct este virtual. Din pcate aceasta este o limitare pe
care o are LinFu i alte framework-uri de AOP. Metodele pe care
le interceptm trebuie s fie metode virtuale.
Interceptarea unei metode se poate face implementnd una din
cele dou interfee pe care DynamicProxy ni le pune la dispoziie
IInterceptor sau IInvokeWrapper.
public interface IInterceptor
{
object Intercept(InvocationInfo info);
}
public interface IInvokeWrapper
{
void BeforeInvoke(InvocationInfo info);
object DoInvoke(InvocationInfo info);
void AfterInvoke(InvocationInfo info,

object returnValue);
}

Calling Method (metoda apelat),


TypeArguments (tipul parametrilor),
Arguments ( valoarea parametrilor).
O alt caracteristic a acestui framework este constructorul
la interceptor, care primete ca parametru o referin la obiectul
propriu zis. Acest lucru se ntmpl deoarece LinFu are nevoie de
aceast referin pentru a putea intercepta apelul i a suprascrie
metoda virtual pe care noi vrem s o interceptm. Pn la urma,
LinFu doar redirecteaz apelurile spre un proxy intern.
Tot ce ne-a mai rmas de fcut este s facem legtura ntre cele
dou clasa Foo i interceptor. Acest lucru realizndu-se n felul
urmtor:
ProxyFactory factory = new ProxyFactory();
Foo foo = new Foo();
FooInterceptor fooInterceptor = new
FooInterceptor(foo);
Foo customFoo = factory.CreateProxy<Foo>(interceptor);

Da, codul de mai sus nu arat tocmai foarte frumos, dar poate
foarte s fie foarte uor pus ntr-o metod generic i s nu mai fie
nevoie s ne batem capul cu acest setup. Odat ce avem o referin
la customFoo putem s apelm fr nici o problem metoda Do.
Dup cum putem observa din definiia celor doua interfee,
Se poate observa foarte clar diferena major ntre PostSharp i
putem doar s interceptm apelul sau s avem un control direct LinFu. PostSharp nu cere folosirea unui proxy, deoarece face totul
nainte de apel, dup apel sau chiar n momentul apelului i s n momentul compilrii genernd un cod IL care are deja acest
apelm cu totul alt metod.
hook. Pe cnd LinFu are nevoie de o configurare din cod.
n exemplul de mai jos interceptm metoda Do din clasa Foo
i logm apelul, far s apelm o alt metod, dect cea original IProxy
din clasa Foo.
Un lucru foarte interesant la LinFu este interfaa IProxy i n
public class Foo
special
proprietatea Interceptor. n momentul n care generm
{

public virtual int Do(int a, int b)
un proxy avem o referin la aceast interfa. Folosind proprieta {
tea amintit mai sus, putem s schimbm la runtime interceptorul,
return a+b;
}
fr s fim nevoii s generm un nou proxy sau s schimbm ceva.
}
public class FooInterceptor : IInvokeWrapper
{
private Foo _target;
public FooInterceptor(Foo target)
{
_target = target;
}
public void BeforeInvoke(InvocationInfo info)
{
Trace.WriteLine(Before Do() called);
}

public object DoInvoke(InvocationInfo info)


{
object result = null;
result = info.TargetMethod.Invoke(_target,
info.Arguments);
return result;
}

public void AfterInvoke(InvocationInfo info,


object returnValue)
{
Trace.WriteLine(After Do() called);
}

IProxy proxy = (IProxy) customFoo;


proxy.Interceptor = fooInterceptor2;

Acest lucru se ntmpl deorece CreateProxy ne returneaz o


instan a obiectului nostru uor modificat. Aceasta implementeaz interfaa IProxy i extinde clasa noastr (n cazul nostru
Foo).
Ceea ce se genereaz de CreateProxy arat asemnator cu:
public class FooProxy : Foo, IProxy
{


public ovverite int Do(int a, int b)
{

}

}

Performan

Din punct de vedere a performanei, LinFu este mult mai rapid


ca Castle sau Unity, dar nu se poate compara cu PostSharp. LinFu
}
este extrem de folositor n momentul n care avem foarte multe
Dac dorim s apelm o alt metod sau s facem ceva spe- metode pe care dorim s le controlm prin intermediul unui AOP
cific n momentul apelului, trebuie s adugm cod n metoda framework.
DoInvoke. Putem chiar s apelm cu totul o alt metod, fr
s mai apelm metoda de baza din Foo. Acest lucru se poate Limitri
face dac tergem linia de cod care face apelul propriu zis info.
LinFu poate s ofere suport de AOP doar pentru metodele
TargetMethod.Invoke().
virtuale. O metod care nu este marcat ca virtual sau face parte
Clasa InvocationInfo conine toat informaia de care avem dintr-o clas sealed, nu poate s fie controlat.
nevoie:
Target (instana proxy-ului),
Liceniere
TargetMethod (metoda apelat),
Acesta este un framework sub licena GNU. Putem s l folosim
StackTrace (stack-ul n momentul apelului),
i s l modificm fr nici un fel de probleme.

38

nr. 25/Iulie, 2014 | www.todaysoftmag.ro

TODAY SOFTWARE MAGAZINE


Concluzie

Acesta este ultimul articol despre AOP. n cele patru articole


pe care le-am citit pn acuma despre AOP, am descoperit diferite mecanisme prin care putem s avem suport AOP n aplicaia
noastr. Fiecare framework are avantaje i dezavantaje. Putem
spune c PostSharp este cel mai complet, avnd cele mai multe
funcionaliti i cea mai bun performan, doar c acest lucru
vine cu un cost. PostSharp nu este gratis.
n tabelul de mai jos putem s vedem funcionalitile
suportate de fiecare framework de AOP:
PostSharp

LinFu

Castle
(Sprint .NET)

Unity

M e t h o d
Interception

Yes

Yes

Yes

Yes

Private/Sealed
Member Interception

Yes

Yes

No

No

E v e
Interception

Yes

No

No

No

M e m b e r
Introduction

Yes

No

No

No

Radu Vunvulea

Radu.Vunvulea@iquestgroup.com
Senior Software Engineer
@iQuest

www.todaysoftmag.ro | nr. 25/Iulie, 2014

39

programare

Securizarea codului Open source (II)

up cum am menionat anterior n aceast lucrare, rulm Klocwork Insight peste nucleul Linux (versiunea 2.6.32.9) i analizm rezultatele analizei noastre. Versiunea Klocwork Insight utilizat pentru aceast analiz a fost 9.2.0.6223. Figura 3 arat
verificatorii Klocwork pe care i-am utilizat pentru a analiza codul surs C/C++. Acestea sunt de fapt ,,familii de verificatori
sau ,,categorii, deoarece fiecare dintre aceste 3 elemente (din figura 3) conine un numr de verificatori individuali.
Aceti verificatori au fost validai pe Klocwork pentru analiza
noastr pentru a identifica toate problemele semnificative din
codul surs care este analizat. Metricile proiectului raportate de
Klocwork dup analizarea codului Linux kernel (2.6.32.9) sunt
indicate n tabelul 1.
TABELUL 1
METRICILE PROIECTULUI RAPORTATE PENTRU SCA A
NUCLEULUI LINUX
Numr total de fiiere

13999

Numr total de fiiere C/C++ analizate

13868

Numr total de fiiere de sistem analizate

131

Total linii de cod (Surs LOC)

4309863

Total linii de comentarii

1358746

Numr total de entiti

944835

Numr total de funcii / metode

162814

Numrul total al claselor / tipurilor

42797

Fig.3 Verificrile Klocwork pentru codul C/C++

n urmtoarele dou seciuni vom prezenta analiza


vulnerabilitii i analiza complexitii nucleului Linux, dup efectuarea SCA pe codul Linux kernel.

Analiza vulnerabilitii

Anumii identificatori ai Vulnerabilitilor i Expunerilor


Comune (CVE) pentru vulnerabilitile de securitate a
informaiilor publice pentru numeroase versiuni ale Linux

40

nr. 25/Iulie, 2014 | www.todaysoftmag.ro

kernel, inclusiv versiunea 2.6.32.9 sunt prezentai n tabelul 2.


Vulnerabilitile enumerate n tabelul 2 nu sunt n nici un caz
complete, ci sunt o submulime a vulnerabilitilor publicate n
National Vulnerability Database (NVD), dup lansarea versiunii
2.6.32.9 a nucleului Linux. Lansarea versiunii 2.6.32.9 a nucleului Linux a fost anunat n februarie 2010. Vulnerabilitile
enumerate n tabelul 2 au fost publicate n NVD ntre lunile
februarie 2010 i iulie 2011, ceea ce constituie perioada noastr
de luare de probe. NVD este depozitul guvernului Statelor Unite
de date de management al vulnerabilitilor bazat pe standarde,
reprezentate prin Security Content Automation Protocol (SCAP).
Aceste date permit automatizarea managementului vulnerabilitii
, msurarea securitii i conformitatea. NVD include baze de date
ale tabelelor de control securitate, defecte software legate de securitate, configuraii greite, nume de produse i metrici de impact
(13).
Prin efectuarea SCA pe versiunea Linux kernel anterior
menionat, noi putem identifica vulnerabilitile prezentate n
tabelul 2. Mai mult, aceste vulnerabiliti identificate folosind SCA
reprezint aproximativ 10% din toate vulnerabilitile Linux kernel (v2.6.32.9) raportate ntre februarie 2010 (lansarea versiunii
Linux kernel 2.6.32.9) i iulie 2011 (sfritul perioadei noastre de
prob) n NVD. Chiar dac nu toate vulnerabilitile publicate n
NVD care corespund versiunii 2.6.32.9 a Linux kernel au putut fi
detectate numai prin analiza static, procentul de 10% din probleme, pe care SCA a fost n stare s le identifice, dup cum arat
tabelul 2, include un numr semnificativ de probleme de securitate
i calitate. Din acest 10% vulnerabiliti, aproximativ 22.3% au fost
clasificate drept ,,Ridicate, 44.3% au fost considerate ,,Medii i
33.3% au fost apreciate drept ,,Sczute pe Sistemul de Evaluare al
Vulnerabilitilor Comune (CVSS). Acest exerciiu indic cu succes faptul c anumite vulnerabiliti (dup cum se arat n tabelul
2) din nucleul Linux (inclusiv versiunea 2.6.32.9), publicate nc
din iulie 2011 n NVD, ar fi putut fi detectate mult mai devreme,
dac s-ar fi efectuat mai devreme o analiz static i o revizuire
srguincioas.
Un alt factor important de luat n considerare este tipul
vulnerabilitilor care pot fi identificate prin SCA. Tipurile de
vulnerabiliti pe care SCA a reuit s le detecteze n experimentul
nostru includ buffer overflows, integer overflows/underflows, eroare
integer signedness i iniiere memorie necorespunztoare. Acestea
sunt cteva din vulnerabilitile care au fost exploatate frecvent pentru a lansa atacuri maliioase asupra diverselor aplicaii
software. De exemplu, anomaliile buffer overflow au o tradiie n a
fi exploatate de ctre virui ai computerelor precum virusul Morris
(1988) sau mai recent virusul Conficker (2008). Merit efortul de
a identifica asemenea virui de timpuriu atunci cnd incorporm
cod opensource n codul patentat, de vreme ce experimentul nostru demonstreaz c SCA are capacitatea de a detecta un numr

TODAY SOFTWARE MAGAZINE


semnificativ de astfel de virui i este un factor motivant puternic
s efectuezi SCA pe codul opensource adoptat.
TABELUL II. VULNERABILITILE LINUX KERNEL
DETECTATE DE SCA
Dincolo de faptul c a reuit s detecteze aceste vulnerabiliti
cunoscute dinainte, instrumentul SCA a fost capabil s semnaleze
anumite probleme critice din cod, care ar putea necesita o investigare suplimentar pentru a evalua veridicitatea lor i gradul n
care pot fi exploatate. Chiar dac exploatabilitatea unora dintre
aceste vulnerabiliti nu poate fi justificat numai prin analiza
static, este n interesul oricrui vnztor de software s rezolve
aceste probleme nainte ca software-ul s fie lansat pe pia. Acest
lucru stabilete importana efecturii SCA pe codul surs pentru
a identifica i repara anumite probleme de codare de timpuriu,
spre deosebire de a atepta comunitatea opensource s identifice
i s raporteze aceste probleme, deoarece, cu ct o vulnerabilitate
sau un virus pot fi detectate mai devreme, cu att mai ieftin este

neincluse n categoriile de mai sus.

Figura 4. Numrul vulnerabilitilor per categorie semnificativ a Linux Kernel (v2.6) publicat n NVD (anii 2010- 2011).

O privire rapid peste NVD arat c cele mai multe


vulnerabiliti publicate (ntre anii 2010 i 2011) pentru nucleul
Linux au loc n componentele ,,networking ale nucleului, urmate
de componentele ,,drivere i ,,filesystems, dup cum se poate
vedea n Figura 4. Acest lucru poate fi atribuit faptului c grupul network, care, bineneles, are de a face cu capacitile de
networking, este unul dintre componentele cel mai frecvent
exploatate ale nucleului Linux. Acest lucru este compatibil cu
,,propunerea atrgtoare de a lansa atacuri izolate i, de aceea,
mulimea network este o int obinuit pentru exploatare, ceea
ce ar putea justifica numrul crescut de vulnerabiliti care sunt
raportate.

Analiza complexitii

s le repari.
Pentru a analiza ce componente ale nucleului Linux au mai
mare incidena de vulnerabiliti raportate, separm fiierele
nucleului n ase categorii importante, care sunt urmtoarele (12):
Core (Nucleu): Acesta include fiierele din subdirectoarele
init, block, ipc, kernel, lib, mm i virt.
Drivers (Drivere): Acesta include fiierele din subdirectoarele crypto, drivers, sound, security, include/acpi, include/
crypto, include/drm, include/media, include/mtd, include/pcmcia, include/rdma, include/rxrpc, include/scsi, include/sound, i
include/vide.
Filesystems (Sisteme fiiere): Acesta include fiierele din subdirectorul fs.
Networking (Reea): Acesta include fiierele din subdirectoarele net i include/net.
Architecture-specific (Specifice arhitecturii): Acesta include
fiierele din subdirectoarele arch, include/xen, include/mathemu, i include/asm-generic.
Miscellaneous (Diverse): Acesta include tot restul fiierelor

De obicei, instrumentele SCA pot calcula parametrul


complexitii pentru programele pe care le analizeaz. Pe scurt,
parametrul complexitii msoar numrul deciziilor care exist
ntr-un program; msoar n mod direct numrul cilor independente liniare prin codul surs al unui program. Cu ct exist mai
multe decizii posibile de luat n timpul rulrii, cu att sunt posibile
mai multe direcii de date. Institutul Naional al Standardelor i
Tehnologiei (NIST) recomand programatorilor s calculeze complexitatea modulelor pe care le dezvolt i s le separe n module
mai mici ori de cte ori complexitatea ciclomatic a modulului
depete 10. Dar n anumite circumstane, poate fi adecvat lrgirea restriciei i ngduirea modulelor cu o complexitate pn la
15, dac este oferit o explicaie n scris a motivelor pentru care
a fost depit limita (9). Un parametru ridicat de complexitate
face aproape imposibil ca un programator uman s poat urmri
toate cile posibile, iar de aici rezult probabilitatea crescut ca
programatorul s introduc un defect nou atunci cnd codul este
modificat sau cnd se adaug cod nou. Dac complexitatea ciclomatic a programului este mai mare de 50, un asemenea program
este considerat ne-testabil i avnd un risc foarte mare. Studiile
arat o corelare ntre complexitatea ciclomatic a programului
i mentenabilitatea i testabilitatea sa, sugernd c la fiierele cu
complexitate mai mare exist o probabilitate mai mare de erori
atunci cnd se repar, se mbuntete sau se reutilizeaz codul
surs. ntr-un proiect opensource similar lui Linux, cea mai mare
parte a efortului de dezvoltare este comunicat prin liste de adrese.
Dezvoltatorii sunt mprtiai n jurul lumii i prezint niveluri
variate de abiliti de dezvoltare software. De aceea, aceast situaie
ar putea reprezenta o sarcin provocatoare pentru orice entitate
central responsabil cu coordonarea eforturilor de dezvoltare.
www.todaysoftmag.ro | nr. 25/Iulie, 2014

41

programare
Securizarea codului Open source (II)
Numrul metodelor cu o complexitate mai mare de 20
coninute n componentele nucleului Linux este ilustrat n figura
5. Raportul de complexitate medie (Complexitatea maxim a
metodelor / Numrul total de metode) pentru metodele cu o
complexitate mai mare de 20 per categorie semnificativ a nucleului Linux este ilustrat n figura 6. Prima coloan din figura 6
reprezint complexitatea medie pentru ntregul nucleu Linux
(v2.6.32.9), n timp ce restul coloanelor reprezint complexitatea
medie pentru componentele semnificative coninute de nucleul
Linux. Din figura 6 reiese n mod evident faptul c complexitatea
medie pentru componentele individuale importante din Linux
kernel este mult mai mare (peste 2x) dect complexitatea medie
pentru ntregul Linux kernel. O privire rapid prin NVD arat c
cele mai multe vulnerabiliti publicate pentru nucleul Linux se
gsesc n componentele care conin un numr mare de metode
de complexitate crescut care cel mai adesea includ componentele ,,drivers, ,,filesystems i ,,networking, dup cum se arat
n Figura 4.
Mrimea procentului per categorie semnificativ din nucleul
Linux (versiunea 2.6) este ilustrat n figura 7. Numrul de linii
modificate per categorie important din nucleu Linux (versiunea 2.6) este artat n figura 8. Este interesant de observat c, n
ciuda faptului c componenta ,,networking a nucleului Linux
conine un numr mai mic de metode de complexitate ridicat
( din figura 5) i mai puine Linii de Cod (LOC) (din figura 7) n
comparaie cu componentele ,,drivers i ,,filesystems, o majoritate a vulnerabilitilor publicate n NVD au loc n componenta
,,networking (din figura 4). Motivul pentru aceasta a fost discutat
n seciunea anterioar despre analiza vulnerabilitii. Mai mult,
chiar dac componenta ,,networking a nucleului Linux conine
mai puine linii de cod, complexitatea medie (din fig.6) pentru
componenta ,,networking este cea mai ridicat n comparaie cu
alte componente ale Linux kernel, ceea ce sugereaz c componentele ce au o complexitate ridicat tind s conin un numr
mai mare de erori. Un alt lucru interesant de notat se refer la
componenta ,,architecture-specific a nucleului Linux care are un
numr mai mic de metode de complexitate ridicat (din fig.5), are
mai multe linii de cod (din fig.7) i a suferit un numr important
de modificri n liniile de cod (din fig.8). n plus, complexitatea
medie (din fig.6) pentru componenta ,,architecture-specific este
ridicat, ceea ce sugereaz c acele componentele care primesc un
numr mare de modificri n liniile de cod tind s aib o complexitate mai mare.

Figura 6. Raportul de complexitate medie (Complexitatea maxim


a metodelor / Numrul total al metodelor) pentru metodele cu o complexitate >20 per categorie semnificativ a Linux kernel (v2.6)

Figura 7. Mrimea procentajului per categorie semnificativ a Linux kernel (v2.6)

n general, din analiza noastr, observm urmtoarele tipare:


Probabilitatea ridicat de erori n componentele cu o complexitate mai mare (din fig. 4, 5 i 6), de exemplu componentele
,,drivers, ,,filesystems i ,,architecture-specific.
Componentele complexe cu un numr mai mare de linii
de cod au primit un numr mai mare de modificri de cod i
actualizri (din fig.7 i 8), de exemplu componentele ,,drivers i
,,architecture-specific.
Componentele critice, cum ar fi ,,networking, tind s prezinte incidene mai mari de erori raportate (din fig. 4).
Prin observarea acestor tipare, am putea s concentrm aria
de acoperire a SCA asupra acestor componente critice ale codului,
ceea ce vom explica n seciunile urmtoare.

Raghudeep Kannavara

raghudeep.kannavara@intel.com

Figura 5. Numrul de metode cu complexitate >20 per


categorie semnificativ a Linux kernel (v2.6)

42

nr. 25/Iulie, 2014 | www.todaysoftmag.ro

Security Researcher, Software


and Services Group
@Intel USA

diverse

TODAY SOFTWARE MAGAZINE

Gogu i Btrnu lui Miu

- No, mii de buciume i bte s le zc de dor! rbufni Miu


cu ciud. Cu ciud numai pentru cei care-l cunoteau foarte
bine, altfel - pentru un strin ar fi prut o simpl constatare,
mprtit calm dar apsat, cu vocea n surdin. Evident, nu
era cazul lui Gogu, care privi stupefiat spre Miu, nevenindu-i s
cread c a reuit cineva s-l scoat - pe Miu! - din starea lui
de molcom nelegere i total detaare de vltoarea lumii din
jurul lui. Se pare ns c, ntr-un final, imposibilul se produse,
i vltoarea reuise s-l agae i pe el , i zise Gogu, oarecum
nciudat.
- Buciume, bte i opinci n spinare, sublinie Miu, la fel de
molcom, dar puin mai apsat de aceast dat. Gogu nu mai putu
s se abin:
- Probleme, Miule?!
Miu ridic privirea spre Gogu, i zmbi cald i consimi:
- s ceva probleme... Incredibil, sta ar fi n stare s-i zmbeasc
i plutonului de execuie, gndi Gogu i mai puse un lemn pe foc:
- De natur s te enerveze?
- No, mi-o venit s le zc vreo doua aa... da mi-o trecut.
Numa nu tiu cum oi rezolva.
- Pi ia s-aud i eu, poate o scoatem mpreun la capt, se oferi
Gogu, nu de alta dar l sfredelea curiozitatea.
-Api s vezi, tii c m-o pus efu manager de proiect...
- tiu, i tie Gogu vorba, toat firma tie, ne-ai astenizat pe
toi. Noaptea dac ne trezeti, sta-i primu lucru care ne vine n
minte. Vzu faa profund jignit a lui Miu i continu pe un tot
mai cald: Hai, spune, s vedem care e problema.
- Tu tii c sta i un proiect diferit...
- Toate proiectele sunt diferite, c de-aia le cheam proiecte,
nu se putu Gogu abine.
- Bine c eti tu detept, nu se ls Miu mai prejos, dar cum
subiectul era mult prea important pentru el, se decise s ignore
remarcile lui Gogu i s continue. tii ce-am vrut s spun: c fa
de proiectele noastre uzuale de outsourcing, sta - care lanseaz
un produs nou are cu totul alte caracteristici, alte cerine,
alte constrngeri; nu avem doar dezvoltare, ci i elemente de

marketing. Adic e mult mai complex.


- Auzi, dac iar o iei de la Ana la Caiafa, i m zpceti cu
complexitatea, stakeholderii i-alte alea, te rog s cni la alt
mas.
Faa lui Miu exprima uluial n form pur: Cum adic s
cnt? Spuse el rar, foarte rar, ncercnd s cuprind sensul celor
spuse de Gogu. Ce-are a face una cu alta?
sta nu mai nva, frate, i zise Gogu n gnd, unde-o
fi crescut, la stn? Ha-ha-ha, se trezi rznd tare, spre totala
stupefacie a lui Miu. Pi chiar c la stn! Ha-ha, nu se putu
opri din rs. Miu nu pricepea care e motivul rsului sntos al lui
Gogu, dar intuia c e cumva vorba de el. Aa c i ncruci
braele la piept artnd c ateapt clarificri. Pe care le atept destul de mult, lui Gogu lundu-i ceva vreme pn s se domoleasc.
- Gata, Miule, iart-m, nu mai fac, zi-i mai departe.
Se dovedi c problema nu era deloc complicat - greiser unii
nite materiale de promovare -, dar se agravase datorit ntrzierii
n rezolvare. Abordarea nu excelase n diplomaie, comunicarea
s-a realizat exclusiv prin e-mailuri, iar tonul acestora devenise din
ce n ce mai dur pe msur ce ping-pong-ul epistolar se prelungise.
Se deraiase demult de la problem, ultimele e-mailuri rezumndu-se la ameninri destinate persoanelor, sursa discuiilor i
problema n sine fiind deja uitate.
- i-acum vin i te-ntreb pe tine, Gogule, eu cum rezolv problema asta?! C ntre timp tot restul proiectului a mers nainte, iar
noi avem lansarea oficial peste trei zile. Online-ul a mers strun,
dar prezentarea live presupune i toate materialele astea... Ufff, oft
el, un oftat venit din adncul sufletului lui de ardelean care nu
nelegea cum pot s-i aduc nite cuvinte attea probleme.
- Hi-hi... adictelea tu crezusei c s-a terminat totul i poi
considera proiectul nchis?! Ha-ha, se vzuse cu sacii n cru!
Mi, Miule, ori tu nu tii vorba aceea: primele 90 de procente din
proiect se fac n 90% din timp, iar pentru ultimele 10 procente mai
ai nevoie de alte 90% de timp... ha-ha...
- Auzi , Gogule, n-oi ti-o io pe asta, da o tiu pe-ailalt, aia
de zice c mi trebe 42 de muchi s m ncrunt, 28 s zmbesc,
www.todaysoftmag.ro | nr. 25/Iulie, 2014

43

diverse
Gogu i Btrnu lui Miu
da numa 4 s-mi ntind braul i s te pocnesc n plin figur...
Gogu se uit rapid la el dar se liniti, Miu era n continuare
cu zmbetul pe fa. Mda, cnd n-o mai zmbi, vom avea cu toii
de furc, gndi Gogu, calculndu-i ansele n faa unei posibile
locomotive Miu, concluzionnd rapid c nu i-ar dori nimeni
s-l enerveze vreodat pe colosul ardelean. Care colos tie ns
s se joace cu atta dezinvoltur cu copiii, i aduse aminte Gogu
vacana ce abia se terminase. i atunci avu revelaia!
- Auzi, Miule, ii minte cum te-ai jucat sptmna trecut de-a
castelanul care i repar fortificaiile nainte de atacul inamicului?
Uor surprins de ntorstura discuiei, Miu i reveni repede
i ddu vesel, dar i foarte mndru, din cap a aprobare. Fuseser
mpreun n concediu la mare, prima ieire a lui Miu la soare grecesc, mare turcoaz i nisip alb, strlucitor. Intervenise o situaie i
soia lui Gogu fusese nevoit s rmn acas, iar Gogu nu avusese
sufletul s i refuze copilului o vacan la care cel mic visa de luni
de zile. Aa c i propuse lui Miu s-i nsoeasc. i ceea ce fusese
o invitaie fcut mai mult ntr-o doar, devenise o super vacan
pentru Miu i copil, care s-au distrat mpreun incredibil de
bine.
Miu rememor secvena cu reparatul fortificaiilor n nisipul
grecesc i faa i se lumin.
- Adic, zici tu, c ce-a mers cu fi-tu, merge i-aici? Pi e
corect, sigur c-ar merge, stai aa, c tiu exact ce trebe s fac... i
se ntoarse spre calculator, ignorndu-l total pe Gogu.
- Mai concret, ce-a fcut Miu cu fi-tu? Gogu l vzu pe efu
cu o secund nainte ca acesta s-i fac cunoscut prezena prin
ntrebarea aruncat optit, parc fr a vrea s-l deranjeze pe Miu.
Nu c sta ar auzi ceva dac se afund el ntr-ale lui, poi s tragi
cu tunu la urechea lui i el te ignor total, remarc Gogu n gnd,
apoi continu cu voce tare:
- Ei, m czneam s-l scot din ap pe copil, iar el nu i nu,
c de-aia merge omu la mare s fac baie. i di cu vorba bun,
d-i cu ameninri, s-a ajuns la strigte (eu) i ignorare complet
(el), cuvinte grele (eu), las c-i spun eu mamei ce-ai zis (el), ce
mai, rzboi total. i n mijlocul luptei, numai ce-l aud pe Miu,
cu calmul la de ne scoate pe noi din mini, spunndu-i copilului
c are nevoie de ajutor la construcia lui mirific din nisip, c nu
se mai descurc singur cu nu--ce fortificaie, ori zid de aprare,
ce-o fi fost. Iar al meu iese instant din ap i se apuc de lucru.
Abia peste vreo cinci minute mi-am revenit i mi-am aezat la loc
falca czut... Evident, seara mi-am avut poria de introducere n
psihologia copilului, viziunea Miu sle Btrnu lui Miu...
-Hmm, nu e rea viziunea asta, zmbi efu. Presupun c pn
desear avem i poria de Introducere n viziune... S m ii la
curent.
***
Introducerea n viziune veni ns mult mai trziu, respectiv la edina de nchidere a proiectului, la vreo dou sptmni
dup lansarea oficial a noului produs; o lansare ncununat de
succes i care a adus felicitri ntregii echipe coordonate de Miu.
La edin, Miu a cerut fiecrui membru al echipei s spun trei

44

nr. 25/Iulie, 2014 | www.todaysoftmag.ro

lucruri: ce crede c a mers bine, ce crede c n-a mers bine i, n


final, ce-ar face altfel dac ar fi s ia proiectul de la capt. efu a
vrut s afle cum s-a rezolvat problema cu print-urile eronate,
declannd viziunea:
- No, c n-o fost bai mare. Oamenii erau suprai c nu s-or
neles ei pe e-mailuri, cine o fo vinovat, cine ce-o zis i ce-o cerut,
de unde s-o plecat i pe cine s pedepsim. Pe mine Btrnu meu
aa m-o nvat: s caut numa care i problema i pe aia s-o rezolv.
Nu era problema mea cine ce-o-nceput, ci cum or ajunge materiale corecte la lansare. Aa c am scris un e-mail frumos n care
i-am rugat s m ajute s pot s m in de data anunat pentru
evenimentul oficial i s mi trimit materialele corecte direct la
zona expo. Ceea ce or i fcut, iar eu le-am mulumit. C-aa m-o
nvat Btrnu, zicea el c omu mai repede reacioneaz la o
cerere de ajutor dect la o indicaie...

Simona Bonghez, Ph.D.

simona.bonghez@confucius.ro
Speaker, trainer and consultant
in project management,
Owner of Colors in Projects

sponsori

powered by