Vitor Pamplona

Innovation on Vision: Imaging , Enhancement and Simulation

Reconstruindo muitas Rodas

 Mal da comunidade Java: Ao invés de utilizar as bibliotecas existentes em outras linguagens, criando apenas ports (JNI) para java, os desenvolvedores preferem re-implementar. Algo muito semelhate ao que a Microsoft faz: re-implementa tudo.

Todo o processamento gráfico 3D, 2D, além de carga e execução áudio, no Dot Net é feito sobre o Microsoft DirectX. Da mesma forma, toda a biblioteca para a criação de telas é o Windows Forms. Obviamente, DirectX e Windows Forms não funcionam no Linux, obrigando a galera do Mono a fazer malabarismos com OpenGL e GTK / QT / etc. No entanto, observe que a OpenGL é o básico do básico para trabalhar com gráficos 3D, e o DirectX oferece muito mais do que o básico. Por mais ativa e persistente que seja a comunidade do Mono, eles não conseguiriam recriar todo o suporte que o DirectX tem em Linux. Assim, apelaram para os ports, juntaram os melhores projetos, as melhores bibliotecas e disponibilizaram os mesmos recursos que existem no Windows, para Linux, com muito mais opções e liberdade para o desenvolvedor.

Veja, a primeira opção deles não foi recriar, foi portar. Exatamente o inverso do que a Microsoft e a Sun fazem. O resultado desta diferença é que, enquanto no mono temos diversas opções estáveis para desenhar interfaces, em java temos apenas uma, o Swing. Felizmente, aos poucos os ports de GTK, QT, WxWidgets para java ficarão maduros e estáveis (Sem esquecer do SWT que já é estável a muito tempo). A luta agora é contra a cultura de que só coisas feitas em Java são estáveis e portáveis.

Cheguei essa conclusão após pesquisar sobre formas de trabalho com OpenGL na Boo, onde encontrei o super poderoso Tao Framework para Mono. O Tao faz o port para Mono de:

  • OpenGL: possibilita trabalhar com 3D;
  • OpenAL: a melhor e mais utilizada para trabalhar com áudio em jogos;
  • FFMpeg: a melhor api para vídeos do mundo linux. Grava, lê em qualquer formato, com qualquer codec, até os da Microsoft e mp3 que são proprietários.
  • SDL: Simple DirectMedia Layer, acesso de baixo nível a áudio, teclado, mouse, joystick e hardwares 3D
  • ODE: Simulação de dinâmica de corpos rígidos (Física) em alta performance.
  • FreeGlut: A mais simples e mais utilizada biblioteca de interface para criar protótipos
  • Lua: Binding de scripts para Lua, muito utilizado em jogos
  • CG: Ferramentas para programação direta na placa de vídeo. Extremamente utilizado em jogos.
  • PhysicsFS: Biblioteca para trabalhar com arquivos virtuais
  • Devil: A melhor biblioteca para carga e manipulação de imagens do mundo opensource.
  • GLFW: Similar a FreeGlut.

Embora já existam ports destas libs para Java, poucas pessoas as utilizam. Na verdade, poucos desenvolvedores Java sabem que podem utilizar um port para uma lib em outra linguagem. A maioria nem considera esta opção. A verdade é que a maioria dos programadores Java tem medo dessas abordagens, eu diria até que medo do C + + (que é linguagem da maioria destas APIs).

Quando falei que o Netbeans é feio, uma pessoa disse que usar SWT seria voltar no tempo. Como se o Java fosse uma evolução, o que não necessariamente é verdade. SWT é tão portável, ou até mais portável que o Java. Quando falaram que poucos usam SWT, esqueceram de ver que o Eclipse é feito em SWT e até hoje é a IDE java mais utilizada em vários SOs. Outro me perguntou se as GUI Toolkit que citei rodavam em diversos SOs sem alterar nenhuma linha de código. Ora, a QT roda, sem altear nenhuma linha de código, em Windows, Linux, MacOS, Windows CE, Solaris, FreeBSD, HP-UX, AIX, Amiga e IRIX (Já ouviu falar em todos eles?) e se você alterar alguns detalhes ainda roda em Linux Embarcado. O GTK é usado por 27 linguagens, rodando em Windows, Mac e todos os Unix-based OS. Certamente foram muito mais testados do que o mero Swing, que as vezes não roda nem em Mac OS.

Fica aqui minha crítica aos javeiros puristas. Java não é a única solução. Há muita coisa pronta. Tirem os seus cabrestos e olhem para os lados. Até lá, não critiquem a Microsoft, vocês não são diferentes dela.

