PTJUG – update

Logo PTJUGDesde há alguns meses que anunciei aqui no blog que foi criado o Java User Group português.

E

ntretanto muito aconteceu, embora a maioria não seja visível aos olhos do público em geral. O chamado grupo core tem discutido e trabalhado activamente – nalguns momentos mais activo do que outros, porque também temos de trabalhar – os diversos aspectos da criação do jug.
Já foram aprovados estatutos iniciais que irão reger o grupo, há propostas de liderança, temos um logótipo espectacular – que podem ver aqui no post – e já temos uma loja de t-shirts temporária.

Paralela e lentamente, estamos a desenvolver o novo site que irá substituir o actualmente inanimado java.pt. O motor escolhido para o site é o Liferay e o que posso dizer é que há tarefas atribuídas e está a dar luta. A esse propósito, o Ricardo Antunes escreveu aqui 2 posts no blog sobre como

configurar o Liferay.
No entanto, este desenvolvimento está um pouco demorado, situação para a qual se está a tentar encontrar solução.

Há uns dias, o Fernando Fernandez, membro destacado no core do JUG, criou um grupo de discussão no Google Groups enquanto o site não está de pé. Esperamos que seja um espaço de discussão, partilha de conhecimentos ou mesmo só para nos irmos começando a conhecer melhor.

Adiram já ao grupo, não custa nada e sempre ficam actualizados sobre a comunidade! A participação de todos é bem recebida e muito necessária para construirmos uma comunidade forte.

Google Collections Library

Não sei como só vi isto agora mas já está disponível há algum tempo, embora ainda em 0.5 (Alpha).
Trata-se uma biblioteca desenvolvida internamente por pessoal do Google e disponibilizada ao público em geral com uma licença opensource. Pretende ser

uma extensão às Java collections, e as colecções estendem os tipos base das colecções.

Novas Collections

São definidos, os seguintes novos tipos de colecções:

  • BiMap
  • Esta interface estende Map e permite ter um Map bidireccional, ou seja, em que é possível aceder por chave e/ou por valor. São fornecidas três implementações: HashBiMap, EnumBiMap e HashEnumBiMap.
    O HashBiMap contém dois HashMaps e permite a utilização de chaves e valores null. O EnumBiMap utiliza dois EnumMaps na sua implementação mas não permite chaves e valores null. O HashEnumBiMap é um misto, sendo que utiliza um EnumMap para mapear chaves para valores e um HashMap para mapear valores para chaves.

  • Multimap
  • É uma Map que pode ter vários valores para cada chave, ou seja, pode-se fazer algo como

    myMultimap.put(chavexpto,valorA);
    

    As vezes que quisermos, com a mesma chave. Existem dois interfaces principais que extendem Multimap: ListMultimap e SetMultimap.
    O ListMultimap guarda internamente os valores para uma chave numa lista ordenada, preservando assim ordem de inserção. São fornecidas as implementações ArrayListMultimap e LinkedListMultimap.
    O SetMultimap utiliza um Set para guardar os valores de cada chave e por isso não permite pares (chave,valor) repetido. São fornecidas as implementações HashMultimap, LinkedHashMultimap e TreeMultimap. Os nomes penso que são intuitivos :)

  • Multiset
  • É simplesmente um Set que permite duplicados, comummente chamado de Bag.
    Cada elemento tem um número de ocorrências, sendo que a noção de vários elementos com o mesmo valor não tem lógica, mas sim um elemento com X ocorrências. O número de ocorrências de um elemento é alterado quando o mesmo valor é inserido várias vezes e a igualidade entre valores é dependente da classe implementadora do Multiset (e.g. um HashMultiset poderá simplesmente comparar hashcodes, outro poderá ter uma aproximação diferente). Para oferecer esta noção de ocorrência, é fornecido o método

    int count(Object);
    

    São fornecidas as implementações EnumMultiset, HashMultiset, LinkedHashMultiset e TreeMultiset.

Além destas, existem mais classes de colecções derivadas, que estendem algumas das que aqui falei.

