Nr. 35 • Mai 2015 • www.todaysoftmag.ro • www.todaysoftmag.com
TSM
T O D A Y S O F T WA R E MAG A Z I NE
Download from
Windows Store
Keep Calm and Start playing Dart Cum surprinde Microsoft viitorul
Loguri și metrici în Java Introducere în Couchbase NoSQL Document Database Transfer de Date prin NFC Portretul unui tester bun Organizații bine crescute Fizbo, Simply rent
Ce înseamnă TDD ? Acceptarea schimbării. Drumul către un bug pe lună SeedForTech Startup Weekend Cluj 2015 în retrospectivă BattleLab Robotica Totul despre PFA din punct de vedere fiscal în 2015
6 Seed For Tech Mircea Vădan
8 Startup Weekend Cluj 2015 în retrospectivă Cristina Juc
10 MVP Academy Demo Day Irina Scarlat
12 BattleLab Robotica Ioana Bucur
13 SprintPoint Horia Mircea Botoș
15 Cum surprinde Microsoft viitorul?! Paul Hrimiuc
19 Transfer de Date prin NFC Larisa Hogaș
21 Keep Calm and Start playing Dart Kuki Edina
24 Introducere în Couchbase Alexandru Objelean
30 Portretul unui tester bun Daniela Crișan
32 Ce este de fapt TDD? Alexandru Bolboacă
34 Loguri și metrici în Java Vasile Mihali
37 Organizații bine crescute Cristian Philipp
39 Fizbo, Simply rent – aplicație mobilă pentru închirieri imobiliare Lucian Pop
41 Totul despre Persoana Fizică Autorizată Ioana Varga și Ioana Costea
44 Acceptarea schimbării. Drumul către un bug pe lună Patkós Csaba
editorial
L
Ovidiu Măţan
ovidiu.matan@todaysoftmag.com Editor-in-chief Today Software Magazine
a eferverscența de evenimente culturale și educaționale care a cuprins Clujul în luna mai și-au adus contribuția și evenimentele din domeniul IT-ului. Unul dintre acestea, Romanian Testing Camp, a reunit o bună parte a testerilor clujeni într-o locație inedită, patru săli de cinematograf dintr-un mall local, remarcându-se mai ales prin prestigiul invitaților și al abordărilor interesante. Alt eveniment, IT Camp, ne-a invitat să călătorim în fascinanta lume Microsoft, menținând în organizare, desfășurare și selecția invitaților aceleași standarde înalte cu care ne-a obișnuit din anii trecuți. Pentru începutul lunii iunie, recomandarea TSM este Techsylvania, o conferință dedicată antreprenorilor. Un alt moment pe care îl plasez în categoria evenimentele pozitive ale lunii mai este colaborarea revistei TSM în regim de internship cu trei studenți. La inițiativa Cluj IT Cluster, am acceptat acum două luni să colaborăm sub forma unui program de internship pentru studenți. Studenții cu care colaborează TSM, lucrează la completarea website-ului revistei precum și la implementarea unor proiecte. Domeniile lor de specializare sunt informatică, informatică economică, jurnalism și marketing. Nu insist asupra detaliilor de selecție a candidaților deoarece avem promisiunea din partea Cluj IT Cluster a realizării unui articol destinat acestui subiect. Dar vreau să subliniez pasiunea și dedicația studenților care, chiar dacă nu dețin cunoștințele unor programatori seniori, cu siguranță îi depășesc pe majoritatea în ceea ce privește ideile noi, entuziasmul, dorința de a învăța și implicarea în proiecte. Planificarea practicii de vară este încă în desfășurare. Dacă nu aveți studenți în organizație vă sugerez să o faceți, pentru că își vor aduce cu siguranță un aport consistent în dezvoltarea de produse noi sau îmbunătățirea celor existente. În acest număr puteți găsi articole pe diverse teme de programare precum: Introducere în Couchbase, Transfer de Date prin NFC și Loguri și metrici în Java. Testarea este reprezentată de articolul cu titlul: Portretul unui tester bun. Zona Scrum/Agile, conține titluri ca : Acceptarea schimbării. Drumul către un bug pe lună și Ce este TDD? Vă lăsăm să descoperiți singuri restul articolelor și vă dorim o lectură plăcută !
Ovidiu Măţan
Fondator al Today Software Magazine
4
nr. 35/2015 | www.todaysoftmag.ro
Redacţia Today Software Magazine Fondator / Editor in chief: Ovidiu Mățan ovidiu.matan@todaysoftmag.com Graphic designer: Dan Hădărău dan.hadarau@todaysoftmag.com Copyright/Corector: Emilia Toma emilia.toma@todaysoftmag.com Traducător: Roxana Elena roxana.elena@todaysoftmag.com
Lista autorilor Alexandru Bolboacă
Larisa Hogaș
Agile Coach and Trainer, with a focus on technical practices @Mozaic Works
Android Developer @ Yardi România
Alexandru Objelean
Vasile Mihali
alex.bolboaca@mozaicworks.com
alexandru.objelean@betfair.com
patkoscsaba@syneto.eu Agile Software Developer @ Syneto
Contabil : Delia Coman delia.coman@todaysoftmag.com
Produs de
Daniela Crișan
daniela.crisan@isdc.eu Senior Tester @ ISDC Romania
Kuki Edina
Lucian Pop
Tipar realizat de Daisler Print House
vasile.mihali@arobs.com Senior Software Engineer @ Arobs
Senior Developer @ Betfair
Patkós Csaba
Reviewer: Tavi Bolog tavi.bolog@todaysoftmag.com
larisa.hogas@yardi.com
lucian.pop@fizbo.ro
Tester Senior Analyst Cofondator @ Fizbo
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
Cristian Philipp
Mircea Vădan
Senior Consultant & Managing Director @ Essential Training and Consulting
www.clujstartups.com
Ioana Bucur
Irina Scarlat
Public Relations Responsable @ BattleLab Robotica
PR Manager @ How to Web & TechHub Bucharest
cristian.philipp@essentialtm.ro
ioanabucur1812@gmail.com
mircea.vadan@gmail.com
irina.scarlat@howtoweb.co
Paul Hrimiuc
Horia Mircea Botoș
Business Development Manager @ Accesa
Program coordinator @ SprintPoint
paul.hrimiuc@accesa.eu
incubator@clujhub.ro
Ioana Varga
Ioana Costea
Expert contabil Managing Partner @ A&I Consulting
Expert contabil Managing Partner @ A&I Consulting
ioana.varga@aiconsulting.ro
ioana.varga@aiconsulting.ro
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
www.todaysoftmag.ro | nr. 35/mai, 2015
5
startups
Seed For Tech
O
nouă inițiativă a fost lansată în această primvară în Cluj: Seed For Tech este un fond destinat dezvoltării de produse tech, incluzând și investiții de tip seed și sprijin în lansarea pe piață. Fondul și programul afiliat se adresează celor care au expertiză într-un domeniu de activitate, au o idee de startup în acel domeniu și se află în căutarea unui partener împreună cu care să dezvolte produsul și afacerea. Mircea Vădan
mircea.vadan@gmail.com www.clujstartups.com
Se pot înscrie în program atât antreprenori cu proiecte aflate în stadiul de idee, cât și cei care au format deja o echipă și lucrează la produs. Fondatorii/antreprenorii care intră în parteneriat cu Seed For Tech pot beneficia de echipă pentru dezvoltarea produsului software, investiție financiară și sprijin în cercetarea de piață și validarea ideii, consultanță în elaborarea strategiei de marketing, suport logistic și ulterior conexiune cu posibili investitori, clienți și mentori. Modelul este structurat în trei faze, fiecare fază adresând un set de aspecte specifice etapelor din dezvoltarea startup-ului.
Faza întâi: “Customer discovery and validation” Împreună cu fondatorii, vom trece printr-o fază de validare a ideii, cu scopul de a ajunge la “problem-solution fit” și de a determina fezabilitatea de business. Vrem să fim cât mai siguri că produsul software ce va fi construit rezolvă o problemă/nevoie clară pentru un segment clar de utilizatori/clienți. Seed For Tech va ajuta antreprenorii în acest proces și poate
6
nr. 35/2015 | www.todaysoftmag.ro
pune resurse financiare (până în 3000 de euro) pentru cercetarea de piață și prevalidare. Această fază durează două luni și nu necesită o implicare full-time pentru antreprenori. În acesta fază nu e nevoie să se formeze o firmă nouă și nu se ia încă o decizie de investiție, fiind o perioadă și de cunoaștere și de a vedea cum putem lucra împreună. Dacă toate aceste pregătiri și analize au fost deja făcute, atunci putem trece direct la faza a doua.
Faza a 2-a: “Product development and launch” Aceasta este faza în care se începe dezvoltarea produsului. O echipă tehnică (product manager/CTO, UX/UI designer, front-end dev, back-end dev) este formată, iar sub coordonarea antreprenorului și sub viziunea conturată de acesta, se lucrează la dezvoltarea produsului. După lansare și campania inițială, se fac alte iterații de îmbunătățire a produsului și promovare, cu scopul de a ajunge la “product-market fit”, faza ce poate dura până la un an. Antreprenorul este cel care conduce tot acest proces, cu sprijinul nostru.
TODAY SOFTWARE MAGAZINE
Faza a 3-a: “Growth and scaling” În această fază, ne concentram pe marketing, vânzări și promovare, cu mententanța și îmbunătățirea produsului. Scopul este de a redimensiona afacerea și de a intra în zona de profitabilitate. Această fază poate dura câțiva ani, iar Seed For Tech va facilita conexiuni cu investitori ce pot furniza fonduri de creștere până la sute de mii de euro. Ideea fondului a prins contur în urma interacțiunilor cu diverși potențiali antreprenori. Prea multe idei rămân blocate întru-un stadiu inițial de dezvoltare din cauza unui cumul de probleme. Aceste probleme variază de la lipsa capitalului inițial, a unui partener tehnic, expertiză în zona de marketing sau de business și altele. Împreună cu Fortech, în calitate de investitor, am reușit să propunem o formulă care să soluționeze aceste provocări. Valoarea adăugată a programului derivă atât din aportul de resurse și expertiză, precum și din orientarea acestuia pe termen lung. Prin Seed for Tech ne dorim să contribuim atât la dezvoltarea culturii antreprenoriale, cât și la dezvoltarea ecosistemului local de startupuri. În luna mai, am avut discutii avansate cu aproximativ 20 de antreprenori, iar până la sfârșitul anului ne propunem să avem între două și cinci parteneriate și investitii de până la 50 000 de euro. Suntem deschiși la discuții și cu
startupuri ce au deja o echipă completă și un produs lansat (sau aproape de lansare) și au nevoie doar de investiție financiară. Detalii suplimentare privind Seed For Tech sunt disponibile pe www.seedfortech.ro sau pot fi solicitate prin e-mail la adresa contact@seedfortech.ro.
Young spirit Mature organization A shared vision Join our journey! www.fortech.ro
www.todaysoftmag.ro | nr. 35/mai, 2015
7
eveniment
Startup Weekend Cluj 2015 în retrospectivă: 30 de idei și 12 echipe
D
upă câteva ședințe, e-mailuri multe, telefoane și mai multe - s-a întâmplat. În 24-26 aprilie, la Exclusiv Catering, a avut loc cea de-a patra ediție Startup Weekend Cluj. Deși a durat doar trei zile, a fost un proiect foarte intens și cu rezultate îmbucurătoare.
Cristina Juc
cristinajuc@gmail.com Organizatoare @ Startup Weekend Cluj
8
nr. 35/2015 | www.todaysoftmag.ro
Cele trei zile de eveniment au început cu prezentările a doi speakeri, Philipp Kandal și Salim Virani, după care gazda noastră, Adrian Pop, ne-a împărtășit un pic din experiența lui privitoare la astfel de evenimente. În aceeași seară a avut loc sesiunea de pitching. Au fost prezentate 30 de idei, dintre care participanții au ales prin vot 12 propuneri care li s-au părut cele mai interesante. Ulterior s-au format echipele în jurul ideilor votate. Bătălia supremă s-a dat pe designeri, care au fost în număr de șase, din totalul de 85 de participanți înscriși în această ediție. Seara de vineri a fost un pic mai destinsă. Participanții au avut șansa să se cunoască mai bine între ei, să descopere care sunt atuurile fiecăruia și care este partea/ domeniul în care și-ar putea aduce contribuția. Fiecare echipă a primit și câte un business canvas care să-i ajute să întocmească un plan pentru proiect. Cea mai intensă zi a fost sâmbătă. Fiecare echipă a avut ocazia să apeleze la cunoștințele mentorilor, care au trecut pe la fiecare dintre ele pentru a le oferi feedback și a le împărtăși idei. Duminică dimineața majoritatea echipelor aveau deja o propunere clară, iar unele dintre
ele au avansat până la etapa de prezentare. După masa de prânz atmosfera a devenit din ce în ce mai tensionată, pentru că eram cu toții pregătiți să aflăm cine vor fi câștigătorii acestei ediții. Vă invităm să aruncați o privire asupra celor 12 idei la care s-a lucrat timp de 54 de ore. Mai jos sunt cele 12 proiecte care au fost prezentate în fața juriului: Tutora (locul 3) - Oamenii învață pe oameni. O aplicație care vrea să schimbe modul de învățare/predare/oferire a consultațiilor prin intermediul unei platforme on-line. Travique (locul 1) - O aplicație care are ca scop prezentarea evenimentelor și a festivalurilor din România pentru cei din afara țării. Clear Future - Au vrut să arate o nouă viziune asupra educației superioare, atât pentru studenți cât și pentru elevi. Timber.ro (premiul special) - O platformă care facilitează interacțiunea dintre contractori și beneficiari. De asemenea, clienții au ocazia de întâlni profesioniști din diverse domenii precum construcții, instalații, etc. . Posibilitatea de a accesa servicii de calitate prin intermediul unei platforme on-line care să ajute
programare
ambele părți să câștige timp și să ajungă la persoanele potrivite. Awesome 1st Date - Își dorește să detensioneze atmosfera primelor întâlniri care pot fi destul de stinghere, prin intermediul unei aplicații de coaching. Mountain Report (premiu special) - O aplicație care te ajută să-ți programezi excursia la munte în cel mai scurt timp, oferindu-ți informațiile de care ai nevoie, începând cu locurile de unde ți-ai putea cumpăra/închiria echipamentul și până la condițiile meteo pe care le-ai putea întâlni pe traseu. Flowcal - O aplicație care să-ți contorizeze nivelul de productivitate. CPoints - O aplicație care te pune în legătură cu cele mai apropiate locuri unde ai putea să-ți încarci bateriile, metaforic și la propriu. Locuri de networking, de co-work, special amenajate cu surse de încărcare a dispozitivelor electronice. TapSit (locul 2) - O aplicație de mobil care îți permite să vezi în timp real câte mese libere sunt în cafeneaua/restaurantul unde ai vrea să mergi, și prin intermediul căreia poți să-ți faci rezervare simplu și rapid apăsând un singur buton. SnapIt (premiul special) - Este o cameră mică, pe care o poți anexa ochelarilor, pe oricare dintre laturi, prin intermediul căreia poți captura imagini cu o singură apăsare de buton, fără riscul de a pierde din experiența pe care o trăiești. Foveo - O aplicație care te ajută să-ți atingi obiectivele mult mai repede. Se bazează pe crearea unor echipe care au scopuri comune, dar și pe obținerea de încurajări din partea prietenilor, factori de motivare care să te ajute să obții rezultatele dorite. City 365 - O metodă de-a obține cele mai bune experiențe pe care ți le poate oferi orașul, la cele mai bune prețuri. Câștigătorii Startup Weekend Cluj 2015 au avut parte de mai multe premii techie. Travique, câștigătorii locului I, au primit un MacBook Air, din partea Telenav, trei luni de spațiu de co-work la Cluj Hub, o oră de mentorat din partea The HYVE și câte un
TODAY SOFTWARE MAGAZINE
încărcător solar pentru fiecare membru al echipei, din partea Pitech+Plus. TapSit au câștigat un Apple Watch din partea Telenav, trei luni de spațiu co-work la Cluj Hub, bilete la Techsylvania, cel mai mare eveniment de tech din Transilvania și Led Lamps din partea Pitech+Plus, pentru fiecare membru al echipei. Câștigătorii locului III au obținut trei luni de spațiu co-work la Cluj Hub, iar fiecare membru al echipei a câștigat un loc la Techsylvania și Led Lamps din partea Pitech+Plus. În acest an, trei echipe au câștigat premii speciale, acestea sunt Mountain Report - două bilete la Pioneers Festival - cel mai mare eveniment din Europa dedicat startup-urilor, o lună de spațiu co-work gratuit la Cluj Cowork și bilete la Techsylvania; SnapIt - o invitație la Seed For Tech Investment Program, din partea Fortech, și Timber.ro - care au trecut automat în cea de-a doua etapă a programului SprintPoint. Suntem curioși să aflăm în ce mod se vor dezvolta în viitor aceste proiecte lucrate cu atât de mult drag și implicare. Vom urmări evoluția echipelor și a ideilor ca să vă comunicăm detalii pe parcurs, pe blogul Startup Weekend Cluj. Dacă aveți mai multe curiozități despre proiect ne puteți urmări pe facebook și ne puteți scrie pe adresa de e-mail: cluj@startupweekend.org Suntem mândri de oamenii pentru care am organizat acest eveniment, făcându-ne o deosebită plăcere să-i cunoaștem pe fiecare în parte. Vă salutăm, echipa Startup Weekend Cluj 2015: Adela Chende, Adrian Pica, Anca Suciu, Cătălina Mironescu, Cristina Juc, Cristina Tare, Fele Eniko, Irina Rotaru, Mădălina Grecu, Mircea Vadan, Philipp Kandal, Roxana Oroian, Roxana Rugină, Vlad Ciurca.
www.todaysoftmag.ro | nr. 35/mai, 2015
9
startups
12 startup-uri cu potențial și-au prezentat produsele pe scena MVP Academy Demo Day
B
ucurești, 19 mai 2015. Cele 12 startup-uri care fac parte din al doilea lot al programului de preaccelerare MVP Academy au urcat pe scenă vineri, 15 mai, la Demo Day, pentru a prezenta rezultatele a două luni de muncă intensă. Acestea au avut astfel ocazia să își expună pentru prima oară produsele și progresul înregistrat în fața audienței, dar și să demareze discuții cu potențiali investitori și parteneri strategici. Organizată în parteneriat cu Telekom Romania și Bitdefender, cu sprijinul CyberGhost, Raiffeisen Bank, hub:raum, Microsoft și SendGrid, a doua ediție a programului de pre-accelerare MVP Academy s-a desfășurat în perioada 23 martie – 14 mai la TechHub Bucharest și a ajutat startup-urile finaliste să își definească mai bine produsele, pregătindu-le pentru următoarea etapă în dezvoltarea lor: redimensionarea produsului în funcție de posibilitățile oferite (scalarea), obținerea de investiții și încheierea de parteneriate. Fiind un program educațional gratuit, adaptat nevoilor individuale ale echipelor participante, MVP Academy le-a oferit startup-urilor acces la resurse educaționale care să corespundă nevoilor proprii de dezvoltare și a facilitat interacțiunea directă a acestora cu mentori cu experiență relevantă,cu investitori de tip angel și reprezentanți ai fondurilor de investiții early stage și programelor de accelerare din regiune. Pe parcursul programului, finaliștii au învățat mai multe despre cum dezvolți un startup de succes, networking, dezvoltarea de produs & metrici, storytelling & pitching, customer development, finanțare sau aspecte legale participând la workshopurile practice susținute de profesioniști consacrați în domeniu. Printre aceștia se numără Bobby Voicu (Co-Fondator, MavenHut), Paul Renaud (Executive Coach & autor al “A networking book”), B ogdan Rîpa (ex-Master Pro duc t Owner, Adobe Romania), Alex Barrera (Co-Fondator Tech.eu & Press42), Salim Virani (Partner, Founder Centric), sau Ana Maria Andronic (Partner, Biriș-Goran). În plus, startup-urile au beneficiat de sesiuni de mentorat 1 la 1 cu peste 50 de profesioniști și lideri cunoscuți
10
din industrie și au primit feedback și recomandări de la aceștia. Echipele au avut astfel ocazia să își rafineze produsul discutând cu reprezentanți ai unora dintre cele mai cunoscute programe de accelerare
cu Demo Day, eveniment care a adus împreună 200 de personalități de vază din ecosistemul tech regional: investitori, programe de accelerare, antreprenori, jurnaliși și profesioniști cu experiență.
la nivel internațional (Techstars London, Startupbootcamp sau Ignite 100) și cu profesioniști de excepție printre care se numără Florin Talpeș, Fondator & CEO, Bitdefender, Olaf Lausen, Chief of Staff (of the CEO) and Business Development Director, Telekom Romania, sau Cristi Badea, Co-Fondator, MavenHut. La toate acestea se adaugă sesiunile de coaching 1 la 1, discuțiile de grup pe diferite teme, organizate la cererea echipelor participante și sesiunile de pitching practice în cadrul cărora fondatorii și-au perfecționat pitch-ul lucrând sub atenta îndrumare a echipei MVP Academy și a unor profesioniști de excepție precum Jon Bradford (Managing Director, TechStars London) sau Mike Butcher (Senior Editor, TechCrunch). Programul s-a încheiat vineri, 15 mai,
Douăsprezece startup-uri au urcat pe scena Cinematografului Elvira Popescu pentru a prezenta publicului rezultatele a două luni de muncă intensă, creând astfel ocazia de a demara discuții cu potențiali investitori și parteneri strategici. După-amiaza a fost deschisă de George Diță, Program Manager MVP Academy, și a continuat cu un discurs introductiv susținut de George Lemnaru, Fondator Green Horse Games, care a împărtășit audienței lecțiile învățate în timp ce a dezvoltat două startup-uri care au primit finanțări de la fonduri de venture capital. George a discutat despre miturile asociate cu a fi antreprenor și a încheiat spunând că “dacă ești determinat și bine pregătit vei reuși, indiferent de țara în care te afli.” Ulterior, startup-urile au urcat rând pe rând pe scenă pentru a prezenta audienței
nr. 35/mai, 2015 | www.todaysoftmag.ro
produsele la care lucrează și progresul înregistrat în ultimele saptămâni. Echipele care au prezentat în cadrul Demo Day sunt: 1. Accelerole: software de management pay-as-you-go care ajută companiile să gestioneze cu ușurință profesioniștii independenți; 2. Catwalk15: aplicație mobilă care ajută utilizatorii să primească sfaturi vestimentare și să se inspire, oriunde și oricând; 3. Clepsisoft CyberFog: soluție proactivă de securitate care deviază atacurile cibernetice împotriva companiei tale; 4. CloudHero: PaaS care automatizează procesele de management și scalare ale unei aplicații pentru orice tip de public; 5. Conversion Network: software de marketing integrat care permite marketerilor afiliați să își dezvolte și afacerile fără efort, cu rezultate mai bune; 6. Inner Trends: soluție de web analytics care permite utilizatorilor să pună întrebări și să primească răspunsuri precise și la obiect, imediat. Este un limbaj comun pentru date și oamenii de business; 7. myDog: platformă care ajută stăpânii de câini să ia legătura unii cu alții și să le ofere astfel cățeilor oportunitatea de a se juca cu alți căței compatibili; 8. SafeDrive: aplicație mobilă care îmbunătățește siguranța traficului răsplătind șoferii care nu utilizează telefonul la volan cu puncte care pot fi apoi convertite în produse și servicii; 9. Seeds: platformă care permite utilizatorilor să creeze, să distribuie și să analizeze chestionare avansate pentru orice industrie; 10. Swapr: aplicație mobilă care ajută femeile să facă schimb de haine în funcție de locație și preferințele vestimentare ale acestora; 11. SwipeTapSell: aplicație care îmbunătățește experiența cumpărătorilor,
ajutând magazinele online să mărească rata de conversie de pe smartphones și tablete; 12. Unloq: software care propune o nouă modalitate de autentificare și autorizare a tranzacțiilor care înlocuiește parolele cu dispozitive, oferind astfel utilizatorilor mai multă siguranță, simplu și gratuit. “MVP Academy a fost o investiție de timp excelentă care ne-a ajutat să identificăm zonele în care trebuie să ne concentrăm pentru dezvoltarea produsului, dar și să ne perfecționăm abilitățile de prezentare pentru a exprima cele mai valoroase aspecte ale produsului și startup-ului nostru. Sunt lucruri esențiale din moment ce te lupți întotdeauna pentru a câștiga atenția audienței” , a declarant Tudor Cobâlaș, Co-Fondator SafeDrive, startup care a fost recent medaliat cu aur în cadrul Edison Awards, la categoria Lifestyle & Social Impact. La finalul evenimentului, startupurile au avut ocazia să interacționeze în mod direct cu persoanele din audiență
interesate de produsele la care lucrează și să demareze astfel discuții despre potențiale investiții și parteneriate strategice. “Am realizat potenialul uriaș al startupurilor finaliste încă din perioada de selecție, atunci când am remarcat echipele puternice din spatele produselor. În ultimele două luni, finaliștii s-au implicat fervent pentru a-și crește afacerile și produsele, au lucrat intens și au sacrificat multe lucruri pentru a livra bine și rapid. Suntem mândri de fiecare dintre ei și de evoluția lor și ne bucurăm că am reușit să transformăm ceea ce ar fi durat 5-6 luni în mod tradițional în două luni intense de progres. Suntem convinși că vom vedea rezultate excelente curând!” , a declarat George Diță, Program Manager MVP Academy. Irina Scarlat
irina.scarlat@howtoweb.co PR Manager @ How to Web & TechHub Bucharest
www.todaysoftmag.ro | nr. 35/mai, 2015
11
eveniment
F
BattleLab Robotica – cea mai mare competiție de megasumo robotic din Transilvania
acultatea de Inginerie Electrică din cadrul Universității Tehnice din Cluj-Napoca în colaborare cu organizația studențească BEST Cluj-Napoca a organizat în data de 9 mai 2015 cea de-a V-a ediție a competiției BattleLab Robotica.
Competiția a constat în implementarea de roboți sumo autonomi, capabili să identifice și să elimine de pe suprafața de joc robotul advers în competiții de tip “1 la 1”. În cadrul acestei ediții au participat 27 de echipe de studenți de la universitățile cu profil tehnic din România, care au muncit luni în șir la realizarea robotului. Construirea roboților reprezintă un proiect complex care implică atât cunoștințe de inginerie electrică, mecanică cât și de automatică și calculatoare. Echipele au fost formate din patru studenți, competiția respectând regulile internaționale de sumo robotic în ceea ce privește dimensiunile suprafeței de joc și regulile de desfășurare. Peste 200 de spectatori de toate vârstele au venit să vadă concursul, susținându-și favoritul cu pancarte și aplauze răsunătoare. Roboții puternici, luptele strânse, multiplele remize au făcut ca spectacolul să se prelungească până în jurul orei 20. Ș.I. Dr. Ing. Septimiu Crișan, organizatorul evenimentului a afirmat în legătură cu acest concurs: „În timpul anului abia aștept să se întâmple evenimentul. În ziua concursului nici nu vreau s-aud de el. Și când se termină
12
spun: mai vreau o dată!” Pe locul 1 s-a clasat robotul WOLF, echipă care a venit pentru al doilea an consecutiv tocmai de la București ca să participe. Premiul publicului pentru cel mai bun design l-au luat acasă cei de la ROBOTROLL. Cel mai viteaz robot a fost THORQUE, iar premiul Bosch pentru cel mai inovativ robot a fost câștigawt de NYAN. Evenimentul BattleLab Robotica 2015 a fost susținut de companiile partenere: Emerson, Yardi, Bosch, Garmin, Telenav, TME Polonia, Stratec
nr. 35/mai, 2015 | www.todaysoftmag.ro
Biomedical. Sponsorii au fost: MSG, Fortech, Accenture, Wenglor, Robofun și Frequentis. Premiile oferite au fost în valoare de peste 7000 lei și au constat în componente electronice și vouchere cadou. Ediția de anul următor își va deschide porțile pentru participanți internaționali și speră să își cimenteze un loc de renume în scena mondială de lupte între roboți. Ioana Bucur
ioanabucur1812@gmail.com Public Relations Responsable @ BattleLab Robotica
TODAY SOFTWARE MAGAZINE
startups
SprintPoint: un program de preaccelerare clujean care vrea să te ajute să reușești!
F
enomenul de „acceleratoare de tip seed este în creștere la nivel mondial, cu un număr tot mai mare de programe active, în special în SUA dar și în alte părți ale lumii. Seed capital, acceleratoarele care ajută cu “capitalul inițial”, precum Y Combinator, au primit multă atenție din partea comunității antreprenoriale și caută mereu startup-uri în fază de lansare”. Acest trend a fost observat de L. Barrehag într-un studiu din 2012 despre acceleratoare și trei ani mai târziu, acceleratoarele de tip seed sunt mai dezvoltate ca niciodată. Acest lucru mi-a atras atenția asupra pentru livrarea pitch-ului, workshop-uri și tine personal, trebuie să fii capabil(ă) importanței de a înțelege diferența între networking profesional. să gândești deschis, să fii dedicat(ă) și un accelerator și un incubator atunci Programul este creat pentru echipele capabil(ă) să colaborezi, să lucrezi din greu când vrei să intri într-un program de dez- de profesioniști și antreprenori care doresc și să înveți de la alții. Aceste calități sunt, voltare. O diferență este formulată de Paul să aibă propria afacere și le oferă acestora după părerea noastră, esențiale pentru a Bricault, cofondatorul unui accelerator din ocazia să pună întrebări și să învețe de la reuși în program. Los Angeles, care constată că acceleratorul ambasadori și mentori din domeniul tech. Pentru a-ți susține dezvoltarea, pe ia un capital al ideilor dezvoltate extern, în Pentru a aplica, echipa selectează și parcursul programului SprintPoint vei schimbul unei investiții și a mentoratului. înscrie ideea pe baza căreia se va crea plus- participa la traininguri, la sesiuni de La finalul celor trei sau patru luni startup- valoare.Gradul de efort pe care echipa l-a coaching și mentorat. Toate acestea vor ul ”absolvă”. Incubatorul aduce o echipă depus în conceperea produsului sau ser- avea loc la Cluj HUB, un spațiu modern externă să lucreze pe ideea unui investitor. viciului pe care vor să îl livreze și nivelul de de co-working în centrul orașului. Vei avea Cu cât ideea necesită mai multe resurse înțelegere a pieței pe care vor să o acceseze de asemenea posibilitatea să socializezi pentru a ajunge la maturitate, cu atât capi- se va reflecta în această plusvaloare. cu mentorii și investitorii din program talul luat crește. Programul se va derula pe perioada și să participi la diferite evenimente tech, Pe scurt, incubatorul durează mai verii și participanții vor fi inițiați în precum workshop-urile de folosire a platmult și preia mai mult capital în schimbul metodologiile prezentate în două cărți formei FiWare, Transilvania Demo Days, asistenței, pe când programele de acceler- foarte importante pentru orice startup Techsylvania și altele. La finalul programare sunt mai scurte, mai specializate și cer tehnic. Prima este Lean Canvas de ului toate echipele vor avea ocazia să își mai puțin capital la final. Eric Ries (2011) și cea de-a doua este susțină pitch-ul într-un Demo Day. D e ace e a, noi, e chip a St ar tup Disciplined Entprepreneurship: 24 Steps to Scopul nostru, al Startup Transilvania, Transilvania, am hotărât să concepem a Successful Startup, de Bill Aulet (2013). este să îți arătăm că nu te naști antreprenor un program de pre-accelerare care va Mai multe detalii despre cărți veți afla în ci poți să înveți să devii unul. ajuta startup-urile din zona tech și IT din timpul programului. Cluj-Napoca să își atingă potențialul. Vrem să atragem în program acele Horia Mircea Botoș incubator@clujhub.ro Acest program se numește SprintPoint. startup-uri care au dorința de a reuși. În timpul celor opt săptămâni ale pro- Pentru a fi eligibil(ă), trebuie să faci parte Program coordinator @ SprintPoint gramului, echipele vor trece printr-o serie dintr-o echipă (nu se poate să aplici în mod de experiențe utile și interesante, precum individual), proiectul vostru trebuie să fie consiliere și mentorat de echipă, pregătire mai mult decât o simplă idee. Cât despre 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. 35/mai, 2015
13
comunități
Comunităţi IT
F
inalul lui mai și începutul lunii iunie se anunță plin de evenimente în zona IT-ului românesc. Vă invităm să participați la I T.A.K.E 28-29 mai, ce se va desfășura în București. La Cluj, în 2 iunie are loc o nouă ediție a JS Camp, iar în 6-9 iunie are loc Techsylvania. Ne vedem la evenimente !!!
Transylvania Java User Group Comunitate dedicată tehnologiilor Java. Website: www.transylvania-jug.org Data înfiinţării: 15.05.2008 / Nr. Membri: 599 / Nr. Evenimente: 47 Comunitatea TSM Comunitate construită în jurul revistei Today Software Magazine. Websites: www.facebook.com/todaysoftmag www.meetup.com/todaysoftmag www.youtube.com/todaysoftmag Data înfiinţării: 06.02.2012 /Nr. Membri: 2270/Nr. Evenimente: 31 Cluj Business Analysts Comunitate dedicată analizei de business Website: www.meetup.com/Business-Analysts-Cluj Data înfiinţării: 10.07.2013 / Nr. Membri: 91 / Nr. Evenimente: 8 Cluj Mobile Developers Comunitate dedicată tehnologiilor mobile Website: www.meetup.com/Cluj-Mobile-Developers Data înfiinţării: 05.08.2011 / Nr. Membri: 264 / Nr. Evenimente: 17 The Cluj Napoca Agile Software Meetup Group Comunitate dedicată metodelor Agile de dezvoltare software. Website: www.agileworks.ro Data înfiinţării: 04.10.2010 / Nr. Membri: 437 / Nr. Evenimente: 93 Cluj Semantic WEB Meetup Comunitate dedicată tehnologiilor semantice. Website: www.meetup.com/Cluj-Semantic-WEB Data înfiinţării: 08.05.2010 / Nr. Membri: 192/ Nr. Evenimente: 29 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: 251/ Nr. Evenimente: 14 Tabăra de testare Comunitate formată din testeri și alți profesioniști din industria IT care, în cadrul unor întâlniri informale lunare, împărtășesc din cunoștințele proprii și învață din experiențele profesionale ale celorlalți membri. Website: www.tabaradetestare.ro Data înfiinţării: 15.01.2012/Nr. Membri: 1243/ Nr. Evenimente: 107
14
nr. 35/mai, 2015 | www.todaysoftmag.ro
Calendar Mai 27 (Cluj) Lansarea numărului 35 al Today Software Magazine www.todaysoftmag.ro Mai 27-28 (Cluj) 2 Fast & Curious: Angular JS Basic https://www.eventbrite.com/e/2-fast-curious-2x2-angularjs-workshops-tickets-16988047708 Mai 28-29 (București) I T.A.K.E - recomandat de TSM 2015.itakeunconf.com Mai 28 (Cluj) OpenStack Kilo Release Overview meetup.com/OpenStack-Cluj/events/221754372/ Iunie 3 (Cluj) Meetup #40 - Enhance your web testing with Fiddler meetup.com/Tabara-de-Testare-Cluj/events/221508203/ Iunie 3 (București) Hands-on Code: Programming by Wishful Thinking meetup.com/The-Bucharest-Agile-Software-MeetupGroup/ events/222502856/ Mai 28 (București) #2 AngularJS Meetup http://www.meetup.com/Bucharest-Angular-JS-Meetup/ events/221929288/ Iunie 2 (București) JS Camp www.jscamp.ro Iunie 3-4 (Cluj) 2 Fast & Curious: Angular JS Advanced https://www.eventbrite.com/e/2-fast-curious-2x2-angularjs-workshops-tickets-16988047708 Iunie 6-9 (Cluj) Techsylvania - recomandat TSM www.itcamp.ro
tendințe
Cum surprinde Microsoft viitorul?!
Î
n perioada 4 - 8 mai am participat la Microsoft Ignite, un eveniment aflat la prima ediție, care a reunit peste 23.000 de profesioniști în IT și oameni de business. În cadrul evenimentului, Microsoft a prezentat realizările din ultima perioadă precum și planurile de viitor pentru cea mai mare parte din serviciile și produsele din portofoliu. Dacă te așteptai la anunțuri suprinzătoare, atunci te-ai aflat în locul nepotrivit, pentru că nici măcar HoloLens nu a fost prezentat. Paul Hrimiuc
paul.hrimiuc@accesa.eu Business Development Manager @ Accesa
Discursul de deschidere al lui Satya Nadella, CEO Microsoft, nu a fost atât de proaspăt și de vibrant precum m-am așteptat, în comparație cu ceea ce am auzit anul trecut la Conferința din DC dedicată partenerilor. Poate că o cauză a diluării discursului au fost audiența cu background-uri diferite și multitudinea de subiecte abordate. Dincolo de reiterarea viziunilor sale Cloud First, Mobile First, cu care suntem deja familiari, el a subliniat rolul în creștere al profesioniștilor IT de a conduce transformarea în organizații. În acest context, consider că transformarea pe care MSFT o experimentează este uimitoare. Chiar oamenii care nu îi apreciază, pot remarca faptul că numărul de produse și inovații MSFT este în creștere. E incredibil pentru o organizație atât de mare,
complexă și cu tradiție. Mai interesant decât discursul inaugural a fost discursul lui Gurdeep Singh Pall, care s-a referit la modalitatea în care Windows 10 își propune să abordeze personal computing. Cred că Microsoft a făcut o treabă foarte bună în zona aceasta: în loc să se concentreze pe device, ei au pus accent pe experiența utilizatorului și au oferit o interfață consistentă și familiară în raport cu toate tipurile de deviceuri. Ținând cont de afirmația lui Gurdeep conform căreia „device-ul nu este mobil, utilizatorul este”, este de așteptat ca acesta să fie capabil să lucreze oricând și de oriunde. Dacă se adaugă și Continuum, care facilitează tranziția utilizatorilor între interfața touch și cea non-touch și Windows 10 Universal App ca platformă de aplicații pentru developer-i,
www.todaysoftmag.ro | nr. 35/mai, 2015
15
tendințe Cum surprinde Microsoft viitorul?! atunci rezultatul este ceva greu de depășit. În plus, nu ar trebui să uităm de Cortana, asistentul personal, care va fi omniprezent chiar și în situațiile în care creezi jocuri sau aplicații business. Noul browser, Edge, (anterior numit Spartan) va fi livrat împreună cu IE11, care, potrivit Microsoft, va beneficia de suport tot atâta timp cât Windows 10. Considerat a fi mai mult o mișcare de marketing pentru a se detașa de trecut, Edge încearcă să vină cu noi funcționalități care pun accentul pe acțiune și interacțiune (ex: permite luarea de notițe) și evaluează ca perimate benchmark-urile legate de viteză. Informațiile pot fi, de asemenea, parcurse mai ușor în browser cu ajutorul Reading View (chiar și offline). Website-urile care se bazează puternic pe publicitate, vor putea alege dacă să includă sau nu această funcționalitate. Pe lângă acestea, câteva subiecte merită prezentate mai în detaliu:
Noul Digital Workplace Generația Y intră tot mai mult pe piața muncii: industria IT (și nu numai) trebuie să accepte acest „val” și să-l valorifice. Generația Y sau Millennials accesează și folosește diferit informația, comunică și colaborează diferit față de generațiile anterioare, iar această atitudine se reflectă și în mediul de lucru. Liderii care
One Note (2003), Live Communications Server (2003) – numit Lync mai târziu și, recent, redenumit Skype for Business, OneDrive (2008), Skype (achiziționat în 2011), Office 365 (2011), Yammer (achiziționat în 2012) și Delve (2014). Ultimul pare să se integreze în a patra generație de tehnologii, așa cum a identificat Gartner (foto). Acest aspect creează confuzie în contextul în care Microsoft lansează mai multe tool-uri destinate colaborării, care au funcționalități similare sau chiar identice. Prin urmare, utilizatorii devin frustrați și cer clarificări. Confuzia nu se oprește aici; MSFT tocmai a pierdut o altă dispută1 cu Sky în Europa, pe tema înregistrării mărcii „Skype”, problemă care se poate amplifica în timp. Am participat la câteva sesiuni pe subiectul digital workplace, dar două dintre ele s-au diferențiat: 2toLead 2 și Cargill, care a adoptat Yammer (deși, în prezent, Cargill folosește SharePoint 2007). În final, constructiv este ca discuția să se distanțeze de modelul „tehnologie/tool vs. altă tehnologie/alt tool” și să se concentreze pe identificarea contextului organizațional, a nivelurilor la care se comunică (individual, de grup, organizațional) și să se decidă când și ce să se folosească în funcție de audiență și prioritate.
13 scenarii posibile de utilizare conștientizează valorile la care se raportează noile generații știu că angajații motivați, dotați cu instrumentele potrivite pot accelera creșterea veniturilor până la de două ori și jumătate (http:// www.haygroup.com/en/your-challenges/engaging-your-people). De aceea, astăzi e mai bine să fructifici cunoștințele angajaților punând accent pe o colaborare interactivă. Te-ai întrebat vreodată cum abordează Microsoft acest trend? Răspunsul scurt și confuz este: în moduri infinite. Microsoft a început cu Outlook (1992), SharePoint (2001),
16
nr. 35/mai, 2015 | www.todaysoftmag.ro
Datorită scenariilor din ce în ce mai diversificate pentru SharePoint on-premise, ne-am înscris în programul TAP, fiind nerăbdători să primim versiunea 2016 și să vedem ce opțiuni avem. Cum arată viitorul? Grupurile care se autoorganizează reprezintă principalul concept promovat de toate aceste tool-uri, pe care le poți integra cu Delve pentru a agrega conținutul. Cum se 1 http://www.windowscentral.com/eu-court-rules-skypes-name-too-similar-skynetwork-claim-trademark
2 http://www.2tolead.com/whitepaper-when-to-use-what-in-office-365
TODAY SOFTWARE MAGAZINE va întâmpla acest lucru în realitate? Rămâne de văzut în următorii publică și gestiona aplicațiile lor LOB (foto). ani. Sfat #1: Dacă intenționezi să adopți Yammer la nivel IoT organizațional, trebuie să știi că adoptarea poate fi accelerată Majoritatea oamenilor au auzit deja de IoT sau au dezvoltat creând un grup al creatorilor de grupuri (ambasadori/power- aplicații pentru IoT. Pe măsură ce devine din ce în ce mai tangi-
user-i) care să împărtășească bune practici, să încurajeze folosirea tool-ului și să administreze comunitatea. De asemenea, un lucru necesar este implicarea top management-ului în comunicare. Sfat #2: Ești interesat să încerci ceva nou pe lângă PowerPoint sau Prezi? Atunci merită să explorezi și să folosești Sway (http:// www.sway.com). Sfat #3: Ia în considerare că tool-uri precum Delve pot fi percepute negativ la nivel intern din cauza temerilor asociate cu menținerea confidențialității documentelor, a conversațiilor. Pentru a preveni escaladarea temerilor, este importantă o comunicare puternică cu stakeholder-ii.
Enterprise Mobility
bil și Microsoft avansează în această direcție. De exemplu, se va putea rula Windows 10 pe orice device care are putere minimă de computing-Microsoft având deja trei versiuni diferite ale sistemului său de operare-acoperind industry devices, device-uri mobile și chiar device-uri mai mici care pot să ruleze Windows IoT gratuit (foto). Desigur, cu platforma Windows 10 Universal ai API-uri puternice care facilitează accesul și integrarea de senzori. Microsoft își propune să încurajeze „consumul” suitei Azure IoT, care nu doar că păstrează datele colectate, dar cu ajutorul ei se poate folosi Machine Learning pentru analitice predictive, se poate gestiona întreaga rețea de senzori și multe altele. În timp ce consumatorii sunt interesați, în principal, de aplicațiile specifice locuinței (automatizare, securitate, entertainment), există nenumărate oportunități de business care pot fi explorate și definite în zona IoT. Două exemple relevante sunt Connected Cow (http://www.ibtimes.co.uk/connected-cattle-howwearables-cloud-help-farmers-get-their-cows-pregnant-1499220) de la Fujitsu, monitorizarea comportamentului conducătorilor auto din cadrul companiilor de asigurări.
Dacă utilizatorii sunt cei mobile și pentru ei e important să acceseze informațiile nu numai din birou- îți poți imagina un asistent comercial care lucrează doar de la birou?!- atunci mobilitatea devine o provocare, mai ales la nivelul unei companii de mari dimensiuni. Abordarea Microsoft pare să se concentreze în mod particular pe securizarea datelor indiferent de locație și să mențină datele companiei sigure. Cu Intune este posibilă acum gestionarea unor device-uri diverse. Folosindu-se Windows 10 Universal App aplicațiile create pot fi instalate pe orice tip device. Desigur, există probleme legate de standardizare, o zonă unde Aici, însă, rămâne o zonă neacoperită deoarece companiile tre- două noi organizații lucrează la definirea unei cooperări eficiente: buie să construiască și să gestioneze aceeași aplicație pentru orice sistem de op erare mobil. La acest nivel este punctul în care se remarcă alți provider-i precum Kony3. Până la sfârșitul acestui an, adițional Windows Store, companiile vor putea crea propriul lor Business Store sau Company Portal unde pot descărca aplicații din Public Store pentru utilizare internă și/sau 3 http://www.kony.com
www.todaysoftmag.ro | nr. 35/mai, 2015
17
tendințe Cum surprinde Microsoft viitorul?!
AllSeen și AllJoin. Securitatea este o altă provocare legată de IoT, dar și aceasta este în curs de rezolvare. #Sfat: Mai multe informații despre abordarea DIY (Do It Yourself?) se pot accesa pe www.windowsondevices.com. Evaluare personală Microsoft Ignite, pe o scară de la 1 la 5, unde 1 este cea mai mică notă: • Echipa: 5 (oricând dispuși să ajute); • Locația evenimentului: 4 (lipsa stațiilor de tren în apropiere a făcut mai dificil accesul pentru cei cazați într-un hotel care nu era în apropiere); • Disponibilitatea sesiunilor: 4 (multe dintre ele s-au repetat din cauza spațiului insuficient pentru public); • Calitatea sesiunilor: 4 (mă refer la cele business, câteva introduceri în concepte i-ar fi ajutat pe participanți să înțeleagă
18
nr. 35/mai, 2015 | www.todaysoftmag.ro
mai bine tool-urile, mai ales cele noi); • Spațiul expozițional: 3 (nefiind grupați expozanții, a găsi ceea ce e potrivit pentru tine, ca vizitator, a fost mai dificil); • Meniul: 2 (prea dulce pentru gustul meu și fără prea mare diversitate).
TODAY SOFTWARE MAGAZINE
programare
Transfer de Date prin NFC
C
a în cazul multor lucruri pe care le folosim, îmbunătățim, sau pe care le inovăm, experiența mea cu NFC a început din dorința de a găsi o soluție pentru o problemă simplă: să nu uit să fac anumite lucruri înainte de a ieși din casă, cum ar fi să mă asigur că setez temperatura corectă la centrală. O altă soluție ar fi fost să găsesc ceva care să facă aceste lucruri în locul meu. Bineînțeles, mi-am dat seama că aveam și alte idei care mi-ar fi putut simplifica viața sau care mi-ar putea face fiecare zi mai distractivă. Bineînțeles, mi-am dat seama că aveam și alte idei care mi-ar fi putut simplifica viața sau care mi-ar putea face fiecare zi mai distractivă. De exemplu, mi-ar fi plăcut să găsesc o modalitate de a-mi debloca telefonul fără a-l atinge sau să deschid portiera prin simpla apropiere de scaunul șoferului și multe alte astfel de dorințe. Și apoi a apărut NFC, exact ca Moș Crăciun, și câteva din aceste dorințe chiar s-au îndeplinit.
Ce este NFC?
Near Field Communication (NFC) reprezintă un set de standarde de comunicare fără fir cu rază scurtă, care de obicei necesită o distanță de cel mult 10 cm pentru a realiza o conexiune. NFC ușurează viața consumatorilor din lumea întreagă datorită aplicabilității sale: simplificarea tranzacțiilor și a schimburilor de conținut digital și conectarea unor device-uri electronice printr-o simplă atingere. Un alt avantaj este faptul că NFC este compatibil cu sute de milioane de carduri și cititoare din lumea întreagă. Tehnologia NFC poate lua multe forme și dimensiuni, dar cele mai întâlnite sunt Tag-urile NFC (dispozitive pasive) și smartphone-urile (dispozitive active). Tag-urile variază ca nivel de complexitate. Cele simple au memorie puțină și un chip radio atașat de o antenă, oferind numai o semantică de tip citit-scris. Uneori, aceste dispozitive pot fi programate pentru a fi de tip read-only. Tag-urile mai complexe oferă operații matematice și au hardware criptografic pentru a autentifica accesul la un anumit sector. Cele mai sofisticate tag-uri conțin sisteme de operare, permițând interacțiuni complexe cu codul care operează pe tag. Datele stocate pe tag pot să fie scrise într-o multitudine de formate, dar multe dintre API-uri se bazează pe un standard definit de NFC Forum numit NDEF (NFC Data Exchange Format). Chiar dacă această tehnologie este pe piață deja de câțiva ani, după părerea mea ea încă nu este folosită la potențial maxim. Primul telefon cu sistem de operare Android și suport NFC a fost lansat
în 2010 (Samsung Nexus S), urmat de Windows in 2012 (Nokia Lumia 610) și apoi de Apple în 2014 (iPhone 6, numai pentru Apple Pay).
De ce NFC nu are încă parte de notorietate? Informațiile de mai sus sunt de ajuns să demonstreze că NFC se pretează la o gamă vastă de utilizări și, prin urmare, ar trebui să cucerească un procentaj foarte mare din utilizatori și afaceri. Dar acest lucru nu se întâmplă. Să încercăm să ne dăm seama de ce. Modelele de business timpurii, cum ar fi aplicațiile de advertising și cele industriale nu au avut mare succes, fiind depășite de tehnologii alternative cum ar fi codurile QR, codurile de bare sau tag-urile UHF, dar avantajul tehnologiei NFC este că device-urile sunt de cele mai multe ori conectate în cloud. Toate smartphone-urile pe bază de NFC au acces la aplicații speciale, incluzând cititoare de carduri(tag-uri), spre deosebire de infrastructurile tradiționale, care impun un anumit standard (de cele mai multe ori patentat) pentru fiecare tip de card în parte, de control al accesului sau platforme de plăți. Spre deosebire de aceste cazuri, utilizatorii NFC se pot conecta la un third-party device NFC, care se comportă ca un server pentru orice fel de acțiune (sau reconfigurare). În următoarele paragrafe voi încerca să analizez avantajele și potențialul de utilizare al acestei tehnologii din diferite puncte de vedere.
Perspectiva de business NFC nu este o tehnologie incredibil de inovatoare. Ca și Bluetooth sau WiFi, este un standard radio de comunicare wireless. În lumea wireless, cea mai asemănătoare tehnologie este RFID (radio frequency identification). Datorită costurilor mai reduse de implementare, necesităților și modificărilor, NFC poate fi util în foarte multe situații. Tag-urile NFC au forme diferite, pornind de la stickere simple până la cele care se autodistrug sau care sunt rezistente la apă și condiții meteo extrem de dure. Capacitatea de citire și scriere diferă și ea: de la device-uri care au doar capacitate de write-once sau read-only, până la un număr nelimitat de operații sau spațiu de memorie protejat prin parolă. Toate companiile care țin evidența unor obiecte ar trebui să aprecieze această tehnologie. Vânzătorii, companiile de transport, www.todaysoftmag.ro | nr. 35/mai, 2015
19
programare Transfer de Date prin NFC spălătoriile care folosesc tag-uri NFC încorporate în pachete, haine și alte obiecte de vânzare, se pot folosi de NFC pentru a ține inventarul tuturor obiectelor. Un tag de tip smart poate fi introdus în orice fluturaș. Dacă atingi tag-ul ești redirecționat către un site, primești detaliile unui contact sau poți chiar accesa CV-ul unui candidat sau o biografie scurtă sub formă de text sau imagine. Unele mall-uri, chiar din România, folosesc aceste tag-uri în scopuri publicitare sau ca gift-carduri, reduceri și chiar organizează concursuri de treasure hunting prin intermediul lor. Dar de vreme ce suntem în era în care se dezvoltă tot mai mult așa-numitul domeniu al Internet of Things, au apărut soluții și idei mult mai inovatoare. Companiile folosesc tag-uri pentru a urmări activitatea angajaților, dar și pentru a estima timpul anumitor task-uri sau pentru a administra concediile. În combinație cu NFC, angajații pot foarte ușor să înceapă și să termine taskurile proprii din orice punct al companiei s-ar afla cu ajutorul telefonului, sau, și mai convenabil, pot face asta când intră în birou sau părăsesc locul de muncă. Servicii medicale, marketing, plăți – există foarte multe aplicații și posibilități. Dar aplicația mea preferată este un device care poate fi purtat-de exemplu un inel sau o brățară- și prin intermediul căruia se poate debloca sau deschide cu o simplă atingere, telefonul, ușa sau chiar mașina personală. Folosit în combinație cu un sistem GPS, un modul NFC poate localiza orice, de la lucruri, la animale de companie pierdute sau chiar persoane.
Care sunt părerile utilizatorilor?
aceste ipoteze mai târziu.
Dar dacă ești developer? Dacă nu ești developer de Android sau Windows, ratezi toată distracția. Sistemul de operare Android a fost primul care a oferit suportul API pentru a interacționa cu tag-uri NFC și a introdus noțiunea de Beaming – un feature care permite datelor să fie transferate via NFC către alte telefoane Android. Acest feature permite schimbul de bookmark-uri web, informații de contact, instrucțiuni, videoclipuri pe Youtube și altele.
Concluzie NFC începe să cucerească din ce în ce mai mulți utilizatori în fiecare zi și cu siguranță ne putem folosi de această tehnologie în multe domenii. Dezvoltarea aplicațiilor este facilă; protocoalele de securitate(NFC Signature RTD 2.0) pentru semnarea și verificarea integrității datelor sunt acum folosite; tag-urile cu acces protejat al memoriei sunt disponibile. Prin urmare, nu văd motive pentru care NFC nu ar trebui să cucerească piața în perioada următoare. Păcat că Apple pierde toată distracția.Voi încheia acest articol aici și vă aștept într-un număr viitor pentru a analiza mai în amănunt caracteristicile NFC de pe Android.
Bibliografie: 1. 2.
Dacă nu lucrezi în domeniul IT sau nu ești foarte pasionat de 3. astfel de lucuri, probabil că nici nu ai auzit despre această tehnologie, cu toate că este disponibilă pe piață deja de cinci ani. Utilizatorii trebuie să afle detalii despre această tehnologie. După părerea mea, și mi-e destul de greu să afirm acest lucru din postura mea de Android developer, probabil că singurul motiv pentru care această tehnologie nu este încă recunoscută și folosită la scară largă este că nu are susținerea iOS. Apple susține doar Apple Pay prin NFC și nu există deloc suport API, nici măcar în cazul celei mai recente versiuni, iOS 8. Motivul principal pentru acest spațiu gol se datorează, după cum chiar ei afirmă, problemelor de securitate pe care folosirea tag-urilor le ridică. Voi investiga
20
nr. 35/mai, 2015 | www.todaysoftmag.ro
http://nfc-forum.org/ https://developer.android.com/guide/topics/connectivity/nfc/index. html http://www.nearfieldcommunication.org/ Larisa Hogaș
larisa.hogas@yardi.com Android Developer @ Yardi România
programare
Keep Calm and Start playing Dart
P
Kuki Edina Tester Senior Analyst
rezentul articol nu-i are ca țintă pe manageri – nu aș vrea să le dau idei despre optimizarea pauzelor recreaționale din birou asigurând un singur dart – și nici pe extremiștii jocului binecunoscut, pentru că nu am cunoștințe de împărtășit despre darts-ul rusesc. Tema acestui articol vine de la big-brotherul nostru celălalt, adică Don’t-beevil Google. Datorită expertizei acestuia în domeniul tehnologiilor web, în octombrie 2011, Aarhus, orașul lui Bjarne Stroustrup și Lars Bak, s-ar putea să fi fost martor la nașterea unui produs revoluționar al industriei IT, fiind locul unde Dart a fost dezvăluit prima oară în fața publicului larg. Asemenea oricărui frate responsabil, el nu doar ne prezintă noul său gadget, ci ne invită și să-l încercăm. Am avut ocazia să aflăm „de ce, de unde și cum” să începem jocul cu Dart. Iar de la prima inițiere încoace – fără să îl acuzăm de aroganță – cum apare o versiune mai nouă, imediat suntem anunțați. O prima afirmație importantă despre Dart ar fi că nu se referă doar la un limbaj de programare. Este o platformă completă incluzând un toolchain, obiectivul căreia fiind sprijinirea etapelor de dezvoltare și lansare a aplicațiilor web structurate, scalabile și care au totodată o performanță ridicată. Dacă ar trebui să numim experți în astfel de aplicații, fratele nostru cu singuranță ar face parte din ei. Probabil vă amintiți de browserul lui propriu, Chrome sau de motorul V8 de JavaScript, fiind un urmaș de onoare a
versiunii asamblate pentru automobile în ceea ce privește accelerația și viteza dovedită în timpul navigărilor pe internet. Ideea din spatele Dartului este de a neutraliza discrepanța dintre evoluția semnificativă a browser-elor și practicile de startup, dezvoltare sau mentenanță a aplicațiilor web ușor rămase în urmă. Dart este all-inclusive și totuși simplu de folosit, avem parte de tutoriale practice, precum API și documentație extinse sau susținerea comunității – mulți dintre programatori au speranța de a-l opri pe JavaScript din monarhia singuratică a browser-elor. Toate cele menționate mai sus, separat sau combinate, au ca rezultate realizarea mai multor aplicații web performante, fapt care impune și mai mult spațiu comercial și DoubleClick pentru Google.
www.todaysoftmag.ro | nr. 35/mai, 2015
21
programare
Keep Calm and Start playing Dart
Limbajul de programare, Dart, are următoarele caracteristici: • este open-source sub licență BSD; • este orientat pe obiecte, permite moștenirea simplă și polimorfismul prin Mixins și implementarea implicită a interfețelor; • este gândit cu o singură ramură de execuție și oferă Isolates pentru realizarea operațiilor concurente, interacționând exclusiv prin mesaje fără să folosească zone comune de memorie; • preferă Future-ul pentru a gestiona eficient procesele asincrone și a preveni blocarea aplicației de către operații care necesită mult timp; • este lexically-scoped, tipurile de bază sunt opționale, existând și tipuri speciale ca Generics (tipuri parametrizate) și Iterables; • oferă un set impozant de biblioteci de bază și creează premisele unei accesări mai facile a package-urilor provenite de la terți; • fiind conceput pentru adoptare masivă, deține o sintaxă familiară atât pentru utilizatorii de limbaje scripting cât și pentru cei obișnuiți cu limbajele structurate; • se clasează ca o alternativă recomandată pentru proiectele în care transparența, structura sau ritmul ridicat de dezvoltare erau considerate doar avantaje; propune o schimbare din quick-and-dirty în quick-and-darty. Putem opta pentru editorul nativ Dart Editor sau putem alege un plugin, pe care să-l integram în IDE-ul cu care suntem deja obisnuiți cum ar fi WebStorm, IntelliJ sau Eclipse. În ambele cazuri vom avea acces la unelte folositoare din kitul de dezvoltare Dart care pot fi lansate de la linia de comandă: • pub – package manager – pentru a lucra în mod simplu și rapid cu pachetele third-party; • dart2js – compilatorul Dart-to-JavaScript, optimizat cu tree-shaking, minificare opțională, inferența tipurilor, ca la sfârșitul dezvoltării, aplicația să fie lansată cu ușurință în oricare alt browser decât Dartium. În cazul în care aveam nevoie de debugging, ne stă la dispoziție maparea surselor, adică a codului dart, chiar și în Mozilla sau Internet Explorer; • observatory –uneltă de profiling, pentru a verifica comportamentul aplicației în ceea ce privește performanța și utilizarea memoriei interne; • dartfmt – pentru a formata codul în mod automat, conform convențiilor din „Dart Style Guide”; • docgen – generator de documentație pentru pachetele Dart. Mașina virtuală Dart VM poate fi folosită pentru a rula aplicații de la linia de comandă, scriptur-i pe servere, servere sau alte aplicații Dart, care nu rulează neapărat în browser. Dart VM a fost extinsă recent pentru a folosi instrucțiuni SIMD(SingleInstruction Multiple-Data). Luând in considerare ca în ultimele procesoare apărute 30% din silicon este destinat instrucțiunilor SIMD, ca de exemplu NEON și vectori, mașina virtuală Dart profită de mai mult spațiu de execuție, reflectându-se ulterior în primul rând la performanța aplicației. În fazele de dezvoltare este recomandată folosirea lui Dartium, o versiune specială de Chromium, având Dart VM integrat. Se poate reîncărca codul/pagina în loc de a-l recompila- este vorba despre încă un feature a lui Dart care ne ajută să obținem un timp mai scurt de dezvoltare, testare și debugging. Lista este mult mai lungă, dar singurul lucru de care nu
22
nr. 35/mai, 2015 | www.todaysoftmag.ro
trebuie să uităm, e că Dart trece prin îmbunătățiri continue în ceea ce privește limbajul, uneltele, stabilitatea și rezultatele de benchmarking. Sună puțin utopic? Don’t be evil, citește mai departe.
Atâta vorbărie, unde este codul? Orice aplicație scrisă în Dart va conține cel puțin: • un fișier Dart — fiind alcătuit din operații Dart și având extensia .dart; • o funcție main() – care servește ca punct de pornire a aplicației. Diferențiem două tipuri de aplicații Dart: cele pornite de la linia de comandă și cele rulate din browser. O aplicație Dart de tip command-line este un program independent care va fi rulat cu ajutorul mașinei virtuale Dart VM într-o fereastră de consolă. Aplicația Dart scrisă pentru web va fi găzduită în cadrul unui document HTML și rulată fie din browser-ul Dartium, având Dart VM integrat, fie din oricare alt browser modern după compilarea codului in JavaScript – numit în prezent și limbajul de asamblare a browser-elor. Aspectele arhitecturale de bază pot fi așadar următoarele:
Fig.1 Aplicație tip command-line executat din Dart VM
Fig.2 Aplicație tip web rulat din Dartium
Fig. 3 Aplicație Dart compilat în JS și rulat din orice alt browser modern
Să pătrundem mai detaliat într-un program Dart: import ‚dart:async’; import ‚dart:io’; class Counter // fiecare clasă este moștenită din Object, implicit { var _toCount; // dacă numele începe cu ‚_’, va fi implicit privat num counted; // Funcțiile Get și Set(dacă este cazul) vor fi furnizate implicit // Zahăr sintactic pentru inițializarea variabilei
TODAY SOFTWARE MAGAZINE _toCount // înainte de apelarea constructorului Counter (this._toCount); // Un exemplu a unui Named-Constructor Counter.stave (String text, String s) { for (var char in text.split(‚’)) { if (char.toLowerCase() == s.toLowerCase()) counted++; } } // Definiția unei metode, în care - fiindcă returnează o expresie // return-ul poate fi înlocuit cu ‚=>’ void printCounted() => print(„$_toCount occurred $counted times.”); }; // Funcția top-level servește ca punct de pornire a aplicației main() { // Declararea și inițializarea variabilelor var stave = „S”; File file = new File („Keep_Calm.txt”); // Calculele care pot dura mult timp // vor fi gestionate în mod asincron, folosind Future Future future = file.readAsString(); future.then((String content) { var sCounter = new Counter.stave(content, ‚S’); sCounter.printCounted(); }) .catchError((e) { print (‚Counter encountered $e error!’) }); }
De asemenea, avem acces la pachete pentru testare și mocking, la Chrome pentru testare folosind linia de comandă. Recent a apărut suport nativ pentru integrare-continuă folosind drone.io. O primă ediție a lui Dart de asociația Ecma International a fost acceptată în mai puțin de trei ani de la apariția acestuia. A obținut un loc în topul 20 al celor mai populare limbaje. Conform Tiobe Index, Dart a a ajuns încă în toamna anului trecut în fața lui F# de la Microsoft sau a Swift-ului de la Apple.
În scurt timp va avea loc primul Dart-Summit în San Francisco, unde vom putea afla știrile cele mai actuale referitoare la strategia de lungă durată, la angajamentul față de platforma Dart, precum și noutățile și ideile inovatoare despre cum putem să folosim Dart în producție. Până atunci, lăsați deoparte cititul și începeți să jucați Dart! Singuri sau într-un hackathon împreună cu echipa, resursele disponibile on-line și comunitatea activă pe G+, github și stackoverflow, ne ajută să țintim și să înscriem cu un singur Dart. Nu ezitați, vizitați: dartlang.org, dartosphere.org, g.co/dartisans
Dart are o sintaxă familiară. În cele câteva linii de mai sus se vede cum sunt puse în practică ideile unui viitor Dart. Am folosit două biblioteci de bază, io si async, constructorul cu nume, sintaxa‚ fat-arrow’ pentru a obține funcții mai suple, interpolare de string-uri și câteva lucruri interesante în jurul lui then. Procesarea de evenimente asincronă din Dart, se poate face în modul următor: declanșăm o operație, prin metoda then() ne înregistrăm la un callback care va fi apelat după terminarea operației și tot în cadrul funcției then() pregătim instrucțiunile care la rândul lor așteaptă rezultatul operației. Așadar, totul are loc într-un context lexical restrâns. În afară de I/O și procesare asincronă alte biblioteci utile din SDK sunt: core, html, math, mirrors, isolate, indexed_db, collection, web_gl sau web_sql.
www.todaysoftmag.ro | nr. 35/mai, 2015
23
programare
Introducere în Couchbase - soluție NoSQL bazată pe Documente
Î
Alexandru Objelean
alexandru.objelean@betfair.com Senior Developer @ Betfair
n prezent, industria IT abundă de termeni precum NoSQL, Big Data sau NewSQL. De multe ori, persoanele cu putere decizonală au dificultăți în alegerea soluției potrivite. În condițiile în care soluțiile clasice - bazele de date relaționale sunt folosite de mai bine de două decenii, de ce ar trebui încercate soluțiile alternative? Marile companii apelează deja de câțiva ani la soluțiile alternative ceea ce le permite să economisească bani, să inoveze rapid și să ajungă cu produsele finale pe piață mult mai repede decât o făceau înainte. Scopul acestui articol e să prezinte soluția NoSQL bazată pe documente, care este Couchbase. Pe lângă detaliile tehnice se vor găsi și motivele pentru care această tehnologie merită să fie aleasă și câteva exemple de proiecte în care Couchbase este folosit cu succes.
De ce NoSQL?
Un a d i n c e l e m ai i mp or t ant e decizii luate de arhitecți, ține de alegerea tehnologiei potrivite pentru rezolvarea problemelor specifice produselor ce urmează a fi dezvoltate. În acest context, când vine vorba de alegerea între o bază de date relațională și o soluție NoSQL, este important să se ia în considerare câteva aspecte importante.
Natura datelor Modelul relațional este foarte potrivit pentru datele ce au o structură tabulară, cum ar fi un registru contabil. Datele complexe, care conțin multe nivele de imbricare, sunt mai greu de modelat folosind structuri bidimensionale. În astfel de cazuri, alegerea bazelor de date de tip NoSQL pare a fi potrivită, pentru că datele pot fi stocate în formatul JSON. Acest format este suportat de marea majoritate a tehnologiilor NoSQL. Un alt aspect îl reprezintă volatilitatea datelor. Este important să se știe cât de des se va schimba și va evolua modelul de date
24
nr. 35/2015 | www.todaysoftmag.ro
. De cele mai multe ori, modelul de date nu este bine definit de la început și flexibilitatea este necesară. Rigiditatea modelului de date este una dintre potențialele probleme pe care o putem avea cu baze de date relaționale.
Eficiența de dezvoltare Agilitatea și rapiditatea de dezvoltare sunt caracteristicile cele mai importante în cadrul unui proces de dezvoltare. În acest sens, tehnologiile NoSQL și-au demonstrat avantajul. Folosirea formatului de tip JSON pentru modelarea datelor, le dă posibilitatea programatorilor de a elabora versiuni inițiale ale produselor într-un timp mult mai scurt.
Probleme operaționale Creșterea volumului de date și a numărului de utilizatori, duce la degradarea performanței. Unica soluție oferită în astfel de cazuri de către tehnologiile relaționale, este bazată pe scalare pe verticală (hardware) care este foarte costisitoare. Pe de altă parte, tehnologiile NoSQL oferă
TODAY SOFTWARE MAGAZINE posibilitatea de a scala pe orizontală, prin adăugarea mai mul- serverele din cluster și rezultatele găsite pe toate nodurile sunt tor servere care, deși nu sunt foarte performante, nu necesită agregate într-un singur răspuns și trimise înapoi la client. investiții la fel de mari ca în primul caz. Pentru operația de scriere, Couchbase oferă un mecanism de modificare bazat pe chei. Clientul trimite o solicitare de modiStocarea și analiza datelor ficare, în care e trimis atât documentul modificat cât și cheia Modelele de date relaționale sunt potrivite pentru interogări asociată documentului. Serverul trimite răspuns solicitării clisofisticate de date și reprezintă o alegere bună când interogarea entului imediat ce documentul este salvat în memoria nodului complexă și crearea de rapoarte este critică. primar (responsabil de găzduirea acelui document), ceea ce faciAnaliza în timp real a datelor operaționale este mult mai litează obținerea unei latențe mici pentru operațiile de scriere. potrivită pentru tehnologii NoSQL.
Ce este Couchbase
Couchbase Server este o bază de date NoSQL bazată pe documente pentru aplicații web interactive. Aceasta oferă avantajele clasice unei soluții NoSQL, cum ar fi flexibilitatea modelului de date, ușurința , performanța și capacitatea de a oferi disponibilitate 100%. Couchbase a apărut ca urmare a îmbinării a două tehnologii populare NoSQL: • Membase - ce oferă persistență, replicare și partiționare folosind tehnologia performantă memcached. • CouchDB - care a fost inițiatorul folosirii formatului JSON pentru modelarea datelor.
Caracteristicile principale Model de date flexibil
Performanță predictibilă
Designul Couchbase-ului este centrat pe concurență performanță și randament (throughput) ridicat. Acesta oferă timp de răspuns de ordinul milisecundelor, ceea ce îmbunătățește experiența utilizatorului final. De asemenea, serverul distribuie automat procesarea la toate nodurile din cluster pentru a menține performanța constantă și a reduce încărcarea excesivă a unui singur nod.
Fiabilitate și securitate Couchbase oferă posibilitatea de a controla accesul la date pe baza combinației username/parola. Credențialele sunt transmise într-un mod securizat prin rețea. Datele senzitive sunt protejate în timpul transmiterii de la client la aplicație și viceversa. Fiabilitatea Couchbase-ului este dată de faptul că nu există un singur nod care ar putea provoca indisponibilitatea sistemului, atâta timp cât datele sunt replicate pe mai multe noduri. Funcționalitățile precum XDCR (Cross Data Center Replication), failover, backup și restore ajută asigurarea unei disponibilități a sistemului în cazul unor probleme neprevăzute, fie la nivel de nod sau de centru de date.
Couchbase folosește documentele în formatul JSON pentru reprezentarea obiectelor aplicației și a relațiilor dintre obiecte. Acest model e suficient de flexibil pentru a suporta schimbări ulterioare ale obiectelor fără a fi necesară migrarea schemei bazei de date sau planificarea unei perioade de mentenanță ce ar putea perturba disponibilitatea aplicației. Un alt avantaj al modelului Concepte Cheie bazat pe document este ușurința cu care pot fi reprezentate obiectele din lumea reală, cu posibilitatea de a folosi mai multe nivele Couchbase - soluție de stocare pe bază de documente de imbricare, precum și folosirea atributelor pentru a reprezenta Unitatea de bază de stocare în Couchbase Server o reprerelațiile dintre obiecte. zintă documentele. De cele mai multe ori, formatul preferat este JSON, ceea ce permite aplicațiilor să modeleze datele fără să aibă Scalabilitate constrângeri specifice modelelor de date relaționale, legate de E foarte ușor să scalezi aplicația folosind Couchbase Server, flexibilitatea modelului. Aceasta se datorază faptului că datele atât în cadrul unui cluster de servere cât și la nivel de cluster-e sunt stocate sub formă de documente, nefiind necesare migrări aflate în centre de date diferite. Se pot adăuga noduri noi pen- de scheme. tru a întâmpina nevoia de a face față unui trafic crescut specific Conținutul documentelor poate fi și în alt format decât JSON perioadelor de vârf. Ce e și mai important, adăugarea de servere -cum ar fi date binare- , dar avantajele folosirii formatului JSON nu necesită întreruperea operațională a aplicației sau schimba- sunt posibilitatea de a indexa și a interoga datele. Couchbase oferă rea codului aplicației. Noile servere pot prelua traficul adițional un motor de căutare bazat pe JavaScript ce permite căutarea dateși păstreză distribuția echilibrată a datelor. Couchbase oferă o lor bazate pe valorile câmpurilor din documente. partajare automată și rebalansare a datelor, ceea ce permite redimensionarea cluster-ului în funcție de nevoile aplicației.
Ușurința integrării Couchbase oferă o suită de librării pentru diverse limbaje de programare cum ar fi: Java / .NET / PHP / Ruby / C / Python / Node.js. Aceste librării facilitează integrarea soluției în orice tip de aplicație. Pentru operația de citire, Couchbase oferă un mecanism de căutare bazat pe chei. Clientul cere un document pe baza unei chei și doar serverul responsabil de găzduirea partiției în care se află cheia, va fi contactat. Couchbase oferă și un mecanism de căutare bazat pe interogarea unui index (View). Căutarea este distribuită la toate
Couchbase Data
www.todaysoftmag.ro | nr. 35/mai, 2015
25
programare Introducere în Couchbase - soluție NoSQL bazată pe Documente Data Buckets Datele sunt stocate în cluster-ul Couchbase folosind așa numitele Data Buckets. Buckets-urile sunt containere virtuale izolate, ce formează un group logic de date în cadrul unui cluster. Un Bucket este echivalentul unei baze de date. Bucket-urile oferă un mecanism securizat de organizare, configurare (memorie, numărul de replici, etc.) și analiză a datelor stocate.
vBuckets Un vBucket este o entitate logică responsabilă de un subset din spațiul de chei ale unui cluster Couchbase, fiind folosite pentru distribuția uniformă a informației în cluster. Acestea sunt responsabile atât de distribuția datelor cât și de suportul replicilor pe mai multe noduri. Fiecare identificator de document (cheie) aparține unui vBucket. O funcție de mapare este folosită pentru determinarea vBucket-ului de care aparține un document. Această funcție ia ca parametru ID-ul documentului și returnează un identificator de vBucket. Odată calculat, se consultă un tabel ce ține mapările dintre vBucket-uri și nodurile gazdă. Acest tabel conține un rând pentru fiecare vBucket. Un server poate fi responsabil pentru mai multe vBucket-uri.
Arhitectura
Couchbase a fost construit de la început cu fundamentele bazate pe o arhitectură distribuită, datele partiționate pe toate nodurile disponibile din cluster. Într-o configurare tipică, o bază de date Couchbase este instalată într-un cluster ce folosește mai multe noduri. Librăriile client se vor conecta la nodurile responsabile de datele cu care interacționează clientul. Pentru a facilita scalarea pe orizontală, Couchbase utilizeazăpartiționarea bazată pe un hash care asigură distribuția uniformă a datelor pe toate nodurile. Sistemul definește 1024 de partiții (număr fix) și odată ce pentru cheia unui document se calculează un hash asociat unei partiții - această partiție devine gazda documentului. Fiecare partiție are asignat un nod din cluster. Dacă topologia cluster-ului se schimbă (un nod adăugat sau eliminat), sistemul se rebalansează prin migrarea partițiilor de la un nod la altul.
Chei și metadate Toate datele salvate în Couchbase reprezintă documente cu chei asociate. Cheile reprezintă identificatori unici per document, iar valorile pot fi documente în format JSON sau un stream de biți sau alte obiecte serializate într-o altă formă. Cheile sunt cunoscute și ca ID-uri de documente și reprezintă similarea un chei primare în SQL. O cheie poate fi formată din orice caractere și trebuie să fie unică. Toate documentele conțin metadate. Metadatale sunt stocate împreună cu documentele și sunt folosite pentru administrarea acestora. Ele sunt de trei tipuri: • CAS Value - o formă de bază de concurență optimistică; • Time to Live (ttl) — timpul de expirare a unui document; • Flags - o varietate de opțiuni folosite la stocare, extragere, modificare și ștergere de documente;
Couchbase SDK
Cunoscut și sub numele de librării-client, acesta reprezintă uneltele de dezvoltare pentru diverse limbaje de programare. Sunt responsabile de comunicarea cu un Couchbase Server și oferă interfețe specifice limbajelor de programare necesare pentru a efectua operații pe baza de date. Librăriile-client știu să citească și să scrie datele direct de pe nodul primar. Odată cu schimbarea topologiei, librăriile-client redirecționează solicitările ce urmează către noile noduri gazdă.
Couchbase SDK
26
nr. 35/mai, 2015 | www.todaysoftmag.ro
vBuckets
Nu există o singură verigă slabă în sistem, deoarece toate nodurile dintr-un cluster sunt egale. Fiecare nod este responsabil doar de un set de date care i-au fost asignate. Toate nodurile dintr-un cluster rulează două procese primare: data manager și cluster manager. Data manager-ul este responsabil de administrarea datelor din partițiile acelui nod, în timp ce cluster manager se ocupă de operațiile de comunicare între nodurile cluster-ului. Reziliența sistemului este posibilă datorită replicării de documente. Procesul cluster manager coordonează comunicarea dintre datele replicate cu alte noduri din cluster, iar procesul data manager supervizează replicile ce sunt asignate de către cluster către nodul local. În mod natural, partițiile replicate sunt distribuite pe mai multe noduri, astfel încât să se evite situația în care partițiile replicate sunt stocate pe același nod ca cele active.
Resilience
TODAY SOFTWARE MAGAZINE Documentele sunt situate în Bucket-uri și documentele dintrun Bucket sunt izolate de documentele din alte Bucket-uri din perspectiva operațiilor de căutare și interogare. Când se crează un nou Bucket, este posibilă configurarea numărului de replici (maxim trei) pentru acest Bucket. În cazul indisponibilității unui nod (server crash), sistemul va detecta problema, va localiza replicile documentelor ce au fost plasate în acel nod și le va promova la statusul de activ. Sistemul menține o mapare de cluster care definește topologia cluster-ului, iar acestă mapare este modificată la fiecare problemă apărută ce afectează nodurile din cluster. Această funcționalitate se bazează mult pe implementarea librăriilor-client folosite de aplicațiile ce necesită interacționarea cu un server Couchbase. Clienții sunt într-o comunicare continuă cu nodurile din cluster. Aceștia extrag maparea actualizată a clusterului, după care redirecțioanează cererile către noile noduri ca urmare a schimbării topologiei. De asemenea, clienții participă la balansarea “load”-ului de request-uri emise spre baza de date. Procesul responsabil de balansarea “load”-ului este și el distribuit între mai multi clienți. Schimbările de topologie sunt coordonate de către un orchestrator, care nu este altceva decât un nod ales să joace rolul arbitrului în cazul schimbărilor de configurare din cluster. Schimbările de topologie sunt comunicate către toate nodurile din cluster. Chiar și în cazul în care nodul orchestrator devine indisponibil, un alt nod poate fi ales pentru a prelua rolul de arbitru pentru a asigura funcționarea neîntreruptă a sistemului.
Interogarea datelor Există două șabloane de interogare a datelor din Couchbase. Cel mai eficient este bazat pe interogarea de chei. Dacă este cunoscută cheia documentului căutat, complexitatea căutării unui astfel de document este de O(1). Este de asemenea posibilă căutarea documentelor multiple folosind operația multi-get. Extragerea documentelor multiple este foarte eficientă în cazul în care aplicația client are de a face cu o listă de documente, deoarece numărul de interacțiuni este redus la minim. Un alt șablon de interogare a datelor este bazat pe așa numitele View-uri, cunoscut și sub numele de index. Acestea reprezintă un mecanism folosit pentru interogarea de date din Couchbase. Pentru a defini un View, se creează un document specific numit “design document”, care conține un cod JavaScript ce
implementează operațiile de map-reduce. “Design document”-ele sunt legate de un anumit Bucket, ceea ce înseamnă că interogările nu se pot efectua pe mai multe Bucket-uri. Consistența eventuală joacă un rol important în cadrul View-urilor. Adăugarea, modificarea sau ștergerea unor documente dintr-un Bucket nu produce schimbări ce sunt vizibile imediat. Parametrii de interogare oferă posibilitatea de filtrare a unui index. Spre exemplu, se poate defini o căutare ce returnează un singur document sau un set de documente aflate într-un interval. Indexii din Couchbase sunt actualizați incremental. O modificare nu produce reconstrucția întregului index. Modificările implică doar acele documente care au fost adăugate sau șterse de la ultima modificare. Un index se poate configura în anumite circumstanțe. Spre exemplu, după un interval de timp sau când un număr de documente au fost actualizate.
Performanța Performanța trebuie măsurată folosind scenariile similare unui mediu din producție. Acest lucru poate ajuta să înțelegem caracteristicile performanței pentru anumite tipuri de situații și să alegem tehnologia potrivită pentru cerințele aplicației dezvoltate. Unul dintre testele de performanță de referință pentru compararea tehnologiilor NoSQL este YCSB (Yahoo Cloud Serving Benchmark). Scopul acestuia este să se canalizeze asupra testării diverselor tipuri de baze de date și asupra analizei performanței. YCSB este open-source, extensibil, are un număr mare de conectori pentru diverse tipuri de tehnologii, este reproductibil și compară latența vs randament (throughput).
Reads P99
www.todaysoftmag.ro | nr. 35/mai, 2015
27
programare
Introducere în Couchbase - soluție NoSQL bazată pe Documente Toate operațiile de citire/scriere sunt executate pe nodurile primare.
Monitorizare Couchbase Server include un set complet de statistici și informații de monitorizare. Statisticile sunt oferite prin intermediul interfețelor de administrare. Una dintre ele este consola de administrare web, care include grafice în timp real a datelor de performanță.
Writes P99
Rezultatele au arătat că tehnologia Couchbase oferă latența cea mai mică și throughput-ul cu valori mai mari prin comparație cu tehnologiile concurente.
Performanță și consistență Pentru asigurarea consistenței, este importantă execuția operațiilor de citire/scriere pe nodurile primare. Soluțiile NoSQL ce se bazează pe un singur nod primar sunt limitate din punct de vedere al performanței, deoarece clienții nu pot folosi la capaciMonitor Graph tate maximă celelalte noduri aflate în cluster. Prima alternativă Statisticile sunt împărțite în mai multe grupuri, permițând este de a efectua operația de citire pe toate nodurile (atât primare identificarea diferitelor tipuri de probleme: cât și secundare). În acest caz, performanța de citire este foarte • Per Nod - indică utilizarea de procesor, memorie, I/O pe bună, însă nu mai este garantată consistența pentru că replicarea fiecare server din cluster; datelor este asincronă. A doua alternativă este replicarea sincronă • Per vBucket - indică statisticile de utilizare și datele de care asigură consistența datelor, însă contribuie la degradarea performanță pentru fiecare vBucket; performanței. • Per cozi de disc - monitorizeaza cozile folosite pentru citirea și scrierea informațiilor pe disc și între replici. Poate fi util pentru a vedea dacă cluster-ul necesită extindere prin adăugare de noduri noi.
Exemple Activitatea utilizatorului în timp real Evenimentele legate de activitatea utilizatorului sunt consumate de un sistem de messaging (kafka) pentru a stoca informațiile relevante în Couchbase. Acest serviciu este capabil să răspundă în timp real la următoarele întrebări: când un anumit utilizator Single Primary Node a fost activ ultima dată? A jucat vreodată un anumit joc? Toate Prin comparație cu prima abordare, Server-ul Couchbase asi- interogările pe acest serviciu se execută extrem de rapid. Bazat pe gură consistența datelor. De asemena, acesta execută operațiile de răspunsuri la aceste întrebări, alte aplicații sunt capabile să segcitire doar pe nodurile primare pentru asigurarea consistenței. menteze clienții pentru diverse flow-uri de business. Singura diferență este că toate nodurile sunt utilizate la capacitate maximă, pentru că fiecare nod este primar pentru un subset de Stocarea preferințelor utilizatorului partiții de date. Stocarea diverselor informații despre preferințele utilizatorului ce pot fi folosite între mai multe produse ale unei aplicații web. Această soluție poate fi folosită ca alternativă la folosirea sesiunii HTTP, cookie-urilor sau stocarea în baze de date relaționale.
Managementul de promoții și monitorizarea progresului
Multiple Primary Nodes
28
nr. 35/mai, 2015 | www.todaysoftmag.ro
Promoțiile sunt necesare pentru atragerea clienților pentru a folosi diverse produse bazate pe criterii de calificare predefinite. Pe lângă stocarea promoțiilor definite, sunt stocate și documente care monitorizează progresul fiecărui utilizator care a optat pentru o anumită promoție. Sistemul este capabil să identifice în timp real dacă un utilizator a îndeplinit toate cerințele promoției și dacă acordă diverse tipuri de premii configurate per promoție.
TODAY SOFTWARE MAGAZINE Concluzii Folosirea explozivă a internetului, creșterea volumului de date procesat de aplicațiile moderne, natura diferită a datelor, necesită o analiză foarte atentă pentru alegerea tehnologiei responsabilă de stocarea datelor. Folosirea unei tehnologii NoSQL poate fi o decizie bună în cazul în care este necesar un model flexibil de date, suportul pentru un număr foarte mare de utilizatori concurenți, scalabilitatea și performanța sunt aspecte critice pentru a răspunde cerințelor de business. Couchbase este un jucător important în piața tehnologiilor NoSQL. Acesta se comportă excelent în situațiile unui “load” masiv atât la citire cât și la scriere, oferind posibilitatea unei scalări facile prin adăugare/eliminare de noduri din cluster în funcție de nevoile aplicației. Arhitectura și designul acestei tehnologii garantează consistență datelor și a performanței foarte bune în același timp. Testele au arătat că această tehnologie este lider pe piața soluțiilor similare. Deși nu se poate spune că această tehnologie e potrivită pentru orice problemă, Couchbase poate fi o soluție foarte bună pentru anumite tipuri de aplicații.
Resurse 1. 2. 3. 4. 5. 6. 7. 8.
RDBMS vs NoSQL; Couchbase Server Architecture Review; Betfair plus Couchbase; Couchbase blows competition; Couchbase performance benchmarking; No SQL performance series; 10 enterprise usecases for Couchbase; MongoDB vs Coucbase showdown.
www.todaysoftmag.ro | nr. 35/mai, 2015
29
testare
Portretul unui tester bun
T
otul începe cu dorința de a reuși… A deveni un tester bun nu înseamnă a ajunge la o destinație, ci mai degrabă a te afla în mod constant într-o călătorie pe tărâmuri noi.
Daniela Crișan
daniela.crisan@isdc.eu Senior Tester @ ISDC Romania
Este important să dezvoltăm aptitudini care ne vor ajuta să înțelegem fe lu l î n c are s e abordează testarea software-ului. Aceste aptitudini ne ajută să dobândim credibilitate și să câștigăm respectul altor profesioniști implicați în dezvoltarea software. Cu o bază solidă de aptitudini și competențe avem o șansă mai mare de a reuși în ceea ce facem: vom fi capabili să oferim produse mai bune, și în sfârșit, vom avea clienți și utilizatori mai satisfăcuți.
Ce este un tester?
“Un tester este o persoană care știe că lucrurile pot fi diferite.” Jerry Weinberg “O persoană care este în măsură să descopere informații extrem de relevante într-un mod rapid cu privire la un produs, care folosește la maxim orice resursă care este disponibilă pentru el/ea și care respectă oamenii implicați în proiect. Este o persoană în care se poate avea încredere.” Ilari Henrik Aegerter Definițiile de mai sus ale unui tester, ne amintesc faptul că testarea ține de gândirea critică și de creativitate. Testarea nu înseamnă să crezi tot ce se vede, ci în permanență să continui să păstrezi un spirit de investigație. Prin urmare, dorința noastră de-a reuși și de-a deveni buni testeri, se reflectă în câștigarea respectului și încrederii echipei noastre. Noi nu suntem acolo doar la vânătoare de greșeli, ci suntem acolo pentru a câștiga încrederea că
30
nr. 35/2015 | www.todaysoftmag.ro
noi suntem gardienii care asigurăm calitatea unui produs și satisfacția clientului.
CE face un tester?
“Testarea înseamnă punerea sub semnul întrebării a produsului cu scopul de a-l evalua.” James Bach Această definiție a testării include unul din cele mai importante aspecte ale testării: identificarea și livrarea informației. Testarea presupune dezvăluirea necunoscutului. În cazul în care calitate înseamnă valoare pentru o persoană (așa cum a fost definită de Weinberg), atunci testarea presupune descoperirea oricărui lucru care amenință această valoare. Pentru a descoperi care sunt amenințările, un tester trebuie să fie capabil să realizeze o varietate de activități, cum ar fi un review al cerințelor, să adresezez întrebări bune și să interacționeze cu produsul astfel încât să identifice orice informație utilă și posibile riscuri. Având aceste definiții, vom prezenta cele mai dorite aptitudini și ce ne face pe noi să fim buni testeri. După ce am citit opiniile unor experți în domeniu (James McCaffrey, Tony Bruce, Jennifer Lent, Lorinda Brandon, Ilari Henrik Aegerter), am intervievat de asemenea membrii unei echipe (project manager,
arhitecți, programatori și requirements engineer), reieșind urmăFără o gândire critică ar fi dificil de planificat testele care toarea listă de aptitudini: verifică că totul e conform obiectivelor proiectului. Persoanele cu o bună gândire critică pot să își identifice propriile lipsuri în înțelegere: ele știu exact când și cum să ceară clarificări. Aceste persoane pot câștiga mai mult respect din partea unui coleg recunoscând ceea ce nu știu, decât să trateze superficial ceea ce nu înțeleg.
Pune intrebări bune James Bach afirmă: “Există o deosebire între a avea o întrebare și a pune o întrebare.” Întrebările bune generează răspunsuri bune. Bazat pe aceste rezultate doresc să subliniez cele mai imporEste important să punem întrebări cu scopul de a obține cât tante cinci aptitudini ale unui tester: mai multe informații posibile și de a clarifica orice dubiu, astfel încât să nu facem presupuneri atunci când testăm. Cu cât știm Comunicarea mai bine ceea ce este important pentru business cu atât e mai “Dacă nu poți scrie mesajul tău într-o propoziție, atunci nu vei bună hotărârea pe care o luăm. Nu este suficient să întrebăm, este fi capabil să îl prezinți într-o oră.” Dianna Booher foarte important să întrebăm persoana potrivită, întrebarea potriÎn calitate de testeri profesioniști trebuie să avem aptitudini vită, la momentul potrivit, cu tonul potrivit și în locul potrivit. bune de scriere și de comunicare verbală. Trebuie să fim capabili să citim și să analizăm cerințele produsului, să adunăm informația Dorința de a învăța necesară, să planificăm testarea, să scriem rapoarte clare și coeBach a afirmat: “E nevoie de abilitatea de a iubi confuzia care rente pentru management (atât rapoarte formale cât și rapoarte vine odată cu învățarea lucrurilor complicate.” Totul constă în ad-hoc). Avem nevoie de abilitatea de a asculta în mod critic și de perseverență și în dorința de a nu renunța atunci când ceva te a vorbi rațional în cadrul oricăror întâlniri. face să te simți prost pentru câteva minute. Avem nevoie sa fim lideri, tehnicieni și politicieni în același Cunoașterea nu e ceva static, mai ales în domeniul tehnic. timp. Este una dintre cele mai dificile aptitudini de gestionat, Procesul de învățare continuu este esențial pentru a deveni mai aceea de a transmite o problemă în mod clar și concis, pe un buni în ceea ce facem. ton constructiv, care să denote gravitatea problemei. Devine și mai complicat pe măsură ce realizezi cât de diferit este publicul Flexibilitate tău - pe de o parte, o problemă trebuie să fie bine definită tehnic De ce flexibilitate? Avem nevoie de această aptitudine pentru atunci cănd este adresată unui programator, pe de altă parte, să a identifica când este necesar să ne mutăm atenția de la detalii fie descrisă suficient de clar stakeholder-ului non-tehnic pentru a la explorare. putea lua o decizie adecvată cu privire la impactul problemei asuPentru a fi capabili să vedem detaliile trebuie să ne încetinim pra proiectului. Deseori, testerii trebuie să își folosească puterea ritmul, să ne uităm mai îndeaproape și să observăm cu atenție. de convingere, atunci când se află în situația de a pleda pentru Capacitatea de a observa când ceva nu funcționează coreso anumită acțiune. Persuasiunea este o problemă cu care mulți punzător este crucială în identificarea problemei, ca să nu mai testeri se luptă și care, dacă este folosită în mod greșit, poate crea vorbim despre validarea logică a unei afaceri complexe. probleme de lungă durată în echipa de proiect. Dacă nu dorim să ne pierdem prea mult în detalii atunci ar trebui să continuăm explorarea, care ne oferă de altfel oportuniGândire critică tatea de a fi mult mai creativi. Un tester specialist poate analiza un produs sau o cerință prin Lista abilităților poate continua la fel cum și noi suntem întrobservare. El este capabil să vadă întregul context și, în același o continuă călătorie. Secretul meu pentru a deveni un tester bun timp și piesele care îl compun. Acest lucru este esențial atunci constă în pasiune și curajul de a continua călătoria pe teritorii când vine vorba de a înțelege cât mai bine produsul și de atribuire noi. Aceste teritorii noi au apărut odată cu curiozitate de a le adecvată a priorităților pentru defecte. descoperi.
www.todaysoftmag.ro | nr. 35/mai, 2015
31
programare
Ce este de fapt TDD?
D
in când în când particip la discuții cu oameni despre ceea ce este TDD . Datorită faptului că utilizez TDD , dar și că îl explic altora , am dezvoltat o anumită cunoaștere în timp referitoare la acest subiect. De aceea, m-am hotărât să scriu acest articol care detaliază punctul meu de vedere în legătură cu ce este TDD. Sper că îl veți găsi util. Cum ar putea fi un articol lung, voi scrie pentru Today Software Magazine o serie de articole mai scurte pe această temă. Iată-l pe primul. Alexandru Bolboacă
alex.bolboaca@mozaicworks.com Agile Coach and Trainer, with a focus on technical practices @Mozaic Works
32
nr. 35/2015 | www.todaysoftmag.ro
Versiune scurtă Designul concepe și dă formă în mod intenționat artefactelor care rezolvă probleme. Codul pentru computer este un astfel de artefact; de aceea, orice bucată de cod care rezolvă în mod intenționat o problemă este conceput. Astfel, TDD este o metodă pentru a obține design. Un design bun înseamnă un design care are anumite calități. Cea mai comună calitate pe care o căutăm astăzi este aceea de a putea fi schimbat. TDD oferă câteva calități integrate: testabilitate și rezistență la erori crescută. Dezvoltatorul trebuie să lucreze la îmbunătățirea altor calități, precum aceea de a fi șanjabil. De aceea, specialiștii folosesc principiile SOLID pentru a-și ghida deciziile legate de design. În acest fel se justifică faptul că designul care deține aceste calități obținute prin TDD, depinde în mare măsură de abilitățile designerului. Atunci când face TDD, dezvoltatorul concepe design înainte de a începe (deoarece utilizează un cadru web MVC) și pe toată durata ciclurilor TDD: când scrie testul (alege numele clasei/ metodei, decide
ce tipuri de clase să utilizeze, etc.), când implementează codul (nume variabile) și când face restructurare. Eu propun ideea că TDD este o metodă pentru design incremental, deoarece soluția crește pas cu pas. Aceasta are legătură cu rezolvarea de probleme, iar cercul se închide – deoarece designul înseamnă soluționarea unei probleme. Interesant? Mai avem încă multe!
Design înseamnă să creezi un artefact care rezolvă o problemă Dintr-un oarecare motiv, termenul de ”design” a devenit supraîncărcat și ambiguu. Să luăm pentru un moment exemplul unui smartphone. Ce definește designul său? Cum arată? Cum se comportă? Materialele care îl compun? Au telefoanele mobile mai vechi un ”design” sau numai smartphone-urile mai noi și mai ingenioase au ”design”? Lucrurile devin mai complicate când vorbim despre software. Are ”design” o bucată de cod care urmează principiile SOLID? Există ”design” atunci când este cod procedural? Există ”design” când are metode lungi? Eu am început să pun aceste întrebări în urmă cu câțiva ani, deoarece nu aveam
nicio idee în legătură cu răspunsul. Singura modalitate de a găsi răspunsuri era să învăț mai multe despre design în alte domenii decât software. La urma urmei, designul este o disciplină care a existat timp de sute de ani înainte de industria noastră. În sfârșit, am găsit un răspuns categoric și satisfăcător: ”Designul înseamnă să concepi și să dai formă unor artefacte care rezolvă probleme; artefactul (este)… orice produs de creare intenționată, inclusiv … software-ul”. Karl T. Ulrich, ”Design – crearea artefactelor în societate” De aceea, orice bucată de cod care rezolvă o problemă într-un mod intenționat este design. Telefoanele mai vechi aveau ”design” deoarece ele rezolvau o problemă: conversațiile la telefon cu alți oameni. Dar dacă design este orice bucată de cod care rezolvă o problemă în mod intenționat, de ce utilizăm principiile SOLID sau cod curat sau alte lucruri? Probabil din aceleași motive pentru care designerii grafici utilizează principii precum alinierea sau accentuarea. Pentru a face designul mai bun.
Designul bun este design cu anumite calități Lucrul cel mai dificil de înțeles în legătură cu designul este că designul are anumite calități. De exemplu, una dintre calitățile designului experienței de utilizator este calitatea sa de a fi ”comod în utilizare” – cât de ușor este să folosești aplicația și cât de repede poate utilizatorul să își rezolve problema cu ea. Aceste calități sunt contextuale. De exemplu, o experiență a utilizatorului de mobil este diferită de experiența utilizatorului web. Mediul contează în acest caz. Dar designul software? Care sunt
câteva dintre calitățile sale? Iată o listă rapidă care mi-a trecut prin cap: Calități statice (când codul nu rulează): • Lizibilitatea: codul poate fi citit ușor. • Navigabilitatea: se poate naviga ușor în cod. • Logica: prin citirea codului, poți să îți dai seama ușor cum se comportă în perioada de rulare. • Calitatea de a fi schimbat: codul poate fi modificat rapid când repari un bug sau adaugi o funcționalitate. Calități dinamice (valabile în perioada de rulare): • Performanța, • Scalabilitatea, • Securitatea, • Rezistența la dezastre, • Rezistența la erori: este dificil să faci o greșeală atunci când modifici codul. Calitățile designului software sunt contextuale, de asemenea. În cazul unei aplicații web tipice, calitatea de a fi șanjabil și performanța sunt în mod tipic cele mai importante, urmate îndeaproape de scalabilitate și securitate. Pentru aplicațiile mobile, performanța și modificabilitatea sunt importante. Pentru serviciile web de date cu volum mare, performanța și scalabilitatea sunt cheia. Și așa mai departe. Un lucru este constant: capacitatea de a fi modificat este importantă în aproximativ 90% dintre aplicațiile pe care le dezvoltăm azi. Noi trebuie să le modificăm des, deci este util să le putem schimba rapid. Date fiind toate acestea, ce este un design bun? Ar trebui să fie ușor: Designul bun este o bucată de cod care rezolvă o problemă în mod intenționat și care etalează calitățile de design necesare în contextul dat.
Motivul pentru care noi tot vorbim despre lucruri precum cele patru principii ale designului simplu, principiile SOLID și Cod Curat este pentru că avem nevoie de o calitate pe care aceste principii o oferă: modificabilitatea. Faptul că avem teste ne ajută să evităm greșelile atunci când modificăm codul. Principiile SOLID sunt toate despre ușurința de a modifica codul. Duplicarea ne împiedică să facem schimbări rapid. Numele nepotrivite ne împiedică să înțelegem codul și doar îl fac mai dificil de modificat. Este important de notat, totuși, că aceasta nu este singura calitate a designului pe care ar trebui să o urmărim. Tehnologii precum nodejs sau vertx preferă performanța în locul calității de a putea fi schimbat. Proceduri memorate sau concepții pentru crearea rapoartelor au același efect. Punerea în balanță a calităților designului este unul dintre cele mai dificile lucruri pentru un programator. Modificabilitatea este, totuși, un bun început, fiind o preocupare atât de larg răspândită. Dacă înțelegem ce este designul și ce este un design bun, atunci ce este TDD de fapt? Urmăriți-ne în articolul următor, din numărul viitor al revistei.
www.todaysoftmag.ro | nr. 35/mai, 2015
33
programare
Loguri și metrici în Java
S
untem într-o formă mai mare sau mai mică dependenți de loguri – aceasta este realitatea. Scopul acestui articol nu este să prezint o anumită tehnologie Java de logare ci nivele superioare de abstractizare pentru colectarea, memorarea și analiza lor. De asemenea, intenția este de a prezenta cum acestea ne ajută pentru a avea o privire de ansamblu mai clară asupra ceea ce se întâmplă în aplicația/aplicațiile noastre dacă logăm informații cu sens și un scop clar definit în utilizarea lor. Dar ce sunt aceste loguri și de ce avem nevoie de ele? Un mesaj de log este un mic punct, dar mai multe astfel de puncte înseamnă o linie, liniile, o formă sau o direcție care trebuie interpretată. Menționăm mai jos și alte trăsături: • Starea lor e constantă, nu se modifică. • Sunt sute de mii, milioane pe zi –numărul lor depinde de natura aplicației, de utilizarea sistemelor adiționale pentru auditarea ei, precum și de prezența aplicațiilor complexe. • Durata de viață de după creare e relativ scurtă: 30 de zile, 6 luni sau poate chiar mai mult pentru sistemele financiare sau care conțin informații mai sensibile. Depinde din nou de natura aplicației, de linia de business care o acoperă și dacă se folosesc sisteme adiționale pentru auditare – după care pot ajunge să fie menținute în mod pasiv în arhive, etc.. În aplicațiile monolitice gruparea logurilor se face de obicei pe zile i.e. JBoss filename+”.yyyy-MM-dd iar analiza lor este de cele mai multe ori anevoioasă, fiind necesare cunoștințe destul de avansate în expresii regulare și comenzi Linux sau scripturi de Python, Scala, etc.. De asemenea, aplicațiile sunt rulate în general de servicii de hosting private (cloud), iar conectarea din exterior necesară preluării acestor fișiere de log, care pot să aibă o mărire considerabilă chiar și arhivate, devine consumatoare de timp. La acestea se adaugă și o îngreunare a procesului de analiză. Astfel că de cele mai multe ori, nu sunt analizate decât atunci când cineva începe să se plângă de o problemă, când sistemul nu mai răspunde cu aceeași viteza solicitărilor sau când o greșeală se repetă
Img. Load-balancer/proxy (tutorialspoint.com)
34
nr. 35/mai, 2015 | www.todaysoftmag.ro
pentru o durată de timp îndelungată. Ori în cazul extremis - nu mai funcționează. Chiar și în aplicați monolitice începem să observăm sisteme adiacente aplicației noastre (proxy-uri, load-balance) care la rândul lor au loguri care conțin informații importante despre modul în care e folosită aplicația, atacuri de securitate, timpi de răspuns, etc.. Dar ce e de făcut atunci când trecem aplicațiile pe arhitectură descentralizată i.e. micro-services? Cum colectăm atunci aceste loguri de pe fiecare mașină în parte? Cum facem legătura între aceste loguri acolo unde este necesar, cât de ușor puteam realiza acest lucru?
Arhitectură micro-service (tigerteam.dk)
Dacă prelucrăm aceste loguri doar atunci când lucrurile merg prost, s-ar putea, în unele cazuri, să fie prea târziu. De aceea, sunt de părere că o analiză continuă a lor e imperios necesară în fazele de validare, staging. Acest demers se impune și în primele luni de după punerea în producție sau cel puțin până când lucrurile devin stabile. Calitatea de stabil depinde de fiecare funcționalitate / produs / politică a companiei / contract de mentenanță încheiat, etc.. Chiar și în faza de dezvoltare putem avea beneficii dacă urmărim anumite informații/metrici din aceste loguri. Să nu neglijăm importanța a ceea ce conțin logurile generate de aplicație . Conținutul lor aduce valență pozitivă prin informații care pot fi de ajutor în procesele următoare. Aici avem libertatea deplină asupra conținutului și putem să ni-l personalizăm cum dorim – recomand totuși folosirea unui template de logare în proiect/module. Întrucât foarte multe
aplicații Java enterprise au și module de procesare, migrări de date, task-uri asincron, rapoarte, etc. care nu îți oferă un feedback direct (cum se întâmplă cu un request web) atunci aceste informații devin vitale pentru a putea garanta și cunoaște dacă sistemul funcționează corect. Soluția aplicată de noi - și nu doar de noi pentru că este o soluție foarte populară și des folosită:
1. ELK (Elastic, Logstash (+ loggregator), Kibana)
Apeluri ale metodelor:
public void incIdsToMigrate(long d) { migrationSizes.update(d); } public void incFailedMigrationSessions() { failedMigrationSessions.inc(); } //migration util class @Override public Response migrate(String entityCanonicalName, List<String> idSToMigrate) { final Timer.Context context = MetricsUtils.getInstance().getMigrationTimer().time(); final MigrationSession migrationSession = new MigrationSession(entityCanonicalName, idSToMigrate.size()); try {
Img.Logs - Pipeline (blog.xebia.fr - Vincent S.)
… //validation, others MetricsUtils.getInstance(). incIdsToMigrate(idSToMigrate.size()); …. } finally { context.stop(); if (migrationSession.isGeneralError()) { MetricsUtils.getInstance(). incFailedMigrationSessions(); } }
Proces: 1. Aplicațiile folosesc appender-ul pentru consolă (log4j + slf4j) - stdout. 2. De aici folosim loggregator (CloudFoundry) – agent care preia stream-ul de date de la stdout. 3. Logstash primește logurile, le procesează (ETL, transformare date în formate generice, etc.). Loguri: [MetricsUtils.info:110] type=TIMER, name=com.... 4. Logurile sunt indexate apoi în Elastic. MigrationUtilsImpl.migration-timer, count=463, 5. Folosim Kibana pentru a le afișa. min=14185.432459, max=120866.415675,
mean=48638.78311404348, stddev=33618.49316878979, median=33732.338869, p75=68521.92468899999, p95=120788.85010139999, p98=120866.415675, p99=120866.415675, p999=120866.415675, mean_ rate=0.0023544359078945367, m1=2.964393875E-314, m5=2.2626576149598838E-82, m15=4.532485314583121E-30, rate_unit=events/second, duration_unit=milliseconds [MetricsUtils.info:108] type=HISTOGRAM, name=com….. MigrationUtilsImpl.migration-sizes, count=463, min=4, max=35, mean=19.541666666666668, stddev=12.021644127831763, median=19.5, p75=33.75, p95=35.0, p98=35.0, p99=35.0, p999=35.0
Astfel se creează un sistem centralizat de loguri a tuturor aplicațiilor/modulelor care deservesc aceluiași scop, cu formate [MetricsUtils.info:104] type=COUNTER, name=com….Mide loguri comune, aceleași formatări de date, decupare de text ce grationUtilsImpl.migration-sessions-failed, count=0 poate fi ignorant, precum și alte îmbunătățiri pentru a le face mai ușor de urmărit, corelat și interpretat. Totodată analiza zilnică/săptămânală a logurilor și corelarea lor cu valori lunare într-o aplicație sau serviciu web și nu numai, 2. Metrics. Core Metrics. ne poate ajuta să monitorizăm starea actuală precum și evoluția Librăria de la CodaHale e una dintre cele mai populare librării aplicației sau cum e folosită pentru a putea răspunde proactiv la de metrici folosită în aplicații open source de succes (Cassandra). noi provocări. [LoggingFilter.filter:100] 13bd85d2-1464-406a-70eeAceasta pune la dispoziție un registru: 99ef10545989 - method=GET code=200 url=workbases Logger log = LoggerFactory.getLogger(MetricsUtils. class); MetricRegistry metrics = new MetricRegistry(); Slf4jReporter reporter = Slf4jReporter. forRegistry(metrics) .outputTo(log) .convertRatesTo(TimeUnit.SECONDS) .convertDurationsTo(TimeUnit.MILLISECONDS) .build();
care e ulterior folosit de către: 1. counter
Counter failedMigrationSessions = metrics.counter( MetricRegistry.name(Entity.class, „migration-sessions-failed”));
2. histograme
Histogram migrationSizes = metrics. histogram(MetricRegistry.name(MigrationUtilsImpl. class, „migration-sizes”));
3. timer
Timer migrationTimer = metrics.timer(MetricRegistry. name(MigrationUtilsImpl.class, „migration-timer”));
4. altele - care nu intră în scopul acestui articol.
Round trip response duration=25 millis [LoggingFilter.filter:100] 084f6732-8824-4311-7d3dd8596f8bfc43 - method=GET code=200 url=workbases Round trip response duration=29 millis [LoggingFilter.filter:100] 71ddc0fa-281f4f80-6664-1374aa14b0c2 - method=GET code=200 url=registrationruns - Round trip response duration=232 millis [LoggingFilter.filter:100] ebbf5225-7800-46b9-5e1c-bfec7d25dec1 - method=GET code=200 url=registrationruns - Round trip response duration=318 millis [LoggingFilter.filter:100] cb721bc3-adea-4bfd-708d8f8a7c39c9aa - method=POST code=201 url= registrationruns - Round trip response duration=5 millis
Acest tip de loguri ne permit să menținem astfel de statistici:
Concluzii: Trecerea de la aplicații monolitice la arhitecturi distribuite aduce flexibilitate și noi provocări. Una dintre ele e modul în care se realizează logarea, modul cum le salvăm și accesăm. Un aspect important îl are și calitatea informațiilor pe care le logăm. Știm www.todaysoftmag.ro | nr. 35/mai, 2015
35
programare Loguri și metrici în Java
că loguri precum“Save ‘<entity>’” nu aduc prea mult sens. Astfel posibilitatea să reacționam la variații ( a timpilor de răspuns, a trebuie să ne asigurăm ca logăm acele informații „prețioase” care numărului de itemuri procesate pe minut ) care sunt primul semn au sens în timp și ne ajută să înțelegem modul în care e utilizat sis- că nu avem un sistem stabil. temul, precum și performanța actuală a acestuia sau necesitățile viitoare. O continuă monitorizare a logurilor, corelarea lor poate să Vasile Mihali vasile.mihali@arobs.com ne dea o nouă viziune asupra cum putem îmbunătăți un sistem sau cât de stabil îl putem face. Condiții de bază într-un sistem Senior Software Engineer @ Arobs distribuit sunt vizibilitatea pe care noi o avem asupra a ceea ce se întâmplă și monitorizarea logurilor. Numai așa vom avea
36
nr. 35/mai, 2015 | www.todaysoftmag.ro
TODAY SOFTWARE MAGAZINE
management
Organizații bine crescute
L
a fel ca și în cazul oamenilor, și în cel al organizațiilor, buna creștere se referă la principiile, valorile, credințele și comenzile transmise prin educație. În context profesional, numim acest pachet educațional Cultură Organizațională. În rândurile următoare vom analiza câteva din elementele care influențează buna creștere organizațională.
Ce îl determină pe angajat să ascundă greșelile, atunci când greșește? Să dea vina pe altcineva sau pe destin? Ce îl face să spună da, atunci când vrea să spună nu? Cum ajunge să se ascundă după sau să își justifice acțiunile prin proceduri? De ce se ajunge la situația în care, în loc să țintească rezultatele, preferă să caute vinovați? De ce refuză schimbarea? Care este motivul pentru care oamenii ajung să caute defecte în tot ce văd în jur? Să îi controleze tot timpul pe cei din preajma lor. Cum ajunge un angajat să ascundă o informație de care are nevoie un coleg sau să încerce să “dea” bine în detrimentul altuia? De unde nevoia unora de a realiza totul perfect, în detaliu? Cum se justifică faptul că în unele companii, angajații lucrează eficient și obțin rezultate? Ce îi face să își comunice punctele de vedere fără teamă? Să încerce lucruri noi? De ce în unele organizații oamenii se ajută reciproc și oferă suport, celor din jur, necondiționat? Cum ajung oamenii să creadă că în echipă se rezolvă totul mai eficient și să acționeze în sensul acesta? Cum ajungem să avem angajați motivați sau, dimpotrivă, frustrați? Ce îi face pe angajați să își dorească să facă lucruri bune pentru organizație? Și ce îi determină pe oamenii valoroși să aleagă o companie în detrimentul alteia? De ce auzim oamenii vorbind în termeni negativi despre organizația din care fac parte? Răspunsul la toate întrebările de mai sus se leagă, evident, de individualitatea fiecăruia, de cât de constructiv sau distructiv a ajuns să gândească, prin prisma educației primite și a experiențelor de viață. Aceste stiluri personale de gândire și acțiune sunt influențabile, însă, de
contextul în care suntem poziționați. La locul de muncă, cu toții ne adaptăm comportamentele la criteriile de succes pe care le promovează organizația, la ceea ce valorizează aceasta și la normele comportamentale vizate de cultura pe care compania o promovează. Cu alte cuvinte, din elementele culturale valorizate de organizație extragem asemenea angajaților, concluzii referitoare la ceea ce se așteaptă de la noi la locul de muncă, în termeni comportamentali. Dinamica stilurilor noastre de gândire este dată de două tipuri de nevoi aflate la poli opuși: nevoia de siguranță și cea de satisfacție, de fericire. Culturile organizaționale constructive sunt cele care dezvoltă un context ce facilitează gândirea orientată către satisfacție, care cresc angajați ghidați de dorința de a fi fericiți, de a avea rezultate, de a crește odată cu organizația și de a-și da plus valoare prin dezvoltare personală și valorizarea celor din jur. La polul opus, culturile distructive împing angajații către stiluri de gândire orientate către siguranță, către protejarea sinelui. Îi determină pe aceștia să acționeze cu teamă și nesiguranță. Să acumuleze frustrări și să vadă serviciul ca un rău necesar. Evident, în cele din urmă, să aleagă să părăsească respectiva organizație. Cultura organizațională se traduce în mintea angajatului în presupunerile acestuia despre așteptările pe care organizația le are de la el ca mod de a acționa. Altfel spus, ce are în minte un angajat când intră pe ușa de la birou, referitor la cum ar trebui să se comporte pentru a avea succes. Dacă, în calitate de angajați, înțelegem
că exprimându-ne gândurile avem de suferit atât timp cât ele nu coincid cu ale celorlalți, vom înceta să le comunicăm. Sau, dacă având alte idei decât ale șefului s-ar putea să fim penalizați într-un fel, vom înceta să le exprimăm. Dacă încercând să schimbăm procedurile pentru a le îmbunătăți avem de pierdut, vom începe să ne conformăm. Ori, dacă nu este dezirabil să tulburăm apele, vom evita să facem lucrul acesta, chiar și atunci când starea de fapt ne deranjează. Astfel de exemple definesc culturile pasiv defensive, orientate către siguranță, caracterizate prin stiluri de aprobare, convenționalism, dependență față de autoritate și evitarea asumării responsabilității. Ca angajați în organizații cu astfel de culturi înțelegem succesul prin rămânerea în zona de confort, lipsa de inițiativă, docilitate și refuzul schimbării. Sunt culturi care ne fac să acționăm din teamă și, în timp, să acumulăm frustrări. Dacă înțelegem că organizația dorește de la noi să fim tot timpul în control, să demonstram că suntem mai buni decât ceilalți sau să facem lucrurile perfect, atunci genul de comportamente pe care vom fi determinați să le asumam sunt cele de impunere, rivalitate, suspiciune, de exercitare de presiuni asupra noastră și a
www.todaysoftmag.ro | nr. 35/mai, 2015
37
management celorlalți. Dacă înțelegem că în organizația în care muncim nu este de dorit să greșim, atunci când o vom face vom încerca să ascundem aceste greșeli sau să îi găsim pe alții responsabili pentru ele. La astfel de concluzii ajungem când suntem angajați ai unor organizații care promovează culturi agresiv defensive, de competiție între angajați, control și presiune. Aceste culturi ne fac să acționăm din nesiguranță, să simțim tot timpul nevoia de a demonstra ceva și, în timp, duc la conflicte, lipsă de cooperare, tensiuni și relații de proastă calitate. Organizațiile constructive sunt cele care ne stimulează să înțelegem că așteptările de la noi sunt legate de a gândi în termeni de soluții, nu de a detecta probleme sau de a afla vinovați. Ne încurajează să ne exprimăm ideile și să gândim în afara cutiei, să îi valorizam pe cei din jur și să fim orientați către a dezvolta rețele de suport și a face echipă cu ceilalți. În astfel de organizații lipsește teama de a greși, nevoia de control și individualism, competiția distructivă și teama de schimbare. Astfel de culturi constructive se dezvoltă prin valorizarea deopotrivă a oamenilor și a rezultatelor pe termen lung, prin orientarea către îmbunătățire continuă și inovație, prin stimularea gândirii pe termen lung, a modurilor de lucru structurate, prin crearea premiselor de respect, încredere, comunicare deschisă și suport. Acestea sunt culturile în care oamenii se simt bine, ajung să fie fericiți și motivați să aducă plus valoare. Ceea ce motivează cu adevărat angajații este cultura în care este resimțit sentimentul de apartenență, este organizația în care angajații se simt valorizați, protejați, încurajați. Și, nu în ultimul rând, că rezultatul muncii lor este de valoare. Culturile constructive asigură succesul organizațiilor pe termen lung, iar impactul lor este vizibil în: • Motivație crescută, • Excelență în gestionarea clienților și calitate a serviciilor oferite, • Inovație,
38
Organizații bine crescute • Cooperare, sinergie în echipe și creșterea valorii fiecărui angajat, • Lipsa fluctuației de personal, • At r a c t i v i t at e a b r a n d u l u i d e angajator, • Și multe altele.
Cum ajungem să dezvoltăm culturi constructive? Prin definirea unor valori constructive, interiorizarea acestora de către liderii organizației și alinierea stilurilor de leadership la aceste valori și crearea premiselor de sustenabilitate la nivel de structuri organizaționale, sisteme de suport, clarificare a rolurilor și dezvoltare a competențelor necesare. Toate acestea pot fi dezvoltate prin acțiuni venite din definirea unei direcții strategice sănătoase, care să ia în considerare factorul cultural, înțelegând impactul decisiv pe care acesta îl are asupra eficacității organizației și asupra atmosferei din interiorul acesteia. Punctul de pornire este analiza culturii curente și a factorilor cauzali care duc la această situație. În paralel are loc definirea culturii dorite/ideale. Comparația dintre curent și ideal va scoate la lumină diferențele dintre situația actuală și cea dorită și ariile în care ar trebui să se intervină. În baza acestei analize putem extrage concluzii despre direcția strategică de urmat și crea premisele pentru a trece de la curent la ideal. Schema de mai jos arată modul în care cultura organizațională influențează satisfacția clientului, cel mai important indicator al succesului companiei pe termen lung. Succesul companiei pe termen lung este condiționat de asigurarea premiselor pentru o cultură constructivă, alinierea practicilor de leadership la aceste premise și asigurarea sustenabilității. Factorii care influențează cultura sunt: Misiune și filosofie (definirea misiunii și orientarea către client); Structuri (influență, împuternicire, implicare);
nr. 35/mai, 2015 | www.todaysoftmag.ro
Sisteme (recrutare și plasare, training și dezvoltare, gestionarea performanțelor); Tehnologii (autonomie, diversitate, feedback, job design, interdependență) și Competențe (comunicare, bazele puterii, leadership). Toate acestea devin ancore pentru schimbare. Când, într-o organizație, sistemele, structurile, tehnologiile și competențele se aliniază valorilor, viziunii, misiunii și obiectivelor pe de altă parte, atunci se creează premisele de dezvoltare ale unei culturi constructive. Cristian Philipp
cristian.philipp@essentialtm.ro Senior Consultant & Managing Director @ Essential Training and Consulting
programare
startup
Fizbo, Simply rent – aplicație mobilă pentru închirieri imobiliare
A
plicația a apărut în urma unei ambiții a unui fost student de la Facultatea de Automatică și Calculatoare din cadrul Universității Tehnice Cluj, care își căuta într-o zi o chirie în zona Observatorului. Vizitând un apartament de care nu a fost mulțumit și nemaivoind să se întoarcă acasă pentru a caută alte oferte pe calculator, acesta a căutat o aplicație pe telefon care să îi arate ce chirii sunt disponibile în zonă și negăsind nimic s-a gândit să dezvolte el una. Astfel s-a născut Fizbo.
Utilitate / funcționalități Lucian Pop
lucian.pop@fizbo.ro Cofondator @ Fizbo
Îți cauți chirie în regim normal sau hotelier, ești proprietar și vrei să ai o legătură directă cu potențialii clienți? Fizbo îți vine în ajutor prin aplicația mobilă de Android și IOS care simplifică și inovează întregul proces de închiriere.
Ce face ca această aplicație să fie simplă și inovativă? • Printr-un simplu buton de switch, aplicația se transformă într-o platformă de închirieri în regim hotelier sau într-o platformă de închirieri în regim normal. • Dispozitivul este localizat automat chiar și cu GPS-ul oprit. Se expun pe hartă ofertele din proximitatea dumneavoastră. • Harta interactivă afișează pinurile cu locația exactă a chiriilor precum și prețul acestora. • Oferă vizualizarea detaliilor unei chirii: poze, compartimentare, dotări, locație și descrierea detaliată. • Proprietarul poate fi contactat direct din anunț. • Ești direcționat pană la locația imobilului. • Salvarea chiriei. • Chiria poate fi raportată ca fiind abuz, dacă există această problemă. • Anunțurile pot fi căutate, filtrate după locație, preț, specificații, suprafață, facilități. • Se poate adăuga în mai puțin de două
minute o altă chirie. • Editarea chiriilor adăugate. • Chiriile adăugate sau salvate pot fi șterse printr-un simplu swype. • Autentificarea rapidă prin Facebook, dar se permite și autentificare clasică prin crearea unui cont cu e-mail și parolă. • Editarea datelor utilizatorului. • Datele utilizatorului sunt securizate prin comunicarea cu serverul peste http.
Arhitectura aplicației Partea de client este reprezentată de aplicația nativă de Android și aplicația nativă de IOS. Partea de server este constituită din servicii web Java RESTful care rulează într-un server web Tomcat, o instanță de MySQL pentru stocarea metadatelor și un File Server pentru stocarea pozelor. Comunicarea între client și server se face peste protocolul https, mesajele trimise fiind în format JSON. 1. Aplicația de Android Aplicația de Android este disponibilă pentru toate telefoanele și tabletele cu Android începând de la versiunea 2.2 Froyo și până la ultima versiune 5.1 Lollipop. Arhitectura aplicației se mulează perfect pe sistemul de operare și nu interferează cu procesul principal responsabil pentru managementul aplicațiilor și răspunderea la comenzile utilizatorului.
www.todaysoftmag.ro | nr. 35/mai, 2015
39
startup Fizbo, Simply rent – aplicație mobilă pentru închirieri imobiliare SDWebImageView, iar persistența datelor este asigurată de sistemul de management al datelor CoreData. Harta interactivă folosește framework-ul MapKit, iar pentru preluarea datelor de pe server și parsarea lor se folosesc tot framework-uri native Objective C. Pentru logarea utilizatorului cu Facebook, se utilizează kit-ul de dezvoltare Facebook iOS.
Serverul
În construirea aplicației s-au folosit următoarele tehnologii: • Java Core: logica de business, • Google Maps, Google Geocoding API: harta interactivă, • Google Places: sugestii și autocompletare de locații, • Volley: caching-ul imaginilor, • Retrofit: client REST, • Facebook Android SDK : autentificare cu Facebook.
Aplicația de IOS Aplicația Fizbo este concepută pentru a funcționa pe toate tipurile de dispozitive mobile Apple: iPod, iPhone și iPad, iar versiunea minimă a sistemului de operare iOS suportată este 7.0 În ceea ce privește arhitectura aplicației se folosește șablonul arhitectural MVC, împreună cu alte tehnici de programare specifice limbajului Objective C. Astfel, arhitectura proiectată este modulară și permite modificarea componentelor existente sau adăugarea unor noi componente cu ușurință. Pentru scalarea interfeței utilizatorului pentru toate dimensiunile dispozitivelor s-a folosit AutoLayout. Caching-ul imaginilor se realizează folosind componenta
40
S e r ve r u l apl i c aț i e i Fizbo are o arhitectură ‘ light’ și expune funcționalitățile accesibile din aplicația mobilă printrun Façade de servicii web Java RESTful. Sub acest Façade găsim clase Java responsabile pentru logica de business a aplicației. Mai departe avem Data Access Objects care operează pe metadatele din baza de date MySQL. Serverul prezintă de asemenea și un File Server pentru stocarea pozelor ofertelor din aplicație care sunt servite peste https. Arhitectura ‘light’ a serverului face ca pachetele care circulă între client și server să aibă dimensiuni foarte mici și să fie servite în mai puțin de o jumătate de secundă.
Provocări în dezvoltare Prima noastră provocare a fost crearea unei aplicații prietenoase și simplu de utilizat. Am reușit să realizăm acest lucru prin interfața intuitivă care facilitează accesibilitatea imediată la orice informație sau operație legată de procesul de închiriere. Cea de-a doua provocare a fost ușurarea efortului depus de proprietar pentru publicarea unei oferte. Pe baza modulelor de localizare a dispozitivului, a camerei și a geolocalizării facilitate de Google Geocoding API am reușit să facilităm adăugarea unei chirii în mai puțin de două minute. După adăugare, chiria devine imediat vizibilă pe hartă celor care caută chirie în zonă.
nr. 35/mai, 2015 | www.todaysoftmag.ro
Cea de-a treia provocare a fost crearea unei aplicații extensibile. Modelul de date și serviciile au fost astfel construite ca prin mici modificări să permită adăugarea unor noi tipuri de oferte și servicii. O altă mare provocare a fost implementarea unei arhitecturi ‘light’ care să faciliteze o scalabilitate ridicată. Am reușit să realizăm acest lucru printr-o arhitectură construită din componente ‘stateless’ organizată pe nivele slab cuplate între ele și prin expunerea funcționalității prin servicii web RESTful care servesc peste protocolul https pachete de dimensiuni foarte mici în format JSON.
Invitație Echipa Fizbo te invită să-ți cauți chirie sau să-ți publici gratuit chiria cu aplicația mobilă Fizbo. Aceasta este disponibilă atât în Google Play pentru utilizatorii Android cât și în App Store pentru utilizatorii iOS. Un scurt video de prezentare poate fi vizionat la adresa https://www.youtube. com/watch?v=tMG9krOf-BY
TODAY SOFTWARE MAGAZINE
contabilitate
Totul despre Persoana Fizică Autorizată din punct de vedere fiscal în 2015
P
ersoana fizică autorizată- P.F.A.- se definește ca persoana autorizată să desfășoare orice formă de activitate economică permisă de lege, folosind în principal forța sa de muncă. Activitățile economice pot fi desfășurate în toate domeniile, meseriile, ocupațiile sau profesiile pe care legea nu le interzice în mod expres pentru libera inițiativă.
Activitățile economice pe care o persoană fizică le poate desfășura ca P.F.A. sunt cele prevăzute de Codul C.A.E.N. a căror desfășurare nu este reglementată exclusiv potrivit unei legi speciale. Orice activitate economică desfășurată permanent, ocazional sau temporar în România de către PFA trebuie să fie înregistrată și autorizată, în condițiile O.U.G. nr. 44/2008. Autorizarea funcționării, nu exonerează P.F.A. de obligația de a obține, înainte de începerea activității, autorizațiile, avizele, licențele și altele asemenea, prevăzute în legi speciale, pentru desfășurarea anumitor activități economice. Persoana Fizică Autorizată se poate înregistra prin Registrul Comerțului, caz în care se emite un certificat de înregistrare emis de Registrul Comerțului sau, în cazul profesiilor liberale, prin ANAF, situație în care ANAF emite un certificat de înregistrare fiscală .
Ce fel de taxe și impozite plătește o persoană fizică autorizată? În ceea ce privește modul de impozitare, o persoană fizică autorizată poate fi plătitoare de impozit în sistem real sau prin impozitare pe normă de venit. Impozitarea în sistem real înseamnă aplicarea cotelor de impozit asupra diferenței dintre încasări și plăți. Impozitarea pe normă de venit se poate aplica doar persoanelor fizice autorizate care nu au salariați. Acest tip de impozitare constă în aplicarea cotelor de impozit asupra unei sume fixe, stabilite anual de către ANAF – prin direcțiile locale, în funcție de tipul de activitate și de anumite criterii. La nivelul fiecărui județ sunt stabilite codurile C.A.E.N. pentru care există posibilitatea opțiunii de impozitare pe normă de venit. Potrivit Codului
fiscal, norma de venit nu poate fi mai mică decât salariul de bază minim brut pe țară garantat, în vigoare la momentul stabilirii acesteia, înmulțit cu 12. Acum, salariul minim este de 975 de lei, urmând să crească la 1.050 de lei de la 1 iulie 2015. Normele de venit diferă destul de mult de la un județ la altul. De exemplu pentru o persoană fizică autorizată pe codul CAEN 6202 – Consultanță în tehnologia informației, cu un venit mediu aproximativ de 6.000 lei/ lună, cu domiciliul în Cluj-Napoca, norma de venit reglementată pentru anul 2015 este 36.270 lei/an. Dacă persoana respectivă are un contract de muncă ca salariat, taxele aplicabile pe norma de venit sunt 16% impozit pe venit și 5,5% C.A.S.S. (Contribuția pentru asigurări sociale de sănătate). Deci, ar avea de plată către bugetul statului și asigurărilor sociale suma de 7.798 lei/an, în patru tranșe trimestriale. Dacă aceeași P.F.A. ar avea sediul în orașul Bistrița, norma de venit reglementată ar fi 19.700 lei/an, taxele totale de plată fiind aproximativ 4.235 lei/an. Dacă revenim la exemplul de mai sus, în sistem real acea P.F.A. ar avea de plată anual suma de 15.480 lei/an, presupunând că nu există cheltuieli deductibile aferente acelor venituri. În situația în care contractul de muncă este ca salariat cu normă întreagă, această P.F.A. are dreptul de a solicita administrației locale reducerea normei de venit cu 50%. Tendința ultimilor ani din partea legiuitorului a fost de a reduce tot mai mult numărul codurilor C.A.E.N. pentru care există normă de venit și de a crește de la an la an aceste norme. Contribuabilii care au realizat în anul anterior venituri din activități
independente și au fost impuși la norma de venit au posibilitatea să își modifice sistemul de impunere, devenind plătitori de impozit în sistem real. Trecerea de la sistemul de impozitare pe normă de venit la sistem real este obligatorie dacă venitul brut anual pentru anul precedent este mai mare de echivalentul în lei a 100.000 euro, sistem care este obligatoriu a fi păstrat minim doi ani consecutivi. Cursul de schimb folosit pentru calcul este cursul de schimb mediu anual comunicat de Banca Națională a României, la sfârșitul anului fiscal. În cazul în care se desfășoară mai multe activități pentru care venitul net se determină pe baza normelor de venit, venitul net anual se calculează prin însumarea nivelului normelor de venit de la locul desfășurării fiecărei activități.
Trebuie sau nu trebuie achitată contribuția pentru pensii? În prezent, pe lângă taxele menționate ca fiind obligatorii în cazul exemplului avut în vedere (impozit pe venit și C.A.S.S.), dacă P.F.A. nu are și un contract de muncă în calitate de salariat, datorează și contribuția la pensii (C.A.S.). Astfel, pentru pensii, contribuția este de 26,3% din venitul declarat, adică venitul pentru care dorește persoana respectivă să se asigure. Potrivit reglementărilor, acest venit nu poate fi mai mic de 35% din câștigul salarial mediu brut utilizat la fundamentarea bugetului asigurărilor sociale de stat, dar nici mai mare de echivalentul a de cinci ori câștigul salarial mediu brut utilizat la fundamentarea bugetului asigurărilor sociale de stat. Astfel, pentru anul fiscal 2015, câștigul salarial mediu brut este de 2.415 lei, în urcare de la 2.298 lei, cât a fost în 2014. În aceste condiții, baza de calcul pentru
www.todaysoftmag.ro | nr. 35/mai, 2015
41
contabilitate management
Totul despre Persoana Fizică Autorizată din punct de vedere fiscal în 2015
C.A.S. nu poate fi mai mică de 845 lei, dar nici mai mare de12.075 ca activitate dependentă de plătitorul de venituri salariale, în lei. Aplicând cota de CAS de 26,3% asupra acestor valori, PFA condițiile în care P.F.A. are și un contract de muncă activ, ca va plăti la pensie minimum 222 lei (35% x 2.415 lei x 26,3%) și salariat. maximum 3.176 lei (5 x 2.415 lei x 26,3%) pe lună. În acest an tema principală a controalelor inopinate și a controalelor fiscale extinse efectuate de ANAF la firme (atât din Beneficiază o persoană fizică autorizată de șomaj sau concedii domeniul IT, cât și din alte domenii) au fost veniturile salariale, medicale? prin acesta înțelegându-se verificarea amănunțită a tuturor chelPe lângă contribuțiile obligatorii amintite până acum există tuielilor realizate de firme, fie că e vorba de cheltuieli cu prestarea și contribuții opționale cum sunt cea la bugetul asigurărilor pen- de servicii de către cei înregistrați ca P.F.A., fie că e vorba de alte tru șomaj, cea pentru asigurarea în caz de accidente de muncă și cheltuieli care pot fi considerate avantaje în natură ale salariaților. boli profesionale, precum și cea pentru concedii și indemnizații Mergând pe relația firmă – P.F.A., prin controale încrucișate (F.N.U.A.S.S.). există posibilitatea verificării naturii relațiilor, dacă sunt relații Astfel, deși asigurarea pentru șomaj nu este obligatorie pentru dependente sau independente între firme și persoanele fizice o persoană fizică autorizată, ea poate alege să o plătească, în cazul autorizate. în care dorește să beneficieze de ajutor de șomaj, atunci când, nu Consecința reconsiderării activității de tip P.F.A. ca fiind una va mai avea activitate. Contribuția lunară la șomaj este de 0,5% dependentă este aceea că impozitul pe venit și contribuțiile socidin venitul asigurat. Persoanele fizice pot încheia contract de asi- ale obligatorii vor fi recalculate la nivelul contribuțiilor salariale, gurare pentru șomaj cu Agenția pentru ocuparea forței de muncă fiind datorate solidar atât de angajator, cât și de angajat. Termenul în a cărei rază teritorială își au domiciliul. de solidaritate se referă la posibilitatea organului fiscal de a se Nici contribuția pentru concedii și indemnizații (F.N.U.A.S.S.) adresa fie plătitorului de venit (angajatorului), fie prestatorului nu este obligatorie, însă P.F.A. poate alege să o plătească dacă de muncă (angajatul). dorește să beneficieze de indemnizații pentru concediile medicale. Conform O.U.G. nr. 158/2005 privind concediile și Codul fiscal definește la art. 7, alin. (1), pct. 2.1 criteriile pe indemnizațiile de asigurări sociale de sănătate, contribuția pen- care trebuie să le îndeplinească o activitate pentru ca ea să fie tru concedii și indemnizații este de 0,85% din veniturile supuse considerată activitate dependentă: impozitului pe venit. a. Beneficiarul de venit se află într-o relație de subordonare față de plătitorul de venit, respectiv organele de conducere ale Registre obligatorii plătitorului de venit, și respectă condițiile de muncă impuse de În afara modului de impozitare, diferențele dintre cele două acesta, cum ar fi: atribuțiile ce îi revin și modul de îndeplinire a sisteme de impozitare sunt legate și de modul de ținere a evidenței acestora, locul desfășurării activității, programul de lucru. contabile. b. În prestarea activității, beneficiarul de venit folosește excluPersoanele fizice autorizate care aplică sistemul de impozisiv baza materială a plătitorului de venit, respectiv spații cu tare pe normă de venit aplică cel mai simplu mod de evidență înzestrare corespunzătoare, echipament special de lucru sau de contabilă și declarare către A.N.A.F., acestea fiind obligate să protecție, unelte de muncă sau altele asemenea și contribuie cu completeze numai partea din Registrul-jurnal de încasări și prestația fizică sau cu capacitatea intelectuală, nu și cu capitalul plăți referitoare la încasări pentru activitatea respectivă. Scopul propriu. urmărit cu ținerea evidenței încasărilor este legat de urmărirea c. Plătitorul de venit suportă în interesul desfășurării atingerii/depășirii plafonului de cifră de afaceri pentru încadraactivității cheltuielile de deplasare ale beneficiarului de venit, rea P.F.A. la plătitor de T.V.A. (atenție, venitul și nu încasările, cum ar fi indemnizația de delegare-detașare în țară și în străidetermină cifra de afaceri, și acesta trebuie să fie sub 220.000 lei/ nătate, precum și alte cheltuieli de această natură. an pentru ca P.F.A. să fie neplătitor de T.V.A.). d. Plătitorul de venit suportă indemnizația de concediu de Începând cu 1 Martie 2015 contabilitatea în partidă simplă, odihnă și indemnizația pentru incapacitate temporară de obligatorie pentru P.F.A., plătitoare de impozit în sistem real, se muncă, în contul beneficiarului de venit. ține conform OMFP 170/2015. Principalele modificări aduse de acest ordin sunt: Dacă oricare dintre cele patru criterii de mai sus este înde• Registrul Jurnal de încasări și plăți și Registrul Inventar nu plinit în relația firmă – P.F.A., activitatea poate fi reconsiderată mai trebuie vizate de către ANAF; ca fiind dependentă. • Persoana fizică care este interesată de conducerea contabilității în partidă dublă, aceasta poate conduce contabiliÎn decizia de a începe o activitate comercială ca P.F.A. tretatea în acest mod de la începutul exercițiului financiar ulterior buie, de asemenea, avut în vedere faptul că răspunderea persoanei celui în care s-a decis schimbarea conducerii contabilității; pentru obligațiile asumate în legătură cu activitatea desfășurată • Persoanele înființate după 1 martie 2015 pot opta încă de este cu întreg patrimoniul său personal. Având calitatea de la înființare la conducerea contabilității în partidă dublă sau în comerciant, persoana fizică autorizată poate fi supusă procedurii partidă simplă. Dacă se optează pentru contabilitate în partidă insolvenței. dublă, aceasta se va conduce aplicând reglementările valabile operatorilor economici, până la nivel de balanță inclusiv și fără Ce modificări legislative se pregătesc pentru 2016? a se întocmi situații financiare anuale. Cu toate că ar trebui să fie cea mai simplă formă de desfășurare a unei activități comerciale, legislația s-a modificat continuu penCe înseamnă activitate dependentă? tru acest segment. Indiferent de modul de impozitare, un posibil risc legat În prezent există în curs de aprobare un proiect de modide activitatea de tip P.F.A. este reinterpretarea de către ANAF ficări ale Codului Fiscal care vizează și modificări la nivelul de
42
nr. 35/mai, 2015 | www.todaysoftmag.ro
TODAY SOFTWARE MAGAZINE impozitare al veniturilor obținute din activități independente, MODIFICAREA 7 (favorabilă) – P.F.A. nu vor mai plăti C.A.S.S. dacă unele favorabile, altele mai puțin favorabile. nu obțin venituri, iar dacă obțin venituri sub plafonul minim, vor
plătit C.A.S.S. la acest plafon.
Vă prezentăm pe scurt principalele modificări existente în proiectul noului Cod Fiscal:
MODIFICAREA 1 (favorabilă) - Cotele de C.A.S. se reduc începând cu data de 1 ianuarie 2017. MODIFICAREA 8 (favorabilă) – C.A.S.S. se va regulariza anual. MODIFICAREA 2 (nefavorabilă) - PFA vor datora CAS, chiar dacă sunt salariați.
Așadar, în desfășurarea activității comerciale ca persoană fizică autorizată, trebuie ținut cont de tipul impozitării pe normă de venit sau în sistem real. MODIFICAREA 3 (nefavorabilă) – P.F.A. vor datora C.A.S. la nivelul cel De asemenea, pentru a nu exista probleme legale, este impormai mare dintre venitul realizat și plafonul minim, dar nu mai mare tant ca P.F.A. să nu fie dependentă de un beneficiar. Anul 2016 de plafonul maxim de cinci ori câștigul salarial mediu brut. pregătește o listă de modificări fiscale atât favorabile cât și nefavorabile. Recomandarea noastră este să se țintă cont de acestea în planificarea financiară pentru luarea celor mai bune decizii. Mult succes! Ioana Varga
ioana.varga@aiconsulting.ro
MODIFICAREA 4 (nefavorabilă) - Plățile anticipate de CAS nu se restituie și nu se regularizează.
Expert contabil Managing Partner @ A&I Consulting
Ioana Costea
ioana.costea@aiconsulting.ro Expert contabil Managing Partner @ A&I Consulting
MODIFICAREA 5 (favorabilă) - PFA nu vor datora CAS, dacă în anul anterior au realizat venituri lunare sub plafonul minim.
MODIFICAREA 6 (favorabilă) - Baza de calcul pentru C.A.S.S. plafonată la de 5 ori câștigul salarial mediu brut.
www.todaysoftmag.ro | nr. 35/mai, 2015
43
programare
Acceptarea schimbării. Drumul către un bug pe lună
E
u cred în capacitatea programatorilor deosebiți de a crea aplicații unice în moduri în care nu s-au mai făcut niciodată. Acest articol este povestea devenirii mele ca parte a unei echipe, alături de care am bătut un drum lung, de la un proces de dezvoltare software tradițional la unul agile.
Patkós Csaba
patkoscsaba@syneto.eu Agile Software Developer @ Syneto
44
nr. 35/2015 | www.todaysoftmag.ro
În vara anului 2010 eram în căutarea unui nou loc de muncă. Întâmplarea a făcut să ajung la compania Syneto. Aici am fost repartizat la un proiect mai vechi, acum retras din dezvoltare. Cariera mea de programator de până atunci a constat în programare individuală. Mai precis, realizare programelor de dimensiuni mai reduse pentru companiile la care activam pe post de administrator de rețea. Înainte să ajung la Syneto, atât la școală precum și la joburile precedente, am folosit tehnici de management de proiecte Waterfall. Începându-mi activitatea la această companie pe un proiect planificat într-o manieră similară, nu am putut decât să fiu fericit că voi activa într-un mediu cât de cât familiar. Puțin știam eu atunci despre ce mă așteaptă. După câteva luni însă, anumite probleme legate de proiect au început să devină evidente. Lansările noilor versiuni erau mereu în întârziere și bugetul proiectului era pe cale să fie epuizat înainte de termen. Așadar o nouă viziune, gândire și mod de lucru erau absolut necesare. Între anii 2000 și 2005 compania a avut o metodă de dezvoltare haotică. Pur
și simplu se implementau funcționalități când și cum cereau clienții. Acest lucru poate părea agile la prima vedere, dar nu a fost așa. Nu exista o viziune pentru produs. Nu exista o metodă bine definită de ierarhizare a importanței a task-urilor. Managerul pur și simplu repartiza activitatea pe niște bilețele programatorilor. Nimeni nu știa exact ce e de făcut și încotro ne îndreptăm. Până la mijlocul anului 2008 procesul de dezvoltare a devenit însă mai organizat. S-a trecut de la haos la Waterfall. Încă o aparență înșelătoare de progres. Nu numai că nu s-a îmbunătățit calitatea produsului, dar odată cu introducerea Waterfall, a crescut numărul de bug-uri și timpii de întârziere. Mai mult, bugetul asumat de un an și jumătate permitea doar trei lansări de noi versiuni considerând perioada de șase luni planificată cu mare grijă prin diagrame Gantt și documente complexe. O schimbare era absolut necesară.
Călătoria noastră Provocări organizatorice Orice echipă poate fi definită prin practicile de lucru care le aplică zi de zi.
programare Găsirea și adoptarea continuă de noi astfel de practici în vederea îmbunătățirii procesului de dezvoltare este una din provocările majore în agile. Noi la Syneto, suntem ferm convinși că cea mai bună metoda de a găsi practicile potrivite pentru proiectul curent este de a adopta astfel practici potențiale, de a le face cu rigurozitate șase luni și de a evalua la finalul perioadei utilitatea lor. Dacă găsim o practică inutilă, renunțăm. Dacă o găsim perfectă, o continuăm. Dar cele mai multe ori identificăm doar părți izolate ale unei practici care ne pot fi de folos. În aceste cazuri, adoptăm aceste bucățele ca parte a procesului nostru în ansamblu.
Descoperirea scrum-ului
programare release. Sprint Backlog conținea ceea ce urma să facem în săptămâna curentă. Development conținea task-urile în lucru, iar Done cele terminate. Am făcut primul pas în transformarea noastră agile. Am acceptat prima schimbare, aceea de a urmări întreaga activitate de development prin acele sticky notes. Cu trecerea timpului, în mod treptat, Flavius ne-a introdus și în celelalte aspecte ale scrum-ului. După câteva săptămâni am avut prima retrospectivă, după aceea am început să facem planificare de sprint-uri – cu ocazia asta am învățat termenul de sprint. Culminând în miniretrospective de sprint și în daily standups. Dar nu numai ședințele de scrum erau noi, ci și felul în care am început să comunicăm. Am învățat împreună termeni precum user story, story points, technical tasks, standup meeting, definition of done, etc. . Nu toate aceste lucruri erau noi în ceea ce privește activitatea noastră, dar până atunci nu erau bine definite și formalizate în spatele unor expresii. După primele câteva lansări de versiuni noi am început să simțim efectele pozitive ale retrospectivelor și ale urmăririi activității cu grafice burndown. În anii ce au urmat am experimentat cu mai multe tipuri de retrospective, dintre care ne-au marcat activitatea două: good-bad-actions și the sinking ship.
Și acum țin minte acea zi însorită de primăvară când managerul nostru de atunci, Flavius, a venit cu o oră întârziere la lucru. Foarte necaracteristic lui, care de regulă era prima persoană sosită la serviciu. La puțin timp după l-a trimis pe Bogdan, un coleg de-al nostru, să cumpere ceva. Eram prea concentrați și ocupați cu programarea, așa că inițial nu am acordat mare atenție evenimentelor. După câteva minute Bogdan s-a întors cu mai multe foi de A3, un munte de sticky notes și o grămadă de carioci. Pentru un moment lucrurile parcă erau interesante … dar programarea era mai interesantă. Ne-am „ascuns” toți în spatele monitoarelor noastre și ne-am continuat activitatea de coding. Revizuirea Planning Board-ului Nu îmi pot da seama cât timp a trecut înainte ca Flavius să ne Cândva pe la mijlocul lui 2011 am început să folosim board-ul întrerupă din activitate. Spre surprinderea tuturor, pe perete, a într-un mod tot mai avansat. Iată câteva aspecte cheie ale revizufost construit un fel de planning board. Nu prea ne-am dat seama irii întreprinse: despre ce este vorba, dar Flavius a continuat cu explicații rigu1. Coloana de Development a fost împărțită în altele trei: una roase. Prima coloană „Release Backlog” va conține tot ce trebuie de design pentru activitățile de planificare API și UI, una de făcut în viitor. După aceea, vom lucra în iterații, și vom discuta ce programare efectivă, numită în continuare tot Development și vom face în fiecare iterație. Aceste lucruri vor fi puse pe „Sprint una de testing. Orice task trebuia să treacă printr-o procedură Backlog”. După care, fiecare dintre noi își va alege ceva de făcut de testare de către o altă persoană înainte să fie considerată și va muta sticky note-ul în coloana „Development”. Când e gata, terminată. notița se va muta în coloana „Done”. Simplu, așa-i? Nu chiar… 2. Fiecare coloană a fost îmbunătățită cu o definiție a lui done. Politica era că numai un task ce îndeplinește toate condițiile poate fi mutat în coloana următoare. 3. Au fost create categorii pentru activitățile noastre: story, pentru îmbunătățiri și funcționalități noi , bugs, pentru defecte, technical tasks, pentru activități adiacente proiectului, cum ar fi instalarea unui server de compilare sau testare automată. 4. Totuși, consider că cea mai importantă schimbare a fost asumarea răspunderii pentru task-uri prin atașarea unei etichete mici cu numele celor ce lucrează la task-ul respectiv.
Adoptarea Lean Scrum era bun pentru disciplină, dar am identificat câteva probleme cu el. Alocarea resurselor era una din ele. Așa că am început să studiem și să aplicăm tehnici lean în cadrul proiectului nostru. Am încercat să ținem cont de toate principiile lean, dar două din ele au ieșit în evidență: eliminarea pierderilor – prin eliminarea timpilor morți în lanțul dependințelor dintre programatori cu ajutorul pair-programming-ului, sau prin încurajarea unor activități de minor bugfixing în timpii morți – amplificarea învățării – prin participarea la conferințe, cursuri, încurajarea experimentărilor prin code retreat-uri și oferirea unei biblioteci de specialitate exhaustivă.
Eu mă așteptam ca acest board să aibă un efect mai profund. Să aducă un pic de ordine în haosul nostru, care încet cu încetul a revenit peste planurile Waterfall. În continuare făceam prea multă planificare prealabilă și ierarhizam prea puțin task-urile. A apărut însă un alt efect deosebit. Board-ul ne-a oferit o cale surprinzător de eficientă de a vizualiza activitatea noastră. Am început să conștientizăm ce și cât mai avem de făcut. Am putut să vedem la ce se lucrează, și mai presus de toate am putut să vedem tot ce s-a făcut. Aplicarea Kanban Board-ul nostru era organizat destul de simplu. O coloană de Inevitabil, după o schimbare de cunoștințe și practici, o Release Backlog conținea tot ce trebuie să facem până la următorul schimbare a board-ului era necesară. www.todaysoftmag.ro | nr. 35/mai, 2015
45
programare
Acceptarea schimbării. Drumul către un bug pe lună.
Schimbarea este determinată de mai mulți factori, externi și interni nouă, cum ar fi cerințe noi ale pieței, respectiv monotonia locului de muncă. Iată schimbările esențiale: Până la urmă este irelevant ce determină schimbarea. Trebuie 1. Nu mai este coloană Working On. În schimb toate coloanele să fim pregătiți pentru ea. Cu siguranță va veni, inevitabil. sunt de aceeași prioritate, fără subcoloane. Acest articol este unul mai sumar, punând accent pe punc2. Nu mai avem Design, avem în schimb Design Spikes, un tele cheie din studiul agile prezentat în detaliu pe site-ul Agile concept de Agile Architecture definit de Rebecca Wirfs-Brock. Alliance (http://www.agilealliance.org/index.php/download_file/ 3. Fiecare coloană are o limită maximă de task-uri ce se poate view/482/1410/) ca parte a Agile Experience Reports Program. acomoda. Această limită nu poate fi depășită, și dacă se atinge trebuie luate măsuri pentru eliberarea task-urilor întârziate. 4. Nu mai există criteriul de ieșire sub forma definiției de done. Nu pentru că nu ne mai pasă, ci pentru că a devenit parte a culturii noastre și nu mai este nevoie să expunem această informație.
Era digitală La un moment dat am identificat o problemă cu board-ul fizic: era mult prea dificil să organizăm și să identificăm task-uri pe backlog. Așa că am trecut la un board digital, sub forma unei aplicații. Acesta ne-a permis identificare și organizare rapidă, însă a introdus o problemă profundă și neașteptată. Oamenii nu mai aveau ceva vizibil tot timpul în față, ci din contra, trebuiau să facă o acțiune conștientă de a deschide un web browser și a naviga la pagina aplicației. Iar cum programatorii sunt leneși notorii, board-ul digital a fost un eșec inițial. Totuși un televizor pe perete a rezolvat problema vizibilității. După ce programatorii s-au obișnuit să aibă mereu un tab cu aplicația deschisă, chiar și televizorul a devenit inutil.
Ce am învățat Probabil cel mai important lucru pe care l-am învățat este că singura constantă în viață este schimbarea. Indiferent că este vorba de viața personală, profesională sau de proiectul favorit, felul în care ne manifestăm și ne organizăm este în continuă schimbare.
46
nr. 35/mai, 2015 | www.todaysoftmag.ro
sponsori
powered by