today software magazine n39/2015

40
T O D AY SOFTWARE Nr. 39 • Septembrie 2015 • www.todaysoftmag.ro • www.todaysoftmag.com MAGAZINE 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 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 Cluj IT Days 2015 Agile Humanum Est

Upload: sergiucebotari

Post on 08-Dec-2015

27 views

Category:

Documents


4 download

DESCRIPTION

Today Software Magazine N39/2015

TRANSCRIPT

Page 1: Today Software Magazine N39/2015

No. 36 • June 2015 • www.todaysoftmag.ro • www.todaysoftmag.com

TSM T O D A YS O F T WA R E

Nr. 39 • Septembrie 2015 • www.todaysoftmag.ro • www.todaysoftmag.com

M AG A Z I N E

Confernța SmartWeb 2015

Specialist de marketing onlinesau 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

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

Cluj IT Days 2015

Download fromWindows StoreDownload fromWindows Store

Agile Humanum Est

Page 2: Today Software Magazine N39/2015

09:00 Co�ee & Registration09:30 Opening Remarks Cluj IT Cluster & Ovidiu Mățan (Organizer of IT Days)10:00 Vector Watch in the Context of Wearable Fashion Trends Rareș Florea (Vector Watch)10:40 Innovation in Product Development and Future of Work Christoph Steindl (CEO Catalysts So�ware)

11:00 Co�ee & Networking Break11:30 Beyond reality. Virtual Reality. �e future of gaming and information visualization Robert Mureșan (CEO Exosyphen)12:00 �e Power of Play Simona Bonghez (CEO Colors in projects)12:30 Launch of programez.ro Ovidiu Mățan (TSM) and Vlad Derdeicea (subsign)13:00 Lunch Break

November 24 November 25

Local Product Launches

Trends & Leadership Sessions Startups & Entrepreneurship

Startups & Entrepreneurship

ManagementJava

Big Data Automated testing

14:00 Work with Hundreds of Hot Terabytes in JVMs Peter Lawrey (Higher Frequency Trading)15:00 Be Fast, Be O�-JVM, Be Chronicle-Queue Vasile Mihali (AROBS)

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

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

14:00 Let’s “GamEventify”! Adina Grigoriu (Color in projects) (Higher Frequency Trading)14:30 Dan Suciu (3Pillar Global)

15:00 Building a Strong Employer Brand through Organizational Culture Cristian Philipp (Essential Training and Consulting)15:30 Alexandru Bolboacă (Mozaic Works)

16:00 Pizza break

16:20 Selenium WebDriver - patterns for maintanability Vasile Pop (Intel)16:50 Coming soon

17:00 Coming soon17:50 Networking & wine

Hands on LabResearch

HR & Management Hands on Lab

14:00 Using arti�cial intelligence for automatizing so�ware development Răzvan Florian (Romanian Institute of Science and Technology)14:30 Coming soon

15:00 Coming soon

15:30 Coming soon16:00 Pizza break

16:20 Andreea Pârvu (Endava)16:50 E usor să integrezi noii tineri în �rme IT? Dan Ionescu (Danis)17:20 Coming soon17:50 Networking & wine

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

15:00 Creating things with a 3D printer Mihai Oltean (Babeș-Bolyai University)15:30 Coming soon16:00 Pizza break

16:20 Coming soon

16:50 Coming soon17:00 Coming soon17:50 Networking & wine

Software Architecture

.NET

09:00 Co�ee & Registration09:30 Driving innovation –TechLeague Diana Tîrnovan (Accesa)10:10 Growth Hacking and Lean Canvas Christoph Steindl (CEO Catalyst So�ware)10:40 Șerban Țîr (CTO Gemini Solutions)11:10 Co�ee & Networking Break

11:30 Seedfortech Mircea Vădan (Fortech)12:00 Coming soon12:30 Local startup pitches 13:00 Lunch Break

09:00 Co�ee & Registration09:30 Sergiu Damian (iQuarc)

10:10 What is Reactive Programming and why you should care Robert Cristian (3Pillar Global)10:40 Coming soon11:10 Co�ee & Networking Break

11:30 Radu Vunvulea (iQuest)

12:00 Coming soon12:30 Coming soon

13:00 Lunch Break

Peter LawreyCEO at Higher Frequency Trading

Diana TîrnovanAccesa

Cristian PhilippEssential Training and Consulting

OrganiserPartners

Șerban ȚîrCTO Gemini Foundry

Rareș FloreaVector Watch

Sergiu DamianSoftware consultant

Conf. Dr. Mihai OlteanBabeș Bolyai University

Dan Suciu, PhD3Pillar Global

Innovation, entrepreneurship and technologiesVenue: Cluj Arena, conference hall, 24-25 November 2015, Cluj-Napoca

www.itdays.ro - 2 days access, 80 euro + TVA

Robert MureșanCEO Exosyphen

Vlad DerdeiceaSubsign

Simona BonghezColors in Projects

Mircea Vădanclujstartups.com

Christoph Steindl CEO Catalysts

Andreea PârvuEndava

