Mostrando postagens com marcador java. Mostrar todas as postagens
Mostrando postagens com marcador java. Mostrar todas as postagens

quinta-feira, 21 de agosto de 2008

Problemas aplicativos Java no Linux

Bom, esse é mais uma dica (lembrete) para mim, ou para quem mais achar interessante.
Bom, tive que reinstalar essa semana meu note com Ubuntu pq fiz uma cagada habilitando o repositório de desenvolvimento do Ubuntu para baixar o Subversion 1.5, e esqueci de comentá-lo novamente, e "sem querer" fiz um update =) Atualizou mais ou menos uns 800 pacotes!! Bem que achei meio estranho! =)

Enfim, devido a este fato, tive que reinstalar o ubuntu e reconfigurar os aplicativos todos, que já é um saco, principalmente por ser um AMD 64 bits.

Um dos aplicativos que uso é o SQLDeveloper da Oracle, e ele é feito em java. E não estava mais conseguindo iniciá-lo. Na verdade, ele iniciava, porém com uma "tela branca", parecia que não carregava os componentes. O erro que dava no console era esse:

Locking assertion failure. Backtrace:
#0 /usr/lib/libxcb-xlib.so.0 [0x7ff9fb8fa97c]
#1 /usr/lib/libxcb-xlib.so.0(xcb_xlib_unlock+0x24) [0x7ff9fb8faa84]
#2 /usr/lib/libX11.so.6(_XReply+0x10f) [0x7ff9fbd44f4f]
#3 /usr/lib/jvm/java-1.5.0-sun-1.5.0.15/jre/lib/amd64/xawt/libmawt.so [0x7ffa00283d7b]
#4 /usr/lib/jvm/java-1.5.0-sun-1.5.0.15/jre/lib/amd64/xawt/libmawt.so [0x7ffa00270e9c]
#5 /usr/lib/jvm/java-1.5.0-sun-1.5.0.15/jre/lib/amd64/xawt/libmawt.so [0x7ffa00270ffe]
#6 /usr/lib/jvm/java-1.5.0-sun-1.5.0.15/jre/lib/amd64/xawt/libmawt.so(Java_sun_awt_X11GraphicsEnvironment_initDisplay+0x9) [0x7ffa002711c9]
#7 [0x7ffa27350f7b]
O que fiz para resolver isso foi adicionar ao script de inicialização do aplicativo (sqldeveloper/sqldeveloper.sh), a seguinte variável:
export LIBXCB_ALLOW_SLOPPY_LOCK=1
O que essa variável quer dizer não tenho a menor idéia, muito menos o que ela faz, nem sequer fui atrás, a única coisa que sei é que ela resolveu o meu problema.

Talvez alguém saiba dizer o porque, ou tenha outra solução, ou quem sabe queira pesquisar pra saber o que essa variável faz. Comente ai!

abraços!

segunda-feira, 18 de agosto de 2008

Entendendo a JVM e Resolvendo problemas de Performance

Na verdade este post é apenas para elogiar os posts do pessoal do JavaBahia, mais especificamente o Alexandre M. Lima, quem foi que fez os posts.

Cada um tem informações muito úteis, segue os Links:
Parte 1
Parte 2
Parte 3
Parte 4

e apenas para linkar este post meu:

JVM Tuning

Valeu, abraços.

quinta-feira, 7 de agosto de 2008

Ubuntu Hardy + Subversion 1.5

Estava com problema para atualizar o subversion da minha máquina da versão 1.4.6 para a versão 1.5, pois ainda não está liberado nos repositórios padrões do Ubuntu.

Mas para minha felicidade achei este post, onde uma pessoa bacana mostrou o repositório para atualizar o subversion.

Para uma quick reference, o repositório é:

deb http://archive.ubuntu.com/ubuntu intrepid main restricted universe multiverse

Obrigado ;)

terça-feira, 29 de julho de 2008

Conhecimento vale mais que experiência

Estava lendo um post que veio pela newsletter do javalobby, que achei muito interessante e me fez pensar em algumas coisas.
Resumindo, a conclusão principal do post é: "Não adianta ter anos de experiência em [coloque-aqui-o-que-quiser] da forma errada.", ou seja, muitas vezes os anos de experiência são substituidos pela teoria (sem a prática), esta qual pode ser adquirida de várias maneiras.

Meio confuso não?! Vou tentar explicar um pouco melhor. Nos post do Jurgen Appelo, ele cita a questão da Lobotomia, e cita as seguintes frases, que tentei achar no wikipedia em português, porém as descrições não eram tão boas quanto as em inglês, então traduzo abaixo:

A Lobotomia, ou Leucotomia, que envolve o corte das conexões do Cortex Frontal, foi usado em alguns milhares de pacientes por todo o mundo durante o século 20, o que ocasionava uma mudança de comportamento, com o intuito de "curar" pessoas com esquizofrenia, e depressão profunda. Hoje este procedimento é considerado como "um dos maiores e mais bárbaros erros praticados pela medicina"
Jurgen faz uma pergunta após isso: "Você ainda ficaria impressionado com médico com mais de 20 anos de experiência em Lobotomia?"

O que me chamou atencão neste post foi justamente nunca ter parado para pensar sobre isso, e nunca ter feito uma comparação deste tipo. Realmente, 20 anos fazendo a coisa da maneira errada, vale mais que 1 mês fazendo da maneira certa? Isso nos remete também aquele outro post sobre A Fábula dos Porcos Assados.

O que ele ressalta ainda no post, é que a sua experiência como desenvolvedor não importa muito quanto aplicar a técnica ou tecnologia certa para resolver o problema, agora faz mais sentido aquela analogia de "Para quem só tem um martelo, tudo parece prego."

