Numarul 39 - Septembrie 2015 - Today Software Magazine

Page 1

Nr. 39 • www.todaysoftmag.ro • www.todaysoftmag.com No. 36••Septembrie June 2015 • 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

Agile Humanum Est

Cluj IT Days 2015

BDD marca Cucumber Low latency FIX engine in Java jOOQ, pentru simplificarea integrarii SQL-ului in Java Designul de API - studiu de caz Devino un tester mai bun cu BBST

Confernța SmartWeb 2015 Specialist de marketing online sau agenție de maketing OSM și Telenav văzute prin ochii unui analist de hărți Cum să ne dezvoltăm nivelul personal de fericire


Innovation, entrepreneurship and technologies Venue: Cluj Arena, conference hall, 24-25 November 2015, Cluj-Napoca www.itdays.ro - 2 days access, 80 euro + TVA

Peter Lawrey

Robert Mureșan

Christoph Steindl

Diana Tîrnovan

Vlad Derdeicea

Cristian Philipp

Simona Bonghez

CEO at Higher Frequency Trading

Șerban Țîr

Rareș Florea

Conf. Dr. Mihai Oltean

Tudor Mărghidanu

Vasile Mihali

Andreea Pârvu

Dan Suciu, PhD

Vasile Pop

Radu Vunvulea

Mircea Vădan

Sergiu Damian

CEO Exosyphen

Accesa

CEO Catalysts

Yardi România

Subsign

Essential Training and Consulting

Intel România

Colors in Projects

Arobs

iQuest

November 24

10:00 10:40

Coffee & Registration Opening Remarks Cluj IT Cluster & Ovidiu Mățan (Organizer of IT Days) Vector Watch in the Context of Wearable Fashion Trends Rareș Florea (Vector Watch) Innovation in Product Development and Future of Work Christoph Steindl (CEO Catalysts Software)

Local Product Launches 11:00 11:30 12:00 12:30 13:00

Coffee & Networking Break Beyond reality. Virtual Reality. The future of gaming and information visualization Robert Mureșan (CEO Exosyphen) The Power of Play Simona Bonghez (CEO Colors in projects) Launch of programez.ro Ovidiu Mățan (TSM) and Vlad Derdeicea (subsign) Lunch Break

Java 14:00

15:00

15:30 16:00

14:00 14:30 15:00

jOOQ - an object oriented abstraction interracting with relational databases 15:30 Silviu Dumitrescu (Telenav) Pizza break 16:00

Big Data 16:20 16:50 17:00 17:50

Tudor Mărghidanu (Yardi) Data modeling in Apache Hadoop Tudor Lăpușanu (Telenav) Machine Learning in the age of Big Data Daniel Sârbe (SDL) Networking & wine

3Pillar Global

Endava

clujstartups.com

Software consultant

16:20

Let’s “GamEventify”! Adina Grigoriu (Color in projects) (Higher Frequency Trading) Dan Suciu (3Pillar Global) Building a Strong Employer Brand through Organizational Culture Cristian Philipp (Essential Training and Consulting) Alexandru Bolboacă (Mozaic Works) Pizza break

Automated testing

09:00 09:30 10:10 10:40 11:10

Coffee & Registration Driving innovation –TechLeague Diana Tîrnovan (Accesa) Growth Hacking and Lean Canvas Christoph Steindl (CEO Catalyst Software) Șerban Țîr (CTO Gemini Solutions) Coffee & Networking Break

09:00 09:30

Coffee & Registration Sergiu Damian (iQuarc)

10:10

What is Reactive Programming and why you should care Robert Cristian (3Pillar Global) Coming soon Coffee & Networking Break

10:40 11:10

.NET

Startups & Entrepreneurship 11:30

11:30

Radu Vunvulea (iQuest)

12:00 12:30

Seedfortech Mircea Vădan (Fortech) Coming soon Local startup pitches

12:00 12:30

Coming soon Coming soon

13:00

Lunch Break

13:00

Lunch Break

Research 14:00

Hands on Lab 14:00

Low Latency in Java 8 Peter Lawrey (Higher Frequency Trading)

14:30

Using artificial intelligence for automatizing software development Răzvan Florian (Romanian Institute of Science and Technology) Coming soon

15:00

Coming soon

15:00

15:30 16:00

Coming soon Pizza break

15:30 16:00

Creating things with a 3D printer Mihai Oltean (Babeș-Bolyai University) Coming soon Pizza break

HR & Management

16:50

Selenium WebDriver patterns for maintanability Vasile Pop (Intel) Coming soon

16:20 16:50

17:00 17:50

Coming soon Networking & wine

17:20 17:50

Partners

Software Architecture

Startups & Entrepreneurship

Management

Work with Hundreds of Hot Terabytes in JVMs Peter Lawrey (Higher Frequency Trading) Be Fast, Be Off-JVM, Be Chronicle-Queue Vasile Mihali (AROBS)

Babeș Bolyai University

November 25

Trends & Leadership Sessions 09:00 09:30

Vector Watch

CTO Gemini Foundry

Andreea Pârvu (Endava) E usor să integrezi noii tineri în firme IT? Dan Ionescu (Danis) Coming soon Networking & wine

Hands on Lab 16:20

Coming soon

16:50 17:00 17:50

Coming soon Coming soon Networking & wine

Organiser


6 Cluj IT Days 2015 Ovidiu Măţan

8 SmartWeb conference 2015 Alexandru Botez

9 Conferința danubiană JCI - Smart Cities Stelian Burduhos

12 Agile Humanum Est Dan Suciu

15 Designul de API studiu de caz Andrada Demian

18 Low latency FIX engine in Java Peter Lawrey

20 jOOQ, pentru simplificarea integrării SQL-ului în Java Silviu Dumitrescu și Diana Bălan

22 OSM și Telenav văzute prin ochii unui analist de hărți Florin Badita, Mihai Iepure și Gabriela Sinka

24 BDD marca Cucumber Indrie Sergiu

28 Devino un tester mai bun cu BBST Monica Rațiu

30 Codul pentru un spatiu plin de entuziasm Alexandra Banu

32 Specialist de marketing online sau agenție de maketing Călin Biriș

34 Cum să ne dezvoltăm nivelul personal de fericire Cristina Vâjâean

36 Taxe PFA 2016 – varianta aprobată Ioana Varga


editorial

Ș

Ovidiu Măţan

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

coala a început de două săptămâni ! Recent s-a deschis și noul an universitar! O dată cu ele, inevitabil în mass-media răsună același cor de lamentări legate de starea precară a învățământului românesc. Sperăm ca acest cor să nu fie asemenea celor din tragediile grecești antice și să cânte despre destinul unei condamnări perpetue a învățământului la degradare și derizoriu. Pentru a dovedi importanța educației în progresul societății este suficient să privim puțin doar către sectorul IT. Fără universități de prestigiu, industria de IT nu ar fi putut ajunge la nivelul la care este astăzi în marile orașe din România. De altfel, orice companie de IT și nu numai, care dorește să își deschidă un sediu într-un oraș, se va interesa de nivelul învățământului sau despre universitățile existente în comunitatea respectivă. Raportându-ne la un ecosistem de referință, precum Silicon Valey, alcătuit din companii/startup-uri, investitori și universități, observăm că acestea din urmă sunt un ingredient obligatoriu în crearea unei industrii competitive. Dacă finanțarea startup-urilor și găsirea investitorilor începe să fie un lucru firesc asumat în mod conștient și responsabil, finanțarea universităților nu depinde doar de ecosistemul local, ci și de contextul social-politic. Să menționăm doar acele cazuri când au fost închise secții întregi deoarece profesorul s-a dus la o companie privată, sau când studenții sunt obligați să parcurgă cursuri învechite și total inactuale. Care sunt soluțiile? Sperăm să nu fie doar o întrebare retorică și să găsim un răspuns consistent dacă dorim creșterea sectorului IT. O primă soluție la această problemă poate fi organizarea în 24-25 noiembrie de către Today Software Magazine a celei de-a treia ediții a Cluj IT Days, care se dorește a fi un bun prilej de învățare și de sudare a comunității IT clujene. Mai multe detalii găsiți în articol destinat acestui subiect. În ceea ce privește conținutul acestui număr, semnalăm articolul lui Dan Suciu, Agile Humanum Est, cu un titlu interesant care parafrazează ludic un celebru dicton în latină- Errare humanum est… Continuăm cu Designul de API - studiu de caz, care dezbate regulile de definire a unui API și îl exemplifică cu cel folosit în cadrul Betfair. Performanța în Java este dezbătută în Low latency FIX engine in Java, un engine creat de Peter Lawrey, invitat de altfel și la Cluj IT Days. Din păcate articolul a fost prea tehnic pentru o traducere utilă în română și s-a decis să îl lăsăm în engleză pentru a nu-i pierde din precizia științifică. Tot în sfera Java, jOOQ, pentru simplificarea integrării SQL-ului în Java, propune o abstracție construită pe modelele relațional și obiect orientat (ORM) ale bazelor de date. OpenStreetMap este un proiect crowd-sourced utlizat de Telenav ca bază în produsele oferite, dar mai multe detalii puteți găsi în articolul OSM și Telenav văzute prin ochii unui analist de hărți. În continuare vă propunem un tool de testare: Cucumber care este bazat pe conceptul de Behaviour Driven Design. La final, vă recomandăm articolul despre ce înseamnă PFA în 2016.

Ovidiu Măţan

Fondator Today Software Magazine

4

nr. 39/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 Traducător: Roxana Elena roxana.elena@todaysoftmag.com Reviewer: Tavi Bolog tavi.bolog@todaysoftmag.com Contabil : Delia Mircea delia.mircea@todaysoftmag.com Programator junior: Alexandru Diniș alexandru.dinis@todaysoftmag.com Marketing specialist și tehnoredactor: Ana-Maria Bivol anamaria.bivol@todaysoftmag.com Tipar realizat de Daisler Print House Produs de

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

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

Lista autorilor Ovidiu Măţan ovidiu.matan@todaysoftmag.com

Florin Badita florin.badita@telenav.com

Editor-in-chief Today Software Magazine

Software developer @ Telenav

Alexandru Botez alexandru.botez@geminisols.ro

Mihai Iepure mihai.iepure@telenav.com

Web Developer @ Gemini Solutions

Stelian Burduhos stelian.burduhos@gmail.com

Gabriela Sinka gabriela.sinka@telenav.com

Director @ Danube Conference Membru @ JCI Cluj

Map analyst @ Telenav

Dan Suciu dan.suciu@3pillarglobal.com

Sergiu Indrie sergiu.indrie@iquestgroup.com

Director of Delivery @ 3Pillar Global

Senior Software Engineer @ iQuest Group

Andrada Demian andrada.demian@betfair.com

Monica Rațiu monica.ratiu@altom.ro

Developer @ Betfair

Marketing Specialist @ Altom

Peter Lawrey peter.lawrey@ highfrequencytrading.com

Alexandra Banu alexandra.banu@cos.ro

CEO @ Higher Frequency Trading Ltd

Călin Biriș calin.biris@loopaa.ro

Engineer manager @Telenav

Digital Director @ Loopaa

Java developer @ Telenav

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

Marketing & PR Responsible @ COS

Silviu Dumitrescu silviu.dumitrescu@accesa.eu

Diana Bălan diana.balan@accesa.eu

Copyright Today Software Magazine

Software developer @ Telenav

Cristina Vâjâean cristina.vajaean@happy-employees.eu Research Specialist @ Azimut Happy Employees

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

www.todaysoftmag.ro www.todaysoftmag.com

www.todaysoftmag.ro | nr. 39/septembrie, 2015

5


eveniment

Cluj IT Days 2015

C

luj IT Days ajuns anul acesta la cea de-a treia ediție, reunește comunitatea de IT din Transilvania în jurul unei pasiuni comune: dezvoltarea produselor software sau hardware. Dacă în 2014 tema de referință în cadrul secțiunii de leadership a fost trecerea de la outsourcing la produs, anul acesta avem ca temă lansarea de produse românești. De aceea, nu întâmplător, evenimentul se va deschide cu o serie de prezentări subordonate acestei teme. Sperăm să vă suscităm interesul prin enumerarea aspectelor esențiale ale acestor prezentări: • Vector Watch – unul dintre cele mai ambițioase produse românești, smartwatch-ul românesc, o apariție inedită pe piața românească. • Un pr i m d e mo d e z volt at p e HTC Vice de către studioul de jocuri Exosyphen. În măsura în care vom primi aprobarea de la HTC, vom avea un stand în care utilizatorii vor putea testa realitatea virtuală. • Primul joc de management românesc: PM Galaxy, realizat de Colors in projects. O introducere a conceptului de joc în project management. • Lansarea programez.ro – ultima inițiativă Today Software Magazine, concepută ca o provocare adresată tuturor programatorilor.Vlad Derdeicea de la Subsign este invitatul nostru, care va vorbi despre cum a fost creat vizual întregul concept. • Valorificarea potențialului creativ din cadrul unei firme precum și importanța modului de lucru vor fi prezentate de către Christoph Steindl, CEO Catalysts Software. Pauzei îi va urma deschiderea a două secțiuni cu subiecte tehnice, management sau startup-uri, care se vor defășura în paralel oferindu-le participanților ocazia de a putea alege între subiecte diferite. În rândurile următoare, vom expune câteva informații de bază legate de aceste secțiuni.

Java

workshop-ului centrat asupra acestui concept din cadrul Cluj IT Days. Următoarea prezentare va fi susținută de Dan Suciu pe care îl cunoașteți de la edițiile anterioare a Cluj IT Days și de asemenea din articolele publicate în Today Software Magazine. Pasiunea sa pentru programare și metodologiile Agile este binecunoscută, iar prezentarea sa va demonstra cu siguranță aceasta. Cristian Philipp va veni din Timișoara pentru a vorbi despre ceea ce înseamnă construirea unui brand de companie puternic folosind cultura organizațională. La finalul acestei secțiuni, Alexandru Boloboacă ne va împărtăși din experiența sa despre software craftmanship.