Tudor MărghidanuYardi România

Vasile PopIntel România

Vasile MihaliArobs

Radu VunvuleaiQuest

Page 3: Today Software Magazine N39/2015

6Cluj IT Days

2015 Ovidiu Măţan

8SmartWeb conference 2015

Alexandru Botez

9Conferința danubiană JCI

- Smart Cities Stelian Burduhos

12Agile Humanum Est

Dan Suciu

15Designul de API -

studiu de caz Andrada Demian

18 Low latency FIX engine

in Java Peter Lawrey

20jOOQ, pentru simplificarea

integrării SQL-ului în JavaSilviu Dumitrescu și Diana Bălan

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

24BDD marca CucumberIndrie Sergiu

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

30Codul pentru un spatiu plin de entuziasmAlexandra Banu

32 Specialist de marketing onlinesau agenție de maketingCălin Biriș

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

36 Taxe PFA 2016 – varianta aprobată Ioana Varga

09:00 Co�ee & Registration09:30 Opening Remarks Cluj IT Cluster & Ovidiu Mățan (Organizer of IT Days)10:00 Vector Watch in the Context of Wearable Fashion Trends Rareș Florea (Vector Watch)10:40 Innovation in Product Development and Future of Work Christoph Steindl (CEO Catalysts So�ware)

11:00 Co�ee & Networking Break11:30 Beyond reality. Virtual Reality. �e future of gaming and information visualization Robert Mureșan (CEO Exosyphen)12:00 �e Power of Play Simona Bonghez (CEO Colors in projects)12:30 Launch of programez.ro Ovidiu Mățan (TSM) and Vlad Derdeicea (subsign)13:00 Lunch Break

November 24 November 25

Local Product Launches

Trends & Leadership Sessions Startups & Entrepreneurship

Startups & Entrepreneurship

ManagementJava

Big Data Automated testing

14:00 Work with Hundreds of Hot Terabytes in JVMs Peter Lawrey (Higher Frequency Trading)15:00 Be Fast, Be O�-JVM, Be Chronicle-Queue Vasile Mihali (AROBS)

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

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

14:00 Let’s “GamEventify”! Adina Grigoriu (Color in projects) (Higher Frequency Trading)14:30 Dan Suciu (3Pillar Global)

15:00 Building a Strong Employer Brand through Organizational Culture Cristian Philipp (Essential Training and Consulting)15:30 Alexandru Bolboacă (Mozaic Works)

16:00 Pizza break

16:20 Selenium WebDriver - patterns for maintanability Vasile Pop (Intel)16:50 Coming soon

17:00 Coming soon17:50 Networking & wine

Hands on LabResearch

HR & Management Hands on Lab

14:00 Using arti�cial intelligence for automatizing so�ware development Răzvan Florian (Romanian Institute of Science and Technology)14:30 Coming soon

15:00 Coming soon

15:30 Coming soon16:00 Pizza break

16:20 Andreea Pârvu (Endava)16:50 E usor să integrezi noii tineri în �rme IT? Dan Ionescu (Danis)17:20 Coming soon17:50 Networking & wine

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

15:00 Creating things with a 3D printer Mihai Oltean (Babeș-Bolyai University)15:30 Coming soon16:00 Pizza break

16:20 Coming soon

16:50 Coming soon17:00 Coming soon17:50 Networking & wine

Software Architecture

.NET

09:00 Co�ee & Registration09:30 Driving innovation –TechLeague Diana Tîrnovan (Accesa)10:10 Growth Hacking and Lean Canvas Christoph Steindl (CEO Catalyst So�ware)10:40 Șerban Țîr (CTO Gemini Solutions)11:10 Co�ee & Networking Break

11:30 Seedfortech Mircea Vădan (Fortech)12:00 Coming soon12:30 Local startup pitches 13:00 Lunch Break

09:00 Co�ee & Registration09:30 Sergiu Damian (iQuarc)

10:10 What is Reactive Programming and why you should care Robert Cristian (3Pillar Global)10:40 Coming soon11:10 Co�ee & Networking Break

11:30 Radu Vunvulea (iQuest)

12:00 Coming soon12:30 Coming soon

13:00 Lunch Break

Peter LawreyCEO at Higher Frequency Trading

Diana TîrnovanAccesa

Cristian PhilippEssential Training and Consulting

OrganiserPartners

Șerban ȚîrCTO Gemini Foundry

Rareș FloreaVector Watch

Sergiu DamianSoftware consultant

Conf. Dr. Mihai OlteanBabeș Bolyai University

Dan Suciu, PhD3Pillar Global

Innovation, entrepreneurship and technologiesVenue: Cluj Arena, conference hall, 24-25 November 2015, Cluj-Napoca

www.itdays.ro - 2 days access, 80 euro + TVA

Robert MureșanCEO Exosyphen

Vlad DerdeiceaSubsign

Simona BonghezColors in Projects

Mircea Vădanclujstartups.com

Christoph Steindl CEO Catalysts

Andreea PârvuEndava

Tudor MărghidanuYardi România

Vasile PopIntel România

Vasile MihaliArobs

