+ All Categories
Home > Documents > Today Software Magazine N28/2014

Today Software Magazine N28/2014

Date post: 19-Jul-2016
Category:
Upload: sergiucebotari
View: 24 times
Download: 3 times
Share this document with a friend
Description:
Today Software Magazine N28/2014
46
T O D AY SOFTWARE Nr. 28 • Octombrie 2014 • www.todaysoftmag.ro • www.todaysoftmag.com MAGAZINE Cum a fost la conferința Smartweb Modelarea cerințelor folosind Enterprise Architect Army Ants la Software Testing Cup Concurență şi data binding în JavaFX Cod curat – Comentarii și format Gogu, Petrică și Lupu’ Creativitate Aplicată Primul pas în analiza de business Build for fun @ FedEx Day Cum poate o companie de IT să devină in- vestitor într-un startup Websockets – http pe steroizi TinTag - Internet of Things startup à la Cluj Haskell Data Analysis Cookbook vNext: Viitoarea direcție a aplicațiilor .NET
Transcript
Page 1: Today Software Magazine N28/2014

TSM T O D A YS O F T WA R E

Nr. 28 • Octombrie 2014 • www.todaysoftmag.ro • www.todaysoftmag.com

M AG A Z I N E

Cum a fost la conferința Smartweb

Modelarea cerințelor folosind Enterprise Architect

Army Ants la Software Testing Cup

Concurență şi data binding în JavaFX

Cod curat – Comentarii și format

Gogu, Petrică și Lupu’

Creativitate Aplicată

Primul pas în analiza de business

Build for fun @ FedEx Day

Cum poate o companie de IT să devină in-vestitor într-un startup

Websockets – http pe steroizi

TinTag - Internet of Things startup à la Cluj

Haskell Data Analysis Cookbook

vNext: Viitoarea direcție a aplicațiilor .NET

Page 2: Today Software Magazine N28/2014

Organizer

Partners Supporters

November 25 November 26Trends & Leadership Sessions Startups & Entrepreneurship

Technical Sessions Technical Sessions

Peter LawreyCEO at Higher Frequency Trading

Silvia RăusanuISDC

Voicu OpreanCEO AROBS

Șerban ȚîrGemini Foundry

Sergiu DamianSoftware consultant

Conf. Dr. Mihai OlteanBabeș Bolyai University

Sebastian BigBetfair

Dr.ing. Bogdan RusTechnical University of Cluj-Napoca

Mihai NadășYonder

Iulian IugaCEO Accesa

Victor Ionescumsg systems

Dan Suciu, PhD3Pillar Global

Innovation, entrepreneurship and technologiesVenue: Cluj Arena, conference hall, 25-26 November 2014, Cluj-Napoca

www.itdays.ro - 2 days access, 55 euro + TVA

Dr. ing. Zsolt Alfred PolgarTechnical University of Cluj-Napoca

Simona BonghezColors in Projects

Mircea Vădanclujstartups.com

Andrei KelemenCluj IT Cluster

Bogdan HereaCEO PITECH+PLUS

Andreea PârvuEndava

Tudor BîrleaStarcelerate

Diana CiorbaCodespring

Tudor MărghidanuYardi România

Radu VunvuleaiQuest

Alex LakatosXoomworks

Cristian ȘerbanBetfair

Page 3: Today Software Magazine N28/2014

6Trenduri, tehnologii, antre-

prenoriat și proiecte de cercetare la Cluj IT Days 2014

Ovidiu Măţan

8Tintag - Internet of Things

startup à la ClujMircea Vădan

10Ce te face să mergi

mai departe?Cornelia Stan

11Cum a fost la

conferința SmartwebClaudia Mihu

14How to Web 2014

Irina Scarlat

16Cum poate o companie de IT să

devină investitor într-un startup

Tudor Bîrlea

18BUILD FOR FUN

@ FedEx DayAndreea Misaras și Camelia Hanga

21Creativitate Aplicată

Alexandru Palade

24Recenzie pentru “Haskell Data

Analysis Cookbook”Radu Marius Florin

2

26vNext: Viitoarea direcție a aplicațiilor .NETClaudiu Mera

29Websockets – http pe steroiziPhilip Peterhansl

32Concurență şi data bindingîn JavaFXSilviu Dumitrescu și Diana Bălan

35Cod curat – Comentarii și formatRadu Vunvulea

38Software Testing World CupCazacu Lavinia

40Primul pas în analiza de businessIoana Armean

42BUGETUL DE MARKETING = BUGETUL DE PUBLICITATE?Adrian Abrudan

43Dronele sunt aiciThomas Morris

44Gogu, Petrică și Lupu’Simona Bonghez, Ph.D.

Page 4: Today Software Magazine N28/2014

4 nr. 28/2014 | www.todaysoftmag.ro

Multă lume consideră că IT-ul în general este comod și nu-ți îngrădește cre-ativitatea. Afirmația este întru totul adevărată dacă privim din perspectiva faptului că angajații acestui domeniu își pot dedica timpul îmbunătățirii sau

dezvoltării unor noi aplicații, fie ele de outsourcing sau proprii. Însă ecosistemul IT tre-buie în permanență monitorizat și supus unui efort de ameliorare a echilibrului dintre părțile sale componente. Cluj IT Cluster sau persoane individuale au conștientizat deja depunerea acestui efort. Remarcăm în acest sens inițiativa lui Mirel Borodi de a propune o lege care să reglementeze dezvoltarea finanțărilor crowdsourcing-ului . De asemenea, rețin din media o altă propunere privind reglementarea finanțării de tip business angels. Toate acestea inițiative își pot aduce contribuția la crearea unui climat propice punerii în aplicare și dezvoltării unor proiecte locale inovative. De altfel, în acest număr puteți citi despre primul succes al unei companii locale TinTang care și-a obținut validarea și susținerea internațională prin postarea proiectului pe Indiegogo. Nu puteam vorbi de inițiative fără a menționa lansarea de către mediul privat a două proiecte educaționale. Este vorba de Simplon, http://ro.simplon.co/, școala care pregătește în șase luni viitorii web developer-i și antreprenori precum și de Academy+Plus, http://www.pitechplus.com/#!academy_plus realizată de către Pitech+Plus în colaborare cu Ecole 42 din Paris. Acesta al doilea proiect ce urmărește dezvoltarea tinerilor programatori se desfășoară pe parcursul a trei ani.

Remarcăm în ultimul timp în Cluj o evoluție a companiilor locale în ceea ce privește transformarea spațiului de lucru într-unul care oferă pe lângă avantajele pur practice și pe acelea ale ilustrării identității specifice fiecărei companii. Salutăm această mișcare ce a devenit accelerată în 2014 prin mutarea în sedii noi care au facilitat această repre-zentare. De altfel, în ultimele luni am avut evenimentele de lansare lunare ale revistei în câteva astfel de noi sedii. Trendul va continua pentru toate lansările planificate până la finalul anului.

Realizăm o trecere în revistă a articolelor din acest număr. Începem bineînțeles cu IT Days 2014 evenimentul anual organizat de Today Software Magazine a cărui agendă este completă. Pentru înregistrare vă invităm pe itdays.ro. Ce te face să mergi mai departe? prezintă inițiativa Accesa TechLeague care vă invită la un workshop susținut de Florian Ivan. Continuăm cu invitații de participare la How To Web 2014 și Starcelerate. Build for fun @ FedexDay prezintă conceptul unei companii clujene pentru stimula-rea proiectelor creative și introducerea lor în producție. Printre articolele tehnice, vă propunem review-ul cărții Haskell Data Analysis Cookbook, Clean code - comentarii și format, vNext: Viitoarea direcție a aplicațiilor .NET sau Websockets – http pe steroizi. Vă invităm de asemenea să citiți un nou articol din seria JavaFX: Concurență și data binding în JavaFX.

În încheiere, doresc să mulțumesc agenției SubSign pentru designul noului site al revistei și colegului meu Dan Hădărău, magicianul web care ne-a fascinat cu talentul său în implementarea noul site. Mulțumim !!!

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

Ovidiu MăţanFondator al Today Software Magazine

Ovidiu Măţ[email protected]

Editor-in-chief Today Software Magazine

editorial

Page 5: Today Software Magazine N28/2014

5www.todaysoftmag.ro | nr. 28/octombrie, 2014

Redacţia Today Software Magazine

Fondator / Editor in chief: Ovidiu Mățan [email protected]

Graphic designer: Dan Hădărău [email protected]

Copyright/Corector: Emilia Toma [email protected]

Traducător: Roxana [email protected]

Reviewer: Tavi Bolog [email protected]

Reviewer: Adrian Lupei [email protected]

Contabil : Delia [email protected]

Produs de Today Software Solutions SRL

str. Plopilor, nr. 75/77Cluj-Napoca, Cluj, [email protected]

www.todaysoftmag.rowww.facebook.com/todaysoftmag

twitter.com/todaysoftmag

ISSN 2284 – 6352

Copyright Today Software Magazine

Reproducerea parțială sau totală a articolelordin revista Today Software Magazine

fără acordul redacției este strict interzisă.

www.todaysoftmag.rowww.todaysoftmag.com

Lista autorilor

Simona Bonghez, [email protected]

Speaker, trainer şi consultant în managementul proiectelor,

Owner al Colors in Projects

Silviu [email protected]

Java Line Manager@ Accesa

Irina [email protected]

PR Manager @ How to Web & TechHub Bucharest

Diana Bă[email protected]

Java developer@ Accesa

Misaras [email protected]

Learning & Development Partner@ Betfair

Tudor Bî[email protected]

Co-fondator @ Starcelerate

Philip Peterhansl [email protected]

IT Consultant Automotive@ msg systems ag

Ioana [email protected]

Business Analyst @ Imprezzio Global

Thomas Morris [email protected]

Freelance Web Developer

Adrian [email protected]

Senior partner & research director@ Loopaa

Radu Marius [email protected]

Business & Data Analyst@Fortech

Claudiu [email protected]

Software Developer@ Endava

Alexandru [email protected]

Director of Product Development@ Yardi România

Claudia [email protected]

Software Developer@ Endava

Mircea Vă[email protected]

www.clujstartups.com

Cornelia [email protected]

Communications Officer @ Accesa

Camelia [email protected]

Training Manager@ Betfair

Radu [email protected]

Senior Software Engineer@iQuest

Irina [email protected]

Quality Assurance Engineer@ HP România

Lavinia [email protected]

Quality Assurance Manager@ HP România

Page 6: Today Software Magazine N28/2014

6 nr. 28/2014 | www.todaysoftmag.ro

eveniment

Trenduri, tehnologii, antreprenoriat şi

proiecte de cercetare la

Cluj IT Days 2014

Evenimentul va începe la ora 9:00 pentru înregistrare urmat de deschiderea evenimentului în cadrul căruia vom lansa și cartea Cum să construim un produs.

Prima secțiune, Trends & Leadership, are scopul de a inspira și de a trasa câteva din direcțiile de evoluție ale companiilor locale. CEO-ul Accesa, Iulian Iuga, ne va prezenta evoluția companiei sale de la începuturi până acum precum și direcția pe care se va merge.O prezentare cu titlu inedit Lebăda Neagră îi va aparține lui Dan Ionescu.

Firefox OS este o noutate pe piața sis-temelor de operare mobile, percepută din perspectiva ca un sistem exotic și diferit. Alex Lakatos, reprezentant Mozilla și QA team lead la Xoomworks, ne va prezenta principalele caracteristici ale acestuia. Continuăm după o scurtă pauză cu o ana-liză a pieței locale de IT din perspectiva lui Voicu Oprean, CEO Arobs. Acestuia îi va succeda Bogdan Herea, CEO Pitech Plus, care se va axa în prezentarea sa asu-pra evoluției de la outsourcing la produse.

De altfel, subiectul prezentării sale frec-vent apreciat ca trend important în rândul companiilor clujene, se va constitui în principala temă a prezentărilor din această secțiune.

Încheiem această primă parte de pre-zentări cu aceea a Dianei Ciorba care va analiza leadershipul feminin, în special din zona de IT.

După prima pauză, seria prezentări-lor care va avea ca tematică aria tehnică, se va deschide cu Silviu Dumitrescu care va expune noutățile Java 8 și JavaFX. Peter Lawrey, invitatul special la această ediție a IT Days, despre care am scris pe larg în articolul precedent, ne va vorbi despre Java Performance și ce putem face pen-tru îmbunătățirea acesteia în aplicațiile noastre.

Continuăm cu o prezentare din zona de arhitectură software, aparținând lui Sergiu Damian care ne va vorbi despre Arhitectura software pentru startupuri și va explica de ce este mai greu să construim următorul Twitter decât o platformă

Continuăm seria de articole despre Cluj IT Days cu o nouă invitație. Am avut o lună la dispoziție pentru a putea umple locurile libere. Mulțumim tuturor celor care ne-au trimis o propunere de prezentare și ne pare rău dacă nu le-am putut

include pe toate. Vom încerca să le includem în următoarele ediții. Facem o trecere în revistă a principalelor secțiuni ale evenimentului precum și ale prezentărilor.

Ovidiu Măţ[email protected]

Editor-in-chief Today Software Magazine

Page 7: Today Software Magazine N28/2014

7www.todaysoftmag.ro | nr. 28/octombrie, 2014

TODAY SOFTWARE MAGAZINE

bancară. Limbajele funcționale precum Scala sau F# au făcut în aplicațiile comer-ciale tranziția de la modă la necesitate. Din ce în ce mai multe companii adoptă tranziția spre acestea în proiectele lor. Ovidiu Deac, angajat Ullink și consultant software, va detalia condițiile care asigură această evoluție din perspectiva avantajelor oferite de aceste limbaje.

De ce realizăm software? Este întreba-rea la care Adrian Bolboacă, consultant Mozaic Works, încearcă să răspundă. Ne-am obișnuit să construim software, dar de multe ori uităm de ce facem acest lucru. Scopul prezentării este să arate ce este un produs software de calitate, cum poate o companie să aibă o creștere organică și cum pot programatorii să își ajute clienții și companiile să realizeze produse de calitate. Următorul speaker este UX & interaction designer, de formație filozof. Prezentarea sa, Cum putem gândi interactiv experiența utilizatorului? Are ca subiect UX design-ul ce încorporează pe de o parte aspecte din discipline tehnice precum informa-tica, arhitectura, designul grafic, designul industrial și pe de altă parte, se străduiește să integreze aspecte din științele umaniste: științe cognitive, psihologie, antropologie, sociologie. De ce științe umaniste? Pentru că au ca domeniu de activitate tocmai omul (user-ul) și existența (experiența) lui. Științele umaniste sunt însă o invenție destul de recentă (cel mult 150 de ani) față de disciplina cu același obiect de activitate, din care s-au dezvoltat și ele: filosofia. În ceea ce privește omul și ceea ce i se întâm-plă acestuia, filosofia are o expertiză de peste 2000 de ani.

Big Data rămâne un subiect la modă, iar Silvia Răusanu ne promite să ne spună mai multe despre această tendință ce pune multă presiune pe liderii businessului bazat pe aplicații online, pe companiile IT,

dar și pe fiecare dezvoltator care vrea să fie la curent cu tot ce e în trend. Lumea busi-nessului este presată nu doar de ralierea la noile tehnologii, dar și de masa tot mai mare de date și de creșterea numărului de surse de date. Nu există nici o rețetă de succes despre cum se poate aborda pro-blema big data, nici măcar tehnic- sunt cel puțin 20 de baze de date NoSQL și nenumărate distribuții de executoare map-reduce. Dar odată realizată importanța și impactul pozitiv asupra dezvoltării busine-ssului, arhitectura, soluția pentru stocare și abordarea algoritmică derivă mult mai ușor din cerințele funcționale.

Prezentarea lui Victor Ionescu, O nouă experiență enterprise a utilizatorului cu UI5 și SAP Fiori, ne va demonstra că aplicațiile realizate din perspectiva utilizatorului con-duc la o productivitate mai mare și ajută utilizatorii enterprise să devină mai Agile. Aceste concepte vor fi ilustrate în practică folosind metodologii și tehnologii SAP.

Tema testării este și ea abordată în prima zi a evenimentului prin a doua prezentare a lui Alex Lakatos, Testarea în liga principală, în care se vor descrie modalitățile de testare care au loc în marile companii precum Facebook.

La finalul primei zile, vă invităm la un pahar de vin și la o porție de socializare.

Seara continuă la clădirea vechiu-lui Casino, unde colegii de la Asociația Culturală Contemporană vă invită să luați parte de la 18:30 la un eveniment denumit Origini, care va fi o veritabilă lecție despre istoria românilor.

Printre schimbările pe care le-am realizat anul acesta în plus față de 2013 a fost introducerea workshop-urilor de Java Performance și Agile & Software Craftmanship în 24 noiembrie, programate cu o zi înainte de începerea evenimentului. Interesul arătat de companiile locale este

ridicat. În cazul celui de Java îl vom avea ca speaker pe Peter Lawrey, cotat pe locul 3 la Java pe Stackoverflow și pe locul doi la concurrency. Deși inițial nu exista în plan, am fost rugați să introducem chiar și un branding al acestui workshop.

În cazul celui de Agile & Software Craftmanship, scopul este îmbunătățirea modului în care se ajunge la performanță printr-o mai bună estimare și planificare a sprint-urilor precum și o introducere în coding Kata. Targetul workshopului sunt programatorii, testerii, arhitecții software și managerii.

Sper că v-am convins să participați. Locurile sunt limitate la aproximativ 230 persoane, iar înscrierile pot fi realizate online pentru eveniment. Pentru ca porția de informație să fie completă, participanții vor pleca acasă cu cartea Cum să construim un produs în care vor fi detaliate o parte din prezentări.

Page 8: Today Software Magazine N28/2014

8 nr. 28/octombrie, 2014 | www.todaysoftmag.ro

Ca dovadă, Andrei Vig și Alexandru Chiș au aceeași problemă, doar că ei nu mai trebuie să răvășească toată camera ca să-și găsească cheile, ci folosesc Tintag: un dispozitiv inventat chiar de ei ce vine împreună cu o aplicație pentru iPhone (versiunea pe Android este în lucru).

Mai exact: Tintag (www.thetintag.com) te ajută să-ți găsești lucrurile aproape pierdute definitiv (în viitor, chiar și pe

cele pierdute definitiv!?!). Trebuie doar să atașezi dispozitivul (de dimensiunea unei monede, ca un breloc) la obiect, copil, cățel și alte neprețuite. Din aplicație, poți seta o rază de acțiune (1-50 de metri) iar noul “breloc” Tintag va trimite un semnal spre smartphone-ul tău dacă obiectul sau cățelul ce are atașat Tintag-ul iese din această rază de monitorizare. În plus, poți vedea și distanța până la Tintag-ul în cauză.

Funcționează și invers: dacă ți-ai rătăcit smartphone-ul, dar ai Tintag-ul la îndemână, trebuie doar să apeși pe el și smartphone-ul va începe să vibreze și să sune (cu condiția să fie în raza de acțiune, bineînțeles).

Pare simplu, nu? Eh, nu chiar: cei doi co-fondatori lucrează la idee de peste un an, împreună cu alți 4 angajați. Atât Andrei cat și Alex au experiență de aproape 10 ani în IT și dispozitive de tracking, iar ca echipă lucrează împreună de câțiva ani buni, au început cu outsourcing , dar au dezvoltat și alte produse proprii.

S-au gândit bine și au decis să nu caute investitori, dar în schimb au pus la cale o campanie de crowdfunding, și cu scopul de a obține validare din partea pieței. Bine gândit: dacă posibilii utilizatori nu doresc să plătească, atunci nu are rost să conti-nue. Campania a început pe 7 septembrie, pe Indiegogo și în doar 31 de zile și-au atins suma propusă: 50 000 de dolari, de la

1200 de funders (majoritatea din România, SUA și Canada). Mai mult campania con-tinuă încă o lună, astfel că se poate ajunge la suma de 100 000 de dolari, având ast-fel mai multe resurse ca să dezvolte alte feature-uri. Prototipurile vor fi livrate în noiembrie, iar versiunea îmbunătățită în aprilie.

Pe partea tehnică, provocările cele mai mari au fost legate de dimensiunea și îmbi-narea părților componente, poziționarea acestora în așa fel încât raza de acțiune să fie cât mai mare. Tintag folosește tehnologia BLE (Bluetooth Low Energy) și o frecvență a antenei de 2.4 GHz. Următoarea provo-care este obținerea certificării CE și FCC și livrarea prototipurilor, în paralel găsi-rea unui furnizor de încredere. Iar dacă se strâng din campanie peste 150 000 de dolari, atunci va exista opțiunea deschi-derii unei linii de producție proprie. În viitor vor oferi și posibilitatea customizării dispozitivelor (ex: sonerie, lumini și adău-gare de accesorii), SDK-ul va fi făcut public pentru alți developeri și au în vedere și folosirea dispozitivului ca buton de panică. Când e apăsat, se trimite o alertă/mesaj cuiva prestabilit. Și asta nu e tot: în urmă-toarele versiuni, dispozitivul va transmite un semnal oricărui smartphone din raza sa de acțiune ce are instalată aplicația Tintag, care la rândul ei va trimite informația mai departe la serverele Tintag și astfel vei afla

startups

Tintag - Internet of Things startup à la Cluj

