Confessionário: bizarrices que você cometeu e sempre escondeu mas agora teve coragem de contar

44 respostas
almircampos

Oi, Galera!

Quem já não cometeu algum erro bizarro no desenvolvimento ou solucionou um problema de modo inusitado, mas que se alguém descobrir você tem vontade de dizer “não fui eu” ou “quando eu cheguei já estava assim” e coisas do gênero?

Bem, esse tópico foi criado por curiosidade e divertimento mas de repente, a bizarrice de um pode diminuir (ou provocar!) a do outro.

DETALHE IMPORTANTE: só valem as próprias bizarrices; não vale contar histórias de outros, afinal é um “confessionário”.

Assim, inauguro o tópico com uma das minhas.

Certa vez tive que recuperar o texto de um banco de dados e mostrá-lo numa página (jsp) no browser. Era um texto composto e eu ia recuperando partes dele no banco e “montando” o texto completo na tela, para formar um parágrafo. Ao testar o módulo pela primeira vez tudo pareceu correr bem e passei adiante no trabalho. Quando fui orgulhosamente mostrar o resultado a outro programador, resolvi trocar o texto no banco de dados para mostrar que estava tudo funcionando bem e aí começou o meu calvário. O ponto final insistia em aparecer na janela, sempre na mesma posição! Bem, como vocês são programadores devem ter imaginado o que passei: olhei o HTML, o banco, o controller e por aí vai. Algum tempo depois (não vou confessar quanto tempo), descobri a bizarrice: uma sujeira na tela - do tamanho, cor e formato do caractere “ponto” da fonte que eu estava usando - exatamente em cima do ponto final do primeiro teste que eu havia feito! :oops: :oops: :oops:

E você? Está se coçando pra contar algo pra gente? Não tenha medo! Você não está só!!! :smiley:

Saudações,
Almir.

44 Respostas

saoj

Não conseguia solucionar um problema num programa client/server o que sempre deixava o cliente num modo inconsistente. Depois de várias tentativas ao longo de meses resolvi criar um thread que checava o cliente de 5 em 5 segundos e se ele estivesse num mode inconsistente “silenciosamente” colocava ele em modo consistente. Nunca mais tive problemas… 8)

almircampos

Pelo menos o cara que vai dar manutenção no código vai poder honestamente dizer “quando cheguei já estava assim!” :smiley:

Hebert_Coelho

Tá parecendo post de comunidade de orkut! Mahuauahauha

Eu estava a refazer um relatório para otimizá-lo, mas eu estava tendo problema com os dados gerados que não batiam na mesma coluna. Aquele tipo de arquivo onde as colunas são separadas por tabulação.

Eu só tinha alterado o SQL e a porcaria do dado sempre vinha diferente sendo que na tela do TOAD os dados retornados eram os mesmo.

O problema? Era a ordem do resultado dos SQLs. O primeiro SQL usava where valor = “AAA” o que eu otimizei era where existis…

Bastou colocar order by nos 2 sqls que o resultado veio o mesmo! Isso me custou de 2 a 3 dias… -_-’’

Eu estava achando que o problema era no código VB q eu havia alterado, pois nunca trabalhei com VB e era o único disponível para otimizar o relatório.

Anime

Logo vai chegar um que não gosta desse tipo de tópico e não consegue ficar indiferente… :roll:

Já aconteceu sim, mas não conto, acha morro de vergonha rsrs… :oops:

almircampos

Anime:
Logo vai chegar um que não gosta desse tipo de tópico e não consegue ficar indiferente… :roll:

Já aconteceu sim, mas não conto, acha morro de vergonha rsrs… :oops:

Um dia você conta… :smiley: Mas já conseguiu me deixar curioso!

almircampos

Interessante… 111 visualizações, mas apenas 3 casos e meio… :smiley:

Dá a impressão de que tem mais gente querendo ver as bizarrices dos outros do que contar as próprias.

Não os censuro! Mesmo assim é possível que apareçam mais algumas interessantes.

Mas a do saoj é a melhor até agora. Difícil de superar!

:lol:

R

almircampos:
Interessante… 111 visualizações, mas apenas 3 casos e meio… :smiley:
Dá a impressão de que tem mais gente querendo ver as bizarrices dos outros do que contar as próprias.

