Numarul 28 - octombrie 2014 - Today Software Magazine

Page 1

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

TSM

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

Haskell Data Analysis Cookbook

r .NET

vNext: Viitoarea direcție a aplicațiilo

Creativitate Aplicată Primul pas în analiza de business Build for fun @ FedEx Day Cum poate o companie de IT să devină investitor într-un startup Websockets – http pe steroizi TinTag - Internet of Things startup à la Cluj

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’



6 Trenduri, tehnologii, antreprenoriat și proiecte de cercetare la Cluj IT Days 2014 Ovidiu Măţan

8 Tintag - Internet of Things startup à la Cluj Mircea Vădan

10 Ce te face să mergi mai departe? Cornelia Stan

11 Cum a fost la conferința Smartweb Claudia Mihu

14 How to Web 2014 Irina Scarlat

16 Cum poate o companie de IT să devină investitor într-un startup Tudor Bîrlea

18 BUILD FOR FUN @ FedEx Day Andreea Misaras și Camelia Hanga

21 Creativitate Aplicată Alexandru Palade

24 Recenzie pentru “Haskell Data Analysis Cookbook” Radu Marius Florin

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

29 Websockets – http pe steroizi Philip Peterhansl

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

35 Cod curat – Comentarii și format Radu Vunvulea

38 Software Testing World Cup Cazacu Lavinia

40 Primul pas în analiza de business Ioana Armean

42 BUGETUL DE MARKETING = BUGETUL DE PUBLICITATE? Adrian Abrudan

43 Dronele sunt aici Thomas Morris

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


editorial

M

Ovidiu Măţan

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

ultă lume consideră că IT-ul în general este comod și nu-ți îngrădește creativitatea. 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 trebuie î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ă reprezentare. 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 stimularea 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ăţan

Fondator al Today Software Magazine

4

nr. 28/2014 | www.todaysoftmag.ro


Redacţia Today Software Magazine Fondator / Editor in chief: Ovidiu Mățan ovidiu.matan@todaysoftmag.com Graphic designer: Dan Hădărău dan.hadarau@todaysoftmag.com Copyright/Corector: Emilia Toma emilia.toma@todaysoftmag.com

Lista autorilor Tudor Bîrlea

Mircea Vădan

Co-fondator @ Starcelerate

www.clujstartups.com

Camelia Hanga

Irina Scarlat

Training Manager @ Betfair

PR Manager @ How to Web & TechHub Bucharest

Claudia Mihu

Misaras Andreea

Software Developer @ Endava

Learning & Development Partner @ Betfair

Cornelia Stan

Ioana Armean

tudor@startcelerate.com

Camelia.Hanga@betfair.com

Traducător: Roxana Elena roxana.elena@todaysoftmag.com Reviewer: Tavi Bolog tavi.bolog@todaysoftmag.com Reviewer: Adrian Lupei adrian.lupei@todaysoftmag.com Contabil : Delia Coman delia.coman@todaysoftmag.com

Claudia.Mihu@endava.com

cornelia.stan@accesa.eu Communications Officer @ Accesa

mircea.vadan@gmail.com

irina.scarlat@howtoweb.co

Andreea.Misaras@betfair.com

ioanaa@imprezzio.com Business Analyst @ Imprezzio Global

Produs de

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

Simona Bonghez, Ph.D.

Philip Peterhansl

Speaker, trainer şi consultant în managementul proiectelor,

IT Consultant Automotive @ msg systems ag

simona.bonghez@confucius.ro

Philip.Peterhansl@msg-systems.com

Owner al Colors in Projects

Radu Vunvulea

Silviu Dumitrescu

Senior Software Engineer @iQuest

Java Line Manager @ Accesa

Adrian Abrudan

Thomas Morris

Senior partner & research director @ Loopaa

Freelance Web Developer

Alexandru Palade

Diana Bălan

Director of Product Development @ Yardi România

Java developer @ Accesa

Claudiu Mera

Radu Marius Florin

Software Developer @ Endava

Business & Data Analyst @Fortech

Lavinia Cazacu

Irina Savescu

Quality Assurance Manager @ HP România

Quality Assurance Engineer @ HP România

Radu.Vunvulea@iquestgroup.com

silviu.dumitrescu@accesa.eu

ISSN 2284 – 6352 adrian.abrudan@loopaa.ro

alexandru.palade@yardi.com

Copyright Today Software Magazine Reproducerea parțială sau totală a articolelor din revista Today Software Magazine fără acordul redacției este strict interzisă. www.todaysoftmag.ro www.todaysoftmag.com

Claudiu.mera@endava.com

lavinia.pop@hp.com

thomas.imorris@gmail.com

Diana.Balan@accesa.eu

radu.florin@fortech.ro

irina.savescu@hp.com

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

5


eveniment

Trenduri, tehnologii, antreprenoriat și proiecte de cercetare la Cluj IT Days 2014

C

ontinuă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ăţan

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

6

nr. 28/2014 | www.todaysoftmag.ro

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 sistemelor 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 analiză 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 asupra evoluției de la outsourcing la produse.

De altfel, subiectul prezentării sale frecvent 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 prezentări cu aceea a Dianei Ciorba care va analiza leadershipul feminin, în special din zona de IT. După prima pauză, seria prezentărilor 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 pentru î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ă


TODAY SOFTWARE MAGAZINE

bancară. Limbajele funcționale precum Scala sau F# au făcut în aplicațiile comerciale 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 întrebarea 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 designul ce încorporează pe de o parte aspecte din discipline tehnice precum informatica, 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âmplă 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 businessului 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 problema big data, nici măcar tehnic- sunt cel puțin 20 de baze de date NoSQL și nenumărate distribuții de executoare mapreduce. Dar odată realizată importanța și impactul pozitiv asupra dezvoltării businessului, 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 conduc 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 vechiului 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.

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

7


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.

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

8

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ă continue. 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

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