Radu VunvuleaiQuest

Page 4: Today Software Magazine N39/2015

4 nr. 39/2015, www.todaysoftmag.ro

Ș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 condam-nă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 eco-sistem 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ă reco-mandăm articolul despre ce înseamnă PFA în 2016.

Ovidiu MăţanFondator Today Software Magazine

Ovidiu Măţ[email protected]

Editor-in-chief Today Software Magazine

editorial

Page 5: Today Software Magazine N39/2015

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

Lista autorilorRedacţia Today Software Magazine

Fondator / Editor in chief: Ovidiu Mățan [email protected]

Graphic designer: Dan Hădărău [email protected]

Copyright/Corector: Emilia Toma [email protected]

Traducător: Roxana [email protected]

Reviewer: Tavi Bolog [email protected]

Contabil : Delia [email protected]

Programator junior: Alexandru Diniș[email protected]

Marketing specialist și tehnoredactor: Ana-Maria Bivol

[email protected]

Tipar realizat de Daisler Print House

Produs de Today Software Solutions SRL

str. Plopilor, nr. 75/77Cluj-Napoca, Cluj, [email protected]

www.todaysoftmag.rowww.facebook.com/todaysoftmag

twitter.com/todaysoftmag

ISSN 2284 – 6352

Copyright Today Software Magazine

Reproducerea parțială sau totală a articolelordin revista Today Software Magazine

fără acordul redacției este strict interzisă.

www.todaysoftmag.rowww.todaysoftmag.com

Ovidiu Măţ[email protected]

Editor-in-chief Today Software Magazine

Alexandru [email protected]

Web Developer @ Gemini Solutions

Stelian [email protected] Director @ Danube Conference Membru @ JCI Cluj

Dan [email protected] Director of Delivery @ 3Pillar Global

Andrada Demian [email protected] Developer @ Betfair

Peter Lawrey [email protected] CEO @ Higher Frequency Trading Ltd

Silviu Dumitrescu [email protected] Engineer manager @Telenav

Diana Bălan [email protected] Java developer @ Telenav

Florin [email protected]

Software developer @ Telenav

Gabriela [email protected] Map analyst@ Telenav

Mihai [email protected]

Software developer @ Telenav

Sergiu [email protected] Senior Software Engineer @ iQuest Group

Monica Raț[email protected] Marketing Specialist @ Altom

Alexandra Banu [email protected] Marketing & PR Responsible @ COS

Călin Biriș [email protected] Digital Director @ Loopaa

Cristina Vâjâ[email protected]

Research Specialist@ Azimut Happy Employees

Ioana [email protected] Expert contabil Managing Partner @ A&I Consulting

Page 6: Today Software Magazine N39/2015

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

eveniment

Cluj IT Days 2015

Cluj 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 aces-tor prezentări:

• Vector Watch – unul dintre cele mai ambițioase produse românești, smartwatch-ul românesc, o apariție ine-dită pe piața românească.

• Un pr im demo dezvoltat pe 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 realita-tea 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ă tutu-ror programatorilor.Vlad Derdeicea de la Subsign este invitatul nostru, care va vorbi despre cum a fost creat vizual întregul concept.

• Valorificarea potențialului crea-tiv din cadrul unei firme precum și importanța modului de lucru vor fi pre-zentate 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Începem această secțiune cu prezen-

tarea lui Peter Lawrey, invitatul special

ș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 Chronicle-Queue, 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.

ManagementÎn acest domeniu, veți avea ocazia să

îi întâlniți pe cei care au fost aproape și au susținut revista TSM de-a lungul timpului. Adina Grogoriu, colega Simonei Bonghez, pe care o știți probabil de la trainingurile de PMP va vorbi despre “GamEventify”!, adăugarea conceptului de gamification în conferințe și evenimente. Un concept pe care îl veți putea explora în cadrul

1 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 /

new_java_champion_peter_lawrey

2 http://vanillajava.blogspot.ro

3 http://chronicle.software

4 https://github.com/OpenHFT

workshop-ului centrat asupra acestui con-cept 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 DataUn subiect la modă în zilele acestea.

Nu puteam să nu avem o secțiune ori-entată 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, pentru ca la final Daniel Sârbe va vorbi despre machine learning și conexiunea cu big data.

TestareVom analiza Selenium Webdriver din

perspectiva lui Vasile Pop (Vic). Restul slot-urilor sunt încă deschise, orice propu-nere va fi luată în considerare.

Încheiem astfel prima zi a evenimentu-lui cu o sesiune de socializare și un pahar de vin.

Page 7: Today Software Magazine N39/2015

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

TODAY SOFTWARE MAGAZINEprogramare

Startup-uri și antreprenoriatZona de startup-uri românești va

expune două programe diferite ca abor-dare, 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 zil-nică din acest domeniu. Christoph Steindl, CEO Catalyst, va aborda dintr-o perspec-tivă 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.

CercetarePrin 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 posibili-tatea 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 LabDupă succesul de anul trecut a pre-

zentă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

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ău-gate în curând în program.

