Numarul 37 - Iulie 2015 - Today Software Magazine

Page 1

Nr. 37 No. 36••Iulie June2015 2015• •www.todaysoftmag.ro www.todaysoftmag.ro• •www.todaysoftmag.com www.todaysoftmag.com

TSM

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

Descoperirea entităților similare în

Download from

Windows Store

modele BigData

Scurtul ghid al unicornului din Ruby

Rapid Software Testing - o schimbare de perspectivă Aplicaţii IoT cu Java ME Embedded 8 şi Eclipse Aplicația WheelNav Știu Scrum, Kanban și alte câteva cuvinte în Agile IT BRAINIACS sau despre emoție, talent și multă muncă

on Rails

Incursiune în lumea obiectivelor personale De la birocrație la succes în înființarea unei firme High-end content management, varianta Adobe Teste cu Selenium în cotextul Continuous Delivery



6 TYPO3 – o nouă lume, un nou punct de vedere Alexandru - Cătălin Diniș

26 Teste cu Selenium în contextul Continuous Delivery Robert Lantos

8 IT BRAINIACS sau despre emoție, talent și multă muncă

30 High-End Content Management, varianta Adobe

Ileana Fritea

Alexandru Gheboianu

10 Ve își lansează oficial ultimul centru de dezvoltare în Cluj Bogdan Mureşan

12 Incursiune în lumea obiectivelor personale Bogdan Mureşan

15 Descoperirea entităților similare în modele BigData Ovidiu Petridean

20 Aplicația WheelNav Csongor Korosi și Cristian Chertes

23 Știu Scrum, Kanban si alte câteva cuvinte în Agile Ovidiu Șuta

32 Scurtul ghid al unicornului din Ruby on Rails Emil Luța

36 Aplicaţii IoT cu Java ME Embedded 8 şi Eclipse Dănuț Chindriș

40 Rapid Software Testing - o schimbare de perspectivă Monica Rațiu

42 De la birocrație la succes în înființarea unei firme Ioana Varga


editorial

P

Ovidiu Măţan

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

erioada concediilor care aduce cu ea evadarea din toropeala urbană și din rutina cotidiană este binevenită și binemeritată după un an de muncă . Totodată, concediul pune la treabă acele aplicații legate de navigare și mobilizează jocurile casual pentru pauza de după plajă. Dacă s-a preferat lectura și s-a ajuns la finalul unui roman senzațional, este momentul pentru a citi ultimul număr al TSM pentru a face revenirea din concediu mai lină. Oricum odată reîntorși din concediu, suntem toți cu forțe proaspete, cu noi revelații și noi perspective asupra modului de lucru de până atunci. Dacă sunteți în Cluj, să veniți la evenimentul de lansare din această lună. Noi am revenit plini de energie și pregătim o nouă ediție a Cluj IT Days pentru finalul lunii noiembrie, unde keynote speaker-ul de anul trecut, Peter Lawrey, a confirmat deja prezența. Salutăm debutul din acest număr al colegului Alexandru Diniș, în al cărui articol, acesta își descrie experiențele sale legate participarea la un training de o săptămână în Koln pe tema TYPO 3, având oportunitatea să se întâlnească cu comunitatea de IT din acea zonă. Un alt articol oferă bilanțul celor șapte luni al programului IT Brainiacs care și-a propus și a reușit să introducă elevi de gimnaziu și de liceu în universul programării. Și au reușit, dovada o reprezintă scrierea câtorva jocuri interesante în Java și Obejctice-C/Swift. Le urăm mult succes celor de la Telenav și Apex-Edu și continuarea acestui program și în anul viitor. Deschidem articolele tehnice din acest număr cu Descoperirea entităților similare în modele BigData , care reprezintă o introducere în data mining. Intrăm și în zona de IoT prin Aplicaţii IoT cu Java ME Embedded 8 şi Eclipse unde este folosit un Raspberry PI împreună cu JavaME. Pentru persoanele cu disabilițăți în deplasare s-a realizat o aplicație dedicată pentru participarea la AT&T Connect Ability Challenge. Mai mult detalii găsiți în Aplicația WheelNav. Faptul că Ruby on Rails începe să nu mai fie un limbaj de nișă este demonstrat în Scurtul ghid al unicornului din Ruby on Rails. High-End Content Management, varianta Adobe prezintă produsul dar și arhitectura unei soluții ce dorește transferul publicării de informații de la programatori către content manager-i. La final, Știu Scrum, Kanban și alte câteva cuvinte în Agile, vă invite să vă găsiți răgazul de a reflecta asupra maturității conceptelor IT.

Ovidiu Măţan

Fondator Today Software Magazine

4

nr. 37/2015, www.todaysoftmag.ro


Redacţia Today Software Magazine Fondator / Editor in chief: Ovidiu Mățan ovidiu.matan@todaysoftmag.com Graphic designer: Dan Hădărău dan.hadarau@todaysoftmag.com Copyright/Corector: Emilia Toma emilia.toma@todaysoftmag.com Traducător: Roxana Elena roxana.elena@todaysoftmag.com Reviewer: Tavi Bolog tavi.bolog@todaysoftmag.com Contabil : Delia Mircea delia.mircea@todaysoftmag.com Programator junior: Alexandru Diniș alexandru.dinis@todaysoftmag.com Marketing specialist și tehnoredactor: Ana Maria Bivol anamaria.bivol@todaysoftmag.com Tipar realizat de Daisler Print House Produs de

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

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

Lista autorilor Alexandru - Cătălin Diniș alexandru.dinis@todaysoftmag.com

Robert Lantos

Junior PHP Developer @Today Software Magazine

Senior QA Engineer @Betfair

Ileana Fritea

Alexandru Gheboianu

ileanafritea@gmail.com Președinte Apex-Edu @ Apex-Edu

Robert.Lantos@betfair.com

alexandru.gheboianu @pitechnologies.com Software Engineer @ Pitech+Plus

Bogdan Mureşan

Emil Luța

Director of Engineering @3Pillar Global

Developer @ Yonder

Ovidiu Petridean

Dănuţ Chindriş

Senior Software Developer @ SDL Research

Java Developer @ Elektrobit Automotive

Csongor Korosi

Monica Rațiu

iOS Developer @ Telenav

Marketing Specialist @ Altom

Cristian Chertes

Ioana Varga

bogdan.muresan@3pillarglobal.com

opetridean@sdl.com

emil.luta@tss-yonder.com

danut.chindris@elektrobit.com

Csongor.korosi@telenav.com

Cristian.chertes@telenav.com

monica.ratiu@altom.ro

ioana.varga@aiconsulting.ro

iOS Developer @ Telenav

Expert contabil Managing Partner @ A&I Consulting

Ovidiu Șuta

Sarah Hernandez

QA & Bid Manager @ ISDC

Director of Commercial Marketing @ VE Interactive

ovidiu.suta@isdc.eu

sarah.hernandez@veinteractive.com

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

www.todaysoftmag.ro | nr. 37/iulie, 2015

5


educație

TYPO3 – o nouă lume, un nou punct de vedere

S

ăptamânile trecute am primit de la compania Arxia invitaţia de a participa la TYPO3 Summer Camp 2015. Admit că la început am avut unele reticienţe din cauza lipsei de experienţă în acest framework, dar în cele din urmă, TYPO3 s-a dovedit pentru mine o experienţă minunată, trăită alături de oameni minunaţi.

Alexandru - Cătălin Diniș alexandru.dinis@todaysoftmag.com Programator junior @Today Software Magazine

6

nr. 37/2015, www.todaysoftmag.ro

În ultima perioadă citisem întâmplător despre TYPO3 şi despre puternica lui dezvoltare în Europa de Vest, însă niciodată nu mi-am imaginat ce poate să însemne acest framework cu adevărat. Am cons t at at c ă T Y P O 3 poate să îmbine toate calitățile necesare unui framework: este uşor de folosit, este rapid, şi nu în ultimul rând poate fi utilizat într-o gamă largă de aplicații. În ce pr iveşte alegerea locului de desfășurare pentru Summer Camp, consider că a fost una excelentă, deoarece comunitatea TYPO3 din Koln este cunoscută ca fiind una foarte strâns legată, cu un grad mare de implicare în cadrul tuturor

activităților. Participarea mea în această “tabără” s-a desfăşurat în cadrul firmei PHTH, o companie care se ocupă doar cu dezvoltarea de soft TYPO3. Situată într-o zonă liniştita a Kolnului, compania condusă de domnul Philipp Thielle oferă un spaţiu primitor şi propice dezvoltării softului. Modul eficient de organizare a comunității ş i pre o c up are a pentru o bună comunicare între membrii acesteia s-au remarcat încă din prima zi, când am fost preluat de la aeroport de către Philipp. După un scurt tur al oraşului şi un scurt tur al companiei, în care mi-a fost prezentată tehnologia şi


TODAY SOFTWARE MAGAZINE modul de organizare, am fost introdus în rândul comunităţii,evidențiândumi-se importanţa participării mele active în cadrul comunităţii şi totodată dorinţa comunităţii de a face acest lucru posibil. În prima zi în biroul PHTH mi s-a prezentat workflow-ul, care, spre surprinderea mea, era perfect similar cu workflow-ul meu de zi cu zi din cadrul TSM. În continuare, am fost introdus în extensia în care urma să contribui și mi s-a explicat în ce constă. Am apreciat faptul că mi-a fost cerută părerea cu privire la extensia Agora, si despre ce consider eu că ar trebui să facă un CMS. Agora ca tehnologie se bazează pe Extabse & Fluid. Ca extensie TYPO3, Agora trebuie să răspundă la următoarele funcționalități: 1. Extensia- la bază conţine unul sau mai multe thread-uri. 2. Fiecare thread poate să conţină unul sau mai multe postări, iar acestea se comportă după modelul standard de blog: pot fi comentate, urmărite,marcate ca favorite. Primul meu task a fost pe cât de simplu, pe atât de competitiv pentru mine. Mi s-a cerut să implementez user signature pentru fiecare thread şi post, pentru a mă putea obişnui cu framework-ul. Ziua de marţi a adus cu ea primul task în adevăratul sens al cuvântului, şi anume implementarea unui sistem complet de notificare în cadrul Agora. Acesta presupunea notificări pentru diferitele roluri de utilizator: creatorul thread-urilor, creatorul postărilor, şi simpli utilizatori care urmăresc o postare sau un thread. Surprinzătoar pentru mine a fost modul simplist de implementare a sistemului de trimitere a e-mailului, deoarece în cadrul TSM am fost pus în situaţia de a implementa aceeaşi cerinţă, însă folosind ca framework Fat-Free, operaţiune destul de costisitoare. Pentru evidenţierea uşurinţei folosirii TYPO3, ataşez o scurtă secvenţă de cod, folosită în cadrul trimiterii notificării sub formă de e-mail pentru toţi utilizatorii care observă un thread dat:

Datorita dorinţei de diversificare, următorul task a fost crearea unui modul de backend, care să permită gestionarea ca administrator a funcţionalităţilor oferite de Agora. Astfel, am ajuns în contact pentru prima dată cu metodele “magice” oferite de către Injected Repositories. Modulul de backend a fost un task provocator, deoarece se simțea nevoia implementării unui astfel de modul, precum şi dorinţa tuturor celor din PHTH să-l vadă funcțional, pentru a putea fi testat. În tot acest timp am avut ocazia să vizualizez modul de lucru şi tipul de mentalitate predominantă în acest tip de companie. Ceea ce mi-a plăcut a fost atitudinea de detașare, sentimentul de siguranță și încredere manifestate la toţi membrii echipei, precum şi gradul de implicare şi dorinţa de a ajuta. De asemenea, m-a impresionat în mod plăcut curiozitatea lor legată de modul cum se face programarea în România. Am avut onoarea să discut cu mari contribuitori în cadrul comunităţii, cum ar fi Marcel, Philipp, dar și Björn Chr. Bresser. Spre finalul şederii în Koln, am fost introdus în cadrul contribuitorilor Core TYPO3. Philipp m-a sprijinit în fixarea primului bug în cadrul Core, şi în raportarea lui după fixare. Aceste operații au fost urmate de procesul de validare( care în cadrul TYPO3 se desfăşoară pe bază de voturi ), iar săptămâna trecută am observat că rezolvarea a fost validate şi urmează să fie inclusă in următoarea versiune. Deşi zilele de muncă erau destul de lungi (10 – 11 ore ), am avut destul de mult timp să mă

bucur de frumusețea orașului Koln făcând simple plimbări prin parcuri sau vizitând impresionante monumente, cum ar fi Cologne Cathedral Dom. Kolnul este un oraş extraordinar, care oferă o experienţă turistică minunată,datorită largii varietăţi culturale şi sociale. Locuitorii sunt foarte mândri de tradiţiile şi locurile lor şi ar sta ore în şir să povestească despre ele oricui este dispus să asculte, bineînţeles la un pahar de Kölsch, berea tradiţională în Koln. În concluzie, experienţa oferită de TYPO3 Summer Camp 2015 a fost unică, atât din punct de vedere al evoluţiei profesionale, al întâlnirii cu un nou framework şi cu un nou mod de lucru, cât şi din punct de vedere al unei noi experienţe culturale şi sociale. Ţin să le mulţumesc celor de la Arxia pentru extraordinara experienţă oferită, şi recomand participarea la acest gen de evenimente oricui doreşte să progreseze în plan profesional şi în plan personal.

www.todaysoftmag.ro | nr. 37/iulie, 2015

7


educație

IT BRAINIACS sau despre emoție, talent și multă muncă

A

scrie un articol în TSM ca expert în educație și nu în industria de profil poate fi ușor intimidant. Dar starea aceasta durează cât redactezi primele 3-4 rânduri, până când te prinzi că scrii despre elevi talentați, capabili de performanțe frumoase în programare, de programatori tineri dispuși să-și împărtășească experiența, despre învățare, despre factorii care determină performanța în domeniu. Așadar sunt teme de interes pentru orice profesionist sau companie de IT, care nu au cum să te intimideze. Programul ITBrainiacs, dezvoltat de Apex-Edu și Telenav a fost conceput în jurul a două idei centrale: necesitatea de identificare timpurie a copiilor/tinerilor capabili de performanțe în domeniu și construirea unei intervenții care să valorifice maximal potențialul identificat. O intervenție autentică și, mai ales, formativă, o experiență care să-i transforme pe cei implicați. Am pornit în mod evident de la ce ne spune știința. Literatura educațională subliniază plurideterminismul performanțelor superioare. Sunt importante aptitudinile, fie că vorbim de aptitudine cognitivă generală sau aptitudini foarte specifice. Sunt importante oportunitățile, fie că vorbim de un act educațional excepțional dintro instituție, de o întâlnire fortuită cu un mentor sau de șansa de a te afla în momentul potrivit la locul potrivit... Și tuturor acestora li se adaugă abilitățile de tip psihosocial, cele care te ajută să îți gestionezi învățarea, motivația și emoțiile, precum și perseverența. Pentru că munca bate talentul, dacă talentul nu muncește îndeajuns.... O conjunctură complexă, de tipul celei descrise mai sus, s-a întâmplat prin programul IT Brainiacs desfășurat de Apex-Edu și Telenav, care a construit un context de interacțiune intensivă între elevi foarte buni și programatori pasionați, cu un angajament puternic pentru formare și învățare.

Elevii ITBrainiacs Elevii ITBrainiacs au o medie de vârstă de 15 ani, învață în clasele a VII a, a IX a și a XI, au interese bine conturate înspre domeniul IT și sunt puternic motivați să învețe. I-am ales pe zece dintr-un număr aproximativ de 70 de candidați pentru că s-au remarcat prin rezultatele pe care le-au obținut la anumite probe psihologice. Cunoștințele anterioare de programare nu au fost considerate necesare pentru admiterea în program.

8

Mentorii ITBrainiacs Mentorii ITBrainiacs sunt programatori pasionați ai Telenav, care au primit bucuroși provocarea de a împărtăși din experiența lor, de a-i familiariza pe copii cu diverse limbaje de programare și de a-i îndruma pentru dezvoltarea unui produs de programare.

Contextul

Rezultatele Am plecat de la zero cunoștințe sau minime cunoștințe de programare și am ajuns la: două jocuri dezvoltate în Java (Alien Invasion, joc multiplayer de atingere a țintei), trei jocuri în Objective C (AirHockey, joc de șutare la poartă, joc de strategie militară), un joc de tip X-O în Android, unul în Swift (Pairs), o aplicație în Swift de rețete culinare și o aplicație pentru Android de gestionare a finanțelor proprii. De exemplu, aplicația Save your money, aflată deja pe Market a început așa: “La început a fost greu pentru că nu știam absolut nimic despre programare, dar acum, după acest proiect, am învățat foarte multe lucruri de care nu am mai auzit până atunci. În prima parte a acestui proiect, Filip (mentorul n.n) a început sa îmi explice ce înseamnă programarea, noi începând cu scrierea codurilor în pseudocod. Filip a insistat foarte mult pe această parte de scriere pentru că așa înveți cel mai repede lucrurile esențiale. După ce am terminat cu scrierea în pseudocod a început să îmi explice ce înseamnă scrierea Java cu exemple din viața de toate zilele. Am început cu scrierea codurilor în Eclipse Luna, unde Filip mi-a arătat chestiile de bază pe care neapărat trebuie să le știe orice programator...”, Alexandru Iuga, elev clasa a IX a

