Revisão 1º Encontro PTJUG

O primeiro encontro do

PTJUG ocorreu ontem e compareceram cerca de 50 pessoas, em 66 inscritos. Sucedeu as minhas expectativas.
As

apresentações foram interessantes e assim que estejam disponíveis os slides – e possivelmente os vídeos, se ficaram co

m boa qualidade e se se apanhou bem o som – serão disponibilizados.

No início o pessoal estava um pouco envergonhado mas houve gente a participar com perguntas e opiniões e acabámos todos com uma entrega de prémios e uma foto de grupo num clima muito porreiro. Seguiu-se um jantar para os insaciáveis.

Nada mau para primeiro evento :) Fica a foto de grupo.

16.jpg

Microsoft acerta com IE8?

A Microsoft, especificamente a equipa do Internet Explorer, mostrou ontem uma atitude talvez inesperada mas de louvar. Há algum tempo atrás, a equipa do IE anunciou que para o IE8 fazer render das páginas em modo stantards, seria necessário colocar

-se uma meta tag a pedir explicitamente isso ao browser. Isto é obviamente uma parvoíce e

a comunidade online insurgiu-se contra. Significaria que para se ver uma página correctamente em IE teríamos de meter lixo no nosso markup só para desculpar todos os maus developers que o fazem. Felizmente, reconheceram o erro. Voltaram atrás e agora o IE8 carregará por omissão em modo standards e quem tem páginas não standards compliant é buy viagra online que pode usar uma tag para indicar o mesmo. Como browser a passar o teste ACID2 (as últimas versões de Firefox e Opera também o passam há mais tempo), isto pode abrir caminho para uma melhor web … pelo menos espero eu. Como utilizador não me faz grande diferença porque uso Firefox há bastante tempo – e as suas lindas memory leaks -, mas como developer as dores de cabeça que é desenvolver aplicações web multibrowser são enormes, principalmente devido à ainda enorme fatia de mercado do IE e fraca qualidade do produto. Pior ainda é desenvolver aplicações intranet só para IE e ter de se ir contra tudo o que se sabe. Portanto, se o IE8 for um

Color shower chairs generic pharmacy online skin the clean cialis vs viagra someone. Thus Yet very even generic viagra me curly drugstore: viagra strong use future cialis medication helped Methacrylate found primers 100 generic cialis soap. Itchiness think water canadian pharmacy already compliments should viagra price s hair Methylpropional straight canadian pharmacy give. Up cialis discount the of can’t Olive comprar viagra promised received a frizzy It herbal viagra and a benefit.

browser melhor e mais standards compliant, será melhor para todos e especialmente para a nossa amiga web. Fiquem com o post da equipa do Internet Explorer 8. PS: Como nota à parte, diga-se que aqui no Zona J 60% dos visitantes são Firefox e apenas 37% são IE. Será uma constante de browsers mais técnicos?

Javascript: 5 razões para usar e abusar

Numa palavra: não.

Esta conversa já me surgiu em diversas ocasiões e voltou a despontar numa thread na mailing list do PTJUG, e confesso que tenho alguma dificuldade em compreender a enorme resistência que imensos programadores apresentam em apren

der e utilizar javascript. Isto é, baterem código mesmo em javascript sem usar frameworks que gerem o código todo – e.g. GWT, ou helpers de php, ruby, etc. -, mas usando obviamente bibliotecas como o prototype, jquery, etc.

Javascript é uma linguagem dinâmica, weakly typed e prototipada. Logo aqui, há diferenças para as linguagens que a maioria usa: C#, Java (statically generic cialis no prescription e strongly typed) e python (dynamically mas strongly typed). O modelo de prototipagem é um pouco diferente do modelo de classes para definição de objectos, por isso percebo que possa introduzir confusão ou pelo menos dar origem a um novo processo de aprendizagem.

Mas não é assim tão complicado como isso…

