quarta-feira, 26 de maio de 2010

Primeira turma do Hands-on Google App Engine


Semana passada aconteceu o Hands-on Google App Engine, criado e ministrado por Rafael Nunes, da unidade Globalcode em São Bernardo do Campo.

A turma estava lotada e pude perceber que muitos já tinham mexido com a ferramenta da Google e alguns, assim como eu, estavam experimentando pela primeira vez.

Rafael nos deu uma introdução sobre Cloud Computing, como funciona o GAE (Google App Engine) e as diferenças de se programar na nuvem, além das limitações de espaço e recursos que podemos utilizar.

Logo em seguida já fizemos nosso primeiro laboratório usando Eclipse com um plugin próprio para App Engine e o resto do curso foi todo assim, regado de práticas e com o Rafael sempre atendendo a todos nas suas dúvidas.

Fizemos uma aplicação com Struts, outra com JSF 2.0, usamos BigTable com e sem JPA, e por último, Rafael nos mostrou uma usando a API de cache.


No final fiquei muito feliz por ter minha primeira aplicação rodando no GAE !


Na quinta-feira, segundo dia de aula, tivemos a visita surpresa de Francisco Gioielli, da Google, que foi até a Globalcode especialmente para nos incentivar e também falar sobre as novidades que a Google estava lançando no Google I/O.
Ele distribuiu brindes para todos e comeu uma pizza conosco. Tiramos algumas fotos para registrar o momento.



[]s

Ana Abrantes
http://twitter.com/anabrant
http://www.globalcode.com.br

Caravana Java Noroeste


Profissão Java 2010 é a oportunidade de fazer networking com profissionais que fizeram suas carreiras de sucesso na área de TI.


O Java Noroeste com o apoio da Destaque Capacitação Profissional de São José do Rio Preto, esta organizando uma caravana para o evento pelo segundo ano.

Quem estiver interessado em participar pode entrar em contato pelo e-mail carlosfgo@gmail.com
A saída do ônibus esta prevista para o dia 25 de junho de 2010 às 23:00 hs de Votuporanga, passando em SJ Rio Preto por volta das 0:00 hs.
Não perca esta oportunidade de se atualizar.

Carlos Fernando Gonçalves
JUG Leader Java Noroeste
www.javanoroeste.com.br
http://twitter.com/javanoroeste
http://www.twitter.com/mercuriocfg

Profissão Java é Open4Education. Participe, colabore!

Estamos trabalhando na segunda edição do Evento Profissão Java, que será realizado dia 26 de junho na Universidade Anhembi Morumbi, Campus Vila Olimpia.E já recebemos mais de 400 inscrições.

Acompanhe o evento no twitter com a hashtag #ProfissaoJava

O Profissão Java é um evento de tecnologia, mas não é um evento técnico. O foco é a interação, networking, planejamento de carreira e atenção aos nichos inovadores do nosso mercado.
São várias palestras curtas, onde os palestrantes tem que ir direto ao ponto, e mostrar porque acreditam que uma tecnologia é promissora, números, fatos, experiências pessoais.


Por isto os macro-temas deste evento são apresenados sempre na perspectiva da carreira do profissional de TI:
  • Nichos inovadores
  • Empreendedorismo
  • Comportamento, curriculo, redes sociais
Confira a grade!  

Como todas as iniciativas Open4Education o Profissão Java é um evento gratuito feito para a comunidade. A colaboração é bem vinda!

Como colaborar?
- Divulgação (Veja os banners e imagens que poder ser colocados na sua página, blog, site)
- Divulgação em Universidades;
- Divulgação nos grupos de usuários e portais
- Patrocínio
- Indicação de patrocinadores

O evento é sem dúvida uma oportunidade interessante para interação com a comunidade Java e de Tecnologia da Informação de forma geral, excelente para empresas que tem interesse na contratação de profissionais da área, ou que queriam cultivar o relacionamento com a desenvolvedores.

 Profissão Java 2010, um evento organizado pela Globalcode

 Profissão Java 2010, um evento organizado pela Globalcode







Participe, comente, dê sua opinião aqui no blog, seja Open4Education.
Nos vemos no Profissão Java!

Yara
http://twitter.com/yarasenger

sexta-feira, 21 de maio de 2010