Outra frase de grande impacto citada por Jurgen, é a seguinte:
"Professionals don't match problems with their experiences. They match them with their knowledge."
tradução livre:
"Profissionais não usam a experiência para resolver os problemas. Eles usam o conhecimento para resolver os problemas."

Isso não quer dizer que você deva ficar em casa lendo livros sobre tudo que você saberá fazer tudo, mas diz que a experiência não diz muita coisa, se junto com ela não vier o conhecimento, e principalmente o conhecimento do correto.

Sem dúvida uma opinião um pouco radical, mas sem dúvida cheia de verdades. O que acha você? Pronto para uma lobotomia? Conheço uma pessoa cheia de experiência! =)

sexta-feira, 25 de julho de 2008

JVM Tuning

Buenas!

Devido ao longo tempo sem postar algo realmente decente e técnico, este post vai ser sobre o que estou fazendo atualmente, que é instalando e configurando os servidores de produção aqui da empresa juntamente com uma outra pessoa.

O nosso ambiente compreende um cluster de Tomcats fazendo Session Replication. Nossos servidores são de arquitetura Intel e do modelo QuadCore (apesar de uma plataforma Sun ser bem mais performática ainda mais com Java), então algumas configurações são específicas para isso e para o nosso modelo de aplicação e talvez não sejam as melhores para o seu caso, mas de qualquer forma gostaria de compartilhar um pouco das coisas que aprendi e que estamos utilizando.

JDK - Porque a versão 6?

Além de ser a última versão, ela é superior a versão 5 em questões de performance, as configurações default da vm já vem otimizadas para uma melhor performance de runtime e um garbage colector mais eficiente.

Esta versão, por ser mais recente, usa de uma maneira mais elevada o poder de multi-processadores ou multi-cores e da grande quantidade de memória existente. Exemplos disso são, o uso do GC em threads paralelas, podendo utilizar até 32 Threads (veja mais na tópico sobre Tuning), usa também do paralelismo para a promoção de objetos do Young para o Old (Permanent) conforme figura abaixo (caso queira aprender mais sobre como funciona o Heap Space do java leia este documento e este documento)JVM Tuning

Como muitos sabem, é possível mudar o comportamento da VM e parametrizar muitas coisas através das VM Options que são passadas na inicialização de um processo.
No nosso caso aqui, utilizamos alguns parâmetros, que vou listar abaixo com uma breve descrição:

[JVM Parameters]
-server - Para simplificar, este parâmetro te da uma melhor performance final do que inicial. Caso sua arquitetura seja 64bits, o server é o default, e para arquiteturas 32bits, o client é o default.
-XX:+UseLargePages - Se o seu SO permite Large Memory Pages habilite esta função e sete também outros parâmetros relacionados a isso. Para saber mais sobre LMP leia este documento.
-XX:+AggressiveOpts - Habilita algumas otimizações de código, que segundo a documentação, é pra estar habilitada como padrão nas versões futuras.
-XX:+UseFastAccessorMethods - Usa versões otimizadas para métodos get de tipos primitivos.
-XX:+UseParallelGC - Habilita o GC para abrir várias thread e atuar paralelamente.
-XX:ParallelGCThreads=6 - Número de thread que serão abertas para GC. Por default é aberto uma Thread para cada processador existente.
-XX:+UseParNewGC - Igual ao parâmetro UseParallelGC, porém para a área Young do Heap.
-XX:+UseTLAB - Usa Thread-Local para alocação de objetos

[MEMORY]
-Xms 512M - Parâmetro de memória que define o mínimo de memória para a aplicação.
-Xmx 8G - Parâmetro de memória que define o máximo de memória para a aplicação

[YOUNG]
-XX:NewSize=256M - Tamanho mínimo para a área Young do Heap.
-XX:MaxNewSize=1G - Tamanho máximo para a área Young do Heap.

[OLD]
-XX:PermSize=512M - Tamanho mínimo da área de objetos permanentes em memória.
-XX:MaxPermSize=2G - Tamanho máximo da área de objetos permanentes em memória.

Obs: não sete os valores máximos maiores que o -Xmx.

Para ver oturos parâmetros para VM veja esta página.
Para ver alguns exemplos de tuning de aplicações veja este link.
Leia também a FAQ sobre GC.

Ferramentas para Monitoramento de Aplicações

Segue abaixo algumas ferramentas que podem te ajudar a entender melhor sua aplicação e te ajudar a chegar a valores para os parâmetros. Existem muitas outras, outra hora comento sobre algumas mais específicas, mas comentei sobre essas apenas porque já vem com o próprio JDK, e vc as encontra em $JAVA_HOME/bin.

  • jps - Mostra os processos Java que estão rodando na máquina.
  • jinfo - Mostra informações sobre o processo java que está rodando, como bibliotecas que ele está usando, parametros de inicialização, parâmetros gerais da VM como aquelas que aparecem em System.getEnv().
  • jmap - Mostra informações sobre o uso de memória por uma aplicação, uso de cada divisão da Heap como a Young, Old, Tenure, Perm, etc.
  • jsadebugd - Este processo se junta ao processo passado como parâmetro e adiciona propriedades de debug ao processo em questão.
  • jconsole - JConsole é uma ferramenta visual que monitora e mostra várias informações sobre um processo, como uso de memória, número de threads, processamento, etc.
  • jstat - Coleta e loga informações estatísticas sobre performance.

Considerações