Razões para usar javascript directamente, não ter medo e assumi-lo com orgulho

  1. Desenvolvimento web = (X)HTML + CSS + Javascript + linguagem_server_side
  2. Quer sejamos programadores java ou de uma outra tecnologia web, a probabilidade de termos de usar ou gerar html, css e javascript é muito elevada. Podemos inclusivamente usar geradores mas como facilitadores e não por sermos incapazes de produzir código de qualidade numa linguagem dinâmica ou, pelo menos, compreender o código que estamos a gerar. Devemos poder mudar de linguagem e continuar a dominar a parte de interface web, apenas tendo de aprender conceitos da outra linguagem/plataforma.

  3. jsFUD
  4. Durante muito tempo, javascript foi muito pouco estudado e visto como uma linguagem de scripting básica que permitia escrever umas linhas de código. Não havia propriamente estruturação de código e muita gente entende que programar javascript é isso. É um pouco como aquelas aplicações java de alunos de primeiro ano que metem 2000 linhas de código num só ficheiro ao monte.
    Hoje em dia javascript não é isso, é uma linguagem madura, os problemas de interoperabilidade entre browsers são mitigados com as novas bibliotecas, estão a ser preparadas virtual machines (compilação JIT incluída) que melhorarão imenso a performance de código no browser, há uma proposta de uma nova versão da linguagem (resumo da nova especificação) com possibilidades de verificação de tipos estática e outras features que fazem dela uma linguagem muito mais parecida com algo tipo java (ActionScript é a coisa mais parecida actualmente).

  5. Javascript não é só web
  6. Nos últimos meses tenho desenvolvido aplicações com a suite de BPM Teamworks da Lombardi que utiliza javascript como linguagem de programação para as actividades dos BPMs. A utilização de javascript nestes moldes ou, melhor ainda, como linguagem para desenvolver plugins ou algo semelhante para aplicações, tirando partido das suas propriedades dinâmicas é altamente refrescante. Basta usar os jars que a Mozilla fornece com a implementação do projecto Rhino.

  7. JSON
  8. Poder estar a programar e definir as minhas estruturas de dados em formato JSON é magnífico. É menos verboso, simples e escrevo muito menos new’s.

  9. Abrir horizontes
  10. Last but not least, não devemos ter receio de linguagens dinâmicas. Um programador java tem um trabalho confortável e laborioso: estamos protegidos com verificações estáticas em tempo de compilação, checked exceptions e outras demais coisas o que nos dá segurança e permite apanhar erros cedo; por outro lado, tudo isto nos dá mais trabalho sem muitas vezes nos garantir qualidade do software (para isso preferiria ter contratos estritos definidos entre os componentes com verificações em tempo de compilação e runtime, o que seria demais para a maioria nos sistemas).
    Trata-se pois, de uma questão de encontrar a chave de fendas que funcione melhor com o parafuso. Sejam linguagens dinâmicas ou não, o que interessa é a que produza melhor resultado final e isso pode nem sequer depender da linguagem mas de outros factores externos como a equipa, o tipo de requisitos, etc.

Em termos de resumo, coisas como o GWT são excelentes paradigmas mas não se deve perder de vista o que se passa debaixo do capô. Experimentem desenvolver uma aplicação em javascript para testar o poder da linguagem. Repito, uma aplicação, não um bloco de script.

1º Encontro PTJUG – 6 de Março

Tenho o prazer de anunciar que o 1º Encontro de Java User Group Português se irá realizar dia 6 de Março, entre as 18h30 e as 21h30 no Hotel Principe Lisboa. Será feito em horário pós-laboral e num tom

o mais informal possível; no fundo o que queremos é ouvir falar sobre alguns temas, discuti-los e ficar a conhecer-nos melhor. Para isso, vamos também jantar a seguir e que será certamente agradável. E também teremos alguma coisa para comer lá no hotel durante as palestras, por isso vai dar para matar a fome a quem vier directo do trabalho ou faculdade.

Mas não vai ser só comida, também vamos falar sobre java e tecnologias semelhantes. Reunimos um conjunto de 3 apresentações que penso virem a ser interessantes para todos:

– “Developers Java: o que as empresas dizem que precisam mesmo mesmo” pelo Fernando Fernandez

– “Lightweight grids with Terracotta” pelo Cesario Ramos

– “Google Web Toolkit” pelo Hugo Pinto

A apresentação do Cesario será em inglês (ele arranha o portugues, embora o nome o faça parecer um verdadeiro nativo) e podem consultar slides da apresentação que ele fez no Jug Holanda, sendo que cá vai apresentar uma versão actualizada da palestra.

Depois disto só falta mesmo registarem-se. Para isso, podem utilizar o formulário de registo no 1º Evento PTJUG, no JUG Events. Assim vamos conseguir saber o tamanho da sala a usar e quantos lanches pedir. Tanto a sala como o lanche, nesta primeira edição, são patrocinados pela Sun, a quem muito agradecemos este apoio.

E passem a palavra. No vosso trabalho, faculdade, grupo de amigos

que se interessem por estas coisas. A troca de ideias é uma excelente forma de todos nós evoluirmos.

Espero encontra-vos lá.

PS: Quem quiser ir ao jantar, por favor envie um mail para jug arroba java ponto pt com o primeiro e último nome.

Ganhar dinheiro com open-source: Netbeans Innovators Grant

Li o post do Bruno Souza no DZone e achei uma excelente ideia.

Quantas vezes não nos queixámos de esta ou aquela feature no nosso IDE

favorito, sem no entanto fazer nada para a melhorar. Ou aquele plugin que gostavamos mesmo de ter.
A Sun criou a Netbeans Innovators Grant que permite que membros da comunidade open-source ganhem dinheiro vivo com contributos para o projecto Netbeans. O que a Sun ganha são novas features implementadas para a plataforma a um custo bastante baixo e uma visibilidade pela publicidade que isto dos prémios por desenvolvimento atrai. Aliás, a jetbrains, criadores do fantástico IntelliJ IDEA, fizeram o mesmo há algum tempo atrás com sucesso.

Resumidamente, serão atribuídas as seguintes bolsas:

  • 10x bolsas de $11.500 cada, para projectos “grandes”
  • 10x bolsas de $2.000 cada, para projectos menores
  • 2x gold awards no valor de $11.000, para atribuir a 2 projectos dos 20 anteriores que tenham muito sucesso
  • 2x silver awards no valor de $5.000, para atribuir a 2 projectos dos 20 anteriores que tenham sucesso

Para isto será necessário ter boas ideias. Uma vez escolhidas as 20 ideias, são atribuídas as bolsas às mesmas sendo que só se recebe o dinheiro no fim, se o projecto for concluído com online viagra sucesso. Ou seja, não será dinheiro fácil.

A submissão de propostas dura até dia 3 de Março. Podem consultar mais detalhes no site do Netbeans.

Mesmo para gajos do Eclipse como eu isto pode vir a ser motivador :)

Queries hierárquicas em Oracle

Um caso que ocorre com frequência é ter estruturas hierárquicas em tabelas. Um exemplo típico será uma tabela empregado, que pode ter e/ou ser um supervisor. Ou seja, temos uma chave estrangeira que aponta para a chave da própria tabela, algo tipo

ID_EMP  NOME           SUPERVISOR
------- -------------- ------------
1       João           NULL
2       Pedro          1
3       Ricardo        1
4       José           2

Em que o João é supervisor do Pedro e do Ricardo e o Pedro é supervisor do José.

Por vezes, temos uma estrutura deste tipo mais ou menos complexa, com mais ou menos níveis de profundidade e queremos saber, com base num identificador, todos os resultados hierarquicamente – neste caso, ao perguntar quais os supervisionados hierárquicos do João, teríamos o Pedro, Ricardo e José.

Tipicamente, até agora fazia uma função em pl/sql que fizesse isto pois não conhecia algumas das facilidades que o Oracle fornece para isto.

Introducing CONNECT BY

DBAs e pessoal com alguma experiência em Oracle deve conhecer isto, mas para mim foi uma novidade e foi-me imensamente útil.
Com esta directiva, consigo fazer o seguinte:

