Numarul 34 - aprilie 2015 - Today Software Magazine

Page 1

Nr. 34 • Aprilie 2015 • www.todaysoftmag.ro • www.todaysoftmag.com

TSM

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

Download from

Windows Store

ru Windows Phone

nt S-a lansat aplicația TodaySoftMag pe

ramului Simplon Cluj

og Prima generație de absolvenți ai pr

Revoluția Big Data Agile Mindset din altă perspectivă

(Micro)Service Discovery folosind Netflix Eureka Interviu exclusiv cu Natalya Kaspersky

SaaS - un nou popas în odiseea aplicațiilor software Despre testare cu Rene Tuinhout

Programarea orientată spre aspecte și dezvoltarea sistemelor software

Realreach – află ce se găsește la 15 minute de tine

Scutirea pe venit pentru programatori

Design vs. Seducție

Analitica avansată și invizibilă Eroare 404: “Motivația angajaților”



6 Prima generație de absolvenți Simplon Cluj Ovidiu Măţan

9 Interviu cu Natalya Kaspersky, CEO al InfoWatch Group, cofondator Kaspersky Lab Diana Ciorba

12 S-a lansat aplicația TodaySoftMag pentru Windows Phone Cosmin Jeler

16 Despre testare cu Rene Tuinhout Ovidiu Măţan

18 SafeDrive Tudor Cobâlaș

19 TechSylvania 2015 Vlad Ciurca

21 Revoluția Big Data Graham McEnroe

24 Agile Mindset din altă perspectivă Bogdan Mureșan

29 Programarea Orientată pe Aspecte în Dezvoltarea Sistemelor Software Diana Vultur

32 Realreach – află ce se găsește la 15 minute de tine Curta Cătălin și Dragoș Andronic

34 (Micro)Service Discovery cu Netflix Eureka Adrian Ivan

38 Partajarea ecranului (screen sharing) utilizând Service Bus Relay (Azure) Radu Vunvulea

41 Analitica avansată și invizibilă Oana Călugăr

44 SaaS - un nou popas în odiseea aplicațiilor software Claudia Jelea

45 EROARE 404: “Motivația angajaților” Ana-Maria Trifan

47 Scutirea pe venit pentru programatori Ioana Varga și Ioana Costea

26 Cinci pași înspre un design software rezistent la erori

49 Design vs. Seducție

Alexandru Bolboacă

Ștefan Bălan


editorial

E

Ovidiu Măţan

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

voluția profesională a fiecăruia dintre noi este condiționată de cele mai multe ori de hotărârea de face față unor situații noi, mai complexe care să ne valorifice pe deplin potențialul, să ne responsabilizeze și să ne aducă recunoașterea meritelor. De cele mai multe ori, în lumea IT-ului și nu numai, această decizie se concretizează în schimbarea locului de muncă. Proiectul programez.ro, pe care l-am menționat și în numerele anterioare, vine în ajutorul celor care iau asemenea decizii, dar și în ajutorul firmelor angajatoare. În acest sens, venim cu o propunere inedită ce combină testele online cu prezentarea ultimelor poziții deschise în cadrul diferitelor companii. Astfel un candidat va putea să își evalueze domeniile cunoscute înainte de a aplica la noul job. Odată testul parcurs și obținut un anumit punctaj, candidatul se va califica pentru o următoare etapă de teste, cu un grad sporit de dificultate. Credem că simularea parcurgerii unui interviu evaluează disponibilitatea celui implicat în testare de a-și asuma noi provocări tehnice și de a se perfecționa. Pe de altă parte, dincolo de o perspectivă individuală care subliniază avantajul oferit de autoevaluare, parcurgerea acestor teste cu cerințe adaptate la nevoile pieței IT oferă firmelor angajatoare ocazia de a-și detecta mai rapid potențialii angajați. Un alt proiect Today Software Magazine este lansarea aplicației revistei pentru utilizatorii de device-uri Windows Phone. Aceasta urmează direcția definită de aplicațiile iOS și Android, aducând în plus o mai bună interfață grafică. Din această perspectivă, afirmăm că acest client este cea mai reușită implementare a unui client TSM de până acum.Vă invităm să îl descărcați și să ne trimiteți părerile dvs . Detaliile despre implementarea aplicației sunt prezentate într-un articol inclus în acest număr. În ceea ce privește conținutul acestui număr, vă anunțăm că am excelat în numărul de interviuri publicate, dar și în calitatea profesională a celor care ni le-au acordat. Așadar avem trei interviuri: Natalya Kaspersky ne oferă detalii despre proiectele din industria securității; Roxana Rugină, inițiatoarea primului proiect Simplon din România, ne vorbește despre efectele acestui prim priect, dar și despre planurile ei de viitor. În cel de-al treilea interviu destinat revoluției Big Data, puteți citi despre provocările dintr-o companie al cărei obiectiv este analiza și creșterea implicării utilizatorilor. Agile Mindset din altă perspectivă vă invită la o discuție în ceea ce privește regulile și best practice-urile. Domeniul tehnic este acoperit de articole care vă vor capta interesul:Programarea Orientată pe Aspecte în Dezvoltarea Sistemelor Software, prezentarea tehnologiei Realreach și (Micro)Service Discovery cu Netflix Eureka. Menționăm și un articol interesant din aria psihologiei, care analizează mecanismele motivației celui angajat. Vă dorim o lectură plăcută !!!

Ovidiu Măţan

Fondator al Today Software Magazine

4

nr. 34/2015 | www.todaysoftmag.ro


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

Lista autorilor Alexandru Bolboacă

Silviu Dumitrescu

Agile Coach and Trainer, with a focus on technical practices @Mozaic Works

Java Line Manager @ Accesa

Graham McEnroe

Cosmin Jeler

Content Manager at @ Ve Interactive

Development lead @ CodArt Solutions

Adrian Ivan

Diana Vultur

Software architect @ SDL

Software Developer @ Yardi România

Diana Ciorba

Oana Călugăr

Marketing manager @ Codespring

Ambassador în România @ Hello Tomorrow

Bogdan Mureșan

Vlad Ciurca vlad@techsylvania.co

Director of Engineering @ 3Pillar Global

Product Guy. Tech Events Producer. Connector @ Techsylvania

Ștefan Bălan

Curta Cătălin

Creative Director @ Lateral

C++ Developer @ Telenav

alex.bolboaca@mozaicworks.com

graham.mcenroe@veinteractive.com

silviu.dumitrescu@accesa.eu

cosmin.jeler@codart-solutions.com

Traducător: Roxana Elena roxana.elena@todaysoftmag.com Reviewer: Tavi Bolog tavi.bolog@todaysoftmag.com

aivan@sdl.com

diana.vultur@yardi.com

Contabil : Delia Coman delia.coman@todaysoftmag.com Tipar realizat de Daisler Print House Produs de

diana.ciorba@codespring.ro

calugar.oana@gmail.com

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

www.todaysoftmag.ro www.facebook.com/todaysoftmag twitter.com/todaysoftmag ISSN 2284 – 6352

bogdan.muresan@3pillarglobal.com

stefan.balan@lateral-inc.com

curta.catalin@telenav.com

Dragoș Andronic

dragos.andronic@telenav.com

Avocat & Consilier in domeniul marcilor @ IP Boutique

Radu Vunvulea

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

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

Claudia Jelea

claudia.jelea@jlaw.ro

Product Manager @ Telenav

Ana-Maria Trifan PR & Customer Care Specialist @ Azimut Happy Employees

Ioana Varga

Ioana Costea

Expert contabil Managing Partner @ A&I Consulting

Expert contabil Managing Partner @ A&I Consulting

ioana.varga@aiconsulting.ro

ioana.varga@aiconsulting.ro

www.todaysoftmag.ro www.todaysoftmag.com

www.todaysoftmag.ro | nr. 34/aprilie, 2015

5


interviu

Prima generație de absolvenți Simplon Cluj

P

e Roxana am cunoscut-o anul trecut, când venise în Cluj cu scopul de a crea o nouă generație de programatori. Era o afirmație curajoasă într-un context local care se caracterizează printr-un număr mare de programatori. La acesta mai adăugam și faptul că în aceeași perioadă se lansa Pitech+Academy. Dar Roxana s-a ținut de cuvânt și a reușit să-și lanseze programul în care au fost selecționați doisprezece tineri. Aceștia aveau promisiunea de a primi gratis timp de șase luni,cursuri și programe pentru a deveni la final tineri programatori web. Acum, la finalul celor șase luni, Roxana ne dezvăluie din experiența aplicării acestui program, dar și demersurile care îi condiționează continuitatea Felicitări pentru prima promoție de absolvenți Simplon ! Cum te simți la finalul celor șase luni în care ai fost alături de cei 12 candidați? [Roxana Rugină] Mă bucur din nenumărate motive. În primul rând pentru că simt că participanții noștri și-au găsit locul sau cel puțin au mai multă încredere că vor reuși. Este foarte important p e nt r u n oi s ă ne asigurăm că toți absolvenții reușesc să-și atingă obiectivele de a lucra în domeniul IT sau de a-și dezvolta propria afacere online. Mă bucur să văd că dincolo d e p ote nț i a lu l candidaților, am crescut o comunitate plecând de la o mică familie unde am împărtășit timp de șase luni momentele cele mai grele dar și cele mai frumoase reușite. Mă bucur că am putut duce până la capăt acest program și că astăzi avem în jurul nostru o comunitate de oameni talentați și pasionați de tehnologie care ne susține și care abia așteaptă următorul bootcamp Simplon.

6

Mă bucur pentru toți participanții care au reușit să învețe un limbaj de programare în șase luni și care azi dezvoltă platformele lor proprii sau sunt angajați în firme de IT. Dincolo de toate mă bucur că avem un impact puternic și pozitiv asupra tuturor

din jur și asta mă face să merg înainte și să caut parteneri alături de care putem să dezvoltăm acest program în continuare în Cluj, dar și la nivel național. Te rog detaliază pentru cititorii TSM ce înseamnă proiectul Simplon. [Roxana Rugină] Misiunea noastră este de a facilita accesul persoanelor

nr. 34/aprilie, 2015 | www.todaysoftmag.ro

nontehnice și a celor care provin din grupuri vulnerabile la o carieră în domeniului IT. Dacă ar fi să descriu Simplon în doar câteva cuvinte acestea ar fi educaţie, tehnologie şi inovaţie socială. Noi dezvoltăm o serie de programe de educație în domeniul IT prin metode de învățare practică, interdisciplinară și colaborativă care contribuie la dezvoltarea competențelor n e c e s are s e c olu lui 21. Conceptul Simplon, medaliat de Președintele Franței ca cea mai inovatoare inițiativă de antreprenoriat social a anului 2014, a fost adus în România la Cluj. Din luna mai 2014 și până azi am organizat peste 30 de evenimente pentru 1466 de participanți la nivel naţional. La trainingurile noastre au fost instruiți 261 de adulți și 245 copii au fost inițiați în lumea programării. Din cele 102 aplicații pentru bootcamp-ul de web development și antreprenoriat, am selectat 12 participanți cărora le-am oferit aproape 100 de ore de training. 60% dintre participanții la aceste cursuri s-au angajat sau dezvoltă o afacere proprie în domeniul IT. Programul de training de șase luni


TODAY SOFTWARE MAGAZINE

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

intensive în web development este oferit gratuit celor care vin din medii defavorizate sau care au nevoie de o reconversie profesională pentru a deveni dezvoltatori de servicii web. Pe lângă asta, Simplon mai desfăşoară şi cursuri de programare pentru copii şi activităţi de promovare a antreprenoriatului şi diversităţii în IT. Detalii găsiţi şi pe www.ro.simplon.co Care este impactul social al acestuia ? [Roxana Rugină] L-aş da ca exemplu pe Mariusz Siklodi care este student la Academia de Muzică. Mariusz a venit în bootcamp-ul nostru pentru că e pasionat de tehnologie şi vrea să îmbine codul cu muzica. Împreună cu Alexandra CrişanRaica au dezvoltat o platformă web în doar două luni din bootcamp. Astăzi, platforma atrage zilnic noi clienți. Povestea lor este un exemplu pentru oricine îşi doreşte să transforme o idee în produs web, dar care nu are nici cunoştinţele şi nici încrederea că poate să facă asta cu forţele proprii. Noi spunem că Simplon încurajează oamenii să folosească tehnologia pentru a-şi îmbunătăţi viaţa. Fie că participanţii noştri obţin un job mai bun şi de viitor, fie că îşi descoperă pasiunea şi dezvoltă o afacere, Simplon este catalizatorul de care are nevoie societatea românească pentru a dezvolta potenţialul uman şi antreprenorial. De cele mai multe ori impactul pe care îl vedem nu este doar asupra participanţilor la programele noastre, ci şi asupra familiilor, prietenilor lor şi întregii comunităţi. Faptul că un tânăr care nu-şi găseşte job în domeniul său, reuşeşte să înveţe un limbaj de programare în șase luni cu

ajutorul nostru reprezintă un colac de salvare. Noi îl oferim celor care sunt în situaţii dificile, ştiind că aceştia vor profita la maxim şi vor oferi ajutor şi celor din jur. Ştim că facultăţile de profil nu au capacitatea de a acoperi nevoile pieţei în domeniul IT. De aceea Simplon atrage oameni cu potenţial pe care-i pregăteşte pentru a face faţă schimbărilor. Tehnologiile avansează foarte rapid, iar noi pregătim oameni capabili de a se adapta şi învăţa rapid cum să le folosească pentru a rezolva probleme. Încurajând tinerii să gândească astfel, oferim o şansă fiecăruia şi noi talente companiilor care doresc să dezvolte produse noi bazate pe tehnologii moderne.

Descrie din perspectiva antreprenoriatului două proiecte realizate la finalul celor șase luni. [Roxana Rugină] Pentru bootcamp noi selectăm încă de la început candidaţi cu idei de proiecte care sunt motivaţi să înveţe cod pentru a trasforma o idee întrun produs. Vrem ca aceştia să creadă foarte mult în utilitatea unei aplicaţii sau a unei tehnologii ca să găsească soluţii şi să dezvolte produsul, devenind creatori şi nu doar consumatori ai tehnologiei. Trecutul profesional al celor din acest bootcamp se remarcă prin diversitate: designeri, psihologi, muzicieni, studenţi la drept, jurnalişti, economişti, care au vrut să dea o şansă pasiunii lor pentru tehnologie

www.todaysoftmag.ro | nr. 34/aprilie, 2015

7


interviu şi au venit să înveţe web development. Ca urmare şi proiectele lor au fost foarte diferite: de la platforme open source şi până la e-commerce. De exemplu, Georgiana Bere a lucrat remote cu o echipă formată din jurnaliști aflați în Germania, Elveția și un alt developer din București la o platformă de open knowledge, în mod open source. Un proiect realizat în cadrul bootcamp-ului şi care a fost lansat în versiune beta este wedbox.ro - o platformă online care te ajută să-ți pregătești nunta ușor și rapid până la cel mai mic detaliu. Aplicaţia web pune la dispoziție toată gama de servicii și soluții de încredere pentru nunți. Alegerile pe care utilizatorii le pot face cu wedbox transformă chinul organizării unui astfel de eveniment într-o plăcere. În câteva click-uri ei pot găsi rochia, pantofii, locația, tortul, verighetele și porumbeii pe care-i visează pentru nunta lor. Momentan echipa wedbox caută oameni noi pentru a creşte numărul de furnizori de servicii, dorind ca în viitor să dezvolte funcţionalităţi şi pachete adresate celor mai sofisticaţi clienţi care doresc servicii personalizate şi cât mai originale. În cadrul programului participanţii au învăţat un limbaj de programare: Ruby on Rails, dar şi cum să dezvolte produsul din spatele aplicaţiilor web. Tocmai de aceea multe dintre idei se transformă sau aşteaptă încă validarea pentru a fi dezvoltate. De exemplu foodplace.ro este o platformă destinată gurmanzilor care doresc să comande rapid mâncarea lor preferată din locul cel mai ieftin şi bun. Ideea a fost lansată online pentru a testa piaţa şi a vedea dacă există interes din partea utilizatorilor.

8

Prima generație de absolvenți Simplon Cluj În ce alte proiecte ești implicată ? [Roxana Rugină] În parteneriat cu Asociaţia Edusfera, echipa Simplon organizează cursurile de programare Digital Kids la Cluj pentru copii cu vârste între 8 şi 14 ani. Actual oferim cursuri pentru 30 de copii şi vrem să creştem capacitatea la dublu anul acesta. Pe lângă acestea, pregătim şi o serie de programe care sunt de la robotică şi până la game development pentru copii. De asemenea, în parteneriat cu Hackidemia, un laborator mobil de invenţii unde copii, tineri şi adulți învaţă despre tehnologii, electricitate, matematică într-un mediu distractiv şi interdisciplinar, organizăm ateliere şi workshop-uri. Următorul va fi în 9 mai, la TEDxEroilor Cluj Napoca. Activități de acest tip am mai organizat în Bucureşti, Cluj şi Sfântu Gheorghe. Alături de Sponge Media Innovation Lab, organizăm și activități precum hackathon-ul şi oferim suport pentru jurnaliști şi ONG-uri care vor să folosească noile media, date deschise şi instrumente digitale în domeniul lor de activitate. În Cluj, eu fac parte din echipele de organizare Startup Weekend şi Startup Pirates şi sunt mentor în cadrul mai multor evenimente pentru antreprenori. Un alt proiect local la care contribui din decembrie este Cluj Makers, o comunitate de oameni creativi care pregătesc deschiderea primului atelier din Cluj dedicat noilor meşteşuguri. Aici oamenii vor avea acces la unelte și echipamente pentru fabricație digitală și prototipare rapidă, programe de educaţie şi ateliere de formare în design, hardware şi software, de la prelucrarea lemnului şi până la senzori,

nr. 34/aprilie, 2015 | www.todaysoftmag.ro

sisteme integrate şi arduino. La nivel global sunt consultant pe programe de tineret la Microsoft Youth Spark pentru regiunea centrală şi est-europeană şi activez în mai multe reţele de antreprenoriat social. Dat fiind succesul primei promoții, care este planul pentru următoarea rundă și cum s-ar putea implica companiile locale în susținerea acestui program? [Roxana Rugină] În continuare vrem să contribuim la dezvoltarea capitalului uman și a mediului antreprenorial din România. De aceea, încurajăm în primul rând companiile locale să investească în educaţia din domeniul tehnologiei. Este evident că numărul de absolvențcorectai ai facultăţilor tehnice este cu mult mai mic decât numărul de specialişti de care avem nevoie, că formarea clasică în acest domeniu nu este suficient de orientată spre produs şi experienţă practică. Acum este momentul să găsim soluţii şi să creştem noi talente împreună. Simplon propune astăzi un program de succes şi caută parteneri pentru a dezvolta acest program şi a mări numărul de beneficiari. Avem nevoie de toţi actorii interesaţi să atragă resurse umane în IT prin programe de training și cursuri de programare cu cele mai noi tehnologii și metode de învățare rapidă.

Ovidiu Măţan

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


interviu

TODAY SOFTWARE MAGAZINE

Interviu cu Natalya Kaspersky, CEO al InfoWatch Group, cofondator Kaspersky Lab

A

bsolventă a Institutului Național de Inginerie Electronică cu un master în Matematici Aplicate și licențiată în Economie la UK Open University, Natalya Kaspersky este un membru activ al comunității internaționale de afaceri și investește activ în companii high-tech. Natalya este cofondator al Kaspersky Lab, unul dintre cei mari producători de antivirus din lume, și CEO al grupului de companii InfoWatch, ce operează în sfera securității informației interne. De-a lungul celor 10 ani de activitate la conducerea Kaspersky Lab, Natalya a transformat un mic grup de entuziaști într-o companie IT de talie internațională cu venituri anuale de sute de milioane de dolari. Invitată ca un speaker distins al evenimentelor IT de elită din lume, Natalya a primit cu bine invitația mea de a discuta despre provocările și tendințele curente din domeniul securității informației. Cu o prezență elegantă și o atitudine deschisă, Natalya ne împărtășește gândurile și experiența sa. [Diana Ciorba (D.C.)] Care este motivația dumneavoastră ca antreprenor în industria securității informației? S-a schimbat aceasta de-a lungul anilor? [Natalya Kaspersky]: Inițial, motivația mea era să fac niște bani pentru familia mea. Cum fostul meu soț era expert în dezvoltarea programului antivirus, rolul meu era cel de vânzări, de ambalare a programului și de plasare pe piață. În 1997, chiar dacă nu a fost dorința mea inițială, circumstanțele au fost de asemenea natură încât am devenit CEO al societății Kaspersky Lab și am deținut acest rol timp de zece ani. De atunci, lucrurile și viața s-au schimbat; acum, motivația mea este de a investi în arii precum IT, securitatea IT și inteligență artificială. Sunt implicate în șapte companii, unele au succes iar altele sunt încă în faza de start-up, dar acesta este ritmul natural de viață al unui investitor. Luând în considerare experiența și expertiza dumneavoastră, care sunt aspectele critice la care proprietarii de afaceri ar trebui să fie atenți atunci când au de-a face cu date, în peisajul global actual? [Natalya Kaspersky]: Este important să înțelegem că datele, în lumea modernă, nu sunt sigure. Companiile angajează profesioniști pentru a securiza datele. Dar există două probleme: în primul rând, profesionistul selectat poate nu are cunoștințele necesare pentru a crea protecție totală sau poate că îi lipsesc resursele pentru acest scop; în al doilea rând, profesioniștii sunt și ei oameni și își pot ușor depăși responsabilitățile sau se pot folosi de infrastructură. De aceea, noi împărțim amenințările în două categorii: din exteriorul și din interiorul companiei. Amenințările ce provin din interior sunt subestimate și există foarte puține instrumente disponibile pe piață pentru prevenirea acestora. În opinia mea este esențial ca proprietarii de afaceri să își ia timpul necesar pentru a analiza ceea ce urmează să facă cu datele și să dobândească cunoștințe generice legate de problema securității datelor.

Natalya Kaspersky

Care sunt principalele provocări în timpul implementării unui sistem de protecție a datelor la un client? Cum tratează InfoWatch Group aceste provocări? [Natalya Kaspersky]: Atunci când facem distincția între amenințări interne și externe remarcăm câteva fapte cruciale: amenințările externe pot fi mai clar de identificat. Acestea pot fi viruși informatici, atacuri asupra serviciilor sau hack-uri – astfel, protecția împotriva acestor amenințări este mai ușor de realizat datorită bogăției de cunoștințe acumulate în ultimii 20 de ani. Pe de altă parte, amenințările interne sunt dificil de descris și de detectat. Multora dintre clienții noștri li se pare dificil de descris ce anume este confidențial și ce nu… În principal, deoarece este efectiv greu de explicat. În consecință, sarcina protejării a ceea ce este confidențial devine imposibilă. Dacă cineva nu știe ce cauță, nici un software nu-l poate ajuta să-l găsească. La InfoWatch producem și vindem sisteme DLP (Data Leak Prevention). Cea mai mare întrebare pentru noi este “Ce informație trebuie blocată sau capturată?” De altfel, riscăm să prindem totul sau nimic. Vă pot spune o povestioară despre asta. Într-o zi, am primit vizita unuia dintre tinerii noștri competitori, www.todaysoftmag.ro | nr. 33/martie, 2015