Conforme dito acima essas configurações são específicas para cada caso, então se precisar de ajuda sobre algumas configurações para um caso específico comente aqui, que responderei assim qeu possível.
Como tuning é um trabalho constante, a monitoração e o profiling são coisas extremamente importantes para que você consiga entender sua aplicação e definir o que usar e o que não usar.
Conforme for otimizando a nossa aplicação estarei fazendo update neste post, ou escrevendo novos posts se for o caso.
Enfim, espero que isso possa ajudar algumas pessoas, e com certeza vai me ajudar futuramente como documentação.

sexta-feira, 4 de julho de 2008

Eclipse Ganymede - Server Start Timeout (Hint)

Just a Hint, para pessoas que como eu, precisam alterar o Start timeout do servidor dentro do Eclipse, e estava acostumado a fazer isso no Preferences, noGanymede mudou.
Agora esta configuração fica nas propriedades do Server. Então, abra o Server (clique duplo no servidor), e na parte superior direita existe um dropdown chamado Timeout, e ali você consegue alterar o timeout do seu Server. Conforme figura abaixo:

Eclipse Ganymede - First Impressions

Para quem ainda não sabe o Eclipse Ganymede, ou Eclipse 3.4 foi lançado há umas 2 ou 3 semanas atrás, com muitos bugfixes e novas features bem legais.
Para quem não sabe o porque do nome Ganymede, este nome vem de uma Lua (satélite) de Júpter, a maior delas. Para quem não sabia o porque dos nomes anteriores, Callisto e Europa, estas também são luas de júpter.

Depois desta histórinha, quero elogiar o pessoal do Eclipse por uma feature principal, um download específico para Linux AMD 64. Ieiii!
Outra coisinha bem legal e simples foi a alteração do arquivo eclipse.ini, coisinha simples e prática. A alteração dos parâmetros de memória, uma das coisas que sempre qeu baixava uma versão do eclipse tinha que alterar, agora não preciso mais =) ieeeiii².

Bom, esta é mais uma versão sem muita alteração na plataforma em sí, mas em correção de bugs e novas funcionalidades, e "embelezamento".

Bom, falando de coisas um pouco mais práticas e técnicas, o esquema de Install/Update do eclipse ficou um pouco diferente mas ficou melhor. Agora você consegue saber exatamente o que tem instalado no seu eclipse as versões e consegue fazer revert de instalações. Tá eu sei que isso já existia, mas era bem ruinzinho de se achar naquilo, hoje está bem melhor esta parte.

Você também consegue pesquisar dentro dos "update sites" configurados por plugins, apenas digitando uma palavra chave. Ficou bem bacana. Porém, eles bem que podiam integrar o Plugin do Subclipse nativamente já. SVN já deve ser o controlador de versão mais usado, mas o eclipse só vem nativamente com CVS, e acredito eu, que o Subclipse deva ser o plugin mais usado para isso, porém eles tem um projeto incubado que é um plugin para SVN, mas pelo jeito ainda não está pronto.

Bom, pelo que vi no site do eclipse, houve grandes melhorias em Regex dentro da IDE, em todas as opções de busca, Import/Export de Launch Configurations. Se você possuia aquelas configurações bizarras para algumas aplicações, agora vc não precisa mais abrir os dois eclipses (o velho e o novo) e ficar copiando uma para a outra, basta exportar e importar =)

Outra feature bem bacaninha é o esquema de mostrar o caminho e pacote do arquivo que você está editando. Isso evita muitas merdas, principalmente se você é acostumado como eu a abrir arquivos através dos atalhos CTRL+SHIFT+R e CTRL+SHIFT+T. Bom, para abilitar esta feature use o atalho ALT+SHIFT+B.

Outra feature bem bacana, é a Format Edited Lines on Save, que se encontra nas preferences no menu Java > Editor > Save Actions. Bem útil isso ai. Sem contar as diversas melhorias no editor de código, code assists, etc. Tem features novas pra caramba, quem quiser saber mais de uma olhada no revision notes.

Infelizmente, apesar de existir já um download específico para Linux AMD 64bits, o velho problema conhecido desta plataforma com Java6 ainda existe, não sei bem de quem é a culpa, mas espero que isso se resolva no update 10 do JDK6 (que ainda está em Beta). Bom, não sei quantos sabem mas existe uma solução paleativa para isso que é adicionar um paramentro no arquivo eclipse.ini, logo abaixo do parâmetro -vmargs que é:
-XX:CompileCommand=exclude,org/eclipse/core/internal/dtree/DataTreeNode,forwardDeltaWith

Contudo, o que pude perceber mais uma vez, é que todo o processo de importação do antigo workspace continua bem clean. Bem bacana mesmo.

Gostaria também de parabenizar o desenvolvedores do Eclipse, os quais mais uma vez entregaram o projeto dentro do prazo e com alta qualidade. E isso como todos sabemos é difícil hein...

sexta-feira, 9 de maio de 2008

Cansou da cor das divisórias da sua baia? Forre-as com Refcardz!!

Talvez alguem esteja se perguntando: WTF??!
Pronto, agora vc tem um monte de papelada de alta qualidade para colocar pregado nas paredes de sua baia, ou sala, ou o que for que vc use.

Então, estou falando dos novos, bonitos e práticos Refcardz!
A idéia, dos caras foi comprimir as informações em um pequeno manual, feitas por pessoas que entendem do assunto, layoutado por profissionais de diagramação, e publicados gratuitamente =) quer coisa melhor? Agora você não precisa mais daqueles manuaisinhos (ruins) que nem lembro o nome, mas vc encontra em todo o lugar.

