Numarul 43 - Ianuarie 2016 - Today Software Magazine

Page 1

Nr. 43 2016 • www.todaysoftmag.ro • www.todaysoftmag.com No. 36••Ianuarie June 2015 • www.todaysoftmag.ro • www.todaysoftmag.com

TSM

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

și. De la Zero to RESTful în 4 pa Design de API

Previziuni IT pentru 2016

Marketing prin fereastra digitală Flexibilitate strategică în timpul incertitudinii Logica Fuzzy si mecanisme specifice. O Introducere teoretică TFS ca platformă de colaborare (I) Roku

Frontend Mashup În căutare de talent SymfonyCon 2015 10 noutăți fiscale cu impact pentru antreprenori valabile din 2016 Simplon România te învață să faci aplicații mobile în 3 luni



6 Previziuni IT pentru 2016 Ovidiu Măţan

10 Simplon România Roxana Rugină

12 SymfonyCon 2015 – O simfonie a developer-ilor Radu Murzea

14 Conferința TEDxCluj 2016 Cristian Dascălu

19 TFS ca platformă de colaborare (I) Dorin Cazan

22 Marketing prin “fereastra” digitală. O privire largă asupra lui 2016 Sorina Mone

24 Flexibilitate strategică în timpul incertitudinii Paul Alexandru Tofan

27 Logica Fuzzy și mecanismele specifice. O introducere teoretică Bogdan Mursa

30 Roku Thomas Morris

32 De la Zero la RESTful în patru pași. Design de API Georgiana Gligor

37 Frontend Mashup Raluca Oanca-Boca

39 În căutare de (potențial) talent Mădălina Nastasa

41 10 noutăţi fiscale valabile din 2016 cu impact pentru antreprenori Delia Mircea


editorial

L Ovidiu Măţan

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

a mulți ani! Așa cum se întâmplă de obicei, începutul anului aduce pentru fiecare dintre noi planuri de viitor. Înainte de a vă pune la curent cu proiectele acestui an, vrem să subliniem că dorim să menținem dezvoltarea revistei pe același trend crescător al calității, vizibilității online precum și al organizării evenimentelor lunare de lansare a fiecărui număr. De asemenea, ne preocupă ca în acest an să avem o mai bună comunicare cu colaboratorii revistei. Prime demersuri în acest sens sunt crearea unui loc de discuții online privat și organizarea unor workshop-uri care să ofere cititorilor revistei ocazia unor reale experiențe de învățare. Despre serviciul programez.ro v-am informat și în numărul trecut. Sperăm să îl lansăm în curând și să punem la dispoziția doritorilor posibilitatea de rezolva teste de certificare ale companiilor pentru anumite poziții. Pentru cei ce doresc un preview, acesta este disponibil pe beta.programez.ro. Adăugarea unor rubrici noi în conținutul revistei precum cea de Noutăți și cea de Startup-uri este un obiectiv pe care încercăm să-l îndeplinim chiar din acest număr. O altă schimbare se referă la pagina de comunități, în sensul că vor fi menționate doar cele mai active dintre ele, precizându-se evenimentele organizate de către acestea. Deschidem acest număr cu o serie de opinii asupra evoluției anului 2016 văzută din perspectiva de business, management, UX și machine learning. Flexibilitate strategică în timpul incertitudinii demonstrează că starea de nesiguranță poate oferi avantaje dacă este condiționată de o analiză pertinentă a volatilității businessului. Domeniul tehnic specific IT-ului este reprezentat de o serie de subiecte interesante: o scurtă introducere în Logica Fuzzy și mecanisme specifice, O Introducere teoretică, urmată de un ghid de programare a dispozitivului Roku; TFS ca platformă de colaborare - pentru dezvoltatori cât și nondezvoltatori care propune o soluție pentru colaborarea în cadrul echipei. Continuăm seria de articole de dezvoltare a unei aplicații web folosind ultimele framework-uri în articolul De la Zero to RESTful în 4 pași. Design de API. Tot din această arie face parte și Frontend Mashup. În căutare de (potențial) talent din perspectiva anului 2020 este un articol care creionează în tușe realiste evoluția resurselor umane și implicațiile acesteia în raportul angajat/angajator. Un alt articol foarte util pentru antreprenori și nu numai este 10 noutăţi fiscale valabile din 2016 cu impact pentru antreprenori.

Vă dorim lectură plăcută !!!

Ovidiu Măţan

Founder Today Software Magazine

4

nr. 43/2016, www.todaysoftmag.ro


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

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

Sorina Mone sorina.mone@fortech.ro

Editor-in-chief Today Software Magazine

Marketing manager @Fortech

Roxana Rugină

roxana.rugina@gmail.com

Paul Alexandru Tofan Paul.Tofan@isdc.eu

CEO & co-founder @Simplon Romania

Project Manager @ISDC

Radu Murzea rmurzea@pentalog.fr

Bogdan Mursa mursa.bogdan@yardi.com

PHP Developer @Pentalog

Software Developer @ Yardi

Traducător: Roxana Elena roxana.elena@todaysoftmag.com Reviewer: Tavi Bolog tavi.bolog@todaysoftmag.com Contabil : Delia Mircea delia.mircea@todaysoftmag.com Programator junior: Alexandru Diniș alexandru.dinis@todaysoftmag.com Marketing și tehnoredactor: Ana-Maria Bivol anamaria.bivol@todaysoftmag.com Tipar realizat de Daisler Print House

Cristian Dascălu cristian@clujhub.ro Co-fondator @Cluj Hub Curator & PM @ TEDxCluj

Thomas Morris thomas.morris@3pillarglobal.com

Dorin Cazan dorin.cazan@siemens.com

Georgiana Gligor gb@tekkie.ro

Service specialist @Siemens

Owner @Tekkie Consulting

Delia Mircea delia@contzilla.ro @ Contzilla.ro

Raluca Oanca-Boca ralucaonaca@gmail.com

Roku & Python Software Developer @3Pillar Global

Produs de

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

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

Full Stack Developer @Self-Employed

Mădălina Nastasa madalina.nastasa@happyemployees.eu Sales Development Representative @ Azimut Happy Employees

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

www.todaysoftmag.ro | nr. 43/ianuarie ,2016

5


opinii

Previziuni IT pentru 2016

L

a început de an, toți proiectăm noi planuri și noi obiective, sperând ca noul an să fie unul favorabil îndeplinirii acestora. Dacă unii țin cont de ceea ce spune zodiacul, noi am decis să dăm mai multă credibilitate reprezentanților importanți din comunitatea IT clujeană. De aceea, i-am rugat să ne comunice care sunt previziunile lor referitor la 2016. Din răspunsurile lor nu putem trage decât o concluzie foarte optimistă: anul 2016 va fi unul benefic pentru industria IT!

Ovidiu Măţan

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

6

nr. 43/2016, www.todaysoftmag.ro

Care este perspectiva ta asupra evoluției tehnologiilor Microsoft în 2016?

Cortana vor deveni cu adevărat mai utili prin înțelegerea unor aspecte importante din viața oamenilor, cum ar fi sarcinile la care lucrează și angajamentele pe care și le iau față de alții. Sistemele Big Data vor colecta informații prin dispozitivele IoT și vor influența deciziile legate de sănătate, locuință și angajare, cu analitică predictivă. Distribuția video pe web, va prelua conducerea în defavoarea emisiunilor TV, Radu Ștefan – Microsoft cu o procesare video mai inteligentă în cloud, prin Proiectul Oxford. În final, vom În 2016, tehnologiile Microsoft vor avea experiențe mai bogate pe telefoanele evolua în jurul productivității și a procese- mobile, printr-o tehnologie mai avansată lor business, platforma cloud inteligentă și a camerei de luat vederi. calculatoare mai personale, pentru a crește puterea noii societăți, cu tot mai mulți tineri care își încep primul job într-un mediu virtual mai degrabă decât într-un loc fizic și trecerea de la tehnologia în sine la valorile și potențialul experiențelor umane. Asistenții personali precum


TODAY SOFTWARE MAGAZINE Care este perspectiva ta asupra evoluției project management-ului în 2016?

suplimentară asupra - atentie! - nu a rezultatelor, ci a beneficiilor derivate din rezultatele livrate. La sfârșitul lui ianuarie particip la întâlnirea anuală, strategică a Project Management Institute, de unde mă aștept să vin și cu o direcție stabilită pentru această organizație. Direcțiile de dezvoltare ale PMI se bazează pe o cercetare anuală numită ‘PMI’s Pulse of Profession, al cărei raport ne va fi prezentat cu această ocazie și care se va lansa public în februarie. Să Simona Bonghez – Colors in projects vedem dacă perspectiva mea va fi confirmată la nivel global. Mă aștept să aud M a n a g e m e n t u l d e p r o i e c t s e foarte multe despre Benefits Realization, îndreaptă spre zone noi, direcție expli- vă țin la curent … cabilă în condițiile impuse de economie. Perspectiva businessului câștigă teren în Cum vezi evoluția proiectelor de machine fața disputelor purtate de profesioniști learning în 2016? legate de metodologiile cele mai eficiente. După o oarecare implicare în susținerea abordărilor Agile (care încep să devină mai atractive și pentru alte industrii, nu doar cele legate de IT&C) reprezentanții businessului (managementul organizațiilor, în general) pierd interesul de a sprijini o metodologie sau alta, fie că discutăm de abordări Agile sau tradiționale, interesul lor coagulându-se în zona de obținere de Daniel Sârbe – SDL beneficii. Pe o piață volatilă, ne interesează să obținem rezultate rapide în urma Anul 2016 se anunță unul foarte intereproiectelor lansate, dar aceste rezultate nu sant pentru proiectele de machine learning sunt suficiente, ele trebuie să aducă profit, pentru că numeroase companii au investit creștere a cotei de piață, renume, avantaj în ultimii ani resurse financiare și umane competitiv. E un fel de re-întoarcere la pre- importante în acest domeniu. Machine ocuparea de bază a businessului, doar că learning-ul a devenit tot mai accesibil, de data aceasta mult mai intens, rezultatul nefiind limitat doar la domeniul de cercefiind impunerea acestei orientări și asupra tare sau al companiilor foarte mari. De-a managerilor de proiect. Discuțiile nu se lungul anului 2015, companii precum vor mai purta despre metodologii, ci des- Google sau Facebook au făcut publice propre modul în care se pot atinge și se pot priile framework-uri de machine learning asigura beneficiile estimate inițial. Ceea ce (TensorFlow - Google, Torch - Facebook) înseamnă că managerii de proiect vor tre- iar în cloud există tot mai multe posibilități bui să treacă de la jargonul profesional la de a începe proof-of-concept-uri la coslimbajul de business, să-și mute atenția de turi foarte mici și folosind state-of-the-art la proces către asigurarea atingerii bene- algorithms pe platforme ce se dezvoltă ficiilor. Adică responsabilitatea lor trece continuu cum ar fi Amazon Machine de granița proiectului și se extinde până Learning, Microsoft Azure Machine la obținerea câștigurilor ulterioare livrării Learning, Google Prediction API sau IBM rezultatelor. Legătura dintre managemen- Watson Analytics. tul organizațiilor și managerii de proiect Pe plan local, tot mai multe companii trece pe o altă dimensiune. Atenție însă la din Cluj vor trece de la faza de experitermenii pe care îi folosim, aici nu vorbim mente și proof-of-concept-uri la integrarea despre Scrum Master sau Team Lead ale algoritmilor de machine learning în partea căror responsabilități rămân aceleași, ci de pre-producție sau chiar producție, iar discutăm despre pozițiile din proiect care cererea de persoane specializate pe acest au o perspectivă mult mai amplă asupra domeniu va crește tot mai mult. Platformele impactului proiectelor asupra businessu- open source folosite pentru data-processing lui: Project Manager, Product Owner. Va fi la scara mare precum Apache Spark și interesant de văzut cum vor accepta mana- Apache Hadoop vor deveni tot mai folosite gerii de proiect această responsabilizare la nivelul companiilor din Cluj. Interesul

pentru Machine Learning și BigData a crescut exponențial în ultimii doi ani. Ca organizatori ai meetup-ului de BigData/ DataScience am avut dificultăți în 2015 în a găsi spații tot mai mari pentru a găzdui astfel de evenimente. În ce privește workshop-urile de Machine Learning a fost necesar să limităm numărul de participanți pentru a avea workshop-uri eficiente. Cu siguranță, domeniul de BigData si Machine Learning este un domeniu de urmărit în 2016, de asemenea și gradul de succes a proiectelor în aceste domenii.

Cum vezi evoluția IT-ului în 2016 și în particular evoluția ecosistemului de IT clujean?

Philipp Kandal În 2016, vom remarca o schimbare de paradigmă de la programarea logică tradițională înspre învățarea aprofundată dar și o continuare a proiectelor Big data. Acest lucru va oferi inginerilor ocazia de a desfășura o muncă inovatoare. Clujul este bine poziționat datorită culturii sale inginerești puternice și va continua să crească puternic în 2016. Sper în mod special ca 2016 să ofere oportunități Product Startup-urilor din Cluj de a avea parte de o expunere internațională și m-aș bucura mult să văd primul unicorn care pleacă de la Cluj.

Cum apreciezi evoluția designului web și a aplicațiilor mobile în 2016?

Vlad Derdeicea Noul an vine cu multe modificări și trenduri diferite în web cât și în mobile. Website-urile încep să aibă cât mai multe videouri și imagini erou (mari) la intro, timp în care variantele lor de mobile sunt din ce în ce mai rapide. Ca și în anii precedenți se pune foarte mult accentul pe ușurința de utilizare a interfeței, grafica flat

www.todaysoftmag.ro | nr. 43/ianuarie 2016

7


opinii Previziuni IT pentru 2016 și animațiile organice ce aduc viață oricărui produs digital. Fonturi frumoase și citibile sunt mai ușor de găsit odată cu Având în vedere evoluția rapidă a device-urilor mobile se apariția Typekit-ului de la Adobe și a Google Fonts, iar site-urile așteaptă ca în anul 2016 traficul mobil să fie egal cu cel de pe au început să aibe fonturi din ce în ce mai curate trasmițând desktop, aceasta înseamnă mai multe site-uri responsive și informația într-un mod foarte ușor. aplicații axate pe verticalitate și pe bine-cunoscutul scroll din aplicațiile sociale. De asemenea, faptul că anul trecut Google a decis ca site-urile responsive să fie clasate în căutări mai sus decât cele doar pentru desktop este încă un motiv pentru care din ce în ce mai multe companii caută să facă variante responsive sau chiar aplicații custom.

Ilustrațiile și schițele sunt un mod distractiv de a pune în valoare elementele site-ului sau ale aplicației. Ele au crescut în popularitate prin introducerea icon-urilor cu scopul de a face utilizatorul să înțeleagă mai ușor și mai rapid care sunt pașii respectivi sau ce beneficii aduce acel serviciu. De asemenea, pot crea o legătură personală cu utilizatorii, ceea ce poate aduce multe avantaje. Interfețele bazate pe carduri sunt printre cele mai mari elemente lansate de Material Design și pot fi găsite în aplicații, website-uri și chiar printuri. Acestea sunt ușor de creat, se adaptează pe orice rezoluție, țin informația organizată și sunt foarte citibile.

Culorile mai puternice și mai deschise ce aduc puțin cu cele folosite în anii 1980 sunt printre elementele ce au cele mai mari șanse să fie folosite anul acesta. Le putem vedea pretutindeni, de la Dribbble la Google Material Design.

Animațiile au fost unul dintre trendurile cele mai mari ale lui 2015, indiferent că erau fullscreen sau mici elemente pe care nici nu le observai. În 2016 popularitatea lor sigur va crește chiar dacă sunt șanse foarte mari ca mărimea lor să scadă. Ele sunt un mod distractiv de a ține user-ul atent sau chiar de a-l surprinde Website-urile cu slider au fost folosite la început într-un frame, cât timp content-ul se încarcă. iar acum sunt folosite în full-screen. Fiecare slide este controlat de un buton sau are un timer ce îi poate dicta perioada de afișare. Utilizatorii pot astfel naviga mult mai ușor între informații, având o experiență aproape fizică. Analizând exemplele menționate mai sus, observăm că anul acesta nu va fi doar un singur trend, ci mai degrabă o multitudine de trenduri posibile pentru web și aplicații, pe care designerii vor putea să le folosească în funcție de fiecare proiect în parte. Însă nu ar trebui să vedem aceste trenduri mai mult decât unelte sau orientări în crearea unui produs. Ele nu ar trebui folosite excesiv doar pentru că sunt “hip”, ci ar trebui văzut dincolo de ele și folosite doar cele potrivite pentru proiectul potrivit.

8

nr. 43/ianuarie 2016 | www.todaysoftmag.ro


TODAY SOFTWARE MAGAZINE Care este perspectiva ta asupra mediului de IT clujean în 2016 privind evoluția produselor, outsourcing-ului dar și a programatorilor locali?

