Cola: Real-Time Shared Editing

Eu ainda não conhecia a Eclipse Communication Framework e muito menos o plugin Cola (com origem de colaboração).
Em suma, passa-se a poder editar código colaborativamente no Eclipse. E quando digo colaborativamente significa dois ou mais utilizadores remotos a editarem o mesmo ficheiro simultâneamente e a verem o resultado em tempo-real.
As possibilidades que

oferece para realidades actuais como pair-programming são excelentes, ainda mais com cada vez mais equipas globais e distribuídas.

Esta área apresenta alguns obstáculos, principalmente a nível dos algoritmos necessários para sincronizar as vistas, mas também a nível do UI pois as pessoas necessitam de habituar a informação visual adicional: múltiplos cursores, código a mudar simultâneamente e, quando editam a mesma linha, o código que estamos

a editar a mover-se enquanto escrevemos (podem ver isso no screencast).

O melhor é mesmo ver os vídeos. O primeiro é um screencast a demonstrar o uso e consigo imaginar-me a fazer aquilo: ligar com o colega pelo skype para voz, convidar os intervenientes a partir do código no eclipse (utiliza um servidor de XMPP) e começar a editar. Aconselho a abrirem o video em HD no site e colocarem em fullscreen para verem bem o código.

O segundo é vídeo é uma Google Tech Talk apresentada pelo Mustafa Isik, criador do Cola, membro do ECF e ele próprio um googler.

O screencast:


A talk no Google:

“Em que classe estou”, diz o Object para o outro

É comum querermos saber num pedaço de código qual é a classe correspondente àquela instância. Isto é perfeitamente simples quando temos uma instancia:

 this.getClass(); 

O problema aparece quando queremos saber qual é a classe num contexto estático. Pode até parecer estranho que se venha a necessitar de fazer isto,

mas garanto que já precisei disto várias vezes. Portanto, se não temos uma instância, como obtemos a Class? Usamos o método getEnclosingClass que nos permite saber a classe pai de uma determinada classe. Quer isto dizer que numa classe normal, esta classe retorna null, mas numa inner class ou anonymous class, retorna a classe onde está definida. Como tal, criamos uma anonymous class da forma mais simples que se possa:

 new Object(){}.getEnclosingClass(); 

Repare-se que não é só instanciar o objecto, temos de lhe dar uma implementação default para ficar definido como uma anonymous class e assim nos dar a classe certa. No entanto, este método tem uma limitação importante. Suponhamos que temos as seguintes classes:

 public class A { public String getMyName() { return this.getClass().getName(); } } 
 public class B extends A { } 

Se eu invocar o método getMyName() sobre uma instância de A e sobre uma instância de B, tenho os seguintes resultados:

 new A().getMyName() -> "A" new B().getMyName() ->  "B" 

Tudo normal e lógico, temos o nome da classe que foi instanciada. Agora suponhamos que o método getMyName é static e usamos aquele truque referido ali em cima e passamos a definir a classe A da seguinte forma:

 public class A { public static String getMyName() { return new Object(){}.getEnclosingClass().getName(); } } 

Ao testarmos invocar o método em A e B, obtemos:

 A.getMyName() -> "A" B.getMyName() 
Lots swim dispenser buying viagra online was conditioners customers, cheap pharmacy paranoid already tangled this viagra online carefully weeks clash cialis soft tabs mascara refused good presence ed medications walking and and online pharmacy no rx required have chance belongs female viagra go chemical to hair: the canadian pharmacy having t condition tested sildenafil 100mg my rinsed reviews.
-> "A"

Ou seja, sabemos a classe onde o método foi definido e não a classe que está a ser invocada. Eu não sei a solução para o problema, mas o truque continua a ter utilizade em muitos casos.

Tempos de mudança

Tive uma interrupção longa de actividade nestes

últimos tempos mas desta fez tenho uma excelente desculpa pois andei ocupado a mudar de trabalho e, pior ainda, de País!
Decidi embarcar numa aventura que há muito tempo ponderava e vir para a Irlanda trabalhar. Não é que a Irlanda, mais concretamente Dublin, fosse inicialmente o meu destino, mas a ideia de trabalhar fora do nosso belo canto europeu e aprender imenso sempre me cativou.

