Professional Documents
Culture Documents
ro
TSM
Made in Romania Istoria IT-ului Clujean
T O D A Y S O F T WA R E MAG A Z I NE
Arhitectur pentru Flexibilitate Tehnici SEO interne (II) Agile, crash course Introducere n Grails Interviu cu Scott Barber A scrie cod frumos - dincolo de valoarea estetic 10 principii de arhitectur software Poi fi agile n proiecte de pre fix? Echilibrul dintre viaa profesional i cea personal O incursiune prin atacurile informatice din 2012 Agile, crash course Gogu i imaginea de ansamblu Toate drumurile duc la SaaS - 7 provocri pentru a ajunge acolo How to Web conecteaza Europa de Sud-Est la inovatia web Finanare pentru startup-uri tech prin reeaua de investitori Tech Angels
29 Introducere n Grails
Tavi Bolog
8 Made in Romnia
Ovidiu Man
editorial
Editorial
Cteodat ne place s ne considerm foarte nendreptii, s spunem c la noi nu se ntmpl nimic, ntr-o ar mediatizat extern i mai ales intern cu o imagine negativ. mi amintesc c, odat citind un ziar de diminea n Tokyo am fost surprins s vd multitudinea de tiri pozitive fapt care m-a fcut s pornesc de diminea cu optimism i chef de lucru. Nerbdarea de a savura n acelai fel i presa romneasc ne-a determinat sa dam noi startul cu o trecere n revist a celor mai importante evenimente din sfera IT-ului romnesc. How To Web 2012, cea mai important conferin despre antreprenoriat i tehnologie din Romnia are loc la Bucureti. Vor fi peste 800 de participani i nume importante din sfera startup-urilor de succes. TSM va fi prezent la aceasta i vom avea chiar o mini lansare n cadrul evenimentului. Mai multe detalii n articolul dedicat acestuia din revist, iar n numrul urmtor vom reveni cu detalii. Next 2012, conferina organizat de Softvision la Cluj l-a avut invitat pe Scott Barber, un profesionist n testarea performanei. Un interviu cu acesta este disponibil n acest numr. Antreprenor vs. Investitori, organizat de ctre Business Days i avndu-l ca invitat principal pe Robert Hisrich, s-a desfurat la Bucureti i Cluj. Aceasta a adus n faa auditoriului principalele nume din atreprenoriatul romnesc. Alturi de Robert Hisrich am putut asista la o zi ntreag de dezbateri despre cum s i ncepi o afacere sau ce trebuie s faci ca business angel. Tech Angels www.techangels.ro este un grup business angels romnesc care vrea s sprijine startup-urile locale din sfera IT-ului. Primul pas pentru un dialog n acest sens se poate face aplicnd online. Sper ca cele de mai sus s v ajute s ncepei ziua cu o not de optimism. Pentru a fi mai convingtori, din acest numr am inaugurat o rubric Made in Romnia, unde vei putea citi despre produse i companii de software romneti de suces. Colegul meu, Marius Mornea, va ncepe s scrie o istorie a IT-ul clujean, efort ce se va ntinde pe mai multe luni, iar cei ce vor s sprijine acest efort sunt binevenii. Continum seria de articole tehnice printr-o Introducere n Grails i deja cunoscuta serie de Tehnici SEO interne. Arhitectura este subiectul principal n Arhitectur pentru flexibilitate i Exemple practice de message paterns pentru Windows Azure iar cele 10 principii de design ne prezint conceptele ntr-o abordare diferit sub forma unei fabule. Project management-ul este acoperit de ctre Poi fi agile n proiecte de pre fix? i Agile, crash course. Un articol interesant despre atacurile informatice din 2012 i poziionarea Romniei n rzboiul cibernetic, vine i cu o invitaie la DefCamp, unicul eveniment de acest gen din Romnia. Echilibrul dintre viaa profesional i cea personal reprezint o continuare a articolelor de HR scrise de ctre Andreea, iar la final vi-l propun pe Gogu pentru o lecie plin de nvminte.
Ovidiu Man
Fondator i CEO al Today Software Magazine
Lista autorilor
irina.scarlat@howtoweb.co Co-Fondator al Akcees, organizatie care promoveaza antreprenoriatul in randul tinerilor, si al Prove PR
Attila-Mihaly Balazs
dify.ltd@gmail.com Code Wrangler @ Udacity Trainer @ Tora Trading
Fondator / Editor in chief: Ovidiu Man ovidiu.matan@todaysoftmag.com Editor (startups i interviuri): Marius Mornea marius.mornea@todaysoftmag.com Graphic designer: Dan Hdru dan.hadarau@todaysoftmag.com Colaborator marketing: Ioana Fane ioana.fane@todaysoftmag.com Traductor: Cintia Damian cintia.damian@todaysoftmag.com Reviewer: Tavi Bolog tavi.bolog@todaysoftmag.com
Bogdan Iordache
bogdan.iordache@howtoweb.co Bogdan Iordache este Co-Fondator al How to Web, cel mai important eveniment web din Europa de Est
Andreea Prvu
andreea.parvu@endava.com Recruiter n cadrul Endava i trainer specializat n dezvoltarea abilitilor si competeneelor de leadership
Radu Vunvulea
Marius Mornea
marius.mornea@todaysoftmag.com Fost senior software developer in cadrul Nokia, n prezent fondatorul platformei Mintaka Research
Attila Antal
Tavi Bolog
Radu Popescu
Claudiu Anghel
Project Manager @iQuest
claudiu.anghel@iquestgroup.com
Stefan Baritchii
conferine
Irina Scarlat
irina.scarlat@howtoweb.co Irina Scarlat este Co-Fondator al Akcees, organizatie care promoveaza antreprenoriatul in randul tinerilor, si al Prove PR, companie care ofera servicii de comunicare specializate pentru startup-uri si ONG-uri. Irina a lucrat in trecut ca trainer, consultant business, si a condus timp de doi ani departamentul de comunicare al Ligii Studentilor Romani din Strainatate. Este licentiata in Economie si Afaceri Internationale (ASE Bucuresti) si are un masterat in Economie Politica obtinut la BI Norwegian School of Management si ESCP Europe. In prezent, Irina isi finalizeaza cel de al doilea masterat in Managementul Proiectelor Internationale (ASE Bucuresti)
startups
Bogdan Iordache
bogdan.iordache@howtoweb.co Bogdan Iordache este Co-Fondator al How to Web, cel mai important eveniment web din Europa de Est care abordeaza antreprenoriatul in tehnologie. Prima editie internationala a How to Web a castigat premiul IDG Cel mai bun eveniment IT&C al anului din Romania. Licentiat in automatica si calculatoare la Universitatea Politehnica din Bucuresti si absolvent al unui program DEA la Universit Lumire din Lyon, Bogdan a dezvoltat stagiipebune.ro, cel mai complex program de internshipuri in IT din Romania, si Conectoo, platforma de email marketing.
nouti
Made in Romnia
naugurm o nou rubric n revist n care vom ncerca s artm o parte din aplicaiile de succes ale companiilor autohtone. Vom vedea companii care dei de succes n exterior nu sunt foarte cunoscute pe plan local, iniiative locale pentru sprinjinirea pieei de IT locale sau produse de foarte bun calitate lansate recent.
www.exosyphen.com
Robert Murean
Q: Cteva cuvinte despre companie Robert: Momentam compania are 5 angajai permaneni. Modelul nostru este s mergem pe o echipa compact i foarte talentat. Mai exist i oamenii cu care colaborm periodic n funcie de necesiti (muzica, branding, etc). Q: Care este urmatorul produs la care v gndii s l lansai ? Robert: Momentan lucrm la un motor 3D dezvoltat in-house pentru a aduce pe pia un joc complet nou, att ca i tehnologie ct ca i gameplay. Este i primul proiect n care eu am renunat s lucrez direct. Dezvolt n paralel un motor 3D cu scopul de a testa tehnologii noi i a le integra n jocul curent. Urmeaz s publicm i nite documente despre research-ul care l facem aici.
Despre Exosyphen
Este un studio de jocuri din Cluj-Napoca. Au fost vndute pn acum aproximativ un milion de jocuri i peste zece milioane de utilizatori au folosit variantele gratuite ale acestora. Cteva din principalele lor realizri: n 2002 a lansat primul joc comercial romnsc, acesta fiind si prima versiune a simulatorului Hacker Evolution, La nceputul lui 2004 a lansat primul joc 3D pentru dispozitive mobile, o portare Quake pe Windows Mobile, n 2010 jocul Hacker Evolution a fost publicat pe STEAM si a ajuns pe locul 4 n topul vanzarilor din acea perioad. n total au fost vndute peste 200.000 de copii din aceast serie.
nouti
www.zonga.ro
Clin Biri
calin.biris@trilulilu.ro Clin Biri este Crocodilul de Marketing la Trilulilu i Preedinte al IAA Young Professionals Cluj. Pasionat fiind de mediul online i de marketing, a inut zeci de prezentri despre publicitate online i marketing, att pentru studeni ct i pentru mediul de business. Este o persoan activ n mediul online pe blogul personal www.calinbiris.ro i pe reelele sociale.
Despre Trilulilu
Trilulilu este cea mai mare comunitate online din Romania, unde vizitatorii pot urmri i contribui cu clipuri video, audio i imagini. Trilulilu a fost lansat n ianuarie 2007, fiind n prezent cel mai vizitat site romanesc de divertisment, conform SATI. n acest moment, trilulilu.ro are peste 2.2 milioane de vizitatori unici lunar.
istorie
Marius Mornea
marius.mornea@todaysoftmag.com Fost senior software developer in cadrul Nokia, n prezent fondatorul platformei Mintaka Research
10
arhitectur
Comuniti IT Cluj-Napoca
eciunea comunitate i propune s in evidena grupurilor de profesioniti relevante pentru industria IT, dar i un calendar de evenimente i ntlniri din acest sector. Pentru nceput prezentm principalele iniiative din mediul local, n timp intenionnd s cretem acest index pn ce va conine toate comunitile locale, dar i cele naionale cu prezen i activitate pe plan local. Criteriul ales pentru ordonare este numrul de membri i activitatea grupurilor concretizat n evenimente locale. Astfel obinem o ierarhie a gradul de implicare, al organizatorilor i al membrilor acestora.
Transylvania Java User Group Comunitate dedicat tehnologiilor Java. Website: http://www.transylvania-jug.org/ Data nfiinrii: 15.05.2008 / Nr. Membri: 504 / Nr. Evenimente: 39 Romanian Testing Community Comunitate dedicat QA. Website: http://www.romaniatesting.ro Data nfiinrii: 10.05.2011 / Nr. Membri: 536 / Nr. Evenimente: 1 Cluj.rb Comunitate dedicat tehnologiilor Ruby. Website: http://www.meetup.com/cluj-rb/ Data nfiinrii: 25.08.2010 / Nr. Membri: 127 / Nr. Evenimente: 30 The Cluj Napoca Agile Software Meetup Group Comunitate dedicat metodelor Agile de dezvoltare software. Website: http://www.agileworks.ro Data nfiinrii: 04.10.2010 / Nr. Membri: 249 / Nr. Evenimente: 13 Cluj Semantic WEB Meetup Comunitate dedicat tehnologiilor semantice. Website: http://www.meetup.com/Cluj-Semantic-WEB/ Data nfiinrii: 08.05.2010 / Nr. Membri: 132/ Nr. Evenimente: 19 Romanian Association for Better Software Comunitate dedicata oamenilor cu experienta din IT indiferent de tehnologie sau specializare. Website: http://www.rabs.ro Data nfiinrii: 10.02.2011 / Nr. Membri: 181/ Nr. Evenimente: 10
Calendar
Noiembrie 9
Artificial Intelligence, Computational Game Theory, and Decision Theory - Unifying paths Contact: workshop2012@rist.ro
Noiembrie 17
Noiembrie 22
Decembrie 8
Decembrie 11
Socialization Meetup Contact: http://www.meetup.com/Cluj-Semantic-WEB/ Google Technology User Group Cluj-Napoca Comunitate dedicat tehnologiilor Google. Website: http://cluj-napoca.gtug.ro/ Data nfiinrii: 10.12.2011 / Nr. Membri: 30 / Nr. Evenimente: 7
Cluj Mobile Developers Comunitatea TSM Comunitate dedicat tehnologiilor mobile. Comunitate construita in jurul revistei Today Software Magazine. Website: http://www.meetup.com/Cluj-Mobile-Developers/ Website: http://www.todaysoftmag.ro Data nfiinrii: 08.05.2011 / Nr. Membri: 54 / Nr. Evenimente: 3 Data nfiinrii: 06.02.2012 / Nr. Membri: 263 / Nr. Evenimente: 3 Meniuni: Cluj Perl Mongers (www.cluj.pm), GeekMeet Tabara de testare (http://geekmeet.ro/), ITSpark (http://itspark.ro/default.aspx), Comunitate dedicat QA. CodeCamp (http://www.codecamp.ro/), CodExpert (http:// Website: http://www.meetup.com/Tabara-de-Testare-Cluj/ www.codexpert.ro/), PHPRomania (http://www.phpromania. Data nfiinrii: 15.01.2012 / Nr. Membri: 100 / Nr. Evenimente: 7 net/), ARIES (http://www.aries.ro/)
11
arhitectur
Quality Attributes
Quality Attribute este o caracteristic sau o calitate non-funcional (n unele cazuri i funcional) a unei componente sau a sistemului. Pe scurt aceste atribute se mai numesc i ilities, pentru c n majoritatea cazurilor denumirea lor include sufixul ility: maintenability, accessibility, etc. Din pcate exist mai multe standarde pentru aceste atribute (IEEEE 1061, ISO/ IEC 9126-1) care denumesc aceeai calitate prin diferii termeni, crend astfel inelegeri diferite sau uneori confuzii. Articolul nostru va trata cazul n care cerinele din partea clientului se focuseaz pe flexibilitate cu statutul de calitate.
diferitelor domenii (dezvoltare, operational, etc.) i a proceselor (development, arhitectur, calitate, etc.). Arhitectul trebuie s vad aceste strategii prin prisma Quality Attributes i s le aib n vedere n timpul procesului de analiz de compromis.
Agile
Tiul cuitului
Majoritatea companiilor de dezvoltare software folosesc metodologii agile. Dac ne uitm la definiia acestei metodologii vom vedea ca e vorba exact depre o flexibilitate n procesul de development. Acum se poate striga sus si tare: Dar ce are de-a face asta cu arhitectura? Bine, n mod direct nu are prea multe, dar are o influen puternica fiindc flexibilitatea i rspunsul rapid la schimbri este posibil doar dac mediul de dezvoltare, structura proiectului (module), infrastructura, SCM-ul, release management-ul sunt si ele la randul lor flexibile. Toate astea sunt n legatur cu deciziile luate de un software arhitect.
In faza de fundamentare a proiectului, arhitectul software poart diferite discuii cu prile implicate (stakeholders) ca s-i clarifice ct mai bine cerintele legate de proiect. De obicei cerintele enumer diferite ilities fr a argumenta decizia. Arhitectul trebuie s fac o analiz de compromis tocmai pentru a argumenta i n aceeai timp a filtra lista de ilities. Pe de alt parte, un aspect important de considerat n procesul de decizie e legat i de strategia companiei din perspectiva
Analiz de impact
Dup ce arhitectul are lista conceptelor, strategiilor, metodologiilor care vor fi prezente in proiect i au legatur cu flexibilitatea, urmeaz o alt analiz n care flexibilitatea drept calitate se pune cap la cap cu cellalte caliti aa cum este artat n tabela Tabelul 1. Am folosit doar acele caliti care sunt cele mai des folosite extras din ultimul ITABoK de la IASA. Acele atribute care vor fi favorizate de flexibilitate vor primi un semn + i cele care
12
Arhitectura core-ului
Tabelul 1 vor fi impactate vor primi un semn -. n conceptual. Putem observa c nu toate cazul nostru putem observa cum calitiile funcionalitille pot fi extrase n plugin de Extensibilitate i de Performan sunt acestea vor rmne n core. Fiecare plugin afectate negativ de Flexibilitate. n cazul comunic cu core i unele se izoleaz comimpactului de performan sunt destule plet de alte sisteme. Aplicatia core trebuie sa msurtori prin care se pot explica riscu- aib o faad pentru fiecare plugin. Aceste rile i de multe ori acestea sunt acceptate faade pot s aib interfee i prin asta se de client . poate face public accesul la plugin. n cazul extensibilitii trebuie s avem Dup ce studiem atent Figura 2, putem documentat (i predat la client) riscul i s observm c un plugin poate s existe eventual diminuarea riscului dac structura i cerintele proiectului permit acest lucru. Tabele de genul celei de mai sus sunt atuuri foarte valoroase n analiza de Utiliti compromis i n negocierea calitilor care E de menionat faptul c acest context al trebuie s fie prezente (sau nu) n proiect. aplicaiei trebuie s aib tot timpul funcii sau utilitare de core cum ar fi de exemplu: Plugin ca i pattern arhitectural tratarea fiierelor de proprieti Diminuarea riscului fa de extensi logare central bilitate este posibil i prin alegerea unui Figura 1 auditarea diferitelor evenimente pattern arhitectural inteligent. Sistemele persistarea datelor in baza de date bazate pe plugin-uri permit extensibilitatea complet izolat (de exemplu un encoder/ manipularea tranzaciilor exact prin flexibilitatea lor, prin metoda decoder) sau poate fi folosit ca un agent Aplicaia core este i ea la randul sau un de grupare a funcionalitilor n plu- de comunicare schimbnd mesaje cu alte consumator al acestor utiliti. gin-uri. n cazul in care avem nevoie de o sisteme. funionalitate extins se schimb un plugin Avantajul la acest sistem este c anumite Orchestrare cu celalalt sau se adaug altele. funcionaliti bine plasate in pluginuri pot O foarte important funcionalitate Figura 1 arat un sistem non-flexi- fi reutilizate, moment in care arhitectul tre- a core-ului este de a orchestra comporbil, monolitic sau monolitic core la nivel buie s aib influen asupra procesului de tamentul pluginurilor. nelegem prin conceptual. O schimbare oricat de mic development. aceasta controlul de lansare sau de scoatere la oricare funcionalitate aduce dup sine Succesul la sistemele cu plugin-uri din funciune a unui plugin i manipularetestarea i relansarea intregului sistem. este n a defini foarte clar comunicarea rea diferitelor tipuri de evenimente de alte Figura 2 arat un sistem flexibil la nivel intre core i plugin-uri, a folosi plugin-uri feluri.
Cel mai important prim pas n definirea unei arhitecturi este selectarea tipurilor de comunicare. Tabelul 2 de mai jos enumer tipurile de comunicare cele mai frecvente dintr-un sistem. Rndurile evideniate cu fundal gri sunt cele care sunt binevenite n orice sistem. Trebuie s observai c orice tip de comunicare are prile ei negative i pozitive. Tocmai de aceea nu este o decizie inteligent s avem n sistem numai un singur tip de comunicare, arhitectul trebuie s decid ce alege pentru anumite pluginuri, ntrind astfel alte caliti ca securitate, performan etc.. Pentru a vizualiza ct mai bine rolul i funcia unui core, am pregtit o diagram Figura 3 care arat o aplicaie model i evideniaz sarcinile acestuia.
Communicare
Aplicatia core trebuie s aib implementate toate tipurile de comunicare care vor fi folosite in context. Este i mai bine dac arhitectul cerceteaz viitorul aplicaiei i anticipat pregtete core-ul, pentru c n felul acesta s tie i mai multe dect ceea ce solicit clientul, deoarece modificrile ulterioare n core aduc dup sine relansarea ntregii aplicaii i scoaterea ei din timpul de execuie, lucru care afecteaz businessul clientului. Figura 2
Micro-arhitectur n plugin
13
arhitectur
vzut tot timpul ca un black box. Primete stimuli i creeaz rspunsul dup funcia implementat. Fiecare plugin trebuie s aib arhitectura sa, vezi figura Figura 4. Comportamentul pluginului este monitorizat prin sistemul de orchestrare a core-ului, el are acces la utilitiile con-
Tabelul 2
Figura 4 textului aplicaiei. Plugin-ul de obicei are numai o singur metod de comunicare cu core pentru a pstra simplitatea integrrii.
Sumar
Figura 3
Scopul acestui articol a fost de a v ghida printr-un flow al deciziilor i al argumentelor prin care software arhitectul poate s sintetizeze o soluie bazat pe atributul de calitate numit flexibilitate. S-a nceput cu paralela dintre cerintele clientului proiectat n Quality Attributes i strategiile companiei. A urmat analiza de compromis prin care am observat impactul cu extensibilitate ca fiind principalul argument pentru folosirea pattern-ului de plugin. La final s-a detaliat arhitectura unui sistem bazat pe plugin-uri.
WE HIRE
IN GOOD COMPANY
PROJECT MANAGER
14
ISDC.EU/CAREERS
NOT RESOURCES.
programare
Radu Popescu
Precum cum spuneam n numerele trecute, actualizarea Panda penalizeaz chiar i site-urile care au doar cteva pagini cu un coninut slab. Pentru a nu fi afectai de acest lucru, va trebui s blocm de la indexare paginile care nu respect cerinele de calitate ale Google. Pentru a face acest lucru exist dou metode, fie folosim fiierul robots.txt n care adugm pe fiecare linie locaia relativ ctre un anumit fiier sau folder, fie adugm n fiierul vizat meta tagul robots. Diferena dintre robots.txt i meta tagul robots este aceea c fiierul nu blocheaz cu adevrat de la indexare fiierele menionate n interiorul su. Acestea sunt indexate de ctre Google, dar nu apar n cutri. Prin urmare, cea mai bun metod de a bloca indexarea unei pagini este prin meta tagul robots:
<meta name=robots content=noindex, nofollow>
HTML5 layout
Am vorbit n numerele trecute despre modul n care motoarele de cutare percep anumite tag-uri HTML, ce pentru noi oamenii par identice (bold sau strong). Spuneam atunci c diferena st n valoarea semantic pe care acestea o ofer. HTML5 vine cu o serie de tag-uri pentru organizarea coninutului. Printre cele mai folosite tag-uri semantice n contrucia unei interfee sunt: <header>, <nav> (meniu, navigare), <footer>, <section>, <article>, <aside>. Pentru a nelege mai bine modul
Cel mai indicat lucru este s folosim fiierul robots pentru a bloca foldere ntregi (de exemplu, un folder care conine fiiere de configurare sau imagini cu layout-ul sitului), iar meta tagul robots este indicat s-l folosim pentru a bloca fiiere de tip HTML. Ca s ntelegem mai bine rolul meta robots, putem observa studiul de caz realizat de Johannes Beus n care prezenta o
Figura 1
www.todaysoftmag.ro | nr. 6/2012
15
programare
Tehnici SEO interne - partea a II-a
de utilizare, n Figura 1 am creat o interfa folosind numai aceste tag-uri. Tag-urile semantice ajut la o parsare mai rapid a codului surs i ofer informaii foarte utile motoarelor de cutare despre coninut. Spre exemplu, n zonele <nav> sau <footer> se vor gsi link-uri interne care ajut la indexarea paginilor pe cnd n zona <aside> vor fi prezente unele bannere sau reclame ce nu au o importan foarte mare pentru vizitator. Anumite versiuni mai vechi ale browser-elor nu suport aceste tag-uri. Exist totui o metod prin care putem s ne bucurm de o interfa HTML5 chiar i pe Internet Explorer 6 de exemplu, adugnd urmtorul script n zona <head>:
<script> document.createElement(header); document.createElement(footer); document.createElement(article); document.createElement(section); document.createElement(nav); document.createElement(aside); </script>
ancore ct mai descriptive. Spre exemplu, dac cineva dorete s adauge un link ctre un articol foarte bun, despre neuromarketing, de pe situl nostru, i va folosi ancora aici (n contextul: un articol pe aceast tem poate s fie gsit aici) nu vor fi generate la fel de multe clickuri precum n cazul folosirii unei ancore mai descriptive de tipul efectele neuromaketingului n publicitate. Un alt lucru foarte important de tiut este c atunci cnd avem dou ancore diferite, care au acelai link, ntr-o singur pagin, conteaz doar prima dintre ele. n exemplul de mai jos, dei a doua ancor e mai descriptiv, ea nu este luat n considerare. SEOMoz.com, a realizat un experiment folosind trei domenii noi spre care a trimis cte zece link-uri externe. Pentru primul domeniu, link-urile aveau ancora click here, pentru al doilea aveau o ancora de tip exact-match (cuvnt cheie principal),
Adresa canonic reprezint acea adres care este preferat, n dauna altora care au un coninut identic. Pentru a ntelege mai bine acest concept, vom lua un exemplu: s spunem c avem o pagin care ne arat cteva laptopuri (ex. www.site.ro/laptopuri). n acelai timp, produsele de pe acea pagin se pot sorta, dup pre, de la cel mai mic la cel mai mare (ex. www.site.ro/ laptopuri?sort=price&type=asc). De asemenea se pot sorta i dup nume (ex. www. site.ro/laptopuri?sort=name&type=asc) sau dup alte criterii. Toate aceste URLuri reprezint n viziunea Google pagini diferite (care au acelai coninut). Pentru a evita indexarea tuturor acestor pagini (lucru ce poate s fie vzut ca spam) i pentru a nu mpri beneficiile link-building-ului, trebuie s avem o adres unic (canonic) i anume www.site.ro/laptopuri. Pentru a declara o adres canonic, trebuie s introducem n zona de <head> a paginii urmtorul cod:
<link rel=canonical href=http://www.site.ro/laptopuri/>
fi accesate de pe pagina principal, prin link-uri succesive. Pentru a profita la maximum de puterea link-urilor interne trebuie s inem cont de cteva lucruri eseniale: Cu orice pre trebuie evitate linkurile interne din JavaScript sau Flash, pentru c acestea nu pot s fie parsate de ctre motoarele de cutare (n foarte multe cazuri). Link-urile interne ctre pagini blocate prin meta robots sau robots. txt, trebuie s conin atributul rel=nofollow. Trebuie s ne asigurm c nu avem link-uri interne ctre o anumit pagin, doar din rezultatele unui motor de cutare intern. Google nu va executa cutri pe situri, pentru a descoperi pagini noi, ci se va baza pe link-urile interne i sitemap-ul XML despre care am vorbit n numrul trecut. Nu trebuie s abuzm de aceste lnkuri interne. Motoarele de cutare pot accesa un numr maxim de 150200 de link-uri. Prin urmare, sunt de evitat paginile de tip sitemap, pentru site-urile care au mai mult de 150 de pagini.
n primul rnd trebuie s nelegem ce este o ancor. Ancora unui link reprezint textul (pe care se poate face click) acelui link. Ea influeneaz foarte mult rata de click i ofer informaii preioase motoarelor de cutare, despre subiectul care se gsete la captul respectivului link. Este bine s evitm ancorele de tipul aici, site sau download i s folosim
De amintit aici este cazul sitului NorthPole.com, care este n acest moment pe locul 2 n rezultatele cutrii cuvantului santa. Situl a reuit aceast performan datorit numarului mare de pagini indeFigura 2 xate n Google i link-urilor interne ntre acestea. Fiecare pagin conine cateva zeci iar pentru al treilea avea mai multe ancore de link-uri ctre alte pagini de pe acelai de tip partial-match (cuvinte cheie secun- domeniu, crend astfel o retea intern dare). Rezultatele au fost surprinztoare. solid. n primele trei zile, situl care avea link-uri externe ce foloseau ancora click here a Atributul ALT detinut prima poziie n cutri. Dupa cele De foarte multe ori este trecut cu vede3 zile, acesta a disprut din SERPS i au rea faptul c i imaginile au nevoie de aprut celelalte dou pe poziiile 1 i 2. optimizare SEO. Atributul ALT este folosit n interiorul tag-ului <img> i are rolul de a Link-urile interne i rolul lor oferi informaii despre coninutul imaginii. De asemenea link-urile interne au un Din cauza faptului c motoarele de cutare rol foarte mare n SEO, nu doar cele venite parseaza codul surs i nu pot s neleag din exterior. Dac ne gndim la modul, imaginile, avem nevoie s le oferim inforstandardizat oarecum, n care sunt con- maii ct mai detaliate despre acestea. Pe struite astzi site-urile, vom observa c lng numele imaginii, atributul ALT ajut dintodeauna n partea de jos avem o mul- la indexarea i afiarea imaginilor dintr-un ime de link-uri interne. Ei bine, aceste site n rezultatele cutarilor. link-uri interne din footer au ajutat mereu Un alt rol foarte important al acesatt din punct de vedere al SEO ct i al tui atribut const n aceea c valoarea din usability. Ele creeaz o ierarhie a paginilor interiorul su este afiat n cazul n care nu din site i transmit o parte din autoritatea se va putea afia imaginea din cauza unor acestora (link juice) celor apropiate. probleme din cod sau a unei surse greite. Trebuie s ne asigurm c nu exist Atributul ALT este foarte util i n cazul pagini (pe care le vrem indexate) ce nu pot celor care folosesc browsere text-based,
16
programare
ei neputnd vizualiza imagini. Adugarea unei descrieri a imaginii n atributul ALT iar nu a unor niruiri de cuvinte cheie va avea cele mai bune rezultate. Pe lng acest lucru, este recomandat ca imaginile s aib un nume descriptiv, iar cuvintele din el s fie desprite prin cratim. Un exemplu foarte bun, este al sitului Jeromes.com care comercializeaz mobilier. Lipsa unui coninut cuprinztor i interesant, de tip text, a fcut ca situl s nu prezinte un interes foarte mare pentru motoarele de cutare. Nu exista destul coninut pentru a putea fi relevant n cutri. Partea bun este c avea foarte multe imagini. Prin adaugarea atribulului ALT imaginilor, au reuit s creasc traficul organic. Au avut o cretere de 1400% a traficului venit pe pe Google Images.
Concluzii
Tehnicile de SEO intern stau n mna proprietarului sitului. Prin urmare ele sunt de multe ori trecute cu vederea. Trebuie s ntelegem c n optimizarea pentru motoarele de cutare, fiecare aciune, orict de mic, poate influena rank-ul. Este imposibil s influenm unele elemente externe, precum vrsta domeniului sau factorul de ncredere astfel nct s avem rezultate bune ntr-un timp relativ scurt. n acelai timp ne este foarte uor s folosim tehnicile SEO interne, asupra crora avem control pentru a crete poziia n SERPS. Nu trebuie s uitm c algoritmii motoarelor de cutare sunt ntr-o continu schimbare. Google este atent la fiecare micare a noastr n online i vede modul cum folosim aceste tehnici de optimizare. De multe ori, anumite persoane le folosesc ntr-un mod abuziv, iar motoarele de cutare ajusteaz algoritmii pentru a nu le ma oferi beneficii. Din pcate, acest lucru nsemn c nu ne vor mai oferi beneficii pentru motoarele de cutare necesit o nici nou, celor care folosim SEO ntr-un atenie constant i o munc susinut. mod corect. Din aceast cauz, optimizarea
17
diverse
Stefan Baritchii
CE NSEAMN... o zebr?
zebr i de ce este ea necesar. ) Btrnul satului era un guru i un guru cunoate totul. Gndete-te la un guru ca la o versiune mbuntit a lui Chuck Norris. El este singurul din sat care stie cum arat o zebr. De asemenea, el tie ct iarb va mnca o zebr. Zebrelor le place iarba, prin urmare sunt foarte lacome cnd vine vorba despre asta. Un guru tie cte zebre trebuie s vad lumina zilei, care sunt primele care trebuie concepute, i ce e mai important pentru aceast seciune cum arat o zebr.
La o astfel de ntrebare vei primi rspunsuri de genul: este un animal colorat n alb i negru. Dar pentru daltonisti, de exemplu, acest rspuns nu este suficient. Chiar i o parte din cei care nu sunt daltoniti i-ar putea imagina c trebuie s fac un panda. Cnd guru a auzit chestia asta i-a reformulat rspunsul: n nici un caz. Panda e panda i zebra e zebr. O zebr trebuie s arate mai mult a... cal, un cal dungat n alb i negru. Dar de aici au aprut alte ntrebari: Ce nseamn o dung?, Ce inseamna alb?, Ce inseamna negru?... si pentru numele lui Dumnezeu, CE E UN CAL? Presupunnd c la un moment dat sumerienii au (re?-)inventat scrisul, toate rspunsurile au fost consemnate n ceva numit document de specificare funcional. Un document de specificare functional conine rspunsurile care definesc entitile proiectului i trebuie explicate n aa fel nct s fie nelese de toat lumea din echipa de proiect. i tocmai cnd toi credeau c au un document de specificare funcional complet, cineva a ntrebat:
18
management
n caz c v punei problema: da, este o ntrebare foarte pertinent care ar trebui s-i gseasc rspunsul ntr-un document de specificare funcional. Avnd rspunsul la aceast ntrebare, viaa zebrei are un scop. Zebra va ti ce problem rezolv i cum se ncadreaz n slbticie (vei auzi mai des termenul de context). tiind care este problema, vom putea refolosi aceeai soluie n caz c apare o problema asemntoare, sau cel putin ne putem inspira. i totui documentul nu este complet fr o idee despre performanele zebrei:
nainte s te gndeti c zebra ar trebui s aib un singur picior, gndete-te c trebuie s fie n stare s scape de lei. Intrebarea este: ct de rapid vrei s fug zebra? ( Care sunt premisele pentru a construi un soft n aa fel nct s i ating performanele? Rspunsul la aceast ntrebare TREBUIE s fie ntr-un document de specificare funcional, pentru c n viaa real exist i clieni care semneaz SLA Service Level Agrrement iar dac performana nu este considerat a fi parte din design, poate costa mult mai mult clientul dup ce produsul este gata ). 2. i pentru c i-au zis zebr, i pentru c fiecare iubea numele att de mult dndui seama imediat la ce se refer ceilali cnd spun acest nume, au decis c numele semnificative joac un rol important. ( n aceast seciune vorbim despre
variabile, atribute, nume de clase, nume de pachete, nume de servicii i nume de metode care corespund comportamentului unei zebre. ) Cnd te gndeti la un nume pentru ceva, trebuie s te gndeti la cum ai descrie acel ceva ntr-un singur cuvnt. Doar att. Daca cineva arat un animal dungat i te intreab: Ce este asta? vei raspunde: este o zebr. Este att de intuitiv c doar un singur cuvnt ii vine n minte. Este att de intuitiv nct cel care te-a ntrebat se gndeste exact la acelai cuvnt fr s-i zic. Aadar, cnd alegi un nume ncearc urmatorul joc: ntreaba pe cineva Ce este chestia asta? i gndete-te la un cuvnt care descrie acel lucru. Dac rspundei amndoi acelai cuvnt (sau dac nu te gndeai chiar la acelai cuvnt, dar versiunea ceiluilalt pare mai bun i triezi puin zicnd c te-ai gndit totui la cuvntul lui), atunci acela este numele pe care il caui! Jocul asta poate fi aplicat la variabile, atribute, clase sau nume de pachete. Lucrurilor ce corespund unei aciuni le asociem alt intrebare. Un nume de metod este o aciune i prin urmare cnd vorbeti despre zebre te ntrebi: Ce fac zebrele? iar raspunsul poate fi: alearg, halesc, seJoac, morDeFoame, sePlictisesc... Toate verbele scrise inclinat sunt nume de metode valide. (evident, clienii vor aprecia foarte mult dac scriei aceste rspunsuri n englez. i foarte probabil ca i colegii vostri.). Cnd este vorba de servicii aplicai aceleai reguli. Un serviciu este de fapt o clas care i expune aciunile prin metode. Ce intrebri pui pentru a stabili numele atunci
cnd vrei faci un serviciu i aciunile lui aferente? 3. i pentru c oamenii erau att de dornici s ajute s creeze o zebr, au decis s pstreze lucrurile simple i clare pentru a realiza rapid ceea ce voiau. (n aceast seciune se povestete despre metode mari, clase mari, liste lungi de parametri care ii pot consuma timp preios ce altfel ar fi folosit n a-i ajuta pe ceilali s creeze o zebr)
Dei cei care au creat zebrele se gndeau acum la ei nii ca la niste zei, ei nu erau totui nemuritori (mai mult, unii dintre ei aveau i neveste acas). Aveau o via finit, deci nu puteau s i-o iroseasc citind o metod lung, sau un miliard de linii de descriere a unei clase. Prin urmare au decis s in totul simplu i clar pentru a salva timp i pentru c atunci cnd cineva intra n echipa lor de construit zebre folosea mai puin timp s nteleag ce fcuser deja, i pe unde se aflau cu proiectul. Ei... dar ce se ntmpl dac, totui,
19
diverse
10 principii de design (fabul)
o chestie devine prea mare? Nu ezita s o spargi n mai multe buci. Cnd faci acest lucru consider doar faptul c ai putea s o utilizezi n alt parte i de asemenea consider impactul pe care l are asupra performanei. 4. i pentru c doreau s disting o zebr de celelalte, atunci creatorii ei au decis c nu ar trebui s aib duplicate*. (n aceast seciune vom vorbi despre evitarea functionalitilor duplicate sau proiectarea n vederea evitarea duplicrii codului)
la un virus de care industria farmaceutic nu profit atunci cnd apare. Prin urmare suntem sub presiune (industria farmaceutic nefiind interesat, suntem pe cont propriu). Dar stai! Nu numai zebra ta e bolnav, dar toate zebrele care arat la fel au acelai virus. nspimntatoare imagine atunci cnd vezi un cmp plin de zebre, nu? Codul fiind scris de oameni este predispus la erori. Prin duplicarea codului se duplic i erorile. Avnd dou sau mai multe buci de cod care arat la fel vom avea implicit parte de o ntreinere dificil, anevoioas. De asemenea, timpul de testare crete foarte mult cnd testezi soft care face acelai lucru, dar folosete cod diferit. Pentru a ocoli comarul gndete codul n aa fel nct s fie refolosibil; i bineneles refolosete-l oricnd este cazul, n loc s-l duplici; *Aceast seciune a fost scris n memoria oiei Dolly ( 5 Iulie 1996 14 Februarie 2003 ) 5. i pentru c ei credeau la un moment dat c zebra ar trebui s se joace cu toata lumea s-au gndit s evite tight coupling. ( n aceast seciune se povestete cum s separi interfaa de implementare, cum s scrii codul unui serviciu, fie el web/rest/jms, unde este cazul i de asemenea ce au toate lucrurile astea de a face cu o zebr )
Cu totii tim cum cnt Rihanna. Dac vreodat o zebr ar ncerca sa cnte precum Rihanna restul turmei va nnebuni instant. Deci dac chiar vrei cu adevarat ca s nu i se intample turmei aa ceva, las-o pe Rihanna s cnte i pe zebr s fac playback. Cum ar trebui s implementm? E timpul s te pregatesti pentru cteva rnduri plictisitoare despre programare. Putem avea o interfa numit Singer care are o metod sing. Rihanna este o clas care implementeaz (binior) metoda sing. Relaia este: Rihanna is a Singer (Rihanna este o cntrea). Zebra va avea (has a) caracteristica de Singer (o relaie has a nseamn definirea unui atribut de acel tip n cadrul clasei Zebra). Pentru a ne distra puin vom aduga metoda lipSync() care va apela n metoda Singer.sing() (n cazul nostru cntreul va fi Rihanna). Dup cum observai zebra nu va cnta deloc. Va delega doar cntatul cuiva care este capabil de aa ceva. Dar din punct de vedere al unui observator extern, care se uit la zebr, va vedea c zebra cnt. Te gndesti ce avantaje ai obine cu aa ceva? La un moment dat Rihanna se va ndrgosti de vreun blogger i se va opri din cntat. Atunci, zebra ta va putea face playback la atlceva (de exemplu Sepultura), fr ca cineva s fie afectat. va urma
A ti care este zebra ta dintr-o turm de zebre este un lucru destul de complicat. Acum s ne imaginm c cineva ii zice ca zebra ta are un virus cruia nu i s-a prea facut marketing, i ea trebuie vindecat ct de curnd posibil deoarece acel virus se rspndete rapid i afecteaz ntreaga turm. Dac te ntrebi ce e un virus cruia nu i s-a prea facut marketing, gndete-te
20
interviu
foto: Scott Barber Q: Care unelte le considerai mai bune, crile sau uneltele software care automatizeaz munca? Wow! Vreau s v zic c sunt nc ataat de unele lucruri tradiionale, fie c sunt cri sau altceva, dar sunt n acelai timp un geek i mi plac i uneltele software, aa c de cele mai multe ori depinde de scopul n care le folosesc. [..] Dar ce mi place cel mai mult este s am de unde alege. Q: Ai anumite instrumente pentru a nva zilnic, surse de informaii gen reviste etc. ? Dei de multe ori oamenii consider blog-urile, doar opinii personale, n lumea testerilor, n care nu exist un manual de utilizare sau diplome de facultate specializat [..] gseti aceeai informaie din revistele de specialitate pe blogul autorilor, mult mai repede. Important este s nvai de la ei, dar privii informaia ca un tester: cum s-au gndit la asta? i cum o aplic eu n cazul meu? O alt soluie foarte bun e ncercnd s nvei pe altcineva nvei singur, aa c opiunea numrul unu pentru mine este s i nv pe alii. Q: Tot la capitolul instrumente, care sunt instrumentele cele mai folosite n rutina zilnic? Aaaahh! Ca s fiu sincer, cele pe care le folosesc cel mai des sunt cele gratuite, open source sau care au o perioad de ncercare suficient de lung. Prin urmare sunt ataat de JMeter, OpenSTA, i n ultima vreme de unealta cloud SOASTA,
www.todaysoftmag.ro | nr. 6/2012
21
interviu
Interviu cu Scott Barber
pentru c au o versiune gratuit suficient de robust pentru a putea face testare real de performan. Acestea fiind zise, unele din cele mai scumpe unelte sunt foarte foarte puternice i mi plac, dar nu mi le permit, aa c depind de clieni s le pot folosi. Dar sunt distractiv de folosit, mai ales cnd altcineva le-a cumprat. Q: La capitolul procese, cum se poate compara testarea n metodologia agile (eng. agil) cu varianta waterfall (eng. cascad)? Cnd a aprut manifestul agile mi-am ntrebat colegii: nu toat lumea lucreaz aa deja? Iar ei au rspuns: cel puin noi aa lucrm. Ani mai trziu cnd am intrat n contact cu companii care nc foloseau waterfall mi-am pus ntrebarea: cum poate cineva s fac metodologia asta s funcioneze?Testarea performanei este n mod inerent agil, iar prin asta vreau s spun c nu poi fii cu adevrat eficient n a furniza, cel puin consistent, aplicaii performante, dac nu faci o minim testare de performan chiar de la nceput. Asta nu nseamn c tot timpul aceasta este fcut de tester, i asta poate crea confuzie, pentru c exist o diferen ntre activiti i roluri. Ceea ce s-a schimbat ns, este c cu cat mai multe companii i echipe lucreaz la adoptarea principiilor agile, cu att mai uor este pentru mine s transmit mesajul c responsabilitatea performanei este mprit i de dezvoltatori i de administratori i de cei de la suport. Trebuie ca toate bucile s se potriveasc i dac nu mprtim informaiile i nu lucrm mpreun, atunci suntem n cazul tradiional waterfall n care testerul furnizeaz mult informaie cnd nu mai este timp pentru reparaii. Iar repararea problemelor de performan este de cele mai multe ori scump, implicnd achiziii hardware i refacerea arhitecturilor. Cu ct integrm performana n activitile agile zilnice, cu att mai capabili vom fi s livrm aplicaii performante consistent i cu att mai fericii vor fii utilizatorii. Q: Poi s alctuieti un top 3 buzzwords (eng. cuvinte la mod), din ultimii ani? Subiecte mari care trezesc pasiuni i polarizeaz lumea n ultimii 4-5 ani ar fi certificarea, automatizarea i.. probabil agile, dar doar pentru c implic o schimbare de cultur organizaional. Dup ani de waterfall [..] la schimbare, testerii nu i mai gsesc locul, o vreme, i asta cauzeaz stres [..] ns muli, odat ce se integreaz le place mult agile. Automatizarea a fost un subiect fierbinte pentru c mult lume crede c prin ea putem nlocui testerul uman. Dar adevrul este c automatizarea poate face foarte multe lucruri i mie mi place s automatizez, dar nc nu am ntlnit o bucat de software care s poat lua decizii i s gseasc erori la fel de bine ca un om instruit. Cu alte cuvinte nu poi nlocui, dar poi mbunti, poi ajuta un tester uman s testeze mai bine, mai rapid, s acopere mai mult, dar nu poi nlocui oamenii cu unelte automate. Iar provocarea cu certificatele este c sunt multe i este greu de neles ce nseamn fiecare. Managerii de recrutare vd certificrile, dar nu neleg ce nseamn. Q: Poi s ne dai exemple de realizri cu care te mndreti? Ceea ce e interesant este definiia realizrii majoritatea oamenilor cred c voi vorbi de rularea unui test grozav, gsirea unui bug important sau oprirea livrrii unui produs, cu probleme, care putea provoca prejudicii de milioane de dolari. Da! sunt realizri, dar se ntmpl odat, cndva, poate am avut noroc, poate sunt bun, nu conteaz, pur i simplu s-au ntmplat. n schimb pentru mine o realizare e cnd ajut o persoan sau o organizaie s li se aprind un becule, s aib o idee sau s i schimbe modul de gndire i perspectiva n aa fel nct s i conduc la succes, mult dup ce am plecat. De multe ori nu aflu de asta dect dup ani. Un mic exemplu: odat, dup doar 90 de minute la un client, tiam care era problema, la fiecare 10 minute un alt vicepreedinte intra i le ddea altceva de lucru. Iar aceti VP nu vorbeau ntre ei. Soluia a fost s m aez cu scaunul n u i s i in de vorb de fiecare dat cnd apreau. Dup doar 3 zile aveau rezultate excelente, iar eu nu m-am atins de nimic. Bineneles c la plecarea mea lucrurile au revenit la problema iniial, dar eful echipei mi-a zis c ntre timp nu mai lucreaz la ei i c are acum propria echip, cu care aplic aceeai reet i lucrurile merg de minune. Cnd am auzit asta am fost att de mndru, un lucru att de simplu i prostu, care nu are nimic de a face cu testarea performanei, dar care poate face o diferen att de mare.
Q: Poi s ne zici care ar fi diferenele ntre metodologiile de testare a dispozitivelor desktop, server i mobile? Iat ce am nvat eu: testarea e ceva ce devine o parte din tine, iar dac eti bun la testat, nu mai conteaz ce anume testezi. O s ii dai seama cum s faci fiecare lucru, cnd ai nevoie de o unealt de automatizare, cnd s testezi manual, cnd ai nevoie de ajutor de la un programator, cnd s o faci mai devreme sau mai trziu sau la mijloc, pentru c nu astea sunt cele mai importante pentru un tester. Ceea ce e important este s nvei cum funcioneaz sau cum ar trebui s funcioneze i apoi s gseti toate felurile n care nu merge cum ar trebui s mearg. tii ceva? .. eu testez totul. Testez frigiderul, testez paharele, mai devreme m jucam cu dopul de la sticl, de ce? Pentru c nu m pot abine. Unii zic c aa sunt eu Scott. Dar eu urmresc oamenii care au instinctul de tester i toi fac asta tot timpul, fr s in de metodologie. Metodologiile difer ca implementare, dar nu ca i proces de gndire. Q: Ai recomandat participanilor s strice din cnd n cnd cte ceva n ncercarea de a nva ceva nou. Ai putea s ne dai exemple n care ai stricat i tu ceva? Eram la al doilea proiect, [..] primul a fost 6 sptmni de training i al doilea 8 sptmni ca i ef de testare pe un proiect n valoare de mai multe milioane de dolari [..] pe vremea cnd 150 de utilizatori ntr-o or erau muli. Testam la client [..] cu 53 de hopuri de reea ntre cele dou maini fizice aflate una lng alta, aa c m-am mutat la biroul propriu de peste drum. Am primit un mail care zicea s urc ncrcarea la 500 de utilizatori, iar eu am refuzat zicnd c nu e o idee bun. Atunci mi s-a spus c au trebuit s conving un ef mare s cumpere o licen de 500 de utilizatori i au nevoie de asta. Am zis c tot nu cred c e o idee bun, dar am totul n email aa c am dat drumu la test i am plecat la un prnz de 3 ore. [..] La ntoarcere, monitorul plin de notie lipite: vino s m vezi! de la managerul meu; vino s m vezi, te rog! de la director; vino s m vezi acum! de la CTO; vino la mine n birou cnd te ntorci! de la
22
Q: n ncheiere poi s ne dai o definiie ct mai concis a performanei? Cnd zic performan, m refer la tot ce ine de viteza, scalabilitatea i stabilitatea unui sistem de interes. Exist multe alte definiii, dar la finalul zilei eu o folosesc pe mama ca i model. La Microsoft le zice persona. Mama mea e persona mea, iar ei nu ii pas ci oameni sunt pe site, ce servicii sunt czute, nimic de genul acesta. Tot ce tie ea e c uneori merge cum mergea nainte, alteori nu. Eu vreau ca mama s aib tot timpul aceeai experien, i ar fi chiar mai bine ca aceasta s fie o experien bun de fiecare dat. Aadar cnd m gndesc la mama stnd n faa calculatorului i la experiena ei, presupunnd c funcionalitatea e ok, pentru Q: Care ar fi cele mai importante c funcionalitatea nu ine de performan, 5 abiliti din profilul unui tester de asta e performana, iar cuvintele pe care performan? le folosesc sunt vitez, scalabilitate i Doar 5? Glumesc. Mai demult glu- stabilitate. meam c trebuie s fii nivel mediu n toate, iar apoi c trebuie s fii ca i cei din CSI Las Vegas, adic expert n toate. Dar pe primul loc este s tii cum s abordezi o problem. Vreau s neleag cum s rezolve problema, cum s caute cauzele, indiferent c Marius Mornea marius.mornea@todaysoftmag.com e vorba de o problem de performan sau de business. Vreau s tie cnd e nevoie Fost senior software developer de un pas n spate, s arunce o privire de in cadrul Nokia, n prezent ansamblu, iar apoi s i dea seama unde fondatorul platformei Mintaka Research trebuie s intre iar n detalii. Vreau oameni buni la rezolvarea problemelor. Apoi vreau
www.todaysoftmag.ro | nr. 6/2012
23
programare
imbajele de programare cele mai cunoscute conin o mulime de funcionaliti i librarii standard. Din acest motiv devine important s tim rspunsul nu doar la ntrebarea cum se face ceva (ntrebare la care exist de obicei o multitudine de rspunsuri), dar i la care este calea recomandat?. n acest articol vom ncerca sa demonstrm c prin cunoaterea i aplicarea practicilor recomandate pentru scrierea codului surs (en. best practices) rezult att programe mai scurte (mai uor de scris), mai uor de citit, mai usor de neles i meninut, dar i programe corecte. Acest articol necesit un minim de cunotine Java pentru a putea fi savurat, dar ideea de baz este general aplicabil: cunoaterea unui limbaj de programare implic mai mult dect nvarea sintaxei. ne surprind: primul exemplu afieaz false iar ce cel de-al doilea afieaz true. Ce se ntmpl? Motivul tehnic pentru acest rezultat este faptul c valorile de tip virgul mobil (en. floating point) sunt stocate de ctre Java (i multe alte limbaje de programare) folosind notaia semni-magnitudine (en. sign and magnitude) definite n standardul IEEE 754. Din cauza acestui detaliu tehnic att plus zero ct i minus zero pot fi reprezentate n variabile de acest tip, iar metoda equals pe obiectele Double (sau Float) din Java consider c aceste valori sunt diferite. Am fi putut evita aceast problem n ntregime prin utilizarea valorilor primitive aa cum s-a artat n al doilea fragment de cod i cum este sugerat n capitolul 49 din Effective Java : Prefer primitive types to boxed primitives. Alte motive pentru utilizarea tipurilor primitive ar fi: eficien din punctul de vedere al memoriei consumate i evitarea definirii cazurilor speciale pentru referina nul (null reference). Avem o situaie similar cu clasa BigDecimal la care valorile scalate n mod diferit nu sunt considerate egale de metoda equals. De exemplu i urmtorul fragment afieaz false:
BigDecimal d1 = new BigDeci-
Attila-Mihaly Balazs
dify.ltd@gmail.com Code Wrangler @ Udacity Trainer @ Tora Trading
Double d1 = (5.0d - 5.0d) * 1.0d; Double d2 = (5.0d - 5.0d) * -1.0d; System.out.println(d1.equals(d2)); double d1 = (5.0d - 5.0d) * 1.0d; double d2 = (5.0d - 5.0d) * -1.0d; System.out.println(d1 == d2);
Rspunsul pare s fie clar: n ambele cazuri nmulim zero cu diferite valori (plus i minus unu) iar rezultatul este tot zero; dac am compara rezultatele, ele ar trebui s fie egale, indiferent de metoda de comparaie utilizat (apelarea metodei equals pe obiecte sau folosind operatorul de egalitate pe valorile primitive). ns rezultatul execuiei s-ar putea s
24
management
Soluia n acest caz (avnd n vedere faptul c nu exist un tip primitiv echivalent pentru aceast clas) ar fi s se utilizeze (n locul metodei equals) metoda compareTo i compararea valorii ntoarse cu zero (o metod care poate fi, de asemenea, folosit pentru a rezolva problema n cazul claselor Double/Float dac nu suntem ngrijorai de valorile nule).
Putem spune c ele sunt echivalente din moment ce o colecie goal conine zero elemente. Cu toate acestea, a doua condiie este mai uor de neles (aproape ca o putem citi cu voce tare: if items is empty then ...). i are nc un avantaj: n unele cazuri poate fi mult, mult mai rapid. Dou exemple din biblioteca standard Java unde timpul necesar pentru a executa size crete liniar cu numrul de elemente din colecie n timp ce isEmpty se execut n timp constant: ConcurrentLinkedQueue i vederile (views) ntoarse de metodele headSet/tailSet din clasa TreeSet . Acesta este nc un exemplu n care codul mai frumos este i mai rapid.
La prima vedere am spune: null, deoarece condiia este adevrat i v are valoarea null (null poate fi atribuit oricrei referine, indiferent de tipul ei, deci codul este corect). Dac rulm codul, rezultatul este un NullPointerException la linia a doua. Acest lucru se datoreaz faptului c tipul expresiei din partea dreapt a atribuirii este de fapt double (tip primitiv) nu Double (tip boxed) cum ne-am atepta, care este transformat n Double de compilator (prin auto-boxing). Codul generat de compilator arat astfel: Acest comportament este specificat n Java Language Specification :
Double d = Double.valueOf(true ? v.doubleValue() : 0.0d);
aceeai ordine de idei trebuie s ne ferim de pattern-ul Singleton care pe lng problemele poteniale de iniializare face codul mai greu de testat. Tot aici trebuie sa menionm c folosirea claselor statice interioare (static inner classes) este de preferat (capitolul 22 n EJ2nd). Clasele statice n Java sunt distincte conceptual de cmpurile statice i este regretabil faptul c acelai cuvnt a fost folosit pentru a descrie amndou conceptele. De asemenea, este foarte recomandat s rulm unelte de analiz static (static analysis tools) pe codul nostru i s verificm frecvent rezultatul lor (n mod ideal la fiecare schimbare de cod). De exemExemplul 4: Atenie la folosirea lui static! plu, problema prezentat este detectat Ce afieaz urmtorul fragment de cod? de Findbugs i uneltele care ncorporeaz public final class Test { Findbugs.
private static final class Foo { static final Foo INSTANCE = new Foo(); // 2 static final String NAME = Foo.class.getName(); // 3 Foo() { System.err.println( Hello, my name is + NAME); } } public static void main( String[] args) { System.err.println( Your name is what?\n+ Your name is who?\n); } new Foo(); // 1 }
Rezultatul este
Dac unul dintre operanzii doi i trei Valoare nul (probabil) neateptat se este de tip T primitiv, i tipul cellalt este afieaz pentru c obinem o referin ctre rezultatul aplicrii operaiei de auto-boxing un obiect parial construit: ( 5.1.7) la T, atunci tipul expresiei ter ncepem s crem o instan a clasei nare este T. Cred c nu muli dintre noi Foo la punctul 1; au parcurs JLS-ul complet i chiar dac Aceasta fiind prima referire la clasa am fi parcurs, nu am fi realizat implicaiFoo, JVM-ul o ncarc i ncepe s-o ile subtile ale fiecrei fraze. Recomandarea iniializeze; din EJ2nd de la exemplul anterior ne ajut Iniializarea clasei Foo implic iniidin nou: s folosim tipuri primitive. De alizarea tuturor cmpurilor statice; asemenea, putem face o paralel cu capi Pentru iniializarea primului cmp tolul 43 din carte: Return empty arrays or static trebuie apelat constructorul de collections, not nulls. Dac am fi folosit un la punctul 2, ceea ce se i ntmpl; element neutru (analogul folosirii tabe n acest moment cmpul static lelor/coleciilor goale) problema nu ar fi NAME nu este nc iniializat i astaprut. (Elementul neutru ar fi 0.0d dac fel constructorul va afia null. nsumm sau 1.0d dac nmulim). Acest cod demonstreaz cum cmpuExemplul 3: Un vas gol rile statice pot fi dificil de folosit n mod Care este diferena dintre urmtoarele corect i c nu ar trebui s le utilizm dect dou expresii condiionale? la declararea constantelor (i chiar i atunci Collection<V> items; s ne gndim dac nu este mai bine s foloif (items.size() == 0) { ... } if (items.isEmpty()) { ... } sim un Enum in locul constantelor). n
Problemele ar fi: Tipul de container folosit este greit. Se dorete ca fiecare ir s fie prezent cel mult o dat, ceea ce sugereaz utilizarea unui Set<> care rezult n cod mai scurt i mai rapid (timpul de execuie al metodei de mai sus depinde n mod liniar de numrul de elemente); Nu sunt folosite adnotrile de tip (generics); Codul folosete metode sincronizate n mod inutil dac accesul la structur se face doar de pe un singur fir de execuie (thread); n cazul n care structura este utilizat de mai multe fire de execuie, codul nu este thread-safe, numai exception safe (nicio excepie nu va fi aruncat, dar structura de date poate deveni corupt, fapt care poate duce la probleme greu de diagnosticat). Toate acestea pot fi evitate prin abandonarea clasei Vector i fraii si (Hashtable, StringBuffer) i folosind Java Collections Framework (disponibil de 14 de ani ) cu adnotrile de tip (disponibile de 8 ani ).
25
programare
A scrie cod frumos - dincolo de valoarea estetic
Concluzie
Concluziile sunt valabile i pentru alte Aceste exemple nu sunt singulare. limbaje de programare: Cunoaterea unui limbaj de programare ncercai s citii despre modul cel nseamn mai mult dect stpnirea sintamai bun (best practices) / moduri xei la un nivel de baz. Dac utilizai Java: idiomatice (idiomatic) de a scrie cod facei-v rost de cte o copie din Effective n limbajul dat. De exemplu, cea mai Java, 2nd edition i Java Puzzlers: Traps, bun carte pentru Perl n momentul Pitfalls, and Corner Cases i parcurgeide fa este Modern Perl , scris de le, dac nu ai fcut deja acest lucru. De chromatic i disponibil gratuit. asemenea, utilizai analiza static (static Verificai dac exist o unealt de analysis/linting) pe codul surs (Sonar este analiz static (static analysis / lino alegere bun n acest domeniu) i rezolter) de bun calitate pentru limbajul vai problemele semnalate de aceasta sau respectiv. De exemplu pentru Perl cel puin citii atent descrierile lor. exist Perl::Critic , pentru Python
pep8 i pylint , toate acestea fiind gratuite i open-source. A fi un un bun programator este un proces de nvare continu, iar resursele enumerate mai sus pot fi instrumente care s ne ajute s nvm cu adevrat un limbaj de programare.
Bibliografie
Joshua Bloch: Effective Java, Second Edition. ISBN: 0321356683 http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html # JLS-15.25 http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html # Dimensiune () http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html http://findbugs.sourceforge.net/bugDescriptions.html # SI_INSTANCE_BEFORE_FINALS_ASSIGNED http://en.wikipedia.org/wiki/Java_version_history # J2SE_1.2_.28December_8.2C_1998.29 http://en.wikipedia.org/wiki/Java_version_history # J2SE_5.0_.28September_30.2C_2004.29 http://www.sonarsource.org/ http://www.onyxneon.com/books/modern_perl/index.html http://search.cpan.org/ ~ thaljef/Perl-Critic-1.118/lib/Perl/Critic.pm http://pypi.python.org/pypi/pep8 http://pypi.python.org/pypi/pylint
26
management
ompania de cercetare Forrester indic faptul c pn n 2020 piaa global de cloud computing va ajunge la valoarea de 160 de miliarde de dolari, 83% fiind reprezentat de soluiile SaaS. Indiferent de acurateea previziunilor, un lucru este sigur SaaS va avea un impact major asupra companiilor ISV ce-i bazeaz veniturile pe vnzarea de licene.
Lumea se schimb
Mihai Nad mihai.nadas@tss-yonder.com CTO @ Yonder este responsabil de activitile R&D i creterea nivelului de inovaie al produselor partenerilor Yonder.
Ne aflm la trecerea dintre dou paradigme de monetizare a produselor software. Prima este cea bazat pe vnzarea de licene care a ajutat n ultimele decenii companii precum Microsoft s ajung la cea mai mare valoare de pia nregistrat vreodat de o companie public, i anume 618,9 miliarde de dolari, record nregistrat pe data de 30 decembrie 1999. n acest caz, putem discuta n esen de un model prin care produsul software este cumprat de ctre beneficiar, acesta pltind contravalorea sa nmulit cu numrul de licene achiziionate. Convergena internetului cu tehnologia de virtualizare i scderea preului puterii de calcul ne-a druit ceea ce numim acum sub o form sau alta cloud computing un stil nou de a consuma servicii computaionale i de persisten de date. Odat cu aceasta s-a nscut i conceptul de nchiriere de produse software sau Software as a Service (SaaS), model n care beneficiarul achit contravaloarea utilizrii produsului ca serviciu pe baza unui abonament a crui valoare variaz n funcie de numrul de utilizatori finali. Evident, nimic nou sub soare, ns dac privim ctre graficele ce pot fi determinate pe baza studiului Forrester se observ un
lucru interesant curba de cretere anual absolut prinde contur ncepnd cu 2012, culminnd n 2014 cnd piaa ar urma s se mreasc cu 63,19 miliarde de dolari. n termeni practici, aceasta nseamn un singur lucru adopia de soluii SaaS va cunoate cea mai accelerat cretere n urmtorii doi ani, iar aceasta se coreleaz cu scderea pieei de liceniere a produselor software, reprezentnd un aspect ce trebuie s determine companiile ISV s-i pun n execuie strategia legat de SaaS, n cazul n care au una. Exact Software, unul dintre cei mai mari ISV din Olanda, a nregistrat n 2011 o scdere a veniturilor obinute din vnzarea de software cu 13% n Benelux n timp ce soluia bazat pe SaaS a crescut cu 46%, aducnd venituri de 11,6 milioane de euro fa de 7,9 milioane n 2010. Aceeai situaie o regsim i n cazul UNIT4, un alt ISV olandez, care a mizat timpuriu pe SaaS i acum beneficieaz de venituri de peste 9 milioane de dolari din acea soluie.
Dincolo de statistici
Potenialul de a adresa piee noi, avantajul unui venit mai uor de preconizat, cel al costurilor reduse de suport i mentenan
www.todaysoftmag.ro | nr. 6/2012
27
management
Toate drumurile duc la SaaS - 7 provocari n a ajunge acolo
corelate cu oportunitatea de a cunoate mai multe despre comportamentul de utilizare ai propriilor clieni fac din SaaS o perspectiv mai mult dect interesant pentru companiile ISV. Privind obiectiv, companiile ISV au dou motive de a adopta o strategie SaaS: creterea business-ului curent i protejarea acestuia. Google a vzut o oportunitate de cretere n momentul n care a introdus Google Apps, o soluie SaaS ce atac piaa tradiional Microsoft Office. Microsoft pe de alt parte, a reacionat introducnd suita Office 365, o alternativ la propria soluie bazat pe vnzarea de licene. Privind la cele dou motivaii, o concluzie ar fi c exist puine argumente ce ar putea determina companiile ISV s ignore n siguran SaaS. Pentru a face lucrurile i mai clare a spune c exist de fapt un set extrem de limitat de argumente pentru care un ISV debutant ar alege s practice modelul tradiional n defavoarea SaaS.
5.
6.
7.
Adopia SaaS n contextul modelului tradiional de liceniere reprezint o schimbare major pentru companiile ISV. Vorbim practic despre dou cateogrii de provocri: cele ce in de business i cele tehnice. Chiar dac provocrile tehnice sunt serioase i presupun investiii majore de renovare a soluiei existente, setul celor de business reprezint de cele mai multe ori cheia succesului deoarece presupun decizii ce au impact direct asupra perspectivelor financiare ale companiei. Pot fi identificate cel puin apte provocri n drumul unui ISV ctre o soluie de succes bazat pe SaaS 1. Identificarea pieei int pentru noua soluie alegerea ntre abordarea unei piee noi sau consolidarea celei existente; 2. Alegerea politicii de preuri balansul ntre accesibilitatea ofertei i riscul de canibalizare a veniturilor existente; 3. Schimbarea stilului de vnzare i de marketing clienii SaaS iau decizia de cumprare ntr-un mod diferit fa de cei ai soluiilor tradiionale, iar aceasta deoarece nsui factorii de decizie se schimb; 4. Consolidarea robusteei produsului n modelul tradiional stabilitatea produsului nu avea un
impact centralizat asupra ntregii baze de clieni pe cnd cu SaaS orice eroare sau ntrerupere a serviciului este sesizat de ctre toat lumea; Agilizarea modelul de dezvoltare software SaaS fructific abilitatea unei companii de a rspunde ntr-un mod agil schimbrii, iar aceasta presupune pe de-o parte schimbarea modelului de dezvoltare bazat pe cicluri de durat lung i totodat profesionalizarea acestuia prin introducerea de procese mature care s scad riscul pe mai multe paliere; Restructurarea organizaional datorit numrului crescut de schimbri ce apar n modul de abordare SaaS, de cele mai multe ori nsi organizaia trebuie schimbat. Povetile de succes pornesc de regul de la o echip nou, independent de cele existente sau chiar de la spin-off-uri; Excelen n abordarea i execuia tehnic nti de toate, SaaS prespune interaciunea cu un UI web, iar de cele mai multe ori acest lucru prezint prima provocare tehnic ntruct modelul tradiional este n general bazat pe aplicaii cu UI non-web. Dincolo de acest aspect trebuie gsite rspunsurile i implementarea potrivit la urmtoarele ntrebri Ce platform de cloud computing se alege i sub ce form? IaaS sau PaaS? Public sau Private? AWS, Windows Azure, Google App Engine, VMware Cloud Foundry, Heroku, CloudBees, AppFog, AppScale, Apprenda sau altceva? Cu m s e t r at e a z a s p e c tu l multi-tenancy? Cum se partiioneaz datele i care este arhitectura aleas pentru izolarea acestora? Cum se asigur scalabilitatea i disponibilitatea ridicat (i.e. 99,95% uptime) a soluiei? Cum se proiecteaz procesele de Onboarding, Feature Bundling, Subscription Management, Billing i Revenue Management? Cum se implementeaz autentificarea i autorizarea i care sunt aspectele arhitecturale care adreseaz problemele de securitate?
Concluzii
Ne aflm n pragul unei schimbri majore pentru companiile ISV. Dac astzi nc vorbim de SaaS n termeni de inovaie, cel mai probabil la finalul acestui deceniu cnd zarurile vor fi deja aruncate, SaaS va reprezenta normalitatea n ceea ce privete consumul de software. Conform prediciilor, acum este cel mai potrivit moment pentru implementarea unei strategii de tranziie la SaaS, iar din experimena acumulat pn acum n Yonder se poate spune c succesul e bazat nti de toate pe decizii nelepte de business ns fr compromisuri n execuia tehnic, unde complexitatea poate fi mai ridicat dect indic aprenele.
Legturi externe
1. 2. 3.
28
programare
Introducere n Grails
G
Tavi Bolog tavi.bolog@nokia.com Development lead @ Nokia
rails este un framework web bazat pe Java i Groovy. Grails mprumut concepte din frameowork-uri precum Rails n dorina de a simplifica web development-ul n Java. de Grails nainte de nceperea proiectului. n acelai timp am adugat funcionaliti noi, continund s meninem release-ul bazat pe Apache Wicket. Bineneles, nc tot nvm lucruri noi i uimitoare despre lumea Grails i Groovy.
La o scurt privire, Grails folosete: Limbajul Groovy pentru a conecta toate stack-urile de mai jos; Hibernate pentru modelarea datelor folosing GORM (Groovy Object Relational Model); Groovy Server Pages un limbaj dinamic pentru construirea view-urilor; Spring pentru controller, securitate, injectarea de dependine, internaionalizare, etc.; Consol scris n Groovy; Servlet containerul Tomcat inclus pentru a putea face hot-deploy la modificrile de cod (n cele mai multe cazuri). Proiectul meu current (http://primeplace.nokia.com) folosete Grails 2.0.4. Partea web a fost tranziionat n aproximativ dou luni de efort din Apache Wicket (un framework pe care nu l prea plceam) fr a avea un bagaj de cunotine avansate
Setarea Grails
Pentru a folosi Grails, ai nevoie de urmatoarele: Descarc i instaleaz Java JDK de la Oracle: http://www.oracle.com/ technetwork/java/javase/downloads/ index.html; Pentru unele sisteme de operare, va trebui s setezi de mn JAVA_ HOME i s adaugi executabilul java in PATH; Descarc Grails: http://grails.org/ i extrage coninutul; Seteaz GRAILS_HOME spre folderul n care a fost despachetat Grails i adaug executabilul grails n PATH;
29
programare
Introducere n Grails
Ruleaz Grails, tastnd: grails n Spring; terminalul/consola sistemului de operare; Acum putei rula prima aplicaie Grails, Aceasta va porni consola Grails i va executnd comanda run-app n consola atepta comanda ta: grails > Grails. Aceasta va porni applicaia: http:// localhost:8080/GrailsSocialNetwork. Exist dou IDE-uri care ajut deve- Binenteles acesta este doar un template loperii foarte bine n dezvoltarea folosind fr prea mult valoare. Aplicaia se poate Grails: porni si pe alt port rulnd: run-app Intellij IDEA; Dserver.port=80 (va porni aplicaia pe Eclipse (and Spring Tool Suite) portul 80). i acum Groovy & Grails Tool Suite, ultimele dou dezvoltate de Crearea claselor de domeniu VMware, avnd la baz Eclipse. S crem acum clasele de domeniu pentru aplicaia noastr. n primul rnd, Momentan, folosim STS 3.10 cu avem nevoie de clasa User. Pentru a crea, support de Groovy i Grails bazat pe Eclipse vom folosi din nou consola Grails: create3.8.1. Am ncercat Juno 4.2, dar laptopul de domain-class com.todaysoftmag.gsn.User. abia mai rspundea comenzilor, aa c am Aceasta va crea dou fiiere: revenit la versiunea bazat pe Eclipse 3.8.1. | Created file grails-app/domain/com/
asemenea, Grails permite crearea de validatori customizai pentru a defini contrngeri avansate domeniilor unei aplicaii, dar vom discuta despre ei n articolul urmtor. S adugm acum i cealalt clas domeniu, numit Message. Aceasta va conine un mesaj postat de un utilizator. Folosind consola Grails: create-domainclass com.todaysoftmag.gsn.Message. Comanda va genera clasa domeniu i unit testul asociat. S adugm cteva attribute i o constrngere clasei Message:
String message Date date = new Date() static constraints = { // mesajul nu poate fi gol si trebuie // s aib lungimea ntre 5 i 100. } message size:5..100, blank:false
Cea mai simpl metod de a introduce Grails, este construirea unei aplicaii web. Exemplul din articol va fi despre o reea social (Grails Social Network) datorit importanei reelelor sociale n ziua de azi. Utilizatorii aplicaiei se vor putea loga, publica mesaje i vedea mesajele publicate de alii.
Pentru a construi structura de stocare a datelor unei aplicaii, Grails trebuie s tie relaia dintre obiectele aplicaiei. n todaysoftmag/gsn/User.groovy aplicaia noastr exist dou relaii: | Created file test/unit/com/todaysoftmag/gsn/UserTests.groovy Un user poate avea mai multe mesaje. Primul fiier este clasa domeniu, iar al Aceast relaie va mbogi clasa User cu un doilea este clasa de unit test asociat. S nou atribut: messages. Mai jos este definite ncercm acum s folosim sintaxa Groovy relaia: i s adaugm context clasei noastre dome- static hasMany = [messages: Message] niu. Groovy este asemanator sintactic cu Un mesaj aparine unui utilizator, Java, dar suport structure dinamice i nu nsemnnd c nu poate exista fr a fi asoeste strict cu tipurile datelor. ciat unui user. Aceast relaie va mbogii Pentru a aduga atribute clasei User, clasa Message cu un nou atribut: user. Mai adaug urmtoarele linii n clas: jos este definit relaia:
String String String String firstName lastName userName password static belongsTo = [user: User]
Folosind consola Grails, comanda create-app va crea o nou aplicaie Grails. Sintaxa scriptului este simpl: create-app GrailsSocialNetwork (executat aa cum este descris n Setarea Grails, aceast comand creeaz structura de directoare necesar Grails, care arat astfel(n directorul GrailsSocialNetwork): application.properties conine informaii generale despre aplicaie; grails-app conine majoritatea coninutului Grails cum ar fi controller, servicii, domenii, fiierele de internaionalizare, configurri, tag libs, clase utilitare, etc.; lib conine librriile 3rd party folosite de aplicaie; scripts conine scripturi Gant; src conine clase Java i Groovy folosite de logica aplicaiei; test conine Unit testele i testele de Integrare; web-app conine imagini, js, css i alte fisiere de configurare, incluznd fiierul de iniializare a contextului
Acum dorim s adugm nite limiMomentan, aplicaia noastr nu are tri valorilor atributelor. Grails deja a nici un storage permanent. Grails folosete creat un closure gol pentru adugarea de n mod normal o baz de date n memoconstrngeri: rie care nu are persisten. Dar, putem s static constraints = { ne crem noi nite date de test. Pentru //atributul firstName nu poate fi //gol si trebuie s aib lungimea aceasta, trebuie s specificm o list de //ntre 3 i 10 obiecte pe care le dorim create la pornifirstName size: 3..10, blank:false //atributul lastName nu poate fi rea aplicaiei. La pornire, Grails apeleaz //gol si trebuie s aib lungimea //ntre 3 i 10 closure BootStrap.init. Localizeaz clasa i lastName size: 3..10, blank:false adaug bucata de code de mai jos:
//atributul username nu poate fi //gol, trebuie s fie unic ntre toate //obiectele de tip User i trebuie s //aib lungimea ntre 3 i 10 userName size: 3..10, blank:false, unique:true //atributul password trebuie s //aib dimensiunea ntre 3 i 10 } password size: 3..10 def init = {servletContext -> def user1 = new User(firstName: John, lastName: Doe, userName: jdoe, password: passwd) def user2 = new User(firstName: Joanne, lastName: Doe, userName: jodoe, password: passwd) user1.addToMessages(new Message(message: Good morning!)) user1.addToMessages(new Message(message: Nice movie: Skyfall!)) user2.addToMessages(new Message(message: Waiting for the summer...))
n cazul n care oricare dintre aceste constrngeri va fi nclcat (verificarea este fcut prin apelul metodei validate disuser1.save(failOnError:true) user2.save(failOnError:true) plonibil in fiecare clas domeniu), Grails } va completa erorile n atributul errors al De asemena, observm c mai exist clasei User. Apoi, controller-ul este cel care un closure destroy care se apeleaz cnd va decide ce se va ntmpla mai departe. De aplicaia este nchis, deci poate fi folosit
30
Crearea controllerilor
Controllerii sunt cei care determin flow-ul unei aplicaii. Deoarece Grails folosete convenie i nu configurare, numele unui controller este de genul <ClasaDomeniu>Controller, deci vom create UserController i MessageController. Pentru crearea de controller, Grails ofer un script numit create-controller. Rulnd create-controller com.todaysoftmag.gsn. UserController, Grails va crea clasa controller, testul asociat i un folder pentru fiierele de view pe care le vom discuta n capitolul urmtor:
| Created file grails-app/controllers/ com/todaysoftmag/gsn/UserController. groovy | Created file grails-app/views/user | Created file test/unit/com/todaysoftmag/gsn/UserControllerTests. groovy
Acum, repetm exerciiul pentru a crea MessageController. Momentan, controllerii nostri nu fac prea multe, dar vom schimba aceasta n urmtoarele capitole.
Autentificarea aplicaiei
O modalitate de autentificare a aplicaiei este folosirea filtrelor. Pentru a crea un filtru, rulm create-filters com.todaysoftmag. gsn.SecurityFilters. Aceasta va crea clasa Groovy i testul asociat. n filtru vom aduga un closure care va verifica existena unei sesiuni de utilizator nainte de procesare oricrui request pentru fiecare controller i aciune:
def filters = { loginCheck(controller: *, action: *) { before = { if (!session.user && actionName != login) { redirect(controller: user, action: login) return true } } } }
n cazul n care nu exist un obiect user pe sesiune, aplicaia va redirecta user-ul spre controllerul user i aciunea login, care va renderiza view-ul de login pe care l discutm n Crearea viewurilor. Altfel, logica aplicaiei va continua. n UserController, vom aduga aciunea de login care va procesa autentificarea unui utilizator:
def login() { if (request.get) { return } //this is for loading login view def u = User.findByUserName( params.username) if (u) { if (u.password == params.password) { session.user = u redirect( controller: messages, action: list)
Aciunea va verifica username-ul i parola pentru potrivire i va aduga obiectul user gsit pe sesiune, iar apoi va redirecta aplicaia spre pagina care afieaz lista de mesaje pentru user. Altfel, utilizatorul va primi un mesaj de eroare i va vedea din nou pagina de login. Cteva lucruri de menionat aici: ; nu este obligatoriu pentru a delimita linii de comand Groovy; Controller-ii au acces la obiecte Groovy specifice cum ar fi: request, params, session, etc i metode pentru a manipula view-urile, cum ar fi render, redirect, etc.; Valoarea tipurilor de date nu este verificat la compilare; If (u) se evalueaz ca adevrat dac u are valoare, sau false n caz contrar. GORM (Groovy Object Relational Mapping) ofer modaliti la ndemn de a selecta date. In cazul nostru, verificm dac exist un User care are username egal cu cel specificat n formul de login (params. username). Render apeleaz un view cu parametri specifici i produce pagina HTML [ 1 , 2 ] e s t e u n i r, i a r [model:modelObj. User:userObj] este o map Redirect redirecteaz aplicaia spre un controller i aciune. Dac controller-ul nu este specificat, redirectul se va face n controller-ul current spre aciunea specificat. Metodele nu specific foarte clar valoarea returnat (nu trebuie returnat o valoare neaprat sau diferite tipuri pe diferite ci de execuie, deci va trebui s fim ateni pentru c aceasta poate cauza probleme la runtime. Am vzut la un moment dat MissingMethodException n logurile aplicaiei noastre.)
31
programare
Radu Vunvulea
Radu.Vunvulea@iquestgroup.com Senior Software Engineer @iQuest, proiectele pe care lucreaz sunt de tip LoB, n general folosind ultimele tehnologii Microsoft. Face parte din grupul entuziatilor, motiv pentru care ii place s fie la curent cu tot ce apare nou in domeniul IT, in special din punct de vedere software.
32
Odat create aceste subscripii, putem s ncepem s distribuim mesajele. Fiecare client va fi notificat cnd o nou promoie este disponibil. n orice moment putem s adaugm, modifica sau sterge o subscripie, fr s fie necesar s oprim sistemul sau s notificm clienii. Fiecare magazin umeaz s fie notificat n mod automat. n cazul n care aplicaia sa nu este pornit, mesajul va fi pstrat pn cnd va devini activ. Fiecare mesaj poate s conin i un expiration date. Windows Azure Service Bus Topics urmeaz s tearg n mod automat mesajele care au expiration date invalid. Tot ce trebuie s trimitem la fiecare magazin n parte, pe lng datele de autentificare i numele la topic, este numele la subscripie. Pentru acetia, putem s creem o component care se ocup automat de acest lucru. Codul care poate s extrag mesajul din subscripie ar fi urmtorul:
SubscriptionClient subscriptionClient = SubscriptionClient.CreateFromConnectionString( CloudConfigurationManager.GetSetti ng(ServiceBusConnectionString), distributionTopic, stefan20Subscription); while(true) { BrokeredMessage offerMessage = subscriptionClient.Receive(); if (message != null) { try { ... offerMessage.Complete(); } catch (Exception) { offerMessage.Abandon(); } } } }
Dup cum puteti s observai, n cazul n care oferta nu este procesat cu success, oferta nu va fi pierdut i va fi procesat din nou de ctre magazin. Odat ce am creat subscripiile pentru fiecare magazine n parte, tot ce ne rmane de fcut este s adaugm mesajul n topic. Acesta va ajunge la toate magazinele pentru care filtrul de pe subscripii va returna TRUE.
TopicClient distributionTopicClient = TopicClient.CreateFromConnectionString( CloudConfigurationManager.GetSetti ng(ServiceBusConnectionString), distributionTopic); BrokeredMessage offerMessage = new BrokeredMessage();
adaugat doar filtre. Fiecare filtru poate s fie nsoit de un nume. Totodat, n loc de filtre putem s adugm reguli, iar fiecare distributionTopicClient. Send(offerMessage); regul s aib un nume unic. n general, o n exemplul de mai sus am vzut ct de regul conine cte un filtru. usor este s distribuim ofertele la mai multe SubscriptionClient groupFirstRegionSubscription = SubscriptionClient. magazine fr s ne punem problema dac CreateFromConnectionString( CloudConfigurationManager. magazinul va primi sau nu mesajul. Iar GetSetting( ServiceBusConnectionString), modul n care specificm ce magazine trecommandTopic, groupFirstRegionSubscription); buie s primeasca oferta dat este extreme SqlFilter groupFirstRegionFilter = de simplu. new SqlFilter( region LIKE %Moldova% Din punct de vedere al scalabilitaii, OR region LIKE %Banat%); un topic poate s aib pan la 2000 de sub- groupFirstRegionSubscription. AddRule(ruleForMoldovaAndBanat, scripii. Aceasta nu nseamn c suntem groupFirstRegionFilter); limitai doar la 2000 de mesaje. Ne este groupFirstRegionSubscription. RemoveRule( extrem de usor s includem un alt topic. ruleForMoldovaAndBanat); SqlFilter banatRegionFilter = n continuare ne imaginm clientul new SqlFilter( region LIKE %Moldova%); nostru venind cu urmtoarea cerin. Din groupFirstRegionSubscription. cauz c s-a extins extrem de mult n ultiAddRule(ruleForMoldovaAndBanat ,banatRegionFilter); mul timp, i-a creat responsabili regionali care se ocup de procesarea comenzilor n exemplul de mai sus am adugat un pe care le face fiecare magazin. Din cauz filtru pe care apoi l-am ters, iar apoi am c nu cunoaste modul n care piaa se va adugat o nou regul. Aceste reguli se dezvolta, clientul nostru are nevoie s gru- aplic automat din momentul cnd sunt peze mai multe regiuni, iar apoi cu costuri adugate. minime s poat mpari din nou regiuPrin acest mecanism, putem s schimnile. Totodata pentru a putea supraveghea bm n mod dinamic regiunile deservite de activitatea pe care acetia o au, el dorete ctre un responsabil. n cazul n care este sa creeze un mecanism de audit, iar toate nevoie, avem posibilitatea s adugam sau comenzile trimise de ctre magazine s fie s stergem o subscripie ori o regul fr s nregistrate. fie necesar s oprim sistemul. Ca s rezolvm aceasta cerin, putem O alt cerin a clientului nostru era s apelm la Dynamic Router Message ca toate comenzile s fie salvate, pentru a Pattern. Acest patern ne permite s ne putea s fie mai tarziu verificate. Aceast definim o list de reguli de direcionare a cerin este ca i implementat. Avem mesajelor, care poate s fie schimbat la nevoie s adaugm o subscripie care nu are runtime far nici un fel de probleme. nici o regul sau nici un filtru definit. Mai Iniial clietul nostru va porni doar cu simplu de att nici nu putea s fie. dou grupuri de regiuni, iar n timp, n namespaceManager.CreateSubscription( commandTopic, functie de cum se schimb piaa, acesta o allCommandsSubscription); s i defineasca grupe de regiuni mai mici. Fiecare magazin va trebui s creeze Fiecare grupare de regiuni va avea cate o un mesaj pentru fiecare comand, unde subscripie care acept comenzile pentru region va fi setat n mod automat cu regio list de regiuni. Nu vom mai prezinta unea din care face parte. modul n care se creaz un topic, acest Dac v punei problema costului, trelucru l-am vzut puin mai sus. buie s v zic c ase milioane de mesaje SqlFilter groupFirstRegionFilter = trimise prin intermediul Windows Azure new SqlFilter( region LIKE %Moldova% Service Bus ne costa 6$, dac 10 magazine OR region LIKE %Banat%); namespaceManager.CreateSubscription( ascult 24 de ore din 24 la o subcripie ne commandTopic, groupFirstRegionSubscription, costa circa 7$ pe lun. n viitor este posibil groupFirstRegionFilter); ca aceste preuri s scad i mai mult. Aceast prim subscripie va deservi n cadrul acestui articol am vzut cat dou regiuni. n cazul n care clientul nos- de usor este sa distribuim mesaje folosind tru hotrste ca cele doua regiuni s fie infrastructura pe care Windows Azure deservite de persoane diferite va fi necesar o pune la dispozitie. Paternuri precum s modifice aceast subscripie i s adauge Content-Based Router Message Pattern i o alt subscripie. Dynamic Router Message Pattern pot s Pentru fiecare subscripie se poate ad- fie implementate cu uurin i cu costuri uga sau terge o regula la runtime. n acest minime. Scalabilitatea ne este oferit buildcaz putem s tergem regula deja definit in de ctre Windows Azure. i s adugm alt regul. Pan acum am
offerMessage.Properties[shopType]= family;
33
management
etodologiile de tip agile sunt tot mai preferate de ctre dezvoltatorii de software ntr-o lume n care cerinele funcionale, dictate de dinamica pieei, se schimb continu iar timpul ct mai redus n care produsul software trebuie s ajung n folosina utilizatorilor finali are o pondere tot mai mare n obinerea rezultatelor dorite. n acelai timp foarte multe companii care au nevoie de produse software nu sunt dezvoltatori software i opereaz ntr-o pia tot mai apsat de constrngeri de cost i timp; marea majoritate a acestor companii doresc livrarea produselor software n condiiile unui proiect de pre fix. Prin proiect de pre fix nelegem c de la bun nceput stabilim mpreun cu clientul: Scopul (cerine funcionale i nefuncionale); Termenele de livrare; Preul. n cele va fi prezentat experiena pe care am avut-o n contextul unui proiect software de pre fix din domeniul telecom, unde elementele agile ne-au ajutat s livrm la timp funcionalitile cerute n condiii de profitabilitate. Clientul, o companie care dezvolt produse software pentru operatorii de telefonie mobil, avea n dezvoltare o soluie ce consta din mai multe sisteme; sistemul din partea de backend nu dispunea de un GUI de administrare; clientul a dorit un partener care s dezvolte acest Admin GUI n condiiile unui proiect de pre fix pentru a avea garania livrrii n condiii invariabile de pre, scop, termen de livrare. Datorit termenelor strnse de proiect a fost nevoie de nceperea dezvoltrii aplicaiei de administrare n paralel cu dezvoltarea sistemului din backend. Ca urmare a rezultat urmtorul context la startul proiectului: Specificaii funcionale cu un nivel de detaliere insuficient; Servicii externe indisponibile pentru integrare; Detaliile tehnice de integrare necesitau clarificri semnificative. Ce am fcut noi? Iniial am implicat colegi cu experien tehnic mare pentru a analiza specificaiile existente i bazat pe analiza lor am fcut o ofert de pre fix. Ulterior dup ce oferta noastr a fost acceptat, am creat echipa de proiect i proiectul a nceput; ca manager de proiect prima intenie a fost de a crea un plan de proiect mai detaliat cu task-uri granulare, cu dependene, repartizare n echip, identificare de poteniale ci critice etc. . Din primele zile discutnd cu echipa am realizat c, dat fiind contextul de proiect, acest lucru nu este fezabil. M-am gndit atunci la avantajele pe care le aduc elementele din metodologiile de tip agile: Angajamentul echipei n locul unui plan de proiect impus; Responsabilitatea echipei de a se organiza; Colaborare n echip, ntre echip i client, 3rd parties pentru a clarifica i rezolva (n cazul nostru aceasta includea clarificarea specificaiilor funcionale, a detaliilor de integrare
Claudiu Anghel
Project Manager @iQuest
claudiu.anghel@iquestgroup.com
Certified ScrumMaster are 11 ani de exeprien n domeniu, conduce echipe mari, dezvolt soluii software pentru eCommerce, Airline, Telecom; experien n aplicarea diferitelor metodologii: waterfall, RUP, Agile / SCRUM
34
Cost: dat fiind c am reuit s ne ncadrm n termenele de livrare i unde a fost cazul s obinem CRs, am reuit s inem costul sub control i n final s avem un proiect profitabil; desigur faptul c echipa a reuit s livreze la timp, s neleag ce are de fcut i sa gseasc soluiile potrivite a fost factorul cheie aici. Ca o concluzie nu credem c rspunsul la ntrebarea din titlu este da sau nu, 0 sau 1, el poate fi da n anumite condiii i poate fi nu n alte condiii. n cazul proiectului nostru a fost da i personal nu cred c am fi reuit altfel dar am avut condiiile de care v-am vorbit. ncurajarea mea este de a investi ct mai mult n: Responsabilizarea echipei, I n t e r a c i u n e , c o m u n i c a r e , colaborare, Engineering practices calitate nc de la nceput, Posibilitatea de a avea roluri specializate n propria echip.
35
tehnologii
O incursiune prin atacurile informatice din 2012 i poziionarea Romniei n rzboiul cibernetic
nul 2012 a fost unul dintre cei mai activi din istoria Internetului atunci cnd discutm de atacuri informatice asupra unor sisteme i infrastructuri mari. Prin acest articol atingem un subiect sensibil referitor la securitatea IT n Romnia prin prisma interveniilor din rile strine folosind un top 10 al celor mai importante atacuri din 2012. 7. Yahoo! Voice Concluziile articolului ncearc s un grup intitlulat D33DS Company scoat n eviden riscurile la care sunt au obinut prin SQL Injection supuse infrastructurile romaneti i ct de aproape 454,000 de conturi Y! Voice bine suntem pregtii pentru atacuri inforprintr-un simplu SQL Injection; matice serioase. Prezentarea clasamentului parolele erau stocate n plain text. va fi realizat n ordine descresctoare, n 6. Global Data Inc. (Visa & Master funcie de complexitatea i pagubele Card) fcute, dezvoltnd un clasament realizat de o bre n sistemul de procesare a ThreatMatrix. datelor de card a dus la pierderea a 1.5 milioane de numere ale unor 10. GHOSTSHELL carduri bancare; g r upu l A nony mou s i nt itu l at brea nu a dus i la pierderea datelor GHOSTSHELL a furat peste 120,000 de facturare nici a numelor. de nregistrri de la universiti de 5. Microsoft Internet Explorer top din lume injectnd malware n o problem de securitate descoperit site-uri; n septembrie permite hackerilor printre faculti se numr Harvard, s instaleze aplicaii maliioase pe John Hopkins, The University of computerele personale; Michigan etc. 41% dintre utilizatorii din America 9. U.S Enviromental Protection de Nord sunt afectai de vulnerabiliAgency tate i peste 31% la nivel global; o bre n securitate a dus la compro vulnerabilitatea de tip RCE(Remote miterea datelor a 8,000 de angajai i Code Execution) poate rula un alte conturi bancare; script de la distan pe IE 6,7,8,9 dar e amuzant c au fost necesare 4 luni nu pe 10; pn cnd US EPA a anunat persoa nici IE 10 nu scap pentru c exist nele afectate. o vulnerabilitate n Flash ce este 8. Go Daddy folosit world wide. Anonymous i-a nsuit numeroase 4. Android atacuri DDoS pe 10 septembrie; n aceast toamn a fost sesizat c pentru o perioad de timp au fost aproape 200 de milioane de teleafectate zeci de site-uri world wide, foane cu Android sunt n pericol de pn i serviciile de email; a fi resetate complet, pierzndu-se Go Daddy a infirmat ipoteza. absolut toate datele de pe ele, existnd posibilitatea distrugerii i a SIM-urilor; sunt afectate telefoanele produse de Samsung, HTC, Motorola i Sony Ericsson i majoritatea versiunilor
36
UIX
de Android sunt vizate; a fost scos patch dar pn n acest moment doar versiunile foarte noi de mobile l-au aplicat. 3. Linkedin & eHarmony n mai puin de 24 de ore 65 de milioane de conturi de Linkedin au fost scpate de sub control, 30,000 dintre acestea au fost sparte; 1.5 milioane de parole eHarmony au fost furate i publicate pe un site de spargere a parolelor; au fost diverse interpretri ale atacului, cert e c Linkedin a sczut n ochii multora atunci. 2. Wells Fargo site-ul a fost suprancrcat printr-un atac de tipul DDoS; estimrile susin c peste 70 de milioane de poteniali clieni au fost compromii i peste 8.5 milioane de spectatori; atacul i l-au nsuit Cyber Fighters of Izz ad-din Al Qassam c protest mpotriva unui videoclip anti-islamez aprut pe Youtube - Innocence of Muslims dei analizele ulterioare au scos la iveal c tehnologia i lista suspecilor indic spre o implicare guvernamental a Iranului; au fost afectate mai multe bnci n timpul aceleiai campanii, printre care Bank of America, JPMorgan Chase, Citigroup, U.S. Bancorp. 1. Zappos / Amazon Inc. un singur atac a dus la compromiterea a 24 de milioane de conturi Zappos / Amazon Inc.; au fost comrpomise nume, adrese de email, numere de telefon, cri de credit, adrese de facturare; The individual isnt the value here its the list thats the value, a declarat Rob Holmes, CEO al ageniei de detectivi IPCybercrime. com n urma atacului; una din cele mai mari greeli ale celor de la Amazon e c dup momentul cumprrii n 2009 a celor de la Zappos, acetia le-au dat mn liber pe partea de management i au fcut transfer de ncredere ce s-a resimit asupra lor; Zappos a trimis un email tuturor utilizatorilor i le-au cerut s schimbe parolele aproape imediat.
Rspunsul simplu e c ne aflm pe teren neutru, dar, din pcate, din perspectiva geografiei virtuale suntem tot la mijloc. Mai ru dect att, se pare c n acest moment suntem complet nepregtii. Nu cred c suntem capabili s gestionm un atac informatic asupra unei infrastructuri romneti important, nu cred c suntem pregtii s analizm un atac informatic complex. De asemenea, nu cred c exist vreun program de contra-ofensiv pregtit mcar teoretic, dup cum nu cred i sunt aproape sigur c nu exist echipe de intervenie care sa fie pregtite n acest sens i s tie exact ce e de fcut ntr-o astfel de situaie. ntr-adevar, n acest moment, din punct de vedere al tehnologiei, stm puin mai jos dect alte state Europene, dar n curnd majoritatea cumprturilor, majoritatea facturilor i multe altele le vom realiza virtual. Infrastructura migreaz spre Internet i nu suntem pregtii pentru incidente. Nu exist nici mcar promisiuni concrete care s susin n acest moment nite iniiative adevrate pentru dezvoltarea intern la incidente din spaiul cibernetic. Dac China, Iran, Israel, SUA, Rusia i numeroase alte ri din Europa i din afara ei au investitiii semnificative n aceasta direcie i au chiar echipe oficiale de intervenie, de cercetare, de spionaj, de contra-ofensiv pentru spaiul cibernetic, noi nc discutm despre nfiinarea programelor de protecie cibernetic la modul general. Ne putem uita i la vecini, iar unul n cunotin de cauz e chiar Ungaria. Are cel mai mare eveniment de securitate informatic din Europa de Est, de aproape un deceniu, a deschis Crysys, un centru de cercetare malware care a contribuit la cele mai complexe i populare analize din istoria noastr ca planet tehnologizat Stuxnet, Flame, Duqu etc. .De asemenea, are au un sistem CERT mult mai bine pus la punct i lista continu.
Dei aceste atacuri au fost extrem de hacking & securitate! de mediatizate, acestea sunt doar cireaa Aflat la a treia ediie, DefCamp 2012 de pe tort, sunt informaiile care ies la @Bucuresti (http://defcamp.ro) este una suprafa. Nu trebuie s uitm de atacurile dintre cele mai importante iniiative
www.todaysoftmag.ro | nr. 6/2012
37
management
rice revist dac am deschide sau la orice conferin am merge, cu certitudine am da peste un articol sau o prezentare despre Agile. Toat lumea vorbete despre Agile i agilitate, experii au aprut i ei n cantiti uriae i orice companie, cu att mai mult n software, pretinde c face Agile. Cei mai sceptici, rmn rezervai i ateapt s treac moda asta cu Agile. Doar c moda nu numai c nu trece, au trecut deja mai bine de 10 ani de cnd a aprut, ba chiar tinde s se dezvolte dac nu chiar s explodeze. Nokia, Microsoft, Adobe, Google, Philips, Siemens, Yahoo sunt nume grele care au pariat pe Agile. Avnd n vedere mizele uriae, parc am tinde s ne lum dup ei. Mai mult chiar, rigidul PMI (Project Management Institute) a creat chiar o certificare special pentru Agile demumit Agile Certified Practitioner (ACP). Dei a fost lansat cu numai cteva luni n urm, ACP numr deja peste 1000 de certificai la nivel mondial. Aadar, pare un lucru serios, n plin dezvoltare i plin de nvminte. Nu ne rmne dect s i acordm importana cuvenit. Agile nu este un silver bullet. Sunt nc multe domenii n care abordarea tradiional, waterfall, nc d foarte multe rezultate. Datorit naturii sale iterative, Agile i gsete o aplicabilitate perfect n situaiile n care scopul proiectului nu este sau nu poate fi definit n detaliu nc de la nceput precum i n mediile supuse unor schimbri frecvente. Fie c este vorba de un client care se rzgndete n fiecare zi sau ntr-o pia extrem de dinamic ce comport modificri succesive ntr-o perioad scurt de timp. Pentru cei mai muli Agile nseamn sprinturi, daily stand ups i backlog. Ceea ce este corect, dar nu i complet. Agile este mai degrab o micare, un curent chiar o atitudine. Era s folosesc cuvntul filosofie, dar e un cuvnt care are colurile att de tocite c e greu s mai discerni ce ascunde. Agile este o umbrel mare sub care se adpostesc lucuri mai concrete, mai palpabile cum sunt cele menionate mai sus: sprinturi, review-uri i retrospective, product sau sprint backlog. Acestea constituie partea mai pmntean a filosofiei Agile i anume unelte puse la dispoziie de unele metodologii. Agile nu este o metodologie, este o grupare de metodologii. i aceste metodologii, cel puin cele mai faimoase sunt: Scrum (att de faimos c este confundat de multe ori chiar cu Agile), XP (extreme programming), Kanban, Lean, FDD. Problema cea mai mare cu metodologiile este c ele nu funcioneaz. Pare ciudat afirmaia? Cel puin asta e ce tot aud de la foarte multe companii. C oricare dintre metodologii ar folosi (dei n 99% din cazuri este vorba despre Scrum), cei mai muli spun c de fapt metodologia este bun dar mai trebuie adaptat la specificul companiei. Pentru c, nu-i aa, fiecare dintre noi suntem foarte speciali i nicio metodologie nu ni se potrivete. Prima ntrebare care vine n minte n asemenea situaii este de ct timp folosii Agile? urmat invariabil de rspunsul: abia acum implementm.
38
39
HR
40
Andreea Prvu
41
diverse
Gogu
i imaginea de ansamblu
Sngele lui Gogu fierbea iar el simea c ncet, ncet, presiunea n interiorul capului su crete ireversibil. Deveni subit contient c va exploda, iar sentimentul l umplu de o linite nefireasc care i terse parc orice emoie, rmsese doar un gust amar... Era momentul pentru o reacie, acum ori niciodat. l ntrerupse pe ef: - Zu, efu, chiar nu e drept... Te iei de dou sptmni de ntrziere n condiiile n care am reuit s finalizm proiectul cu bine, e acceptat de client, am fcut profit, am economisit din bugetul de risc... Iar clientul ne cere s mai lucrm cu ei... Zu c nu e drept. Vocea lui Gogu era calm i nimeni nu zise nimic, toate privirile care nainte erau adnc nfipte n podeaua slii de edine, acum se ntoarser spre efu. Era clar c Gogu exprimase frustrarea fiecruia dintre ei: chiar fcuser o treab bun. i condiiile n-au fost chiar ideale. Pn la ntlnirea cu efu, fuseser foarte mndri de ce au reuit s fac, s-au felicitat unii pe alii... - Hmm... - fcu efu oarecum descumpnit. Te pomeneti c mi d dreptate, gndi Gogu uor descumpnit. Era deja pornit i vroia o discuie clarificatoare i era pregtit de lupt, chiar vreau o recunoatere oficial a meritelor noastre i zise el decis s nu se lase cu una cu dou. - Mda... continu efu onomatopeele. Se vedea c proceseaz la greu, lucru oarecum nou la el. Rar reuea cineva s-l prind pe efu pe picior greit, venic avea replic, venic avea el ultimul cuvnt. Deh, ca de-aia e ef. - Hmm... repet efu. Auzi efu, zici ceva odat ori ba? ntrebarea n-a fost pus cu voce tare, evident, dar aproape c i scp lui Gogu. efu i mai drese o dat vocea, se uit ptrunztor la Gogu, apoi la fiecare dintre ei. Era unul dintre momentele acelea despre care mai apoi i aduci aminte ca putnd s tai tcerea cu cuitul. - Da. (linite). Cred... (iar linite). Se pare c Gogu are dreptate de aceast dat. (i iar linite). Gogu fcea eforturi disperate s nu i afieze zmbetul victorios. Se pare ns c nu i reui prea bine: - Hai, Gogule, las rnjetul de satisfacie pe mai trziu, ai dat-o n bar cu ncadrarea n timp dar, ntr-adevr, n rest, proiectul s-a finalizat cu succes i mai degrab meritai laude dect observaii. M mir c v-au acceptat crcotaii ia proiectul dar adevrul e c v-ai strduit i i-ai dat clientului ceea ce vroia. Mi, ce mai ncolo i ncoace, meritai felicitri. Bravo. Ce zicei, ieim s srbtorim? Tonul efului se schimbase total, parc nu era el cel ce se ndoise de rezultate doar cu cteva minute mai nainte. Echipa era n cea iar privirile se mutau de la ef la Gogu, de la Gogu la ef. Pn i monologul intern al lui Gogu era redus la tcere. - Pi, dac n-avei obiecii, facem o rezervare de la ase la tia de peste drum, zmbi efu mecherete. Fac cinste... Ajuns acas, Gogu nc nu nceta s se mire de rapiditatea cu care i schimbase efu atitudinea. Era adncit n fotoliul favorit cnd apru fiul lui de la footbal. Tocmai luase vacan i, evident, era ct se poate de fericit. tiind foarte bine care va fi prima ntrebare a tatlui su, se nfiin rapid naintea acestuia cu carnetul de note. Zece, zece, nou, zece, ASE?!, zece, nou, zece, nou... - Ce e cu asele sta? Cum s-a ajuns la media asta, ce s-a ntamplat?! - Zu, mi tata, i-aa sunt aproape tocilarul clasei. Nu vezi ce medie am?! Ce conteaz asele sta cnd n rest am numai note bune. Chiar vrei sa fiu un geniu la desen? Pe Gogu l strfulger ntmplarea de la serviciu. Doamne gndi el fac i eu ca efu... pierd din vedere imaginea de ansamblu. i reveni ns rapid. - Hai mi, gata, ce, nu mai tii de glum deloc?
42
sponsori
powered by