Programul ITBrainiacs s-a desfășurat pe parcursul a șapte luni și a presupus întâlniri săptămânale între elevi și mentori, în format unu-la-unu. Aș vrea să mai repet formula aceasta de câteva ori pentru a sublinia că acest element a fost cheia succesului acestui program, acea conjuctura fericită. Acest tip de interacțiune este fără îndoială responsabil de caracterul extrem de personal și de autenticitatea experienței pe care ITBrainiacs le-a oferit. Deși cunoșteam la nivel teoretic efectele mentoratului pentru educarea elevilor capabili de performanțe înalte, experiența reală la care am avut privilegiul să asist mi-a relevat încrengătura complexă de mecanisme responsabile de progresul pe care copiii l-au avut. Acest tip de formulă a permis, în primul rând, mentorilor să croiască intervenția pe interesele reale ale copiilor. Această pliere completă pe ce și-au dorit copiii a asigurat un nivel ridicat al motivației și a permis mentorilor Pentru copii să antreneze la momentul potrivit straDar asta nu a fost tot. În fapt rezultatele tegiile necesare pentru facilita învățarea cele mai semnificative, din punctul nostru sau pentru a le oferi un model de gestio- de vedere, s-au întâmplat la un nivel mult nare a emoțiilor care vin la pachet cu ea. mai intim pentru fiecare copil sau mentor implicat în acest proiect. Schimbări pe care, doar cu multă sudoare, le poți aștepta într-o intervenție de training, de exemplu.

nr. 37/iulie, 2015 | www.todaysoftmag.ro


programare S-au modificat atitudini. Astfel de schimbări asigură rezultate stabile în timp: ceea ce s-a obținut în cadrul programului atât pentru elevi, cât și pentru mentori nu s-a rezumat doar la rezultatele fiecărei ședințe de mentorat, ci a devenit un bun personal al fiecărei părți implicate. Vorbim așadar de achiziții stabile în timp, cu bătaie lungă. Pentru copii, aceasta s-a tradus, în general, în modificarea atitudinii față de învățare și efort. Și nu doar față de efortul propriu, ci și față de efortul celor care le-au stat aproape parcursul celor câteva luni pentru a-i îndruma. Efort pe care l-au conștientizat și în față căruia s-au înclinat. Acest tip de rezultat devine un bun neprețuit pentru un copil aflat în dezvoltare și este instrumental nu doar pentru felul în care-și gestionează învățarea și cariera, ci și pentru felul în care-și croiește universul de relații sociale. Această schimbare atitudinală față de efort și perseverență e mare lucru, pe cuvântul meu de părinte și de dascăl cu experiență de la preșcolari până la studenți masteranzi!!!! Copiii au știut, din momentul în care au fost admiși, că sprijinul pe care îl primesc vine la pachet cu responsabilitatea de a depune efort pentru a crea un produs de programare. Și subliniez alegerea cuvintelor: a depune efort. Ca parte din conceptul programului, rezultatul a fost important, dar nu mai important decât procesul. Mentorii au ținut cont de potențialul copiilor și au reușit să situeze intervenția în zona proximei lor dezvoltări, fiind însă mereu atenți și la limitele lor. Au cerut mult și au dat mult. Iar moneda a fost efortul și implicarea. De ambele părți. Copiii s-au confruntat uneori și cu momente de îndoială, ca în orice experiență de învățare. Au avut teme acasă, ore suplimentare și termene limită... Dar au fost sprijiniți să depășească momentele dificile și au învățat, cred, ceva extrem de valoros...to walk that extra mile. Spre exemplu, Dani Pop, elev în clasa a IX, ne-a mărturisit că : “Am lucrat în orele de info în notepad++, ulterior compilând codul la firmă, eu neavând um mac personal, necesar compilării codului”. Un alt efect al programului și pe care l-am anticipat, dar nu la adevărata dimensiune, a fost acela că experiența de învățare pe care copiii au trăit-o la Telenav s-a constituit într-o intervenție completă de orientare vocațională. Au fost îndeplinite toate condițiile ...Copiii au văzut pe viu, în mod repetat, atmosfera tipică de muncă dintr-o firmă de IT, sarcinile tipice ale unui programator, universul social din

TODAY SOFTWARE MAGAZINE organizație și au reușit să conștientizeze, prin interacțiunea cu mentorii lor, că acesta e drumul pe care vor și pot să-l urmeze. Adăugați acestor ingrediente toată distracția cu care a venit la pachet munca alături de programatori tineri care i-au învățat exact ce doreau și aveau nevoie să știe, prin metode perfect individualizate, adaptate ritmului propriu de învățare, dar și satisfacția și mândria de a fi dezvoltat un produs de programare. Așa am obținut o rețetă minunată pentru designul unei experiențe de învățare autentice și pline de sens. “Pentru mine, acest proiect a însemnat enorm, deoarece pur și simplu am învățat să programez în adevăratul sens al cuvântului, nu ce se face din tutoriale de pe net. Am lucrat într-o firmă adevărată, devenind fluent într-un limbaj de programare foarte dificil, cum este Objective c. La începutul proiectului aveam cunoștinte minime de C, dar dorința mea și pasiunea mentorului meu au dus la rezultate surprinzătoare. Am realizat un joc de strategie militara, de genul Clash of Clans, in care am utilizat SpriteKit, o tehnologie dezvoltată de cei de la Apple pentru motoare grafice, de tipul OpenGL, fiind practic dezvoltată peste ea. O altă caracteristică importantă a jocului nostru este că toată informația este parsată din fișiere JSON, nimic nefiind hardcodat, în teorie cel puțin. Așadar, proiectul ITBrainiacs mi-a oferit o șansă nesperată să ajung un adevărat developer la doar 15 ani!”, Daniel Pop, elev clasa a IX a „Experiența mea la această firmă a fost unică. Pe lângă că am aflat multe chestii, ne-am și distrat și am avut multe întâlniri cu mentorii și cu programatorii de la firmă. Eu recomand tuturor tinerilor aceasta experinență, deoarece va fi ceva unic. Noi totodată trebuie să fim conștienti că suntem cu un pas mai aproape de această meserie.”, Alexandru Vădan, elev clasa a VII a

cum trebuie, să-ți ordonezi cunoștințele, să le gândești secvențialitatea, utilitatea și adresabilitatea. Predarea aduce cu sine însă și un alt tip de exercițiu: responsabilitatea. Această responsabilitate i-a făcut pe mentori să redeschidă manuale, să evalueze metode și să le aleagă pe cele care se potriveau cel mai bine elevului din fața lor și sarcinii specifice de programare, să ofere nu doar cunoștințe tehnice, ci să țină cont și de fluctuațiile de motivație sau de emoționalitate cu care învățarea vine la pachet. Iar aceasta presupune să comunici eficient, să demonstrezi empatie și să fii abil în a-ți gestiona propriile gînduri și emoții. Pentru că ești un model! S-au achitat cu brio de aceste sarcini. Mă înclin! „Pentru mine, experiența ITBrainiacs m-a învățat în primul rând să îmi pun în ordine gândurile. Aștept cu mare drag următoarea ediție și mi-ar plăcea să se organizeze și mai multe proiecte de acest gen.” Mihai Costea, Telenav „A fost o experiență de învățare și pentru mine. Am învățat să-mi exprim ideile cât mai bine, pentru că orice voiam să-i explic trebuia să reformulez ca să fie cât mai ușor de înțeles. Paul a fost și el foarte încântat de programul acesta, a învățat multe lucruri pe care nu le-ar fi putut învăța la școală, sunt sigur că acum, la sfârșit, pasiunea lui pentru programare e mult mai mare.” Mihai Șerban, Telenav În esență, programul ITBrainiacs a fost o experiență de învățare construită în jurul emoțiilor pozitive. S-a construit cu dăruire, pasiune și entuziasm! Și cu multă distracție! Ileana Fritea

ileanafritea@gmail.com Președinte Apex-Edu @ Apex-Edu

Pentru mentori Probabil că efectele cele mai surprinzătoare ale programului ITBrainiacs au fost cele care s-au întâmplat în rândul mentorilor Telenav. Sprijinirea elevilor nu doar pentru achiziția unor abilități de programare, dar mai ales pentru contextualizarea lor practică prin dezvoltarea de jocuri și aplicații, a însemnat și pentru mentori o experiență de învățare. Nouă și autentică. Actul de predare, în sine, este un exercițiu permanent de învățare, care te obligă să spui ce trebuie, când trebuie și mai ales www.todaysoftmag.ro | nr. 37/iulie, 2015

9


business

Ve își lansează oficial ultimul centru de dezvoltare în Cluj

C

ompania Ve este încântată să anunțe lansarea oficială a celui mai nou centru de dezvoltare al său în Cluj, România. Cu peste 80 de persoane deja angajate și instruite, această ultimă deschidere aduce echipa de dezvoltare Ve, câștigător a premii de renume global, la un număr total de 240 dezvoltatori, cu birouri situate în Londra, Paris, Bilbao și Cluj.

Echipa de dezvoltare din Cluj se va concentra pe inovațiile captivante Ve din zona Big Data, și pe un portofoliu de proiecte speciale în retail B2C și turism online. Ve a ales Clujul pentru a fi cel de-al 4-lea centru de dezvoltare a tehnologiei, datorită reputației orașului pentru educația de clasă mondială în domeniul tehnologiei, pentru cele 11 universități ale sale și investițiile fără precedent în tehnologie ale statului român. ‘‘Ve este un campion de inovatie și ambiție, și Clujul reprezintă aceste valori fundamentale ca oraș. Când am selectat cu atenție locul în care ne-am amplasa huburile noastre de tehnologie, aceste calități valoroase au fost ceea ce ne-a atras la Cluj. Pașiunea și aptitudinile forței de muncă de aici fiind deja renumite’’ – afirmă Raul Martinez, CTO, Ve. Vârful de lance în recrutarea echipei de dezvoltatori talentați este Cristian Cazan, director de dezvoltare, care aduce mai mult de 15 ani de experiență în dezvoltare de software și top-management. Cristian s-a alăturat Ve de la Endava, unde a fost Delivery Manager și Head of Development, poziții în care a câștigat experiența în managementul și dezvoltarea a peste 160 de profesioniști în IT din

10

multiple locații. În poziția sa în cadrul Ve, Cristian este responsabil pentru identificarea talentelor, atragerea și conducerea celor peste 80 de profeșioniști, ajutând Ve să devină unul dintre giganții tech ai Clujului.

International Business Stevie® Awards 2014, compania Ve își desfașoară activitatea în 18 limbi și are 27 de birouri în toată lumea, acoperind 43 de teritorii.

Cu peste 10.000 de clienți business multinaționali cât și comercianți locali, Despre Ve Ve furnizează în timp real date de marVe Interactive este o companie tehno- keting din punctele cheie prin experienta logică multi-premiată, care oferă o suită clienților acestora. de aplicații prin intermediul platformei VePlatform. Aplicațiile au scopul de a Sarah Hernandez sarah.hernandez@veinteractive.com reduce abandonul coșului de cumpărături, de a crește implicarea clienților, de a Director of Commercial Marketing @ VE Interactive diminua abandonul site-urilor și de a spori conversiile. Monitorizând tranzacții în valoare de miliarde de lire în fiecare zi, seturile de date ale companiei oferă clientului perspective provocatoare, în timp ce fiecare aplicație livrează conținut orientat către client bazându-se pe activitatea și profilul lor de cumpărare. Câștigătoare a Ruban d’Honneur în cadrul European Business Awards în 2014-15, câștigătoare al Data Strategy Award 2014 pentru marketing în timp real și deținător al medaliei de aur în cadrul

nr. 37/iulie, 2015 | www.todaysoftmag.ro


comunități

TODAY SOFTWARE MAGAZINE

Comunităţi IT

E

venimentele din această perioadă sunt realizate de pasionații de tehnologii și de grupurile acestora. După cum puteți vedea în calendar, acestea sunt publicate exclusiv pe meetup.com având audiența formată din comunitățile locale. În august, vom avea o lansare de revistă și în Oradea. Vă așteptăm !

Transylvania Java User Group Comunitate dedicată tehnologiilor Java. Website: www.transylvania-jug.org Data înfiinţării: 15.05.2008 / Nr. Membri: 610 / Nr. Evenimente: 47 Comunitatea TSM Comunitate construită în jurul revistei Today Software Magazine. Websites: www.facebook.com/todaysoftmag www.meetup.com/todaysoftmag www.youtube.com/todaysoftmag Data înfiinţării: 06.02.2012 /Nr. Membri: 2424/Nr. Evenimente: 32 Cluj Business Analysts Comunitate dedicată analizei de business Website: www.meetup.com/Business-Analysts-Cluj Data înfiinţării: 10.07.2013 / Nr. Membri: 91 / Nr. Evenimente: 8 Cluj Mobile Developers Comunitate dedicată tehnologiilor mobile Website: www.meetup.com/Cluj-Mobile-Developers Data înfiinţării: 05.08.2011 / Nr. Membri: 264 / Nr. Evenimente: 17 The Cluj Napoca Agile Software Meetup Group Comunitate dedicată metodelor Agile de dezvoltare software. Website: www.agileworks.ro Data înfiinţării: 04.10.2010 / Nr. Membri: 437 / Nr. Evenimente: 93 Cluj Semantic WEB Meetup Comunitate dedicată tehnologiilor semantice. Website: www.meetup.com/Cluj-Semantic-WEB Data înfiinţării: 08.05.2010 / Nr. Membri: 192/ Nr. Evenimente: 29 Romanian Association for Better Software Comunitate dedicată oamenilor cu experiență din IT indiferent de tehnologie sau specializare. Website: www.rabs.ro Data înfiinţării: 10.02.2011 / Nr. Membri: 251/ Nr. Evenimente: 14

Calendar Iulie 31 (Cluj) Lansarea numărului 37 al Today Software Magazine www.todaysoftmag.ro August 10 (Cluj) PMI Monthly Meeting meetup.com/PMI-Romania-Cluj-NapocaProject-Management-Meetup-Group/events/224143323/ August 27 (Cluj) OpenStack Nova Deep Dive meetup.com/OpenStackRomania/events/222910344/ August 4 (București) PMI: Requirements discovery&elicitation meetup.com/PMI-Romania-BucharestProject-Management-Meetup-Group/events/224228173/ August 5 (București) Startup Grind Bucharest Hosts Ionut Cotoi (CEO & Co-Founder at DeviceHub.net) meetup.com/Startup-Grind-Bucharest/events/223967970/ August 26 (București) August BucharestJS Meetup meetup.com/BucharestJS/events/223597688/ August 24 (Oradea) Lansarea numărului 38 al Today Software Magazine facebook.com/todaysoftmag todaysoftmag.ro

Tabăra de testare Comunitate formată din testeri și alți profesioniști din industria IT care, în cadrul unor întâlniri informale lunare, împărtășesc din cunoștințele proprii și învață din experiențele profesionale ale celorlalți membri. Website: www.tabaradetestare.ro Data înfiinţării: 15.01.2012/Nr. Membri: 1243/ Nr. Evenimente: 107 www.todaysoftmag.ro | nr. 37/iulie, 2015

11


management

Incursiune în lumea obiectivelor personale

Î

n ultimii ani termeni ca ”management prin obiective”, ”obiective de companie” și ”obiective personale” au apărut tot mai des în vocabularul meu prin intermediul muncii ce o desfășor. Deși părea simplu, la început a fost un coșmar din ce în ce mai urât. După care conceptul a început să prindă contur și într-un final am reușit să fac lucrurile să funcționeze. În fiecare an călătoria a început prin definirea unor obiective Bogdan Mureşan

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

globale la nivel de companie care ulterior au fost cascadate la nivel individual. Credeți-mă că aplicarea conceptelor nu e chiar floare la ureche, deși în teorie așa pare. S-a dovedit a fi foarte interesant să reușesc să unesc toate punctele de pe traseu și să fac obiectivele să funcționeze pentru mine. Ceea ce am învățat în timp despre acest proces va ajuta și pe alții, de aceea am așternut pe hârtia virtuală câteva sfaturi utile. Interesant e că aceste sfaturi se aplică nu doar celor ce lucrează în IT ci cu siguranță multor altor domenii unde oamenii au obiective personale.

O imagine de ansamblu Una din schimbările majore ce intervin în viața unei companii ce face pasul dinspre o companie mică înspre o companie cel puțin medie este nevoia de sincronizare a proceselor, nevoie ce apare într-un mod natural. Dacă la o scară mai mică am putut face lucrurile instinctual și fără mari bătăi de cap, pe măsură ce am crescut a apărut și nevoia firească de reguli care să ne ajute să ținem lucrurile sub control. Gândirea strategică a prins contur și a apărut în peisaj nevoia unui plan bine controlat. Iar o parte importantă a planului este definirea unor obiective clare. Acestea pot fi definite pe termen lung, mediu sau scurt și mai mult, oricare ar fi cadrul temporal

12

nr. 37/2015, www.todaysoftmag.ro

ales, obiectivele trebuie să fie adoptate de întreaga organizație pentru a crește șansele lor de realizare. Sună ca un plan grozav, dar de la teorie la practică e cale lungă. Provocările întâlnite pot fi împărțite în două mari categorii: • tranziția obiectivelor strategice globale ale companiei până la nivel de individ; • definirea unor obiective personale semnificative. Setarea unei strategii eficiente pentru o companie și a unor obiective anuale este în sine o provocare. Cel puțin la fel de dificil și provocator este și tranziția și implementarea lor la nivel de departamente și mai departe la nivel de individ. Dacă oricare dintre cele două acțiuni ar eșua ar compromite întreg procesul. O strategie proastă cu siguranță nu va ajuta pe nimeni, iar o implementare individuală nefericită cu siguranța va afecta rezultatele generale. Totuși, cumva neașteptat, cele mai mari greutăți le-am întâmpinat la definirea unor obiective personale care să aibă sens în această imagine. În timpul acestor acțiuni am discutat cu oameni care erau gata să adopte acest proces, cu oameni care erau total împotriva lui. Am citit destul de multă literatură legată de obiective în general și am încercat din