În ultimul an mi-am uitat tableta în diverse locuri de cel puțin trei ori (în supermarket, în restaurante, la evenimente) - din fericire mi-am recuperat-o rapid de fiecare dată. Unul din telefoane e încă în Bulgaria pe undeva, îmi căzuse din buzunar. Cu portmoneul nu e o problemă: îl uit acasă tot timpul, așa știu sigur unde e. Dar să fie clar: nu sunt uituc! Poate, puțin neatent, mai degrabă

prefer să cred că se întâmplă oricui, oricând și oriunde.

Page 9: Today Software Magazine N28/2014

9www.todaysoftmag.ro | nr. 28/octombrie, 2014

TODAY SOFTWARE MAGAZINE

unde a fost detectat obiectul pierdut/furat. Apropo, încă o sugestie: Tintag pentru

parole uitate - ar prinde foarte bine :-)

PCB protyping machineLegat de campania de pe Indiegogo,

câteva sfaturi bune din partea lor:• pre-campania ajută destul de mult în

promovare (au strâns 1000 de adrese de e-mail de la persoane interesate în doar trei săptămâni). Ideal ar fi ca pre-cam-pania să fie începută cu 2-3 luni înainte;

• chiar dacă poate părea plictisitor, citirea documentațiilor și recomandă-rilor Indiegogo sunt foarte utile, conțin o mulțime de sfaturi practice adunate (până acum pe Indiegogo au fost peste 50 000 de campanii cu o rată de succes de 30%);

• canalele de social media sunt extrem de importante atât pentru promovare cât și pentru o conversație constantă cu fanii, rezervați-vă timp de răspuns între-bărilor venite de la funders,

• ”stick to what you know” - au apelat la ajutorul unei alte firme (DirectSpark) pe partea de marketing, unde nu aveau prea multă experiență.

Competiție există, presupun că v-ați gândit la Tile deja (15.8 milioane de dolari investiție), doar că o dată ce se termină bateria Tile-ului, poate fi aruncat la gunoi, nu-l mai poți folosi. Ei bine, Tintag-ul e singurul dispozitiv reîncărcabil de acest tip. După 6 ore de încărcare, bateria aces-tuia ține până la 4 luni.

Tintag este printre pionierii locali în cel puțin două domenii: produs hardware și crowdfunding, campania lor fiind prin-tre primele campanii romanești reușite pe Indiegogo. Mă bucur să văd că a fost inițiat de clujeni și sper să vedem și alte proiecte locale urmând această cale de succes.

PS: Între timp, până când primesc și eu Tintag-urile comandate, dacă vedeți o tabletă cu sticker “I love startups” să mă contactați, se prea poate să o fi uitat pe undeva.

Mircea Vă[email protected]

www.clujstartups.com

Page 10: Today Software Magazine N28/2014

TODAY SOFTWARE MAGAZINE

10 nr. 28/octombrie, 2014 | www.todaysoftmag.ro

Mai mult decât viziunea de ansamblu, mai departe decât bariera oricărei rezolvări convenționale, dincolo de cunoașterea individuală, în pofida limitărilor de timp și împotriva curentului general.

Tu și TechLeagueAcesta ești tu, cel care-și lasă curiozita-

tea să domine, dincolo de orice limită. Cel pentru care detaliile contează . Cel care prin explorare și experimentare își decan-tează experiența, o împărtășește cu ceilalți și setează borne din ce în ce mai înalte de la care să-și reînceapă învățarea. Cel care – pentru el însuși, dar și pentru cei din jur – este omul pedagog, autodidact, inovând, având inițiativă – cel care nu cunoaște limite în dezvoltarea sa. Acesta este omul care întotdeauna merge mai departe.

De-a lungul timpului, am învățat care sunt cele mai importante lucruri pentru oamenii ca tine, cei care au avut mereu rolul de a depăși așteptările, de a aduce la lumină o nouă rezolvare, de a îmbunătăți - în fiecare zi - definițiile performanței și ale eficienței. Oamenii a căror contribuție - în egală măsura individual și ca echipă de specialiști - reușesc să aducă o schimbare în tehnologie și în IT.

Pentru acele lucruri care contează pen-tru dezvoltarea ta, am fondat TechLeague.

Gândindu-ne la aspecte precum: învățare, mentoring, knowledge-sharing, promovare excelenței în domeniu, inovație și inițiativă - am pus bazele a șase piloni prin care ne propunem să facilităm accesul la acestea prin intermediul unor eveni-mente sau programe speciale prin care cei pasionați de IT își pot atinge potențialul, în drumul lor de a-și depăși propriile limite. TechLeague cuprinde: TechCampus, TechTraining, TechInspire, TechExcellence, TechCorner și TechInitiative, fiecare dintre acestea atingând câte unul din aspectele care-ți influențează evoluția.

Intensive Agile TechTrainingCel mai recent eveniment marca

Te chL e ague es te Intens ive Ag i le TechTraining. Acoperind subiecte precum:

• Introducere în metodologiile și prac-ticile Agile;

• Diverse abordări în Agile: Scrum, XP, Kanban, Lean, FDD, Crystal, DSDM;

• E c h i p e l e A g i l e : R o l u r i ș i responsabilități, Responsabilități în

e c h ip e l e d e pro i e c t , Comunicare și manage-mentul stakeholderilor, Leadership și manage-ment în proiectele Agile, Instrumente și practici;

• I n i ț i e r e a p r o i e c -tu lu i : Managementu l proiectelor și al portofo-liilor, Indicatori cheie în proiecte;

• B a c k l o g m a n a -g e m e n t : v a l o a r e , planificare, organizare și prioritizare, reprioritizare, Managementul schimbării;

• R e l e a s e / p l a n i f i c a -rea iterației: Conceptele de plani f icare Agi le , Tehnici de estimare, Story mapping, Product road-maps, Wireframes;

• Iterația: Daily stand-u p s , R e v i e w - u r i ș i retrospective.

• își propune ca, timp de două zile, să ofere un insight mai bun asupra mana-gementului de proiecte, creșterii productivității și dezvoltării unor relații de colaborare mai strânse - folosind metodologia Agile.

Trainingul va fi susținut de Florian Ivan: cu peste 15 ani de experiență ca trainer în industria IT (software), Florian are o perspectivă unică asupra modului de a conduce pro-iecte, susținând teoria și framework-urile cu exemple concrete, studii de caz și lecții învățate. Florian este consultant în management de proiect, cu experiență vastă în managementul proiectelor pen-tru companii precum Microsoft, dar și managementul unui startup în domeniul Business Intelligence de la stadiul de for-mare până la achiziție.

Evenimentul este deschis și pentru tine. Dacă vrei să participi, trimite-ne un e-mail la [email protected].

Intensive Agile este un eveniment cu locuri limitate (10). Pentru mai multe informații, vizitează-ne pe facebook.com/JoinTechLeague.

Ce te face să mergi mai departe?

educație

Available places 10

Participation fee 150 €

INTENSIVE AGILE

Be the first to register at:

[email protected]

until 31.10.2014

Cluj-Napoca, 14th – 15th of November 2014

Organized by Part of

TRAINER Florian Ivan

CSM, CSP, PMI-ACP, PMP, Prince2 Practitioner, MCTS

Embrace change, deliver excellent results and learn more about:

agile delivery teams, project initiation, backlog management, release & iteration

2 days of training in managing agile projects, increasing productivity and developing strong collaborative relationships by using Agile methodologies

Cornelia [email protected]

Communications Officer @ Accesa

Page 11: Today Software Magazine N28/2014

11www.todaysoftmag.ro | nr. 28/octombrie, 2014

TODAY SOFTWARE MAGAZINE

Smartweb e un eveniment anual dedicat designerilor, dezvoltatorilor și antrepenorilor din Europa de Sud-Est. Anul acesta, datorită revistei Today Softwere Magazine, am avut ocazia să particip și eu la Smartweb, eveniment organizat de Evensys și desfășurat la București. Evenimentul este alcătuit din două părți care au loc pe durata a două zile: în prima zi se țin, în para-

lel, două workshop-uri de câte opt ore, iar în a doua zi, se desfășoară o conferință cu prezentatori de talie mondială. Anul acesta la București au fost prezenți Jeremy Keith, Kaelig, Marko Dugonjic, Harry Roberts, Remy Sharp, Zoe Gillentwater, Ana Tudor și Bruce Lawson. Prezentările lor au tratat teme ca responsive design, Html, Css, Javascript și standarde web.

Jeremy Keith este autorul cărților “Bulletproof Ajax”, “DOM Scripting” și “Html5 for designers”. Acesta a venit cu propunerea: website-urile nu trebuie să arate la fel pe toate browser- ele. Susține că este acceptabil ca anumite elemente să apară diferit pe unele browser-e, în princi-piu pe versiunile mai vechi care nu vor mai fi folosite foarte mult timp de acum încolo. Dezvoltatorii ar trebui să se orienteze cu prioritate înspre funcționalitatea unui website, apoi asupra formei. Utilizatorii își aleg browser-ele și dispozitivele în funcție de necesități și rezoluție agreată. Ar trebui să le respectăm aceste decizii prin construirea unor website-uri adap-tabile și receptive. Ne sfătuiește să ne investim timpul în versiunile mai noi , să fim “future friendly” și a dat ca exemplu în acest sens primul website1 apărut vreodată. Website-ul a apărut în 1989 în cadrul unui institut de cercetare nucleară din Suedia. Deși primele pagini nu au un design modern, dar funcționează și pe browser-ele de azi cu același scop cu care a fost creat la început (de-a lungul timpului s-au adăugat

1 info.cern.ch/hypertext/WWW/TheProject.html

și pagini cu un design modern).Se așteaptă ca developer-ii să înțeleagă

că diferențele dintre browser-e sunt o tră-sătură a webului și trebuie luate ca atare. Adevărata problemă stă în înțelegerea acestor diferențe, iar soluția ar fi să ne convingem clienții, chiar și managerii de proiect de acest fapt. Vă doresc succes în a convinge echipa de testare. În acest sens, există un website2 care ne poate ajuta să ne susținem punctul de vedere.

Fiind de acord cu propunerea lui Jeremy, amintesc și ceea ce spune Brad Frost într-un articol pe o tema similară: “există o mulțime de versiuni diferite de Blackbery și nu este suficient timp într-o zi pentru a face un website să arate consis-tent pe fiecare versiune.” Datoria noastră ca developer-i rămâne să oferim utilizatorilor o experiența decentă pe website-ul pe care îl construim, pe diversele browser-e.

Kaelig a fost front - end developer la ziarul online The Guardian3 și auto-rul cărții “Css maintenable with Saas”. La

2 dowebs i tesne e dtolo okexac t ly t hes ameine-

verybrowser.com

3 www.theguardian.com/uk

theguardian.com contribuie treizeci de ingineri din diverse părți ale lumii doar pe partea de Css și Html, iar codul Css are aproximativ 25000 de linii. Ne-a povestit cum s-a redus decalajul în comunicare dintre developer-i și designeri în cadrul theguardian.com cu ajutorul Saas. Acesta din urmă este un preprocesor Css care adaugă programare Css-ului prin utiliza-rea funcțiilor, operațiilor și variabilelor. La theguardian.com sunt utilizate destul de multe fonturi și culori astfel încât să devină dificilă folosirea numelor acestora în Css. Prin declararea variabilelor ca în exemplul de mai jos, în Saas se poate defini un anu-mit font o singura dată, iar mai departe poate fi utilizată variabila care îi conține numele fără a reține fiecare nume de font:

$font-stack: Helvetica, sans-serif;body { font: 100% $font-stack;}

Se pot imbrica selectorii la fel ca în Html pentru o mai bună vizualizare a ier-arhiei elementelor. Blocurile de declarații pot fi reutilizabile prin mixins, pot avea chiar și parametrii de intrare și pot fi folo-site mai târziu cu directiva @include, de

Cum a fost la conferința Smartweb

eveniment

www.3pillarglobal.com

3Pillar Global, a product development partner creating software that accelerates speed to market in a content rich world, increasingly connected world.

Our core competencies include:

ProductStrategy

ProductDevelopment

ProductSupport

Our offerings are business focused, they drive real, tangible value.

Page 12: Today Software Magazine N28/2014

12 nr. 28/octombrie, 2014 | www.todaysoftmag.ro

eveniment

exemplu:

@mixin border-radius($radius){-webkit-border-radius:$radius;-moz-border-radius:$radius;-ms-border-radius:$radius;border-radius:$radius;}

Se mai pot crea în Saas fișiere parțiale în care se poate păstra o bucată de stil refolosibilă; fișierele vor avea “_” în fața numelui, extensia .scss( exemplu _header.scss) și se pot folosi în fișierele Css prin-cipale, cu directiva @import plus numele parțialului ( exemplu: @import ‘header’;). Se poate face uz și de avantajele moștenirii în Saas:

.message { border: 1px solid #ccc; padding: 10px; color: #333; }

.success { @extend .message; border-color: green; }

Revenind la theguardian.com, care în trecut avea parte de aproximativ 20 de lan-sări pe an, azi a ajuns la patru lansări pe zi. În acest context, o comunicare eficientă și bine organizată pare mai mult decât nece-sară pentru succesul website-ului, astfel încât cei care lucrează la theguardian.com au pus cap la cap o matrice de fonturi pe care le utilizează frecvent și în care și-au notat pentru fiecare font folosit în diferite secțiuni ale paginii (titlu, subtitlu, corpul articolului, etc) valori pentru: numele fon-tului în Photoshop, numele real al fontului din Css, un nume abstract pe care develo-per-ii îl folosesc în denumirea variabilelor și o a patra denumire “prietenoasă” folosită în discuții și ședințe.

Marko Dugonjic din Croatia este fondatorul website-ului Creative Nights4, editor la revista Smashing Magazine și coautor al cărții “The Smashing Book #4”. Prezentarea lui a avut ca țintă înlo-cuirea conținutului de tip lorem ipsum cu prototipuri de conținut. Atunci când nu cunoaștem ce fel de conținut va avea website-ul pe care îl construim, cel mai probabil vom porni cu un design generic.

Primul pas recomandat de el este să facem orice pentru a colecta conținut din: broșuri, rapoarte, întrebări frecvente din domeniul companiei pentru care se implementează website-ul și să ne intere-săm personal despre compania respectivă. Dacă avem șansa să vizităm sediul cli-entului, consideră că e bine să avem un aparat de fotografiat pentru a face poze la logo-urile prezente în sediu care ajută atât în stabilirea designului, culorilor, cât și în transformarea lor în resurse. Crede că e o idee bună să furăm conținut de la

4 www.creativenights.com/about

competitorii clientului nostru, pentru a-i servi clientului ca punct de plecare în formularea conținutului propriu: va încerca să își depășească competiția, să vină cu un conținut mai bun. Recomandă stabilirea timpurie a duratei de viață a conținutului: poate exista conținut per-manent (profil, date de contact) și poate exista conținut temporar, format din cam-panii sau promoții. Putem să stabilim de la început scheletul viitoarelor pagini în CMS, dacă folosim unul, și ar fi impor-tant să nu adăugăm nici un fel de design în această fază, pentru a lăsa la vederea clientului că pagina respectivă nu e fina-lizată; altfel, dacă o pagină are un oarecare design implementat, clientul are tendința de a considera pagina respectivă finisată și o va ignora, chiar dacă implementarea funcționalității nu este finalizată. De mare ajutor ar fi implementarea autentificării încă de la început si asignarea de roluri clientului, pentru a împărți cu acesta res-ponsabilitatea de a naviga și umple golurile din conținut cât mai devreme.

Odată ce avem schițele de mai sus, putem stabili mult mai ușor arhitectura website-ului și designul optim pentru a scoate conținutul cât mai bine în evidență. Putem, în acest moment, să stabilim șabloanele conținutului. Marko ne reco-mandă să distribuim conținutul gradual pe pagină, în funcție de experiența posibililor utilizatori. Pentru utilizatorii noi ar trebui grupată informația în porțiunea din pagină cea mai accesibilă vizual. Pentru utilizatorii intermediari ne recomandă o alta porțiune a paginii. Pentru utilizatorii frecvenți, care sunt deja familiarizați cu website-ul și care știu deja unde vor găsi informația de care au nevoie, este acceptabil să le acordăm o porțiune retrasă a paginii. Tot pentru a grada conținutul ar fi bine să ne folosim de meta data unei pagini și să includem acolo informații concise pentru utilizato-rii noi. Pentru o navigare cât mai ușoara în cadrul website-ului, Marko recomandă crearea unui ghid pentru utilizatorii noi, cu pași simpli și clar explicați, iar dacă sunt implicate metode de plată, consideră că ar fi bine să expunem explicația desfășurată și pentru acestea și să ținem seama cât mai devreme de șabloanele pentru acest tip de conținut. Putem lua în considerare un șablon pentru un glosar în care să punem la dispoziție definiții pentru termenii din domeniul în care se încadrează website-ul, și alt șablon pentru a prezenta istoricul companiei. Se vehiculează că afișarea pro-filurilor angajaților companiei pe website cu informații succinte despre activitatea,

educația și, cel mai important pasiunile lor, ar umaniza compania respectivă.

Următorii pași pe care îi recomandă sunt utilizarea unor imagini de rezoluție înaltă și implementarea anticipată a unor limite configurabile de conținut.

Pentru conținutul temporar, destinat clienților fideli, consideră că ar fi optim să stabilim cât mai devreme cu clientul :

• datele pentru publicarea de-a lun-gul anului a conținutului campaniilor ( exemplu Halloween, Crăciun, etc );

• existența activităților recurente, ast-fel încât să nu ștergem conținutul, ci să îl ascundem/afișăm periodic (exemplu articole despre răceală);

• lista de categorii și subiecte viitoare posibile;

• tipografie diferită per categorii; ar putea evidenția mai bine categoriile;

• posibile grafice incluse în pagini;• mărimile și variațiile imaginilor;• meniul pe care ar trebui să îl grupăm

pe experiența utilizatorilor.

Având posibilul conținut cât mai devreme, realizăm o arhitectură stabilă, putem seta așteptările clientului cât mai repede și mai presus de toate design-ul va fi unul specific.

Remy Sharp este fondatorul conferinței despre Javascript din UK, “Full Frontal”, co-autor al cărții “Introducing HTML5” și unul din administratorii Html5Doctor.com. Ne-a făcut o mică demonstrație în NodeJS a unei aplicații în timp real, în testarea căreia a implicat participanții la conferință.

Harry Roberts, autor a numeroase arti-cole pe teme de UI, a ținut o prezentare a framework-urilor Css prin comparație cu toolkit-urile UI cu care sunt adesea con-fundate. Un framework Css este evident un framework care facilitează lucrul cu Css oferind câteva instrumente ajutătoare, dar nu complete. Exemple de framework-uri Css sunt: Bootstrap, Foundation și Inuit Css. A colectat personal motivele pentru care acestea sunt evitate: au prea multe avertismente, prea multe opinii, nu oferă instrumente complete. Aparent nu este înțeles exact scopul framework-urilor Css: un framework Css este util pentru pro-iecte unice, în care avem nevoie să scriem de la zero o soluție particulară, specifică, avem deci nevoie de “o mână de ajutor”. Dacă framework-urile Css existente nu ne oferă ceea ce avem nevoie, ne recomandă implementarea propriului Css framework în favoarea personalizării unui UI toolkit.

Zoe Gillentwatter , de la Booking.com

Cum a fost la conferința Smartweb

Page 13: Today Software Magazine N28/2014

13www.todaysoftmag.ro | nr. 28/octombrie, 2014

TODAY SOFTWARE MAGAZINE

Claudia [email protected]

Software Developer@ Endava

a vorbit despre avantajele lui Css3 Flexible Box (sau flexbox), un mod foarte eficient de a așeza elementele html în cadrului unui container, raportându-le coordonatele sau direcția la acesta. Elementele se pot extinde sau comprima pentru a se încadra cât mai bine în container-ul părinte. Deși are o acoperire destul de mare, nu toate browser-ele îl suportă încă. Este implementat de către FF18+, Chrome 21+, IE11, Opera 12.10+, Safari 6.1 și în unele dintre browser-e trebuie precedat de --webkit. Ne-a dat ca exemplu spațierea antetului unui tabel cu table-layout:fixed. Ca celule, coloanele tabelului vor fi astfel la distanță egală una de alta. Dar dacă privim doar textul dinăuntrul lor, care evident că nu va avea aceeași lungime în fiecare celulă, textele vor fi la distanțe diferite două câte două.

Flexbox are soluția pentru această problemă cu următoarele două proprietăți aplicate pe container:

display: flex;Justify-content: space-between;

Ana Tudor a fost singura prezentatoare româncă de la conferință. Titlul prezentării sale a fost “Css use and abuse”.

Utilizând Codepen, un “teren de joacă” pentru web designeri, în care se poate folosi Html, Css, și Javascript , ne-a facut câteva demonstrații de animații 3d în Css3, fără Javascript. A amintit de exemplul tabloului Mona Lisa creat în Css pur cu peste 7500 de linii de cod5. A implementat un poliedru expandabil, un icosido-decaedru 3D, rotația unei suprafețe elastice curbate, o animație de sezon: o figură ce aduce cu un dovleac de Halloween care sare pe axa x și se expandează și se contractă la limitele axei, și altele6.

Ultima prezentare a fost una foarte amuzantă, aparținând lui Bruce Lawson, care a fost și gazda evenimentului. Este co-autorul cărții “Introducing HTML 5”, face parte din organizația Web stan-dards project și lucrează în prezent la Opera. În cadrul prezentării a făcut un sumar al momentelor importante din istoria standarde-lor web într-o manieră umoristică. Ne-a prezentat momentul din 2009 când Html5 a câștigat bătălia cu Xhtml2 nu pentru că Html5 încearcă să suporte browser-ele vechi ci pentru că acesta suportă conținut vechi. Ne-a atras atenția asupra unei greșeli ciudate din Html 3.0 în care a apărut un element nou, <figure>, care includea și elementul <caption> dar această combinație nu a funcționat. Motivul a fost acela că în versiunile anterioare, <caption> era creat să funcționeze doar în cadrul elementului <table> , așa că s-a înlocuit cu elementul <figcaption> în Html5.

Întreaga conferință a fost captivantă, informativă, bine orga-nizată și mi-a lăsat impresia că nu s-a adresat doar developer-ilor și designerilor, ci au fost informații utile pentru oricine din dome-niul IT. Sponsorii de la booking.com au lansat o provocare: primul care a realizat stema Amsterdamului în Css și Html a câștigat o excursie la Amsterdam. Am avut ocazia să schimb impresii cu colegii de branșă din București. Numărul de participanți a fost

5 cssdeck.com/labs/mona-lisa-with-pure-css

6 codepen.io/thebabydino/

foarte mare, câteva sute de persoane, de unde înțeleg că a fost un succes și în anii trecuți. Prezentatorii au fost relaxați, foarte bine pregătiți atât cu demonstrațiile tehnice și sfaturi (pe care încerc să le aplic mai departe în proiectele la care lucrez) cât și cu exemple clare, interesante și ultimele tendințe din domeniu. Mulțumesc revistei Today Software Magazine pentru invitația la conferință și vă recomand să participați la ediția viitoare!

Page 14: Today Software Magazine N28/2014

14 nr. 28/octombrie, 2014 | www.todaysoftmag.ro

Cea de a cincea ediție internațională a How to Web reprezintă un nou început pentru conferință: evenimentul se matu-rizează și propune audienței un format mai complex care tratează în profunzime subiecte specifice.

Pe scena principală a evenimentului vor fi abordate subiecte precum dezvolta-rea de produse tech cu potențial disruptiv, tendințele care vor avea un impact sem-nificativ asupra industriei la nivel global, obținerea de investiții sau antreprenoriatul în tehnologie.

How to Web Conference 2014 aduce în fața audienței lideri în tehnologie și profesioniști consacrați la nivel mon-dial care își vor împărtăși experiența și cunoștințele acumulate de-a lungul timpului. Printre invitații care au con-firmat până în prezent participarea la eveniment se numără: Manuel Heilmann (Co-Fondator & CEO Coinzone, startup care permite utilizatorilor să efectueze tranzacții cu monede digitale precum Bitcoin), Ze Pinto Ferreira (Co-Fondator și CEO FNV Labs, companie care produce Mellow, prima mașină de gătit sous-vide controlată prin smartphone, care a avut o campanie de crowdfunding suprafinanțată cu 300%), Florian Meissner (CEO & Co-Fondator EyeEm, Germania, comu-nitate a pasionaților de fotografie care

înregistrează o creștere rapidă, având în prezent peste 10 milioane de utilizatori), Paul Papadimitrou (Innovation Strategist, UK, analist cunoscut la nivel internațional care a vorbit la evenimente precum LeWeb – Paris, Londra; SXW – SUA sau Social and Digital Marketing Conference – New York, Singapore, London), Michael Ni (Senior VP Marketing & Products Avangate, US, companie care a fost achiziționată anul trecut de fondul de investiții Francisco Partners) sau Dennis Cox (Chief Product Officer IXIA, US, antreprenor a cărui

companie a fost cumpărată de IXIA în 2012 pentru 160 milioane USD).

În paralel vor fi organizate trei track-uri specializate despre product management, dezvoltarea de jocuri și investițiile de tip angel, care vor oferi unor categorii specifice de audiență șansa de a acumula cunoștințe și competențe relevante pentru domeniile lor de interes, precum și oportunitatea de a interacționa cu profesioniști de top din industrie.

Astfel, PRODUCT TRACK dezvol-tat în colaborare cu Mozaic Works, va aduce în discuție subiecte precum pro-duct management, prioritizarea etapelor de dezvoltare a produsului și coordonarea activităților pentru o execuție impecabilă. Ragnar Saas (Co-Fondator PipeDrive) sau Mark Tolmacs (Product Manager Ustream) se numără printre specialiștii care vor vorbi despre product management la cele mai înalte standarde și vor împărtăși bune practici și povești de succes.

Dezvoltatorii de jocuri vor avea la rândul lor oportunitatea de a învăța din exper iența unora dintre cele

How to Web, cel mai important eveniment dedicat inovației, tehnologiei și antreprenoriatului din Europa de Sud-Est, va avea loc pe 20 și 21 noiembrie în București. Ajunsă la ediția internațională cu numărul 5, conferința are în acest an un format mai complex și va aduce în discuție pe scena principală teme precum antreprenoriatul și tendințe în tehnologie, în timp ce

track-urile specializate vor oferi audienței oportunitatea de a învăța mai multe despre dezvoltarea de produse tech, crearea de jocuri sau bune practici pentru investitorii de tip angel. Biletele very early bird sunt disponibile pe site-ul evenimentului howtoweb.co până miercuri, 22 octombrie.

eveniment

Tendințe în tehnologie, dezvoltarea de jocuri, product

management & investiții de tip angel la How to Web 2014

Page 15: Today Software Magazine N28/2014

15www.todaysoftmag.ro | nr. 28/octombrie, 2014

TODAY SOFTWARE MAGAZINE

mai importante companii de gaming din regiune participând la GAME DEVELOPMENT TRACK, organizat în colaborare cu Romanian Game Developers Association (RGDA) cu sprijinul King și Mobility Games. Profesioniști cunoscuți din industrie precum Vlad Micu (Head of Studio, Critical Force Entertainment) sau Mathieu Muller (Field Engineer, Unity Technologies) vor oferi exemple practice și studii de caz care vor ajuta participanții să înțeleagă cum funcționează industria și care sunt mecanismele din spatele unor titluri de succes.

O r g a n i z a t î n c o l a b o r a r e c u Angelsbootcamp cu sprijinul Trento Rise, ANGEL INVESTMENT TRACK este un eveniment adresat investitorilor de tip angel și aduce în discuție bunele practici în domeniu. Jonathan Bixby (Director Executiv GrowLab, care a ridi-cat cea mai mare rundă de finanțare de tip business angel din istoria Canadei), Rune Theill (Co-Fondator & Program Director Rockstart Accelerator), Simon Jenner (Investitor și Co-Fondator Oxygen Accelerator), Adrian Gheară (investitor de tip angel care a finanțat 123ContactForm), Mălin Ștefănescu (Investitor de tip angel care a susținut Green Horse Games), Lyuben Belov (Investitor de tip angel și Managing Director LauncHub) și alți investitori și reprezentanți ai programelor de accelerare din întreaga lume vor vorbi despre modalitatea în care poți încheia cele mai bune runde de investiții, vor analiza aspectele legale sau posibile modalități de colaborare pentru a identifica și investi în startup-uri cu potențial.

How to Web Conference 2014 este un eveniment organizat cu sprijinul par-tenerilor principali Telekom România, IXIA, Bitdefender și Grapefruit și al par-tenerilor Avangate, Softlayer, CyberGhost, Hub:raum, Domain.me, Ambasada Canadei în România și Reea. Se va desfășura în 20 și 21 noiembrie la Crystal Palace Ballrooms din București. Biletele de tip „very early bird” sunt disponibile până miercuri, 22 octombrie, pe site-ul conferinței.

Startup-urile early stage din Europa Centrală și de Est care dezvoltă pro-duse inovatoare în domeniul tehnologiei pot aplica la cea de a treia ediție Startup Spotlight, competiție și program de men-torat adresat celor mai performante 32 de echipe din regiune care va avea loc în paralel cu How to Web Conference 2014. Finaliștii care vor fi acceptați în program vor intra astfel în cursa pentru premiile

în valoare totală de 20.000 USD oferite de IXIA, partener principal Startup Spotlight, și vor participa la sesiuni de mentorat și workshop-uri dedicate. Aplicațiile la Startup Spotlight sunt deschise până pe 20 octombrie și se realizează online pe site-ul programului http://startupspotlight.co

Mediatizarea evenimentului este asigu-rată de parterii media principali Netocratic, Inventures.eu, Newtrend.bg, IT Dogadjaji, Digjitale, The Pole Society, Adevărul Tech, Play Tech, Hotnews.ro, Forbes România, Wall Street, Capital, Yoda, Times New Roman și de partenerii media Cariere, Business Review, Business Woman, Business Cover, Business 24, Incont.ro, Manager Express, Today Software Magazine, Gadget Trends, Comunicații Mobile, PC World, Agora, Games Arena, Ctrl-D, Startups.ro, România Liberă, Academia Cațavencu, Evenimentul Zilei, Zelist, Comunicatedepresa.ro, Ziare.com

și Ejobs.

Despre How To WebHow to Web este cel mai important

eveniment dedicat inovației, tehnolo-giei și antreprenoriatului din Europa de Sud-Est. Conferința se adresează inova-torilor în tehnologie, antreprenorilor web, dezvoltatorilor de produse tech, compani-ilor de outsourcing interesate de inovație, investitorilor și tuturor celor interesați de tehnologie. Mai multe detalii despre eveniment și lista vorbitorilor confirmați pentru ediția de anul acesta sunt dispo-nibile online pe site-ul conferinței http://howtoweb.co

Irina [email protected]

PR Manager @ How to Web & TechHub Bucharest

Page 16: Today Software Magazine N28/2014

TODAY SOFTWARE MAGAZINE

16 nr. 28/octombrie, 2014 | www.todaysoftmag.ro

eveniment

În anul 2011, Mark Anderseen, co-fondator și director al fondului de investiții Anderseen Horowitz din Silicon Valley, prezicea dominația software-ului pe piețele internaționale. Azi când ne îndreptam spre finalul lui 2014, suntem martorii unei explozii antreprenoriale nemaivăzute, în care noi companii pătrund în fiecare nișă a fiecărei industrii. Au apărut între timp o sumă de

elemente ce permit iterații rapide (API-uri, cod open-source, hosting ieftin, materiale educaționale gratuite și ușor accesibile), meto-dologii ce simplifică efortul de a lansa o nouă afacere (de ex. Lean Startup) și acceleratoare sau programe ce oferă sprijin și asistență pe întregul parcurs al dezvoltării unui startup.

Startupurile au la dispoziție atât de multe resurse și componente încât devine din ce în ce mai ușor și mai rapid pentru ele să itereze și să găsească oportunități în piață. În esență, aceastata face ca numărul de oportunități investiționale de calitate în domeniu este mare și continuă să crească.

Era doar o problemă de timp să vedem companii din domeniul IT care vor să beneficieze de aceste oportunități, și pe bună dreptate. Implicându-se ca inves-titori, companiile de IT obțin acces la un spațiu nou unde se pot implica devreme în proiecte interesante, pot folosi în moduri inovatoare talentul și expertiza formată în timp, ajung să lucreze cu (și pentru!) fondatori extraordinari și își consolidează identitatea proprie ca experți în anumite industrii. Aici este foarte importantă oportunitatea de a-și mări profitabilita-tea, prin investiții de succes și beneficiul adus de noile conexiuni create în procesul investițional.

Companiile de IT ce doresc să por-nească pe acest drum și să-și investească resursele în startupuri interesante, sunt preocupate să aplice operațiile corecte în acest sens. Asemenea unui investitor de tip “angel,” o companie de IT începe prin a decide ce resurse poate dedica investițiilor. Bunele practici ne ghidează aici și reco-mandă dedicarea a 5%-10% din totalul resurselor disponibile, dar nu mai puțin a 100-200 ore de muncă depuse de om anual. Apoi este necesar să existe un proces investițional pus la punct, care să acopere trei zone importante: unde să găsească startupurile interesante, cum să evalueze o oportunitate investițională și, respec-tiv, cum să investească și să coordoneze investiția și parteneriatul creat.

În acest context motivația joacă un rol foarte important. Pe lângă aceasta,doar stabilind obiective clare o companie de

IT poate profita de pe urma investițiilor ce le face. Desigur, obiectivul final este o profitabilitate crescută. Dar investițiile în startupuri, deși riscante în sine, vin cu oportunități unice. Iată o lista cu cele mai interesante oportunități pentru o compa-nie de IT:

1. marketing – o companie are oca-zia să-și poziționeze identitatea într-un mod distinct, implicându-se în proiecte interesante din centrele antreprenoriale Europene; este un mod în care se poate diferenția de competiție, arătând un mod de gândire și acțiune orientat către viitor.

2. dezvoltarea afacerii – ca parte a unui startup, compania va beneficia de o atenție deosebită și oportunități de networking cu potențiali parteneri interesanți de pe diferite piețe.

3. recrutare și dezvoltarea de noi aptitudini – efectul direct al implicării într-un startup este dezvoltarea și cre-area de noi aptitudini pentru angajații proprii. Totodată, contactul cu fondatori si profesioniști din noi piețe reprezintă o oportunitate de recrutare.

Acum, putem observa că nu este o activitate ușoară și nici o activitate ce să necesite doar puțină atenție pentru ca o companie de IT să-și poată asigura toate aceste oportunități. Aici este momentul la care intervine Startcelerate, startupul ce îl dezvolt împreună cu echipa mea, intervenind și dând la o parte câteva din-tre dificultățile cu care o companie de IT s-ar confrunta odată ce decide să abordeze această nouă zonă de oportunități.

Foarte pe scurt, Startcelerate este un startup cu sediul în Londra ce facilitează investirea directă a resurselor aparținând companii lor mature în star tupuri . Facem aceasta acoperind întregul flux de

activități, de la descoperirea startupurilor și evaluarea oportunităților până la con-figurarea parteneriatelor investiționale și urmărirea performanțelor investiției. Produsul nostru principal, evenimentul Startcelerate Pitch & Match, împreună cu setul nostru de instrumente contractuale, sunt elementele principale prin care spri-jinim companiile de IT. Startcelerate mai oferă sprijin companiilor de IT ce sunt interesate să investească în startupuri prin organizarea unui workshop interactiv ce acoperă subiecte practice legate de cum să găsească, filtreze și evalueze startupuri, cum să-și creeze eficient un proces intern de management al investițiilor și cum să-și structureze juridic tranzacțiile, acoperind totodată elemente cum ar fi metodologii de evaluare financiară și non-financiară.

Dacă doriți să vedeți pe viu cum funcționează aceste lucruri, puteți să participați în calitate de companie de IT la următorul nostru eveniment Startcelerate. Acesta va avea loc în Londra, în 31 octom-brie și 1 Noiembrie, și se va desfășura în Canary Wharf la Level39. Evenimentul Startcelerate Pitch & Match va fi o opor-tunitate pentru companiile de IT să se cunoască cu startupuri ce se potrivesc cu interesele lor.Este în același timp și o oportunitate de networking cu par-tenerii și invitații noștri: universități importante, acceleratoare, firme de avo-catură și corporații din UK, Germania, Belgia si Olanda.

Vă invit să vizitați pagina evenimen-tului nostru la adresa www.london.startcelerate.com și să-mi scrieți latudor (at) startcelerate.com

Cum poate o companie de IT să devină

investitor într-un startup

Tudor Bî[email protected]

Co-fondator @ Starcelerate

Page 17: Today Software Magazine N28/2014

17www.todaysoftmag.ro | nr. 28/octombrie, 2014

TODAY SOFTWARE MAGAZINE

Transylvania Java User GroupComunitate dedicată tehnologiilor Java.Website: www.transylvania-jug.orgData înfiinţării: 15.05.2008 / Nr. Membri: 589 / Nr. Evenimente: 47

Comunitatea TSMComunitate construită în jurul revistei Today Software Magazine.Website: www.facebook.com/todaysoftmag www.meetup.com/todaysoftmagData înfiinţării: 06.02.2012 /Nr. Membri: 1826/Nr. Evenimente: 24

Cluj Business AnalystsComunitate dedicată analizei de businessWebsite: www.meetup.com/Business-Analysts-ClujData înfiinţării: 10.07.2013 / Nr. Membri: 91 / Nr. Evenimente: 8

Cluj Mobile DevelopersComunitate dedicată tehnologiilor mobileWebsite: www.meetup.com/Cluj-Mobile-DevelopersData înfiinţării: 05.08.2011 / Nr. Membri: 260 / Nr. Evenimente: 16

The Cluj Napoca Agile Software Meetup GroupComunitate dedicată metodelor Agile de dezvoltare software.Website: www.agileworks.roData înfiinţării: 04.10.2010 / Nr. Membri: 433 / Nr. Evenimente: 91

Cluj Semantic WEB MeetupComunitate dedicată tehnologiilor semantice.Website: www.meetup.com/Cluj-Semantic-WEBData înfiinţării: 08.05.2010 / Nr. Membri: 191/ Nr. Evenimente: 28

Romanian Association for Better SoftwareComunitate dedicată oamenilor cu experiență din IT indiferent de tehnologie sau specializare.Website: www.rabs.roData înfiinţării: 10.02.2011 / Nr. Membri: 249/ Nr. Evenimente: 14

Tabăra de testareComunitate formată din testeri și alți profesioniști din industria IT care, în cadrul unor întâlniri informale lunare, împărtășesc din cunoștințele proprii și învață din experiențele profesionale ale celorlalți membri.Website: www.tabaradetestare.roData înfiinţării: 15.01.2012 / Nr. Membri: 1219/ Nr. Evenimente: 35

Toamna în IT vine cu un număr crescut de evenimente cu un public larg. Vă invităm să participați la Cluj IT Days 2014 și la conferința dedicată dezvoltatorilor de aplicații mobile MobOS și T3EE în Cluj. În București remarcăm DefCamp-ul la finalul lunii noiembrie.

Calendar Octombrie 21 (Cluj)Lansarea numărului 28 a Today Software Magazine www.todaysoftmag.ro

Octombrie 22 (Cluj)Digital Marketing Community Launchmeetup.com/DigitalMarketingCluj/events/213782162/

Octombrie 23 (Cluj)3rd BIG data/Data science Cluj-Napoca Meetupmeetup.com/Big-Data-Data-Science-Meetup-Cluj-Napoca/events/213544492/

Octombrie 24 (Cluj)Catalysts Coding Contest in Clujcodingcontest.catalysts.cc

Octombrie 30 (Cluj)TeCOMM tecomm.ro

Octombrie 31-1 Noiembrie (Cluj-Napoca)Conferința Typo 3 - T3EEwww.t3ee.org

Noiembrie 4 (București)The D Programming Language: Getting Startedeventbrite.com/e/the-d-programming-language-getting-started-tickets-8870803813

Noiembrie 20-21 (Cluj)MobOS Conferenceromobos.com

Noiembrie 22 (Cluj)OSOM – Open Source Open Mindosom.ro

Noiembrie 25-26 (Cluj)Cluj IT Days - recomandarea TSMitdays.ro

Noiembrie 28-29 (București)DefCamp 2014defcamp.ro

Comunităţi IT

comunități

Page 18: Today Software Magazine N28/2014

18 nr. 28/2014 | www.todaysoftmag.ro

programare

„OK... I’m sitting, working, waiting ” și hopa apare și mail-ul. Dubios, mai că-mi sună a schimb de experiență cu cei de la FedEx. Se pare ca angajații sunt cei care vor face livrări, în 24 de ore, dar fără dubă, în stil creativ cică. Sună a reality show deja și doar Donald Trump mai lipsește. Cum ar zice unii, o ardem creativ. Confuz deja și mult prea nerăbdător să aflu ce se întâmplă fac ce trebuia să fac de la început: întreb. Ce-am aflat l-a surprins destul de tare și pe scepticul din mine.

Pe scurt, aflu că FedEx Day înseamnă 24 de ore în care angajații pot lucra la ce vor ei, nu neapărat legat de munca de zi cu zi. Singura regulă e ca la sfârșitul celor 24 de ore să livreze un prototip funcțional a ceva, care poate fi orice fruct al imaginației lor și foarte surpinzător nici măcar nu trebuie să

fie legat de Betfair. Ok, dar unde-i duba și de ce FedEx Day? De ce nu Fan Curier Day? Cum mă prind mai greu mi se explică. De fapt, e vorba de o analogie cu firma FedEx care se mândrește că poate livra orice, ori-unde în lume în doar 24 de ore. Preluând analogia, dacă te înscrii la FedEx Day, trebuie să livrezi un produs, un serviciu nou în 24 de ore (practic peste noapte) și să demonstrezi colegilor că prototipul funcționează, cum zic programatorii să faci demo. Și cum sunt fair play colegii mei, îmi spun că nu au inventat ei roata.

Ideea de a organiza un FedEx Day a fost implementată pentru prima dată de com-pania australiană Atlassian (dacă vă place formatul wiki, Confluence e produsul lor). În decursul a 18 ediții de FedEx Day cei de la Atlassian au generat 550 de proiecte, dintre care 47 cu impact major asupra pro-priilor produse. Având aceste date în minte, nu e de mirare că acest concept de eveni-ment a devenit atât de popular în rândul companiilor de soft. Sub titlul de FedEx Day sau Hack Day, de-a lungul timpului, multe companii au implementat în maniera lor specifică acest concept. Printre ele se numără Google, Yahoo, Twitter, Dropbox, Flickr, Symantec, Spotify. De fapt Twitter,

Dacă treci pe la Betfair în luna octombrie sunt șanse foarte mari ca toată lumea să vorbească despre FedEx Day. Nu prea știi la ce să te aștepți. Ne comandăm ceva din State? O fi vreo livrare mult așteptată? Primim ceva cool? Dacă ești

și manager dă oarecum rău să te simți pe lângă subiect. Dar mă agit degeaba. Pe când mai că vedeam duba FedEx în fața Betfair-ului, începe să se facă lumină. Apar postere prin firmă. Un norișor pe care scrie “FedEx Day. 9-10 October” și ” Watch your Inbox”.

BUILD FOR FUN @ FedEx Day

concurs

Camelia [email protected]

Learning & Development Manager@ Betfair

Andreea [email protected]

Learning & Development Partner@ Betfair

Page 19: Today Software Magazine N28/2014

19www.todaysoftmag.ro | nr. 28/octombrie, 2014

TODAY SOFTWARE MAGAZINEprogramare

Dropbox si Spoty au extins cele 24 de ore la o săptămâna, hack week-urile lor fiind deja celebre.

Să vezi și să nu crezi. Tot nu pricep cum devine cineva creativ peste noapte și de ce-i așa “deșteaptă” ideea de FeDex day. Așa cum realitatea te lovește în față de multe ori, la fel a fost și răs-punsul pe care l-am primit. Ideile inovative nu au cum să apară din senin când mintea ta e ocupată cu sarcinile de zi cu zi și cu specificații despre ce anume trebuie să implementezi. La FedEx apar foarte multe idei geniale și inovatoare pentru că unde nu sunt reguli, orice e posibil.

Inovația nu înseamnă să structurăm un proces pentru a ajunge la un rezultat, înseamnă să lăsăm loc să gândim diferit, să privim problemele din alte unghiuri. Mult prea des, companiile ghidate de cele mai bune intenții angajează oameni geniali, cărora apoi, 100% din timp, le ține mintea ocupată cu proiectele care trebuie livrate. Dezavantajul e că nu mai ai timp pentru inovație; nu mai ai timp să încerci tehnologii noi, tool-uri, să explorezi mai în detaliu diverse idei. FedEx Day te invită să faci exact acest lucru. În timpul FedEx Day se suspendă proiectele de zi cu zi pentru 24 de ore și se creează un mediu liber și relaxat în care ideile sunt încurajate să apară. Fiecare angajat are posibilitatea să lucreze la ceva care îl preocupă de mult timp sau la ceva de care e fie pasionat, fie curios. E ca și cum ai fi CTO sau Product Director pentru o zi.

Fiind 24 de h, FedEx Day începe într-o zi de joi, la ora 15.00 și munca efectivă ține până vineri la 15.00. După 30 de minute, cât să-și împacheteze și livreze echipele prototipurile, e show time. Începe sesiunea de demo-uri. Fiecare echipă are 10 minute să-și prezinte prototipul în acțiune. Ideea genială e absolut necesară, dar ca să te numeri printre primele trei echipe care câștigă la FedEx Day, prototipul livrat în cele 24 h trebuie să fie funcțional. Ce se apreciază la FedEx Day? Sunt cel puțin trei aspecte: com-plexitatea tehnică livrată, utilitatea adusă clientului sau valoarea produsului inventat și elementul de inovație adus de prototipul creat.

Cum arată lucrurile la FedEX Day? În fiecare an lookul evenimentului se schimbă dar constantă e ideea de “Build For Fun”- adică, ia cea mai năstrușnică idee care îți vine în mine și transpune-o într-un prototip funcțional. Anul trecut clădirea arăta ca un șantier, cu schele, ciocane, mortar, un furnicar de oameni toți preocupați să construiască ceva. Anul ăsta cum intri în firmă e plin de nori pufoși, care iau diverse forme. E similar cu ideile care plutesc în aer; multe dintre ele pot fi geniale, depinde ce formă le dai și în ce direcție le conduci. În preajma FedEx Day, oriunde te uiți vezi grupuri, grupulețe care fac pla-nuri despre ce vor face la FedEx și ce nume de echipă să-și aleagă

(Betmen, NOcotopus, Brilliant Beavers, Promo Chefs etc.). Dacă e aproape 14.30 simți cum tremură clădirea și apar 200 de fețe la care le sclipesc ochii – primim tricourile cool, FedEx Day bran-ded. Unii le îmbracă imediat alții le împătură cu multă grijă să fie fără cusur pentru marele moment – sesiunea de demo. De la 15.00 încep ședințe de planning, stand up-uri, râsete și brusc toată lumea e pusă pe fapte; unii scriu cod, alții fac rost de resurse, alții testează, toată lumea e în priză. Vezi cum încet încet se întunecă și nu pleacă nimeni acasă. La 23.00 când par să se descarce bate-riile apare Red Bull-ul, ciocolata și alte preparate “sănătoase”. La ora 3.00 a.m. e încă lume în birou și deși nu-i ține nimeni acolo, totuși stau. A doua zi la micul dejun vezi cearcăne, dar adrenalina e în aer. În jurul prânzului tensiunea atinge cote tot mai ridi-cate. Ceva nu mai merge, nu mai terminăm, am stricat tot, ne-a expirat un certificat de securitate, toate legile lui Murphy sunt adevărate. La ora 15.00, ca la examen vezi că a expirat timpul ,dar tot mai ai de scris o frază; mai trebuie o linie de cod, un ultim test, ceva, un pic, prea târziu. Pe monitor apare un pop-up cu timpul a expirat, apucă-te de împachetat, așteptăm livrarea. Și dacă poți ignora asta nu poți ignora portavocea care sună în tot biroul și îți amintește ce e timpul să faci livrarea.

Livrările și demo-urile sunt un spectacol. N-ai loc să te miști. Vezi tot felul de obiecte cărate pe scări, pentru că nu încap în lift și fețe nerăbdătoare. Încep demo-urile. Întrebări, aplauze, râsete, ne tot uimesc colegii cu ideile lor șugubețe. E deja 20.00. Gata demo-urile. E timpul adevărului. Care sunt cele trei proiecte care câștigă? Cine decide? Participanții decid. Toată lumea e motivată să fie cât mai obiectivă pentru că n-ai voie să-ți evaluezi propriul proiect, doar celelalte proiecte prezentate. Scorul e strâns dar top 3 nu minte. Ce se câștigă la FedEx? Pe lângă experiența în sine

programare

Page 20: Today Software Magazine N28/2014

20 nr. 28/octombrie, 2014 | www.todaysoftmag.ro

BUILD FOR FUN @ FedEx Dayconcurs

și timpul valoros petrecut cu colegii, avem trei premii speciale. După sărbătorit urmează bine meritatul weekend. Ce e interesant însă e că luni, marți și mult timp după, lumea încă vorbește de FedEx Day și vezi entuziasmul cu care o fac.

Foarte fain tot, doar că tot nelămurit am rămas. Două lucruri

mă mai nelămuresc. Ce rămâne după FedEx Day astfel încât busi-nessul să fie motivat să piardă oarecum 1 zi de muncă pentru Build for Fun? și de ce e motivant FedEx-ul pentru angajați?

Mi se dau statistici. După cinci ediții de FedEx Day ne-am ales cu o grămadă de idei inovative care nu ar fi apărut dacă angajații ar fi trebuit să lucreze la sarcinile de zi cu zi. Chiar dacă FedEx Day înseamnă să faci orice vrei tu, de multe ori angajații aleg să exploreze o funcționalitate legată de proiectul la care lucrează în momentul respectiv. În felul acesta se acordă o șansă și acelor idei care păreau prea extravagante pentru a fi măcar testate și care în mod normal nu aveau nicio șansă să ajungă pe backlog. Cel puțin

două dintre ideile generate la FedEx Day au ajuns în producție și altele au demonstrat nivelul de complexitate tehnică a proiectelor care pot fi livrate de către echipe (cum ar fi un BlackJack Live Dealer dezvoltat în 24 h).

Cât despre ce-i face pe oameni să vrea să participe la FedEx, aici e cel puțin interesant. Lumea nu se înscrie pentru premiile în sine. Se înscriu pentru că pot lucra la ideea lor, se dezvoltă, învață ceva nou, ceva ce-i interesează și proiectul are semnificație pentru ei. Toate aspectele țin de motivația intrinsecă așa că nu e de mirare că FedEx Day funcționează.

Ce rămâne după FedEx Day? Angajații se simt bine, energizați și implicați, iar firma rămâne cu idei inovatoare și persoane moti-vate să le implementeze.

Doar atât. Întrebări, comentarii, cuvinte-nu mai am.

Page 21: Today Software Magazine N28/2014

21www.todaysoftmag.ro | nr. 28/octombrie, 2014

Industria software este o industrie creativă. Această declarație e destul de comună și se întâmplă uneori să fim chiar noi cei care o repetăm. Iar dacă nu o repetăm, cel puțin o acceptăm ca pe un adevăr evident chiar dacă nu ne gândim la ceea ce înseamnă cu

adevărat.

Putem începe cu un exercițiu. Întreabă orice profesionist IT căruia îi pasă de dez-voltarea lui profesională ce fel de mediu de lucru își dorește. Răspunsul va fi uneori foarte direct: mediu creativ. În alte cazuri vei auzi despre un mediu în care să se țină cont de ideile mele sau să am parte de multe pro-vocări și de proiecte variate. Toate comunică aceeași dorință. Persoanele care lucrează în IT caută un canal de exprimare iar prezența provocărilor și depășirea barierelor, reale sau imaginare, personale sau externe, sunt prin-cipalul nostru mijloc de exprimare.

La o analiză mai aprofundată vom con-stata însă ca percepția asupra creativității în industria IT este distorsionată. Atât progra-matorii cât și ceilalți profesioniști IT sunt creativi prin natura lor, dar realizează ara-reori acest lucru sau cum se aplică de fapt creativitatea în activitatea lor zilnică. Tema cea mai comună este cea a creativității ca domeniu al managerilor de produs și antre-prenorilor. Singura concluzie logică dacă urmărim această temă este că dacă suntem în căutarea unei căi de exprimare ar trebui să sărim cu toții în trenul inovației și să contri-buim cu tot felul de idei! Trebuie să mă întreb cine ar mai rezolva toate provocările tehnice dacă am face cu toții asta.

Această v iz iune l imitată asupra creativității, ca și atribut manifestat exclusiv prin idei de produs, este un prim pas către o percepție distorsionată. Dacă faci acest pas și îl urmezi cu alții poți ajunge foarte ușor pe un traseu de nemulțumire și neîmplinire.

Așa că hai sa dărâmăm niște mituri!

Creativitatea nu este InovațieCreative Jack este un profesionist IT care își

trăiește visul și are cel mai bun job pe care și l-ar fi putut dori vreodată. Lucrează într-unul din cele mai inovatoare medii din lume, pentru o companie care ține la angajații săi și îi încu-rajează mereu să gândească în afara tiparelor.

Jack își parchează mașina electrică mono-post în parcarea companiei și se îndreaptă spre clădirea principală. În holul de la intrare este întâmpinat de o pancartă mare suspendată deasupra recepției:

“Sometimes you find yourself in the middle of nowhere. And sometimes in the middle of nowhere you find yourself.”

Se oprește o secundă încercând să se regă-sească pe sine, apoi își continuă drumul. Trece pe lângă sala de conferință ”Spirit” unde, fiind luni, practicanții fac Yoga. Se oprește în Salonul Îndestulării (noi l-am numi bucătărie) unde își toarnă o cafea și schimbă câteva vorbe cu Anne, noua administratoare Mongo. Ajuns într-un final în biroul său Jack se tolănește pe fotoliul amorf și începe să se gândească la felul în care va schimba astăzi lumea.

Mitul mediului de startup drept cataliza-tor unic al creativității este foarte răspândit. El provine din confuzia creată de atotprezența Inovației și goana după aceasta. Mediul ideal prevede inspirație atârnată pe fiecare perete și este conceput în așa fel încât fiecare angajat să devină următorul Steve Jobs. Cum altfel să fii creativ dacă nu printr-un torent constant de idei sublime?

Nu e nimic rău într-un mediu de lucru mai excentric care să stimuleze acest gen de creativitate. De fapt trebuie să recunosc că mi-aș dori acum și la biroul meu o bucătărie

Creativitate Aplicată

diverse

Alexandru [email protected]

Director of Product Development@ Yardi România

Page 22: Today Software Magazine N28/2014

22 nr. 28/octombrie, 2014 | www.todaysoftmag.ro

numită Salonul Îndestulării. Dar este oare inovația încurajată de aceste locuri singu-rul fel de creativitate pe care îl găsim în IT? Este aceasta singura formă prin care putem să ne exprimăm?

În căutarea unui răspuns trebuie să ne reamintim că rolul nostru principal ca ingineri este de a rezolva probleme. Nu suntem cu toții manageri de produs sau antreprenori, dar nu suntem nici scriitori de cod, executanți de teste sau instalatori de pachete de sistem. Noi rezolvăm pro-bleme concrete prin aplicarea judicioasă a cunoștințelor și practicilor inginerești. Procesul prin care rezolvăm aceste pro-bleme este unul inerent creativ.

Hackerul care găsește găuri de secu-ritate este cu siguranță creativ. La fel și arhitectul software care proiectează un sis-tem elegant, ușor de întreținut și de extins. Poți să-ți înzecești performanța dacă partiționezi datele exact cum trebuie între sistemele de stocare pe care le folosești. Administratorul de sistem care tocmai a automatizat un proces care necesita ore de muncă manuală, a reușit acest lucru doar pentru că și-a amintit de acel pachet pe care l-a folosit pentru un alt proiect acum câțiva ani.

Deci da, software-ul este într-adevăr o industrie creativă. Ar trebui să îți pese de produsul pe care îl construiești sau întreții. Ar trebui să încerci să înțelegi problemele reale cu care te confrunți ca să poți veni cu soluții cât mai bune. Ar trebui să contribui la viziunea produsului dacă ai înclinații în acest sens, dar dacă nu încerci să te îndrepți conștient spre management de produs nu uita care îți sunt punctele forte. Cunoștințele tale sunt cele mai potrivite

pentru abordarea provocărilor tehnice, iar aceste provocări îți dau ample oportunități să fii creativ.

Inspirație DivinăHai să ne întoarcem pentru moment la

prietenul nostru creativ.

Mintea lui Jack galopează în timp ce se adâncește în fotoliu. Are nevoie de o idee, ceva care să scoată în evidență platforma de video sharing la care lucrează, să o facă să cucerească imaginația oamenilor. Cu ochii ațintiți către lampa cu lavă artificială, urmărind cum se formează și dezintegrează ciudatele forme bulbucate, Jack are un moment de claritate! Ideea lui ia naștere și acum știe exact ce are de făcut.

Acestui mit i-am căzut personal în capcană. Totul a pornit de la interesul meu moderat pentru artă. Fiind o persoană tehnică nu am experiență personală în creație și nici nu am mulți prieteni artiști. În consecință nu mi-am putut nicicum explica felul în care artiștii pot să creeze aceste lucruri pe care eu nu le-aș fi putut concepe niciodată. Singura explicația posi-bilă era că așa funcționează inspirația. Și totuși, ai încercat vreodată să te uiți la un perete încercând să găsești o soluție la o problemă? Nu prea funcționează, nu?

Deși pare diferită, problema lui Jack în căutarea acelei idei sublime pentru platforma de video sharing este de fapt foarte asemănătoare cu cea a unui pictor care încearcă să pună prima pensulă pe pânză sau a lui Anne administratoarea care încearcă să găsească o metodă efici-entă de sharding pentru infrastructura de Mongo. E vorba de acea primă acțiune care

paralizează scriitorii în aceeași măsură cu programatorii. De unde să încep? Ce să fac prima oară? De această problemă ne lovim invariabil, mai puțin în cazul unei sarcini de rutină pe care am mai făcut-o de nenu-mărate ori.

În Căutarea de CunoștințeȘi totuși cum funcționează? Păi,

inspirația provine mai degrabă din experiență, exercițiu, și găsirea unei atitu-dini potrivite decât dintr-un fulger divin de la Zeus. Trebuie să ne construim o fundație vastă de cunoștințe. Trebuie să ne expunem permanent la idei noi și să rămâ-nem deschiși. Trebuie să exersăm ceea ce am învățat în scenarii de rutină, astfel încât să putem să ne bazăm pe cunoștințele dobândite atunci când avem nevoie de ele în scenarii noi.

Iată cum poți ajunge la acea soluție de Mongo sharding fără priviri lungi către perete:

• Fii curios și citește articole și abor-dări interesante. Învață permanent pentru a avea acea fundație vastă pe care să poți construi.

• Când începi să te gândești la o pro-blemă, scanează-ți rapid memoria și caută niște abordări care au o șansă ori-cât de mică de a fi aplicabile. Fă rapid un test sau un proof of concept iar apoi ia-o de la capăt. Analizează rezultatul testului și adaugă informația la setul de cunoștințe.

• Schimbul de idei, așa numitul brain-storming, poate fi foarte util, dar numai în cazul în care fiecare participant a avut ocazia să se gândească la problema dată și își aduce propria contribuție. Altfel vom fixa împreună peretele într-un

Objective C

[email protected]

Yardi Romania

Creativitate Aplicatădiverse

Page 23: Today Software Magazine N28/2014

23www.todaysoftmag.ro | nr. 28/octombrie, 2014

TODAY SOFTWARE MAGAZINE

cadru de grup.

Puține probleme necesită o soluție complet nouă. Creativitatea este însă necesară și în combinarea de elemente existente într-un mod inovator sau a apli-cării unei soluții cunoscute într-un proiect particular. Acest fapt e valabil atât pentru programatori cât și pentru pictori, scriitori sau manageri de produs. Cu alte cuvinte, creativitatea nu cuprinde doar inventa-rea a ceva nou ci și aplicarea inovatoare a unei abordări într-un context specific. În ambele aplicații sunt necesare cunoștințe, experiență și o atitudine deschisă.

Soluții CreativeMintea unui profesionist IT este

reglată pentru a cuprinde sisteme, iar sis-temele sunt încadrate de reguli, stări și presupuneri. Această înclinație poate fi dezavantajoasă în tentativa de a fi creativi.

Spațiile problemă în care operăm conțin adesea mai puțin limite și constrân-geri decât am crede la prima vedere. Se poate întâmpla să confundăm presupuneri cu limite și constrângeri imutabile. Uneori e greu să identificăm aceste false limite dar tocmai această capacitate duce la soluții creative. Un profesionist IT care pune pre-supunerile sub semnul întrebării poate găsi soluții inovatoare pe care alții le-ar fi ratat complet.

Anne lucrează frenetic pentru a găsi bug-ul de stocare ce se manifestă în fiecare săptămână cu regularitate. Nu reușește nicicum să-i dea de capăt. După nenumă-rate ore de debugging în proceduri stocate, găsește cauza în cel mai neașteptat loc cu putință. Trecând pe lângă camera servere-lor, Anne vede o persoană care spală geamul din ușă. În spatele său, mătura se sprijină de router-ul principal.

”Auzi Bob”, întreabă Anne, ”cât de des vii pe aici să cureți geamurile?”

”Păi, în fiecare vineri!” explică Bob cu mândrie. ”Nu ratez nici o săptămână.”

Presupunerile vin în multe forme și depistarea lor nu e deloc ușoară. Mă uit în locul potrivit? Încerc oare să rezolv problema reală? Totul poate fi chestionat, de la cerințe la resurse, de la infrastruc-tură la orice altă variabilă ”imutabilă”. Da, e posibil ca managerul tău să-ți fi zis acum 3 luni că nu există nici cea mai mică posibilitate de a adăuga un nou membru echipei, dar ar fi bine să-i spui și ei dacă

între timp ai obținut informații care îți confirmă că un DBA ar reduce la jumătate timpul de livrare al proiectului. S-ar putea își schimbe poziția.

Cele Două HimerePrima creatură mitologică este mediul

de startup inovator, unde inspirația atârna pe fiecare perete. Aceasta este Mecca în special a celor care cred că ideile de produs sunt limita creativității în IT. Alții reușesc să depășească această iluzie și caută să se exprime prin soluții la probleme tehnice, activitate pentru care au atât înclinație cât și cunoștințe. Dar și aici îi pândește o capcană.

A doua himeră este falsa diversitate. Mulți programatori își doresc o diversi-tate cât mai mare de proiecte și tehnologii. Îndrăznesc să afirm că această dorință este adesea înșelătoare. Nu contest că expune-rea de acest fel este utilă în mai multe etape din dezvoltarea profesională, dar haideți să explorăm motivația. Oamenii caută aceste condiții pentru că își doresc să aibă oportunități de a învăța. Aș argumenta că diversitatea de probleme de rezolvat este cel puțin la fel de importantă ca și diversi-tatea de proiecte și tehnologii. Fiecare este importantă din alte motive, dar trebuie să evităm capcana falsei percepții că o mul-titudine de proiecte în tehnologii diferite ne oferă automat oportunități de învățare și creștere.

Un Profesionist IT Creativ”Am nimerit-o!” strigă Jack năvălind

din biroul său.O ia la fugă spre biroul CEO-ului cu

respirația sacadată de surescitare. Abia poate să își suprime entuziasmul când sare în biroul din colț, imitație de junglă tropicală.

”Johnny, am nimerit-o! Știu exact ce va duce VCShare pe locul 1! Avem nevoie de un software de recunoaștere facială ca să detectăm toate fețele din video-uri și să le înlocuim cu fețe de pisici. Dacă facem asta ne va exploda KPI-ul fundamental de medie-pisici-per-video!”

Creative Jack e un tip ok și ideea lui cu pisici chiar s-ar putea să funcționeze. Aș vrea totuși să propun o alternativă.

Haideți să fim creativi pragmatici. Hai să nu gonim după cele două himere și să ne amintim că inovația nu este limita creativității. Avem nenumărate feluri de a învăța și de a ne exprima în aria noas-tră de expertiză. Creativitatea nu vine din intervenție divină; provine mai degrabă din curiozitate, cunoștințe și capacitatea de

a chestiona reguli și presupuneri. De fapt – și chiar nu există un mod mai blând de a spune aceasta – provine din tine și din cât de mult efort ești dispus să depui pentru munca ta.

Un ultim gând în încheiere. Deși crea-tivitatea este o calitate importantă pentru orice profesionist IT, ea nu este nici pe departe singura. E nevoie de perseverență, răbdare, capacități foarte bune de comuni-care și o etică bună de lucru printre multe altele. Nu dispera dacă descoperi că nu ești extraordinar de creativ. Ca și orice altceva, creativitatea poate fi exersată și învățată, dar mai important este că s-ar putea să îți descoperi alte puncte forte care o compen-sează pe deplin.

Page 24: Today Software Magazine N28/2014

24 nr. 28/octombrie, 2014 | www.todaysoftmag.ro

Recenzie pentru “Haskell Data Analysis Cookbook”

Am experimentat în Haskell diverse exerciții din curiozitate și în scop educațional. Mă consider un statistician de modă veche, programator de R și uneori de Python. Sunt interesat de statistică și analiză de date, de concepte și paradigme noi precum NoSQL, Big Data, MapReduce sau programare funcțională.

Aviz cititorilor: aceasta nu este o carte pentru introducere în Haskell sau în programare funcțională ci mai degrabă autorul pornește de la premiza că citito-rul este familiarizat cu sintaxa precum și cu sistemul de tipuri din Haskell - diferit în mod considerabil față de alte limbaje de programare. În carte sunt utilizate în mod frecvent concepte de programare funcțională precum monada sau puritate.

Modul de prezentare folosit este cel al unei colecții de exemple frumos organizate. Se pot regăsi rețete succinte însoțite de secțiuni de cod destinate în mare parte rezolvării unor probleme de analiză și prelucrare de date, dar cu multe porțiuni dedicate în general programa-torilor experimentați. Cartea acoperă o paletă foarte largă de topicuri de progra-mare și de analiză de date. În conținutul ei sunt trecute în revistă o serie largă de concepte și tehnici pe care ar trebui să le stăpânească un analist “complet”. Totuși nu se reușește acoperirea în profunzime a acestor topicuri, unele fiind tratate la nive-lul “se poate și în Haskell, iar aceasta este doar o introducere”.

Ce ne poate oferi Haskell?Din punct de vedere al interactivității

cu datele ( read-evaluate-print loop), GHCi din Haskell este comparabil cu iPython sau cu REPL pentru Clojure, dar foarte departe de ce oferă RStudio pentru R, sau mediul Matlab. Într-o activitate de analiză explo-ratorie, interactivitatea are o importanță deosebită. Încercând exercițiile din carte, am utilizat cu dificultate Haskell pentru investigarea rapidă a surselor de date și a structurii lor. Un analist își dorește în general o interactivitate rapidă cu datele, o inspecție rapidă a acestora sau generare de grafice fără prea mult efort de programare. În Clojure, un alt limbaj funcțional cu o masă critică de utilizatori există Incanter, o platformă destinată analizei statistice și graficelor. Din câte știu până acum nu există ceva similar pentru Haskell și aceasta îl poate face să fie a doua opțiune pentru un analist. Faptul că Haskell nu oferă încă această posibilitate îl plasează ca o opțiune secundară pentru un ana-list. Evident că în această concluzie sunt influențat de experiența mea cu R, Python, sau Matlab.

În altă ordine, când îmi pun pălăria

de programator statistic, care dezvoltă aplicații software centrate pe date, încep să apreciez tot mai mult acest limbaj. Pentru un programator, chiar și în cazul unui pro-totip sau a unei aplicații de dimensiuni mici, dar care utilizează surse de date cu dimensiuni considerabile, dispersate sau cu o structură complexă (ex. NoSQL, Big Data) elementele de paralelism și concu-rentă ale limbajului Haskell îl fac foarte apreciat. Haskell este pur funcțional (funcțiile sunt valori, iar valorile nu se schimbă), “lazy & statically typed”.

Cartea de față reușește să ilustreze foarte bine toate aceste aspecte ale lim-bajului Haskell. Se regăsesc explicații din context, cu exemple despre importanța acestor elemente ale limbajului. Aceste modele pot folositoare unui dezvoltator care dorește să construiască software de analiză de date.

Sunt câteva diferențe ușoare între codul din carte și codul descărcat de pe GitHub. Probabil se datorează faptului că fișierele de cod sunt frecvent actualizate în GitHub. Am folosit codul gata scris și am făcut mici modificări pentru a testa pe fișierele proprii. În general lucrurile au

programareprogramare

Young spiritMature organizationA shared vision

Join our journey!

www.fortech.ro

Page 25: Today Software Magazine N28/2014

25www.todaysoftmag.ro | nr. 28/octombrie, 2014

TODAY SOFTWARE MAGAZINEprogramare programare

funcționat bine. Am avut mici probleme la instalarea unor librării de Haskell. Acest lucru ține mai mult de experiența mea pe parcursul utilizării cărții și e mai puțin legată de conținutul cărții în sine.

Să trecem la fapteParcurgând exemplele am resimțit o

ușoară nemulțumire când am remarcat că nu am un echivalent pentru “data.frame” din R sau Python. În Python aceasta este disponibilă cu ajutorul librăriei “pandas”, iar în R este structură primară/nativă, sub forma unui tabel bidimensional în care fie-care coloană conține caracteristici ale unei variabile. Acest tip de date conferă putere de prelucrare a variabilelor categoriale sau nominale, precum și un mod mai intuitiv de utilizare a surselor de date în analiză. Considerând ponderea de matematicieni și cercetători din comunitatea Haskell pre-cum și ritmul de dezvoltare, probabil vom vedea în curând librării adresate acestui aspect.

În cele ce urmează voi descrie aspectele care mi-au plăcut mai mult, dar și minusu-rile legate de diferite capitole sau teme din carte, așa cum le-am perceput eu.

Cu bune și cu rele Cartea începe cu un capitol dedicat

preluării de date - operații I/O. Puritatea este unul din punctele forte în Haskell atunci când este comparat cu alte lim-baje de programare. Când vine vorba de puritate, operațiile I/O sunt un fel de “ten-donul lui Ahile” pentru Haskell. Autorul evită să se blocheze într-un discurs teo-retic legat în jurul valorii conceptului de puritate în Haskell. Nishant Shukla începe cartea în mod pragmatic, cu un subiect foarte important pentru orice analist sau programator - input de date - preluare de informație din mediul extern. În cadrul capitolului sunt prezentate exemple de preluare de date în diferite formate: CSV, JSON sau XML. Mai mult autorul oferă exemple cu date preluate prin API, captu-rate din pagina web, sau citite din baza de date nerelațională MongoDB. Rețetele pre-zentate sunt utile și conțin exemple pentru o serie largă de modalități de preluare a datelor.

În capitolul 2 denumit generic “Integritate și Inspecție” sunt tratate mai multe tipuri distincte de probleme din analiză de date. În primul rând sunt rețete pentru curățarea datelor (trimming, par-sing), apoi sunt rețete pentru agregare sau raportare de date (tabele de frecvență) și în al treilea rând sunt secțiuni dedicate

similarității în date (distanțe, corelații). A c e s t e p r o b l e m e ocupă un rol central în analiză de date și consider că era nece-sară acordarea unei mai mari importanțe, e ventua l deta l i ate în capitol separate. Curățarea și agregarea datelor ocupă probabil peste 80% din acti-vitatea unui analist. Exemplele arată modul în care sunt abordate astfel de probleme fără utilizarea unor librării specializate ci doar folosind cod nativ. Considerând c o n s t r u c ț i a u n e i ap l i c aț i i s o f t w are această abordare este foarte bună, iar exem-plele sunt foarte utile. În general un analist dorește să investească un efort redus pen-tru curățarea datelor, iar librăriile destinate acestui scop ar fi foarte apreciate.

Un analist este cel mai adesea intere-sat de valoarea informației din date și nu se concentrează neapărat pe calitatea sau eleganța codului. M-ar fi ajutat să văd în exemple cum se generează un tabel cu procente pe coloane sau media pentru categorii. Deși exemplele sunt simple și concise, iar codul arată foarte ordonat, totuși când se vorbește de un raport sau tabel, aș vrea să pot rula rapid și anumite teste statistice precum t-test sau teste non-parametrice.

În continuare conceptele de simila-ritate, distanțe și corelație sunt expuse pe scurt. Sintaxa Haskell ajută cititorul să vadă formulele statistice într-un mod foarte aproape de exprimarea lor matema-tică. Acest aspect mi-a plăcut foarte mult în exemplele din carte, făcând codul mai clar și mai ușor de citit.

După capitolul 2 am sărit direct la capitolele 7-8 - “Statistică și Analiză” și “Clustering”, mai relevante pentru munca mea de statistician. Aici sunt prezentate o serie de lucruri foarte interesante cum ar fi analiza cluster cu lexeme, construirea în câteva linii a unor n-grame din text, sau aproximarea unei regresii pătratice. Totuși nici în aceste două capitole autorul nu intră în profunzimea topicurilor și nici nu ilustrează exerciții apropiate de cazuri

mai realiste. Evident că pentru un spectru așa larg de probleme este greu de obținut acest lucru. Mi s-ar fi părut mai util ca în aceste capitole să se utilizeze seturi de date mai consistente, cu mai mult de 3-5 înregistrări. Pentru mine ar fi valoros să văd folosite seturi de date clasice cum ar fi “Iris” sau “German Credit” pentru ilustra-rea acestor exemple de tip “Hello world!” de analiză multivariată. Aceste seturi sunt în mod frecvent utilizate în cărți sau tuto-riale pentru alte limbaje de programare, în vederea rezolvării unor probleme de ana-liză multivariată, sau prelucrare de date.

Capitolul 9 tratează probleme de concurență și paralelism. Explicația conceptelor și a modului de utilizare a lim-bajului mi s-a părut foarte clară. Autorul nu intră în detalii, dar pentru mine tre-cerea în revistă a conceptelor însoțita de exemple cu cod a fost foarte utilă.

La fel ca și capitolul anterior, capitolul 10 - “Real Time Data” tratează mai mult probleme inginerești de software și mai puțin de analiză de date: preluarea date-lor din Twiter sau canale IRC, precum și comunicarea în timp real prin socket-uri.

Radu Marius [email protected]

Business & Data Analyst@Fortech

Page 26: Today Software Magazine N28/2014

26 nr. 28/2014 | www.todaysoftmag.ro

programare

vNext: Viitoarea direcție

a aplicațiilor .NET

noi direcții a framework-ului său binecu-noscut .NET, direcție care poartă numele generic vNext.

Ce este vNext?În cadrul conferinței TechEd de anul

acesta, Microsoft a prezentat viitoarea versiune a framework-ului .NET intitulată vNext, care a evoluat ca o soluție firească înspre a acomoda toate cerințele actuale ale dezvoltatorilor. Mai exact, se dorește ca toate schimbările să aducă modul de reali-zare al aplicațiilor la un alt nivel.

vNext însumează o serie de modi-ficări aduse platformei .NET. Acestea implică: modularizare ridicată, tranziție ușoară a aplicațiilor către cloud, facilita-rea contribuțiilor la framework prin cod open source, un ciclu rapid de dezvoltare, libera alegere a tool-urilor de progra-mare, și nu în ultimul rând libera alegere a platformei pe care pot rula aplicațiile. În acest context, întrebările pe care mulți și le adresează sunt cum se concretizează mai exact vNext în cadrul procesului de dez-voltare și ce facilități aduce acesta la nivelul tool-urilor?

Modularizarea completă a referințelorUna dintre modificările majore aduse

platformei .NET este modularizarea totală. Până acum, era necesară instalarea globală

a framework-ului .NET pe mașina pe care trebuiau rulate aplicațiile. Aceasta presu-pune alocarea unui spațiu mărit pe disc. De asemenea, apar probleme în cazul în care se dorește rularea unei aplicații cu o altă versiune de .NET decât cea existentă, aceasta presupunând schimbarea versi-unii globale a framework-ului pe mașina respectivă, lucru care poate afecta toate programele existente. Toate acestea duc la un timp sporit pentru setarea aplicațiilor pe un anumit mediu.

v N e x t a d u c e o r g a n i z a r e a funcționalităților sub forma de pachete. Așadar, toate dependențele unei aplicații ( inclusiv f ramework-u l , C ommon Language Runtime) sunt constituite ca pachete Nuget care se lansează simultan cu aplicația. De asemenea, pentru a opti-miza resursele aplicațiilor cloud, Microsoft a decis separarea framework-ului în două variante: una pentru soluțiile on-pre-mise, respectiv una pentru aplicații cloud. Varianta vNext optimizată pentru cloud conține doar acele resurse care sunt strict necesare pentru desfășurarea unei aplicații în cloud și nimic altceva. Așadar, această variantă a framework-ului nu conține referințele necesare pentru Windows Forms sau Windows Presentat ion Foundation.

Modularizarea framework-ului se

În ultimii ani s-au putut observa schimbări majore ale principiilor care stau la baza dezvoltării de software: un ritm rapid al inovației și al lansării de aplicații, accentul pus pe strategii de dezvoltare pentru multiple dispozitive, respectiv colaborarea

din cadrul comunităților de dezvoltatori bazată tot mai mult pe open source. La acestea se adaugă și nevoia dezvoltatorilor de a integra noi tehnologii în aplicatiile mai vechi. Microsoft a încercat să găsească un răspuns la toate aceste cerințe prin stabilirea unei

programare

Claudiu „[email protected]

Software Developer@ Endava

Page 27: Today Software Magazine N28/2014

27www.todaysoftmag.ro | nr. 28/octombrie, 2014

TODAY SOFTWARE MAGAZINEprogramare

reflectă în următoarea versiune a IDE-ului Visual Studio care aduce un nou mod de structurare a soluțiilor. S-a renunțat la lis-tarea referințelor în forma lineară; acum, acestea sunt dispuse în formă arborescentă astfel încât să ofere o imagine mult mai clară asupra dependențelor, fie ele pachete Nuget sau librării de clase. De asemenea, dacă optăm pentru o aplicație web, primul lucru care se poate observa în IDE este absența fișierului Web.config. Pe de altă parte, s-a introdus un nou fișier denumit project.json care este prezent pentru toate tipurile de proiecte. Fișierul project.json joaca un rol esențial în configurarea aplicațiilor vNext. Acesta conține lista de dependențe ale proiectului, definirea de comenzi custom, respectiv setări pentru diverse configurații. Visual Studio oferă suport Intellisense pentru editarea acestui fișier și pentru căutarea referințelor. De asemenea, dependențele specificate în fișier se sincronizează în timp real cu arborele de referințe vizibil în Solution Explorer.

“dependencies”: { “EntityFramework.SqlServer”: “7.0.0”, “Microsoft.AspNet.Mvc”: “6.0.0”, “Microsoft.AspNet.Identity.EntityFramework”: “3.0.0”, “Microsoft.AspNet.Identity.Authentication”: “3.0.0”, “Microsoft.AspNet.Security.Cookies”: “1.0.0”, “Microsoft.AspNet.Server.IIS”: “1.0.0-*”, “Microsoft.AspNet.Server.WebListener”: “1.0.0-*”, “Microsoft.AspNet.StaticFiles”: “1.0.0”, “Microsoft.Framework.ConfigurationModel.Json”: “1.0.0”, “Microsoft.VisualStudio.Web.BrowserLink.Loader”: “14.0-*”, “UserManagement.BusinessLogic”: “” },

“commands”: { “web”: “Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000” },

“configurations”: { “net451” : { }, “k10” : { } }

Fișierul json reprezintă o resursă extrem de puternică. Dezvoltatorul poate opta fie pentru o anumită versiune a unui pachet, fie pentru ultima versiune. Acest lucru se dovedește foarte util, deoarece se pot încărca în proiect cele mai noi versiuni ale

pachetelor care conțin de multe ori fixuri pentru buguri din versiunile precedente. Mai mult decât atât, dacă se depistează bug-uri în cadrul unor pachete open source, acestea pot fi clonate pe mașina locală, fixate, pentru ca apoi referințele lor din pachet să poată fi actualizate pentru a indica noua versiune ce conține fixurile.

Pe lângă specificarea dependențelor, fișierul project.json poate fi folosit pentru reconstituirea completă a soluției în Visual Studio, în cazul ștergerii accidentale a fișierelor .proj din aplicație.

Control sporit prin Dependency InjectionViitoarea direcție a framework-ului .NET aduce în prim plan

conceptul de Dependency Injection, care devine un mecanism built in de setare a aplicațiilor. Aceasta configurare se realizează în clasa Startup, în cadrul metodei Configure, ilustrată mai jos: public void Configure(IBuilder app){ // Setup configuration sources var configuration = new Configuration(); configuration.AddJsonFile(“config.json”); configuration.AddEnvironmentVariables(); string connString = configuration.Get( “Data:DefaultConnection:ConnectionString”); // Set up application services app.UseServices(services => { // Add EF services to the services container services.AddEntityFramework().AddSqlServer(); // Configure DbContext services.SetupOptions<DbContextOptions>(options => { options.UseSqlServer(configuration.Get( “Data:DefaultConnection:ConnectionString”)); }); //Add Identity services to the services container services.AddIdentity<ApplicationUser>() .AddEntityFramework<ApplicationUser, ApplicationDbContext>().AddHttpSignIn(); // Add MVC services to the services container services.AddMvc(); });

// Add MVC to the request pipeline app.UseMvc(routes => {

programare

Page 28: Today Software Magazine N28/2014

28 nr. 28/octombrie, 2014 | www.todaysoftmag.ro

programare

routes.MapRoute( name: “default”, template: “{control-ler}/{action}/{id?}”, defaults: new { controller = “Home”, action = “Index” });

routes.MapRoute( name: “api”, template: “{control-ler}/{id?}”); }); }

Așa cum se poate observa, se oferă un control sporit și se permite setarea expli-cită doar a funcționalităților necesare. Este foarte important ca serviciile folosite să fie înregistrate în fișierul de configurare json. În secțiunea precedentă s-a menționat lipsa fișierului Web.config din aplicațiile web. Aceasta se datorează faptului că developer-ul are posibilitatea de a alege propriul mod de specificare a configurației: prin fișiere xml, json sau ini. Bineînțeles, acest lucru se realizează tot în cadrul metodei Configure, prin setarea fișierului ales ca referință în cadrul obiectului configuration.

Tot în această metodă, se specifică dacă se dorește includerea Entity Framework sau MVC în proiect, de exemplu. Aceasta se face prin apelarea metodelor de forma AddEntityFramework sau AddMvc. Mai mult decât atât, se pot seta anumiți para-metri ale funcționalităților incluse (prin metodele de forma UseEntityFramework sau UseMvc), cum ar fi configurarea rute-lor în MVC.

Cu toate că există multe mecanisme 3rd party pentru dependency injection în .NET (Autofac, NInject), se oferă de acum și suport built in pentru aceasta, ceea ce permite un control mult mai granular

al serviciilor foloste în cadrul aplicației. În cazul în care se dorește folosirea unui container 3rd party pentru Dependency Injection, se poate realiza asta prin speci-ficarea dependenței în project.json urmată de setarea explicită a parametrilor în metoda Configure.