Big Data

Un subiect la modă în zilele acestea. Nu puteam să nu avem o secțiune orientată spre acest subiect. La fel ca și anul trecut, Tudor Mărghidanu va prezenta acest subiect din perspectiva unui software architect. Urmează Tudor Lăpușanu cu modelarea datelor în Apache Hadoop, Management pentru ca la final Daniel Sârbe va vorbi În acest domeniu, veți avea ocazia să despre machine learning și conexiunea cu îi întâlniți pe cei care au fost aproape și au big data. susținut revista TSM de-a lungul timpului. Adina Grogoriu, colega Simonei Bonghez, Testare pe care o știți probabil de la trainingurile Vom analiza Selenium Webdriver din de PMP va vorbi despre “GamEventify”!, perspectiva lui Vasile Pop (Vic). Restul adăugarea conceptului de gamification slot-urilor sunt încă deschise, orice propuîn conferințe și evenimente. Un concept nere va fi luată în considerare. pe care îl veți putea explora în cadrul Încheiem astfel prima zi a evenimentu1 h t t p s : / / b l o g s . o r a c l e . c o m / j a v a / e n t r y / lui cu o sesiune de socializare și un pahar new_java_champion_peter_lawrey de vin. 2 http://vanillajava.blogspot.ro

Începem această secțiune cu prezentarea lui Peter Lawrey, invitatul special

6

și al acestei ediții. El este în topul Stack Overflow cu peste 11,000 răspunsuri, iar anul acesta a fost desemnat Java Champion de către Oracle1. A publicat peste 250 de articole pe blogul său Vanila Java2 unde a avut până acum peste trei milioane de vizualizări. Compania sa, Chronicle Software3, dezvoltă soluții de performanță înaltă pentru sectorul bancar, librăriile dezvoltate fiind disponibile pe GitHub4. Prima sa prezentare de la Cluj IT Days: Work with Hundreds of Hot Terabytes in JVMs, va fi de asemenea susținută anul acesta la Java One în San Francisco. Pentru cei interesați de performanța în Java, Peter va susține un workshop separat. Mai multe detalii în capitolul despre workshop-uri. Continuăm cu prezentarea lui Vasile Mihali: Be Fast, Be O-JVM, Be ChronicleQueue, care prezintă o folosire practică a librăriilor dezvoltate tot de Peter Lawrey. În finalul acestei secțiuni, Silviu Dumitrescu, un vechi colaborator al revistei va vorbi despre JOOQ – o abstractizare obiectală de interacțiune cu bazele de date relaționare.

3 http://chronicle.software 4 https://github.com/OpenHFT

nr. 39/septembrie, 2015 | www.todaysoftmag.ro


programare Startup-uri și antreprenoriat Zona de startup-uri românești va expune două programe diferite ca abordare, dar care sprijină inițiativele locale și anume Seedfortech și TechLeague. De asemenea, Șerban Țîr de la CTO Gemini, ne va vorbi despre startup-uri și programe de accelerare bazate pe experiența sa zilnică din acest domeniu. Christoph Steindl, CEO Catalyst, va aborda dintr-o perspectivă practică Growth Hacking și Lean Canvas. La finalul acestei secțiuni, vom avea o sesiune de startup pitch-uri în cadrul căreia vom încerca să avem pe scenă cele mai interesante startup-uri locale.

Cercetare Prin această secțiune încercăm să aducem în prim plan ultimele realizări din acest domeniu și totodată să facem o apropiere între lumea academică și cea a mediului IT local. Răzvan Florian va expune un studiu realizat despre posibilitatea de generare a software-ului automat. Este o abordare inedită iar Florian speră ca programatorii prezenți să nu se simtă ofensați. O altă prezentare va fi despre autonomous driving.

Hands On Lab După succesul de anul trecut a prezentării imprimantei 3D realizată de prof. Mihai Oltean, am decis să realizăm o secțiune Hands On Lab în care prezentările să fie mai aproape de spectatori. Se va putea înțelege mai bine care sunt etapele și exemple de scris cod pentru imprimarea unui obiect 3D. Peter Lawrey va fi din nou prezent mai aproape de public cu prezentarea Low

TODAY SOFTWARE MAGAZINE Latency in Java 8 în care vom învăța cum putem folosi facilitățile limbajului Java 8 pentru a scrie mai ușor aplicații low latency sau cum putem face tunning la garbage collector în cazul folosirii construcțiilor Lambda. Tot în această secțiune, vom putea învăța cum se poate programa un robot industrial. Mai multe detalii vor fi adăugate în curând în program.

Motivație pentru participare IT Days se dorește a fi o celebrare festivă a activității întregului an împreună cu întreaga comunitate IT clujeană, dat fiind că revista Today Software Magazine organizează evenimente lunare. Dacă vrei să fii la curent cu ultimele tendințe software ale comunității locale din secțiunile de mai sus, atunci evenimentul îți răspunde cu siguranță nevoilor tale.La fel ca și în anii trecuți, vom avea o atmosferă prietenoasă și prezentări de un nivel profesional ridicat. În pauze, veți avea ocazia să vedeți în standurile prezente produse și inițiative inedite a firmelor locale. Majoritatea participanților vor fi programatori urmați de manageri și tester-i. De altfel ponderea domeniului ales pentru prezentări urmează acest trend.

folosirea structurilor Lambda din Java 8 la limită și dincolo de aceasta, folosirea Chronicle Engine hands-on . Al doilea workshop, Să ne distrăm și să învățăm – Project Management folosind PM Galaxy Boardgame, reprezintă o introducere în project management. Jocul va ghida participanții prin toate etapele de dezvoltare a unui proiect: inițializare, planificare, execuție, monitorizare și control, finalizare. Participanții vor avea parte de capcane, provocări și vor experimenta best practice-uri cu ajutorul jocului dezvoltat special pentru acest workshop: PM Galaxy. Workshop-ul va fi susținut de Simona Bonghez. Mai multe detalii puteți vedea pe www.itdays.ro

Concluzie Sper că v-am convins să participați și în acest an la Cluj IT Days. Vouă, cititorilor noștri fideli, vă oferim 15% reducere din prețul unul bilet afișat pe site prin folosirea codului promoțional: TSM_ITDAYS_2015 valabil până în 15 Octombrie.

Workshop-uri Java Performance La fel ca și în anii trecuți, cu o zi înainte de conferință, în 23 noiembrie, organizăm două workshop-uri. Unul este workshopul de Java Performance susținut de Peter Lawrey unde participanții vor avea ocazia să descopere: un review avansat asupra modului în care JVM folosește memoria,

Ovidiu Măţan

ovidiu.matan@todaysoftmag.com Editor-in-chief @ Today Software Magazine Organizator @ Cluj IT Days

www.todaysoftmag.ro | nr. 39/septembrie, 2015

7


eveniment

SMARTWEB CONFERENCE 2015

P

e 21 si 22 septembrie a avut loc la JW Marriott Bucharest Grand Hotel cea de-a 3-a ediție a SmartWeb Conference, cel mai important eveniment est-european destinat web developer-ilor și designerilor. După succesul primelor două ediții, Evensys și-a propus în acest an să organizeze opt conferințe de specialitate la nivel internațional, în care participanții să descopere cele mai noi tendințe în web și mobile development și să întâlnească colegi și oameni mari din industria web. P r i nt re nu m e l e m a r i p e c a re participanții au avut ocazia să îi asculte și întâlnească se numără: Bruce Lawson(Opera), Petro Salema(Gentics), R o y To m e i j ( A d v a n c e d S A S S ) , Stephen Hay(Zero Interface), Tobias Ahlin(Lookback, trecut Github si Spotify), Soldedad Penades(Mozilla), Heydon Pickering(Neontribe), Andy Hume( Twitter) și Christian Heilmann(Microsoft). În prima zi, participanții au putut participa la un workshop avansat despre Sass CSS alături de Roy Tomeij, iar în cea de-a doua zi s-au desfășurat cele opt conferințe. CSS, Responsive Web Design, HTML5 & CSS3 și JavaScript au reprezentat domeniile principale abordate în conferințe. Ziua a doua a fost începută de Petro Salema, care ne-a ridicat niște semne de întrebare asupra cantității de informație pe care o oferim web-ului și asupra modului cum această informație este analizată și folosită. Alte subiecte pe care le-a abordat au fost UX design și cum tendința dezvoltării aplicațiilor web a progresat de la desktop first, la mobile first, la predicative backend first în momentul de față. După el a urmat Roy Tomeij, care a demonstrat în direct cât de simplu se pot

face lucruri avansate folosind Sass CSS. Ideea de simplitate a fost continuată și în următoarea conferință a lui Stephen Hay, care este de părere ca deseori stricăm lucrurile în faza de construcție din cauza complexității inutile, și a prezentat principalele motive despre cum și de ce le complicăm. Tobias Ahlin a contribuit cu o prezentare despre animațiile CSS, în care a dat câteva sfaturi și idei în legătură cu folosirea și performanța acestora. A doua parte a zilei a fost deschisă de Soledad Penades cu o prezentare despre Web Audio API, axată pe modul cum aceasta poate spori semnificativ performanța aplicației și cum ne oferă posibilitatea să construim unelte sofisticate și eficiente cu puțin efort. Heydon Pickering a expus și el niște idei interesante în conferința sa despre prototipizarea designului pe hârtie. El consideră că este esențial ca designul pentru web să înceapă pe hârtie, oferind ocazia ca toată echipa (fie designer, fie developer) să își poate spune opinia. În penultima conferință a zilei Andy Hume a vorbit despre cât de importantă este viteza de încărcare a unui website, și

cât de mult afectează aceasta experiența utilizatorului. Andy a mai prezentat care sunt principalele motive care cauzează această problemă precum și cum le putem evita. Ziua a fost încheiată de Christian Heilmann, care a avut probabil cea mai captivantă prezentare a zilei. El a vorbit despre cum ne facem viața mai grea cerând lucruri noi în loc să folosim ce există deja, sau scriind cod groaznic și dând vina pe alți oameni sau mediu pentru asta. Per ansamblu a fost un eveniment foarte reușit cu speakeri de excepție și amuzanți. Recomand tuturor celor care nu au participat să se uite măcar la conferința lui Christian Heilmann - “The wheel is spinning, but the hamster is dead” care se găsește online. “Oamenii ar trebui să aibă o experiență îngrozitoare pe browserele groaznice, pentru că așa au ocazia de a trece la un browser bun.” este doar unul din citatele amuzante din cadrul acestei conferințe pe care nu îl voi uita. Cu siguranță nu voi rata nici următoarea ediție!

Alexandru Botez

alexandru.botez@geminisols.ro Web Developer @ Gemini Solutions

8

nr. 39/septembrie, 2015 | www.todaysoftmag.ro


eveniment

Conferința danubiană JCI - Smart Cities

D

ezvoltarea orașelor atât de mari precum Cluj-Napoca, București, Constanța sau Timișoara nu mai constă numai în infrastructura șoselelor, clădiri noi și malluri mai mari. Noii muncitori nu mai sunt angajații din sectorul de construcții, ci tinerii programatori care lucrează ”de la 9 la 5” în companiile IT. Cu fiecare aplicație care controlează transportul urban și fiecare software care permite plăți online, ei modelează viitorul fiecărui oraș. În timp ce orașe ca Viena au deja o strategie cadru pentru un oraș inteligent (”Smart City Framework Strategy”), în România conceptul este încă la început. Stelian Burduhos stelian.burduhos@gmail.com Director @ Danube Conference Membru @ JCI Cluj

Acesta este motivul principal pentru care Junior Chamber International (JCI) își dedică convenția anuală și de asemenea conferința sa danubiană dezvoltării orașelor. Pe perioada celor patru zile ale JCI Danube Conference 1 și ale Convenției Naționale Anuale JCI 2015, găzduite la Cluj-Napoca între 15 și 18 octombrie, participanții vor crea un cadru internațional – o bază comună care va servi drept model de bune practici pentru comunitățile noastre în următorii 20 – 50 de ani.

Totul a început cu o aplicație O aplicație care va schimba modul în care găsim locuri de parcare, o alta care ne va permite să plătim pentru serviciile de parcare prin SMS, câteva care fac transportul urban să fie mult mai facil și mai mult software care controlează iluminatul stradal. Și acesta este doar începutul. Cluj-Napoca, al doilea 1 http://www.jciromania.ro/danubeconference/

oraș din România și inima Transilvaniei, se transformă practic într-un ”Smart City” pe nesimțite. Dar conceptul din spatele ”Smart Cities” este mult mai complex și, de aici înainte, Cluj-Napoca și fiecare oraș din România și Europa are nevoie de un plan pentru viitor. Michael Haupl, primarul Vienei, a pus totul în perspectivă încă din 2011, când orașul și-a definit un ”traseu” pentru următorii 35 de ani. ”Un oraș inteligent (Smart City) este un oraș care face față provocărilor ridicate de consumul de energie redus cuplat cu cerințele în creștere. Schimbările necesare în energie, transport și sectorul de construcții, multe dintre care sunt fundamentale pentru acest proces, nu pot fi înfăptuite peste noapte.” Avem o propunere îndrăzneață pentru voi: dezbateți cu noi, cu tinerii antreprenori, cu companiile care inovează în IT și cu autoritățile locale care sunt deja pioniere în acest domeniu, direcțiile în care orașele se vor dezvolta în anii care vor veni. Toate ideile

www.todaysoftmag.ro | nr. 39/septembrie, 2015

9