programare greu să pun toată informația cap la cap. Concluziile la care am ajuns și care m-au ajutat să merg mai departe, să-mi modelez gândirea în jurul acestui proces și să-l fac să funcționeze pentru mine au o rădăcină adâncă în ceea ce voi descrie în continuare.

Obiective pentru toată lumea Principala țintă a acestui articol vizează obiectivele personale. În cadrul companiilor se setează obiectivele globale sunt transmise înspre toate structurile companiei și ajung înr-un final la nivel de individ. Există mai multe teorii: unele spun că obiectivele globale ar trebui să se oprească la nivel de departament; altele consideră că ar trebui să meargă până la nivel individual. Dacă reflectăm puțin asupra modului nostru de viață în general, ne vom da seama că sub o formă sau alta ne setăm obiective personale aproape la tot pasul. În mod formal sau informal obiectivele sunt acolo la loc de cinste în viața noastră. În consecință, mi se pare cumva natural să existe și în cadrul muncii noastre, așa că preferința mea merge cu siguranță în direcția de a avea obiective la nivel individual. Aceasta trebuie să se întâmple într-un mod natural și pentru a avea suportul tuturor trebuie să ținem cont de câteva lucruri în momentul în care implementăm acest proces. Nu toate obiectivele personale trebuie să influențeze direct obiectivele companiei. Cu siguranță, această afirmație este numărul unu în lista mea de premise necesare pentru a putea avea un proces sănătos de tranziție a obiectivelor de la nivel global la nivel individual. Unii oameni vor putea influența direct obiectivele globale, dar cele mai multe obiective personale vor avea doar o influență indirectă. Cu siguranță

TODAY SOFTWARE MAGAZINE nu este un lucru rău. Cel mai simplu mod în care putem influența în mod indirect obiectivele globale este de a deveni mai buni în ceea ce facem. În consecință, ne putem concentra pe acest fapt când vom defini anumite obiective individuale. Când scopul este evoluția personală atunci implicit și motivarea individuală pentru atingerea scopului va crește. Să luăm un exemplu simplu: să presupunem că una dintre strategiile la nivel de companie pentru anul în curs este creșterea expertizei cu Microsoft Azure și pentru aceasta ne fixăm ca obiectiv să avem trei persoane cu certificări avansate de Azure până la sfârșitul trimestrului al treilea. Compania are 200 de oameni tehnici din care 50 lucrează cu tehnologii .NET. Dacă este imposibil să configurăm ca obiectiv pentru fiecare dintre cei 50 de oameni obținerea unei certificări avansate de Azure, cum am putea să sperăm la reușită în cazul în care luăm în considerare toți oamenii tehnici din companie.

cei 50 să nu găsim pe cineva interesat să-și lărgească aria de expertiză. Creșterea competențelor personale cu siguranță va ajuta și compania. Deci este în regulă dacă ceilalți vor găsi alte obiective ce nu vor avea legătură directă cu Microsoft Azure. În mod cert, creșterea personală va avea parte de cea mai mare motivare.

Când lucrurile devin personale Cunoașterea e diferită de înțelegere.

Am auzit expresia aceasta în câteva contexte diferite și mi-a plăcut destul de mult. Mi se pare extrem de puternică și aplicabilă în multe situații. Există mult material care ne ajută să înțelegem ce este un obiectiv și cum să definim un obiectiv SMART. Pe scurt, dacă ne setăm un obiectiv acesta este mai eficient și șansele să-l realizăm sunt mult mai mari dacă obiectivul este SMART. Aceasta înseamnă că obiectivul trebuie să fie specific, să fie măsurabil, să fie accesibil, să fie relevant și Când amândouă păr țile au de să poată fi încadrat în timp. Când am citit câștigat, motivarea crește. prima dată despre obiective SMART am Ar putea suna egoist dar această fost ca un copil care a descoperit ciocolata. afirmație descrie natura umană și cu siguranță nu ar trebui să o ignorăm. Un SMART nu este un mit. lucru pe care ar trebui să-l înțeleagă probabil companiile este acela că obiectivele Definirea unui obiectiv SMART nu este individuale setate exclusiv pentru atingerea așa simplă precum pare la prima vedere, obiectivelor globale ar putea avea un efect dar cu siguranță este foarte importantă. demotivant individual destul de accentuat. • Specific este acea caracteristică ce Pentru ca oamenii să intre cu adevărat în ne permite sa ne concentrăm pe ceea ce joc acestea va trebui să atingă și nevoile este important. Dacă un obiectiv nu este individuale. Întorcându-ne la exemplul specific este foarte ușor să alunecăm în anterior, ar fi o mișcare extrem de nefericită diferite direcții. Și când concentrarea să obligăm cei 50 de specialiști .NET să-și ne joacă feste și ținta noastră apare în dea certificarea vizată. O abordare cu mari mai multe locuri este foarte ușor să nu șanse de reușită ar fi găsirea acelor permai vedem luminița de la capătul tunesoane interesate de a dobândi cunoștințe lului. Iar acest lucru ne poate demotiva de Azure. Este aproape imposibil ca din grozav fără a fi ajuns măcar la mijlocul

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. 37/iulie, 2015

13


management Incursiune în lumea obiectivelor personale drumului. Termenul wearables de care vorbește toată lumea se referă la o arie largă de posibilități. Pentru a transforma scopul nostru într-un obiectiv ar trebui să o restrângem . Un exemplu de restrângere ar putea fi să înțelegem mai multe despre iWatch. • Măsurabil este ceea ce ne permite să evaluăm exact dacă ne-am atins obiectivul sau nu. Cum am putea marca faptul că am studiat câte-n lună și-n stele despre iWatch? Am putea să ne propunem să creăm un prototip cu anumite funcționalități sau o integrare cu un alt sistem. În acest fel am putea spune cu exactitate la sfârșitul perioadei de timp dacă ne-am atins obiectivul sau nu. Putem avea o finalitate a lucrului nostru și un important sentiment de împlinire. • Accesibil este caracteristica menită să ne țină cu picioarele pe pământ. Putem să ne setăm anumite obiective astfel încât să ne motivăm în a ne depăși limitele dar nu ne ajută cu nimic să exagerăm. Putem să ne propunem să facem cea mai tare aplicație pentru iWatch în următoarele trei luni, dar dacă începem să învățăm doar acuma despre iWatch care ar fi șansele noastre realist vorbind? Într-adevăr ne testăm limitele, dar în acest fel ne și putem demotiva destul de repede din același motiv: vom fi departe de finalitatea dorită a ceea ce lucrăm. • Relevant este ceea ce ne permite să rămânem concentrați pe ceea ce contează. Dacă suntem specialiști .NET în cadrul unei companii ce dezvoltă software în .NET nu prea are mult sens să învățăm să scriem aplicații pentru iWatch. Mai mult, sarcinile noastre de lucru nu vor avea nicio legătură cu ceea ce ne străduim să învățăm nici acum și probabil nici în viitor. Ar trebui să ne găsim timp să ne decuplăm complet de ceea ce lucrăm în mod curent și aceasta cu siguranță va suferi amânări peste amânări în vârtejul priorităților zilnice. Dar, dacă am ști că se vor pune bazele unei noi echipe cu acest specific, vom putea să ne conectăm cu alți posibili componenți ai echipei, probabil vom putea beneficia de ajutorul unui mentor și compania va avea tot interesul să seteze un cadru propice învățării noii tehnologii. Toate acestea ne vor permite să concetrăm cu adevărat la ceea ce facem și să fim eficienți în acest proces. • Încadrarea în timp este esențială pentru evitarea tergiversării. Este o condiție a reducerii stresului, deoarece ne permite o planificare rațională a

14

timpului de care dispunem. Este obligatorie pentru a avea o finalitate în eforturile noastre de a ne atinge obiectivul. Dacă nu ne stabilim o limită de timp, Microsoft s-ar putea să achiziționeze Apple înainte ca prototipul nostru să devină funcțional . Atunci iWatch ar putea deveni istorie. Principalii proprietari ai obiectivelor noastre suntem noi înșine. Această este una dintre cele mai dure lecții invățate în acești ani despre obiective. Odată ce oricare dintre noi își ia un angajament față de un obiectiv, acea persoană este responsabilă să-și realizeze obiectivul. De obicei, managerul direct poate monitoriza realizarea obiectivelor noastre și poate evalua la sfârșitul anului dacă au fost realizate sau nu ,dar nu este obligația acestei persoane să le îndeplinească. Managerul ne poate ajuta și ne poate oferi îndrumare de-a lungul procesului și a acțiunilor noastre pentru atingerea obiectivelor ,dar dacă așteptăm ca managerul (sau oricine altcineva) să ne împingă constant de la spate atunci șansele noastre de reușită scad considerabil. Iată câteva sfaturi care pe mine m-au ajutat: • trebuie să ținem obiectivele personale și statusul lor undeva la îndemână; cât de motivați am fi să continuăm dacă atunci când am vrea să le revizuim n-am ști de unde să le luăm? • t r e b u i e s ă l e r e v i z u i m constant pentru a nu ne pierde concentrarea asupra realizării lor; dacă obiectivele au fost definite în mod semnificativ, acest lucru se va întâmpla cu siguranță într-un mod natural. Frica de angajament este cel mai mare dușman al nostru. Am remarcat situații când s-au realizat lucruri extraordinare, chiar dacă acestea, nu făceau parte din obiectivele lor. Odată ce aceste persoane au fost implicate în activități similare, dar luându-și în prealabil un angajament, se remarcă incidența mare a eșecului sau a abandonării proiectului. Se pare că suntem programați genetic să avem o frică accentuată față de angajament. Lăsând gluma la o parte, de fiecare dată când suntem în dubii dacă ar trebui să ne luăm un angajament sau nu, ar trebui să ne gândim ce cauzează aceste dubii. Cel mai simplu mod de a ne depăși această frică este de a ne lua un angajament față de ceva ce vrem cu adevărat. Mi-e greu să cred că nu există nimic ce ne-ar putea ajuta

nr. 37/iulie, 2015 | www.todaysoftmag.ro

să ne îmbunătățim cunostințele, să creștem profesional și în consecință să ne ajute să devenim tot mai buni în ceea ce facem.

Concluzia

Să nu subestimăm valoarea călătoriei. Cu siguranță este un clișeu dar în același timp este adevărul gol goluț. Pescuitul nu este întotdeauna legat de câți pești prindem, cum ar putea crede unii. Are legătură cu cunoștințele dobândite pentru a putea prinde pește. Are legătură cu obstacolele depășite pentru a prinde pește. Este legat de jocul în sine. A câștiga, în cazul nostru a ne atinge obiectivele, este premiul de final. Cineva poate va dori să dobândească experiență cu un framework nou și își stabilește ca obiectiv personal implementarea unui prototip până la sfârșitul trimestrului următor. Cu siguranță cunoștințele dobăndite de-a lungul realizării prototipului sunt cel puțin la fel de importante ca și prototipul. Ceea ce văd eu în obiective este o bună motivare de a progresa indiferent că vorbim de o companie sau de o persoană. Mai mult de atât văd în obiective un mod eficient de a măsura progresul. Din punctul meu de vedere, aceasta este adevărata lor valoare. La nivel personal, obiectivele funcționează pentru cei ce vor să funcționeze. Dacă cineva nu crede în acest proces, configurarea de obiective personale se poate transforma într-un factor demotivant și este sortită eșecului încă din start. De-a lungul timpului, ideile enumerate în acest articol m-au ajutat să înțeleg obiectivele mai bine și ce este mai important să le fac să funcționeze pentru mine. Speranța mea este că aceste gânduri vor ajuta și alte persoane.


Descoperirea entităților similare în modele BigData

S

Ovidiu Petridean

opetridean@sdl.com Senior Software Developer @ SDL Research

copul articolului este prezentarea unei modalități de a descoperi entităţi similare în modele BigData.Vom expune în cele ce urmează abordarea MapReduce a unui algoritm utilizat pentru a găsi texte similare într-un corp foarte mare de date. Chiar dacă exemplele prezentate se concentrează pe găsirea de texte similare, acest algoritm poate fi folosit pentru a găsi orice fel de entităţi asemănătoare care pot fi descrise printr-un set de caracteristici.

Problema

Cum găsim propoziţii similare într-un set foarte mare de date (Peta-bytes de date). O problemă foarte importantă care apare atunci când încercăm să găsim elemente similare de orice fel este ca probabilitatea prezenței unui număr prea mare de perechi să îngreuneze procesul de analiză și identificare a relației de similaritate dintre ele. Chiar dacă timpul în care se determină dacă o pereche este similară sau nu este foarte scurt, este nerealist să credem că putem să le comparăm pe toate.

Soluția

Examinarea elementelor similare este o problemă fundamentală de data-mining. În cele ce urmează vom arăta cum problema găsirii propoziţiilor similare se poate transforma într-o problemă de identificare a elementelor similare.

“compartiment”.Numărul de compartiment este un număr întreg, în mod normal, în intervalul 0 până la B - 1, unde B este numărul de compartimente.

Elemente similare

Pentru a defini elementele similare vom utiliza Similaritatea Jaccard. Similaritatea Jaccard a seturilor S și T este |S ∩ T |/|S ∪ T |, ceea ce reprezintă raportul dintre numărul de elemente comune și numărul total de elemente pe care cele două seturi le au. Să prezentăm un exemplu. Notăm similaritatea Jaccard a seturilor S și T cu SIM(S, T ). Să presupunem că există două seturi S și T. Intersecția celor două seturi este formată din 3 elemente, iar în total cele două au 8 elemente. Astfel SIM(S, T ) = 3/8.

Noţiuni Generale

Data mining O definiţie destul de populară spune că “data mining” reprezintă procesul de descoperire a modelelor pentru date. Un model poate totuşi să reprezinte mai multe lucruri. Se disting astfel următoarele: modelare statistică, învăţare automată, sumarizare (e.g PageRank de la Google), extragerea caracteristicilor.

Similaritatea documentelor (propoziţiilor) O clasă importantă de probleme pe care Funcții de dispersie similaritatea Jaccard le implică este aceea a O funcție de dispersie h primeste o găsirii documentelor sau a propozițiilor simicheie ca argument și produce un număr de lare într-un corp de date foarte mare. Printre www.todaysoftmag.ro | nr. 37/iulie, 2015

15


programare Descoperirea entităților similare în modele BigData aplicaţiile cele mai cunoscute se numără: Plagiatul, Paginile Web E ste i mp or t ant d e “în oglindă” sau Articole care provin din aceeaşi sursă. reținut probabilitatea ca matricea de caracteristici Algoritmul pentru găsirea elementelor similare să nu fie modul în care Algoritmul prezentat are trei pași principali: “decuparea”, datele sunt stocate, dar “minhashing” și “dispersie sensibilă la localizare”. Pentru pre- că oferă un mod util de a zentarea algoritmului vom utiliza o aplicaţie practică și anume vizualiza datele. aceea a găsirii propoziţiilor similare într-un set foarte mare de În exemplul precedent date. putem observa că similaritatea celor două seturi 1. Decuparea Documentelor (Propoziţiilor) poate fi descrisă ca număCel mai eficace mod de a reprezenta documentele ca seturi, rul de linii în care care cele pentru a putea identifica documente similare este să construim două seturi au elemente din fiecare document un set de succesiuni de caractere care apar identice. Astfel putem în ele. Utilizarea de decupări formate din caractere este o abor- deduce că similaritatea este dare bună, dar cu toate acestea în cazul nostru este mult mai 7/11 adică 0.63. eficient să folosim decupări formate din cuvinte. După cum menționam mai sus, pentru stocaDispersia decupărilor rea acestor matrici ar fi În loc să utilizăm cuvintele ca decupări, alegem o funcţie de nevoie de foarte mult spadispersie care mapează aceste cuvinte generând un număr de ţiu, astfel că introducem compartimente. Fiecare compartiment va fi tratat în continuare următoarea tehnică numită ca o decupare. “mihashing”.

Reprezentări care pastrează similaritatea seturilor

2. Minhashing

Seturile formate din decupări sunt foarte mari. Chiar dacă am reuși să le dispersăm folosind doar 4 bytes pentru fiecare, spaţiul necesar pentru a le stoca este de patru ori mai mare decât spaţiul ocupat de documentul iniţial. Scopul pe care îl urmărim este să înlocuim seturile mari cu nişte reprezentări denumite “semnături”. Proprietatea importantă pe care acestea trebuie să o aibă este aceea că trebuie să putem estima similaritatea Jaccard a două seturi doar prin compararea semnăturilor acestora.

Semnăturile pe care dorim să le construim pentru seturi sunt compuse din rezultatele unui număr mare de calcule, fiecare dintre acestea fiind un minhash al matricii de caracteristici. Pentru a determina un minhash pentru un set (reprezentat de o coloană din matricea de caracteristici) alegem o permutare a liniilor. Valoarea minhash este numărul liniei (în ordinea permutată) în care pe coloană întâlnim cifra 1.

Reprezentarea matricială a seturilor

Exemplu

Pentru a avea o imagine mai bună a colecțiilor de seturi este util să ne uităm la ceea ce se numeşte matricea caracteristicilor. Coloanele matricii corespund seturilor, iar liniile corespund elementelor setului universal din care elementele fiecărui set sunt extrase.