9


interviu Interviu cu Natalya Kaspersky, CEO al InfoWatch Group, cofondator Kaspersky Lab

de la o companie care producea de asemenea sisteme DLP. Se mândreau că și-au instalat produsul la un prim client și au detectat 14.000.000 de scurgeri în prima zi! Nu l-am complimentat cu politețe, ci i-am spus pur și simplu: “Înțelegeți că software-ul vostru nu funcționează?” În mod evident, produsul detectase întreg traficul acestei biete bănci drept scurgere. De ce s-a întâmplat așa? Deoarece programatorii nu au lucrat împreună cu clientul pentru a face diferența între ceea ce este informație confidențială și ce este neconifdențială. La InfoWatch ne-am concentrat întotdeauna mai întâi pe analiza datelor – adică pe *categorizarea* informației. Noi realizăm această operațiune cu ajutorul unui alt instrument software, pe care l-am creat în mod special pentru această persoană, și numim această etapă – etapa pre-DLP. Pentru a scurta etapa pre-DLP construim structuri lingvistice predefinite pentru industrii predefinite. După ce am instalat sisteme DLP la peste 300 clienți , majoritatea fiind companii mari din peste 13 industrii, pot declara în mod deschis că o etapă pre-DLP este obligatorie pentru a ne asigura că sistemul va funcționa în mod eficient. Care este rolul inovației în soluțiile pe care le furnizați? Cum sprijiniți dezvoltarea inovației și cum se raportează beneficiarii diverși la această componentă?

Natalya Kaspersky și Diana Ciorba

vedere tehnologic. Tendințele industriei IT – Fiecare nouă versiune a sistemelor de operare disponibile pe piață atrag o actualizare a software-ului nostru. Noile dispozitive și noile forme ale IT-ului aduc noi provocări companiilor de Securitate IT. De aceea, sectorul securității IT este întotdeauna cu un pas în urma industriei IT. Trebuie să analizăm noul software și noul hardware înainte de a le construi instrumentele de protecție. Amenințările și cerințele de conformitate – Fiecare nouă amenințare cere inovație din partea noastră. Ba mai mult, aspectele legale legate de protecția datelor cu caracter personal ne determină să fim întotdeauna în conformitate cu legislația specifică (FISA, Basel II, Basel III, PCI DSS, etc.). Ținând cont de toate cele de mai sus, în calitate de furnizor de sisteme DLP trebuie să avansăm cu modul nostru de a înțelege problemele de securitate. Trebuie să decidem ce poate fi luat în considerare și cum putem s-o facem în cel mai bun mod. Ați putea descrie schimbările previzibile ale industriei pentru următorii ani? [Natalya Kaspersky]: Securitatea IT se dezvoltă în prezent pe două direcții majore: a) localizare mai degrabă decât globalizare – companiile și guvernele tind să aleagă furnizori naționali de securitate a datelor. Această tendință se poate vedea foarte clar în Europa; și b) creșterea țintelor definite cu metode specifice –Atacurile țintite sunt relativ noi și nu putem ști din ce direcție vor fi conduse, în consecință ele constituie o mare provocare pentru industrie. De exemplu, cazul virusului Stuxnet, care a fost proiectat să atace obiecte de infrastructură din Iran și a circulat liber mai bine de trei ani fără ca vreo companie de antivirus să-l fi detectat! Apar roluri noi în profesiile legate de securitatea informației? [Natalya Kaspersky]: De fapt, chiar sunt discuții aprinse legat de rolul CISO-ului. Un Chief Information Security Officer, o poziție deopotrivă dificilă și sensibilă. Cum cei care sunt CISO ar trebui să se concentreze pe multe aspect legate de securitatea afacerii, se așteaptă de la deținătorul acestui rol să fie un fin psiholog, un expert în securitate și un marketer abil. Dar este foarte greu ca o persoană să întrunească toate aceste calități. Ca alternativă, rolul ar putea fi împărțit între mai multe persoane. Există o mare dezbatere în industria securității IT, pe tema viitorului acestui rol.

[Natalya Kaspersky]: DLP este o nouă categorie de produs în sine. A început aproximativ acum 10 ani, și până de curând ne zbăteam să explicăm necesitatea unui sistem DLP pentru o companie și ne confruntăm cu problema mai delicată a confidențialității. De vreme ce suntem o companie de dezvoltare software, inovarea este la ea acasă. În sectorul DLP există trei declanșatori majori ai inovării: Legat de educarea noilor generații (atât de utilizatori cât și de Clienții – Aceștia sunt foarte inovatori și au solicitări pline de profesioniști), care ar fi pilonii unui sistem sigur de confidențialitate? imaginație, dar din nefericire nu totul este posibil din punct de [Natalya Kaspersky]: Drept vorbind, majoritatea

10

nr. 34/aprilie, 2015 | www.todaysoftmag.ro


TODAY SOFTWARE MAGAZINE

subestimează securitatea. Pur și simplu nu se gândesc la ea! Luați drept exemplu rețelele sociale, unde oamenii își postează imaginile private și alte informații despre ei. Au intrat în contact cu străinii și apoi s-au mirat de ce a fost furat sau insultat. Singura modalitate de a schimba acest fenomen este de a implementa educația despre securitatea IT pentru toate categoriile de vârstă – de la copii la adulți. Sistemele IT se schimbă prea repede, pe când sistemele educaționale sunt inerțiale. Pilonii unui mediu sigur sunt chiar principiile de conduită în lumea digitală. Mesajul pentru fiecare categorie de vârstă este același : “Internetul este periculos, dar dacă învățăm să urmăm câteva reguli simple atunci putem fi în siguranță”. Dar ar trebui ajustat pentru diferite nivele de înțelegere. Și da, ar trebui să începem predarea regulilor și principiilor încă din anii de grădiniță.

Un mesaj special pentru comunitatea ITC din România? Apreciez România pentru oamenii bine educați, mai ales pe cei din domeniul ingineriei și tehnologiei informației. La Kaspersky Lab am avut o experiență de succes cu echipa din România care a dezvoltat versiunea Linux a antivirusului Kaspersky. Niște tipi foarte buni, foarte talentați și bine calificați. Îmi aduc aminte cu drag de ei. România are propriul software antivirus și așa ceva este de apreciat. Personal, consider că țara ar trebui să își folosească superioritatea tehnică pentru a crea mai multe produse și soluții software. Urez mult noroc comunității ITC din România și să cooperăm bine pe viitor !

BIO Absolventă a Institutului Național de Iniginerie Electronică cu un master în Matematici Aplicate și licențiată în Economie la UK Open University, Natalya Kaspersky este un membru activ al comunității internaționale de afaceri și investește activ în companii high-tech.. Natalya este cofondator al Kaspersky Lab, unul din cei mari producători de antivirus din lume, și CEO al grupului de companii InfoWatch, ce operează în sfera securității informației interne. De-a lungul celor 10 ani de activitate la conducerea Kaspersky Lab, Natalya a trasnformat un mic grup de entuziaști într-o companie IT de talie internațională cu venituri anuale de sute de milioane de dolari. Natalya deține premii multiple în domeniul afacerilor și industriei IT, atât în Rusia cât și pe plan internațional: Deține medalia de bronz în cadrul “Top-100 cele mai influente femei de afceri din Rusia”. Premiul “Liderul de afaceri al anului 2012 din Rusia” onorează remarcabila sa contribuție la progresul comității IT din Rusia, conform Horasis, comunitatea viziunilor globale. Liderul clasamentului “Top-1000 cei mai buni manageri ruși în anul 2013” din IT conform Kommersant, un cotidianul lider din presa rusească și Asociației Managerilor Ruși. Cel mai bun antreprenor în domeniul tehnologiei, conform premiilor decernate de Femei în Tehnologie MEA, Dubai. Nominalizată pentru Cea mai influnetă persoană din Rusia în trimestrul 1 din 2015 pentru contribuția la industria IT, de către BRIC Magazine, din Regatul Unit al Marii Britanii.

Diana Ciorba

diana.ciorba@codespring.ro Marketing manager @ Codespring

www.todaysoftmag.ro | nr. 34/aprilie, 2015

11


programare

S-a lansat aplicația TodaySoftMag pentru Windows Phone

I

nițiativa unei aplicații TSM pentru Windows Phone a luat naștere acum mai bine de un an, în cadrul centrului de competență 3Pillar Global, ca mod de explorare și a dobândirii de cunoștințe în ce privește platforma Microsoft pentru mobile. Proiectul a continuat ulterior cu multă dedicare din inițiativa proprie a celor implicați: Cosmin Jeler, autorul prezentului articol, responsabil de partea de dezvoltare, Robin Molnar axat asupra părții de asigurare a calității, Dan Hădărău pentru suportul acordat pe partea de design și server-side iar Ovidiu Mățan project manager / product owner. Cosmin Jeler

cosmin.jeler@codart-solutions.com Development lead @ CodArt Solutions

12

nr. 34/2015 | www.todaysoftmag.ro

Platforma

Windows Phone este la acest moment în partea de jos a clasamentului în ceea ce privește cota de piață a dispozitivelor mobile. Microsoft a intrat mult prea târziu în acest joc, iar odată ajuns aici, metodologiile sale clasice de marketing și dezvoltare de produs nu au făcut față competitivității. Motiv pentru care gigantul din Redmond s-a văzut nevoit să înceapă un proces masiv de reinventare proprie: schimbarea CEO-ului, deschiderea către software-ul open-source, dezvoltarea de aplicații pentru alte ecosisteme. Acestea sunt doar câteva puncte de menționat în această direcție. Datele pentru primul trimestru din 2015 arată creșteri pe piața vest-europeană, telefoanele cu Windows Phone ajungând să depășească pragul de 10% din piața de mobile în Franța, Spania, Germania, Italia și Marea Britanie.În ultimii ani, Microsoft a investit în reducerea efortului depus de către dezvoltatorii de aplicații pentru această platformă, aplicând o serie de măsuri precum scăderea prețului pentru obținerea contului de dezvoltator, unificarea platformelor de dezvoltare pentru telefon și tabletă, iar curând, odată cu lansarea Windows 10, unificarea Store-urilor pentru toate dispozitivele din ecosistemul Microsoft incluzând Xbox One. Pe de altă parte, Microsoft a început în ultima perioadă și numeroase colaborări cu producătorii aplicațiilor populare din AppStore și Google Play, pentru a aduce aceste aplicații pe platforma Windows și a diminua din frustrarea utilizatorilor legată de absența aplicațiilor. Toate acestea indică o mare miză pusă de Microsoft pe lansarea Windows 10.

Ca platformă hardware, gigantul software s-a concentrat în ultima vreme pe dispozitivele din zona cu buget redus, lansând numeroase modele noi sau variante îmbunătățite ale modelelor existente. Însă în zona dispozitivelor de top dinamica e mult mai mică. Probabil că achiziția Nokia și procesele de tranziție aferente sunt două dintre motive, dar într-o piață așa dinamică precum cea a dispozitivelor mobile, lansări la intervale mai mari de un an nu sunt permise. Ar fi totuși de apreciat parteneriatul cu HTC pentru modelul M8, doar că e nevoie de continuitate și prezență de spirit pentru a ține cumpărătorii în priză – nimeni nu ar fi încântat să plătească prețul unui telefon de top cu Windows când modelul mai nou cu Android e deja lansat. Să sperăm totuși că o dată cu Wi n d o w s 1 0 , Microsoft va aduce un suflu nou și la partea de hardware.

Prima impresie

Prima provocare cu care m-am confruntat în dezvoltarea pentru mobile a fost dinamicitatea mult mai mare a platformei: la momentul în care am demarat proiectul, Windows Phone 7 era încă un cetățean cu drepturi depline, iar WP 8 devenea noua modă. Pe parcursul


programare dezvoltării a apărut WP 8.1, care deși pare un update minor, e de fapt o cu totul altă platformă față de 8.0. Trecerea la WP 8.1 ar fi însemnat un efort nesustenabil având în vedere că aveam deja de făcut față diferențelor între 7 și 8. Iar mai târziu, la momentul lansării aplicației, avem deja o avanpremieră pentru Windows 10, iar aplicația pentru WP 7 a devenit din păcate prea veche pentru a mai putea fi publicată în Store.

Design

Tendința inițială la demararea aplicației a fost preluarea designului din versiunea de iOS și transpunerea lui în Windows Phone. Dar nu a trecut mult până să realizez că unele lucruri nu păreau deloc la locul lor. Dacă cu Android se mai pot păstra unele similarități între aplicații, în Windows Phone experiența utilizator e complet diferită. Câteva exemple în acest sens ar fi modul de deschidere a meniului (partea stângă în iOS, fără corespondență în WP), modul de navigare (cu butoane soft față de hard), meniul contextual specific doar WP și multe altele. M-am văzut foarte curând în fața misiunii de a concepe un design nou, adaptat la experiența și capabilitățile dispozitivelor Windows Phone, care să respecte recomandările de experiență utilizator a platformei, și poate cel mai greu pentru un programator, să arate bine. Am luat în considerare sugestiile și feedbackul tuturor persoanelor din jur pe care le-am putut implica: colegi, prieteni, familie, astfel încât versiunile pe care le prezentam beneficiarului final (Ovidiu - TSM) pentru încă o rundă de feedback să fie cât mai atractive. Chiar și cel mai reușit design însă nu este suficient pentru a face aplicația captivantă, motiv pentru care am apelat și la acele mici artificii numite animații. Mult mai experimentații colegi de pe platformele iOS și-au adus aportul prin sugestii și uneori chiar detalii de dinamică a animațiilor, motiv pentru care țin să le mulțumesc pe această cale.

Model-View-ViewModel (MVVM)

Pentru cei cu experiență în tehnologiile bazate pe limbajul XAML, pattern-ul MVVM folosit este un model prea bine împământenit în mediile profesionale pentru a fi considerat o ”alegere” în adevăratul sens al cuvântului. Nu voi intra în detalii legate de acest pattern, însă pentru a vă face o idee despre el, se poate spune pe scurt că reprezintă o variantă specializată pentru tehnologiile XAML a pattern-ului Presentation Model (PM), cu scopul de a simplifica modelul de programare bazat pe evenimente a interfețelor utilizator. Pattern-ul PM la fel ca și Model-ViewPresenter, separă interfața utilizator de comportament și stare și creează o abstracție a interfeței.

TODAY SOFTWARE MAGAZINE Unelte și tehnologii

Aria de tehnologii din care am avut de ales a fost destul de limitată fiind vorba de o platformă de dezvoltare destul de tânără. Având nevoie de o bază de date pentru stocarea revistelor și articolelor, am avut norocul de a începe implementarea întrun moment foarte prielnic din acest punct de vedere, având la dispoziție baza de date LINQ to SQL – o variantă simplistă a tehnologiei Entity Framework cunoscută oricărui dezvoltator .NET. Singurele probleme ridicate au fost legate de sincronizarea accesului – scrierea de date într-o tabelă din care alt fir de execuție încearcă să citească, s-a dovedit problematică, motiv pentru care a fost nevoie să sincronizez accesul la baza de date. Din păcate, în versiunea RT a Windows Phone 8.1 ,suportul pentru baza de date a fost omis, aplicațiile mai noi fiind nevoite să folosească SQLite. Acest lucru nu ar fi neapărat o problemă dacă Microsoft ar fi pus la dispoziție și un furnizor de LINQ pentru el. Din păcate în acest moment există o singură librărie externă decentă, și anume sqlite-net – rămâne să sperăm că Microsoft nu va amâna prea mult rezolvarea acestei situații și va veni cu o soluție oficială. Exemplu cod de acces sincronizat la DB: public T Find<T>(Expression<Func<T, bool>> selector, params Expression<Func<T, object>>[] includes) where T : class { OperationOnDatabase.WaitOne(); using (DataContext dataContext = IoC. Get<DataContext>()) { if (includes != null && includes.Length != 0) { DataLoadOptions loadOptions = new DataLoadOptions(); foreach (Expression<Func<T, object>> include in includes) { loadOptions.LoadWith<T>(include); } dataContext.LoadOptions = loadOptions; } IQueryable<T> query = dataContext.GetTable<T>(); T result = query.FirstOrDefault(selector); OperationOnDatabase.Set(); return result; } }

O surpriză plăcută a fost să descopăr disponibilitatea pentru WP a unor librării deja consacrate în celelalte tehnologii .NET, referindu-mă aici la arhicunoscutul Google Analytics și la Json. NET - util la transformarea rezultatelor în format JSON de la server în modele interne ale aplicației. Un alt avantaj a fost disponibilitatea operațiilor de share pe e-mail și rețelele sociale oferită de sistemul de operare. O altă librărie externă pe care am folosit-o este o extensie a celor de la Caliburn.Micro numită BindableAppBar, ce permite tratarea evenimentelor din bara de aplicații (meniul de jos din aplicațiile WP) într-o manieră specifică MVVM - în contrast cu bara oferită de sistemul de operare ce suportă doar evenimente în code-behind. Poate cel mai interesant aspect legat de tehnologii ar fi modul de alegere a librăriei MVVM ajutătoare. Deși există o sumedenie de opțiuni pe piață, doar câteva din ele au ajuns la o relativă maturitate și sunt disponibile pe WP. Aș menționa aici deja consacratele MVVM Light Toolkit și Prism. Cu Prism avusesem deja experiență și știam că are limitările lui – probabil a evoluat www.todaysoftmag.ro | nr. 34/aprilie, 2015

13


programare S-a lansat aplicația TodaySoftMag pentru Windows Phone o pagină anterioară urmând fluxul standard de navigare. Se mai poate face prin întoarcerea de la pagina următoare (caz în care pagina se află deja în memorie, nu mai trebuie inițializată, devenind doar vizibilă pe ecran), sau prin pornirea aplicației din starea suspendată direct la ultima pagină vizitată. Pe lângă aceste moduri, experiența din alte proiecte mi-a arătat că mai există un caz hibrid, în care prin apelul din aplicații externe sau din sistem, aplicația poate fi pornită direct într-o pagină intermediară fără a trece prin fluxul normal de navigare între pagini și poate accepta și parametri de intrare. Toate aceste cazuri plus natura asincronă a comunicării pe mobil, pot genera stări foarte interesante ale aplicației. între timp dar am preferat să nu risc, ci mai degrabă să învăț ceva nou. Așa încât următoarea opțiune a fost arhicunoscutul MVVM Light. Din păcate am ajuns foarte repede să pun la îndoială alegerea făcută, însă probabil multora dintre voi vă pare cunoscut scenariul de a nu avea certitudinea dacă problema rezidă în alegerea făcută sau în competența utilizatorului… În astfel de situații caut semne obiective care să mă scoată din impas, iar în cazul de față factorul de decizie a fost lipsa crasă a documentației. Probabil autorii MVVM Light mizează pe faptul că unealta lor e așa ușor de folosit încât nu are nevoie de documentație – ceea ce nu a fost cazul meu. Chiar și astăzi, aruncând o privire la pagina lor web, se poate constata nonșalanța cu care au tratat acest subiect, așa încât am ajuns să testez o librărie mai puțin populară la acea vreme și anume Caliburn.Micro. Acesta m-a atras de la început prin simplitate și puterea oferită. Doar că simplitatea care nu e și intuitivă poate deveni frustrantă. Dar ajungând la pagina lor de documentație am realizat că e de un profesionalism desăvârșit – se observă din doar două rânduri că autorii lui au gândit și răzgândit fiecare lucru pe care l-au scris și implementat.

Ciclul de viață al aplicației

Un alt subiect interesant este ciclul de viață al aplicației - complet diferit față de experiența din programarea desktop și web de până atunci. Aplicația are mai multe stări decât clasicele pornită și oprită, introducând multe scenarii interesante legate de modul în care o pagină din aplicație ajunge să fie vizibilă utilizatorului. Intrarea în orice pagină se poate face de la

14

Navigația între pagini

implicare. Există un nivel de animații oferite implicit de sistemul de operare, referindu-mă aici la stilurile prestabilite ale controalelor folosite în aplicație (teme și tranziții între stări). Un alt nivel de animații sunt cele puse la dispoziție în librării ce trebuie doar importate manual și folosite adecvat. Dintre acestea aș menționa animațiile de intrare și ieșire din pagină și animațiile de rotație la schimbarea orientării ecranului. Următorul nivel ar fi animațiile personalizate, care deși sunt destul de discrete, nu au cum să fie trecute cu vederea. Mă refer aici la butoanele de alegere a limbii, la animarea ultimelor ediții ale revistei la pornirea paginii de start, la oscilațiile imaginilor edițiilor din lista completă de

Având multă experiență la activ în WPF și mai ales în Silverlight, m-aș fi așteptat ca dezvoltarea de aplicații Windows Phone să nu îmi ridice prea multe probleme. Realitatea însă a fost puțin diferită: la nivel de interfață utilizator și limbaj lucrurile sunt relativ asemănătoare, deși am constatat o mare diferență la navigarea între pagini și ciclul de viață al aplicației. Experiența poate fi comparată cu trecerea de la programarea desktop la web pentru cei care au trecut prin așa ceva. Foarte simplu, în WP nu se păstrează starea între paginile aplicației. Pasarea de parametri între pagini se face prin query string-uri, iar pentru tipuri mai complexe situația se complică pentru că nu există o metodă standard de a rezolva problema. Calibun.Micro s-a dovedit de un real ajutor în acest caz, oferind o soluție simplă și intuitivă: navigationService.UriFor< ArticlesInIssueViewModel>() .WithParam<int>(articleVM => articleVM.IssueId ,selectedIssue.Id).Navigate();

reviste (tot în pagina de start), la intensitatea progresivă cu care apar imaginile articolelor din revistă, la antetul care apare și se ascunde în funcție de modul de deruExemplu cod navigare folosind lare a conținutului unui articol. Cei care Caliburn.Micro au avut de-a face cu ecosistemele iOS vor remarca probabil similaritatea cu bara de Animații adresă din Safari, a cărei funcționalitate am Partea de animații a fost una din cele încercat să o reproduc. mai interesante părți din dezvoltare, ele contribuind la identitatea și atractivita- Probleme întâlnite tea unei aplicații. Nu avem cum compara De foarte departe, cele mai multe proaplicația de față cu cele din topul magazi- bleme întâlnite au fost legate de pagina de nelor de aplicații, dar aceasta nu înseamnă conținut a articolelor. nici că trebuie sa ne mulțumim cu o variSfatul cel mai important pe care antă de duzină cum sunt multe din coada vi-l ofer gratis este legat de controalele magazinelor de aplicații mobile. Pe de altă de web: nu folosiți controale de web în parte, pe cât sunt de interesante animațiile, aplicații mobile. Dacă totuși sunteți nevoit pe atât sunt de costisitoare ca timp de să folosiți unul, încercați să vă limitați la

nr. 34/aprilie, 2015 | www.todaysoftmag.ro


