domingo, 28 de fevereiro de 2010

Slidecast sobre Plataforma Spring e Novidades do Spring 3

Acabei de colocar no ar o slidecast (slides + áudio sincronizado) da apresentação realizada no Casual Class da Globalcode sobre a plataforma Spring.


Esta apresentação foi baseada na apresentação realizada pelo Arjen Poutsma da SpringSource no evento SpringOne 2GX em 2009. Os slides e o vídeo desta outra apresentação estão disponíveis no InfoQ: What's new in Spring 3.0?

By Spock
http://blog.spock.com.br/
http://twitter.spock.com.br/
http://www.springbrasil.com.br/

terça-feira, 23 de fevereiro de 2010

Quer aprender a programar e mora no ABC? Academia do Programador agora também na YaW!

É com muito prazer anunciamos que a partir de agora a YaW, unidade da Globalcode no ABC, passa a oferecer também a Academia do Programador, o treinamento ideal para quem deseja ingressar no promissor mercado de desenvolvimento de sistemas.

Você estudante e/ou profissional que reside ou trabalha em Santo André, São Bernardo, São Caetano, Diadema ou região que gosta ou tem afinidade com computadores, quer aprender a programar? Tem curiosidade em descobrir o que rola nos bastitores de um sistema?

Academia do Programador é a resposta para essas e outras perguntas, treinamento especialmente criado para ensinar lógica de programação, Introdução a Java e C++, banco de dados, infra-estrutura web e muito mais.

A primeira turma na YaW começa dia 12 de Abril, e pra essa turma temos uma promoção especial. Desconto de 20% no valor do curso para quem realizar a matricula até dia 26/02 (sexta-feira). A partir do dia 01/03 esse desconto decresce 1% a cada dia. Veja a tabela abaixo:

Data             Desconto
24 a 26/02          20%
01/03                  19%
02/03                  18%
...
10/03                  10%
...
15 a 20/03          5%

    Essa promoção dura até o dia 20 de Março! Não perca tempo e reserve sua matrícula.

    Academia do Programador é muito aprendizado com diversão! Já pensou em aprender a programar e ainda "brincar" com Robótica? Conhece o Program-Me? É um instrumento didático criado originalmente para a Academia do Programador que pode ser utilizado por qualquer pessoa que queira aprender sobre Robótica, Eletrônica, Automação Residencial, Tecnologia aplicada à arte e mil outras coisas.



    Veja mais detalhes sobre o Program-Me.





    Assista a primeira vídeo-aula com Program-Me.

    Aproveite e conheça um pouco mais da Unidade da Globalcode no Grande ABC, nessa fotos:


    Acesse nosso álbum e veja mais fotos.


    Para mais informações entre em contato pelo email contato@yaw.com.br ou pelo telefone (11) 2988-1540.

    []'s
    Eder Magalhães

    www.yaw.com.br
    twitter.com/youandwe
    twitter.com/edermag

    quarta-feira, 10 de fevereiro de 2010

    Gosta de informática e sonha ser programador Java um dia ?

    A Globalcode está procurando jovens que queiram ser programadores no futuro, para fazer parte de sua equipe de vendas e operacional, o grande diferencial é o planejamento para carreira de programador.

    O planejamento de cursos do portifólio da Globalcode: Academia do Programador, Academia Java, Academia Web, Robótica, Eletrônica, etc, será realizado periodicamente de acordo com o desempenho e interesse individual.

    Atenção: Este não é um estágio para trabalhar com Java, são duas vagas CLT administrativas para pessoas que queiram ser programadores no futuro.

    Perfil:
    • Conhecimentos de informática básica, saber lidar com pessoas e trabalhar em equipe.
    • Deve ter concluído o ensino médio, ter boa escrita, ser organizado, responsável, comprometido e dinâmico.
    • Interesse por computação, programação, internet, robótica, eletrônica,...
    Temos duas vagas para jovem-aprendiz abertas:

    1) Setor operacional
    No dia a dia
    • Controle de estoque e organização de arquivos
    • Preparação do Kit do curso ou carreira, com o material didático do aluno 
    • Suporte técnico em sala de aula
    • Contato com parceiros e fornecedores 
    • Atendimento a clientes pessoalmente, por e-mail e por telefone
    • Utilização do sistema de gestão da Globalcode para manutenção dos cadastros dos alunos

    2) Relacionamento com o cliente
    Conhecimentos adicionais: HTML
    No dia a dia:
    • Pré-venda de cursos
    • Atualizações no site e boletim
    • Atendimento a clientes pessoalmente, por e-mail e por telefone
    • Relacionamento com clientes em redes sociais (foruns, twitter, blog, etc)
    • Suporte aos usuários do sistema de gestão da Globalcode
    • Utilização do sistema de gestão da Globalcode para manutenção dos cadastros dos alunos

    Se você tem esse perfil, está esperando o que?
    Venha fazer parte da equipe Globalcode. Teremos o prazer em recebê-lo.
    Envie um e-mail com seu currículo para curriculos@globalcode.com.br

    segunda-feira, 8 de fevereiro de 2010

    Hello Roo

    Durante o segundo semestre de 2009 tomei conhecimento a respeito da iniciativa de produtividade da Springsource conhecida como Spring Roo. Posteriormente, tive um contato muito convincente com essa ferramenta durante a passagem de Rod Johnson no Brasil no evento TDC 2009.
    Atualmente utilizo essa ferramenta em um projeto, e espero compartilhar algumas experiências no Casual Class de Spring, dia 26 fev 2010. Este evento marcará o lançamento do Spring Brasil User Group.

     O que é Spring Roo ?
     - Roo é uma ferramenta Open Source de produtividade Java, baseada em
        - uma plataforma modularizável capaz de evoluir através de add-ons
        - um terminal de comandos, chamado Roo Shel.
     - Sem dúvida o principal atrativo de produtividade do Roo é a geração de código. Justamente por utilizar uma plataforma modularizável não podemos dizer que o Roo é apenas um gerador de código, e entendo que muitas etapas do ciclo de vida de um projeto Java poderão se beneficiar dessa ferramenta. Por exemplo, Roo já oferece suporte para automação de testes.
     - Roo representa uma evolução em relação a outros geradores de código, ao suportar desenvolvimento interativo, onde o código gerado (camadas web, persistência e testes) não é definitivo. Em outras palavras, através do Roo, o código gerado evolui automaticamente, junto com o modelo de entidades.
     - A distribuição atual do Roo (1.0.1):
        - fornece geradores de código para aplicações web baseadas em Spring MVC 3.0, AspectJ e nos padrões Bean Validation e JPA
        - fornece geradores de testes JUnit e Selenium
        - é baseada no Apache Maven
     - Além do terminal de comandos (Roo Shell) há o suporte no IDE SpringSoruce Tools Suite (STS), onde encontramos um Roo Shell embutido.
     - Outro destaque é o grau de dependência introduzido: mínimo. Um projeto iniciado com o Roo não precisa utilizá-lo eternamente, sendo razoavelmente simples continuar o projeto desenvolvendo "na mão", sem utilizar o Roo Shell.

    O que não é Spring Roo:
     - Roo não é um framework: um projeto criado em Roo não necessita de nenhuma biblioteca Roo em tempo de execução. Sim, existem annotations @Roo, entretanto estas possuem retenção no código fonte, e servem para orientar o gerador de código do Roo e o AspectJ.
     - Roo não determina uma arquitetura para seus projetos: como foi dito a distribuição atual gera aplicações Spring MVC / JPA, mas não tardatá surgir add-ons para outras arquiteturas (a Springsource tem demonstrado um interesse muito grande em add-ons para GWT).
     - Roo não é a salvação para desastres iminentes em projetos, onde pelo menos dois dos seguintes fatores estão presentes: requisitos mal especificados / cronogramas e orçamentos surreais / equipes de desenvolvimento inexperientes. Suspeito que, nesses casos a salvação não se encontrá em uma ferramenta, em um framework ou em promessa alguma de mágica tecnológica.

    Gostinho de Produtividade
    No vídeo abaixo, Massimiliano Dessi (Spring Framework Italian Group) demonstra a construção de um projeto com o Roo Shell.
    Notem que o vídeo utiliza uma versão antiga (Milestone 2) do Roo, e a versão atual (Release) possui vários comandos simplificados, como veremos a seguir.



    Preparando seu Hello World
    - JDK 6
    - Apache Tomcat 6
    - Apache Maven 2.0.9 ou superior
       -  http://maven.apache.org/index.html
       -  http://docs.codehaus.org/display/MAVENUSER/Getting+Started+with+Maven
    - instale o Roo 1.0.x com Roo Shell (terminal de comandos)
      - download em http://www.springsource.com/download/community?project=Spring%20Roo
      - descompacte o zip em um diretório de sua preferência
      - crie uma variável de ambiente ROO_HOME, apontando para o diretório de instalação
      - ajuste sua variável de ambiente PATH, acrescentando o caminho ROO_HOME/bin

    Criando um projeto via terminal de comandos
    Como exemplo criaremos um cadastro de bookmarks. Na primeira execução do Roo o Maven será acionado para fazer diversos downloads de bibliotecas - uns 10 minutos de paciência.
    - crie um diretório (ex: roo_teste1) posicione-se (cd roo_teste1)
    - inicie o Roo Shell (aqui começa a diversão), digitando roo.sh ou roo.bat

    Dois comandos iniciais no Roo Shell: help e hint. O comando help exibe todos os comandos disponíveis no shell. Já comando hint fornece uma ajuda contextualizada, sugerindo o que você pode fazer em determinado estágio do seu projeto.
    Não deixe de utilizar autocomplete do Roo Shell, que é ativado com a tecla TAB no terminal de comandos (ou com CTRL+SPACE no STS).
    Digite no Roo Shell os seguintes comandos (em negrito).
    Para criar o projeto e definir a esturura de pacotes principal:
    project --topLevelPackage globalcoders.bookmarks
    Para definir a camada de persistência:
    persistence setup --database HYPERSONIC_IN_MEMORY --provider HIBERNATE
    Para definir uma classe de entidade, para as categorias de bookmarks (o símbolo ~ significa o pacote top level)
    entity --class ~.model.Categoria
    Para definir um campo ná última entidade:
    field string --fieldName nome
    Mais uma entidade, para os bookmarks:
    entity --class ~.model.Bookmark
    Campos, com restrições e relacionamentos:
    field string --fieldName url --sizeMin 5 --sizeMax 200 --notNull
    field reference --fieldName categoria --type ~.model.Categoria
    field date --fieldName dataCadastro --type java.util.Date
    Para gerar a camada web, com controllers Spring MVC e views .jspx e Tiles:
    controller all --package ~.web
    Para compilar e gerar um .war (via Maven):
    perform package
    Para adaptar o projeto para o Eclipse:
    perform eclipse
    Para fechar o Roo Shell:
    quit

    Vamos executar a aplicação, colocando o Tomcat no ar e fazendo o deployment via Maven.
    No terminal de comandos, com o Roo Shell fechado (quit), execute:
    mvn tomcat:run
    No browser de sua preferência: http://localhost:8080/bookmarks

    Onde estão os métodos das Entidades e Controllers ?
    Você pode conferir o código gerado na pasta src/main do seu projeto.
    Ao inspecionar os arquivos Categoria.java e Bookmark.java verificamos que não existem métodos get/set ou toString().
    E inspecionando os contollers CategoriaController.java e BookmarkController.java não encontramos métodos.
    As implementações de tais métodos ocorrem através de um mecanismo suportado em AspectJ chamado Inter-type declarations (ITD). Ao navegar nos diretórios onde se encontram os arquivos .java das entidades e controllers encontraremos arquivos com a extensão .aj que implementam os métodos em questão.
    Uma dica importante: os ITDs são gerados automaticamente pelo Roo e não devem ser editados. É possível editar os arquivos .java - no  vídeo do Massimiliano o método toString de uma das classes foi redefinido em um arquivo .java.
    Outra dica: utilizar a IDE (baseada no Eclipse) Springsource Tool Suite 2.3.0 ou superior pois suporta AspectJ, e consequentemente os ITDs.

    Sugestões para experiências adicionais
     - Edite diretamente o arquivo Bookmark.java, adicionando um atributo String descricao com annotations @Size e @NotNull (da especificação Bean Validation, JSR 303). Execute o Roo Shell novamente e observe as mensagens geradas. Saia do Roo Shell, e execute o tomcat (mvn tomcat:run) e via browser verifique o que mudou no formulário de criação de Bookmarks.
     - Em Categoria.java defina um método toString ao seu gosto  e remova a annotation @RooToString. Que mensagem surge no Roo Shell após salvar este arquivo código fonte ? Execute novamente o tomcat e verifique o combo box de Categorias no formulário de Bookmarks;
     - No Roo Shell digite finder list --class ~.model.Bookmark. Ainda no Roo Shell digite finder add findBookmarksByDataCadastroLessThan. Execute o tomcat e veja o que mudou no menu da aplicação.

    Onde encontrar mais informações:
    - Muitos links em http://forum.springsource.org/showthread.php?t=71985
    - Não perca o Casual Class da Globalcode
    - Acompanhe meu blog

    Renato Bellia
    http://twitter.com/renatobellia
    http://notasingleshot.blogspot.com

    segunda-feira, 1 de fevereiro de 2010

    Desenvolvimento Softwares Vs. Construção Civil

    Eu sei que a metáfora da construção civil tem sido utilizada para referenciar modelos mais rígidos, porém, analisando de um novo ponto de vista, o de um pedreiro, eu vejo uma analogia interessante. 

    Já são conhecidas as inúmeras comparações entre "engenharia" de software e engenharia civil: pilares da arquitetura Java EE, diagramas como planta e código como a casa construida, a função de arquiteto, engenheiro e a famosa frase que o programador é o pedreiro do software... Tudo isso nos perseguiu muito nos últimos 20 anos e muitos dos profissionais de T.I. não gostam dessas comparações.

    O fato é que influenciado por tais comparações, há exatamente 9 anos atraz quando tinhamos uma equipe enxuta e dinâmica de desenvolvimento, eu costumava dizer: "Vamos fazer uma imersão em uma obra e entender quais são as razões de uma casa ser levantada aparentemente com menor esforço organizacional e corportativo que um software". Nunca fizemos.

    Porém refletindo recentemente achei que isso vem mais ainda a tona com toda a onda de metodologias ágeis e resolvi escrever mais uma paródia:

    "Certa vez um experiente desenvolvedor de softwares tirou férias para reformar sua casa de praia. Sendo sua personalidade um mashup de geek com work-a-holic, não parava de pensar em métodos de construção de softwares, afinal de contas aquele cenário de reforma era bastante sugestivo.

    Neste dia a obra seria iniciada e tal desenvolvedor já havia passado as principais especificações da reforma: abrir uma nova porta de passagem, pintar, reformar madeiras e colocar piso em uma nova área.

    Preocupou-se o dono da casa com o fato do orçamente ter tido como base tão poucas especificações: ninguém perguntou a cor da tinta a ser usada, ninguém perguntou se o piso seria simples ou porcelanato, mas enfim, o valor era justo.

    As 8:00 chegou a equipe pronta para trabalhar, e o "pedreiro mais experiente", reuniu todos rapidamente (e em pé), e definiou como seria o andamento da obra naquela semana e quais seriam os principais objetivos.

    Em 15 minutos todos estavam trabalhando.

    E o dono da casa continuou a observar o trabalho de pessoal, em especial chamou a atenção que a quebradeira para abrir a nova porta estava sendo feita por dois pedreiros que se revezavam.

    Religiosamente eles pararam de trabalhar as 17:00 horas.

    Algumas dúvidas surgiram no dia seguinte, mas como o proprietário estava sempre lá, rapidamente puderem resolve-las.

    E assim a obra foi seguindo até sua conclusão em 3 semanas: toda semana definiam o que seria feito, no término da semana eles faziam um pequeno churrasco na sexta depois do expediente, trabalhos pesados ou complexos eram feitos em duplas sempre, não havia alguém que simplesmente coordenasse tal processo. Tinha sim um pedreiro "master" que era um líder nato e carismático.

    O desenvolvedor de softwares e dono da casa ficou satisfeito com o resultado apesar dos pequenos desvios (que alguns ele mesmo causou) e também uma diferença no valor cobrado pelos serviços.

    Depois de 3 semanas cuidando da obra, quando voltou para sua empresa na semana seguinte ele estabeleceu novas regras:

    • Vamos fazer uma reunião no começo da semana para definir as funcionalidades que queremos prontas no final dela;
    • Se atingirmos esta meta, vamos fazer um churrasco, opa, na av. Paulista não rola. Vamos tomar sorvete por conta da empresa.
    • Todo software complexo será programado por dois;
    • Teremos um desenvolvedores mais experiente e com mais espirito de liderança que conduzirá a equipe
    • O cliente deverá sempre estar disponível para tirar nossa dúvidas
    • Todos trabalharão apenas 8 horas por dia

    E para finalizar ele refletiu: se isso der certo, vou ter que dar um nome.

    FIM.

    Vinicius
    http://twitter.com/vsenger
    http://program-me.ning.com
    http://www.eletronlivre.com.br