4º Bate Papo do SP-GTUG - Divulgação

Pessoal,

Teremos um novo bate papo do SP-GTUG, aberto e gratuito, abordando dois pontos:
  • Google App Engine com Java;
  • Novidades do Google I/O 2010.
Este será o quarto bate papo do SP-GTUG.

Local e data

O bate papo acontecerá no dia 26/05/10, das 19:00 às 22:00 na Globalcode. Para fazer sua inscrição e participar acesse a home da Globalcode e vá até a parte de "Minicursos Gratuitos da Semana" (ou acesse esse link para ir direto a página de inscrição).

Programação do dia

Abaixo estão informações adicionais sobre o que será apresentado no dia:

Título: "Google App Engine com Java
"
Resumo: Não divulgado até o momento (rs).
Ministrada por: Rafael Pereira Nunes (Perfil do Instrutor na Globalcode)
Duração: 1h30

Título: "Novidades do Google I/O 2010: uma visão "in loco" do evento"
Resumo: Róbson Dantas, PMP da AgenciaClick e membro do SP-GTUG, teve a honra de participar do maior evento do Google na face da terra: o Google I/O 2010. Ele volta ao Brasil "recheado" de informações e novidades do evento (Por exemplo: lançamento do Android 2.2, Google TV entre outros). Prepare-se para saber das "fantásticas" novidades do Google!
Ministrada por: Róbson Dantas (Blog do Róbson Dantas)
Duração: 1h30


Blog do Dantas atualizado com fotos, informações e preview do Google I/O!

O Róbson escreveu posts sobre os encontros/reuniões, apresentações e informações do Google I/O no seu blog pessoal, além de disponibilizar um albúm público no Picasa com fotos do evento. No seu twitter pessoal ele descreveu boa parte do evento. Veja mais nos links abaixo:
Adicionalmente, leia este "post resumo" que o pessoal do Google escreveu no Google Code Blog, com uma abordagem do evento em um todo. Show de Bola a cobertura!

Portanto...

Não perca essa oportunidade de conhecer mais sobre GAE + Java e quais as novas ferramentas que estão disponíveis para nós, usuários e desenvolvedores, após serem lançadas no Google I/O.

Se você participou (ou não) do 3º Bate Papo, não perca tempo e faça sua inscrição agora!


Apareça para dar idéias, opiniões, conhecer gente nova e fazer networking na quarta-feira.


Até lá!

Rodrigo Ribeiro
http://templariodatecnologia.wordpress.com

quinta-feira, 20 de maio de 2010

Google App Engine: Minicurso gratuito e novo Hands-on

Recentemente lançamos o novo Hands-on de Google App Engine, criado pelo Rafael Nunes, sócio fundador da YaW Tecnologia - a Unidade Globalcode em São Bernardo do Campo. Instrutor de muitos treinamentos na Globalcode e autor do Hands-on Flex, minicurso de Flex, Rest e outros minicursos.

A primeira turma do Hands-on termina hoje, dia 19/05 na Unidade Globalcode São Paulo, espero postar algumas fotos em breve!

Temos acompanhado e utilizado em projetos diferentes tecnologias e ferramentas da gigante da TI: Google - além do apoio constante ao Grupo de Usuários das Tecnologias Google - São Paulo (GTUG-SP)que tem realizado as reuniões na Globalcode, e na próxima reunião, dia 26/05 teremos Rafael Nunes e Eder Magalhães falando sobre Google App Engine e GWT.

Seguindo nossa missão educacional "Transformar o complexo e desconhecido em simples e conhecido e depois mostrar ao mundo" onde compartilhamos nossas experiências com a comunidade através da Open4Education (eventos e minicursos gratuitos) e também do portifólio de cursos Globalcode.

MC76 - Introdução a Google App Engine com Java
Conheça a plataforma de Cloud Computing da Google

Realizamos também o CasualClass de Cloud Computing, onde tivemos a participação especial do Francisco Gioielli, que também participou do TDC São Paulo, onde falou sobre Google App Engine junto com o Rafael Nunes, e também no TDC Rio de Janeiro.

Com quase 10 anos de experiência em educação e comunidade de desenvolvedores, temos buscado mais amplitude e flexibilidade, entendendo e atendendo as necessidades das pessoas e empresas que são extremamente diversificadas.