1200 de funders (majoritatea din România, SUA și Canada). Mai mult campania continuă încă o lună, astfel că se poate ajunge la suma de 100 000 de dolari, având astfel 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 îmbinarea 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 provocare este obținerea certificării CE și FCC și livrarea prototipurilor, în paralel găsirea unui furnizor de încredere. Iar dacă se strâng din campanie peste 150 000 de dolari, atunci va exista opțiunea deschiderii unei linii de producție proprie. În viitor vor oferi și posibilitatea customizării dispozitivelor (ex: sonerie, lumini și adăugare 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


TODAY SOFTWARE MAGAZINE

Competiție există, presupun că v-ați unde a fost detectat obiectul pierdut/furat. Apropo, încă o sugestie: Tintag pentru gândit la Tile deja (15.8 milioane de dolari investiție), doar că o dată ce se termină parole uitate - ar prinde foarte bine :-) bateria Tile-ului, poate fi aruncat la gunoi, nu-l mai poți folosi. Ei bine, Tintag-ul e PCB protyping machine Legat de campania de pe Indiegogo, singurul dispozitiv reîncărcabil de acest tip. După 6 ore de încărcare, bateria acescâteva sfaturi bune din partea lor: • pre-campania ajută destul de mult în tuia ține până la 4 luni. 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-campania 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%); Tintag este printre pionierii locali în • canalele de social media sunt extrem de importante atât pentru promovare cel puțin două domenii: produs hardware cât și pentru o conversație constantă cu și crowdfunding, campania lor fiind prinfanii, rezervați-vă timp de răspuns între- tre primele campanii romanești reușite pe Indiegogo. Mă bucur să văd că a fost inițiat bărilor venite de la funders, • ”stick to what you know” - au apelat la de clujeni și sper să vedem și alte proiecte ajutorul unei alte firme (DirectSpark) pe locale urmând această cale de succes. partea de marketing, unde nu aveau prea multă experiență.

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ădan

mircea.vadan@gmail.com www.clujstartups.com

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

9


educație

M

Ce te face să mergi mai departe?

ai 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 TechLeague

echipele de proiect, Comunicare și managementul stakeholderilor, Leadership și management în proiectele Agile, Instrumente și practici; • I n i ț i e r e a p r o i e c t u l u i : Ma n a g e m e nt u l proiectelor și al portofoliilor, Indicatori cheie în proiecte; • B a c k l o g m a n a gement: valoare, 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 d e p l an i f i c are Ag i l e , Tehnici de estimare, Story mapping, Product roadmaps, Wireframes; • Iterația: Daily standups, Review-uri și retrospective. • își propune ca, timp de două zile, să ofere un insight mai bun asupra managementului de proiecte, creșterii productivității și dezvoltării unor relații de colaborare mai strânse - folosind metodologia Agile.

Organized by

Part of

Acesta ești tu, cel care-și lasă curiozitatea să domine, dincolo de orice limită. Cel pentru care detaliile contează . Cel care prin explorare și experimentare își decantează 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 Cluj-Napoca, 14th – 15th of November 2014 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 2 days of training in managing agile oamenii ca tine, cei care au avut mereu projects, increasing rolul de a depăși așteptările, de a aduce la productivity and developing strong lumină o nouă rezolvare, de a îmbunătăți collaborative - în fiecare zi - definițiile performanței și relationships by using ale eficienței. Oamenii a căror contribuție Agile methodologies - în egală măsura individual și ca echipă de specialiști - reușesc să aducă o schimbare Embrace change, TRAINER în tehnologie și în IT. deliver excellent Florian Ivan results and learn more Pentru acele lucruri care contează penCSM, CSP, PMI-ACP, about: tru dezvoltarea ta, am fondat TechLeague. PMP, Prince2 agile delivery teams, Practitioner, MCTS Gândindu-ne la aspecte precum: project initiation, backlog management, învățare, mentoring, knowledge-sharing, release & iteration 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 eveniAvailable places 10 Be the first to register at: mente sau programe speciale prin care cei pasionați de IT își pot atinge potențialul, în Participation fee 150 € diana@tech-league.net drumul lor de a-și depăși propriile limite. until 31.10.2014 TechLeague cuprinde: TechCampus, Trainingul va fi susținut TechTraining, TechInspire, TechExcellence, Evenimentul este deschis și pentru TechCorner și TechInitiative, fiecare dintre de Florian Ivan: cu peste 15 acestea atingând câte unul din aspectele ani de experiență ca trainer în industria tine. Dacă vrei să participi, trimite-ne un IT (software), Florian are o perspectivă e-mail la diana@tech-league.net. care-ți influențează evoluția. Intensive Agile este un eveniment unică asupra modului de a conduce procu locuri limitate (10). Pentru mai multe iecte, susținând teoria și framework-urile Intensive Agile TechTraining informații, vizitează-ne pe facebook.com/ cu exemple concrete, studii de caz și Cel mai recent eveniment marca Te c h L e a g u e e s t e Int e n s i v e Ag i l e lecții învățate. Florian este consultant în JoinTechLeague. TechTraining. Acoperind subiecte precum: management de proiect, cu experiență • Introducere în metodologiile și prac- vastă în managementul proiectelor penCornelia Stan cornelia.stan@accesa.eu tru companii precum Microsoft, dar și ticile Agile; • Diverse abordări în Agile: Scrum, managementul unui startup în domeniul Communications Officer @ Accesa XP, Kanban, Lean, FDD, Crystal, DSDM; Business Intelligence de la stadiul de for• E c h i p e l e A g i l e : R o l u r i ș i mare până la achiziție. responsabilități, Responsabilități în

10

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

INTENSIVE AGILE


eveniment

TODAY SOFTWARE MAGAZINE

Cum a fost la conferința Smartweb

S

martweb 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 paralel, 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 principiu 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 adaptabile ș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

ș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 consistent 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 Guardian 3 și autorul cărții “Css maintenable with Saas”. La 2 d ow e b s it e s n e e dt o l o o k e x a c t l y t h e s a m e i n e verybrowser.com

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

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 utilizarea 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 anumit 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 ierarhiei elementelor. Blocurile de declarații pot fi reutilizabile prin mixins, pot avea chiar și parametrii de intrare și pot fi folosite mai târziu cu directiva @include, de

Our core competencies include:

Product Strategy

Product Development

Product Support

3Pillar Global, a product development partner creating software that accelerates speed to market in a content rich world, increasingly connected world. Our offerings are business focused, they drive real, tangible value.

www.3pillarglobal.com

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

11


eveniment Cum a fost la conferința Smartweb 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 principale, 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 lansă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 necesară 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 fontului în Photoshop, numele real al fontului din Css, un nume abstract pe care developer-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ă înlocuirea 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 interesăm personal despre compania respectivă. Dacă avem șansa să vizităm sediul clientului, 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

12

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 permanent (profil, date de contact) și poate exista conținut temporar, format din campanii sau promoții. Putem să stabilim de la început scheletul viitoarelor pagini în CMS, dacă folosim unul, și ar fi important 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 finalizată; 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 responsabilitatea 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 recomandă 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 utilizatorii 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ă websiteul, și alt șablon pentru a prezenta istoricul companiei. Se vehiculează că afișarea profilurilor angajaților companiei pe website cu informații succinte despre activitatea,

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

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 lungul anului a conținutului campaniilor ( exemplu Halloween, Crăciun, etc ); • existența activităților recurente, astfel î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 articole pe teme de UI, a ținut o prezentare a framework-urilor Css prin comparație cu toolkit-urile UI cu care sunt adesea confundate. 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 proiecte 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