S ă pre supu ne m c ă avem următoarea ordine a matricii precedente. Această permutare defineşte o funcţie minhash h care mapează seturile la linii. Să calculăm valoarea funcției minhash pentru setul S1 conform funcției h. Prima coloană, cea care corespunde setului S1, are 0 pe prima linie, așa că mergem la linia a doua. Aici vedem de asemenea că întâlnim 0, așa că mergem la linia a treia, unde găsim cifra 1. Astfel putem să tragem concluzia ca h(S1) = “at”. Utilizând același raționament tragem concluzia că h(S2) = “napoca”.

Fiecare din exemplele următoare tratează problema similarităţii a două propoziţii, dar evident eficienţa algoritmului se vede atunci când discutăm despre un corp foarte mare de date. Noi folosim algoritmul pentru a găsi similarităţi in peta-bytes de date. Să presupunem că avem următoarele două propoziții: S1: “I enjoyed my stay during summer at hotel California” S2: “I enjoyed my stay during winter at hotel Napoca” De aici rezultă următoarele două seturi: S1 = {i, enjoyed, my, stay, during, summer, at, hotel, california} S2 = {i, enjoyed, my, stay, during, winter, at, hotel, napoca}

16

nr. 37/iulie, 2015 | www.todaysoftmag.ro


programare

TODAY SOFTWARE MAGAZINE

Minhashing și Similaritatea Jaccard

Să alegem aleator două funcţii de dispersie Există o corelație remarcabilă între minhashing și similaritatea h(x) = x mod 11, g(x) = (2*x + 1) mod 11. Jaccard a seturilor pe care s-a aplicat minhashing. Probabilitatea ca o funcţie de minhash pentru o permutare aleÎn cele ce urmează vom simula algoritmul de calculare a atoare de linii să producă aceeaşi valoare pentru două seturi este matricii de semnături. egală cu similaritatea Jaccard a seturilor respective. Nu vom parcurge întregul proces ci doar paşii relevanți pentru acest exemplu.

Semnăturile Minhash

Să presupunem din nou că avem o colecţie de seturi repre- Pentru că avem 11 linii, vom efecta 11 calcule ale funcțiilor h și g. zentate prin matricea lor de caracteristici M. Pentru a reprezenta Iniţializăm matricea cu ∞. aceste seturi alegem aleator un număr n de permutări ale liniilor matricii M. Un numar de 100 de permutări este de cele mai multe ori suficient. Să denumim funcțiile minhash determinate de aceste permutari h1,h2,...,hn. Din coloana care reprezintă setul S construim semnătura minhash pentru S ca fiind vectorul [h1(S), h2(S), . . . , hn(S)].

Pasul 1:

Determinarea Semnăturilor Minhash Nu este realizabil să permutăm explicit matrici de caracteristici foarte mari. Din fericire este posibil să simulăm efectul permutărilor aleatoare utilizând o funcţie de dispersie care mapează fiecare linie într-un compartiment. Astfel în loc de n permutări aleatoare de linii vom alege n funcţii de dispersie h1,h2,...,hn pe care le vom aplica pe linii. Construim astfel matricea de semnături păstrând ordinea iniţială a fiecărei linii. Fie SIG(i, c) elementul din matricea de semnături care corespunde funcţiei de dispersie cu hi și coloanei c. Iniţial SIG(i, c) este ∞ oricare ar fi i și c. Pentru fiecare rând r vom executa următorii pași:

Dacă privim matricea iniţială vedem că pe prima linie atât S1 cât și S2 au valoarea 1, așa că vom calcula funcţiile h(x) și g(x), unde x este numărul de ordine al liniei, care în acest caz este 1. Astfel, h(1) = 1 și g(1) = 3. Evident ambele valori sunt mai mici decât ∞ astfel că matricea precedentă se modifică în felul următor.

1. Calculăm h1(r), h2(r), . . . , hn(r) 2. Pentru fiecare coloană c executăm următoarele Pasul 2: a. Dacă c are 0 pe linia r, atunci nu se întîmplă nimic Ne uităm acum la linia 2 și observăm ca atât S1 cât și S2 au b. Dacă c are 1 pe linia r atunci pentru fiecare i=1,2,...,n valoarea 1 aici. Așa că vom calcula valorile funcțiilor de dispersetăm SIG(i,c) ca fiind minimul dintre SIG(i,c) și hi(r) sie. Astfel, h(2) = 2 și g(2) = 5. Pentru că ambele valori sunt mai mari decât ceea ce avem acum în matricea de semnături, nu vom Să calculăm semnăturile minhash pentru matricea de carac- schimba nimic. teristici anterioară. Cum paşii 3 și 4 nu vor duce la nici un fel de modificări, trecem la pasul 5.

Pasul 5: După cum putem observa atât S1 cât și S2 au 1 pe linia 5 astfel că vom calcula h(5) și g(5). Deoarece atât h(5) cât și g(5) au valoarea 0, vom actualiza valoarea corespunzătoare funcţiei g.

Pașii de la 6 la 10 nu schimbă nimic. Atunci trecem la pasul 11.

Pasul 11: Putem observa că doar S2 are valoare 1 pe linia 11 ceea ce înseamnă că după ce calculăm atât h(11) cât și g(11) vom actualiza doar valorile corespunzătoare lui S2 dacă va fi cazul. www.todaysoftmag.ro | nr. 37/iulie, 2015

17


programare Descoperirea entităților similare în modele BigData Exemplu Astfel, h(11) = 0 si g(11) = 1 ceea ce conduce la forma finală Folosim aceleaşi două propoziții, dar pentru a face exema matricii de semnături. plul mai clar vom folosi 10 funcţii de dispersie pentru a calcula matricea de semnături. Setăm pragul de similaritate la 0.5 ceea ce înseamnă că vrem să vedem dacă propozițiile noastre au similaritatea Jaccard egală cu cel puţin 0.5. Ştim de asemenea că avem 10 linii (numărul de funcţii de dispersie) și astfel dacă luăm în calcul și pragul setat la 0.5 atunci după efectuarea calculelor ajungem la concluzia că avem 5 benzi cu 2 linii pentru fiecare bandă. Pasul 1. Calculăm matricea de semnături alegând următoaAnalizând acum procesul anterior putem trage concluzia rele funcţii de dispersie: că cele două seturi sunt similare în una din cele două linii ale matricii de semnături. Aceasta înseamnă că similaritatea lor este hn(x) = (n*x+1) mod 11, 0<=n<=10 estimată ca fiind 0.5, acest număr fiind relativ apropiat de 0.63 atât cat este similaritatea Jaccard. Evident pentru a obţine rezulDupă efectuarea calculelor ajungem la următoarea matrice tate mai bune ar trebui să adăugăm mai multe funcţii ceea va de semnături: conduce la estimări mai precise. De cele mai multe ori vrem să analizăm doar acele perechi care au un grad de similaritate peste un anumit ,,prag”. Există o teorie care ajută să ne îndreptăm atenția doar spre acele perechi și este numită ,,dispersie bazată pe localizare (LSH - locality-sensitive hashing)”sau căutarea celui mai apropiat vecin.

3. Dispersie bazată pe localizare pentru Semnături Minhash

Abordarea generală a LSH este să aplice mai multe funcţii de dispersie asupra elementelor în așa fel încât să se maximizeze probabilitatea ca elementele similare să fie “trimise” în acelaşi compartiment. Considerăm apoi fiecare pereche care a fost trimisă în acelaşi compartiment ca fiind o pereche candidat. Aceste perechi candidat vor fi singurele pe care le verificăm dacă într-adevăr sunt similare. Dacă avem semnături minhash pentru elemente un mod eficient de a lucra este să împărțim matricea de semnături în b benzi formate din r linii. Pentru fiecare bandă vom alege o funcție de dispersie care primește ca argument un vector format din r elemente întregi și le “trimite” într-un număr mare de compartimente.

Analiza tehnicii cu Benzi

Pasul 2 - Calculăm funcţiile polinomiale pentru fiecare bandă.

Să presupunem că avem b benzi fiecare formate din r linii. Să presupunem apoi că o pereche de documente au similaritatea Datorită faptului că avem 5 benzi, vom avea nevoie de 5 Jaccard egală cu s. Putem calcula probabilitatea ca aceste seturi funcţii polinomiale care primesc câte două argumente (valorile (sau mai degrabă semnăturile lor) să devină o pereche candidat din coloane). în felul următor: 1. Probabilitatea ca semnăturile să fie identice pe toate liniile unei benzi este s/r. 2. Probabilitatea ca semnăturile să nu fie identice pe cel puţin o linie dintr-o anumită bandă este egală cu 1-sr. 3. Probabilitatea ca semnăturile să nu fie identice în cel puţin o linie a fiecărei benzi este (1-sr)b. 4. Probabilitatea ca semnăturile să fie identice pe toate liniile a cel puţin unei benzi și să devină o pereche candidat este 1-(1-sr)b. Definim pragul minim ca fiind o funcţie de b și r care exprimă valoarea de similaritate s pentru care o pereche devine candidat. O aproximare a calculului pragului minim este (1/b)1/r. De exemplu pentru b = 16 si r = 4 pragul minim este de aproximativ s = ½.

18

nr. 37/iulie, 2015 | www.todaysoftmag.ro


TODAY SOFTWARE MAGAZINE O sa alegem funcţii polinomiale de forma a1* X1+a2*X2+ A cincea banda are următoarele calcule: ... +an*Xn mod m, unde n este numarul de functii iar m este un (S1) p5 = 9*0 + 11*0 mod 13 = 0 (S2) p5 = 9*0 + 11*0 numar prim foarte mare. mod 13 = 0 Pentru exemplul nostru alegem următoarele funcţii: p1 = 2*x1 + 3*x2 mod 13 p2 = 3*x1 + 5*x2 mod 13 p3 = 5*x1 + 7*x2 mod 13 p4 = 7*x1 + 9*x2 mod 13 p5 = 9*x1 + 11*x2 mod 13

Să efectuam calculele pentru prima bandă (S1) p1 = 2*1 + 3*0 mod 13 = 2 (S2) p1 = 2*0 + 3*0 mod 13 = 0

O să denumim cele două compartimente rezultate B1-2 și B1-0 Calculele pentru bandă a două (S1) p2 = 3*0 + 5*2 mod 13 = 10 (S2) p2 = 3*0 + 5*0 mod 13 = 0

Compartimentele care rezultă sunt B2-10 și B2-0

Din nou avem doar un compartiment rezultat, acesta fiind B5-0. Avem astfel următoarele compartimente: B1-2 = {S1} B1-0 = {S2} B2-10={S1} B2-0={S2} B3-0={S1} B3-12={S2} B4-0={S1,S2} B5-0={S1,S2}

Pentru că cele două propoziții au fost repartizate cel puţin o dată în acelaşi compartiment (de fapt avem două, B4-0 și B5-0) o să le considerăm ca fiind perechi candidat și o să calculăm coeficientul de similaritate Jaccard pentru ele.

Concluzii

Acest algoritm își dovedește eficiența atunci când este aplicat pe un corp foarte mare de date. De asemenea pentru a putea gestiona aceste cantități mari de (S1) p3 = 5*0 + 7*0 mod 13 = 0 (S2) p3 = 5*1 + 7*1 date se recomandă o implementare MapReduce. mod 13 = 12 Utilizarea algoritmului nu se reduce la găsirea de texte simiCompartimentele care rezultă sunt B3-0 și B3-12 lare. Algoritmul poate fi utilizat pentru orice set de date ale cărui elemente pot fi individual descrise ca un set de caracteristici. Pentru a patra bandă avem următoarele calcule: Cu cât semnăturile utilizate de algoritm sunt mai mari cu atât există mai puţine erori, dar asta evident aduce după sine un timp (S1) p4 = 7*0 + 9*0 mod 13 = 0 (S2) p4 = 7*0 + 9*0 de procesare mai mare. mod 13 = 0 Chiar dacă algoritmul indică faptul că două segmente sunt Ceea ce este remarcabil acum este că avem doar un compar- similare deoarece fac parte dintr-o pereche candidat este totuși timent rezultat B4-0. Acest lucru se întîmplă deoarece rezultatul indicat să se calculeze procentul de similaritate Jaccard pentru ambelor funcţii este 0. respectiva pereche. Pentru cea de-a treia bandă avem următoarele:

www.todaysoftmag.ro | nr. 37/iulie, 2015

19


programare

Aplicația WheelNav

A

T&T Connect Ability Challenge este o competiție care încurajează tehnologiile mobile să îmbunătățească viețile persoanelor cu dizabilități. Având oportunitatea de a ajuta milioane de persoane cu dizabilități din întreaga lume, am luat inițiativa creând o soluție software pentru a contribui la o viață mai bună. Csongor Korosi

Csongor.korosi@telenav.com iOS Developer @ Telenav

Cristian Chertes

Cristian.chertes@telenav.com iOS Developer @ Telenav

20

nr. 37/2015, www.todaysoftmag.ro

Acest articol descrie experiența noastră în dezvoltarea unei asemenea aplicații. Momentan pe App Store se pot găsi doar aplicații arătând puncte de interes pentru persoanele cu dizabilități dar nicio aplicație pentru navigație. WheelNav combină aceste două funcționalități, iar pentru cea mai bună experiență de navigare, folosește Scout SDK.

Aplicația WheelNav Aplicația noastră iOS se numește “WheelNav”. După cum sugerează numele ei, combină informații despre locuri accesibile pentru scaun cu rotile și navigația. Puncte de interes Pentru început vom analiza aspectul locațiilor accesibile. Faptul că anumite locații nu sunt accesibile pentru