a interacționa cu el într-un mod cât mai • La ieșirea din pagină, conținutul conminimalist posibil, în genul trimiterii adretrolului trebuie șters- am folosit artificiul sei paginii HTML ce trebuie vizualizată, de a încărca un about:blank- pentru că pentru că restul e cancan. altfel se poate ajunge în situații bizare de Problemele controlului web sunt nenugenul celei în care un Video care a fost mărate și nu toate țin de faptul că vorbim pornit rămâne în memorie și rulează în despre Internet Explorer - sunt multe ce țin continuare chiar dacă utilizatorul a navide natura foarte diferită a controlului. Vă gat la altă pagină. prezint mai jos o listă cu câteva din aceste • Un video imbricat în pagina HTML probleme pe care le-am întâlnit: nu raportează sub nicio formă eveni• Controlul nu raportează fidel evemente, astfel încât a fost imposibil să nimentele de navigare și de finalizare a implementez scenariul ca atunci când încărcării paginii, fiind necesare multe utilizatorul apasă butonul de ecran-comartificii pentru a oferi utilizatorului o plet să pot ascunde restul elementelor experiență agreabilă. Mă refer aici la din pagină. situații în care pagina nu se încarcă sau se încarcă cu erori sau pur și simplu Un alt eșec de proporții legat de controîncărcarea durează prea mult – pentru lul web a fost încercarea de a implementa astfel de situații trebuie găsite metode de un scroll infinit pe orizontală între articolele din aceeași revistă. Un gest de swipe din partea dreaptă a ecranului ar fi dus la trecerea printr-o animație la următorul articol și analog la swipe din partea stângă. Deși ajunsesem la final cu implementarea unei variante funcționale, am fost nevoit să renunț complet la această idee pentru că web control-ul nu raporta fidel gesturile utilizatorului în termeni de distanță delta, frecvența raportării și accelerație. Alte aspecte interesante din punct de vedere tehnic au ținut de natura asincronă a apelurilor în dezvoltarea pe mobil. Ce se întâmplă spre exemplu atunci când rezultatul unui apel asincron (fie el la server sau la baza de date) se întoarce după ce utilizatorul a navigat deja la altă pagină? În primă instanță nimic, dar la o testare mai atentă aplicația ridică o excepție care uneori e ignorată, alteori termină aplicația. Acele apeluri pot fi anulate, dar când acest lucru nu este posibil, rezultatele acelor apeluri pot fi și trebuie ignorate. Limbajul C# oferă gestiune destul de costisitoare. suport pentru anularea de apeluri por• În mod implicit, controlul web oferă nite asincron, punctul de intrare în acest posibilitatea navigării la adrese din subiect fiind clasa TaskCancellation pentru conținut - a fost nevoie să suprim această cine vrea să afle mai multe detalii. Ce se funcționalitate pentru a preveni situația întâmplă în cazul în care o pagină modifică în care utilizatorul folosește aplicația anumite date care apar deja și pe o pagină TSM pe post de browser web. Acest anterioară? La navigarea în pagina anterilucru nu s-a putut face doar prin setarea oară vor fi vizibile modificările? Răspunsul unui simplu atribut. implicit este nu, pentru că nu există stări • Controlul înghite gesturile și alte între pagini și nu pot fi trimise nici notifievenimente generate de utilizator cări. Programatorul poate însă avea grijă să considerând că acestea fac parte din trateze astfel de situații verificând manual interacțiunea cu conținutul HTML starea obiectelor susceptibile modificărilor. imbricat și nu le mai expune în niciun fel Un exemplu elocvent este pagina prinprogramatorului pentru alte procesări. cipală, unde numărul de articole dintr-o Din acest motiv antetul care apare și se revistă nu este vizibil decât după explorarea ascunde în funcție de mișcările verticale acelei ediții, moment în care se încarcă lista din conținutul HTML al articolului a de articole de la server. La întoarcerea în ridicat multe probleme de sincronizare. pagina principală, numărul de articole din

ediția vizitată trebuie actualizat manual. O altă secțiune destul de costisitoare a fost schimbarea de limbă, care deși pare o operație destul de facilă în sine, varianta finală a implementării a ajuns departe de a fi simplă. Apelurile la server în curs trebuie anulate, baza de date trebuie golită, unele setări ale aplicației trebuie resetate, iar aplicația trebuie repornită fără posibilitatea de navigare înapoi.

Testare

Robin Molnar, colegul din partea 3Pillar Global, a fost responsabil cu asigurarea calității aplicației, dând dovadă de mult profesionalism în ce privește procesul de testare. S-a implicat atât în partea de aplicație mobilă cât și în partea de server, iar rigurozitatea și sugestiile lui vor avea cu siguranță un impact consistent în percepția utilizatorilor asupra aplicației. Diferitele scenarii de test aplicate pe dispozitive și platforme diferite au necesitat multă atenție și efort.

Încheiere

Fără intenția unui clișeu de premiu Oscar, țin să le aduc mulțumiri 3Pillar Global pentru susținerea oferită, directorului Dan Suciu pentru demararea și susținerea acestui proiect, lui Robin Molnar pentru profesionalismul exemplar și lui Ovidiu Mățan, Dan Hădărău pentru partea de design și echipei Gemini Solutions pentru suportul oferit în toate stagiile de dezvoltare a aplicației. Ca o concluzie, aș putea spune că am învățat foarte mult din acest proiect, atât tehnologic cât mai ales la părțile de comunicare și coordonare. Am învățat că este nevoie de foarte multă muncă la un produs pentru a putea fi considerat complet, și că poți spune aceasta doar în momentul în care produsul se află în mâinile clienților finali. Deși pare simplu din punct de vedere al programatorului care scrie codul și închide ultimul task, efortul depus până la adevăratul “gata” nu este deloc de neglijat. Nu este cazul aici, însă uneori acest efort poate ajunge la fel sau chiar mai mare decât efortul de implementare. Există o sumedenie de alți factori care contribuie la succesul unui produs, iar modul de implementare de către programator are de prea puține ori ponderea majoritară. Închei cu invitația de instala aplicația din WP Store și de a contribui cu sugestii și feedback, pe care le vom aprecia și care evident vor constitui baza de plecare pentru următoarele versiuni ale aplicației.

www.todaysoftmag.ro | nr. 34/aprilie, 2015

15


interviu

A

Despre testare cu Rene Tuinhout

m avut plăcerea de a lua un interviu lui Rene Tuinhout, chairman al ediției 2015 a Romanian Testing Conference. Cu o experiență de peste șaptesprezece ani în testarea software, acesta oferă consultanță companiilor pentru Lean Testing, test management, test change management structuring testing și managementul proiectelor de testare.

[Ovidiu Mățan] Într-un interviu pentru revista Professional Tester ați făcut o afirmație interesantă cu privire la modul de a vedea testarea ca o diminuare a riscului mai degrabă decât prevenirea unui eșec. Ați putea să dezvoltați această idee pentru cititorii revistei noastre? [Rene Tuinhout] Ideea din spatele afirmației pe care ai citat-o de la Richard și din articolul meu este destul de simplă: noi am ajuns la concluzia că discuția despre beneficiile testării este destul de complicată și că în cele mai multe cazuri se sfârșește printr-o situație în care convenim ”să fim de acord să nu cădem de acord”, atunci când discuția este despre defecte găsite și remediate. Noi în calitate de testeri, considerăm că un anume defect găsit este similar cu unul nedescoperit într-un alt proiect, care a cauzat o pierdere de X euro atunci când a fost descoperit în utilizare în viața reală. Deci, am spune că noi am economisit X euro pentru companie. Totuși, compania ar susține că defectul descoperit (și remediat) era destul de diferit de cel nedetectat anterior, și de aceea, comparația nu poate fi făcută. Ceea ce ne lasă fără temei pentru a demonstra beneficiile testării într-un limbaj pe care afacerile îl înțeleg: banii. Totuși, asta s-a schimbat când am trecut de la discutarea beneficiilor testării bazate pe prevenirea eșecurilor la discutarea beneficiilor testării bazate pe diminuarea riscurilor. În articolul pe care l-ai menționat, Richard și cu mine am prezentat o metodă simplă care le permite managerilor afacerilor (cu ajutorul testerilor) să întocmească o hartă a tipurilor de riscuri pentru afacerea lor specifică. Apoi, riscurile concrete prevăzute în schimbarea/ produsul nou pe care compania o/ îl dorește sunt colectate de la personalul companiei (utilizatori, operatori, dba, etc.). Combinând aportul personalului companiei cu cel al managementului companiei, toate riscurile concrete identificate de către personal pot fi trecute pe o hartă - termometru al riscului, utilizând riscurile afacerii furnizate de către managerii companiei.

16

Aceasta va duce la un model reprezentat de un termometru care indică riscurile concrete, pe categorii, după cum este de acord managementul companiei. Există trei avantaje: • Angajații companiei își pot scoate la iveală experiența lor în legătură cu riscurile concrete; • Conducerea companiei poate contribui cu experiența proprie în legătură cu riscurile pentru afacere și poate decide ce tipuri de risc (și riscuri asociate) ar trebui să fie testate minuțios și ce tipuri de risc (și riscuri asociate) sunt acceptabile;

Drept consecință, toate riscurile poartă acum o valoare monetară (de obicei exprimată așa: ”va costa cel puțin Y și cel mult Z”). Mai târziu, după ce riscurile au fost clasificate în categoriile indicate de către conducere, vor fi concepute teste pentru a acoperi riscurile cele mai importante. Acest lucru înseamnă automat că o defecțiune detectată atunci când se testează pentru a acoperi un risc ar fi costat compania ”cel puțin Y și cel mult Z”, permițând tester-ilor și conducerii companiei să discute beneficiile testării pe baza unui temei comun: banii.

• Beneficiile testării pot fi discutate Decizia cu privire la ceea ce ar trebui astfel încât tester-ii și managementul să testat și ce nu pe baza abordării metodei fie de acord. termometru pare a fi un instrument simplu și puternic pentru a face oamenii să Acest punct final merită puțină analiză: înțeleagă mai bine importanța testării. Cum Atunci când se discută tipurile de risc funcționează acest lucru în practică pentru cu managementul companiei, de obicei proiectele reale? managementul dorește să exprime riscu[Rene Tuinhout] Într-un cuvânt: rile în valori monetare: ”Cât ar costa dacă Grozav! Articolul pe care l-ai menționat a se întâmplă să se concretizeze acest risc?” fost publicat în 2011. Chiar și mai înainte Dacă această întrebare nu este ridicată în de acest moment, termometrul era utilizat timpul ședinței cu managementul compa- în unele proiecte, iar după publicarea artiniei, atunci li se poate sugera că exprimarea colului a fost utilizat în mult mai multe. S-a tipurilor de risc în valori monetare ar putea dovedit a fi un instrument puternic care: fi o idee bună. • Ajută conducerea companiei să ia

nr. 34/aprilie, 2015 | www.todaysoftmag.ro


TODAY SOFTWARE MAGAZINE decizii de management în legătură cu ce tipuri de risc să accepte și ce tipuri de risc să nu accepte (ex. ceea ce trebuie, ar trebui, ar putea să fie sau nu va fi testat la un nivel conceptual); • Ajută compania, proiectul și continuitatea – managementul ia decizii legate de (re-)prioritizarea efortului depus, în funcție de riscurile afacerii; • Ajută personalul companiei să realizeze o ierarhie a riscurilor în ordinea priorității, arătându-le cum riscurile lor sunt legate de riscurile reale pe care alți angajați ai companiei le-au trecut pe model; • Ajută testerii să identifice ce teste au prioritate (care sunt obligatorii, care ar trebui, ar putea sau care nu au prioritate); • Ajută tester-ii să demonstreze beneficiile testării. Modelul este cel mai mult utilizat drept modelul termometru. Totuși, în unele cazuri a evoluat într-o matrice bidimensională, care pune la dispoziția managementului companiei puțin mai multe detalii. Practic, riscul este prezentat pe termometru drept o valoare, în timp ce pe matricea bidimensională riscul este divizat în impact și probabilitate. Există proiecte care deleagă sarcinile de testare inginerilor software prin faptul că fac testarea unităților și testarea integrării. De asemenea, am văzut și proiecte în care testarea este practic făcută de către proprietarul de produs (product owner). Cum vedeți această abordare? [Rene Tuinhout] Deși apreciez aceste abordări, eu cred că implicarea tester-ilor profesioniști în eforturile de testare are importanța ei. Inginerii de software și proprietarii de produs ar trebui în mod cert să fie implicați în testare. Anumite abordări, precum Agile, pavează în prezent calea

pentru ca inginerii de software și product owner-ii să fie implicați în testare. Asta este ceva ce mulți testeri profesioniști au cerut de ani de zile, pentru că are drept rezultat un software de o calitate mai bună și o implicare mai mare a proprietarilor de produs în dezvoltarea și testarea produsului. Cu toate acestea, excluderea tester-ilor din dezvoltarea produsului ar însemna ignorarea unui aspect foarte important din meșteșugul tester-ului: distrugerea constructivă. Inginerii de sistem la fel ca și product owner-ii, se concentrează pe a face lucruri. Ei tind să își concentreze eforturile de dezvoltare și testare asupra acelor aspecte ale produsului testat pe care acel produs ar trebui să le facă. Tester-ii au capacitatea, priceperea și setul de instrumente pentru a descoperi și a se concentra pe acele aspecte ale produsului testat pe care acel produs nu ar trebui să le facă sau ar trebui să le facă foarte rar, cât și pe aspecte non-funcționale care nu sunt ușor de testat (de exemplu, securitatea, performanța, ușurința de a fi utilizat sau întreținut), descoperind astfel potențiale defecte pe care inginerii de sistem și product owner-ii au mai puține șanse de a le descoperi. De aceea, eu consider că eforturile de testare ale inginerilor de sistem, proprietarilor de produs și ale tester-ilor se completează unele pe altele. Eu consider că un mare beneficiu al faptului că toate aceste ramuri sunt implicate în testare este posibilitatea de a învăța unele de la altele: dezvoltatorii de sistem învață un pic mai multă distrugere constructivă, proprietarii de produs câștigă o mai bună înțelegere a dificultăților tehnice ale realizării unui produs și a riscurilor sale asociate, iar tester-ii învață câte ceva despre programare și despre riscurile pe care trebuie să le prevină proprietarul de

produs. Dacă mâine v-ar cere cineva să înființați o universitate de testare, cum ar arăta materialele de studiu? [Rene Tuinhout] A fost depus mult efort de către echipa de lucru Dutch TestNet (Asociația tester-ilor Olandezi) pentru a realiza un curriculum academic/ politehnic. Ar fi mult prea elaborat să discutăm în acest articol curriculumul care a fost creat în detaliu, dar acesta se centrează pe învățarea studenților despre interacțiunea utilizatorului, procesele de business, software, infrastructură, interfața hardware și abilitățile de analiză, consiliere, proiectare, dezvoltare și mentenanță. Toate materialele sunt în olandeză, dar dacă sunteți interesați, trimiteți-mi un e-mail și putem discuta despre asta. 5. Felicitări pentru obținerea premiului ”People′s Choice Award” la RTC în 2014. În acest an veți fi președintele RTC. Ce subiecte interesante sunt pregătite pentru acest an? Mulțumesc! Am fost foarte onorat să câștig acest premiu și să fiu rugat să fiu președinte în acest an. Sunt multe subiecte interesante și vorbitori atât experimentați cât și novici în ediția RTC de anul acesta. Pentru o privire de ansamblu asupra întregului program, vă rog vizitați www. romaniatesting.ro. Personal, consider că Romanian Testing Conference 2015 are mulți oratori interesanți (ex. Peter Varhol, Markus Gärtner, Echipa Army Ants (Software Testing World Cup)) de la multe companii interesante (ex. Adobe, Cisco, Facebook) și se concentrează pe subiecte interesante care sunt de actualitate precum cloud, legile de confidențialitate, automatizarea testării, calitatea datelor testelor, IoT. Ovidiu Măţan

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

www.todaysoftmag.ro | nr. 34/aprilie, 2015

17


prezentare

SafeDrive

Ț

i-ai dori să transformi condusul responsabil în ceva distractiv, să îți determini și prietenii să conducă responsabil și, mai mult, să fiți recompensați pentru asta? Cu aplicația SafeDrive, acum este posibil. SafeDrive este o aplicație care încurajează comportamentul responsabil la volan, oferind puncte șoferilor care nu își folosesc telefonul în timp ce conduc.

Procesul este simplu și ușor de urmat. Șoferii care au nevoie de o motivație externă pentru a conduce responsabil nu trebuie decât să descarce aplicația disponibilă atât în Google Play Store, cât și în Apple App Store, și să introducă datele necesare pentru a-și face un user sau să se conecteze cu profilul de Facebook. Apoi, de fiecare dată când se urcă la volan, deschide aplicația și își folosește telefonul mobil doar la finalizarea cursei. Odată deschisă, aplicația se activează în momentul în care șoferul conduce cu o viteză care depășește 10 km/h, afișând pe ecranul telefonului butonul de Release. Acesta poate fi apăsat în momentul în care șoferul dorește să își folosească telefonul pentru a trimite mesaje, a răspunde la telefon, sau pentru orice altă întrebuințare, însă aplicația îl va anunța că va pierde toate punctele acumulate în timpul cursei. În momentul în care mașina staționează, șoferul poate anunța aplicația că și-a finalizat cursa și va afla câte puncte a acumulat pe parcurs. Aplicația calculează numărul de puncte câștigate de șofer în fiecare cursă utilizând un algoritm complex, care ia în calcul distanța parcursă,timpul făcut și viteza. Punctele câștigate pot fi apoi convertite în reduceri la produsele companiilor partenere aplicației SafeDrive. De exemplu, cu doar 50 de puncte SafeDrive,

18

utilizatorii aplicației beneficiază de un discount de 2% la orice produs evoMAG, de 50 de puncte MultiBonus Card, utilizabile în benzinăriile Mol, sau de un card de vacanță Standard oferit de 9695.ro. Cu 2,200 șoferi activi lunar și peste 2.5 milioane km parcurși responsabil, SafeDrive a început deja să motiveze șoferii să aibă un comportament responsabil la volan. Planurile de viitor ale fondatorilor nu se opresc însă aici și vizează lansarea unui sistem de challenge-uri, care va stimula și mai mult conștientizarea riscurilor folosirii telefonului mobil la volan. Prin intermediul acestui sistem, utilizatorii aplicației vor fi invitați zilnic să ia parte într-un challenge, oponentul fiind ales automat de aplicație. Aplicația va selecta cursa din ziua precedentă în care fiecare dintre cei doi utilizatori a obținut cel mai mare număr de puncte, câștigătorul challenge-ului va fi utilizatorul care a acumulat un număr de puncte mai mare decât cel al oponentului. Premiul oferit câștigătorului este un număr de puncte obținute de oponentul său, valoarea premiului fiind calculată ca procent al numărului total de puncte strâns de oponent până în prezent. Obiectivul sistemului de challenge-uri este pe de o parte fidelizarea utilizatorilor și adăugarea unei doze de risc și dramatism,

nr. 34/aprilie, 2015 | www.todaysoftmag.ro

iar pe de altă parte motivarea utilizatorilor să folosească zilnic aplicația și cu o frecvență mai mare, astfel încât să acumuleze cât mai multe puncte și să își învingă oponenții în challenge-ul de a doua zi. Datorită inițiativei de a sensibiliza populația față de o problemă atât de gravă, precum folosirea telefonului mobil la volan, dar și datorită modului inedit cu care fondatorii au ales să rezolve această problemă, aplicația SafeDrive face parte din finaliștii prestigiosului concurs Edison Awards, a cărui finală va avea loc pe 23 aprilie la New York. Subcategoria la care a fost nominalizată și este acum printre cei trei finaliști este Health & Wellness, din cadrul categoriei LIFESTYLE & SOCIAL IMPACT. Aplicația SafeDrive a fost dezvoltată în native iOS și native Android. Echipa de dezvoltare include un dezvoltator de iOS, Gabriel, doi dezvoltatori de Android, Sorin și Mihai, un specialist UX/Design, Oana. Testarea implică mulți kilometri parcurși prin București și este făcută de o echipă formată din Doru și Alex. Tudor Cobâlaș

tudor@xlteam.nl Business Developer @XL Team


eveniment

TODAY SOFTWARE MAGAZINE

Techsylvania 2015

P

entru toţi românii, Clujul este anul acesta Capitală Europeană a Tineretului. Pentru programatori, oraşul din inima Transilvaniei este pentru al doilea an consecutiv gazda celui mai mare eveniment de inovaţie tehnologică, wearables şi connected devices din regiune.

Techsylvania va debuta printr-un hackaton care se adresează în primul rând tinerilor dezvoltători de aplicaţii pe gadgeturi wearables şi mobile. Există o bază minimă de cunoştinţe de programare necesare pentru înscriere, astfel încât să existe o competitivitate productivă în rândul echipelor. Dispozitivele puse la dispoziţie de organizatori acoperă o gamă largă din zona wearables, pornind de la ultimele apariţii în zona de ceasuri inteligente (Apple Watch, Pebble), brăţări inteligente (Jawbone, Withings) şi altele precum Oculus, Leap Motion, Sphero, The Eye Tracker. Toţi cei înscrişi la hackathon vor avea 24h pentru programare, la finalul căruia cel mai bun proiect va primi şansa de a-şi prezenta proiectul la un accelerator internaţional de startup-uri pentru a găsi potenţiali investitori. A doua parte a evenimentului va fi conferinţa de două zile care se orientează pe trei domenii de interes pentru antreprenorii din domeniul tehnic sau companiile dezvoltatoare de produse software: Cod (cele mai noi soluţii şi teme

tehnice), Produs (managementul produsului, marketing), Finanţare (modalităţi de finanţare şi tipuri de investiţii). Speakerii din cadrul conferinţei sunt atât români de succes, care şi-au dezvoltat propria afacere şi au transformat-o într-un succes de nivel internaţional, precum Florin Talpeş (Bitdefender) şi Andrei Dunca (LiveRail, companie achiziţionată de Facebook), cât şi reprezentanţi executivi din rândul unor companii globale precum Uber, PayPal, Siri, Spotify care au atins şi piaţa din România. Evenimentul va găzdui peste 600 de participanți, fiind un bun prilej pentru invitații din diverse medii de a împărtăși cunoștințe utile care să contribuie la dezvoltarea ecosistemului tehnologic și a gradului de inovație din Cluj-Napoca și România. “Techsylvania” are drept scop promovarea comunităților din orașul Cluj-Napoca și din România ca centre ale tehnologiei recunoscute și confirmate la nivel internațional, dar și stimularea dezvoltării de produse locale. Evenimentul oferă atât oportunitatea de interacțiune

socială cu scopul stabilirii de parteneriate, găsirii de finanțări sau obținerii de mentorat din partea experților, cât și cu scopul promovării unor idei tehnice revoluționare din rândul programatorilor români. Toţi cei interesaţi pot achiziţiona bilete cu un discount de 20% folosind codul TSMtech pe site-ul http://techsylvania.co.

Vlad Ciurca vlad@techsylvania.co Product Guy. Tech Events Producer. Connector @ Techsylvania

www.todaysoftmag.ro | nr. 33/martie, 2015

19


comunități

Comunităţi IT

V

ă invităm să participați în următoarea perioadă la evenimente de calitate precum IT Camp, Romanian Testing Conference sau I T.A.K.E. Unconference. Totodată este perioada în care se vor defini o bună parte din cele mai importante startup-uri din acest an prin Startup Weekend Cluj și Timișoara. Ne vedem la evenimente !!!