eveniment vor fi prezentate și analizate în Forumul Smart Cities. Cu ajutorul unora dintre cele 300 de companii IT&C cu baza în oraș, noi intenționăm să ducem dezbaterea mai departe, spre o abordare mai practică. Forumul Smart Cities va fi susținut de Smart & Innovative Expo. Timp de două zile, reprezentanții comunităților locale din Germania, Austria, Ungaria, Serbia, Croația, România și Moldova, vor avea oportunitatea să întâlnească oameni care dezvoltă soluții pentru orașe inteligente (”smart cities”), de la aplicații la sisteme de mediu complet funcționale și, nu în ultimul rând, vor avea ocazia să viziteze cele mai mari companii IT din acest domeniu din Cluj-Napoca. Această abordare va genera soluții reale pentru viitor și, cu ajutorul speakerilor naționali și internaționali, viziunea fiecărui participant și workshopurile de la finalul celor patru zile, se va crea o bază comună pentru dezvoltarea orașelor viitorului. Suntem mândri să anunțăm că SHARE Federation, principalul organizator al Capitalei Tineretului European, titlu obținut de Cluj-Napoca pentru 2015, sprijină JCI Danube Conference și Annual National JCI Convention 2015.

”Misiunea” din spatele JCI JCI este o organizație nonprofit a cetățenilor tineri și activi, cu vârste cuprinse între 18 și 40 de ani, care sunt implicați și devotați creării unui mod mai bun de viață pentru comunitățile lor. În 2015, organizația își serbează aniversarea de 100 de ani la nivel național și a 12-a în România. Toți membrii au curajul să abordeze provocările critice ale vremurilor noastre și să găsească soluții specifice problemelor locale. De aceea, noi considerăm că modul cel mai bun de a celebra 100 de

10

Conferința danubiană JCI - Smart Cities

ani de existență este să acționăm și să ne construim viitorul. JCI România reunește nouă organizații locale din întreaga țară și are deja 300 de membri și trei grupuri de acțiune. Devotamentul și experiența tuturor membrilor săi, a făcut din JCI România o voce importantă în Europa centrală și de est, într-un timp scurt. Elocvente sunt în acest sens declarațiile Stelian Burduhos și Florin Somodi. În acest an am dorit să aducem un eveniment internațional JCI la ClujNapoca. Este anul Capitalei Tineretului European și vă invităm să vă alăturați călătoriei de patru zile a Conferinței JCI Danube și Conferinței Naționale Anuale JCI 2015. Ne dorim să dezvoltăm cu ajutorul vostru noi colaborări între orașe, astfel încât să se creeze soluții reale și eficiente pentru anii

nr. 39/septembrie, 2015 | www.todaysoftmag.ro

următori. În principiu, vrem să conturăm comunitățile viitorului. – Stelian Burduhos, COC Director Danube Conference. Prin acest eveniment dublu, dorim să aducem împreună autoritățile locale, comunitatea și tinerii antreprenori, astfel încât să creăm un spațiu public și deschis pentru inovare. Acesta este motivul pentru care am hotărât să profităm de această oportunitate unică și să organizăm JCI Danube Conference și Annual National JCI Conference 2015. – Florin Somodi, COC Director National Convention.


TODAY SOFTWARE MAGAZINE

Comunităţi IT

N

e bucurăm de faptul că calendarul nostru a devenit neîncăpător. După o perioadă de relativă inactivitate în lunile de vară comunitatea de IT revine cu o serie de propuneri interesante la care vă invităm să participați.

Transylvania Java User Group Comunitate dedicată tehnologiilor Java. Website: www.transylvania-jug.org Data înfiinţării: 15.05.2008 / Nr. Membri: 610 / 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: 2424/Nr. Evenimente: 32 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

Calendar Septembrie 29 (Cluj) Lansarea numărului 39 al Today Software Magazine www.todaysoftmag.ro Septembrie 30 (Cluj) 5th BigData/DataScience­meetup meetup.com/Big-Data-Data-ScienceMeetup-Cluj-Napoca/events/225393112/ Octombrie 1 (Târgu-Mureș) Lansarea numărului 39 al Today Software Magazine www.todaysoftmag.ro Octombrie 1 (Cluj) Using Protractor and Appium to automate Hybrid apps meetup.com/Cluj-JS/events/224608770/ Octombrie 2 (Cluj) StartUs Connect: Cluj 2.0 facebook.com/events/931928763547194/ Octombrie 3 (Cluj) Coach retreat-facilitated­­by Dov Tsal Sela, AgileCoach&FunS­­heriff meetup.com/The-Cluj-Napoca-Agile-Software -Meetup-Group/events/225419940/ Octombrie 7-8 (București) Internet & Mobile World www.imworld.ro/ Octombrie 7 (Cluj) Fresh start - PHP Cluj meetup.com/PHP-Cluj/events/225555288/ Octombrie 14 (Cluj) The Power of Storytelling − Cluj Edition thepowerofstorytelling.org/cluj/ Octombrie 15-18 (Cluj) JCI Danube Conference & JCI Romania National Convention 2015 jciromania.ro/danubeconference//

www.todaysoftmag.ro | nr. 39/septembrie, 2015

11


management

Agile Humanum Est

E

ste curios faptul că azi, la o căutare rapidă a cuvântului Agile pe internet, primești două categorii de răspunsuri: o primă categorie ce conține explicații cu privire la ce este și cum funcționează Agile și o a doua categorie care argumentează de ce Agile nu funcționează.

Dan Suciu dan.suciu@3pillarglobal.com Director of Delivery @ 3Pillar Global

Există în mod evident două “tabere”, una care se oferă să te introducă în tainele Agile și cealaltă, mai redusă numeric dar care se face tot mai tare auzită, care consideră că practicile Agile sunt nocive și pot afecta negativ dezvoltarea de aplicații software.

În cele ce urmează voi da câteva exemple în sprijinul afirmației mele, încheind cu câteva sfaturi pentru ce ar fi bine de făcut atunci când lucrurile nu funcționează așa cum ne dorim într-un proiect.

Personal consider valorile și principiile Agile ca fiind foarte naturale, firești. De fiecare dată am considerat că o bună parte a practicilor Agile sunt de bun-simț și că ele se potrivesc ca o mănușă echipelor de dezvoltare a proiectelor software. Desigur că argumente de acest gen (firesc, natural, bun-simț) nu au darul să satisfacă o persoană obișnuită cu demonstrațiile specifice științelor exacte. Prin urmare am început să investighez mai îndeaproape beneficiile aduse de Agile echipelor de dezvoltare.

Există o serie de situații de care ne-am lovit cu toții în proiectele pe care am lucrat, situații care transcend tehnologiile utilizate sau gradul de experiență. Unul dintre aceste exemple este nivelul efortului pe care o echipă îl depune atunci când trebuie să ducă la bun sfârșit un lucru și care pare să respecte legea lui Paretto, cunoscută și sub numele de regula 20/80. Mai precis se pare că echipa depune un efort (aproximativ) constant în 80% din timpul pe care îl are la dispoziție. În general, după ce s-a scurs această perioadă de timp, echipa conștientizează uneori brutal că nu este posibil să finalizeze ceea ce și-a propus în timpul alocat și nivelul efortului crește considerabil (Figura 1). Se pare că acest șablon se repetă iar și iar în diverse contexte, pentru echipe de diverse dimensiuni

Concluzia la care am ajuns este aceea ca paradigma Agile adaptează procesele la natura umană, acest lucru venind în contrast cu abordarea clasică din management care impune adaptarea membrilor echipei la un proces particular de dezvoltare.

12

nr. 39/2015, www.todaysoftmag.ro

Natura umană și dezvoltarea soft-ului