programare persoanele cu dizabilități este o mare problemă. Fie pragul de la intrare este prea înalt sau nu sunt dotate cu toalete pentru persoane cu dizabilități. În loc să implementăm un serviciu care setează informații legate de accesibilitatea locațiilor, am decis să folosim un serviciu numit Wheel Map (HYPERLINK „http://wheelmap.org/”http://wheelmap.org) . Este un serviciu folosit pentru a căuta și marca locații accesibile pentru persoane cu dizabilități în întreaga lume. API-ul lor oferă programatorilor posibilitatea să interacționeze cu aceste locații. Luăm aceste informații și le afișăm pe hartă. Diferențiem 4 tipuri de locații: • Accesibile(verde): fără prag de intrare, toate încăperile sunt accesibile fără prag, dotate cu toaletă pentru persoane cu handicap. • Parțial accesibile(portocaliu): prag de intrare mai mic decât 7 cm, majoritatea încăperilor sunt accesibile, fără prag. • Inaccesibile(roșu): prag de intrare mai înalt de 7 cm, majoritatea încăperilor au prag, dotate cu toaletă pentru persoane cu handicap. • Accesibilitate necunoscută (gri): nu există informații despre acestea. Accesând meniul din stânga ecranului, utilizatorii pot decide care tipuri de puncte de iteres să fie afișate pe hartă în funcție de accesibilitate.

Butonul din partea dreaptă a ecranului deschide un meniu pentru selectarea categoriilor punctelor de interes care să fie afișate. WheelNav suportă următoarele categorii: • Transfer public • Mâncare • Timp liber • Bancomat • Educație • Cumpărături • Sport • Turism • Cazare • Diverse • Guvern • Sănătate

TODAY SOFTWARE MAGAZINE Această funcționalitate îmbunătățește datele privind accesibilitatea. Luând în considerare accesibilitatea locațiilor se pot planifica întregi călătorii de acasă sau întâlniri cu prietenii în locuri accesibile.

Căutarea punctelor de interes Folosind bara din partea de sus a ecranului se pot face căutări. Sunt returnate puncte de interes de pe hartă și adrese corespunzătoare. Selectând un rezultat din listă, acesta va fi centrat pe hartă facând posibilă navigația la acesta.

Navigația O altă componentă majoră a aplicației este navigația. Am încercat să personalizăm întreaga experiență de navigație pentru persoanele care folosesc scaun cu rotile. WheelNav oferă posibilitatea creării rutelor de la poziția curentă la orice altă locație de pe hartă.

Apoi am integrat Scout SDK. Rutele sunt calculate luând în considerare altitudinile punctelor de pe rută, asigurând cea mai rapidă și fluentă rută până la destinație. Navigația oferă instrucțiuni vizuale și audio utilizatorilor. Am intenționat să creăm o experiență “hands free” utilizatorilor. Acest lucru este îndeplinit folosind instrucțiunile audio. WheelNav oferă o soluție pentru o problemă comună și anume blocajul străzilor. În acest caz este foarte dificil pentru utilizatori să decidă încotro să meargă. Folosind “block road” Scout SDK redirijează utilizatorul pentru a ajunge la destinație eficient.

Utilizatorii aplicației pot analiza informațiile despre aceste locații, având posibilitatea de a le schimba accesibilitatea, când consideră că informația este greșită. www.todaysoftmag.ro | nr. 37/iulie, 2015

21


programare Aplicația WheelNav

Setările pentru navigație pot fi accesate atingând harta și selectând opțiunea “Settings” din meniu. Aici utilizatorii pot opri instrucțiunile audio, pot schimba stilul hărții, vedea întreaga ruta și informații despre rută, scrola harta, schimba între modul 2D sau 3D al hărții sau ieși din navigație.

22

nr. 37/iulie, 2015 | www.todaysoftmag.ro

Concluzii Folosind feedbackul de la utilizatori și prieteni, am îmbunătățit aplicația până la o stare de producție. Următorii pași sunt implementarea unei componente pentru recunoașterea vocală, pentru a oferi o întreagă experiență “hands free”, gruparea punctelor de interes pe hartă și folosirea funcționalității “RealReach” a Scout SDK. În viitorul apropiat aplicația va fi lansată pe AppStore și sperăm că va îmbunătăți viețile multor oameni. Un demo al aplicației și informații despre competiție se pot găsi pe site-ul Challengepost: http://challengepost.com/software/ wheelnav .


programare

Știu Scrum, Kanban si alte câteva cuvinte în Agile

L

Ovidiu Șuta

ovidiu.suta@isdc.eu QA & Bid Manager @ ISDC

ucrez în IT de mai mult de 10 ani și a fost, cu siguranță, distractiv și deopotrivă o provocare să observ și uneori să urmez tendințele în materie de metodologie în domeniu. Prin definiție industria IT implică un proces creativ, chiar dacă termeni din familia „Factory House” sunt des folosiți. În primul rând nu vorbim despre o „producție” de tipul celei pe care o vedem într-o fabrică (în definiția clasică), cu o linie de asamblare și muncă repetitivă, ci mai degrabă despre una creativă în care, totuși, încercările de standardizare a procesului de dezvoltare au fost prezente încă de la începuturi. Dacă privim puțin în jur la peisajul din industria IT / software development și la modul de lucru al zilelor noastre, metodologiile Agile ocupă un loc important. Și sunt multe astfel de „arome” Agile. Pare că autorii / semnatarii Manifestului Agile și-au creat fiecare metodologia proprie prin care să implementeze principiile descrise în manifest. Există XP, DSDM, Crystal, Adaptive Software Development, Advanced Development Methods, Scrum și încă altele, fiecare pornite de la aceleași persoane care au convenit la un moment dat asupra câtorva principii de bază dar nu s-au mai înțeles asupra unui mod unitar de implementare. Acest status-quo descrie destul de clar problema pe care o întâmpinăm cu toții astăzi. Dacă zece persoane nu au reușit să se înțeleagă cum să se facă un lucru, ce șanse avem noi, restul lumii? Încercarea de standardizare printr-o metodologie oarecare a procesului creativ, care este dezvoltarea software, s-a dovedit foarte dificilă până acum; o dată din cauză că este foarte greu de standardizat creativitatea dar și din cauze ce țin de contextul specific acestui domeniu:

tehnologia, cultura organizațională, mărimea echipelor sau a proiectelor și încă mulți alți factori. Un alt aspect important în această ecuație este, în opinia mea, cel financiar: toți ne dorim eficiență maximă - produsul lansat în piață încă de ieri sau să scurtăm cât mai mult drumul de la idee la produsul finit. În general, industria IT a reușit să țină pasul (unii ar spune că de fapt a generat) cu viteza cu care se dezvoltă societatea de azi. Totul este mult mai rapid azi decât acum un deceniu, iar tendințele nu arată deloc o încetinire – ba din contră. Există o întreagă piață pentru aceste metodologii, în care se investește și din care se câștigă mulți bani: se organizează traininguri, workshopuri, servicii de consultanță, conferințe, produse, instrumente, toate încercând să atragă utilizatori în a folosi o metodologie sau alta cu promisiuni de îmbunătățire a productivității, câteodată cu ordine de mărime impresionante. Grupuri largi de profesioniști au devenit vectori de comunicare în favoarea uneia sau alteia dintre metodologii; încercările de a-și „justifica”

www.todaysoftmag.ro | nr. 37/iulie, 2015

23


managment Știu Scrum, Kanban si alte câteva cuvinte în Agile existența profesională a unora dintre acești profesioniști au condus în timp la numeroase dezbateri în industria IT: ce e bine și ce nu; cu ce e mai bună o implementare față de alta, care e cea mai eficientă implementare și așa mai departe. Totuși, la o căutare rapidă dupa termenul „Agile”, cele mai populare 3 variante sugerate de motorul de căutare sunt „Dead; bullshit; a cancer”. La fel de mulți bani se pot câștiga predicând împotriva metodologiilor Agile ca și din promovarea acestora. Dar Agile este încă o noțiune nouă în istoria metodologiilor de Software Development. Privind puțin în urmă vom găsi și altele: Structured Programming (1969), SDM (or PANDATA in 1970s), SSADM (1980s), OOP (definită încă din anii 60’ , dar care a cunoscut un avânt maxim în anii 90’ ), RAD (1991), DSDM (1994), Scrum (1995), RUP (cu susținerea IBM din 1998), Extreme Programming (1999), iar lista este departe de a fi completă. Istoria ne permite să observăm un șablon în comportamentul grupului nostru profesional: îndată ce apare o noutate în „piață” legată de felul în care ne-am putea organiza munca, aderăm la ea cu tot entuziasmul și aparent fără o analiză riguroasă; inevitabil ceva merge prost, cel mai probabil din cauza noastră, dar vina cade tot pe noua „modă” și nu pe cei ce o „poartă” zilnic; între timp cineva descoperă o nouă metodă revoluționară iar ceilalți o urmează sperând la ce e mai bun, iar ciclul se reia, fără ca (aparent) cineva să învețe din greșelile trecute. Trebuie să înțelegem că nu metodologiile sunt neapărat greșite, de cele mai multe ori implementarea pusă în practică de oamenii implicați este greșită – cu concursul unei întregi armate create în

24

jurul acelui nou concept (amintiți-vă de toți trainer-ii, consultanții, conferințele despre care scriam mai devreme!). Noi, oamenii din IT, avem o memorie foarte, foarte scurtă! Și totuși: de unde apare acest comportament? De ce inventăm lucruri noi numai pentru a le folosi o scurtă perioadă și apoi le aruncăm la gunoi? De ce acceptăm cu atâta ușurință noul, doar pentru că e cool, înainte de a fi siguri că vechiul este întradevăr depășit? Răspunsul are, în opinia mea, cel puțin două părți.

Maturitatea sau lipsa ei Industria IT este încă, în întregimea ei, la început! Avem 50 sau 70 de ani – depinde pe cine întrebi, iar asta este nesemnificativ, în marea schemă a lumii. În comparație cu alte domenii, de exemplu industria manufacturieră, transporturile, cercetarea, medicina sau chiar avionica, industria IT este încă la început. Alte grupuri profesionale au avut timp să încerce, să cadă, să învețe din greșeli și să se adapteze. Dacă am compara numai numărul de specialiști în domeniu, conform unui studiu făcut la nivel mondial de către IDC research, suntem aproximativ 11 milioane de programatori profesioniști, care își câștigă existența din asta, plus încă aproximativ 7,5 milioane de pasionați de IT. Comparat cu numărul total al persoanelor active din lume (mai mult de 2,3 miliarde), programatorii profesioniști reprezintă un procent insignifiant de 0,5%, însă impactul acestui mic procent este cu mult, mult mai mare! Numai acest punct de vedere ar fi suficient să ne conducă la concluzia din titlul paragrafului: industria IT își caută încă un

nr. 37/iulie, 2015 | www.todaysoftmag.ro

drum în viață; încă ne luptăm să ne creăm un standard care să funcționeze acceptabil, însă suntem constrânși să facem asta în ritmul accelerat al lumii în care trăim, la o viteză mult mai mare ca acum 50 sau 80 de ani! O încercare de a urca într-un tren care a pornit demult de la peron și trece cu viteză pe lângă noi. Nu-i deloc ușor! Maturizarea cere timp iar timpul este exact ceea ce lipsește societății contemporane; vrem totul și vrem totul încă de ieri! Nu mai avem răbdare să creștem și aceasta se poate observa din păcate la toate nivelele societății. Imaturitatea, în combinație cu viteza din ce în ce mai mare a cererii, se reflectă negativ în rata de succes a proiectelor IT la nivel mondial. Există numeroase statistici pe această temă, dar putem spune fără frica de a greși că proiectele IT eșuează în proporție de 30 – 60%, la diferite niveluri (nu sunt utilizate, cu depășiri uriașe de termene sau buget etc.). Câți dintre noi am cumpăra o mașină sau o casă, ori ne-am urca pe o masă de operație dacă am ști că există 30-60% șanse ca ceva să meargă foarte rău? Din păcate, în relația cu industria IT, ceilalți se așteaptă ca noi să eșuăm, iar procentele de mai sus nu ajută (confirmă aceste așteptări). Oricând este adus în discuție un proiect IT se fac întâi planuri de contingență pentru eventualitatea unor depășiri ale bugetelor, fie că este vorba despre bugetul de timp sau de latura financiară a proiectului. A fi parte dintr-un grup profesional de la care ceilalți se așteaptă la un eșec, reprezintă pentru mine cel mai negru punct în cariera mea profesională.


TODAY SOFTWARE MAGAZINE Panaceul / Piatra filozofală / Sfântul Graal Faptul că discutăm despre o soluție universală a problemelor noastre, ca profesioniști în IT, poate apărea ca un (alt) semn de imaturitate, dar din punctul meu de vedere are nevoie de un paragraf special. Continuăm să căutam fără odihnă o rețetă perfectă care ar putea rezulta într-un proiect perfect, ceva care să ne asigure succesul și care ne facă fericiți ca echipă, pe noi, pe șefii noștri și pe clienții nostri. Dar, deși așa ceva nu există, și nici nu va exista vreodată, oamenii continuă să o caute! Și pentru orice există cerere, va exista și o ofertă! De aici întreaga pleiadă de metodologii, trainer-i și consultanți din jurul nostru. Toate acestea există pentru că există o nevoie, creată artificial, în opinia mea, de anumiți manageri care cred că de îndată ce compania / departamentul / echipa / proiectul va fi Agile / va prelua modelul Scrum / va prelua modelul Kanban / vor bea ceai din iarba-fiarelor culeasă la lună nouă și cu apă neîncepută din izvorul fericirii, se vor da de trei ori peste cap și toate problemele vor deveni istorie. Am întâlnit adesea următorul „scenariu”, în care echipa de management sau clientul doresc să „optimizeze” performanțele echipei pentru că prea mult timp se consumă „neproductiv” cu activități de planning, estimări sau în retrospective și decid să adopte Kanban în loc de Scrum (nu sunt activități de planning în Kanban, nu-i așa? Mai mult timp pentru programare ). Deciziile sunt luate top-down, cu puțină, dacă nu deloc, înțelegere a adevăratelor motive care au condus la eventuala slabă performanță a echipei.

de feedback de la client, DE CE este nevoie de un sistem în care o echipă să-și exprime îngrijorările sau frustrările, soluția (CUM) va veni cu ușurință. În încheiere aș spune că nu „rețeta” este ceea care are cea mai mare importanță! Să ne concentrăm asupra principiilor, să construim o cultură în care colegii să poată provoca regulile și care să permită găsirea celei mai bune răspunsuri la problemele de zi cu zi. Cineva îmi spunea că cel care a „supraviețuit” mai mult de 6 luni în IT, ținând cont de gradul înalt de maturitate intelectuală necesar pentru a-ți îndeplini sarcinile zilnice, face parte din cei mai inteligenți 5% dintre oamenii din întreaga lume. Probabil vreau să cred asta pentru că lucrez și eu, la rândul meu, în IT . Și nu suntem departe de adevăr! În general în industria IT lucrează oameni cu inteligența peste medie, care vor găsi cea mai bună soluție pentru orice problemă le-ar sta în cale și mai bine decât oricare dintre consultanți. Convinge-i DE CE este nevoie de o soluție pentru îmbunătățirea (să zicem) a productivității și nu le mai sta în cale! Poate sună utopic sau flower-power, dar chiar funcționează!

În concluzie Modul cum se fac lucrurile în industria IT are un impact minor în ziua de azi. Este pur și simplu mult prea devreme, încă nu am înțeles pe deplin De ce facem anumite lucruri și deja ne concentrăm pe CUM. Odată ce vom înțelege DE CE este nevoie (de exemplu) de team alignment, DE CE este importantă predictibilitatea în procesul de dezvoltare software, DE CE avem nevoie

www.todaysoftmag.ro | nr. 37/iulie, 2015

25


testare

Teste cu Selenium în contextul Continuous Delivery

C

a parte a unui nou proiect web, una dintre țintele echipei de QA a fost să proiecteze și să ruleze o suită de regression rapidă și fiabilă ca parte a procesului de continous delivery. Menirea acestuia a fost ridicarea nivelului de încredere pentru fiecare build rulând un set întreg de teste în locul unui set specific de teste de tip sanity. Totuși, pentru ca acesta să reprezinte o soluție viabilă, trebuia ca testele să se execute rapid, în maxim 10 minute. Robert Lantos

Robert.Lantos@betfair.com Senior QA Engineer @Betfair

Reducerea timpului de execuție când suita conține un număr mare de teste, este mai dificilă decât ar crede mulți. Încă de la început am identificat trei mari provocări care trebuiau luate în considerare.

Execuția suitelor de teste ar trebui să fie rapidă Un deployment tipic constă în execuția testelor pe cel puțin 2 noduri și un VIP. Fiecare dintre aceste rulări înseamnă execuția a 450 de teste font end si a 70 de backend. Aceasta înseamnă că e nevoie de cel puțin 3 rulări a setului de regression, iar ca să menținem timpii de execuție sub 30 de minute, rularea unui set nu trebuie să depășească 10 minute.

Nivelul de fiabilitate a testelor trebuie să fie mare

rulează rapid dar este si suficient de fiabilă pentru un build de Continous Delivery. Am reușit să executăm în mod constant suite de teste de regression în aproximativ 7 minute fără a avea erori. Următoarele idei reprezintă modul în care am reușit să finalizam cu succes acest proiect.

1. Tool-uri și medii de teste folosite Te s t e l e s e b a z e a z ă p e RemoteWebDriver (grid) al Selenium și folosesc un environment de tip remote cu multiple noduri pentru o mai bună scalabilitate precum si un hub local cu un singur nod, pentru execuția testelor locale.

2. Paralelizarea testelor într-o măsură cât mai mare Execuția rapidă a sute de teste nu este

Pentru ca rularea testelor de regres- posibilă fără o oarecare paralelizare. Cu sion să fie viabilă, trebuie să ne asigurăm cât testele sunt mai paralelizabile cu atât că testele sunt fiabile și că nu există alerte execuția setului de regression poate să fie false precum timpii de răspuns mari pe mai rapidă. Însă crearea unui pachet de serverele interne folosite. teste ușor de paralelizat nu este simplă, pentru că fiecare metodă de teste trebuie Pachetele de teste trebuie să fie scalabile proiectat cu multi-threading. Aceasta A trebuit să luăm în calcul și scalabili- înseamnă că fiecare test trebuie creat ca un tatea pachetelor de teste în cazul în care noi modul individual separat de celelalte. teste vor fi adăugate, în felul acesta reușind Ca să putem urma strategia să menținem timpii mici de execuție. menționată anterior, folosim următoarea Folosind următoarele idei, am reușit să meodă pentru crearea unei instanțe de contruim o suită de teste care nu doar că RemoteWebDriver:

26

nr. 37/2015, www.todaysoftmag.ro


TODAY SOFTWARE MAGAZINE

MyDriver, în cazul nostru este o clasă personalizată care Custom onTestFailure extinde clasa RemoteWebDriver, noi o folosim pentru a suprascrie unele funcții de bază al Seleniumului precum metoda getScreenshotAs. Testele modulare oferă o scalabilitate ridicată. Astfel capabilitațile de paralelizare ale testNG-ului împreună cu un selenium grid cu noduri numeroase permit rularea unui număr mare Custom onTestSuccess de teste în același timp, reducând drastic durata de execuție a unei suite de tip regression. În continuare, este prezentat un exemplu de clasă de teste care folosește metoda prezentată un pic mai sus: Notă: AbstractTest din exemplul de mai sus reprezintă o clasă de tip setup extins de fiecare din testele noastre, Acesta tratează încărcarea contextelor de spring si inițializarea listener-ilor.

5. Stabilizarea testelor prin wait-uri dinamice.

Notă:

Probabil că ați observat că nu folosim @BeforeMethod pentru pregătirea metodelor de teste și nici @AfterMethod pentru curățarea instanțelor de WebDriver de după ele. Acest lucru se datorează unor probleme de thread safety pe timpul execuției unui număr mare de teste în paralel si mai ales când se folosește un DataProvider. Am ales în schimb să folosim listener-i customi pentru a suprascrie metodele de onTestFailure și onTestSuccess pentru a face teardown după fiecare test.

3. Folosirea PageObject-elor În UI-ul aplicației web testat, sunt elemente cu care metodele de teste interacționează. Un PageObject pur si simplu modelează aceste elemente ca obiecte în cod. Acest lucru reduce numărul de cod duplicat, ceea ce înseamnă că, în cazul unei schimbari de UI, o singură modificare va ajunge pentru a repara testele.

4. Listeneri customizați și importanța sesiunilor bine administrate

Un listener customizat extinde TestListenerAdapter din testNG pentru a se folosi de obiectul ITestResult. Acești listener-i oferă o modalitate flexibilă de administrare a tuturor acțiunilor post test, și sunt folosite pentru curățarea instanțelor de WebDriver rămase active. Următoarele fragmente de cod arată modul în care tratăm oprirea instanțelor de driver.

Una dintre cele mai importante nevoi pentru ca pasul de regression să poată fi rulat în procesul de Continuous Delivery este stabilitatea testelor. Acestea trebuie să ruleze în mod constant fără rezultate fals positive și cu o rată de succes a testelor de 100%. Acest lucru însă este foarte greu de implementat, mai ales în cazul testeler de tip frontend. Sunt destul de multe probleme care pot să apară, precum: probleme cu dependințe, încărcarea lentă a unor pagini, defecte ș.a.. Pentru o mai bună stabilitate a testelor de regression am apelat la folosirea wait-urilor dinamice și a mecanismului de retry condițional. Selenium încorporează un mecanism foarte util de așteptare, implicit wait face ca WebDriver să parseze DOM-ul pentru un anumit timp prestabilit atâta timp cât elementul căutat nu este disponibil. Odată ce un implicit wait este setat, acesta rămâne active pe toată durata de viață al instanței de WebDriver. Din păcate această metoda nu functionează în toate cazurile, mai ales când vine vorba de pagini cu mult java script. Pentru a compensa aceste lipsuri noi, am apelat la wait-uri condiționale. Această metodă va astepta activarea Jquery-ului și pentru ca document.readyState să fie “complete”:

www.todaysoftmag.ro | nr. 37/iulie, 2015

27


testare Teste cu Selenium în contextul Continuous Delivery

Exemplul următor va aștepta până când se poate face click 6. Stabilizarea testelor prin retry-uri condiționale. pe element: Așa cum am menționat și mai devreme un alt instrument de stabilizare a testelor este mecanismul de retry condițional. Prin simpla rerulare a testelor eșuate putem crește stabilitatea și rata de succes a testelor de regression. Totuși, această metoda are o vulnerabilite majoră, ea permite propagarea unor posibile defecte în cazul în care acestea nu apar în mod constant. Soluția noastră pentru această problemă a fost folosirea mecanismului de retry No t ă : A m b e l e e x e mp l e f o l o s e s c m e t o d a w a i t . doar in unele condiții prestabilite. Acest lucru se face prin verifiuntil(<condition>), condițiile pot să fie personalizate dar există carea excepției generate de un test eșuat. Astfel doar testele eșuate și o serie de opțiuni predefinite ( precum elementToBeClickable) cu o excepție așteptată vor fi rerulate.

28

nr. 37/iulie, 2015 | www.todaysoftmag.ro


TODAY SOFTWARE MAGAZINE 7. Soluții alternative Una din cele mai frustrante probleme care pot să apară la testarea unor aplicații web în chrome este cea cu “Element is not clickable at point”. Metoda click din Selenium încearcă să apese un element chiar în punctul ei central, însă din când în când, deși pagina s-a încărcat cu succes, elementul țintit mai trece printr-o fază de randare a poziției în pagină cauzând ratarea operației de click. Ca soluții alternative, noi am apelat la folosirea javascriptului sau al obiectului Actions pentru a face click pe element.

jsClickElement

Actions

În cazul în care veți rula teste pe Internet Explorer, chiar dacă ultimele versiuni sunt comparabile cu browserele mai populare, mai sunt unele mici probleme. De exemplu, capabilitatea ACCEPT_SSL_CERTS nu funcționează cu versiunile recente de IE. O soluție alternativă a fost să folosim metoda următoare pentru a accepta certificatul. Prin acest proiect am învățat mult despre capabilitățile Seleniumului, dovedindu-se că acesta poate fi un tool extrem de util. Pentru noi, această utilitate ne-a ajutat să integrăm cu succes pachetele de teste de regression în Continuous Delivery, oferind un mod rapid și fiabil de testare a produsului nostru.

www.todaysoftmag.ro | nr. 37/iulie, 2015

29


programare

High-End Content Management, varianta Adobe

N

Alexandru Gheboianu alexandru.gheboianu @pitechnologies.com Software Engineer @ Pitech+Plus

30

nr. 37/2015, www.todaysoftmag.ro

umărul companiilor care utilizează strategii și metode pentru stocarea, managementul și distribuția de conținut și documente asociate proceselor organizației este în creștere. Aceste metode sunt grupate sub denumirea de Enterprise Content Management (ECM). Sub umbrela ECM se găsesc soluții de management a documentelor, managementul conținutului web, căutare, colaborare și managementul activelor digitale. Soluțiile de tip ECM își propun să ușureze managementul informațiilor organizației prin simplificarea stocării, securității, permisiunilor, retenției și a fluxurilor informaționale. În urma achiziției de către Adobe a companiei elvețiene Day Software, linia de produse Day Communiqué s-a transformat în Adobe CQ, iar de curând în Adobe Experience Manager (AEM). În anul 2014 cei de la Adobe au devenit lideri de piață în Cadranul Magic Gartner pentru soluții de Web Content Management. AEM este o platformă destinată celor mai complexe și pretențioase organizații, care permite managementul informațiilor cu un grad ridicat de granularitate. Situațiile în care se pretează utilizarea acestui produs sunt portalurile multi-site și multi-limbă, unde este necesară administrarea independentă a conținutului de către mai mulți content-editor-i în baza unor procese definite de către organizație. Acest lucru este posibil datorită unei soluții tehnice ingenioase și a unei înțelegeri temeinice a domeniului ECM de către creatorii produsului. Din punctul de vedere al tehnologiilor, AEM este un mix de framework-uri open source Java

și librării proprietare Adobe. Pentru a gestiona un sistem cu o complexitate ridicată precum AEM, s-a decis folosirea unui container OSGI, Apache Felix, pentru managementul pachetelor și librăriilor. OSGI este un subiect în sine pentru mai multe articole, însă în cazul de față avantajul major pe care îl aduce este posibilitatea de a porni și opri diverse componente ale sistemului, fără a afecta funcționarea generală a aplicației și deployment cu 0 downtime. Partea cu adevărat inovatoare este


programare

TODAY SOFTWARE MAGAZINE

introducerea Apache Jackrabbit Oak ca soluție pentru nivelul de stocare a datelor. Jackrabbit Oak este un content repository arborescent care implementează standardele JCR (Java Content Repository) și WebDAV, care permite tratarea uniformă a resurselor, indiferent de tipologia lor. Astfel pentru un utilizator Oak, devine transparent dacă resursele pe care le accesează sunt pagini web, documente, imagini sau alte active digitale. Framework-ul web este tot open source, Apache Sling, care permite managementul JCR într-o manieră REST. Puterea Sling stă în faptul că abstractizează accesul la JCR și oferă modalități diverse de rendering a resurselor, printr-un mecanism de

Construcția de componente vizuale custom este relativ facilă, fiind bazată pe tehnologii cunoscute precum JSP si ExtJS, la care se adaugă și o librărie Adobe, numită Granite. La nivel de infrasctructură, AEM a fost conceput să ruleze într-un mediu distribuit și oferă capabilități diverse de configurare a instanțelor de server, de la o singură instanță la cluster sau load balancing pe mai multe instante.

selectori. Astfel un nod din JCR poate fi prezentat ca JSON, HTML, XML etc. . Cu aceste framework-uri la baza AEM, sistemul oferă o suită bogată de componente UI pe care editorii le pot folosi direct în pagini printr-un mecanism drag&drop. Astfel responsabilitatea creării de pagini a fost transferată de la programator către content editor. Programatorului îi revine responsabilitatea de a configura template-urile pe baza cărora se vor construi paginile și de acrea la nevoie componente personalizate pentru nevoile clientului.

de author și publish nu trebuie să fie învățare a acestei tehnologii este abruptă, corelate, iar AEM oferă un mecanism de necesitând o echipă experimentată în tehreplicare a datelor din author pe publish. nologii Java EE și concepte de ECM. Astfel încărcarea pe servere este distribuită, iar o activitate ridicată a editorilor va fi resimțită doar pe instantele author, fără a afecta performanța pentru clienti, întrucât aceștia se conectează la publish. Adobe mai oferă și un modul separat, numit Dispatcher, care are funcțiile de cache și load balancing. Responsabilitatea gestionării cache-ului este luată de pe umerii programatorilor, deoarece Dispatcher-ul

Serverul AEM poate să funcționeze în două moduri: author și publish. În modul author, instanța este utilizată pentru configurarea platformei și crearea de conținut, iar în modul publish instanta servește contentul către clienți. Numărul de instanțe

invalidează cache-ul automat în momentul în care o pagină a fost modificată. În concluzie, soluția celor de la Adobe este destinată organizațiilor multinaționale care au acumulat cantități considerabile de content pe care doresc să îl utilizeze în moduri diverse. Este de apreciat trecerea responsabilităților din zona de development spre content editor-i. Aceștia pot să lucreze independent de o echipă de dezvoltare pentru a crea un site, în condițiile în care au la dispoziție o suită de componente care le satisfac nevoile. Dezavantajele AEM sunt prețul prohibitiv (450.000$ cost mediu pentru licențe) și un cost total de implementare ajungând în medie la 2M $. De asemenea, curba de

www.todaysoftmag.ro | nr. 37/iulie, 2015

31


programare

Scurtul ghid al unicornului din Ruby on Rails

R

uby on Rails începe treptat să iasă din aria de influență a hipsterilor. Cu siguranță vei fi numit “unicorn” dacă programezi în Ruby on Rails - toată lumea a auzit de existența acestor developeri, dar nimeni nu a văzut unul în realitate. Dar, înainte de a ne afunda în subiect, hai să vedem de ce ai avea nevoie de acest ‘rubin pe șine’: Online. • Github - este nevoie să adaug vreun comentariu? • urban dictionary - proiect de tip crowdsourcing pentru dicționar online de argou. În continuare vom prezenta particularitățile lui Rails.

Beneficiile lui Ruby on Rails

1. Convention over Configuration

Observăm un început modest în 1995 ca limbaj de programare foarte obscur și putem deduce că popularitatea vine de la framework-ul Rails, care a creat o comunitate efervescentă. Rails a fost conceput și creat de David Heinemeier Hansson în vara lui 2004. Pentru mai multe informații sp ecif ice despre Ruby(1) și Rails(2) vă invit să consultați referințele de la finalul articolului.

Impresionează gradul său ridicat de viabilitate comparativ cu alte opțiuni populare folosite la momentul curent în mediul de dezvoltare.Enumerăm mai jos minicolecția de website-uri, care oferă o mărturie clară a potențialului frameworkului Rails pentru aplicații de tip web: • Twitter – în primii lui ani de funcționare, Twitter a avut la bază doar RoR, ulterior luându-se decizia de a-l muta într-un mediu Java. Analizând diagrama de mai sus • Basecamp - proiectul pe care David remarcăm câteva lucruri interesante: a rafinat Rails. Ruby este mult mai puternic decât PHP și • Yellow Pages - celebra carte cu Javascript și este foarte aproape de C#. numere de telefoane a pășit în lumea virtuală sub numele de Pagini Aurii

32

nr. 37/iulie, 2015 | www.todaysoftmag.ro

Această mică funcționalitate face Rails nu numai unic ci și formidabil. Având la dispoziție această unealtă, un programator se poate concentra asupra codului într-o manieră pragmatică, în loc să își irosească energia și atenția asupra fișierelor de configurare. Acest aspect poate fi urmărit cel mai bine în arhitectura de tip Model-ViewController pe care limbajul o impune. Maniera în care acesta gestionează este suficient de interesantă să stârnească zâmbete pe fața oricărui programator. Așadar, în loc să fii nevoit să îți configurezi care Model (unitatea atomică de stocare în baza de date) merge în care tabel din baza ta de date, Rails îți oferă o regulă foarte simplă: să presupunem că ai un model numit User, în acest caz vei ști cu siguranță ce va fi asociat cu un tabel numit Users ( pluralul lui user). Mai mult, logica responsabilă pentru codul ce se va ocupa de model va fi regăsit în controllerul numit UsersController, care va fi mapat la un set de rute predefinite de resursa numita users (endpoint-uri de tip RESTful


putea manipula codul fără a mai fi nevoit să primești informații de la developer-ii anteriori. Acum vă întreb din nou, așa-i că e grozav? Și mai există și alte puncte forte!

2. Comunitatea

sunt oferite - index/ show/ new/ create/ edit/ update/ delete) care vor corespunde metodelor cu aceleași nume definite în controller ca puncte de acces. Apoi, desigur, view-urile render-uite de aceste metode se vor afla în folder-ul views, în sub-folder-ul users, având fiecare .html același nume ca și endpoint-ul.

Din acest punct de vedere, se poate spune că ești de-a dreptul cu picioarele înfipte în pământ. Există o bibliotecă uriașă de tip open source disponibilă pentru Ruby on Rails. În plus, majoritatea surselor sunt foarte bine documentate(4) și exemplificată(5) peste tot. Oricând ai nevoie de ceva, există un gem (voi adresa acest concept în rândurile ce urmează) special construit, care îți va rezolva problema în ‘stilul Rails’. Cât despre gem-uri - le poți considera librăriile sau plug-inurile din alte limbaje. Pentru a folosi gem-urile prin aplicație, există un fișier numit gemfile care îți permite să adaugi sau să ștergi după bunul plac orice bibliotecă prin url. Pentru a te asigura că nu îți poluezi mașina sau alte proiecte cu diferite gem-uri fiecare având diferite versiuni, există mai multe abordări. Eu sugerez cu încredere folosirea rvm-ului(6) ( ruby-versioning-manager ).

Acum, cum ar fi dacă toate astea s-ar genera cu o singura ă Iar ultimul bonus al comunității este faptul că este proactivă. comandă? În general, comunitățile lâncezesc, îmbătrânesc sau chiar se împiedică în proiectele de tip boom. Dar nu este cazul și aici. Ba Scaffolding-ul îți conferă această posibilitate, având la chiar mai mult, se poate spune că este mai efervescentă ca atunci dispoziție o aplicație care rulează în doar câteva secunde (având când totul a început! deja Rails instalat). Nu știu ce părere aveți voi, dar mie mi se Iar ca ultim aspect - dacă vreodată ai nevoie să rezolvi o pare folositor și rapid! De notat este faptul că și convențiile pot fi anumită problemă și nu știi cum, railscasts(7). te va indruma/ schimbate dacă este dorită situația, însă Rails întărește ideea de a inspira de cele mai multe ori în a găsi o rezolvare. te folosi de ele așa cum sunt date. Încă un motiv pentru care vei iubi această practică este 3. Te face fericit! ușurința pe care o dă utilizatorilor de a se plimba prin orice proiNu, nu e un slogan publicitar! Țelul lui Ruby, după cum ect. Dacă ai învățat o dată aceste convenții și trebuie să te muți subliniază creatorul ei, a fost cel de a face programatorii fericiți. la un alt proiect Rails, există șanse extrem de mari ca să înțelegi Acesta este de fapt aspectul care l-a atras pe David de la început. logica din spatele acțiunilor doar dintr-un UML. Ba mai mult, vei După ce s-a îndrăgostit literar de sintaxă, el a decis că Ruby este

www.todaysoftmag.ro | nr. 37/iulie, 2015

33


programare Scurtul ghid al unicornului din Ruby on Rails

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

baza pe care își va întemeia framework-ul. Și, pentru a continua tradiția, l-a optimizat chiar mai mult pentru a aduce programatorilor cât mai multă fericire și cât mai puțină bătaie de cap.Pe lângă faptul că poți scrie codul în engleză aproape pură, mai ai și beneficiul de a scăpa de cele mai plicticoase părți ale web development-ului (evitând fișierele de configurare!), toate acestea fiindu-ți accesibile în cea mai rapidă manieră. Din punctul meu de vedere, aceasta ar face și pe cel mai înrăit programator să dea din coadă.

Iar acest lucru mi s-a întâmplat de mai multe ori când codam. Ba chiar am ajuns la punctul în care ghiceam ce verb sau combinație de verb și adverb îmi va da răspunsul corect, iar în caz că nu mergea, căutam pe Google (sort_by, .present? .empty?). Și, poate că încă nu sunteți impresionați. Așa că, am să vă mai prezint un mic secret. Rails seamănă atât de mult cu engleza deoarece folosește un DSL(10) intern. Cum e asta bun pentru noi? Ei bine, permiteți-mi să scriu un code snippet pentru voi, apoi vă rog să-l citiți:

4. Nu ești nevoit să ai cod duplicat .

class User < ActiveRecord::Base devise :confirmable, :registerable

Această filosofie este puternic impregnată în ADN-ul Railsului. După metodologia în care codul este împărțit în modele, controller-e și helper-e, niciodată nu vei avea nevoie să îți duplici codul. Ba mai mult, logica este deja extrasă în gem-uri de către comunitate (vedeți cum interacționează?! ) și le poți folosi doar inserându-le în gemfile-ul tău. Prin urmare, dacă ai nevoie de un panou de administrator, poți oricând să imporți iactiveadmin care este atât minimalist cât și stilat. La toate acestea se adaugă faptul că este configurabil. Dacă ai nevoie de soluții de autentificare, devise o va face pentru tine. Apoi, probabil vei avea nevoie de autorizare- ținând cont că ai user-i, vei avea tipuri de useri, care se autentifică pentru a vedea conținut diferit)- cancan reușește asta pentru tine. Iar lista(8) continuă...