TODAY SOFTWARE MAGAZINE 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 icosidodecaedru 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 standards project și lucrează în prezent la Opera. În cadrul prezentării a făcut un sumar al momentelor importante din istoria standardelor 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 organizată ș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 domeniul 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

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!

Claudia Mihu

Claudia.Mihu@endava.com Software Developer @ Endava

5 cssdeck.com/labs/mona-lisa-with-pure-css 6 codepen.io/thebabydino/

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

13


eveniment

Tendințe în tehnologie, dezvoltarea de jocuri, product management & investiții de tip angel la How to Web 2014

H

ow 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. Cea de a cincea ediție internațională a How to Web reprezintă un nou început pentru conferință: evenimentul se maturizează și propune audienței un format mai complex care tratează în profunzime subiecte specifice. Pe scena principală a evenimentului vor fi abordate subiecte precum dezvoltarea de produse tech cu potențial disruptiv, tendințele care vor avea un impact semnificativ 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 mondial care își vor împărtăși experiența și cunoștințele acumulate de-a lungul timpului. Printre invitații care au confirmat până în prezent participarea la înregistrează o creștere rapidă, având în companie a fost cumpărată de IXIA în eveniment se numără: Manuel Heilmann prezent peste 10 milioane de utilizatori), 2012 pentru 160 milioane USD). În paralel vor fi organizate trei track-uri (Co-Fondator & CEO Coinzone, startup Paul Papadimitrou (Innovation Strategist, care permite utilizatorilor să efectueze UK, analist cunoscut la nivel internațional specializate despre product management, tranzacții cu monede digitale precum care a vorbit la evenimente precum LeWeb dezvoltarea de jocuri și investițiile de tip Bitcoin), Ze Pinto Ferreira (Co-Fondator – Paris, Londra; SXW – SUA sau Social and angel, care vor oferi unor categorii specifice și CEO FNV Labs, companie care produce Digital Marketing Conference – New York, de audiență șansa de a acumula cunoștințe Mellow, prima mașină de gătit sous-vide Singapore, London), Michael Ni (Senior și competențe relevante pentru domeniile controlată prin smartphone, care a avut o VP Marketing & Products Avangate, US, lor de interes, precum și oportunitatea de campanie de crowdfunding suprafinanțată companie care a fost achiziționată anul a interacționa cu profesioniști de top din cu 300%), Florian Meissner (CEO & trecut de fondul de investiții Francisco industrie. Astfel, PRODUCT TRACK dezvolCo-Fondator EyeEm, Germania, comu- Partners) sau Dennis Cox (Chief Product nitate a pasionaților de fotografie care Officer IXIA, US, antreprenor a cărui tat în colaborare cu Mozaic Works, va aduce în discuție subiecte precum product 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 exp er ienț a unora dint re cele

14

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


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. Organizat în colaborare cu 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 ridicat 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 partenerilor principali Telekom România, IXIA, Bitdefender și Grapefruit și al partenerilor 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ă produse inovatoare în domeniul tehnologiei pot aplica la cea de a treia ediție Startup Spotlight, competiție și program de mentorat 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 siteul programului http://startupspotlight.co Mediatizarea evenimentului este asigurată 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 Web

How to Web este cel mai important eveniment dedicat inovației, tehnologiei și antreprenoriatului din Europa de Sud-Est. Conferința se adresează inovatorilor în tehnologie, antreprenorilor web, dezvoltatorilor de produse tech, companiilor 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 disponibile online pe site-ul conferinței http:// howtoweb.co Irina Scarlat

irina.scarlat@howtoweb.co PR Manager @ How to Web & TechHub Bucharest

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

15


eveniment

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

Î

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), metodologii 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 investitori, 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 profitabilitatea, prin investiții de succes și beneficiul adus de noile conexiuni create în procesul investițional. Companiile de IT ce doresc să pornească 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 recomandă 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, respectiv, 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

16

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 companie de IT: 1. marketing – o companie are ocazia 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 crearea 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 dintre 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 companiilor mature în star tupuri. Facem aceasta acoperind întregul flux de

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

activități, de la descoperirea startupurilor și evaluarea oportunităților până la configurarea 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 sprijinim 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 octombrie și 1 Noiembrie, și se va desfășura în Canary Wharf la Level39. Evenimentul Startcelerate Pitch & Match va fi o oportunitate 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 partenerii și invitații noștri: universități importante, acceleratoare, firme de avocatură și corporații din UK, Germania, Belgia si Olanda. Vă invit să vizitați pagina evenimentului nostru la adresa www.london. startcelerate.com și să-mi scrieți la tudor (at) startcelerate.com Tudor Bîrlea

tudor@starcelerate.com Co-fondator @ Starcelerate


TODAY SOFTWARE MAGAZINE

comunități

Comunităţi IT

T

oamna î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.

Transylvania Java User Group Comunitate dedicată tehnologiilor Java. Website: www.transylvania-jug.org Data înfiinţării: 15.05.2008 / Nr. Membri: 589 / Nr. Evenimente: 47 Comunitatea TSM Comunitate construită în jurul revistei Today Software Magazine. Website: www.facebook.com/todaysoftmag www.meetup.com/todaysoftmag Data înfiinţării: 06.02.2012 /Nr. Membri: 1826/Nr. Evenimente: 24 Cluj Business Analysts Comunitate dedicată analizei de business Website: www.meetup.com/Business-Analysts-Cluj Data înfiinţării: 10.07.2013 / Nr. Membri: 91 / Nr. Evenimente: 8 Cluj Mobile Developers Comunitate dedicată tehnologiilor mobile Website: www.meetup.com/Cluj-Mobile-Developers Data înfiinţării: 05.08.2011 / Nr. Membri: 260 / Nr. Evenimente: 16 The Cluj Napoca Agile Software Meetup Group Comunitate dedicată metodelor Agile de dezvoltare software. Website: www.agileworks.ro Data înfiinţării: 04.10.2010 / Nr. Membri: 433 / Nr. Evenimente: 91

Calendar Octombrie 21 (Cluj) Lansarea numărului 28 a Today Software Magazine www.todaysoftmag.ro Octombrie 22 (Cluj) Digital Marketing Community Launch meetup.com/DigitalMarketingCluj/events/213782162/ Octombrie 23 (Cluj) 3rd BIG data/Data science Cluj-Napoca Meetup meetup.com/Big-Data-DataScience-Meetup-Cluj-Napoca/events/213544492/ Octombrie 24 (Cluj) Catalysts Coding Contest in Cluj codingcontest.catalysts.cc Octombrie 30 (Cluj) TeCOMM tecomm.ro Octombrie 31-1 Noiembrie (Cluj-Napoca) Conferința Typo 3 - T3EE www.t3ee.org

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

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

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

Noiembrie 20-21 (Cluj) MobOS Conference romobos.com

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

Noiembrie 22 (Cluj) OSOM – Open Source Open Mind osom.ro Noiembrie 25-26 (Cluj) Cluj IT Days - recomandarea TSM itdays.ro Noiembrie 28-29 (București) DefCamp 2014 defcamp.ro www.todaysoftmag.ro | nr. 28/octombrie, 2014

17


concurs

programare

BUILD FOR FUN @ FedEx Day

D

Andreea Misaras

Andreea.Misaras@betfair.com Learning & Development Partner @ Betfair

Camelia Hanga

Camelia.Hanga@betfair.com Learning & Development Manager @ Betfair

acă 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”. „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ă

18

nr. 28/2014 | www.todaysoftmag.ro

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, oriunde î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 compania 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 propriilor produse. Având aceste date în minte, nu e de mirare că acest concept de eveniment 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,


programare 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ăspunsul 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: complexitatea 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 planuri despre ce vor face la FedEx și ce nume de echipă să-și aleagă

TODAY SOFTWARE MAGAZINE

(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 branded. 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 bateriile 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 ridicate. 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 www.todaysoftmag.ro | nr. 28/octombrie, 2014

19


concurs BUILD FOR FUN @ FedEx Day 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, Foarte fain tot, doar că tot nelămurit am rămas. Două lucruri 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 motivate să le implementeze. Doar atât. Întrebări, comentarii, cuvinte-nu mai am.

ș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.

mă mai nelămuresc. Ce rămâne după FedEx Day astfel încât businessul 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

20

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


diverse

Creativitate Aplicată

I

ndustria 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.

Alexandru Palade

alexandru.palade@yardi.com Director of Product Development @ Yardi România

Putem începe cu un exercițiu. Întreabă orice profesionist IT căruia îi pasă de dezvoltarea 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 provocă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 principalul nostru mijloc de exprimare. La o analiză mai aprofundată vom constata însă ca percepția asupra creativității în industria IT este distorsionată. Atât programatorii cât și ceilalți profesioniști IT sunt creativi prin natura lor, dar realizează arareori 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 antreprenorilor. 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ă contribuim cu tot felul de idei! Trebuie să mă întreb cine ar mai rezolva toate provocările tehnice dacă am face cu toții asta. Ac e a s t ă v i z iu n e l i m it at ă a s upr a 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!

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 încurajează mereu să gândească în afara tiparelor. Jack își parchează mașina electrică monopost î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 catalizator 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ă Creativitatea nu este Inovație Creative Jack este un profesionist IT care își mi-aș dori acum și la biroul meu o bucătărie www.todaysoftmag.ro | nr. 28/octombrie, 2014

21


diverse Creativitate Aplicată numită Salonul Îndestulării. Dar este oare inovația încurajată de aceste locuri singurul 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 probleme concrete prin aplicarea judicioasă a cunoștințelor și practicilor inginerești. Procesul prin care rezolvăm aceste probleme este unul inerent creativ. Hackerul care găsește găuri de securitate este cu siguranță creativ. La fel și arhitectul software care proiectează un sistem 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 paralizează scriitorii în aceeași măsură cu aceste provocări îți dau ample oportunități programatorii. De unde să încep? Ce să fac să fii creativ. 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 nenuInspirație Divină Hai să ne întoarcem pentru moment la mărate ori. 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 posibilă 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ă eficientă de sharding pentru infrastructura de Mongo. E vorba de acea primă acțiune care

Î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 atitudini 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 abordă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 problemă, scanează-ți rapid memoria și caută niște abordări care au o șansă oricâ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 brainstorming, 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

jobs-cluj@yardi.com Yardi Romania

22

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


TODAY SOFTWARE MAGAZINE între timp ai obținut informații care îți confirmă că un DBA ar reduce la jumătate Puține probleme necesită o soluție timpul de livrare al proiectului. S-ar putea complet nouă. Creativitatea este însă își schimbe poziția. necesară și în combinarea de elemente existente într-un mod inovator sau a apli- Cele Două Himere cării unei soluții cunoscute într-un proiect Prima creatură mitologică este mediul particular. Acest fapt e valabil atât pentru de startup inovator, unde inspirația atârna programatori cât și pentru pictori, scriitori pe fiecare perete. Aceasta este Mecca în sau manageri de produs. Cu alte cuvinte, special a celor care cred că ideile de produs creativitatea nu cuprinde doar inventa- sunt limita creativității în IT. Alții reușesc rea a ceva nou ci și aplicarea inovatoare a să depășească această iluzie și caută să se unei abordări într-un context specific. În exprime prin soluții la probleme tehnice, ambele aplicații sunt necesare cunoștințe, activitate pentru care au atât înclinație experiență și o atitudine deschisă. cât și cunoștințe. Dar și aici îi pândește o capcană. A doua himeră este falsa diversitate. Soluții Creative Mulți programatori își doresc o diversiMintea unui profesionist IT este reglată pentru a cuprinde sisteme, iar sis- tate cât mai mare de proiecte și tehnologii. temele sunt încadrate de reguli, stări și Îndrăznesc să afirm că această dorință este presupuneri. Această înclinație poate fi adesea înșelătoare. Nu contest că expunedezavantajoasă în tentativa de a fi creativi. rea de acest fel este utilă în mai multe etape Spațiile problemă în care operăm din dezvoltarea profesională, dar haideți conțin adesea mai puțin limite și constrân- să explorăm motivația. Oamenii caută geri decât am crede la prima vedere. Se aceste condiții pentru că își doresc să aibă poate întâmpla să confundăm presupuneri oportunități de a învăța. Aș argumenta că cu limite și constrângeri imutabile. Uneori diversitatea de probleme de rezolvat este e greu să identificăm aceste false limite dar cel puțin la fel de importantă ca și diversitocmai această capacitate duce la soluții tatea de proiecte și tehnologii. Fiecare este creative. Un profesionist IT care pune pre- importantă din alte motive, dar trebuie să supunerile sub semnul întrebării poate găsi evităm capcana falsei percepții că o mulsoluții inovatoare pe care alții le-ar fi ratat titudine de proiecte în tehnologii diferite ne oferă automat oportunități de învățare complet. și creștere. Anne lucrează frenetic pentru a găsi bug-ul de stocare ce se manifestă în fiecare Un Profesionist IT Creativ săptămână cu regularitate. Nu reușește ”Am nimerit-o!” strigă Jack năvălind nicicum să-i dea de capăt. După nenumă- din biroul său. rate ore de debugging în proceduri stocate, O ia la fugă spre biroul CEO-ului cu găsește cauza în cel mai neașteptat loc cu respirația sacadată de surescitare. Abia putință. Trecând pe lângă camera servere- poate să își suprime entuziasmul când lor, Anne vede o persoană care spală geamul sare în biroul din colț, imitație de junglă din ușă. În spatele său, mătura se sprijină de tropicală. router-ul principal. ”Johnny, am nimerit-o! Știu exact ce va duce VCShare pe locul 1! Avem nevoie ”Auzi Bob”, întreabă Anne, ”cât de des de un software de recunoaștere facială ca vii pe aici să cureți geamurile?” să detectăm toate fețele din video-uri și să le înlocuim cu fețe de pisici. Dacă facem ”Păi, în fiecare vineri!” explică Bob cu asta ne va exploda KPI-ul fundamental de mândrie. ”Nu ratez nici o săptămână.” medie-pisici-per-video!” Creative Jack e un tip ok și ideea lui cu Presupunerile vin în multe forme și pisici chiar s-ar putea să funcționeze. Aș depistarea lor nu e deloc ușoară. Mă uit vrea totuși să propun o alternativă. în locul potrivit? Încerc oare să rezolv Haideți să fim creativi pragmatici. Hai problema reală? Totul poate fi chestionat, să nu gonim după cele două himere și de la cerințe la resurse, de la infrastruc- să ne amintim că inovația nu este limita tură la orice altă variabilă ”imutabilă”. creativității. Avem nenumărate feluri de Da, e posibil ca managerul tău să-ți fi zis a învăța și de a ne exprima în aria noasacum 3 luni că nu există nici cea mai mică tră de expertiză. Creativitatea nu vine din posibilitate de a adăuga un nou membru intervenție divină; provine mai degrabă echipei, dar ar fi bine să-i spui și ei dacă din curiozitate, cunoștințe și capacitatea de cadru de grup.

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 creativitatea 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 comunicare ș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 compensează pe deplin.

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

23


programare

programare

Recenzie pentru “Haskell Data Analysis Cookbook”

A

m 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ă cititorul 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 programatorilor experimentați. Cartea acoperă o paletă foarte largă de topicuri de programare ș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 nivelul “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ă exploratorie, 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 analist. 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

Young spirit Mature organization A shared vision Join our journey! www.fortech.ro

24

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

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 prototip 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 concurentă 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 limbajului 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


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 fapte

Parcurgâ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 fiecare 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 precum ș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 minusurile 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 limbaje de programare. Când vine vorba de puritate, operațiile I/O sunt un fel de “tendonul lui Ahile” pentru Haskell. Autorul evită să se blocheze într-un discurs teoretic 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, capturate din pagina web, sau citite din baza de date nerelațională MongoDB. Rețetele prezentate 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, parsing), apoi sunt rețete pentru agregare sau raportare de date (tabele de frecvență) și în al treilea rând sunt secțiuni dedicate

TODAY SOFTWARE MAGAZINE similarității în date (distanțe, corelații). Aceste probleme ocupă un rol central în analiză de date și consider că era necesară acordarea unei mai mari importanțe, e ve ntu a l d e t a l i at e în capitol separate. Curățarea și agregarea datelor ocupă probabil peste 80% din activitatea 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 construcția unei aplicații software această abordare este foarte bună, iar exemplele sunt foarte utile. În general un analist dorește să investească un efort redus pentru curățarea datelor, iar librăriile destinate acestui scop ar fi foarte apreciate. Un analist este cel mai adesea interesat 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 similaritate, 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 matematică. 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 ilustrarea acestor exemple de tip “Hello world!” de analiză multivariată. Aceste seturi sunt în mod frecvent utilizate în cărți sau tutoriale pentru alte limbaje de programare, în vederea rezolvării unor probleme de analiză multivariată, sau prelucrare de date. Capitolul 9 tratează probleme de concurență și paralelism. Explicația conceptelor și a modului de utilizare a limbajului mi s-a părut foarte clară. Autorul nu intră în detalii, dar pentru mine trecerea î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 datelor din Twiter sau canale IRC, precum și comunicarea în timp real prin socket-uri.

Radu Marius Florin radu.florin@fortech.ro

Business & Data Analyst @Fortech

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

25


programare

programare

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

Î

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 Claudiu „

Claudiu.mera@endava.com Software Developer @ Endava

26

nr. 28/2014 | www.todaysoftmag.ro

noi direcții a framework-ului său binecu- a framework-ului .NET pe mașina pe care noscut .NET, direcție care poartă numele trebuiau rulate aplicațiile. Aceasta presupune alocarea unui spațiu mărit pe disc. generic vNext. De asemenea, apar probleme în cazul în care se dorește rularea unei aplicații cu o Ce este vNext? În cadrul conferinței TechEd de anul altă versiune de .NET decât cea existentă, acesta, Microsoft a prezentat viitoarea aceasta presupunând schimbarea versiversiune a framework-ului .NET intitulată unii globale a framework-ului pe mașina vNext, care a evoluat ca o soluție firească respectivă, lucru care poate afecta toate înspre a acomoda toate cerințele actuale programele existente. Toate acestea duc la ale dezvoltatorilor. Mai exact, se dorește ca un timp sporit pentru setarea aplicațiilor toate schimbările să aducă modul de reali- pe un anumit mediu. vNext aduce organizarea zare al aplicațiilor la un alt nivel. vNext însumează o serie de modi- funcționalităților sub forma de pachete. ficări aduse platformei .NET. Acestea Așadar, toate dependențele unei aplicații implică: modularizare ridicată, tranziție ( inclus iv f rame work -u l, C ommon ușoară a aplicațiilor către cloud, facilita- Language Runtime) sunt constituite ca rea contribuțiilor la framework prin cod pachete Nuget care se lansează simultan open source, un ciclu rapid de dezvoltare, cu aplicația. De asemenea, pentru a optilibera alegere a tool-urilor de progra- miza resursele aplicațiilor cloud, Microsoft mare, și nu în ultimul rând libera alegere a decis separarea framework-ului în două a platformei pe care pot rula aplicațiile. În variante: una pentru soluțiile on-preacest context, întrebările pe care mulți și le mise, respectiv una pentru aplicații cloud. adresează sunt cum se concretizează mai Varianta vNext optimizată pentru cloud exact vNext în cadrul procesului de dez- conține doar acele resurse care sunt strict voltare și ce facilități aduce acesta la nivelul necesare pentru desfășurarea unei aplicații în cloud și nimic altceva. Așadar, această tool-urilor? variantă a framework-ului nu conține referințele necesare pentru Windows Modularizarea completă a referințelor Una dintre modificările majore aduse Forms sau Windows Presentation platformei .NET este modularizarea totală. Foundation. Modularizarea framework-ului se Până acum, era necesară instalarea globală


programare 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 listarea 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

TODAY SOFTWARE MAGAZINE 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 Injection

Viitoarea 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 => {

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

27


programare vNext: Viitoarea direcție a aplicațiilor .NET routes.MapRoute( name: “default”, template: “{controller}/{action}/{id?}”, defaults: new { controller = “Home”, action = “Index” }); routes.MapRoute( name: “api”, template: “{controller}/{id?}”); }); }

Așa cum se poate observa, se oferă un control sporit și se permite setarea explicită 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ă developerul 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 parametri ale funcționalităților incluse (prin metodele de forma UseEntityFramework sau UseMvc), cum ar fi configurarea rutelor î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

28

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 specificarea 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 compilatoarelor .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 dinamică 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 salvarea 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 productivitatea tuturor dezvoltatorilor.

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

Concluzii

Inovaț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 versiuni 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 opensource, toată comunitatea are mereu acces la ultimele funcționalități ale vNext, iar dezvoltarea acestuia se realizează printr-un proces de feedback continuu. Viitoarea versiune 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.


programare

Websockets – http pe steroizi

H

ttp 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.

Philip Peterhansl

Philip.Peterhansl@msg-systems.com IT Consultant Automotive @ msg systems ag

Întrebările puse la Conferința Java 2014 pentru crearea programatică a punctului final în Cluj au fost simptomatice pentru noile (endpoint), dar nu ne vom ocupa de aceasta tehnologii: în acest articol. Mai întâi codul, apoi explicațiile mai jos: Cine a auzit de Websockets? @ServerEndpoint(value = “/service”) Aproape toți dintre cei aproximativ 250 de public class ChatServerEndpoint { private static final participanți. Set<ChatServerEndpoint> connections = Cine a folosit deja Websockets? new CopyOnWriteArrayNumai o mână de oameni, în jur de 10 – 15. Set<>(); În final, cine a utilizat Websockets într-un proprivate Session session; iect comercial? @OnOpen După cum era de așteptat, nimeni nu a ridicat public void start(Session session) { mâna. this.session = session; 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 conectarea 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>

}

}

connections.add(this);

Proprietatea valoare a ServerEndpoint definește calea pe care acest endpoint o receptează. URL-ul pentru conectarea la acest endpoint este: ws://<host>:<port>/<webapp >/<value property>. Ad n ot aț i a @ O n O p e n m arc h e a z ă 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ă: @OnClose public void end() { connections.remove(this); }

În acest exemplu simplu de dialog, clientul deconectat este înlăturat din setul de conexiuni. Nucleul oricărei aplicații antrenate Server Java: Adnotat ServerEndpoint de date, care implementează Websockets, Mai întâi creăm serverul utilizând ServerEndpoint adnotat, definit în JSR- este trimiterea și primirea de date. Soluția 356. Acolo mai există și o specificație cea mai elementară pentru primirea de www.todaysoftmag.ro | nr. 28/octombrie, 2014

29


programare Websockets – http pe steroizi mesaje într-un JSR Endpoint este adnotarea unei metode cu @ OnMessage și următoarea semnătură: @OnMessage public 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 JSR356 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 Java

Pentru crearea unui client Websocket în Java, un ClientEndpoint trebuie să fie definit într-un mod similar cu ServerEndpoint: acest exemplu. Adăugați următoarele funcții la POM al proiectului client al @ClientEndpoint vostru pentru a utiliza Tyrus în modul autonom: public 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) { }

<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 În acest exemplu simplu de dialog, noi trebuie doar să imple- metodei connectToServer din ClientManager. Vezi sursa commentăm metoda adnotată @OnMessage. Metoda numai indică pletă pentru ChatClient: mesajul primit pe consolă. public class ChatClient { Veți avea nevoie de o implementare JSR-356 pe partea cliprivate ClientManager manager; ent, deoarece nu există nicio implementare cuprinsă în Java JRE. Implementarea standard este Project Tyrus și este utilizată în public void connect(URI uri) { }

this.manager = ClientManager.createClient();

30

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


TODAY SOFTWARE MAGAZINE try { manager.connectToServer(ChatClientEndpoi nt.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 connectToServer, 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 mesajelor este realizată de către ChatClientEndpoint.

Javascript

Low Latency Eliminând jumătate din întregul ciclu cerere-răspuns, latența efectiv se înjumătățește.

Low Bandwidth Antetele 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 semnificativ mai mari decât antetele mesajelor websocket de 2 biți.

Dezavantaje

Principalul 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 pentru garantarea livrării mesajelor – o cerință majoră în utilizarea comercială. Deși nu sunt de nerezolvat, aceste două probleme sunt răspunzătoare pentru faptul că Websockets nu are amploarea pe care o merită.

Codul pentru un client Websocket Javascript este aproape identic cu Java ClientEndpoint. Conexiunea este realizată într-un Pe scurt mod specific browser-ului, căci Mozilla Firefox are o implemenDupă părerea mea, Websockets are într-adevăr beneficii tare individuală numită MozWebsocket în loc de Websocket imense în comparație cu comunicarea http tradițională. De aceea, standard: aștept cu nerăbdare să utilizez Websockets pentru un produs comercial în viitor. var connect = function(url) { Aș dori să compar Websockets cu XMLHttpRequest, înainte if (‘WebSocket’ in window) { socket = new WebSocket(url); de a avea parte de o reclamă exagerată, ca parte din AJAX: de } else if (‘MozWebSocket’ in window) { îndată ce XMLHttpRequest a devenit utilizabil cu biblioteci terțe socket = new MozWebSocket(url); } 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 utiliOperarea mesajelor are loc în interiorul metodei socket. zarea mai facilă a bibliotecilor de asemenea, conducându-se astfel onmessage, care ar trebui să fie suprareglată. Pentru afișarea aplicațiile client-server comerciale la un nivel nou. mesajelor dialog, vom crea un nou paragraf și îl vom atașa unei părți div din pagina html afișată. Link-uri utile 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:

Specificație protocol IETF Websocket: http://tools.ietf.org/html/rfc6455 Specificație W3C Websocket API: http://dev.w3.org/html5/websockets/ JSR-356 Java API pentru Websockets: https://jcp.org/en/jsr/detail?id=356 Proiect Tyrus: https://tyrus.java.net/index.html Endpoint-uri adnotate și programatice: https://blogs.oracle.com/arungupta/ entry/websocket_client_and_server_endpoint Comparație între Websockets și Comet: http://www.websocket.org/quantum.html Specificație Google pentru SPDY: http://dev.chromium.org/spdy/ spdy-whitepaper Siguranță Websocket: https://devcenter.heroku.com/ar ticles/ websocket-security Protocolul STOMP ca protocol aplicație simplu: http://stomp.github.io/ stomp-specification-1.2.html

Server push real După upgradarea websocket, nu mai este nevoie ulterior de cerințe din partea clientului. Serverul poate trimite mesajele sale după cum este nevoie. www.todaysoftmag.ro | nr. 28/octombrie, 2014

31


programare

Concurență şi data binding în JavaFX

Î

Silviu Dumitrescu

silviu.dumitrescu@accesa.eu Java Line Manager @ Accesa

Diana Bălan

Diana.Balan@accesa.eu Java developer @ Accesa

32

nr. 28/2014 | www.todaysoftmag.ro

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 binding. 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 implementând interfața Worker. Interfața Woker furnizează API-ul folosit de un „background worker” ce comunică cu UI-ul. Clasa T a s k 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 execută aceste task-uri. Un Worker este asadar un obiect ce lucrează într-un fir din background. Starea obiectului Worker este observabilă și utilizabilă 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 obiectul Worker rulează, starea sa devine RUNNING. Obser vație: chiar dacă obiectul Worker a pornit imediat, fără a fi programat, 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 timpul 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 întrerupt utilizând metoda cancel(), ceea ce trimite obiectul în starea CANCELLED.


arhitectură 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: n e w Thread(task).start(); Taskurile sunt utilizate pentru a implementa logica de lucru într-un fir din background. Pentru început trebuie să extindem 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 c a l l ( ) 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 T a s k este destinată a fi utilizată cu aplicații JavaFX şi ne asigură că orice modificări ale proprietăților publice, notificări de eroare, manipulatoare de evenimente şi stări apar în firul aplicației JavaFX. În interiorul metodei call() putem utiliza metodele: updateProgress(), 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.

TODAY SOFTWARE MAGAZINE newSingleThreadExecutor();): @Override public void handle(ActionEvent event) { System.out.println(“Count Started”); bar.progressProperty().bind(countTask.progressProperty()); 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 serviciul dat, • De un fir daemon, dacă niciun E x e c u t o r 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 (CounterService cs = new CounterService();) şi pornim firul astfel: if (cs.getState() == State.READY) { cs.start(); }

Data Binding

Data 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 exprimarea 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() pentru 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); www.todaysoftmag.ro | nr. 28/octombrie, 2014

33


programare Concurență şi data binding în JavaFX 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); }

34

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

@Override public void stop() throws Exception { super.stop(); } public static void main(String[] args) { launch(args); } @Override public 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ă!


programare

Cod curat – Comentarii și format

Î

Radu Vunvulea

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

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 problema 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.

În acest articol vom vorbi despre comentariile 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 dezvoltatorii 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.

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 dezvoltatorii ș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.

Comentarii

Exemple neaecvate de comentarii

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ă?

Câ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 comentariile 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

Cod greșit

Adesea, comentariile sunt utilizate acolo unde codul este greșit și sunt folosite 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 întrun fel care să exprime ceea ce faceți acolo.

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

35


programare Cod curat – Comentarii și format ș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 comentariu 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.

Jurnal

Acum 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 modifică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 Atunci când aveți un cod care nu poate fi înțeles, comentari- găsi mai ușor o parte anume a codului. 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ă Exemple bune de comentarii acțiunea pe care o faceți acolo. Da, există cazuri în care comentariile sunt utile și pot adăuga În multe cazuri, puteți extrage o metodă cu un nume semnifi- valoare codului vostru. cativ. Cititorul va înțelege foarte ușor ce se petrece acolo, pe baza numelor metodelor și a câmpurilor. Legal și informativ Există cazuri când trebuie să adăugați un comentariu din motive legale. Codul se poate afla sub termenii unei licențe Comentarii inutile Adăugarea comentariilor în cod numai pentru că tu crezi că anume, iar acest lucru trebuie să fie specificat. În acest caz, trebuie este necesar, nu este un lucru bun. Se întâmplă adesea ca cineva să adăugați un comentariu care să specifice acest lucru, dar fără să adauge comentarii în cod numai pentru că el crede că așa a adăuga acolo toți termenii licenței. Puteți indica din comeneste bine, fără a avea un motiv real. La sfârșit putem avea multe tariu un document sau link-uri anume care descrie termenii comentarii care nu sunt folositoare și numai îngreunează citirea licenței. Nu vreți să aveți 200 de rânduri de comentarii cu aceste informații. și înțelegerea codului. Mai sunt și cazuri când un comentariu poate adăuga valoare unui cod. De exemplu, atunci când oferim mai multe informații Redundanța despre ceea ce redă o metodă. Fiți atenți că există cazuri când un 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 nume bun al unei metode poate să înlăture necesitatea comentaacelui câmp sau acelei metode. De exemplu, o metodă denumită riilor legate de valoarea redată. „SendEmail” nu mai are nevoie de niciun comentariu adițional atunci când este apelată. Este clar din numele metodei că se tri- Intenție și clarificare mite un e-mail. Un comentariu este întotdeauna util când este exprimată Un alt exemplu bun este câmpul denumit „vatValueForCur- intenția. Nu este important să comentăm ceea ce am făcut în cod, rentOrder”. Din numele câmpului este destul de clar ce valoare deoarece cititorul poate să vadă codul în sine. Este mai important este stocată în acest câmp. Nu ai nevoie de un comentariu care să explicăm ceea ce am vrut să facem în cod. să spună „Valoarea comenzii curente este stocată.” În acest caz, Există cazuri în care nu putem exprima exact care este intenția comentariul nu adaugă nicio informație valoroasă. 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 bibliInducerea în eroare În multe cazuri, dezvoltatorii nu exprimă ceea ce intenționează otecă externă pe care a trebuit să îl evităm, sau poate clientul a să facă. Din această cauză, puteți găsi un comentariu care spune avut o cerință ciudată. că este trimis un e-mail către client și poți ajunge să faci debugging

Explicarea codului

36

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


TODAY SOFTWARE MAGAZINE Amplificare și avertizare

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ă.

Documentație API

Câmpuri

Există 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. Toate API-urile publice care sunt destinate a fi utilizate de către clienți și dezvoltatori externi ar trebui să fie documentate 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 dezvoltatorii 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

Indentație

Este foarte util să respecți un standard 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ă reperezi o variabilă, o acțiune executată de o subordonată FOR (pentru) sau IF (dacă) și Variabile Este recomandat să declari variabilele așa mai departe. Cu noile IDE și unelte este foarte ușor cât mai aproape posibil de locația unde sunt folosite. Nu vrei să declari o variabilă să respecți aceeași indentație pretutindeni. în linia 1 și să o utilizezi numai din linia 15.

Stil de codare și editare

Este de dorit să grupezi toate câmpurile î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 pentru 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ții

Funcțiile care sunt dependente ar trebui 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 codului

Codul 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.

Cel mai important lucru într-o echipă este să ai un singur stil de editare care trebuie 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 diferite 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.

Concluzie

Comentariile și formatul codului pot face codul mai ușor de citit și de înțeles. Încercați să definiți aceste reguli la începutul 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

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

37


testare

testare

Software Testing World Cup

S

Lavinia Cazacu

lavinia.pop@hp.com Quality Assurance Manager @ HP România

Irina Savescu

irina.savescu@hp.com Quality Assurance Engineer @ HP România

38

nr. 28/2014 | www.todaysoftmag.ro

oftware 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 concurs ș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 interesantă 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 echipelor 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 evenimentul 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 entuziasmul 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- pentru a mai putea fi eficiente. La urma urmei, toate aveam obligații profesionale de respectat ș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 prieteni. 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


testare 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 specificul 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 detalii cum ar fi amprenta online a companiei, competitori și puncte slabe. Generarea profilului dura cam 10 minute, dar într-o sesiune de testare limitată de timp, nu ai luxul de a aștepta după un proces. De multe ori am uitat să verifică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ândule 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 principal personalul din vânzări, probabil

TODAY SOFTWARE MAGAZINE obișnuit cu o anumită funcționalitate, dar perioada de învățare ar putea fi semnificativ micșorată folosind câteva îmbunătățiri standard (hint-uri, o pagină de help, navigare mai ușoară pe ecran). Un aspect cheie al concursului l-a reprezentat raportul de testare, document 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 general 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 important 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 spontaneitatea 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 noastre. 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 calcula 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 important 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 rezultate 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 produsul 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ă terminăm la timp. Dar cel mai important, etapa continentală 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 noiembrie 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.

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

39


management

management

Primul pas în analiza de business

D

upă cum am menționat în articolul ‘Cadrul analizei de business’ din numărul 26, voi continua seria de articole în acest domeniu. Subiectele pentru articolele 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. Ioana Armean

ioanaa@imprezzio.com Business Analyst @ Imprezzio Global

40

nr. 28/2014 | www.todaysoftmag.ro

În același articol menționam orientarea 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 documentat 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ânzări există o primă etapă sub numele de

prospectare de piață. Prospectarea este ansamblul de mijloace care permite intrarea în contact cu potențialii clienți care au nevoie de produsele și serviciile care le oferiți. Aceasta este perspectiva pe care trebuie 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 analizei 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 viitoarele 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.


TODAY SOFTWARE MAGAZINE Despre echipă

business în baza căreia se face dezvoltarea și de a o îndeplini cu succes. Pentru a clarifica lucrurile de la început poți face următoarele: • creează o listă cu toate părțile implicate ș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ă comunice 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 clientul î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).

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 membru 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ă fiecare 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 proiect Asigură-te că ești informat în legătură cu matricea RACI (R-Responsable, Despre client Clientul va avea o imagine diferită A- Accountable, C- Consulted, I- Informed) pentru aproape orice membru din echipă formală sau informală și încearcă să incluzi în funcție de modul și contextul în care și rolul analistului de business în ea astcele două părți au interacționat. Poate unii fel încât să știe fiecare ce trebuie să facă. vor fi dezamăgiți, dar, din experiența de Dacă aceasta există doar la nivel informal până acum, așteptările din partea echipei încearcă să obții acordul părților și să o lași de dezvoltare de a avea un client tehnic nu în forma scrisă pentru ca oricine să o poată pot fi îndeplinite decât într-o măsură des- consulta la nevoie. Fă referire la ea ori de câte ori e necesar. tul de mică. Informații utile sunt despre: Clientul are în majoritatea cazurilor • care este Business Case-ul pentru orientare de business și va da direcția de proiect; urmat atât pe partea de business cât și pe • ce metodologii se folosesc și care partea tehnică. Cerințele sunt de cele mai sunt practicile pe proiect; multe ori de business, nicidecum tehnice. • ce tool-uri se folosesc; Acestea din urmă se modelează după • unde se găsesc documentele despre cerințele de business și nu invers. proiect; Obiectivul principal pentru un analist • cine sunt experții pe domeniu de business este cel de a înțelege nevoia de

