<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3006142001944566780</id><updated>2012-01-02T13:09:23.958-02:00</updated><category term='sociedade'/><category term='conto'/><category term='dança'/><category term='política'/><category term='manga'/><category term='SIVUCA'/><category term='literatura'/><category term='java'/><category term='software'/><category term='cinema'/><category term='filosofia'/><category term='anime'/><category term='etc'/><category term='música'/><category term='quadrinhos'/><category term='crônica'/><category term='cxx'/><title type='text'>Tumulto</title><subtitle type='html'>...do cansaço dessa vida, e do peso de ter que ser alguém...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default?start-index=101&amp;max-results=100'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>1165</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-4310287389313085798</id><published>2011-12-02T18:49:00.001-02:00</published><updated>2011-12-02T18:51:31.649-02:00</updated><title type='text'>Aumento para os magistrados</title><content type='html'>Em meio à discussão sobre um aumento para os magistrados, recentemente notícia no jornal Globo, reparei neste comentário favorável ao aumento: apesar de os magistrados ganharem 21 mil reais, o líquido é &lt;b&gt;somente 14 mil reais&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Caros magistrados indignados com seu salário líquido: pagar muito imposto como todo brasileiro não te dá direito a aumento, ok?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-4310287389313085798?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/4310287389313085798/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=4310287389313085798' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/4310287389313085798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/4310287389313085798'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2011/12/aumento-para-os-magistrados.html' title='Aumento para os magistrados'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-802381860961747669</id><published>2011-10-19T11:53:00.003-02:00</published><updated>2011-10-19T11:53:46.604-02:00</updated><title type='text'>Luta entre Bastões</title><content type='html'>Me lembrei agora de uma conversa com meus &lt;i&gt;si dai&lt;/i&gt; sobre armas brancas, num dia em que eles puderam acompanhar meu jeito de treinar com o &lt;i&gt;kwan&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Um deles, descrente das capacidades do &lt;i&gt;kwan&lt;/i&gt;, contou a história de um mestre Fulano que era imbatível com o bastão longo até o dia em que encontrou mestre Siclano, usuário de bastão curto, em uma ponte e perdeu.&lt;br /&gt;&lt;br /&gt;Instaurada a controvérsia (?), um outro perguntou: -- Imagine que você põe o bastão curto e o bastão longo para lutar, quem você acha que vence?&lt;br /&gt; &lt;br /&gt;Eu esclareço: -- Você está me perguntando o que vai acontecer se eu colocar um bastão curto e um bastão longo, um na frente do outro? -- Sim é isso mesmo.&lt;br /&gt;&lt;br /&gt;-- Ora, os dois vão cair no chão e fazer um puta barulho.&lt;br /&gt;&lt;br /&gt;Bastões são pedaços de madeira. Artes marciais são estilos e sistemas. Mas quem lutam são os indivíduos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-802381860961747669?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/802381860961747669/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=802381860961747669' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/802381860961747669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/802381860961747669'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2011/10/luta-entre-bastoes.html' title='Luta entre Bastões'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-1197748254334024351</id><published>2011-03-29T15:55:00.000-03:00</published><updated>2011-03-29T15:55:03.928-03:00</updated><title type='text'>Novo blog na praça</title><content type='html'>Fui convidado a participar de um blog coletivo chamado &lt;a href="http://blogcoletivoinconsciente.blogspot.com/"&gt;Coletivo Inconsciente&lt;/a&gt;! Decidi que o meu tema para este blog será "a tragédia da vida privada".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-1197748254334024351?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/1197748254334024351/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=1197748254334024351' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1197748254334024351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1197748254334024351'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2011/03/novo-blog-na-praca.html' title='Novo blog na praça'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-1153359478692852611</id><published>2011-02-18T09:36:00.001-02:00</published><updated>2011-02-18T09:36:33.966-02:00</updated><title type='text'>Blogger no Android</title><content type='html'>&lt;div&gt;&lt;p&gt;Agora que eu tenho uma aplica&amp;#231;&amp;#227;o para usar o Blogger no Nexus One, talvez consiga atualizar este blog com mais frequ&amp;#234;ncia...&lt;br&gt;Muitos causos ficam esquecidos do tr&amp;#226;nsito pra casa.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-1153359478692852611?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/1153359478692852611/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=1153359478692852611' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1153359478692852611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1153359478692852611'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2011/02/blogger-no-android.html' title='Blogger no Android'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total><georss:featurename>GRES Acadêmicos da Rocinha, Rua Alm Mariath, 6 - Caju, Rio de Janeiro - RJ, 20931-720, Brazil</georss:featurename><georss:point>-22.892548 -43.216369</georss:point></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-2781434296467682070</id><published>2010-11-26T17:46:00.000-02:00</published><updated>2010-11-26T17:46:09.884-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sociedade'/><title type='text'>Proíba, e o mercado negro virá</title><content type='html'>Qual é o tema do artigo na Wikipedia onde ocorre o seguinte parágrafo? Omissões no texto são propositais para tornar o jogo mais divertido.&lt;br /&gt;&lt;br /&gt;"Many social problems have been attributed to the Prohibition era. Mafia groups limited their activities to gambling and theft until ????, when organized bootlegging manifested in response to the effect of Prohibition. A profitable, often violent, black market for ???? flourished. Powerful gangs corrupted law enforcement agencies, leading to racketeering. Stronger ???? surged in popularity because its potency made it more profitable to smuggle."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-2781434296467682070?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/2781434296467682070/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=2781434296467682070' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2781434296467682070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2781434296467682070'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2010/11/proiba-e-o-mercado-negro-vira.html' title='Proíba, e o mercado negro virá'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-6129074555394258891</id><published>2010-11-26T12:58:00.000-02:00</published><updated>2010-11-26T12:58:28.427-02:00</updated><title type='text'>Uma teoria</title><content type='html'>Estava aqui ouvindo pela N-ésima vez a "Back to Black" da Amy Winehouse, que eu comprei em CD recentemente, quando reparei nestes versos:&lt;br /&gt;&lt;br /&gt;And life is like a pipe,&lt;br /&gt;and I'm a tiny penny rolling up the walls inside.&lt;br /&gt;&lt;br /&gt;Gente.&lt;br /&gt;&lt;br /&gt;Será que a Amy Winehouse assistia ao Pica-Pau quando era pequena?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=8uvItZ1sPQ4"&gt;http://www.youtube.com/watch?v=8uvItZ1sPQ4&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-6129074555394258891?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/6129074555394258891/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=6129074555394258891' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6129074555394258891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6129074555394258891'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2010/11/uma-teoria.html' title='Uma teoria'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-8657997521127499310</id><published>2010-09-04T11:49:00.000-03:00</published><updated>2010-09-04T11:49:39.539-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='anime'/><title type='text'>História para Inspirar</title><content type='html'>Pelos idos de 1998, eu e minha irmã assistíamos durante a tarde um bloco especial na programação do Cartoon Network, com alguns anime e outros programas bem interessantes.&lt;br /&gt;&lt;br /&gt;Uma tarde, nós vimos uns teasers fantásticos sobre uma garota mágica e umas cartas. Os teasers eram, eles mesmos, muito bem produzidos, e a aura de mistério nos convenceu a agendar a estréia.&lt;br /&gt;&lt;br /&gt;Nós assistimos a estréia e ficamos impressionados. CardCaptor Sakura era obviamente um desenho para público infantil mas alguma coisa na personagem principal, e na introdução da história, fez com que agendássemos o horário todos os dias.&lt;br /&gt;&lt;br /&gt;E, realmente, todos os dias nós assistimos ao programa. E com o passar do tempo, a natureza da pesonagem principal e dos desafios que aumentavam progressivamente, e a trama que se revelava, nos prendeu ao programa.&lt;br /&gt;&lt;br /&gt;Agora, ao contrário de maluquices como Lost, CardCaptor Sakura prometia convenvergência a um desafio final que realmente nos impressionava por dentro, seja pelo modo como a história era contada, seja pelo fato de que os excelentes estúdios da animação japonesa não são de enrolar. E alguma naquelas personagens inspirava você, as emoções simples representadas nas crianças, o otimismo marcante da própria Sakura.&lt;br /&gt;&lt;br /&gt;Aconteceu que CardCaptor Sakura nos empolgava, a história que estavamos ouvindo era energizante; em parte por influencia nossa, praticamente todo o nosso grupo de amigos começou a assistir e eu percebi a mesma energia neles. Nós adorávamos acompanhar as aventuras da Sakura e o seu jeito de ser nos contagiava.&lt;br /&gt;&lt;br /&gt;Sakura se tornou um modelo de comportamento, talvez. Nós sabemos que um programa para crianças é simplificado, mas exatamente por isso ele se torna um pouco... arquetípico.&lt;br /&gt;&lt;br /&gt;Estou contanto essa história porque uma nova história alcançou o lugar ao lado de CardCaptor Sakura nas minhas lembranças.&lt;br /&gt;&lt;br /&gt;Eu recomendo fortemente a todos vocês procurar Avatar: The Last Airbender e assistir às três temporadas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-8657997521127499310?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/8657997521127499310/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=8657997521127499310' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8657997521127499310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8657997521127499310'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2010/09/historia-para-inspirar.html' title='História para Inspirar'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-6787833476335654171</id><published>2010-08-11T23:29:00.000-03:00</published><updated>2010-08-11T23:29:30.184-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='política'/><title type='text'>A Infinita Sabedoria do Entretenimento</title><content type='html'>O Danilo Gentili &lt;a href="http://www1.folha.uol.com.br/poder/781345-muito-politico-faz-chorar-com-a-mesma-materia-prima-que-o-humor-faz-rir-diz-danilo-gentili.shtml"&gt;está indignado&lt;/a&gt; com a decisão do TSE entendendo que sátira política provoca desigualdade entre candidatos em uma eleição.&lt;br /&gt;&lt;br /&gt;Eu acho impressionante que ele tenha escrito isso de forma tão clara logo no seu primeiro parágrafo e tenha ignorado por completo o foco da questão em sua longa reclamação.&lt;br /&gt;&lt;br /&gt;Danilo, não interessa se o humor é saudável ou se Aristófanes fazia o que queria; por acaso você discorda do fato de que, em um período eleitoral, se nós satirizamos um candidato o outro candidato se beneficia?&lt;br /&gt;&lt;br /&gt;Vou assumir que você, apesar de tudo, concorda que satirizar uma pessoa diminua a sua imagem e que, durante um processo eleitoral, este fato é relevante.&lt;br /&gt;&lt;br /&gt;Então, Danilo, preciso perguntar a você se por acaso você acredita que sua condição de humorista lhe empresta uma sabedoria sobrenatural para injetar na rede de forças e poderes da sociedade a medida justa de sátira entre todos os candidatos.&lt;br /&gt;&lt;br /&gt;Preciso saber se você e seus colegas humoristas são sábios o suficiente para satirizar apenas e tão somente o necessário de modo a evitar o efeito colateral que é a ridicularização de um candidato que está competindo com outros.&lt;br /&gt;&lt;br /&gt;Será que você é iluminado o suficiente para não ter preferências durante uma eleição? Satirizar com mais intensidade candidatos em quem não pretende votar?&lt;br /&gt;&lt;br /&gt;Entenda, Danilo, que eu acho muita graça na sátira política.&lt;br /&gt;&lt;br /&gt;Mas eu não acho graça nenhuma nessa atitude de superioridade misteriosa de que se revestem pessoas cuja missão é entreter em matéria do governo da sociedade.&lt;br /&gt;&lt;br /&gt;O TSE tem uma responsabilidade em um país cujo processo eleitoral está longe de funcionar razoavelmente -- sendo que apenas este ano estamos vendo vigorar uma lei tal qual a Lei da Ficha Limpa.&lt;br /&gt;&lt;br /&gt;Faça-nos o favor de exercer a sua influência de forma madura no debate sobre o que é ou não é favorável à democracia durante esses poucos meses.&lt;br /&gt;&lt;br /&gt;O macete é chamar de censura; daí você tem sempre razao.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-6787833476335654171?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/6787833476335654171/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=6787833476335654171' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6787833476335654171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6787833476335654171'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2010/08/infinita-sabedoria-do-entretenimento.html' title='A Infinita Sabedoria do Entretenimento'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-8496521444754816257</id><published>2010-05-24T21:11:00.002-03:00</published><updated>2010-05-24T21:11:33.417-03:00</updated><title type='text'>Tumulto de casamento</title><content type='html'>O tumulto está quase no fim!&lt;br /&gt;&lt;br /&gt;Fizemos neste fim de semana uma festa para a família e deu tudo certo, com um buffet de crepes e bastante cerveja.&lt;br /&gt;&lt;br /&gt;Em Junho faremos a festa para os amigos, poderemos fechar a lista de presentes de casamento e preencher a sala com coisas que não sejam caixas de papelão.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-8496521444754816257?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/8496521444754816257/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=8496521444754816257' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8496521444754816257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8496521444754816257'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2010/05/tumulto-de-casamento.html' title='Tumulto de casamento'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-8903180770497964836</id><published>2010-05-10T21:24:00.000-03:00</published><updated>2010-05-10T21:24:49.308-03:00</updated><title type='text'>o fim do software ... neste blog</title><content type='html'>A partir de hoje, escreverei artigos sobre software em &lt;a href="http://software.pedro.lamarao.nom.br/"&gt;outro blog&lt;/a&gt;. Este aqui voltará então à sua programação normal de pensamentos filosóficos esporádicos e comentários idiotas sobre o dia a dia.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-8903180770497964836?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/8903180770497964836/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=8903180770497964836' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8903180770497964836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8903180770497964836'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2010/05/o-fim-do-software-neste-blog.html' title='o fim do software ... neste blog'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-3939253268873345034</id><published>2010-05-10T20:47:00.000-03:00</published><updated>2010-05-10T20:47:36.708-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Web Services infinitamente fáceis com JAX-WS</title><content type='html'>Isso provavelmente é notícia antiga para os praticantes do J2EE, mas hoje eu aprendi a notação mais básica do JAX-WS e estou impressionado com o esquema em geral.&lt;br /&gt;&lt;br /&gt;Eu experimentei um pouco com o esquema do Apache Axis e, apesar de fácil, me fez um pouco perdido por não dominar ainda o macete dos arquivos de configuração e dos artefatos gerados.&lt;br /&gt;&lt;br /&gt;Fora isso, eu não vi, no tanto que estudei, o meio de trocar argumentos de um tipo não primitivo com o Axis, o que me deixou um pouco ressabiado -- ou é difícil, ou é impossível.&lt;br /&gt;&lt;br /&gt;Agora, com o Metro no GlassFish?&lt;br /&gt;&lt;br /&gt;@WebService&lt;br /&gt;public class Echo {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String echo (String value) { return value; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Está pronto o EchoService.&lt;br /&gt;&lt;br /&gt;Empacotando este negócio em um "Dynamic Web Project" e implantando no GlassFish, o Metro descobre sozinho a existência da classe Echo e configura automaticamente um EchoService muito razoável.&lt;br /&gt;&lt;br /&gt;Eu achei, originalmente, que era preciso instalar a ferramenta Apache CXF na incubadora do projeto Eclipse Web Tools mas é desnecessário.&lt;br /&gt;&lt;br /&gt;Aparentemente, a engenharia da norma JAX-WS foi muito boa, e existe também uma JAX-B que especifica a tradução de "java" para "xsd" de um modo que o seguinte também funciona como esperado:&lt;br /&gt;&lt;br /&gt;public class Bar {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public String data;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Bar (String data) { this.data = data; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@WebService&lt;br /&gt;public class Echo {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Bar echo (String value) { return new Bar(value); }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;É tudo o que eu preciso pra passar de fase.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-3939253268873345034?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/3939253268873345034/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=3939253268873345034' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/3939253268873345034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/3939253268873345034'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2010/05/web-services-infinitamente-faceis-com.html' title='Web Services infinitamente fáceis com JAX-WS'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-3654367210115631952</id><published>2010-04-24T18:01:00.000-03:00</published><updated>2010-04-24T20:30:32.920-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>GlassFish em servidor Fedora 11</title><content type='html'>Consegui, afinal, configurar um servidor Fedora 11 com o GlassFish instalado.&lt;br /&gt;&lt;br /&gt;Estou usando o seguinte script em /etc/init.d para gerenciar o serviço no sistema.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;#!/bin/sh&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;#&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# glassfish Sun GlassFish v3&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;#&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# chkconfig:&amp;nbsp;&amp;nbsp; - 99 1&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# description: Sun's modern J2EE implementation based on OSGi&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;### BEGIN INIT INFO&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# Provides: glassfish&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# Required-Start: $network&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# Required-Stop: $network&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# Short-Description: J2EE implementation&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# Description: Sun's modern J2EE implementation based on OSGi&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;### END INIT INFO&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;# Source function library.&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;. /etc/rc.d/init.d/functions&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;exec="/opt/glassfishv3/glassfish/bin/asadmin"&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;prog="glassfish"&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;config="/opt/glassfishv3/glassfish/domains/domain1/config/domain.xml"&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;[ -e /etc/sysconfig/$prog ] &amp;amp;&amp;amp; . /etc/sysconfig/$prog&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;lockfile=/var/lock/subsys/$prog&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;start() {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ -x $exec ] || exit 5&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ -f $config ] || exit 6&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo -n $"Starting $prog: "&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ${exec} start-domain domain1 &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; retval=$?&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ $retval -eq 0 ] &amp;amp;&amp;amp; success $"$prog startup" || failure $"$prog startup"&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ $retval -eq 0 ] &amp;amp;&amp;amp; touch $lockfile&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $retval&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;stop() {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo -n $"Stopping $prog: "&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ${exec} stop-domain &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; retval=$?&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ $retval -eq 0 ] &amp;amp;&amp;amp; success $"$prog shutdown" || failure $"$prog shutdown"&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [ $retval -eq 0 ] &amp;amp;&amp;amp; rm -f $lockfile&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return $retval&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;restart() {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stop&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; start&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;reload() {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; restart&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;force_reload() {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; restart&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;rh_status() {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ${exec} uptime&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; uptime_retval=$?&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if [ $uptime_retval -eq 0 ]; then&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fi&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if [ -z $lockfile ]; then&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 2&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fi&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 3&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;rh_status_q() {&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; rh_status &amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;case "$1" in&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; start)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rh_status_q &amp;amp;&amp;amp; exit 0&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $1&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stop)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rh_status_q || exit 0&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $1&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; restart)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $1&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; reload)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rh_status_q || exit 7&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $1&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; force-reload)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; force_reload&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; status)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rh_status&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; condrestart|try-restart)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rh_status_q || exit 0&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; restart&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ;;&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *)&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit 2&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;esac&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;exit $?&lt;/span&gt;&lt;br style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-3654367210115631952?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/3654367210115631952/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=3654367210115631952' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/3654367210115631952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/3654367210115631952'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2010/04/glassfish-em-servidor-fedora-11.html' title='GlassFish em servidor Fedora 11'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-4454663766171323473</id><published>2010-04-07T00:41:00.002-03:00</published><updated>2010-04-24T20:30:25.137-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Algoritmos da Amazon</title><content type='html'>"As someone who has purchased or rated books by Erich Gamma, you might like to know that &lt;i&gt;How You Could Be A Better Friend&lt;/i&gt; is now available."&lt;br /&gt;&lt;br /&gt;(...)&lt;br /&gt;&lt;br /&gt;Amazon, Erich Gamma é autor de um livro sobre engenharia de software. Que porra é essa?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-4454663766171323473?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/4454663766171323473/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=4454663766171323473' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/4454663766171323473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/4454663766171323473'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2010/04/algoritmos-da-amazon.html' title='Algoritmos da Amazon'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-7503640128285063032</id><published>2010-03-31T01:14:00.002-03:00</published><updated>2010-04-24T20:29:36.844-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>O estilo funcional em C++</title><content type='html'>Estava de mau humor e resolvi ironizar a vida estudando numa aula de Java o artigo "&lt;a href="http://www.md.chalmers.se/%7Erjmh/Papers/whyfp.html"&gt;Why Functional Programming Matters&lt;/a&gt;", que eu copiei do site do Haskell.&lt;br /&gt;&lt;br /&gt;Acabei finalmente entendendo (eu acho!) as primeiras implicações importantes de &lt;i&gt;lazy evaluation&lt;/i&gt;. O exemplo mais simples dessas implicações no artigo, na minha opinião, está no programa que computa aproximações da raiz quadrada pelo método de Newton-Raphson.&lt;br /&gt;&lt;br /&gt;Esse método é basicamente uma expressão matemática que começa com um resultado anterior e usa esse resultado para computar um próximo, garantindo que o próximo é melhor que o anterior.&lt;br /&gt;&lt;br /&gt;Seja N o número cuja raiz quadrada você deseja aproximar, e uma aproximação anterior x. O procedimento começa chutando x, por exemplo 1. O método afirma que o próximo x deve ser &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;( x + ( N / x ) / 2&lt;/span&gt; .&lt;br /&gt;&lt;br /&gt;O artigo descreve um programa para resolver o método. O programa segue abaixo; para entendê-lo completamente, estude o artigo.&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;repeat f a = cons a ( repeat f ( f a ) )&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;within e ( cons a ( cons b rest ) ) =&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; = b , if abs(a - b) &amp;lt;= eps&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; = within e ( cons b rest), otherwise&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;next N x = ( x + N / x ) / 2&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;sqrt a0 e N = within e ( repeat ( next N ) a0 )&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O espírito geral do programa é assim:&lt;br /&gt;&lt;br /&gt;repeat é uma função que gera uma lista contendo um elemento inicial seguido do resultado da função f com argumento elemento-anterior. Observe que repeat gera uma lista infinita, assumindo que f está definida para todo a.&lt;br /&gt;&lt;br /&gt;within é uma função que percorre uma lista procurando um par de elementos cuja diferença seja menor que um &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;epsilon&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;A notação de parâmetros em within faz o que eu chamo de "desempacotar a lista". O segundo argumento é uma lista; a definição de within desempacota os dois primeiros, chamando-os de a e b. &lt;br /&gt;&lt;br /&gt;next computa a próxima aproximação da raiz quadrada de N com aproximação anterior x segundo o método de Newton-Raphson.&lt;br /&gt;&lt;br /&gt;sqrt computa a raiz quadrada de um número conforme uma tolerância e e um chute inicial a0; sua definição aplica within a repeat, e repeat a next.&lt;br /&gt;&lt;br /&gt;sqrt basicamente avalia within à lista gerada por repeat , e repeat gera a lista de resultados de next.&lt;br /&gt;&lt;br /&gt;Este programa, segundo a intuição de um programador acostumado a linguagens imperativas, nunca termina, porque repeat nunca termina de gerar a lista infinita.&lt;br /&gt;&lt;br /&gt;Porém, &lt;i&gt;lazy evaluation&lt;/i&gt; garante que esse programa termina -- garante que repeat será avaliado apenas o número de vezes necessária para que within se satisfaça. Eu entendo que o segredo disso está no momento em que o interpretador avalia o "desempacotamento" de uma lista, porque este é o momento em que o processamento exige a geração de mais um elemento.&lt;br /&gt;&lt;br /&gt;Isso é mesmo sensacional. Como seriam esses pequenos componentes em C++0x?&lt;br /&gt;&lt;br /&gt;Vamos começar brincando com uma versão muito eficiente de abs, o que não tem nada a ver com o problema em questão.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;template &lt;typename number=""&gt;&lt;/typename&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;auto abs (Number x) -&amp;gt; typename std::enable_if&amp;lt; std::is_signed&lt;number&gt;::value, Number&amp;gt;::type&lt;/number&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; return x &amp;lt; 0 ? -x : x ;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;template &lt;typename number=""&gt;&lt;/typename&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;auto abs (Number x) -&amp;gt; typename std::enable_if&amp;lt; ! std::is_signed&lt;number&gt;::value, Number&amp;gt;::type&lt;/number&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; return x;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A notação acima é a nova notação para funções em C++0x, onde a especificação do retorno fica depois da lista de argumentos.&lt;br /&gt;&lt;br /&gt;A definição de abs faz uso de SFINAE para sobrecarregar dois templates, de outro modo indistinguíveis, usando std::enable_if.&lt;br /&gt;&lt;br /&gt;Assim, abs pode se reduzir a nada quando nem mesmo faz sentido que o número possua um sinal.&lt;br /&gt;&lt;br /&gt;Em seguida, vamos chamar as listas de Range e declarar a forma geral de uma função unpack.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;template &lt;typename range="" typename="" value,=""&gt;&lt;/typename&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;auto unpack (Range&amp;amp; r) -&amp;gt; Value;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;template &lt;typename sequence=""&gt;&lt;/typename&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;auto unpack (Sequence&amp;amp; s) -&amp;gt; decltype(s.front())&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; typename Sequence::value_type v = s.front();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; s.pop_front();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; return v;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Definimos o significado de unpack providenciando uma sobrecarga, exclusiva para Containers da STL, que faz o que deve fazer. Em português, unpack resulta o elemento à esquerda e modifica a lista para conter o resto.&lt;br /&gt;&lt;br /&gt;Assim, definimos within:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;namespace detail&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&amp;nbsp; template &lt;typename number,="" range="" typename=""&gt;&lt;br /&gt;&amp;nbsp; auto within (Number eps, Number a, Number b, Range rest) -&amp;gt; Number&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (abs(a - b) &amp;lt;= eps) return b;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; const Number c = unpack(rest);&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return within(eps, b, c, rest);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;template &lt;typename number,="" range="" typename=""&gt;&lt;br /&gt;// requires(ValueType(Range) == Number)&lt;br /&gt;auto within (Number eps, Range list) -&amp;gt; Number&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; const Number a = unpack(list);&lt;br /&gt;&amp;nbsp; const Number b = unpack(list);&lt;br /&gt;&amp;nbsp; return detail::within(eps, a, b, list);&lt;br /&gt;}&lt;/typename&gt;&lt;/typename&gt;&lt;/div&gt;&lt;br /&gt;within desempacota a e b e delega para uma subrotina; a subrotina faz o que se espera. Observe que a lista a processar é um desses tais Ranges.&lt;br /&gt;&lt;br /&gt;O componente equivalente a repeat deve gerar esse Range.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;namespace detail&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; template &lt;typename function,="" typename="" value=""&gt;&lt;/typename&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; struct repeat_range&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Function f;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value x;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; auto operator() () -&amp;gt; decltype(f(x))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return x = f(x);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; };&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; template &lt;typename t,="" typename="" u=""&gt;&lt;/typename&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; auto unpack (repeat_range&lt;t,u&gt;&amp;amp; r) -&amp;gt; decltype(r())&lt;/t,u&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return r();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;template &lt;typename function,="" typename="" value=""&gt;&lt;/typename&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;// requires(UnaryFunction(Function) &amp;amp;&amp;amp; Domain(Function) == Value)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;auto repeat (Function f, Value a) -&amp;gt; detail::repeat_range&lt;function, value=""&gt;&lt;/function,&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; return detail::repeat_range &lt;function, value=""&gt; { f, a };&lt;/function,&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Um Range é um objeto especial, que representa a lista; definimos um repeat_range que continuamente aplica uma função, e definimos unpack para este Range. (Observe como repeat_range usa o último valor gerado na geração do próximo.) &lt;br /&gt;A função repeat é utilitária e constrói o Range com os argumentos certos.&lt;br /&gt;&lt;br /&gt;A notação de construção usada na definição de repeat também é nova, e generaliza a inicialização entre structs C e objetos C++.&lt;br /&gt;&lt;br /&gt;Por último, implementamos a função importante para a aplicação, sqrt. Escolhi ocultar o equivalente a next porque a mim não interessa muito.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;namespace detail&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; template &lt;typename number=""&gt;&lt;/typename&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; auto sqrt (Number N, Number x) -&amp;gt; Number&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (x + (N / x)) / 2;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;template &lt;typename number=""&gt;&lt;/typename&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;auto sqrt (Number N, Number x, Number eps) -&amp;gt; Number&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; return&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; within(eps,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; repeat(&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [=] (Number x) { return detail::sqrt(N, x); },&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Agora, isso é &lt;i&gt;punk&lt;/i&gt;. A função no detail computa a próxima aproximação é trivial. O driver principal, por outro lado, é complexo.&lt;br /&gt;&lt;br /&gt;Em primeiro lugar, aquela notação esquisita ali é uma expressão lambda. Para todos os efeitos, a avaliação desta expressão produz uma função, que vira argumento para repeat.&lt;br /&gt;&lt;br /&gt;repeat, portanto, aplicará uma função lambda -- que por sua vez computa a próxima aproximação da raiz de N com chute x -- ao valor inicial x. O símbolo [=] significa que os nomes dentro do lambda se tornam cópias por valor dos objetos de mesmo nome no escopo maior.&lt;br /&gt;&lt;br /&gt;repeat, como vimos antes, produz um Range, sobre o qual within opera. E within procura um par de valores neste Range -- aplicando unpack quando necessário -- em busca de um par cuja diferença seja menor que eps.&lt;br /&gt;&lt;br /&gt;Assim, nesmo programa C++, simulamos com significativo esforço a &lt;i&gt;lazy evaluation&lt;/i&gt; funcional, para computar a raiz quadrada. Usando __attribute__((const)) esse programa deve otimizar até o Nirvana, mas eu não verifiquei.&lt;br /&gt;&lt;br /&gt;O programa esparramado no texto acima funciona de verdade com o GCC 4.5 e provavelmente funciona também com o ICC 11.1.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-7503640128285063032?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/7503640128285063032/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=7503640128285063032' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/7503640128285063032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/7503640128285063032'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2010/03/o-estilo-funcional-em-c.html' title='O estilo funcional em C++'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-251435543626130236</id><published>2010-03-18T21:08:00.001-03:00</published><updated>2010-04-24T20:29:36.845-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Interface Programador-Máquina</title><content type='html'>Ouvi algo interessante em uma aula do curso 6.00 do MIT, vendo o vídeo no celular, sobre a sobrecarga de operadores; o professor argumentava que essa era uma carecterística boa da linguagem de programação porque permitia uma interface consistente de programação.&lt;br /&gt;&lt;br /&gt;Esse é um uso interessante das palavras; em geral, dizemos &lt;i&gt;interface&lt;/i&gt; para nos referir a um contrato de comunicação entre dois pedaços de código executável.&lt;br /&gt;&lt;br /&gt;Realmente, da mesma forma como essa representação é um contrato ou protocolo entre dois pedaços de código executável que se comunicam, também há contrato ou protocolo entre quaisquer duas coisas que se comunicam, como por exemplo o programador e a máquina.&lt;br /&gt;&lt;br /&gt;Isso nos leva a pensar na linguagem de programação, como regra de sintaxe e semântica, como uma interface; e em pensar na qualidade de uma linguagem de programação como a qualidade dessa interface.&lt;br /&gt;&lt;br /&gt;O meta-caso-de-uso que essa interface pretende realizar é "expressar o programa que eu tenho em mente"; o componente que implementa essa interface é o compilador. Realmente é o compilador, e não a máquina física; o compilador, sob essa ótica, é a máquina abstrata, que interpreta a expressão do programa e faz algo de útil. De fato, normas como C e C++ descrevem o efeito do programa sobre uma máquina abstrata.&lt;br /&gt;&lt;br /&gt;Então, o que há com &lt;i&gt;y + x&lt;/i&gt; ?&lt;br /&gt;&lt;br /&gt;Há interface de alta qualidade na medida em que + significa o que você aprendeu ao longo de uma década de ensino de aritmética. Este julgamento fundamenta ambos os lados da divergência sobre se este símbolo deve ou deve não ser sobrecarregado para significar "concatenar duas strings". O lado &lt;i&gt;deve&lt;/i&gt; entende que qualquer indivíduo compreende + como "juntar", "unir", "somar". O lado &lt;i&gt;deve não&lt;/i&gt; entende que concatenar é "pôr um na frente do outro", que não possui a propriedade de associatividade.&lt;br /&gt;&lt;br /&gt;O tema da aula no vídeo que eu estava assistindo era classes em Python e uma introdução aos &lt;i&gt;abstract data types&lt;/i&gt;. Acho essa discussão pertinente porque ADTs são um conceito de meta-linguagem, e um ADT existe apenas na mente do programador. Faço essa distinção como a distinção entre o conjunto dos inteiros de que trata a álgebra e o tipo int da linguagem de programação.&lt;br /&gt;&lt;br /&gt;Quando o programador representa um ADT na linguagem de programação como uma classe, ele por sua vez oferece a outro programador uma interface de programação. O usuário do ADT, por assim dizer, escreverá programas que dissertam sobre esse ou aquele valor. Assim, eu concordo com o professor: se eu estou descrevendo um ADT numérico, é muito conveniente poder sobrecarregar o símbolo + e permitir aos meus usuários falar sobre coisas na forma de &lt;i&gt;y + x&lt;/i&gt; .&lt;br /&gt;&lt;br /&gt;Agora, há algo de estético nessa história toda. Suponha que por qualquer motivo você não pode usar o símbolo + . Que nome você escolheria, &lt;i&gt;add&lt;/i&gt; ou &lt;i&gt;sum&lt;/i&gt;? Ou &lt;i&gt;plus&lt;/i&gt;? &lt;i&gt;add&lt;/i&gt; tem algo de imperativo, enquanto &lt;i&gt;sum&lt;/i&gt; é um substantivo; ambos sugerem uma leitura diferente da expressão; e &lt;i&gt;plus&lt;/i&gt; é apenas o nome de um símbolo!&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;i&gt;add(y, x)&lt;/i&gt; // add y to x&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&amp;nbsp; sum(y, x)&lt;/i&gt; // the sum of y and x&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&amp;nbsp; plus(y, x)&lt;/i&gt; // y plus x&lt;br /&gt;&lt;br /&gt;O &lt;i&gt;Elements of Programming&lt;/i&gt; argumenta que o projetista de um ADT deve se esforçar para determinar uma "base computacional" para o ADT, um conjunto mínimo de operações básicas e eficientes que permitem ao programador expressar todos os programas úteis possíveis que discursam sobre seus valores.&lt;br /&gt;&lt;br /&gt;Este é o aspecto aritmético de uma interface programador-máquina, por assim dizer; uma boa escolha de nomes é seu aspecto estético, talvez. Parte do processo de decifragem ou aprendizagem de um sistema -- rotina de um arqueólogo de sistemas legados -- é justamente aprender os símbolos na caótica cultura desse sistema, que podem ou não fazer sentido como se espera de um sistema "fresquinho".&lt;br /&gt;&lt;br /&gt;Parte do esforço hercúleo em se convencer de um teorema de matemática avançada é justamente ler a notação simbólica usada -- que, sendo altamente abstrata, é frequentemente irreprodutível em linguagem natural. (E às vezes a diferença entre um signo e outro é meia dúzia de três ou quatro &lt;i&gt;pixel&lt;/i&gt;.)&lt;br /&gt;&lt;br /&gt;Produzir uma interface programador-máquina eficiente é sempre bom, mas programadores em execesso usam a eficiência como desculpa para produzir interfaces incompreensíveis. E no fim das contas todos nós sabemos que o custo de um projeto de sistema convencional é dominado por seu custo de manutenção.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-251435543626130236?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/251435543626130236/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=251435543626130236' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/251435543626130236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/251435543626130236'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2010/03/interface-programador-maquina.html' title='Interface Programador-Máquina'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-8017344001175039152</id><published>2010-03-09T00:02:00.000-03:00</published><updated>2010-04-24T20:29:36.846-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Problema os ícones especiais do Nautilus</title><content type='html'>Não sei por que cargas d'água o ícone especial da pasta "Vídeos" na minha pasta de usuário no Nautilus perdeu a graça.&lt;br /&gt;&lt;br /&gt;O Nautilus, para pastas especiais como "Imagens", "Música" etc. usa ícones especiais com umas figuras bem legais, como um trecho de rolo de filme pro "Vídeos".&lt;br /&gt;&lt;br /&gt;Depois de muito procurar, percebi que o responsável pelo tema dos ícones usava alguma fonte de informação pra decidir quais pastas são especiais e aplicar ícones especiais -- ou não aplicar, de acordo com o tema.&lt;br /&gt;&lt;br /&gt;Depois de procurar ainda mais, descobri esta fonte de informação no Fedora 12:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;$HOME/.config/user-dirs.dirs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Realmente a linha de configuração para a pasta de vídeos estava com o nome errado.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-8017344001175039152?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/8017344001175039152/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=8017344001175039152' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8017344001175039152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8017344001175039152'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2010/03/problema-os-icones-especiais-do.html' title='Problema os ícones especiais do Nautilus'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-3924940320046791391</id><published>2010-02-25T23:22:00.000-03:00</published><updated>2010-04-24T20:30:39.813-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Instalando o J2EE da Sun no Fedora 11</title><content type='html'>Dois pequenos probleminhas.&lt;br /&gt;&lt;br /&gt;Em primeiro lugar, o instalador reclama dizendo "Expression NOME_DO_PRODUTO is undefined on line 86, column 289 in /templates/components.ftl."&lt;br /&gt;&lt;br /&gt;O problema é o código de localização; execute o instalador com LANG=C e pronto.&lt;br /&gt;&lt;br /&gt;Em segundo lugar, eu uso um hostname personalizado meus sistemas -- este aqui se chama elisa. Nunca me dei ao trabalho de colocar o nome no /etc/hosts porque o mDNS funciona muito bem sem isso.&lt;br /&gt;&lt;br /&gt;O instalador não gosta dessa situação e reclama em uma caixa de diálogo sobre "host name invalid".&lt;br /&gt;&lt;br /&gt;Já estou usando esse esquema em outro lugar -- GlassFish J2EE 6 com Eclipse Galileo no Fedora 11 -- e funciona muito bem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-3924940320046791391?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/3924940320046791391/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=3924940320046791391' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/3924940320046791391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/3924940320046791391'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2010/02/instalando-o-j2ee-da-sun-no-fedora-11.html' title='Instalando o J2EE da Sun no Fedora 11'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-1801173953439072921</id><published>2010-02-10T11:36:00.001-02:00</published><updated>2010-02-10T11:36:26.467-02:00</updated><title type='text'>Teste do Buzz</title><content type='html'>Teste. Será que vai aparecer no Buzz?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-1801173953439072921?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/1801173953439072921/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=1801173953439072921' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1801173953439072921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1801173953439072921'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2010/02/teste-do-buzz.html' title='Teste do Buzz'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-8556565855930585783</id><published>2010-01-26T15:26:00.002-02:00</published><updated>2010-01-26T15:26:52.761-02:00</updated><title type='text'>Aniversário!</title><content type='html'>Dia 31 na Drinkeria Maldita!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-8556565855930585783?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/8556565855930585783/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=8556565855930585783' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8556565855930585783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8556565855930585783'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2010/01/aniversario.html' title='Aniversário!'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-2335876123911953979</id><published>2010-01-26T14:14:00.000-02:00</published><updated>2010-04-24T20:29:36.847-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Funções/Objetos</title><content type='html'>Hoje vi em uma base de código-fonte uma função cujo nome é "signalCatcher" -- um substantivo. A regra geral de estilo é: dados são chamados por substantivos, funções por verbos no infinitivo.&lt;br /&gt;&lt;br /&gt;Mas faz sentido que "signalCatcher" seja o nome daquilo que você vai entregar ao mecanismo de sinais para tratar os sinais da aplicação, certo?&lt;br /&gt;&lt;br /&gt;Eu acredito que a linguagem de programação do futuro não deve fazer distinção entre objetos-dados e objetos-função, mesmo sintaticamente; ambos ocupam espaço na memória e portanto exigem alocação, e são mencionados através de referências.&lt;br /&gt;&lt;br /&gt;Em C, todas as funções são efetivamente objetos imutáveis, mas houve o tempo em que funções não eram imutáveis; esse tempo poderia voltar. E apesar de a maioria dos objetos ser mutável, alguns objetos são propositalmente imutáveis, e seus projetistas procuram maneiras de armazená-los em ROM.&lt;br /&gt;&lt;br /&gt;Uma função deve ser um objeto cujo tipo é &lt;b&gt;função&lt;/b&gt;, um tipo genérico variando na &lt;b&gt;lista de parâmetros&lt;/b&gt; e na &lt;b&gt;lista de resultados&lt;/b&gt;. O valor de um objeto do tipo função deve ser interpretado como uma sequência de instruções para o processador alvo, organizada de acordo com uma convenção de chamada apropriada. Esta convenção apóia a operação fundamental que o programa realiza sobre o objeto, &lt;b&gt;chamar&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;É claro que, ainda assim, uma função é um objeto bem especial. Em particular porque não é um objeto cujo tamanho é regular -- não se pode saber qual é o tamanho de um objeto função apenas conhecendo seu tipo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-2335876123911953979?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/2335876123911953979/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=2335876123911953979' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2335876123911953979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2335876123911953979'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2010/01/funcoesobjetos.html' title='Funções/Objetos'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-3588273616405486927</id><published>2010-01-13T15:43:00.000-02:00</published><updated>2010-01-13T15:43:53.652-02:00</updated><title type='text'>Procurando apartamento!</title><content type='html'>Estou procurando apartamento no Rio de Janeiro.&lt;br /&gt;Se souber de algo, avise!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-3588273616405486927?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/3588273616405486927/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=3588273616405486927' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/3588273616405486927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/3588273616405486927'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2010/01/procurando-apartamento.html' title='Procurando apartamento!'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-6399571980090391732</id><published>2010-01-13T14:17:00.000-02:00</published><updated>2010-04-24T20:29:36.848-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Programação e Semiótica 7</title><content type='html'>Um novo exemplo para diminuir o tédio dos leitores e usar esses conceitos para entender o processamento de texto nos computadores.&lt;br /&gt;&lt;br /&gt;Falemos sobre um programa que, por sua vez, deseja falar sobre textos em linguagem natural. Este programa fará referência a objetos cujo interpretante é "texto em linguagem de gente".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;O que é texto em linguagem de gente? É uma sequência de símbolos que os seres humanos são capazes de entender como &lt;b&gt;caracteres&lt;/b&gt; do seu idioma, que por sua vez se agrupam para formar palavras, frases etc. Nos idiomas latinos dizemos que as letras se agrupam para formar palavras; em idiomas como o japonês muitas vezes apenas um caracteres já é uma palavra inteira.&lt;br /&gt;&lt;br /&gt;Mas o computador não sabe nada sobre caracteres, apenas sobre números. Com certeza o computador é capaz de representar na memória números uns na frente dos outros.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A intuição fundamental é a possibilidade de estabelecer um &lt;b&gt;mapa de caracteres&lt;/b&gt; onde cada caractere está mapeado para um número e vice-versa. Formalmente, o mapa é uma função bijetora entre os conjuntos "números inteiros" e "caracteres".&lt;br /&gt;&lt;br /&gt;Assim, um programa processador de texto faz referência a objetos cujo primeiro tipo é "número inteiro" e cujo segundo tipo é "caractere do mapa tal".&lt;br /&gt;&lt;br /&gt;Suponha o seguinte mapa: a = 1, b = 2, c = 3 etc. O texto "abc" seria um objeto composto por três objetos numéricos contíguos 123.&lt;br /&gt;&lt;br /&gt;Como poderia um programa colocar palavras em ordem alfabética? Toma dois objetos "palavra" e compara os dois caracteres iniciais como números; se forem diferentes, a ordem é numérica; se forem iguais fazemos a mesma coisa com o segundo caractere e assim por diante. Essa é a &lt;b&gt;ordenação lexicográfica&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Esse esquema é interessante quando podemos usar um objeto de tamanho fixo e tipo "número" para todos os caracteres desejados. Mas com o advento da Internet e a interligação entre sistemas de todo o mundo se tornou inviável usar mapas de caracteres pequenos.&lt;br /&gt;&lt;br /&gt;O que acontece quando um sistema do Japão envia 123 para um sistema do Brasil? Que mapa de caracteres o sistema do Brasil deve tomar como interpretante desses números? Essa dificuldade é a causa de muitos fenômenos bizarros na Internet, onde páginas mostram um monte de lixo onde deveriam estar caracteres latinos acentuados ou coisa parecida.&lt;br /&gt;&lt;br /&gt;A primeira lição da interligação de sistemas processadores de texto é que não existe objeto "texto" compreensível sem um interpretante "mapa de caracteres" associado. Essa associação é um problema que sempre deve ser resolvido, mesmo que a solução seja um contrato entre todas as partes definindo um e apenas um mapa válido. Esse tipo de contrato não se mostrou viável a longo prazo.&lt;br /&gt;&lt;br /&gt;Alguns sistemas de programação experimentaram construir tipos mais complexos para objetos; não apenas "texto" mas "texto ASCII" ou "texto ISO-8859-1" -- embutindo no tipo do objeto também o tipo do mapa de caracteres. Isso é interessante para apoiar contratos como o anterior, mas um pouco estranho quando o sistema deve aceitar diversos tipos de texto de diversas partes do mundo.&lt;br /&gt;&lt;br /&gt;Estas parecem as coisas básicas que sempre queremos fazer com texto: contar o número de caracteres, decidir se dois textos são iguais, decidir qual de dois textos deve aparecer antes na ordem do dicionário, e inspecionar o texto letra por letra (para imprimir na tela, por exemplo). Com os mapas numéricos simples, podemos fazer todas essas coisas simplesmente trabalhando com pares de números: os primeiros de cada texto, depois os segundos de cada texto, etc.&lt;br /&gt;&lt;br /&gt;Nesses mapas, existe uma referência sensata que atravessa a representação dos objetos da mais pura -- os números -- para a mais abstrata -- o caractere do texto.&lt;br /&gt;&lt;br /&gt;Essa facilidade eventualmente terminou, o que ainda parece muito traumático para programadores acostumados com essa situação tão segura.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Eventualmente a comunidade internacional decidiu dar um basta na multiplicidade dos mapas e resolveu produzir o super-mapa Unicode. Este mapa é um catálogo de praticamente todos os caracteres usados na galáxia, associados cada um deles a um número inteiro positivo. Infelizmente, são muitos caracteres, que não podem ser representados com números pequenos.&lt;br /&gt;&lt;br /&gt;A princípio, os indivíduos decidiram usar números grandes e manter o esquema de mapa com objetos de tamanho fixo. Assim, o processamento par-a-par continuaria possível. Mas os objetos texto explodiram de tamanho e essa esquema se mostrou inviável.&lt;br /&gt;&lt;br /&gt;Então um compromisso foi firmado: um novo mapa foi produzido para o Unicode onde quase 90% dos textos continuaria com o mesmo tamanho, e apenas 10% seria maior. Este mapa às vezes usa um número por caracteres, às vezes dois, às vezes três e às vezes quatro. Este simples fato é o pesadelo dos programadores novatos de processamento de texto.&lt;br /&gt;&lt;br /&gt;Por que este mapa &lt;b&gt;UTF-8&lt;/b&gt; possui uma representação tão estranha com objetos caractere de tamanho variável, deixou de ser sensata a referência direta número-a-caractere. Um sistema que recebe 1234 3456 5678 e deve interpretar esses números como texto deve não mais assumir que o primeiro número é um caractere, e o segundo um caractere etc. É possível que na realidade os dois primeros números sejam um caractere juntos.&lt;br /&gt;&lt;br /&gt;Uma sequência de números que deve ser interpretada como UTF-8 não pode mais ser percorrida ingenuamente número a número, e os algoritmos de processamento baseados em comparações par-a-par estão quebrados. Isso, novamente, se deve ao fato de que UTF-8 viola propositalmente premissas simples de significação dos números que compõe um texto.&lt;br /&gt;&lt;br /&gt;Isso foi um problema grave porque programas antigos despreocupadamente tratavam seu texto de forma crua, diretamente com os números, confortados pelas premissas do processamento de texto -- ao invés de fazer isso com funções especiais em módulos de processamento de texto.&lt;br /&gt;&lt;br /&gt;Quando o significado dos números foi alterado nos processos de substituição de mapa por mapa, consertar esses programas foi tarefa infernal. Os programas com funções especiais de tratamento de texto modificaram apenas estas funções e foram livrados deste mal.&lt;br /&gt;&lt;br /&gt;Esta vitória do encapsulamento pode ser compreendida pelo encapsulamento de uma função sígnica -- a compreensão dos signos-número como signos-letra encapsulada em certos entes responsáveis, e uma transformação cultural pôde ser efetivada apenas instruindo estes entes responsáveis, e não todos os entes.&lt;br /&gt;&lt;br /&gt;No final das contas o problema se tornou tão bem resolvido que surgiu um componente tão reusável que surge por toda parte, a &lt;a href="http://www.gnu.org/software/libiconv/"&gt;libiconv&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-6399571980090391732?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/6399571980090391732/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=6399571980090391732' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6399571980090391732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6399571980090391732'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2010/01/programacao-e-semiotica-7.html' title='Programação e Semiótica 7'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-1364536187229267009</id><published>2010-01-12T13:37:00.000-02:00</published><updated>2010-04-24T20:29:36.849-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Programação e Semiótica 6</title><content type='html'>Entender o texto de um programa sob a ótica da semiótica é um pouco mais fácil do que entender outros tipos de texto porque o limiar de realidade do programa está bem delineado e bem próximo: a máquina.&lt;br /&gt;&lt;br /&gt;Por essa razão, não é preciso uma poderosa metafísica para entender o que é um &lt;b&gt;objeto&lt;/b&gt;, mesmo que este esteja, para o programa escrito, totalmente oculto.&lt;br /&gt;&lt;br /&gt;Bolei o seguinte diagrama para descrever as três propriedades fundamentais de um objeto segundo as regras da máquina.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_O7vJ6agDv_c/S0x6XkjobsI/AAAAAAAAAGM/SrzqX-nZOWI/s1600-h/object_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_O7vJ6agDv_c/S0x6XkjobsI/AAAAAAAAAGM/SrzqX-nZOWI/s320/object_01.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Estas três propriedades são a "base" de um objeto e o determinam completamente; seu estado ou padrão de bits, seu local ou endereço, seu tamanho ou comprimento em bytes.&lt;br /&gt;&lt;br /&gt;Local e tamanho são propriedades espaciais, sendo a memória um universo unidimensional. Falamos sobre onde um objeto está, e ao longo de que comprimento. Estado é uma propriedade temporal, e (potencialmente) muda a cada instante.&amp;nbsp; Falamos sobre qual é o estado de um objeto (agora).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Mas eu venho insistindo que o programa escrito em linguagem de alto nível nada sabe sobre objetos, exceto aquilo que pode falar sobre eles através de referências, e tentando aplicar a nomenclatura da semiótica para dizer isso.&lt;br /&gt;&lt;br /&gt;Bolei o seguinte diagrama para relacionar os três conceitos que eu estou tentando usar, que envolvem toda expressão no programa escrito sobre objetos.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_O7vJ6agDv_c/S0x7fwGAAaI/AAAAAAAAAGU/A0GPUN3wC6s/s1600-h/object_02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_O7vJ6agDv_c/S0x7fwGAAaI/AAAAAAAAAGU/A0GPUN3wC6s/s320/object_02.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Uma expressão em um programa escrito como "y = x + x" possui, além dos elementos sintáticos &lt;i&gt;=&lt;/i&gt; e &lt;i&gt;+&lt;/i&gt; os nomes &lt;i&gt;y&lt;/i&gt; e &lt;i&gt;x&lt;/i&gt;; estes nomes são tradicionalmente chamados &lt;b&gt;variáveis&lt;/b&gt; e eu os estou chamando aqui de &lt;b&gt;referências&lt;/b&gt;. Esses nomes significam objetos por intermédio de um &lt;b&gt;tipo&lt;/b&gt; (que eu acredito ser equivalente ao &lt;b&gt;interpretante&lt;/b&gt;.)&lt;br /&gt;&lt;br /&gt;Linguagens como C++ prendem referência e tipo através da sintaxe; a ferramenta que interpreta o programa sempre sabe qual é o tipo associado a um nome como &lt;i&gt;x&lt;/i&gt;. Linguagens como Javascript não prendem referência e tipo dessa forma, de modo que a ferramenta deve sempre considerar o contexto de uma expressão para inferir um tipo para &lt;i&gt;x&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;A vantagem do C++ (e similares) é a possibilidade de se apoiar em uma ferramenta para evitar que uma referência absurda seja formada e usada; linguagens como essa permitem a dedução da validade semântica a partir da validade sintática. Este é o sonho da &lt;b&gt;análise estática&lt;/b&gt; de programas: descobrir erros no significado a partir do (uso da) sintaxe.&lt;br /&gt;&lt;br /&gt;No seguinte exemplo em C++:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;complex c1 = { 1.0, 1.0 };&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;c1&lt;/i&gt; é uma referência cujo interpretante estático é "número complexo". Conhecendo os segredos deste interpretante, poderíamos compreender o resto do texto, o próprio objeto, como o número complexo 1 + i.&lt;br /&gt;&lt;br /&gt;A vantagem do Javascript (e similares) é a possibilidade de se expressar&lt;br /&gt;sobre objetos através de múltiplos tipos viáveis de acordo com a conveniência; linguagens como essa simplificam a validade sintática para aumentar as opções de validade semântica.&lt;br /&gt;&lt;br /&gt;No seguinte exemplo em Javascript:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;nome = "Pedro Lamarão";&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;nome&lt;/i&gt; é uma referência sem interpretante estático. Conhecendo os segredos da sintaxe da linguagem, saberíamos que aspas duplas implicam o interpretante "texto", e portanto nome significa o meu nome.&lt;br /&gt;&lt;br /&gt;Independentemente de onde o leitor obtém um tipo-interpretante para uma variável-referência, é através deste que o objeto-estado possuirá uma conotação -- um significado imediato. Os três tipos fundamentais em máquinas contemporâneas são o inteiro-sem-sinal, o inteiro-com-sinal e o ponto-flutuante.&lt;br /&gt;&lt;br /&gt;Programas do mundo real, porém, estão muito interessados em coisas como letras, textos, nomes de pessoas e lugares, valores em moeda local, fotos etc. Diversos programas precisam impor significados adicionais a objetos fundamentalmente aritméticos para serem úteis.&lt;br /&gt;&lt;br /&gt;Essa necessidade nos leva naturalmente a pensar em &lt;b&gt;objetos compostos&lt;/b&gt; por &lt;b&gt;objetos simples&lt;/b&gt; e sobre a diferença conceitual entre um objeto na máquina concreta e um &lt;b&gt;valor&lt;/b&gt; em um &lt;b&gt;conjunto abstrato&lt;/b&gt;. Certos programas dirão que um certo objeto possui o valor "Pedro Lamarão" -- mesmo sabendo que a máquina fundamentalmente só compreende números.&lt;br /&gt;&lt;br /&gt;O relacionamento entre as idéias objeto e valor, e a idéia de composição de objetos, torna o processo semiótico de um programa muito mais rico, interessante e passível de absurdos -- onde nem sempre se consegue responder com facilidade a perguntas simples como "&lt;i&gt;x&lt;/i&gt; é igual a &lt;i&gt;y&lt;/i&gt;?"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-1364536187229267009?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/1364536187229267009/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=1364536187229267009' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1364536187229267009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1364536187229267009'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2010/01/programacao-e-semiotica-6.html' title='Programação e Semiótica 6'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_O7vJ6agDv_c/S0x6XkjobsI/AAAAAAAAAGM/SrzqX-nZOWI/s72-c/object_01.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-7131115908644246508</id><published>2010-01-07T10:51:00.002-02:00</published><updated>2010-04-24T20:29:36.850-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Semiótica e Programação 5</title><content type='html'>Agora, para um pensamento menos entediante.&lt;br /&gt;&lt;br /&gt;Considere que autenticação é o processo pelo qual um sujeito se convence que um certo signo de fato significa um certo objeto -- uma certa credencial de fato significa um certo indivíduo, por exemplo.&lt;br /&gt;&lt;br /&gt;Quando você ouve a campainha e alguém dizer "Olá" e pensa "Deve ser fulano" você autentica o signo vocal para se convencer ainda mais usando o olho mágico.&lt;br /&gt;&lt;br /&gt;O método de autenticação em sistemas de informação com a interação mais simples é a checagem de um segredo compartilhado. O sistema conhece um segredo para um username e assume que se alguém apresentar o username e o segredo, então deve ser o significado daquele username.&lt;br /&gt;&lt;br /&gt;O programa em execução, após executar essa interação com sucesso, construirá um objeto na memória, e manterá uma referência para ele cujo significado ulterior é username-do-usuário. Já que a autenticação foi bem sucedida, o programa confiará até terminar que esta referência é adequada, e poderá usá-la para julgar se deve ou deve não permitir o usuário a abrir certos arquivos etc.&lt;br /&gt;&lt;br /&gt;Esta confiança no significado daquela referência é perfeitamente adequada para programas convencionais: a memória de um programa convencional em um sistema convencional é exclusiva, de modo que ele pode facilmente se convencer de que o objeto referenciado é íntegro.&lt;br /&gt;&lt;br /&gt;Às vezes programadores movem para sistemas diferentes onde as regras são diferentes, e esse tipo de expectativa implícita é violada com consequências drásticas.&lt;br /&gt;&lt;br /&gt;O jovem programador que move sua atividade para a web pode escrever um site em script que autentica o usuário e guarda o username em um objeto da sessão. O programa subjacente então continuamente fará certa referência a este objeto para tomar decisões de segurança, afinal, esta referência está para o objeto certo, não é?&lt;br /&gt;&lt;br /&gt;Porém, neste ambiente, o programador não pode assumir a integridade do objeto -- não ingenuamente, como eu assumi acima. Como a web é um sistema bem distribuído e como o browser acessa o site um arquivo por vez, sem qualquer continuidade, este objeto ao qual o script faz referência não está sob seu controle. Ele existe em uma memória distante, fora do seu controle.&lt;br /&gt;&lt;br /&gt;Fora do seu controle significa sob controle de um outro agente: o cliente. Suponha então que eu faça um acesso a uma página restrita e posicione arbitrariamente um objeto com o &lt;i&gt;username&lt;/i&gt; de outra pessoa justamente no local onde a referência do programa assume que ele esteja. Assim, eu posso &lt;b&gt;mentir&lt;/b&gt; ao programa sobre quem eu sou, me valendo de uma ingenuidade no significado do programa.&lt;br /&gt;&lt;br /&gt;Perceber esse furo de segurança no site pode ser difícil porque o texto do programa do site pode adequadamente obter o &lt;i&gt;username&lt;/i&gt; e compará-lo com regras de autorização em todos os lugares. O problema aqui é semanticamente anterior a esta comparação: o problema está na premissa de que uma certa referência está de fato para um objeto com o significado esperado.&lt;br /&gt;&lt;br /&gt;Assim, os defeitos nos processos de autenticação em sistemas de informação são compreensíveis sob a ótica de uma função sígnica com "defeito" -- uma oportunidade através da qual o par em uma conversação tem condições de mentir. Concretamente, esse defeito existe no programa na forma de uma confiança indevida sobre o objeto de uma referência.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-7131115908644246508?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/7131115908644246508/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=7131115908644246508' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/7131115908644246508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/7131115908644246508'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2010/01/semiotica-e-programacao-5.html' title='Semiótica e Programação 5'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-4611088759351494385</id><published>2010-01-06T11:29:00.000-02:00</published><updated>2010-04-24T20:29:36.851-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Semiótica e Programação 4</title><content type='html'>O padrão Proxy ocorre sempre que um objeto no sistema existe como substituto de outro objeto, por alguma razão. Em um sistema distribuído entre muitos computadores físicos, um objeto local pode ser substituto de um objeto que está em outro computador, ocultando o mecanismo de comunicação entre computadores.&lt;br /&gt;&lt;br /&gt;O objeto proxy, de um modo ou de outro, possuirá uma referência ao objeto proxied; e o programa que possui uma referência ao objeto proxy possuirá uma referência ao objeto proxied.&lt;br /&gt;&lt;br /&gt;Esses múltiplos níveis de indireção trazem problema para a expressão e compreensão do programa devido a frequente ausência de interpretantes para humanos -- também conhecidos como &lt;b&gt;documentação&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Considere um objeto whatever que é um proxy para um objeto em um computador central, e uma rotina com essa aparência:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; get_name (whatever) -&amp;gt; (s1)&lt;br /&gt;&amp;nbsp;&amp;nbsp; ; s1 is the name of whatever&lt;br /&gt;&lt;br /&gt;Um programa chama get_name e obtém uma referência ao objeto "nome" de um outro objeto qualquer.&lt;br /&gt;&lt;br /&gt;Agora, resta a pergunta: se o programa que eu estou rodando modificar o valor de s1, o que acontece com whatever? Se Fulana rodar o mesmo programa depois que eu, que valor de s1 ela vai obter? s1 é uma referência para uma cópia ou é uma referência para o original?&lt;br /&gt;&lt;br /&gt;Essa diferença é importante por razões que não apenas as consequências de modificar o objeto. A memória do computador é finita e portanto os programas devem cuidar de destruir os objetos que já acabaram de usar. Mas o que o programa que usa get_name deve fazer com o objeto referenciado por s1? Ele deve destruí-lo? Ele pode destruí-lo? Com certeza ele não pode destruir um objeto que está referenciado por diversos outros programas.&lt;br /&gt;&lt;br /&gt;Por que (alguns) programas devem cuidar da presença dos objetos na memória, e dar manutenção nessa memória, existe sempre o problema de dispor de espaço para objetos ocuparem e por quanto tempo. Quando um programa faz algo como:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; string s4 = "Marcelinho"&lt;br /&gt;&lt;br /&gt;a expressão de que "existe um s4 que é um texto" é interpretada implicitamente como "precisamos arranjar espaço para um texto pelo tempo necessário".&lt;br /&gt;&lt;br /&gt;Quando o programa lida com objetos que foram criados por ele mesmo e são locais, o uso do espaço e do tempo é óbvio porque explícito; referências a objetos ocultos demandam maiores explicações.&lt;br /&gt;&lt;br /&gt;As referências indiretas como os objetos proxies levam o problema além quando tornam possível que uma referência seja absurda -- uma referência a nenhum-objeto. Há programas onde faz sentido uma referência a nenhum-objeto e há programas onde isso não faz sentido. O programador deve deixar isso sempre claro sob pena de não ser compreendido.&lt;br /&gt;&lt;br /&gt;Documentação é a única solução geral na medida em que linguagens de programação em geral não oferecem mecanismos sintáticos para se especificar esses atributos de uma referência.&lt;br /&gt;&lt;br /&gt;Nem mesmo C++, que possui duas notações para referências com diversos graus de rigor sintático, consegue expressar tudo o que se deseja expressar, e a confusão sobre a especificação de "rvalue references" indica que ainda não está firmada a sintaxe do futuro.&lt;br /&gt;&lt;br /&gt;Linguagens como Java, onde a quase totalidade dos objetos são criados por um gestor central em memória desconhecida, permitem ao programa ignorar a manutenção da memória mas ainda sofrem do problema de compreensão das referências.&lt;br /&gt;&lt;br /&gt;Quando começamos a considerar as referências polimórficas a situação fica ainda mais punk.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-4611088759351494385?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/4611088759351494385/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=4611088759351494385' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/4611088759351494385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/4611088759351494385'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2010/01/semiotica-e-programacao-4.html' title='Semiótica e Programação 4'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-3516084182757798238</id><published>2010-01-04T17:15:00.000-02:00</published><updated>2010-04-24T20:29:36.851-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>URIs e a semiose da web</title><content type='html'>(TODO: Será que estou usando os termos certos? Suponho que "significante" seja o mesmo que "interpretante" mas a nomenclatura da Semiótica não está bem firme na minha memória.)&lt;br /&gt;&lt;br /&gt;Existe bastante semiose na comunicação entre programas de computador, mesmo que seja uma semiose extremamente simples, com um universo de possibilidades bastante limitado.&lt;br /&gt;&lt;br /&gt;O serumano ao acessar uma página na Web digita no browser: http://www.twitter.com/pedrolamarao -- uma URI.&lt;br /&gt;&lt;br /&gt;Existe algo de muito interessante acontecendo entre o serumano, o browser e um servidor perdido na rede; algo descrito em grande pompa teórica na especificação das URIs.&lt;br /&gt;&lt;br /&gt;Em primeiro lugar, esse texto é bastante opaco para a maioria das pessoas; muitas delas compreendem que "twitter" é o nome de um "site" e que estão querendo ver as paradas de "pedrolamarao".&lt;br /&gt;&lt;br /&gt;Alguns mais acostumados com a Web sabem que "http" é o nome das coisas que são da Web, e que existem outros nomes próprios de outros programas, como "ftp".&lt;br /&gt;&lt;br /&gt;Realmente esse texto, ou esse símbolo, se divide em duas partes, e deve ser interpretado em dois estágios, ou como composto de dois símbolos distintos.&lt;br /&gt;&lt;br /&gt;O primeiro símbolo é "http" que deve ser interpretado de acordo com um esquema bem simples -- a pura comparação textual. "http" vai para cá, "ftp" vai para lá e assim por diante. O nome desse símbolo é &lt;b&gt;schema&lt;/b&gt; e esse símbolo será o interpretante do símbolo seguinte: deve-se interpretar o resto do texto de acordo com este princípio do texto.&lt;br /&gt;&lt;br /&gt;Existe uma infinitude de possíveis schemas, já que um schema é apenas e tão somente um monte de letras em sequência. Além disso, o acordo entre todos nós sobre o que um schema significa pode ou pode não ser bem definido; é claro que a Internet inteira concorda sobre o que é "http", mas duvido que algum de vocês saiba como interpretar "astrotv" da mesma forma que eu.&lt;br /&gt;&lt;br /&gt;Quando o schema é "http" o sistema sabe que deve usar o browser Web. Ao menos, assim esperamos que seja, quando clicamos em "http://www.twitter.com/pedrolamarao" sublinhado em azul naquele email que recebemos. O browser Web, por sua vez, sabe que&amp;nbsp; o segundo símbolo -- "www.twitter.com/pedrolamarao" -- é composto também por diversos símbolos, quando a URI é "http".&lt;br /&gt;&lt;br /&gt;O primeiro deste último conjunto é chamado &lt;b&gt;authority&lt;/b&gt; e possui um entre poucos interpretantes aceitáveis. Neste caso, o&lt;b&gt; domain name system&lt;/b&gt; ou &lt;b&gt;DNS&lt;/b&gt; é o nome do sistema responsável. Este sistema dirá ao browser Web onde está o servidor responsável. Mais detalhes são irrelevantes. Restam poucos outros interpretantes aceitáveis, e seus sistemas são cheios de números.&lt;br /&gt;&lt;br /&gt;O segundo deste último conjunto é chamado &lt;b&gt;path&lt;/b&gt;. Este path possui um interpretante básico: o sistema de arquivos do servidor significado pelo authority. É o mesmo que os arquivos na máquina de qualquer pessoa. É claro que, como é da natureza do mundo, existem diversos outros interpretantes possíveis, como por exemplo algum outro programa dentro do servidor Web que mapeia "pedrolamarao" para um negócio em um banco de dados.&lt;br /&gt;&lt;br /&gt;Porém, tudo o que o browser Web precisa saber, parte do seu acordo com o servidor Web, é que para qualquer path o servidor Web enviará uma porção de dados. Na maioria das vezes, esses dados estão de acordo com a norma&amp;nbsp; HTML ou CSS e devem ser interpretados através destas -- seus interpretantes. É claro que nem sempre é assim, já que vêm também scripts Javascript, fotos JPEG, música MP3 etc. etc.&lt;br /&gt;&lt;br /&gt;Como o browser sabe qual será o interpretante mais adequado para cada um desses símbolos bizarros de 0s e 1s que vêm pela rede? A semiose durante um simples abrir de página é complexa e cheia de elementos, e será finita apenas até o ponto em que o engenheiro perder o interesse nos detalhes do sistema.&lt;br /&gt;&lt;br /&gt;A cada passagem de símbolo a símbolo por um interpretante escolhido por qualquer agente nessa confusão toda há chance para algum problema. Administradores de servidor Web vivem às voltas com "página não encontrada" e arrancam os cabelos para entender porque um determinado path não foi encontrado. Volta e meia um browser Web resolve imprimir um monte de lixo na tela quando o usuário tem certeza que está baixando um filme. Às vezes um sujeito digita o nome de um site e o browser Web diz "nome não encontrado". O que acontece quando a configuração do DNS está com defeito!? E alguns infelizes usam sistemas que não tem muita certeza sobre o que fazer com nomes começando com "http".&lt;br /&gt;&lt;br /&gt;Toda vez que surge um novo sistema de componentes na indústria há bravatas sobre o desenvolvimento de um novo tipo de "nome globalmente único". É o grande sonho da humanidade, ser capaz de nomear os entes sem ambiguidade. Todo um conjunto de sociedades esotéricas existe em desespero para aprender o Idioma de Adão, que soube nomear todas as coisas sem hesitação. Os humanos com senso prático compreendem que nomes são acordos entre as partes e estabelecem tais acordos entre si. O schema "http" por exemplo possui um significado em acordo estabelecido sob a autoridade do &lt;b&gt;IANA&lt;/b&gt;. Mas você sabe o que IANA significa?..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-3516084182757798238?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/3516084182757798238/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=3516084182757798238' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/3516084182757798238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/3516084182757798238'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2010/01/uris-e-semiose-da-web.html' title='URIs e a semiose da web'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-8799538485271959819</id><published>2009-12-30T15:50:00.000-02:00</published><updated>2010-04-24T20:29:36.852-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Semiótica e Programação 3</title><content type='html'>Do ponto de vista do Java e do C#, C++ é uma linguagem fracamente tipada. Apesar de dizer isso abusar dos termos, existe um fundo de verdade ali.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;C++, ao contrário de Java e C#, permite a formação de referências arbitrárias a qualquer objeto -- mesmo objetos hipotéticos.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Programas como este são aceitáveis, para o compilador:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;list&amp;lt;string&amp;gt;* l = (list&amp;lt;string&amp;gt;*)0x12345;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;l-&amp;gt;sort();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esta propriedade é inútil para a maioria dos programas, o que torna C++ excessivamente complicada aos olhos da maioria dos programadores. Se o programa está dizendo que naquele lugar ocorre um &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;list&amp;lt;string&amp;gt;&lt;/span&gt; então isso deve ser verdade, certo? Boa sorte!&lt;br /&gt;&lt;br /&gt;Existem programas que fazem uso dessa possibilidade, como programas para máquinas onde certos endereços são especiais e têm significado pré-definido.&lt;br /&gt;&lt;br /&gt;Programas como este também são aceitáveis:&lt;br /&gt;&lt;br /&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;dog* marley = new dog();&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;spaceship* one = (spaceship*)marley;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;one-&amp;gt;launch();&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Essa possibilidade é inerente à máquina, na medida em que o significante de uma referência existe apenas no mundo do discurso; a máquina conhece apenas bits. A reinterpretação de um padrão de bits é uma operação de pura semiótica: não é necessário computar nada, apenas compreender os bits de uma forma diferente. Assim sendo, C++ se limita a dizer que não fará esforço para garantir que esse programa faz sentido -- o problema é todo seu.&lt;br /&gt;&lt;br /&gt;A estrutura que o tipo de uma referência impõe ao programa pode ser tal que nem todos os padrões de bits possíveis para aquele segmento de memória tenham um significado. Assim, apesar de o programa afirmar que ali está um objeto &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;spaceship&lt;/span&gt;, o padrão de bits que ocorre ali pode não representar um objeto &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;spaceship&lt;/span&gt; -- e o programa é literalmente um absurdo.&lt;br /&gt;&lt;br /&gt;Em outras palavras, esse programa potencialmente viola invariantes do tipo &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;spaceship&lt;/span&gt;, que são pré-condições automáticas para a chamada da função &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;launch&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;A reinterpretação irrestrita de objetos é uma das características mais estranhas dessa linguagem, e mais difícil de pôr em prática de forma útil.&lt;br /&gt;&lt;br /&gt;Um desses usos é a transferência de objetos entre programas através de um dispositivo, técnica em que o programa receptor obtém uma pura sequência de bytes e assume que ali está o objeto transferido. Isso é chamado &lt;b&gt;serialização&lt;/b&gt; porque torna o objeto, que possui significado e estrutura, em um série de bits.&lt;br /&gt;&lt;br /&gt;Outro desses usos é a técnica de &lt;i&gt;&lt;b&gt;move construction&lt;/b&gt;&lt;/i&gt; do Elements of Programming, onde o objeto é reinterpretado de acordo com sua &lt;i&gt;&lt;b&gt;underlying class&lt;/b&gt;&lt;/i&gt; e copiado como tal -- e esta cópia é justamente a movimentação desejada.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-8799538485271959819?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/8799538485271959819/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=8799538485271959819' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8799538485271959819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8799538485271959819'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/12/semiotica-e-programacao-3.html' title='Semiótica e Programação 3'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-4823731260482466946</id><published>2009-12-29T16:48:00.001-02:00</published><updated>2010-04-24T20:29:36.853-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Semiótica e Programação 2</title><content type='html'>Linguagens cuja proposta é &lt;b&gt;tipagem forte&lt;/b&gt; permitem através de sua sintaxe a expressão de constrições sobre a manipulação do estado de um objeto denotado por uma referência. Linguagens cuja proposta é &lt;b&gt;tipagem fraca&lt;/b&gt; permitem manipulações de objetos com pouca constrição.&lt;br /&gt;&lt;br /&gt;Entendendo uma referência nesse contexto como o mesmo que um &lt;b&gt;signo&lt;/b&gt;, o &lt;b&gt;tipo&lt;/b&gt; é o &lt;b&gt;significante&lt;/b&gt; de uma referência, impondo significado ao objeto denotado.&lt;br /&gt;&lt;br /&gt;Para o programa, o tipo impõe constrições sobre as manipulações possíveis ou válidas desse objeto. Em linguagens como C++, a diferenciação dos tipos permite a seleção de uma entre diversas operações possíveis de modo particularmente significativo para o objeto referenciado.&lt;br /&gt;&lt;br /&gt;Naturalmente, programas podem formar diversas referências ao mesmo objeto, o que causa diversas dificuldades à especificação do significado de um programa como um todo e atrapalha ferramentas de transformação de código -- o "problema de &lt;i&gt;&lt;b&gt;aliasing&lt;/b&gt;&lt;/i&gt;".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A especificação da máquina abstrata que determina o significado de um programa deve responder de algum modo a questão: suponha uma referência &lt;i&gt;a&lt;/i&gt; cujo tipo é &lt;i&gt;A&lt;/i&gt; e uma referência&lt;i&gt; b&lt;/i&gt; cujo tipo é &lt;i&gt;B&lt;/i&gt; onde ambas denotam o mesmo objeto; suponha que um programa escreva um valor válido através de &lt;i&gt;a&lt;/i&gt; e então leia um valor através de &lt;i&gt;b&lt;/i&gt;; qual é o significado desse programa para &lt;i&gt;A&lt;/i&gt; e &lt;i&gt;B&lt;/i&gt; arbitrários?&lt;br /&gt;&lt;br /&gt;Linguagens de tipagem fraca frequentemente realizam conversões auto-mágicas internamente de modo que o programa acima sempre possui um significado compreensível. C++ dirá que o programa acima possui em geral um significado &lt;b&gt;indefinido&lt;/b&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-4823731260482466946?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/4823731260482466946/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=4823731260482466946' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/4823731260482466946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/4823731260482466946'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/12/semiotia-e-programacao-2.html' title='Semiótica e Programação 2'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-7784965457060396589</id><published>2009-12-28T11:11:00.000-02:00</published><updated>2010-04-24T20:29:36.854-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Semiótica e Programação</title><content type='html'>É interessante observar que podemos sem erro considerar todo nome de variável e função em um programa C++ como uma &lt;b&gt;referência&lt;/b&gt;. Esta referência, assim como possivelmente muitas outras, &lt;b&gt;denotam&lt;/b&gt; um certo objeto que, em si, não passa de uma combinação de três informações: um local, uma quantidade de armazenagem, e um estado atual. Referências cujo tipo é ponteiro-para-Foo &lt;b&gt;conotam&lt;/b&gt; um objeto do tipo Foo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-7784965457060396589?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/7784965457060396589/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=7784965457060396589' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/7784965457060396589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/7784965457060396589'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/12/semiotica-e-programacao.html' title='Semiótica e Programação'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-2521649116091990752</id><published>2009-12-19T19:12:00.002-02:00</published><updated>2009-12-19T19:12:24.047-02:00</updated><title type='text'>Adeus, Redes Sociais</title><content type='html'>Apaguei minha conta no Orkut e no Facebook.&lt;br /&gt;&lt;br /&gt;^^&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-2521649116091990752?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/2521649116091990752/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=2521649116091990752' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2521649116091990752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2521649116091990752'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/12/adeus-redes-sociais.html' title='Adeus, Redes Sociais'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-923265668616933639</id><published>2009-12-18T17:21:00.000-02:00</published><updated>2009-12-18T17:21:26.051-02:00</updated><title type='text'>Ele é o Tao</title><content type='html'>Por incrível que possa parecer, eu tenho uma veia mística &lt;b&gt;forte&lt;/b&gt; correndo pelo meu corpo. Vivi na prática atividades místicas por alguns anos, o que me faz algo menos iludido do que apenas alguém que &lt;i&gt;pensa no assunto&lt;/i&gt;. Então a minha prática de artes marciais satisfez a veia mística de modo que hoje os leitores desse blog devem acreditar que eu passo meu tempo todo pensando em kung fu ou programação de computadores.&lt;br /&gt;&lt;br /&gt;Pois bem, essa combinação atual de interesses, fora as circunstâncias gerais da vida, me levam a ser místico ao estilo &lt;i&gt;tao te ching&lt;/i&gt; de ser. E o &lt;i&gt;tao te ching&lt;/i&gt; é uma obra que beira ao ininteligível.&lt;br /&gt;&lt;br /&gt;Isso, misticamente falando. Por que &lt;b&gt;tao&lt;/b&gt; é intraduzível etc. Porém, compreendendo que o que é místico não está à parte do mundo, mas apenas esquisitamente dentro dele, existe um procedimento interessante para desvendar o indesvendável: fazer o oposto do que o místico ensina e interpretá-lo ao pé da letra.&lt;br /&gt;&lt;br /&gt;O &lt;i&gt;tao te ching&lt;/i&gt; tem uma frase, no meio do livro, que é um tiro de significado na cara do leitor. O Autor diz [1] no capítulo XLII: &lt;i&gt;Homens violentos e fortes não morrem de causas naturais. Este fato é a fundação da minha Lei.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;A frase é simples e interessante. O homem violento não morre de causas naturais, ele é morto; sua vida sofre uma interrupção abrupta durante alguma violência qualquer.&lt;br /&gt;&lt;br /&gt;Relendo o livro, encontramos o tema da continuidade abordado com frequência em imagens como a do homem que tem algo, e teme perder algo, e perde algo. Este homem é como o homem violento que luta por algo e morre na luta. Ele não continua; lutando pela vida, ele se transforma pela morte; lutando para ter, ele perde.&lt;br /&gt;&lt;br /&gt;Assim, o livro trás sempre à tona esta propriedade da existência pela qual, misteriosamente, sempre uma coisa se transforma justamente na outra coisa que ela não é.&lt;br /&gt;&lt;br /&gt;O livro frequentemente toma ares de manual de governo, porque a filosofia do mundo antigo não era um adereço a se apreciar, mas uma direção para a vida. A filosofia do &lt;i&gt;tao te ching&lt;/i&gt; é peculiar nesse sentido porque, sendo filosofia aquilo que diz a você o que fazer, ela diz a você para não fazer nada.&lt;br /&gt;&lt;br /&gt;Quando o livro diz a você que o ideal é não fazer nada, é possível entender como isso pode ser bom à luz da &lt;i&gt;fundação da minha Lei&lt;/i&gt;: o homem que luta vence e perde, o homem que não luta continua apenas sendo o que é.&lt;br /&gt;&lt;br /&gt;Assim também se pode compreender passagens esquisitas como as do capítulo XLI: &lt;i&gt;o Tao em sua maior clareza é obscuro. Quem avança nesse Caminho, se retira. Sua Via suave é áspera. Seu pico é um vale. (...) Sua estabilidade é mudança. Sua forma é sem forma. Seu preenchimento é vacância. Seu pronunciamento é silêncio. Sua realidade é Ilusão.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Assim também, no treino de artes marciais, o praticante aprende que deve se tornar maleável para, paradoxalmente, ser estável; que deve relaxar os músculos para produzir força.&lt;br /&gt;&lt;br /&gt;O paradoxo e a revolta da mente estão na causalidade: todos sabem que para que haja força deve haver contração muscular, portanto é absurdo dizer que relaxamente muscular é a chave da aplicação da força. A observação, porém, é limitada no espaço e no tempo: a imediateza da expansão de fibras e da produção de forças de repulsão. A observação causal é ineficaz na compreensão do onde e do quando das condições através das quais é possível e desejável produzir esses fenômenos.&lt;br /&gt;&lt;br /&gt;Assim, o &lt;i&gt;tao te ching&lt;/i&gt; observa como tolo o indivíduo que, para se sentir feliz, adquire aquela riqueza que o fará ser assaltado e se sentir infeliz; aquele homem que para deseja a vitória e luta, e, lutando, sofre a derrota.&lt;br /&gt;&lt;br /&gt;O homem sábio "possui" ou "conhece" o &lt;i&gt;tao&lt;/i&gt;, que está fora de relação com o claro ou com o obscuro. O mestre de &lt;i&gt;kung fu&lt;/i&gt; está fora de relação com puxar ou empurrar e, apesar de estar sempre onde está, nunca pode ser encontrado por um punho que o procura.&lt;br /&gt;&lt;br /&gt;O caminho do &lt;i&gt;tao&lt;/i&gt; parece anátema ao caminho de Thelema mas para mim parecem mesmo duas fases de uma mesma proposta; a diferença sendo que, enquanto o texto de instruções do &lt;i&gt;tao&lt;/i&gt; propõe que &lt;b&gt;não fazer&lt;/b&gt; é o método, o texto de instruções de Thelema propõe que &lt;b&gt;fazer&lt;/b&gt; é o método.&lt;br /&gt;&lt;br /&gt;O thelemita &lt;b&gt;deve&lt;/b&gt; fazer aquilo que ele quer fazer; porque aquilo que ele quer fazer é justamente ser quem ele é. Assim, quando o thelemita faz o que quer, ele não está fazendo nada, apenas sendo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Quando a obviedade de afirmações sobre a "ação natural" começa a irritar o leitor, a &lt;i&gt;fundação da Lei&lt;/i&gt; retorna para a atenção: o homem violento não morre de causas naturais, e morrer de causas naturais é algo desejável. A tranquilidade é desejável, assim como a continuidade. Inércia é movimento. Onde não há tranquilidade, onde não há continuidade, não há inércia, e o homem se afasta do &lt;i&gt;tao&lt;/i&gt; é então se torna bonito ou feio, rico ou pobre, forte ou fraco.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[1] o texto que eu leio é uma tradução das mais distantes possíveis: do chinês para o inglês por James Legge, do inglês para o próprio inglês por Aleister Crowley, e desse último para o português por mim mesmo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-923265668616933639?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/923265668616933639/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=923265668616933639' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/923265668616933639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/923265668616933639'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/12/ele-e-o-tao.html' title='Ele é o Tao'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-7268502598224513581</id><published>2009-12-07T14:51:00.002-02:00</published><updated>2009-12-07T14:51:32.556-02:00</updated><title type='text'>Queremos Massacration no Rock Band!</title><content type='html'>If you want to be Metal, the laws you must obey!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-7268502598224513581?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/7268502598224513581/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=7268502598224513581' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/7268502598224513581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/7268502598224513581'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/12/queremos-massacration-no-rock-band.html' title='Queremos Massacration no Rock Band!'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-8180731313504964483</id><published>2009-12-01T21:29:00.001-02:00</published><updated>2010-04-24T20:29:36.855-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>bytes e suas interpretações</title><content type='html'>Houve época em que, ao programar C#, sempre me irritava ver a notação byte -- me parecia estúpido ter um tipo na linguagem de programação chamado byte.&lt;br /&gt;&lt;br /&gt;Li hoje em um manual da Intel:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;"Although bytes, words, and doublewords are fundamental data types, some instructions support additional interpretations of these data types to allow operations to beperformed on numeric data types (signed and unsigned integers, and floating-point numbers)."&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Hoje, programando em C++, me irrita que não exista uma distinção entre char-que-é-sequência-opaca-de-bits, char-que-é-número-inteiro e char-que-é-elemento-alfabético.&lt;br /&gt;&lt;br /&gt;O texto do manual é interessante; para a máquina, realmente existe apenas o byte e suas variantes como padrões de bits; o que quer que você faça de interessante com esse byte implica uma interpretação desse byte.&lt;br /&gt;&lt;br /&gt;A máquina é &lt;i&gt;untyped&lt;/i&gt;; não existe mecanismo formal pelo qual se possa deduzir que uma interpretação para este byte é correta ou incorreta. Dependendo de quem você é, isso pode parecer ótimo ou absurdo.&lt;br /&gt;&lt;br /&gt;As razões porque isso é ótimo são boas, mas diminuiriam muito com algumas poucas extensões do C++. Programadores de aritmética com poucos recursos computacionais aprendem rapidamente, por exemplo, que a máquina pode computar muito rapidamente produto e divisão por 2 sem usar as instruções de produto e divisão de inteiros -- usando as instruções de shift de sequências de bytes. Esses programadores podem argumentar que essa é a vantagem da programação &lt;i&gt;untyped&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Felizmente, podemos pensar de trás pra frente; aceitando como axioma que a memória representa sempre &lt;i&gt;bits&lt;/i&gt;, então devem haver implementações ótimas para produto_por_2 e quociente_por_2 -- assim como é_par e é_negativo. Isso sugere que uma linguagem de programação com esses operadores nativos para números inteiros satisfaz as necessidades do programador acima -- diminuindo drasticamente a necessidade de permitir &lt;i&gt;shifts&lt;/i&gt; em objetos do tipo inteiro.&lt;br /&gt;&lt;br /&gt;Essa idéia me vem do "Elements of Programming", de Stepanov e McJones; no livro eles discutem a idéia de "base computacional" de uma estrutura de dados. Quando aritmética inteira é implementada em uma máquina binária, produto_por_2, quociente_por_2, é_par e é_negativo devem fazer parte da base computacional dos tipos inteiros -- simplesmente por serem especialmente rápidas.&lt;br /&gt;&lt;br /&gt;(No livro, eles não estudam representações de números reais; alguém se habilita a compor uma base computacional para números reais representados como em IEEE 754?)&lt;br /&gt;&lt;br /&gt;[Editado!] &lt;br /&gt;&lt;br /&gt;Acho, além disso, interessante a definição de certos tipos de dados inúteis no manual da Intel, como &lt;i&gt;bit field&lt;/i&gt; e &lt;i&gt;string&lt;/i&gt;. Essas definições parecem mais sugestões de uso que definições, já que nem um &lt;i&gt;bit field&lt;/i&gt; nem um &lt;i&gt;string&lt;/i&gt; é mais que um ou mais bytes contíguos.&lt;br /&gt;&lt;br /&gt;Me parece que essas definições apóiam a definição posterior de operações extendidas ou especializadas sobre bytes, como referências a bits individuais ou cópia otimizada de bytes contíguos. É claro que essas são, ainda, operações simples sobre sequências de bits, e não demandam interpretação especial.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-8180731313504964483?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/8180731313504964483/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=8180731313504964483' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8180731313504964483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8180731313504964483'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/12/bytes-e-suas-interpretacoes.html' title='bytes e suas interpretações'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-6746931133681239097</id><published>2009-11-29T12:12:00.000-02:00</published><updated>2010-04-24T20:29:36.856-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>C++ em múltiplas configurações</title><content type='html'>Parte dos meus esforços em entender o ambiente de programação C++ é buscar os padrões de uso do pré-processador, algo que eu nunca encontrei catalogado sistematicamente.&lt;br /&gt;&lt;br /&gt;Ao meu ver, existem dois grandes grupos de usuários do pré-processador: programadores que usam macros como formas de reusar código totalmente &lt;i&gt;inline&lt;/i&gt;, e programadores que usam macros para variar a definição de um programa C++ de acordo com variáveis de configuração.&lt;br /&gt;&lt;br /&gt;A comunidade do C++ acredita que a necessidade de usar macros hoje praticamente não existe; essas pessoas deveriam ser mais específicas e dizer que a necessidade de usar macros para reusar código totalmente &lt;i&gt;inline&lt;/i&gt; já não existe, porque compiladores otimizadores e templates de função são capazes de fazer isso.&lt;br /&gt;&lt;br /&gt;(Eu chamo reusar código totalmente &lt;i&gt;inline&lt;/i&gt; a uma forma de reuso que insere código diretamente no chamador, sem utilizar o mecanismo de chamada de subrotina, que envolve empilhamento, desempilhamento e saltos.)&lt;br /&gt;&lt;br /&gt;Porém, não há solução sintática para o problema das configurações -- ao menos, não há solução bem conhecida. É interessante ler sobre &lt;a href="http://www.gnu.org/software/autoconf/manual/html_node/Genesis.html"&gt;a história do autoconf&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-6746931133681239097?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/6746931133681239097/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=6746931133681239097' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6746931133681239097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6746931133681239097'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/11/c-em-multiplas-configuracoes.html' title='C++ em múltiplas configurações'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-8762140873733601876</id><published>2009-11-26T15:25:00.001-02:00</published><updated>2010-04-24T20:29:36.858-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Otimização nas Sombras do C++</title><content type='html'>Eu não encontro pessoalmente esse tipo de coisa com muita frequência atualmente, mas foi tempo em que volta e meia me aparecia código-fonte muito esperto, ou críticas muito espertas sobre o meu código-fonte, com relação a quão "ótimo" ele é.&lt;br /&gt;&lt;br /&gt;Em C, essas espertezas eram invariavelmente transformações de uma notação legível e imediatamente representativa do algoritmo lógico por uma notação ilegível, equivalente mas que executava mais rápido.&lt;br /&gt;&lt;br /&gt;Truques de aritmética de ponteiros para escrever mais rápido na memória, truques horrendos com while e switch sem break pra desenrolar loops -- vários truques cujo objetivo é escrever o mesmo código gerando um programa melhor.&lt;br /&gt;&lt;br /&gt;De certa forma, os truques dessa época eram motivados pelos compiladores dessa época, máquinas de transformação burra de C para assembler. Com o objetivo de gerar o melhor assembler, programadores produziam pior C -- mais rápido, sim, mas menos legível e de mais difícil manutenção.&lt;br /&gt;&lt;br /&gt;Com o passar do tempo, os compiladores se tornaram otimizadores, capazes de &lt;i&gt;inlining&lt;/i&gt;, remoção de código morto, desenrolamento de &lt;i&gt;loops&lt;/i&gt;, progragação de valores constantes etc.&lt;br /&gt;&lt;br /&gt;As máquinas, por sua vez, introduziram &lt;i&gt;pipelines&lt;/i&gt; para otimizar o trabalho de processador mais e mais rápido que a memória, capazes de execução computações intermediárias simultaneamente a recuperação de dados da memória, especulação sobre valores futuros para adiantar computações etc.&lt;br /&gt;&lt;br /&gt;Compiladores cientes do &lt;i&gt;pipeline&lt;/i&gt; passaram a otimizar ainda mais, ordenando e reordenando instruções de modo a obter o melhor desempenho do otimizador alvo.&lt;br /&gt;&lt;br /&gt;Quem tem à mão um excelente compilador otimizador não precisa mais se preocupar em produzir código esperto. O compilador quase invariavelmente é melhor do que o programador humano. Ele também é a ferramenta adequada para a esperteza -- porque projetos críticos frequentemente transformam um código-fonte em programas para diversas máquinas, onde as peculiaridades variam muito.&lt;br /&gt;&lt;br /&gt;Mas então, um dia, surgiram as máquinas multi-processadas. A seguinte &lt;a href="http://ridiculousfish.com/blog/archives/2007/02/17/barrier/"&gt;citação&lt;/a&gt; resume a tragédia da programação para tais máquinas:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Yeah, I know. "Multithreading is hard" is a cliché, and it bugs me, because it is not some truism describing a fundamental property of nature, but it’s something &lt;/i&gt;&lt;i&gt;we did.  We made multithreading hard because we optimized so heavily for the single threaded case.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;O problema fundamental de um programa &lt;i&gt;multithreaded&lt;/i&gt; em uma máquina onde os processadores compartilham a memória é o de garantir que um certo objeto lógico -- uma sequência de bytes na memória -- não será escrito e lido de forma incosistente por múltiplos processadores -- porque um está escrevendo pela metade quando outro está lendo, etc.&lt;br /&gt;&lt;br /&gt;Por mais que um programador faça esforço para ordenar adequadamente as instruções em um programa -- de modo que qualquer ordem de leitura possível faça algum sentido -- o fato é que o otimizador do compilador, e o otimizador do &lt;i&gt;pipeline&lt;/i&gt;, fará mágicas com a presença e a ordem das instruções, violando a expectativa do programador.&lt;br /&gt;&lt;br /&gt;Desse modo, os truques espertos da atualidade não são truques para otimizar o &lt;i&gt;assembler&lt;/i&gt; e sim truques para evitar inconsistência no acesso concorrente à memória.&lt;br /&gt;&lt;br /&gt;As pessoas legais agora falam sobre &lt;i&gt;atomics&lt;/i&gt; e &lt;i&gt;memory barriers&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;O que há de curioso aqui é que esse problema espirra em certas direções mesmo onde não há múltiplos &lt;i&gt;threads&lt;/i&gt;. Ao programar uma máquina com suporte a &lt;i&gt;memory mapped I/O&lt;/i&gt; o mesmo problema de consistência ocorre sobre um endereço &lt;i&gt;memory mapped&lt;/i&gt; -- reordenar leituras e escritas ali resulta no caos.&lt;br /&gt;&lt;br /&gt;Tendo chegado até aqui, releia seu livro favorito sobre C++ sobre o significado da palavra-chave &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;volatile&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-8762140873733601876?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/8762140873733601876/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=8762140873733601876' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8762140873733601876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8762140873733601876'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/11/otimizacao-nas-sombras-do-c.html' title='Otimização nas Sombras do C++'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-5566516623417331418</id><published>2009-11-24T21:01:00.001-02:00</published><updated>2009-11-24T21:01:39.507-02:00</updated><title type='text'>Importei meus blogs antigos!</title><content type='html'>Meu primeiro post no Blogger foi em 2001!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-5566516623417331418?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/5566516623417331418/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=5566516623417331418' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/5566516623417331418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/5566516623417331418'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/11/importei-meus-blogs-antigos.html' title='Importei meus blogs antigos!'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-2614224564250838221</id><published>2009-11-23T17:55:00.000-02:00</published><updated>2010-04-24T20:29:36.860-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Mais sombras no Ambiente de Programação C++</title><content type='html'>Estou lendo a ementa do curso de pós-graduação em Análise e Projeto de Sistemas da PUC-Rio, onde ocorre o seguinte:&lt;br /&gt;&lt;br /&gt;"Laboratório de Linguagens de Programação&lt;br /&gt;&lt;br /&gt;Objetivo – Capacitar o aluno a distinguir os principais componentes de linguagens de programação não convencionais tais como: programação orientada a objetos, programação orientada a eventos e programação para Internet/intranet."&lt;br /&gt;&lt;br /&gt;A presença de "programação orientada a eventos" ali é interessante; a ementa prossegue em explicar que neste módulo o aluno aprenderá a programar Applets Java, que são orientados a eventos.&lt;br /&gt;&lt;br /&gt;O que se chama "orientação a eventos" ali é uma técnica de projeto de aplicativos úteis plugados em algum tipo de &lt;i&gt;framework&lt;/i&gt; de apoio, que cuida de enviar os tais eventos para o aplicativo.&lt;br /&gt;&lt;br /&gt;Há um sub-grupo dos programadores de C++ que dirá a você que "não programa interfaces de usuário". Essa é uma afirmação interessante porque, compreendido com rigor máximo, significa que os programas produzidos por essa pessoa produzem resultados totalmente invisíveis.&lt;br /&gt;&lt;br /&gt;Todo programa de computador possui uma interface de usuário -- senão, o usuário nunca veria seu resultado. Programadores C++ são criados desde o berço para produzir programas cuja interface com o usuário é o terminal -- um dispositivo capaz de apresentar um mapa de 80x24 caracteres.&lt;br /&gt;&lt;br /&gt;O que há de interessante nisso é que existe um mecanismo subjacente a esse terminal que suporta a parafernália usada para pôr ali os tais caracteres -- std::cout, printf etc. Esse mecanismo é inicializado, mantido e finalizado pela implementação do C++ de forma oculta ao usuário.&lt;br /&gt;&lt;br /&gt;Existem ambientes peculiares onde o C++ não inicializa nada disso -- ou inicializa essas coisas de forma inesperada. Os compiladores da Microsoft oferecem um parâmetro de chamada ao compilador para selecionar o "subsistema" -- CONSOLE ou WINDOWS. Aplicativos compilados para o subsistema WINDOWS não fazem coisas úteis quando o programa chama printf.&lt;br /&gt;&lt;br /&gt;No projeto onde estou alocado agora, o sistema implantado no dispositivo-alvo é altamente customizado, e a biblioteca padrão C++ apresenta esquisitices parecidas. Não existe um "terminal" e chamar printf às vezes não faz nada, às vezes bloquea o sistema eternamente em um signal handler.&lt;br /&gt;&lt;br /&gt;Bibliotecas como a Qt e a Glib oferecem uma terceira via, que talvez pudesse ser compreendida como um terceiro subsistema, o EVENT_LOOP. Esse subsistema possui sua própria API e faz tudo pela aplicação, que apenas inicia operações no sistema e senta esperando por notificações sobre o resultado. Assim são os Applets Java.&lt;br /&gt;&lt;br /&gt;Tudo isso sugere que o ambiente de execução do C++ executa mais que apenas o código da aplicação, e de fato existem atividades que ocorrem antes de &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;main&lt;/span&gt; iniciar e depois de &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;main&lt;/span&gt; finalizar. O programador atento procurará pelo código-fonte ou executável do CRT no seu sistema -- o C Run-Time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-2614224564250838221?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/2614224564250838221/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=2614224564250838221' title='7 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2614224564250838221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2614224564250838221'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/11/mais-sombras-no-ambiente-de-programacao.html' title='Mais sombras no Ambiente de Programação C++'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-6226694480484161093</id><published>2009-11-16T22:45:00.001-02:00</published><updated>2009-11-16T22:50:31.597-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='filosofia'/><title type='text'>A Habilidade da Lentidão</title><content type='html'>Na outra semana estivemos no &lt;i&gt;mo kwoon&lt;/i&gt; com um colega novo, aprendendo os primeiros mistérios do &lt;i&gt;kung fu&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Este novo colega, julguei, se enquadrou facilmente no grupo dos afobados; sempre seu discurso o convidava a dar "exemplos" do golpeamentos, e cada um deles mais e mais próximo do corpo da pessoa com quem estava conversando. Assim é a ansiedade de quem conhece a arte marcial através de romances e obras audio-visuais.&lt;br /&gt;&lt;br /&gt;Em um determinado momento, discutindo os princípios do &lt;i&gt;ving tsun&lt;/i&gt;, este novo colega levantou uma questão sobre a eficácia de um posicionamento defensivo: por mais que o outro esteja posicionado adequadamente, eu posso desarmá-lo sendo bem rápido, não posso?&lt;br /&gt;&lt;br /&gt;A objeção padrão a esse tipo de hipótese é simples: e se o outro for tão rápido quanto você? Há diversos caminhos interessantes de discussão que iniciam com essa resposta.&lt;br /&gt;&lt;br /&gt;Nesse dia, porém, me sentido inspirado para falar sobre a minha experiência pessoal. Isso acontece às vezes durante a aula e eu me dou a liberdade de falar porque, sendo um igual, me parece inspirador para os mais novos ouvir sobre as minhas dificuldades e realizações.&lt;br /&gt;&lt;br /&gt;Elaborando o meu relato, eis o que eu tenho a dizer sobre o assunto.&lt;br /&gt;&lt;br /&gt;É claro o poder de agir em alta velocidade é útil e desejável. Mas a percepção de que este poder é o grande poder, ou mesmo o verdadeiro poder, é enganosa. Em particular, os modos de viver e produzir em nossa sociedade constróem um excesso de valor sobre este poder em particular; além do grande apelo dramático de certos filmes.&lt;br /&gt;&lt;br /&gt;Quando eu comecei a treinar artes marciais logo se tornou evidente uma quantidade enorme de tensão no meu corpo. Esta tensão habitava, porém, um corpo vazio do impulso de agir -- o período de treinamento mais particularmente focalizado em "golpear" parecia quase totalmente inútil.&lt;br /&gt;&lt;br /&gt;Mas, como inevitável, em um determinado momento a tensão encontrou seu caminho e se tornou então evidente a ansiedade por agir que estava contendo. É ainda verdade que passo boa parte do meu tempo resolvendo uma ansiedade por agir. Essa ansiedade não resolvida se resolve em impulsos de ação -- de súbito, uma vontade de ler, de súbito, uma vontade de falar, de súbito, uma vontade de produzir, de súbito, uma vontade de não fazer nada.&lt;br /&gt;&lt;br /&gt;Se você está convencido de que esse modo de ser é razoável, então o poder de agir e completar ações em alta velocidade parecerá o ideal da vida. Afinal, se um determinado surto de ação dura pouco, é preciso fazer muito com esse pouco. Assim, quem vive de ansiedades em ansiedades realiza pouco, porque não se pode fazer muito em pouco tempo.&lt;br /&gt;&lt;br /&gt;Estrategicamente, podemos enxergar nessa pessoa a empresa que se vê presa na teia do &lt;i&gt;time to market&lt;/i&gt;. Essa empresa está sempre se "reajustando" ao "mercado", mudando de rumo de acordo com suas "tendências", se "alinhando" com cliente. A cada momento suas prioridares são reavaliadas e alguma outra coisa se torna prioridade máxima.&lt;br /&gt;&lt;br /&gt;Esta empresa nunca realizará as atividades com prioridade não-máxima, nunca realizará os projetos de médio a longo prazo. Ela está cheia da ansiedade por obter os resultados cuja possibilidade só passou a enxergar hoje. Está sempre correndo atrás de algum prejuízo.&lt;br /&gt;&lt;br /&gt;Ela não compreende que a possibilidade que se realiza hoje está amadurecendo desde a tempo passado. Se ela vê hoje as condições de formação da possibilidade futura, poderá agir para obter os resultados do futuro. O indivíduo que se interessa por uma atividade hoje, se trabalhar com paciência, poderá realizar as grandes coisas que exigem muitos dias de atenção.&lt;br /&gt;&lt;br /&gt;Assim, enquanto é sempre possível resolver as crises e se adequar às mutações através da habilidade da rapidez, é também sempre possível resolver as crises e se adequar às mutações através da habilidade da lentidão. Atuar com lentidão exige -- permite! -- atuar com antecipação. Para atuar com antecipação, é preciso ser lento; para atuar com antecipação, é preciso acompanhar com cuidado as correntes das mutações; não se precipitar.&lt;br /&gt;&lt;br /&gt;Não é fácil atuar com lentidão, o que pode não parecer intuitivo. Quando o indivíduo experimenta exercícios simples, como andar a um passo com metade da velocidade do seu passo normal, ele compreende rapidamente que a ansiedade é uma propriedade fundamental do seu corpo -- não obstante a quantidade que ocorre em um e em outro.&lt;br /&gt;&lt;br /&gt;Mesmo a alta velocidade corporal exige o lento acomodamento da mente à situação; quando a mente é um turbilhão, não é possível agir em alta velocidade sob controle; citando um belo &lt;i&gt;anime&lt;/i&gt;, quando um guerreiro usa suas armas fora de controle, ele pode cortar algo que não deseja cortar, ou mesmo cortar aquilo que ele deve defender.&lt;br /&gt;&lt;br /&gt;Se tornou, então, foco do meu treinamento em artes marciais a habilidade de agir lentamente, com eficiência. Pelas razões expostas acima, agir lentamente com eficiência não é uma contradição. É um objetivo necessário a quem acumula tensão e ansiedade; provavelmente seria diferente para disposições pessoais diferentes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-6226694480484161093?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/6226694480484161093/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=6226694480484161093' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6226694480484161093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6226694480484161093'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/11/habilidade-da-lentidao.html' title='A Habilidade da Lentidão'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-5162515058807634604</id><published>2009-11-13T11:55:00.001-02:00</published><updated>2010-04-24T20:29:36.861-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>As sombras do Ambiente de Programação C++</title><content type='html'>Estou realmente escrevendo sobre este assunto! É claro que, até reunir material suficiente para um livro maneiro, vai demorar muito tempo. Até lá espero encontrar alguma publicação legal que aceite artigos.&lt;br /&gt;&lt;br /&gt;Minha motivação inicial para entender os mistérios do ambiente de programação C++ foi estudar a ABI do C++, que seria necessário implementar no sistema operacional C++.&lt;br /&gt;&lt;br /&gt;Existem outros aspectos interessantes desse ambiente, porém, que são pouco focalizados pelas obras educativas sobre a linguagem.&lt;br /&gt;&lt;br /&gt;Um deles é o relacionamento entre o mundo restrito da norma ISO C e o mundo maior do sistema. C fala a você sobre unidades de tradução e estabelece regras mínimas sobre como múltiplas unidades de tradução podem compor um programa válido. Ao redor da linguagem, porém, existe o problema de processar cada uma dessas unidades e produzir de fato um negócio único equivalente a este programa. Existirão então diversos blocos intermediários, os "objetos compilados", e existirá um componente ligador. A norma C não descreve este ligador, apenas impõe seus requisitos.&lt;br /&gt;&lt;br /&gt;Outro é o modo como os mecanismo de linguagem e do sistema são usados na prática como mecanismos de abstração, e como os projetos de engenharia fazem uso desses mecanismos para lidar com problemas reais de configuração. O ambiente como um todo provê diversas maneiras de abstrair certos trechos de código; desde a seleção de arquivos a compilar, onde um arquivo pode conter a listagem para o sistema A enquanto outro contém a listagem para o sistema B; até a composição de bibliotecas dinâmicas no momento da carga na memória, onde o programa usa a versão A da biblioteca no sistema A, e a versão B da biblioteca no sistema B.&lt;br /&gt;&lt;br /&gt;Para lidar com toda essa parafernália sistêmica ao redor do C são imprescindíveis ferramentas que operam fora da linguagem, dirigindo todas as ferramentas de forma conveniente. O projeto de middleware de televisão digital da TQTVD tem, por exemplo, aproximadamente mil unidades de tradução individuais a processar. Certamente o programador não deve chamar as ferramentas uma vez para cada um desses arquivos, sob pena de tornar o dia de trabalho um desperdício de horas absurdo. Existem portanto ferramentas para apoiar essa tarefa que, apesar de não fazer parte da definição da linguagem ou do compilador, são absolutamente imprescindíveis para se trabalhar com ela.&lt;br /&gt;&lt;br /&gt;Tudo isso implica que a expertise no desenvolvimento de sistemas em C++ envolve diversas outras habilidades e técnicas individuais, fora aquelas envolvendo a expressão de programas em C++. Essas outras habilidades e técnicas se tornam tão mais importantes quanto o projeto pressione o programador para fora da abstração de um sistema para o mundo concreto das diversas máquinas.&lt;br /&gt;&lt;br /&gt;Sob outro ângulo, posso comparar as listas de componentes teórica e prática que compõe o pipeline de transformação de código-fonte. Teoricamente, o pipeline C é: pré-processador, compilador, ligador ou arquivador. Na prática do projeto onde estou envolvido é: configurador de build, ferramenta de build, compilador.&lt;br /&gt;&lt;br /&gt;Uma lição que estou tirando de tudo isso é que os melhores pensamentos sobre a linguagem de programação ideal nunca resultariam em um excelente sistema construído se essa linguagem não for implementada em ferramentas adequadas, que suportem um ciclo de desenvolvimento extremamente conveniente. O esquema de compilação separada do C oferece bons mecanismos de abstração, sem dúvida, mas torna o tempo de compilação uma infinitude de "começa e termina" processos.&lt;br /&gt;&lt;br /&gt;Em contra-partida, opiniões sobre características de linguagem de programação do tipo "viagem na maionese" ou "impossível" parecem refletir o fato de que, até então, ninguém soube produzir uma ferramenta que a implementasse. O mecanismo de "export" do C++ por exemplo foi considerado um fracasso; agora que as técnicas de LTO e serialização de ASTs de programas estão se tornando mais difundidas, talvez com mais cinco ou dez anos "export" seja trivial.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-5162515058807634604?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/5162515058807634604/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=5162515058807634604' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/5162515058807634604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/5162515058807634604'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/11/as-sombras-do-ambiente-de-programacao-c.html' title='As sombras do Ambiente de Programação C++'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-4479319851296401915</id><published>2009-11-12T16:15:00.000-02:00</published><updated>2009-11-12T16:15:50.576-02:00</updated><title type='text'>MIT OpenCourseWare</title><content type='html'>Estou cursando &lt;a href="http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-00Fall-2008/CourseHome/index.htm"&gt;Introdução à Ciência da Computação&lt;/a&gt; no MIT todos os dias de manhã, indo para o trabalho!&lt;br /&gt;&lt;br /&gt;Para quem não sabe, em 2002 o MIT lançou o &lt;a href="http://ocw.mit.edu/"&gt;projeto OpenCourseWare&lt;/a&gt; para publicar material didático dos seus cursos online sob uma licença do &lt;a href="http://www.creativecommons.org/"&gt;Creative Commons&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Alguns cursos do MIT agora têm vídeos das palestras disponíveis como parte do OCW. Dá pra assistir perfeitamente no meu telefone de manhã.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-4479319851296401915?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/4479319851296401915/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=4479319851296401915' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/4479319851296401915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/4479319851296401915'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/11/mit-opencourseware.html' title='MIT OpenCourseWare'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-4055248292609290474</id><published>2009-11-09T10:03:00.000-02:00</published><updated>2009-11-09T10:03:04.821-02:00</updated><title type='text'>Baixar MP3 e bandalhas no trânsito</title><content type='html'>Hoje de manhã presenciei uma peripécia no trânsito que finalmente me iluminou sobre a razão porque eu parei de baixar mp3 na Internet.&lt;br /&gt;&lt;br /&gt;Estávamos seguindo pelo aterro até a Presidente Antônio Carlos e havia um trânsito razoável. Parados do lado daquele monumento de guerra, antes do MAM, vimos um e outro carro passando pela pista interna que tem ali na frente do monumento -- uma pista para um carro que começava um pouco antes e terminava a uns cem metros de onde estávamos.&lt;br /&gt;&lt;br /&gt;Discutimos um pouco a validade daquela peripécia, porque o sujeito não ia ganhar muito tempo com aquilo, e eu pensei que não valia a pena ganhar tão pouco tempo com um truque daqueles.&lt;br /&gt;&lt;br /&gt;Depois, pensei por que não valia a pena; afinal, ganharia-se um tempo zero, certo? Desconsiderando o problema do &lt;a href="http://classemediawayoflife.blogspot.com/2009/09/dica-030-praticar-o-cada-um-por-si-no.html"&gt;primeiro eu da classe média&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Me ocorreu então que tipo de pressa levaria uma pessoa a se desviar da rota normal para tentar economizar tempo. Pensei: espero que esse sujeito esteja economizando um tempo útil, porque de outro modo ele está se aborrecendo à toa. Então me ocorreu um processo de ansiedade que levaria um motorista a procurar rotas "espertas" para chegar mais cedo onde quer que seja.&lt;br /&gt;&lt;br /&gt;Então eu entendi porque eu mesmo nunca faria aquilo: porque um processo de ansiedade tem em geral dois futuros, a satisfação ou a supressão; e satisfazer a uma ansiedade é o mesmo que alimentá-la.&lt;br /&gt;&lt;br /&gt;Esta é a razão porque eu não uso mais programas de baixar mp3, nem tenho um instalado no meu sistema. Quando você tem gosto por música e descobre os navegadores de mp3 surge uma ansiedade -- a ansiedade de ter tudo. O mundo se transforma de um local onde você não pode ouvir tudo que existe, porque precisa transformar recursos em CDs, para um mundo onde você pode ter tudo, em troca de algum tempo de pesquisa e espera. Os baixadores de mp3 são pessoas que se vangloriam por pegar álbuns inteiros, como se baixar músicas individuais fosse indigno e revelasse a condição de ouve-por-modinha ao invés de um apreciador verdadeiro. Os programas passam 24h por dia ligados obtendo as coletâneas mais obscuras encontráveis, entupindo o HD, e o indivíduo faz ALT+TAB frequentemente para observar as barras de progressão de &lt;i&gt;download&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Quando eu percebi essa ansiedade, cortei o hábito.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-4055248292609290474?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/4055248292609290474/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=4055248292609290474' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/4055248292609290474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/4055248292609290474'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/11/baixar-mp3-e-bandalhas-no-transito.html' title='Baixar MP3 e bandalhas no trânsito'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-8150608308716521903</id><published>2009-11-03T19:55:00.002-02:00</published><updated>2010-04-24T20:29:36.862-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Java vs. C#, uma perspectiva estranha</title><content type='html'>Você pode achar o que quiser na disputa entre Java e C#, mas onde na documentação da Microsoft você vai encontrar uma afirmação tão direta, sincera e esclarecedora?&lt;br /&gt;&lt;br /&gt;"Prior to Java 2 Standard Edition, JDK 1.4, the AWT focus subsystem was inadequate."&lt;br /&gt;&lt;br /&gt;http://java.sun.com/javase/6/docs/api/java/awt/doc-files/FocusSpec.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-8150608308716521903?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/8150608308716521903/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=8150608308716521903' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8150608308716521903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8150608308716521903'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/11/java-vs-c-uma-perspectiva-estranha.html' title='Java vs. C#, uma perspectiva estranha'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-4943739368251659661</id><published>2009-10-29T15:13:00.002-02:00</published><updated>2010-04-24T20:29:36.864-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>bug bizarro no RVCT 2.2</title><content type='html'>Descobrimos um bug bizarro no RVCT 2.2 onde a compilação de uma chamada a um operador de conversão do std::auto_ptr gera as seguintes instruções:&lt;br /&gt;&lt;br /&gt;1. push into stack from register&lt;br /&gt;2. unconditionally jump to (1)&lt;br /&gt;&lt;br /&gt;Alguém já viu isso?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-4943739368251659661?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/4943739368251659661/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=4943739368251659661' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/4943739368251659661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/4943739368251659661'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/10/bug-bizarro-no-rvct-22.html' title='bug bizarro no RVCT 2.2'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-8128039411510990390</id><published>2009-10-19T23:02:00.001-02:00</published><updated>2009-10-19T23:02:00.076-02:00</updated><title type='text'>Dell, meu CD arranhou, e agora?</title><content type='html'>Está chegando o segundo teste do atendimento ao cliente da Dell. Não posso mais dizer suporte ao cliente porque o meu contrato de suporte expirou, certo?&lt;br /&gt;&lt;br /&gt;Pois bem, o CD do Windows XP que acompanhava a minha primeira máquina Dell arranhou. E adivinha? O Windows XP naquela máquina não inicia mais.&lt;br /&gt;&lt;br /&gt;O que eu quero é bem simples: uma cópia nova deste CD. Posso até mesmo fazer o download, se eles quiserem economizar a mídia e a entrega. Mas será que a Dell vai se prontificar a substituir esse CD?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-8128039411510990390?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/8128039411510990390/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=8128039411510990390' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8128039411510990390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8128039411510990390'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/10/dell-meu-cd-arranhou-e-agora.html' title='Dell, meu CD arranhou, e agora?'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-7830993040166629851</id><published>2009-10-17T16:36:00.003-03:00</published><updated>2009-10-17T16:38:10.934-03:00</updated><title type='text'>Site pessoal</title><content type='html'>Estou a fim de um site pessoal mais glamouroso. Acabei de abrir um ticket no &lt;a href="http://registro.br/"&gt;registro.br&lt;/a&gt; pelo domínio pedro.lamarao.nom.br.&lt;br /&gt;&lt;br /&gt;Vou reunir ali &lt;a href="http://sites.google.com/site/pedrolamarao/"&gt;meu site&lt;/a&gt; de Google Sites, e este blog, que já mostra ali no canto o &lt;a href="http://twitter.com/pedrolamarao"&gt;meu feed&lt;/a&gt; do Twitter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-7830993040166629851?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/7830993040166629851/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=7830993040166629851' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/7830993040166629851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/7830993040166629851'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/10/site-pessoal.html' title='Site pessoal'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-1679840962436983875</id><published>2009-09-24T11:29:00.001-03:00</published><updated>2009-09-24T11:31:01.648-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SIVUCA'/><title type='text'>Sobre o assim chamado golpe de Honduras</title><content type='html'>Um direitista safado, e grande amigo, me apontou para este artigo que argumenta sobre a falsidade de se considerar golpe de estado o que está acontecendo agora em Honduras.&lt;br /&gt;&lt;br /&gt;O resumo executivo é: a Constituição de Honduras determina a deposição imediata do Presidente caso ele faça esforços para promover a própria reeleição.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.conjur.com.br/2009-set-22/apoio-zelaya-despreza-processo-constitucional-hondurenho-deposicao"&gt;Leia&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-1679840962436983875?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/1679840962436983875/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=1679840962436983875' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1679840962436983875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1679840962436983875'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/09/sobre-o-assim-chamado-golpe-de-honduras.html' title='Sobre o assim chamado golpe de Honduras'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-7120115301703993572</id><published>2009-09-18T17:27:00.002-03:00</published><updated>2010-04-24T20:29:36.864-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>C++ e puramente funcional</title><content type='html'>Usando GCC 4.5, Dehydra e um script maroto, seria possível implementar uma verificação estática de que uma função é puramente funcional?&lt;br /&gt;&lt;br /&gt;__attribute__((user("functionally_pure")) int foo_free_of_side_effects (int x, int y);&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-7120115301703993572?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/7120115301703993572/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=7120115301703993572' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/7120115301703993572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/7120115301703993572'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/09/c-e-puramente-funcional.html' title='C++ e puramente funcional'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-991456882861235300</id><published>2009-09-02T22:44:00.004-03:00</published><updated>2010-04-24T20:29:36.865-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>byte, address e dispositivos</title><content type='html'>Suponha que você tem uma variante de C++0x onde existem apenas os tipos: byte, address e size. byte é uma sequência de oito bits, address é uma posição na memória e size é a distância entre duas posições na memória.&lt;br /&gt;&lt;br /&gt;Com bytes você pode fazer bit shifting e outras operações próprias de sequências de bits; com address você pode navegar pela memória, obtendo sucessores e predecessores; com size você pode navegar pela memória a passos largos.&lt;br /&gt;&lt;br /&gt;Suponha, além disso, que o programa tem à disposição um allocator que obtém pedaços de memória com tamanho fixo, e acesso a dispositivos por uma API razoável.&lt;br /&gt;&lt;br /&gt;Que tipos de programa você poderia escrever?&lt;br /&gt;&lt;br /&gt;Você poderia copiar dados de um dispositivo para outro:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;void copy (device&amp; in, device&amp; out)&lt;br /&gt;{&lt;br /&gt;  const size length = allocator.page_size();&lt;br /&gt;  address buffer = allocator.allocate_page();&lt;br /&gt;&lt;br /&gt;  size n;&lt;br /&gt;  while ((n = in.read(buffer, length)) &gt; 0) out.write(buffer, n);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Você poderia copiar dados, criptografando com XOR:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;void copy_and_encrypt (device&amp; in, device&amp; out, byte key)&lt;br /&gt;{&lt;br /&gt;  const size length = allocator.page_size();&lt;br /&gt;  address buffer = allocator.allocate_page();&lt;br /&gt;&lt;br /&gt;  size n;&lt;br /&gt;  while ((n = in.read(buffer, length)) &gt; 0)&lt;br /&gt;  {&lt;br /&gt;    for (address i = buffer; i != buffer + length; ++i) *i ^= key;&lt;br /&gt;    out.write(buffer, n);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Acredito que você poderia realizar praticamente todo tipo de criptografia apenas com operações binárias.&lt;br /&gt;&lt;br /&gt;De onde um programa obteria a chave? De outro dispositivo de entrada, talvez.&lt;br /&gt;&lt;br /&gt;Meu ponto é que nada disso está relacionado com aritmética em domínios numéricos; mesmo com a existência de size no programa, que é claramente uma "quantidade". Ainda é possível escrever programas interessantes mesmo sem a possibilidade de realizar aritmética com valores do tipo size.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-991456882861235300?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/991456882861235300/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=991456882861235300' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/991456882861235300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/991456882861235300'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/09/byte-address-e-dispositivos.html' title='byte, address e dispositivos'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-7279776522065663243</id><published>2009-08-31T21:21:00.004-03:00</published><updated>2010-04-24T20:29:36.866-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Dualidade memória/dispositivo</title><content type='html'>Ainda pensando sobre linguagem de programação e sistema, e na possibilidade de se projetar uma API de dispositivos apenas com &lt;span style="font-family:courier new;"&gt;byte&lt;/span&gt; e &lt;span style="font-family:courier new;"&gt;address&lt;&gt;&lt;/span&gt;, me ocorreram os seguintes pensamentos sobre a relação entre os dispositivos e a memória.&lt;br /&gt;&lt;br /&gt;A memória é uma sequência onde ocorrem símbolos, na máquina binária contemporânea esses símbolos são bits e a unidade de armazenagem prática aos programas é o &lt;span style="font-family:courier new;"&gt;byte&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Além disso, na máquina de von Neumann, toda a operação do programa ocorre sobre a memória, inclusive operação sobre dispositivos, que ocorrem ao programa na forma de intervalos especialmente posicionados na memória.&lt;br /&gt;&lt;br /&gt;Programas no sistema Unix, por outro lado, vêem dispositivos na forma de arquivos, com o qual trocam dados; o dispositivo é uma origem de dados e um destino de dados. A API fundamental de dispositivos é &lt;span style="font-family:courier new;"&gt;read&lt;/span&gt; e &lt;span style="font-family:courier new;"&gt;write&lt;/span&gt;. A realização básica de um arquivo é o próprio arquivo de dados, ocorrendo em um sistema de arquivamento.&lt;br /&gt;&lt;br /&gt;É claro que o Unix, aplicando sua filosofia de simplicidade, exibe tudo como arquivo, inclusive todos os dispositivos; programas podem trocar dados com qualquer dispositivo representável em &lt;span style="font-family:courier new;"&gt;/dev&lt;/span&gt;. De fato, existe &lt;span style="font-family:courier new;"&gt;/dev/mem&lt;/span&gt; que reflete como um dispositivo a própria memória.&lt;br /&gt;&lt;br /&gt;Por fim, borrando a distinção entre o que o processo de usuário vê e o que o sistema vê, existem os mecanismo de mapeamento em memória, que representam dispositivos (entre outras coisas) como intervalos de memória ao processo.&lt;br /&gt;&lt;br /&gt;É fácil observar que a memória, fisicamente, e o dispositivo, abstratamente, são elementos e conceitos que se substituem e se sobrepõe. A noção de &lt;span style="font-style: italic;"&gt;character device&lt;/span&gt; no Unix parece nascer exatamente daqueles dispositivos cuja natureza é a de um intervalo de átomos, um conceito cuja necessidade surge após a decisão de representar tudo como arquivos.&lt;br /&gt;&lt;br /&gt;A união de memória virtual e o aspecto memória de um dispositivo ocorre no mecanismo de mapeamento em memória; no projeto de uma API de I/O assíncrono, a necessidade de expor páginas da memória de um processo ao &lt;span style="font-style: italic;"&gt;driver&lt;/span&gt; do dispositivo para DMA também ocorre.&lt;br /&gt;&lt;br /&gt;Programas sintonizados à API de arquivos frequentemente desejam comunicar a subprogramas dados em memória, e então a necessidade de um pseudo-dispositivo cuja representação é memória surge.&lt;br /&gt;&lt;br /&gt;Tudo isso implica que o projeto de uma API de dispositivos é o projeto de uma API de memória, e todo projeto de um &lt;span style="font-style: italic;"&gt;abstract data type&lt;/span&gt; dispositivo implica o projeto de um &lt;span style="font-style: italic;"&gt;abstract data type&lt;/span&gt; intervalo-de-memória.&lt;br /&gt;&lt;br /&gt;Que um aspecto ofereça melhor desempenho a um programa é função das necessidades desse programa. Programas que lêem arquivos frequentemente mapeiam este arquivo na memória e o lêem como um intervalo de memória. Programas que computam na memória o &lt;span style="font-style: italic;"&gt;digest&lt;/span&gt; SHA-1 de uma informação frequentemente operam um pseudo-dispositivo onde escrevem blocos fixos de dados iterativamente.&lt;br /&gt;&lt;br /&gt;Fundamentalmente, eis a questão: um dispositivo deve ser convertível para um intervalo-de-memória e vice-versa. O desafio é projetar tal API segundo todos os critérios de boas práticas realisticamente em um sistema.&lt;br /&gt;&lt;br /&gt;Mudando de assunto, eis o projeto 9.1 do &lt;span style="font-style: italic;"&gt;Elements of Programming&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;"Modern computing systems include highly optimized library procedures for copying memory; for example, memmove and memcpy, which use optimization techniques not discussed in this book. Study the procedures provided on your platform, determine the techniques they use (for example, loop unrolling and software pipelining), and design abstract procedures expressing as many of these techniques as possible. What type requirements and preconditions are necessary for each technique? What language extensions would allow a compiler full flexibility to carry out these optimizations?"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-7279776522065663243?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/7279776522065663243/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=7279776522065663243' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/7279776522065663243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/7279776522065663243'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/08/dualidade-memoriadispositivo.html' title='Dualidade memória/dispositivo'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-4788212197291742917</id><published>2009-08-25T21:30:00.002-03:00</published><updated>2010-04-24T20:29:36.867-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Máquina de Turing</title><content type='html'>Acho que atingi uma compreensão de como uma máquina de computação contemporânea cumpre os requisitos restritos da máquina universal de computação.&lt;br /&gt;&lt;br /&gt;A máquina universal de computação é uma máquina que opera sobre símbolos ocorrendo um espaço unidimensional infinito. A máquina transforma seu estado de acordo com o símbolo atual; ela pode, por exemplo, avançar ou retroceder no espaço de símbolos, reescrever o símbolo em uma determinada posição, ou qualquer outra coisa.&lt;br /&gt;&lt;br /&gt;A máquina se torna útil com a especificação do conjunto de símbolos representáveis e do significado de todos esses símbolos. Assim, um símbolo pode significar "avance três posições" e outro símbolo pode significa "substitua o próximo símbolo com o símbolo seguinte a esse, e vice-versa.&lt;br /&gt;&lt;br /&gt;É claro que nenhuma máquina concreta terá acesso a um espaço infinito para símbolos; portanto, podemos falar sobre uma máquina universal restrita com espaço finito para símbolos.&lt;br /&gt;&lt;br /&gt;Uma máquina universal binária é uma máquina cujos símbolos são 0 e 1. Uma tal máquina não pode significar muita coisa com apenas um símbolo, mas nada impede que significados especiais sejam atribuídos a sequências específicas de símbolos.&lt;br /&gt;&lt;br /&gt;Assim, podemos falar sobre símbolos complexos, compostos por uma sequência de símbolos, que na máquina binária será uma sequência de 0s e 1s. A máquina binária possui portanto uma regra implícita: enquanto um símbolo complexo não for compreendido, ela avança para o próximo símbolo.&lt;br /&gt;&lt;br /&gt;Quando um símbolo completo é compreendido, a máquina realiza a transformação especificada para aquele símbolo complexo.&lt;br /&gt;&lt;br /&gt;É claro que, em uma máquina concreta, o número de símbolos complexos especificáveis é finito, já que os próprios símbolos complexos devem ser sequências finitas de símbolos fundamentais, e portanto existe uma combinação finita de tais símbolos complexos.&lt;br /&gt;&lt;br /&gt;Mas um conjunto suficientemente grande pode representar todas as operações possíveis sobre uma memória sequencial de símbolos fundamentais, como: se o valor lógico do próximo símbolo complexo for verdade avance para a posição determinada pelo símbolo complexo seguinte a este, senão pelo símbolo complexo duas posições depois.&lt;br /&gt;&lt;br /&gt;Isso é verdade porque, se podemos computar matemática fundamental, podemos computar qualquer coisa.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-4788212197291742917?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/4788212197291742917/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=4788212197291742917' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/4788212197291742917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/4788212197291742917'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/08/maquina-de-turing.html' title='Máquina de Turing'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-9125880897422327369</id><published>2009-08-21T14:10:00.003-03:00</published><updated>2010-04-24T20:29:36.868-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cxx'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Tipos de dados primitivos 2</title><content type='html'>Em C++, existe uma certa ambiguidade no significado dos tipos primitivos.&lt;br /&gt;&lt;br /&gt;Tome char, por exemplo. char pode ser apenas char, pode ser signed char ou pode ser unsigned char. Mas char deve ser caractere, certo? Qual é o significado de um caractere ser signed ou unsigned? Nenhuma.&lt;br /&gt;&lt;br /&gt;Existe, é claro, uma razão porque é possível especificar unsigned ou signed char; porque char é um valor inteiro de tamanho 1. De certa forma, char é o menor de todos os int, e foi projetado para ser usado como tal. Em uma máquina convencional, char é um inteiro de 8 bits. C99 na prática exige que char ocupe 8 bits.&lt;br /&gt;&lt;br /&gt;Em C original, o ponteiro para char possuía a propriedade adicional de representar qualquer endereço válido de memória. Portanto, uma função que lê dados de um dispositivo qualquer para a memória aceitaria um parâmetro do tipo ponteiro para char significando o endereço de memória de um buffer.&lt;br /&gt;&lt;br /&gt;É claro que isso provoca uma confusão com outro sigficado de ponteiro para char, a string de bytes terminada por NULL, ou NTBS. Por esse motivo, alguns programas e bibliotecas usam ponteiro para unsigned char para representar segmentos opacos de memória, como buffers de I/O.&lt;br /&gt;&lt;br /&gt;Em C99, qualquer ponteiro é conversível para um ponteiro para algum char. Em C++ isso não é permitido. Em ambas as linguagens, qualquer ponteiro é conversível para um ponteiro para void.&lt;br /&gt;&lt;br /&gt;Aritmética de ponteiro não é permitia para um ponteiro para void, infelizmente; programas que desejam atravessar a memória por qualquer razão devem usar ponteiros para char. Isso exige o uso de conversões por reinterpretação, como a notação de cast com parênteses, ou reinterpret_cast.&lt;br /&gt;&lt;br /&gt;Existem aqui diversas necessidades diferentes. Uma delas é endereçar memória opaca, sem interpretação, e endereçá-la completamente. Outra é representar o menor valor inteiro possível na plataforma. Outra é representar um caractere. Outra é representar um segmento de texto.&lt;br /&gt;&lt;br /&gt;Representar um caractere como o menor inteiro da plataforma é, hoje sabemos, uma ingenuidade, e existem diversas representações de caracteres que usam um número variado dessas unidades para caracteres, ou usam um número fixo de duas ou mais dessas unidades.&lt;br /&gt;&lt;br /&gt;Assim, quando ocorre em um programa um caractere literalmente, como &lt;span style="font-style: italic;"&gt;f&lt;/span&gt;, qual é a quantidade de armazenagem que o valor correspondente ocupa na memória? Depende da representação de caracteres usada no sistema alvo -- e naturalmente na unidade de memória da arquitetura alvo.&lt;br /&gt;&lt;br /&gt;Eu não gosto dessa notação de signed e unsigned. Parece ter havido um problema original em que os ints tiveram de ser subitamente diferenciados entre inteiros e inteiros positivos. Não entendo como isso pode ter sido súbito, mas ainda não conheço bem a história da computação para saber como eram as máquinas quando C foi projetada. Me parece apenas que é um sistema de tipos obsoleto. As máquinas conhecem os naturais, ou inteiros positivos, representados em base 2 e conhece os inteiros representados em base 2 com complemento de dois.&lt;br /&gt;&lt;br /&gt;Caracteres são um outro tipo de informação, distinto de números, apesar de logicamente relacionáveis -- a representação de um caractere é um índice em uma tabela.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-9125880897422327369?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/9125880897422327369/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=9125880897422327369' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/9125880897422327369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/9125880897422327369'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/08/tipos-de-dados-primitivos-2.html' title='Tipos de dados primitivos 2'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-1888911903431537837</id><published>2009-08-18T11:06:00.002-03:00</published><updated>2009-08-18T12:03:29.070-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Declarações, nomes e objetos</title><content type='html'>Uma linguagem como C++ é chamada declarativa porque o elemento central de sua sintaxe é a declaração.&lt;br /&gt;&lt;br /&gt;Uma declaração é uma construção sintática que associa um nome a um sujeito -- ou um identificador e um objeto. O caso simples é a declaração de uma variável.&lt;br /&gt;&lt;br /&gt;Creio que um objeto é um ente totalmente abstrato do discurso, ao contrário do que a literatura sugere. Certamente podemos falar sobre o objeto e descrever suas propriedades; mas na máquina concreta, o significado de um objeto transita entre seus três aspectos fundamentais: seu valor, sua armazenagem e sua localização.&lt;br /&gt;&lt;br /&gt;O tipo de um objeto, por princípio, corresponde ao domínio de seus valores. Assim, podemos considerar os dois tipos primitivos fundamentais que sugeri anteriormente, byte e address&lt;t&gt;. byte é um pseudo-tipo para "o que quer que seja, armazenável na memória". address&lt;t&gt; é o tipo do valor "localização na memória de um valor do tipo T". address&lt;byte&gt; é o tipo do valor "localização na memória do que quer que seja".&lt;br /&gt;&lt;br /&gt;Em C++, a função de "o que quer que seja" é cumprida por char; char é a unidade de memória na máquina abstrata C++. A função de "localização na memória do que quer que seja" é cumprida em parte por void*, para o qual podemos converter qualquer T*, e em parte por char*, que garantidamente pode endereçar qualquer localização válida na memória.&lt;br /&gt;&lt;br /&gt;Valores do tipo byte são apenas copiáveis; é possível, no mínimo, reproduzir o padrão de bits de uma armazenagem para a outra.&lt;br /&gt;Valores do tipo address&lt;t&gt; são copiáveis; além disso, o domínio de address&lt;t&gt; é equivalente ao domínio dos naturais, e suporta a mesma aritmética; por fim, existe a operação de-referência, que transforma um valor address&lt;t&gt; em um valor T.&lt;br /&gt;&lt;br /&gt;Com esses dois tipos podemos fazer muito pouco, mas podemos fazer algo; é possível escrever um programa capaz de copiar dados de um dispositivo para o outro apenas com byte e address&lt;t&gt;. Seria também possível escrever programas capazes de rearranjos e outras operações similares.&lt;br /&gt;&lt;br /&gt;Esses programas não poderiam ser muito sofisticados porque os únicos julgamentos possíveis seriam sobre localizações de objetos, e não seus valores. Seria possível, por exemplo, escrever um programa que inverte uma sequência de bytes, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-1888911903431537837?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/1888911903431537837/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=1888911903431537837' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1888911903431537837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1888911903431537837'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/08/declaracoes-nomes-e-objetos.html' title='Declarações, nomes e objetos'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-6260156903107536611</id><published>2009-08-17T14:12:00.003-03:00</published><updated>2009-08-17T14:44:29.531-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Tipos de dados primitivos</title><content type='html'>Após uma longa considerção sobre o assunto, e bastante tempo livre durante as férias, cheguei a uma opinião sobre que conjunto de tipos de dados primitivos eu gostaria de ver em Pedro C++.&lt;br /&gt;&lt;br /&gt;A idéia de que há signed e unsigned como qualificadores distintos do tipo de dados não me parece muito coerente; um signed integer e um unsigned integer são valores em domínios completamente distintos. De fato, um unsigned integer é um natural, e foi essa intuição que me levou eventualmente a compilar a seguinte lista:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;byte&lt;/li&gt;&lt;li&gt;address&lt;/li&gt;&lt;li&gt;natural&lt;/li&gt;&lt;li&gt;integer&lt;/li&gt;&lt;li&gt;rational&lt;/li&gt;&lt;li&gt;real&lt;/li&gt;&lt;li&gt;complex&lt;/li&gt;&lt;/ul&gt;Com os tipos primitivos byte a address seria possível escrever um sistema capaz de transportar dados entre dispositivos. Um tal sistema, ou sub-sistema, não tem interesse na representação de um dado; isso percebe-se claramente nas APIs de I/O do Unix, cujo tipo de dado é void*. Este tipo, em Pedro C++, seria um address&lt;byte&gt;.&lt;br /&gt;&lt;br /&gt;Para a computação matemática pura temos a seleção completa de domínios algébricos. natural, integer e real são verdadeiramente primitivos, enquanto rational e complex são derivados destes. Em uma máquina convencional, natural é representado diretamente em base 2, integer é representado em base 2 por complemento de dois, e real é representado na forma dada em IEEE 754. Uma linguagem rica permitira que esses tipos sejam genéricos no tamanho; natural&lt;16&gt; é um natural ocupando dois bytes, integer&lt;64&gt; é um inteiro ocupando 8 bytes.&lt;br /&gt;&lt;br /&gt;Deve ser possível, com base em natural, implementar qualquer domínio homomórfico com os naturais, como por exemplo caracteres em um mapa de caracteres.&lt;br /&gt;&lt;br /&gt;É claro que nada disso é remotamente suficiente para uma linguagem na prática; é preciso ainda falar sobre muitas coisas muito simples, como a representação e o tipo de valores representados literalmente no programa etc.&lt;br /&gt;&lt;br /&gt;NOTA: não tenho certeza se "homomórfico" foi a palavra certa ali em cima.&lt;br /&gt;&lt;/byte&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-6260156903107536611?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/6260156903107536611/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=6260156903107536611' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6260156903107536611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6260156903107536611'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/08/tipos-de-dados-primitivos.html' title='Tipos de dados primitivos'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-4101376501650419301</id><published>2009-08-11T10:58:00.003-03:00</published><updated>2009-08-11T11:01:09.053-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'></title><content type='html'>Por que eu desejo escrever explicitamente sobre o ambiente de programação C++?&lt;br /&gt;Por que existem documentos com frases assim:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;To compile your programs, link with the C++CSP2 library. On GCC this can be achieved by using the "-lcppcsp2" option on the command-line.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Se eu tentar compilar o programa de exemplo deste documento seguindo essas instruções à risca ocorerrá o seguinte:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;/usr/bin/ld: cannot find -lcppcsp2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;collect2: ld returned 1 exit status&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Por quê? Por que você não pode ingenuamente dizer quais bibliotecas você quer; o ambiente de ligação de programas com bibliotecas envolve a localização da biblioteca. Onde ela está?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-4101376501650419301?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/4101376501650419301/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=4101376501650419301' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/4101376501650419301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/4101376501650419301'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/08/por-que-eu-desejo-escrever.html' title=''/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-2232101557362215681</id><published>2009-08-10T15:48:00.003-03:00</published><updated>2009-08-10T15:53:15.118-03:00</updated><title type='text'>Concordar Dói</title><content type='html'>Estou lendo agora artigos sobre certas construções em máquinas programáveis chamadas "corotinas". O artigo que eu estou terminando de ler nesse exato momento insinua, cheira, pinta, sugere e diz explicitamente que "corotinas" são muito melhores que "subrotinas" por infinitas razões.&lt;br /&gt;&lt;br /&gt;Compreender o que é "corotina" para esse autor me obriga a compreender como "corotina" é melhor que "subrotina"; talvez depois de compreender como isso é verdade para essa pessoa, eu saberia destilar meu próprio conhecimento.&lt;br /&gt;&lt;br /&gt;É intrigante como esse concordar é revoltante. A leitura do texto é difícil por essa razão; eu não quero concordar com julgamentos sobre o valor do que eu estou aprendendo agora.&lt;br /&gt;&lt;br /&gt;Porém, acho interessante como a idéia de concordar com uma idéia temporariamente, a título de argumentação, é tão difícil. A mente rejeita este estado de acordo, mesmo que breve, como se realizá-lo por um breve momento fosse já uma desestruturação da ordem estabelecida.&lt;br /&gt;&lt;br /&gt;E isso digo eu, que não estou particularmente interessado em defender "subrotinas". Como é seria a experiência de aprendizado de uma pessoa pessoalmente determinada a gostar de "subrotinas"? Será que esse aprendizado é possível?&lt;br /&gt;&lt;br /&gt;Creio que há aqui um defeito no texto, se estiver nele codificada uma intenção de educar; o texto me rejeita, tanto quanto eu o rejeito.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-2232101557362215681?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/2232101557362215681/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=2232101557362215681' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2232101557362215681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2232101557362215681'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/08/concordar-doi.html' title='Concordar Dói'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-2140712304034009268</id><published>2009-08-08T13:55:00.003-03:00</published><updated>2009-08-08T13:59:22.892-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Novo projeto: monografia sobre o ambiente de programação C++</title><content type='html'>Como algumas pessoas sabem, um dos meus objetivos de mais longo prazo é projetar um sistema operacional em C++ e aplicar nesse projeto os métodos da orientação ao objetos, da programação genérica e da programação funcional.&lt;br /&gt;&lt;br /&gt;Seria, é claro, ingênuo simplesmente acreditar que essa atividade é como programar uma variante do Unix convencional, meramente usando o compilador C++. A linguagem impõe requisitos muito mais interessantes sobre a ABI do sistema que C, uma linguagem simplória nesse sentido.&lt;br /&gt;&lt;br /&gt;Assim sendo, comecei a estudar a questão da ABI do sistema e como C++ lida com ela, bem como o suporte ao mecanismo central da programação genérica em C++, os templates.&lt;br /&gt;&lt;br /&gt;Tudo isso me sugeriu este novo projeto: escrever uma monografia sobre o ambiente completo de programação em C++, evidenciando detalhes ocultos ao programador, como a atuação do linker, do assembler, do compilador, do loader e mesmo de drivers de compilação como o make.&lt;br /&gt;&lt;br /&gt;Quem sabe esse não será meu primeiro livro publicado?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-2140712304034009268?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/2140712304034009268/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=2140712304034009268' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2140712304034009268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2140712304034009268'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/08/novo-projeto-monografia-sobre-o.html' title='Novo projeto: monografia sobre o ambiente de programação C++'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-2335136931165805633</id><published>2009-08-06T16:18:00.002-03:00</published><updated>2009-08-06T16:19:03.610-03:00</updated><title type='text'>Comentário do dia</title><content type='html'>-- Você não sabe como é bom. É bom demais. Nego me paga pra ler um livro. Sabe como é?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-2335136931165805633?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/2335136931165805633/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=2335136931165805633' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2335136931165805633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2335136931165805633'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/08/comentario-do-dia.html' title='Comentário do dia'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-8506715997943287898</id><published>2009-08-01T00:47:00.001-03:00</published><updated>2009-08-01T00:47:48.224-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Sigyn: componentes genéricos para networking</title><content type='html'>Gostaria de anunciar o lançamento da biblioteca Sigyn.&lt;br /&gt;&lt;br /&gt;A Sigyn contém diversos componentes genéricos para o desenvolvimento&lt;br /&gt;de servidores de rede concorrentes. Ela também contém exemplos para&lt;br /&gt;protocolos básicos como chargen e discard.&lt;br /&gt;&lt;br /&gt;O código-fonte da biblioreca está disponível neste repositório&lt;br /&gt;Subversion:&lt;br /&gt;&lt;br /&gt;  http://ccppbrasil.googlecode.com/svn/users/pedro.lamarao/sigyn&lt;br /&gt;&lt;br /&gt;Documentação sobre a biblioteca está disponível aqui:&lt;br /&gt;&lt;br /&gt;  http://code.google.com/p/ccppbrasil/wiki/Sigyn&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-8506715997943287898?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/8506715997943287898/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=8506715997943287898' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8506715997943287898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8506715997943287898'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/08/sigyn-componentes-genericos-para.html' title='Sigyn: componentes genéricos para networking'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-8396200423735890975</id><published>2009-07-28T13:01:00.002-03:00</published><updated>2009-07-28T13:52:05.132-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Pesquisando Sistemas Operacionais</title><content type='html'>O iniciante em qualquer nova área de conhecimento sofre muito, na minha experiência, com as exigências transversais ao puro conhecimento que se impõe a ele.&lt;br /&gt;&lt;br /&gt;O programador iniciante, por exemplo, sofre com a ferramenta de compilação, com o ambiente de compilação, com as peculiaridades do linker e do loader no sistema que ele está usando.&lt;br /&gt;&lt;br /&gt;Da mesma forma, quem deseja iniciar uma pesquisa em sistemas operacionais deve lidar com problemas transversais aos algortimos de escalonamento e gerência de memória, como a singela atividade de bootar o kernel.&lt;br /&gt;&lt;br /&gt;Reencontrei hoje uma ferramenta que me auxiliou muito nas minhas primeiras tentativas: o GRUB. Essa ferramenta não só facilita o processo de boot, resolvendo os problemas iniciais, como oferece ao kernel um protocolo de início muito similar ao protocolo de início da própria linguagem de programação, com uma função main.&lt;br /&gt;&lt;br /&gt;O projeto GRUB vai além e oferece código-fonte em assembler e C para um kernel capaz de imprimir "Hello World!" de modo que qualquer programador minimamente determinado poderá iniciar seus estudos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-8396200423735890975?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/8396200423735890975/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=8396200423735890975' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8396200423735890975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8396200423735890975'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/07/pesquisando-sistemas-operacionais.html' title='Pesquisando Sistemas Operacionais'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-7232555790440326076</id><published>2009-07-03T18:00:00.004-03:00</published><updated>2009-07-03T18:03:45.168-03:00</updated><title type='text'>Viagem a São Paulo</title><content type='html'>Estarei em São Paulo segunda, terça e quarta-feira da semana que vem.&lt;br /&gt;Se alguém quiser aproveitar, estarei disposto a passear e pegar alguma balada. ;-)&lt;br /&gt;&lt;br /&gt;Ficarei hospedado no Estanplaza Berrini.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-7232555790440326076?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/7232555790440326076/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=7232555790440326076' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/7232555790440326076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/7232555790440326076'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/07/viagem-sao-paulo_03.html' title='Viagem a São Paulo'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-5814721058673503902</id><published>2009-07-03T10:40:00.001-03:00</published><updated>2009-07-03T10:44:17.529-03:00</updated><title type='text'>Passei de nível!</title><content type='html'>Agora sou um orgulhoso praticante do nível Luk Dim Boon Kwan no &lt;a href="http://www.tangsonvingtsun.com.br/"&gt;Instituto Tang Son Ving Tsun&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-5814721058673503902?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/5814721058673503902/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=5814721058673503902' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/5814721058673503902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/5814721058673503902'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/07/passei-de-nivel.html' title='Passei de nível!'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-3637975345595697508</id><published>2009-05-14T01:24:00.001-03:00</published><updated>2009-05-14T01:25:41.761-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='anime'/><title type='text'>Terra e</title><content type='html'>Acabei de terminar de ver Terra e. O nome significa algo como "em direção à Terra". Foi um anime... esplêndido.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-3637975345595697508?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/3637975345595697508/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=3637975345595697508' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/3637975345595697508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/3637975345595697508'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/05/terra-e.html' title='Terra e'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-3749889204593997437</id><published>2009-04-24T16:36:00.001-03:00</published><updated>2009-04-24T16:36:43.287-03:00</updated><title type='text'>Defesa da Monografia...</title><content type='html'>...dez!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-3749889204593997437?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/3749889204593997437/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=3749889204593997437' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/3749889204593997437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/3749889204593997437'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/04/defesa-da-monografia_24.html' title='Defesa da Monografia...'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-6214108146634423922</id><published>2009-04-24T13:06:00.002-03:00</published><updated>2009-04-24T13:06:52.700-03:00</updated><title type='text'>Defesa da Monografia</title><content type='html'>...às 14h30. Logo depois de comer. A ansiedade está misturada com a comida. Estou enjoado. o.0&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-6214108146634423922?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/6214108146634423922/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=6214108146634423922' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6214108146634423922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6214108146634423922'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/04/defesa-da-monografia.html' title='Defesa da Monografia'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-8298249097521493329</id><published>2009-04-16T10:58:00.003-03:00</published><updated>2009-04-16T11:00:35.564-03:00</updated><title type='text'>Elogio ao Rythmbox</title><content type='html'>O Rythmbox é um "media player" para o GNOME com suporte ao protocolo DAAP.&lt;br /&gt;&lt;br /&gt;Através do DAAP, o Rythmbox encontra automaticamente todos os colegas de trabalho na mesma rede que você, pra que ambos compartilhem suas coleções de música entre si.&lt;br /&gt;&lt;br /&gt;É uma maravilha que não demanda esforço.&lt;br /&gt;&lt;br /&gt;Aqui na rede do trabalho você encontraria os seguintes compartilhamentos:&lt;br /&gt;&lt;br /&gt; - all your mp3 are belong to us&lt;br /&gt; - E = m.c^2&lt;br /&gt; - Lay down your souls to the gods Rock and Roll&lt;br /&gt; - Músicas do FULANO&lt;br /&gt; - Radiola do seu zé&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-8298249097521493329?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/8298249097521493329/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=8298249097521493329' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8298249097521493329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8298249097521493329'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/04/elogio-ao-rythmbox.html' title='Elogio ao Rythmbox'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-15776012529605896</id><published>2009-04-02T18:18:00.002-03:00</published><updated>2009-04-02T18:27:03.946-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='filosofia'/><title type='text'>Problemas de Linguagem</title><content type='html'>Eu sou um esotérico, certo. Um ateísta, antes de ateísta um agnóstico, e um esotérico por prazer.&lt;br /&gt;&lt;br /&gt;Não obstante, eu sou uma pessoa inteligente.&lt;br /&gt;&lt;br /&gt;Por ser inteligente, não consigo suportar certas idéias, como por exemplo a idéia de que a descoberta da anti-matéria é prova irrefutável da existẽncia do mundo espiritual. [1]&lt;br /&gt;&lt;br /&gt;Recentemente alguém me alertou para a relevância da obra de Wittgenstein. Achei esta pérola na Wikipedia, na página dedicada a ele.&lt;br /&gt;&lt;br /&gt;"In this regard, one can see affinities between Wittgenstein and Kant. In the Critique of Pure Reason, Kant argues that when concepts grounded in experience are applied outside of the range of possible experience, the result is contradictions and confusion. Thus the second part of the Critique consists of refutations, typically by reductio ad absurdum, of logical proofs of the existence of God and the existence of souls, and attacks on strong notions of infinity and necessity. In this way, Wittgenstein's objections to applying words outside the contexts in which they have an established meaning mirror Kant's objections to the non-empirical use of empirical reason."&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[1] Sua Divina Graça A. C. Bhaktivedanta Swami Prabhupada, "Fácil Viagem a Outros Planetas", Editora THE BHAKTIVEDANTA BOOK TRUST INTERNATIONAL, 1998&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-15776012529605896?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/15776012529605896/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=15776012529605896' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/15776012529605896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/15776012529605896'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/04/problemas-de-linguagem.html' title='Problemas de Linguagem'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-7053380320848826878</id><published>2009-04-01T20:08:00.002-03:00</published><updated>2009-04-01T23:22:33.316-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='filosofia'/><title type='text'>Mais sobre a Vontade</title><content type='html'>Sendo um Thelemita, ou um Telemita se você preferir, é natural que o problema de "fazer a própria vontade" seja constantemente trazido de volta à atenção.&lt;br /&gt;&lt;br /&gt;Um dos aspectos mais intrigantes sobre esse problema é o de se observar que, dado um conceito do que é a Vontade de um ser humano, todos sempre fazem a própria vontade, a todo momento, invariavelmente.&lt;br /&gt;&lt;br /&gt;Isto é assim se você entende por Vontade justamente aquele aspecto do ser humano que o mobiliza, e se você entende a mobilidade de um ser humano é sempre baseada na mobilidade do seu corpo, isto é, tudo o que um ser humano faz é, no fim das contas, algo que seu corpo faz.&lt;br /&gt;&lt;br /&gt;Nós sabemos que o corpo humano é movido através de uma intrigante interação entre ossos, fibras musculares e neurônios. O corpo se move porque o cérebro comunica aos neurônios que comuniquem às fibras musculares que se contraiam ou relaxem, de tal modo que os ossos são puxados uns para perto dos outros ou largados à mercê da gravidade, o que por fim tem o impressionante efeito final de fazer o corpo inteiro, ou parte dele, se mover.&lt;br /&gt;&lt;br /&gt;Assim sendo, qual é o sentido em dizer que uma pessoa não está fazendo sua própria vontade, ou que não está fazendo aquilo que ela quer? Nenhum.&lt;br /&gt;&lt;br /&gt;Porém, é indiscutível que praticamente todas as pessoas tem a experiência desagradável de que não estão fazendo algo porque querem. Uma das razões porque isso é assim é porque a pessoa em questão se percebe enredada por algum poder que a coage de alguma maneira.&lt;br /&gt;&lt;br /&gt;Acredito que um dos motivos porque o crime de violência física é tido como abominável, em comparação com crimes chamados "colarinho branco" que, não obstante, tem um impacto negativo em um número bem maior de pessoas.&lt;br /&gt;&lt;br /&gt;Crimes de violência física atuam diretamente sobre a liberdade do corpo de um ser humano; quando eu, que sou forte, agarro o braço de uma outra pessoa, que é fraca, esta outra pessoa se vẽ privada da liberdade de ir para longe de mim.&lt;br /&gt;&lt;br /&gt;Agora, quando uma operadora de telefonia inflige a um indivíduo cobranças indevidas mês após mês, transtornando essa pessoa horrores com a necessidade de falar horas a fio com um burocrata, esse mal se refletirá em uma multa. Entendo que isto é assim em parte porque, fora todas as outras considerações relevantes, há pouca violação na liberdade dos corpos aqui; o indivíduo continua sempre com a opção de se afastar, de romper o relacionamento.&lt;br /&gt;&lt;br /&gt;Existem outros aspectos interessantes desse problema, como a pedagogia. Muito se fala superficialmente sobre convencer o aluno a entender os assuntos, ao invés de decorar as informações, mas pouco se fala sobre o uso do verbo convencer nessa história. Existe algo de seduzir no ato de educar. Alguém que ainda não compreende não tem como saber o valor daquilo que irá um dia compreender, se cumprir as regras de um processo pedagógico. Essa pessoa atravessará esse processo porque motivo? Uma das maneiras de fazer isso é através do medo, outra através da sedução. Haverá quem diga que uma coisa é instância particular da outra.&lt;br /&gt;&lt;br /&gt;Em todos esses casos há algo de privação da liberdade do outro envolvido, o que nos leva de volta a pensar, nesses casos, como é possível que uma pessoa faça sempre sua vontade. (Fazer às vezes sua vontade não faz sentido como regra fundamental de uma ética.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-7053380320848826878?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/7053380320848826878/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=7053380320848826878' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/7053380320848826878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/7053380320848826878'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/04/mais-sobre-vontade.html' title='Mais sobre a Vontade'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-1082279253215522105</id><published>2009-02-28T16:38:00.003-03:00</published><updated>2009-02-28T17:04:06.054-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>POSIX/C++</title><content type='html'>No final de 2007, o IEEE aprovou a criação do projeto "POSIX-C++ Binding", com o propósito de aumentar a portabilidade de programas C++ que façam uso das interfaces de sistema especificadas em POSIX.&lt;br /&gt;&lt;br /&gt;Este grupo de trabalho foi "fretado" inicialmente para entregar seu produto em Dezembro de 2011.&lt;br /&gt;&lt;br /&gt;Discussões ocorrem em uma &lt;a href="https://www.redhat.com/mailman/listinfo/posix-c++-wg"&gt;lista de discussão&lt;/a&gt; pública.&lt;br /&gt;&lt;br /&gt;Os trabalhos iniciais envolveram a adequação da nova biblioteca de &lt;span style="font-style: italic;"&gt;threads&lt;/span&gt;, componente da biblioteca padrão do C++0x, e especificar sua implementação sobre as interfaces de sistema especificadas em POSIX.&lt;br /&gt;&lt;br /&gt;Dois outros projetos estão atualmente em discussão: &lt;span style="font-style: italic;"&gt;bindings&lt;/span&gt; C++ para as interfaces de sockets, e &lt;span style="font-style:italic;"&gt;bindings&lt;/span&gt; C++ para as interfaces do ligador dinâmico.&lt;br /&gt;&lt;br /&gt;Eu estou trabalhando no projeto de bindings C++ para as interfaces de sockets; mais informações podem ser obtidas &lt;a href="http://code.google.com/p/ccppbrasil/wiki/POSIX_CXX"&gt;aqui&lt;/a&gt;. Meu trabalho está acontecendo sob a bandeira do &lt;a href="http://www.ccppbrasil.org/"&gt;Grupo de Usuários de C e C++ do Brasil&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Na próxima reunião do grupo de trabalho, dia 07 de Março, esses dois projetos serão tema da pauta de discussão. Infelizmente eu ainda não obtive um visto para participar dessa reunião; com sorte isso será possível.&lt;br /&gt;&lt;br /&gt;O objetivo da &lt;span style="font-style:italic;"&gt;binding&lt;/span&gt; para as interfaces de socket é basicamente produzir uma classe que aplique as técnicas de gerência de recurso em C++ no projeto de uma classe que represente um socket. Outros objetivos são melhorar a utilização das estruturas de dados representativas de endereços de socket, o uso de atributos de socket e das interfaces de tradução de nomes.&lt;br /&gt;&lt;br /&gt;Ao longo deste processo se tornou claro que seria útil acrescentar às estruturas de dados simples especificadas em POSIX elementos como construtores e sobrecargas de operadores, para tornar mais simples e mais eficiente a inicialização de objetos destes tipos e sua operação.&lt;br /&gt;&lt;br /&gt;Estou prestes a publicar agora meus primeiros trabalhos nesse sentido, na forma de uma modificação da GNU libc, usável com o GCC 4.4. Informações estão na &lt;a href="http://code.google.com/p/ccppbrasil/wiki/POSIX_CXX"&gt;mesma página&lt;/a&gt; mencionada acima.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-1082279253215522105?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/1082279253215522105/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=1082279253215522105' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1082279253215522105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1082279253215522105'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/02/posixc.html' title='POSIX/C++'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-2896205552378534527</id><published>2009-01-28T22:09:00.001-02:00</published><updated>2009-01-28T22:10:51.869-02:00</updated><title type='text'>Do Largo do Machado até em casa...</title><content type='html'>...dá quarenta minutos a pé. com esfihas no bucho.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-2896205552378534527?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/2896205552378534527/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=2896205552378534527' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2896205552378534527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2896205552378534527'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/01/do-largo-do-machado-ate-em-casa.html' title='Do Largo do Machado até em casa...'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-3413961936422982252</id><published>2009-01-26T23:39:00.002-02:00</published><updated>2009-01-26T23:42:42.823-02:00</updated><title type='text'>Notícias</title><content type='html'>Pois!&lt;br /&gt;&lt;br /&gt;Passei o mês quase todo doente. :-(&lt;br /&gt;Estou cheio dep orlbmes...&lt;br /&gt;Há quinze dias uma inflamação na garganta está enchendo o meu saco.&lt;br /&gt;&lt;br /&gt;Só hoje eu ganhei ânimo suficiente pra fazer atividades físicas.&lt;br /&gt;Um colega de treino está se preparando para participar de uma competição full contact.&lt;br /&gt;Estamos treinando pra ajudá-lo.&lt;br /&gt;Emocionante. :-)&lt;br /&gt;&lt;br /&gt;Comprei, finalmente, um teclado!&lt;br /&gt;É um sintetizador Yamaha S03.&lt;br /&gt;Usei pouco, até agora.&lt;br /&gt;A turma da empresa marcou um ensaio quinta...&lt;br /&gt;&lt;br /&gt;Finalmente escolhemos um nome legal para a escola de kung fu e estamos preparando cartazes para propaganda.&lt;br /&gt;Com a escolha do nome, registrei um domínio, e em breve colocaremos um website sobre a escola.&lt;br /&gt;&lt;br /&gt;E o meu aniversário está chegando!&lt;br /&gt;Provavelmente não estarei bem o suficiente pra beber... &gt;|&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-3413961936422982252?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/3413961936422982252/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=3413961936422982252' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/3413961936422982252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/3413961936422982252'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2009/01/noticias.html' title='Notícias'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-4218594792015187195</id><published>2008-12-02T10:44:00.003-02:00</published><updated>2008-12-02T10:50:22.287-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='filosofia'/><title type='text'>Eu Não Sabia que Podia</title><content type='html'>Fernanda recentemente me apresentou aos vídeos do &lt;a href="http://patcondell.net/"&gt;Pat Condell&lt;/a&gt; no YouTube. Preciso dizer que são vídeos verdadeiramente inspiradores.&lt;br /&gt;&lt;br /&gt;Resolvi começar a ler o livro do Richard Dawkins, que tia Elizabeth me deu de presente, pra aproveitar o momentum. A frase tópico deste texto foi tirada do Prefácio do "Deus, um Delírio".&lt;br /&gt;&lt;br /&gt;Eu acho esta frase muito interessante, realmente; a sensação ou experiência que ela denota era algo que víamos com frequencia no trabalho da Loja Nova Ísis e que, às vezes, ocorre conosco treinando artes marciais.&lt;br /&gt;&lt;br /&gt;É impressionante como, de alguma forma, nosso corpo, enquanto máquina biológica, é capaz de fazer coisas de que nós não somos conscientes. Esse fato mecânico e biológico é verdade seja para as mínimas coisas, como por exemplo a capacidade de sustentar pressão usando os braços e pernas, seja para coisas em um nível mais alto de abstração, como fazer sua opinião e gosto pessoal coexistir com outras pessoas.&lt;br /&gt;&lt;br /&gt;Sendo um libertário e acreditando que todas as pessoas tem o direito de fazer de sua vida aquilo que lhes der na telha, creio que "eu não sabia que podia" é o verdadeiro inferno.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-4218594792015187195?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/4218594792015187195/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=4218594792015187195' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/4218594792015187195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/4218594792015187195'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/12/eu-no-sabia-que-podia.html' title='Eu Não Sabia que Podia'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-2790060109873405307</id><published>2008-11-14T00:21:00.000-02:00</published><updated>2008-11-14T00:22:03.823-02:00</updated><title type='text'>Risco</title><content type='html'>Cross-post: esse papo de pessoas que não oferecem risco soa familiar...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-2790060109873405307?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/2790060109873405307/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=2790060109873405307' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2790060109873405307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2790060109873405307'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/11/risco.html' title='Risco'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-2814144864548346793</id><published>2008-11-12T00:58:00.002-02:00</published><updated>2008-11-12T01:19:43.668-02:00</updated><title type='text'>Atividades</title><content type='html'>Acho que há quem se atualize sobre a minha vida por aqui, não?&lt;br /&gt;&lt;br /&gt;Este fim de semana estive pela sexta vez esse ano em São Paulo, como parte da organização do &lt;a href="http://www.temporealeventos.com.br/?area=118"&gt;Seminário sobre C e C++ em Sistemas Embarcados&lt;/a&gt;. Está sendo uma atividade muito frutífera contribuir para o crescimento desta comunidade; ver todas as 340 pessoas naquele auditório foi recompensador.&lt;br /&gt;&lt;br /&gt;Agora estamos discutindo e trabalhando para a realização de uma Conferência em Fevereiro; creio que a qualidade deste evento será a coroa do trabalho de um ano.&lt;br /&gt;&lt;br /&gt;Enquanto essas coisas acontecem, estou com mais de cinquenta páginas de monografia de projeto final escritas esperando Resumo e Conclusão. A pesquisa que motivou este texto, sobre a POSIX/C++ Network Library e quem sabe uma POSIX/C++ File Library, está em andamento com bons resultados. Em breve publicarei um novo paper na lista de discussão do &lt;span style="font-style:italic;"&gt;working group&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Por sinal, este trabalho precisa de voluntários, e eu ainda não sei como motivar a comunidade a contribuir. Nem mesmo eu sou arrogante ao ponto de dizer "trabalhem para mim" mas a única coisa que consigo pensar é justamente aquilo sobre o qual já estou pensando...&lt;br /&gt;&lt;br /&gt;Gostaria de dizer que estou prestes a me formar mas é possível que eu entre pelo cano. Estou a tanto tempo desligado da universidade que é perfeitamente possível que eu tenha sido convocado para fazer o ENADE... Sabe o que acontece quando você não faz o ENADE? ¬¬&lt;br /&gt;&lt;br /&gt;Mas vou considerar para mim mesmo que a defesa da minha monografia será minha formatura, e então vou desbloquear minha lista de promessas. A primeira a cumprir será começar um curso de dança de salão; forró e gafieira.&lt;br /&gt;&lt;br /&gt;Depois de nove anos de artes marciais, creio que será possível aprender a dançar.&lt;br /&gt;&lt;br /&gt;Estou pensando ainda se vou mesmo fazer aulas de direção. Não me interesso por carros, e nem mesmo tenho um. Prefiro que as mulheres dirijam pra mim.&lt;br /&gt;&lt;br /&gt;Aliás, estou em contagem regressiva para sair para o meu próprio apê! Minha prima Karen me fez uma excelente proposta: ficar no apê dela quando ela sair de lá. Fica em Copacabana; o contrato dela termina em Maio. Eu já estou sabendo os valores, creio que seja possível! Porém, eu teria que me adiantar cinco meses ao cronograma familiar.&lt;br /&gt;&lt;br /&gt;Estou querendo ir à reunião do POSIX/C++ em Nova Iorque em Março, o que fode com quaisquer planos de torrar dinheiro. Não tenho certeza se será o melhor momento ou não, talvez nem seja particularmente útil ir defender minha proposta pessoalmente, já que há pouca controvérsia; eu gostaria de ir por mim mesmo. Que onda, rapaz!&lt;br /&gt;&lt;br /&gt;Por fim, você precisa visitar o &lt;a href="http://www.livemocha.com/"&gt;Livemocha&lt;/a&gt; hoje mesmo! Adivinha em que curso eu me matriculei? その通り　です！&lt;br /&gt;&lt;br /&gt;É isso. 待った　ね！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-2814144864548346793?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/2814144864548346793/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=2814144864548346793' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2814144864548346793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2814144864548346793'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/11/atividades.html' title='Atividades'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-6417960720645465238</id><published>2008-10-11T22:24:00.002-03:00</published><updated>2008-10-11T22:26:01.222-03:00</updated><title type='text'>Furei!</title><content type='html'>Finalmente!&lt;br /&gt;Furei dois de uma só vez.&lt;br /&gt;&lt;br /&gt;A menina que fez o piercing pra mim, a Gaby, fez um trabalho maneiro.&lt;br /&gt;As argolinhas são legais e eu achei a distância entre elas boa.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-6417960720645465238?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/6417960720645465238/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=6417960720645465238' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6417960720645465238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6417960720645465238'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/10/furei.html' title='Furei!'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-1989609824409717027</id><published>2008-10-10T00:18:00.002-03:00</published><updated>2008-10-10T00:41:52.141-03:00</updated><title type='text'>Importância</title><content type='html'>Já a alguns meses, eu sou responsável por uma sessão semanal de treino de kung fu; responsável porque, sendo o mais antigo, espera-se que eu seja como o irmão mais velho quando os pais não estão presentes.&lt;br /&gt;&lt;br /&gt;Meus irmãos mais novos gostam de treinar kung fu e isto me dá oportunidade de entrar em contato próximo com suas expectativas e ansiedades; nesse processo, muitas coisas estranhas acontecem.&lt;br /&gt;&lt;br /&gt;De certa forma, a arte marcial é como qualquer outro tipo de arte; por um lado, a execução da arte é matéria de habilidade, enquanto por outro lado ela é inspiração, instinto e emoção. Essas são coisas de que a nossa cultura não trata.&lt;br /&gt;&lt;br /&gt;Durante o almoço, conversando com meus colegas sobre instrumentos musicais, chegamos a um ponto de pouca controvérsia: aprender um instrumento musical é exercitar o corpo para adequá-lo àquela execução. Isso é difícil porque é difícil se disciplinar, é difícil adequar o comportamento, é difícil... bem.&lt;br /&gt;&lt;br /&gt;Por mais que eu seja um ser inteligente, capaz de refletir a minha impressão do mundo em pensamento, ainda assim sou um ser que se comporta de maneira tal; é irrelevante que se pense "você deve ser assim", ou "o ideal é fazer desse jeito" ou mesmo "putz, queria tanto fazer como ele". O conhecimento é um fator determinante para a ação mas ele é um fator praticamente irrelevante diante de um universo silencioso de tendências, hábitos e características intrínsecas.&lt;br /&gt;&lt;br /&gt;Eu não sou capaz de ser qualquer coisa; em particular, eu não sou capaz de não ser eu. Isso parece contraditório diante da idéia de "aprendizado" mas eu penso que a própria idéia de "aprendizado" é contraditória, a idéia de que através de algum processo você "melhora", deixa de ser, digamos, mau, e passa a ser bom.&lt;br /&gt;&lt;br /&gt;É certo que eu deixo de ser como era ontem e passo a ser como serei amanhã, porém. A minha percepção, em particular, é de que a cada dia meu poder aumenta. Porém, isso é de se esperar, já que eu sou arrogante; e quando deixarei de ser?&lt;br /&gt;&lt;br /&gt;Em combate os nervos afloram, a violência encontra os caminhos das profundezas até a flor da pele, e você se percebe com uma vontade insuportável de machucar uma pessoa que, de outro modo, é muito querida.&lt;br /&gt;&lt;br /&gt;Em reunião você retruca e critica o outro, construindo pra si um pedestal moral ou uma vitória épica, porque ser ideal e ser vitorioso é tão desejável que a construção do outro como incompetente, irrelvante ou fraco não é tanto aceitável como... consequente.&lt;br /&gt;&lt;br /&gt;Qual é o significado de ser melhor? É certo que parte do eu é ser bom e dar prazer àqueles que são queridos; o que é, por outro lado, deixar de ser, digamos, mau humorado pelo outro? Ou introspectivo?&lt;br /&gt;&lt;br /&gt;Diante de um colega em treino de arte marcial, faz sentido não ser agressivo naquele dia em que você está agressivo? O que é conversar com uma pessoa querida e se irritar com algo que você ouviu e então pensar "não vou me irritar porque me irritar é errado"?&lt;br /&gt;&lt;br /&gt;Acredito que todo relacionamento possui uma dinâmica fraca ou forte em que o poder se alterna entre líder e liderado, entre aquele que é responsável pela saúde do relacionamento e aquele que é o "estagiário" da situação; especialmente entre as pessoas jovens, é ingenuidade acreditar que será possível encontrar um relacionamento que simplesmente "é", "funciona" e pronto.&lt;br /&gt;&lt;br /&gt;Porém, é contraditório que se viva o tempo para construir o mundo constantemente; que a vida seja preenchida por um constante liderar da situação em direção ao que será, e ainda não é, a própria vida; isso é viver para o futuro. É como aquele que ganha dinheiro e guarda para, um dia, gastar; quando é esse dia?&lt;br /&gt;&lt;br /&gt;Quanta sabedoria você acumulará até que chegue o dia em que você se permite se irritar quando você se irritar?&lt;br /&gt;&lt;br /&gt;Esses questionamentos são insuportáveis, como todos os outros, na medida em que circularmente criticam justamente a atitude que os produz.&lt;br /&gt;&lt;br /&gt;A muito tempo atrás eu disse a uma pessoa importante que eu era como se descreveu Kenshin Himura no Seisouhen OVA: uma espada sem bainha, nunca guardada, nunca descansando, sempre prestes a cortar em pedaços.&lt;br /&gt;&lt;br /&gt;Às vezes eu penso que o que eu preciso é ser salvo de mim mesmo. Este pensamento é circularmente perfeito para uma pessoa cujo senso de importância está sempre focado no outro.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-1989609824409717027?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/1989609824409717027/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=1989609824409717027' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1989609824409717027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1989609824409717027'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/10/importncia.html' title='Importância'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-6772034488376067581</id><published>2008-09-29T20:37:00.000-03:00</published><updated>2008-09-29T20:39:04.808-03:00</updated><title type='text'>A Criação do Mundo</title><content type='html'>Eu me pergunto se algum dia vou me cansar de criar o mundo e começar a viver nele...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-6772034488376067581?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/6772034488376067581/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=6772034488376067581' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6772034488376067581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6772034488376067581'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/09/criao-do-mundo.html' title='A Criação do Mundo'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-4365268854248668931</id><published>2008-09-18T23:38:00.000-03:00</published><updated>2008-09-18T23:39:42.081-03:00</updated><title type='text'>Abstinência</title><content type='html'>Por conta de um problema no estômago e adjacências, estou proibido de ingerir álcool por dois meses.&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;¬¬'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-4365268854248668931?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/4365268854248668931/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=4365268854248668931' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/4365268854248668931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/4365268854248668931'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/09/abstinncia.html' title='Abstinência'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-6935590923184653079</id><published>2008-08-19T23:06:00.001-03:00</published><updated>2008-08-19T23:06:41.176-03:00</updated><title type='text'>Graduação...</title><content type='html'>Ah, gente boa, eu estou &lt;span style="font-weight:bold;"&gt;quase&lt;/span&gt; terminando o meu projeto... ^^'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-6935590923184653079?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/6935590923184653079/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=6935590923184653079' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6935590923184653079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6935590923184653079'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/08/graduao.html' title='Graduação...'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-6169663020187665870</id><published>2008-08-17T23:44:00.001-03:00</published><updated>2008-08-17T23:45:38.671-03:00</updated><title type='text'>Ah, família...</title><content type='html'>Aniversário da Luísa nesse fim de semana.&lt;br /&gt;Passei o fim da tarde de domingo com as meninas vendo vídeo e passeando no play.&lt;br /&gt;Fazia tempo que eu não tinha oportunidade de brincar tanto com as meninas...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-6169663020187665870?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/6169663020187665870/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=6169663020187665870' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6169663020187665870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6169663020187665870'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/08/ah-famlia.html' title='Ah, família...'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-8535864777944975720</id><published>2008-08-11T21:07:00.002-03:00</published><updated>2008-08-11T21:13:23.176-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='anime'/><title type='text'>Tsubasa Reservoir Chronicle OST</title><content type='html'>A trilha sonora de Tsubasa Reservoir Chronicle compete seriamente pela posição de trilha sonora mais bonita da história da televisão.&lt;br /&gt;&lt;br /&gt;"you are my love", do disco Future Soundscape I, é linda demais.&lt;br /&gt;&lt;br /&gt;Mas o ponto forte dessa trilha é de "a song of storm and fire". Essa música é certamente muito bonita, uma mistura de um canto bem lírico com uma faixa usando efeitos eletrônicos bem leves.&lt;br /&gt;&lt;br /&gt;Mas é inexplicável o efeito que essa música tem quando você acompanhou a série como um todo. Essa faixa é a trilha de algumas das cenas de maior drama, onde a determinação do personagem Syaorang Li de lutar pela pessoa mais importante é posta a prova.&lt;br /&gt;&lt;br /&gt;Este é um tema recorrente na série; ouvir a música e se lembrar da emoção correspondente é de arrepiar.&lt;br /&gt;&lt;br /&gt;Acho que esta associação explica porque nós, fãs de anime, reagimos de maneira tão intensa à trilha sonora das obras que conhecemos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-8535864777944975720?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/8535864777944975720/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=8535864777944975720' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8535864777944975720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8535864777944975720'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/08/tsubasa-reservoir-chronicle-ost.html' title='Tsubasa Reservoir Chronicle OST'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-1261220200593634905</id><published>2008-08-06T01:12:00.001-03:00</published><updated>2008-08-06T01:12:55.865-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='anime'/><title type='text'>Ah! Megami-sama</title><content type='html'>Esse anime é tão bonitinho que eu não consigo me concentrar nos defeitos.&lt;br /&gt;Está ótimo pra melhorar o meu humor nesses tempos de sinusite.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-1261220200593634905?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/1261220200593634905/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=1261220200593634905' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1261220200593634905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1261220200593634905'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/08/ah-megami-sama.html' title='Ah! Megami-sama'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-9085617842643689078</id><published>2008-07-29T22:09:00.003-03:00</published><updated>2008-07-29T22:27:50.456-03:00</updated><title type='text'>O Ser Solitário</title><content type='html'>Acabei de descobrir a existência de um livro chamado &lt;a href="http://www.amazon.com/Party-One-Manifesto-Anneli-Rufus/dp/1569245134/ref=si3_rdr_bb_product"&gt;The Loner's Manifesto&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;"But just as Homo sapiens no longer needs prehensile toes, we no longer all need to be social animals in order to survive as a species. Mandatory social interaction is an evolutionary remnant which those who wish to may discard. The world has changed since barns needed raising."&lt;br /&gt;&lt;br /&gt;As páginas seguintes continuam descrevendo diversas posições e relatos sobre o ser solitário. Em particular, na dificuldade que é ser solitário em sociedade.&lt;br /&gt;&lt;br /&gt;Eu estava lendo hoje um &lt;a href="http://headrush.typepad.com/creating_passionate_users/2007/03/is_twitter_too_.html"&gt;artigo&lt;/a&gt; sobre uma ferramenta chamada &lt;a href="http://twitter.com/"&gt;Twitter&lt;/a&gt;. Esse negócio é o cúmulo da vida online: é um micro-blog onde você "posta" coisas como "saí pra lanchar" ou "bocejo".&lt;br /&gt;&lt;br /&gt;Ao contrário do que a maioria dos meus conhecidos pode acreditar, eu não gosto de conversar pela Internet. A interação com as outras pessoas, pra mim, só é atraente quando é intensa. Acumulei centenas de contatos de ICQ, MSN, GTalk e afins ao longo de uma vida com o computador mas raramente tenho uma longa conversa online, na maioria das vezes com gente que está muito longe de mim.&lt;br /&gt;&lt;br /&gt;Eu prefiro não ter qualquer conversa a ter uma conversa pela metade; pra mim uma conversa inclui olhar a pessoa, a maneira como ela se move, os olhos etc.&lt;br /&gt;&lt;br /&gt;Além disso, conversar não é algo que eu tenha vontade de consumir a todo momento. Neste ponto, eu sou um solitário. Eu aprecio profundamente estar ao lado de uma pessoa em silêncio, como por exemplo ler um livro no quarto enquanto minha mãe ou minha irmã estudam. Existe um prazer todo especial em olhar para o teto e me perder em pensamento.&lt;br /&gt;&lt;br /&gt;Eu não sei como isso funciona, e estou interessado em buscar pensamentos nesse livro, mas existe um grande prazer em se estar sozinho.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-9085617842643689078?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/9085617842643689078/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=9085617842643689078' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/9085617842643689078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/9085617842643689078'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/07/o-ser-solitrio.html' title='O Ser Solitário'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-1558574221457457869</id><published>2008-07-24T00:12:00.000-03:00</published><updated>2008-07-24T00:13:17.826-03:00</updated><title type='text'>Zzz....</title><content type='html'>E olha que eu não estou trabalhando tanto quantos uns caras por aí.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-1558574221457457869?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/1558574221457457869/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=1558574221457457869' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1558574221457457869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1558574221457457869'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/07/zzz.html' title='Zzz....'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-6543857372573079892</id><published>2008-07-07T00:25:00.001-03:00</published><updated>2008-07-07T00:27:26.658-03:00</updated><title type='text'>Casamentos</title><content type='html'>Ser padrinho de casamento é complicado, bicho.&lt;br /&gt;Você quer bem ao casal e acaba arrumando responsabilidade pra tudo que é lado.&lt;br /&gt;Entre cartórios e festas de fim de solteirice foram-se meus próximos quinze dias.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-6543857372573079892?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/6543857372573079892/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=6543857372573079892' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6543857372573079892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6543857372573079892'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/07/casamentos.html' title='Casamentos'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-5283629685291890184</id><published>2008-06-29T23:36:00.001-03:00</published><updated>2008-06-29T23:37:46.122-03:00</updated><title type='text'>Teenage Mutant Ninja Turtles</title><content type='html'>Há algo de errado comigo? Ninguém achou esse filme irado. Acabei de ver, achei irado. Alguma coisa muito estranha aconteceu com o meu sangue nos últimos anos, está difícil achar alguma coisa ruim...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-5283629685291890184?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/5283629685291890184/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=5283629685291890184' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/5283629685291890184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/5283629685291890184'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/06/teenage-mutant-ninja-turtles.html' title='Teenage Mutant Ninja Turtles'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-6903939385000626702</id><published>2008-06-17T21:54:00.003-03:00</published><updated>2008-06-18T22:18:38.023-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='filosofia'/><title type='text'>Schopenhauer já sabia?</title><content type='html'>A muito tempo atrás, em uma discussão familiar sobre um imperativo qualquer, me ocorreu a dificuldade em diferenciar duas frases: "eu não quero", e "eu não quero".&lt;br /&gt;&lt;br /&gt;Considere que alguém pergunte: você quer ir comer uma pizza?&lt;br /&gt;&lt;br /&gt;Há um estado em que você pensa "putz, tudo menos pizza", no qual a resposta é: não.&lt;br /&gt;Há um estado em que você pensa "sei lá, tanto faz", no qual a resposta é: não.&lt;br /&gt;&lt;br /&gt;Na época, pensei que a diferença pudesse ser conduzida na ênfase:&lt;br /&gt;eu &lt;span style="font-weight:bold;"&gt;não&lt;/span&gt; quero.&lt;br /&gt;eu não &lt;span style="font-weight:bold;"&gt;quero&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Depois. pensei que um truque de entonação acrescentaria o significado com mais força:&lt;br /&gt;eu &lt;span style="font-weight:bold;"&gt;não&lt;/span&gt; quero.&lt;br /&gt;eu não... &lt;span style="font-weight:bold;"&gt;quero&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Não consegui fazer melhor sem acrescentar mais palavras.&lt;br /&gt;É natural que algumas coisas não se expresse diretamente com um vocabulário finito qualquer; em inglês dizer "foi o azar" não é possível de maneira direta, porque não existe palavra em inglês para "azar".&lt;br /&gt;&lt;br /&gt;Pois bem; em português eu acho que não há expressão que naturalmente signifique a ausência de vontade. Além disso, provavelmente por causa disso, assume-se constantemente no discurso uma vontade assertiva no outro; é uma dificuldade enorme comunicar a outra pessoa que você está ausente de vontade.&lt;br /&gt;&lt;br /&gt;Outros tipos de ausência também são difíceis de comunicar. É uma tarefa diplomática considerável comunicar a uma pessoa que, apesar de sua comida não ser ruim, você na verdade não gostou dela. É praticamente inconcebível que uma pessoa possa dizer "eu não gostei" ao mesmo tempo que não acha a coisa ruim.&lt;br /&gt;&lt;br /&gt;É provável que essa dificuldade seja compartilhada por todos os falantes de línguas derivadas do Latim, filhos da cultura européia. Os vazios são o forte dos orientais, e não dos ocidentais.&lt;br /&gt;&lt;br /&gt;Pois bem. Com o passar do tempo, a expressão da vontade ganhou na minha mente um modelo em três partes; três idéias que se confundem sempre que se está falando sobre um imperativo qualquer, quando se está falando daquilo que se pretende fazer: &lt;span style="font-weight:bold;"&gt;eu desejo&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;eu necessito&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;eu posso&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Eu não tenho qualquer teoria sobre como estas três expressões seriam determinavelmente os três vetores que completamente descrevem o espaço da vontade humana; apenas me parece uma maneira curiosamente conveniente de modelar certos problemas da expressão. Situações em que se poderia encontrar o seguinte discurso:&lt;br /&gt;&lt;br /&gt;-- Mas porque você está fazendo isso? Você não precisa fazer isso!&lt;br /&gt;-- Eu não estou fazendo porque preciso, estou fazendo porque quero.&lt;br /&gt;&lt;br /&gt;(Vou fazer um esforço para não tabular associações místicas entre essas três idéias e toda a profusão de &lt;span style="font-weight:bold;"&gt;três&lt;/span&gt; que há nos livros esotéricos.)&lt;br /&gt;&lt;br /&gt;O modelo se baseia no significado natural dos três verbos: desejar, necessitar e poder. Todos esses três verbos comunicam um imperativo. É possível ordená-los por uma relação de força biológica; aquilo que você necessita impõe mais que aquilo que você meramente pode. Não acredito que essa ordenação seja mais importante que qualquer outra, exatamente porque somos homo sapiens organizados socialmente em uma civilização.&lt;br /&gt;&lt;br /&gt;Uma ordenação como essas colocaria &lt;span style="font-weight:bold;"&gt;eu posso&lt;/span&gt; em um ápice da civilização; o momento em que os imperativos do corpo são postos em cheque com tal facilidade que o imperativo da mente se torna abordável. Dicotomias mente-corpo me interessam pouco, porém.&lt;br /&gt;&lt;br /&gt;Meu interesse em um tal modelo surgiu através de situações em que a minha própria posição era incompreendida. Percebi que, pensando desta forma, eu era capaz de entender a mim mesmo posicionado principalmente em um dos três pilares enquanto o outro me procurava em algum dos outros dois.&lt;br /&gt;&lt;br /&gt;É importante notar que o modelo não distingue as coisas que você quer entre coisas que você necessita, deseja ou pode ter; ele distingue as ações que você toma entre ações que você necessita tomar, ações que você deseja tomar e ações que você pode tomar. A diferença é sutil e ocorre entre a idéia de um modelo estrutural da idéi de um modelo comportamental.&lt;br /&gt;&lt;br /&gt;Não sei se existe um modelo equivalente com quatro pilares; não consigo encontrar um verbo que seja fundamentalmente diferente desses três, nesse contexto.&lt;br /&gt;&lt;br /&gt;Estou cansado, continuo depois.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-6903939385000626702?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/6903939385000626702/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=6903939385000626702' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6903939385000626702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6903939385000626702'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/06/schopenhauer-j-sabia.html' title='Schopenhauer já sabia?'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-1424165641738543851</id><published>2008-05-08T14:57:00.006-03:00</published><updated>2008-05-08T15:27:55.648-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Projeto Orientado a Componentes, parte IV</title><content type='html'>Uma ligeira digressão, para aproveitar a oportunidade que se apresenta; apresentei esta semana um brevíssimo seminário sobre interoperabilidade entre C++ e Java (com ênfase na ferramenta SWIG).&lt;br /&gt;&lt;br /&gt;O problema a resolver, quando a necessidade de interoperabilidade entre C++ e a Java surge, é exatamente um problema de projeto de componente, por uma via indireta: se não é tão necessária a garantia de substituição de componentes, é inescapável a completa separação entre a implementação do "componente C++" e do "componente Java" devido ao completo isolamento entre seus espaços de memória.&lt;br /&gt;&lt;br /&gt;Esta mesma situação ocorre em um sistema convencional de componentes em que cada componente se localiza em processos distintos, ou mesmo em sistemas distintos, se comunicando através de algum mecanismo inter-processos. O próximo passo na escala evolutiva do projeto de sistemas, o projeto orientado a serviços, lida explicitamente com esta situação, já que se assume como normal que serviços se localizam em sistemas (portanto processos) distintos.&lt;br /&gt;&lt;br /&gt;Esse contexto, e as restrições que ele impõe, transforma a natureza da troca de informação; a memória de um processo não é mais um recurso compartilhado entre rotinas.&lt;br /&gt;&lt;br /&gt;Considere a seguinte função em C, parte de uma interface de componente IFoo. (O componente concreto Foo implementa a interface IFoo.)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  Foo*&lt;br /&gt;  foo_retrieve_from_persistence (char* foo_name);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Esta função recebe uma NTBS identificando unicamente um objeto Foo na persistência e retorna o endereço do objeto Foo na memória, trazendo o objeto para a memória uma primeira vez se necessário.&lt;br /&gt;&lt;br /&gt;Suponha que seja desejável, através de um programa Java, usar objetos Foo obtidos através desta função.&lt;br /&gt;&lt;br /&gt;Do componente Bar, uma operação obtém uma referência a uma implementação de IFoo e decide chamar a operação foo_retrieve_from_persistence, passando como argumento uma NTBS. Observe que uma NTBS é uma referência a um espaço contíguo de memória; simplesmente entregar esse endereço para o componente Foo causará um desastre quando este componente resolver acessar esse endereço em seu próprio espaço de memória, cujo significado é incerto. Do mesmo problema sofre o valor de retorno da função; este é o endereço de um objeto na memória do componente Foo, cujo significado no espaço da memória de Bar é incerto.&lt;br /&gt;&lt;br /&gt;Essa situação exibe a impossibilidade de tratar a semântica de referência, na travessia do limiar entre componentes, da mesma maneira como é tratada em projetos mais simples. Como já dissemos, não é possível assumir a memória como recurso compartilhado entre operações em um projeto orientado a componentes. [1]&lt;br /&gt;&lt;br /&gt;A solução canônica é copiar esses valores. Esta tarefa deve ser realizado por aquele elemento do sistema que existe no umbral entre componentes e é responsável por transportar informação de um lado para o outro. Este elemento deverá, então, copiar todo o segmento de memória endereçado por foo_name da memória do componente Bar para a memória do componente Foo. Esta atividade se denomina "data marshalling" em um certo vocabulário e regras particulares de "data marshalling" são chamadas "type maps" em um certo outro vocabulário.&lt;br /&gt;&lt;br /&gt;Este é um exemplo simples de "type map" que transporta um objeto String do Java para um argumento de tipo const std::string&amp;amp; do C++.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  // na prática, estes objetos são argumentos de uma função JNI.&lt;br /&gt;  extern JNIEnv* jenv;&lt;br /&gt;  extern jstring jargN;&lt;br /&gt;&lt;br /&gt;  // type map&lt;br /&gt;  const char *argN_pstr = (const char *)jenv-&gt;GetStringUTFChars(jargN, 0);&lt;br /&gt;  if (!argN_pstr) return 0;&lt;br /&gt;  std::string argN_str(argN_pstr);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;A função GetStringUTFChars realiza a tarefa concreta de copiar os segmentos de memória do espaço de memória Java para o espaço de memória C++. Assim, a operação da interface de componente Java/JNI terá a seguinte forma:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  public static native jlong foo_retrieve_from_persistence (String foo_name);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Essa solução, infelizmente, não resolverá o problema do valor de retorno da função. Foo não é um tipo primitivo da linguagem; não existe uma função na JNI para copiar objetos Foo. Mesmo que existisse, Foo é um objeto; o que nós queremos fazer com ele é chamar suas operações. De certa forma, nossa vontade se divide em duas: expor ao programa Java as operações da classe Foo e expor ao programa Java objetos Foo sobre o qual operar. Essas duas necessidades serão resolvidas com mecanismos diferentes.&lt;br /&gt;&lt;br /&gt;Digamos que esta seja a classe Foo.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class Foo {&lt;br /&gt;public:&lt;br /&gt;&lt;br /&gt;    Foo (char* name);&lt;br /&gt;&lt;br /&gt;    char*&lt;br /&gt;    ask_question (char* question);&lt;br /&gt;&lt;br /&gt;    char*&lt;br /&gt;    get_name () const;&lt;br /&gt;&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;A primeira vontade é realizável produzindo, para cada operação de Foo, uma operação na interface do componente IFoo.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    Foo*&lt;br /&gt;    Foo_new (char* name);&lt;br /&gt;&lt;br /&gt;    void&lt;br /&gt;    Foo_delete (Foo* foo);&lt;br /&gt;&lt;br /&gt;    char*&lt;br /&gt;    Foo_ask_question (Foo* foo, char* question);&lt;br /&gt;&lt;br /&gt;    char*&lt;br /&gt;    Foo_get_name (const Foo* foo);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;A segunda é entregando ao programa Java o endereço do objeto Foo necessário. Chegamos, aparentemente, a um impasse; já que nosso problema original era justamente como transportar o valor de retorno da função foo_retrieve_from_persistence, que é do tipo Foo*! Porém, tendo caminhado até aqui, o problema se torna ligeiramente diferente, e uma solução é possível. Agora que nós temos todas as operações de Foo que desejamos exportadas pela interface de componente IFoo, tudo o que resta é entregar ao componente cliente uma referência opaca a um objeto Foo. O componente cliente da interface nunca necessitará resolver (ou de-referenciar) esta referência; ele apenas mantém este valor para usá-lo como argumento de chamada a uma operação da interface IFoo. [2]&lt;br /&gt;&lt;br /&gt;Endereços de memória do C++ podem ser guardados apropriadamente na memória do Java como um valor do tipo Long. Assim, o valor de retorno da operação Foo_create é resolvido pelo seguinte "type map":&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  // este é o objeto retornado pela chamada JNI&lt;br /&gt;  jlong jresult = 0;&lt;br /&gt;  // este é o objeto retornado pela função C++&lt;br /&gt;  Foo* result = NULL;&lt;br /&gt;&lt;br /&gt;  // type map&lt;br /&gt;  result = new Foo(arg1_str); // vide type map anterior&lt;br /&gt;  *(Foo **)&amp;amp;jresult = result;&lt;br /&gt;&lt;br /&gt;  // por fim...&lt;br /&gt;  return jresult;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;e a operação na interface de componente Java/JNI terá a seguinte forma:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  public static native jlong Foo_create (String name);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Assim, o programa Java chamador de Foo_create através desta interface receberá um valor Long que contém o endereço, na memória do C++, do objeto Foo recém-criado. A operação Foo_get_name através desta interface terá a seguinte forma:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  public static native String Foo_get_name (jlong foo);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;sendo que o valor de retorno da operação Foo_get_name do componente IFoo será "marshalled" pelo "type map" como já vimos anteriormente.&lt;br /&gt;&lt;br /&gt;Havendo resolvido o problema da possibilidade de referenciar, de maneira opaca, um objeto Foo da memória do C++ na memória do Java, e o problema de chamar operações da classe Foo em C++, podemos então criar uma classe Foo em Java cujo único propósito é imitar a classe Foo em C++ por conveniência.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class Foo {&lt;br /&gt;&lt;br /&gt;  private Long cPtr;&lt;br /&gt;&lt;br /&gt;  // @Override&lt;br /&gt;  public void finalize () {&lt;br /&gt;    delete();&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void delete () {&lt;br /&gt;    IFooJNI.Foo_delete(cPtr);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public Foo (String name) {&lt;br /&gt;    cPtr = IFooJNI.Foo_new(name);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public String ask_question (String question) {&lt;br /&gt;    return IFooJNI.Foo_ask_question(cPtr, question);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public String get_name () {&lt;br /&gt;    return IFooJNI.Foo_get_name(cPtr);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Desta forma concretizamos uma forma ideal de interoperabilidade entre Java e C++ onde, para cara classe C++, há uma classe Java equivalente, responsável por esconder as chamadas à interface de componente JNI que, por sua vez, é responsável por realizar o transporte de informação através do umbral dos componentes.&lt;br /&gt;&lt;br /&gt;Nestes exemplos ocultamos o fato de que, para a JNI, é necessário não somente um componente Java/JNI mas também um componente C++/JNI além do próprio componente que implementa a interface IFoo; também não lidamos com os casos em que registramos "objetos callback" criados no Java em sistemas C++; não lidamos com a vontade de transportar exceções disparadas em C++ de volta para o chamador Java; entre outras coisas de que não falamos.&lt;br /&gt;&lt;br /&gt;[1] É claro que um projeto pode se utilizar da noção de componentes de uma forma restrita, para obter um conjunto restrito de benefícios, abandonando esta restrição; é possível, por exemplo, obter os benefícios de recompilação veloz e carga de código por demanda abandonando a possibilidade de distribuir os componentes de modo a mantê-los sempre no mesmo espaço de memória e permitir o uso convencional de ponteiros.&lt;br /&gt;&lt;br /&gt;[2] Em projetos de sistemas com componentes é comum que esta idéia do "endereço opaco" seja generalizada para qualquer tipo de informação "opaca" que seja capaz de identificar univocamente um objeto de Foo no domínio do componente Foo; por exemplo, um "nome", ou um GUID, ou outra coisa qualquer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-1424165641738543851?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/1424165641738543851/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=1424165641738543851' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1424165641738543851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1424165641738543851'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/05/projeto-orientado-componentes-parte-iv.html' title='Projeto Orientado a Componentes, parte IV'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-2363661614867857949</id><published>2008-04-29T22:57:00.006-03:00</published><updated>2008-05-08T15:28:08.776-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Projeto Orientado a Componentes, parte III</title><content type='html'>Agora, uma pausa para reflexão. Esta dicotomia interface versus implementação é difícil de definir. Por baixo dos panos nós temos memória de onde nós lemos e para onde nós escrevemos. O que caracteriza uma interface e o que a distingue de uma implementação?&lt;br /&gt;&lt;br /&gt;Essa pergunta só pode ser respondida em um determinado contexto. Um bom sistema escrito em assembler talvez tenha interfaces mais bem definidas que um mau sistema escrito em Java. Porém, está claro para a indústria que certos mecanismos de linguagem favorecem o estabelecimento de boas interfaces no sistema implementado.&lt;br /&gt;&lt;br /&gt;Além disso, a noção de interface surge diante de um problema de substituição. É interface aquilo que, mantendo-se estável, permite a substituição daquilo que é implementação. Porém, o que é este &lt;span style="font-weight: bold;"&gt;permite&lt;/span&gt;? Este permite, quando caracterizado, por conseguinte caracteriza o que é interface.&lt;br /&gt;&lt;br /&gt;Suponha um sistema escrito em C++ por uma equipe que considera irrisório o tempo de recompilação do código-fonte. Neste contexto, podemos seguramente aceitar que a seguinte substituição mantém estável uma interface.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;antes&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class Foo {&lt;br /&gt;public:&lt;br /&gt;&lt;br /&gt;Foo ();&lt;br /&gt;&lt;br /&gt;void&lt;br /&gt;mutate_stuff ();&lt;br /&gt;&lt;br /&gt;int&lt;br /&gt;observe_stuff () const;&lt;br /&gt;&lt;br /&gt;private:&lt;br /&gt;Bar* m_bar;&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;depois&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class Foo {&lt;br /&gt;public:&lt;br /&gt;&lt;br /&gt;Foo ();&lt;br /&gt;&lt;br /&gt;void&lt;br /&gt;mutate_stuff ();&lt;br /&gt;&lt;br /&gt;int&lt;br /&gt;observe_stuff () const;&lt;br /&gt;&lt;br /&gt;private:&lt;br /&gt;int m_cache;&lt;br /&gt;shared_ptr&amp;lt;bar&amp;gt; m_bar;&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Após a alteração acima e uma recompilação o sistema continua a funcionar normalmente. [1] Dizendo de forma mais extensa: neste contexto, a substituição realizada não altera propriedades observáveis externamente da classe, de modo que do ponto de vista de um observador, a classe mantém estável sua interface. (Apenas membros privados foram alterados.)&lt;br /&gt;&lt;br /&gt;Agora vamos alterar as nossas premissas. O tempo de recompilação desse sistema é enorme e o ciclo de testes não pode esperar, de modo que a estrutura de classes do sistema foi particionada e esta classe mora dentro de um objeto compartilhado, uma biblioteca dinâmica.&lt;br /&gt;&lt;br /&gt;A equipe realiza a substituição, recompila o objeto compartilhado e o entrega a uma equipe de testes.&lt;br /&gt;E os testes falham miseravelmente.&lt;br /&gt;&lt;br /&gt;Isto acontece porque, neste novo contexto, há mais propriedades observáveis a considerar, que devem se manter estáveis -- que fazem parte da interface da classe.&lt;br /&gt;Neste caso, o layout de um objeto da classe Foo é uma propriedade observável; um programa compilado criando objetos da definição &lt;span style="font-weight: bold;"&gt;antes&lt;/span&gt; criará objetos com um layout diferente daquele esperado pelo objeto compartilhado que espera objetos dada a definição &lt;span style="font-weight: bold;"&gt;depois&lt;/span&gt;.&lt;br /&gt;A definição &lt;span style="font-weight: bold;"&gt;depois&lt;/span&gt; tem um int no &lt;span style="font-style: italic;"&gt;offset&lt;/span&gt; onde a definição &lt;span style="font-weight: bold;"&gt;antes&lt;/span&gt; tinha um ponteiro, ela ocupa mais memória etc.&lt;br /&gt;&lt;br /&gt;Podemos dizer que o primeiro caso é o caso de um projeto orientado a objetos, onde a alteração de elementos privados da classe não altera a interface; e podemos dizer que o segundo caso é o caso de um projeto orientado a componentes, onde a alteração do layout na memória de uma classe altera sua interface.&lt;br /&gt;&lt;br /&gt;Como no segundo caso nós estamos violando a interface do componente, nós não podemos substituir o componente de antes pelo componente de depois impunemente. Dito de trás para a frente, pelo fato de não podermos substituir o componente de antes pelo componente de depois, por definição estamos violando sua interface.&lt;br /&gt;&lt;br /&gt;Imagine então o que acontece em um sistema spaghetti, onde todas as classes mantém referência a todas as outras classes; uma violação de interface em um "componente" perturbará implacavelmente todos os outros "componentes".&lt;br /&gt;&lt;br /&gt;Quando projetamos um sistema pensando em componentes, ou quando desejamos aplicar a idéia forte de interface para melhorar o nosso projeto diminuindo o acoplamento entre as coisas que são distintas, é útil usar das ferramentas à disposição para dar &lt;span style="font-weight: bold;"&gt;forma&lt;/span&gt; ao que é uma interface.&lt;br /&gt;&lt;br /&gt;Linguagens que se propõe a facilitar o desenvolvimento de componentes, como Java e C#, possuem como parte integrante do seu vocabulário e mecanismo nativo uma &lt;span style="font-style: italic;"&gt;interface&lt;/span&gt; em contraste com as classes. Normalmente algo do tipo:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;interface IFoo {&lt;br /&gt;&lt;br /&gt;void&lt;br /&gt;mutate_stuff ();&lt;br /&gt;&lt;br /&gt;int&lt;br /&gt;observe_stuff () const;&lt;br /&gt;&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Em C++ não existe uma construção análoga mas é possível emulá-la integralmente usando classes, da seguinte maneira:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class IFoo {&lt;br /&gt;&lt;br /&gt;virtual&lt;br /&gt;void&lt;br /&gt;mutate_stuff () = 0;&lt;br /&gt;&lt;br /&gt;virtual&lt;br /&gt;int&lt;br /&gt;observe_stuff () const = 0;&lt;br /&gt;&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;(O leitor astuto observará que esta construção-interface não possui atributos.)&lt;br /&gt;&lt;br /&gt;O propósito de usar construções como estas é evidenciar a natureza destes elementos como interfaces -- aquilo que se deseja manter estável -- e diminuir a chance disto que é interface ser inadvertidamente alterado -- causando o desastre. A construção-interface é a melhor amiga do projetista de componentes, permitindo a representação de um conceito de projeto diretamente na linguagem do código-fonte, restringindo as possibilidades de violação durante o processo de implementação, ou ao menos tornando a (necessidade de) violação claramente evidente.&lt;br /&gt;&lt;br /&gt;Infelizmente para nós nem tudo que existe na fronteira de um componente pode ser uma interface, já que é preciso comunicar coisas de um componente para outro. E quem pode viver comunicando apenas doubles e bools? Nós queremos comunicar objetos.&lt;br /&gt;&lt;br /&gt;Além disso, as construções-interface não são garantia de estabilidade de interfaces, já que há mais sobre o que é publicamente observável em um objeto que sua estrutura: há o seu comportamento.&lt;br /&gt;&lt;br /&gt;[1] Estamos, naturalmente, assumindo que o programador não é louco e que a alteração tem algum sentido, exatamente como aparenta ter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-2363661614867857949?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/2363661614867857949/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=2363661614867857949' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2363661614867857949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2363661614867857949'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/04/projeto-orientado-componentes-parte-iii.html' title='Projeto Orientado a Componentes, parte III'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-8839494803282192683</id><published>2008-04-28T22:36:00.005-03:00</published><updated>2008-05-08T15:28:23.390-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Projeto Orientado a Componentes, parte II</title><content type='html'>Quando dizemos que componentes são por definição intercambiáveis estamos continuando uma longa tradição de bons projetistas de bons sistemas, cujo conjunto de características sempre integrará, por mais sofisticada a metodologia e/ou a nomenclatura, a aplicação da &lt;span style="font-weight: bold;"&gt;separação entre interface e implementação&lt;/span&gt;. [1]&lt;br /&gt;&lt;br /&gt;Se a interface continua a mesma, podemos substituir a implementação sem perturbar o comportamento do sistema. Obviamente que o comportamento do sistema deve mudar de alguma forma, senão trocar a porcaria do componente não teria propósito. Esperamos, portanto, que erros sejam corrigidos (de modo que o sistema de fato funcione como deveria), ou que o desempenho aumente (de modo que o sistema funcione antes que eu caia no sono) ou sei lá.&lt;br /&gt;&lt;br /&gt;Aplicávamos esta distinção já na era do projeto estruturado; e no projeto essencial; e no projeto orientado a objetos; e agora no projeto orientado a componentes e aplicaremos no projeto orientado a serviços quando finalmente este troço alcançar a plebe.&lt;br /&gt;&lt;br /&gt;Em um sistema orientado a objetos, nós temos tipicamente dois elementos em evidência como &lt;span style="font-weight: bold;"&gt;detalhe de implementação&lt;/span&gt;: a estrutura de um objeto, e as instruções levadas a cabo por seus métodos. Nós queremos liberdade para alterar a estrutura de um objeto e queremos liberdade para alterar a instruções executadas por seus métodos. (Há mais por debaixo do pano, como sempre.)&lt;br /&gt;&lt;br /&gt;Em um sistema orientado a componentes, um terceiro elemento surge ofuscando, como se fosse, os outros dois; o componente propriamente dito. Entendemos que um componente possui uma interface e uma implementação; sendo a implementação de um componente composta por inúmeras classes. Além disso, um componente é um artefato componente (heh) de um sistema implantado; é parte da definição de componente que este seja intercambiável por um outro, que implemente a mesma interface, em um sistema implantado -- em contraste com um tipo de substituição que exige recompilação.&lt;br /&gt;&lt;br /&gt;Esta última restrição, quando posta no contexto dos sistemas operacionais reais, com seus &lt;span style="font-style: italic;"&gt;linkers&lt;/span&gt; e &lt;span style="font-style: italic;"&gt;loaders&lt;/span&gt; reais, nos trás à &lt;span style="font-style: italic;"&gt;crux&lt;/span&gt; do problema de projeto orientado a componentes: a implementação de uma classe integrante de um componente &lt;span style="font-weight: bold;"&gt;absolutamente não pode&lt;/span&gt; depender de um detalhe de implementação de uma classe integrante de outro componente.&lt;br /&gt;&lt;br /&gt;Observe que esta restrição não é exatamente uma novidade, já que bons sistemas isolarão módulos através de interfaces para aumentar a coesão e diminuir o acoplamento; porém, quando componentes entram na jogada, a metodologia exige uma restrição mais forte.&lt;br /&gt;&lt;br /&gt;(De fato, esta restrição metodológica se torna uma impossibilidade tecnológica assim que os componentes são levados ao próximo estágio, passam a não mais morar no mesmo espaço de memória virtual, e começam a ser chamados "distribuídos" ou "serviços".) [2]&lt;br /&gt;&lt;br /&gt;É por esta razão que os líderes do Projeto Spaghetti falharão em "componentizar" seu sistema; mesmo que, à primeira vista, seja possível seccionar sua estrutura de classes em artefatos binários distintos.&lt;br /&gt;&lt;br /&gt;[1] Nós, filhos da cultura européia, nem escrevendo programas nos livramos da dicotomia corpo versus espírito. Nem imagino o que seria uma metodologia de desenvolvimento de sistemas desenvolvida por monges taoístas chineses.&lt;br /&gt;&lt;br /&gt;[2] E portanto, domar a restrição metodológica significa poder conviver com a impossibilidade tecnológica e eventualmente programar os sistemas do futuro.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-8839494803282192683?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/8839494803282192683/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=8839494803282192683' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8839494803282192683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8839494803282192683'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/04/projeto-orientado-componentes-parte-ii.html' title='Projeto Orientado a Componentes, parte II'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-6691953570210247646</id><published>2008-04-28T21:34:00.002-03:00</published><updated>2008-04-28T21:59:19.235-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Projeto Orientado a Componentes, parte I</title><content type='html'>Ano passado fiz um curso de extensão em Projeto Orientado a Componentes com UML; na época, eu estava progredindo na minha capacidade de construir modelos mentais de projetos de &lt;span style="font-style: italic;"&gt;software&lt;/span&gt; orientados a objeto e já havia lido bastante sobre &lt;span style="font-style: italic;"&gt;web services&lt;/span&gt; e arquiteturas orientada a serviços.&lt;br /&gt;&lt;br /&gt;O mais interessante sobre os Componentes é a maneira como eles dão um nó na sofisticação aparente dos sistemas e obrigam o projetista a voltar aos básicos. Digo isso porque estes sistemas são &lt;span style="font-weight: bold;"&gt;aparentemente&lt;/span&gt; sofisticados; na prática, eles apresentam &lt;span style="font-weight: bold;"&gt;baixa coesão&lt;/span&gt; e &lt;span style="font-weight: bold;"&gt;alto acoplamento&lt;/span&gt;, significando que elementos deste sistema se relacionam diretamente com praticamente todos os outros de maneira &lt;span style="font-style: italic;"&gt;ad hoc&lt;/span&gt;, fenômeno que, em sua forma mais concreta, denomina-se &lt;span style="font-weight: bold;"&gt;código spaghetti&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;É possível construir um sistema orientado a objetos onde todos os objetos conhecem ponteiros para todos os outros, ou praticamente todos os outros, usando truques safados como embrulhar todo mundo em &lt;span style="font-weight: bold;"&gt;shared_ptr&lt;/span&gt; e tornando todas as classes &lt;span style="font-weight: bold;"&gt;enable_shared_from_this&lt;/span&gt; e olerê olará. Isto, é claro, se você tem um mínimo de conhecimento sobre C++ contemporâneo -- e se você está de fato escrevendo seu sistema em C++! -- e se você se importa com a memória. O sistema acima é "orientado a objetos". Muitos deles, embolados entre si.&lt;br /&gt;&lt;br /&gt;Quando você se propõe a fazer sistemas orientados a componentes, porém, o buraco se alarga e se torna mais profundo. Os componentes existem com o propósito de serem intercambiáveis. Você &lt;span style="font-weight: bold;"&gt;não tem&lt;/span&gt; componentes se você não pode tirar um deles e colocar outro no lugar &lt;span style="font-weight: bold;"&gt;impunemente&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Frequentemente, os responsáveis por sistemas spaghetti ou aberrações similares, diante dos problemas insuportáveis causados inevitavelmente pela baixa coesão e pelo alto acoplamento, tentam "componentizar" seus sistemas com o intuito de obter os benefícios maravilhosos oferecidos pelos livros.&lt;br /&gt;&lt;br /&gt;Vamos, então, pegar pedaços do sistema e enfiar dentro de DLLs!&lt;br /&gt;&lt;br /&gt; Certamente isto não funciona.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-6691953570210247646?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/6691953570210247646/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=6691953570210247646' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6691953570210247646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6691953570210247646'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/04/projeto-orientado-componentes-parte-i.html' title='Projeto Orientado a Componentes, parte I'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-8794746733950311116</id><published>2008-04-24T22:38:00.002-03:00</published><updated>2008-04-24T22:47:56.936-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='música'/><title type='text'>Pitty</title><content type='html'>Pitty.&lt;br /&gt;Eu estou ouvindo Pitty.&lt;br /&gt;A semana inteira.&lt;br /&gt;Obsessivamente.&lt;br /&gt;&lt;br /&gt;Eu herdei a máquina de um sujeito no trabalho, tem uma pasta "Música" cheia de tralha.&lt;br /&gt;Tem até o "Canto para Minha Morte", do Raul, que eu nunca consegui achar.&lt;br /&gt;&lt;br /&gt;Meu &lt;span style="font-style: italic;"&gt;player&lt;/span&gt; saiu do "Pink Floyd" e entrou em "Pitty".&lt;br /&gt;É impressionante.&lt;br /&gt;Eu não consigo parar. :-(&lt;br /&gt;&lt;br /&gt;A banda é razoável e a música é aquele rockzinho[tm] razoável; mas a minha pira é com o que ela &lt;span style="font-weight: bold;"&gt;diz&lt;/span&gt; nas músicas. Não é nada demais; por outro lado... Não sei que porra de fase é essa em que eu entrei. Deve ser o que as pessoas sentem lendo livros de auto-ajuda.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-8794746733950311116?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/8794746733950311116/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=8794746733950311116' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8794746733950311116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/8794746733950311116'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/04/pitty.html' title='Pitty'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-1671419607373969084</id><published>2008-04-19T08:31:00.002-03:00</published><updated>2008-05-01T13:41:40.726-03:00</updated><title type='text'>Televisão Digital</title><content type='html'>Pra quem ainda não sabe, eu dei uma saidinha da indústria da segurança, e estou agora trabalhando com a televisão digital.&lt;br /&gt;Essa semana cumpri minha primeira meta e construí uma aplicação para o &lt;span style="font-style: italic;"&gt;set top box&lt;/span&gt; capaz de controlar o &lt;span style="font-style: italic;"&gt;playback&lt;/span&gt; de vídeo.&lt;br /&gt;&lt;br /&gt;As capacidades do &lt;span style="font-style: italic;"&gt;set top box&lt;/span&gt; são muito legais.&lt;br /&gt;A televisão digital será um brinquedo muito maneiro.&lt;br /&gt;Falta pouco pra chegar ao consumidor.&lt;br /&gt;E todos rodarão meu &lt;span style="font-style: italic;"&gt;software&lt;/span&gt; em casa. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-1671419607373969084?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/1671419607373969084/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=1671419607373969084' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1671419607373969084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/1671419607373969084'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/04/televiso-digital.html' title='Televisão Digital'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-3951362272109205165</id><published>2008-04-13T22:05:00.004-03:00</published><updated>2008-05-01T13:43:42.946-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='filosofia'/><title type='text'>para Sofia sobre kung fu</title><content type='html'>2008-03-??&lt;br /&gt;&lt;br /&gt;Sofia-chan,&lt;br /&gt;&lt;br /&gt;hoje no treino coletivo do &lt;span style="font-style: italic;"&gt;mo kwoon&lt;/span&gt; tive a oportunidade de ver um si dai treinando com seu próprio si dai.&lt;br /&gt;[Nota: &lt;span style="font-style: italic;"&gt;mo kwoon&lt;/span&gt; é o local de treino de artes marciais; &lt;span style="font-style: italic;"&gt;si dai&lt;/span&gt; é um irmão mais novo entre os irmãos &lt;span style="font-style: italic;"&gt;kung fu&lt;/span&gt;.]&lt;br /&gt;&lt;br /&gt;Este &lt;span style="font-style: italic;"&gt;si dai si hing&lt;/span&gt;, coitado, deu um pouco de pena; atrapalhado com a responsabilidade, parecia mais encenando uma peça de teatro que treinando artes marciais.&lt;br /&gt;&lt;br /&gt;A dificuldade que eu observei está na vontade de ensinar uma determinada coisa e então construir uma situação onde isso é possível. Isto é, eu quero falar sobre isso, portanto você deve se posicionar de acordo para que o que eu estou dizendo seja fundamentado.&lt;br /&gt;&lt;br /&gt;Há pouco &lt;span style="font-style: italic;"&gt;kung fu&lt;/span&gt; nessa atitude. Esse constante "faz assin, agora faz assado, agora acontece como eu digo" me parece uso de &lt;span style="font-style: italic;"&gt;ba lek&lt;/span&gt; nesse contexto. A ferramenta do aprendizado, &lt;span style="font-style: italic;"&gt;chi sao&lt;/span&gt;, é suficiente para que as questões surjam naturalmente do resultado das ações.&lt;br /&gt;[Nota: &lt;span style="font-style: italic;"&gt;ba lek&lt;/span&gt; é a força aplicada contra a natureza das circunstâncias; &lt;span style="font-style: italic;"&gt;chi sao&lt;/span&gt; é o treino de combate simbólico do Ving Tsun, onde os dois braços se põe em contato.]&lt;br /&gt;&lt;br /&gt;Eu acho que é desnecessário ensinar qualquer uma coisa em particular, e acho que isso se torna cada vez mais evidente com a progressão dos níveis. Aquilo que é importante para cada um é guia suficiente para a introdução dos elementos do sistema de &lt;span style="font-style: italic;"&gt;kung fu&lt;/span&gt;. A própria pessoa, diante da dificuldade, bem, terá uma dificuldade; o desejo de transpô-la é suficiente para direcionar a sessão de treino aos elementos necessários.&lt;br /&gt;&lt;br /&gt;Esse pensamento pode, de certa forma, contradizer a forma sistêmica de transmitir o &lt;span style="font-style: italic;"&gt;kung fu&lt;/span&gt; -- ou talvez de desencorajá-la ou diminuir o seu valor.&lt;br /&gt;&lt;br /&gt;Eu não entendo as coisas dessa forma; entendo que o próprio sistema é um elemento proposto como solução na discussão que naturalmente segue à aproximação do indivíduo e da família &lt;span style="font-style: italic;"&gt;kung fu&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Quando o indivíduo aborda a família &lt;span style="font-style: italic;"&gt;kung fu&lt;/span&gt;, ele tem um problema, um propósito; que seja obter a capacidade de lutar. Dado isto, é natural que o sistema seja apresentado e que o indivíduo ingresse na família.&lt;br /&gt;&lt;br /&gt;Mas quem irá parar um estranho na rua para dizer que o problema dele se resolve com Ving Tsun? Isso é tolice. Da mesma forma, no &lt;span style="font-style: italic;"&gt;chi sao&lt;/span&gt; não se deve parar o &lt;span style="font-style: italic;"&gt;si dai&lt;/span&gt; para discursar sobre um problema que ele ainda não tem -- ou melhor, para um problema que ainda não ocorreu a ele.&lt;br /&gt;&lt;br /&gt;Há um contraponto, no meu pensamento, entre a estase e a dinâmica do &lt;span style="font-style: italic;"&gt;kung fu&lt;/span&gt; em um praticante, no tocante ao seu desenvolvimento. É natural, e indiscutível, que um &lt;span style="font-style: italic;"&gt;si hing&lt;/span&gt; cuja responsabilidade é de estimular o &lt;span style="font-style: italic;"&gt;chi sao&lt;/span&gt; do &lt;span style="font-style: italic;"&gt;si dai&lt;/span&gt; não deve simplesmente aceitar a situação totalmente como é -- da mesma forma como ele busca melhorar o próprio &lt;span style="font-style: italic;"&gt;kung fu&lt;/span&gt;, ele busca estimular o &lt;span style="font-style: italic;"&gt;kung fu&lt;/span&gt; do &lt;span style="font-style: italic;"&gt;si dai&lt;/span&gt;. Mas isso não é contraditório? Estimular é intencionar que o objeto mude. Como você pode permitir que uma pessoa seja como ela é mas estimulá-la a mudar?&lt;br /&gt;&lt;br /&gt;Uma forma de resolver este dilema é buscar no indivíduo o que é sua essência e o que é mero comportamento decorrente de uma história de vida -- talvez. Eu acho perigoso fragmentar o indivíduo desta forma e resolvo na prática este dilema agindo de acordo com a intuição. Eu admito que, apesar de tudo, resta no processo de aprendizado uma atitude fundamental do tipo: você é bom como você é em quase sua totalidade exceto... nisto. Acredito que, do ponto de vista de quem transmite o &lt;span style="font-style: italic;"&gt;kung fu&lt;/span&gt;, o que a pessoa é não importa, ou, é sempre aceitável; como ela se comporta pode melhorar.&lt;br /&gt;&lt;br /&gt;Para nossa família &lt;span style="font-style: italic;"&gt;kung fu&lt;/span&gt; a natureza desse "pode melhorar" é clara: melhorar é expressar a si mesmo com melhor posicionamento, melhor distância, melhor &lt;span style="font-style: italic;"&gt;timing&lt;/span&gt;, melhor energia. Além disso, melhor não é mais, melhor é justo; o tanto quanto necessário para realizar sua vontade.&lt;br /&gt;[Nota: &lt;span style="font-style: italic;"&gt;timing&lt;/span&gt; é timing.]&lt;br /&gt;&lt;br /&gt;O que é a vontade do indivíduo é algo intocável pela crítica; não faz sentido dizer ao outro que ele não deve querer o que ele quer. Este fato escapa a muitos processos didáticos, infelizmente. O impulso de impor ao outro uma forma para o seu mundo é natural ao homem; ele é inescapável de certa forma, ao bicho que se comunica de forma tão sofisticada como nós.&lt;br /&gt;&lt;br /&gt;Quando nós falamos, nós entregamos ao outro a forma da nossa mente, a estrutura do nosso mundo. É natural que, então, a forma da mente do outro, seu mundo, se ponha a perigo de transmutação. Mesmo a mais singela apresentação de um fato isolado -- uma experiência sensorial! -- apresenta um elemento potencialmente desestruturante, reestruturante. Que dirá um contra-ponto, uma contradição.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;chi sao&lt;/span&gt; é como o debate dos corpos; esta é a minha estrutura, esta é a sua estrutura, o que acontece quando estas coisas são postas em contato? Apenas esta atitude inicial é suficiente para prover todas as condições necessárias ao aprendizado.&lt;br /&gt;&lt;br /&gt;O debate, infelizmente, não possui o tipo de ligação com o corpo que o &lt;span style="font-style: italic;"&gt;chi sao&lt;/span&gt; tem, de modo que muitas "vitórias" em debates são... ilegítimas, para dizer o mínimo. O &lt;span style="font-style: italic;"&gt;ba lek&lt;/span&gt;, e como lidar com ele, é uma arte que não sei onde aprender, nesse contexto.&lt;br /&gt;&lt;br /&gt;Sei que o Ving Tsun me habilitou a construir minha própria arte e só.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-3951362272109205165?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/3951362272109205165/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=3951362272109205165' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/3951362272109205165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/3951362272109205165'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/04/para-sofia-sobre-kung-fu.html' title='para Sofia sobre kung fu'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-3194820270244944501</id><published>2008-04-06T19:24:00.003-03:00</published><updated>2008-04-06T19:30:52.354-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Projeto: Eclipse + CppUnit</title><content type='html'>Estou prestes a apresentar para o ccppbrasil.org um projeto de integração da CppUnit com o Eclipse TPTP.&lt;br /&gt;&lt;br /&gt;Será uma oportunidade interessante de aprender a desenvolver sobre a plataforma OSGi e uma maneira de estimular a comunidade a aplicar as técnicas de testes de unidade.&lt;br /&gt;&lt;br /&gt;A arquitetura do TPTP Test é assim: para um determinado "tipo de teste" registra-se um adaptador de implantação, um adaptador de ambiente e um adaptador de execução, bem como um &lt;span style="font-style: italic;"&gt;runner&lt;/span&gt; para este "tipo de teste" no agente remoto.&lt;br /&gt;&lt;br /&gt;A tarefa será implementar esses adaptadores para programas executáveis nativos e bibliotecas compartilhadas, resolvendo LD_LIBRARY_PATH e assuntos relacionados, depois implementar uma biblioteca de suporte em C para que programas joguem na saída padrão o histórico de execução da forma correta e por fim implementar com um &lt;span style="font-style: italic;"&gt;wrapper&lt;/span&gt; Java um &lt;span style="font-style: italic;"&gt;runner&lt;/span&gt; para suites de teste CppUnit na forma de &lt;span style="font-style: italic;"&gt;plug-in&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Na verdade as tarefas ainda estão se abrindo porque não consegui dominar o problema de projeto completamente, o que me aborreceu um pouco, já que vou passar a semana ocupado com outros assuntos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-3194820270244944501?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/3194820270244944501/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=3194820270244944501' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/3194820270244944501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/3194820270244944501'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/04/projeto-eclipse-cppunit.html' title='Projeto: Eclipse + CppUnit'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-5053233832723769203</id><published>2008-04-02T23:29:00.003-03:00</published><updated>2008-04-02T23:53:06.339-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Encontro de Nerds em São Paulo</title><content type='html'>Ora, &lt;a href="http://picasaweb.google.com/ccppmeetings/4oEncontroDeProgramadoresEAficcionadosDoGrupoCCBrasilSampa"&gt;aqui estamos nós&lt;/a&gt;!&lt;br /&gt;O Encontro foi muito bom, evoluindo o formato do anterior.&lt;br /&gt;Os nerds são inteligentes e conhecedoras das coisas, e bebem bastante cerveja e são engraçados demais.&lt;br /&gt;Nosso trabalho continua no site &lt;a href="http://ccppbrasil.org/"&gt;ccppbrasil.org&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-5053233832723769203?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/5053233832723769203/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=5053233832723769203' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/5053233832723769203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/5053233832723769203'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/04/encontro-de-nerds-em-so-paulo.html' title='Encontro de Nerds em São Paulo'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-423385270669219131</id><published>2008-03-29T06:18:00.003-03:00</published><updated>2008-03-29T06:25:13.801-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Quarto Encontro CCPP Brasil</title><content type='html'>Cheguei há pouco na rodoviária de São Paulo.&lt;br /&gt;&lt;br /&gt;Entrei em uma lan house pra anotar os endereços de que eu precisava. ¬¬&lt;br /&gt;&lt;br /&gt;Cheguei cedo demais aqui; o ônibus fez a viagem em cinco horas e meia.&lt;br /&gt;A turma só vai acordar depois das 07h, provavelmente às 08h.&lt;br /&gt;&lt;br /&gt;Vou passar o tempo comendo e fumando.&lt;br /&gt;&lt;br /&gt;Desta vez vou ficar hospedado no Formule One Jardins.&lt;br /&gt;A estação de metrô da vez é Trianon-Masp.&lt;br /&gt;Pra facilitar a minha vida comecei &lt;a href="http://maps.google.com/maps/ms?hl=pt-BR&amp;amp;ptab=2&amp;amp;ie=UTF8&amp;amp;oe=UTF8&amp;amp;msa=0&amp;amp;msid=109942149518875622131.00044948f80b64f823f88"&gt;este mapa&lt;/a&gt; com marcadores para as estações do metrô.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-423385270669219131?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/423385270669219131/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=423385270669219131' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/423385270669219131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/423385270669219131'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/03/quarto-encontro-ccpp-brasil.html' title='Quarto Encontro CCPP Brasil'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-7109447482082637298</id><published>2008-03-24T11:17:00.003-03:00</published><updated>2008-03-24T11:27:44.210-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>OpenMP</title><content type='html'>Reavaliar as hipóteses vigentes é sempre interessante quando você já possui alguma experiência; um retorno à "infância" do aprendizado, talvez, a uma época em que a sua sensação de segurança era mínima.&lt;br /&gt;&lt;br /&gt;Acrescentar uma anotação tão singela quanto:&lt;br /&gt;&lt;blockquote&gt;#pragma omp parallel&lt;br /&gt;&lt;/blockquote&gt;causou um desastre tremendo em um &lt;span style="font-style: italic;"&gt;loop &lt;/span&gt;pequenininho dentro de pixman-mmx.c nesse fim de semana, experimentando com o André um novo caminho de otimização.&lt;br /&gt;&lt;br /&gt;Se o seu compilador implementa OpenMP a diretiva acima transforma o bloco do &lt;span style="font-style: italic;"&gt;loop &lt;/span&gt;seguinte de modo a despachar iterações individuais a um time de &lt;span style="font-style: italic;"&gt;threads &lt;/span&gt;de trabalho.&lt;br /&gt;&lt;br /&gt;Quando a hipótese de que uma iteração será seguida de outra some dependências entre acessos a dados surgem: enquanto uma iteração lê um endereço outra iteração escreve nesse enredeço, &lt;span style="font-weight: bold;"&gt;boom&lt;/span&gt;. Experimentamos muitos SIGSEGV com este &lt;span style="font-style: italic;"&gt;loop&lt;/span&gt;. Eventualmente a implementação foi transformada de modo a eliminar essas dependências.&lt;br /&gt;&lt;br /&gt;É interessante que se você não tem em mente essa questão não se dará ao trabalho e seus &lt;span style="font-style: italic;"&gt;loops&lt;/span&gt; não terão iterações independentes. Porém, mesmo sem OpenMP, o GCC 4.3 produziu uma melhoria impressionante na execução deste código; certamente porque seus otimizadores aproveitaram novas oportunidades oferecidas por iterações livres de &lt;span style="font-style: italic;"&gt;side effects&lt;/span&gt; observáveis.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-7109447482082637298?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/7109447482082637298/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=7109447482082637298' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/7109447482082637298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/7109447482082637298'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/03/openmp.html' title='OpenMP'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-6071450799067715083</id><published>2008-03-15T13:06:00.001-03:00</published><updated>2008-03-15T13:11:10.755-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>ccppbrasil.org</title><content type='html'>yo! _o/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-6071450799067715083?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/6071450799067715083/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=6071450799067715083' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6071450799067715083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/6071450799067715083'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/03/ccppbrasilorg.html' title='ccppbrasil.org'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-7986252810238680293</id><published>2008-03-12T17:20:00.003-03:00</published><updated>2008-05-01T13:41:40.728-03:00</updated><title type='text'>argh!</title><content type='html'>Acabei de perceber que estou a dias escrevendo em um dos  blogs antigos ainda disponíveis pra mim no painel do Blogger.&lt;br /&gt;&lt;br /&gt;O que vocês perderam nos últimos dias?&lt;br /&gt;&lt;br /&gt;Fiz escalada pela primeira vez, na via MM do morro da Babilônia.&lt;br /&gt;&lt;br /&gt;Estarei novamente dia 29 em São Paulo, parte da organização do &lt;a href="http://www.cbrasil.org/wiki/index.php?title=Quarto_Encontro_de_Programadores"&gt;Quarto Encontro de Programadores de C e C++ do Brasil&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Estou, após uma longa volta pelo Centro do Rio de Janeiro, de volta à rua da Assembléia, para trabalhar na &lt;a href="http://www.quality.com.br/"&gt;Quality Software&lt;/a&gt; com a televisão digital.&lt;br /&gt;&lt;br /&gt;Vou ser papai.&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;okay, essa última é mentira.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-7986252810238680293?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/7986252810238680293/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=7986252810238680293' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/7986252810238680293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/7986252810238680293'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/03/argh.html' title='argh!'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3006142001944566780.post-2732149719771291807</id><published>2008-03-12T17:14:00.000-03:00</published><updated>2009-11-24T20:58:28.824-02:00</updated><title type='text'>De volta às origens</title><content type='html'>Depois de alguns anos perambulando pelo Centro do Rio de Janeiro, estarei em Abril de volta à rua da Assembléia.&lt;br /&gt;&lt;br /&gt;lar, doce lar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3006142001944566780-2732149719771291807?l=blog.pedro.lamarao.nom.br' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.pedro.lamarao.nom.br/feeds/2732149719771291807/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3006142001944566780&amp;postID=2732149719771291807' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2732149719771291807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3006142001944566780/posts/default/2732149719771291807'/><link rel='alternate' type='text/html' href='http://blog.pedro.lamarao.nom.br/2008/03/de-volta-as-origens.html' title='De volta às origens'/><author><name>Pedro Lamarão</name><uri>https://profiles.google.com/117815968071916408257</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-SqyK9g6gq3U/AAAAAAAAAAI/AAAAAAAAAAA/cDD7qL_kWlI/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