Pra quem ainda não conhece, de uma olhada em www.refcardz.com.
Hoje, há apenas 4 tipos diferentes:
- Spring Configuration (excelente!!!!)
- Getting Started with Eclipse (porra por que não tinha um troço destes no meu tempo?!)
- GWT Style, Configuration e JSNI Reference (não cheguei a ver ainda)
- Getting started with ajax (um quick reference de diversas bibliotecas e frameworks para se trabalhar com ajax)
Apesar de começar com apenas 4 refcardz (começaram bem pra caraleo), existe já o cronograma pronto para diversos outros.

Então fique de olho, e vamos colorir nossas paredes! =)

quarta-feira, 26 de março de 2008

AJAX desapontando?

Segundo pesquisa feita pela Forrester Research, os aplicativos feitos em AJAX para substituir aplicativos "desktop" tem deixado muito a desejar. Segundo a pesquisa, o maior descontentamento dos usuários é com o tempo de resposta.
A pesquisa aponta também as tecnologias emergentes para RIA como é o caso do Silverlight da Microsoft, o Adobe Flex. Como era de se esperar o JavaFX não foi nem mencionado nesta lista, devido ao seu "respiro de vida" ainda.
Pelo visto, os tempos de "programadores WEB" está chegando ao fim mesmo =) O jeito é fazer como nosso amigo Erko e investir esforços nessas tecnologias emergentes. Quem sabe o Java Web Start não ganha uma sobrevida e seja trazido a tona novamente, embora, os esforços da Sun hoje concentrem-se no JavaFX.

Quem está apostando no que? Será que aplicações Web como conhecemos hoje realmente irão desaparecer? Daqui uns dias iremos ver engraçados cartezes de "Code JSP/ASP/PHP/HTML/JavaScript for Food"! =)

quinta-feira, 6 de dezembro de 2007

Problemas com Hibernate e MySQL

Ontem, estava ajudando um amigo com um problema que estava acontecendo num sistema que ele estava desenvolvendo. O escopo era o seguinte:

Um software de controle Web, utilizando o banco de dados MySQL 5, utilizando Hibernate. Outro pequeno software que fica rodando no servidor, como um daemon, executando algumas tarefas, e caso aconteça um erro ele insere um registro em uma certa tabela, no mesmo banco MySQL que o sistema Web utiliza.

Até ai tudo bem. O que acontecia é que, o software daemon inseria coisas no banco, porém o software Web, não conseguia enxergar estes novos dados inseridos. Começamos a quebrar a cabeça pensando que era problema no hibernate, mudamos toda a parte de cache, desabilitamos o cache L2 do hibernate, tiramos o cache daquela consulta, tiramos o cache total da session, e nada. E realmente não podia ser aquilo, porque o mesmo esquema de configuração usado lá é o mesmo esquema usado em outros softwares que estamos desenvolvendo.

Então, após muita busca, encontramos a seguinte documentação:
http://mysql2.mirrors-r-us.net/doc/refman/5.0/en/innodb-transaction-isolation.html

O problema que ocorria era justamente no MySQL, pois ele por padrão usa um modo de cache interno para otimização de desempenho, que realmente não é muito interessante. E quando a aplicação Daemon comitava o registro, a aplicação web não via aquele registro, por causa do cache do MySQL.

A solução foi então aplicar a configuração referida no link acima, que é:

  1. Baixar o MySQL
  2. Editar o arquivo [dir-install-mysql]/my.ini
  3. Procure a linha [mysqld]
  4. adicione o seguinte, logo abaixo:
    transaction-isolation=READ-COMMITTED
  5. Startar o MySQL
Isso fará com que o MySQL atualize o seu cache, com os dados gravados por outras aplicações ou conexões/sessões.

obs: Tem uns comentários interessantes, no final da página do mysql.

Espero que isso ajude alguém!

Valeu.

segunda-feira, 24 de setembro de 2007

SCEA - JEE5 Beta Exam

É... descobri só hoje (já meio atrasado) que abriu a nova prova SCEA atualizada à nova versão JEE5. E ela está na versão Beta, o que por tradição da Sun é FREE. Já que é "de grátis" então vamos fazer né =)

Então, se você quer se arriscar nesta certificação, ao invés de investir na SCWCD, SCBCD e tantas outras... invista seu tempo nesta =)

As inscrições abriram no dia 20/09 no site da prometric. Então, logue lá, e entre na opção Schedule an Appointment, vai pedir algumas coisas, e depois irá aparecer uma caixa com a certificação que vc quer fazer. A SCEA Beta JEE5 é a última opção.

A prova I deve ser feita até dia 20 de outubro, ou seja, muito pouco tempo para estudar =) E são 160 questões, e o candidato terá 4h para fazer a prova. Como a prova é beta, tem muita questão mesmo, e a cada questão tem um espaço para um comentário sobre a questão.

O prazo para a fase II começa em Novembro e termina em Dezembro juntamente com a parte III.

Então, boa sorte a quem for se aventurar. Segue abaixo alguns links, que podem ajudar nesta empreitada:

Site Oficial

Link de divulgação no JavaRanch, com algumas informações
MailGroup criado para a prova
NYCJAVA - SCEA Study Group

Se alguem souber de algum material interessante e/ou informação útil, favor postar aqui!

Valeu!

segunda-feira, 13 de agosto de 2007

Testando Servidor de Email via Telnet