5. Expresivitatea Convenția e folositoare pentru că se bazează pe fișierele de configurare și pe relațiile pe care tu le memorezi. Acesta este beneficiul numărul 1. Apoi există al doilea și anume expresivitatea lui Ruby, care reprezintă principalul motiv pentru care David a ales Ruby în favoarea oricărui alt limbaj. Dacă te întrebi cum e folositor? Pentru început, când scrii cod te simți bine. Nu numai că nu îți setezi totul la fiecare pas prin aplicație, dar pur și simplu poți să deduci niște funcții care există deja implementate. Ca exemplu, când am început eu să învăț Rails, la un moment dat aveam nevoie să știu dacă într-o listă de string-uri include un string particular pe care l-am calculat eu. Și, desigur, există mereu cele două opțiuni: iterezi prin el, clasic și verific la fiecare pas, sau, îl cauți pe Google. Așa că, uite-mă, căutând pe Google “find string in strings array Rails” - iar acesta e primul link(9) pe care l-am accesat. Vă las pe voi să descoperiți care mi-a fost surpriza când l-am deschis.

34

nr. 37/iulie, 2015 | www.todaysoftmag.ro

validates_presence_of :name, :day_of_birth, :email before_save :compute_age has_many :books has_attached_file :avatar, :styles => {:small => “240x240>”}

Dacă nu sunteți convinși, încercăm altfel. Arată această bucățică unuia din prietenii tăi și întreabă-l care e cel mai ușor de citit: Ruby

return Fridge.get_beer_if_available

PHP

$result = $fridge->getBeerIfAvailable($beers);

