Issuu on Google+

No. 7, Decembrie 2012 • www.todaysoftmag.ro

TSM

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

How to Web 2012 has reached its end. Thank you all for attending! Made in România Realizări și viziuni la finalul anului 2012 Istoria IT-ului Clujean (II) SEO prin Rich Snippets Dezvoltarea software-ului financiar cerinţele platformelor de tranzacţionare Liferay Service Builder vs. Spring Roo Pledoarie pentru PHP Platforme de rulare alternative pentru PHP Windows Azure Mobile Services Startup cu bani puțini Startup - TxTFeedback Care sunt cu adevărat castraveții grădinarului ISV? 10 principii de arhitectură software(II) Persoană fizică autorizată noțiuni introductive Gogu Introducere în Grails (II) Arta & IT: depășirea cadrului convențional prin stimularea creativității


6 How to Web 2012 has reached its end. Thank you all for attending! Oana Călugar

7 Realizări si viziuni la finalul anului 2012 Ovidiu Mățan

8 Made in România Ovidiu Mățan

10 Istoria IT-ului Clujean (II) Marius Mornea

12 SEO - Cum putem creşte CTR prin Rich Snippets?

26 Platforme de rulare alternative pentru PHP Attila-Mihaly Balazs

29 Care sunt cu adevărat castraveţii grădinarului ISV? Mihai Nadăș

31 Introducere în Grails (II) Tavi Bolog

34 Windows Azure Mobile Services Radu Vunvulea

36 10 principii de design (fabulă) - partea II-a

Radu Popescu

Ștefan Baritchii

14 Dezvoltarea software-ului financiar cerinţele platformelor de tranzacţionare

39 Startup cu bani putini

Cristian Ruja

17 Liferay Service Builder vs. Spring Roo Vlad Hosu

20 Leadership Situaţional Andreea Pârvu

23 Pledoarie pentru PHP Ioan Bercea

Dragoș Andronic

41 Startup - TXTFeedback Dragoș Andronic

43 Persoană fizică autorizată noţiuni introductive Delia Coman

45 Arta & IT: depăsirea cadrului convenţional prin stimularea creativitaţii Delia Coman

46 Gogu si Mioriţa Simona Bonghez, Ph.D.


editorial

Editorial

Ovidiu Măţan, PMP

ovidiu.matan@todaysoftmag.com Fondator și CEO al Today Software Magazine

Ajunși la final de an, aruncăm o privire în urmă și facem bilanțul. A fost un an întreg de pregătiri, negocieri, optimizări de procese și multe planuri. O parte dintre ele le-am realizat iar altele vor fi puse în producție în perioada următoare. Am pornit cu ideea de a promova lumea IT-ului în mare parte necunoscută publicului local și cred că am realizat acest lucru. În cele șapte ediții din anul acesta am avut 160 articole și un total de 56 de autori care au fost publicați. Am avut peste 8,000 de vizitatori unici, cu un total de 27,000 pagini vizionate, în condițiile în care mulți cititori au descărcat direct revista în format pdf. În topul orașelor conduce Clujul cu aproape jumătate din numărul de accesări urmat de București și Timișoara. Menționez seria de evenimente organizate cu ocazia lansării revistei și care s-au bucurat de mare succes. Toate acestea nu s-ar fi putut realiza fără cei patru sponsori de bază: ISDC, Small Footprint, 3 Pillar Global și Endava. De asemenea mulțumim Skobbler iar în acest număr Ullink pentru suportul acordat. Nu în ultimul rând, toate acestea nu s-ar fi întâmplat fără suportul cititorilor revistei cărora le mulțumim! Privind în urmă, aș vrea sa enumăr și cele mai importante evenimente la care am participat și care reprezintă o referință pentru dezvoltarea de software românesc: IT Camp, Business Day Cluj și How To Web 2012. Trebuie să observ că nici unul dintre acestea nu sunt la prima ediție, ceea ce ne demonstrează din nou importanța predicției și a lecției învățate. Ce ne dorim în anul următor? Publicarea lunară a revistei, publicarea în Apple Newstand și realizarea unui nou website. Idei sunt multe și credem că vă vom surprinde în mod plăcut. Numărul 7, continuă câteva articole începute în numărul trecut: 10 principii de design și Introducere în Grails, precum și seriile Made in România și Istoria IT-ului Clujean. Avem și Realizări și viziuni la finalul anului 2012 de la trei persoane importante din business-ul românesc. Software-ul financiar reprezintă un subiect care nu a fost abordat până acum și vom încerca să avem o serie de articole pe aceasta temă. Un accent special cade pe limbajul PHP având două articole pe această tema în acest număr. O descriere a două framework-uri RAD: Liferay Service Builder vs. Spring Roo. TXTFeedback este un startup clujean. Dragoș, co-fondator al acestuia ne explică cum ne putem face un startup cu fonduri proprii minime, dar folosind diferite programe pe care statul român le pune la dispoziție. De asemenea, ne va povesti despre cum vrea să îmbunătățească serviciile de customer support prin produsul dezvoltat de ei. Care sunt cu adevărat castraveții grădinarului ISV ne arată provocările și soluțiile business-ului clujean și nu numai. Un articol inedit este legătura între programatori și streets art printr-un eveniment specific. În încheire, vă sugerez să nu uitați de Gogu și Miorița , o lectură rapidă, agreabilă și plină de învățăminte. Sărbători fericite și multe împliniri în 2013!

Ovidiu Măţan Fondator și CEO al Today Software Magazine

4

nr. 7/2012 | www.todaysoftmag.ro


TODAY SOFTWARE MAGAZINE Redacţia Today Software Magazine Fondator / Editor in chief: Ovidiu Mățan ovidiu.matan@todaysoftmag.com

Lista autorilor numărului 7 Oana Călugar

Attila-Mihaly Balazs

Customer Care @ Weebly

Code Wrangler @ Udacity Trainer @ Tora Trading

oana.calugar@wembrio.com

dify.ltd@gmail.com

Editor (startups și interviuri): Marius Mornea marius.mornea@todaysoftmag.com Graphic designer: Dan Hădărău dan.hadarau@todaysoftmag.com

Cristian Ruja

Andreea Pârvu

Product Team Manager @ ULLINK

Recruiter în cadrul Endava și trainer specializat în dezvoltarea abilităților si competenețelor de leadership

Ovidiu Măţan, PMP

Radu Vunvulea

andreea.parvu@endava.com

cristian.ruja@ullink.com

Colaborator marketing: Ioana Fane ioana.fane@todaysoftmag.com Traducător: Cintia Damian cintia.damian@todaysoftmag.com

ovidiu.matan@todaysoftmag.com Fondator și CEO al Today Software Magazine

Senior Software Engineer @iQuest

Reviewer: Tavi Bolog tavi.bolog@todaysoftmag.com Marius Mornea

Reviewer: Adrian Lupei adrian.lupei@todaysoftmag.com

marius.mornea@todaysoftmag.com Fost senior software developer in cadrul Nokia, în prezent fondatorul platformei Mintaka Research

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

Simona Bonghez, Ph.D.

Simona.bonghez@confucius.ro Speaker, trainer şi consultant în managementul proiectelor, Owner al Confucius Consulting

Produs de

Today Software Solutions SRL

Radu.Vunvulea@iquestgroup.com

Vlad Hosu

Dragoș Andronic dragos@txtfeedback.net

Senior Developer @ ISDC

CTO

vlad.hosu@isdc.eu

@ TXTFeedback

Tavi Bolog

Mihai Nadăș mihai.nadas@tss-yonder.com

tavi.bolog@nokia.com

CTO @ Yonder

Development lead @Nokia

ISSN 2284 – 6352 Radu Popescu

rpopescu@smallfootprint.com

Delia Coman

delia.coman@impulsit.ro economist, trainer si antreprenor

QA şi Web designer @ Small Footprint

Ioan Bercea

Rodica Manolache

Senior Web Developer @ 3Pillar Global

Marketing & PR Specialist @ .msg systems Romania

ioan.bercea@3pillarglobal.com

rodica.manolache@msg-systems.com

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

www.todaysoftmag.ro | nr. 7/2012

5


conferințe

How to Web 2012 has reached its end. Thank you all for attending!

C

ând intri pe 2012.howtoweb.co, te întâmpină aceste cuvinte: How to Web 2012 has reached its end. Thank you all for attending! La o lună după conferință, încă sunt inspirată de câteva dintre speech-urile pe care le-am auzit și de oamenii pe care i-am cunoscut. Și chiar îmi pare rău că a durat doar două zile și s-a sfârșit. How to Web a avut loc la București, în 7-8 noiembrie.

După luni întregi de planificare, organizare, așteptare, program supra-încărcat și sute de ore de comunicare, organizatorii, Bogdan Iordache și echipa sa, au trăit momentele frumoase în care au văzut reușita evenimentului și au primit aplauze pentru eforturile lor. Ca susținător How to Web, am trăit puțin din agitația premergătoare evenimentului, când am ajutat la trimiterea mesajului despre How to Web celor care ar trebui să știe despre el. Asfel încât să minimizez numărul celor care vor spune după ce le voi povesti despre eveniment: dacă aș fi știut că e atât de interesant, aș fi venit și eu. Pentru că How to Web e atât de interesant și important pentru partea aceasta a Europei și mai ales pentru acei oameni din România care lucrează cu, trăiesc și respiră tehnologie. Mai jos sunt cele mai importante idei pe care le-am auzit:

with the worried team, the people who care -- there are live humans behind the software

Max Niederhofer, Partner @Accel Partners -- Building Big in Europe

There are many obstacles to building billion dollar companies in Europe: structural, regulatory, industrial. But the biggest barrier to building a big company in Europe is the one in our heads. Listen -- most great entrepreneurs are great listeners. Take pride in what you do. Everything that’s worth doing, is worth doing well.

Christian Boos - Founder & CEO @Arago AG -- Particle Collision in Code Space API meets Big Data

79 times more CPU power than used in Apollo Missions -- on one iPhone. Your platform can not handle infinite exploration and your users will not underPhil Libin, CEO @Evernote -- The power stand the mechanics behind your data of innovation processing. Advice on building a company and a Example: Big Data-based IT modelling tech business: don’t do it, it’s tough. If you do and pricing app: mars-o-matic.com it, do it for the right reason. Build something for yourself. You have to be good at math to Mark Pascarella, CEO @UberVU -- The be an entrepreneur. pains of growth Why consider global growth? David Bizer, Talent Geek @HackFWD -• Follow the money: US, China, Brazil, The Culture Club Japan, China -- go where the money For startup, everyday meetings are like is air. You need to gain support for your idea • 21% disposable income spent online from your colleagues. in US, UK, Canada, Australia Product-focused culture: It’s empowering • Global expansion means: to be asked to look at what’s possible, not told • huge markets how to do it. If you’re not embarrassed by the • access to talent first version of your product, you’ve launched • access to partner & platform too late • access to capital • Expansion may not be good for you: David Noel, Community Manager @ • if you don’t speak the language SoundCloud • if you’d rather be a big fish in a small How to Build a Community: Three pond Confessions Humanize customer care; when • if your product doesn’t translate to our service is down, respond with a picture local market

6

nr. 7/2012 | www.todaysoftmag.ro

• • • • • • •

it could divide your team if you don’t like this kind of lifestyle Resources to make it happen: culture communication network presence

Pe lângă cele două zile de conferință, startup-uri românești și internaționale înscrise în competitia Startup Spotlight au avut parte de patru zile de workshop-uri, sesiuni de pitching, sesiuni de mentorat, întâlniri cu 12 acceleratoare de business internționale și premii cash de 20.000 USD. Cei care nu erau într-un start-up, și-au dorit imediat să înceapă sau să lucreze întrun startup! Impresia după două zile de How to Web: există oameni care au reușit - deci, nu e imposibil; putem învăța de la cei mai buni, chiar aici în România; speak-erii sunt foarte deschiși să împărtășească - trebuie doar să avem curiozitatea să îi întrebăm; să lucrezi cu tehnologia e grozav, pentru că schimbările și inovația sunt singurele constante și avem de învățat tot timpul. Dacă toți participanții au plecat cu ceva nou invățat la How to Web, cumulat, e un bun pas înainte pentru antreprenoriatul tech românesc.

Oana Călugar

oana.calugar@wembrio.com Customer Care la Weebly @ 3Pillar Global Romania Sunt fascinată de impactul pozitiv pe care antreprenorii și startup-urile îl au în lume și sunt pasionată să cresc comunitățile de startup-uri din România. Din experiența celor 4 ani în domeniul IT în marketing, vânzări și customer care am învățat ce functionează și ce nu atunci când dezvolți și lansezi produse software, și sunt promotoarea metodologiilor „Customer Development” și „Lean Startup”


business

TODAY SOFTWARE MAGAZINE

Realizări și viziuni la finalul anului 2012

A

m avut ocazia să îi întrebăm pe Marius Ghenea, Andrei Pitiș și Voicu Oprean despre realizările din 2012 și ce viziune globală au pentru 2013. Totodată am descoperit și părerea lor despre industria de software românească. Aceste mini interviuri au fost realizate cu ajutorul Business Days, www.businessdays.ro, mulțumim pentru ajutorul acordat Codruței Nicolescu, director executiv ADESCO. Q:Care sunt principalele realizări proprii în 2012?

Q: Ce părere aveți despre piața de dezvoltare software românească?

Principalele realizări în cursul acestui an au fost Marius Ghenea legate de lansarea unui Business angel nou program educațional, numit BusinessDrive, program care este adresat atat antreprenorilor din companii mici și medii cât și managerilor din companii medii-mari, dezvoltarea regională unora dintre companiile din portofoliul meu de investiții, cum ar fi extinderea mall-ului online FashionUp în Bulgaria, creșterea semnificativă a cifrelor de afaceri la practic toate companiile în care investesc ca businessangel și la sfârsit dar nu în cele din urmă, faptul că am început activitatea în consiliul de administrație al liniei aeriene naționale, Tarom, în scopul redresării cât mai rapide a acestui mare brand românesc.

Cred că încă nu este o piață valorificată la potențialul său real, pentru că în continuare produsele și serviciile de valoare adăugată mică (call-center, outsourcing) realizează cea mai mare parte a volumelor din piața de IT românească, în timp ce situația ideală ar fi ca firmele IT românești să se orienteze din ce în ce mai mult pe producția de software original care să poată fi apoi scalat și să realizeze valori adăugate mari pentru acele companii, dar și pentru mediul economic românesc în ansamblu. Cu toate acestea, au apărut în ultimii ani semne bune din acest punct de vedere în IT-ul românesc, mai ales că barierele de intrare pe piețe globale sunt în scădere, odată cu apariția site-urilor de agregare, oportunităților din cloud sau platformelor de aplicații gen appstore.

Q:Care credeți că vor fi principalele linii de evoluție în 2013 pe plan mondial?

Q:Care sunt principalele realizări proprii în 2012?

Pe plan mondial, cred că și 2013 va fi, ca • Clevertaxi, investiția și anul curent, un nou an al antreprenoriangel de la sf lui 2011 a atului, în sensul că cele mai mari progrese lansat produsul așa cum ale economiei globale vor fi susținute sau Andrei Pitiș era planificat și a început chiar definite de afaceri antreprenoriale Președinte ANIS sa genereze revenue pozinoi, care în același timp vor continua să tionandu-se ca leader de conteze în cea mai mare măsură pentru piața crearea de noi locuri de muncă. Verticalele • o noua investiție de tip angel în cu dezvoltarea cea mai semnificativă vor i-Rewind, un produs inovativ patenfi cele de IT (în principal Internet mobil tat la nivel mondial care urmează a fi și aplicații bazate pe Internet mobil, ca și lansat în curând echipamentele conexe, cum ar fi tablete și • TechMind, agenția de headhunting smartphone-uri), energie verde (eoliana, pt software engineering a devenit solara/fotovoltaică, alte forme de energie breakeven și a început să crească. regenerabilă), protecția mediului (pro• Co-fondat împreuna cu Radu G. și duse și servicii ecologice, reciclare), dar Bogdan I. și lansat TechAngels, priși bio-tehnologie și zona business-ului de mul grup de angels în tehnologie din sănătate (mai ales servicii medicale pentru România populația în îmbătrânire). • ca Președinte ANIS am adus Ixia ca

și partener principal la HowToWeb, cel mai mare eveniment de Tech din regiune. Ixia a oferit premiile pentru Startup Spotlight, un concurs cu 32 de companii participante selectate din peste 120 de aplicanti din toate țările din jur. tot cu ANIS, participarea la schema de ajutor de stat pt companiile cu componentă inovatoare/ Tech de peste 20%, schema inițiată de comisia de IT&C din AmCham.

Q:Care credeți că vor fi principalele linii de evoluție în 2013 pe plan mondial? Pe plan mondial, 2013 va marca apariția de noi competitori în piața de echipamente mobile. Microsoft tocmai a scos pe piața Surface, Amazon e posibil sa introducă un telefon pe măsura ce tableta lor Fire este din ce în ce mai prezenta. Nokia nu cred ca și-a spus ultimul cuvânt. De asemenea, e de așteptat ca interactiunea om-computer să fie din ce în ce mai strâns legată de mobilitate, dacă acum doar mailurile sunt și pe calculator și pe telefon sau tableta, din ce în ce, odată cu creșterea penetrării tehnologiilor de tip Cloud, o să vedem și documentele pentru orice device. Q: Ce părere aveți despre piața de dezvoltare software românească? Piața de dezvoltare de software românească continuă să crească pe fondul existenței specialiștilor calificați, dar care, mai ales datorită ofertelor externe, nu mai sunt deloc ieftini. Observăm din ce în ce mai mulți antreprenori din IT se orientează către dezvoltarea de produse proprii și atacă chiar piețe externe. Piața de aplicații mobile va crește în continuare. E-commerce-ul românesc cred că va avea o creștere exploziva pe măsura ce oamenii sunt mai obisnuiți cu www.todaysoftmag.ro | nr. 7/2012

7


business

cardurile și politica de returns este din ce București, Oradea, Ploiesti, Budapesta, în ce mai bună. Chișinău - Lansare Smailo Web Energy – prima Q: Care sunt principalele tableta Smailo realizări proprii în 2012? Q: Care credeți că vor fi principalele linii de evoluție in 2013 pe plan mondial? - Lansarea TraficOKprima platforma soft din - Procesele de optimizare și restructuRomânia care integrează rare a companiilor începute în primii ani Voicu Oprean și transmite informații din de criza ar cam trebui să se fi finalizat, iar CEO Arobs trafic în timp real la nivel în 2013 ar trebui să începem să le vedem național și efectele. Chiar dacă mediul economic - Lansarea Smailo TMC – primul GPS e încă instabil, nu știm cum va evolua din România cu soluție TMC (Traffic moneda euro și care vor fi repercursiunile Message Channel) preinstalată asupra țărilor membre UE, investitorii sunt - C o n s o l i d a r e a ș i e x t i n d e r e a rezervați, etc., sunt și vor fi domenii care operațiunilor în Ungaria și R. Moldova vor înregistra creșteri atât în servicii căt și -Creșterea numărului de clienti la peste în producție. 1500 doar în România Q: Ce părere aveți despre piața de dezvoltare - Contracte noi pentru dezvoltare soft software românească? în țări precum SUA, Canada, Finlanda, Piața de soft din România a crescut Suedia și Norvegia constant în ultimii 5 ani chiar dacă nu atât - Dezvoltarea unei versiuni noi a pro- de spectaculos ca și în trecut însă este vorba dusului OptimallSFA pentru terminale despre o creștere sănătoasă bazată pe busimobile cu sistem de operare Android ness-uri eficiente. Segmentul aplicațiilor - Peste 300 de angajati în Cluj, Iași, pentru terminale mobile spre exemplu a

crescut de 5 ori în 2012 fată de 2011 iar ritmul se va menține cu siguranță și în 2013, cererea externă fiind tot mai mare. Tot o creștere mare au înregistrat și serviciile de callcenter, tot mai multe firme străine externalizând aceste servicii în favoarea firmelor românești. Pe plan intern însă cererea rămâne în continuare mică în comparație cu potențialul și cu beneficiile. Bugetele pe care firmele sau instituțiile din România le investesc în tehnologie sunt mult diminuate iar 2013 nu pare să fie spectaculos din acest punct de vedere. Singurele soluții soft care au înregistrat o creștere a vânzărilor pe plan intern sunt cele dedicate reducerii costurilor sau optimizării activităților cu efecte și rezultate pe termen foarte scurt.

Ovidiu Măţan, PMP

ovidiu.matan@todaysoftmag.com Fondator și CEO al Today Software Magazine

Made in România

A

ceasă rubrică inițiată în numărul anterior prezintă în acest număr o altă companie producătoare de jocuri din Cluj-Napoca. Este un domeniu de interes mai ales din perspectiva inovației românești. Compania a pornit inițial oferind servicii de outsourcing, dar ulterior a renunțat la ele focusul focusul fiind acum 100% dezvoltare de noi aplicații.

I

DEA Studios e un start-up înființat în 2007 de către Daniel Tamas și Tudor Rad, doi tineri antreprenori și foști freelanceri pe web development, respectiv SEO. Dacă la început firma s-a axat pe contracte de outsourcing pe web design, SEO și game development azi ne concentrăm doar pe produse proprii și ne-am creat o rețea de portaluri de jocuri Flash care strânge 9 milioane de vizite în fiecare lună. La începutul anului 2012 am cumpărat ceea ce azi e proiectul nostru principal, www. enjoydressup.com, luându-l cu noi in echipa de management și pe ownerul site-ului, Paul Muresan.

www.ideastudios.ro

8

Q: Descrieți ultimul produs lansat Tudor: Ultimul nostru produs e www.gamolition.com, lansat în Martie 2012 și e un portal flash axat pe jocuri de băieși. Lucrând timp de 4 ani doar în nișa de girl gaming am simțit nevoia să diversificăm gama de jocuri pe care le producem cât și traffic pool-ul portalurilor noastre. Incentive-ul a fost dublu: deschiderea unei piețe noi și faptul ca ne-am săturat să desenăm și să codăm doar rochițe roz și freze cu bucle în fiecare săptămână. :)