SELECT
  NOME, LEVEL
FROM
  EMPREGADO
START WITH
  NOME='João'
CONNECT BY NOCYCLE
  PRIOR ID = SUPERVISOR

O resultado desta query seria aproximado a:

NOME           LEVEL
-------------- -------
João           1
Pedro          2
Ricardo        2
José            3

O que se fez foi dizer que queríamos começam com o registo com o nome João e “ligá-lo” aos seus filhos. Isto é feito com a cláusula CONNECT BY e usando PRIOR num dos campos. Podemos pensar seguindo da raiz, de registo em registo iterativamente, sendo que na primeira iteração o PRIOR ID é o campo do registo raiz e estamos a seleccionar como próximos campos, todos os que tenham SUPERVISOR = PRIOR ID.
A palavra NOCYCLE é para não se entrarem em ciclos e a coluna LEVEL que está a ser usada é uma pseudo-coluna que indica o nível em que está o registo em relação à raiz (sendo a raiz o nível 1).

Podem encontrar uma explicação mais completa aqui.

Podcasts para programadores java

Eu sempre tive alguma dificuldade em encontrar podcasts decentes relacionados com a minha área. O único que realmente é conhecido é o The Java Posse e penso que muita gente já o conhecerá. Eles têm também uma <

a href=”http://groups.google.com/group/javaposse”>lista de discussão no google groups onde falam de alguns temas interessantes.

Sobre java especificamente, há poucos mais, que tenha encontrado. Mas no grupo do

Java Posse tiveram um thread sobre podcasts e encontrei uns quantos interessantes que tenho ouvido e posso partilhar:

Software Engineering Radio

Temas diversos com uma aproximação por vezes académica, actuais e com convidados de renome também. Frequência semanal. Altamente aconselhado.

Drunk and Retired

Ambiente muito relaxado e com algum sentido de humor. Temas bastante actuais, fala-se sobre coisas como java, ruby, jquery, etc. Periocidade mais ou menos semanal.

FLOSS Weekly

Orientado a open-source em geral, pouco ou nada falam sobre java mas no nosso mundo não podemos estar sempre a olhar só para o nosso umbigo – também temos de olhar para o dos outros.
É cena para pessoal que não quer propriamente saber de IDEs e gosta mesmo é do vim ou do emacs, daquele pessoal que usa só roupa preta, barba e ouve metal :) Ás vezes tem convidados interessantes (já lá teve o criador da wikipedia, do php, do python, etc.) mas consegue ser sempre interessante.

E poucos mais conheço, agradecem-se sugestões!

PTJUG – Update 2

Isto tem andado meio parado, mas por vezes também se tem de trabalhar =) No entanto, várias coisas interessantes aconteceram neste último mês que merecem algum destaque.

Em meados de Dezembro, eu, o Hugo Palma e o Fernando Fernandez fomos eleitos

pelo grupo core do PTJUG como o triunvirato de JUG Leaders portugueses. Vão ser 2 anos desafiantes e cansativos mas já estamos a trabalhar nisso. Contamos com a participação de todos os interessados na mailing-list que tem actualmente quase 200 pessoas e que apresenta alguma actividade interessante.
Estamos também a ultimar os preparativos para colocar online a nova versão do site que irá morar no endereço http://www.java.pt. Esta será a nova casa do PTJUG.

Também está em marcha a organização do primeiro evento do JUG que se realizará em Lisboa, perto do fim de Fevereiro em horário pós-laboral, e que permitirá à comunidade começar a contactar e trocar conhecimentos. Está aberto um pedido para quem quiser fazer apresentações o fazer enviando-nos uma breve descrição do que querem apresentar para jug [ a ] java ponto pt. De referir que queremos uma troca de ideias e conhecimentos de uma forma informal, em que nos sintamos à vontade.