Călin Văduva Evoluția mediului de IT din Cluj a fost și va fi în continuare determinată de dinamica pieței globale. Clujul s-a conturat ca pol regional de creștere economică pe fondul cererilor venite din piețele mature. La acest nivel, perspectivele de creștere pentru 2016 rămân modeste, reflectând încetinirea creșterii comerțului mondial și a tensiunilor geopolitice. Acestea vor aduce presiuni asupra optimizării costurilor și a creșterii productivității, determinând orientarea clienților către investiții mai precaute, inclusiv în tehnologie. În acest scenariu, Clujul va traversa o perioadă de reașezare. Accentul va fi direcționat înspre îmbunătățirea calității serviciilor oferite și a relațiilor cu partenerii actuali. În mod evident, acest lucru are impact asupra dinamicii forței de muncă, atât din punct de vedere cantitativ cât și calitativ. Pe termen lung, ne putem aștepta să revenim la o creștere semnificativă atât a outsourcing-ului cât și a investițiilor din zona de produse.

Cum va evolua piața de gaming la nivel global în 2016?

Robert Muresan Anul 2016 va fi anul Virtual Reality. Toți producătorii de echipamente VR (HTC&Valve, Oculus, Sony) își vor lansa echipamentele în anul acesta.Va fi anul în care vom asista la schimbări radicale pe piața de gaming: locul ecranelor tradiționale va fi luat de echipamentele de realitate virtuală. Experiența va fi considerabil mai bună.

www.todaysoftmag.ro | nr. 43/ianuarie 2016

9


educație

Simplon România te învață să faci aplicații mobile în trei luni

A

u început înscrierile la cursul intensiv de Android pentru începători și viitori antreprenori în domeniul tehnologiilor mobile.

Roxana Rugină

roxana.rugina@gmail.com CEO & co-founder @Simplon Romania

10

nr. 43/2016, www.todaysoftmag.ro

Cluj Napoca: 11.01.2016 Simplon România anunță lansarea programului Mobile Bootcamp, un curs pentru oamenii talentați și pasionați de tehnologie care vor să învețe să dezvolte aplicații mobile pentru Android de la zero.

Cursanții vor învăța conceptele teoretice prin practică și dezvoltarea unui proiect cu ajutorul trainerilor și profesioniștilor din domeniul IT. Programul se adresează persoanelor în căutare de noi provocări, dornice de o reconversie profesională, celor aflați la Mobile Bootcamp constă într-un pro- început de drum care își doresc să obțină gram de trei luni intensive de pregătire o experiență practică pentru a transforma și dezvoltare a abilităţilor tehnice pentru a realiza aplicaţii Java pe platforma Android. Pe lângă competențele tehnice, Simplon România încurajează participanții să dezvolte produse mobile inovatoare oferind cursuri de “project management” și dezvoltând abilitățile de marketing ale cursanților necesare în domeniul tehnologiei și antreprenoriatului web. “94% din absolvenții ultimului program Simplon Web Development B ootcamp lucrează acum în IT. Aceste rezultate și cererea mare pentru cursuri axate pe practică și tehnologii noi, ne-au determinat să lansăm un nou curs pentru începători care vor să dezvolte aplicații mobile”- declară fondatoarea Simplon, Roxana Rugină.


TODAY SOFTWARE MAGAZINE idei valoroase în aplicații mobile și afaceri de success. Simplon România împreună cu Today Software Magazine oferă două burse la Mobile Bootcamp 2016 pentru persoanele din medii defavorizate social care doresc să își îmbunătățească viața cu ajutorul tehnologiei. Firmele care doresc să încurajeze tinerii să învețe programare, pot oferi astfel de burse cu ajutorul Simplon. Pentru detalii despre parteneriate și bursă intrați pe site. Înscrierile se pot face până pe 25 ianuarie pe ro.simplon.co/mobile1, iar candidații interesați trebuie să-și dovedească aptitudinile, pasiunea și capacitatea de a învăța rapid Java printr-un test practic. Toți cei care vor trece testul practic vor fi ulterior invitați la un interviu. Câștigătorul bursei va fi anunțat la sfârșitul perioadei de selecție, odată cu lista celor admiși la Mobile Bootcamp.

Despre Simplon România Simplon România înseamnă o comunitate de oameni pasionaţi care îşi doresc să împărtăşească din experienţa lor cu ceilalţi în scopul de a contribui la educaţia tinerilor şi de a încuraja ideile şi diversitatea în domeniul tehnologiei. Simplon organizează cursuri de instruire și specializare în IT, contribuind direct la ocuparea forței de muncă și îmbunătățirea nivelului de pregătire al tinerilor din Cluj. Pe lângă bootcamp, Simplon organizează evenimente destinate antreprenorilor, ateliere pentru copii, workshop-uri pentru fete, femei sau angajații din companii care vor să învețe programare. Simplon România este afiliat la o reţea de şcoli alternative internaționale: Simplon - care propun cursuri de formare intensive și practice în urma cărora participanții pot crea site-uri web şi aplicaţii mobile sau pot deveni dezvoltatori entry-level şi project manager-i în IT. Cursurile se adresează tinerilor sub 25 de ani, fără diplome superioare, celor care au nevoie de o calificare sau şomeri care caută de lucru, fetelor şi femeilor, celor care vin din mediul rural sau din familii cu venituri mici, aflaţi în dificultate financiară şi tuturor celor subreprezentaţi în domeniul IT.

1 http://ro.simplon.co/mobile

www.todaysoftmag.ro | nr. 43/ianuarie 2016

11


evenimente

SymfonyCon 2015 – O simfonie a developer-ilor

Î

n prima săptămână a lunii decembrie am avut plăcerea de a participa împreună cu echipa mea la una dintre cele mai importante și mai mari conferinţe PHP ale anului: SymfonyCon 2015. Aceasta a avut loc la Paris şi a fost organizată cu ocazia împlinirii a zece ani de existenţă a faimosului framework Symfony.

Radu Murzea rmurzea@pentalog.fr PHP Developer @Pentalog

12

nr. 43/2016, www.todaysoftmag.ro

În acest articol vă voi descrie impresia Folies-Bergere, celebrul teatru şi un pe care mi-a creat-o această conferinţa. simbol al culturii franceze şi parisiene a reprezentat locul unde s-a desfășurat I). De ce te-ai duce la o conferinţă ? evenimentul. Organizatorii au fost cei Această întrebare o putem auzi frec- de la SensioLabs, compania din spatele vent de la prieteni şi cunoscuţi atunci Symfony-ului şi a altor proiecte PHP când suntem entuziasmaţi că vom parti- celebre. cipa la un astfel de eveniment. Da, putem citi articole, bloguri, ştiri, Pusă în cifre, conferinţa arată cam aşa: cărţi. Putem discuta probleme şi cod cu • peste 1,000 de participanţi, ceilalţi programatori scriindu-ne unul • 25 de speakeri internaţionali, altuia pe GitHub. Sau putem chiar forma • 2 zile de workshop-uri, mici grupuri locale axate pe o anumită • 2 zile de conferinţă, tehnologie. • 1 Hackday, Însă toate acestea nu se compară • 25 de prezentări împărţite pe 2 cu ce poate oferi o conferinţă bine pusă track-uri (A şi B) simultane, la punct: interacţiunile faţă-în-faţă cu • 18 sponsori (printre care Blackfire, cei mai buni experți ai acelui domeniu, Drupal, Heroku, Microsoft Azure, cunoaşterea unor oameni noi, descopePlatform.sh, BlaBlaCar şi eZ Systems), rirea unor noi tendinţe în domeniul tău • 16 câştigători ai premiilor Symfony şi, nu în ultimul rând, sentimentul plăcut Business and Community Awards, că toate acele sute de oameni împărtăşesc • şi, nu în ultimul rând, 300 de aceeaşi pasiune ca şi tine. Aceste experielePHPanţi mov/unicat vânduţi. enţe pot fi avute doar în acel context. Da, o conferinţă costă timp şi bani. Fiind două track-uri simultane de preDar în schimb primeşti o viziune mai zentări, organizatorii au făcut streaming amplă asupra domeniului şi motivaţia de a live a tuturor prezentărilor pentru cei continua să înveţi şi să încerci lucruri noi. care şi-au cumpărat bilet, dar nu au putut ajunge la conferinţă. Prezentările au fost II). Detalii SymfonyCon 2015. de asemenea înregistrate şi vor fi făcute După cum am menţionat anterior, publice. conferinţa a avut loc la Paris în prima săptămână a lunii decembrie 2015 şi a marcat zece ani de existenţă a framework-ului şi lansarea versiunii majore 3.0 a acestuia.


TODAY SOFTWARE MAGAZINE pe cont propriu alte bug-uri sau probleme care să le reproducă sau să le rezolve.

V). Concluzii. SymfonyCon 2015 a fost o conferință bine organizată, oferind participanților o varietate de activități și subiecte de discuție. Interacțiunea cu comunitatea a fost punctul forte deoarece majoritatea liderilor au venit sub același acoperiș și au fost foarte prietenoși cu participanții. În concluzie, conferințele mari internaționale sunt evenimente la care orice profesionist din lumea IT ar trebui să participe cel puțin o dată în viață.

III). Conţinutul Conferinţei.

începutul proiectului Symfony. Aceasta Vom parcurge conferinţa într-o ordine a fost organizată într-o sală de jocuri cronologică, pentru o imagine mai clară uriaşă care a fost luată cu asalt de către asupra conţinutului oferit. participanţi. Căldura infernală şi gălăgia enormă nu a oprit pe nimeni să se distreze Ziua 1. Prima zi a început cu un la maxim şi să-şi facă poze cu astronautul bine-venit mic-dejun printre sutele de mascotă a celor de la ElevenLabs, care a participanţi care stăteau la coadă să-şi fost de departe vedeta serii. cumpere unul din puţinii elePHPanţi mascotă puşi la vânzare de către organizatori. Ziua 2. În ciuda oboselii acumulate Aceste jucării de pluş au fost atât de râvnite la petrecere, toţi participanţii s-au întors de participanţi încât stocul s-a golit com- nerăbdători pentru o nouă zi de prezentări plet în două ore. şi socializare. După ce ne-am cumpărat mult râvnita Prezentările au fost şi de această dată jucărie unicată, ne-am îndreptat spre sala foarte tehnice: s-a discutat despre perprincipală pentru a vedea keynote-ul ţinut formanţa FastCGI, tool-ul de profiling de Fabien Potencier, fondatorul proiectului Blackfire, caching, conceptul de micro-fraSymfony. mework şi Form-uri. Ultima prezentare a zilei a adăugat o latură umană şi de reflecKeynote-ul s-a axat pe istoria fra- ţie întregii zile prin împărtăşirea de către mework-ului, viziunea echipei Symfony Jordi Boggiano a plăcerilor şi dificultăţilor pentru prezent şi viitor şi un nou rele- coordonării şi menţinerii unui proiect ase-model a următoarelor versiuni ale open-source. framework-ului. Totul s-a sfârşit destul Ziua a fost presărată cu variate concurde repede, după ce câteva lacrimi emoţi- suri şi competiţii unde s-a câştigat, printre onante din partea prezentatorului au fost altele, un skateboard customizat şi un Mac întâmpinate cu multe aplauze. modificat special cu emblema celor de la După keynote, prezentările s-au des- Blackfire. părţit în două track-uri şi au continuat aşa După concursuri, a urmat sesiunea până la sfârşitul zilei. Conţinutul prezentă- de premiere “Symfony Community and rilor a fost concentrat pe aplicaţii Symfony Business Awards 2015”. Premiile au fost rulate în cloud, uimitorul tool de deploy- împărţite în mai multe categorii: cel mai ment Platform.sh, componente Symfony bun blogger, cel mai bun contribuitor de şi cum sunt folosite de către alte proiecte, cod, cel mai interesant Bundle, cea mai Doctrine, extensii PHP în maşina virtuală bună aplicaţie open-source a anului şi HipHop şi aplicaţii e-commerce. multe altele. Câştigătorii au fost aleşi de către comunitate prin vot. Cum nucleul conferinţelor este componenta socială, organizatorii au avut grijă Hackday. Ziua următoare a avut loc ca aceasta să se manifeste intercalând pre- hackday-ul. Prezenţa a fost mult mai mică zentările cu multe pauze printre care şi decât în zilele principale de conferinţă. prânzul. În această zi s-a pus accentul pe practică: Ziua s-a încheiat cu o mega-petre- unii au rezolvat câteva bug-uri propuse de cere dedicată aniversării a zece ani de la către organizatori în timp ce alții au căutat www.todaysoftmag.ro | nr. 43/ianuarie 2016

13


evenimente

Conferința TEDxCluj 2016

C

omunitatea numeroasă TEDxCluj se reîntâlnește la Cinema „Florin Piersic”, pe 20 februarie, în cadrul conferinței TEDxCluj 2016. În premieră: competiția TEDxCluj Award, care premiază inovatorii din Transilvania, așteaptă nominalizări până pe 28 ianuarie.

Cristian Dascălu cristian@clujhub.ro CEO & Business Developer @ Transilvania Entrepreneurship Center Co-fondator @Cluj Hub Curator & PM @ TEDxCluj

14

nr. 43/2016, www.todaysoftmag.ro

Cluj-Napoca, 14 ianuarie. Ediția 2016 a conferinței TEDxCluj are ca temă demontarea miturilor: „MYTHBUSTING– lăsăm poveștile să doarmă, trezim adevărul” și se va desfășura în 20 februarie, la Cinema „Florin Piersic”. Pasionații de cunoaștere sunt așteptați cu idei inovatoare, performance-uri deosebite și o expoziție cu produse ale viitorului. „Credem că știința în sensul ei cel mai larg este felul în care ni se prezintă realitatea, felul în care înțelegem și acceptăm ceea ce ne înconjoară. Știința eliberează, deoarece în locul prejudecăților, al falselor adevăruri mari, pune mici adevăruri verificate. Propunem MYTHBUSTING deoarece cunoașterea științifică se îmbunătățește pe zi ce trece, cu fiecare probă la care este supusă și pe care o depășește. Vom demonta mituri din două direcții: dinspre evoluția cunoașterii științifice, adică acele mituri care nu puteau fi distruse până mai ieri; în al doilea rând, vom porni pe urmele acelor intuiții care se simt și par să fie adevărate, dar care, atunci când sunt supuse unui test riguros, nu mai stau în picioare.”- a declarat

Cristian Dascălu, curatorul TEDxCluj. Cu această ocazie, organizatorii lansează competiția TEDxCluj Award, care urmărește să premieze profesioniștii din Transilvania care inovează în domeniul lor de activitate, prin idei curajoase ce pot schimba lumea sau care aduc noutăți tehnologice nebănuite. În prima fază a competiției, oricine poate face propuneri pe website-ul www.tedxcluj.com. Perioada nominalizărilor este 14-28 ianuarie, urmând ca până în 31 ianuarie echipa TEDxCluj, împreună cu un juriu format din parteneri din domeniul inovației să selecteze zece propuneri pe baza criteriilor anunțate pe site. Reprezentanții juriului se vor întâlni apoi cu inovatorii selectați pentru a discuta despre mentorat, dezvoltarea ideilor în afaceri și consiliere financiară, iar în perioada 13-16 februarie vor fi alese trei cele mai bune propuneri. Câștigătorul TEDxCluj Award 2016 va fi anunțat în cadrul conferinței din 20 februarie.


TODAY SOFTWARE MAGAZINE

„TEDxCluj Award își propune să aducă împreună minți sclipitoare, idei originale, experiența partenerilor și dorința tuturor de a răspândi ideile bune. Căutăm inițiatori de proiecte care au idei de impact, dorința de a le vedea dezvoltate și hotărârea de a munci pentru acest lucru. Cu toții vom avea de învățat din această experiență, dar mai ales toți cei care vor participa”, a adăugat Cristian Dascălu. În completarea discursurilor și a performance-urilor care reprezintă deja „marca” TEDxCluj, organizatorii pregătesc și Innovation & Tech Expo, unde participanții vor putea testa gadgeturi noi, produse de design creativ și practic în același timp sau obiecte care aduc împreună concepte independente pentru prima dată. Printre acestea se numără Husa ArKase, ce încarcă bateria telefonului prin regenerarea energiei consumate de utilizatori. Idei 3D prezintă ochelarii Cardboard,

o modalitate ieftină de a experimenta realitatea virtuală cu ajutorul telefonului mobil, iar SnapIT propun ochelari personalizați prin încorporarea unei micro-camere conectate la smartphone. Lista vorbitorilor și a invitaților care vin la TEDxCluj 2016 va fi anunțată în perioada următoare. Pentru participarea la conferință, doritorii mai pot cumpăra bilete de tip „Early Bird” la prețul de 44 de euro de persoană, urmând ca după epuizarea acestora un bilet să coste 65 de euro. TEDxCluj este un eveniment non-profit, iar fondurile strânse sunt folosite pentru a crea evenimente de impact adresate comunității TEDxCluj.