As aplicações de hoje, em quase sua maioria compreendem aplicações para internet ou com alguma interação com internet, e normalmente utilizam-se de serviços que enviam emails. Como as linguagens hoje, possuem API´s para tudo que é coisa, não podia deixar de faltar API´s para envio de email. Essas API´s, já fazem muitas coisas que não nos interessa saber de como é feito. No caso de Java existe a JavaMail API, ela já faz parte da especificação e já vem como parte da espec. JEE. Mas mesmo assim existem API´s complementares para envio de email, como é o caso da Email-API da Apache. Aproveitando este post, um código simples para mandar emails é mais ou menos assim:



O que muitos desenvolvedores não sabem, é como funciona um servidor de email (smtp), principalmente como ao menos testar se ele está funcionando. Exporadicamente eu preciso testar um servidor de smtp localizado em algum servidor, e para isso eu sempre preciso pesquisar quais são os comandos exatos para fazer um teste via telnet neste servidor. Mas como um cara esperto que sou, eu anotei (depois da enézima vez que precisei) e humildemente vos posto esta maneira simples de fazê-lo, e agora vocês já sabem onde achar (e eu também) =)

telnet ipDoServidorSmtp 25
mail from: email@domain.com [enter]
rcpt to: seuemail@domain.com [enter]
data [enter]
[aqui vai o corpo do email]
. [enter]
quit
Just another Tip & Trick.
Valeu

sexta-feira, 27 de julho de 2007

Analogias de Desenvolvimento de Software

Achei uns artigos muitos bons navegando por ai.
Um dos que me "chocou", chamou mais a atenção, espantou... sei lá, um dos que gostei foi este artigo.

Ele me levou a lembrar que lá atrás na faculdade, quando nos era ensinado Análise de sistemas num esquema puramente WaterFall, utilizando abordagens Bottom-Up e Top-Down, nos era dito também, que para construir software deveríamos fazer como o pessoal de Construção Civíl, o qual fazia todo o projeto de um prédio, e depois começava a construir. Se eles conseguem/podem fazer isso por que um simples software não pode ser feito assim?!

No Artigo do primeiro link, ele começa contando uma historinha, contando quando foi para uma construção, ou para uma aula de engenharia civíl, não entendi direito, mas vou traduzir aqui:

"O que você está fazendo aqui?" - Eles perguntaram

Eles eram Encarregados, Gerentes de Projeto, Superintendentes, e estavam fazendo um projeto no Lean Construction Institute (LCI) (o que é isso ai não tenho a mínima idéia, mas eu acho que era pra ser conhecido). Verdade, que que o cara estava fazendo la?

Então o cara começou a explicar: "No desenvolvimento de Software, nos é ensinado que devemos gerenciar projetos como os projetos de Construção Civíl. Onde uma construção é planejada no início, custos e prazos são previsíveis, e os clientes recebem o que eles esperam receber."

Silêncio... "Você está brincando, certo?" "Não! Verdade, é assim que nos é ensinado."

Então, incredulidade torna-se em grades gargalhadas!
Quem já fez alguma construção, ou já precisou de que alguém construisse algo para você (o que é bem mais provável, visto que somos desenvolvedores de software), sabe que a obra sempre custa mais do que no início seu pedreiro disse que custaria, e a maldita obra parece não ter fim. Minha mãe está passando por uma reforma em sua casa, e já fazem quase 2 meses, isso que era pra terminar em 2 semanas. Sem contar, que obras externas sempre dependem das condições climáticas.
Outro artigo que achei legal, simples e direto foi este de Joel Spolsky. Tem ainda este.
Mas realmente uma Analogia mais real é a que Marcos Pereira, descreveu em: Desenvolver Software é igual a dirigir. Um dia ainda será assim em todo o lugar, e a paz mundial reinará! Mas até agora, poucas pessoas tem se beneficiado disso.
Outra pedrada, é um post do Thiago Arrais, onde ele diz que Fábricas de Software são uma analogia levada longe demais.

Acho que uma outra analogia boa para desenvolvimento de software como é feito atualmente neste modelo de WaterFall, está na agricultura. De que depende a agricultura e que o seu plantio tenha um bom rendimento? (Porque sejamos francos, tudo gira em torno do dinheiro. Ok, eu não sou nenhum agrônomo, mas vou tentar não falar merda)
  1. De um bom preparo do solo no princípio - Ter bons profissionais, Análise e Arquitetura inicial
  2. Plantar em época correta. - Saber o que usar.
  3. Cuidado no início, com pesticidas, fungicidas e tudo mais. - Ser maleável quanto a arquitetura incial, pois ela pode mudar conforme o entendimento do que é pra fazer vai aumentando.
  4. Rezar para não chover demais, nem de menos, em tempo de germinação. - Literalmente, rezar para que o entendimento inicial, realmente tenha previsto quase tudo, e que não surjam problemas muito complicados
  5. Saber a hora de colher.
  6. Rezar para não chover demais nem de menos em época de colheita. - Rezar para mostrar pro cliente na hora certa o software, para que ele não se decepcione de início. =)
  7. Conseguir estocar ou vender em uma época que o preço está bom. - Ter um ótimo departamento de Relação com o cliente, para fazer ele enxergar o software mais belo do que realmente é. =)
Talvez não tenha sido feliz em todas as analogias, mas era pra ser um pouco engraçado =)

Enfim, eu ainda trabalho em um modelo WaterFall, não tenho como mudar isso facilmente. Não vou ficar falando por ai, que sou contra tudo, que vamos revolucionar o mundo, matar todos os gerentes que não pensam igual a nós, como muitos falam por ai. Mas quem sabe com o tempo, ou conhecimento necessário, ou status necessário, ou apoio necessário, ou todas essas coisas juntas, eu consiga ir fazendo esta mudança.

E por fim, não poderia faltar aquela velha analogia de desenvolvimento de software.

quinta-feira, 19 de julho de 2007

JavaFX Script

Gostaria aqui de fazer um complemento sobre o meu post anterior sobre JavaFX onde falei basicamente sobre o JavaFX Mobile.

Estive no evento Falando em Java do pessoal da Caelum e teve uma excelente palestra sobre JavaFX com o Sérgio Lopes, onde ele demonstrou algumas coisas legais do JavaFX que na realidade eu não tinha visto no meu primeiro contato com ele, devido ao fato de eu estar mais focado na parte Mobile dele.
Vou relatar algumas aqui:

  • Declarative Syntax
    • Como era em Swing:
var win = new Frame();
win.title = "Hello World JavaFX";
win.width = 200;
var label = new Label();
label.text = "Hello World";
win.content = label;
win.visible = true;
    • Como é em JavaFX:
      import javafx.ui.*;

      Frame {
      title: "Hello World JavaFX"
      width: 200
      height: 50
      content: Label {
      text: "Hello World"
      }
      visible: true
      }
  • Data Binding
    • Você passa um objeto.atributo como valor de um campo e ele automáticamente atualiza este atributo de tal objeto.
  • Facilidade de Leitura
    • Facilidade de visualizar a estrutura da tela já no Código, por que fica algo bem "hierárquico" em código, e não aquela coisa bagunçada do Swing
Para obter mais informações sobre JavaFX veja o post da Caelum, veja ainda os links no final do post. Aguarde ainda os exemplos de código implementados pelo Sérgio Lopes na palestra.

Segundo o Sérgio, o JavaFX ainda está em uma versão "super-early-alpha", e NÃO DEVE ser usada em produção ainda. Mas pelo jeito haverá muito investimento nela neste e no próximo ano.

Tutorial sobre JavaFX Script
-----
Estava com este post enroscado por mais de uma semana esperando que o pessoal la da Caelum postasse sobre esta palestra =)

domingo, 15 de julho de 2007

Java e C++ Benchmark

Devido ao fato de muitos amigos c-maniacs ficarem, ainda nos dias de hoje, baseando suas opiniões sobre Java nas velhas VM's 1.3-1.4 (no melhor dos casos), resolvi escrever este post. Não, não sou eu quem farei os benchmarks, mas fiz uma simples pesquisa no google sobre "c +java +benchmark" e dei uma lida em alguns artigos que falam sobre este tema, alguns de versões um pouco mais antigas da VM e outros sobre versões mais novas (1.5+).

Sei que este assunto é muito delicado e nada é decisivo, existem muitas variantes a serem consideradas e existem muitos testes diferentes. Mas o que realmente vemos, se quisermos ver é claro, é que o Java HOJE não é mais igual aquele antigo Java 1.1 de que tantas pessoas baseiam suas opiniões.

Well "Talk is cheap. Show me the code."

Antes de mais nada, vamos lembrar que não adianta querermos comparar um C com Java, mas sim C++ com Java, e é isso que a maioria destes benchmarks faz.

Para começar, utilizo o recente post de Paul Buchheit (criador e Lead Developer do Gmail), onde o primeiro parágrafo do seu post ele diz:

"A lot of people seem to be taking this post to be the "Ultimate C vs Java shootout". It's not. Performance is a very complex topic. My only real point is this: Java (which used to be slow) has reached the class of "fast languages". For the majority of applications, speed is no longer a valid excuse for using C++ instead of Java."
Em suma, ele diz que não é sua pesquisa o ultimato neste assunto de benchmark, mas que Java hoje, está na classe das "Linguagens Performáticas" e que "Velocidade ou Performance" não é mais desculpa para usar C++ ao invés de Java.

Ainda no post de Paul Buchheit, ele ressalta, que muitos testes atualmente contam o tempo de "start up" da VM como tempo de processamento, e simplesmente o que ele fez, foi fazer a iteração 3 vezes para cada código, e isto fez com que Java, fosse um pouco mais rápido que C na segunda e na terceira iteração.

Outro site que achei interessante, e que já tinha visto a uns 2 anos atrás, é este e ele tem um gráfico (abaixo) bem legalzinho sobre o desempenho em várias coisas, e isto usando a VM 1.4.2.



Outro ótimo artigo, que recomendo a leitura, é o do J.P.Lewis and Ulrich Neumann, onde além de colocar seus resultados, ainda desmistificam algumas coisas como:

1. GC is it worse... or better?
2. Run-time Compilation
3. Why is "Java is Slow" so Popular?

Não usei mais sites, porque acho que estes 3 satisfizeram minha idéia. Apesar de que em cada link deste post, existem muitos outros links para outros artigos sobre benchmark. E algo importante a ressaltar é "Não tome por verdade apenas 1 estudo sobre benchmark".

Concluindo, este não é um post que porá fim a questão, mas ao menos tenta abrir um pouco a mente dos "bitolados". Parar no tempo não é nem um pouco bom, ainda mais na nossa área. Entretanto, este também não é um post para dizer "Larguem C++ usem Java e sejam mais felizes", existe sempre a melhor escolha, e é impossível escolher o melhor caminho numa bifurcação se você só conhece um dos caminhos.

sexta-feira, 13 de julho de 2007

Garota de 7 anos cria um Pet Shop usando Java

WTF?!?!

Sim, foi o que pensei ao ver a notícia no InfoBlogs, e quando clico no link, me deparo com esta foto! Hahahaha muito boa =)

Créditos ao Rafael Benevides

sexta-feira, 11 de maio de 2007

JavaFX - Killer Application?