Transylvania Java User Group Comunitate dedicată tehnologiilor Java. Website: www.transylvania-jug.org Data înfiinţării: 15.05.2008 / Nr. Membri: 599 / Nr. Evenimente: 47 Comunitatea TSM Comunitate construită în jurul revistei Today Software Magazine. Websites: www.facebook.com/todaysoftmag www.meetup.com/todaysoftmag www.youtube.com/todaysoftmag Data înfiinţării: 06.02.2012 /Nr. Membri: 2270/Nr. Evenimente: 31 Cluj Business Analysts Comunitate dedicată analizei de business Website: www.meetup.com/Business-Analysts-Cluj Data înfiinţării: 10.07.2013 / Nr. Membri: 91 / Nr. Evenimente: 8 Cluj Mobile Developers Comunitate dedicată tehnologiilor mobile Website: www.meetup.com/Cluj-Mobile-Developers Data înfiinţării: 05.08.2011 / Nr. Membri: 264 / Nr. Evenimente: 17 The Cluj Napoca Agile Software Meetup Group Comunitate dedicată metodelor Agile de dezvoltare software. Website: www.agileworks.ro Data înfiinţării: 04.10.2010 / Nr. Membri: 437 / Nr. Evenimente: 93 Cluj Semantic WEB Meetup Comunitate dedicată tehnologiilor semantice. Website: www.meetup.com/Cluj-Semantic-WEB Data înfiinţării: 08.05.2010 / Nr. Membri: 192/ Nr. Evenimente: 29 Romanian Association for Better Software Comunitate dedicată oamenilor cu experiență din IT indiferent de tehnologie sau specializare. Website: www.rabs.ro Data înfiinţării: 10.02.2011 / Nr. Membri: 251/ Nr. Evenimente: 14 Tabăra de testare Comunitate formată din testeri și alți profesioniști din industria IT care, în cadrul unor întâlniri informale lunare, împărtășesc din cunoștințele proprii și învață din experiențele profesionale ale celorlalți membri. Website: www.tabaradetestare.ro Data înfiinţării: 15.01.2012/Nr. Membri: 1243/ Nr. Evenimente: 107

20

nr. 34/aprilie, 2015 | www.todaysoftmag.ro

Calendar Aprilie 22 (Cluj) Lansarea numărului 34 al Today Software Magazine www.todaysoftmag.ro Aprilie 23 (Cluj) 1st Share IT Event www.share-it.ro Aprilie 24 (Cluj) Cluj Startup Weekend - recomandat de TSM cluj.startupweekend.org/ Aprilie 30 (Cluj) .NET Cluj Community Launch facebook.com/events/1871795056383274/ Mai 7-8 (București) Bucharest TECOMM bucharest.tecomm.ro Mai 8 (Timișoara) Startup Weekend Timisoara facebook.com/events/1536616099931448/ Mai 13 (Cluj) DevTalks devtalks.ro Mai 14-15 (Cluj) Romanian Testing Conference www.romaniatesting.ro Mai 29(Timișoara) Google I/O Extended 2015 Timisoara evenimentebiz.ro/event/google-io-extended-2015 -timisoara/ Mai 21-22 (Cluj) IT Camp www.itcamp.ro Mai 21-22 (București) I T.A.K.E. Unconference 2015.itakeunconf.com


programare

Revoluția Big Data

A

vând sediul central în Londra, Ve Interactive este o companie de tehnologie mondială de top, a cărei platformă a devenit o componentă esențială pentru ca orice afacere online să dobândească, să implice și să convertească mai mulți clienți. După numai 5 ani, Ve a crescut rapid prin livrarea cu succes a unor produse care oferă valoare sporită clienților noștri. Acum cu un personal format din peste 700 de angajați, 26 de birouri în întreaga lume și peste 10k clienți în 43 de teritorii, Ve oferă angajaților un mediu antreprenorial și mondial în cadrul căruia să crească și să se dezvolte. Graham McEnroe

graham.mcenroe@veinteractive.com Content Manager at @ Ve Interactive

Noi plănuim să angajăm circa 1000 de persoane până la sfârșitul lui 2015, iar pentru a susține această creștere, deschidem un nou centru de dezvoltare în Cluj, aceasta fiind cea mai recentă completare a portofoliului nostru de centre de dezvoltare, în Londra, Bilbao și Paris. Acest centru ne va asista nu numai în dezvoltarea aplicațiilor noastre existente, dar și în inovarea și dezvoltarea de noi produse pentru a ajuta clienții noștri să își sporească veniturile. Provocând status quo-ul din piața digitală, conducând unul dintre proiectele big data de top din lume și cu ambiția de a deveni următorul gigant tehnologic, Directorul de Date Ve Interactive, Cyrille Vincey, ne oferă o explicație personală despre cum Ve va duce marketingul online la următorul nivel cu big data și o viziune unică. Cumpăna dintre ani a adus mai mult decât rezoluții pentru compania de Big Data și Data Visualisation, qunb, o achiziție de la

Cyrille Vincey

specialiștii în conversii website, Ve Interactive. Scopul este clar. Să dezvolte un produs care să ofere o inteligență business fără rival prin timp real și explorarea retrospectivă a tendințelor clienților online, analitică live și analitică predictivă precisă. În acest interviu, discutăm cu fondatorul qunb și acum Director de Date al Ve, Cyrille Vincey, despre ce anume este hotărât să obțină prin această fuziune de talente și de

www.todaysoftmag.ro | nr. 33/martie, 2015

21


programare Revoluția Big Data ce mai are nevoie pentru a realiza acel lucru. [Graham McEnroe] Ne puteți spune câte ceva despre rolul dumneavoastră? [Cyrille Vincey]: Conduc o echipă de oameni de știință specializați în date, care introduc datele stocate într-un mediu unificat. Dacă vorbim de afirmarea misiunii, noi avem trei obiective primare pe care ne-am dori să le atingem. Crearea unor noi surse de venit bazate pe date, creșterea gamei de produse existente ale Ve Interactive, utilizând inteligența construită pe date, și dezvoltarea unor noi metode de a obține avantaje prin utilizarea resurselor de date.

de scopuri diferite. Această tehnologie presupune înțelegerea unor tipare care nu pot fi identificate de către oameni. De exemplu, detectarea unei corelații dintre orele între care se întâmplă ceva și nivelul de activitate mobilă. Tocmai această capacitate predictivă este ceea ce îi dă valoare, atâta timp cât este o modalitate pentru branduri de a-și măsura și ajusta resursele drept răspuns la tendințele anticipate. În prezent, cele mai multe branduri reacționează la comportamentul clienților online, cu o soluție predeterminată. Cu un marketing alimentat de big data, aceste interacțiuni pot fi bazate pe comportament individual – în timp ce se folosesc informații calificate, anonime. Prin aceste mijloace, noi dorim să îmbunătățim valoarea ofertei pe care Ve o face clienților săi și de asemenea și oferta clienților săi pentru utilizatorii finali.

Ce vă încântă cel mai tare în legătură cu acest proiect? [Cyrille Vincey]: Pasiunea mea vine de la oameni. Niciodată nu am mai întâlnit asemenea diversitate și pasiune înainte de a mă alătura echipei Ve. Mai este și provocarea tehnologică. Acum Credeți că Big Data se utilizează la întregul său potențial în avem un teren de joacă vast de date, în termeni de dimensiune prezent? și resurse. În ceea ce privește proiectele big data, aceasta este o [Cyrille Vincey]: Avem cu siguranță unelte disponibile, situație de vis în care orice dezvoltator sau inginer și-ar dori să dar datele în sine sunt cele care lipsesc de obicei. Asta e ceea ce fie implicat. încântă cel mai mult în legătură cu propunerea de a te alătura echipei Ve. Noi suntem acum în postura unică de a avea acces la Care sunt principalele provocări cu care vă confruntați? un volum imens de date, care este completat perfect cu talentul [Cyrille Vincey]: Ritmul în care crește compania, chiar în și viziunea potrivită. perioada de când am venit eu, poate face dificil să ții pasul – mai ales rata dezvoltării de noi produse și extinderea neîncetată înspre Cum plănuiește Ve Interactive să revoluționeze felul în care se noi piețe geografice. utilizează big data? Dar deși este o provocare să menții pasul, această expansiune [Cyrille Vincey]: Noi putem contribui la rezervorul de rapidă înseamnă și că volumul imens de date potențiale pe care cunoștințe big data prin participarea cu o cantitate mare de R&D le putem utiliza crește de asemenea. Cei (aproximativ) 10.000 de în zonele cheie. Deși este important să continuăm să cultivăm clienți Ve din prezent reprezintă milioane de pagini și activități tehnici avansate de învățare despre aparate, atenția noastră prinale lor în fiecare zi, care pot fi analizate. Cifre enorme. Acestea cipală este focusată pe răspunsurile în timp real. plasează cu ușurință acest proiect big data printre primele 50 din Noi dorim să valorificăm tehnologia care lucrează înspre lume. Având această plajă tech vastă la îndemână, este impo- îndeplinirea acestui scop. Pentru aceasta, avem nevoie de ingisibil să rămâi pe loc, iar acesta este locul ideal pentru învățare neri cu experiență în dezvoltarea open source. Dezvoltatorii open constantă. source sunt cei mai pasionați și devotați din lume. Munca lor este izvorâtă dintr-o curiozitate iresponsabilă față de meșteșugul lor, Ce efect are big data asupra modului în care brandurile și com- iar asta e ceva ce nu se poate învăța. paniile interacționează cu clienții lor? [Cyrille Vincey]: Valorificarea corectă a big data înseamnă că De ce să lucrezi pentru Ve? firmele au tehnologia pentru a folosi orice date într-o multitudine [Cyrille Vincey]: Știm cu certitudine că găsirea proiectelor

22

nr. 34/aprilie, 2015 | www.todaysoftmag.ro


TODAY SOFTWARE MAGAZINE interesante de dezvoltare big data este dificilă, cu excepția cazului giganților tech cu vechime. Ceea ce facem noi va revoluționa piața web cu o viziune unică a Ve despre cum să utilizăm datele. Cel mai convingător motiv pentru a lucra aici este că, împreună cu Ve, vei pune sub semnul întrebării status quo-ul prezent din lumea digitală. Noi nu dorim să fim achiziționați de vreun gigant, noi ne dorim să devenim unul. Big Data este un termen la modă, care impresionează (un buzzword) – Puteți aduce ceva claritate, oferindu-ne definiția dumneavoastră? [Cyrille Vincey]: Îmi place să spun că Big Data actualizează tehnici de stocare care erau utilizate în anii 70 și care au fost uitate în era bazelor de date relaționale din anii 80 și 90. Fundamentul Big Data este simplu: ”dacă datele tale sunt prea mari pentru a fi stocate pe un singur mega-server foarte scump, pur și simplu distribuie datele depozitate pe o rețea de servere mici și ieftine.” Imediat după asta vine partea interesantă din Big Data – cel puțin pentru experții în date: cum datele tale stau pe sute sau mii de servere, nu dorești să le muți într-o altă parte atunci când vrei să le procesezi. Ci, în schimb, tu vrei să distribui sarcinile tale de procesare prin nodurile de depozitare și să unești rezultatele locale distribuite, să le pui cap la cap într-un singur loc. Deci, în câteva cuvinte, aceasta este baza oricărei arhitecturi Big Data: depozitare distribuită plus procesare distribuită. Cireașa de pe tort este că lumea open source generează o mulțime de straturi complementare pe care le poți adăuga peste această fundație, în funcție de scopul platformei tale. Procesare real-time, management grafic, căutare cu text complet, mesagerie, analiză ad-hoc, … Comunitatea open source contribuie cu framework-uri incredibil de puternice care acum acoperă aproape toate nevoile de management al datelor pe arhitecturi distribuite.

Cum vedeți dezvoltarea utilizării Big Data în următoarele luni sau ani? [Cyrille Vincey]: Ne aflăm încă într-o fază educațională timpurie, în care este nevoie să explicăm că Big Data nu este singurul răspuns la orice problemă cu datele. Big Data este încă puțin sacralizată, dar devine din ce în ce mai matură, din ce în ce mai ușor de implementat, și va fi privită drept o alternativă la bazele de date relaționale în anumite cazuri specifice. Nu în toate cazurile. Dar ar fi probabil mai legitim să vorbesc despre utilizarea tehnologiilor Big Data la Ve. Îmi cer scuze față de cei care nu sunt experți în calculatoare, dar voi da niște nume aici: stiva noastră software este modelată după arhitectura lambda. Noi folosim Hadoop pentru stocarea de date distribuită, Kafka pentru procesarea mesajelor la scară, Spark pentru procesarea datelor aproape în timp real, MapReduce pentru procesarea loturilor de date, Cassandra pentru nivelul service, Titan și Giraph pentru o reprezentare bazată pe grafice a datelor noastre, ElasticSearch pentru a expune graficul nostru de cunoaștere cererilor de căutare cu text complet, plus Machine Learning din abundență pentru probleme de clasificare și regresie. Pe scurt, noi utilizăm un software 100% open-source. Și aici vine răspunsul propriu-zis la întrebarea voastră: următorul pas pentru noi la Ve este să facem open-source parte din tehnologiile noastre patentate și astfel să contribuim la evoluția tehnologiilor Big Data generice cu propriul nostru R&D.

www.todaysoftmag.ro | nr. 34/aprilie, 2015

23


management

Agile Mindset din altă perspectivă: De la reguli la implementări contextuale prin intermediul best practice-urilor

C

u ceva timp în urmă am participat la o conferință Agile în Cluj-Napoca. Printre o grămadă de topicuri interesante, prezentări și discuții am asistat și la o dezbatere deschisă unde ideea principală gravita în jurul întrebării dacă “Este velocitatea o metrică sau nu?”.

Au fost puse pe masă multe idei legate de acest subiect, au fost întoarse pe toate fețele și trebuie să recunosc că concluziile finale au fost pe gustul meu. Fiind prins în vârtejul discuției am lansat și eu ideea că velocitatea este mult prea contextuală pentru a fi o metrică. Unul dintre colegi a întrebat dacă acesta este un lucru bun sau rău. În mod absolut normal și automat, ca orice persoană care nu e sigură de un răspuns, am ales calea neutră și am replicat că nu este nici bine nici rău ci este doar simpla realitate. Totuși întrebarea mi-a rămas întipărită în minte și după finalul dezbaterii. Am început să găsesc argumente pro și contra asupra faptului că ceva contextual poate fi bun și am ajuns la concluzia că ceva contextual poate genera eficiență maximă într-o situație specifică dacă este folosit într-un mod corect. Mai mult, am început să mă gândesc la opusul a ceva contextual. Gândul m-a dus către soluții generale pentru un număr mare de situații asemănătoare și cumva pe parcurs am început să reflectez la reguli și la best practice-uri. Nu în ultimul rând am încercat să-mi imaginez unde apare în acest tablou Agile Mindset-ul și cum încurajează și facilitează tranziția de la soluții generale la particulărizări contextuale cu scopul de a maximiza eficiența. Trebuie să recunosc că m-a luat așa tare valul cu acest raționament încât am simțit nevoia să-l pun jos pe hârtie să văd dacă arată la fel de bine ca și în mintea mea. Reguli. Multe lume iubește regulile în general, mai multă lume le urăște, dar fie că vrem fie că nu regulile sunt peste tot. Dacă stăm un moment și reflectăm asupra vieții noastre vedem că tot ceea ce învățăm pornește de la niște reguli. Unele sunt mai stricte decât altele, dar de fiecare dată când învățăm ceva nou începem cu regulile și apoi ne adaptăm la ce ni se potrivește nouă. Să ne aducem aminte de primele lecții de tenis sau de baschet. Antrenorii încep întotdeauna cu: “hai să-ți spun pentru început regulile de bază”. Totul începe de la reguli și apoi este personalizat. Din punctul meu de vedere, puterea regulilor constă în faptul că tind să genereze cea mai bună medie de eficiență într-o multitudine de situații similare. Poate părea puțin ambiguu ce spun acum dar voi încerca să detaliez în continuare.

24

nr. 34/aprilie, 2015 | www.todaysoftmag.ro

Având o mulțime de situații similare, dacă vom aplica regulile în fiecare situație vom obține cea mai bună medie a rapoartelor Performanță / Efort Suplimentar (Waste) pentru situațiile unde regulile se aplică. Efortul suplimentar în acest context se referă la multitudinea cazurilor speciale ce nu sunt acoperite de reguli. Avantajele regulilor ar putea fi: • Ne lasă impresia că avem un control mare asupra mediului de lucru. • Este mai ușor să estimăm rezultatul final (datele istorice provenite din rezolvarea unor situații similare au un rol foarte important și fac estimările mai ușoare și mai precise). • Oferă un excelent punct de pornire. Dezavantajele regulilor: • Limitează creativitatea și inovația. • Cu siguranță avem aceste cazuri limită care nu sunt acoperite de reguli sau, chiar mai rău, a căror rezolvare poate fi dacă nu blocată atunci cel puțin îngreunată de reguli. Studiu de caz, partea 1: Să presupunem că avem o echipă nouă. Această echipă trebuie să atace un proiect nou utilizând metodologia Scrum. Clientul a pus la dispoziție un Product Owner care știe ce face, știe procesul și este capabil să asigure prioritățile la timp. Echipa a reușit să definească un proces ca la manual: iterațiile sunt la locul lor cu toate ceremoniile cerute de regulile Scrum-ului: planificare, stand-up-uri zilnice, revizuiri și retrospectiva. Știu, Scrum ca la carte există numai la cursuri, dar să presupunem de dragul studiului nostru de caz că astrele s-au aliniat pentru echipa noastră și ei pot să urmeze toate regulile Scrum-ului fără bătăi de cap. Best practices. Apare în mod evident întrebarea: care ar fi pasul logic ce trebuie făcut pentru a crește performanța în aceste situații limită? Răspunsul poate fi simplu: să avem posibilitatea să scurtcircuităm regulile atunci când situația o cere. Acesta este momentul când apar în peisaj best practice-urile. Ele au la bază același concept ca și regulile: analizând o serie de situații similare cineva foarte capabil - știu sigur că cineva a fost foarte capabil altfel nu ar fi apărut cuvântul “best” în sintaxa respectivă- a găsit o soluție general valabilă care să rezolve situațiile din aceeași categorie. Aceasta soluție sau model de rezolvare ar reprezenta un “best practice”. Diferența față de reguli o face faptul că nu suntem obligați să aplicăm aceste soluții în contextele date, lasându-ne libertatea să alegem alte soluții dacă noi simțim că ar merge mai


TODAY SOFTWARE MAGAZINE bine. Ne oferă un punct de pornire foarte bun și rapid în același timp pentru un caz specific cu care ne confruntăm dar nu suntem obligați să și apelăm la el. Chiar mai mult putem să-l ne jucăm cu modelul, să-l adaptăm și să-l particularizăm în funcție de nevoile curente. Best practice-urile nu sunt așa stricte și inflexibile precum regulile.Odată cu adunarea experienței personale ne va fi foarte ușor să ne dăm seama când un best practice poate fi aplicat,modificat sau pur și simplu ignorat. Studiu de caz, partea a 2-a: Avem în acest moment echipa formată și procesul foarte bine pus la punct pentru o implementare Scrum ca-n povești. Ca și best practice echipa face estimările în story points și după câteva iterații ajung la o velocitate stabilă reușind astfel să-și îmbunătățească estimările. În acest moment ceva se schimbă în organizația clientului, de exemplu este înlocuit Product Owner-ul cu o persoană nouă. Noul Product Owner nu vrea să audă de story points, nu le înțelege și pune presiune pe echipă pentru a da estimări în timp, acestea oferindu-i cel mai mare nivel de comfort. Echipa va trebui să renunțe la best practice și să se adapteze noilor cerințe oferind estimările așa cum le cere clientul. Implementări contextuale. O soluție contextuală va avea în vedere rezolvarea optimă a tuturor cazurilor limită și va încerca să ia în calcul toți factorii ce influențează problema curentă. Aceasta înseamnă ca soluția contextuală va încerca să rezolve și acele cazuri neacoperite de reguli sau best practice-uri pe care le-am denumit Efort Suplimentar. Prin urmare, o rezolvare contextuală ar trebui să maximizeze eficiența pentru fiecare problemă în parte în raport cu soluțiile generale. Cu siguranță nu ne va fi ușor să găsim soluția potrivită fiecărui caz dar bazat pe capacitățile și experiența noastră vom găsi soluția mai repede sau mai încet, vom găsi varianta potrivită ori s-ar putea chiar să greșim. Dar cel mai important este faptul că oricât de capabili și experimentați suntem, nu vom putea obține maximul de fiecare dată dacă nu suntem pregătiți să ne adaptăm. Studiu de caz, partea a 3-a: În lumea reală echipa noastră poate întâlni un număr nelimitat de factori ce pot influența bunul mers al lucrurilor, ce pot da peste cap procesele ca la manual. În pasul 2 am văzut un exemplu simplu de client care nu are la inimă story point-urile. Dar dacă dăm peste un client ce nu vrea să audă de review-ul interației? Trebuie să fim inventivi, să ne adaptăm și să găsim alte modalități de a livra ce a fost realizat și a obține

acceptarea clientului pentru munca făcută. Chiar dacă regula ne cere să avem această ședință ca parte integrantă a procesului, nu ar trebui să ne blocheze faptul că nu se poate realiza. Dacă după realizarea mai multor sedințe de retrospectivă asupra interațiilor ne dăm seama că acestea sunt total nefolositoare, nu-și ating scopul și considerăm că am încercat tot ce e omenește posibil pentru a le face eficiente dar nu am reușit, ar mai trebui să ținem aceste ședințe doar de dragul regulilor sau am putea găsi o modalitate mai eficientă de a folosi timpul respectiv? Înțelegerea Agile Mindset-ului ne va permite să înțelegem mai bine regulile stricte și puterea lor și în același timp ne va insufla capacitatea de a vedea dincolo de ele. Ne va permite să înțelegem beneficiile best practice-urilor și în același timp să înțelegem că avem puterea de a alege dacă le utilizăm sau nu. Agile Mindset-ul ne învață să ne adaptăm la diferite situații și să obținem maximul din ele. Această adaptare se află în noi prin definiție și este rafinată odată cu experiența. Cel mai simplu exemplu este legat de condusul autovehiculelor. Când învățăm să conducem, la început învățăm regulile șofatului și urmăm aceste reguli cu strictețe. Apoi vizităm Anglia și dintr-o dată regula condusului pe dreapta trebuie dată uitării și ne adaptăm la regula condusului pe stânga. Și ca un best practice, schimbăm vitezele cu mâna dreapta deoarece cu stânga ar fi de-a dreptul incomod și hazliu. Din nou ajunși în Anglia, va trebui să renunțăm la acest best practice și să schimbăm vitezele cu mâna stângă. Toate aceste adaptări vin foarte natural o dată cu experiența. Deci Agile Mindset-ul este acolo bine înrădăcinat în natura noastră umană. Dacă vrem să scoatem ce e mai bun din fiecare situație ar trebui să apelăm la el cu încredere.

Bogdan Mureșan

bogdan.muresan@3pillarglobal.com Director of Engineering @ 3Pillar Global

Our core competencies include:

Product Strategy

Product Development

Product Support

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

www.3pillarglobal.com

www.todaysoftmag.ro | nr. 34/aprilie, 2015