Ta todo mundo com medo de confessar seus ‘podres’ :smiley: :smiley: :smiley:

W

raf4ever:
almircampos:
Interessante… 111 visualizações, mas apenas 3 casos e meio… :smiley:
Dá a impressão de que tem mais gente querendo ver as bizarrices dos outros do que contar as próprias.

Ta todo mundo com medo de confessar seus ‘podres’ :smiley: :smiley: :smiley:

Eu diria eh que o povo nem tem desconfia que fez alguma bizarrice. :slight_smile:

//Daniel

RiQuInHo_

bom deve ser besta esse mas já comentei codigo que acho que n deveria, pois por causa dele meu relatorio n passava e assim que fiz isso funfou rs, pois sempre caia nele e fiz isso… nhaaaaa idiota!

johnny_quest

Uma presepada minha foi uma vez que montei o ambiente de desenvolvimento na máquina do funcionário novo,
e ao gerar o EAR na máquina dele via ant nunca funcionava algumas telas, sendo que na minha máquina com ambiente idêntico funcionava perfeitamente.

Moral da história: Perdi 2 dias inteiro testando, procurando diferenças nos ear gerados, instalando o ambiente novamente, até achar uma configuração
do ant dentro do eclipse que estava setada para java 1.5 sendo que era para ser 1.4. Não sei se foi o cara que alterou no eclipse, e não comentou nada ou se alguma mágica aconteceu e a opção default da jvm voltou para 1.5, mas essa brincadeira deu trabalho para achar, fora o tempo perdido com algo tão babaca.

Luiz_Augusto_Prado

windsofhell:
raf4ever:
almircampos:
Interessante… 111 visualizações, mas apenas 3 casos e meio… :smiley:
Dá a impressão de que tem mais gente querendo ver as bizarrices dos outros do que contar as próprias.

Ta todo mundo com medo de confessar seus ‘podres’ :smiley: :smiley: :smiley:

Eu diria eh que o povo nem tem desconfia que fez alguma bizarrice. :slight_smile:

//Daniel


++

Acho que é bem por ai mesmo.
Como diria o Zagalo: Em time que tá ganhando não se mexe.
Isso acaba dificultando o estudo aprofundado do código.

Meu podre (por ir contra o fluxo) é ainda acreditar que Flash e Flex vão continuar por muito tempo.
Nesse ponto, eu sou totalmente a favor dos plugins como flash, silverlight, ou mesmo o java porque independentemente de navegador sei que qualquer código que eu colocar funcionaria em qualquer navegador independentemente de versão.
Me desanima imaginar o problema que vai ser se der na telha da microsoft querer mudar alguma tag ou nome de atributo de HTML ou CSS ou método javaScript no IE11.

Outro podre…
Eu acho Hibernate uma merda.

J

Já escrevi uma rotina de criptografia (tosca diga-se de passagem) na unha… daquelas que fazem o hex do asc somando alguma coisa…
Isso na década de 90 quando ainda programava em visual basic 4 ou 5… rs rs rs rs

diogozero

Uma vez, em 2009, não lembro por qual motivo, um método só funcionava quando eu chamava ele pela segunda vez, na primeira ela lançava uma exceção.
Então eu fiz uma chamada para o mesmo método dentro do catch(Exception e) {} e no fim das coisas ficou “parecendo” certo.
Ainda era na faculdade e deu para apresentar de boa.
Ainda tenho esse projeto guardado e sempre que lembro me envergonho disso! Hhauishauishauih

S

Antes de aprender css e html eu usava vários & n b s p ; quando eu precisava dar muito espaço.

Alexandre_Saudate

O saoj também. Quais os seus motivos?

adriano_si

Eu tenho alguns… O pior foi o último… Porém deixei um e-mail para quem daria manutenção com as desculpas e explicando o “Porque” de ter feito daquela forma…

Tínhamos uma política de desenv na empresa (algo nosso mesmo, todos nossos prazos iam contando com isso) que não haveria SQL puro dentro da aplicação, só em ÚLTIMO CASO MESMOOOO…

Em mais de 2 anos de empresa, sempre havia conseguido montar a lógica dos relatórios em HQL ou via Objetos. Quando migrei de meu último projeto para o qual estou agora, recebi a tarefa de montar um relatório em 1 dia, justo no meu último dia…

