Saturday, October 17, 2015
Working in Gibraltar - Income Tax Office
With this copy of your ToE you have to go to the Income Tax Office as soon as possible to receive a tax number. Based on this number you will get your monthly salary. For the Income Tax Office you also need to show them your passport. The address of the Income Tax Office is 331 Main Street. It's a white building on the left hand side as you come from the city centre. The office you're interested in is located on the ground floor. You can go to this office from Monday to Friday and the working hours are 08:3O-15:00. Take a number and wait for your turn.
The officer will ask you if it's your first job in Gibraltar and will also ask you to fill in a forms. At the end of your visit to this office the officer will give you your ToE and passport back and two other documents: a white piece of paper and a blue one. The white one is yours and the blue one you have to take to the company and hand it to HR. On these papers you can find the tax number and information about how much you will be taxed.
Thursday, July 16, 2015
Aplicaţii IoT cu Java ME Embedded 8 şi Eclipse
(Publicat în revista Today Software Magazine, Numărul 37, Iulie 2015: http://www.todaysoftmag.ro/article/1538/aplicatii-iot-cu-java-me-embedded-8-si-eclipse)
Aplicaţ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.
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.
Tooling pentru aplicaţii ME cu Eclipse - Plugin-uri necesare
Pentru a putea urmări paşii prezentaţi în acest articol, avem nevoie, în primul rând, de Oracle Java ME SDK 8.1, pachet software prezentat în articolul Aplicații IoT cu Java ME Embedded 8. De aceea, încurajăm cititorii să răsfoiască numărul 36 al revistei, pentru a afla mai multe despre acest SDK. Pentru a putea beneficia de toate funcţionalităţile pe care Oracle Java ME SDK 8.1 ni le pune la dispoziţie, următorul lucru pe care trebuie să-l facem este să instalăm plugin-urile Java ME SDK 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 detalii despre instalarea acestor unelte, dar şi despre instalarea Eclipse, putem găsi în documentul Oracle Java Micro Edition Software Development Kit, Developer's Guide.
Crearea unui proiect
O dată ce au fost instalate plugin-urile Java ME SDK Tools şi extensiile MTJ, putem accesa perspectiva Java ME, care ne întâmpină cu o pagină de bun venit, ilustrată în următoarea captură de ecran:
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:
Î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ă introducem un nume pentru proiectul nostru. Pentru acest exemplu ne vom folosi de codul listat şi discutat în documentul Oracle Java ME Embedded, Developer's Guide, capitolul General Purpose Input/Output. Acest exemplu ne arată cum putem accesa pinii GPIO (General Purpose Input/Output) ai unei plăcuţe de dezvoltare. La fel ca în articolul precedent, vom folosi un dispozitiv Raspberry PI Model B+.
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 name numele LEDSwitcher, întrucât dorim să realizăm o aplicaţie 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:
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;
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;
public void startApp() {
try {
pin = DeviceManager.open(PIN_NUMBER);
Thread.sleep(SLEEP_TIME_MILLIS);
for (int i = 0; i < 20; i++) {
System.out.println("Setting pin to true");
pin.setValue(true);
Thread.sleep(SLEEP_TIME_MILLIS);
System.out.println("Setting pin to false");
pin.setValue(false);
Thread.sleep(SLEEP_TIME_MILLIS);
}
} 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.
Dorim acum să testăm aplicaţia LEDSwitcher dar, pentru a face lucrurile mai interesante, vom încerca să o instalăm pe dispozitivul Raspberry PI. Aşa cum am văzut în articolul la care am făcut referire mai sus, trebuie să lansăm în execuţie mediul Java 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:
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
.
Eclipse ne pune la dispoziţie tab-ul Security al editorului despre care am amintit mai devreme unde, în cadrul secţiunii Required Permissions, putem adăuga permisiuni, apăsând butonul Add.... Acest pas este ilustrat în următoarea captură de ecran:
Salvăm modificările, care se reflectă în descriptorul aplicaţiei, LEDSwitcher.jad
, şi lansăm aplicaţia în execuţie, folosind acelaşi mecanism. De data aceasta, observăm că aplicaţia rulează fără probleme:
Dacă realizăm montajul folosind un LED, o rezistenţă, un breadboard şi doi conectori, obţinem configuraţia prezentată în imaginea de mai jos. Vedem, de asemenea, că LED-ul s-a aprins atunci când valoarea pinului a fost setată la true
.
Debugging cu Eclipse
Una dintre cele 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 dispoziţie.
Şi în cazul aplicaţiilor Java ME Embedded 8 putem folosi perspectiva Debug, împreună cu toate view-urile cunoscute. Este interesant faptul că putem face debugging chiar şi atunci când rulăm aplicaţia pe dispozitivul real, nu suntem obligaţi să o instalăm pe un dispozitiv emulat. Folosind fereastra de tip dialog Debug Configurations putem seta diverşi parametri, cum ar fi dispozitivul pe care dorim să rulăm aplicaţia, care este MIDlet-ul ce trebuie executat etc. Stabilind breakpoint-uri în codul sursă şi 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ă ingineria software, bineînţeles, dar ş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.
Saturday, June 27, 2015
You'll always miss 100% of the shots you don't take
The first time I read Wayne Gretzky's famous quote I was a teenager who was trying to understand which direction he should take in life. Although I had a rough idea about what's expected of me: get an education, get a job, start a family and so on; over the years I discovered that life has much more in store than I initially thought. There are so many things to do, there are so many things to be passionate about. It would be a shame to limit ourselves and never try something new, never try to improve our character, our skills and eventually our way of living.
Meanwhile I discovered that my passion is software engineering and many things have changed over the past ten years or so. Whether I'm thinking about the college years or the seven years I've been working as a full time employee for various companies, there were times of struggle, times of celebration but most important the satisfaction of accomplishing something meaningful after a hard day's work.
During my last year in college I discovered the power and diversity of the Java platform and I was amazed at how many things one can do with it. Soon I decided that I want to invest time and energy into learning as much as I can about it and right after finishing my studies I got my first job as a Java developer. I've been working with Java technologies ever since. I won't spend more time talking about this particular topic because I'm more interested in sharing my thoughts about what it means to me to be a software engineer.
Working as a software engineer challenges me constantly. It helps me evolve both professionally and personally because software engineering is not sitting in front of a computer and hacking some code. It's interacting with people - actually many times mastering the art of dealing with people is more important for the success of a project than the ability to write code -, taking the right decisions, being rigorous and organized, committed and responsible. And perhaps one of the most important things: being curious and hungry for knowledge, constantly learning. In my country there's a saying about doctors, and everybody agrees that they have to learn new stuff their whole lives. Few people that are not working in IT see though that if you're a software engineer and you want to stay in business you can never leave out the learning part.
Also, working in this domain helped me see more clearly different aspects of life. The explosion of the technology related things everybody uses every day made me realize that somehow we are shaping the present and also the future of our civilization. That leads me to another conclusion: we have a lot of power therefore we have greater responsibility. People that are part of the IT culture - because software and hardware engineering it's not just a job, it has become a culture - are the ones that come with new ideas, innovate and make that future possible.
Being part of a large company has its benefits. For instance, you're exposed to a lot of information both from a technical and business perspective. Also it was essential for me at the beginning of my career that I received guidance from the more experienced colleagues. Another important aspect is the stability a company usually offers. Even when things are not that great most of the time they find a solution. However, companies are profit oriented, and it's normal to be so. Therefore there are many constraints that have to be met and many times those constraints hurt freedom; the freedom to choose the project you're working on, the freedom to choose the technologies you're using and eventually, the freedom to express your most innovative ideas and bring them to life. Of course that's not a rule, but I've seen it happening many times.
At some point during the past few years I began to feel more and more the need to be able to choose what I'm working on. Then I began to understand how important it is to be passionate not only about the technologies you're applying but also about the reality you're trying to model through the product you're developing.
It seems that another important ingredient that contributes to a success story is the context which you find yourself in, and I'm thinking here about timing and location. Developing software is a creative process and artists need to be able to choose the time and place of working so they can deliver their masterpiece. Of course we can't take that to extreme, because usually the success of a project also relies on that dreaded word, "deadline". What I'm trying to say is that it's nice from time to time to be able to wake up in the middle of the night and implement some genius idea that solves the problem you just couldn't find a solution to during the day. It's also nice to be able to escape the crowded city and charge your batteries in a quiet place without needing to call it a vacation.
Such things are possible through Toptal's way of doing business. I've recently learned from a friend a few things about the Toptal team and it seems that it's a great community to be part of. I'll soon have a discussion with a representative and I'm excited about that! I'm looking forward to knowing them better and eventually be able to confirm myself that these things are true and more!
Wednesday, June 24, 2015
Aplicații IoT cu Java ME Embedded 8
(Publicat în revista Today Software Magazine, Numărul 36, Iunie 2015: http://issuu.com/todaysoftmag/docs/tsm_36_2015_ro)
În numărul 31 al revistei am făcut o introducere în ceea ce privește subiectul Internet of Things din perspectiva platformei Java. Așa cum am promis, vom continua această discuție prezentând detaliile creării unui proiect Java ME Embedded 8. Această versiune reprezintă un important pas înainte, odată cu adoptarea CLDC 8 - care este un sub-set al Java Standard Edition - și MEEP 8 - specificație care definește un mediu puternic și flexibil pentru sisteme embedded de dimensiuni reduse. Alături de acestea, trebuie să remarcăm alinierea platformei despre care discutăm la Java SE 8.
Tooling pentru aplicaţii ME - Oracle Java ME SDK 8.1
Aplicațiile Micro Edition pot fi dezvoltate atât manual, cât și cu ajutorul unui SDK dedicat, cunoscut sub numele Oracle Java ME SDK 8.1. SDK-ul, distribuţia Java ME, documentaţia şi orice alte resurse mai sunt necesare dezvoltării aplicaţiilor embedded, se găsesc la adresa Oracle dedicată platformei.
Înainte de a începe să dezvoltăm aplicaţii embedded, Oracle recomandă, în primul rând, instalarea Oracle Java ME SDK 8.1 - pachet software care la momentul scrierii acestui articol este disponibil doar pentru sistemul de operare Windows. Următorul pas este descărcarea distribuţiei Java ME Embedded 8 destinată dispozitivului pe care dorim să rulăm aplicaţiile. 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ă păstrarea unei cópii pe sistemul desktop, unde se va executa dezvoltarea aplicaţiilor. Acest ultim pas nu este obligatoriu, însă este recomandat pentru cazul în care dezvoltatorul doreşte să execute comenzi pe dispozitiv cu ajutorul AMS CLI (Application Management System Command Line), prin intermediul programului Developer Agent.
Prima noastră aplicaţie Java ME
Odată ce am instalat SDK-ul şi Java ME, putem să începem dezvoltarea unei aplicaţii embedded. Sub forma ei cea mai simplă, o astfel de aplicaţie trebuie să conţină o clasă care extinde clasa abstractă javax.microedition.midlet.MIDlet
, un fişier manifest şi un fişier JAD (Java Application Descriptor). Am putea scrie o astfel de aplicaţie manual, fără ajutorul unui IDE, care să automatizeze anumiţi paşi. Acesta este un bun exerciţiu pentru dezvoltatorul care intră pentru prima dată în contact cu Java ME Embedded 8. Astfel, ne propunem să creăm o simplă aplicaţie, care afişează în consolă un mesaj la pornirea aplicaţiei şi unul la oprirea acesteia.
În primul rând, creăm o clasă care extinde javax.microedition.midlet.MIDlet
, implementând metodele startApp()
şi destroyApp(boolean unconditional)
:
public class Hello extends javax.microedition.midlet.MIDlet {
public void startApp() {
System.out.println("Hello MIDlet");
}
public void destroyApp(boolean unconditional) {
System.out.println("Goodbye MIDlet");
}
}
Pentru a continua în aceeaşi manieră, compilăm manual clasa pe care tocmai am scris-o, cu o comandă similară celei listată aici:
javac -cp %JAVA_ME_SDK%\lib\meep_8.0.jar -d classes src\ro\leje\Hello.java
Observăm că avem nevoie de biblioteca meep_8.0.jar
la compilare, întrucât aceasta defineşte clasa abstractă MIDlet
. Această bibliotecă se găseşte în directorul %JAVA_ME_SDK%\lib
, unde %JAVA_ME_SDK%
reprezintă calea unde a fost instalat SDK-ul.
Următorul pas îl reprezintă crearea fişierului manifest, care trebuie să conţină cel puţin următoarele informaţii:
MIDlet-Name: Hello
MIDlet-Version: 1.0
MIDlet-Vendor: Today Software Magazine
MIDlet-1: Hello,,ro.leje.Hello
MicroEdition-Configuration: CLDC-1.8
MicroEdition-Profile: MEEP-8.0
Presupunând că am salvat fişierul manifest cu numele MANIFEST.MF
, putem trece la următorul pas, care este crearea arhivei JAR. Această arhivă trebuie să conţină clasa compilată şi fişierul manifest. Realizăm aceasta lansând în execuţie următoarea comandă:
jar cfm build\Hello.jar MANIFEST.MF -C classes .
Odată ce am creat fişierul Hello.jar
, pentru această aplicaţie mai avem nevoie de un singur lucru, şi anume descriptorul aplicaţiei, cunoscut şi sub numele de fişier JAD (Java Application Descriptor). Acesta se aseamănă cu fişierul manifest, conţinând următoarele linii obligatorii:
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
Observăm că unul dintre atributele obligatorii ale fişierului JAD este dimensiunea în bytes a arhivei. Salvăm acest fişier cu numele Hello.jad
în acelaşi director cu arhiva JAR.
Rularea aplicaţiei cu un emulator
În acest moment avem o aplicaţie Java ME Embedded 8 completă, pe care o putem lansa în execuţie. Cea mai simplă modalitate pentru a face acest lucru este folosirea emulator-ului pe care ni-l pune la dispoziţie SDK-ul. Presupunând că am adăugat în PATH
calea %JAVA_ME_SDK%\bin
şi că directorul curent este directorul build
al proiectului nostru, putem lansa următoarea comandă:
emulator -Xdevice:EmbeddedDevice1 -Xdescriptor:Hello.jad
Cu ajutorul opţiunii -Xdevice
specificăm numele dispozitivului pe care dorim să rulăm aplicaţia. EmbeddedDevice1
este un dispozitiv emulat, configurat automat în momentul în care instalăm SDK-ul. Cea de-a doua opţiune prezentă în comanda pe care am executat-o este -Xdescriptor
, prin intermediul căreia specificăm locaţia şi numele descriptorului aplicaţiei noastre.
Putem observa rezultatul rulării aplicaţiei în următoarea figură:
Mesajul Hello MIDlet este afişat la pornirea MIDlet-ului, iar mesajul Goodbye MIDlet la oprirea acestuia, cu ajutorul combinaţiei de taste Ctrl + C
.
Rularea aplicaţiei pe dispozitiv
O altă modalitate de a rula aplicaţia este prin instalarea acesteia pe dispozitivul ţintă. Pentru acest articol am folosit o plăcuţă de dezvoltare Raspberry PI Model B+, dotată cu un dongle Wi-Fi. De asemenea, menţionăm faptul că platforma are deja instalat un sistem de operare Linux, ceea ce facilitează munca noastră cu acest hardware. Având această configuraţie la îndemână putem accesa de la distanţă sistemul Raspberry PI, cu ajutorul unui program precum PuTTY.
Accesăm plăcuţa cunoscându-i IP-ul şi un user cu drepturi de root. Odată ce ne-am autentificat, schimbăm directorul curent, pentru a ne situa în directorul bin
al distribuţiei Java ME Embedded 8 instalată. Acest lucru este ilustrat în următoarea captură de ecran:
Figura ne arată faptul că următorul pas a fost rularea script-ului usertest.sh
cu ajutorul comenzii sudo ./usertest.sh
. Acest script a lansat în execuţie Java runtime, care permite accesul la AMS. Platforma ascultă pe portul 2201 şi ne permite să ne conectăm de la distanţă pentru a face managementul aplicaţiilor ME.
Înainte de a putea continua, trebuie să înregistrăm dispozitivul cu ajutorul aplicaţiei Device Connections Manager. De vreme ce avem instalat SDK-ul, ar trebui să găsim în SysTray o iconiţă intitulată Oracle Java(TM) ME SDK 8.1 Device Manager. Făcând click pe aceasta, deschidem managerul de conexiuni, unde putem adăuga plăcuţa noastră, pe care o identificăm după IP. Odată ce am înregistrat dispozitivul, ar trebui să avem în fereastra activă ceva similar figurii următoare:
Acum putem instala pe Raspberry PI aplicaţia pe care am creat-o intr-o secţiune anterioară. Avem la dispoziţie câteva modalităţi pentru a face aceasta, una dintre ele fiind cu ajutorul utilitarului Device Selector, care este la dispoziţia noastră, bineînţeles, datorită faptului că am instalat SDK-ul. Deschizând această aplicaţie, observăm o listă cu toate dispozitivele instalate la momentul curent. Predefinit, avem la dispoziţie trei dispozitive emulate: EmbeddedDevice1, EmbeddedDevice2 şi QualcommIoEDevice. Alături de acestea, putem vedea plăcuţa Raspberry PI, pe care tocmai am înregistrat-o, cu numele EmbeddedExternalDevice1. Dorim să rulăm aplicaţia Hello pe acest dispozitiv, aşa că facem click-dreapta şi alegem Run JAR or JAD..., după cum este ilustrat şi în figura următoare:
Alegând de pe disk fişierul Hello.jad
cu ajutorul ferestrei de tip Open care a apărut, platforma lansează în execuţie managerul de aplicaţii, care instalează pachetul nostru software pe plăcuţă, lucru pe care îl putem vedea în următoarea captură de ecran:
Faptul că aplicaţia noastră Java ME Embedded 8 rulează într-adevăr pe dispozitiv ni-l demonstrează consola PuTTY, unde putem vedea output-ul pornirii şi opririi aplicaţiei:
Observăm faptul că în captura de ecran anterioară este listat şi mesajul care trebuie afişat la distrugerea aplicaţiei. Aceasta pentru că înainte de a face captura am apăsat butonul Remove, prezent în interfaţa aplicaţiei de management.
Aşadar, oricare ar fi modalitatea aleasă pentru a rula aplicaţii Java ME Embedded 8 fie pe dispozitive, fie într-un emulator, acesta este un proces relativ facil. Mai există o cale de a rula aplicaţii embedded pe dispozitive, cu ajutorul liniei de comandă AMS, prin intermediul utilitarului Developer Agent, însă această metodă este în fază de concept în această versiune a platformei.
Pe parcursul acestui articol am urmărit paşii creării, instalării şi rulării unei aplicaţii minimale, efectuând manual fiecare sarcină. Totuşi, platforma ne pune la dispoziţie o serie de unelte care vin în întâmpinarea nevoilor dezvoltatorilor şi ţintesc sporirea productivităţii acestora. Într-un articol viitor ne propunem să prezentăm procesul dintr-o altă perspectivă, automatizat cu ajutorul acestor unelte.
Concluzii
Dezvoltarea aplicaţiilor Java ME Embedded 8 poate fi un proces interesant şi distractiv, dar uneori dificil şi frustrant. Din păcate, materialele de studiu dedicate Java ME Embedded 8 sunt puţine. Până în momentul de faţă există o singură carte publicată care abordează subiectul dezvoltării aplicaţiilor Java ME Embedded 8. De asemenea, majoritatea articolelor existente pe această temă au o abordare generală, prezentând în linii mari trăsăturile acestei noi platforme. Deocamdată, thread-urile dedicate pe forumuri sunt relativ puţine, însă putem observa interesul din ce în ce mai mare al utilizatorilor, dornici să înveţe cum să folosească noua versiune. Cele mai consistente resurse pe care le avem la dispoziţie sunt ghidurile oficiale compilate de către Oracle, care pot fi descărcate de pe site-ul oficial al platformei.
Tuesday, January 20, 2015
Procesoare de șabloane pentru dezvoltare web în Java
Spring MVC şi procesoarele de şabloane
Apache Velocity
Velocity Template Language
#set( $magazineUrl = "http://www.todaysoftmag.com/" )
Integrarea cu Spring MVC
Apoi, declarăm un view resolver, care primește mai multe proprietăți. Clasa care va determina tipul acestui bean trebuie să implementeze interfața ViewResolver și are ca principal rol găsirea view-urilor după nume. Cea mai interesantă proprietate a acestui bean este layoutUrl. Aceasta reprezintă numele șablonului care va stabili layout-ul general:
De asemenea, Velocity are capacitatea de a face caching șabloanelor folosite, lucru specificat prin proprietatea cache.
Avantaje și dezavantaje
FreeMarker
FreeMarker Template Language
<#assign magazineUrl = "http://www.todaysoftmag.com/">
Integrarea cu Spring MVC
/spring.ftl as spring
<#include "header.ftl" />
Products
<#list products as product>
- ${product.name}
<#include "footer.ftl" />
Avantaje și dezavantaje
Thymeleaf
Standard Dialect și SpringStandard Dialect
Today Software Magazine
Integrarea cu Spring MVC
Avantaje și dezavantaje
Rythm
Sintaxa procesorului de șabloane
@for (product: products) {
@product.getName()
}
@args java.util.List products
Integrarea cu Spring MVC
Avantaje și dezavantaje
Performanțe
- Velocity: 3.8 secunde,
- FreeMarker: 4.8 secunde,
- Thymeleaf: 43.2 secunde,
- Rythm: 3 secunde.
Concluzii
Integrarea datelor între sisteme cu Talend Open Studio
Aşa cum menţiona Jonathan Bowen în cartea sa, „Getting Started with Talend Open Studio for Data Integration”, de îndată ce a apărut cel de-al doilea calculator, integrarea sistemelor a devenit o parte esenţială a muncii echipelor IT.
Un overview al mediului Talend Open Studio
Talend Open Studio este relativ uşor de folosit, este o modalitate rapidă de a modela scenarii de integrare, de cele mai multe ori reducând timpul de implementare de la săptămâni sau luni, la zile sau chiar ore, în funcţie de complexitatea proiectului. Totuşi, trebuie să avertizăm cititorii că, asemeni multor altor domenii, dacă din cauza excesului de zel sau a unui design nepotrivit facem overengineering, riscăm să obţinem o soluţie complexă, greu de înţeles pentru alţi utilizatori sau chiar ineficientă. Există şi aici necesitatea respectării unor bune practici, care să asigure calitatea soluţiei noastre.
Scenarii de utilizare
Transfer între baze de date: Atunci când sunt create sisteme noi sau cele existente sunt actualizate, este nevoie ca datele să fie migrate într-o nouă bază de date. Aceasta poate să aibă aceeași schemă sau una diferită, iar Talend Open Studio ne oferă conectorii și acțiunile necesare acestui proces.
Schimb de fișiere: Sarcinile de integrare pot necesita transferuri de date în cantități mari. Acest lucru se realizează adesea prin intermediul fișierelor. Un exemplu de astfel de fișier este clasicul CSV (comma separated values). De asemenea, este posibil ca sistemul care primește fișierul de transfer să aibă nevoie de date într-un alt format. Și acest caz este acoperit de către Studio, fiindcă ne dă posibilitatea să definim procese care efectuează transformări asupra datelor transferate. În plus, avem la dispoziție capabilități de management al fișierelor, prin operații cum ar fi transferul prin FTP sau arhivarea.
Sincronizare: Sistemele care colaborează nu sunt conectate întotdeauna la același data repository, ceea ce înseamnă că anumite informații pot fi duplicate într-un ecosistem. În consecință, avem nevoie să ne asigurăm că acestea sunt sincronizate periodic. Acesta este cazul datelor despre clienții unei companii, care pot fi prezente, spre exemplu, în sistemul de finanțe, cel de distribuție sau în platforma CRM. Talend Open Studio poate fi folosit pentru a realiza sincronizarea sistemelor, cu ajutorul unor job-uri care automatizează procesul.
ETL: Acesta este un acronim pentru Extract, Transform, Load, termeni care descriu un proces de bază pentru sistemele data warehouse. Un astfel de proces extrage date din sisteme operaționale, le transformă aplicând reguli sau funcții, iar apoi le încarcă în data warehouse. Din nou, Talend Open Studio ne face viaţa mai uşoară, ajutându-ne substanţial la implementarea acestui tip de proces.
Exemplu
În partea stângă avem o componentă de tip tFileInputXML, iar în partea dreaptă o componentă de tip tFileOutputDelimited. Acestea sunt conectate printr-un conector Main. Înainte de a trage componenta de intrare în designer am definit un obiect metadata, căruia i-am asociat un fișier XML. Studio-ul a detectat automat schema documentului și ne-a dat posibilitatea să selectăm ce noduri să fie transferate către output. Prin intermediul conectorului Main, Talend a transferat către fișierul de ieșire exact structura pe care am definit-o, fără ca noi să scriem vreo linie de cod. Tot ce a trebuit să configurăm în componenta de ieșire a fost calea și numele fișierului CSV.