25


programare

Cinci pași înspre un design software rezistent la erori

Î

n cele două articole anterioare din TSM- Patru idei pentru îmbunătățirea software design-ului și Usable software design-am arătat cum să creăm un software design mai bun și am definit ideea de usable software design. Designul Software Utilizabil provine din observația simplă că dezvoltatorul este utilizatorul unui design software. Ipoteza mea este că utilizând principiile și practicile din Utilizabilitate în designul software se vor crea două beneficii importante: un timp mai rapid de implementare pentru sarcinile comune și integrarea mai rapidă a dezvoltatorilor noi într-o echipă existentă. Alexandru Bolboacă

alex.bolboaca@mozaicworks.com Agile Coach and Trainer, with a focus on technical practices @Mozaic Works

În acest articol, voi explora mai departe designul software utilizabil plecând de la ideea simplă că deși nimănui nu îi place să facă greșeli, acestea totuși apar. Deoarece designul software utilizabil înseamnă un design software care provoacă încântare când este utilizat de către dezvoltatori, ceva trebuie făcut pentru a preveni erorile. Așadar vreți ca designul software al vostru să fie lipsit de greșeli pentru a fi mai utilizabil? Dar mai întâi, trebuie să înțelegeți un lucru important…

1. Este vina sistemului

Everyday Things” Iar soluția: Este timpul să inversăm situația: să dăm vina pe aparate și pe designul lor. (…) Este de datoria aparatelor și a celor care le proiectează să înțeleagă oamenii. - Donald Norman, ” The Design of Everyday Things” Aceasta înseamnă că...

2. Greșelile dezvoltatorilor indică probleme în designul sistemului

Imaginați-vă următorul scenariu: descoperiți că Ionuț, Programatorul Junior, a făcut o greșeală când a lucrat la o sarcină. Vă dați seama că și alții au comis aceeași eroare înainte, iar soluția a fost documentată. Care este reacția voastră? (Pun pariu că Ionuț din echipa voastră nu este chiar atât de junior!) 1. Îi spuneți că există documentație pentru asta și îi indicați unde să citească. 2. Îi explicați cum se face. 3. Vă uitați la design și îl modificați astfel încât această problemă să nu se mai poată repeta.

În 1988, un cercetător cognitiv și-a asumat sarcina de a analiza modul în care sunt concepute obiectele de uz zilnic. Profesorul Donald Norman a explorat designul centrat pe utilizator în cartea sa ”Designul lucrurilor uzuale” (”The Design of Everyday Things”), pornind de la psihologie: Un ciclu vicios începe: dacă greșești la ceva, tu crezi că este vina ta. De aceea, consideri că nu poți duce la bun sfârșit acea sarcină. Drept rezultat, următoarea dată când trebuie să realizezi sarcina respectivă, tu crezi că nu poți și de aceea nici măcar nu mai încerci. Rezultatul este că nu poți, exact Eu obișnuiam să reacționez în modul cum ai crezut. Ai căzut în capcana unei 1 și 2 și uneori încă le mai fac asta. Vechile profeții care se autoîmplinește. obiceiuri presupun efort pentru a fi schim- Donald Norman, ” The Design of bate. Spre deosebire de acum cinci ani,

26

nr. 34/2015 | www.todaysoftmag.ro


TODAY SOFTWARE MAGAZINE acum înțeleg că aceasta ar putea crea un cerc vicios. Iată cum: Cum se va simți Ionuț, Programatorul Junior, dacă răspunsul vostru este 1 sau 2? Reacția psihologică involuntară este să se simtă vinovat. Repetați scenariul de câteva ori și el va înceta să pună designul la îndoială. Drept consecință, veți avea un ciclu vicios. Ceea ce m-a învățat Domnul Norman în schimb este că ar trebui să consider această situație drept vina sistemului și nu vina dezvoltatorului. Deci următorul lucru important este să îți dai seama cum să îmbunătățești sistemul astfel încât eroarea să nu se mai repete. Iată trei moduri de a vă îmbunătăți designul pentru a preveni erorile.

3. Eliminați excepțiile

Un e or i, m e to d el e d au n a ște re excepțiilor atunci când sunt apelate într-o ordine diferită decât ar trebui. În anumite cazuri, este posibil să înlăturați complet excepțiile prin reproiectarea clasei. Iată un exemplu: La diferite evenimente de măiestrie software în care exersăm tehnici de codare, am folosit TicTacToe drept o problemă. În mod tipic, sfârșim prin a avea o clasă Game, pe care cei mai mulți dezvoltatori o concep după cum urmează: class Game{ ... moveX(); moveO(); ... }

descoperirea greșelilor mele la execuție este prea târziu. A face un software rezistent la greșeli înseamnă să concepem sistemul astfel încât să fie (aproape) imposibil să îl utilizăm greșit. Consider că următorul design este mai rezistent la greșeli: class Game{ Game(Player playerX, Player playerO); move(); ... }

Acest design conduce în mod tipic la un cod similar cu: Game game = new Game(playerX, playerO); game.move();

într-una dintre rarele ocazii în care se pot măsura pierderile cauzate de probleme de software. Ward Cunningham discută despre asta: Izul (the Smell): Obsesia primitivă utilizează tipuri de date primitive pentru a reprezenta ideile de domeniu. De exemplu, noi folosim un Șir (String) pentru a reprezenta un mesaj, un Întreg (Integer) pentru a reprezenta o sumă de bani, sau un Struct/ Dicționar/Hush pentru a reprezenta un obiect specific. Repararea: În mod tipic, noi introducem un ValueObject în locul datelor primitive, apoi privim ca la o magie cum codul din întreg sistemul indică FeatureEnvySmell și vrea să fie pe noul ValueObject. Mutăm acele metode și totul devine corect. În cazul TicTacToe, este foarte tentant să scriem cod precum:

Nu văd nicio cale de a utiliza acest design altfel decât ar trebui. Nu numai că este ușor de utilizat, dar este de asemenea și ușor de învățat și rezistent la greșeli. Clasa Game poate fi utilizată numai într-un singur fel, la fel cum există un singur mod de a introduce un card de game.move(“A1”); memorie în slotul lui. sau ca și acesta:

4. Treceți argumentele obligatorii în constructor

O greșeală comună este să creezi un obiect fără toți parametrii obligatorii. Dacă mai târziu este apelată o metodă, apar erorile. De exemplu, păstrând problema TicTacToe: Game game = new Game(); game.move(); // players have not been added to the game

game.move(0, 0);

Există multe probleme cu acest design. Nimic nu mă împiedică să trimit coordonate greșite cum ar fi game.move(-1, 2000) sau game.move(”Z9”). Pentru a evita problemele, va trebui să răspândim validări pe tot parcursul codului. În primul caz, procesarea șir va fi răspândită în jurul codului, fiind ușor să introducem erori off-by-one atunci când facem procesare în șir. Când cazurile limită (corner cases) sunt validate cu teste unitate, va trebui să repetați testele pe unitate pentru coordonate valide/ invalide în fiecare clasă pe care le utilizează. Există o modalitate de a evita toate acestea: indiferent de cum introduceți coordonatele, convertiți-le imediat întrun obiect valoare. În cazul TicTacToe, domeniul problemei poate fi descris ușor: Panoul TicTacToe este format din 9 Locuri care au Coordonate, fiecare de la 1 la 3. Deci, de ce nu:

Acest design duce la o potențială eroare: nimic nu mă împiedică să scriu TicTacToe poate fi jucat numai de către următorul cod: doi jucători, fie ei oameni sau computer. Probabil există și jocuri TicTacToe cu mai Game game = new Game(); game.moveO(); mult de doi jucători, dar nu îmi pot imagame.moveO(); gina un TicTacToe solitar. game.moveO(); De aceea, este normal să exprimăm care este greșit, potrivit regulilor această constrângere în constructor: TicTacToe. Jucătorul X ar trebui să înceapă, Game game = new Game(firstPlayer, apoi jocul ar trebui să continue cu mișcări secondPlayer); alternante. Răspunsul implicit al dezvoltatorilor Chiar dacă mai târziu decidem să Place place = new Place(Coordinate. care se confruntă cu această problemă este implementăm versiunea TicTacToe cu mai One, Coordinate.One); game.move(place); să modifice implementarea în ceva similar mult de doi jucători, este ușor: game.addPlayer(thirdPlayer); cu: Utilizatorul acestui design nu mai game.addPlayer(fourthPlayer); void moveX(){ game.move(); poate apela metoda move() cu parametri if(currentPlayer != Player.X){ throw new greșiți. NotTheTurnOfThePlayerException(); } }

5. Evitați obsesia primitivă

Indiciu: Acest obiect a fost implicat Dar aceasta tot nu mă împiedică să Obsesia primitivă este un iz de cod scriu codul de mai sus. Este un pic mai foarte comun, pe lângă faptul că are un bine, deoarece mă avertizează că am nume foarte sugestiv. A fost de asemenea făcut ceva greșit. Totuși, aș argumenta că și sursa unei pierderi de 125 milioane $

Recapitulare

Oamenii care utilizează un sistem cu un design prost tind să se autoînvinovățească în loc să dea vina pe sistemul pe care îl folosesc. Eu afirm că acest lucru se

www.todaysoftmag.ro | nr. 34/aprilie, 2015

27


programare Cinci pași înspre un design software rezistent la erori

The Europe Software Craftsmanship unconference dedicated to Software Architecture, Software Design and Technical Strategy

WHY ATTEND? Level-up your tech skills by attending: 20+ Talks, 3 Workshops, 4 keynotes, topics on DevOps, Architecture, Hardcore Programming, Quality Practices, Executable Specifications, Web, Technical Leadership, Developer's Life. Register now: www.itakeunconf.com

WHO IS IT FOR? For everyone passionate about software excellence. The content is geared to top-notch Programmers, Software Craftsmen, Architects, DevOps, Technical Managers, Team Leaders, CEOs, CTOs/Technical Co-Founders, and Technical Consultants.

5 REASONS TO BE PART OF I T.A.K.E. UNCONFERENCE 1. Dynamic learning atmosphere 2. Hands-on practice with the latest techniques applied in languages & technologies of your choice (Java, C#, JavaScript, Closure, etc) 3. Product Development & Kata Lounge for mastering software craftsmanship practices. 4. Open Space - Take responsibility for your own learning. 5 Contest - Enjoy practicing while competing for a prize.

www.itakeunconf.com | May 28-29, Radisson Blu Hotel, Bucharest, RO

întâmplă atât dezvoltatorilor de software care folosesc un design software existent, cât și utilizatorilor de obiecte fizice făcute de om. Donald Norman ne indică o cale de ieșire: ca designer, el înțelege că este în mod tipic vina sistemului și proiectează sistemul având în minte toleranța față de greșeli. Am văzut trei metode de a ne îmbunătăți designul unei clase pentru a fi mai rezistentă la greșeli: eliminarea excepțiilor, trecerea argumentelor obligatorii în constructor, evitarea obsesiei primitive. Am văzut că rezultatul este mai ușor de învățat, mai ușor de utilizat și în

28

același timp evită erorile obișnuite.

Lectură suplimentară

Când nu îți poți proiecta interfețele pentru a preveni greșelile, Design By Contract vine în ajutor. Vă recomand să citiți despre aceasta, drept o altă metodă de a-ți face designul să nu fie permisiv la greșeli. Acest articol s-a concentrat pe cum să îți faci designul software rezistent la erori prin utilizarea unor elemente de design software. Realitatea este mai complexă: pentru a face designul software să nu

nr. 34/aprilie, 2015 | www.todaysoftmag.ro

permită greșelile este cu siguranță nevoie de un feedback rapid oferit de programarea pereche, teste automatizate, integrare continuă și sprijin IDE. Ce tipuri de greșeli faceți voi? Ce faceți pentru a le preveni? Aștept comentariile voastre. Vă invit pentru o discuție mai aprofundată în cadrul Workshop-ului de Usable Software Design Vineri, 29 Mai, în cadrul I T.A.K.E. Unconference 2015, la Radisson Blu Hotel, Bucuresti. Au mai rămas doar câteva bilete: www.itakeunconf.com.


programare

Programarea Orientată pe Aspecte în Dezvoltarea Sistemelor Software

P

Diana Vultur

diana.vultur@yardi.com Software Developer @ Yardi România

rogramarea orientată pe aspecte are ca scop îmbunătățirea modularității sistemelor software, prin captarea funcționalităților dispersate, numite și crosscutting concerns, făcând astfel ca evoluția acestor sisteme să devină mult mai ușoară și mai ușor de operat. Pentru a obține aceste rezultate, AOP adaugă un mecanism de abstractizare în plus, mecanism numit aspect, pe lângă mecanismele de modularizare existente, cum ar fi funcțiile, clasele și metodele. Aspectele permit programatorilor să rezolve problemele legate de scattering și tangling, prin reducerea extinderii codului referitor la un concern pe diferite componente. În timpul fazei de development, se materializează conceptul de produs care a fost identificat și cercetat în timpul fazei de predevelopment. Cerințele de sistem sunt traduse în specificații pentru design, iar acestea la rândul lor se traduc în cod software. Pentru un anumit proiect de dezvoltare software, împărțirea ciclului de activitate și a activităților care trebuie îndeplinite în cadrul fiecărei faze vor depinde foarte mult de tipul aplicației, de metodă, de tool-urile de dezvoltare folosite și de mediul de implementare avut în vedere. Pe durata fazei de dezvoltare, accentul trebuie pus pe obținerea unei versiuni funcționale, acceptabile a produsului, pentru ca acesta să fie livrată. Este important să nu cădem în capcana perfecțiunii în încercarea de găsi o soluție. Programarea Orientată pe Aspecte furnizează structuri explicite pentru a dezvolta sisteme software ale căror funcționalități de tip crosscutting concerns sunt mai bine împărțite pentru că nu mai sunt confuze și sunt foarte bine delimitate de analiza principală. Pentru a extinde avantajele acestui tip de programare spre sisteme deja existente,

este necesar un efort considerabil. Acest efort constă în principal în analiza codului sursă a aplicațiilor existente în căutarea acelor porțiuni care implementează funcționalitatea de tip crosscutting. A doua parte a muncii constă în transformarea programului existent într-o reformulare centrată pe aspect. Pentru a beneficia de toate potențialele avantaje ale stilului de programare AOP, avem nevoie de asistență pentru migrarea aplicațiilor și sistemelor existente. Fiecare fază a proiectului de software – design, implementare, testare și mentenanță - pune accentul pe anumite activități. Programarea centrată pe aspect are un rol diferit în fiecare din aceste faze.

Faza de Design

Faza de design furnizează specificațiile detaliate despre cum trebuie dezvoltată partea de software. Această parte este mai tehnică decât analiza specificațiilor. Acum developerul trebuie să își definească foarte clar modul în care softul va putea duce la îndeplinire cerințele, transformându-le într-un sistem funcțional. Descriem mai jos o modalitate de a utiliza AOP:

www.todaysoftmag.ro | nr. 33/martie, 2015

29


programare Programarea Orientată pe Aspecte în Dezvoltarea Sistemelor Software • Crosscutting concerns recognition – Acest pas este Acest fenomen apare în momentul în care funcționalitățile inclus în procesul de orientare a cerințelor în module. de tip crosscutting concerns sunt implementate folosind Unele funcționalități crosscutting concerns posibile ar OOP, deși AOP ar fi mai potrivit. putea fi descrise folosind un adjectiv sau un adverb, care reduc efortul implicat de modularizarea lor într-o manieră În momentul implementării funcționalităților de tip convențională. crosscutting concerns, următoarele activități sunt desfășurate: • Initial design Core concerns – Funcționalitățile de bază • Join points identifications – Sunt identificate anumite sunt inițial destinate unei aplicări mai ușoare a crosscutting porțiuni de cod unde este nevoie de activități de tip crosscutting. concerns deoarece ele vor simplifica regulile de combinare. Pointcut-urile sunt exprimate potrivit join point-urilor captate: • Crosscutting concerns designed – Funcționalitățile de tip pointcut-uri bazate pe nume, pe controlul fluxului ș.a.m.d. crosscutting concerns sunt foarte clar țintite și pot fi defi• Aspect design – În această etapă, designul aspectelor se crenite chiar dacă nu sunt folosite imediat. Această abordare ează folosind tipare. Pentru simplificarea procesului de captare ajută la evitarea unor supraaglomerări de design. a punctelor în cadrul aspectelor este nevoie să folosim convenții de denumire consecvente pentru aspecte.

Faza de Implementare

După cum faza de design implică un anumit efort din punct de vedere computațional, faza de implementare include de regulă eforturi de design. Designul de la nivelul de implementare poate fi privit ca un act de echilibristică, unde trebuie combinate și potrivite modele aparent funcționale, instrumente și limbaje de implementare, cerințe de performanță și termene de livrare, menținând în același timp corectitudinea, siguranța, capacitatea de extindere și de menținere, precum și alte criterii. Cu AOP, funcționalitățile principale și cele de tip crosscutting pot fi implementate foarte ușor. Dacă folosim AOP, vom observa că există multe similarități între AOP și OOP: majoritatea procesului și a metodologiei sunt aproape neschimbate. Următoarele principii pot fi folosite pentru a determina unde e nevoie de AOP: • Well-factored written code – Funcționalitatea de bază specifică este implementată printr-o operație care reprezintă un scenariu ideal. Dacă fiecare metodă urmărește traiectoria unei anumite funcționalități, va atinge nivelul corect de granularitate. Datorită acestui fapt, AOP poate fi aplicat în mod repetat pe parcursul unui proiect. • Consistent naming conventions usage – Pointcut-urile care folosesc wildcard-uri pentru a dobândi join point-uri ușurează definirea aspectelor și în același timp se asigură că se aplică tuturor modulelor nou introduse în sistem. • Any visible tangling and scattering appearing – Pe parcursul implementării funcționalităților de tip core concerns, pot apărea probleme de tip code tangling și code scattering.

30

nr. 34/aprilie, 2015 | www.todaysoftmag.ro

Să ne gândim la o verificare pentru o pre- sau post-condiție comună pentru mai multe operații din aceeași clasă. În cazul refactorizării convenționale, verificarea este inclusă într-o metodă și poate fi utilizată pentru toate situațiile în care este nevoie de ea în loc să se repete un bloc de cod în toate acele situații. În programarea orientată pe aspecte, un aspect este dezvoltat pentru a introduce acea verificare în toate metodele cerute. De asemenea, nu mai este nevoie să se apeleze la metoda care face verificarea în mai multe locuri.

Faza de Testare

După analizarea designului și implementarea unei soluții, următorul pas este rularea algoritmului cu date de test și eliminarea erorilor logice. În faza de testare, programatorul trebuie să ia în considerare procesele de weaving și să-și imagineze cum se comportă un program integrat, deoarece scopurile testelor nu sunt niciodată obiecte individuale. Există o pauză între faza de design și cea de testare în cadrul AOP. Următoarele exemple reprezintă posibile scenarii: • Creating test cases – Programe-test pot fi create prin modificarea comportamentului, dar fără mari modificări în cod. • Implementing performance testing – Multe din problemele de performanță sunt descoperite în timpul etapei de staging, dar nu sunt vizibile în timpul fazelor de dezvoltare.


TODAY SOFTWARE MAGAZINE Datorită AOP putem realiza o analiză dinamică într-un mediu prin monitorizarea aspectului în timpul testelor. • Reporting errors – Aspectele sunt folosite pentru acumularea de contexte utile, nu doar pentru excepțiile de tip call stacks, dar și pentru situațiile în care apar probleme. Cu abordarea AOP, colecția de context este flexibilă.

Faza de Mentenanță

Aplicațiile de tip framework pot folosi AOP în mod eficient pentru a target-a anumite funcționalități de tip crosscutting, păstrându-le în același timp structura modulară. Spring include aspecte care pot introduce dependențe în cadrul obiectelor. De asemenea, au început să apară și structuri care folosesc AspectJ ca bază. AspectJ face ca implementarea unei scheme de monitorizare flexibile să pară foarte ușoară. Prin urmare, multe tool-uri folosesc AspectJ ca tehnologie de bază (Glassbox, Perf4J, Contract4J) și câteva produse comerciale folosesc AspectJ și pentru a implementa soluții de monitorizare. AspectJ în sine folosește AspectJ pentru a extinde JDT complier, pentru a susține structurile AspectJ. AJDT folosește, în cadrul serviciilor OSGi bazate pe weaving, implementate de proiectul Equinox Aspect, pentru o mai bună integrare a JDT în Eclipse. Această schimbare recentă permite AJDT-ului să ofere o mai bună experiență utilizatorilor. Scala IDE pentru Eclipse folosește același principiu.

Mentenanța este etapa din dezvoltare care se desfășoară întrun sistem după ce acesta a fost livrat pentru scopul inițial. Această fază este foarte importantă pentru proiectele de software deoarece majoritatea efortului de dezvoltare este depus pentru mentenanță. Această etapă are două activități: adăugarea implementării pentru a atinge noile cerințe și corectarea problemelor sau rezolvarea bug-urilor din faza de testare. În această fază se pot rezolva următoarele operațiuni: • Creating protection walls – Prin această activitate ne asigurăm că noile schimbări nu produc modificări în alte părți ale sistemului și previn apariția de noi probleme. • Implementing new features – Noi funcționalități de tip Concluzii crosscutting concerns pot fi implementate foarte ușor și nu În concluzie, programatorii încep să conștientizeze schimbă foarte mult partea de bază a sistemului. importanța programării orientate pe aspect deoarece AOP nu neagă meritele OOP, ci pur și simplu adaugă noi concepte care permit îmbunătățirea aplicațiilor orientate spre obiect, făcându-le mult mai flexibile. În plus, simplifică procesul de dezvoltare permițând separarea sarcinilor de dezvoltare. Spre exemplu, experți specializați pot dezvolta funcționalități extrem de tehnice (ex: securitatea) și aspectele permit o integrare mai ușoară a acestor funcționalități în cadrul aplicației. Adoptarea AOP va implica mult efort și mult timp, dar poate fi realizată gradual atunci când va răspunde în mod clar unor nevoi.

crosscutting reprezintă un nou principiu de modularitate. AOP are toate premisele să devină o metodologie de programare importantă, dat fiind că avantajele pe care le prezintă sunt numeroase. Mai mult, ea elimină și unele dificultăți care apar la designul, dezvoltarea și mentenanța unor programe software de calitate.

Unde se folosește AOP?

Aplicațiile Enterprise trebuie să se adreseze multor funcționalități de tip crosscutting: administrarea tranzacțiilor, protecție, audit, acorduri de tip service-level, monitorizare, controlul concurenței, îmbunătățirea disponibilității aplicației, gestionarea erorilor ș.a.m.d. Multe aplicații Enterprise folosesc AOP pentru a implementa aceste funcționalități. Practic, orice proiect care folosește Spring folosește și AOP. Serverele și aplicațiile web, cum ar fi dm-Serverul opensource din cadrul SpringSource, susțin dezvoltarea de aplicații de companie bazate pe OSGi. Acesta folosește AspectJ pentru a implementa diverse funcționalități de tip crosscutting, cum ar fi First Failure Data Capture (FFDC), colecțiile de context, monitorizarea și implementarea politicilor. Serverul SpringSource tc Server folosește AspectJ pentru a implementa monitorizarea aplicațiilor lansate.

www.todaysoftmag.ro | nr. 34/aprilie, 2015

31


programare

Realreach – află ce se găsește la 15 minute de tine

S

ă presupunem că te afli într-un oraș nou (să spunem Geneva, Italia) și ai două ore până la următorul tău tren sau zbor. Vezi standul de închiriere biciclete cu ora și ai vrea să știi cât de departe poți ajunge cu bicicleta într-o oră (astfel încât să te

Curta Cătălin

curta.catalin@telenav.com C++ Developer @ Telenav

poți întoarce la timp) și ce atracții turistice poți găsi în acest interval de timp. Sau să presupunem că ești la volan și conduci înspre următoarea ta întâlnire și ai dori să știi ce locuri de parcare (cu plată sau pe stradă) se găsesc la cel mult 10 minute de mers pe jos de la biroul lor.

dragos.andronic@telenav.com Product Manager @ Telenav

Acesta este exact scenariul la care funcționalitatea RealReachTM își propune să răspundă, și anume distanța reală de drum pe care o poți parcurge de la o anumită locație, într-o anumită limită de timp (sau distanță a rutei), având un anume profil de călătorie (pieton, cu bicicleta, cu mașina). Aceasta revoluționează căutările locale, admițând că, în cele mai multe situații, timpul este mai important decât distanța.

RealReach™ și vehiculele electrice

Classes/SKRealReachSettings.html

O aplicație specială a algoritmului RealReachTM este spațiul e-mobilitate, unde puteți chiar întreba: cât de departe pot merge dat fiind nivelul actual al bateriei? În acest caz, algoritmul va lua în considerare nu numai geometria drumului și nivelul bateriei, ci și înclinarea străzilor înconjurătoare și impactul său asupra utilizării bateriei. Pentru a funcționa, RealReachTM are nevoie să primească parametrii de utilizare ai bateriei vehiculului1. Într-un caz 1 http://developer.skobbler.com/docs/ios/2.3.0/

32

nr. 34/2015 | www.todaysoftmag.ro

Să pornim cu RealReach™

Pe web, do c ument ația API RealReachTM poate fi găsită aici2. În frontend, vă recomandăm să utilizați Leaflet pentru afișaj (noi am scris de asemenea un Leaflet plugin3, facilitând întregul proces) dar suntem, de asemenea, mari fani ai OpenLayers. Pe mobil, vedeți exemplele deja implementate în demo projects4 (intrările meniu RealReach) și verificați documentația de referință pentru Android5 și iOS6. Sperăm că în cel mai scurt timp veți putea oferi împrejmuiri geografice în limită de timp în aplicația voastră sau pe portalul vostru web.

Accesați RealReach™ Dragoș Andronic

ideal, acești parametri sunt calculați pe baza utilizării efective a vehiculului (live sau diacronic).

http://developer.skobbler.com/docs/android/2.3.0/index. html 2 http://developer.skobbler.com/getting-started/ web#sec1 3 http : / / d e ve l op e r. s kobbl e r. c om / d ow n l o a d / skobbler-2.0.js 4 http://developer.skobbler.com/support#download 5 http://developer.skobbler.com/docs/android/2.3.0/ com/skobbler/ngx/map/SKMapSurfaceView.html#displayRealRea chWithSettings(com.skobble 6 h t t p : / / d e v e l o p e r . s k o b b l e r . c o m / d o c s / i o s / 2 . 3 . 0 / C l a s s e s / S K M a p V i e w. h t m l # / / a p i / n a m e / displayRealReachWithSettings:


TODAY SOFTWARE MAGAZINE

RealReach – profil mașină, limită de timp

RealReach – profil mașină, limită de distanță

RealReach – profil bicicletă

www.todaysoftmag.ro | nr. 34/aprilie, 2015

33


programare

(Micro)Service Discovery cu Netflix Eureka

A

cest articol este parte dintr-o serie dedicată soluțiilor aplicate într-un sistem construit folosind o arhitectură orientată pe microservicii: Descoperirea Serviciilor, Elasticitate, Resiliența, Managementul Configurării, Monitorizare, Agregarea Logurilor, Telemetrie. Articolul prezintă o soluție tehnică pentru conceptul Descoperirii Serviciilor folosind Netflix Eureka, o tehnologie dezvoltată în Java de către Netflix, expusă open-source în cadrul Netflix Open Source Software (OSS). Exemplele de cod și configurări prezentate nu folosesc Eureka direct. Folosim Spring Cloud, o inițiativă de la Spring care reunește cele mai bune soluții tehnice pentru a construi un sistem distribuit modern. Spring Cloud este construit peste Spring Boot și are suport pentru integrarea Netflix OSS. Descoperirea Serviciilor este unul dintre conceptele cheie în construirea sistemelor distribuite orientate pe servicii. Un Serviciu A pentru a apela un Serviciu B, trebuie să găsească o instanță fizică a Serviciului B. Configurările statice nu mai sunt o soluție viabilă într-un sistem elastic, dinamic, unde instanțele de servicii sunt pornite și oprite frecvent (planificat și neplanificat) sau unde problemele de rețea pot fi dese (Cloud). Găsirea unei instanțe a Serviciului B nu mai este un lucru banal. Descoperirea Serviciilor implică un mecanism unde: • Serviciile nu au cunoștințe anterioare despre locații fizice ale instanțelor altor servicii. • Instanțele Serviciilor publică informații despre apariția și dispariția lor. • Serviciile sunt capabile să găsească instanța altor servicii pe baza informațiilor publicate de către acestea din urmă. • Anomaliile la nivel de instanță de serviciu sunt detectate, iar acestea nu mai sunt instanțe valide. • Descoperirea Serviciilor nu este un Single Point of Failure.

Eureka - Prezentare generală

Arhitectura Netflix Eureka constă în două componente, Serverul și Clientul. Serverul este o aplicație de sine stătătoare și este responsabilă de: • gestiunea unui registru de instanțe de servicii; • punerea la dispoziție a mijloacelor prin care instanțele de servicii pot fi înregistrate, șterse sau descoperite în registru; • conținutul registrului care este propagat către alte instanțe de Eureka Server. Clientul face parte din ecosistemul Serviciului propriu zis și are următoarele responsabilități: • anunță Serverul despre existenta și dispariția Instantei de Serviciu; • implementează un mecanism de transmitere de heartbeaturi către Server; • colectează și stochează detalii din registrul Serverului Eureka.

Unități de Descoperire

Eureka lucrează cu Applications și Instances. Căutarea se face după id-ul serviciului, iar rezultatele constau în informații despre instanțele Serviciului care se regăsesc în registru de instanțe.

High Availability

Netflix Eureka este construit pentru High Availability. În termenii teoremei CAP, Eureka favorizează Availability în defavoarea Consistenței. Accentul e pus pe faptul ca serviciile să se găsească în cazul partiționărilor de rețea sau problemele de Eureka Server. High Availability este obținut la două niveluri: • Cluster de Servere. În acest nivel, setup-ul de producție va include mai multe instanțe de Eureka Server configurate în cluster. • Cache în Eureka Client. În acest nivel, clienții Eureka colectează și stochează registrul de descoperire de la Serverul Eureka. În cazul în care toate instanțele de server au probleme, clientul poate încă funcționa pe baza informațiilor stocate local.

34

nr. 34/aprilie, 2015 | www.todaysoftmag.ro


management

TODAY SOFTWARE MAGAZINE files.active=devlocal”

Setările registerWithEureka și fetchRegistry au valoarea false, ceea ce înseamnă ca Serverul nu face parte dintr-un cluster.

Configurare Cluster

Terminologie

Serverele Eureka sunt configurate în mod cluster pentru a asigura disponibilitatea în cazul în care unele instanțe au probleme. Clienții eureka nu au nevoie de afinitate pentru Server și se pot conecta transparent la oricare Server din Cluster. Serverele au nevoie de referințe către alte instanțe de Server. Exista diferite modalități pentru a obține aceste referințe, descrise mai jos.

Eureka a fost construită pentru a fi funcțională în Cloud-ul DNS Amazon (AWS). În consecință, folosește o terminologie specifică Netflix folosește DNS pentru a gestiona lista de referințe Amazon: regiuni, zone, etc. .Exemplele prezentate în acest articol Eureka Server într-un mod dinamic. Clienții Eureka nu au nevoie folosesc setări implicite, regiunea us-east–1 și zona defaultZone. de repornire pentru a obține noile configurări, ci le obțin printr-o nouă interogare DNS. Eureka Server Aceasta este configurarea recomandată de producție. Serverul este ceea ce numim Serviciul de Descoperire într-un Să vedem un exemplu cu un cluster de două servere Eureka, sistem SOA. dsc01 și dsc02. Începeți prin a clona repo-ul Spring Cloud Eureka de pe Se poate folosi Bind sau alt server DNS. Aici2 găsiți instrucțiuni 1 github.com . pentru a instala și configura Bind. Configurație DNS:

Configurare Server standalone

$TTL 604800

Este simplu de pornit o aplicație Eureka Server folosind @ IN SOA ns.eureka.local. hostmaster.eureka.local. ( 1024 ; Serial Spring Cloud. Orice aplicație Spring Boot devine un Server 604800 ; Refresh Eureka folosind adnotarea @EnableEurekaServer. Folosiți exem86400 ; Retry 2419200 ; Expire plele următoare pentru development pe mediul local. 604800 ) ; Negative Cache TTL Exemplu aplicație Java: ; @SpringBootApplication @EnableEurekaServer @EnableDiscoveryClient public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); } }

