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
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
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.
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)
- Cross-Site Scripting (XSS)
- Javascript Hijacking
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.
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.
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: