Diamond Powder for NetBeans

segunda-feira, 23 de março de 2009

Last year, i have created a NetBeans plugin to an interesting framework, called Diamond Powder, it was developed by a friend of mine, Renato Bellia .
To explain what Diamond Powder is, i´ve extracted a briefly introduction from his blog,

What is it ?

It's a Java ME framework to quickly build data collector forms. Further, it is able to manage the persistence of collected data into RMS records.

Data Collector ?

It is about user input.

Suppose you develop a MIDP application that helps car drivers to maintain records about fuel consume in his/her car: The driver stops by at the gas station and gets his mobile device to take note about odometer value, supplied fuel amount , price of fuel, gas station name, and the current date. Later on the driver needs to recover such data. This is a data collector, and Diamond Powder can help you to do so.

Your MIDP application could go further, doing some math with such data, plotting charts, sending it over the internet and the like, but this is up to you.

How does it work ?

Read this step-by-step and the glossary bellow:
  1. Define a Schema
  2. Create a Collector suppling with a display, a schema and a flow name
  3. Add regular LCDUI commands to the collector
    1. at least an OK Command, and a BACK Command
    2. other Commands can be provided
  4. Swicht the MIDlet display to the Collector
  5. At the end of Colletor´s job you may persist collected data with a StorageManager.
Glossary:

term

definition

Schema

A Hashtable that describes the data collector fields, and its organization.

A schema contains a name, a version number, and at least one Flow.

Flow

A sequence pages that the application user can browse through.

Page

A top level field container, to display to the user, as a data collector step.

Can be reused among flows.

Can be associated with a help screen.

Field

Regular LCDUI items: StringItem, TextField, DateField, ChoiceGroup

+ Filter : a special component to deal with huge ChoiceGroups

Collector

A collector manages the display of a Flow of Pages, and gathers all user input.

It extends LCDUI Form.

StorageManager

It is the Diamond Powder persistence component.

It helps to preserve user input data gathered by a Collector into RMS records.

It also helps to restore a Collector with previously saved RMS records.


NetBeans Plugin

Now, it´s time to talk about my collaboration in this project, if you get a look at this framework, you will realize that it simplifies a lot the development of a data collector on java me.

On the other hand, the heart of the framework, the "Schema", as stated in the glossary, it is a Hashtable that describes the data collector fields, flow, name and version of your application. Let´s see on listing 1, a snippet of the schema code from the hello world example, extracted from diamond powder blog.
public Hashtable getSchema() {
Hashtable schema = new Hashtable();

//schema declaration: name;version
schema.put("schema", "fuelControl;2");
//flow declaration: page1;page2;...
schema.put("flow.basicRecord", "numbers;extra");
//page declaration: title;field1;field2;...
schema.put("page.numbers", "The Numbers;date;odometer;fuelAmount;fuelPrice");
schema.put("page.extra", "Gas Station;gasStationName;gasStationBrand");
//help for page: help text
schema.put("help.numbers", "Enter the odometer mark, the supplied fuel amount and the fuel price");
schema.put("help.extra", "Enter the gas station name and brand");

//text field declaration: field type;label;size;mask
schema.put("field.odometer","textfield;odometer;6;numeric");
schema.put("field.fuelAmount","textfield;fuel amount;5;decimal");
schema.put("field.fuelPrice","textfield;fuel price;5;decimal");
// dateField;label;{date|time|date_time}"
schema.put("field.date","datefield;when;date_time");
schema.put("field.gasStationName","textfield;gas station;40;initial_caps_word");

//choice gorup declaration: field type;label;list model;mode
schema.put("field.gasStationBrand",
"choicegroup;brand;allBrands;exclusive");
//list model declaration: value1;label1;value2;label2;...
schema.put("listmodel.allBrands",
"999;undefined;1;Atlantic;2;Chevron;3;Esso;4;Texaco");

return schema;
}

Listing 1: Schema method example.

As you can see in the example, it can be a problem if you want a more complex application, as your schema evolves it can became inconvenient and error-prone, as you add more fields, or even new pages.
Diamond Powder for NetBeans it´s a plugin, that comes to fill this gap, and helps to create a Schema code, avoiding spelling error in variable names. Now let´s see how to install it.

Download and Installation

To install Diamond Powder for NetBeans, you can visit plugin Portal on NetBeans website, or you can download it directly from java.net site project. The easiest way to download it, is directly from NetBeans,
To install DP from NetBeans, select "Tools > Plugins", open the Setting category and click Add button, in Name field enter "Diamond Powder", and URL enter "https://diamond-powder.dev.java.net/files/documents/9072/108868/updates.xml", and click OK to create a new Update Center source.