Configurare yml: server: port: 8761 security: user: password: ${eureka.password} eureka: password: ${SECURITY_USER_PASSWORD:password} server: waitTimeInMsWhenSyncEmpty: 0 enableSelfPreservation: false client: preferSameZoneEureka: false --spring: profiles: devlocal eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://user:${eureka. password:${SECURITY_USER_PASSWORD:password}}@localhost:8761/eureka/

Porniți aplicația folosind comanda: mvn spring-boot:run -Drun.jvmArguments=”-Dspring.pro1 https://github.com/spring-cloud-samples/eureka

@ IN NS ns.eureka.local. ns IN A 10.111.42.10 txt.us-east-1 IN TXT „defaultZone.eureka.local” txt.defaultZone IN TXT „dsc01” „dsc02” ;

Configurația aplicației: eureka: client: registerWithEureka: true fetchRegistry: true useDnsForFetchingServiceUrls: true eurekaServerDNSName: eureka.local eurekaServerPort: 8761 eurekaServerURLContext: eureka

Lista statică de Servere Configurarea clusterului prezentat anterior: eureka: client: registerWithEureka: true fetchRegistry: true serviceUrl: defaultZone: http://dsc01:8761/eureka/,http:// dsc02:8762/eureka/ Orice schimbare a listei necesită o repornire a Clientului Eureka pentru a obține lista actualizată.

Instanțe multiple de Server pe aceeași mașină În cazul în care se dorește pornirea mai multor instanțe de Server pe aceeași mașină, trebuie folosite hostname-uri diferite pentru fiecare instanță. Eureka identifică pe baza combinației hostname și port. Hostname-urile trebuie să rezolve către localhost. în Windows OS se folosește fișierul hosts. eureka: instance: hostname: server1 2 http://www.thegeekstuff.com/2014/01/install-dns-server/

www.todaysoftmag.ro | nr. 34/aprilie, 2015

35


programare (Micro)Service Discovery with Netflix Eureka <lastRenewalTimestamp> 1427199350993 </lastRenewalTimestamp> <evictionTimestamp>0</evictionTimestamp> <serviceUpTimestamp>1426157045251 </serviceUpTimestamp> </leaseInfo> <metadata class=”java.util. Collections$EmptyMap”/> <appGroupName> MYSIDECARGROUP</appGroupName> <homePageUrl>http://cljlcpdevsrv10:8000/ </homePageUrl>

[Eureka Dashboard] Eureka Dashboard

Interfața grafică

<statusPageUrl>http://cljlcpdevsrv10:8001/info </statusPageUrl> <healthCheckUrl>http://cljlcpdevsrv10:8001/health </healthCheckUrl> <vipAddress>bestprices</

vipAddress> <isCoordinatingDiscoveryServer>false </isCoordinatingDiscoveryServer> <lastUpdatedTimestamp>1426271956166 </lastUpdatedTimestamp> <lastDirtyTimestamp>1426271939882 </lastDirtyTimestamp> <actionType>ADDED</actionType> </instance> </application> +<application> +<application> +<application> </applications>

Eureka Server oferă în interfața grafică pentru a observa statusul și detalii despre Instantele înregistrate. Noi avem un mediu în care evaluăm tehnologii. Inițial am pornit cu exemplele Spring Cloud3 și le-am modificat pentru nevoile noastre. Exemplul de mai sus prezintă un Server Eureka din mediul nostru, http://dsc02:8761. Sunt prezentate următoarele: • Replici ale Discovery Server (DS): lista celorlalte Servere din Informații despre Instanță cluster, cu mențiunea celor disponibile și celor nedisponibile; Elementul <instance> prezintă informații complete despre o • Instanțele care sunt momentan înregistrate la Eureka: toate instanță înregistrată. Serviciile și Instanțele aferente. Majoritatea detaliilor sunt clare și prezintă informații precum locația fizica a instanței, momentul ultimei înnoiri, etc. . Interfata XML/Text URL-urile de healthcheck poți fi folosite de către tool-uri Această interfața prezintă mai multe detalii, http://dsc02:8761/ externe de monitorizare. eureka/apps (copy&paste din browser): Informații proprii pot fi adăugate cu rolul de metadata. <?xml version=”1.0”?> -<applications> <versions__delta>1 </versions__delta> <apps__hashcode>UP_11_ </apps__hashcode> +<application> +<application> +<application> -<application> <name>BESTPRICES</name> +<instance> -<instance> <hostName>clj-lcpdevsrv10 </hostName> <app>BESTPRICES</app> <ipAddr>10.111.42.71</ipAddr> <status>UP</status> <overriddenstatus>UNKNOWN </overriddenstatus> <port enabled=”true”>8000</port> <securePort enabled=”true”>443 </securePort> <countryId>1</countryId> -<dataCenterInfo class=”com.netflix.appinfo.InstanceIn fo$DefaultDataCenterInfo”> <name>MyOwn</name> </dataCenterInfo> -<leaseInfo> <renewalIntervalInSecs>30 </renewalIntervalInSecs> <durationInSecs>90</durationInSecs> <registrationTimestamp> 1426271956166 </registrationTimestamp> 3 https://github.com/spring-cloud-samples

36

nr. 34/aprilie, 2015 | www.todaysoftmag.ro

Eureka Client

Clientul Eureka face parte din ecosistemul unei Instanțe de Serviciu business. Poate fi folosit în mod embedded sau ca și process atasat (logic). Netflix sugerează ca modul embedded să fie folosit pentru servicii Java și modul atașat pentru servicii scrise în limbaje non-JVM. Clientul este configurat cu o listă de Servere Eureka. Configurațiile anterioare din cazul Eureka Server se aplică și la Client. Orice aplicație Spring Boot devine un Client Eureka folosind adnotarea @EnableDiscoveryClient și având Eureka în Classpath: @SpringBootApplication @EnableDiscoveryClient public class SampleEurekaClientApp extends RepositoryRestMvcConfiguration { public static void main(String[] args) { SpringApplication.run(CustomerApp.class, args); } }

Heartbeat-uri

Clientul și Serverul implementează un protocol de heartbeaturi. Clientul trebuie să trimită mesaje de heartbeat regulat către Server. Serverul așteaptă aceste mesaje pentru a menține instanța de serviciu în registru sau pentru a reînnoi informații despre


management

TODAY SOFTWARE MAGAZINE private BestPrice findBestPriceWithLoadBalancerClient(

aceasta. În cazul în care aceste mesaje nu sunt primite, instanța final String productSku) { BestPrice bestPrice = null; este scoasă din registru. Mesajele heartbeat pot specifica și un status pentru instanța: // “bestprices” is the name of the service in // Eureka, as well as of the Ribbon LoadBalancer UP, DOWN, OUT_OF_SERVICE, cu consecințe imediate pentru // which gets created automatically. rezultatele de descoperire returnate.

Mod protecție Server

ServiceInstance instance = loadBalancerClient .choose(“bestprices”);

if (instance != null) { // Invoke server, based on host and port. // Example using RestTemplate. URI productUri = URI.create(String .format(“http://%s:%s/bestprices/” + productSku, instance.getHost(), instance.getPort()));

Eureka Server are un mod protecție: în cazul în care un anumit număr de instanțe nu mai trimit mesaje heartbeat într-un anumit interval de timp, serverul blochează registrul și nu va șterge automat aceste instanțe. Consideră că a avut loc o partiționare a rețelei fizice și așteaptă ca aceste instanțe să revină când problema fizică se rezolvă. Această capabilitate este utilă în cazul Cloud și poate fi oprită în cazul data center-elor private.

bestPrice = restTemplate.getForObject(productUri, BestPrice.class); } return bestPrice;

Cache local Client

}

private BestPrice findBestPriceWithEurekaclient(final String productSku) {

Referințe

Una dintre capacitățile speciale ale Eureka este Cach-ul local Servicii Non-JVM Client. Clientul obține regulat informații din registru Eureka Acest aspect nu va fi prezentat extensiv în acest articol și poate Server și le stochează local. La un moment dat poate avea aceleași fi subiectul altuia. informații ca și Server-ul. În cazul în care toate serverele devin Exista două abordări: indisponibile sau clientul este izolat de servere printr-o problemă • REST API - Eureka expune un API RESt prin care alte fizică de rețea, acest Client poate funcționa în continuare cu aplicații pot face interogări de discovery. Partea negativă este ca rezultate bune până când acest cache local devine învechit. toate aceste aplicații trebuie să își implementeze mecanismele și Cache-ul local îmbunătățește performanța comunicării între protocoalele pe care Clientul Eureka Java le are deja. servicii pentru că nu mai este nevoie de a trece peste încă un hop • Sidecar - Clientul Eureka poate rula atașat logic de un alt intermediar cu scopul de a face balansarea apelurilor. proces ce reprezintă o instanță de serviciu. Procesul părinte va folosi Clientul atașat pentru a avea acces la platformă și către Folosire alte Servicii, iar Clientul va rula protocoalele Client-Server în Clientul Eureka poate fi folosit în mod direct sau cu ajutorul numele Instanței de Serviciu. altor librării ce se integrează cu Eureka. În continuare sunt prezentate două opțiuni de folosire a cli- Concluzii entului Eureka pentru a apela un serviciu, în cazul acesta serviciu • Eureka este o soluție dedicată pentru Service Discovery. bestprices din mediul nostru de evaluare: • Eureka este o soluție simplă și robustă. • Eureka e High Available. Direct • Eureka implementează Cache Local Client. • Eureka e open source și menținută de Netflix. ... @Autowired • Spring Cloud investește în suportul și promovarea Eureka private DiscoveryClient discoveryClient; prin Spring Cloud Netflix. ...

BestPrice bestPrice = null; // get hold of a service instance from Eureka ServiceInstance instance = null; // “bestprices” is the name of the service in Eureka List<ServiceInstance> instances = discoveryClient .getInstances(“bestprices”); if (instances != null && instances.size() > 0) { instance = instances.get(0); //could be random // Invoke server based on host and port. // Example using RestTemplate. URI productUri = URI.create(String .format(“http://%s:%s/bestprices/” + productSku, instance.getHost(), instance.getPort()));

• • • • •

https://github.com/Netflix/eureka/ http://cloud.spring.io/spring-cloud-netflix/spring-cloud-netflix.html https://github.com/spring-cloud-samples/eureka http://jasonwilder.com/blog/2014/02/04/ service-discovery-in-the-cloud/ http://www.thegeekstuff.com/2014/01/install-dns-server/

bestPrice = restTemplate.getForObject(productUri, BestPrice.class); } return bestPrice; }

Ribbon Load Balancer Ribbon este un client HTTP și un load balancer software de la Netflix și care se integrează cu Eureka:

Adrian Ivan

... @Autowired private LoadBalancerClient loadBalancerClient; ...

Software architect @ SDL

aivan@sdl.com

www.todaysoftmag.ro | nr. 34/aprilie, 2015

37


programare

programare

Partajarea ecranului (screen sharing) utilizând Service Bus Relay (Azure)

A

m început să lucrăm la un proiect în care este necesar să oferim o soluție de încredere pentru partajarea ecranului la distanță - Remote Screen Sharing – RDP (Remote Desktop Protocol). Din fericire, toate dispozitivele funcționează

Radu Vunvulea

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

38

nr. 34/2015 | www.todaysoftmag.ro

pe sistem de operare Windows și noi putem folosi cu succes suportul de la Windows. Deoarece toate dispozitivele sunt împrăștiate în întreaga lume, avem nevoie de o soluție care să facă un liant între toate acestea. Întregul conținut care este trimis prin cablu trebuie să fie codat. În teorie, am avea nevoie de niște servere releu care să fie ”persoana de la mijloc” între dispozitive și persoanele care doresc să acceseze acea pute de legătură a dispozitivelor. Există câteva soluții pe piață pentru Relay Servers (servere releu) și Tunneling. Unele dintre ele sunt open-source și gratis, altele sunt scumpe și foarte exotice. Pentru că soluția noastră ar rula pe Azure, noi dorim să reducem costul sarcinilor operaționale și de mentenanță cât mai mult posibil. Dacă am avea câteva servere releu ar necesita costuri de mentenanță suplimentare pentru acele aparate virtuale. În

final, intenționăm să fim cât mai flexibili și să creștem sau descreștem în funcție de nevoile clientului. Deși în mod normal noi susținem 30-50 sesiuni RDP, trebuie să fim capabili să susținem 500 de sesiuni RDP. Din momentul în care un client ne înștiințează că dorește să deschidă o sesiune RDP până în momentul în care el are nevoie de fapt să deschidă sesiunea, avem opt secunde ca să facem toată magia. În aceste secunde, noi trebuie să notificăm dispozitivul, să deschidem canalul de comunicare cu serverul releu și să stabilim o conexiune sigură. Am încercat să găsesc o soluție care este scalabilă, deoarece acum putem avea un vârf de 500 de sesiuni RDP, dar trebuie să fim pregătiți să susținem mai mult decât atât. Nu doresc să devirusez și să repar probleme dintr-o soluție care face tunneling și


management care nu funcționează conform așteptărilor. Aceasta ar necesita timp suplimentar pentru a înțelege cum funcționează sistemul, cum este făcută implementarea și așa mai departe. În final, aceasta înseamnă cheltuieli în plus precum și prezența a cel puțin unei persoane care să cunoască foarte bine soluția de tunneling și problemele care vin odată cu ea.

TODAY SOFTWARE MAGAZINE