Classes Auxiliares

São fornecidas inúmeras classes auxiliares, mais do que as que consigo enumerar aqui e a maioria ainda nem olhei para elas.
Posso destacar alguns helpers, como seja por exemplo os Builders para criar colecções imutáveis de Multimap e BiMap ou um muito útil AbstractIterator, para facilitar a implementação de Iterators.
São fornecidas também Forward Collections, que são colecções que delegam o processamento dos seus métodos nos métodos de uma classe filha. Isto é útil porque a maioria das classes fornecidas pelo google collections library são

final e esta é a forma de adicionar comportamento personalizado. O pattern usado nestas forward collections é o decorator.

Base Google Goodies :)

Além das colecções e classes auxiliares relacionadas, são incluídas e utilizadas classes base e utilitárias google. São coisas simples e algumas delas bem pensadas e que podem ser utilizadas no dia-a-dia. Destaco a classe Preconditions: um conjunto de métodos estáticos para serem usados no início de métodos, para verificar pré-condições de argumentos e verificações de estado interno. Existem soluções de contratos mais completas obviamente mas como solução leve e prática é bastante usável.

Por fim, o mais importante, vão ao site do Google Collections Library, saquem o snapshot e vejam por vocês próprios. Poderá vir a ser uma boa adição aos nossos projectos.

Open Perspectives

Realiza-se no dia 17 de Outubro – sim é já depois de amanhã, quarta-feira – o Open Perspectives – “Views on Enterprise Software Development”.
Trata-se da primeira conferência organizada pela Lo

gical Software, será focada em metodologias ágeis e ferramentas próximas do mundo java. Terá a duração de 1 dia.
As Sessões são as seguintes:

  • Moving to Scrum
  • Orientação a Serviços
  • Desenvolvimento Web com Tapestry
  • Groovy up your Code

É de louvar ver empresas com iniciativas para eventos deste tipo com vista à troca de ideias e experiências. Penso que todos poderão ganhar algo se derem uma saltada pelo Hotal Príncipe Lisboa na quarta-feira, mesmo tão em cima do acontecimento.

Página do evento

Java: o futuro Cobol?

Antes de mais gostaria de pedir desculpa de falar sobre Cobol aqui, poderá trazer más memórias de alguns que em tempos passaram meses em caves escuras a programar na dita linguagem.
No início da minha carreira profissional – que não foi assim à tant

o tempo, embora possa referir sempre que foi “no século passado” – uma das poucas certezas que tinha era que não queria ir programar Cobol para uma cave de um banco como um amigo meu tinha estado uns meses ali para os lados da Av. da República. Sabia que queria programar, mas como a maioria dos entusiastas por tecnologia, queria trabalhar com paradigmas recentes ou pelo menos actuais, como seja linguagens orientadas a objectos. Depois, entrei no mundo do Java.

Como tecnologia, o Java é o principal player a penetrar em áreas anteriormente ocupadas pelo cobol (nos bancos, seguradoras, etc.), aplicações java substituem sistemas legacy e implantam-se no negócio das empresas. Temos montes de pequenas aplicações, temos EAIs para integrar aquilo tudo, temos, na realidade, java por todo o lado e tão cedo não deixará de estar presente nestas instituições. É a linguagem mais usada e com programadores a nível mundial na actualidade e ainda vai demorar algum tempo a ser ultrapassada.

Dado isto, propõe-se como exercício ao leitor que imagine a linguagem e a vm java daqui a 5, 10 e 20 anos. Não falamos das mudanças da próxima versão 7 do java, falamos a longo prazo. Chegaremos a um ponto em que olharemos para trás e pensamos na linguagem java como actualmente pensamos em cobol, um sistema legacy?
Põe-se a questão de qual será o caminho a seguir pelo java e, a meu ver, o sucesso apenas será atingido se analisarmos o termo java enquanto plataforma e não focando na linguagem. As linguagens de programação evoluem de acordo com paradigmas. Agora assistimos a um ressurgir da programação funcional em força com o ruby, erlang, scala e outras (haskell, scheme, ocaml, …): paradigmas já antigos mas agora contextualizados para o poder computacional dos tempos modernos.
Se os paradigmas evoluem com o tempo, tem toda a lógica olhar para a tecnologia java como uma plataforma que venha a suportar multiplas linguagens. A concepção do .net veio provar um pouco essa vantagem e nestes últimos 2 anos assistiu-se ao aparecimento de inúmeras linguagens para a Java VM como seja o jruby, groovy, jython, scala etc.