Figure 1: Configuration of Update Centers.

Now, to install the plugin, select "Available Plugins" category and install the Diamond Powder plugin, during instalation it will generate a warning, stating that the module is not signed, but it´s ok..

Generating the Schema
There are two ways to create a schema, creating a new file, selecting "New File > MIDP > Diamond Powder - Schema Generator" from a Java ME Project, or you can invoke Diamond Powder wizard from the source code editor, selecting menu popup "Refactor > Diamond Powder - Schema Generator"..

Figure 2: Creating a new Schema file

Start by creating a Diamond Powder Schema file, as shown in Figure 3. Let´s create the schema defined in listing 1, so name the schema "fuelControl", set version 2 and click next to go the panel shown in Figure 4:
Figure 3: Naming the Schema file.

Here we can define our application fields, , let´s define the odometer, fuelAmount, fuelPrice, date, gasStationName and gasStationBrand. Note, that for gastStationBrand is a choicegroup field, to define our list values, click the Editor button, and create the list model defined in Figure 5.

Figure 4: Fields Configuration

Enter "allBrands" to List Model and click New Button, to include a value to the allBrands list model, select it in the list and click Add button, to cancel an item just click cancel, and to finish it, close the window.

Figure 5: List Model editor.

In the Pages Configuration step, let´s create our pages number and extra adding the related fields and entering the properly information like page name, title and help, like Figure 6.

Figure 6: Pages Configuration.


Click Next to our final step, now we going to define the sequence pages that our application will browse through. Enter basicRecord for Flow Name, and add the two pages created earlier (Figure 7).
Check the "Save to File?" option and click browser, this option will persist all fields created to an user defined file.

Figure 7: Flow Definition.

Note: You can retrieve these values, loading the file in the Fields Configuration step (see Figure 4).

Click Finish to generate the schema class. After generation, you should see the Java class, Schema, in the hello.schema package.

References:
Diamond Powder (java.net): https://diamond-powder.dev.java.net/
Diamond Powder Blog: http://diamond-powder.blogspot.com/
NetBeans Plugin: http://plugins.netbeans.org/PluginPortal/faces/PluginDetailPage.jsp?pluginid=17094
NetBeans: http://www.netbeans.org/

Try it !!

[Profissão Java] Como me dei bem com Java

quinta-feira, 19 de março de 2009


No dia 07/03 ocorreu nas instalações da Faculdade Anhembi Morumbi, o evento Profissão Java, promovido pela Globalcode. Tive o prazer de participar deste encontro, ver grandes amigos, e contar um pouco da minha trajetória ..

Como sempre acontece nos eventos da Globalcode, o clima estava super bacana, a platéia estava bem animada, o pessoal bem interessado, percebi que o público, era um público jovem, que estão buscando conhecimento, e isto é muito importante.

Quando fui convidado para participar do quadro "Como me dei bem com Java", a primeira coisa que pensei foi "Puxa, mas será que me dei bem com Java ?", pois logo vem a minha mente os problemas cotidianos, e tal,.. não sei se me dei bem, mas graças a Deus consegui até o presente momento atingir minhas metas e objetivos profissionais. E junto com o crescimento profissional, vem as responsabilidades, e com certeza, para se dar bem em alguma coisa, é preciso ter maturidade e gostar muito do que faz, e nada melhor do que a experiência para alcançar a maturidade.

É assim que aconteceu com as metodologias de desenvolvimento, é assim que aconteceu com as linguagens de programação, é assim que aconteceu com as grandes empresas, com os grandes projetos, enfim, é assim que acontece na nossa vida..


Quando estamos iniciando a nossa carreira, são muitas as dificuldades que encontramos, a principio elas são técnicas, depois percebemos que conforme o tempo passa, não basta apenas o técnico, temos que ter outras habilidades para nos dar bem em uma empresa. Como:

  • Foco.
  • Entendimento do negócio.
  • Domínio das ferramentas.
  • Bom relacionamento com o cliente, ou entender o cliente (tudo bem, concordo que isto é uma arte).
  • Comprometimento.
  • Responsabilidade.
  • Ser auto-didata.

Na minha palestra, procurei dar várias dicas e orientações para os que estão iniciando e para os mais experientes que que querem progredir seus conhecimentos.