A poucos dias foi lançado o JavaFX no JavaOne em San Francisco. Uma simples divulgação deixou toda a comunidade fervorosa, justamente pelo que promete ser o JavaFX. Agora, se ele vai ser ai é outra história.
Segundo este desenho da macro-arquitetura do JavaFX podemos ver a sua aplicação:
Será que ela será a Killer Application e solução definitiva? Ou será uma outra vergonha como o MIDP, que para interface é realmente uma vergonha?

Podemos ver seu uso em alguns demos listados na Home do Projeto. Eu achei beeem estrainho a forma como é feito isso (vide o primeiro demo). Pra mim uma maneira mais descente de se fazer, seria usando coisas que já existem hoje, principalmente para as definições de estilo, porque não usar o padrão CSS? Porque não usar algumas coisas como DIV´s? Porque não definir uma folha de estilos e você poder reusar isso? Pra que reinventar a roda? Aprender mais uma nova maneira de se fazer o que já consegue se fazer. Será que vai ser igual a programar em Swing? Cria botão, seta layout, seta posição, etc etc etc... aquela coisa massante e chata.

Uma das coisas que ainda estão no ar são: OpenLazlo e Sun com o projeto Orbit. Será que toda essa plataforma FX será utilizada em cima do lazlo? Seria legal, pois ele tem se mostrado bem portável e bem estável. Se não for usado, pra que manter então projetos paralelos?!
O que passa pela minha cabeça é que, a Sun nem sabe bem ao certo como será, mas lançou toda essa JavaFX para segurar um pouco o mercado e para que o povo não vá investindo tudo o que tem na nova MS SilverLight, Apollo, Flex, etc.

Conversando com o Erko hoje ele me mostrou várias coisas legais sobre essas tecnologias RIAs. Uma das coisas que pareceu bem bacaninha foi o tal do Flex, pois utiliza CSS por exemplo. Quem quiser saber mais sobre este tipo de assunto, aconselho a acompanhar o blog do cara, é bem rico neste conteúdo.

Bom, acho que agora é aguardar e ver que que vai rolar com tudo isso, e torcer para que seja realmente algo bom.

-----------
PS: Queria colocar mais uma opinião aqui, agora que dei uma olhada melhor no javaFX, neste Tutorial.
Eu achei Horrível a forma como codificar. Vejam este tutorial ai, e me digam o que acham... bah, se for assim, eu acho que não vai pegar muito não, tlvz até caberia dizer que já nasce morto... mass.... não sou o dono da verdade e tbm, o conhecimento que tenho sobre o javaFX é bem superficial então fica apenas como uma primeira impressão.
Até.

quinta-feira, 10 de maio de 2007

Como começar e como manter o foco (parte2)

Normalmente pessoas me perguntam como começar, pois se deparam com uma nuvem enorme de siglas que, vamos concordar, não são poucas. Mesmo que você pegue apenas uma tecnologia, ao exemplo de Java.

Como minha maior especialidade é Java, vou usá-la como exemplo para este post, voltando-me mais para web, sendo que é isso que está em alta hoje no mercado. Apesar de que para iniciar em programação não exista exatamente um caminho das pedras, vou tentar citar o que eu acho importante saber e em seguida como começar com java.

  1. Orientação a Objetos - Precisa saber muito bem. Não se engane, aprenda mesmo, aplique, leia muito sobre o assunto, aplique, refaça, mude, modele, remodele... Hoje, creio que o pior problema de programadores, é não saber realmente OO, acham que sabem, e criam sistemas que "desmoronam" mais tarde. A hora que vc disser, eu sei OO, to "bão" no negócio, então estude novamente tudo o que havia estudado e mais. Saiba como aplicar OO a sistemas, como desenvolver sistemas OO. Com este conhecimento, você será um bom profissional, note que nem estou falando em Java até agora.
  2. Design Patterns - Aquela coisa que para os iniciantes parece ser o "santo graal", não é nada de mais, são apenas formas de como se fazer as coisas, como modelar teu sistema, para que você consiga manter a qualidade e sobre tudo, eles são alguns padrões de como fazer as coisas, documentados por pessoas que passaram pelo mesmo problema, e descreveram a melhor forma de solucionar um certo problema. Lembre-se, não force o uso de um DP, mas sim, depois que você tiver a maioria deles bem estudados, e bem conceituados em sua cabeça, o seu uso será natural em seus sistemas. Note novamente que Java nem entrou ainda em seus estudos. Queria enfatizar que você irá ler muito até aqui, mas leia com atenção, não desanime porque ainda não está pondo a "mão na massa".
  3. UML - Acho bem interessante o aprendizado de UML e seus diversos diagramas, mesmo que inicialmente você não venha a ser um Analista/Arquiteto de sistemas, mas você irá responder a um, que, deus-queira, monte um diagrama de classes, de seqüencia, ... para que você possa trabalhar "consciente" do que está fazendo. Ainda não entramos em Java.
  4. Conceitos de Web - Se você irá trabalhar com Web, antes de aprender o que quer que seja, Java, .Net, Ruby, ou seja lá o que, aprenda os conceitos de Web. Como funciona, que tipo de protocolo usa, o que é um Request, Response, Session, métodos Post, Get, Head, etc. Ou seja, estude legal estes conceitos, pois muitos dos problemas que os iniciantes tem, são com estes conceitos.
  5. Plataforma Java - Este estudo não precisa necessariamente vir depois de todos os anteriores, normalmente ele vem seguindo em paralelo com eles. Porém ATENÇÃO, NÃO comece a desenvolver antes de ter aprendido os 4 primeiros. Aprenda o que é a plataforma completa, como ela está dividida, e então comece a aprender a linguagem em si, sintaxe, loops, if´s, coisas básicas. Normalmente, um iniciante se perde nesta parte, pois a Plataforma Java é bem abrangente. Um direcionamento profissional seria interessante, um curso, ou mesmo algum material disponível na internet, mas procure algo bom, existe muita coisa ruim pelo mercado. Eu sempre indico o material da Caelum, é o melhor material que eu conheço. Depois de ter aprendido bem a linguagem, existe algumas coisas ainda que são importantes, como:
    1. Collection API
    2. JDBC
    3. Thread e Sincronização
    4. ...
  6. Java WEB - Só então comece a aprender Java para web. Esqueça Frameworks, você não precisa deles agora, ainda não está pronto para eles. Aprenda primeiro, como é a estrutura de uma aplicação Java para Web, como fazer uma JSP, como fazer um Servlet e como fazer uma JSP e um Servlet conversarem, como fazer um Post, um Get e como trabalhar com Session. Depois, aprenda para que serve o tal arquivo web.xml e o que da pra fazer com ele, o que é um Filter, os Listeners possíveis e como aplicá-los. Tente então juntar os conhecimentos adquiridos até agora, OO, DP, UML e os Conceitos de Web com o Java e fazer um sisteminha simples para testes. Após feito e ele funcionando legalzinho, comece o mesmo sistema, de outra maneira, estudando e tentando melhorar alguns aspectos, tentando aplicar outros conhecimentos adquiridos com o primeiro projeto.