(SME- Subject Matter Experts); • cine îți poate face un training despre 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.

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

41


management

BUGETUL DE MARKETING = BUGETUL DE PUBLICITATE?

M

ajoritatea 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: • E v e n i m e n t e c u c l i e n ț i i s a u 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.

de marketing. Realitatea economică din interiorul firmelor ține bugetul de marketing amestecat cu bugetele din celelalte departamente, dar trebuie făcute eforturi constante de către responsabilul de marketing pentru a avea o imagine generală asupra valorii create de companie în diferite 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ă intervină pe celelalte procese în companie? Aceste tipuri de analize și măsuri trebuie luate în calcul la nivelul bugetului general al companiei. În realitate se întâmplă 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 responsabilului 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.

Remarcați că din lista enumerată, unele aspecte țin de bugetul de la vânzări. Procesele? Țin de management. Concurența? Nimeni nu știe mai bine decât cei de la vânzări. Eficiența costurilor? Avem departament financiar… și management. E adevărat, dar analizele de marketing vizează altă tematică decât analizele financiare. Dacă managementul nu are suficientă expertiză de marketing atunci responsabilul de marketing ar trebui să analizeze toate procesele din companie care ajung Deci… cum ar trebui să construim să creeze valoare pentru clienți și ar tre- bugetul de marketing? bui să aibă măsuri dedicate în bugetul 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 acoperă 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 rezultatele așteptate și cum creează valoare pentru client. 5. Să țină bugetul realist, să fie monitorizat 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 Abrudan

adrian.abrudan@loopaa.ro Senior partner & research director @ Loopaa

42

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


comunități

TODAY SOFTWARE MAGAZINE

Dronele sunt aici

D

ronele 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. 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ă financiar omul de rând. În funcție de ceea ce vrei să faci cu ea, poți comanda online o dronă de dimensiuni standard (aproximativ 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 tehnică care creează electronice și gadgeturi de calitate acasă. Nerestricționați de harababura 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 societatea î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ăspundă 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 braconajului și la trimiterea pachetelor prin poștă, dronele sunt pe cale să lase o impresie de durată în viețile noastre. În următorii 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 drone@clujhub.com.

Thomas Morris

thomas.imorris@gmail.com

Freelance Web Developer

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

43


management

Gogu, Petrică și Lupu’

- 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 distractiv 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 imediat 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

44

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 continuă 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’ vizibil î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ăptămâna viitoare, că nu arde. Gogu rămase descumpănit. Cum adică ok, cum adică nu arde?!

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

- 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 proiectul pe verde? Imediat vedeam acum că e nevoie de o intervenție... Hmm, știi Gogule povestea cu Petrică și Lupu’? Soarele lui de lup...

Simona Bonghez, Ph.D.

simona.bonghez@confucius.ro Speaker, trainer and consultant in project management, Owner of Colors in Projects



sponsori

powered by


Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.