quinta-feira, 1 de maio de 2008

Threaddumps em Java e como reportar bugs do NetBeans

Um recurso muito interessante do Java é o Threaddump. Em algumas situações, pode ser interessante saber o quê cada thread está executando (ou o que não está executando, se está esperando ;) ), e isto é possível através do comando:

kill -3

Importante: se você mandar -9, killa mesmo!

O output será algo assim:

Full thread dump Java HotSpot(TM) Client VM (1.5.0_13-119 mixed mode, sharing):

"JSP Parsing" daemon prio=1 tid=0x42c04100 nid=0x94c600 in
Object.wait() [0xb383d000..0xb383dd90]
at java.lang.Object.wait(Native Method)
- waiting on <0x0f3dbdc0> (a org.openide.windows.CloneableOpenSupport$Listener)
at java.lang.Object.wait(Object.java:474)
at org.openide.text.CloneableEdit
orSupport.openDocumentImpl(CloneableEditorSupport.java:744)
at org.openide.text.CloneableEdit
orSupport.openDocumentCheckIOE(CloneableEditorSupport.java:715)
at org.openide.text.CloneableEdit
orSupport.getDocument(CloneableEditorSupport.java:788)
- locked <0x0f3dbdc0> (a org.openide.windows.CloneableO
penSupport$Listener)
at org.openide.text.CloneableEdit
orSupport.getInputStream(CloneableEditorSupport.java:1349)
at org.netbeans.modules.web
.jspparser.ParserServletContext.getEditorInputStream(ParserServletContext.java:363)
at org.netbeans.modules.web
.jspparser.ParserServletContext.getResourceAsStream(ParserServletContext.java:326)
at org.apache.jasper.JspCompilati
onContext.getResourceAsStream(JspCompilationContext.java:304)
at org.apache.jasper.compiler
.JspUtil.getInputStream(JspUtil.java:890)
at org.apache.jasper.xmlparser
.XMLEncodingDetector.getEncoding(XMLEncodingDetector.java:127)
at org.apache.jasper.compiler
.ParserController.determineSyntaxAndEncoding(ParserController.java:360)
at org.apache.jasper.compiler
.ParserController.doParse(ParserController.java:194)
at org.apache.jasper.compiler
.ParserController.parse(ParserController.java:140)
at org.apache.jasper.compiler
.Parser.processIncludeDirective(Parser.java:374)
at org.apache.jasper.compiler
.Parser.parseIncludeDirective(Parser.java:411)
at org.apache.jasper.compiler
.Parser.parseDirective(Parser.java:554)
at org.apache.jasper.compiler
.Parser.parseElements(Parser.java:1626)
at org.apache.jasper.compiler
.Parser.parseBody(Parser.java:1880)
at org.apache.jasper.compiler
.Parser.parseOptionalBody(Parser.java:1139)
at org.apache.jasper.compiler
.Parser.parseCustomTag(Parser.java:1450)
at org.apache.jasper.compiler
.Parser.parseElements(Parser.java:1649)
at org.apache.jasper.compiler
.Parser.parse(Parser.java:165)
at org.apache.jasper.compiler
.ParserController.doParse(ParserController.java:223)
at org.apache.jasper.compiler
.ParserController.parse(ParserController.java:124)
at org.apache.jasper.compiler
.GetParseData.parse(GetParseData.java:164)
at org.netbeans.modules.web
.jspparser_ext.WebAppParseSupport$1.run(WebAppParseSupport.java:482)

"Inactive RequestProcessor thread [Was:Default RequestProcessor/null]"
daemon prio=1 tid=0x010f8e60 nid=0x91c000 in Object.wait()
[0xb8262000..0xb8262d90]
at java.lang.Object.wait(Native Method)
at org.openide.util.RequestProces
sor$Processor.run(RequestProcessor.java:939)
- locked <0x0ef58008> (a java.lang.Object)
... e por aí vai

Este output será feito no console que iniciou a aplicação, então se você utilizou um atalho do sistema para iniciar e não tiver o console, tente ver no seu sistema onde isto será escrito (no Mac, utilize o Console).
Isto pode ajudar muito desenvolvedor a achar onde está o gargalo de uma aplicação.

Aí que entra como reportar bugs do NetBeans, e foi como descobri a existência dos threaddumps.
Ao reportar um bug, e este sendo de lentidão ou travamento, sempre que possível inclua o threaddump do netbeans.

segunda-feira, 28 de abril de 2008

NetBeans 6.1

Lançado o NetBeans 6.1!

Espero que nesta versão tenham melhorado alguns bugzinhos feios, como a indexação constante dos fontes e perca das referências (é, vc não consegue corrigir imports, ir para a classe...) e algumas lentidões.

Ah, o que mais me chamou atenção foi ter uma versão "Early access for PHP"...

P.S.: li primeiro no blog do Bruno Borges...