Motivație pentru participareIT Days se dorește a fi o celebrare fes-

tivă a activității întregului an împreună cu întreaga comunitate IT clujeană, dat fiind că revista Today Software Magazine orga-nizează 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 ridi-cat. Î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 pro-gramatori urmați de manageri și tester-i. De altfel ponderea domeniului ales pentru prezentări urmează acest trend.

Workshop-uri

Java PerformanceLa fel ca și în anii trecuți, cu o zi înainte

de conferință, în 23 noiembrie, organizăm două workshop-uri. Unul este workshop-ul 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,

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 folo-sind PM Galaxy Boardgame, reprezintă o introducere în project management. Jocul va ghida participanții prin toate etapele de dezvoltare a unui proiect: inițializare, pla-nificare, 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

ConcluzieSper 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.

Ovidiu Măţ[email protected]

Editor-in-chief @ Today Software MagazineOrganizator @ Cluj IT Days

Page 8: Today Software Magazine N39/2015

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

Pr int re numele mar i p e c are part icipanț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 par-ticipa 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 domeni-ile 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 dez-voltă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 stri-că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 prezen-tare despre animațiile CSS, în care a dat câteva sfaturi și idei în legătură cu folosi-rea și performanța acestora.

A doua parte a zilei a fost deschisă de Soledad Penades cu o prezentare des-pre Web Audio API, axată pe modul cum aceasta poate spori semnificativ performanța aplicației și cum ne oferă posibilitatea să construim unelte sofisti-cate ș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 con-sideră 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ătoa-rea ediție!

SMARTWEB CONFERENCE 2015

Pe 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.

eveniment

Alexandru [email protected]

Web Developer @ Gemini Solutions

Page 9: Today Software Magazine N39/2015

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

Stelian [email protected] Director @ Danube Conference Membru @ JCI Cluj

eveniment

Dezvoltarea 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.

Conferința danubiană JCI - Smart Cities

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 Conference1 ș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țieO 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 îna-inte, 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ări-lor 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 fun-damentale pentru acest proces, nu pot fi înfăptuite peste noapte.”

Avem o propunere îndrăzneață pentru voi: dezbateți cu noi, cu tinerii antrepre-nori, 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

Page 10: Today Software Magazine N39/2015

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

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 ulti-mul 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 aju-torul speakerilor naționali și internaționali, viziunea fiecărui participant și workshop-urile 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, spri-jină JCI Danube Conference și Annual National JCI Convention 2015.

”Misiunea” din spatele JCIJCI 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 probleme-lor locale. De aceea, noi considerăm că modul cel mai bun de a celebra 100 de

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 tutu-ror 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 Cluj-Napoca. 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

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 pen-tru 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.

Conferința danubiană JCI - Smart Cities

Page 11: Today Software Magazine N39/2015

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

TODAY SOFTWARE MAGAZINE

Transylvania Java User GroupComunitate dedicată tehnologiilor Java.Website: www.transylvania-jug.orgData înfiinţării: 15.05.2008 / Nr. Membri: 610 / Nr. Evenimente: 47

Comunitatea TSMComunitate construită în jurul revistei Today Software Magazine.Websites: www.facebook.com/todaysoftmag www.meetup.com/todaysoftmag www.youtube.com/todaysoftmagData înfiinţării: 06.02.2012 /Nr. Membri: 2424/Nr. Evenimente: 32

Cluj Business AnalystsComunitate dedicată analizei de businessWebsite: www.meetup.com/Business-Analysts-ClujData înfiinţării: 10.07.2013 / Nr. Membri: 91 / Nr. Evenimente: 8

Cluj Mobile DevelopersComunitate dedicată tehnologiilor mobileWebsite: www.meetup.com/Cluj-Mobile-DevelopersData înfiinţării: 05.08.2011 / Nr. Membri: 264 / Nr. Evenimente: 17

The Cluj Napoca Agile Software Meetup GroupComunitate dedicată metodelor Agile de dezvoltare software.Website: www.agileworks.roData înfiinţării: 04.10.2010 / Nr. Membri: 437 / Nr. Evenimente: 93

Cluj Semantic WEB MeetupComunitate dedicată tehnologiilor semantice.Website: www.meetup.com/Cluj-Semantic-WEBData înfiinţării: 08.05.2010 / Nr. Membri: 192/ Nr. Evenimente: 29

Romanian Association for Better SoftwareComunitate dedicată oamenilor cu experiență din IT indiferent de tehnologie sau specializare.Website: www.rabs.roData înfiinţării: 10.02.2011 / Nr. Membri: 251/ Nr. Evenimente: 14

Tabăra de testareComunitate 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.roData înfiinţării: 15.01.2012/Nr. Membri: 1243/ Nr. Evenimente: 107

Ne 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.

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-Science-Meetup-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.0facebook.com/events/931928763547194/

Octombrie 3 (Cluj)Coach retreat-facilitated by Dov Tsal Sela, AgileCoach&FunS heriffmeetup.com/The-Cluj-Napoca-Agile-Software-Meetup-Group/events/225419940/