No fundo, não acredito que cheguemos sequer daqui a 5 anos a usar a linguagens java de forma tão monolítica como actualmente. Teremos uma

escolha maior de linguagens, a vm suportará linguagens dinâmicas de forma mais eficiente – esse trabalho está actualmente em curso – e nós, programadores, teremos de ser muito mais language agnostic do que muitas vezes somos. Se podemos desenvolver em várias linguagens para depois compilar para o mesmo bytecode, vamos usar a que melhor se adapta às nossas necessidades e também aos nossos gostos.

Enfim, confusões tecno-filosóficas de quem anda a brincar com BPM e não tem o direito de programar nada excepto nos tempos livres. Agradecem-se opiniões sobre o tema!

CSS Mastery

CSS Mastery: Advanced Web Standards SolutionsCascading Style Sheets são um pouco difíceis de assimilar. O

box model, os posicionamentos e todos os truques cross-browser tornam o desenho de uma página um desafio.
Na prática, a maioria dos web designers ainda estão da era do flash cialis sale – não compreendendo que uma aplicação flash não só não é acessível como não é indexável por motores de pesquisa – ou então usam um qualquer editor WYSIWYG e fazem uma página cheia de tabelas. Em ainda maior parte dos casos, não existe sequer um designer disponível no projecto e cabe ao programador compor o design do site que está a desenvolver. O resultado é, invariavelmente, mau.

Como tal, decidi comprar um livro que há muito tempo tinha adicionado à wishlist da Amazon (dão-se links a que quiser contribuir para a mesma): CSS Mastery: Advanced Web Standards Solutions do Andy Budd.

Devo dizer que é provavelmente o melhor livro técnico que já li, e já vão uns quantos. É conciso como deve ser, cerca de 200 páginas, não se perdendo em coisas inúteis. Explica cada técnica com exemplos simples e imagens, tendo sempre a perspectiva de que sejam funcionais entre browsers (ou seja, a famosa necessária martelada para funcionar o IE).
O livro inclui mesmo exemplo de como construir um site do princípio ao fim, um excelente ponto de partida para fazer o meu site pessoal :)

YouTube Google API em java

YouTube API Blog

A Google anuncio

u ontem no blog oficial do YouTube API o lançamento da nova versão do Youtube API, com a novidade de estar disponível a biblioteca cliente em java, bastante completa por sinal.

Esta API permite pesquisar filmes guardados no YouTube bem como ver os filmes por utilizador, os filmes favoritos de cada user, ver comentários de um filme, etc. A possibilidade de inserir filmes e comentários estará também para próximo.

Uma API destas facilita a integração do YouTube em aplicações web feitas em java – e não só. Com as capacidades de escrita, o YouTube poderia mesmo servir de backend para a funcionalidade

de vídeo de diversos sites. Aliás, esse caminho é o “The Google Way”, como aconteceu com o AdSense. Fazer com que seja embutido em imensos sites, aproveitar essa presença para publicidade e foi já anunciado.

Java Puzzlers

Java Puzzlers são sempre interessantes e têm a vantagem de nos permitirem aprender sempre um pouco mais sobre como funcionam algumas operações básicas e quotidianas quando

se programa java.
Do mesmo autor do livro buy viagra

m/”>Java Puzzlers: Traps, Pitfalls, and Corner Cases e do Bill Pugh, criador do FindBugs, chega-nos um webcast interessante.

Aconselho também a consultarem a página do vídeo no google video (botão inferior direito aqui do player embebido) e verem outros vídeos muito interessantes de sessões técnicas do google.