Os Hands-on fazem parte desta estratégia de flexibilização, pois são cursos curtos e econômicos, onde é fundamental fazer uma "Seleção Gourmet" de tópicos e laboratórios para abordar os itens mais importantes com teoria e prática suficientes para que os alunos tenham a base necessária para iniciar com a tecnologia ou ferramenta.

Hands-on Google App Engine (8 horas duração)
Próxima turma 17/06 em São Paulo

E você, é Open4Education ?
Compartilha seu conhecimento com amigos, colegas de trabalho e com a comunidade através de palestras, blogs ou até mesmo divulgando estas iniciativas ? Pesquisa, lê, testa novas tecnologias e ferramentas ?

Parabéns Rafael Nunes e também aos alunos da primeira turma do Hands-on de Google App Engine!

[]s
Yara
http://twitter.com/yarasenger
http://www.globalcode.com.br/instrutores/YaraSenger

quarta-feira, 19 de maio de 2010

Fetch Profile nova funcionalidade do Hibernate 3.5

No final de Março foi lançado Hibernate 3.5, framework Mapeamento Objeto Relacional mais "badalado" do Java.

A grande expectativa dessa versão é justamente por a partir dela o Hibernate torna-se uma implementação da JPA 2.0. A JSR 317 especificou recursos já existentes no Hibernate com novas funcionalidades dando uma cara nova ao mecanismo padrão para ORM em aplicativos Java.

Mas além da compatibilidade a JPA 2.0, o Hibernate conta com algumas melhorias como o suporte a JDBC 4 (Java 6), junção dos projetos Hibernate Core, Hibernate Annotations, Hibernate EntityManager e Hibernate Envers. Fechando com novas funcionalidades como o Fetch Profile.

Via de regra, mapear as associações com fetchType usando Lazy não faz mal a ninguém, principalmente em relacionamentos que envolvem collection como @OneToMany e @ManyToMany. Uma solução comum para carregar mais de uma entidade em única busca no banco é utilizar join fetch via HQL, ou mesmo via Criteria.

A partir do Hibernate 3.5, com o Fetch Profile isso pode ser feito de uma forma diferente e bem simples. No mapeamento é necessário indicar a entidade, o relacionamento/atributo que deve ser carregado e por fim um nome para o Fetch Profile. Vou usar o clássico exemplo Pedido com um Cliente e vários Itens para demonstrar o uso, código está bem reduzido com foco em Fetch Profile:
@FetchProfiles(value={
    @FetchProfile(name="pedido-com-cliente",
        fetchOverrides=@FetchProfile.FetchOverride(
            entity=Pedido.class,
            association="cliente",
            mode=FetchMode.JOIN)
    ),

    @FetchProfile(name="pedido-com-itens",
        fetchOverrides=@FetchProfile.FetchOverride(
            entity=Pedido.class,
            association="itens",
            mode=FetchMode.JOIN)
    )
})

@Entity
public class Pedido {

    // mapeamento dos outros atributos foram omitidos ...
    
    @ManyToMany(fetch=FetchType.LAZY) //o default eh EAGER
    private Cliente cliente;

    @OneToMany(fetch=FetchType.LAZY)
    private Set itens = new HashSet();

    // getters, setters e outros metodos foram omitidos ...
}


Observação: caso exista só um @FetchProfile, não é necessário definir @FetchProfiles.

Agora é só habilitar o Fetch Profile na Session indicando pelo nome, através do método setFetchProfile. Uma vez que esse método é acionado, enquanto a Session for utilizada o Fetch Profile será respeitado.

A seguir trecho do codigo do PedidoDAO usando usando esse esquema:
//busca comum, nesse caso soh na tabela Pedido
Pedido p1 = (Pedido) session.get(Pedido.class, 4); //existe pedido com id 4

//habilita busca (get) do pedido com itens
session.enableFetchProfile("pedido-com-itens");

//gera sql para tabela Pedido com left outer join em ItemPedido
Pedido p2 = (Pedido) session.get(Pedido.class, 7); //existe pedido com id 7


Na sequência faço um ajuste no código anterior, habilitando a busca do Cliente junto com os Itens.
//habilita busca (get) do pedido com itens
session.enableFetchProfile("pedido-com-itens");