Octombrie 7-8 (București)Internet & Mobile Worldwww.imworld.ro/

Octombrie 7 (Cluj)Fresh start - PHP Clujmeetup.com/PHP-Cluj/events/225555288/

Octombrie 14 (Cluj)The Power of Storytelling − Cluj Editionthepowerofstorytelling.org/cluj/

Octombrie 15-18 (Cluj)JCI Danube Conference & JCI Romania National Convention 2015jciromania.ro/danubeconference//

Comunităţi IT

Page 12: Today Software Magazine N39/2015

12 nr. 39/2015, www.todaysoftmag.ro

Agile Humanum Est

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.

Personal consider valorile și principi-ile 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 per-soană obișnuită cu demonstrațiile specifice științelor exacte. Prin urmare am început să investighez mai îndeaproape beneficiile aduse de Agile echipelor de dezvoltare.

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

În cele ce urmează voi da câteva exem-ple î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.

Natura umană și dezvoltarea soft-uluiExistă 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 tre-buie să ducă la bun sfârșit un lucru și care pare să respecte legea lui Paretto, cunos-cută și sub numele de regula 20/80. Mai precis se pare că echipa depune un efort (aproximativ) constant în 80% din tim-pul 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 con-texte, pentru echipe de diverse dimensiuni

Este 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 [email protected] Director of Delivery @ 3Pillar Global

management

Page 13: Today Software Magazine N39/2015

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

TODAY SOFTWARE MAGAZINE

și configurații, dar care au de realizat o activitate creativă. Și dez-voltarea 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 con-siderat 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 înce-perea 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 presu-pune 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 proiec-telor 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ă activi-tatea 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 pen-tru 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 termi-nată, 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.

Page 14: Today Software Magazine N39/2015

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

management

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 acti-vitatea 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 consul-tant, 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 proiec-tarea 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

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 pro-babil obiectul unui viitor articol. Ce este mai important de înțeles acum este ce am putea face atunci...

...când lucrurile nu mergUnul 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 anu-mite 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.

programareAgile Humanum Est

Page 15: Today Software Magazine N39/2015

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

programare

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 lucru-rile 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 con-sumatorii 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 asu-pra provocărilor de care am avut parte

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 [email protected] Developer @ Betfair

Page 16: Today Software Magazine N39/2015

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

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 folo-site 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 fle-xibilitate. 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 frag-ment 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>

</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 gra-tis) 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 pri-mul 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 tra-tate 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 con-sumatorul 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.

Designul de API - studiu de caz

programareprogramare

Page 17: Today Software Magazine N39/2015

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

TODAY SOFTWARE MAGAZINE

<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()

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 pen-tru 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 ver-siunea anterioară.

ConcluziiDefinirea 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ă.

programare

Page 18: Today Software Magazine N39/2015

18 nr. 39/2015, www.todaysoftmag.ro

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?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 alter-natives which are faster such as support for 8 bit character strings.

The „Generator test” times how long it takes to generate the 214 byte New Order Single FIX message from data which con-tain Strings, and timestamps and write it

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 micro-seconds. On a better tuned server I will still expect there to be interrupts, but they would occur less often.

What is next?The next step is to performance test

integration with Chronicle Journal to see the impact of persistence. Journal

Low latency FIX engine in Java

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

• 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 rea-

ding/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

programare

Peter Lawrey [email protected] CEO @ Higher Frequency Trading Ltd

Page 19: Today Software Magazine N39/2015

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

TODAY SOFTWARE MAGAZINEprogramare

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 signi-ficantly reduce the impact.

What is a FIX Database?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 messa-ges 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 insi-ght 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 opti-mised 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

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.

How to use Chronicle FIX?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 (mea-

suring 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.

ConclusionChronicle 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 persis-tence performs and the database works.

Page 20: Today Software Magazine N39/2015

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: mana-gementul stărilor entităților, moștenire, interogări polimorfice, etc.), acesta per-mite 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 struc-turi predefinite, dar care pot fi modificate și adaptate la nivel de model si accesibili-tate, 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 obiec-tele 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 arti-col 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>

jOOQ, pentru simplificarea integrării

SQL-ului în Java

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

programare programare

Silviu Dumitrescu [email protected] Engineer manager @Telenav

Diana Bălan [email protected] Java developer @Telenav

Page 21: Today Software Magazine N39/2015

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

programare

<name> org.jooq.util.DefaultGenerator </name> <database> <name>org.jooq.util.postgres .PostgresDatabase</name> <includes>.*</includes> <excludes></excludes> <inputSchema>myschema </inputSchema> </database> <target> <packageName> test.generated</packageName> <directory>src/main/java </directory> </target> </generator> </configuration> </plugin> </plugins></build>

Primele două dependențe, jooq și jooq-meta, sunt folosite ca pachete de bază pentru rularea jOOQ, respectiv pentru metada-tele 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 elemen-tele 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.

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:

DSLContext create = DSL.using(conn, SQLDialect.POSTGRES_9_4);

Clasele implicate sunt: DSLContext este interfața ce conține principalele funcționalități pentru obiectul de interogare, iar DSL este un factory pentru diversele tipuri de dialecte;