The following pages are talking about "Reconstruindo muitas Rodas":

Posted in Dec 4, 2008 by Vitor Pamplona - Edit - History

Showing Comments

O texto estava indo muito bem até o último parágrafo. Obviamente Java não é a única solução, e também é claro que existem muitas coisas prontas.

Agora, falar pra tirar o cabresto.... Isso pra mim é estranho vindo de você. Olhando no outro blog, tem um comentário antigo de um cara que falava exatamente isso sobre você. Você ontem trabalhava com A, então A era ótimo e o resto não prestava. Depois passou a trabalhar com B, daí B já é ótimo e o resto não prestava, e por aí vai. Aí eu te pergunto, onde está o cabresto? Será que você não está amarrado nele não?

- - max

- - Posted in Dec 19, 2007 by 200.198.212.195

Vitor, vc já comparou a quantidade de projetos que usam SWT e os que usam Swing? Acho que já né? Mas não pensou nisso antes de escrever...

Lógico que que a primeira resposta que vem em mente quando se pensa em SWT é Eclipse e mais ' quase ' nada... Quando disse voltar atrás, me refiro a necessidade de levar outras bibliotecas adicionais a JVM, como no caso a SWT... E foi justamente por isso que SWT não pegou. Agora, se Swing é feio, SWT é horrível, pois não me dá as opções que Swing dá (vide Look and Feel) de mudança de interface. Agora, não satisfeito com o Swing (nem com o SWT), ótimo! Monte um projeto de um ' port ' para outra biblioteca gráfica como existe no mono e seja feliz. Não é preciso tanto drama. (-:




- - Paulo Melo

- - Posted in Dec 19, 2007 by 189.10.3.13

Ah, só mais uma coisa. Não sou javanes xiita e também vejo soluções em outras plataformas linguagens...

- - Paulo Melo

- - Posted in Dec 19, 2007 by 189.10.3.13

Exato Max, eu aprendi com meus erros e eu falei isso naquele post.

Paulo, até parece que quando você fala que SWT é Eclipse isso significa pouca coisa. O número de projetos usando uma tecnologia não me interessa. Me diz quantos projetos bem conhecidos usam Swing? Pega essa lista aí e dá uma olhada na maioria das interfaces: http://java.sun.com/products/jfc/tsc/sightings /. Chega a ser revoltante.

Você não entendeu meu ponto. Eu não quero ter LookAndFeel. O LookAndFeel tem que ser o do sistema operacional e ponto, se o usuário quiser mudar, muda do sistema inteiro. Se você ficar mudando de LaF a cada aplicação só o que vai ganhar é um cliente irritado. Você continua pensando só no desenvolvedor. Pense no usuário.

- - Posted in Dec 19, 2007 by Vitor Pamplona

Agora você atingiu uma mosca com arco e flecha. Sou programador C + + e vivo monitorando as comunidades por aí. Você acertou. De todas elas a comunidade Java é a que mais reinventa a roda, muitas vezes sem ganho algum para quem usa os projetos. Ela tem uma espécie de paixão pelo purismo que a deixa cega.

Projetos como esse lixo: http://www.go-java.com/blog/2007/12/14/1197652925259.html, onde o foco é o " 100% Java PDF renderer and viewer " são completamente desnecessários. Ao invés disso, façam um PDF Writer que será muito mais importante.

- - Cristiano

- - Posted in Dec 19, 2007 by 189.10.213.56

Cristiano...

Referente a biblioteca " lixo " que voce se referiu, a grande novidade é existir uma biblioteca de vizualização e IMPRESSÃO (em java as solucoes são TODAS pagas) com licença LGPL é a novidade...

Nao sei se vc leu o blog do Joshua... mas até hoje o que se tem por ai é apenas o tal do writer que vc se referiu (o nome se chama iText, tem para java e. net) que é GPL...

Voce sabe a implicação de um codigo 100% GPL? entao de uma lida na licencça e verá que coisas como " vender uma aplicação que depende exclusivamente para uma funcao de uma biblioteca GPL DEVE ser liberada como GPL ", é isso que é a novidade...

Existe uma biblioteca que faz isso... a JPedal... e é bem paga (e muito boa HEHEHE eu uso) Vi com bons olhos a iniciativa da Sun...

Imprimir PDF em java é um parto... e agora ficou melhor:)


- - Dyego Souza do Carmo

- - Posted in Dec 21, 2007 by 201.40.64.66

Vitor...

Quanto o Laf ter que ser do sistema operacional... voce está indo na contra mão do mercado que quer botar uma " casca " em tudo... veja as aplicações RIA... e verá isso... o sucesso do myfaces sobre o orkut É isso... eh puro LAF... personalizar é a palavra...


