Sunteți pe pagina 1din 46

Nr. 20 Februarie 2013 www.todaysoftmag.ro www.todaysoftmag.

com

TSM

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

Craftsmanship si Lean Startup Cum s (nu) msurm latena

Interviu cu Radu Georgescu Interviu cu Alexandru Tulai Cum s (nu) msurm latena Thinking in Kanban Pitching n business reclama ntreprinztorilor de azi O privire de ansamblu asupra testrii performanei aplicaiilor Desktop

Interviu cu Philipp Kandal Metrici n Visual Studio 2013 Clusterul Cluj IT i Antreprenoriatul New business development analysis Multithreading n standardul C++11 (II) Startups: Evolso

6 IT Innovation Days 2014


Ovidiu Man

28 Restricted Boltzmann Machines


Roland Szabo

7 Interviu cu Philipp Kandal


Ovidiu Man

30 Maven, The Definitive Guide


Silviu Dumitrescu

9 Evolso
Alin Stnescu

31 Multithreading n standardul C++11 (II)


Dumitria Munteanu

11 O privire de ansamblu asupra testrii performanei aplicaiilor Desktop


Sorin Lungoci

34 Metrici n Visual Studio 2013


Radu Vunvulea

15 Software Craftsmanship i Lean Startup


Alexandru Bolboaca i Adrian Bolboac

36 Cum s (nu) msurm latena


Attila-Mihaly Balazs

17 Vagrant pentru nceptori


Carmen Fril

39 Thinking in Kanban
Psk Orsolya

22 Startup marketing: provocri i repere


Sorina Mone

40 New business development analysis


Ioana Matei

24 Clusterul Cluj IT i Antreprenoriatul


Daniel Homorodean

42 Pitching-ul n business: cum s vinzi n patru pai simpli


Ana-Loredana Pascaru

26 Interviu cu Radu Georgescu


Ovidiu Man

44 Gogu i velierul
Simona Bonghez, Ph.D.

editorial

Ovidiu Man, PMP

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

uvntul innovation plasat pe coperta revistei anun tema acestui numr, startups & innovation. Dar cuvntul a fost ales i pentru a marca simbolic intrarea ntr-o nou etap a IT-ului autohton, aceea a inovrii. Dac acum civa ani execuia i performana erau printre cei mai vehiculai termeni, asistm acum la un ascendent fr precedent n piaa romneasc al termenului de inovaie. Aceast nou tendin reflect o evoluie a mentalitii antreprenorului romn, care devine din ce n ce mai contient de capacitatea sa de a se metamorfoza dintr-un executant ntr-un creator de produse. Asumarea noului statut trebuie s in cont de o stare de fapt pe care sugestiv o sintetizeaz Radu Georgescu ntr-un interviu acordat la How To Web 2013: outsourcing nseamn vnzarea de ore de lucru, iar produsul nseamn s vinzi acelai produs de o mie de ori. Sfatul pe care acesta l d pentru firmele de outsourcing este s ncerce s creeze mici echipe de dezvoltare a unor produse proprii. Conceptul de inovare (eng. innovation) poate avea multe forme. O simpl cutare a acestui cuvnt pe site-ul revistei www.todaysoftmag.ro ne d cteva dintre faetele sale posibile: Innovation in Big projects, Inovarea n IT, proiect public-privat, conectarea tehnologiilor inovative la piaa global, Lead Six Sigma i managementul inovaiei. Acestea sunt doar cteva dintre abordrile care dezvluie totodat posibilitiile nelimitate de referin ale acestui concept. Ca o completare menit s argumenteze materializarea spiritului inovativ menionat n rndurile de mai sus, realizm o trecere n revist a evenimentelor care au ca tem principal inovaia: Startup Weekend Cluj - cel mai important eveniment local dedicat crerii de noi startup-uri. Echipa desemnat ctigtoare n 2013 a fost Omnipaste aka Cloud Copy care se afl n prezent n acceleratorul Deutsch Telekom Hub:raum; Startup Pirates - un eveniment nou ce ofer mentorat celor ce doresc s i creeze un startup; Cluj Innovation Days - organizat de Cluj IT Cluster i propune ca pe durata a dou zile s ofere participanilor trei sesiuni paralele de prezentri pe aceast tem; Innovation Labs 2.0 - este un hackaton organizat n Bucureti i n Cluj. Aadar v invitm s luai i voi parte la aceste evenimente unde sperm c vom vedea exprimate idei revoluionare care s aduc beneficii pieei romneti. Ediia de fa a revistei v propune o serie de interviuri cu Radu Georgescu, Philipp Kandal i Alexandru Tulai precum i detalii despre evenimentele prezentate mai sus. ncepem primul articol tehnic al revistei pe tema testrii i anume: O privire de ansamblu asupra testrii performanei aplicaiilor Desktop, urmat de Craftsmanship si Lean Startup ce propune dou posibile faze de dezvoltare ale unei aplicaii din perspectiva unui antreprenor: descoperirea i implementarea. Vagrant este titlul unui alt articol cu tematic tehnic precum i denumirea unui tool puternic atunci cnd avem de-a face cu gestionarea mainilor virtuale. Articolul din acest numr reprezint o introducere precum i o privire de ansamblu a posibilitiilor acestuia. Urmeaz o nou serie de articole tehnice: Restricted Boltzmann Machines, recenzia crii Maven, The Definitive Guide i Cum s (nu) msurm latena. Startup marketing: provocari si repere ofer cteva sfaturi tinerilor antreprenori despre cum ar trebui s fie fcut marketingul avnd resurse limitate. Un alt articol dedicat startup-ului este cel cu titlul Clusterul Cluj IT i Antreprenoriatul care prezint implicarea Cluster-ului n sprijinirea antreprenoriatului. Articolele dedicate managementului continu cu Thinking in Kanban, New business development analysis, Pitching n business - reclama ntreprinztorilor de azi. n ncheiere, doresc s v menionez c numrul 20 al Today Software Magazine marcheaz doi ani de existen a revistei. Mulumim c ai fost alturi de noi i v promitem n continuare multe ediii cel puin la fel de interesante !!! V dorim o lectur plcut !!!

Fondator al Today Software Magazine

Ovidiu Man

nr. 20/Februarie | 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 Copyright/Corector: Emilia Toma emilia.toma@todaysoftmag.com

Lista autorilor
Alexandru Bolboaca Daniel Homorodean

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

daniel.homorodean@clujit.ro Membru n Consiliul Director @ Cluj IT Cluster

Radu Vunvulea

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

Roland Szabo

roland.szabo@3pillarglobal.com Junior Python Developer @ 3 Pillar Global

Attila-Mihaly Balazs

Traductor: Roxana Elena roxana.elena@todaysoftmag.com Reviewer: Tavi Bolog tavi.bolog@todaysoftmag.com

dify.ltd@gmail.com

Sorina Mone

sorina.mone@fortech.ro Marketing manager @ Fortech

Code Wrangler @ Udacity Trainer @ Tora Trading

Dumitria Munteanu

Reviewer: Adrian Lupei adrian.lupei@todaysoftmag.com Contabil : Delia Coman delia.coman@todaysoftmag.com

dumitrita.munteanu@arobs.com Software engineer @ Arobs

Adrian Bolboaca

adrian.bolboaca@mozaicworks.com Programmer. Organizational and Technical Trainer and Coach @Mozaic Works Silviu Dumitrescu silviu.dumitrescu@msg-systems.com Consultant Java @ msg systems Romania

Sorin Lungoci

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

Produs de

sorin.lungoci@isdc.eu Tester @ ISDC

Carmen Fril Ana-Loredana Pascaru


ana.pascaru1@genpact.com Training Manager @ Genpact

carmen.fratila@3pillarglobal.com Software engineer @ 3Pillar Global

Alin Stnescu

Stanescu.Alin91@yahoo.com Project manager @ Evolso

Psk Orsolya

pusok.orsolya@evoline.ro Functional Architect @ Evoline

Ioana Armean

ioana@ogradamea.ro Project Manager @ Ogradamea

Simona Bonghez, Ph.D.

simona.bonghez@confucius.ro Speaker, trainer i consultant n managementul proiectelor, Owner al Colors in Projects

Copyright Today Software Magazine


Ovidiu Man, PMP

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

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

www.todaysoftmag.ro | nr. 20/Februarie, 2014

interviu

IT Innovation Days 2014

Ovidiu Man: Cluj IT Cluster organizeaz n perioada 20 21 martie cea de-a doua ediie a evenimentului Cluj Innovation Days, gzduit de aceast dat de Universitatea de tiine Agricole i Medicin Veterinar din Cluj-Napoca. De ce Cluj Innovation Days i nu Cluj IT Innovation Days, aa cum s-a numit conferina anul trecut? Alexandru Tulai: Ediia din acest an a Cluj Innovation Days i propune prin tematic, invitai i structura evenimentului s coaguleze principalii actori la nivel naional i internaional implicai n procesul inovrii, factorii decizionali i persoanele interesate de schimbarea de paradigm n mentalitate, business i educaie, rezultat n urma orientrii spre generarea de idei i produse inovative, cu valoare adugat mare. Este i motivul pentru care evenimentul nostru, care dorim s devin n timp unul de referin, nu se mai numete Cluj IT Innovation Days. Nici locaia n care va avea loc nu este ntmpltoare: dorim s subliniem i pe aceast cale importana colaborrii ntre mediul de cercetare i comunitatea de business. Viziunea noastr asupra industriei de IT este una n care IT&C-ul devine o infrastructur indispensabil pentru dezvoltare, prezent n toate verticalele economiei i ale societii. Cluj Innovation Days este, n opinia mea, tipul de eveniment prin care putem contribui la consolidarea pe termen lung a comunitii IT i la dezvoltarea legturilor cu parteneri de afaceri naionali i internaionali.

n martie va avea loc cea de-a doua ediie a Cluj Innovation Days, evenimentul principal organizat de ctre Cluj IT Cluster. Preedintele cluster-ului, Alexandru Tulai, ne-a rspuns n exclusivitate la cteva ntrebri. Ce v-ai propus cu ediia din acest an Cluj Innovation Days? Cluj Innovation Days este structurat n trei sesiuni tematice, i anume Mastering Innovation, Fostering Entrepreneurship i Showcasing Innovation, fiind organizat astfel pentru a surprinde cele trei apecte constitutive ale inovrii. Prima sesiune tematic vizeaz inovarea ntr-un context mai general i urmrete aspecte legate de gestionarea inovrii prin manangementul produsului inovativ i de proprietatea intelectual sau de suportul obinut prin politicile i strategiile la nivel european. De asemenea sunt i alte aspecte precum cele legate de capacitatea de a implementa i susine procesele inovrii. Cea de-a doua sesiune este orientat spre zona antreprenorial i i propune s prezinte auditoriului principalele mecanisme i etape n consolidarea i valorificarea unei idei inovative, prin trimitere direct la ingredientele startup-urilor, spin-off-urilor precum i forme de atragere a investiiilor i altor surse de finanare disponibile. Ultima sesiune tematic, Showcasing Innovation, i propune s exemplifice toate mijloacele i mecanismele ce susin inovaia prin poveti de succes din zona de business, menite s motiveze i s inspire tinerii n dezvoltarea unor iniiative antreprenoriale, dar i micile companii, aflate ntr-un stadiu incipient de dezvoltare. Cine sunt participanii pe care i ateptai la eveniment? Pe durata celor dou zile, evenimentul va reuni peste 400 de persoane, din ar i strintate, printre care se numr reprezentani ai Comisiei Europene, ai Guvernului Romniei i ai autoritilor publice locale, oameni de business, reprezentani ai mediului academic, ambasadori, membri ai altor clustere naionale i internaionale, dar i reprezentani ai unor asociaii de business, ai sectorului financiar-bancar i investitori strini. n calitate de invitai ateptm i reprezentani de la nivelul instituiilor academice reprezentative precum universiti, Academia Romn i institute de cercetare. Prin numrul mare de participani, dar mai ales prin natura preocuprilor acestora, putem aprecia c, pentru cele dou zile, Clujul va deveni capitala regional a inovrii. Mai multe detalii despre evenimentul Cluj Innovation Days 2014 sunt disponibile pe site-ul web dedicat: www.clujinnovationdays.com

Ovidiu Man, PMP

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

nr. 20/Februarie, 2014 | www.todaysoftmag.ro

TODAY SOFTWARE MAGAZINE

interviu

Interviu cu Philipp Kandal

Ovidiu Man: Phillip, felicitri pentru vnzarea Skobbler ctre Telenav. Menioneaz trei puncte cheie care au fcut posibil aceast tranzacie. Philipp Kandal : Ne-am concentrat atenia pe OpenStreetMap care este comparabil cu o Wikipedia a hrilor. Aceasta crete ntr-un ritm foarte alert i este pe cale s devin cea mai important hart din lume. Suntem cea mai de succes companie din zon i de aceea Telenav a dorit s achiziioneze Skobbler. Pe lng tehnologia noastr puternic OpenStreet Map, calitile principale pe care le-am dezvoltat sunt o puternic baz instalat de utilizatori (> 4 mil. utilizatori) i posibilitatea unic de a fi accesai offline, care permite oamenilor s utilizeze produsele noastre offline, fr o conexiune la internet. Aa c n final am obinut o combinaie ntre un produs grozav i o tehnologie remarcabil, elaborat de o echip de talie mondial care a fcut posibil aceast afacere. Probabil cel mai important aspect pentru comunitatea local de IT este modul n care va fi afectat echipa Skobbler pe termen scurt i lung Aceast tranzacie a urmrit dublarea eforturilor noastre i dezvoltarea echipelor i produselor pe care le-am creat aici. Deci, evident, ne ateptm s cretem echipa n Cluj, iar, cu mai mult capital, s elaborm produse i mai remarcabile. Vom fi foarte agresivi cu promovarea produselor pe care le crem i introducerea lor pe pia i ne vom extinde i n alte regiuni noi. Pe termen scurt, vom ncerca s unificm

n ultimul timp am avut parte de o serie de achiziii ale companiilor locale. Este cazul EBS-ului achiziionat de ctre NTT Data, Kno de ctre Intel sau Evoline de ctre Accenture. Ultima tranzacie de acest fel a fost achiziionarea Skobbler ctre Telenav. Philipp Kandal, co-fondatorul Skobbler, a avut amabilitatea s ne rspund la cteva ntrebri. brandurile Skobbler i Telenav, dar cu siguran vom continua s ne concentrm pe dezvoltarea unor produse extraordinare pentru clieni pe viitor. tim c ai condus echipa i din punct de vedere tehnic. Cum se va schimba aceasta, vei continua colaborarea cu Telenav? Sunt foarte ataat de ceea ce am construit, aa c voi rmne cu siguran Manager General al birourilor noastre din Cluj. Pe termen lung, voi vedea, dar toi cei care m cunosc tiu c sunt un mare suporter al antreprenoriatului, deci asta este fr ndoial o cale pe care a explora-o din nou i ntre timp am posibilitatea acum s mai fac cteva investiii n Cluj ;). Ce vei face n continuare? O sa rmi n zona de hri i navigare sau o sa faci ceva total diferit? Bun ntrebare. Dup cum am spus, vreau s vd c produsele noastre ajung la zeci de milioane de utilizatori, aa c n viitorul previzibil voi rmne la Telenav. Dac ar fi s ncep ceva nou la un moment dat, cel mai probabil ar fi ntr-o zon nou, n afara hrilor / navigaiei, cci sunt interesat s explorez cteva domenii care au nevoie s fie regndite de la temelie, cu siguran nu a face ceva ca s fiu doar nc unul n plus, ci doar ceva care ar putea fi revoluionar. Ai fost implicat n organizarea unor evenimente locale precum Startup Weekend i ai sponsorizat multe altele precum IT Days. De asemenea ai ajutat startup-ul Squirrly. Care sunt planurile tale n continuare? Vei rmne n Cluj pentru construi o alt afacere? Cred cu adevrat c Clujul este un loc fantastic pentru antreprenori, aa c, fr ndoial, voi rmne n Cluj pentru mult timp. De fapt, chiar m gndesc s cumpr un apartament aici, aa c v putei atepta s m vedei pe aici pe termen lung. Sper ca noi toi s putem face din acest loc unul cu adevrat competitiv pentru antreprenori i s crem nite companii respectate pe plan internaional i sunt foarte dornic s ajut n acest proces n orice fel pot.

Ovidiu Man, PMP

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

www.todaysoftmag.ro | nr. 20/Februarie, 2014

startup weekend global

115+
countries

556+
cities
2012

1200+
events
now 2013

average of 93 attendees per event with a maximum of 150 average of 10 new ventures created

historY
250
2012+2013
& more juicy facts...
ideas pitched: articles about:

startup weekend cluj

DESIGNERS

4.8% 41.6% 53.6%


mentors:

WOMEN

19.6%

DEVELOPERS

NON TECH

MEN

80.4%
jury:

partners & media:

59
teams formed:

95
energy drinks:

40
chocolate:

28
connected devices:

19
prizes value:

27

558

24kg

580
history right now?

15,800

how about you write some

COME, PITCH,
8

BUT DON'T FORGET

FORM A TEAM & win!

nr. 20/Februarie, 2014 | www.todaysoftmag.ro

first!

TO REGISTER

TODAY SOFTWARE MAGAZINE

startups

Evolso
latforma evolso are mai multe componente tehnice: aplicaia web, aplicaia mobile, servicii REST. Aplicaia Web se poate gsi pe adresa:http://evolso.com.Pe aceast adresa sunt afiate mai multe informaii despre aplicaie, despre cum se folosete aplicaia/site-ul, precum i informaii despre echip i evenimente. n acelai timp exist o parte accesibil doar partenerilor notri, unde ei se logheaz cu un cont i pot vedea statistici legate de locaiile lor (ex.: cte persoane au dat check-in, cte persoane particip la evenimente, etc.). Aplicaia mobile este creat pentru utilizatori i este punctul principal al platformei. Noi am pornit pe Android, lund n considerare faptul c n Romnia Androidul are o pia de desfacere mai mare, majoritatea utilizatorilor de telefoane au sistem de operare Android. Dar avem i versiunea iOS care va fi lansat la sfritul acestei luni. Aplicaia se conecteaz la server prin servicii REST, iar rspunsul este n JSON. Iar unele informaii sunt transmise prin Push Notification ctre device-uri. n spatele magiei se afl o baz de date MongoDB. Am ales MongoDB pentru c e o baz de date NoSQL, e uor de extins, folosete documente n stil JSON, e open-source i suport GeoLocation out of the box. MongoDB ne ajut s facem diferite query-uri pe baza de date legate de locaii, un criteriu important care se afl la baza aplicaiei evolso. Aici a mai meniona c toate procentajele ntre utilizatori sunt calculate real-time pe server, ceea ce nseamn c MongoDB ofer o vitez extraordinar. Dificulti tehnice am ntlnit n momentul cnd cutm metode de a conecta doi utilizatori. Conectarea se putea rezolva prin mesaje, cu diferite frameworkuri sau implementarea noastr (pe care am ales-o ntr-un final), sau prin voce. Noi am vrut s implementm VoIP din prima versiune s oferim un plus utilizatorilor notri. Pentru a oferi acest serviciu ne-am folosit de un framework oferit de Rebtel (http:// www.rebtel.com/). Acest framework este gratuit i se poate implementa pe Android i iOS. Alte probleme care au aprut pe parcurs este fragmentarea sistemelor de operare. n aplicaie apreau diferite erori pe diferite versiuni de OS, din care majoritatea au fost eliminate. Obiectivul nostru rmne mbuntirea aplicaiei.

Alin Stnescu

Stanescu.Alin91@yahoo.com Project manager @ Evolso

www.todaysoftmag.ro | nr. 20/Februarie, 2014

comuniti

Comuniti IT

ebruarie i martie sunt n general marcate de evenimente dedicate startup-urilor i inovaiei. Acum este momentul s plnuim ce vom face n restul anului i s primim validarea conceptelor din partea publicului i a mentorilor prezeni la evenimente.

Transylvania Java User Group Comunitate dedicat tehnologiilor Java. Website: www.transylvania-jug.org Data nfiinrii: 15.05.2008 / Nr. Membri: 563 / Nr. Evenimente: 43 Comunitatea TSM Comunitate construit n jurul revistei Today Software Magazine. Website: www.facebook.com/todaysoftmag Data nfiinrii: 06.02.2012 /Nr. Membri: 1171/Nr. Evenimente: 16 Romanian Testing Community Comunitate dedicata testerilor. Website: www.romaniatesting.ro Data nfiinrii: 10.05.2011 / Nr. Membri: 702 / Nr. Evenimente: 2 GeekMeet Romnia Comunitate dedicat tehnologiilor web. Website: geekmeet.ro Data nfiinrii: 10.06.2006 / Nr. Membri: 572 / Nr. Evenimente: 17 Cluj.rb Comunitate dedicat tehnologiilor Ruby. Website: www.meetup.com/cluj-rb Data nfiinrii: 25.08.2010 / Nr. Membri: 170 / Nr. Evenimente: 40 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: 396 / Nr. Evenimente: 55 Cluj Semantic WEB Meetup Comunitate dedicat tehnologiilor semantice. Website: www.meetup.com/Cluj-Semantic-WEB Data nfiinrii: 08.05.2010 / Nr. Membri: 152/ Nr. Evenimente: 23 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: 235/ 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: 1025/ Nr. Evenimente: 27