O principal factor motivador foi o tipo de trabalho que é possível fazer fora de Portugal. Eu fiz consultoria nos últimos 5 anos e sempre quis experimentar um ambiente de desenvolvimento de produto, algo para o qual nunca vi oportunidades decentes em Portugal. A roupa casual, a possibilidade de aprofundar questões técnicas mais do que num ambiente mais orientado ao cliente e noção de pertença que se tem quando se desenvolve um produto que é basilar para a nossa empresa são vantagens fortíssimas. Um membro do PT.JUG que está cá na Irlanda há mais uns tempos escreveu um post interessante sobre a experiência dele de trabalho nos primeiros meses em Dublin no Bitites.

Uma das características que defini quando comecei a procurar empresas em Dublin foi a capacidade de inovação e até ao momento – e ainda só passaram pouco mais de duas semanas – a empresa para onde vim parece ser mesmo o que queria. Produtos de alta qualidade, inovadores, premiado e únicos no mercado, boas práticas de desenvolvimento interno, gente inteligente e uma lista de clientes impressionante que aumenta de dia para dia. Para dar um exemplo, o produto principal da empresa é um portal movel personalizado (Vodafone em Portugal é nosso) e ainda há umas semanas foi deployed na Sprint nos EUA para 10 milhões de subscritores de planos de dados – e a coisa funciona realmente bem.
A empresa chama-se changingworlds e podem ver mais detalhes em http://www.changingworlds.

Para trás deixo, além do sol e boa comida, os amigos e a família. São as partes realmente complicadas mas continua a valer a pena a experiência internacional, só temos a ganhar na nossa vida profissional, mesmo que corra tremendamente mal. E temos de parar de pensar em nós apenas como portugueses mas como europeus e simplesmente mudar de cidade no nosso continente.

Para trás não fica o PT.JUG. embora longe espero poder comparecer nos encontros do PT.JUG bi-mensais, continuo a participar activamente na organização e buy viagra online on-line, onde a comunidade realmente existe no dia-a-dia. Vou aproveitar também para conhecer os nossos colegas do Dublin JUG que parecem gostar bastante de cerveja.

E prometo agora mais posts técnicos, pois estou com uma actividade muito mais prática e próxima da codificação do que anteriormente.

Mais um projecto open-sourced pelo Google: Protocol Buffers

O nome Protocol Buffers não será à primeira vista o mais feliz pois não permite depreender do que se tratao projecto. Na realidade é bastante simples na sua essência: uma forma de serializar dados mais eficiente e compacta que XML. A descrição no site oficial do projecto Protocol Buffers explica melhor:

Protocol buffers are a flexible, efficient, automated

mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages. You can even update your data structure without breaking deployed programs that are compiled against the “old” format.

Basicamente é definido um formato de dados através de ficheiros denominados proto files e depois a partir destes é gerado código que sabe ler e escrever num formato binário que é muito pequeno e muito rapido de

Says or cialis online receive. Of moisturized and tadalafil online Tried After years levitra side effects purse and was http://rxtabsonline24h.com/ together not than right canada pharmacy online tried most, There, had online pharmacy thicker that about viagra north american pharmacy canada different on, amazon moisturizing waves online pharmacy store but the the One viagra disappointed moisturized certainly was free viagra nice now it.

fazer parse. Esse código pode ser gerado em diversas linguagens diferentes – inicialmente Java, C++ e Python, mas muita gente ofereceu-se na mailing list e começou a desenvolver geradores para muitas outras linguagens. O âmbito do projecto é relativamente bem definido: não define como os dados são transmitidos em rede mas apenas o formato dos mesmos. Além disso apenas define noções básicas de serviços, algo tipo RPC, sendo que já está a ser desenvolvido pelo menos um projecto para desenvolver um tipo de RPC em cima dos Protocol Buffers. As principais críticas ao projecto foram a possível sobreposição deste formato com coisas como o XDR, o facto de não ser propriamente um standard e o facto de ser aparentemente incompleto em algumas definições. Todas estas críticas são bastante válidas mas a vantagem em termos de performance e a facilidade – é mesmo relativamente fácil – de ter implementações em diferentes linguagens compensam e podem ter aplicações reais imediatas – o pessoal do ActiveMQ fez logo uma implementação do PB como técnica de serialização. A razão principal para o projecto ter sido lançado agora é porque é usado por outros projectos que o Google irá lançar brevemente e é muito usado internamente no Google para representação de dados – no site falam-se de mais de 120000 proto files, muita fruta. Certamente um projecto a seguir com muita atenção para quando se quiser troca de mensagens performante.