Java return Fridge.getBeerIfAvailable()

Principalul avantaj este că vă puteți exprima cu ușurință gândurile folosind limba engleză, fără a fi nevoie de un nivel de abstractizare suplimentar. În plus, codul este simplu astfel încât îl puteți citi ca limbă engleză.

Concluzii și rezoluții

Așadar, se pare că am ajuns la finalul articolului. Sunt sigur că nu v-am convins să îl întrebați pe șeful vostru dacă nu ar vrea să schimbe profilul firmei spre Rails… Dar….de acum înainte, consider că nu mai există niciun motiv să aveți itemi care stau pe lista de idei bune de implementat. Aveți unealta pentru a face schimbări rapide unei aplicații și să vă alimentați curiozitatea în


TODAY SOFTWARE MAGAZINE a vedea cum ar putea funcționa. Așa că, de ce să nu o faceți? Ca încheiere, vreau să vă sublinez că RoR vă va face atât fericiți cât și proprietari ai propriului vostru produs.

Resurse utile: 1. 2. 3. 4.

Getting started with Rails tutorial.(11) Deployment options.(12) Official documentation.(13) Official tutorial.(14)

Linkuri de informații: https://en.wikipedia.org/wiki Ruby_(programming_language) 5. https://en.wikipedia.org/wiki/Ruby_on_Rails 6. http://www.unlimitednovelty.com/2009/04/twitter-blaming-ruby-fortheir-mistakes.html 7. http://api.rubyonrails.org/ 8. http://guides.rubyonrails.org/getting_started.html 9. https://rvm.io/ 10. http://railscasts.com/ 11. https://rubygems.org/ 12. h t t p : / / s t a c k o v e r f l o w . c o m / q u e s t i o n s / 1 9 8 6 3 8 6 / check-if-a-value-exists-in-an-array-in-ruby 13. http://en.wikipedia.org/wiki/Domain-specific_language 14. h t t p : / / 1 2 d e v s . c o . u k / a r t i c l e s / writing-a-web-application-with-ruby-on-rails/ 15. https://www.heroku.com/ 16. http://api.rubyonrails.org/ 17. http://guides.rubyonrails.org/getting_started.html

Emil Luța

emil.luta@tss-yonder.com Developer @ Yonder

www.todaysoftmag.ro | nr. 37/iulie, 2015

35


programare

Aplicaţii IoT cu Java ME Embedded 8 şi Eclipse

Dănuţ Chindriş

danut.chindris@elektrobit.com Java Developer @ Elektrobit Automotive

A

plicaţiile Java ME Embedded 8, în forma lor cea mai simplă, sunt uşor de configurat şi gestionat, aşa cum am văzut în articolul din numărul precedent al revistei Today Software Magazine. Totuşi, în cadrul proiectelor software moderne avem nevoie de unelte care să automatizeze anumiţi paşi, să ne atenţioneze atunci când suntem pe punctul de a introduce erori de programare în codul sursă, cu alte cuvinte, să ne sporească productivitatea. Tools. În plus, Oracle ne oferă o serie de proiecte demonstrative, distribuite cu ajutorul plugin-ului Java ME SDK Demos. Aceste pachete pe care tocmai le-am amintit depind de extensia ce poartă numele Mobile Tools for Java sau, pe scurt, MTJ. În mod normal, MTJ se instalează automat împreună cu plugin-urile Java ME SDK Tools, însă în cazul în care acest lucru nu se întâmplă, putem adăuga manual această extensie distribuţiei noastre Eclipse, prin intermediul opţiunii Install New Software din cadrul meniului Help. Mai multe detaTooling pentru aplicaţii ME cu Eclipse lii despre instalarea acestor unelte, dar şi Plugin-uri necesare despre instalarea Eclipse, putem găsi în Pentru a putea urmări paşii prezentaţi documentul Oracle Java Micro Edition în acest articol, avem nevoie, în primul Software Development Kit, Developer’s rând, de Oracle Java ME SDK 8.1, pachet Guide. software prezentat în articolul Aplicații IoT cu Java ME Embedded 8. De aceea, Crearea unui proiect încurajăm cititorii să răsfoiască numărul O dată ce au fost instalate plugin-urile 36 al revistei, pentru a afla mai multe desJava ME SDK Tools şi extensiile MTJ, pre acest . Pentru a putea beneficia putem accesa perspectiva Java ME, care de toate funcţionalităţile pe care Oracle ne întâmpină cu o pagină de bun venit, Java ME SDK 8.1 ni le pune la dispoziţie, ilustrată în următoarea captură de ecran: următorul lucru pe care trebuie să-l facem este să instalăm -urile Java ME SDK La momentul scrierii acestui material, Oracle oferă suport pentru două dintre cele mai cunoscute medii integrate de dezvoltare, Eclipse şi NetBeans. În acest articol vom discuta despre uneltele pe care le avem la dispoziţie folosind Eclipse, întrucât acest IDE se bucură de un număr mai mare de utilizatori, după cum arată unele surse. Astfel, similar articolului precedent , vom arăta care sunt pachetele software pe care trebuie să le instalăm şi cum putem crea o aplicaţie Java ME Embedded 8 cu Eclipse.

36

nr. 37/2015, www.todaysoftmag.ro


TODAY SOFTWARE MAGAZINE care să deschidă şi să închidă un LED (Light-emitting diode), o dată la câteva secunde. Aceeaşi fereastră ne permite să dăm un alt nume fişierului JAD (Java Application Descriptor) şi să facem alte configurări legate de proiectul Eclipse. O dată ce am dat un nume proiectului nostru, mediul de dezvoltare ne avertizează că trebuie să alegem cel puţin o configuraţie pe care va fi rulată aplicaţia. Astfel, apăsăm butonul Add... din partea mediană a ferestrei şi ni se prezintă un alt dialog, cu titlul Add Configuration. Din meniul drop-down SDK alegem Oracle Java(TM) Platform Micro Edition SDK 8.1, iar Eclipse completează automat câmpurile Configuration Name şi Device cu valoarea EmbeddedDevice1. Apăsăm butonul Finish pentru a reveni la dialogul anterior. În acest moment putem apăsa Finish în dialogul New Java ME Project deoarece vom accepta valorile prestabilite propuse de IDE. Imediat ce proiectul a fost creat, Eclipse deschide un editor, care ne permite să edităm proprietăţi ce ţin de Application Descriptor, dar şi să facem alte configurări. Vedem acest editor ilustrat în figura următoare: Pagina de bun venit a perspectivei Java ME

Eclipse împreună cu MTJ ne oferă câteva şabloane, care ne ajută să creăm mai rapid proiecte Java ME şi componente ale acestora. Acest lucru este demonstrat în figura următoare:

Privire de ansamblu asupra configuraţiei proiectului

Accesarea pinilor GPIO Este timpul să prezentăm codul sursă care accesează pinii GPIO şi, pentru aceasta, creăm o clasă LEDSwitcher, care extinde clasa abstractă javax.microedition.midlet. MIDlet. În cele ce urmează, prezentăm codul sursă al acestei clase, iar apoi vom analiza câteva aspecte importante: package ro.leje;

Şabloane disponibile pentru dezvoltarea aplicaţiilor Java ME

import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; import javax.microedition.midlet.MIDlet; import jdk.dio.DeviceManager; import jdk.dio.gpio.GPIOPin; public class LEDSwitcher extends MIDlet { private static final int PIN_NUMBER = 7; private static final int SLEEP_TIME_MILLIS = 2000; private GPIOPin pin;

În continuare, dorim să creăm un proiect simplu cu ajutorul noilor unelte pe care tocmai le-am instalat. Pentru aceasta, alegem opţiunea Java ME Project din fereastra de tip dialog Select a wizard. Apăsând Next, ajungem la fereastra în care ni se cere să public void startApp() { introducem un nume pentru proiectul nostru. Pentru acest exemtry { pin = DeviceManager.open(PIN_NUMBER); plu ne vom folosi de codul listat şi discutat în documentul Oracle Thread.sleep(SLEEP_TIME_MILLIS); Java ME Embedded, Developer’s Guide, capitolul General Purpose for (int i = 0; i < 20; i++) { pin to”+ Input/Output. Acest exemplu ne arată cum putem accesa pinii System.out.println(„Setting “true”); GPIO (General Purpose Input/Output) ai unei plăcuţe de dezpin.setValue(true); voltare. La fel ca în articolul precedent, vom folosi un dispozitiv Thread.sleep(SLEEP_TIME_MILLIS); Raspberry PI Model B+. System.out.println(„Setting pin to”+ “false”); Revenind la paşii pe care trebuie să-i urmăm pentru a crea un astfel de proiect cu Eclipse şi MTJ, introducem în câmpul Project pin.setValue(false); Thread.sleep(SLEEP_TIME_MILLIS); name numele LEDSwitcher, întrucât dorim să realizăm o aplicaţie www.todaysoftmag.ro | nr. 37/iulie, 2015

37


programare Aplicaţii IoT cu Java ME Embedded 8 şi Eclipse } } catch (IOException e) { Logger.getLogger(LEDSwitcher.class.getName()). log(Level.SEVERE, null, e); } catch (InterruptedException e) { Logger.getLogger(LEDSwitcher.class.getName()). log(Level.SEVERE, null, e); }

}

} public void destroyApp(boolean unconditional) { try { if (pin != null) { pin.close(); } } catch (IOException e) { Logger.getLogger(LEDSwitcher.class.getName()). log(Level.SEVERE, null, e); } }

Cu ajutorul clasei DeviceManager, care oferă servicii de gestionare a dispozitivelor de tip Device, deschidem pinul GPIO cu numărul 7 al plăcuţei noastre Raspberry PI. Acesta este referit prin variabila pin de tip GPIOPin, căreia putem să-i setăm valoarea ca true sau false, reprezentând stările de high şi low. În metoda startApp()alternăm aceste stări de douăzeci de ori, făcând pauză de două secunde la fiecare iteraţie. În cadrul metodei destroyApp()eliberăm resursele folosite, respectiv închidem dispozitivul ce reprezintă pinul GPIO.

Acum putem apăsa click-dreapta pe elementul ce reprezintă plăcuţa RPi, şi să alegem din meniul de context Run Project şi apoi numele proiectului nostru. Platforma deschide aplicaţia Java ME Embedded Emulator şi instalează aplicaţia, încercând să o pornească. În acest moment observăm că aplicaţia emulator afişează o fereastră pop-up, care ne avertizează că lansarea aplicaţiei a eşuat. Pentru a afla cauza, putem fie să analizăm view-ul Console din IDE, fie terminalul PuTTY. Amândouă ne arată că s-a aruncat o excepţie java.security.AccessControlException atunci când am încercat să deschidem dispozitivul de tip GPIOPin. De asemenea, log-ul ne oferă o informaţie importantă, prin mesajul [CRITICAL] [SECURITY] iso=2:Permission check failed: jdk.dio.DeviceMgmtPermission „GPIO7:7” „open”

În primul articol din această serie am amintit faptul că securitatea este unul dintre cele mai importante aspecte ale creării aplicaţiilor IoT. Java ME Embedded 8 ia în serios acest lucru şi implementează mecanisme moderne pentru a asigura un nivel de securitate ridicat. Astfel, pentru a accesa pinul plăcuţei trebuie să permitem acest lucru setând permisiunea jdk.dio. DeviceMgmtPermission pentru dispozitivul GPIO7:7, cu acţiunea open.

Dorim acum să testăm aplicaţia LEDSwitcher dar, pentru a Eclipse ne pune la dispoziţie tab-ul Security al editorului face lucrurile mai interesante, vom încerca să o instalăm pe dis- despre care am amintit mai devreme unde, în cadrul secţiunii pozitivul Raspberry PI. Aşa cum am văzut în articolul la care am Required Permissions, putem adăuga permisiuni, apăsând butofăcut referire mai sus, trebuie să lansăm în execuţie mediul Java nul Add.... Acest pas este ilustrat în următoarea captură de ecran: ME şi putem face acest lucru conectându-ne la plăcuţă prin SSH. O dată ce am făcut acest lucru rulând scriptul usertest.sh, înregistrăm dispozitivul cu ajutorul utilitarului Device Manager pe care ni-l pune la dispoziţie SDK-ul. Faptul că RPi este înregistrat se reflectă şi în view-ul Device Selector pe care perspectiva Java ME l-a deschis automat:

Adăugarea unei permisiuni

View-ul Device Selector

38

nr. 37/iulie, 2015 | www.todaysoftmag.ro


TODAY SOFTWARE MAGAZINE Debugging cu Eclipse

Mesajele scrise de aplicaţie în consolă

dispoziţie.

Un a d i n t r e c e l e mai importante activităţi implicate în dezvoltarea produselor software este cea de debugging. Cu siguranţă, fiecare inginer software care foloseşte mediul de dezvoltare Eclipse a intrat în contact cu uneltele de debugging consacrate pe care acesta ni le pune la

Salvăm modificările, care se reflectă în descriptorul aplicaţiei, Şi în cazul aplicaţiilor Java ME Embedded 8 putem folosi perLEDSwitcher.jad, şi lansăm aplicaţia în execuţie, folosind spectiva Debug, împreună cu toate view-urile cunoscute. Este acelaşi mecanism. De data aceasta, observăm că aplicaţia rulează interesant faptul că putem face debugging chiar şi atunci când fără probleme. rulăm aplicaţia pe dispozitivul real și nu suntem obligaţi să o instalăm pe un dispozitiv emulat. Folosind fereastra de tip diaDacă realizăm montajul folosind un LED, o rezistenţă, un log Debug Configurations putem seta diverşi parametri, cum ar fi breadboard şi doi conectori, obţinem configuraţia prezentată în dispozitivul pe care dorim să rulăm aplicaţia, care este MIDlet-ul imaginea de mai jos. Vedem, de asemenea, că LED-ul s-a aprins ce trebuie executat etc. .Stabilind breakpoint-uri în codul sursă şi atunci când valoarea pinului a fost setată la true. lansând aplicaţia în modul debug, execuţia se va opri la liniile pe care dorim să le investigăm.

Concluzii Dezvoltarea aplicaţiilor IoT utilizând platforma Java ME Embedded 8 este alcătuită dintr-un complex de activităţi care aparţin mai multor discipline, printre care se numără alături de ingineria software şi electronica. Realizând care este complexitatea unei astfel de configuraţii, care implică hardware diferit de maşina pe care se face dezvoltarea, putem să ne dăm seama de beneficiile multiple pe care le aduce o platformă cum este SDK-ul, dar şi uneltele de dezvoltare precum Eclipse sau NetBeans.

Montajul folosind plăcuţa Raspberry

www.todaysoftmag.ro | nr. 37/iulie, 2015

39


testare

Rapid Software Testing - o schimbare de perspectivă

D

upă cum probabil ați aflat din edițiile trecute ale revistei, acum aproape un an, Altom Consulting l-a invitat la Cluj pe Michael Bolton (nu cântărețul, ci tester-ul), care a ținut workshopurile de Rapid Software Testing și Critical Thinking, ajutând în acest fel Altom să își îndeplinească unul dintre obiective, și anume, aducerea în țară în fiecare an a unui trainer internațional.

Motivele pentru care Altom organizează anual sau trimestrial cursuri și workshopuri sunt lesne de înțeles: popularizarea unor abordări noi în ceea ce privește testarea; faptul că sunt context-driven și astfel soluțiile acordate sunt la subiect; înlesnirea contactului dintre instructorii români și trainer-ii internaționali, pentru a face mai ușor procesul de transmitere a informației. Anul acesta este rândul lui James Bach să reviziteze România, la sfârșitul lunii octombrie, pentru a livra trainingurile Rapid Software Testing și Rapid Software Testing for Managers.

40

Ce este Rapid Software Testing? După cum afirmă James Bach, ”Rapid Software Testing este o metodologie de testare complexă, adaptată produselor complexe, schimbării constante și unui program haotic. Abordarea acestui tip de testare începe prin dezvoltarea unor abilități personale, continuând cu atingerea misiunii testării, adică ușurarea procesului de dezvoltare prin evaluarea produsului. Acest tip de testare nu înseamnă doar viteză: înseamnă testarea unui produs pe baza unei misiuni, proces care îndepărtează munca în plus, asigurând că întrebările puse sunt relevante și obiectivele propuse sunt atinse, în același timp făcându-se o estimare cât mai precisă a procesului.

nr. 37/iulie, 2015 | www.todaysoftmag.ro

Un instrument esențial în Rapid Software Testing este cunoașterea noțiunilor legate de exploratory testing, care cuprinde: test design, test result interpretation, test execution, care, împreună cu învățarea într-un proces simultan, relevă informații importante despre produs și descoperă problemele mai repede decât prin alte metode.”

Cui îi este adresat acest workshop? Răspunsul care ar veni pe buzele tuturor este: tester-ilor. Dar, pentru o mai bună înțelegere a conceptului, îi vom lăsa pe James Bach și Michael Bolton să explice cui îi este adresat acest workshop: “The ideal student is anyone who feels driven to be an excellent software tester or


Cu ce sunt aceste cursuri diferite față de altele? În primul rând, se diferențiază datorită părții practice, care primează: testarea, exercițiile, puzzle-urile, toate contribuie la înțelegerea cursurilor și a conceptelor. Dar aceasta nu înseamnă că partea teoretică este lăsată la o parte. Nu este ignorată, însă nu sunt puse în practică metodele tradiționale de predare. Plusul cu care vin Rapid Software Testing și Rapid Software Testing for Managers este adaptabilitatea la orice se poate întâmpla pe parcursul procesului de dezvoltare a produsului și faptul că nu oferă o soluție standard, ci mai degrabă obligă la adaptarea la unele situații noi.