sexta-feira, 8 de fevereiro de 2008

Leitura interessante (online): A Catedral e o Bazar

Hoje, percorrendo pelas páginas do Trac, achei um link muito legal, para quase todo o conteúdo do livro "A Catedral e o Bazar", de Eric S. Raymond.
Do próprio site:

Eu analiso um projeto bem sucedido de código livre, o fetchmail, que foi executado como um teste deliberado de algumas teorias surpreendentes sobre a tecnologia de programação sugerida pela história do Linux. Eu discuto estas teorias nos termos de dois estilos fundamentais diferentes de desenvolvimento, o modelo ``catedral'' da maior parte do mundo comercial contra o modelo ``bazar'' do mundo do Linux. Eu mostro que estes modelos derivam de suposições opostas sobre a natureza da tarefa de depurar o software. Eu faço então um argumento sustentado na experiência do Linux para a proposição que ``Dados bastante olhos, todos os erros são triviais'', sugiro analogias produtivas com outros sistemas auto-corrigíveis de agentes egoístas, e concluo com alguma exploração das implicações desta introspecção para o futuro do software.

Tá, eu sei que está um pouco desatualizado (data de 1998), mas achei interessante, por dar alguns pontos de vista de como tratar a equipe de desenvolvedores, beta-testers...

Ah, nas informações do projeto Trac consta que o objetivo é desenvolver e melhorar o próprio Trac, de forma colaborativa, no estilo bazaar...

terça-feira, 4 de dezembro de 2007

Gmail + Talk + ICQ + AIM + ?

Post rápido para novidade excelente: o google (eles vão dominar o
mundo) acaba de integrar o AIM ao gmail. Eu, velho usuario do ICQ,
entrei na onda, já que ICQ e AIM é quase que a mesma coisa.
Não deixem de conferir a novidade em:

http://gmailblog.blogspot.com/2007/12/gmail-chat-aim-crazy-delicious.html
http://www.undergoogle.com/blog/2007/12/google-talk-se-integra-ao-aim.html

e no seu email, claro!!! :D

quinta-feira, 29 de novembro de 2007

Ando devagar porque já tive pressa...

Ando devagar porque já tive pressa
e levo esse sorriso, porque já chorei demais
Hoje me sinto mais forte, mais feliz quem sabe
eu só levo a certeza de que muito pouco eu sei, eu nada sei...
Parafraseando Almir Sater, o NetBeans 6 parece se encaixar perfeitamente.

Em muitos casos estou achando mais lento que a versão 5.5, e não é um pouco mais lento... editar arquivos XML que sejam um pouco extensos -- estamos falando de 600 linhas -- é impossível.

Eu, sinceramente, esperava mais. Não estou desmerecendo o empenho da equipe, acho que as novas funcionalidades ficaram fantásticas, até me adaptei ao novo formato de cores!
Mas, como na 5.5, eu sou mais rápido para completar um /h:outputText do que 2.16GHz! :-) Estou me referindo ao editor em situações para editar JSP/JSF e XML. Em Java ficou (como já era) rápido, mas agora mais organizado. Contudo, experimente ir no início do seu JSP e substituir html por htm:html ou mesmo aguardar as opções de h:datatable.
Sem querer me gabar, mas preferiria não precisar digitar... e pelo jeito vou continuar.

Parece que nem todos estão preocupados com desempenho. No anúncio dos resultados da pesquisa de aceitação do RC2 do NetBeans, no blog do Roumen, 93% dos usuários acham que está pronto para a versão final. Inclusive há um comentário dizendo que o desempenho é importante, mas inserir mais funcionalidades é principal?!?! Desempenho que venha no 6.1...

Bom, para editar meu XML vou ter que apelar para a concorrência. Mas vou continuar relatando meus problemas para a equipe...
Cada um de nós compõe a sua história,
e cada ser em si, carrega o dom de ser capaz, e ser feliz.

sexta-feira, 23 de novembro de 2007

NetBeans 6.0 não permite acentuar commits no Subversion

No NetBeans 6, mesmo o RC2, ainda não é possível acentuar commits.
Ao tentar comitar a mensagem Test: á é í ó ú ç ã (a e i o u c a), retorna o seguinte erro:

svn: Commit failed (details follow):
svn: Can't convert string from native encoding to 'UTF-8':
svn: Test: ?\135 ?\142 ?\146 ?\151 ?\156 ?\141 ?\139 (a e i o u c a)


Achei já o bug relatado e convido a todos para votarem :)

Ah, a dica anterior não funciona no NB6.

Não é mais possível navegar com MS Explorer!

Não, não é o internet explorer...

... mas também, quem será que foi o estagiário que botou o nome neste navio?

Tomara que não tenha sido um Access violation!



Pode até ser humor negro, mas não pude deixar de postar...




Notícia do terra.