TEDxCluj este o inițiativă locală și independentă care aduce experiența internațională TEDx în Transilvania. Pr i mu l e ve n i me nt T E Dx C luj s - a desfășurat în 2010, iar de atunci peste 3.500 de persoane au participat la cele 10 evenimente organizate de echipa TEDxCluj sub deviza TED: „Ideas worth spreading” – „Idei care merită răspândite”. Ultima ediție TEDxCluj, cu tema „Learn – Unlearn – Relearn” („Învățare – Dezvățare – Re-învățare”), a însemnat 1.017 participanți, 12 ore de conferință și 35 de invitați - vorbitori și artiști. Mai multe informații: www.tedxcluj.com

www.todaysoftmag.ro | nr. 43/ianuarie 2016

15


startup-uri

Startup-uri Moqups

Startup-ul clujean Moqups.com pentru crearea de schițe online a lansat recent cea de-a doua versiune mult îmbunătățită. Proiectele realizate se pot publica online sau descărca sub formă de PDF sau SVG. Există inclusiv posibilitatea de a invita colaboratori și de a lucra împreună la o schiță.

Symme3D

Prima imprimantă românească 3D pe sistem Delta. Avantajele acestui sistem sunt vibrațiile scăzute și o viteză de până la 4-5 ori mai mare față de imprimantele 3d clasice pe sistem cartezian. Imprimanta este o minifabrică pentru orice mic producător de hardware deoarece pe lângă capacitățile 3D oferă și o freză CNC pentru gravarea cuprului de pe circuitele integrate și un cap laser cu care se pot tăia plăcuțele de mylar. • Neura http://techcrunch.com/2016/01/18/neura/

16

nr. 43/ianuarie 2016 | www.todaysoftmag.ro

Pine A64

Primul calculator pe 64 biți pe o singură placă. Acesta va conține un procesor ARM Cortex A53, quad core, 1.2 MHz, 2 x USB 2.0, HDMI 4K și până la 2GB RAM. Va putea rula orice sistem de operare iar recomandările producătorilor sunt Android, Ubuntu sau openHAB IoT. Proiectul este în derulare pe Kickstarter unde au adunat 1,266,000 USD, de 40 de ori mai mult decât cererea inițială. • d o k i Wat c h - ht t p s : / / w w w. ki ck star te r. c om / projects/dokiwatch/dokiwatch-the-worlds-most-advancedsmartwatch-for?ref=category • TinTag • Skin Scan


noutăți

TODAY SOFTWARE MAGAZINE

Noutăți IT

A fost lansat Perl 6

Jquery a împlinit 10 ani

Nvidia Drive PX 2

A fost lansată versiunea 6 a limbajului Perl. Acesta aduce o serie de noi concepte precum: multimethods, coroutines, continuations, usefull threading, junctions, roluri, hyperoperators, macros, garbage collections și multe altele. Costul pentru toate acest îmbunătățiri a limbajului este pierderea compatibilității cu versiunea anterioară.1

În 14 Ianuarie 2006, John Resig a vorbit la evenimentul BarCampNYC despre un framework de JavaScript care se numea JQuery. A fost momentul lansării celui mai popular framework de JavaScript care a împlinit în ianuarie 2016 zece ani de existență. Totodată versiunea 3.0 a intrat în stagiul de beta. Printre principalele feature-uri ale acestei versiuni menționăm: implementarea .data() urmează îndeaproape specificațiile HTML5 sau îmbunătățirea performanței pentru anumiți JQuery.1

Soluția propusă de NVidia pentru procesarea imaginilor de către mașinile autonome se numește Nvidia Drive PX 2. Aceasta folosește deep learning pentru a învăța și pentru a se adapta provocărilor deplasării autonome a mașinilor. Puterea dezvoltată de Drive PX 2 este echivalentă cu cea a 150 MacBook Pro și a fost recent lansat la CES 2016.1

1 1 http://www.perl.com/pub/2006/01/12/what_is_perl_6.

1

http://blog.jquer y.com/2016/01/14/

ten-years-of-jquery-and-beyond/

html

Oculus Rift, versiunea comercială

Prima versiune a bine cunoscutului dispozitiv de realitate virtuală este disponibilă pentru precomandă. Aceasta este prima versiune dedicată consumatorilor și suportă Rift Development Kit 2 (DK2). Rezoluția celor două ecrane combinate va fi de 2160 x 1200 iar latența va fi mică iar căștile vor fi integrate în dispozitiv pentru o mai mare senzație de pătrundere în realitatea virtuală.1

http://nvidianews.nvidia.com/news/

nvidia-boosts-iq-of-self-driving-cars-with-world-s-first-in-carartificial-intelligence-supercomputer

Android 6.0 Marshmallow

Primul procesor ARM de la AMD

A fost lansată versiunea 6.0 a bine cunoscutului sistem de operare Android. Principalele îmbunătățiri sunt: • Now on Tap – o anticipare a aplicațiilor și informațiilor de care utilizatorul are nevoie cu o simplă apăsare • O mai bună gestionare a bateriei • Pe r m i s i u n i p e n t r u a p l i c a ț i i și securitate simplificate1

AMD a lansat primul său procesor ARM: Opteron A1100. Acesta va avea o versiune cu patru core-uri care va consuma 25W și una cu opt core-uri care va consuma 32W. Specificațiile sunt: Cortex A57 CPU cores, 1 MB cache L2 și 8MB cache L3 iar memoriile suportate sunt DDR3 și DDR4. Este un pas important pentru AMD care astfel intră pe piața serverelor ARM. 1

1 https://shop.oculus.com/

1 ht t p : / / w w w. am d . c o m / e n - u s / p ro d u c t s / s e r v e r / 1 https://www.android.com/versions/marshmallow-6-0/

opteron-a-series

www.todaysoftmag.ro | nr. 43/ianuarie, 2016

17


comunități

Comunităţi și Evenimente Lansarea numărului 43 al Today Software Magazine

Ianuarie 27 (Cluj) - Ora 18:00 Siemens Cluj Office strada Gării, nr 21, Cluj-Napoca. Today Software Magazine Comunitate construită în jurul revistei TSM. facebook.com/todaysoftmag facebook.com/groups/todaysoftmag/ meetup.com/todaysoftmag youtube.com/todaysoftmag Data înfiinţării: 06.02.2012 Nr. membri: 2977

StartupBlinkers Networking

Ianuarie 28 (București) - Ora 19:00 Loc: TBD meetup.com/Cluj-JS/events/227014061/

Ionic 2.0 and AngularJS 2.0

Februarie 4 (Cluj) - Ora 18:30 Strada Pitești, nr. 18, Cluj-Napoca. meetup.com/Cluj-JS/events/227014061/ Cluj.JS Comunitatea dezvoltatorilor care doresc să se implice și să învețe totul despre JavaScript. Data înfiinţării: 21.04.2015 Nr. membri: 261

Bucharest Microservices UG ... Begins

Februarie 8 (București) - Ora 19:00 Strada Bucuresti Nord 10, Global City -clădirea O2, etajul 6, Voluntari 077190, Ilfov meetup.com/Bucharest-MicroservicesUs e r- Group / e ve nt s / 2 2 8 1 3 6 4 4 6 /

StartupBlink StartupBlink este un ecosistem global interactiv privind startup-urile, cu zeci de mii de entități listate, inclusiv startupuri, spații destinate coworking-ului și acceleratoare. www.startupblink.com

Bucharest μServices (Microservices) C omunitate destinată arhitecturii microserviciilor.

Data înfiinţării: 28.10.2015 Nr. membri: 12711

Openstack Workloads with Windows Server 2016

Startup Europe Week - Cluj

Februarie 2 (Cluj) - Ora 18:00 Str. Gării nr. 21, 400267 Cluj-Napoca facebook.com/startupeuropeweek/; http:// www.startupeuropeweek.eu Startup Europe Week Comunitatea a fost creată cu scopul de a reuni toate regiunile europene printr-un program de startup.

Data înfiinţării: 16.01.2016 Nr. membri: 89

Februarie 10 (Iași) - Ora 19:00 Loc : TBD meetup.com/IS-DevOps-Meetup/ events/228224839/

DevOps Comunitatea tuturor celor care doresc să devină specialiști în DevOps. Data înfiinţării: 28.08.2015 Nr. membri: 83

Data înfiinţării: 01.07.2015 Nr. membri: 1087

18

nr. 43/ianuarie 2016 | www.todaysoftmag.ro

February BucharestJS Meetup

Februarie 24 (București) - Ora 19:00 Strada Nicolae Filipescu nr. 39-41, Bucuresti facebook.com/groups/1544555832466208/; http://www.meetup.com/BucharestJS/ events/228209512/ BucharestJS Comunitatea tuturor developer-ilor interesați de Javascript. Data înfiinţării: 11.02.2015 Nr. membri: 629

OpenStack January Meetup Open for Presenters

Februarie 25 (Cluj) - Ora 18:30 Maestro Business Center, etajul 4, 21 Decembrie 1989, 104, Cluj-Napoca m e e t u p. c o m / O p e n S t a c k R o m a n i a / events/226052637/ OpenStack Comunitate formată din utilizatorii OpenStack și developer-i. Data înfiinţării: 31.08.2014 Nr. membri: 134

VOXXED Days BUCHAREST

Martie 10 (București) - Ora 08:30 Bulevardul Poligrafiei, nr 1, București voxxeddays.com/bucharest/ VOXXED Days Comunitate formată din developeri Data înfiinţării: 2015 Nr. membri: 1060


programare

TFS ca platformă de colaborare (I)

T

eam Foundation Server (presc. TFS) promite a fi o soluție „out of the box” pentru toată platforma de ALM din cadrul unei organizații ce poate fi utilizată atât pentru gestionarea proiectelor, cât și pentru a urmări work-flow-ul în echipe, pentru a gestiona codul sursă și pentru a compila și testa software-ul. Puteți face acest lucru fie cu Team Foundation Server instalat pe un server propriu fie prin utilizarea Visual Studio Online în cloud.

Dorin Cazan dorin.cazan@siemens.com Service specialist @Siemens

Potrivit Microsoft, acestea sunt câteva din caracteristicile majore, care sunt incluse în Team Foundation Server: • Version control, pentru gestionarea codului sursă cât și a altor elemente care necesită versionare. • Work item tracking, pentru a urmări efortul depus de echipă cât și cerințele venite din partea utilizatorilor. Pentru acest aspect există așa numitele work items („elemente de lucru”) user stories, requirements și task-uri. • Project management functions (funcții de management de proiect), care permit planificarea și urmărirea dezvoltării proiectului folosind Microsoft Excel și Microsoft Project. • Team build, pentru a permite un proces comun pentru dezvoltarea și compilarea de produse software. Procesul poate fi configurat în funcție de cerințe și necesități, pentru diferite tipuri de build-uri, incluzând build-uri de tipul continuous integration, scheduled builds, gated check-in, shelveset and rolling builds. • Data collection and reporting (servicii de colectare a datelor și raportare), care ajută la evaluarea stadiului de dezvoltare a unui proiect • Team Web Portal, care oferă un

punct central de comunicare pentru echipe și care nu depinde de o instalație Visual Studio pe PC-ul utilizatorului. • Te a m F o u n d a t i o n S h a r e d Services, care oferă o serie de servicii de infrastructură comune, care nu sunt vizibile pentru utilizatorii finali, dar care pot fi utilizate pentru a extinde funcționalitatea TFS. TFS poate fi cel mai bine descris dacă ținem cont de cele două aspecte principale ce-l definesc. Pe de o parte, reducându-l la funcția primară pentru care am folosi TFS într-o organizație, putem spune că TFS este o platformă de colaborare ... sau, altfel spus, nu este decât o colecție de tool-uri care permit colaborarea la un proiect atât a membrilor echipei de dezvoltatori cât și de clienții și partenerii acestei echipe. Această colecție de tool-uri centralizate le permite să lucreze împreună mai eficient. Se pot împărtăși planurile de proiect și notebook-uri, evaluări intermediare, coduri sursă. Organizația se bazează pe o instalare „out of the box” de TFS sau pe consolidarea și îmbunătățirea elementelor ce însumează TFS-ul ca soluție ALM, prin modificarea sau adăugarea de noi elemente și scenarii de utilizare pentru a alătura noi funcționalități eficiente. Pe de altă parte, dincolo de ceea ce are de oferit

www.todaysoftmag.ro | nr. 43/ianuarie, 2016

19


programare

TFS ca platforma de colaborare - pentru dezvoltatori cât și non-dezvoltatori

TFS „out of the box”, se poate spune că TFS este o platformă de colaborare proiectată special pentru integrare și extensibilitate. Prin intermediul API-ului (Application Programming Interface) se poate adapta Team Foundation Server la nevoile organizațiie, proiectului și echipelor individuale prin adaptarea și atașarea de noi funcționalități. Extensiile pot îngloba schimbări simple precum redenumirea unui câmp într-un work item, dar și pentru a integra un tool sau o funcționalitate complet nouă.

Extensibilitatea platformei TFS Extensibilitatea TFS este dată de structura sa multi-tier, pe mai multe niveluri, precum și de diferite modele cu care un utilizator poate interacționa în scopul de a adapta sau adăuga noi funcționalități. Team Foundation poate fi adaptat nevoilor individuale ale echipei și a proiectului folosindu-se unul dintre următoarele modele puse la dispoziție de Microsoft: 1. Client object model (cum sugerează și numele, se aplică la computerele pe care se utilizează TFS respectiv interfața la această platformă, Microsoft Visual Studio), poate fi folosit în scopul de a influența comportamentul TF atunci când vine vorba de controlul versiunilor, work item tracking și a build-urilor. 2. Server object model (se aplică pe application tier), poate fi folosit în scopul de a integra instrumente suplimentare în Visual Studio, în crearea de rapoarte și chiar în crearea de evenimente ce pot declanșa anumite acțiuni, cum ar fi copierea unui build pe share-ul clientului după ce s-a schimbat build quality-ul unui build ce a fost compilat cu succes. 3. Build process object model, în scopul de a personaliza procesul de compilare. Puteți personaliza șablonul procesului de construcție cât și activitățile pre- și post-implementare. Fig1. TFS multi-tier environment