Calendar
Februarie 13 (Cluj) Lansarea numrului 20 al Today Software Magazine www.facebook.com/todaysoftmag Februarie 15 (Cluj) Hacaton de programe libere, ediia a III-a ceata.org/evenimente/aniversarea-fundaiei-ceata-n-cluj Februarie 17 (Cluj) Question-Answering Systems meetup.com/Cluj-Semantic-WEB/events/150657862/ Februarie 20 (Cluj) Machine Learning in Python meetup.com/Cluj-py/events/165522292/ Februarie 22 (Timioara) Meet the Vloggers it-events.ro/events/meet-vloggers Februarie 22 (Bucureti) Electronic Arts CodeWars it-events.ro/events/electronic-arts-codewars/ Februarie 22 (Iai) ISTC February 2014 Edition http://it-events.ro/events/istc-february-2014-edition/ Februarie 24 (Cluj) Mobile Monday Cluj #5 meetup.com/Cluj-Mobile-Developers/events/153087052/ Februarie 27 (Bucureti) Gemini Foundry Conf - recomandarea TSM www.gemsfoundry.com Februarie 28 (Cluj) Startup Weekend Cluj - recomandarea TSM cluj.startupweekend.org Martie 2 (Cluj) UBBots 2014 it-events.ro/events/ubbots-2014 Martie 20-21 (Cluj) Cluj Innovation Days - recomandarea TSM www.clujinnovationdays.com

10

nr. 20/Februarie, 2014 | www.todaysoftmag.ro

testare

O privire de ansamblu asupra testrii performanei aplicaiilor Desktop


erformana aplicaiilor este un subiect frecvent abordat, indiferent de natura apreciativ sau critic a contextului.Aceast performan este de obicei clasificat ca fiind una din primele trei coordonate de impact asupra reputaiei i veniturilor unei companii i de asemenea asupra satisfaciei clientului. Am ales acest subiect deoarece testarea performanei unei soluii Desktop nu ofer o documentaie extensiv pe internet sau un suport att de bogat cum ne-am fi ateptat. Din acest motiv m-am gndit s mprtesc nu doar din experiena proprie, dar i din cunotinele altora exprimate n idei, orientri, preocupri sau riscuri de luat n considerare atunci cnd ni se cere s ndeplinim o astfel de sarcin. Dac vorbim de performana unei aplicaii, ar trebui s convenim nc de la nceput ce nelegem prin performan. Vorbim de viteza de reacie a aplicaiei? Resursele consumate? Altceva? n aplicaiile desktop aceasta poate avea diferite semnificaii, pe care le voi explica n articolul de fa.

Sorin Lungoci

sorin.lungoci@isdc.eu Tester @ ISDC

Arhitectura

Din punct de vedere arhitectural exist cteva stiluri de aplicaii desktop. Layer-ele sunt n mare parte aceleai, dar aezarea lor sau interaciunea dintre ele genereaz mai multe tipuri de aplicaii desktop. Printre cele mai utilizate layer-e amintim: UI (User Interface), BL (Business Layer), TL (Transfer Layer) and DB (Database Layer). Voi meniona cteva exemple de arhitecturi folosite pe platforma desktop cu precizarea c nu acoper toate combinaiile dintre tipurile i stilurile arhitecturale: 1. 100% pur desktop unde att clientul ct i serverul mpreun cu baza de date sunt instalate pe aceeai main, fr a avea nevoie de conexiune la reea. Un exemplu aici poate fi Microsoft Money (o aplicaie de managementul finanelor destinat utilizatorului casnic). Este o aplicaie pe un singur nivel (1-Tier), instalat i rulat pe un singur sistem de ctre un singur user.

2. O alt soluie n arhitectura ClientServer este folosirea aa numitului Thin Client, care n acest arhitectur (2-Tier) este folosit nu cu mult peste preluarea comenzilor utilizatorului i afiarea informaiilor prin intermediul unui monitor. Aplicaia este copiat i instalat pe server, rulat la nivel de client, i folosit pe scar larg n infrastructurile de tip intranet ale universitilor sau fabricilor. Un exemplu putnd fi un student care folosete un client CITRIX instalat pe maina proprie i rulnd o aplicaie intern pe serverul universitii.

3. Aplicaia Client-Server care folosete mai muli clieni de tip Rich Client i unul sau mai multe Servere este cea mai ntlnit arhitectur pe platforma Desktop.

www.todaysoftmag.ro | nr. 20/Februarie, 2014

11

testare
Aceast aplicaie este desenat de asemenea pe dou nivele (2-Tier) i utilizat cu precdere ntr-o infrastructur de tip intranet avnd un numr limitat de utilizatori. Conexiunea persist pn la log-out, iar aplicaia este manipulat utiliznd un meniu. Un exemplu poate fi Microsoft Outlook sau oricare alt aplicaie desktop pentru e-mail. Aplicaia este instalat pe maina local, care se conecteaz din cnd n cnd sau permananet la server pentru primirea sau trimiterea email-urilor. Bineneles, aceast aplicaie funcioneaz i fr conexiune la server, dar fr aceast conexiune nu se va putea duce la bun sfrit operaia de trimitere a unui e-mail.

O privire de ansamblu asupra testrii performanei aplicaiilor Desktop


solicitrile venite de la utilizator; Impactul asupra resurselor sistemului utilizatorului ct de light este aplicaia pentru staia utilizatorului. De exemplu: ct de rapid se deschide aplicaia, ct memorie utilizeaz sau compatibilitatea aplicaei cu alte aplicaii instalate. Partea de back-end dintr-o aplicaie client-server este de obicei zona unde se concentreaz testarea performanei. De multe ori abordarea pe partea de server este destul de apropiat fa de cea folosit pentru Web: se nregistreaz un flow sau mai multe, se creeaz unul sau mai multe profiluri de utilizatori finali (aici putem include comportamentul i numrul utilizatorilor pe fiecare flow sau chiar performana staiilor sau a reelelor). Bazndu-ne pe aceste profiluri putem aloca un numr diferit de utilizatori virtuali i rula acele teste de la nivel de Service-layer. Serverul ar trebui s poat procesa solicitri concurente venind de la diferii clieni, avnd diferite profile. Pe diverse canale de informare (prezentri, forumuri) am aflat c pentru a testa aplicaii client-server, unii testeri au decis s foloseasc mai multe staii (de la 2 la 5) n calitate de clieni, pentru amble tipuri de testri funcional-automatizat i de performan. Fiecare staie era setat conform unui anumit profil care s simuleze un anumit grup de utilizatori finali, i care evident s exercite un stres specific pe ntreaga structur. testarea performanei aplicaiilor desktop la nivel de interfa a clientului. Jmeter-ul este construit pentru a exercita un anumit stres asupra aplicaiilor care folosesc mai multe thread-uri sau utilizatori. Din moment ce avem o aplicaie instalat pe un client, cel mai probabil vom avea un singur utilizator i nu ar avea niciun sens folosirea acestui tool n acest context. n schimb, mai mult logic ar avea testarea performanei unei baze de date independent de aplicaia desktop Telerik Test Studio2 ruleaz teste funcionale ca teste de performan, oferind o vizionare destul de avansat asupra rezultatelor testelor, perspectiv cronologic i comparaii ntre mai multe teste. Acest tool este construit pentru testarea performanei aplicaiilor pe platforma Web i Desktop WPF (Windows Presentation Foundation). Nu are suport pentru aplicaiile construite pe tehnologia Windows Forms. Infragistic TestAdvantage for Windows Forms 3 Construit pentru testarea performanei aplicaiilor care folosesc tehnologiile controalelor Windows Forms i WPF. WC F S t o r m 4 e s t e u n t o o l simplu i uor de utilizat pentru testarea ser viciilor WCF (Windows Communication Foundation). Acesta suport aproape toate tipurile de conexiuni netTcpBinding, wsHttpBinding i namedPipesBinding, cu excepia webHttp. De asemenea, poate fi utilizat pentru crearea de test case-uri funcionale i de performan. Datorit timpului limitat, nu am reuit s verific i alte tool-uri promovate n diferite prezentri, articole sau forumuri. Le-a aduga totui pentru a oferi o perspectiv mai bogat asupra acestui aspect: Microsoft Visual Studio, Borland Silk Performer, Seapine Resource Thief, Quotium Qtest Windows Robot (WR), LoginVSI, TestComplete mpreun cu AQtime, WCF Load Test, Grinder sau Load Runner. ntr-un sistem clasic client-server, partea de client este o aplicaie care trebuie instalat i utilizat de ctre un singur utilizator, ceea ce nseamn c n majoritatea cazurilor nu se ateapt ca aplicaia s execute o mulime de call-uri concurente, ns trebuie s rspund ct mai prompt aciunilor utilizatorului i s afieze
2 http://www.telerik.com/automated-testing-tools/ 3 h t t p : / / w w w. i n f r a g i s t i c s . c o m / p r o d u c t s / testautomation 4 http://www.wcfstorm.com/wcf/home.aspx

Abordare

Testarea aplicaiilor client-server necesit cteva cunotine tehnice adiionale pentru a putea trata anumite efecte introduse de arhitectura client-server. De exemplu - separarea sau mutarea business layer-ului de pe client pe server ar putea crete ncrederea i stabilitatea n datele oferite, dezavantajul fiind creterea traficului pe reea sau vulnerabilitatea n cazul unui atac de securitate. Testarea acestor sisteme este ntr-adevar mai diferit comparativ cu testarea aplicatiilor web, dar aceast diferen nu este chiar att de mare. Am putea chiar afirma c se apropie mai mult de testarea pe platforma mobile. Ca s nelegem cum putem testa aceste sisteme trebuie nti s nelegem exact cnd i de ce ar putea aprea aceste probleme de performan. Avnd aceast nelegere, soluia care ar trebui abordat n testare de multe ori este evident. Testarea la nivel de client este mai mult perceput ca o testare funcional. Acest lucru se ntmpl din cauz c aplicaiile desktop sunt concepute pentru a fi manipulate de un singur utilizator. Nu este adecvat abordarea testrii performanei folosind abordarea specific web. Dac nregistrm un flow dup care folosim 100 de utilizatori virtuali cu scopul de a testa performana ntregului sistem, ne nelm. n acest caz nu vom testa performana ntregului sistem ci software-ul i hardware-ul staiei pe care ruleaz testul/ele. De asemenea, resursele acesteia se vor consuma, fapt care va duce la blocare. Testarea la nivel de client trebuie realizat lund n considerare urmtoarele aspecte: Impactul aciunilor utilizatorului ct de rapid rspunde sistemul la

Tool-uri

Dac este s comparam tool-urile de pe pia care ofer suport pentru testarea performanei aplicaiilor Desktop i cele orientate Web, am putea afirma c exist un dezechilibru; destul de puine n prima categorie. ns i mai puine tool-uri ofer suport pe mai multe platforme cum ar fi: Desktop, Web sau Mobile. D i n e x p e r i e n propr i e i d i n investigaile fcute, am remarcat cteva tool-uri: Apache JMeter1 unul dintre cele mai cunoscute tool-uri gratuite i folosite mai cu seam n testarea performanei la nivel de server, baz de date sau servicii; JMeter-ul nu controleaz elementele grafice la nivel de interfa a utilizatorului n aplicaiile Desktop (de exemplu nu simuleaz apsarea unui buton, scroll-ul sau poziia mouse-ului pe ecran), fapt pentru care nu este un tool potrivit pentru
1 http://jmeter.apache.org/

12

nr. 20/Februarie, 2014 | www.todaysoftmag.ro

TODAY SOFTWARE MAGAZINE


rezultatele fr o ntrziere prea mare. ca fiind incorecte Aplicaia instalat pe client precum Cteva index-tables care nu au fost i resursele consumate de aceasta este stabilite nc de la nceput, au fost identide obicei monitorizat cu ajutorul unui ficate i create ulterior testrii. instrument numit Profiling5. Prea mult memorie consumat n Acest Profiling mpreun cu un timpul rulrii pe un profil care simula Performance Counter6 la nivel de SQL7 de 1Gb RAM memorie. n acest caz exemplu, poate constitui o metod solid performana aplicaiei scade cu aproxipentru a realiza ce se ntmpl de fapt in mativ 15% pe flow-urile principale. sistem (client i server). Programul crash-uia uneori atunci Visual Studio are un profiler integrat. cnd o anumit funcionalitate sau feaFiind destul de avansat, permite msurarea ture din aplicaie era folosit mai des timpului necesar executrii unei metode, deoarece avea ca rezultat depirea conprecum i numrul apelrilor. toarelor sau a limitei de array-uri interne. Pentru realizarea unui profiler la nivel Performana sczut datorat de memorie, CLR Profiler permite vizuaunor late binding -uri excesive, plus lizarea consumului de memorie necesar ineficien n crearea i distrugerea rulrii aplicaiei, dar i observarea obiecteobiectelor. lor create de diferite metode. Memory leak identificat n cazul n Multe dintre tool-urile construite pencare aplicaia era deschis i neutilizat tru testarea performanei de la nivel de pentru o perioad mai lung de timp interfa al utilizatorului pot fi folosite (cteva ore). pentru nregistrarea unor flow-uri i mai trziu folosite pentru play-back pe mai Riscuri multe staii. n testarea performanei sistemelor desktop, cele mai ntlnite probleme sunt Rezultate relaionate la software i environment . Cteva dintre problemele identificate Stabilitatea aplicaiei se pare c reprezint n urma testrii performanei aplicaiilor ngrijorarea predominant a testerului , desktop ar putea fi menionate: cauza fiind multitudinea de situaii n care Multe instane de SQL, greit conce- tester-ul trebuie s lucreze cu o aplicaie pute. Dup optimizare, performana s-a imperfect sau neterminat. mbuntit simitor. Voi expune mai departe cteva dintre Cteva SQL statement-uri care erau riscurile identificate i relaionate la testaexecutate n mai mult de un minut, au rea performanei soluiilor desktop: fost mbuntite astfel nct s returneze Un risc destul de ntlnit este legat rezultate n mai puin de o secund. de utilizarea resurselor locale n tim Cteva view-tables au fost identificate pul scripting-ului primelor teste. Acest 5 h t t p : / / w w w . r e d - g a t e . c o m / p r o d u c t s / fapt duce de multe ori la blocarea sistedotnet-development/ants-performance-profiler/ 6 http://msdn.microsoft.com/en-us/library/w8f5kw2e. mului din cauza consumrii memoriei. aspx 7 http://www.extremeexperts.com/sql/articles/ Unele aplicaii eueaz destul de des sqlcounters.aspx atunci cnd una dintre funcionaliti este folosit mai intens. Testerul trebuie s urmeze flow-ul real n aplicaie, s verifice i s permit tool-ului exercitarea un anumit stres, fapt care genereaz utilizare mai intens. Bineneles, aceste probleme vor trebui rezolvate, ns exist un impact asupra timpului, iar scriptingul va trebui amnat pn n momentul n care se rezolv aceste probleme. Crearea bazei de date specific testrii performanei implic probabil generarea a zeci de mii de intrri. Exist dou riscuri identificate n legtura cu aceast aciune: Simularea datelor inventate din tabele i integritatea lor nu sunt meninute. Nu toate proiectele beneficiaz de o migrare a unui sistem mai vechi, caz n care o baz de date din producie poate fi adaptat. Riscul este mai mare atunci cnd baza de date trebuie construit de la nceput. Al doilea risc este legat de faptul c regulile de business cum ar fi ajustarea financiar n diferite tabele nu este respectat. n amndou cazurile, este posibil ca simularea load-ului s nu fie compromis, ns s-ar putea ca aplicaia s nu poat manipula inconsistenele i s devin disfuncional. Este important ca persoanele care pregtesc baza de date mpreun cu popularea ei, s neleag regulile de business, design-ul bazei de date i rolul aplicaiei. Subestimarea efortului necesar pregtirii i rulrii testelor poate fi de asemenea considerat un risc. Testarea performanei unui sistem client-server este o activitate complex, mai ales din

www.todaysoftmag.ro | nr. 20/Februarie, 2014

13

testare
cauza problemelor care apar n timpul ncercrii de simulare a mediului i infrastructurii. Ambiia8 prea optimist, cel puin n stadiul incipient al proiectului. Persoanele implicate de obicei prespun c baza de date este populat cu date valide, c fiecare tranzacie trebuie cuprins n testele de performan sau c toi timpii trebuie msurai. De obicei urmtoarea regul, 80/20 se aplic: 80% din volumul bazei de date este furnizat de 20% dintre tabele. 80% din stresul asupra sistemului va fi generat de 20% dintre tranzacii. Doar 20% din tranzaciile sistemului ar trebui msurate dei testerii experimentai ar presupune c aici s-ar putea aplica regula 90/10. Managerii neexperimentati par s amestece valorile 90 i 10. Tool-urile folosite pentru execuia testelor de performan nu necesit cunotine extrem de bogate, avnd n vedere c aproape peste tot n dezvoltarea i testing-ul aplicaiilor exist principii la care, dac se ader, ar trebui s ofere i testerilor cu o experien medie capacitatea de a crea teste de performan. Exist o tendin comun n rndul managerilor i testerilor fr experien n testarea performanei sistemelor, de a crede c procesul testrii const n dou etape: scripting i rulare. Mai mult dect att, riscul crete dac exist nevoia de a personaliza anumite tool-uri pe care acei testeri le folosesc. Un alt risc identificat este legat de cunotintele i abilitile persoanelor implicate n proiect. Atunci cnd programatorilor care au realizat designul i au implementat o anumit funcionalitate li se cere s creeze o suit de teste automatizate pentru a putea fi utilizate la testarea performanei, dificultatea principal o reprezint experiena n testare. Pe de alt parte, testerii experimentai care nu au nicio cunotin n ceea ce privete sistemul pe care l vor testa, de obicei vor avea nevoie de o mic perioad de familiarizare cu aplicaia. Ideal ar fi s lucreze mpreun, ns dac exist probleme legate de resurse/cunotine, managerul de proiect va trebui s ia deciziile bazate pe risc i impact.

O privire de ansamblu asupra testrii performanei aplicaiilor Desktop


Tool-urile sunt importante i eseniale, dar problemele nu se leag doar de ele, provocarea ar fi mai degrab identificarea scopului pentru care trebuie executate testele de performan. Care ar putea fi ngrijorrile legate de business, infrastructura sau ateptrile utilizatorilor finali cu privire la aplicaie? Scenariile de acest tip: cele mai comune, cele mai critice din punct de vedere al businessului sau cele care solicit cel mai mult aplicaia din punct de vedere tehnic ar trebui luate n considerare chiar dac la ele nu au consimit n prealabil clientul. Factori ca: firewall-uri , aplicaia antivirus, arhitectura reelei, infrastructura, sistem de operare cu Service pack-ul aferent sau chiar alte programe care ruleaz n acelai timp pe staie, toate afecteaz performana ntregului sistem. Toate acestea mpreun formeaz un set de variabile pe care trebuie s le lum n considerare. Testarea performanei aplicaiilor desktop, este perceput ca fiind foarte apropiat de testarea functional si de asemenea de a scrie cod n acest scop. Pe forumurile de profil exist o uoar tendin ca persoanele implicate n testarea performanei s-i creeze propriul tool9 scris n .NET, Java, Perl, Python sau alte tehnologii pe care mai trziu s-l foloseasc deopotriv n automatizarea testelor i testarea performanei. Dac ne referim strict la performan, majoritatea vor nclina ctre testarea la nivel de Service layer/Baz de Date. Este difcil s gseti un tool deja creat care s se potriveasc majoritii tehnologiilor folosite n aplicaiile desktop. Mai mult decat att, s poat fi folosit i la nregistrarea flow-urilor din aplicaie la nivel de interfa cu utilizatorul, apoi la play-back folosind mai multe staii sau utilizatori virtuali. Pentru unele teste de performan la nivel de client nici nu este nevoie ntotdeauna de un tool special, ci mai degrab de cteva cazuri de test bine desenate i gndite, grupate n suite, avnd cteva variabile. Administratorii de baze de date, de sistem sau de reea nu pot crea singuri suportul pentru testele de performan. Din acest motiv, ei trebuie implicai n stadiile incipiente ale proiectului. Perspectivele lor mbuntesc calitatea testing-ului. Multitudinea sistemelor de operare,
9 http://msdn.microsoft.com/en-us/magazine/ cc188784.aspx

versiunilor sau configuraiile hardware pot crea probleme n definirea profilurilor utilizatorilor finali. E imposibil simularea tuturor acestor combinaii, prin urmare o idee bun putnd fi prioritizarea configuraiilor OS vs. Hardware. Exist tool-uri care pot simula limitrile de hardware ( disk, memory, network ) unul dintre ele este Seapine Resource Thief. n general, problemele testing ului de performan de ordin logistic, organizaional sau tehnic pot fi evitate aplicnd principii cum ar fi: a. abordarea testing-ului n arhitecturile cu dou sau trei nivele este similar, difer doar complexitatea; b. tool-urile brevetate i cunoscute ajut, dar mai mult dect att, se cere improvizare i inovare pentru ca o testare eficient s se ntmple; c. atunci cnd se alege un tool care se dorete a fi folosit de la nivel de UI, trebuie avut n vedere tehnologia folosit la implementare. Nu am gsit un tool care s poat trata toate tehnologiile. De exemplu, unele tool-uri cum ar fi Telerik Test Studio pot nregistra flowuri pe o aplicaie implementat in WPF (Windows Presentation Foundation) i nu poate fi folosit dac implementarea este fcut n Windows Forms. Iat cteva deficiene ale unora dintre tool-urile investigate: a. dac dorim s testm un serviciu care transfer fiiere de exemplu, nu am gsit niciun tool capabil s fac browse pe disk pentru acel fiier; b. a plicaia desktop trebuie s fie deja pornit pentru majoritatea tool-urilor; c. aciunea Play-back este oprit dac apare o pagin pop-up n timpul flow-ului (QA Wizard Pro); d. operaiile de genul: Save, Open etc. , nu sunt suportate de tool-urile investigate. La o prim vedere, testarea performanei aplicaiilor desktop pare s fie destul de diferit, soluiile existente oferind o gam destul de vast n posibilitile de testare. Cu toate acestea, s nu uitm c asigurarea calitii fundamentale, mpreun cu principiile de baz rmn la fel i se aplic tuturor. Enjoy testing !!