Que miséria cara, acho que é TOP 3 dos Selects mais bizarros que já ví na minha vida… eram quase 350 linhas de SQL com joins de todos os sabores e formatos… Já viu né ??? Estava sendo pressionado e tinha que fazer até o final do dia… Não contei conversa, botei o bicho do jeito que estava e escrevi o e-mail grandemente envergonhado…

Pelo menos fui “perdoado” pela equipe… Por ironia do destino estou voltando para esse projeto e fiquei sabendo que ninguém mexeu no monstro… Ou seja, estou tendo a chance de me redimir… :stuck_out_tongue:

Abs []

almircampos

adriano_si:
Eu tenho alguns… O pior foi o último… Porém deixei um e-mail para quem daria manutenção com as desculpas e explicando o “Porque” de ter feito daquela forma…

Tínhamos uma política de desenv na empresa (algo nosso mesmo, todos nossos prazos iam contando com isso) que não haveria SQL puro dentro da aplicação, só em ÚLTIMO CASO MESMOOOO…

Em mais de 2 anos de empresa, sempre havia conseguido montar a lógica dos relatórios em HQL ou via Objetos. Quando migrei de meu último projeto para o qual estou agora, recebi a tarefa de montar um relatório em 1 dia, justo no meu último dia…

Que miséria cara, acho que é TOP 3 dos Selects mais bizarros que já ví na minha vida… eram quase 350 linhas de SQL com joins de todos os sabores e formatos… Já viu né ??? Estava sendo pressionado e tinha que fazer até o final do dia… Não contei conversa, botei o bicho do jeito que estava e escrevi o e-mail grandemente envergonhado…

Pelo menos fui “perdoado” pela equipe… Por ironia do destino estou voltando para esse projeto e fiquei sabendo que ninguém mexeu no monstro… Ou seja, estou tendo a chance de me redimir… :stuck_out_tongue:

Abs []

Cara, aconteceu algo parecido comigo, mas em menor escala, embora não seja uma bizarrice tão de primeira qualidade como a que você relatou. :lol:

No meu caso, peguei um sistema da própria empresa no qual várias pessoas haviam trabalhado, inclusive eu. Então cheguei num trecho de código com uns ifs aninhados e umas condições com “and” e “or” combinados em cada if. Apenas no meu pensamento fiz comentários usando o jargão técnico tão disseminado na nossa área: “P… que pariu, assim é f…, como os caras fazem uma m… dessa!?”. Bem, o resultado é que ao final descobri o autor do programa: eu mesmo, meses atrás, numa situação de pressão para a entrega. Pior: havia um e-mail meu sobre o sistema e um dos tópicos era dizendo que “alguns trechos deveriam ser revistos imediatamente após a entrega” pois estavam muito “complicados”, embora funcionassem. :oops:

Acho que é a Lei Universal do Retorno…

L

Tive que implementar uma custumizacao de uma ric:hcomboBox para pesquisa e de um oprderingList, so que o maldito nao carregava os scripts do componente na pagina a grandiosa solução foi esta abixa,criei os compentes no meu template default pra forcar o maldito a carregar os scripts vejam ki massa?

<!--
	 ***************** WARNING - CAUTION - RADIOATIVE -TOXIC*****************
	Parece ridiculo mas não é(ou será que é????)!!!
	A combo abaixo é necessaria , pq sem ela o maldito Richfaces nao carrega os Scripts 
	de combobox nativos da propria biblioteca richFaces,incrivel ele nao sabe que precisa do seus proprios scripts, ki burro, 
	sendo assim fica impossivel sobrescrever os metodos da biblioteca que sao utilizados nas combos de produtos, reagentes entre 
	outras combos, mesmo problema com orderingList.
	FAVOR JAMAIS REMOVER ESTA COMBO DAKI,PENSE NELA COMO UM DOS PILARES DO SISTEMA ,
	SE REMOVER MTAS COISAS PODEM DESABAR!!
	ISTO PODE SER FATAL PARA O SISTEMA!!!!!!!!!!!	
	-->
			<rich:comboBox rendered="false" id="inutilsCombo">
				<f:selectItem itemLabel="a" itemValue="b" id="inutilsItem" />
			</rich:comboBox>
			
			<rich:orderingList value="" var="I" id="inutilsTags" rendered="false" />
			

			<!-- *****************FIM DA ZIKA ***************** -->