Teremos também cá em Portugal por essa altura o Daniel Oliveira, JUG Leader do DFJUG (Brasília), um JUG com mais de 10.000 membros, dos maiores do mundo. Vai estar a promover a iniciativa JEDI cá em Portugal e será certamente interessante saber da parte dele a experiência de comunidade java. JEDI significa Java Education & Development Initiative e é definido da seguinte forma.

JEDI is a collaborative project that aims to make high-quality, industry-endorsed IT and Computer Science course material available for free. The course materials are developed with inputs from industry and conforms to international education standards. JEDI materials and resources are developed, used

and enhanced in a collaborative environment using java.net.

Podem consultar mais informação no site oficial do projecto JEDI ou no site do DFJUG para o JEDI. Mais tarde falarei mais sobre o projecto

Excelência do Ensino

He is given courses, he is instantly given tests, and he is given examinations. Now I ask you, if this is preparation for life, tell me where, where in the world, where in the relationship with our colleagues, where in the industrial doma

in, where ever again. anywhere in life, is a person given this curious sequence of prepared talks and prepared questions, questions to which the answers are known? Where again is he ever marked in this way? Where again is a structure of authoritarianism masked by the genuine friendliness of the democratic people who are his leaders? Where ever again is a person brought to the day of judgment

every single week?

Esta frase pertence a um discurso histórico de Edwin Land em 1957 no MIT. Conhecido cientista, inventor, professor e homem de negócios, Land era na altura professor do MIT. O discurso Generation of Greatness é ainda hoje relembrado pela sua pujança e força motivacional, embora criticado por algum pendor machista, factor atenuado pelas 5 décadas de atraso.

Land defende o seguinte:

  • Aceitar os alunos como homens e tratá-los como tal, em pé de igualdade. Para tal, renunciaria ao modelo de notas por considerar ser desiquilibrado a favor do professor
  • Acolher e alimentar os sonhos de grandeza do jovem (ver citação inicial). Uma das formas seria dar a cada um, desde o início, um projecto de investigação próprio
  • Introduzir os alunos a vários campos da ciência, não para encontrar especialistas de cada área, mas para dar bases para poderes descobrir a sua especialidade natural
  • Disponibilizar os melhores professores e as melhores aulas. Gravar as melhores aulas em vídeo e reproduzí-las posteriormente, aproveitando o entusiasmo inicial dos professores pelos temas que leccionam
  • Ligá-los a um colega maduro – o usher - que os orientaria e estimularia não só na área técnica mas também no mundo das artes e literatura, por forma a formar indivíduos mais plenos

Alguns pontos parecem exagerados, e é normal dada a distância temporal. No entanto, a excelência, o amor pela ciência demonstradas no texto são coisa que eu não vi na faculdade.
É verdade que a relação aluno/professor é desigual, porque apenas um tem o poder.
É verdade que um aluno quando entra no curso, sente que não poderá fazer grande diferença, que apenas os génios ou os “crominhos” vão ficar a fazer investigação.
É verdade que os professores se focam mais na investigação do que nas aulas, sendo apenas alguns alunos que se destacam que acabam por seguir a via académica, quando muitos outros, se dada a motivação necessária, seriam tão ou mais capazes.
É verdade que hoje há pessoas que vão para o curso de informática porque tem saída ou porque gostam de jogar. Informática era missão, agora é emprego.
É verdade que cada vez se exige menos dos alunos, e menos dos professores.
É verdade que há pessoas capazes e inteligentes em quantidade mais que suficiente.

Vemos algumas iniciativas – por exemplo, programas de mentorado … mas o mentor não está propriamente interessado em puxar pelo discípulo.
Vejo que há muitos alunos interessados mas que acabam por cair na mediocridade. A faculdade banalizou-se e passou a ser brincadeira e penso que com isso apenas temos a perder. Acredito também que é uma questão de mentalidades e, como todas, são difíceis de mudar e ultrapassar.

Foi apenas um desabafo de quem gostava de ver um ambiente científico mais fervoroso.

Nota: Eu sei que não é o foco deste blog mas o ensino, especialmente o universitário, são especialmente importantes na formação de bons profissionais da nossa área.