No. 10 • Aprilie 2013 • www.todaysoftmag.ro • www.todaysoftmag.com
TSM
T O D A Y S O F T WA R E MAG A Z I NE
ș
- câ i r o nn
lî u d r boa p i l c Cu API
rtup a t S rii o t ă tig
nd e k e We
io
bAud e W : L5
HTM B
ta: ig Da
Base
Rad
fie H a r g o i
NoSQL - Introducere
Interviu cu Tim Huckaby
Provocările unui lider (III)
Bazele de date NoSQL o analiză comparativă
Istoria IT-ului Clujean (V)
Comunitățile de practică, învățare prin acțiune și explorare
Comparare între diferite soluții NoSQL Prezentarea cărții: Going Agile de Gloria J Miller Enterprise Application Development Aspect Oriented Programming
Recenzia cărții: Thinking in Java de Bruce Eckel Provocările unui Business Analyst WordPress și spiritul comunității Sindromul Superman
6 Cu clipboard-ul în nori la Startup Weekend Cluj Mircea Mare
8 Startup Live, un eveniment care nu trebuie ratat Marius Mocian
9 Istoria IT-ului Clujean (V) - Proiectul Timeline Marius Mornea
10 Interviu cu Tim Huckaby Mihai Tătăran și Tudor Damian
12 Liberty Technology Park Cluj Echipa Liberty Technology Park Cluj
15 HTML5: WebAudio API Radu Olaru
18 Enterprise Application Development Lucian Ciufudean
21 Aspect Oriented Programming Knall Andreas
24 Provocările unui Business Analyst Daniela Haliga
27 Comunitățile de practică, învățare prin acțiune și explorare Cristina Donea
30 NoSQL Introducere Radu Vunvulea
33 Bazele de date NoSQL o analiză comparativă Traian Fratean și Bogdan Flueraș
37 Big Data: Radiografie HBase Cătălin Roman
39 Migrare website MVC 3 + DB în Azure Dragoș Andronic
41 Provocările unui lider partea III Martin Mackay
43 Prezentarea cărții: Going Agile Gloria J. Miller
46 Recenzia cărții: Thinking in Java de Bruce Eckel Silviu Dumitrescu
48 Sindromul Superman Antonia Onaca
50 WordPress și spiritul comunității Cornelia Stan
editorial
A
Ovidiu Măţan, PMP
ovidiu.matan@todaysoftmag.com Fondator și CEO al Today Software Magazine
m ajuns la numărul 10 al revistei Today Software Magazine și ne bucurăm că în jurul ei se dezvoltă o comunitate reală care are ca pasiune comună dezvoltarea de software. Am avut o lună a mărțișorului cu un eveniment special, este vorba de ..even mammoths can be Agile, unde am fost alături de Colors in Projects, re-brandingul companiei Confucius Consulting condusă de Simona Bonghez. Ea este cunoscută în cadrul revistei prin seria de articole Gogu dar și ca trainer experimentat de project management. Gogu este în vacanța de Paști în luna aceasta, dar avem promisiunea revenirii sale în curând. Evenimentul a fost un real succes. În Cluj am avut 230 de participanți cu mulți speakeri locali dar și internaționali. Aș dori să o menționez pe Gloria Miller care a avut o prezentare tehnică pe tema Agile. În acest număr publicăm un articol în care ea își prezintă cartea Going Agile. Îl felicit pe Dan Suciu pentru prezentarea făcută în cadrul evenimentului, aceasta conducând în topul de vizionărilor de pe canalul nostru de youtube cu 1,300 de minute cumulate. La o săptămână distanță, în București, s-a remarcat cu o prezentare de excepție David J. Anderson, cunoscut drept părintele metodologiei Kanban-ului. Am fost impresionați de simplitatea acestei metodologi și de eficiența aplicării sale în anumite domenii cum ar fi media. Un alt eveniment deosebit al lunii martie a fost prima ediție a IT Cluster ClujInnovation Days. Evenimentul de deschidere a adus împreună lumea de business și cea politică. S-a vorbit despre proiecte de dezvoltare locală și despre modul de colaborare din cadrul unor companii globale precum IBM. Este o noutate pentru România, iar interesul crescut al companiilor locale de a lua parte la acesta este un prim pas spre o mai bună înțelegere și creștere comună. Țelul proiectului este dezvoltarea unui ecosistem ce va avea în centru inovația prin colaborarea IT-ului și îmbinarea acestuia cu diverse domenii conexe cum ar fi medicina. Planificarea evenimentelor lunii mai trebuie să considere IT Camp, un eveniment de amploare pe teme Microsoft și nu numai. Organizatorii acestui eveniment au realizat pentru TSM un interviu cu Tim Huckaby, specialist în NUI (Natural User Interface) folosind stimuli tactili, gesturi și neuronale. Avem promisiunea lor de a-l putea revedea pe Tim la Cluj și anul acesta în cadrul evenimentului. TSM pornește o nouă inițiativă, proiectul Timeline, prin care vrem să punem într-un grafic datele despre companiile dezvoltatoare de software din România. Vom reprezenta momentul de înființare al unei companii, proiectele principale realizate de-a lungul timpului, atingerea anumitor criterii cum ar fi număr de angajați sau cifra de afaceri. Astfel se va putea urmări grafic această evoluție și arăta mai bine maturitatea companiilor locale și de ce nu, o istorie contemporană a acestora. La final, felicităm echipa Cloud Clipboard, câștigătoarea de la ultima ediție a Startup Weekend-ului. Ne bucurăm să putem promova inițiativele românești prin publicarea pe larg a experiențelor acestora din cadrul evenimentului și le urăm mult succes în continuare. De altfel, tot în luna mai, vom avea un eveniment similar dedicat celor ce vor să pună o idee în practică, este vorba de Startup Live. Mutându-ne în sfera managementului organizațional, vom fi alături de Dan Ionescu, www.danis.ro, în inițiativa de a stabili un set de best practice-uri pentru managementul companiilor românești unde nu întotdeauna se pot aplica rețetele de succes ale companiilor americane. În paginile acestui număr găsiți tema NoSQL abordată pe larg în trei articole scrise de autori diferiți: NoSQL - Introducere, Bazele de date NoSQL - o analiza comparativa și Big Data: Radiografie HBase. Articolele tehnice continuă cu HTML5: WebAudio API, Aspect Oriented Programming și Migrare website MVC 3 + DB în Azure. De asemenea, doresc să menționez recenzia cărții Thinking in Java de Bruce Eckel, o carte atât de cunoscută și apreciată de programatorii Java. Comunitățile în diverse forme sunt prezentate în Comunitatile de practică, învățare prin acțiune și explorare și WordPress și spiritul comunității. Vă dorim o lectură plăcută !
Ovidiu Măţan
Fondator și CEO al Today Software Magazine
4
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
TODAY SOFTWARE MAGAZINE Redacţia Today Software Magazine
Lista autorilor Cristina Donea
Fondator / Editor în chief: Ovidiu Mățan ovidiu.matan@todaysoftmag.com Editor (startups și interviuri): Marius Mornea marius.mornea@todaysoftmag.com
Martin Mackay
mmackay@neverfailgroup.com CEO @ Neverfail Group.
Mircea Mare
Graphic designer: Dan Hădărău dan.hadarau@todaysoftmag.com Colaborator marketing: Ioana Fane ioana.fane@todaysoftmag.com Colaborator social media: Rodica Manolache rodica.manolache@todaysoftmag.com Traducător: Cintia Damian cintia.damian@todaysoftmag.com Reviewer: Tavi Bolog tavi.bolog@todaysoftmag.com Reviewer: Adrian Lupei adrian.lupei@todaysoftmag.com Produs de
Today Software Solutions SRL str. Plopilor, nr. 75/77 Cluj-Napoca, Cluj, Romania contact@todaysoftmag.com www.todaysoftmag.ro www.facebook.com/todaysoftmag twitter.com/todaysoftmag ISSN 2284 – 6352
mircea.mare@gmail.com Software storyteller @ Cloud Clipboard
Traian Frătean
traian.fratean@3pillarglobal.com Software Engineer @ 3Pillar Global
Radu Vunvulea
Consultant Java @ .msg systems Romania
Senior Software Engineer @iQuest
Marius Mornea
Bogdan Flueraș
marius.mornea@todaysoftmag.com Fost senior software developer in cadrul Nokia, în prezent fondatorul platformei Mintaka Research
Radu.Vunvulea@iquestgroup.com
bogdan.flueras@3pillarglobal.com Software Engineer @ 3Pillar Global
Marius Mocian
marius@mocian.com Fondator @ Transylvania Innovation Ventures Organizator @ OpenCoffee Club Cluj-Napoca
Gloria J. Miller
gloria.miller@maxmetrics.com Fondator @ MaxMetrics
Mihai Tătăran
mihai@itcamp.ro Microsoft MVP CodeCamp
Daniela Haliga
Co-fondator ITCamp
Business Analyst @ Endava Iași
Radu Olaru
Cornelia Stan corneliastn@gmail.com
daniela.haliga@endava.com
rolaru@smallfootprint.com
Copywriter/Organizator @ WordCamp Transylvania
Lucian Ciufudean
Tudor Damian
Server Automation Functional Architect @ HP Software Cluj
Microsoft MVP ITSpark
lucian.ciufudean@hp.com
tudy@itcamp.ro
Co-fondator ITCamp
Copyright Today Software Magazine
www.todaysoftmag.ro www.todaysoftmag.com
HR Specialist @ ISDC
Silviu Dumitrescu silviu.dumitrescu@msg-systems. com
Senior Software Developer @ Small Footprint
Reproducerea parțială sau totală a articolelor din revista Today Software Magazine fără acordul redacției este strict interzisă.
cristina.donea@isdc.eu
Knall Andreas
Cătălin Roman
Java Team Lead @ .msg systems
Software Architect @ Nokia, Berlin
Dragoș Andronic
Antonia Onaca
knall.andreas@msg-systems.com
dragos@txtfeedback.net CTO @ TXTFeedback
catalin.roman@nokia.com
anto@aha-ha.com de aproape 10 ani trainer, psiholog, consultant sub formă de antreprenor, intraprenor şi antreprenor din nou
www.todaysoftmag.ro | nr. 10/Aprilie, 2013
5
startups
Cu clipboard-ul în nori la Startup Weekend Cluj
V
ineri, ziua de mărţişor, 19:30. 150 de oameni într-un local care găzduieşte nunţi, de obicei. Atmosfera era destul de apăsătoare. De cum am intrat, am ştiut că nu o să „pitch-uiesc”. Nu doar atât, dar mă întrebam ce caut acolo. Aveam o idee, şi mi-am făcut o scurtă prezentare în minte în zilele precedente, după care am şlefuit-o până a ajuns prezentarea la un minut. Iniţial nu ştiam dacă vreau sau nu să o prezint, dar am căzut de acord cu mine că o să iau decizia finală când vom ajunge la eveniment, în funcţie de atmosferă.
Mircea Mare
mircea.mare@fortech.ro Software storyteller @ Cloud Clipboard
6
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
“Pure cross platform file system”. Nu era o idee pentru un startup. Pentru că la momentul respectiv, nici nu ştiam ce e un startup. Am aflat ulterior... e o idee care doreşte să fie un produs. Nu e ceva legat exclusiv de lumea IT, însă în mediul nostru e foarte uşor să faci un prototip şi studiu de piaţă. Mai e un lucru esenţial: potenţial foarte mare de creştere - indice, spirale, sector – şi alţi termeni la care mă uit ca la bibelouri. Eforturile prezentatoarei de a revigora publicul şi de a domina sala au avut efectul invers dorit, dar într-un final a început focul de pitch-uri (pitchfire). Au fost 36 de pitchuri. Reacţiile au oscilat între „hai, fii serios!”, „hmm, interesant”, „s-ar putea să funcţioneze”. Am remarcat: Catwalk15, FridgeChef, DoItForMe, CloudClipboard. În continuare, unii pitcheri s-au aşezat lângă afişele care le aparţineau încercând să convingă lumea să voteze ideea lor. Asta nu trebuia să se întâmple, pitch-ul trebuia să fie suficient. Dar... se pare că multă lume era hotărâtă să câştige. Oare chiar ăsta să fie secretul succesului? … Sper că până la sfârşitul articolului să răspund la întrebarea asta. 17 idei au trecut de etapa de votare şi echipele au început să se formeze. Piki (Istvan Hoka), pe care îl ştiam de la un CodeRetreat, se uită la mine, arată spre una din echipe, şi mă întreabă „CloudClipboard?”. Pitch-ul lui Călin ar fi pe scurt: “Seamlessly copy/paste across devices. As simple as CTRL+C, CTRL+V”. Nu cred că exagerez dacă spun că a rostit
„seamlessly” de cel puţin o sută de ori pe durata celor trei zile.
Şi aşa a început...
Călin s-a dovedit de un entuziasm contagios. Ne-a primit foarte încântat în echipa lui. Ne-am prezentat, ne-am spus pe scurt background-ul, iar pe măsură ce s-au mai alăturat oameni echipei, Călin ne prezenta pe fiecare. Ne-a memorat numele şi lucrurile la care ne pricepem imediat. Ne-a mai şi complimentat: „arătaţi ca nişte tipi deştepţi”. Astea fiind spuse, am trecut la treabă. Am început cu un brain dump. Pe parcurs ni s-a mai alăturat Kamillia (din State) şi Tudor. Tudor e developer, dar şi-a exprimat intenţia de a fi în echipa marketing de la bun început. Am aflat că Tudor are deja startup-ul lui – KeenSkim - cu care a participat la acceleratorul de bussiness “Eleven” din Bulgaria. Tudor trăgea de noi, să ne concentrăm pe business, pe produs, nu doar pe un feature “cool”. Cam greu cu șapte developeri a căror expresie era: “Lasă astea, hai să hackuim ceva!”. Am convenit asupra produsului minim viabil; pentru prezentarea finală să putem face “copy” de pe un device urmat de “paste” pe altul. S-au conturat echipele: marketing, backend, Android, Windows, Linux şi catalistul (mai precis Călin.) Ne-am spus fiecare ideile şi am dezbătut până în jurul orei 23:30. Spre deliciul majorităţii, planul era unul foarte simplu: „mâine scriem cod”. Java, C#, Ruby,
TODAY SOFTWARE MAGAZINE Publish/subscribe, Pubnub API. Localul urma să se închidă la miezul nopţii aşa că am rămas în faţa restaurantului să povestim. Ce altceva decât... detalii de implementare. Pairing, backend, parazitare pe Google Docs sau Dropbox pentru transfer de fişiere, descoperire între device-uri. Sâmbătă dimineaţa am pornit cu multă energie. Pâna la ora 13:00 aveam un chatroom pe Campfire, repository Github, documente cu descrierea mentorilor cu care urmam să stăm de vorbă şi organizarea echipelor. Pe la prânz, prototipul nostru prindea contur, primele mesaje au început să circule pe canalul de Pubnub. Dar lăsând un pic la o parte entuziasmul tehnic, vom menţiona câteva din sfaturile pertinente primite de la mentori. Ibrahim Evsan ne-a încurajat să aflăm comportamentul utilizatorilor, ce fel de informaţii au în clipboard şi ne-a recomandat să sumarizăm ce face produsul nostru, să ajungem la un use case. Ne-a sugerat chiar şi că putem construi un nou tip de search engine în jurul conceptului nostru. David Zwelke a fost genial. Irumpea cu idei şi după cât timp ne-a alocat, sunt convins că i-a făcut plăcere să povestească cu noi. Ne-a sugerat împachetarea produsului în “Goldfish” şi “Elephant” edition, idee care a ajuns în planul final de afaceri. Ne-a oferit recomandări legate de encripţie, metode de pairing (bump, QR code, Bluetooth-like pairing), securitate, aspecte legale şi cum putem adăuga latura socială. Ne-a sugerat un punct dureros pentru care produsul nostru putea să fie o soluţie: frustrarea de a nu putea împărtăşi informaţie rapid. A mai subliniat că e important să ne diferenţiem de competiţie. A fost delicios comentariul, care a sunat cam aşa: “Toţi tipii aiă cu barbă pe gât, împătimiţi Linux vor zice: puteam să fac pipe la clipboard prin SSH încă din ‚92.” După care se uită la mine şi îmi spune “Barba ta arată mai bine decât a lor.” “Ţine minte totul ce obişnuiai să uiţi până acum” a fost o sugestie de motto, iar la feature-uri să adăugăm autofill între device-uri, plugin-uri, pull la lucruri predefinite. Sebastian Presecan ne-a sugerat câteva întrebări la care trebuie să răspundem: cine ne e grupul ţintă, cum transferă oamenii informaţii acum, cât timp pierd cu asta, de ce să folosim copy/paste de la bun început, cum se rezolvă problema în mod actual. De asemenea ne-a sugerat să evităm termenii prea tehnici, să comunicăm în limbajul publicului larg. Christoph
Raethke ne-a sugerat să direcţionăm soluţia noastră către corporaţii sau să o oferim la pachet cu soluţii existente. Pe de altă parte Simon Obstbaum ne-a spus că e un issue care ţine de utilizator, nu e problema unei corporaţii. În jurul orei 15, echipa de marketing era în discuţii cu Bradley Kirkham. Îi întrerup “Deci, live demo!” Iniţial Călin a râs, crezând că glumesc... “Serios?!” Piki face „copy” la un text de pe Mac, eu fac „paste” pe laptop-ul meu cu Linux, faţa lui Călin se luminează şi Bradley exclamă “That’s so cool!” În urma discuţiilor cu mentorii eu unul m-am simţit descurajat. Lumea s-a arătat încântată de idee, dar chiar aveam un produs? Ne-am petrecut restul zilei discutând şi... de amar, mai căutam oarece feature-uri pe care să le mai implementăm până mâine. Optimizări, vizualizarea şi agregarea datelor etc. Nu s-a ales mare lucru şi pe la 21:30 am pus punct.
Duminică.
Tudor: „Cui se adresează produsul?” Călin: „Mie.”
Această conversație s-a repetat de vreo trei ori. După un timp lucrurile a început să sune mai bine. „O piaţă formată din tineri profesionişti IT, în proporţie 90% bărbaţi, programatori, jurnalişti care vor să fie productivi şi să lucreze organizat, în contextul în care sar des de la o idee la alta.” Aveam publicul ţintă definit, strategie de rollout ( ediţia “Goldfish” şi “Elephant” ) iar din punct de vedere al execuţie un prototip funcţional pe 3 platforme, o echipă şi un model de câştig clar şi realist (sau măcar credibil, în orice caz.) CloudClipboard propune un proces din doi paşi pentru transferul de date, iar combinaţia de taste e impregnată în memoria musculară a oricărui utilizator. Un clipboard inteligent, global, sensibil la tipul de date. Există soluţii similare dar marele lor neajuns este că fac sincronizare folosind o interfaţă (Evernote) sau e restricţionat la un OS (de pildă iOS deoarecere sincronizarea se face via iCloud.) Suna bine, aşa că am început să facem prezentarea şi slide-urile. Am filmat un demo: “copy” la un număr de pe un telefon şi paste într-un chat de skype. Am făcut un testdrive la prezentare lui Philip Kandall (Skobbler) care ne-a sugerat să găsim numere mai realiste legate de grupul ţintă (numărul total de persoane care lucrează în IT nu e credibil) şi ar trebui să rafinăm aspectul astă. Aşadar, am studiat piaţa Evernote şi Dropbox şi am inclus asta.
Prezentarea a mers brici, iar Christoph (Berlin Startup Academy) a venit înainte de premiere să ne invite la Berlin, indiferent de rezultatul care urma să fie anunţat. Cei de la TSM au făcut un sondaj de popularitate între participanţi şi am văzut că aveam în jur de dublu numărul de voturi faţă de următoarea echipa. Am simţit că lucruri încep să se întâmple, dar tot mă abţineam să mă gandesc că vom câştiga. Nici nu a pomenit nici unul din noi asta. Dar, poate deloc suprinzător... CloudClipboard a câştigat. Ne-am completat. Acesta a fost şi motivul pentru care s-a format o echipă bună; ne-am simţit intenţiile şi am rezonat ca şi abordare. Ne-am organizat repede şi iniţial nu ne-a păsat de nimic. Pe lângă asta, am avut dorinţa sinceră să ne simţim bine. Nu ne-am gândit la câștig, dar ne-am făcut bine treaba pentru că aşa ne e firea. Şi am urmat sfaturile. Una din concluziile pe care le-a tras Călin sună cam aşa: “ascultă întotdeauna, nu te preface doar.” Plus că ne-am distrat. Pentru prototip nu avem pairing. Eram toţi conectaţi la acelaşi canal. Aşa s-a născut “paste roulette”. Dai “paste” şi nu ştii sigur ce obţii şi din clipboard-ul cui. A fost cel mai mare eveniment „startup” din România de pâna acum, iar Cristoph a afirmat pe blogul său că potenţialul pe care l-a văzut la SWCluj, e precum cel din lumea startup-urilor din Germania. A intuit şi foarte bine că “firmele de outsourcing nu lasă nimic în farfurie” când vine vorba de oameni talentaţi. Aşadar lucrurile sunt promiţătoare, nu ducem lipsă de talent şi e de aşteptat să auzim din ce în ce mai des despre startup-uri. Cât despre petrecerea de după eveniment, Cristoph a sumarizat-o cam aşa: “the participating geek girls had revamped into bombshells.” Pentru echipa Omnipaste (redenumită din cauza unui nameclash cu o altă aplicaţie) distracţia începe cu patru zile în Berlin.
www.todaysoftmag.ro | nr. 10/Aprilie, 2013
7
startups
Startup Live, un eveniment care nu trebuie ratat
Î
n ultimii ani au început să apară și în Cluj-Napoca tot mai multe persoane interesate de antreprenoriat în zona software. Odată cu această tendință au apărut diferite organizații și persoane care îi ajută pe tinerii care vor să urmeze această cale. Una din aceste organizații este și Transylvania Innovation Ventures (TIV). Povestea TIV a început în vara anului 2012, în București, la unul dintre colocviile Caesar organizate de Liga Studenților Români din Străinătate. Acolo, Marius Mocian, organizatorul întâlnirilor OpenCoffee din Cluj-Napoca, l-a cunoscut pe Mihai Dan Nadăș, CTO-ul Yonder, una dintre companiile importante din industria IT Software clujeană. În septembrie cei doi au pus bazele TIV, cu misiunea de a transforma orașul Cluj-Napoca până în 2022 în polul inovației și antreprenoriatului în domeniile IT software și tehnologic din România. Cu alte cuvinte visul fondatorilor este ca în anul 2022 orice tânăr din România care dorește să pornească un startup tehnologic să vină în Cluj-Napoca, unde să găsească toate resursele de care are nevoie pentru a reuși. Unul din primele proiecte importante ale TIV este Startup Live. Acest eveniment, care se va desfășura între 17 și 19 mai, este organizat împreună cu Start Europe, organizație care e în spatele Pioneers Festival, una din cele mai mari conferințe dedicate antreprenoriatului tehnologic la nivel european, care se desfășoară la Viena. Startup Live este un eveniment care se desfășoară în peste 30 de orașe europene. Dar ce este Startup Live? Este un eveniment care se desfășoară pe parcursul unui weekend, în timpul căruia participanții au ocazia de a transforma o idee întrun startup sau pot lucra la un proiect deja existent. De asemenea, ei vor avea la dispoziție mai mulți mentori de la care
pot primi sfaturi sau răspunsuri pentru întrebările lor. Mentorii sunt tineri care în ultima perioadă au trecut prin experiența transformării unei idei într-un produs, dar și experți tehnici din comunitatea locală. Printre aceștia se numără: Cosmin Mihaiu, co-fondator și CEO al MIRA Rehab, companie clujeană care a primit o investiție din partea acceleratorului Healthbox din Londra; Tudor Vlad, fondator și CEO al KeenSkim, o altă companie clujeană în care a învestit acceleratorul Eleven din Sofia; Victor Popescu, fondator și CEO al Gameleon, care a câștigat Startup Live București, Innovation Award la How to Web București (cea mai mare conferință de profil din România și susținător al Startup Live Cluj-Napoca), a primit o investiție din partea acceleratorului Eleven din Sofia și este prima echipă românească care a fost selectată în cadrul acceleratorului Mozzila WebFWD; Ciprian Mardare, co-fondator și CTO al Nexi.me, care a primit o investiție din partea acceleratorului Rockstart din Amsterdam și alții. Vestea acestui eveniment nu a rămas fără ecou în comunitatea locală. Yonder, unul dintre susținătorii activi ai inovației în Cluj-Napoca, a hotărât să se alăture încă de la început evenimentului şi va asigura spațiul de desfășurare. O altă surpriză
plăcută a fost făcută de Skobbler, companie care, deşi a investit masiv la începutul lui martie în organizarea Startup Weekend, este hotărâtă să susţină şi acest eveniment. Un alt partener important este Barandi Solutions, o mică companie locală care pe lângă susţinerea pe care o oferă evenimentului va alege una dintre echipele participante, care va decide să continue proiectul început şi o va ajuta să dezvolte un MVP. Mai trebuie menţionată echipa Klain, care se ocupă de dezvoltare web, strategii de marketing online și promovare, oferindu-ne o parte din experința lor pe parte de comunicare și prezență în social media. Aceştia sunt doar o parte din susţinătorii acestui eveniment, lista fiind mult mai lungă. Pentru mai multe informații vă rugăm să urmăriţi site-ul oficial (http://startuplive.in/cluj-napoca/2/) şi pagina de Facebook (https://www.facebook.com/ startupliveclujnapoca) Marius Mocian
marius@mocian.com Founder @ Transylvania Innovation Ventures Organizer @ OpenCoffee Club Cluj-Napoca
2
Startup Live Cluj Napoca 17 - 19 Mai 2013 Detalii despre eveniment StartupLiveClujNapoca
8
Klain
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
startuplive.in/cluj-napoca/2/
istorie
TODAY SOFTWARE MAGAZINE
Istoria IT-ului Clujean (V) Proiectul Timeline
P
ropunerea din acest număr este foarte simplă. Vrem să construim un timeline comun al cât mai multor companii de IT din peisajul clujean. Am plecat de la ideea alcătuirii unei liste, pentru popularea hărții IT (din numărul trecut), folosind surse foarte variate,
au fost validate online pe site-urile companiilor, totuși sunt șanse să existe unele diferențe față de brandul oficial sau cel prezent în cultura populară, cum ar fi Betfair vs. TSE Development, Nethrom Software vs. Yonder, TORA vs. Tora Trading Services, etc. Pentru a facilita feedback-ul
majore, etc. . Noi promitem să combinăm toate timeline-urile primite într-unul singur, care să prezinte o perspectivă comună și succintă asupra evoluției IT-ului local. Considerăm acest exercițiu util și individual, prin caracterul auto-explorator și rezultatul final simplu, ce poate înlocui
nestructurate, fără a încerca să explorez exhaustiv mediul de business. De exemplu lista de membrii ai Cluster IT, ARIES, firme prezente la JobShop, anunțuri pe BestJobs, contacte de pe LinkedIn, cărți de vizită stivuite pe birou, etc. Iar pentru că acest proiect aparține comunității, TSM având doar un rol catalizator, am decis să vă prezentăm această listă inițială, însoțită de o cerere de ajutor în a o extinde și eventual corecta. Deși majoritatea numelor folosite
a luat naștere wordlet-ul alăturat. cartea de vizită a oricărei companii. Sper să În încercarea de a combate inerția tipică vă placă această provocare și să răspundeți a cititorilor noștri și a explora tema istorică în număr cât mai mare. a seriei, vă provocăm să atașați fiecărui nume din acest wordlet un timeline succint Marius Mornea al companiilor dumneavoastră. Exemple marius.mornea@todaysoftmag.com de evenimente ce pot popula acest timeline ar fi: fondarea companiei, depășirea unui Fost senior software developer număr de clienți, angajați, cifră de afain cadrul Nokia, în prezent ceri, schimbarea brandului, parteneriate, fondatorul platformei Mintaka Research evenimente, lansări de produse, contracte www.todaysoftmag.ro | nr. 10/Aprilie, 2013
9
interviu
Interviu cu Tim Huckaby
T
im Huckaby este un specialist în NUI (Natural User Interface) folosind stimuli tactili, de mișcare și neuronali. A fost numit „Pionier al Smart Client Revolutions” de către presa internațională și este cunoscut pentru calitatea prezentărilor tehnice pe care le susține la conferințe din întreaga lume. Va fi prezent la IT Camp unde veți putea asista timp de două zile la trei track-uri paralele ce vor cumula peste 30 de ore de prezentări, dezbateri și workshop-uri . Tim, când ai început cariera de profesionist IT? [Tim]: depinde cum definim „profesionist”. În mod cert mi-am câștigat o parte din banii necesari studiilor universitare prin consultanță și proiecte de dezvoltare software. După absolvire m-am angajat la EDS ... asta pe când era condusă încă de Ross Perot. Ce te-a facut să alegi aceasta meserie? [Tim]: asta e o poveste interesantă. Eu am studiat la un liceu catolic pentru băieți. Nu studiam tâmplăria; studiam latina. Nu aveam calculatoare; aveam calcul diferențial și integral. Nu m-am atins de programare până la primul curs de Pascal în facultate. M-am indrăgostit de programare din cauza acelui curs. După aceea am urmat toate cursurile de programare din facultate, absolut toate. Ești autorul unor cărți pe tehnologii Microsoft. Cum ai reușit să ai atât de mult succes? [Tim]: succesul e relativ. Încă mai am foarte multe de realizat pe plan profesional. Încă scriu articole pentru reviste si un tutorial lunar de dezvoltare de aplicații, dar mi-ar fi greu să scriu incă o carte. Pe acelea le-am scris pentru că lucram în echipele de produs la Microsoft. Știam produsele de la cap la coadă și a fost doar o muncă de a le explica. Expertiza pe care o am acum este în zona experienței utilizatorilor, NUI (Natural User Interface), implicarea utilizatorilor. E greu să scrii despre așa ceva. E mult mai eficient să o arăți. Ceea ce explică de ce fac atât de multe prezentări. Tu și compania ta, Interknowlogy, sunteți foarte specializați pe tehnologii Microsoft. Cum reușești să rămâi la curent cu tehnologia ținând cont de viteza cu care progresează? [Tim]: nu reușesc. Știam toată
10
platforma Microsoft de la cap la coada. Acum doar mă mențin la curent cu părțile care mă interesează. Am atâția colegi inteligenți în companie pe care pot să mă bazez, iar atunci când am nevoie să înțeleg ceva mă adresez lor. Platforma Microsoft e foarte mare acum. Nimeni nu o poate ști pe de-a-ntregul. Cum își petrece Tim Huckaby o zi tipică de lucru? Încă mai ai timp pentru munca tehnică? [Tim]: Cred că de asta viața mea e foarte captivantă: nu am o „zi tipică”. Niciodata nu repet aceeași zi. Tind să călătoresc foarte mult ceea ce îmi face viața interesantă. Și, evident, apare o criză în fiecare săptămână. Cât despre tehnologie: încă o iubesc. Dar, așa cum am menționat anterior, înclin să îmi petrec zilele tehnice având o vedere de ansamblu și nu în detalii așa cum mi-am început cariera. Iar Interknowlogy este o companie de proiecte custom care dezvoltă aplicații pentru toate industriile, de la cercetare în domeniul cancerului, la retail, până la NASA. Deci, munca e chiar interesantă. Dar, pe masură ce avansez în vârstă sunt tot mai mult angrenat în complexitatea business-ului. Iar provocările de business sunt la fel de complexe ca cele de programare ... dacă nu mai mult. Care sunt hobby-urile tale? Mai ai timp pentru ele? [Tim]: niciodată nu este suficient timp într-o zi ... mi-a luat 10 ani să construiesc InterKnowlogy așa cum este acum. Iar la 15 ani de viață, este o companie excepțională condusă de oameni excepționali. Acum câțiva ani m-am dat la o parte din poziția de CEO și am promovat numărul 1 de atunci. Asta mi-am propus dintotdeauna. Îmi lipsesc rădăcinile din dezvoltarea de produse, și deși încă dețin InterKnowlogy și sunt președintele companiei, nu mai sunt
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
Tim Huckaby Microsoft RD, MVP InterKnowlogy
implicat în operațiunile zilnice la fel de mult. Petrec mai mult timp cu start-up-ul meu. Se numește Actus și dezvoltă produse interactive de afișaj electronic (conduse prin gesturi și voce cu Kinect). Dar, cred ferm în familie și hobby-uri. Nu prea mă uit la TV (cu exceptia sportului și comediei) și nu mă joc pe xBox. Dar, iubesc natura. Îmi iau cu mine un snowboard sau o undiță de pescuit la muscă în fiecare călătorie de business pe care o am. Se întâmplă foarte rar să nu îmi rezerv câteva ore de pescuit la muscă într-o călătorie de business. Mi-ar place foarte mult să fac asta și în munții din România. Dacă ai avea din nou 25 de ani, ce ai face profesional? [Tim]: greu de răspuns. Întotdeauna mi-a plăcut software-ul, dar uneori simt că mi-am ratat chemarea în științele naturii. Mi-ar fi plăcut să fiu un biolog de teren. Din cauza pescuitului la muscă știu mai multe despre entomologie (știinta insectelor) decât cei mai mulți oameni. În plus, întotdeauna am simțit că aș avea înclinații muzicale. Nu mi s-a permis niciodată să cânt la un instrument; cred că dacă mi s-ar fi permis, aș fi fost bun la asta. Când o să mă pensionez, cred că o să învăț să cânt la un instrument atunci când nu voi skia sau
TODAY SOFTWARE MAGAZINE
pescui.
plus, șoferii conduc nebunește! Și am condus în Roma ... dar nu am văzut niciodată Asta va fi a doua vizită a ta in România. șoferi mai nebuni decât în România. O s-o Ce știai despre țara noastră înainte de prima aduc pe Kelly și în acest an. Abia așteptăm! vizită? Care e părerea ta acum? [Tim]: ei bine, sunt norocos. În ultimii Cum vezi profesioniștii IT din România? 15 ani Microsoft m-a trimis în toată lumea. Atât bine cât și rău. Deci, am fost peste tot în Balcani, peste tot [Tim]: nu prea văd lucruri rele. Văd în Europa de Est și niciodată nu avusesem programatori entuziasmați. Avem angajați ocazia să văd România. Așa că atunci când în Estul Europei. Este enorm de mult talent oportunitatea s-a ivit am acceptat imediat. de inginerie software în Estul Europei. Foarte interesant e că soția mea Kelly este Având în vedere infrastructura, economia, invitată și ea în aceste călătorii cu mine, dar cultura, etc. - poate că evoluția tehnolodin cauza copiilor și a treburilor în gene- gica a fost frânată în câteva locuri. Dar se ral, vine foarte rar. Dar, a venit anul trecut recuperează ... rapid. Oricum, și noi avem în Romania și s-a distrat de minune. Am probleme destule în SUA. Peste tot în închiriat o mașină și am condus prin țară. lume sunt probleme care frânează evoluția Ce aventură! Hai să spunem doar că GPS-ul tehnologiei. Însă tehnologia în sine nu e ne-a dus pe drumuri care sunt mai rele problema. decât cele pe care le-am văzut în Mexic. În
Mihai Tătăran
mihai@itcamp.ro Microsoft MVP CodeCamp Co-fondator ITCamp
Tudor Damian tudy@itcamp.ro Microsoft MVP ITSpark Co-fondator ITCamp
www.todaysoftmag.ro | nr. 10/Aprilie, 2013
11
business
Liberty Technology Park Cluj
E
ste primul parc tehnologic din România, un parc de idei plasat într-un spaţiu revoluţionar, creat pentru a oferi condiţii excepţionale de creștere și dezvoltare companiilor din domeniile IT&C și R&D într-un areal inedit din punct de vedere conceptual și arhitectural.
Silicon Valley, un model demn de urmat Echipa Liberty Technology Park Cluj office@libertytechpark.ro
12
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
Imaginați-vă că facem un salt în trecut, în urmă cu 60 de ani, în S.U.A, lângă Standford University și privim cum sub ochii noștri ia viață comunitatea ce astăzi este cunoscută sub numele de Silicon Valley, primul și în continuare cel mai renumit parc tehnologic dedicat cercetării și inovației științifice. Pentru a răspunde nevoilor financiare, dar și educaționale ale centrului universitar Stanford imediat după cel de-al Doilea Război Mondial și pentru a oferi oportunități de angajare absolvenților, s-a propus ca o parte din terenurile aparținând universității să fie date spre închiriere doar companiilor din domenii conexe, cu scopul de a deveni un parc de birouri. Inițial s-a numit „Stanford Industrial Park”, iar ulterior a primit denumirea de „Stanford Research Park”. Premisele care au stat la baza formării conceptului de parc tehnologic și care au condus la materializarea acestuia în mai multe locuri din lume sunt legate de dorința de a angrena oameni care împărtășesc aceleași interese pentru dezvoltarea domeniilor de activitate în care profesează într-un mod creativ. La loc de cinste se află schimbul de idei și implicarea oamenilor tineri cu potențial în găsirea resurselor necesare pentru o dezvoltare fructuoasă a noilor tehnologii.
Un ecosistem dinamic în inima Transilvaniei Revenim în prezent. Suntem pe strada Gării, în Cluj-Napoca, pe platforma fostei fabrici de mobilă Libertatea, locul unde s-au pus bazele parcului tehnologic Liberty Technology Park Cluj, un proiect gândit pe baza acelorași premise ca și conglomeratul Silicon Valley. Situat în Cluj-Nap o ca, cel mai important oraș al Transilvaniei, Liberty Technology Park Cluj își propune să intervină în peisajul local la un nivel profund, oferind un loc în care mai multe companii din domeniile IT&C și R&D conectează, angrenează și încurajează oameni motivați și idei creative într-un flux perpetuu de dezvoltări inovatoare. Liberty Technology Park Cluj este menit să funcționeze asemeni unui ecosistem dinamic pentru companii IT&C și R&D locale și internaţionale, bazat pe un concept inedit și alimentat de acea viziune aparte care face ca ideile să prindă viaţă și afacerile să prospere. Conceput pe amplasamentul fostei fabrici de mobilă Libertatea, Liberty Technology Park Cluj reinventează identitatea acesteia utilizând patrimoniul industrial primit odată cu terenul într-un mediu destinat pentru a răspunde nevoilor unei companii IT&C și R&D. Din punct de vedere arhitectural, principiul central pe
business care l-au urmărit arhitecții de la Chapman Taylor are în vedere reconvertirea spațiilor existente într-un parc tehnologic ce va reflecta energia companiilor tech alimentate de potențialul uman pe care orașul Cluj-Napoca îl are de oferit.
Habitatul Tech Ideal În cadrul acestui habitat tech o parte din eforturi se vor concentra pe crearea celui mai complex accelerator business din România: Spherik. Spherik va fi prima platformă de acest fel pe plan naţional, menită să ajute, să crească și să dea viaţă afacerilor cu potenţial, o platformă destinată dezvoltării și implementării de afaceri pe plan local, dar și internaţional. Cea mai mare parte a eforturilor se va concentra însă pe crearea unui mediu cât mai stabil și valoros pentru angajații
TODAY SOFTWARE MAGAZINE companiilor din IT&C și R&D, un mediu în care accentul este pus din start pe inovație și creativitate, pe găsirea celor mai eficiente soluții și nu în ultimul rând pe valorificarea potențialului de resurse umane. Pentru a reuși, Liberty Technology Park Cluj pune la dispoziție mai multe tipuri de spații concepute pentru a crea locul de muncă ideal. De la spațiul de birouri efectiv până la tot ce ține de timpul petrecut în afara locului de muncă, întreg habitatul a fost gândit la standarde înalte pentru a întâlni toate nevoile unei companii din IT&C și R&D, inclusiv gama completă de servicii și facilități premium. Parcul va integra spații de organizare evenimente, săli de conferințe, o zonă de leisure ce include un restaurant cu terasă, o cafenea, sală de fitness, spații verzi amenajate, terenuri de sport multifuncționale, grădini interioare, dar și o zonă de retail și
îngrijire medicală, toate concepute pentru a crea un habitat tech ideal. Liberty Technology Park Cluj este un proiect dezvoltat de Fribourg Development și urmărește intensificarea conexiunilor și a comunicării între companii din domenii conexe prin crearea unui spațiu revoluționar ce va genera inovație și progres.
www.todaysoftmag.ro | nr. 10/Aprilie, 2013
13
comunități
Comunităţi IT Cluj-Napoca
D
intre evenimentele IT ale ultimei luni vom selecta două, plasate la capete opuse ale spectrului de dezvoltare business, dar asemănătoare prin calitatea atmosferei și mai ales a participanților. StartupWeekend este adresat celor la început de drum în definirea și formarea unei afaceri. Motiv pentru care atmosfera a fost plină de agitație și entuziasm, susținută de o concurență sănătoasă și politicoasă între echipe, atât cât să existe tensiunea și bucuria câștigării. Alături de o echipă de mentori numeroasă și foarte implicată, organizatorii au avut de furcă doar cu succesul la Calendar public și, implicit, numărul mare de participanți (provocare pe care o dorim fiecărui eveniment de profil). Cluj IT Innovation Days a Aprilie 4 semănat mai degrabă a eveniment aristocratic în IT-ul local. Atât Lansarea numărului 10 TSM organizarea evenimentului, dar mai ales publicul: un mixt de figuri www.todaysoftmag.ro politice, reprezentanți ale celor mai mari companii IT, invitați din alte orașe, profesori universitari și organizatori de evenimente Aprilie 4 majore din IT, au compus o atmosferă de business de nivel înalt. Ruby pe iOS: Introducere in RubyMotion Dovada că ecosistemul a acumulat suficientă masă critică și a realiwww.meetup.com/cluj-rb/ zat saltul la un nou nivel de colaborare în comunitate. Transylvania Java User Group Comunitate dedicată tehnologiilor Java. Website: http://www.transylvania-jug.org/ Data înfiinţării: 15.05.2008 / Nr. Membri: 533 / Nr. Evenimente: 41 Comunitatea TSM Comunitate construită în jurul revistei Today Software Magazine. Website: http://www.todaysoftmag.ro Data înfiinţării: 06.02.2012 / Nr. Membri: 520 / Nr. Evenimente: 8 Romanian Testing Community Comunitate dedicată QA. Website: http://www.romaniatesting.ro Data înfiinţării: 10.05.2011 / Nr. Membri: 582 / Nr. Evenimente: 1 GeekMeet Cluj Comunitate dedicată tehnologiilor web. Website: http://geekmeet.ro/ Data înfiinţării: 10.06.2006 / Nr. Membri: 533 / Nr. Evenimente: 16 Cluj.rb Comunitate dedicată tehnologiilor Ruby. Website: http://www.meetup.com/cluj-rb/ Data înfiinţării: 25.08.2010 / Nr. Membri: 133 / Nr. Evenimente: 33 The Cluj Napoca Agile Software Meetup Group Comunitate dedicată metodelor Agile de dezvoltare software. Website: http://www.agileworks.ro Data înfiinţării: 04.10.2010 / Nr. Membri: 297 / Nr. Evenimente: 24 Cluj Semantic WEB Meetup Comunitate dedicată tehnologiilor semantice. Website: http://www.meetup.com/Cluj-Semantic-WEB/ Data înfiinţării: 08.05.2010 / Nr. Membri: 137/ Nr. Evenimente: 21 Romanian Association for Better Software Comunitate dedicată oamenilor cu experiență din IT indiferent de tehnologie sau specializare. Website: http://www.rabs.ro Data înfiinţării: 10.02.2011 / Nr. Membri: 208/ Nr. Evenimente: 11
14
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
Aprilie 9 Jim Bagnola – Lead the Change, Cluj-Napoca www.jimbagnola.ro/evenimente/cluj/ Aprilie 9 AgileWorks Remote Open Space www.meetup.com/The-Cluj-Napoca-Agile-SoftwareMeetup-Group/ Aprilie 10 Facebook graph search www.meetup.com/Cluj-Semantic-WEB/ Aprilie 10 Functional Programming http://lnkd.in/CijSms Aprilie 26 Romanian Progress User Group http://it-events.ro/events/romanian-progress-user-group/ Aprilie 27 Windows Azure Bootcamp it-events.ro/events/windows-azure-bootcamp-at-clujnapoca/ Mai 16-17 Romanian Testing Community Conference 2013 http://www.romaniatesting.ro/ Mai 23-24 ITCAMP 2013 - Recomandat de TSM http://itcamp.ro Joi/săptămânal OpenConnect www.facebook.com/groups/355893314491424/ Miercuri/bilunar OpenCoffee www.facebook.com/opencoffeecluj
programare
TODAY SOFTWARE MAGAZINE
HTML5: WebAudio API
Î
Radu Olaru
rolaru@smallfootprint.com Senior Software Developer @ Small Footprint
n acești ani aplicațiile online au împins tot mai departe limitele platformei web. Probabil cu toții am fost iritați la un moment dat de aplicațiile web. Cu toții am sperat că până la urmă lumea se va liniști, se va vedea clar că webul nu poate suporta aplicații serioase și Universul își va reveni la normal. Aplicațiile mari sunt pentru desktop, iar aplicațiile web sunt doar visele doctoranzilor entuziaști de la Google. Dar apoi a apărut parcă de nicăieri HTML5. Și HTML5 a revoluționat nu doar web-ul aplicațiilor business, ci a deschis larg porțile web-ului aplicațiilor multimedia – în special a jocurilor.
Noutatea multimedia
HTML5 vine cu o mare surpriză pentru dezvoltatorii de aplicații multimedia. Deja știm pe de rost că există tagul audio și video. Nu vom vorbi despre ele în acest articol. O examinare superficială arată că tagul audio nu este suficient pentru aplicații serioase, fiind gândit să ascundă complexitatea redării sunetelor. Tagul asigură eventual un background muzical – excelent pentru nostalgicii site-urilor din anii ’90. Pentru cei ce vor să dezvolte procesoare de sunet în timp real, HTML5 descrie o interfață specială: WebAudio. WebAudio permite poziționarea sunetelor într-un spațiu tridimensional, mixarea surselor multiple de sunet redate simultan și rutarea lor printr-un sistem modular puternic de procesare. Efectele aplicabile includ un motor de calitate înaltă pentru reverberații și simulare completă a spațiului de audiție. De asemenea, datele audio pot fi analizate în timp real. Aceste facilități au o țintă foarte specifică: jocurile și aplicațiile de procesare audio. Stațiile de procesare audio software au fost strict de domeniul desktopului. Niciodată nu s-a pus problema ca un artist să pornească browserul pentru a executa o performanță live. Nici nu s-a crezut că va avea vreodată sens ca o claviatură MIDI să comunice cu un browser web. Ei bine, totul s-a schimbat cu apariția WebAudio.
Infrastructură mai sofisticată
Pentru a ridica standardul multimedia în browsere atât de sus, WebAudio necesită o fundație specială. Pentru început, datele audio există într-un thread separat de restul aplicației – deci orice procesare este ferită de interferențele aplicației web. Datele audio, sursele, destinațiile sunetelor și nodurile de procesare există într-un context independent, cu un timp de sincronizare independent, asigurând păstrarea controlului asupra mai multor seturi de surse audio sincronizate. În clipa în care se instanțiază un asemenea context, deja se pot specifica surse de sunet, destinații și se pot defini procesoare de sunet conectate în diferite configurații: var context = new AudioContext(); var source = context.createBufferSource(); var volume = context.createGainNode(); source.buffer = buffer; volume.gain.value = 0.6; source.connect(volume); volume.connect(context.destination); source.start(0);
Arhitectura este de tip plugin: sunetul este încărcat într-un buffer (vom vedea mai târziu cum), buffer-ul este trimis la o sursă de date, apoi la un procesor de sunet, iar în final la o destinație. Destinația implicită a contextului audio este cea standard configurată în sistemul de operare – de obicei ieșirea “line out” a plăcii de sunet. Dincolo de sintaxa intuitivă, procesarea sunetelor este efectuată direct de driverul
www.todaysoftmag.ro | nr. 10/aprilie, 2013
15
programare HTML5: WebAudio API audio. Dacă sistemul deține o placă de sunet profesională, driver-ul va executa instrucțiunile folosind hardware-ul dedicat al plăcii de sunet. Dacă este vorba doar de un “codec”, rularea va regresa spre microprocesor. Indiferent de situație, arbitrul final este browser-ul. Modul în care browserul compilează, execută și decide rularea instrucțiunilor determină soarta datelor audio. O implementare bună însă va tinde să folosească resurse dedicate și să evite blocajele din fluxul de procesare și redare a datelor audio.
Noduri și grafuri orientate
trec prin graf sunt sunete reformulate întro formă accesibilă browserul-ui pentru procesare și redare ulterioară. Există mai multe tipuri de surse audio, în funcție de metoda de achiziție a sunetului: fișier existent pe disc, sample-uri generate în cod, oscilatoare și intrări hardware ale plăcii de sunet. După achiziția și formatarea sunetului, acesta poate fi trimis mai departe spre procesoare sau spre destinația audio.
Oscillator
O altă sursă audio este oscilatorul. Oscilatorul codifică sunetele în funcții periodice, repetate apoi la infinit – astfel caracteristica sa de bază este funcția generatoare. Există patru tipuri de oscilatoare predefinite: sinusoidal, pătrat, triunghiular isoscel și triunghiular drept. Oscilatoarele pot fi conectate în paralel pentru a comAudioBuffer pune funcții, generând astfel sunete Buffer-ele audio codifică sunetele complexe. în sample-uri, cum sunt fișierele audio. var source = context.createOscillator(); Caracteristica de bază a unui buffer audio source.type = 0; // oscilator sinusoidal source.connect(context.destination); se numește sample rate – frecvența cu care source.start(0); sunetul păstrat în buffer a fost analizat De asemenea, se pot formula oscilapentru a obține informații utile procesării toare particulare prin compunerea mai audio. Aceste valori sunt specifice procesă- multor funcții matematice într-un singur rii digitale audio și intră într-un domeniu generator: de cunoștințe mai vast, despre care nu vom var first = new Float32Array(100); var second = new Float32Array(100); vorbi aici. for (var i = 0; i < 100; i++) first[i] = Math. Pentru a folosi un fișier audio, acesta se sin(Math.PI * i / 100); for (var i = 0; I < 100; i++) second[i] = încarcă într-un buffer care apoi este conec- Math.cos(Math.PI * i / 100); tat la destinația unui context audio: source.setWaveTable(context.
Inițierea unui flux audio se face prin definirea unei surse de sunet. Aceasta poate fi o intrare live a plăcii de sunet (un microfon), un fișier audio existent sau un sintetizator de sunet (un oscilator). Desigur, în graf pot exista mai multe surse de sunet – fie generate, fie fișiere, fie live. Toate sursele de sunet pot fi redate simultan sau la cerere (la apăsarea unei taste de exemplu sau la primirea unui mesaj MIDI). Mai departe sunetul poate fi trimis spre var request = new XMLHttpRequest(); request.open(„GET”, „sound.mp3”, true); diferite noduri de procesare. Procesoarele request.responseType = „arraybuffer”; audio includ localizare în spațiu, efecte request.onload = function() { audioContext.decodeAudioData(request. specifice sunetelor aflate la distanță, efecte response, function(buffer) { // buffer conține un obiect de tip doppler, filtre, reverberații, ecouri, altele. AudioBuffer }); Orice nod suportă mai multe intrări și mai } multe ieșiri, permițând legături în serie și Buffer-ul permite accesarea sample-uriîn paralel. lor în mod direct: Există inclusiv un context audio offline, var buffer = audioContext.createBuffer(1, 5, 44100); deconectat de o sursă hardware de redare a var bufferData = buffer.getChannelData(0); sunetelor, ce poate fi folosit pentru gene- bufferData[i] = 0.3; rarea datelor audio independent de timp. Codul de mai sus creează un buffer cu Contextul “redă” sunetele ca pachet de date, un singur canal audio (mono), care conține accesibil într-o funcție callback: cinci sample-uri cu sample rate de 44100 callback OfflineRenderSuccessCallback = void Hz. Datele din buffer sunt accesibile într(AudioBuffer renderedData) un vector folosind metoda getChannelData interface OfflineAudioContext : AudioContext { void startRendering(); – vector în care apoi se poate scrie. În acest attribute OfflineRenderSuccessCallback onComplete; mod se pot construi sunete folosind ecuații } sau alte generatoare. În fine, redarea unui buffer Surse audio și conexiuni în graf audio se face folosind nodul de tip Graful de procesare audio primește AudioBufferSourceNode: informații de la surse audio. Datele care var source = audioContext.createBufferSource();
Figura 1 - Context audio
16
source.buffer = buffer; source.connect(audioContext.destination); source.start(0);
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
createWaveTable(first, second));
Live
Pentru folosirea surselor audio live cum ar fi un microfon, browser-ul trebuie să obțină un flux audio de la sistemul de operare. Din acest motiv, aceste surse sunt accesibile doar din obiectul Javascript ce reprezintă browser-ul: navigator.getUserMedia( { audio: true }, function(stream) { var context = new audioContext(); var source = context.createMediaStreamSo urce(stream); });
source.connect(context.destination);
Fluxul audio nu poate fi alterat în mod direct cum este cazul buffer-elor sau a oscilatoarelor dar, ca și celelalte surse audio, poate fi conectat la oricare din nodurile procesoare definite în graf. Acest tip de sursă audio depinde direct de hardware și de driverele instalate, iar achiziția datelor audio poate întârzia sau poate interfera cu alte procese care să afecteze claritatea semnalului. Browser-ul Chrome optimizează în mod special achiziția datelor audio live și permite crearea unor adevărate procesoare de sunet în timp real. Implementarea se bazează pe rutarea execuției cât mai rapid spre driverul audio. Dacă sistemul conține o placă de sunet dedicată, prelucrarea audio va avea întârzieri minime. În secțiunea Resurse există câteva link-uri ce demonstrează viteza de execuție în Chrome a platformei WebAudio.
TODAY SOFTWARE MAGAZINE Modificarea volumului audio
Există o serie de procesoare ale semnalului audio, fiecare cu specificele ei, dar în acest articol ne vom referi doar la modificarea volumului audio. Modificarea volumului se face conectând una sau mai multe surse audio la un nod de tip GainNode. Sursele audio pot fi cele descrise mai sus sau alte procesoare audio care primesc date audio: var gainNode = context.createGainNode(); source.connect(gainNode); gainNode.connect(context.destination); gainNode.gain.value = 0.8;
Modificarea volumului se poate automatiza și sincroniza cu alte evenimente dependente de timp: var envelope = context.createGainNode(); var now = context.currentTime; source.connect(envelope); envelope.connect(context.destination); envelope.gain.setValueAtTime(0, now); envelope.gain.linearRampToValueAtTime(1.0, now + 2.0);
În acest mod se pot stabili crossfade-uri între două surse de sunet de exemplu.
Tendințe
Situația actuală a platformei WebAudio nu este tocmai fericită. Practic ea este suportată în mod complet doar de browser-ul Chrome – și doar pe desktop. Doar ultimele versiuni de Chrome de pe platforma Android 4 suportă WebAudio, iar browserul implicit din Android nu este inclus aici. WebAudio mai este suportat de iOS6, de ChromeOS și de ChromeFrame. Însă platforma este definită și acceptată în standardul HTML5, ceea ce înseamnă că viitorul nu poate fi decât strălucit pentru dezvoltatorii de soft multimedia. Deja se pot construi sintetizatoare audio și procesoare în timp real a sunetelor analogice, iar în curând Chrome va implementa comunicarea cu dispozitive MIDI, permițând compoziția audio folosind claviaturi și alte dispozitive profesionale. Și ca o inovație, standardul WebAudio alături de WebSockets permite pentru prima dată crearea performanțelor audio în mod distribuit, pe web. Utilizatorii se pot conecta la un singur site web și pot crea împreună, simultan, piese audio de înaltă calitate – prima demonstrație a acestui tandem de tehnologii fiind site-ul jamwithchrome.
Resurse și referințe http://dashersw.github.com/pedalboard.js/demo http://www.jamwithchrome.com http://kevincennis.com/mix http://www.tenthcirclesound.com/sympyrean http://docs.webplatform.org/wiki/apis/webaudio http://webaudio-io2012.appspot.com https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html
www.todaysoftmag.ro | nr. 10/Aprilie, 2013
17
tehnologii
Enterprise Application Development
S
pre sfârșitul anilor ’90 majoritatea CD-urilor atașate cărtilor erau CD-uri “multimedia”: trei poze, dintre care un GIF animat, dacă erai norocos, și un fișier audio care transformau orice CD cu 600 de pagini de text într-un CD “multimedia”.
Lucian Ciufudean
lucian.ciufudean@hp.com Server Automation Functional Architect @ HP Software Cluj
Într-un mod similar, firmele de software care înainte livrau aplicații “simple” au început să se auto-intituleze ca livrând Aplicații Enterprise. Nu alegem calea controversată de a defini ce este o aplicație de nivel enterprise, în schimb vom puncta câteva trăsături importante ale modului de lucru al echipelor noastre și al unei aplicații pe care o dezvoltăm în Cluj. În HP Software Cluj-Napoca, construim aplicații cu echipe specializate: lăsăm programatorii și testerii să se dedice codului, în timp ce documentația oficială a produsului este scrisă de Information Engineers. Avem grijă ca utilizatorul să nu streseze mouse-ul și tastatura pentru a realiza ce dorește și pentru asta colaborăm cu UI Design-eri. Echipa de Product Management este prima linie de contact cu clientul, ei au rolul cel mai important în crearea viziunii pentru versiunile următoare ale produselor. Folosim o linie suplimentară de menținere a calității prin echipa Test Automation, a cărei responsabilitate este acoperirea produselor cu teste funcționale automate (pe lângă cele scrise de programatori). „Recomand ca programatorii să își scrie singuri testele automate ... Recomand ca un tester independent să scrie testele de integrare” - Kent Beck Ca să putem lucra eficient în SCRUM departe de clienții finali, avem câte un Functional Architect care joacă rolul de Product Owner în fiecare echipă. Lucrăm în sprinturi scurte ca să avem posibilitatea să reacționăm rapid la schimbări. Fiindcă SCRUM pune accent pe ideea de
18
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
îmbunătățire continuă, facem cursuri de specializare în SCRUM cu consultanți externi recunoscuți în domeniu. După livrare, rezolvăm escalările prin echipa de Suport și le traducem în funcționalități noi, schimbări de fucționalitate și hot fix-uri când e nevoie. În aceeași idee de a ajuta clienții, echipele de Suport și Current Product Engineering (CPE) participă activ în forum-urile publice ale produselor. Interpunem între Client și echipa de Dezvoltare ambele echipe de Suport și CPE tocmai pentru a diminua riscul ca incidente neprevăzute să interfereze cu buna desfășurare a SCRUM-ului. Avem o echipă dedicată denumită Professional Services care ajută clienții cu instalarea și configurarea produselor în medii complexe (vezi mai jos topologii de instalare pentru Server Automation) sau în cazul în care se dorește adaptarea diverselor aspecte ale produsului. Vrem să știm ce cred clienții despre versiunea următoare a produsului, așa că în cadrul Design Partner Program prezentăm și le cerem părerea despre funcționalitățile planificate. Dăm o mână de ajutor echipelor de vânzări prin demonstrații detaliate ale versiunii următoare a produsului în cadrul Early Program Release. Avem sute de clienți activi care se regăsesc între companiile mari ale lumii. Iar mulți clienți înseamnă mai multe cerințe, o mai mare varietate a nevoilor și multe idei de funcționalități noi pentru versiunea următoare: clienții sunt în definitiv cei care pun produsul la lucru într-un mediu real, nu doar în laborator. Nevoile de performanță, scalabilitate și varietate sunt proporționale cu mărimea
TODAY SOFTWARE MAGAZINE și logistica acestor companii. Ca exemplu, produsul Server Automation este folosit în centrele de date ale clienților pentru a face management la zeci de mii de servere. Suportăm peste 90 de combinații de sisteme de operare în diferitele lor versiuni instalate pe arhitecturi ca x86, x64, IA64, IBM zSeries, Solaris SPARC și PowerPC, așa încât pentru dezvoltare folosim un laborator virtualizat cu aproximativ 1500 de mașini pentru a suporta această varietate. Prin Server Automation oferim o aplicație pentru managementul si automatizarea centrelor de date. Începând chiar cu descoperirea mașinilor pe rețea și instalarea sistemului de operare, lista de funcționalități continuă cu instalarea și configurarea aplicațiilor, a patch-urilor, realizarea de audituri, managementul atât al mașinilor fizice cât și al celor virtuale și integrarea cu soluții de virtualizare de la principal administratori de sistem: îi asculOracle, VMware si Microsoft. tăm și știm că le place lumea Unix, așa că Instalăm Server Automation în diverse simulăm o consola de acest tip (SA Global Shell) prin care facem vizibilă întreaga infrastructura sub forma unui sistem virtual de fișiere. SA Global Filesystem unifică pentru utilizator modelul de date din SA (servere, pachete, clienti, centre de date, politici de audit) cu conținutul serverelor (sistemul de fișiere etc.). Următoarele Topologie Multimaster: Noduri SA (SA Core-s) comenzi afișează lista care asigura replicarea completa a datelor de servere vizibile utitopologii pentru a face managementul lizatorului curent și sistemul de operare al centrelor de date distribuite în mai multe unuia dintre ele: locații. O astfel de instalare este ilustrată în $ ls /opsw/Server/@ abc.hp.com m33.hp.com gist.hp.com figura de mai jos: $ cat /opsw/Server/@/abc.hp.com/attr/osVersion Topologie Multimaster: Noduri SA Microsoft Windows 2000 Advanced Server Service Pack 4 Build 2195 (SA Core-s) care asigură replicarea completă a datelor Instalările Satelit sunt potrivite pentru centre de date mai mici unde nu este justificată o instalare completă a unui SA Core. De asemenea, traficul dintre coreurile SA și Satelit poate fi limitat pentru a nu interfera cu traficul principal de date de la acea locație. În imaginea următoare se observă un detaliu de arhitectură folosit pentru a putea conecta centre de date aflate la distanțe mari, în rețele locale diferite: gateway-uri sunt instalate la ambele capete ale fiecărui canal de comunicare:
Putem expune chiar și conținutul regiștrilor unui server Windows în această consola Unix: $ ls /opsw/Server/@/abc.hp.com/registry/Administrator HKEY_CLASSES_ROOT HKEY_CURRENT_CONFIG HKEY_ CURRENT_USER HKEY_LOCAL_MACHINE HKEY_USERS
Interoperabilitatea aplicațiilor are o importanță extremă în lumea enterprise, așa că expunem funcționalitatea SA printr-un API pe care-l facem accesibil următoarelor tipuri de clienți: Java RMI, Python, SOAP, C# și script-urilor care rulează în Global Shell. Folosim javadoc-ul nu doar ca metodă standard de documentare a API-ului, ci și ca o modalitate de a explora și apela API-ul din browser, Twister fiind aplicația care permite asta. Respectăm utilizatorii în orice rol ar fi ei, finali sau ai API-ului, așa că un grup dedicat de programatori experimentați au misiunea să asigure compatibiltatea binară și funcționala a API-ului cu versiunile sale anterioare. Ne uităm la multe aspecte când testăm performanța produsului, iată câteva grafice
Utilizatorii finali ai aplicatiei sunt în www.todaysoftmag.ro | nr. 10/Aprilie, 2013
19
tehnologii Enterprise Application Development proiect, personal sau al companiei, singur sau în cadrul unei echipe. Ideile tale se pot materializa în functionalități noi pentru produse, iar dacă sunt într-adevăr deosebite, te susținem să le prezinți în forumul tehnic anual al HP, TechCon.
Server Automation: testarea performanței. (Notă: Imaginile au fost editate pentru a șterge informațiile confidențiale la această dată)
recente pentru Server Automation produse de o echipa dedicata testarii aspectelor non-funcționale: S e r v e r Au tom at i on : t e s t a r e a performanței. (Notă: Imaginile au fost editate pentru a șterge informațiile confidențiale la această dată)
20
Server Automation este doar una dintre cele patru aplicații enterprise pe care le dezvoltă în HP Software Cluj o echipă de 150 de angajați. Aici sprijinim inovația printr-un program global la nivel HP (InnoStream) și la nivel local în HP Software Cluj prin Vibrant Day – o zi pe lună în care ești liber să lucrezi la orice
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
programare
TODAY SOFTWARE MAGAZINE
Aspect Oriented Programming O introducere și câteva idei
P
aradigme precum MDD (model driven development) sau TDD (test driven development) joacă un rol important în dezvoltarea software în ziua de astăzi, o paradigmă nouă, numită AOP (aspect oriented programming) a început să devină din ce în ce mai populară în ultima perioadă. AOP are rolul de a modulariza anumite aspecte centrale ale unei aplicații, numit în limbajul de specialitate și cross cutting concern.
Knall Andreas
knall.andreas@msg-systems.com Java Team Lead @ .msg systems
Următoarele exemple ilustrează într-o manieră simplă câteva situaţii în care utilizarea a AOP într-o aplicație software ar putea face diferenţa: • Am preluat o aplicație Java existentă de la un alt furnizor iar aplicația nu are implementată nici un fel de mecanism de logging. Acest exemplu va fi abordat întro formă mai simplificată. • În aplicația mea Java doresc sa validez parametrii tuturor metodelor din layer-ul de service a aplicației. • Intenționez să “reîmpachetez” anumite excepții în layer-ul de service înainte ca acestea să fie transferate către client. De obicei o excepție specifică Java este convertită într-o excepție specifică aplicației. Desigur în practică se găsesc o sumedenie de altfel de situații de genul celor de sus, dar cele de sus au fost alese tocmai pentru că au toate cel puțin două lucruri în comun. În primul rând toate aceste soluții cad în aceași categorie de cross cutting concerns. Această sintagmă acoperă toate funcționalitățile care sunt comune unui set de clase, dar care reprezintă o funcționalite secundară a acestor clase. Pe lângă exemplele prezentate anterior, adică logging și error handling, se pot admite și alte funcționalități cum ar fi autorizarea sau aspecte legate de securitatea aplicațiilor. Rolul acestor funcționalități nu este minimalizat, dar sunt considerate funcționalități secundare, nefăcând parte din logica de business. În al doilea rând, presupunând că avem de-a face cu o aplicație tipică enterprise, este clar că implementarea oricăreia
din ideile prezentate mai sus, implică de regulă intoducerea de cod, în mai multe locuri din aplicație, codul fiind aproape indentic în toate aceste locuri. Cu alte cuvinte avem un potențial mare de cod duplicat. O soluție elegantă ar fi crearea a unui singur bloc de cod pentru fiecare problemă prezentată și folosirea acestui bloc de cod oriunde este necesar în cadrul aplicației. Pentru această categorie de probleme, AOP poate fi soluția salvatoare. Înainte de a prezenta un exemplu concret de AOP voi trece în revistă noțiunile care stau la baza acestei paradigme. • A d v i c e . U n a d v i c e e s t e funcționalitatea noastră de tip „crosscutting concern”pe care dorim să o aplicăm unor secvențe de cod. • Join Points. Un Join Point este un punct bine identificat în codul nostru, în cadrul căruia poate fi invocat un advice. Practic, în acest punct este executat codul care definește un advice. • Pointcut. Un Pointcut este un mod de a cuantifica și de a identifica Join Pointurile. • Aspect. Un Aspect este combinația între un Advice și un Pointcut. Aceasta paradigmă va avea diverse implementări în diverse limbaje de programare, în lumea Java existând mai multe framework-uri care oferă facilități AOP. Dintre limbajele și framework-urile care oferă facilități AOP, ar fi de amintit următoarele: .NET FRAMEWORK, Java, Cobol, Javascript. Dacă vorbim în particular despre Java, cele mai populare framework-uri care aduc funcționalități AOP sunt AspectJ
www.todaysoftmag.ro | nr. 10/aprilie, 2013
21
programare Aspect Oriented Programming și Spring AOP. De reținut este faptul că implementările AOP pot avea un model de bază ușor diferit sau mai evoluat decât cel reprezentat de cele patru elemente prezentate anterior (advice, join points, pointcut și aspect). Toate implementările diferă una de alta, unele oferind soluții complete AOP, precum AspectJ, iar altele doar funcționalități de bază. Pentru a exemplifica acest lucru se vor prezenta cele patru tipuri de advice-uri pe care le oferă Spring AOP, descrierea lor succintă fiind următoarea: • Before advice – Un advice este folosit înainte de execuția unei metode. • After returning advice – Un advice este folosit după ce o metodă returnează un rezultat. • After throwing advice – Un advice este folosit după ce o metodă aruncă o excepție. • Around advice – Această opțiune îmbină toate cele 3 variante descrise mai sus. După cum se poate bine observa Spring AOP oferă doar posibilitatea de a adăuga un advice unei metode. Alte framework-uri, AspectJ fiind probabil cel mai popular, oferă și posibilitatea de a adăuga un aspect membrilor de clasă. Mai mult decât atât, AspectJ oferă o gamă largă de funcționalități, de exemplu un Around advice pentru metode, dar doar dacă acestea au un anumit tip de parametri. Continuăm cu prezentarea unui exemplu concret de folosire a AOP, prin implementarea AOP aparținând framework-ului Spring. Am ales Spring, ținând cont de popularitatea și simplitatea acestui framework, ceea ce permite o înțelegere mai facilă a exemplului dat. Exemplul se folosește de toate conceptele prezentate anterior (advice, join points, pointcut și aspect) și asigură o facilitate de logging pentru clasele de DAO dintr-o aplicație Java enterprise. Presupunem în continuare că avem următorul obiect de DAO (data acces object), BookDAO, care are rolul de a citi cărți din baza de date și de a insera cărți în baza de date. Metoda de citire aruncă o excepție specifică aplicației în momentul în care nu a fost găsită cartea căutată. public class BookDAO { public BookEntity findBookById(Long name) throws ItemNotFoundException { //Finding Book code }
}
public BookEntity saveBook(){ //Saving Book code }
22
Entitatea Book, în forma ei simplificată arată în felul următor: public class Book { private Long id; private String name; public void setName(String name) { this.name = name; } public void setId(Long id) { this.id = id; } public Long setId(){ return id; } public String geName(){ return name; } }
Dacă clasa Book are o formă simplă, în schimb implementarea advice-ului nostru pentru logare este puțin mai complicată, implementată în clasa MyAroundMethod. Pentru a oferi un exemplu cât se poate de concret am decis să implementez un advice de tipul Around Advice. Pentru a realiza acest lucru clasa noastră MyAroundMethod va trebui să implementeze interfața MethodInterceptor. public class MyAroundMethod implements MethodInterceptor { @Override public Object invoke(MethodInvocation method Invocation) throws Throwable { System.out.println( „Numele Metodei in care ne aflam : „ + methodInvocation.getMethod().getName()); System.out.println( „Parametrii metodei in care ne aflam : „ + Arrays.toString(methodInvocation .getArguments())); System.out.println( „MyAroundMethod: Interceptie inaintea” + “executiei metodei”); try { Object result = methodInvocation.proceed(); System.out.println(„MyAroundMethod : ” +” Interceptie dupa executarea metodei”); return result; } catch (ItemNotFoundException e) { System.out.println(„MyAroundMethod :” +”Interceptie in urma aruncarii unei “ +”exceptii”); throw e; } } }
BookEntity bookEntity = bookDAO. findBookById(new Long(1)); bookEntity.setName(„Nume nou de carte!”); System.out.println(„********************”); bookDAO.saveBook(bookEntity); System.out.println(„*********************”); BookEntity bookEntity = bookDAO. findBookById(new Long(2)); } catch (Exception e) { //prinde o exceptie } } }
Configurația Spring, prezentă prin fișierul Spring-DAO.xml este fișierul care definește pentru exemplul nostru toate elementele AOP prezentate anterior. Cititorul care nu este familiarizat cu elementetele specifice Spring poate să înțeleagă cu ușurință punctele esențiale din acest fișier de configurație urmărind comentariile elementelor. <beans xmlns=”http://www.springframework.org/ schema/beans” xmlns:xsi=”http://www.w3.org/2001/XMLSchemainstance” xsi:schemaLocation=”http://www.springframework. org/schema/beans http://www.springframework.org/schema/beans/ spring-beans-2.5.xsd”> // Aici este definit beanul Book <bean id=”BookDAO” class=”com.msg.Book” /> // Aici este definit Advice-ul nostru ca si // bean, si este folosit la definirea aspectului <bean id=”MyAroundAdvice” class=”com.msg.MyAroundMethod” /> // // // // // //
Aici definim un proxy care indică pentru beanul nostru BookDAO aspectul sau aspectele folosite. Prin setarea proprietatii target indicăm beanul vizat de aspect,care este ulterior indicat prin setarea proprietatii interceptorNames.
<bean id=”customerServiceProxy” class=”org.springframework.aop.framework. ProxyFactoryBean”> <property name=”target” ref=”BookDAO” /> <property name=”interceptorNames”> <list> <value>myOwnAdvisor</value> </list> </property> </bean> // Aici este definit Ascpectul, care este format // din pointcut si advice <bean id=”myOwnAdvisor” class=”org.springframework.aop.support.Regexp MethodPointcutAdvisor”> // Aici este implementat pointcutul nostru <property name=”patterns”> <list> <value>.*URL.*</value> </list>
MainClass, precum sugerează numele </property> // Aici definim advice-ul nostru in cadrul deja, este clasa care rulează aplicația noas- // aspectului <property name=”advice” ref=”MyAroundAdvice” /> tră mică. Scenariul pe care îl urmărim este </bean> următorul: căutăm o carte din baza de date, </beans> îi modificăm numele și o salvăm din nou în baza de date. Apoi încercăm să încărcăm Ceea ce se observă este lipsa din fișierul din baza de date cartea cu Id-ul 2, care desi- de configurare a unei liste explicite de join gur pentru a fi un exemplu reușit nu există point-uri. Aceste puncte nu se definesc de în baza de date. regulă în fișierele de configurare, ele fiind un rezultat al definirii a unui sau a mai public class MainClass { multor pointcut(uri). În cazul de față am public static void main(String[] args) { ApplicationContext appContext = definit un pointcut folosind regular exprenew ClassPathXmlApplicationContext( new String[] { „Spring-DAO.xml” }); ssion Java. Aceste pointcut-uri se pot defini BookDAO bookDAO = (BookDAO) appContext în mai multe feluri, depinzând evident de .getBean(„BookDAOProxy”); soluția AOP aleasă. Am optat pentru varitry { anta cu expresia regulară pentru a ilustra System.out.printn(„*******************”); cât de puternică este totuși această facilitate
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
TODAY SOFTWARE MAGAZINE de a indentifica join point-urile, cunoscută fiind puterea și flexibilitatea regular expressions Java. În cazul exemplului nostru join point-urile sunt cele două metode definite în BooksDAO. Ceea ce se poate vedea în urma execuției codului în consolă este următoarea secvență de mesaje. ************************* Numele metodei in care ne aflam : findBookById Parametrii metodei in care ne aflam: [Long(1)] MyAroundMethod : Interceptie înainte executiei metodei MyAroundMethod : Interceptie dupa executarea metodei ************************* Numele metodei in care ne aflam: saveBook Method arguments : [Book] MyAroundMethod : Interceptie înainte executiei metodei MyAroundMethod : Interceptie dupa executarea metodei ************************* Numele metodei in care ne aflam: findBookById Parametrii metodei in care ne aflam: [Long(2)] MyAroundMethod : Interceptie înainte executiei metodei MyAroundMethod : Interceptie in urma aruncarii unei exceptii
Așadar folosind AOP am reușit să introducem un mecanism de logare în toate clasele noastre DAO, fără a scrie mult cod, care să fie împrăștiat prin toată aplicația. Analog fiecare cross-cutting concern din aplicația voastră poate fi implementat într-o manieră transparentă, în propria lui clasă (separate de logica de business) și folosit în toate locurile în care este necesar. În ultima parte, dorim să vă expunem anumite idei care s-au cristalizat de-a lungul timpului în jurul conceptului de AOP, precum și puncte de vedere pe care echipa noastră le-am acumulat din folosirea AOP. Cel mai important lucru de reținut este faptul că AOP nu este o soluție universală pentru multe din problemele care apar pe parcursul dezvoltării software. Este o abordare relativ nouă, care în unele situații ne poate ajuta, dar în altele nu. Bineînțeles, sunt și dezavantaje, iar acestea sunt legate în principal de două aspecte importante. Primul este legat de performanță în momentul în care într-o aplicație mare sunt folosite multe aspecte, care pot posibil interacționa. De aceea, este de preferat ca doar anumite funcționalități ale unei aplicații, și aici ne referim la cele cu adevărat importante, să fie modelate și modularizate cu AOP. Un al doilea dezavantaj îl constituie organizarea si executarea codului, care prin introducerea AOP îngreunează procesul de debugging. Prezentăm un scenariu, care pare a fi des întâlnit când se folosește o astfel de abordare. Imaginați-vă o aplicație medie spre mare, de tip enterprise, în care o serie de aspecte acoperă mare parte din funcționalitatea secundară, iar membrii echipei de dezvoltare care nu sunt obișnuiti cu AOP fac debugging pe o funcționalitate relativ complexă. În astfel de cazuri se întâmplă Concluzie ca membrul(i) echipei de dezvoltare să nu își poată explica fluAm expus folosirea AOP pe baza unui scurt exemplu bazat pe xul codului în totalitate ceea ce poate duce la apariția unor efecte Spring AOP. Ce ar trebui să reținem? AOP este o nouă paradigmă, cel puțin bizare la execuția codului. Misterul poate fi greu eluci- cu multiple implementări, care, dacă este folosită cu cap poate dat dacă aspectele nu sunt definite prin intermediul anotărilor ci aduce avantaje majore dezvoltării software. prin fișiere de configurare bine ascunse și nefamiliare. Chiar și atunci când se trece peste aceste inconveniențe inițiale și se folosesc tool-uri specializate, debugging-ul poate fi, prudent formulat, neplăcut, iar fluxul codului în continuare greu de urmărit. În acest punct trebuie amintit că există diferite forme sub care elemente de AOP pot fi definite. De exemplu un advice poate fi definit ca în exemplul nostru, stil old school prin intermediul unui fișier de configurare sau într-un mod mai actual, anume prin adnotări. Dar din nou e de amintit că aceste elemente diferă de la implementare la implementare.
www.todaysoftmag.ro | nr. 10/Aprilie, 2013
23
management
Provocările unui Business Analyst
R
Daniela Haliga
esponsabilitatea unui Business Analyst constă în înțelegerea nevoii de business, analiza și modelarea proceselor de business, asociate dezvoltării proiectelelor software. De regulă aceste proiecte sunt complexe, iar Business Analyst-ul trebuie să obțină informații din toate sursele disponibile. Și nu este o sarcină ușoară. Întregul proces de dezvoltare al proiectelor, pune Business Analyst-ul în situația de a se confrunta cu o serie de provocări. Care este cea mai mare provocare? Probabil ar fi dificil de stabilit, dar am putea afirma că următoarele provocări au o greutate semnificativă și un impact direct, pozitiv sau negativ, în activitățile zilnice ale unui Business Analyst.
Business Analyst @ Endava Iași
Atingerea obiectivelor propuse
daniela.haliga@endava.com
De câte ori nu ați fost nevoiți să organizați diverse întâlniri, având obiective diferite? Și cumva fără să vă dați seama ați ajuns în următoarea situație: “ne-am întâlnit, am vorbit două ore pe subiectul stabilit și nu am hotărât nimic”? Indiferent de obiectivul dorit a fi realizat (identificarea oportunităților sau a persoanelor interesate, documentarea cerințelor, analiza proceselor) este recomandat ca înainte de orice, să aveți o imagine de ansamblu asupra nevoii de business și a obiectivelor proiectului. Mai exact, unde anume vă situați, sau în ce faza a proiectului sunteți. E bine să știți înainte de a începe ședința ce anume vreți să obțineți în timpul propus. E bine să vă concentrați pe ceea ce puteți realiza, în funcție de priorități, iar lucrurile nerezolvate care necesită o analiză mai amănunțită să le stabiliți într-o viitoare sesiune.
Stabilirea unei relații de colaborare cu persoanele interesate
Una dintre marile provocări cu care se confruntă un Business Analyst este aceea de a înlătura barierele de comunicare (fie din cadrul echipei, fie din cadrul organizației). Și pentru a reuși, Business Analyst-ul trebuie să depună un efort suplimentar ca să afle răspunsuri la toate problemele. Ce se poate face în această situație? Identificați acele persoane interesate care definesc nevoia de business, care
24
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
dețin informații importante sau care au un cuvânt de spus cu privire la soluția implementată. Simplul motiv că acestea nu vor să împărtășească informații, ar trebui să ridice un semn de întrebare. Și este de datoria Business Analyst-ului să înțeleagă motivele care stau la baza acestui comportament: • Sunt ele rezistente la schimbare? Sunt obișnuite cu modul lor de lucru și de aceea nu acceptă sau nu sunt confortabile cu noul sistem? • Avem de-a face cu probleme legate de orgolii sau chestiuni politice? • Sau pur și simplu nu înțeleg de ce procesul schimbării se întâmplă cum se întâmplă. Înțelegând motivele care stau în spatele acestui comportament, puteți să acționați în consecință! Ceea ce trebuie să faceți și funcționează în cele mai multe cazuri, este să câștigați încrederea clientului. Acest lucru de regulă se întâmplă după câteva sesiuni de lucru împreună. O dată inițiat contactul cu clientul, există și comunicare mai bună. În cazul în care nu se poate comunica direct (se recurge la comunicare la distanță), atunci este nevoie de ceva abilități și calități suplimentare din partea unui Business Analyst precum: atitudine pozitivă, comunicare eficientă, orientare spre rezolvarea problemelor, spirit de echipă, încredere, flexibilitate,
TODAY SOFTWARE MAGAZINE adaptabilitate. Pentru a facilita o conexiune cu clientul, puteți încerca replici de genul: “ce ați mai facut, de când nu am mai vorbit?”; “cum e vremea?”. Apropiați-vă clientul! Câștigați încrederea clientului și stabiliți relații de lungă durată. Implicați-l activ în dezvoltarea proiectului, ascultați-l!
Facilitarea ședințelor
Având responsabilitate de lider, câteodată Business Analyst-ul este nevoit să îndeplinească mai multe roluri. De exemplu să faciliteze ședința și în același timp să noteze ideile esențiale. Se face o greșeală când se asociază rolul de scribe cu rolul de facilitator. Câteva trucuri care vă ajută să fiți eficienți: • Folosiți o agenda listată cu spații libere între subiecte/întrebări, pentru a putea completa cu răspunsurile corespunzătoare; • Folosiți template-uri; • Folosiți acronime (NC – noi cerinte); • Imediat după ședință notați toate ideile importante; • În timpul ședinței lăsați-vă câteva minute pentru a verifica dacă a fost acoperit tot ceea ce v-ați propus; • Stabiliți un timp necesar și încercați să vă încadrați în acest timp - ce e mult strică; • Concluzionați cu sublinierea ideilor principale asupra cărora toată lumea s-a pus de acord - acest fapt reflectă că obiectivul ședinței a fost atins. De multe ori ceea ce vi s-a părut că ați înțeles poate să fie total diferit de ceea ce au înțeles ceilalti participanți la ședință.
Investiție în cerințe de calitate
Există o fabulă veche care vorbește despre șase orbi care întâlnesc pentru prima dată un elefant. Deși aceștia nu puteau vedea elefantul, doreau foarte mult să știe cum arată unul. Fiecare din cei șase au pus mâna pe elefant, pe o diferită parte a elefantului. Primul cuprinde cu mâinile un picior al elefantului și spune: ”A, elefantul e exact ca un copac”. “Nu-i adevarat”, spune cel de-al doilea care ținea elefantul de coadă. “Elefantul e ca o franghie”. Cel de-al treilea orb a fost lăsat mai de o parte, si replică: “Elefantul e ca un perete”. Al patrulea, cu mâna pe trompă, se bagă și el în seamă și zice.”Nu aveți dreptate. Elefantul e ca un șarpe”. Al cincilea atinge colții elefantului și spune că este o sulița pe când ultimul, hotărât, spune că toți ceilalți se înșeală și că elefantul e de fapt un ventilator (acesta ținând elefantul de ureche)1. Morala fabulei și legătura cu tema noastră de astăzi? Toți cei șase au dreptate. Elefantul are toate cele șase caracteristici descrise de ei , dar nici una nu descrie în ansamblu ceea ce reprezintă un elefant, pentru că fiecare a descris elefantul din propriul lui punct de vedere. Același raționament se poate aplica și în cazul documentării cerințelor. E o practică bună de urmat să dezvoltați/să analizați cerințele din unghiuri diferite. Folosiți “DE CE” întrebări (DE CE/DE CE acum/ DE CE nu). Evitați pot/aș putea/ar trebui, sau alte întrebări care pot conduce la un răspuns. Care este scopul? Să comparați cerințele provenite de la diferite persoane interesate și să revelati erori/duplicități sau 1
sursa: www.modernanalyst.com
interpretări diferite. Dacă există , atunci reprezintă probleme ce trebuie rezolvate imediat.
Alinierea diferitelor viziuni
S-a expus anterior cum aceeași funcționalitate a sistemului poate avea înțelesuri diferite, reprezentând viziuni diferite, din perspective diferite. Acestea provin de regulă din domeniul de activitate al persoanelor cheie (într-un fel vede produsul angajatul din departamentul de marketing și în alt fel cel din IT). Alinierea viziunilor într-o singură direcție reprezintă o adevărată provocare, pentru că de acest lucru depinde dacă proiectul va avea succes sau nu. Ce se poate face? Business Analyst-ul trebuie să realizeze o viziune de ansamblu a întregului business, având mereu în vedere care este nevoia reală de business ce trebuie satisfăcută; să ia în considerare toate perspectivele, să cunoască organizația (mediul, produsul, piața, competitorii), și persoanele interesate (care sunt, nivelul de putere/ interes), atitudinea lor vazavi de soluția implementată ( vor susține soluția sau vor fi total împotrivă și vor crea blocaje?). Business Analyst-ul trebuie să dea dovadă că este un bun mediator și un bun negociator, astfel încât să faciliteze drumul spre o înțelegere/compromis.
Lipsa de angajament a persoanelor cheie Participarea persoanelor interesate este esențială, căci acestea dețin informații relevante asupra business-ului, cu impact asupra dezvoltării proiectului, dar și pentru
www.todaysoftmag.ro | nr. 10/Aprilie, 2013
25
management Provocarile unui Business Analyst că trebuie să aprobe cerințele. Dacă nu avem acordul lor iar colaborarea este una dificilă, atunci proiectul poate fi într-un impas. Iată câteva situații, mai des întâlnite, în relația Business Analyst – Stakeholders: 1. Persoane cheie neimplicate– sunt cei care în trecut au fost implicați în planificarea și configurarea unui proiect care nu s-a finalizat tocmai în cele mai bune condiții, și care acum prezintă temeri în asumarea responsabilităților asupra etapei de documentare a cerințelor (“dacă nu s-a luat ceva în considerare?”, “dacă am omis ceva?”). Acest lucru pune și Business Analyst-ul într-o situație dificilă, pentru că nici el la rândul lui nu vrea ca ceva important să fie scăpat din vedere. Ce se poate face? Dacă este timp, folosiți tehnici de descoperire a cerințelor (brainstorming, workshop-uri) și mai puțin interviuri, observări. Aceste tehnici antrenează idei noi și creativitatea în grup. Asigurați persoanele interesate că dacă ceva a apărut pe parcurs, sau nu a fost luat în considerare până în acel moment, respectivele cerințe vor primi prioritate maximă și vor fi implementate în următoarele versiuni/build-uri ale sistemului. 2. Persoane cheie care ajung greu la un compromis – sunt cei cu personălități puternice, cu viziuni diferite asupra unei caracteristici ale sistemului. Ce se poate face? Subliniați faptul că dacă nu se ajunge la un acord comun, acest lucru înseamnă un risc pentru că se pierde timp, și pot să apară presiuni și frustrări în cadrul echipei. Asigurați-i că ați luat în calcul toate părerile/punctele de vedere și compromisul în sine nu le va afecta performanța sau siguranța locului de muncă. 3. Persoane cheie dezinteresate– sunt cei care consideră că proiectul nu este important. Ce se poate face?
26
Încercați diplomația. De exemplu, dacă vă adresați direct persoanei, (telefon/ e-mail):” Andrei, nici un alt angajat din această companie nu cunoaște sistemul la fel de bine ca tine. Și din acest motiv, chiar avem nevoie de tine. Ai avea o contribuție semnificativă dacă ai participa activ la ședințe, și ne-ai împărtăși din cunoștințele tale. Așa ne putem asigura că totul este la locul lui, și funcționează corespunzător”. Dacă lipsa participării acestui stakeholder are o influență majoră asupra viitorului proiectului, atunci e bine să implicați și o persoana cu putere de influență/decizie din cadrul organizației sau managerul de proiect.
Un Business Analyst tehnic sau nontehnic
Trebuie un Business Analyst să dețină cunoștințe despre ultimele tehnologii, despre detaliile tehnice ale sistemului? Și dacă da, care ar fi gradul de înțelegere al acestor lucruri? Cât de tehnic ar trebui să fie un Business Analyst? Părerile sunt împărțite. Dar ceea ce este sigur și toată lumea este de acord cu, este că un Business Analyst ar trebui să dețină suficiente cunoștințe tehnice sau competențe tehnice cât să-i faciliteze comunicarea cu echipa de dezvoltare. În ceea ce privește relația cu clientul, Business Analyst-ul trebuie să înțeleagă în ce fel tehnologia poate îmbunătăți business-ul, astfel încât să poată contribui la găsirea celei mai potrivite soluții. La fel de important este că “Tehnologia nu trebuie să dicteze niciodată direcția în care merge business-ul!”. Din acest motiv răspunsul la întrebarea “Este posibil să fii o persoană non-tehnică și totusi să excelezi ca și Business Analyst” este cu siguranță DA. Desigur, în acest caz trebuie să compensezi cu alte abilități precum: gândire critică și analitică, comunicare eficientă, abilități de leadership.
Nu uitați
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
Literatura de specialitate cât și cei ce își desfășoară activitatea ca Business Analyst recomandă să investigăm întotdeauna cauzele problemelor, să nu tratăm doar simptomele. Să alegem agilitatea și nu perfecțiunea, mai exact organizațiile să fie receptive la presiunile externe astfel încât să recunoască din timp importanța soluțiilor oportune și relevante. Dar mai presus de toate, se recomandă să fim mereu flexibili și adaptabili oricărei situații sau audiențe. Putem avea concepte, practici bune de urmat, experiență, însă, pentru că este imprevizibil și pentru că poate avea un impact atât pozitiv cât și negativ în toate nivelurile de funcționare, factorul uman rămâne, din punctul meu de vedere, cea mai mare provocare.
HR
TODAY SOFTWARE MAGAZINE
Comunităţile de practică, învăţare prin acţiune şi explorare Implicarea minţii şi a corpului în procesul de învăţare
D
eşi multe aspecte ale evoluţiei omului sunt controversate, un lucru este unanim acceptat de către antropologi: Ne mişcăm (Brain Rules, John Medina; 2008). Pe parcursul a sute de mii de ani, de la Homo Habilis la Homo Erectus şi, ulterior, Homo Sapiens, creierul s-a dezvoltat parcurgând distanţe „între 10 şi 20 km pe zi pentru bărbaţi şi cam jumătate în cazul femeilor”, afirma antropologul Richard Whrangham.
Cristina Donea
cristina.donea@isdc.eu HR Specialist @ ISDC
În istoria omenirii, educaţia şi învăţarea au avut o valoare adaptativă incontestabilă. Încă din antichitate, procesul de învăţare beneficia de o atenţie deosebită, modelele şi principiile utilizate fiind extrem de diverse şi dinamice. Acestea stimulau imaginaţia, creativitatea şi implicarea învăţăcelului, având un caracter ludic, imagistic, practic, respectând modul natural de învăţare a creierului. Chiar dacă nu este primul lucru la care ne gândim, decăderea metodelor holistice în cadrul educaţiei a început odată cu invenţia lui Johannes Gutenberg a maşinii de tipărit din 1440. Acest lucru a avut diverse repercusiuni asupra educaţiei, printre care: • Procesarea predominantă a cuvintelor, mai puţin a imaginilor; • Accentuarea învăţării individuale, în defavoarea celei de tip colaborativ; • Operarea cu concepte abstracte, latura practică şi concretă fiind redusă la minim; • Separarea minţii şi a corpului în procesul de învăţare.
activitate de instruire şi dezvoltare reuşită. Deseori trainerii se orientează către conţinut şi alocă aproximativ 80% din timpul total pregătirii materialelor de curs (suporturi de curs, handout-uri, slide-uri). Învăţarea autentică are loc în momentul în care cursantul este implicat activ, dinamic şi total, mai puţin atunci când doar audiază o prezentare. În ISDC, motto-ul procesului de training este „focalizarea către învăţare, nu către instruire”. De fapt, cursanţii sunt cei care trebuie să fie pe scenă în lumina reflectoarelor, să fie proprii stăpâni ai procesului de învăţare. „Rolul facilitatorului este să iniţieze procesul de învăţare şi ulterior să se retragă” (John Warren). De multe ori cursanţii sunt trataţi ca şi consumatori de informaţie, de cunoştinţe, de abilităţi, bombardaţi cu modele şi teorii pe care le uită odată ieşiţi din sala de curs. Sau nu le folosesc niciodată. Revoluţia educaţională propune tratarea cursanţilor în calitate de creatori şi stăpâni ai propriului proces de învăţare, ai propriului conţinut de informaţie, de cunoştinţe şi abilităţi noi. Procentul optim pentru ponderea în cadrul unei Aceste efecte se păstrează până în zilele experienţe de învăţare a activităţii de prenoastre şi, din păcate, sunt baza sistemu- dare versus exersării este de 30% - 70%. lui românesc de învăţământ tradiţional. Din acest motiv programele de training Oamenii îşi amintesc, în medie: au beneficiat de un succes foarte mare, iar • 20% din ceea ce citesc principiile şi contextele de învăţare necon• 30% din ceea ce aud venţionale au avut mare aderenţă în rândul • 40% din ceea ce văd cursanţilor. • 50% din ceea ce spun • 60% din ceea ce fac Predare vs. învăţare autentică • 90% din ceea ce văd, aud, spun şi fac Predarea nu este învăţare. Acest lucru Sursa: Rose, C., & Nicholl, M.J., banal, care poate fi trecut cu vederea şi Accelerated Learning for the 21st Century. neglijat, este unul de bază pentru orice www.todaysoftmag.ro | nr. 10/aprilie, 2013
27
HR Comunităţile de practică, învăţare prin acţiune şi explorare Astfel, este extrem de important ca formatorii să creeze contextul, atmosfera, situaţiile cele mai potrivite pentru a maximiza efectele trainingului. Mai mult, aplicarea principiilor de învăţare accelerată are ca şi efecte pozitive scăderea timpul petrecut în sală (chiar la jumătate) şi a costurilor de orice natură, creşterea transferului, a satisfacţiei, motivaţiei şi implicării cursantului în muncă şi în aplicarea noilor cunoştinţe. Descoperirile ştiinţifice asupra modului în care funcţionează creierul nostru (Bransford, Brown & Cocking 2000; Damasio 1999; Medina 2008; Pinker 1997) determină o re-examinare a principiilor tradiţionale de design, predare şi livrare a programelor educaţionale.
Cum accelerăm efectele training-urilor?
Cele mai de succes programe de training se bazează pe faptul că învăţarea implică atât mintea, cât şi corpul. Este un proces conştient, raţional, verbal, dar implică şi emoţiile, simţurile, receptorii. „Suntem exploratori naturali şi puternici (...) Aceasta dorinţă de a explora nu ne părăseşte în pofida faptului că suntem vârâţi în săli de clasa şi cubicule” (Brain Rules, John Medina). În cadrul training-urilor, cursanţii ar trebui stimulaţi să: • Lucreze în echipe; • Creeze hărţi cognitive; • Construiască un model (concept, proces sau procedură); • Lucreze efectiv pe calculator, punând în aplicare ce se preda în timp real şi beneficiind de feedback din partea formatorului; • Discute după fiecare exerciţiu, simulare, experienţă. Concluzii unde se cer; • Dezbată pe diferite teme de interes; • Realizeze proiecte care să necesite mişcare, explorare şi experienţă activă (un exemplu ar fi field trip-urile).
şi au fost obţinute 46 de certificări (OCJP, Microsoft, ISTQB, SCRUM, ITIL, Prince 2 Foundation şi Prince 2 Practitioner). O parte dintre evenimentele externe la care am participat în 2012 au fost QCON (Londra), NOSQL (Amsterdam), Devoxx (Antwerp), Essentials of Mule (London), Springone on the road (London), Mule Summit (Amserdam), EUROStar (Amsterdam), NEXT 2012 (Cluj-Napoca), SCRUM Gathering (Barcelona), Open Agile (Cluj-Napoca), Sakai Conference (Atlanta), Service Oriented Architecture Suite 11g Implementation (Bucuresti), Liferay Symposium (Budapest), IT Camp (Cluj-Napoca), Code Camp (Cluj-Napoca). Ulterior evenimentelor, participanţii realizează sesiuni de transfer către colegii care sunt interesaţi şi/sau către comunităţile de practică din care fac parte.
Comunităţile de practică
Metodele enumerate mai sus sunt doar câteva propuneri pentru accelerarea învăţarii şi investește cursanţii cu rolul de creatori de informaţie. În ISDC, una dintre cele mai populare activităţi de învăţare şi dezvoltare, cu focus activ către crearea de cunoştinţe noi, sunt comunităţile de practică. Conceptual, comunităţile de practică
În ISDC se derulează sesiuni de training şi de transfer de cunoştinţe, dezbateri, programe de certificare şi se participă la conferinţe şi evenimente externe. Numărul de evenimente de învăţare structurate şi organizate creşte de la an la an, spre exemplu în calendarul de training din 2012 au fost găzduite 160 de evenimente, faţă de 89 în 2011
28
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
sunt inspirate din modul de organizare a breslelor. Mai nou, Seth Godin susţine în cartea lui, Triburi, modul firesc de organizare şi progres prin împărtăşire de cunoştinţe şi dezbateri a oamenilor în comunităţi: “Un trib este un grup de oameni conectaţi unul la celălalt, conectaţi la un lider şi conectaţi la o idee. Timp de milioane de ani, oamenii au aparţinut triburilor. Un grup are nevoie de doar două lucruri pentru a fi un trib: un interes comun şi un mod de comunicare.” Seth Godin, Tribes: We Need You to Lead Us. Plecând de la dorinţa şi nevoia oamenilor de a aparţine grupurilor, comunităţile de practică aduc o nouă formă de învăţare şi transfer de cunoştinţe în cadrul organizaţiilor. Mai mult, comunităţile pot aduce o contribuţie semnificativă în ceea ce priveşte: • Alinierea practicilor de succes, procedurilor şi instrumentelor folosite în cadrul companiei; • Maparea cunoştinţelor şi identificarea discrepanţelor / nevoilor de instruire; • Cercetarea pe zone de interes şi împărtăşirea rezultatelor în comunitate şi la nivel de companie; • Împărtăşirea de informaţii între membrii comunităţii;
TODAY SOFTWARE MAGAZINE • Id e nt i f i c a r e a c o mp o n e nt e l o r reutilizabile; • Suportul tehnic de specialitate de la experţii din comunitate. Abordarea acestei modalităţi de învăţare în cadrul unei companii presupune: 1. Identificarea nevoilor de transmitere a cunoştinţelor/practicilor şi de aliniere la nivel de companie; 2. Realizarea unei liste scurte cu topicile de interes (tehnologie, disciplină sau rol) care ar aduce cea mai mare valoare adăugată în cadrul companiei şi ar avea cel mai mare impact; această etapă nu trebuie să piardă din vedere viziunea şi strategia organizaţiei; 3. Selectarea comunităţilor cu cel mai mare impact; acest pas presupune punerea în concordanță a managementul cu persoanele interesate. Pentru început, se recomandă un număr mai mic de comunităţi, pentru a facilita monitorizarea şi dezvoltarea continuă; 4. Stabilirea unui cadru de referinţă în
care să activeze comunităţile; 5. Alegerea unui sponsor/responsabil/ Product Owner din cadrul echipei de management pentru fiecare comunitate; 6. A l e g e r e a u n u i l i d e r / S C RU M MASTER al comunităţii; 7. Realizarea unui plan general de abordare a activităţii comunităţii respective (situaţia curentă, misiunea şi viziunea comunităţii, obiectivele generale, strategia, modul în care se va măsura beneficiile şi progresul, activităţile, metodele de învăţare, etc.); 8. Stabilirea membrilor de bază ai comunităţii; 9. Definirea criteriilor de selecţie pentru membri noi 10. Stabilirea unui set de norme după care funcţionează comunitatea pentru a asigura oportunitatea egală a membrilor de a contribui în întâlniri, pentru a creşte eficienţa şi a facilita atingerea obiectivelor propuse. Aceste norme ar trebui să conţină aşteptări referitoare la participare, luare de decizii, contribuţie,
confidenţialitate, conduită în cadrul întâlnirilor. După cum am menţionat în capitolele anterioare, pentru a transforma experienţele de training într-o învăţare autentică, este esenţială creativitatea şi implicarea activă a cursanţilor în crearea de conţinut informaţional. Învăţarea este facilitată de explorare, iar oamenii sunt exploratori naturali. Printre metodele cele mai eficiente de învăţare, dar şi de management al cunoştinţelor dintr-o organizaţie, este comunitatea de practică, o modalitate activă, motivantă, creativă şi, în mod cert, demnă de explorat.
www.todaysoftmag.ro | nr. 10/Aprilie, 2013
29
programare
NoSQL Introducere
N
oSQL – este unul dintre trend-urile anului 2013. Dacă în urmă cu trei, patru ani auzeam destul de rar de câte un proiect care să folosească NoSQL, în ziua de azi proiectele care folosesc baze de date non-relaţionale sunt extrem de multe.
Radu Vunvulea
Radu.Vunvulea@iquestgroup.com Senior Software Engineer @iQuest
În cadrul acestui articol vom vedea care sunt avantajele şi provocările pe care le putem avea când dorim să folosim NoSQL. În a doua parte a articolului vom analiza și vom sublinea mai multe soluţii non-relaţionale şi o să încercăm să vedem care sunt avantajele fiecăreia.
Ce este NoSQL?
Cea mai simplă definiţie pe care putem să o dăm este: NoSQL este o bază de date care nu respectă regulile unei baze de date relaţionale (DBMS). O bază de date nonrelaţională nu este bazată pe un model relațional. Datele nu sunt grupate în tabele, iar din această cauză nu există nici un fel de relaţie matematică între tabele. Aceste baze de date sunt construite în așa mod încât să poată rula pe un cluster mare. Datele care sunt stocate într-un astfel de storage nu au o schemă predefinită. Din acestă cauză, orice field nou poate să fie adăugat fără nicio problemă. NoSQL a apărut şi s-a dezvoltat în jurul aplicaţiilor web, din această cauză majoritatea funcţionalitaţilor pe care le oferă sunt cele pe care o aplicație web le are.
Avantaje și riscuri
Modelul unei baze de date non-relaţionale este flexibil. În funcție de soluţia pe care o folosim putem să avem un model de date extrem de “relaxat”, iar modelul poate să fie schimbat cu costuri minime. Existe nenumărate soluţii NoSQL care nu au nici un fel de model în spate. De exemplu Cassandra sau HBase deşi are un model
30
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
definit, adăugarea unui nou field se poate face foarte ușor. Există alte soluții care pot să stocheze orice fel de structură de date fără să definim un model. De exemplu cele care stochează datele sub forma key-valuepair sau documente. În taxonomia NoSQL, un document poate să fie văzut ca un record din bazele de date relaționale, iar colecțiile le putem vedea ca tabele. Diferenţa principală este că într-un tabel vom avea record-uri cu aceiaşi structură, în timp ce o colecţie poate să conţină documente cu field-uri diferite. Bazele de date non-relaţionale sunt mult mai scalabile decât bazele de date clasice. Dacă dorim să scalăm, într-o bază de date relaţională avem nevoie să achiziţionăm servere puternice în loc să adăugăm în cluster câteva maşini cu configuraţii normale. Acest lucru se datorează modului în care o bază de date relațională funcționează, iar adăugarea unui nou nod este costisitoare. Modul în care este construită o bază de date non-relaţională permite o scalare pe orizontală extrem de uşor. Nu doar atât, dar aceste baze de date se pretează extrem de bine la virtualizare şi cloud. Luând în considerare dimensiunile bazelor de date şi numărul de tranzacţii care creşte din ce în ce mai mult, o bază de date relaţională este mult mai costisitoare decât o bază de date NoSQL. Soluţii precum Hadoop pot să proceseze foarte multe date. Acestea sunt extrem de scalabile pe orizontală, ceea ce le face atractive. Referitor la costuri, o bază de date
programare non-relaţională este mult mai ieftină. Nu avem nevoie de hardware custom sau cerințe deosebite pentru a ne putea crea un cluster extrem de puternic. Cu nişte servere normale, putem să avem o bază de date performantă. Bineînțeles, NoSQL nu este doar miere. Majoritatea soluţiilor sunt destul de noi pe piaţă în comparație cu bazele de date relaţionale. Din această cauză unele funcționalități importante mai ales în zona enterprise pot să lipsească – business mine şi business intelligent. NoSQL a evoluat pentru a îndeplini cerinţele aplicaţiilor web, aceasta fiind cauza principală pentru care o parte din funcţionalităţi lipsesc, ele nefiind necesare pe web. Asta nu înseamnă că lipsesc și că nu le putem regăsi, doar că încă nu au ajuns destul de mature sau nu sunt specifice problemei pe care soluţia NoSQL încearcă să o rezolve. Din cauză că sunt așa de noi pe piaţă, multe dintre soluţiile NoSQL sunt versiuni de pre-producţie, care în lumea enterprise nu pot să fie folosite de fiecare dată. Lipsa suportului oficial la unele produse poate să fie un stoper pentru proiectele de dimensiuni medii şi mari. Sintaxa prin care putem să interogăm o bază de date NoSQL este diferită de un simplu query SQL. De foarte multe ori este nevoie să avem noţiuni de programare. Numărul de experţi în baze de date NoSQL este mult mai mic faţă de cei din SQL. Partea de administrare poate să fie un coşmar, deoarece suportul pentru administratori este destul de slab la ora actuală. Totodată ACID şi suportul pentru tranzacţii nu este des întâlnit la storage-ul de tip NoSQL. Query-urile pe care putem
TODAY SOFTWARE MAGAZINE scrie sunt destul de simple, iar uneori storage-urile nu ne permit să facem „JOIN” la colecţii, din această cauză putem să ajungem să scriem cod care să facă acest lucru. În timp toate aceste probleme vor fi rezolvate, iar întrebarea pe care trebuie să ne-o punem când ne gândim la arhitectură şi credem că NoSQL ne-ar putea ajuta este „De ce nu?”.
Cele mai folosite soluții NoSQL
Pe piața există nenumărate soluţii NoSQL. Nu există o soluție universală care să rezolve toate problemele pe care le avem. Din această cauză, în momentul în care dorim să integrăm o soluție NoSQL, este nevoie să studiem mai multe tipuri de storage. S-ar putea să identificăm în interiorul aplicaţiei noastre mai multe cazuri a căror rezolvare să ceară o soluţie NoSQL. Nu este exclus ca pentru fiecare dintre aceste cazuri să avem nevoie de soluţii diferite. Acesta ar adăuga un plus de complexitate deoarece vom avea două storage-uri pe care trebuie să le integrăm.
MongoDB
Acesta este unul dintre cele mai folosite tipuri de storage. În acest tip de storage tot conținutul este stocat sub forma unor documente. Peste aceste colecţii de documente putem să facem orice fel de interogări dinamice şi să extragem diferite date. Din multe puncte de vedere MongoDB este cel mai apropiat de o bază de date relaţională. Toate datele pe care dorim să le stocheze sunt ţinute sub forma unui hash, facilitând regăsirea informaţiei. Operaţiile de bază de tip CRUD funcţionează rapid
pe MongoDB. Este o soluţie bună când avem nevoie să stocăm foarte multe date pe care trebuie să le accesăm într-un timp foarte scurt. MongoDB este un storage care poate să fie folosit cu success. În cazurile în care nu facem foarte multe insert-uri, update-uri şi delete-uri; informaţia rămânând neschimbată pentru o perioadă mai lungă de timp. Poate să fie folosit cu succes când proprietățile sunt stocate ca un query şi/ sau index. De exemplu într-un sistem de votare, CMS sau într-un sistem de storage a comment-urilor. Un alt caz în care poate să fie folosit este când stocăm liste de categorii şi de produse într-un magazin online. Din cauză că acesta este orientat spre query-uri, iar lista de produse nu se schimbă la fiecare două secunde, interogările care vor fi făcute peste ele vor fi rapide. Un alt avantaj este auto-share-ul. O bază de date MongoDB poate să fie foarte uşor ţinută pe 2/3 servere. Mecanismul prin care se face sincronizarea datelor este foarte bine pus la punct şi documentat.
Cassandra
Este pe poziția secundă în ceea ce privește stocarea NoSQL din soluţiile eCommerce. Acest storage poate să devină prietenul nostru când ajungem să avem date care se schimbă frecvent. Dacă problema pe care dorim să o rezolvăm este dominată de inserări şi modificări a datelor stocate atunci Cassandra este soluţia noastră. În comparaţie cu operaţiile de inserare şi modificare, orice query pe care îl facem pe datele noastre este mult mai lent. Acest storage este mai mult orientat spre scrieri, decât spre query-uri care aduc date. Dacă MongoDB, datele cu care lucram erau văzute ca niste documente cu un hash ataşat la fiecare din ele, Cassandra stochează tot conținutul sub forma unor coloane. În MongoDB, datele pe care le accesăm s-ar putea să nu fie ultima versiune a acestora. În schimb Cassandra ne garantează că datele pe care le obţinem prin query-uri au ultima versiune. Astfel încât dacă accesăm un mail care este stocat cu ajutorul lui Cassandra, vom obţine ultima versiune a
www.todaysoftmag.ro | nr. 10/Aprilie, 2013
31
programare NoSQL - Introducere mesajului. Această soluţie poate să fie instalată în mai multe data-center-uri din locaţii diferite, oferind suport în cazul de failover sau back-up – availability extrem de mare. Cassandra este un storage care poate să fie folosit cu succes şi ca mecanism de logging. Într-un sistem de acest fel avem foarte multe scrieri, iar interogările sunt rare şi destul de simple. Din aceast motiv devine soluția ideală când avem o soluţie eCommerce, unde avem nevoie de un sistem de storage pentru coşul de cumpăraturi. Operaţiile de tip insert şi modificare se vor realiza rapid, iar fiecare interogare a datelor va aduce ultima versiune a coşului de cumpăraturi – acest lucru fiind foarte imporant în momentul în care se face procesul de check-out. Cassandra a ajuns să fie folosit şi în industria financiară fiind ideal datorită perfomanței operațiilor de tip insert. În acest mediu datele se schimbă extrem de des, valoarea acţiunilor fiind una nouă în fiecare moment.
CouchDB
În cazul în care majoritatea operaţiilor pe care le facem sunt doar de insert şi de read, fără update, atunci CouchDB este o soluţie mult mai bună. Acest storage este orientat doar pentru operaţii de scriere şi citire. Pe lângă acest lucru, avem un suport eficient pentru predefinerea de query-uri şi de control a diferitelor versiuni pe care datele stocate pot să le aibă. Din această cauză operaţiile de tip update nu sunt atât de rapide. Din storage-urile prezentate până acum, acesta este primul storage care ne garantează ACID prin sistemul de versionare pe care îl implementează. O altă particularitate a acestui storage este suportul pentru replicare. CouchDB reprezentând o soluție bună când vrem să trecem baza de date în stare offline. De exemplu pe un device mobil care nu are conexiune la internet. Prin intermediul acestei funcţionalităţi, avem suport la arhitectura distribuită care să suporte replicare în ambele sensuri. Poate să fie o soluţie pentru aplicaţiile de pe device-uri mobile, care nu au
32
conectivitate 24 de ore din 24. Totodată storage. este foarte util în cazul unui CMS sau CRM, unde avem nevoie de versionare și Ce ne rezervă viitorul? de query-uri predefinite. Vom vedea un număr din ce în ce mai mare de aplicaţii care folosesc NoSQL. HBase Acest lucru nu înseamnă că bazele de date Această bază de date este integrată în relaţionale vor dispărea. Cele două tipuri totalitate cu Hadoop. Scopul este să fie folo- de storage vor exista şi de multe ori vor sită în momentul în care avem nevoie să coexista. Aplicaţiile hibride, care folosesc facem analiza la date. HBase este gândit să atât baze de date relaţionale cât și NoSQL o stocheze cantităţi foarte mari de date, care vor fi din ce în ce mai des întâlnite. în mod normal nu ar putea să fie stocate Totodată, o aplicație nu trebuie să foloîntr-o bază de date normală. sească doar o singură bază de date. Existe Acesta poate să lucreze în memorie soluţii care folosesc 2 sau mai multe baze fără nici un fel de problemă, iar datele pe de date NoSQL. Un bun exemplu este o care le stochează pot să fie compresate. Este aplicaţie eCommerce, care poate să folouna din puţinele baze de date NoSQL care sescă MongoDB pentru a stoca lista de suportă această funcţionalitate. Din cauza produse şi categorii, iar pentru a stoca particularităţiilor sale, HBase este folosit coşul la fiecare dintre clienți se folosește alături de Hadoop. În unele cazuri particu- Cassandra. lare, când lucrăm cu zeci/sute de milioane de înregistrări, HBase merită să fie folosit. Concluzie
Membase
Aşa cum îi spune şi numele, această bază de date non-relaţională poate să stea în memorie. Este o soluţie perfectă cu latenţă foarte mică, iar nivelul de concurenţă este ridicat. Crearea unui cluster şi replicarea conţinutului devine un procedeu facil. Este foarte des întâlnit în backendul jocurilor, în special cele online. Foarte multe sisteme care lucrează cu date în timp real pe care trebuie să le manipuleze sau să le afiseze utilizatoriilor folosesc ca storage Membase. În aceste cazuri Membase poate să nu fie singurul nivel de storage pe care aplicaţia îl folosește.
În concluzie, putem să afirmăm că bazele de date NoSQL trebuie să fie parte din aria noastră de cunoștințe. În comparație cu bazele de date relaționale avem foarte multe opțiuni, iar fiecare din acestea face un lucru foarte bine. În lumea NoSQL nu avem un storage care să ne rezolve toate problemele pe care le-am putea avea. Fiecare storage ne rezolvă anumite tipuri de probleme. Viitorul nu este doar al bazelor de date non-relaționale, dar nici al celor Redis relaționale. Viitorul este al aplicațiilor care Acest storage este perfect când numărul folosesc ambele tipuri de storage, în funcție de update-uri pe care trebuie să le facem de necesități. asupra datelor noastre este foarte mare. Este un storage optimizat pentru acest fel de operaţii. Se bazează pe un sistem foarte simplu key-value. Din această cauză partea de query-uri care pot să fie făcute este foarte limitată. Deşi avem suport pentru tranzacţii, nu există încă suport destul de matur pentru clustering. Acest lucru poate să devină o problemă când datele pe care dorim să le stocăm nu încap în memorie – dimensiunea bazei de date este legată de dimensiunea memoriei interne. Redis devine destul de interesant când avem sisteme real-time, care trebuie să comunice. În aceste cazuri, Redis este una dintre cele mai bune soluţii. Există câteva aplicaţii bursiere care folosesc acest
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
programare
TODAY SOFTWARE MAGAZINE
Bazele de date NoSQL o analiză comparativă
F
Traian Frătean
traian.fratean@3pillarglobal.com Software Engineer @ 3Pillar Global
Bogdan Flueraș
bogdan.flueras@3pillarglobal.com Software Engineer @ 3Pillar Global
aptul că BigData e un subiect la modă este confirmat și în numărul curent al TSM în care se scrie despre acest subiect. Introducerea în BigData și conceptele specifice a fost făcută în numerele 2, 3 și 4 ale revistei. Pentru a rezuma, BigData înseamnă stocarea și analiza volumelor de date mari, începând cu ordinul Terra Bytes. Gestionarea unor astfel de volume de date ridică problema celor 3V în ceea ce privește Volumul, Viteza de acces și Varietatea datelor. Teorema CAP formalizează conCa și cerințe vrem să: strângerile acestor sisteme: Consistency, • inserăm datele cât mai rapid Availability și Partition Tolerance. • cautăm după anumite câmpuri: title, Consistency se referă la consistența tags etc. datelor din punctul de vedere al clienților sistemului. Altfel spus toți clienții văd Totodată mai vrem ca datele să aibă aceleași date, tot timpul. un nivel acceptabil de consistență și sa fie Availability este o garanție că fiecare available. request va primi un răspuns. Partition tolerance este proprieta- Analiza si modelare tea sistemului de a funcționa atunci când Maparea modelului de date mai sus noduri din sistem cad. menționat, care va fi rafinată ulterior, este specifică în funcție de strategia de stocare Conform teoremei CAP un sistem nu pe disc a fiecărei baze de date NoSQL. poate satisface simultan toate cele 3 constrângeri, dar poate excela la oricare 2 din Strategia de stocare ele. În scopul de a ne încadra în acelaşi trend și de-a împărtăși comunității din Key-Value (Cheie-Valoare) experiența practică acumulată pe proiecBazele de date din categoria Key-Value tele interne, vă supunem atenției un studiu precum Riak sunt conceptual dicţionare de caz cu 4 dintre cele mai populare soluții distribuite și nu au o schema predefinită, NoSQL: Riak, Couchbase, Hypertable si sunt schemaless. Cheia poate fi sintetică Cassandra. sau auto-generată, iar valoarea poate fi orice: String, JSON, BLOB etc. Context si cerinte Un alt concept specific unor storage-uri Unul din clienţii importanţi ai compa- Key-Value este bucketul: o grupare logica niei se confruntă cu o problemă tehnică pentru mai multe chei-valori, nu grupează - are un volum imens de date pe care nu le fizic datele în același loc pe disc. Pot exista mai poate gestiona. Are nevoie de o soluție keys identice (cu valori diferite) în bucketNoSQL. Există deja modelul de date: un uri diferite. compozit de POJO1 -uri. Pentru a citi o valoare este necesară Luăm ca exemplu al modelului de date cunoașterea cheii și a bucketului, deoarece un articol cu reprezentarea UML: adevărata cheie sub care se păstrează valoarea este hash(Key + Bucket). Ca și raportare la teorema CAP, bazele de date Key-Value excelează la A și P dar sacrifică C într-o masură acceptabilă - garantează eventually consistency: “mai bine îți ofer (pe unele noduri) date vechi, dar rapid și îți garantez că datele nou inserate vor fi consistente pe toate nodurile cândva în viitor”. 1 http://en.wikipedia.org/wiki/Plain_Old_Java_Object
www.todaysoftmag.ro | nr. 10/aprilie, 2013
33
programare Bazele de date NoSQL - o analiză Document Couchbase si MongoDB sunt cele mai populare baze de date de tip document based. Sunt flexibile la tipul conținutului fiindcă nu au o schema predefinită. Conceptual lucrează cu documente de diferite forme: JSON, BSON, XML dar și BLOBs de tip PDF, XLS. În esentă nu sunt decât o specializare a bazelor de date Key-Value. Un document se scrie/citește folosind o cheie. Pe langă functionalitatea Key-Value, bazele de date tip document adaugă funcționalități de găsire a documentelor bazat pe conținutul acestora. Raportat la teorema CAP, bazele de date orientate document excelează la C și P.
Columnar Bazele de date din categoria BigTable2 precum HBase 3 si Hypertable 4 sunt de tip columnar și au o schemă ce trebuie predefinită. Datele sunt stocate în celule grupate pe coloane. Coloanele sunt grupate logic în column families. Acestea pot contine un număr teoretic nelimitat (limitat în funcție de implementarea specifică) de coloane ce pot fi create la runtime sau la definirea schemei. Vă puteți întreba: ce beneficiu am dacă stochez datele în coloane și nu în rows, așa cum fac bazele de date relaționale ? Răspuns scurt: Timp redus de căutare/ acces și agregare a datelor. Răspuns lung simplificat: Bazele de date relaționale stochează pe disc într-o zonă continuă un singur row dintr-o tabelă. Diferite row-uri dintr-o tabelă sunt stocate în locații diferite pe disc. 2 http://research.google.com/archive/bigtable.html 3 http://hbase.apache.org/ 4 http://hypertable.org/
34
comparativă
Bazele de date columnare stochează pe disc într-o zona continuă toate celulele corespunzătoare tuturor row-urilor dintr-o coloană. Reprezentare pe disc RDBMS vs Columnar
availability, scalability, este tolerant la partitia retelei și asigură replicarea datelor în 3 locații, se laudă a fi cel mai rezilient storage Key-Value pus în producție. Pentru garantarea acestor caracteristici, Riak oferă un nivel de consistență eventuală. Rezolvarea conflictelor de date este rezolvată cu ajutorul vector clock (ceas logic). Riak vine cu un mecanism de pluggable storage: poți alege între Bitcask6 - toate cheile în RAM sau LevelDB7 - toate cheile și valorile pe disk, dar oferă un API ce permite implementarea propriului storage. În funcție de environmentul în care se face deployment se poate face o alegere pentru optimizarea costurilor de producție. Toate nodurile dintr-un cluster comunică prin protocolul Gossip 8 de unde rezultă trafic pe rețea deloc neglijabil. Acest protocol de tip viral asigura monitorizarea permanentă a disponibilității clusterului și replicarea datelor.
Pentru o înţelegere mai bună propunem următorul caz de utilizare simplificat (fără indecși, cache etc.): Am 1 miliard de articole și vreau titlul tuturor articolelor. Bazele de date relaţionale iterează peste locații diferite de disc pentru a colecta titlul fiecărui articol. Rezulta 1 miliard de iteraţii și accese la disc. Bazele de date columnare ar necesita un singur acces la disc pentru că titlurile tuturor articolelor sunt într-o locație continuă pe disc, în coloana Title. Prin extrapolare în condiții reale, rezultă un număr dramatic scăzut de iteraţii pentru bazele de date columnare. Ca și raportare la teorema CAP, Modelare bazele de date columnare satisfac C și P dar Datele sunt stocate în tuple Key-Value sacrifică A. într-un bucket. Valorile pot fi orice: text, JSON, XML, BLOB etc. Soluții NoSQL În cazul modelului de date anterior amintit (vezi diagrama de la Context și Riak cerințe), mai jos este reprezentarea JSON a articolului cu cheia: “123”
Particularități
Riak5 este un Key-Value store distribuit, open-source cu suport enterprise, dezvoltat de Basho Technologies. Este proiectat sa scaleze orizontal și să fie rezilient. Riak consideră toate nodurile din cluster egale, fără master, deci nu are Single Point Of Failure. Fiindcă excelează la
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
5 http://basho.com/
{ article: id: 123, title: ”Article title”, content: ”This is the content”, location: { country: “Romania”, latitude:123.45, longitude:123.45} tags: [ { name: “tag1”, date: “10 Mar 1981”, author:”John B”}, { name: “tag2”, date: “21 Mar 1981”, author:”John B”} ], } 6 http://do cs.basho.com/riak/1.2.0/tutorials/ choosing-a-backend/Bitcask/ 7 http://do cs.basho.com/riak/1.2.0/tutorials/ choosing-a-backend/LevelDB/ 8 http://en.wikipedia.org/wiki/Gossip_protocol
TODAY SOFTWARE MAGAZINE Instalare
de interogare UnQL11 sau prin integrare cu • Column family, Cells, RowKey nu au Se instalează foarte ușor atât local cât Hadoop12. analog și în cluster. În cluster nodurile se adaugă într-o zona de staging și pot fi activate prin Modelare Maparea modelului compozit de date mutarea în zona commit. Pentru monitoriModelarea datelor este identică cu cea descrise în paragraful “Context și cerințe” zare se instalează Riak Control. pentru Riak. s-a făcut astfel: Fiecare POJO din model, (dar nu Configurare Instalare instanță) are asociat câte un column-family. Cele 2 fisiere vm.args și app.config Unul dintre capitolele la care excelează Fiecare membru atomic al acelui POJO cuprind toate aspectele configurării: secu- Couchbase este instalarea. Astfel instalarea care poate fi reprezentat ca text are asociritate, cluster tuning etc. pe un cluster se poate realiza în doar câteva ată o coloană din același column-family. Sharding-ul automat functionează, dar minute. De asemnea mai beneficiază și de Membrii compuși au fost la rândul lor atenţie sporită la ring size si la numărul de unelte de monitorizare integrate în instala- modelați ca un column-family diferit. vnodes care trebuie din start corect confi- rea implicită. Având ca intrare urmatorul articol, gurate, altfel trebuie reconfigurat clusterul reprezentat ca JSON: și poate fi necesară chiar reimportarea tutu- Configurare { article: { id: 123, title: ”Article title”, content: ror datelor. Configurarea este deosebit de rapidă, ”This is the content”, location: { country: “Romania”, latitude: chiar și în mod distribuit. Singura bilă nea- 123.45, longitude: 123.45} tags:[ Experienta practica gră ce o primește Couchbase este dată de { name: “Cool”, date: “10 Mar 1981”, author: ”John B”}, Pentru majoritatea limbajelor există limitarea de a avea sisteme eterogene din { name: “TSM”, date: “21 Mar 1981”, author:”John B”} clienți care comunică prin Protobuf punct de vedere al memoriei RAM folosite. ], } sau REST. Deși au o interfaţă comună, Această limitare nu permite exploatarea la implementarea REST oferă mai multe maxim a memoriei disponibile pe fiecare Am generat următoarea structură de funcționalități față de Protobuf în defavoa- dintre noduri. coloane: rea vitezei de comunicare. REST oferă în Am ales această structură de reprezenplus și posibilitatea pentru query-uri ne- Experiența practică tare deoarece oferă posibilitatea de a căuta complexe de Map Reduce. Folosind Bitcask API-ul de Java oferă o interfață sim- rapid după orice proprietate a obiectului. am avut neplăceri la listarea cheilor dintr- plă și intuitivă astfel încât se poate scrie un bucket in environment de producție. cod în doar câteva minute. Documentația În cloud, Riak comunică prin Gossip și este de asemenea suficientă și fără erori. cu alte clustere - care nu aparțin neapărat Bazându-se pe stocarea datelor în memorie companiei, deci riscăm data leaks. performanța este foarte bună.
Couchbase
Couchbase 9 este un storage de documente JSON. Își are rădăcinile în CouchDB 10 , proiect aflat sub umbrela Apache. Compania CouchOne Inc., ce oferea suport comercial pentru CouchDB, împreună cu Membase Inc. au format Couchbase Inc. Noua soluție, Couchbase, combină modelul de date, indexarea și capabilitățile de interogare CouchDB cu performanța și scalabilitatea Membase. Fiind dezvoltat comercial ca proiect open-source este oferit în trei moduri de licențiere: open-source, community și commercial.
Particularități Modelul de date este de document JSON, fără relații între documentele stocate în bucket-uri, limitat la 20MB/document. La nivel de cluster datele sunt păstrate în memorie, replicate, fiind consistente și salvate asincron pe disc. Între clustere diferite datele sunt eventually-consistent. Accesul la date se poate face direct, bazat pe cheie, prin Map-Reduce, prin limbajul 9 http://www.couchbase.com/ 10 http://couchdb.apache.org/
Hypertable
Instalare
Local se instalează uşor, iar pe un cluster o mare parte a instalării se poate După cum am menţionat, este bazat automatiza, dar este de o complexitate pe filozofia Google Big Table si concurează medie fiindcă sistemul distribuit de fişiere, cu HBase. Printr-un API generic, suportă HDFS trebuie configurat și pornit separat. diverse sisteme de fișiere distribuite, cel mai utilizat fiind HDFS - Hadoop Distributed Configurare File System13. HDFS este sistemul distribuit Se face pe fiecare nod în parte, de de fişiere oferit de Hadoop si inspirat din asemenea automatizată. Există un set Google File System14. Hadoop este un pro- satisfăcător de opțiuni de configurare, dar iect open-source dezvoltat iniţial de Yahoo! semnificația acestor opțiuni nu este suficipentru procesarea distribuită a volumelor ent documentată. mari de date. Varianta curentă de Hadoop conține un ecosistem de diverse module Utilizare cu suport de la query ad-hoc pană la data Exista clienţi pentru limbajele popumining și machine learning. lare de programare: Java, PHP, Python etc. Comunicarea clienţilor cu Hypertable se Modelare face prin protocolul Thrift. Termenii specifici bazelor de date columnare și corespondența cu bazele de Experienţa practică date relaționale sunt: Deşi comunitatea este restrânsă, supor• Namespace analog cu Database tul este bun. Se vede influenţa adâncă • Table analog cu Table a limbajului C de la interfaţa low level • Column analog Column a clientului, pană la API și la mesajele 11 http://www.unqlspec.org/display/UnQL/Home de eroare. În urma testelor efectuate am 12 http://hadoop.apache.org/ 13 http://hadoop.apache.org/docs/stable/hdfs_user_ observat ca este mai lent la heavy inserts guide.html 14 http://research.google.com/archive/gfs.html decat Cassandra, Riak și CouchBase.
Particularități
www.todaysoftmag.ro | nr. 10/Aprilie, 2013
35
programare Bazele de date NoSQL - o analiza comparativă În versiunea curentă, Hypertable este limitat la un număr maxim de 255 de column families deci te forţează să-ți faci un design bun la schema; flexibil pentru extensii ulterioare. Din motive practice (stabilitate, knowledge base, work-arounds), versiunea 0.20 de Hadoop este preponderent folosită, în defavoarea versiunii curente. Folosiţi distribuţia Hadoop de la Cloudera15 pentru a va face viaţa mai uşoară: instalarea, configurarea simplificată și documentația mai bună.
Cassandra
modelul relațional. Un Column-family conține row-uri și coloane. Spre deosebire de modelul relational row-urile dintr-un column-family nu au în mod necesar aceleași coloane. Mai mult, întrun row pot fi oricând adăugate coloane noi. • super coloumns sunt o grupare de coloane. • row este un rând, unic identificat printr-un row key. • secondary index desemnează un index pe o coloană. Se numește secondary pentru a distinge indecșii predefiniți pe fiecare row key
Cassandra 16 a porinit ca un proiect open-source de la Facebook, ajuns sub umbrela Apache. Implementarea îmbină Instalare concepte din Amazon Dynamo17 și Google Distribuții recomandate pentru instaBigTable. Poate fi caracterizat ca un key- larea Cassandra sunt oferite de DataStax20. value store eventually consistent. Ca o particularitate negativă Cassandra necesita Oracle Java 1.6, versiune cu end of Particularități support în februarie 2013. Instalarea pe un La fel ca Riak și Cassandra pornește de cluster Linux nu pune probleme deosebite. la conceptele publicate de Amazon în lucrarea ce descrie Dynamo. Această lucrare Configurare prezintă designul și implementarea aleasă În ceea ce privește configurarea de Amazon pentru a crea DynamoDB18, o Cassandra a fost gândit pentru a se mula baza de date highly available, ce stochează pe nevoile utilizatorilor. Oferă nivele difedatele în format Key-Value. rite de setare a consistency level pentru Plecând de la Dynamo, Cassandra a operații de scriere (5 nivele) și citire (3 renunțat la vector-clocks pentru rezol- nivele). Trebuie avută atenție deoarece în varea conflictelor și a implementat o configurarea implicită Cassandra nu este strategie diferită de stocare ce se bazează adaptată folosirii în cluster datorită setaripe ColumnFamily. lor replication factor(RF) și consistency Se integrează și cu Hadoop, putând level(CL). distribui sarcinile pe grupuri diferite de Singura dificultate întâmpinată la conmașini. În acest mod putem realiza două figurare a fost legată de crearea ring-ului. partiții - una rulând sarcini în timp real Mașinile componente ale clusterului sunt și cealaltă rulând sarcini de analiză, ce pot organizate sub forma unui ring, fiecare consuma mai mult timp. având alocată o anumită plajă de tokens ce le stochează. În documentația versiunii Data model19 curente (1.2.0) valoarea maximă a tokenAdaptarea modelului de date este iden- ului este incorect documentată. tică cu cea menţionată la Hypertable. Strategia de stocare folosită derivă din Experienta practica bazele de date columnare. Conceptele foloPentru început trebuie să știm cum site sunt: comunicăm cu Cassandra. Protocolul folo• keyspace analog database-ului din sit pentru comunicare este Thrift. Pentru a modelul relațional. Grupează un set de ușura scrierea de aplicații există numeroase column-family înrudite logic. librării client21, pentru multe limbaje de • column-family analog tabelelor din programare. Această varietate face luarea 15 http://www.cloudera.com/content/cloudera/en/pro- unei decizii mai greoaie. În cazul Java există ducts/cdh.html 16 https://cassandra.apache.org/ 9 librării pentru versiunea curentă. Merită 17 http://www.allthingsdistributed.com/files/amazondynamo-sosp2007.pdf 18 https://aws.amazon.com/dynamodb/ 19 http://www.datastax.com/docs/1.2/ddl/index
36
20 http://www.datastax.com 21 Cassandra High Level Clients: https://wiki.apache. org/cassandra/ClientOptions
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
amintite Hector și Astyanax. Hector este cel mai răspândit client. Astyanax este un fork din Hector, realizat de Netflix, si oferă o interfață simplificată. Cassandra având o schemă dinamică permite adăugarea la runtime a oricâtor column-families. La crearea unui keyspace, dacă nu specificăm, RF implicit se alege 1. Astfel datele nu sunt replicate iar în cazul căderii unei mașini datele devin indisponibile sau chiar se pierd. Pentru a nu pierde date trebuie să știm și că odată inserate datele sunt păstrate în memorie și scrise în commitlog, dupa un interval de timp configurabil. Astfel, în cazul unei probleme hardware sau software se pot pierde datele ce nu au fost scrise în commitlog. Spre deosebire de un log obisnuit, commitlog-ul trebuie tratat cu seriozitate deoarece contine date ce nu au ajuns încă să fie scrise în directorul de date, pe disc.
Concluzie
Sistemele NoSQL sunt într-o fază de evoluție naturală, dar sub nici o formă nu înlocuiesc sistemele mature relaționale, ci le complementează. Exită mai multe soluții NoSQL, aparținând unor clase diferite, fiecare adecvată unei anumite probleme. Deşi oferă un avantaj competitiv, nu există soluţie NoSQL perfectă pentru toate scopurile. Înainte de face o alegere în acest sens trebuie atent analizate și urmărite următoarele aspecte: • Definirea și analiza cerințelor funcționale și non-functionale precum performanța, consistența, disponibilitatea, scalabilitatea, securitatea etc. • Alegerea și adaptarea modelului de date optim pentru query-urile cele mai frecvente • Identificarea soluțiilor și eventual relaxarea unor cerințe • Migrarea datelor existente, dacă e cazul • Iterația continuă peste fazele de Proof Of Concept, Deployment, Heavy workload, Metrics, Tuning
management
TODAY SOFTWARE MAGAZINE
Big Data: Radiografie HBase
Î
n numărul 3 al revistei, articolul despre Big Data menționează un tip aparte de sisteme NoSQL: sisteme orientate pe coloană (column-oriented database). Un concept cel puțin curios, ce merită studiat. Acest articol radiografiază unul dintre sistemele ce funcționează pe acest concept: Apache Hbase (http://hbase.apache.org/).
Să spunem că avem un serviciu public de hărți online, gen Nokia Maps sau Google Maps. Pentru a avea success, pe lângă hărți detaliate, avem nevoie și de informații, și de conținut, care să fie disponibil pe hartă. Un prim astfel de conținut sunt punctele de interes, pe scurt POI (point of interest). Este estimat că în lume sunt două miliarde de POI-uri. Pentru a publica aceste POI-uri trebuie mai întâi culese sau achiziționate din diverse surse. Foarte des se întâmplă ca același POI să provină din mai multe surse, fiind necesară deduplicarea POI-urilor. Mai mult, anumite atribute sunt specifice doar unora dintre POI-uri. De exemplu, restaurantele se caracterizează prin tipul de bucătărie, număr de mese, etc, iar parcările prin, prețul pe oră, număr de locuri, parcare subterană sau pe mai multe nivele. HBase este o bază de date de tip “column-oriented”, ale cărei principale atuuri sunt consistența și posibilitatea de scalare a sistemului. A fost proiectată bazându-se pe BigTable, o bază de date proprietară dezvoltată de Google ale cărei principii au fost publicate într-o lucurare din 2006 numită, “Bigtable: A Distributed Storage System for Structured Data”. Este folosit activ în companii bine cunoscute, precum Facebook, Nokia, eBay, Yahoo și in diverse aplicații ce necesită stocarea și analiza unor cantități mari de date. La prima vedere, HBase pare să fie o bază de date relaționară. HBase stochează datele în tabele, care conțin celule ce apar la intersecția dintre rânduri și coloane. Dar nu e chiar așa. Tabelele nu au relații între ele, rândurile nu servesc ca înregistrări, iar coloanele sunt complet variabile. Putem vorbi despre existența unei scheme, dar rolul ei e doar să ghideze și nu să forțeze. HBase deține funcționalități care lipsesc celorlalte baze de date, precum versionarea, compresia și colectarea datelor expirate (garbage collection). Când o valoare nouă e scrisă într-o celulă existentă, vechea valoare rămâne indexată după timestamp. Dacă
valorile stocate sunt foarte mari, se poate recurge la compresia lor, folosind algoritmii Gzip sau LZO. Din punct de vedere al teoremei CAP, HBase este un sistem CP (vezi articolul despre Big Data din numărul 3 al revistei). Oferă garanții puternice pentru consistența datelor. Daca un client execută o scriere cu succes a unei anumite valori, acea valoare va fi citită de toți ceilalți clienți. Fiind un sistem distribuit, în cazul în care un nod din cluster se defectează, HBase rămâne funcțional. Dacă un singur nod din cluster rămâne funcțional, atunci toate scrierile vor fi refuzate. În scop didactic HBase poate să funcționeze și în mod stand-alone, adică folosind un singur nod. Este recomandat ca pentru un cluster de producție să se folosească minim 5 noduri. Daca o mapă este o pereche de chei și valori, ca un Hashmap din Java. Un tabel in HBase e o mapă mai mare sau mai concret este o mapă de mape. Cheile sunt string-uri arbitrare ce mapează un rând (row) de date. Un rând este și el o mapă, în care cheile sunt numite coloane, iar valorile sunt șiruri de biti neinterpretați. Coloanele sunt grupate în familii de coloane. Făcând ca numele întreg al unei coloane să fie format din numele grupului și numele coloanei (family:qualifier). În exemplul de mai jos: Identity:id, Identity:provider, etc..
Tabelul oferă un exemplu despre cum datele sunt modelate flexibil. În coloana Identity, se observă că pentru parcare, lipsește name, iar în Amenities, atributele salvate sunt complet diferite. HBase ofera un shell, bazat pe JRuby, ce permite interacțiunea cu tabele, modificarea schemei sau acțiuni mai complicate ce pot fi automatizate datorita limbajului JRuby. Pentru a crea un tabel din linia de comandă vom proceda în felul următor: hbase> create ‘place ', ‘identity’, ‘address’, ‚‘amenities’
Acesta va crea tabelul cu numele ‚place’ și având două familii de coloane ‚identity’ , ‚address’ și amenities. Pentru a scrie o valoare se specifică tabela, rândul, coloana și valoarea hbase> put ‘place’, ‘1234’, ‘identity:cuisine’, ‘french’
Similar se efectuează o citire: hbase> get ‘place’, ‘1234’
sau
hbase> get ‘place’, ‘1234’, ‘identity’
O lista completă de comenzi pentru Shell este disponibilă aici: http://wiki.apache.org/hadoop/Hbase/Shell. Deoarece HBase a fost dezvoltat în limbajul Java, e normal ca API-ul principal să fie Java. Mai întâi e nevoie de un obiect de configurare care e folosit de client pentru a se putea conecta la server. Când se creează instanța, își caută proprietățile de inițializare în hbase-site. xml sau în hbase-default. xml care trebuie sa fie in CLASSPATH. private static Configuration conf = HBaseConfiguration. create();
H b a s e Ad m i n e s t e interfața de access la metadata tabelelor și of e r ă f u n c ț i on a l it ăț i administrative. www.todaysoftmag.ro | nr. 10/Aprilie, 2013
37
programare Big Data: Radiografie HBase există nici o altă modalitate de sortare sau indexare după alte coloane. Dacă se dorește căutarea după altceva în afară de chei, atunci trebuie să recurgem la scanare sau să ne creeam un index propriu. Un alt minus ar fi lipsa conceptului de tip de date. Tot ce se stocheaza în HBase este interpretat ca șir de biți. Nu există vreo deosebire între Date și String. HBase nu se instalează niciodată singur. Pentru a funcționa are nevoie de Hadoop (o platformă MapReduce), HDFS (un sisFolosind HTable se face conexiunea cu tabela dorită. Pentru a tem distribuit de fișiere) și Zookeper (un sistem ce coordonează adăuga un rând nou se folosește Put. În HBase totul se stochează nodurile din cluster). Mai multe despre aceste tehnologii într-un ca șiruri de bytes. Clasa Bytes convertește orice tip Java în șiruri număr viitor. de biți. Este important de reținut că HBase este soluția pentru propublic void addRecord(String tableName, String rowKey, String family, String qualifier, String value) bleme de stocare complexe din punct de vedere al dimensiunii throws Exception { try { largi și a structurii dinamice a datelor. HBase nu e o soluție pentru HTable table = new HTable(conf, tableName); Put put = new Put(Bytes.toBytes(rowKey)); probleme “mărunte”. public void creatTable(String tableName, String[] familys) throws Exception{ HBaseAdmin admin = new HBaseAdmin(conf); if (admin.tableExists(tableName)) { System.out.println(„table already exists!”); } else { HTableDescriptor tableDesc = new HTableDescriptor(tableName); for (int i = 0; i < familys.length; i++) { tableDesc.addFamily(new HColumnDescriptor(familys[i])); } admin.createTable(tableDesc); System.out.println(„create table „ + tableName + „ ok.”); } }
put.add(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(value));
Am putea încheia aici radiografia HBase, dar merită menționat cum Facebook a găsit o funcționalitate ingenioasă pentru HBase. Facebook folosește HBase ca o componenta centrală a sistemului } său de messaging, atât pentru stocarea mesajelor utilizatorilor, cât și pentru a păstra un index inversat pentru căutarea mesajelor. Pentru a citi un record, se folosește Get, iar răspunsul e încapÎn tabelul de indecsi, cheile sunt ID-urile userilor, coloanele sulat într-un obiect de tip Result sunt cuvinte ce apar în mesajele utilizatorilor, iar timestamp-urile sunt ID-urile mesajelor care conțin cuvântul. public void getOneRecord (String tableName, String rowKey) throws IOException { Cum mesajele utilizatorilor sunt imutabile, intrările în index HTable table = new HTable(conf, tableName); Get get = new Get(rowKey.getBytes()); sunt statice și ele. Conceptul de versionare nu are sens aici, dar Result rs = table.get(get); for(KeyValue kv : rs.raw()){ Facebook îl folosește pentru a stoca ID-urile mesajelor. Practic, au System.out.print(new String(kv.getRow()) + „ „ ); System.out.print(new String(kv.getFamily()) + „:” ); câștigat o altă dimensiune pentru date.
}
table.put(put); System.out.println(„insert recored „ + rowKey + „ to table „ + tableName + „ ok.”); } catch (IOException e) { e.printStackTrace(); }
}
System.out.print(new String(kv.getQualifier()) + „ „ ); System.out.print(kv.getTimestamp() + „ „ ); System.out.println(new String(kv.getValue()));
Când nu sunt cunoscute cheile de căutare, se folosește Scanner ce oferă o interfața de tip cursor asupra conținutului din tabel. public void getAllRecord (String tableName) { try { HTable table = new HTable(conf, tableName); Scan s = new Scan(); ResultScanner ss = table.getScanner(s); for (Result r : ss) { for (KeyValue kv : r.raw()) { System.out.print(new String(kv.getRow()) + „ „); System.out.print(new String(kv.getFamily()) + „:”); System.out.print(new String(kv.getQualifier()) + „ „); System.out.print(kv.getTimestamp() + „ „); System.out.println(new String(kv.getValue())); } } } catch (IOException e){ e.printStackTrace(); } }
Rândurile din tabele sunt păstrate sortat după chei, dar nu
38
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
Bibliografie: http://hbase.apache.org/book/quickstart.html Seven Databases in Seven Weeks, Eric Redmond
Cătălin Roman
catalin.roman@nokia.com Software Architect @ Nokia, Berlin
programare
TODAY SOFTWARE MAGAZINE
Migrare website MVC 3 + DB în Azure
D
e curând am avut de luat o decizie – soluţia de hosting folosită de platforma noastră devenea insuficientă pentru nevoile sistemului nostru sau ale clienţilor noştri. Am avut de ales între un server dedicat mai puternic, de fapt o pereche de servere + load balancing şi de a trece pe un hosting tip cloud computing.
Cred că mai multe proiecte/businessuri se confruntă cu această alegere numărul de comentarii la acest articol îmi va dovedi dacă am dreptate sau nu aşa că vă voi prezenta: 1. Procesul decizional/factorii care au contribuit la alegerea windows Azure ca soluţie (de ce Azure şi nu altceva?) 2. Procedura de migrare propriu zisă – ce a fost uşor, ce a fost greu, ce instrumente am folosit.
Alegerea soluţiei de scalare potrivită
Fiecare arhitectură are particularităţile sale, nu căutaţi o reţetă care să se potrivească în toate scenariile, ci mai degrabă căutaţi o soluţie potrivită scenariului vostru. Doar aşa puteţi să maximizaţi ROI-ul (return on investment).
Primul pas e să definim „contextul” Ce migram mai exact? Arhitectură ce trebuia migrata de noi constă în: un web portal dezvoltat în ASP.net MVC (3 şi 4) având în spate o bază de date ce rula pe
MS SQL server ascunsă în spatele Entity Framework. Deja se întrevăd câteva constrângeri – un SQL Server necesită o maşină ce rulează un OS Windows (Windows Server sau altceva). Pentru web, portalul în ASP.net MVC cel mai facil e să folosim un Windows cu IIS – se poate opta şi pentru un linux dacă alege să rulăm aplicaţia pe mono. Din moment ce bază de date ne obligă să alegem Windows ca OS, pentru a uşura munca de administraţie vom alege Windows/IIS ca hosting. De ce e acest aspect important? Dacă alegem să construim/ închiriem un server dedicat trebuie să instalăm Windows pe această maşină – în funcţie de furnizorul de hosting ales ar trebui să plătim pentru licenţa de Windows (costurile pot fi în jur de 10 eur/lună). De obicei, întrun serviciu de cloud (Amazon EC2, Windows Azure) putem închiria servere dedicate (maşini virtuale) ce vin cu OS-ul Windows preinstalat - nu plătim nimic pentru acest aspect. Același lucru se aplică în cazul SQL Server: dacă alegem un server dedicat va trebui să instalăm noi SQL serverul (sau să plătim pe cineva să facă asta pentru noi) şi pentru aceasta vom avea din nou nevoie de licenţă – o licenţă de MS SQL Server Web Edition se poate închiria cu ~ 25 eur/lună. Sumarizand: pentru un server dedicat vom plăti închirierea serverului + licentele de instalare (cumpărăm sau închiriem) – se ajunge la un cost fix, usor de previzionat. Pentru serviciile de tip cloud tariful e variabil, în funcție de ce mașini/instante folosim și cât de mult le folosim (ore de utilizare). Daca alegem să înlocuim un SQL server cu SQL Azure atunci vom fi taxati în funcție de traficul outbound generat. Dacă tariful mașina/per
numar de ore de utilizare vi se pare greu de cuantificat – nu sunteţi singurii – deşi furnizori de cloud computing ne pun de obicei la dispoziţie „price calculators”, s-ar putea să nu dispuneţi de informaţiile necesare pentru a face o estimare. Cel mai bine să faceţi un test real (în măsura posibilităţilor). Amazon şi Azure pun la oferta dezvoltatorilor programe de trial: http://aws. amazon.com/free/ , respectiv http://www. windowsazure.com/en-us/pricing/freetrial/ ce sunt suficiente pentru a rula câteva teste de performanţă/încărcare ce ne vor ajuta să ne facem o idee asupra costurilor. Si SQL Azure se poate incerca ca trial: http://www.windowsazure.com/en-us/ pricing/free-trial/ În momentul cand ati portat arhitectura pe cloud, rulati teste de load/performanta pana atingeti limitele pachetelor trial – in momentul acesta ar trebui sa aveti destule informatii pentru a putea folosi relevant calculatoarele de pret puse la dispozitie de serviciile cloud Pe scurt: contextul (arhitectură ce trebuie migrată) are o influenţă directă asupra posibilităţilor de migrare şi asupra costurilor – pe un server dedicat costurile de hosting sunt fixe, pe o soluţie tip cloud sunt variabile (din punct de vedere managerial e mult mai uşor să previzionezi un cost fix). Disclaimer: ca furnizori de cloud computing noi am folosit doar Amazon şi Azure, în principal datorită notorietăţii şi a facilitaţilor oferite startupurilor. Acest lucru nu înseamnă că nu vă puteţi orienta spre altceva: Google App Engine (https:// cloud.google.com/) sau furnizori regionali – un search pe un motor de căutare vă va da mai multe detalii. De asemenea, mai mulţi furnizori de servicii regionali oferă facilităţi startupurilor – dacă nu găsiţi informaţii pe site-ul furnizorului, contactaţi direct serviciul lor de vânzări – ei vă vor da toate informaţiile căutate.
www.todaysoftmag.ro | nr. 10/Aprilie, 2013
39
programare Migrare website MVC 3 + DB în Azure Al doilea pas: know-how Unul dintre avantajele unui server dedicat e că tu te bucuri de toată puterea oferită de acea maşină – şi, pentru moment, obţii un preţ mai bun per processing power alegând un server dedicat în locul unei soluţii cloud. Unul dintre dezavantajele unui server dedicat e că tu trebuie să te ocupi de administrarea acelei maşini şi să te asiguri că există un plan B, C, D, s.a.m.d. în caz de crash. Echipa noastă nu deţinea know-howul unui system admin/db admin – puteam externaliza aceste taskuri. Dacă doriţi să vedeţi cam cât vă poate costa externalizarea unui serviciu de sistem admin puteţi verifica serviciile oferite de livehosting – cu care noi am lucrat şi de care suntem mulţumiţi - https://www.livehosting.ro/Datacenter/ Servere-Dedicate/Administrare-servere. aspx. până când aduceam în echipă un om cu cunoştinţele necesare. Nici una din variante nu ne încântă – un SLA (service level agreement) strict ne obligă să avem în echipa un system admin/db admin la un moment dat, dar nu considerăm că skill setul unui system admin/db admin erau prioritare echipei noastre în acest moment. În alte cuvinte: preferăm să devenim mai buni în ceea ce ştiam deja (dezvoltare web, mobile, linq) decât să ne dezvoltăm pe orizontală învăţând să devenim system admini/ db admini. Promisiunea serviciilor de tip cloud e transparența scalării şi uşurinţa realizării redundanței – fără cunoştinţele unui administrator de sistem poţi configura un sistem ce respectă un SLA strict şi poate fi scalat cu uşurinţă când va fi nevoie. O astfel de promisiune a fost pe placul nostru. Şi migrarea în cloud presupune dobândirea de know-how – familiarizarea cu termeni noi (fiecare soluţie cloud foloseşte o terminologie proprie), set de unelte de administrare noi şi mod de lucru. Dezvoltând o soluţie bazată pe .net şi folosind Visual Studio ca IDE, Azure devine soluția cloud cea mai uşor de folosit – din punctul meu de vedere, Microsoft a făcut o treabă excelentă prin integrarea Windows Azure SDK în Visual Studio aşa că poţi face „aproape” transparent deploy în cloud-ul Azure. „Aproape” e pentru că înainte de a face deploy va trebui să migrezi proiectul. Datorită tehnologiei folosite, Windows Azure şi SQL Azure au devenit soluţiile cloud cel mai uşor de folosit pentru noi. Când am avut de a face cu website-uri cu backend php am găsit hosting-ul celor de
40
la Amazon a fi uşor de folosit (cât timp nu te sperie configurarea unei maşini Linux) iar modificările ulterioare au fost uşor de făcut. Vă prezentăm mai jos ceea ce am făcut noi pentru a vedea cât de uşor și cât ne-ar costa să ne administrăm singuri maşinile virtuale față de a administra o soluţie tip cloud: • Ne-am documentat la un nivel superficial despre ce ar însemna să configurezi un IIS, să instalezi un load balancer, să instalezi şi să administrezi un SQL server, să pui la punct un sistem de backup/ restore pe bază de date. Nu recomandăm nimic în special pe această temă, motoarele de căutare vă vor oferi toate informaţiile necesare. • Ne-am educat despre ce înseamnă Azure şi SQL Azure, cum se poate realiza un sistem redundant şi cât de uşor e să scalezi – aici training-urile de pe Pluralsight (www.pluralsight.com) ne-au fost de un real folos şi le recomand cu căldură. • Cel mai important, am discutat cu persoane cu experienţă pe administrare servere/Windows Azure – când eşti la început de drum, s-ar putea să nu ştii ce întrebări trebuie să pui – şi aici o persoană cu experienţă te poate ajuta să îţi creezi o imagine realistă legată de efortul necesar1. Notă: buzz word-ul „cloud” a fost şi el un factor în tot procesul decizional – cel puţin la nivel de marketing, pare mai eficient pe termen să adaugi skill set-ului tău abilităţile de a lucra cu o soluţie tip cloud/ a migra proiecte în cloud, decât să înveţi să administrezi servere dedicate. Pe scurt: să administrezi un server nu e uşor – chiar dacă poţi externaliza administrarea pentru o perioadă, va trebui fie să
1 doresc să multumesc: - Fostilor colegi de la Evoline care m-am ajutat cu sfaturi/informatii legate de administrare Sql Server/IIS. - Lui Radu Vunvulea de la iQuest care m-a ajutat cu sfaturi/ explicatii legate de ce si cum s-ar putea migra pe Azure.
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
înveţi, fie să angajezi pe cineva care să facă asta. Într-o soluţie de tip cloud vei investi timp mai mult în faza iniţială pentru setarea sistemului, iar partea de redundanţă, scalabilitate, backup & restore să o externalizezi cloud-ului. Ambele implică costuri şi tradeoff-uri – noi eram relativ fără experienţă în oricare din aceste două domenii, costurile privind acumularea de know how fiind similare. În cazul vostru, dacă aveţi deja experienţa cu una dintre aceste soluţii, decizia poate fi mai uşoară. Din analiza noastră un server dedicat oferă performanțe mult mai bune/per euro, dacă aveţi experienţa necesară pentru a configura/adminstra un sistem voi înşivă, merită mers pe o soluţie dedicată. Cloud-ul face tranziţia mult mai uşoară pentru un programator – ascunde tot ce înseamnă configurare/administrare maşini virtuale şi procedura de scalare – rămânând că tu să te poţi concentra pe dezvoltarea soluţiei şi nu administrarea hostingului.
Note finale Am petrecut aproximativ trei săptămâni analizând diferite opţiuni, discutând cu oamenii, participând la training-uri pe Azure şi citind despre administrarea serverelor înainte de a alege Azure. Faptul că am putut testa Azure prin intermediul Bizspark ne-a ajutat mult în a lua o decizie. Despre cum exact am migrat baza de date pe SQL Azure, web portalul pe Windows Azure, provocările întâlnite şi tool-urile folosite în articolul din numarul viitor. Dragoș Andronic
dragos@txtfeedback.net CTO @ TXTFeedback
business
TODAY SOFTWARE MAGAZINE
Provocările unui lider - partea III
A
cesta este ultimul articol din seria dedicată provocărilor unui lider, scrisă de Martin Mackay, numit recent CEO la Neverfail. În primul articol Mackay a prezentat strategia utilizată la Neverfail pentru a determina schimbarea. În cel de-al doilea, discută mai în detaliu cele cinci responsabilităţi cheie pe care un lider trebuie să şi le asume. În articolul de faţă aduce în discuţie cele șapte comportamente cheie pe care liderul trebuie să le utilizeze pentru a fi eficient. Aşa cum am menționat în numerele anterioare, în momentul de faţă liderul are mult mai multe responsabilităţi decât a avut în orice altă perioadă. Nu numai că trebuie să ţină cont de nevoile investitorilor şi acţionarilor (care nu rezonează de obicei cu situaţia economică globală), dar totodată şi angajaţii au aşteptări mari de la acesta. Informaţiile disponibile în toate mediile permit ‚bunelor practici’ din leadership să fie diseminate şi citite pe toate canalele media; ca urmare, angajaţii vor taxa foarte strict acele comportamente care nu se ridică la înălţimea aşteptărilor. Uneori, orice lider are tendinţa să se concentreze doar pe nevoile şi dorinţele lui. O lecţie timpurie pe care am învăţat-o în carieră a fost aceea că cei mai buni agenţi de vânzări trebuie să fie egoişti (sau cel puţin individualişti), însă cei mai buni manageri în vânzări (şi liderii de orice tip) au nevoie să fie altruişti. Egoismul nu are ce caută în comportamentul unui lider, deşi uneori pare cea mai la îndemână atitudine! Unul dintre mentorii mei din industrie mi-a spus odată: „Ca CEO, nu ştiam dacă trebuie să fiu plăcut, respectat sau temut. Experienţa m-a învăţat că trebuie să fiu câte puţin din toate trei!„ Cuvinte înţelepte, dar sarcină dificilă. Nu există o formulă pentru succesul în leadership şi fiecare lider trebuie să îşi găsească propriile metode. În cele din urmă, dacă se dovedeşte că este un lider autentic, va câştiga şi respectul echipei sale. Totuşi, voi trece în revistă în acest articol cele șapte comportamente pe care le consider demne de urmat şi care consider că definesc noţiunea de leadership. Primul comportament constă în a oferi, mai degrabă decât a lua. Legendele despre lăcomie şi lipsa responsabilităţii
în cadrul corporaţiilor circulă peste tot. Citesc momentan o carte incredibilă intitulată ‚Exposure’, care descrie scandalul corporatist Olympus. Directorii din cadrul corporaţiei japoneze erau preocupaţi doar de a lua, nu şi de a oferi. Iată cum sună teza „a oferi, nu a lua”: angajaţii care se simt bine la locul de muncă vor avea rezultate mai bune şi vor munci mai mult; ca urmare, clienţii se vor simţi mai mulţumiţi de serviciile şi produsele pe care le cumpără şi vor cumpără mai mult; că urmare, vor fi mai mulţi bani în banca. Pentru a realiză acest lucru, angajaţii au nevoie să se simtă implicaţi. Pentru a crea implicarea, leaderul trebuie să creeze un mediu de comunicare deschisă şi să elaboreze o direcţie clară pentru companie, astfel încât angajaţii să înţelegă direcţia în care se îndreaptă şi să simtă că sunt parte din această călătorie. Acest lucru înseamnă că liderul trebuie să îşi petreacă timpul oferind: direcţionare, îndrumare, încurajare, comunicare, energie, empatie. În timpuri austere liderul nu are alt as în mâneca pentru a rămâne credibil: în timp ce liderul mai mult ca sigur va fi recompensat mai bine ca majoritatea, este tot la fel de important ca angajaţii să simtă că au fost recompensaţi pe măsură (şi au şansa de a participa la succesul companiei prin sistemul de bonusuri) Un al doilea comportament dezirabil pentru cei mai buni lideri este autocunoaşterea: să fii conştient de ceea ce poţi face, ce nu poţi face şi să te simţi confortabil să angajezi oameni care o pot face mai bine decât tine! Acest lucru este mai uşor de zis decât de făcut, pentru că presupune ca liderul să aibă o stimă de sine echilibrată. Gândiţi-vă la cei mai buni lideri cu care aţi lucrat: au fost mai mult ca sigur dispuşi să vă acorde laurii pentru succesul unui
proiect; v-au încurajat ideile şi v-au ajutat să le puneţi în practică; v-au provocat, ca să vă maximizeze abilităţile; v-au împărtăşit punctele slabe şi vulnerabile; nu au avut nevoie să fie cele mai deştepte persoane din încăpere! Acestea sunt caracteristicile autocunoaşterii care le permit liderilor să îşi creeze echipe puternice. În al treilea rând, liderii trebuie să se asigure că scopurile şi strategia sunt clare: acest lucru înseamnă să fii sigur că toată lumea a înţeles ce trebuie să facă, fără a menţiona cum anume trebuie făcut. Sesizaţi nuanta: liderii înșiși îşi pun tot talentul în a crea strategii şi scopuri asociate; nu trebuie să elaboreze ei înşişi strategia şi obiectivele, dar să se asigure că sunt bine definite. Revenind la al doilea comportament, cei mai buni lideri au o echipă care sunt mult mai capabili decât ei în orice arie de responsabilitate. Angajează oameni care sunt mai buni ca tine şi dă-le sansa să aibă succes este cel mai bun sfat pe care îl pot oferi. Cheia este aici că liderul devine orientat spre scopuri şi nu spre sarcină. Liderii orientaţi spre sarcini se transformă cu uşurintă în micro-manageri şi se consideră singurii capabili de a face lucrurile să meargă. Ca un exemplu, să ne uitam la Margaret Thatcher: indiferent de ce parere ai legată de politica ei, nu poţi să nu admiţi că viziunea pe care a instalat-o în UK, curajul ei ca lider, obiectivele propuse pentru echipa şi determinarea ei au fost factorii care au determinat în 1980 transformarea Marii Britanii. Declinul ei s-a produs în momentul în care a crezut că este singura capabilă să pună în practică programul legislativ. A încetat să mai lucreze cu propria echipă şi a început să-i denigreze; a uitat de scopuri şi a început ea însăşi să execute sarcinile. În cele din urmă, acest lucru
www.todaysoftmag.ro | nr. 10/Aprilie, 2013
41
business Provocarile unui lider - partea III a dus la excluderea ei din guvern nu de către opoziţie, ci de către propriul partid. Al patrulea comportament presupune că liderii sunt capabili să comunice ca să implice. Folosesc mijloace media formale şi informale pentru a prezenta detalii ale progresului şi succesului înregistrat, dar şi provocările pe care afacerea le întâmpină. Cea mai eficientă comunicare este aceea în care liderul spune poveşti şi împărtăşeşte experienţe. Aceste poveşti vor fi de obicei presărate cu umor autentic şi auto-ironizator (dacă vorbesc despre experienţa liderului), dar vor folosi și analogii – personal mă încântă analogiile din lumea sportului – sau poveşti care spun experienţe similare pentru a ilustra punctele cheie. Probabil un aspect important în acest tip de comportament este acela că această comunicare trebuie să fie consistentă: ar putea fi numită comunicare în exces, dar dacă liderul s-a asigurat că strategia şi obiectivele au fost clar stabilite, atunci repetarea acestora pentru atingerea scopurilor înseamnă consistenţă. Comunicarea în scopul atingerii scopurilor înseamnă că acestea trebuie să fie relevante şi inspiraţionale pentru angajaţi. De multe ori, scopurile reflectă interesul liderului sau sunt limitate şi nerelevante pentru angajaţi. De exemplu, stabilirea obiectivului de a vinde afacerea în doi ani ar putea fi relevant pentru investitori şi acţionari, dar mai puţin relevant pentru angajaţi. Prezentarea unei perspective în termeni de achiziţii strategice (produse, parteneri), prezenţa pe piaţa forţei de muncă (clienţi, reputaţie), cultura companiei şi etosul acesteia ca şi ilustrarea indicatorilor financiari pentru a prezenta obiectiv progresul sunt o sursă mai mare de inspiraţie, deoarece le permite angajaţilor să simtă că se implică să lucreze într-o afacere de succes din care sunt mândri că fac parte. Îndeplinirea acestor scopuri strategice va rezulta într-o oportunitate profitabilă pentru investitori, dar aceasta este consecinţa îndeplinirii scopurilor, mai degrabă decât a unui singur scop. Pentru orice lider succesul nu lasă loc de aroganţă. Am învăţat acest lucru pe propria piele în trecut, atunci când am fost provocat de angajatori cu întrebări dificile şi am răspuns într-un mod agresiv şi suprasaturat: aroganţa mea a fost aceea că nu am permis această provocare din partea cuiva care nu-mi respectă autoritatea. Se spune că încrederea în tine vine dintr-o parere bună pe care o ai despre propria persoană şi care este susţinută şi de alţii, iar aroganţa provine din aceeaşi stimă de sine, dar care nu
42
este susţinută de ceilalţi! Dacă liderul poate demonstra încrederea cu umilinţă, dacă se pune în locul angajatului şi răspunde pozitiv la orice provocare, atunci acesta va fi perceput ca unul autentic. Evident că liderii sunt mai întâi de toate oameni: dacă le emiteţi provocări şi întâlniţi un comportament agresiv şi nerespectuos, aşteptaţi-vă la consecinţe neplăcute! În orice caz, cei mai buni lideri lasă aroganţa deoparte şi fac faţă provocărilor, adversităţilor şi succesului într-o manieră echilibrată. Aşa cum spunea Kipling:
care este, după părerea mea, şi cel mai important: integritatea. Integritatea este o combinaţie de: consistenţă, onestitate, deschidere, autenticitate şi încredere. Demonstraţi acest lucru şi vor urma doar lucruri bune!
P.S. Sper că aceste articole s-au dovedit a fi atât interactive cât şi provocatoare. Ceea ce am încercat să fac aici a fost să îmi etalez propria filosofie şi modul în care încercăm să transformăm Neverfail la nivel mondial. Va funcţiona? Singurul test real este chestionarea propriilor angajaţi în legatură cu De poți fi calm când toți se pierd cu firea modul în care se simt să lucreze pentru noi. În jurul tău și spun că-i vina ta; Nu pot fi sigur că vom trece acest test, dar De crezi în tine chiar când omenirea cu siguranţă ne vom strădui să îndeplinim Nu crede, dar s-o crezi ar vrea; acest obiectiv ca o echipă şi vom face acest lucru cu plăcere! Comportamenul penultim presupune ca liderii să îşi inspire angajaţii să se implice în munca lor şi în viitorul companiei şi să îşi asume responsabilitatea pentru contribuţia lor; aceştia prezintă totodată dovezile progresului, a contribuiţiei angajaţilor şi a tuturor aspectelor afacerii. Cu alte cuvinte, conduc cu inima şi execută cu capul. În ultimul rând, cei mai buni lideri lucrează din greu să îşi implice angajaţii astfel încât experienţa acestora să fie memorabilă; acest lucru înseamnă că experienţa clientului va fi memorabilă şi recunosc acest lucru ca fiind principalul element al unei afaceri de succes. Prin urmare, liderul are nevoie să îşi câştige încrederea şi respectul, astfel încât angajaţii să creadă în el. Liderul trebuie să îi motiveze ca aceştia să lucreze ca o echipă, mai degrabă decât o adunatură de indivizi cu interese separate. Liderul trebuie să fie suficient de abordabil, astfel încât angajaţii să îşi poată exprima punctele de vedere, fără frica de consecinţe, însă trebuie să îşi arate şi ‚colţii’ atunci când situaţia o cere – trebuie să existe atât sentimentul că angajaţii nu trebuie să îşi dezamăgească liderul, dar şi acela că cei care o fac nu sunt toleraţi. Ca exemplu, amintiţi-vă celebra replică a lui Arnold Schwarzenegger din filmul „Minciuni adevarate”, în care Jamie Lee Curtis, soţia sa, descoperă că e spion. Ea spune: Vrei sa spui că ai omorât cu adevarat oameni?’ la care el raspunde: „Da, dar erau cu toţii răi!’. Steve Jobs exprima altfel aceeasi idee: „Scăpaţi de proşti!” Acest Martin Mackay lucru nu înseamnă concedierea tuturor mmackay@neverfailgroup.com care aduc provocări sau care contrazic, ci doar a acelora care nu împărtăşesc valorile CEO @ Neverfail Group. companiei. Cum poate un lider să realizeze toate acestea? Etalând ultimul comportament
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
management
TODAY SOFTWARE MAGAZINE
Prezentarea cărții: Going Agile de Gloria J Miller
O
ver the summer of 2012, I decided to go for the Project Management Institute (PMI) launched an agile project management certification, the PMI-Agile Certified Practitioner (PMI-ACP®). PMI recommended some 10 books to read in preparation for the certification. I found the books very helpful and informative. I learned some new terms and new methods of working. Even though I have several years of experience with different agile methods, it was difficult to align those new ideas with the project management practices I was already using. I kept thinking, what now. If I started a project tomorrow, what would I do different from on my last project. Therefore, I decided to jot down my ideas and thoughts in short reference book. The book “Going Agile Project Management Practices” is the result.
What is the book about
“Going Agile Project Management Practices” is an extensive review of the literature with the content selected and influenced by my 30 plus years of experience. Agile and project management field consultants helped to review and form the structure and content of the book. They also added their expertise in the form of case studies and personal experiences. The book is not specific to any one agile methodology. It synthesizes definitions, concepts, and practices that would be applicable to an executive, manager, or project manager that wants to be informed about agile. The book is divided into four sections: A definition of agility, its benefits, and practices; a description of the agile practices as aligned with the PMI Project Management Body of Knowledge (PMBOK®) Guide—Fifth Edition; an overview of the considerations for selecting and implementing an agile methodology; and a reference guide of selected methodologies, terms, and people. The key topics included in the book include: • The applicability of agile, its benefits, and failures • Description of selected methodologies (Scrum, Kanban, Lean, XP) and
agile practices • The agile techniques and skills needed for an agile coach • Agile practices aligned to the Project Management Body of (PMBOK®) Guide Edition 5 knowledge areas • Personal experiences from agile coaches and team members • A glossary of terms used in the book. • Profiles of agile and management experts referenced in the book.
the required functionality” for the agreed budget. It turns out, agile projects use of “functional contingencies” and the review meetings to manage budget expenditure. A functional contingency is a reserve of features that may not be implemented should the project not be able to realize all product features due to budget or time constraints. The review meetings are used to evaluate progress against expectations and authorize or decline further investment in the The originality in “Going Agile Project project. Management Practices” book lies in its structure. First, it is a reference book or Book excerpts supporting cost pointer to guide people on getting started management with agile practices. Second, it approaches The following excerpts from “Going the going agile topic from two directions: Agile Project Management Practices” are adding agility to traditional projects or related to managing project scope and de-risking agile projects. Finally, it covers costs. “agility” in projects as a topic and not one Chapter 6 - Integration: Scope is manaspecific agile methodology. ged by prioritizing features to deliver the For example, one of the key questions most valuable features first, establishing I had about agile practices related to cost business rules for addressing changes, and management. If the agile teams are self- deciding on the iterations scope at the last managing, deciding their own definition possible moment. of done, and agreeing what scope they Chapter 7 - Scope: Functional contincan complete, how does that relate to cost gency is defined based upon the feature management? In my world, projects have prioritization. It is a reserve of features budgets that are established and agreed at that may not be implemented should the the executive level. The executive expec- project not be able to realize all product tation is that the project will deliver “all features due to budget or time constraints. www.todaysoftmag.ro | nr. 10/Aprilie, 2013
43
management [Dynamic Systems Development Method] DSDM suggests that the contingency is the effort to implement any features beyond the “must have” features and that the “must have” features should represent 60% of the total project effort. In this scenario, the contingency is 40%. Chapter 8 - Time: Schedule contingency is a time buffer that is added to the schedule baseline to account for adjustments and fluctuations based upon risks or unknown events. The method for estimating the contingency will vary depending upon the estimation method used for sizing the project and a range to the velocity [the rate at which the team can deliver the features]. The simplest method is to calculate the expected project duration and add a percentage of time for contingency (e.g., 20%). For example, if the project was expected to complete in five iterations, a 20 percent contingency would have it completing in six iterations. Chapter 9 - Cost: The costs baseline includes all the costs and the contingencies, including staff costs and other costs. Since the scope is delivered in iterations, the burn rate per iteration and burn rate per size unit are perfect for evaluating the cost performance. When the budget is at risk, the functional contingencies can be used as a tool to adjust the features delivered and maintain the project within its costs (Chapter 7). Chapter 10 - Quality: The Test Plan should consider using Continuous Integration, Test Automation, and an Agile Tester as part of the quality processes. These practices are necessary to maintain a high throughput of user stories, minimize the build of technical debt, and deliver a high quality solution. Chapter 11 - Human Resources: At least 10% of the team members should be experienced with agile practices if pair programming is being used; if not, at least 25% of the team members should be experienced. Splitting teams, training, and [external] coaching are effective methods for including experience into the project team. Chapter 12 - Communication: Team space should be organized to facilitate free flowing communications amongst colocated and distributed team members. This may require adapting the facilities, using collaborative technologies, or undertaking additional activities. Chapter 13 - Risk: Risks are scheduled for resolution by placing them in the product backlog during release planning,
44
planning the risk actions during the iteration planning, and working on risk during the project iterations. Chapter 14 - Procurement: The scope, change management, acceptance, termination, and deliverable sections of agreements should be adjusted to fit the operations of an agile project, including evolving scope, adapting to change, and early termination. Chapter 15 - Stakeholders: The project stakeholder will have different interests in the project and will come from inside and outside the organization. Map the interests of stakeholders onto the project events, artifacts, and information radiators that will be used to engage them in the project or inform them on the project status. Summarized altogether, the project budget should consider 100% of the functional scope, risks actions, quality infrastructure, facility changes (e.g., team space, collaboration tools), training and external coaching, and schedule contingencies. Change management involves establishing rules for when and how to use the functional or schedule contingencies. The project reviews become important milestones for stakeholder engagement and for monitoring and managing budget expenditure. Figure shows the budget considerations in agile projects.
Recommendations from the book for going agile
There is no one right way for organizations or projects to transition to being agile. Projects are unique undertakings, and organization have different cultures for decision-making and management controls. Therefore, the book lays out the facts, describes the agile practices, and then gives the choice to the reader on how to best approach agility depending upon their situation. The following are some things to do and to avoid for those considering adopting agile practices for the first time. Select and customize the methodology based upon the environment. Do not assume that any one methodology will work out-of the box. Spend some time to understand the method and how it would fit into your environment. Understanding it, might mean applying it in a few iterations before customizing it. Educate the leadership team. Management support is key and needed to implement and sustain agility. Invest time in getting the leadership team on board. They need to understand what changes and how they can support the team.
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
Define success. Define what a successful agile project looks like and manage expectations along the way. From Scrum, we learned about the term “definition of done.” Define and agree what it means. Otherwise, the team may think they are successful while management may not. Set-up the infrastructure. Being agile requires an investment in having infrastructure that supports quick changes. Define what infrastructure is needed and set it up. Adapt management reporting. Projects need to be evaluated more on their functional scope coverage than they do on their on-time performance. Adapt the expected management reports and performance metrics.
TODAY SOFTWARE MAGAZINE Hold a retrospective and tune the processes. Review often what is working well and worth repeating, what could use optimizing, and what should never be repeated. There is no cookbook for going agile. Avoid software-driven approaches. Avoid new project management software solutions until after the first two or three projects. Work without introducing new project management technologies until you learn about being agile. Introducing
technology too early makes the transition about the technology and not about the practices. Avoid confusion. Avoid trying to keep old practices while adapting to the new practices. It is tempting to try to keep old practices in place and not make the radical changes required. For example, going from a command and control project structure, where there is a project manager in charge, to a self-directed team means that
the distributed authority can cause some uncertainty on who is in charge. Avoid trying to make the agile coach the project manager to avoid this discomfort. Agile practices do work, but they have to be given a chance. “Going Agile Project Management Practices” is 442 pages is available at amazon, Barnes and noble, and other e-tail outlets for 18,10 euro epub and kindle and 23,99 paperback.
About Gloria J. Miller Gloria J. Miller is the founder of MaxMetrics, a Management, and Information Technology Consulting company that is specialized in providing experts and expertise in international projects and programs. She has more than 20 years’ experience providing consulting in managing complex projects and realizing organizational change. Gloria has a master’s degree in business administration and undergraduate degrees in computer science and electronic technology. She is a Certified ScrumMaster (CSM), a PMI-Agile Certified Practitioner (PMI-ACP®), and a Project Management Professional (PMP®). Maxmetrics has offices in Heidelberg, Germany and Atlanta, Georgia, USA. www.todaysoftmag.ro | nr. 10/Aprilie, 2013
45
programare
Recenzia cărții: Thinking in Java de Bruce Eckel
A
ceastă recenzie va fi un pic altfel. Cartea pe care o voi descrie este “un clasic”. Pentru ea voi scrie… altfel. Este, dacă-mi permiteţi, prima mea mare dragoste informatică. De când mă ştiu sunt pasionat de informatică. Legăturile mele cu acest domeniu al ştiinţei şi tehnologiei au rădăcini în găsirea algoritmilor de rezolvare a problemelor matematice, dar nu numai. Poate că le-am pus în valoare atunci când am intrat la liceul cu profil informatic, dar atractivitatea a fost, aşa precum am spus, mult mai veche. Silviu Dumitrescu silviu.dumitrescu@msg-systems.com Consultant Java @ .msg systems Romania
46
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
În domeniul la dezvoltarii de soft am lucrat în multe limbaje, de la Asiris, Fortran, Cobol pâna la mai modernele Pascal sau C. Fiecare a avut frumuseţe şi utilitate la un anumit moment. Spre sfârşitul anului 1998 descoperisem plăcerea utilizării Delphi-ului. Cred că începusem să mă modernizez… Numeroasele tool-uri vizuale pe care le oferea, posibilitatea utilizării formularelor de completare a proprietăţilor sau acţiunilor mi se păreau fascinante. M-am mai răzgândit apoi, când mi-am dat seama cât de puţină flexibilitate ofereau aceste tool-uri. Fiind dornic de a fi în temă cu noutăţile în domeniul informatic am citit un articol despre noul limbaj Java şi de buna impresie pe care o lăsase în lumea dezvoltatorilor de soft. Nu ştiu de ce am încercat să dezvolt prima aplicaţie în Java. Nu îmi recomandase nimeni asta şi nici nu ştiam pe cineva care lucra în Java. Niciodată nu am ştiut să explic de ce am fost atras de anumite lucruri sau persoane, poate este doar rezultatul unui impuls. Editam în Notepad, compilam şi rulam în linia de comandă. Atracţia a fost totală şi de atunci au trecut 14 ani şi atracţia continuă şi se intensifică. Nu pot spune că nu am mai lucrat şi în alte limbaje de programare: PHP, Symfony, Smarty, JavaScript, Ruby on Rails, C, C++ sau chiar Delphi, poate şi în altele de care nu îmi aduc aminte acum, dar plăcerea a fost unidirecţională: Java.
Şi totuşi, de ce Java? Mulţi dintre noi ştim că Java a adus unele schimbări faţă de limbajele de programare ale vremurilor respective. Spre exemplu, Java permitea doar moştenirea simplă, Java elimina pointerii, şamd. Dar, întreaga construcţie a limbajului Java a fost orientată spre programator. Java permite implementări de aplicaţii complexe, cu flexibilitate sporită, implementări ale punctelor de extensie, scalabilitate şi multe altele. Există studii prin care s-a dovedit că timpul de dezvoltare al unei aplicaţii în Java este de două ori mai mic decât în cazul folosirii limbajului C++. Mulţi însă, pot aduce ca minus al limbajului Java timpul de rulare al aplicaţiilor. Este adevărat, interpretorul Java face multe operaţii până când codul compilat este executat. Acestea ţin printre altele de portabilitatea limbajului. Deşi s-au făcut progrese importante în acest sens, pentru aplicaţiile stand alone timpul de execuţie este uşor mărit faţă de al aplicaţiilor C++. Pentru aplicaţii enterprise însă, acest timp este comparabil acelaşi cu al altor limbaje ce permit dezvoltarea de aplicaţii enterprise. Thinking în Java de Bruce Eckel, a fost prima carte cu adevărat completă pe care am citit-o despre Java. De prima ediţie am făcut rost, după multe căutări, de la un prieten din Germania în format… pe hartie de copiator şi expediată printr-o cunoştintă. Cred că versiunea de Java de atunci era 1.2, maxim 1.3. Platforma enterprise nu apăruse
business
încă, dar se putea programa în reţea. Citind-o mi-am dat seama că nu ştiam nimic despre Java. Au fost frustrări maxime, dar am parcurs-o toată şi multe dintre conceptele prezentate le-am şi înţeles. Ca urmare am şi scris o carte despre Java, cu un prieten, în martie 2002. Voiam să transmitem şi altora ce am înţeles noi. Uitându-mă în spate, cartea scrisă atunci are o abordare simplistă, dar eu sunt mândru că este, probabil, printre primele din România pe această tehnologie. Thinking în Java a fost întotdeauna categorisită ca o carte entry, maxim middle level. Eu însă, nu am putut vreodată să o recomand cuiva care nu ştie nimic despre Java. Îl dezarma! Cartea este foarte completă pe aproape toate topic-urile platformei standard. Din core-ul Java cred că lipsesc doar JDBC, parsarea XML-urilor şi programarea în reţea. Din păcate versiunile pentru platforma standard ale cărţii nu au fost urmate şi de unele, la fel de reprezentative, pentru platforma enterprise. De-a lungul timpului am citit toate ediţiile acestei cărţi, iar în ultimii ani mi-am petrecut mult timp actualizând exemplele acestora la versiunea Java Standard 7. Cel mai important sfat pe care pot să îl dau persoanei care citeşte această carte este: dacă topicul care vă interesează, şi de care nu ştiţi mai nimic, se află la pagina 410, spre exemplu, nu vă duceţi acolo, nici măcar la începutul capitolului, ci la
TODAY SOFTWARE MAGAZINE pagina 23, prima a acestui material. Nu săriţi paginile, implementaţi toate aplicaţiile sugerate şi răspundeţi multelor întrebări ataşate, până la pagina cerută. Dacă vi se pare mult căutaţi altă sursă bibliografică. Totuşi, ajunşi la pagina 410 veţi avea un bagaj de cunoştinţe însemnat, pe care veţi clădi cu siguranţă topicul dorit. Rămân la părerea că, dacă aţi parcurs întregul material al acestei cărti, poate mai puţin partea de interfaţă utilizator, care poate fi în cazul unui dezvoltator enterprise mai puţin interesantă, aţi dobândit cu adevărat un nivel ridicat de cunoştinţe pentru dezvoltarea de aplicaţii utilizând platforma Java Standard 6. Nu toate lucrurile sunt roz. Bruce Eckel îşi creează o grămadă de pachete, pline de instrumente pe care le foloseşte în exemplele cărţii. Rolul lor este important în ingineria softului, dar pentru cineva care se grăbeşte să găsească informaţia cerută este destul de enervant. Repet, dacă aveţi timpul necesar şi vă recomand să-l găsiţi, citiţi şi înţelegeţi instrumentele folosite de autor. Cartea abundă, de asemenea, în pattern-uri. Acesta nu este un lucru rău. Folosirea pattern-urilor este următorul pas important pentru un dezvoltator soft, după acela al implementării unei aplicaţii sub ideea “să iasă”. Este recomandat să înţelegeţi aceste pattern-uri, să vedeţi utilitatea lor şi să le adaptaţi aplicaţiilor voastre. Multe dintre pattern-urile prezentate sunt deja implementate în platforma enterprise. Container-ul se bazează pe aceste implementări. Veţi înţelege ceea ce a implementat container-ul şi veţi fi în stare să creaţi o aplicaţie cu o calitate internă a softului ridicată. Sunt multe lucruri de spus despre această carte din punct de vedere tehnic. Organizată în 22 de capitole, acestea se întrepătrund ca topic-uri, completânduse. Primele sunt relativ de bază şi probabil simple (generalitati OOP, sintaxa limbajului, fluxuri de control), dar ştiţi oare să răspundeţi la întrebarea: Care este ordinea în care se face iniţializarea atributelor unei clase în momentul instanţierii, dacă avem constructor, iniţializare la declarare şi context de iniţializare? Sunt foarte multe astfel
de provocări. Dincolo de aceste “basics” se discută amănunţit probleme precum: reflecţia, colecţiile, firele de execuţie, inner şi nested classes, manipularea erorilor, io şi nio, genericele, anotaţiile, garbage collector. Revin cu sfatul: faceţi rost de timp pentru a citi întregul material! Chiar dacă aveţi impresia că ceea ce aveţi nevoie a fost spus într-un anumit loc, în cele mai multe cazuri există dezvoltări, optimizări şi discuţii pe soluţiile anterioare. Îmi doresc ca fiecare dintre cei care citesc această carte să găsească ca şi mine plăcerea lucrului în Java. Este dificil şi anevoios, dar reuşita este cu adevărat plină de satistacţii. Sunt multe altele de adăugat şi de aceea aştept cu mare plăcere comentariile şi discuţiile pe această carte. Lectură placută!
www.todaysoftmag.ro | nr. 10/Aprilie, 2013
47
HR
Sindromul Superman
C
ând vine vorba de Time Management (TM) eu sunt publicul ţintă. Problema este că nu ar trebui. Sunt trainer si psiholog de aproape 10 ani. Am livrat training-uri pe TM si am citit de la cercetări ştiinţifice pe TM până la literatura POP pe acest domeniu. Dacă am aşa mare nevoie si dacă am şi cunoştinţele despre cum ar trebui să fac TM eficient, de ce în continuare procrastinez, întârziu, uit? Problema nu este că nu ştim ce ar trebui El nu există. (din păcate) ci să vă creaţi sis- din manual) să facem, problema nu este că nu ştim să temul vostru de TM. Puteţi bineînţeles să 2. Am capacitatea să fac acel lucru? planificăm sau că ar trebui să ne ţinem de vă inspiraţi, însă nu vă aşteptaţi de la un tool “Capacitatea” trece prin două etape. plan. Dacă asta ar fi problema, eu si multi sau un training să vă dea acel sistem care de Prima etapă este să “ştiu cum”, adică să alti documentaţi în ale TM-ului am face tot mâine vă va transforma in superman. stiu exact paşii pe care trebuie sa îi fac și ce ne propunem, atunci când ne propunem. Ok. Atunci ce este de făcut? cum trebuie ei făcuţi. Acest pas se referă la Problema este ceea ce putem numi sindroceea ce numim cunoştinţe procedurale. A mul Superman. Lucrul esenţial pe care trebuie să îl doua etapă se referă la avea compenţele de faceţi este să vă creaţi profilul vostru de a face ceea ce ne dorim. A avea competenţe Definitie TM. Cum faceţi asta? se defineşte simplu prin a putea să adaptez E acea afecţiune care ne face să planifi1. Întelegeţi psihologia din spatele acele cunoştinţe procedurale la caracteriscăm ca şi cum de mâine altcineva va veni managementului comportamentelor. ticile fiecărui context cu puţin efort și aport și va pune planul în aplicare. Altcineva 2. Vă monitorizaţi felul în care aveţi conştient. care este complet diferit de noi. Altcineva tendinţa să faceţi lucrurile pentru a vă Aici este o discuţie lungă. De exemplu care e motivat, are chef, îşi face timp pentru face un profil. în cazul învăţatului unui nou limbaj de proce este important, nu îl glorifică pe busy, 3. Planificaţi luând ca de facto acel pro- gramare întrebarea este “Am competenţele nu are nevoie de pauze, ritmul lui e unul fil, nebazandu-vă pe Superman. să învăţ?” “Știu cum să învăţ?”. E surprinconstant … şi orice alte caracteristici care zător câţi dintre noi nu ştiu cum trebuie l-ar putea duce să pună planul ambiţios în PSIHOLOGIA INITIERII să înveţe și din acest motiv de multe ori aplicare. COMPORTAMENTELOR nici nu se apucă sau dacă se apucă renunţă În articolul trecut am discutat despre Cercetările din psihologie spun că pen- pentru că e dificil să înveţi când nu ştii să prima problemă, definirea a ceea ce am tru a face ceva, este necesar să îţi asiguri înveţi. de făcut. Acesta e primul pas şi probabil, premisele/antecedentele pentru acel ceva. 3. Cred că pot să fac acel lucru condeşi esenţial, cel mai uşor de făcut. În acest Relaţia dintre antecedente şi acţiune este form cu asteptarile mele? articol vom vorbi despre cel mai important “dacă şi numai dacă” toate antecedentele În limbaj psihologic acest lucru se pas. Pregătirea! sunt prezente doar atunci comportamen- referă la auto-eficacitate. Aceasta este difetul poate fi iniţiat. rită de încrederea în sine sau stima de sine. Asta nu înseamnă AE este specifică fiecărui comportacă va fi iniţiat ci ment. Pot să am AE mare pentru mersul pe doar că poate fi ini- bicicletă și inexistent pentru învăţat. ţiat. Antecedentele În general AE este extrasă din experinecesare sunt: 1) con- enţa de a face lucrul respectiv însă nu este textul; 2) cunoştintele neapărat o măsură obiectivă a capacităţii de şi competenţele; 3) a-l face corect. Atunci când intenționăm să învățăm un autoeficacitatea şi 4) motivarea: (AE scăzut - în limbaj uzual sună “Nu nou limbaj de programare și vrem să fim cred ca va ieşi, Sigur o voi da in bară, E prea consecvenți în acțiunea de învățare. Avem 1. Contextul: Am toate resursele de dificil pentru mine etc.) nevoie de două strategii distincte: care am nevoie să fac acel lucru atunci 4. Sunt motivat sa fac acel lucru? când acel lucru este planificat? Adică, în alţi termeni am acel drive Cauza Aici vorbim de două tipuri de resurse: de care am nevoie să mă apuc să fac acest Se pare că avem tendinţa ca atunci când externe si interne. lucru? Să îi aloc timp și efort? Să renunţ ne propunem să realizăm ceva şi când plaAm resursele externe să realizez la a face altceva în acel timp sau cu acele nificăm, să o facem în ciuda noastră. Exact! acel comportament la momentul în care resurse? Avem tendinţa ca atunci când planificăm trebuie realizat? (ex: manuale, resurse Întrebarea pentru exemplul de studiu în loc să vedem care este profilul nostru informaționale, exerciții) al unui nou limbaj de programare va fi “La de timp, cum funcţionăm noi ca oameni Am resursele interne? – aici e capcana: momentul în care am planificat să învăţ voi şi care este structurarea noastra fizică şi Am resursele intelectuale, fizice, psiholo- vrea să o fac? Voi vrea să învăţ în loc să fac psihică, o facem mergând pe nişte strategii gice să fac acel comportament la momentul orice altceva?” care sunt mai degrabă împotriva noastră. în care este planificat? (Totul, de la dispo*Vă promit un articol detaliat pe acest Sfatul meu referitor la TM nu este să ziţia emoţională, capacitatea intelectuală subiect. E foarte interesant şi merită mai adoptaţi un sistem de organizare miraculos. până la condiţia fizică de a citi 20 de pagini mult de cinci rânduri.
48
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
TODAY SOFTWARE MAGAZINE Ce înseamnă aceasta în termeni simpli? Înseamnă că numai după ce bifez cele patru condiţii pot să pun acel lucru în calendar. Ce se întâmplă este că de multe ori noi ne facem planificarea parcă în ciuda noastră. Planificăm neluând în considerare, de exemplu, ritmul psiho-fiziologic personal (context). Planificăm, de exemplu, să învăţăm seara, deşi în general seara suntem distraşi şi tot ce ne dorim este să ne relaxăm. Recomandarea mea este ca planificarea să fie conform profilului nostru şi nu în ciuda acestuia. Am spus că al doilea pas este Cunoaşterea profilului personal. Cum să facem asta?
CUNOASTEREA PROFILULUI PERSONAL
În primul rând vă recomand o săptămână de monitorizare. Veţi fi surprinşi câte surprize veţi avea. Monitorizarea o puteţi realiza purtând tot timpul o foaie de hârtie la voi unde să notaţi ce faceti în fiecare moment (inclusiv uitatul pe pereţi). După ce aţi făcut acea monitorizare vă recomand să faceţi o analiză referitor la cum vă petreceţi timpul. Ce aveţi tendinţa să faceţi pe parcursul zilei, când sunt perioadele productive şi când sunt perioadele de “nu am nici un chef ”, când aveţi nevoie de pauze, când gândiţi cel mai bine, când sunteţi cei mai creativi, etc. A doua etapă în profilul personal este să vedeţi de ce modificaţi planul.
Recomandarea mea este să vă faceţi un plan (cum faceţi de obicei) şi pe parcursul zilei să urmăriţi acel plan sau să îi faceţi modificări pentru a corespunde cu realitatea. Ce contează aici este ca atunci când nu faceţi ceva ce era planificat sau mutaţi o anumită sarcină să identificaţi de ce se întâmpla asta. Să identificaţi ce din Antecedente lipseşte. Studiile de specialitate spun că tool-urile de Time Management nu funcţionează decât dacă persoana care le foloseşte are “controlul perceput al timpului”. Acest concept prespune senzaţia subiectivă şi obiectivă căpersoana poate să controleze felul în care îşi petrece timpul. Singura modalitate de a creşte acel control perceput este să ne cunoaştem profilul personal. Cunoscându-l vom ajunge să ştim ce plan ne reprezintă. Cunoscând ce plan ne reprezintă ajungem să planificăm pentru noi şi nu în ciuda noastră. Scopul managementului timpului nu este să avem un plan miraculos. Scopul este să avem un plan care să coincidă cu realitatea şi să nu ne distrugă pe parcursul implementării. Nu am vrea ca planul să ne facă să ne simţim neputincioşi, iresponsabili, ne-ambiţioşi, leneşi, nemotivaţi, supăraţi, nervoşi sau speriaţi.
PLANIFICAREA CONFORM CU PROFILUL
Cunos când prof ilul p ers onal ne
cunoaştem pe noi. Cunoscându-ne pe noi putem să facem planuri care să ne reprezinte. Planificarea conform cu profilul se realizează punând în realitate toate învăţăturile pe care le-am extras ca urmare a monitorizării. Întrebarea constantă va fi “Unde pun activităţile în aşa fel încât ele să meargă pe ritmul meu personal și pe nevoile mele?”. Niciodată nu voi pune o activitate în calendar dacă ea nu are toate antecedentele prezente. Dacă sunt antecedente lipsă, atunci voi programa activităţi pentru crearea acelor antecedente înainte de a pune activitatea în calendar. De exemplu, pentru a învăţa un nou limbaj de programare, în cazul în care observ că nu ştiu cum să învăţ atunci voi programa o activitate unde voi învăţa cum să învăţ înainte de a planifica să mă apuc efectiv de învăţat. Aşa ca haideţi să ne construim planuri care să fie cu noi, nu împotriva noastră! Vă doresc planuri cât mai uşoare și bineînţeles spor la învăţat!
Antonia Onaca
anto@aha-ha.com de aproape 10 ani trainer, psiholog, consultant sub formă de antreprenor, intraprenor şi antreprenor din nou
www.todaysoftmag.ro | nr. 10/Aprilie, 2013
49
comunități
WordPress și spiritul comunității
O
bținerea succesului cu ușurință și rapiditate - departe de a fi un scop care ar putea aparține unei comunități - e unul dintre subiectele editoriale cel mai aprig discutate în publicațiile de business și nu numai. Desigur, ambițiile (firești, de altfel) ale oamenilor alimentează acest subiect, creând, în același timp, și iluzia că succesul este scopul în sine, sau, pur și simplu, limita superioară la care trebuie să ajungem cu orice preț. Succesul e o destinație, un achievement absolut.
Ce-ar putea însemna să ai succes? Ar putea foarte bine să însemne că proiectul sau ideea la care lucrezi a atins acel stadiu care manifestă potențialul de a evolua pe termen lung. Succesul se materializează pas cu pas, cu fiecare graniță pe care o străbate în procesul de evoluție al ideii. Ca exemple din viața reală: succes poate fi atunci când observi că echipa în care lucrezi se mărește, că proiectele la care lucrați împreună sunt din ce în ce mai diverse și mai complexe, sau când ideea ta schimbă ceva. În final, această perspectivă asupra succesului poate aparține unei comunități, a unui grup de oameni care au unul sau mai multe scopuri în comun. WordPress e una dintre acele organizații al cărei mod de funcționare demonstrează că această perspectiva e realistă și, mai mult, că aceasta poate aduce oameni împreună pentru a construi o rețea (o comunitate) cu influență la nivel global. WordPress explorează pavilionul oamenilor curioși din lume, sfidând, prin modul său de funcționare și dezvoltare, tendința naturală a acestora - aceea de a dobândi cunoștințe pe care să le folosească strict în interesul propriu. Astfel, WordPress se numără printre primele organizații online care duc mai departe simțul comunității, prin intermediul platformei pe care a dezvoltat-o.
Ce este WordPress?
WordPress este un software scris în PHP (bazat pe MySQL) de către și pentru comunitate. Fiind un sistem de administrare a conținutului (CRM), acesta este folosit în principal pentru publicarea de conținut. Accesul la platformă este gratuit, iar accesul la codul sursă este, de asemenea, deschis oricui - fiind un software tip open-source.
50
Ce este „simțul comunității”?
Wo r d P r e s s înseamnă comunitate fără frontiere; înseamnă colaborare, interacțiune, readucând în vedere importanța conținutului de calitate pe Internet. WordPress încurajează ceea ce am putea numi, astăzi, collaborative knowledge, iar exponentul său - codul - este, în același timp, exponentul inovației în societatea tehnologizată. Mai mult, WordPress este deschidere. Este deschiderea comunităților de programatori care vor să îmbunătățească lucrurile constant, dar și deschiderea către masa critică de oameni denumită „blogosferă”. WordPress ne inspiră și, prin cele peste 60 de milioane de bloguri găzduite, ne oferă o lecție prețioasă despre puterea și valoarea comunități. Ne învață că dincolo de cod stau oamenii. Oameni care au acel… simț al comunității. Și c e î ns e am nă , totuș i, s i mțu l comunității? Simțul comunități pornește de la un framework de gândire pe care și-l setează oamenii în momentul în care decid să facă parte și să se implice într-o comunitate. Atributele unui astfel de framework de gândire? Ar putea fi: • scopul nemijlocit al comunității este evoluția (a sa și a proiectelor); • punerea în aplicare a proiectelor pot avea impact la nivel local sau global; • odată ce proiectul cu care contribui în comunitate are impact la nivel mai înalt, asemenea vor fi exigențele; • plăcerea de a finaliza un proiect; • plăcerea de a lucra împreună cu alți oameni; • un proiect „al comunității” este un proiect de care vor beneficia mai mulți oameni; • (în cazul nostru) pasiunea pentru programare;
nr. 10/Aprilie, 2013 | www.todaysoftmag.ro
Aceste principii pot contribui la creșterea comunității, la adeziunea acesteia, dar și la menținerea clară a scopurilor comunității, care să fie urmărite de fiecare membru în parte. Pe de altă parte, într-o comunitate evoluția unui proiect poate fi mai rapidă, datorită diversității expertizelor sau nivelurilor de cunoaștere. Într-o comunitate se pot face mai multe – împreună - și probabil acesta este unul din cele mai importante aspecte.
WordCamp Transylvania
În același spirit WordPress, între 1 – 2 iunie, la Cluj-Napoca, va avea loc conferința despre WordPress – WordCamp Transylvania. Pe nt r u d o u ă z i l e , Wo r d C a mp Transylvania va fi un punct de întâlnire al comunității WordPress românești – de la programatori cu experiență, studenți sau designeri pasionați de WordPress. Evenimentul mizează pe schimbul de idei dintre participanți și invitați: prima zi va fi dedicată conferinței propriu-zise, iar a doua – unui HackDay. Conferința are scopul de a aduce mai aproape de comunitatea din Transilvania (și nu numai) spiritul colaborativ specific WordPress. Inițiativa a fost aplaudată de către membri ai echipei globale WordPress din întreaga lume, dintre care – câțiva au acceptat să facă parte din eveniment. Mai multe detalii despre eveniment puteți afla accesând: http://2013.transylvania.wordcamp.org/
Cornelia Stan corneliastn@gmail.com Copywriter/Organizator WordCamp Transylvania
sponsori
powered by