nr. 7/2012 | www.todaysoftmag.ro


business

TODAY SOFTWARE MAGAZINE

Q: Descrieți tehnologiile folosite Tudor: Exclusiv Adobe Flash și Adobe Illustrator. Momentan încercăm o schimbare treptată către mobile și vom folosi Adobe Air pentru a porta o parte din cele peste 300 de jocuri create de noi pe Android. M-au întrebat mulți de ce nu facem shift-ul către mobile mai repede, că acolo sunt banii, că Flash-ul e pe moarte, samd. Motivul e simplu, avem o bucată deloc mică din piata Flash internațională și de aici ne câștigăm pâinea. Mobile-ul rămâne direcția tehnologică principală dar nu vreau să dăm pasărea din mână pe Angry Bird-ul de pe gard, cel puțin până strângem niște date din piață cu produsele noastre exploratorii.

Tudor Rad

tudor.rad@ideastudios.ro Co-fondator la IDEA Studios, Tudor Rad și-a început cariera în online marketing acum 10 ani, lucrând ca freelancer pe proiecte de copywriting, SEO și PR. Acum el e un „Jack-of-all-trades” în cadrul firmei, ocupându-se de game production, recrutări, vânzări și game design însă marea lui pasiune rămâne construcția și managementul unei echipe.

Q: Care au fost principalele provocări care au apărut în dezvoltarea produsului și ce soluții ați găsit ? Tudor: Suntem într-o industrie cu trafic masiv și principala dificultate a fost lipsa noastră de experiență în management-ul unor site-uri cu conținut viral, care odată la câteva săptămâni prindeau spike-uri care puneau server-ul la pământ. Eu nu am participat activ la dezvoltarea lor dar colegii mei Daniel și Paul au făcut o treaba extraordinară în a optimiza site-urile și serverul pentru traficul nostru în continuă creștere. O altă provocare tehnologică e trecerea de la Flash la mobile - chiar dacă Adobe Air începe să devină o variantă tot mai interesantă pentru portare înca sunt destule probleme și e nevoie de extensii user-made pentru a folosi anumite funcționalități, cum ar fi integrarea Facebook, utilizarea de microtranzacții în jocuri, integrarea reclamelor etc. Suntem în plin proces de învățare și încă nu știm exact limitele Air-ului dar ne dă speranța faptul că sunt deja jocuri portate cu Air pe Appstore și Google Play, jocuri care rulează și functionează la fel de bine ca și cele scrise în cod nativ. Q: Câteva cuvinte despre companie Tudor: Pe lângă ceilalți 2 colegi ai mei din management, avem o echipa de 5 programatori Flash, 5 graficieni și 6 content manageri care se ocupa de PR-ul portalurilor de jocuri și alte proiecte secundare. Lăsând la o parte rețeaua noastră de site-uri, care a ajuns la niște cifre respectabile, cel mai mare motiv de mândrie al meu e că am reușit să construim o echipa. Suntem tineri toți și poate nu avem foarte multă experiență dar colegii mi-au demonstrat de multe ori ca sunt uniți și la bine și la greu :) E un sentiment incredibil că în condițiile economice și sociale din România să poți crea produse proprii și o echipă entuziastă fără infuzii de capital extern și fără să semnezi contracte cu Diavolul (sau Statul Roman). Q. Care este următorul produs la care vă gândiți să îl lansați ? Tudor: Acum punem la punct detaliile pentru un joc mai complex de fete, pe care să îl lansăm simultan în Flash și pe Android (poate și pe Appstore, încă testăm). Cred că nișa jocurilor de fete e încă destul de slab reprezentată la nivel de mobile gaming și experiența noastră din Flash ne-ar putea ajuta să creăm produse la un standard calitativ care să ne dea acel „edge” de care ai nevoie pentru a reuși în orice industrie. În 2012 am pornit cu un singur site care avea ~2 milioane de useri activi pe lună iar target-ul pentru sfârșitul anului era să ajungem la 10 milioane (target pe care l-am ratat la o mustață de 1 milion). În 2013 ne propunem să ajungem și să ne stabilizăm la 15 milioane de vizite și să avem cel puțin 5 produse de calitate pe mobile.

www.todaysoftmag.ro | nr. 7/2012

9


istorie

Istoria IT-ului Clujean (II) Ce putem învăța din trecut?

Î

n numărul trecut am lansat o mulțime de întrebări, unele filozofice, unele statistice, unele punctuale, altele deschise, majoritatea cereau răspunsuri complexe și o cercetare aprofundată. Prin urmare am început cercetările cu latura mai accesibilă, cea tehnică, descoperind în scurt timp, că istoria ei profită de abundența de informații care formau cultul marilor realizări populare, specific mediului politic în care s-a născut IT-ul românesc. În această direcție am beneficiat și de sprijinul cititorilor, îi mulțumesc cu această ocazie domnului Marius Muntean pentru materialele trimise. În contrast, perspectiva socială este mai săracă în informații, iar personajele cu roluri importante pe scena istorică sunt tot mai greu de găsit și de provocat la discuții. Prin urmare, am cerut ajutorul domnului Ioan Salomie, profesor universitar la UTCN, care mi-a acordat o întâlnire plină de amintiri, nostalgie, dar și date și personaje importante de la începuturile IT-ului românesc. Întâlnirea a decurs exact cum mă așteptam, a generat mai multe întrebări, decât răspunsuri, iar cantitatea de informații și personaje nou apărute merită un articol dedicat și mult mai consistent decât mi-am propus în acest număr. Am s ă mă opres c asupra unei curiozității: accesul la informație. Încercând să identific sursele de cunoaștere, într-o perioadă lipsită de Internet, dar îngrădită de granițe politice mult mai solide, am descoperit trei soluții ușor nonconformiste și cam greu de imaginat pentru un contemporan. Pe primul loc, filiera rusă: exista la Librăria Universității o broșură a editurilor rusești, ce conținea toate titlurile traduse din engleză în rusă și se înnoia o dată la două săptămâni. Practic tot ce se publica internațional, mai ales în SUA, era tradus în termen de șase luni. Dacă te interesa un titlu, îți scriai numele în dreptul lui și în aproximativ o lună, la prețul unei beri, primeai exemplarul identic cu ediția copiată (Addison-Wesley, John Wiley, etc). Singurele dezavantaje erau: faptul că trebuia să înveți rusă și să accepți furtul intelectual masiv realizat de editurile rusești, care nu aderau la nici un fel de copyright internațional. Domnul profesor

10

m-a asigurat că necesitatea, un dicționar, extrasele de cod în engleza și multă determinare, i-au permis să învețe, în regim autodidact, rusa. Dovadă stau cele aproximativ 500 de titluri din pivnița dânsului. Pe locul doi, titlurile de articole și poșta clasică: exista la anumite instituții, gen ITIM, câte un abonament la revista „Current Contents”, ce lista săptămânal titlurile ultimelor articole publicate în jurnale științifice. Mergeai în vizită, citeai titluri și încercai să îți faci o idee despre ce a mai apărut nou, care sunt direcțiile generale, iar dacă un articol îți trezea în mod deosebit atenția începea provocarea de a găsi adresa autorului și de a începe o corespondență prin care îl rugai să îți trimită o copie print a articolului. Câteodată, după cheltuieli cu poșta internațională și așteptări lungi, descopereai că articolul nu îți este folositor, dar era important să mulțumești frumos și să întreții relații de colaborare. Pe locul trei, xerox-urile: existau în intreprinderile mari, câteva foto-copiatoare și câteva doamne în a căror grijă erau alocate. Ținea de un anumit fel de diplomație să întreții relații cordiale cu aceste doamne, astfel încât, când aflai că a apărut o carte valoroasă prin Iași, București sau Timișoara, și dădeai o fugă cu trenul, să o împrumuți pentru o săptămână, să ai cine să îți facă rapid și ieftin o copie. În încheiere, aș dori să vă zic ce am învățat eu din cele de mai sus. În primul rând să trec peste senzația de saturație pe care o resimt de la bombardamentul constant cu informație. Să ignor pantofii sport, frigiderele, oglinzile și televizoarele, care

nr. 7/2012 | www.todaysoftmag.ro

îmi spun starea vremii, câte calorii am ars, ce vitamine să beau dimineața și ce au mai postat prietenii pe rețelele sociale. Să mă bucur că Google sau Wikipedia nu îmi trimit rezultatele prin poștă, pe Kindle nu primesc cărțile în rusă, iar dacă vreau pot să mă înscriu la un curs MOOC și să interacționez direct cu liderii din aproape orice domeniu. În al doilea rând, să nu mai fiu supărat pe procesele de proprietate intelectuala, de fiecare dată când o multinațională încearcă să își atribuie apa caldă și cuvântul mamă. Ajunge raportarea la perspectiva istorică, să văd ce impact masiv a avut furtul sistematic de informație și distribuirea acesteia în întreg blocul sovietic, nerespectând copyright-ul, dar respectând principiul politic că în război, chiar și în cel rece, totul este permis. Să nu credeți ca instig la furt, doar subliniez că oamenii găsesc întotdeauna căi de a accesa informația, și căi de a profita de pe urma ei. Ceea ce la un moment dat pare o generație de hoți de proprietate intelectuală, odată cu trecerea timpului se poate transforma într-o generație de programatori competenți care permit celor furați acum 20 de ani să își recupereze pierderile și să scoată și profit din outsourcing.

Marius Mornea

marius.mornea@todaysoftmag.com Fost senior software developer in cadrul Nokia, în prezent fondatorul platformei Mintaka Research


comunități

TODAY SOFTWARE MAGAZINE

Comunităţi IT Cluj-Napoca

Î

n locul introducerii obișnuite, în acest număr vreau să vă vorbesc despre CodeRetreat. Din motive de spațiu, nu intru în detalii despre ce este (googleit), în schimb vreau să vă zic cum este. Este foarte fain! Efectiv am simțit plăcerea de a fi inginer, pus în fața unei probleme, fără presiunea banilor și a deadline-urilor, cu unicul scop de a încerca să o rezolv. Mai mult de atât, am avut ocazia să încerc soluții în trei limbaje de programare diferite, cu oameni diferiți, cu constrângeri progresive care cresc dificultatea și obligă la schimbări de strategie, iar din 45 în 45 de minute câte o sesiune de discuții cel puțin la fel de interesantă ca și cea de scris cod. O analogie foarte bună este mersul la sala de fitness, unde iți lucrezi mușchii, obosești, uneori e greu și frustrant, dar tot timpul pleci cu aceea energie pozitivă și stare generală de relaxare și bine. Și tot ca la sală, pentru a fi în formă ii nevoie de exerciții periodice, iar eu cred că sesiuni frecvente de CodeRetreat vor aduce programatorii clujeni în vârf de formă. Transylvania Java User Group Comunitate dedicată tehnologiilor Java. Website: http://www.transylvania-jug.org/ Data înfiinţării: 15.05.2008 / Nr. Membri: 514 / Nr. Evenimente: 40 Romanian Testing Community Comunitate dedicată QA. Website: http://www.romaniatesting.ro Data înfiinţării: 10.05.2011 / Nr. Membri: 554 / Nr. Evenimente: 1 GeekMeet Cluj Comunitate dedicată tehnologiilor web. Website: http://geekmeet.ro/ Data înfiinţării: 10.06.2006 / Nr. Membri: 519 / Nr. Evenimente: 13 (Cluj) Cluj.rb Comunitate dedicată tehnologiilor Ruby. Website: http://www.meetup.com/cluj-rb/ Data înfiinţării: 25.08.2010 / Nr. Membri: 130 / Nr. Evenimente: 31

Calendar Decembrie 18 AgileWorks Remote Open Space http://w w w.meetup.com/The-ClujNapoca-Agile-Software-Meetup-Group/ events/95100482/ Decembrie 20 Knotch Launch & Party - Recomandat TSM http://www.facebook.com/events/105223946314179/ Ianuarie 2 Monthly Meetup http://www.meetup.com/Tabara-de-Testare-Cluj/ Ianuarie 8 Socialization Meetup http://www.meetup.com/Cluj-Semantic-WEB/

The Cluj Napoca Agile Software Meetup Group Comunitate dedicată metodelor Agile de dezvoltare software. Website: http://www.agileworks.ro Data înfiinţării: 04.10.2010 / Nr. Membri: 290 / Nr. Evenimente: 17 Cluj Semantic WEB Meetup Comunitate dedicată tehnologiilor semantice. Website: http://www.meetup.com/Cluj-Semantic-WEB/ Data înfiinţării: 08.05.2010 / Nr. Membri: 134/ Nr. Evenimente: 19

Tabara de testare Comunitate dedicată QA. Website: http://www.meetup.com/Tabara-de-Testare-Cluj/ Data înfiinţării: 15.01.2012 / Nr. Membri: 128 / Nr. Evenimente: 9

Romanian Association for Better Software Comunitate dedicata oamenilor cu experienta din IT indiferent de tehnologie sau specializare. Website: http://www.rabs.ro Data înfiinţării: 10.02.2011 / Nr. Membri: 189/ Nr. Evenimente: 11

OpenCofee Comunitate dedicată entrepreneuri-lor, investitorilor și programatorilor. Website: https://www.facebook.com/opencoffeecluj/ Data înfiinţării: 4.05.2011 / Nr. Membri: 209 / Nr. Evenimente: 35

Comunitatea TSM Comunitate construita in jurul revistei Today Software Magazine. Website: http://www.todaysoftmag.ro Data înfiinţării: 06.02.2012 / Nr. Membri: 333 / Nr. Evenimente: 3

Menţiuni: Cluj Perl Mongers (www.cluj.pm), GeekMeet (http://geekmeet.ro/), ITSpark (http://itspark.ro/default.aspx), CodeCamp (http://www.codecamp.ro/), CodExpert (http:// www.codexpert.ro/), PHPRomania www.phpromania.net/) www.todaysoftmag.ro | nr. 7/2012

11


programare

SEO - Cum putem creşte CTR prin Rich Snippets?

F

ormatarea şi modul de afişare al rezultatelor din SERPS ţine într-o oarecare măsura şi de optimizarea realizată de proprietarul site-ului. Folosirea Rich Snippets este o tehnică de optimizarea internă a paginilor unui site şi poate avea rezultate foarte bune în creşterea traficului organic. Faptul că un anumit rezultat iese în evidenţă aduce un avantaj celor care folosesc această metodă SEO.

Radu Popescu

rpopescu@smallfootprint.com QA şi Web designer @ Small Footprint

Rich Snippets sunt anumite informaţii, imagini sau linkuri care apar în cadrul unui rezultat al unei căutari, pentru a oferii utilizatorilor mai multe detalii. Toate aceste elemente suplimentare vor face ca rezultatul respectiv să fie evidenţiat, lucru care ne ajută foarte mult. Folosirea Rich Snippets oferă câteva beneficii dintre care aş aminti pe următoarele: • Atrag atenţia utilizatorilor asupra rezultatelor relevante într-o căutare; • Oferă mai multe informaţii instante legate de căutarea realizată; • Ajută la creşterea ratei de click (CTR) şi reducerea bounce rate-ului; În continuare vom vedea două exemple de rezultate care folosesc Rich Snippets întrun mod foarte bun. În Figura 1, avem unul din rezultatele afişate pentru căutarea unui joc, „cut the rope” mai exact, care vine de pe situl Google Play. Acesta este un rezultat din categoria software care conţine ratingul jocului, preţul sau şi platforma pe care rulează. Figura 2 prezintă rezultatul siteului IMDB.com pentru căutarea „titanic”. Aici putem observa că acesta conţine un rating, nota filmului, numărul de voturi primite precum şi detalii despre regizor sau actori.

Figura 1

12

nr. 7/2012 | www.todaysoftmag.ro

Pentru a confirma beneficiile menţionate mai sus, aducem în discuţie un test realizat în urmă cu doar câteva luni de către compania americana Catalyst, folosind un blog cu reţete culinare. În prima lună, dupa folosirea Rich Snippets, situl a avut o creştere a CTR de 150% fapt care demonstrează potenţialul uriaş pe care îl are această tehnica SEO.

Utilizarea Schema.org

Schema.org furnizează o serie de atribute HTML pe care proprietarii de website-uri le pot folosi pentru a beneficia de Rich Snippets. Aceste taguri, cunoscute şi sub numele de microdata, sunt acceptate şi folosite de cele mai importante motoare de căutare printre care Google, Yahoo sau Bing pentru îmbunătăţirea calităţii căutari online. Acest site oferă o gama largă de colecţii de atribute care pot fi folosite pentru următoare categorii: organizaţii, persoane, evenimente, restaurante şi multe altele. Pentru a întelege mai bine cum putem folosi aceste taguri oferite de Schema.org, vom lua un exemplu simplu. Mai jos avem, în prima parte, codul HTML simplu al unei pagini web personale, iar în partea a doua

Figura 2


programare

TODAY SOFTWARE MAGAZINE

acelaşi cod în care se folosesc Rich Snippets: <div> Numele meu este Ioan Popa, dar prietenii imi spun Ionut.<br/> Aici este adresa site-ului meu: <a href=”http://www.site.ro”>www.site.ro</a>.<br/> Locuiesc in Cluj-Napoca si sunt inginer la SC Compania IT SRL </div> <div itemscope itemtype=”http://data-vocabulary.org/Person” class=”pers”> Numele meu este <span itemprop=”name”>Ioan Popa</span>, dar prietenii imi spun <span itemprop=”nickname”>Ionut</span>.<br/> Aici este adresa site-ului meu: <a href=”http://www.site.ro” itemprop=”url” www.site.ro</a>.<br/> Locuiesc in Cluj-Napoca si sunt <span itemprop=”title”>inginer</span> la <span itemprop=”affiliation”>SC Compania IT SRL</span> </div>

După cum putem vedea, microdata sunt folosite în tagurile <div> şi <span>. Atributele au rolul de a transforma simplele taguri HTML în nişte taguri semantice. În exemplul de mai sus am folosit categoria „person” pentru că în acel conţinut era vorba de o persoană. Primul lucru pe care trebuie să îl facem este să încludem tot acest conţinut, care aparţine unei singure categorii, într-un container (în cazul nostru un div care conţine şi clasa „pers”, pentru a-l identifica mai uşor). Apoi, în interiorul său trebuie să specificăm categoria căreia îi aparţine tot acel conţinut (adăugând „itemscope” şi „itemtype” acesta din urmă având ca valoare linkul categoriei vizate de pe Schema.org). Paşii următori presupun includerea elementelor care oferă informaţii despre persoană în alte mici containere (span-uri în cazul acesta) ce vor conţine şi atributul „itemprop” cu valoarea corespunzătoare.

Informaţii despre autor folosind Google+

Există şi un mod foarte simplu de folosire a Rich Snippets pentru afişarea unor informaţii despre autorul unui site, care nu necesită cunoştinţe de HTML. În Figura 3, pentru căutarea “radu popescu” rezultatul al treilea conţine cateva informaţii despre mine, fiind evidenţiat printr-o fotografie şi numele autorului. Pentru a putea adauga informaţii despre autor în SERPS, folosind metoda Google+, trebuie să parcurgem doi paşi simpli: 1. Pe paginile la care dorim să afişăm informaţiile despre autor, se va crea un link către profilul Google+ de unde dorim sp preluam informaţiile despre autor. Linkul va trebui să conţină ID-ul profilului şi parametrul rel=author precum în exemplul de mai jos: <a href=”[ URL_PROFIL_GOOGLE+ ]?rel=author” >Google+</a> <a href=”https://plus.google.com/10954875114587?rel=author” > Google+</a>

2. În contul de Google+, la secţiunea “Contributor To section” trebuie să adaugăm un link nou, spre situl în care am adaugat codul de la punctul 1. Aceste informatii nu vor aparea imediat dupa parcurgerea acestor paşi. Trebuie să aşteptăm până la trei săptămâni pentru a se actualiza rezultatele noastre, dar putem totuşi testa dacă am parcurs corect paşii de implementare folosind tool-ul urmator: http://www.google.com/webmasters/tools/richsnippets

www.todaysoftmag.ro | nr. 7/2012

13


requirements

Dezvoltarea software-ului financiar cerinţele platformelor de tranzacţionare

C

um te-ai simţi dezvoltând software folosit de cele mai mari instituţii financiare din lume, software cu ajutorul căruia se tranzacţionează miliarde de euro pe zi? Responsabil? mândru? fericit? toate acestea la un loc :) ?

Cristian Ruja

cristian.ruja@ullink.com Product Team Manager @ ULLINK

Încercăm în rândurile de mai jos să surprindem care ar fi cerinţele funcţionale şi non-funcţionale ale unei platforme de tranzacţionare, şi modul de realizare a acesteia, pentru a asigura parametrii de înaltă calitate ceruţi de acest gen de software.

Cerinţele non-funcţionale ale platformei de tranzacţionare

Cerinţele nonfuncţionale sunt cerinţe care specifică criteriile de evaluare ale unui sistem. Acestea sunt de obicei numite şi cerinţe de calitate ale sistemului. Cele mai importante cerinţe non-funcţionale ale unei platforme de tranzacţionare sunt: • Reliable - De încredere - se referă la a avea un produs sofware care să funcţioneze întotdeauna fără întreruperi/erori (pe parcursul timpului

cât sunt bursele deschise, ex. de luni

14

nr. 7/2012 | www.todaysoftmag.ro

până vineri între 9-17). High Throughput/Performace capabilă sa proceseze un număr mare de tranzacţii/ordine pe durată îndelungată, pentru a putea asigura utilizarea şi funcţionalitatea în condiţii optime a sistemului (ex. 1000 mesaje/sec, ~10 milione mesaje pe zi) pe durata perioadei de tranzacţionare (ex. de luni până vineri între 9-17) Low latency - întârzieri minime - întârzierea produsă de acestă platformă trebuie să fie minimă, pentru a asigura accesul cât mai rapid al ordinelor de tranzacţionare pe platformele burselor (ex. ~50µs). Load balancing, hot failover & highly availablility (ex. 99.999%) - capacitatea de a funcţiona întot-

deauna având cel putin două servere


TODAY SOFTWARE MAGAZINE