//gera sql para tabela Pedido com left outer join em ItemPedido
Pedido p2 = (Pedido) session.get(Pedido.class, 7); //existe pedido com id 7

//na mesma session, habilita busca (get) do pedido com cliente
session.enableFetchProfile("pedido-com-cliente");

//gera sql para tabela Pedido com left outer join com ItemPedido e Cliente
Pedido p2 = (Pedido) session.get(Pedido.class, 7); //existe pedido com id 7


Para desabilitar o Fetch Profile é só chamar o método disableFetchProfile da Session. Por enquanto o formato da busca é via JOIN, as outras opções devem sair junto com Hibernate 3.7.

Depois de quase 10 anos, o Hibernate começou a ser criado em 2001, é possível melhorar!


Mais informações:


[]'s
Eder Magalhães
www.yaw.com.br
twitter.com/youandwe
twitter.com/edermag

terça-feira, 18 de maio de 2010

no:sql(br).["Eu fui"] = "e estava SENSACIONAL!";

O primeiro #nosqlbr foi um evento que realmente excedeu a expectativa de muitos, e acredito que até mesmo do @porcielli(organizador e curador de fato do movimento aqui no Brasil)! Com um público de tecnologia eclético, reuniu em torno de 170 pessoas para discutir assuntos vinculados a bancos de dados que não atendem ao modelo SQL/relacional.

De forma resumida, tais solucões de armazenamento e recuperação de dados normalmente possuem as seguintes qualidades sistêmicas:

  • Atendem aos requisitos basicos de cloud computing, como disponibilidade, tolerância a falhas, escalabilidade horizontal elástica(a quente) e baixa latência;
  • Armazenam dados normalmente no formato chave valor. Alguns são mais orientados a estruturas de dados, outros a documentos;
  • Falam, em muitos casos, protocolos baseados na web, como HTTP, JSON e XML;
  • Alguns aderem mais fielmente a web, implementando conceitos REST;
  • Considere soluções open source e livres, por questões de licenciamento e custo ao escalar;
  • Nem tudo deve ser ACID;
  • Modelos relacionais não priorizam o perfil de acesso a dados da aplicação, que é desnormalizado;
  • Dados centralizados solucionam apenas consistência, mas trazem problemas que inviabilizam o uso em soluções nosql/cloud computing;
  • Latência é o que importa em primeiro lugar! Depois vazão(throughtput/escalabilidade)! E depois elasticidade(crescer a quente)! Porém, todos são importantes!
  • Particionamento, replicação inteligente e sharding(particionamento de um mesmo grupo de dados) são fundamentais;
  • Facilite a leitura;
  • Escolha entre latência e consistência;
Você encontra mais informações no artigo da wikipedia sobre NoSQL

Minha palestra foi a respeito de uma avaliação que estamos fazendo no SPC Brasil a respeito de Apache Cassandra como cache distribuído(cuidado, "quase" NSFW). De forma simples, o Apache Cassandra junta o modelo de dados oferecido pelo Google BigTable com as capacidades de armazenamento do Amazon Dynamo.

Quero ainda disponibilizar um material adicional, como arquivos de configuração prontos para setup em cluster. De qualquer forma, uma coisa que citei é que a configuração do Apache Cassandra é muito simples e, seguindo os comentários para cada configuração dentro do arquivo $CASSANDRA_HOME/conf/storage-conf.xml, configurando o logfile em $CASSANDRA_HOME/conf/log4j.properties, lendo o quickstart, modelo de dados, arquitetura e codificando alguns clientes devem ser o suficiente para fazer um bom setup inicial e rápido. Acredito que em 1h no maximo você já consegue ter um cluster e cliente funcionando, além do que é um excelente exercício caso você esteja comecando nessa área! Estou a disposilção para ajudar em caso de dificuldades nisso!

Logo após a minha palestra, a Globalcode sorteou um curso Hands-On(prático) de Google App Engine com Java, e o ganhador foi o @handrus! Parabéns! ;)