J
lgweb:
Tive que implementar uma custumizacao de uma ric:hcomboBox para pesquisa e de um oprderingList, so que o maldito nao carregava os scripts do componente na pagina a grandiosa solução foi esta abixa,criei os compentes no meu template default pra forcar o maldito a carregar os scripts vejam ki massa?
<!--
	 ***************** WARNING - CAUTION - RADIOATIVE -TOXIC*****************
	Parece ridiculo mas não é(ou será que é????)!!!
	A combo abaixo é necessaria , pq sem ela o maldito Richfaces nao carrega os Scripts 
	de combobox nativos da propria biblioteca richFaces,incrivel ele nao sabe que precisa do seus proprios scripts, ki burro, 
	sendo assim fica impossivel sobrescrever os metodos da biblioteca que sao utilizados nas combos de produtos, reagentes entre 
	outras combos, mesmo problema com orderingList.
	FAVOR JAMAIS REMOVER ESTA COMBO DAKI,PENSE NELA COMO UM DOS PILARES DO SISTEMA ,
	SE REMOVER MTAS COISAS PODEM DESABAR!!
	ISTO PODE SER FATAL PARA O SISTEMA!!!!!!!!!!!	
	-->
			<rich:comboBox rendered="false" id="inutilsCombo">
				<f:selectItem itemLabel="a" itemValue="b" id="inutilsItem" />
			</rich:comboBox>
			
			<rich:orderingList value="" var="I" id="inutilsTags" rendered="false" />
			

			<!-- *****************FIM DA ZIKA ***************** -->

Como diria um amigo meu (infelizmente já falecido)...

Se for para fazer uma gambiarra, que faça consciente e deixe bem documentada!

almircampos

windsofhell:
raf4ever:
almircampos:
Interessante… 111 visualizações, mas apenas 3 casos e meio… :smiley:
Dá a impressão de que tem mais gente querendo ver as bizarrices dos outros do que contar as próprias.

Ta todo mundo com medo de confessar seus ‘podres’ :smiley: :smiley: :smiley:

Eu diria eh que o povo nem tem desconfia que fez alguma bizarrice. :slight_smile:

//Daniel

Esse comentário do Daniel é assustador!!! Talvez os outros lendo as nossas, reconheçam a suas, nelas. :wink:

Luiz_Augusto_Prado

asaudate:
Luiz Augusto Prado:

Outro podre…
Eu acho Hibernate uma merda.

O saoj também. Quais os seus motivos?

Eu sei, eu e ele até já trocamos umas idéias sobre aqui:

1 - Gosto do SQL (DAO com JDBC)
2 - Prefiro eu mesmo montar os meus Objetos
3 - Acho a forma dele mapear os objetos estranhas. Tando em XML como nas anotations
4 - Eu usei o Link to SQL e achei muito legal. Me viciei nele. Certamente que por ele parecer mais com o SQL tenho essa opinião quando comparo com o Hibernete.

5 - Essa é especial:
Isso aconteceu a uns 3 anos. Sabe quando vc tem uma tabela com autorelacionamentos? Era para um Grafo, mas nesse caso eu tinha que pegar o grafo só até uma determinada profundidade: 3. Na época não consegui fazer funcionar de forma nenhuma. Se vc colocava em modo lazy, ele só pegava o primeiro nivel. Se eu utilizava EAGER ele travava. Acho que entrava em loop infinito.
Acabei usando o HQL. HUahuahua…
Como vcs fariam isso?

Alexandre_Saudate

Me parece com algum bug… esse auto-relacionamento era um pra um ou um pra muitos? Faz sentido que ele trave com eager, mas não com lazy. Eu mesmo já tive essa necessidade uma vez e foi tranquilo.

Alexandre_Saudate

Luiz Augusto Prado:
asaudate:
Luiz Augusto Prado:

Outro podre…
Eu acho Hibernate uma merda.

O saoj também. Quais os seus motivos?

Eu sei, eu e ele até já trocamos umas idéias sobre aqui:

1 - Gosto do SQL (DAO com JDBC)
2 - Prefiro eu mesmo montar os meus Objetos
3 - Acho a forma dele mapear os objetos estranhas. Tando em XML como nas anotations
4 - Eu usei o Link to SQL e achei muito legal. Me viciei nele. Certamente que por ele parecer mais com o SQL tenho essa opinião quando comparo com o Hibernete.

5 - Essa é especial:
Isso aconteceu a uns 3 anos. Sabe quando vc tem uma tabela com autorelacionamentos? Era para um Grafo, mas nesse caso eu tinha que pegar o grafo só até uma determinada profundidade: 3. Na época não consegui fazer funcionar de forma nenhuma. Se vc colocava em modo lazy, ele só pegava o primeiro nivel. Se eu utilizava EAGER ele travava. Acho que entrava em loop infinito.
Acabei usando o HQL. HUahuahua…
Como vcs fariam isso?

Luiz Augusto Prado, juro que não fui procurar =)

http://www.infoq.com/br/news/2012/08/praticas-ineficazes

douglaskd

na época eu ainda programava em php+joomla

tinha um componente joomla que mostrava uma imagem que não devia aparecer, a solução seria alterar o css do componente, mas por muita pressa/falta de conhecimento, coloquei um javascript(puro) que dava display:none nessa imagem rs, então coloquei o javascript no final da página kkkkkkkkkkk,

se o usuário tivesse uma vista muito apurada, ele via a imagem sumindo depois que a página carregasse.

ahh, lembrei, era um projeto freela, ainda coloquei um comentario acima do script kkkkkkkkk, muito tenso…

acho que ganhei no teor de bizarrice

Hebert_Coelho

asaudate:
Luiz Augusto Prado, juro que não fui procurar =)

http://www.infoq.com/br/news/2012/08/praticas-ineficazes