noastră de TFS în scopul de a facilita și de a spori scenariile de utilizare nu numai pentru dezvoltatorii noștri dar și pentru clienții noștri se numără un tool ce poate copia build-urile de pe droplocation pe share-ul clientului în urma unor acțiuni și evenimente predefinite, instrumente pentru export și importarea de build definitions, integrarea cu instrumente de traducere, integrare cu alte produse PLM cum ar fi Team Center, check-in policies, securitate sporită pentru version control prin folosirea de folder-e și branch-uri securizate pe bază de IP direct în source control și multe altele. Ar trebui remarcat faptul că Microsoft are un site numit Visual Studio User Voice1 , care poate fi folosit pentru a trimite sugestii și idei la Microsoft pentru a îmbunătăți TFS si\sau Visual Studio. Nu toate sugestiile vor fi puse în aplicare, dar este bine de știut că se poate transmite ideile direct către Microsoft și că este posibil să se obțină o funcționalitate nouă, benefică tuturor utilizatorilor de TFS fără a fi nevoie să înveți cum funcționează TFS și cum puteți utiliza TFS API în scopul de a dezvolta o extensie suplimentară. Ca și în cazul tuturor platformelor de colaborare, există și unele neajunsuri care trebuie luate în considerare. Principalele mele nemulțumiri sunt legate de modul în care funcționează TFS, mai exact de faptul că este necesară o conexiune\comunicare constantă și activă între PC-ul utilizatorului și serverul de TFS. Dacă, de exemplu, aveți o pană de curent sau ‚pica’ rețeaua timp de 1 oră, procesul de dezvoltare de aplicații este forțat să stagneze. Motivul este că TFS va marca toate fișierele ca read-only pe sistemul utilizatorului până când se realizează un check-out. Dacă nu puteți comunica cu server-ul, nu puteți face check-aut și prin urmare nu le puteți edita. Dacă, pe de altă parte, le-ați dat check-out înainte și ați terminat de editat, nu puteți da check-in în timp ce conexiunea cu server-ul de TFS nu este realizată; în unele cazuri nu se poate da check-in chiar și după ce serverul este din nou disponibil, deoarece fișierul *.sln este marcat ca fiind offline și, uneori, nu reușește să se reconecteze la server în mod automat. În acest caz veți fi întâmpinați cu un mesaj asemănător: This solution is offline. [Team Foundation Server: https://tfsURI:443/tfs/collection/project] The solution was offline during its previous session and will remain offline.

În trecut era necesar să intervenim în Windows registry sau să-I dăm rebind la fișierele *.csproj pentru a putea continua activitatea de dezvoltare, dar se pare că Microsoft a lucrat la La Siemens, una dintre diviziile ce utilizează TFS a dezvoltat remedierea acestei probleme din moment ce nu am mai întâlnit-o un tool care adaugă funcționalități adiționale pentru work item în ultima vreme. tracking. Printre funcționalitățile suplimentare care sunt disponibile după instalarea acestui tool pot fi enumerate următoarele: TFS nu este „un sistem închis” așa cum s-ar crede, ci poate fi câmpuri și tab-uri suplimentare, funcționalitatea de a reactualiza integrat și cu alte sisteme 3rd party pentru source control și issue cache-ul structurii work item-urilor, verificarea permisiunii uti- tracking. Unele dintre funcționalitățile care sporesc extensibililizatorilor fără a fi nevoie de a intra în interfața administrativă, tatea și flexibilitatea TFS este capacitatea sa de a integra și de a pentru a crea template-uri pentru diversele work item-uri folo- lucra cu alte pachete software, dar fără a se limita în mod necesar site (fără a fi nevoie să se instaleze extensia oferită de Microsoft doar la produsele Microsoft (cum ar fi Microsoft Project Server, (Power Tools for Visual Studio) și posibilitatea de a se asocia și SharePoint, Excel și Outlook), ci si de la alte companii si dezvolsincroniza work item-uri din diferite TFS Team Collections sau tatori, spre exemplu ClearCase (IBM), GIT și Eclipse. chiar servere de TFS. Noi funcționalități pot fi dobândite și prin instalarea suitei Printre alte îmbunătățiri, care au fost aduse la instalarea

20

nr. 43/ianuarie 2016 | www.todaysoftmag.ro

1 https://visualstudio.uservoice.com


TODAY SOFTWARE MAGAZINE Microsoft Test Manager, un client de TFS separat, ce îți permite să faci testare software, dându-ți posibilitatea de a planifica și executa teste și de a administra atât mediile de testare fizice cât și cele virtuale. Microsoft a introdus Team Foundation Server Express și VisualStudioOnline (cunoscut și sub numele de Team Foundation Service, o versiune de TFS în cloud). TFS Express este o soluție optimală pentru studenti, dezvoltatori independenți și echipe mici de până la cinci developer-i. Versiunea de TFS Express este gratuită și poate fi instalată pe PC-ul personal fără a fi necesară crearea unui server specializat. Dacă se consideră mai apoi că se dorește un upgrade la o versiune comercială de TFS, se poate realiza acest lucru cu ușurință și fără a pierde datele și istoria aferentă elementelor din version control. Dacă nu ești convins că TFS ar putea reprezenta o soluție viabilă pentru echipa ta și nu vrei să investesti bani într-un mediu de testare, Visual Studio Express sau varianta în cloud, VisualStudioOnline (de asemenea gratuită pentru studenți și echipe de până la 5 dezvoltatori) reprezintă un punct de pornire solid, fără a crește costurile.

De ce s-ar gândi cineva să folosească funcționalitățile oferite de TFS și pentru echipe de non-dezvoltatori? Răspunsul este simplu: Începând cu TFS 2015 Microsoft a introdus o schimbare majoră în sistemul de licențiere pentru Visual Studio online și TFS prin adăugarea licenței de tip Stakeholder. Această licență poate fi acordată în mod gratuit unui număr nelimitat de utilizatori; aceștia vor putea crea și edita elementele de lucru, vedea dashboard-urile și Kanban board-urile. Potrivit MS scopul acestei licențe este de a facilita comunicarea în cadrul proiectului și de a permite întregii organizații de a participa activ la dezvoltarea proiectelor. Prin aceasta Microsoft pune bazele unui nou început si redirecționează accentul pe dezvoltarea scenariilor diverse de utilizare a TFS-ului. Partea a doua a articolului va fi publicată în numărul 44 / februarie al Today Software Magazine

Beneficiile lucrului cu TFS pentru nondezvoltatori Asa cum sugerează titlul acestui articol, scopul nu este doar acela de a prezenta funcționalitățile TFS doar pentru software developers, ci și de a descrie scenarii de utilizare a TFS-ului în care și echipe de nondezvoltatori ar putea beneficia de pe urma acestei platforme. Desigur că Siemens, pe lângă alte domenii de activitate, se ocupă și de dezvoltarea de aplicații pentru produsele proprii – în acest scop folosește mai multe platforme, printer care și TFS… dar aceasta nu schimbă faptul că aceia care se ocupă de dezvoltare și testare nu sunt și utlizatori finali. Pe lângă aceștia mai există și alte echipe care sunt implicate mai mult sau mai puțin în procesele aferente unui proiect de dezvoltare. Există numeroase alte echipe ce interacționează frecvent atât cu dezvoltatorii cât și cu utilizatorii: printre aceștia se numără trainer-i, project manager-i, configuration manager-I și echipele de suport tehnic.

Corporate Technology Romania

www.todaysoftmag.ro | nr. 43/ianuarie 2016

21


marketing

Marketing prin “fereastra” digitală. O privire largă asupra lui 2016 ”Viața este privită cu mult mai mult succes printr-o singură fereastră, la urma urmei.” (F. Scott Fitzgerald, Marele Gatsby)

Î

nceputul anului m-a găsit cufundată în niște probleme de marketing care m-au tot preocupat de ceva timp. Dintre acestea, marketingul digital se distinge drept cea mai bulversantă. În lumea marketingului de azi, cu tot ce cuprinde ea, de la cursuri, joburi și strategii la agenții de marketing digital, raportul dintre marketingul digital și cel tradițional generează controverse și dezbateri intense.

Sorina Mone sorina.mone@fortech.ro Marketing manager @Fortech

22

nr. 43/2016, www.todaysoftmag.ro

Oare înspre aceasta se îndreaptă marketingul? Am întrebat pe Google. O scurtă privire pe Google Trends indică un interes în scădere față de termenul ”marketing” pe web. În același timp, ”online marketing” apare primul în cele mai multe căutări legate de el, depășind chiar și pe ”marketing jobs”. Iar vedetele în ascensiune sunt ”facebook marketing”, ”social media marketing” și ”google marketing”. Chiar dacă nu sunt un fan al specializării profunde, cred în puterea dezvoltării unui know-how solid într-un domeniu pentru a stimula în mod corect potențialul său, dacă este potrivit în acea situație. Deci, digital / online / social media sau orice altă specializare sau segment în marketing este în regulă, atâta timp cât face parte dintr-o abordare de marketing comprehensivă și originală. Nu este ”acel” marketing. Marketingul nu ar trebui să fie condus nici de instrumente, nici orientat spre canal. El ar trebui să se concentreze mai

întâi pe client: să îți cunoști în mod intim clienții (problemele pe care le au, lucrurile care îi interesează, obiceiurile lor), să îți modelezi marketingul în funcție de aceasta (mesaje, canale, sincronizare, etc.), să măsori și să cauți să aduci îmbunătățiri în mod constant. Problema este că tocmai aceste aspecte au tendința de a fi ignorate sau uitate. Nu odată am văzut și am experimentat personal – modalitatea cea mai grea de a învăța- produse care au fost dezvoltate neavând un segment clar de clienți sau o propunere de valoare clară, ceea ce imediat duce la ceva ce nu are nicio relevanță comercială. Și totuși, ei promovează o pagină de Facebook care contorizează like-urile de la prieteni și alți oameni despre care nu știm prea multe. Asemenea eforturi sunt precum aruncarea undiței în râu, sperând că niște pești vor mușca. S-ar putea (probabil) să fie mai puțin costisitor, mai măsurabil s-ar putea chiar să și funcționeze, dar cu siguranță nu vă va


TODAY SOFTWARE MAGAZINE aduce maximul pe care îl puteți obține acolo. Drept o dovadă din viața reală, vă recomand această prezentare1 făcută de expertul în branding, Mark Ritson. El compară impactul celebrei reclame Oreo pe Twitter care a acaparat atenția în ediția 2013 a Super Bowl cu reclama Tv pentru Budwiser. Pretinsă a fi chiar cea mai bună reclamă de la Super Bowl, raza de acțiune a acesteia a fost calculată la doar 64.300, ceea ce ar explica generos aproximativ 0.02% din cota de piață a Oreo în Statele Unite. Bineînțeles, ceea ce Ritson ignoră este impactul generat de PR, care ar trebui adăugat la aceasta, dar, în cele din urmă, comparația per ansamblu este mai mult decât pertinentă. Nu putem ignora adopția în creștere a dispozitivelor mobile, accesul îmbunătățit la Internet și transformările clienților asociate acestor tendințe. Nu putem ignora nici valoarea extraordinară a tehnologiei în marketing, dezvoltată complet în Adobe Marketing Cloud, de exemplu. La urma urmei, ”nimeni nu a devenit celebru prezicând că lucrurile vor rămâne aproape la fel”, pentru a-l cita pe Bob Hoffman2, Ad Contrarian. Dar anumite lucruri se schimbă într-un ritm mai rapid (ex. tehnologia), pe când cu altele avem numai iluzia schimbării (ex. schimbările în noi, ca ființe umane). Genevieve Bell3, antropologul principal al Intel, argumentează că tehnologia răspunde naturii umane fără a o modifica. Acesta este un 1 https://www.youtube.com/watch?v=MCAEbirIByc& feature=youtu.be&t=207 2 http://adcontrarian.blogspot.ro 3 https://vimeo.com/108354478

punct interesant de remarcat, deoarece ”reclamele bune fac apel la noi drept clienți”, în timp ce ”reclamele extraordinare fac apel la noi drept ființe umane”, după cum concluzionează același Bob Hoffman. Există întotdeauna scenarii ale clienților care transcend o publicitate bine definită, o achiziție sau o interacțiune de consum, iar acestea sunt compuse din numeroase puncte de contact online și offline. Este rolul marketingului să conceapă experiența consumatorului cu produsul, serviciul sau marca, pe tot parcursul acestor punte de contact. Dacă Slack, o afacere B2B de Internet în totalitate a preluat mai multe orașe mari din Statele Unite, cu curcubee, pui de pisică, ponei și baloane în campania sa în aer liber ”Euphoria4” și tocmai a lansat pe piață reclama TV ”Animale5”, atunci online și toate lucrurile digitale s-ar putea să nu fie suficient pentru a câștiga o Parte din Minte, Inimă și Portofel. Așadar, după cum prezice Ritson, să permitem lui 2016 să fie anul integrării. Și anul în care noi ne întoarcem la baza segmentării – stabilirea obiectivelor – poziționare, persoanele cumpărătoare, amestecul de marketing și restul strategiei și tacticilor de marketing, tradiționale sau digitale. Haideți să le vedem drept ”buzzwords” (cuvinte la modă) care nu devin niciodată demodate, de când American Marketing Association a început să le popularizeze în anii 1950. Există imaginea de ansamblu la temelia

voastră? Faceți-vă timp pentru a vă întreba dacă ”fereastra” prin care priviți este cea mai potrivită pentru marketingul vostru, afacerea voastră, cariera voastră, sau pentru orice context în care s-ar putea să vă aflați. „Deci, Nick, s-ar putea ca lumea să aibă nevoie de câțiva oameni echilibrați, aceia care sunt cei mai limitați dintre toți specialiștii. Și ei au, de asemenea, o singură fereastră, doar că fereastra lor este una cu … o priveliște mai amplă.” (F. Scott Fitzgerald, Marele Gatsby)

4 h t t p : / / w w w . a d w e e k . c o m / n e w s / advertising-branding/slack-just-took-over-4-cities-its-first-bigextremely-bubbly-ad-campaign-168349 5 https://www.youtube.com/watch?v=x6sSa5NpqUI

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

www.todaysoftmag.ro | nr. 43/ianuarie 2016

23


programare

management

Flexibilitate strategică în timpul incertitudinii

Î

n ciuda volatilității economice și de business, a incertitudinii rezultatelor și a gradului mare de risc al investițiilor, este posibil să existe oare un potențial al acestei incertitudini care rămâne neexploatat? În aceste condiții se pune problema dacă putem evalua acel potențial și justifica investiția, bazându-ne exclusiv pe metodele tradiționale de evaluare, care examinează doar informațiile deținute la momentul evaluării (ex. Recuperarea investițiilor ROI, Valoare Actualizată Neta - NPV)?

Paul Alexandru Tofan Paul.Tofan@isdc.eu Project manager @ISDC

Standarde fixe Incertitudinea este o prezență constantă în lumea IT. Această incertitudine apare din mai multe surse: imaturitatea, complexitatea și natura imprevizibilă a tehnologiilor, gradul ridicat de integrare a tehnologiilor în cadrul și în afara organizațiilor, presiunea accelerată exercitată asupra domeniului IT pentru produse inovatoare și servicii orientate către o piață cu o atractivitate dificil de prognozat . În ciuda acestei realități, metodele de evaluare tradiționale descurajează investițiile făcute sub semnul acestei incertitudini ținând cont doar de informațiile prezente la momentul evaluării. În urma evaluării cu aceste metode, decidenții sunt puși în fața unor proiecții de venituri cu valori mici sau rate de actualizare mari, iar răspunsul lor la presiunea de a investi care vine din piață este să completeze lipsa de atractivitate a analizei NPV cu argumente calitative, cum ar fi importanța strategică sau prezența în

24

nr. 43/2016, www.todaysoftmag.ro

piață. De cele mai multe ori li se cere să ia o decizie de tipul totul-sau-nimic pe baza informațiilor curente, deși ei ar prefera să exercite o mai mare flexibilitate în procesul decizional pe măsură ce contextul evoluează. Un scenariu similar poate fi găsit de exemplu în jocul de poker: presupunând că suma obligatorie înainte ca mâna să înceapă este de 1 $, iar pariurile se fac cu valori intre 1 și 10 $, cât de exact poți prezice chiar înainte ca prima carte să fie anunțată, care e suma plasată la pariul final?

Gândirea tip „structură de opțiuni” Acest tip de gândire propune o structură al cărei scop este să poziționeze luarea deciziilor în ultimul moment responsabil cu maximul de informație. La fel ca și tehnicile de tip Valoare-Actualizată-Neta(NPV) sau Flux-Monetar-Actualizat(DCF) acest tip de gândire își are originea în lumea financiară și se bazează pe teoria prețurilor opțiunilor și analiza de tip opțiuni real.


TODAY SOFTWARE MAGAZINE

În principiu, acest tip de evaluare complementează metodele oferind mijloacele necesare pentru a captura potențialul pozitiv pe care incertitudinea și flexibilitatea procesului decizional îl poate oferi. Analiza de opțiuni reale este cu adevărat valoroasă atunci când există incertitudine ridicată referitoare la valoarea activelor vizate, managementul are un grad mare de flexibilitate în procesul de decizie de-a lungul proiectului și este dispus să plătească construcția și exercitarea unor opțiuni care să conțină riscul dat de incertitudine. Este o soluție la îndemână atunci când metodele de evaluare statice furnizează valori pozitive mici sau chiar ușor negative. Totuși, aplicarea acestei metode nu se justifică atunci când avem de-a face cu valori negative mari rezultate în urma evaluărilor tradiționale de tip NPV. Prin definiție o opțiune de tip real reprezintă dreptul, nu obligația, de a întreprinde o acțiune (de cumpărare, vânzare, abandon, amânare) asupra unui activ nefinanciar, cu un cost predeterminat și până la o dată predeterminată. Costul opțiunii reprezintă prețul plătit pentru a achiziționa, crea și menține opțiunea în perioada supusă incertitudinii. Valoarea unei opțiuni vine din flexibilitatea oferită în privința deciziei de a

exercita opțiunea la un moment ulterior în funcție de condițiile viitoare. Această flexibilitate înseamnă că deținătorii opțiunii pot beneficia de potențialele câștiguri ale investiției și în același timp să-și limiteze pierderile la costul de achiziționare a opțiunii în caz că investiția nu devine rentabilă. Pentru că incertitudinea crește potențialul pozitiv al rezultatelor dar nu și pe cel negativ (limitat la zero), rezultatul este că o incertitudine mai mare crește valoarea pusă pe flexibilitate și implicit valoarea deținerii opțiunii. Să presupunem că o firmă preia un proiect major de implementare a unui sistem de trading de ultimă generație. Firma alege să pornească în primă fază cu implementarea unui prototip și apoi în funcție de rezultatul prototipului va decide demararea proiectului pe scară largă. În acest caz putem asimila costul de implementare a prototipului cu costul de achiziționare a opțiunii pentru a demara întreg proiectul. Managementul poate influența procesul de creare a valorii prin adoptarea unei strategii sistematice ce se concentrează pe a repoziționa componentele obligatorii în componente opționale. Pentru o abordare optimă a modului de gândire tip structură de opțiuni se recomandă: • Recunoașterea oportunităților și structurarea lor ca opțiuni; • Evaluarea valorii opțiunilor (valoare de achiziție, timp de expirare); • Managementul proiectului, astfel încât opțiunile să poată fi onorate. Tipuri de opțiuni: • Etapa – presupune împărțirea proiectului în mai multe etape unde urmărirea fiecăreia este dependentă de reevaluarea costurilor și beneficiilor la momentul în care etapa precedentă este finalizată, permițând astfel selectarea celor cu potențial pozitiv; • Abandon – odată cu evoluția proiectului și evidențierea costurilor și

beneficiilor, se poate decide pentru terminarea proiectului dacă beneficiile nu justifică costurile; • Amânare – atunci când este posibilă întârzierea deciziei de a investi fără a pune în pericol potențialele beneficii; • Creștere – dacă investiția inițială deschide noi oportunități pentru investiții ulterioare; • Schimbare – referitor la creșterea/ scăderea volumului de resurse alocate pentru proiect sau a capacităților sistemului operațional rezultat din proiect; • Trecere – de la un tip de tehnologie la altul. Evaluarea opțiunilor Cele mai frecvente modalități de calcul a opțiunilor sunt bazate pe conceptul popularizat cu denumirea de Black-Scholes. Pentru o explicație simplificată, să presupunem scenariul unei investiții în care avem opțiunea de a investi și pentru care opțiunea expiră în termen de 1 an. Considerând că posibilele rezultate ale investiției reprezentate în tabelul de mai jos sunt: zero (A), 26$(B), 100$(C) și multiplicând fiecare posibil rezultat cu probabilitatea ca el să fie obținut, vom obține valoarea fiecărei posibilități. Prin suma acestor valori ajungem la 33 ca valoare viitoare a opțiunii (în termen de 1 an). Presupunând o depunere de 100$ și o dobândă bancară de 10%, care ne va

întoarce 110 $ la finalul fiecărui an, putem calcula ușor ce valoare trebuie să depunem în prezent la bancă pentru a rezulta 33$ peste un an. Astfel ajungem la concluzia că valoarea maximă curentă a opțiunii este de 30$, iar peste această valoare investiția are o rentabilitate mai mică decât un depozit bancar. Trebuie remarcat că rezultatul evaluării unei opțiuni este la fel de bun ca și acuratețea dată de calculul probabilităților și presupune o atitudine neutră la risc, fără a face diferențierea între un câștig sigur (ex. titlu de stat sau dobândă bancară) și un câștig cu o doză de risc.

Managementul opțiunilor în proiecte Deși cuantificarea valorii fiecărei www.todaysoftmag.ro | nr. 43/ianuarie 2016

25


management

Flexibilitate strategică în timpul incertitudinii

opțiuni din proiect este dezirabilă, valoarea adăugată dată de acest tip de abordare constă în procesul de gândire și management care ar trebui să aibă ca scop ca valoarea creată prin structura de opțiuni să poată fi extrasă. Astfel pentru opțiunea deținută la un anumit moment în timp (dar nu mai târziu de data de expirare) se va compara valoarea estimată pentru opțiunea de a merge mai departe cu costurile revizuite la data curentă și se va proceda mai departe dacă costurile sunt acoperite. Deși în principiu diversele tipuri de opțiuni care pot fi obținute ca structură în proiect sunt egale ca valoare, în realitate unele sunt preferate în pofida altora. Opțiunile de creștere și schimbare sunt printre cele mai frecvente în firme, iar cea de abandon e printre cea mai puțin utilizată. O posibilă explicație poate fi faptul că managementul găsește opțiunile pozitive mai ușor de pus în practică și justificat decât cele negative. În abordarea unor proiecte de tip risc mare – recompensă mare, se recomandă: • Structurarea riscurilor sub formă de opțiuni; • Schimbarea percepției clientului din trebuie să fie în poate fi, unde acel poate va fi reevaluat peste o perioadă de timp fixă și pe baza unui set concret de criterii; • Identificarea factorilor care generează incertitudine și organizarea unei structuri dedicate de monitorizare; • Construcția în etape care generează valoare proprie indiferent dacă se continuă sau nu cu etape ulterioare; • Setarea de puncte de control explicite; • Nominalizarea unui responsabil pentru calitatea deciziilor și pentru a evita continuarea proiectului din simplă inerție.

Aplicabilitate Analiza de tip opțiuni reale nu este aplicabilă în contexte inflexibile în care scopul este fix, obligatoriu. În contexte unde nu se tolerează incertitudinea sau dacă consecințele incertitudinii pot fi ignorate, metodele tradiționale de evaluare a proiectelor par să fie suficiente. Proiectele strategice complexe, cu un grad de inovație ridicat și care tind să aibă un grad mare de incertitudine pe o perioadă lungă de timp, dau o valoare crescută acestui tip de gândire/ analiză, de aceea se recomandă utilizarea lui ca instrument în managementul unor astfel de inițiative.

26

nr. 43/ianuarie 2016 | www.todaysoftmag.ro


programare

programare

Logica Fuzzy și mecanismele specifice. O introducere teoretică

“As complexity rises, precise statements lose meaning and meaningful statements lose precision.” - Lotfi A. Zadeh

P

roiectarea mecanismelor tehnice ce pot reproduce o funcționalitate a corpului uman a fost una dintre preocupările frecvente care l-a frământat pe om de-a lungul evoluției sale. Răspunsul la întrebarea “De ce?” este unul destul de evident, ce se poate sumariza la următorul aspect: ușurarea ori îmbunătățirea activităților pe care le desfășoară omul. Bogdan Mursa mursa.bogdan@yardi.com Software Developer @ Yardi

Începând de la simpla roată care a apărut odată cu necesitatea transportului de materiale mult prea grele pentru un om până la sistemul optic ce formează un binoclu, care facilitează vizualizarea de obiecte aflate la o distanță mult prea mare, astfel de mecanisme au ajutat la o evoluție rapidă a tuturor domeniilor. Încetul cu încetul soluția tehnică ce poate efectua procesări similare creierului uman a devenit o necesitate, odată cu această evoluție rapidă din majoritatea domeniilor. Capacitatea intelectuală a oamenilor nu mai făcea față ori era mult prea costisitoare pentru a putea fi folosită în mecanisme manuale. Astfel apariția calculatorului modern, ce reprezintă transpunerea într-un sistem mecanic a creierului uman, marchează începutul unei noi ere, unde procesări de înaltă performanță devin posibile. Modul în care calculatorul interpretează datele se bazează pe o logică tradițională și anume logica binară. La un moment dat,

orice decizie luată de această unealtă creată de om se va rezuma la un răspuns 0 sau 1 sau, natural vorbind, adevărat sau fals. Până nu demult acest lucru mulțumea toate nevoile domeniilor ce foloseau puterea de procesare a calculatoarelor, însă expansiunea rapidă a nivelului calității și preciziei care se dorește în luarea de decizii a început să nu mai fie satisfăcută de acest mod tradițional de a procesa datele. Necesitatea folosirii unei logici care să fie mult apropiată de raționamentul creierului uman, a fost demult semnalată de profesorul Lotfi A. Zadeh (1965). Din păcate, precum marelui Einstein i-au fost respinse teoriile de mulți fizicieni ai momentului și acum aceste teorii reprezintă bazele fizicii moderne, așa și teoria profesorului Zadeh, intitulată Fuzzy Logic, a fost respinsă de majoritatea oamenilor de știință din acel moment; abia după mulți ani comunitatea științifică i-a înțeles adevărata putere. Acum teoria reprezintă una din bazele Inteligenței Artificiale

www.todaysoftmag.ro | nr. 43/ianuarie, 2016

27


programare Logica Fuzzy și mecanismele specifice. O introducere teoretică moderne și este folosită în sisteme fuzzy aflate în: automobile, mecanisme de securitate, aparate medicale, mecanisme decisionale (marketing, business etc.), aparate foto etc. . Noi ca oameni folosim așa numita logică fuzzy zi de zi, fără să avem nici cea mai mică idee, pentru că mintea umană este construită natural să gândească într-o manieră fuzzy. Un exemplu simplu poate fi reprezentat de răspunsurile posibile la întrebarea “Cât de satisfăcut ești de Universitatea Babeș-Bolyai?”: “Destul de satisfăcut”, “Nu sunt satisfăcut”, “Foarte satisfăcut”, care sunt răspunsuri ce pot fi considerate ambigue sau fuzzy, folosind termenii prezentați deja. Pentru că raționamentul uman este făcut să lucreze așa, pentru noi oamenii este foarte simplu să interpretăm aceste tipuri de răspunsuri, folosindu-ne de experiența acumulată deja sau de diferite metrici. Însă când vine vorba de mașini controlate de un calculator ce folosește logica binară, acest lucru nu mai este posibil. Pentru că acestea înțeleg doar valori ca 0 și 1, sau răspunsuri ca “satisfăcut”, “nesatisfăcut”. În termenii logicii fuzzy, aceste seturi de date ce pot fi interpretate de orice mașină într-un sistem binar se numesc crisp data. Pentru a parcurge și câteva noțiuni mai practice, vom folosi un exemplu destul de interesant ca să vedem cum se vor comporta logica fuzzy și cea tradițională. În acest exemplu dorim să creăm conceptual un sistem de “self-driving car” de pe un automobil care să fie capabil să ia cele mai bune decizii în momentul în care o altă mașină se află la o anumită distanță de automobilul nostru. Conform metodei tradiționale, sistemul nostru va putea lua doar două decizii: aproape și departe. Folosindu-ne de Figura 1. ne putem imagina distanța între mașini ca fiind împărțită în două jumătăți egale, fiecare având drept corespondent direct una din cele două decizii. În acest context, faptul că putem lua în considerare doar aceste două decizii trase în urma analizei distanței între mașini duce la măsuri direct proporționale. Voi formula aceste decizii sub forma unor reguli de forma “dacă-atunci” (dacă o condiție atunci o consecință).

28

nr. 43/ianuarie 2016 | www.todaysoftmag.ro

Dacă mașina B este aproape atunci frânează. Dacă mașina B este departe atunci nu frâna.

Dacă presupunem că mașina noastră va avea mereu o viteză mai mare decât mașina B și ținem cont de regulile de mai sus, atunci de fiecare dată când distanța dintre mașini va fi undeva în intervalul semnalat ca aproape, sistemul self-driving va frâna brusc, indiferent de cât de aproape sunt mașinile. Odată ce distanța dintre mașini se va situa în intervalul departe, mașina noastră va reporni și își va continua drumul până când iarăși va fi oprită brusc, în momentul în care distanța va ajunge în intervalul aproape. Abordarea pe care o propune logica fuzzy este una care spune că răspunsul este mereu undeva între 0 și 1 (inclusiv acestea). Deci reprezentarea distanței dintre cele două autovehicule va fi mai mult un gradient așa cum este afișat în Figura 2.

Astfel putem obține seturi de reguli de forma celor de mai sus, punând întrebări cât mai naturale: Mașina B este aproape ? Răspuns: 0.2 (nu foarte aproape). Dacă mașina B este 0.2 de aproape atunci frânează 0.2 (nu foarte tare). Răspuns: 0.8 (destul de aproape). Dacă mașina B este 0.8 de aproape atunci frânează 0.8 (destul de tare).


programare Exemplul de mai sus oferă ca răspuns la întrebare un număr ce se află în intervalul [0,1]. Acest număr este de fapt un număr fuzzy ce are în calitate de corespondent un set fuzzy căruia îi poate fi asociat (în acest caz setul “nu foarte aproape”). Într-un caz real, un mecanism de “self-driving car” ce ar implementa o logică fuzzy conform exemplului de mai sus, ar respecta comportamentul omenesc mult mai bine, mașina conducându-se cu adaptări ale vitezei în funcție de distanța între mașini, fără a pune frâne bruște. Cu siguranță acest exemplu v-a făcut un pic curioși în legătură cu algoritmul propriu-zis ce este implementat într-un astfel de sistem fuzzy. Această implementare este una foarte naturală de asemenea, deși mai este presărată pe alocuri cu diferite noțiuni specifice; partea bună este că acestea sunt sugestive. Un controler fuzzy sau un mecanism fuzzy nu este altceva decât o mașină ce folosește logica fuzzy. Acest controler poate să fie un sistem hardware sau software, sau amândouă, scopul lui final fiind să aplice logica fuzzy în așa fel încât să interpreteze datele așa cum ar face-o un om, doar că mult mai rapid. Flow-ul unui astfel de mecanism este reprezentat prin următorii pași: 1. Primirea unui număr de măsurători oferite de un alt sistem (în exemplul de mai sus, ar fi un senzor care ar măsura distanța între cele două mașini). E.g: 4 m, 5 m etc. 2. Să nu uităm că sistemul nostru poate procesa doar seturi de date fuzzy. Deci datele primite în pasul anterior trebuie transformate din date crisp în date fuzzy. Aceste transformări se fac conform unor metrici stabilite de un expert în domeniul de aplicabilitate. E.g: 4 m reprezintă o valoare de 0.3 de aproape. 3. Setul de date fuzzy rezultat este folosit ca input în regulile fuzzy de tipul „dacă-atunci”, ce au drept rezultat (sau consecință) un alt set de date fuzzy. E.g: Dacă mașina B este 0.3 m aproape atunci apasă frâna 0.3 (nu foarte tare) 4. În ultimul pas această consecință fuzzy trebuie tranformată în date crisp pentru ca sistemele ce citesc output-ul din controler-ul fuzzy să poată lua măsuri. E.g: 0.3 frână poate reprezenta o reducere de viteză de 30% față de viteză actuală.

TODAY SOFTWARE MAGAZINE Din păcate detaliile despre arhitectura propriu-zisă a unui astfel de sistem ce folosește flow-ul de mai sus, s-ar încadra întro altă discuție. Însă sper că aspectele teoretice prezentate de-a lungul articolului au fost destul de clare și au oferit o sumarizare completă a conceptului din spatele logicii fuzzy și a sistemelor ce o implementează. Vă recomand să continuați să descoperiți aplicațiile practice ale acestor sisteme cefolosesc modul de gândire propus de profesorul Zadeh. Beneficiile aduse pot fi unele extraordinar de mari, și pot aduce un aport de calitate și precizie oricărui proiect pe care îl desfășurați.

www.todaysoftmag.ro | nr. 43/ianuarie 2016

29


programare

Roku

R Thomas Morris thomas.morris@3pillarglobal.com Roku & Python Software Developer @3Pillar Global

30

nr. 43/2016, www.todaysoftmag.ro

oku a erupt în acești ultimi câțiva ani. Începând ca un startup modest în 2002 și lăudându-se acum cu peste 10 milioane de utilizatori, Roku este cel mai mare jucător de pe piața dispozitivelor de streaming pentru home media, vânzând 37% din toate dispozitivele de streaming anul trecut. Cel mai apropiat competitor este Chromecast, cu 19%. Deci, chiar dacă acest startup a reușit să se strecoare printre goliați precum Apple sau Google pe piața home media, a făcut acest lucru cu destul de mult succes.

Roku În caz că nu ați mai auzit de Roku până acum, este o cutiuță mică, nu scumpă (de obicei sub 100 $), pe care o puteți conecta la televizorul vostru pentru a reda în flux videouri de pe diferite canale sau aplicații. Sarcina unui dezvoltator Roku este să programeze un canal pe care utilizatorul să îl poată deschide și de pe care să poată reda în flux materiale video pe televizor. Astfel că, dacă cineva valorifică, să spunem, un canal Youtube, el sau ea va face o aplicație prin care utilizatorii pot căuta și viziona conținut Youtube pe al lor Roku. Când începeți să programați, veți realiza rapid că Roku, de fapt, nu are un simulator despre care să vorbim – orice cod pe care îl scrieți și doriți să îl testați trebuie încărcat pe un dispozitiv Roku real și apoi rulat pe aparat pentru a face debugging-ul. Dacă ați avut o zi grea la muncă și mai trebuie să lucrați și acasă la ceva, pregătiți-vă să luați dispozitivul acasă cu voi și să îl conectați la un televizor de rezervă pe care să sperăm că îl aveți prin preajmă. Debugging-ul se face prin

plasarea comenzilor ”stop” de-a lungul codului pentru a stabili punctele de întrerupere, apoi crearea unei sesiuni telnet pe dispozitivul Roku și trecerea la comenzi text în terminal. Este dureros, dacă sunteți obișnuiți cu o interfață de devirusare GUI, dar în mod cert se poate face. Unul din lucrurile și mai interesante este că, în loc să adopte un limbaj existent, așa cum Android a făcut cu Java, echipa Roku a decis să meargă pe contraintuitiv și să facă mecanismul să funcționeze cu propriul său limbaj de codare patentat – Brightscript. Acum, la o primă vedere, aceasta pare a fi greșeala tipică pe care o fac toți inginerii antreprenori atunci când creează un nou produs – decât să utilizeze ceva ce există deja și s-a dovedit că funcționează, ei reinventează roata deoarece asta iubesc ei să facă. Între timp, acest fapt are tendința de a cauza tot felul de probleme minore. Și, credeți-mă, Brightscript are destule din acestea. De la omiterea observațiilor când efectuează operațiile logice la introducerea unei multitudini de idiosincrasii,


TODAY SOFTWARE MAGAZINE dezvoltarea unui limbaj de programare nou nouț este de fapt mult mai complexă decât pare la început. Dar odată ce trecem peste tot oftatul exasperat și rotirea ochilor peste cap și peste ”of, tipic”-urile pe care le manifestăm cu toții atunci când o companie face încă un limbaj patentat, vom putea observa că există de fapt destule motive pentru care Roku a făcut asta. Pentru început, ei nu mai trebuie să se îngrijoreze în legătură cu apariția unei noi versiuni a limbajului și cu necesitatea de a-și face upgrade la biblioteci în mod constant pentru a ține pasul. Ei au controlul deplin și total asupra modului în care limbajul interacționează cu software-ul lor. Brightscript trăiește sau moare după placul Roku.

Lucrul cu Brightscript În ceea ce privește lucrul efectiv cu acest limbaj, una din caracteristicile cele mai grozave ale Brightscript este dimensiunea sa. Acest limbaj este foarte mic. Întreaga bază a codului constă în numai aproximativ 90 de tipuri de clase. Aceasta înseamnă că dacă ești un Rokui-ist nou, este simplu să te deprinzi cu sforile și să poți pune laolaltă ceva cod ușor care funcționează mai mult sau mai puțin. Cel mai interesant lucru este că Brightscript nu îți permite să îți formezi layout-ul pentru ecranele din aplicația ta. Da, chiar așa. Roku nu îți oferă control asupra locului unde să apară elementele de pe ecran sau cum să arate UI-ul tău. Alegi unul dintre cele 10 modele pe care Brightscript ți le oferă și îți treci informațiile pe el. De acolo, programul dispune și așază totul după cum știe, indiferent dacă ție îți place sau nu. Într-un fel, există ceva eliberator în legătură cu asta. Scrierea unei aplicații devine super-ușoară, căci tot ce ai de făcut este să scrii ceva de genul: poster = CreateObject(„roPosterScreen”) contents = [ { Title: „Show 1” Description: „The hottest thing on TV” } { Title: „Show 2” Description: „The next hottest thing on TV” } ] poster.SetContentList(contents) poster.Show()

Și ai deja o pagină care arată decent, cu două elemente pe ea, gata să funcționeze. Tot ce ține de stil va fi realizat conform modelelor prestabilite ale ”roPosterScreen”. În același timp, acesta este și unul dintre lucrurile cele mai rele ale Roku. Dacă ai clienți care pun întrebări de genul ”Este posibil să schimbăm acel mic…?” – obișnuiți-vă să spuneți ”Nu”. Și obișnuiți-vă să îl spuneți des, deoarece un lucru pe care Roku nu îl permite este personalizarea. De obicei, singurul aspect pe care Roku vă permite să îl schimbați este culoarea de fundal și câteva poziționări minore ale elementelor din bannerul din partea de sus a ecranului. În afară de acestea, nu mai puteți face nimic. Orice altceva în plus pe lângă propria culoare de fundal necesită dezvoltarea unei interfețe utilizând clasa ”roImageCanvas”, unde trebuie să specificați fiecare căsuță, obiect text și coordonată a imaginii, lățime și înălțime. Apoi, dacă doriți să adăugați orice formă de animație, va trebui să redați totul manual. Nu mai este nevoie să spun, este nevoie de un efort sârguincios pentru a-ți construi propria interfață personalizată, iar aceasta nu este ceva ce să îți dorești cu adevărat să faci, decât dacă ai prea mult timp la dispoziție.

Concluzie În ciuda acestor aspecte, ceea ce este promițător în legătură cu Roku este că industria dispozitivelor de streaming a înflorit în ultima perioadă. Un studiu al Parks Associates arată că numărul locuințelor din US care posedă un dispozitiv de streaming a crescut cu 63% de anul trecut, de la 13% la 21%. Același raport mai prezice și faptul că companiile vor vinde până la 86 milioane de dispozitive de streaming în 2019. Și dat fiind faptul că Roku deține o mare parte din această industrie, există o mare posibilitate ca cererea de programatori Roku să cunoască o creștere în următorii doi ani. Văzând cât de rapid a evoluat piața dispozitivelor de streaming, a învăța să programezi pentru vreunul devine din ce în ce mai viabil. Dacă poți tolera defectele platformei, popularitatea lui Roku face ca învățarea lui să fie o opțiune evidentă. Deși încă în faza incipientă, ascensiunea meteorică a Roku promite multe pe viitor.

Our core competencies include:

Product Strategy

Product Development

Product Support

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

www.3pillarglobal.com

www.todaysoftmag.ro | nr. 43/ianuarie 2016

31


programare

De la Zero la RESTful în patru pași. Design de API

A

cest articol este partea a doua dintr-o serie în care arătăm cum se pregătește, planifică și implementează un API RESTful. După ce am pus bazele în prima parte, de data aceasta vom expune modul cum se face designul unui API, precum și sunt aspectele la care trebuie să fim atenți.

Georgiana Gligor gb@tekkie.ro Owner @Tekkie Consulting

32

nr. 43/2016, www.todaysoftmag.ro

Pentru început, vom detalia semnificațiile concepte: vehicul și asigurare. acronimului REST, precum și constrângeDificultatea explicării termenului de rile arhitecturale pe care acesta le impune resursă provine din faptul că aspecte parasupra sistemului. ticulare de business pot dicta deviații de la cel mai intuitiv mod de reprezentare, fără Ce este REST? ca acest lucru să înlăture validitatea. Representational State Transfer este un stil de arhitectură de aplicație care, în loc REST a fost descris în mod formal de să impună decizii asupra tehnologiei, pre- Roy J. Fielding1 în teza sa de doctorat. El feră să definească un set de constrângeri pleacă de la un sistem care nu are delila care sistemul să adere. În felul acesta, mitări clare între componente, și aplică detaliile de implementare se pot schimba incremental ** cinci constrângeri obligaulterior, dar cu condiția să se păstreze torii și una opțională** asupra elementelor avantajele care decurg din abordarea care compun arhitectura: RESTful. 1. client-server: separarea aspectelor interfeței utilizator de stocarea datelor; Concepte REST cheie 2. fără stare: păstrarea detaliilor O resursă reprezintă orice informație despre sesiune strict la client, eliberând care poate fi denumită. De obicei, acestea astfel serverul de povara managementusunt concepte din domeniul aplicației, lui sesiunilor, pentru a aduce scalabilitate, indiferent că se referă la concepte con- siguranță, și vizibilitate; Dezavantajul crete (ex: persoane) sau la unele abstracte este că fiecare cerere va trebui să conțină (ex: fișiere). Un bun punct de pornire suficiente informații încât să poată fi proîn “vizualizarea” acestora pentru cei cesată corect. familiarizați cu OOP este să folosească o 3. cache: datele care compun un mapare unu-la-unu cu clasele ce compun răspuns trebuie să fie etichetate ca putând modelul domeniului. Deoarece noi construim o aplicație de monitorizat datele 1 http://www.ics.uci.edu/~fielding/pubs/dissertation/ despre vehicule, putem exemplifica două top.htm


testare

TODAY SOFTWARE MAGAZINE Dacă vom cere o reprezentare JSON a aceleași resurse GET /calendar/123sample Host example.dev Accept: application/json

ea ar putea arăta ca în exemplul de mai jos: {

„version”: „2.0”, „creator”: {„company”: „Tekkie Consulting”, „product”: „123sample”}, „type”: „Gregorian”, „language”: „English”, „timezone”: { „id”: „Europe/Bucharest” }, „events”: [{ „id”: „123456789@example.dev”, „start”: „2015-03-11T12:34:56.000Z”, „end”: „2015-03-11T12:59:59.000Z” }] }

sau neputând fi adăugate în memoria cache. 4. interfață uniformă între componente, așa cum e definită de următoarele constrângeri secundare: identificarea resurselor, manipularea resurselor prin intermediul reprezentărilor acestora, mesaje auto-descriptive; și hypermedia ca motor al stării În continuarea acestei serii de articole vom întrebuința JSON aplicației (aka HATEOAS). ca reprezentare implicită a resurselor noastre. 5. sistem stratificat: componenta poate să “vadă” și să interacționeze doar cu straturile din imediata sa apropiere; spre BDD în PHP exemplu, clienții nu pot presupune că interacționează direct cu Pentru a specifica felul în care se comportă API-ul nostru, sursa de date, deoarece pot comunica cu un nivel de cache. ne dorim să folosim Behaviour Driven Development. În această secțiune vom introduce câteva concepte și instrumente care să ne 6. [opțional] cod-la-cerere: funcționalitatea clientului ajute. Această pregătire ne va fi de mare folos atunci când vom poate fi extinsă prin descărcarea și execuția de cod extern; aceasta scrie cerințele în forma scenariilor de utilizare. înseamnă că nu este necesar să se pornească execuția în client Sunt două cuvinte cheie care apar de fiecare dată în discuțiile atunci când tot codul este disponibil, deoarece el poate fi obținut despre BDD în PHP. Cel mai popular este fără îndoială Behat2, ulterior la cerere; imaginați-vă cum este adăugată funcționalitatea care folosește Gherkin3 pentru specificarea cerințelor în limprin injectarea de cod Javascript în browser. baj apropiat de cel business. Celălalt este Codeception4, care întrebuințează cod PHP ușor de citit pentru a obține același lucru, Reprezentarea este o parte a stării resursei care este trans- și care oferă în plus instrumente pentru a facilita scrierea tuturor ferată între client și server. Se referă de obicei la starea curentă a testelor în același mod (atât cele de acceptanță, funcționale, cât și resursei, dar poate indica și starea dorită, ne putem gândi la acest testele unitare). lucru ca la un dry-run atunci când se face cererea. Deși nu constituie o constrângere în sine, mecanismele de În trecut am folosit Behat destul de mult la proiectele mele comunicare oferite de HTTP sunt alegerea celor mai mulți dez- Symfony, așa că în mod natural am încercat să merg pe calea cea voltatori care implementează REST. Și noi vom folosi HTTP în mai ușoară și să il instalez folosind $ composer install behat/ acest proiect, iar verbele sale ne vor ajuta să definim operațiile behat. Am observat conflicte de pachete deoarece Behat dorea care se efectuează asupra resurselor noastre. În cele ce urmează, să folosească symfony/event-dispatcher ~2.1 iar eu aveam deja vom folosi paradigma puternică a calendarului pentru a ilustra instalat 3.0.1. Așa că, în loc să încerc să rezolv problema prin ușor diferența dintre resursă și reprezentarea acesteia, prin studi- impunerea unor cerințe mai stricte asupra pachetelor, am decis erea reprezentării .ics în prima fază: că e momentul potrivit să încerc Codeception, mai ales că am primit feedback extrem de călduros de la cei care îl folosesc deja GET /calendar/123sample în munca lor de zi cu zi. Am lăsat în urmă frumoasele fișiere Host example.dev Accept: text/calendar Gherkin numai bune pentru oamenii de business, am revenit la 100% PHP! ar putea returna ceva similar cu: Așadar, am instalat folosind metoda Composer care a funcționat perfect din prima încercare: BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Tekkie Consulting//123sample//EN CALSCALE:GREGORIAN BEGIN:VTIMEZONE TZID:Europe/Bucharest END:VTIMEZONE BEGIN:VEVENT UID:123456789@example.dev DTSTART;TZID=Z:20150311T123456 DTEND;TZID=Z:20150311T125959 END:VEVENT END:VCALENDAR

$ composer install codeception/codeception

apoi am rulat comanda de bootstrap

$ vendor/bin/codecept bootstrap

Se observă un folder numit /tests/ în rădăcina proiectului, care a fost populat cu tot felul de bunătățuri. Deoarece suntem în mediu de dezvoltare, pornim aplicația local folosind serverul PHP built-in: 2 http://docs.behat.org/en/v2.5/ 3 http://docs.behat.org/en/v2.5/guides/1.gherkin.html 4 http://codeception.com

www.todaysoftmag.ro | nr. 43/ianuarie 2016

33


programare De la Zero la RESTful în patru pași. Design de API $ php -S localhost:12345 -t web

Cum facem design de API?

Așa cum am văzut în secțiunea introductivă REST, un concept și ne asigurăm că acest URL este configurat corect în fișierul cheie în acest stil arhitectural sunt resursele, toate celelalte lucruri tests/acceptance.suite.yml. gravitând în jurul lor. De aceea, recomand să trecem prin lista În continuare, vom genera un test de acceptanță simplu, conceptelor domeniului mai întâi, pentru a identifica resursele rulând comanda: noastre: $ vendor/bin/codecept generate:cept acceptance Wel• vehicul - conceptul principal, care descrie resursa princicome pală a aplicației noastre; Fișierul tests/acceptance/WelcomeCept.php nou creat • taxa de drum - are o dată de început și una de sfârșit a va conține un test simplu, menit doar să verifice ruta de status: validității și este asociată unui vehicul; • asigurare - un concept distinct, similar ca proprietăți cu $I = new AcceptanceTester($scenario); $I->wantTo(‘check the status route’); taxa de drum; $I->amOnPage(‘/’); • verificare tehnică - nu poate exista fără a fi atașată unui $I->see(‘Up and running.’); vehicul; are o dată de început și una de sfârșit a validității. Iar rezultatele sunt într-adevăr cele așteptate: Acum că am clarificat care sunt resursele aplicației noastre, ce $ vendor/bin/codecept run Codeception PHP Testing Framework v2.1.5 operații putem defini pe fiecare? Cu siguranță, ne dorim să putem Powered by PHPUnit 4.8.21 by Sebastian Bergmann and crea, modifica și obține date despre vehicule. Apoi avem nevoie contributors. să adăugăm și obținem detalii despre taxa de drum, verificările Acceptance Tests (1) ----------------------------periodice, precum și despre asigurare. Check the status route (WelcomeCept) Ok Toate operațiile de mai sus arată foarte asemănător cu cele -----------------------------------------CRUD (o parte din ele lipsesc din motive care țin de domeniu). Functional Tests (0) -------------------------------------------------------------------Așadar, definim lista completă de operații CRUD pe o resursă de tip vehicul: Unit Tests (0) -------------------------------------------------------------------------• citirea informațiilor despre colecția de vehicule : • GET /vehicles; Time: 214 ms, Memory: 11.25Mb • Dacă nu există elemente, vom primi status 200 OK și OK (1 test, 1 assertion) conținut [] . • Dacă există elemente în storage vom primi status 200 Testele de acceptanță Codeception sunt de regulă mai lente OK și conținutul tuturor, ca de exemplu: decât cele funcționale, deoarece este nevoie de un server web [{ „name”: „family car”, „make”: „Mazda”, „modpentru a rula testele. Din fericire, există teste funcționale, care ne el”: „3”, „registration”: „AB10TKK”, „VIN”: „JMZBLA2F701213123”, „engine”: „1999”, „emissions”: vor fi de mare folos în descrierea funcționalității API-ului, așa că „175”, „registered”: „2010-10-01T12:23:45Z” }] . le vom folosi pe acelea. Mai întâi activăm modulul Silex, adăugându-l în tests/functional.suite.yml: • Dacă serverul a întâmpinat probleme la servirea request-ului, o eroare 500 Internal Server Error va fi expusă. Aceasta este eroarea finală (“catch-all”) care se emite în cazul class_name: FunctionalTester modules: în care “serverul e de vină” și nu poate fi oferită nici o opțiune enabled: de recovery pentru client. Acest tip de eroare este aplicabilă - Silex: app: ‘app/bootstrap.php’ tuturor operațiilor de mai jos, așadar nu o vom repeta. - \Helper\Functional • Creare vehicul nou : POST /vehicles/ ;

34

nr. 43/ianuarie 2016 | www.todaysoftmag.ro


TODAY SOFTWARE MAGAZINE • Conținutul request-ului va avea toate informațiile nece- să folosească versiunea în URL-ul de bază, ca GitHub7 care sare despre mașină, spre exemplu întrebuințează numărul versiunii, sau ca Twilio8 care folosește data lansării https://api.twilio.com/2010-04-01 ca punct de { „name”: „family car”, „make”: „Mazda”, „model”: „3”, „registration”: „AB10TKK”, „VIN”: „JMZpornire. WePay au și ei timestampul lansării în URL9 pentru a BLA2F701213123”, „engine”: „1999”, „emissions”: diferenția versiunile între ele. Aproape toată lumea a ales ver„175”, „registered”: „2010-10-01T12:23:45Z” }. sionarea într-un fel sau altul, puteți începe cu/v1/. Cel mai • La crearea cu succes a resursei, ne așteptăm la un sta- mare avantaj al acestei abordări este posibilitatea de a avea un tus 200 OK (unii recomandă folosirea 201 Created), iar API foarte diferit în următoarea versiune. Cu toate acestea, e conținutul va avea aceleași date ca și request-ul, plus ID-ul pe important să vă întrebați dacă API-ul în sine e cel care va suferi care l-a primit resursa în backend. modificări, sau resursele sau reprezentările acestora. Strategiile de • Dacă a fost o problemă cu request-ul pe care clientul o modificare a structurii sau operațiilor unei resurse non-versionate poate rezolva (să zicem că VIN este obligatoriu și el nu a fost sunt puțin mai complexe, de obicei se oferă noile date la un URI transmis de către client) semnalăm acest lucru prin emiterea diferit, și se marchează ca deprecated cel existent. Așa cum arată unui cod de status 400 Bad Request și a conținutului care și Stefan Tilkov10, REST este mult mai mult decât unele șabloane descrie problema: { „VIN”: „mandatory” }. URI și verbele din HTTP. Alegerea strategiei optime este foarte • Citire informații despre un vehicul anume : dependentă de problema care trebuie rezolvată, și cu toții am auzit exemple de sub- sau supra-inginerie a API-urilor. GET /vehicles/{id}; Când ne construim URI-urile, trebuie să avem în vedere să • Dacă vehiculul cu ID-ul dat există, ne așteptăm la un nu amestecăm singularele și pluralurile. Așadar, nu vom expune status 200 OK și la un conținut care să îl descrie. simultan/vehicles/{id} și /tax/{id} în aceeași aplicație, vom alege • Dacă nu există date despre un vehicul cu acel ID, se va să folosim taxes în cel de-al doilea caz. Se recomandă în general emite statusul 404 Not Found și corpul răspunsului va fi gol. folosirea formei plural în detrimentul celei singulare. • Editare : Deoarece URI-urile identifică resurse, este considerată o bună practică folosirea în exclusivitatea a substantivelor în compunerea PUT /vehicles/{id}; acestora și evitarea verbelor. Pentru a descrie acțiunile care se pot • Dacă vehiculul cu ID-ul dat există, ne așteptăm la un efectua asupra resursei, se folosesc verbele HTTP. Spre exemplu, status 200 OK și la un conținut care să îl descrie. /vehicles/create ar trebui să fie de fapt un POST către /vehicles. • Dacă a fost o problemă cu request-ul pe care clientul o Pentru mai multe exemple aplicate, recomand standarpoate rezolva, semnalăm acest aspect prin emiterea codului dele Casei Albe care sunt foarte bine scrise11, ele conținând 400 Bad Request și a unui conținut care să descrie problema: multe exemple concrete de ce anume este considerat “rău” și ce “bun”. Sunt indicii bune și în tutorialul REST API12, dar reco{ „VIN”: „mandatory” }. mand prudență la navigarea prin acest site, deoarece nu toate • Ștergere: informațiile de acolo aderă strict la principiile REST pe care le-am prezentat la începutul acestui articol. DELETE /vehicles/{id}; Sfaturi chiar și mai detaliate privesc convețiile de numire și • Dacă vehiculul cu ID-ul dat există, acesta va fi eliminat folosirea snake-camel case13, atât pentru URI-uri cât și pentru din sistem și un cod 200 OK cu conținut gol va fi returnat. structuri JSON. Asigurați-vă că alegeți unul și îl utilizați peste tot. • Dacă nu există date despre un vehicul cu acel ID, se va emite statusul 404 Not Found și corpul răspunsului va fi gol. Definirea comportamentului aplicației Formatul de date din exemplul de mai sus este [conform Să trecem la pregătirea comportamentului pentru resursele de standardului ISO 8601][iso-8601], pentru a folosi un format care tip vehicul prin definirea unor teste funcționale pentru acestea. să conțină timezone. Facebook a fost nevoit să schimbe în 2012 Vom folosi clase Cest14 deoarece ulterior ne vor ajuta la o aranjare API-ul de evenimente5 din cauza unor aspecte legate de timezone. mai facilă a testelor noastre. Cest-urile sunt clase simple care gruNu vom detalia mai mult operațiile ce pot fi efectuate asupra pează funcționalitatea din Cept-uri într-o manieră OOP, și ne vor celorlalte tipuri de resurse, deoarece ele sunt similar celor deta- facilita gruparea testelor împreună. liate mai sus. Generăm primul nostru Cest folosind:

Păstrarea consistenței API-ului

Este important să oferim un API consistent, nu doar pentru noi, ci și pentru terții care îl consumă. E foarte ușor de explicat folosind distincția între public și publicat pe care o face Martin Fowler6. O dată ce un lucru este publicat, efectuarea de modificări asupra sa necesită un proces complex de analiză a funcționalității existente, oferirea celei noi la alt URI, lucruri care iau mai mult timp și implică efort suplimentar față de o modificare de cod obișnuită. Un aspect important care trebuie avut în vedere încă de la început este versionarea API-ului. Unii designeri de API preferă

$ vendor/bin/codecept generate:cest functional Vehicles Test was created in /Users/g/Sites/learn/silex-tutorial/tests/functional/VehiclesCept.php 7 https://developer.github.com/v3/ 8 https://www.twilio.com/docs/api/rest 9 https://www.wepay.com/developer/version 10 http://www.infoq.com/presentations/rest-misconceptions 11 https://github.com/WhiteHouse/api-standards 12 http://www.restapitutorial.com/lessons/restquicktips.html

5 https://developers.facebook.com/docs/apps/migrations/completed-changes#jul_2012

13 http://blog.octo.com/en/design-a-rest-api/#case

6 http://martinfowler.com/ieeeSoftware/published.pdf

14 http://codeception.com/docs/07-AdvancedUsage#.Vp5DcTYoXVo

www.todaysoftmag.ro | nr. 43/ianuarie 2016

35


programare De la Zero la RESTful în patru pași. Design de API Apoi definim cum va arăta o resursă de tip vehicul. Spunem practic că “la execuția unei cereri POST către /vehicles care primește un nume pentru noul item, îl vom crea și returna întreaga înregistrare, inclusiv IDul acesteia”. Pe baza acestui ID, vom efectua ulterior operații de modificare, la adresa /vehicles/ ID. <?php

class VehiclesCest { public function createItem(FunctionalTester $I, $scenario) { $I->wantTo(‘create a new vehicle’); $I->sendPOST(‘/vehicles’, [ ‘name’ => ‘Pansy’ ]); // we mark scenario as not implemented $scenario->incomplete(‘work in progress’);

}

}

$I->seeResponseCodeIs(200); $I->seeResponseIsJson(); $I->seeResponseJsonMatchesXpath(‘//id’); $I->seeResponseJsonMatchesXpath(‘//name’); $I->seeResponseMatchesJsonType([ ‘id’ => ‘integer’, ‘name’ => ‘string’ ]); $I->seeResponseContainsJson([ ‘id’ => 123, ‘name’ => ‘Pansy’ ]);

Functional Tests (4) -----------------------------Check the status route (StatusRouteCest::checkTheStatusRoute) Ok Create a new vehicle (VehiclesCest::createItem) Incomplete Retrieve current vehicles (VehiclesCest::retrieveItems) Incomplete Modify an existing item (VehiclesCest::updateItem) Incomplete -----------------------------------------------------------------------Time: 372 ms, Memory: 12.00Mb OK, but incomplete, skipped, or risky tests! Tests: 4, Assertions: 1, Incomplete: 3.

Definirea celorlalte cazuri de utilizare rămâne ca exercițiu pentru cititor.

Concluzii Am aflat ce este stilul arhitectural REST, am învățat diferența între resurse și reprezentările lor, am pregătit Codeception pentru a ne fi de folos la definirea cazurilor de utilizare, am învățat cum se face design de API din punct de vedere practic, și am văzut la ce trebuie să fim atenți în cadrul acestui proces. În articolul următor vom rafina cazurile de utilizare și vom trece la partea de implementare.16 16 https://en.wikipedia.org/wiki/ISO_8601

Să observăm că, cel puțin pentru moment, marcăm scenariul curent ca incomplet, pentru a preveni execuția aserțiilor noastre. Vom elimina acest lucru în partea următoare a tutorialului nostru, atunci când vom trece la implementarea efectivă a funcționalității. Mai multe detalii despre celelalte operații definite pentru vehicule, precum și aserțiile corespunzătoare, pot fi găsite pe GitHub15. Rularea testelor funcționale indică faptul că avem câteva definite și că ele sunt încă incomplete. Iată cele mai importante elemente de la rularea testelor:$ vendor/bin/codecept run 15 https://github.com/tekkie/autolog-api

36

nr. 43/ianuarie 2016 | www.todaysoftmag.ro


programare

programare

Frontend Mashup

M

ulți dintre programatorii web au nevoie ca timpul de randare a unei pagini web să fie cât mai scurt. Cu aceasta problemă te confrunți în primul rând atunci când se aleg uneltele cu care se va lucra la un proiect nou.

Raluca Oanca-Boca ralucaonaca@gmail.com Full Stack Developer @Self-Employed

La începutul unui proiect nou este întotdeauna greu să alegem uneltele care vor ușura munca fiecărui membru din echipă. Trebuie să fim atenți atunci când alegem aceste unelte, deoarece ele vor fi folosite până la finalul proiectului dar și în procesul de deployment. În acest articol am încercat să evidențiez operațiile care formează automatizarea frontend-ului. Acestea sunt: scrierea de css cu un framework preprocesat, minificarea și testarea css-ului cât și minificarea și testarea js-ului și , de asemenea, automatizarea acestora sub forma de procese <grunt> atât pentru mediul de dezvoltare local dar și pentru producție. Pentru proiectul prototip inițial s-a folosit ca backend limbajul de programare PHP fără a se utiliza nici un alt framework, iar ca framework de frontend am ales AngularJS. Când vine vorba de alegerea unui limbaj de stilizare putem alege unul dintre LESS, SASS/SCSS sau Stylus. Acestea sunt limbaje de stilizare preprocesate ceea ce au un avantaj fața de limbajul CSS pur. Avantajele principalele sunt posibilitatea de a avea variabile, moștenire, nesting și mixins. După ce am făcut alegerile dorite, provocarea este cum reușim să combinăm aceste unelte astfel încât să ne ușurăm în primul rând munca noastră, munca unui operator de dezvoltare, și să avem un timp de randare a paginii cât

mai mic. Avem la dispoziție : nodejs, ruby, dar și managerul de pachete ce se bazează pe nodejs: npm. Ca o practică bună în utilizarea managerului de pachete se folosește un fișier package.json în directorul rădăcină al proiectului.

În acest fișier vom lista toate pachetele de care avem nevoie cât și câteva din dependințele pentru mediu de lucru local. După crearea acestui fișier sau după modificarea acestuia, trebuie să rulam comanda:

npm install

În urma comenzii se creează directorul

node_modules, după care avem nevoie de npm – g intall grunt grunt-cli

Se va instala limbajul de programare ruby și câteva din dependințele acestuia dintre care : sass, sass-globing și compass. sudo apt-get install ruby-full sudo gem install sass compass sass-globbing

www.todaysoftmag.ro | nr. 43/ianuarie, 2016

37


programare Frontend Mashup Odată ce avem acestea instalate putem să începem să ne construim fișierul Gruntfile.js, fișier care, de asemenea, este creat pe același nivel ca și fișierul package. json. Avem nevoie de acest fișier deoarece de fiecare dată când comanda grunt este rulată va lua în considerare acest fișier.

folosit task-ul uglify. Pentru mediul de lucru local am ales opțiunea ca după concatenarea fișierelor rezultatul să fie expandat, iar pentru mediul de lucru în producție să fie minified. Avem o problemă dacă dorim să schimbăm orice fișier sass sau js, prin modificări pe care le dorim <on the fly>. Pentru acestea am creat task-ul watch care va verifica orice fișier sass sau js după care le va transforma și minifica după caz. Acest task este util pentru mediul de lucru local.

de teste folosind CasperJS. Pentru testarea js-ului se poate folosi Karma pentru unit testing și Jasmine pentru behaviour testing. „karma-chrome-launcher”: „^0.2.0”, „karma-jasmine”: „~0.1.5”, „karma-script-launcher”: „~0.1.0”, „karma-firefox-launcher”: „~0.1.3”

Partea de configurare a comenzii se face prin fișierul de configurare cât și prin câteva dintre comenzile inițiale. Următorul pas este de face load la task-urile inițiale de care depind task-urile customizate de către noi.

După ce s-a făcut load la task-urile inițiale, vom folosi task-ul compass pentru proiectul nostru. Dacă se va rula comanda grunt compass:dev vom vedea că în fișierul destinație scss vor fi concatenate toate fișierele sass folosite. Se va transforma apoi în format css cu format de afișare expandat. Pentru mediul de lucru în producție stilul este compact. Pentru concatenarea fișierelor js am

38

Spre final, scopul este înregistrarea task-urile customizate pentru mediile de lucru diferite. În acestă ordine se poate observa și task-ul browserSync care se bazează pe task-ul watch astfel că orice modificare pe care o vom face se va vedea automat în pagina web nemaiavând nevoie de a face reload la pagină manual. O diferență care se poate observa este că în mediul de lucru în producție am ales ca la final să rulez comanda pentru a adăuga un hash la finalul fișierului și a evita astfel o problemă de cache. În același timp se poate face și o versionare. Pentru testarea css-ului se poate folosi PhantomCSS pentru care am ales scrierea

nr. 43/ianuarie 2016 | www.todaysoftmag.ro

Pentru coding standards se poate folosi grunt.loadNpmTasks(‚grunt-contribjshint’); dar am preferat să folosesc un pre-commit hook pentru git. Folosind o singură comandă putem să ne automatizăm munca într-un mediu local cât și într-un mediu de producție. În același timp ne folosim de principiile DRY, avem mai puține erori și putem să facem modificările mai ușor. În concluzie, avantajul constă în faptul că nu vom mai adăuga fiecare fișier css sau js, ci în final, prin utilizarea grunt vom avea doar un fișier care trebuie adăugat în pagina HTML.

Bibliografie: [1]. http://conferences.oreilly.com/fluent/ fluent2014/public/schedule/detail/32532 [2]. https://speakerdeck.com/addyosmani/ automating-front-end-workflow [3]. www.gruntjs.com [4]. https://www.npmjs.com/ [5]. http://gruntjs.com/plugins


programare

programare

În căutare de (potențial) talent

L

a fiecare început de an, ne propunem ( și cei conștiincioși, chiar reușesc) să facem schimbări radicale, fie în ceea ce ne privește, fie în mediul ce ne înconjoară, pentru a avea rezultate la superlativ - cele mai multe vânzări, cel mai bun program, cei mai motivați angajați, cel mai mare profit etc.

Mădălina Nastasa madalina.nastasa@happyemployees.eu Sales Development Representative @ Azimut Happy Employees

Pentru că cei conștiincioși chiar reușesc, venim în întâmpinarea voastră cu provocările care v-ar putea încetini pe termen mediu-lung în a vă atinge obiectivul superlativ în business.

Statisticile anului 2015 Criza talentului a fost resimțită mai întâi în lumea HR-ului, apoi în cea a businessului. Oricât de inovativă, deschisă și performantă ar fi o companie, va fi în cele din urmă nevoie de alte și alte talente care să o susțină pe o curbă ascendentă. O medie globală publicată în 2015 relevă faptul că 38% dintre angajatori simt că nu găsesc oamenii potriviți companiei lor, procentaj neîntrecut din anul 20081 . Cum stă România față de media globală? Conform statisticilor, România se confruntă cu cea mai gravă criză a talentelor de pe continent, cu o medie de 61% dintre angajatori îngrijorați că nu reușesc să își completeze echipa cu joburi necesare businessului, urmată de Grecia (59%) și Turcia, 1

Sursă: http://www.manpowergroup.com/wps/wcm/

connect/db23c560-08b6-485f-9bf6-f5f38a43c76a/2015_Talent_ Shortage_Survey_US-lo_res.pdf?MOD=AJPERES

Bulgaria, Ungaria. La capătul opus se află Irlanda ( 11%) dar și Olanda, Spania și Marea Britanie cu 14%.

Care sunt semnele acestei crize?

Tot de la angajatori am aflat și cauzele pentru care nu reușesc să angajeze oamenii potriviți. În primul rând, nu sunt destui aplicanți care să se prezinte la interviu. Dacă totuși vin, situația rămâne în continuare îngrijorătoare deoarece fie nu au experiența profesională suficientă, fie competențe tehnice sau soft slabe sau, în ultimă instanță, au pretenții salariale absolut neancorate în realitatea jobului și a firmei.

Consecințe pentru business Merită să ne facem griji? Nu putem decide decât dacă ne uităm și la consecințele acestei crize. Statistica făcută pe zona EMEA ( Europe, Middle East and Africa) ne arată procentaje în creștere față de anii trecuți, ceea ce înseamnă că managerii găsesc consecințele din ce în ce mai amenințătoare. Așadar: • 55% dintre angajatori consideră că principalul efect negativ al crizei de talent

www.todaysoftmag.ro | nr. 43/ianuarie, 2016

39


educație În căutare de (potențial) talent este inabilitatea de a-și mulțumi clienții. • 51% spun că productivitatea și competitivitatea companiei lor are și va avea de asemena de suferit. • inovație și creativitate scăzută (37%); • fluctuație mai ridicată a personalului (36%). Vestea mai puțin rea este că mai avem timp până în 2020 să atenuăm efectele negative ale crizei. Se preconizează că în 2020 criza talentului va ajunge la apogeu, astfel încât vor fi mai multi angajați care părăsesc piața muncii decât cei care intră. Acest fenomen va face angajații de pe piața muncii mult mai valoroși, iar retenția lor precum și recrutarea de noi talente vor trona în topul priorităților de business. În niciun caz nu putem risca să ne prindă nepregătiți. Acum că suntem conștienți de criza ce ne pândește și ne amenință, ce putem face în această privință? În mod clar, majoritatea companiilor mari deja au început să ia în considerare la modul serios această criză, conștientizând că poziția lor de pe piață este direct afectată. Printre politicile de personal în curs de implementare, amintim2 3 : • orar de lucru flexibil, pentru a asigura un echilibru personal – profesional 2

Sursă: http://hrtimesblog.com/2015/03/25/

if-you-build-it-will-they-come-overcoming-the-talent-crisis-inmanufacturing/ 3

S u r s ă : h t t p : / / w w w. b l o o m b e r g . c o m / b w /

stories/2008-09-19/the-global-talent-crisisbusinessweek-business-news-stock-market-and-financial-advice

40

optim (axat pe obiective, nu pe ore de Acum că știi, care va fi strategia ta de lucru). management al talentului? • oportunități de dezvoltare în cadrul companiei: • autonomie pe sarcini din ce în ce mai variate/complexe, • pregătire pentru reactualizarea competențelor tehnice și a celor soft, • pregătirea potențialilor lideri. • facilitarea trecerii angajaților tineri cât mai rapid de la stadiul de acomodare la cel de productivitate: • s a t i s f a c e r e a n e v o i i d e independență ( cu cât reușesc să intre mai repede în producție, cu atât mai repede se pot specializa și pot căpăta autonomie pe ceea ce fac); • programe de învățare inițiatice, personalizate pe nevoile noilor-veniți • management axat pe generațiile de pe piața muncii (e.g. Millennials devin majoritari pe piața muncii, cu o etică de muncă diferită față de baby boomers sau generația X). • managementul performanței clar pentru toți angajații, corelat cu recompense și beneficii. Iată, ce ne rezervă piața muncii – o criză a talentului care va transforma goana după angajați și efortul de a ne menține colegii în firmă în priorități. În România această criză deja lovește mediul de afaceri, cu 61% dintre angajatori considerând că le este dificil să găsească oameni potriviți.

nr. 43/ianuarie 2016 | www.todaysoftmag.ro


contabilitate

10 noutăţi fiscale valabile din 2016 cu impact pentru antreprenori

A

nul 2016 aduce importante noutăţi fiscale pentru antreprenori, indiferent de forma de organizare: SRL, PFA, etc.Principalele modificări sunt date de apariţia noului cod fiscal (Legea 227/2015) şi a Ordinului 2634/2015 care aduce actualizări importante formei documentelor financiar-contabile.Prezentăm mai jos o sinteză a principalelor modificări cu impact în activitatea de zi cu zi a antreprenorilor:

Delia Mircea delia@contzilla.ro @ Contzilla.ro

1. Noile cote de TVA Începand cu data de 1 ianuarie 2016 şi până la data de 31 decembrie 2016, cota standard de TVA este de 20%, urmând ca din 1 ianuarie 2017 să devină 19%. Cota standard aplicabilă până la 31 decembrie 2015 a fost de 24%. Cotele reduse rămân 9% respectiv 5% pentru anumite categorii de bunuri şi servicii. Tot ca element de noutate aplicabil de la 1 ianuarie 2016 este cota redusă de 9% la apă. Această modificare a fost introdusă prin OUG 50/2015. Un caz foarte întâlnit în practică este cel în care în luna decembrie s-a emis o factură de avans pentru servicii (de exemplu servicii

tehnice IT) cu termen de finalizare 2016. Factura de avans a fost emisă cu TVA 24% . Cum se va storna avansul ? Având în vedere că faptul generator al TVA intervine în 2016 când este valabilă noua cotă, se va storna vechea factură cu TVA 24% şi se va emite noua factură pentru suma întreagă cu TVA 20%.

2. Noile cote de impozitare a microîntreprinderilor Cotele de impozitare pentru veniturile microîntreprinderilor, aplicabile de la 1 ianuarie 2016 sunt: a) 1% pentru microîntreprinderile care

www.todaysoftmag.ro | nr. 43/ianuarie, 2016

41


contabilitate 10 noutăţi fiscale valabile din 2016 cu impact pentru antreprenori au peste 2 salariaţi, inclusiv; Salariul net aferent unui salariu brut b) 2% pentru microîntreprinderile care de 1.050 este de : 785 lei au un salariat; Am presupus ca salariatul nu are perc) 3%, pentru microîntreprinderile soane în întreţinere. care nu au salariaţi. Începând cu 1 mai 2016 salariul minim brut pe economie se va majora la 1.250 lei.