Rapiditate și performanțăUn alt avantaj important care este

inclus în aplicațiile vNext și nu numai este compilarea dinamică. Noua platforma de compilatoare .NET cunoscută sub numele Roslyn, oferă un API public open-source. Având la îndemână API-urile compilatoa-relor .NET, dezvoltatorii pot crea de acum mai ușor aplicații pentru analiza codului, diagnosticări customizate inclusiv versiuni optimizate de compilatoare.

Din moment ce are loc în memoria sistemului și nu presupune rescrierea assembly-urilor pe disc, compilarea dina-mică aduce un spor de performanță execuției unui program. Așadar, odată ce este pornit procesul aplicației, se poate edita codul sursă și doar prin simpla sa salvare, putem vedea modificările făcute în timp real. De remarcat este faptul că nu e necesar pasul de rebuild al programului, care necesită timp și resurse, ci doar sal-varea fișierelor modificate. De exemplu, cei care creează o aplicație web trebuie doar să editeze codul sursă și să tasteze F5 în browser pentru a-și vedea schimbările propagate. Aceasta duce la un ciclu mult mai rapid al implementării aplicațiilor și al fixărilor de defecte, mărind astfel produc-tivitatea tuturor dezvoltatorilor.

ConcluziiInovațiile aduse odată cu vNext nu

se opresc doar aici. Printre alte noutăți se numără unificarea Web Pages, MVC și Web API într-un singur model, sau suportul îmbunătățit pentru Mono pentru portarea aplicațiilor pe alte platforme. Prin toată această modularizare menționată mai sus și prin controlul sporit, se dorește ca deploierea și mentenanța aplicațiilor să se realizeze mult mai ușor pe orice mediu. Aplicațiile vor putea fi rulate inclusiv de pe mediile portabile cum sunt stickurile de memorie. Mai mult decât atât, aceeași aplicație va putea fi rulată simultan pe ver-siuni diferite ale framework-ului.