Nos slides abaixo mostro os passos necessários, onde deixei grandes dicas de livros, sites, feeds, etc... tipo um roadmap para o sucesso.



Basicamente, os passos que listei seguem a seguinte ordem, não necessariamente desse jeito, para a apresentação preferi fazer algo do tipo "Como você se dar bem com Java" ;). Então vamos lá:

1º Passo: Treinamentos

Para quem está começando, é super importante fazer treinamentos, por mais auto didata que você seja, o desafio é grande, e a curva se torna menor. Talvez compense mais você pagar por um bom treinamento (no meu caso fiz as 3 academias da Globalcode), do que tentar aprender tudo sozinho.

2º Passo: Certificações

Após fazer os treinamentos, se estes forem focados no core java (Java SE), e o desejo de ingressar no mercado de trabalho é grande, então, recomendo as certificações, invista em certificações, pois o investimento não é alto quanto uma faculdade e o retorno é rápido, é desejável que o estudante esteja cursando nível superior.

3º Passo: Livros Essenciais

Tendo conhecimento em Java e certicação, que tal aumentar o seu conhecimento? Segue uma lista de livros básicos em qualquer acervo de um programador.
  • Effective Java 2º Edition - Esse é um clássico, todo desenvolvedor tem a obrigação de ler este livro.
  • Java Concurrency in Practice - Com o advento de super processadores multi core, é conhecimento em Threads é um grande diferencial.
  • Todos os livros de Padrões de Projeto.
  • Patterns of Enterprise Application Architecture - Clássico da arquitetura de software, pelo tio Fowler, já ouviu falar de Domain Model, Active Record ?
  • Design Patterns - Elements of reusable OO Software - GoF, este não precisa de maiores comentários, porém, os exemplos estão em C++, se não for sua praia ou não quiser se arriscar, tente Head First - Design Patterns.
  • Core J2EE Patterns - Tá certo que grande parte dos padrões perdeu o sentido, pois muitos destes padrões os frameworks de hoje em dia já resolvem, mas ainda assim é uma ótima leitura.
  • Agile Software Development - Este livro também é um pouco antigo, mas é uma ótima referência, pois Robert C. Martin propõe o uso dos padrões em um ambiente ágil.
  • The Pragmatic Programmer - Ótimas dicas, para se tornar um ótimo programador.

4º Passo: Eventos:

Sempre que tiver a oportunidade de ir a algum evento, vá !!! Mesmo que te chamem de nerd, nos eventos você conhece novas pessoas, que passam ou passaram pelos mesmos problemas que você.
É uma chance de fazer network, trocar experiências, e conhecer novas tecnologias e tendências.

5º Passo: Por dentro das últimas.

Acesse os sites "quentes" de tecnologia, e seja o primeiro a comentar sobre novas tecnologias na sua turma.

InfoQ - http://www.infoq.com/
The Server Side - http://www.theserverside.com/
DZone Java - http://www.dzone.com/
Java Sun - http://java.sun.com/
java.net - http://www.java.net/
NetFeijão Brazil - http://netfeijao.blogspot.com/

6º Passo: Open Source.

Esse é o mais importante, pois é aqui que você vai colocar em prática tudo o que você aprendeu.
Participe de projetos open, entre no site java.net existem projetos de grande expressão, inclusive o Open JDK, GlassFish, e diversos projetos menores, além de aprender com os melhores desenvolvedores do mercado, é uma ótima chance de fazer Networking.


7º Outras dicas: Conhece outras áreas da sua empresa

Aprenda um pouco a área de infra-estrutura da sua empresa, as vezes ao falarmos de projeto, somente pensamos no bitcode, lembre-se que para suportar tudo isto, existem servidores, load balancing, memória, disco, cpu, etc. .. procure conhecer um pouco áreas como:
  • Rede
  • Telecomunicações
  • Sistemas Operacionais
  • Banco de Dados
  • Segurança
Lembre-se que por trás de um grande sistema, existe uma grande infra-estrutura.


8º Outras dicas 2: Super Feeds.

Feeds, Se você conhece Google Reader, ótimo, senão, conheça, e adicione os seguintes feeds na sua lista.


Deixo aqui os meus parabéns para a equipe da Globalcode, que vem trabalhando à anos com o projeto Open 4 Education, realizando eventos de altíssima qualidade, mini cursos, treinamentos, projetos, e o melhor, é tudo de GRAÇA!!

Bom, acho que é isso aí, com tudo isso dá para ganhar algumas horinhas..

Diversão garantida !!!!