Oliver condena, ainda, a utilização de interações nativas com bancos de dados, ao invés de se usufruir de soluções de mapeamento objeto-relacional já existentes. Para ele, não vale a pena perder todos os benefícios trazidos por uma solução desse tipo.
O autor do livro Pro JPA 2 também defende a mesma teoria. [=

Eu prefiro crer em algum erro de utilização do que um real problema da ferramenta. [=

Luiz_Augusto_Prado

asaudate:
Luiz Augusto Prado:

5 - Essa é especial:
Isso aconteceu a uns 3 anos. Sabe quando vc tem uma tabela com autorelacionamentos? Era para um Grafo, mas nesse caso eu tinha que pegar o grafo só até uma determinada profundidade: 3. Na época não consegui fazer funcionar de forma nenhuma. Se vc colocava em modo lazy, ele só pegava o primeiro nivel. Se eu utilizava EAGER ele travava. Acho que entrava em loop infinito.
Acabei usando o HQL. HUahuahua…
Como vcs fariam isso?

Me parece com algum bug… esse auto-relacionamento era um pra um ou um pra muitos? Faz sentido que ele trave com eager, mas não com lazy. Eu mesmo já tive essa necessidade uma vez e foi tranquilo.

No lazy não dava problema, mas também não pegava os nós filhos, que era os que eu precisava.

Valeu asaudate…
Ainda trabalho com hibernate, mas nos meus projetos pessoais e prefiro deixa-lo de lado para ir melhorando meu ORM.
Sabe como é filho… Filho todo pai acha bonito, por mais feio que ele seja para os outros. :lol: :lol: :lol:

G

FOR UPDATE…

Estava louco com um trecho de código que não funcionava, debugava e a princípio tudo certo! Claro que eu estava com uma tabela em lock no PL…

almircampos

douglaskd:
na época eu ainda programava em php+joomla

tinha um componente joomla que mostrava uma imagem que não devia aparecer, a solução seria alterar o css do componente, mas por muita pressa/falta de conhecimento, coloquei um javascript(puro) que dava display:none nessa imagem rs, então coloquei o javascript no final da página kkkkkkkkkkk,

se o usuário tivesse uma vista muito apurada, ele via a imagem sumindo depois que a página carregasse.

ahh, lembrei, era um projeto freela, ainda coloquei um comentario acima do script kkkkkkkkk, muito tenso…

acho que ganhei no teor de bizarrice

Cara, tá muito bem cotado!!! kkkkkkkk 8)

Leozin

Se eu botar no confessionário que já encontrei código com trechos da bíblia publicados, eu irei queimar no mármore do inferno?

diogozero

Não vale código dos outros, né? Mas caramba… essa eu quero ver! Hhasoauishaishauishas

Alexandre_Saudate

Promete que não vai contar os meus podres que tá tudo certo!!! Hahahahahahaha!!

Y

A maior que eu me lembro foi tentando, de madrugada, fazer um relatorio de fechamento mensal bater com o valor correto para ser divulgado no dia seguinte.

O meu ultimo dialogo com o usuario antes de finalmente conseguir fazer com que o relatorio mostrasse o valor correto foi:

“Quanto tem que dar?”

almircampos

YvGa:
A maior que eu me lembro foi tentando, de madrugada, fazer um relatorio de fechamento mensal bater com o valor correto para ser divulgado no dia seguinte.

O meu ultimo dialogo com o usuario antes de finalmente conseguir fazer com que o relatorio mostrasse o valor correto foi:

“Quanto tem que dar?”

Cara… kkkk… pela pergunta a gente imagina o resto… kkkkkkkk…

KKKKKKKKKKKKK

(rindo à-tôa)

R

Eu duvido que vc queira mexer nesse troço :smiley: :smiley: :smiley:

bestlinux

Bom, não estou lembrando agora, mas já encontrei função em Java Script com nome bizarros (feito por freelancer):

function telekinesis(){
						        tbl = document.getElementById("cLumFilterTable");
						        var novaLinha = tbl.insertRow(3);
						        var cell1=novaLinha.insertCell(0);
								cell1.className="cLumLabelTd";
						        cell1.innerHTML = document.getElementById("td1").innerHTML;
								var cell2=novaLinha.insertCell(1);
								var cell3=novaLinha.insertCell(2);
								cell3.innerHTML = document.getElementById("td3").innerHTML;
						        document.getElementById("parentTempTable").style.display="";
						        var div = document.getElementById("parentTempTable");
						        var tempTable = document.getElementById("tempTable");
						        div.removeChild(tempTable);
						    }
						    telekinesis();
adriano_si

raf4ever:
adriano_si:

Pelo menos fui “perdoado” pela equipe… Por ironia do destino estou voltando para esse projeto e fiquei sabendo que ninguém mexeu no monstro… Ou seja, estou tendo a chance de me redimir… :stuck_out_tongue:

Eu duvido que vc queira mexer nesse troço :smiley: :smiley: :smiley:

Pois é…

Sabe aquela coisa que você não fez que ficou te incomodando ??? Pois é… Essa é uma delas… Se bem que eu já ouvi de alguns que tem tanta regra nova pra implementar “pra ontem” que talvez acabe ficando pro fim da fila mesmo… rsrs :wink:

Abs[]

almircampos

A que vou contar agora, fui buscar no fundo do baú…

No início dos anos 90, trabalhei num projeto onde coordenei o desenvolvimento de 11 sistemas integrados, na plataforma Unix V, utilizando um computador da brasileira Sisco (não confundam com a Cisco). Na época eu não sabia nada de Unix. Então, tivemos um treinamento rápido e depois caimos em campo. Bem, além de coordenar, eu também desenvolvia e fazia o papel de suporte operando o UNIX. Vocês podem imaginar o quando liguei para o suporte da Sisco para pegar informações ou - pior - para reverter as bobagens que eu fazia. Liguei tanto, que já conhecia o pessoal pelo nome e eles também me conheciam pelo nome!

Resumo da história: num dos atendimentos o técnico e eu acabamos conversando sobre assuntos gerais e acabei descobrindo que eles tinham um ranking interno relativo aos usuários que faziam as maiores bizarrices no mês. Descobri, por fim, que em mais de uma ocasião eu fui agraciado com o primeiro lugar, o que me dava direito ao Trofeu A.N.T.A., onde tão singela sigla significava “Analista Notório em Tecnologia Avançada”!!!

Ou seja, minha premiação não foi uma bizarrice específica, mas pelo “conjunto da obra”, digamos assim. :lol:

gqferreira

Bom... o post nem é tão velho, vou comentar porque me diverti com a minha bizarrice.

A minha é recente, foi semana passada. Vamos lah...

Eu tinha criado um relatório pelo iReport e tinha configurado o dataset com uma determinada SQL. Funcionou de boa mas depois que inclui um parametro ($p{variavel}) nessa SQL começou a dar pau... ao criar o preview o iReport vomitava um monte de stacktrace que eu não consegui identificar o erro na SQL, simplesmente dava SQLExecption e ponto final!.

Copiei a SQL que constava no stacktrace e rodei direto no pgAdmim e realmente não rodou, a explicação do erro não era claro. Eu examinava a SQL umas trocentas vezes e não via erro de sintaxe. Como eu tinha essa mesma SQL em outro lugar, copiei as duas e coloquei num editor de texto, uma em cada linha e ia comparando caracter por caracter (na esperança de que fosse uma virgula no lugar de um ponto)... nada! As duas eram idênticas mas só uma funcionava! Passei um MD5 nas duas e o hash dava diferente.... ai fiquei com raiva... criei um metodo em Java para comparar o número do char:
public class ComparaString {
    public static void main (String[] args){
        String phraseOne = "SELECT l.id AS id_locacao, r.id AS id_receber, c.id AS id_cliente, l.data_fim, r.id AS id_receber, r.valor, r.pago_em, r.juros, r.id_extrato, r.pro_rata, r.pro_rata, c.nome || ' ' || c.sobrenome AS nome_completo_cliente FROM a_receber r INNER JOIN locacao l ON l.id = r.id_locacao INNER JOIN cliente c ON c.id = l.id_cliente WHERE TO_DATE((TRIM(TO_CHAR(DATE_PART('year', l.data_fim), '9999')) || '-' || TRIM(TO_CHAR(DATE_PART('month', l.data_fim), '99')) || '-01'), 'yyyy-mm-dd') = TO_DATE('2013'||'-'||'01'||'-01', 'yyyy-mm-dd') AND DATE_PART('day', l.data_fim) = 15";
        String phraseTwo = "SELECT l.id AS id_locacao, r.id AS id_receber, c.id AS id_cliente, l.data_fim, r.id AS id_receber, r.valor, r.pago_em, r.juros, r.id_extrato, r.pro_rata, r.pro_rata, c.nome || ' ' || c.sobrenome AS nome_completo_cliente FROM a_receber r INNER JOIN locacao l ON l.id = r.id_locacao INNER JOIN cliente c ON c.id = l.id_cliente WHERE TO_DATE((TRIM(TO_CHAR(DATE_PART('year', l.data_fim), '9999')) || '-' || TRIM(TO_CHAR(DATE_PART('month', l.data_fim), '99')) || '-01'), 'yyyy-mm-dd') = TO_DATE('2013'||'-'||'01'||'-01', 'yyyy-mm-dd') AND DATE_PART('day', l.data_fim) = 15";
        
        char[] phraseOneChars = phraseOne.toCharArray();
        char[] phraseTwoChars = phraseTwo.toCharArray();
        
        System.out.println("Tamanho da primeira string:"+phraseOneChars.length);
        System.out.println("Tamanho da segunda string:"+phraseTwoChars.length);
        
        System.out.println("Sao iguais?:"+phraseOne.equals(phraseTwo));
        
        for (int i = 0; i<phraseOneChars.length; i++){
            if (phraseOneChars[i] != phraseTwoChars[i]){
                System.out.println("('"+phraseOneChars[i]+"'<>'"+phraseTwoChars[i]+"')");
                System.out.println((int)phraseOneChars[i]);
                System.out.println((int)phraseTwoChars[i]);
                break;
            }
            else{
                System.out.print(phraseOneChars[i]);
            }
        }
    }
}

Dessa forma eu constatei que havia um caracter no meio da SQL que não batia com a outra... visualmente as duas SQLs eram identicas mas na SQL que funcionava tinha um char[32] (space na tabela ASCII) e na SQL que dava erro tinha um char[160] (caracter não representável, ou seja, um espaço idêntico!).

ViniGodoy

Não vale código dos outros, né? Mas caramba… essa eu quero ver! Hhasoauishaishauishas

Para código dos outros tem esse outro tópico de 62 páginas:

Eu me lembro que erroneamente usei variáveis estáticas em C# para fazer um cache. Mas não me lembrava que na empresa onde eu trabalhava, usavam um webfarm e cada servidor teria seu próprio conjunto de statics…
Isso reforçou ainda mais minha teoria de que statics são coisas do mal e em 99% dos casos levam a problemas…

Aliás, a maior parte dos memory leaks que já detectei em códigos meus, também vieram de statics.

ViniGodoy

Teve uma bizarrice que eu fiz e acabei descobrindo ser um undefined behavior do Java.

Eu queria criar uma tela (em Swing mesmo), cujo layout estivesse previamente definido. Então, fiz o layout, com botões e tudo mais. E chamei um painel, que seria definido na subclasse. Nada mais do que isso aqui:

add(criarPainelCentral());

Então, imaginem. Bastaria o cara criar uma subclasse “TelaCadastro”, filha de “TelaAbstrata”, implementar o método criarPainelCentral() e já ganharia parte do layout.
Nenhum problema, certo? Errado.

O problema é que esse add estava no construtor. E, como vcs sabem, classes são criadas de cima para baixo. Então, no momento em que criarPainelCentral() era chamado, por ser um método sobrescrito, ele chamava um método de uma classe que ainda não existia.

A JVM da Oracle se comporta de uma maneira um tanto bizarra nesse caso:

a) Ela chama o construtor da superclasse;