Îndeplinirea condiţiei privind numărul de salariaţi

Un salariat este persoana angajată cu contract individual de muncă cu normă întreagă, însă se acceptă şi cazurile în care microîntreprinderile : a) au persoane angajate cu contract individual de muncă cu timp parţial dacă fracţiunile de normă prevăzute în acestea, însumate, reprezintă echivalentul unei norme întregi – de exemplu : doi salariaţi încadraţi fiecare cu câte 4 ore/zi, sau 4 salariaţi cu câte 2 ore/zi sau alte variante care însumează 8 ore. b) au încheiate contracte de administrare sau mandat, potrivit legii, în cazul în care remuneraţia acestora este cel puţin la nivelul salariului de bază minim brut pe ţară garantat în plată. Ca excepţie, microîntreprinderile înfiinţate după 1 ianuarie 2016 beneficiază de facilităţi suplimentare în sensul că dacă au cel puţin un salariat şi sunt constituite pe o durată mai mare de 48 de luni, iar acţionarii/asociaţii lor nu au deţinut titluri de participare la alte persoane juridice, cota de impozitare este 1% pentru primele 24 de luni de la data înregistrării persoanei juridice române. Cota de impozitare se aplică până la sfârşitul trimestrului în care se încheie perioada de 24 de luni. Angajarea trebuie efectuată în termen de 60 de zile de la data înregistrării persoanei juridice. Începând cu 1 ianuarie 2016, pentru un angajat cu program de 8 ore/zi şi cu salariul minim pe economie (1.050 lei), se plătesc următoarele taxe: • contribuţii și impozit care se reţin de la angajat : 265 lei; • contribuţii datorate de angajator:240 lei.