În acest mod, vom avea o soluție de tunneling între aceste două aparate, prin Service Bus Relay, fără a fi nevoiți să deschidem porturi firewall, să avem confirmări IP complexe sau să ne ocupăm de servere releu. Dacă doriți ca modelul să funcționeze cu simbolul Shared Access Policy, veți modifica configurația TransportClientEndpointBehaviour. Furnizorul de simbol trebuie să fie speSoluția cificat utilizând Shared Access Signature Service Bus Relay este un serviciu care – vezi codul de mai jos. a fost construit pentru aplicațiile hibride, relayCreds = new TransportClien care funcționează în Azure și în locație. tEndpointBehavior Acesta ne permite să expunem servicii { TokenProvider = TokenProvider. WCF din sistemele din locație care pot CreateSharedAccessSignafi accesate din Azure, fără a trebui să ne tureTokenProvider( sharedAccessKeyName,s ocupăm de reguli firewall și să deschidem haredAccessKey) porturi sau alte lucruri. Ne ajută să expu- }; nem un canal sigur (port bridge) între două puncte finale (endpoints) într-un Autentificare mod sigur și de încredere. Întreaga comuÎn acest moment, Service Bus Relay nicare cu Service Bus Relay se face prin este singurul serviciu de la Service Bus HTTPS. care nu are suport pentru Shared Access Signature (SAS). Din această cauză, trebuie Implementare să creăm și să lucrăm cu Shared Access Service Bus Relay ne-ar putea ajuta Policies. Acestea sunt destul de asemănămult. În acest caz pare a fi soluția perfectă. toare cu SAS, dar noi nu putem controla Dacă am putea redirecționa traficul generat accesul la nivelul releului, ci numai la nivede conexiunea RDP prin Service Bus Relay lul spațiului de nume (name space). către celălalt endpoint… Spre norocul Din această cauză, am putea avea o nostru, aceasta se poate face cu ușurință. problemă de securitate acolo. Dacă același Există un cod model foarte bun scris de spațiu de nume este utilizat în comun în Clemens Vasters1 care funcționează foarte două sesiuni de tunneling diferite, atunci bine. ambele conținuturi ale sesiunilor ar putea Încă nu este gata pentru producție, dar fi accesate de ambii clienți, lucru care este este un bun punct de plecare, în special posibil . pentru un PoC, atunci când vrei să validezi O altă problemă cu acestea este numădacă o soluție funcționează sau nu. rul politicilor care pot fi definite pe un Nu voi descrie în detaliu soluția ofe- Service Bus Namespace. Putem avea rită de Clemens Vasters, deoarece este maxim 12 (Shared Access Policies). Cea descrisă în amănunt în postarea sa pe mai simplă soluție este să creăm și să utiblog. Soluția include un agent numit Port lizăm un namespace diferit pentru fiecare Bridge Agent care va rula pe dispozitivele sesiune tunneling. În acest fel, din pernoastre. Agentul va redirecționa traficul spectiva securității, putem gestiona accesul dintr-un port specific către Service Bus într-un mod sigur și de încredere. Mai Relay. În cazul nostru, vom redirecționa multe despre acest aspect vom discuta în întregul trafic generat de sesiunea RDP partea următoare. către Service Bus Relay. Pe aparatul clientului care dorește să Soluția propusă acceseze dispozitivul, noi vom porni o altă Putem crea un fond comun de spații de aplicație (serviciu) care va face un lucru nume (namespaces) Service Bus care sunt similar – va pune pe hartă un port stan- gestionate de o componentă a serverului. dard către același releu de la Service Bus Putem avea tot timpul 30 namespaces disRelay. În momentul în care pornim conexi- ponibile în fondul comun, spre exemplu. unea desktop la distanță (Remote Desktop Serviciul poate spori sau diminua număConnection) cu clientul, noi vom specifica rul de namespaces disponibile în fondul portul în care Service Bus Relay este confi- comun, în funcție de solicitare sau de gurat pentru a expune datele. oră. Crearea unui spațiu de nume Service 1 h t t p : / / b l o g s . m s d n . c o m / b / c l e m e n s v / Bus nu necesită mult timp. Chiar dacă nu archive/2009/11/18/port-bridge.aspx există vreun SLA în legătură cu timpul cât

durează, noi am observat că în mod normal nu durează mai mult de 20 de secunde. Acest fond comun poate conține spații de nume din diferite subscripții Azure. Costul unui spațiu de nume (namespace) este de ~7€ pe lună. Dacă se creează un spațiu de nume doar pentru două zile, vom plăti numai pentru acele două zile. Mai sus putem vedea serviciul care va putea să aloce spații de nume din fondul comun. După aceea, serviciul va putea să le recicleze. Când o sesiune se încheie, sistemul va invalida cheia de acces și va genera chei noi. În acest fel, vechile chei nu mai pot fi utilizate.

Preț

În acest moment, prețul pentru 100 de ore de releu este 0,10$. 100.000 de mesaje trimise printr-un releu ne-ar costa 0,01$. Am calculat cât trafic generează o sesiune RDP pentru o dimensiune de ecran de 1920x1080 (32b culori), utilizând RDP 6.1. Pentru o utilizare normală, am observat că, în general, pentru fiecare 5 minute de conexiune consumăm: • 18MB trafic de date, • 9000 de mesaje pe releu. Pe baza acestor estimări, într-o oră vom consuma: • 106.800 mesaje, • 204MB trafic de date (expediate), • 0,001$ costul unei ore de releu deschis. Costul total pentru o oră de RDP este 0,21$, pentru utilizare normală la o rezoluție a ecranului de 1920x1080. Un preț foarte bun pentru o soluție care funcționează imediat și nu necesită mentenanță și cod special sau configurare pe serverul releu.

Probleme posibile

Numărul maxim de spații de nume (namespaces) sub o subscripție Azure este de 100. Pentru a putea să avem mai mult de 100 de spații de nume disponibile, putem cere ca limitarea să fie modificată pentru abonamentul nostru Azure sau să utilizăm și să gestionăm mai mult decât o singură subscripție Azure. Din când în când, utilizând protocolul implicit Windows RDP, primim mesajul : ”Din cauza unei erori în codarea datelor, această sesiune va fi încheiată.” Nu ne este clar care este cauza de la rădăcina acestei probleme. Problema apare mai ales în momentul în care conținutul ecranului este actualizat și o cantitate mare de conținut este trimisă prin RDP. Suspectăm

www.todaysoftmag.ro | nr. 34/aprilie, 2015

39


programare Partajarea ecranului (screen sharing) utilizând Service Bus Relay (Azure) că problema are legătură cu dimensiunea pachetului. Se pare că, dacă schimbăm nivelul de securitate la SSL (TLS 1.0), problema dispare în totalitate. Este necesară o cercetare suplimentară. Ultimul aspect nu constituie o problemă reală, dar ar trebui să ținem cont de el. Pentru a putea să utilizăm RDP pe Service Bus Relay, noi trebuie să dezactivăm certificatul de securitate de la Remote Desktop Connection. Clientul se află în spatele unui tunel (Service Bus Relay)care nu va putea să virtualizeze certificatul clientului. Luați în considerare faptul că noi deja utilizăm o conexiune sigură, oferită de tunel.

soluție care poate fi utilizată imediat. Fără a trebui să ne ocupăm de configurarea specială, servere releu sau alte componente speciale, putem spune că este o opțiune extraordinară pentru a realiza un tunel. De asemenea, este grozav că nu trebuie să utilizăm o soluție Remote Desktop de la Microsoft. În final, putem utiliza orice tip de protocol; Service Bus Relay este doar soluția port bridge pentru a realiza un tunel. Codul model pentru port bridge nu este un cod de producție, dar este un bun punct de plecare pe care vi-l recomand cu căldură.

Concluzie

Service Bus Relay este un serviciu extrem de interesant, care este foarte capabil și scalabil. Acesta funcționează minunat ca un mecanism tunel pentru RDP – o

40

nr. 34/aprilie, 2015 | www.todaysoftmag.ro


management

diverse

Analitica avansată și invizibilă

A

Oana Călugăr

calugar.oana@gmail.com Ambassador în România @ Hello Tomorrow

nalitica va ocupa locul central pe scena tehnologiei informației pe măsură ce volumul de date generate de sistemele încorporate crește și fonduri vaste de date structurate și nestructurate din interiorul și din exteriorul companiei sunt analizate. Companiile vor fi puse în situația de a face față filtrării unor cantități enorme de date provenite din IoT, social media și dispozitive portabile, pentru ca apoi să furnizeze exact informația potrivită persoanei potrivite, la momentul potrivit. Așadar, pretutindeni analitica va deveni profund dar invizibil încorporată. Big Data reprezintă un important instrument care să faciliteze concretizarea acestei tendințe, dar atenția trebuie îndreptată mai întâi înspre marile întrebări și marile răspunsuri și, în al doilea rând, înspre Big Data. Tehnicile analiticii cresc în complexitate, iar companiile aplică învățarea despre aparate (machine learning) și modelarea predictivă (predictive modeling) la seturi de date din ce în ce mai masive și mai complexe. Inteligența artificială este acum o realitate. Când este construită pentru a spori cunoștințele individului și pusă în funcțiune fără încetare pentru a avea impact asupra afacerii, analitica avansată poate ajuta la amplificarea inteligenței noastre pentru a fi capabili să luăm decizii mai eficiente.

Începem cu întrebări

Cazul analiticii dă naștere unor întrebări referitoare la utilitate: • Cum pot fi furnizate percepții unui individ anume care execută un anumit rol într-un anumit moment pentru a-i spori inteligența, eficiența sau judecata? • Pot semnalele de la dispozitivele

mobile, portabile sau de calcul ambiental să fie încorporate în luarea de decizii? • Poate analiza rezultată să fie furnizată fără întrerupere și contextual individului atât în funcție de cine este și unde se află cât și în funcție de ceea ce face? • Poate analitica textului, a vorbirii sau cea video să ofere noi moduri de a interacționa cu sistemele? • Ar putea soluțiile din realitatea virtuală sau augmentată să aducă noi percepții asupra vieții? • Cum ar putea vizualizarea avansată să sprijine explorarea de date și descoperirea de tipare când este mai mult nevoie de ea? • Unde ar pute a f i folosit ă procesarea limbajului natural nu doar pentru a înțelege datele semi-structurate și nestructurate (extrăgând sensul și formând ipoteze), ci și pentru a încuraja interacțiunea conversațională cu sistemele

www.todaysoftmag.ro | nr. 33/martie, 2015

41


diverse Analitica avansată și invizibilă în loc de a realiza acest lucru prin cereri, algoritmi sau scripturi? Această inteligență amplificată creează un potențial pentru o eficiență operațională semnificativă și un avantaj competitiv pentru o companie. Descoperirea, planificarea de scenarii și simularea pot fi furnizate liniei întâi, informată prin repere contextuale precum locația, comportamentul trecut și intenția în timp real. Drept rezultat, inteligența este pusă în aplicare în timp real, potențial la îndemâna oricui, până acolo unde ar putea conta cel mai mult. Rezultatul poate fi o trecere sistemică de la comportamente reactive de tipul ”simte și răspunde” la soluții predictive și proactive. Analitica datelor este de abia la început, dar cazurile de utilizare potențiale sunt vaste. Comunitatea medicală poate analiza acum milioane de linkuri web pentru a prezice răspândirea unui virus. Comunitatea agenților secreți de informații poate analiza acum convorbiri telefonice, texte și e-mailuri din întreaga lume pentru a identifica posibilii teroriști. Fermierii pot utiliza datele colectate de echipamentul lor de la aproape fiecare rând plantat, pentru a-și spori recoltele.

Lecție din linia întâi

Profitând de hardware-ul smart glass, analitică și instrumente back-office, o companie petrolieră de talie mondială a creat o platformă pilot pentru a amplifica eficiența muncitorilor. Scopul acestui efort a fost să ofere muncitorilor care lucrau în locații îndepărtate ajutor hands-free, sprijin în luarea de decizii și automatizarea procesului de lucru. Platforma funcționează după cum urmează: atunci când un echipament nu funcționează bine pe o instalație de foraj, senzorii detectează problema și anunță proactiv un agent de serviciu din apropiere prin smart glass. Apoi, analitica furnizează informații de diagnostic critice în legătură cu problema. Aceste informații, augmentate de capacități analitice puternice aplicate senzorului și alte date relevante din back-office, includ instrucțiunile pas cu pas destinate reparării. Utilizarea unui laptop sau a unui manual greoi tipărit pe hârtie pentru a face o triere și a depana echipamentul care nu funcționează corespunzător ar putea necesita ca agenții de serviciu să își scoată mănușile și să se îndepărteze în timp ce caută răspunsuri. Însă smart glass face posibil ca ei să vadă informațiile necesare în timp real și la fața locului –crescând eficiența, acuratețea și siguranța muncitorilor. În plus, cu un simplu semn făcut cu mâna, agentul utilizează o banderolă controlată prin gesturi pentru a iniția o video-conferință cu suportul de nivel trei din biroul de acasă. Expertul care se află la distanță poate să vadă ceea ce vede agentul, poate să comunice cu el/ea pe întreaga durată a procedurii și chiar să îi furnizeze instrucțiuni adnotate care apar pe afișajul augmentat al agentului. Agentul poate de asemenea să trimită date către o bază centrală de date. Cu un simplu semn cu capul sau o aplecare, el sau ea poate păstra un jurnal sau ”checklist” (o tabelă de control) al activităților încheiate și își poate crea noi notițe prin voce în timp ce execută repararea. Acel jurnal de reparare devine apoi disponibil pentru următorul tehnician care monitorizează echipamentul de teren. Informațiile critice nu sunt pierdute prin mormane de documentație; ele sunt organizate digital și accesibile pentru cei care au nevoie de ele.

Spre infinit și dincolo de el

42

nr. 34/aprilie, 2015 | www.todaysoftmag.ro

Cazurile de utilizare pentru platforme ca aceasta nu sunt limitate doar la muncitorii de pe teren din domeniul petrolier și al gazelor.La acestea putem să adăugăm și centrele de distribuție, unde șoferii fac o inspecție a vehiculului înainte de a porni contactul. În multe situații, șoferii trebuie să caute detaliile specifice de manifestare a vehiculului – detalii care ar fi aproape imposibil de memorat fără ani întregi de instruire. Instrucțiunile virtuale accesate prin smart glass pot ghida șoferii pe parcursul inspecțiilor, accelerând întregul proces și crescând acuratețea și eficiența sa. Puterea combinată a tehnologiei smart glass, a analiticii și a sistemelor back office (baze de date cu cunoștințe sau sisteme de management depozit) poate ajuta companiile din aproape orice industrie sau sector să se conformeze viziunii unei forțe de muncă mai bine informate, prin oferirea de informații oamenilor potriviți, în maniera potrivită, atunci când contează. Pentru departamentul de IT, analitica datelor oferă șansă de a sublinia rolul pe care l-ar putea juca în călătoria mai largă a analiticii și direcționarea progreselor înspre cazuri de utilizare cu un impact real, măsurabil. Din punct de vedere tehnic, aceste progrese necesită date, instrumente și procese care să realizeze funcții de management ale datelor nucleu, de simulare și analiză. Dincolo de valorificarea și agregarea informațiilor din trecut, este importantă și conturarea unei platforme pentru învățare, anticipare și explorare.

Bibliografie • Jeff Bertolucci, “10 powerful facts about big data,” InformationWeek, Iunie 10, 2014, http://www. informationweek.com/big-data/ big-data-analytics/10powerful-facts-about-big-data/d/d-id/1269522?image_ number=4 • Deloitte University Press, Intelligent automation: A new era of innovation, Ianuarie 22, 2014, http://dupress.com/ articles/intelligent-automation-a-new-era-of-innovation/ • Tom Austin, Top 10 strategic technologies—The rise of smart machines, Gartner, Inc.


legal

design

SaaS - un nou popas în odiseea aplicațiilor software

U

nele aspecte de natură legală ce vizează aplicațiile software în general precum proprietate intelectuală și folosirea codului open source, colectarea datelor cu caracter personal prin aplicație, publicarea în Google Play, au mai fost

Claudia Jelea

claudia.jelea@jlaw.ro Avocat & Consilier in domeniul marcilor @ IP Boutique

analizate în numerele anterioare ale revistei Today Software Magazine. În articolul acestui număr, aș vrea să mă opresc asupra modului în care se exploatează comercial aplicațiile de tip SaaS (Software as a Service) și, în special, asupra parteneriatelor ce vă pot ajuta să obțineți încasări din folosirea acestor aplicații. Pentru început voi face o scurtă remarcă introductivă pentru cei nefamiliarizați: aplicațiile SaaS sunt cele pe care dezvoltatorii software le livrează clienților sub forma unui serviciu. Clienții nu cumpără și nu dețin programul sau aplicația în sine, ci dobândesc dreptul limitat (și neexclusiv) de a-i folosi funcționalitățile în schimbul unei sume de bani, de obicei, o taxă anuală sau un abonament pe o anumită perioadă. Caracteristic acestui tip de aplicație este faptul că aplicația nu este găzduită de (la) clienți. De cele mai multe ori, este găzduită în cloud la un furnizor ce oferă servicii de cloud sau într-un data center independent, iar clienții o pot accesa prin browser-ul de Internet.

Nașterea unei dileme: Reseller │ Distribuitor │ Agent │ Mandatar │ Prestator de servicii │ Altă denumire?

Recent, în pauza unei conferințe, discutam cu un dezvoltator software aflat la început de drum. Acesta împreună cu asociații săi crease o aplicație SaaS nișată, adresată unui public țintă bine-stabilit. Știa industriile în care urma să abordeze potențialii clienți și era în discuții avansate cu un partener care să-i ajute să ajungă la respectivii clienți. După ce mi-a povestit în ce constă aplicația, mi-a spus: “Avem totul

pregătit. Ne mai trebuie doar un model simplu de reseller contract pe care să-l încheiem cu reseller-ul. Dar luam un model de pe Internet și gata”. Întrebarea mea firească în legătură cu rolul pe care urma să-l joace reseller-ul în aranjamentul pe care îl aveau în plan (mandatar, agent, distribuitor, etc.) l-a buimăcit. După modul în care m-a privit, puteam ghici că se gândește măcar la câteva clișee cu și despre avocați: «altul care vrea să-mi ia banii și să mă acopere de hârtii», «de ce să plătesc un avocat când e plin Internetul de modele de contracte», «n-am nevoie de un contract complicat, ci de ceva simplu și ieftin, poate chiar gratis», etc. . Poate că interlocutorul meu avea totuși o părere mai bună despre munca avocaților, dar lăsând gluma la o parte, din punctul lui de vedere comercial, problema era simplă: am creat produsul, știm clienții pe care vrem să-i stabilim drept țintă, mai avem nevoie doar de un distribuitor care să ducă produsul la clienți; nu are rost să ne mai complicăm cu probleme juridice. Vă este cunoscută această abordare? Brusc, mi-am amintit că, deseori, cuvintele au conotații diferite pentru persoane diferite. Mai ales dacă sunt implicați și termeni juridici care pot avea semnificații variate. Sigur, pentru dezvoltatori, denumirea sub care ar opera acest reseller nu are neapărat semnificații diferite – el se poate numi distribuitor, agent, mandatar, prestator de servicii, important este să stimuleze folosirea aplicației SaaS. De asemenea, nici nu

www.todaysoftmag.ro | nr. 33/martie, 2015

43


legal SaaS - un nou popas în odiseea aplicațiilor software ar avea de ce să aibă altă semnificație. De cele mai multe ori, este treaba departamentului juridic să-și dea seama de aspectele legale implicate într-un proiect. Dar ce se întâmplă dacă departamentul juridic nu adresează toate întrebările potrivite? Sau mai rău, dacă nu beneficiați de vreun ajutor juridic? De aceea, nu strică să aveți măcar o idee despre câteva din problemele sensibile pe care le ridică distribuirea acestui gen de aplicații.

Întrebările pe care puțini și le pun

Primul lucru pe care ar trebui să-l faceți este să vă pregătiți strategia comercială și să vă gândiți cum vreți “să arate” relația contractuală cu partenerul care va promova și distribui / licenția aplicația către potențialii clienți. Pentru a putea beneficia de un contract bun care să vă protejeze interesele și poziția de dezvoltator al aplicației, este necesar să fie cunoscute anumite detalii. Iată mai jos câteva exemple de întrebări pe care ar trebui să insistați: • Care vor fi atribuțiile partenerului? Vă ajută doar cu promovarea produsului dumneavoastră software, vă reprezintă la negocieri sau are atribuții mai extinse? • Ce tip de relație doriți să aibă partenerul dumneavoastră cu clientul final? Cine va încheia contractul cu acesta – partenerul sau dumneavoastră (dezvoltatorul aplicației)? • Partenerul își va desfășura activitatea în mod independent sau pe baza indicațiilor dezvoltatorului?

44

• Este nevoie ca dezvoltatorul să încheie un contract separat cu clientul final privind folosirea aplicației? • Cine poartă răspunderea pentru contractul încheiat cu clientul final și pentru eventuale acțiuni nepermise asupra aplicației din partea clientului final? • Care este mecanismul financiar agreat – partenerul primește un comision sau încasează direct suma integrală, urmând apoi să plătească o anumită parte către dezvoltator? • Cine asigură suportul tehnic în eventualitatea unei nefuncționalități? • Dacă prin intermediul aplicației se pot colecta și procesa date cu caracter personal ale oamenilor, cine e obligat să respecte legislația aplicabilă? • Îi acordați partenerului vreo licență sau orice drept privind aplicația? De exemplu, pentru scopurile distribuirii aplicației, îi permiteți să adapteze în vreun fel aplicația? • Și altele – în funcție de cazul concret.

De ce contează aceste nuanțe juridice?

Pe baza răspunsurilor la aceste întrebări, intențiile comerciale pot fi reflectate contractual într-un mod cât mai fidel și, cu ajutorul potrivit, chiar avantajos pentru dumneavoastră. Din punctul de vedere al redactării contractului, calitatea în care acționează partenerul dumneavoastră - fie ca distribuitor, revânzător al aplicației, comisionar, reprezentant ce negociază licențierea aplicației în numele dezvoltatorului, fie ca

nr. 34/aprilie, 2015 | www.todaysoftmag.ro

agent care semnează contracte în numele și pe seama sa, etc. - atrage consecințe juridice diferite și, implicit, drepturi/obligații distincte pentru dezvoltator. Mai simplu spus, conținutul contractului contează întotdeauna. În mod obișnuit, denumirea dată contractului ne poate ajuta că calificăm juridic acel contract adică să identificăm regulile ce i se aplică și să determinăm întinderea obligațiilor asumate de părți. Totuși, în practică, sunt foarte dese cazurile în care denumirea nu reflectă relația existentă de fapt între părți. Dacă la problema denumirii adăugăm și redactarea deficitară a contractului, conflictul reprezintă o certitudine, fiind doar o chestiune de timp. Așadar, o discuție clară privind aceste aspecte este de importanță majoră pentru dezvoltator și consultantul care îl asistă cu pregătirea contractului și a negocierii. În primul rând, vă ajută să nu pierdeți timpul cu redactarea unor clauze contractuale care ulterior se pot dovedi neacoperitoare sau inadaptate obiectivelor de business. Iar în al doilea rând, vă ajută să limitați riscul apariției unor eventuale divergențe cu partenerul, atunci când încasările de pe urma aplicației cresc substanțial iar interesele comerciale se schimbă.


HR

TODAY SOFTWARE MAGAZINE

EROARE 404: “Motivația angajaților”

F

iecare dintre noi ne dorim ,,mai binele”, indiferent dacă vorbim de noi ca indivizi sau de noi ca organizație. Dar ce ne mulțumește? Ce ne face să fim într-adevăr satisfăcuți, motivați și dornici de a rămâne în aceeași organizație? În acest context, angajații tind să schimbe cu ușurință compania, pentru a merge spre ,,mai bine”. Dar totuși. ce înseamnă acest ,,mai bine”