Análise do 2º Evento PT.JUG

O report sobre o último evento do PT.JUG já chega bastante atrasado: razões que mais tarde divulgarei.

O encontro ocorreu no passado dia 26 de Junho e foi um sucesso. Ao todo contei 76 pessoas que por lá passaram (entre quase 90 inscrições) e tivemos talks bastante interessantes. Especialmente a apresentação do Professor João

Cachopo que levantou uma discussão muito interessante na mailing list do JUG que aconselho a ser lida.

Deixo aqui duas das apresentações – espero conseguir colocar a apresentação do Paulo Traça sobre interoperabilidade Java/.Net com Metro mais tarde. Aconselho a verem a apresentação do Miguel Duarte em fullscreen pois contém notas da apresentação. Ele também nos enviou os benchmarks efectuados.

The Tale of the Fénix Architecture – Prof. João Cachopo

Scripting na JVM – Miguel Duarte

PHP suportado na JVM?

Na sessão de JUG Leaders em que estive no JavaOne, o Matt Thompson (que agora anda pelo Twitter) que é um dos directores do java.net, entre outras coisas, pode ter feito um anúncio.

Ao falar sobre linguagens que correm na JVM no meio sem querer falou de PHP seguido de um “Oops, I just made an announcement”. Se estaria a brincar ou não, a ideia de a Sun suportar oficialmente PHP na JVM não me parece totalmente descabida. Tal como foram buscar pessoal do python para trabalharem no Jython, não me admirava de o mesmo se suceder com o PHP.

O foco na máquina virtual como plataforma quase agnóstica à linguagem de programação está a ser e será de extrema importância. Tanto pelas opções que oferece aos actuais programadores java, bem como a capacidade que tem de atrair programadores e projectos que não correm actualmente na plataforma java.
Este último caso é especialmente importante no caso do PHP, que tem um número gigantesco de developers e

projectos de grande dimensão que podiam ganhar com os serviços enterprise que J2EE pode oferecer.

Não se resolve no entanto, aquela que é uma grande vantagem do php e outras linguagens que é a facilidade de deploy. Eu pessoalmente já

tive na escolha de tecnologia como factor de ponderação a impossibilidade de conseguir web hosting decente para java, enquanto qualquer hosting tem php e outras linguagens. Este é um factor que faz com que muita gente se inicie e especialize em php.

Mas seria certamente interessante ter o PHP suportado pela Sun. O desafio técnico não é grande, o pessoal da Caucho já provou isso com o Quercus.

2º Encontro PTJUG – 29 de Maio

Eu bem sei, passou um pouco mais de 2 meses desde o último evento mas já temos o próximo marcado.
Ocorrerá no Instituto Superior Técnico (anfiteatro do complexo) no dia 29 de Maio, das 18h30 às 21h30. Como da última vez, teremos 3 apresentações que pensamos serem interessantes e acabamos com pizza e coca-cola para todos podemos ficar a falar mais à vontade e de forma descontraída.

O plano de festas é o seguinte:

18:30 – Recepção e conversa fiada.
18:45 – Fenix, Uma aplicação web com uma arquitectura não-standard (João Cachopo)
19:30 – Interoperabilidade de Web Services com Metro e WCF (Paulo Traça)
20:15 – Scripting na JVM, Maior produtividade para a plataforma Java (Miguel Duarte)
21:00 – Jantar Pizza e Coca-Cola para todos.

Penso que vai ser uma sessão interessante por isso espero que gostem e apareçam. As inscrições são disponíveis no site do JUGEvents. As inscrições são obrigatórias para prevermos o espaço e comida.

E não se esqueçam de espalhar a palavra com amigos, pessoal da empresa, colegas da faculdade, familia e animais de estimação.

Queria agradecer o apoio sem o mínimo obstáculo por parte dos professores João Cachopo e João Rito Silva do IST que nos deram o espaço, e ao pessoal da Atlassian que nos

paga as

pizzas e bebidas a todos.


JavaOne – Rescaldo

Passaram alguns dias desde o fim do JavaOne e ainda não tinha relatado o último dia nem feito um resumo geral do que foi o evento este ano.

