SOUJava

RESTful Web Services e a API JAX-RS na revista Mundo Java, nº 35

Terça-feira, 9 de Junho de 2009


No mês de Maio foi publicado mais um artigo meu na revista Mundo Java, sobre a REST desde o conceito proposto pelo Dr. Roy Fielding até a implementação JAX-RS em Java, com diversos exemplos práticos no Jersey.

Graças a Deus tenho recebido um bom feedback das pessoas, no artigo procurei demonstrar as tecnologias por trás de um serviço REST, onde fiz primeiro uma introdução ao HTTP, para auxiliar aos leitores que estão iniciando a compreender a dinâmica do serviço.

Ainda no artigo, apresentei um artigo bem completo sobre a API JAX-RS, e mostrando na prática com diversos códigos como se trabalhar com os recursos, tratamento de exceções, extração de parâmetros e valores da URI na requisição.
Como trabalhar o retorno dos métodos ao Cliente, dando uma visão geral dos Providers.

E por fim, apresentei um guia de ferramentas para teste, e como consumir serviços REST, utilizando a API JAXB para conversão dos dados em objetos, uso prático da biblioteca Jakarta Commons HTTP Client, o uso de bibliotecas JavaScript como o jQuery, e o uso de JavaScript / AJAX..

Sem dúvida, uma ótima pedida para quem esta iniciando o desenvolvimento de serviços REST.

Além do artigo, tem vários destaques na revista deste mês, conforme segue:

Projeto da Certificação SCEA 5
Um exemplo fictício de projeto para a segunda fase da cobiçada certificação de arquiteto Java EE.
Autores: Márcio Varchawski

Conhecendo a Plataforma JavaFX Mobile
Através deste artigo crie e compreenda seus primeiros aplicativos utilizando a plataforma Java- FX Mobile.
Autores: Ricardo da Silva Ogliari

Mundo OO: Padrões de Projeto com Generics
Aprenda como tirar vantagem de Generics na implementação de Padrões de Projeto em suas aplicações Java.
Autor: Alexandre Gazola, Alex Marques Campos

RESTful Web Services e a API JAX-RS
Conheça o poder dos serviços REST e a implementação de Referência da Sun, o Jersey.
Autor: Wagner Roberto dos Santos

ProfessorJ: Conhecendo os parâmetros de configuração mais utilizados da JVM
Aprenda como configurar a Máquina Virtual JAVA para evitar os indesejados estouros de memória.
Autores: Rodrigo de Azevedo

Tendências em Foco: Adotando o Open Source no Ensino da Computação
Entenda a estratégia de adoção do Open Source no ensino da computação e programação Java.
Autor: Cezar Taurion

SOA na Prática: Governança em SOA - Versionamento de Serviços
Aprendendo a lidar com questões de versionamento de serviços dentro de uma arquitetura SOA.
Autor: Ricardo Ferreira

Made in Brazil: JColtrane - Parser XML com SAX + Anotações
Conheça essa alternativa nacional para processesar arquivos XML sem comprometer memória e a clareza do código.
Autor: Renzo Nuccitelli, Eduardo Guerra










Diversão Garantida !!!

Web Services WS-* vs REST.

Quinta-feira, 14 de Maio de 2009

Muitos sites, blogs e fóruns têm colocado seus pontos de vista em relação ao uso de web services REST e SOAP, gerando muitas vezes calorosas discussões.

Na verdade, não existe uma disputa entre eles, pois cada um possui uma proposta bem diferente. Vários estilos diferentes de aplicações tem sido utilizadas para integrar sistemas de informação corporativos, entre as opções, existem os banco de dados compartilhados, transferência de arquivos (EDI ), remote procedure call (RPC), ou troca de mensagens assíncronas via uma sistema de mensageria. Ao fazermos uma comparação entre REST e WS-* (pronucia-se ws-star), precisamos fazer uma comparação quantitativa baseado em princípios arquiteturais que envolvem questões relacionadas a cenário, tecnologia, métodos, formato dos dados trafegados, segurança, transação, entre outros fatores da sua aplicação. Devemos lembrar que estas tecnologias surgiram para suprir estes problemas recorrentes na maioria dos projetos de software, que é a interoperabilidade.