O clima foi extremamente informal e descontraído, com todos os convidados se sentindo muito a vontade para fazer perguntas e participarem das palestras. No final houve uma desconferência, onde palestrantes e platéia se uniram para falar a respeito dessas novas tecnologias, cultura corporativa, DBAs, cloud computing, agile, universo, e outras coisas... :) Houve um happy hour depois, mas como eu já estava muito cansado, se ficasse bêbado ainda por cima a essa altura, iria dormir na rua mesmo! :)

Bati ainda um papo com o Alberto Lerner, um dos desenvolvedores do MongoDB, que foi desenvolvedor do BigTable quando ainda era funcionário do Google. Ele falou quais critérios devem ser considerados na adoção de uma solução NoSQL, dizendo que devemos focar muito mais análise de como sua aplicação acessa dados, e menos na moda ou até mesmo em funcionalidades de mais alto nível que podem ser irrelevantes na solução de problemas de latência e disponibilidade ao recuperar/modificar informações no seu repositório de dados.

Como o evento foi organizado de forma rápida e sem muito planejamento financeiro, o Alexandre Porcelli acabou por assumir um custo de R$ 8.000,00 sozinho, e a partir daí começou uma corrida para obter patrocinadores e doações individuais para bancar o evento. Durante o evento ainda houve uma momento ilustre: o Porcelli passou o chapéu(literalmente, pena que não há foto, mas várias testemunhas presenciaram isso, inclusive eu) e conseguiu arrecadar próximo de R$ 1.000,00, o que considerando um público presente de 170 pessoas em um evento gratuito aqui no Brasil é algo de se admirar! Isso mostra o quanto o público estava comprometido com o movimento e também significa uma coisa: o nosqlbr 2011 vai ser algo ainda melhor! Porém ainda há um rombo de R$ 2.500,00 nas finanças pessoais dele, portanto se você foi e não colaborou, ainda há chance de ajudar!

Outros posts a respeito do primeiro NoSQL Brasil(se estiver faltando algum, me avisem que eu atualizo):


Ainda durante o evento, o Porcelli citou um novo encontro em algum futuro próximo. Dessa vez com o tema "linguagens dinâmicas". Certamente estarei lá!

Abs,
JV -- julioviegas.com

quarta-feira, 12 de maio de 2010

Respondendo a eventos no Android - BroadcastReceiver

Ola pessoal!

Um telefone qualquer, durante o seu funcionamento realiza diversos "eventos", como por exemplo iniciar uma ligação, finalizar uma ligação, receber um SMS, enfim, o tempo todo o SO do telefone está realizando alguma operação. E na plataforma Android, esses eventos são avisados a todas aplicações e que se desejarem, podem responder a essas ações, e isso é feito através dos BroadcastReceiver.
Para isso, basta você criar uma classe que estenda de BroadcastReceiver e registrá-la corretamente no AndroidManifest.xml. Com isso, o SO irá notificar sua classe que deverá executar em no máximo 2 segundos, e normalmente ela terá três opções:
  • Realizar uma notificação.
  • Iniciar um serviço.
  • Iniciar uma aplicação.
Então, para esse post vamos fazer um exemplo onde ao iniciar o telefone iremos então iniciar a nossa aplicação, tipo de comportamento que já vi muitas pessoas perguntarem como se fazia em Java ME, mas que não era possível.

Criando um BroadcastReceiver

Ao estender uma classe BroadcastReceiver, o método que vamos que ter que implementar é o onReceive, que será chamado pelo SO quando a ação que você deseja interceptar for executada. O código para uma classe que inicie uma Activity é o seguinte:

public class AfterBootBroadcastReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
Intent i = new Intent(context, AfterBootActivity.class);
i.addCategory(Intent.CATEGORY_DEFAULT);
context.startActivity(i);
}
}

O que vemos nesse código é a criação de uma Intent, que será responsável pela criação da atividade, e isso está indicado onde colocamos o AfterBootActivity.class como parametro da criação da Intent. E logo em seguida, inicia-se a atividade através da chamada do startActivity(i).

Registrando no AndroidManifest.xml

Além de criar a classe, é preciso registrar no arquivo de configuração da aplicação para que o Android possa saber que a sua aplicação espera por um determinado evento. Vamos ver então como fica a configuração:

<receiver android:name="AfterBootBroadcastReceiver"
    android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
    <intent-filter>
       <action android:name="android.intent.action.BOOT_COMPLETED" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</receiver>