Concluzii

n final putem evidenia cteva concluzii referitoare la aplicaiile construite pe platforma Desktop:
8 1995 Eurostar presentation of Paul Gerard Client/ Server Performance Testing

14

nr. 20/Februarie, 2014 | www.todaysoftmag.ro

management

Software Craftsmanship i Lean Startup

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

n lumea startup-urilor, micarea Lean Startup a fost o revoluie dei a pornit de la o observaie simpl. Modelul standard de creare a unui startup era pn de curnd Build, Measure, Learn adic: Un antreprenor are o viziune de produs. Dup ce obine finanarea necesar, construiete produsul conform viziunii sale. Produsul este testat pe pia. Dac are succes, perfect! Dac nu are succes, este modificat pentru a fi mai aproape de nevoile utilizatorilor reali. mai popular este de obicei aleas ca fiind ctigtoare. La nivel tehnic, Lean Startup presupune o agilitate foarte mare determinat de lucrul ntr-un mediu necunoscut i n curs de descoperire. Dac n modelul standard de dezvoltare de produs presupunem c tim care este viziunea, care sunt funcionalitile i care sunt urmtoarele cerine, n modelul lean startup viziunea se poate modifica n funcie de pia (prin pivotare), funcionalitile sunt descoperite pe parcurs, iar cerinele urmtoare pot fi extrem de surprinztoare. Un exemplu clasic este Flickr, serviciul de stocare de imagini care a fost cumprat de yahoo. Iniial, viziunea produsului era de a face un joc numit Game Neverending n care adugarea de fotografii era una dintre funcionaliti. Dup un timp, echipa i-a dat seama c jocul nu era foarte bine primit, dar serviciul de stocare de poze era foarte interesant pentru utilizatori. Ca urmare, au decis s se concentreze pe flickr.com i s opreasc dezvoltarea jocului. Literatura de Lean Startup menioneaz doar n treact aspectele tehnice ale metodei. Motivele sunt dou: revoluia trebuia fcut n primul rnd la nivel business i presupunerea autorilor a fost c programatorii i vor da seama ce practici tehnice trebuie s foloseasc.

Adrian Bolboaca

adrian.bolboaca@mozaicworks.com Programmer. Organizational and Technical Trainer and Coach @Mozaic Works

Problema acestui model este c la momentul la care produsul poate trece testul pieei, el a fost deja construit, deci s-au investit bani i efort n el. Din punct de vedere tehnic, se ntmpl adesea ca produsul s fi fost grbit, programatorii s lucreze sub presiune i rezultatul s fie un cod greu de modificat i plin de bug-uri. Steve Blank i Eric Ries au venit cu ideea de a inversa acest ciclu i de a folosi Learn, Measure, Build, adic: Un antreprenor are o viziune de produs. Viziunea este transfomat ntr-un set de ipoteze. Fiecare ipotez este testat printr-un experiment. Rezultatul experimentului este msurabil i comparat cu ateptrile definite de ipotez. O dat ce o ipotez a fost validat, poate fi dezvoltat soluia rezultat i inclus ntr-un produs. Experimentul poate include crearea unui prototip funcional al unei aplicaii, dar nu este neaprat necesar. Arta const n a identifica minimul de investiie pentru a putea valida ipoteza. Experimentele cele mai ntlnite, n special pentru produsele online, sunt de tip A/B testing: dou posibiliti sunt puse n competiie i votate de utilizatorii poteniali. Cea

www.todaysoftmag.ro | nr. 20/Februarie, 2014

15