Foi quando começaram a surgir esforços da comunidade de buscar dos grandes players interoperabilidade entre suas plataformas, aplicações, e linguagens de programação. Foi quando surgiram as especificações WS-*, que atendem tanto ao estilo RPC quanto mensageria. A especificação SOAP não define como deve ser um message header, ou elementos do corpo do envelope, dessa maneira podemos ter aplicações que customizem o tipo de header que ela aceita, e o tipo de informação que deve estar vinculado ao body para uma operação em particular, sem falar que algumas dessas informações podem ser compartilhadas por diferentes aplicações, sem falar em questões de segurança, roteamento de mensagens, entre outros fatores.

As especificações WS-* definem padrões para mensagem, troca de metadados, segurança, entre outros. No mundo Java, para implementar este mundo de especificações, foi aberto o projeto WSIT (antigo projeto Tango) como parte do projeto Metro, que por sua vez faz parte do projeto Glassfish, veja a Figura 01 os padrões (em verde) utilizado no projeto WSIT.

Figura 1: Padrões de Web Services utilizados no WSIT.

É claro que para a maioria dos projetos, um web service simples resolveria, mas se começarmos a entrar mais a fundo no mundo orientado a serviços, começa a surgir a necessidade de integração com diversos sistemas, naturalmente teremos que utilizar estes padrões. É somente olhar para a figura 01 que já causa calafrios em muitos desenvolvedores, mesmo com suporte eficiente nos IDEs existentes.

Com isto, vemos claramente que a arquitetura de web services baseadas nas especificações WS-* é muito bem definida, com regras para trocas de dados, segurança, o que por conta de seu excesso de padrões acabou se tornando uma solução muito complexa.

Mesmo com toda a complexidade, serviços WS-* têm tomado cada vez mais espaço no mercado, graças aos projetos SOA que tem adotado largamente serviços WS-* por sua independência e transparência de protocolo. Por outro lado, REST é muito mais simples, como uma resposta para todos estes padrões e especificações, para utilizar REST basta ter um conhecimento razoável sobre HTTP e seus métodos.

Enquanto web services WS-* são orientados a atividade/serviço, serviços REST são orientados a recurso. Quando falamos em desenvolver serviços SOAP, estamos falando em criar APIs, contratos (WSDL), onde o WSDL descreve os detalhes de implementação, como as operações e os tipos de dados trafegados. REST por outro lado, conforme explicado no inicio diz respeito a utilizar o protocolo HTTP para manipular o estado de um recurso. Fazendo uma analogia, podemos dizer que assim como a linguagem de manipulação de dados (DML) do SQL é utilizada para manipular as informações de um banco de dados transacional, REST utiliza os métodos (verbos) do protocolo HTTP para manipular o estado de uma informação. Com estes verbos, podemos fazer praticamente tudo o que quisermos com os dados, independente se usarmos SQL ou HTTP.
Ao mapear os métodos HTTP (POST, DELETE, GET E PUT) com operações DML de um banco de dados temos a seguinte estrutura, conforme ilustra a tabela 01.

Métodos HTTP / Operações CRUD
GET -> SELECT
POST -> INSERT, UPDATE
PUT -> INSERT, UPDATE
DELETE ->DELETE

Tabela 01. Associação dos métodos HTTP com operações CRUD.
Na tabela podemos notar que podemos ter mais de uma operação relacionada a um verbo HTTP, como por exemplo, o método POST, que pode ser utilizado para diversas ações. O método PUT nos dá a possibilidade de criar um novo recurso, ou substituir por outro mais atualizado. Apesar dos diversos tutoriais e exemplos que encontramos na internet sobre REST que envolvem operações CRUD, isso não quer dizer que temos que ficar presos somente a estes tipos de operações. Por conta de sua própria natureza, REST é mais fácil e funciona muito bem com CRUDs, mas podemos em nosso design criar serviços REST. Web Services RESTful.



Pontos Positivos
Pontos Negativos
  • Linguagem e plataforma agnóstica.
  • Simplicidade, interface imutável.
  • Interação assíncrona, não possui estado.
  • Facilidade de adoção, pois não requer uma grande infra-estrutura, muito menos um middleware para WS-* ou camada intermediária adicional.
  • Utiliza a própria web como meio de transporte, sendo assim uma carga baixa para a rede.
  • Utilizada por grande parte das aplicações Web 2.0. (Google, Flickr, Amazon, etc..). Portanto, ótimo para mashups.
  • Curva de aprendizagem baixa.

  • Faltam padrões.
  • Falta de segurança (dados sigilosos não deveriam ser enviados como parâmetros na URI).
  • Não é indicado para trafegar grandes volumes de parâmetros via URI, no caso de PUT/POST para inclusão de dados, por exemplo.
  • Em muitas empresas apenas os métodos GET e POST do HTTP são liberados em proxies e firewalls. Dentro desta limitação, muitos preferem utilizar os métodos GET para requisições de consulta e POST para todo o resto.
  • Não há mecanismos de transação (Do it yourself)
  • Não existe um padrão como UDDI para service discovery.