– remunerație mai mare, pachet de beneficii mai ,,motivant”, un mediu mai ,,fain” de lucru, posibilități mai multe? Pe de altă parte, angajatorii concretizează acest ,,mai bine” în salarii mai competitive sau pachete de beneficii mai atractive. Totuși, acestea par să nu fie suficiente, deoarece angajații continuă să plece spre ,,mai bine”, rata de retenție este în scădere, se fac eforturi continue pentru noi recrutări, traininguri și etape de inducție. Pe scurt? Bani, timp și resurse risipite. Cauza? Cel mai probabil sursa acestei situații este motivația angajaților. Iar!? Motivația? Haideți să fim sinceri, de câte ori nu am auzit acest deziderat, că avem nevoie de angajați motivați? Și încă nu am găsit nicio soluție miraculoasă la această problemă. Poate pentru că nu înțelegem încă pe deplin care sunt cu adevărat factorii care îi motivează pe angajați. În cele ce urmează vom analiza conceptul de motivație și vom afla împreună spre ce organizație ar fi recomandat să ne îndreptăm ca angajați și ce să oferim ca angajator, pentru ca oamenii să nu mai părăsească atât de repede compania.

Factorii de igienă vs. Factorii motivatori

Un pachet salarial mai consistent, mediu de lucru plăcut acestea sunt unele dintre premisele cu care suntem obișnuiți să asociem motivarea angajaților. Sunt oare aceste aspecte suficiente? Sunt necesare, dar nu suficiente. Să vedem și de ce. Salariul, condițiile de muncă, relațiile cu superiorii și colegii, politicile companiei sunt doar factori igienici (Herzberg, 1959), care nu motivează; prezența acestor factori elimină doar insatisfacţia. Astfel, dacă ne dorim angajați cu adevărat motivați, beneficiile materiale nu ne vor ajuta în acest sens. Prin intermediul factorilor de motivație financiari vom obține o satisfacție pe termen scurt și aceasta, doar dacă recompensa materială este o urmare firească a performanțelor angajaților.

Studiul realizat de Herzberg (1959) a relevat faptul că factorii care contribuie cu adevărat la creșterea motivației sunt: responsabilitatea, posibilitatea de avansare, dezvoltarea, realizările, recunoașterea. Totuși, lipsa lor nu produce insatisfacție. Unul dintre cele mai importante lucruri de reținut este că: lipsa factorilor de igienă produce insatisfacție; prezența lor, însă, asigură un nivel mediu de implicare, însă nu generează motivație. Pentru a înțelege mai bine cele două tipologii, ne este util următorul tabel:

Așadar, dacă dorim să avem angajați motivați (cel puțin pe termen scurt), ar trebui, în primul rând, să eliminăm insatisfacțiamenținem nivelul factorilor de igienă la un nivel cât mai ridicat; ulterior, dacă ne dorim o motivație de lungă durată, ar trebui să ne preocupe factorii motivatori, pe care ar fi recomandat să îi menținem la un nivel corespunzător.

Banii aduc motivație?

Problematica banilor a fost mereu un subiect destul de delicat. Nu ne dorim să fim cinici și să afirmăm că banii nu joacă un rol important pentru angajat. Aceștia însă ar fi un puternic factor motivator dacă munca pe care o desfășurăm este una mecanică, www.todaysoftmag.ro | nr. 33/martie, 2015

45


HR EROARE 404: “Motivația angajaților” puternic standardizată, automată. În acest caz, o remunerație doar câteva dintre beneficiile activităților de ,,enlargement”. crescută în funcție de performanța prestată, ne-ar motiva, pentru Aminteam anterior de două lucruri importante pentru motică am ști că: trebuie să lucrăm mai mult, la aceeași calitate, pentru vare- recunoașterea meritelor și dezvoltarea continuă; aceste mai mulți bani. două concepte ne pot ajuta în acest sens. Dar suntem într-o continuă evoluție. Ne dorim ca munca pre• Discuții despre dezvoltarea carierei. stată să ne provoace creativitatea, gândirea strategică, abilitățile • Implementarea trainingurilor interdepartamentale. Astfel de rezolvare a problemelor. În acest caz, motivația financiară nu de traininguri ajută angajații să învețe lucruri noi și strategii ne mai motivează. Dezvoltarea, îmbogățirea cunoștințelor, autode business ale celorlalte departamente; în acest mod, pot să nomia, recunoașterea eforturilor, găsirea unui scop – acestea își formeze o imagine clară asupra aportului și rolului pe care contează cu adevărat pentru noi în această situație. Tocmai de fiecare îl are în atingerea obiectivelor companiei. aceea, este recomandat să ne orientăm spre organizațiile a căror obiective se aliniază valorilor noastre personale. Concluzii Angajații motivați sunt o resursă extrem de importantă penIdei practice de creștere a motivației angajaților tru companie. Aceștia sunt mai productivi, mai dedicați, rămân Am aflat până acum că există doi factori care influențează loiali și scutesc organizația de cheltuieli suplimentare aferente implicarea angajaților noștri și că aceștia nu depind unul de altul. recrutării și pregătirii de noi oameni. Cu alte cuvinte, dacă ne asigurăm că mediul de lucru este unul plăcut și că bonificaţiile oferite sunt generoase, nu înseamnă că angajații noștri vor fi motivați; înseamnă doar că ei nu sunt demotivați. În rândurile următoare, vom expune câteva sugestii despre cum am putea aplica teoria lui Herzberg, factorilor duali ( ai satisfacției/ insatisfacției) pentru a crește motivația pe termen lung în companiile noastre. Pasul 1- Eliminarea insatisfacției: • Îmbunătățirea politicilor obstructive ale companiei; • Oferirea unei supervizări constructive, noninvazive; • Crearea și promovarea unei culturi a respectului și a demnității pentru toți membrii echipei; • Asigurarea unor remunerații competitive; • Recunoașterea statutului fiecărei poziții ierarhice, prin asigurarea unor sarcini relevante fiecăreia dintre acestea; • Asigurarea securității muncii. Toate aceste acțiuni ajută la eliminarea insatisfacției din În acest sens, suntem de multe ori tentați să credem că ne organizație. Însă nu trebuie să ne oprim aici! Abia după ce am motivăm angajații prin recompense materiale, mediul de lucru ajuns la acest nivel, începem să lucrăm la motivația angajaților. plăcut, relațiile bune dintre management și echipe etc.. Investim în toate acestea, fără a avea însă rezultatul scontat și de durată. Pasul 2- Crearea condițiilor pentru factorii motivatori Problema este că investim în factorii de igienă- acei factori care • Crearea de oportunități pentru diverse reușite; ne vor asigura în cel mai bun caz că nu avem angajați demotivați. • Recunoașterea aportului angajaților; Pentru a ajunge la performanță însă, trebuie să ne canalizăm • Crearea de sarcini care oferă satisfacții și care se potrivesc eforturile înspre factorii motivatori- cei care vizează realizările, abilităților și expertizei angajaților; recunoașterea, responsabilitatea, posibilitățile de avansare și dez• Responsabilizarea fiecărui membru al echipei; voltare angajaților. • Oferirea în cadrul companiei a oportunităților de avansare De asemenea, există diverse recomandări înspre dezvoltaprofesională,prin promovări interne; rea unei strategii viabile de motivare. Cu toate acestea, poate cel • Asigurarea oportunităților de training și dezvoltare, astfel mai important aspect de luat în calcul este diversitatea de factori încât angajații să poată ocupa posturile pe care le doresc în care ne motivează pe fiecare. Având această premisă, alături de companie. exemplele de acțiuni motivatoare, se recomandă discuțiile regulate unu-la-unu cu angajații, pentru a identifica ce anume este La aceste idei, am mai adăuga câteva sugestii care să ne ajute: important pentru ei. • Echilibrul dintre ,,job enrichment” și ,,job enlargement”. Un ultim aspect de reținut: avem nevoie de factorii de igienă; Conceptul de ,,job enrichment” presupune motivarea angajaților trebuie să ne asigurăm că aceștia există și că sunt oferiți în funcție prin atribuirea de responsabilități (suplimentare) specifice de nevoile individuale. Abia apoi, putem să începem să dezvoltăm superiorilor ierarhici. Astfel, persoanele vizate se vor simți motivația. apreciate, vor simți că munca lor are un scop și că aceasta este importantă pentru companie. Pe de cealaltă parte, acțiunile Ana-Maria Trifan anamaria.trifan@happy-employees.eu de ,,job enlargement” presupun diversificarea activităților fiecărui angajat, suplimentar jobului său. Evitarea repetitivității PR & Customer Care Specialist @ Azimut Happy Employees și a monotoniei, alături de oportunitățile de dezvoltare sunt

46

nr. 34/aprilie, 2015 | www.todaysoftmag.ro


contabilitate

Scutirea pe venit pentru programatori

P

Ioana Varga

ioana.varga@aiconsulting.ro Expert contabil Managing Partner @ A&I Consulting

Ioana Costea

ioana.varga@aiconsulting.ro Expert contabil Managing Partner @ A&I Consulting

entru întreprinderile mici și mijlocii și mai ales pentru firmele aflate la început de drum, departamentul sau firma colaboratoare de contabilitate reprezintă suportul deciziilor economice și financiare. Articolul de față își propune să ofere câteva informații din domeniul financiar-contabil, utile în identificarea problemelor contabile cu care se confruntă programatorii, designerii și companiile de IT din Cluj-Napoca și nu numai. Am ales ca în acest număr al revistei să prezentăm câteva clarificări privind accesarea scutirii de impozit pe venituri pentru programatori. Considerăm că modul de aplicare al acestei scutiri de impozit nu beneficiază de suficientă claritate pentru o bună aplicabilitate practică, în primul rând sub aspectul momentului de la care o companie poate aplica această facilitate. Fără să intrăm în amănunte, conform OMFP nr. 1479 din 2.09.2013, este necesar să fie îndeplinite o serie de criterii, atât din punct de vedere al societății angajatoare, cât și din partea salariatului. Societatea care cere această scutire de impozit pe salariu, 16% aplicat la baza de impozitare, trebuie să își desfășoare activitatea în România și să aibă ca obiect de activitate crearea de programe pe calculator (Cod CAEN 5821, 5829, 6201, 6202, 6209). De asemenea, pentru a putea aplica această scutire, compania trebuie să fi realizat în anul fiscal anterior o cifră de afaceri de 10.000 $ pentru fiecare angajat care urmează să beneficieze de această scutire în anul fiscal curent. Această condiție este complet discriminatorie și neconcurențială pentru companiile start-up, care trebuie să aștepte sfârșitul unui an fiscal ca să demonstreze capacitatea de a realiza cifra de afaceri prag în vederea acceptării scutirii. Din păcate,

nici o prevedere din Ordinul 1479 nu oferă posibilitatea ca o companie start-up să poată aplica acestă scutire. Considerăm că în acest sens, mediul de afaceri din domeniul IT ar trebui să facă niște propuneri de modificare a formei actuale a acestei legi. De exemplu, pentru a beneficia de scutirea de impozit pe salarii în anul 2016 pentru 10 angajați, compania trebuie să fi realizat o cifră de afaceri de 100.000 $ în anul 2015. Scutirea se poate acorda și angajaților pentru care s-a semnat contractul de muncă în anul accesării subvenției, atâta timp cât cifra de afaceri din anul precedent este acoperitoare. Nu este obligatoriu ca aceasta să fi fost generată de către angajații pentru care se acordă scutirea, aceasta poate fi generată și cu ajutorul colaboratorilor cu condiția să provină din activitățile cerute de lege, menționate anterior. Din punct de vedere al salariatului, beneficierea de scutirea impozitului pe salariu este condiționată de a avea diplomă de licență în domeniul IT ( vezi imaginea de mai jos) și de ocuparea unor funcții în companie ca: analist, programator, proiectant de sisteme informatice, administrator baze de date, inginer software sau manager de

www.todaysoftmag.ro | nr. 33/martie, 2015

47


contabilitate Scutirea pe venit pentru programatori canal de comunicare deschis către întreprinzătorii din domeniul IT ce activează conform legilor din România, pentru abordarea celor mai presante subiecte. Vă invităm să ne transmiteți un mesaj cu temele despre care sunteți interesați să vă informați. Așteptăm cu mare drag propunerile voastre pe adresa de email office@aiconsulting.ro , cu rugămintea ca la subiect să completați ”Pentru Today Software Magazine”. Răspunsurile le veți găsi în numărul de luna viitoare a revistei. proiect. Cu alte cuvinte, salariul care trebuie Pentru ca această scutire să fie aplicată achitat de către societate angajatului, crește în companie, postul trebuie să facă parte cu valoarea impozitului scutit. dintr-un departament specializat de inforAvând în vedere cele prezentate mai matică și trebuie evidențiat în organigrama sus, pentru a evita apariția unor situații angajatorului.

Recomandări contabile Traducând toate aceste aspecte în contabilitate, ne dorim să clarificăm atât companilor cât și salariaților, anumite elemente de bază ce sunt strict legate de această procedură privind scutirea de impozit. În cadrul contractului individual de muncă, se stipulează salariul brut cu care este remunerat salariatul pentru munca depusă. Din salariul brut sunt reținute de către companie, contribuțiile sociale, rezultând astfel venitul impozabil, asupra căruia se calculează impozitul pe salariu datorat de salariat. Rezultă astfel un venit net, ce reprezintă obligația de plată față de angajat. Astfel, din venitul impozabil, angajatului îi este reținut impozitul pe salariu. Rezultă un salariu net, care trebuie achitat de societate angajatului. Scutirea de impozit pe venit face referire la sumele datorate de angajat pentru

neplăcute în raport cu angajații ce urmează a beneficia în anul fiscal următor de scutire de impozit, vă recomandăm abordarea încă de la angajare a uneia dintre cele două opțiuni de mai jos: 1. Această scutire poate fi folosită de către angajator ca un instrument de creștere a venitului salariatului. Pentru angajații care beneficiază de scutirea de impozit pe salariu începând cu anul fiscal următor, această sumă rezultată din scutire poate reprezenta o creștere a venitului net încasat. 2. Atragem atenția că punerea în aplicare a acestei scutiri va genera un salariu net majorat. Dacă negocierea inițială a salariului net cu angajatul a inclus beneficiile ce se vor primi prin scutirea de impozit pe venit, trebuie cunoscut faptul că salariul net majorat nu poate fi diminuat fără acordul salariatului pentru a se ajunge la salariul negociat inițial. În această situație, vă recomandăm informarea salariatului la momentul angajării, privind diminuarea salariului venituri de natură salarială și reținute brut în anul fiscal, când acesta beneficide către angajator din venitul impozaază de scutirea de impozit pe salariu. bil. Începând cu cel de-al 2-lea an fiscal al companiei, dacă se aplică scutirea de Sperăm ca prin informațiile din impozit pe salarii, din venitul impozabil acest articol am contribuit la o mai bună nu se mai reține impozit pe salariu. Astfel înțelegere a condițiilor de accesare al acesvenitul impozabil devine egal cu salariu tui avantaj fiscal, scutirea pe impozit. Așa net. cum am precizat, ne dorim să creăm un

48

nr. 34/aprilie, 2015 | www.todaysoftmag.ro


marketing

Design vs. Seducție

A

titudinea contează - Ca și atunci când vrei să seduci o fată/ un băiat, o atitudine pozitivă îți va aduce mai mult succes. Șeful te va plăcea mai mult, colegii developeri nu vor fugi de tine, iar colegilor designeri nu le va fi frică să îți ceară părerea. Fii pozitiv, comunicativ și deschis. Ștefan Bălan

stefan.balan@lateral-inc.com Creative Director @ Lateral

Alege înțelept Imaginează-ți că vrei să seduci toate fetele/ toți băieții din club. Care crezi că va fi rata de succes? Doar pentru că ai nevoie de proiecte, nu înseamnă că trebuie să accepți orice client, orice proiect sau să accepți orice idee. Deși e necesar să fii deschis ideilor noi, nu înseamnă că trebuie să le și iei de bune. Alege proiecte la care ți-ar plăcea să lucrezi, altfel vei regreta mai târziu.

văzuți bine decât să își facă treaba corect. Nu îți pierde timpul încercând să îți faci portofoliul perfect. Cere feedback înainte să petreci foarte mult timp pe un design. Dacă validezi din timp, vei produce muncă de calitate superioară. Fii sincer(ă), recunoaște-ți nivelul!

Nu te arunca la un 10 dacă știi că ești un 5. Pe bune!

A avea așteptări realiste e sănătos pentru cariera ta. Și pentru sănătatea ta psihică. E Nu căuta perfecținea nevoie de mulți ani de experiență că să poți Pentru că nimeni nu e perfect. Poți crea ajunge la un nivel în care să fii confortabili să 10 variante total diferite pentru o pagină, discuți cu clienți mai mari. fiecare detaliu tot în 10 variante. Alege o variantă în care crezi și concentrează-te asu- E un joc al numerelor pra livrării unui produs funcționabil pe care Nu toți utilizatorii te vor înțelege. Chiar îl poți îmbunătăți ulterior. dacă ai gândit un produs foarte bun, e posibil ca utilizatorii să aibă nevoie de altceva. Ai Trebuie să te expui nevoie de mai multă expunere deci. Trebuie Mulți designeri simt că nu sunt apreciați să fii pregătit pentru curse lungi, succesul rar suficient, că merită mai multă recunoștință și vine peste noapte. de obicei e destul de greu să colaborezi cu ei. În realitate munca lor nu e chiar așa de bună Învață din respingere, nu te oftica! pe cât cred ei. Acest lucru nu este cauzat de Doar pentru că cea mai strălucită idee lipsa talentului, ci pentru că aleg o variantă pe care ai avut-o în ultima vreme nu l-a modestă dar sigură, care va fi aprobată, și nu impresionat pe client sau pe șeful tău, nu cea mai bună variantă pe care ar putea să o te bosumfla. Încearcă să îți dai seama dacă livreze. Se tem de respingere și preferă să fie a fost o problemă de prezentare sau dacă www.todaysoftmag.ro | nr. 33/martie, 2015

49


marketing Design vs. Seducție într-adevăr ideea a fost una foarte bună. Cere feedback, de multe ori se întâmplă să nu mai vezi pădurea din cauza copacilor. Apoi asumă-ți responsabilitatea. Nu trebuie să ajungi un simplu executant doar pentru că ai greșit de câteva ori. Persistă până când ideile tale vor fi foarte bune. E foarte ușor să dai vina pe alții în loc să te uiți în oglindă, dar de cele mai multe ori colegii și clienții au intenții bune, așa că profită și învață de la ei.

E despre ea/el nu despre tine Învăță să asculți!

Dar fii sigur că ești confortabil(ă)! Dacă ținuta devine o problemă pentru tine, nici așa nu e bine.

Împunge ursul! Mai devreme sau mai târziu trebuie să riști. Vrei să știi dacă fata/băiatul cu care vorbești e interesat(ă) de tine. Doar pentru că trebuie să fii amabil, nu înseamnă că trebuie să fii de acord cu tot ce vrea clientul. Nu te jena să-i pun întrebări sensibile despre afacerea lui. Dacă nu preiei tu conducerea, fii sigur că el o va face și vei regreta să fii în postura de pasager. Punând întrebări sensibile îți vei da seamna dacă e genul de client cu care ți-ar plăcea să lucrezi.

Pune întrebări, dar nu îți asalta colegii și clienții. Încearcă să creezi o conversație și nu un interogatoriu. Pune întrebări, dar în Fă-o să spună da! același timp lasă impresia că știi despre ce e vorba. Dacă nu emiți E foarte important să obții aprobarea de la persoana cu putere încredere, îți va fi foarte greu să obții aprobare mai târziu. de decizie. Crezi că o fată ar pleca cu tine din club dacă și-ar suna mama și i-ar povesti cât de treabă ești tu și i-ar cere voie să vină Fă-o pe deșteptul ! cu tine? Doar pentru că nu ești expert într-un domeniu nu înseamnă De ce e diferit cu clienții? Să le dai timp să se decidă va duce că ea/el le știe pe toate. Nu știi să dansezi? Nici o problemă, și la implicarea unor oameni care nu au participat la procesul de prefă-te. design și nu știu toate detaliile din spatele deciziilor care au fost Învață de la clienți. Ei vor investi timpul lor și tu poți învăța luate. constant lucruri noi. Dacă tu crezi în soluția prezentată, convinge clientul să aprobe Și poți folosi cunoștințele noi cu următorii tăi clienți. designul și îți va fi recunoscător când va culege rezultatele.

Competiția

Nu fi tipul/tipa drăguț!

Știi situația aceea când vorbești cu o fată și un tip intră în conversație cu ea ca și cum nu ai fi acolo? Ce faci? Ești nesigur? Amenințat? N-ar trebui. Aceasta se aplică și când vine vorba de alți designeri. Doar pentru că la suprafață au mai multă experiență sau portofoliul lor arată mai bine, nu înseamnă că au întotdeauna dreptate și că ar trebui să îți iei jucăriile și să pleci. Nu intra în competiție. Nu fugi. Nu o lua personal, încearcă să te detașezi și lasă munca să vorbească. Adaptează la situație. Fură ideile lor bune și fă-le și mai bune. Dacă vrei să le atingi ego-ul, corectează-le greșelile sau completează-i când ceva le scapă. În curând o să le câștigi respectul și simpatia.

Dacă feedbackul pe care îl primești e “drăguț/ă”, sau “arată fain”, nu-i un semn bun. Munca ta trebuie să fie bestială, grozavă, nu draguță. Fii sigur că conduci procesul și cei implicați înțeleg deciziile pe care le-ai luat.

Într-o competiție pe față nu are nimeni de câștigat.

Uită-te după inel! Noi designerii avem prostul obicei să criticăm orice, fără să știm toate detaliile. De multe ori ne e ușor să acuzăm alți designeri când vedem un design slab, dar nu știm care a fost procesul, ce rezultate se urmăresc sau cine a luat de fapt deciziile. E bine să dai sfaturi, dar fii precaut și nu te arunca fără parașută.

Uită-te în oglindă! Chiar dacă nu vrem să recunoaștem, multă parte din meseria noastră înseamnă experimentare. Adică trebuie să convingem de multe ori clienții să își asume niste riscuri. Pentru aceasta, e nevoie ca clientul să se simtă confortabil, să aibă încredere în tine. Adaptează-te situației și prezintă-te adecvat. Încearcă să nu dai clienților un motiv să fie distrași de la soluția pe care vrei să le-o prezinți.

50

nr. 34/aprilie, 2015 | www.todaysoftmag.ro

Evită exclusivitatea Nu te mulțumi doar cu munca de la firmă. Încearcă să ai proiecte personale. Văzând lucrurile din mai multe perspective te va ajuta să devii un designer mai bun și firma la care lucrezi va avea de câștigat din asta.

Asigură-te că te va ține minte În final munca ta decide daca vei avea parte de încă un proiect. Comunicarea, prezentarea, hainele, toate își au rostul. Dar dacă ce livrezi nu e de calitate, nu vei mai obține “o a doua întâlnire”.



sponsori

powered by


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