Page 1

Nr. 17 • Noiembrie 2013 • www.todaysoftmag.ro • www.todaysoftmag.com

TSM

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

ject o r p ig b n i n

tio a v o Inn

bell

amp C d r Richa u c rviu

Inte

ban m u r Sc

root$ info IT Days 5-6 December Cluj-Napoca www.itdays.ro - coming soon Venue: TBD Organizator: Today Software Magazine

De la business la analiza de business Gamification Necesitatea modelării UML în analiza de business Comunități de practică The Post Classical HTTP Era: Say Hello to Real-Time Web Obișnuința ca aliat Instrument de monitorizare reactiva

Moment.js Cât de toxic este codul tău? Recenzia cărții Java Concurrency in Practice De la business la analiza de business Comunități de practică Interviu cu Bogdan Iordache despre How to Web Performance... what now?!


6 Istoria IT-ului Clujean Limbaje și tehnologii la angajare Marius Mornea

7 Inovarea în IT - Proiect publicprivat pentru dezvoltarea regiunii Cluj Andrei Kelemen

8 A 4-a ediție de ”mamuți” Agili s-a încheiat la Iași!

33 The leading engineering team on SharePoint and Project Server worldwide Ana Oarga

35 De la business la analiza de business Ioana Matei

37 Gamification

Adina Grigoroiu, CAPM

George Platon

10 TYPO3 East Europe 2013

39 Interviu cu Bogdan Iordache, CEO How to Web

Daniel Homorodean

Ovidiu Mățan

13 Cât de toxic este codul tău?

42 The Post Classical HTTP Era: Say Hello to Real-Time Web

Cezar Coca

16 Moment.js - O singură librărie JavaScript pentru toate formatele Date/Time Cristian Galea

19 Necesitatea modelării UML în analiza de business Anița Păcurariu

Alexandru Ivan

45 ReactiveExtensions pentru sisteme bazate pe evenimente Tămaș Ionuț

47 Interviu cu Richard Campbell (I) Attila-Mihaly Balazs

23 Obișnuința ca aliat

49 Performance... what now?!

Cristina Ilinca

Mihai Șerdean

26 Instrument de monitorizare reactiva Cornel Ştefanache

29 Comunități de practică Alexandru Bolboaca și Adrian Bolboacă

51 Recenzie de carte: Java Concurrency in Practice Silviu Dumitrescu

54 Innovation in Big Projects Radu Vunvulea

31 Scrumban

56 Gogu: Tată și fiu

Tudor Trișcă

Simona Bonghez, Ph.D.


editorial

L

Ovidiu Măţan, PMP

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

una trecută am participat la evenimentul organizat de către EBS pe tema Embedded Systems ce a avut loc la Universitatea Tehnică din Cluj-Napoca. Am avut parte de o prezentare interesantă a conceptelor de bază și a modului în care se aplică managementul proiectelor în acest domeniu. Prezentările au fost înregistrate și le vom publica pe canalul de YouTube al revistei: www.youtube.com/todaysoftmag. Continuăm organizarea evenimentului IT Days chiar dacă ieri s-a decis ca Liberty Technology Park, partener în organizarea evenimentului, să nu mai participe. Motivul a fost unul standard și anume divergențele legate de agenda evenimentului. Implicațiile sunt multiple, de la necesitatea găsirii unui nou spațiu pentru eveniment până la refacerea identității vizuale a evenimentului ce le aparține. Promitem să ne ținem de treabă și să revenim în zilele următoare cu site-ul online și agenda completă. IT Days se va desfășura pe două scene: Trends & Innovation și Technical Workshops astfel încât la finalul celor două zile fiecare participant să fie conectat la ultimele trend-uri și tehnologii din zona IT. În această ediție a revistei vă propunem un număr mare de articole din diverse domenii. Începem cu cele de analiza business, management și HR: De la business la analiza de business - un prim articol dintr-o serie din acest domeniu; Necesitatea modelării UML în analiza de business printr-o abordare inedită; Comunități de practică ce ne învață cum să le construim; Innovation in Big Projects este o abordare interesantă a lui Radu Vunvulea, colaborator permanent TSM, care până acum a scris o serie lungă de articole tehnice; Scrumban, concept rezultat din combinarea de Kanban și Scrum. Gamification este dezbătut în Obișnuința ca aliat și Gamification. Trecem la articolele tehnice unde descoperim greșelile din codul nostru în Cât de toxic este codul tău?, Moment.js despre o librarie JavaScript pentru date/time, Instrument de monitorizare reactivă este un tool dezvoltat intern de către 3Pillar Global, The Post Classical HTTP Era: Say Hello to Real-Time Web, o abordare inedită, atât tehnică cât și din perspectiva unui utilizator, ReactiveExtensions pentru sisteme bazate pe evenimente și încheiem cu recenzia cărții realizată de Silviu Dumitrescu: Java Concurrency in Practice.

Vă dorim o lectură plăcută !!!

Ovidiu Măţan

Fondator al Today Software Magazine

4

nr. 17/Noiembrie | www.todaysoftmag.ro


TODAY SOFTWARE MAGAZINE Lista autorilor Redacţia Today Software Magazine Fondator / Editor în chief: Ovidiu Mățan ovidiu.matan@todaysoftmag.com Editor (startups și interviuri): Marius Mornea marius.mornea@todaysoftmag.com

Alexandru Bolboaca

Anița Păcurariu

Agile Coach and Trainer, with a focus on technical practices @Mozaic Works

Business Analyst @ Arobs

Radu Vunvulea

Cristina Ilinca

Senior Software Engineer @iQuest

HR Manager si Product Owner @ ISDC

Attila-Mihaly Balazs

Cristian Galea

Code Wrangler @ Udacity Trainer @ Tora Trading

Software Developer @Small Footprint

Tudor Trișcă

Adrian Bolboaca

Software Developer @ .msg systems Romania

Programmer. Organizational and Technical Trainer and Coach @Mozaic Works

Adina Grigoroiu, CAPM adina.grigoroiu@confucius.ro

Andrei Kelemen

Trainer și consultant Colors in Projects

Director executiv @ IT Cluster

Daniel Homorodean

George Platon

alex.bolboaca@mozaicworks.com

Radu.Vunvulea@iquestgroup.com

anita.pacurariu@arobs.com

Cristina.Ilinca@isdc.eu

Graphic designer: Dan Hădărău dan.hadarau@todaysoftmag.com Copyright/Corector: Emilia Toma emilia.toma@todaysoftmag.com

dify.ltd@gmail.com

cgalea@smallfootprint.com

Traducător: Roxana Elena roxana.elena@todaysoftmag.com Reviewer: Tavi Bolog tavi.bolog@todaysoftmag.com

tudor.trisca@msg-systems.com

Reviewer: Adrian Lupei adrian.lupei@todaysoftmag.com Produs de

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

ISSN 2284 – 6352

daniel.homorodean@arxia.com Managing Director @ Arxia

adrian.bolboaca@mozaicworks.com

andrei.kelemen@clujit.ro

George.Platon@catalysts.cc Software developer @ Catalyst

Mihai Șerdean

Ana Oarga

QA Test Manager Evozon Systems

HR Specialist @ UMT Software, Cluj-Napoca

Simona Bonghez, Ph.D.

Cezar Coca

Speaker, trainer şi consultant în managementul proiectelor,

Senior Design Lead @ Endava Iași

mihai.serdean@evozon.com

simona.bonghez@confucius.ro

ana.oarga@umt.com

cezar.coca@endava.com

Owner al Colors in Projects

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

Cornel Ştefanache

cornel.stefanache@3pillarglobal.com Java Technical Lead @3Pillar Global

Ioana Matei

Ioana.Matei@tss-yonder.com Requirements Analyst @ TSS Yonder

Silviu Dumitrescu silviu.dumitrescu@msg-systems. com Consultant Java @ msg systems Romania

Alexandru Ivan

ivan.alexandru@evoline.ro Software Engineer @ Evoline

www.todaysoftmag.ro | nr. 17/Noiembrie, 2013

5


analize

Istoria IT-ului Clujean Limbaje și tehnologii la angajare

Î

n contextul general al proiectului Timeline (am vorbit de el în numărul 10), mă gândeam de curând să procesez cele aproape 1000 de mail-uri cu alerte de job-uri, din IT-ul local, pe care le am în Inbox. Rezultatul ar trebui să reflecte evoluția în ultimii trei ani a unor indicatori de genul: tehnologii, tipul job-ului, experiența cerută, număr de aplicanți, etc. . Aceasta va fi marcată la început, sub forma unor grafice simple, iar ulterior, sub forma unei interfețe web care să permită filtre bazate pe tehnologie, companie. Zilele trecute am dat peste un efort similar făcut de Ryan Williams, folosind API-ul de căutare al celor de la HackerNews, dar axat strict pe tehnologiile la modă în ofertele de angajare din ultimele luni. Pentru mai multe detalii am să vă rog să accesați pagina: http://www.ryan-williams.net/hacker-news-hiring-trends/. În continuare am să prezint o sinteză a ultimelor șase luni. Pe fond albastru avem numărul de găsiri a termenului respectiv în anunțuri de angajare, cumulat pe ultimele șase luni. Am adunat datele din top 10 per lună, păstrând toate tehnologiile apărute (unele tehnologii au fost constante, pozițiile 1-8, altele au avut doar un vârf de cerere, pozițiile 13-17, iar restul au apărut episodic). De menționat dominația clară a tehnologiilor orientate pe interfețe utilizator, prezența unor tehnologii din zona DevOps (AWS, linux, MySQL) sau chiar business (Machine Learning sugerează o orientare puternică spre utilizator). Pe fond portocaliu avem tehnologiile cu cea mai mare creștere în ultimele luni. Practic sunt tehnologii care încă nu au reușit să acumuleze suficientă masă, cât să intre în top10, dar care au creșteri

puternice. Primele două reușesc să se păstreze constant în zona de creștere, restul păstrează o distribuție similară celei din primul tabel (apariții episodice și vârfuri). Spre deosebire de tehnologiile din primul tabel, observăm o dominație clară a celor din zona DevOps și BigData. Pornind de la Chef și Puppet, care ne permit managementul programatic al infrastructurilor hardware, trecând prin zona cloud cu AWS, Heroku, S3, și până la o puternică focalizare pe date cu Mongo, ElasticSearch, statistics și Data Sciences, se conturează un ecosistem în care accentul cade pe procesări intense de date și prezentarea rezultatelor în interfețe utilizator web cât mai simple. Pe viitor îmi propun să extind această perspectivă, de la forma curentă, simplificată și cu o puternică orientare pe ofertele de job-uri din Silicon Valley, și să implic alte surse de date la nivel internațional (gen TIOBE index) pentru a contura o imagine globală asupra tendințelor tehnologice. Această imagine o voi suprapune situațiile locale pentru a vedea posibilele diferențe și asemănări. Ca de obicei, vă invit pe toți să trimiteți feedback și să vă implicați în realizarea analizei de pe piața locală.

Marius Mornea

marius.mornea@todaysoftmag.com Inginer interesat și implicat în diverse activități IT, de la dezvoltare, management, până la educație și jurnalistică în cadrul Epistemio, UTCN și TSM

6

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro


business

TODAY SOFTWARE MAGAZINE

Inovarea în IT Proiect public-privat pentru dezvoltarea regiunii Cluj

L

a nivel regional și național, Cluj-Napoca este cunoscut prin industria de servicii, în special cea de IT. Pornind de la această premiză, precum și de la faptul că la nivel național, Clujul este în topul exporturilor în zona de tehnologia informației, în octombrie 2012 s-a constituit, după principiul „triple helix”, Clusterul Cluj IT. La un an după înființare, asociația a reușit să se remarce pe harta industriei de profil din România ca fiind una dintre cele mai importante inițiative de creștere a competitivității în domeniu și un semnificativ pol de susținere a inovării în vederea dezvoltării durabile a regiunii. Clusterul Cluj IT, care reunește în acest moment 28 de companii de IT din ClujNapoca, trei universități publice, autorități publice locale și alte organizații catalizator, devine la nivel național un exemplu al cooperări pentru proiecte majore de interes comun și pentru coagularea comunității în vederea sprijinirii unei dezvoltări bazate pe sustenabilitate.

Privind retrospectiv, acest an a fost marcat de extinderea cooperărilor externe și interne, amintim aici cu titlul de exemplu parteneriatele încheiate cu organizații internaționale precum: Fundația Steinbeis, Cluster 55, German Outsourcing Verband și naționale: Asociația Cluj Napoca Capitală Culturală Europeană 2021, Asociația Capitală Europeană de Tineret 2015. Pe parcursul anului trecut, au fost inițiate diverse proiecte comune în comisiile de lucru ale cluster-ului cum ar fi Education/HR, Brand, E-health, Innovation, Cluj Innovation City. În ceea ce privește proiectul Cluj Innovation City, semnalăm participarea la Expo Real München, proiectul atrăgând interesul mai multor investitori și dialogul tot mai strâns cu autoritățile publice, naționale și locale, în vederea susținerii inițiativei ca proiect de dezvoltare strategic național. Pentru realizarea activităților clusterului pe direcțiile sale prioritare au fost depuse proiecte de finanțare nerambursabile, destinate dezvoltarii resurselor umane și destinate dezvoltarea inovării precum și generării de produse proprietare de IT.

Toate acțiunile de până acum realizate de Cluster, au dinamizat interesul membrilor implicați, dar și a unor noi organizații (universități, organizații catalizator, firme) care au aderat la proiectele inițiale și cele viitoare. Asociația Cluj IT consolidează eforturile comune în vederea poziționării Clujului ca hub regional IT inovator, dovedindu-se astfel a fi un cadru excelent de cooperare între factori decizionali din sectorul privat și cel public.

Andrei Kelemen

andrei.kelemen@clujit.ro Director executiv @ IT Cluster

www.todaysoftmag.ro | nr. 17/Noiembrie, 2013

7


evenimente

A 4-a ediție de ”mamuți” Agili s-a încheiat la Iași!

Î

n perioada 4-5 octombrie, Colors in Projects, în parteneriat cu Arhipelago și Today Software Magazine, au ieșit în întâmpinarea ieșenilor cu evenimentul ... even mammoths can be Agile, eveniment organizat pentru prima dată în Iași.

În prima zi, participanții au avut ocazia să dezbată, împreună cu speakeri naționali și internaționali, despre punctele slabe ale abordării Waterfall, metode care ar trebui aplicate în funcție de proiect, precum și factorii care ne influențează în luarea deciziilor în cadrul proiectelor. Ne-au fost alături 10 speakeri, fiecare împărtășind din experiența proprie: De la Denise Vestin am aflat că factorul cheie pentru o afacere „agilă” este adaptarea metodelor de management de proiect în funcție de specificitățile fiecărui proiect. Paul Nagy a cuprins în prezentarea sa fapte reale, istorie și metafore precum și unele ipoteze care stau la baza unor presupuneri greșite în ceea ce privește dezvoltarea de software. Ne-am amuzat cu toții la auzul afirmației lui Paul: dacă ne-ar plăcea să lucrăm n-am cere bani pentru asta. Andrei Postolache ne-a vorbit despre diferite niveluri de estimări, care este diferența dintre o estimare și un angajament. Ne-a explicat, de asemenea, că modul în care cerem și oferim estimări schimbă comportamentul echipei, în bine sau în rău. Împreună cu Roxana Leatu am explorat diferite modele de stabilire a prețurilor în angajamentele agile și modul în care relația cu clientul poate fi transformată de ele. Încheiem o tranzacție sau pornim

8

o relație cu clientul? a fost invitația spre reflectare din partea Roxanei. Tudor Pitulac ne-a vorbit despre factorii care determină migrarea managerilor de proiect între diferite industrii și forțele cu care aceștia se intersectează de-a lungul acestei călătorii. Metoda Kanban a reprezentat obiectul prezentării lui Adrian Lupei. El ne-a explicat cum, prin implementarea Kanban-ului în Bitdefender, procesele de lucru au fost îmbunătățite, vizibilitatea activității a crescut, iar echipele au început să colaboreze mai bine. Dan Berteanu ne-a prezentat dificultatea în care se află managerul de proiect când deciziile pe care trebuie să le ia, au implicații etice și îi pun sistemul de valori la încercare. Ceea ce va face managerul de proiect în astfel de situații va influența foarte mult cultura echipei pe care acesta o conduce. Într-o notă similară, Simona Bonghez ne-a explicat cum deciziile reprezintă un aspect aparte în domeniul proiectelor, prin consecințele lor asupra evoluției unui proiect. Am aflat de la Simona care sunt punctele cheie de decizie în timpul ciclului de viață al unui proiect, pe ce modele de decizie ne putem baza, dar și care sunt acei factori care influențează procesul de luare a deciziilor al unui manager de proiect. George Anghelache și Cristian Cazan ne-au încântat cu o altfel de prezentare. Imitând celebrele personaje, Luke Skywalker și Darth Vader, s-au luptat cu săbii laser în provocarea de a transforma galaxia IT conform principiilor Agile. De asemenea, au pus în scenă diferite situații cu care se confruntă un Scrum Master, oferind pentru fiecare dintre acestea soluții pentru

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro

îmbunătățirea comunicării și a activităților. Ca un plus față de evenimentele anterioare, în cadrul acestei ediții ne-am dorit să apelăm și la cunștințele participanților, implicându-i în trei sesiuni de dezbateri – World Café – pe teme diferite. Împreună cu speakerii prezenți la eveniment, au discutat despre Release Planning, introducerea metodei Kanban în organizații și despre ceea ce definește un Scrum Master bun. A doua zi a avut loc Workshop-ul de pregătire pentru obținerea certificării PMP/CAPM, workshop susținut de Simona Bonghez. Participanții au aflat care sunt condiţiile de eligibilitate pentru obținerea certificărilor PMI (PMP® și CAPM®), cum se desfășoară examenele și care sunt pașii ce trebuie urmați în acest proces. De asemenea, s-au discutat câteva dintre conceptele de bază (tips&tricks) necesare pregătirii pentru examinare și au fost prezentate exemple de întrebări similare celor din examen. Vom reveni cu drag și anul viitor în Iași, am fost întâmpinați de oameni frumoși și calzi, dornici să afle mai multe informații despre abordările Agile și să-și împărtășească cunoștințele. Vă invităm să accesați imagini din cadrul evenimentului pe site-ul nostru (http://colorsinprojects.ro/evenimentia%C8%99i-4-5-octombrie-2013) și pe pagina noastra de Facebook! (https://www. facebook.com/pages/Colors-in-Projects/54 7289038620195?ref=hl) Vă așteptăm cu drag la evenimentele noastre din București, Cluj și Iași anul viitor! Adina Grigoroiu, CAPM adina.grigoroiu@confucius.ro Trainer și consultant Colors in Projects


TODAY SOFTWARE MAGAZINE

evenimente

www.todaysoftmag.ro | nr. 17/Noiembrie, 2013

9


evenimente

TYPO3 East Europe 2013 startups

Î

ntr-o lume globalizată şi interconectată, am învăţat să lucrăm cu clienţi şi cu programatori de pe toate meridianele. O facem pentru că putem şi pentru că este oportun. Dar pentru a fi cu adevărat integraţi global mai avem de depăşit un prag cultural: încrederea că putem - şi înţelegerea că trebuie - să fim parte integrantă, activă, în comunităţile care promovează inovaţia tehnologică şi bunele practici în industria noastră. Cultura parteneriatului în România, ca şi în majoritatea ţărilor din Estul Europei, nu are rădăcini adânci. Mulţi dintre noi nutresc o pasiune pentru o anume tehnologie, dar găsim încă puţine contexte în care să ne dezvoltăm dorinţa de a da mai mult dincolo de programul zilnic de la serviciu.Dorinţa de a contribui activ la platforme de care să beneficieze întreaga lume şi chiar dorinţa de a schimba lumea prin tehnologii şi metodologii care aduc valoare adăugată proceselor din societatea noastră, la orice nivel, ar putea reprezenta importante impulsuri ale activității noastre. Încă de la începutul existenţei sale, deviza TYPO3 www.typo3.org a fost “Inspire people to share”. Ca platformă CMS Open Source, s-a poziţionat de-a lungul anilor ca fiind construită de comunitate, mediu în care oricine este încurajat să se implice, să contribuie, să işi împărtăşească ideile şi cunoştinţele, să dezbată şi să caute împreună soluţii pentru a merge mai departe. Sperăm ca această cultură a comunităţii, grupată în jurul unei platforme tehnologice valoroase, să se răspândească şi să se dezvolte mai departe şi în România, iar noi să ne găsim locul pe care competenţa

10

şi pasiunea noastră îl merită, alături de cei asemenea nouă, din întreaga lume. În perioada 14-16 noiembrie, TYPO3 Usergroup Romania organizează la Cluj prima conferinţă internatională TYPO3 din Centrul şi Estul Europei. Sub numele “TYPO3 East Europe” ( T3EE - www.t3ee.org ) evenimentul va reuni în jur de 100 de specialişti (companii şi dezvoltatori) TYPO3 din toată Europa.

Ce este TYPO3 ?

TYPO3 este o platformă Open Source de Content Management (CMS) de nivel ridicat (“entreprise level”), dezvoltată în PHP. Este platforma preferată pentru dezvoltarea sistemelor CMS în Germania, inclusiv pentru aplicaţiile autorităţilor publice precum şi în mediul universitar, având o cota mare de piaţă şi în Olanda, Elvetia, Austria, Canada, în mod special Quebec. Guvernul german sprijină activ, inclusiv prin finanţare directă, dezvoltarea platformei, în special în vederea asigurării accesibilităţii aplicaţiilor web pentru persoanele cu dizabilităţi, conform standardelor stricte existente în Germania, ca şi în alte ţări din vestul Europei.

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro

Cursuri de dezvoltare TYPO3 se predau în multe universităţi din Germania, Austria, Danemarca şi alte ţări europene. Multe dintre acestea au departamente specializate, atât pentru predare, cât şi pentru dezvoltarea şi întreţinerea portalurilor. O serie largă de universităţi europene de prestigiu au site-urile dezvoltate în TYPO3, de exemplu: Universitatea Tehnică Berlin (www.tu-berlin.de), Viena (www. univie.ac.at), Aarhus (www.au.dk/en/), Atena (www.uoa.gr),Londra (www.london. ac.uk) şi multe altele. TYPO3 este folosit de către multe autorităşi publice, organizaţii internaţionale de prestigiu (de exemplu www.unicef. de, eit.europa.eu, www.opcw.org – recentul câştigător al Premiului Nobel pentru Pace, şi desigur companii private, precum Lufthansa, Deimler, AirFrance http://corporate.airfrance.com/ , Bayer http://www. bayertechnology.com/ şi multe altele. În România, TYPO3 este mai puţin cunoscut deocamdată, dar printre implementări sunt de menţionat: portaluri de publishing precum Evenimentul Zilei (www.evz.ro), Libertatea (www.libertatea.ro), și mai aproape de noi site-ul Cluj Napoca Capitala Culturală Europeană 2021


TODAY SOFTWARE MAGAZINE

(www.clujnapoca2021.ro) TYPO3 a crescut urmărind excelenţa calităţii funcţionale germane şi caracteristici precum flexibilitatea, extensibilitatea şi stabilitatea. Mult timp, aceasta putere a venit şi cu dezavantajul relativ al dificultăţii de a învăţa şi stăpâni o asemenea complexitate. Reacţia comunităţii a fost clară – era nevoie de o revoluţie tehnologică, o construcţie care să aducă uşurinţa de utilizare şi paradigmele programatice moderne alături de conceptele funcţionale cu care TYPO3 şi-a cucerit un loc de frunte ca soluţie excelentă pentru aplicaţii CMS complexe. Această revoluţie se întâmplă acum, prin Flow - un application framework PHP dezvoltat de aceeaşi comunitate TYPO3, şi Neos - primul CMS creat folosind Flow şi experienţa în enterprise level CMS adunată în anii de dezvoltare a TYPO3.

TYPO3 în România

Agenţiile web româneşti au început să folosească TYPO3 din 2005, atât pentru proiecte implementate în România cât mai ales pentru proiecte realizate în outsourcing pentru piaţa vestică. Dintre toate ţările din estul Europei, dar şi din sud şi centru, exceptând Austria, România are cel mai mare numar de dezvoltatori TYPO3, angrenaţi într-o comunitate activă, care organizează întruniri anuale încă din 2010. Transilvania şi în particular Clujul este polul dezvoltării TYPO3 în România. Românii şi în special clujenii participă activ la evenimentele comunităţii internaţionale - Conferences, Developer Days, International Camps – chiar ca sponsori la unele dintre aceste evenimente. Nivelul dorinţei şi capacităţii de

implicare a dezvoltatorilor români în comunitatea globală T YPO3 creşte constant,remarcându-se în ultimul timp tot mai multe contribuţii publicate precum şi bug-uri rezolvate. De exemplu, la Cluj se organizează în fiecare lună câte un “Bug Day”, în care ne adunăm, rezolvăm împreună bug-uri raportate de comunitate, schimbăm informaţii şi experienţe şi discutăm despre tendinţele în evoluţia platformei).

TYPO3 East Europe – T3EE, prima conferinţă internaţională TYPO3 din Centrul şi Estul Europei

În perioada 14-16 noiembrie va avea loc la Cluj, conferinţa T3EE www.t3ee. org , având ca scop dezvoltarea legăturilor în comunitatea TYPO3 internaţională, promovarea culturii de colaborare, a comunităţilor tehnologice, a Open Source şi a bunelor practici în dezvoltarea software. Pentru prima oară, programatorii TYPO3 din vest ( Germania, Olanda, Suedia ... ) şi din est ( România, Polonia, Estonia ... ) se vor întâlni şi îşi vor împărtăşi experienţele, iar companiile prezente vor putea pune bazele unor noi colaborări. Urmărim să împărtăşim idei şi să învăţăm atât pe linia tehnologică, dar şi despre cum creşte şi se dezvoltă o comunitate tehnologică, cum se organizează comunitatea şi cum poate fiecare să se implice, să devină contribuitor activ. În 15 şi 16 noiembrie, T3EE se va desfăşura într-un format de conferinţă, cu prezentări pregătite şi dezbateri, pe subiecte tehnice specifice TYPO3 dar şi pe subiecte generale, despre metodologii de gestiune şi dezvoltare a proiectelor web (Scrum, Kanban, BDD, etc.), bunele practici în

dezvoltarea proiectelor web, dezvoltarea comunităţilor open source, strategii de intrare şi creştere în piaţă pentru platforme open source, sau studii de caz pentru proiecte speciale.

14 Noiembrie – ziua comunităţii şi a universităţilor

Universitatea Tehnică din Cluj-Napoca şi Universitatea Babeş - Bolyai sunt parteneri ai T3EE. Împreună organizăm în ziua de 14 noiembrie o sesiune deschisă de prezentări, susţinute de invitaţii noştri din străinătate, dar şi de români, pe subiecte precum: Accesibilitatea Web, Construcţia şi consolidarea comunităţilor tehnologice – în special Open Source, Introducere în TYPO3. În aceeași dată de 14 Noiembrie, alături de universităţile clujene şi reprezentanţi ai unor universități din vest, vom susţine un workshop pe tema organizării şi optimizării proceselor de dezvoltare şi mentenanţă a proiectelor web dezvoltate în cadrul universităţilor. Întregul eveniment este posibil datorită muncii şi colaborării din cadrul TYPO3 Usergroup Romania, precum şi a sponsorilor. În calitate de gold sponsors îi avem pe germanii de la DKD http://www.dkd.de/ , JWeiland (jweiland.net ), românii Arxia www.arxia.com şi PWO http://www.pwo. ro/ şi Asociaţia Internaţională TYPO3 ( association.typo3.org )

Daniel Homorodean

daniel.homorodean@arxia.com Managing Director @ Arxia

www.todaysoftmag.ro | nr. 17/Noiembrie, 2013

11


comunități

Comunităţi IT

N

e așteaptă luna noiembrie cu multe evenimente locale în Cluj. Vă invităm să participați la cât mai multe dintre acestea iar recomandarea lunii este pentru How To Web care nu mai are nevoie de prezentare. Dacă sunteți curioși să aflați mai multe despre acesta, vă recomandăm interviul lui Bogdan Iordache pentru cititorii revistei Today Software Magazine.

Transylvania Java User Group Comunitate dedicată tehnologiilor Java. Website: www.transylvania-jug.org Data înfiinţării: 15.05.2008 / Nr. Membri: 550 / Nr. Evenimente: 43 Comunitatea TSM Comunitate construită în jurul revistei Today Software Magazine. Website: www.facebook.com/todaysoftmag Data înfiinţării: 06.02.2012 / Nr. Membri: 964 / Nr. Evenimente: 14 Romanian Testing Community Comunitate dedicata testerilor. Website: www.romaniatesting.ro Data înfiinţării: 10.05.2011 / Nr. Membri: 672 / Nr. Evenimente: 2 GeekMeet România Comunitate dedicată tehnologiilor web. Website: geekmeet.ro Data înfiinţării: 10.06.2006 / Nr. Membri: 567 / Nr. Evenimente: 17 Cluj.rb Comunitate dedicată tehnologiilor Ruby. Website: www.meetup.com/cluj-rb Data înfiinţării: 25.08.2010 / Nr. Membri: 151 / Nr. Evenimente: 36 The Cluj Napoca Agile Software Meetup Group Comunitate dedicată metodelor Agile de dezvoltare software. Website: www.agileworks.ro Data înfiinţării: 04.10.2010 / Nr. Membri: 330 / Nr. Evenimente: 40 Cluj Semantic WEB Meetup Comunitate dedicată tehnologiilor semantice. Website: www.meetup.com/Cluj-Semantic-WEB Data înfiinţării: 08.05.2010 / Nr. Membri: 152/ Nr. Evenimente: 23 Romanian Association for Better Software Comunitate dedicată oamenilor cu experiență din IT indiferent de tehnologie sau specializare. Website: www.rabs.ro Data înfiinţării: 10.02.2011 / Nr. Membri: 230/ Nr. Evenimente: 14 Tabăra de testare Un proiect care își dorește să strângă cât mai mulți oameni care lucrează ca și testeri. Website: tabaradetestare.ro Data înfiinţării: 15.01.2012 / Nr. Membri: 356/ Nr. Evenimente: 20

12

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro

Calendar Noiembrie 7 (Cluj) Lansarea numărului 17 al Today Software Magazine www.todaysoftmag.ro Noiembrie 9 (Cluj) Autumn .NET Advanced Workshops – Workshop 1: Entity Framework & LINQ it-events.ro/events/autumn-net-advanced-workshops-workshop-1-entity-framework-linq/ Noiembrie 12 (Cluj) BA Cluj Community event w w w. m e e t u p . c o m / B u s i n e s s - A n a l y s t s - C l u j / events/148233602/ Noiembrie 12 (Cluj) OntoWiki - support for agile, distributed knowledge engineering scenarios www.meetup.com/Cluj-Semantic-WEB/events/143379032/ Noiembrie 14 (Cluj) #defineCluj 2013 definecluj.ro Noiembrie 14-16 (Cluj) TYPO3 East Europe 2013 www.t3ee.org Noiembrie 20-21 (București) How to Web 2013 - recomandarea TSM http://it-events.ro/events/bucharest-java-user-group-17/ Noiembrie 21 (Cluj) Let’s meet up and ...Project Management - PMI w w w. m e e t u p. c o m / P M I - R o m a n i a - C l u j Napoca-Project-Management-Meetup-Group/ events/148127302/ Noiembrie 21 (Cluj) Mobile Operating Systems Conference MobOS 2013 it-events.ro/events/mobile-operating-systems-conferencemobos-2013/ Noiembrie 22 (Cluj) Mobile Monday Cluj w w w. m e e t u p . c o m / C l u j - M o b i l e - D e v e l o p e r s / events/144127302/


programare

TODAY SOFTWARE MAGAZINE

Cât de toxic este codul tău?

Î

n cadrul acestui articol îmi doresc să vă ofer o perspectivă asupra calităţii codului sursă şi asupra influenţei majore pe care o are aceasta în valoarea finală a costului de realizare şi mentenanță a sistemelor software. În continuare aş dori să vă prezint avantajele folosirii unei platforme de management a calităţii în procesul de Continuous Integration şi să vă arăt cum pot fi folosite metricile rezultate în urma analizei statice a codului pentru detectarea zonelor din sistem cu impact negativ major în mentenanţa acestuia. Cezar Coca

cezar.coca@endava.com Senior Design Lead @ Endava Iași

Motivaţie

Cum putem evalua calitatea unui sistem software?

proiectare şi implementare2. Ca o consecinţă firească, oferta de instrumente software de analiză statică a codului este extrem de variată. Aceste instrumente acoperă o plajă largă de aspecte, pornind de la respectarea convenţiilor de scriere a codului (Checkstyle3, Stylecop4), respectarea celor mai bune practici de scriere a codului (PMD5, FxCop6) sau depistarea potenţialelor bug-uri (FindBugs7, Gendarme8) până la identificarea deficienţelor de proiectare (inCode 9), depistarea codului duplicat sau evidenţierea zonelor insuficient testate şi a codului excesiv de complex. În acest ecosistem atât de vast, un loc aparte îl are platforma de management a calităţii dezvoltată de de compania SonarSource10 datorită următoarelor atuuri: • Suport pentru mai mult de 20 de limbaje de programare (Java, C#, C/C++, PL/ SQL, Cobol, ABAP…) • Oferă un punct central de vizualizare a calităţii prin monitorizarea următoarelor aspecte:

1 h t t p : / / w w w . a m a z o n . c o m / Implementation-Patterns-Kent-Beck/dp/0321413091

2 http://en.wikipedia.org/wiki/Technical_debt 3 http://checkstyle.sourceforge.net/ 4 https://stylecop.codeplex.com/ 5 http://pmd.sourceforge.net/ 6 h t t p : / / m s d n . m i c r o s o f t . c o m / e n - u s / l i b r a r y / bb429476(v=vs.80).aspx 7 http://findbugs.sourceforge.net/ 8 http://www.mono-project.com/Gendarme 9 http://www.intooitus.com/products/incode 10 http://www.sonarqube.org/

De ce calitatatea codului este importantă? În primul rând, este importantă din considerente economice. Pentru calculul costului total al unei aplicatii software se poate aplica următoarea formulă [Bek071]: cost_total= cost_develop+ cost_maintain

unde costul de mentenanţă este compus din: cost_maintain= cost_understand+ cost_change+ cost_test+ cost_deploy

Deoarece statistic s-a constat că ponderea costului de mentenanţă o depăşeşte cu mult pe cea a costului de dezvoltare (Fig. 1), devine evident faptul că monitorizarea calităţii codului în vederea diminuării costurilor de mentenanţă reprezintă un factor cheie în realizarea unui sistem software durabil.

Deloc surprinzător, în ultimii ani, se poate observa o creștere a interesului clienţilor în ceea ce priveste evaluarea codului sursă din punctul de vedere al deficienţelor de

www.todaysoftmag.ro | nr. 17/Noiembrie, 2013

13


programare Cât de toxic este codul tau? • respectarea standardelor şi urmărirea celor mai bune practici în implementare, • eliminarea vulnerabilităţilor, • documentarea codului, • eliminarea codului duplicat, • reducerea complexitătii, • testarea, • calitatea proiectării. • Salvarea rezultatelor analizei în baza de date pentru utilizarea ulterioară în evaluarea evoluţiei proiectului din punct de vedere calitativ; • Integrare foarte bună în procesul de Continuous Integration11 permiţând astfel depistarea imediată a carenţelor de calitate şi remedierea lor cu efort minim; • Suport pentru “code review”, integrare bună cu serverele de SCM 12 şi navigare uşoară de la deficienţa detectată la codul sursă aferent; • Este un proiect Open Source cu o comunitate extrem de activă; • Datorită arhitecturii flexibile, extinderea platformei se face foarte uşor prin mecanismul de plugin13.

Figura 1

metricilor în scopul evaluarii codului strict Ce se poate face? Care sunt zonele din prodin punctul de vedere al mentenanței. iect care trebuie rescrise/modificate mai întâi? Care sunt principalele deficienţe de proiectare? Pe scurt, cum se poate îmbuIdentificarea metricilor și integrarea cu nătăţi mentenanţa sistemului? O soluţie Sonar Practica a arătat că proiectele vechi foarte interesantă şi pragmatică am găsit(brownfield14) sunt mai dificil de gestionat o descrisă în articolul How toxic is your decât cele noi (greenfield) datorită gamei code15? scris de Erik Dörnenburg. O scurtă mult mai variate de probleme ce trebuie descriere a acestei tehnici de vizualizare adresate. Desigur sunt şi excepţii, dar în este prezentată in continuare. multe cazuri, rezultatele obținute în urma În primă fază au fost identificate În continuarea acestui articol vă voi unei analize de calitate pot fi terifiante. metricile care semnalează deficienţele de prezenta un studiu de caz despre cum Printre cauzele principale menționăm: implementare cu impact major în menteputem extinde platforma Sonar prin adă- gradul ridicat de complexitate al proiec- nanţa codului (Fig. 2). ugarea unui nou mecanism de agregare a tului, modificarea componenței echipei. Lista de mai jos cuprinde o scurtă descriere a metricilor alese, evidențiind elementele care influențează în mod direct mentenabilitatea codului: • Long method – dacă o methodă este prea lungă atunci ea devine dificil de înţeles, de modificat şi de extins. • Long class – această metrică poate semnala clasele a căror funcţionalitate complexă necesită un efort de testare considerabil sau clsele care nu sunt reutilizabile şi foarte probabil conţin cod duplicat. În cazurile extreme clasele mari pot prezenta deficienţa de proiectare cunoscută sub numele God Object16. • Cyclomatic Complexity – o funcţie complexă este greu de înţeles şi de testat. • Parameter Number – dacă numărul de parametri folosiţi în semnătura unei metode depăşeste capacitatea memoriei pe termen scurt, atunci metoda devine dificil de înţeles şi probabilitatea introducerii de defecte funcţionale este crescută. • Boolean Expression Complexity – aceste expresii sunt dificil de testat ş ide înţeles. • Nested If Depth – blocurile de tip if Figura 2 imbricate conduc la cod greu de testat şi 11 h t t p : / / e n . w i k i p e d i a . o r g / w i k i / Continuous_integration 12 h t t p : / / e n . w i k i p e d i a . o r g / w i k i / Source_Control_Management 13 http://en.wikipedia.org/wiki/Plug-in_(computing)

14

14 h t t p : / / e n . w i k i p e d i a . o r g / w i k i / Brownfield_(software_development)

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro

15 h t t p : / / e r i k . d o e r n e n b u r g . c o m / 2 0 0 8 / 1 1 / how-toxic-is-your-code/ 16 http://en.wikipedia.org/wiki/God_object


TODAY SOFTWARE MAGAZINE major gradul de reutilizare, mentenanţa şi efortul necesar pentru testarea acesteia. • Anon Inner Length – dacă o clasă de acest tip este prea mare atunci afectează negativ uşurinţa de a înţelege funcţionalitatea metodei în care aceasta a fost definită şi testarea acesteia.

Figura 3

de înţeles. • Nested Try Depth – conduc la acelaşi tip de probleme ca in cazul Nested If Depth. • Missing Switch Default – această metrică semnalează un potenţial defect. Dacă în urma procesului de mentenanţă, se creează contexul necesar pentru ca programul să execute logica care ar fi trebuit să fie implementată pe ramura de switch default, atunci efectele sunt impredictibile. • Class Fan Out Complexity – valoarea acestei metrici măsoară gradul de cuplare a clasei evaluate. Are impact direct asupra efortului necesar pentru mentenanţa clasei (cel puţin rădăcina pătrată din această valoare). • Class Data Abstraction Coupling – această metrică măsoară numărul de instanţe ale altor clase declarate ca date membre în clasa analizată şi influenţează

Pasul următor a constat în gruparea acestor metrici pe unitate de cod software (clasă, metodă), calcularea unui scor de toxicitate total şi reprezentarea lor într-un Stackbar Chart (Fig. 3). Scorul de toxicitate se calculează ca raportul dintre valoarea obținută în urma analizei unității de cod software și valoarea maximă acceptată pentru metrica respectivă. De exemplu dacă metrica Method Length are valoarea maximă de 30 şi o clasă conţine 3 metode, una de 25 de linii, a doua de 45 de linii si ultima de 60 de linii, atunci scorul total de toxicitate este 25/30 + 45/30 + 60/30 = 0 + 1.5 + 2 = 3.5 puncte. Ideea scrierii unui plugin pentru Sonar care să implementeze această tehnică de vizualizare a venit firesc, datorită anumitor limitări ale soluției descrise mai sus • Colectarea metricilor se face manual. • Agregarea măsurătorilor se face folosind aplicația Excel și un macro specific. Integrarea efectivă cu platforma Sonar a fost făcută prin extinderea interfaței Decorator definită de Sonar SPI17, împa17 h t t p : / / e n . w i k i p e d i a . o r g / w i k i / Service_provider_interface

chetarea implementării într-un plugin Sonar și copierea acestuia în directorul plugins al serverului Sonar.

Concluzii

Includerea analizei statice a codului în procesul de Continuous Integration18, monitorizarea rezultatelor obținute pentru metricile de interes și compararea acestora cu valorile standard din industrie [LM0619] ne poate ajuta în combaterea efectului de acumulare a deficiențelor de implementare și proiectare. Code review-ul manual este în continuare un pas absolut necesar, deoarece nimic nu se compară cu experiența și intuiția umană, dar timpii dedicați acestui proces pot fi semnificativ diminuați. De asemenea, pentru identificarea și prioritizarea claselor care au acumulat carenţe tehnice, folosirea metodelor de agregare a metricilor precum Toxicity Chart, reprezintă o abordare pragmatică și eficientă.

Referințe [Bek07] Beck, Kent. Implementation Patterns -Pearson Education, Inc, 2008 [LM06] M. Lanza and R. Marinescu. ObjectOriented Metrics in Practice - Springer-Verlag, 2006. Toxicity Chart Plugin - http://docs.codehaus.org/ display/SONAR/Toxicity+Chart+Plugin How toxic is your code? - http://erik.doernenburg. com/2008/11/how-toxic-is-your-code/

18 h t t p : / / e n . w i k i p e d i a . o r g / w i k i / Continuous_integration 19 h t t p : / / w w w . a m a z o n . c o m / O b j e c t Oriented-Metrics-Practice-S oftware-Characterize/ dp/3540244298

www.todaysoftmag.ro | nr. 17/Noiembrie, 2013

15


programare

programare

Moment.js O singură librărie JavaScript pentru toate formatele Date/Time

M

oment.js este o librărie javascript creată cu scopul de a facilita parsarea, validarea, manipularea și formatarea datelor.

Cristian Galea

cgalea@smallfootprint.com Software Developer @Small Footprint

Orice dezvoltator de software s-a confruntat la un moment dat cu problema operării cu valori de tip date/time. Acestea dădeau mereu bătăi de cap când venea vorba de a fi folosite în efectuarea unor calcule relativ complexe, de suportat mai multe fusuri orare și formate ce difereau de la o zonă la alta. Nu ajută nici faptul că pe lângă diferențele de format create de oameni din regiuni diferite de pe glob, fiecare limbaj de programare și sistem de gestiune a bazelor de date oferă o implementare diferită când vine vorba de lucrul cu valori de tip date/time, singurul punct comun fiind celebra dată la care a început epoca “Unix” (1 Ianuarie 1970 12:00 AM). În ultimii ani ne găsim mereu în postura în care trebuie să citim și să manipulăm aceste valori folosind javascript, limbaj care nu are chiar o implementare exemplară când vine vorba de așa ceva. Aici intervine o librărie gen moment.js. Deși ocupă (în format minifiat) doar 8.8 kb această librărie oferă o suită foarte vastă de funcționalități.

expunându-și în același timp prototype-ul prin moment.fn pentru cei care doresc să adauge funcții noi. Pentru a crea o dată în moment este necesar un simplu apel moment(String); Dacă String nu este pasat, sunt returnate data și timpul curent. Valoarea pasată poate fi un șir de caractere în aproape orice format de pe glob, iar pentru a asigura că este parsat corect, se poate pasa ca parametru și formatul în care valoarea este dată. Acest constructor mai poate primi ca parametru și un obiect de tip Date nativ in javasript, un obiect de tip anonim și chiar și șiruri de întregi reprezentând diferitele componente sau Unix offset-ul în milisecunde. De asemenea, moment.js tratează și cazul special al datelor primite în format JSON din ASP. NET. moment(„/Date(1198908717056-0700)/”); // December 28 2007 10:11 PM moment(„2010 November 29”, „YYYY MMM DD”); moment(„2010-10-20 4:30 +2000”, „YYYY-MM-DD HH:mm Z”)//parsează și timezone-ul

Pentru a asigura uniformizarea la parsare, moment.js expunde și metoda moment.utc() ce parsează și manipulează datele în UTC. De asemenea, în ultimele Parsarea și validarea Moment.js este implementată ca un versiuni s-a adăugat metoda parseZone wrapper peste obiectul Date din javascript, care ține cont de informațiile despre fusul

16

nr. 17/Noiembrie | www.todaysoftmag.ro


TODAY SOFTWARE MAGAZINE orar din stringul parsat și expune și metoda zone() pentru a-l afișa sau seta. O adiție interesantă este opțiunea de a pasa ca parametri doar anumite componente ale date/time-ului, restul fiind setate la valorile curente. În momentul în care este creată, data este automat trecută prin filtrele de validare, ținându-se cont inclusiv dacă este vorba despre un an bisect sau nu. Pentru a verifica dacă a fost validate, se poate folosi metoda isValid() ce returnează o valoare boolean, și pentru a afla mai multe informații despre ce nu a mers bine la validare se poate folosi metoda invalidAt() ce returnează valori între 0 si 6 reprezentând care dintre componente (descrescător de la an la milisecundă) a fost invalidă. Din start putem realiza că folosind un astfel de mecanism se pot genera foarte ușor mesaje de eroare specifice. var elem = [„year”,”month”,”day”, „hour”, „minutes”, „seconds”, „milliseconds”]; var mom = moment(„2011-10-10 25:30”); if(mom.isValid()){ writeResult(„date is valid”); }else{ writeResult(„invalid value for „ + elem[mom.invalidAt()]); }

Manipularea datelor

Moment.js oferă getter-i și setter-i pentru fiecare componentă (an, lună, zi etc.) și pe lângă acestea și metode de a returna numărul de ordine al zilei în săptămâna respectivă, funcția putând primi ca parametru și un întreg negativ. De exemplu moment.day(-7) returnează duminica trecută. De asemenea, există și metode ce țin cont de faptul că în unele situații duminica e afișată ca fiind prima zi a săptămânii (prin metoda moment.weekday) dar și de standardul ISO (prin metoda moment.isoWeekday). Alte metode ce merită menționate sunt DayOfYear, WeekOfYear etc. Pentru calculul cu valori de tip date/time moment.js vine cu o serie de metode precum add(c, u), substract(c,u), startOf(u), endOf(u), max(), min() unde c este un întreg reprezentând cantitatea iar u este un string ce reprezintă unitatea (week day, year etc.). De asemenea, pentru calculul intervalelor de timp există funcțiile diff(moment), from(moment) și fromNow(moment) iar pentru compararea ușoară isSame(), isAfter(), isBefore(), isLeapYear(). Se poate observa ușurința cu care se pot calcula asftel lucruri precum “câte zile și ore au trecut de la un anumit moment?”, “acum cât timp a fost postat un comentariu?” , “cât mai dureaza până la momentul cutare” și chiar ”ce zi a săptămânii era când m-am născut?”. Afișarea rezultatelor acestor calcule se face foarte ușor. var mom1 = moment(„10/22/2013 var mom2 = moment(„10/22/2013 var mom3 = moment(„10/21/2013 writeResult(mom2.from(mom1)); writeResult(mom3.from(mom1)); writeResult(mom2.from(mom3)); writeResult(mom1.from(mom2));

16:00”); 15:30”); 10:00”); //30 minutes ago //a day ago //in a day //in 30 minutes

Afișare, formatare și internaționalizare

Moment.js oferă suport excelent pentru afișarea datelor în orice format dorit, folosind funcția moment.format() împreună cu o serie de simboluri predefinite ce reprezintă diferite componente în mai multe reprezentări. Asfel combinându-le se poate obține orice format dorit. De asemenea, sunt oferite și posibilități de afișare a datei și orei sau intervalului de timp într-o manieră mai lizibilă ca de exemplu “Saturday, December 1 1990” sau “15 minutes 13 seconds ago”. Trebuie luată în calcul și componenta pentru internaționalizare oferită de moment.js folosind funcția lang(name, obj) unde name este numele limbii ce dorim să o inserăm iar obj este un obiect

conținând cuvintele folosite în afișare. Pentru a schimba metoda de afișare, apelăm doar moment.lang(name). Astfel putem vedea ce ușor putem afisa pentru clientii vorbitori de limbă engleză data “Saturday, December 1 1990 12:00 AM”, pentru cei din Germania „Samstag, 1. Dezember 1990 0:00 Uhr” iar pentru cei din Rusia „1 декабря 1990 г., 00:00”. Această componentă vine împreună cu opțiunea de a adăuga “limbi” și formate personalizate. De exemplu există o extensie pentru moment.js ce adaugă formatul folosit de twitter (“5 hour”, “6d”).

Extinderea librăriei moment.js

Librăria moment.js este o librărie distribuită gratuit sub licență MIT. Astfel oricine poate să o extindă și să îi adauge funcționalități mai mult sau mai puțin convenționale. Pe lângă afișarea în diverse limbi au apărut și o serie de extensii precum formatul Twitter, formatul ISO Calendar, o extensie pentru manipularea mai bună a intervalelor și chiar și extensii ce oferă suport pentru formatul MSDate sau calendarul Jalaai folosit în orient în zona Persiei. Creatorii moment.js au creat o extensie numită “moment timezone” pentru a face ușoară conversia dintr-un fus orar în www.todaysoftmag.ro | nr. 17/Noiembrie, 2013

17


programare Moment.js - O singură librărie JavaScript pentru toate formatele Date/Time altul. Astfel pentru a converti momentul dat în fusul orar al Los Angelesului folosim doar moment(Data).tz(“America/ Los_Angeles”); . Pentru a demonstra cât de rapid se poate să extinzi moment.js am creat o extensie pentru un format propriu ce parsează data în formatul folosit în România și o poate afișa în două formate în limba română. moment.fn.myFormatDisplay = function(){ var mom = this; var months = [„Ianuarie”, „Februarie ”,”Martie”,”Aprilie”,”Mai”,”Iunie”,”Iulie”,”Aug ust”,”Septembrie”, „Octombrie”,”Noiembrie”,” Decembrie”]; return this.date() + „ „ + months[this.month()] + „ „ + this.year(); } moment.fn.myFormatDisplayLong = function(){ var mom = this; var months = [„Ianuarie”, „Februarie”, „Martie”,”Aprilie”,”Mai”,”Iunie”,”Iulie” ,”August”,”Septembrie”,”Octombrie”,”Noiembrie”, ”Decembrie”]; return this.date() == 1 ? „Ziua „ + this.date() + „-a din luna „ + months[this. month()] + „ a anului „ + this.year() : „Ziua a „ + this.date() + „-a din luna „ + months[this.month()] + „ a anului „ + this. year(); }

}

return moment(str, „D/MM/YYYY”);

va afișa „October 23 2013 12:30 PM”. În u r m a ap e lu lu i s e vor af i ș a Această funcționalitate este foarte puternică deoarece astfel se pot implementa următoarele: mecanisme de extragere a datelor din texte scrise in orice limbă. Exemplele de Concluzii Librăria moment.js a ajuns la un nivel genul dovedesc faptul că atâta timp cât se de maturitate la care poate fi folosită în cunoaște formatul în care sunt scrise data si singurață în orice proiect. În cei 8.8 kb timpul, moment.js poate sa parseze aproape înglobează o serie de funcționalități care orice format scris în orice limbă. Am folosit cu succes această librarie în ușurează foarte mult munca dezvoltatorilor de produse software când trebuie să mani- mai multe proiecte enterprise si o recomand puleze date și să suporte internaționalizare tuturor, fiind de părere că are potențialul împreună cu formatele și cuvintele spe- să facă pentru manipularea valorilor date/ cifice. Aceasta se află într-un stadiu de time ce a făcut jquery pentru manipularea continuă dezvoltare, fiind adăugate opțiuni DOM-ului. noi la fiecare versiune și asigurându-i compatibilitatea cu alte tehnologii precum Node.js, Bower sau Require.js. O funcționalitate nou introdusă în versiunea 2.0.0 este că formatele de afișare folosind cuvinte în diferite limbi sunt și parsabile dacă se parsează ca parametru și numele limbii, astfel putând extrage datele direct din texte scrise în diverse limbi. De exemplu: moment(„23 октября 2013 г., 12:30”,”DD MMM YYYY., HH:mm”, „ru”).lang(„en”).format(„LLL”); writeResult(fromOtherLanguage);

moment.fn.myFormatParse = function (str) {

18

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro


arhitectură

TODAY SOFTWARE MAGAZINE

Necesitatea modelării UML în analiza de business

O

Anița Păcurariu

anita.pacurariu@arobs.com Business Analyst @ Arobs

provocare foarte des întâlnită în cariera unui analist de business care operează în domeniul IT constă în modelarea scenariilor de utilizare, a proceselor, a domeniului şi a interacţiunilor dintre procese, sisteme sau actori, în proiectele pe care acesta îşi desfăşoară activitatea. De multe ori, exprimarea textuală a cerinţelor funcţionale, chiar dacă este structurată corect sub formă de epic-uri sau user story-uri, nu este suficientă pentru a înţelege în ansamblu o anumită funcţionalitate sau proces de business. Cu atât mai puţin devin vizibile lacunele funcţionale, blocajele, comunicările defectuoase sau redundante, dependinţele sau chiar posibilităţile de optimizare. În aceste situaţii, modelarea cerinţelor funcţionale devine esenţială atât pentru sponsorii, deţinătorii sau beneficiarii produsului, pentru analiştii de business cât şi pentru echipa de livrare. Unul dintre cele mai cunoscute şi accesibile standarde pentru modelare este UML (Unified Modeling Language), care pune la dispoziţie, în special pentru partea de analiză, diagrame de utilizare, de activitate, de clase şi de secvenţă. Aceste diagrame pot fi create cu ajutorul utilitarelor precum MS Visio, Enterprise Architect sau Star UML - dacă se doreşte o variantă gratuită.

Avantajele modelării UML

În cazul sistemelor software deja existente, o analiză de business eficientă şi corect întreprinsă poate evidenţia posibile lacune în funcţionalitate, funcţionalităţi duplicate, redundanţe sau blocaje şi de aceea, prin modelarea procesului sau a funcţionalităţii respective, se pot crea business case-uri valide pentru solicitarea de îmbunătăţiri sau schimbări funcţionale. Totodată, pentru sistemele software existente care necesită extinderi sau integrări, este necesar ca funcţionalităţile deja implementate să fie clar şi corect modelate, pentru

a putea avea un punct de pornire avantajos în ceea ce priveşte definirea cerinţelor funcţionale viitoare sau a integrării cu sisteme interne şi/sau externe. Business case-urile realizate trebuie însoţite de argumente solide referitoare la problemele descoperite în forma actuală a sistemului şi la îmbunătăţirile aduse de forma propusă – forme întâlnite în limbajul de specialitate ca ‘as-is system’ şi ‘to-be system’. Este cunoscut faptul că disponibilitatea clienţilor este mereu limitată şi de aceea, business caseurile trebuie prezentate într-o manieră atât intuitivă cât şi eficientă în ceea ce priveşte timpul alocat parcurgerii şi evaluării lor. În cazul sistemelor noi, aflate în faza de aliniere sau de definire, analiza de business însoţită de modelarea proceselor poate preveni problemele menţionate mai sus şi poate acţiona în vederea reducerii costurilor asociate cu dezvoltarea şi testarea, creşterii performanţei aplicaţiei, creşterii nivelului de satisfacţie a membrilor echipei alocate pentru dezvoltare şi testare, eficientizării etapei de mentenanţă şi suport. Beneficiarii şi/sau sponsorii produsului vor avea o imagine de ansamblu mai bună asupra funcţionalităţilor existente şi a cerinţelor funcţionale solicitate şi vor evita

www.todaysoftmag.ro | nr. 17/Noiembrie, 2013

19


arhitectură Necesitatea modelării UML în analiza de business confuziile şi folosirea termenilor tehnici specifici domeniului IT pe care de multe ori nu îi cunosc sau nu îi înţeleg în totalitate. Totodată le va fi mai simplu să monitorizeze şi să evalueze dacă ceea ce se livrează este ceea ce ei şi-au dorit. Echipa de livrare - cu referire aici atât la programatori cât şi la testeri - va primi o specificaţie funcţională clară, modelată într-un limbaj universal şi inteligibil, fără ambiguităţile şi interpretările survenite în urma exprimărilor preponderent textuale. Alte avantaje ale modelării UML sunt: creşterea încrederii în produs – atât a sponsorilor cât şi a utilizatorilor finali, reducerea intervalelor de învăţare a produsului pentru membrii noi care se alătură echipelor, facilitarea şi eficientizarea comunicării atât cu echipele tehnice cât şi cu clienţii. În cele ce urmează, voi prezenta fiecare dintre cele patru diagrame propuse la începutul acestui articol pentru a evidenţia beneficiile care pot fi obţinute prin realizarea lor.

Diagrame de utilizare

Diagrama de utilizare este cea mai intuitivă formă de prezentare a funcţionalităţilor oferite de un sistem, clasificate în funcţie de actorii care le întreprind. De exemplu, putem vorbi aici despre activităţi desfăşurate de diferite persoane cu diferite roluri (administrator, utilizator, student, etc) sau de alte sisteme. Diagrama de utilizare face parte din categoria diagramelor comportamentale şi prezintă funcţionalităţile sistemului din perspectiva unui utilizator. De regulă, este indicat să realizăm astfel de diagrame încă de la începutul proiectului iar pe măsură ce proiectul evoluează, tot mai multe scenarii de utilizare pot apărea. Pentru a realiza o astfel de diagramă, mai întâi stabilim contextul de operare al aplicaţiei (care poate fi un sistem, un modul, etc), apoi identificăm actorii care utilizează respectivul sistem iar în final, asociem fiecare scenariu de utilizare cu actorul corespunzător. Un actor poate avea mai multe scenarii de utilizare iar un scenariu poate fi utilizat de mai mulţi actori. acestea constituie detalii de implementare, nefiind responsabilitatea analistului de business), apoi relaţiile dintre aceste entităţi precum şi ordinul de multiplicitate al relaţiei. Putem vorbi aici Diagrame de activitate Diagrama de activitate este tot un tip de diagramă compor- despre relaţii de moştenire, de compoziţie, de dependenţă, de asotamentală şi este necesară în momentul în care avem de modelat ciere, de agregare, iar ca ordine de multiplicitate putem avea *-*; procese operaţionale sau de business formate din stagii succesive, 1-*, n-n, *-m, 0..1-* etc. Diagrama de clase este de uz limitat pentru analistul de busiunde putem întâlni blocuri de decizie sau bifurcaţii. Urmărind procesul putem observa tranziţiile dintre activităţi, activităţile ness, însă este necesară pentru a explicita din punct de vedere recurente, activităţile repetitive, blocajele, rutele mai scurte sau funcţional entităţile şi relaţiile dintre ele într-o manieră mult mai clară decât s-ar putea face verbal sau textual. rutele alternative, etc. Pentru a realiza o astfel de diagramă, mai întâi trebuie să identificăm setul de activităţi realizate de sistem, blocurile de decizie, Diagrame de secvenţă activităţile care se desfăşoară în paralel, activităţile care duc la aceDiagrama de secvenţă este utilă în momentul în care avem eaşi stare, eventualele bucle şi dependinţe. Apoi, vom plasa între de identificat din punct de vedere funcţional interacţiunile dinun punct de start şi unul de stop, fiecare activitate identificată mai tre procese, sisteme sau roluri şi ordinea în care aceste entităţi sus şi o vom relaţiona cu celelalte utilizând conectorii. Se pot crea interacţionează. Diagramele de secvenţă mai sunt cunoscute şi şi diagrame de activităţi cu swimlane-uri, în care se pot evidenţia sub numele de diagrame de evenimente şi fac parte din categoria activităţile efectuate de fiecare rol implicat în proces. diagramelor comportamentale, de interacţiune. Pentru a realiza o astfel de diagramă, mai întâi trebuie să punem în evidenţă entităţile implicate (actori şi/sau sisteme), Diagrame de clase reprezentate sub forma unor linii verticale, apoi mesajele trimise Diagrama de clase este utilă în momentul în care avem de pus în evidenţă din punct de vedere funcţional şi de gestionat enti- de acestea, în ordinea în care apar, reprezentate ca linii orizontale tăţi multiple, care interacţionează între ele şi care sunt relaţionate (săgeţi orientate dinspre emiţător către receptor). Dacă săgeata în baza unor ordine de multiplicitate. Acest tip de diagramă face este o linie continuă, ea reprezintă mesajul iniţial, iar dacă este o linie întreruptă, se pune în evidenţă mesajul returnat. În cazul parte din categoria diagramelor structurale. Pentru a realiza o diagramă de clase, mai întâi trebuie să iden- proceselor sincrone, săgeata are vârful plin iar emiţătorul trebuie tificăm entităţile din domeniu – reprezentate sub formă de clase să aştepte rezolvarea mesajului înainte să treacă la următoarea (opţional se pot adăuga membrii şi metodele fiecărei clase, dar acţiune, pe când în cazul proceselor asincrone, vârful săgeţii este

20

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro


TODAY SOFTWARE MAGAZINE gol iar emiţătorul poate iniţia o altă acţiune, până când mesajul iniţial va fi rezolvat. Se pot modela şi scenarii în care o entitate îşi trimite ei înseşi mesaje.

Studiu de caz

Să considerăm acum un exemplu intuitiv, pentru a pune în evidenţă fiecare dintre diagramele prezentate mai sus. Să presupunem că avem de realizat o aplicaţie web prin intermediul căreia se administrează cărţile din biblioteca unei universităţi. Orice student poate împrumuta una sau mai multe cărţi de la bibliotecă dacă îşi creează mai întâi un cont de utilizator. Apoi, studentul respectiv poate vizualiza toate cărţile din bibliotecă, îşi poate alege cartea sau cărţile dorite şi poate face o cerere de împrumut. Dacă respectivele cărti sunt disponibile (există pe stoc la bibliotecă) şi studentul nu are contul restricţionat (de exemplu - nu a returnat o carte în timp util, a deteriorat un exemplar împrumutat, etc), un administrator va valida cererea sa şi o va aproba sau nu. În cazul în care cererea se aprobă, studentul poate împrumuta cartea, iar dacă cererea nu se aprobă (de exemplu, dacă studentul mai are deja împrumutat un exemplar din acea carte, etc), el poate încerca să facă o altă cerere. Primul pas care trebuie făcut pentru a începe analiza şi modelarea constă în identificarea actorilor implicaţi, care în acest caz sunt studentul şi administratorul. Apoi, la pasul a doilea, vom identifica potenţialele acţiuni pe care le pot face actorii – crearea de cont, administrarea de cont, logarea în aplicaţie, vizualizarea tuturor cărţilor împrumutate, vizualizarea tuturor cărţilor disponibile în bibliotecă, alegerea unei cărţi, cererea de împrumut, aprobarea cererii de împrumut, respingerea cererii de împrumut, împrumutul propriu-zis, returnarea cărţii. Pasul al treilea constă în punerea în evidenţă a entităţilor şi anume – persoana (individul care foloseşte aplicaţia şi despre care se stochează informaţii precum ‘nume’, ‘prenume’, ‘CNP’, ‘adresă’, etc), utilizatorul (individul, care în momentul în care foloseşte aplicaţia trebuie să furnizeze informaţii precum ‘nume utilizator’, ‘parolă’, ‘tip cont’), administratorul (utilizatorul cu rol şi cont de administrator), studentul (utilizatorul cu rol şi cont de student) şi cartea (entitatea gestionată). La pasul al patrulea trebuie să identificăm secvenţele de mesaje schimbate de entităţi – cererea de împrumut făcută de student către aplicaţia web, notificarea făcută de aplicaţia web către administrator, decizia administratorului, procesarea cererii de împrumut şi notificarea trimisă de aplicaţia web studentului. Al cincilea pas constă în crearea efectivă a diagramelor.

Fig.2 Diagrama de activitate – solicitare împrumut (I)

Fig.3 Diagrama de clase

Fig.4 Diagrama de activitate – solicitare împrumut (II)

Fig.1 Diagrama de utilizare

www.todaysoftmag.ro | nr. 17/Noiembrie, 2013

21


arhitectură Necesitatea modelării UML în analiza de business Concluzii

Fig.5 Diagrama de secvenţă

22

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro

Probabil cel mai important livrabil pentru un analist de business este menţinerea satisfacţiei clientului iar aceasta se poate realiza doar atunci când clientul consideră că a primit produsul pe care l-a cerut. În consecinţă, nu doar capacitatea analistului de a obţine cerinţele corecte este importantă ci este esenţială şi capacitatea lui de a le exprima într-un limbaj clar şi concis. Diagramele au puterea de concentra mai multa informaţie decât textul iar folosirea unui limbaj standardizat precum UML asigură aceeaşi înţelegere din partea tuturor participanţilor. Modelarea scenariilor de utilizare, a proceselor operaţionale sau de business, a domeniului şi a interacţiunii dintre procese, sisteme sau actori aduce un beneficiu real tuturor persoanelor implicate în derularea unui produs software. Diagramele create, pe lângă faptul că aduc un plus de claritate pe durata dezvoltării, reprezintă şi un livrabil important al etapei de analiză, ele putând fi utilizate ulterior în orice fază a ciclului de dezvoltare a produsului, de către toţi participanţii, independent de atribuţiuni şi de nivelul de experienţă al acestora.


HR

TODAY SOFTWARE MAGAZINE

Obișnuința ca aliat

O

bișnuința înseamnă diminuarea reacției la stimuli repetitivi. De exemplu, reacția noastră la fluturașii lunari de salariu, la „ te iubesc „-urile repetate sau la unele sisteme de bonusare. Bagheta magică a zilelor noastre poartă numele de gamification - management comportamental - design persuasiv-motivational – cum vrem să o numim. Cristina Ilinca

Cristina.Ilinca@isdc.eu HR Manager si Product Owner @ ISDC

Frecvent citim despre companii care au implementat gamification la locul de muncă. Nu din întâmplare lucrez într-o astfel de companie. Am promovat și implementat aici un joc menit să schimbe modul în care angajații și businessurile privesc procesul de integrare a angajaților. Un joc care permite schimbul de cunoștințe literalmente fără frontiere , oferirea de feedback instantaneu în cadrul companiei , recompensarea pasiunii, a angajamentului și multe altele . Am reușit pe deplin ? Da, am reușit în crearea unui produs , în definirea cerințelor pentru fiecare sprint, în a fi un Product Owner activ și inspirat care a scris, cu mândrie, “release notes” după un an de dezvoltare . Suntem live. Este un succes? Cinci luni de la implementare, pot spune că da, într-adevăr , dar s-ar fi putut face mult mai bine. Nu am reușit să folosesc în propriul meu interes însăși obișnuința(habituation). Jucătorii concurează pentru a obține o umbrelă personalizată sau voucher-ul dorit, dar nevoia lor de a stăpâni o abilitate nu este provocată

așa cum ar trebui să fie, curiozitatea lor are prea puțin loc de explorare și sentimentul de apartenență lipsește. Tribul nostru așteaptă încă să fie format.

Jocul meu se numește Knowledge Seeker

În unele privințe, oamenii nu se maturizează pe deplin. De exemplu, plictiseala - ar trebui să fie o non-problemă într-un mediu de lucru profesionist. Oamenii maturi ar trebui să își stăpânească voința și concentrarea pentru a face față activităților și sarcinilor repetitive, finalizându-le. Cu toate acestea, în realitate nu se întâmplă exact așa. Voința și focusul sunt resurse prețioase care merită

www.todaysoftmag.ro | nr. 17/Noiembrie, 2013

23


HR Obișnuința ca aliat canalizate mai eficient. Multe dintre aceste activități sunt de fapt plictisitoare deoarece finalizarea lor nu pare să aibă un rezultat imediat, tangibil. Aici a intervenit Knowledge Seeker. Asocierea taskurilor cu rezultate imediate și recompense, oferă angajaților atât stimuli tangibili cât și motivația de a finaliza activități aparent plictisitoare. Am început prin a colecta “wish-list”-urile companiilor și cele ale angajaților și le-am transformat în recompense prin Knowledge Seeker. Listele pot să difere de la o companie la alta, iar soluțiile gamificate pot fi adaptate.

Ce s-a întâmplat?

Timpul de acomodare al nou-veniților s-a redus; angajamentul și motivarea au crescut și toate acestea pot fi măsurate cu ajutorul rapoartelor generate din modulul de administrare (analytics). Jocul a devenit un punct central de conectare pentru aplicațiile noastre interne și canalele de Social Media, oferind angajaților feedback direct și instantaneu și mai mult, permițându-le să facă greșeli într-un mediu controlat și liber. Colegii înscriși în platforma Knowledge Seeker pot folosi Twitter și Facebook pentru a împărtăși cu prietenii experiențele și realizările lor, zugrăvind pentru potențialii angajați o imagine realistă a atmosferei la locul de muncă.

Figura 1.1 –Profile page

Curba de învățare a scăzut și angajaților le-a fost facilitată familiarizarea cu schimbări în strategia companiei, procese sau proceduri noi, locații diferite sau culturi diferite. Satisfacția angajaților poate fi măsurată, de asemenea, cu ajutorul funcționalității „Mood Meter”. Un grafic este generat prezentând utilizatorului starea sa, prin comparație cu toți ceilalți utilizatori - un mini sondaj ad-hoc de satisfacție.

Detalii privind rezultatele și realizările jucătorilor sunt furnizate prin intermediul ecranului “Wall of Achievements” (https://know.isdc.eu/web/knowledge-seeker/woa), prin intermediul graficului care indică progresul de pe pagina de profil și prin intermediul diverselor rapoarte (analytics). La finalizarea cu succes a acestor task-uri și quest-uri, jucătorii sunt recompensați cu “achievements” și cu puncte (experience Figura 1.2 Mood meter points) pe care le pot folosi pentru a achiziționa produse din Feedbackul instant între angajați este încurajat și conectat magazinul aflat în cadrul jocului (umbrele, rucsacuri, vouchere, cu sistemul nostru de management al performanței. Angajații își zile de concediu, etc.). pot acorda reciproc insigne (badges), inspirate din Skill Matrix-ul

24

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro


TODAY SOFTWARE MAGAZINE Knowledge Seeker oferă contextul pentru creativitate și pasiune în fiecare task abordat de angajat doar printr-o simplă schimbare de perspectivă - rezultatele sunt mereu la îndemână și ușor de măsurat.

Figura 1.3 Mood meter graph

customizat al companiei. E-mailul trimis de sistem atunci când punctele și badge-urile sunt acordate acționează ca un “appointment mechanic”, menținând astfel toate motoarele jocului în funcțiune. Toate măsurătorile oferite de “Wall of Achievements” și de modulul de raportare ne ajută la nivel de management și îi ajută și pe jucători să (se)calibreze (cu)sistemul, deoarece sunt gândite să încurajeze comportamentele pozitive. Toți cei cinci motivatori intrinseci sunt atinși: Autonomia [I control]– Jucătorii pot alege ce activități să desfășoare în interiorul Knowledge Seeker. Ei pot decide categoria în care își vor testa cunoștințele și abilitățile - fiecare alegere este la fel de valabilă și echitabil recompensată. Mastery [[I improve] - Nivelurile pentru fiecare categorie confirmă perseverența jucătorilor iar, prin atingerea lor, sunt deblocate “achievement”-urile. Scopul [I make a difference]– Jucătorii se concentrează să obțină puncte, să acorde “badges” altor jucători și să le primească la rândul lor. Administratorul poate acorda, de asemenea, puncte jucătorilor pe baza feedback-ului primit. Progresul [I achieve] - Jucătorii își pot vedea activitatea în orice moment, își pot urmări progresul pe pagina de profil sau se pot compara cu ceilalți jucători accesând “Wall of Achievements”. Interacțiune socială [I connect with others] – Jucătorii își pot demonstra cu ușurință aprecierea lor față de alți jucători, acordându-le “badges” sau puncte prin intermediul Admin-ului, pot folosi rețelele sociale pentru a-și publica achievement-urile și, de ce nu, pentru a obține recunoaștere.

Numărul de vizitatori al jocului a crescut cu mai mult de 200% din momentul lansării; avem mai mult de 100 de jucători activi acum, cu 19 000 de puncte acordate și 200 de “achievements” primite . Funcționalitățile viitoare vor include și un modul de gestionare a cunoștințelor (knowledge management - un sistem bazat pe ierarhie și respect care crește viteza transferului de cunoștințe și evită pierderea cunoștințelor) și un modul orientat către echipe (stimulând motivația de sudare a echipei). Jocului îi poate fi atribuit, de asemenea, și un scop mai înalt, legând strategia de responsabilitate sociala (CSR) a companiei, de numărul total de puncte obținut de către toți jucătorii. Îndemnul meu: faceti exact așa cum am făcut si eu . Învățati, experimentați, luptați pentru implementarea soluției voastre, aveți încredere că va schimba lumea și chiar așa se va întâmpla în cele din urmă. Gamification ar putea fi considerat un trend, dar este un trend care ajunge la copilul din noi, așa că va avea întotdeauna un răspuns mai eficient decât alte tehnici motivaționale 2.0. În cazul în care design-ul jocului vostru va aborda teme universale cum ar fi comunitatea, colectarea de lucruri interesante și rare, jucătorii ar putea fi suficient de curioși și suficient de motivați încât să se lase antrenați. Trebuie doar să găsiți o modalitate prin care să le mențineți atenția și angajamentul. Dacă reușiți veți avea o comunitate motivată, care vă va oferi o perspectivă nebănuită în gândurile, convingerile și preferințele lor. Și astfel, veți reuși să faceți din “obișnuință” aliatul vostru. Game on!

Pașii sunt simpli – așa cum îi puteți vedea pe pagina de login: (https://know.isdc.eu) First, log in. Second, seek the information and methods needed to enhance system stability. Third, enjoy rewards and achievements thus unlocked. Fourth, share achievements via Facebook and Twitter systemically.

www.todaysoftmag.ro | nr. 17/Noiembrie, 2013

25


programare

Instrument de monitorizare reactivă Reactive Monitoring Tool

R

eactive Monitoring Tool este un instrument intern dezvoltat ca parte a Centrului de Competenţă de Java al companiei 3Pillar Global. Instrumentul are un scop foarte bine definit constând în monitorizarea continuă a unui server, reacţia imediată la apariţia unor evenimente particulare şi uşurinţa în utilizare.

Cornel Ştefanache

cornel.stefanache@3pillarglobal.com Java Technical Lead @3Pillar Global

Prima versiune a aplicaţiei utilizează tehnologia JMX pentru conectarea la un server şi monitorizează diverse valori publicate de bean-uri pentru a recţiona corespunzător. Datele de intrare ale sistemului vor fi reprezentate de valori jmx bean citite de pe anumite servere jmx specificate la configurarea intrumentului de monitorizare. Pentru a reacţiona corespunzător se folosesc diferite handlere de evenimente cum ar fi: log – loghează informaţiile corespunzătoare evenimentului, rest – realizează o cerere HTTP la un URL configurat folosind atributele transmise, shell – execută un script shell pe un calculator la distanţă sau local. Arhitectura aplicaţiei are un design flexibil, având toate modulele dezvoltate ca API-uri cu scopul de a reduce efortul de adăugare a noii funcţionalități şi de a facilita tranziţia către noi membri în echipa de dezvoltare. Arhitectura e formată din următoarelel module: • core – conţine clase de tip entitate, constante, interfeţe comune şi utilitare; • config – implementează logica de configurare, operaţiile CRUD de bază p e divers e mo duri de

26

nr. 17/Noiembrie | www.todaysoftmag.ro

persistare a datelor cum ar fi fişiere XML şi baze de date relaţionale; • connector – scopul modulului este acela de a stabili conexiunea cu serverul configurat şi citirea atributelor necesare la fiecare trecere. Conectorul este de asemenea responsabil cu restabilirea conexiunii în cazul în care aceasta a căzut. Modulul poate fi utilizat ca o aplicaţie de sine stătătoare deoarece toate informaţiile citite sunt inserate într-o coadă la fiecare trecere, furnizând mesaje către toţi consumatorii înregistraţi. • ruleengine – conţine setul de reguli pentru interpretarea datelor precum şi executarea metodelor personalizate. Acest modul este dezvoltat peste JBoss Drols ca platformă de intregrare a logicii de business. Funcţiile API expuse de acest modul permit utilizatorului să execute oricare dintre regulile definite cu o listă de parametri. Pentru a face aplicaţia flexibilă la tratarea diverselor evenimente se foloseşte introspecţia astfel încât utilizatorul poate defini funcţii personalizate ce pot fi încărcate la iniţializarea aplicaţiei. • app – conţine logica aplicaţiei principale ce utilizează modulele core, config,


TODAY SOFTWARE MAGAZINE Pentru a seta complet întregul mediu, fereastra de configurare connector şi ruleengine, responsabilitatea principală constând în conectarea tuturor acestor module independente şî asigură permite definirea mai multor aspecte ale mediului de configurare funcţionarea întregului sistem. Modulul aplicaţiei princi- cum ar fi: conexiuni, canale, reguli şi legăturile dintre acestea. pale este responsabil de iniţializarea tuturor componentelor independente, iniţializarea cozii unde connector-ul trebuie să insereze atributele citite şi înregistrează procesele consumator ce vor executa funcţii particulare de tratare a evenimentelor. • web – aceasta este o componentă opţională ce publică o aplicaţie web în scopul de a reduce efortul de depanare şi configurare. Această componentă este responsabilă de pornirea modulului aplicaţiei principale şi utilizează funcţii API pentru a expune serviciile REST aplicaţiei web. Pe lângă faptul că Reactive Monitoring Tool rulează ca o aplicaţie de sine stătătoare, acesta expune o serie de funcţii API care ne permit crearea unei interfeţe utilizator de configurare.

Interfaţa utilizator

Aplicaţia web a Reactive Monitoring Tool porneşte cu o fereastră foarte simplă ce afişează toate conexiunile definite curente. Dintr-o listă simplă se poate alege definirea configurării execuţiei curente, afişarea rezultatelor din consola aplicaţiei de monitorizare, filtrarea job-urilor sau pornirea sau oprirea execuţiei acestor job-uri. Fiecare job poate fi oprit/pornit individual sau se poate afişa o fereastră ce conţine starea curentă a job-ului. Fereastra ce conţine detaliile de configurare are trei secţiuni: • Connection: unde se afişează setările serverului; • Channel: informaţii legate de valorile monitorizate; • Rule: prezintă configuraţia actualelor reguli de tratare a evenimentelor.

În ferestrele de configurare Connection şi Channels utilizatorul va putea testa corectitudinea configuraţiei (prin apăsarea butonului reprezentat de o bifă verde din toolbar). În fereastra Channels, ca efect al acestei validări, utilizatorul va putea vizualiza toate metodele şi atributele expuse şi le poate adăuga ca elemente de monitorizare pentru actuala configuraţie. Următorul pas în configurarea aplicaţiei de monitorizare constă în definirea regulilor ce se vor executa pe server. Fereastra Rule permite utilizatorului să definească, verifice şi depaneze reguli. Regula poate fi validată şi executată (folosind date fictive) pe server așa cum ar procesată în mediul de producţie.

Odată ce o regulă este configurată, ea poate fi conectată la o structură de monitorizare în secţiunea Events. După ce 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. 17/Noiembrie, 2013

27


programare

Instrument de monitorizare reactivă - Reactive Monitoring Tool

configuraţia este salvată, conexiunea este disponibilă (dar nu şi pornită) în lista de conexiuni definite.

Tehnologiile folosite la implementarea aplicaţiei web sunt AngularJS şi LESS. Aplicaţia web este iniţializată şi executată într-un context Jetty Application Server împreună cu aplicaţia Reactive Monitoring Tool. Comunicarea dintre JS şi aplicaţie server este realizată prin servicii REST care sunt conectate la funcţiile API publicate de aplicaţia de monitorizare.

Studiu de caz

Aplicaţia Reactive Monitoring Tool a fost utilizată pentru monitorizarea unui sistem de stocare a mesajelor pentru a se asigura procesarea mesajelor în timp real cu costuri reduse. Una dintre cerinţele importante de business era scalarea dinamică a infrastructurii curente pentru a satisface nevoia de procesare a consumului intens de mesaje. Pentru satisfacerea nevoilor de scalare automată a sistemului, a fost prezentată următoarea arhitectură: Consumatorii monitorizaţi utilizează aplicaţia web expusă pentru a genera cereri care vor fi transmise către server pentur a fi procesate de consumator. Infrastructura este iniţializată având o singură staţie consumator capabilă să proceseze cel mult 10 mesaje simultan. Responsabilitaţile consumatorilor şi a instrumentului de monitorizare sunt enumerate mai jos: Consumator: • Execută logica de business bazată pe coada de mesaje. • Nu are cunoştinţă de aplicaţia de monitorizare. • Poate executa un număr configurabil de procese consumator paralele. Sistemul de monitorizare reactivă • Monitorizează serverul ActiveMQ . • Execută funcţii specifice atunci când dimensiunea cozii depăşeşte o anumită valoare. • Decide pe care staţie consumator se va starta un nou proces consummator. Paşii executaţi pentru scalarea infrastructurii sunt: 1. Aplicaţia Reactive Monitor este pornită, conectată la server şi porneşte consultarea cozilor. Numărul total de cozi curente

28

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro

este 0; 2. Aplicaţia producător transmite 30 de mesaje către coadă. Numărul total de cozi curente este 0; 3. La următoarea inspectare intrumentul de monitorizare reactivă citeşte mesajele din coadă şi porneşte două noi servere pentru procesarea acestora. Deoarece este un singur server consumator pornit, intrumentul de monitorizare reactivă va porni un proces consumator pe primul server pentru a începe procesarea mesajelor; 4. La a doua inspectare, dacă una dintre maşinile consumator finalizează estimarea acurateţei procesării, un nou proces consumator va fi pornit pentru a echilibra procesarea pe maşinile consumator. Dacă nici unul dintre servere nu finalizează procesarea, un alt proces consumator va fi pornit pe serverul disponibil iniţial. Procesul continuă până când toate serverele disponibile sunt iniţializate şi procesele consumator sunt distribuite în mod egal. 5. Instrumentul de monitorizare reactivă va opri serverele consumer disponibile dacă nu mai sunt mesaje de procesat.


management

TODAY SOFTWARE MAGAZINE

Comunități de practică

I

deea de comunități de practică derivă de la principiul agile care enunță nevoia de îmbunătățire continuă. Una dintre practicile agile pentru îmbunătățire continuă este crearea de comunități de practică, pe anumite domenii. O comunitate are un scop si este formată dintr-un grup de persoane pasionate sau interesate de aceleași subiecte. În agile obiectivul unei comunități este de a împărtăși cunoștințele și experiențele (cu cât mai diferite, cu atât mai bine) ale fiecărui participant. Alexandru Bolboaca

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

Companiile eficiente care aplică filozofia agile creează și întrețin aceste comunități de practică. Ele sunt locul în care specialiștii din diverse domenii se întâlnesc, își împărtășesc cunoștințele, iau decizii coerente la nivelul companiei, află cele mai bune practici din specializarea lor. Este foarte important ca aceste întâlniri să se întâmple la un interval regulat, să nu fie foarte lungi și să aibă un subiect clar definit pentru fiecare întâlnire.

Ce tipuri de comunități de practică putem găsi?

Adrian Bolboaca

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

O practică foarte bună este să avem comunități de practică pe specializări: arhitecți, designeri, programatori specializați pe un anumit limbaj de programare, product owners, scrum masters, business analysts, testers, etc. Pentru a crea o comunitate de practică trebuie să existe acel nucleu, format din oameni foarte pasionați de acel subiect. Aceștia se ocupă cu organizarea primelor întâlniri, caută subiecte incitante pentru a-i invita și pe alți colegi interesați. În această fază trebuie ca managementul să acorde sprijinul total grupului care are această inițiativă de colaborare.

dobândite rămân în cadrul unei echipe, sau a unor echipe care colaborează pentru un proiect. Dar în software, precum în multe alte domenii, echipele trebuie adesea să rezolve aceleași probleme sau probleme similare. Este mult mai eficient la nivel de companie să avem aceste comunități de practică, unde se întâlnesc persoane care provin din echipe diferite. companiei. Deși aceste comunități de practică presupun o investiție de timp, avantajul acestora constă și în faptul că oferă soluții, la găsirea cărora în mod normal s-ar cheltui mult mai mult timp.

Ce tipuri de activități putem avea?

În funcție de tipul de comunitate pot să existe o varietate de tipuri de activități. Cel mai simplu tip de activitate are fi o discuție, cu o durată fixă, cu un subiect bine definit. De exemplu, pentru o comunitate de Scrum Masters am putea avea o discuție despre rezolvarea impedimentelor echipei. Discuția ar avea 45 de minute și ar trebui moderată de cineva experimentat. Scopul acestei întâlniri ar fi de a arăta care sunt tehnicile de rezolvare a impedimentelor, ce a funcționat și ce nu a funcționat, din experiența participanților la întâlnire. Este important ca participanții să vină pregătiți, informați în legătură cu temaCare ar fi rostul acestor comunități? tica discuției, pentru a putea aduce cât mai Adesea se întâmplă că informațiile www.todaysoftmag.ro | nr. 17/Noiembrie, 2013

29


programare Comunități de practică multă valoare în timpul întâlnirii. Un alt tip de activitate ar putea fi o prezentare de 20-25 de minute, urmată de o discuție de 10-20 de minute pe tematica prezentată. Acest tip de întâlnire necesită mai multă pregătire din partea prezentatorului, dar aceasta nu înseamnă că și ceilalți participanți nu pot să studieze puțin tematica înaintea întâlnirii. Pentru comunitățile de programare pot să fie sesiuni săptămânale sau bi-lunare de 1-2 ore de coding katas, coding dojos (vezi articolul din numărul 14), jocuri de programare cum ar fi Taking Baby Steps, Brutal Refactoring Game, TDD as if you meant it, etc. Acest tip de întâlnire este ceva mai dificil de organizat pentru că este nevoie de un facilitator experimentat, participanții trebuie să aibă calculatoare, trebuie o sală cu mese și cu un proiector. Este foarte important ca aceste jocuri să ajute participanții să învețe cum să rezolve probleme curente cu care se confruntă. De aceea, organizatorii comunității ar fi bine să se consulte cu echipele înainte de a face întâlnirea, pentru a vedea care ar fi temele care aduc cea mai multă valoare la nivel de companie. Pentru arhitecți există niște formate speciale, cum ar fi Architectural Kata. Acest joc este conceput special pentru a exersa arhitectura și pentru a avea discuții la nivel înalt, la nivel de concept. Sunt foarte utile pentru că arhitecții software nu au ocazia să construiască atât de multe sisteme de la zero, iar acest format le permite să învețe unii de la ceilalți să fie mai rapizi în conceperea unei arhitecturi de calitate. Pentru programatorii și arhitecții care vor să învețe software design foarte eficiente sunt prezentări pe cod, pe proiector. Sau chiar performing katas, când un programator sau un arhitect scrie cod de la zero, explicând deciziile pe care le ia din punct de vedere al design-ului. Aceste întâlniri unde se afișează cod sunt foarte eficiente și aduc foarte multe beneficii celor prezenți, pentru ca participanții interacționează mult mai rapid cu cele afișate, decât la întâlniri unde doar vorbim despre software design sau despre calitatea codului. Exemplele clare sunt esențiale pentru subiecte de acest gen.

Cum învață comunitățile de practică unele de la celelalte?

În unele companii la perioade mai lungi, 2-3 luni, se organizează conferințe interne de învățare care durează între o zi și 2-3 zile. Aceste conferițe pot să fie doar prezentări, dar tot mai actuale sunt conferințele interne în format Open Space.

30

Acestea sunt evenimente de învățare care transcend comunitățile de practică având o specializare clară și au rolul de crea un cadru în care se împărtășește cunoașterea între comunitățile interne de practică. Open Space are avantajul că nu are nevoie de foarte multă logistică și pregătire în avans din partea “vorbitorilor” pentru că agenda conferinței se face pe loc, în funcție de interesul celor prezenți. Acest fapt generează cu atât mai multă valoare la nivel de companie, pentru că înseamnă ca problemele cele mai stringente ale echipelor vor fi rezolvate cât mai curând și eficiența lor va crește. Totuși, un lucru este esențial: pentru o conferință internă de tip Open Space este nevoie de un facilitator experimentat. În cazul în care nu există o asemenea persoană în interiorul companiei, este esențial să fie găsit un facilitator extern. O alta modalitate prin care comunitățile interne de practică învață unele de la altele este prin expunerea informației create, dobândite, acumulate de-a lungul sesiunilor periodice. Una dintre cele mai bune modalități ar fi crearea unui wiki intern unde să fie secțiuni cu toate comunitățile de practică, sesiunile fiecăreia, tipul activității realizate de fiecare dată și învățămintele luate in cadrul fiecărei întâlniri. Este important ca oricine să se poată înscrie pentru a primi informații noi din acest wiki intern, atunci când sunt publicate. De asemenea, funcționalitatea de căutare trebuie să fie foarte bine pusă la punct, pentru că după un număr de întâlniri nimeni nu va mai ști exact ce informații există.

Comunitățile pot fi doar interne?

Evident că nu. Pe lângă aceste comunități de practică interne este foarte importantă participarea la comunități de practică externe companiei. În cadrul comunităților externe putem sa auzim subiecte noi, idei noi, pe care le putem aplica ulterior în intern. Există tot mai multe comunități, care cuprind aproape toate domeniile de activitate din industria software, deci totul este să ne luăm timp pentru a vrea să învățam și de la alții. Comunitățile organizează și evenimente de tipul coderetreat, legacy code retreat, dar și coding dojos, coding katas sau architectural katas si jocuri agile/lean. Prin participarea la aceste evenimente nu avem decât de învățat, prin practică într-un mediu unde putem greși fără consecințe. Participarea la conferințe locale, naționale sau internaționale este un alt aspect. Există conferințe tehnice, pe teme

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro

de organizare a companiei, pe teme de management și leadership, etc. Toate aceste conferințe nu pot să ne aducă decât beneficii, iar ideile preluate de acolo putem să le discutăm în comunitățile interne de practică și dacă se potrivesc în contextul nostru putem să încercăm să le aplicăm. În concluzie, am vrea să vă amintesc că software este o industrie a cunoașterii, iar comunitățile de practică sunt una dintre cele mai bune modalități de a crea și de a împărtăși cunoașterea în cadrul unei companii. Companiile eficiente în industria software învață repede și reușesc să crească într-o industrie care se schimbă foarte repede. Voi când vă creați comunități interne de practică? Dacă nu știți cum, întrebați pe autorii acestui articol prin intermediul programez.ro sau prin mail.


management

TODAY SOFTWARE MAGAZINE

Scrumban

M

Tudor Trișcă

tudor.trisca@msg-systems.com Software Developer @ .msg systems Romania

anifestul pentru Agile Software Development din februarie 2001 s-a dovedit a fi o puternică declaraţie de viziune care ţine de mai bine de un deceniu şi ghidează inovaţii în echipele auto-organizate. Manifestul conţine doisprezece principii cu patru atribute referenţiate mai des care reflectă esenţa spiritului şi a viziunii. Raportându-se la principiile tradiționale, aceste atribute acordă prioritate: • Indivizilor şi interacţiunii față de procese şi unelte. • Software-ului functional față de documentaţie completă. • Colaborării cu clienţii față de negocierea de contract. • Predispoziţei la schimbare față de urmărirea unui plan. demonstrat după fiecare iteraţie, Mai mult, practicanţii Agile au notat două • Optimizarea planului de livrare şi axiome care sunt centrale eforturilor de agiup-datarea priorităţilor în colaborare cu litate şi se rup de la practicile costisitoare din clientul, bazate pe datele obţinute după punct de vedere al timpului din trecut: inspectarea livrării după fiecare iteraţie, Axioma 1: Este posibil să împarţi munca • Optimizarea procesului prin ţinerea în incrementări mici care aduc valoare şi care unei retrospective după fiecare iteraţie, pot fi planificate independent. • Organizarea: roluri: Product Owner, Axioma 2: Este posibil să dezvolţi o un Scrum Master şi o echipă de dezvoltare incrementare care aduce valoare într-un flux cross-funcţională, continuu de la cerinţe până la livrare. • Practici: ceremonii: un daily stand-up, Cu aceste şine de ghidare pe calea spre livrarea unui produs funcţional în iteraţii de agilitate, selectarea şi folosirea unei metolungimi fixe (Sprint-uri), ţinerea de şedinţe dologii (Scrum) şi a unui set de practici de de Sprint planning şi de retrospective. management (Kanban) sunt decizii care trebuie luate în contextul angajamentului şi cultura organizaţiei. Kanban Kanban poate fi caracterizat ca un sistem de muncă în curs incremental şi evolutiv. Scrum Sunt foarte multe texte şi bloguri despre Derivat de la Toyota Production System Scrum, cu detalii pentru practicanţii curioşi, (TPS) şi introdus în lumea dezvoltării softîncepători sau experimentaţi. O descriere de ware, un sistem Kanban este în esenţă un set de practici şi tactici simplu, dar puternic. bază ar fi: • Împărţirea organizaţiei în echipe mici, Termenul Kanban se referă la o unitate de muncă care se mişcă prin fluxul de muncă al cross-funcţionale, auto-organizate, • Împărţirea muncii într-o listă de livra- organizaţiei doar atunci când există capacitatea necesară pentru adresarea muncii la acel bile mici, concrete, • Împărţirea timpului în iteraţii scurte de pas din proces. Aprope fiecare descriere a Kanbanului lungime fixă (de obicei de la una la patru săptămâni) cu un potenţial cod de livrat ca unealtă de administrare şi îmbunătăţire a www.todaysoftmag.ro | nr. 17/Noiembrie, 2013

31


management Scrumban fluxului de muncă începe cu următoarele elemente de bază: • vizualizarea fluxului de muncă: o reprezentare vizuală a procesului te lasă să vezi exact starea activităţii muncii (ex.: to do, in progress, done). Se folosește un Kanban board care are un set de coloane ce reflectă paşii fluxului de muncă. Cu această unealtă, fluxul muncii este făcut vizibil pentru a face activităţile şi problemele evidente. • munca în curs: Kanban limitează munca în curs (WIP:

Work in progress) printr-o poliţă explicită setată de echipă pentru a promova calitatea, concentrarea şi terminarea muncii (ex.: echipa nu acceptă mai mult de două activităţi de muncă simultane la un singur membru).

Scrumban

Ce este “Scrumban”? Numele pare să ofere un răspuns simplu – trebuie să fie o combinaţie între Scrum şi Kanban. Unii oameni sunt de părere că regulile din Scrum sunt puţin cam stricte şi Kanban-ul nu pare să ofere destulă îndrumare în unele lucruri cum ar fi rolurile şi momentele când planificarea şi retrospectiva ar trebui să aibă loc. Aşa că soluţia ar fi îmbinarea celor două. Scrumban reprezintă cele mai bune elemente din Scrum şi Kanban unde conceptele cheie ale unei echipe care lucrează împreună să finalizeze munca (Scrum) şi cant it ate a muncii limitată la o valoare optimă (Kanban) sunt combinate într-o metodologie pentru un randament ridicat şi vizibilitate în procesul de dezvoltare. Nu există nimic în Scrum care să fie incompatibil cu adoptarea Kanban. Nimic exceptând regula care spune că regulile nu pot fi schimbate. Dacă îţi poţi valida faptul că ar fi mai eficient a face planning mai frecvent sau mai rar, Kanban spune că atunci ar trebui să faci acea schimbare. Scrum ar putea spune şi el că e ok să faci schimbarea, dar dacă o faci, atunci nu mai lucrezi în Scrum. Aceasta este cheia la ceea ce reprezintă Scrumban. Este un proces care e îmbunătăţit cu Kanban, care probabil nu mai este strict Scrum. O parte a frameworkului Scrum se vrea modificată (sau poate să nu se încerce niciodată) pentru că se crede faptul că schimbarea e mai adecvată, aduce mai multe beneficii sau suportă costuri mai mici decât Scrum-ul pur. Astfel de procese obişnuiau să fie denumite ca şi, oarecum derogatoriu, „Scrumbut”. Scrumban este alternativa mai acceptabilă, mai puţin peiorativă, şi mai pozitivă deoarece implică faptul că foloseşti Kanban. Astfel, o definiţie acceptabilă a Scrumban-ului, pentru a reduce confuzia în discuţiile în jurul acestui subiect este: „Scrumban este Scrum sau un proces asemănător Scrum-ului care este îmbunătăţit folosind Kanban”.

Scrum vs. Scrumban vs. Kanban

32

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro

Scrum

Scrumban

Kanban

Vizualizare parţială (input, output, şi in progress)

Vizualizare totală

Vizualizare totală

Backlog

Backlog

Backlog

Iteraţii fixate în timp Depinde de decizia echipei (Scrum / Kanban)

Flux continuu

Sprint Planning

Depinde de decizia echipei

Planning dinamic

Munca estimată pentru Sprint

Depinde de decizia echipei

Munca estimată minim (estimată pentru flux)

Resetarea Boardului după Sprint

Depinde de decizia echipei

Board persistent

Grafice Burn-down (Burn-up)

Depinde de decizia echipei

Fluxul acumulat

Munca în curs (WIP) controlată de contextul sprintului

Depinde de decizia echipei

Munca în curs controlată de starea fluxului de muncă

Schimbările tratate doar în Sprint-ul următor

Depinde de decizia echipei

Schimbările adăugate pe board (to do)

Impedimentele sunt tratate imediat

Depinde de decizia echipei

Impedimentele sunt evitate

Concluzii

„Condimentând” procesul de Scrum cu elemente din Kanban, rezultând astfel Scrumban, poate aduce schimbări în randamentul echipei şi folosirea board-ului Kanban asigură un nivel mult mai mare de transparenţă. Dar este Scrumban mai bun decât Scrum? Răspunsul la această întrebare poate varia de la caz la caz, depinzând de natura muncii pe care echipa o face şi mediul în care lucrează. Scrumban poate fi o alternativă a procesului Scrum, dacă se aplică mult mai bine pe nevoile organizaţiei/echipei tale.

Referinţe: „What is Scrumban?”, Andy Carmichael, 2013 „Implementing Scrumban”, William Patrick Swisher, 2013 „What makes Scrumban, Scrumban?”, Thomas Cagley, 2013 „Kanban as a Tool in the Agile Toolbox”, Cognizant Technology Solutions, 2012


business

TODAY SOFTWARE MAGAZINE

The leading engineering team on SharePoint and Project Server worldwide

U

MT Software reprezintă divizia de software engineering din grupul de firme United Management Technologies (UMT) împreună cu UMT Consulting Group (www. umt.com) și UMT 360 (www.umt360.com). Avem o activitate de peste 20 de ani pe piața soluțiilor de Enterprise Project Management (EPM) și suntem cel mai important partener Microsoft EPM din America de Nord, în ultimii 5 ani fiind nominalizati de două ori Gartner Cool Vendor*  și de asemenea de două ori Microsoft Partner of the Year*. Ana Oarga

ana.oarga@umt.com HR Specialist @ UMT Software, Cluj-Napoca

Soluțiile noastre inovative își găsesc recunoașterea în poziționarea UMT în Gartner Visionary Quadrant (http://www.gartner. com/DisplayDocument?doc_cd=252457). Istoria UMT în România începe în anul 2000 la București, unde divizia UMT România condusă de Cătălin Olteanu dezvolta un produs de pionierat pentru domeniul PPM numit UMT Portfolio Manager. Nivelul de inovatîie și flexibilitatea produsului a atras atenția Microsoft, care a achiziționat divizia UMT România la începutul lui 2006. În 2008 UMT își redeschide divizia de dezvoltare software din România sub numele de UMT Software, la Cluj-Napoca. Produsele și serviciile pe care le cream aici sunt cunoscute la nivel global, completând suita de EPM a Microsoft cu capabilității de management financiar al proiectelor și portofoliilor de proiecte. “Aveam nevoie de o echipă care poate trece dincolo de liniile de cod și care poate înțelege conceptele de business din perspectiva clientilor. De aceea ne considerăm norocoși că am facut transferul echipei de development în Cluj-Napoca, echipa excelând

atât în privința calității livrabilelor dar și în managementul proiectelor. Avem certitudinea că produsul nostru este pe mâini bune, indiferent dacă vorbim de programare, design, testare, suport tehnic sau management de proiect.” Cătălin Olteanu - President at UMT360 Suntem printre puţinele firme din lume incluse în programul TAP* () pentru SharePoint și Project Server, participând constant la evenimentele prin care Microsoft se consultă cu partenerii săi pentru versiunile viitoare ale produselor din suita Office, având acces prerelease la ultimele tehnologii. Anul acesta, UMT a fost numită Microsoft’s Portfolio Management Partner of the Year pentru livrarea celei mai innovative soluții adresată clienților care folosesc tehnologiile Microsoft și care au un impact major pe această nișă. “Încă de la început a fost clar că dezvoltarea unui produs cu impact la nivel global implică o serie de responsabilități atât la nivel tehnic cât și al proceselor implicate. Cu atât mai mult cu cât aveam în vedere reușita anterioară a echipei de la

www.todaysoftmag.ro | nr. 17/Noiembrie, 2013

33


business The leading engineering team on SharePoint and Project Server worldwide Software. În următoarele numere ale TSM vom reveni cu teme actuale privind dezvoltarea de aplicații folosind platforma SharePoint.

București. Ținta noastră nu putea fi alta decât excelența tehnică și inovația, pentru a crea și livra un produs ce depășeste constant așteptările clienților. Cele trei versiuni majore ale produsului nostru pe care le folosesc clienți de pe toate meridianele atestă acest lucru. Experiența acumulată și un management deschis ne-a permis să depăsim toate provocarile tehnice sau organizatorice apărute pe parcurs” - Ionuț Nechita – GM si Director of Engineering la UMT Software, Cluj-Napoca. UMT360 este cea mai ambițioasă variantă a produsului nostru, fiind dezvoltat pe platforma SharePoint și integrat cu Project Server. Încercam să oferim clienților noștri vizibiliate în întreaga organizatie legată de aspecte high level și să le punem la dispoziție date astfel încât să identifice proiectele care vor aduce plus valoare

34

organizației. Așadar urmărim livrabilele pentru a vedea cum se raportează fiecare proiect la anumiți indici de performanță, oferind features pentru cost tracking, project governance și life cycle management și analiza de portofoliu. “Echipa a crescut de zece ori în termeni absoluți în acești șase ani. Cele cinci persoane din 2008 au ajuns la peste 50 în 2013, iar numărul disciplinelor și tehnologiilor cerute s-a diversificat. Ne dorim să creștem în continuare, avem în plan atragerea a încă 20 de colegi noi în 2014 și este evident că această creștere expune o serie de oportunități de evoluție profesională spre poziții de leadership. De asemenea, legătura cu mediul universitar din Cluj este importantă pentru noi, în ultimii ani dezvoltând un program de internship foarte atractiv” – afirmă Alina Pop, HR Manager, UMT

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro


programare

TODAY SOFTWARE MAGAZINE

De la business la analiza de business

S

uccesul în business în ziua de astăzi este considerat de unii antreprenori drept loterie pură. Privim cu admiraţie spre liderii de piaţă care reuşesc să se menţină în top, spre cei care au reuşit să se reinventeze dar mai ales spre cei noi care au cucerit segmente mari de piaţă în timp foarte scurt. Care e secretul lor? Care este modelul lor de business? Care este inovaţia din spatele ideilor lor? De ce ei au reuşit unde alţii au eşuat? Poveştile de succes par întotdeauna intangibile pentru muritorii de rând. Ne vine greu a-l crede pe modestul om de succes când îşi spune cu sinceritate taina: a studiat, a experimentat, analizat, a luat decizii. Ce pare extrem de complicat este în fapt mult mai simplu. E nevoie doar de multa muncă, disciplină si raţionament. Mă pasionează domeniul analizei de business de când am început să lucrez efectiv ca analist de business la o companie de outsourcing. Datorită faptului că văd un potenţial uriaş de valorificat în acest domeniu, doresc să vă pun în vedere o perspectivă nouă din pozitia unei persoane care a lucrat mai mult cu clientii şi mai putin cu dezvoltatorii, fiind interesată mai degrabă de nevoile şi satisfacţia clientului decât de cocktailul de tehnologii utilizate în aplicaţia cerută de client. În industria IT care evoluează spectaculos de la an la an, să ţii pasul cu dezvoltarea şi modificările pieţei devine o adevarată provocare. Cu noile tehnologi cutting edge folosite în aplicaţiile actuale, prezentul devine repede istorie. Analiza rapidă a problemelor precum şi accesul la informative își aduc mult contribuția. Analiza se defineşte ca fiind metoda științifică de cercetare care se bazează pe studiul sistematic al fiecărui element în parte. În continuare voi prezenta elementele importante de care un business analyst trebuie să ţină cont încă de la începutul proiectului.

Principiile după care se ghidează analiza de business

a cerinţelor divergente ale stakeholder-ilor, negociere pentru aplanarea şi rezolvarea conflictelor. • Agilitate în business, nu perfecţiune: organizaţia trebuie să fie receptivă la presiunile externe şi să poată recunoaşte importanţa soluţiilor în limita de timp dată. Pentru că am interacţionat mai mult cu potentiali clienti, am învăţat cât de importantă este indentificarea corectă şi rapidă a nevoilor acestora astfel încât să le oferim rapid soluţiile de care au ei nevoie. Când ne referim la client vorbim de fapt despre o organizaţie. În organizaţie sunt mai multe persoane care contribuie şi doresc o schimbare. Pentru acesta e nevoie de o analiză a stakeholder-ilor.

Analiza stakeholder-ilor

Stakeholder-ul se defineşte ca fiind o persoană, un grup, organizaţie, membru din cadrul unui sistem care este afectat sau poate chiar el să afecteze acţiunile unei organizaţii. Figura de mai jos prezintă ciclul de viaţă unui unui proiect din perspectiva managementului stakeholder-ilor:

• Identificarea cauzelor şi nu a simptomelor: a distinge între simptome ale problemelor de business şi cauzele lor, investigarea şi numirea cauzelor. • Îmbunătăţirea businessului şi nu schimbare în IT: recunoaşterea că sistemele IT trebuie să ofere support pentru Un exemplu de stakeholder-i generic e prezentat în diagrama oportunităţile de business, analizarea acestor oportunităţi în de mai jos: vederea îmbunătăţirii businessului şi activarea agilităţii. • Opţiuni şi nu soluţii: contestarea soluţiilor predefinite, identificarea şi evaluarea opţiunilor pentru întrunirea nevoilor de business. • Doar cerinţe fezabile, nu toate cererile: se iau in considerare constrângerile financiare şi de timp, se elimină cerinţele care nu contribuie la obiectivele businessului, se evaluează cerinţele scrise în comparaţie cu nevoile de business şi constrângerile. • Întregul ciclu de schimbare a businessului, business change lifecycle, nu doar cerinţele: analiza situaţiilor de business, suport pentru dezvoltarea efectivă, testare, implementare, revizuirea soluţiilor post-implementare. Odată identificaţi, analiza lor ţine cont de nivelul de interes • Negociere, fără ocolişuri: recunoaşterea perspectivelor şi în proiect şi influenţa pe care o poate avea fiecare stakeholder în www.todaysoftmag.ro | nr. 17/Noiembrie, 2013

35


business De la business la analiza de business parte. În acest ne putem da seama cât de mult poate ajuta sau bloca proiectul fiecare şi astfel, vom folosi strategii diferite cu fiecare dintre ei. Spre exemplu, cu stakeholder-ii care nu au interes şi nici influenţă nu vom lua nicio acţiune. Stakeholder-ii care nu au interes direct, (în general managerii seniori fac parte din această categorie) dar au putere de influenţă mare vor fi ţinuţi sub supraveghere. Cei care au interes moderat şi au putere mare, vor fi tinuţi la un nivel mediu de satisfacţie astfel încât să nu simtă nevoia de a interveni inopinat în proiect. Pentru stakeholder-ii cu interes şi putere ridicată (managerii direct afectaţi de proiect) prima dată se identifică dacă au o atitudine pozitivă sau negativă vizavi de proiect. Ei sunt cei care aprobă și iau deciziile finale pentru proiect. Pentru a separa cât mai bine apele şi a şti exact nivelul de implicare al fiecărui stakeholder, matricea RACI (Responsible, Accountable, Consulted, Informed) este foarte utilă. Managementul efectiv al stakeholder-ilor este cheia succesului în orice proiect de analiză de business de success. El apare înainte de a începe proiectul propriu-zis şi se meţine pe toată durata proiectului.

Business Analysis Problem Solving Model

Una dintre cerinţe din partea managerilor îndreptate către analiştii de business este să examineze aria de business pentru a aborda cât mai creativ situaţia şi a transforma ideile în soluţii. Rezolvarea problemelor rapid şi într-un mod creativ este vitală cu toate că puţini sunt cei care pot face faţă datorită presiunii mari de timp. Mai jos e prezentat modelul de soluţionare a problemelor.

Este important de reţinut că primul pas, şi anume ‘Mess finding’ ajută analistul să îşi dea seama de complexitatea situatiei. La începutul proiectului când nu ştii de unde să începi şi încerci să aduni cât mai multe informaţii din locuri diverse, totul pare un haos. Pentru înţelegerea problemei sub investigare se folosesc tehnicile de tip ‘rich pictures’ şi ‘mind maps’. Odată înţeleasă complexitatea, se caută datele de care e nevoie. Dacă la începutul proiectului, analistul de business vorbeşte cu managerul şi echipa, studiază rapoarte, participă la prezentări de produse şi şedinţe, citeşte manuale de utilizare, discută cu marketingul, la pasul de ‘Data finding’ deja el are cunoştintele necesare despre firmă, domeniu de activitate, produs şi mod de lucru al angajaţilor, profilul clienţilor. Acum el va încerca să analizeze opiniile, îngrijorările, cunoştinţele şi ideile celor implicaţi şi afectaţi de proiect. Se pot folosi la fel de bine ‘mind maps’ şi ‘rich pictures’ ca şi în pasul anterior. E necesară separarea opiniilor de faptele propriu-zise. Pentru pasul ‘Problem finding’ ne vor ajuta datele strânse anterior pentru a ajunge la miezul problemei. Găsirea problemei reale este importantă în analiza de business deoarece adesea se

36

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro

indică simptomele problemei şi nu cauza. Dacă rezultatele raportate ale unei echipe nu sunt la nivelul aşteptărilor, nu înseamnă că echipa nu şi-a îndeplinit obiectivele setate. Se poate ca rapoartele extrase să fie eronate sau să difere total faţă de obiectivele setate initial. Analistul de business nu se va multumi niciodată cu puţin şi va încerca mereu să meargă mai adânc cu investigarea. Întrebarea de aur care trebuie repetată tot timpul este: ‘De ce’? Orice afirmaţie trebuie argumentată temeinic. Odată identificate problemele, analistul de business va încerca să genereze idei pentru problemă, în pasul de ‘Idea finding’. Metoda folosită este cea de brainstorming în cadrul unui grup bine ales. Aici pot apărea propuneri de genul: crearea unui raport care să conţină indicatori corelaţi cu obiectivele setate, evaluarea echipei, aplicaţie de raportare a rezultatelor, schimbarea strategiei de vânzări, marketing etc. În urma ideilor colectate se va putea face şi o evaluare. Ultimul pas e ‘Solution finding’ şi e ideea care poate fi privită ca soluţie la problema identificată. E important ca găsirea unei soluţii să se facă aşa de târziu în proces. Adesea analiştii de business sunt presaţi să găsească soluţii de la bun început şi tentaţia de a ceda este destul de mare. Cu toate acestea, paşii anteriori trebuie parcurşi. Ultimul pas este cel de ‘Acceptance finding’, în care se tratează implementarea soluţiei, un aspect care este critic pentru succesul oricăriu proiect de schimbare. Acestea sunt doar câteva direcţii la nivel înalt pe care un analist de business trebuie să le urmeze. Principiile în analiza de business fac diferenţa între novice şi senior, între o abordare profesionistă şi una de amatori. Solutionarea problemelor cere mai multă experienţă din partea analiştilor de business decât se poate estima la o primă vedere. Pentru analiştii la început de drum o bază de cunoştinţe teoretice solide poate ajuta foarte mult. Modelul de soluţionare a problemelor cu paşii aferenţi este prezentat în acest scop. Cum problemele sunt de mai multe feluri, aşa sunt şi stakeholder-ii implicaţi în proiect, care necesită o atenţie specială încă de la început. Multe dintre problemele identificate pot fi rezolvate foarte uşor prin adresarea unei singure întrebări unei persoane cheie implicate în proces. Închei prin această scurtă introducere în lumea analizei de business cu menţiunea că se adresează nu doar analiştilor de business ci tuturor celor care îsi doresc să înţeleagă mai bine nevoile clienţilor pentru care lucrează şi deciziile după care se ghidează.

Ioana Matei

Ioana.Matei@tss-yonder.com Requirements Analyst @ TSS Yonder


management

TODAY SOFTWARE MAGAZINE

Gamification

Î

ncă străin pentru unii, conceptul de gamification  se referă la utilizarea tehnicilor şi mecanismelor specifice jocurilor cu scopul de a îndeplini diferite obiective reale în contexte business, sociale sau de modificare comportamentală. Construirea unui „game layer on top of social layer” poate fi considerat următorul mare pas digital după apariţia social media care a construit aşa numitul „social layer”. Gamification funcţionează folosindu-se de predispoziţia psihologică a oamenilor de a se angaja într-un joc, de afinitatea naturală pentru distracţie, jocuri, competiţie, statut, cooperare sau expresia de sine. Tehnica poate încuraja oamenii să efectueze sarcini pe care le consideră de obicei plictisitoare sau fără interes. El reprezintă ideea de a folosi principiile de joacă şi mecanismele jocurilor pentru a face activitaţiile şi aplicaţiile reale mult mai interesante şi atractive. Probabil vă intrebaţi cum a reusit StackOverflow să motiveze milioane de utilizatori să îşi ia timp din vieţile lor ocupate şi să ajute pe alţii străini, pentru nimic mai mult decât puncte false pe internet şi anumite drepturi. Sau poate aţi auzit de celebra platforma fold.it pe care un grup de elevi a decodat structura unei enzime ce cauza SIDA în doar zece zile – problemă ce stătea nerezolvată de 15 ani. Câţiva dintre noi poate suntem deja implicaţi în programul Nike+ sau poate avem propria noastră ferma în creştere pe FarmVille. Aceleaşi motivaţii care stimulează pe cineva să joace World Of Warcraft zece ore pe zi pot fi folosite pentru a îi motiva să înveţe o nouă limbă, să planteze copaci într-un parc, să lucreze responsabil şi eficient – doar pentru că sunt la fel de motivante şi pline de satisfacţii cum este un joc. Toate acestea sunt în mare parte un rezultat al “Gamification”. Pentru a exemplifica mai bine acest concept, vreau să vă gandiţi la momentul în care aţi fost prinşi într-un joc. Pentru unii dintre voi a fost probabil golf, pentru alţii şah sau Scrabble,iar pentru alţii FarmVille sau Counter-Strike. Nu aţi fi dorit să aveţi acelaşi sentiment captivant de satisfacţie şi interes şi în munca dumneavoastră? Organizaţiile ale căror angajaţi, comunităţi si clienţi sunt profund implicate vor depăşi pe cele care nu pot genera motivaţia

autentică. Ar trebui să invaţăm din jocuri, pentru că în prezent toată lumea obişnuieşte să joace cel puţin un anumit joc. Jocurile nu sunt uşoare – ele ne testează şi ne provocă limitele. Aplicând acelaşi principiu, aceasta înseamnă că putem să găsim şi să îmbunătăţim resursele şi talentele de care dispunem la maxim– lucru exemplificat şi de Jane McGonigal în “Reality is broken” [1]: “In a good computer or video game you’re always playing on the very edge of your skill level, always on the brink of falling off. When you do fall off, you feel the urge to climb back on. That’s because there is virtually nothing as engaging as this state of working at the very limits of your ability” Generaţia tânără este deja o generaţie nativ digital gamificată - şi ei sunt deja clienţii şi angajaţii noştri. Majoritatea au jucat jocuri video şi deja sunt cufundaţi în limbajul şi metaforele jocului. Deci, într- un efort de a stimula și motiva generaţia prezentă, ne întrebăm care sunt caracteristicile jocurilor care merită un loc în companiile noastre? Vom analiza în continuare trei aspecte : performanţa, realizări și interacțiunea socială.

Performanța - Feedback în timp real.

Într-un joc, oricând facem o acțiune, primim feedback instant. Feedback-ul pozitiv consolidează comportamentul bun , strategia și tactica, în timp ce feedbackul negativ, ne permite să învăţăm repede din greşeli. Ce înseamnă pentru locul de muncă : Companiile au nevoie de sisteme și procese care permit feedbackul rapid şi constructiv ducând astfel la accelerarea proceselor de învaţare şi creștere a angajaţilor.

Transparență

Jocurile sunt nirvana statistice - jucătorii pot oricând vedea exact unde se află. Progresele pot fi urmărite și comunicate în timp real, atât în ​​momentul jocului cât și perioade de timp mai lungi. Ce înseamnă pentru locul de muncă : De obiceii angajaţii se intreabă „Cum mă descurc ?”. Ei pur și simplu nu știu pentru că nu înțeleg adeseori cum performanța este măsurată în general, sau performanțele lor în mod individual și în raport cu colegii lor .

Stabilirea obiectivelor

Întregul rol al unui joc este de a avea un scop care să motiveze jucatorii să depună eforturi pentru atingerea acelui scop, cum ar fi „a salva printesa”. De multe ori scopul principal are sub-obiective care furnizează victorii mici de-a lungul drumului. Ce înseamnă pentru locul de muncă : O noţiune de progres în muncă semnificativ, oricât de mică ar fi, este vitală în menținerea oamenilor angrenati. Cu managementul de cele mai multe ori axat pe obiective de termen lung, posibilitatea de a furniza victorii mici și un sentiment benefic de zi cu zi al progresului sunt adesea trecute cu vederea.

Realizări - Trofee

Când trăiești viața în mediul online, fiecare are nevoie de o identitatea digitală. O mare parte a acestei identități ţine de abilitățile personale, realizări și reputație. Trofeele servesc acestui scop. Ele sunt simboluri universal înțelese care indică posesiunea unor competențe și realizari. Ce înseamnă pentru locul de muncă: Înțelegerea capabilitatilor și domeniul de expertiza al angajaților sunt cruciale pentru capacitatea unei companii de a

www.todaysoftmag.ro | nr. 17/Noiembrie, 2013

37


management Gamification asambla echipe mari și de a realiza obiectivele stabilite. Sistemele care permit unui angajat să câștige recompense, să-și afirme aptitudiniile, cât și să valideze competențele și abilitățile altora constitue un avantaj competitiv.

Progresul

În timp ce trofeele sunt indicatori ai unor realizări specifice, nivelurile sunt utilizate ca o prescurtare a unor obiective pe termen lung. Atingând nivelul 70 în World of Warcraft înseamnă că acea persoană a dedicat o anumită cantitate de timp și energie pentru joc, cât și faptul că a atins o anumită calificare. Nivelurile de asemenea, servesc pentru a furniza jucătorul cu obiective intermediare – victorii micii. Ce înseamnă pentru locul de muncă : Studiile prezic că generaţia curenta schimbă locurile de muncă mult mai frecvent ca generaţiile anterioare. Când o anumită persoană părăseşte o companie, preia cu ea tot capitalul intelectual pe care acea companie l-a construit. În scopul de a atenua această tendință și a păstra angajaţii implicaţi în evoluţia unei cariere, trebuie să fie mai multe etape intermediare cu victorii mici de-a lungul drumului şi mai multe modalități pentru a câștiga statutul şi respectul în grupul de activitate.

Acomodarea şi înţelegerea jocului

Rare sunt jocurile care să nu aiba instrucțiuni cu privire la modul de a juca. Și niciodată nu sunt instrucţiuni gen „manual de instrucțiuni” – jocurile înseşi învață jucatorii cum să joace în cadrul jocului în sine. Participanţii obţin experiență prin interacţiunea cu sistemul. În cazul în care intri într-un joc cu toate echipamentele la dispoziţie, nu ai avea nici o idee ce să faci cu ele. Dar jocurile te învaţă cum să joci,

38

tot prin joc. Ce înseamnă pentru locul de muncă : Generaţia curentă nu allege să citească manualele de instrucţiuni. Oamenii petrec ore întregi pentru un anumit joc, dar nu vor petrece câteva minute pentru a urma un curs de pregătire profesională. Teoria autodeterminării (TSD), o teorie creată de profesorii Edward Deci şi Richard Ryan, afirmă că dorinţa de a stăpâni noi abilităţi şi de a se simţi competent este o trăsătură umană esenţială.

educaţional, locul de muncă, relaţiile cu angajaţii şi pentru a stimula comportamentul responsabil. Pr i n a c e s t ar t i c o l am v r ut s ă creionez pe scurt domeniul şi caracteristiciile interesante ale acestei tehnici şi câteva exemplificări ale sale. Este o introducere de bază și vă încurajez să vă documentaţi pentru a afla mai multe – pentru că este foarte probabil ca cineva să foloseasca Gamification în dreptul dumneavoastră şi într-un sens negativ. Vreau să vă las cu un video inspirativ despre o iniţiativă de Gamification : http:// Interacţiunea socială - Competiţia www.youtube.com/watch?v=2lXh2n0aPyw Fie că sunteți în competiție cu prietenii pe un Xbox sau cu oameni din întreaga lume, jocurile promovează excelența și [1] - Reality Is Broken: Why Games Make Us diferite realizări prin concurs. Better and How They Can Change the World, Ce înseamnă pentru locul de muncă: Jane McGonigal, 2011, http://janemcgonigal.com/ Concurența este deja utilizată în diferite my-book/ domenii. Cheia succesului pentru multe companii este să creeze un mecanism de competiţie într-un mod scalabil si automat.

Echipele

Conform teoriei auto-determinării, oameni au o nevoie înnăscută de a forma conexiunii sociale, și ca atare, motivarea de a concura și de a colabora ca parte a echipelor. Echipa oferă oportunitatea de a se conecta cu persoane asemănătoare și a lucra împreună ca un întreg pentru a realiza obiectivele stabilite. Ce înseamnă pentru locul de muncă: Generaţia curentă locuiește la sensul figurat pe Facebook si Twitter. Ei sunt în mod clar orientaţi și conduşi de dorința de a forma conexiuni sociale. Companiile ar trebui să profite de acest fapt şi să utilizeze echipele mult mai des pentru a stimula concurența, colaborarea si învăţarea. Conceptul de gamification pare să fie soluţia pentru a imbunătăţi sistemul

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro

George Platon

George.Platon@catalysts.cc Software developer @ Catalyst


interviu

TODAY SOFTWARE MAGAZINE

Interviu cu Bogdan Iordache, CEO How to Web

A

ntreprenor în tehnologie, geek, fan Star Trek. Aşa se descrie Bogdan Iordache, iar activitatea lui în domeniul antreprenorial este cel puţin impresionantă! Co-Fondator şi CEO al How to Web (cel mai important eveniment dedicat antreprenoriatului, inovaţiei şi tehnologiei din Europa de Sud-Est) & Startup Spotlight (competiţie şi program de mentorat adresat celor mai performante 32 de startup-uri din SEE), Co-Fondator TechHub Bucharest, Co-Fondator Tech Angels, prima reţea a investitorilor privaţi din România, Co-Fondator TechLounge, Co-Fondator Conectoo, Co-Fondator Stagii pe bune. Bogdan este un promotor al inovaţiei şi antreprenoriatului în tehnologie şi contribuie la dezvoltarea ecosistemului regional, din interior. Today Software Magazine a stat de vorbă cu Bogdan Iordache şi a aflat ultimele amănunte din culisele How to Web, eveniment care va avea loc pe 20 şi 21 noiembrie la Crystal Pallace Ballrooms şi va transforma pentru a cincea oară consecutiv România în capitala tehnologiei din Europa de Sud-Est. TSM: Salut Bogdan! Spune-ne câteva cuvinte despre tine în ceea ce priveşte educaţie, carieră, hobby. Bogdan Iordache: Am terminat Universitatea Politehnica Bucureşti, am făcut un program de master la distanţă cu un consorţiu de facultăţi din Franţa în paralel cu anul V, iar mai apoi am făcut studii aprofundate de e-learning tot în Franţa. M-am întors în România şi am înfiinţat o firmă care se numea Interactive People şi care a eşuat lamentabil după primul an, iar mai apoi am fondat Conectoo, companie de e-mail marketing, şi ulterior How to Web. Hobby-uri teoretice am multe, dar practic nu am timp decât să lucrez. TSM: Am publicat în revista Today Software Magazine o serie de articole preluate de pe blogul http://bogdaniordache. net şi ştim că eşti un avocat al startup-urilor. Cum vezi evoluţia acestora în ultimii ani, înainte şi după criză? B.I.: Numărul de startup-uri valoroase care apar nu depinde foarte mult de crizele financiare. E drept că situaţia financiară afectează numărul de companii care vor reuşi să scaleze sau care se vând, însă nu cele care apar. Discuţia asta nu se aplică la România, ci la ceea ce se întâmpla înainte de 2008 în Europa de Vest şi în Statele Unite. Pe atunci toată zona de startup-uri din România nu era suficient

de bine dezvoltată, iar orice startup era un outlier. Nu pot să spun însă prea multe lucruri legat de evoluţia startup-urilor preşi post-criză pentru că nu m-am ocupat foarte mult de asta înainte de 2008 şi nu ştiam care e starea startup-urilor din România înainte de criză. TSM: Ce părere ai despre startup-urile româneşti faţă de cele din vestul Europei sau din SUA? B.I.: Startup-urile româneşti şi cele din vest nu sunt fundamental diferite. Cu toate acestea, există un factor de selecţie subiectiv care depinde de mediul în care se află. Inclusiv în Statele Unite este o diferenţă foarte mare între a fi un startup în Silicon Valley sau a fi un startup în Detroit sau Seattle. Mediul selecţionează aceste companii în moduri foarte diferite. Startup-urile din România sunt înfiinţate de oameni ambiţioşi care îşi doresc mai mult decât un job de inginer (care este destul de bine plătit în România) şi sunt cuminţi în sensul că încearcă să creeze businessuri medii şi mari, însă foate puţine încearcă să creeze afaceri foarte mari. În plus, e foarte dificil să faci asta plecând din România. Sunt businessuri pe care nu le poţi construi decât în Silicon Valley, un exemplu simplu fiind fondatorul Hi5 care s-a mutat din Boston în Silicon Valley pentru a putea ridica investiţia de care avea nevoie. Pentru toate celelalte startup-uri

însă, România în context european are destul de multe pârghii de dezvoltare, dovada fiind faptul că sunt startup-uri care aleg să se relocalizeze aici. TSM: Dacă un mare investitor ar dori să finanţeze trei startup-uri româneşti, ce sugestie i-ai da acestuia? B.I.: Depinde ce înţelegem prin investitor „mare”. Indiferent de cât este de „mare” investitorul, trebuie să ne uităm la expertiza profesională a acestuia şi la valoarea adăugată pe care o poate aduce companiei pe lângă partea financiară. În momentul ăsta sunt câteva businessuri foarte interesante care au echipe excelente care lucrează la ele. Printre ele se numără UberVu, Mavenhut, Soft32 şi mă opresc aici ca să nu mai dau ponturi TSM: Revenind la How to Web, poţi să ne descrii care este evoluţia acestui eveniment până acum? B.I.: Evoluţia How to Web a fost foarte interesantă, atât din punct de vedere cantitativ, cât şi calitativ. Ediţia de anul acesta va avea cel mai mare număr de participanţi şi

www.todaysoftmag.ro | nr. 17/Noiembrie, 2013

39


interviu Gamification ne bucurăm că reuşim să aducem speakeri din ce în ce mai mulţi şi mai buni de la o ediţie la alta. Anul trecut ne-am bucurat să îl avem alături de noi pe Phil Libbin, CEO al celei mai mari companii de tehnologie care a venit vreodată în România la un eveniment public. Anul ăsta pe scena How to Web vor urca Thomas Hartwig (Co-Fondator şi CTO al King.com, una dintre cele mai importante companii de social gaming din lume, care se pregăteşte de listarea pe bursă) şi Paul Ford (VP şi CIO SoftLayer, companie de infrastructură achiziţionată de IBM cu 2 miliarde USD la începutul anului). În acelaşi timp am crescut numărul de investitori very early stage de la Startup Spotlight şi sperăm să obţinem şi mai multe deal-uri la finalul programului. TSM: Anul trecut am văzut nume mari precum CEO-ul Evernot, Phil Libbin, sau CEO-ul Everplaces, Tine Thygesen. Ce ne aduce nou How to Web anul acesta? B.I. Am început How to Web cu o primă ediţie în 2009, în Politehnica Bucureşti, şi l-am continuat cu o primă ediţie internaţională în 2010. An de an, How to Web a crescut ca număr de participanţi dar, şi mai important, s-a maturizat din punct de vedere al structurii agendei şi al obiectivelor pe care şi le propune. How to Web nu a fost niciodată doar o conferinţă – ne-am dorit mereu să-l facem un instrument util, practic, cu rezultate măsurabile pentru cei care îi trec pragul. Lista de poveşti de succes ale How to Web este o confirmare a acestui lucru.

B.I. Startup Spotlight este un program şi concurs destinat startup-urilor early stage, care are loc în cadrul How to Web. Startup Spotlight există pentru că ne-am dorit să oferim ceva mai mult decât ocazia de prezentare şi am vrut să dezvoltăm un program care are impact asupra dezvoltării startup-urilor. Anul acesta avem o separare mai clară între agenda destinată startupurilor care se întâmplă pe scena Ignite în cadrul Startup Spotlight şi prezentările profesioniştilor din domeniul tehnologiei care vor avea loc pe scena Grow şi se adresează dezvoltatorilor, designer-ilor şi comunităţilor dezvoltate în jurul produselor tech.

TSM: Mulţumim pentru răspunsuri. În încheiere, te rog să le dai cititorilor noştri trei motive pentru a participa la ediţia How to Web de anul acesta. B.I.: Primul motiv ar fi cel pe care îl oferim de fiecare dată: facem How to Web pentru că ne dorim să îi susţinem pe cei care îşi doresc să înveţe mai multe despre cum să fie profesionişti mai buni în domeniul tehnologiei. Al doilea motiv ţine de calitatea speakerilor de anul ăsta. Printre aceştia se numără Paul Ford (VP şi CIO Softlayer), Marco Cecconi (Core Developer Stack Overflow), Simon Stewart (Software Engineer la Facebook), Cristopher Martin (Senior Manager Bosch) sau Martyn Davies (Developer Evangelist la Sendgrid). Ultimul (însă nu cel din urmă) motiv pentru a participa la conferinţă este faptul că How to Web e întotdeauna un moment foarte bun de întâlnire cu alţi oameni care TSM: Am primit întrebări despre legă- împărtăşesc aceleaşi pasiuni şi lucrează tura dintre How to Web şi Startup Spotlight. la probleme asemănătoare, iar o astfel de întâlnire nu poate decât să ne ajute să ne Poţi să ne dai mai multe detalii?

40

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro

formăm conexiuni valoroase. Acest material face parte din campania „Let’s grow together” a How to Web1, cel mai important eveniment dedicat tehnologiei si antreprenoriatului din Europa de Sud-Est. How to Web 2013 are loc pe 20 si 21 noiembrie in Bucuresti. În Cadrul conferintei va avea loc si Startup Spotlight2, competitie si program de orientare adresat celor mai performante startup-uri din regiune. 1 http://2013.howtoweb.co/ 2 http://startupspotlight.co/

Ovidiu Măţan, PMP

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


programare

programare

The Post Classical HTTP Era: Say Hello to Real-Time Web Perspectiva unui utilizator normal

F

ie că ne place sau nu, trăim un moment de tranziție între două ere - de la era clasică HTTP către era web-ului în timp real. Pulsul Internetului a devenit mai rapid și acum acesta nu mai e doar un mediu static de documente, ci reprezintă un mediu de comunicare bidirecțional, distribuit global și complet real-time. Acest nou tip de comunicare a început deja să schimbe lucruri importante pe care le știm despre software development, publicitate, marketing, PR și multe alte domenii. crescut până s-a ajuns la un interval de timp de ordinul orelor. RSS-ul a reprezentat pasul următor eficientizând procesul prin care eram ținuți la curent cu aceste actualizări. Dar totuși, webul era relativ încet în comparație cu ce cee ce este el astăzi. În jurul lui 2000 mesageria instantă a început să fie adoptată de tot mai multă lume. Acest fapt a accelerat și mai mult viteza web-ului, făcându-l un mediu atractiv pentru toate persoanele, indiferent de vârstă, cultură sau situație socială. Facebook a fost lansat în 2004, urmat de YouTube în 2005, Twitter în 2006 și Instagram în 2010. Datorită acestor servicii și a vitezei de comunicare pe care acestea le permit, viteza marketingului digital a scăzut de la ore la minute sau chiar secunde. Tot din 2000 o altă tranziție constantă mai are loc – tranziția de la accesul sporadic și staționar la Internet, la accesul continuu și mobil. Astăzi toată lumea e conectată tot timpul, dar un lucru important de notat e faptul că nu suntem conectați doar în calitate de consumatori, ci și în calitate de furnizori. Aceste trenduri și tranziții au “demoCreșterea liniară a vitezei Internetului În ultimele trei decenii lumea în care trăim a devenit mult cratizat” Internetul transformându-l dintr-un mediu static și mai rapidă, iar mediul online reprezintă locul în care această unidirecțional într-un mediu real și bidirecțional. accelerare este cea mai vizibilă. Înainte de apariția blogging-ului rata de actualizare a site-urilor web era înceată. Acestea erau Mainstream vs. Social Media actualizate odată la câteva zile. Site-urile care prezentau știri erau Rețelele de socializare nu sunt doar o conductă de distribuție, actualizate zilnic, sau poate, de câteva ori pe zi. Într-un final, ci ele reprezintă un nou tip de media care este mult mai rapid odata cu creșterea masivă a blogging-ului, rata de actualizare a decât media tradițională. Web-ul a devenit un mediu care favorizează mult mai mult conectarea în timp real decât radioul sau televiziunea. De fapt, rețelele de socializare câștigă în mod constant lupta vitezei. Acest fapt este dovedit de numeroasele știri importante (breaking news) care de cele mai multe ori apar în mediul online cu zeci de minute, sau în unele cazuri ore întregi înainte de a fi distribuite la TV. Ritmul și volumul de mesaje de pe rețelele de socializare a crescut exponențial, an după an și nu dă semne de încetinire. Un studiu făcut de Experian Marketing Services arată că timpul petrecut de pe device-urile mobile pe rețelele de socializare (15%) se clasează pe locul doi, fiind precedat doar de timpul petrecut pe e-mail (23%). Aproximativ 99.9% din toate speciile care au existat pe Pământ au dispărut. Într-un mod similar, peste 90% din companiile care erau în Fortune 500 în anul 1955, nu mai există azi. Și totuși, ce ar trebui să ne spună nouă aceste lucruri? Noi, ca indivizi, trebuie să înțelegem că e bine să știm despre schimbările majore ale evoluției pieței, dacă nu dorim să devenim învechiți. În schimb, pentru noi, în calitate de companii,nu e suficient doar să știm despre aceste schimbări majore, ci e nevoie să le adoptăm dacă dorim să reușim pe termen lung. Acum două decenii s-a petrecut tranziția de la media tradițională la media digitală și într-un mod similar tranziția care se întâmplă acum reprezintă o provocare existențială – adaptează-te sau dispari – și probabil o oportunitate care nu se arată prea des. Companiile care se adaptează și învață mai rapid vor fi liderii de mâine, în timp ce restul vor fi nevoiți să se adapteze curând, dacă nu vor să dispară.

42

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro


TODAY SOFTWARE MAGAZINE și trendurile devin globale în câteva minute. Riscul de a întârzia este mai mare decât riscul de a greși. Datorită acestui fapt, nume importante din media sunt puse sub presiune și de aceea apar situații în care anumite știri sunt publicate fără a avea timp să fie verificate. Este mai bine să publice o corecție la o știre eronată decât să fie percepuți ca fiind înceți. În lumea de azi vor apărea mai multe amenințări, erori, confuzii și crize, dar acestea vor începe și sfârși mult mai rapid. De asemenea și oportunitățile vor avea același ritm. Pentru a supraviețui și prospera în aceste cicluri rapide, organizațiile trebuie să gândească și să răspundă prompt, chiar dacă acest lucru presupune producerea de erori și corecții mult mai frecvente. Prezentul conține mai multe informații și schimbări decât oricând și de aceea e mult mai dificil de înțeles astăzi decât a fost înainte. Internetul într-o oră (sursa: Experian Marketing Services)

Categorie

Procentaj de timp într-o oră

E-mail

23%

Social Networking

15%

Entertainment

13%

Shopping

11%

Travel

9%

Aceste schimbări modifică o serie de alte domenii precum marketingul, vânzările și chiar serviciile. Consumatorii trăiesc în prezent și ei se așteaptă ca și brandurile să trăiască de asemenea în prezent. Un nou cuvânt cheie folosit în marketing a apărut datorită acestei obsesii noi legată de prezent și anume, acest cuvânt este numit „now-ism”. Now-ismul poate fi definit ca pofta înrădăcinată a consumatorilor de gratificare instantanee care este satisfăcută de o serie de produse, servicii și experiențe real-time. Consumatorii, de asemenea, contribuie febril la avalanșa de conținut real-time care se construiește chiar în aceste momente. Prin urmare, brandurile nu au de ales - trebuie să trăiască în haosul splendid, real și încântător oferit de prezent. Simplu spus, now-ismul reprezintă filozofia care spune că experiența din prezent este fundamentală. Viața se întâmplă acum. Prezentul contează cel mai mult.

Now-ismul reprezintă o schimbare culturală a cărei țintă este prezentul și nu trecutul sau viitorul. Este ceva nou si fără precendent – niciodată nu a existat pe această planetă o altă civilizație care să trăiască exclusiv în prezent. În era informației, datorită rețelelor de comunicații, prezentul a devenit mai extins, mai rapid și un foarte mare consumator de conținut. În ziua de azi ne concentrăm pe iminență și odata cu aceasta vin și așteptările pentru servicii și soluții instante. Trăim într-o eră în care bârfele

Perspectiva unui dezvoltator software

Numeroase studii arată că o întârziere de o fracțiune de secundă reduce implicarea utilizatorilor și scade veniturile siteurilor. Ca rezultat, butonul de “refresh” ajunge să nu mai fie folositor în aplicațiile web, iar actualizarea datelor în timp real se transformă dintr-o caracteristică de confort într-o adevărată necesitate pentru cele mai multe site-uri competitive. În mod tradițional aplicațiile web se bazează pe un ciclu cerere-răspuns: introducem un URL, iar browser-ul web trimite un request server-ului, care răspunde trimițând un response conținând pagina care urmează să fie afișată. Acest proces este simplu de înțeles și e suficient de bun pentru site-uri informaționale care nu necesită multă interacțiune cu utilizatorul. Dar odată cu răspândirea smartphone-urilor și a tabletelor, am ajuns să ne așteptăm la aplicații mult mai interactive, iar web-ul nu face excepție. Modificarea acestui ciclu clasic de request-response astfel încât anumite secțiuni din pagină să răspunda imediat la interacțiunea utilizatorului este posibilă. Acest gen de aplicații web se numesc Single-Page Applications (SPAs) și ele permit modificarea conținutului în timp real. Totuși, apare și o provocare tehnică: interacțiunea trebuie să fie bidirecțională, aceasta însemnând că serverul trebuie să trimită date fără a avea nevoie de un request. Până acum existau câteva metode precum polling, long-polling sau server-sent-events, care simulau o conecțiune bidirecțională, dar folosind aceste metode browser-ul web nu poate păstra o conexiune stabilă cu serverul. În schimb, browser-ul trebuie să interogheze constant server-ul dacă există mesaje noi. Nici implementările acestor metode nu sunt întotdeauna ușoare și nu există o soluție la problema traficului suplimentar nedorit generat de multitudinea de interogări. Websocketurile permit stabilirea unei conexiuni stabile și bidirecționale. Odată stabilită această conexiune, ea îi permite serverului să inițieze comunicarea cu browser-ul. Mesajele sunt trimise în momentul sosirii, fără a mai exista nevoia de așteptare ca în cazul metodelor înainte menționate. Aceasta înseamnă că putem folosi aplicațiile web în domenii în care modificarea datelor în timp real este critică și are un impact major (licitații, tranzacții).

Lucrurile vechi revin la modă

Deși această afirmație poate părea absurdă într-un domeniu precum IT-ul, ea este complet adevărată. În anii `70, softwareul rula în general pe servere masive, la care utilizatorii se conectau utilizând niște terminale simple, fără o mare putere computațională. Apoi, în anii `80, modelul client-server a prins contur, iar pe baza acestui model Internetul a început să fie tot www.todaysoftmag.ro | nr. 17/Noiembrie, 2013

43


programare The Post Classical HTTP Era: Say Hello to Real-Time Web mai răspândit. Totuși, la începuturile anilor `90, pentru o scurtă perioadă, această creștere a început să stagneze, fără a mai apărea mari inovații în această direcție. Aceasta este perioadă de “boom” a aplicațiilor desktop. Din fericire, aș spune eu, această perioadă a fost relativ scurtă, și după câțiva ani dezvoltatorii software au fost nevoiți să rescrie software-ul și să îl porteze pe web. Această schimbare a readoptat modelul client-server în care utilizatorii comunicau cu un server folosind un terminal, doar că de această dată puterea computațională a crescut atât la nivelul terminalelor cât și la nivelul serverului. Aplicațiile web au început treptat să semene, ba chiar în unele cazuri să arate mai bine decât aplicațiile desktop și datorită acestui fapt au crescut și așteptările noastre în ceea ce privește interacțiunea cu acestea: ne dorim ca totul să se întâmple la fel de rapid precum în aplicațiile desktop. Bineînțeles, tehnologiile real-time nu sunt ceva nou. De ani buni există hardware și software care permite dezvoltarea de sisteme în care latența este minimă. Totuși, pentru un motiv anume, nimeni în afară de domeniul financiar nu le prea folosește. În ultimii ani, conceptul de real-time a ajuns de la o tehnologie de nișă, la ceva ce nu e doar realizabil, ci e și foarte ușor accesibil pentru comunitatea de dezvoltatori.

În domeniul dezvoltării software, publish-subscribe reprezintă un messaging pattern, în care emițătorii de mesaje sunt numiți publishers și ei se ocupă cu transmiterea directă de mesaje către anumiți destinatari specifici, aceștia din urmă fiind numiți subscribers: • Subscribers: “Sunt interesat în colecția de date X; trimite-mi un snapshot inițial cu colecția de date, iar apoi trimite-mi orice schimbare petrecută pe colecția urmărită.” • Publisher: “Proprietatea X a entității Y a fost modificată in Z.”

Dezvoltatorii trebuie să se adapteze

Înainte era suficient ca un programator specializat în backend să lucreze împreună cu un designer care știa HTML, CSS și puțin jQuery, dar acum lucrurile se schimbă.Tehnicile de dezvoltare axate pe backend (MVC, MVVM), încep să migreze pe frontend, în partea de client. Noua paradigmă va fi mai degrabă familiară programatorilor de backend, dar în anumite privințe va fi totodată străină. De exemplu, spre deosebire de codul care rulează pe server într-un mediu controlat, codul de pe client rulează în multe browsere fiecare având propriul JavaScript run-time. O altă diferență majoră o face faptul că de cele mai multe ori codul de pe client este event-driven, iar acest lucru tinde să fie impredictibil și non-linear. Deja există multe framework-uri care folosesc API-ul oferit de WebSocket-uri precum SignalR, SockJS, Socket.IO. Toate aceste framework-uri sunt construite pentru a ușura și a face mai rapidă munca programatorilor. Totuși, partea de client reprezintă doar jumătate din ecuație. Programatorii încă au nevoie de date de pe server, de tranzacții securizate, etc. Adaptarea infrastructurii sau adoptarea unui framework care să trateze schimbul de date în timp real nu reprezintă un angajament trivial. Adevărul e că framework-urile existente nu au fost făcute pentru a suporta aplicații real-time. Tocmai de aceea, o nouă “rasă” de framework-uri încep să apară – framework-uri optimizate pentru SPA-uri și pentru aplicații real-time precum Derby sau Meteor. Însă, doar timpul ne va arăta dacă aceste framework-uri vor avea succes.

Publish-subscribe reprezintă, într-o formă sau alta, messaging pattern-ul care stă la baza aplicațiilor real-time. Acesta conferă avantaje precum un nivel ridicat de scalabilitate prin operații paralele și message caching.

Concluzii

Webul real-time este deja aici. Acesta nu mai reprezintă doar un termen folosit în marketing. Acele zeci de icon-uri care sunt pe ecranurile gadget-urilor noastre și se schimbă automat,demonstrează acest fapt. Web-ul începe să devină un flux de informații continuu pe care noi le colectăm și le consumăm, iar acest trend de livrare instantanee a mesajelor devine unul dintre cele mai importante aspecte ale experienței noastre online. Totodată, acest trend deschide noi oportunități pe care noi ar trebui să le fructificăm și, probabil în curând, ne vom aminti despre vremurile în care încărcam pagini statice de pe server, la fel cum ne amintim acum despre conexiunile dial-up. Programatori, dezvoltatori și utilizatori: Sunteți pregătiți pentru această nouă versiune a web-ului?

JavaScript și Publish-Subscribe

JavaScript-ul reprezintă singurul limbaj de scripting suportat de către toate browser-ele și odată cu creșterea numărului de SPAuri a crescut și utilizarea JavaScriptului. Un lucru important de notat e faptul că JavaScriptul își face simțită prezența și pe partea de backend prin Node.js. Din păcate acesta este un limbaj destul de “capricios” pe care programatorii fie îl iubesc fie îl urăsc. Fără cunoștințe bune de JavaScript va fi imposibil să dezvolți aplicații web real-time.

44

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro

Alexandru Ivan

ivan.alexandru@evoline.ro Software Engineer @ Evoline


TODAY SOFTWARE MAGAZINE

programare

ReactiveExtensions pentru sisteme bazate pe evenimente

U

tilizatorii se așteaptă să vadă informații în timp ce se intamplă. Vor ca atunci când comandă un produs pe un site de e-commerce să vadă imediat confirmarea comenzii. Atunci, când caută informații într-o aplicație, textbox-ul să le ofere sugestii de căutare în timp real. In acest articol, vom discuta despre o procesarea fluxului de evenimente generat de interacțiunea utilizatorului sau de alte servicii externe pentru ca să expunem informații în timp real utilizatorilor folosind ReactiveExtensions.

Aplicabilitate

care pot fi observate de catre niște obiecte reprezentate de IObserver<T>. IObservable<T> atașează prin metoda Subscribe un obiect ce tratează evenimentele generate și returnează un obiect IDisposable ce poate fi folosit pentru a detașa observatorul pentru ca evenimentele să nu mai fie tratate de acesta. Aceste interfețe sunt duale pentru IEnumerable<T> and IEnumerator<T> prin faptul că “Observable Collections” utilizeaza modelul “Push” pentru a “împinge” datele către observatori, pe când sursele de date “Enumerable” sunt interogate de catre enumeratori pentru a primi “datele”. Modelul “Push” de procesare a datelor este denumit ca și model reactiv, iar modul prin care este implementată această procesare este prin definirea unor set de extensii (disponibile in C#) pentru IObservable<T> și de aici numele de ReactiveExtensions. Arhitectura Rx Pentru a folosi Rx, trebuie adăugate librariile System.Reactive Rx pentru .NET se bazează pe conceptul de “Observable (disponibile aici [4] sau prin NuGet - ReactiveExtensions). Vom Collections” (colectii observabile), definit prin interfețele: folosi ca prim exemplu clasa Observable pentru a genera date ce IObservable<int> source; vor fi “împinse” către un observator pentru a fi procesate. In exemIObserver<int> handler; public interface IObservable<out T> plu de mai jos, vom genera evenimente la anumite interval de timp { IDisposable Subscribe(IObserver<T> observer); și vom atașa un observator ce se va ocupa de datele primite: } ReactiveExtensions pentru .NET (prescurtat Rx) este o librarie pentru a procesa fluxul de evenimente ce apar într -un sistem ”event-based”, cum ar fi: • Evenimente UI generate de user: mouse-moved, key-pressed, etc. • Evenimente care apar datorită programării asincrone: cum ar fi cererile și răspunsurile venite în urma unor apelări unor servicii web • Evenimente venite dintr-un Enterprise Service Bus: JMS, Windows Azure Service Bus, NServiceBus, etc. sau prin integrarea cu un motor de CEP cum ar fi StreamInsight sau StreamBase

public interface IObserver<in T> { void OnCompleted(); void OnError(Exception error); void OnNext(T value); }

Aceste interfețe au un rol complementar: IObservable<T> reprezintă sursa evenimetelor generate (e.g. mouse-moved)

IObservable<int> source = Observable.Generate(0, i => i < 5, i => i + 1, i => i * i, i => TimeSpan.FromSeconds(i)); using (source.Subscribe(x => Console.WriteLine(„OnNext: {0}”, x), ex => Console.WriteLine(„OnError: {0}”, ex.Message), () => Console. WriteLine(„OnCompleted”))) { Console.WriteLine(„Press ENTER to unsubscribe...”); Console.ReadLine(); }

Clasa Observable generează numerele 1,4,9,16 la interval de timp 1,2,3,4 secunde și parametric pasați metodei Subscribe procesează datele primite la evenimentele de OnNext (când date noi sunt disponibile pentru procesare), OnError (când sursa observată aruncă o excepție) și OnCompleted (când sursa notifică observatorul că a terminat de transmis datele).

www.todaysoftmag.ro | nr. 17/Noiembrie, 2013

45


programare ReactiveExtensions pentru sisteme bazate pe evenimente Procesarea evenimentelor in Rx

In cazul procesării evenimentelor de UI, apar probleme de genul filtrării unor evenimente sau a dezabonării de la anumite evenimente. Aceste probleme sunt ușor rezolvate prin importarea de evenimente generate de către elemente de UI in Rx prin clasa Observable, în exemplul următor vom intercepta toate evenimentele de tipul MouseEventArgs și EventArgs pe care fereastra construită le generează prin miscarea mouse-ului, respectiv tastarea într-un text-box și combină fluxul de evenimente într-un “Observable C ollection” care reprezintă practic o bază de date de evenimente de tipul Mou s e Mo v e , re s p e c t i v TextChanged, generate de cursor sau de text-box. Fluxul de evenimente de tip TextChanged pot fi ușor filtrate, în scenariul în care nu este nevoie de procesarea tuturor evenimentelor, ci alegem doar datele distincte la un interval de o secundă (în scenariul in care utilizatorul scrie foarte repede și fiecare input necesită o procesare complexă dorim să nu facem cereri către backend ca să proceseze fiecare cerere). Abonările pot fi combinate, in cazul nostru vom combina evenimentele MouseMove, respectiv TextChanged și vom invoca Garbage Collector-ul pentru ambele subscripții. var lbl = new Label(); var txt = new TextBox(){Location = new Point(0,20)}; var frm = new Form { Controls = { lbl, txt } }; var moves = Observable.FromEventPattern<MouseEventArgs>(frm, “MouseMove”); var input = Observable.FromEventPattern<EventArgs>(txt, “TextChanged”) .Select(x => ((TextBox)x.Sender).Text) .Throttle(TimeSpan.FromSeconds(1)) .DistinctUntilChanged(); var inputSubscription = input.Subscribe(evt => Console.WriteLine(“User wrote: “ + evt.Text)); var movesSubscription = moves.Subscribe(evt => Console.WriteLine(“Mouse at: “ + evt.EventArgs.Location)); using (new CompositeDisposable(movesSubscription, inputSubscription)) { Application.Run(frm); }

var svc = new DictServiceSoapClient(„DictServiceSoap”); svc.BeginMatchInDict(„reactive”, callback => { var words = svc.EndMatchInDict(callback);

null);

},

foreach (var word in words) Console.WriteLine(word.Word);

Fragmentul de cod prezentat mai sus se poate rescrie folosind metoda FromAsyncPattern din clasa Observable, unde se specifică ca și parametri generic, semnatura metodei ce inițiază apelul si care se folosește la obținerea rezultatului in urma invocarii serviciului web, și produce un “Observable Collection” din rezultatele obținute de la serviciul web, la care putem abona un observator care să proceseze rezultatele. In fragmentul de cod de mai jos, este prezentat modul in care transformăm apelurile catre serviciul web, pentru a returna ca rezultat cuvintele care încep cu “react” într-o sursa observabilă la care abonăm un observator ce afișează rezultatele primite: var svc = new DictServiceSoapClient(„DictServiceSoap”); var matchInDict = Observable.FromAsyncPattern<string, string, string, DictionaryWord[]> (svc.BeginMatchInDict, svc.EndMatchInDict); var res = matchInDict(„react”); var subscription = res.Subscribe(words => { foreach (var word in words) Console.WriteLine(word.Word); });

Implementari disponibile

Pe langă Rx pentru .NET, modelul reactiv - “Push model” – prezentat, a fost de asemenea implementat in Javascript (pentru browser cât și server-side Node.js), C++, Ruby și Python. De asemenea, o implementare pentru JVM folosind Clojure a fost dezvoltată recent de Netflix [5]. O prezentare a acestor implementări poate fi gasită in [4], [5] și [6].

Concluzii

Mecanismul reactiv de tratare a evenimentelor, în sisteme unde o varietate de evenimente sunt generate in timp real, de catre utilizatori sau prin comunicare cu anumite servicii externe, se dovedește a fi un instrument deosebit de folositor ce ușureaza munca programatorului și conferă claritate și concizie codului. Rămane la analiza cititorului un număr de aspecte ce nu au fost tratate in acest articol, cum ar fi threading-ul, implementările disponibile și pentru alte platforme, testabilitatea codului scris cu ajutorul Rx și un numar foarte mare de metode utilitare ca și extensii pentru colecțiile observabile, detalii ce pot fi gasite la referințe!

Referinte Rx și procesarea asincrona a apelarii serviciilor web

Apelarea serviciilor web se face in mod tradițional prin doua metode: o metodă care inițiaza apelul spre serviciul web și altă metodă care primește rezultatul. Această tehnică duce, în cazul unor sisteme ce folosesc intens comunicare cu servicii web, la un cod greu de întreținut - “spaghetti code”. Procesarea apelării serviciilor web (cererea catre serviciul și raspunsul returnat) poate fi mult simplificat, prin transformarea acestor perechi de metode de catre Rx. De exemplu, în cazul unui serviciu web, invocat prin SOAP, ce returnează o lista de cuvinte ce au ca și prefix parametrul transmis, proxy-ul genereaza perechea de metode ce se poate folosi în felul urmator:

46

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro

[1]. “Rx Design Guidelines.pdf ”, disponibil la http://msdn.microsoft.com/ en-US/data/gg577612 [2]. “Rx HOL .NET.pdf ”, disponibil la http://msdn.microsoft.com/en-US/data/ gg577612 [3]. http://www.introtorx.com/ [4]. http://rx.codeplex.com/ [5]. http://techblog.netflix.com/2013/02/rxjava-netflix-api.html [6]. https://github.com/Netflix/RxJava Tămaș Ionuț

tamash_ionut@yahoo.com .Net developer @ Imprezzio Global


TODAY SOFTWARE MAGAZINE

programare

Interviu cu Richard Campbell (I)

R

ichard Campbell are mai mult de 30 de ani de experienţă high-tech, fiind Director Regional Microsoft şi profesionistul cel mai valoros al Microsoft (MVP). El se consultă cu mai multe organizaţii nord- americane de top. Pe lângă faptul că vorbeşte la conferinţe peste tot în lume, Richard este una dintre gazdele „.NET Rocks! Talk Show-ul audio de pe internet pentru Dezvoltatorii .NET” şi gazda emisiunii „RunAs Radio, Talk Show-ul audio de pe internet pentru Profesioniştii IT”. După „Esenţa DevOps” sesiunea pentru invitaţi RABS, am avut oportunitatea să stăm puţin cu el şi să îi punem câteva întrebări legate de trecutul şi viitorul industriei calculatoarelor, dar şi să îi cerem sfatul cu privire la cum să începi şi să avansezi în carieră în acest domeniu. Attila: Astăzi îl am cu mine pe Richard Campbell. Richard, poţi să ne spui câteva lucruri despre tine, te rog? Richard: Bună ! Mă numesc Richard Campbell. Sunt dezvoltator de software din 1977, chiar dacă trebuie să recunosc că aveam 10 ani atunci şi scriam cod pe un TRS-80 model 1 care avea în total 4k sau RAM, dar cam asta era tot ce făceam. M-a fascinat încă de atunci şi am rămas în A: Aşa ai devenit interesat de acest domeniu? Programând un TRS-80? R: Da, la 10 ani este o vârstă foarte impresionabilă. Iar 1977 este de asemenea anul în care a apărut Star Wars. Eram un copil. Îmi plăcea science-fiction şi exista un computer în apropiere, la domeniul tehnologiei de atunci. Radio Shack. Prima mea slujbă, la 12 ani, a fost să repar computere, inclusiv TRS-80. Tatăl meu este inginer în electronice şi el m-a învăţat elementele de bază în electronică de la o vârstă foarte fragedă. Cred că printre primele mele amintiri sunt cele legate de folosirea unui ciocan de lipit. Am început să repar aparate şi să le programez şi am tot avansat de acolo.

A: Deci la 12 ani aveai deja o slujbă plătită legată de computere. R: Da, lucram noaptea şi în weekend, mergeam încă la şcoală. Literalmente, nu am făcut niciodată altceva. A: Cum ai fost acolo cam de la început, aş vrea să te întreb dacă îţi aminteşti când a avut loc ruptura dintre dev / qa / dba şi IT? A existat dintotdeauna o separare între aceste sub-domenii sau aceasta s-a produs mai târziu? R: Bazele de date au apărut mai târziu, dar chiar dacă ne întoarcem până la minicomputerele timpurii, existau oameni care se ocupau de hardware şi oameni care se ocupau de software. Pentru că necesită seturi de abilităţi foarte diferite şi mentalităţi foarte diferite, de asemenea. Întotdeauna există o anume separare între grupuri. Depinde de cât de constructivă este sau nu aceasta, dar sunt tensiuni benefice. În mod inerent, software-ul pune presiune pe hardware. Iar oamenii care se ocupă de hardware încearcă să îl menţină cât mai stabil. Şi aceasta este o tensiune naturală. Nu aş spune că este una rea. Există nevoia de a pune presiune pe aceste

lucruri. Tindem să facem lucrurile mai bine dacă există o anumită tensiune. A: Există, bineînţeles, lucruri interesante care pot să apară dacă ei colaborează. Au existat aparatele Lisp Machines, care au fost special create pentru a executa Lisp şi alte aparate cu hardware special conceput pentru a rezolva o anume problemă. Există o legătură şi s-ar putea ajunge la un rezultat mai bun dacă s-ar colabora. R: Hardware-ul specializat a fost un produs secundar al limitărilor tehnologiei din acea vreme. Asta se întâmpla în

www.todaysoftmag.ro | nr. 17/Noiembrie, 2013

47


programare Interviu cu Richard Campbell (I) perioada când Cray producea primele lor supercomputere, iar lungimea firelor conta deoarece viteza luminii este importantă când eşti la asemenea viteze de calcul. Dar cum siliciul general s-a îmbunătăţit, cred că vedem din ce în ce mai puţin echipament specializat deoarece calculatoarele generale sunt atât de eficiente acum. A: Discutabil, da. Crezi că datorită mişcărilor DevOps şi Agile cu echipe funcţionale încrucişate, separarea dintre DBA/ IT / dezvoltatori va dispărea? R: Cred că rolurile nu duc nicăieri. Cred că abilităţile sunt abilităţi şi că sunt oarecum specializate. Cred că mai presus este să ne concentrăm pe ceea ce este cu adevărat important, adică să slujim afacerii, să o ajutăm într-adevăr să facă bani, să fie mai productiv. Ştii, este frumos să păstrezi baza de date pregătită, dar un mod prin care poţi face asta este să nu accepţi să fie introduse date. Dar acest lucru nu este foarte util. Doar ajutând întreaga echipă să ţină minte că avem acelaşi ţel este partea mai importantă. Şi totuşi, cred în divergenţe. Mentalitatea că un dezvoltator trebuie să creeze o nouă funcţionalitate este o mentalitate preţioasă. Dar este şi mai valoroasă când cineva pune presiune pentru a se asigura că datele au integritate şi că utilizează hardware-ul în mod eficient. Poţi să o priveşti ca pe o fierărie: foloseşti fricţiunea pentru a genera suficientă căldură pentru a face oţel. Scopul este să facem cel mai bun produs pe care îl putem face şi să avem fiecare dintre acele roluri reprezentate în proces, toate având acelaşi ţel final, este de fapt cea mai bună metodă de a face asta. Este ceva ce am pierdut, am uitat. Ajungem prea absorbiţi de slujbă şi nu suntem absorbiţi de scop. Cred că multe dintre aceste mişcări sunt menite să ne readucă către aceste scopuri reale. A: Crezi că dimensiunea medie a echipelor sau companiilor de dezvoltare software creşte sau descreşte? Vedem mai multe companii mari, ca Microsoft sau unele mai mici, start-up-uri? R: Cred că lucrează mai multe forţe diferite acum şi aceasta este o perioadă extrem de interesantă. În 2013 de abia ieşim dintr-o criză economică mondială destul de urâtă. Şi cred că sunt câteva lucruri care s-au întâmplat din cauza asta: atunci când ai o criză economică, există o parte constructivă, şi anume, scuturarea celor slabi. Este afacerea ta atât de eficientă pe cât ar putea să fie? Atunci când suntem

48

în perioade lungi de creştere – cum a fost timp de câţiva ani, din 2000 încoace – devii din ce în ce mai puţin eficient, deoarece eşti într-o cursă pentru cota de piaţă. Există întotdeauna mai mulţi bani. Iar apoi, când avem un declin, ne uităm din nou la profit şi pierderi şi devenim mai eficienţi. Dar cred că cel mai interesant lucru care a rezultat din anii 2008 – 2009 a fost scuturarea tinerilor, mai ales în părţi ale lumii cum ar fi Europa de est, unde există mentalitatea că obţii o slujbă şi o păstrezi. Există o presiune să ai o slujbă şi să o păstrezi, iar după un eveniment anormal ca cel din 2008- 2009, cred că aceea încredere a fost zdruncinată. Şi astfel, startup-urile, care înainte fuseseră văzute ca deosebit de riscante, par mai puţin riscante acum, pentru că slujbele stabile nu mai par acum atât de sigure. Deci, sentimentul că există mai mult risc în slujbele stabile a diminuat sentimentul de risc din jurul startup-urilor şi cu adevărat pentru prima dată în experienţa mea, călătorind în toţi aceşti ani, văd că se ivesc peste tot mentalităţi noi referitoare la start-up. Exista credinţa că numai americanii pot face startup-uri. Totul se reducea la Silicon Valley. Dovezile pe care le-am primit în ultimii doi ani, de la criză încoace, arată faptul că asta nu e adevărat. Sunt în călătorie de aproximativ o lună şi în diferite părţi ale lumii pe unde am călătorit – în Regatul Unit, Irlanda, Bulgaria – există startup-uri peste tot! Iar asta mi se pare a fi un produs secundar a ceea ce s-a întâmplat în ultimii câţiva ani. A: Deci asta ar însemna echipe mai mici. R: Da. Cred că start-up-urile înseamnă echipe mai mici şi foarte foarte agile. Dar sistemele se şi măresc. Cloud devine din ce în ce mai mare deoarece avem nevoie de o mare putere de calcul şi o putem utiliza în feluri foarte interesante. Şi este ca un efect de pârghie – nu ai nevoie de foarte mulţi oameni pentru a face asta. Cealaltă mare forţă care lucrează în prezent este diaspora clientului. Mai înainte erau doar desktopuri şi laptopuri. Acum sunt telefoane şi tablete – diferiţi factori de formă, diferite Uls. Concepţia de client s-a zdruncinat, acum este heterogenă şi necesită mulţi oameni – pentru a realiza dezvoltarea de care ai nevoie. Şi de asemenea acum nu mai există o cale clară înainte. Nu ştim sigur că vom mai utiliza tastatura şi mouse-ul în următorii 20 de ani – care ne-au servit foarte bine în ultimii 20 de ani. Acum este nevoie să experimentăm mai mult, să atingi seturi de abilităţi diferite, iar asta înseamnă să

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro

adaugi oameni de partea clientului. Am sentimentul că partea de server nu a fost niciodată mai stabilă, iar cloud duce asta la un alt nivel. În ceea ce îl priveşte pe client, aşteptările au crescut mult, iar aptitudinile s-au diversificat mult şi ai nevoie de mult mai mulţi oameni pentru a face treaba. A: Am impresia că în prezent ne aflăm într-o renaştere software – cunoaştem destul de bine o mare parte din ştiinţa calculatoarelor. Poţi să ştii despre frontend / backend / servere / hardware – nu în detaliu, dar destul de bine. Eşti de acord? R: Cred că da. Şi mai cred că suntem în mijlocul unei schimbări radicale, ceva ce nu s-a mai produs de când a apărut mouse-ul. Cred că educaţia referitoare la informatică începe să se schimbe, deoarece este din ce în ce mai puţină ştiinţă de calcul. Pentru mine, ştiinţa de calcul este dezvoltarea limbajelor şi dezvoltarea sistemelor operaţionale, fundamentul, partea ştiinţifică a proceselor de calcul. Cred că începem să vedem apariţia unui adevărat inginer în informatică – nu este vorba despre inventarea unui nou tip de ciment, ci despre cum să construieşti eficient un pod. Avem aşteptări din ce în ce mai mari de la software, deoarece organizaţiile depind atât de mult de el. Ne aşteptăm la un software de calitate mai bună şi vedem din ce în ce mai mult sistemul educaţional întrebânduse „Cum să facem nişte ingineri buni în informatică?” mai degrabă decât oameni de ştiinţă. Ambii sunt valoroşi, dar avem deja câţiva oameni de ştiinţă – avem nevoie de mai mulţi ingineri.

Attila-Mihaly Balazs dify.ltd@gmail.com

Code Wrangler @ Udacity Trainer @ Tora Trading


testare

TODAY SOFTWARE MAGAZINE

Performance... what now?!

E

xact! Asta spun cei mai mulți clienți când aud despre testarea de performanță. Ar trebui să fie o componentă cheie în life cycle-ul dezvoltării produsului. Cei mai mulți oameni se concentrează pe funcționalitate, dar când businessul crește și tot mai mulți utilizatori interacționează cu sistemul, începe să funcționeze din ce în ce mai încet până când nu mai funcționează deloc. Acest lucru se întâmplă din cauză că performanța nu a fost unul din target-urile importante când s-a început proiectul. Testarea de performanță este importantă și trebuie făcută de la început. În testare există nivele de testare și tipuri de testare. Nivelele se referă la testarea pe componente, testarea integrării mai multor componente, testarea întregului sistem, testarea de acceptanță. Tipurile de testare se referă la testarea funcțională și non-funcțională. Cea din urmă se referă în principal la testarea de performanță, load, stress etc. Testarea de performanță (performance testing) determină modul cum se comportă sistemul sub un load anume. Load testing este testarea cu diferite nivele de load, dar cel mai mult detectează care e nivelul maxim de load pe care sistemul îl suportă. Stress testing este realizat prin menținerea load-ului aproape de nivelul maxim determinat anterior, astfel stresând sistemul pentru a observa cum se comportă. Unul din cele mai bune tool-uri de testare de performanță este JMeter. Pentru că e open source nu trebuie să vă faceți griji de numărul de utilizatori virtuali pe care acesta îi suportă. Nu trebuie să cumpărați o licență. Mai mult, este scris în Java și e foarte configurabil și extensibil. Mai mult? Da, există și mai mult. Comunitatea a crescut mult față de acum câțiva ani și la fel și plugin-urile pentru JMeter. Dacă integrezi toate plugin-urile existente, te alegi cu un tool de performanță complex

si puternic. Recent, Selenium Webdriver poate fi integrat cu JMeter. Aceasta integrare era necesară pentru că JMeter este bazat pe modelul client request - server response, fără a mai ține cont de executarea javascript-urilor sau randarea în pagină. Așadar, prin integrarea Webdriver-ului (în opinia mea, cel mai bun tool open source de testare automată funcțională) cu JMeter, putem acum simula mai bine browser-ul și putem scrie cod pentru a măsura timpii de răspuns cât mai real. E nevoie de un an sau doi ca să cunoști cu adevărat JMeter-ul, eu lucrând cu el de patru ani deja, pot spune că merită pentru că e tot ce ai nevoie ca tool pentru testarea de performanță. Pentru a putea implementa scripturi de performanță, crea teste sau scenarii de performanță și a avea o bună înțelegere despre cum funcționează sistemele, este indicat să ai un background în dezvoltarea aplicațiilor și administrarea sistemelor. Acest background m-a ajutat mult când am început cu testarea de performanță. O altă arie importantă sunt tool-urile de monitorizare. Cu cât cunoști mai mult tool-uri de monitorizare, cu atât mai bine. Pe durata testării de performanță a unei aplicații, care trăiește într-un environment, este bine să existe tool-uri de monitorizare la fiecare nivel. Nu neaparat tool-uri, pot fi și shell

script-uri care înregistrează utilizarea procesorului, memoriei, disk-urilor, rețelei, log-urilor de server și de aplicație. În acest fel avem un overview clar în timp real asupra întregului environment. Fiecare nivel se referă la Load Balancer, Apache, Varnish, Tomcat, IIS, JVM, Linux OS, Windows OS, Application, MySQL, MSSQL, Oracle,etc. .Să zicem că un an a trecut, ați învățat JMeter-ul și sunteți familiari cu câteva tool-uri de monitorizare. Executați toate scenariile. Aveți rezultatele, de exemplu un tabel cu numărul de request-uri, media timpilor de răspuns per request, minimul, maximul, mediana, troughput sau tranzacții pe secundă sau minut etc. Pentru o înțelegere mai bună, aceste rezultate trebuie interpretate, corelate cu graficele generate, cu output-ul script-urilor și cu graficele tool-urilor de monitorizare, apoi cu log-urile serverelor și aplicației. Apoi trebuie scrise concluziile. Parte distractivă începe atunci când identificați probleme și începeți să lucrați la îmbunătățiri de performanță. Problemele de performanță pot apărea la oricare din nivele, dar prin monitorizarea specificată anterior și configurarea/ajustarea testelor de performanță, puteți identifica exact care este sursa.

Exemplul 1 Pe d u r a t a r u l ă r i i t e s t e l o r d e performanță sau a suitei de teste, am observat timpi de răspuns mari și că sistemul nu mai răspundea după un timp. Uitându-ne

www.todaysoftmag.ro | nr. 17/Noiembrie, 2013

49


programare Performance... what now?! la tool-urile de monitorizare și la output-ul script-urilor create, am memoria a scăzut treptat până la 0 și apoi a intrat în swap. Acest putut observa că load-ul pe web server era ridicat, dar baza de lucru se întampla înainte ca o nouă aplicație să fie lansată live, în date nu era așa de utilizată și putea duce mult mai mult. Apoi, producție. Aplicația nu mai răspundea. Dacă intra în producție fără testare de performanță, atunci • Downtime • Afectat businessul • Utilizatori nervosi • Altele

Exemplul 4 Cu ajutorul testelor de performanță am putut identifica bottleneck-uri între aplicație și baza de date, configurări greșite de connection pool, configurări greșite sau neoptimizate pentru performanță la nivelul bazei de date.

Exemplul 5 Am identificat nevoia de a face scale up, de a face upgrade, a adauga mai mult CPU, RAM, Disk-uri etc sau de a face scale out, de a adăuga mai multe web servere sau noduri de DB. Ideea este că aveți posibilitatea de a îmbunătății performanța environment-ului și de a testa și verifica cu adevărat, ceea ce va duce la livrarea unui produs cu o calitate mult mai bună și un success mai mare businessului. am văzut că request-urile de la client, ajungeau în Load Balancer, apoi în Apache, apoi în Tomcat. Așadar, problema trebuia să fie undeva în aplicație. Am luat thread dump-uri și heap dump-uri și cu ajutorul unui tool de analizare a memoriei, am observat că memoria heap era plină și erau milioane de obiecte în memorie create de o librărie third party care fusese introdusă recent pentru următorul release. JMeter Test Plan GUI

Exemplul 2 Executând suita de teste de performanță, am observat că toți timpii de răspuns erau mari. Uitându-ne la log-urile din Apache și Tomcat, timpii de răspuns corespundeau cu ce vedeam în client, JMeter. Metricile de JVM nu arătau un load mare în aplicație. Tool-ul de monitorizare de baze de date arăta foarte multe queryuri slow. Configurarea MySQL era un dezastru. Dupa o totală reconfigurare a MySQL-ului, rezultatele de performanță arătau o creștere de 40%.

Exemplul 3 Rulând testele de performanță pentru o perioadă mai lungă de timp, am observat pe graficele de memorie ale web serverelor că

Mihai Șerdean

mihai.serdean@evozon.com QA Test Manager | Functional and Performance Test Automation Selenium Webdriver integration with JMeter

50

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro

@ Evozon Systems | Mihai Şerdean PFA


programare

TODAY SOFTWARE MAGAZINE

Java Concurrency in Practice

P

roblema concurenţei este legată de evoluţia sistemelor de operare şi din dorinţa de creştere a performanţelor aplicaţiilor. Sistemele de operare moderne au mai multe task-uri de executat în acelaşi timp. Deseori numărul de task-uri este mai mare decât numărul de procesoare. Pentru a rezolva această problemă, sistemul de operare îi alocă fiecărui task un interval de timp pentru a rula pe procesor. Când timpul a expirat task-ul este în mod forţat scos de pe procesor şi un alt task are şansa de a fi executat. Înainte de a continua discuţia noastră despre fire de execuţie şi despre programarea concurentă, vreau să clarific două noţiuni ce însoţesc conceptele din această carte. Un proces este o zonă de memorie ce conţine cod şi date. Un fir reprezintă o execuţie programată a unui proces. Firele pot fi concurente, adică pot accesa în acelaşi timp aceleaşi date. Prin acces înţelegem citire sau scriere. Pe lângă corectitudinea datelor accesate concurent, acest tip de programare mai este confruntat cu o problemă, şi anume performanţa. De aceea, pentru a executa un program cât mai repede cu putinţă trebuie să evităm blocajele (bottleneck). Blocajele pot apărea în câteva situaţii: • Conexiuni la resurse, adică două sau mai multe task-uri aşteaptă pentru utilizarea exclusivă a unei resurse. • Blocarea din cauza operaţiilor de I/O. Problema cea mare a acestor operaţii este că în timpul execuţiei lor task-ul este blocat aşteptându-se transferul de date. • Subutilizarea procesorului se manifestă atunci când o aplicaţie într-un singur fir utilizează un singur procesor.

Chiar dacă nu scriem explicit cod pentru a crea noi fire de execuţie, codul poate rula într-un mediu multifir. Trebuie aşadar să fim avertizaţi cum lucrează firele şi cum să scriem cod thread-safe. Putem găsi cel puţin două exemple: • când scriem cod care rulează într-un alt mediu de rulare (middleware sau server de aplicaţie) trebuie avută în vedere documentaţia produsului pentru a descoperi dacă firele sunt create automat. Într-un server de aplicaţie Java EE există o componentă numită servlet utilizată pentru manipularea cererilor HTTP. Servlet-urile trebuie să fie întotdeauna thread-safe deoarece serverul porneşte un nou fir la fiecare cerere HTTP. • în aplicaţiile GUI. Unele aplicaţii sunt single-threaded şi de aceea dacă un eveniment durează prea mult timp ca să se execute, aplicaţia pare blocată. Altele, folosesc un event dispatch thread. Când un utilizator apasă un buton, spre exemplu, se declanşează un eveniment iar handler-ul de aplicaţie va crea un nou fir. Firul principal şi cel nou vor lucra în paralel, putându-se influenţa reciproc. Acesta este cadrul general în care

se lucrează cu fire de execuţie. Lucrarea pe care v-o supun astăzi atenţiei , “Java Concurrency în Practice”, avându-l pe Brian Goetz în calitate de coordonator, este un tutorial complet de lucru cu fire de execuţie. Întreaga muncă de design, implementare şi testare a unei aplicaţii robuste, sigure şi performante cu fire de execuţie este foarte greu de făcut. De cele mai multe ori programatorii preferă să folosescă framework-uri atunci când lucrează cu fire de execuţie, pentru că acestea le oferă soluţii integrate. Despre toate acestea se discută în prezentul material. Cartea este structurată în patru părţi. Prima parte prezintă și definește noţiunile fundamentale precum thread-safe, atomicitatea (o operaţie atomică) sau locking. Selectăm , de exemplu , atomicitatea definită ca fiind o operaţie ce se execută toată sau deloc, ea neputând fi întreruptă de timpul riguros alocat unui task . De asemenea, se prezintă reguli de evitare a hazardului concurenţial, construirea claselor thread-safe, a colecţiilor thread-safe şi a compoziţiei thread-safe. Cea de-a doua parte oferă soluţii de creştere a gradului de eficientizare a aplicaţiilor multifir. Dincolo de soluţiile clasice

www.todaysoftmag.ro | nr. 17/Noiembrie, 2013

51


programare Performance... what now?! astăzi fire de execuţie? Cu siguranţă destul de puţini programatori, pentru că aşa după cum am mai afirmat folosim medii gazdă care gestionează automat firele de execuţie şi problemele fundamentale ale lor. Totuşi, tot ce înseamnă performanţă este influenţat de dezvoltator. O înţelegere precară a noţiunilor de acces concurenţial va conduce la soluţii neperformante. În plus, execuţiile asincrone ale unor task-uri capătă un interes deosebit atât pentru platformele enterprise cât şi pentru cele standard. Evoluţia limbajului Java confirmă aceste lucruri. În Java SE7 progresele sunt remarcabile. Framework-ul Fork-Join este doar un exemplu. În Java EE7 a fost creat un API special de lucru cu fire de execuţie custom. Până în acest moment folosirea firelor custom în enterprise era riscantă şi prohibită. Putem crea, prin noul API, fire de execuţie ce duc la oprirea firului de execuţie al containerului iar apoi, după oprire, reluarea firului principal. Java FX este un alt exemplu de utilizare eficientă a firelor de execuţie şi a accesului concurenţial la resurse. Cartea nu acoperă aceste ultime tendinţe, dar este un ghid extrem de valoros pentru versiuni ale platformei Java. Vă doresc lectură plăcută!

de pornire şi gestiune a firelor, frameworkurile oferă soluţii integrate mult mai puternice. Vom găsi consideraţii referitoare la frameworkul Executor, ca unul dintre cel mai des utilizate frameworkuri. Problemele opririi sau terminării firelor de execuţie, înainte de execuţia integrală a acestora, şi implicaţiile pe care aceste operaţii le au asupra celorlalte fire de execuţie sunt dezbătute pe larg, cu numeroase exemple. Tot în ideea de performanţă se aduc în discuţie pool-urile de fire de execuţie. Secţiunea finală a acestei părţi se referă la sporirea gradului de performanţă în aplicaţiile GUI cu un singur fir de execuţie. Partea a treia se referă la performanţă şi testare. Erorile frecvente ce pot apărea ca urmare a proiectării proaste a firelor de execuţie sunt identificate şi se dau soluţii. Creşterea scalabilităţii este o altă calitate urmărită pentru aplicaţiile multifir. Finalul acestei părţi urmăreşte în special segmentul

52

de testare a codului concurent, atât din punct de vedere al corectitudinii cât şi al performaţei. Ultima parte se adresează programatorilor experimentaţi şi aduce în discuţie blocarea explicită, variabilele atomice, algoritmi de neblocare sau sincronizatori custom. Cartea este dificil de parcurs de către programatorii neexperimentaţi. De fapt, cu siguranţă, nu se pot crea aplicaţii concurenţiale performante fără o bază solidă de cunoştinţe de programare Java. Autorii aduc numeroase exemple, prezentate amănunţit, oferind pe lângă bune practici şi operații ce ar trebui evitate în soluţiile de implementare. Dacă veţi reuşi să parcurgeţi şi să întelegeţi toate capitolele acestei monografii, veţi fi cu siguranţă experimentaţi în programarea concurentă. Exista însă şi întrebarea: cine mai scrie

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro

Silviu Dumitrescu silviu.dumitrescu@msg-systems. com Consultant Java @ msg systems Romania


management

TODAY SOFTWARE MAGAZINE

Innovation in Big Projects

P

este tot în jurul nostru auzim că se discută despre inovare. Orice companie dorește să facă parte din grupul companiilor care fac ceva inovator. În mod evident, domeniul IT este cel mai marcat de această deviză a inovării.

Introducere

În următoarele rânduri , vom prezenta direcțiile principale care conduc la inovarea un proiect IT de lungă durată. Avem deja câteva exemple de firme din industria IT din Cluj-Napoca care au început extrem de bine să se plaseze ca firme inovatoare, care schimbă modul în care se dezvoltă softul IT. După cum prea bine știm, proiectele mari nu sunt mereu cele mai frumoase proiecte pe care am dori să lucrăm . De nenumărate ori acestea folosesc stack-uri vechi și nimeni nu are curajul să le aducă la zi. Pe acest gen de proiecte unele persoane pot să se simtă cu mâinile legate, deoarece orice acțiune pe care doresc să o facă implică un proces extrem de complex peste care trebuie să treacă. Peste aceste probleme au mari șanse să fie nevoite să se lupte cu dezvoltatori care să refuze schimbarea și să refuze schimbarea. În funcție de proiect/produs, momentul în care inovația moare, poate să coincidă cu momentul în care proiectul intră in declin. Acesta poate ușor să devina obsolute și să fie înlocuit cu alte produse de pe piață.

dintr-un număr limitat de oameni care iau toate deciziile – aceștia fiind pe proiect de la bun început. Chiar dacă echipa este mare, cei care iau deciziile sunt puțini și respectă niște șabloane deja formate în mintea lor. Într-un astfel de proiect diversitatea este importantă. Oamenii ajung să gândească în același mod, să vină cu aceleași soluții de fiecare dată. Lumea IT este o lume extrem de dinamică, care este mereu în schimbare, iar soluția perfectă nu există. De aceea este important ca membrii echipei să fie de vârste, sex și nivel diferite. Toate aceste diferențe conduc la o diversitate mult mai mare a echipei creând condițiile unor idei mult mai creatoare, ieșite din șablonul classic, și mult mai eficiente.

Resurse

Pe un proiect mamut este extrem de ușor să ajungi să ai oamenii blocați cu diferite task-uri. Aceștia vor avea mereu task-uri de mentenanță, de bug fixing sau de dezvoltarea de noi funcționalități. Echipa nu mai are timp deloc să se gândească la partea de inovare , să-și pună întrebări de tipul:Ce am putea face ca să facem proiectul mai bine? Diversitate Că să poți să inovezi un lucru trebuie Pe un proiect vechi de 5-10 ani de foarte multe ori se ajunge să existe un core format să fi pregătit să investești resurse, în special

timp. Trebuie să fi pregătit să aloci timp oamenilor pentru a putea investiga și căuta soluții. Pe lângă timp aceștia au nevoie de libertatea prin care pot să încerce diferite soluții indiferent dacă rezultatul o să fie bun sau nu. În caz contrar, aceștia vor veni cu aceeași soluție pe care au folosit-o în urmă cu 10 ani. Fiecare membru din echipă ar trebui să aibă posibilitatea să aducă valoare proiectului. Părerea și ideile lor sunt extrem de importante, din această cauză aceștia au nevoie de timp pentru a putea veni cu soluții inovatoare.

Procese interne

Un proiect complex aduce și procese extrem de complexe și bine înrădăcinate. Este foarte important să recunoaștem că procesele nu sunt bătute în cuie, ci trebuie să fie într-o continuă schimbare și îmbunătățire. De aceea, când un membru din echipă propune schimbarea unui proiect, acesta ar trebui să fie ascultat și văzut ce are de zis. De multe ori procesele te fac să gândești după un șablon foarte bine definit. Trebuie să acceptăm ca procesele sunt făcute să fie încălcate uneori. Nu doar atât, dar pe un proiect mare, poate să existe un proces

www.todaysoftmag.ro | nr. 17/Noiembrie, 2013

53


management Innovation in Big Projects intern dedicat inovării, unde fiecare mem- cultura unei echipe trebuie să fim pregătiți bru din echipă trebuie să aibă ocazia să fie cu multă răbdare și să fim pregătiți să investim mult timp. implicat și să aducă valoare.

Management

Nu este de ajuns ca un membru din echipă să aibă o idee cu care să rupă gura târgului. De nenumărate ori, idei foarte bune ajung să se piardă și să nu vadă niciodată lumina zilei (să fie în producție). O idee bună, o idee inovatoare trebuie să fie susținută de management. Aceștia trebuie să fie conștienți că trebuie să devina sponsori și să aibă grijă că ideea nu se pierde. Este de ajuns ca aceștia să numească o persoană responsabilă pentru ca o idee să devina realitate și să ofere resursele necesare. În momentul în care apare ceva inovator pe proiect, managementul trebuie să reacționeze pro-activ și să nu aștepte ca acesta idee să ajungă în producție fără ca ei să se implice. Fiecare membru din echipa trebuie să se implice într-o formă sau alta.

Ownership

Și așa am ajuns la următorul punct. Persoana care vine cu ideea trebuie să fie pregătită să preia ownership-ul. Trebuie să fie pregătită să ia ideea de la bun început și să aibe grijă de ea până când va ajunge în producție. De foarte multe ori vedem persoane care aruncă diferite idei pe masă și doar atât. Aceștia refuză și nu sunt pregătiți să ia nici o idee de pe masă și să o realizeze. Această problemă poate să apară la membri vechi a echipei, care ajung să se plângă extrem de mult, dar nu doresc să facă nici o schimbare.

Cultura

Fiecare echipă trebuie să aibă cultura inovării. O cultura care să fie pregătită să primească idei noi din exterior, o cultură care este dispusă să se supună riscurilor care pot să apară. În general ne identificăm cu o anumita cultură. Pentru a putea să schimbăm

Training

Nu de puține ori se întâmplă ca un om care este implicat într- un proiect timp de câțiva ani, să ajungă să nu mai aibă timp pentru studiu și pregătire, necesare eoluției sale profesionale. Pentru a evita astfel de probleme este nevoie să investim în echipa cu fiecare ocazie pe care o avem. Cu cât echipa are un nivel de cunoștințe mai mare și o arie cât mai diversificată de abilități, cu atât câștigul nostru va fi mai cu desăvârșire. Introducerea unui astfel mare pe termen lung. de mecanism poate să fie inovator, chiar dacă este un lucru extrem de simplu. Un alt exemplu pe partea de inovație într-un Out of the box Pentru a putea veni cu ceva inovator, proiect de tip dinozaur este schimbarea echipa trebuie să gândească diferit, să fie modului în care se face kitul de instalare. scoasă din zona de confort. Pe proiecte Totodată inovator este și înlocuirea parțială mari, unde fiecare componentă este bine a unei baze de date relațională cu o bază de definită, membri i echipei pot să ajungă date de tip NoSQL. Putem să ne imaginăm multe exemfoarte ușor într-o zonă de confort foarte ple de acest gen. Dar trebuie să reținem puțin deschisă la inovație. În funcție de proiect, acest lucru se că inovația are multe forme și este la mai poate face în diferite moduri, de la o rotație multe niveluri. Cel mai important lucru a echipei pe componente până la alocarea este să o susținem și când este nevoie să fim temporară a unor membri din echipă pe pregătiți să investim în ea. PoC sau pe proiecte care nu au nici o legătură cu aria lor de cunoștințe.

Măsurare

Dacă avem foarte mulți membri pe un proiect, putem la un moment dat să ne trezim cu foarte multe idei din partea echipei. Toate aceste idei pot să sune foarte bine, dar nu le putem implementa și încerca pe toate în același timp. Prin urmare este nevoie de un mecanism prin care putem fixa diferite priorități, măsura fiecare idee în parte, iar în momentul în care o punem în practică să știm exact care sunt așteptările.Toate aceste lucruri trebuie să le facem astfel încât să nu omorâm ideile inovatoare și să susținem orice idee nouă, care ar putea să aducă un beneficiu.

Cum să inovăm

De foarte multe ori când ne gândim la inovare ne gândim la lucruri mărețe. Dar inovația poate să se regăsească în lucruri simple, dar care să aducă schimbări extrem de mari. De exemplu, putem să privim ca inovare introducerea unui mecanism de unit testing pentru codul JavaScript. Pentru un proiect scris in Java sau .NET, testarea codului JavaScript poate să lipsească

54

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro

Radu Vunvulea

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


programare

altele

Gogu: Tată și fiu - Măi Gălușcă! – copilul se uită la Gogu cu reproș, dar acesta se făcu că nu vede. Ia mai zi o dată, dar mai rar de data asta. Știa și el că e o stratagemă firavă, dar era prima idee care îi venise și care îi mai acorda ceva timp de gândire. Evident că și fiul lui se prinse căci îi văzu imediat licărirea de satisfacție din privire. Cu un zâmbet victorios pe care nici nu se strădui să-l ascundă, dădu curs cererii: - Ascultă-mă cu atenție, tată. Copilul ăsta devine din ce în ce mai obraznic, își spuse Gogu, dar respectă indicația primită și se concentră pe cuvintele copilului. - Tată și fiu, spuse acesta grav. Tată și fiu, repetă el, grav răniți într-un accident lângă Sibiu. Tatăl este transportat într-un spital din Târgu-Mureș, fiul este dus cu salvarea în București. Aici e pregătit de operație, dar când intră medicul – copilul făcu o pauză teatrală și se uită la Gogu cu subînțeles – și îl vede pe pacient, spune: „Nu-l pot opera, e fiul meu”. Cum e posibil? Dacă îți trag una, îți șterg rânjetul ăla triumfător de pe față! Desigur, cuvintele răsunară doar în mintea lui Gogu, să le fi spus cu voce tare ar fi însemnat să intre în contradicție cu toată educația pe care i-a dat-o copilului. Le gândi doar cu o ușoară ciudă că nu găsea nici acum soluția problemei, dar și cu mândrie. Că doar era copilul lui... Deh, a ajuns oul mai deștept decât găina. - Era tatăl vitreg, spuse repede. - Nope. - Uhm... aproape că puteai auzi rotițele cum se învârteau în mintea lui Gogu. Ha!, se lumină deodată: - Erau tată și fiu, dar fiecare era tatăl sau fiul altcuiva! - Nope. - Nope, nope, îl îngână Gogu cu năduf. Hai, spune tu care e explicația. - Nope. N-ai spus tu să te las până găsești singur răspunsul?! Își sorbi tacticos ceaiul, își termină micul dejun, fără să își dezlipească însă

56

ochii de la Gogu. - Plecăm? - Poftim? Tresări Gogu care încă încerca să găsească soluția. Își reveni însă repede. - Da, sigur. Mă mai gândesc la problema ta deseară, când mă întorc acasă, hai să plecăm acum. Pe drumul spre școală discutară de noua doamnă învățătoare, dar mintea lui Gogu era în continuare în căutarea soluției. Fi-r-ar să fie de tată și fiu! Lăsă copilul la școală și se grăbi la servici. Intră val-vârtej, zise un „’Neața!” rapid către colegi, ignoră răspunsurile, se postă în fața biroului lui Mișu și se repezi către el, fără nici un avertisment: - Ia fii atent aici, Mișule, am o problemă pentru tine. - No, bună dimineața și ție, Gogule, ridică ochii Mișu către el. Vorba domoală a acestuia nu reuși însă să-l potolească pe Gogu. - Ești atent?! - Îs măi, că nu-mi dai de ales. Da’ nu vrei să stai jos, că îmi respiri în față și mi-i cald... Gogu se întrerupse o clipă, se uită întrebător spre Mișu, apoi îi ajunse informația la creier. - Soarele ei de treabă, că toți sunteți născuți inteligenți azi! Dacă ești așa deștept, rezolvă tu situația asta: și repetă, cuvânt cu cuvânt problema, exact cum o auzise de la copil, inclusiv cu pauzele cu subînțeles. Mișu așteptă cu răbdare sfârșitul problemei, se uită impasibil la Gogu și zise calm: - Maică-sa. - Ce maică... se repezi Gogu, dar

nr. 17/Noiembrie, 2013 | www.todaysoftmag.ro

neuronii prinseseră între timp ideea. Rezolvarea era de o simplitate covârșitoare. Mama! Medicul era mama lui. Cum de nu făcuse conexiunea?! În momentul imediat următor însă, îl fulgeră un gând enervant: - Da’ tu de unde știi? - Îs deștept, mă Gogule, se umflă Mișu în pene, după care se hotărî să nu întindă totuși coarda prea tare. Știi trainingul ăla de soft skills la care am fost luna trecută? Ne-au povestit despre capcanele în luarea deciziilor, ca de exemplu cea de ancorare de o informație prezentată cu câteva clipe înainte și care îți canalizează gândirea spre o anumită direcție. Sublinierea Tată și Fiu a avut rolul de a te ancora de ideea de masculin, iar când apare medicul, mintea ta este deja limitată, cantonată în model... Ha-ha, cine ți-a făcut-o? Fi-tu, nu-i așa?! A ajuns oul mai deștept decât găina...

Simona Bonghez, Ph.D.

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


sponsori

powered by


Numarul 17 - Today Software Magazine  
Advertisement
Read more
Read more
Similar to
Popular now
Just for you