

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Rodrigo Kumpera Weblog &#187; anger management</title>
	<atom:link href="http://www.kumpera.net/blog/index.php/category/anger-management/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kumpera.net/blog</link>
	<description>Meus achados sobre tecnologia</description>
	<lastBuildDate>Thu, 10 Jun 2010 04:33:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Ode ao C</title>
		<link>http://www.kumpera.net/blog/index.php/2009/01/12/ode-ao-c/</link>
		<comments>http://www.kumpera.net/blog/index.php/2009/01/12/ode-ao-c/#comments</comments>
		<pubDate>Tue, 13 Jan 2009 02:34:40 +0000</pubDate>
		<dc:creator>kumpera</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[anger management]]></category>
		<category><![CDATA[language design]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[macros]]></category>
		<category><![CDATA[type systems]]></category>

		<guid isPermaLink="false">http://www.kumpera.net/blog/?p=123</guid>
		<description><![CDATA[A parte que mais odeio no C é ser minha melhor opção. Sim, sério, para aquilo que faço hoje em dia, realmente não existe linguagem melhor. E isso de deixa maluco pois se trata de uma linguagem anacrônica, cheia de problemas enormes que aparentemente toda comunidade de PLR esqueceu de tentar resolver.
Para quem já programou [...]]]></description>
			<content:encoded><![CDATA[<p>A parte que mais odeio no C é ser minha melhor opção. Sim, sério, para aquilo que faço hoje em dia, realmente não existe linguagem melhor. E isso de deixa maluco pois se trata de uma linguagem anacrônica, cheia de problemas enormes que aparentemente toda comunidade de PLR esqueceu de tentar resolver.</p>
<p>Para quem já programou em C, ou mesmo C++, e em uma linguagem de alto nível tais quais C#, Haskell ou LISP sabe o tamanho do sofrimento que é trabalhar com uma ferramenta tão primitiva. Aos incautos não estou me referindo nem me referindo as vantagens óbvias dessas linguagens como gerenciamento automático de lixo, um sistema de tipos rico ou tipagem ou dinâmica[1].</p>
<p>Quando se programa próximo do metal ter um controle e visão muito clara daquilo que é gerado é muito importante, então coisas como verificações inseridas pelo compilador, não ter controle fino sobre a representação dos dados ou simplesmente não podem burlar o sistema de tipos inviabilizam o uso de uma linguagem &#8211; por mais estranho que pareça.</p>
<p>Entretanto usar destes argumentos para defender as relíquias que são C e C++ é temerário. Ambas linguagens foram construídas sob as bases do que era avançado em termos de compiladores nos anos 70 e para a capacidade de processamos do começo dos anos 90. Muita coisa mudou de lá para cá, menos o fato de C++ demorar horrores para compilar.</p>
<p>A primeira grande falha do C, e uma que chama muito a atenção, é o sistema de módulos e compilação separada. Que realmente não existe. Em ambas as linguagens se usa inclusão textual de cabeçalhos com declarações supostamente exportadas por outros módulos do sistema e pronto. O problema disso é óbvio se já tiver trabalhado em projetos grandes. O tempo de compilação individual aumenta sem razão aparente, conflitos com o nome de símbolos ocorrem e, em geral, atrapalham a vida de todos.</p>
<p>Continuando com a questão de processamento de texto. Macros em C provavelmente são o recurso mais importante da linguagem, aquele que a tira da lista de inúteis. É bem freqüente encontrar uma infinidade de truques feitos usando macros para sanar a falta de expressividade da linguagem. Porém tão comum quanto é encontrar gente frustada com a dificuldade de depurar um sistema rico em macros. Ao mesmo tempo, programando um dia com LISP qualquer um enxerga que um grande sistema de macros faz qualquer linguagem medíocre ir muito longe.</p>
<p>Por fim, minha última reclamação é devido ao fato de estar em 2009 e ainda ser obrigado a usar uma linguagem sem inferência de tipos. O artigo do Robin Milner tem quase 31 anos e ainda assim sou obrigado a pagear o compilador com aquilo que ele consegue descobrir sozinho. Inferência de tipos é um recurso ainda mais importante quando falamos de sistemas de tipos mais ricos.</p>
<p>Ainda assim, por algum motivo que me escapa, não existe um substituto usável para C ou C++. Talvez seja pelo fato de tal linguagem não possuir muito acadêmico em termos de papers e PHDs, ou que a enorme parte da comunidade de programadores destas linguagens é cega por achar que são o último biscoito do pacote.</p>
<p>[1]Ou latente, caso tenha um fetiche pelo Fowler.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kumpera.net/blog/index.php/2009/01/12/ode-ao-c/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Falha de segurança no site da Anatel compromete todos usuários</title>
		<link>http://www.kumpera.net/blog/index.php/2008/08/21/falha-de-seguranca-no-site-da-anatel-compromete-todos-usuarios/</link>
		<comments>http://www.kumpera.net/blog/index.php/2008/08/21/falha-de-seguranca-no-site-da-anatel-compromete-todos-usuarios/#comments</comments>
		<pubDate>Thu, 21 Aug 2008 14:37:10 +0000</pubDate>
		<dc:creator>kumpera</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[anger management]]></category>
		<category><![CDATA[misc]]></category>

		<guid isPermaLink="false">http://www.kumpera.net/blog/?p=87</guid>
		<description><![CDATA[Hoje fiquei sabendo através de um amigo que o sistema de chamados da anatel possui um furo de segurança que expõe todos dados dos chamados feitos por qualquer pessoa. Incluindo usuário e senha. Sim, isso mesmo, usuário e senha. A vulnerabilidade é tão grande que permite coletar os dados de todos usuários do sistema de [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje fiquei sabendo através de <a href="http://plentz.org/2008/08/21/e-a-privacidade-anatel/">um amigo</a> que o sistema de chamados da anatel possui um furo de segurança que expõe <strong>todos</strong> dados dos chamados feitos por qualquer pessoa. Incluindo <strong>usuário</strong> e <strong>senha</strong>. Sim, isso mesmo, usuário e senha. A vulnerabilidade é tão grande que permite coletar os dados de todos usuários do sistema de maneira trivial por qualquer pessoa que entenda o básico de como funciona a web.</p>
<p>Os irresponsáveis pelo sistema permitem consultar os dados de um chamado sem qualquer forma de autenticação. Basta acessar <a href="http://sistemas.anatel.gov.br/focus/FaleConosco/MostrarDetalheSolicitacao.asp?idtSolicitacao=ZZZ">essa url</a> e trocar o <em>ZZZ</em> pelo número do chamado. Fosse apenas esse o problema não estaria eu tão assustado, porém se olharmos com cuidado para o problema vamos notar uma série de agravantes.</p>
<p>A página inclui uma enorme quantidade de dados pessoais do usuário, desde endereço a telefone e CPF. Estes são dados mais que suficientes para realizar vários tipos de fraudes. Fosse apenas este o problema não estaria tão assustado, pois seria necessário saber o código da solicitação para ler tais informações.</p>
<p>Vamos então verificar a segurança do código do chamado. Abra dois chamados, um em seguida do outro, e note que se trata de um número seqüencial pequeno sem qualquer forma de verificação ou randomização. Ou seja, é trivial coletar todos  chamados com ferramentas simples disponível em qualquer computador pessoal.</p>
<p>Finalmente vem a cartada final, reparem nos dados exibidos na página, eles incluem email e cpf. Até ai tudo bem, até você ir para a página de login do sistema e descobrir que para entrar você deve informar, acredite, seu email e cpf. Ou seja, temos como fazer não só harvesting de dados dos usuários, mas de suas senhas também.</p>
<p>Segurança como essa é inadmissivel para um órgão governamental. Isso é ridículo, é um afronte a nossa privacidade. Os amadores que fizeram esse sistema ignoraram todas regras básicas de segurança que qualquer desenvolvedor safo tem a obrigação de saber. Anatel, corrija isso com urgência e tome as devidas medidas administrativas para esse tipo de desastre não ocorra novamente. Por favor, a todos que lerem este texto, <strong>liguem já</strong> para a Anatel no <strong>0800 33 2001</strong>, registrem uma reclamação formal e divulguem esse problema para o quanto antes ser solucionado.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kumpera.net/blog/index.php/2008/08/21/falha-de-seguranca-no-site-da-anatel-compromete-todos-usuarios/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>O trânsito paulistano admite uma solução tecnológica?</title>
		<link>http://www.kumpera.net/blog/index.php/2008/06/19/o-transito-paulistano-admite-uma-solucao-tecnologica/</link>
		<comments>http://www.kumpera.net/blog/index.php/2008/06/19/o-transito-paulistano-admite-uma-solucao-tecnologica/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 06:17:55 +0000</pubDate>
		<dc:creator>kumpera</dc:creator>
				<category><![CDATA[Scalability]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[anger management]]></category>

		<guid isPermaLink="false">http://www.kumpera.net/blog/index.php/2008/06/19/o-transito-paulistano-admite-uma-solucao-tecnologica/</guid>
		<description><![CDATA[Essa foi uma pergunta que eu me fiz outro dia. Ela surgiu durante uma discussão sobre possíveis soluções para o inferno diário de milhões de pessoas. O argumento da maioria dos presentes era que a única real solução era construir metro. Vim a acreditar que essa é, de longe, aquilo que nossa cidade precisa.
Basta um [...]]]></description>
			<content:encoded><![CDATA[<p>Essa foi uma pergunta que eu me fiz outro dia. Ela surgiu durante uma discussão sobre possíveis soluções para o inferno diário de milhões de pessoas. O argumento da maioria dos presentes era que a única real solução era construir metro. Vim a acreditar que essa é, de longe, aquilo que nossa cidade precisa.</p>
<p>Basta um pouco de matemática para provar que não é cavando túneis que vamos reduzir o caos do transporte. Vamos pegar o caso de uma cidade com um transporte considerado referencia global. Londres possui 408km de metro para 7,5 milhões de habitantes, ou um quilômetro para cada 18,3mil pessoas. Enquanto isso na região metropolitana de São Paulo sobrevivem 19,2 milhões de pessoa com 68km de metro e 257km de trem, ou seja, 282,3mil se debatendo por quilômetro de metro ou 59mil se espremendo no transporte metroviário da cidade.</p>
<p>Fazendo uma simples regra de três, a cidade precisa de mais 720km de trilhos para ter o mesmo nível de conforto de Londres. Pronto, resolvido, só construir agora. Porém as pessoas esquecem que dois detalhes, custo e prazos. Primeiro aos custos, a linha 4 foi orçada originalmente em 1,25 bilhões de dólares e tem uma extensão de quase 13km, o que significa 155 milhões de reais por quilômetro. Por esse parâmetro, São Paulo precisa de aproximadamente 112 bilhões em investimentos, ou sete vezes mais que os 15,8 destinados a todos programas do PAC para o ano de 2008. Mas vamos esquecer isso, pois dinheiro não é o problema. Sério.</p>
<p>O ponto importante é o tempo de construção. No atual ritmo de quatro quilômetros ao ano as obras ficariam prontas somente em 2188. Mas as coisas vão melhorar e vamos andar na mesma velocidade frenética da construção do metrô chines em Pequim, que é cinco vezes mais rápida. Ainda assim, as obras seriam entregues em 2044, daqui 36 anos.</p>
<p>Ouviram bem, serão trinta e seis anos de espera se, por milagre, passarmos a construir na velocidade maluca dos chineses. Vejamos, daqui todo esse tempo eu vou ter 62 anos e a todos dos leitores desse blog terão bem mais de cinqüenta. Ou seja, vamos estar na terceira idade, próximo de nos aposentarmos. Porém se o ritmo das obras se mantiver, talvez nossos bisnetos assistam a conclusão perto do final de suas vidas.</p>
<p>Eu não quero esperar até minha aposentadoria para ter um transporte urbano que preste na minha cidade. Não podemos esperar mais de três décadas, precisamos disso o mais rápido possível. Precisamos para ontem, não podemos que cada um jogo fora centenas de horas parado em engarrafamentos todo ano.</p>
<p>Dito isso, o quanto a tecnologia mudou nossas vidas nos últimos dez anos? Em especial, vamos refletir na questão organizacional das nossas vidas. Hoje é muito fácil via celular e internet organizar reuniões e grupos &#8211; basta um tweet &#8220;vamos beber&#8221; que em uma horas estão todos no bar certo. Hoje é muito fácil centralizar, catalogar, manipular e consultar informação pertinente a milhões de pessoas em tempo real &#8211; basta pensar em coisas como redes sociais, rss e sites de busca. Por fim, hoje a informação possui uma tremenda mobilidade, um celular moderno tem localização via GPS e até 1mb de largura de banda com a internet.</p>
<p>Agora vamos pensar em como opera o transporte público hoje. Temos linhas de ônibus fixas e definidas por engenheiros de tráfego baseados em pesquisar de origem e destino. Nós temos rotas estáticas de transporte, você conseguiria imaginar a internet sem roteamento dinâmico de pacotes? Nós temos rotas otimizadas segundo critérios antigos &#8211; o que seria do Google se a busca fosse baseada no conteúdo de um anos atrás apenas? Nós temos itinerários e linhas que não são adaptadas as necessidades dos usuários no momento que usam &#8211; imagine usar um navegador com 30 minutos de atraso.</p>
<p>Nosso sistema de transporte não deve ser modernizado, precisa ser recriado, repensado e quebrar todas barreiras convencionais. Porque você precisa pegar um ônibus que passa em lugares e horários pré-definidos? Imagine se bastasse do seu celular informar seu destino que um sistema ajustaria a rota de um veículo para melhor servir você e otimizar o uso das nossas vias? Algo quase como um taxi coletivo a custos de um convencional. Hoje temos todas as peças do quebra cabeça tecnológico para viabilizar isso.</p>
<p>Basta começar a pensar no assunto para centenas de idéias surgirem, a maioria delas muito melhor que as minhas. Basta pensar em um modelo de transporte que seja tão ágil quanto nossa vida moderna é, ou deveria ser.</p>
<p>Minha contribuição, entretanto, não é a sugestão tecnológica. O transporte de São Paulo é um mercado de 8 bilhões de reais ao ano, pelo menos. Muita grana não? Porém existe uma reserva de mercado para novas empresas entrarem e na forma de atuação delas, além de um cartel de empresas controlando o serviço hoje. Todos sabemos dos prejuízos que tais reservas causam ao interesse público, por isso a única solução é abrir o setor ao mercado como um todo e permitir que as empresas decidam como operar modal que irão oferecer. O resto deixem por conta da iniciativa privada, que é mister sua capacidade de inovação em face a livre concorrência.</p>
<p>Todo paulistano tem a obrigação de aproveitar que estamos em ano eleitoral, discutir o assunto, questionar seu candidato e tomar uma decisão informada em novembro. Não vamos mais uma vez deixar políticos nos enganarem com suas promessas vazias. Vamos dessa vez mostrar que não temos sangue de barata e mostrar exatamente aquilo que queremos. Eu estou aqui fazendo a minha, agora você Paulistano vá fazer a sua!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kumpera.net/blog/index.php/2008/06/19/o-transito-paulistano-admite-uma-solucao-tecnologica/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Por favor, meus direitos!</title>
		<link>http://www.kumpera.net/blog/index.php/2008/04/05/por-favor-meus-direitos/</link>
		<comments>http://www.kumpera.net/blog/index.php/2008/04/05/por-favor-meus-direitos/#comments</comments>
		<pubDate>Sun, 06 Apr 2008 00:26:15 +0000</pubDate>
		<dc:creator>kumpera</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[anger management]]></category>

		<guid isPermaLink="false">http://www.kumpera.net/blog/index.php/2008/04/05/por-favor-meus-direitos/</guid>
		<description><![CDATA[Cada dia que passo eu perco mais minha esperança no pais que moro. Antes sempre era porque os nativos, enquanto capazes de reclamar sem fim sobre política, são incapazes de ser cidadãos plenos, votando de maneira incorreta e nunca exigindo de seus governantes. Sempre fui partidário que os habitantes da terra da banana faziam por [...]]]></description>
			<content:encoded><![CDATA[<p>Cada dia que passo eu perco mais minha esperança no pais que moro. Antes sempre era porque os nativos, enquanto capazes de reclamar sem fim sobre política, são incapazes de ser cidadãos plenos, votando de maneira incorreta e nunca exigindo de seus governantes. Sempre fui partidário que os habitantes da terra da banana faziam por merecer a lama que estão.</p>
<p>Porém, recentemente notei que existe algo que ao qual ainda não entendo bem, mas tudo indica que os símios dessa nação são ineptos à civilidade e ao respeito ao próximo. Nascer brasileiro significa ser incapaz de viver em comunidade, significa que dar um jeitinho é mais importante que respeitar a lei, a ordem e a decência. Como pode uma pessoa que não entende que vivem em sociedade significa necessariamente ter um apresso aos outros e aceitar que sua vontade não pode se sobrepor aos direitos dos demais.</p>
<p>Minha saga de vítima começou a alguns meses, quando decidi que já era em tempo para exigir meus direitos dos outros. Nada espúrio, apenas o mínimo que qualquer pessoa dotada de suas faculdades mentais diria se tratar de obviedades.</p>
<p>Resolvi começar pela lei 9294 de 1996 que limita os lugares no qual é permitido fumar. Quem me conhece sabe que não fumo e a fumaça me é terrivelmente incômoda. Comecei por lembrar as pessoas da lei quando se tratava de um lugar proibido. Resultado, fui na maioria das fezes muito hostilizados pelos fumantes perto de mim, mesmo de estranhos que ouviram a conversa de longe vieram se intrometer para serem rudes e grosseiros comigo.</p>
<p>Não perdoei nem meus amigos, eles sabem quanto os perturbei. Mas eles, ao menos, se tomaram pela vergonha do desrespeito ao próximo e costumam fumar do lado de fora de restaurantes sem área para fumante. Poderia eu dizer vitória?</p>
<p>Minha segunda tentativa de exigir meus direitos foi o novo código brasileiro de trânsito. Este que regulamenta o uso de bicicletas na rua e ciclovias. Desta vez eu queria apenas poder andar em paz nas ruas de São Paulo e contar que o motoristas iriam ao menos me respeitar e não me matar. Não quis nem exigir o meu direito de ciclista de ter a preferencial sobre carros pois não sou muito fã de ossos quebrados.</p>
<p>Antes de continuar, vou aproveitar para transmitir um pouco de conhecimento. Saibam todos que uma ciclovia existe para o trânsito de bicicletas, ouviram bem? De novo, bicicletas! Bicicletas! Uma ciclovia cuja finalidade não é se deslocar dentro da cidade também admite outros modais como patins ou crianças aprendendo. Mais uma vez eu estou falando do óbvio ao que tudo parece. Mas não, definitivamente isso é muito longe da realidade de muitos freqüentadores de parques da minha cidade.</p>
<p>Hoje não fui eu a vítima do desrespeito, mas sim minha esposa. Estamos a andar no parque do Ibirapuera quando uma mulher resolveu usar a ciclovia toda para passear com o cachorrinho dela. Eu consegui frear, minha mulher passou 6 horas no hospital e terminou com um <a href="http://www.flickr.com/photos/kumpera/2391166802/">braço engessado</a>. Tudo isso por conta de gente que é incapaz de respeitar o direito alheio. Esta mulher não se prestou ao menos a ver o que aconteceu com minha mulher, simplesmente virou as costas nos xingando pois quase acertamos o bichinho dela &#8211; na ciclovia caso tenha esquecidos.</p>
<p>Decidi então que é hora de tomar uma atitude e educar freqüentadores do parque que não respeitam a ciclovia. A partir de hoje, caso o seu cachorro se encontrar na ciclovia e não for capaz de me matar, ele será atropelado. Se possível espero também deslocar o ombro do lado que estiver segurando a coleira. Dito isso, preciso ir pois tenho sangue futuro a limpar da minha bicicleta.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kumpera.net/blog/index.php/2008/04/05/por-favor-meus-direitos/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Sucesso garantido</title>
		<link>http://www.kumpera.net/blog/index.php/2007/05/17/sucesso-garantido/</link>
		<comments>http://www.kumpera.net/blog/index.php/2007/05/17/sucesso-garantido/#comments</comments>
		<pubDate>Thu, 17 May 2007 22:29:54 +0000</pubDate>
		<dc:creator>kumpera</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[anger management]]></category>

		<guid isPermaLink="false">http://www.kumpera.net/blog/index.php/2007/05/17/sucesso-garantido/</guid>
		<description><![CDATA[
A empresa canadense Bringo lançou um serviço que seria um sucesso estrondoso no Brasil, eu mesmo usaria muito &#8211; mesmo pagando caro. O serviço é bem simples, ele te garante acesso direto a um operador de qualquer call-center sem precisar esperar na linha ou navegar por dezenas de opções inúteis.


Quem nunca passou horas atoa esperando [...]]]></description>
			<content:encoded><![CDATA[<p>
A empresa canadense <a href="http://www.bringo.com">Bringo</a> lançou um serviço que seria um sucesso estrondoso no Brasil, eu mesmo usaria muito &#8211; mesmo pagando caro. O serviço é bem simples, ele te garante acesso direto a um operador de qualquer call-center sem precisar esperar na linha ou navegar por dezenas de opções inúteis.
</p>
</p>
<p>Quem nunca passou horas atoa esperando até um operador te atender? Bom, eu já e não gosto nenhum pouco, ao ponto que definitivamente pagaria por um serviço que me entregasse direto uma ligação com um operador. Acho apenas curioso como pode um negócio existir meramente devido ao descaso e incompetência de outras empresas ao atender seus clientes.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kumpera.net/blog/index.php/2007/05/17/sucesso-garantido/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Classloader hell</title>
		<link>http://www.kumpera.net/blog/index.php/2007/05/09/classloader-hell/</link>
		<comments>http://www.kumpera.net/blog/index.php/2007/05/09/classloader-hell/#comments</comments>
		<pubDate>Wed, 09 May 2007 21:14:57 +0000</pubDate>
		<dc:creator>kumpera</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[anger management]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.kumpera.net/blog/index.php/2007/05/09/classloader-hell/</guid>
		<description><![CDATA[
Lendo esse artigo do blog do Daniel, me lembrei que explicar e entender o conceito de defining classloader é bem difícil, principalmente da parte que dita as consequências. Em primeira análise é até simples, toda classe esta associada ao classloader responsável por sua carga, porém a segunda parte que guarda a chave do inferno, o [...]]]></description>
			<content:encoded><![CDATA[<p>
Lendo esse <a href="http://nullability.org/?p=95">artigo do blog do Daniel</a>, me lembrei que explicar e entender o conceito de defining classloader é bem difícil, principalmente da parte que dita as consequências. Em primeira análise é até simples, toda classe esta associada ao classloader responsável por sua carga, porém a segunda parte que guarda a chave do inferno, o defining classloader (aquele que carregou a classe) limita a visibilidade dela e será sempre o primeiro acionado para resolver os tipos que ela depende.</p>
<p>
A regra de escopo que torna classloading um enorme inferno, principalmente pela sutileza que acontece e te morde. De acordo com o Daniel, o classloader acionado não é necessariamente aquele que resolve o tipo, isso acontece devido a delegação. O mecanismo de delegação funciona muito bem quando somente um classloader da hierarquia é capaz de carregar uma dada classe e não existe dependências entre classes no sentido inverso da hierarquia existente entre eles.
</p>
<p>
Explicando melhor esses dois pontos; primeiro, somente um classloader da hierarquia deve ser capaz de carregar uma dada classe, isso se faz necessário senão acabamos com problemas de esquizofrenia de tipos, quando uma classe é carregada por dois classloaders e passa a existir como dois tipos distintos e gera vários <em>ClassCastException</em> sem razão aparente.
</p>
<p>
Por exemplo, dado o código a seguir e a existência de dois classloaders: <em>João</em> e <em>José</em>. Imaginemos a situação na qual a tanto <em>José</em> quanto <em>João</em> carregam a classe <em>Exemplo</em>, cada um definindo um tipo. Vamos supor agora que a aplicação chame <em>novaCoisa</em> de uma instância de <em>Exemplo</em> criada a partir do tipo definido pelo classloader <em>João</em> e passe como parâmetro de uma chamada a <em>fazCoisa</em> de uma instância vinda de <em>José</em>. Por mais curioso que seja, o resultado vai ser um <em>ClassCastException</em> e &#8220;nome da classe: Exemplo&#8221; escrito no console. Legal, não?
</p>
<p><code><br />
class Exemplo{<br />
	public void fazCoisa(Object obj) {<br />
		System.out.println("nome da classe: "+obj.getClass());<br />
		Exemplo ex= (Exemplo)obj;<br />
		ex.toString();<br />
	}</p>
<p>	public Object novaCoisa() {<br />
		return new Exemplo();<br />
	}<br />
}<br />
</code></p>
<p>
O problema anterior é causado por falta de isolamento, objetos de classloaders no mesmo nível hierárquico jamaisdevem se comunicar, a aplicação deve garantir essa separação. Caso seja realmente necessária esta comunicação, ela deve ser feita via call-by-value, ou seja, serializando os objetos nas bordas.
</p>
<p>
O outro problema é o do espelho de duas direções, no qual uma classe enxerga a outra mas a recíproca é falsa. Isso ocorre quando uma classe carregada por um classloader mais próximo da raiz depende de uma classe que pode ser carregada apenas por um classloader mais distante. Como exemplo, dada as classes a seguir e dois classloader, <em>Pai</em> e <em>Filho</em>, vamos ver como isso acontece:</p>
<p><code><br />
class VimDoPai {<br />
	public void print() {<br />
		System.out.println(new VimDoFilho());<br />
	}<br />
}</p>
<p>class VimDoFilho {<br />
	public void print() {<br />
		System.out.println(new VimDoPai());<br />
	}<br />
}<br />
</code></p>
<p>Vamos supor que o classloader <em>Filho</em> delega para <em>Pai</em> a carga de classes. Supondo que <em>Filho</em> carregue a classe <em>VimDoFilho</em> e <em>Pai</em> carregue <em>VimDoPai</em>, quando <em>VimDoFilho.print()</em> for chamado, o classloader <em>Filho</em> delega para <em>Pai</em> e consegue uma referencia para a classe <em>VimDoPai</em>, porém quando <em>VimDoPai.print()</em> é chamado, o classloader <em>Pai</em> não encontrará a classe <em>VimDoFilho</em> e um <em>ClassNotFoundError</em> irá acontecer.
</p>
<p>
No exemplo anterior podemos notar o motivo pelo quando o escopo do classloading é um problema difícil de decifrar. Quando uma classe é carregada por um dado classloader, todas suas dependências serão resolvidas através dele. Tratá-se de uma imposição draconiana, pois abre espaço para uma enorme gama de problemas, como o visto anteriormente. Mais grave é o fato de acabarmos com um sistema no qual objetos que interagem entre sí possuem visões divergentes dos tipos existentes. Infelizmente esta é uma limitação necessária para criar um sistema de tipos sonoro e seguro.
</p>
<p>
Classloading é um mecanismo muito interessante do Java, pois permite criar coisas fabulosas como o container OSGi, porém não deixa de ser a parte mais dolorosa da plataforma quando ocorrem problemas. Java não possui suporte a realmente isolar um classloader de outro, como outras plataformas possuem, e quando precisamos violar o mecanismo de delegação uma enorme quantidade de problemas podem acontecer.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kumpera.net/blog/index.php/2007/05/09/classloader-hell/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Não assinem o net fone</title>
		<link>http://www.kumpera.net/blog/index.php/2007/03/19/nao-assinem-o-net-fone/</link>
		<comments>http://www.kumpera.net/blog/index.php/2007/03/19/nao-assinem-o-net-fone/#comments</comments>
		<pubDate>Tue, 20 Mar 2007 00:22:52 +0000</pubDate>
		<dc:creator>kumpera</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[anger management]]></category>

		<guid isPermaLink="false">http://www.kumpera.net/blog/index.php/2007/03/19/nao-assinem-o-net-fone/</guid>
		<description><![CDATA[ Sou um infeliz assinante desse serviço. Não recomendo nem sob tortura, só tenho problemas para falar a respeito. Os preços são longe de razoaveis perto do skype, a qualidade é pífia e o sistema de billing é uma piada de mau gosto. No final das contas o serviço é digno da porcaria que as [...]]]></description>
			<content:encoded><![CDATA[<p> Sou um infeliz assinante desse serviço. Não recomendo nem sob tortura, só tenho problemas para falar a respeito. Os preços são longe de razoaveis perto do skype, a qualidade é pífia e o sistema de billing é uma piada de mau gosto. No final das contas o serviço é digno da porcaria que as teles brasileiras oferecem. </p>
<p> Os preços são estúpidamente caros para ligações internacionais, as tarifas chegam a ser 4x mais caras que do skype! Para ligações nacionais e locais é melhor que as teles tradicionais,  só que isso é o mínimo a se esperar de uma solução voip!</p>
<p>A qualidade da ligação ocila com frenqüência e o serviço fica fora do ar mais vezes que a internet, além disso espere um modem que trava 2x por semana. No geral é melhor que um telefone tradicional, não que isso seja um grande diferencial.</p>
<p>Guardei para o final a melhor parte: o sistema de billing da embratel! O pessoal é tão incompente que me cobraram as mesmas ligações nas contas de janeiro, fevereiro e março! Segundo a atendente deles, isso está acontecendo muito &#8211; o que está longe de ser confortante. Os caras colocaram dois estágiarios deficientes para desenvolver toda parte de billing e esperam que os clientes sejam compreensivos o suficiente. </p>
<p>Minha percepção do produto e veredito final é se tratar tão somente de um substituto do telefone fixo caso você faça apenas ligações para celular dele e pretende usar algo como o skype para as ligações caras. Não que faça algum sentido isso, mas com preços não competitivos, qualidade mediana e um back-office medíocre, não posso senão recomendar que todos fujam desse produto.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kumpera.net/blog/index.php/2007/03/19/nao-assinem-o-net-fone/feed/</wfw:commentRss>
		<slash:comments>70</slash:comments>
		</item>
		<item>
		<title>Senso comum é só um sintoma</title>
		<link>http://www.kumpera.net/blog/index.php/2006/06/19/senso-comum-e-so-um-sintoma/</link>
		<comments>http://www.kumpera.net/blog/index.php/2006/06/19/senso-comum-e-so-um-sintoma/#comments</comments>
		<pubDate>Tue, 20 Jun 2006 01:41:36 +0000</pubDate>
		<dc:creator>kumpera</dc:creator>
				<category><![CDATA[anger management]]></category>
		<category><![CDATA[project management]]></category>

		<guid isPermaLink="false">http://www.kumpera.net/blog/index.php/2006/06/19/senso-comum-e-so-um-sintoma/</guid>
		<description><![CDATA[Eu pensei primeiro em deixar um comentário a esse incrivel post do Phillip sobre senso comum, mas acabou que ele mereceu um post inteiro. Acho que dizer que as pessoas gostam de senso comumnão vai realmente à raiz da causa. Mais fundo podemos encontrar o medo das pessoas a mudanças.
Senso comum é um ótimo exemplo [...]]]></description>
			<content:encoded><![CDATA[<p>Eu pensei primeiro em deixar um comentário a esse <a href="http://fragmental.com.br/blog/?p=218">incrivel post do Phillip</a> sobre senso comum, mas acabou que ele mereceu um post inteiro. Acho que dizer que as pessoas gostam de senso comumnão vai realmente à raiz da causa. Mais fundo podemos encontrar o medo das pessoas a mudanças.</p>
<p>Senso comum é um ótimo exemplo de aversão a mudanças. Ele surge porque alguém disse que viu outros fazendo e pareceu legal. Só ver que assim que se fala em usar EJB a maioria já pensa nos DTOs que vão precisar escrever, ou melhor, VOs, para sermos fieis às origens.</p>
<p>Alguém já usou, já fez, já falou do assunto. Muito já ouviram e repetiram. Pronto, já virou senso comum. A partir desse ponto não fazer assim é querer mudar as regras do jogo e para isso precisamos pensar, propor, discutir e <strong>confrontar </strong>os demais. Para isso acontecer é preciso estar armado de argumentos, razões e motivos, ter uma boa dose de <strong>coragem </strong>para tirar todos da zona de conforto de uma coisa já formulada e pensada por outros.<br />
O senso comum é nada mais que uma manifestação de um problema ainda maior, o medo que mudanças e suas incertezas carregam. Podem ver, existe muita gente que adora de escorar nisso para justificar ações e medidas descabidas. Inércia de questionamento causa isso, você não se pergunta o por que de algo acontecer por tempo suficiente até assumir que se trata de uma verdade, o famoso concenso por omissão.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kumpera.net/blog/index.php/2006/06/19/senso-comum-e-so-um-sintoma/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Programador junior, você ainda vai ser vítima de um</title>
		<link>http://www.kumpera.net/blog/index.php/2006/04/26/programador-junior-voce-ainda-vai-ser-vitima-de-um/</link>
		<comments>http://www.kumpera.net/blog/index.php/2006/04/26/programador-junior-voce-ainda-vai-ser-vitima-de-um/#comments</comments>
		<pubDate>Wed, 26 Apr 2006 03:48:20 +0000</pubDate>
		<dc:creator>kumpera</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[anger management]]></category>
		<category><![CDATA[project management]]></category>

		<guid isPermaLink="false">http://www.kumpera.net/blog/index.php/2006/04/26/programador-junior-voce-ainda-vai-ser-vitima-de-um/</guid>
		<description><![CDATA[Todos nós começamos a programar sem saber muito do assunto, somos então rotulados de júnior. Um rótulo que então todo dia sonhamos em se livrar, afinal programador júnior é o mesmo que o &#8220;café-com-leite&#8221; do pega-pega. O ruim dessa posição é que mesmo sem saber bem como se escreve um software, já tem que produzir [...]]]></description>
			<content:encoded><![CDATA[<p>Todos nós começamos a programar sem saber muito do assunto, somos então rotulados de júnior. Um rótulo que então todo dia sonhamos em se livrar, afinal programador júnior é o mesmo que o &#8220;café-com-leite&#8221; do pega-pega. O ruim dessa posição é que mesmo sem saber bem como se escreve um software, já tem que produzir como os demais. Ai que mora o perigo, uma pessoa nessa função pode até saber programar, mas deve ter os auspícios dos mais safos de sua equipe para evitar desastres.<br />
Dificilmente uma equipe de desenvolvimento vai contar somente com desenvolvedores experiêntes, os que sabem menos tem a tanta obrigação de aprender quando os demais de ensinar. O problema disso fica por conta de como encaixar isso na dinâmica da execução de um projeto e na minha opinião a forma mais eficaz é o feedback sobre o código produzido. Esse feedback pode ocorrer atraves de code-reviews, pair programming ou qualquer outra maneira que leve ao questionamento das decisões tomadas.</p>
<p>Garantir que esse feedback ocorra, e em tempo habil para ser útil, é obrigação do lider do projeto, que deve criar o espaço e habito entre os demais. Tem formas razoaveis de fazer isso, como, por exemplo, instituir semanlmente um code-review das classes que aparecerem mais feias em um relatório de métricas ou pedir que uma pessoa mande o trecho de código mais cabeludo do atual projeto dela para ser sabatinado.</p>
<p>O mais importante nisso tudo é evitar que se crie uma bola de neve de desenvolvedor inexperiente criar aquela obra de arte impossivel de se manter e que é rotulada de legado antes mesmo de ir para o ar.</p>
<p>Espero então que esse post sirva pelo menos para todas as vítimas de programadores júnior &#8211; aquelas que tiveram que se aventurar em códigos por eles escritos &#8211; entenderem que tem de dividir a culpa.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kumpera.net/blog/index.php/2006/04/26/programador-junior-voce-ainda-vai-ser-vitima-de-um/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