O principal a se atentar é a propriedade android:permission que deverá ter a permissão correta, pois o usuário precisa ser "avisado" dos tipos de ações a serem executadas em seu telefone. E além disso, dentro das opções de , na propriedade action deverá constar a ação que a sua classe interceptará. E então, simples assim, sempre que o celular finalizar o boot, sua aplicação será iniciada.

Concorrência

Se por um acaso, para alguma ação mais de um BroadcastReceiver quiser abrir uma aplicação, o usuário terá que escolher qual aplicação ele deseja abrir, e ele terá a opção de deixar alguma das aplicações como padrão para no futuro, não ter que escolher novamente.

Para saber mais...

Caso tenha ficado alguma dúvida ainda, um ótimo local para dar uma olhada em mais exemplos e entender melhor é o guia da classe BroadcastReceiver no guia de referência do Android. E não esqueça que você pode participar do grupo de desenvolvedores brasileiros de Android, basta visitar a página do grupo Android Brasil-dev no Google Groups.

Abraços e até a próxima.
Neto Marin

JSF 2.0: Uma Evolução nas Interfaces Web com Java

JBoss in bossa logoNo último dia 7 deste mês realizamos um workshop no evento JBossInBossa2010 sobre JSF 2.0 e ScrumToys. Como prometido e comentado em outro post, apresentamos as novas funcionalidades do JSF além de discutir um pouco sobre as deficiências da versão anterior que motivaram as melhorias. Este workshop, que teve duração de 2 horas, foi complementado com a demonstração do ScrumToys e a demonstração dos conceitos de computação física através do Program-ME (o Arduino da Globalcode!).

Como resultado deste workshop temos uma versão portada do ScrumToys capaz de rodar no JBoss Application Server 6.0 (Milestone 2). Pequenas modificações foram necessárias, porque a versão original do ScrumToys está configurado e otimizado para rodar no Glassfish v3 (Java EE 6) e JavaDB que já vêm integrados ao NetBeans 6.8. Algumas alterações no persistence.xml e a criação de um scrumtoys-ds.xml foram necessários para rodar no JBossAS6 e usar o MySQL 5 como banco de dados.

A versão modificada do ScrumToys para rodar no JBossAS 6.0 M2 está disponível no seguinte link: Scrumtoys.Jboss6M2.zip.

Arduino DuemilanoveOutro resultado do workshop foram alguns slides acompanhados de vídeos disponibilizados no youtube apresentando o JSF 2.0, o ScrumToys, o Arduino e o Program-ME da Globalcode. Seguem abaixo estes slides.
Veja algumas fotos tiradas durante o evento pela equipe de organização do evento.



Mais detalhes sobre o JSF 2.0 e o ScrumToys veja nos posts:
[]s
By Spock
http://blog.spock.com.br/
http://twitter.spock.com.br/
http://www.springbrasil.com.br/
Meus posts: http://blog.globalcode.com.br/search/label/Spock

segunda-feira, 3 de maio de 2010

Informações do 3º Bate Papo do SP-GTUG (28/04/2010)

No dia 28/04/2010, das 19h00 às 22h00 ocorreu o 3º bate papo do SP-GTUG, na Globalcode SP.

A proposta era começar com Google Analytics (cerca de 1:30h) e terminar com alguns Lightning Talks.

Apesar de apenas 11 pessoas terem comparecido o bate papo sobre Google Analytics se estendeu e durou cerca de 2:15h.

O responsável por isso foi Rodrigo Rúbio, que contou desde a história do Web Analytics até chegar a poderosa ferramenta que é o Google Analytics. Durante o bate papo surgiram diversas perguntas acerca das possibilidades do uso do "GA" que foram muito bem respondidas e acabaram gerando mais perguntas ainda.

Por um lado foi uma pena não ter sido apresentado nenhum Lightning Talk ( :( ), mas foi incrível o número de perguntas e interesse pela ferramenta! :)

Para os interessados, a apresentação está abaixo:

Participe do grupo você também e tenha mais informações. Acesse: http://groups.google.com/group/sp-gtug/

Aguardem o próximo evento no final de maio!

Até mais,

Paulo Fernandes
http://www.google.com/profiles/paulofernandesjr