TODAY SOFTWARE MAGAZINE și configurații, dar care au de realizat o activitate creativă. Și dezvoltarea unei aplicații software este o activitate creativă. Una dintre abordările acestei situații este căutarea unei metode prin care echipa să lucreze constant pe întreaga durată a timpului avut la dispoziție, însă se pare că acest lucru nu este în natura umană (v. legea lui Parkinson - http://www.economist. com/node/14116121)

Figura 1. Distribuția efortului unei echipe în procesul de dezvoltare

Pe de altă parte multe din metodologiile Agile ne propun o dezvoltare iterativă, unde fiecare dintre iterații durează între 2-4 săptămâni, iar la finalul acestora trebuie să rezulte o aplicație funcțională. Deși această abordare nu schimbă regula distribuției efortului, spre finalul unei iterații, acesta este mult mai redus decât în cazul în care perioada de dezvoltare ar fi fost una de trei luni, de exemplu, făcând astfel procesul de producție mai lin, cu nivele minime și maxime ale efortului mai apropiate.

Figura 2. Distribuția efortului folosind iterații succesive

Rămânând în sfera gestionării timpului, de data aceasta la nivel personal, merită menționat aici un alt obicei uman considerat până la un anumit grad normal, numit procrastinare. Procrastinarea reprezintă un comportament caracterizat prin amânarea nejustificată a acțiunilor sau a sarcinilor pentru mai târziu și care este privit ca o reacție la anxietatea asociată cu începerea sau finalizarea unei sarcini sau a unei decizii. Acest lucru pare a se regăsi întocmai în strategia “last responsible moment”, întâlnită în special în metodologiile Scrum și Lean, care presupune amânarea unor decizii ireversibile până în momentul în care costul neluării deciziei este mai mare decât costul adoptării acesteia. Aceasta strategie este considerată benefică deoarece eficientizează procesul de dezvoltare, el nefiind blocat de luarea unor decizii care pot fi luate mai târziu. Așa cum se subliniază în multe lucrări, strategia “last responsible moment” nu trebuie să fie o justificare a procrastinării, ci mai degrabă o modalitate de eliminare a ei.

Estimarea task-urilor pe care le avem de realizat reprezintă, din punctul meu de vedere, un alt exemplu potrivit pentru a demonstra faptul ca paradigma Agile e orientată pe extragerea lucrurilor bune din acele comportamente pe care, în alt context, le consideram defecte. Așa cum scriam într-unul din primele mele articole din Today Software Magazine, “Particularitățile proiectelor informatice”, activitatea de dezvoltare a softului este una creativă neexistând un nomenclator care să precizeze care este timpul uzual necesar pentru implementarea unei anumite funcționalități. Unul dintre lucrurile pe care le-am observat coordonând diverse echipe angajate în dezvoltarea de aplicații software este acela că motivațiile și percepțiile pe baza cărora se face o estimare diferă foarte mult de la o persoană la alta. Pe de altă parte am constatat că acuratețea estimărilor nu se îmbunătățește foarte mult odată cu creșterea experienței, acest lucru datorându-se în special complexității caracteristice proiectelor software. Ce îmbunătățiri aduce Agile în estimare? În primul rând, estimarea colectivă. În loc ca estimarea să fie făcută individual, de fiecare persoană pentru task-urile proprii, întreaga echipă participă la estimarea tuturor task-urilor. Acest lucru reduce substanțial erorile de estimare și face ca diferențele de percepție să fie discutate și lămurite în grup. În plus, mutarea atenției de la estimarea timpului la estimarea efortului necesar folosindu-se un sistem particular de punctare, duce la obținerea unei viteze de estimare mărite fără a se reduce acuratețea estimării. Prin aceste abordări experiența în domeniu este mult mai bine valorificată și efortul de estimare mult redus. Întorcându-mă la ideea amintită anterior, și anume că activitatea de dezvoltare a softului este una creativă, nu pot să nu fac o corelație între felul în care este dezvoltată o aplicație și cum sunt realizate multe din lucrările artistice. După cum se poate observa din Figura 3 unde este prezentată o pictură nefinalizată, pictorul nu a împărțit pânza în 6 sau 9 zone distincte pe care să le picteze succesiv (carecteristic abordării plan-driven, unde se presupune că cel care îndeplinește o activitate are foarte clar și detaliat în minte felul în care rezultatul acestei activități trebuie să arate) ci a schițat o primă versiune a întregului tablou, pe care a îmbunătățit-o ulterior, ajungând în final să folosească culori pentru a finaliza (caracteristic abordării evolutive, ce presupune că produsul final este realizat printr-o serie de versiuni îmbunătățite succesiv). Observați că și în această fază, departe de a fi terminată, avem o idee despre cum va arăta tabloul în totalitatea lui și, foarte important, acesta este încă într-o fază în care se pot face îmbunătățiri substanțiale cu un efort redus. În toate metodologiile Agile avem suport pentru abordarea evolutivă a creării produselor, ciclul de dezvoltare impus are pe lângă calitatea de a fi iterativ și pe aceea de a fi incremental. Astfel activitatea de dezvoltare de soft este susținută la nivel de metodologie, fiind abordată așa cum sunt abordate majoritatea activităților creative.

www.todaysoftmag.ro | nr. 39/septembrie, 2015

13


management Agile Humanum Est să diminueze efectele negative ale unui comportament uman obișnuit. Procesele sunt astfel ajustate încât să nu dea prea des ocazia echipei de proiect să gândească prea complicat. Ar mai fi multe alte exemple, de la structura și importanța dată ședințelor retrospective în Agile (“omul din greșeli învață”) până la ideea de user story, care are la bază faptul că atenția și capacitatea de înțelegere a oamenilor sunt mult influențate de modul în care este prezentat un lucru. Dar acestea vor face probabil obiectul unui viitor articol. Ce este mai important de înțeles acum este ce am putea face atunci...

...când lucrurile nu merg

Figura 3. Paul Gauguin – Tahitieni odihnindu-se (1891, nefinalizat)

Un ultim exemplu pe care aș dori să îl dau este cel legat de fascinația pe care o avem pentru complexitate. În multe situații îmbrățișăm soluțiile mai complicate la problemele pe care le avem, și atunci când nu o facem din cauza lipsei de timp sau a altor resurse, le apreciem oricum mai mult, fiind deseori nemulțumiți de soluția simplă pe care am ales-o în loc. Această fascinație pentru complexitate se regăsește deseori și în activitatea de dezvoltare a proiectelor software: deseori preferăm implementarea unui framework care să rezolve mult mai mult decât problema pe care o aveam de rezolvat, fără a lua în calcul costurile foarte mari de întreținere pe care le derivă. Și exemplele ar putea continua. Un experiment interesant. Experimentul Bavelas1 ne arată că atunci când sunt mai multe soluții la o problemă, cea care este cea mai complicată și sofisticată atrage de obicei cele mai multe aprecieri. Conștient de acest fapt Stefan Roock, un consultant, speaker și autor cunoscut în special pentru expertiza sa în Extreme Programming, spunea la un moment dat că “În software, soluțiile complicate sunt greșite, chiar dacă ele sunt corecte”. Agile introduce conceptul de “just enough”. De la definirea user story-urilor sau scrierea documentației până la proiectarea arhitecturii și planificare, totul este realizat în abordarea “atât cât trebuie”. De data aceasta Agile nu se mai așază atât de bine pe natura umană, ci dimpotrivă: caută strategii prin care 1 http://perceptionmanagers.org/2008/08/bavelas-experiment.html

14

nr. 39/septembrie, 2015 | www.todaysoftmag.ro

Unul dintre lucrurile pe care Agile încă nu le-a putut trata este tendința oamenilor de a gândi în șabloane. Gândirea în șabloane reprezintă de cele mai multe ori un avantaj, pentru că ne ajută să observăm, să analizăm și să reacționăm corect și mai repede în multe situații. Este modul prin care am reușit să învățăm multe din lucrurile pe care le cunoaștem azi. Totuși, în anumite contexte gândirea în șabloane poate să ne abată atenția de la detalii importante. Cineva spunea că în dezvoltarea softului singurul lucru cert este schimbarea. Într-un astfel de context să încerci să aplici anumite practici și procese care au funcționat în trecut este deseori periculos, iar de multe ori când lucrurile nu merg nu spunem că procesele sau practicile nu sunt corespunzătoare ci suntem tentați să dăm vina pe oameni, pe context, pe lipsa de resurse etc. . Acum în final de articol, sfatul meu este ca atunci când ceva nu merge în proiectul nostru și acest lucru persistă o bucată de timp să încercăm să analizăm și, eventual, să adaptăm procesele pe care le utilizăm. S-ar putea ca acestea să nu fie deloc potrivite contextului și persistența noastră în a schimba contextul să atragă după sine și mai multe probleme.


programare

Designul de API - studiu de caz

Î

n zilele noastre este din ce în ce mai greu ca un serviciu sau produs să devină un succes. Expunerea unui API, acronim pentru Application Programming Interface, poate reprezenta condiția de bază care să asigure acest succes.

Andrada Demian andrada.demian@betfair.com Developer @ Betfair

Un API definește în mod clar cum interacționează un sistem software sau o componentă cu multitudinea de sisteme existente. Printre avantajele unui API se numără scalabilitatea, flexibilitatea și inovația. Marile companii printre care se numără Microsoft, Google, Facebook sau Twitter nu s-ar afla în momentul de față la acest nivel dacă nu ar fi beneficiat de pe urma expunerii propriilor API-uri.

De ce este dificilă definirea unui API? Designul de API este unul din lucrurile care pot contribui semnificativ la creșterea valorii unui serviciu. Cu toate acestea, definirea unei noi interfețe reușite este o muncă dificilă. Orice dezvoltator software știe cât de ușor poate codul unui proiect să evolueze într-un cod „spaghetti”. API-urile nu sunt nici ele ferite de această degradare. Un API* bine definit trebuie să reflecte obiectivele businessului din care face parte, dar totodată să țină cont și de punctele forte și de limitările organizației cu privire la buget, competențe personale și infrastructură tehnică. Cheia întregului

proces este identificarea problemei pe care o rezolvă această nouă interfața. Mai sunt și alte aspecte care trebuie luate în calcul pentru definirea unui API reușit. Un API trebuie să fie: • Ușor de extins și de integrat în aplicația clientului; • Greu de folosit într-un mod incorect; • Integrat într-un cod al clientului care nu este greu de citit și de întreținut; • Capabil să satisfacă cerințele clientului; • Adecvat audienței. Folosirea recomandărilor de mai sus asigură înțelegerea API-ului de către consumatorii săi. În consecință integrarea și folosirea lui vor deveni foarte ușoare. Cu cât un API este mai ușor de consumat, cu atât rata de adopție va deveni mai mare și costul dedicat integrării sale mai mic.

Puterea exemplului În rândurile următoare vom expune un exemplu concret de API insistând asupra provocărilor de care am avut parte

www.todaysoftmag.ro | nr. 39/septembrie, 2015

15


programare Designul de API - studiu de caz de-a lungul întregului proces de design al API-ului. Următoarele exemple sunt luate dintr-un serviciu web al cărui scop este acela de a administra promoțiile vizibile pe website-ul nostru. Aceste promoții cer clientului să efectueze diverse acțiuni pe site- cum ar fi să se înregistreze, să pună pariuri, să se joace jocuri de tip arcade- toate acestea pentru a putea primi premii preconfigurate. În organizația noastră serviciile web comunică unele cu altele folosind un protocol RPC. Pentru a putea defini operațiile suportate de fiecare serviciu în parte se folosește o schemă XML numita BSIDL (acronim pentru Betfair Service Interface Definition Language). Specificațiile unui BSIDL descriu operațiile suportate(sau metodele) pe care serviciile le expun plus tipurile de date suportate. Mai jos este un exemplu al unei operații folosite de unul dintre clienții API-ului ( o aplicația internă) pentru a crea o promoție. <operation name=”create”> <description>Creates a new promotion. </description> <parameters> <request> <parameter name=”promotion” type=”Promotion” mandatory=”true”> <description>The promotion to create. </description> </parameter> </request> <response type=”ResponseStatus”> <description>Return ok if it was a successful call and fail otherwise, together with an error code. </description> </response> </parameters> </operation>

După cum putem observa în exemplul de mai sus, numele operației este foarte sugestiv, descriind practic ceea ce operația trebuie să facă . De asemenea, este foarte greu de folosit această operație într-un mod incorect, având un singur parametru al cărui nume promoție ( promotion) este destul de sugestiv pentru că exprimă ceea ce vrem sa creăm folosind această operație. Până în acest punct operația este foarte intuitivă. Principala îngrijorare cu privire la noua interfață a fost cum să modelăm o promoție astfel încât să satisfacă cerințele și în același timp să fie suficient de generică pentru a putea oferi flexibilitate. Cea mai simplă si ușoară soluție ar fi fost să creăm un nou tip pentru fiecare promoție. Această alegere ar fi avut multe dezavantaje printre care se numără și codul duplicat - promoțiile au în comun mai multe caracteristici cum ar fi nume, descriere; rezultatul final ar fi conținut o multitudine de tipuri de promoții pentru fiecare tip nou de promoție care ar fi trebuit adăugat. Nu am fost pe deplin încântați de această variantă așa că după câteva sesiuni de meditat la alte soluții am venit cu ideea de a avea o promoție care are toate câmpurile necesare descrierii unei promoții plus un câmp special numit fulfillmentCriteria. Un fragment reprezentând promoția modelată poate fi văzut mai jos: <dataType name=”Promotion”> <description>Encapsulates the promotion entity fields.</description> <parameter name=”name” type=”string”> <description>The name of the promotion. </description> </parameter> <parameter name=”rank” type=”i32”> <description>Represents the promotion ranking number which is an integer on range[1,1000]. </description> <parameter name=”product” type=”set(Product)”> <description>Indicates the products for which the promotion is available. </description>

16

nr. 39/septembrie, 2015 | www.todaysoftmag.ro

</parameter> <parameter name=”fulfillmentCriteria” type=”FulfillmentCriteria”> <description>What does the user need to accomplish in order to get the reward. </description> </parameter> </dataType>

Soluția găsită cu privire la suportarea mai multor tipuri de promoții a fost să folosim compoziția pentru a defini API-ul. Așadar, în loc să creăm un nou tip pentru promoțiile care implică un depozit(ex. depozitează 10 EUR ca să primești un pariu gratis) am creat un nou criteriu numit DepositCriteria care cuprinde cerințele necesare depozitului sumei de 10 EURO. Acest lucru face ca API-ul să fie unul foarte ușor de extins fără să existe schimbări incompatibile cu versiunea precedentă, beneficiind totodată de un mare avantaj, acela de a avea doar un singur tip de promoție. <dataType name=”FulfillmentCriteria”> <parameter name=”compoundCriteria” type=”CompoundCriteria”/> <parameter name=”depositCriteria” type=”DepositCriteria”/> <parameter name=”placeBetCriteria” type=”PlaceBetCriteria”/> <parameter name=”registerCriteria” type=”RegisterCriteria”/> </dataType>

Adăugarea tipului CompoundCriteria a fost necesară pentru cazurile în care o promoție este configurată să suporte mai multe criterii în același timp folosind operatori de tip ȘI,SAU având rolul de a descrie ceea ce un client Betfair trebuie să facă. Mai jos avem un exemplu de arbore de criterii pentru o promoție cu următoarele cerințe. Înregistrează-te și pune un pariu de 5 EUR pe jocurile de Arcade sau pune un pariu de 5 EUR pe România vs Ungaria pentru a câștiga un pariu gratis.

În ceea ce privește tratarea erorilor se poate observa din primul exemplu faptul că operația de creare a promoției returnează un tip de date numit ResponseStatus în loc să arunce o excepție. Promoția este validată la creare și toate inconsistențele sunt tratate ca erori de business astfel încât clientul este capabil să ia decizii bazate pe aceste erori de business. Am abordat această soluție deoarece ne-am gândit că este mai adecvată pentru consumatorul API-ului. Sugestivă în acest sens este și afirmația lui Martin Fowler: Dacă o eroare este un comportament așteptat, atunci nu ar trebui folosite excepții.


programare <dataType name=”ResponseStatus”> <parameter name=”success” type=”bool”/> <parameter name=”errorCode” type=”string”/> </dataType>

Urmarea bunelor practici prezentate mai sus nu garantează lipsa greșelilor. Noile cerințe apărute au cauzat adăugarea de noi atribute necesare descrierii unei promoții. Promotion getPromotionName() getRank() getProduct() getDisplayAttributes() getJurisdiction() getVisibleForGuest() getTermsAndConditions()

TODAY SOFTWARE MAGAZINE

Concluzii Definirea unui API este o activitate captivantă. Ce am învățat noi din aceasta experiență este că, deși nu toate schimbările de cerință pot fi anticipate din timp, este bine să încerci să prevezi ceea ce va urma, pentru că în acest fel API-ul va deveni mult mai ușor de extins și vor fi și mai puține modificări incompatibile cu versiunea anterioară.

Unele atribute au fost grupate în noi tipuri de date cu nume sugestive: DisplayAttributes getTheme() getBannerUrl() getImageUrl()

Alte atribute au fost adăugate direct fără să fie grupate pentru că la momentul respectiv nu am găsit un grup potrivit iar adăugarea unui singur atribut într-un grup nu ar fi avut sens. În acest moment există foarte multe atribute în tipul promoție (promotion) și chiar dacă le-am putea introduce într-un grup potrivit- am putea grupa rank și product într-un grup similar cu cel pentru DisplayAttributes- , unul dintre clienții API-ului folosește deja versiunea cu atributele negrupate făcând astfel dificil procesul adăugării unor modificări incompatibile cu versiunea anterioară.

www.todaysoftmag.ro | nr. 39/septembrie, 2015

17


programare

Low latency FIX engine in Java

C

hronicle FIX is our Low Latency FIX engine and database for Java. What makes it different is that it;

Peter Lawrey peter.lawrey@highfrequencytrading.com CEO @ Higher Frequency Trading Ltd

• is designed for ultra low GC* in Java. • supports Strings and date times in a way which minimises garbage and overhead. • is customisable to include only the fields you expect. • uses optimisations normally used in binary parsers and generators such as reading/writing 4 or 8 bytes at a time to improve efficiency. • built on low latency persistence to minimise the latency of logging. • is optimised for low latency network cards such as Solarflare. * Ultra low GC means it can produce less than a byte of garbage per message on average If you keep your total garbage rate to less than 1 GB per hour a 24 GB Eden can take all day to fill up and you don’t get any minor GCs. Produce less than 200 MB/ hour and you can run for a week without a GC.

But isn’t Java slow? Java can be slower than C++ but written well Java can be faster than a C++ application not written so well. i.e. Just because something is written in C++ doesn’t guarantee it will be faster.

What is being tested?

to native memory. e.g. ready to write to a Socket Channel. Note: Strings and Timestamps fields are the most expensive. There are 6 Strings and two timestamps. JMH configured to use SampleTime was run for 10 minutes in each test. This graph shows the latency of parsing and generating a moderately sized FIX message. In both parsing and generating, the latency was less than a micro-second, more than 99.9% of the time. But what about the higher percentiles? These don’t look as good. This is because the machine I am using has some noise from the OS such as interrupts which I have minimised but can’t turn off. The higher delays are caused by the OS. Around once a milli-second there is an interrupt for about 2 micro-seconds and even rarer delays of 5 and 7-8 microseconds. On a better tuned server I will still expect there to be interrupts, but they would occur less often.

The „Parser test” times how long it takes to parse a 214 byte New Order Single FIX message in native memory eg. after reading from a SocketChannel and set all the values of the fields into an object. In this test, the textual fields are set with Strings as this is the more natural way to deal with text data in Java. We have alternatives which are faster such as support for 8 bit character strings. The „Generator test” times how long it What is next? takes to generate the 214 byte New Order The next step is to performance test Single FIX message from data which con- integration with Chronicle Journal to tain Strings, and timestamps and write it see the impact of persistence. Journal

18

nr. 39/2015, www.todaysoftmag.ro


programare

TODAY SOFTWARE MAGAZINE

is a specialised persister which is similar to Chronicle Queue v4 but have been tuned for specific use cases. In this case, we need Journal to not only persist at around 150 nano-seconds per message, but have a higher consistency than Queue. While Queue performs very well writing to SSD, around 1 in 1000 to 1 in 100 writes will have a signature delay which reflects the choice of disk subsystem you have. i.e. it directly impacts the 99.9% latency. What we can do with Journal is buffer this delay to significantly reduce the impact.

and tune the code to get the benchmark? Is this something users would naturally do when writing their code? So the question, is Chronicle-FIX the fastest FIX engine is somewhat irrelevant. What we certainly know is that we are in the right ball park. Most importantly, the way Chronicle-FIX is licensed with consulting to ensure it is optimised for your use case, we will work with you to make sure that your code can achieve the sort of results we published in the benchmark.

What is a FIX Database?

The source for Chronicle FIX is on github but only available to those with a license. The thinking is that if you need a very fast FIX Engine (measuring your times in sub-microseconds) we can help integrate it into your software in the most optimal way for you. It may be that you are tied into an existing data model and code base in which case we have techniques which vastly reduce the cost of transforming data - in fact we don’t even hold an intermediary data model. On a green field project we can show you how to best build your code around Chronicle-FIX.

MongoDB is a database optimised for JSON messages. Chronicle FIX is a database optimised for FIX messages. It stores data in FIX and support queries on FIX fields such as; give me all the messages for a client order ID, or give me all the messages sent a specific time, or give me the messages most delayed between transmission time and the time we received them.

Is Chronicle-FIX the fastest FIX engine for Java code? We’ve seen a number of benchmark stats quoted for various FIX engines. Whilst benchmark numbers give you a general insight into the order of magnitude in which you dealing they almost certainly don’t give you an exact idea as to how fast your code will run. It’s easy for anyone to claim that they have the fastest FIX engine with some benchmark figures to back it up but very hard to actually compare like for like. Benchmarks will always be optimised to suit the software against which it is being run. So what exactly is a fair test for all engines? Even if you find a fair test on which everyone agreed how much do you have to manipulate

How to use Chronicle FIX?

Conclusion Chronicle FIX is quick. While QuickFIX struggles to be under 50 micro-seconds to parse + generate, Chronicle FIX is comfortably under two micro-seconds to do both, most of the time. We will be providing more documentation on how persistence performs and the database works.

www.todaysoftmag.ro | nr. 39/septembrie, 2015

19


programare

jOOQ, pentru simplificarea integrării SQL-ului în Java

J

OOQ este o bibliotecă Java, folosită pentru maparea bazelor de date. API-ul astfel rezultat este domain-specific (DSL), reprezentând o abstracție construită pe modelele relațional și obiect orientat (ORM) ale bazelor de date.

Silviu Dumitrescu silviu.dumitrescu@accesa.eu Engineer manager @Telenav

Diana Bălan diana.balan@accesa.eu Java developer @Telenav

20

nr. 39/2015, www.todaysoftmag.ro

Fiind obiect orientat este type safe. jOOQ nu reprezintă un nou limbaj de interogare ci un instrument de construire a clauzelor SQL din obiecte jOOQ generate din baza de date. jOOQ folosește JDBC pentru apelurile la resursa bazei de date. Deși jOOQ nu are atâtea funcționalități precum ORM-urile (spre exemplu: managementul stărilor entităților, moștenire, interogări polimorfice, etc.), acesta permite crearea de interogări complexe ce implică reuniuni, alias-uri, select-uri imbricate sau joncțiuni complexe, adică acoperă funcționalitatea extinsă SQL. Principalele artefacte generate ca structuri predefinite, dar care pot fi modificate și adaptate la nivel de model si accesibilitate, pentru jOOQ sunt: • Keys.java, ce conține cheile primare, străine și identitățile referențiale ca membri statici, instanța clasei org.jooq. Key; • Tables.java, ce conține toate obiectele tabel ca membri statici, instanța a clasei org.jooq.Table; • Obiecte definite de utilizator: • Extensie a clasei org.jooq.impl. SchemaImpl, ce conține un array cu toate tabelele bazei de date; • Extensie a clasei org.jooq.impl. TableImpl, ce definește structura unei tabele din baza de date. O astfel de extensie apare pentru fiecare tabelă din baza de date; • Extensie a clasei org.jooq.impl. UpdatableRecordImpl, ce definește operațiile de afișare si modificare ale unei înregistrări dintr-o tabelă. O astfel de extensie apare pentru fiecare tabelă din bază.

Vom folosi ca demo pentru acest articol generarea default, pentru o bază de date PostgreSQL. Într-un proiect Maven, pom.xml va avea următorul conținut: <dependencies> <dependency> <groupId>org.jooq</groupId> <artifactId>jooq</artifactId> <version>3.6.1</version> </dependency> <dependency> <groupId>org.jooq</groupId> <artifactId>jooq-meta </artifactId> <version>3.6.1</version> </dependency> <dependency> <groupId>postgresql</groupId> <artifactId>postgresql </artifactId> <version>9.1-901-1.jdbc4 </version> </dependency> <dependency> <groupId>org.postgis</groupId> <artifactId>postgis-jdbc </artifactId> <version>1.3.3</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.jooq</groupId> <artifactId> jooq-codegen-maven </artifactId> <version>3.6.1</version> <configuration> <executions> <execution> <goals> <goal>generate</goal> </goals> </execution> </executions> <!-- JDBC connection parameters--> <jdbc> <driver> org.postgresql.Driver</driver> <url> dbc:postgresql://localhost:5432/ mydatabase</url> <user>username</user> <password>password</password> </jdbc> <!-- Generator parameters --> <generator>


programare <name> DSLContext create = org.jooq.util.DefaultGenerator DSL.using(conn, </name> SQLDialect.POSTGRES_9_4); <database> <name>org. jooq.util.postgres .PostgresDatabase</name> Clasele implicate sunt: DSLContext este interfața ce conține <includes>.*</includes> <excludes></excludes> principalele funcționalități pentru obiectul de interogare, iar DSL <inputSchema>myschema este un factory pentru diversele tipuri de dialecte; </inputSchema> • crearea interogării este simplă, prin apeluri de metode din </database> <target> obiectul anterior creat; <packageName> • rezultatul unei interogări este un Result, asemănător unui test.generated</packageName> <directory>src/main/java ResulSet din JDBC. </directory> Prezentăm mai jos codul integral al acestei aplicații demo: </target> </generator> </configuration> final String userName = „postgres”; </plugin> final String password = „fcdss”; </plugins> final String url = „jdbc:postgresql://localhost:5432/ </build> mytests”;

Primele două dependențe, jooq și jooq-meta, sunt folosite ca pachete de bază pentru rularea jOOQ, respectiv pentru metadatele utilizate în maparea bazei de date în clase Java. Cea de-a treia dependență jOOQ, jooq-codegen-maven, este un utilitar pentru generarea efectivă a schemei baze de date. Alte tag-uri importante implicate în pom sunt: • jdbc, care conține metadatele de conectare la baza de date; • generator, cu sub-tag-urile: • database, ce stabilește dialectul folosit din jooq-meta. Numele se creează după construcția implicită: org.util. [numeVendor].[NumeVendor]Database • includes, ce stabilește, sub forma unor expresii regulate Java (separatorul de expresii fiind pipe-ul), care sunt elementele ce vor fi generate din schema bazei de date; • excludes, ce stabilește, sub forma de aceleași expresii regulate, care sunt elemente excluse din maparea generată (poate include nume de tabele sau rutine); • target, cu două subelemente: 1. packageName, reprezintă numele pachetului în care se vor genera clasele amintite în paragrafele anterioare; 2. directory, reprezintă numele directorului în care vor fi create pachetele anterioare.

try (final Connection conn = DriverManager. getConnection(url, userName, password)) { final DSLContext create = DSL.using(conn,SQLDialect. POSTGRES_9_4); final Result<Record> result = create.select(). from(Tables.AUTHOR).fetch(); for (final Record r : result) { final Integer id = r.getValue(Tables.AUTHOR.ID); final String firstName = r.getValue(Tables.AUTHOR. FIRST_NAME); final String lastName = r.getValue(Tables.AUTHOR. LAST_NAME); System.out.println(„ID: „ + id + „ first name: „ + firstName + „ last name: „ + lastName); } } catch (final Exception e) { e.printStackTrace(); }

Vom dezvolta subiectul în numerele viitoare ale revistei, cu argumente de performanță și paralelă între jOOQ și ORM-uri precum JPA. Vă dorim lectură plăcută!

O aplicație ce interacționează cu o baza de date PostgreSQL, ce conține o tabelă, urmărește pașii: • crearea unei conexiuni, instanță a clasei Connection, din java.sql (aceasta este practic singurul element JDBC prezent în aplicație) • pentru o aplicația pur jOOQ vom crea:

www.todaysoftmag.ro | nr. 39/septembrie, 2015

21


programare

OSM și Telenav văzute prin ochii unui analist de hărți

D

upă cum probabil știți deja, Telenav utilizează date crowd-sourced OpenStreetMap (OSM) pentru a oferi clienților săi unul dintre cele mai bune servicii de navigare existente pe piață. Am ales modelul OSM deoarece sunt publicate editări în fiecare minut, rezultând hărți care sunt adesea mai detaliate și mai actualizate decât hărțile disponibile comercial.

Florin Badita

florin.badita@telenav.com software developer @ Telenav

OSM, ca și Wikipedia, este singura hartă crowd-sourced și open-sourced a globului și, pentru mulți dezvoltatori și mapper-i pasionați, a devenit alternativa clară a Google Maps. Comunitatea se dublează de la an la an, ajungând la peste 2.2 milioane de editori înregistrați, cu oameni care fac hărți pentru fiecare țară din jurul lumii, întinzându-se de la SUA la Germania și de la Lesotho la Coreea de Nord. De exemplu, străzile nou făcute și zonele nou dezvoltate pot fi actualizate regulat și în timp real. În plus, OSM permite detalii mai amănunțite pe hartă, pentru pietoni, cum ar fi alei, trotuare, parcuri, trasee pentru agrement, grădini zoo și chiar și copaci ai orașului. Telenav este un contribuitor activ al OSM de mai bine de cinci ani, colaborând strâns cu comunitatea pentru a îmbunătăți caracteristicile specifice necesare navigării, traficului și altor viitoare servicii bazate pe locație.

Mihai Iepure mihai.iepure@telenav.com software developer @ Telenav

Silicon Valley - 2007 vs. Now

Gabriela Sinka

gabriela.sinka@telenav.com map analyst @ Telenav

22

nr. 39/2015, www.todaysoftmag.ro

În ceea ce privește contribuția adusă de Telenav la platforma OSM, a fost mai mult decât binevenită: o echipă specializată în manipularea datelor spațiale din OSM. Cum avem un rol activ în generarea de date pentru hărțile companiei, noi construim framework-uri pentru actualizări de

hartă frecvente și analizăm harta pentru a oferi o privire de ansamblu asupra setului de date ale hărții și pentru a evalua calitatea hărții. Astfel, cea mai mare provocare pentru noi este să găsim cele mai bune metode de a realiza acestea utilizând instrumente GIS și biblioteci interne și disponibile. Pentru a pune acest lucru în practică, folosim instrumente de management al bazelor de date relaționale precum: • PostgreSQL și PostGIS pentru a manipula datele spațiale, • QGIS pentru vizionarea, editarea și analiza datelor, • JOSM (Java OpenStreetMap Editor), principalul editor offline pentru OSM pe care îl utilizăm pentru a edita elementele de construcție ale bazei de date OSM: noduri, căi, tag-uri metadate și relații. De asemenea, osmosis, osmconvert, osmfilter și overpass turbo se dovedesc utile atunci când vrem să filtrăm și să convertim fișiere de date pentru obiecte specifice ale hărții. Noi analizăm harta, căutând tipare care se repetă în legătură cu diferitele buguri care există pe hartă. Căutăm mereu metode noi prin care să putem detecta erorile, într-un mod programatic sau vizual. Iată un exemplu despre cum un cartograf (mapper) trebuie să acționeze când are o sarcină de cartografiere: am creat o hartă model în QGIS care scoate în evidență zonele în care se găsesc multe noduri, adunate aproape unul de altul, prin duplicarea stratului de noduri și prin selectarea modului de amestecare a straturilor (Layer blending) să fie aprins, făcând ca nodurile să devină mai galbene, deoarece mai multe noduri se suprapun într-o zonă. Am putea, de asemenea, să facem aceasta și într-un mod programatic, luând în calcul


programare lungimea dintre fiecare segment și setând un prag pentru a arăta numai șirurile care au 10 noduri consecutive cu o distanță între fiecare nod mai mică de 20 cm.

Zonele galbene înseamnă o densitate mai mare a nodurilor; dimensiunea cercului gri este proporțională cu numărul edit-urilor nodului; zona verde reprezintă numărul de edit-uri ale liniei; zonele roșu închis indică numărul de tag-uri atașate fiecărui șir de linii. Alte instrumente care facilitează colaborarea cu comunitatea sunt MapRoulette și OSM Tasking Manager. MapRoulette este o abordare prin joc a depanării

TODAY SOFTWARE MAGAZINE bug-urilor OSM; ea transformă problemele uzuale cu datele OSM în microsarcini care pot fi rezolvate în nu mai mult de trei minute. Tasking Manager are același scop, și anume, de a împărți lucrările de cartografiere în sarcini mai mici. Este util în cazul unei urgențe să distribui sarcini mai multor cartografi. Câteva dintre proiectele noastre asupra cărora ne concentrăm în prezent sunt: îmbunătățirea hărții străzilor din Canada, mentenanța datelor SUA și de asemenea, pregătirea pentru a profita la maxim de datele drumurilor lansate recent de către Institutul Național Mexican de Statistică și Geografie (INEGI). Baza de date INEGI conține informații spațiale referitoare la diviziunile administrative din Mexic și fișiere ale rețelei drumurilor. Acestea din urmă oferă o rețea de transport unică, care integrează autostrăzile naționale și o hartă detaliată a străzilor din toate localitățile. Cum exploatăm noi această resursă prețioasă? Cum putem noi îmbina datele

bogate pe care OSM le are deja în multe locuri și pe care în mod evident ne dorim să le păstrăm, cu setul de date INEGI? Procesul de îmbunătățire a hărții OSM nu este unul direct. De exemplu, în cazul unei mici localități din mijlocul Mexicului,San Angel Zurumucapio, OSM are doar arterele principale de trafic (imaginea din stânga), iar dacă ne uităm la imaginea Bing (dreapta), este clar că aproape întreaga așezare nu este cartografiată: În acest caz, INEGI are majoritatea dacă nu toate drumurile din această localitate în setul lor de date: Pentru a fi pe aceeași pagină, atributele datelor INEGI trebuie să fie convertite întrun marcaj potrivit OSM. Următorul pas ar fi să fuzionăm cele două seturi de date (datele OSM preexistente și INEGI) cu instrumentul nostru intern. Instrumentul ia drept input atât un fișier OSM de bază cât și fișierul de îmbunătățire INEGI, apoi le va compara și combina pe cele două și va propune un set de schimbări pentru datele OSM de bază, într-un fișier rezultat (output) care poate fi importat în JOSM. Chiar dacă instrumentul se descurcă foarte bine cu combinarea datelor OSM cu fișierul de îmbunătățire, tot este necesară o verificare manuală înainte de upload-ul final pentru a evita bug-uri precum: suprapunere sau drumuri duplicate și erori de conectivitate. Deținând aceste dimensiunii, acest tip de lucrare necesită un mare volum de muncă, care nu poate fi realizată de o echipă mică de analiști de hărți. Tocmai aici este vitală colaborarea cu comunitatea OSM, prin desfășurarea sarcinilor prin Tasking Manager și MapRoulette. Dacă acest subiect v-a atras atenția, vă așteptăm cu drag la adunările noastre OSM1 organizate lunar pentru a afla mai multe despre OSM și a vă alătura acestui efort deschizător de drumuri. 1 h t t p : / / w w w . m e e t u p . c o m / Cluj-Napoca-OpenStreetMap-Meetup/

www.todaysoftmag.ro | nr. 39/septembrie, 2015

23


programare

BDD, marca Cucumber

S

e pare că un nou framework de testare câștigă popularitate pe internet, în special în zona Java, resuscitând conceptul de BDD. Cucumber este un tool software utilizat pentru rularea testelor automate de acceptanță într-un format lizibil din punct de vedere al businessului.

Sergiu Indrie sergiu.indrie@iquestgroup.com Senior Software Engineer @ iQuest Group

Conceptul de BDD sau BehaviorDriven Design (Proiectare dirijată de comportament) există de o vreme bună, primele articole și proiecte (JBehave [5] și RSpec [6]) apărând prin 2007. Cum se indică pe site-ul proiectului, Cucumber este o rescriere a celor două framework-uri menționate anterior.

Concepte BDD Cea mai importantă idee ce trebuie reținută din acest articol este conceptul de BDD în sine. Behavior-Driven Design nu

24

nr. 39/2015, www.todaysoftmag.ro

înseamnă doar alegerea unui framework de teste relevant și scrierea de teste; pentru a reuși să obținem valoare trebuie să înțelegem ideea de bază din spatele acestui proces de dezvoltare software. (Vezi articolele [7] și [8]). Această metodă s-a născut datorită nevoii unei mai bune colaborări între persoanele de business, programatori și tester-i. Astfel dacă dorim să profităm de pe urma BDD, trebuie să pornim cu ideea unui efort comun susținut de toți participanții procesului de dezvoltare.


TODAY SOFTWARE MAGAZINE Un test Cucumber Un test Cucumber are nevoie de urmatoarele trei elemente : 1. un fișier feature, 2. definiții de pași (steps), 3. cod de business.

Fișierul feature

buyMicrowave(amountOfMoney); } @And(„^he has a receipt$”) public void he_has_a_receipt() { business.hasReceipt(); } @When(„^he returns the microwave$”) public void he_returns_the_microwave() { business.returnMicrowave(); } @Then(„^Jeff should be refunded \\$(\\d+)$”)