42

3. Noul plafon al cifrei de afaceri aferente microîntreprinderilor Tot din 2016 se modifică şi plafonul cifrei de afaceri pentru care o entitate poate să se înregistreze ca microîntreprindere. Astfel, dacă în cursul unui an fiscal o microîntreprindere realizează venituri mai mari de 100.000 euro sau ponderea veniturilor realizate din consultanţă şi management în veniturile totale este de peste 20% inclusiv, aceasta datorează impozit pe profit, începând cu trimestrul în care s-a depăşit oricare dintre aceste limite. Până la 31 decembrie 2015 limita a fost de 65.000 euro. Ce se întâmplă dacă nu mai sunt îndeplinite condiţiile de încadrare ca microîntreprindere?

fizică are şi venituri din salarii sau nu (până la această dată, dacă PFA-ul obţinea şi venituri din salarii nu avea obligaţia plăţii CAS-ului); • PFA poate opta între cota CAS de 10,5% (cota individuală) aplicabilă venitului net realizat sau 26.3% aceasta corespunzând unui stagiu de cotizare complet. • modul de plată a CAS este următorul : în timpul anului PFA în sistem real are obligaţia de a efectua plăţi anticipate având ca bază de calcul lunară 35% din caştigul salarial mediu brut pe economie , urmând ca în anul fiscal următor, pe baza declaraţiei de venit realizat, organele fiscale vor recalcula baza lunară de calcul al contribuţiei ca diferenţa între venitul brut realizat şi cheltuielile efectuate în scopul desfăşurării activităţii, exclusiv cheltuielile cu CAS. • CASS se datorează în continuare în cota de 5.5% la o bază lunară calculată ca diferenţă dintre venitul brut şi cheltuielile deductibile, exclusiv cheltuielile cu CASS. • nu sunt obligaţii de plată a celorlalte contribuţii: şomaj, fond de risc, concedii şi indemnizaţii şi garantare creanţe. Se poate contribui prin opţiune la şomaj şi la concedii şi indemnizaţii; • în ce priveşte impozitul de 16% pe venit , acesta se datorează în continuare, neexistând nici o modificare faţă de anul precedent.