Tabela 02: Pontos positivos e negativos de REST

SOAP


Pontos Positivos
Pontos Negativos


  • Diversas ferramentas de desenvolvimento.
  • Tipagem forte e um vocabulário bem definido.
  • Quando utilizado sobre HTTP, dificilmente é bloqueado por proxies e firewalls.
  • Permite o uso de diferentes tipos de protocolos.
  • Plataforma independente.
  • Linguagem independente.
  • Diversos padrões.
  • Complexidade dos padrões.
  • Performance.
  • Mensagens podem ficar muito extensas, por serem codificadas com XML
Tabela 03: Pontos positivos e negativos com SOAP.

Fazendo esta pequena análise, chegamos á conclusão de que ambas as soluções são úteis, e a utilização de cada uma depende do contexto em que será aplicada.

Referências (Links):

[Parley] A Little REST and Relaxation: http://tinyurl.com/cm33t2
Estilo SOAP vs Estilo REST: http://www.ibm.com/developerworks/webservices/library/ws-restvsoap/
Descrevendo Serviços REST com WSDL 2.0: http://www.ibm.com/developerworks/webservices/library/ws-restwsdl/
Bruno Pereira: http://brunopereira.org/2008/05/14/precisamos-de-um-descritor-de-servicos-rest/

XP - Extreme Programming - Embrace Change Summary

Sexta-feira, 17 de Abril de 2009

As you may already know, XP is a lightweight methodology created by Kent Beck, for small-to-medium-sized teams developing software in the face of vague or rapidly changing requirements.

To help the understand of the basis, i'm providing a summary and a mind map of the book eXtreme Programming - Embrace Change, by Kent Beck, as you can see below. Enjoy it!

Figure 1: Extreme Programming Mind Map

XP - Embrace Change is a small book, quite fast and easy to read, it took me only two days to finish it.
As Kent Beck said "XP is a philosophy of software development based on the values of communication, feedback, simplicity, courage, and respect."

The Basic Problem

Software development fails to deliver, and fails to deliver value. This failure behind software development has a huge economic and human impact. So it was the reason to find ways to develop software.

First recognize risks and try to address it applying some XP practices, like short release cycles to limit scope, one to four week iterations of features requests from customer, it will give you a fine-grained feedback about progress.
Economics of Software Development

Create a strategy for maximizing the economic value of the project, spending less, earning more (depends strategy), spending later and earning sooner, increase probability that the project will stay alive.

In projects we have to control five variables: cost, time, quality and scope, like PMBoK scope is the best way to achieve control. KEEP FOCUS ON SCOPE.
Cost of Change

The cost of changing a program rises exponentially over time. Figura 2 shows that the longer it takes you to find a defect then on average the more expensive it is to address.

Figure 2 - Cost of Change [Scott W. Ambler, 2006]

To overtake problems related to cost of change, after years of production some factors became clear like a simple design, intensive use of automated tests, refactoring code and design, incremental design, continuous integration.
Learning to drive.

Everything in software changes. requirements, design, business, technology, team members change. The problem
isn't change, the problem, rather, is the inability to cope with change when it comes.

Learn to control the development of software by making many small adjustments, not by making a few large adjustments, kind of like driving a car.


The driver of a software project is the customer. If the software doesn't do what they want it to do,
you have failed. Of course, they don't know exactly what the software should do. That's why
software development is like steering, not like getting the car pointed straight down the road. Our
job as programmers is to give the customer a steering wheel and give them feedback about
exactly where we are on the road.

XP Values

  • Communication: Ensured an effective comunication of your team and your organization core values.
  • Simplicity: Search for simple solutions.
  • Feedback: Work with your customers at your side, seat the team together.
  • Courage: Throw code possible whenever itŽs possible (keeping your code simple). Courage to change, to assume your faults.

PUT ALL THESE VALUES IN PRACTICE.

The Four Basic Activities

  • Coding: Code is the one artifact that development absolutely cannot live without, it gives you a chance to communicate clearly and concisely.
  • Testing: Writing every test you can imagine.
  • Listening: Learn to listen your customer, he knows about the business not you.
  • Designing: Good design ensures that every piece of logic in the system has one and only one home.