É..., não falei que iria ser fácil e que o tempo de estudo seria curto, porém, esta não é necessariamente a curva de aprendizado do Java em si. Mas sim a curva de aprendizado de um bom profissional. Não só na minha opinião, mas em todos os aspectos da vida, se uma coisa não tem uma base forte, o que for construído por cima dela, uma hora ruirá.

Enfim, esta é minha opinião hoje sobre o assunto, não sou o dono da verdade, porém hoje vejo que se tivesse seguido alguns caminhos assim, minha vida teria sido muito mais fácil =). Sei que alguns concordam, outros discordam, e ainda outros tem muitas coisas a acrescentar, mas isso foi o que me veio a cabeça em quanto estava escrevendo este post. Agradeço as opiniões.

quinta-feira, 3 de maio de 2007

Como começar e como manter o foco

Este post foi motivado por este post.

Manter o foco no começo é meio complicado, principalmente para aqueles que são "fuçadores", normalmente o cara sabe lidar com hardware, instalar programas, configurar, alguma coisinha de redes, alguma coisinha de programação e com isso também algumas coisas sobre Banco de Dados, o famoso "micrero". Antes de explanar sobre isso, queria deixar claro que quanto maior seu conhecimento melhor, quanto mais você conhecer melhor, pois ser extremamente especialista não é bom.

Nesta área de TI, temos muitas especialidades que requerem muito estudo para cada. Vamos citar duas, Desenvolvimento e Suporte (servidores, rede, etc). Estas duas áreas, podem ser consideradas "Macro áreas", pois dentro de cada área tem muitas subdivisões. Quando uma pessoa começa a trabalhar (quer deixar de ser micrero para virar um profissional de verdade) fica meio perdido sem saber pra que lado seguir, por isso antes de mais nada você precisa definir exatamente que lado quer seguir.
Digamos que você quer desenvolvimento. Ok, agora precisamos definir qual liguagem você irá adotar como a principal. Particularmente, acho necessário ter uma principal senão você não deixará de ser um micrero =) , porém você precisa aprender mais liguagens com certeza, para não ser uma ferramenta de uma única utilidade. Além de uma linguagem de programação, você precisará ainda interagir com banco de dados (quase que 100% das aplicações precisam). Então você acaba tendo que aprender SQL, um pouco de linguagem para escrever procedures e functions no banco de dados que você for trabalhar. Porém, é aqui que muitos desenvolvedores se perdem, muitos começam a partir para estudos aprofundados do banco de dados. Para isso existe um especialista chamado DBA. Normalmente um DBA, sabe tanto de banco de dados, como de infra-estrutura e um pouquinho de desenvolvimento. Porém não é trabalho de um desenvolvedor saber dessas coisas. (mas lembre-se do que falei antes de começar este texto.) Digamos então que você escolha Java para sua linguagem principal, você já terá muito estudo pela frente, porém, lembre-se de conhecer outras principais no mercado, como a plataforma .Net (C# de preferência), e ao menos alguma outra, uma emergente se possível, como o Ruby nos dias de hoje, ou ainda outra de sua preferência. Contudo evite aprender coisas que estão saindo de uso, principalmente no começo de sua carreira. Caso seja necessário depois, será bem mais fácil para aprender, no começo só irá confundir.
Concluindo, defina uma macro-área, especialize-se na MACRO AREA, assim que você se sentir seguro o suficiente, ou seja, estiver trabalhando com tranquilidade com isso, então parta para avançar em seus estudos. Normalmente leva-se no mínimo uns 3 anos para isso, então tenha paciência e aprenda o máximo que você conseguir, sem perder muito o foco.

Espero com este email ter ajudado um pouco, com minha pouca experiência. Pode ser que eu esteja errado, porém isso hoje me parece o mais correto. Qual sua opinião sobre o assunto?

------
devido ao primeiro post abaixo resolvi editar este post, e adicionar o link a este site:
http://mundo.it/blog/
Para mais artigos sobre esse assunto pesquisem por Carreiras, tem muita coisa legal.
Obrigado Yuri.