b) Ao chegar no método virtual, ele vai para a subclasse.

c) Ele cria todos os atributos que forem usados da subclasse, no momento em que forem chamados;

d) No final do método, ele termina de rodar o construtor da superclasse;

e) E aqui vem a pegadinha. Ao terminar o construtor da superclasse, ele roda o da subclasse recriando todos os atributos.

Ou seja, eu acabava com uma tela cujos componentes do painel central eram exibidos, mas não eram os mesmos componentes que estava nas propriedades da classe. :smiley:

Levei trezentos e oito anos para descobrir porque diabos os componentes ignoravam os comandos que eram dados a eles nesse painel central.
Resolvemos o problema trocando de herança para composição. A tela com os botões passou a receber o painel por parâmetro em seu construtor. :wink:

luistiagos

Acredite se quiser. Existem lugares onde isto é bem comum…

maior_abandonado

hehe…

nem faz muito tempo, eu tinha que criar uma tela aqui num sistema, seguindo um protótipo passado pela empresa cliente, mas várias coisas que dependiam de uns scripts usando jquery não funcionavam direito quando você pegava do protótipo e passava para a sua classe, esse era um problema que eu fui ver com um arquiteto da empresa e ele falou que tinha esse problema em vários lugares… essa tela ai era uma com abas, era adicionada uma div ao lado das abas da mesma forma que as divs das abas e nessa div adicional era colocada uma imagem de background, no protótipo isso funcionava normal, mas se eu copiasse esse código não exibia igual, ao invés de ir pro lado ia para baixo, não importando o tamanho vertical do lugar onde estava sendo inserida a aba, a tela com as abas, enfim… eu conseguia colocar acima do painel com as abas e posiciona-la mais para a direita, mas não ficava igual por que ficava mais para cima no layout não conseguia colocar do lado das abas como estava no layout (parece coisa besta mas perdi uma tarde inteira com isso), se eu mandasse posicionar mais para baixo, descia essa div mas descia a de baixo também ou dava algum outro problema de uma ficar em ciam da outra e ir para algum lado. No fim das contas eu deixei a div em cima mesmo posicionada a direita mas ai eu defini no css a margem de baixo negativa, assim o div de baixo ao invés de se distanciar se aproximava… e foi o único jeito que funcionou…

eu achei mesmo engraçada essa solução…rs

obviamente design e front end não é o meu forte… eu apenas quebro um galho como todo programador deveria…

kmunga

Acidentalmente eu colei um link de um site que continha várias fotos de pessoas mortas em um documento aqui na empresa, e o documento foi para o chefe…a minha sorte é que o chefe viu antes de assinar e mandar para brasília.

J

Se conseguiu esconder talvez não seja tão bizarro assim.

Criado 18 de agosto de 2012
Ultima resposta 28 de dez. de 2012
Respostas 44
Participantes 26