management
Software Craftsmanship i Lean Startup
Imaginai-v ns contextul n care lucreaz multe din startup-urile online de azi. Multe dintre ele fac deployment al unei versiuni noi n producie de sute de ori pe zi. Fiecare deployment este fie un experiment de tip A/B testing, fie implementarea unei funcionaliti deja validate. Acest ritm de dezvoltare necesit abiliti de programare precum: G n d i r e i n c r e m e n t a l mprirea unei funcionaliti mari n funcionaliti foarte mici ce pot fi implementate rapid i pe care se poate lua feed-back rapid din pia. Testare automat o combinaie de teste unitare, teste de acceptan, teste de performan, teste de securitate, este necesar pentru a valida rapid orice modificare n cod. Design deschis la modificare dac design-ul este inflexibil, orice modificare va lua prea mult timp. Cod uor de modificat urmrirea coding guidelines comune, optimizarea pentru lizibilitate i scrierea de cod uor de neles sunt factori eseniali pentru pstrarea vitezei de implementare. Refactoring este inevitabil ca design-ul s fie nchis la modificare n anumite puncte. Refactoring-ul rapid este o abilitate esenial pentru a-l transforma n design uor de modificat. n plus, aceste echipe folosesc fluxuri de lucru clare care includ adesea: monitorizare, revenirea la versiuni care funcioneaz corect n caz de bug-uri majore, pori de validare nainte de deployment. Dar poate nu este nevoie de sute de puneri n producie pe zi. Poate ajunge ca ciclul de feed-back s fie de o sptmn sau cteva zile. Chiar i atunci, abilitile necesare pentru programatorii care lucreaz la produs sunt aceleai. Singura diferen este c i pot mpri munca n incremente mai mari. Dac legtura cu Software Craftsmanship nu este clar nc, o vom explora n continuare. Dup c um spune am n ar t icolu l despre Software Craftsmanship[ http://www. pot termina mai repede implementarea dac le folosesc. Acesta este de fapt idealul Software Craftsmanship: a-i dezvolta att de bine abilitile nct s devin modul implicit i cel mai rapid de lucru, mai ales to d ay s of t mag . c om / ar t i cl e / e n / 1 1 / atunci cnd viteza de implementare este Software_Craftsmanship__404], micarea extrem de important. a aprut pentru a permite reducerea costului de schimbare al codului prin aplicarea Concluzie anumitor practici cunoscute i prin desLean Startup se bazeaz pe artizani coperirea altor practici noi. Cteva dintre software (craftsman). Experimentele cele practicile pe care le cunoatem acum sunt: mai bune sunt cele care nu necesit cod. Uneori, este nevoie i de implementarea Test Driven Development, pentru unor experimente. Un artizan software va a obine incremental un design adap- fi capabil s le implementeze rapid i fr a tat problemei curente i deschis la introduce probleme. modificare. Dac n faza de descoperire putem Testarea automat, pentru evitarea tri i fr a aplica practici precum TDD, regresiilor. testare automat sau refactoring, faza de Principiile SOLID, design patterns implementare are mare nevoie de ele peni cunotinele de design pentru a evita tru a permite punerea ct mai rapid n problemele de design producie a functionalitilor validate de Clean Code pentru a scrie cod uor experimente. Cu ct sunt puse mai rapid de citit i de neles. n producie cu att crete probabili Refactoring pentru a readuce design- tatea de a avea clieni pltitori, asigurnd ul la nivelul necesar atunci cnd ncepe supravieuirea startup-ului i crescndu-i s nu mai fie potrivit. ansele de succes. ntrebarea care se pune este cnd merit investit n aceste practici ntr-un startup i cnd nu. Pentru cei care urmeaz modelul lean startup, rspunsul ar trebui s fie simplu: att timp ct suntem la nceput i ncercm s dezvoltm clienii prin experimente, nu are rost s investim mai mult dect este necesar. Cele mai bune experimente sunt cele care nu necesit cod scris. Dac totui trebuie scris cod, este important s l scriem ct mai repede cu putin, chiar dac pot scpa greeli. Imediat ce o funcionalitate a fost validat, codul trebuie scris, sau rescris, astfel nct s poat fi uor de modificat. Altfel, riscm s nu putem beneficia ndeajuns de rapid de pe urma lucrurilor pe care le aflm prin experimente. Trebuie s menionm c programatorii care au exersat ndeajuns aceste tehnici

16

nr. 20/Februarie, 2014 | www.todaysoftmag.ro

TODAY SOFTWARE MAGAZINE

programare

Vagrant pentru nceptori


e cte ori ai auzit Dar funcioneaz pe maina mea sau Dar la mine pe local merge? Ct timp i ia s-i setezi mediul de lucru? De cte ori ai ntlnit diferene ntre serverul de pe producie i cel de dezvoltare? Imagineaz-i o lume ideal n care toi dezvoltatorii lucreaz pe aceeai platform, n care platformele de dezvoltare i cele de producie au fost construite bazndu-se pe aceleai specificaii. Aceast lume exist i se numete virtualizare. Vagrant este un tool de virtualizare, care are un rspuns la toate aceste ntrebri, transformnd aceast lume ideal ntr-o lume real. Vagrant poate fi folosit pentru a crea i a configura medii de dezvoltare performante, portabile i reproductibile. Vagrant este dezvoltat n Ruby de ctre Mitchell Hashimoto1. Mithchell este un developer pasionat de automatizare. A nceput proiectul Vagrant n 2010, n timpul liber. n urmtorii ani proiectul a crescut i a nceput s fie folosit cu ncredere de un numr tot mai mare de dezvoltatori. Ca urmare n 2012 Mitchell a nfiinat propria lui companie HashiCorp, pentru a dezvolta i pentru a oferi training-uri i suport profesional pentru Vagrant. n momentul de fa Vagrant2 este un proiect open source, fiind rezultatul a sute de contribuitori pe GitHub3. Folosind Vagrant poi obine urmtoarele beneficii: un mediu de dezvoltare per proiect> poi avea fiiere de configurare diferite pentru fiecare proiect. acelai fiier de configurare pentru mediile de dezvoltare, pentru serverele pre-staging, staging i cele de producie. un fiier de configurare uor de transportat i de configurat (Vagrantfile). un fiier de configurare uor de modificat > infrastructur cu rol de cod. fiiere de configurare versionate > poi s faci commit la toate fiierele de provizionare i la fiierul Vagrantfile. aceleai fiiere de configurare pentru toat echipa> folosind acelai fiier de configurare (Vagrantfile)

Ce este Vagrant?

Pentru a realiza magia, Vagrant se bazeaz pe giganii lui, acionnd ca un layer n faa providerilor VirtualBox, VMware, AWS sau alii. De asemenea, instrumente din industria-standard de provisionare, cum sunt script-urile Shell, Chef i Puppet pot fi folosite pentru a seta automat un nou mediu de dezvoltare. Vagrant poate fi folosit i n proiecte scrise n alte limbaje de programare cum ar fi PHP, Pyton, Java, C# sau JavaScript i poate fi instalat att pe sisteme Linux, Mac OS X ct i pe Windows. Vagrant ofer maini virtuale tranzistorii, portabile care se pot muta dintr-o parte ntr-alta, fr a avea o locaie fix, exact ca un vagabond. Dac eti programator, poi folosi Vagrant pentru a izola dependinele i configuraiile lor cu un singur mediu de dezvoltare consistent. Odat ce a fost creat Vagrantfile trebuie doar s rulezi comanda vagrant-up pentru ca totul s funcioneze pe maina ta. Ca inginer de sistem, Vagrant i ofer un mediu disponibil i un flux de munc consistent pentru dezvoltarea i testarea script-urilor de management a infrastructurii. Poi testa foarte rapid shell script-uri, reete Chef i module Puppet, folosind virtualizarea pe maini locale cum sunt VirtualBox sau VMware. Apoi cu aceleai configurri, poi testa script-urile remote din clouds cum sunt AWS sau RackSpace, folosind acelai mod de lucru. Ca designer, folosind Vagrant poi s setezi cu uurin un nou mediu de dezvoltare bazat pe fiierul de configurare Vagrantfile, care este deja configurat, fr s-i mai faci griji cum s reconfigurezi aplicaia4.
1 https://github.com/mitchellh 2 http://www.vagrantup.com/ 3 https://github.com/mitchellh/vagrant 4 http://docs.vagrantup.com/v2/why-vagrant/index.html

Vagrant de la instalare pn la maina virtual funcional.


nainte de a ncepe primul proiect Vagrant, trebuie s instalezi VirtualBox sau orice alt provider suportat de Vagrant. Pentru acest exemplu eu am folosit VirtualBox. Primul pas const n instalarea instrumentului Vagrant, prin descrcarea i instalarea pachetului sau a executabilului corespunztor, de pe pagina5 oficial de descrcare a Vagrant-ului. Executabilul va aduga automat vagrant n calea de sistem, fiind disponibil n terminal imediat dup instalare, cum se poate vedea mai jos.
$ vagrant Usage: vagrant [-v] [-h] command [<args>] -v, --version Print the version and exit. -h, --help Print this help. Available subcommands: box manages boxes: installation, removal, etc. destroy stops and deletes all traces of the vagrant machine halt stops the vagrant machine help shows the help for a subcommand init initializes a new Vagrant environment by creating a Vagrantfile package packages a running vagrant environment into a box plugin manages plugin s: install, uninstall, update, etc. provision provisions the vagrant machine reload restarts vagrant machine, loads
5 http://www.vagrantup.com/downloads

www.todaysoftmag.ro | nr. 20/Februarie, 2014

17

programare
Vagrant pentru nceptori
new Vagrantfile resume ssh ssh-config to connect to status chine suspend up environment configuration resume a suspended vagrant machine connects to machine via SSH outputs OpenSSH valid configuration the machine outputs status of the vagrant maconfig.vm.box_url = http://files.vagrantup.com/precise32.box

Directiva config.vm.box = precise32, descrie tipul mainii virtuale. Box-ul reprezint scheletul pe care mainile virtuale Vagrant vor fi construite. Acestea sunt fiiere portabile care pot fi folosite de ctre oricine, pe orice platform pe care ruleaz Vagrant. suspends the machine starts and provisions the vagrant Un lucru important de observat este faptul c aceste aa-zise cutii sunt create pe baza provider-ilor. n aces sens, nainte de instalarea Urmtorul pas este iniializarea instrumentului Vagrant n scheletului mainii virtuale, trebuie verficat provider-ul pe care se noul proiect, rulnd comanda: bazeaz. Pentru a selecta un schelet pentru maina virtual putei accesa http://www.vagrantbox.es. Aici poate fi gsit o list cu $ vagrant init toate base-box-urile care sunt disponibile. Vagrant ofer de aseA `Vagrantfile` has been placed in this directory. menea, posibilitatea de a crea cutii personalizare. Un instrument You are now util n acest scop este Veewee6, care are ca obiectiv automatizarea ready to `vagrant up` your first virtual environment! Please tuturor pailor pentru construirea acestor cutii ct i colectarea Read the comments in the Vagrantfile as well as docucelor mai bune practici ntr-o modalitate transparent. O cutie mentation on`vagrantup.com` for more information on using Vagrant. poate fi adugat i din linia de comand tastnd:

$ vagrant box add <name> <url>


Dup rularea acestei comenzi, Vagrantfile este generat automat n directorul proiectului pe care s-a fcut iniializarea. Vagrantfile este scris n Ruby, dar nu este necesar cunoaterea acestui limbaj de programare, deoarece majoritatea modificrilor constau ntr-o simpl atribuire de variabile. Fiierul Vagrantfile are urmtoarele roluri: Selectarea schelet-ului pentru maina virtual, Selectarea provider-ului de virtualizare, Configurarea parametrilor mainei virtuale, Configurarea reelei, Modificarea setrilor SSH, Sincronizarea directoarelor locale cu cele de pe maina virtual, Provisionarea mainii virtuale. Unde <name> poate fi definit oricum, singurul lucru de care trebuie inut cont este ca parametrul respectiv s coincid cu cel definit n cadrul directivei config.vm.box. <url> reprezint locaia cutiei. Poate fi calea spre un fiier local sau un HTTP URL spre o cutie extern.
$ vagrant box add precise32 http://files.vagrantup. com/precise32.box

Comenzile disponibile pentru management-ul cutiilor sunt listate mai jos.


$ vagrant box -h Usage: vagrant box <command> [<args>] Available subcommands: add list remove repackage For help on any individual command run `vagrant box COMMAND -h`

Selectarea scheletului pentru maina virtual

Fiierul Vagrantfile generat automat conine urmtoarele linii:

# Every Vagrant virtual environment requires a box to build off of. config.vm.box = precise32 # The url from where the config.vm.box box will be fetched if it # doesnt already exist on the users system.

Selectarea provider-ului de virtualizare

Sunt dou modaliti care pot fi folosite pentru specificarea provider-ului, similar modului cum a fost descris mai sus pentru
6 https://github.com/jedi4ever/veewee

Our core competencies include:

Product Strategy

Product Development

Product Support

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

18

nr. 20/Februarie, 2014 | www.todaysoftmag.ro

TODAY SOFTWARE MAGAZINE


# using a specific IP. cutii. O opiune const n specificarea provider-ului ca paraconfig.vm.network :private_network, ip: metru din linia de comand. Dac este selectat aceast metod, 192.168.33.10 trebuie s te asiguri c argumentul prevzut coincide cu cel specificat n directiva config.vm.provider. Modicarea setrilor SSH $ vagrant up --provider=virtualbox Vagrantfile ofer posibilitatea de a confgura namespace-ul config.ssh pentru a specifica numele utilizatorului, host-ul, portCelalalt opiune este s se specifice provider-ul doar n direc- ul, guest_port-ul, private_key_path, forward_agent, forward_x11 tiva config.vm.provider. i shell. Important de menionat este faptul c unele cutii nu necesit do |config| specificarea provider-ului, deoarece pot funciona cu orice tip de Vagrant.configure(2) config.ssh.private_key_path = ~/.ssh/id_rsa provider. config.ssh.forward_agent = true end access to the machine

Congurarea parametrilor mainei virtuale

Vagrantfile ofer posibilitatea configurrii provider-ilor prin virtual adugarea directivei vb.customize. De exemplu, dac vrei s n timp ce muli utilizatori editeaz fiierele de pe mainile mreti memoria alocat mainii virtuale, poi s faci cum este virtuale folosind doar editoare sincronizate cu maina virtual descris mai jos. prin SSH, Vagrant ofer posibilitatea de sincronizare automat a fiierelor de pe ambele maini, folosind folder-ele sincronizate. n # Provider-specific configuration so you can fine-tune mod implicit Vagrant ofer posibilitatea da a sincroniza fiierele various # backing providers for Vagrant. These expose de pe maina local, cu directorul /vagrant de pe maina virtuprovider-specific options. al. n acest fel directorul /vagrant localizat pe maina virtual, # Example for VirtualBox: # este identic cu cel de pe maina local. Astfel nu mai eti nevoit config.vm.provider :virtualbox do |vb| s foloseti opiunile de Upload i Download, din IDE pentru # # Dont boot with headless mode # vb.gui = true sincronizarea fiierelor. Dac vrei s modifici directorul sincro# nizat de pe maina sincronizat, o poi face adugnd urmtoarea # # Use VBoxManage to customize the VM. For example to change memory: directiv config.vm.synced_folder ../data, /vagrant_data n vb.customize [modifyvm, :id, --memory, Vagrantfile. 2048]
end

Sincronizarea directoarelor locale cu cele de pe maina

Congurarea reelei

Accesarea paginilor web n curs de dezvoltare, de pe maina virtual nu este o idee prea bun. Tocmai de aceea, Vagrant ofer funcionaliti pentru configurarea reelei, cu scopul de a accesa Provisionarea mainii virtuale maina virtual, de pe maina local. Vagrantfile are trei directive Provizionarea nu este o sarcin de care se ocup n mod norcare pot fi folosite pentru configurarea reelei. mal dezvoltatorii, deoarece administratorii de sistem sunt cei care fac lucrurile acestea. Ideea de la care se pornete este de a nregis config.vm.network :forwarded_port, guest: 80, tra configurrile setate pe un server, cu scopul de a le replica pe host: 8080 un alt server. Mai demult administratorii de sistem ineau un wiki Traducnd aceast directiv, deducem faptul c Apache-ul pentru comenzile rulate pe servere, dar aceast metod nu era cea instalat pe maina virtual, creat de Vagrant, poate fi accesat de mai bun. Alt opiune este s creezi back-up-uri .box sau .iso, astpe maina local, folosind url-ul http://127.0.0.1:8080. Aceasta fel nct noile servere s poat fi configurate pe baza acestor fiiere. nseamn c tot traficul din reea a fost redirecionat spre portul Dar, meninerea la zi a acestor fiiere este dificil i necesit mai specificat pe maina virtual. mult munc, fiind n acelai timp destul de greu s sincronizezi toate serverele n acest fel. Provizionarea n zilele noastre, ofer # Create a forwarded port mapping which allows acposibilitatea de a aduga software special pentru creare fiierelor cess to a specific port # within the machine from a port on the host made configurare, pentru executarea comenzilor, pentru crearea utilichine. In the example below, zatorilor sau managementul serviciilor, folosind sisteme moderne # accessing localhost:8080 will access port 80 on the guest machine. de provizionare. Vagrant poate fi integrat cu urmtoarele sisteme config.vm.network :forwarded_port, guest: 80, host: de provizionare: Shell, Ansible, Chef Solo, Chef Client, Puppet, 8080 Salt Stack. Cele mai populare sisteme de provizionare sunt Chef config.vm.network :public_network i Puppet, fiind meninute de o comunitate mare de utilizatori. Ambele sunt scrise n Ruby, avnd caracteristici similare cum ar fi # Create a public network, which generally matched to bridged network. modularizarea componentelor, pachete pentru instalarea software# Bridged networks make the machine appear as anului sau template-uri pentru fiiere personalizate. Ambele sisteme other physical device on # your network. sunt open source cu un model de plata pentru companii. O scurt config.vm.network :public_network trecere n revist pentru Puppet i Chef este prezentat n tabelul config.vm.network :private_network, ip: de mai jos.
192.168.33.10 # Create a private network, which allows host-only

Vagrant.configure(2) do |config| config.vm.synced_folder ../data, /vagrant_ data end

Provizionarea cu Shell
Provizionare cu Shell n Vagrant este relativ uoar. Poi scrie
www.todaysoftmag.ro | nr. 20/Februarie, 2014

19

programare
Vagrant pentru nceptori
MySql params.pp, din module/manifests/params.pp
class mysql::params { $manage_config_file = true $old_root_password = $root_password = strongpassword }

module/manifests/templates
Table 1. Chef vs. Puppet

comenzi inline sau poi meniona calea spre script-ul shell. Calea poate fi spre un director local sau extern. Comand inline Provizionarea cu Chef8 Solo config.vm.provision :shell, :inline => curl -L httReetele Chef Solo pot fi descrcate de pe Opscode9. Structura ps://get.rvm.io | bash -s stable unei reete Chef este prezentat n Cale fiier local Fig . 2. Structura unei Reete Chef config.vm.provision :shell, :path => install-rvm. Solo. Pentru adugarea configuraiilor sh, :args => stable doar fiierele scrise ngroat trebuie Cale fiier extern modificate. config.vm.provision :shell, :path=>https://example. Vagrantfile trebuie modificat com/install-rvm.sh, :args => stable dup cum este afiat mai jos pentru a Provizionare cu Pupppet folosi Chef Solo ca provizionar. Modulele Puppet pot fi descrcate de pe https://github.com/ config.vm.provision :chef_solo puppetlabs. Pe disc, un modul este un director care are structura do |chef| chef.cookbooks_path = prezentat n Fig. 1 Structura unui Modul Puppet. Programele cookbooks Puppet se numesc manifests i chef.add_recipe vafolosesc extensia .pp pentru fiiere. grant_main # chef.roles_path = Manifests pot folosi tipuri vari- ../my-recipes/roles Fig 2. Structura unei ate de logic, cum sunt declaraiile Reete Chef Solo # chef.data_bags_path = condiionale, coleciile de resurse, ../my- recipes/data_bags funcii pentru generarea textului, # chef.add_role web etc.. Dac nu vrei s setezi manual # # # You may also specify custom JSON attributes: fiierele manifest, exist un instru# chef.json = { :mysql_password => foo } ment foarte simplu de utilizat cu end GUI, care poate genera automat unde vagrant_main are urmtoarea structur: toate aceste fiiere. Acest instrument se numete PuPHPet7. Fig. 1 Structura unui Pentru a configura manual Modul Puppet Vagrant cu Puppet, trebuie s setezi directivele Puppet dup cum urmeaz:
config.vm.provision :puppet do |puppet| puppet.manifests_path = ./tools/puppet/manifests/ puppet.module_path = ./tools/puppet/modules puppet.manifest_file = init.pp puppet.options = [--verbose] End

Mysql Template [client] password=<%= scope.lookupvar(mysql::root_password) %>

vagrant_main/recipes/default.rb
include_recipe apache2 include_recipe apache2::mod_rewrite package mysql-server do package_name value_for_platform(default => mysql-server) action :install end

unde init.pp este de forma


include mysql::server class { ::mysql::server: root_password => strongpassword }

MySql init.pp, din module/manifests/init.pp


class mysql::server ( $config_file = $mysql::params::config_file, $manage_config_file = $mysql::params::manage_config_file, $package_ensure = mysql::params::server_package_ensure, )
7 https://puphpet.com

vagrant_main/templates/default.rb
NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin webmaster@localhost ServerName cfratila.tsm.com ServerAlias www.cfratila.tsm.com
8 http://www.getchef.com/ 9 http://community.opscode.com/

DocumentRoot /var/www

20

nr. 20/Februarie, 2014 | www.todaysoftmag.ro

TODAY SOFTWARE MAGAZINE


<Directory /var/www/sites/all/cfratila.tsm. com> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny Allow from all </Directory> ErrorLog <%= node[:apache][:log_dir] %>/tsm-error.log CustomLog <%= node[:apache][:log_dir] %>/tsmaccess.log combined LogLevel warn </VirtualHost>

Odat ce ai terminat configurarea fiierului Vagrantfile eti gata pentru crearea mainii virtuale. Pentru acest pas trebuie s deschizi interfaa n linia de comand i s navighezi n folderul proiectului, unde ar trebui s fie fiierul Vagrantfile, pentru a sincroniza directoarele. Apoi ruleaz vagrant up pentru crearea i pornirea mainii virtuale. Prima dat cnd vei rula vagrant up va dura puin mai mult, pentru c Vagrant va descrca box-ul configurat. n exemplul meu, eu nu am adugat box-ul rulnd comanda vagrant box add <name> <url>, motiv pentru care box-ul va fi adugat la rularea comenzii vagrant up.

Fig 4. Vagrant Procesul de lucru

baz const n crearea componentelor per aplicaie. Componenta este de fapt un instantaneu al aplicaiei fcut la un moment dat. Dac s-au modificat componentele, poi s faci commit la noul status al instantaneului, ceea ce face foarte uoar procedura de roll back. Acest proiect, care este nc n stadiu de dezvoltare, sun promitor, pentru c nu folosete maini virtuale cum funcioneaz Vagrant, ceea ce nseamn c att timpul de pornire ct i modalitatea de folosire a resurselor, sunt mai bune. D:\projects\tsm> vagrant up Comparnd metodologia de lucru a celor dou instrumente, Bringing machine default up with virtualbox provider... putem enuna urmtoarele afirmaii: [default] Box precise32 was not found. Fetching 1. Vagrant este mai bun pentru c pstreaz codul surs i box from specified URL for the provider virtualbox. Note that if the URL does not have a box for informaiile de deployment n acelai loc. this provider, you should interrupt Vagramt now and 2. Vagrant este mai bun pentru c este stabil i poate fi folosit add the box yourself. Otherwise Vagrant will attempt to download the full box prior to discovering this n producie. error. 3. Vagrant este mai bun pentru c poate fi integrat cu Linux, Downloading box from URL: http://files.vagrantup.com/ precise32.box Windows i Mac OS X. Progres: 1% <Rate: 41933/s, Estimated time remain4. Docker este mai bun pe parte de provizionare. ing: 2:15:30> 5. Procedura de roll back este mai rapid i mai uoar datorit Dup ce a fost creat maina virtual, poi rula comanda sistemului de instantanee. vagrant ssh pentru accesare. Pentru sistemele de operate Windows 6. Docker a venit cu un nou model de deployment. poi instala clientul PuTTY SSH, pentru accesarea mainii virtu7. Docker poate fi integrat doar cu mainile de Ubuntu. ale, folosind credenialele de mai jos. 8. Docker nu este recomandat n producie deoarece este nc n faza de dezvoltare.
D:\projects\tsm> vagrant ssh ssh executable not found in any directories in the %PATH% variable. Is an SSH client instaled? Try installing Cygwin, MinGW or Git, all of which contain SSH client. Or use the PuTTY SSH client with the following authentication information shown below: Host: 127.0.0.1 Port: 2222 Username: vagrant Private key: C:/Users/Carmen/.vagrant.d/insecure_ private_key

De ce merit s foloseti Vagrant?

Dac ai modificat doar fiierele de provizionare i vrei s testezi rapid, poi rula doar vagrant provision sau vagrant --provisionwith x,y,z, unde x,y,z reprezint provizionarul :shell, de exemplu. Dac vrei s salvezi statusul mainii virtuale pentru a nu boot-a de fiecare dat, poi rula vagrant suspend. Cu vagrant resume se rezum maina Vagrant care a fost suspendat. Procesul de lucru cu Vagrant10 nu este deloc complicat dup cum reiese i din Fig.4. Doar rulnd comanda vagrant up pe baza fiierului Vagrantfile, a configuraiilor setate pentru provizionar i provider, maina virtual este pornit i funcional.

Eu sunt un developer focusat pe PHP nu administrator de sistem. Vreau s petrec ct mai mult timp codnd. Nu vreau s mi fac griji legate de setarea mediului de lucru sau de setarea mainilor virtuale. Tot ceea ce vreau este s mi setez mediul de lucru ntr-un mod ct mai simplu i ct mai rapid. Vreau s evit situaiile n care maina mea virtual crap, i trebuie s o reconfigurez de la 0. De cnd folosesc Vagrant, nu mi mai fac asemenea griji, pentru c exist Vagrantfile, care mi pstreaz toate configurrile. Sincronizarea directoarelor i redirecionarea traficului prin forwarding port sunt dou caracteristici de care sunt foarte mulumit. Pe cnd dezvoltam fr a folosi Vagrant, pierdeam mult timp ateptnd s se sincronizeze fiierele de pe maina mea local, cu cele de pe maina virtual. Cu ajutorul directivei synced folders pot s lucrez n timp real pe maina virtual. n momentul de fa, comunitatea de utilizatori Vagrant este n cretere, dar este posibil ca ntr-un timp relativ scurt, Docker s devin cel mai folosit instrument n comunitatea de dezvoltatori.
Carmen Fril
carmen.fratila@3pillarglobal.com Software engineer @ 3Pillar Global

Mai sunt instrumente similare cu Vagrant?

Docker11 este un proiect open source folosit pentru ambalarea, tansportarea i rularea oricrei aplicaii ca un container. Ideea de
10 http://www.digitalforreallife.com/2012/11/boosting-teamwork-with-vagrant/ 11 http://www.docker.io/

www.todaysoftmag.ro | nr. 20/Februarie, 2014

21

management

Startup marketing: provocri i repere

uget, echip i n general resurse limitate, anonimat i nevoia de a crea contientizare, uneori nevoia de a educa piaa i nevoia de generare de oportuniti pentru vnzare - sunt doar cteva dintre provocrile cu care se confrunt deseori afacerile la nceput de drum. n acest context, procesul i abordarea de marketing n startup-uri are cel puin cteva particulariti, deseori semnalate n literatura de marketing i cu siguran trite de multe organizaii n primele etape ale existenei.
Sorina Mone
sorina.mone@fortech.ro Marketing manager @ Fortech

n primul rnd, poate mai mult dect alte procese, marketingul n startup-uri este inovativ. Resursele limitate pun managerii i specialitii de marketing (dac exist persoane dedicate!) n situaia de a gsi soluii la aceste neajunsuri, deseori neconvenionale. Se spune c disperarea duce la inovare. Tocmai de aceea este foarte popular n contextul startup-urilor din domeniul tehnologiei conceptul de growth hacking, introdus de Sean Ellis i care are n centru creativitatea i folosirea de metode neconvenionale pentru a obine creteri rapide i spectaculoase. Sigur c nu implic reinventarea roii, ci mai degraba folosirea unor concepte i practici deja populare (precum cele din zona content marketing sau community marketing), dar ntr-un mod inedit, care atrage atenia i faciliteaz diseminarea rapid. Produse cunoscute precum Dropbox, LinkedIn sau YouTube sunt deseori date ca exemple de growth hacking. Apoi, abordarea este pe termen scurt. Este oarecum firesc s fie aa: nu exist un istoric al afacerii, previziunile sunt mai dificil de realizat i n plus, scopul este pn la un anumit punct supravieuirea. Din pcate uneori, i mai cu seam n economii mai puin mature cum este cazul rii noastre, la

acest lucru contribuie i factorii din mediul extern, n special cel macro (legislaie instabil, situaia socio-economic etc.). n sfrit, marketingul este puternic influenat de personalitatea managerului care este cel mai adesea i proprietarul afacerii (antreprenor). Deseori, cultura organizaional a unei companii tinere sau de dimensiuni reduse se contureaz n jurul antreprenorului i preia caracteristicile definitorii ale personalitii acestuia. n esen, nu este un aspect negativ, ns pot fi situaii n care dependena prea mare de antreprenor poate determina neajunsuri. Un exemplu simplu e blocajul la nivel decizional; pot fi situaii n care, n absena managerului - antreprenor, nu se iau decizii i lucrurile nu se mic, n condiiile n care agilitatea trebuie s fie un punct forte al unui startup. Avnd n vedere aceste provocri, strategia de marketing (procesul de segmentare - intire - poziionare i ntregul mix de marketing: produs, pre, promovare, distribuie) ntr-un startup const cel mai adesea din a identifica un set de prioriti, a lua nite decizii i a le executa. Cteva repere sunt eseniale ntr-un asemenea context:

22

nr. 20/Februarie | www.todaysoftmag.ro

n primul rnd, este necesar a se rspunde la o serie de ntrebri menite a contura poziionarea produsului: Cui se adreseaz? Ce nevoi sau probleme rezolv pentru aceti consumatori? Ce-l difereniaz de alte produse similare existente deja pe pia (mai cu seam c inovarea nseamn cel mai adesea n mediul actual abordri noi sau produse modificate i mai puin un produs total nou)? Cunoaterea ct mai detaliat a viitorului client potenial este esenial, putnd furniza baza unor decizii importante inclusiv n faza de concepie i dezvoltare a produsului (decizii legate de funcionaliti i caracteristici). Ca metod practic, se recurge deseori la creionarea unui profil ct mai comprehensiv al consumatorului (i.e. buyer persona), care s vizeze caracteristici demografice, sociale, economice ale acestuia: vrst, profesie, venituri, obiceiuri, ce interese are etc. . Odat identificat consumatorul, nevoia adresat de produs i avantajul competitiv al acestei soluii, acest avantaj trebuie comunicat. Intervine aici procesul de branding, care la un nivel de baz include alegerea unui nume, formularea unor declaraii de misiune i de viziune (mission and vision statements) i a unor mesaje cheie (key value propositions). n raport cu naming-ul, mai ales dac discutm de un produs software B2C, adresat utilizatorilor de tip consumatori individuali, e important s fie uor de identificat i de reinut, s fie memorabil. Iar mesajele cheie, pentru a fi recepionate ntr-o msur ct mai mare i a nu fi doar unele dintre numeroasele mesaje cu care un consumator este bombardat, e de preferat s articuleze beneficiile pentru utilizatori, soluii la probleme cu care

acetia se confrunt, mai degrab dect caracteristici obiective ale produsului. Nu n ultimul rnd, trebuie luate n considerare aspectele de protecie a proprietii intelectuale: nregistrarea mrcii, a elementelor grafice, parcarea unui domeniu web dorit, a denumirilor paginilor pe reelele sociale etc. . Apoi urmeaz partea cea mai interesant i mai provocatoare pentru un om de marketing ntr-un startup: generarea cererii pentru produs i crearea oportunitilor de vnzare. Aciunile care definesc aceast etap pot intra ntr-una din cele dou categorii: Outbound marketing - include aciuni de marketing precum publicitate, e-mail marketing i telemarketing, participare la trguri, evenimente etc. - n general, eforturi de outreach ctre segmentele int. Inbound marketing - include eforturi de marketing care, dimpotriv, fac produsul sau compania s fie gsite de consumatori i nu viceversa. n sfera marketingului digital, implic dezvoltarea unui website care s atrag vizitatorii n mod natural, prin optimizare pentru motoarele de cutare, prin platformele de social media sau pres. Eforturile de inbound marketing sunt de durat, dar mai puin costisitoare n general dect publicitatea (necesit doar capaciti editoriale, creativitate i timp) i, foarte important, odat puse bazele, sunt cu efecte i rezultate pe termen lung. Aceste lucruri nu doar c pot face diferena dintre supravieuirea sau eecul unui startup, ci pot oferi premisele pentru creterea dorit. Aici intervine i growth hacking-ul, mai cu seam dac se dorete obinerea unor surse de finanare pentru dezvoltarea startup-ului. Investitorii doresc

poveti de succes, nu doar idei cu potenial i, mai ales, doresc afaceri sntoase. De aceea, growth hacking-ul trebuie abordat cu precauie, ntruct numerele sunt importante, dar e important i ca acestea s aib fundamente solide, i anume un produs de calitate, care ncnt i nu dezamgete utilizatorii. O experien corect cu produsul poate determina ca utilizatorii s devin principalul motor al creterii afacerii, situaia ideal pentru un startup cu planuri mree.

Young spirit Mature organization A shared vision Join our journey!


www.fortech.ro

www.todaysoftmag.ro | nr. 20/Februarie, 2014

23

management

Clusterul Cluj IT i Antreprenoriatul

Daniel Homorodean

daniel.homorodean@clujit.ro Membru n Consiliul Director @ Cluj IT Cluster

nc din prima zi a existenei Clusterului Cluj IT ni s-a adresat ntrebarea: Ce va face Clusterul pentru sprijinirea antreprenoriatului ? Aceast ntrebare a venit mereu, n decursul a mai bine de un an de la nfiinarea Clusterului, la toate conferinele i evenimentele la care reprezentanii organizaiei au participat. Sigur, ntotdeauna ntrebarea a primit un rspuns, pe care l-am simit mereu nesatisfctor, nu doar n ochii celor care ntrebau, ci chiar n mintea noastr, a celor din Cluster. Pentru c ne-am asumat un rol important n sprijinirea industriei IT romneti, am creat i am cultivat ateptri, care trebuie ndeplinite, pentru c rezultatele vizibile i accesibile sunt cele dup care suntem judecai. Clusterul Cluj IT s-a nscut dintr-o nevoie direct, din contientizarea faptului c modul n care industria IT romneasc a crescut i a funcionat timp de muli ani nu mai poate fi sustenabil pe termen lung. Avem peste 8000 de specialiti IT n Cluj, o densitate extraordinar comparativ cu populaia oraului. Am ajuns aici printr-o cretere organic i relativ rapid, miznd la nceput pe costul redus al forei de munc, iar apoi pe costul competitiv n raport cu calitatea pregtirii i calitatea serviciilor programatorilor notri. Dar a miza n continuare pe pre nu e doar o strategie periculoas, ci una sinuciga, n condiiile n care diferena ntre costul de producie dintre noi i pieele tradiionale ale IT-ului clujean ( vestul Europei i US) scade permanent. Nu este un secret pentru nimeni c singura cale de dezvoltare pe termen lung este crearea de valoare adugat sustenabil, iar modul cel mai sntos de a o face este prin crearea i valorificarea de produse bazate pe inovaie. Cum reuim s crem i s valorificm produse inovative n Romnia ? Fr a avea un rspuns la aceasta ntrebare fundamental, fr a avea soluii conturate pentru aceasta, celelalte ntrebri au rspunsuri fragile. Inovaia nu este un act punctual, ci un proces. Un proces care trebuie pregtit i care trebuie executat cu maturitate i cu nelepciune. ntr-adevr pregatirea dureaz mai mult dect oricare dintre noi am vrea, pentru c n sine este un proces de nvare, iar schimbarea direciei de la outsourcing la inovare necesit o schimbare de cultur. n primul an al existenei Clusterului am cutat cile de a construi fundamentul acestei schimbri. Schimbarea de cultur este prioritar i const n trecerea de la un mediu IT fragmentat, mcinat de nencredere spre un mediu bazat pe cooperare ntre firme, universiti i instituii publice. Dorim schimbare n modul n care cercetarea fundamental ajunge s slujeasc unor scopuri pragmatice i lucrative, n urma transferului tehnologic, n loc s rmn

24

nr. 20/Februarie | www.todaysoftmag.ro

cantonat n cercul restrns al cercettorilor. Schimbarea s-ar impune i n cultura companiilor noastre, care nu sunt formate din resurse vndute la ora, ci sunt formate din oameni valoroi care pot i care vor s contribuie cu iniiative la succesul companiilor lor, i care merit s beneficieze de pe urma acestui succes. Schimbate trebuie s fie i sistemele rigide, reticente la risc, unde locul fiecruia este strict reglementat, n sisteme dinamice i adaptative, unde iniiativele curajoase sunt susinute i pot nflori organic. Pentru toate acestea a fost i este nc nevoie de timp. Dar acum, dup mai bine de un an n care am lucrat mpreun n Cluster, chiar dac mai puin vizibil dinspre exterior, tim c suntem pe drumul cel bun i c putem s ne asumm cu mai mare ndrzneal paii urmtori. Romnia i n mod particular Clujul se afl acum ntr-un moment de mare efervescen a culturii start-up n IT. Avem acces la informaie, avem exemple extraordinare din pieele mai dezvoltate, ncepem s avem oameni i organizaii care coaguleaz aceasta micare, prin evenimente, centre de ntlnire i co-work i chiar acceleratoare. Mai tim i c bani exist, c nu e imposibil s ajungem la ei atta timp ct putem s susinem o propunere de valoare i s convingem c avem capacitatea i maturitatea s ne punem ideile n execuie. i mai tim c produsele inovative sunt construite i susinute de ctre antreprenori, pe care este esenial s i avem i s i sprijinim. Acum, suntem la stadiul de maturitate organizaional pentru a putea s o facem, ntr-un mod relevant. Cluj IT urmrete s fie un catalizator al mediului antreprenorial n Cluj i n Romnia. Un factor de coagulare i facilitare a cooperrii ntre startupuri i mediul de afaceri matur, mediul academic i factorii administraiei publice. Urmrim s operm un cadru permanent de educaie antreprenorial, adresat nu doar startupurilor ci i organizaiilor mature, aflate n faa provocrii de a se reinventa, de a vedea potenialul oamenilor lor i de a dezvolta antreprenoriatul intern. Termenul de intraprenoriat a fost creat tocmai pentru aceasta. ntre mediul matur de business i mediul startupurilor exist nc un clivaj, pe care este necesar s l surmontm pentru a crea un ecosistem sntos. Firmele mature au resurse disponibile, att umane ct i financiare, au experien operaional, neleg verticalele de business, au relaii parteneriale relevante i cunosc mecanismele pieelor externe pe care opereaz. n multe dintre ele ns structurile i procesele sunt mai rigde, exist o mare reticen la risc iar iniiativa intraprenorial nu este ncurajat. De cealalt parte, tinerii antreprenori pornesc fr resurse, fr experien operaional, cu cunotine precare n domeniul segmentelor de business pe care ar dori s le serveasc i fr a cunoate specificul pieelor geografice n care ideile lor s-ar putea transforma n succes. Entuziasmul este esenial, dar nu suplinete lipsa experienei, iar greutile inerente procesului de autoeducare antreprenorial risc s devin descurajatoare. Aceste dou laturi au nevoie una de alta, iar fr o punte ntre ele mediul IT romnesc risc s evolueze cu opinteli, n loc s i valorifice plenar potenialul. Este foarte important pentru noi s adresm aceasta problem i s crem un dialog relevant ntre cele dou pri pentru a ncuraja dezvoltarea de parteneriate. De asemenea, schimbul de informaii i cunotinte ntre firmele de IT este esenial, privind metodologii i bune practici sau specificul pieelor geografice. Urmrim s facilitm accesul la consultana relevant venit din pieele mature, accesul la parteneri operaionali sau financiari, i la finanare direct, n special capital de risc ( venture capital). n relaia cu mediul

academic, un program permanent de brokeraj este pregtit pentru a facilita cooperarea n domeniul cercetrii, direcionarea cercetrii n funcie de cerinele pieei precum i transferul tehnologic n vederea realizrii de produse inovative. Avem strategie, aadar. Vei ntreba desigur dac avem i un plan. Avem, dar conteaz mai puin s l declarm i mult mai mult s l demonstrm. Pentru c, dup cum spun muli investitori i antreprenori cunoscui, ideile sunt valoroase, dar esenial este execuia.

www.todaysoftmag.ro | nr. 20/Februarie, 2014

25

interviu

Interviu cu Radu Georgescu

ncepem publicarea unei serii de interviuri luate n cadrul How To Web 2013, cel mai important eveniment dedicat inovaiei, antreprenoriatului i tehnologiei din Europa de Sud-Est. Radu Georgescu este un cunoscut antreprenor IT din Romnia prin construirea mai multor produse romneti ce au fost achiziionate de companii importante precum: RAV Antivirus a fost cumprat de Microsoft, Gecad ePayment de ctre Napster, iar ultima mare tranzacie fiind vnzarea Avangate. Q: Bun, Radu, eti unul dintre cei mai faimoi antreprenori din Romnia! Poi s ne spui pentru cititorii revistei Today Software Magazine, cum a nceput totul? De la ce s-a pornit ? Radu Georgescu: Este istorie, am pornit n 1992, am terminat facultatea, am vndut primele programe, dup aceea au fost ncepute altele, dintre care unele au ratat. Q: Primele aplicaii au fost antivirui? RG: Am nceput prin a scrie o aplicaie peste Autcad/Autodesk, dup aceea am continuat cu alte trei produse, toate trei au ratat, antivirusul s-a vndut la Microsoft. Dup aceea am fcut alte companii, unele au ratat, Gecad ePayments s-a vndut ctre Napsters. Q: Dac vorbim despre Gecad i faimoasa vnzare ctre Microsoft, poi s ne spui dac Microsoft a fost atras de aspectul tehnic al aplicaiei sau a existat o parte de marketing ctre acetia? RG: Microsoft a fost interesat fix de aspectul tehnic. Microsoft a cumprat tehnologia i pe oamenii tehnici care au venit mpreun cu tehnologia. Q: Oamenii tehnici nc lucreaz la Microsoft? RG: Absolut, dar nu din Bucureti, din Redmond. Practic compania a fcut tehnologia pentru Microsoft, iar Microsoft le-a fcut o ofert oamenilor respectivi s se mute n Redmond i ei s-au mutat toi acolo unde sunt i acuma. Ei sunt partea principal a echipei care dezvolt securitatea pentru Microsoft n ziua de azi. Q: Legat de ultimul succes Avangate, poi s ne spui cteva cuvinte despre acesta ? Ct timp a durat dezvoltarea? RG: Compania a nceput n 2006, de apte ani cu o cretere de 70% anual. Q: Clienii erau romni? RG: Compania era multinaional, cu headquarter n Statele Unite, cu birouri n Romnia, Olanda, China, Rusia i Cambodgia. Q: Startup-urile ncep s fie la mod n Romnia, cum vezi evoluia lor n viitor? Ne putem atepta ca la un moment dat s depeasc outsourcing-ul ? RG: Sunt i vicepreedinte ANIS, iar Andrei Piti este preedinte i mpreun cu el ne-am fcut un obiectiv din a convinge companiile de outsourcing s i fac n interiorul lor i o mic bucat de produs. Cred c outsourcing-ul are urmtoarea problem : este dependent n general de unul

Ovidiu Man, PMP

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

26

nr. 20/Februarie | www.todaysoftmag.ro

sau doi clieni, este o vnzare ieftin de minute-om, nescalabil, n timp ce produsul este scalabil exponenial, independent de furnizor. ncercm s construim acest trend de migrare dinspre outsourcing spre product i sper s se ntmple lucrul acesta. Vedem c ncet, ncet se ntmpl. ANIS a fcut i un studiu care s-a lansat acum dou sptmni. Q: Care crezi c vor fi domeniile interesante, cu potenial n viitor? RG: A fost prezentarea lui Robin azi diminea care a fost excepional i are mult dreptate. Nu tiu, nu sunt un vizionar, nu vd viitorul, nu pot s rspund la aceast ntrebare. RG: D-mi voie s-i adresez i eu o ntrebare. De ce nu i faci revista n englez? Ovidiu Man: Este i n englez. De obicei cea n englez apare cu o lun n urm RG: Foarte tare ! Felicitri! Revist de software fcut n Romnia. i ai i cititori din strintate? OM: Da, dar majoritatea sunt cititori din Romnia - cteva mii- i cteva sute din strintate. Ultima parte este tehnic, iar prima parte este despre evenimente. RG: Mi s-ar prea foarte simpatic s faci din asta o revist internaional cum este TechCrunch i The Next Web. Ar fi absolut senzaional s faci aa ceva ! Q: Ce prere ai despre Google Glasses i cum o s evolueze tehnologia n viitor?

Nu tiu dac Google Glasses va fi ctigtorul, dar este evident c ceea ce americanii numesc whearables vor ajunge n viaa noastr. Sunt ochelarii de la Google sau din alt parte, sunt ceasurile, sunt pantofii, sunt telefoanele, sunt bentiele, habar nu am, dar cred foarte tare c ceva va ajunge. Q: Ce prere ai despre startup-urile romneti? Nu avem neaprat nite startupuri de succes. Cum nu avem ? Este Oxygen XML, este cel mai tare tool de editat XML-uri din lume, este un business extraordinar. Nici Avangate nu prea spectaculos [..] De ce companiile bune sunt companiile provenite din Radu Georgescu i Florin Talpe?! Sunt attea mii de antreprenori extraordinari. S judecm o companie pentru ce este ea i nu pentru omul din spate. OxygenXML, fr a avea nici o legtur cu el, se vinde pentru c este att de bun, ce vrei mai spectaculos de att? Puteau s fac o treab i mai bun i s l promoveze? Da, dar produsul acela este un produs extraordinar. Q: Care este ingrendientul lips care poate lipsete startup-urilor din Romnia? Se construiete. Timpul este elementul lips. S gsim exemple de succes.Oamenii s construiasc, oamenii rateaz, iar noi trebuie s nvm din experienele rateurilor mele, ale tale, ale oamenilor i s ncepem s ncercm din ce n ce mai mult. Se construiete infrastructura de angel

investment, se construiete infrastructura de VC-uri, se construiesc evenimente, totul se construiete i n timp va fi. Gndete-te l a Mave n Hut , U b e r v u, S of tp e d i a , gndete-te la Emi Gal. Toi sunt exemple de succes. Q: Exist o reet de success? Ceea ce ncerc eu mpreun cu Andrei este s convingem companiile de outsourcing, care sunt chiar cele care pot s fac asta, s i construiasc mici produse care s takeover. Q: Un sfat pentru tinerii care vor s i fac un startup ? Nu dau sfaturi, nu mi permit s dau sfaturi. Nu poi s dai sfaturi generale de la nelepii pmntului.

www.todaysoftmag.ro | nr. 20/Februarie, 2014

27

programare

startups

Restricted Boltzmann Machines

Deep learning a obinut primul succes n 2006, cnd Geoffrey Hinton i Ruslan Salakhutdinov au publicat articolul Reducing the Dimensionality of Data with Neural Networks, care a fost prima aplicare eficient i rapid a mainilor Boltzmann restrnse (Restricted Boltzmann Machines sau, pe scurt, RBM). Dup cum sugereaz i numele, RBM-urile sunt un fel de maini Boltzmann, cu anumite constrngeri. Acestea au fost propuse de Geoffrey Hinton i Terry Sejnowski n 1985 i au fost primele reele neuronale care puteau s nvee reprezentri interne (modele) ale datelor de intrare i s se foloseasc de aceasta pentru a rezolva apoi diferite probleme, cum ar fi completarea de imagini incomplete. Ele nu au fost folosite mult devreme deoarece, n lipsa unor constrngeri, algoritmul de nvare a reprezentrii interne era foarte ineficient. Conform definiiei, mainile Boltzmann sunt reele neuronale recurente stochastice generative. Stochasticitatea lor nseamn c au un element probabilistic n ele i neuronii din reea nu sunt activai n mod deterministic, ci cu o anumit probabilitate, n funcie de intrrile lor. Faptul c sunt generative nseamn c nva distribuia de probabilitate a variabilelor de intrare i construiesc un model pentru acestea, care poate fi folosit apoi pentru a genera alte date aleatorii, similare celor cu care au fost antrenate. Dar exist i un alt mod de a privi mainile Boltzmann, ca fiind modele grafice bazate pe energie. Aceasta nseamn c fiecrei combinaii de date de intrare asociem un numr, numit energie, iar pentru combinaiile pe care le avem ntre datele de intrare dorim ca energia s fie ct mai mic, iar pentru toate celelalte s fie ct mai mare.

up ce n articolul trecut am prezentat pe scurt istoria deep learning-ului i am enumerat cteva dintre tehnicile care se folosesc, acum voi oferi detalii despre prile componente ale unui sistem de deep learning. care genereaz stratul de intrare. Dac analizm notele date de utilizatori unor filme, atunci stratul de intrare corespunde notelor date de un utilizator la mai multe filme, iar stratul ascuns corespunde categoriilor de filme. Aceste categorii nu sunt predefinite, ci RBM-ul construiete un model intern n care grupeaz filmele astfel nct energia total s fie minimizat. Dac datele de intrare sunt pixeli ai unei imagini, atunci putem considera stratul ascuns drept trsturi ale obiectelor care genereaz acei pixeli (cum ar fi margini de obiecte, coluri, linii drepte i alte trsturi care difereniaz obiectele). Privind RBM-urile ca modele bazate pe energie, putem s ne folosim de tehnici preluate din fizica statistic ca s estimm distribuia de probabilitate i apoi s facem predicii. De altfel, partea de Boltzmann din nume vine de la faptul c distribuia pe care o va nva este de tip Boltzmann, o distribuie clasic din fizica statistic. Energia unui astfel de model, tiind vectorul v (stratul de intrare), vectorul h (stratul ascuns), matricea W (ponderile asociate fiecrei conexiuni dintre un neuron din stratul de intrare i cel ascuns), i vectorii a i b (care corespund pragurilor de activare specifice fiecrui neuron din stratul de intrare, respectiv stratul ascuns) este dat de urmtoarea formul:

Dei pare urt formula, este vorba doar de adunare i nmulire de matrici. Odat ce avem energia pentru o stare, probabilitatea ei este dat de:

Z este un factor de normalizare, ca s dea bine probabilitile.


Model grafic pentru un RBM cu 4 uniti de intrare i 3 uniti ascunse.

Constrngerea impus asupre RBM-urilor este c neuronii trebuie s formeze un graf bipartit, ceea ce n practic nseamn c nu exist legturi ntre neuronii din stratul vizibil, nici ntre neuronii din stratul ascuns, ci doar ntre cele dou straturi. n figura de alturi se observ c nu avem conexiuni ntre v-uri, nici ntre h-uri, ci doar ntre fiecare v cu fiecare h. Stratul ascuns din RBM se poate considera ca fiind factorii

Aici este unul din locurile unde constrngerile din RBM ne ajut. Pentru c neuronii din stratul vizibil nu sunt conectai ntre ei nseamn c dac fixm neuronii din stratul ascuns, atunci neuronii din stratul vizibil sunt independeni unii de alii. Aa c putem obine uor probabilitatea unor date de intrare pentru o valoare fix a neuronilor din stratul ascuns:

28

nr. 20/Februarie, 2014 | www.todaysoftmag.ro

unde neuron:

reprezint probabilitatea de activare a unui singur clasificarea notielor sau pentru recomandare de muzic. n continuare vom prezenta ce uor se poate antrena un RBM pe un set de imagini care conin litere i cifre, dup care vom vizualiza filtrele pe care le nva acesta. este funcia logistic
from sklearn.neural_network import BernoulliRBM as RBM import numpy as np import matplotlib.pyplot as plt import cPickle X,y = cPickle.load(open(letters.pkl)) X = (X - np.min(X, 0)) / (np.max(X, 0) + 0.0001) 0-1 scaling rbm = RBM(n_components=900, learning_rate=0.05, batch_size=100, n_iter=50) print(Init rbm) rbm.fit(X) plt.figure(figsize=(10.2, 10)) for i, comp in enumerate(rbm.components_): plt.subplot(30, 30, i + 1) plt.imshow(comp.reshape((20, 20)), cmap=plt. cm.gray_r, interpolation=nearest) plt.xticks(()) plt.yticks(()) plt.suptitle(900 components extracted by RBM, fontsize=16) plt.show() #

n mod analog se poate defini i probabilitatea pentru stratul ascuns, avnd stratul vizibil fixat.

La ce ne ajut dac tim aceste probabiliti? S presupunem c tim valorile corecte ale ponderilor i ale pragurilor de activare a neuronilor pentru un RBM i c vrem s vedem ce obiecte sunt ntr-o imagine. Punem pixelii imaginii ca fiind intrrile RBM-ului i calculm probabilitile de activare pentru stratul ascuns. Aceste probabiliti le putem interpreta drept filtre pe care le-a nvat RBM-ul despre obiectele care pot exista n imagini. Lum valorile probabilitilor, i le introducem ntr-un alt RBM ca date de intrare. Acest RBM scoate i el la rndul lui alte probabiliti, care sunt filtre pentru intrrile lui. Aceste filtre sunt de un nivel mai nalt deja. Repetm acest procedeu de cteva ori, punem unul peste altul RBM-urile, peste ultimul strat punem un strat de clasificare (chiar i regresia logistic funcioneaz bine) i obinem un Deep Belief Network.

O parte din filtrele nvate de RBM. Se observ filtre pentru literele B, R, S i pentru cifrele 0, 8, 7 i altele

Antrenare ntr-un mod greedy a unui DBN

Ideea care a stat la baza revoluiei deep learning a fost aceasta: c poi nva strat cu strat filtre pentru trsturi tot mai complexe i astfel la sfrit nu mai clasifici ce este ntr-o poz direct din pixeli, ci din trsturi de nivel nalt, care sunt mult mai bune indicatore pentru coninutul unei poze. nvarea parametrilor unui RBM se face cu un algoritm numit contrastive divergence. Acesta pornete cu un exemplu din datele de intrare, calculeaz valorile pentru stratul ascuns, pentru ca din aceste valori obinute pentru stratul ascuns s se simuleze apoi ce valori de intrare au produs. Parametrii sunt apoi schimbai cu diferena dintre valoarea original i valoarea simulat (sub form de produs matriceal). Aceasta se repet pentru fiecare exemplu din datele de intrare, de mai multe ori, pn cnd fie eroarea devine suficient de mic, fie au trecut un numr predefinit de iteraii. RBM-urile sunt implementate n multe librrii de nvare automat. Una dintre acestea este scikit-learn, o librrie Python care este folosit de firme cum ar fi Evernote sau Spotify pentru

RBM-urile sunt o component esenial de la care a pornit deep learning-ul i sunt unul din puinele modele care ne permit s ne construim eficient o reprezentare intern a problemei pe care dorim s o rezolvm. n articolul urmtor, vom vedea o alt abordare la nvarea reprezentrilor interne, cu autoencodere.

Roland Szabo

roland.szabo@3pillarglobal.com Junior Python Developer @ 3 Pillar Global

www.todaysoftmag.ro | nr. 20/Februarie, 2014

29

programare

Maven, The Denitive Guide

oi ncepe aceast recenzie prin a clarifica ce este Maven. Conform site-ului oficial: http://maven.apache.org, Maven, care este un produs Apache, reprezint un instrument de gestiune a unui proiect software. Gestiunea cuprinde construirea, raportarea i documentarea unui proiect, bazndu-se pe conceptul de POM (Project Object Model). Un POM este unitatea fundamental de lucru n Maven i este de fapt un fiier XML, ce conine informaii despre proiect i detaliile de configurare, folosite n construirea proiectului. Maven este unul dintre cele mai cunos- proiectul pentru a-l aduce aproape de o ciclu de via al unui build. Autorii, ca i cute project builder-e, alturi poate de Ant, form real. Aceasta nseamn aduga- n cazul lui POM, descriu mai multe tipuri un produs tot Apache. Deosebirile majore rea de dependene, resurse i unit teste. de cicluri de via, cititorul fiind ndemntre acestea dou constau n faptul c Ant Proiectul, din punctul de vedere al compo- nat s le citeasc: Clean Lifecycle, Default este orientat doar spre procesare, compi- nentelor Java, va conine un servlet simplu, Lifecycle, Site Lifecycle. lare, mpachetare, testare i distribuie. Pe pe care l vom introduce ntr-un proiect Un profil de build ne permite s custolng capabilitile de build, amintite ante- multimodul. mizm un build pentru un anumit mediu, rior, Maven poate rula rapoarte, genera n capitolele urmtoare se vor crea asigurnd astfel portabilitatea ntre aceste rapoarte sau facilita comunicarea ntre proiecte enterprise complexe, folosind fra- medii. Cele considerate n carte sunt: promembrii unei echipe de lucru. mework-urile Spring i Hibernate. Nu este ducia i dezvoltarea. Capitolul unsprezece Dac rolul fundamental al lui Maven obligatoriu s fii un bun cunosctor al aces- aduce n discuie conceptul de profil de este acela de a pune mpreun compo- tor tehnologii. Ideile abordate sunt simple. build . n primul rnd aflm ct este de nente, ce fac parte dintr-un proiect, putem Accentul se pune aproape exclusiv pe con- important portabilitatea, ct de mult afirma cu certitudine c tiu proiecte de struirea fiierelor de Maven. influeneaz portabilitatea performanele succes care nu folosesc Maven pentru Partea a treia aduce n discuie ideea de proiectului i care este nivelul potrivit de aceste scopuri. Fie c fiierele Maven sunt performan. Dac pn n acest moment portabilitate. generate i rulate automat, fie c nu exist ne-am familiarizat cu conceptele Maven i Maven Assemblies sunt discutate n pur i simplu Maven. Dependena direct a am construit un proiect enterprise simplu, capitolul doisprezece i aprofundate n diverselor componente elimin ntr-o mare dar cuprinztor, de acum ncolo autorii capitolul treisprezece. Aadar, putem crea msura folosirea acestui instrument. ncearc s deschid cititorilor drumul o palet larg de arhive: JAR, WAR, EJB sau Revenind la cartea care reprezint spre mbuntirea controlului asupra EAR. Asamblarea este un proces complex obiectul acestei recenzii, Maven The dependenelor i plugin -urilor pentru a ce necesit descriptori cu o structur comDefinite Guide, aprut la OReilly n anul uura mentenana viitoare a construciilor. plicat, dar descris amnunit n aceast 2008, aceasta este un ghid complet de ne- Curarea POM-ului, optimizarea depen- carte. legere i folosire a Maven-ului. denelor i a plugin-urilor sunt tehnici de Capitolul patrusprezece este un ghid Primele dou capitole, care constituie minizare a duplicrilor, cu un rol esenial excelent de utilizare al Maven-ului folosind i prima parte, sunt o scurt introducere n evitarea problemelor viitoare. Eclipse. n Maven, dar care aduc i detalii foarte Capitolul nou ofer o analiz amUltimele capitole prezint detaliat etaimportante de instalare i rulare pe toate nunit referitoare la conceptul i suportul pele generrii unui site folosind Maven, un platformele (acestea includ Mac, Windows, fizic POM. Analogia, pentru nceptori, o Repository Manager respectiv scrierea de Linux, FreeBSD sau Open BSD). fac cu fiierul web.xml din Java. Aa cum plugin-uri. Partea a doua este centrat pe exem- descrie aceasta, configureaz i custoAtept cu mare plcere comentariile i ple. Exemplele pornesc gradual i ajung s mizeaz aplicaia, n acelai fel pom.xml discuiile cititorilor pe programez.ro. constituie o surs suficient de informaie definete proiectul Maven. Probabil c citiV doresc lectur placut! pentru a utiliza cu succes Maven. Pe lng torii vor descoperi cu plcere conceptele Silviu Dumitrescu explicaii, autorii furnizeaz exemple, care pe care autorii le introduc ca aparinnd silviu.dumitrescu@msg-systems.com pot fi descrcate. sferei POM: Super POM, Simplest POM, Consultant Java Dup dezvoltarea primului proiect, Effective POM, Real POM i nu n ultimul @ msg systems Romania simplu, dar cu importante clarificri teo- rnd POM best practices. retice, vom avea ocazia s customizm Capitolul zece clarific noiunea de

30

nr. 20/Februarie, 2014 | www.todaysoftmag.ro

programare

Multithreading n standardul C++11 (II)

n exemplele anterioare am prezentat i analizat metode de protejare a datelor comune ntre mai multe thread-uri. Uneori ns nu este suficient doar protejarea datelor comune, fiind necesar i sincronizarea operaiilor executate de diferite thread-uri. n general se dorete ca un thread s atepte pn cnd are loc un anumit eveniment sau pn cnd o anumit condiie devine adevrat. n acest scop, librria standard C++ ofer primitive precum variabilele condiionale i futures.
Dumitria Munteanu
Software engineer @ Arobs dumitrita.munteanu@arobs.com

Var i abi l e l e c on d i i on a l e au n standardul C++11 nu o singur implementare, ci dou: std::condition_variable i std::condition_variable_any. Ambele implementri pot fi folosite prin includerea header-ului <condition_variable>. Pentru a facilita comunicarea ntre threa duri, variabilele condiionale sunt, de obicei, asociate cu un mutex, pentru std::condition_variable sau cu orice alt mecanism care ofer excludere mutual, pentru std::condition_variable_any. Thread -ul care ateapt ca o variabil condiional s devin adevrat trebuie, mai nti, s blocheze un mutex, folosind primitiva std::unique_lock, a crei necesitate o vom vedea ulterior. Mutex-ul este deblocat atomic atunci cnd t hread -ul ncepe s atepte ca variabila condiional s devin adevrat. n momentul n care se primete o notificare relativ la variabila condiional, th read -ul este repornit, blocnd din nou mutex-ul. Un exemplu practic poate fi un buffer care este folosit pentru a transmite date ntre dou thread-uri:

std::mutex mutex; std::queue<buffer_data> buffer; std::condition_variable buffer_ cond; void data_preparation_thread() { while(has_data_to_prepare()) //-- (1) { buffer_data data = prepare_ data(); std::lock_quard<std::mutex> lock(mutex); //-- (2) buffer.push(data); buffer_cond.notify_one(); //-- (3) } } void data_processing_thread() { while(true) { std::unique_lock<std::mutex> lock(mutex); //-- (4) buffer_cond.wait(lock, [] {return ! buffer.empty()}) //-(5) buffer_data data = buffer. front(); buffer.pop(); lock.unlock(); //-- (6) process(data); if(is_last_data_entry(data)) break; } }

www.todaysoftmag.ro | nr. 20/Februarie, 2014

31

programare
Multithreading n standardul C++11 (II)
Atunci cnd datele sunt pregtite de procesare (1) , thread -ul care pregtete datele blocheaz mutex-ul (2) , pentru a proteja buffer-ul cnd adaug noile valori. Apoi apeleaz medota notify_one() asupra variabilei condiionale buffer_cond (3) pentru a notifica thread-ul care atepta date (dac este vreunul) c buffer-ul conine date ce pot fi procesate. Thread-ul care proceseaz datele din buffer mai nti blocheaz mutex-ul dar, de data aceasta, folosete un std::unique_lock (4). Thread-ul apeleaz apoi metoda wait() asupra variabilei condiionale buff_cond, trimindu-i ca parametri obiectul lock i o funcie lambda care reprezint condiia pentru care se ateapt (5). Funciile lambda sunt o alt caracteristic specific standardului C++11 care permit ca funcii anonime s fie parte din alte expresii. n acest caz funcia lambda []{return ! buffer.empty()} este scris inline n codul surs i verific dac n buffer sunt date ce pot fi procesate. Metoda wait() verific apoi dac condiia este adevrat (apelnd funcia lambda care i-a fost transmis) i returneaz rezultatul. Dac condiia nu este ndeplinit (funcia lambda returneaz false), atunci funcia wait deblocheaz mutex-ul i pune thread-ul ntr-o stare de blocare sau ateptare. Cnd variabila condiional este notificat prin apelul funciei notify_one() din data_preparetion_thread(), thread-ul care proceseaz datele este deblocat, reblocheaz mutex-ul i verific condiia din nou, ieind din metoda wait() cu mutex-ul nc blocat dac condiia este ndeplinit. Dac condiia nu este ndeplinit, thread-ul deblocheaz mutex-ul i ateapt din nou. Acesta este motivul pentru care se folosete std::unique_lock, deoarece thread-ul care proceseaz date trebuie s deblocheze mutex-ul n timp ce ateapt, pentru ca apoi s l blocheze din nou. n acest caz std::lock_guard nu furnizeaz aceast flexibilitate. Dac mutex-ul ar rmne blocat n timp ce thread-ul care ateapt date de procesare este blocat, atunci thread-ul care pregtete datele nu ar putea bloca mutex-ul pentru a insera n buffer noile valori iar thread-ul ce proceseaz datele nu ar avea niciodat condiia ndeplinit. Flexibilitatea de a debloca un obiect std::unique_lock nu este folosit doar n apelarea metodei wait(), ci este, de asemenea, folosit atunci cnd datele sunt pregtite de procesare dar nainte de a fi procesate (6). Aceasta deoarece buffer-ul este folosit doar pentru a transfera datele de la un thread ctre cellalt. Dar n acest caz nu este indicat s blocm mutex-ul pe durata procesrii datelor, deoarece ar putea fi o operaie costisitoare n timp. ca un obiect std::thread s i ncheie execuia furniznd rezultatul operaiei, funcia std::async returneaz un std::future, care poate incapsula rezultatul operaiei. Cnd rezultatul este necesar, se poate apela metoda get() pe obiectul std::future(), iar thread-ul se blocheaz pn cnd obiectul future este ready, adic poate furniza rezultatul operaiei. Spre exemplu:
#include <future> #include <iostream> int long_time_computation(); void do_other_stuff(); int main() { std::future<int> the_result = std::async(long_time_computation); do_other_stuff(); std::cout << The result is << the_result.get() << std::endl;

Un obiect std::async este o utilitate de nivel nalt care furnizeaz un rezultat asincron i care se ocup intern de crearea unui provider asincron i de pregtirea datelor comune cnd operaia se finalizeaz. Acest obiect poate fi emulat prin intermediul unui obiect std::package_task (sau std::bind si std::promise) i un std::thread, ns folosirea unui obiect std::async este mai sigur i mai uoar.

Packages

Un obiect std::package face legtura dintre o funcie i un obiect apelabil. Atunci cnd obiectul std::package<> este apelat, acesta apeleaz la rndul su funcia asociat sau obiectul apelabil i pregtete obiectul future n starea ready, cu valoarea returnat de ctre operaia efectuat ca valoare asociat. Acest mecanism poate fi utilizat spre exemplu atunci cnd se dorete ca fiecare operaie s fie executat de un thread separat sau s ruleze secvenial pe un thread n background. Dac o operaie de mari dimensiuni se poate divide n mai multe suboperaii, fiecare dintre acestea poate fi mapat ntr-o instan std::package_task<>, care va fi returnat managerului de operaii. Astfel, se abstractizeaz detaliile operaiilor iar managerul opereaz doar cu instane std::package_task<>, n loc de funcii individuale. Spre exemplu:
#include <future> #include <iostream> int execute(int x, int y) { return std::pow(x,y); } void main() { std::packaged_task<int()> task(std::bind(execute, 2, 10)); std::future<int> result = task.get_future(); //-- (1) task(); //-- (2) std::cout << task_bind:\t << result.get() << \n; //-- (4)

Futures

Un alt mecanism de sincronizare este un future, adic un obiect returnat asincron (un obiect care citete un rezultat al unei stri comune mai multor thread-uri) implementat n librria standard C++11 prin intermediul a doua clase t emplate, declarate n header-ul <futures>: unique futures (std::future<>) i shared futures (std::shared_future<>), ambele fiind modelate dup mecanismele std::unique_ptr si std::shared_ptr . Spre exemplu, s presupunem c avem o operaie care efectueaz un calcul foarte costisitor n timp iar rezultatul operaiei nu este imediat necesar. n acest caz putem porni un nou thread care s efectueze operaia n background , dar aceasta presupune c este nevoie ca rezultatul s fie transferat napoi metodei din care thread-ul a fost lansat, deoarece obiectul std::thread nu include un mecanism pentru aceast situaie. Aici intervine funcia template std::async, inclus de asemenea n header-ul <future>. Un obiect std::async este folosit pentru a lansa o operaie asincron al crei rezultat nu este imediat necesar. n loc s ateptm

Cnd obiectul std::packaged_task este apelat (2), implicit este apelat i funcia asociat cu acesta, execute, creia i se transmit parametrii 2 i 10 iar rezultatul operaiei va fi salvat asincron n obiectul std::future (1). Astfel, este posibil s incapsulm o operaie ntr-un std::package_task i s obinem obiectul std::future, care conine rezultul operaiei nainte ca obiectul std::package_task s fie apelat. Cnd rezultatul operaiei este necesar, acesta se poate obine atunci cnd obiectul std::future este n starea ready (3).

32

nr. 20/Februarie, 2014 | www.todaysoftmag.ro

TODAY SOFTWARE MAGAZINE


Promises
deoarece n acest caz se folosete o tehnic lock-free, mult mai economic dect utilizarea unui mutex care poate fi relativ costisitor n termeni de resurse i laten datorat excluderii mutuale. Operaiile principale oferite de clasa std::atomic sunt funciile de store i load, care seteaz i returneaz atomic valorile stocate n obiectul std::atomic. O alt metod specific acestor obiecte este funcia exchange, care seteaz o nou valoare pentru obiectul atomic returnnd n acelai timp valoarea setat anterior. De asemenea, mai sunt dou metode compare_exchange_weak i compare_exchange_strong care efectueaz schimbri atomice, numai dac valoarea curent este egal cu valoarea actual ateptat. Aceste ultime dou funcii pot fi folosite pentru implementarea algoritmilor lock-free. Spre exemplu:
#include <atomic> std::atomic<int> counter = 0; //-- (1) void increment() { ++counter; //-- (2) } int query() { return counter.load(); }

Aa cum am vzut la seciunea Futures, transmiterea datelor ntre thread -uri se poate efectua prin transmiterea acestora ca parametri ctre funcia thread ului iar obinerea rezultatului se poate obine prin returnarea argumentelor prin referin, utiliznd metoda async(). Un alt mecanism pentru transmiterea datelor rezultate n urma operatiilor efectuate de diferite thread-uri este folosirea unei perechi std::promise/std::future. Un obiect std::promise<T> ofer un mecanism pentru a seta o valoare de tip T, care poate fi ulterior citit prin intermediul unui obiect std::future<T>. n timp ce un obiect std::future permite accesarea datelor rezultat (folosind metoda get()), obiectul promise este responsabil pentru furnizarea datelor (folosind una dintre medotele set_...()). Spre exemplu:
#include <future> #include <iostream> void execute(std::promise<std::string>& promise) { std::string str(processed data); promise.set_value(std::move(str)); //-- (3) } void main() { std::promise<std::string> promise; //-- (1) std::thread thread(execute, std::ref(promise)); //-- (2) std::future<std::string> result(promise.get_future()); //-- (4) std::cout << result: << result.get() << std::endl; //-- (5) }

Dup includerea header-ului <futures>, unde sunt declarate obiectele std::promise, se declar un obiect promise specializat pentru valoarea pe care trebuie s o pstreze, std::string (1). Intern, obiectul std::promise creeaz o stare comun (shared state) care este utilizat pentru a salva valoarea corespunztoare tipului std::string i care este utilizat de ctre obiectul std::future pentru a obine aceast valoare, ca rezultat al operaiei thread-ului. Aceast promisiune este apoi transferat cu rol de parametru ctre funcia unui thread separat (2). n interiorul thread-ului se seteaz valoarea obiectului promise (3), moment n care starea comun devine automat ready. Pentru a obine valoarea setat n funcia execute, este necesar utilizarea unui obiect std::future care s aib aceeai stare comun cu obiectul std::promise (4). Odat creat obiectul future, valoarea acestuia se poate obine prin apelarea metodei get() (5). Este important de tiut faptul ca thread-ul curent (main) rmne blocat pn cnd starea comun este ready (atunci cnd este executat metoda set_value (3)), adic datele sunt disponibile. Utilizarea obiectelor std::promise nu se adreseaz n exclusivitate programrii multithreading. Acestea se pot folosi i n aplicaiile cu un singur fir de execuie, pentru a pstra o valoare sau o excepie care urmeaz s fie procesat mai trziu prin intermediul unui std::future.

n acest exemplu se include mai nti header-ul <atomic> unde este declarat clasa template std::atomic<>. Apoi se declar un obiect atomic counter (1). n principiu, se poate folosi orice tip trivial, integral sau un tip pointer cu rol de parametru pentru template. Atenie la iniializarea obiectului std::atomic<int> ! Acesta trebuie iniializat ntotdeauna, deoarece constructorul default nu l iniializeaz complet. Spre deosebire de exemplul de la seciunea Mutex, n acest caz variabila counter poate fi incrementat direct, fr necesitatea utilizrii mutex (2), deoarece att funciile membre obiectului std::atomic ct i operaiile triviale precum asignrile, conversiile automate, incrementrile, decrementrile sunt garantate s se execute atomic. Este indicat s se foloseasc tipurile atomice atunci cnd se dorete utilizarea operaiilor atomice, n special asupra tipurilor integrale.

Am prezentat n linii generale modalitile de folosire a thread-urilor n standardul C++11, acoperind att aspecte despre managementul thread-urilor ct i mecanisme de sincronizare a datelor i operaiilor folosind mutex-uri, variabile condiionale, futures, promises, packed tasks i tipuri atomice. Dup cum se poate observa, utilizarea thread-urilor din librria standard C++ nu este dificil, urmnd practic aceleai mecanisme de utilizare ca i thread-urile din libraria Boost. n schimb, complexitatea crete odat cu complexitatea i design-ul codului care trebuie s se comporte conform ateptrilor. Pentru o aprofundare a celor discutate dar i o extindere a cunotinelor referitoare la noile concepte disponibile n standardul C++11, recomand cu ncredere cartea lui Atomics Anthony Williams, C++ Concurency in Action, precum i ultima Pe lng mecanismele de excludere mutual prezentate ante- ediie a clasicei The C++ Standard Library, de Nicolai Josuttis. Vei rior, standardul C++11 introduce i tipurile atomice. gsi acolo nu doar o detaliere a subiectelor prezentate anterior ci Un tip atomic std::atomic<T> se poate folosi cu orice tip T i i descrierea altor caracteristici specifice standardului C++11, garanteaz c orice operaie asupra obiectului std::amotic<T> va incluznd tehnici de utilizare ale acestora, pentru programarea fi atomic, adic se va executa n ntregime sau deloc. multithreding la un nivel avansat. Un avantaj al folosirii tipurilor atom i c e p e nt r u e x c lu d e re mutu a l e s t e p e r for m an a ,
www.todaysoftmag.ro | nr. 20/Februarie, 2014

Concluzii

33

programare

Metrici n Visual Studio 2013

Dac folosim ca mediu de dezvoltare Visual Studio 2013 vom descoperi c avem opiunea de a calcula o parte dintre metrici direct din Visual Studio, fr s fim obligai s folosim alte aplicaii sau tool-uri. n cadrul acestui articol vom descrie metricele pe care le putem calcula folosind direct ceea ce ne pune la dispoziie Visual Studio.

s ofere dezvoltatorilor date despre proiect i codul pe care l-au scris, nainte ca acetia s l nainteze spre source control. Pe baza acestei analize putem s identificm posibile probleme legate de: Design, Performan, Securitate, Globalizare, De ce ar trebui s rulm un astfel de Interoperabilitate, tool? Cod duplicat, Acest tip de tool ne ajut s detectam Cod care nu este folosit. posibilele probleme pe care aplicaia noastr le are, informndu-ne n acelai timp i Sau multe alte probleme. Totul ine asupra calitii codului pe care l-am scris. i de abilitatea pe care o are dezvoltatoAa cum se va vedea n rndurile de mai rul pentru a interpreta aceste metrice. Un jos, toate regulile i recomandrile pe care aspect interesant la acest analizator este Microsoft le are legate de cod se regsesc faptul c toate regulile i recomandrile pe n acest tool. care Microsoft le are legate de cod, de stiO parte dintre defectele pe care le des- lul codului i de modul n care trebuie s coper un astfel de tool sunt uneori extrem folosim diferite clase i metode se regsesc de greu de gsit folosind unit teste. Datorit n acest analizator. Toate aceste reguli sunt unui tool de acest gen, putem avea certitu- grupate n diferite categorii. dinea c aplicaia pe care o scriem este de Prin acest mod identificm cu uurin calitate. zone din aplicaia noastr care nu folosesc un API aa cum ar trebui. n cazul n care Ce metrice putem s obinem? dorii s creai o regula specific vei avea ncepnd cu Visual Studio 2013, toate nevoie de Visual Studio 2013 Premium sau versiunile de Visual Studio (mai puin Ultimate. Aceste dou versiuni de Visual Visual Studio Test Professional) ne ofer Studio ne permit s adugm reguli noi, posibilitatea s calculm metricele direct specifice proiectului sau companiei n care din el. De la bun nceput trebuie s tim c lucrm. Odat aceste reguli adugate, analinumrul de metrici pe care le putem cal- zatorul de cod va verifica dac acestea sunt cula folosind Visual Studio este limitat. respectate, avertizndu-ne n cazul unei Din pcate, nu avem posibilitatea s cal- abateri de la reguli. Din pcate n acest culm toate metricele care sunt disponibile moment putem s analizm doar codul n Sonar, dar exist cteva extensii pentru scris C#, F#, VB i C/C++. Visual Studio care ne ajut s calculm i O parte dintre cititori ar putea s spun alte metrice, nu doar pe cele care exist n c acest lucru se putea face i n versiunile Visual Studio. mai vechi de Visual Studio. Se poate subVisual Studio ne permite s calculm o scrie la afirmaia lor, dar trebuie adugat c parte dintre metrice folosind Static Code aceast nou versiune (2013) a adus n plus Analysis. Acesta analizeaz codul ncercnd posibilitatea de a analiza codul fr s fie

n articolul din numrul trecut am analizat modul cum putem s msurm metricele software folosind Sonar. Acesta este un tool care poate fi util liderului echipei ct i restului echipei. Orice membru din echip poate extrem de uor s verifice pe interfaa web a Sonar-ului care este valoarea la diferite metrice. nevoie s l executm. Acest lucru se putea mai mult sau mai puin i n Visual Studio 2012.

Cum rulm acest tool?

Aceste tool- uri pot s fie rulate n diferite moduri, att manual din meniul Analyze ct i n mod automat. Pentru a le putea rula n mod automat este nevoie s selectm opiunea de Enable Code Alalysis on Build pentru fiecare proiect pe care dorim s l analizm. O alt opiune destul de interesant este s activm din TFS un policy prin care dezvoltatorul s fie obligat s ruleze acest analizator nainte ca acesta s poat s fac check-in pe TFS. Aceast opiune se poate activa din zona Check-in Policy, unde este nevoie s adugm o nou regul de tip Code Analysis. Trebuie s contientizm c enforsarea unei astfel de reguli nu ne garanteaz c dezvoltatorul i va citi raportul care se genereaz i c va ine cont de el. Tot ceea ce ni se garanteaz este c acest raport a fost generat. De aceea fiecare echip trebuie educat s valorifice aceste rapoarte i s le analizeze n momentul n care ne decidem s folosim astfel de tool-uri. n momentul n care facem enforce la acest regul avem posibilitatea s selectm ce reguli nu trebuie nclcate cnd se face un chec-in pe TFS. De exemplu, nu se va putea face check-in pe TFS la un cod ce foloseste o instan a unui obiect ce implementeaz IDisposable fr s apeleze i metoda Dispose. Cnd dezvoltatorul va ncerca s fac check-in la un cod care nu respect una dintre reguli, va primi o eroare care nu i va permite s trimit pe TFS modificarea fr s rezolve problema. La fel de bine, avem posibilitatea s

34

nr. 20/Februarie, 2014 | www.todaysoftmag.ro

TODAY SOFTWARE MAGAZINE


rulm acest tool i ca parte din buid. Pentru avem la dispoziie alte dou aceasta este nevoie s activm aceast tool-uri interesante. opiune din Build Definition.

Ce ne spune Code Analysis?

Code Clones

Rezultatul rulrii acestui tool este un set de warning-uri. Cele mai importante informaii pe care un warning le conine sunt: Titlul: tipul de warning; Descriere: o scurt descriere a warning-ului; Categoria: categoria din care face parte; Aciunea: ce putem face pentru a putea rezolva problema;

Acest tool ne permite s detectm automat codul care este duplicat. Important de precizat este c exist mai multe tipuri de cod duplicat (clonat) pe care acesta poate s l detecteze: Exact match: cnd codul este exact la fel, fr nici un fel de diferen. Stron match: codul este asemnator, dar nu 100% (de exemplu difer prin valoarea unui string sau prin aciunea care se execut pe un anumit caz) . Medium match : codul este la fel, destul de asemnator, dar exist cteva diferene. Weak match: codul este puin asemntor, ansele ca acest cod s fie duplicat sunt cele mai mici.

Fiecare warning ne permite s navigm exact la linia de cod unde este aceast problem. n plus, pentru fiecare warning avem un link la MSDN care prezint n detaliu cauza warning-ului i ceea ce putem face pentru a-l elimina.

Cum putem s crem reguli custom?

Aa cum am menionat n rndurile de mai sus, crearea de reguli custom se poate face doar din Visual Studio Premium sau Ultimate. Apoi este nevoie s mergem n New>File>General>Installed Templates>Code Analysis Rule Set. Odat ce avem o regul blank, putem s specificm diferite proprieti pe care noi dorim s le aib. Pe lng acest too l n Visual Studio

Pe lng aceste informaii, putem s tim pentru fiecare cod duplicat, n cte locaii acesta este duplicat i putem naviga pn la linia de cod unde acesta apare. O alt metric eficient este numrul total de linii duplicat (clonat). Apelnd la aceast Concluzie metric ne putem da seama destul de uor n acest articol am descoperit c i de cte linii de cod am putea s scpm. Visual Studio ne pune la dispoziie diferite metode pentru a verifica calitatea codului. Code Metrics Unele dintre aceste tool-uri sunt disponiPrin intermediul acestui tool analizm bile n versiuni normale de Visual Studio, fiecare proiect pe care l avem n soluie iar altele doar n varianta Ultimate. n i extragem diferite metrice. Fiind un tool comparaie cu Sonar, Visual Studio nu perintegrat cu Visual Studio, putem s navi- mite efectuarea de share la aceste metrice gm n fiecare proiect i s vedem valoarea prin intermediul unui portal. n schimb, ne fiecrei metrice de la nivel de proiect, pn permite s le exportm ntr-un Excel penla nivel de namespace, de clas i metod. tru a le putea trimite la echip. Tool-urile din Visual Studio sunt un bun nceput penExist cinci metrice analizabile folosind tru orice echip sau dezvoltator care vrea s Code Metrics: se informeze asupra calitii codului scris Lines Of Code ne precizeaz num- de el sau de echip. rul de linii de cod pe care l avem la nivel de metod, clas, namespace, proiect. Este bine de tiut c aceast metric cnd este la nivel de proiect ne indic numrul total de linii de cod pe care proiectul l are. Class Coupling ne indic cte clase/ o clas folosete cu ct valoarea este mai mic, cu att este mai bine. Depth Of Inheritance ne indic
Radu Vunvulea
Radu.Vunvulea@iquestgroup.com Senior Software Engineer @iQuest

nivelul de motenire a unei clase. Asemenea metricii class coupling, cu ct valoarea este mai mic cu att este mai bine. Cyclomatic Complexity indic nivelul de complexitate a unei clase, a unui proiect. Trebuie avut grij deoarece, dac implementm un algoritm complex, atunci vom avea ntotdeauna aceast metric cu o valoare relativ mare. Maintainability Index: este o valoare ntre 0 i 100 care ne indic ct de uor se poate ntreine codul respectiv. O valoare mare indic c avem mari probleme (peste 20). Orice valoare sub 10 indic zon bun, iar tot ceea ce este ntre 10 si 20 este de nivel mediu. Nu este grav, dar trebuie s avem grij. Aceast metric se calculeaz pe baza altor metrice.

www.todaysoftmag.ro | nr. 20/Februarie, 2014

35

programare

Cum s (nu) msurm latena


atena este definit ca intervalul de timp ntre stimul i rspuns i este o valoare care ne intereseaz n multe sisteme de calcul (financiare, jocuri, site-uri web, etc.). n calitate de ingineri ne intereseaz crearea unui model matematic din care s rezulte valorile minime/maxime/tipice care pot s apar n sistemul nostru (fie el un site web sau un sistem de tranzacionare automat pe burse). Cum putem construi un astfel de model? Pentru sisteme sim- pot fi accesate aici3 pentru verificarea calculelor): ple (embedded) putem s calculm direct ciclurile de procesor necesare pentru executarea programului. Dar pentru programe Imediat putem observa c valorile se pot clasifica n trei tipice exist prea muli factori ca s putem aplica metoda direct categorii: (sistemul de operare, alte procese care ruleaz concomitent, JIT-ul, 30% - valori mici (poate datele se aflau n cache deja); GC-ul, etc.). Alternativa pe care o avem este s executm teste 60% - valori medii (datele nu se aflau n cache i s-a executat empirice i s construim modelul pe baza rezultatelor obinute. codul tipic); n cazul acesta trebuie s inem cont de cteva reguli ca s 10% - valori foarte mari (am ntmpinat cazuri limit - corobinem un rezultat corect: ner case);

Folosirea percentilelor

S presupunem c testm un site web care ruleaz n Tomcat. Folosind JMeter1 rulm un test de ncrcare (load test) i obinem valoarea medie a lanteei i dispersia (standard deviation). Avnd aceste valori concluzionm c 99.73% dintre utilizatori vor observa o lante care se ncadreaz n intervalul medie +-3*dispersie2. Suntem ncreztori n rezultat pentru c: am folosit URL-uri realistice n teste (nu am accesat un singur URL de un milion de ori); am testat pe un sistem identic cu cel de producie; am luat n calcul timpul de nclzire (warmup) de care are nevoie JIT-ul; i totui rezultatul ar fi greit (ceea ce poate s aib consecine monetare grave dac valorile respective se includ n contracte). De unde provine problema? S considerm un exemplu concret: presupunem (pentru simplitate) c am executat 100 de teste i valorile de laten msurate au fost urmtoarele (valorile numerice

O astfel de distribuie este tipic pentru sisteme medii spre mari din viaa real care sunt compuse din multe pri (gen N-tier architecture) i se numete distribuie multimodal. Vedem imediat de ce este important acest lucru. Folosind LibreOffice Calc (sau Excel, dup gust) putem calcula rapid c media acestor valori este 40 i conform regulii trei sigma4, 99.73% din utilizatori ar trebui s observe latene mai mici de 137. Dac studiem diagrama observm c media se afl spre partea stng (nu n centru cum ne-am atepta) i percentila 99 este 148, nu 137 cum am calculat. Poate c diferena nu pare mare, dar dac am scris un contract pe baza acestor valori, poate s nsemne diferena ntre profit i pierdere. Unde am greit? S citim nc o dat atent regula trei sigma: o variabil normal repartizat ia valori semnificative numai n intervalul (-3, +3). Problema noastr este c nu avem o distribuie normal (gaussian) ci o distribuie multimodal cum am vzut mai devreme. O metod pentru evitarea acestor probleme este folosirea modelelor matematice care nu depind de natura distribuiei.

Evitarea omisiunii coordonate

Omisiunea coordonat (coordinated omission) este o expresie inventat de Gil Tene5 de la Azul Systems (un JVM alternativ care nu necesit oprirea programelor n timpul GC-ului). Omisiunea coordonat apare dac programul de test arat n felul urmtor:
start: t = time() do_request() record_time(time() - t) wait_until_next_second() jump start

1 http://jmeter.apache.org/ 2 http://en.wikipedia.org/wiki/689599.7_rule

3 https://gist.github.com/cdman/7846275 4 http://ro.wikipedia.org/wiki/Distribu%C8%9Bia_Gauss#Regula_celor_3.CF.83 5 http://www.linkedin.com/in/giltene

36

nr. 20/Februarie, 2014 | www.todaysoftmag.ro

TODAY SOFTWARE MAGAZINE


Cu acest program de test ncercm s trimitem o cerere la fiecare secund i s msurm latena (aceeai problem apare cu orice interval fix de trimitere - de exemplu 100ms - folosim o secund aici pentru simplitate). Multe programe de test au o astfel de implementare. S presupunem c rulm testul i (nvnd din greelile anterioare) raportm c 85% din cereri vor fi satisfcute sub 0.5 secunde dac exist o cerere pe secund. i modelul nostru tot greit ar fi. S analizm graficul de mai jos, pentru a stabili cauza: ateptat dup al doilea ct timp acesta era blocat) ca s ascund cererile poteniale care puteau s apar n timp ce serverul era blocat. Aadar, dup cum se poate vedea din exemplu, acest lucru duce la subestimarea latenei.

Concluzie

Din problemele discutate anterior putem s distilm cteva recomandri care s ne ajute n crearea modelelor robuste: 1. S ne asigurm c nu ne limiteaz utilitarul de testare - s-l rulm contra unui URL care nu face nimic de exemplu i s verificm c putem s generm numrul de accesri pe secund dorit; 2. S considerm particularitile sistemului - s folosim hardware identic cu cel de producie, s lsm s se nclzeasc (warm up) dac e vorba de un sistem JIT-ed (JVM, .NET, LuaJIT, etc.); 3. S folosim percentile6. Cnd discutm rezultatele s folosim fraze de genul 50% din vizitatori vor observa o laten sub sau 99.99% din vizitatori vor observa o laten sub sau chiar latena maxim este 4. S nu calculm media. S nu folosim dispersia (standard deviation). Dac vedem astfel de valori, s presupunem c cei care au generat raportul nu tiu despre ce vorbesc sau vor s ne induc n eroare n mod intenionat; 5. S ne asigurm c fiecare cerere a durat mai puin dect intervalul de probare (sampling) sau s folosim o unealt de testare care nu sufer de aceast problem sau s folosim o librrie precum HdrHistogram de la Gil Tene care poate s corecteze ulterior rezultatele.
6 http://en.wikipedia.org/wiki/Percentile

Pe prima linie avem cererile n timpul testului. ntre secunda 3 i 6 sistemul este blocat (de exemplu din cauza unei pauze de GC). Dac calculm percentila 85 din cererile de test vom obine 0.5. n schimb dac avem 10 clieni independeni (situaia pe care ncercm s o simulm cu testul) valoarea 85% a latenei va fi 1.5 secunde (de trei or mai mare dect ne-a estimat modelul!). De unde apare discrepana? Problema este c programul de testare i sistemul testat au colaborat (prin faptul c primul a

Attila-Mihaly Balazs
dify.ltd@gmail.com Code Wrangler @ Udacity Trainer @ Tora Trading

www.todaysoftmag.ro | nr. 20/Februarie, 2014

37

management

Thinking in Kanban

Primul sistem Kanban a fost creat acum mai bine de 60 de ani n cadrul companiei Toyota n ncercarea de a excela pe piaa de autoturisme. Pentru c la momentul respectiv, Toyota nu putea concura pe baza tehnologiei, a pieei de dezvoltare sau a volumului de maini produse, a ales s concureze prin redefinirea modului de organizare a procesului de producie. Toyota Production System a pus bazele sistemului Kanban pentru Producie, avnd urmtoarele direcii de baz: Reducerea costurilor prin eliminarea deeurilor. Crearea unui cadru de munc care rspunde rapid la schimbri. Facilitarea metodelor pentru realizarea i asigurarea unui control de calitate. Crearea unui mod de lucru ce se bazeaz pe ncredere i susinere reciproc, unde angajaii pot s i ating potenialul maxim. Chiar dac n anii ce au trecut de atunci, IT-ul a redefinit sensul Kanbanului, i-a atribuit valori noi, l-a completat cu metrici i reguli, impresia general este c se respect principiile de baz ale companiei Toyota.

arte vizual - aceasta ar fi traducerea exact a cuvntului japonez Kan Ban, termen folosit cu frecven n lumea IT-ului. Sensul cunoscut actualmente se refer la metodologia de dezvoltare a sistemelor software, renumit pentru simplitatea i pentru eficiena ei. pentru a fi nelese i procesate mai uor i mai rapid. Pe de-o parte, toi membrii echipei pot vizualiza n orice moment starea n care se afl proiectul, pe de alt parte, vizualizarea acestei stri globale ajut n descoperirea rapid a problemelor i blocajelor n proiect. Structura de baz a unui Kanban board se rezum la trei stri (coloane): To-Do, Ongoing (sau In Progress), Done. Se pot ns defini stri specifice nevoilor de proiect, un exemplu clasic de Kanban board pentru software development se poate urmri n figura ataat. Pentru a putea estima ct mai corect dimensiunile de timp i volumul de munc n Kanban exist metrici ce ajut la definirea acestora. Asemenea regulilor de baz, calcularea metricilor este simpl. Lead Time: este timpul msurat de la introducerea unui task n sistem pn la momentul n care acesta este livrat. Este important de reinut c Lead-time msoar timpul i nu efortul depus pentru executarea task-ului. Lead-time este metrica relevant clientului i va evalua perfomana de lucru a echipei n funcie de aceasta. Cycle Time: este timpul msurat de la momentul n care s-a nceput munca la un task pn n momentul n care acesta este livrat. n comparaie cu Lead-time, aceasta este o msur mecanic a capacitii procesului i reflect eficiena de munc a Limita WIP ( Work-In-Progress ) echipei. asigur munc focusat i astfel mai eficient. Coloanele de tip Ongoing din Kanban board au atribuite o astfel de limit, iar numrul de task-uri existente la un moment dat nu trebuie s depeasc limita specificat. Prin reducerea multitasking-ului se elimin timpul necesar pentru alternare. Prin executarea task-uriPentru a mri performana echipei, lor n mod secvenial, rezultatele apar mai scopul este diminuarea metricilor de Leadrepede i timpul total al efecturii acestora time i Cycle-time. este mai scurt. Legea lui Little:

Metrici n Kanban

Principiile Kanban

Kanban se bazeaz pe dou principii fundamentale: 1. Vizualizarea fluxului de munc, 2. Limitarea activitilor n progres. Vizualizarea se obine cu ajutorul unui Kanban board, care mapeaz task-urile n funcie de starea n care se afl acestea. Strile board-ului se definesc n funcie de complexitatea proiectului i de numrul etapelor existente n proces. Task-urile sunt scrise pe bileele (sau sticky-notes) colorate

Pentru a mbunti Cycle-time sunt dou opiuni posibile: reducerea numrului de task-uri n proces, mbuntirea ratei de completare a task-urilor. Prin reducerea metricilor de Lead i

38

nr. 20/Februarie, 2014 | www.todaysoftmag.ro

TODAY SOFTWARE MAGAZINE


Cycle-time, echipa de dezvoltare i poate oferi certitudinea clientului c produsul va fi livrat la timp.

Flexibilitatea n Kanban

Un Kanban board este complet configurabil n funcie de scopul pe care l deservete, calitate ce face ca metodologia n sine s poat fi utilizat ntr-o varietate de domenii. Avnd rdcinile n producie i fabricaie, acesta are un mod natural de a se mula pe orice proces de business non-IT. Kanban board-ul poate fi configurat n funcie de domeniu i n funcie de etapele procesului prin care se ajunge la produsul/ serviciul final. n afar de IT, iat cteva domenii n care sistemul Kanban i utilizarea unui Kanban board se poate integra cu uurin: Marketing i PR, Resurse Umane, Logistic i Supply Chain, Financiar, Legal/ Juridic. Beneficiile pe termen scurt i lung sunt similare celor menionate n domeniul IT: vizibilitate mai bun a procesului de lucru, productivitate crescut i colaborare mai bun n echip.

de att, acestea au i o serie de posibilii i de avantaje adiionale: configuraie uoar, arhivarea task-urilor, editare, clasificare, temporizare, accesare remote, colaborare ntre echipe mprite n mai multe locaii, etc. .

Time-driven & Event-driven Kanban


Menionam n rndurile de mai sus flexibilitatea i modul n care crem structura board-ului Kanban n funcie de nevoile specifice a proiectului propus. De-a lungul anilor, cteva tipuri generale de structur s-au dovedit a fi elementare n folosirea metodologiei. Time-driven Kanban Board: folosit n planificarea temporal a activitilor. Event-driven Kanban Board: util atunci cnd e nevoie i de o intervenie extern (ex: aprobare) pentru a continua cu executarea task-urilor n proces.

metodei Kanban cu alte metode i tehnici. Scrumban este combinaia ntre SCRUM i Kanban. Pe scurt, nseamn aplicarea unor principii i reguli ale celor dou metodologii n funcie de preferinele echipei de lucru. PomodoroBan combin tehnica Pomodoro i Kanban. Conform tehnicii Pomodoro eficiena se poate dobndi prin alternarea urmatoarelor dou cicluri: 25 de minute de munc concentrat i nentrerupt, 5 minute pauz. PomodoroBan pstreaz i aplic principiile Kanbanului adugndu-i un plus de eficien.

Tipuri de Kanban
Board zic. Board online

La nceput un Kanban board avea o definiie simpl, o tabl sau un spaiu improvizat pe perete pe care se lipeau bileele sau notie marcate cu task-uri. Board-ul se afla n ncperea unde membrii echipei lucrau i reprezenta punctul de focus al echipei. Conceptul de a avea un board fizic este i acum foarte popular i considerat un prilej excelent pentru a mbunti colaborarea i comunicarea ntre membrii unei echipe. Cu toate acestea, interesul crescut n folosirea metodologiei Kanban a inspirat o serie de programe i tool-uri online ce ofer Scrumban. PomodoroBan funciile similare unui board fizic. Mai mult Numele sugestive indic combinarea

Fie c aplicm Kanban n IT, n domenii conexe sau chiar n viaa personal se pare c less is more este adevrat de fiecare dat. Kanban se remarc prin uurina cu care se aplic oricrui proces, simplitatea principiilor i regulilor de baz i efectele Personal Kanban rapide de mbuntire a calitii i procen anul 2011 Jim Benson a introdus sului de munc. ideea conform creia Kanban este perfect pentru organizarea timpului i a task-urilor Referine personale. Conceptul devine din ce n ce http://www.kanbanblog.com mai popular i utilizatorii Personal Kanban http://kanbantool.com spun c metoda funcioneaz. Jim Benson: Personal Kanban (2011) n cele mai multe cazuri se folosete un board cu proces simplificat, cu multe efecte vizuale. ntr-un final, scopul Personal Kanban este s mbunteasc Psk Orsolya productivitatea personal i s faciliteze pusok.orsolya@evoline.ro atingerea scopurilor pe termen lung.
Functional Architect @ Evoline

Concluzii

www.todaysoftmag.ro | nr. 20/Februarie, 2014

39

startups

New business development analysis

Astzi, tim clar c, nainte de a demara un proiect nou indiferent de industrie, este nevoie de un plan de aciune. n majoritatea domeniilor planul de afaceri este cel mai cunoscut i mai des ntlnit. Recent ns n industria software, a aprut un nou concept de analiza POC. Conform Wikipedia, un POC (proof of concept - concept de business) se definete ca fiind realizarea unei metode sau idei n scopul de a-i demonstra fezabilitatea. n unele cazuri acest POC ia forma unui prototip care ofer multe informaii despre viitorul proiect, identific nevoile, traseaz caracteristicile principale i prezint riscurile. Conceputul POC s-a impus rapid n inginerie i industria software i este agreat de executant i de client pentru c permite evaluarea corect i poate estima ct mai bine ce i cum trebuie fcut. ntr-un POC se ia n considerare strategia de caracteristici, de pre, de pia, branding i modelul de business. Dup cum relateaz i Marius Ghenea ntr-un interviu dat cu ocazia Business Days, business-urile n care investete trebuie s fie validate n pia : Este esenial s existe un proof-of-concept, ceea ce nseamn o anumit validare, ce se poate face, n faza iniial, nainte de comercializare, pe focus-grupuri, beta-testeri, proiecte pilot, teste comerciale limitate sau alte tipuri de testare n pia. Dac piaa nu valideaz un

priveti din exterior cum crete o afacere este o adevarat plcere. Puini ns se gndesc la detalii i puini sunt cei care analizeaz cu atenie paii mruni care au dus spre succes. concept de business, nu avem premise de succes, chiar dac ideea de business pare spectaculoas i unic. n cazul unui proiect software demonstrarea funcionalitii nainte de a ncepe dezvoltarea propriu-zis, este mai mult dect benefic. Drept urmare nu este de mirare c tot mai muli investitori i business angels agreeaz ideea unui POC n locul unui plan de business clasic. Wayne Sutton, blogger la Wall Street Journal susine acest lucru n articolul Dont Need No Stinking Business Plan. Argumentul ar fi c pornirea unui nou business este mult mai uoar dect acum 15 ani i compar business plan-ul cu metoda waterfall de dezvoltare care e outdated. Totul trebuie s fie rapid i s nvei tot timpul odat cu clienii pe care-i serveti i i implici n proces din prima zi. Orice antreprenor trebuie s fie conectat i s i foloseasc experienele din viaa real ct mai mult posibil. Autorul articolului se refer exclusiv la startup-urile n industria IT i las deoparte businessurile clasice. Deoarece mediul antreprenorial din Romnia e nc n curs de dezvoltare i paii se fac mai timid de ctre tinerii creativi care i caut finanare, business plan-ul mai rmne o vreme un punct important de referin. Menionm cteva documente importante pentru un tech start-up: 1. Use Cases cine sunt clienii i cum vor folosi produsul/serviciul. 2. Planul de vnzri ce, ct, unde, cum i cine va vinde produsul/serviciul. 3. Resursele umane asigurarea continuitii businessului chiar dac oamenii vor pleca din firm. 4. Cash flow-ul de ci bani e nevoie i cnd.

40

nr. 20/Februarie, 2014 | www.todaysoftmag.ro

TODAY SOFTWARE MAGAZINE

Am observat de-a lungul timpului c tinerilor antreprenori le e greu s fac de la nceput distincia clar ntre core-business (activitatea principal) i celelalte activiti suplimentare. ntr-un startup e greu de stabilit funciile principale pe care trebuie s le ndeplineasc un sistem i funciile suplimentare. Cu toate acestea, e vital existena unei liste cu toate posibilele funcii ale viitorului sistem, dup care se prioritizeaz i se mpart n funcii principale i secundare. Voi detalia n continuare partea de use case-uri ca fiind relevant pentru tech startup-uri i care ajut mult antreprenorul s nu se abat de la planul stabilit iniial. Use case-urile sunt modalitatea de a folosi un sistem pentru a atinge cu anumit el pentru un anumit utilizator. Spre exemplu, un utilizator autentificat pe Amazon dorete s poat plti cu cardul de credit un produs de pe site. Acesta se poate defini ca un obiectiv de atins.

modalitatea n care poate fi folosit un sistem i arat valoarea pe care acesta o aduce utilizatorilor. Cartea Use-Case 2.0 The Guide to Succeeding with Use Cases scris de Ivar Jacobson, Ian Spence, Kurt Bittner prezint dezvoltarea bazat pe use case-uri ntr-o variant foarte accesibil i practic. Use case -urile pot fi folosite n dezvoltarea businessurilor noi, caz n care se asociaz toat afacerea cu un sistem. Sistemul este cel care implementeaz cerinele i este subiectul unui model de use case. Calitatea si nivelul de finalizare al sistemului este verificat de un set de teste. Testele au rolul de a verifica dac implementarea pe felii a use case-urilor a fost un succes sau nu. Mergng mai departe cu folosirea use case-urilor, cred c toat lumea e deja familiarizat cu user stor-urile. Aceste poveti fac legtura ntre stakeholder-i, use caseuri i pri din use case-uri. Acest mod de a transmite cerinele pentru noul sistem Toate obiectivele setate mpreun este foarte rspndit pentru c ajut mult compun un set de use case-uri care arat la identificarea prilor de baz ce trebuie implementate pentru a putea crea un sistem functional de baz. Cnd se descrie o idee de afacere, modul cel mai bun de a transmite celorlali ncepe natural cu Vreau s fac o aplicaie care s permit utilizatorilor de smartphone-uri s fac comand la taxi prin intermediul unei aplicaii care s poat

fi instalat pe Android i iOS. nchei scurta incursiune n analiza de dezvoltare a noilor businessuri cu meniunea c fr o idee clar i un plan pus la punct de la nceput, ansele de reuit ale unui proiect sunt extrem de reduse. Fie c se pornete de la un business plan clasic, se merge pe ideea unui proof of concept sau se ajunge chiar la o list prioritizat de use case-uri pentru noul sistem, planificarea fiecriu pas nainte trebuie s se fac cu grij i responsabilitate astfel nct s se poat evita toate riscurile cunoscute.

Bibliograe:
1. http://blogs.wsj.com/accelerators/2012/11/29/ embrace-the-executive-summary/ 2. Use-Case 2.0 The Guide to Succeeding with Use Cases, Ivar Jacobson, Ian Spence, Kurt Bittner 3.http://www.avocatnet.ro/content/articles/ id_30930/In/ce/investesc/antreprenorii/care/au/ adoptat/o/cariera/de/business/angel/in/Romania. html#ixzz2pwAZCe5

Ioana Armean

ioana@ogradamea.ro Project Manager @ Ogradamea

www.todaysoftmag.ro | nr. 20/Februarie, 2014

41

management

Pitching-ul n business: cum s vinzi n patru pai simpli

De cele mai multe ori, ai maxim 60 de secunde s vorbeti despre ce tii tu s faci cel mai bine n profesia sau afacerea ta, n faa viitorilor ti parteneri sau colaboratori. Un pitch sau un discurs scurt de business este o cuvntare de aproximativ 30 secunde - 3 minute, n genere, aparent spontan, prin care o persoan i poate promova competenele, serviciile, ce le poate oferi, sau afacerea, precum i valoarea adaugat, pe care o poate oferi prin intermediul acestora. Dei conceptul a nceput s fie promovat destul de recent ca atare n lumea business, mai explicit, n mediul startupurilor, cum se ntampl n Statele Unite, n Europa si chiar n Cluj n ultimii ani, el reflect o realitate strveche. Din toate timpurile conductorii de popoare migratoare au fost nevoii s i asume teritoriile cucerite, prin scurte cuvntri proclamatoare. n fond, chiar simplul gest de a vorbi exclusiv limba proprie, matern, ignornd limba locului, a constituit un nceput de discurs de promovare, n nelesul contemporan al cuvntului. Solii de pace sau propovduitorii religiilor au fost i ei premergtorii pitching-ului de astzi, prin mesajul de pace sau divin pe care aveau tot interesul s l transmit. De ce s pitch -uim? Abilitatea de a vinde este nnscut, se spune c cei mai buni vnztori sunt copiii. Astfel, ne-ar fi foarte greu s ne debarasm de pitching, un instrument, pe care l avem aproape instinctual, de a obine ceea ce dorim. Dintr-un alt punct de vedere, avem nevoia de asociere cu relevana ei de netgduit n piramida nevoilor, iar pentru asociere, avem nevoie de persuasiune ca de o moned de schimb. i mai ales, dincolo de toate celelalte sensuri de profunzime ale unui scurt discurs business, el are rolul

i s-a ntmplat vreodat s fii la un eveniment interesant cu oameni i mai interesani pe care ai fi vrut din tot sufletul s i cunoti mai bine, dar nu ai tiut cum s-i abordezi? Sau ai fi vrut s i faci intrarea n relaia cu unii dintre ei, dar parc nu aveai cuvintele chiar n buzunarul tu drept? unui aperitiv. Un aperitiv pentru comunicare: Un pitch nu este folosit doar pentru a-l impresiona pe cellalt s i adopte o idee, ci pentru a oferi ceva att de atractiv, nct s determine nceperea unei conversaii. (Daniel H. Pink, To Sell is Human). Privind n jur, n viaa ta, n cercurile sociale pe care le frecventezi, sau chiar la tine, n experienele tale de pn acum, fie ele personale sau profesionale, vei putea observa negreit, c n nenumrate contexte, te-ai folosit de cteva fraze de introducere, explicative, descriptive i motivante, ntructva, pentru o aciune sau alta. Cu alte cuvinte, pitching facem n aproape orice domeniu i n orice moment al vieii noastre, fie c am fcut aceasta ca s primim bani de excursie n copilrie, fie c ne-am dorit o mrire de salariu, fie un asociat valoros, un angel investor sau o investiie pentru afacerea noastr la nceput de drum. Dac este de la sine netels de ce s facem acest lucru, pasul urmtor este s construim i s pregtim structura pitchului nostru. n primul rnd, un pitch eficient trebuie s conin nu mai mult de patru seciuni, respectiv, aproximativ patru fraze mari. Pentru nceput, este necesar s spui cine eti, simplu, cu nume i prenume i s redai un atribut-cheie pentru rolul, profesia sau afacerea n care eti implicat. Numele e unic i d identitate i autenticitate ntregului discurs, iar atributul este esenial pentru a-i conferi legitimitate, n demersul pe care l prezini sau l susii n pitch. Prin calitatea pe care alegi s o prezini ca atribut-cheie, fie CEO al companiei tale, specialist n programare de apte ani, fie pasionat de cri medievale, oricare din acestea n concordan cu aria ta de activitate i proiectul promovat aici de tine, tu i determini pe cei din audiena ta s te asculte cu atenie, s cread n tine i n ceea ce urmeaz s le spui. Apoi, n cea de-a doua seciune principal a discursului tu, i chiar, a doua fraz, de multe ori, vei prezenta ce faci tu i cum aduci valoare adugat. Exemplul care m inspir mult, dintre pitch-urile pe care le-am analizat pn acum, este cel al lui Phil Libin: [Sunt Phil Libin, CEO-ul Evernote.] Evernote este memoria ta extern. Ceea ce face cu excelen Phil aici, este c reuete s redea n cuvinte valoarea adugat a aplicaiei Evernote, care funcioneaz n sistem cloud, printr-o metafor de mare efect. Esena publicitar a pitch-ului se regsete aici, n cum exprimi valoarea adugat i n partea final, n cum faci ndemnul la aciune. Aa c i efortul de pregtire, creator i, de ce nu, estetic, trebuie s se depun cu mai mare for n aceste dou seciuni critice.

1. Cine sunt i un atribut-cheie (funcie/experien/pasiuni/interese). 2. Ce fac i cum adaug valoare prin produsul sau servicul meu. 3. Cum m difereniez de concuren? 4. Care sunt obiectivele mele pe termen scurt/mediu? De ce susin

42

nr. 20/Februarie, 2014 | www.todaysoftmag.ro

programare TODAY SOFTWARE MAGAZINE


pitch-ul? Invit la aciune. Mai departe, n a treia seciune a scurtului tu discurs, trebuie s redai modul n care te difereniezi de concuren. Sunt mari anse ca ceea ce oferi tu pe pia, prin produsul sau serviciul tu, ori ca profesionist, prin competenele, expertiza i experiena ta, s mai ofere i altcineva. Astfel, c trebuie s subliniezi subtil, pe scurt, de ce eti diferit. De ce s te aleag pe tine? De ce merit mai mult atenie dect competiia ta, ceea ce tu poi face? n funcie de durata pitch-ului tu, de dimensiunea audienei i de contextul n care susii cuvntarea, aceast parte poate fi mai mult dect celelalte, scurtat, pentru a prezerva ritmul i concizia comunicrii. De multe ori, nu este necesar s menionezi explicit numele organizaiilor, startup-urilor sau experilor cu care i mpari piaa, ci doar s sugerezi cum faci tu altfel ceea ce faci mai bine: nu doar c oferim o platform de stocare de informaii n sistem cloud, ns este chiar memoria ta extern sau al doilea creier al tu. n f ina l, re comand s numet i obiectivele pe care le ai pe termen scurt (1-2 idei), ceea ce, de fapt d specificul i motivul pentru care ai decis s interacionezi cu publicul tu, n acel context de timp i spaiu. Spre exemplu, la competiia de startup-uri la care participi, de regul, pe tot parcursul evenimentului, se susin discursuri de pre-selectare gradual. Cu aceast ocazie, se susine pitch-ul cu ideea de afacere n prima lui form, nerafinat, ns obiectivele pot fi: identificarea de noi membri n echip, dup abiliti sau dup arii de expertiz (marketing online, business development, copyrighting, programare etc.), influenarea investitorilor prezeni s susin afacerea, promovarea echipei i ideii pentru includerea ntr-un program de accelerare a afacerii i multe altele. De fapt, prin concluzia pitch-ului tu, tu le ari celor care te ascult cum te pot ajuta, ce i doreti s obii de la ei, cu ei i care este etapa pe care o parcurgi, implicit, n dezvoltarea afacerii tale. Dintre regulile scrise i nescrise ale persuasiunii n vorbitul n public, pe care l putei exersa ntr-un mediu prietenos i temeinic ntr-un club Toastmasters, se numr folosirea de cuvinte-cheie, cum sunt verbele, pentru a inspira la aciune: Acetia suntem noi, haidei n echipa noastr!, Dac eti programator pe iOS i vrei s devii cunoscut, altur-te nou!, Hai s facem lumea mai bun, crend o platform pentru mbuntirea relaiilor tale, aa c te invitm s susii campania noastr de crowdfunding. Dac te-am convins c oricine are nevoie de pitching, dac te-ai acomodat cu motivul pentru care tu nsui ai nevoie de asta, dac i-ai dat seama c deja ai fcut asta de nenumrate ori pn acum, dar nu l-ai numit chiar aa, mai rmne s stabileti cnd te poi atepta i pe viitor, la oportuniti de pitchin g. Un asemenea discurs de business se cade s fie de o spontaneitate exersat, dezvoltat n timp. Dac i caui parteneri pentru ideea ta de afacere, o slujb nou i te pregteti de interviuri, cu siguran merit s investeti o or din timpul tu ca s pui bazele unei formule potrivite, particularizate, de pitch pentru tine. Poi scrie pe hrtie, te poi nregistra audio sau video (i nu e nevoie de echipament mai performant dect o camer foto sau un smartphone, pentru nceput), ca s identifici cuvintele, tonul, coninutul, care te recomand i te promoveaz cel mai bine. Apoi, nu-i rmne dect s caui oportuniti de promovare, evenimente de networking, trguri de joburi, sau s fii spontan i la petrecerile sau evenimentele de srbtoare profesionale sau chiar personale, te bucuri de ambian i rspunzi relaxat la o ntrebare simpl: Dar tu cu ce te ocupi?. Fiecare dintre noi poate s aib nevoie de mai multe pitch-uri, n concordan cu fiecare proiect n care e implicat, cu fiecare rol profesional pe care l are sau cu fiecare echip ori organizaie din care face parte. Astfel, discursul poate fi cu uurin adaptat la audien, prin modificarea i particularizarea perspectivei, limbajului i coninutului comunicrii. La nivel foarte tehnic, dac vorbeti de afaceri total diferite, se vor modifica: atributul-cheie al tu din seciunea nti, numele activitii tale i cum oferi voaloare adugat, cum te difereniezi i invitaia la aciune. Dac, ns, modifici pitch -ul doar cronologic, pe msur ce avansezi n stadiile de evoluie a afacerii tale n cretere, atunci, cel mai adesea vei modifica doar concluzia, cu obiective i invitaia la aciune. La Startup Week-end, i vei cuta colegi de echip, iar la Le Web, poate i vei cuta deja investitori, dup ce prototipul serviciului sau produsului tu sunt deja lansate. Pentru mine, s mi creez primul pitch a fost o real provocare. n prim instan, una psihologic i motivaional, cci nu m-am simit c a fi chiar eu nsmi, dac ajung s repet, ca pentru olimpiad, cine sunt i ce vreau de la ceilali. ns beneficiile unei asemenea resurse de autopromovare sunt mult mai mari dect costurile. Aa c, participarea mea la ediia Startup Weekend din 2013, m-a determinat s mi fac contiincioas temele i s nv s m vnd cu folos i entuziasm. Seteaz-i ca obiectiv s rspunzi exemplar, timp de trei luni, de acum nainte, la banala ntrebare Tu cu ce te ocupi? i pitching-ul va deveni pentru tine un gest reflex. Aductor de venituri, prieteni, rezultate, parteneri sau, cel puin, conversaii pline de interes.

Bibliograe
http://www.elevatorpitchexamples.com/ www.businessweek.com http://mindyourpitch.com/ www.forbes.com

Ana-Loredana Pascaru

ana.pascaru1@genpact.com Training Manager @ Genpact

www.todaysoftmag.ro | nr. 20/Februarie, 2014

43

diverse

Gogu i velierul
- Tata, mai zi-mi o dat, ce faci tu la serviciu? Frec menta, i trecu prin cap lui Gogu, dar se abinu s spun cu voce tare. i era ciud c nu reuise pn acum s dea un rspuns pe nelesul copilului, dar nici nu avea idee ce explicaie s i dea. Frate, n-o fi uor s gestionezi un proiect, dar uite c i mai greu e s explici cum faci asta. Mormi: - Conduc proiecte, asta fac. Da ce-i veni iar? - Ne-a zis Doamna s ne invitm prinii s ne povesteasc cu ce se ocup ei la serviciu, s ne dea exemplu. i a mai zis s le spunem s vin n uniform. Dac au... adaug repede vznd grimasa lui Gogu. C tatl lui Mircea e pompier i poate veni n uniforma i vine i mama Mariei care e doctor i are halat i tatal lui Dnu e poliist... - Aha... - zise Gogu - i eu cum ai vrea s vin mbrcat? Copilul se uit la el cu ochii mari, se vedea c rotiele i se nvrt, se gndea intens dac l vzuse vreodat pe tatl lui n vreun fel de mbrcminte special. Probabil c nu gsise nimic n memorie, c nu mai zise nimic, rmsese doar cu ochii agai de tatl lui, n ateptarea unui verdict. i uite-aa se complic lucrurile, gndi Gogu. n loc s explic unuia singur, trebuie s explic unei clase ntregi. i nici n-am uniform... Recapitul lista copilului: pompier, medic, poliist. Ei, cum s concurezi cu ei? E clar c au ce povesti, ntmplri extraordinare, situaii care mai de care mai spectaculoase. Plus uniforma... Vocea copilului sparse reveria: - i cum v cheam pe voi? Superman. Sau Wonderwoman, dup caz. Ei, nu, nu spuse asta cu voce tare. n loc de asta ntreb: - Da cnd e ntlnirea asta a voastr cu prinii? - Oricnd sptmna viitoare, numai s anunm din timp. Aa a spus Doamna. Aa a spus Doamna, l maimuri Gogu pe copil n gnd. S-a dus i posibilitatea de a scpa. Ce scuz s gseti ca s in o sptmn ntreag?! Mda, e serioas treaba. - Uite, las-m s m gndesc i i spun cnd pot s vin, s o anuni pe Doamna. i m gndesc exact i ce s v povestesc, s nu te fac de rs. E bine aa? Copilului i sticlir ochii, zmbi satisfacut, i srut tatl i vizibil uurat, arunc de dup umr n timp ce ieea din camer: - Da, tata, e foarte bine. M bazez pe tine. Pompier, medic, poliist. Pentru prima oar Gogu se gndea c are o meserie anost. Ei, de unde? i reveni el. C doar mi place ceea ce fac! Doar c n-am uniform, adug cu o urm de regret. Dar nu haina face pe om. i-apoi zu dac nu sunt un fel de superman cte-odat... Se surprinse zmbind la gndul unor colani strmi i a unei pelerine roii aruncate pe umr, dar alung imaginea hilar i se concentr pe speech. *** Gogu transpirase iar, minile i erau reci. El care inea fr nici o emoie - prezentri pentru management i pentru client, era timorat la gndul c va vorbi unor copii, colegi ai fiului su. i ddu seama c voia s-i impresioneze mai mult dect pe orice potenial client. Toi ochii erau aintii pe Gogu. l cut din ochi pe fiul su, l gsi i i zmbi. Se concentr asupra lui i ncepu: - Fiul meu mi-a spus c pn acum ai auzit despre ce face un mecanic auto, un pompier, un medic, un poliist. Aa e? - i farmacist! adug o feti din spate. Alta cu uniform, nu se putu abine Gogu s gndeasc, un inginer n-ai gsit i voi... Dar tia exact despre ce vrea s le vorbeasc copiilor, aa c nu mai sttu pe gnduri ci continu, scond din geant o pelerin groas de ploaie, cauciucat, uzat i cu iz de ap srat: - Eu sunt manager de proiect. i puse tacticos pelerina, fcu o pauz teatral, rse n sinea lui, i continu: i am pelerina de ploaie a unui cpitan de velier. Pentru c sta este rolul nostru, de cpitan, doar c pe uscat. Coordonm echipa pentru a duce velierul cu succes la destinaie. Din momentul n care lum nava n primire, noi suntem cei care decidem dac folosim motorul sau velele, dac i cnd e momentul s ridicm ancora, care este viteza optim cu care navigm. Ne coordonm echipa s in un drum compas, s programeze un mar , s foloseasc instrumentele de navigaie, s ridice i s coboare pnzele. Toi cei din echip i tiu rolul, dar cpitanul este cel care i ajut s se sincronizeze, el interpreteaz datele meteo i mesajele de la rm, el urmrete poziionarea pe GPS, decide dac ancoreaz peste noapte sau i continu drumul. Pe timp frumos sau pe furtun, rolul meu este s pstrez echipa n siguran i s m asigur c munca ei nu este afectat de factorii externi. O feti blond, cu codie, din primul rnd ridic brusc dou degete n aer, dar nu mai atept ncuviinarea lui Gogu: - Nene, dar cine e n echipa ta? - Oricine poate fi n echipa mea: mecanici auto, pompieri, medici, poliisti... chiar i farmaciste. - i pelerina de ploaie la ce i folosete?!

Simona Bonghez, Ph.D.

simona.bonghez@confucius.ro Speaker, trainer i consultant n managementul proiectelor, Owner al Colors in Projects

44

nr. 20/Februarie, 2014 | www.todaysoftmag.ro

sponsori

powered by

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