public void Jeff_should_be_refunded_$(int amountOfUn fișier feature este un fișier în format plain, text scris în Money) { limbajul Gherkin, un limbaj lizibil din punct de vedere al busibusiness.refund(amountOfMoney); } ness-ului care permite descrierea comportamentului aplicației } într-un format liber. Mai jos este un exemplu de fișier feature. Fișierele Java cu definițiile pașilor pot conține adnotările @ Before și @After cu scop similar celor din framework-ul Junit. Pot Feature: Refund item folosi un mecanism de raportare (prin injectarea unui obiect de Scenario: Jeff returns a faulty microwave tip Scenario) pentru a personaliza raportul de rezultate ale testeGiven Jeff has boght a microwave for $100 lor prin includerea de text și imagine. And he has a receipt When he returns the microwave Cod Business Then Jeff should be refunded $100 În final, codul din definițiile pașilor va apela codul de business al aplicației. Fișierul feature este compus din cel puțin un scenariu (scenario; de fapt un test) care la rândul lui este compus din cel puțin Tool-uri un pas (step). Fișierele feature pot utiliza diferite mecanisme de Din punct de vedere al limbajelor de programare, Cucumber structură cum ar fi descrieri, comentarii, tag-uri, o zonă comună este foarte flexibil, fiind compatibil cu limbajele de programare de inițializare și diferite metode de a pune în parametri pașii unui principale cum ar fi Java, .NET, C++, PHP și altele. Din perspecscenariu. tiva Java, există două artefacte disponibile, unul pentru Java 8 și

Definițiile pașilor (Step definitions) După cum am văzut mai sus, un scenariu este compus din mai mulți pași cum ar fi “Jeff has bought a microwave for $100” și “he has a receipt”. Toți acești pași sunt abstractizări în text liber ale unui cod de legătură numit glue code. Pentru a putea acoperi primul pas este nevoie de o metodă Java precum cea de mai jos: @Given(„^Jeff has bought a microwave for \\$(\\d+)$”) public void Jeff_has_bought_a_microwave_for_$(int amountOfMoney) { business. buyMicrowave(amountOfMoney); }

Pasul Gherkin este asociat metodei Java cu ajutorul expresiilor regulate. În acest caz, expresia (regex) „^Jeff has bought a microwave for \\$(\\d+)$” va valida fraza “Jeff has bought a microwave for $100”. Observăm faptul că prețul aparatului este extras ca un grup regex. Acesta este mecanismul utilizat de Cucumber pentru a obține valorile variabilelor din fișierul feature scris în format liber. Fișierul Java ce conține definițiile pașilor se află mai jos: public class RefundSteps { private Business business = new Business(); @Given(„^Jeff has bought a microwave for \\$(\\d+)$”) public void Jeff_has_bought_a_microwave_for_$(int amountOfMoney) { business. www.todaysoftmag.ro | nr. 39/septembrie, 2015

25


programare BDD, marca Cucumber unul pentru versiunile anterioare. Unele din principalele framework-uri compatibile sunt Spring, Selenium și Ruby on Rails. Cu toate că acest framework de BDD nu este extrem de popular încă, este disponibil în principalele IDE-uri Java de cel puțin un an (Intellij IDEA începând cu versiunea 12; Eclipse începând cu ianuarie 2014). Deținerea funcționalităților precum syntax highlighting și autocomplete la nivel de pași, navigarea în cadrul pașilor, căutarea utilizării pașilor, generarea codului schelet pentru noii pași și rularea de teste creează condiții pentru o scriere facilă de teste Cucumber. Integrarea cu Maven este simplă și intuitivă pentru uzul de bază - presupunând plasarea tuturor artefactelor în aceleași pachete și utilizarea unei clase de test adnotată pentru a fi rulată de Cucumber , însă scenariile mai avansate ar putea beneficia de un plugin specializat, pur Java de Maven (vezi [12]). De asemenea, e posibil ca structura ierarhică de fișiere feature să fie la un nivel mai înalt de abstractizare decât pachetele Java și deci diferită de structura pachetelor de definire a pașilor. De exemplu, pentru a rula toate fișierele feature din pachetul com.tsm.bdd vom rula clasa Java com.tsm.bdd.RefundTest.

package com.tsm.bdd; import cucumber.api.junit.Cucumber; import org.junit.runner.RunWith; @RunWith(Cucumber.class) public class RefundTest { }

Abordările pentru a rula testele Cucumber cu un setup mai complex utilizând Maven sunt: • utilizarea exec-maven-plugin pentru a apela clasa main din jar-ul Cucumber și a pasa argumentele necesare; • selectarea suitei de teste folosind clasa de test necesară (în pachetul necesar) și configurarea opțiunilor Cucumber ca o proprietate sistem și pasarea acestora către maven-surefire-plugin. Folosind exec-maven-plugin : <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>${exec-maven-plugin.version}</version> <executions> <execution> <phase>test</phase> <goals> <goal>java</goal> </goals> <configuration> <classpathScope>test</classpathScope> <mainClass>cucumber.api.cli.Main </mainClass> <arguments> <argument>--format</argument> <argument>${format}</argument> <argument>--strict</argument> <argument>--glue</argument> <argument>target/test-classes </argument> <argument>target/test-classes/. </argument> <argument>--tags</argument> <argument>~@ignore</argument> <argument>--tags</argument> <argument>${tagArg}</argument> </arguments> </configuration> </execution> </executions> </plugin>

Folosind maven-surefire-plugin : <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.18.1</version> <configuration>

ITea Afternoon 2nd edition #availability

#maintainability

#supportability

#reliability

Make your IT Architecture stand out from the crowd! 7-8 October

2015 26

nr. 39/septembrie, 2015 | www.todaysoftmag.ro

Hotel Plaza Târgu-Mureș


TODAY SOFTWARE MAGAZINE <test>${java.test}</test> <systemPropertyVariables> <cucumber.options> --monochrome --strict --plugin pretty --plugin html:..\logs\report\html-report-java --plugin json:..\logs\report \json-reports\${json.name.java} --plugin junit:..\logs\report\junit-java.xml --tags ~@skip </cucumber.options> </systemPropertyVariables> </configuration> </plugin>

6. http://rspec.info/ 7. http://www.javacodegeeks.com/2015/04/pitfalls-of-cucumberadoption.html 8. http://www.javacodegeeks.com/2013/12/acceptance-testing-blaming-the-tools.html 9. coveros.com/background-and-hooks-for-cucumber-jvm/ 10. https://cucumber.io/docs/reference#doc-string-argument 11. http://mkolisnyk.blogspot.ro/2013/03/jbehave-vs-cucumberjvm-comparison.html 12. https://github.com/cucumber/cuke4duke/wiki/maven

De asemenea, trebuie menționat faptul că există câteva plugin-uri (de Jenkins) care simplifică integrarea testelor Cucumber în mediul Jenkins.

Observații

Dintr-o perspectivă BDD, Cucumber nu are o contribuție majoră, în special când e comparat cu JBehave (vezi [11]) care are o abordare foarte asemănătoare. În ansamblu, Cucumber pare să își îndeplinească misiunea de a oferi un mediu simplu de colaborare între diferitele părți implicate folosind limbajul Gherkin, și de a spori lizibilitatea testelor scrise de programatori. Însă, din punct de vedere al programatorului, framework-ul nu dă impresia de maturitate având mici lipsuri la descrierea și scrierea testelor (vezi [9]), documentație publică nefinalizată (vezi [10]) și complexitate în configurarea unui mod unificat de a rula testele (Maven vs IDE).

Referințe 1. https://en.wikipedia.org/wiki/Behavior-driven_development 2. http://dannorth.net/introducing-bdd/ 3. https://cucumber.io/ 4. https://github.com/cucumber/cucumber/wiki/Gherkin 5. http://jbehave.org/reference/stable/index.html

www.todaysoftmag.ro | nr. 39/septembrie, 2015

27


testare

Devino un tester mai bun cu BBST

C

e ai citit ultima dată pentru a-ți îmbunătăți cunoștințele de testare? Cum îți exersezi abilitățile necesare în activitatea ta? La fel ca și în alte domenii, e important ca tester-ii să aibă parte de o formare continuă, atât pentru a se adapta la noile contexte create de avansul tehnologic, dar și pentru a-și îmbunătăți abordările, tehnicile și practicile de testare într-un mediu concurențial. Cum schimbarea de perspective este la ordinea zilei într-un mediu care evoluează constant, profesioniștii au nevoie să fie mereu la curent cu schimbările de paradigmă care au loc în domeniul lor de activitate.

Dacă până recent posibilitățile de a-și dezvolta noi abilități pentru tester-i erau limitate, de câțiva ani Cem Kaner a venit cu o variantă de cursuri predate și la Florida Institute of Technology, care nu obligă memorarea unor noțiuni a căror înțelegere nu este neapărat deplină, ci intră în detalii care țin de gândire și înțelegere. Adică nu se dă o soluție general valabilă, ci mai degrabă se încurajează o înțelegere profundă a contextului pe baza căruia se va face testarea produsului. Aceste cursuri create și îmbunătățite în permanență de Cem Kaner și Rebecca Fiedler se numesc BBST sau Black Box Software Testing. Iată care sunt beneficiile cu care vin aceste cursuri: • cursurile se țin online, ceea ce oferă flexibilitate cursanților; • studenții primesc feedback individual atât de la instructori pentru fiecare din temele bisăptămânale, cât și de la colegii de curs, crescând valoarea experienței de învățare; • în fiecare curs există și o sesiune de notare interactivă pe baza răspunsurilor de la examenul final sau de la tema practică; • studenții sunt încurajați să își testeze în mod continuu cunoștințele acumulate pe parcursul cursului; • participanților li se recomandă resurse adiționale de studiu în cadrul fiecărei lecții sub forma unor articole și cărți; • instructorii cursului sunt specializați în domeniul testării pentru a putea da feedback-uri relevante, pentru a direcționa studenții în studiul materialelor și a răspunde pertinent întrebărilor.

28

nr. 39/septembrie, 2015 | www.todaysoftmag.ro

După ce am trecut în revistă o serie a beneficiilor cursurilor BBST, ar trebui să vă explicăm mai în detaliu ce se predă la aceste cursuri. Ce e bine de știut este că fiecare sesiune este gândită în așa fel încât cursanții să fie pregătiți să treacă la următorul curs. Primul este BBST Foundations, care a fost compus în jurul a patru idei principale și anume: care este misiunea sesiunilor de testare și cum strategia realizată ajută la îndeplinirea misiunii; cum își poate da seama un tester dacă un program a trecut un test sau nu; care sunt provocările principale în crearea și folosirea metricilor software; cum poate un tester măsura cât s-a testat, cum estimează cât mai are de testat și cum decide când să se oprească din testat. Următorul curs din serie este BBST Bug Advocacy, care ajută la îmbunătățirea metodelor de raportare a bug-urilor. Acest curs le conferă studenților cunoștințe din drept, vânzări și psihologie pentru a-i ajuta să creeze rapoarte cât mai pe înțelesul colaboratorilor și pentru ca aceștia să poată pleda pentru soluționarea bug-urilor relevante. Parcurgând acest curs, studenții vor lucra cu framework-ul RIMGEN și vor primi feedback în funcție de modul în care loghează bug-urile pentru o aplicație open-source. Cel de-al treilea curs este BBST Test Design, care a rezultat din analiza a peste șaptezeci și cinci de tehnici de testare. Cursul se concentrează în special pe șase dintre acestea: function testing și testing tours, risk-based testing, scenario testing, spec-based testing, domain testing and combinatorial testing. Toate acestea pun bazele unei fundații solide în ceea ce ține de testarea ”context-driven”.


startups Un alt detaliu organizatoric care merită să fie amintit este că sesiunile se întind pe o perioadă de patru săptămâni, după cum am mai menționat, online, acordând posibilitatea studenților de a fi flexibili în procesul de învățare și a avea timp să se familiarizeze cu conceptele prezentate. La sfârșitul cursurilor, fiecare absolvent va primi o diplomă semnată de instructori. Un alt plus al cursurilor BBST este faptul că grupele formate pentru fiecare curs nu sunt mari și instructorii pot astfel să se ocupe atent de fiecare cursant. De aceea gradul de interacțiune atât între studenți și instructori, cât și între studenți este unul mai mare decât la alte cursuri în care grupele sunt formate din zeci sau chiar sute de persoane.

Care sunt activitățile principale ale acestui curs? În primul rând, activități de “orientare”, prin care cursantul este plimbat printr-o serie de teme înainte de a vedea lecția, cu scopul de a-l încuraja să își pună o serie de întrebări și să analizeze anumite contexte și situații înainte de a primi răspunsul propus de instructori. A doua activitate este cea de a pune în aplicare tehnici întâlnite de-a lungul lecțiilor. O a treia componentă sunt quiz-urile, prin intermediul cărora studentul consolidează noțiuni și dă dovadă de înțelegere a termenilor întâlniți de-a lungul lecțiilor. Chiar dacă acestea sunt notate, punctajul nu este luat in considerare în evaluarea finală.

Noiembrie aduce o nouă serie de cursuri BBST Foundations, dând șansa unui nou grup de studenți să aprofundeze o altă față a testării. Altom oferă unui cititor Today Software Magazine șansa de a participa la cursul BBST Foundations gratis prin participarea la un concurs: scrieți pe Facebook sau Twitter ce așteptări aveți de la cursul organizat de noi folosind #BBSTAltom (pentru o identificare mai ușoară). Așteptăm răspunsurile voastre până în 12 octombrie! Disclaimer: Concursul se adresează persoanelor care nu au mai participat până acum la cursurile BBST Foundations organizate de Altom Consulting.

Alte componente importante ale cursurilor sunt seriile de discuții atât între instructor și student la nivel individual, cât și de grup, pentru o mai bună înțelegere a conceptelor și pentru un schimb de idei care duc la o mai bună stăpânire a materiei. La sfârșitul fiecărei sesiuni, studenții vor avea de dat un test sub formă de eseu, pe baza căruia vor fi evaluați de către instructori, individual. Instructorii acestei ediții sunt Ru Cindrea, Alexandra Casapu și Gabriel Dobrițescu, fiecare dintre ei urmând, la rândul lor, seria BBST, fiind îndrumați în demersul de a deveni instructori BBST de către Cem Kaner și Rebecca Fiedler.

Monica Rațiu monica.ratiu@altom.ro Marketing Specialist @ Altom

www.todaysoftmag.ro | nr. 39/septembrie, 2015

29


programare

Codul pentru un spațiu plin de entuziasm

D

in primul moment în care a intrat în contact cu un calculator, încă de la treisprezece ani, Richard Sheridan a știut că urmează să își petreacă toată viața făcând programare. Însă experiența lui în industria de software l-a învățat că pentru mulți angajați munca în acest domeniu se traduce în ore nesfârșite și proiecte coordonate greșit, cu rezultate slabe. După aproape treizeci de ani, a decis că e timpul să găsească o cale mai bună.

Alexandra Banu alexandra.banu@cos.ro Marketing & PR Responsible @ COS

30

nr. 39/2015, www.todaysoftmag.ro

Astfel, din 2001, a pus bazele Menlo, o companie de design și dezvoltare de software, cu o intenție clară: să creeze o cultură organizațională bazată pe valoarea de afaceri numită „entuziasm”. Șase ani mai târziu, Menlo intră în Top 500 al Inc. com, ca una dintre firmele private cu cea mai rapidă creștere din SUA.

apărut cartea „Joy, Inc.: How We Built a Workplace People Love”, ce captează pe de o parte drumul parcurs de Sheridan în dorința de a schimba o industrie în care nu se mai regăsea și, pe de altă parte, metodele pe care organizațiile de peste tot le pot folosi pentru a-și menține echipele motivate și pasionate de ceea ce fac.

În 2013, sediul companiei, aflat într-o fostă parcare din Ann Harbour, Michigan, a fost vizitat de peste două mii de oameni din toată lumea, dornici să descopere mai multe nu despre tehnologia folosită de Menlo, ci despre abordarea culturii organizaționale și a designului unui spațiu de lucru gândit pentru a genera entuziasm și implicare. Au avut atât de multe cereri pentru tururi ghidate, încât CEO-ul a realizat că e timpul să împărtășească povestea lor într-un alt mod. Așa a

Practicile uzuale din companii spun că, pentru a fi performant și a aduce o contribuție cât mai bună în compania în care lucrează, este nevoie ca fiecare individ să fie separat fizic de colegii lui printr-un spațiu personal bine delimitat. Plimbându-se prin sediul Menlo, unul din lucrurile pe care vizitatorii le observa este tocmai lipsa birourilor închise, a pereților și a cubicle-urilor. Mai mult, majoritatea angajaților nu au propriile lor birouri, scaune sau calculatoare. Vizitatorii sunt


deseori surprinși de acest mod neconvențional de amenajare, în care angajații nu au nici măcar un loc în care să-și pună fotografiile cu familia. Ce spune managementul Menlo despre asta? Daca vor să îi vadă pe cei dragi, angajații sunt liberi să îi aducă la birou. Compania a creat spații speciale de odihnă și îngrijire, iar până acum, au crescut deja cinci copii Menlo. Animalele de companie sunt, de asemenea, binevenite. Menlo folosește aceleași tehnici pe care Edison le-a inventat acum 130 de ani: lucrează colaborativ într-un open space și dezvoltă software iterativ și gradual, urmărind să aibă un produs de mici dimensiuni o dată la zece zile și o lansare semnificativă la 6 luni. Bineînțeles, că și la Edison, principalul factor motivațional este crearea unor produse utile și vandabile, ce aduc valoare de business reală. Colaborând permanent, într-un spațiu deschis, echipa lucrează mai bine, mai repede și la costuri reduse, totul în spiritul conceptului original al lui Edison – Fabrica de invenții. De ce recomăndam cartea Joy? Pentru că vorbește despre curajul de a construi și aplică un prototip de spațiu de lucru unic, într-un act asumat de construire a culturii organizaționale, totul în numele entuziasmului de a face lucrurile bine. Citind Joy, vă veți familiariza cu sistemul de valori și credințe al unei companii performante și veți înțelege cum un spațiu de birou ce urmărește să elimine stereotipurile, poate fi o bază puternică pentru un model de afaceri sustenabil.

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

www.todaysoftmag.ro | nr. 39/septembrie, 2015

31


marketing

Specialist Marketing Online sau Agenție Marketing - Ce preferați?

M

Călin Biriș calin.biris@loopaa.ro Digital Director @ Loopaa

arketingul online nu mai poate fi ignorat. Înainte de a lua vreo decizie de a achiziționa ceva, clienții caută online și sunt mai informați ca oricând. Google a realizat o cercetare de piață și a descoperit că 92% dintre clienți apelează la motoare de căutare atunci când caută o afacere locală. Deci, este necesar ca orice companie să aibă o bună prezență online, calitate care se concretizează prin următoarele aspecte: • Un website bun care să aibă o rată de conversie ridicată; • Un blog unde să postați conținut de calitate pentru a vă educa și informa potențialii clienți; • O strategie de newsletter pentru a vă menține clienții aproape, iar potențialii clienți și mai aproape; • O prezență activă în rețelele sociale, astfel încât oricine să poată contacta compania voastră; • De asemenea, este important să investiți în publicitatea online dacă vreți să atrageți oamenii potriviți care să cumpere de la compania voastră. După cum remarcați, este multă muncă de făcut dacă doriți să vă atingeți țelurile de Online Marketing. Deci, pentru a obține cele mai bune rezultate, aveți două opțiuni: să aveți propriul Specialist Online Marketing sau să lucrați cu o Agenție de Marketing.

Specialist Online Marketing versus Marketing Agency

• OMS va ajunge să cunoască totul despre afacerea voastră, chiar și glumele din interior; • Dacă vreți să modificați ceva foarte rapid (cum ar fi în acel moment), specialistul în online marketing va fi întotdeauna acolo pentru voi; • El vă va putea ajuta de asemenea și cu alte lucruri minore care trebuie să fie făcute și care nu sunt neapărat responsabilitatea sa.

În rândurile următoare, vă prezentăm argumentele pro și contra pentru fiecare opțiune: Contra • Dacă specialistul vostru OMS va Online Marketing Specialist (OMS) pleca din compania voastră, va trebui să propriu angajați și să formați unul nou. Aceasta va lua ceva timp și bani pentru a obține Pro: aceleași rezultate pe care le-a avut

32

nr. 39/2015, www.todaysoftmag.ro


startups

TODAY SOFTWARE MAGAZINE

specialistul anterior; industrii și pot utiliza această cunoaștere • Este dificil, dacă nu chiar imposibil pentru a îmbunătăți rezultatele voastre să aveți un Online Marketing Specialist în afacere; care să posede toate abilitățile de care • Veți beneficia de instrumente veți avea nevoie pentru a implementa îmbunătățite (precum rapoarte, analize planul vostru de marketing online: referitoare la industrie, etc.), pe care un HTML, design, SEO, campanii Pay Per specialist marketing intern nu le poate Click, Social Media Marketing, realidezvolta de unul singur; zarea blogului, marketing prin email, • Plătiți doar pentru serviciile de care Analitică, CRO, etc.; beneficiați, fără taxe salariale. Aceasta • Unele sarcini vor dura mult timp poate duce la o investiție mai eficientă pentru a fi realizate, din cauza curbei de pe termen lung; învățare; • Dacă agenția are și alte capabilități • Veți avea parte de o singură peronline, aceasta își completează actispectivă pentru prezența voastră online, vitatea de marketing online prin iar aceasta poate duce la un deficit de valorificarea acestora, ajutându-vă și creativitate; mai mult. • Veți plăti multe taxe extra-salariu și beneficii. Contra • Specialistul în Online Marketing Marketing Agency de la agenție nu va ajunge să cunoască afacerea voastră atât de bine precum un Pro OMS intern. • Aveți o echipă la dispoziție, care poate acoperi tot ce este nevoie pentru După cum puteți vedea, există anumarketingul vostru online; mite avantaje și dezavantaje pentru ambele • Specialiștii în Online Marketing de opțiuni. Dar este într-adevăr necesar să la agenție au o bună cunoaștere a altor faceți o alegere? Adevărul este că aceste

două opțiuni nu se exclud neapărat una pe cealaltă. Este o practică bună să aveți un Specialist Marketing intern sau un Manager de Brand care să coordoneze colaborarea cu Agenția de Marketing. Acest lucru va ajuta compania voastră să obțină ce e mai bun din ambele părți. Dacă aveți o afacere care își permite să aibă propria sa echipă de marketing online (între 2 și 6 specialiști, cel puțin), nu numai un singur online marketing specialist, atunci o agenție de marketing vă poate ajuta cu o perspectivă din exterior referitoare la modul în care vă puteți îmbunătăți tacticile și strategia de marketing online. Sfatul nostru este să alegeți înțelept și să aflați toate opțiunile voastre. Încercați să nu ratați oportunitățile de a vă dezvolta prezența online.

www.todaysoftmag.ro | nr. 39/septembrie, 2015

33


educație

Cum să ne dezvoltăm nivelul personal de fericire

C

âți dintre noi nu ne dorim: performanțe mai bune la locul de muncă, relații interpersonale mai puternice, mai puține simptome psihologice negative, un nivel ridicat de comportamente prosociale? Toate acestea sunt asociate cu un grad ridicat de fericire. Dar oare cum putem să ne dezvoltăm nivelul personal de fericire pe termen lung? Vă propunem câteva sugestii inspirate din literatura de specialitate. Cristina Vâjâean

cristina.vajaean@happy-employees.eu Research Specialist @ Azimut Happy Employees

Știați că... Nivelul de fericire este influențat de: • Factori genetici- 50%; • Activitățile noastre- 40%; • Circumstanțe de viață-10%;

și încercând noi exerciții; • să înțelegem relevanța și scopul lor, astfel încât să încercăm să ne păstrăm motivația în a le aplica; • să alegem acele activități care ni se potrivesc .

Pe de altă parte, activitățile pe care noi le facem au cel mai mare potențial în Cum putem face acest lucru? a dezvolta fericirea pe termen lung. • Exprimându-ne emoțiile pozitive ori de câte ori avem ocazia. Ce putem face concret? • Trăind în prezent și bucurânduChiar dacă literatura poate veni cu ne de momentele fericite, atunci când se sfaturi științifice și utile pe care le vom întâmplă. prezenta imediat, depinde foarte mult și • Am pr imit o veste bună? de noi să: Sărbătorim o reușită? Haideți să o • fim constanți și să încercăm să apliîmpărtășim cu colegii! căm aceste exerciții ori de câte ori avem • Imaginându-ne cum ar arăta ocazia, pentru o perioadă cât mai înde,,our best possible selves’’- Știm care lungată de timp; sunt scopurile noastre, ce ne motivează • să nu fim monotoni în alegerile noassau cum arată sinele nostru în cel mai tre, diversificând repertoriul activităților dorit scenariu al vieții noastre?

34

nr. 39/2015, www.todaysoftmag.ro


educație

TODAY SOFTWARE MAGAZINE Chiar dacă lucrurile nu vor fi mereu roz, activitățile pe care noi le alegem au cel mai mare impact asupra fericirii noastre. Așadar, putem să ne îmbunătățim calitatea vieții noastre personale și profesionale și să ne bucurăm, totodată de: • Rezultate mai performante la job; • Relații interpersonale mai puternice; • Mai puține sentimente negative; • Un nivel ridicat de comportamente prosociale. Mult succes!

În acest sens, este recomandat să ne facem o listă care să ne ajute să răspundem la aceste întrebări. Astfel, vom putea să ne ordonăm scopurile și să înțelegem mai bine etapele pe care trebuie să le parcurgem pentru a ajunge acolo. Ex: Vreau să fiu un tester de succes Definește foarte clar ce înseamnă “de succes”. Imaginează-ţi că ai atins acest scop! Cum te simţi? Ce gândeşti? Defineşte clar care sunt paşii planului tău de acţiune: 1. ............. 2. ............. • Fiind recunoscători- astfel, putem să apreciem mai bine momentele fericite și să învățăm din experiențele mai puțin plăcute • Axându-ne pe punctele noastre forte. Este important să le identificăm și mai apoi, ne-ar ajuta să ne implicăm în activități care să ne pună în valoare aceste calități. Mai mult, acest lucru ne ajută să selectăm acele calități pe care vrem să le dezvoltăm.

www.todaysoftmag.ro | nr. 39/septembrie, 2015

35


contabilitate

Taxe PFA 2016 - varianta aprobată

Î

n numărul 35 al Today Software Magazine vă informam asupra unor modificări fiscale ce se preconizau să intervină în modul de taxare a veniturilor din activități independente, așa cum erau ele prevăzute în varianta de proiect de modificare a Codului fiscal, aflată în dezbatere la acel moment.

Ioana Varga

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

Având în vedere faptul că, în cele din urmă, după îndelungi dezbateri și reexaminări în Parlament, în 10 septembrie a fost publicată varianta finală a Noului Cod Fiscal, am considerat oportun să reluăm analiza asupra modificărilor și să vă prezentăm concluziile, a ceea ce e important să știți pentru bugetul vostru în 2016. Precizăm faptul că, deși varianta finală a Codului Fiscal face referire și la schimbări ce vor intra în vigoare începând cu 2017, în opinia noastră, este prematur să discutăm despre ele, având în vedere tendința evidentă de modificare continuă a oricărei reguli și prevederi.

Contribuție obligatorie la CAS

În prezent, persoanele fizice care realizează venituri din desfăşurarea activităţilor independente nu datorează contribuţii la sistemul de pensii pentru aceste venituri, dacă mai realizează şi venituri din salarii. Începând cu 2016, se introduc în categoria asiguraților obligatorii la sistemul de pensii și aceste persoane. Această modificare

36

nr. 39/2015, www.todaysoftmag.ro

cu impact important în activitatea fiecărei persoane fizice ce obține venituri din activități independente s-a menținut din faza de proiect până în cea finală, iar acum putem discuta concret despre modul în care va fi pusă în practica, oferindu-vă în cuprinsul articolului răspunsuri la câteva întrebări esențiale.

Cum se stabilește baza de calcul lunară?

Astfel, pentru persoanele fizice care realizează venituri din activități independente în sistem real, baza lunară de calcul al CAS, o constituie echivalentul a 35% din câștigul salarial mediu brut în vigoare pentru anul 2016. Astfel se va calcula și plăti anticipat CAS la această bază, iar în anul 2017, odată cu depunerea declarației privind veniturile realizate în 2016, se va recalcula baza lunară și aceasta va fi constituită din diferența între venitul brut realizat și cheltuielile efectuate în scopul desfășurării activității, exclusiv cheltuielile cu CAS, raportată la numărul de luni de activitate


educație din anul 2016. Baza lunară NU poate fi mai mică decât echivalentul a 35% din câștigul salarial mediu brut în vigoare pentru 2016 și nici mai mare decât echivalentul a de 5 ori acest câștig. Pentru cei care realizează venituri din activități independente în baza normelor anuale de venit, se aplică aceleași plafoane minime și maxime. Pentru persoanele care realizează venituri pe baza normelor de venit, baza lunară de calcul a CAS o reprezintă valoarea lunară a normei raportată la numărul de luni în care se desfăsoară activitatea și nu poate fi mai mică decât 35% din câștigul salarial mediu brut valabil pentru 2016 și nici mai mare decât de 5 ori acest câștig.

Cine nu va datora CAS anticipat în 2016? NU vor datora plăți anticipate persoanele fizice care în anul anterior (2015) au realizat venituri în sistem real sub nivelul plafonului minim. Nu vor datora plăți anticipate persoanele fizice pentru care, valoarea lunară a normelor de venit în 2015 nu depășește 35% din câștigul salarial mediu brut.

Care este cota obligatorie de CAS pentru 2016?

Cota obligatorie este de 10.5%, aplicată asupra bazei de calcul anticipată sau definitive. Se poate OPTA pentru cota integrală de 26.3%, prin depunerea unei cereri până la 31.01.2016 pentru cei ce au avut activitate în 2015 sau în 30 de zile de la începerea activității pentru cei ce-și înființează activitatea în cursul anului 2016. Opțiunea de a plăti 26.3 % se menține pentru tot anul fiscal și totodată se consideră reînnoită pentru fiecare an în care nu se solicită revenirea la cota individuală. Pentru că nu cunoaștem încă valoarea câștigului salarial mediu brut pentru 2016, luăm în calcul valoarea câștigului salarial mediu brut în 2015 și anume 2,415 RON, pentru a putea exemplifica concret modul de calcul și impactul acestei contribuții. Venit salarial mediu brut 2015 = 2,415 RON Plafon minim lunar pentru plăți anticipate: 35% * 2,415 = 845 RON Cota CAS obligatorie = 10.5% Valoare l CAS lunar minim: 10.5% * 845 = 89 RON Plafon maxim lunar pentru plăți finale: 5 * 2,415 = 12,075 RON Valoare CAS lunar maxim: 10.5% * 12,075 = 1,268 RON

TODAY SOFTWARE MAGAZINE Din acest mod de stabilire a bazei de calcul finală pentru CAS distingem două variante: 1. Dacă, odată cu regularizarea aceasta, se constată că venitul a fost sub nivelul plafonului minim, contribuția plătită anticipat în anul 2016 nu se restituie, fiind luată în calcul la stabilirea stagiului de cotizare și a punctajului de pensionare, iar în anul 2017 nu vor avea obligația plăților anticipate pentru CAS. 2. Dacă, odată cu regularizarea se constată că venitul a fost superior plafonului maxim de 5 ori câștigul salarial mediu brut, baza de calcul nu poate fi mai mare decât acest nivel, iar în 2017 se datorează în continuare plăți anticipate în contul CAS (urmează să vedem din Normele de aplicare dacă baza de calcul a plăților anticipate o va constitui venitul realizat în 2016 sau tot plafonul minim de 35% din câștigul salarial mediu brut pentru 2017.

Contribuția pentru CASS Referitor la contribuția la sănătate, proiectul prevedea propunerea privind efectuarea regularizării anuale a CASS pentru toate veniturile obținute de persoana fizică, titular al PFA. Astfel, în anul următor, organul fiscal ar fi calculat baza anuală de calcul, ca sumă de baze anuale de calcul asupra cărora se datorează CASS. Iar această bază anuală nu putea depăși plafonul anual maxim reprezentând valoarea a de 5 ori câştigul salarial mediu brut înmulțit cu 12 luni (plafon anual pentru anul 2015: 144,900 lei). Din păcate, această propunere privind regularizarea nu s-a aprobat decât începând cu 2017, deci în 2016 în continuare se va datora contribuție la sănătate calculată asupra unei baze reprezentată de diferența pozitivă dintre venitul brut și cheltuielile efectuate în scopul desfășurării activității independente, exclusiv cheltuielile cu CASS pentru cei ce obțin venituri din activități independente în sistem real. Pentru persoanele fizice care realizează venituri din activități independente pe bază de norme de venit, baza lunară de calcul a CASS este valoarea anuală a normei, raportată la numărul de luni de activitate, pe fiecare sursă de venit. Proiectul prevedea de asemenea o modificare favorabilă și anume: eliminarea condiției privind plafonul minim reprezentând valoarea unui salariu minim brut pe ţară pentru stabilirea bazei lunare de calcul a contribuției. Astfel, persoanele care nu realizau venituri nu ar mai fi avut obligația plății contribuției,

www.todaysoftmag.ro | nr. 39/septembrie, 2015

37


contabilitate Taxe PFA 2016 - varianta aprobată iar cei care realizau venituri sub plafon, urmau să plătească contribuția asupra venitului efectiv realizat. Din păcate varianta aprobată nu doar că nu a preluat această propunere din conținutul proiectului, dar dimpotrivă, prevede extinderea bazei de aplicare a contribuției de sănătate și asupra persoanelor fizice fără venituri (de orice fel: salarii, pensii, activități independente, cedarea folosinței bunurilor, investiții, agricultură, alte surse etc.). Concret, persoanele fără venituri DATOREAZĂ LUNAR, CASS, prin aplicarea cotei de 5.5% asupra valorii salariului minim brut pe țară.

Cluj-Napoca

Second Edition Oct 14, 2015 | Golden Tulip Ana Dome Hotel

Speakeri Jacqui Banaszynski Are o experiență de peste 30 de ani ca reporter și editor în presa americană – a scris de pe toate cele șapte continente, inclusiv Antarctica. Seria „AIDS in the Heartland”, povestea unui cuplu de fermieri gay bolnavi de SIDA, i-a adus în 1988 premiul Pulitzer. În prezent, predă la Missouri School of Journalism, e editor la Poynter Institute și trainer pentru jurnaliști din toată lumea.

The Power of Storytelling

Impozit pe venit Există în varianta aprobată a Noului Cod Fiscal câteva modificări și din punctul de vedere al impozitului pe venit, dintre care cele mai relevante, în opinia Spunem povești ca să putem trăi, noastră sunt: ca să ne vindecăm, ca să ne amintim, ca să vindem, ca să • modificarea perioadei de reportare conducem. Vino să-i cunoști pe a pierderii fiscale de la 5 ani la 7 ani, unii dintre cei mai buni cunoscători iar referitor la acest aspect vă subliniem ai mecanismelor care fac poveștile faptul că, această reportare este admisă să funcționeze. doar în ceea ce privește impozitul pe venit nu și contribuția de sănătate; • cuantumul deductibil al cheltuielilor cu cotizații plătite asociaților Partener Platinum Parteneri Gold profesionale se modifică de la 2% aplicată bazei de calcul în prezent, la 4,000 EUR maxim; • deducerea cheltuielilor reprezentând contribuții sociale obligatorii se face de către organul fiscal competent la recalcularea venitului net final sau a pierderii nete anuale; Analizând aceste noi tendințe fiscale referitoare la taxarea veniturilor din activități independente, concluzia noastră este că se urmărește eliminarea treptată a acestor forme de organizare a unor activități, un asemenea nivel de taxare nu poate fi susținut pe termen lung de către un profesionist. Va exista cu siguranță o „orientare” spre celelalte forme de muncă și organizare, cum ar fi contracte de muncă, drepturi de autor, și probabil în final microîntreprinderi. Aceste decizii de schimbare a strategiei de funcționare trebuie luate însă în perfectă cunoștintă de cauză a tuturor efectelor ce intervin, printr-o analiză comparativă concretă și corectă, pe baza unui buget estimat de venituri și cheltuieli rezultate din activitatea pe care o desfășurați.

38

nr. 39/septembrie, 2015 | www.todaysoftmag.ro

Înscrieri pe www.thepowerofstorytelling.org/cluj

Chris Jones Scrie pentru Esquire US și ESPN The Magazine și e unul dintre vârfurile jurnalismului narativ. A câștigat două premii la National Magazine Awards: pentru „Home”, povestea a doi astronauți blocați în spațiu, și „The Things that Carried Him”, care reconstituie călătoria trupului unui soldat ucis în Iraq.

Alex Gâlmeanu Unul dintre cei mai importanți fotografi români, a publicat în majoritatea revistelor din România și a fotografiat pentru campanii publicitare naționale și internaționale. E interesat de istoria fotografiei și poveștile spuse de fotografiile de arhivă, experimentează și caută constant noi modalități de expresie.

Starlee Kine Om de radio dar nu numai, este producătorul Mystery Show, unul dintre cele mai populare podcasturi de azi. A produs pentru This American Life și a scris pentru The New York Times, New York Times Magazine și Capital New York. E unul dintre inovatorii formei: a spus povești pe tocătoare de lemn, în benzi desenate și pe post-ituri animate.

Dragoș Bucurenci Dragoș e trainer de comunicare, cu peste 1.000 de manageri instruiți în public speaking și storytelling. A construit ONGurile Salvați Dunărea și Delta și MaiMultVerde, a scris pentru ziare și reviste, a produs și prezentat emisiuni TV. După un MBA la Stanford, a fost consilierul de comunicare al Comisarului European pentru Politici Regionale.

Partener Silver


Testează-ți abilitățile

programez.ro

În curând


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.