Documente Academic
Documente Profesional
Documente Cultură
com
TSM
T O D A Y
S O F T WA R E
MAG A Z I NE
Download from
Windows Store
ix
ix Hystr
Fault-Tolerant Microservices cu Netfl
Arhitectura Conic
6
Minimum Delightful Product Interviu cu Rohan Chandran
Ovidiu Man
8
Retrospectiva unui an la
ACADEMY+PLUS
Gloria Csiszer
10
Unconference:
ITAKE
Ovidiu Deac
12
JSCamp 2015
Alexandru Botez
14
Techsylvania 2015 despre Product Manageri-i
din IT
Clin Biri
17
Arhitectura
Conic
Adrian Bontea
19
S batem palma asupra
soluiilor n proiectele
software
Raluca Radu
21
Model Driven Design
de la teorie la practic
Daniel Donea
26
Ce este de fapt
TDD? (II)
Alexandru Bolboac
28
Fault-Tolerant Microservices
cu Netflix Hystrix
Radu Butnaru
32
Aplicaii IoT cu Java ME Embedded 8
Dnu Chindri
35
Relaiile la distan
chiar pot
funciona!
Florin Roman
37
Cu un zmbet nu se face primvartiina fericirii n organizaii
Szilrd Kacs
editorial
Ovidiu Man
ovidiu.matan@todaysoftmag.com
Editor-in-chief
Today Software Magazine
Ovidiu Man
Lista autorilor
Alexandru Bolboac
Daniel Donea
Associate IT Consultant
@ msg systems Romnia
Adrian Bontea
Ovidiu Deac
Software Craftsman
@ Yardi Romnia
Alexandru Botez
Raluca Radu
alex.bolboaca@mozaicworks.com
adrian.bontea@yardi.com
alexandru.botez@geminisols.ro
Web Developer
@ Gemini Solutions
danut.chindris@elektrobit.com
Java Developer
@ Elektrobit Automotive
daniel.donea@msg-systems.com
ovidiu@agile-bit.com
raluca.radu@betfair.com
Product Owner
@ Betfair
Szilrd Kacs
kacso.szilard@happy-employees.eu
CEO & Trainer
@ Azimut Happy Employees
Produs de
gloria.csiszer@pitechnologies.ro
Marketing Specialist
@ Pitech+Plus
Florin Roman
www.todaysoftmag.ro
www.facebook.com/todaysoftmag
twitter.com/todaysoftmag
florin.roman@tss-yonder.com
Delivery Manager
@ Yonder
Radu Butnaru
rbutnaru@sdl.com
Senior Developer
@ SDL
Clin Biri
calin.biris@loopaa.ro
Digital Director
@ Loopaa
ovidiu.matan@todaysoftmag.com
Editor-in-chief
Today Software Magazine
interviu
Ovidiu Man
ovidiu.matan@todaysoftmag.com
Editor-in-chief
Today Software Magazine
Rohan Chandran
Vice President and GM, Mobile
Business Unit at Telenav
educaie
Retrospectiva unui an la
ACADEMY+PLUS
Gloria Csiszer
gloria.csiszer@pitechnologies.ro
Marketing Specialist
@ Pitech+Plus
programare
Aceast etap este echivalent cu parcur- din iulie fiind deja ocupat. Cei interesai
gerea materiei din cei patru ani de liceu la pot accesa testele de memorie i logic pe
un profil de mate-info. Un exemplu fericit candidates.academyplus.ro.
din etapa de piscin de anul trecut a fost
un student care nu a avut nici un background n informatic i n urma parcurgerii
acestor exerciii practice a trecut mai apoi
de testul de angajare al unei firme de IT.
eveniment
Unconference: ITAKE
m primit sptmnile trecute de la Today Software Magazine invitaia de a participa, la I.T.A.K.E. Ateptam acest eveniment
nc din toamn, de cnd am discutat la IT Days cu Alex Bolboac despre conceptul unconference, concept care mi s-a
prut foarte interesant. Recunosc c am avut o mic reinere avnd n vedere faptul c se anuna o conferin de Software
craftmanship, curent cu care nu prea rezonez. Totui, n program erau i cteva prezentri legate de programarea funcional i
speram s cunosc mai muli oameni interesai de acest subiect. De aceea, nu am stat pe gnduri i am acceptat imediat.
Locaia a fost foarte bun: ultracentral, pentru pretenioi. Conferina s-a
desfurat pe mai multe fire, ceea ce m-a
ajutat s m eschivez de la subiectele
care nu mi s-au prut interesante. Dintre
keynote speakers mi-a plcut doar
Andrea Mocci, care a avut o prezentare
despre vizualizarea codului i a felului n
care lucreaz programatorii. James Lewis
i Simon Brown au abordat generaliti.
Spre dezamgirea mea, James Lewis a vorbit despre microservices ca i cnd ar fi o
idee nou, fr s fac deloc trimitere la
sisteme ca Erlang, n care de treizeci de ani
se dezvolt arhitecturi asemntoare i din
Young spirit
Mature organization
A shared vision
Join our journey!
www.fortech.ro
10
Ovidiu Deac
ovidiu@agile-bit.com
Independent Consultant &
Functional Programming Advisor
@ Ullink
11
eveniment
JSCamp 2015
ea de-a doua ediie a JSCamp, o conferin JavaScript pentru Romnia i Europa de Est, a avut loc pe data de 2 iunie, n
Bucureti, la Radisson Blu Hotel.
12
Acesta a dezvoltat
i conceput aplicaii
utiliznd JavaScript,
Java, Ruby, dar este
foarte pasionat de
JavaScript i dezvoltarea web. El este
autorul crii electronice MVC se
aplic la JavaScript
i al unui jQuery
plug-in pentru imagini care se ncarc
lene, numit JAIL.
Discursul su, Aplicarea standardelor de
codare, a ncercat s conving participanii
n legtur cu importana standardelor
de codare i le-a spus ce fel de standarde
folosesc la Spotify pentru a le uura traiul.
Cteva dintre instrumentele i standardele
utilizate de Spotify sunt EditorConfig,
JSCS, AngularJS style commits, Gulp, Plato,
QuickStart, etc. .
Dup o scurt pauz de cafea, a doua
sesiune a nceput cu Krasimir Tsonev, un
dezvoltator front-end, blogger i orator. El
a scris Node.js.blueprints i n prezent
lucreaz pentru TrialReach, un startup n
domeniul sntii, cu sediul n Londra.
Prezentarea sa a avut titlul Meteugul
Alexandru Botez
alexandru.botez@geminisols.ro
Web Developer
@ Gemini Solutions
Product
Strategy
Product
Development
Product
Support
www.3pillarglobal.com
13
eveniment
calin.biris@loopaa.ro
Digital Director
@ Loopaa
nou);
n cadrul unei organizaii mari, un
Product Manager trebuie s construiasc inerie i for gravitaional n
jurul ideii pe care dorete s o dezvolte.
Pot s fac acest lucru prin testarea
ipotezelor i proiectelor ntr-o faz incipient, ncercnd s obin feedback bun
din rndul potenialilor clieni;
un product manager este traductor ntre CEO i membrii echipei.
Practic trebuie s comunice dorinele
ambelor pri pe limba fiecruia, dndule o form care s motiveze ambele pri
s se implice.
14
feedback?
15
comuniti
Comuniti IT
rincipalele evenimente din lunile urmtoare sunt din zona de Meetup-uri. Dei sunt restrnse, creeaz premisele unei mai
bune comunicri cu reprezentanii comunitii locale. Remarcm o cretere binevenit a evenimentelor ce au ca tema principal Java Script. V invitm s participai i s v alturai comunitilor locale.
16
Calendar
Iunie 18 (Cluj)
Lansarea numrului 36 al Today Software Magazine
www.todaysoftmag.ro
Iunie 22 (Cluj)
JavaScript Cluj Meetup #3 Typescript for the programmers who like Javascript
meetup.com/JavaScript-Cluj/events/222153313/
Iunie 23 (Cluj)
Security Cluj Community Launch
meetup.com/Security-Cluj-Meetup/events/222809785/
Iunie 24 (Bucureti)
June BucharestJS Meetup
meetup.com/BucharestJS/events/222955233/
Iunie 25 (Timioara)
TdT #33 - Risk Based Testing with Ladislau Szilagyi
m e e t u p . c o m / Ta b a r a - d e - Te s t a r e - T i m i s o a r a /
events/222661575/
Iunie 27 (Cluj)
Youth Innovation Week in Cluj-Napoca
eventbrite.com/e/youth-innovation-week-in-cluj-napocatickets-17350442641
Iunie 30 (Cluj)
Romnia digital
ccifer.ro/ro/
Iulie 7 (Cluj)
Top Notch Server-side Javascript
meetup.com/Cluj-JS/events/222611466/
Iulie 16 (Bucureti)
Bucharest Mobile Development Group
meetup.com/Bucharest-Mobile-Development-Meetup/
events/222785583/
Iulie 21 (Braov)
F.7 - The memorable experience - experience design and
gamification
meetup.com/bv-tech/events/219375720/
arhitectur
Arhitectura Conic
niversul este construit pe baza unui plan a crui simetrie profund este prezent n
structura interioar a intelectului uman. Paul Valery
Arhitectura Clean este extraordinar! Arhitectura Clean este frumoas!
Arhitectura Clean este simetric! Arhitectura Clean este natural! Arhitectura Clean ar trebui pur i simplu s fie fireasc!
Adrian Bontea
adrian.bontea@yardi.com
Software Craftsman
@ Yardi Romnia
destul de nefericite.
De zeci de ani folosim Layers pentru a
structura diverse aplicaii. La fel, de zeci de
ani, Layers a fost sinonim cu o structura de
calitate sau aveai Layers, sau aveai BBOM
(Big Ball of Mud anti-pattern).
De zeci de ani pretindem c folosim i
aplicm SOLID, dar de fapt nu o facem. n
cel mai bun caz, putem afirma c am aplicat
SOLI.
Cel puin n lumea .NET, Layers ncalc
DIP prin impunerea unei referine de la
assembly-urile high level ctre cele low level
care fac parte din layer-ul de Infrastructur:
17
arhitectur
Arhitectura Conic
funcioneze este numit regula dependenei: Dependentele n mod mult mai natural cnd folosim Clean Architecture. Este
cod pot s fie orientate doar spre interior. Aceasta este de fapt o chiar modelul mental impus de cercurile concentrice care te ajut
definiie mult mai pragmatic a DIP.
s vezi pdurea, n ciuda copacilor.
Explicarea titlului
18
management
Raluca Radu
raluca.radu@betfair.com
Product Owner
@ Betfair
19
management
S batem palma asupra soluiilor n proiectele software
outsourcing, unde un client destul de
mare al acestei companii avea nevoie de
o funcionalitate complex ce necesit
mai multe echipe de development i mai
multe luni de munc. Pentru a ne asigura
c am neles corect cerinele am decis s
ncepem un POC cu acordul clienilor. A
fost un succes, clienii au vzut un prototip al soluiei ce urma s le serveasc
scopul, am descoperit lipsuri n cerine,
pe care altfel le-am fi descoperit mult
prea trziu n procesul de dezvoltare. Am
schimbat chiar prerea clienilor cu privire
la importana unor cerine, iar la altele am
renunat cu totul. POC-ul a ajutat la comunicarea dintre noi i clieni, noi fiind cei
care implementm soluia. Ne-am simit
owner-i pe soluia propus mai ales avnd
acordul deplin al clienilor.
Prototyping and design reprezint
crearea de interfee interactive care s prezinte vizual funcionaliti. Este o metod
des folosit att n lumea online-ului ct
i n reprezentarea oricrui produs fie el
fizic sau virtual fr a fi totui necesar
construcia per se a acestuia. O aplicaie
folosit n prototyping este de exemplu
Axure, ct despre design, aceasta se face
cel mai adesea n Adobe Photoshop. Exist
pe pia o multitudine de astfel de aplicaii,
ns indiferent de ele, importana crerii de
prototipuri i de designe st n impactul
vizual. Oamenii percep mai bine ceva ce
pot s vad cu proprii ochi, par s neleag
mult mai bine, cnd li se pune n fa un
model cu care pot interaciona. La fel i
20
Fig. 1 Prototyping
programare
cest articol ofer o abordare teoretic minimal asupra Designului bazat pe modele
(Model Drive Design), dezvoltat printr-o Arhitectura bazat pe Modele (Model
Driven Architecture). De asemenea, descrie ce este un Model Conceptual i cum
este el legat de Modelul Domeniului/Modelul Problemei. Ulterior, va oferi un exemplu simplu despre cum este creat un Model i manipulat n dezvoltarea software-ului bazat pe
Modele.
Daniel Donea
daniel.donea@msg-systems.com
Associate IT Consultant
@ msg systems Romnia
Concepte
Orice software soluioneaz o problem
a clientului. Aceast problem poate fi
mprit n mai multe zone de interes. Pe
baza acestor zone de interes, se extrag topicuri (teme) relevante software-ului.
Un domeniu descrie una sau mai multe
zone de interes din cadrul unei probleme.
Dac zona de interes corespunde unor probleme de business, acesta va fi un domeniu
de business. n general, se folosete noiunea
de domeniu al problemei, termen de ansamblu, care reflect una sau mai multe zone de
interes.
n tiina calculatoarelor, modelul
domeniului const n reprezentarea tuturor
topicurilor specifice unei probleme / zone de
21
programare
Model Driven Design de la teorie la practic
un consoriu de organizaii software care dezvolt i susin
specificaii, pentru a mbunti practicile de dezvoltare i implementare a software-ului enterprise.
Acest grup a creat framework-ul conceptual, numit Model
Driven Architecture, care separ deciziile de business (ceea
ce face aplicaia), de deciziile orientate pe software (cum face
aplicaia), folosind o abordare a specificaiilor de sistem, bazat
pe utilizarea modelelor formale. [1]
MDA folosete modele pentru descrierea businessului
(funcionalitii) soluiei, independent de orice constrngere de
sistem (decizii orientate ctre software).
n MDA, Modelele independente de platform sunt exprimate ntr-un limbaj de modelare independent de platform. Pe
scurt, modelul este descris n funcie de specificaie, independent
de limbajul de programare n care va fi transformat, iar codul
surs propriu-zis este descris o dat cu modelul sau dup ce
modelul este terminat. Modelul va fi ntotdeauna prioritar.
Exemplul oferit n acest articol este influenat de viziunea dat
de ctre cei de la Object Management Group asupra MDA.
Problem
22
Motivaie
Componenta RCP este dezvoltat ntr-un framework personalizat myRCP. Acest framework definete cum sunt afiate
elementele grafice n RCP, mpreun cu acinile dintre aceste
componente.
Acest lucru ridic unele probleme legate de ciclul de implementare. Orice developer va trebui s nvee acest framework
personalizat i (probabil) framework-ul RCP. Pentru a evita
acest impediment, vom modela toate elementele din interfaa cu
utilizatorul.
Descrierea modelului conceptual se va face folosind un Limbaj
de Modelare Specific Domeniului (LMSD). Prin acest limbaj utilizatorul va descrie componentele vizuale i comportamentul
ateptat. Elementele vor fi conectate cu Obiectele de Business
i comportamentele cu Servicii de business. Acest un Limbaj de
Modelare Specific Domeniului va fi numit (GuiDMSL).
Schimbul de date dintre Application Server i RCP este realizat prin DTO (obiecte de transfer de date). Aceste DTO-uri
vor respecta contractul MyRCPObject (aa cum este cerut de
ctre frameworkul myRCP) i va conine datele din Obiectele de Modelul conceptual pentru componenta RCP - GuiDSML
business.
n acest model conceptual, programatorul va descrie o reprezentare abstract a componentelor vizuale i a comportamentului
ateptat. Aceasta se realizeaz prin mprirea perspectivei n editoare i view-uri. Aceste editoare vor conine sub-editoare i/sau
elemente de control grafice.
S lum urmtorul exemplu din LDAP Studio (C):
https://directory.apache.org/studio/users-guide/
ldap_browser/tools_ldap_perspective.html
23
programare
Model Driven Design de la teorie la practic
Zona principal a aplicaiei este perspectiva 1. Fiecare perspectiv conine cel puin un editor i poate conine i view-uri.
Fiecare editor conine sub-editoare, paragrafe i/sau elemente de
control grafice. Fiecare paragraf conine diferite elemente de control grafice.
Modelul trebuie s fie cababil s descrie toate aceste elemente
i interaciunea dintre ele. Cu Xtext noi vom descrie componentele i obiectele de business cu care lucreaz.
S lum urmtorul exemplu GuiDSML Entry editor 2:
{Descriere pentru o posibil transformare.}
editor EntryEditor opensIn MainEditor {
title Titles.EntryEditor
behavior EntryEditorBehaviours
businessObject EntryDTO
paragraphs{
submenu DN
table EntryDescriptionTable
}
}
{ Descriere pentru o posibil transformare.}
Table EntryDescriptionTable {
Title Titles.EntryDescriptionTable
businessObject EntryDTO.descriptionDTO
columns {
column AttributeDescription {
value descriptionDTO.attributeDescription
}
column Value {
value descriptionDTO.value
}
}
deleteField(descriptionDTO.attribute)
Utilizatorul va putea s particularizeze funcionalitatea, folosind un cuvnt cheie custom la sfritul descrierii unui buton.
Servicii de Busines:
service
}
EntryService {
{Description for possible transformation.}
operation deleteField (
{Information anout inout.}
attributeDescription: String
) : void;
24
submenu DN
table EntryDescriptionTable
IF readOnly == true-
private booleanreadOnly = true;
ENDIF-
private String editorName = name ;
ENDDEFINE
DEFINE DefaultEditor(String name)-
Import staticorg.junit.Assert.*;
Import java.io.IOException;
Import java.util.HashMap;
Import java.util.Map;
Import java.util.Set;
ENDDEFINE
Referine
[1] An introduction to Model-Driven Architecture (MDA) Alan W. Brown,
Jim Conallen
[2] Model-Driven Software Development, (Technology, Engineering,
Management)- Thomas Stahl, Markus Volter
[3] Towards the Automatic derivation of Malaca Agents using MDE
Inmaculada Ayala, Nercedes Amor and Lidia Fuentes E.T.S.I. Informatica,
Universidad de Malaga
[4] Xtext website - http://www.eclipse.org/Xtext/
[5] http://www.omg.org/mda/mda_files/Model-Driven_Architecture.pdf
[6] http://ftp.icm.edu.pl/packages/ace/ACE/PDF/GEI.pdf
[7] https://eclipse.org/community/images/apacheldap.png
[8]mdwhatever.free.fr/index.php/2010/06/model-driven-tools-the-big-list/
www.todaysoftmag.ro | nr. 36/iunie, 2015
25
programare
Alexandru Bolboac
alex.bolboaca@mozaicworks.com
Agile Coach and Trainer, with a
focus on technical practices
@Mozaic Works
26
Prezentul articol l continu pe cel din deja testat. Dezvoltatorul poate totui s
numrul trecut al revistei Today Software introduc erori dac problema nu a fost
Magazine pe aceast tem.
neleas corect sau dac testele au fost
incorecte.
TDD este o metod de a concepe (design)
Este asta suficient pentru a numi ceea
Noi scriem cod pentru a rezolva o ce rezult din TDD un design bun? Cel
problem i folosim teste pentru a defini mai probabil, rspunsul este nu. Logic este
comportamentul ateptat al soluiei. Cnd s spui:
testele sunt trecute, o alt bucic a proCalitatea designului depinde de
blemei este soluionat. Noi tocmai am abilitile designerului.
creat intenionat o bucat de cod care
TDD n sine nu va produce design
rezolv o problem. Acesta este design.
bun. Produce ntr-adevr design cu anuDar oare este un design bun? Aceasta mite caliti, dar depinde de dezvoltator s
este o discuie interesant. Pentru a rs- duc asta mai departe.
punde la ntrebare, ar trebui s ne uitm
Dar
la calitile designului, pe care TDD ne
oblig s le dezvoltm. Iat dou dintre ele: Cnd se concepe design n TDD?
Testabilitate evident, deoarece codul
Este acum momentul s introducem
este testat.
nc un aspect al designului software.
Rezistena la greeli exist o proba- Scrierea codului nu este suficient; este
bilitate mai mic de a introduce greeli important s structurezi codul ntr-un
atunci cnd modifici codul care a fost anumit mod. Cea mai puin structurare
programare
27
programare
Fault-Tolerant Microservices
cu Netflix Hystrix
Radu Butnaru
rbutnaru@sdl.com
Senior Developer
@ SDL
cest articol continu seria destinat solutiilor aplicate intr-un sistem construit folosind o arhitectur bazat pe Microservicii. Articolul precedent a
tratat (Micro)service Discovery cu Netflix Eureka (http://todaysoftmag.ro/
article/1391/micro-service-discovery-cu-netflix-eureka). Articolul curent prezint
biblioteca Java Hystrix, dezvoltat n regim open-source de ctre compania Netflix.
Hystrix ofer o implementare matur a pattern-ului Circuit Breaker, al crui scop este
s reduc impactul defectrilor i al timpilor mari de laten n sisteme distribuite.
Problema
O caracteristic principal a sistemelor construite pe baz de microservicii
este utilizarea unui numr mare de componente distribuite. Pe msur ce numrul
de interaciuni sincrone prin reea crete,
impactul unei defectri a unui serviciu
poate deveni din ce n ce mai sever.
Enumerm cteva din cazurile cele
mai frecvente de comportament anormal
ale unui serviciu:
serviciul nu mai rspunde (serviciul
este oprit sau reeaua nu funcioneaz);
apelul de serviciu dureaz prea mult;
apelul de serviciu returneaz erori.
Fr mecanisme de protecie, erorile
i n mod special timpii mari de laten se
vor propaga ctre clienii serviciului, unde
se va putea ajunge n situaia ca resurse de
sistem limitate s fie epuizate (de exemplu,
pool-ul de thread-uri al serverului web).
Prin escaladarea erorilor, disponibilitatea
(engl. availability) sistemului este afectat
n mod semnificativ: ntregul sistem poate
deveni indisponibil din cauzei unei singure
dependene defecte, dei restul serviciilor
28
Soluia
Un Circuit Breaker (rom. ntreruptor
de circuit) este folosit pentru a intermedia
operaiile prin reea dintre un client i un
serviciu. Circuit Breaker-ul monitorizeaz
i detecteaz cnd serviciul invocat se
comport anormal, respingnd apelurile
ctre serviciu pn cnd acesta va deveni
funcional din nou. ntorcnd o eroare
imediat, se previne epuizarea resurselor din procesul client. n acelai timp,
se reduce ncrcarea serviciului invocat,
Starea nchis
n cazul de funcionare normal cnd nu exist condiii de
eroare, Circuit Breaker-ul este n starea nchis. Toate apelurile
sunt transmise n mod transparent ctre serviciu.
Starea Deschis
<version>1.3.20</version>
</dependency>
...
this.restTemplate = restTemplate;
@Override
Circuit Breaker-ul consider urmtoarele condiii drept
protected List<Product> run() throws Exception {
simptome ale unei defectri i le va lua n calcul pentru a decide
// Apel serviciu HTTP
ResponseEntity<Product[]> responseEntity =
ntreruperea circuitului:
restTemplate.getForEntity(
O excepie este returnat (de ex., eroare de conectare sau
http://host/products, Product[].class);
serviciul ntoarce codul HTTP 500).
Product[] products = responseEntity.getBody();
Apelul dureaz mai mult dect timpul de expirare configureturn Arrays.asList(products);
}
rat (valoarea implicit este de 1 secund).
}
Pool-ul intern de thread-uri sau semaforul folosit de Hystrix ...
pentru apel respinge execuia datorit capacitii depite.
Hystrix folosete pool-uri de thread-uri pentru a limita numPentru a invoca clasa comand, ea trebuie instaniat i apoi
rul de resurse folosit de o dependen.
apelat metoda execute():
Circuitul este ntrerupt de ndat ce Hystrix determin c pragul de erori de pe parcursul unei ferestre de timp statistice a fost
atins ( implicit, 50% erori pe parcursul unei perioade de timp
de 10 secunde). n starea deschis, Circuit Breaker-ul va respinge
apeluri prin:
ntoarcerea unei excepii (comportamentul implicit, denumit i fail fast),
opional, prin ntoarcerea unei valori de fallback (de ex.,
ntoarcerea unui rezultat nul, gol, sau predefinit).
Starea Semi-deschis
...
new FindAllProductsCommand(productService).execute();
...
...
} catch (IllegalArgumentException e) {
// Dac se ntoarce HystrixBadRequestException,
// Circuit Breaker-ul nu se va deschide
throw new HystrixBadRequestException(
Bad request., e);
www.todaysoftmag.ro | nr. 36/iunie, 2015
29
programare
Fault-Tolerant Microservices cu Netflix Hystrix
}
...
Valorile specifice de configurri (timpi de expirare, capacitatea pool-ului de thread-uri, praguri procentuale de eroare, etc.),
pot fi atribuite programatic la momentul instanierii comenzii.
...
new FindAllProductsCommand(HystrixCommand.Setter.
withGroupKey(HystrixCommandGroupKey.Factory
.asKey(ProductGroup)).
andCommandPropertiesDefaults(
HystrixCommandProperties.Setter()
.withCircuitBreakerRequestVolumeThreshold(20)
.withCircuitBreakerErrorThresholdPercentage(50)
.withExecutionIsolationThreadTimeoutInMilliseconds(1000)
.withMetricsRollingStatisticalWindow
InMilliseconds(10000)
.withMetricsRollingStatistical
WindowBuckets(10))
.andThreadPoolPropertiesDefaults(
HystrixThreadPoolProperties.Setter()
.withCoreSize(10)), restTemplate)
.execute();
...
...
@HystrixCommand(fallbackMethod = defaultProducts)
public List<Product> findAllProducts() {
// Apel serviciu HTTP
...
}
public List<Product> defaultProducts() {
return Collections.emptyList();
}
...
Dac se dorete ca un anumit tip de excepie s nu fie considerat simptom al unei defectri, tipul excepiei trebuie menionat
n adnotare:
...
@HystrixCommand(ignoreExceptions = {IllegalArgumentException.class})
public List<Product> findAllProducts() {
// Apel serviciu HTTP
...
}
...
circuitBreaker:
requestVolumeThreshold: 20
errorThresholdPercentage: 50
metrics:
rollingStats:
timeInMilliseconds: 10000
numBuckets: 10
threadpool:
ProductService:
coreSize: 10
30
3 https://github.com/Netflix/Turbine
Bibliografie
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
5 http://martinfowler.com/bliki/CircuitBreaker.html
6 https://github.com/Netflix/Hystrix
7 https://github.com/Netflix/Hystrix/wiki
8 http://cloud.spring.io/spring-cloud-netflix
9 https://github.com/Netflix/Hystrix/tree/master/hystrix-contrib/hystrix-javanica
Concluzie
Netflix Hystrix este o implementare matur a pattern-ului
Circuit Breaker, configurabil n detaliu, cu suport solid pentru
vizualizare i monitorizare. Bibliotecile Spring Cloud Netflix/
Javanica ofer o alternativ de folosire bazat pe adnotri, cu un
4 https://github.com/Netflix/Hystrix/wiki/Dashboard
10 https://github.com/Netflix/Hystrix/tree/master/hystrix-dashboard
11 https://github.com/Netflix/Hystrix/wiki/Dashboard
12 https://github.com/Netflix/Turbine
13 https://github.com/Netflix/archaius
14 https://speakerdeck.com/benjchristensen/application-resilience-engineering
-and-operations-at-netflix-with-hystrix-javaone-2013
31
programare
Dnu Chindri
Java Developer
@ Elektrobit Automotive
danut.chindris@elektrobit.com
Aplicaiile Micro Edition pot fi dezvoltate att manual ct i cu ajutorul unui SDK
specializat, cunoscut sub numele Oracle
Java ME SDK 8.1. SDK-ul, distribuia Java
ME, documentaia i orice alte resurse
mai sunt necesare dezvoltrii aplicaiilor
embedded, se gsesc la adresa Oracle destinat platformei.
nainte de a ncepe s dezvoltm
aplicaii embedded, Oracle recomand n
primul rnd instalarea Oracle Java ME
SDK 8.1 - pachet software care la momentul scrierii acestui articol este disponibil
doar pentru sistemul de operare Windows.
Urmtorul pas este descrcarea distribuiei
Java ME Embedded 8 destinat dispozitivului pe care dorim s rulm aplicaiile.
Aceasta vine sub forma unei arhive ZIP
i trebuie transferat pe dispozitiv - cu
ajutorul unui tool cum este PuTTY -,
unde urmeaz s fie instalat. De asemenea, se recomand pstrarea unei copii
pe sistemul desktop, unde se va executa
dezvoltarea aplicaiilor. Acest ultim pas
nu este obligatoriu, ns este recomandat
pentru cazul n care dezvoltatorul dorete
s execute comenzi pe dispozitiv cu ajutorul AMS CLI (Application Management
System Command Line), prin intermediul
programului Developer Agent.
32
MIDlet-Name: Hello
MIDlet-Version: 1.0
MIDlet-Vendor: Today Software Magazine
MIDlet-1: Hello,,ro.leje.Hello
MIDlet-Jar-Size: 1076
MIDlet-Jar-URL: Hello.jar
MicroEdition-Profile: MEEP-8.0
Cu ajutorul opiunii -Xdevice specificm numele dispozitivului pe care dorim s rulm aplicaia. EmbeddedDevice
este un dispozitiv emulat, configurat automat n momentul n
care instalm SDK-ul. Prin intermediul celei de-a doua opiuni
prezente n comanda pe care am executat-o -Xdescriptor
specificm locaia i numele descriptorului aplicaiei noastre.
Putem observa rezultatul rulrii aplicaiei n urmtoarea
figur:
Figura ne arat faptul c urmtorul pas a fost rularea script-ului u s e r t e s t . s h cu ajutorul comenzii
sudo ./usertest.sh. Acest script a lansat n execuie Java
runtime, care permite accesul la AMS. Platforma ascult pe portul
2201 i ne permite s ne conectm de la distan pentru a face
managementul aplicaiilor ME.
nainte de a putea continua, trebuie s nregistrm dispozitivul cu ajutorul aplicaiei Device Connections Manager. De vreme
ce avem instalat SDK-ul, ar trebui s gsim n SysTray o iconi
intitulat Oracle Java(TM) ME SDK 8.1 Device Manager. Fcnd
click pe aceasta, deschidem managerul de conexiuni, unde putem
aduga plcua noastr, pe care o identificm dup IP. Odat ce
am nregistrat dispozitivul, ar trebui s avem n fereastra activ
ceva similar figurii urmtoare:
Acum putem instala pe Raspberry PI aplicaia pe care am creato ntr-o seciune anterioar. Avem la dispoziie cteva modaliti
pentru a face aceasta, una dintre ele fiind cu ajutorul utilitarului
Device Selector, care este la dispoziia noastr, bineneles, datorit
www.todaysoftmag.ro | nr. 36/iunie, 2015
33
programare
Aplicaii IoT cu Java ME Embedded 8
faptului c am instalat SDK-ul. Deschiznd aceast aplicaie,
observm o list cu toate dispozitivele instalate la momentul
curent. Predefinit, avem la dispoziie trei dispozitive emulate:
EmbeddedDevice1, EmbeddedDevice2 i Qualcomm_IoE_Device.
Alturi de acestea, putem vedea plcua Raspberry PI, pe care
tocmai am nregistrat-o, cu numele EmbeddedExternalDevice1.
Dorim s rulm aplicaia Hello pe acest dispozitiv, aa c facem
click-dreapta i alegem Run JAR or JAD, dup cum este ilustrat
i n figura urmtoare:
Concluzii
Dezvoltarea aplicaiilor Java ME Embedded 8 poate fi un
proces interesant i distractiv, dar uneori dificil i frustrant. Din
pcate, materialele de studiu dedicate Java ME Embedded 8 sunt
puine. Pn n momentul de fa exist o singur carte publicat care abordeaz subiectul dezvoltrii aplicaiilor Java ME
Embedded 8. De asemenea, majoritatea articolelor existente pe
aceast tem au o abordare general, prezentnd n linii mari
trsturile acestei noi platforme. Deocamdat, thread-urile pe
forumuri sunt relativ puine, ns putem observa interesul din ce
n ce mai mare al utilizatorilor, dornici s nvee cum s foloseasc
Rularea aplicaiei pe dispozitiv
noua versiune. Cele mai consistente resurse pe care le avem la
dispoziie sunt ghidurile oficiale compilate de ctre Oracle, care
Alegnd de pe disk fiierul Hello.jad cu ajutorul feres- pot fi descrcate de pe site-ul oficial al platformei.
trei de tip Open care a aprut, platforma lanseaz n execuie
managerul de aplicaii, care instaleaz pachetul nostru software
pe plcu, lucru pe care l putem vedea n urmtoarea captur
de ecran:
Managerul de aplicaii
Faptul c aplicaia noastr Java ME Embedded 8 ruleaz ntradevr pe dispozitiv ni-l demonstreaz consola PuTTY, unde
putem vedea output-ul pornirii i opririi aplicaiei:
34
management
elaiile la distan pot avea mult succes. Mai ales n domeniul nostru, n care companii
din dou regiuni diferite coopereaz i fiecare aduce o calitate specific n cadrul parteneriatului. Dar o relaie fie personal, fie profesional, n cadrul aceleiai companii
sau ntr-o regiune nu foarte ndeprtat, necesit un pic de efort. Pentru a crea parteneriate
de calitate, pe termen lung, apelm pur i simplu la aspecte de bun sim, pentru a ne asigura
c toat lumea se ndreapt n aceeai direcie i c ateptrile sunt clare. Totui, aceste reguli
de bun sim sunt adesea ignorate.
Florin Roman
florin.roman@tss-yonder.com
Delivery Manager
@ Yonder
Comunic. Unul dintre cele mai importante aspecte ale unei relaii pe termen lung
cu clientul este comunicarea. Cu ct aceasta
este mai bun i mai frecvent ntre voi i
client, cu att mai onest i mai deschis
va deveni relaia. n acest fel va fi mai uor
pentru client s rmn mulumit i problemele s fie rezolvate ntr-un interval de timp
rezonabil.
35
management
Relaiile la distan chiar pot funciona!
Fii propriul vostru client.
Familiarizai-v cu afacerea clientului,
nelegei cum funcioneaz aceasta, dinamica pieei lor, precum i provocrile cu
care se confrunt. Nu trebuie s devenii
expert, ns trebuie s vorbii pe aceeai
limb i s nelegei ngrijorrile clientului
dumneavoastr.
36
HR
untem tot mai preocupai de fericire. Din perspectiv organizaional, suntem tot mai
contieni de relevana unor angajai fericii: acetia sunt mai productivi, mai satisfcui i mai ataai. n acest sens, observm tot mai multe eforturi pentru a ne mulumi
angajaii. Dar cum oare putem ajunge de la zmbet la fericire organizaional?
Szilrd Kacs
kacso.szilard@happy-employees.eu
CEO & Trainer
@ Azimut Happy Employees
37
HR
Cu un zmbet nu se face primvar- tiina fericirii n organizaii
punctele forte i de mbuntit
ale echipei.
Aceast prim etap este
urmat de implementare n care propunem i livrm
programe de training, teambuilding, coaching specific
nevoilor identificate n partea
de diagnoz.
Evaluarea i sustenabilitatea programului- evalum
rentabilitatea i progresul
aciunilor noastre, dup care
ne ngrijim de meninerea n
organizaie a comportamentelor deja create.
n concluzie, fericirea nu
se reduce la un zmbet, care
poate fi de multe ori doar unul
dintre semnele sociabilitii.
Doar cteva activiti pentru
amuzamentul i implicarea
angajailor nu ne ajut s ajungem la fericire organizaional.
Instrumentele tiinifice potrivite i un program complex
implementat, pot s aduc
imense beneficii cantitative i
calitative companiei i angainvestim n retenia i angajamentul angajailor.
jailor notri transformnd
n plus, cercetrile au dezvluit o legtur de cauzalitate ntre conceptul abstract de fericire organizaional n ceva concret i
fericirea angajailor, productivitatea i angajamentul lor i ntr-un msurabil. Nu uitai! Cu un zmbetnu se face primvar!
fericit final, satisfacia i loialitatea clienilor firmei. La acest
beneficiu adugm i faptul c angajaii fericii s-au dovedit
a fi cu 10-12% mai productivi dect cei cu o stare mai puin
bun la locul de munc . Avantajele resimite la nivelul companiei
se concretizeaz printr-o rat crescut de retenie i profit adus
companiei.
38
sponsori
powered by