astfel încât în cazul în care unul este oprit, celălalt va prelua responsabilitatea de a procesa ordinele, toate acestea făcându-se într-un mod transparent pentru client. Disponibilitate 24 ore “follow the sun” – platforma trebuie să fie disponibilă 24h de-a lungul fusurilor orare, începând cu bursa din Tokyo, continuând cu cea din Londra, şi cu cea din NewYork. Scalabilitate ridicată – arhitectura trebuie să fie uşor scalabilă pentru a răspunde la creşterea numărului de pieţe şi clienţi, distribuiţi în jurul globului.

Cerinţele funcţionale ale platformei de tranzacţionare

Una dintre funcţionalităţile cheie ale platformei de tranzacţionare este aceea de a servi ca un nod de conectivitate multiprotocol „multiprotocol connectivity hub” asigurând conectivitatea între participanţii din piaţă. Diferite pieţe (burse) acceptă protocoale diferite de conectare, deci platforma trebuie sa fie capabilă să lucreze cu diferite protocoale pentru a se conecta şi ruta într-un mod inteligent mesajele către destinațile finale (burse, brokeri, aplicaţii de tranzacţionare, sisteme de management al ordinelor sau către alte reţele prin intermediul protocolului FIX sau alte protocoale customizate sau API-uri. Protocol FIX (http://www.fixprotocol.org/) este cel mai folosit protocol în acest domeniu. Pe lângă diferite versiuni ale acestuia, platforma trebuie să fie usor extensibilă pentru a suporta API-uri specifice. Câteva cerinţe non-funcţionale referitoare la conectivate: întârzieri minime pentru procesarea şi rutarea orderelor (ex ~50µs); trafic foarte mare (ex 1000 mesaje/sec, ~10 milioane mesaje pe zi) „HighTouch Trading solution” - soluţie care acoperă activitatea de zi cu zi a brokerilor. Tinta pentru aceste soluţii este de a lucra cu ~10000 ordere pe zi, capacitate maxima de procesare manuală - folosită pentru a înlocui „biletele de hârtie”, cu tichete electronice, pentru a executa ordinele clienţilor, care vor fi trimise la traderi pentru a fi procesate. De asemenea, se vizează şi distribuirea mai ușoară a informației în timp real intre toţi membrii echipe (vânzare, traderi, clienţi). Aceasta trebuie să lucreze în timp real şi cu toate clasele de bunuri (acţiuni, produse derivate, Forex, etc). Important este să transmită rapid şi sigur ordinele şi să trimită instant răspunsul către clienţi. O alta funcţionalitate la modă este tranzacţionarea automata cu ajutorul algoritmilor. Pe lângă algoritmii standard soluţia pune la dispoziţie un API pentru a permite clienţilor adăugarea de algoritmi proprii. Low Touch Trading Solution – acoperă partea de acces rapid şi direct la pieţe şi include routare inteligentă şi cautarea de lichidităţi precum şi căutarea preţului optim pe pieţele disponibile. Este responsabil și cu managementul riscului, şi posibilitatea de monitorizare şi procesare automata a tutor orderelor transmise în pieţe (ex. ~10 milioane ordine pe zi). Managementul riscului este altă componentă obligatorie a platformei de tranzacţionare fiind reglementata legal în pieţele financiare mature. Pe lângă aceasta, brokerii trebuie să fie capabili să filtreze tranzacţiile clienţior pentru a verifica două tipuri de reguli: • Contractuale: clienţii trebuie să respecte regulile impuse de brokeri (ex. suma tranzacţiilor zilnice pentru un client să nu depaşească 10 milioane $) • Conformitate: clienţii trebuie să respecte regulile pieţelor

(ex. capitalizarea pe un instrument să nu depășească 80% pentru un client) Scopul este de a verifica şi valida în timp real ordinele şi poziţiile deţinute (long/short/net) pe diferite pieţe. Toate acestea trebuie să se execute cu impact minim de timp (ex: 3µs timpul necesar pentru validare). Middle Office management se ocupă cu tratarea ordinelor executate în piaţa, mai exact cu alocările către clienţi şi confirmările acestora. Informaţiile de alocare sunt date prin instrucţiuni (modul în care se distribuie cantităţile executate între clienţi). Confirmările reprezintă acordul primit care certifică că tranzacţia reprezintă ceea ce a cerut clientul. Aceste validari se pot face si prin accesul la alte sisteme care ofera aceste informatii. Ultimul pas este în a agrea modul de livrare/decontare care are particularităţi specifice depinzând de burse, clienţi şi instrumentele tranzacţionate. Produsul este de asemenea răspunzător pentru calculul comisioanelor şi taxelor (incluzând comisionul pieţelor) care trebuie facturate către clienţi.

Cum se dezvoltă o platformă de tranzacţionare

Care sunt paşii necesari pentru a crea o platforma de trazacționare de înaltă calitate? Primul pas este de a strânge la un loc specialişti de top din arii diferite: analişti de business, arhitecţi software, dezvoltatori, ingineri de asigurare a calităţii şi a lucra împreună folosind metodologia SCRUM. A avea o echipa de specialişti de înalta performanţa nu este destul. Este de asemenea nevoie să ascultăm şi să reacţionăm la nevoile clienţilor: analiştii de business culeg nevoile clienţior şi le suprapun în contextul produselor şi a platformei. De www.todaysoftmag.ro | nr. 7/2012

15


requirements Dezvoltarea software-ului financiar asemenea ei determină cerinţele specifice ale clienţior şi eventualele diferenţe dintre produse şi nevoile acestora. În această fază, arhitecţii de sistem vin cu sugestii pentru a defini arhitectura produselor, definirea API-urilor pentru comunicarea între produse şi componente. Scopul este de a menţine omogenitatea produselor şi componentelor pentru o uşoara extindere şi mentenanţa ulterioara. Definirea şi granularizarea cerinţelor funcţionale pentru fiecare produs în parte este responsibilitatea „Product Ownerului”. Echipa de dezvoltare estimează efortul necesar pentru implementarea funcţionalităţilor cerute încercând să identifice posibile riscuri referitoare la performanță, calitate sau regresie. În faza de implementare, în permanenţă focusul este pe calitate înaltă. Pentru a păstra nivelul înalt de calitate folosim cele mai bune practici din domeniu: • unit tests – testare automata a codului, • code review - proces prin care membrii echipei revad codul inainte ca

acesta sa ajunga la testare, continuous integration - proces care asigura testarea/integrarea automata a aplicatiei.

Testarea finală închide ciclul de dezvoltare; Țintele pentru asigurarea calității sunt: • validarea funcţionalității, testând cerinţele funcţionale ale clienţilor. • verificarea funcţionalitatii anterioare pentru a evita regresiile. • validarea performantei asigurând cerinţele non-funcţionale, • validarea platformei integrate, testând interacţiunea dintre produse. Se folosesc în mare parte suite de teste automate acoperind partea funcţională şi testele de performanţă. Metodologia SCRUM este foarte potrivită pentru dezvoltarea acestui tip de produse prin adaptabilitatea şi raspunsul imediat la schimbare.

Figura 2 - diagrama detaliată a componentelor

16

nr. 7/2012 | www.todaysoftmag.ro

Care este reţeta de succes în dezvoltarea unei platforme de tranzacţionare?

Din 2001 clienţii ULLINK s-au bazat pe noi şi ne-au ajutat să dezvoltăm şi să livrăm produsele noastre stabile dezvoltate folosind cele mai moderne tehnologii disponibile în domeniu. Clienţii beneficiază de platforma de tranzacţionare modulară şi scalabilă ULLINK lucrând cu toate tipurile de bunuri valorice, asigurând acces extrem de rapid, managementul riscului, acces direct la pieţele financiare (DMA) şi tranzacţionarea prin algoritmi. Cu aproape 300 de experţi distribuiţi în 8 birouri (New York, Sao Paulo, London, Paris, ClujNapoca, Hong Kong, Tokyo, Sydney), în crestere :), cu mult profesionalism, multă muncă, pasiune pentru tehnologie şi distracţie, ULLINK are cunoştinţele necesare şi expertiza de a dezvolta şi ajuta clienţii de pe întreaga planetă 24h/zi. Inovatia este „sarea şi piperul” presărate peste aceste produse şi procese.


arhitectură

Liferay Service Builder vs. Spring Roo

R

.A.D. sau Rapid Application Development este un numitor comun în ziua de azi atunci când vorbim despre metodologii de development. Pe scurt, această metodologie presupune adunarea de cerințe funcționale și non-funcționale prin workshop-uri sau metode de comunicare cât mai rapide,

Vlad Hosu

vlad.hosu@isdc.eu Senior Developer @ ISDC a lucrat In ultimii trei ani pe tehnologii de portal si solutii e-commerce.

17

nr. 7/2012 | www.todaysoftmag.ro

prototipizare și reutilizabilitatea componentelor implementate. Pentru a îndeplini cu succes această metodologie în ceea ce privește timpul de dezvoltare al aplicațiilor, multe companii folosesc unelte pentru generare de cod. Conceptul de Vendor Lock-in este menit să atragă atenția asupra deciziilor tehnice vis-a-vis de ușurința cu care putem integra un generator de cod în tehnologia pe care o folosim dar și de dificultatea cu care putem customiza sau chiar elimina anumite componente generate. Este o practică extrem de comună; așa face Oracle, așa face IBM, așa face Apple, pe scurt, așa fac toți. Pentru a detalia acest concept am ales un studiu de caz: Spring Roo vs Liferay Service Builder. Amândouă sunt unelte pentru generare de cod, amândouă sunt compatibile cu Liferay. Din acest punct de vedere voi face un DAR (Decision Analysis and Resolution). Pentru această analiză vor fi folosite următoarele criterii: • Meta date: capacitatea de customizare a codului generat prin descriptori • Calitatea codului generat: cu respect la standarde de codare, ex. Oracle Code Conventions (http:// www.oracle.com/technetwork/ java/codeconv-138413.html) • Documentație • Vendor Lock-out: cât de ușor vă scăpați de codul generat sau să-l

integrați în aplicație Compatibilitate: aspecte de integrare cu tehnologia Liferay

Meta date - Liferay Service Builder

Beneficiază de un plugin de Eclipse simplu și intuitiv pentru a rula unealta. O alta variantă este folosirea Ant sau Maven pentru rulare. Ea vă oferă un xml pentru configurare care, vă va genera pentru fiecare entitate câte un domain model, layer de persistență și de servicii. Totodată el va genera automat și metode de CRUD și metode utilitare pentru găsirea de entități dupa proprietățile acestora. Aceasta acoperă majoritatea straturile necesare, mai puțin cel de prezentare. În schimb, oferă integrare cu servicii web JSON si SOAP. <?xml version=”1.0” encoding=”UTF-8”?> <!DOCTYPE service-builder PUBLIC „-//Liferay//DTD Service Builder 6.1.0//EN” „http://www.liferay.com/dtd/liferay-service-builder_6_1_0.dtd”> <service-builder package-path=”ro.tsm”> <author>Vlad Hosu</author> <namespace>TSM</namespace> <!-- PLACE YOUR ENTITIES HERE --> <entity name=”Articol” localservice=”true” remote-service=”true”> <column name=”id” type=”long” primary=”true” id-type=”increment” />

Figura 1 - Structura serviciului Liferay Builder


arhitectură Liferay Service Builder vs. Spring Roo

<column name=”titlu” type=”String” /> <column name=”descriere” type=”String” /> <column name=”autor” type=”String” /> <column name=”likeCount” type=”long” /> <finder return-type=”Collection” name=”Autor”> <finder-column name=”autor”></finder-column> </finder> </entity> </service-builder>

Atributul de package-path din tag-ul „service-bilder” este folosit pentru numele pachetului de bază al codului generat. Tag-ul „namespace” este folosit pentru denumirea tabelei în baza de date, iar în cazul acesta va fi tsm_Articol. Atributele de „local-service” și „remote-service” de pe tag-ul „entity” sunt folosite pentru specificarea persistenței locale și respectiv, dacă doriți și generarea de servicii web JSON și SOAP. Specificarea tag-ului „finder” va genera API si Implementare pentru obținerea unei liste de Articole in funcție de câmpul „autor”. Desigur se poate custo- Security: miza mult mai mult. • project --topLevelPackage ro.tsm • jpa setup -- provider HIBERNATE Meta date - Spring Roo --database MySQL Pentru a configura Spring Roo aveți • entity jpa --class ~.domain.Articol nevoie de STS (un Eclipse pentru Spring), o --testAutomatically altă variantă este să alegeți consola. Pentru • field string --fieldName titlu --notNull consolă, va trebui să definiti pentru fie• field string --fieldName descriere care task câte o comandă. Veți identifica --notNull multe taskuri repetitive care ar putea fi • field string --fieldName autor abstractizate. Din punctul meu de vedere --notNull configurarea nu este atât de vizuală, pre• field number --fieldName likeCount cum o diagrama sau un xml. Un aspect --type java.lang.Long negativ este: la fiecare fișier .java generat, • finder add --finderName findArticoRoo mai adaugă și un fișier AspectJ, asta leByAutor --class ~.domain.Articol înseamnă de două ori mai multe fișiere, • perform tests deci o mentenanță dificilă pentru custo• perform eclipse mizarea anumitor componente. Un aspect • web mvc setup foarte important este ca Roo poate genera • web mvc all --package ~.web și stratul de prezentare la domeniul definit. • security setup Un mare atu față de Liferay Service Builder. Același exemplu, referitor la entitea Precum exmplicam anterior, dacă Articol se va putea genera cu Roo folosind veți avea mai multe entități va trebui să urmatoarele comenzi și în plus vom avea repetați pentru fiecare dintre ele pașii stratul de web, test de integrare și Spring referitori la definirea acestora. Comanda

„perform tests” este pentru a testa integrarea entității generate în proiect. Comanda „perform eclipse” este pentru configurarea workspace-ului. Dacă aveți STS, nu mai este nevoie de rularea acestei comenzi. Altfel ea sau trebuie rulată sau este necesară instalarea unui plugin adițional pentru mavenizarea proiectului.

Calitatea Codului

Este important de menționat că acest atribut nu contează decât dacă veți avea nevoie să intrați in codul generat. Alfel, cel mai probabil sursele generate vor ajunge într-o librărie externă.

Calitatea Codului - Liferay Service Builder

Dacă punem un Sonar (vezi http:// www.sonarsource.org/) pe el vom găsi la fiecare metodă câte un Major cel puțin. Spre exemplu: • Prinderea de throwable in excepții

} catch (Throwable t) {

Castarea neverificată

AdditionalInformationClp oldCplModel = (AdditionalInformationClp) oldModel;

Modul în care se generează o entitate, este destul de complex și nu este conceput decât pentru a face parte dintr-un API (aceasta pentru a avea capacitatea de a suporta bazele de date majore ca și MSSQL, PostgreSQL, MySQL șamd). Aici nu includem si layer-ul de srvicii, care mai adauga in API înca opt clase: (http://www. liferay.com/community/wiki/-/wiki/Main/ Service+Builder) Figura 2 - Structura serviciului Spring ROO

18

nr. 7/2012 | www.todaysoftmag.ro

Calitatea Codului - Spring Roo


TODAY SOFTWARE MAGAZINE

Oferă un cod care respectă best-pratice-urile impuse de Oracle si Google(pe partea de front-end) Totodată, în orice moment aveți ocazia de a scoate o metodă din starea de cod generat în cod customizat ceea ce aduce un beneficiu destul de puternic.

Vendor Lock-out - Liferay Service Builder

Trebuie rescris totul pentru a ajunge la un cod Java extensibil, utilizabil si ușor de întreținut dar având in vedere că Liferay generează API-ul detașat de implementare, oricând se poate scrie o altă implementare într-un alt plugin dar asta nu vă va ajuta niciodata la scoaterea codului generat. Pe Documentație - Liferay Service Builder scurt, Liferay Service Builder oferă un conBeneficiază doar de o pagină de Wiki tract pentru servicii și pentru model iar – documentație inexistentă. De altfel, veți asta este suficient în majoritatea cazurilor. putea găsi foarte multe informații legate de această unealta și pe forumuri. Liferay are Vendor Lock-out - Spring Roo o comunitate destul de mare și în creștere. Unealta poate translata tot ceea ce este În cazul unui parteneriat cu Liferay în fișierele AspectJ în cod Java. Aceasta beneficiați de tot suportul necesar pentru oferă un grad de extensibilitate ridicat. a folosi această unealtă.

pic diferită, anume container-ul de Spring este în Liferay și injecția de bean-uri se face într-un mod diferit din plugin. Acest demers presupune o configurare suplimentară la Spring Roo pentru a-l putea folosi.

Concluzii

În concluzie, puteți să folosiți Service Builder-ului atunci când nu se consideră partea de Vendor Lock-out, Calitatea Codului sau Documentația; acest lucru presupune că nu vă puneți problema schimbării tehnologiei pe parcusul proiectului și că aveți suficiente cunoștințe vis-a-vis de acest tool. Pe de altă parte, Spring Roo vă oferă o satisfacție mai mare în ceea ce privește calitatea codului sau documentația Compatibiliate dar veți avea și un risc, în funcție de protoDocumentație - Spring Roo Este important de menționat că aspec- tipizarea aplicației. Roo are parte de o documentație des- tele de integrare pot să genereze o pierdere tul de bogată prin comparație. În ceea ce de timp mai mare decăt beneficiul generaprivește forumurile, comunitatea Roo este torului de cod în sine. Pe scurt, pot apărea înca destul de restransă. probleme de prototipizare. Totodată integrarea cu Spring este un

WE HIRE

IN GOOD COMPANY PROJECT MANAGER

.NET DEVELOPERS JAVA DEVELOPERS JAVA ARCHITECT .NET ARCHITECT

ISDC.EU/CAREERS

WE DO PROJECTS

OUR CUSTOMERS

ISDC

WITH IMPACT. WE

ARE IMPRESSED

ENGINEERS

DELIVER RESULTS,

BY OUR AWESOME

YOUR

NOT RESOURCES.

TECH TEAMS.

DREAMS!

RALUCA HIREME @ISDC.EU

SIMONA HELLO @ISDC.EU

www.todaysoftmag.ro | nr. 7/2012

19


HR

Leadership Situațional

E

prima oară când scriu despre Leadership. Am avut o oarecare reticiență în a aborda aceast subiect, deoarece toată lumea vorbește despre Leadership și toată lumea își dă cu părerea despre ce înseamnă să fii lider. Orice afirmație legată de această temă poate fi ușor controversată pentru că sunt atâtea teorii dezvoltate, încât mereu poți aduce contra-argumente. Încă de la început aș vrea să creez așteptarea că acest articol este personal și este bazat pe experiența mea ca lider în cadrul unei organizații studențești, unde scopul principal era dezvoltarea noilor membri, dar și ca angajat pus în ipostaza de a avea lideri (mai mult sau mai puțin).Dacă vor apărea controverse sau dacă împărtășiți alte opinii, le încurajez, pentru că suma experiențelor noastre cu siguranță este una diferită. Andreea Pârvu

andreea.parvu@endava.com Recruiter în cadrul Endava

20

nr. 7/2012 | www.todaysoftmag.ro

Pentru mine personal, un lider știe să se adapteze fiecărui situații și fiecărui angajat. Oamenii au stări și trăiri diferite și cu siguranță factori motivaționali atât de variați încât este recomandabil să îi tratezi de cele mai multe ori ca individualități nu ca grup. Se întâmplă ca soluțiile care pot fi implementate pentru o persoană pot avea impact negativ asupra altora. Înainte de a intra în teoria Leadershipului Situațional, aș vrea să subliniez diferența care există între a fi lider și a fi manager. La primul meu job am avut ocazia să am un șef, care a depășit de mult stereotipul celor care au o poziție de conducere în România, de a se bucura peste măsură de acest statut, dar fără a face ceva în a depăși barierele ierarhice. De cele mai multe ori ”șeful” este cel care trebuie să aibă dreptate și este cel care știe cel mai bine cum trebuie să se întâmple lucrurile. Trist este că angajații nu reacționează (mie personal îmi plac angajații care își provoacă șefii într-un mod constructiv). Dacă ar fi să îl caracterizez pe primul meu șef, care a fost și încă este un model pentru mine, aș zice mereu că a fost ”Business developer, people enhancer, team creator”, pentru că întotdeauna a avut în vedere businessul și obținerea profitului, ținând cont că

doar împreună cu angajații se poate obține performanța pe care toți stakeholderii implicați în proces o așteptau. A fost tipul de manager și lider care a știut cum să valorifice potențialul fiecăruia dintre noi și care a înțeles întotdeauna nevoile noastre. În ciuda faptului că mulți dintre noi eram novici în domeniul în care activa compania, a știut cum să ne lase să învățăm din propriile greșeli, dar și cum să ne susțină în situațiile în care terțe părți interveneau în echipa noastră. A fost un lider și un manager care echipei noastre i s-a potrivit ca o mănușă. Schimbând job-ul și ajungând într-un mediu organizațional complet nou, am înțeles că în noul context, vechiul stil de leadership cu care eram obișnuită nu se potrivea. Pentru prima oară am înțeles cât de relevant și ce impact mare poate avea un lider asupra unor persoane dacă știe cum să se adapteze fiecărei situații. Pentru prima dată am început să studiez mai amănunțit acest subiect și modelul care mie mi-a captat cel mai mult atenția a fost cel a lui Harsey și Blanchart. Pe baza modelului lui Hersey – Blanchard, in cele ce urmează voi prezenta stilurile de Leadership care sunt încurajate și implementate în funcție de motivația și experiența fiecărui membru al echipei.


TODAY SOFTWARE MAGAZINE

Lider

vs.

Manager

Liderii, au ”followers”, persoane care îi urmează pentru că, cred cu tărie într-o viziune pe care liderul știe cum să o transmită. Ei iși manifestă dorința voluntară de face parte din implementarea acelei viziuni.

Managerii au subordonați datorită unei poziții pe care o ocupă în organigramă. În aceste condiții angajații sunt nevoiți să îi asculte pe manageri, pentru că altfel pot fi penalizați. Mai mult decât atât, managerii spun Situațiile controversate din angajaților ce au de făcut. istorie, demonstrează că uneori liderii pot avea și un impact negativ, nu doar pozitiv, dar puterea cu care au reușit să își transmită viziunea și să îi atragă pe ceilalți este impresionantă în ambele cazuri. Liderii manifestă autoritate prin trăsăturile personalității lor. Sunt persoane carismatice cu o comunicare foarte bună, care reușesc să atragă.

Managerii manifestă autoritate prin puterea care le este dată de poziția din organigramă.

Liderii sunt orientați spre oamenii, pentru că ei creează acele relații personale cu ”followerii”, înțelegându-le nevoile și ce îi determină să se implice atât de activ în implementarea unei viziuni. De menționat este faptul că liderii deși sunt orientați către relații, ei au mereu în vedere sarcina pe care urmează să o realizeze.

Managerii sunt orientați spre sarcină și pe ceea ce este de realizat, mai mult decât spre crearea unei relații cu angajații și înțelegerea nevoilor lor.

Liderii prin definiția lor sunt căutători de riscuri, ei văd în provocările pe care le întâmpină, oportunități și profită pe cât posibil de ele.

Managerii sunt cei care sunt mai puțin dispuși să își asume riscuri și încearcă pe cât posibil să evite conflictele, fără a lua în considerare că uneori situațiile conflictuale pot da naștere unor soluții cu impact pozitiv.

Stilul de Leadership DELEGATIV

Rolul lider-ului este unul scăzut, deoarece angajații au și expertiza și motivația necesară pentru a îndeplini cu succes sarcina de lucru. Este încurajat ca angajații să dețină controlul, iar liderul întervine fie când este solicitat, fie în situații de criză. Deciziile îi aparțin în totalitate angajatului, care cunoaște deja foarte bine sarcinile de lucru. Este etapa în care angajații pot primi noi responsabilități, poate chiar de Leadership.

Stilul de Leadership DIRECTIV

Rolul lider-ului este unul ridicat, fiind direct responsabil de îndeplinirea sarcinilor. Membrul echipei, având motivația ridicată și nivelul de cunoștințe scăzut, liderul este cel care ia deciziile și comunică sarcina de lucru și o explică foarte în detaliu pentru ca angajatul să înțeleagă și să știe ce are de făcut. Sunt exact primele săptămâni ale unui angajat la un loc de muncă, când entuziasmul lui este peste măsură, iar fiecare sarcină îi dă prilejul să fie motivat că o poate îndeplini.

Stilul de Leadership COACHING

Este unul dintre cele mai dificile stiluri de Leadership, deoarece angajații trec print-o perioadă de demotivare în care și nivelul lor de expertiză este unul scăzut. Rolul liderului este dublu în această situație, fiind direct responsabil de creșterea motivației, dar și de creșterea expertizei, astfel este necesar să fie atent la modul în care comunică sarcina și la timpul pe care îl dedică angajatului. Este cea mai periculoasă etapă a Leadership-ului situațional, deoarece riscul de a părăsi echipa este unul destul de ridicat. Această etapă se întâmplă la puțin timp după angajare, când angajatul motivat

www.todaysoftmag.ro | nr. 7/2012

21


HR Leadership Situațional

de la începutul perioadei începe să se îndo- și vârsta pe care angajații o au, deoarece iască de capacitățile lui, într-un context și o influențează factorii motivaționali. (Ex: (1) echipă nouă. angajații tineri (25 – 30 ani) sunt motivați de programele de dezvoltare și de cât de Stilul de Leadership SUPORT mult investește compania în crearea unui Rolul liderului este de a facilita plan de carieră al lor, (2) angajații trecuți discuțiile și deciziile, care se încurajează a de vârsta de 30 ani sunt motivați de posifi luate de către angajat, care deja a ajuns la bilitatea unui program flexibil sau munca un nivel de expertiză destul de ridicat. De de acasă, pentru a putea petrece mai mult acestă dată liderul este cel care stimulează timp cu familia, (3) angajații mai în vârstă pozitiv fiecare reușită a angajatului pentru (45 – 55 ani), care au ajuns la un nivel de a-i crește nivelul de motivație. expertiză ridicat pot fi motivați de impliPentru ca aceste stiluri de Leadership să carea lor în pregătirea și dezvoltarea celor fie implementate cât mai bine este necesar mai tineri). Sunt câteva aspecte, de care este ca fiecare lider să își cunoască îndeaproape recomandabil să se țină cont. fiecare membru al echipei. Sistemul de recompensare pentru Nivelul de expertiză este simplu de creșterea motivației, este din nou unul difeidentificat, deoarece încă din prima clipă în rit. Majoritatea companiilor pun accentul care angajatul începe la noua companie se pe motivația financiară, care însă nu este știe gradul de cunoștințe teoretice și prac- totul și care poate acoperi primele 2 nivele tice pe care le deține. Evoluția este simplu ale piramidei lui Maslow, dar cu celelalte 3 de urmărit, prin constanta monitorizare ce se întâmplă? Răspunsul este simplu, se a modalității prin care își îndeplinește pot folosi alte tipuri de recompense: sarcina, prin ajutorul pe care îl solicită cole• Recunoașterea publică a gilor sau liderului. De aceea este necesară o contribuției fiecărui angajat prin oferirea evaluare a performanțelor pentru a se ana- de medalii, titluri sau avansări în funcție; liza evoluția fiecărui angajat. • Programe de recunoaștere: Nivelul de motivare este însă mai greu angajatul lunii (prin criterii clar definite), de identificat, deoarece este necesară cre- sărbătorirea succeselor; area unei relații de încredere cu angajatul • Premii speciale pentru realizări și înțelegerea factorilor care îl motivează și deosebite, din nou prin oferirea de medalii îl ajută să devină productiv. Un sistem de si titluri; referință poate fi arhicunoscuta teorie a • Beneficii extra-salariale; lui Maslow. Este important de ținut minte • Oportunități de dezvoltare și

22

nr. 7/2012 | www.todaysoftmag.ro

promovare profesională. Și acestea sunt doar câteva exemple de modalități prin care angajații pot fi motivați. Pentru a identifica și mai bine nivelul de satisfacție, se pot utiliza instrumente de evaluare a motivației: chestionare, interviuri și discuții individuale, focus grupuri. Teoretic vorbind, e simplu, în schimb când vine vorba despre implementare este mai dificil, dar cred că rezultatele care ar urma să se obțină ar fi deosebite. Cine nu și-ar dori să aibă un job la care să vină cu plăcere în fiecare dimineață? Nu cred în compania ideală sau în jobul ideal, dar cred cu tărie că e e necesar să îți înțelegi responsabilitățile, să le faci cu plăcere, să faci parte dintr-o echipă (nu dintr-un grup de oameni) cu o viziune și obiective comune, cu un manager care să fie mai mult decât o persoană într-o poziție ierarhică, pentru că în felul acesta se poate trece mai ușor peste situațiile mai puțin plăcute care pot fi întâmpinate. Am ocazia să întâlnesc zilnic lideri din toate cele patru categorii mentionate mai sus. Văd lideri directivi, care sunt acolo să ofere cele mai detaliate explicații despre cum se realizează o sarcină și cum ajung la nivelul în care sarcina este înțeleasă și realizată ulterior cu ușurință. Văd lideri care motivează angajați și care sunt preocupați de nevoile lor de dezvoltare și contruiesc împreună cu angajații un plan de carieră. Văd lideri care scot ce e mai bun din oameni prin feedback și suport continuu. Văd colegi care sunt capabili la rândul lor să devină lideri pentru cei cu mai puțină experiență și cărora le sunt delegate roluri și responsabilități mai mari. Văd o organizație care crește frumos pentru că oamenii din interiorul ei cresc frumos. Vă doresc succes și dacă doriți să vă documentați mai în detaliu: Management of Organizational Behavior (10th Edition) by Paul Hersey, Kenneth H. Blanchard and Dewey E. Johnson (Jul 28, 2012).


programare

TODAY SOFTWARE MAGAZINE

Pledoarie pentru PHP

P

HP este un limbaj de programare dedicat dezvoltării paginilor și aplicatiilor web. Numele lui este un acronim recursiv însemnând PHP: Hypertext Preprocessor, nume adoptat după lansarea versiunii 3.0.

Ioan Bercea

ioan.bercea@3pillarglobal.com Senior Web Developer @ 3Pillar Global Pasionat dezvoltator web, un geek atent la noutatile din domeniu si care vede fiecare proiect o incercare. 10 ani experienta in dezvoltarea web, si am lucrat cu PHP, Perl, si ASP. Am lucrat in principal pe proiecte web, aplicatii web, in detrimentul paginilor web simple. Am perseverat si am continuat sa dezvolt folosind limbajul PHP, limbaj pe care il recomand in dezvoltarea proiectelor de orice dimensiuni.

Prima versiune creată în 1994 de Rasmus Lerdorf, a fost scris în C și a fost o suită de scripturi pentru a monitoriza vizitele către pagina personală a acestuia (Personal Home Page Tools). Cu timpul acesta a adus mai multă funcționalitate suitei de scripturi, astfel încât aceasta era capabilă de conexiune la baze de date, oferind astfel utilizatorilor capabilitatea să dezvolte pagini de web dinamice. Dupa o perioadă în care a experimentat cu diverse noi functionalități, a revenit în 1995 cu o versiune rescrisă a PHP-ului. Limbajul a fost intenționat a fi asemănător cu C in structură, pentru a putea fi ușor adaptat de dezvoltatorii initiați cu C, Perl si alte limbaje similare. În 1996 noua versiune 2.0 cuprindea suport pentru DBM, mSQL şi Postgres95, cookies, upload de fisiere și alte functionalități importante paginilor web dinamice. În 1997, Andi Gutmans, Zeev Suraski și Rasmus Lerdorf s-au decis să rescrie și să îl transforme într-un limbaj de programare matur/modern, având ca rezultat versiunea 3.0, o versiune care a avut un mare succes în rândul dezvoltatorilor de web acoperind 10% din serverele web pe internet.

Ca urmare a acestui succes și a faptului că se dezvoltau nu numai pagini web ci şi aplicații web, a fost nevoie de îmbunătățirea performanței, astfel luând naștere versiunea 4.0 în anul 2000, în spatele careia apare pentru prima dată motorul Zend Engine. Versiunea 5.0, cea mai matură până în prezent, bazată pe motorul Zend Engine 2.0, a fost lansată in 2004, și aduce suportul pentru programarea OOP în PHP. Împreună cu câteva proiecte foarte apropiate de limbaj: PEAR si PECL, PHP-ul aduce o multitudine de facilități, librării și extensii.. Aşadar, după această scurtă introducere în limbajul PHP nu putem nega că a făcut dezvoltarea web accesibilă utilizatorilor.

Integrarea cu serverele web

Integrarea PHP-ului cu serverele web a cunoscut o varietate de modele. Primul dintre ele, CGI, a fost baza de la care s-a plecat în dezvoltarea şi adaptarea acestui limbaj de programare. Modurile prin care acest limbaj de programare a fost integrat in serverele web sunt: CGI/FastCGI/SAPI pentru Apache, CGI/FastCGI/ISAPI pentru IIS produs de Microsoft, și FPM pentru noul si promițătorul web server nginx, www.todaysoftmag.ro | nr. 7/2012

23


programare Pledoarie pentru PHP

server web cu o crestere majoră în ultima perioadă datorită performaţei crescute și stabilităţii ridicate. CGI – Common Gateway Interface, înseamnă că de fiecare dată când serverul web primeşte o interogare pentru o pagina PHP, acesta încarca un process nou de PHP, acesta procesând cererea și oferind înapoi rezultatul serverului web, care la rândul lui îl trimitea browserului web. O îmbunătățire a fost făcută cu FastCGI, astfel că nu la fiecare request să se creeze un proces nou, ci acesta sa fie refolosit pentru alte cereri. Un proces de reciclare a fost de asemenea implementat, astfel că aceste procese aveau o perioadă fixă de viață determinată de numarul de cereri sau perioada de timp de viață a procesului. Integrarea ca modul în serverul web Apache(SAPI) a fost încă o variantă în care PHP-ul a fost integrat în serverul web, PHP-ul devenind o componentă activă a serverului web și nu mai era un proces separat. Pentru serverele Windows, IIS aceasta poarta numele de ISAPI. Cea mai nouă și cea mai avansată metodă de integrare, FPM (FastCGI Process Manager), este mai mult decât un simplu FastCGI, prin facilitățile pe care această tehnologie le aduce: control fin al procesului PHP care rulează, capabilitatea de a controla numărul de procese în funcție de incărcarea serverului, controlul acestor procese prin pornirea acestora sub diferiţi useri și multe altele. Dezvoltarea continuă şi interconectarea cu serverele web în vederea creșterii performanței si al unui nivel de securitate

24

nr. 7/2012 | www.todaysoftmag.ro

ridicat continuă să țină PHP-ul ca limbaj de Oricum Python este un limbaj popular, programare preferat in relație cu alte lim- care câștigă din ce in ce mai mulți adepți baje de programare. în ultima perioadă datorită eleganței acestui limbaj, fapt exemplificat prin folosirea PHP vs alte limbaje acestui limbaj de către Google.

PHP vs. Perl

PHP a avut ca prototip limbajul Perl, deci şi sintaxa este asemănătoare, prin urmare PHP-ul are trăsături comune cu Perl-ul. Dar PHP-ul a fost de la bun început un limbaj de programare pentru web, pe când Perl-ul a fost creat ca un limbaj de scripting.

PHP vs Python

PHP și Python sunt cele mai populare limbaje de programare pentru web in această perioadă. Sintaxa PHP-ului este asemănătoare cu limbajul C, oricine care a lucrat cu C asimilează acest limbaj intrun timp foarte scurt. Sintaxa limbajului Python este bazată pe identare și este și ea foarte simplă, asemănătoare pseudo-codului. Folosind limbajele PHP, Perl, Ruby ai de cele mai multe ori mai multe soluții pentru a implementa o anumită funcționalitate, pe când folosind limbajul Python nu este așa încurajând dezvoltatorii să rezolve de la bun inceput o problemă folosind cea mai bună soluție. PHP-ul deține o listă mai mare de utilitare de profiling, debuging, frameworkuri, extensii si librarii open source, facând munca dezvoltatorului una mai ușoară, acestuia revenindu-i doar alegerea instrumentului necesar în rezolvarea problemei cu care se confruntă.

PHP vs ASP:

PHP-ul utilizează o structură a limbajului asemănătoare cu C/C++ pe când ASP una asemănătoare cu Basic, iar performanţa PHP-ului este una ridicată pentru că rulează in zone de memorie dedicate (CGI/ FastCGI).

PHP vs Ruby:

Ruby si prin framework-ul Rails, și-a atras foarte mulți adepți de la lansare. Mulţi programatori PHP migrează după câţiva ani înspre acest limbaj, dar de fapt migrează nu spre un limbaj de programare ci spre un duplex: limbaj de programare cu un framework. Ambele sunt puțin deficitare, la capitolul documentaţie, dar PHP-ul are avantajul longevității pe când la Ruby, aceasta nu a mai putut ține faţă creşterii rapide și are cateva lacune in documentație. Trendul în folosirea PHP-ului pentru site-urile web rămâne încă unul crescător, de la 77.2% dintre site-uri web in decembrie 2011, la 78,5% in decembrie 2012.

Avantaje

Fără a intra în polemici şi fără a începe un război al limbajelor de programare server side, putem uşor distinge avantajele alegerii PHP-ului ca limbaj de programare pentru un proiect web: un număr mare de


diverse

experți în comparație cu celelalte limbaje, o documentaţie bogată, o comunitate mare şi multitudinea de resurse de ajutor (librarii, extensii, framework-uri moderne) Dezvoltatorul web nu este definit de un limbaj de programare, acesta fiind doar un instrument al muncii sale. Când proiectul o cere, el poate alege un alt instrument sau chiar mai multe, poate chiar mai eficient(e) pentru respectivul proiect.

Dezavantaje

PHP-ul ca limbaj de programare are o istorie destul de lungă, iar de-a lungul timpului a cunoscut multe rescrieri, îmbunătățirii și fixuri. Unele dintre cele mai numeroase erau din categoria securitate. Dar acestea sunt probabil legate de procesul prin care versiunile de PHP erau inițial lansate, un proces care a fost schimbat recent. Deși este un limbaj de programare open source, PHP-ul are mai nou un grup organizat denumit PHP/QA Team, care are ca scop principal susținerea dezvoltatorilor printr-o calitate ridicată a versiunilor lansate. Pe de altă parte PHP-ului, i se poate reproșa câteva elemente de neconsistență: numele neconsecvent al funcțiilor, ordinea nefirească a parametrilor unei funcții, anumite soluții adaptate care pot fi puțin stangace. La un anumit nivel, acest limbaj cere mai multă atenție dezvoltatorului, tocmai datorită flexibilității mari pe care o oferă acest limbaj.

Framework-uri

TODAY SOFTWARE MAGAZINE

adaptate la noile cerințe în materie de performanță, securitate și scalabilitate. Framework-uri mature ca Symfony și Zend Framework ajunse amandouă la versiunea 2.x, utilizează noile facilități puse la dispoziție de limbajul de programare. În paralel, dezvoltarea librariilor ORM(Object Relational Mapping) folosite de aceste framework-uri ține pasul cu noile necesități. Printre cele mai importante Doctrine, Propel și ZendORM au progresat, si chiar există o concurență constructiva între ele, spun constructivă, pentru ca aceasta declansează o creștere importantă a performaței acestora. Framework-ul Symfony, s-a remarcat de la apariție ca fiind un framework php care promovează un design si o structura care permite o dezvoltare rapidă a aplicațiilor (RAD). Symfony încurajează dezvoltatorul să respecte un set de bune practici în dezvoltarea aplicatiilor web. De asemenea o comunitate în creștere si activa face ca acest framework sa fie unul foarte atractiv pentru dezvoltarea de aplicații web. În momentul de față, Symfony se definește a fi: un framework PHP, o filozofie si o comunitate. Unul dintre framework-urile CMS, Drupal a anunțat anul acesta că de la versiunea 8.0 va folosi componente Symfony, ceea ce demonstrează că Symfony e un model de urmat și oferă pe lângă un framework complet pentru dezvoltarea aplicațiilor web, si alte resurse și inovații integrabile independent în alte proiecte web. Am dat ca exemplu acest framework, datorită experințelor mele plăcute cu el. Experiențe nelipsite de incercări sau provocări şii chiar de-a dreptul interesante. Una dintre calitățile pe care le văd la acest framework, pe lângă resursele bogate ca documentație, pluginuri, bundle-uri, code snippets, tutoriale (chiar video), este faptul că acest framework oferă dezvoltatorului mai mult timp pentru a rezolva problemele de arhitectură, de design al noului produs, în detrimentul la a scrie cod în cantități industriale. Pentru orice problemă există o soluție deja scrisă, lăsând dezvoltatorul să rezolve doar probleme specifice proiectul.

Ca o consecință a creșterii prezentei PHP-ul ca limbaj preferat al dezvoltatorilor web, au apărut numeroase framework-uri dedicate diverselor tipuri de web site-uri și/sau applicații web. Au fost acoperite majoritatea domeniilor: de la e-commerce, blogging, pagini de socializare până la infrastructura aplicatiilor web complexe prin framework-urile de tip MVC (Model/ View/Controller). Wordpress, ca un framework de tip CMS (Content Management System), a ușurat dezvoltarea multor website-uri de tip blog, făcând din nou, web-ul accesibil nu numai experților, sau dezvoltatorilor, dar și editorilor de conținut informational de pe net. Framework-uri ca Magento si Cazuri celebre osCommerce dedicate magazinelor online au adus și ele o infrastructura pentru o Facebook multime afaceri de retail online. Pe lângă numeroase și cunoscute mari Framework-urile de tip MVC sunt în website-uri realizate în PHP (Wikipedia, continuă dezvoltare, apărând noi versiuni Yahoo, Digg, etc) este și Facebook, care

este un caz special, nu doar datorită complexității acestuia, a încercărilor și a obstacolelor tehnice prin care trec echipele (dezvoltare, deploy, QA) de la Facebook, dar și prin modul de rezolvare a unei probleme specifice proiectelor de o asemenea amploare. Performanța PHP-ului a devenit motiv de ingrijorare în cadrul echipei dupa cresterea masivă a utilizării portalului, și au ajuns la a face o alegere între a inlocui PHP sau a găsi o altă metodă de imbunătățire a acestei performanțe. Și astfel a apărut proiectul HipHop, acesta fiind lansat in 2010 ca proiect open source pe github, sub licență PHP 3.0. HipHop pentru PHP este un instrument de transformare a codului PHP în cod cod sursă, realizându-se astfel o reducere a utilizării CPU pe serverele Facebook de până la 6 ori. O îmbunătățre mai mult decat masivă, care este acum disponibilă comunității PHP.

Yahoo

Un alt caz demn de menţionat este Yahoo, la care în anul 2002 s-a inceput trecerea de la un sistem proprietar scris în C/ C++ la PHP.

Viitorul

Relativ recent au fost lansate versiuni noi, 5.2, 5.3, 5.4 si 5.5-Alpha, prin care se continuă o îmbunătățire majoră a limbajului de programare. S-au adăugat acestuia suport pentru Namespace-uri, „traits”, „late static bindings”, „generators”, alături de îmbunătăţiri mai mici şi defecte fixatei. Versiunea 6.0, care deocamdată se lasă puţin aşteptată, promite un suport nativ complet pentru Unicode în PHP și este incă in dezvoltare.

Concluzie

PHP-ul ca limbaj de programare activ, în dezvoltare, are o fundație solidă, un istoric bogat, o comunitate activă și inovatoare. Librarii, extensii, framework-uri și module se dezvolta intr-un ritm continuu si accelerat oferind dezvoltatorului web o paleta întreagă de alegeri în proiectarea și implementarea unei soluții complete. PHP rămâne înca principalul limbaj de programare folosit pentru web.

www.todaysoftmag.ro | nr. 7/2012

25


programare

Platforme de rulare alternative pentru PHP

P

HP este un limbaj dinamic, disponibil pe o multitudine de platforme folosind interpretorul standard. Există totuşi alternative la acest interpretor care oferă diferite caracteristici care pot să fie avantajoase în anumite circumstanţe. Acest articol îşi propune să ofere o prezentare sumară a opţiunilor existente cu o prezentare teoretică şi o parte practică. Partea practică constă în rularea unui test de performanţă sintetic din distribuţia PHP şi testarea unui site WordPress cu Apache Bench .

Attila-Mihaly Balazs dify.ltd@gmail.com

Code Wrangler @ Udacity Trainer @ Tora Trading

26

nr. 7/2012 | www.todaysoftmag.ro

Platforma de testare a fost o maşină virvalorile teoretice ale altor platforme tuală cu 4 procesoare i7 2.4GHz cu sistemul mai exotice; de operare Ubuntu 12.10 Server / Windows 7 Pro şi 1G de memorie. S-a folosit o Interpretorul standard PHP disponibil instalaţie de WordPress 3.4.2 populat cu pe php.net este scris în C şi execută codul conţinutul site-ului transylvania-jug.org. sursă în doi paşi: Baza de date folosită pentru WordPress a • parsează codul sursă şi generează o fost MariaDB 10.0 sub Linux şi MySQL 5.5 serie de bytecode-uri care reprezintă sub Windows. funcţionalitatea conţinută în fişierul Testele de performanţă au fost repetate original. de mai multe pentru a vedea dacă rezulta• execută bytecode-ul cu ajutotele sunt stabile şi reproductibilie. În cazul rul interpretorului şi generează platformelor care folosesc tehnologia JIT rezultatul. s-a executat o etapă de “încălzire” ca să mă asigur că a rulat procesul de compilare. Această strategie de execuţie sugerează o posibilitate de optimizare evidentă: Interpretorul standard memorarea bytecode-ului generat şi evi• Uşu rinţa c onf ig u r arii/ uti li- tarea parsării repetate a sursei dacă acesta zarii: uşor (de multe ori vine nu s-a modificat. Această optimizare este preconfigurat); implementată de mai multe librării cunos• Cost: gratis; cute sub denumirea de “PHP opcode • P l a t f o r m e s u p o r t a t e : * n i x , cache” sau “PHP accelerator” dintre care Windows, Mac OS X, ... am testat patru (o listă mai detaliată poate • Avantaje: uşurinţa de folosire, com- fi găsită pe Wikipedia): patibilitate aproape perfectă, spor • APC - Alternative PHP Cache, de performanţă peste 50% (în cazul • XCache, opcode cache-urilor); • eAccelerator, • Dezavantaje: Sporul de perfor• Zend Server. manţă este mic comparativ cu


management

Primele trei opţiuni sunt open-source şi gratis, iar a patra este un produs comercial al companiei Zend Technologies care include mai multe facilităţi cum ar fi monitorizarea performanţei, depanare uşurată şi aşa mai departe. Pentru testare s-a folosit Apache 2.2 în modul mpm-prefork cu mod-php. Am testat scurt şi varianta FastCGI dar n-am observat o diferenţă de performanţă (acesta fiind zise, testul s-a concentrat exclusiv asupra performanţei de execuţie a PHP-ului - într-o situaţie mai puţin artificială este foarte posibil să existe diferenţe substanţiale între cele două alternative). O alternativă testată separat (a se vedea “IIS 7.5 cu PHP 5.4.9” mai jos) este WinCache care oferă facilităţi similare. Este sponsorizat de Microsoft şi este specific pentru platforma Windows / server-ul IIS. Am rulat testele şi în prezenţa extensiei de securitate Suhosin şi nu a fost observat nici o degradare de performanţă. Acest lucru exemplifică faptul că securitatea nu trebuie neapărat să deterioreaze alte caracteristici (cum ar fi performanţa). Cum se poate vedea din rezultatele de la finalul articolului, aceste soluţii oferă un spor de viteză de peste 50% în cazul execuţiei repetate de cod PHP dinamic. Dacă codul respectiv este executat o singură dată, ele nu oferă nici un avantaj, ba chiar încetinesc puţin procesul de execuţie (cum se poate vedea în coloana “bench.php” din tabelă unde valoarea cea mai mică găsim în cazul în care n-am folosit nici un opcode cache). Menţiune: aceste soluţii sunt generale funcționând pentru orice tip de site care se foloseşte de PHP. Pentru cazuri specifice există soluţii care pot să aducă un spor de performaţă mult mai mare faţă de soluţiile generice. De exemplu instalând un plugin de cache-ing pentru WordPress am putut să reduc timpul de execuţie pentru ApacheBench la 0.08 secunde (o îmbunătăţire de peste 80x fată de cel mai bun opcode cache!).

Hip-Hop VM de la Facebook •

• • •

Uşurinţa configurarii/utilizarii: mediu (există pachete precompilate pentru anumite distribuţii de Linux); Cost: gratis; Platforme suportate: *nix; Avantaje: performanţă sporită

TODAY SOFTWARE MAGAZINE

(teoretic); Dezavantaje: numărul restrâns de plaforme suportate, numărul restrâns de plugin-uri (extensions) suportate , nu toate funcţiile PHP sunt suportate (de exemplu nu este suportat preg_replace).

Hip-Hop VM este un mediu de rulare pentru PHP folosit de cei de la Facebook pentru rularea codului PHP din spatele site-ului Facebook. El a fost scris pentru că acceleratoarele (opcode cache-urile) clasice nu ofereau sporul de performanţă dorit dar în acelaşi timp compania n-a vrut să schimbe limbajul de programare folosit. Ca proiect, Hip-Hop a trecut prin mai multe faze : • iniţial, transforma codul PHP în cod C++, care era compilat cu GCC . Proiectul era numit HPHPc în această fază, • compilarea folosind HPHPc cu GCC era lentă (comparativ cu modul de lucru obişnuit “salvează şi rulează” a unui dezvoltator PHP). Din acest motiv s-a creat HPHPi care avea ca scop rularea codului într-un mediu asemănător cu cel de producţie, dar fără ca programatorul să aştepte tot procesul de compilare, • în faza curentă se lucrează la crearea unei maşini virtuale numit HHVM care să optimizeze codul folosind tehnologia JIT.

server”, cea ce înseamnă că se ocupă de toate aspectele rulării aplicaţiei, nefiind necesar folosirea unei alte aplicaţii (de exemplu, Apache ca şi server web, Squid/ Varnish pentru reverse proxy, un database connection pooler, etc), toate aceste roluri fiind îndeplinite de Resin. Modulul din Resin responsabil pentru rularea codului PHP se numeşte Quercus. Cei care au folosit alte application servere Java gen Tomcat se vor simţi acasă. Ceilalţi vor avea nevoie de puţin timp de acomodare. Avantajul cel mai mare oferit de Resin este integrarea uşoară a codului Java cu PHP (din codul PHP pot fi instanţiate clase Java, apelate metode Java etc). Totodată este o soluţie demnă de luat în calcul în cazul unei companii unde există multă expertiză pe partea de Java şi trebuie folosite câteva aplicaţii PHP. Cel mai mare dezavantaj este faptul că nu foloseşte librăriile standard PHP, ci le reimplementează pe toate în Java (iar setul funcţiilor reimplementate nu este încă complet). Există două versiuni a serverului: cel open source, disponibil gratuit şi cel comercial pe bani. Performanţa îl situează în mijlocul soluţiilor testate.

IIS 7.5 cu PHP 5.4.9 •

• • •

Uşurinţa configurarii/utilizarii: mediu / dificil; Cost: pe bani (IIS, Windows) / gratis (PHP); Platforme suportate: Windows; Avantaje: disponibilitatea tuturor extensiilor standard, integrare cu tehnologii Windows (COM, Active Directory, etc); Dezavantaje: cost, procesul de configurare complicat.

Instalarea s-a realizat folosind pachetele precompilate pentru Ubuntu 12.04 (compilarea eşuează momentan pe Ubuntu 12.10) şi indicaţiile pe blog-ul “HipHop for • PHP” . Anumite plugin-uri de WordPress au trebuit dezinstalate pentru că folosesc funcţii nesuportate de HHVM. Rezultatele Există mai multe metode pentru instalaobţinute au fost mult sub aşteptări. rea interpretorului standard sub Windows: manual, folosind WebPI , pachete gen Caucho Resin XAMPP , etc. Pentru acest test s-a ales • Uşurinţa configurarii/utilizarii: instalarea manuală pentru că WebPI instamediu-uşor; lează PHP 5.3. S-a instalat şi WinCache • Cost: gratis / pe bani; 1.3.4 pentru o performanţă mai bună • Platforme suportate: Windows, (WinCache nu este instalat de WebPI). Linux, Mac OS X, etc; Au fost întâmpinate mai multe dificultăţi • Avantaje: performanţă sporită, clus- în timpul procesului de benchmarking, cel tering, scalabilitate, integrare uşoară mai deranjat fiind prezenţa unui timp mort cu sisteme Java; approximativ 2 secunde la fiecare cerere • Dezavantaje: numărul de extensii HTTP, cea ce a rezultat în valori foarte limitată, cost. proaste la prima rulare a testului. Cauza a fost o problemă de DNS şi a fost rezolvat Caucho Resin este un “application cu ajutorul opţiunii “skip-name-resolve” în www.todaysoftmag.ro | nr. 7/2012

27


programare Platforme de rulare alternative pentru PHP

configuraţia de MySQL şi prin modificarea sursei de Wordpress în sensul utilizării de conexiuni persistente.

IIS 7.5 cu Phalanger 3.0 • • • •

Uşurinţa configurarii/utilizarii: mediu / dificil; Cost: pe bani (IIS, Windows) / gratis (PH); Platforme suportate: Windows, Linux (prin Mono); Avantaje: disponibilitatea tuturor extensiilor standard, posibilitatea de a folosi extensii native, compilate pentru Windows, integrare cu .NET, integrare cu tehnologii Windows (COM, Active Directory, etc); Dezavantaje: cost, procesul de configurare complicat.

Phalanger este o implementare a limbajului PHP pe platforma .NET de la Microsoft. Este un proiect open source şi poate fi folosit pe mai multe platforme / cu mai multe servere web (Apache sub Windows, IIS sub Windows, Apache sub Linux cu Mono). Dintre ele, varianta cu IIS este cea mai uşoară de configurat, de aceea s-a ales testarea ei. Pe lângă presupusul avantaj de viteză, Phalanger mai are câteva avantaje: • integrarea strânsă între .NET şi PHP (din PHP poate fi apelat cod .NET şi invers), • include un compilator care poate să genereze executabile din fişiere PHP (care depind the framework-ul .NET şi librăriile Phalanger), • poate să folosească extensii native, compilate pentru Windows daca nu este disponibilă varianta “managed” a acestora.

• •

php.js - este o implementare parţială a unui compilator PHP-la-Javascript. Acest lucru creaeză fundaţia la cazuri de folos interesante (cum ar fi rularea codului PHP direct într-o pagină web sau pe partea de server cu Node.js), dar momentan nu poate să parseze nici măcar bench.php. Roadsend PHP şi Roadsend PHP Raven - sunt două compilatoare PHP înrudite care nu mai sunt dezvoltate în mod activ şi nu sunt compatibile cu versiunile curente ale librăriilor folosite. Pipp - este implementarea de PHP pentru ParrotVM, o maşină virtuală creată pentru “compilarea şi executarea bytecode-ului limbajelor de programare dinamice”. Nu este dezvoltat în mod activ şi nu este compatibil cu librăriile curente. PHP4Mono - a fost dezvoltat în 2005 în cadrul unui proiect de diplomă. Dezvoltarea s-a oprit în 2006, iar varianta curentă nu este capabilă să compileze bench.php. Project Zero / IBM sMash - un proiect de la IBM care nu mai pare să fie suportat. Era un runtime scris în Java care avea ca avantaj faptul că putea să folosească direct extensiile native de PHP prin JNI.

Concluzii

Nu există o soluţie generală care să funcţioneze pentru orice fel de aplicaţie PHP. Tehnologiile / platformele merită considerate dacă există o necesitate de a oferi o funcţionalitate specifică lor (de exemplu integrare cu Java sau .NET) dar nu oferă un avantaj de performanţă. În acelaşi timp folosirea lor presupune un grad ridicat de familiaritate cu platforma respectivă (de exemplu WEBINF/ sau web.config) şi nu este recomandată celor care n-au mai Alternative netestate folosit platforma pentru alte aplicaţii. Opţiunile analizate în detaliu au fost cele uşor accesibile şi Punctul de pornire ar trebui să fie un opcode cache (probasuportate în mod activ de comunitate. Insă o multitudine de pro- bil APC sau eAccelerator) şi module specifice aplicaţiei pentru iecte care nu se încadrează în aceste categorii, dintre care vom cache-ing (cum ar fi W3 Total Cache sau WP Super Cache pentru enumera: Wordpress). • TalariaTech - un produs comercial, site-ul lor conţine foarte puţine detalii. Vorbeşte despre un câştig de performanţă de 10x “pe aplicaţii reale gen WordPress sau Drupal”. Rezultatele testelor de performanţă • php-llvm - este o extensie care generează cod nativ din bytecode-urile de PHP folosindu-se de proiectul LLVM . Este în stare incipientă a dezvoltării, n-am reuşit să-l compilez. • phc - the open source php compiler - se bazează pe acelaşi idee ca şi versiunea iniţială de la Hip-Hop (transcrierea codului PHP în cod C++ şi compilarea lui cu GCC). Din păcate versiunea curentă nu poate fi compilată sub Ubuntu 12.10. • Hippy VM - proiect open-source bazat pe PyPy. A fost gândit ca şi un test de performanţă, nu are acces la extensiile PHP, nu oferă un mod de a fi integrat cu un server web.

28

nr. 7/2012 | www.todaysoftmag.ro


business

TODAY SOFTWARE MAGAZINE

Care sunt cu adevărat castraveții grădinarului ISV?

N

u mai este o surpriză pentru nimeni că trăim timpuri hiperdinamice în care ritmul impus de noile tendințe și tehnologii creează un mediu favorabil celor care sunt capabili să se adapteze rapid, anticipând pozițiile pe care piața le va adopta.

Mihai Nadăș mihai.nadas@tss-yonder.com CTO @ Yonder CTO la Yonder, în rolul său fiind responsabil de activitățile R&D și creșterea nivelului de inovație al produselor partenerilor Yonder.

Organizațiile se află astfel sub presiunea de a-și crește gradul de agilitate, iar după cum am învățat în ultimele câteva decenii cel mai eficient mod de a realiza acest deziderat este prin concentrarea eforturilor organizației asupra aspectelor care contează cu adevărat și totodată externalizarea funcțiilor ce pot fi gestionate mai eficient de către experți externi acesteia.

fel de clară. Întrebarea care apare este - care sunt cu adevărat „castraveții” producătorilor de soluții software standard? Sau altfel spus, are sens ca un ISV să-și externalizeze procesul de dezvoltare al propriului produs?

Provocările unui ISV

Pentru a răspunde corect la această întrebare, întâi trebuie să privim puțin asupra principalelor provocări pe care companiile Dilema ISV le au în noul context de dezvoltare al Provocarea constă în a diferenția produselor software. funcțiile critice, ce conferă unicitate valorii de piață a organizației, de cele ce pot fi Flexibilitate externalizate. Grădinarul nu va cumpăra Condiția de adaptare necesită flexibicastraveți de la alt grădinar, fiindcă ar litate în alocarea de resurse de dezvoltare. însemna să-și limiteze potențialul și valoa- Optimul poate fi atins doar cu echipe ce varirea adăugată, deci implicit și marja de profit, ază în timp ca mărime, iar această situație e însă va fi întotdeauna interesat să cumpere dificil de realizat în momentul în care cosechipamentele, tehnologia de cultivare, turile cresc de la an la an. Oportunitățile de îngrășămintele, pesticidele, fungicidele extindere și optimizare a produselor sunt și semințele de la furnizori specializați. neglijate din cauza presiunii care vine din Producătorii de soluții software standard partea pieței și a concurenței. Ideile noi tre(companiile ISV) se confruntă cu aceeași buie sa aștepte în lista de priorități, iar de dilemă, însă complexitatea ușor mai mare multe ori ajung să fie implementate cu întârdecât în cazul legumiculturii determină ca ziere, ratându-se astfel ocazii de dezvoltare granița dintre produsul final, procesul de și reducere a costurilor. dezvoltare și tehnologia folosită să nu fie la www.todaysoftmag.ro | nr. 7/2012

29


business Care sunt cu adevărat castraveții grădinarului ISV?

Inovație

Tehnologia evoluează într-un ritm cu care echipa de dezvoltare tradițională nu poate ține pasul astfel încât să aibă atât o viziune în ceea ce privește aplicabilitatea noilor tendințe și tehnologii cât și experiența în implementarea practică a acestora. Consecința se rezumă la întarzierea ciclurilor de modernizare care implică costuri și limitarea de oportunități noi. De pildă, Cloud Computing este o paradigma care inevitabil va dicta noua ordine în următorul deceniu, însă chiar dacă tehnologia din jurul acesteia este disponibilă pe piață de cel puțin 5 ani prea puține companii și-au definit o strategie clară de adopție. Va apărea un moment nu foarte îndepărtat în care se va trece pragul de adopție critică, iar cei care nu vor fi beneficiat de pe urma avantajelor oferite de noul model în acel moment vor avea de suferit.

Eficiență și predictibilitate

Procesul de dezvoltare a soluțiilor software este unul complex și expus riscurilor. De cele mai multe ori rigoarea este sacrificată în favoarea atingerii termenelor limită, iar aceasta are impact asupra calității și gradului de satisfacție a clientului final. Totodată, din cauza lipsei unui grad ridicat de maturitate, eficiența

30

nr. 7/2012 | www.todaysoftmag.ro

procesului de dezvoltare are de suferit, iar costurile finale ajung să fie semnificativ mai mari decât optimul.

DaaS

Lista de mai sus reprezintă un set comun de provocări pentru mai toate companiile ISV cu care intru în contact, indiferent de mărime. Soluția pe care am găsit-o ca fiind cea mai potrivită de fiecare data constă în externalizarea responsabilității de rezolvare a acestora. Motivul este unul cât se poate de simplu - „castraveții” companiilor ISV sunt produsele pe care le vând pe piață. Acest lucru înseamnă că ceea ce este cu adevărat esențial pentru aceste companii este să înțeleagă și să aibă o viziune asupra a ceea ce așteaptă piața, să structureze aceste cerințe și în final să vândă produsul. Procesul prin care cerințele identificate ajung să fie concretizate într-o nouă versiune de produs poate fi și conform observațiilor făcute de-a lungul timpului. La fel cum în 2020 prea puține companii vor mai cumpăra infrastructura de calcul pe care o vor gestiona în regim propriu, alegând în schimb modelul IaaS, la fel companiile ISV trebuie să înceapă să se gândească la un model similar pentru dezvoltarea tehnică a produselor lor. O

analogie simplă cu Cloud Computing m-a dus cu gândul la DaaS - Development as a Service. Credem că reprezintă cu fidelitate esența a ceea ce poate fi o nouă tendință în piața software și anume specializarea unor companii în direcția în care servesc producătorii de soluții software standard într-un mod transparent, dar complet externalizat procesul de dezvoltare (SDLC).

Legături externe • •

innovation.tss-yonder.com mihainadas.com


programare

TODAY SOFTWARE MAGAZINE

Introducere în Grails (II)

S

ă creem acum pagina de login a aplicației noastre. Cum am specificat la început, Grails folosește convenții. Acest lucru înseamnă că dacă avem o clasă domeniu numită “User” , va trebui să ai un “UserController” controller. Dacă în controller există o acțiune, ca și “login”, va trebui să ai un view numit “login” în folderul grails-app/ views/user.

Tavi Bolog tavi.bolog@nokia.com Development lead @ Nokia

Pentru crearea de view-uri, Grails oferă un script: generate-views com.todaysoftmag.gsn.User, dar pentru moment putem crea view-urile de mână. Numele fișierului este login.gsp (acronim pentru Groovy Sever Pages) și vom adăuga un form la el. Listingul fișierului este aici: https://github.com/tavibolog/ GrailsSocialNetwork/blob/master/grailsapp/views/user/login.gsp. Acesta este un fișier HTML cu taguri adiționale specifice Grails. Acestea sunt destul de asemănătoare cu alte template-uri de view-uri, așa că nu se va insista prea mult. Un lucru de menționat este parametrul “url” al form-ului Grails, care este folosit pentru specificarea controller-ului și acțiunii care trebuie să se execute când form-ului este postat. Să pornim aplicația acum, rulând comanda run-app și accesând http:// localhost:8080/GrailsSocialNetwork . Se observă că aplicația este redirectată spre pagina de login: http://localhost:8080/ GrailsSocialNetwork/user/login. Datorită filtrului pe care l-am creat, Grails a redirectat aplicația spre UserController și acțiunea “login”, care a afișat pagina “login”. Dacă încerci să te autentifici cu o combinație incorectă de utilizator și parolă, se observă un mesaj de eroare afișat de aplicație: “Wrong username and password!”, pentru că în acest caz, acțiunea “login” afișează pagina de login căreia îi transmite modelul, care este de fapt o mapă. In cazul nostru mapa conține o cheie “message” și valoarea asociată (mesajul de eroare). Apoi, în view-ul de “login”, verificăm existența variabilei “${message}” și o afișăm ca eroare. “model” este implicit in fișierel GSP, deci nu trebuie apelat în mod explicit. Să folosim acum credențialele corecte

ale unui user pe care l-am creat în BootStrap. Loginul este cu succes și suntem redirectați spre /message/list, dar deocamdată nu este nici o acțiune și view associate cu acest url și vedem pagina de eroare a Tomcat-ului.

Pentru a evita, vom adăuga acțiunea “list” în MessageController: def list() { def allMessages = Message.list() def myMessages = Message. findAllByUser(session.user) }

[allMessages: allMessages, myMessages: myMessages]

Această acțiune va returna toate instanțele Message și toate mesajele userului curent. După un login cu succes, obiectul reprezentând userul curent este setat pe sesiunea aplicației și poate fi folosit în controllere. Ambele operații sunt posibile datorită GORM. Actiunea va returna o mapă care va conține două liste și le vom afișa pe ambele în view-ul asociat: “list.gsp”. Câteva lucruri de menționat: • Numele cheii și valorii în mapa returnată este identic, dar aceasta e doar obișnuință și nu este nici o restricție aici. • În Groovy, cuvântul cheie “return” nu este obligatoriu, dar ultima expresie care poate fi evaluată este considerată valoarea returnată. • În mape se pot pune tipuri de date diferite, dar fiți atenți când le citiți. Listingul view-ului este aici: https:// github.com/tavibolog/GrailsSocialNetwork/ blob/master/grails-app/views/message/list. gsp www.todaysoftmag.ro | nr. 7/2012

31


programare

Câteva lucruri de menționat: Obiectul session este folosit pentru a afișa userul current logat în aplicație. Sintaxa “session?.user” este folosită pentru a verifica dacă obiectul “session” este null înainte de a accesa “user”-ul. • Flash.message este un mesaj informativ folosit pentru a afișa un rezultat al unei operații anterioare. Se va vedea mai jos cum un astfel de mesaj este creat în controllere. • G:link afișează un link spre acțiunea “create”. Pentru că nu este specificat nici un controller, acțiunea trebuie să existe în MessageController (controllerul current). • G:each este folosit pentru a itera peste liste de obiecte. Lista este declarată în parametrul “in” și se poate defini și un nume de variabilă în “var” pentru a fi folosită în interiorul buclei de iterare. Dacă nu este nici o variabilă definite, “it” este numele predefinit. Pentru a afișa un mesaj postat, apelăm metoda toString() implementată pentru clasa Message: •

String toString() {message + „ on „ + date + „ by „ + user}

care folosește toString() din clasa User (observați din nou ca folosirea lui “return” nu este obligatorie): String toString() {userName}

Acum vedem toate mesajele prietenilor nostril afișate și de asemenea le putem vedea pe ale noastre. Un ultim lucru pe care îl vom implementa este crearea unui nou mesaj pentru a ne putea ține prietenii la curent cu ceva facem acum. Pentru aceasta vom crea acțiunile “create” și “save” în MessageController și view-ul asociat aici: grails-app/views/message/create.gsp. Listingul este aici: https://github.

com/tavibolog/GrailsSocialNetwork/blob/ master/grails-app/views/message/create. gsp. Acțiunea “create” este folosită pentru a prelua eventuali parametri când se afișează view-ul. Este destul de basic, doar pasând parametric din request pentru a crea un

32

nr. 7/2012 | www.todaysoftmag.ro

Introducere în Grails (II)

obiect Message care va fi pasat înapoi “save” în a accepta doar HTTP POST, view-ului. în timp ce celelalte acțiuni nu au nici o def create() { restricție. }

[message: new Message(params)]

static allowedMethods = [save: „POST”]

Acțiunea “save” este cea care realizează postarea mesajului și se ocupă de validare Unit testing și redirectări: Grails creează în mod automat clase de def save() { unit test pentru fiecare controller, serviciu, def message = new Message(params) domeniu, filtru, etc creat. În acest capitol def user = User.findById(session.user.id) user.addToMessages(message) vom discuta despre scrierea și rularea unit if (!message.validate()) { render(view: „create”, model: testelor. Grails creează testele în folderul [message:message]) “test”. Testele pot fi “unit” și “integration” return } (mai există și o a 3-a categorie, funcționale, if (!user.save(flush:true)) { render(view: „create”, model: dar acestea folosesc alte framework-uri [message: message]) pentru a testa folosind request-uri HTTP). }else{ flash.message = „Message posted with success!” Testele de integrare au valoare în testarea redirect(action: „list”) } integrării componentelor aceleași aplicații } sau integrarea cu componente 3rd party. Nu Să vedem ce se întâmplă aici: vom insista cu acestea, dar vom menționa • Creăm un obiect Message din para- că ele pot fi rulate din consola Grails, folometri request-ului veniți din view-ul sind: test-app –integration sau test-app “create”, –integration <Nume complet calificat al unei • Luăm userul current și asociem clase de test>. Și că testele de integrare sunt mesajul cu el, mult mai încete decât unit testele datorită • Validăm mesajul. În acest moment contextului de care au nevoie. constrângerile pe care le-am definit Unit testele sunt partea mea favorită vor fi evaluate și în caz de erori vom din testare, pentru că sunt rapide, izolează o avea atributul “errors” are obiectului problemă în cod foarte rapid, nu depind de updatat cu erorile respective, alte sisteme care să ruleze și ajută la testarea • Dacă validarea nu este cu succes, corner-case-urilor (folosind mocking). vom re-afișa view-ul “create” cu Să scriem câteva unit teste, începând cu erorile pe care le avem (partea de MessageController class. Acesta are o clasă internaționalizare a mesajelor va fi de test asociată, MessageControllerTests: discutată în articolul următor), @TestFor(MessageController) class MessageControllerTests { • Dacă validarea este cu succes, perdef messageController @Before sistăm modificările și cerem GORM public void setUp() {messageController = new MessageController()} să golească buferul tranzatiilor sale, void testRedirectOnIndex() { • Dacă persistarea nu este cu succes, messageController.index() assertTrue response.redirectedUrl == vom re-afișa vieweul “create cu ero- „/message/list” rile pe care le avem, } } • Dacă totul este ok, aplicația va fi redirectată spre lista de mesaje, Să vedem ce se întâmplă aici: afișând un mesaj de tip “flash”. • A n n o t a r e a @ Te s t F o r m a r Aceste mesaje pot fi folosite pentru chează ca acest test este pentru a capta atenția utilizatorului. MessageController, • Metoda setup functionează ca și în Un alt constraint care poate fi adăugat, cazul lui JUnit (este executată înainajută la restricționarea tipurilor de requtea fiecărei metode de test datorită est-uri HTTP pe care le poate accepta o annotări @Before), • testRedirectOnIndex este metoda de test (dacă începe cu “test” nu este nevoie de annotarea @Test, dar annotarea poate fi folosită la rândul ei), • Testul apelează metoda “index” acțiune a unui controller. Aceasta este sima controllerului care execută un plu de realizat în Grails – exemplul de mai redirect, jos arată cum se poate restricționa acțiunea • Testul verifică redirectarea spre


TODAY SOFTWARE MAGAZINE

controller-ul și acțiunea așteptată (response este un obiect disponibil în teste).

Să trecem acum la UserControllerTests, testul pentru UserController: @TestFor(UserController) @Mock(User) class UserControllerTests { def userController @Before public void setUp() {userController = new UserController()} void testWrongUserNameOrPassword() { request.method = „POST” params.username = „notfound” def user = new User(firstName: „John”, lastName: „Doe”, userName: „jdoe”, password: „passwd”) mockDomain(User, [user]) userController.login() assertTrue view == „/user/login” assertTrue model.message == „Wrong username or password!” } void testLoginWithSuccess() { request.method = „POST” params.username = „jdoe” params.password = „passwd” def user = new User(firstName: „John”, lastName: „Doe”, userName: „jdoe”, password: „passwd”)

}

}

mockDomain(User, [user]) userController.login() assertTrue response.redirectedUrl == „/message/list” assertTrue session.user.userName == „jdoe”

Să vedem ce se întâmplă aici (în plus față de testul precendent): • Annotarea @Mock denotă că acest test va folosi obiecte mock. • Obiectul request poate fi accesat în teste și îl putem folosi în preparea

datelor de test. functia mockDomain este folosită pentru a mock-ui clasele specificate în annotarea @Mock. Acesta este foarte folositoare pentru că oferă suport pentru o serie de metode injectate (e.g. findBy*). verificările folosesc obiecte noi: session – sesiunea curentă, model – modelul returnat înspre un view, view – view-ul care trebuie afișat.

Concluzii și pașii următori

Grails 2.0.4 și Groovy 1.8. În articolul următor vom continua discuția despre Grails: validatori customizați, împachetare, persistență, librării de taguri, internaționalizare, mapări de url și mai mult Groovy.

Bibliografie • •

http://grails.org/documentation http : / / w w w. spr i ng s ou rc e. org / downloads/sts-ggts

Grails a ajutat echipa noastră să crească drastic viteza de development și a dus la o mai bună utilizare a aptitudinilor echipei. Să înveți Grails a fost distractiv și rapid, dar bineînțeles că încă mai invățăm mai ales când ne lovim de probleme nu chiar așa de “groovy”. Personal cred ca am luat o decizie bună în folositea Grails pentru proiectul nostru și recomand folosirea Grails în orice proiect web. Cred că în acest moment frameoworkul este destul de matur pentru a fi folosit cu rezultate foarte bune în proiectele voastre. Proiectul demo GrailsSocialNetwrok, creat pentru acest articol este disponibil aici: https://github.com/tavibolog/ GrailsSocialNetwork. A fost scris cu STS 3.1.0 și Eclipse 3.8.1 în CentOS 6.3, folosind

www.todaysoftmag.ro | nr. 7/2012

33


tehnologii

Windows Azure Mobile Services

N

umărul de persoane care deţin tablete sau telefoane mobile din noua generaţie este din ce în ce mai mare. În ziua de azi aproape orice familie are cel putin un dispozitiv de acest fel. O mare parte din aplicaţiile desktop au fost sau urmează să fie portate pe acest gen de dispositive. În momentul de faţă putem să vedem de la Office la jocuri extreme de complexe pe tablete sau telefoane.

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 entuziaștilor, motiv pentru care ii place să fie la curent cu tot ce apare nou in domeniul IT, in special din punct de vedere software.

34

nr. 7/2012 | www.todaysoftmag.ro

Pe langă aplicaţia în sine care trebuie să o dezvoltăm, de foarte multe ori avem nevoie şi de un backend. Chiar dacă este ceva foarte simplu, precum un storage de date, este necesar să investim timp în aceasta zona. În ajutorul nostru vine Microsoft cu o soluţie în cloud - Windows Azure Mobile Services. Această colectie de servicii ne ajută să dezvoltăm într-un timp foarte scurt partea de backed, fără să fie necesare cunosţinte despre SQL, Web Services sau securitate. Imaginaţi-vă că în momentul de faţă putem să dezvoltăm partea de storage a datelor în Windows Azure în mai puțin de 10 minute. Tot ce trebuie să facem este să ne creăm o clasă care să stocheze datele noastre şi o tabelă în Mobile Services. De pe portal putem să ne copiem local un proiect care este configurat pentru soluţia noastra – nici o configurare în plus nu mai este necesară. Prima întrebare care ne vine în minte este ce fel de platform sunt suportate. În

momentul de față avem trei platforme care sunt suportate native: Windows Phone 8, Windows Store (aplicaţiile pentru Windows 8) şi iOS. Exact, avem suport nativ şi pentru iOS. Ce întelegem prin suport nativ? Avem la dispoziţie o componentă prin intermediul căreia putem să accesăm datele noastre. Windows Azure Mobile Services oferă trei tipuri de servicei, expuse pritr-un API în format REST: • Data – stocare de date, • Users – autentificare utilizatori, • Push – trimite notificări la utilizator. Vă propun în urmatoarea partea a articolului să analizăm la fiecare serviciu în parte. Vom începe cu Data. Prin intermediul acestui servicu putem să stocăm orice fel de date în Windows Azure şi să le accesăm de pe o aplicaţie mobila extrem de usor. Datele pe care le putem stoca în aceste tabele pot să fie de orice timp. Singura condiţie care există este ca aceste date să fie


TODAY SOFTWARE MAGAZINE serializabile. Pentru cei din lumea .NET acest lucru se traduce cu orice entitate care este decorată cu atributul DataContract. Fiecare entitate trebuie să aibă o proprietate denumita „Id” de tip integer. Aceasta va fi folosită pentru a identifica unic fiecare entiate în parte. Fiecare entitate poate să aibă mai multe proprietăţi de tip value type. Datele sunt stocate sub forma unei baza de date non-relaţionare. Din această cauză, dacă aveți referinţe între diferite obiecte este necesar să le încărcaţi separat pe baza id-ului. În momentul în care adaugăm o proprietate nouă, nu este necesar să schimbăm definiţia la tabel. Acest lucru se face automat. Toate datele care sunt trimise pe fir sunt în format JSON, iar paginarea este suportată nativ. Fiecare tabel pe care îl creăm în Mobile Services pe lângă nume poate să aibă drepturi de access diferite pentru fiecare operaţie în parte (Insert, Update, Delete, Read). Cele patru tipuri de drepturi pe care le putem folosi sunt: • Anybody with the application key – orice utilizator care foloseşte aplicaţia poate să execute operaţia pe tabel. • Everyone – orice utilizator care are credenţialele de access la Mobile Services poate să execute operaţia, chiar dacă acest lucru nu îl facem din cadrul aplicaţiei noastre. • Only authenticate users – doar utilizatorii care s-au autentificat pot să execute operaţia pe tabel. • Only scripts and admin – operaţia poate să fie executată doar de către administratori sau de către scripturi (este foarte utilă pentru operaţiile de tip delete sau update). Pe lângă această funcţionalitate, fiecare operaţie în parte, pe partea de server, poate să aibe ataşat un script. Prin intermediul acestui script putem să executăm orice fel de acţiune, înainte ca comanda să se execute pe tabel. Putem să modificăm comanda pe care clientul o trimite, putem să validăm datele, putem chiar să verificăm userul şi dacă dorim să facem reject la request. Setarea acestor scripturi se face de pe portal, iar limbajul folosit este JavaScript. Deşi pare ciudat, Microsoft, a ales să folosească acest limbaj din doua motive. Primul motiv este că acest limbaj este cunoscut de către aproape orice dezvoltator (iOS, Web, .NET). Pe lângă acest lucru, JavaScript este un limbaj dinamic, din această cauză

modificarea şi rularea sa este extrem de simplă. Dacă scriem scriptul direct în portal vom observa că există suport pentru IntelliSense, ceea ce poate să ne fie de un real folos. Foarte multe librării care exista pentru NodeJS sunt disponibile în acestă locatie. Putem, de exemplu, să facem request-uri spre diferite servicii fără nici un fel de probleme. În următorul exemplu, verificăm ca lungimea numelui să fie de cel puţin trei caractere, în caz contrar aruncăm o excepţie. function insert(item, user, request) { if (item.name.length < 3) { request.respond(statusCodes.BAD_REQUEST, ‚The name of the student is to short.’);

}

} else { request.execute(); }

Există şi câteva lucruri la care trebuie să fim atenţi. De exemplu, nu putem să avem variabile globale sau să ne încarcăm librariile noastre. Putem să ne definim metode, dar acestea trebuie să fie în cadrul scriptului. În schimb, nimic, nu ne opreşte să apelam un alt serviciu sau să încarcăm date care sunt stocate şi în alte tabele. Din cauza că aceste scripturi pot să fie setate doar din portal, managmentul acestora într-un source control poate să fie problematic. Această funcționalitate este extrem de puternică deoarece putem să avem validarea datelor înainte ca acestea să fie salvate in tabele. Totodată cănd un utilizator doreste să execute un query putem să adaugăm un nou filtru care să limiteze datele care sunt returnate. Orice aplicaţie care stochează date are nevoie de un mecanism de identificare a useri-lor. Windows Azure Mobile Services ne oferă servicul de autentificare. Prin intermediul acestui serviciu avem un mecanism de autentificare build-in. Nu mai este nevoie să ne implementăm propriul nostru mecanism. În acest moment avem patru provideri suportaţi: Windows Live, Google, Facebook si Twitter. Din păcate, în momentul de faţa, nu vă puteti defini un provider propriu în cadrul acestui serviciu. Dar pentru o aplicaţie normală aceşti 4 provideri ar trebuii să fie sufiecienţi. Pentru fiecare provider pe care vreţi să îl folosiţi în cadrul aplicaţiei voastre este necesar să configuraţi din portal application id/key, împreuna cu secret key. Odată ce aţi facut acestă configuraţie, puteţi să folosiţi mecanismul de autentificare. În următorul exemplu putem să vedem cum se face acest lucru din C#:

Toate datele disponibile de la identify provider sunt returnate, iar în cazul în care operaţia eşuează (de exemplu credenţiale invalide) o eroare de tip InvalidOperationException ne este aruncată. Odata ce un utilizator este autentificat, fiecare operatie care va fi facută prin intermediul Windows Azure Mobile Services va conține datele despre utilizator. De exemplu, în momentul în care un utilizator execută un insert pe o tabela, în cadrul scriptului de pe server putem să adaugăm o proprietate cu id utilizatorului. function insert(item, user, request) { item.userId = user.userId; request.execute(); }

Push Notifications pot să fie folosite când avem nevoie să facem push cu diferite date spre aplicaţie. Un scenariu când am avea nevoie acest mecanism este dacă dorim să facem update la un tile sau să trimitem la utilizator notificări despre vreme. Un lucru interesant este că Push Notifications nu este suportat şi pentru aplicaţiile scrise pentru iOS. Windows Azure Mobile Services a fost integrat cu Apple Push Notifications. La începutul articolului am spus că cea mai mare parte din librariile pentru NodeJS sunt disponibile când definim scripturile pe operaţiile CRUD de pe table. Pe o operaţie de insert pe o tabelă putem să trimitem o notificare la client şi să facem update la tile. Iată cum se poate face acest lucru: function insert(item, user, request) { request.execute({ success: function() { request.respond(); sendNotifications(); } }); function sendNotifications() { push.wns.sendToastText04(channel.uri, { text1: „Hello kitty” }; } }

Toate serviciile prezentate mai sus pot să fie folosite cu succes în cazul în care avem o aplicaţie care are nevoie de un backend pentru a stoca date, a permite utilizatoriilor să se autentifice sau dacă avem nevoie să facem push de date spre utilizatorii noşti. Curba de învătare este extrem de bună, fiind nevoie de mai puţin de o zi pentru a învăța cum se folosesc aceste servicii. Windows Azure Mobile Services este contine o colecţie de servicii care ne poate ajuta în procesul de dezvoltare a aplicaţiilor pentru dispozitive mobile. Pe lângă acest lucru complexitatea aplicaţiilor noastre va scadea, deoarece nu mai avem nevoie să scriem cod pentru a ne defini diferite servicii.

var currentUser =App.MobileService.LoginAsync (MobileServiceAuthenticationProvider. Facebook);

www.todaysoftmag.ro | nr. 7/2012

35


arhitectură

10 principii de design (fabulă) - partea II-a

6

. Şi pentru că zebrele nu au cercuri pe ele dar majoritatea au linii puţin curbate care curg frumos, una dupa cealaltă, de-a lungul trupurilor lor, creatorii lor s-au gândit imediat şi la dependenţe ciclice (Această secţiune vorbeşte despre cum ar trebui să evităm dependenţele ciclice cu câteva exemple din lumea zebrelor)

Stefan Baritchii

stefan.baritchii@3pillarglobal.com Technical Lead @ 3Pillar Global Romania

7. Şi pentru că în general nimeni nu se prinde prea repede de ce zebrele au dungile în felul în care le au, creatorii lor au decis să documenteze acest lucru pentru ca generaţiile viitoare să înteleagă totul mai uşor. (Această secţiune povesteşte despre cum să scrii comentarii bune astfel încât fiecare utilizator de zebre să le înțeleagă în viitor)

Ştii povestea despre zebra care îşi mâncă propria coada? Desigur că nu. Pentru că era vorba despre un şarpe şi nu de o zebră. Dar O mulţime de oameni se holbau la ai prins ideea. Rezultatul este unul destul de zebre şi nu aveau nici o idee de ce sunt ciudat, pentru că nimeni nu poate prezice ele aşa cum sunt, gândindu-se că ar fi fost deznodământul într-o astfel de poveste. foarte frumos dacă cineva ar fi explicat acest mister pe undeva (în afară, bineînţeÎn lumea software a avea o dependenţă les, de National Geographic). ciclică înseamnă că ai o bibliotecă A care depinde de un serviciu care se află într-o La fel este şi cu softul. Exista momente biblioteca B. În biblioteca B ai un alt servi- când singura bucată de cod care defineşte ciu care e dependent de altceva în biblioteca un concept nu conţine nici o explicaţie. A. Şi ştim cu toţii că în lumea soft nu există Sunt atât de multe momente când vrei să o doar bibliotecile A şi B. Există multe, multe modifici şi în acel moment simţi cum poraltele. Acum imaginează-ţi că într-o zi ţile iadului se deschid larg. Sună familiar? schimbi ceva în una din ele şi o instalezi doar pe aceasta. Vei fi ca în Matrix când Neo stătea în faţa lui Morfeu, acesta oferindu-i să aleagă între o pastilă albastră şi una roşie. Dar spre deosebire de ce se întâmplă în film, tu le vei lua pe amândouă. Pentru a evita scenarii care nu există, asigură-te că modulele nu se apelează reciproc şi nu depind fiecare dintre ele de celălalt modul.

36

nr. 7/2012 | www.todaysoftmag.ro


management

TODAY SOFTWARE MAGAZINE

Când scrii cod nedocumentat gândeşte-te la următoarele întrebări: Ce se întâmplă dacă un apel la un serviciu de-al tău este împărțit în apeluri la alte module și tu nu știi asta? Cât de uşor (rapid) ar fi pentru cineva să îşi dea seama ce face acea bucată de cod? Va fi o zi in care acest cod va deveni parte de bază a proiectului sau cel puţin pentru una sau mai multe componente? Va fi extins la o funcţonalitate nouă? Dacă există vreun dubiu în a răspunde la aceste întrebări, atunci documentează interfeţele, serviciile şi, mai mult, documentează motivul pentru care ai făcut anumite lucruri în felul în care le-ai facut în cod. Documentează detalii precum: • dacă o valoare păstreaza secunde sau milisecunde, • ce reprezintă o variabilă de tip boolean dacă primeşte valoarea null, etc.

bine, de aceea programatorii nu au încercat niciodată să creeze zebre - ar fi prea dureros pentru ele, iar programatorii iubesc zebrele) Dar programatorii creează software. Şi programatorilor ar trebui să le pese dacă soft-ul lor ar este uşor de testat, atât whitebox cât şi black-box. Pentru a concluziona, testarea black-box este o metodă de testare bazată pe funcţionalitatea aplicaţiei (testerul nu tebuie să ştie modul în care componentele interne comunică între ele, cum ar fi de exemplu corelaţia dintre datele de intrare şi datele de ieşire ale componentelor), în timp ce testarea white-box este o metoda de a testa comportamentul intern al unei aplicaţii.

8. Şi pentru că o zebra nu are doar o culoare ci două, zebra a fost proiectată pentru a fi testată pentru ambele culori: negru şi alb. (În această secţiune se povesteşte despre testarea black box şi white box cu referire la cum poate fi testată o zebră în acest fel)

Deşi câteva star-uri pop s-au chinuit toată viaţa să devină zebre nu au reuşit pentru că erau ori negri ori albi. Ei nu puteau fi ambele pentru că, spre deosebire de zebre, ei nu aveau habar de principiile de proiectare.

9. Şi pentru că zebra nu este un simplu cal dungat, spunem că o zebră este o zebră adevarată dacă urmăreşte anumite principii de proiectare. Lucrează împreună cu alţi programatori (În această secţiune vom povesti câteva prinpe aceeaşi bucată de cod şi lasă-i să întrebe cipii de proiectare de bază - principiul open/ ce nu înteleg. Răspunsurile la întrebările lor close, single responsibility, stable abstraction pot constitui o documentatie perfectă. şi cum le putem aplica pe o zebră)

rafinându-şi comportamentul, fără însă a afecta lucrurile pe care le ştia face deja. Astfel, surprize de a avea zebre cu pătrate în loc de dungi vor fi eliminate. Atâta timp cât ai ceva ce funcţionează şi serveşte principiului pentru care a fost proiectat nu trebuie să laşi pe cineva să îl altereze, pur şi simplu pentru că e... perfect! Dar dacă altcineva ar dori să adauge lucruri în plus, acest lucru ar trebui să se poată face uşor. (notă: încearcă să substitui acum ideea de zebră cu clasă, pachet etc)

Principiul Single responsibility

Fiecare zebră ar trebui sa aibe o singură sarcină, şi acea sarcină ar trebui încapsulată complet de zebra. De aceea o numim zebra (îți aduci aminte de principiul, păstrează lucrurile simple și clare? Nu dorim sa avem un lucru care să reprezinte zebraSiVanator. Nu. Sunt doua lucruri separate care servesc unui scop separat. Așadar fii sigur că entitățile tale (clase, metode) respectă acest principiu.

Principiul Stable abstraction:

Orice concept de bază care e puţin probabil să se schimbe într-un model de proiectare ar trebui să rămână abstract. Da, nu e nici o glumă aici. Pentru că acest principiu e destul de serios. Nu abstractiza lucruri decât dacă ştii că abstractizarea acoperă destul de multe cazuri Zebrelor le place să creadă că sunt Principiul Open/Close: Orice zebră ar care sunt puţin probabil a se schimba. Dacă animale semi-transparente când stau pe trebui să poată învăţa să facă lucruri noi, abstractizezi de prima dată un cod te poţi un fond negru. Pentru a le dovedi că nu e adevarat, ar trebui să fie stabilit un proces de testare (Quality Assurance). Aceasta înseamnă verificarea că zebra are toate calităţile (şi nimic mai mult decât cele) specificate într-un document de specificare funcţională. Zebrele sunt negre şi albe. Tot așa, în lumea testării există două concepte: testare black box şi testare white box. Testarea black box se referă la testarea zebrei din exterior ei. Asta înseamnă (cu ceva indulgenţă din partea testerului) că aplicând o testăre black-box pe o zebră împăiată (un fel de zebră prototip) se vor obţine exact aceleaşi rezultate ca şi în cazul testării unei zebre normale. Pe de altă parte, testarea white-box se referă la testarea zebrei din interiorul acesteia. Aceasta înseamnă că ar trebui să fii în stare să testezi dacă o zebră are un ficat şi nu o mixtură de rumeguş înăuntrul ei. (Ei www.todaysoftmag.ro | nr. 7/2012

37


arhitectură 10 principii de design (fabulă) - partea II-a

trezi cu multă activitate de întreţinere ulte- Pot să-ți iau zebra? rior, deci multi bani cheltuiți/multe resurse Se zice că dacă pierzi un avion ai putea alocate. Şi zebrele te vor urî pentru asta. să iei o zebra pentru că alearga la fel de rapid ca avioanele. Dar și adorm des pen10. Şi când te gândeşti la o zebră te gândeşti tru că sunt extenuate. Prin urmare pentru la un animal care arată drăgut, sprinten, viu, a parcurge distanta de la un capat la altul care trăieşte în hoardă. Dar trebuie să ne asi- ar trebui să împrumuți alta. Dar poți să iei gurăm de câteva lucruri când il proiectăm. zebra altcuiva? Bineințeles. REUSABILITY (Aceasta secţiune explică cum termeni ca te lasă să folosești zebra altcuiva. scalabilitatea, disponibilitatea, performanţa, robusteţea, securitatea, reutiliabilitatea intră Ai intrat cu zebra într-un bar? în lumea zebrelor) Dacă ai face aşa ceva ai afla că sunt foarte insetate. Cu cât le dai mai multă apă Aşa cum Prozac-ul şi Xanax-ul iţi fac cu atât iţi golesc galeata. Robusteţea este mai mulţi prieteni în viaţa reală, zebrele abilitatea sistemului să continue procesaerau acum gata să vadă lumina zilei. rea de requesturi şi să efectueze tranzacţii Adevărul din păcate nu este acesta. Pentru la fel de bine atunci când se măreşte număcă trebuie verificate nişte lucruri cu privire rul de utilizatori ai sistemului ca si când are la: puţini. Robusteţea poate avea un impact negativ asupra scalabilităţii

Este zebra ta în stare să crească? Este capabilă să alerge în turme?

Asta este scalabilitatea. Daca vezi o zebră mare, apoi aceeaşi zebră mai mare, atunci avem de-a face cu scalabilitate verticală. Dacă la un moment dat în timp consideri că o zebră nu e suficientă pentru tine şi vrei două zebre, atunci e vorba de scalabilitate orizontală. Pentru că o zebră nu poate fi mai mare decât planeta noastră, întotdeauna gândeşte-te cum poţi proiecta sistemul astfel încât să fie scalabil pe orizontală. Scalabilitatea verticala înseamnă să pui un procesor mai mare, mai mult RAM, mai mult harddisk într-un singur calculator. Scalabilitatea orizontală înseamnă că ai nevoie ca soft-ul tău să ruleze pe mai multe calculatoare.

Se joaca zebra cu tine tot timpul?

Dacă nu o face, e nefolositoare sau cel puţin deranjantă. Ai nevoie de o zebră care să răspundă imediat. Asa vor și clienții softului tau. Ei sunt dornici să-ți utilizeze soft-ul. Trebuie să fie available tot timpul, chiar și când dormi sau faci deploy-uri în producție. Așa ceva numim availability. Poate fi de asemenea realizată prin redundanţă (ai o alta zebră care face exact ce face prima, şi astfel poţi să fii sigur că dacă una din ele merge la grătar, cealaltă va sta şi se va juca cu tine). Dacă adopti o astfel de solutie de a avea componente redundante şi failover, o componentă poate eşua şi avea impact negativ asupra robusteţie.

38

nr. 7/2012 | www.todaysoftmag.ro

Este zebra ta ferită de lei?

Înainte de această poveste au fost creati leii. Ştim că ei există şi că sunt deghizaţi în zebre. Proiectează lucrurile pe care le faci având în vedere securitatea lor. Nu vrei ca cineva sa se dea pe gheata în baza ta de date. De fapt în nici unul din nivelele aplicației. Deşi există legi care te protejează

de astfel de cazuri, nimeni nu îţi va aduce clienţii inapoi daca cardul lor de credit se poate vedea de pe lună. Asigură-te ca bazele tale de date sunt protejate de parole, ca firewall-urile sunt configurate bine, ca parolele raman numai la tine, conexiunea http este securizată(asta înseamnă că trebuie sa vezi https inloc de http). Si fii sigur ca certificatul de securitate este emis de cineva de incredere.

Cât de rapid aleargă zebra ta?

Ai simțit vreodată că vrei să sari pe câmpii cu gravitație asemănătoare celei de pe lună (sau că aceea din desenele animate ieftine chinezesti)? Ți-ai imaginat vreodată sărind în astfel de câmpuri cu o zebra? (Atunci chiar trebuie să consulți un psihiatru, sau să te trezești pentru că documentul nu s-a terminat încă). Perfomanța se referă la cât de rapid poți să faci zebra să alerge așa încât să atingă super viteze ca să ajungă pe lună (că acolo să poți sări pe câmpurile cu gravitație mică). De obicei câtorva clienți le este impusă performanța de audit-uri așa că întreabă-i înainte să te apuci de muncă dacă au ceva SLA-uri pe care trebuie sa le iei în considerare. SLA-urile impuse după development nu sunt deloc binevenite.


business

TODAY SOFTWARE MAGAZINE

Startup cu bani puțini

C

ând porneşti un startup, de obicei, resursele pe care le ai la dispoziţie: bani, timp, oameni, îţi sunt limitate şi provocarea ta e să scoţi cât mai mult din acestea. Ştiţi povestea: porneşti într-un garaj/apartament cu doi oameni si 1000 $ şi peste cinci ani te listezi la bursă şi apari în top fortune 500.

Dragoș Andronic dragos@txtfeedback.net CTO @ TXTFeedback

Ok - nu ştiu să vă spun cum să faceţi aceasta dar vă pot spune despre câteva programe adresate startup-urilor menite să vă dea o mana de ajutor in realizarea viselor.

Programul pentru stimularea înfiinţării şi dezvoltării microintreprinderilor de către întreprinzătorii tineri.

Acesta e numele complet al programului - pe scurt, mai cunoscuţii 10000 EUR nerambursabili. Programul s-a desfăşurat în ultimii doi ani şi cel mai probabil se va relansa în 2013 (nu e nimic sigur în privinţa aceasta, dar probabilităţile sunt mari – în primăvară se va şti). În 2012 programul a fost lansat în 15 Februrie şi fondurile programului au fost de 31000000 RON (~ 6900000 EUR) distribuiţi după principiul „primul venit, primul servit”. Dosarele valide, ce întruneau toate condiţiile şi aveau punctajul nesar, primeau fonduri începând cu martie 2012 - cam 30 de zile a durat procedura de validare a dosarului.

Ce facilităţi ai prin acest program? •

accesul la o „alocaţie financiară nerambursabilă” de până la 10000 EUR, ce reprezintă maxim 50% din valoarea cheltuielilor eligibile (fără TVA). Traducere: faci un plan de afaceri, unde, dacă doreşti 10000 EUR, trebuie să vii şi tu cu minim 10000 EUR + Taxe (TVA sau altele) pe cheltulielile eligibile (mai jos detaliez ce înseamnă cheltuiala eligibilă). garanţii pentru contractarea unui credit de până la 80000 EUR. Traducere: pentru mai multe detalii legate de ceea ce înseamnă aceasta e cel mai bine să vă adresaţi unei bănci. Majoritatea băncilor au credite speciale pentru firmele din acest program şi vă vor răspunde la întrebări mai bine decât aş face-o eu. scutirea de la plata contribuţiilor de asigurări sociale datorate de angajatori, potrivit legii, pentru veniturile aferente timpului lucrat de cel mult

patru salariaţi, angajaţi pe perioadă nedeterminată. Traducere: pentru patru salariati nu se plătesc ~21% reprezentand CAS (partea angajatorului). Scutirea se aplică cât timp salariul e <= decât salariul mediu pe economie. Pentru ce e peste salariul mediu (diferenta) se vor plăti și acești 20%. scutirea la plata taxelor pentru înfiinţarea & înmatricularea firmei. Traducere: îţi economiseste ~500 RON şi câteva drumuri.

Detaliile complete despre program/ eligibilitate/condiţii contractuale se pot găsi pe site-ul AIPPIMM (Agenţia pentru implementarea proiectelor şi programelor pentru IMM-uri). http:// www.aippimm.ro/categorie/programe/ programul-pentru-stimularea-infiintariisi-dezvoltarii-microintreprinderilor-decatre-intreprinzatorii-tineri-/. Mai jos vom încerca să răspund la câteva întrebări frecvente:

Care sunt condiţiile pentru intrarea în program?

Pentru a fi eligibil fondatorul/fondatorii trebuie sa indeplineasca concomitent condiţiile: • au până la 35 de ani • sunt la prima firmă (nu au mai deţinut o altă firmă şi nu au mai fost asociaţi la altă firmă) • planul de afaceri întruneşte minim 60 de puncte din 100 (mai jos detalii).

Cum intru în program? Care sunt pasii?

1. Înfiinţarea unde noi firme de tip Societate cu Răspundere Limitată Debutanta (SRL-D). Trebuie să fie o firmă nouă - o firmă deja existentă nu poate beneficia de program. Firma poate avea unul sau mai mulţi asociaţi - dacă are mai mulţi toţi asociaţii trebuie să fie la prima firmă şi să aibă < 35 ani. Câteva drumuri la Registrul Comerțului si la Finanțe sunt suficiente (din experienta, cel www.todaysoftmag.ro | nr. 7/2012

39


business Startup cu bani puțini mai mult timp îți consumă aprobarea și înregistrarea sediului social). 2. Depunere dosar + plan de afaceri pe siteul AIPPIMM (detaliez mai jos ce cuprinde dosarul). 3. Dacă din partea ta doreşti să o acoperi printr-un credit - acum e momentul să soliciţi creditul. În momentul când creditul a fost aprobat trebuie anunţat AIPPIMM ca să treacă mai departe dosarul. 4. Se analizează dosarul şi dacă se aprobă trebuie să depui partea ta de capital.

• •

că din planul total de afaceri trebuie să aveţi minimm 40% investiţii. localizarea activităţii (sediu social): mediu rural (e.g. Floreşti) 10p, mediul urban (e.g. Cluj) 5p utilizarea noilor tehnologii şi promovarea societăţii informaţionale: dacă faceţi soft atunci aveţi 10p, dacă nu, atunci cel mai probabil aveţi 5p schema de finanţare: credit bancar 20p, fără credit 10p. E încurajată preluarea unui credit, astfel încât valoarea investiţiei să fie cât mai mare.

Detalii despre înființarea unui S.R.L-D Trebuie să ajungeţi la minim 60p. De se găsesc la http://www.firmatineri.ro/ exemplu, o firmă ce produce software (20p) etape.html + 3 angajaţi (15p) + investii 40% (10p) + la Cluj (5p) + promovează societatea inforCare sunt obligaţiile celor ce intră în maţională (10p) + fără credit 10p ar avea program? 70 de puncte. Toate condițiile/obligațiile se găsesc în ghidul solicitatului. Cele mai importante le Pe ce poate fi cheltuită finanţarea (chelredau mai jos: tuieli eligibile)? 1. să menţină angajaţi cel puţin doi În finanţarea pot fi incluse: investiţii salariaţi cu normă întreagă cu (hardware, mobilă, domeniu web, licenţe contract de muncă pe durata nede- software,etc.), salarii, hosting, cheltuieli cu termintă pe toată durata prezenţei contabilul şi protecţia muncii, etc. . Lista în program (3 ani sau cand cifra de completă se găseşte în ghidul solicitantului afaceri depaseste 500000 EUR). (http://www.aippimm.ro/files/articles_ 2. să reinvestească minim 50% din files/37/5794/ghid-tineri---2.doc). profitul anual. 3. să depună la AIPPIMM toate actele Important de reţinut despre Alocatia necesare monitorizării (există moni- Financiara Nerambursabilă torizare şi toate achiziţiile trebuie să 1. Contribuția proprie trebuie depusă se desfăşoare pe model „licitaţie cu de la început (cei 10000 eur + TVA) cel puţin trei oferte”). şi va rămâne blocată –> va trebui să dispui de o suma destul de consistenta “up front”. Care sunt criteriile după care se judecă 2. Finantarea e tip decont: tu faci chelplanul de afaceri? tuelile si apoi ceri decontul -> până Pentru 2012 criteriile au fost: la urmă vei avea nevoie de 20000 • domeniu de activitate a S.R.L.- D: EUR + TVA urmând ca 10000 EUR Producţie (20 puncte), Servicii să ţi se înapoieze. (15p), Comerţ şi alte activităţi (10p). Dacă doriţi să dezvoltaţi un produs Avantaje şi dezavantaje ale programului software aveţi 20p. Banii nerambursabili sunt bineveniţi • număr de locuri de muncă create într-un startup, dar trebuie văzuţi ca o sursă (normă întreagă): >= 4 20p, >=3 de suplimentare a fondurilor deja existente 15p, >=2 10p. Dacă susţii că vei şi nu ca şi „fonduri de startup” - după cum avea trei salariaţi, atunci vor tre- explicam, trebuie să ai/aveţi toţi banii pe bui să apară trei salariaţi cu normă care doriţi să îi cheltuiţi „up front” pentru întreagă pe statul de plată. că finanţarea vă va fi decontantă, după ce • ponderea investiţiilor din cheltu- cheltuielile au făcute. În momentul când ielie aferente planului de afaceri: intraţi în program, o sumă destul de mare >80% 20p, >60% 15p, >40% 10p. (partea ta + TVA) vă trebui depusă într-un Ce se consideră a fi investiţie: achi- cont CEC şi va rămâne blocată acolo -> ca ziţie terenuri/spaţii comerciale, să te afecteze cât mai puţin trebuie să faci hardware, mobilă, mijloace trans- cheltuielile cele mai mari (e.g. hardware + port, licenţe soft, mărci comerciale, licenţe) în cel mai scurt timp. Tot proiectul francize, etc. E important să reţineţi este monitorizat: achiziţiile pe care le vei

40

nr. 7/2012 | www.todaysoftmag.ro

face vor trebuie făcute prin „licitaţie” - trei oferte comparative + proces verbal de atribuire a câştigătorului. Aceasta înseamnă paperwork la care trebuie să fii atent pentru că altfel s-ar putea să nu îţi fie aprobate deconturile. Partea bună e că monitorizarea te obligă la disciplină financiară – aspect esențial al unei firme sustenabile. Un alt lucru la care trebuie să fii atent e să nu contezi pe decont ca şi fond de rulaj - din păcate nu poţi fi sigur de intervalul de timp în care statul îţi va rambursa banii așa că în planul de afaceri să previzionezi destule fonduri proprii încât să poți acoperi toate plățile curente.

Ce se întâmplă dacă afacerea nu merge? Trebuie să restitui banii?

Banii non-investiții (salarii, contabilitate, hosting, chirii, etc.) nu trebuie restituiţi. Achiziţiile tip „investiţii” (hardware, licente software, spatii comerciale, mobila) pe care le faci prin program vor fi concesionate statului - dacă firma da faliment, ele for reveni statului.

De unde pot obţine consultanța pentru întocmirea dosarului?

Cel mai uşor e să apelaţi la AIPPIMM. Sediul din Cluj e pe Horea nr 13, iar personalul de acolo vă poate răspunde la toate întrebările pe care le aveţi. Puteţi apela şi la o firma de consultanţă pentru întocmirea dosarului (http:// consultanţi.finanţare.ro/) - costurile de consultanţă putând fi cuprinse în proiect. Atenţie la costurile consultatului pentru ca pot fi destul de mari - comparaţi mai multe oferte înainte de a alege un consultant. Din experienţa personală e bine să vorbiţi cu cineva care a trecut prin proiect înainte - vă poate ajuta să întocmiţi dosarul şi vă poate sfătui ce cheltuieli să includeţi în proiect.

Alte intrebari?

Citiți ghidul solicitantului. Faceți o vizită la AIPPIMM și discutați cu consultanții lor. Google it: sunt destul de multe forumuri de discuții legate de acest program. De exemplu acesta. Dacă aveţi gânduri serioase legate de înfiinţarea unui startup software vă încurajez să vă documentaţi în legătură cu acest program, principalul beneficiu fiind (imho) fondurile nerambursabile - banii aceştia vin cu câteva condiţii stricte şi vă angajează pe termen lung dar pot fi “o gură de oxigen” în activitatea unei firme.


startup

TODAY SOFTWARE MAGAZINE

Startup - TXTFeedback

T

xtFeedback este o platformă de comunicare între clienţi şi magazine. Accentul cade pe conversaţii în timp real - tip întrebări şi răspuns - scopul fiind rezolvarea problemei apărute într-un timp cât mai scurt. Platforma a fost realizată şi finanţată în proporţie de 100% în Cluj.

Dragoș Andronic dragos@txtfeedback.net CTO @ TXTFeedback

Când am început dezvoltarea TxtFeedback dorinţa a fost să creştem calitatea experienţei de client a unui magazin sau serviciu.

Problema adresata

doreşti să oferi feedback magazinului/serviciului: casieră a fost nepoliticoasă cu tine, te-a deranjat că a trebuit să aştepţi la casa 10 min sau, dimpotrivă, ai fost impresionat de căldură cu care chelnerul te-a tratat şi doreşti să comunici asta restaurantului. În astfel de momente, doreşti un mod rapid şi uşor de folosit prin care să îţi faci vocea auzită. Metodele deja existente s-ar putea să nu te ajute/să nu ţi se potrivească - e.g. caietul de sugestii e (în opinia mea) depăşit şi după ce felul în care ai fost tratat ţi-a displăcut nu doreşti să mai stai de vorbă cu un alt angajat, ci doar să ieşi cât mai repede din magazin/restaurant/hotel.

Te găseşti într-un magazin de retail, te plimbi printre rafturi căutând un anumit produs/brand (e.g. foi de sushi) şi nu ştii înspre ce raion/raft să te îndrepţi. Sau ajungi la raionul de electronice şi aici te aşteaptă nenumarate de produse similare, cu descrieri care îţi spun prea puţin (e.g. specificaţii tehnice) şi ai nevoie de un angajat (specialist) care să te poată îndruma prin jungla specificaţiilor tehnice către produsul potrivit ţie. Platforma TxtFeedback Întrebări de genul „aveţi foi de sushi? Prin TxtFeedback încercăm să oferim o La ce raion?” sau o solicitare de genul „am soluţie la astfel de scenarii. nevoie de cineva care să mă ajute la raionul O dată ce un magazin/hotel/restaurant de electronice” ţi-ar salva timp şi efort. Sau a achiziţionat serviciul TxtFeedback veţi

www.todaysoftmag.ro | nr. 7/2012

41


startup Startup - TXT Feedback vedea prin magazin afişe/pliante/etc. cu un mesaj de genul: Dacă aveţi întrebări sau doriţi să oferiţi feedback trimiteţi un sms la numărul XXXXXXX sau accesaţi t3xt.me/@demo de pe smartphone şi noi vă vom răspunde în cel mai scurt timp” SMSul trimis sau mesajul scris în site-ul web va ajunge la un angajat al magazinului care vă va răspunde la întrebare instantŞ “foi de sushi se găsesc la raionul de peşte, avem un întreg raft pentru sushi”, „un coleg va fi la raionul de electronice în 2 minute” sau „ne pare rău că nu aţi fost mulţumit de atitudinea casierului - la ce casa aţi fost?”. Ca şi client, primeşti un răspuns şi te simţi apreciat de companie, pentru că vocea ta s-a făcut auzită şi problema ta adresată.

Ideea produsului

Ideea unei astfel de platforme - convorbire în timp real cu magazinul/hotelul/ restaurantul, prin SMS sau web - a venit de la aplicaţii similare deja existente pe piaţa din state, o piaţă mai matură din punctul de vedere al customer service-uli şi al serviciilor oferite pe această nişă. Am preluat ideea, am rafinat-o, am analizat fezabilitatea unui astfel de produs & business în Europa şi, în momentul când am decis că există potenţial şi că avem resursele şi cunoştinţele necesare implementării, ne-am apucat de lucru.

Detalii de dezvoltare & arhitectură

Platforma a fost dezvoltată pe mai multe tehnologii & limbaje cuprinzând (în acest moment )- un dashboard web

42

nr. 7/2012 | www.todaysoftmag.ro

şi un mobile website în ASP.net MVC 3 şi un app de android. În back-end avem o maşină linux ce rulează un server de comunicare customizat, dezvoltat în Java, şi o bază de date MsSql. La platformă au lucrat doi developeri ajungând de la 0 la varianta beta în cinci luni, iar de la 0 la release 1.0 în 7 luni. Pe lângă platforma de produs a mai trebuit creat şi site-ul de prezentare – care a mai necesitat încă două luni de dezvoltare, fiind folosit Wordpress ca şi CMS.

Investiţie

Până acum în startup au fost investiţi ~ 30000 EUR, banii provenind de la fondatori şi prin programul de sprijinire a tinerilor întreprinzători. Am plecat de la o echipă de trei oameni în Cluj şi am ajuns în prezent la cinci – patru în Cluj şi o persoană pe vânzări în Germania. Ca să reducem costurile încercăm să realizăm totul in-house dar unde ne dăm seama că nu avem destulă experienţă, externalizăm: e.g. partea de UX şi design o realizăm cu ajutorul unui designer, partea de administrare IIS/hosting e subcontractată.

Provocări

Multe, diverse şi continue. Privind în urmă, provocările tehnice par cele mai mici – partea de dezvoltare a business-ului: poziţionarea pe piaţă, marketingul şi vânzarea propriu zisă fiind cele mai dificile. Aceasta ilustrează într-un fel şi realitatea IT a Clujului – oameni bine pregătiţi tehnic, care sunt în stare să găsească soluţii la mai toate problemele, ce trebuie să se metamorfozeze în oameni de business dacă vor să facă pasul de la outsourcing la

„product oriented”.

Planuri de viitor

La nivel de business: ne concentrăm pe extinderea vânzărilor – abordăm în principal pieţele din Europa de vest atât prin vânzări directe cât şi indirecte, prin reselleri. Tehnic: ne aşteptăm la o creştere accelerată a numărului de clienţi în următoarea perioadă aşa că principala provocare va fi scalarea platformei tehnologice şi a proceselor interne (maintenence şi suport).

Despre Ab Mobile Apps

Ab Mobile Apps este un startup fondat de doi clujeni „naturalizaţi”, Dragoş Andronic şi Bogdan Oros, din dorinţa de a demonstra că „silicon valley al României” nu e doar o sintagmă catchy ci o realitate. În prezent echipă din Cluj numără patru persoane împărţite 50/50: development şi marketing/vânzări. În Germania echipa e reprezentată de doar o persoană, cu focus pe vânzări.


economic

TODAY SOFTWARE MAGAZINE

Persoană fizică autorizată noțiuni introductive

S

e vorbeşte din ce in ce mai mult despre antreprenoriat, freelancing sau start-ups, de aceea cred că ar fi binevenite informaţii despre un aspect poate mai puţin cunoscut persoanelor care doresc să desfăşoare activităţi comerciale pe cont propriu, anume taxele şi impozitele, precum şi alte aspecte financiar-contabile pe care un antreprenor trebuie să le ia în considerare.

Delia Coman

delia.coman@impulsit.ro economist, trainer si antreprenor cu o bogata experienta in activitatea financiara, dobandita in companii mari din diverse sectoare: IT hardware si software, telecomunicatii, servcii BPO, servicii financiare

Cea mai simplă formă de autorizare www.onrc.ro/romana/formulare_pf.php pentru desfăşurarea activităţilor comerciale Documentele necesare sunt: în Romania este Persoana Fizică Autorizată. • Cererea de înregistrare; Prin activitate comercială se înţelege: fapte • Dovada verificării disponibilităţii şi de comerţ, prestări de servicii (altele decât rezervării numelui (original); cele considerate profesii libere – avocaţi, • Carte de identitate sau paşaport notari publici, medici, experţi contabili, (fotocopie certificată olograf de auditori financiari, consultanţi fiscali, arhicatre titular privind conformitatea tecţi sau traducatori) sau practicarea unei cu originalul); meserii. • Copie după diploma de studii, sau Persoana fizică autorizată este forma alte documente care să ateste prede înregistrare a persoanelor fizice care gătirea profesională, dacă este cazul; doresc să desfăşoare şi să obţină venituri • Specimen de semnatură; din activităţi independente. Practic te poţi • Informaţiile din cazierul fiscal; înregistra ca persoana fizică autorizată pen• Documente care atestă dreptutru oricare dintre activităţile prevăzute în rile de folosinţa asupra sediului codurile CAEN existente în România, cu social(copie legalizată sau copie cerexcepţia câtorva care necesită autorizaţii tificată de parte). Acest document speciale sau există legi care interzic desfăpoate fi unul din următoarele: act de şurarea unor activităţi de către persoanele proprietate, contract închiriere sau fizice autorizate. contract de comodat; • Cartea funciară pentru sediul social Cum se autorizează o Persoană fizică - se obţine de la Oficiul de Cadastru Înregistrarea ca PFA se face la Registrul şi Publicitate Imobiliară; Comerţului din localitatea în care se doreşte • În cazul în care sediul va fi într-un desfăşurarea activităţii. Informații, precum bloc de locuinţe, va fi nevoie şi de şi modele ale cererilor ce trebuiesc compleAcordul vecinilor, semnat de către tate se găsesc pe situl Oficiului National al toţi vecinii cu care sediul respectiv Registrului Comerţului (ONRC): http:// are pereţi comuni; www.todaysoftmag.ro | nr. 7/2012

43


economic Persoană fizică autorizată noțiuni introductive

• • •

Cerere de înregistrare care atestă dreptul de folosinţă asupra spaţiului; Dovezile privind plata taxelor/tarifelor legale: taxele de registru; Declaraţia-tip pe propria răspundere care să ateste îndeplinirea condiţiilor legale de funcţionare prevăzute de legislaţia specială din domeniul sanitar, sanitar-veterinar, protecţia mediului şi protecţia muncii.

Din anul 2012, ONRC a introdus posibilitatea unor operaţiuni online: rezervarea numelui, plata taxelor. Aceste servicii se pot accesa de pe site-ul https://portal.onrc.ro/. Este indicat să verificaţi totuși informaţiile pe site-ul ONRC înainte de a merge la ghişeu, pentru că există posibilitatea ca în timp să apară modificări. De asemenea, dacă dintre cererile menţionate nu se găsesc pe situl ONRC, atunci acestea trebuie cerute de la ghişeul de informaţii de la Registrul Comerţului. După ce toate documentele s-au depus la Registrul Comerţului, se asteaptă câteva zile pentru eliberarea certificatului de înregistrare.

Înregistrarea fiscală a PFA

După eliberarea ceritficatului de înregistrare de către Oficiul Registrului Comerţului, în termen de 15 zile de la data înscrisă pe certificat, trebuie depus la Direcţia Finanţelor Publice declaraţia 220. Declaraţia, împreuna cu instrucţiunile de completare, se găseşte la acest link: http:// static.anaf.ro/static/10/Anaf/formulare/ decl_220_2008.pdf. Declaraţia 220 se completează în 2 exemplare, se semnează şi împreună cu o copie după certificatul de înregistrare şi o copie după cartea de identitate se depune la Direcţia Finanţelor Publice în localitatea în care persoana fizică a fost înregistrată. Practic în această declaraţie se stabileşte sistemul de impozitare (real sau normă de venit), formă de organizare (individual sau în asociere), plus se mai declară o sumă estimată ce urmează a fi realizată de PFA

44

nr. 7/2012 | www.todaysoftmag.ro

în decursul anului respectiv (anul înregistrării). Pe baza acestei sume, persoanele fizice autorizate care optează pentru sistemul real, vor calcula şi plăti impozitul pe venit din activităţi independente în cursul anului. În toate informaţiile disponibile din alte surse veţi găsi menţionata declaraţia 070, care ar trebui depusă impreună cu declaraţia 220. Pentru persoanele fizice autorizate care au obţinut certificatul de înregistrare de la Registrul Comerţului, aceasta declaraţie de înregistrare fiscală, 070, nu mai este necesară, deoarece înregistrarea se face automat pe baza informaţiilor transmise de catre Regitru Comerţului către Administraţia Finanţelor.

Modificări ulterioare înregistrării fiscale

Modificările ulterioare ale datelor din declaraţia de înregistrare fiscală trebuie aduse la cunostinţa organului fiscal competent din subordinea Agenţiei Naţionale de Administrare Fiscală, în termen de 30 de zile de la data producerii acestora, prin completarea şi depunerea declaraţiei de menţiuni, care este aceeaşi declaraţie care s-a depus iniţial (220), doar că se bifează pe prima pagină opţiunea „Declaraţie de menţiuni” şi nu opţiunea de „Declaraţie iniţială”. În cazul în care se încetează condiţiile care au generat înregistrarea fiscală, contribuabilii au obligaţia de a preda organelor fiscale, în vederea anulării, certificatul de înregistrare fiscală, odată cu depunerea declaraţiei de menţiuni. În cazul modificărilor intervenite în datele declarate iniţial şi înscrise în certificatul de înregistrare fiscală, contribuabilii depun, odată cu declaraţia de menţiuni, şi certificatul de înregistrare fiscală, în vederea anularii acestuia şi eliberării unui nou certificat. Declaraţia de menţiuni este insotită de documente care atestă modificările intervenite. Modificările care necesită depunerea declaraţiei de menţiuni, adica a unei noi

declaraţii 220, sunt modificări ce apar în oricare dintre informaţiile pe care declaraţia le conţine, iar acestea sunt: • Domiciliul fiscal (adresa); • Cod CAEN; • Înregistrarea ca plătitor de TVA, fie prin depășirea plafonului, fie din decizia contribuabilului; • Angajarea unei/unor persoane cu contract individual de muncă; • Încetarea activităţii. Dacă se doreşte modificarea opţiunii de determinare a venitului net, se depune declaratia 220 pâna la 31 Ianuarie a anului fiscal. Opţiunea de a determina venitul net pe baza datelor din contabilitatea în partidă simplă (adică în sistem real) este obligatorie pentru contribuabil pe o perioadă de 2 ani fiscali consecutivi şi se consideră reînnoită pentru o nouă perioadă, dacă contribuabilul nu solicită determinarea venitului net anual pe baza normelor de venit, prin completarea corespunzătoare a declarației de venit estimat şi depunerea formularului la organul fiscal competent până la data de 31 ianuarie inclusiv. Mai multe informaţii despre veniturile din activităţi independente se găsesc în ghidul pentru persoanele fizice lansat de Contzilla.ro. Ghidul se adresează oricărei persoane fizice care obţine venituri din activităţi independente şi este un instrument util care te ghidează pas cu pas, în toate etapele necesare înregistrării, organizării contabilităţii şi planificării celei mai bune variante fiscale pentru activitatea ta. Conţine exemple practice şi soluţii pentru a-ţi asigura un start bun al afacerii tale. Ghidul conţine modificările legislative aferente lunilor iulie- august 2012. http://www.contzilla.ro/2012/09/ venituri-din-activitati-independente-minighid-pentru-persoanele-fizice/


eveniment

TODAY SOFTWARE MAGAZINE

Arta & IT: depasirea cadrului conventional prin stimularea creativitatii

S

ă lăsăm deoparte cifrele și datele. Dincolo de cifra de afaceri și tehnologii, adevăratele motoare ale firmei sunt oamenii, creativitatea lor și modul în care aceștia cooperează pentru a oferi serviciile sau sistemul software dorit de client. Soluțiile software au fost de multe ori factorul inovator care au transformat serviciile convenționale de business, oferind plus valoare semnificativă clientului. În timp ce operațiunile specifice unui anumit domeniu, precum automotive, asigurări sau bancar sunt standard, platforma software care stă la baza lor face diferența între un serviciu inovativ și unul standard. Astfel depășirea cadrului conventional și promovarea creativității și inovației a devenit unul dintre target-urile urmărite de toate companiile de software.

În I T t e n d i nț a e s t e ut i l i z are a șabloanelor (framework-uri, platforme sau pattern-uri) și utilizarea „best practices”. Acestea definesc căi standard de rezolvare a unor probleme și devin de multe ori obisnuință în activitatea unui dezvoltator software. A face un job de programare performant, calitativ dar în același timp plăcut, înseamnă a-ți pune amprenta asupra ceea ce realizezi, iar acest lucru presupune creativitate personală. Acesta idee stă la baza asocierii și împlicării msg systems, o companie germana cu peste 30 de ani experiență în software, în TIMAF (Transilvania International Music & Art Festival, care promoveaza arta, atât

în forma ei tradițională cât și variantele moderne ale acesteia). Festivalul a avut loc în Cluj Napoca, pe durata a trei săptămâni 5-28 octombrie 2012, și s-a manifestat prin concerte, workshop-uri și competitii. TiMAF a avut ca idee centrală 13 arte și descoperirea acestora prin cele 5 simțuri: listen, view, feel, taste, scent. Deși ca imagine și structură msg systems și TiMAF diferă, noi am găsit ca și bază comună interesul pentru depășirea cadrului convențional și stimularea creativității ca și sursă a inovației. Astfel, ne-am adaptat sloganul la ăntreaga campanie de promovare din cadrul TiMAF: “descoperă msg systems” prin cele 5 simțuri. Dincolo de liniile de cod sunt oamenii. Inovația în IT, ca în oricare alt domeniu presupune depășirea cadrului convențional, exprimarea creativității personale în realizarea muncii zilnice. În acest sens am încercat să ne aducem aportul propriu de creativitate prin prezența noastră ca și partener în cadrul TiMAF, chiar dacă acest lucru a implicat modificarea imaginii standard a msg systems. A fost un proiect în care am încercat să devenim creativi într-o zona care nu ne este caracteristică și în același timp să prezentăm imaginea noastră, a firmei, aducând în prim plan colegi din cadrul echipei. Pentru prezența în cadrul festivalului, am realizat: • Un sistem software online, brand msg, prin intermediul căreia vizitatorii au posibilitatea să cunoască angajații firmei și preferințele personale ale acestora, într-un context mai neobișnuit. Cu un design 100% „street arts”, cu informații despre gustul, mirosul, filmul preferat al colegilor – cei interesați au avut posibilitatea de a intra în contact cu

fiecare coleg din echipa msg, pe fundalul ‚melodiei preferate’ a fiecăruia. Expoziție foto în Shto College Bar, sub același nume: „Discover msg through the five senses”. Și un cocktail „,msg”, pe întreaga perioada a event-ului despre care vă zicem doar că a fost vișiniu Un stand (msg corner) “nonconformist” (vezi imagini mai jos), realizat în totalitate în spiritul artelor stradale, în cadrul Lounge-ului TiMAF din Piața Unirii.

Promovăm o cultură a imaginației, explorării creative. O cultură modernă a dezvoltării de software, bazată pe creativitate și inovație, care să îi ofere clientului cea mai bună modalitate a-și crea sau adapta produsul sau serviciul într-o piață dinamică, în continuă schimbare.

Rodica Manolache

rodica.manolache@msg-systems.com Marketing & PR Specialist @ .msg systems Romania

www.todaysoftmag.ro | nr. 7/2012

45


diverse

Gogu și Miorița - Mama lui de cioban mioritic – se trezi Gogu spunând cu voce tare. Se uită repede în jur să vadă dacă are de dat sau nu explicații cuiva. Se liniști însă când văzu că nimeni nu părea să-l bage în seamă, toți erau adânciți în studiul documentației primite, toți mohorâți... Mda, nimeni nu pare prea fericit de lista de cerințe primită. Cum să accepți așa ceva? Mama lor de resemnați... Continuă să citească emailul, din ce în ce mai mohorât; din când în când mai mormăia ceva ca pentru sine. - Ce e atmosfera asta de înmormântare?! Intrarea Șefului îi luă pe toți pe nepregătite. Văleu, cum vă uitați la mine! Ce-aveți toți?! S-a confirmat oficial sfârșitul lumii? Nu vă faceți griji, nu vine, a rămas înzăpezit pe drumurile din Moldova, hă-hă-hă... Se opri însă imediat, era clar că nimeni nu-i împărtășea voia bună. Schimbă imediat tonul : Ce s-a întâmplat? Cum nimeni nu părea să aibă nici cea mai mică intenție de a răspunde, Gogu își drese vocea: - Au venit cerințele de la client... - Ah, super tare. Au reușit deci să le trimită în timp util... Se prinse însă imediat: Sunt varză, nu-i așa? Și ai nostri ce-au spus? - Păi aici e problema, Șefu’! se băgă Mișu în discuție. „Ai noștri” nu sunt sigur că sunt ai noștri. Au înghițit totul pe motiv că e prea târziu, că asta e, bine că le avem și pe acestea, ce-o fi o fi, n-avem ce face, lasă că le descurcăm noi că suntem băieți deștepți – adică noi, cei de la dezvoltare. - Nu că asta n-ar fi adevărat... nu se putu abține Gogu. Dar chiar și-așa, avem de lucrat cel puțin o săptămână la ele! Doar la clarificare... Voci de aprobare se auziră din tot biroul care se animă subit. De unde nimeni nu părea dispus să spună nimic, ca la semnal se încălziră toți și fiecare își dădea cu părerea asupra documentului trimis. Comentariile curgeau de peste tot, unii blamau documentul și autorii lui, alții își vărsau năduful asupra colegilor care îl acceptaseră, majoritatea însă se și vedeau deja lucrând mult și degeaba, ore întregi de muncă irosită, eforturi zadarnice, străduințe, supărări, dezamăgiri, frustrări... - Stooop! Aproape că răcni Șefu’, disperat să acopere vacarmul creat. A răspuns cineva la email?

46

Liniștea care se lăsă era un răspuns evident. - Măi băieți, din câte văd eu, încă nu avem o problemă, dar sunteți pe cale să o creați. Gogu înlemni: Dacă iar îi apare zâmbetul ăla șăgalnic, acum, în mijlocul tragediei noastre generale, mă împușc! gândi. De fapt nu, îl împușc întâi pe el, dup-aia mă împușc pe mine, măcar să mor împăcat... - Gogule, te văd nedumerit. Hai să vedem, care este de fapt problema noastră? - A noastră, Șefu’, că a lui matale văd că nu e! Ei nu, nu spuse asta Gogu cu voce tare, doar o gândi. Puse în cuvinte doar durerea lui cea mare: - Problema e că ai noștri băieți au acceptat documentul! Și e aproape inutilizabil. Formulările sunt vagi, incomplete, unele cerințe se bat cap în cap, sunt inconsecvențe în terminologia folosită, nu există nici o prioritizare, plus că în loc să descrie cerințe, ei dau soluții... Gogu își trase răsuflarea și continuă cu și mai mare năduf: Cum poți accepta așa ceva?! Ei n-au citit documentul? Cum să-l trimită așa către noi? Ca în Miorița! Asta ne caracterizează: ne împăcăm cu ce avem, ne resemnăm. Și asta înseamnă că noi vom lucra ca salahorii... - Stooop! Iar începem? Șefu’ era disperat: Repet întrebarea, a răspuns cineva la email?! Ce e cu Miorița asta de n-o lăsați în pace? Îmi pare rău să vă dezamăgesc, băieți, dar Miorița asta a noastră nu e relevantă pentru noi toți. Recunosc, unii dintre noi avem tendința de a accepta orice și a ne lăsa în voia sorții. Comentăm, dăm mărunt din buze, dar acceptăm situația și mergem înainte resemnați. Dar nu toți, generalizarea

nr. 7/2012 | www.todaysoftmag.ro

nu e validă. Ia gândiți-vă voi, câți ciobănași aveam? Unul singur? Nu prea, în baladă sunt trei, nu-i așa? Și ce fac ceilalți doi? Planuri, măi băieți! Ceilalți doi complotează! Adică s-au întâlnit, au discutat, au analizat situația turmelor, numărul oilor și calitatea lor, și-au stabilit niște obiective și priorități și au făcut un plan de acțiune pentru atingerea obiectivelor... Așa că, măi băieți, dacă vă place Miorița asta, ia lăsați voi ciobănașul resemnat și preluați rolul celorlalți, faceți o analiză rapidă a documentului primit și trimiteți înapoi către „ai noștri” cererile noastre de îmbunătățire. Știu că e mai ușor să ne plângem, dar nu schimbăm nimic dacă nu ne mobilizăm. Așa că, la treabă băieți! Hai s-avem soluții și acțiune în Miorița asta a noastră!

Simona Bonghez, Ph.D.

simona.bonghez@confucius.ro Speaker, trainer şi consultant în managementul proiectelor, Owner al Confucius Consulting


sponsori

powered by


Tsm 7 2012 ro