Agora se voce disser que o Metal é um LAF feio... ae tenho que concordar.

Quanto a interfaces do Swing... qual é o seu problema? Voce ainda é do tempo em que " programadores que sao programadores devem escrever GUI na mão "?


Código de tela é EXTREMAMENTE descartável, para que vai se preocupar com isso? deixa uma Builder fazer isso para voce... um VEP, um QTDesign um Matisse fazem tudo... para que ficar revoltado com listinha de interfaces? Isso é procurar pêlo em ovo...

Você é bem mais esperto que esse argumento...







- - Dyego Souza do Carmo

- - Posted in Dec 21, 2007 by 201.40.64.66

myfaces não HEHEHEHE MySpaces!!!!

- - Dyego Souza do Carmo

- - Posted in Dec 21, 2007 by 201.40.64.66

Dyego, concordo com o Cristiano. Já existem inúmeros leitores e escritores de PDF, em várias linguagens. Porque ter mais um? Acho que o PDF Writer que ele se referiu é, na verdade um PDF Editor, o qual só existe 1 projeto opensource que edita pdfs.

A WEB coloca uma casca em tudo. Aplicações Web são bem diferentes de Desktop. E Não, eu não voto mais por fazer telas na mão, na verdade isso pra mim não importa. A minha performance é a mesma, usando builders ou fazendo na mão.

[] s

- - Vitor Pamplona

- - Posted in Dec 21, 2007 by 201.2.220.90

Hum... entendi...

Mas me conte... um PDF Reader para java em licenca LGPL.... existe mais algum?
Lembre-se da parte da IMPRESSAO do PDF.... só ver é besteira... o que me deixou feliz foi a impressão.

Quanto a aplicações web serem diferentes do desktop... a Adobe não acorda (Apollo), nem a Microsoft (Silverlight 1.1)... muito menos a Sun (JavaFX)... e nem o Google (Google Gears, sei que nao eh da mesma classe mas tem o mesmo proposito)...

Existiu uma correria Desktop - > Web.... e cada vez mais tem-se feito ao contrario.. agora o que estão fazendo é pondo0 um " apletão " dentro do browser e chamando de Flex... de Silverlight... de JavaFX.... no final... é um programa (a lá ActiveX) rodando dentro de uma janela de browser.... vc tem o pior dos dois mundos... a casca do browser enchendo saco e os megas e mais megas de downloads dos runtimes...



- - Dyego Souza do Carmo

- - Posted in Dec 21, 2007 by 201.40.64.66

A parte de voce dizer que vc produz na mesma velocidade / qualidade fazendo GUI's na mão ou usando um GUI Builder (Matisse, QTDesign...) da vida é algo que eu gostaria de ver HEHEHE...



- - Dyego Souza do Carmo

- - Posted in Dec 21, 2007 by 201.40.64.66

teste

- - Posted in Jan 9, 2008 by Vitor Pamplona

Vitor...

Tá na hora de entender uma coisa sobre Java: Java foi feita para ser PORTÁVEL!

Atrelar um programa Java a um monte de DLLs, SOs e afins só faz tirr do Java uma de suas principais características!

Qt é portável? Mesmo? O Binário gerado no Linux pode ser EXECUTADO DIRETAMENTE NO WINDOWS? Ou é necessário recompilar o código?

Pois é.

SWT é sim retrocesso, pois quebra a portabilidade do Java. Se surgir um novo sistema, não basta implementar uma JRE pra ele. Teriam q implementar também as bibliotecas do SWT.

E à propósito, eu adoro o Netbeans. Na sua máquina ele roda lento, mas na minha é rápido, estável e intuitivo.

Cara, cada tecnologia existe pra resolver um problema. E java não foi feita pra rodar aplicações desktop de alto desempenho. Quer isso? Dê adeus à portabilidade e opte por C + +.

Abraços

Josenaldo
http://jnaldo.com

- - Josenaldo Matos

- - Posted in Jan 28, 2009 by 201.16.150.65

@ Josenaldo

Portabilidade é abandonar o Swing para poder rodar sua aplicação em celulares? Java só é portável entre windows e linux para PCs. Não dá nem para garantir a portabilidade no Mac.

Se a portabilidade do java é tão fraca assim, o que você tem contra compilar versões específicas para cada caso?

PS: QT roda em celulares, Swing, que faz parte da spec do java, não. Portável? + / - neh?

- - Vitor Pamplona

- - Posted in Jan 28, 2009 by 143.54.13.191

Add New Comment

Your Name:


Write the code showed above on the text below.