Cine este James Bach? software test manager. The class is useful to all levels of tester, but seems to be most appreciated by experienced testers who want to become expert testers. The class works well when strong-minded and skeptical students attend the class. They challenge the instructor and make the class better, just like testers should. We try to make the class the most stimulating intellectual experience you can handle.”

James Bach, deținătorul ”Satisface, Inc”, membru fondator al Association for Software Testing, a scris multe articole și cărți în domeniu. După ce a fost angajat la firme de renume din lume, James a ales să devină consultant în testare, ocupându-se atât de livrarea de traininguri, cursuri și seminarii, cât și de consultanță în testare de diferite nivele de dificultate, pe proiecte diverse. Crezul lui James este că un factor decisiv în testare este reprezentat de abilitățile pe care un tester le dezvoltă prin practică și dezbateri, și nu prin memorarea unor termeni de specialitate, fără a avea neapărat o înțelegere a lor. Așadar, după cum și James Bach zice, practica este cea mai importantă componentă în orice proces de învățare, alături de teorie, dar la un nivel mai echilibrat decât cel folosit în general.

Pentru cel de-al doilea workshop cu James Bach din această toamnă am avut de ales între Rapid Software Testing for Programmers și Rapid Software Testing for Managers, alegându-l pe cel de-al doilea. Am făcut această alegere luând în considerare și ce va urma după acest curs, și anume: participanții la Rapid Software Testing vor încerca să pună în practică cele învățate la curs, însă pentru ca procesul să fie unul cât mai lin, vor avea Propunerea noastră pentru cei care încă nu l-au întâlnit pe nevoie și de sprijinul managerilor. James Bach, sau pentru cei care l-au întâlnit acum câțiva ani, este să profite de ocazia de a-l întâlni la toamnă. Trei zile de inspirație Ce este Rapid Software Testing for Managers? în testare, provocări și schimbare a percepției asupra testării la Așa cum scrie și pe site-ul satisfice.com, ”acest curs răspunde Rapid Software Testing și încă o zi plină de energie pozitivă și unor întrebări precum: cum să planifici și să împarți activități motivație de îmbunătățire la Rapid Software Testing for Managers. în așa fel încât atât timpul, cât și costurile să fie reduse și eficace în același timp, cum să recrutezi oamenii cu abilitățile necesare anumitor sarcini, cum să distribui cel mai eficace planificarea activităților și a resurselor. Aceste metode se pot aplica atât pe un stil agile, cât și pe unul tradițional de testare, mai ales în situațiile în care timpul și resursele sunt limitate.” Monica Rațiu monica.ratiu@altom.ro

Cui i se adresează acest curs? Persoanele cărora li se adresează acest curs nu sunt doar test manager-ii, ci și project manager-ii și persoanele implicate în procesul de recrutare, care au background tehnic și care trebuie să știe când un posibil angajat este potrivit pentru proiectul care îi este atribuit.

Marketing Specialist @ Altom

www.todaysoftmag.ro | nr. 37/iulie, 2015

41


management

De la birocrație la succes în înființarea unei firme

Î

n ultimul timp, au apărut din ce în ce mai multe informații referitor la accesarea de fonduri europene nerambursabile, acceleratoare de afaceri și idei de business, dar parcă toată lumea trece cu vederea partea de înființare efectivă a societăților comerciale.

Ioana Varga

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

Pentru unii dintre voi care doriți să începeți un business, acest pas pare a fi unul foarte greu de trecut din lipsa informațiilor. De asemenea, sunt unele persoane care ezită să demareze o afacere doar pentru că se gândesc că înființarea unui SRL este o procedură extrem de complicată și mai mult de atât, gestionarea unei firme pare și mai greu de realizat. Dorim să spulberăm multe din aceste frici, pentru a impulsiona și mai mult punerea în practică a ideilor de afaceri geniale pe care le aveți.

Înființarea unui SRL Menționăm încă de la început, că toate demersurile necesare acestei etape de înregistrare a societății pot fi făcute contra cost, pe baza unei programări, direct la Registrul Comerțului din județul unde va avea sediul social noua societate. Dacă nu aveți timpul necesar sau nu doriți să luați contact direct cu toată birocrația, puteți colabora cu un avocat sau consultant specializat pentru aceste operațiuni care, în baza contractului de prestări servicii sau a unei împuterniciri exprese vă poate prelua activitățile necesare în această etapă. Primul pas în vederea deschiderii unui SRL este reprezentat de o deplasare la

42

nr. 37/2015, www.todaysoftmag.ro

Registrul Comerțului pentru a se rezerva denumirea firmei. Pentru acest document costul la această dată este de 72 lei. Cu dovada primită de la Registrul Comerțului privind disponibilitatea denumirii, se va merge la un avocat sau la un notar public unde se vor da declarațiile pe proprie răspundere, respectiv, faptul că asociații și administratorii îndeplinesc condițiile prevăzute de Legea 31/1990. Vă atragem atenția asupra unei situații, și anume aceea în care în trecut ați fost asociat și/sau administrator într-o firmă care poate nu a avut activitate sau pur și simplu nu v-ați depus declarațiile fiscale (chiar și cu valoare 0) sau bilanțurile la termenele prevăzute de lege, ați putea avea surpriza să aveți fapte înscrise în cazierul fiscal (atenție! nu cazierul judiciar) care să vă împiedice să puteți dobândi calitatea de asociat sau administrator într-o nouă firmă. Totodată, este important de știut că nu puteți avea calitatea de asociat unic decât într-o singură firmă. Deci, dacă deja aveți un business și mai vreți să deschideți o societate, va trebui să vă alegeți un partener, chiar dacă va fi doar formal (cu 5% din părțile sociale). Deseori suntem întrebați dacă statutul de PFA (persoană fizică autorizată) intră în aceeași categorie, iar


programare răspunsul este nu. Dacă aveți doar un PFA și nu firmă puteți fi unic asociat în firmă nouă. În cazul în care administratorul/ administratorii nu vor putea fi prezenți la registrul comerțului la momentul depunerii actelor, va fi obligatoriu să se pregătească specimenul de semnătură în fața notarului. Un element esențial pentru înființarea unei societăți comerciale este reprezentat de sediu. Acesta poate fi locuința personală, sediul unui avocat, un spațiu închiriat sau primit în comodat. În funcție de varianta aleasă sunt anumite documente ce trebuie pregătite. Astfel, dacă spațiul ce urmează a fi folosit drept sediu nu este spațiu comercial, ci este de tip rezidențial se va pregăti un document cu acordul vecinilor sau al asociației de proprietari pentru a fi folosit drept sediu al societății. Dacă spațiu vizat este o casă, acest acord va fi cerut doar dacă sunt pereți comuni cu o altă locuință sau este instituită asociație de proprietari în acea zonă. Dacă la această locație mai este înregistrată o altă societate, atunci va trebui să se pregătească la notar o declarație pe proprie răspundere că sunt îndeplinite condițiile referitoare la sediul social. Declarația poate fi dată atât de administratorul firmei ce urmează să se înființeze, în calitate de utilizator al spațiului, cât și de proprietarul spațiului. Registrul Comerțului verifică câte societăți sunt înregistrate la fiecare adresă. Dacă se alege varianta ca sediu societății să fie la un avocat, atunci nu va mai trebui să se pregătească aceste declarații.

TODAY SOFTWARE MAGAZINE Dacă sediul va fi în baza unui contract de închiriere de la o persoana fizică, trebuie să știți că proprietarul are obligația legală de a înregistra contractul de închiriere la Administrația Finanțelor Publice și de a vă comunica un exemplar al contractului cu dovada înregistrării. În lipsa acestei dovezi, nu se va accepta de către judecătorul delegat de la Registrul Comerțului înregistrarea firmei. După stabilirea sediului va trebui pregătit actul constitutiv. Acesta este un document care definește cadrul în care va funcționa societatea, mai exact aici sunt prezentați asociații cu aportul acestora în societate, administratorii, CAEN-urile, etc. .Este foarte important ca, dacă sunt elemente specifice de raportare a asociaților față de beneficii și pierderi, acestea să fie foarte bine detaliate în cadrul documentului. Chiar dacă la momentul deschiderii societății se are în vedere o anumită activitate, recomandăm trecerea în cadrul actului a tuturor CAEN-urilor care nu au statut special, urmând a se activa doar cele necesare pentru activitatea vizată. În acest fel, costurile pentru activarea sau modificarea ulterioară a CAEN-urilor va fi mult mai mică, iar termenul de modificare mai redus. Dacă alegeți doar un număr limitat de CAEN-uri, iar ulterior doriți să dezvoltați afacerea și spre o activitate pe care nu o aveți în statut, se va impune reluarea formalităților și întocmirea unui act constitutiv actualizat. Tot în actul constitutiv, se va înscrie perioada mandatului administratorului care poate fi nelimitată sau pe un interval specificat. Este necesar a fi cuprinse și limitele care se alocă administratorului. Dacă nu discutăm de un context în

care administrarea este realizată de către terțe persoane special contractate pentru această funcție, atunci recomandăm a se menționa că administratorii dețin individual puteri depline de reprezentare și administrare. Una din întrebările pe care le primim în această situație este dacă administratorii pot fi și angajați ai societății ulterior, iar răspunsul este da. În vederea înființării societății va trebui deschis la o bancă aleasă un cont de capital social în care asociații vor trebui să vireze capitalul subscris. În cazul în care această operațiune este delegată unei terțe persoane, se va înscrie pe procura notarială și faptul că delegatul va putea depune numerarul la banca în numele asociatului. Pe lângă documentele mai sus amintite, mai sunt cerute unele formulare, copii după documente, timbre fiscale, precum și alte documente în cazuri particulare. Lista completă a acestor documente poate fi studiată aici (http://www.onrc.ro/index. php/ro/inmatriculari/persoane-juridice/ nume-colectiv). Ta xel e p e rc e pute d e R e g ist r u l Comerțului pentru înființarea unei companii sunt de aproximativ 500 – 600 lei. După înregistrarea dosarului la Registrul Comerțului, în mod normal, durează trei zile până se pot ridica documentele de constituire. Toți pașii descriși anterior sunt valabili atât pentru deschiderea unei societăți cu capital românesc 100%, deținută de persoane fizice, cât și care are ca asociați persoane juridice. Sunt în schimb necesare mai multe documente ce trebuie furnizate de către societățile care vor fi asociați. Dacă doriți să vă asociați cu persoane fizice nerezidente, în plus față de cele prezentate, trebuie să știți că asociații nerezidenți trebuie să semneze actele necesare (declarațiile, specimenul de semnături,

www.todaysoftmag.ro | nr. 37/iulie, 2015

43


management De la birocrație la succes în înființarea unei firme actul constitutiv etc.) în prezența unui interpret autorizat pentru limba țării în care au rezidență. Dacă vă aflați în această situație, iar partenerii voștri străini nu vor să fie prezenți la semnarea actelor, vă pot împuternici prin împuternicire notarială dată în fața unui notar din țara lor de rezidență sau Consulatul României din acea țară, care apoi va fi tradusă și legalizată. Recomandăm ca în acest caz să obțineți modele de documente care trebuie legalizate de ei, să le comunicați pentru a fi cât mai exacte și a nu avea probleme asupra modului de exprimare, a conținutului documentelor ce le veți depune la Registrul Comerțului.

Aspecte financiare și fiscale pentru o societate nou înființată Având în vedere că și la noi în țară se aplică principiul lui Benjamin Franklin, conform căruia, singurele lucruri în viață sunt moartea și impozitele, va trebui să se aleagă unul din cele două sisteme de impozitare destinat SRL-urilor în funcție de condițiile îndeplinite. A alege e un fel de a spune, pentru că în fapt, nu prea este opțional. Astfel, sistemul standard pentru societățile nou înființate este impozitul pe venitul microîntreprinderilor. Conform acestui sistem se taxează 3% din veniturile societății. Atenție: venituri = servicii prestate conform facturilor emise, nu este egal cu încasările. Acest tip de impozitare se va aplica până la o cifră de afaceri de 65.000 Euro și/sau până se obțin venituri din consultanță peste 20% din totalul veniturilor societății. Celălalt sistem de impozitare este reprezentat de impozitul pe profit. Se va putea alege acest sistem de impozitare încă de la înființare doar în cazul în care obiectul principal de activitate este legat de servicii de consultanță. Altfel, se va trece la acest sistem doar după ce cifra de afaceri va depăși plafonul de 65.000 euro, moment la care se reconsideră întregul an fiscal și se recalculează ca și cum ar fi fost impozit pe profit. Practic, în anul în care se depășește plafonul de cifra de afaceri, suma care s-a plătit în cursul anului reprezentând impozit pe venitul microîntreprinderilor se va considera plată în contul impozitului pe profit. În aceeași situație vă aflați și dacă pe parcursul anului fiscal, ponderea veniturilor din consultanță pentru afaceri și management depășește 20% din total venituri. Din punct de vedere a TVA-ului, o societate comercială nou înființată va fi neplătitoare de TVA. Obligativitatea de a te înregistra ca plătitor de TVA intervine după realizarea unei cifre de afaceri (conform definiției din Codul Fiscal) de 220.000 lei. Dacă se dorește înregistrarea în scopuri de TVA a societății anterior realizării acestei cifre de afaceri, legislația permite acest lucru. Procedura de înregistrare nu este una foarte facilă și transparentă ,dar vă recomandăm să faceți o bună analiză a oportunității înregistrării în scopuri de TVA. Pentru domeniul serviciilor IT, recomandăm înregistrarea prin opțiune în scopuri de TVA, pentru că astfel aveți posibilitatea să deduceți TVA-ul aferent tuturor achizițiilor ce urmează să le faceți din România (echipamente, mobilier, servicii etc.). Dacă nu este în interesul fiscal al societății să fie plătitor de TVA în accepțiunea clasică, dar se dorește a se realiza livrări și achiziții intracomunitare (atât de bunuri cât și de servicii) este obligatorie obținerea unui cod valid de TVA doar pentru operațiuni intracomunitare, care să fie înscris în Registrul Operatorilor Intracomunitari. Astfel, utilizând acest cod se pot face livrări de servicii intracomunitare sau achiziții fără TVA din UE dar se va declara și plăti TVA-ul aferent achizițiilor în România. Dacă se vor efectua importuri sau exporturi de bunuri sau servicii, va trebui să se obțină de la Vamă codul EORI. Procedura nu este

44

nr. 37/iulie, 2015 | www.todaysoftmag.ro

complexă, dar aplicația în care trebuie completate datele nu a ținut pasul cu dezvoltarea din domeniul IT (se poate completa online, dar trebuie depusă în original la Direcția Vamală).

Câteva demersuri necesare după înființare Odată cu deschiderea unei firme, sunt câteva proceduri minime, obligatorii care trebuie efectuate la început. După finalizarea înregistrării de la Registrul Comerțului, în termen de 30 de zile se va depune la Administrația Finanțelor Publice declarația 010 împreună cu copii după actele primite de la Registru. Practic, există comunicare în Administrația Finanțelor Publice și Registrul Comerțului, dar totuși se depune o declarație împreună cu copii după actele firmei. În caz contrar, există o amendă. Apoi, este necesar ca să se achiziționeze, în termen de 30 de zile de la înființare, un Registru Unic de Control de la Administrația Finanțelor Publice. În evidența acestuia se trec toate controalele desfăşurate la contribuabil de către toate organele de control specializate, în domeniile: protecţia muncii, inspecţia muncii, financiar-fiscal, sanitar, fitosanitar, protecţia consumatorului, protecţia împotriva incendiilor, urbanism, calitatea în construcţii, etc. . Pentru plătitorii de impozit pe profit, va trebui achiziționat Registrul de Evidență Fiscală. Termenul de achiziție este tot de 30 de zile de la data la care firma a devenit plătitoare de impozit pe profit. În conținutul registrului trebuie trecute toate informațiile care au stat la baza determinării profitului impozabil și a calculului impozitului pe profit. Firmele trebuie să notifice orice tranzacție cu cash care depășește 15.000 Euro la Oficiul Naţional de Prevenire şi Combatere a Spălării Banilor. În vederea acestui proces, la înființarea societății se va emite o decizie prin care se va numi o persoană responsabilă pentru raportarea acestor operațiuni către Oficiu și se întocmește o procedură internă de urmărire și raportare a acestor tranzacții. Amenda pentru nedesemnarea persoanei responsabile este de la 10.000 la 50.000 lei și pentru nedeclararea tranzacției de la 10.000 la 30.000 lei (în funcție de gravitatea faptei pot fi și alte sancțiuni chiar până la închiderea societății). Facturile și chitanțele pot fi emise electronic, dar reprezentanții societății vor trebui să numească o persoană sau mai multe, responsabile cu alocarea seriilor și numerelor de facturi și chitanțe utilizate. Decizia aceasta va trebui pregătită anual, la începutul anului pentru anul în curs. Înainte de angajarea fiecărui salariat, acesta trebuie să primească de la un cabinet de medicina muncii o adeverință prin care este declarat apt de muncă. De asemenea, va trebui încheiat un contract cu o firmă ce asigură instruirea personalului pentru PSI. Chiar dacă pare a fi un proces anevoios cu mulți pași de parcurs, aceasta nu ar trebui să stea în calea punerii în practică a ideilor de afaceri. Sperăm că informațiile vă sunt de folos și nu uitați că dacă nu aveți timpul necesar sau nu doriți să luați contact direct cu toată birocrația, puteți apela oricând la un avocat sau consultant specializat pentru aceste operațiuni.

Mult succes!


TODAY SOFTWARE MAGAZINE

www.todaysoftmag.ro | nr. 37/iulie, 2015

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.