No. 18 • Decembrie 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
lă a i c e p iție s
Ed
Inovaţie şi Antreprenoriat la IT Days în Cluj-Napoca Gestionarea Autentificării în AngularJS Scrum în practică: un studiu de caz Real time web with Meteor Îmbunătățirea continuă – o practică de luat în serios Testarea funcțională în PHP
Interviu cu domnul primar Emil Boc Păstrarea angajaţilor talentaţi, o temă recurentă în IT Cum sa menţii succesul unui joc la peste 2 ani de la lansare? Extension Points Alinierea partițiilor în medii virtuale How To Web 2013
6 IT Days 2013 Ovidiu Mățan
8 How to Web 2013 a reunit comunitatea tech din Europa de Sud Est Irina Scarlat
10 Interviu cu domnul primar Emil Boc Ovidiu Mățan
13 Testarea funcțională în PHP Bogdan Matei
30 Scrum în practică: un studiu de caz Papp László
34 Ecosistemul startup-urilor din Cluj Mircea Vădan și Marius Mornea
38 SpotTune George Platon
39 CTF365 Marius Corîci
17 Gestionarea autentificării în AngularJS
41 Cum să menţii succesul unui joc mai mult de doi ani de la lansare?
Leonard Abu-Saa
George Abramovici
19 Specificații executabile Alexandru Bolboaca și Adrian Bolboacă
21 Îmbunătățirea Continuă – o practică de luat în serios Ovidiu Dolha
24 Alinierea partițiilor în medii virtuale Dragoș Masarasan
27 Extension Points Radu Vunvulea
43 Păstrarea angajaţilor talentaţi, o temă recurentă în IT Monica Soare
45 Real time web with Meteor Andrei Cacio
47 Cum pot fi protejate afacerile cu aplicații mobile? Claudia Jelea
49 Interviu cu Richard Campbell (II) Attila-Mihaly Balazs
editorial
S
Ovidiu Măţan, PMP
ovidiu.matan@todaysoftmag.com Editor-in-chief Today Software Magazine
tartup-urile, un subiect la modă, față de care companiile manifestă un interes crescut, dorind să se implice în apariția noilor produse. Riscurile sunt mari pentru ambele părți, dar recompensa ce poate apărea în câțiva ani este o fata morgana care devine realitate. La How To Web 2013, unde am participat de curând, unul dintre speakerii intervievați a atras atenția asupra faptului că există un număr mare de startup-uri care aduc pe piață produse mult prea facile, creând de fapt doar o interfață grafică peste o simplă bază date. Dar ultimele produse create de startup-uri sunt foarte încurajatoare, demonstrând multă creativitate. Un exemplu sugestiv în acest sens este chiar produsul startup-ului castigator al ediției How To Web din acest an: o mână complet robotizată, low cost, pentru persoanele cu dizabilități. De asemenea, în același sens, trebuie să-l menționăm pe Ionuț Budișteanu, cel care a câștigat marele premiul al competiției Intel ISEF cu un proiect de automobil autonom. Exemplele acestea sunt dovada că trebuie să îndrăznim mai mult, că trebuie să abordăm interdisciplinar realitatea, valorificându-i conexiunile ascunse. Dacă până acum era suficient să ai o echipă de programatori, acum a venit momentul în care trebuie să existe cel puțin un electronist sau poate chiar un specialist în robotică în echipă. Oare cum s-ar mai putea îmbunătăți mediul domestic, cu tot confortul pe care îl deținem deja? Aceasta poate să nu fie o întrebare retorică.Gândiți-vă că acasă avem telefoane, tablete, calculatoare care pot simula și accesa aproape orice din perspectiva unui uz caznic. Evoluția lor implică adăugarea de noi senzori, putere de procesare, durată de viață a bateriei și conectivitate. Nimic nou sau spectaculos. Alternativ, uitați-vă în jur și numărați câți roboți aveți în jurul vostru prin casă? Poate un Roomba, destul de prostuț de altfel. Nu avem o platformă mobilă larg răspândită pe care să poată fi instalate diferite brațe, senzori și care să ne facă viața de zi de zi mai ușoară. La fel avem și dronele, au devenit în ultimul timp destul de accesibile, iar în curând vom asista la o evoluție exponențială a numărului acestora. Din păcate sau poate din fericire pentru noi, toate sunt controlate prin telecomandă,iar partea de autonomie și AI nu și-a făcut simțită prezența serios. Sper așadar că v-am ridicat un semn de întrebare înainte de a decide să lucrați pentru următoarele șase luni la o aplicație care îți arată pe hartă cea mai apropiată benzinărie sau ordonează task-urile în funcție de priorități. Continuăm această pledoarie pentru inovație și în cadrul evenimentului IT Days, eveniment organizat de revista TSM. Sperăm că evenimentul va oferi reprezentanților comunității clujene de IT ocazia concretizării unei abordări originale și creative, care să se transforme într-un reper al activității lor. Participanții vor asista din punct de vedere al tematicilor abordate la o îmbinare a subiectelor tehnice cu prezentările de startup-uri locale, precum și cu prezentări ale proiectelor de cercetare. Pentru a afla mai multe, vă invităm să citiți primul articol al acestei ediții speciale a Today Software Magazine. Vă dorim o lectură plăcută !!!
Ovidiu Măţan
Fondator al Today Software Magazine
4
nr. 18/Decembrie | www.todaysoftmag.ro
TODAY SOFTWARE MAGAZINE Lista autorilor Redacţia Today Software Magazine Fondator / Editor în chief: Ovidiu Mățan ovidiu.matan@todaysoftmag.com Editor (startups și interviuri): Marius Mornea marius.mornea@todaysoftmag.com
Alexandru Bolboaca
Leonard Abu-Saa
Agile Coach and Trainer, with a focus on technical practices @Mozaic Works
System Architect @ Arobs
Radu Vunvulea
Bogdan Matei
alex.bolboaca@mozaicworks.com
Radu.Vunvulea@iquestgroup.com Senior Software Engineer @iQuest
Graphic designer: Dan Hădărău dan.hadarau@todaysoftmag.com Attila-Mihaly Balazs
Copyright/Corector: Emilia Toma emilia.toma@todaysoftmag.com Traducător: Roxana Elena roxana.elena@todaysoftmag.com Reviewer: Tavi Bolog tavi.bolog@todaysoftmag.com
dify.ltd@gmail.com
Code Wrangler @ Udacity Trainer @ Tora Trading
Mircea Vădan mircea.vadan@gmail.com www.mirceavadan.ro www.clujstartups.com
Reviewer: Adrian Lupei adrian.lupei@todaysoftmag.com
Today Software Solutions SRL str. Plopilor, nr. 75/77 Cluj-Napoca, Cluj, Romania contact@todaysoftmag.com www.todaysoftmag.ro www.facebook.com/todaysoftmag twitter.com/todaysoftmag
ISSN 2284 – 6352
bogdan.matei@3pillarglobal.com Senior Php Developer @ 3Pillar Global
George Abramovici Business Manager @ King România
Adrian Bolboaca
adrian.bolboaca@mozaicworks.com Programmer. Organizational and Technical Trainer and Coach @Mozaic Works
Dragoș Masarasan
Claudia Jelea
Support engineer @ Endava
Avocat & Consilier in domeniul marcilor
dragos.masaran@endava.com
Produs de
leonard.abu-saa@arobs.com
claudia.jelea@jlaw.ro
@ IP Boutique
Monica Soare
George Platon
Manager @ Artwin
Software developer @ Catalyst
Papp László
Marius Corîci
Software engineer @ Evoline
Co-fondator @ CTF365
Irina Scarlat
Ovidiu Dolha
PR Manager @ How To Web
Requirements engineer @ ISDC
monica.soare@@artwinconsulting.ro
papp.laszlo@evoline.ro
irina.scarlat@howtoweb.co
George.Platon@catalysts.cc
marius@ctf365.com
ovidiu.dolha@isdc.eu
Copyright Today Software Magazine Reproducerea parțială sau totală a articolelor din revista Today Software Magazine fără acordul redacției este strict interzisă. www.todaysoftmag.ro www.todaysoftmag.com
Andrei Cacio
andrei.cacio@evozon.com Perl developer @ Evozon
www.todaysoftmag.ro | nr. 18/Decembrie, 2013
5
eveniment
IT Days 2013
R
evista online clujeană Today Software Magazine organizează în 5-6 Decembrie 2013, la Cluj Arena, evenimentul IT Days. În cadrul conferinţei sunt invitaţi atât speakeri internaţionali cât şi reprezentanţi din industria software locală. În prima zi, se abordează teme precum inovaţia şi tehnologia în IT , pentru ca în cea de-a doua zi, tema principală să fie antreprenoriatul .
Invitații principali sunt: Eduardo Mendez Polo, head of IT Cloud la Telefonica Spain care va vorbi despre evoluția serviciilor cloud în viitor Tine Thygesen, CEO Everplaces Danemarca, susține o prezentare despre inovație și startup-uri având tema Disruptive technologies. Voicu Oprean, CEO Arobs, are ca temă de prezentare tranziția de la outsourcing la produs. Maria Diaconu, CEO Mozaic Works, va prezenta modul în care poate fi crescuta inovația în cadrul echipelor de dezvoltare de produselor. Mirel Borodi, director general al Trustului de Consultanță Transilvănean, fondator www.multifinantare.ro, va prezenta inițiativa de crowd sourcing adresată comunității locale. Șerban Țîr, director tehnic al grupului de firme Gemini Solutions prezintă o abordare practică pentru suportul startupurilor locale.
6
Vom reveni în numerele următoare Deschiderea evenimentului o va realiza reprezentatul administrației locale, domnul cu înregistrările complete și cu multe primar Emil Boc, care a acceptat invitația informații de la aceasta primă ediție a IT noastra, manifestând astfel susținerea Days. acestui eveniment cu implicații pozitive în dezvoltarea orașului nostru. Acestuia îi va urma Alexandru Tulai, președintele Cluj IT Cluster, organizația ce reunește un număr mare de companii de IT clujene. Gazda e venimentului este Dan Mircea Suciu, lector doctor la Facultatea de Matematică și Informatică din Universitatea Babes Balyai și Director of engineering la compania 3Pillar Global. Subiectele tehnice vor fi susținute de experți locali și vor acoperi o arie largă din domeniul IT: începând cu arhitectura sistemelor, programare, testare, tehnologii SAP, direcții de cercetare, project management și terminând cu design-ul adaptiv și securitatea aplicațiilor web. Evenimentul este susținut de importante companii de IT din Cluj: EBS, Arobs, Endava, Evoline, Accesa, Gemini Foundry, Skobbler, Yardi, msg systems Romania, 3Pillar Global. Detaliile complete despre eveniment se găsesc online pe www.itdays. ro.
nr. 18/Decembrie, 2013 | www.todaysoftmag.ro
TODAY SOFTWARE MAGAZINE
business
www.todaysoftmag.ro | nr. 18/Decembrie, 2013
7
evenimente
How to Web 2013 a reunit comunitatea tech startups din Europa de Sud Est
B
ucurești, 25 noiembrie 2013 – Săptămâna trecuta How to Web a transformat pentru a patra oară consecutiv Bucureştiul în capitala tehnologiei din Europa de Sud-Est. Desfăşurat în jurul conceptului central „Să creştem împreună”, How to Web 2013 a adus în faţa celor peste 800 de persoane din audienţă mai bine de 40 de vorbitori internaţionali de calibru de pe 4 continente care au abordat teme precum dezvoltarea de produse inovative la scară globală, valorificarea contextului local sau tehnologiile viitorului. În paralel a avut loc Startup Spotlight, competiţie şi program de mentorat adresat celor mai performante 32 de echipe din regiune. Prezentările How to Web 2013 s-au desfăşurat în paralel pe două scene. Astfel, pe scena principală a evenimentului, Grow Stage, au avut loc prezentări ale profesioniştilor din domeniul tehnologiei la nivel mondial. Acestea s-au adresat dezvoltatorilor, designerilor şi comunităţilor din jurul produselor tech şi au adus în discuţie inovaţia în tehnologie, dezvoltarea echipelor durabile, tendinţele actuale în industrie sau importanţa design-ului pentru dezvoltarea produselor inovative. Conferinţa a fost deschisă de Thomas Hartwig (Co-Fondator şi CTO King.com), care a vorbit despre avantajele şi provocările aduse de creşterea accelerată a unui startup (de la 1 la peste 100 de milioane de utilizatori în cazul specific al King) şi a continuat cu prezentarea lui Mike Butcher (Senior Editor TechCrunch), care a vorbit despre cei mai puternici oameni în tehnologie la nivel european. O altă secţiune a fost dedicată lecţiilor învăţate lucrând la distanţă cu echipe de cercetare-dezvoltare, subiect care a fost dezvoltat în cadrul unui panel moderat de Philipp Kandal (Co-Fondator şi CTO Skobbler), din care au făcut parte Marius Jumolea (General Manager al centrului R&D Visual.ly Romania) şi Michael Levit (Fondator Spigot). Cea de a doua zi a conferinţei a început cu prezentarea lui Robin Wauters, jurnalist în tehnologie, care a vorbit despre tendinţele din industrie şi modul în care companiile mici din Europa inovează şi se menţin cu un pas înaintea celorlalte. Evenimentul a continuat cu o discuţie cu Radu Georgescu,
8
Fondator Avangate, care a vorbit despre deciziile strategice pe care le-a luat în dezvoltarea companiei, de la idee până la exit. David Bizer ( C E O Ta l e n t Fountain), a prezentat lecţiile învăţate din lansarea, dezvoltarea şi închiderea HackFwd, iar instrumentele adresate dezvoltatorilor au fost aduse în discuţie de Martyn Davies (Developer Evangelist SendGrid), Jamie Hannaford (Software Developer Rackspace) şi Michal Wawra (Developer Evangelist Twilio), în cadrul unui panel moderat de Ivan Brezak Brkan (Netocratica). Christopher Martin (Senior Manager Bosch) a abordat dificultăţile dezvoltării unui produs tech de calitate, iar Vitaly Golomb (Fondator şi CEO Keen Systems) a prezentat motivele pentru care nimic nu este mai important decât designul unui produs. Pe parcursul celor două zile ale evenimentului, pe scena principală a How to Web au urcat profesionişti importanţi ai industriei printre care se numără Paul Ford (CIO Softlayer), Alex Hunter (CEO Rushmore. fm), Philipp Kandal (Co-Fondator şi CTO Skobbler), Marco Cecconi (Software Engineer Stack Exchange), Simon Stewart (Software Engineer, Facebook), Matt Clayton (Co-Fondator şi CTO Mixcloud)
nr. 18/Decembrie, 2013 | www.todaysoftmag.ro
sau Ştefan Szakal (Fondator X3 şi [e-spres-oh]). Ignite Stage, cea de a doua scenă a conferinţei, a găzduit paneluri care au abordate subiecte specifice startup-urilor: bune practici pentru un startup care trece printrun program de accelerare; cum să dezvolţi echipa potrivită; cum să atragi investiţii; cum să colaborezi cu şi să înveţi de la mentori, investitori şi clienţi; greşeli frecvente pe care le fac fondatorii. Acestea au fost abordate de cei peste 25 de investitori, reprezentanţi ai acceleratoarelor şi fondurilor de investiţii prezenţi la eveniment. Adresată tuturor celor care îşi dezvoltă propriul startup sau care se pregătesc de acest pas, scena Ignite a avut drept principali beneficiari cele 32 de echipe finaliste ale programului Startup Spotlight. Echipele au fost evaluate de un juriu de specialitate care a urmărit criterii precum echipa şi experienţa acesteia, dimensiunea pieţei, scalabilitatea, tracţiunea, sau
TODAY SOFTWARE MAGAZINE
posibilitatea de a participa la un eveniment Seedcamp, infrastructură c l o u d of e r it ă de Rackspace, conturi premium Evernote, produse oferite de F6S şi acces direct la Romanian Innovation fezabilitatea produselor dezvoltate. Smart Hand, startup din Bulgaria care dezvoltă o mână prostetică mioelectrică pentru persoanele cu dizabilităţi, a fost desemnat câştigătorul competiţiei Startup Spotlight. Echipa clasată pe locul II a fost Synetiq, aplicaţie care oferă companiilor informaţii utile despre clienţii acestora, iar Wyliodrin, startup care propune o metodă simplă de dezvoltare web pentru servicii încorporate, a primit IXIA Innovation Award. Premiul pentru cea mai bună prezentare a fost acordat echipei de la Data Maid, instrument pentru crearea şi publicarea de conţinut media bogat. Finaliştii competiţiei au primit premii în valoare totală de 20.000 USD oferite de IXIA, partener principal al How to Web Startup Spotlight. Pe lângă premiile în bani, echipele finaliste au primit şi alte premii valoroase oferite de partenerii programului: acces la platforma Microsoft Azure, infrastructură gratuită şi mentorat în cadrul programului pentru startup-uri Software Catalyst, office hours cu Jon Bradford (Managing Director al programului de accelerare TechStars), 3 ore de consiliere juridică oferite de Biriş Goran, posibilitatea de a-şi prezenta produsele în cadrul Startup Bootcamp, acces la workshop-ul Hub:raum din Cracovia,
Commercialization Program (RICAP). „Am început How to Web cu o primă ediţie în 2009, în Politehnica Bucureşti, şi l-am continuat cu o primă ediţie internaţională în 2010. An de an, How to Web a crescut ca număr de participanţi dar, şi mai important, s-a maturizat din punct de vedere al structurii agendei şi al obiectivelor pe care şi le propune. How to Web nu a fost niciodată doar o conferinţă – ne-am dorit mereu să-l facem un instrument util, practic, cu rezultate măsurabile pentru cei care îi trec pragul. Ne bucurăm că am reuşit să ne atingem obiectivele şi de această dată, iar lista de poveşti de succes confirmă acest lucru”, a declarat Bogdan Iordache, Co-Fondator şi CEO How to Web. How to Web 2013 a fost dezvoltat cu sprijinul IXIA, X3, Bitdefender, CyberGhost, SoftLayer, Enterprise Ireland, Avangate, Microsoft, Hubraum, PayMill, Twilio, Biris Goran şi Banca Comercială Română şi a avut loc pe 20 şi 21 noiembrie la Crystal Pallace Ballrooms în Bucureşti. Mediatizarea evenimentului a fost asigurată de parterii media principali Prove PR, Digi TV, Adevărul, Forbes România, Capital, Wall-Street.ro, Evenimentul Zilei, DAS Cloud, Revista Cariere, Ct r l - D, s t ar tup s . ro şi Entrepreneur. bg, si de partenerii media Economy.bg, Newtrend.bg, Digjitale, IT D ogadj aji, CEE Startups, Invendor.hu, Goal Europe, Times New Roman, Akcees, IQ Ads, C omputer Wor l d , P C Wor l d , Ag or a , I T Tre n d s ,
Business Cover, Tech Cover, Business Woman, Gadget & Trends, Comunicaţii mobile, Market Watch, Business Review, Manager Express, România Liberă, Comunicatedepresă.ro, Zelist, Ejobs, Softlead, Ziare.com, Business24, Romanian Startups şi Today Software Magazine.
Irina Scarlat
irina.scarlat@howtoweb.co PR Manager @ How To Web
www.todaysoftmag.ro | nr. 18/Decembrie, 2013
9
evenimente
Interviu cu domnul primar Emil Boc Cluj - centru al inovației
D
omnul primar Emil Boc a avut amabilitatea să ne răspundă la câteva întrebări referitoare la susținerea IT-ului clujean, modul în care comunitatea locală a programatorilor se poate implica și proiectul de susținere a startup-urilor locale
Industria de IT locală este în continuă creștere, spuneți-ne cum sprijină Primăria Cluj-Napoca acest domeniu? În această perioadă lucrăm la definitivarea Strategiei Municipiului pentru 2014-2020, iar industria IT este o componentă esențială a procesului. Am urmărit să implicăm în proces specialiști din întreaga comunitate, pe fiecare componentă, de la educație la antreprenoriat și inovație. Corelarea studiilor preuniversitare și universitare cu cerințele pieței este doar un aspect care va avea un impact semnificativ în dezvoltarea industriei. Cei interesați pot afla mai multe despre direcțiile principale ale strategiei pe site-ul cmpg.ro. Cluj-Napoca s-a definit în ultimii ani ca un oraș al serviciilor şi se poziționează din ce în ce mai puternic pe harta Europei ca un centru cultural şi ca un centru al inovaţiei. Am încredere că, având strategia potrivită și sprijinul comunității, vom depăși Bucureștiul în mai multe domenii, în primul rând în IT. Orașul nostru are potențialul de a fi cu adevărat un „smart city” al Europei, iar la Primăria ClujNapoca, având acest obiectiv, urmărim
10
să implementăm soluții „smart”, etapizat, pe fiecare direcție - de la transport în comun la plata taxelor și impozitelor. Avem totodată proiecte majore, menționez aici Cluj Innovation City, pe care le sprijinim cu toată convingerea, lucrând alături de reprezentanții industriei pentru a găsi cele mai bune soluții pentru ca aceste proiecte să devină realitate. Credem că mulți programatori ar fi interesați să scrie aplicații bazate pe o platformă care le-ar putea da acces la informații în timp real. Ne referim la datele de trafic, poziția sau timpul estimat de a ajunge în stație a mijloacelor de transport în comun, nivelul de poluare etc. . Astfel s-ar crea cu un efort minim posibilitatea de a dezvolta aplicații folositoare pentru clujeni prin intermediul direct al programatorilor locali. Credeți că este posibil în viitor acest lucru ? Suntem deschiși la orice inițiativă care ar putea îmbunățăți viața de zi cu zi a cetățenilor și procesele de lucru ale instituției, ceea ce, până la urmă, va fi
nr. 18/Decembrie, 2013 | www.todaysoftmag.ro
tot spre beneficiul fiecărui clujean. Sunt aspecte în care am primit deja propuneri prin intermediul grupurilor care elaborează Strategia Municipiului. Sunt mai multe domenii în care s-ar putea începe chiar acum dezvoltarea de aplicații și m-ar bucura ca ideile și punerea lor în practică să vină de la comunitate. Îi invit așadar pe toți cei interesați să ne contacteze, pentru că Serviciul Strategii de informatizare al Primăriei vă stă la dispoziție. Clujul este un oraș cu mulți vizitatori, aveți în considerarea crearea unei rețele wireless gratuită la nivelul centrului orașului? Știm că există ceva asemănător în Parcul Mare, iar aceasta poate crea un
TODAY SOFTWARE MAGAZINE impact pozitiv în special pentru cei vizitatorii străini. Într-adevăr, există o rețea wireless funcțională, însă am fost precauți în ceea ce privește extinderea ei, în principal din motive de securitate. Cluj-Napoca va fi Capitală Europeană a Tineretului în anul 2015 și candidăm pentru titlul de Capitală Culturală Europeană. Astfel că ne așteptăm la o creștere semnificativă a numărului de vizitatori și ne pregătim în acest sens. Avem însă o responsabilitate majoră ca municipalitate de a asigura securitatea și confidențialitatea datelor, o problemă dacă vorbim în special de rețele publice cu acces gratuit. Vom discuta cu experți din domeniu și vom vedea care sunt cele mai bune soluții. Există proiecte în care Primăria Cluj are nevoie de voluntari IT ? Da, Primăria Cluj-Napoca este într-un proces de informatizare a activității - avem deja rezultate încurajatoare, avem nevoie de sprijin, astfel că m-aș bucura să avem tinerii care activează în industria IT clujeană implicați alături de noi în implementarea acestor schimbări. Recomand tinerilor interesați să ne dea un e-mail pe adresa serviciului specializat - informatica@primariaclujnapoca.ro - în urma căruia vor primi mai multe informații. Știm că este în derulare în zona Lombului un proiect pentru suportul startup-urilor locale. Ne puteți spune mai multe cuvinte despre acesta? Centrul pentru Industrii Creative va oferi companiilor oportunitatea de a-şi desfăşura activitatea într-o structură unică la nivel regional datorită complexităţii şi diversităţii facilităţilor şi serviciilor. Centrul va oferi servicii integrate pentru afaceri, servicii de asistenţă gratuită (tip help desk) oferite de personalul structurii de sprijinire a afacerilor în următoarele domenii: consultanţă şi servicii IT, consultanţă juridică, în marketing şi vânzări. Proiectarea întregii structuri este una dinamică, fiind creată pe o bază participativă, răspunzând astfel nevoilor reale ale potenţialilor clienţi, în termeni de amplasare, funcţiuni, suprafeţe, servicii, parcări, dotare şi echipare. Avem în vedere producerea unui efect de cluster care va permite creşterea competitivităţii companiilor găzduite prin schimbul de informaţii, facilitarea parteneriatelor de afaceri, economiile realizate prin utilizarea în comun a unor spaţii şi echipamente. Centrul vine în sprijinul necesităţii firmelor de a fi la curent cu ultimele evoluţii tehnologice, prin crearea unui corp consultativ alcătuit inclusiv din reprezentanți ai mediului academic. Aceştia vor putea comunica cu reprezentanții firmelor care activează în domeniul industriilor creative, în funcţie de specificul fiecărei companii.
Ovidiu Măţan, PMP
ovidiu.matan@todaysoftmag.com Editor-in-chief Today Software Magazine
www.todaysoftmag.ro | nr. 18/Decembrie, 2013
11
comunități
Comunităţi IT
D
ecembrie vine cu surprinzător de multe evenimente înainte de sărbătorile de iarnă. Vă invităm sa participați la ele iar recomandarea noastră este IT Days pentru cei din Transilvania și nu numai.
Transylvania Java User Group Comunitate dedicată tehnologiilor Java. Website: www.transylvania-jug.org Data înfiinţării: 15.05.2008 / Nr. Membri: 550 / Nr. Evenimente: 43 Comunitatea TSM Comunitate construită în jurul revistei Today Software Magazine. Website: www.facebook.com/todaysoftmag Data înfiinţării: 06.02.2012 / Nr. Membri: 1029 /Nr. Evenimente: 15 Romanian Testing Community Comunitate dedicata testerilor. Website: www.romaniatesting.ro Data înfiinţării: 10.05.2011 / Nr. Membri: 672 / Nr. Evenimente: 2 GeekMeet România Comunitate dedicată tehnologiilor web. Website: geekmeet.ro Data înfiinţării: 10.06.2006 / Nr. Membri: 567 / Nr. Evenimente: 17 Cluj.rb Comunitate dedicată tehnologiilor Ruby. Website: www.meetup.com/cluj-rb Data înfiinţării: 25.08.2010 / Nr. Membri: 151 / Nr. Evenimente: 36 The Cluj Napoca Agile Software Meetup Group Comunitate dedicată metodelor Agile de dezvoltare software. Website: www.agileworks.ro Data înfiinţării: 04.10.2010 / Nr. Membri: 330 / Nr. Evenimente: 40 Cluj Semantic WEB Meetup Comunitate dedicată tehnologiilor semantice. Website: www.meetup.com/Cluj-Semantic-WEB Data înfiinţării: 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 înfiinţării: 10.02.2011 / Nr. Membri: 230/ Nr. Evenimente: 14 Tabăra de testare Un proiect care își dorește să strângă cât mai mulți oameni care lucrează ca și testeri. Website: tabaradetestare.ro Data înfiinţării: 15.01.2012 / Nr. Membri: 356/ Nr. Evenimente: 20
12
nr. 18/Decembrie, 2013 | www.todaysoftmag.ro
Calendar Decembrie 4 (Cluj) Lansarea numărului 18 al Today Software Magazine www.todaysoftmag.ro Decembrie 4 (Cluj) An introduction to web application security with Simon Bennetts w w w . m e e t u p . c o m / Ta b a r a - d e - Te s t a r e - C l u j / events/152638932/ Decembrie 5-6 (Cluj) IT Days - recomandarea TSM www.itdays.ro Decembrie 7 (Cluj) Android Workshop 1 it-events.ro/events/android-workshop-1/ Decembrie 7-8 (Iași) Winter Web Workshop it-events.ro/events/winter-web-workshop/ Decembrie 10 (Cluj) UI/UX Cluj Meetup #2 www.meetup.com/UXUICluj/events/150664862/ Decembrie 10 (Cluj) How to make smartphone hits with Bart Decrem, Senior VP @ Walt Disney it-events.ro/events/make-smartphone-hits-bart-decremsenior-vp-walt-disney/ Decembrie 14 (Cluj) Global Day of Coderetreat 2013 - Cluj Napoca www.meetup.com/cluj-rb/events/149860962/ Decembrie 14-16 (Bucure;ti) “Talks” by Softbinator #30 it-events.ro/events/talks-softbinator-30/ Decembrie 22 (Brașov) Brașov Tech Meetup: December Meet it-events.ro/events/brasov-tech-meetup-december-meet/
programare
TODAY SOFTWARE MAGAZINE
Testarea funcțională în PHP
Î
Bogdan Matei
bogdan.matei@3pillarglobal.com Senior Php Developer @ 3Pillar Global
n 1999 se afirmau principiile de „Extreme programming”, iar patru ani mai târziu Kent Beck a reformulat conceptele în așa numitul Test Driven Development. În același an Dan North încerca să răspândească principiile TDD, dar se lovea frecvent de aceleași întrebări: „În ce fază să înceapă scrierea de cod?”, „Ce trebuie testat mai exact?” și „Care să fie structura testelor și cum să se numească ele?”. Atunci el a avut inspirația să propună ideea testării de comportament sau testarea funcțională și astfel s-a născut Behaviour Driven Development - o paradigmă care își propune o testare din perspectiva utilizatorului.De la concept la implementare în diferite limbaje n-a mai fost decât un mic pas. În PHP conceptul BDD a cunoscut două forme: SpecBDD - care se concentrează pe comportamentul tehnic al codului- și mult mai popularul, StoryBDD - care pune accentul pe comportamentul de business/trăsătură. Astfel, pentru SpecBDD se scriu specificații despre cum să se comporte codul, iar pentru StoryBDD se scriu „povești” („story”-uri) despre cum ar trebui să se comporte aplicația, folosind un limbaj foarte apropiat de cel uman, numit Gherkin. Framework-urile venite să ajute aceste activițăti au devenit PHPSpec pentru SpecBDD și Behat pentru StoryBDD, acesta din urmă fiind un proiect inspirat de Cucumber din Ruby. Articolul de față este dedicat formei StoryBDD și vine să prezinte aspecte tehnice de organizare a testării funcționale pentru proiecte web, în vederea automatizării acesteia. Ca să testăm exact din perspectiva clientului ar presupune, în condiții ideale, să avem același tip de browser, să efectuăm în aplicație același comportament ca al său și să analizăm totodată rezultatele acțiunilor noastre, dacă corespund unor așteptări de business corecte. În condiții inferioare celor ideale, din mai multe motive, s-ar putea totuși să ne mulțumim măcar cu o testare server-side, renunțând parțial sau complet la facilitățile browser-ului. Punerea
în aplicare a unui astfel de mediu de testare BDD presupune următoarele etape: instalarea tool-urilor, configurarea mediului, scrierea de “story”-uri, extinderea limbajului, compararea datelor, execuția si raportarea.
Instalarea
Este prima etapă și, din păcate, de obicei riscă să fie cea mai frustrantă. Pentru că am menționat tool-uri, excepție PHP care se subînțelege (versiunea minim 5.3), suita este compusă din: a. un interpretor de limbaj Gherkin, care să traducă ”poveștile” umane în acțiuni mașină: Behat; b. un set de metode care să producă acțiuni în browser: Mink cu driver-ele sale și MinkExtension; c. o soluție de a comunica cu browser-ul (proxy-uri), transmițându-i instrucțiunile de mai sus și citind răspunsul: Sahi (superior, mai ales versiunea Pro) sau Selenium2 (necesită JRE instalat); d. o soluție de a compara răspunsul de la browser cu așteptările corecte, dar care să permită includerea într-un proces de testare automată: PHPUnit; e. și bineînțeles browser-e. La acest punct testarea de diferite versiuni de Internet Explorer adaugă complexitate
www.todaysoftmag.ro | nr. 18/Decembrie, 2013
13
programare Testarea funcțională în PHP • sunt necesare configurări speciale suplimentară, prin faptul că nu pot php bin/behat --init pentru ”https”, întrucât invitația certifiexista mai multe versiuni de IE pe aceeași catului face imposibile testele, iar acest mașină. În acest moment practic suntem gata lucru depinde de proxy-ul utilizat; scoDiagrama de interacțiune și instalare a de utilizare a unui cadru BDD minimalist, pul final este ca browser-ul să cunoască componentelor este următoarea: însă în practică cerințele se extind la: adresa “https” și certificatul să fie deja • p o s i bi l it at e a d e a r u l a t e s t e instalat; funcționale în • atunci când ne aflăm în imposibilitabrowser-e specifice; tea de a utiliza browser-e comune (spre • rularea tesexemplu ne aflăm pe un server cu mod telor în mediul text), se poate testa funcțional inclus e r v e r- si d e, c ând siv codul Javascript folosind browser-ul browser-ele lipsesc PhantomJS; întrucât Mink nu are drisau nu este nevoie de ver pentru acesta, utilizarea lui se ele; poate face printr-un proxy. Pentru Sahi • necesitatea browser-ul PhantomJS trebuie adăugat la de a avea rapoarte configurări; ser ver-side după • atunci când proiectul este mare, ceea e x e c uț i a t e s t e l or ce implică multe teste, este mai bună, în funcționale; Behat versiunea 2, o organizare cu mai • intervenția minimă în procesul Procesul de instalare permite mai multe multe template-uri de behat.yml, pentru de configurare, pentru o mentenanță variante. Dacă Sahi vine cu un „installer” fiecare browser, iar la nivel de profile să ușoară. vizual, este mai ușor ca celelalte compofie testarea trăsăturilor individuale ale Majoritatea acestor cerințe se îndenente să fie instalate împreună, folosind aplicației. Composer. Se editează un fișier text, com- plinesc prin realizarea unui fișier ”behat. yml” cu profile specifice, cel implicit fiind poser.json, cu următorul conținut JSON: profilul Mink de bază, server-side, care nu Structura testelor { „require”: { permite interpretarea de Javascript: „behat/behat”: „2.4.*@stable”, Dan North a mai venit cu o realizare „behat/mink”: „1.4.*@stable”, default: însemnată: el a simplificat structura teste„behat/mink-extension”: „*”, extensions: „behat/mink-goutte-driver”: „*”, Behat\MinkExtension\Extension: lor clasice de la patru faze (setup, executare, „behat/mink-selenium2-driver”: base_url: ‚https://www.site.com/’ „1.0.*”, goutte: verificare, teardown) la trei, și anume „behat/mink-sahi-driver”: „1.0.*”, guzzle_parameters: „phpunit/phpunit”: „3.7.*” ssl.certificate_authority: Given, When, Then. Acestea au devenit }, false „minimum-stability”: „dev”, filters: cuvinte cheie care semnifică actorul, con„config”: { tags: „~@javascript” „bin-dir”: „bin/” textul (procesul) și rezultatele acțiunilor. } chrome_selenium: } extensions: Testele sunt organizate în ”story”Behat\MinkExtension\Extension: base_url: http://www.site.com / uri sau suite, care prezintă un titlu și o se aduce și se demarează instalarea întregii javascript_session: selenium2 default_session: selenium2 descriere. Fiecare ”story” cuprinde unul suite definite mai sus: browser_name: ‚chrome’ selenium2: sau mai multe scenarii. Un scenariu este o curl http://getcomposer.org/installer | php wd_host: 127.0.0.1:4444/wd/hub php composer.phar install capabilities: { „browser”: compoziție ordonată de mai mulți pași de „chrome”, „version”: „24”} testare (”steps”). Fiecare pas reprezintă în Operațiile de instalare pot dura cîteva firefox_sahi: extensions: limbaj Gherkin o acțiune. ”Cum știe calminute, dar la final rezultatul este un folBehat\MinkExtension\Extension: base_url: http://www.site.com/ culatorul ce să execute la întâlnirea unui der vendor/ care conține dependențele default_session: sahi javascript_session: sahi pas Gherkin? ” este o întrebare care își află proiectului. browser_name: firefox sahi: răspunsul printr-un dicționar, nimic mai În această etapă sunt utile cîteva host: localhost port: 9999 mult decât o tabelă de asociere injectivă de mențiuni speciale: filters: tags: „@javascript” la limbaj spre metode PHP. • pentru o organizare fără modificări phantomjs_sahi: Behat vine implicit cu un dicționar de în afara directorului de proiect nu se extensions: Behat\MinkExtension\Extension: bază. Pentru aflarea acestuia, cu detalii sau recomandă includerea executabilulului base_url: ‚https://www.site.com/’ javascript_session: sahi fără, se pot folosi comenzile : ”bin/behat” în lista comenzilor cunosbrowser_name: phantomjs goutte: ~ cute, ci lansarea executabilui prin calea sahi: ~ php bin/behat -di filters: php bin/behat -dl completă sau relativă la directorul de tags: „@javascript” proiect; Extinderea dicționarului este simplă • este bine de creat un folder dedicat Ultima parte a configurării se referă la și în acest sens Behat ajută prin indicarea rapoartelor. unui prototip de metodă PHP pentru fiebrowser-e: • se recomandă efectuarea configură- care frază Gherkin pe care nu o cunoaște. rilor de proxy server, corespunzătoare Metoda va trebui implementată în cadrul Configurarea Sahi sau Selenium2. Această operațiune contextului. Imediat după instalare este necePersistența ”story”-urilor pe disc se reaaproape că leagă exclusiv browser-ele de sară configurarea mediului de testare testarea funcțională, funcția de navigator lizează ca fișiere text, cu extensia ”.feature”. funcțională. fiind obstrucționată de proxy-uri - de Pentru proiectele mari se poate realiza o Pentru acest lucru se inițializează aceea se impune un mediu dedicat pen- structură logică cu directoare imbricate, (prima și o singura dată pe proiect) mediul dar aceasta presupune că suitele vor trebui tru testarea funcțională; Behat, prin comanda:
14
nr. 18/Decembrie, 2013 | www.todaysoftmag.ro
TODAY SOFTWARE MAGAZINE principal, compus din definiția unei clase care derivă, în principal (întrucît există și alte clase de context, dar sunt particulare), din BehatContext sau MinkContext. Diferența dintre cele două clase de bază este că MinkContext aduce în plus funcționalitatea de sesiune, iar BehatContext oferă o funcționalitate implicită minimală. Contextul principal poate avea subcontexte și astfel se rezolvă problema unui dicționar care poate deveni foarte mare pentru un singur fișier. Pentru extinderea dicționarului trebuie realizată o corespondență între pasul din ”story” și metoda necesară a fi implementată în context. Implementarea este precedată de adnotările speciale @Given, @ When, @Then, urmate de o expresie reguSpre exemplificare, structura unui lată, care, dacă este îndeplinită, declanșează apelul metodei respective: ”story” devine: rulate individual, întrucât, implicit, dacă nu este specificat, Behat execută toate fișierele ”*.feature” din folder-ul ”features/”, dar nu recursiv. Referitor la story-uri se impun următoarele mențiuni: • nu pot exista dependențe între ”story”-uri; • implicit scenariile sunt complet independente, iar dacă sunt necesare persistențe de date între acestea , se impune programare specială; • se recomandă folosirea tag-urilor, în special a celor care împart scenariile în două categorii: necesită sau nu Javascript (pentru Javascript tag-ul este @Javascript și se poate insera deasupra titlului ”story”-ului sau la fiecare scenariu).
# Content of file Login.feature Feature: User makes login As a user I want to do login So that I can see my dashboard @Javascript Scenario: Login with correct credentials Given I am in the „/login” page When I fill ”myusername” And I fill ”mypassword” And I click ”Login” Then I should see ”Welcome Username!” Scenario: Login with bad credentials Given I am in the „login” page When I fill ”bad username” And I fill ”bad password” And I click ”Login” Then I should see ”Invalid credentials”
Structura fișierelor de context
Mai sus scriam despre dicționar că este conceput ca o tabelă care traduce Gherkin în metode PHP. Dacă Gherkin este descris în fișiere ”features/*.feature”, metodele sunt organizate în așa-numitele fișiere de context, localizate implicit la ”features/ bootstrap/*.php”. Există un singur fișier de context
new Step\Given(„I have entered \”$number\””), new Step\When(„I press +”), new Step\Then(„I should see \”$result\” on the screen”) ); }
De asemenea, se poate injecta cod Javascript direct în browser sau se pot apela funcții specifice proxy-lui utilizat. Este ușor de anticipat că pentru proiecte mari, atunci când există un singur fișier de context principal, acesta riscă să cuprindă multe definiții și să devină greu de gestionat, mai ales că expresiile regulate trebuie să fie injective inclusiv la utilizarea sub-contextelor. În Behat versiunea 2 (singura stabilă în acest moment) ,proiectele mari au următoarele alternative de organizare: • utilizarea profilelor, din fișierul behat.yml, și pentru fiecare profil se poate utiliza proprietatea cheie ”class ” sau împreună proprietățile ”features” si /** * Some function description ”bootstrap”; acest lucru necesită atenție * * @Given /I am („\w+” user)/ la setup-ul profilelor (numele trebuie să * @Given /I am user:/ */ fie unice); public function iAmUser(User $user) { $this->user = $user; } • utilizarea sub-contextelor; contextul principal poate încărca contexte copil, Funcția poate avea orice nume, exprefiecare cu sesiune individuală sau partasia regulată este cea determinantă. Aceeași jată de la contextul parinte. funcție poate avea mai multe adnotări, cum se vede mai sus, important fiind că relația Versiunea Behat 3, în curs de dezvolregex-funcție să fie injectivă, altfel survine o eroare. De asemenea este recomandat tare, va aduce posibilitatea de organizare să fie scrisă și o descriere-titlu a funcției, feature-context. Mai departe, Behat oferă și posibilitacare va fi vizibilă la afișarea detaliată a tea de a avea acțiuni automate, rulate prin dicționarului. intermediul ”hook”-urilor: • înainte sau după rularea testelor În corpul unei funcții se poate scrie limfuncționale (tag-ul @BeforeSuite); baj Gherkin, realizându-se un pas complex: • înainte sau după un story (tag-ul @ /** * @Given /I entered „([^”]*)” and expect BeforeStory); „([^”]*)”/ */ • înainte sau după un scenariu (tag-ul public function complexStep($number, $result) { @BeforeScenario). return array( 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 offerings are business focused, they drive real, tangible value.
www.3pillarglobal.com
www.todaysoftmag.ro | nr. 18/Decembrie, 2013
15
programare Testarea funcțională în PHP pot fi folosite mai multe fișiere behat.yml); • f isier u l ”.fe ature” dorit; • dacă se dorește sau nu scrierea de rapoarte și în ce format:
Acestea sunt utile pentru operațiunile de conectare la baza de date, pentru pregătiri de teste sau curățări și raportare. Figura alăturată prezintă etapele de execuție ale acestor operații, intercalate în faza de rulare a fișierelor “*.feature”. Se poate întâmpla ca anumite site-uri să php bin/behat --config behat. yml features/test.feature – se încarce mai greu și din acest motiv tes- profile firefox_sahi --format html --out behat-reports/Retele funcționale să invalideze. În acest sens port.html sunt utile ”spin” –urile, care au rolul de a Rapoartele XML pot testa prelungit un anumit step, înainte ca fi analizate automat, iar rapoartele HTML sunt foarte ușor de citit: În cazul testelor în browser este necesar ca proxy-ul să fie instalat pe aceeași mașină unde se află browserul, să fie pornit, iar browser-ul să aibă setările de proxy deja configurate. Mink va transmite comenzile la adresa proxy-ului specificată în behat.yml, proxy-ul va deschide browser-ul local, însă rapoartele și rezultatele testelor se desfășoară pe mașina unde s-a rulat linia de comandă. Acest lucru permite utilizarea mașinilor virtuale, cu diferite instanțe de browser-e (de obicei cerute de Internet Explorer), mașini care la acesta să invalideze rapid. rândul lor pot fi controlate prin utilizarea script-urilor. Condiția este ca serverul de Verificarea datelor În cadrul fișierlor de context, în corpul test să aibă mod grafic și o soluție de virtufuncțiilor, atât celor implicite cât și celor alizare (VMWare, VirtualBox etc.). dezvoltate ulterior, intervine operația de comparare între rezultatul întâlnit și rezul- Testarea funcțională independentă tatul așteptat. Utilă în acest sens este librăria Un caz destul de frecvent este cerința PHPUnit care vine cu o largă varietate de de a implementa testări funcționale comoperațiuni de comparare care validează sau plet independent de proiect. Acest lucru nu rularea testelor. presupune crearea unui proiect pentru Folosirea PHPUnit aduce avantajele testele funcționale, care să permită o strucintegrării mature cu mediile de Continuous tură flexibilă de extindere pe orizontală, Integration/Delivery și utilizarea unui cod mai ales când portalul web are dimensiuni existent. Mink are deja funcții de com- mari. Extinderea presupune trei sau patru parare derivate din PHPUnit, dar pentru dificultăți: folosirea tuturor funcțiilor PHPUnit este • structura pe disc a fișierelor ”.feature”; necesar importul: • structura fișierelor de context și decizia de organizare a testelor pe profile require_once ‚PHPUnit/Autoload.php’; require_once ‚PHPUnit/Framework/Assert/Func(mai eficientă și mai ușor de intreținut, tions.php’; cel mai bine cu template-uri de behat.yml în contextul principal. specifice unui tip de browser) sau pe subcontexte (în acest caz nu se recomandă Rularea testelor folosirea funcțiilor magice); Execuția testelor funcționale presu• modul de obținere al setului de date pune rularea unei linii de comandă în care cunoscute; se specifică: • opțional, mai ales în cadrul pro• profilul ales din behat.yml (util mai iectelor în care structura DOM a ales când avem feature-uri împărțite pe HTML-ului nu permite acționarea facilă profil) ; a elementelor (spre exemplu avem lipsa • locația relativă a behat.yml (deci
16
nr. 18/Decembrie, 2013 | www.todaysoftmag.ro
proprietăților ”id”, ”name”, ”class” la elementele HTML), este necesară identificarea programatică a elementelor de pe UI (de obicei folosind Xpath ”locators”); când numărul acestora crește considerabil, este necesară o structura favorabilă de persistență, aflată în relație cu setul de date cunoscute. Pentru o mai bună organizare și pentru că de multe ori QA-ul nu cunoaște modul de stabilire al datelor corecte, este mai bine ca setul de date cunoscute să fie păstrat în cadrul proiectulului părinte, iar între acesta și proiectul de testare funcțională să se poată stabili o metodă de comunicare (REST, http, bază de date comună etc.), prin care se poate interoga valoarea corectă pentru un element funcțional specific.
Concluzii
Testarea funcțională reprezintă apogeul actual al testelor efectuate din perspectiva utilizatorului. O intuiție sau o reproducere a comportamentului acestuia și a contextului acestuia (browser) asigură un nivel excelent de calitate a produsului software. Menirea pricipală a testelor funcționale o reprezintă analiza comportamentală și contextuală, însă ele pot fi extinse și la anumite analize de performanță sau securitate.
programare
TODAY SOFTWARE MAGAZINE
Gestionarea autentificării în AngularJS
A
Leonard Abu-Saa
leonard.abu-saa@arobs.com System Architect @ Arobs
utentificarea este procesul de identificare a unui utilizator care dorește să acceseze o resursă protejată. Folosim procesul de autentificare în viaţa cotidiană: cărţi de identitate, nume de utilizator, parole, carduri de acces etc. . Procesul care urmează se numeşte autorizare, ambele sunt în strânsă conexiune şi, uneori, confundate. Prin autorizare verificăm drepturile utilizatorilor pentru a vedea dacă au sau nu acces la o resursă specifică, după ce s-au autentificat. În orice caz, nu confundaţi noţiunile: autorizarea nu poate exista fără autentificare. În articolul de faţă vom analiza procesul de identificare a utilizatorului folosind AngularJS.
Atenţie! Nu uitaţi că toate acţiunile au loc în browser-ul clientului, ceea ce înseamnă că acesta are control deplin asupra browser-ului şi poate evita controalele de securitate. De aceea este foarte important să verificăm şi în back-end.
Următorii paşi sunt recunoaşterea utilizatorului autentificat şi verificarea accesului acestuia la rute.
Recunoaşterea unui utilizator autentificat
Acest lucru se poate face în multiple moduri, dar preferăm folosirea de servicii în AngularJS. De aceea am creat un UserService în care am stocat numele de utilizator actual Configurarea rutării clientului Aici vom selecta paginile care vor şi o valoare care indică dacă utilizatorul este avea nevoie de autentificare şi vom confi- autentificat sau nu. gura rutarea aplicaţiei. O rută se defineşte // in UserService.js furnizând cel puţin template-ul sau temmyApp.factory(‚userService’, function () { plateUrl-ul şi controller-ul paginii. În plus, var user = { isLogged: false, am adăugat proprietatea access cu atributul username: ‚’, }; allowAnonymous. În acest fel ştim dacă var reset = function() { ruta actuală necesită autentificare sau este o user.isLogged = false; user.username = ‚’; pagină cu acces nerestricţionat. În exemplele }; de mai jos avem pagina Login care este accereturn { user: user, sibilă oricui şi pagina MembersPage care reset : reset }; necesită autentificare. }); // in app.js var myApp = angular.module(‚myApp’,[‚ngResource’, ‚ngCookies’, ‚ngRoute’]); myApp.config(function ($httpProvider, $routeProvider) { window.routes = { ‚/Login’: { templateUrl: ‚/Account/Login’, controller: ‚AccountController’, access : {allowAnonymous : true} }, ‚/MembersPage: { templateUrl: ‚/Home/SomePage, controller: SomePageController’, access: {allowAnonymous:false}}}; for (var path in window.routes) { $routeProvider.when(path, window. routes[path]); } $routeProvider.otherwise({ redirectTo: ‚/ Login’ }); });
După ce am configurat serviciul, este timpul să îl folosim şi să implementăm funcţionalitatea de verificare a rutei. În cazul schimbării rutei există mai multe metode de interceptare, dar pe noi ne interesează doar schimbarea care are loc înainte ca utilizatorul să fie redirecţionat pentru a putea verifica dacă este autentificat: $routeChangeStart, $locationChangeStart. Prin aceste metode putem verifica dacă ruta accesată permite accesul unui utilizator neautentificat. În caz de eroare putem afişa un mesaj de eroare şi
www.todaysoftmag.ro | nr. 18/Decembrie, 2013
17
programare
Gestionarea autentificării în AngularJS
să-l redirecţionăm pe utilizator înspre pagina de logare. // in RootController.js myApp.controller(‚RootController’, function ($scope, $route, $routeParams, $location, $rootScope, authenticationService, userService, toaster) { $scope.user = userService.user; $scope.$on(‚$routeChangeStart’, function (e, next, current) { if (next.access != undefined && !next.access.allowAnonymous && !$scope.user.isLogged) { $location.path(„/Login”); } }); $scope.logout = function () { authenticationService.logout() .success(function (response) { userService.reset(); toaster.pop(„info”, ‚You are logged out.’, ‚’); }); }; $rootScope.$on(„$locationChangeStart”, function (event, next, current) { for (var i in window.routes) { if (next.indexOf(i) != -1) { if (!window.routes[i].access.allowAnonymous && !userService.user. isLogged) { toaster.pop(„error”, ‚You are not logged in!’, ‚’); $location.path(„/Login”); } } } }); });
Authentication Service
Acest serviciu oferă o modalitate de a comunica cu serverul şi stabileşte statusul de autentificare. În acest moment ne interesează metodele de login/logout. Pe partea de back-end se foloseşte un serviciu de Web API service. Metoda de login este un post request care transmite datele de logare consistând din numele de utilizator şi parolă. Vă rog să observaţi că RequestVerificationToken este folosit pentru a se evita cross-site request forgery attacks. //in AuthenticationService.js myApp.factory(‚authenticationService’, function ($http, $log, $location) { return { login: function (login, antiForgeryToken) { return $http({ method: ‚POST’, url: ‚/api/Account/AuthenticateUser’, data: login, headers: { ‚RequestVerificationToken’: antiForgeryToken } }); }, logout: function () { return $http.post(‚/api/Account/Logout’); } }; });
Asamblare datelor Singurul lucru care mai rămâne de făcut este crearea unei forme care să adune informaţiile de logare şi un controler în care să putem folosi împreună serviciile de autentificare şi de utilizator. O formă foarte simplificată de Login arată ca în exemplul de mai jos. //in Login.cshtml @model Model.LoginModel @{ Layout = null; } @functions { private String GetAntiForgeryToken() { string cookieToken, formToken; AntiForgery.GetTokens(null, out cookieToken, out formToken); return cookieToken + „:” + formToken; } } <div class=”container”> <form name=”loginForm” class=”form-signin”> <input id=”antiForgeryToken” data-ng-model=”antiForgeryToken” data-ng-init=”antiForgeryToken=’@GetAntiForgeryToken()’” type=”hidden”/> <h2 class=”form-signin-heading”>Authentication</h2> <br /> <input type=”email” required=”required” name=”username” class=”formcontrol” ng-model=”userData.username” placeholder=”Email address” /> <input type=”password” required name=”password” class=”form-control” ng-model=”userData.password” placeholder=”Password” /> <label class=”checkbox”> <input type=”checkbox” value=”remember-me”>Remember me</label> <button type=”submit” class=”btn btn-lg btn-primary btn-block” ng-
18
nr. 18/Decembrie, 2013 | www.todaysoftmag.ro
click=”login(userData, loginForm)”>Login</button> </form> </div>
When the user clicks login button, the form data is sent to the account controller. Using the authentication service, the data is sent in a POST request. In case of success we use the user service to store the data and redirect the user to the desired page, otherwise we show an error message and keep the user on the login page. // in AccountController.js myApp.controller(‚AccountController’, function AccountController($scope, $cookies, $log, $location, authenticationService, toaster, userService) { $scope.login = function (userData, loginForm) { if (loginForm.$valid) { authenticationService.login(userData, $scope.antiForgeryToken) .success(function (response) { if (response.status) { userService.user.username = response.data.userName; userService.user.isLogged = response.data.isLogged; toaster.pop(‚success’, ‚You are signed in!’, ‚’, 2000, true); $location.path(„/MembersPage”); } else {
toaster.pop(‚error’, ‚Invalid username or password!’, ‚’, 2000, true);} }).error(function (data, status, headers, config) { $log.info(data);});} }; });
Acestea sunt lucrurile de care este nevoie pentru a implementa o autentificare rudimentară cu AngularJS.
TODAY SOFTWARE MAGAZINE
arhitectură
Specificații executabile
S
Alexandru Bolboaca
alex.bolboaca@mozaicworks.com Agile Coach and Trainer, with a focus on technical practices @Mozaic Works
Adrian Bolboaca
adrian.bolboaca@mozaicworks.com Programmer. Organizational and Technical Trainer and Coach @Mozaic Works
pecificațiile executabile sunt o modalitate de a folosi testele automate cu scopul de a documenta funcționalitățile unei aplicații. Testele automate sunt tot mai utilizate în industria software cu scopul de a valida funcționarea corectă a unei aplicații. Validarea funcționării corecte implică evident și un dialog cu persoanele care formulează cerințele (analiști business, product owners, product managers, alți stakeholders) și testele automate nu ne scutesc de documentarea cazurilor de utilizare ale aplicației. Pentru documentarea funcționalităților există câteva soluții, cea mai comună fiind scrierea de documente de specificații. Problemele încep în momentul în care funcționalitățile se schimbă, de cele mai multe ori documentele de specificații nemaiținînd pasul. Motivele sunt variate: aceasta procedură este greoaie, adesea de durată si adesea documentele sunt create de alte persoane decât cele care scriu codul pentru aplicație. Apare astfel riscul ca specificațiile să nu arate, pentru o perioadă de timp, modul actual de funcționare. • Testele să se concentreze pe comportaO soluție pentru a reduce risipa generată mentul utilizatorului sistemului. de rescrierea documentelor de specificații ar fi folosirea testelor ca specificații. Acestea verifică deja codul și sunt sincronizate în Mai trebuie și alt fel de documentație? permanență cu codul de producție. De ce În funcție de tipul de sistem software să nu fie scrise în așa fel încât să arate ca un dezvoltat este nevoie și de alte tipuri de document de specificații? documentație care nu pot fi generate automat din codul de producție. Iată câteva exemple: manualul utilizatorului, documentație de Cum se scriu specificațiile executabile? Testele pot fi scrise ca specificații executa- arhitectură, documentație comercială, pentru operațiuni, etc. . bile respectând câteva reguli: Evident că acest tip de documentație • Testele să fie scrise într-un asemenea fel trebuie să fie scrisă folosind documente sau încât să poată fi citite în limbaj natural. • Numele testelor să folosească doar diagrame specifice. limbaj din domeniul de business, fără termeni tehnici. • Testele să nu includă detalii de implementare în nume. www.todaysoftmag.ro | nr. 18/Decembrie, 2013
19
arhitectură Specificații executabile Unelte
Programatorii vin apoi și leagă acest text cu funcții din cod, care apelează codul de producție, într-un mod foarte similar ca testele scrise în JUnit/NUnit/xUnit , dar puțin altfel structurate. Aceste teste vor pica la început, urmând să treacă pe măsură ce RSpec2 si Cucumber3 au fost dezvoltate funcționalitățile sunt implementate. inițial pentru ruby, dar acum există și variante în alte limbaje. De exemplu SpecFlow 4 este o adaptare pentru .Net, iar JBehave5 a Avantaje specificațiilor executabile? fost dezvoltat pentru tehnologii Java. • M i n i m i z e a z ă m u n c a d e documentație, legând-o cu testarea automată. Cum se lucrează cu specificații executa• Feed-back foarte rapid pentru persoabile nele care creează cerințele pentru produs. Specificațiile pot să fie scrise de persoaPot să știe oricând ce funcționează și nele de business (analiști, product owners, cum, cu condiția să ruleze un set de teste. product managers, etc.) în limbaj natural • Feed-back foarte rapid pentru dezîntr-o formă de genul următor: voltatori. Înțeleg repede unde trebuie să Feature: Adition modifice sistemul actual pentru a adăuga In order to avoid silly mistakes noile funcționalități. Cashiers must be able to calculate a • O unealtă de dialog foarte utilă între sum persoanele de business și persoanele tehnice. Specificațiile sunt înțelese de Scenario: Simple numbers ambele grupuri de persoane și evităm • I have entered 4 at the calculator situațiile “noi vs. ei”. keyboard • Crește încrederea echipei că au un • I have entered 3 at the calculator produs care face ce trebuie. keyboard • I press sum • The screen should display 7 as a Dezavantaje? result • Nu se poate realiza dacă nu avem teste automate pentru toate cazurile de Astfel oricine cunoaște limbajul de utilizare a sistemului software. domeniu poate să înțeleagă și să citească • Trebuie menținută o disciplină acest test. riguroasă în echipele care scriu testele pentru a se concentra asupra compor1 http://en.wikipedia.org/wiki/FitNesse tamentuluidin partea utilizatorului și 2 http://rspec.info/ 3 h t t p : / / e n . w i k i p e d i a . o r g / w i k i / pentru a folosi doar nume din limbajul Cucumber_%28software%29 4 http://www.specflow.org de domeniu. 5 http://jbehave.org/ Fitnesse1 este, istoric vorbind, prima unealtă pentru a scrie teste executabile. Folosește tabele și poate fi folosit pe aproape orice tehnologie.
20
nr. 18/Decembrie, 2013 | www.todaysoftmag.ro
Concluzii
Specificațiile executabile sunt o soluție foarte bună pentru a avea un feed-back constant și pentru a verifica dacă aplicația se comportă precum se așteaptă utilizatorii. Pentru a scrie specificații executabile trebuie ca programatorii să stăpânească scrierea de teste unitare, de teste de acceptanță și folosirea limbajul din domeniul business pentru care lucrăm. Tranziția către specificații executabile poate să fie treptată, în pași mici, până ce dialogul între persoanele de business și dezvoltatori devine eficient. Folosind specificațiile executabile, analiștii business pot să scrie în limbaj natural cerințele pe baza cărora poartă un dialog cu dezvoltatorii, în același timp creând testele de acceptanță pentru aplicație.
management
TODAY SOFTWARE MAGAZINE
Îmbunătățirea Continuă – o practică de luat în serios
P
Ovidiu Dolha
ovidiu.dolha@isdc.eu Requirements engineer @ ISDC
rogramele de studiu superior din România orientate spre informatică și calculatoare deseori includ cursuri de inginerie software, analiză și design software și managementul proiectelor. În ciuda aspectului inițial atractiv pe care cursuri de tipul acesta îl arată, studenții deseori devin ușor dezamăgiți către finalul lor, sau cel puțin în comparație cu alte cursuri (limbaje de programare, hardware, chiar și fizică, matematică), acestea fiind văzute mai puțin interesante sau utile. În realitate, nu e vorba de o lipsă intrinsecă pe care o au studenții în legătură cu aceste subiecte. O parte din problemă constă în abordarea teoretică a acestor materii și dificultatea pe care o au studenții în a înțelege în mod fundamental conținutul. Aceasta rezultă în nevoia de a învăța pe de rost o parte bună din cursuri, fără a înțelege cu adevărat principiile din spate. că, în mare parte, se poate aplica foarte bine și altor concepte (management de proiect, analiză și design software, arhitectură software, specificarea cerințelor software). Voi încerca să expun pe scurt unele din motivele responsabile pentru situația menționată, dar apoi mă voi concentra în principal pe soluții care s-au dovedit a fi eficace și care ar putea să îmbunătățească situația într-o oarecare măsură. Fără îndoială, una dintre cauzele principale ale conceptelor neînțelese este educația. Educația, după cum am menționat deja, oferă acces către o sursa valoroasă de conținut, dar care din nefericire nu este întotdeauna transmisă eficient. Când vorbesc de educație, includ atât experiența școlară În acest articol mă voi concentra pe (pre-absolvire) cât și educația din cadrul îmbunătățirea continuă (Î.C.), una dintre organizației, deseori numită dezvoltare procele mai puțin înțelese practici din cadrul fesională. Îmi voi îndrepta atenția mai mult ingineriei software; e demn de menționat În Cluj, dacă vei întreba persoane care lucrează în companii de dezvoltare software ce profesie consideră că au, o bună parte vor răspunde ”inginer software”. Sună bine, dar mulți dintre ei doar după ani buni de experiență în IT ajung să înțeleagă ce e cu adevărat ingineria software și ce implică ea. Motivul principal pentru care studenții nu înțeleg însemnătatea diverselor aspecte de inginerie software nu are legătură cu conținutul. Revizuind acele materii după ani de experiență în IT, descoperi că erau de fapt relevante și interesante. Chestiuni precum CMMi par foarte captivante și clar explicate. De ce nu aveam același sentiment și în momentul respectiv, când eram în facultate?
www.todaysoftmag.ro | nr. 18/Decembrie, 2013
21
management Îmbunătățirea Continuă – o practică de luat în serios spre aceasta din urmă deoarece este una în care avem mai mult control și flexibilitate, astfel încât mă aștept să descoperim soluții pragmatice cu rezultate imediate. Un motiv deseori invocat pentru educația ineficientă este lipsa abilităților didactice. Studenții sau începătorii nu se simt atrași sau inspirați de la bun început. De asemenea, lipsa entuziasmului profesorului sau mentorului se transmite foarte repede. Un alt motiv (şi din punctul meu de vedere) deși mai rar invocat, este unul care contribuie mult mai mult. Acesta e lipsa unui context atașat materiei. În universitate, lipsa contextului uneori devine ridicolă. Subiecte precum CMMi – un model foarte abstract a cărui esență implică un program real de Î.C. – poate fi înțeles doar în contextul vieții în organizație. Aceasta însă este necunoscută majorității studenților la momentul respectiv (unii vor avea locuri de muncă în IT când sunt încă la facultate, dar și așa abia au început să descopere ce înseamnă viața în organizație). În facultate este foarte dificil să oferi acest context, dar chiar și când vorbim de dezvoltare profesională într-o organizație, prea des vedem aceeași lipsă. Î.C. trebuie cultivată într-un cadru potrivit, și din păcate chiar și organizațiile care par să înțeleagă foarte bine conceptul tind să impună practica în loc să învestească în educație și în oferirea unui mediu prielnic. Și aici se află de fapt cheia. Propunerea mea pentru Î.C. este să o luăm în serios. Aceasta presupune o serie de schimbări și ajustări pe care trebuie să le facem în organizație, iar eu cred că cea mai bună abordare este bidirecțională (pornind atât de sus, cât și de jos, în același timp).
22
Privind de sus, principala schimbare este practicarea Î.C. într-un mod cât mai transparent posibil. Cu siguranță managementul senior din echipa de leadership practică Î.C., dar când și cum? Asigurați-vă că devine clar pentru organizație. Managementul senior ar trebui să-și facă un țel din a fi cei mai buni la Î.C. Oamenii vor să afle despre deciziile luate la nivel înalt într-un mod bine calculat și informat (mai ales cele dificile), despre planificarea strategică, retrospective care iau în considerare date istorice (colectate de-a lungul timpului), riscuri calculate, managementul proceselor și al calității la nivele de management senior, și așa mai departe. Dacă e posibil, oamenii ar fi plăcut surprinși să vadă chiar dovezi concrete ale acestor activități: documente ajutătoare (de exemplu, analiza de decizie), rapoarte ale întâlnirilor, măsurători, liste și log-uri, orice poate inspira nivelele de mai jos. Conducerea prin exemplu se dovedește a fi unul dintre cele mai bune moduri de a induce schimbarea în cultura organizațională. Din păcate, aceasta funcționează și în cazurile în care practicile arătate sunt slabe. Privind de jos în organizație, atenția pe educație trebuie întărită. Majoritatea angajaților este dispusă să învețe și să înțeleagă, dar majoritatea profesioniștilor IT este sceptică de la natură (și e foarte bine să fie așa). Pentru a-i câștiga, e important să vorbim concret, ceva ce poate fi cu adevărat solicitant când subiectul este Î.C. O metodă bună e aceea de a spune povești de succes. Identifică cele mai bune proiecte unde Î.C. merge foarte bine și oferă cadrul potrivit pentru ca oamenii din aceste proiecte să-și spună povestea.
nr. 18/Decembrie, 2013 | www.todaysoftmag.ro
Încurajează promovarea succesului prin Î.C prin metode gen sesiuni deschise, „târguri” interne, workshop-uri, și schimburi de experiență între echipe. O abordare de tip târg intern a fost folosită de câteva ori în ISDC. Este un loc în care oamenii pot să arate ceva de care ei sunt mândri din viața profesională. Poate fi o arhitectură inteligentă, un design funcțional interesant din produsul la care au lucrat, o componentă re-utilizabilă sau, pur și simplu, practici bune pe care le-au colectat de-a lungul timpului – ponturi utile într-un context sau altul. În orice caz, este o metodă eficientă și relativ ieftină de a-i aduce pe toți într-un loc și a genera un cadru prielnic dialogului. Un mediu informal e perfect pentru a încuraja conversațiile prietenoase și deschise. Nu numai că un eveniment de genul acesta e o sursă de motivație, dar e incredibil să vezi câte lucruri noi și deseori relevante află angajații despre ceea ce fac colegii lor din alte proiecte și echipe. Alteori, metode mai puțin intuitive se dovedesc a fi foarte productive. Un exemplu este încurajarea oamenilor să învețe de la colegii lor. Aceasta presupune o oarecare împuternicire a întregii organizații și, în loc să îi implici mereu pe aceiași seniori susținători puternici ai Î.C., implică-i și pe ceilalți. Descoperă persoane care vor face publicitate gratis și încurajează-i în mod conștient (mai ales dacă sunt persoane cu putere informală). Încurajează de asemenea dialogul, nu îi cenzura sau ascunde pe cei care au o opinie mai puțin pozitivă despre Î.C. Cu cât se vor simți mai puțin ascultați, cu atât va fi mai greu să-i convingi. Deci e important să nu neglijăm acest aspect, pentru că și aceștia pot fi persoane cu putere mare informală. În cazuri de conflict de
TODAY SOFTWARE MAGAZINE opinie, organizează dezbateri publice. O practică de genul acesta e foarte productivă în ISDC. O numim „Mythbusters” și este de fapt o dezbatere deschisă pe un subiect controversat. Participanții sunt încurajați să se implice și avem voturi înainte și după dezbatere astfel încât să vedem ce convingeri au fost schimbate pur și simplu prin discuții raționale, argumentarea și prezentarea unor fapte și date reale, descoperite prin cercetare prealabilă. Î.C. se află într-o perioadă grea. Acum aproape un secol, când a pornit totul, Japonia era una dintre țările cu cea mai slabă calitate a produselor. În perioada respectivă a apărut o inițiativă nouă sub numele de „Kaizen”. Aceasta însemna pur și simplu „schimbare bună” (kai = schimbare, zen = bun). O filozofie simplă a revigorat complet economia și a făcut Japonia una dintre țările cu cea mai bună calitate în era modernă. Î.C. a explodat în diverse forme și locuri, de la producție la servicii și de la produse tangibile la produse abstracte și creative. Diverse industrii au adoptat conceptul și l-au adaptat nevoilor lor. CMMi este de exemplu un model de Î.C. specific gândit pentru IT. În timp ce pentru industriile cu rezultate tangibile și repetitive ( de exemplu: construcție de automobile) standardele concrete merg bine, în IT a fost nevoie de un model mai abstract și flexibil, unul care întotdeauna solicită adaptarea la context (tailoring). Așadar, natura modelelor de Î.C. în IT este unul dintre motivele pentru care sunt dificil de înțeles și aplicat. Dar nu e vorba doar de IT.,industriile în general tind să devină tot mai puțin tangibile în ceea ce privește implicarea umană. Automatizarea preia tot mai mult din munca repetitivă, predictibilă și tangibilă, ignorând implicarea umană tot mai importantă în arii precum: creativitate, inovare, strategie, planificare complexă, management, comunicare și interacțiune umană. Tocmai de aceea acum începem să vedem un declin în Japonia. În
ultimii ani, calitatea a început să scadă în comparație cu alte țări care încep să iasă pe piața internațională tot mai mult (China sau Coreea de Sud). Acestea încep să preia conducerea. De ce? Din exact același motiv pentru care Japonia a preluat conducerea secolul trecut: au descoperit o metodă mai bună de a face lucrurile. Dar acum țările care nu demult au început să aprecieze Î.C. o aplică direct pe industrii puțin tangibile, ceea ce le dă un avantaj în comparație cu Japonia unde există încă o oarecare inerție. Ce e de învățat de aici? În primul rând să nu renunțăm la Î.C. În schimb, trebuie să învățăm să o aplicăm bine, să educăm începătorii în domeniu prin prezența unui context favorabil și, de fapt, să o luăm în serios. Trebuie să fim sceptici, să punem întrebări relevante, să fim deschiși, să adaptăm Î.C. în funcție de situație. Lumea este tot mai dinamică, iar practicile noastre trebuie adaptate acesteia.
www.todaysoftmag.ro | nr. 18/Decembrie, 2013
23
programare
Alinierea partițiilor în medii virtuale
O
dată cu trendul de virtualizare a serverelor din ultimii ani a apărut și problema alinierii greșite a partițiilor. Pentru că mulți dintre noi ignorăm importanța alinierii corecte a partițiilor, scopul acestui articol este prezentarea consecințelor nealinierii corespunzătoare.
Concepte de storage
Dragoș Masarasan
dragos.masaran@endava.com Support engineer @ Endava
Problema alinierii partițiilor a apărut odată cu conceptul de virtualizare și presupune folosirea de storage partajat de mașinile virtuale. Vom prezenta pe scurt principalele platformare de virtualizare (VMware și Hyper-V) și modul cum tratează fiecare problema alinierii corecte a partițiilor. Vom descrie pe scurt și unele concepte pe care le vom folosi ulterior: • LUN, • Fibre Channel (FC), • iSCSI, • Chunk, • Block, • Cluster.
Alinierea sistemului de fișiere
În cadrul storage-ului există mai multe straturi implicate în procesul de aliniere. În principiu, fiecare strat este împărțit în structuri de blocuri (blocks sau chunks). Fiecare vendor poate să folosească blocuri de mărimi diferite, acest lucru nereprezentând o problemă. Pentru noi este important să știm unde începe acel bloc (starting offset). Pentru a avea o performanță maximă, offset-ul de început al sis-
24
nr. 18/Decembrie | www.todaysoftmag.ro
temului de fișiere ar trebui să fie aliniat cu blocul din nivelul inferior de storage. Nealinierea celor două limite va duce la operații I/O adiționale și la degradarea performanței. Articolul Wikipedia Cylinder-headsector 1 este un bun început pentru a înțelege conceptele legate de discuri fizice. În trecut, sistemele de operare nu luau în considerare alinierea corectă a partițiilor. De exemplu, Microsoft a rezolvat această problemă doar începând cu Windows Server 2008. Pentru distribuțiile Linux, cele care folosesc încă utilitarul fdisk sunt susceptibile să aibă această problemă. Implicit, sistemele de operare moderne vor încerca să se alinieze la primul sector al unui track. Astfel în momentul instalării sistemului de operare, acesta va detecta valoarea Cilindru/Cap/Sector (Cylinder/ Head/Sector – CHS) de la BIOS care în cazul mașinilor virtuale reprezintă de fapt un BIOS emulat. Problema stă în faptul că informația returnată nu corespunde cu realitatea, probleme apărând de exemplu la LUN-uri de peste 8 GB unde numărul de sectoare per track-uri este întotdeauna raportat ca 63. Am definit anterior noțiunea de bloc de 1 http://en.wikipedia.org/wiki/Cylinder-head-sector
TODAY SOFTWARE MAGAZINE 4. LUN mapat direct printr-un iSCSI inițiator În cadrul ESXi, o mașină virtuală este încapsulată în două fișiere: • Vmdk – reprezintă imaginea actuală a discului aparținând unei mașini virtuale. • Vmx – fișierul conținând setările de configurare ale mașinii virtuale. Figura 1 Mașina virtuală cu sistem de fișiere nealiniat
Atât exporturile de tip VMFS cât și NFS sunt referite ca datastores în cadrul ESX. Dacă este folosit NFS, stratul de abstractizare VMFS dispare întrucât directoarele mașinii virtuale sunt ținute direct pe mount point-ul NFS prezentat ca datastore. În cazul folosirii VMFS, figura anterioară are încă un nivel de abstractizare și arată astfel ca în Figura 2 Dacă atât VMFS cât și sistemul de fișiere al mașinii gazdă sunt nealiniate,
date. Un bloc de date reprezintă unitatea Mware cea mai mică de date care poate fi folosită În cadrul ESXi, există mai multe pentru a stoca date. Blocurile discurilor modalități prin care un storage partajat fizice vor avea întotdeauna 512 bytes, dar poate fi prezentat unei mașini virtuale: din motive de eficiență și scalabilitate, 1. Virtual Machine File System (VMFS) vendori-i de dispozitive storage folosesc folosind Fibre Channel sau iSCSI, valori puteri ale 2 alea unui block fizic????. 2. Network File System (NFS) exportat Arhitectura NetApp folosește blocuri de 4 către un host ESX, KB (8 blocuri fizice), HP 3Par de 16 KB, iar 3. Raw Device Mapping – prezentaEMC Symmetrix de 64 KB. rea directă a unui LUN către o mașină Luând ca exemplu NetApp, o operație virtuală, de scriere va folosi cel puțin 4 KB și poate folosi multiple blocuri de 4 KB în funcție de mărimea datelor ce urmează a fi scrise. Problemele apar în momentul în care schema de partiționare a sistemului de fișiere a mașinii virtuale nu respectă limita din interiorul LUN-ului (Figura 1). Dacă sistemul de fișiere al mașinii virtuale nu este aliniat, pentru a citi un bloc de date este nevoie de două apeluri la stratul inferior. Acest lucru duce la degradarea eficienței deoarece controlorul storage lucrează în plus pentru a realiza o operație Figura 2 de citire/scriere.
www.todaysoftmag.ro | nr. 18/Decembrie, 2013
25
programare Alinierea partițiilor în medii virtuale numărul de operații I/O adiționale este multiplicat. VMFS 2 folosea ca offset implicit 63 de blocuri, provocând astfel nealinierea la nivel de I/O. VMFS 3 este aliniat implicit întrucât folosește 128 blocuri ca offset. Migrarea de la VMFS 2 la VMFS3 nu duce la alinierea datastore-urilor, pentru a realiza acest lucru fiind necesară copia pe un datastore nou. În cazul Raw Device mapping-urilor și a LUN-urilor mapate direct către o masină virtuală, trebuie să fim atenți doar la alinierea la nivelul sistemului de operare gazdă. Conceptul de aliniere nu se aplică NFS decât la nivelul sistemului de operare gazdă.
2. Partiția părinte Hyper-V, 3. Storage array. Se recomandă folosirea de VHD-uri cu dimensiune fixă, întrucât în cazul discurilor expandabile alinierea nu poate fi garantată și există oricum o penalitate în performanță în momentul folosirii lor.
Detecție și corecție
Există un număr mare de utilitare care permit detecția și corectarea nealinierii partițiilor. În cazul Windows cel mai ușor putem verifica offset-ul din System Information (Start > msinfo32). Dacă navigăm către Components Storage Disks, în partea de jos putem vedea partition starting offset. Pentru Linux se poate folosi utilitarul Hyper-V fdisk astfel : În cadrul hyper-vizorului de la Microsoft, acesta suportă următoarele fdisk -u -l /dev/sdX modalități de a partaja storage către o mașină virtuală: • LUN-uri cu sistem de fișiere NTFS (VHD cu dimensiune fixă, dimensiune expandabilă dinamic și diferențial). • Pass-through disk – discuri atașate partiției părinte Hyper-V și asignate direct unei mașini virtuale, • LUN-uri mapate direct prin folosirea unui inițiator iSCSI. Așadar, o mașină virtuală în Hyper-V trece prin trei nivele de storage: 1. Sistemul de fișiere gazdă,
26
nr. 18/Decembrie, 2013 | www.todaysoftmag.ro
programare
TODAY SOFTWARE MAGAZINE
Extension Points
Î
n acest articol vom descoperi punctele de extensie într-o aplicație enterprise. Bineînțeles că aceste puncte de extensie se aplică pentru orice fel de aplicație, indiferent de mărimea acestora. Cu cât o aplicație este mai mare, cu atât aceste puncte de extensie devin mai importante pentru a păstra calitatea codului ridicată, iar costul unei schimbări să fie cât mai redus. De foarte multe ori, adăugarea unui număr prea mare de puncte de extensie într-o aplicație simplă va duce doar la creșterea complexității codului, fără a aduce o valoare reală aplicației în sine. Despre over-engineering , vom completa cu mai multe detalii în rândurile următoare. De nenumărate ori am observat că echipele ajung să își definească un număr foarte mare de extension points la aplicația la care lucrează, chiar dacă acest lucru nu este necesar. Putem foarte ușor să comparăm aceste puncte de extensie cu filoanele de aur. Fiecare filon de aur este extrem de valoros, crescând valoarea minei (aplicației)), dar în același timp echipa poate să ajungă să sufere de febra aurului și să încerce să definească puncte de extensie și în locuri unde nu avem nevoie de acest lucru. Punctele de extensie îți permit să creezi aplicații software care să nu aibă legături strânse între componente sau dependințe externe. În cazul în care componentele sunt strâns legate între ele, va fi foarte dificil să înlocuim sau să modificăm o componentă din aplicație. Dacă nivelul de cuplare este ridicat, în momentul în care înlocuim o componentă din aplicația noastră cu o altă implementare, putem să generăm un efect de domino și să fie necesar să modificăm nenumărate alte componente. Există diverse moduri prin care putem să creăm puncte de extensie. De la cele mai simple, care nu necesită modificări majore ale claselor până la cele complexe care implică la rândul lor crearea diferitelor
clase ajutoare. În rândurile următoare vom prezenta câteva moduri de creare a punctelor de extensie. Cel mai simplu exemplu de creare a unui punct de extensie este ilustrat la un exercițiu de TDD Kata. În cadrul exemplului respectiv era nevoie ca valoarea unui parametru să fie validată, iar în cazul în care această valoare făcea parte dintr-un domeniu predefinit, atunci trebuia să se execute o anumită acțiune. public class Calculator { private string baseValue; ... public void Add(string value) { if (value==null || value. Count == 0 || value == „-”) { baseValue = baseValue + „-”; } ... } }
validarea într-o metodă separată. Deși acesta pare să fie un pas extrem de mic si simplu, acesta poate să fie primul pas spre crearea unui punct de extensie mult mai complex, folosind o metodă virtuală, un serviciu extern sau un modul separat care să se ocupe doar cu validarea datelor. public class Calculator { private string baseValue; ... public void Add(string value) { if (ContainsDefaultValue(value)) { baseValue = baseValue + „-”; } ... } protected virtual bool ContainsDefaultValue(string value) { return (value==null || value. Count == 0 || value == „-”); } }
În acest caz, din momentul în care începem să scriem validarea ne dăm seama Este extrem de important să apreciem că domeniul s-ar putea modifica. Pentru corect momentul creșterii complexității a fi pregătiți în fața schimbărilor care se unui punct de extensie. În momentul în pot declanșa în viitor, putem să extragem care remarcăm necesitatea unui punct de www.todaysoftmag.ro | nr. 18/Decembrie, 2013
27
programare Extension Points extensie la codul pe care l-am scris, am putea într-o primă etapă să îl extragem într-o metodă separată, după care să luăm în considerare eventualitatea creării unui punct de extensie. Bineînțeles, când începem să lucrăm la o aplicație de dimensiuni mari, știm de la bun început funcționalitatea pe care fiecare componentă trebuie să o ofere și modul prin care acestea trebuie să fie pregătite pentru a putea să fie modificate cât mai ușor. Moduri prin care putem să creăm punct de extensie sunt nenumărate și de foarte multe ori când definim un punct de extensie ne folosim de mai multe mecanism, nu doar de unul singur.
Interfețe Una sau mai multe interfețe definesc contractul. Prin intermediul acestui contract se facilitează înlocuirea unui componente cu o altă componentă fără să fie necesar să facem modificări în componentele care o foloseau.
Clase abstracte Prin intermediul claselor abstracte putem să definim punctele de extensie într-o manieră asemănătoare cu cea a interfețelor. Diferența majoră pe care o avem în momentul care folosim clase abstracte este că limităm funcționalitățile pe care o componentă le poate expune prin intermediul unei clase (în cele mai multe limbaje de programare, o clasă poate să extindă cel mult o clasă abstractă). Totodată acestea ne ajută pe partea de versionare, având posibilitatea oricând să adăugăm o funcționalitate nouă în clasa de bază fără breaking code.
Metode virtuale Ne permit definirea unui comportament default pe care un punct de extensie poate să îl aibă. Dacă este nevoie, cel care creează un punct de extensie poate să suprascrie metoda virtuală și să definească un alt comportament.
Module Un punct de extensie poate să fie reprezentat printr-un modul care să permită ușor înlocuirea altor componente , fără să fie necesară recompilarea sau reinstalarea aplicației. Putem să avem unul sau mai multe module care să fie pentru același punct de extensie al aplicației noastre. În orice moment, aplicația poate să decidă ce modul înregistrat să folosească pe baza unei
28
În cazul aplicațiilor de dimensiuni comenzi externe sau pe baza unei logici mari, pe lângă crearea de puncte de exteninterne pe care o are deja implementă. sie pentru fiecare librărie sau serviciu extern care este folosit de către aplicație, Servicii Serviciile pot să ruleze în același proces există deja o listă de puncte de extensie ca și aplicația noastră sau pot să ruleze într- despre care putem afirma că sunt canonice. un proces separat pe aceeași mașina sau pe Aceste puncte de extensie nu lipsesc din o mașină diferită. În momentul în care se aplicațiile de dimensiuni mari și este neceajunge la declararea unui astfel de punct de sar să ne gândim la ele din faza de design. extensie, de foarte multe ori suntem deja în faza când o altă echipă poate să lucreze Tracing la implementarea unui serviciu fără să fie Orice aplicație, indiferent dacă rulează nevoie să discute cu echipa de bază. sub Linux sau Windows, are nevoie de un sistem de logging. Acesta trebuie să ne permită să logăm orice fel de conținut Fișiere de configurare Deși pare ciudat, un fișier de confi- din cadrul aplicației noastre indiferent gurare în format XML sau JSON poate să de modulul în care suntem. Totodată este conțină definiția unui punct de extensie și necesar să putem controla locația unde comportamentul pe care dorim să îl avem. acest conținut se scrie. Un sistem de logare De exemplu, putem să avem mai multe ideal ar trebui să ne permită să schimbăm fișiere de configurare, unde fiecare fișier locația unde informația se scrie și să adăconține o expresie regulară pentru valida- ugăm locații noi cu modificări minime rea aceluiași șir de caractere. În funcție de asupra codului. De exemplu, să putem scrie fișierul folosit, validarea și acțiunea în sine informația atât în fișiere, cât și într-o bază de date sau într-un serviciu precum Service poate să difere. La baza punctelor de extensie stau Bus. Pe lângă aceste proprietăți, acesta tredesign patern-urile, fără de care ne este buie să ne permită să formatăm textul și să aproape imposibil să le creăm și să le îl filtrăm. Din această cauză, este bine să abordăm sistemul de tracing ca pe un un folosim. Atunci când lucrăm la o aplicație, este extension points și să fim mereu pregătiți să important a nu se forța apariția punctelor îl putem înlocui cu costuri minime. Acest de extensie. În acest mod, menținem com- punct de extensie ar trebui să ne permită să plexitatea aplicației la cel mai mic nivel controlăm formatarea textului, ascultătorii posibil. Totuși, în timpul dezvoltării va fi (să putem adăuga 1..n listeneri) și să filtrăm necesar ca de nenumărate ori să refacto- informația care se logează. rizăm aplicația pentru a putea adăuga și suporta punctele de extensie de care avem Data access nevoie. Un alt punct de extensie extrem de Din această cauză este bine să identifi- important într-o aplicație este data access căm punctele de extensie într-o fază cât mai provider. Orice aplicație are nevoie de incipientă, pentru a putea reduce cât mai o bază de date, indiferent de tipul ei – mult costurile și pentru a le putea extrage relațională/non relațională. Chiar dacă la într-un mod optim. E important ca punc- prima vedere, am putea să spunem că nu tele de extensie majore să fie identificate la va fi nevoie niciodată nevoie să înlocuim o faza de design, nerecomandândiu-se desco- bază de date cu o altă bază de date, trebuie perirea lor în momentul în care s-a început să fim conștienți că la un moment dat va implementarea acestora. trebui să facem upgrade la o nouă versiune În general, toate dependințele externe de bază de date. Acest update s-ar putea să pe care o aplicație poate să le aibă trebuie cuprindă și modificări ale provider-ului, văzute ca puncte de extensie. Din păcate care vor putea fi mult mai ușor făcute, această abordare poate să crească mult dacă punctul de extensie este pregătit cum complexitatea sistemului. Un bun exemplu trebuie. sunt operațiile I/O. Deși teoretic, putem în orice moment să schimbăm stack-ul Cache pe care îl folosim pentru a accesa discul, Pe lângă o bază de date vom avea în general acesta nu se schimbă. Totuși nevoie și de un layer de cache. Pe piață, operațiile de I/O se grupează într-o com- la ora actuală există nenumărate soluții, ponentă unică din mai multe motive, dintre dar în comparație cu o bază de date, riscare menționăm reutilizarea codului sau cul schimbării provider-ului de cache este simplificarea acestuia. destul de mare când dezvoltăm o nouă
nr. 18/Decembrie, 2013 | www.todaysoftmag.ro
TODAY SOFTWARE MAGAZINE versiune a aplicației. De aceea, de la început este necesar să ne gândim la un punct de extensie pentru sistemul de cache, care să ne permită să facem management la entități într-un mod cât mai generic, să putem controla modul în care datele expiră și mecanismul de encriptare, dacă este necesar. Dacă folosim un provider extern pentru cache atunci s-ar putea să dorim să encriptăm toate datele pe care le salvăm în cache.
Criptare Partea de criptare a datelor apare în orice aplicație care lucrează într-o formă sau alta cu date. Există nenumărate moduri prin care putem să criptăm datele folosind chei simetrice sau să algoritmi de hash. Din această cauză este bine să pornim de la premisa că acest algoritm va fi schimbat cel puțin odată. În funcție de date, s-ar putea să ne trezim că este nevoie să folosim servicii care se ocupă de criptarea datelor. În acest cazuri, punctele de extensie definite din prima fază a dezvoltării ne vor fi foarte utile.
La un moment dat, fiecare aplicație are nevoie să facă o validare a datelor de input pe care poate să le primească de la un serviciu, să le citească dintr-un fișier sau de la utilizator. Dacă știm că procesul de validare este complex sau este mai mult decât o validare trivială, atunci definirea unui punct de extensie pentru acest lucru este necesară. În faza inițială putem să avem o interfață, atribute sau o clasă generică care să se ocupe de validare, pentru ca ulterior să complicăm punctul de extensie cu noi funcționalități.
Securitate
Autentificarea, autorizarea și accesul la date și diferite funcționalități se face aproape întotdeauna controlat. Totodată, la ora actuală trebuie să fim pregătiți să suportăm diferite modalități de autentificare, de la Active Directory, la Facebook sau la cel clasic cu user și parola. Din acest motiv, avem nevoie de un puncte de extensie care să ne permită să facem autentificare și autorizarea utilizatorilor. Managementul și controlul la punctele de extensie se poate face în diferite moduri, de la diferite factory-uri până la diferite Validare Validarea datelor și a comenzilor face framework-uri de dependency extesion. parte din fiecare aplicație cu sau fără UI. Niciodată o componentă ce folosește un
punct de extensie nu ar trebui să știe detalii de implementare ale acestuia sau numele său specific. Un sistem de dependency injection sau factory ar trebui să rezolve aceste probleme. În caz contrar, nu am rezolvat nicio problemă prin crearea punctului de extensie.
Concluzie Lista cu toate punctele de extensie pe care le putem defini este extrem de lungă. Cu cât o aplicație este mai mare, cu atât componentele ar trebui să fie mai decuplate, iar punctele de extensie mai clar definite.
Radu Vunvulea
Radu.Vunvulea@iquestgroup.com Senior Software Engineer @iQuest
www.todaysoftmag.ro | nr. 18/Decembrie, 2013
29
management
Scrum în practică: un studiu de caz
S
e spune că adoptarea unei abordări agile a gestionării proiectelor software este o călătorie. Aceasta este povestea călătoriei de până acum a echipei noastre din cadrul firmei evoline. Fiind un studiu de caz, nu este o introducere în Scrum şi nici o colecție a celor mai bune practici, ci mai degrabă o prezentare a modului în care aplicăm noi Scrum.
Papp László
papp.laszlo@evoline.ro Software engineer @ Evoline
Articolul este structurat în jurul con- plus, ne-am dorit să susținem estimarea cu ceptelor uzuale din Scrum. Majoritatea date statistice, pentru că așa ar deveni mult conceptelor apar în ordinea în care am mai plauzibilă. început să lucrăm cu ele.
Context
Înainte de toate cred că este important să stabilim contextul în care Scrum fost aplicat în cazul nostru. Echipa noastră a fost solicitată să transfere o suită de aplicaţii consacrate spre tehnologii şi platforme noi. A fost clar de la început că acesta este un proiect pe termen lung. Mai mult decât atât, nu a fost preconizată o lansare oficială în primul an de dezvoltare. Am avut timp să investigăm noile tehnologii şi să implementăm un prototip. În timpul acestei faze nu am avut planning şi nu am lucrat în sprint-uri. Părți ale prototipului au fost ulterior preluate în proiectul propriu-zis.
Planning
Scopul planificării a fost să oferim un fel de predictibilitate pentru product owner. Odată ce am avut un set de cerințe bine definite aveam nevoie de o estimare: cât de mult timp ne va lua să le implementăm? Pentru că, desigur, product owner-ul aprecia o estimare doar în timp. În
30
nr. 18/Decembrie | www.todaysoftmag.ro
Product backlog
Cerințele pentru proiect au fost descrise în OneNote încă din faza de prototip. Informația este organizată într-un notebook partajat pe care OneNote îl sincronizează automat astfel ca toți utilizatorii să vadă modificările. Acest depozit central este, de asemenea, util atunci când se analizează cerințele și se împart în sarcini (sau task-uri). Stochează întrebări și răspunsuri, rezumatele meeting-urilor în care am discutat problemele deschise cu product owner-ul sau cu alte persoane familiare cu domeniul, cu aplicația existentă și cu funcționalitatea cerută. Backlog-ul este extras din OneNote. Funcționalitățile (sau feature-urile) sunt prioritizate de către product owner în funcție de cât de apreciate vor fi acestea de către client, deci pe baza beneficiilor aduse clienților. Product owner-ul este, totodată, cel care decide câte funcționalități ar trebui să intre într-o livrare. Noi facem planificarea numai pentru funcționalitățile selectate pentru o livrare. Acest lucru nu se întâmplă
TODAY SOFTWARE MAGAZINE neapărat la începutul fiecărui sprint. De reținut aici este faptul că product owner-ul nu este influențat de planificarea noastră atunci când selectează funcționalitățile. Aceasta este o abordare bazată pe valoare (susținută astăzi de exemplu de mișcarea #NoEstimates) , și nu una bazată pe cost.
Story point-uri
Unul dintre avantajele proiectelor pe termen lung, este că echipa își poate permite utilizarea story point-urilor pentru planificare. În echipa noastră story point-urile au fost introduse pornind de la următoarele ipoteze: • nu vom ști întotdeauna în avans care membru al echipei va lucra pe un anumit task. • planificarea se va face de către întreaga echipă . Având în vedere că echipa era și este eterogenă, formată atât din juniori cât și programatori cu experiență, aceste ipoteze ar fi făcut ca estimările în timp să fie foarte dificile. Estimările noastre, sau mai degrabă măsurătorile, bazate pe story point-uri sunt menite să exprime complexitatea, efortul și incertitudinea implicate în finalizarea unei sarcini, indiferent de programatorul care va lucra la sarcina respectivă. Să presupunem că două pietre, fiecare cântărind 1 kg, trebuie să fie transportate dintr-un punct A într-un punct B, aflate la 100 de metri distanță una de cealaltă, de o “echipă” formată din două persoane, un copil de 3 ani și un adult de 30 de ani. Îi va lua mult mai mult timp copilului să transporte o piatră în comparație cu timpul necesar adultului. Cu toate acestea, fiecare piatră este de 1 kg. Lucrurile stau asemănător și cu sarcinile de programare. În consecință, este foarte posibil ca durata implementării unor task-uri măsurate de către echipă ca având 1 story point să fie variabilă.
Task-uri de referință
Înainte de a începe planificarea am căzut de acord asupra unor task-uri de referință. Acestea sunt task-uri la care sunt raportate toate celelalte. Am ales niște task-uri implementate deja în prototip, despre care întreaga echipă avea o înțelegere comună și le-am asignat story point-uri din secvența de numere utilizată în planning poker. Întreaga secvență este 0, ½, 1, 2, 3, 5, 8, 13, 20, 40 și 100, dar am folosit numai valori sub 5. Valorile din secvență sunt considerate
categorii sau mărimi cuantificate.
Măsurarea task-urilor
Pentru măsurarea task-urilor inițial ne-am decis să utilizăm planning poker. Aceasta este o tehnică binecunoscută pe care nu am de gând să o prezint aici. Am început însă să ne lovim de limitările sale pe măsură ce echipa creștea: ne lua din ce în ce mai mult timp. Din fericire, am dat peste o alternativă numită Silent Grouping prezentată de Ken Power. Din descriere reieșea că este o metodă mult mai rapidă decât planning poker, așa că am decis să o încercăm și noi. Și a funcționat. Silent Grouping este descris în detaliu în [1]. Pe scurt, iată cum se aplică. În primul rând trebuie aleasă o secvență de numere pentru măsurători. De obicei aceasta este șirul lui Fibonacci, dar am preluat variația ușor modificată de la planning poker menționată deja în paragraful precedent. Fiecare număr al secvenței este reprezentat de o coloană pe un panou sau whiteboard. O zonă suplimentară numită parcare este, de asemenea, introdusă pentru task-uri la care nu se ajunge la un consimțământ. Toate task-urile care vor fi măsurate sunt scrise pe stickere. După această pregătire, urmează trei runde facilitate de un coordonator. Primele două se desfășoară în liniște, discuțiile nu sunt admise, de unde și numele. În prima rundă, fiecare membru al echipei se deplasează, unul câte unul, până la whiteboard și pune un task în coloana în care crede că își are locul. În acest fel toate task-urile vor ajunge pe whiteboard într-o coloană inițială. În a doua rundă toți membrii echipei sunt prezenți la whiteboard și pot muta task-uri din coloana în care se află în cea în care cred că se potrivesc mai bine. În cazul în care un task este mutat frecvent coordonatorul îl va parca, firește, în parcare. Noi înregistrăm mutările pe sticker: la fiecare mutare tragem o linie. Ultima rundă este rezervată pentru discuții. În cazul în care parcarea nu este goală acum este momentul pentru a diseca task-urile din aceasta și pentru a găsi coloana corespunzătoare fiecăruia. Mai trebuie menționat faptul că ne rezervăm o zi sau două pentru a identifica task-urile care urmează a fi măsurate pe baza cerințelor. Mai mult decât atât, fiecare task este prezentat pe scurt echipei în principal din punct de vedere funcțional înainte de sesiunea de planificare. Nu toate task-urile sunt distribuite la întâmplare membrilor echipei în timpul
primei runde. În cazul unor task-uri foarte specifice, cum ar fi cele legate de baza de date sau de interfaţa grafică, știm în avans cine va lucra la ele și lăsăm aceste persoane să plaseze task-urile în coloana inițială. De obicei, aceste task-uri nu-și schimbă poziția în runda a doua.
Velocity
Velocity-ul este cea mai importantă metrică pe care o folosim. Îl măsurăm continuu în scopul de a prognoza și de a colecta datele istorice necesare pentru a susține estimările noastre. Având în vedere mărimea backlogului și velocity-ul, ambele exprimate în story point-uri, putem calcula numărul de sprint-uri necesare pentru implementarea backlog-ului. Am profitat de acest lucru atunci când a fost specificată pentru prima oară o dată de lansare. L-am informat pe product owner că cel mai probabil nu vom putea livra întregul backlog pănă la data respectivă. Nu a fost prea fericit când a aflat, dar în cele din urmă am analizat împreună backlog-ul și am amânat task-urile pe care le-a considerat mai puțin importante pentru prima versiune. Alegerea velocity-ului pentru calculul de mai sus nu este întotdeauna clară după mai multe sprint-uri. Voi descrie două metode. În cazul de mai sus în care a fost specificată data lansării primei versiuni, am ales cea mai recentă valoare. Până atunci, velocity-ul crescuse continuu, astfel argumentul meu a fost: “Uite, chiar şi cu cel mai mare velocity al nostru de până acum ne va lua cel mai probabil cinci sprint-uri să terminăm backlog-ul și sunt doar trei disponibile până la data limită”. Cea de a doua metodă ia în considerare mediana valorilor
www.todaysoftmag.ro | nr. 18/Decembrie, 2013
31
management
măsurate de-a lungul sprint-urilor. În opinia mea, cea de-a doua metodă ar trebui să ia în considerare doar sprint-uri în care componența echipei a fost în mare aceeași. În cazul în care echipa crește de la 5 membri la 10, velocity-urile anterioare obținute de echipa de cinci persoane sunt foarte puțin relevante.
Feed-back
Primim feed-back cel puțin o dată la două săptămâni în meeting-urile de followup, în care facem demo la ce am lucrat recent. În acest fel putem prezenta evoluția funcționalităților pe parcursul implementării lor și avem posibilitatea de a ne adapta la modificările de cerințe sau chiar la cerințe noi intervenite. Înainte de fiecare follow-up trimitem un mail product owner-ului care conține dezvoltările recente din proiect. Acest mail descrie tot ce merită prezentat, deci joacă rolul unei agende pentru follow-up. Toată echipa participă la follow-up-uri și fiecare membru al echipei își prezintă contribuția. Principalul beneficiu al implicării întregii echipe în aceste întâlniri periodice este că dezvoltatorii și product owner-ul pot interacționa. Sunt clarificate probleme deschise, sunt transmise informații contextuale legate de funcționalități în curs de implementare iar reacțiile, feed-back-ul sunt recepționate în mod direct și la cald.
Scrum în practică: un studiu de caz pentru introducerea unui nou rol care să acopere aceste activități, rolul de feature owner. În prezent un feature owner are o privire de ansamblu asupra unui feature și este la curent cu task-urile asociate, cea ce ajută echipa în a fi auto-organizată.
Retrospectivă
Ce urmează?
A m î n c e rc at s ă ținem retrospectivele sprint-urilor în mai multe moduri. Inițial au fost cuplate cu sesiunile de planificare, cu alte cuvinte am încercat să reflectăm asupra sprint-ului trecut înainte de a face planificarea pentru următorul. Am experimentat și cu combinarea retrospectivei cu un team lunch. Aceste încercări nu s-au dovedit prea eficace. În prezent încerc să obțin subiecte pentru retrospectivă într-un mod cât mai puțin sâcâitor. Avem un spațiu dedicat pe un whiteboard unde membrii echipei pot specifica lucruri care: • ar trebui menținute, • ar trebui îmbunătățite. Subiectele care apar pe whiteboard în timpul unui sprint vor reprezenta agenda retrospectivei.
Feature ownership
După aproape un an de dezvoltare, în cadrul proiectului au fost identificate o serie de activități la nivel de feature: înțelegerea cerințelor, divizarea acestora în task-uri, identificarea task-urilor care pot fi implementate în paralel, comunicarea în exterior cu părțile implicate în proiect, pentru a numi doar câteva. Cum de-a lungul anului și echipa a crescut considerabil, mi s-a părut că a sosit momentul oportun
System Test
Avem sprint-uri dedicate system testului și fixării bug-urilor. Nu avem backlog pentru acest tip de sprint-uri, deoarece majoritatea task-urilor apar în decursul sprint-ului. Folosim un action list în loc de backlog. Acesta este un fișier Excel în care gestionăm bug-urile. Fiecare punct din action list are o prioritate care specifică ordinea în care acestea urmează să fie abordate. Atunci când este găsit un bug, înainte de a fi introdus în action list, se discută la fața locului cu programatorul căruia i-a fost alocat task-ul aferent pentru a vedea dacă bug-ul poate fi fixat rapid. Dacă se poate, atunci bug-ul nu va mai fi înregistrat. Am preluat această metodă de la Henrik
32
Kniberg, descrisă în [2]. Scopul urmărit este evitarea action list-urilor uriașe, care sunt greu de gestionat și care intimidează programatorii.
nr. 18/Decembrie, 2013 | www.todaysoftmag.ro
Cred că transparența și previzibilitatea de care am dat dovadă a dat roade. Product owner-ul pare să aibă încredere în noi, din moment ce ne-a solicitat de curând prototipuri pentru proiecte noi, complementare. În cazul în care aceste proiecte se vor materializa, ele vor reprezenta oportunități excelente de creștere în cadrul departamentului nostru. Există, desigur, mai multe aspecte care pot fi îmbunătățite. Una dintre ele este divizarea funcționalităților în task-uri mai mici, având aproximativ aceeași mărime. Până acum am reușit doar să evităm taskurile de peste 13 puncte, dar mai este până la obținerea unui backlog care să conțină doar task-uri de două sau trei story pointuri sau chiar mai mici. Cu un asemenea backlog,velocity-ul ar putea fi calculat ca și numărul de task-uri implementate întrun sprint. În scopul exersării divizării funcționalităților în task-uri foarte mici îmi propun să folosim exercițiul Elephant Carpaccio, inventat de Alistair Cockburn. Henrik Kniberg a scris un ghid de facilitare al acestui exercițiu disponibil în [3]. Follow-up-urile iau din ce în ce mai mult timp, asemănător cu sesiunile de planning poker pe care le-am avut în trecut. Suntem pe cale de a introduce follow-up-uri la nivel de feature, care să se concentreze asupra unui singur feature și la care să
TODAY SOFTWARE MAGAZINE participe doar membri din echipă care sunt implicați în dezvoltarea feature-ului respectiv. Vom organiza, de asemenea, demo-uri interne mai informale pentru a ține echipa la curent cu evoluția proiectului. Story map-ul, o tehnică descrisă de Jeff Patton în [4], ne va permite să vedem imaginea de ansamblu a proiectului. Story map-ul încearcă să mențină contextul în care task-urile trebuie implementate. Acest context reiese în urma discuțiilor cu product owner-ul și cu alte părți implicate în proiect, discuții în care devine clar de ce anumite funcționalități sunt necesare și ce capabilități acoperă acestea. În plus funcționalități mari sunt descompuse în unele mai mici, în scopul de a le capta mai bine. Tot acest context este deseori pierdut atunci când funcționalitățile sunt divizate în task-uri care sunt introduse într-un backlog „plat”. Steve Rogalsky ne oferă un ghid despre cum să creăm un story map în [5] (ilustrația este de acolo).
Referințe [1] Power, K. Using Silent Grouping to Size User Stories. (2011) http://systemagility.com/2011/05/22/ using-silent-grouping-to-size-user-stories/ [2] Kniberg, H. Scrum and XP from the Trenches. (2007) [3] Kniberg, H. Elephant Carpaccio facilitation guide. (2013) http://blog. crisp.se/2013/07/25/henrikkniberg/ elephant-carpaccio-facilitation-guide [4] Patton, J. The new user story backlog is a map. (2008) http://www.agileproductdesign.com/blog/ the_new_backlog.html [5] Rogalsky, S. How to create a User Story Map. (2012) http://www.agileproductdesign.com/blog/ the_new_backlog.html
www.todaysoftmag.ro | nr. 18/Decembrie, 2013
33
startups
startups
Ecosistemul startup-urilor din Cluj
A
Mircea Vădan mircea.vadan@gmail.com www.mirceavadan.ro www.clujstartups.com
Marius Mornea
marius.mornea@todaysoftmag.com Inginer interesat și implicat în diverse activități IT, de la dezvoltare, management, până la educație și jurnalistică în cadrul Epistemio, UTCN și TSM
34
nr. 18/Decembrie | www.todaysoftmag.ro
cum zece luni scriam un articol în TSM despre ecosistemul startup-urilor din Cluj. Pe scurt, situația din primăvară era caracterizată printr-o agitație browniană, în care toți actorii implicați: startup-erii, organizatorii de evenimente pentru startup-uri și mediul de business erau cuprinși de buzzword-ul startup și încercau diverse inițiative proprii pentru a fi în trend. În urmă cu un an sau doi, nu existau startup-uri cu vizibilitate în piață, iar până acum opt luni, startup-urile clujene erau puține și, relativ, la început, mai cunoscute fiind: Squirrly, TXT Feedback, UseTogether, Mira, KeenSkim și ShareYourCart, care au reușit să atragă atenția comunității, mai ales prin obținerea de finanțare din partea unor acceleratoare internaționale. Un efect benefic, parțial datorat și “hype”-ului din jurul acestora, a fost faptul că au scos la lumină și alte idei cu potențial de startup sau clujeni care deja încercau să pună pe picioare un startup. În mod natural, creșterea numărului startuper-ilor a generat, în comunitate, o atmosferă ușor competitivă între organizatorii de evenimente. Atât Startup Weekend, cat și Startup Live au revenit în forță cu câte o a doua ediție, mult mai mari și mai bine organizate decât precedentele. Mai ales că au beneficiat de ajutorul generației anterioare și de vizibilitatea obținută de câștigătorii primelor ediții. Existau și evenimente noi, de exemplu Open Connect, care își propunea să acopere partea de identificare și introducere în comunitate a antreprenorilor începători, interesați de startup-uri, completând astfel eforturile Open Coffee. Pe lângă evenimentele cu agendă clară și format deja consacrat, au apărut inițiative și concepte mai generice, cu scopuri diferite: de la facilitarea interacțiunii necesare construirii unei comunități, Startup
Lounge, la obiective educaționale, Tandem, sau chiar și anunțuri ce prevesteau acceleratoare/incubatoare locale: StepUP, Spherik și NextPhase. În acest context efervescent, articolul din primăvară prevestea o perioadă de sedimentare și stabilizare și sublinia nevoia unor programe de termen mediu și lung care să susțină startup-urile în zona Valley of Death, considerând prematură lansarea unor acceleratoare sau incubatoare. Previziuni realiste pentru lansarea unor astfel de programe fiind abia 2014-2015. Meritul principal al agitației din primăvară a fost încurajarea celor care cochetau cu ideea lansării unui startup s[ facă primul pas. Lansarea noilor startup-uri a dus la apariția unei noi generații care s-a coagulat în jurul evenimentelor, iar acum există un număr minim de oameni pe care putem să-l numim comunitate. De aici înainte se
TODAY SOFTWARE MAGAZINE
imprimă o distincție clară mai multor evenimente de calitate pentru startup-uri și a investitorilor (bineînțeles, atrași de oamenii din comunitate). Înainte de a reveni la contextul actual și de a analiza în detaliu ce se întâmplă în ecosistem, merită să menționăm principalele evenimente și evoluții din ultimele 6-8 luni. Există două evoluții majore: evenimentele formale și interacțiunea informală. La capitolul evenimente stăm foarte bine, având o gamă foarte largă de teme și organizatori: lansări de revistă, evenimente business mari organizate de clusterul IT (Cluj IT Innovation Days) sau Business Days, evenimente tehnice sub egida principalelor comunități profesionale din Cluj (de ex. ITCamp), evenimente organizate pentru studenți de către studenți (#defineCluj) și multe altele. Majoritatea acestor evenimente a implicat scena startupurilor clujene prin sesiuni de pitching și prezentări. Surprinde și diversitatea mare a partenerilor de dialog: mediul de business
local și internațional, universitățile, administrația locală, studenții. Numărul mare de evenimente și actori implicați confirmă statutul de buzzword și vizibilitatea mare a startup-urilor, fără a oferi garanții asupra calității ecosistemului și măsurii în care acest trend creează plus valoare. Pe de altă parte, la capitolul interacțiune informală a apărut un salt calitativ. Piața a evoluat la un nou stadiu, mai ales datorită naturii foarte dinamice a startup-urilor. Toți cei care au trecut printr-un proces de accelerare, fie au validat idei și au început să atragă clienți, fie au invalidat ideea și au pivotat sau au renunțat. Rezultatul este pozitiv în ambele cazuri, fie prin produse care produc plus valoare, fie prin oameni care au acumulat un set de experiențe și competențe și le reinvestesc într-un al doilea startup sau în mediul de business local. Mai ales în companiile IT, care au nevoie de o tranziție dinspre serviciile de outsourcing spre dezvoltarea de produse. Interesant este aici mixul între dinamism și colaborare, cerut de viteza mare de schimbare și adaptare, în contextul unor resurse foarte limitate, rezultând nevoia unui mediu colaborativ cu schimb constant de informații. Practic, în urmă cu doi ani, startup-erii se întâlneau la evenimente mari sau auzeau vag unii de alții, pe când în ultimele șase luni au apărut interacțiuni foarte strânse, ajungându-se la schimb de informații, clienți, recomandări, chiar și la reunirea eforturilor în startup-uri noi. Concluzia ultimelor șase luni este că majoritatea actorilor din mediul social au devenit interesați de fenomenul startup-urilor, iar cei din prima linie, au făcut un salt evolutiv spre validarea/ invalidarea ideilor și sedimentarea cunoștințelor pentru a ataca alte idei. Revenind la statusul actual, există trei mari grupe de actori implicați: comunitatea startup-erilor, organizatorii de evenimente dedicate acesteia și actorii din alte domenii care interacționează cu antreprenorii din startup-uri. În cele ce urmează ne vom opri asupra fiecărei categorii. Comunitatea de startup-uri, din Cluj, este într-un proces de creștere puternică. Dovada cea mai clară este numărul acestora: cel puțin 35 (față de aprox. 10 știute în primăvară). Număr care reflectă doar startup-urile ce participă activ în comunitate sau au reușit, prin numărul mare de clienți, să devină cunoscuți. Un exemplu edificator în acest sens este Moqups, un startup prezent pe lista de recomandări a lui Steve Blank, vizibil în presa internațională, dar care nu a prea intrat în contact cu comunitatea locală. Putem doar să presupunem că există mai multe inițiative de acest gen, care fie au succes, fie nu, dar nu sunt vizibile în piață. Bineînțeles că numărul mare de startup-uri înseamnă și o dinamică mai mare a pieței, iar toamna a adus cu ea și primele startup-uri închise. Era timpul să simțim și noi eșecurile pe pielea noastră, nu doar să le citim pe bloguri internaționale. Pentru cei care se plâng de lipsa de bani, momentul adevărului: nu lipsa finanțării a stat în calea reușitei acestor startup-uri. Ce rămâne din aceste eșecuri e experiența celor trecuți prin ele, experiență care va fi un sol mănos pentru următoarele valuri de startup-uri. O a treia categorie de startup-uri ar fi cele care au pivotat. Sunt mai puține astfel de exemple, dar sunt reprezentative pentru reziliența și adaptabilitatea la dinamica constantă, atât ai factorilor interni (echipa, finanțarea, viteza de execuție), cât și ai celor externi (adopția în piață, nevoile utilizatorilor, concurența), www.todaysoftmag.ro | nr. 18/Decembrie, 2013
35
startups Ecosistemul startup-urilor din Cluj necesare succesului. Bilanțul aproximativ din acest moment este: 20 startup-uri cu produs lansat pe piață, 16 care își vor lansa produsul în următoarele luni, iar 6 au fost închise. Dintre acestea, 5 au participat într-un accelerator, două au găsit investitori, iar restul sunt bootstrapped sau în căutare de investitori. De menționat că există startupuri care au echipa formată din membri ai comunității clujene (în special partea de development) în combinație cu oameni din alte orașe din România sau alte țări (vestul Europei și SUA). Evenimentele dedicate startup-urilor au suferit și ele transformări. După o pauză de mai multe luni, Open Coffee renaște sub o altă formă, mai structurat și mai apropiat de nevoile comunității. Cluj Hub nu a mai organizat Startup Lounge în această toamnă, dar va încheia în curând prima ediție a programului Step Up. Cluj Cowork e din ce în ce mai deschis startup-urilor și evenimentelor dedicate (mărturie fiind organizarea primei ediții Startup Pirates din România). Spherik Accelerator se lansează în doar câteva zile și are planificate deja câteva workshop-uri. Tot în decembrie se va deschide și Chaos Computer Club care se poziționează ca un spațiu pentru IT-isti și startup-eri. Iar Startup Weekend și Startup Live sunt deja binecunoscute și își anunță edițiile de primăvară. Pentru cei familiari cu ecosistemul, se remarcă lipsa Open Connect. Era de așteptat încă din primăvară, ca în procesul de sedimentare și maturizare al inițiativelor, unele să se piardă, atât ca focus, cât și ca relevanță. În momentul de față comunitatea începe să acopere implicit unele nevoi, cum ar fi atragerea altor startup-eri, iar evenimentele mari oferă suficiente ocazii de pitching (Business Days, ITDays, etc), rolul evenimentelor de nivel introductiv fiind mai degrabă unul de facilitare al comunicării între membrii existenți si cei noi. Înainte de a trece la a treia mare categorie de actori, merită menționat că există și programe de nivel regional, național și internațional care influențează comunitatea clujeană. La nivel regional apare interes din partea unor programe de dimensiuni mari, de exemplu Cluj Youth Capital 2015, care vrea să dedice un program startup-urilor. Există și programe naționale care au ales să facă prezentări la Cluj, de exemplu RICAP și Google Export, programe ce ajută proiectele de cercetare să facă tranziția spre comercializare, în parteneriat cu companii americane. Startup-urile pornite din zona
36
de cercetare fiind și unul din principalele subiecte de discuții la conferințele de planificare strategică a investițiilor din fonduri europene, dedicate cercetării, în următorul exercițiu financiar 2014-2020. Dar pe lângă aceste programe formale, startup-erii clujeni profită și de evenimentele din regiune, participând la How to Web, ediții Startup Weekend și Startup Live din alte orașe, și chiar la evenimente internaționale, gen Pioneers Festival. A treia parte componentă a ecosistemului o reprezintă partenerii care încep să interacționeze cu startup-urile. Cei mai activi, în această categorie, sunt partenerii din mediul educațional, mai exact universitățile. Acestea au răspuns prompt diferitelor oportunități de implicare, pornind de la aderarea la cluster, până la prezența la evenimente, participarea la discuții și chiar construirea și susținerea unor echipe de studenți, care au avut un real succes la competiții internaționale precum Imagine Cup, Digilent, și au continuat proiectele sub forma unor startup-uri. O discuție interesată a avut loc la #defineCluj (eveniment orientat spre studenții tehnici doritori să înceapă un startup), unde s-a abordat subiectul implicării universităților (UTCN, UBB) în educația antreprenorială. Practic o nevoie, din perspectiva startup-urilor, este găsirea de angajați sau co-fondatori, și neputând concura cu salariile firmelor de IT, sunt obligați să se orienteze spre studenți doritori să încerce o inițiativă, înainte de a fi sub presiunea angajării. Pe de altă parte, există proiecte de cercetare care pot deveni startup-uri cu inovații solide, dar în lipsa experienței antreprenoriale în echipă, rămân doar cu obiectivele de cercetare atinse, dar cu potențialul de business nefructificat. O soluție propusă a fost instituirea unei catedre private, în colaborare cu Internațional Business Club Cluj, care să ofere studenților ocazia aprofundării domeniului antreprenorial cu suportul unor oameni de business de succes din mediul local sau internațional. Sigur și firmele de IT urmăresc ce se întâmplă pe scena startup-urilor, sau ar trebui s-o facă din două motive. În primul rând, marea majoritate a startup-urilor vor eșua și, fondatorii acestora (în cazul în care nu vor avea alte inițiative), își vor caută un job. În al doilea rând, pe termen lung, este foarte probabil ca industria de outsourcing să se orienteze spre dezvoltarea și marketizarea de produse software proprii și atunci vor fi la mare căutare product
nr. 18/Decembrie, 2013 | www.todaysoftmag.ro
manager-ii, adică acei oameni care vor ști cum să construiască un produs, să facă customer development, să îl lanseze și să câștige tracțiune. Iar aceia care vor fi căliți deja în toate aceste domenii sunt startuperii. O confirmare a acestui interes vine din deschiderea cluster-ului Cluj IT, în calitate de reprezentat al intereselor companiilor IT, spre colaborări cu startup-urile clujene. Membrii clusterului sunt mai mereu prezenți la evenimente, de toate dimensiunile, atât formal, prin proiecte și strategii, cât și informal, prin implicarea individuală în diverse programe de educație antreprenorială. Dintre aceste programe menționăm Tandem, organizat de GRASP și workshopurile organizate de JCI în colaborare cu oamenii de business din Cluj. Aceștia din urmă jucând destul de des rolul de speakeri sau mentori ( de exemplu Philipp Kandal și Călin Văduva). Posibilitățile de colaborare fiind multiple, de la schimbul de informații, până la inițiative de HR sau identificarea oportunităților de parteneriat: finanțări, co-fondatori, spin-offs, intraprenoriat sau chiar consum de servicii/produse create de startup-uri. În final aș menționa administrația locală, care a început să participe la evenimente și să gestioneze programe cu vizibilitate mare. Am mai pomenit Cluj Youth Capital 2015, dar să nu uităm gradul foarte mare de accesare al finanțărilor pe SRL-D, cel mai mare din țară cu un total de 1267 din 10220 (locurile doi si trei 1091, 669, fiind ocupate de București și Timiș). Deși lipsesc proiectele de colaborare concretă, există vizibilitate și deschidere spre dialog. Încă lipsesc multe elemente pentru a avea un ecosistem cu adevărat călit. În primul rând nu există povești de succes, obținerea finanțărilor seed (10-50 de mii de euro) care pot fi considerate doar un pas spre succes. Nu s-a ajuns încă la finanțare de tip series A (200-500 de mii de euro) și probabil va mai dura până să vedem una la un startup din Cluj, deoarece un startup în această situație necesită tracțiune și product-market fit. Nici la partea de clienți și cashflow sănătos nu avem încă startup-uri care să se remarce. Poate Moqups e excepția care generează venituri și este recunoscut în piață. În materie de evenimente și programe suntem pe drumul cel bun, dar mai e nevoie de timp ca aceste inițiative să câștige constanță și să continue să crească nivelul calitativ al conținutului. După cum menționam la început, piața încă nu este pregătită să alimenteze constant
TODAY SOFTWARE MAGAZINE acceleratoare locale, fie prin startup-urile pornite în Cluj, fie prin atragerea altor startup-uri din regiune. Un model care nu a apărut la noi este cel implementat de bulgari: deși nu aveau o comunitate puternică locală, au înființat două acceleratoare care au trezit interesul masiv al comunităților din regiune, generând un ecosistem activ. Anul trecut exista o mișcare browniană în zona de generare a startup-urilor și lipseau activități în zona “valley of death” (perioada dintre început și monetizare/ investiție). Acum se pare că cei care vor să înceapă un startup află ușor la cine trebuie să apeleze pentru îndrumare și intră astfel în comunitate. Activitățile de suport din “valley of death” s-au înmulțit, existând o continuă agitație pe acest palier, atât prin evenimente, cât și prin activități ad-hoc, motiv pentru care ar trebui încurajate în continuare. Ne încadrăm încă în previziunile din primăvară, cu o comunitate locală în plin avânt, o simbioză bună cu activitățile din București, clujenii având acces la ceea ce se întâmplă în capitală: How To Web, TechHub, VentureConnect, și deschidere către piețele internaționale, existând contacte cu investitori din Germania, Anglia, Israel și SUA, care vor duce la apariția unor
colaborări în următoarele luni. La nivel de comunitate agitația trebuie să se mai cimenteze, iar evenimentele și programele să crească calitativ, reflectând astfel experiența acumulată a comunității (ca și consecință benefică va fi apariția/ aducerea factorilor investiționali atât internaționali, cât și locali). Un alt aspect care merită îmbunătățit este folosirea mai inteligentă a resurselor existente local. Deși a reușit să capteze atenția universităților, mediului de afaceri și chiar a administrației, comunitatea de startup-uri încă nu a reușit să capitalizeze pe acest interes. Practic avem local un mix între cercetare, educație, resurse financiare și execuție, în zona tech, care ar putea ataca teme și proiecte mult mai ambițioase și inovative, dar încă nu avem experiența necesară să le legăm întrun tot funcțional. Am încredere că o dată trecuți de primele încercări (eșecuri/pivotări/exit-uri), startuperii clujeni vor reuși să se orienteze spre astfel de proiecte cu succes.
www.todaysoftmag.ro | nr. 18/Decembrie, 2013
37
startups
SpotTune
U
n bun profesor mi-a spus o dată: “Dacă trebuie să faci ceva de mai mult de două ori, fă un program care să facă asta pentru tine!” Nu am fost convins în totalitate de acest adevăr la momentul respectiv, dar pătruzând tot mai mult în era tehnologiei am început să fiu din ce în ce mai convins de acest adevăr. Adevărul pe care l-am constatat este că noi „oamenii” stăm foarte prost la capitolul task-uri repetitive. Și așa și trebuie să fie – să lăsam tehnologia să se ocupe de ele și noi să ne bucuram mai mult de lucrurile cu adevărat importante. SpotTune a pornit de la o idee simplă că după un an de zile ai sacrificat 2-3 filme bune pentru a-ți porni care mi-a venit în timpul facultății. După sau opri WiFi-ul de la telefon, nu? Te-ai trezit vreodată în timpul unei opere, în mijlocul celei cum bine știți, în perioada aceea toți suntem persoane foarte ocupate – și voiam mai frumoase arii din acea operă, cu telefonul din buzunar dornic să fac ceva în privința asta. Mi-am lasat să acompanieze orchestra? SpotTune va putea oferi utilizatorului imaginația să zboare și așa a apărut, ei și opțiunea de a-și pune pe silențios telefonul și / sau a trimite bine, ideea – SpotTune. Aveam nevoie de o un mesaj automat oricărei persoane care încearcă să te contacteze aplicație cu adevărat inteligentă care să știe într-un interval prestabilit de timp. SpotTune îți va oferi posibilitatea să setezi un astfel de proces să facă lucruri personalizate pentru mine. Voiam să îi pot trimite un mesaj automat automat cu doar câteva tap-uri. Singurul scop este acela de a face prietenei când ieșeam de la facultate pen- viața mai ușoară utilizatorului. Pe lângă aceste opțiuni, aplicația va înregistra și timpul pe care tru a ne vedea, sau mamei pentru a pregati masa. Voiam să am telefonul pus pe silent utilizatorul l-a salvat, automatizându-și procesele. Fiecărei acțiuni automat în toate locurile pe care le frecven- îi va fi asociat un anumit număr de secunde care va fi adunat și tam și cereau asta – conferințe, cursuri, biserică. Voiam să îmi stocat local. Feed-back-ul acesta e un element important care nu anunț prietenii prin mesaje/mail-uri când ajungeam în anumite trebuie neglijat. Următorii pași în dezvoltarea aplicației este de a crea aplicația locații. Voiam să mi se pornească Wifi automat când ajungeam acasă, pentru că aveam un router – și să mi se oprească conexiunea web – pentru a permite utilizatorului de a-și introduce aceste evenimente de pe aplicația web, ca mai pe urmă să fie sincronizate de date. Poate deja vă regăsiți într-una din aceste situații. Scenariile de mai sus sunt numai câteva din multele ‘mini- cu telefonul. SpotTune este menit pentru a face viata mai buna utilizatoritask’-uri care, fără să ne dăm seama, ne mănâncă într-un mod subtil din timp. De aici și ideea SpotTune – tune your spot. Ideea lor. Task-urile pe care știe să le facă pot fi combinate – posibilitățile aplicației este de a seta diferite evenimente/acțiuni care să se sunt variate. De aceea, pe website-ul aplicației www.spot-tune.com întâmple în diferite locații și/sau la anumite intervale de timp. se pot aduce orice sugestii de task-uri care ție, ca utilizator ți-ar face viața mai bună. Lăsați-vă imaginația să zboare! Simplu și eficient. SpotTune încearcă să automatizeze aceste procese șisă introducă fluența în user experience-ul oferit de noile telefoane mobile. Principiul e simplu: setezi o dată, te bucuri de mai multe ori. Un exemplu simplu. În medie, un posesor de ‘smart-phone’ (de orice fel) își activează sau dezactivează WiFi-ul sau traficul de date de minim patru ori pe zi din diverse motive. Procesul e unul relativ scurt , dar care după foarte puține repetări devine laborios: deblochează ecranul, trage în jos de bara de notificări, apasă pe butonul de WiFi, așteaptă. Durata procesului e de aproximativ 15 secunde, presupunând că nimic nu intervine. După un calcul simplu vedem că omul nostru cu ‘telefon deștept’ cheltuie aproximativ 7 minute pe săptămână ceea ce echivalează cu aproximativ 6 ore pe an de pornit și oprit WiFi-ul telefonului. Cam ciudat să știi
38
nr. 18/Decembrie, 2013 | www.todaysoftmag.ro
George Platon
George.Platon@catalysts.cc Software developer @ Catalyst
startups
TODAY SOFTWARE MAGAZINE
CTF365
Î
n Octombrie 2011, am început proiectul HackaServer, o platformă de testare a securității web folosind puterea crowdsourcing-ului. În timp ce dezvoltăm aplicația HaS, am fost nevoiți să căutăm un mod prin care să pregătim un spin-off ( produs secundar, nou, derivat) în caz că lucrurile nu decurgeau așa cum am planuit. Trebuie să menționez că proiectul HaS nu este încă deschis pentru afaceri din cauza unui simplu motiv: Suntem o echipă foarte mică.
O scurta recapitulare:
Învățarea securității informaționale prin gamificare nu este un concept nou. De fapt, este chiar destul de vechi, de la începutul internetului. Se numeste CTFCapture the Flag. Renumita conferință pentru securitate informațională DefCon, are una dintre primele competiții CTF. Dacă doriți un portal de CTF-uri puteți verifica CTF Time pentru a vedea unde are loc o competiție CTF (în industria securității informației). Astfel de competiții sunt organizate de Facultăți de Informatică, companii internaționale sau chiar agenții guvernamentale.
De ce CTF?
Cel mai bun mod de a învăța este acela de a învăța prin practică (hands-on), iar gamificarea excelează la acest capitol, având rezultate foarte bune când vine vorba de îmbunătățirea abilităților/competențelor, educație și pregătire (antrenament). Învățarea securității informaționale prin gamificare ar spori implicarea studenților/angajaților, ar crește capacitatea de reținere a informațiilor și ar accelera procesul de învățare. Pe lângă aceste avantaje, pentru student și/sau angajați este ceva distractiv, provocator și practic. Competițiile CTF din ziua de azi sunt foarte răspândite și diferite prin concept și design. Pe lângă frumusețea și atmosfera din jurul lor, de apreciat sunt dedicația și efortul echipelor participante la fiecare competiție CTF , dar mai ales efortul celor care concep sistemele și aplicațiile respective. Cu toate acestea, competițiile au câteva probleme, dar majore care țin de modul în care sunt concepute și organizate: • Nu durează foarte mult- În ziua de
azi, competitiile CTF durează între 24h și câteva zile, săptămâni cel mult. • Răsfirate și izolate- Nu se organizează întotdeauna pe internet și trebuie să fii prezent în acea cameră/clădire. • Împrăștiate -Se întâmplă peste tot în lume dar, fiind împrăștiate și scurte, implicit sunt și mici. • Nu au nici o valoare/Nu contează - Deoarece nu durează foarte mult și sunt izolate, departamentele de Resurse Umane nu cer experiență în asemenea acțiuni când angajează în domeniul securității informației. • Competiții bazate pe un scenariu cu foarte multe restricții și reguli. • Nu sunt scenarii bazate pe realitate.
O altă competiție CTF ?
Noi, echipa din spatele CTF365, am decis că este timpul pentru a schimba modul în care CTF este conceput și organizat printr-o nouă abordare propulsând jocul la scară mondială. Scopul nostru este de a crea o replică reală a internetului, unde profesioniști în domeniul securiății informaționale, studenți si entuziaști ai domeniului să aibă posibilitatea de a se antrena continuu pe servere și infrastructuri adevărate create de profesioniști, și nu pe niște servere vulnerabile. Practic construirea unui internet în Internet unde user-ii pot ,,hăcui,, în voie pe orcine oricând și oricât fără restricțiile internetului real.
Pentru cine este acest proiect?
• Red & Blue Teams, specialiști CERT/CSIRT – Specialiști în securitate ofensivă și defensivă își pot îmbunătăți abilitățile cu ajutorul unor scenarii bazate pe realitate. • CTOs, Administratori de Sistem
– Pot experimenta noi configurații de server și pot vedea dacă acestea pot fi vulnerabile. • Companii de Securitate – Pot testa WAFs (Web Application Fiewall) sau orice software în dezvoltare, precum și echipamente hardware de securitate • C o m p a n i i l e d e F o r m a r e i n Domeniul Securitatii – Pot îmbunătăți capacitățile studenților prin testarea lor în situații reale/bazate pe realitate. • Re cr utori – C e r t i f i c ate l e d e Securitate sunt foarte importante, dar performanțele candidaților și realizările acestora ca profesioniști în domeniul securității contează cel mai mult într-un interviu. • Organizații de securitate, precum OWASP – promovează informații legate de securitatea informațională printre web developers . • C o n f e r i n t e l e I N F O S E C – Participanții vor cu adevarat să se distreze și mai mult, vor ca realizările lor să nu fie în zadar.
Cum e posibil să creezi un internet in Internet?
Ne-am întrebat și noi același lucru, dar se pare că am reușit să ne descurcăm până acum. Deși mai sunt multe lucruri de făcut, Iaas-ul (Infrastructure as a Service) nostru este destul de flexibil și capabil pentru a imita lumea reală. Flexibilitatea platformei CTF365 permite utilizatorilor să-și conecteze propria infrastructură, fie că este cloud based, privată sau stocată pe servere dedicate. Am demonstrat și în trecut că este posibil să testezi serverele din cloud . Mai mult de atât, am avut un Metasploitable în cloud. Puteți citi acest articol chiar aici pe Rapid7Community.
www.todaysoftmag.ro | nr. 18/Decembrie, 2013
39
startups CTF365 Companiile și organizatiile pot obține propria lor infrastructură CTF în câteva minute și toate obiectivele atinse de utilizatorii lor pot fi adăugate la performanțele generale ale angajaților.
Unde suntem acum?
În acest moment, CTF365 este în alfa testing, ceea ce înseamnă că rulează cu un număr mic de echipe (peste ~100 de echipe) și de asemenea există peste 11000 de utilizatori și peste 900 de echipe din toată lumea care sunt gata de joc. Fiind în stagiul alfa înseamnă că suntem încă în faza de dezvoltare, iar cei care au primit acces la stagiul alfa și la viitorul stagiu beta pot experimenta și vedea cum va arăta versiunea versiunea finală . Mai târziu, când vom începe a îmbunătăți capacitatea hardware vom fi gata de a lasa pe toată lumea să participe. În etapele alfa și beta majoritatea utilizatorilor/jucătorilor sunt experți în securitate de la diferite companii de testare a securitatii, companii de training pe securitate . Printre recomandări, acceptăm de asemenea și experți Infosec, precum și instructori/profesori Infosec care solicităacces la faza alfa. În cazul în care doriți accesul mai devreme, vă rugam să ne informați și vom încerca să vă oferim acest lucru.
Concluzii
“Securitatea nu va fi niciodata perfectă, dar poate tinde către perfecțiune”. Potrivit sursei Frost&Sullivan, se prezice că ocuparea locurilor de muncă în cadrul experților în securitatea informației va crește cu 332,000, încheind anul cu un număr de 3.2 milioane de experți în securitate și ajungând în anul 2017 la un număr
40
de 5 milioane. Pe lângă profesioniști cu diplomă, există peste 25 milioane de utilizatori ai forum-urilor de administrare/ securitate/hacking. Așa cum am mai spus înainte într-un interviu, internetul se dezvoltă mult mai repede decât capacitatea lumii de a oferi administratori de sistem bine pregătiți, precum și programatori profesioniști bine pregătiți în domeniul securității. Există un decalaj tot mai mare între aceste două lucruri, iar cineva trebuie să-l rezolve sau cel puțin să încerce. CTF365 nu este un joc. Este o platformă de formare pentru experți în securitate și pentru industria TIC, care implementează concepte CTF și influențează mecanicile gamificării pentru a îmbunătăți rata de retenție și a accelera procesul de învățare/ antrenare. CTF365 este un internet în interiorul Internetului unde utilizatorii își vor crea propriile servere și unde vor experimenta servicii ale vieții reale, cum ar fi platformele de microblogging precum Twitter, rețele de socializare precum Facebook sau Google+, servicii de e-mail precum Gmail și Yahoo, pentru ca în final, ei să poată face orice doresc cu aceste servicii. Spre exemplu, în lumea reală există GoDaddy când vine vorba de înregistrarea domeniului, nu? Noi avem GoGrandpa.365 unde utilizatorii își vor putea înregistra propriile domain.ctf sau domain.365. Utilizatorii pot învăța noi tehnici ofensive sau pot învăța de asemenea și tehnici defensive. Dezvoltatorii Web își pot antrena abilitățile de a crea aplicații stabile și pot învăța cum să îți apere aplicațiile împotriva atacurilor cibernetice. Experților în securitate, studenților în acest domeniu, dar și dezvoltatorilor web și administratorilor de sistem, CTF365 le
nr. 18/Decembrie, 2013 | www.todaysoftmag.ro
oferă oricând soluții eficiente. Apelând la comparații sugestive- CTF365 este ca un spațiu imens de antrenament al armatei sau ca un simulator foarte scump unde piloții sunt puși în mijlocul unor situații neașteptate/critice, fără a fi vătămați.
Marius Corîci
marius@ctf365.com Co-fondator @ CTF365
management
TODAY SOFTWARE MAGAZINE
Cum să menţii succesul unui joc mai mult de doi ani de la lansare?
B
ubble Witch Saga are 26 de luni de la lansarea iniţială pe platforma Facebook şi 16 luni de la intrarea pe piaţa de mobile. Cu toate acestea, jocul reuşește să se menţină în TOP 10 jocuri pe platforma socială Facebook,iar pe mobile este cel mai popular joc din categoria bubble shooters, bucurându-se în continuare de cele mai bune review-uri şi comentarii.
Care este secretul succesului acestui joc marca King, în contextul în care industria de gaming este într-o continuă creştere, competiţia devenind din ce în ce mai puternică, iar jocuri cu mecanici, design şi modele de business noi apar în mod constant? Nu cred că se poate vorbi despre o reţetă care să garanteze succesul, dar uitându-ne la alte aplicaţii (indiferent de specificul lor), putem cel puţin învăţa din greşelile altora, fiind atenţi mai ales la modul în care au reuşit să treacă peste piedicile inerente în dezvoltarea de software. Încă dinainte de lansare, se ştia că Bubble Witch Saga va fi un joc cu o mecanică deja clasică. De aceea, am încercat să aducem un element de noutate, şi anume povestea. Călatoria (saga) jucătorului a avut un scop multiplu: diferenţierea de alte jocuri de acelaşi gen, dar şi o retenţie semnificativ mai bună. Această călătorie se traduce pentru jucător atât printr-o creştere a skill-urilor în joc, prin mărirea graduală a dificultăţii nivelurilor sau prin introducerea de blockers (care nu sunt imposibil de depăşit), cât şi prin interacţiunea cu alţi jucători – prietenii de pe Facebook. Partea de interacţiune socială a fost unul dintre factorii care a menţinut Bubble Witch Saga mai bine de doi ani în topuri. Prietenii se ajută în joc: îşi trimit unul altuia elemente ajutătoare precum vieţile (sau energie) sau booster-e pentru a trece peste anumite bariere. Elementul
de competiţie este şi el prezent, iar unii jucători pot fi motivaţi de obţinerea unui scor mai bun pe un anumit nivel sau de a recupera poziţia de lider atunci când sunt depăşiţi de prieteni. În cazul Bubble Witch Saga, a fost foarte importantă atenţia acordată jucătorilor şi mai ales acţiunilor lor din joc. Niciun joc nu este perfect şi bug-uri vor continua să apară, iar cum menţionam la început, opţiunile jucătorilor sunt din ce în ce mai multe. Dar prin păstrarea unui dialog constant cu utilizatorii, Bubble Witch Saga s-a menţinut sus în topuri. Acest dialog a fost purtat prin mai multe canale, precum grupurile de fani de pe pagina de Facebook sau rating-urile şi comentariile din AppStore şi Google Play. Însă cel mai important aspect al acestui dialog a fost existenţa unui sistem de tracking bine pus la punct. Foarte mulţi jucători nu sunt dispuşi să ofere feed-back în mod direct şi pot renunţa la aplicaţie într-o secundă. Bubble Witch Saga a reuşit să oprească foarte multe dintre aceste potenţiale puncte de renunţare la joc tocmai prin acest sistem de tracking. De exemplu, recent am observat că unul dintre nivelurile din joc avea o rată foarte mare de abandon: jucătorii aveau foarte multe încercări la acel nivel, dar cei care reuşeau să treacă obţineau cu greu scorul necesar. Soluţia a fost să găsim o nouă versiune pentru nivelul respectiv, una nu neaparat mai facilă, dar care a pus mai mult accent pe
folosirea skill-urilor deja dobândite de jucă tor pe parcursul întregii călătorii în joc. O altă modalitate prin care Bubble Witch Saga se menţine în continuare pe o poziţie puternică este adaugarea în mod constant de conţinut nou. Aici ne referim atât la niveluri noi (la continuarea parcursului jucătorului), cât şi la grafică. De exemplu, pentru Halloween, Bubble Witch Saga a avut o temă nouă sezonieră, în care pe harta de progresie au fost introduse elemente specifice acestui eveniment: una din bilele din joc a fost transformată în dovleac, unul din sunetele din joc a fost schimbat într-un râs de fantomă, schelete animate apăreau din loc în loc, iar pe cer zburau lilieci în loc de şoimi. Şi de Crăciun jocul va fi modificat cu câteva elemente specifice, dar rămâne să descoperiţi voi care vor fi acestea. De asemenea, este foarte important să se facă o diferenţiere a jucătorilor în funcţie de punctul în care se află pe parcursul călătoriei lor în Bubble Witch Saga. Pe de o parte, există jucători care ajung aproape de finalul jocului, iar ei vor niveluri noi, vor provocări din ce în ce mai dificile. Pe de altă parte, sunt jucători care se află la începutul jocului şi care trebuie ajutaţi să ajungă cât mai departe în joc. Pentru aceştia din urmă, de exemplu, un tutorial interactiv care să-i ajute să înţeleagă fără probleme care este scopul jocului este foarte util. Feature-urile dezvoltate pentru Bubble
www.todaysoftmag.ro | nr. 18/Decembrie, 2013
41
management Cum să menţii succesul unui joc mai mult de doi ani de la lansare? Witch Saga s-au axat în primul rând pe jucători, încercând să le ofere o experienţă cât mai plăcută. Una dintre deciziile strategice ale companiei King a fost renunţarea la ad-uri în joc, tocmai pentru ca utilizatorii să se bucure de povestea jocului fără întreruperi. Această continuitate a experienţei a fost urmărită şi asigurată şi prin sincronizarea progresului de pe aplicaţia de mobile cu progresul din varianta de Facebook. Bubble Witch Saga a fost primul joc cu acest feature şi reprezintă în continuare un exemplu dat de Facebook (despre detaliile tehnice şi problemele întâmpinate în implementare v-a povestit colegul meu, Cristi, într-unul dintre numerele anterioare). Un efect secundar pozitiv al acestei strategii este viralitatea. Jucătorul care revine mai des şi se joacă mai mult este mai dispus să recomande jocul prietenilor săi, atât prin word of mouth, cât şi prin mouse to mouse. Jocul trebuie să îi ofere şi această posibilitate şi să faciliteze postarea pe Facebook, fără însă a forţa acest lucru şi fără ca jucătorul să nu fie conştient. În acelaşi spirit, în momentul în care vrem să dezvoltăm un nou feature pentru Bubble Witch Saga, prima întrebare pe care echipa de dezvoltare o pune este “de ce?” sau, mai degrabă, “ce va câştiga jucătorul din acest feature?” Odată găsit răspunsul la această întrebare, implementarea rămâne o simplă formalitate. Aici intervine un alt aspect prin care Bubble Witch Saga a reuşit să se menţină drept unul dintre cele mai populare jocuri pe Facebook: o echipă extraordinară care lucrează la acest proiect. Echipa Bubble Witch Saga este destul de mică, fiind formată din zece persoane:
42
developeri, QA, artist, designer şi producer, iar acest lucru reprezintă un avantaj. Fiecare membru al echipei este responsabil de succesul jocului, opinia fiecăruia este ascultată, iar deciziile privind ideile puse în practică în joc sunt luate de comun acord şi pot veni de la oricine din cadrul echipei. Mediul de lucru este tot timpul unul plăcut, relaxat, pentru că întreaga echipă ştie foarte bine ce are de făcut, iar deadline-urile sunt fixate tot de membrii săi. Mai mult, în momentul în care apare o eroare, este foarte important ca toată echipa să înveţe din greşeli, să comunice transparent şi să meargă mai departe. Cât timp va mai rezista Bubble Witch Saga în această piaţă aglomerată şi în continuă creştere? Nu ştim, dar cu siguranţă va fi în continuare sus atâta timp cât vom continua să inovăm, să ascultăm şi să respectăm jucătorii.
nr. 18/Decembrie, 2013 | www.todaysoftmag.ro
George Abramovici Business Manager @ King România
TODAY SOFTWARE MAGAZINE programare
programare
Păstrarea angajaţilor talentaţi, o temă recurentă în IT
D
omeniul IT s-a confruntat cu veritabile crize de angajare a programatorilor. Acest fenomen poate fi interpretat ca un paradox întrucât, cel puţin la nivelul opiniei publice (mai mult sau mai puţin avizată), piaţa IT este văzută ca fiind una încă foarte primitoare, nefiind saturată de angajaţi şi absorbind în continuare programatori bine pregătiţi care să asigure o infrastructură solidă acestui domeniu mereu expansiv şi din ce în ce mai ramificat. Totuşi, la fel ca în politică, s-a înregistrat şi în domeniul IT un proces de migrare sau, într-o notă peiorativă, un traseism al programatorilor generat de boom-ul pieţei IT. Acest fenomen migraţionist a apărut în perioada 2006-2008, odată cu venirea în România a unor mari companii precum IBM, Apple, Sonny-Erickson sau Alcatel. Dacă în acea perioadă piaţa era plină de programatori, în prezent sectorul IT este supranumit sectorul cu rată de şomaj zero. Datorită acestei instabilităţi provocate de migrarea sau incertitudinea poziţiei pe termen lung a angajaţilor în firmă, s-au ridicat întrebările referitoare la retenţia programatorilor. Ce trebuie să facă managerul companiei şi departamentul HR pentru a reţine angajaţii valoroşi? Cum trebuie să acţioneze şi ce trebuie să le ofere pentru a-i stimula să crească odată cu compania şi, astfel, să rămână angajaţi stabili? Într-adevăr, pentru a răspunde la aceste întrebări este nevoie de anumite statistici şi experienţe acumulate, însă acestea vor funcţiona sau nu, când vor fi aplicate spre a oferi un răspuns mulţumitor. Altfel spus, angajatorul trebuie să ia pulsul companiei (să îşi cunoască angajaţii şi să fie familiarizat cu nevoile şi dificultăţile pe care le întâmpină aceştia) şi să îşi adapteze permanent cunoştinţele în domeniu şi cele despre piaţa IT în care se desfăşoară. Cu toţii ştim că în orice sector de activitate principalul criteriu de atragere şi păstrare a angajaţilor se referă la factorul financiar. La fel se întâmplă şi în sectorul IT, unde pachetul salarial are o însemnătate foarte ridicată. Este foarte interesant, însă, faptul că, spre deosebire de alte domenii, intervine un „dar”. Relativismul banilor este dat de o serie de factori care afirmă că pentru un programator nu primează întotdeauna categoric banii. Da, aceştia sunt foarte importanţi (unde nu sunt?) dar, în viziunea unui programator pasionat, criteriul material nu se impune aproape niciodată în faţa posibilităţii de a lucra cu tehnologii inovatoare, de ultimă generaţie. De aceea, se poate spune, fără rezerve, că asigurarea unor tehnologii actualizate la locul de muncă reprezintă o sursă sigură de retenţie a angajaţilor şi, în oglindă, dezinteresul pentru înlocuirea tehnologiei învechite duce la plecări masive. Dacă privim logic
acest context, putem deduce clar următorul lucru: chiar dacă angajatul nu accentuează la început atât de mult aspectul financiar, ci îşi focalizează atenţia spre tehnologiile noi, tot el este cel care câştigă; nu este vorba de avantaje imediate ci de câştiguri profesionale pe termen lung, întrucât dezvoltarea unor aptitudini conforme cu noile tehnologii conduce la sporirea experienţei, atingerea unui nivel superior de expertiză şi, în timp, la creşterea gradată şi sigură a salariului. Pentru companiile care vor să depăşească barierele dezvoltării determinate de lipsa forţei de muncă este necesar să facă mai mult decât atât. Aşa cum au obiective ambiţioase de business, trebuie să aibă îndrăzneala de a investi mai mult în resursele umane. Exemplul Google este binecunoscut şi toată lumea acceptă uşor că acolo investiţia în oamenii a adus rezultate remarcabile. Cine oare dintre IT-işti nu îşi doreşte să lucreze la Google? Şi totuşi, câţi dintre preşedinţii de companii IT sunt dispuşi să facă o investiţie în oameni similară celei de la Google? Google nu s-a bazat pe studii de piaţă privind beneficiile angajaţilor, ci a îndrăznit. A îndrăznit să investească în oameni atât cât a fost necesar pentru a crea cultura din care să nu mai vrei să ieşi. Google asigură tot ce îţi trebuie ca să trăieşti doar în Google, ca în închisoare sau armată, cu marea diferenţă că la Google îţi doreşti să fii “închis”. Motivele pentru care programatorii aleg să părăsească o companie sunt numeroase. Ele ţin de pachetul salarial, birocraţia deficitară de la locul de muncă, programul rigid, problemele legate de management, îngrădirea creativităţii sau, de cele mai multe ori, greutăţile întâmpinate în cadrul echipei de proiect în lipsa unui dialog eficient, aşadar, atmosfera este una opresantă
şi sufocantă. Pentru a depăşi aceste inconveniente, board-ul managerial al companiei demarează mai multe strategii în scopul retenţiei angajaţilor. În cele ce urmează, diferite strategii şi metode de retenţie vor fi trecute în revistă pentru a vedea viabilitatea lor şi, dacă este cazul, pentru a identifica şi sugera noi astfel de metode. Sectorul IT este în prezent unul dintre motoarele economiei, care a reuşit să explodeze în perioadele în care celelalte sectoare erau afectate puternic de criza economică. În condiţiile unui sistem educaţional insuficient adaptat la cererea pieţei, creşterea domeniului IT în România a fost susţinută prin două pârghii. Pe de o parte, se angajează persoane care abia au absolvit, deci este vorba de angajaţi pregătiţi, dar care mai au de dezvoltat multe aptitudini şi de dobândit experienţă. Retenţia în cazul lor trebuie să se manifeste programat, chiar de la începutul jobului (păstrarea lor în firmă, în acest caz, este sinonimă cu „fabricarea” unui profil de angajat calitativ – de fapt angajatorul, prin diverse mijloace, prin formarea personalului îşi asigură loialitatea pe termen mediu şi lung). Pe de altă parte, există persoanele angajate de ceva vreme care au acumulat destulă experienţă astfel încât să constituie un target important pentru conducerea firmei. Aceste persoane fiind experimentate, instruite şi, de asemenea, prestând servicii de calitate sunt mult mai greu de reţinut în firmă deoarece cunosc alternativele şi standardele domeniului. În consecinţă, reţinerea lor este mai dificilă în sensul în care sunt cei mai căutaţi, iar nemulţumirile lor sunt mai greu de satisfăcut. În urma delimitării celor două categorii, putem să caracterizăm angajaţii astfel: cei lipsiţi de experienţă, novicii, se dovedesc a fi adesea egoişti şi capricioşi (de aceea, mulţi dintre ei nu rezistă foarte
www.todaysoftmag.ro | nr. 18/Decembrie, 2013
43
programare Păstrarea angajaţilor talentaţi, o temă recurentă în IT mult sau manifestă un pelerinaj susţinut, de la o firmă la alta) şi cei experimentaţi, cu vechime, loialii, care nu migrează de la un proiect la altul sau de la o firmă la alta deoarece deja au un anumit statut şi au dobândit o anumită maturitate profesională. Un factor deosebit de important pentru a ţine programtorii în priză şi la un nivel de mulţumire ridicat este motivarea. Fiind vorba de persoane pragmatice care lucrează după nişte pattern-uri fixe, acestea au nevoie permanent de imbolduri şi de motivare pentru a continua munca fără a scădea ritmul şi calitatea. Motivarea intrinsecă ţine de adaptabilitatea fiecăruia şi fluctuează, însă, cea extrinsecă, venită dinspre liderii companiei, are un impact mai mare. În acest fel, compania trebuie să ofere un planning provocator, proiecte din care fiecare poate să înveţe lucruri noi şi utile. De asemenea, procesul de organizare al proiectului trebuie să fie unul riguros, schiţat într-o manieră exactă şi profesionistă şi bazat pe cele mai inovative tehnologii. Dacă în completarea celor spuse se mai adaugă un mediu de lucru şi interacţionare pozitivă, constructivă între programatori, cu siguranţă se poate vorbi de încă o metodă de păstrare a angajaţilor în companie. Pentru a evidenţia această metodă de retenţie, este suficient să privim comparativ următorul exemplu asupra modului de organizare a proiectelor (metodologia de proiect). Mai demult, pentru a se ajunge la un produs finit, proiectele treceau prin faze numeroase şi oarecum „înţepenite”: în ceea ce priveşte delimitarea temporală, de obicei era vorba de un termen lung; plănuirea în detaliu de la care nu prea existau ulterior portiţe pentru soluţii alternative; arhitectura aplicaţiei; implementarea. Această metodologie desuetă poartă numele Watterfall şi nu este un bun exemplu pentru păstrarea angajaţilor, deoarece intervine plictiseala, rutina şi acea constrângere inovativă trasată de reguli. În schimb, tehnica metodologiei Agile funcţionează perfect ca modalitate de reţinere a programatorilor – este o metodă de dezvoltare a proiectelor actuală, modernă, care se caracterizează prin perioade scurte de executare, relaţie strânsă între membrii proiectului şi coordonatorul de proiect, comunicare deschisă şi adaptativă, atât între angajaţi, cât şi cu deţinătorul produsului (designerul produsului, cel care a realizat comanda). Perioadele lungi petrecute de angajaţi în cadrul unei firme sunt date, mai presus de orice, de calitatea umană şi socială a grupului şi a celui (celor) care conduc/ manageriază grupul. Este clasic şi actual
44
când spunem că „angajaţii se alătură companiei şi părăsesc managerii”. Să presupunem că la un moment dat o companie primeşte un candidat deosebit de serios şi de muncitor pentru postul de programator. Într-un timp scurt, se dovedeşte a fi un angajat extrem de valoros, cu un comportament ireproşabil cum probabil îl au doar 5% din ceilalţi programatori. Însă, inevitabil, survine problema. Persoana în cauză îşi doreşte un parcurs cât mai lung în cadrul companiei dar, fiind onestă, îi propune angajatorului să îi asigure un program flexibil astfel încât să lucreze în mare parte de acasă, deoarece este un familist convins şi are nevoie de mai mult timp pe care să-l dedice familiei. Pe lângă aceasta, deja şi-a dovedit eficienţa şi calităţile. Cum reacţionează compania în acest caz? Majoritatea afirmă că asigură flexibilitatea programului, însă, când este vorba de respectarea acestei sarcini, intervin blocaje. Acesta este un punct de cotitură în care cele mai multe dintre companii nu reuşesc să gestioneze situaţia, pierzându-şi angajaţii valoroşi. În schimb, celelalte companii, cele care înţeleg şi aplică nevoile angajaţilor cu adevărat importanţi, îi vor reţine şi vor câştiga servicii de valoare pe termen lung. Mai există o serie de avantaje şi facilităţi care au rol decident asupra păstrării angajaţilor. Programul trebuie să fie flexibil, adică atât timp cât îţi realizezi norma distribuită, poţi să alegi în ce interval orar să lucrezi. Orele suplimentare trebuie să fie recompensate punctual în diverse moduri. Companiile IT care se respectă, asigură angajaţilor centre de documentare personală gratuite, atât la sediu cât şi pe cale virtuală. Asigurarea unor abonamente la sală, bazin sau la alte centre sportive ar trebui să devină o prioritate deoarece viaţa unui programator este sedentară, lipsa mişcării putând conduce la scăderea concentrării şi a randamentului. Complementar, angajaţii trebuie să beneficieze de training-uri, workshopuri şi conferinţe sponsorizate care să le îmbunătăţească softskill-urile, astfel încât să nu se plafoneze. Pentru că oamenii sunt fiinţe sociale, compania trebuie să le ofere un mediu de lucru plăcut, confortabil şi prietenesc, echipat cu aparate de cafea şi suc, diverse jocuri pentru pauzele de muncă şi spaţiu de socializare. Chiar dacă aceste facilitări legate de recreere au devenit o obişnuinţă, nemaireprezentând nici pe departe o noutate, mai există totuşi cazuri în care, în cadrul unor firme, ele se identifică cu principala (şi poate unica) modalitate de motivare şi reţinere
nr. 18/Decembrie, 2013 | www.todaysoftmag.ro
a angajaţilor. Nu în ultimul rând, relaţia angajator-angajat trebuie să treacă peste barierele ierarhice, să fie bazată pe colaborări amicale, ieşirile în oraş într-un cadru informal să reprezinte o obişnuinţă, iar activităţile sportive asigurate de companie să fie cât mai dese deoarece doar spiritul de echipă spontan dezvoltă colegialitatea şi prietenia. Spre exemplu, aniversările angajaţilor, celebrarea unei reuşite în cadrul companiei, „angajatul lunii” sau ceremoniile de premiere anuale a celor mai eficienţi angajaţi din cadrul companiei constituie, fără dubii, evenimente care consolidează grupul şi plusează decisiv la reţinerea programatorilor în companiile IT. Chiar dacă există o bună înţelegere şi interacţionare, secondată de lipsa complexului de inferioritate faţă de persoanele poziţionate superior din punct de vedere ierarhic, un element-cheie este reprezentat de comunicarea faţă în faţă. Astfel, din momentul angajării şi, inclusiv, pe toată perioada deţinerii jobului, este imperios necesar ca interacţiunea şi comunicarea între angajator şi angajaţi să se facă cât mai direct (luând în considerare că ineficienţa comunicării şi lipsa feed-back-ului au generat mereu probleme importante şi relaţii şubrede). Acest lucru înseamnă evitarea transmiterii informaţiei prin e-mailuri sau prin intermediul terţilor. Abordarea directă reduce birocraţia şi creşte nivelul de încredere între persoane, iar relaţiile nu au tendinţa de a se depersonaliza, în sensul în care liderii companiei dovedesc autenticitate şi transparenţă – în acest fel câştigând la capitolul imagine şi legitimitate, ceea ce plusează esenţial referitor la problema retenţiei. După cum se poate observa, scopul principal al companiilor trebuie să fie acela de a îngloba angajaţii în cadrul ei. Ca urmare a implementării tuturor strategiilor descrise (de socializare, de implicare, tehnice), echipa de management a companiei trebuie să fie capabilă să formeze un colectiv puternic şi unit din care să rezide avantaje pentru ambele părţi implicate: pe de o parte, firma câştigă stabilitate şi nu se va confrunta cu problema retenţiei angajaţilor, iar pe de altă parte, angajaţii, care vor munci mai fericiţi, pasiunea profesională nu le este străină şi, cel mai important, nu vor avea tendinţe migraţioniste. Monica Soare
monica.soare@@artwinconsulting.ro Manager @ Artwin
programare
TODAY SOFTWARE MAGAZINE
Real time web with Meteor
M
eteor este o platformă open-source pentru crearea mult mai rapidă a aplicațiilor web, indiferent de nivelul de experiență al programatorului.
Momentul în care începi un proiect nou sau ai vrea să îți scrii propria ta aplicație web, este de obicei urmat de următoarea întrebare: „Care este cel mai potrivit framework pentru aplicația mea?”. Fiecare programator își va forma deja o opinie în această privință. În mod normal se va merge pe o platformă considerată a fi cea mai eficientă și puternică pentru tehnologia respectivă sau cea mai des folosită de echipă,, pentru a păstra o rapiditate relativ previzibilă în procesul de development a proiectului. Din punct de vedere al tehnologiilor web, părerile sunt împărțite, dar un lucru e sigur, ne aflăm într-o eră în care tehnologiile JavaScript sunt într-o continuă creștere, iar utilizarea lor se răspândește nu doar pe platformele web ci și pe platformele mobile. Mai mult decât atât, majoritatea dezvoltatorilor web folosesc tehnologii JavaScript în crearea aplicațiilor. Meteor este o platformă pur JavaScript care îți pune la dispoziție câteva facilități extrem de utile, printre care: • One langauge for both client and server side, • Live page updates, • Powerful data synchronization, • Hot code pushes, • Smart packages.
Crearea unei aplicații Meteor
Meteor reușește să îmbine foarte elegant aceeași tehnologie atât pe partea de server-side cât și pe partea de client-side a aplicației. Acest lucru este posibil prin faptul că aplicațiile Meteor rulează pe o instanță de Node.js. Pentru a putea diferenția codul care rulează pe server față de cel care rulează pe client, Meteor vă pune la dispoziție două variabile boleene care să vă ajute în această situație: • Meteor.isServer specifică blocul de cod care va rula server-side. • Meteor.isClient specifică blocul de cod care va rula client-side. Ca o primă regulă best practice nu este recomandată folosirea excesivă a variabilelor precizate mai sus. Se recomandă folosirea structurii de fișiere descrisă în documentație. Toate fișierele care rulează strict pe server se vor crea sub directorul server, iar cele ce vor rula pe client se vor crea sub directorul client. Astfel, întreaga aplicație poate fi scrisă sub un singur limbaj de programare. Acest lucru este un mare avantaj pentru programatorii care sunt expuși în proporție mai mare tehnologiilor JavaScript.
Smart packages
Meteor vine cu un sistem de pachete build in, ceea ce permite Meteor se poate instala foare ușor folosind următoarea folosirea librăriilor externe în crearea aplicațiilor. Acest lucru este posibil cu ajutorul comenziilor: comandă linux/unix: • meteor add <package_name> $ curl https://install.meteor.com | /bin/sh • meteor remove <package_name> După rularea acestei comenzi se va putea accesa de la terminal Printre pachetele disponibile se numără și cele mai folosite comanda meteor. Cu ajutorul acesteia se poate crea primul proiect librării și tool-uri: jQuery, Backbone.js, jQuery UI, Bootstrap, Less, Meteor: Underscore etc. . Mai mult decât atât, există un serviciu numit $ meteor create myApp Atmosphere, unde puteți răsfoi printre toate pachetele disponibile În momentul acesta meteor a creat directorul myApp care sau puteți cauta pachetele dorite. Pachetele de pe Atmosphere se conține aplicația web împreună cu o configurație pentru Node. pot instala cu ajutorul unui utilitar de gestiune a pachetelor numit js prin care vom putea porni serverul local pentru a vizualiza pro- Meteorite. iectul într-un browser web: $ cd myApp $ meteor => Meteor server running on: http://localhost:3000/
Templates
Platforma Meteor are instalat default un sistem de șabloane (templating system) cu numele Handlebars. Cu ajutorul acestui sistem puteți oferi un nivel mult mai dinamic paginilor. Acestea Prin rularea comenzii meteor în cadrul proiectului s-a pornit vor putea comunica într-un mod foarte elegant cu datele procesate serverul local, iar aplicația web poate fi accesată printr-un IP local server-side care urmează să fie transmise către view. Momentan Meteor suportă doar Handlebars, dar pe viitor vor fi implemenla portul specificat în output. tate mai multe opțiuni. Pentru a folosi template-uri în Meteor trebuie doar să creați un One language for both client and server side www.todaysoftmag.ro | nr. 18/Decembrie, 2013
45
programare Real time web with Meteor fișier .html în care să introduceți tag-ul <template> împreună cu atributul name care va primi o valoare sugestivă. În acest moment Meteor va evalua fișerul, iar template-ul creat va putea fi accesat prin intermediul unei variabile globale Template.nume_template. Mai mult decât atât, prin sistemul inteligent de sincronizare, Meteor va menține în orice moment datele din view sincronizate cu cele de pe server, iar orice modificare se va vedea instantaneu pe view.
Aceasta este singura suportată momentan, dar pe viitor vor fi implementate și alte baze de date. Pentru partea de client-side , Meteor folosește un emulator de mongoDB numit minimongo. Cu ajutorul colecțiilor putem manipula documentele din baza de date. Pentru declararea unei colecții se folosește următoarea sintaxă: Members = new Meteor.Collection(“members”);
Prin apelarea acestei funcții s-a creat un obiect de tip EJSON care este de fapt un model tradițional dintr-un framework ORM (Object-Relational-Mapper). Colecția Members este declarată glo<template name=”hello”> bal și este accesibilă atât din partea de client-side cât și din partea <b> Hello {{ what }} </b> de server-side. Asemenea paginilor HTML, modificările colecțiilor </template> sunt propagate în timp real către toți clienții. Astfel, orice modiAcum vom putea popula dinamic conținutul template-ului ficare asupra bazei de date va declanșa actualizarea colecțiilor „hello” accesând expresia handlebars numită „what” din interio- distribuite clienților. Pentru manipularea obiectului collection se va folosi urmărul acoladelor: toarea sintaxă: Template.hello({ what: ”World!” }); Exemplu de template:
sau
Template.hello.what = function{ return “World!” ;};
Members.insert({ name: “John Doe”, location:”ClujNapoca, Romania” }); Members.remove({ name:”John Doe” }); member_john = Members.findOne({“ name: “John Doe”});
În stagiu de dezvoltare baza de date poate fi modificată chiar și de pe partea clientului. Acest lucru este foarte folositor pentru În ziua de astăzi menținerea datelor pe client la zi cu cele de debugging și testare, dar odată ce aplicația atinge un stagiu gata de pe server este un task la ordinea zilei. Meteor reușește să scutească producție se vor dezactiva pachetele autopublish și insecure care programatorul de a reinventa roata, iar mecanismul de auto- oferă această facilitate. update este build in în platformă. Acest mecanism actualizează atât HTML-ul generat automat cât și HTML-ul creat manual prin Concluzie JavaScript. Meteor este clădit peste o serie de tehnologii de ultimă oră , Mecanismul din spate constă în folosirea unei funcții de care îmbinate într-un mod foarte elegant, scutesc programatorul randare care este trimisă către Meteor.render care va returna un de muncă și timp în plus. Astfel, reușește să se concentreze mai fragment de DOM numit nod. Acest fragment de DOM se va auto mult la alte aspecte ale aplicației decât asupra task-urilor care sunt actualiza singur prin intermediul platformei în momentul în care comune pentru orice proiect. Chiar dacă Meteor nu a atins încă se detectează o modificare în conținut. Meteor.render folosește un versiunea 1.0, se află într-un stagiu stabil, iar unele proiecte au concept numit reactive computation pentru a afla care nod trebuie început deja să migreze spre această platformă. În momentul de actualizat cu datele noi. Majoritatea aplicațiilor folosesc automat față platforma este la versiunea 0.6.6.3, dar în ciuda faptului că a acest mecanism, iar programatorul nu este nevoit să apeleze în trecut prin mai multe sesiuni de testare automată dar și manuală mod direct aceste metode. Astfel, paginile mențin factorul de real unele bug-uri mai pot exista.Totodată, Meteor este într-o continuă time updates, iar conținutul este permanent actualizat. dezvoltare mulțumită unei echipe de programatori care lucrează full time pentru a oferi schimbări majore în API-uri, cu fiecare update lansat. Chiar dacă nu a atins o primă versiune finală, Hot code pushes În mod normal când aplicația trebuie să intre în producție sau Meteor este o platformă extrem de flexibilă, puternică și de ultimă se face un deploy pe un server live, acest lucru poate implica un generație care trebuie să ajungă în atenția publicului. nivel de dificultate sporit. Există o serie de proceduri care trebuie urmate cu mare atenție printre care: portarea bazei de date, oprirea și repornirea serverului HTTP, verificarea unor posibile erori de deploy, sincronizarea serviciilor, etc. . Un lucru extrem de folositor și de interesant pe care îl oferă Meteor este Hot code pushes. Acesta este un mecanism complet automatizat pentru efectuarea deploy-ului. Tot ce trebuie făcut este să se execute următoarea comandă în cadrul proiectului existent:
Live page updates
$ meteor deploy <host>
Atât! În acest moment proiectul a fost încărcat cu succes pe serverul dorit. Mai mult decât atât, aplicația nu se oprește în timpul unui deploy. Meteor se ocupă de toată partea de updates și de menținere a serverului, iar clienții nici nu vor simți deploy-ul.
Collections
Meteor folosește baza de date de tip NoSQL numită mongoDB.
46
nr. 18/Decembrie, 2013 | www.todaysoftmag.ro
Andrei Cacio
andrei.cacio@evozon.com Perl developer @ Evozon
legal
TODAY SOFTWARE MAGAZINE
Cum pot fi protejate afacerile cu aplicații mobile?
C
reșterea fără precedent a utilizarii telefoanelor cu sistem de operare Android, a iPhone-urilor și tabletelor, a determinat companiile să investeasca resurse în aplicații software create special pentru dispozitivele mobile.
În acest context, piața aplicațiilor mobile devine din ce în ce mai dinamică și mai profitabilă (atât pe segmentul entertainment, cât și pe cel business) - potrivit unui raport al Gartner1, va valora 74 miliarde de dolari, în 2016. Însă crearea aplicațiilor mobile implică pentru dezvoltatori anumite riscuri deseori neglijate - riscuri care pot fi relativ ușor de gestionat dacă sunt cunoscute. Iată câteva sfaturi utile.
Protejează-ți proprietatea intelectuală
Activul tău cel mai valoros este proprietatea intelectualaă care trebuie protejată corespunzător.
Drept de autor Codul sursa, design-ul, interfața grafică, textul și alt continut original al aplicatiei mobile (imagini, videoclipuri, melodii, etc.) sunt protejate prin drept de autor, de la momentul creării lor. Chiar si “iconița” (icon) pe care utilizatorii o accesează pentru a lansa aplicația, poate fi protejată prin drept de autor. Poți lua în considerare să o înregistrezi chiar și ca marcă, dacă vrei să interzici altora să o copieze și să o folosească. Cu același scop, poți înregistra interfața grafică a aplicației (“look and feel”) ca design industrial.
Dezvoltarea aplicațiilor mobile implică și secrete comerciale (strategii de preț, plan de afaceri sau de marketing, etc.) pe care este recomandat să le păstrezi confidențiale. De aceea, încheie contracte cu angajații, programatorii freelance, potențialii parteneri de afaceri, furnizorii, investitorii (adică cu acele persoane cărora le-ai împărtășit detalii privind aplicația și implementarea ideii), obligându-i să nu divulge informațiile la care au avut acces.
deține dreptul de autor – atât timp cât nu există un contract care prevede contrariul. Probleme mai delicate privind stabilirea titularului dreptului de autor pot apărea când crearea aplicației este externalizată, realizată printr-un parteneriat sau când implică folosirea unor soft-uri open source. De exemplu, cand externalizezi procesul tehnic de creare a aplicației către programatori freelance sau către un furnizor independent, nu uita să inchei contracte care să menționeze, printre altele, că drepturile de autor asupra soft-ului și a codului sursă îți revin. Indiferent dacă detii o afacere ce pune pe piată aplicații mobile sau dacă esti un programator freelance care creează aplicații mobile pentru diverși clienți, este recomandat să apelezi la un avocat specializat care să îți pregatească contracte standard, avantajoase, pe care doar să le adaptezi când este cazul.
Brevet
Nu încălca drepturile altor persoane
denumirea aplicației ca marcă (de exemplu, marca Angry Birds). Chiar dacă nu o înregistrezi, poți face o cercetare a mărcilor similare sau identice deja înregistrate sau care sunt notorii, pentru a nu le imita – ceea ce ar putea determina, de exemplu, eliminarea aplicației tale din App Store (pe lângă eventuale acțiuni în instantă din partea proprietarilor lezați).
Secrete comerciale
Poate fi util să afli ce brevete au fost Asigură-te că aplicația mobilă pe care acordate deja pentru funcționalități tehnice o dezvolți nu imită, fără drept, elementele similare aplicației tale. unor aplicații existente deja pe piată, încălcând drepturile de proprietate intelectuală ale altor persoane. Dacă vrei ca aplicația să Știi cine deține drepturile de autor? În principiu, dreptul de autor asu- foloseasca un soft, design-ul, codul sursă al pra programului software al aplicației altei aplicații (sau chiar alt continut ce nu mobile aparține creatorului (programa- îți aparține - de exemplu, imagini, muzică), torul) din momentul în care scrie codul solicită și obține acordul persoanei care Marca Este opțiunea ta dacă înregistrezi sursă. însă dacă programatorul scrie codul deține acele drepturi. sursă în calitate de angajat, în exercitarea 1 h t t p : / / w w w . e w e e k . c o m / m o b i l e / atribuțiilor sale de serviciu, angajatorul va apps-marketing-and-the-cloud-gartner-predictions-for-2013/ www.todaysoftmag.ro | nr. 18/Decembrie, 2013
47
legal Cum pot fi protejate afacerile cu aplicatii mobile? Alege cu grijă platforma Selectarea platformei pe care va fi distribuită aplicația - iOS (Apple), Android (Google), Blackberry OS, Windows Store (Microsoft), Facebook, etc. - este o decizie importantă. Este bine să cunoști avantajele si dezavantajele fiecărei platforme, atât aspectele tehnice, cât și pe cele care țin de termenii contractuali. De exemplu, pentru a deveni dezvoltator autorizat Apple sau Google, trebuie să închei un contract prin care primești o licentă ne-exclusivă care iți permite să dezvolii aplicații mobile ce vor rula pe acea platformă. Fii însă atent la clause, mai ales la cele care: • îți interzic să folosești aplicația pe o platformă concurentă; • îți interzic să dezvolti aplicații mobile a căror interfața grafică este similară unor aplicații existente deja pe platformă; • Permit deținătorului platformei (sau altor dezvoltatori) să-ți modifice aplicația fără acordul tau; • Dau deținătorului platformei o licență exclusivă pentru folosirea aplicației tale, etc..
Despre autoare: Claudia Jelea este avocat specializat pe aspecte ce implică mediul online, comerțul electronic și IT&C, mărcile, drepturile de autor și protecția datelor cu caracter personal. LinkedIn & Twitter: claudiajelea | www.jlaw.ro | Facebook: IPBoutique.Legal www.avocatnet.ro/claudia_jelea * Acest articol a fost publicat inițial pe blogul http://jlaw.ro/ law-office/blog/.
Cât de bine cunoști implicațiile folosirii soft-ului open source? Multi dezvoltatori optează pentru folosirea soft-ului open source în aplicațiile mobile (caracteristica open source fiind permisiunea de a copia, modifica și distribui în mod liber). Dar cum există multe tipuri de licențe open source, este util să cunosti ce tip de licentă se aplică utilizarii unui anumit soft open source și care sunt implicațiile de natura comercială ale fiecărei licențe. Cea mai populară este licența GNU General Public License (GPL)2. Aceasta funcționează pe un principiu simplu: iți permit să folosești codul sursă pe care l-am creat eu, dar și tu trebuie să ne permiți mie și altora să-l folosim pe cel creat de tine pe baza codului inițial. Acest principiu este impus tuturor utilizatorilor unui cod sursă astfel licențiat; de aceea, termenii licenței GPL pot avea implicații majore. De exemplu, când dezvolți o aplicație mobilă pornind de la un anumit soft cu licenta GPL, condițiile acesteia se vor extinde și aplicației tale ( astfel, codul sursă al aplicației va trebui pus la dispoziția publicului în condiții similare celor în care ți s-a oferit ție softul). De aceea, poate fi problematic dacă încarci o asemenea aplicație pe App Store, unde regulile iOS sunt incompatibile cu GPL și interzic modificarea și redistribuirea codului sursă.
Aplicația colectează date personale? Aspectele privind protecția datelor cu caracter personal sunt foarte sensibile în prezent – iar Apple si Google chiar au facut obiectul unor reclamații în acest sens. Primul pas este să stabilești dacă aplicația pe care o dezvolți colectează anumite date cu caracter personal privind utilizatorii (nume, date de contact, inclusiv informații stocate pe dispozitivele mobile, date ce permit localizarea geografică, date ale minorilor, etc.). Dacă răspunsul este “da”, al doilea pas este să ai o politică concretă privind aceste date (privacy policy) care să abordeze, printre altele, modalitatea în care se obține acordul utilizatorilor, detalii privind tipul datelor colectate, dacă sunt distribuite, cui și pentru ce scop, locul stocării, etc. .
Concluzie
Implementarea unei strategii eficiente minimalizează potențialele riscuri sau, în cuvinte mai simple, paza bună trece primejdia rea. 2 http://opensource.org/licenses/GPL-3.0
48
nr. 18/Decembrie, 2013 | www.todaysoftmag.ro
Claudia Jelea
claudia.jelea@jlaw.ro Avocat & Consilier in domeniul marcilor @ IP Boutique
TODAY SOFTWARE MAGAZINE
programare
Interviu cu Richard Campbell (II)
R
ichard Campbell are mai mult de 30 de ani de experienţă high-tech, fiind Director Regional Microsoft şi profesionistul cel mai valoros al Microsoft (MVP). El se consultă cu mai multe organizaţii nord- americane de top. Pe lângă faptul că vorbeşte la conferinţe peste tot în lume, Richard este una dintre gazdele „.NET Rocks! Talk Show-ul audio de pe internet pentru Dezvoltatorii .NET” şi gazda emisiunii „RunAs Radio, Talk Show-ul audio de pe internet pentru Profesioniştii IT”. A: Crezi că o abordare generalistă poate fi susţinută? Pentru cât timp poate fi susţinută? Este nevoie să ne specializăm în diverse subdomenii? R: Cred că volumul de muncă a fost suficient de mare încât am avut dintotdeauna nevoie de specialişti. Sunt prea multe aptitudini de cunoscut, dar fiecare are rolul său. Mă întorc mereu la metafora podului. Dacă vrei să construieşti un pod, există un inginer. El nu construieşte podul, dar semnează pe documentaţie, iar dacă podul se prăbuşeşte, este vina lui. Ai nevoie de oameni care să ştie cum să toarne cimentul corespunzător. Ai nevoie de oameni care să ştie cum să întindă corect cablurile. Ai nevoie de oameni care să ştie cum să toarne asfaltul. Şi aceştia sunt oameni cu anumite aptitudini, sunt tehnicieni. Sunt seturi de aptitudini diferite şi ai nevoie de toate astea dacă vrei să ai succes cu podul. Există cu siguranţă un inginer implicat, dar nu este singur. Cred că trebuie să preţuim fiecare aptitudine şi că generaliştii trebuie să aibă responsabilităţi specifice efortul general de a realiza software cu succes. Cineva cu un ochi format ca al lor peste întreaga activitate este o persoană utilă, dar are nevoie să lucreze cu specialişti pentru a avea cu adevărat succes. A: Crezi că aceasta este o atitudine folositoare care să fie adoptată de tinerii care intră în domeniul acesta? Ar trebui să caute o specialitate în care să se specializeze şi pe care să o studieze şi să nu se aştepte să cunoască totul despre informatică / ingineria calculatoarelor? R: Nu cred că putem şti totul despre ceva – în primul rând. Trebuie să simţi ceea ce vrei să faci. Şi nu fiecare lucrare de software este un pod. Unul dintre lucrurile care mi-au placut în legătură cu mişcarea smartphone a fost acela că a adus înapoi echipa foarte mică. Trei oameni puteau să îşi câştige existenţa construind o aplicaţie interesantă. Şi pentru multă vreme
acest lucru era imposibil. Dezvoltarea jocurilor a devenit atât de complexă încât era nevoie de organizaţii precum Electronic Arts cu o sută până la două sute de oameni pentru a scoate un joc care cu adevărat să testeze limitele unui aparat de jocuri video. Dar totul s-a redus la un telefon, şi dintr-odată era nevoie doar de un programator bun, un artist bun şi un manager pentru a rezolva totul şi a aduce un venit din care să trăiască toţi. Şi asta e extraordinar! Noi făceam asta în anii 80 cu computere desktop şi limbaje 4G. Iar faptul că s-a revenit la aşa ceva ma interesează cu adevărat. Cred că acum ne aflăm în fazele ultime, când există atât de multe produse pe smartphone-uri încât este din ce în ce mai dificil să ai succes. Cred că cea mai mare provocare pentru un tânăr în ziua de azi este să îşi dea seama ce stil de lucru preferă. Şi din nou, nu putem presupune că vom rămâne în aceeaşi carieră. Poţi să rămâi în informatică pentru mult timp. Eu aşa am facut. Dar nu am avut aceeaşi slujbă pentru mai mult de un an. Întotdeauna apare ceva nou. Un alt mod de a lucra. Şi cred că asta face parte din a-ţi ghida cariera – să îţi păstrezi privirea la orizont şi să alegi lucruri noi pe care vrei să le încerci şi să te mişti în acea direcţie când ai ocazia sa o faci. A: Deci, dacă înţeleg corect, tinerii ar trebui să experimenteze un pic pentru a vedea ce le place şi să avanseze înspre acea direcţie dacă doresc să lucreze în informatică. R: Şi cred că dacă vor să rămână, trebuie să îşi dedice un anumit timp pentru a vedea ceea ce se întâmplă nou – să decidă ce este important pentru ei, ce vor să încerce în continuare. Există o capcană: devii bun într-o anume abilitate şi încetezi să mai înveţi – te concentrezi numai pe acea abilitate. Poţi fi pe acel val pentru mult timp. Începi din vârf şi treptat te întorci în
mulţime până când devi tipul în vârstă care păstrează sistemul moştenit. Toate astea cu aceleaşi aptitudini. După părerea mea, dacă petreci zece ani făcând acelaşi lucru în informatică, nu ai dobândit zece ani de experienţă – ci ai doar un an de experienţă, repetat de zece ori. Este mai interesant pentru mine, cred că este o carieră mai distractivă şi care te face un muncitor mai valoros, să îţi depăşeşti limitele aptitudinilor tale şi să explorezi alte aptitudini. Diversitatea te face bun în toate. Nu poţi să le faci pe toate, trebuie să îţi alegi nişele, dar să înţelegi: dacă cunoşti numai un singur limbaj de programare, ai o modalitate foarte îngustă de a privi lucrurile. Al doilea tău limbaj de programare va fi o bătaie de cap. Al treilea va fi limbajul care va genera un adevărat progres. Acela va fi momentul când vei începe să vezi întregul în programare şi nu doar zahărul de deasupra, care le face diferite. După aceea, al patrulea, al cincilea şi al şaselea sunt uşoare. Şi alt aspect care are loc în mintea ta este acela că nu îţi mai pasă de limbaje – limbajele nu mai sunt aşa de importante. Felul în care gândeşti este adevărat. Şi cum rezolvi probleme este important şi asta te face un muncitor mai valoros. Asta nu înseamnă să înveţi
www.todaysoftmag.ro | nr. 18/Decembrie, 2013
49
interviu Interviu cu Richard Campbell (II) tot. Pur şi simplu înseamnă să te axezi pe a avea o perspectivă reală asupra a ceea ce înseamnă o abordare productivă a dezvoltării de software. A: Care crezi că este calea cea mai bună de a învăţa? Şi aş împărţi întrebarea asta în două părţi: care este metoda cea mai bună de a învăţa pentru o persoană tânără care doreşte să intre în domeniul informaticii? Ar trebui să obţină o diplomă? Sau să studieze pe cont propriu? Şi aceeaşi întrebare şi pentru cineva care este în domeniu de câţiva ani şi doreşte să avanseze în carieră? R: Cred că mai întâi de toate trebuie să te cunoşti pe tine însuţi suficient de bine pentru a şti cum să înveţi. Care este un mecanism eficient pentru ca tu să înveţi? Una dintre veştile bune este că există mai multe modalităţi de a învăţa în prezent şi resurse pentru toate aceste modalităţi. Eu mi-am dat seama de multă vreme că sunt un cititor bun. Că învăţ foarte repede citind şi că nu am răbdare cu alte metode de învăţare, aşa că eu citesc pentru a învăţa. Aşa sunt eu. Dacă tu înveţi cel mai bine prin video, există produse extraordinare pentru a învăţa prin video. Dacă înveţi cel mai bine în mod practic, există cursuri disponibile pentru tine. Aşa că depinde de tine cum doreşti să înveţi. Aş spune că multe dintre abordările esenţiale ale programării pe care le avem în prezent au o ştachetă de pornire foarte ridicată. Este o provocare să fi productiv în unele dintre aceste medii de dezvoltare mai mari, aşa că s-ar putea să doreşti să alegi ceva mai simplu. Pentru a te propulsa peste nivelul de amator – pentru a intra în informatică ca profesie – trebuie să faci asta singur. Nici o diplomă nu te va salva. Când angajez un dezvoltator – rar mă mai uit la aptitudini – de obicei caut două lucruri: pasiune şi capacitatea de a lucra cu echipa – cât de bine se poate integra printre oamenii mei? Dacă ai aceste două lucruri, eu te pot învăţa tot restul. Destul de pasionat încât, dacă îţi impun un nou limbaj, nu eşti doar capabil să te descurci, ci vei fi de-a dreptul încântat să o faci. Dacă îţi dau un cont Pluralsight şi îţi spun că „am nevoie să te pregăteşti să activezi în Aplicaţii Single Page în HTML5” vei face foarte rapid asta pentru că ai video-urile şi le poţi viziona cât de mult doreşti. Şi să lucrezi bine cu echipa: să apreciezi diferenţele dintre aptitudini şi să vrei să lucrezi aproape – acesta pentru mine este cel mai valoros angajat pe care îl pot avea. Şi să realizezi că ambele aptitudini sunt de fapt aptitudini soft – aptitudinea tehnică nu te va mai duce departe – ci abilitatea de a deprinde noi aptitudini tehnice
50
este cea care contează. Ne aflăm în această perioadă de transformare în informatică şi astfel, aptitudinile pe care le înveţi acum nu îţi vor mai servi la fel de mult peste cinci ani. Dar capacitatea ta de a învăţa acele deprinderi şi dorinţa ta de a face asta îţi vor prinde bine. A: Vorbind despre aptitudini soft – care crezi că este cea mai mare concepţie greşită pe care oamenii din afara industriei noastre o au în legătură cu asta? Lucruri precum „stai toată ziua în faţa calculatorului”, „nu interacţionezi cu oameni”, „poţi să înveţi meseria, iar apoi te-ai aranjat pe viaţă”, ... R: Există ceva ce se numeşte efectul Dunning Kruger, care spune că cei mai mulţi oameni ştiu atât de puţine despre asta încât nici măcar nu ştiu că nu ştiu nimic. Şi informatica este adeseori aşa. De multe ori suntem în situaţia în care managerii unei organizaţii consideră că dezvoltarea software înseamnă numai dactilografiere. Deci, dacă nu tastezi, nu lucrezi. Şi trebuie să îi educăm să înţeleagă că nu este aşa. Că dactilografierea poate fi extrem de distrugătoare pentru procesul de dezvoltare. Ne poate îndepărta de scop, în loc să ne apropie. Că trebuie să existe un plan şi o anticipare. Cred că tocmai să educi oamenii şi să îi ajuţi să înţeleagă ce este complicat şi ce este uşor – deoarece nu este ceva evident în software – este de cele mai multe ori proba de aptitudine soft. Suntem aproape siguri astăzi, în acest moment, că sunt foarte puţine aptitudini de afaceri care să nu poată fi automatizate, în care să nu putem să introducem tehnologie şi să le avantajăm într-un fel. Tehnologia a străbătut cale lungă şi este extrem de solidă în acest moment. De cele mai multe ori, problema este în echipă şi în punerea laolaltă a cerinţelor. De fapt, înţelegerea businessului suficient de bine încât să îi aplici tehnologie. Aceasta este adevărata zonă de creştere. A fost dintotdeauna o problemă, dar devine din ce în ce mai acută cu trecerea timpului. A: Mulțumesc. Acestea au fost întrebările pe care le-am pregătit, dar aş mai dori să te rog dacă vrei să menţionezi câteva resurse, website-uri cu care lucrezi, lucruri pe care oamenii ar trebui să le încerce? R: .NET Rocks. A fost creat de prietenul meu Carl Franklin în 2002, ceea ce e uluitor, deoarece în 2002 cuvântul „podcast” (a distribui fişiere multimedia pe internet) nici nu exista. Acesta a apărut câţiva ani mai târziu. El făcea fişiere MP3 şi le punea pe Internet. Dar acum, după 11- 12 ani, show-ul a devenit destul de puternic. Eu sunt noul venit. Am intrat în echipă
nr. 18/Decembrie, 2013 | www.todaysoftmag.ro
în emisiunea cu numărul 100. Cred că ne aflăm la numărul 916 acum. Am avut al 900lea episod în Wisconsin, la o conferinţă. A fost şi o petrecere mare cu ocazia asta. 900 înseamnă multe emisiuni. Showul are loc de două ori pe săptămână – marţea şi joia. Este gratis de descărcat. Este doar un fişier MP3 şi poţi să îl obţi în iTunes sau Zune Marketplace sau oriunde doreşti. Acum avem aplicaţii mobile pentru toate dispozitivele – chiar şi pentru Windows Phone. Şi de două ori pe săptămână vorbim cu un luminator .NET: Rocky Lhotka sau Scott Guthrie – un cunoscător în profunzime al spaţiului .NET – despre ceea ce îi interesează şi despre noile tehnologii. Încercăm să facem lucrurile mai uşoare pentru cei care lucrează în industrie sau sunt interesaţi de aceasta, să sorteze ce este important pentru ei şi de unde să afle mai multe în legătură cu anumite teme. Emisiunile de marţi tind să fie emisiuni mai tehnice. Joia mergem mai departe. Uneori este despre tehnologie, alteori poate să fie o lecţie de istorie. Odată am avut un interviu cu Les Pinter, cel care a scris versiunea originală Word, pe care a vândut-o lui Bill Gates. Sau vorbim despre oportunităţi în carieră. Cam o dată pe lună facem o emisiune diferită, pe o temă cu totul diferită de zona de dezvoltare. Luna trecută a fost exploatarea asteroizilor. Luna asta va fi despre grătar. Dar ştii, încercăm să fim lejeri în legătură cu show-ul. Cunoaştem multe persoane care ne ascultă în timp ce fac naveta, aşa că avem un format de talk-show. Încercăm să ne şi distrăm aşa, comportându-ne uneori prosteşte în momentele în care suntem în formă. Şi DNR este numai una dintre emisiuni. Mai avem şi Tablet Show o dată pe săptămână, lunea, iar acesta este despre dezvoltarea tabletelor şi mobilelor pe diferite platforme – vorbim despre iOS şi Android şi Windows şi apoi mai sunt şi pe partea de IT – de la începuturile informaticii, am construit multe echipamente, am realizat multe reţele, aşa că vorbesc cu profesionişti IT despre astea, o dată pe săptămână, miercurea, pe Run As Radio – un show mai scurt, un pic mai intens, axat pe o anumită gamă de subiecte, alta decât lejeritatea caracteristică a DNR. Aşa că, da, patru show-uri pe săptămână în prezent. A: Mulţumesc mult pentru interviu. Attila-Mihaly Balazs dify.ltd@gmail.com
Code Wrangler @ Udacity Trainer @ Tora Trading
sponsori
powered by