Figure 3 - XP Overview.
The Practices

Primary Practices
------------------------
-Integration
  • Ten minute build: Automatically build the whole system and run all of the tests in ten minutes.
  • Continuous integration: Integrate and test changes after no more than a couple of hours.
-Whole Team: Create cross-functional teams. Create a team with all the skills necessary for the project to succeed.
-Programming
  • Test-First Programming: [TDD] Test -> Code -> Refactor
  • Incremental Design: Keep the design investment in proportion to the needs of the system.
  • Pair Programming: Help to:
  1. Keep each other on task.
  2. Brainstorm refinements to the system.
  3. Clarify ideas.
  4. Lower frustration.
  5. Hold each other accountable

-Energized Work: Take care and respect yourself.

-Planning
  • Weekly Cycle: Plan work a week at a time, have meeting at the beginning of every week. During meetings, review progress, ask your customer to pick some stories to implement and break stories into tasks.
  • Monthly Cycle: Plan work quarter at a time, Identify bottlenecks, Initiate repairs, Plan the theme, pick the stories.
  • Stories: Write the stories on index cards and put them on a wall.
  • Slack: Include some minor tasks that can be dropped if you get behind in your plan.

The Planning Game:
  1. List the items of work that may need to be done.
  2. Estimate the items.
  3. Set a budget for the planning cycle.
  4. Agree on the work that needs to be done within the budget. As you negotiate, don't change the estimates or the budget.

Corollary Practices
--------------------------


-Business Negociated Scope Contract: Try a sequence of short contracts instead of one long one.
  • Pay-per-use: Charge for every time the system is used.
  • Daily Deployment: Put new software into production every night.
-Incremental Deployment: Find a little piece of functionality and deploy it.
-Programming
  • Single Code Base: Keep only one code stream.
  • Code & Tests: Mantain Code and tests as permanent artifacts.
  • Shared Code: Anyone on the team can improve any part of the system at any time.
-Root Cause Analysis: Eliminate defect and its cause. To find the Root cause, apply Taiichi Ohno's exercise, called "Five Whys":
  • Why did we miss this defect?
  • Why didn't we know?
  • Why isn't she part of the team?
  • Why doesn't anyone else know how?
  • Why isn't it a management priority?

-Real Customer Involvement: Put your customer at your side.
-Team
  • Team Continuity: Keep effective teams together.
  • Shrinking Teams: Lean Thinking, reduce the size.





If you like it, buy the book here..

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 !!!!

Yahoo! Hack Day 2008 Brasil - Bridging The Gap

Terça-feira, 11 de Novembro de 2008

In this weekend, we have celebrated the first Yahoo! Open Hack in Brazil, it was a great party in fact, the lunch was great, people were taking there time and having fun !!

I can consider myself a luck guy, i was invited to join the Globalcode Team, with my friends Vinicius Senger, Yara Senger, Eder Magalhães, Rafael Nunes, Pedro Germano, and a couple of Globalcode classmates =) ..


Caption: NetBeans plugin presentation





We have divided the work into team groups and as a result we have produced FOUR incredible hacks, yes man, i said four great hacks.. See below:
---------------------------------------------

  1. NetBeans Plugin for Yahoo! Blueprint
  2. JSF Renderkit for Yahoo! Blueprint
  3. Mobile Planning Poker for distributed Teams
  4. Supercrud Mashup for Flickr








Caption: Eder presenting the Planning poker mobile



Obviously, my participation was related to the NetBeans plugin development =), it provides a template for Yahoo Blueprint Web Project, a sample application for Yahoo Blueprint, a JBlueprint librarie that encapsulates the Yahoo! Blueprint' API components (developed by Eder Magalhães), some Help Documents, an Update Center and the Developers Guide pdf file inside NetBeans.. =)




Caption: Award on "Bridging the Gap" Category

Our subject wasn't the prize only, our real intention was to build something useful for Java Developers, and make the work with Yahoo APIs easier with the NetBeans plugin and JSF Renderkit, we are planning open the code on java.net soon and attract new developers to this great platform. so stay tunned for more details !!!

Caption: Globalcode "Super" Team



Caption: Globalcode Team and some friends from São Carlos


Congratulations for all the winners. It’s really amazing to see these great and wonderful work .. you are the best !!

See more details at Yahoo! Developer Network blog by Chris Heilmann




Caption: NetBeans Plugin Presentation