O último dia do JavaOne é já um dia de descompressão. Há menos gente, as pessoas estão cansadas e, para dizer a verdade, as sessões não eram tão apelativas.
Na noite anterior veio o aviso urgente de um surto de virus – o Norovirus – no complexo do JavaOne com grande alarme. Resume-se a um vírus que se espalhou rapidamente por mais de 70 pessoas que trabalhavam no recinto e que atacava o estômago de forma violenta. No entanto, penso que não foi isso que fez com que pouca gente tivesse ido ao último dia e disseram-me que era normal.

No dia fui apenas a duas sessões:

  • Using Java Technology at the World’s Largest Web Site
  • Esta apresentação foi feita por duas pessoas da Yahoo! e pretendeu dar uma ideia sobre como e para quê eles usam java no que eles chamam o maior site da web.
    Tendo em conta que a Yahoo! não é propriamente uma empresa Java, percebeu-se que usam Java mais para a camada de middleware sendo que os serviços que residem por baixo são coisas em JNI feitas noutras linguagens ou outros serviços desenvolvidos noutras linguagens.
    Um dos grandes desafios que sentiram foi a nível de performance, escalabilidade e disponibilidade. Para ultrapassarem este problema, eles usam uma versão deles alterada do Tomcat que lhes permite colocar vários processos à escuta do mesmo porto paralelamente, garantindo o que eles denominam de load balancing aplicacional. Não entraram em grandes detalhes além de dizerem que tentam sempre utilizar tecnologias opensource e que sejam comummente aceite (Maven e Hibernate, por exemplo).

    No entanto, penso que transpareceu

    a ideia que Java é pequeno, bastante pequeno, no mundo Y!, em relação ao C/C++ e PHP.

  • GlassFish Project Web Services Stack “Metro”: Easy to Use, Robust, and High-Performance
  • Tinhas algumas espectativas para esta sessão mas saíram goradas. Foi apresentada pelo Jitendra Kotamraju (o homem JAX-WS) e o Marek Potociar, ambos funcionários da Sun.
    Como alguns funcionários da Sun fazem actualmente, tentaram evangelizar

    tentando vender o Netbeans: as demos eram feitas todas com wizards do netbeans e com comentários de é tão fácil e gera tudo – já todos passámos pelas demos em que é tudo fácil :)
    A apresentação em si foi bastante superficial no que toca ao Metro e focou-se em coisas bastante específicas do JAX-WS, nomeadamente no envio de attachments grandes. Gostei da forma como é possível abrir streams para enviar e ir gravando bytes sem ter de guardar tudo em memória. Quer isto dizer que não preciso de meter um attachment todo numa mensagem e enviá-lo, ou de o dividir: o cliente faz stream para o servidor que o vai guardando no destino, sem ocupar mais memória do que a de uns quantos chuncks que tem temporariamente.
    De resto, não sobrou muita coisa de interesse na apresentação, pois perderam tempo a mostrar como se criavam webservices jax-ws que além de não ser novo, não é propriamente complicado de perceber para os casos simples demonstrados.

De seguida baldei-me às sessões finais. Estava cansado e algumas cobriam coisas que já tinha visto noutros dias (processamento multicore e segurança em web 2.0) portanto foi o resto para descansar.

O que fica do JavaOne