• crearea interogării este simplă, prin apeluri de metode din obiectul anterior creat;

• rezultatul unei interogări este un Result, asemănător unui ResulSet din JDBC.

Prezentăm mai jos codul integral al acestei aplicații demo:

final String userName = „postgres”; final String password = „fcdss”; final String url = „jdbc:postgresql://localhost:5432/mytests”;

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ă!

Page 22: Today Software Magazine N39/2015

22 nr. 39/2015, www.todaysoftmag.ro

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 actuali-zate regulat și în timp real. În plus, OSM permite detalii mai amănunțite pe hartă, pentru pietoni, cum ar fi alei, trotuare, par-curi, 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.

În ceea ce privește contribuția adusă de Telenav la platforma OSM, a fost mai mult decât binevenită: o echipă speciali-zată în manipularea datelor spațiale din OSM. Cum avem un rol activ în generarea de date pentru hărțile companiei, noi con-struim 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 calita-tea 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 bug-uri care există pe hartă. Căutăm mereu metode noi prin care să putem detecta ero-rile, într-un mod programatic sau vizual.

Iată un exemplu despre cum un carto-graf (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 dupli-carea stratului de noduri și prin selectarea modului de amestecare a straturilor (Layer blending) să fie aprins, făcând ca nodu-rile 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

OSM și Telenav văzute prin ochii unui

analist de hărți

După 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.

programare

Florin [email protected]

software developer @ Telenav

Gabriela [email protected] map analyst @ Telenav

Mihai Iepure

[email protected]

software developer @ Telenav

Silicon Valley - 2007 vs. Now

Page 23: Today Software Magazine N39/2015

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

TODAY SOFTWARE MAGAZINEprogramare

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 cer-cului 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ă cola-borarea cu comunitatea sunt MapRoulette și OSM Tasking Manager. MapRoulette este o abordare prin joc a depanării

bug-urilor OSM; ea transformă proble-mele 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 sar-cini mai multor cartografi.

Câteva dintre proiectele noastre asupra cărora ne concentrăm în prezent sunt: îmbunătățirea hărții străzi-lor 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 admi-nistrative 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 arte-rele 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ă locali-tate în setul lor de date:

Pentru a fi pe aceeași pagină, atributele datelor INEGI trebuie să fie convertite într-un 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 (out-put) 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: supra-punere 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 comunita-tea 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 organi-zate 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/

Page 24: Today Software Magazine N39/2015

24 nr. 39/2015, www.todaysoftmag.ro

Conceptul de BDD sau Behavior-Driven 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

BDDCea mai importantă idee ce trebuie

reținută din acest articol este conceptul de BDD în sine. Behavior-Driven Design nu

înseamnă doar alegerea unui framework de teste relevant și scrierea de teste; pen-tru a reuși să obținem valoare trebuie să înțelegem ideea de bază din spatele acestui proces de dezvoltare software. (Vezi artico-lele [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.

BDD, marca Cucumber

Se 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.

programare

Sergiu [email protected] Senior Software Engineer @ iQuest Group

Page 25: Today Software Magazine N39/2015

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

TODAY SOFTWARE MAGAZINE

Un test CucumberUn 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 featureUn fișier feature este un fișier în format plain, text scris în

limbajul Gherkin, un limbaj lizibil din punct de vedere al busi-ness-ului care permite descrierea comportamentului aplicației într-un format liber.

Mai jos este un exemplu de fișier feature.

Feature: Refund itemScenario: Jeff returns a faulty microwaveGiven Jeff has boght a microwave for $100And he has a receiptWhen he returns the microwaveThen Jeff should be refunded $100

Fișierul feature este compus din cel puțin un scenariu (scena-rio; de fapt un test) care la rândul lui este compus din cel puțin un pas (step). Fișierele feature pot utiliza diferite mecanisme de structură cum ar fi descrieri, comentarii, tag-uri, o zonă comună de inițializare și diferite metode de a pune în parametri pașii unui scenariu.

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_micro-wave_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_micro-wave_for_$(int amountOfMoney) { business.

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 amountOf-Money) { business.refund(amountOfMoney); }

}

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 folosi un mecanism de raportare (prin injectarea unui obiect de tip Scenario) pentru a personaliza raportul de rezultate ale teste-lor prin includerea de text și imagine.

Cod BusinessÎn final, codul din definițiile pașilor va apela codul de busi-

ness al aplicației.

Tool-uriDin punct de vedere al limbajelor de programare, Cucumber

este foarte flexibil, fiind compatibil cu limbajele de programare principale cum ar fi Java, .NET, C++, PHP și altele. Din perspec-tiva Java, există două artefacte disponibile, unul pentru Java 8 și

Page 26: Today Software Magazine N39/2015

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

unul pentru versiunile anterioare. Unele din principalele fra-mework-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 highli-ghting ș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ă pen-tru 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 bene-ficia 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 pro-prietate 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>

#availability #maintainability #supportability #reliability

ITea Afternoon 2nd edition

2015

7-8 October Hotel Plaza Târgu-Mureș

Make your IT Architecture stand out from the crowd!

BDD, marca Cucumber

programare

Page 27: Today Software Magazine N39/2015

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

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>

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

ObservațiiDintr-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 impli-cate folosind limbajul Gherkin, și de a spori lizibilitatea testelor scrise de programatori. Însă, din punct de vedere al programa-torului, 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țe1. https://en.wikipedia.org/wiki/Behavior-driven_development2. http://dannorth.net/introducing-bdd/3. https://cucumber.io/4. https://github.com/cucumber/cucumber/wiki/Gherkin5. http://jbehave.org/reference/stable/index.html

6. http://rspec.info/7. http://www.javacodegeeks.com/2015/04/pitfalls-of-cucumber-adoption.html8. http://www.javacodegeeks.com/2013/12/acceptance-testing-bla-ming-the-tools.html9. coveros.com/background-and-hooks-for-cucumber-jvm/10. https://cucumber.io/docs/reference#doc-string-argument11. http://mkolisnyk.blogspot.ro/2013/03/jbehave-vs-cucumber-jvm-comparison.html12. https://github.com/cucumber/cuke4duke/wiki/maven

Page 28: Today Software Magazine N39/2015

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

Ce 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ă con-stant, profesioniștii au nevoie să fie mereu la curent cu schimbările de paradigmă care au loc în domeniul lor de activitate.

Devino un tester mai bun cu BBST

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.

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 folosi-rea 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 colabo-ratorilor ș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”.

testare

Page 29: Today Software Magazine N39/2015

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

startups

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ă ana-lizeze 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âl-nite 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 ter-menilor întâlniți de-a lungul lecțiilor. Chiar dacă acestea sunt notate, punctajul nu este luat in considerare în evaluarea finală.

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.

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.

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 iden-tificare 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 organi-zate de Altom Consulting.

Monica Rațiu [email protected] Marketing Specialist @ Altom

Page 30: Today Software Magazine N39/2015

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.

Î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 entuzi-asm ș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

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, meto-dele pe care organizațiile de peste tot le pot folosi pentru a-și menține echipele moti-vate și pasionate de ceea ce fac.

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

Codul pentru un spațiu

plin de entuziasm

Din primul moment în care a intrat în contact cu un calculator, încă de la trei-sprezece 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ă.

programare

Alexandra Banu [email protected] Marketing & PR Responsible @ COS

Page 31: Today Software Magazine N39/2015

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

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ă foto-grafiile 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 gra-dual, 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 spiritMature organizationA shared vision

Join our journey!

www.fortech.ro

Page 32: Today Software Magazine N39/2015

32 nr. 39/2015, www.todaysoftmag.ro

marketing

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 Market-ing Agency

În rândurile următoare, vă prezentăm argumentele pro și contra pentru fiecare opțiune:

Online Marketing Specialist (OMS) propriu

Pro:

• 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), spe-cialistul î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 respon-sabilitatea sa.

Contra• Dacă specialistul vostru OMS va

pleca din compania voastră, va trebui să angajați și să formați unul nou. Aceasta va lua ceva timp și bani pentru a obține aceleași rezultate pe care le-a avut

Specialist Marketing Online sau

Agenție Marketing - Ce preferați?

Marketingul 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ă.

Călin Biriș [email protected] Digital Director @ Loopaa

Page 33: Today Software Magazine N39/2015

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

TODAY SOFTWARE MAGAZINEstartups

specialistul anterior;• Este dificil, dacă nu chiar imposibil

să aveți un Online Marketing Specialist care să posede toate abilitățile de care veți avea nevoie pentru a implementa planul vostru de marketing online: HTML, design, SEO, campanii Pay Per Click, Social Media Marketing, reali-zarea blogului, marketing prin email, Analitică, CRO, etc.;

• Unele sarcini vor dura mult timp pentru a fi realizate, din cauza curbei de învățare;

• Veți avea parte de o singură per-spectivă pentru prezența voastră online, iar aceasta poate duce la un deficit de creativitate;

• Veți plăti multe taxe extra-salariu și beneficii.

Marketing Agency

Pro• Aveți o echipă la dispoziție, care

poate acoperi tot ce este nevoie pentru marketingul vostru online;

• Specialiștii în Online Marketing de la agenție au o bună cunoaștere a altor

industrii și pot utiliza această cunoaștere pentru a îmbunătăți rezultatele voastre în afacere;

• Veți beneficia de instrumente îmbunătățite (precum rapoarte, analize referitoare la industrie, etc.), pe care un specialist marketing intern nu le poate dezvolta de unul singur;

• Plătiți doar pentru serviciile de care beneficiați, fără taxe salariale. Aceasta poate duce la o investiție mai eficientă pe termen lung;

• Dacă agenția are și alte capabilități online, aceasta își completează acti-vitatea de marketing online prin valorificarea acestora, ajutându-vă și mai mult.

Contra• Specialistul în Online Marketing

de la agenție nu va ajunge să cunoască afacerea voastră atât de bine precum un OMS intern.

După cum puteți vedea, există anu-mite avantaje și dezavantaje pentru ambele opțiuni. Dar este într-adevăr necesar să 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 specia-list, atunci o agenție de marketing vă poate ajuta cu o perspectivă din exterior referi-toare 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.

Page 34: Today Software Magazine N39/2015

34 nr. 39/2015, www.todaysoftmag.ro

educație

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.

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

Pe de altă parte, activitățile pe care noi le facem au cel mai mare potențial în a dezvolta fericirea pe termen lung.

Ce putem face concret?Chiar dacă literatura poate veni cu

sfaturi științifice și utile pe care le vom prezenta imediat, depinde foarte mult și de noi să:

• fim constanți și să încercăm să apli-căm aceste exerciții ori de câte ori avem ocazia, pentru o perioadă cât mai înde-lungată de timp;

• să nu fim monotoni în alegerile noas-tre, diversificând repertoriul activităților

ș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 .

Cum putem face acest lucru?• Exprimându-ne emoțiile pozi-

tive ori de câte ori avem ocazia.• Trăind în prezent și bucurându-

ne de momentele fericite, atunci când se întâmplă.

• Am pr imit o veste bună? Sărbătorim o reușită? Haideți să o împărtășim cu colegii!

• Imaginându-ne cum ar arăta ,,our best possible selves’’- Știm care sunt scopurile noastre, ce ne motivează sau cum arată sinele nostru în cel mai dorit scenariu al vieții noastre?

Cum să ne dezvoltăm nivelul personal

de fericire

Cristina Vâjâ[email protected]

Research Specialist@ Azimut Happy Employees

educație

Page 35: Today Software Magazine N39/2015

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

TODAY SOFTWARE MAGAZINEeducație

Î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 tre-buie 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.

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 perso-nale ș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!

Page 36: Today Software Magazine N39/2015

36 nr. 39/2015, www.todaysoftmag.ro

Î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.

Având în vedere faptul că, în cele din urmă, după îndelungi dezbateri și reexa-mină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ă pre-zentă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ă discu-tă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 reali-

zează 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 pen-sii și aceste persoane. Această modificare

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 indepen-dente în sistem real, baza lunară de calcul al CAS, o constituie echivalentul a 35% din câștigul salarial mediu brut în vigoare pen-tru 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 recal-cula 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

Taxe PFA 2016 - varianta aprobată

contabilitate educație

Ioana [email protected] Expert contabil Managing Partner @ A&I Consulting

Page 37: Today Software Magazine N39/2015

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

TODAY SOFTWARE MAGAZINEeducație

din anul 2016. Baza lunară NU poate fi mai mică decât echiva-lentul 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 norme-lor 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 pla-fonului 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 RONPlafon minim lunar pentru plăți anticipate: 35% * 2,415 =

845 RONCota CAS obligatorie = 10.5%Valoare l CAS lunar minim: 10.5% * 845 = 89 RONPlafon maxim lunar pentru plăți finale: 5 * 2,415 = 12,075

RONValoare CAS lunar maxim: 10.5% * 12,075 = 1,268 RON

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 sta-giului 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 CASSReferitor la contribuția la sănătate, proiectul prevedea propu-

nerea 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 repre-zentată 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 reali-zează venituri din activități independente pe bază de norme de venit, baza lunară de calcul a CASS este valoarea anuală a nor-mei, 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 reprezen-tâ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,

Page 38: Today Software Magazine N39/2015

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

contabilitate

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 per-soanelor 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ă.

Impozit pe venitExistă în varianta aprobată a Noului

Cod Fiscal câteva modificări și din punc-tul de vedere al impozitului pe venit, dintre care cele mai relevante, în opinia noastră sunt:

• modificarea perioadei de reportare a pierderii fiscale de la 5 ani la 7 ani, iar referitor la acest aspect vă subliniem faptul că, această reportare este admisă doar în ceea ce privește impozitul pe venit nu și contribuția de sănătate;

• cuantumul deductibil al cheltu-ielilor cu cotizații plătite asociaților profesionale se modifică de la 2% apli-cată bazei de calcul în prezent, la 4,000 EUR maxim;

• deducerea cheltuielilor reprezen-tâ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.

Spunem povești ca să putem trăi, ca să ne vindecăm, ca să ne amintim, ca să vindem, ca să conducem. Vino să-i cunoști pe unii dintre cei mai buni cunoscători ai mecanismelor care fac poveștile să funcționeze.

Speakeri

Chris JonesScrie 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âlmeanuUnul 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 KineOm 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ș BucurenciDragoș 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.

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.

Parteneri Gold Partener SilverPartener Platinum

Înscrieri pewww.thepowerofstorytelling.org/cluj

Cluj-NapocaSecond EditionOct 14, 2015 | Golden Tulip Ana Dome Hotel

The Power of Storytelling

Taxe PFA 2016 - varianta aprobată

Page 39: Today Software Magazine N39/2015

Testează-ți abilitățile

În curând

programez.ro

Page 40: Today Software Magazine N39/2015

powered by

sponsori