Nu în ultimul rând, vNext marchează intrarea framework-ului .NET într-o noua eră, una care permite libertatea deplină a dezvoltatorilor de a-și alege propriile tool-uri și sisteme de operare. Fiind open-source, toată comunitatea are mereu acces la ultimele funcționalități ale vNext, iar dezvoltarea acestuia se realizează printr-un proces de feedback continuu. Viitoarea ver-siune a framework-ului .NET promite că va revoluționa procesul de implementare, iar nouă nu ne rămâne decât să așteptam lansarea sa oficială pentru a explora toate facilitățile oferite de acesta.

vNext: Viitoarea direcție a aplicațiilor .NET

Page 29: Today Software Magazine N28/2014

29www.todaysoftmag.ro | nr. 28/octombrie, 2014

Http a apărut în 1999, dar cererea în continuă creștere a aplicațiilor web moderne pentru servere push și un protocol de comunicare mai eficient a dus la definirea protocolului Websocket în 2011.

Întrebările puse la Conferința Java 2014 în Cluj au fost simptomatice pentru noile tehnologii:

Cine a auzit de Websockets? Aproape toți dintre cei aproximativ 250 de participanți.Cine a folosit deja Websockets?Numai o mână de oameni, în jur de 10 – 15. În final, cine a utilizat Websockets într-un pro-iect comercial?După cum era de așteptat, nimeni nu a ridicat mâna.

Acest articol promovează Websockets și descrie în linii generale cum să le folosești și motivele pentru care ar trebui să le folosești.

Securitatea Websocket este un subiect important, dar nu poate fi acoperit în acest articol. Vedeți Linkuri utile pentru mai multe informații.

Cum se folosesc Websockets?Implementările Websocket partajează

o definiție de interfață comună între server, client și chiar între limbajele de programare. Următoarele exemple de cod vor implementa un exemplu elementar de dialog prin conec-tarea unui client Java și unul Javascript la un server Java.

Utilizați următoarea funcție expert în proiectele voastre pentru server și client Java pentru a include API JSR-356 pentru Java Websockets:

<dependency> <groupId>javax.websocket</groupId> <artifactId>javax.websocket-api</artifactId> <version>1.1</version></dependency>

Server Java: Adnotat ServerEndpointMai întâi creăm serverul utilizând

ServerEndpoint adnotat, definit în JSR-356. Acolo mai există și o specificație

pentru crearea programatică a punctului final (endpoint), dar nu ne vom ocupa de aceasta în acest articol.

Mai întâi codul, apoi explicațiile mai jos:

@ServerEndpoint(value = “/service”)public class ChatServerEndpoint { private static final Set<ChatServerEndpoint> connections = new CopyOnWriteArray-Set<>();

private Session session;

@OnOpen public void start(Session ses-sion) { this.session = session; connections.add(this); }}

Proprietatea valoare a ServerEndpoint definește calea pe care acest endpoint o recep-tează. URL-ul pentru conectarea la acest endpoint este: ws://<host>:<port>/<webapp>/<value property>.

Adnotaț ia @OnOp en marchează metoda start care va fi apelată atunci când se conectează un client. Ar trebui să faceți toată inițializarea care este necesară. În exemplul dialogului, sesiunea clientului conectat este memorată în setul de conexiuni, pentru utilizare ulterioară în interiorul metodei de difuzare.

Ce se întâmplă dacă un client se deconectează? Definiți o metodă, adnotați-o cu adnotația @OnClose și aceasta va fi apelată ori de câte ori un client se deconectează, indiferent de cauză:

@OnClosepublic void end() { connections.remove(this);

}

În acest exemplu simplu de dialog, cli-entul deconectat este înlăturat din setul de conexiuni.

Nucleul oricărei aplicații antrenate de date, care implementează Websockets, este trimiterea și primirea de date. Soluția cea mai elementară pentru primirea de

Websockets – http pe steroizi

programare

Philip Peterhansl [email protected]

IT Consultant Automotive@ msg systems ag

Page 30: Today Software Magazine N28/2014

30 nr. 28/octombrie, 2014 | www.todaysoftmag.ro

Websockets – http pe steroizi

mesaje într-un JSR Endpoint este adnotarea unei metode cu @OnMessage și următoarea semnătură:

@OnMessagepublic void incoming(String message) { broadcast(message);}

Există mai multe moduri sofisticate de a primi (și a trimite) mesaje utilizând codoare și decodoare cu mesaje text și binare, dar nu ne vom ocupa de ele în acest articol. Căutați în API JSR-356 mai multe informații.

Trimiterea de mesaje se face prin sesiunea clientului care primește. Metoda broadcast trece prin fiecare client conectat din setul de conexiuni și trimite mesajul utilizând BasicRemote:

private static void broadcast(String msg) { for (ChatAnnotation client : connections) { try { synchronized (client) { client.session.getBasicRemote().sendText(msg); } } catch (IOException e) { connections.remove(client); try { client.session.close(); } catch (IOException e1) { // Ignore } } }}

BasicRemote obținut prin metoda getBasicRemote() din sesiunea clientului trimite mesajul în modul blocare. Există o implementare non-blocare, numită AsyncRemote. Aceasta este obținută prin folosirea metodei getAsyncRemote() a sesiunii clientului.

Acum avem un server care poate primi mesaje de la orice client și le poate trimite mai departe către toți clienții conectați. Haideți să ne uităm la implementarea clientului Java.

Client JavaPentru crearea unui client Websocket în Java, un

ClientEndpoint trebuie să fie definit într-un mod similar cu ServerEndpoint:

@ClientEndpointpublic class RemoteWebsocketClient { private Session session;

@OnOpen public void onOpen(Session session) { this.session = session; } @OnMessage public void onMessage(String message) { System.out.println(message); //TODO: output message in a chat window } @OnClose public void onClose(Session session, CloseReason reason) { } }

În acest exemplu simplu de dialog, noi trebuie doar să imple-mentăm metoda adnotată @OnMessage. Metoda numai indică mesajul primit pe consolă.

Veți avea nevoie de o implementare JSR-356 pe partea cli-ent, deoarece nu există nicio implementare cuprinsă în Java JRE. Implementarea standard este Project Tyrus și este utilizată în

acest exemplu.Adăugați următoarele funcții la POM al proiectului client al

vostru pentru a utiliza Tyrus în modul autonom:

<dependency> <groupId>org.glassfish.tyrus</groupId> <artifactId>tyrus-server</artifactId> <version>1.0</version></dependency>

<dependency> <groupId>org.glassfish.tyrus</groupId> <artifactId>tyrus-client</artifactId> <version>1.0</version></dependency>

<dependency> <groupId>org.glassfish.tyrus</groupId> <artifactId>tyrus-container-grizzly</artifactId> <version>1.0</version></dependency>

Să conectăm clientul la server. Este foarte ușor, prin apelarea metodei connectToServer din ClientManager. Vezi sursa com-pletă pentru ChatClient:

public class ChatClient { private ClientManager manager;

public void connect(URI uri) { this.manager = ClientManager.createClient();

programare

Page 31: Today Software Magazine N28/2014

31www.todaysoftmag.ro | nr. 28/octombrie, 2014

TODAY SOFTWARE MAGAZINE

try { manager.connectToServer(ChatClientEndpoint.class, uri); } catch (DeploymentException | IOException e) { System.exit(-1); } }

public void run() { String msg = System.in.readLine(); while (!””.equals(msg)) { manager.getSession().getBasicRemote().send(msg); msg = System.readLine(); } }

public void main(String[] args) { ChatClient cc = new ChatClient(); cc.connect(URI.create(“ws://localhost:8080/chat/service”)); cc.run(); }}

Clientul de dialog se conectează la server prin apelarea con-nectToServer, furnizând o clasă de implementare ClientEndpoint și un URL la care să te conectezi. Bucla principală așteaptă ca input-ul de la utilizator să fie trimis clientului. Operarea mesaje-lor este realizată de către ChatClientEndpoint.

JavascriptCodul pentru un client Websocket Javascript este aproape

identic cu Java ClientEndpoint. Conexiunea este realizată într-un mod specific browser-ului, căci Mozilla Firefox are o implemen-tare individuală numită MozWebsocket în loc de Websocket standard:

var connect = function(url) { if (‘WebSocket’ in window) { socket = new WebSocket(url); } else if (‘MozWebSocket’ in window) { socket = new MozWebSocket(url); } };

Operarea mesajelor are loc în interiorul metodei socket.onmessage, care ar trebui să fie suprareglată. Pentru afișarea mesajelor dialog, vom crea un nou paragraf și îl vom atașa unei părți div din pagina html afișată.

socket.onmessage = function(msg) { var log = document.getElementById(‘log’); var p = document.createElement(‘p’); p.style.wordWrap = ‘break-word’; p.innerHTML = msg.data; log.appendChild(p);}

Trimiterea se realizează prin utilizarea metodei de trimitere din socket:

send: function(msg) { socket.send(msg);}

De ce să utilizăm websockets?Specificația Websocket abordează problemele întâlnite de

aplicațiile web moderne care folosesc protocolul http. Cu Websockets primești:

Server push realDupă upgradarea websocket, nu mai este nevoie ulterior de

cerințe din partea clientului. Serverul poate trimite mesajele sale după cum este nevoie.

Low Latency Eliminând jumătate din întregul ciclu cerere-răspuns, latența

efectiv se înjumătățește.

Low BandwidthAntetele mesajelor în Websocket au dimensiuni de numai 2

biți, în comparație cu o medie de 700-800 de biți ale antetelor din cererile http uzuale. Dimensiunile antetelor răspuns sunt mai mici în ceea ce privește numărul biților, dar și acestea sunt sem-nificativ mai mari decât antetele mesajelor websocket de 2 biți.

DezavantajePrincipalul dezavantaj al specificației websocket este că nu

este specificat nici un protocol de nivel al aplicației. Aici suntem provocați noi ca dezvoltatori, să preluăm inițiativa și să dezvoltăm niște protocoale de comunicare generice pentru aplicații, care să completeze această lipsă.

Cu un protocol generic al aplicației, putem aborda al doilea dezavantaj: protocolul websocket nu specifică un mecanism pen-tru garantarea livrării mesajelor – o cerință majoră în utilizarea comercială.

Deși nu sunt de nerezolvat, aceste două probleme sunt răs-punzătoare pentru faptul că Websockets nu are amploarea pe care o merită.

Pe scurtDupă părerea mea, Websockets are într-adevăr beneficii

imense în comparație cu comunicarea http tradițională. De aceea, aștept cu nerăbdare să utilizez Websockets pentru un produs comercial în viitor.

Aș dori să compar Websockets cu XMLHttpRequest, înainte de a avea parte de o reclamă exagerată, ca parte din AJAX: de îndată ce XMLHttpRequest a devenit utilizabil cu biblioteci terțe părți ușor de utilizat și de încredere, a început Web 2.0.

Websockets mai necesită îmbunătățiri în ceea ce privește utili-zarea mai facilă a bibliotecilor de asemenea, conducându-se astfel aplicațiile client-server comerciale la un nivel nou.

Link-uri utileSpecificație protocol IETF Websocket: http://tools.ietf.org/html/rfc6455Specificație W3C Websocket API: http://dev.w3.org/html5/websockets/JSR-356 Java API pentru Websockets: https://jcp.org/en/jsr/detail?id=356Proiect Tyrus: https://tyrus.java.net/index.htmlEndpoint-uri adnotate și programatice: https://blogs.oracle.com/arungupta/

entry/websocket_client_and_server_endpointComparație între Websockets și Comet: http://www.websocket.org/quan-

tum.htmlSpecificație Google pentru SPDY: http://dev.chromium.org/spdy/

spdy-whitepaperSiguranță Websocket: https://devcenter.heroku.com/art icles/

websocket-securityProtocolul STOMP ca protocol aplicație simplu: http://stomp.github.io/

stomp-specification-1.2.html

Page 32: Today Software Magazine N28/2014

32 nr. 28/2014 | www.todaysoftmag.ro

programare

Concurență şi data binding în JavaFX

În articolul din acest număr vă aducem din nou în atenție provocări tehnologice din lumea JavaFX. În articolul al doilea vom discuta despre concurență și data bin-ding. Pachetul javafx.concurrent

gestionează codul multifir al interacțiunii cu UI-ul și asigură că această interacțiune are loc în firul corect. Pachetul constă din interfața Worker și două clase de bază

Task și Service, ambele implemen-tând interfața Worker.

Interfața Woker furnizează API-ul folosit de un „background worker” ce comunică cu UI-ul. Clasa Task este o implementare complet observabilă a clasei java.util.concurrent.FutureTask și permite dezvoltatorilor să implementeze task-uri asincrone în aplicațiile JavaFX. Clasa Service exe-cută aceste task-uri.

Un Worker este asadar un obiect ce lucrează într-un fir din background. Starea obiectului Worker este observabilă și uti-lizabilă din firele aplicației JavaFX.

Ciclul de viață al lui Worker este definit astfel: când este creat obiectul Worker, acesta este în starea READY. După ce a fost programat pentru lucru, obiectul Worker tranzitează către starea SCHEDULED. După aceea, când obiec-tul Worker rulează, starea sa devine RUNNING.

Observație: chiar dacă obiectul Worker a pornit imediat, fără a fi pro-gramat, el tranzitează mai întâi în starea SCHEDULED și apoi în RUNNING.

Starea obiectului Worker, atunci când se execută cu succes devine

SUCCEEDED, iar proprietatea valoare va fi setată la rezultatul obiectului Worker. Altfel, dacă sunt aruncate excepții pe tim-pul execuției obiectului Worker, starea sa devine FAILED, iar proprietatea excepție este setată la tipul de excepție apărut. În orice stare obiectul Worker poate fi între-rupt utilizând metoda cancel(), ceea ce trimite obiectul în starea CANCELLED.

Diana Bă[email protected]

Java developer@ Accesa

Silviu [email protected]

Java Line Manager@ Accesa

Page 33: Today Software Magazine N28/2014

33www.todaysoftmag.ro | nr. 28/octombrie, 2014

TODAY SOFTWARE MAGAZINE

Progresul înregistrat la rularea obiectului Worker poate fi obținut prin trei proprietăți diferite: totalWork, workDone și progress.

Clasa Task poate fi pornită în unul dintre următoarele moduri (primele două ar fi preferabile):

• Folosind ExecutorService API: ExcecutorService.submit(task);

• Utilizând metoda task.run();• Pornind un fir cu task-ul dat ca parametru: new

Thread(task).start();

Taskurile sunt utilizate pentru a implementa logica de lucru într-un fir din background. Pentru început trebuie să extin-dem clasa Task, care va suprascrie metoda call(). Clasa Task moștenește clasa java.utils.concurrent.FutureTask, ce implementează interfața Runnable. De aceea obiectul Task poate fi utilizat cu API-ul Executor și poate fi trimis unui fir ca parametru.

Putem apela obiectul Task direct prin FutureTask.run(), ceea ce ne permite să apelăm acest task dintr-un alt fir.

Vom crea o clasă CounterTask ce extinde clasa Task.

public class CounterTask extends Task<Void> { @Override public Void call() { final int max = 10000000; updateProgress(0, max); for (int i = 1; i <= max; i++) {

updateProgress(i, max); } return null; }}

Metoda call() este invocată de firul din background, de aceea această metodă poate manipula stări ce sunt sigure a fi citite sau scrise dintr-un fir din background. Spre exemplu, manipularea scenei grafice active din metoda call() va arunca o runtime exception.

Pe de altă parte, clasa Task este des-tinată a fi utilizată cu aplicații JavaFX și ne asigură că orice modi-ficări ale proprietăților publice, notificări de e r o a r e , m a n i p u l a -

toare de evenimente și stări apar în firul aplicației JavaFX. În interiorul metodei call() putem utiliza metodele: update-Progress(), updateMessage() si updateTitle()pentru a actualiza valorile corespunzătoare proprietăților pe firul JavaFX.

În aplicație am creat o instanță a clasei anterioare, numită countTask și am executat-o printr-un ExecutorService

(ExecutorService es = Executors.

newSingleThreadExecutor();):

@Overridepublic void handle(ActionEvent event) { System.out.println(“Count Started”); bar.progressProperty().bind(countTask.pro-gressProperty()); es.execute(countTask);}

Clasa Service este destinată executării unui obiect Task dintr-unul sau mai multe fire. Metodele și stările clasei Service trebuie accesate din firul aplicației JavaFX. Această clasă ajută dezvoltatorii să implementeze o interacțiune corectă între firele din background și firul aplicației JavaFX. Putem porni, opri, anula și restarta un Service. Un Service poate rula un task mai mult de o dată. Așadar, un serviciu poate fi definit declarativ și restartat la cerere.

• Un Service poate fi executat în unul dintre următoarele modalități:

• De un obiect Executor, dacă este specificat pentru ser-viciul dat,

• De un fir daemon, dacă niciun Executor nu este specificat,

• De un executor custom precum ThreadPoolExecutor.

Exemplu de creare a unui service custom este dat în exemplul de mai jos:

public class CounterService extends Service<Void> { @Override protected Task<Void> createTask() { CounterTask ct = new CounterTask(); return ct; }}Creăm în aplicația JavaFX un CounterService (Coun-terService cs = new CounterService();)şi pornim firul astfel:if (cs.getState() == State.READY) { cs.start();}

Data BindingData binding-ul are rolul de a simplifica task-ul sincronizând

view-ul cu datele din model. Legarea (binding-ul) observă listele sale de dependențe pentru a detecta schimbări și se actualizează dacă acestea au apărut. API-ul de binding furnizează un mod simplu de a crea legări pentru cele mai comune situații.

Binding-ul este așadar un mecanism puternic pentru expri-marea relațiilor directe între variabile. Când obiectele participă la legări, modificările efectuate unuia vor fi automat reflectate celuilalt. Spre exemplu, binding-ul poate fi utilizat în GUI pentru păstrarea automată a afișărilor sincronizate cu datele pe care le referă.

Binding-urile sunt asamblate din una sau mai multe surse numite dependențe.

În exemplul nostru anterior am folosit funcția bind() pen-tru a lega progress bar-ul de counterTask.

Iată codul complet al aplicației JavaFX:

public class CounterBarAppService extends Application { StackPane root = new StackPane(); VBox mainBox = new VBox(); ProgressBar bar = new ProgressBar(0.0); CounterService cs = new CounterService();

@Override public void init() throws Exception { super.init();

mainBox.setAlignment(Pos.CENTER);

arhitectură

Page 34: Today Software Magazine N28/2014

34 nr. 28/octombrie, 2014 | www.todaysoftmag.ro

programare

mainBox.setSpacing(10);

Button btn = new Button(); btn.setText(“Count to Ten Million!”); btn.setOnAction(new EventHandler<ActionEvent>() {

@Override public void handle(ActionEvent event) { System.out.println(“Count Started”); bar.progressProperty().bind( cs.progressProperty()); if (cs.getState() == State.READY) { cs.start(); } }});

Button restartBtn = new Button();restartBtn.setText(“Restart”);restartBtn.setOnAction(new EventHandler<ActionEvent>() {

@Override public void handle(ActionEvent event) { System.out.println(“Count Started”); bar.progressProperty().bind( cs.progressProperty());

cs.restart(); }});

mainBox.getChildren().add(btn);mainBox.getChildren().add(restartBtn);mainBox.getChildren().add(bar);root.getChildren().add(mainBox);}

@Overridepublic void stop() throws Exception { super.stop();}

public static void main(String[] args) { launch(args);}

@Overridepublic void start(Stage primaryStage) {primaryStage.setTitle(“JavaFX Service Example”);

primaryStage.setScene(new Scene(root, 400, 250));primaryStage.show();}}

Vă așteptăm cu mare plăcere la discuții despre noua lume JavaFX.

Lectură plăcută!

Concurență şi data binding în JavaFX

Page 35: Today Software Magazine N28/2014

35www.todaysoftmag.ro | nr. 28/octombrie, 2014

Cod curat – Comentarii şi format

În ultimele două numere ale TSM am descoperit ce fel de denumiri ar trebui să utilizăm pentru metodele, câmpurile, clasele noastre și așa mai departe. În legătură cu aceasta, am văzut că ar trebui întotdeauna să utilizăm nume cu înțeles care au legătură cu pro-

blema pe care dorim să o rezolvăm. De asemenea, am văzut că un nume de metodă trebuie întotdeauna să exprime o acțiune - să înceapă cu un verb- iar un nume de clasă ar trebui să fie întotdeauna un substantiv. După aceasta, am vorbit despre funcții, când am aflat că o funcție ar trebui să fie scurtă, să facă numai un singur lucru, iar numărul parametrilor să fie limitat.

Toate informațiile din această serie sunt inspirate din „Clean Code”, scrisă de Robert C. Martin. Sper ca în acest fel să reușesc să conving oamenii să citească această carte și să scrie un cod mai bun.

Ce urmează? În acest articol vom vorbi despre comen-

tariile din codul nostru și despre formatul codului. Scopul nostru este de a încerca să aflăm când anume ar trebui să adăugăm comentarii în codul nostru și cum ar trebui să arate aceste comentarii. Deoarece dez-voltatorii trebuie să citească cod în fiecare zi, trebuie să folosim un stil de editare bun, care să ajute dezvoltatorii să citească codul cât mai ușor posibil.

Să deschidem seria comentariilor.

ComentariiCând ne gândim la comentarii în cod,

avem în minte comentarii care explică ce face codul. Problema cu aceste comentarii este că ele nu sunt actualizate întotdeauna. Foarte des codul este schimbat, dar vechile comentarii rămân aceleași. Deci comentari-ile nu mai reflectă codul.

Cu timpul, codul este mutat dintr-o locație în alta, este restructurat, divizat și mutat. Chiar dacă locația codului s-a

modificat, vechile comentarii rămân în aceeași locație. După o vreme, ajungem să avem comentarii care nu reflectă realitatea sau codul din jurul lor.

Cel mai dificil lucru este să educi dezvol-tatorii și să îi faci să înțeleagă că comentariile fac parte din cod. și, în momentul în care codul este modificat, același lucru trebuie să se întâmple și cu comentariile. Dar din cauza lipsei de timp sau a indiferenței, sfârșim prin a avea comentarii învechite, care nu mai reflectă realitatea.

Trebuie să ne gândim la comentarii ca și la documentație. Este un artefact scump care trebuie întreținut. Din această cauză, ar trebui să adăugăm comentarii numai în acele locații unde este necesar și codul în sine nu poate exprima ceea ce se întâmplă acolo.

Exemple neaecvate de comentarii

Cod greșitAdesea, comentariile sunt utilizate

acolo unde codul este greșit și sunt folo-site pentru a „repara” codul. Nu încercați să înfrumusețați codul prin adăugarea de comentarii. Atunci când aveți un cod urât ar trebui să îl restructurați și să îl rescrieți într-un fel care să exprime ceea ce faceți acolo.

programare

Radu [email protected]

Senior Software Engineer@iQuest

Page 36: Today Software Magazine N28/2014

36 nr. 28/octombrie, 2014 | www.todaysoftmag.ro

Explicarea coduluiAtunci când aveți un cod care nu poate fi înțeles, comentari-

ile nu sunt soluția. Încercați să rescrieți codul sau să redenumiți câmpurile sau alte elemente astfel încât cititorul să înțeleagă acțiunea pe care o faceți acolo.

În multe cazuri, puteți extrage o metodă cu un nume semnifi-cativ. Cititorul va înțelege foarte ușor ce se petrece acolo, pe baza numelor metodelor și a câmpurilor.

Comentarii inutileAdăugarea comentariilor în cod numai pentru că tu crezi că

este necesar, nu este un lucru bun. Se întâmplă adesea ca cineva să adauge comentarii în cod numai pentru că el crede că așa este bine, fără a avea un motiv real. La sfârșit putem avea multe comentarii care nu sunt folositoare și numai îngreunează citirea și înțelegerea codului.

Redundanța Când ai un nume bun pentru câmpul tău sau metoda ta, nu

mai ai nevoie de un comentariu care să descrie care este scopul acelui câmp sau acelei metode. De exemplu, o metodă denumită „SendEmail” nu mai are nevoie de niciun comentariu adițional atunci când este apelată. Este clar din numele metodei că se tri-mite un e-mail.

Un alt exemplu bun este câmpul denumit „vatValueForCur-rentOrder”. Din numele câmpului este destul de clar ce valoare este stocată în acest câmp. Nu ai nevoie de un comentariu care să spună „Valoarea comenzii curente este stocată.” În acest caz, comentariul nu adaugă nicio informație valoroasă.

Inducerea în eroare În multe cazuri, dezvoltatorii nu exprimă ceea ce intenționează

să facă. Din această cauză, puteți găsi un comentariu care spune că este trimis un e-mail către client și poți ajunge să faci debugging

și să încerci să înțelegi de ce e-mailul nu este trimis. În sfârșit, realizezi că metoda care este apelată sub acel comen-

tariu nu trimite un e-mail, ci numai construiește obiectul e-mail. De obicei, în companiile și proiectele mari se impun reguli

care cer ca fiecare metodă și clasă să aibă comentarii. În acest fel sfârșești prin a avea multe comentarii care nu adaugă o valoare reală. Sunt adăugate de către dezvoltatori numai pentru că așa se cere. De exemplu, o proprietate denumită „Id” are următorul comentariu „Obține, stabilește id-ul obiectului curent”. Nicio informație utilă nu este adăugată prin acest comentariu, numai trei rânduri adiționale de comentariu care îngreunează codul.

Cum ar fi să adaugi la un constructor comentariul „Construiește o exemplificare a obiectului Foo”. Să fim serioși, este clar care este scopul unui constructor. În general, constructorii nu ar trebui să fie niciodată comentați.

JurnalAcum 30 de ani, când controlul sursei nu se obișnuia la fiecare

proiect, poate că era o idee bună să scrii în cod jurnalul modifi-cărilor codului (când, ce, de ce, cine – a modificat codul). Dar acum, cu controlul sursei și alte mecanisme de detectare, nu mai are sens să facem asta.

Utilizând un sistem de control al sursei, puteți vedea și depista toate modificările efectuate asupra codului.

Marcaje pentru poziție Încercați să evitați utilizarea marcajelor de poziție în codul

vostru, cum ar fi de exemplu, să adaugi „/////////” în cod pentru a găsi mai ușor o parte anume a codului.

Exemple bune de comentariiDa, există cazuri în care comentariile sunt utile și pot adăuga

valoare codului vostru.

Legal și informativExistă cazuri când trebuie să adăugați un comentariu din

motive legale. Codul se poate afla sub termenii unei licențe anume, iar acest lucru trebuie să fie specificat. În acest caz, trebuie să adăugați un comentariu care să specifice acest lucru, dar fără a adăuga acolo toți termenii licenței. Puteți indica din comen-tariu un document sau link-uri anume care descrie termenii licenței. Nu vreți să aveți 200 de rânduri de comentarii cu aceste informații.

Mai sunt și cazuri când un comentariu poate adăuga valoare unui cod. De exemplu, atunci când oferim mai multe informații despre ceea ce redă o metodă. Fiți atenți că există cazuri când un nume bun al unei metode poate să înlăture necesitatea comenta-riilor legate de valoarea redată.

Intenție și clarificareUn comentariu este întotdeauna util când este exprimată

intenția. Nu este important să comentăm ceea ce am făcut în cod, deoarece cititorul poate să vadă codul în sine. Este mai important să explicăm ceea ce am vrut să facem în cod.

Există cazuri în care nu putem exprima exact care este intenția noastră. Din această cauză, noi trebuie să adăugăm comentarii care să aducă o mai mare clarificare și să explice de ce nu am acționat într-un anume mod. Poate că există un bug într-o bibli-otecă externă pe care a trebuit să îl evităm, sau poate clientul a avut o cerință ciudată.

programareCod curat – Comentarii şi format

Page 37: Today Software Magazine N28/2014

37www.todaysoftmag.ro | nr. 28/octombrie, 2014

TODAY SOFTWARE MAGAZINE

Amplificare și avertizareExistă momente când știi că anumite

linii de cod sunt foarte importante și că, fără ele, aplicația s-ar putea distruge. În aceste cazuri, comentariile i-ar putea avertiza pe dezvoltatori în legătură cu importanța acelor linii de cod.

Un exemplu bun este o variabilă mutex care este folosită pentru a accesa o resursă partajată. Poate nu toți dezvoltatorii ar înțelege importanța acelui mutex și de aceea este nevoie de un avertisment.

Documentație APIToate API-urile publice care sunt

destinate a fi utilizate de către clienți și dezvoltatori externi ar trebui să fie docu-mentate foarte bine. Deoarece ei nu vor putea să vadă implementarea, denumirea diferitelor clase și funcții în combinație cu comentariile ar trebui să exprime foarte clar care este scopul fiecărei metode și cum ar trebui apelată.

Format Imaginați-vă codul drept un text

dintr-o carte. Acesta ar trebui să fie editat frumos, indentația să fie utilizată în același fel pretutindeni, după fiecare ′,′ ar trebui să existe câte un spațiu și așa mai departe.

Cel mai important lucru când vorbim de format este nu să respecți un anume standard, ci să respecți același standard peste tot. Chiar dacă ți-ai definit propriul tău stil de editare, este în regulă, atâta timp cât respecți acel format pretutindeni. Formatul codului ar trebui să ghideze dez-voltatorii spre a citi și a înțelege codul.

Imaginați-vă o carte care este scrisă cu 10 stiluri de text, caractere de dimensiuni diferite, culori diferite, aliniere și spațiere diferită. Ar fi un coșmar. Același lucru se aplică și codului.

În jurul acestui subiect există multe recomandări despre câte linii de cod ar

trebui să conțină un fișier, care este numă-rul optim de caractere per linie. Nu veți putea găsi numărul magic, dar veți simți când numărul liniilor de cod este prea mare și derularea conținutului pe display devine enervantă.

VariabileEste recomandat să declari variabilele

cât mai aproape posibil de locația unde sunt folosite. Nu vrei să declari o variabilă în linia 1 și să o utilizezi numai din linia 15.

CâmpuriEste de dorit să grupezi toate câmpu-

rile în aceeași locație a codului. Câmpurile cu atribute diferite ar trebui să fie grupate împreună (vizibilitate, anvergură – static/ non-static, și așa mai departe).

Mai există un alt trend care spune că ar trebui să grupezi toate elementele unei clase pe baza funcționalității și acolo unde acestea sunt utilizate. În acest fel, vei avea o zonă în fișier cu metode și câmpuri pen-tru o anumită funcționalitate. Chiar dacă ideea este destul de frumoasă, este destul de greu de citit și modificat acest tip de cod, pentru că se poate întâmpla foarte ușor să omiți faptul că un câmp este deja declarat, de exemplu.

FuncțiiFuncțiile care sunt dependente ar tre-

bui plasate laolaltă. Este recomandat să ai funcția copil sub funcția care o apelează. În acest fel, vei putea să citești foarte ușor codul, fără a trebui să navighezi prea mult între locații diferite în interiorul codului.

Afinitatea coduluiCodul cu același scop și funcție ar

trebui plasat în același loc. Nu ai vrea să derulezi sau să cauți în 10 fișiere o anumită funcționalitate.

IndentațieEste foarte util să respecți un stan-

dard de indentație în întregul tău cod, chiar dacă există momente când ai vrea să încalci această regulă. Prin respectarea acestei reguli vei putea mai ușor să repe-rezi o variabilă, o acțiune executată de o subordonată FOR (pentru) sau IF (dacă) și așa mai departe.

Cu noile IDE și unelte este foarte ușor să respecți aceeași indentație pretutindeni.

Stil de codare și editareCel mai important lucru într-o echipă

este să ai un singur stil de editare care tre-buie să fie respectat de către toți membrii echipei. Nu pierdeți zile întregi definind stilul de cod și editare. Există suficiente astfel de reguli deja disponibile care pot fi utilizate cu succes – nu reinventați roata încă o dată.

Este important să știți că echipe dife-rite pot utiliza standarde de codare diferite. Din această cauză, dezvoltatorii ar trebui să fie deschiși să accepte și să învețe alte standarde de codare, nu numai pe cel cunoscut de ei.

ConcluzieComentariile și formatul codului pot

face codul mai ușor de citit și de înțeles. Încercați să definiți aceste reguli la înce-putul proiectului și fiți pregătiți să le schimbați dacă este necesar și dacă are sens.

Nu uitați că regulile cele mai simple sunt cele mai bune!

„Nu comentați codul greșit – rescrieți-l !”Brian W. Kernighan and P. J. Plaugher

Page 38: Today Software Magazine N28/2014

38 nr. 28/2014 | www.todaysoftmag.ro

testare

Software Testing World Cup este o competiție internațională de testare software, aflată la a doua ediție. Competiția se desfășoară în două etape: preliminariile au loc la nivel de continent (Africa, Asia, Europa, Oceania, America de Nord și America

de Sud) și se poate înscrie oricine, iar echipele câștigătoare se înfruntă într-o fază finală ce va avea loc în cadrul conferinței Agile Testing Days. Anul acesta preliminariile au avut loc între aprilie și iulie, iar etapa finală va avea loc la jumătatea lunii noiembrie.

Irina a fost prima care a auzit de con-curs și nu a fost greu să ne convingă. Nici una dintre noi nu mai participase la vreo competiție de testare și am luat-o ca pe o provocare: o experiență distractivă și inte-resantă atât pentru echipă cât și pentru fiecare din noi în parte. Așa că, pe 13 iunie 2014 noi, Irina, Ileana, Sanda și Lavinia, am participat la acest concurs neobișnuit, unde echipe de testare software din Europa și-au petrecut o seară de vineri testând o aplicație timp de trei ore.

Fiecare echipă înscrisă în concurs a avut acces la aceeași aplicație software. Organizatorii au pus la dispoziția echi-pelor un proiect dedicat unde trebuiau să înregistreze defectele găsite, iar la finalul sesiunii de testare trebuia trimis un raport de testare în formatul dorit. Din mai mult de 100 de echipe care au participat la eve-nimentul din Europa, echipa noastră am fost câștigătoare.

Deși nu ne-am gândit nici măcar o clipă la clasamentul final, rezultatul ne-a bucurat foarte mult pentru că nu ne așteptam. Imediat după ce ne-am înscris la

concurs, realitatea ne-a mai tăiat din entu-ziasmul inițial. Nu aveam timp suficient să ne întâlnim, erau numeroase detalii de pus la punct și concursul se desfășura la ore prea târzii - șapte seara într-o vineri- pen-tru a mai putea fi eficiente. La urma urmei, toate aveam obligații profesionale de res-pectat și vieți personale de trăit.

Dar am reușit să ne întâlnim de câteva ori și să punem la punct câteva detalii. Nu prea multe, dar suficiente cât să avem sentimentul că am luat în serios concursul acesta. Dar nici prea în serios, pentru a nu suferi prea mult în cazul unui eșec.

Ziua concursului nu e niciodată așa cum ți-ai dori să fie. Cu toate acestea, am reușit să ne punem de acord asupra unei schițe a raportului, urmată de o cină plăcută chiar înaintea concursului. Din experiența noastră cel mai bun energizant e întotdeauna timpul petrecut între prie-teni. Au urmat trei ore de efort susținut la capătul cărora nu ne-am simțit deloc ca o echipă câștigătoare. Pe parcursul acelor ore ne-am dorit să facem un milion de lucruri și nereușind să le acoperim pe toate, ni s-a

Software Testing World Cup

testare testare

Irina [email protected]

Quality Assurance Engineer@ HP România

Lavinia [email protected]

Quality Assurance Manager@ HP România

Page 39: Today Software Magazine N28/2014

39www.todaysoftmag.ro | nr. 28/octombrie, 2014

TODAY SOFTWARE MAGAZINEtestare

părut că ne-am ratat obiectivul. Ne-a fost greu să găsim abordarea perfectă pentru aplicația pe care o testam și am fost mult prea absorbite de ideile noastre, mereu pe urma vreunui posibil defect.

Aplicația pe care trebuia să o testăm era un demo pentru un instrument de vânzare al cărui concept era absolut nou pentru noi și a cărui logică de business nu era chiar intuitivă.

Mai mult, aplicația avea dependințe de date reale și nu îți puteai genera datele de test pe loc. A trebuit să căutăm companii reale din anumite țări și să înțelegem speci-ficul formatelor din acele țări (nume legal, date de contact etc.), urmând ca apoi să integrăm acele reguli în scenariile noastre de testare. O dată introduse detaliile unei companii reale, dacă aplicația o recunoștea ca validă, ți se oferea posibilitatea de a genera un profil pentru ea, conținând deta-lii cum ar fi amprenta online a companiei, competitori și puncte slabe.

Generarea profilului dura cam 10 minute, dar într-o sesiune de testare limi-tată de timp, nu ai luxul de a aștepta după un proces. De multe ori am uitat să veri-ficăm imediat și multe flow-uri de testare s-au încheiat fără a putea închide bucla și fără a putea analiza datele de profil. Neavând timp să așteptăm după rezultate, am sacrificat aspecte pe care într-un mediu real de testare nu le-am fi ignorat.

Întregul produs era plin de defecte și unele erau atât de evidente încât ne-am întrebat dacă să pierdem timp raportându-le sau să ne continuăm „vânătoarea”. Chiar dacă era o aplicație reală, în producție, am avut sentimentul că ceea ce testam a fost pregătit special pentru eveniment, îmbogățită cu tot felul de probleme și defecte discrete.

Au fost unele arii în care am fi putut explora dincolo de suprafață și am fi putut intra chiar în logica de business, dar, din nou, timpul nu a fost de partea noastră. De asemenea, multe aspecte de utilizare a aplicației ar putea fi îmbunătățite. De exemplu, aplicația are ca utilizator prin-cipal personalul din vânzări, probabil

obișnuit cu o anumită funcționalitate, dar perioada de învățare ar putea fi semnifica-tiv micșorată folosind câteva îmbunătățiri standard (hint-uri, o pagină de help, navi-gare mai ușoară pe ecran).

Un aspect cheie al concursului l-a reprezentat raportul de testare, docu-ment ce trebuia trimis la finalul sesiunii. Acesta putea fi pregătit în prealabil, dar cât de mult poți anticipa, având în vedere că urma o sesiune de trei ore de explorare a unei aplicații pe care nu o cunoșteam? Conținutul unui raport de testare poate fi de fiecare dată un subiect de discuții. Există template-uri care capturează ceea ce ai făcut și rezultatele obținute, dar la final, tot trebuie să-ți cunoști publicul și să-ți prezinți datele în funcție de așteptările lor.

Am ales să ne concentrăm exclusiv pe ceea ce putem livra până la finalul sesiunii, pe feedback-ul individual și pe statisticile defectelor găsite.

Am generat patru pagini de raport: prima conținea feedback-ul gene-ral pe aplicație, a doua, rezultatele pe funcționalitățile testate (număr de defecte, timpul petrecut în fiecare arie și feedback explicit pe fiecare secțiune), a treia pagină era dedicată defectelor, cu un grafic care detalia severitatea și tipul lor (funcțional, performanță, interfața cu utilizatorul), iar în ultima pagină am inclus detalii despre mediul de testare, deoarece, chiar dacă nu a fost cerut, am considerat că este impor-tant să arătăm pe ce browser-e și pe ce dispozitive s-a făcut testarea. Nu am intrat în detalii mai mult de atât și raportul a fost până la urmă singurul lucru de care am fost mulțumite că a ieșit cum ne-am plănuit.

Privind înapoi, e inevitabil să nu te gândești că „suntem cele mai bune”, dar încercăm și să ne dăm seama de ce anume am câștigat. Nu suntem experți în testare și nici nu pretindem a fi. Comunitatea testerilor e atât de vastă încât mereu vei găsi oameni mai pasionați decât tine, mai creativi sau mai talentați decât vei putea fi vreodată. E genul de profesie unde spon-taneitatea e un factor diferențiator și unde chiar trebuie să te diferențiezi continuu.

Ca profesionist în domeniu, trebuie pur și simplu să testezi mai bine, mai inteligent și mai rapid decât restul.

Sub presiunea momentului, timpul extrem de scurt ne-a făcut să ne îndoim de rezultate. Nu ne-am simțit nici mulțumite, nici încrezătoare în rezultatul muncii noas-tre. Ne-a lipsit siguranța pe care ți-o dă munca organizată, structurată, când poți urmări gradul de acoperire și îți poți cal-cula deciziile. Din când în când, am făcut schimburi de idei, ne-am acordat câteva secunde pentru a ne verifica între noi.

Într-un interval atât de scurt nu prea ai cum să pregătești foarte multe și e impor-tant să ai încredere în ceilalți membri ai echipei și să-ți urmezi instinctele.

Totul in jurul nostru se întâmplă într-un ritm alert și chiar dacă testarea în general are nevoie de muncă extensivă, aici a trebuit să găsim moduri de a livra rezul-tate relevante în timpul extrem de scurt pe care l-am avut la dispoziție.

Revenind la concurs după câteva luni și citind despre experiența altor echipe am realizat că nu suntem echipa cu cel mai mare număr de defecte, nici cu cele mai critice. Nu am câștigat nici măcar unul din premiile speciale. Deci cum am câștigat de fapt? Este o întrebare pe care ne-am tot pus-o și un răspuns e că atunci când îți place foarte mult ceea ce faci, rezultatele se văd.

Experiența acestui concurs ne-a ară-tat cât de răsfățate suntem în munca de zi cu zi, când avem atât de mult timp la dispoziție pentru a ne construi strategia de testare și pentru a putea analiza produ-sul de testat cu suficientă profunzime. De asemenea, ne-a arătat cât de importantă e în situații limită comunicarea și încrederea între membrii echipei, fără de care am fi irosit timp prețios și nu am fi reușit să ter-minăm la timp.

Dar cel mai important, etapa conti-nentală a Software Testing World Cup ne-a deschis apetitul pentru acest gen de exerciții, ne-a făcut să reflectăm asupra ariilor unde am dori să ne aprofundăm cunoștințele și cu siguranță ne-a îmbogățit stilul de testare.

Echipa noastră va participa în noiem-brie la etapa finală a competiției. Indiferent de rezultat, ne simțim câștigătoare și am dori să încurajăm cât mai mulți testeri să ia parte la astfel de concursuri, unde experiența în sine este mult mai valoroasă decât premiile sau locul în clasament.

testare

Page 40: Today Software Magazine N28/2014

40 nr. 28/2014 | www.todaysoftmag.ro

management

După cum am menționat în articolul ‘Cadrul analizei de business’ din numărul 26, voi continua seria de articole în acest domeniu. Subiectele pentru artico-lele viitoare au fost prezentate succint sub formă de pași și diagrame pentru a

oferi o imagine de ansamblu consistentă atât pentru un analist de business cât și pentru orice alt membru al echipei care îndeplinește aceste atribuții.

În același articol menționam orien-tarea ca fiind un prim pas ce trebuie să-l facă un analist de business când începe un proiect nou.

Cum trebuie să se orienteze un analist de business - este subiectul acestui articol și îl consider important deoarece în acest pas se setează involuntar anumite așteptări și fiecare parte implicată se aliniază la poziția de start pentru proiect.

Consider acest pas unul neoficial datorită faptului că nu este documen-tat nicăieri. Orientarea nu face parte din niciun proces și nu am găsit cărți care să descrie modul în care un BA trebuie să se pregătească încă dinainte de a începe să scrie cerințele. Acest pas este cu atât mai important cu cât rolul de BA pe proiect este nou și nu se știe clar ce responsabilități îi revin.

Aș face o paralelă aici pentru a se înțelege mai bine la ce mă refer: în vân-zări există o primă etapă sub numele de

prospectare de piață. Prospectarea este ansamblul de mij-

loace care permite intrarea în contact cu potențialii clienți care au nevoie de produ-sele și serviciile care le oferiți.

Aceasta este perspectiva pe care tre-buie să o aveți în vedere și pentru analiza de business.

Găsiți, într-adevăr, materiale despre planificarea unei abordări pe latura ana-lizei de business (BA project approach) dar acest lucru corespunde cu pasul 3 din schema de mai sus și se referă la sarcini/activități, tehnici sau definirea livrabilelor pentru proiect.

Doresc să nu anticipăm prea mult vii-toarele articole și revin la pasul informal de orientare pe care vrem să îl îndeplinim cu succes.

Informațiile pe care trebuie să le cunoașteți sunt prezentate mai jos.

Despre echipă

Primul pas în analiza de business

management

Ioana [email protected]

Business Analyst @ Imprezzio Global

Page 41: Today Software Magazine N28/2014

41www.todaysoftmag.ro | nr. 28/octombrie, 2014

TODAY SOFTWARE MAGAZINEmanagement

Mă refer aici la echipele de dezvoltare și de testare în cazul companiilor care au departamentele separate și la echipa SCRUM, în cazul în care se lucrează cross-funcțional.

Având rolul nou de analist de business în echipă poate seta așteptări dintre cele mai diverse între colegi și celelalte părți implicate. Se poate ca unii colegi să mai fi lucrat cu un analist de business și, la fel de bine, se poate ca ei să nu cunoască foarte clar atribuțiile acestuia. Fiecare membru are o perspectivă și experiență diferită care te poate ajuta să obții cerințele cât mai complete. Colaborarea în echipă este factorul cheie care va determina succesul proiectului.

Pentru ca lucrurile să se poată desfășura cât mai bine cu putință și ca rezultatele să fie cel puțin la nivelul așteptărilor, încercați să cunoașteți așteptările fiecărui membru din echipă.

Mai jos sunt anumite repere care vă ajută să conturați mai bine ce așteptări au ceilalți în ceea ce vă privește:

• ce vechime au membrii echipei din cadrul proiectului (avantajul unui mem-bru mai nou este că poate veni cu sugestii noi și creative, pe când un membru mai vechi îți poate da multe detalii despre istoric și cum au evoluat lucrurile).

• cum își împarte și organizează fie-care munca.

• ce le place cel mai mult la modul actual de lucru și ce și-ar dori să schimbe.

• ce probleme se regăsesc frecvent la cerințele actuale.

• în ce formă se primesc cerințele și cine contribuie la ele.

Despre clientClientul va avea o imagine diferită

pentru aproape orice membru din echipă în funcție de modul și contextul în care cele două părți au interacționat. Poate unii vor fi dezamăgiți, dar, din experiența de până acum, așteptările din partea echipei de dezvoltare de a avea un client tehnic nu pot fi îndeplinite decât într-o măsură des-tul de mică.

Clientul are în majoritatea cazurilor orientare de business și va da direcția de urmat atât pe partea de business cât și pe partea tehnică. Cerințele sunt de cele mai multe ori de business, nicidecum tehnice. Acestea din urmă se modelează după cerințele de business și nu invers.

Obiectivul principal pentru un analist de business este cel de a înțelege nevoia de business în baza căreia se face dezvoltarea

și de a o îndeplini cu succes.Pentru a clarifica lucrurile de la înce-

put poți face următoarele:• creează o listă cu toate părțile impli-

cate și include importanța și gradul lor de implicare în proiect (Stakeholder Matrix) - cere ajutorul project managerului.

• schițează o matrice de comunicare și valideaz-o cu managerul de proiect. Aici sunt incluse următoarele informații valoroase:

• care e rolul fiecăruia în proiect;• cine, ce și când comunică;• cu cine trebuie să comunici tu și în

ce situație.• află cum e obișnuit clientul să comu-

nice cu compania pe care o reprezinți și care este frecvența.

• află ce tip de comunicare se folosește cel mai des și în ce situații: scrisă, directă, în cadrul video conferințelor sau teleconferințelor.

• care sunt punctele pe care își dorește să le îmbunătățească.

• află dacă sunt deschiși la soluții din partea companiei tale sau își doresc să se facă totul ca la carte după cum modelul lor intern.

• interesează-te de istoricul clientului și de relația lui cu compania ta.

• află ce planuri de viitor are clien-tul în legătură cu produsul pe care îl dezvoltați.

• cine este clientul final și ce influență are în procesul de dezvoltare (în cazul companiilor de Outsourcing în care poate exista separat un client/ utilizator final).

Despre proiectAsigură-te că ești informat în legă-

tură cu matricea RACI (R-Responsable, A- Accountable, C- Consulted, I- Informed) formală sau informală și încearcă să incluzi și rolul analistului de business în ea ast-fel încât să știe fiecare ce trebuie să facă. Dacă aceasta există doar la nivel informal încearcă să obții acordul părților și să o lași în forma scrisă pentru ca oricine să o poată consulta la nevoie. Fă referire la ea ori de câte ori e necesar.

Informații utile sunt despre:• care este Business Case-ul pentru

proiect;• ce metodologii se folosesc și care

sunt practicile pe proiect;• ce tool-uri se folosesc;• unde se găsesc documentele despre

proiect;• cine sunt experții pe domeniu (SME-

Subject Matter Experts);

• cine îți poate face un training des-pre produsul sau serviciul pe care îl dezvoltați.

Cele expuse mai sus vă pot ajuta pe fiecare dintre voi să vă aliniați la startul pentru un nou proiect.

Informațiile despre echipă, client și proiect sunt accesibile oricui e interesat să le afle.

Cum am mai menționat anterior, aceste subiecte nu se adresează doar analiștilor de business, ci tuturor celor care îndeplinesc și acest rol.

Închei prin a vă invita și pe voi să împărtășiți experiențele voastre de când ați început un proiect nou.

Page 42: Today Software Magazine N28/2014

TODAY SOFTWARE MAGAZINE

42 nr. 28/octombrie, 2014 | www.todaysoftmag.ro

management

BUGETUL DE MARKETING = BUGETUL DE PUBLICITATE?

Majoritatea companiilor mici și mijlocii nu folosesc conceptul de buget de marketing. În cel mai bun caz avem bugete de publicitate sau promovare.

Dar cum rămâne cu celelalte investiții care țin de mixul de marketing:

• Ev e n i m e nt e c u c l i e nț i i s au colaboratorii,

• PR & Networking,• Optimizarea proceselor pentru o

mai bună servire a clienților,• Trainingurile pentru angajați,• Cercetarea nivelului de satisfacție al

clienților,• Studiul pieței sau a oportunităților

de marketing,• Măsurarea eficienței costurilor de

marketing.

Remarcați că din lista enumerată, unele aspecte țin de bugetul de la vân-zări. Procesele? Țin de management. Concurența? Nimeni nu știe mai bine decât cei de la vânzări. Eficiența costu-rilor? Avem departament financiar… și management.

E adevărat, dar analizele de market-ing vizează altă tematică decât analizele financiare.

Dacă managementul nu are suficientă expertiză de marketing atunci responsa-bilul de marketing ar trebui să analizeze toate procesele din companie care ajung să creeze valoare pentru clienți și ar tre-bui să aibă măsuri dedicate în bugetul

de marketing. Realitatea economică din interiorul firmelor ține bugetul de mar-keting amestecat cu bugetele din celelalte departamente, dar trebuie făcute eforturi constante de către responsabilul de mar-keting pentru a avea o imagine generală asupra valorii create de companie în dife-rite sectoare de piață și pe diferite nivele de responsabilitate din companie.

Managerii au o situație dificilă aici. Cât ar trebui să i se lase marketingului să inter-vină pe celelalte procese în companie?

Aceste tipuri de analize și măsuri tre-buie luate în calcul la nivelul bugetului general al companiei. În realitate se întâm-plă ca cel mai credibil și competent dintre manageri să aibă bugetul aprobat și pentru alte procese. Dar uneori aceștia nu privesc businessul din punct de vedere al respon-sabilului de marketing.

Directorul executiv sau directorul general și responsabilul de marketing sunt singurii care pot activa aceste unghiuri de analiză asupra business-ului. În final, obiectivul de marketing este să ai control asupra valorii pe care o oferi clienților și să maximizezi profitul.

Deci… cum ar trebui să construim bugetul de marketing?

Misiunea dificilă a managerului vine și

de la complexitatea proceselor din cadrul companiei care ajung să creeze valoare pentru client. La urma urmei, marketing este … peste tot. Planul de marketing aco-peră toate procesele firmei, însă nu este necesar să avem totul centralizat într-un buget care se numește Buget de Marketing. Dar trebuie să ai grijă ca echipa ta de management:

1. Să monitorizeze evoluția acțiunilor, a costurilor si a profitabilității acestora.

2. Să monitorizeze concurența directa și planul lor de comunicare.

3. Să țină bugetele flexibile în funcție de evoluția veniturilor.

4. Să încerce să monitorizeze fiecare ban cheltuit, în ce mod întoarce rezul-tatele așteptate și cum creează valoare pentru client.

5. Să țină bugetul realist, să fie moni-torizat constant iar periodic (suficient din 6 în 6 luni) să fie actualizat planul de marketing.

6. Să știe că trebuie să cheltuie bugetele alocate mai inteligent decât concurența.

7. Să fie constituită din parteneri care îți împărtășesc viziunea pe termen lung, le este clară și o pot transmite mai departe motivându-I pe ceilalți.

De asemenea este important să încurajați marketingul să fie creativ și curajos în decizii, să luați deciziile corecte bazate pe contextul real al companiei și al mediului economic în care activați luând în calcul obiectivele pe termen lung.

PS. Bugetul întreg al companiei este bugetul real de marketing.

Adrian [email protected]

Senior partner & research director@ Loopaa

Page 43: Today Software Magazine N28/2014

43www.todaysoftmag.ro | nr. 28/octombrie, 2014

TODAY SOFTWARE MAGAZINE comunități

Dronele sunt aici

Imaginați-vă că doriți ca cineva să vă înregistreze în timp ce alergați la maraton în acest wee-kend. Cum faceți asta? Sigur, ați putea să chemați un prieten și să îl rugați să vă filmeze. Dar cum ar putea să o facă? Efectiv, stați jos și gândiți-vă puțin la logistică. Ar fugi și el alături de tine, cu camera în mână, săltând-o în sus și în jos? Probabil că nu. Poate ar putea să urce în mașină și să conducă încet pe lângă tine, pe tot parcursul ținând o mână pe cameră și cealaltă pe volan. Oh, da, și călcând ceilalți alergători la maraton pe traseu. Asta ar fi un subiect bun pentru ziare. Sau ai putea pune o dronă să facă asta. Leagă o cameră de filmat la ea, pornește-o și urmărește-o fără nici un pic de efort cum zboară alături de sinele tău atletic, filmând pe parcurs .Ok, poate că va zbura puțin mai sus de atât, pentru că tot dorim să-i evităm pe ceilalți alergători. Acesta este numai unul din numeroasele moduri în care dronele ne permit să facem lucruri nenumărate pe care nu le puteam face înainte.

Amazon va lansa în curând drone care pot livra pachete la ușa ta, la doar 30 de minute după ce le-ai comandat.

Administratorii pădurilor folosesc acum drone pentru a depista incendiile – ceea ce mai înainte era o sarcină costisitoare și care consuma mult timp, rezervată piloților de elicoptere. Fermierii lasă dronele să preia sarcina monitorizării recoltelor lor, urmă-rind semnele de boală sau stricăciune.

Oriunde privești, dronele își fac loc în viața noastră de zi cu zi, facilitându-ne noi modalități de a interacționa cu mediul nostru înconjurător și de a ne extinde capacitățile. Iar partea cea mai grozavă este că nici măcar nu sunt vreo tehnologie scumpă pe care să nu și-o permită finan-ciar omul de rând. În funcție de ceea ce vrei să faci cu ea, poți comanda online o dronă de dimensiuni standard (aproxima-tiv 50 cm în diametru) pentru aproximativ 200 EUR, sau o micro-dronă care poate ateriza pe degetul tău și care costă numai 25 EUR.

Dar unde vedem că are loc inovația reală în ceea ce privește dronele este în comunitatea Maker-ilor (a producătorilor) – o subcultură a indivizilor cu gândire teh-nică care creează electronice și gadgeturi de calitate acasă. Nerestricționați de hara-babura birocrației corporatiste și având puterea dată de tehnologiile emergente precum tipărirea 3D de acasă, Makerii din întreaga lume își propun să lanseze socie-tatea într-o nouă eră în care sunt estompate granițele dintre consumator și producător, deoarece tot mai mulți oameni își creează acasă gadgeturi personalizate care să răs-pundă nevoilor lor individuale.

Grupul Tech Makers and Designers din Cluj este o astfel de coaliție de oameni care și-au unificat abilitățile pentru a produce lucruri noi. Luna trecută, Tech Makers and Designers au început planurile pentru a face o dronă proprie. Deși încă în faza de strângere de fonduri a proiectului, membrii Tech Makers sunt entuziasmați să înceapă lucrul la acest proiect. Odată ce drona va fi gata, grupul plănuiește să

o analizeze pentru ca membrii săi să își imagineze modalități noi de a o utiliza în beneficiul comunității și al întregului oraș.

Una peste alta, dronele vor revoluționa cu siguranță modul în care facem tot. De la vânzarea caselor la prevenirea bracona-jului și la trimiterea pachetelor prin poștă, dronele sunt pe cale să lase o impresie de durată în viețile noastre. În următo-rii câțiva ani, cuvântul „dronă” cel mai probabil va deveni la fel de familiar ca și termenul de „smartphone”, aruncat ici colo la întâmplare, fără a ne gândi prea mult, și între timp referindu-se la un obiect fără de care nu ne-am putea imagina viața.

Dacă sunteți interesați să aflați mai multe despre Tech Makers and Designers și munca pe care o fac ei și/sau ați dori să aduceți o contribuție, vă rugăm să contactați [email protected].

Dronele sunt aici și este timpul să ne obișnuim cu asta. Până acum probabil ați auzit de „Revoluția dronelor” care are loc în prezent. Sigur, acestea au pornit ușor cu stângul din cauza aplicațiilor militare inițiale, dar oamenii de pretutindeni, de la Amazon la pasionații locali, încep să descopere alte utilizări ale dronelor, care pot aduce beneficii în viețile noastre în

moduri uluitoare.

Thomas Morris [email protected]

Freelance Web Developer

Page 44: Today Software Magazine N28/2014

44 nr. 28/octombrie, 2014 | www.todaysoftmag.ro

- Tati! Tati! Ardeee!!Gogu fugi repede în bucătărie, simți

mirosul de fum și căută rapid cu privirea sursa posibilă. Cu coada ochiului observă însă că ceva nu e în regulă și realiză imediat ce era suspect: mama și copilul, rezemau aliniați peretele, cu același zâmbet șăgalnic pe față dar și în priviri, dubios de calmi amândoi. Doamne, ce seamănă copilul ăsta cu mama lui, nu se putu abține Gogu să nu observe.

- Măi pungașilor, ce faceți voi aici? Ce e cu fumul ăsta? Că n-ați rânji voi fasolea așa la mine dacă ar fi ceva grav...

Soția zâmbi cald și spuse: am reușit să ard dovleacul. Copilului i s-a părut dis-tractiv să te urnim din fotoliu cu ocazia asta, poate ne mai onorezi și pe noi cu prezența, măcar așa, dacă te amenințăm cu incendii...

Gogu zâmbi: Ei lasă ca v-arăt eu vouă! Măi, pușlama mică: tu vrei să ajungi ca în povestea cu Petrică și Lupu’?!

- Ce poveste? Întrebă copilul cu real interes. Gogu clătină cu neîncredere din cap: Nu pot să cred că nu știi! Se prinse ime-diat că povestea nu fusese printre lecturile copilului și decise că era momentul unei discuții serioase tată-fiu. Evident, având în fundal povestea cu Petrică care alarmase satul degeaba de câteva ori mințind că lupul dăduse iama în oile pe care le păzea pentru săteni. Iar apoi, când nedoritul patruped chiar se decise să se înfrupte din oile respective, Petrică zadarnic a mai țipat, alertat, chiar implorat sătenii pentru ajutor, aceștia au refuzat să mai iasă, crezând că au parte iar de o păcăleală de-a lui Petrică. Gogu se simți mândru nevoie mare...

***Send/Receive. Nimic. Gogu oftă, se

uită la ceas – se apropia finalul zilei de lucru - apoi mai apăsă o dată butonul de actualizare din Outlook. Tot nimic. Ar trebui să-l sun, își zise el. Renunță însă imediat. Știa că Șefu’ își citește e-mailurile și – dacă are timp – răspunde. Mai ales la

cele cu atenționarea ‚important’. Dacă n-a răspuns, înseamnă că nu are timp, iar dacă n-are timp, n-are sens să-l sun, își conti-nuă Gogu șirul gândurilor. Și mai apăsă o dată pe Send/Receive. Wow, stai că mișcă, așteptă nerăbdător, apoi oftă dezamăgit: era mesaj de la Mișu. Nu mai deschise e-mailul, știa prea bine ce voia Mișu, dar n-avea ce să-i spună până nu primea undă verde de la Șefu’. Send/Receive. Fir-ar!

- No, Gogule, care-i baiu’?- Hai că m-ai speriat... Ce faci? Dai

drumu’ la mail și dup-aia fugi repede să vezi care dintre voi ajunge primul?! Ce vrei? se rățoi Gogu la Mișu care apăruse pe neașteptate în spatele lui.

- Hă-hă, care ajunge primul, îl îngână Mișu râzând. Bună asta... Păi aștept și eu un răspuns.

- Păi și eu aștept, sări Gogu, iar apoi adăugă supărat: n-a răspuns Șefu’...

- Și de ce nu vorbești cu el? Îi pe hol, la o glumă cu băieții...

Lui Gogu i se strânse stomacul. Cum adică, el se dă de ceasu’ morții cu proiectul, înnebunește cu sufletul la gură așteptând un semn de la Șefu’ și lui îi arde de glume pe hol?! Se uită încă o dată, îngrijorat, la ceas, apoi se grăbi spre hol. Mișu se luă repede după el.

- Șefu’, îmi pare rău că te întrerup, da’ am mare nevoie de un răspuns de la matale, mă ajuți?

- Răspuns? La ce, Gogule, zi mai repede, că mai avem puțin... deja simt cum bate un vânt de weekend, zâmbi Șefu’ vizi-bil încântat de perspectiva zilelor libere ce se apropiau.

Gogu, ușor încurcat, reuși să îngaime, cu oarecare reproș:

- Raportul, Șefu’! Ți-am trimis raportul lunar pe proiectul meu.

- Mda, știu, nu l-am mai citit, că am văzut că e ok, o să-l citesc pe îndelete săp-tămâna viitoare, că nu arde.

Gogu rămase descumpănit. Cum adică ok, cum adică nu arde?!

- Păi, Șefu’, raportul arată proiectul cu status pe galben, adică alertă. Și avem niște propuneri acolo pe care voiam să ni le aprobi să putem să comunicăm către client și să mergem mai departe. Galben, adică avem nevoie de niște răspunsuri, repetă Gogu cu aer disperat.

Fu rândul lui Șefu’ să fie încurcat:- Eu am văzut că e pe galben, Gogule,

dar așa e de două luni și nu mi-ai cerut nimic până acum, doar m-ai atenționat că sunt niște situații în curs de rezolvare. Am crezut că e la fel și-acum, de unde să știu că acum lucrurile stau diferit. Vezi de ce v-am cerut să nu treceți pe galben decât atunci când situația devine serioasă?! Nu era mai bine dacă până acum lăsai proiec-tul pe verde? Imediat vedeam acum că e nevoie de o intervenție... Hmm, știi Gogule povestea cu Petrică și Lupu’?

Soarele lui de lup...

Gogu, Petrică şi Lupu’

management

Simona Bonghez, [email protected]

Speaker, trainer and consultant in project management,

Owner of Colors in Projects

Page 45: Today Software Magazine N28/2014

Organizer

Partners Supporters

The Workshops24th November

The Conference Book

Java Performance Creativity, Agile and Software Craftmanship

Innovation, entrepreneurship and technologiesVenue: Cluj Arena, conference hall, 25-26 November 2014, Cluj-Napoca

Book Sponsors

www.itdays.ro - 2 days access, 55 euro + TVA

Page 46: Today Software Magazine N28/2014

powered by

sponsori


Recommended