Dacă în cursul unui an fiscal o microîntreprindere realizează venituri mai mari de 100.000 euro sau ponderea veniturilor realizate din consultanţă şi management în veniturile totale este de peste 20% inclusiv, aceasta datorează impozit pe profit, începând cu trimestrul în care s-a depăşit oricare dintre aceste limite. Până la 31 decembrie 2015 , în cazul în care se depăşeau plafoanele recalcularea impozitului Există anumite limite minime şi maxime la se efectua de la începutul anului respectiv, CAS datorat de PFA situaţie mult mai dezavantajoasă fiscal. • Limita minimă a CAS este de 35% câştigul salarial mediu brut pe economie. 4.Impozitarea PFA-urilor În 2016 acest salariu este 2.681 Cu siguranţă, anul 2016 nu va fi un an lei. Rezultă o contribuţie minimă de favorabil fiscal pentru PFA-uri. 0.35*2.681 lei *10.5% = 99 lei. Ce s-a schimbat începând cu 1 ianuarie • Limita maximă a CAS este 5 salarii 2016 ? medii brute • începând cu 1 ianuarie 2016 pentru Contribuţia maximă este astfel 10.5%* veniturile din activităţi independente se 2.681 lei * 5 = 1.408 lei va plăti CAS indiferent dacă persoana Din 2017 va interveni şi o plafonare a

nr. 43/ianuarie 2016 | www.todaysoftmag.ro


TODAY SOFTWARE MAGAZINE bazei de calcul a CASS (sănătate) la de 5 În 2017, acelaşi asociat-angajat, va plăti cifra de afaceri. ori câştigul salarial mediu brut. pe lângă impozitul de 5% şi CASS 5.5%.

7.Scutirea de impozit a profitului reinvestit

5. Impozitul pe dividende

6. Sponsorizări

În anul 2016 impozitul pe dividende se stabileşte prin aplicarea unei cote de impozit de 5% asupra dividendului brut plătit unei persoane juridice române. În 2015 aceasta cotă a fost de 16% iar din 2017 pe lângă impozitul de 5% la dividende se va aplica şi contribuţia la asigurări sociale de sănătate de 5.5%, astfel ajungându-se la o cota de impozitare de 10,5%. Aşadar, 2016 este o perioada favorabilă de ridicare a dividendelor aferente exerciţiilor financiare precedente.

Sponsorizarea este actul juridic prin care două persoane convin cu privire la transferul dreptului de proprietate asupra unor bunuri materiale sau mijloace financiare pentru susţinerea unor activităţi fără scop lucrativ desfăşurate de către una dintre părţi, denumită beneficiarul sponsorizării. Poate fi beneficiari ai sponsorizării: persoane juridice fără scop lucrativ, care desfăşoară în România sau urmează să desfăşoare o activitate în domeniile: cultural, artistic, educativ, de învăţământ, ştiinţific – cercetare fundamentală şi aplicată, umanitar, religios, filantropic, sportiv, al protecţiei drepturilor omului, medicosanitar, de asistenţă şi servicii sociale, de protecţia mediului, social şi comunitar, de reprezentare a asociaţiilor profesionale, precum şi de întreţinere, restaurare, conservare şi punere în valoare a monumentelor istorice, emisiuni ori programe ale organismelor de televiziune sau radiodifuziune, precum şi cărţi ori publicaţii din domeniile definite anterior. Din 2016 creşte limita în care se pot acorda sponsorizări în cazul plătitorilor de impozit pe profit. Modul de calcul pentru 2016 este minimul dintre : 1. valoarea calculată prin aplicarea cotei de 0,5% la cifra de afaceri; 2. valoarea reprezentând 20% din impozitul pe profit datorat. Anterior, până la 31 decembrie 2015, criteriul de la punctul 1. era de 3 la mie din

Ce se întâmplă dacă nu există suficienţi bani în firma pentru a face plata dividendelor? Chiar dacă în momentul în care se cunoaşte profitul care se poate repartiza, se constată că nu există suficienţi bani în firmă pentru a efectua plăţile, este important de menţionat că acestea pot să se efectueze ulterior, pe măsură ce se acumulează resurse, în baza deciziei de repartizare a acestora. Este de asemenea important faptul că impozitul pe dividende trebuie să fie reţinut în momentul plăţii şi virat la buget până în data de 25 a lunii următoare celei în care se plătesc către asociaţi sau acţionari.

Dacă un asociat este şi angajat în firmă, ce taxe i se aplică în 2016 pentru dividendele retrase? Dar în 2017? În 2016, un asociat care este şi angajat în propria firmă sau în alta, nu va datora decât 5% impozit pe dividende.

Profitul investit în echipamente tehnologice, calculatoare electronice şi echipamente periferice, maşini şi aparate de casă, de control şi de facturare, precum şi în programe informatice, produse şi/sau achiziţionate, inclusiv în baza contractelor de leasing financiar, şi puse în funcţiune, folosite în scopul desfăşurării activitătii economice, este scutit de impozit. Activele corporale pentru care se aplică scutirea de impozit sunt cele prevăzute în subgrupa 2.1, respectiv în clasa 2.2.9 din Catalogul privind clasificarea şi duratele normale de funcţionare a mijloacelor fixe (HG 2139/2004). Noutatea pentru 2016 este cuprinderea grupei 2.2.9. în lista activelor pentru care se aplică scutirea. Grupa 2.2.9. cuprinde „Calculatoare electronice şi echipamente periferice. Maşini şi aparate de casă, control şi facturat”.

8. Diurna pentru administratori Dacă până la 31 decembrie 2015 în codul fiscal nu era prevăzută posibilitatea acordării diurnei deductibile pentru administratori, începând cu 1 ianuarie 2016, se prevede că şi aceştia pot beneficia de diurnă deductibilă. O menţiune importantă introdusă în 2016 : plafonul zilnic neimpozabil se acordă numai dacă durata deplasării este mai mare de 12 ore, considerându-se fiecare 24 de ore câte o zi de deplasare în interesul desfăşurării activităţii. Nivelul diurnei deductibile este în

www.todaysoftmag.ro | nr. 43/ianuarie 2016

43


contabilitate 10 noutăţi fiscale valabile din 2016 cu impact pentru antreprenori

prezent de 42.5 lei/zi (baza legala : Ordinul În cheltuielile sociale se vor putea 60/2015). include din 2016 şi tichetele cadou oferite salariaţilor şi copiilor minori ai acestora cu 9. Cheltuielile sociale ocazia Paştelui, zilei de 1 iunie, Crăciunului Cheltuielile sociale sunt acele cheltu- și a sărbătorilor similare ale altor culte ieli care, aşa cum sugerează şi denumirea, religioase în limita a 150 de lei/persoană/ au un scop social cum ar fi : ajutoarele de eveniment . Cu alte cuvinte, tichetele acorînmormântare, ajutoarele pentru bolile date în aceste situaţii nu se impozitează cu grave şi incurabile, ajutoarele pentru 16%. naştere, cheltuielile pentru funcţionarea corespunzătoare a unor unităţi aflate în 10. Actualizarea formei documentelor administrarea contribuabililor, precum: financiar-contabile creşe, grădiniţe, şcoli, muzee, biblioteci, Prin Ordinul 2634/2015 privind cantine, baze sportive, cluburi, cămine de documentele financiar-contabile se aduc nefamilişti şi altele asemenea, cheltuie- modificări importante formei şi conţinutulile reprezentând: cadouri în bani sau în lui documentelor financiar-contabile. Mai natură, inclusiv tichete cadou oferite salari- jos sunt cele mai importante : aţilor şi copiilor minori ai acestora, servicii • eliminarea obligației de a aplica de sănătate acordate în cazul bolilor profeștampila pe documentele financiar-consionale şi al accidentelor de muncă până tabile, ca urmare a abrogării prevederilor la internarea într-o unitate sanitară, tichete legale referitoare la obligația aplicării de creşă acordate de angajator în conformiștampilei de către persoanele și entitățile tate cu legislaţia în vigoare, contravaloarea prevăzute la art. V alin. (1) și (2) din serviciilor turistice şi/sau de tratament, Ordonanța Guvernului nr. 17/2015 priinclusiv transportul, acordate de angajator vind reglementarea unor măsuri fiscal pentru salariaţii proprii şi membrii lor de bugetare și modificarea și completarea familie, precum şi contribuţia la fondurile unor acte normative (ex.: ordin de deplade intervenţie ale asociaţiilor profesionale sare, chitanță, decont pentru operațiuni ale minerilor sau alte cheltuieli cu caracter în participație); social efectuate în baza contractului colec• eliminarea conținutului minimal tiv de muncă sau a unui regulament intern. obligatoriu din cadrul normelor de întocmire și utilizare a fiecărui formular; Cheltuielile sociale vor avea începând • eliminarea obligativității întocmirii/ cu 2016 o deductibilitate limitată la 5% emiterii unui anumit număr de exemdin valoarea cheltuielilor cu salariile perplare dintr-un document; sonalului, faţă de 2% cât era până la 31 • eliminarea prevederilor referitoare la decembrie 2015. circuitul și locul de arhivare ale fiecărui document;

44

nr. 43/ianuarie, 2016 | www.todaysoftmag.ro

În concluzie, anul 2016 aduce modificări pe toate planurile: atât fiscal cât şi contabil, atât favorabile (scăderea impozitului pe dividende, reducerea cotei de impozitare a microîntreprinderilor) cât şi nefavorabile (impozitarea suplimentară a PFA-urilor).


www.todaysoftmag.ro | nr. 43/ianuarie, 2016

45


sponsori

powered by


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