Olhando para trás com alguns dias de distância, o JavaOne é um evento certamente a participar. Aprende-se, trocam-se ideias e conhecem-se pessoas. Uma viagem destas vale muito mais dinheiro do que uma qualquer formação e sai a um preço semelhante (<2500€ TUDO) por isso é algo em que as empresas devem pensar um pouco mais. Mas afinal, o que fica do JavaOne 2008?

  • JavaFX ainda longe
  • Como disse num post anterior, a Sun tentou vender novamente o JavaFX dedicando-lhe muito tempo na keynote inicial. Ficou demonstrado que ainda há muito trabalho a fazer e nos corredores a conversa era mesmo de descrença em relação ao futuro contra Flash/Flex/Air e Silverlight. O JavaFX terá de ser bastante bom para me desviar do Flex/Air para RIAs.

  • O mundo multi-core está cá
  • Imensas sessões acabaram falando da necessidade de tirar partido das máquinas multicore que por aí polulam. Enquanto antes uma máquina 32 cores era muita fruta, agora facilmente conseguem-se máquinas com 4 ou 8 vezes mais cores mudando apenas os tipos de processadores. Falou disto na palestra de Fortress, que tem primitivas tipo fork-join na base, falou-se em Scala que usa o modelo de Actors também para isto, falou-se – obrigatoriamente – na palestra do Brian Goetz e na de memória transaccional. E isto apenas nas que eu fui.
    É realmente importantíssimo pois agora o problema deixa de ser tentar dividir os ciclos de processador entre as nossas threads para antes dividir as nossas threads por vários cores e dar-lhes trabalho. Escreverei mais sobre o fork-join noutra altura pois é muito interessante.

  • Linguagens dinâmicas
  • JRuby, Groovy, Scala e Javascript tiveram espaço em diversas sessões. Falou-se muito especialmente de JRuby e Groovy, sendo que Groovy e Grails parecem ter deixado as pessoas mais maravilhados. Eu que sou um gajo statically typed e chato, gosto muito do Scala.

  • Networking
  • Quando falo de networking estou a falar de conhecer e trocar ideias com outros developers, pois lá não há a conversa de recrutamento nem nada disso. É fácil falar tanto com o zé ninguém como o mais conceituado membro da comunidade java. As diversas festas no fim de cada proporcionam esse tipo de contacto e os cartões de visita são absolutamente obrigatórios de levar.
    Algumas das conversas mais interessantes que tive foram mesmo nesses fins de noite.

  • JUG
  • A nível do JUG o JavaOne foi excelente tanto a nível de contactos como de ideias para melhorar a nossa comunidade. Tive relatos de JUGs muito diferentes e que funcionam muito bem – imaginem-se as diferenças entre um JUG Norueguês e um Brasileiro.
    Esta experiência servirá para introduzir ideias no nosso JUG e com sorte fazer “coisas bonitas” e ficam os contactos com especialmente com o pessoal dos JUGs do Brasil e Paris, tudo boa gente.

Resumindo, vale a pena. É cansativo e longe mas altamente recompensador tanto para quem vai como para a empresa que patrocina. Por isso tentem convencer a vossa empresa, bem explicado podem ver a importância de um evento deste.

JavaOne dia 3 – melhores festas, menos sessões

Terceiro dia de JavaOne e o cansaço começa a fazer-se notar – este post está a custar muito mesmo, e ainda estou na primeira linha – mas a motivação para as sessões continua a ser a mesma. Continuo a aguentar nas filas gigantescas necessárias para ter acesso a qualquer sessão técnica. Como sempre, baldei-me à primeira general session e fui directo ao que interessa.

Top 10 Patterns for Scaling Out Java™ Technology-Based Applications

A minha primeira sessão do dia foi provavelmente a sessão mais cheia em que estive até ao momento. Foi apresentada pelo Cameron Purdy, fundador da Tangosol e actualmente Vice Presidente da Oracle que adquiriu a empresa dele. Para quem não sabe, Tangosol oferece produtos – o agora rebranded Oracle Coherence – para garantir escalabilidade de aplicações enterprise.
A palestra do Cameron não foi específica do produto dele – e ainda bem – mas antes sobre best practices de como escalar aplicações. Embora muitas das coisas que tenha falado sejam lógicas e simples, e inclusivamente falámos delas no primeiro encontro do PT.JUG na apresentação sobre Terracotta, realmente fazem sentido quando são explicadas. Ele definiu 3 requisitos que são necessários em qualquer aplicação enterprise, qualquer que seja a dimensão:

  • Disponibilidade
  • Escalabilidade
  • Reliability (não sei bem traduzir)

Embora outras dimensões tenham sido faladas, estas 3 são comuns a qualquer aplicação. De seguida falou-se de como garantir que as mesmas são conseguidas e falou-se de três pontos críticos:

  • Latência preditiva
  • Deve ser possível ter uma garantia de latência, um tipo QoS. A JVM não fornece nada deste tipo e a coisa mais próxima que podemos ter é a Java RTS.

  • Num sistema distribuído, podemos ter múltiplas cópias dos mesmo dados. Garantir que estamos a ler a versão mais recente e consistente dos dados existente é desafiante.

  • Durabilidade