One of the best moments, was the Puff Hacking Video,, see for yourself


Puff Hacking from fczuardi on Vimeo.


Cheers, and we see you again next year !!!!

Evento InfoQ Brasil

Domingo, 9 de Novembro de 2008

No dia 01/11/2008 rolou o evento de inauguração do Portal InfoQ Brasil, nas palavras do meu amigo Manoel Pimentel,

"Agora a comunidade Brasileira de desenvolvimento de software, possui um importante aliado de nível internacional, pois já está no ar, a versão Brasileira do portal InfoQ, que trata com maestria de assuntos como Java, .NET, Ruby, SOA, Agile e Arquitetura.

Com o nome de InfoQ Brasil, este projeto está sendo possível através da empresa Fratech It e com uma enorme participação da comunidade Brasileira, pois através de um mega projeto com equipes distribuídas, reunimos vários autores e editores do portal, com a meta de traduzir vários artigos, notícias e um importante livro sobre Scrum e XP para o português.

Como marco desse acontecimento histórico para o Brasil, no sábado passado, dia 01 de novembro de 2008, realizamos o InfoQ Launch Meeting (Encontro de Lançamento), no auditório da Faculdade Anhembi Morumbi em São Paulo(SP), com o importante patrocínio da Locaweb e do JCP (Java Community Process) e com o apoio da empresa Teamware, DeveloperWorks e claro, com uma grande participação da comunidade Brasileira.

O evento contou com dois palestrantes internacionais de peso, pois tivemos o Max Lanfranconi, Gerente de Marketing do JCP e Floyd Marinesco, CEO e fundador da InfoQ internacional.

Também tivemos ótimas palestras, feitas por grandes nomes de nossa comunidade nacional como Giovanni Bassi, Fábio Akita, Henry Conceição, Vinícius Senger, Alexandre Gomes, Felipe Rodrigues, Yara Senger, Victor Hugo, Rodrigo Yoshima, Hugo Corbucci, Wagner Santos e Manoel Pimentel, onde cada um deles, dentro de sua especialidade, falou sobre Java, .NET, Ruby, SOA, Agile e Arquitetura.

E no melhor estilo de uma QCon, tivemos dois grandes painéis, um sobre Plataformas distribuídas e outro sobre Agilidade no dia a dia, que fizeram com que todo o público participasse de maneira ativa de ótimas discussões sobre esses dois temas."

Na minha palestra falei sobre arquitetura, explicando as suas origens, e o papel do arquiteto nos dias de hoje, as palestras tiveram uma duração de 30 minutos (algumas passaram o tempo, claro =) , e alguém perguntou,
"Como falar de Arquitetura em 30 minutos ?", bom, para quem falou de EJB 3.1 e apresentou ainda uma DEMO em 5 minutos no Lightining Talk do Sun Tech Days 2008 (Foto ao lado), 30 minutos é luxo.. =)





Segue abaixo minha apresentação, o upload foi feito gentilmente pelo Manoel,



E algumas fotos..



O evento fui muito bom, encontrei os editores, amigos, conheci novas pessoas, tive o prazer de conhecer Felipe Rodrigues, da Fratech, o simpático Max Lanfranconi , gerente de marketing JCP e o próprio Floyd Marinescu =)..

Diversão Garantida !!!

Parabéns NetBeans !!!!

Terça-feira, 21 de Outubro de 2008


Como muitos já sabem o NetBeans está completando 10 anos de vida, e como homenagem, cantamos parabéns em grupo na época do Sun Tech Days.








Segue o mico, quer dizer o vídeo.


video

No vídeo gravado na churrascaria Jardineira Grill, estão presentes da esquerda para a direita, Renato Bellia e sua esposa, a esposa de um dos meus amigos, logo atrás dela eu e minha esposa, ao lado dela se encontra a minha grande amiga Janice Campbell, atrás dela, Jefferson Prestes e Michel Graciano, no centro Marcelo Castellani (de jaqueta preta), Mauricio "Maltron" Leal, atrás dele Vinicius Senger e Yara Senger, atrás deles, está Greg Sporar, e mais dois gringos da Sun, e logo após a esposa do Bruno com suas lindas filhas, atrás delas se encontra Henrique Meira e seu colega, e por último o JavaMan.

Fonte do Vídeo: http://www.netbeans.tv/on-the-road/Brazilian-Birthday-Song-400/


Outra dessa só daqui a 10 anos... =)

PARABÉNS NETBEANS !!!