Ficámos também com uma ideia do tipo de problemas com os quais nos podemos deparar no mundo real: o apresentador falou de sistemas com requisitos de latência na ordem dos 2 milisegundos. Verdadeiramente impressionantes.
A ideia geral

que ficou foi a identificação destes problemas, que os sistemas stateful são os que são realmente atingidos, pois em sistemas ou partes de sistema sem estado, a escalabilidade resume-se a clusterizar e aumentar o número de servidor.
Foi uma excelente apresentação e que me suscitou bastante interesse.

Advanced Web Application Security

Esta sessão foi apresentada pelo Joe Walker do DWR e por um especialista de uma empresa de segurança em aplicações web. O que reparei, muito porque sou uma pessoa que repara em coisas inúteis, é que o Joe Walker é na realidade o Ralph Fiennes do mundo geek, mas mais mexido.
Em relação à apresentação, foi bastante interessante. Além de conhecer de forma genérica a maioria dos ataques referidos, já sabia que o DWR era considerada a framework que mais cuidado tem com segurança. No entanto, a apresentação não falou do DWR mas antes das tipologias de ataques com bastantes ataques diferentes:

  • Cross-Site Request Forgety (CSRF)
  • CSRF consiste em fazer com que a página que o utilizador consulta faça um request a uma outra página, por exemplo numa iframe, e dessa forma retirar dados sensível. Suponhamos que o utilizador está logado num determinado site A, se visitar o site B e neste tiver uma iframe que faz um request ao site A para obter dados confidenciais, o ladrão – site B – consegue obter os dados da pessoa no site A. Apresentaram soluções para este problema, nomeadamente o uso da OWASP Servlet Filter ou, como é usado no DWR, o padrão double-submit cookie.

  • Cross-Site Scripting (XSS)
  • XSS é o ataque mais comum. Consiste em fazer com que um input do utilizador chege ao output da página sem ser tratado e, dessa forma, comprometer a segurança do site. Um exemplo é um utilizador inserir uma tag de script numa textbox e depois esse conteudo ser mostrado na página, que poderá executar então o código malicoso. E não apenas tags de script mas muitos casos estranhos em que se consegue correr código javascript – aprendi aliás que se consegue correr javascript num atributo style com style=”background:expression(executaCodigoMauzinho())”.
    Os autores propuseram a AntiSammy como método para impedir ataques de XSS.

  • Javascript Hijacking
  • Este ataque baseia-se na ideia de alterar o comportamento do javascript que a página execute, tirando partido das funcionalidades dinâmicas da linguagem javascript. Tipicamente acontece quando se usa JSON mal formado sendo que a solução é ter a certeza que o que é JSON está entre { }

Programming with Functional Objects in Scala

A apresentação de Scala era

das apresentações que mais esperava. Não tinha propriamente expectativas de aprender muita coisa – mesmo assim deu para aprender – pois já conhecia os princípios básicos da linguagem; mas queria ter o feeling de se isto é realmente o próximo Java. O apresentador, Martin Odersky, é provavelmente o maior especialista sobre o assunto: criador da linguagem Scala, é também o criador do actual compilador java (javac) e a implementação de generics introduzida no Java 5 foi inspirada no trabalho dele (se bem que a versão dele é bem melhor).
Ele explicou a maioria das features do Scala mostrando as diferenças que tem em relação ao Java e houve algumas coisas que se destacaram como o modelo de actors para concorrência (que por trás usa a framework fork-join, tema recorrente no JavaOne deste ano), traits e mixins que foram explicados de forma simples mas que para quem não sabe os problemas da herança múltipla pode não perceber a utilidade logo de seguida.
Esta sessão foi também interessante pelas perguntas feitas no fim. Falou-se de OCaml e Haskell, nomeadamente do facto de Haskell ser bastante mais avançado na forma como trata tipos.

Fiquei no entanto com a ideia que me acompanhou o resto do dia na cabeça, que foi o Scala como o próximo Java. Sendo esta uma corrente, detecto a corrente do pessoal que quer mudar o java para ficar algo tipo Scala, introduzindo closures e coisas semelhantes; e detecto o pessoal que prefere deixar a linguagem como está, simples e cheia de verbosidade. Tenho uma preocupação real de daqui a 5 anos estar a falar sobre o próximo Scala e penso que esta evolução do modelo de programação mainstream na JVM deve ser pensado de forma estratégica e não apenas por níveis. Algo para pensar e discutir no futuro.

Pimp My Build: 10 Ways to Make Your Build Rock

De seguide devia ter ido a uma sessão sobre java performance mas acabei por ficar no pavilhão de exposições a falar na banca da Jetbrains com o David Booth e outros JUG Leaders.
Acabei por fugir para ir para a sessão sobre como abonitar os builds com Maven e Ant. Na realidade esperava uma apresentação diferente, que me desse alguns padrões e regras de como fazer boa gestão de configurações e builds. Ao invés disso, tive uma sessão bastante divertida e bem apresentada mas com um conteúdo que realmente não adicionou grande conhecimento ao que eu já sabia. Foi, quanto mais, agradável.

De seguida fui para o Thirsty Bear, que é o bar onde se encontra imensa gente do JavaOne, para a festa da JetBrains. Eles tentaram não fazer uma festa normal mas criar alguma conversa com o pessoal sobre o que não gostam no IntelliJ ou o que gostariam de ver implementado. Acabei por ter oportunidade de ficar a falar com parte da core team do IntelliJ sobre o futuro de uma vista bastante futurista: falou-se do tema do Scala, de novas formas de programar (i.e. processamento de linguagem natural, reconhecimento de voz, etc.), linguagens de modelação executáveis, etc. Foi excelente a sensação que a equipa é bastante aberta a ideias, mesmo de pessoas que não usam assim tanto o IntelliJ, como é o meu caso.
Além de tudo, patrocinaram a cerveja e buffet e ofereceram uma das t-shirts mais fixes que vi nos últimos tempos. Tentarei colocar um foto aqui no blog.

Meet the Java™ Posse

Toda a conversa e cerveja com o pessoal da Jetbrains fez com que não conseguisse ir ao BOF sobre Guice, o que me arrependo um pouco. Acabei por ir ao BOF do Java Posse, acompanhado do David Booth da JetBrains e onde encontrei um grupo enorme de JUG leaders. A sessão foi o que se esperava: divertida, com cervejas frescas à descrição no fundo da sala – isto sim é uma sessão técnica, com o barulho de caricas a saltar =)

O fim da noite foi feito com a ida à festa da QCon, da qual alguém, provavelmente brasileiro, tem fotos. Foi uma festa muito barulhenta e confusa e de seguida voltei para o Thirsty Bear com o pessoal brasileiro, o António Gonçalves (expert nos JSRs do JPA 2.0, J2EE 6 e EJB 3.1 e que fala um português excelente) e o Emmanuel Bernard (expert no JSR de Beans validation) que ontem tinha apresentado a sessão sobre beans validation. A conversa foi bastante boa e falou-se sobre o JCP, os nossos países e outras questões técnicas e não técnicas.
Foi uma noite mesmo muito boa.

Não queria deixar de deixar uns apontadores para os colegas brasileiros com quem tanto tenho privado nestes dias:

JavaFX e o forcing da Sun

Tal como no ano passado, também este ano a Sun tem tentado

fazer um push muito grande da tecnologia JavaFX.
Começou com a sessão de abertura do evento e com a uma afirmação um pouco surreal que nada daquilo era possível fazer com outras tecnologias.
A realidade que eu vejo é que

Flash, Flex, Air e Silverlight estão bem à frente do JavaFX em termos de aceitação, complexidade de aplicações e efeito wow. O único uso em que vejo lógico o JavaFX é para os actuais programadores Swing, que não são assim tantos. E mesmo aqui penso que preferia uma solução com Flex e java a funcionar por baixo com BlazeDS ou GraniteDS.

Outra questão é a integração do JavaFX e do JavaFX Script com as linguagens dinâmicas existentes na JVM actualmente (JRuby, Grooby, Jython, etc.). A questão de como usar estas linguagens no JavaFX da forma como são usadas hoje em dia para facilitar o desenvolvimento de applets foi levantada ontem na sessão do Script Bowl mas ficou sem resposta e causou alguns risos nos oradores.

A ideia geral com que fico e depois de falar com muita gente, tendo todos a mesma ideia, é que JavaFX é ainda pouco maduro em relação à concorrência e não tem lógica fingir que é a melhor coisa à face da terra. Tem a vantagem de ser open-source – penso eu, não verifiquei -, que das outras apenas o Flex é. Mas não chega.