<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<feed xmlns="http://www.w3.org/2005/Atom">

	<title>Planeta PythonBrasil</title>
	<link rel="self" href="http://www.python.org.br/planet/atom.xml"/>
	<link href="http://www.python.org.br/planet/"/>
	<id>http://www.python.org.br/planet/atom.xml</id>
	<updated>2009-07-04T20:44:33+00:00</updated>
	<generator uri="http://www.planetplanet.org/">Planet/2.0 +http://www.planetplanet.org</generator>

	<entry>
		<title type="html">A cidade da ci&#234;ncia</title>
		<link href="http://www.ricbit.com/2009/07/cidade-da-ciencia.html"/>
		<id>tag:blogger.com,1999:blog-6306509703738480474.post-6619825040542849187</id>
		<updated>2009-07-04T19:17:00+00:00</updated>
		<content type="html">Leitores atentos devem ter notado que o intervalo entre os dois &#250;ltimos posts foi maior que o normal. Mas foi por um bom motivo: eu estava casando! Foi uma correria; entre cart&#243;rios, mudan&#231;a e lua de mel, nem eu tive tempo de escrever, e nem minha esposa de desenhar as ilustra&#231;&#245;es. Mas valeu a pena, &#233; claro :)&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href=&quot;http://www.ricbit.com/uploaded_images/correria-788932.jpg&quot;&gt;&lt;img src=&quot;http://www.ricbit.com/uploaded_images/correria-788910.jpg&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Para come&#231;ar a lua de mel, nenhuma cidade poderia ser t&#227;o apropriada como Paris. Para o casal, Paris &#233; a cidade dos amantes. Para a minha esposa, Paris &#233; a cidade dos artistas. Mas para mim, Paris &#233; especial por ser a cidade da ci&#234;ncia.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;De fato, desde a revolu&#231;&#227;o francesa, os parisienses se orgulham em manter os ideais do &lt;a href=&quot;http://en.wikipedia.org/wiki/Age_of_Enlightenment&quot;&gt;Iluminismo&lt;/a&gt; (sendo essa uma das poss&#237;veis origens de um famoso ep&#237;teto de Paris: a cidade-luz). O &lt;a href=&quot;http://en.wikipedia.org/wiki/La%C3%AFcit%C3%A9&quot;&gt;laicismo&lt;/a&gt; &#233; presente logo no primeiro item da constitui&#231;&#227;o francesa, e a cultura cient&#237;fica permeia a cidade at&#233; nos nomes das ruas (voc&#234; pode morar na &lt;a href=&quot;http://maps.google.com.br/maps/ms?ie=UTF8&amp;split=0&amp;gl=br&amp;ei=DcpGSsGGEtCEtwfisrCMCg&amp;hl=pt-BR&amp;t=h&amp;msa=0&amp;msid=108977304071474234392.00046d5eb3a1f33e9afd9&amp;ll=48.870657,2.298524&amp;spn=0.010981,0.021865&amp;z=16&quot;&gt;esquina da Rua Kepler com a Rua Galileu&lt;/a&gt;, pertinho da Rua Newton e da Rua Euler). E isso sem contar que a cidade possui um enorme museu de ci&#234;ncias, o &lt;a href=&quot;http://www.cite-sciences.fr/english/index.php&quot;&gt;Cit&#232; des Sciences et de l'Industrie&lt;/a&gt;.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Mas o principal motivo mesmo para eu considerar Paris como a cidade da ci&#234;ncia data de 1889, ano em que foi terminado o maior monumento &#224; ci&#234;ncia j&#225; constru&#237;do: a Torre Eiffel!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_TijAN4NNGkA/SkcGVKLFM9I/AAAAAAAAllA/mmG9cPIng20/s1600-h/torre+eiffel+%282%29.jpg&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_TijAN4NNGkA/SkcGVKLFM9I/AAAAAAAAllA/mmG9cPIng20/s400/torre+eiffel+%282%29.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5352253642730976210&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A Torre Eiffel foi constru&#237;da para a Exposi&#231;&#227;o Universal que comemorava o centen&#225;rio da Revolu&#231;&#227;o Francesa, e ela era uma celebra&#231;&#227;o ao triunfo da tecnologia: em sua &#233;poca, era o mais alto monumento criado pelo homem; e permaneceu assim por 40 anos, at&#233; ser desbancada pelo Chrysler Building.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A torre tamb&#233;m era o estado da arte da engenharia do s&#233;culo XIX. O seu criador, Gustave Eiffel, usou em seu projeto m&#233;todos geom&#233;tricos para minimizar o efeito do vento, e &lt;a href=&quot;http://www.sciencedaily.com/releases/2005/01/050106111209.htm&quot;&gt;s&#243; recentemente&lt;/a&gt; conseguiram resolver de forma anal&#237;tica a equa&#231;&#227;o que define a curva de seu perfil, uma exponencial. A solu&#231;&#227;o geom&#233;trica de Eiffel era t&#227;o precisa, que mesmo sob ventos fortes, o topo da torre desloca apenas 13cm (como compara&#231;&#227;o, &#233; menos do que o topo desloca por dilata&#231;&#227;o: se o sol bate de um lado da torre enquanto o outro est&#225; na sombra, a torre desloca 18cm).&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Mas das homenagens &#224; ci&#234;ncia na torre, a minha preferida &#233; uma mais sutil, que muitos daqueles que a visitam passam sem perceber. Logo abaixo do primeiro andar, est&#227;o gravados em relevo os nomes de 72 cientistas franceses:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_TijAN4NNGkA/SkgQuanz0BI/AAAAAAAAln8/8hS7Xm7iSEo/s1600-h/400px-Eiffel_names_highlight.jpg&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_TijAN4NNGkA/SkgQuanz0BI/AAAAAAAAln8/8hS7Xm7iSEo/s400/400px-Eiffel_names_highlight.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5352546546736156690&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Poinsot, Foucault, Delaunay&lt;/i&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Na primeira vez que vi, reconheci de imediato v&#225;rios nomes, como Lavoisier, Amp&#232;re, Laplace. Mas muitos outros eu n&#227;o identifiquei, e resolvi matar a curiosidade online. Qual n&#227;o foi a minha surpresa ao descobrir que alguns eram t&#227;o obscuros que &lt;a href=&quot;http://en.wikipedia.org/wiki/The_72_names_on_the_Eiffel_Tower&quot;&gt;nem a wikipedia&lt;/a&gt; os conhecia!&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sendo assim, resolvi arrega&#231;ar as mangas e procurar quem eram os 72 cientistas homenageados pelo Eiffel. Abaixo, a lista completa de cientistas e alguns de seus feitos, separados pelo lado da torre em que aparecem:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt; &lt;/i&gt;&lt;/div&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_TijAN4NNGkA/Sk-iYoy_AhI/AAAAAAAAmPg/EY3xC7KuIMI/s1600-h/trocadero.jpg&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_TijAN4NNGkA/Sk-iYoy_AhI/AAAAAAAAmPg/EY3xC7KuIMI/s400/trocadero.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5354677026118631954&quot; /&gt;&lt;/a&gt;&lt;div&gt;&lt;i&gt;Lado do Trocadero&lt;/i&gt;&lt;/div&gt; &lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Seguin&lt;/b&gt;: Inventor da &lt;a href=&quot;http://en.wikipedia.org/wiki/Suspension_bridge&quot;&gt;ponte p&#234;nsil&lt;/a&gt; moderna.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Lalande&lt;/b&gt;: Astr&#244;nomo que nomeou a &lt;a href=&quot;http://en.wikipedia.org/wiki/Felis_%28constellation%29&quot;&gt;constela&#231;&#227;o do Gato&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Tresca&lt;/b&gt;: Criou a primeira barra de platina que serviu de refer&#234;ncia de comprimento do &lt;a href=&quot;http://en.wikipedia.org/wiki/Metric_system&quot;&gt;sistema m&#233;trico&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Poncelet&lt;/b&gt;: Co-autor do &lt;a href=&quot;http://en.wikipedia.org/wiki/Poncelet-Steiner_theorem&quot;&gt;teorema de Poncelet-Steiner&lt;/a&gt; da geometria.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Bresse&lt;/b&gt;: Pioneiro dos &lt;a href=&quot;http://www.infibeam.com/Books/info/Jacques-Antoine-Charles-Bresse/Water-Wheels-or-Hydraulic-Motors/1410207110.html&quot;&gt;motores hidr&#225;ulicos&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Lagrange&lt;/b&gt;: Respons&#225;vel pelo &lt;a href=&quot;http://en.wikipedia.org/wiki/Lagrangian&quot;&gt;Lagrangiano&lt;/a&gt; da f&#237;sica, pelos &lt;a href=&quot;http://en.wikipedia.org/wiki/Lagrangian_point&quot;&gt;Pontos Lagragianos&lt;/a&gt; da astronomia e pelos &lt;a href=&quot;http://en.wikipedia.org/wiki/Lagrange_polynomial&quot;&gt;polin&#244;mios de Lagrange&lt;/a&gt; da &#225;lgebra.&lt;/div&gt;&lt;div&gt;&lt;b&gt;B&#233;langer&lt;/b&gt;: Criador da &lt;a href=&quot;http://en.wikipedia.org/wiki/Hydraulic_jump&quot;&gt;equa&#231;&#227;o de B&#233;langer&lt;/a&gt; para o ressalto hidr&#225;ulico.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Cuvier&lt;/b&gt;: Paleont&#243;logo, foi o primeiro a provar que elefantes indianos, africanos e mamutes &lt;a href=&quot;http://en.wikipedia.org/wiki/Georges_Cuvier&quot;&gt;s&#227;o esp&#233;cies diferentes&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Laplace&lt;/b&gt;: Criador das &lt;a href=&quot;http://en.wikipedia.org/wiki/Laplace_transform&quot;&gt;transformadas de Laplace&lt;/a&gt; usadas no c&#225;lculo de transientes el&#233;tricos.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Dulong&lt;/b&gt;: Co-autor da &lt;a href=&quot;http://en.wikipedia.org/wiki/Law_of_Dulong_and_Petit&quot;&gt;lei de Dulong-Petit&lt;/a&gt; da termodin&#226;mica.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Chasles&lt;/b&gt;: Autor dos &lt;a href=&quot;http://en.wikipedia.org/wiki/Chasles%27_theorem&quot;&gt;teoremas de Chasles&lt;/a&gt; em geometria e f&#237;sica.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Lavoisier&lt;/b&gt;: Autor da &lt;a href=&quot;http://en.wikipedia.org/wiki/Law_of_conservation_of_mass&quot;&gt;lei da conserva&#231;&#227;o da massa&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Amp&#232;re&lt;/b&gt;: Autor da &lt;a href=&quot;http://en.wikipedia.org/wiki/Amp%C3%A8re%27s_circuital_law&quot;&gt;lei de Amp&#232;re&lt;/a&gt; do eletromagnetismo.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Chevreul&lt;/b&gt;: Inventor da &lt;a href=&quot;http://en.wikipedia.org/wiki/Margarine&quot;&gt;margarina&lt;/a&gt;, afinal, culin&#225;ria &#233; qu&#237;mica aplicada.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Flachat&lt;/b&gt;: Engenheiro respons&#225;vel pelo terminal de &lt;a href=&quot;http://en.wikipedia.org/wiki/Gare_Saint-Lazare&quot;&gt;Gare Saint-Lazare&lt;/a&gt;, em Paris.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Navier&lt;/b&gt;: Co-autor das &lt;a href=&quot;http://en.wikipedia.org/wiki/Navier-Stokes_equations&quot;&gt;equa&#231;&#245;es de Navier-Stokes&lt;/a&gt; da mec&#226;nica dos fluidos.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Legendre&lt;/b&gt;: Criador do &lt;a href=&quot;http://en.wikipedia.org/wiki/Legendre_symbol&quot;&gt;s&#237;mbolo de Legendre&lt;/a&gt; usado na teoria dos n&#250;meros.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Chaptal&lt;/b&gt;: Criador da &lt;a href=&quot;http://www.diariodovinho.com/2009/03/chaptalizacao-o-milagre-do-alcool-favor.html&quot;&gt;chaptaliza&#231;&#227;o&lt;/a&gt;, t&#233;cnica para aumentar o teor alc&#243;olico do vinho.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;i&gt; &lt;/i&gt;&lt;/div&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_TijAN4NNGkA/Sk-iK201EQI/AAAAAAAAmPY/J9RtKOon15o/s1600-h/rio.jpg&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_TijAN4NNGkA/Sk-iK201EQI/AAAAAAAAmPY/J9RtKOon15o/s400/rio.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5354676789366296834&quot; /&gt;&lt;/a&gt;&lt;div&gt;&lt;i&gt;Lado da ponte de Grenelle&lt;/i&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Jamin&lt;/b&gt;: Criador do &lt;a href=&quot;http://en.wikipedia.org/wiki/Jamin_interferometer&quot;&gt;interfer&#244;metro de Jamin&lt;/a&gt; usado na an&#225;lise de gases.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Gay-Lussac&lt;/b&gt;: Autor das &lt;a href=&quot;http://en.wikipedia.org/wiki/Gay-Lussac's_law&quot;&gt;leis de Gay-Lussac&lt;/a&gt; da termodin&#226;mica.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Fizeau&lt;/b&gt;: Criou o primeiro aparato capaz de &lt;a href=&quot;http://en.wikipedia.org/wiki/Fizeau-Foucault_apparatus&quot;&gt;medir a velocidade da luz&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Schneider&lt;/b&gt;: Construiu a &lt;a href=&quot;http://www.britannica.com/EBchecked/topic/527844/Eugene-Schneider&quot;&gt;primeira locomotiva a vapor&lt;/a&gt; da Fran&#231;a.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Le Chatelier&lt;/b&gt;: Autor do &lt;a href=&quot;http://pt.wikipedia.org/wiki/Princ%C3%ADpio_de_Le_Ch%C3%A2telier&quot;&gt;princ&#237;pio de Le Chatelier&lt;/a&gt; nas rea&#231;&#245;es qu&#237;micas em equil&#237;brio.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Berthier&lt;/b&gt;: Descobridor da &lt;a href=&quot;http://en.wikipedia.org/wiki/Bauxite&quot;&gt;bauxita&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Barral&lt;/b&gt;: Pioneiro na extra&#231;&#227;o da &lt;a href=&quot;http://en.wikipedia.org/wiki/Nicotine&quot;&gt;nicotina&lt;/a&gt; a partir da folha de tabaco.&lt;/div&gt;&lt;div&gt;&lt;b&gt;De Dion&lt;/b&gt;: Criador do primeiro &lt;a href=&quot;http://fr.wikipedia.org/wiki/Hangar_Y&quot;&gt;hangar para dirig&#237;veis&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Go&#252;in&lt;/b&gt;: Introduziu as pontes de &lt;a href=&quot;http://pt.wikipedia.org/wiki/Rebite&quot;&gt;chapas rebitadas&lt;/a&gt; na Fran&#231;a.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Jousselin&lt;/b&gt;: Projetista do &lt;a href=&quot;http://fr.wikipedia.org/wiki/Canal_lat%C3%A9ral_%C3%A0_la_Loire&quot;&gt;canal do rio Loire&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Broca&lt;/b&gt;: Anatomista que estudou a &lt;a href=&quot;http://en.wikipedia.org/wiki/Broca's_area&quot;&gt;regi&#227;o de Broca&lt;/a&gt; no c&#233;rebro humano.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Becquerel&lt;/b&gt;: Ganhador do Nobel como descobridor da &lt;a href=&quot;http://en.wikipedia.org/wiki/Radioactivity&quot;&gt;radiatividade&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Coriolis&lt;/b&gt;: Descobridor do &lt;a href=&quot;http://en.wikipedia.org/wiki/Coriolis_force&quot;&gt;efeito Coriolis&lt;/a&gt; em rota&#231;&#245;es.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Cail&lt;/b&gt;: Engenheiro respons&#225;vel pelo impressionante &lt;a href=&quot;http://en.wikipedia.org/wiki/Fades_viaduct&quot;&gt;viaduto de Fades&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Triger&lt;/b&gt;: Criador do &lt;a href=&quot;http://dictionary.reference.com/browse/triger+process?qsrc=2446&quot;&gt;processo de Triger&lt;/a&gt; para cavar funda&#231;&#245;es de pontes.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Giffard&lt;/b&gt;: Inventor do primeiro &lt;a href=&quot;http://en.wikipedia.org/wiki/Airship&quot;&gt;dirig&#237;vel a vapor&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Perrier&lt;/b&gt;: Um dos primeiros a fotografar o &lt;a href=&quot;http://pt.wikipedia.org/wiki/Tr%C3%A2nsito_de_V%C3%AAnus&quot;&gt;tr&#226;nsito de V&#234;nus&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Sturm&lt;/b&gt;: Conhecido pelas &lt;a href=&quot;http://mathworld.wolfram.com/SturmFunction.html&quot;&gt;fun&#231;&#245;es de Sturm&lt;/a&gt; da &#225;lgebra.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;i&gt; &lt;/i&gt;&lt;/div&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_TijAN4NNGkA/Sk-ip7K9AeI/AAAAAAAAmPo/_OedJYKkLSs/s1600-h/campo+de+marte.jpg&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_TijAN4NNGkA/Sk-ip7K9AeI/AAAAAAAAmPo/_OedJYKkLSs/s400/campo+de+marte.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5354677323108778466&quot; /&gt;&lt;/a&gt;&lt;div&gt;&lt;i&gt;Lado do Campo de Marte&lt;/i&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Cauchy&lt;/b&gt;: Co-autor da &lt;a href=&quot;http://en.wikipedia.org/wiki/Cauchy%E2%80%93Schwarz_inequality&quot;&gt;desigualdade de Cauchy-Schwarz&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Belgrand&lt;/b&gt;: Projetista do &lt;a href=&quot;http://en.wikipedia.org/wiki/Sanitary_sewer&quot;&gt;sistema de esgotos&lt;/a&gt; de Paris.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Regnault&lt;/b&gt;: Estudioso dos gases, em sua homenagem a &lt;a href=&quot;http://en.wikipedia.org/wiki/Ideal_gas_constant&quot;&gt;constante dos gases ideais&lt;/a&gt; recebeu a letra R.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Fresnel&lt;/b&gt;: Autor da &lt;a href=&quot;http://en.wikipedia.org/wiki/Fresnel_equations&quot;&gt;lei de Fresnel&lt;/a&gt; para refra&#231;&#227;o de ondas.&lt;/div&gt;&lt;div&gt;&lt;b&gt;De Prony&lt;/b&gt;: Autor da &lt;a href=&quot;http://en.wikipedia.org/wiki/Prony_equation&quot;&gt;equa&#231;&#227;o de Prony&lt;/a&gt; para perda de carga hidr&#225;ulica.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Vicat&lt;/b&gt;: Inventor do &lt;a href=&quot;http://en.wikipedia.org/wiki/Cement&quot;&gt;cimento&lt;/a&gt; moderno.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Ebelmen&lt;/b&gt;: Descobridor do &lt;a href=&quot;http://en.wikipedia.org/wiki/Carbon_cycle&quot;&gt;ciclo geoqu&#237;mico do carbono&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Coulomb&lt;/b&gt;: Autor da &lt;a href=&quot;http://en.wikipedia.org/wiki/Coulomb's_law&quot;&gt;lei de Coulomb&lt;/a&gt; para cargas el&#233;tricas.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Poinsot&lt;/b&gt;: Inventor do &lt;a href=&quot;http://en.wikipedia.org/wiki/Poinsot's_construction&quot;&gt;elips&#243;ide de Poinsot&lt;/a&gt; na mec&#226;nica de corpo r&#237;gido.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Foucault&lt;/b&gt;: Descobridor das &lt;a href=&quot;http://en.wikipedia.org/wiki/Eddy_current&quot;&gt;correntes de Foucault&lt;/a&gt; do eletromagnetismo.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Delaunay&lt;/b&gt;: Estudou o &lt;a href=&quot;http://en.wikipedia.org/wiki/Earth-Moon-Sun_system&quot;&gt;problema dos tr&#234;s corpos&lt;/a&gt; aplicado ao sistema Sol-Terra-Lua.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Morin&lt;/b&gt;: Modelou a &lt;a href=&quot;http://pt.wikipedia.org/wiki/Atrito&quot;&gt;for&#231;a de atrito est&#225;tico&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Ha&#252;y&lt;/b&gt;: Autor da &lt;a href=&quot;http://www.minsocam.org/msa/collectors_corner/arc/hauyviii.htm&quot;&gt;lei de Ha&#252;y&lt;/a&gt; da cristalografia.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Combes&lt;/b&gt;: Estudioso do problema da &lt;a href=&quot;http://en.wikipedia.org/wiki/Underground_mine_ventilation&quot;&gt;ventila&#231;&#227;o em minas&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Th&#233;nard&lt;/b&gt;: Descobridor da &lt;a href=&quot;http://en.wikipedia.org/wiki/Hydrogen_peroxide&quot;&gt;&#225;gua oxigenada&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Arago&lt;/b&gt;: Realizou o &lt;a href=&quot;http://www.metacafe.com/watch/1394811/bend_light_around_coin_arago_spot/&quot;&gt;experimento de Arago&lt;/a&gt;, que comprova a natureza ondulat&#243;ria da luz.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Poisson&lt;/b&gt;: Autor da &lt;a href=&quot;http://en.wikipedia.org/wiki/Poisson_distribution&quot;&gt;distribui&#231;&#227;o de Poisson&lt;/a&gt; na estat&#237;stica.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Monge&lt;/b&gt;: Autor do &lt;a href=&quot;http://en.wikipedia.org/wiki/Monge's_theorem&quot;&gt;teorema de Monge&lt;/a&gt; da geometria. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;i&gt; &lt;/i&gt;&lt;/div&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_TijAN4NNGkA/Sk-i-ws2yqI/AAAAAAAAmPw/HgVZ6X0ZzaM/s1600-h/rio2.jpg&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_TijAN4NNGkA/Sk-i-ws2yqI/AAAAAAAAmPw/HgVZ6X0ZzaM/s400/rio2.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5354677681075440290&quot; /&gt;&lt;/a&gt;&lt;div&gt;&lt;i&gt;Lado da Sacre Coeur&lt;/i&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Petiet&lt;/b&gt;: Criador de &lt;a href=&quot;http://www.dself.dsl.pipex.com/MUSEUM/LOCOLOCO/petiet/frexp.htm&quot;&gt;locomotivas&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Daguerre&lt;/b&gt;: Inventor do &lt;a href=&quot;http://en.wikipedia.org/wiki/Daguerreotype&quot;&gt;daguerre&#243;tipo&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Wurtz&lt;/b&gt;: Criador da &lt;a href=&quot;http://en.wikipedia.org/wiki/Wurtz_reaction&quot;&gt;rea&#231;&#227;o de Wurtz&lt;/a&gt; da qu&#237;mica.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Le Verrier&lt;/b&gt;: Um dos descobridores do &lt;a href=&quot;http://en.wikipedia.org/wiki/Discovery_of_Neptune&quot;&gt;planeta Netuno&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Perdonnet&lt;/b&gt;: Construiu as &lt;a href=&quot;http://books.google.com.br/books?id=6gwDAAAAYAAJ&amp;pg=RA1-PA154&amp;lpg=RA1-PA154&amp;dq=Albert+Auguste+Perdonnet&amp;source=bl&amp;ots=q36CpcqSyW&amp;sig=cofLUTrsCrjX77EkkE5UwOD75Vs&amp;hl=pt-BR&amp;ei=mqFOSo_XI9OetgfY58iqBA&amp;sa=X&amp;oi=book_result&amp;ct=result&amp;resnum=3&quot;&gt;primeiras ferrovias da Fran&#231;a&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Delambre&lt;/b&gt;: Mediu o comprimento de um meridiano, definindo assim &lt;a href=&quot;http://en.wikipedia.org/wiki/Metre&quot;&gt;o metro&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Malus&lt;/b&gt;: Autor da &lt;a href=&quot;http://en.wikipedia.org/wiki/Malus'_law&quot;&gt;lei de Malus&lt;/a&gt; na polariza&#231;&#227;o da luz.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Breguet&lt;/b&gt;: Inventor do &lt;a href=&quot;http://museu.fis.uc.pt/145.htm&quot;&gt;tel&#233;grafo de Breguet&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Polonceau&lt;/b&gt;: Criador da estrutura conhecida como &lt;a href=&quot;http://www.istructe.org/Filesystem/getfile.asp?SubDir=History%20of%20Structural%20Engineering%20Study%20Group%5C2008%20-%202009%20Meeting%20Notices%5C&amp;FName=Flyer%20-%20Joint%20Meeting%20on%208%20April%20-%20Polonceau%20roof%20and%20its%20analysis.pdf&amp;CID=207&quot;&gt;teto de Polonceau&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Dumas&lt;/b&gt;: Descobriu que o &lt;a href=&quot;http://en.wikipedia.org/wiki/Kidney&quot;&gt;rim remove ur&#233;ia do sangue&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Clapeyron&lt;/b&gt;: Autor da &lt;a href=&quot;http://en.wikipedia.org/wiki/Clausius-Clapeyron_relation&quot;&gt;equa&#231;&#227;o de Clapeyron&lt;/a&gt; para transi&#231;&#227;o de fase da mat&#233;ria.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Borda&lt;/b&gt;: Criador do sistema de &lt;a href=&quot;http://en.wikipedia.org/wiki/Borda_count&quot;&gt;vota&#231;&#227;o de Borda&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Fourier&lt;/b&gt;: Inventor das &lt;a href=&quot;http://en.wikipedia.org/wiki/Fourier_series&quot;&gt;s&#233;ries de Fourier&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Bichat&lt;/b&gt;: Pai da histologia, o primeiro a reconhecer que &lt;a href=&quot;http://en.wikipedia.org/wiki/Biological_tissue&quot;&gt;&#243;rg&#227;os s&#227;o feitos de tecidos&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Sauvage&lt;/b&gt;: Criou os primeiros &lt;a href=&quot;http://en.wikipedia.org/wiki/Geologic_map&quot;&gt;mapas geol&#243;gicos&lt;/a&gt; da Fran&#231;a.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Pelouze&lt;/b&gt;: Primeiro a calcular a &lt;a href=&quot;http://pt.wikipedia.org/wiki/Ars%C3%AAnio&quot;&gt;massa at&#244;mica do Ars&#234;nio&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Carnot&lt;/b&gt;: Autor do &lt;a href=&quot;http://en.wikipedia.org/wiki/Carnot's_theorem&quot;&gt;teorema de Carnot&lt;/a&gt; da geometria.&lt;/div&gt;&lt;div&gt;&lt;b&gt;Lam&#233;&lt;/b&gt;: Criador da an&#225;lise por &lt;a href=&quot;http://en.wikipedia.org/wiki/Lam%C3%A9_function&quot;&gt;harm&#244;nicas el&#237;pticas&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;A lista &#233; bem heterog&#234;nea. Ela parte de alicerces da ci&#234;ncia como Lagrange e Laplace, e passa por her&#243;is locais que devem ser uma esp&#233;cie de &lt;a href=&quot;http://pt.wikipedia.org/wiki/Santos_Dumont&quot;&gt;Santos-Dumont&lt;/a&gt; &#224; francesa: famosos em seu pa&#237;s, mas nem tanto longe dele. Por fim, h&#225; os realmente obscuros. Desse &#250;ltimo grupo, eu notei que todos deram aula na &lt;a href=&quot;http://en.wikipedia.org/wiki/%C3%89cole_polytechnique&quot;&gt;&#201;cole Polytechnique&lt;/a&gt;, o que indica que o Eiffel deve ter colocado esses nomes para &lt;strike&gt;puxar o saco&lt;/strike&gt; fazer uma homenagem a seus professores.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;Visitar a torre Eiffel &#233; uma experi&#234;ncia incr&#237;vel, mas n&#227;o foi a melhor parte da lua de mel. Uma descri&#231;&#227;o da melhor parte da lua de mel fugiria do escopo desse blog :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_TijAN4NNGkA/Sk-oyDgHhWI/AAAAAAAAmP4/Q0NCrlrc3Lo/s1600-h/Paris_casal.JPG&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/_TijAN4NNGkA/Sk-oyDgHhWI/AAAAAAAAmP4/Q0NCrlrc3Lo/s400/Paris_casal.JPG&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5354684059853751650&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;
&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6306509703738480474-6619825040542849187?l=www.ricbit.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>ricbit</name>
			<email>noreply@blogger.com</email>
			<uri>http://www.ricbit.com/</uri>
		</author>
		<source>
			<title type="html">Brain Dump</title>
			<subtitle type="html">O que est&#225; passando pela cabe&#231;a do Ricbit no momento.</subtitle>
			<link rel="self" href="http://www.ricbit.com/rss.xml"/>
			<id>tag:blogger.com,1999:blog-6306509703738480474</id>
			<updated>2009-07-04T20:44:28+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Screwing up Python compatibility: unicode(), str(), and bytes()</title>
		<link href="http://blog.labix.org/2009/07/02/screwing-up-python-compatibility-unicode-str-bytes"/>
		<id>http://blog.labix.org/?p=133</id>
		<updated>2009-07-02T15:50:17+00:00</updated>
		<content type="html">&lt;p&gt;Backwards and forwards compatibility is an art.  In the very basic and generic form, it consists in organizing the introduction of new concepts while allowing people to maintain existing assets working.  In some cases, the new concepts introduced are disruptive, in the sense that they prevent the original form of the asset to be preserved completely, and then some careful consideration has to be done for creating a migration path which is technically viable, and which at the same time helps people keeping the process in mind.  A great example of what &lt;i&gt;not&lt;/i&gt; to do when introducing such disruptive changes has happened in Python recently.&lt;/p&gt;
&lt;p&gt;Up to Python 2.5, any strings you put within normal quotes (without a leading character marker in front of it) would be considered to be of the type &lt;i&gt;str&lt;/i&gt;, which originally was used for both binary data and textual data, but in modern times it was seen as the type to be used for binary data only.  For textual information, the &lt;i&gt;unicode&lt;/i&gt; type has been introduced in Python 2.0, and it provides easy access to all the goodness of Unicode.  Besides converting to and from &lt;i&gt;str&lt;/i&gt;, it&amp;#8217;s also possible to use Unicode &lt;i&gt;literals&lt;/i&gt; in the code by preceding the quotes with a leading &lt;i&gt;u&lt;/i&gt; character.&lt;/p&gt;
&lt;p&gt;This evolution has happened quite cleanly, but it introduced one problem: these two types were both seen as the main way to input textual data in one point in time, and the language syntax clearly makes it very easy to use either type interchangeably.  Sounds good in theory, but the types are &lt;i&gt;not&lt;/i&gt; interchangeable, and what is worse: in many cases the problem is only seen at runtime when incompatible data passes through the code.  This is what gives form to the interminable &lt;a href=&quot;http://www.google.com/search?q=UnicodeDecodeError&quot;&gt;UnicodeDecodeError problem&lt;/a&gt; you may have heard about.  So what can be done about this?  Enter Python 3.0.&lt;/p&gt;
&lt;p&gt;In Python 3.0 an attempt is being made to sanitize this, by promoting the &lt;i&gt;unicode&lt;/i&gt; type to a more prominent position, removing the original &lt;i&gt;str&lt;/i&gt; type, and introducing a similar but incompatible &lt;i&gt;bytes&lt;/i&gt; type which is more clearly oriented towards binary data.&lt;/p&gt;
&lt;p&gt;So far so good.  The motivation is good, the target goal is a good one too.  As usual, the details may complicate things a bit.  Before we go into what was actually done, let&amp;#8217;s look at an ideal scenario for such an incompatible change.&lt;/p&gt;
&lt;p&gt;As mentioned above, when introducing disruptive changes like this, we want a good migration path, and we want to help people keeping the procedure in mind, so that they do the right thing even though they&amp;#8217;re not spending too many brain cycles on it.  Here is a suggested schema of what might have happened to achieve the above goal: in Python 2.6, introduce the &lt;i&gt;bytes&lt;/i&gt; type, with exactly the same semantics of what will be seen in Python 3.0.   During 2.6, encourage people to migrate &lt;i&gt;str&lt;/i&gt; references in their code to either the previously existent &lt;i&gt;unicode&lt;/i&gt; type, when dealing with textual data, or to the new &lt;i&gt;bytes&lt;/i&gt; type, when handling binary data.  When 3.0 comes along, simply kill the old &lt;i&gt;str&lt;/i&gt; types, and we&amp;#8217;re done.  People can easily write code in 2.6 which supports 3.0, and if they see a reference to &lt;i&gt;str&lt;/i&gt; they know something must be done.  No big deal, and apparently quite straightforward.&lt;/p&gt;
&lt;p&gt;Now, let&amp;#8217;s see how to do it in a bad way.&lt;/p&gt;
&lt;p&gt;Python 2.6 introduces the &lt;i&gt;bytes&lt;/i&gt; type, but it&amp;#8217;s not actually a new type.  It&amp;#8217;s simply an alias to the existing &lt;i&gt;str&lt;/i&gt; type.  This means that if you write code to support &lt;i&gt;bytes&lt;/i&gt; in 2.6, you are actually not writing code which is compatible with Python 3.0.  Why on earth would someone introduce an alias on 2.6 which will generate &lt;i&gt;incompatible&lt;/i&gt; code with 3.0 is beyond me.  It must be some kind of anti-migration pattern.  Then, Python 3.0 renames &lt;i&gt;unicode&lt;/i&gt; to &lt;i&gt;str&lt;/i&gt;, and kills the old &lt;i&gt;str&lt;/i&gt;.  So, the result is quite bad: Python 3.0 has both &lt;i&gt;str&lt;/i&gt; and &lt;i&gt;bytes&lt;/i&gt;, and they both mean something else than they did on 2.6, which is the first version which supposedly should help migration, and not a single one of the three types from 2.6 got their names and semantics preserved in 3.0.  In fact, just &lt;i&gt;unicode&lt;/i&gt; exists at all, and it has a different name.&lt;/p&gt;
&lt;p&gt;There you go.  I&amp;#8217;ve heard people learn better from counter-examples.  Here we have a good one to keep in mind and avoid repeating.&lt;/p&gt;</content>
		<author>
			<name>Gustavo Niemeyer</name>
			<uri>http://blog.labix.org</uri>
		</author>
		<source>
			<title type="html">Labix Blog</title>
			<subtitle type="html">by Gustavo Niemeyer</subtitle>
			<link rel="self" href="http://blog.labix.org/feed/"/>
			<id>http://blog.labix.org/feed/</id>
			<updated>2009-07-02T17:44:29+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Ponteiro opaco</title>
		<link href="http://kodumaro.blogspot.com/2009/07/pimpl.html"/>
		<id>tag:blogger.com,1999:blog-1387996720436450649.post-3640145799036930672</id>
		<updated>2009-07-01T22:01:00+00:00</updated>
		<content type="html">&lt;img src=&quot;http://4.bp.blogspot.com/_rGfO7DAuOSE/Skfqi_b3SZI/AAAAAAAAAPw/LGCcKqN8ONI/s200/gcc.jpg&quot; alt=&quot;GCC&quot; id=&quot;BLOGGER_PHOTO_ID_5352504569017878930&quot; /&gt; Muitas vezes programadores de &lt;a href=&quot;http://www.cplusplus.com/&quot;&gt;C++&lt;/a&gt; e &lt;a href=&quot;http://java.sun.com&quot;&gt;Java&lt;/a&gt; confundem &lt;a href=&quot;http://pt.wikipedia.org/wiki/Encapsulamento&quot;&gt;encapsulamento&lt;/a&gt; com &lt;strong&gt;oculta&#231;&#227;o&lt;/strong&gt;, o que n&#227;o &#233; a inten&#231;&#227;o da &lt;a href=&quot;http://pt.wikipedia.org/wiki/Orienta&#231;&#227;o_a_objetos&quot;&gt;orienta&#231;&#227;o a objetos&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;No entanto, o contr&#225;rio da oculta&#231;&#227;o, a &lt;strong&gt;exposi&#231;&#227;o&lt;/strong&gt;, tamb&#233;m n&#227;o &#233; desej&#225;vel para o encapsulamento, pois causa uma confus&#227;o entre &lt;a href=&quot;http://en.wikipedia.org/wiki/Interface_(computer_science)&quot;&gt;interface&lt;/a&gt; e &lt;a href=&quot;http://en.wikipedia.org/wiki/Implementation&quot;&gt;implementa&#231;&#227;o&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Em C++, a declara&#231;&#227;o de uma classe for&#231;a a exposi&#231;&#227;o de sua estrutura privada. Um exemplo bem simples:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;class X {&lt;br /&gt;    public:&lt;br /&gt;        X(int);&lt;br /&gt;        ~X();&lt;br /&gt;&lt;br /&gt;        int get(void) const;&lt;br /&gt;&lt;br /&gt;    private:&lt;br /&gt;        int value;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Neste exemplo insanamente simples, &#233; poss&#237;vel ver a estrutura privada da classe &lt;code&gt;X&lt;/code&gt;, o que no caso n&#227;o &#233; um problema muito s&#233;rio, mas em casos ligeiramente mais complexos, &#233; poss&#237;vel &lt;a href=&quot;http://kodumaro.blogspot.com/2009/01/atributos-privados-onde.html&quot;&gt;corromper o encapsulamento&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Uma forma de resolver o problema &#233; usando um &lt;a href=&quot;http://en.wikipedia.org/wiki/Design_pattern&quot;&gt;&lt;em&gt;design pattern&lt;/em&gt;&lt;/a&gt;&amp;sup1; chamado &lt;a href=&quot;http://en.wikipedia.org/wiki/Opaque_pointer&quot;&gt;ponteiro opaco&lt;/a&gt; ou &lt;em&gt;Pimpl&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;A ideia &#233; que a classe de interface seja apenas uma moldura (&lt;em&gt;wrapper&lt;/em&gt;) para a classe de implementa&#231;&#227;o. A classe de implementa&#231;&#227;o &#233; declarada no corpo da classe de interface, mas nada &#233; exposto ali.&lt;br /&gt;&lt;br /&gt;A classe de implementa&#231;&#227;o vai ser finalmente implementada no arquivo onde os m&#233;todos da classe de interface s&#227;o implementados. Os m&#233;todos da classe de interface ent&#227;o simplemente chamam os m&#233;todos da classe de implementa&#231;&#227;o.&lt;br /&gt;&lt;br /&gt;Voltemos ao exemplo&amp;hellip; o arquivo de cabe&#231;alho de nossa classe (&lt;code&gt;x.h&lt;/code&gt; por exemplo) passa a ser:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;class X {&lt;br /&gt;    class Ximpl;&lt;br /&gt;&lt;br /&gt;    public:&lt;br /&gt;        X(int);&lt;br /&gt;        ~X();&lt;br /&gt;&lt;br /&gt;        int get(void) const;&lt;br /&gt;&lt;br /&gt;    private:&lt;br /&gt;        Ximpl *pimpl;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Como &#233; poss&#237;vel ver, nada da implementa&#231;&#227;o est&#225; exposto.&lt;br /&gt;&lt;br /&gt;Ent&#227;o a classe de implementa&#231;&#227;o &#233; finalmente definida no arquivo de implementa&#231;&#227;o (&lt;code&gt;x.cc&lt;/code&gt;):&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;class X::Ximpl {&lt;br /&gt;    public:&lt;br /&gt;        Ximpl(int);&lt;br /&gt;        ~Ximpl();&lt;br /&gt;&lt;br /&gt;        int get(void) const;&lt;br /&gt;&lt;br /&gt;    private:&lt;br /&gt;        int value;&lt;br /&gt;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;O resto do c&#243;digo fica:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;X::X(int value): pimpl(new X::Ximpl(value)) {&lt;br /&gt;    // Nada mais a fazer&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;X::Ximpl::Ximpl(int value): value(value) {&lt;br /&gt;    // Nada mais a fazer&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;X::~X() {&lt;br /&gt;    delete this-&amp;gt;pimpl;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;X::Ximpl::~Ximpl() {&lt;br /&gt;    // Nada mais a fazer&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;X::get(void) const {&lt;br /&gt;    return this-&amp;gt;pimpl-&amp;gt;get();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;X::Ximpl::get(void) const {&lt;br /&gt;    return this-&amp;gt;value;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&#201; claro que &#233; um &lt;em&gt;pattern&lt;/em&gt; extremamente &lt;strong&gt;desconfort&#225;vel&lt;/strong&gt;, pois &#233; preciso implementar cada m&#233;todo duas vezes, uma para a classe de interface, outra para a classe de implementa&#231;&#227;o&amp;hellip; e h&#225; sim formas melhores de fazer isso.&lt;br /&gt;&lt;br /&gt;Mas &lt;em&gt;Pimpl&lt;/em&gt; funciona, &#233; uma sa&#237;da vi&#225;vel e pode salvar sua vida. =D&lt;br /&gt;&lt;br /&gt;[]'s&lt;br /&gt;Cacilhas, La Batalema&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;small&gt;&amp;sup1; &lt;em&gt;Design patterns&lt;/em&gt;: antes que me crucifiquem por usar esta express&#227;o fora do mundinho pequeno de Java, a defini&#231;&#227;o de &lt;em&gt;design pattern&lt;/em&gt; &#233; &#171;um jeito formal de documentar a solu&#231;&#227;o para um problema de desenvolvimento&#187;, o que define corretamente ponteiro opaco.&lt;/small&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1387996720436450649-3640145799036930672?l=kodumaro.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>La Batalema</name>
			<email>noreply@blogger.com</email>
			<uri>http://kodumaro.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Kodumaro</title>
			<subtitle type="html">As sombras da programa&#231;&#227;o</subtitle>
			<link rel="self" href="http://kodumaro.blogspot.com/feeds/posts/default?alt=rss"/>
			<id>tag:blogger.com,1999:blog-1387996720436450649</id>
			<updated>2009-07-02T15:44:35+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Confer&#234;ncia PythonBrasil[5]</title>
		<link href="http://associacao.python.org.br/eventos/conferencia-python-brasil-5"/>
		<id>http://associacao.python.org.br/eventos/conferencia-python-brasil-5</id>
		<updated>2009-07-01T06:05:00+00:00</updated>
		<content type="html">A Confer&#234;ncia PythonBrasil[5] acontecer&#225;  de 10 a 12 de Setembro de 2009 na UCS, em Caxias do Sul/RS. Nos encontramos na Serra Ga&#250;cha!</content>
		<author>
			<name>Eventos da APyB</name>
			<uri>http://associacao.python.org.br</uri>
		</author>
		<source>
			<title type="html">Listagem de Pr&#243;ximos Eventos APyB e Python</title>
			<subtitle type="html">Eventos da APyB e relacionados a Python</subtitle>
			<link rel="self" href="http://associacao.python.org.br/eventos/listagem/RSS"/>
			<id>http://associacao.python.org.br/eventos/listagem/RSS</id>
			<updated>2009-07-04T20:44:32+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Aberto o processo de sele&#231;&#227;o da sede da PythonBrasil[6]</title>
		<link href="http://associacao.python.org.br/associacao/imprensa/noticias/candidatura-a-sede-da-conferencia-pythonbrasil-6"/>
		<id>http://associacao.python.org.br/associacao/imprensa/noticias/candidatura-a-sede-da-conferencia-pythonbrasil-6</id>
		<updated>2009-07-01T03:46:43+00:00</updated>
		<content type="html">Est&#227;o abertas as inscri&#231;&#245;es para o processo de sele&#231;&#227;o da sede da PythonBrasil[6], em 2010. O prazo vai at&#233; 6 de setembro de 2009 e o an&#250;ncio da cidade escolhida ser&#225; feito durante a quinta edi&#231;&#227;o do evento.</content>
		<author>
			<name>Noticias da APyB</name>
			<uri>http://associacao.pythonbrasil.org/noticias</uri>
		</author>
		<source>
			<title type="html">Not&#237;cias</title>
			<subtitle type="html">Not&#237;cias sobre a Associa&#231;&#227;o.</subtitle>
			<link rel="self" href="http://associacao.python.org.br/noticias/RSS"/>
			<id>http://associacao.python.org.br/noticias/RSS</id>
			<updated>2009-07-04T10:44:06+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">My iPhone for an Android!</title>
		<link href="http://blog.labix.org/2009/06/30/my-iphone-for-an-android"/>
		<id>http://blog.labix.org/?p=123</id>
		<updated>2009-07-01T02:50:11+00:00</updated>
		<content type="html">&lt;p&gt;Yes, you&amp;#8217;ve heard it right.  I&amp;#8217;ll exchange a legally unlocked iPhone 3G for a recent Android phone such as the &lt;a href=&quot;http://www.phonearena.com/htmls/Samsung-Galaxy-I7500-Preview-review-r_2173.html&quot;&gt;Samsung Galaxy&lt;/a&gt; or the &lt;a href=&quot;http://www.engadget.com/2009/06/24/htc-hero-hands-on/&quot;&gt;HTC Hero&lt;/a&gt;, and will pay the difference back! (street price minus 30% of devaluation for the used iPhone 3G).&lt;/p&gt;
&lt;p&gt;I got an iPhone some time ago to learn the concepts introduced in the platform, and get a feeling of how it works out in practice.  I&amp;#8217;m happy I did it, since the hands on experience is worthwhile.  But the experience is done, and even though I have positive things to say about the platform, the &lt;a href=&quot;http://toucharcade.com/2009/06/20/full-commodore-64-emulator-rejected-from-app-store/&quot;&gt;omnipotent&lt;/a&gt; &lt;a href=&quot;http://apple.slashdot.org/article.pl?sid=09/05/03/029249&quot;&gt;and&lt;/a&gt; &lt;a href=&quot;http://news.cnet.com/apple-rejects-nine-inch--nails-iphone-app-update/&quot;&gt;arrogant&lt;/a&gt; &lt;a href=&quot;http://arstechnica.com/apple/news/2008/09/apple-rejects-another-app-for-duplicating-functionality.ars&quot;&gt;position&lt;/a&gt; &lt;a href=&quot;http://www.eff.org/deeplinks/2009/06/oh-come-apple-reject&quot;&gt;of&lt;/a&gt; &lt;a href=&quot;http://www.engadget.com/2009/05/11/apple-rejects-bittorrent-control-app-from-app-store-because-it-m/&quot;&gt;Apple&lt;/a&gt; &lt;a href=&quot;http://www.macnn.com/articles/09/05/21/apple.rejects.ebook.reader/&quot;&gt;with&lt;/a&gt; &lt;a href=&quot;http://www.macworld.com/article/139316/2009/03/tweetie_rejection.html&quot;&gt;developers&lt;/a&gt; kills any chance of any further involvement I could have with the platform.  I&amp;#8217;m upset enough with it that I don&amp;#8217;t want to see my wife using the device either.&lt;/p&gt;
&lt;p&gt;There are many things in Apple&amp;#8217;s behavior which are a source of arguments, and interminable flamewars, and most of the times I can see both sides of the story.  For instance, when people pay a premium to get the hardware, some feel like it&amp;#8217;s just throwing money away, but if there is good engineering behind it, well.. I understand people may want to pay the premium to get that exclusive product they like.  That said, being so incredibly arrogant in the marketplace, and with &lt;i&gt;developers&lt;/i&gt;, which theoretically should be their most precious partners, since they sustain the platform going, is something I can&amp;#8217;t tolerate.&lt;/p&gt;
&lt;p&gt;I know.. who am I.  Just a random guy that actually gave them some money for one of their products.  But I&amp;#8217;m also a guy that won&amp;#8217;t be buying their upgraded phones, and will be spreading the word to make people realize what a terrible future it will be if Apple ever dominates the marketplace.   Even you&amp;#8217;re not a developer, it&amp;#8217;s a good idea to ponder carefully about this behavior.  It tells a lot about how far they go to defend their own interests, and what kind of &lt;i&gt;lock in&lt;/i&gt; they intend to get you into.&lt;/p&gt;
&lt;p&gt;Finally, compare that to a &lt;a href=&quot;http://planetandroid.com/&quot;&gt;nice open source operating system&lt;/a&gt; on which &lt;a href=&quot;http://www.openhandsetalliance.com/index.html&quot;&gt;multiple first class vendors are cooperating&lt;/a&gt;.  Sheeshh.. easy choice for me.&lt;/p&gt;</content>
		<author>
			<name>Gustavo Niemeyer</name>
			<uri>http://blog.labix.org</uri>
		</author>
		<source>
			<title type="html">Labix Blog</title>
			<subtitle type="html">by Gustavo Niemeyer</subtitle>
			<link rel="self" href="http://blog.labix.org/feed/"/>
			<id>http://blog.labix.org/feed/</id>
			<updated>2009-07-02T17:44:29+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Variaridade</title>
		<link href="http://kodumaro.blogspot.com/2009/06/variadic.html"/>
		<id>tag:blogger.com,1999:blog-1387996720436450649.post-8181852037886965787</id>
		<updated>2009-06-28T22:10:00+00:00</updated>
		<content type="html">&lt;img src=&quot;http://4.bp.blogspot.com/_rGfO7DAuOSE/Skfqi_b3SZI/AAAAAAAAAPw/LGCcKqN8ONI/s200/gcc.jpg&quot; alt=&quot;GCC&quot; id=&quot;BLOGGER_PHOTO_ID_5352504569017878930&quot; /&gt; Uma &lt;a href=&quot;http://en.wikipedia.org/wiki/Variadic_function&quot;&gt;fun&#231;&#227;o &lt;del&gt;&lt;em&gt;vari&#225;dica&lt;/em&gt;&lt;/del&gt; vari&#225;ria&lt;/a&gt; &amp;ndash; em ingl&#234;s &lt;strong&gt;&lt;em&gt;variadic&lt;/em&gt;&lt;/strong&gt;, &lt;em&gt;variable arity&lt;/em&gt;, aridade&amp;sup1; vari&#225;vel &amp;ndash; &#233; aquela que suporta uma quantidade vari&#225;vel de par&#226;metros.&lt;br /&gt;&lt;br /&gt;Muitas linguagens suportam fun&#231;&#245;es vari&#225;rias, ali&#225;s de forma bem simples. &lt;a href=&quot;http://python.org/&quot;&gt;Python&lt;/a&gt; usa o operador &lt;code&gt;*&lt;/code&gt; para indicar quantidade vari&#225;vel de par&#226;metros, &lt;a href=&quot;http://www.lua.org/&quot;&gt;Lua&lt;/a&gt; usa o operador &lt;code&gt;...&lt;/code&gt; e &lt;a href=&quot;http://clisp.cons.org/&quot;&gt;Common Lisp&lt;/a&gt; o operador &lt;code&gt;&amp;amp;rest&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Outras linguagens podem ser ainda mais simples, como por exemplo &lt;a href=&quot;http://www.perl.org/&quot;&gt;Perl&lt;/a&gt;, onde toda fun&#231;&#227;o &#233; vari&#225;ria e os par&#226;metros s&#227;o recebidos na lista &lt;code&gt;@_&lt;/code&gt;, tradicionalmente capturados por &lt;code&gt;shift&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;J&#225; &lt;a href=&quot;http://java.sun.com/&quot;&gt;Java&lt;/a&gt; n&#227;o suporta fun&#231;&#245;es verdadeiramente vari&#225;rias devido a sua limita&#231;&#227;o for&#231;ada de tipagem, no entanto &#233; poss&#237;vel simular com o uso de &lt;code&gt;Object&lt;/code&gt; e &lt;em&gt;casting&lt;/em&gt; (&#171;vazamento&#187; na falta de uma tradu&#231;&#227;o melhor):&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;void myFunction(Object... args) {&lt;br /&gt;    // C&#243;digo do m&#233;todo&lt;br /&gt;    &#8230;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Fun&#231;&#245;es vari&#225;rias em C/C++&lt;/h3&gt;&lt;br /&gt;&lt;a href=&quot;http://pt.wikipedia.org/wiki/C_(linguagem_de_programa&#231;&#227;o)&quot;&gt;C&lt;/a&gt;/&lt;a href=&quot;http://www.cplusplus.com/&quot;&gt;C++&lt;/a&gt; usa o cabe&#231;alho &lt;a href=&quot;http://en.wikipedia.org/wiki/Stdarg.h&quot;&gt;&lt;code&gt;stdarg.h&lt;/code&gt;&lt;/a&gt; para suporte a fun&#231;&#245;es vari&#225;rias.&lt;br /&gt;&lt;br /&gt;O exemplo apresentado na &lt;a href=&quot;http://en.wikipedia.org/wiki/Stdarg.h&quot;&gt;Wikip&#233;dia&lt;/a&gt; &#233; bastante simples: uma fun&#231;&#227;o &lt;code&gt;printargs&lt;/code&gt; que recebe uma quantidade arbitr&#225;ria de n&#250;meros inteiros, encerrando com -1 (ou qualquer n&#250;mero negativo em nosso exemplo), e os exibe na sa&#237;da padr&#227;o.&lt;br /&gt;&lt;br /&gt;Precisamos incluir dois cabe&#231;alhos em C++, &lt;code&gt;cstdarg&lt;/code&gt; para suporte a fun&#231;&#245;es vari&#225;ria e &lt;code&gt;cstdio&lt;/code&gt; para exibir o resultado:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;#include &amp;lt;cstdio&amp;gt;&lt;br /&gt;#include &amp;lt;cstdarg&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ou, em C:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdarg.h&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;A assinatura da fun&#231;&#227;o fica assim:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;void printargs(int arg1, ...) {&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Para acesso aos par&#226;metros m&#250;ltiplos &#233; usado um objeto &lt;code&gt;va_list&lt;/code&gt;:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;    va_list args;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;A fun&#231;&#227;o &lt;code&gt;va_start()&lt;/code&gt; inicializa o objeto. Ela recebe dois par&#226;metros: o objeto &lt;code&gt;va_list&lt;/code&gt; e o nome do &#250;ltimo argumento antes da lista:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;    va_start(args, arg1);&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Portanto &#233; preciso haver pelo menos um argumento antes da lista vari&#225;vel. Podemos ent&#227;o exibir o primeiro par&#226;metro, recebido no argumento &lt;code&gt;arg1&lt;/code&gt;:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;    printf(&quot;%d&quot;, arg1);&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;A fun&#231;&#227;o &lt;code&gt;va_arg()&lt;/code&gt; retorna o argumento seguinte. Ela recebe como par&#226;metros o objeto &lt;code&gt;va_list&lt;/code&gt; e o tipo do par&#226;metro da lista a ser recuperado.&lt;br /&gt;&lt;br /&gt;O tipo precisar ser plenamente promovido, ou seja, ponteiro, inteiro, ponto flutuante ou precis&#227;o dupla. Outros tipos, como &lt;code&gt;char&lt;/code&gt; precisam sofrer &lt;em&gt;casting&lt;/em&gt;, como por exemplo (&lt;strong&gt;n&#227;o faz parte do c&#243;digo de &lt;code&gt;printargs&lt;/code&gt;&lt;/strong&gt;):&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;char c = static_cast&amp;lt;char&amp;gt;(va_arg(va, int));&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Continuando o c&#243;digo, podemos agora reiterar sobre os resultados de &lt;code&gt;va_arg()&lt;/code&gt; at&#233; encontrarmos o valor de parada negativo:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;    int arg;&lt;br /&gt;    while((arg = va_arg(args, int)) &gt;= 0)&lt;br /&gt;        printf(&quot; %d&quot;, arg);&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ap&#243;s o fim da reitera&#231;&#227;o dos par&#226;metros obtidos do objeto &lt;code&gt;va_list&lt;/code&gt; atrav&#233;s de &lt;code&gt;va_arg()&lt;/code&gt;, &#233; preciso encerrar o objeto:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;    va_end(arg);&lt;br /&gt;    printf(&quot;\n&quot;);&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Caso voc&#234; queira restringir o formato de entrada da fun&#231;&#227;o, isso &#233; poss&#237;vel usando &lt;code&gt;__attribute__&lt;/code&gt; em sua declara&#231;&#227;o. Por exemplo, se a fun&#231;&#227;o &lt;code&gt;log()&lt;/code&gt; recebe o n&#237;vel de &lt;em&gt;log&lt;/em&gt; como primeiro par&#226;metro, uma &lt;em&gt;string&lt;/em&gt; de formata&#231;&#227;o como segundo par&#226;metro (&lt;code&gt;2&lt;/code&gt;) e os par&#226;metros vari&#225;veis a partir do terceiro (&lt;code&gt;3&lt;/code&gt;), com formato similar ao da fun&#231;&#227;o &lt;code&gt;printf()&lt;/code&gt;, isso &#233; feito com a seguinte assinatura:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;extern void&lt;br /&gt;log(int level, cons char *fmt, ...)&lt;br /&gt;__attribute__((format(printf, 2, 3)));&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As op&#231;&#245;es para &lt;code&gt;format()&lt;/code&gt; s&#227;o &lt;code&gt;printf&lt;/code&gt;, &lt;code&gt;scanf&lt;/code&gt;, &lt;code&gt;strftime&lt;/code&gt; e &lt;code&gt;strfmon&lt;/code&gt;. Veja &lt;a href=&quot;http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Function-Attributes.html&quot;&gt;Declaring Attributes of Functions&lt;/a&gt; da documenta&#231;&#227;o do &lt;a href=&quot;http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/&quot;&gt;GCC&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;[]'s&lt;br /&gt;Cacilhas, La Batalema&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;small&gt;&amp;sup1;Aridade: em Matem&#225;tica &#233; o n&#250;mero de operandos de uma fun&#231;&#227;o.&lt;/small&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1387996720436450649-8181852037886965787?l=kodumaro.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>La Batalema</name>
			<email>noreply@blogger.com</email>
			<uri>http://kodumaro.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Kodumaro</title>
			<subtitle type="html">As sombras da programa&#231;&#227;o</subtitle>
			<link rel="self" href="http://kodumaro.blogspot.com/feeds/posts/default?alt=rss"/>
			<id>tag:blogger.com,1999:blog-1387996720436450649</id>
			<updated>2009-07-02T15:44:35+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Are you ready for the mobile revolution?</title>
		<link href="http://blog.labix.org/2009/06/23/are-you-ready-for-the-mobile-revolution"/>
		<id>http://blog.labix.org/?p=113</id>
		<updated>2009-06-24T00:58:44+00:00</updated>
		<content type="html">&lt;p&gt;Are you?  I&amp;#8217;m not entirely sure I am, even though I think about this a lot.&lt;/p&gt;
&lt;p&gt;If you&amp;#8217;re of the tech-savvy kind, you&amp;#8217;re certainly aware of the great capabilities that the &lt;a href=&quot;http://planetandroid.com/&quot;&gt;new mobile phone generation&lt;/a&gt; is bringing: Internet connection, a quite decent browser, GPS, camera, etc.  But, really.. did you stop to think about what&amp;#8217;s going on?  This phone generation is still relatively expensive today, but &lt;a href=&quot;http://www.engadget.com/2009/05/28/google-at-least-18-android-phones-coming-this-year/&quot;&gt;they&amp;#8217;re here to stay&lt;/a&gt;, and in just a few years, they&amp;#8217;ll be commonplace.&lt;/p&gt;
&lt;p&gt;Now, let&amp;#8217;s forget about ourselves for a moment, and think about what &lt;i&gt;mass adoption&lt;/i&gt; of a quite capable generic computer with full internet connectivity 24h a day being carried with its owner means for the world?  Remember, the &lt;a href=&quot;http://www.guardian.co.uk/technology/2008/sep/26/mobilephones.unitednations&quot;&gt;number of mobile phone users in the world&lt;/a&gt; is several times superior to the  &lt;a href=&quot;http://www.gizmodo.com.au/2008/06/1_billion_computers_now_in_use_not_necessarily_useful-2/&quot;&gt;number of computers&lt;/a&gt;, and most of the computers are in the so called &lt;i&gt;first world&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;This implies that not only will everyone have access to the world in their pockets, which is already quite amazing by itself, but that a large number of people will have access to the Internet &lt;i&gt;at all&lt;/i&gt; for the first time with their mobiles.  Besides the several social impacts that these changes will bring, there are also many other interesting consequences.  As simple examples,  the &lt;i&gt;most common client&lt;/i&gt; to many web services will be mobile phones, and many people will learn to use a touch screen interface of the mobile to interact with the world before ever having used a desktop computer for that.&lt;/p&gt;
&lt;p&gt;I find that amazing, and this is happening right now, in front of our eyes.&lt;/p&gt;</content>
		<author>
			<name>Gustavo Niemeyer</name>
			<uri>http://blog.labix.org</uri>
		</author>
		<source>
			<title type="html">Labix Blog</title>
			<subtitle type="html">by Gustavo Niemeyer</subtitle>
			<link rel="self" href="http://blog.labix.org/feed/"/>
			<id>http://blog.labix.org/feed/</id>
			<updated>2009-07-02T17:44:29+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">As batalhas do magenta</title>
		<link href="http://www.ricbit.com/2009/06/as-batalhas-do-magenta.html"/>
		<id>tag:blogger.com,1999:blog-6306509703738480474.post-1542785324065742865</id>
		<updated>2009-06-22T14:21:00+00:00</updated>
		<content type="html">&lt;div&gt;Convencer as pessoas de que o magenta existe foi uma batalha, mas certamente n&#227;o a &#250;nica batalha pela qual a cor passou. O magenta &#233; uma cor mais sofrida que o &lt;a href=&quot;http://www.scribd.com/doc/7320400/Ziraldo-FlictsIlustrado&quot;&gt;flicts&lt;/a&gt;; na verdade a pr&#243;pria origem do magenta foi em uma batalha!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href=&quot;http://www.ricbit.com/uploaded_images/magenta-795298.jpg&quot;&gt;&lt;img src=&quot;http://www.ricbit.com/uploaded_images/magenta-795295.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;div&gt;Originalmente, a cor #FF00FF era chamada de f&#250;csia, em homenagem a &lt;a href=&quot;http://en.wikipedia.org/wiki/Fuchsia&quot;&gt;uma singela florzinha&lt;/a&gt; que tem essa cor. Mas em 1859 houve &lt;a href=&quot;http://en.wikipedia.org/wiki/Battle_of_Magenta&quot;&gt;uma sangrenta batalha&lt;/a&gt; entre franceses e austr&#237;acos, t&#227;o intensa que pintou o ch&#227;o de sangue. Essa batalha aconteceu na cidade italiana de Magenta, e desde ent&#227;o aquele tom da cor de sangue ficou conhecido como magenta.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A batalha mais recente do magenta &#233; contra outra injusti&#231;a cometida pelo povo que n&#227;o conhece f&#237;sica. Dessa vez a abobrinha veio de um designer coreano, que bolou uma &lt;a href=&quot;http://www.tuvie.com/color-picker-by-jinsun-park&quot;&gt;caneta-scanner especial para desenhistas&lt;/a&gt;. Se voc&#234; quiser pintar uma ma&#231;&#227; com a apar&#234;ncia similar a uma ma&#231;&#227; real, basta usar a ponta-scanner da caneta para capturar o tom RGB exato da fruta, e na outra ponta a caneta mistura as propor&#231;&#245;es exatas de tintas (vermelhas, verdes e azuis) que reproduzem aquele tom. A id&#233;ia da caneta at&#233; &#233; legal, mas do jeito que foi bolada, n&#227;o funciona.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://www.ricbit.com/uploaded_images/color-picker4-741667.jpg&quot;&gt;&lt;img src=&quot;http://www.ricbit.com/uploaded_images/color-picker4-741665.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;O problema da caneta, &#233; claro, s&#227;o as tintas. Para entender por que elas s&#227;o um problema, precisamos relembrar a defini&#231;&#227;o de cor do Kandel: &quot;Cor &#233; uma experi&#234;ncia subjetiva relacionada &#224; composi&#231;&#227;o espectral da luz que atinge o olho&quot;. Ou seja, segundo essa defini&#231;&#227;o, a &#250;nica coisa que pode ter cor &#233; luz. Como tinta n&#227;o &#233; luz, logo tinta n&#227;o pode ter cor.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A maneira correta de caracterizar uma tinta &#233; atrav&#233;s da sua &lt;a href=&quot;http://en.wikipedia.org/wiki/Reflectance&quot;&gt;reflet&#226;ncia&lt;/a&gt;, ou seja, a rela&#231;&#227;o entre luz absorvida e refletida para um dado comprimento de onda. A cor da tinta n&#227;o depende apenas de suas caracter&#237;sticas intr&#237;nsecas, mas tamb&#233;m da luz que incide sobre ela.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Voc&#234; pode fazer um experimento simples para verificar isso. Primeiro pegue dois peda&#231;os de pano, branco e vermelho, e um lightsaber bicolor, azul e vermelho (se voc&#234; n&#227;o tem um lightsaber bicolor, eis uma boa desculpa pra comprar um!). Veja agora como a cor do tecido depende da luz incidente:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://www.ricbit.com/uploaded_images/ok-Ssombra-754812.JPG&quot;&gt;&lt;img src=&quot;http://www.ricbit.com/uploaded_images/ok-Ssombra-754460.JPG&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Luz ambiente (branca)&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://www.ricbit.com/uploaded_images/red-787955.JPG&quot;&gt;&lt;img src=&quot;http://www.ricbit.com/uploaded_images/red-787508.JPG&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Luz vermelha&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://www.ricbit.com/uploaded_images/blue-786403.JPG&quot;&gt;&lt;img src=&quot;http://www.ricbit.com/uploaded_images/blue-786034.JPG&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Luz azul&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Agora d&#225; pra ver claramente: o tecido &quot;branco&quot; na verdade reflete toda a luz que chega, ent&#227;o ele s&#243; &#233; branco quando a luz &#233; branca. Se a luz for vermelha, o tecido fica vermelho, se a luz for azul, o tecido fica azul.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;J&#225; o tecido &quot;vermelho&quot;, na verdade, absorve todos os comprimentos de onda, menos o vermelho. Tanto faz se a luz &#233; branca ou vermelha, o resultado &#233; o mesmo: s&#243; o vermelho &#233; refletido. J&#225; quando a luz &#233; azul, sem componente vermelho nenhum, o resultado &#233; que ele fica com apar&#234;ncia praticamente preta, pois n&#227;o tem nada pra refletir. O diagrama abaixo mostra o que aconteceu:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://www.ricbit.com/uploaded_images/grafico-758062.jpg&quot;&gt;&lt;img src=&quot;http://www.ricbit.com/uploaded_images/grafico-758060.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Agora fica claro porque a escolha de cores do designer coreano &#233; falha. As tintas que ele escolheu (vermelho, verde e azul) n&#227;o podem ser misturadas! Vejamos: uma tinta vermelha, na verdade, absorve o verde e azul, refletindo s&#243; o vermelho. Uma tinta verde, na verdade, absorve o vermelho e o azul, refletindo s&#243; o verde. Se voc&#234; misturar o vermelho com o verde, a tinta resultante vai absorver o vermelho, o azul e o verde, ou seja, n&#227;o vai refletir nada. Uma mistura de tintas vermelhas e verdes, em propor&#231;&#245;es iguais, d&#225; uma tinta preta.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Quem j&#225; trocou cartuchos de impressora jato de tinta sabe qual a solu&#231;&#227;o para esse problema. Basta escolher outras cores: amarelo, ciano... e magenta! Essas sim s&#227;o tintas que podem ser misturadas. Confira: uma tinta magenta, na verdade, absorve o verde. Uma tinta ciano, na verdade, absorve o vermelho. Se voc&#234; misturar magenta com ciano, o resultado absorve o verde e o vermelho, ou seja, s&#243; sobra azul. Tinta magenta com tinta ciano d&#225; tinta azul.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://www.ricbit.com/uploaded_images/cores-759041.jpg&quot;&gt;&lt;img src=&quot;http://www.ricbit.com/uploaded_images/cores-759034.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Essas tr&#237;ades de cores s&#227;o chamadas de &lt;a href=&quot;http://en.wikipedia.org/wiki/Primary_color&quot;&gt;cores prim&#225;rias&lt;/a&gt;. Vermelho, verde e azul s&#227;o as cores prim&#225;rias aditivas, aquelas que voc&#234; usa com emissores de luz, como l&#226;mpadas e LEDs. Ciano, magenta e amarelo s&#227;o as cores prim&#225;rias subtrativas, aquelas que voc&#234; usa com tintas.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href=&quot;http://www.ricbit.com/uploaded_images/Professora-724502.jpg&quot;&gt;&lt;img src=&quot;http://www.ricbit.com/uploaded_images/Professora-724491.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;div&gt;Por fim, isso nos leva a mais uma batalha do magenta. &lt;i&gt;&quot;Pera&#237;, minha professora na escolinha disse que as cores prim&#225;rias s&#227;o vermelho, azul e amarelo&quot;&lt;/i&gt;! Hum, foi mal, mas a sua professora te ensinou errado (deve ter sido a mesma professora que ensinava que se a &#243;rbita da Terra era el&#237;ptica, ent&#227;o o inverno &#233; quando a Terra est&#225; mais longe do Sol). Ela n&#227;o sabia diferenciar magenta de vermelho, nem ciano de azul.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Uma d&#250;vida mais sutil &#233; &lt;i&gt;&quot;Ah, mas eu misturava vermelho, azul e amarelo, e conseguia fazer todas as cores&quot;&lt;/i&gt;! Sim, sim, essas cores formam uma base no espa&#231;o das cores subtrativas, o problema &#233; que n&#227;o &#233; uma base ortogonal. Se voc&#234; fizesse uma impressora com essas cores, um dos tubinhos de tinta iria acabar mais r&#225;pido. Por isso tamb&#233;m que impressoras tem um quarto tubo com tinta preta: para escurecer um tom &#233; mais barato adicionar preto que misturar tinta dos tr&#234;s outros tubos.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Conclus&#227;o da hist&#243;ria toda: n&#227;o subestime o magenta! Apesar de ser sistematicamente ignorada, &#233; uma cor com muitas utilidades :)&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;
&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/6306509703738480474-1542785324065742865?l=www.ricbit.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>ricbit</name>
			<email>noreply@blogger.com</email>
			<uri>http://www.ricbit.com/</uri>
		</author>
		<source>
			<title type="html">Brain Dump</title>
			<subtitle type="html">O que est&#225; passando pela cabe&#231;a do Ricbit no momento.</subtitle>
			<link rel="self" href="http://www.ricbit.com/rss.xml"/>
			<id>tag:blogger.com,1999:blog-6306509703738480474</id>
			<updated>2009-07-04T20:44:28+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Dicas para um bom programa em Python</title>
		<link href="http://feedproxy.google.com/~r/pythonologia/~3/jyfrVNZwYhQ/"/>
		<id>http://pythonologia.org/?p=282</id>
		<updated>2009-06-18T03:47:54+00:00</updated>
		<content type="html">&lt;p&gt;Oi pessoal, desta vez eu vou pular as &amp;#8216;desculpas&amp;#8217; por ter demorado tanto para postar aqui no blog e vamos direto ao assunto.&lt;/p&gt;
&lt;p&gt;Recentemente eu tenho trabalhado bastante com Python (d&#227;!) desenvolvendo projetos de diversos tipos e resolvi escrever aqui sobre algumas coisas que pratico enquanto desenvolvo.&lt;/p&gt;
&lt;h3&gt;C&#243;digo mais robusto&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Deu certo ou errado?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;O que voc&#234; faz quando acontece algo errado na execu&#231;&#227;o do seu m&#233;todo? O que voc&#234; responde &#224; requisi&#231;&#227;o que lhe foi feita?&lt;/p&gt;
&lt;p&gt;Eu tenho visto em muito c&#243;digo por a&#237; os desenvolvedores retornando valores sentinela (&lt;tt&gt;None&lt;/tt&gt;, &lt;tt&gt;null&lt;/tt&gt;, 0, -1, etc.) para avisar que algo incorreto aconteceu na execu&#231;&#227;o do m&#233;todo.&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;python&quot;&gt;&lt;span&gt;def&lt;/span&gt; f&lt;span&gt;&amp;#40;&lt;/span&gt;arg&lt;span&gt;&amp;#41;&lt;/span&gt;:
   &lt;span&gt;if&lt;/span&gt; &lt;span&gt;not&lt;/span&gt; arg:
      &lt;span&gt;return&lt;/span&gt; &lt;span&gt;None&lt;/span&gt;
   &lt;span&gt;return&lt;/span&gt; &lt;span&gt;&amp;#91;&lt;/span&gt; &lt;span&gt;&amp;quot;resultado&amp;quot;&lt;/span&gt;, &lt;span&gt;&amp;quot;de&amp;quot;&lt;/span&gt;, &lt;span&gt;&amp;quot;um&amp;quot;&lt;/span&gt;, &lt;span&gt;&amp;quot;processamento&amp;quot;&lt;/span&gt;  &lt;span&gt;&amp;#93;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Algumas linguagens de programa&#231;&#227;o n&#227;o possuem estruturas de tratamento de exce&#231;&#227;o e, neste caso, o uso de sentinelas &#233; v&#225;lido. Mas quando a linguagem de programa&#231;&#227;o te disponibiliza essa funcionalidade &#233; bom us&#225;-la.&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;python&quot;&gt;&lt;span&gt;def&lt;/span&gt; f&lt;span&gt;&amp;#40;&lt;/span&gt;arg&lt;span&gt;&amp;#41;&lt;/span&gt;:
   &lt;span&gt;if&lt;/span&gt; &lt;span&gt;not&lt;/span&gt; arg:
      &lt;span&gt;raise&lt;/span&gt; &lt;span&gt;ValueError&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;quot;Argumento Invalido&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;
   &lt;span&gt;return&lt;/span&gt; &lt;span&gt;&amp;#91;&lt;/span&gt; &lt;span&gt;&amp;quot;resultado&amp;quot;&lt;/span&gt;, &lt;span&gt;&amp;quot;de&amp;quot;&lt;/span&gt;, &lt;span&gt;&amp;quot;um&amp;quot;&lt;/span&gt;, &lt;span&gt;&amp;quot;processamento&amp;quot;&lt;/span&gt;  &lt;span&gt;&amp;#93;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Deixem as exce&#231;&#245;es fluirem.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Isso mesmo. A menos que voc&#234; saiba exatamente o que voc&#234; deve fazer quando uma exce&#231;&#227;o aparece deixe-a exce&#231;&#227;o &amp;#8220;subir&amp;#8221;. Pode ser que &amp;#8220;l&#225; em cima&amp;#8221; algu&#233;m saiba cuidar dela adequadamente.&lt;/p&gt;
&lt;p&gt;Quando n&#227;o fazemos isso estamos ocultando informa&#231;&#227;o importante para os usu&#225;rios do nosso c&#243;digo (sejam eles usu&#225;rios, outros desenvolvedores ou n&#243;s mesmos).&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;python&quot;&gt;&lt;span&gt;def&lt;/span&gt; f&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;:
   &lt;span&gt;try&lt;/span&gt;:
      &lt;span&gt;return&lt;/span&gt; conecta&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;
   &lt;span&gt;except&lt;/span&gt; ExcecaoQueDeveriaSerErro:
      &lt;span&gt;return&lt;/span&gt; &lt;span&gt;None&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Quando eu implemento esse tipo de m&#233;todo/fun&#231;&#227;o eu fa&#231;o assim (na verdade eu n&#227;o implementaria &lt;tt&gt;f()&lt;/tt&gt; e chamaria &lt;tt&gt;conecta()&lt;/tt&gt;):&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;python&quot;&gt;&lt;span&gt;def&lt;/span&gt; f&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;:
   &lt;span&gt;return&lt;/span&gt; conecta&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;O que seu m&#233;todo/fun&#231;&#227;o retorna?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;C&#243;digo que eu encontrei recentemente:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;python&quot;&gt;&lt;span&gt;def&lt;/span&gt; get_fulanos&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;:
   q = Q&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;quot;select * from patuleia where alcunha like 'fulano%'&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;
   ret = &lt;span&gt;&amp;#91;&lt;/span&gt; &lt;span&gt;str&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;fulano&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;'nome'&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;for&lt;/span&gt; fulano &lt;span&gt;in&lt;/span&gt; q &lt;span&gt;&amp;#93;&lt;/span&gt;
   &lt;span&gt;if&lt;/span&gt; &lt;span&gt;len&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;ret&lt;span&gt;&amp;#41;&lt;/span&gt; == &lt;span&gt;1&lt;/span&gt;:
      &lt;span&gt;return&lt;/span&gt; ret&lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;
   &lt;span&gt;return&lt;/span&gt; ret&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Perceberam o que est&#225; errado? O seu m&#233;todo retorna uma lista de Fulanos ou retorna Fulano?&lt;/p&gt;
&lt;p&gt;Isso est&#225; conceitualmente errado e pode fazer voc&#234; perder horas preciosas do seu dia tentando achar um bug causado por esse tipo de c&#243;digo.&lt;/p&gt;
&lt;p&gt;Aconteceu comigo. Note que &lt;tt&gt;str()&lt;/tt&gt; implementa uma interface de &lt;em&gt;sequence&lt;/em&gt; da mesma forma que &lt;tt&gt;list()&lt;/tt&gt;. Ent&#227;o o erro passa silenciosamente no caso abaixo:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;python&quot;&gt;old_fulanos = &lt;span&gt;&amp;#91;&lt;/span&gt; &lt;span&gt;&amp;quot;Ze Ruela&amp;quot;&lt;/span&gt;, &lt;span&gt;&amp;quot;Ze Mane&amp;quot;&lt;/span&gt; &lt;span&gt;&amp;#93;&lt;/span&gt;
old_fulanos.&lt;span&gt;extend&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;get_fulanos&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;
&lt;span&gt;print&lt;/span&gt; old_fulanos&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Rodando esse c&#243;digo voc&#234; vai obter &lt;tt&gt;['Ze Ruela', 'Ze Mane', 'q', 'u', 'a', 'c', 'k']&lt;/tt&gt; sendo que, em mais de 90% dos casos, o que voc&#234; gostaria de ter seria: &lt;tt&gt;['Ze Ruela', 'Ze Mane', 'quack']&lt;/tt&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;#8220;Nada&amp;#8221; &#233; diferente de &amp;#8220;alguma coisa&amp;#8221;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Essa dica &#233; s&#243; uma complementa&#231;&#227;o da primeira e da segunda dica.&lt;/p&gt;
&lt;p&gt;Quando o seu m&#233;todo/fun&#231;&#227;o retorna uma &lt;em&gt;collection&lt;/em&gt; (seq&#252;&#234;ncia, conjunto, &lt;em&gt;hash&lt;/em&gt;, etc) vazia voc&#234; deve retorn&#225;-la vazia e n&#227;o um valor sentinela (como &lt;tt&gt;None&lt;/tt&gt;). Isso facilita a vida de quem vai usar o seu m&#233;todo/fun&#231;&#227;o:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;python&quot;&gt;&lt;span&gt;def&lt;/span&gt; vazio&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;:
   &lt;span&gt;return&lt;/span&gt; &lt;span&gt;&amp;#91;&lt;/span&gt;&lt;span&gt;&amp;#93;&lt;/span&gt;
&amp;nbsp;
&lt;span&gt;for&lt;/span&gt; elemento &lt;span&gt;in&lt;/span&gt; vazio&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;:
   &lt;span&gt;pass&lt;/span&gt; &lt;span&gt;#... faz algo se o conjunto contiver dados ...&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Se voc&#234; retorna um valor sentinela:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;python&quot;&gt;&lt;span&gt;def&lt;/span&gt; vazio&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;:
   &lt;span&gt;return&lt;/span&gt; &lt;span&gt;None&lt;/span&gt;
&amp;nbsp;
elementos = vazio&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;
&lt;span&gt;if&lt;/span&gt; elementos:
   &lt;span&gt;for&lt;/span&gt; elemento &lt;span&gt;in&lt;/span&gt; elementos:
      &lt;span&gt;pass&lt;/span&gt; &lt;span&gt;# ...&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Notou que tivemos que criar uma vari&#225;vel com o resultado da opera&#231;&#227;o (para n&#227;o precisar cham&#225;-la duas vezes) e tratar a sentinela com um &amp;#8220;&lt;tt&gt;if&lt;/tt&gt;&amp;#8220;? Se eu esque&#231;o de tratar a sentinela meu programa vai quebrar.&lt;/p&gt;
&lt;p&gt;Lembre-se sempre que uma &lt;em&gt;collection&lt;/em&gt; vazia tem valor booleano &amp;#8220;&lt;tt&gt;False&lt;/tt&gt;&amp;#8220;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Todo &amp;#8216;&lt;tt&gt;elif&lt;/tt&gt;&amp;#8216; tem um irm&#227;o &amp;#8216;&lt;tt&gt;else&lt;/tt&gt;&amp;#8216;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Sempre que voc&#234; precisar usar uma constru&#231;&#227;o &lt;tt&gt;if/elif&lt;/tt&gt; coloque uma cl&#225;usula &amp;#8216;&lt;tt&gt;else&lt;/tt&gt;&amp;#8216;. &lt;/p&gt;
&lt;p&gt;Al&#233;m de usar a cl&#225;usula &amp;#8216;&lt;tt&gt;else&lt;/tt&gt;&amp;#8216; eu geralmente fa&#231;o com que ela gere uma exce&#231;&#227;o. Desta forma eu sou obrigado a trabalhar todas as possibilidades nos &amp;#8216;&lt;tt&gt;if/elif&lt;/tt&gt;&amp;#8216; evitando ocultar uma situa&#231;&#227;o que pode ser inv&#225;lida.&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;python&quot;&gt;&lt;span&gt;class&lt;/span&gt; InvalidCommand&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;Exception&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;:
   &lt;span&gt;pass&lt;/span&gt;
&amp;nbsp;
&lt;span&gt;def&lt;/span&gt; minihelp&lt;span&gt;&amp;#40;&lt;/span&gt;comando&lt;span&gt;&amp;#41;&lt;/span&gt;:
   &lt;span&gt;if&lt;/span&gt; comando == &lt;span&gt;&amp;quot;print&amp;quot;&lt;/span&gt;:
      &lt;span&gt;return&lt;/span&gt; u&lt;span&gt;&amp;quot;&amp;quot;&amp;quot;Imprime dados na tela.
                 Deixar&#225; de ser comando no Python 3.0&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
   &lt;span&gt;elif&lt;/span&gt; comando == &lt;span&gt;&amp;quot;assert&amp;quot;&lt;/span&gt;:
      &lt;span&gt;return&lt;/span&gt; u&lt;span&gt;&amp;quot;&amp;quot;&amp;quot;Certifica se uma condi&#231;&#227;o &#233;
               verdadeira e gera uma excess&#227;o em caso contr&#225;rio&amp;quot;
   elif comando == &amp;quot;...&amp;quot;:
      pass # ...
   else:
      raise InvalidCommand(u&amp;quot;Comando %s inv&#225;lido.&amp;quot; % (comando,))&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Eu gosto dessa pr&#225;tica mas isso n&#227;o significa que voc&#234; deva segu&#237;-la sempre. Existem situa&#231;&#245;es onde ter um &amp;#8220;valor &lt;em&gt;default&lt;/em&gt;&amp;#8221; &#233; necess&#225;rio e nestes casos o uso do &lt;tt&gt;else&lt;/tt&gt; sem levantar exce&#231;&#227;o se faz necess&#225;rio.&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;python&quot;&gt;&lt;span&gt;if&lt;/span&gt; comando == &lt;span&gt;&amp;quot;if&amp;quot;&lt;/span&gt;:
   &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&amp;quot;Vai usar elif?&amp;quot;&lt;/span&gt;
&lt;span&gt;elif&lt;/span&gt; comando == &lt;span&gt;&amp;quot;elif&amp;quot;&lt;/span&gt;:
   &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&amp;quot;Muito bem. Agora falta o else&amp;quot;&lt;/span&gt;
&lt;span&gt;else&lt;/span&gt;:
   &lt;span&gt;print&lt;/span&gt; &lt;span&gt;&amp;quot;Pronto. Agora est&#225; bom.&amp;quot;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3&gt;&amp;#8220;Pythonismos&amp;#8221;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Use mais atributos p&#250;blicos do que atributos protegidos (&amp;#8221;&lt;tt&gt;_&lt;/tt&gt;&amp;#8220;).&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Programadores acostumados com Java utilizam muito as cl&#225;usulas &amp;#8216;&lt;tt&gt;private&lt;/tt&gt;&amp;#8216; e &amp;#8216;&lt;tt&gt;protected&lt;/tt&gt;&amp;#8216; para encapsular os atributos de um objeto para logo depois implementarem os &lt;em&gt;getters&lt;/em&gt; e &lt;em&gt;setters&lt;/em&gt; para acessar esses atributos.&lt;/p&gt;
&lt;p&gt;Essa pr&#225;tica &#233; aconselhada em Java porque em algum momento do futuro voc&#234;, talvez, precise validar esses dados ou retornar valores calculados. Nestes casos os programadores apenas implementam essa l&#243;gica nos m&#233;todos que acessam o atributo privado.&lt;/p&gt;
&lt;p&gt;Mas em Python isso n&#227;o &#233; necess&#225;rio. Em Python voc&#234; pode transformar seu atributo p&#250;blico em uma &amp;#8220;&lt;em&gt;property&lt;/em&gt;&amp;#8221; que n&#227;o muda a forma de se acessar o atributo e permite o acrescimo de l&#243;gica ao acesso do mesmo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Evite usar &amp;#8220;&lt;tt&gt;__&lt;/tt&gt;&amp;#8220;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Por conven&#231;&#227;o, em Python, todo m&#233;todo ou atributo iniciado com um &amp;#8220;&lt;tt&gt;_&lt;/tt&gt;&amp;#8221; &#233; considerado privado (equivalente ao &lt;tt&gt;protected&lt;/tt&gt; em Java) e n&#227;o deve ser acessado de fora da classe mesmo sendo poss&#237;vel faz&#234;-lo.&lt;/p&gt;
&lt;p&gt;Dito isso parece meio &#243;bvio que n&#227;o precisamos usar &amp;#8220;&lt;tt&gt;__&lt;/tt&gt;&amp;#8221; para dificultar ainda mais o acesso &#224; esse atributo/m&#233;todo. Al&#233;m disso o uso do &amp;#8220;&lt;tt&gt;__&lt;/tt&gt;&amp;#8221; traz alguns incoveninentes para quem quer derivar a sua classe e acessar este m&#233;todo/atributo j&#225; que o Python o renomeia acrescentando o nome da classe ao seu nome (&lt;tt&gt;__attr&lt;/tt&gt; vira &lt;tt&gt;Classe__attr&lt;/tt&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;N&#227;o sobrescreva &lt;em&gt;builtins&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Python disponibiliza v&#225;rias fun&#231;&#245;es e classes builtins que facilitam muito o uso da linguagem e economizam digita&#231;&#227;o. Mas esses builtins tem nomes muito &amp;#8220;comuns&amp;#8221; e frequentemente a gente usa os nomes dos builtins como nomes de identificadores. Eu mesmo vivo (vivia) fazendo isso.&lt;/p&gt;
&lt;p&gt;O problema &#233; que em certos momentos alguns problemas podem acontecer quando voc&#234; tenta chamar um buitin que j&#225; n&#227;o &#233; mais um builtin. Na maioria das vezes o problema &amp;#8220;explode&amp;#8221; logo e voc&#234; rapidamente conserta mas em alguns casos voc&#234; pode perder muitas horas tentando ach&#225;-lo.&lt;/p&gt;
&lt;p&gt;Algumas pessoas usam um &amp;#8220;_&amp;#8221; no fim do nome do identificador (ex. &amp;#8220;id&amp;#8221; vira &amp;#8220;id_&amp;#8221;) mas eu acho isso um pouco feio ent&#227;o uso s&#243; quando n&#227;o encontro uma alternativa melhor.&lt;/p&gt;
&lt;p&gt;Vou colocar aqui uma tabela de equival&#234;ncias que eu costumo usar para substituir o nome dos &lt;em&gt;builtins&lt;/em&gt; mais comumente sobrescritos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;id&lt;/strong&gt; &amp;#8211; ident, key&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;type&lt;/strong&gt; &amp;#8211; kind, format&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;object&lt;/strong&gt; &amp;#8211; obj&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;list&lt;/strong&gt; &amp;#8211; plural (lista de &lt;tt&gt;element&lt;/tt&gt; vira &lt;tt&gt;elements&lt;/tt&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;file&lt;/strong&gt; &amp;#8211; fd, file_handler&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;dict&lt;/strong&gt; &amp;#8211; dic, hashmap&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;str&lt;/strong&gt; &amp;#8211; text, msg&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;An&#225;lise est&#225;tica economiza seu tempo.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Eu uso o &lt;a href=&quot;http://www.logilab.org/857&quot;&gt;pylint&lt;/a&gt;, mas conhe&#231;o algumas pessoas que preferem o &lt;a href=&quot;http://divmod.org/trac/wiki/DivmodPyflakes&quot;&gt;pyflakes&lt;/a&gt; ou o &lt;a href=&quot;http://pychecker.sourceforge.net/&quot;&gt;PyChecker&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A dica &#233; essa: usar um programinha de an&#225;lise est&#225;tica como esses pode diminuir consideravelmente aqueles errinhos chatos de sintaxe, ou de digita&#231;&#227;o. Pode limpar os &amp;#8216;import&amp;#8217; desnecess&#225;rios do seu software, etc, etc.&lt;/p&gt;
&lt;p&gt;&#201; l&#243;gico que esse tipo de ferramenta n&#227;o substitui uma boa pol&#237;tica de testes mas &#233; um bom complemento para ela.&lt;/p&gt;
&lt;h3&gt;&lt;em&gt;Challenge yourself&lt;/em&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;M&#225;ximo de 3 n&#237;veis de indenta&#231;&#227;o. (ou 4 se estiver dentro de uma classe)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ao se esfor&#231;ar para que seu c&#243;digo n&#227;o fique muito aninhado voc&#234; est&#225; trabalhando melhor a implementa&#231;&#227;o dos seus m&#233;todos e fun&#231;&#245;es. Nem sempre &#233; poss&#237;vel (ou aconselh&#225;vel) restringir tanto o n&#237;vel de identa&#231;&#227;o do seu c&#243;digo mas muitas vezes isso melhora a sua implementa&#231;&#227;o.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;M&#225;ximo de 2 indire&#231;&#245;es.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Recebeu um objeto como par&#226;metro? Chame apenas m&#233;todos dele e evite ao m&#225;ximo chamar m&#233;todos do retorno desses objetos:&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;python&quot;&gt;&lt;span&gt;def&lt;/span&gt; f&lt;span&gt;&amp;#40;&lt;/span&gt;obj&lt;span&gt;&amp;#41;&lt;/span&gt;:
    obj.&lt;span&gt;metodo&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;# legal!&lt;/span&gt;
    obj.&lt;span&gt;metodo&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt;.&lt;span&gt;outro_metodo&lt;/span&gt;&lt;span&gt;&amp;#40;&lt;/span&gt;&lt;span&gt;&amp;#41;&lt;/span&gt; &lt;span&gt;# ruim!&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Quando voc&#234; chama um m&#233;todo pra um objeto retornado por outro m&#233;todo voc&#234; est&#225; aumentando o acoplamento entre as classes envolvidas impedindo que uma delas seja substitu&#237;da (ou reimplementada) &amp;#8216;impunemente&amp;#8217;.&lt;/p&gt;
&lt;p&gt;Essa regrinha &#233; uma das regrinhas da &lt;a href=&quot;http://en.wikipedia.org/wiki/Principle_of_least_knowledge&quot;&gt;Lei de Demeter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;M&#225;ximo de 0 &amp;#8216;&lt;tt&gt;if/elif/else&lt;/tt&gt;&amp;#8217;s.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Polimorfismo &#233; isso. No mundo OO ideal, perfeito e ut&#243;pico praticamente n&#227;o precisar&#237;amos do comando &amp;#8220;&lt;tt&gt;if&lt;/tt&gt;&amp;#8221; e usar&#237;amos somente polimorfismo. Mas&amp;#8230; como n&#227;o conseguimos isso t&#227;o facilmente&lt;a href=&quot;http://pythonologia.org/2009/03/03/dicas-para-um-bom-programa-em-python/#footnote_oo&quot;&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;/a&gt; devemos, ao menos, usar o &amp;#8220;&lt;tt&gt;if&lt;/tt&gt;&amp;#8221; com modera&#231;&#227;o.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclus&#227;o&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Esta &#233; uma lista incompleta de dicas para programadores Python. Se futuramente eu lembrar ou aprender algo novo eu volto aqui para falar sobre o assunto.&lt;/p&gt;
&lt;p&gt;Alguns desenvolvedores podem n&#227;o concordar com as dicas. Neste caso eles podem enriquecer ainda mais esse texto argumentando sobre o as suas restri&#231;&#245;es no espa&#231;o para coment&#225;rios.&lt;/p&gt;
&lt;p&gt;Se voc&#234; tiver alguma dica para compartilhar com a gente coloque nos coment&#225;rios. Se ela for boa mesmo eu coloco ela no corpo principal do blog.&lt;/p&gt;
&lt;p&gt;&lt;a name=&quot;footnote_oo&quot;&gt;&lt;sup&gt;*&lt;/sup&gt;&lt;/a&gt; eu mesmo s&#243; consegui fazer uma aplica&#231;&#227;o OO funcional sem usar um &#250;nico &lt;tt&gt;if&lt;/tt&gt;. Era uma implementa&#231;&#227;o do joguinho de adivinha&#231;&#227;o de animais (aquele que pergunta &amp;#8220;Vive na &#225;gua? (s/n)&amp;#8221;) em Smalltalk.&lt;/p&gt;
&lt;div class=&quot;feedflare&quot;&gt;
&lt;a href=&quot;http://feeds.feedburner.com/~ff/pythonologia?a=jyfrVNZwYhQ:_fZnyisYg4s:yIl2AUoC8zA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/pythonologia?d=yIl2AUoC8zA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://feeds.feedburner.com/~ff/pythonologia?a=jyfrVNZwYhQ:_fZnyisYg4s:7Q72WNTAKBA&quot;&gt;&lt;img src=&quot;http://feeds.feedburner.com/~ff/pythonologia?d=7Q72WNTAKBA&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;/div&gt;</content>
		<author>
			<name>Osvaldo Santana</name>
			<uri>http://pythonologia.org</uri>
		</author>
		<source>
			<title type="html">Pythonologia</title>
			<subtitle type="html">Python, open-source e desenvolvimento</subtitle>
			<link rel="self" href="http://feeds.feedburner.com/pythonologia"/>
			<id>http://pythonologia.org/feed/atom/</id>
			<updated>2009-06-30T22:44:04+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Lavar as m&#227;os</title>
		<link href="http://www.liberiun.com/blog/2009/6/16/lavar-as-maos"/>
		<id>tag:www.liberiun.com,2009-06-16:,blog/entry;2009/6/16/lavar-as-maos</id>
		<updated>2009-06-16T21:36:24+00:00</updated>
		<content type="html">A quase 2.000 anos atr&#225;s, Pilatos lavou as m&#227;os para se livrar de uma decis&#227;o dif&#237;cil na sua vida. A 100 anos atr&#225;s, em um hospital em Viena, Dr. Semmelweis demonstrou que lavar as m&#227;os rotineiramente &#233; imprescind&#237;vel para prevenir doen&#231;as infecto-contagiosas. Hoje os m&#233;dicos pedem para que todos lavemos as m&#227;os para evitar a nova gripe su&#237;na. Agora me fale a verdade: Quantas  vezes voc&#234; j&#225; foi no seu fast-food favorito e comeu as batatas fritas com suas m&#227;os e nem lembrou antes de passar no lavat&#243;rio?&lt;br /&gt;
&lt;br /&gt;
Na programa&#231;&#227;o tamb&#233;m &#233; assim: Diversos aspectos que tornariam nossos c&#243;digos mais eficientes ou simplesmente mais leg&#237;veis s&#227;o esquecidos em troca de diminuir algums segundos no tempo de desenvolvimento. E o resultado &#233; claro: Dores de cabe&#231;a, febre alta e dores de garganta de tanto gritar com seu pr&#243;pio c&#243;digo.&lt;br /&gt;
&lt;br /&gt;
Precisamos &quot;lavar as m&#227;os&quot; antes de programar! E como lembrar nunca &#233; pouco, v&#227;o umas dicas b&#225;sicas para mantermos nossos c&#243;digos limpos e organizados:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1-&lt;/b&gt; Identar o c&#243;digo corretamente: Sei que no python somos obrigados a identar corretamente o c&#243;digo, mas quando chega na camada de visualiza&#231;&#227;o da nossa aplica&#231;&#227;o web, muita gente esquece que HTML tamb&#233;m se identa... assim como XML e qualquer linguagem de marca&#231;&#227;o, script etc.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2-&lt;/b&gt; Declare vari&#225;veis com nomes que fazem sentido! X, Y, Z, I, C, A s&#227;o letras bem bacanas, mas quando vemos um:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;for x in y:
   z+=x[c]*a
&lt;/pre&gt;
n&#227;o fazemos a m&#237;nima id&#233;ia do que se trata. Ficaria muito mais simples se fosse:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;for aluno in classe:
  soma_notas += aluno[nota]*peso
&lt;/pre&gt;
Fica bem mais claro, e muito mais f&#225;cil de corrigir eventuais erros.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3-&lt;/b&gt; Escreva c&#243;digos simples. N&#227;o tente em apenas 1 m&#233;todo resolver todos os problemas da humanidade. Divida para conquistar, sempre que poss&#237;vel.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4-&lt;/b&gt; Evite condicionais e loops extremamente longos. Isso deixa o c&#243;digo mais dif&#237;cil de corrigir, por exemplo:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;if correto:
      === trocentas instru&#231;&#245;es ===
      return resultado
else:
     return erro
&lt;/pre&gt;

ficaria muito mais claro:&lt;br /&gt;
&lt;pre&gt;if not correto:
   return erro

=== segue as trocentas instru&#231;&#245;es normalmente ===
&lt;/pre&gt;

&lt;b&gt;5-&lt;/b&gt; IF dentro de IF que ta dentro de outro IF que fica dentro de um FOR tamb&#233;m n&#227;o &#233; uma boa id&#233;ia! Tente sempre se limitar no m&#225;ximo a 3 identa&#231;&#245;es, sempre que chegar a algo maior que isso verifique se esse c&#243;digo n&#227;o pode ser simplificado.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;6-&lt;/b&gt; Evite copiar e colar! Sempre tente isolar c&#243;digos similares em fun&#231;&#245;es ou m&#233;todos de forma a diminuirmos a repeti&#231;&#227;o do c&#243;digo, e a poss&#237;vel repeti&#231;&#227;o de um bug.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;7-&lt;/b&gt; Comente seu c&#243;digo! Coment&#225;rios ajudam os desenvolvedores a entender c&#243;digos mais complexos e at&#233; aonde alguma coisa ainda est&#225; incompleta ou precisa ser melhorada.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;8-&lt;/b&gt; N&#227;o abuse dos coment&#225;rios!! Comentar &#233; bom, mas comentar demais s&#243; atrapalha. C&#243;digos bem escritos evitam coment&#225;rios.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;9-&lt;/b&gt; N&#227;o misture seu c&#243;digo! Lembre-se que aonde &#233; visualiza&#231;&#227;o precisamos de visualiza&#231;&#227;o, e aonde &#233; l&#243;gica precisamos de l&#243;gica. Evite programar no HTML e desenhar interface em Python.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;10-&lt;/b&gt; E por fim: Teste. Sempre teste. Se modificou um c&#243;digo teste. Por mais simples que seja sua modifica&#231;&#227;o sempre teste. Se j&#225; soubessemos de antem&#227;o se nosso c&#243;digo fosse dar problemas n&#227;o existiria bugs em nenhum programa.&lt;br /&gt;
&lt;br /&gt;
Essas foram minhas dicas e espero que voc&#234; as pratique sempre. Sei que a maioria das pessoas j&#225; sabem dessas coisas, mas n&#227;o adianta nada conhecer e n&#227;o colocar em pr&#225;tica.&lt;br /&gt;
&lt;br /&gt;
Abra&#231;o a todos e n&#227;o esque&#231;am de lavar as m&#227;os!&lt;br /&gt;</content>
		<author>
			<name>Thomaz Reis</name>
			<uri>http://www.liberiun.com/blog/</uri>
		</author>
		<source>
			<title type="html">Blog da Liberiun</title>
			<subtitle type="html">Blog dos colaboradores da Liberiun</subtitle>
			<link rel="self" href="http://www.liberiun.com/blog/feed.atom"/>
			<id>http://www.liberiun.com/blog/feed.atom</id>
			<updated>2009-07-04T20:44:23+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="pt-BR">
		<title type="html">Pylons 0.97 lan&#231;ado</title>
		<link href="http://devlog.waltercruz.com/pylons-0-97-lancado"/>
		<id>http://devlog.waltercruz.com/pylons-0-97-lancado</id>
		<updated>2009-06-13T18:52:37+00:00</updated>
		<content type="html">&lt;p&gt;&lt;a href=&quot;http://pylonshq.com/articles/archives/2009/2/pylons_097_released&quot;&gt;http://pylonshq.com/articles/archives/2009/2/pylons_097_released&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;a href=&quot;http://devlog.waltercruz.com/media/blogs/devlog/pylons_logo.png&quot;&gt;&lt;img src=&quot;http://devlog.waltercruz.com/media/blogs/devlog/./.evocache/pylons_logo.png/fit-320x320.png&quot; alt=&quot;&quot; title=&quot;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Ap&#243;s um grande tempo de espera, foi lan&#231;ada a &lt;a href=&quot;http://pylonshq.com/articles/archives/2009/2/pylons_097_released&quot;&gt;vers&#227;o 0.97 do framework web Pylons&lt;/a&gt; As principais mudan&#231;as:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Agora o WebOb &#233; usado para objetos de requisi&#231;&#227;o e resposta&lt;/li&gt;
&lt;li&gt;Melhorias de performance na inicializa&#231;&#227;o de objetos&lt;/li&gt;
&lt;li&gt;Atualiza&#231;&#227;o do Beaker e do Routes&lt;/li&gt;
&lt;li&gt;Melhorias e otimiza&#231;&#245;es nos middlewares&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;O site do Pylons passou por algumas mudan&#231;as algumas semanas atr&#225;s, ficou bem bonito e mais organizado. Agora existe uma nova documenta&#231;&#227;o gerada com o &lt;a href=&quot;http://pylonshq.com/docs/en/0.9.7/&quot;&gt;Sphinx&lt;/a&gt;, e um &lt;a href=&quot;http://pylonsbook.com/&quot;&gt;livro est&#225; dispon&#237;vel online&lt;/a&gt;, o que deve minimizar os problemas que tinha a documenta&#231;&#227;o.  O novo site do Pylons usa o CouchDB como backend, e seu c&#243;digo est&#225; dispon&#237;vel em &lt;a href=&quot;http://bitbucket.org/bbangert/kai/overview/&quot;&gt;http://bitbucket.org/bbangert/kai/overview/&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>Walter Cruz</name>
			<uri>http://devlog.waltercruz.com/</uri>
		</author>
		<source>
			<title type="html">devlog - Categoria: Python</title>
			<subtitle type="html">Textos sobre desenvolvimento de software, software livre, not&#237;cias sobre tecnologia e opni&#245;es sobre a cria&#231;&#227;o de software e ferramentas livres.</subtitle>
			<link rel="self" href="http://devlog.waltercruz.com/python.rss"/>
			<id>http://devlog.waltercruz.com/?tempskin=_atom</id>
			<updated>2009-07-04T20:44:05+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">PythonBrasil 5: Definidos os palestrantes internacionais</title>
		<link href="http://associacao.python.org.br/associacao/imprensa/noticias/pythonbrasil-5-definidos-os-palestrantes-internacionais"/>
		<id>http://associacao.python.org.br/associacao/imprensa/noticias/pythonbrasil-5-definidos-os-palestrantes-internacionais</id>
		<updated>2009-06-09T14:54:37+00:00</updated>
		<content type="html">Jacob Kaplan-Moss e Colin Winter ser&#227;o os palestrantes internacionais convidados para a Confer&#234;ncia Python Brasil 5.</content>
		<author>
			<name>Noticias da APyB</name>
			<uri>http://associacao.pythonbrasil.org/noticias</uri>
		</author>
		<source>
			<title type="html">Not&#237;cias</title>
			<subtitle type="html">Not&#237;cias sobre a Associa&#231;&#227;o.</subtitle>
			<link rel="self" href="http://associacao.python.org.br/noticias/RSS"/>
			<id>http://associacao.python.org.br/noticias/RSS</id>
			<updated>2009-07-04T10:44:06+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">A Look At The Landscape, After Five Months</title>
		<link href="http://awkly.org/2009/06/05/a-look-at-the-landscape-after-five-months/"/>
		<id>http://awkly.org/?p=299</id>
		<updated>2009-06-05T20:27:13+00:00</updated>
		<content type="html">&lt;div class=&quot;snap_preview&quot;&gt;&lt;br /&gt;&lt;p&gt;Over the past few months, friends and family have been very curious about how my new job is going, and it&amp;#8217;s been hard to stop for a moment and go into detail about it. I&amp;#8217;ve been simply nodding and saying &amp;#8220;It&amp;#8217;s fine&amp;#8221;. &lt;/p&gt;
&lt;p&gt;This is an attempt at summarizing all the activity that happened in the last five months, though it&amp;#8217;s far from being a short summary. If I had to pick a two words to describe my first five months at Canonical, it would be &amp;#8220;&lt;em&gt;Pure Awesomeness&lt;/em&gt;&amp;#8220;. For a more detailed view, grab a cup of joe or your favorite other beverage and keep on reading.&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;more-299&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Today is a special day. Exactly five months ago, on January 5th, I joined &lt;a href=&quot;http://www.canonical.com&quot;&gt;Canonical&lt;/a&gt; to work on the &lt;a href=&quot;http://www.canonical.com/projects/landscape&quot;&gt;Landscape&lt;/a&gt; project. &lt;/p&gt;
&lt;p&gt;It has been quite a ride so far, with two sprints with the Landscape team, AllHands and UDS in Barcelona just a week ago, and lots of excitement about the future. Saying that I&amp;#8217;m completely stunned by the work everyone at Canonical has been putting together and how much the teams have grown in the last few months doesn&amp;#8217;t do enough justice to it.&lt;/p&gt;
&lt;p&gt;At AllHands and UDS we got a short preview of the things that are coming out in the next cycle and beyond. An example of that is the newly formed Design and User Experience (DUX) team which will not only be focusing on Ubuntu itself, but on many other areas across Canonical and the whole Open Source community in general. &lt;/p&gt;
&lt;p&gt;At UDS, the DUX team had a special &amp;#8216;booth&amp;#8217; where any person from any project could walk to them and get advice about their personal or favorite application. One person which has &lt;a href=&quot;http://seilo.geekyogre.com/2009/06/udss-influence-on-gnome-zeitgeist/&quot;&gt;favorably used such advice already&lt;/a&gt; was Seif Lofty, from Gnome Zeitgeist. I met Seif during breakfast at the first day of UDS and I cannot describe how excited he was about simply *being* at UDS. And he was certainly twice as happy when he left.&lt;/p&gt;
&lt;p&gt;Another person I had the joy to meet was &lt;a href=&quot;http://blog.davebsd.com/&quot;&gt;David Siegel&lt;/a&gt;, of Gnome Do fame. We teamed during AllHands on the infamous &amp;#8220;Fun In The Woods&amp;#8221; activity, which had some people walking like zombies on the day after.&lt;/p&gt;
&lt;p&gt;Even more importantly, I was able to meet many many more other colleagues from different teams and wrap up some loose ends from tasks that I got started during the first couple months. I&amp;#8217;m definitely impressed by the amount of plain brilliant people that are part of Canonical as of today. &lt;/p&gt;
&lt;p&gt;In a sense, being at a Canonical event is very much like being at a Plone conference. Everyone seems to be very receptive about new ideas and very friendly and laid back. And as a bonus, I was able to exercise my (not so secret now) power of throwing some crazy ideas around and see how they influence people. And man, I&amp;#8217;m already impressed by the outcomes, just a week after the fact. &lt;/p&gt;
&lt;p&gt;To me, this has been the most rewarding thing so far, to be able make big contributions not in lines of code, but in ideas that can make a concrete difference in the hands of the right people. This is something that can only be possible at a company the size Canonical is at the moment, where it&amp;#8217;s just big enough that you can grab a mind or two to push an agenda without affecting the rest of the team and still small enough that you can influence decisions.&lt;/p&gt;
&lt;p&gt;As my colleague Jamu would best describe, &amp;#8220;I&amp;#8217;m PUMPED!&amp;#8221;. :)&lt;/p&gt;
&lt;p&gt;But that&amp;#8217;s not all. Software-wise, I was able to make some big contributions too. The Landscape team just finished a 6 month development cycle that brought &lt;a href=&quot;http://blog.landscape.canonical.com/2009/04/22/landscape-13/&quot;&gt;many cool features to life&lt;/a&gt;. I&amp;#8217;m really happy with that, and specially with the speed that this team can get features from the black board into reality. It&amp;#8217;s also a much different environment than what I was used to, with very well-defined and refined processes for ensuring the overall quality of anything that is produced. One process that I&amp;#8217;m specially enjoying is the requirement for two positive reviews before landing a branch. I hope to talk more about that soon (that is, sooner than 5 months from now *wink*). &lt;/p&gt;
&lt;p&gt;As for my role in the team, it is quite different than what I&amp;#8217;m used to. I&amp;#8217;ve been focusing a lot on the UI aspects of Landscape, on ways to make things more obvious and more streamlined. I&amp;#8217;ve been also writing a ton of Javascript, and collaborating with other teams to define better policies for Javascript testing in general. And finally, we will now have a person from the DUX team dedicated to working with us, which will push work on the Landscape UI even further.&lt;/p&gt;
&lt;p&gt;I also had the chance of interacting with the Launchpad team, which has a much more refined process due to the size of their team. Over at Launchpad, I started a branch back in mid-December, even before starting at Canonical, to allow Launchpad to use the &lt;a href=&quot;http://chameleon.repoze.org/&quot;&gt;Chameleon Template Engine&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;That was another wild ride, and during the course of this project I was able to contribute tons of fixes upstream to Malthe Borch to make Chameleon even more compatible with plain old ZPT. In fact, it is so compatible at the moment that due to the magic of z3c.ptcompat Launchpad will be able to run *both* Chameleon and ZPT with the flip of an environment variable. Even more stunning, the changes required to code were minimal, basically changing imports to use z3c.ptcompat, and in templates we&amp;#8217;ve had to fix some non-XHTML compliant ones and remove unused i18n tags. I am happy to announce that this branch will soon be merged (it was submitted to &lt;a href=&quot;http://omsg.files.wordpress.com/2009/06/screenshot_031.png&quot;&gt;PQM&lt;/a&gt;, &lt;a href=&quot;http://omsg.files.wordpress.com/2009/06/screenshot_032.png&quot;&gt;successfully accepted&lt;/a&gt; and is waiting to &lt;a href=&quot;http://omsg.files.wordpress.com/2009/06/screenshot_033.png&quot;&gt;land the buildbot queue&lt;/a&gt;). The bad news is that not all tests pass at the moment with Chameleon enabled, but we will be dogfooding and fixing those tests as we go. It was too much pain already to maintain a nearly 6 month old branch outside the main tree. ;)&lt;/p&gt;
&lt;p&gt;I am really interested in many of the things that the Launchpad team is doing, process-wise. The PQM seems like a very nice idea for a bigger team like theirs, though it would probably be useful to our smaller team in Landscape too, and to others in general. Hopefully I will get a chance to explore it more and talk about it during the upcoming FISL 10, in Porto Alegre.&lt;/p&gt;
&lt;p&gt;Lastly, but not least important, I&amp;#8217;m also working on getting nightly builds of the Bzr Installer for Windows rolling, and a more streamlined process for the official builds. Karl Fogel, of &lt;a href=&quot;http://producingoss.com/&quot;&gt;Producing OSS&lt;/a&gt; fame, and our Launchpad Ombudsman is making sure I keep my promises about that, which is yet another great incentive.&lt;/p&gt;
&lt;p&gt;All in all, there&amp;#8217;s of course a ton of things I forgot to talk about and which happened in the last 5 months, but this post is already getting too long so I will stop right here and save some of the meat for a future one. Stay tuned!&lt;/p&gt;
  &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gocomments/omsg.wordpress.com/299/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/comments/omsg.wordpress.com/299/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godelicious/omsg.wordpress.com/299/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/delicious/omsg.wordpress.com/299/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/gostumble/omsg.wordpress.com/299/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/stumble/omsg.wordpress.com/299/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/godigg/omsg.wordpress.com/299/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/digg/omsg.wordpress.com/299/&quot; /&gt;&lt;/a&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;http://feeds.wordpress.com/1.0/goreddit/omsg.wordpress.com/299/&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://feeds.wordpress.com/1.0/reddit/omsg.wordpress.com/299/&quot; /&gt;&lt;/a&gt; &lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;http://stats.wordpress.com/b.gif?host=awkly.org&amp;blog=232351&amp;post=299&amp;subd=omsg&amp;ref=&amp;feed=1&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Sidnei da Silva</name>
			<uri>http://awkly.org</uri>
		</author>
		<source>
			<title type="html">dreamcatching</title>
			<subtitle type="html">&lt;div id=&quot;wrapper&quot;&gt;

&lt;div id=&quot;header&quot;&gt;

&lt;h1&gt;&lt;a href=&quot;http://wordpress.com/&quot;&gt;WordPress.com&lt;/a&gt;&lt;/h1&gt;


&lt;form action=&quot;http://en.search.wordpress.com/&quot; method=&quot;get&quot; id=&quot;head-search&quot;&gt;
&lt;input class=&quot;text&quot; name=&quot;q&quot; id=&quot;q&quot; type=&quot;text&quot; value=&quot;Search WordPress.com Blogs&quot; maxlength=&quot;150&quot; /&gt; &lt;input type=&quot;submit&quot; class=&quot;button&quot; value=&quot;Go&quot; /&gt;
&lt;/form&gt;


&lt;ul id=&quot;topnav&quot;&gt;
	&lt;li&gt;&lt;a class=&quot;current&quot; href=&quot;http://wordpress.com/&quot;&gt;Home&lt;/a&gt;&lt;/li&gt;
	 
		&lt;li&gt;&lt;a class=&quot;&quot; href=&quot;http://en.wordpress.com/signup/?ref=navigation&quot;&gt;Sign Up&lt;/a&gt;&lt;/li&gt; 
		&lt;li&gt;&lt;a class=&quot;&quot; href=&quot;http://en.wordpress.com/features/&quot;&gt;Features&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a class=&quot;&quot; href=&quot;http://en.blog.wordpress.com/&quot;&gt;Blog&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a class=&quot;&quot; href=&quot;http://en.wordpress.com/about/&quot;&gt;Our Story&lt;/a&gt;&lt;/li&gt;
	&lt;li class=&quot;last-child&quot;&gt;&lt;a class=&quot;&quot; href=&quot;http://en.wordpress.com/advanced-services/&quot;&gt;Advanced&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
&lt;/div&gt;



&lt;div class=&quot;pagebody&quot;&gt;

	&lt;div id=&quot;signupnow&quot;&gt;
		&lt;div id=&quot;signupnow-text&quot;&gt;
			&lt;h2&gt;Express yourself. Start a blog.&lt;/h2&gt;
			&lt;h4&gt;&lt;a href=&quot;http://wordpress.com/features/&quot;&gt;See our free features &#8594;&lt;/a&gt;&lt;/h4&gt;
		&lt;/div&gt;

		&lt;div id=&quot;signupnow-button&quot;&gt;
			&lt;a href=&quot;http://wordpress.com/signup/?ref=bigassbutton&quot;&gt;Sign Up Now!&lt;/a&gt;
		&lt;/div&gt;
	&lt;/div&gt;

&lt;div id=&quot;intro&quot;&gt;
	&lt;div class=&quot;push&quot;&gt;&lt;/div&gt;
		&lt;h6&gt;&lt;span&gt;215,229&lt;/span&gt; bloggers, &lt;span&gt;153,282&lt;/span&gt; new posts, &lt;span&gt;43,939,144&lt;/span&gt; words today.&lt;/h6&gt;
	
	&lt;form id=&quot;language&quot; name=&quot;language&quot; action=&quot;http://wordpress.com/&quot;&gt;
		&lt;label for=&quot;language-select&quot;&gt;Preferred Language:&lt;/label&gt;
		&lt;select id=&quot;language-select&quot; name=&quot;languagesel&quot;&gt;
			&lt;option value=&quot;http://wordpress.com/&quot;&gt;English&lt;/option&gt;
			&lt;option value=&quot;http://es.wordpress.com/&quot;&gt;Espanol&lt;/option&gt;&lt;option value=&quot;http://de.wordpress.com/&quot;&gt;Deutsch&lt;/option&gt;&lt;option value=&quot;http://pt-br.wordpress.com/&quot;&gt;Portugues do Brasil&lt;/option&gt;&lt;option value=&quot;http://fr.wordpress.com/&quot;&gt;Francais&lt;/option&gt;&lt;option value=&quot;http://it.wordpress.com/&quot;&gt;Italiano&lt;/option&gt;&lt;option value=&quot;http://id.wordpress.com/&quot;&gt;Bahasa Indonesia&lt;/option&gt;&lt;option value=&quot;http://nl.wordpress.com/&quot;&gt;Nederlands&lt;/option&gt;&lt;option value=&quot;http://sv.wordpress.com/&quot;&gt;Svenska&lt;/option&gt;&lt;option value=&quot;http://pt.wordpress.com/&quot;&gt;Portugues&lt;/option&gt;&lt;option value=&quot;http://tr.wordpress.com/&quot;&gt;Turkce&lt;/option&gt;			&lt;option value=&quot;/languages/&quot;&gt;More Languages&lt;/option&gt;
		&lt;/select&gt;
	&lt;/form&gt;

	&lt;div id=&quot;lang-guess-wrap&quot;&gt;&lt;/div&gt;
	&lt;div class=&quot;pull&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;block_3&quot;&gt;
	
		&lt;div id=&quot;login&quot;&gt;
	&lt;div class=&quot;head&quot;&gt;
	&lt;h6&gt;Already Hip?&lt;/h6&gt;
	&lt;/div&gt;
	&lt;form name=&quot;loginform&quot; id=&quot;loginform&quot; action=&quot;https://wordpress.com/wp-login.php&quot; method=&quot;post&quot;&gt;
	&lt;p&gt;&lt;label&gt;&lt;img class=&quot;alignright&quot; src=&quot;http://s.wordpress.com/wp-content/themes/h4/i/secure.gif&quot; alt=&quot;This is a secure form&quot; title=&quot;This is a secure form&quot; /&gt;Username:&lt;br /&gt;&lt;input type=&quot;text&quot; name=&quot;log&quot; id=&quot;user_login&quot; value=&quot;&quot; tabindex=&quot;1&quot; /&gt;&lt;/label&gt;&lt;/p&gt;
	&lt;p&gt;&lt;label&gt;Password:&lt;br /&gt; &lt;input type=&quot;password&quot; name=&quot;pwd&quot; id=&quot;user_pass&quot; value=&quot;&quot; tabindex=&quot;2&quot; /&gt;&lt;/label&gt;&lt;/p&gt;

	&lt;p class=&quot;rememberme&quot;&gt;
	&lt;label&gt;&lt;input name=&quot;rememberme&quot; type=&quot;checkbox&quot; id=&quot;rememberme&quot; value=&quot;forever&quot; tabindex=&quot;3&quot; checked=&quot;checked&quot; /&gt;
	Remember me&lt;/label&gt;
	&lt;/p&gt;
	&lt;p class=&quot;submit&quot;&gt;
	&lt;input type=&quot;hidden&quot; id=&quot;testcookie&quot; name=&quot;testcookie&quot; value=&quot;0&quot; /&gt;
	&lt;input type=&quot;hidden&quot; id=&quot;redirect_to&quot; name=&quot;redirect_to&quot; value=&quot;http://wordpress.com/&quot; /&gt;
	&lt;input type=&quot;submit&quot; name=&quot;submit&quot; id=&quot;login-form&quot; value=&quot;Login&quot; tabindex=&quot;4&quot; /&gt;
	&lt;/p&gt;
	&lt;p class=&quot;lost&quot;&gt;&lt;a href=&quot;http://wordpress.com/wp-login.php?action=lostpassword&quot;&gt;Lost your password?&lt;/a&gt;&lt;/p&gt;

	&lt;/form&gt;
	
	&lt;/div&gt;

	
	&lt;div id=&quot;news&quot;&gt;
		&lt;div class=&quot;head&quot;&gt;
			&lt;h6&gt;From our blog&lt;/h6&gt;
			&lt;a href=&quot;http://wordpress.com/blog/&quot;&gt;More &#8594;&lt;/a&gt;
		&lt;/div&gt;
	
				&lt;ul&gt;
		&lt;li&gt;&lt;a href=&quot;http://en.blog.wordpress.com/2009/06/15/may-wrap-up-2/&quot;&gt;May Wrap-Up&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://en.blog.wordpress.com/2009/06/05/yahoo-app-and-360-importer/&quot;&gt;Yahoo! App and 360 Importer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://en.blog.wordpress.com/2009/05/15/announcing-videopress-com/&quot;&gt;Announcing VideoPress.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://en.blog.wordpress.com/2009/05/15/comment-reply-via-email-improvements/&quot;&gt;Comment Reply via Email Improvements&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://en.blog.wordpress.com/2009/05/14/comment-search/&quot;&gt;Comment Search&lt;/a&gt;&lt;/li&gt;		&lt;/ul&gt;
	&lt;/div&gt;

	&lt;a class=&quot;wptvbutton&quot; href=&quot;http://wordpress.tv&quot;&gt;&lt;img src=&quot;http://s1.wordpress.com/wp-content/themes/h4/i/com-wptv-button.png&quot; alt=&quot;WordPress.tv&quot; id=&quot;wptvbutton&quot; /&gt;&lt;/a&gt;
	
&lt;/div&gt;
&lt;div id=&quot;block_1&quot;&gt;
	

	
	
	&lt;div id=&quot;botd&quot;&gt;
		&lt;div class=&quot;head&quot;&gt;
			&lt;h6&gt;Hawt Post&lt;/h6&gt;
						&lt;a href=&quot;http://botd.wordpress.com/top-posts/?lang=en&quot;&gt;More &#8594;&lt;/a&gt;		&lt;/div&gt;
				&lt;div id=&quot;home-featuredblog&quot;&gt;

		&lt;div class=&quot;image&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;http://0.gravatar.com/avatar/40474327d92535066a3df77b243ecd73?s=128&amp;d=identicon&amp;r=G&quot; class=&quot;avatar avatar-128&quot; height=&quot;128&quot; width=&quot;128&quot; /&gt;&lt;/div&gt;

		&lt;div class=&quot;featured-content&quot;&gt;
			&lt;h3&gt;&lt;a href=&quot;http://tackyweddings.com/2009/06/09/neon-orange-bridesmaidscamo-bride-and-groomdenim-wedding/&quot;&gt;Neon orange bridesmaids/camo bride and groom/denim&#160;wedding&lt;/a&gt;&lt;/h3&gt;

			&lt;p&gt;All I can think about is how sorry I feel for the two bridesmaids that had to wear head-to-toe neon orange.



Is that a rodent at the bottom of the cake?



&lt;/p&gt;

			&lt;cite&gt;&lt;a href=&quot;http://tackyweddings.com/&quot;&gt;All things heinous, trashy, and hilarious in weddings!&lt;/a&gt;&lt;/cite&gt;
		&lt;/div&gt;
				&lt;/div&gt;
			&lt;/div&gt;
&lt;div id=&quot;hot&quot;&gt;
&lt;div class=&quot;blogs&quot;&gt;
&lt;div class=&quot;head&quot;&gt;
&lt;h6&gt;Hot VIP Posts&lt;/h6&gt;
&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;img alt=&quot;&quot; src=&quot;http://0.gravatar.com/avatar/cf40c16b227dfefbb4da5f3423458afc?s=48&amp;d=identicon&amp;r=G&quot; class=&quot;avatar avatar-48&quot; height=&quot;48&quot; width=&quot;48&quot; /&gt; &lt;a href=&quot;http://thepage.time.com/2009/06/14/stimulus-apologies/&quot; title=&quot;#2&quot;&gt;Stimulus Concession &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;img alt=&quot;&quot; src=&quot;http://1.gravatar.com/avatar/121423044bb4235d7f4092ba279eeba2?s=48&amp;d=identicon&amp;r=G&quot; class=&quot;avatar avatar-48&quot; height=&quot;48&quot; width=&quot;48&quot; /&gt; &lt;a href=&quot;http://listverse.com/2009/06/14/top-10-lesser-known-tour-de-force-performances/&quot; title=&quot;#3&quot;&gt;Top 10 Lesser Known Tour-de-Force Performances&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;img alt=&quot;&quot; src=&quot;http://0.gravatar.com/avatar/ecc45a103130055ee0d29ef8beb1af56?s=48&amp;d=identicon&amp;r=G&quot; class=&quot;avatar avatar-48&quot; height=&quot;48&quot; width=&quot;48&quot; /&gt; &lt;a href=&quot;http://politicalticker.blogs.cnn.com/2009/06/14/reporters-break-down-palin-coverage-slam-letterman-remark/&quot; title=&quot;#6&quot;&gt;Reporters break down Palin coverage, slam Letterman remark&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;img alt=&quot;&quot; src=&quot;http://0.gravatar.com/avatar/6e55369eee894e50d39d2b2e8cca91ab?s=48&amp;d=identicon&amp;r=G&quot; class=&quot;avatar avatar-48&quot; height=&quot;48&quot; width=&quot;48&quot; /&gt; &lt;a href=&quot;http://marquee.blogs.cnn.com/2009/06/11/bonnaroo-or-bust-baby/&quot; title=&quot;#18&quot;&gt;Bonnaroo or bust, baby!&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;img alt=&quot;&quot; src=&quot;http://0.gravatar.com/avatar/0fbc9468685141816f57af4610a34889?s=48&amp;d=identicon&amp;r=G&quot; class=&quot;avatar avatar-48&quot; height=&quot;48&quot; width=&quot;48&quot; /&gt; &lt;a href=&quot;http://celebrity-babies.com/2009/06/14/baby-no-3-on-the-way-for-bo-bice/&quot; title=&quot;#33&quot;&gt;Baby No. 3 on the Way for Bo Bice&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;img alt=&quot;&quot; src=&quot;http://0.gravatar.com/avatar/a7899e8595e484602ab4c4ff2062de99?s=48&amp;d=identicon&amp;r=G&quot; class=&quot;avatar avatar-48&quot; height=&quot;48&quot; width=&quot;48&quot; /&gt; &lt;a href=&quot;http://technologizer.com/2009/06/13/firewire-its-baaaaaaaaaaaack/&quot; title=&quot;#48&quot;&gt;FireWire: It&#8217;s Baaaaaaaaaaaack!&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;posts&quot;&gt;
&lt;div class=&quot;head&quot;&gt;
&lt;h6&gt;Hot Community Posts&lt;/h6&gt;
&lt;a href=&quot;http://botd.wordpress.com/top-posts/?lang=en&quot;&gt;More &#8594;&lt;/a&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;img alt=&quot;&quot; src=&quot;http://1.gravatar.com/avatar/518c142b0c4d0a0f724629f908bcea25?s=48&amp;d=identicon&amp;r=G&quot; class=&quot;avatar avatar-48&quot; height=&quot;48&quot; width=&quot;48&quot; /&gt; &lt;a href=&quot;http://horiwood.com/2009/06/07/david-carradines-death-photo/&quot; title=&quot;#1&quot;&gt;David Carradine&#8217;s Death Photo&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;img alt=&quot;&quot; src=&quot;http://1.gravatar.com/avatar/1783e222c2b280876825014ecb507d8b?s=48&amp;d=identicon&amp;r=G&quot; class=&quot;avatar avatar-48&quot; height=&quot;48&quot; width=&quot;48&quot; /&gt; &lt;a href=&quot;http://wattsupwiththat.com/2009/06/13/sunspots-today-a-cheshire-cat-new-essay-from-livingston-and-penn/&quot; title=&quot;#7&quot;&gt;Sunspots Today: A Cheshire Cat &#8211; New Essay from Livingston and Penn&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;img alt=&quot;&quot; src=&quot;http://1.gravatar.com/avatar/779b97fe83ff497d55d1bef26cf560e1?s=48&amp;d=identicon&amp;r=G&quot; class=&quot;avatar avatar-48&quot; height=&quot;48&quot; width=&quot;48&quot; /&gt; &lt;a href=&quot;http://niacblog.wordpress.com/2009/06/13/election-liveblogging-saturday/&quot; title=&quot;#8&quot;&gt;Election Liveblogging &#8211; Saturday&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;img alt=&quot;&quot; src=&quot;http://0.gravatar.com/avatar/a4ad2d95a572750f96cc52f2be32dcf8?s=48&amp;d=identicon&amp;r=G&quot; class=&quot;avatar avatar-48&quot; height=&quot;48&quot; width=&quot;48&quot; /&gt; &lt;a href=&quot;http://rebelfive.wordpress.com/2009/06/12/hoth-strike-completed/&quot; title=&quot;#20&quot;&gt;Hoth Strike completed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;img alt=&quot;&quot; src=&quot;http://1.gravatar.com/avatar/9881f88ee94975d03e97285a97254c75?s=48&amp;d=identicon&amp;r=G&quot; class=&quot;avatar avatar-48&quot; height=&quot;48&quot; width=&quot;48&quot; /&gt; &lt;a href=&quot;http://sharingyoochun.wordpress.com/2009/06/14/trans-pic-090614-the-secret-code-concert-staffs-report/&quot; title=&quot;#26&quot;&gt;[Trans + Pic] 090614 The Secret Code Concert Staffs&#8217; Report&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;img alt=&quot;&quot; src=&quot;http://1.gravatar.com/avatar/9d4325e89f8f610cd180e4e3b1dda617?s=48&amp;d=identicon&amp;r=G&quot; class=&quot;avatar avatar-48&quot; height=&quot;48&quot; width=&quot;48&quot; /&gt; &lt;a href=&quot;http://reedsecular.org/2009/06/13/chalmer-wren-book-projec/&quot; title=&quot;#36&quot;&gt;Why I Support the Freethought Books Project&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;block_2&quot;&gt;

	&lt;div id=&quot;tags&quot;&gt;
	&lt;div class=&quot;head&quot;&gt;
	&lt;h6&gt;Right Now in Tags&lt;/h6&gt;
	&lt;a href=&quot;http://wordpress.com/tags/&quot;&gt;More &#8594;&lt;/a&gt;
	&lt;/div&gt;


	&lt;div class=&quot;tag-list&quot;&gt;
		&lt;a href=&quot;http://en.wordpress.com/tag/art/&quot; title=&quot;1470 recent posts&quot; id=&quot;cat-177&quot;&gt;Art&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/blog/&quot; title=&quot;916 recent posts&quot; id=&quot;cat-273&quot;&gt;Blog&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/books/&quot; title=&quot;937 recent posts&quot; id=&quot;cat-178&quot;&gt;Books&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/business/&quot; title=&quot;731 recent posts&quot; id=&quot;cat-179&quot;&gt;Business&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/christianity/&quot; title=&quot;582 recent posts&quot; id=&quot;cat-214&quot;&gt;Christianity&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/culture/&quot; title=&quot;937 recent posts&quot; id=&quot;cat-1098&quot;&gt;Culture&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/design/&quot; title=&quot;602 recent posts&quot; id=&quot;cat-148&quot;&gt;Design&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/education/&quot; title=&quot;677 recent posts&quot; id=&quot;cat-1342&quot;&gt;Education&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/entertainment/&quot; title=&quot;925 recent posts&quot; id=&quot;cat-384&quot;&gt;Entertainment&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/events/&quot; title=&quot;1088 recent posts&quot; id=&quot;cat-924&quot;&gt;Events&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/family/&quot; title=&quot;1429 recent posts&quot; id=&quot;cat-406&quot;&gt;Family&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/fashion/&quot; title=&quot;973 recent posts&quot; id=&quot;cat-3737&quot;&gt;Fashion&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/food/&quot; title=&quot;1151 recent posts&quot; id=&quot;cat-586&quot;&gt;Food&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/friends/&quot; title=&quot;779 recent posts&quot; id=&quot;cat-677&quot;&gt;Friends&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/history/&quot; title=&quot;711 recent posts&quot; id=&quot;cat-678&quot;&gt;History&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/humor/&quot; title=&quot;728 recent posts&quot; id=&quot;cat-376&quot;&gt;Humor&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/life/&quot; title=&quot;2706 recent posts&quot; id=&quot;cat-124&quot;&gt;Life&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/love/&quot; title=&quot;1024 recent posts&quot; id=&quot;cat-3785&quot;&gt;Love&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/movies/&quot; title=&quot;798 recent posts&quot; id=&quot;cat-190&quot;&gt;Movies&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/music/&quot; title=&quot;3390 recent posts&quot; id=&quot;cat-18&quot;&gt;Music&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/news/&quot; title=&quot;3660 recent posts&quot; id=&quot;cat-103&quot;&gt;News&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/people/&quot; title=&quot;683 recent posts&quot; id=&quot;cat-660&quot;&gt;People&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/personal/&quot; title=&quot;1124 recent posts&quot; id=&quot;cat-64&quot;&gt;Personal&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/philosophy/&quot; title=&quot;567 recent posts&quot; id=&quot;cat-1868&quot;&gt;Philosophy&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/photography/&quot; title=&quot;1429 recent posts&quot; id=&quot;cat-436&quot;&gt;Photography&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/poetry/&quot; title=&quot;1169 recent posts&quot; id=&quot;cat-422&quot;&gt;Poetry&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/politics/&quot; title=&quot;3248 recent posts&quot; id=&quot;cat-398&quot;&gt;Politics&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/random/&quot; title=&quot;1102 recent posts&quot; id=&quot;cat-30&quot;&gt;Random&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/religion/&quot; title=&quot;1114 recent posts&quot; id=&quot;cat-116&quot;&gt;Religion&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/reviews/&quot; title=&quot;672 recent posts&quot; id=&quot;cat-309&quot;&gt;Reviews&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/sports/&quot; title=&quot;832 recent posts&quot; id=&quot;cat-67&quot;&gt;Sports&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/thoughts/&quot; title=&quot;1017 recent posts&quot; id=&quot;cat-563&quot;&gt;Thoughts&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/travel/&quot; title=&quot;1258 recent posts&quot; id=&quot;cat-200&quot;&gt;Travel&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/video/&quot; title=&quot;984 recent posts&quot; id=&quot;cat-412&quot;&gt;Video&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/health/&quot; title=&quot;1250 recent posts&quot; id=&quot;cat-337&quot;&gt;Health&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/media/&quot; title=&quot;937 recent posts&quot; id=&quot;cat-292&quot;&gt;Media&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/photos/&quot; title=&quot;649 recent posts&quot; id=&quot;cat-304&quot;&gt;Photos&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/technology/&quot; title=&quot;961 recent posts&quot; id=&quot;cat-6&quot;&gt;Technology&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/videos/&quot; title=&quot;701 recent posts&quot; id=&quot;cat-1149&quot;&gt;Videos&lt;/a&gt;
&lt;a href=&quot;http://en.wordpress.com/tag/writing/&quot; title=&quot;1189 recent posts&quot; id=&quot;cat-349&quot;&gt;Writing&lt;/a&gt;
	&lt;/div&gt;
	&lt;/div&gt;	
&lt;/div&gt;

&lt;/div&gt;

&lt;div id=&quot;footer&quot;&gt;
&lt;ul id=&quot;nav-util&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://support.wordpress.com/&quot; title=&quot;We're here for you&quot;&gt;24/7 Support&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wordpress.com/features/&quot; title=&quot;A sampling of the many features WordPress.com offers&quot;&gt;Free Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wordpress.com/products/&quot; title=&quot;Value-added upgrades available a la carte&quot;&gt;Premium Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wordpress.com/vip-hosting/&quot; title=&quot;For the best sites in the world&quot;&gt;VIP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wordpress.com/tos/&quot; title=&quot;Some legalese&quot;&gt;Terms of Service&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://automattic.com/privacy/&quot; title=&quot;We are profoundly disinterested in your private details&quot;&gt;Privacy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;See also:&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://wordpress.org/&quot; title=&quot;Self-hosted, non-profit version&quot;&gt;WordPress.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ma.tt/&quot; title=&quot;Founder of Automattic, example of what WordPress can do&quot;&gt;Matt&lt;/a&gt;&lt;/li&gt;
&lt;li class=&quot;last-child&quot;&gt;&lt;a href=&quot;http://www.facebook.com/pages/WordPress/6427302910&quot; title=&quot;See reviews of WP&quot;&gt;Fan WP on Facebook&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class=&quot;automattic&quot;&gt;An &lt;a href=&quot;http://automattic.com/&quot;&gt;&lt;img src=&quot;http://s.wordpress.com/wp-content/themes/h4/i/automattic.png&quot; alt=&quot;Automattic&quot; /&gt;&lt;/a&gt;
Medley&lt;/p&gt;
&lt;/div&gt;

&lt;/div&gt;




&lt;p&gt;&lt;img src=&quot;http://pixel.quantserve.com/pixel/p-18-mFEk4J448M.gif?labels=adt.1%2Clanguage.en%2Cwp.homepage&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;</subtitle>
			<link rel="self" href="http://awkly.org/feed/atom/"/>
			<id>http://awkly.org/feed/atom/</id>
			<updated>2009-06-09T08:44:02+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">O diabo da acentua&#231;&#227;o (2)</title>
		<link href="http://blog.ramgarlic.com/2009/06/o-diabo-da-acentuacao-2.html"/>
		<id>tag:blogger.com,1999:blog-4463022840615424564.post-6399480269391478302</id>
		<updated>2009-06-02T21:05:05+00:00</updated>
		<content type="html">Com a explos&#227;o da Internet, ficou sem sentido continuar usando sistemas de codifica&#231;&#227;o de caracteres diferentes em cada parte do mundo. Mas para unificar, seria preciso uma codifica&#231;&#227;o que n&#227;o ia caber em um byte. Ent&#227;o a primeira tentativa foi usar dois bytes, o que permite c&#243;digos de \x0000 a \xFFFF, ou seja, 65536 caracteres distintos. Era o que propunham as primeiras vers&#245;es do padr&#227;o Unicode. E assim v&#225;rias linguagens, inclusive Java, adotaram uma representa&#231;&#227;o interna de strings onde cada caractere equivale a dois bytes.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Outra id&#233;ia errada: 1 caractere == 2 bytes&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;Eu aprendi o que era Unicode estudando Java, e sempre achei normal que um caractere Unicode fosse representado por dois bytes em Java, numa codifica&#231;&#227;o chamada UCS2. At&#233; que em 2006 eu comecei a estudar a linguagem Ruby, e constatei que o suporte a Unicode em Ruby era mais primitivo que em Python. Fiquei surpreso porque o criador de Ruby, Yukihiro Matsumoto, &#233; japon&#234;s, e a linguagem &#233; muito popular no Jap&#227;o.&lt;br /&gt;&lt;br /&gt;Mas a propaganda aqui no ocidente &#233; que o Unicode veio para resolver o problema das l&#237;nguas orientais, ent&#227;o porque faltava um bom suporte em Ruby? Quem pesquisar um pouco o assunto vai descobrir que as primeiras vers&#245;es do Unicode foram rejeitadas pelo chineses, japoneses e coreanos! Os principais motivos foram (1) a unifica&#231;&#227;o de certos ideogramas que embora visualmente parecidos queriam dizer coisas diferentes e (2) a falta de uma especifica&#231;&#227;o de como estender a codifica&#231;&#227;o para al&#233;m dos 2 bytes. O segundo ponto &#233; interessante: quando se usa um alfabeto, uma nova palavra &#233; apenas um novo arranjo das mesmas letras; mas em chin&#234;s, uma nova palavra pode ser um novo ideograma.&lt;br /&gt;&lt;br /&gt;Para resolver este problema, &#233; preciso abstrair um pouco mais...&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Unicode &#233; uma tabela de codepoints&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;O foco do padr&#227;o Unicode n&#227;o &#233; estabelecer uma rela&#231;&#227;o entre caracteres e bytes, e sim uma rela&#231;&#227;o entre caracteres e c&#243;digos num&#233;ricos chamados codepoints. Como estes codepoints ser&#227;o representados na mem&#243;ria ou em um arquivo &#233; uma quest&#227;o secund&#225;ria, at&#233; porque diferentes aplica&#231;&#245;es v&#227;o exigir diferentes representa&#231;&#245;es: um formato bom para transmitir pode ser ruim para processar, por exemplo. &lt;br /&gt;&lt;br /&gt;Na documenta&#231;&#227;o do Unicode, os codepoints s&#227;o identificados por n&#250;meros hexadecimais com o prefixo 'U+'. Veja uma pequena amostra de codepoints e caracteres:&lt;br /&gt;&lt;br /&gt;U+6C23 &#27683; CJK UNIFIED IDEOGRAPH-6C23&lt;br /&gt;&lt;br /&gt;U+06BF &#1727; ARABIC LETTER TCHEH WITH DOT ABOVE&lt;br /&gt;&lt;br /&gt;U+2620 &#9760; SKULL AND CROSSBONES&lt;br /&gt;&lt;br /&gt;U+0D0B &#3339; MALAYALAM LETTER VOCALIC R&lt;br /&gt;&lt;br /&gt;U+4DF1 &#19953; HEXAGRAM FOR THE CAULDRON&lt;br /&gt;&lt;br /&gt;O texto eu caixa alta em cada linha acima &#233; o atributo &quot;name&quot; do caractere, segundo a tabela Unicode. Al&#233;m de letras de v&#225;rios idiomas, o Unicode inclui tamb&#233;m s&#237;mbolos matem&#225;ticos, naipes do baralho e at&#233; hexagramas do I-Ching.&lt;br /&gt;&lt;br /&gt;Vale a pena explorar o site oficial do Unicode, em particular as &lt;a href=&quot;http://www.unicode.org/charts/&quot;&gt;code charts&lt;/a&gt; (tabelas de c&#243;digo) onde os milhares de caracteres aparecem agrupados por idioma ou assunto.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4463022840615424564-6399480269391478302?l=blog.ramgarlic.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Luciano Ramalho</name>
			<email>noreply@blogger.com</email>
			<uri>http://blog.ramgarlic.com/</uri>
		</author>
		<source>
			<title type="html">Ramgarlic</title>
			<subtitle type="html">Programador repentista</subtitle>
			<link rel="self" href="http://blog.ramgarlic.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4463022840615424564</id>
			<updated>2009-06-12T19:44:52+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">O diabo da acentua&#231;&#227;o</title>
		<link href="http://blog.ramgarlic.com/2009/06/o-diabo-da-acentuacao.html"/>
		<id>tag:blogger.com,1999:blog-4463022840615424564.post-5882556510074479192</id>
		<updated>2009-06-02T20:29:01+00:00</updated>
		<content type="html">Estamos no meio de uma imensa migra&#231;&#227;o para Unicode, aquela terra prometida onde caracteres acentuados s&#227;o cidad&#227;os de primeira classe, e at&#233; o conceito da energia interior &lt;a href=&quot;http://pt.wikipedia.org/wiki/Ki&quot;&gt;qi&lt;/a&gt; pode ser representado na forma original: &#27683;.&lt;br /&gt;&lt;br /&gt;Enquanto n&#227;o chegamos l&#225;, reina a confus&#227;o na terra da acentua&#231;&#227;o. Em f&#243;runs de programadores a gente v&#234; muita gente perdida, procurando e oferecendo solu&#231;&#245;es baseadas mais em supersti&#231;&#227;o e mitos do que em raz&#227;o e fatos.&lt;br /&gt;&lt;br /&gt;Este &#233; o primeiro de uma s&#233;rie de posts para tentar esclarecer essa bagun&#231;a.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;codifica&#231;&#227;o:&lt;/b&gt; neste assunto, codica&#231;&#227;o n&#227;o tem nada a ver com cifras ou c&#243;digo-fonte. Uma codifica&#231;&#227;o &#233; apenas uma forma de representar caracteres atrav&#233;s de c&#243;digos num&#233;ricos, para armazenagem em computadores digitais.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;A id&#233;ia errada: 1 caractere == 1 byte&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;A computa&#231;&#227;o nasceu em pa&#237;ses que falam ingl&#234;s, um idioma onde se usam apenas as 26 letras de A a Z, sem acentos nem cedilhas [1]. Al&#233;m disso, a mem&#243;ria das m&#225;quinas era muito limitada, ent&#227;o depois de alguma briga entre fabricantes americanos e usu&#225;rios europeus se estabeleceu a id&#233;ia equivocada de que um byte corresponde a um caractere.&lt;br /&gt;&lt;br /&gt;Essa id&#233;ia simplista gerou codifica&#231;&#245;es como esta (clique na figura para ampliar):&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://2.bp.blogspot.com/_5tQI-F_WJ-U/SiVrcfLdT1I/AAAAAAAAABA/J2km61FGCfM/s1600-h/cp1252.gif&quot;&gt;&lt;img src=&quot;http://2.bp.blogspot.com/_5tQI-F_WJ-U/SiVrcfLdT1I/AAAAAAAAABA/J2km61FGCfM/s400/cp1252.gif&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5342794670095028050&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Esta figura na verdade representa uma s&#233;rie de gambiarras, uma em cima da outra. Para come&#231;ar, a faixa preta representa caracteres projetados para controlar um teletipo, um equipamento mais obsoleto at&#233; que um mime&#243;grafo. Por exemplo, o caractere '\x0C' [2], serve para avan&#231;ar uma folha no papel e o '\x07' &#233; o BELL, faz o teletipo tocar um sino para chamar a aten&#231;&#227;o do operador!&lt;br /&gt;&lt;br /&gt;Apenas tr&#234;s destes caracteres de controle s&#227;o largamente utilizados hoje: o HORIZONTAL TAB ('\x09'), o LINE FEED ('\x0a') e o CARRIAGE RETURN ('\x0d'). Os 32 caracteres de controle, bem como a faixa azul, formam o padr&#227;o ASCII (pronuncia-se &#225;squi, e n&#227;o &#225;squi-2), totalizando 128 caracteres.&lt;br /&gt;&lt;br /&gt;A faixa verde &#233; a tabela ISO-8859-1, tamb&#233;m conhecida como Latin-1, uma das v&#225;rias tabelas de caracteres criadas na norma ISO-8859 para padronizar conjuntos de caracteres alfab&#233;ticos. Na tabela Latin-1 aparecem todos os caracteres usados nos idiomas da Europa ocidental. A mesma norma ISO inclui outras tabelas, como a ISO-8859-2 (Latin-2), para idiomas da Europa oriental (como Polon&#234;s, Tcheco e H&#250;ngaro) e a ISO-8859-5 que cont&#233;m letras do alfabeto cir&#237;lico usado na Russia, Bulgaria, S&#233;rvia etc. [3]&lt;br /&gt;&lt;br /&gt;As duas fileiras vermelhas s&#227;o um &quot;puxadinho&quot; feito pela Microsoft. A norma ISO-8859 reservava estas 32 posi&#231;&#245;es para ainda mais caracteres de controle, que nunca &quot;pegaram&quot;, ent&#227;o a Microsoft inventou um padr&#227;o chamado &quot;CP-1252&quot; [4] que &#233; basicamente a combina&#231;&#227;o de ASCII com Latin-1 e mais 27 s&#237;mbolos como o &#8364; (euro) o &#8226; (bullet) e as aspas assim&#233;tricas &#8220;assim&#8221; que tanto atrapalham a nossa vida de programadores.&lt;br /&gt;&lt;br /&gt;Muitos aplicativos, especialmente no mundo Windows, alegam usar a codifica&#231;&#227;o ISO-8859-1 mas na verdade usam CP-1252, violando a lei de Postel [5]. Isso causa alguma confus&#227;o porque se voc&#234; tenta ler um arquivo CP-1252 como se fosse ISO-8859-1, seu programa n&#227;o vai saber o que fazer com os &#8364;, &#8226;, &#8220;aspas&#8221; etc. Mas o inverso n&#227;o causa problemas: voc&#234; sempre pode ler um ISO-8859-1 como se fosse CP-1252, porque o primeiro &#233; um sub-conjunto do segundo.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;E o &#27683;?&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;Realmente n&#227;o tem espa&#231;o naquela tabela para o caractere chin&#234;s do &quot;qi&quot; e os outros milhares de caracteres chineses, japoneses, coreanos, ou para dezenas de idiomas que n&#227;o usam o alfabeto latino, como &#225;rabe, hebraico, tailand&#234;s e s&#226;nscrito. Essa constata&#231;&#227;o acabou com o princ&#237;pio de que &quot;1 byte == 1 caractere&quot;, e nos conduziu ao Unicode, tema do pr&#243;ximo post.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;[1] na verdade, isso j&#225; &#233; uma simplifica&#231;&#227;o; qualquer dicion&#225;rio de ingl&#234;s tem a palavra fa&#231;ade (fachada), escrita assim mesmo, com cedilha; a palavra virou at&#233; um termo t&#233;cnico em engenharia de software, pois &#233; o nome de &lt;a href=&quot;http://pt.wikipedia.org/wiki/Fa%C3%A7ade&quot;&gt;um dos padr&#245;es de projeto&lt;/a&gt; originais.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;[2] \x0C &#233; hexadecimal, em decimal seria 12&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;[3] a ISO-8859-1 (Latin-1) continua importante at&#233; hoje, mas a ISO-8859-5 &quot;n&#227;o pegou&quot;. Os russos preferem outros padr&#245;es, como KOI-7 ou KOI-8.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;[4] conhecido tamb&#233;m como &quot;codepage 1252&quot; ou oficialmente &quot;Windows-1252&quot;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;[5] &quot;Seja liberal no que aceita conservador no que envia&quot;. Procure &quot;Postel Law&quot; no Google e aprenda um princ&#237;pio realmente importante e &#250;til para a engenharia e para a vida em sociedade.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4463022840615424564-5882556510074479192?l=blog.ramgarlic.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Luciano Ramalho</name>
			<email>noreply@blogger.com</email>
			<uri>http://blog.ramgarlic.com/</uri>
		</author>
		<source>
			<title type="html">Ramgarlic</title>
			<subtitle type="html">Programador repentista</subtitle>
			<link rel="self" href="http://blog.ramgarlic.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4463022840615424564</id>
			<updated>2009-06-12T19:44:52+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">SCS2009 - Mehran Misaghi</title>
		<link href="http://marrcandre.blogspot.com/2009/05/scs2009-mehran-misaghi.html"/>
		<id>tag:blogger.com,1999:blog-4593771306625888277.post-510341648602729720</id>
		<updated>2009-05-29T07:41:47+00:00</updated>
		<content type="html">&lt;center&gt;																									&lt;div id=&quot;blip_movie_content_2185170&quot;&gt;					&lt;a rel=&quot;enclosure&quot; href=&quot;http://blip.tv/file/get/Marrcandre-SCS2009MehranMisaghi291.avi&quot;&gt;&lt;img title=&quot;Click to play&quot; alt=&quot;Video thumbnail. Click to play&quot; src=&quot;http://blip.tv/file/get/Marrcandre-SCS2009MehranMisaghi291.avi.jpg&quot; border=&quot;0&quot; title=&quot;Click to Play&quot; /&gt;&lt;/a&gt;					&lt;br /&gt;					&lt;a rel=&quot;enclosure&quot; href=&quot;http://blip.tv/file/get/Marrcandre-SCS2009MehranMisaghi291.avi&quot;&gt;Click to Play&lt;/a&gt;					&lt;/div&gt;										&lt;/center&gt;&lt;div class=&quot;blip_description&quot;&gt;Palestra apresentada por Mehran Misaghi na SCS2009 - Semana de Computa&#231;&#227;o da SOCIESC, no dia 18/05/2009. &lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4593771306625888277-510341648602729720?l=marrcandre.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marco Andr&#233; Lopes Mendes</name>
			<email>noreply@blogger.com</email>
			<uri>http://marrcandre.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">marrcandr&#233;</title>
			<link rel="self" href="http://marrcandre.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4593771306625888277</id>
			<updated>2009-06-30T02:44:26+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Busca full-text do mysql no django</title>
		<link href="http://blog.mdpetry.net/2009/05/busca-full-text-do-mysql-no-django.html"/>
		<id>tag:blogger.com,1999:blog-1819324405537779447.post-4515695880073025855</id>
		<updated>2009-05-28T15:16:33+00:00</updated>
		<content type="html">Essa semana tive que implementar em um dos meus projetos um sistema de busca full-text. como estou utilizando o Mysql, ele possui um mecanismo de pesquisa integrado. H&#225; outras bibliotecas de pesquisa como o &lt;a href=&quot;http://lucene.apache.org/java/docs/&quot;&gt;Lucene&lt;/a&gt;, &lt;a href=&quot;http://xapian.org/&quot;&gt;Xapian&lt;/a&gt; e &lt;a href=&quot;http://www.sphinxsearch.com/&quot;&gt;Sphinx&lt;/a&gt; e todas elas possuem modulos para integra-las ao Django(&lt;a href=&quot;http://code.google.com/p/django-search-lucene/&quot;&gt;django-search-lucene&lt;/a&gt;, &lt;a href=&quot;http://code.google.com/p/djapian/&quot;&gt;djapian&lt;/a&gt; e &lt;a href=&quot;http://code.google.com/p/django-sphinx/&quot;&gt;django-sphinx&lt;/a&gt; ) mas no meu caso, como estou utilizando uma hospedagem compartilhada, tenho certas restri&#231;&#245;es para instalar algumas bibliotecas, portanto tive que partir para esta alternativa.&lt;br /&gt;&lt;br /&gt;Bom, vamos ao que &#233; necess&#225;rio para funcionar a busca:&lt;br /&gt;&lt;br /&gt;digamos que voc&#234; possui um model de noticias:&lt;br /&gt;&lt;pre&gt;class Artigo(models.Model):&lt;br /&gt; data_publicacao = models.DateTimeField(&quot;Data de Publica&#231;&#227;o&quot;, default=datetime.now)&lt;br /&gt; titulo = models.CharField(max_length=200)&lt;br /&gt; slug = models.SlugField()&lt;br /&gt; texto = models.TextField(&quot;Texto da noticia&quot;)&lt;br /&gt;&lt;br /&gt; class Meta:&lt;br /&gt;     ordering = ['-data_publicacao']&lt;br /&gt;      get_latest_by = 'data_publicacao'&lt;br /&gt;&lt;br /&gt; def __unicode__(self):&lt;br /&gt;     return self.titulo&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Como esperado, o c&#243;digo acima vai gerar um tabela no banco, mas, para a busca funcionar corretamente, teremos que criar &quot;no bra&#231;o&quot; um &#237;ndice fulltext para efetuar a busca. Como estamos utilizando o mecanismo de busca do pr&#243;prio banco. O &#237;ndice ser&#225; atualizado automaticamente quando registros s&#227;o inseridos, atualizados, ou exclu&#237;dos, de modo que os resultados da pesquisa nunca estar&#227;o desatualizada. A declara&#231;&#227;o CREATE INDEX &#233; utilizado para criar o &#237;ndice:&lt;br /&gt;&lt;pre&gt;CREATE FULLTEXT INDEX fti_noticias_artigo ON noticias_artigo(titulo,texto)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Bom agora teremos que estender esta funcionalidade ao ORM do Django e criar um manager para o model em que voc&#234; quer fazer a busca. Para isso simplesmente &lt;a href=&quot;http://djangotidbits.com/17/&quot;&gt;copie este c&#243;digo&lt;/a&gt; no seu models, ou melhor, coloque em um arquivos separado, j&#225; que voc&#234; poder&#225; aproveit&#225;-lo em outros models!&lt;br /&gt;&lt;br /&gt;Agora, chame o manager do c&#243;digo, atribuindo ao atributo objects (ou qualquer outro que voc&#234; criar) passando como par&#226;metro os campos que voc&#234; indexou no mysql:&lt;br /&gt;&lt;pre&gt;objects = SearchManager(('titulo', 'texto'))&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;e est&#225; pronto!&lt;br /&gt;&lt;br /&gt;agora para realizar alguma busca utilize o seguinte comando:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Artigo.objects.search('minha busca')&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;o m&#233;todo search executar&#225; uma consulta, verificando se a string que voc&#234; enviou se encontra em um dos campos que voc&#234; estabeleceu no seu SearchManager.&lt;br /&gt;&lt;br /&gt;algo mais ou menos assim:&lt;br /&gt;&lt;pre&gt;SELECT titulo, data_publicacao, slug, texto, MATCH(titulo, texto) AGAINST ('minha busca')&lt;br /&gt;  AS `relevance`&lt;br /&gt;FROM noticias_artigo&lt;br /&gt;WHERE MATCH(titulo, texto) AGAINST ('minha busca')&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;O seu manager tamb&#233;m inclui um campo extra na sua consulta chamado relevance, que &#233; o indice de relev&#226;ncia da sua pesquisa. Desse modo &#233; possivel efetuar uma ordenac&#227;o atrav&#233;s deste campo.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Artigo.objects.search('minha busca').order_by('relevance')&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;bom era isso! qualquer duvida, reclama&#231;&#227;o, ou colabora&#231;&#227;o de c&#243;digo, &#233; s&#243; comentar!&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1819324405537779447-4515695880073025855?l=blog.mdpetry.net&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marcos Daniel Petry</name>
			<email>marcospetry@gmail.com</email>
			<uri>http://blog.mdpetry.net/search/label/python</uri>
		</author>
		<source>
			<title type="html">Blog do Petry</title>
			<subtitle type="html">outra tentativa de manter um blog vivo na net...</subtitle>
			<link rel="self" href="http://blog.mdpetry.net/feeds/posts/default/-/python"/>
			<id>tag:blogger.com,1999:blog-1819324405537779447</id>
			<updated>2009-06-12T19:45:03+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Livro Python para desenvolvedores</title>
		<link href="http://aprenda-python.blogspot.com/2009/05/livro-python-para-desenvolvedores.html"/>
		<id>tag:blogger.com,1999:blog-2240031811551496628.post-8068444586160899215</id>
		<updated>2009-05-28T02:59:09+00:00</updated>
		<content type="html">&#211;tima iniciativa do Luiz Eduardo Borges de escrever um livro de Python em portugu&#234;s.Colei na &#237;ntegra a mensagem de lan&#231;amento do livro:------- In&#237;cio -------&quot;Python para desenvolvedores&quot; &#233; o primeiro livro livre sobre Python em portugu&#234;s a ser distribu&#237;do sob a licen&#231;a Creative Commons (Atribui&#231;&#227;o-Uso N&#227;o-Comercial-Compartilhamento pela mesma Licen&#231;a 2.5 Brasil).&quot;Python para Desenvolvedores&quot;,</content>
		<author>
			<name>Vinicius Assef</name>
			<email>noreply@blogger.com</email>
			<uri>http://aprenda-python.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Aprenda Python</title>
			<subtitle type="html">Dicas para voc&#234; que j&#225; &#233; programador em outra linguagem.</subtitle>
			<link rel="self" href="http://aprenda-python.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-2240031811551496628</id>
			<updated>2009-06-24T01:44:10+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">C&#243;pia de seguran&#231;a e sincroniza&#231;&#227;o com o Dropbox</title>
		<link href="http://marrcandre.blogspot.com/2009/05/copia-de-seguranca-e-sincronizacao-com.html"/>
		<id>tag:blogger.com,1999:blog-4593771306625888277.post-4974839265196624920</id>
		<updated>2009-05-27T19:52:01+00:00</updated>
		<content type="html">&lt;a href=&quot;http://1.bp.blogspot.com/_3P5Jy-KMtkU/Sh2PoXXMdgI/AAAAAAAAK4M/CA3YLFhdtOI/s1600-h/dropbox.png&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/_3P5Jy-KMtkU/Sh2PoXXMdgI/AAAAAAAAK4M/CA3YLFhdtOI/s200/dropbox.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5340582656760116738&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;a href=&quot;http://www.blogger.com/%3Ca%20href=%22https://www.getdropbox.com/referrals/NTE0OTE1OTk%22%3Eaqui%3C/a%3E&quot;&gt;Dropbox&lt;/a&gt; &#233; uma ferramenta que facilita fazer c&#243;pias de seguran&#231;a de arquivos de um computador  e a sincroniza&#231;&#227;o entre diversos computadores, mesmo que utilizem sistemas operacionais diferentes. Existem no momento vers&#245;es para Windows, Mac e Linux.&lt;br /&gt;&lt;br /&gt;Mas afinal o que &#233; o Dropbox e o que ele tem de t&#227;o especial? A vantagem inicial &#233; permitir que se fa&#231;a uma c&#243;pia de seguran&#231;a de um conjunto de dados de forma transparente. Basta copiar os arquivos para uma pasta previamente definida e o conte&#250;do &#233; automaticamente sincronizado com a pasta do servidor. Estes dados ficam dispon&#237;veis e podem ser acessados a partir de qualquer navegador web. Desta forma, ele substitui com algumas vantagens as c&#243;pias feitas com dispositivos USB, o envio de arquivos por email e mesmo as c&#243;pias por ssh ou rsync.&lt;br /&gt;&lt;br /&gt;No meu caso, tenho meus documentos pessoais  e de trabalho sincronizados entre meus dois computadores e dispon&#237;veis sempre que eu preciso. Recentemente, comecei a editar um documento na minha esta&#231;&#227;o de trabalho em casa. Mais tarde, sentei com minha mulher no sof&#225; da sala e finalizei o documento a partir do notebook, sem ter que carregar o arquivo de um pra outro. Tenho utilizado tamb&#233;m para deixar sempre &#224; m&#227;o artigos e outros textos que posso ler sempre que sobra um tempo. Fotos e v&#237;deos copiados da m&#225;quina digital  acabam indo pra esta pasta tamb&#233;m, pra depois ir pro seu lugar de armazenamento definitivo.&lt;br /&gt;&lt;br /&gt;O grande potencial do Dropbox se revela quando o instalamos em diversos computadores, utilizando a mesma conta. Quando isto &#233; feito, qualquer modifica&#231;&#227;o realizada  em uma das pastas &#233; automaticamente sincronizada na web e, a partir de l&#225;, para os demais computadores. Quem utiliza computadores diferentes no trabalho e em casa, sabe o quanto isto pode ser &#250;til. Usu&#225;rios de netbooks que mant&#233;m esta&#231;&#245;es de trabalho ou notebooks para trabalhos mais pesados podem se beneficiar da ferramenta tamb&#233;m. Outro uso interessante &#233; na sincroniza&#231;&#227;o de pastas quando se utiliza m&#225;quinas virtuais no mesmo computador.&lt;br /&gt;&lt;br /&gt;Um dos problemas que pode-se perceber no uso da ferramenta &#233; no uso do link de Internet. Isto pode ser bem vis&#237;vel na sincroniza&#231;&#227;o inicial, ou quando copia-se arquivos muito grandes. Se voc&#234; tem um bom link, n&#227;o deve ser preocupar com isso.  Outro situa&#231;&#227;o que pode gerar um problema ocorre quando se apaga um arquivo de um lugar, e ele &#233; apagado de todos. Desta forma, fa&#231;a sempre uma c&#243;pia de seguran&#231;a de seus dados mais inportantes. Por fim, &#224; medida que vamos nos acostumando com o uso dele, o limite de 2 GB pode tornar-se um problema.&lt;br /&gt;&lt;br /&gt;Se voc&#234; quer come&#231;ar a usar o Dropbox, o primeiro passo &#233; criar uma conta, clicando &lt;a href=&quot;https://www.getdropbox.com/referrals/NTE0OTE1OTk&quot;&gt;aqui&lt;/a&gt;. O processo de cria&#231;&#227;o da conta &#233; muito r&#225;pido e simples. Ao criar uma conta, s&#227;o fornecidos 2 GB de espa&#231;o. Ao criar a partir do link fornecido aqui, voc&#234; me ajudar&#225; a ganhar mais 250 MB de espa&#231;o. O limite m&#225;ximo por conta &#233; de 3 GB. Para conhecer melhor o Dropbox, &#233; poss&#237;vel assistir a um &lt;a href=&quot;https://www.getdropbox.com/tour&quot;&gt;tour&lt;/a&gt; no site.&lt;br /&gt;&lt;br /&gt;&lt;span&gt;A instala&#231;&#227;o &#233; bastante simples, e consiste em baixar e executar o arquivo de instala&#231;&#227;o para Windows, Mac ou Linux a partir da &lt;/span&gt; &lt;a href=&quot;https://www.getdropbox.com/install&quot;&gt;p&#225;gina de instala&#231;&#227;o do Dropbox&lt;/a&gt;.&lt;span&gt; No caso do Linux, existem pacotes para algumas vers&#245;es de Ubuntu e Fedora, al&#233;m da possibilidade de adicionar os reposit&#243;rios no Ubuntu. Neste caso, voc&#234; ser&#225; avisado quando houverem atualiza&#231;&#245;es do programa.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Se voc&#234; j&#225; utiliza o Dropbox, que tal contar o que voc&#234; faz com ele? Se voc&#7869; n&#227;o usa e quer saber mais, entre em contato tamb&#233;m. Para obter uma conta e come&#231;ar a utilizar o Dropbox, agora mesmo, clique &lt;a href=&quot;https://www.getdropbox.com/referrals/NTE0OTE1OTk&quot;&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4593771306625888277-4974839265196624920?l=marrcandre.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marco Andr&#233; Lopes Mendes</name>
			<email>noreply@blogger.com</email>
			<uri>http://marrcandre.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">marrcandr&#233;</title>
			<link rel="self" href="http://marrcandre.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4593771306625888277</id>
			<updated>2009-06-30T02:44:26+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">SCS2009 - Relato final, v&#237;deos e fotos</title>
		<link href="http://marrcandre.blogspot.com/2009/05/scs2009-relato-final-videos-e-fotos.html"/>
		<id>tag:blogger.com,1999:blog-4593771306625888277.post-5153137416844666236</id>
		<updated>2009-05-27T13:07:50+00:00</updated>
		<content type="html">A SCS2009 foi um sucesso. Tivemos um bom p&#250;blico durante todo os dias, muita intera&#231;&#227;o com os palestrantes e minicursos lotados de pessoas interessadas.&lt;br /&gt;&lt;br /&gt;Os &lt;a href=&quot;http://marrcandre.blip.tv/posts?view=archive&amp;nsfw=dc&quot;&gt;v&#237;deos das palestras&lt;/a&gt; j&#225; est&#227;o dispon&#237;veis e quem n&#227;o assistiu ao vivo tem a chance de ver agora. As &lt;a href=&quot;http://marrcandre.blogspot.com/2009/05/scs2009-as-fotos-do-primeiro-dia.html&quot;&gt;fotos&lt;/a&gt; tamb&#233;m est&#227;o dispon&#237;veis e d&#227;o uma id&#233;ia do que aconteceu nos quatro dias de evento. Quem quiser ler &lt;a href=&quot;http://marrcandre.blogspot.com/search/label/scs2009&quot;&gt;todas as postagens&lt;/a&gt; relacionadas pode acessar meu blog e conferir. Al&#233;m disso, voc&#234; pode ler e postar um coment&#225;rio pelo &lt;a href=&quot;http://search.twitter.com/search?q=scs2009&quot;&gt;twitter&lt;/a&gt;, ou aqui mesmo, na &#225;rea de coment&#225;rios.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4593771306625888277-5153137416844666236?l=marrcandre.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marco Andr&#233; Lopes Mendes</name>
			<email>noreply@blogger.com</email>
			<uri>http://marrcandre.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">marrcandr&#233;</title>
			<link rel="self" href="http://marrcandre.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4593771306625888277</id>
			<updated>2009-06-30T02:44:26+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Meu roteiro de instalacao do Ubuntu</title>
		<link href="http://marrcandre.blogspot.com/2009/04/meu-roteiro-de-instalacao-do-ubuntu.html"/>
		<id>tag:blogger.com,1999:blog-4593771306625888277.post-3012350753779286917</id>
		<updated>2009-05-27T12:53:34+00:00</updated>
		<content type="html">Este artigo descreve o meu roteiro de atualiza&#231;&#227;o dos meus computadores pessoais com o Ubuntu. Eu costumo instalar muitos programas, seja para testar ou mesmo para usar nas aulas que ministro. Assim, a cada seis meses, quando sai uma vers&#227;o nova do Ubuntu, costumo fazer uma reinstala&#231;&#227;o completa desses computadores. Eu tamb&#233;m costumo adaptar esses computadores ao meu gosto, e sempre que os reinstalo, preciso sair &#224; procura das modifica&#231;&#245;es que havia feito.&lt;br /&gt;&lt;br /&gt;Sendo assim, resolvi anotar cuidadosamente cada modifica&#231;&#227;o feita na instala&#231;&#227;o do Ubuntu 9.04, conhecido como Jaunty Jackalope. Estes roteiro fo criado pensando nas minhas necessidades, por&#233;m acredito que muitas das configura&#231;&#245;es aqui descritas podem ser &#250;teis para outras pessoas. Percebi tamb&#233;m que muitas configura&#231;&#245;es que eu fazia, vieram por padr&#227;o nesta vers&#227;o do Ubuntu.&lt;br /&gt;&lt;br /&gt;Se voc&#234; tem d&#250;vidas, corre&#231;&#245;es a fazer ou outras configura&#231;&#245;es a sugerir, envie um coment&#225;rio. Terei prazer em ler e responder.&lt;br /&gt;&lt;br /&gt;Configura&#231;&#245;es do firefox:&lt;br /&gt;- Tirar barra de favoritos&lt;br /&gt;- Mudar &#237;cones para pequenos&lt;br /&gt;- Colocar &#237;cone de &quot;Nova aba&quot;&lt;br /&gt;- Colocar p&#225;gina inicial: http://google.com/ig&lt;br /&gt;- Adicionar Pesquisas: http://mycroft.mozdev.org/&lt;br /&gt;-- MercadoLivre, Youtube, Torrenttab&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Configura&#231;&#245;es do ambiente de trabalho:&lt;br /&gt;&lt;br /&gt;- Colocar &#237;cones na barra superior: terminal e gedit&lt;br /&gt;- Retirar &#237;cones: help e evolution&lt;br /&gt;- Colocar lista de abas na barra superior&lt;br /&gt;- Retirar barra inferior&lt;br /&gt;- Mudar tema e papel de parede&lt;br /&gt;- Habilitar efeitos&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- Baixar e instalar o Ubuntu perfeito&lt;br /&gt;&lt;br /&gt;Instalar extens&#245;es do Firefox:&lt;br /&gt;- Adblock Plus&lt;br /&gt;- Better GReader&lt;br /&gt;- Colt&lt;br /&gt;- Delicious&lt;br /&gt;- Download Helper&lt;br /&gt;- Forecastfox l10n&lt;br /&gt;- Google Preview&lt;br /&gt;&lt;br /&gt;- noScript&lt;br /&gt;- Twitterfox&lt;br /&gt;&lt;br /&gt;- Ubuntu Firefox Modifications&lt;br /&gt;Screenlets&lt;br /&gt;- Relogio, Calend&#225;rio, Temperatura do processador&lt;br /&gt;&lt;br /&gt;Fonte Monaco&lt;br /&gt;- Instalar a fonte:&lt;br /&gt;&lt;pre&gt;cd /usr/share/fonts/truetype&lt;br /&gt;sudo mkdir myfonts&lt;br /&gt;cd myfonts&lt;br /&gt;sudo cp /dados/downloads/Monaco_Linux.ttf .&lt;br /&gt;sudo chown root.root *.ttf&lt;br /&gt;sudo mkfontdir&lt;br /&gt;cd ..&lt;br /&gt;fc-cache&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Configura&#231;&#245;es de Terminal:&lt;br /&gt;- Hist&#243;rico do bash: adicionar:&lt;br /&gt;&lt;span&gt;export HISTSIZE=5000&lt;/span&gt;&lt;br /&gt;- Alias: descomentar linhas de .bashrc&lt;br /&gt;&lt;br /&gt;- .inputrc:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;set completion-ignore-case On&lt;br /&gt;&quot;\e[B&quot;: history-search-forward&lt;br /&gt;&quot;\e[A&quot;: history-search-backward&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Vi&lt;br /&gt;&lt;pre&gt;set completion-ignore-case On&lt;br /&gt;&quot;\e[B&quot;: history-search-forward&lt;br /&gt;&quot;\e[A&quot;: history-search-backward&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span&gt;sudo aptitude install vim-full&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Latex:&lt;br /&gt;&lt;pre&gt;sudo aptitude install texlive texlive-humanities latex-beamer abntex aspell-pt-br \&lt;br /&gt;gedit-plugins rubber texmaker&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Webcam: &lt;/span&gt;&lt;br /&gt;sudo aptitude install cheese&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Man colorido&lt;/span&gt;&lt;br /&gt;- instalar most&lt;br /&gt;- sudo update-alternatives --config pager&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Configurar Skype&lt;/span&gt;&lt;br /&gt;- A definir: como fazer o mic interno funcionar&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Python: &lt;/span&gt;&lt;br /&gt;sudo aptitude install ipython&lt;br /&gt;&lt;span&gt;- baixar e instalar o wind-ide-101&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Gedit: &lt;/span&gt;&lt;br /&gt;&lt;span&gt;- ativar plugins e modificar configura&#231;&#245;es (pendente)&lt;/span&gt;&lt;br /&gt;&lt;span&gt;- Utilizar fonte Monaco&lt;/span&gt;&lt;br /&gt;- &lt;span&gt;instalar plugins:&lt;/span&gt; &lt;span&gt;latex open_terminal better_python_console&lt;/span&gt;&lt;br /&gt;- &lt;span&gt;gedit-latex-plugin_0.1.3.1-2~0ubuntuitdev1_i386.deb&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Gnome-do&lt;/span&gt;:&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;sudo aptitude install gnome-do gnome-do-plugins&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Nautilus:&lt;br /&gt;&lt;pre&gt;sudo aptitude install nautilus-open-terminal&lt;br /&gt;&lt;span&gt;- baixar e instalar&lt;/span&gt;&lt;br /&gt;-- nautilus-send-gmail_0.1.1-1_all.deb&lt;br /&gt;-- nautilus-rename-exif-date_0.1.1-1_all.deb - trocar linhas:&lt;br /&gt;&lt;span&gt;-- Alterar o programa /usr/lib/nautilus/extensions-2.0/python/nautilus-rename-exif-date.py&lt;/span&gt;&lt;br /&gt;    def menu_activate_cb(self, menu, names):&lt;br /&gt;        &quot;&quot;&quot;Called when the user selects the menu. Rename the selected files.&quot;&quot;&quot;&lt;br /&gt;        for path in names:&lt;br /&gt;            img_file = open(path, &quot;rb&quot;)&lt;br /&gt;            tags = EXIF.process_file(img_file)&lt;br /&gt;            date = str(tags[&quot;EXIF DateTimeOriginal&quot;]).replace(&quot;:&quot;, &quot;-&quot;, 2)&lt;br /&gt;            date = date.replace(&quot;:&quot;, &quot;&quot;, 1)&lt;br /&gt;            date = date.replace(&quot;:&quot;, &quot;&quot;, 1)&lt;br /&gt;            date = date.replace(&quot;:&quot;, &quot;&quot;,1)&lt;br /&gt;            date = date.replace(&quot; &quot;, &quot;-&quot;,1)&lt;br /&gt;&lt;br /&gt;            dir_name = os.path.split(path)[0]&lt;br /&gt;            file_name = os.path.split(path)[1]&lt;br /&gt;            parts = file_name.split(&quot;.&quot;)&lt;br /&gt;            if len(parts) == 1:&lt;br /&gt;                extension = &quot;&quot;&lt;br /&gt;            else:&lt;br /&gt;                extension = &quot;.&quot; + parts[-1].lower()&lt;br /&gt;            os.rename(path, dir_name + &quot;/&quot; + date + extension)&lt;br /&gt;&lt;span&gt;Adicionar scripts a ~/.gnome2/nautilus-scripts (menu de contexto)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Picasa:&lt;br /&gt;# Google&lt;br /&gt;Adicionar ao &lt;span&gt;/etc/sources.list&lt;/span&gt;:&lt;br /&gt;&lt;span&gt;deb http://dl.google.com/linux/deb/ stable non-free&lt;/span&gt; &lt;span&gt;deb http://dl.google.com/linux/deb/ testing non-free&lt;/span&gt; &lt;span&gt;sudo aptitude install picasa&lt;/span&gt;&lt;br /&gt;Links simb&#243;licos para pastas: &lt;span&gt;ln -s destino&lt;/span&gt;&lt;br /&gt;aulas -&amp;gt; /dados/MARCOANDRE/aulas/&lt;br /&gt;documentos -&amp;gt; /dados/documentos/&lt;br /&gt;imagens -&amp;gt; /dados/imagens/&lt;br /&gt;musicas -&amp;gt; /dados/musicas/&lt;br /&gt;videos -&amp;gt; /dados/videos/&lt;br /&gt;&lt;br /&gt;Ativar o CTRL+ALT+BACKSPACE:&lt;br /&gt;&lt;span&gt;sudo vi /etc/X11/xorg.conf&lt;br /&gt;Section &quot;ServerFlags&quot;&lt;/span&gt; &lt;span&gt;        Option          &quot;DontZap&quot;               &quot;false&quot;&lt;/span&gt; &lt;span&gt;EndSection&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Impressora Brother do IST:&lt;br /&gt;&lt;span&gt;sudo aptitude install brother-cups-wrapper-laser&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;DVD:&lt;br /&gt;sudo aptitude install dvdrip devede&lt;br /&gt;&lt;br /&gt;Jpilot:&lt;br /&gt;&lt;span&gt;sudo aptitude install jpilot jpilot-plugins jpilot-backup jppy-jpilot-plugins &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Diff:&lt;br /&gt;&lt;span&gt;sudo aptitude install meld&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Gcompris:&lt;br /&gt;&lt;span&gt;sudo aptitude install gcompris-sound-ptbr &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;IRC:&lt;br /&gt;&lt;span&gt;sudo aptitude install xchat&lt;/span&gt;&lt;br /&gt;- Modificar encoding para utf-8&lt;br /&gt;- Usar fonte Monaco&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span&gt;Desinstalar:&lt;/span&gt;&lt;br /&gt;-sudo aptitude remove evolution ekiga&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Instalar:&lt;br /&gt;- amule&lt;br /&gt;- gparted&lt;br /&gt;- powertop&lt;br /&gt;&lt;br /&gt;Quebra-cabe&#231;a:&lt;br /&gt;- instalar xij:&lt;br /&gt;&lt;span&gt;sudo aptitude install xjig&lt;/span&gt; -criar script quebra_cabeca:&lt;br /&gt;&lt;span&gt;#!/bin/bash&lt;/span&gt; &lt;span&gt;eog $1 &amp;amp;&lt;/span&gt; &lt;span&gt;xjig -side p -h 6 -ww 320 -file $1 &amp;amp;&lt;/span&gt;&lt;br /&gt;- colocar na pasta de scripts do Nautilus&lt;br /&gt;&lt;span&gt;cp /usr/local/bin/puzzle /home/marco/.gnome2/nautilus-scripts/&lt;/span&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4593771306625888277-3012350753779286917?l=marrcandre.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marco Andr&#233; Lopes Mendes</name>
			<email>noreply@blogger.com</email>
			<uri>http://marrcandre.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">marrcandr&#233;</title>
			<link rel="self" href="http://marrcandre.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4593771306625888277</id>
			<updated>2009-06-30T02:44:26+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Criando dicion&#225;rios com uma sintaxe mais pr&#225;tica</title>
		<link href="http://aprenda-python.blogspot.com/2009/05/criando-dicionarios-com-uma-sintaxe.html"/>
		<id>tag:blogger.com,1999:blog-2240031811551496628.post-4650822699901931381</id>
		<updated>2009-05-26T00:10:26+00:00</updated>
		<content type="html">Em python, um dicion&#225;rio &#233; o mesmo que um array associativo em PHP. Ou seja, uma lista indexada por chaves (keys) que podem ser strings e apontam para valores.Para criar um dicion&#225;rio, a sintaxe &#233;:d = {'fruta': 'goiaba', 'dia': 'sabado', 'nome': 'maria'}Um jeito diferente de criar o mesmo dicion&#225;rio &#233; usando o construtor dict(), assim:d = dict([('fruta', 'goiaba'), ('dia', 'sabado'), ('nome', '</content>
		<author>
			<name>Vinicius Assef</name>
			<email>noreply@blogger.com</email>
			<uri>http://aprenda-python.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Aprenda Python</title>
			<subtitle type="html">Dicas para voc&#234; que j&#225; &#233; programador em outra linguagem.</subtitle>
			<link rel="self" href="http://aprenda-python.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-2240031811551496628</id>
			<updated>2009-06-24T01:44:10+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Teste de Nerd do G1</title>
		<link href="http://marrcandre.blogspot.com/2009/05/teste-de-nerd-do-g1.html"/>
		<id>tag:blogger.com,1999:blog-4593771306625888277.post-7743662155340177743</id>
		<updated>2009-05-25T11:58:44+00:00</updated>
		<content type="html">Fiz mais um teste de Nerd, este do &lt;a href=&quot;http://g1.globo.com/Noticias/Tecnologia/0,,MUL1165686-6174,00-QUIZ%20G%20VOCE%20E%20NERD.html&quot;&gt;G1&lt;/a&gt;. Tirei 85, um pouco mais do que tirei &lt;a href=&quot;http://marrcandre.blogspot.com/2007/05/nerd-test_06.html&quot;&gt;antes&lt;/a&gt;. Estou em forma. Segue a prova:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://1.bp.blogspot.com/_3P5Jy-KMtkU/ShrpgTVLxxI/AAAAAAAAK4E/7SJ43MFfPRI/s1600-h/testeNerdGlobo.png&quot;&gt;&lt;img src=&quot;http://1.bp.blogspot.com/_3P5Jy-KMtkU/ShrpgTVLxxI/AAAAAAAAK4E/7SJ43MFfPRI/s400/testeNerdGlobo.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5339837049355355922&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;E voc&#234;, tamb&#233;m &#233; nerd? Fa&#231;a o teste e comente aqui.&lt;br /&gt;&lt;br /&gt;Links relacionados:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://marrcandre.blogspot.com/2007/05/nerd-test_06.html&quot;&gt;Outro teste de nerd&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://marrcandre.blogspot.com/search/label/teste&quot;&gt;Todos os testes publicados aqui&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4593771306625888277-7743662155340177743?l=marrcandre.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marco Andr&#233; Lopes Mendes</name>
			<email>noreply@blogger.com</email>
			<uri>http://marrcandre.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">marrcandr&#233;</title>
			<link rel="self" href="http://marrcandre.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4593771306625888277</id>
			<updated>2009-06-30T02:44:26+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en-us">
		<title type="html">Hello world, again</title>
		<link href="http://blog.arthurfurlan.org/2009/05/25/hello-world-again/"/>
		<id>http://blog.arthurfurlan.org/2009/05/25/hello-world-again/</id>
		<updated>2009-05-25T07:06:57+00:00</updated>
		<content type="html">&lt;p&gt;&lt;img src=&quot;http://merlin.nullable.org/merlin-medium.jpg&quot; alt=&quot;merlin&quot; /&gt; Yep, that's the second time I post a &quot;Hello world&quot; entry here. The reason is that I recently moved my domain from an account at &lt;a href=&quot;http://bluehost.com&quot;&gt;Bluehost&lt;/a&gt; to a &lt;a href=&quot;http://en.wikipedia.org/wiki/Virtual_private_server&quot;&gt;VPS&lt;/a&gt; at &lt;a href=&quot;http://linode.com&quot;&gt;Linode&lt;/a&gt;. So, first of all, I would like to introduce you to &lt;a href=&quot;http://merlin.nullable.org&quot;&gt;merlin&lt;/a&gt;, my new VPS. :)
&lt;/p&gt;
&lt;p&gt;As I'm the sysadmin behind my server now, I decided to not install mod-php here and then I had to change my blog engine. I used to run &lt;a href=&quot;http://wordpress.org&quot;&gt;Wordpress&lt;/a&gt; for years and now I'm running &lt;a href=&quot;http://code.google.com/p/django-diario&quot;&gt;django-diario&lt;/a&gt;, a wonderful blog engine for &lt;a href=&quot;http://djangoproject.com&quot;&gt;django&lt;/a&gt; made by Brazilian djanglers.
&lt;/p&gt;
&lt;p&gt;About this new version of my old blog, you may have noticed that it has only this post... That's right, I removed the old stuff (in fact I just didn't migrate them from Wordpress) and I intend to start translating and re-posting a small part of them as soon as possible. If you want to see here any specific post from my old blog, please, let me know.
&lt;/p&gt;
&lt;p&gt;As you can see now I'm writing in English and I used to write in Portuguese... I'm not a professional English writer, so you won't be a lucky guy if you find some bugs around here and if you do find something, please, let me know about it and I will gladly fix it.
&lt;/p&gt;
&lt;p&gt;You'll probably see at here lots of posts about &lt;a href=&quot;http://python.org&quot;&gt;python&lt;/a&gt; and &lt;a href=&quot;http://debian.org&quot;&gt;debian&lt;/a&gt;. This time I'll also try to write more often and in small chunks. :)
&lt;/p&gt;
&lt;p&gt;I think that's all...
&lt;/p&gt;</content>
		<author>
			<name>Arthur Furlan</name>
			<uri>http://blog.arthurfurlan.org/tags/python/</uri>
		</author>
		<source>
			<title type="html">arthurfurlan's blog -- tag: python</title>
			<subtitle type="html">Latest entries for tag &quot;python&quot;</subtitle>
			<link rel="self" href="http://blog.arthurfurlan.org/tags/python/rss/"/>
			<id>http://blog.arthurfurlan.org/tags/python/rss/</id>
			<updated>2009-07-04T20:44:30+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">SCS2009 - As fotos do evento</title>
		<link href="http://marrcandre.blogspot.com/2009/05/scs2009-as-fotos-do-primeiro-dia.html"/>
		<id>tag:blogger.com,1999:blog-4593771306625888277.post-3339200976732387346</id>
		<updated>2009-05-24T20:04:31+00:00</updated>
		<content type="html">&lt;div&gt;De 18 a 22 de maio de 2009, aconteceu a Semana de Computa&#231;&#227;o da SOCIESC, com palestras e minicursos. As fotos est&#227;o dispon&#237;veis abaixo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;a href=&quot;http://picasaweb.google.com.br/marcoandre/20090418SCS2009&quot;&gt;Link para as fotos&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Links relacionados:&lt;br /&gt;&lt;a href=&quot;http://marrcandre.blogspot.com/search/label/scs2009&quot;&gt;Todos as postagens sobre a SCS2009&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4593771306625888277-3339200976732387346?l=marrcandre.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marco Andr&#233; Lopes Mendes</name>
			<email>noreply@blogger.com</email>
			<uri>http://marrcandre.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">marrcandr&#233;</title>
			<link rel="self" href="http://marrcandre.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4593771306625888277</id>
			<updated>2009-06-30T02:44:26+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">SCS2009 - Alcir</title>
		<link href="http://marrcandre.blogspot.com/2009/05/scs2009-alcir.html"/>
		<id>tag:blogger.com,1999:blog-4593771306625888277.post-3076983440771364320</id>
		<updated>2009-05-24T19:58:44+00:00</updated>
		<content type="html">&lt;center&gt;                         &lt;div id=&quot;blip_movie_content_2161927&quot;&gt;     &lt;a rel=&quot;enclosure&quot; href=&quot;http://blip.tv/file/get/Marrcandre-SCS2009Alcir664.avi&quot;&gt;&lt;img alt=&quot;Video thumbnail. Click to play&quot; src=&quot;http://blip.tv/file/get/Marrcandre-SCS2009Alcir664.avi.jpg&quot; title=&quot;Click to play&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;     &lt;br /&gt;     &lt;a rel=&quot;enclosure&quot; href=&quot;http://blip.tv/file/get/Marrcandre-SCS2009Alcir664.avi&quot;&gt;Click to Play&lt;/a&gt;     &lt;/div&gt;          &lt;/center&gt;&lt;div class=&quot;blip_description&quot;&gt;Palestra apresentada pelo acad&#234;mico Alcir na SCS2009 - Semana de Computa&#231;&#227;o da SOCIESC, no dia 21/05/2009. &lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4593771306625888277-3076983440771364320?l=marrcandre.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marco Andr&#233; Lopes Mendes</name>
			<email>noreply@blogger.com</email>
			<uri>http://marrcandre.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">marrcandr&#233;</title>
			<link rel="self" href="http://marrcandre.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4593771306625888277</id>
			<updated>2009-06-30T02:44:26+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">SCS2009 - Marcus Silva</title>
		<link href="http://marrcandre.blogspot.com/2009/05/scs2009-marcus-silva.html"/>
		<id>tag:blogger.com,1999:blog-4593771306625888277.post-3113526014368958331</id>
		<updated>2009-05-24T19:58:31+00:00</updated>
		<content type="html">&lt;center&gt;                         &lt;div id=&quot;blip_movie_content_2162032&quot;&gt;     &lt;a rel=&quot;enclosure&quot; href=&quot;http://blip.tv/file/get/Marrcandre-SCS2009MarcusSilva140.avi&quot;&gt;&lt;img alt=&quot;Video thumbnail. Click to play&quot; src=&quot;http://blip.tv/file/get/Marrcandre-SCS2009MarcusSilva140.avi.jpg&quot; title=&quot;Click to play&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;     &lt;br /&gt;     &lt;a rel=&quot;enclosure&quot; href=&quot;http://blip.tv/file/get/Marrcandre-SCS2009MarcusSilva140.avi&quot;&gt;Click to Play&lt;/a&gt;     &lt;/div&gt;          &lt;/center&gt;&lt;div class=&quot;blip_description&quot;&gt;Palestra apresentada por Marcus Silva na SCS2009 - Semana de Computa&#231;&#227;o da SOCIESC, no dia 21/05/2009. &lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4593771306625888277-3113526014368958331?l=marrcandre.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marco Andr&#233; Lopes Mendes</name>
			<email>noreply@blogger.com</email>
			<uri>http://marrcandre.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">marrcandr&#233;</title>
			<link rel="self" href="http://marrcandre.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4593771306625888277</id>
			<updated>2009-06-30T02:44:26+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">SCS2009 - Leandro Godinho</title>
		<link href="http://marrcandre.blogspot.com/2009/05/scs2009-leandro-godinho.html"/>
		<id>tag:blogger.com,1999:blog-4593771306625888277.post-7036227833611644178</id>
		<updated>2009-05-24T19:58:18+00:00</updated>
		<content type="html">&lt;center&gt;                         &lt;div id=&quot;blip_movie_content_2162568&quot;&gt;     &lt;a rel=&quot;enclosure&quot; href=&quot;http://blip.tv/file/get/Marrcandre-SCS2009LeandroGodinho543.avi&quot;&gt;&lt;img alt=&quot;Video thumbnail. Click to play&quot; src=&quot;http://blip.tv/file/get/Marrcandre-SCS2009LeandroGodinho543.avi.jpg&quot; title=&quot;Click to play&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;     &lt;br /&gt;     &lt;a rel=&quot;enclosure&quot; href=&quot;http://blip.tv/file/get/Marrcandre-SCS2009LeandroGodinho543.avi&quot;&gt;Click to Play&lt;/a&gt;     &lt;/div&gt;          &lt;/center&gt;&lt;div class=&quot;blip_description&quot;&gt;Palestra apresentada pelo acad&#234;mico Leandro Godinho na SCS2009 - Semana de Computa&#231;&#227;o da SOCIESC, no dia 21/05/2009. &lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4593771306625888277-7036227833611644178?l=marrcandre.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marco Andr&#233; Lopes Mendes</name>
			<email>noreply@blogger.com</email>
			<uri>http://marrcandre.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">marrcandr&#233;</title>
			<link rel="self" href="http://marrcandre.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4593771306625888277</id>
			<updated>2009-06-30T02:44:26+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">SCS2009 - C&#233;u Games</title>
		<link href="http://marrcandre.blogspot.com/2009/05/scs2009-ceu-games.html"/>
		<id>tag:blogger.com,1999:blog-4593771306625888277.post-1792593027569929713</id>
		<updated>2009-05-24T19:58:04+00:00</updated>
		<content type="html">&lt;center&gt;                         &lt;div id=&quot;blip_movie_content_2162652&quot;&gt;     &lt;a rel=&quot;enclosure&quot; href=&quot;http://blip.tv/file/get/Marrcandre-SCS2009CuGames308.avi&quot;&gt;&lt;img alt=&quot;Video thumbnail. Click to play&quot; src=&quot;http://blip.tv/file/get/Marrcandre-SCS2009CuGames308.avi.jpg&quot; title=&quot;Click to play&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;     &lt;br /&gt;     &lt;a rel=&quot;enclosure&quot; href=&quot;http://blip.tv/file/get/Marrcandre-SCS2009CuGames308.avi&quot;&gt;Click to Play&lt;/a&gt;     &lt;/div&gt;          &lt;/center&gt;&lt;div class=&quot;blip_description&quot;&gt;Palestra apresentada pela C&#233;u Games na SCS2009 - Semana de Computa&#231;&#227;o da SOCIESC, no dia 21/05/2009. &lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4593771306625888277-1792593027569929713?l=marrcandre.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marco Andr&#233; Lopes Mendes</name>
			<email>noreply@blogger.com</email>
			<uri>http://marrcandre.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">marrcandr&#233;</title>
			<link rel="self" href="http://marrcandre.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4593771306625888277</id>
			<updated>2009-06-30T02:44:26+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">SCS2009 - Fernado Paes</title>
		<link href="http://marrcandre.blogspot.com/2009/05/fernado-paes-scs2009.html"/>
		<id>tag:blogger.com,1999:blog-4593771306625888277.post-920985384788344989</id>
		<updated>2009-05-22T16:10:30+00:00</updated>
		<content type="html">&lt;center&gt;                         &lt;div id=&quot;blip_movie_content_2157093&quot;&gt;     &lt;a rel=&quot;enclosure&quot; href=&quot;http://blip.tv/file/get/Marrcandre-FernadoPaesSCS2009643.avi&quot;&gt;&lt;img alt=&quot;Video thumbnail. Click to play&quot; src=&quot;http://blip.tv/file/get/Marrcandre-FernadoPaesSCS2009643.avi.jpg&quot; title=&quot;Click to play&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;    &lt;br /&gt;    &lt;a rel=&quot;enclosure&quot; href=&quot;http://blip.tv/file/get/Marrcandre-FernadoPaesSCS2009643.avi&quot;&gt;Click to Play&lt;/a&gt;     &lt;/div&gt;          &lt;/center&gt;&lt;div class=&quot;blip_description&quot;&gt;Palestra apresentada por Fernando Paes na SCS2009 - Semana de Computa&#231;&#227;o da SOCIESC, no dia 19/05/2009.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4593771306625888277-920985384788344989?l=marrcandre.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marco Andr&#233; Lopes Mendes</name>
			<email>noreply@blogger.com</email>
			<uri>http://marrcandre.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">marrcandr&#233;</title>
			<link rel="self" href="http://marrcandre.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4593771306625888277</id>
			<updated>2009-06-30T02:44:26+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">SCS2009 - Julio Monteiro</title>
		<link href="http://marrcandre.blogspot.com/2009/05/scs2009-julio-monteiro.html"/>
		<id>tag:blogger.com,1999:blog-4593771306625888277.post-3000684274423158490</id>
		<updated>2009-05-22T06:53:56+00:00</updated>
		<content type="html">&lt;center&gt;                         &lt;div id=&quot;blip_movie_content_2157100&quot;&gt;     &lt;a rel=&quot;enclosure&quot; href=&quot;http://blip.tv/file/get/Marrcandre-SCS2009JulioMonteiro956.avi&quot;&gt;&lt;img alt=&quot;Video thumbnail. Click to play&quot; src=&quot;http://blip.tv/file/get/Marrcandre-SCS2009JulioMonteiro956.avi.jpg&quot; title=&quot;Click to play&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;     &lt;br /&gt;     &lt;a rel=&quot;enclosure&quot; href=&quot;http://blip.tv/file/get/Marrcandre-SCS2009JulioMonteiro956.avi&quot;&gt;Click to Play&lt;/a&gt;     &lt;/div&gt;          &lt;/center&gt;&lt;div class=&quot;blip_description&quot;&gt;Palestra ministrada por J&#250;lio Monteiro na SCS2009 - Semana de Computa&#231;&#227;o da SOCIESC, no dia 19/05/2009.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4593771306625888277-3000684274423158490?l=marrcandre.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marco Andr&#233; Lopes Mendes</name>
			<email>noreply@blogger.com</email>
			<uri>http://marrcandre.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">marrcandr&#233;</title>
			<link rel="self" href="http://marrcandre.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4593771306625888277</id>
			<updated>2009-06-30T02:44:26+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">SCS2009 - MIC e Rafael Mendes</title>
		<link href="http://marrcandre.blogspot.com/2009/05/scs2009-mic-e-rafael-mendes.html"/>
		<id>tag:blogger.com,1999:blog-4593771306625888277.post-8833735700133954617</id>
		<updated>2009-05-22T06:53:42+00:00</updated>
		<content type="html">&lt;center&gt;                         &lt;div id=&quot;blip_movie_content_2156904&quot;&gt;     &lt;a rel=&quot;enclosure&quot; href=&quot;http://blip.tv/file/get/Marrcandre-SCS2009MICERafaelMendes541.avi&quot;&gt;&lt;img alt=&quot;Video thumbnail. Click to play&quot; src=&quot;http://blip.tv/file/get/Marrcandre-SCS2009MICERafaelMendes541.avi.jpg&quot; title=&quot;Click to play&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;     &lt;br /&gt;     &lt;a rel=&quot;enclosure&quot; href=&quot;http://blip.tv/file/get/Marrcandre-SCS2009MICERafaelMendes541.avi&quot;&gt;Click to Play&lt;/a&gt;     &lt;/div&gt;          &lt;/center&gt;&lt;div class=&quot;blip_description&quot;&gt;Palestra apresentada pelos alunos do MIC e por Rafael Mendes na SCS2009 - Semana de Computa&#231;&#227;o da SOCIESC, no dia 19/05/2009.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4593771306625888277-8833735700133954617?l=marrcandre.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marco Andr&#233; Lopes Mendes</name>
			<email>noreply@blogger.com</email>
			<uri>http://marrcandre.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">marrcandr&#233;</title>
			<link rel="self" href="http://marrcandre.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4593771306625888277</id>
			<updated>2009-06-30T02:44:26+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">SCS2009 - Luciano Ramalho 2/2</title>
		<link href="http://marrcandre.blogspot.com/2009/05/scs2009-luciano-ramalho-22.html"/>
		<id>tag:blogger.com,1999:blog-4593771306625888277.post-2725660382010653326</id>
		<updated>2009-05-22T04:17:17+00:00</updated>
		<content type="html">&lt;center&gt;                         &lt;div id=&quot;blip_movie_content_2146966&quot;&gt;     &lt;a rel=&quot;enclosure&quot; href=&quot;http://blip.tv/file/get/Marrcandre-SCS2009LucianoRamalho22636.avi&quot;&gt;&lt;img alt=&quot;Video thumbnail. Click to play&quot; src=&quot;http://blip.tv/file/get/Marrcandre-SCS2009LucianoRamalho22636.avi.jpg&quot; title=&quot;Click to play&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;     &lt;br /&gt;     &lt;a rel=&quot;enclosure&quot; href=&quot;http://blip.tv/file/get/Marrcandre-SCS2009LucianoRamalho22636.avi&quot;&gt;Click to Play&lt;/a&gt;     &lt;/div&gt;          &lt;/center&gt;&lt;div class=&quot;blip_description&quot;&gt;Parte 2 de 2 da palestra apresentada por Luciano Ramalho na SCS2009 - Semana de Computa&#231;&#227;o da SOCIESC, no dia 18/05/2009.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4593771306625888277-2725660382010653326?l=marrcandre.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marco Andr&#233; Lopes Mendes</name>
			<email>noreply@blogger.com</email>
			<uri>http://marrcandre.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">marrcandr&#233;</title>
			<link rel="self" href="http://marrcandre.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4593771306625888277</id>
			<updated>2009-06-30T02:44:26+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">SCS2009 - Semana de Computa&#231;&#227;o da SOCIESC 2009</title>
		<link href="http://marrcandre.blogspot.com/2009/05/scs2009-semana-de-computacao-da-sociesc.html"/>
		<id>tag:blogger.com,1999:blog-4593771306625888277.post-6817855554962440747</id>
		<updated>2009-05-22T04:13:26+00:00</updated>
		<content type="html">&lt;div&gt;De 18 a 21 de maio de 2009, acontecer&#225; na &lt;a href=&quot;http://www.sociesc.org.br/&quot;&gt;SOCIESC&lt;/a&gt;, &lt;a href=&quot;http://www.blogger.com/%3Ciframe%20width=%22425%22%20height=%22350%22%20frameborder=%220%22%20scrolling=%22no%22%20marginheight=%220%22%20marginwidth=%220%22%20src=%22http://maps.google.com/maps?q=sociesc+marques+de+olinda&amp;ie=UTF8&amp;hl=pt-BR&amp;ll=-26.308496,-48.85088&amp;spn=0.009328,0.013819&amp;z=14&amp;iwloc=A&amp;cid=1187177507441288302&amp;output=embed%22%3E%3C/iframe%3E%3Cbr%20/%3E%3Csmall%3E%3Ca%20href=%22http://maps.google.com/maps?q=sociesc+marques+de+olinda&amp;ie=UTF8&amp;hl=pt-BR&amp;ll=-26.308496,-48.85088&amp;spn=0.009328,0.013819&amp;z=14&amp;iwloc=A&amp;cid=1187177507441288302&amp;source=embed%22%20style=%22color:#0000FF;text-align:left%22%3EExibir%20mapa%20ampliado%3C/a%3E%3C/small%3E&quot;&gt;Campus Marqu&#234;s de Olinda&lt;/a&gt;, em &lt;a href=&quot;http://www.joinville.com/&quot;&gt;Joinville&lt;/a&gt;/&lt;a href=&quot;http://www.belasantacatarina.com.br/&quot;&gt;SC&lt;/a&gt;, a &lt;span class=&quot;highlighted0&quot;&gt;Semana&lt;/span&gt; de computa&#231;&#227;o da &lt;span class=&quot;highlighted1&quot;&gt;SOCIESC&lt;/span&gt; (&lt;span&gt;SCS2009&lt;/span&gt;). A &lt;a target=&quot;_blank&quot; href=&quot;http://spreadsheets.google.com/pub?key=raLENJUrYjJ6R3Fv41EVwEQ&quot;&gt;programa&#231;&#227;o&lt;/a&gt; inclui palestras com professores, profissionais da &#225;rea de Tecnologia da Infoma&#231;&#227;o e personalidades da comunidade de software livre.  Teremos ainda apresenta&#231;&#245;es de acad&#234;micos e egressos dos cursos. Na quarta-feira, a noite ser&#225; reservada para minicursos. Para se inscrever nos minicursos, basta preencher o &lt;a target=&quot;_blank&quot; href=&quot;http://spreadsheets.google.com/viewform?hl=pt_BR&amp;formkey=cmFMRU5KVXJZako2UjNGdjQxRVZ3RVE6MA..&quot;&gt;formul&#225;rio&lt;/a&gt;. A SCS2009 &#233; aberta ao p&#250;blico e todos s&#227;o convidados a participar.&lt;br /&gt;&lt;br /&gt;Quem quiser acompanhar ou comentar o evento pelo &lt;a href=&quot;http://www.twitter.com/&quot;&gt;Twitter&lt;/a&gt;,  utilize a &lt;span&gt;tag&lt;/span&gt; &lt;a href=&quot;http://search.twitter.com/search?q=scs2009&quot;&gt;&lt;span&gt;#scs2009&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Abaixo, a programa&#231;&#227;o do evento:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para se inscrever nos minicursos, preencha o formul&#225;rio abaixo:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Servi&#231;o:&lt;/span&gt;&lt;br /&gt;&lt;span&gt;O que:&lt;/span&gt; Semana de Computa&#231;&#227;o da SOCIESC 2009&lt;br /&gt;&lt;span&gt;Quando: &lt;/span&gt;de 18 a 21 de maio de 2009 (segunda a quinta-feira), de 19:15 at&#233; 22:45&lt;br /&gt;&lt;span&gt;Onde:&lt;/span&gt; SOCIESC, Campus Marqu&#234;s de Olinda, Rua Gothard Kaesemodel, 833, Joinville - SC&lt;br /&gt;&lt;span&gt;Quanto:&lt;/span&gt; gratuito&lt;br /&gt;&lt;span&gt;Quem pode participar:&lt;/span&gt; aberto ao p&#250;blico&lt;br /&gt;&lt;span&gt;Informa&#231;&#245;es:&lt;/span&gt; 47 3461-0517&lt;br /&gt;&lt;br /&gt;Leia outros textos publicados aqui sobre a &lt;a href=&quot;http://marrcandre.blogspot.com/search/label/sociesc&quot;&gt;SOCIESC&lt;/a&gt;.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4593771306625888277-6817855554962440747?l=marrcandre.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marco Andr&#233; Lopes Mendes</name>
			<email>noreply@blogger.com</email>
			<uri>http://marrcandre.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">marrcandr&#233;</title>
			<link rel="self" href="http://marrcandre.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4593771306625888277</id>
			<updated>2009-06-30T02:44:26+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">SCS2009 - Luciano Ramalho 1/2</title>
		<link href="http://marrcandre.blogspot.com/2009/05/scs2009-luciano-ramalho-12.html"/>
		<id>tag:blogger.com,1999:blog-4593771306625888277.post-8578181400552047671</id>
		<updated>2009-05-22T04:11:03+00:00</updated>
		<content type="html">&lt;center&gt;                         &lt;div id=&quot;blip_movie_content_2146187&quot;&gt;     &lt;a rel=&quot;enclosure&quot; href=&quot;http://blip.tv/file/get/Marrcandre-SCS2009LucianoRamalho12893.avi&quot;&gt;&lt;img alt=&quot;Video thumbnail. Click to play&quot; src=&quot;http://blip.tv/file/get/Marrcandre-SCS2009LucianoRamalho12893.avi.jpg&quot; title=&quot;Click to play&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;     &lt;br /&gt;     &lt;a rel=&quot;enclosure&quot; href=&quot;http://blip.tv/file/get/Marrcandre-SCS2009LucianoRamalho12893.avi&quot;&gt;Click to Play&lt;/a&gt;     &lt;/div&gt;          &lt;/center&gt;&lt;div class=&quot;blip_description&quot;&gt;Parte 1 de 2 da palestra apresentada por Luciano Ramalho na SCS2009 - Semana de Computa&#231;&#227;o da SOCIESC, no dia 18/05/2009.&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4593771306625888277-8578181400552047671?l=marrcandre.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marco Andr&#233; Lopes Mendes</name>
			<email>noreply@blogger.com</email>
			<uri>http://marrcandre.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">marrcandr&#233;</title>
			<link rel="self" href="http://marrcandre.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4593771306625888277</id>
			<updated>2009-06-30T02:44:26+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">S&#227;o Paulo Python User Group - May Meeting</title>
		<link href="http://blog.brunogola.com.br/?p=76"/>
		<id>http://blog.brunogola.com.br/?p=76</id>
		<updated>2009-05-16T13:29:01+00:00</updated>
		<content type="html">&lt;p&gt;Every month the &lt;a href=&quot;http://www.python.org.br/wiki/GrupySP&quot;&gt;GruPy-SP&lt;/a&gt; members get together to discuss, chat and/or code. &lt;/p&gt;
&lt;p&gt;This month we will meet to watch/present some lightning talks and to talk about our participation at the F&#243;rum Internacional de Software Livre (&lt;a href=&quot;http://www.fisl.org.br/&quot;&gt;FISL 10&lt;/a&gt;). &lt;/p&gt;
&lt;p&gt;The meeting will be hold at the SP HackLab, May 23. More details (in pt-br): &lt;a href=&quot;http://www.python.org.br/wiki/GrupySP&quot;&gt;GruPy-SP wiki&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;See you there &lt;img src=&quot;http://blog.brunogola.com.br/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; /&gt; &lt;/p&gt;</content>
		<author>
			<name>Bruno Gola</name>
			<uri>http://blog.brunogola.com.br</uri>
		</author>
		<source>
			<title type="html">bgola &#187; python</title>
			<subtitle type="html">python, free software, hacking, free culture, bicycle commuting, geocaching</subtitle>
			<link rel="self" href="http://blog.brunogola.com.br/?feed=rss2&amp;cat=16"/>
			<id>http://blog.brunogola.com.br/?feed=rss2&amp;cat=16</id>
			<updated>2009-05-26T11:44:30+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Changing people or changing rules</title>
		<link href="http://blog.labix.org/2009/05/16/changing-people-or-changing-rules"/>
		<id>http://blog.labix.org/?p=109</id>
		<updated>2009-05-16T13:02:20+00:00</updated>
		<content type="html">&lt;p&gt;In my previous post I made an open statement which I&amp;#8217;d like to clarify a bit further:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;(&amp;#8230;) when the rules don&#8217;t work for people, the rules should be changed, not the people.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;This leaves a lot of room for personal interpretation of what was actually meant, and TIm Hoffman pointed that out nicely with the following questioning in a comment:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;I wonder when the rule is important enough to change the people though. For instance [, if your] development process is oriented to TDD and people don&#8217;t write the tests or do the job poorly will you change them then?&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;This is indeed a nice scenario to explore the idea.  If it happens at some point that a team claims to be using TDD, but if in practice no developer actually writes tests first, the rules are clearly not working.  If everyone in the team hates doing TDD, enforcing it most probably won&amp;#8217;t show its intended benefits, and that was the heart of my comment.  You can&amp;#8217;t simply keep the rule as is if no one follows it, unless you don&amp;#8217;t really care about the outcome of the rule.&lt;/p&gt;
&lt;p&gt;One interesting point, though, is that when you have a high level of influence over the environment in which people are, it may be possible to tweak the rules &lt;i&gt;or&lt;/i&gt; the processes to adapt to reality, and tweaking the processes may change the way that people feel about the rules as a consequence (arguably, &lt;i&gt;changing people&lt;/i&gt; as a side effect).&lt;/p&gt;
&lt;p&gt;As a more concrete example, if I found myself in the described scenario,  I&amp;#8217;d try to understand why TDD is not working, and would try to discuss with the team to see how we should change the process so that it starts to work for us somehow.  Maybe what would be needed is more discussion to show the value of TDD, and perhaps some pair programming with people that do TDD very well so that the joy of doing it becomes more visible.&lt;/p&gt;
&lt;p&gt;In either case, I wouldn&amp;#8217;t be simply asking people &amp;#8220;&lt;i&gt;Everyone has to do TDD from now on!&lt;/i&gt;&amp;#8220;, I&amp;#8217;d be tweaking the process so that it feels better and more natural to people.  Then, if nothing similar works either, well, let&amp;#8217;s change the rule.  I&amp;#8217;d try to use more conventional unit testing or some other system which people do follow more naturally and that presents similar benefits.&lt;/p&gt;</content>
		<author>
			<name>Gustavo Niemeyer</name>
			<uri>http://blog.labix.org</uri>
		</author>
		<source>
			<title type="html">Labix Blog</title>
			<subtitle type="html">by Gustavo Niemeyer</subtitle>
			<link rel="self" href="http://blog.labix.org/feed/"/>
			<id>http://blog.labix.org/feed/</id>
			<updated>2009-07-02T17:44:29+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Palestras ministradas pelo Luciano Ramalho</title>
		<link href="http://marrcandre.blogspot.com/2009/05/palestras-ministradas-pelo-luciano.html"/>
		<id>tag:blogger.com,1999:blog-4593771306625888277.post-2640397222291346306</id>
		<updated>2009-05-15T18:43:32+00:00</updated>
		<content type="html">No dia 18 de maio de 2009, &lt;a href=&quot;http://ramalho.org/&quot;&gt;Luciano Ramalho&lt;/a&gt; ministrar&#225; uma palestra na &lt;a href=&quot;http://www.sociesc.org.br&quot;&gt;SOCIESC&lt;/a&gt;, abrindo a &lt;a href=&quot;http://marrcandre.blogspot.com/2009/05/scs2009-semana-de-computacao-da-sociesc.html&quot;&gt;Semana da Computa&#231;&#227;o 2009&lt;/a&gt;. &lt;span class=&quot;&quot; id=&quot;parent-fieldname-description&quot;&gt;&lt;span class=&quot;highlightedSearchTerm&quot;&gt;Luciano&lt;/span&gt; &lt;span class=&quot;highlightedSearchTerm&quot;&gt;Ramalho&lt;/span&gt; &#233;  presidente da &lt;a href=&quot;http://associacao.pythonbrasil.org/&quot;&gt;Associa&#231;&#227;o Python Brasil&lt;/a&gt; para o per&#237;odo de 2007 a 2009 e foi um dos tr&#234;s indicados na categoria Personalidade do Ano do &lt;a href=&quot;http://info.abril.com.br/premioinfo/2008/&quot;&gt;Pr&#234;mio Info&lt;/a&gt; de 2008. &lt;/span&gt;Como forma de aquecimento, separei algumas palestras ministradas por ele, ou que ele participou e que est&#227;o dispon&#237;veis na Internet.:&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Palestra rel&#226;mpago na Pycon 2009, em Chicago&lt;/span&gt; (a dele &#233; a terceira, come&#231;ando por volta de 6:15):&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;a href=&quot;http://blip.tv/play/AffNDwA&quot;&gt;Link do v&#237;deo&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id=&quot;details-title&quot;&gt;Orienta&#231;&#227;o a Objetos em Python, na &lt;/span&gt;&lt;span id=&quot;details-title&quot;&gt;PyConBrasil 2008, em&lt;/span&gt;&lt;span id=&quot;details-title&quot;&gt; 18/10/2008&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;a href=&quot;http://video.google.com/googleplayer.swf?docid=-1631372346862936543&quot;&gt;Link do v&#237;deo&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id=&quot;details-title&quot;&gt;Uma arquitetura de componentes em Python&lt;/span&gt;&lt;span id=&quot;duration-and-date&quot;&gt;&lt;span class=&quot;date&quot;&gt;, no Grupy-SP, em 11/12/2007&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;a href=&quot;http://video.google.com/googleplayer.swf?docid=5303962278151147403&quot;&gt;Link do v&#237;deo&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Sobre a Associa&#231;&#227;o Python Brasil,  na PyConBrasil 3, em &lt;/span&gt;&lt;span id=&quot;duration-and-date&quot;&gt;&lt;span class=&quot;date&quot;&gt;31/08/2007&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;a href=&quot;http://video.google.com/googleplayer.swf?docid=-7145467790670865177&quot;&gt;Link do v&#237;deo&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span id=&quot;details-title&quot;&gt;Django X Plone X Grok&lt;/span&gt;&lt;span&gt;, na &lt;/span&gt;&lt;span id=&quot;details-title&quot;&gt;PyConBrasil 3, em &lt;/span&gt;&lt;span id=&quot;duration-and-date&quot;&gt;&lt;span class=&quot;date&quot;&gt;31/08/2007&lt;/span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;a href=&quot;http://video.google.com/googleplayer.swf?docid=5721498468204696877&quot;&gt;Link do v&#237;deo&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Painel: Software livre no governo brasileiro, na PyConBrasil 3, em &lt;/span&gt;&lt;span id=&quot;duration-and-date&quot;&gt;&lt;span class=&quot;date&quot;&gt;31/08/2007&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;a href=&quot;http://video.google.com/googleplayer.swf?docid=-3795472996587314694&quot;&gt;Link do v&#237;deo&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Se algu&#233;m encontrar outras, envie um coment&#225;rio e eu as incluo aqui. Ap&#243;s o evento, pretendo disponibilizar tamb&#233;m a palestra que ser&#225; apresentada na SOCIESC.&lt;br /&gt;&lt;br /&gt;Textos relacionados:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://marrcandre.blogspot.com/2009/05/scs2009-semana-de-computacao-da-sociesc.html&quot;&gt;SCS2009 - Semana de Computa&#231;&#227;o da SOCIESC 2009&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://marrcandre.blogspot.com/2009/05/senra-em-trajetoria-de-um-profissional.html&quot;&gt;Senra em: a trajet&#243;ria de um profissional da computa&#231;&#227;o&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://marrcandre.blogspot.com/2009/04/videos-da-pycon-09.html&quot;&gt;V&#237;deos da PyCon 2009&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4593771306625888277-2640397222291346306?l=marrcandre.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marco Andr&#233; Lopes Mendes</name>
			<email>noreply@blogger.com</email>
			<uri>http://marrcandre.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">marrcandr&#233;</title>
			<link rel="self" href="http://marrcandre.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4593771306625888277</id>
			<updated>2009-06-30T02:44:26+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Senra em: a trajet&#243;ria de um profissional da computa&#231;&#227;o</title>
		<link href="http://marrcandre.blogspot.com/2009/05/senra-em-trajetoria-de-um-profissional.html"/>
		<id>tag:blogger.com,1999:blog-4593771306625888277.post-233175191931277077</id>
		<updated>2009-05-15T17:52:21+00:00</updated>
		<content type="html">&lt;div&gt;Em 06 de agosto de 2008, tivemos o prazer de receber na &lt;a href=&quot;http://www.sociesc.org.br/&quot;&gt;SOCIESC&lt;/a&gt; o mestre&lt;a href=&quot;http://rodrigo.senra.nom.br/&quot;&gt; Rodrigo Dias Arruda Senra&lt;/a&gt;. A palestra, entitulada &quot;&lt;span id=&quot;EpisodeDescription&quot;&gt;A trajet&#243;ria de um Profissional da Computa&#231;&#227;o - Confiss&#245;es de um hacker tupiniquim&quot;, foi apresentada aos alunos de computa&#231;&#227;o da SOCIESC. Abaixo, a primeira parte da palestra, de um total de dois:&lt;/span&gt;&lt;br /&gt;&lt;span id=&quot;EpisodeDescription&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id=&quot;EpisodeDescription&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;span id=&quot;EpisodeDescription&quot;&gt;&lt;a href=&quot;http://marrcandre.blip.tv/&quot;&gt;Link do v&#237;deo&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id=&quot;EpisodeDescription&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id=&quot;EpisodeDescription&quot;&gt;Na palestra, Rodrigo Senra falou da sua experi&#234;ncia acad&#234;mica e profissional e tamb&#233;m do envolvimento com a comunidade de software livre e com a comunidade &lt;a href=&quot;http://python.org.br/&quot;&gt;Python&lt;/a&gt;, no Brasil e no mundo. Vale lembrar que foi dele a primeira tradu&#231;&#227;o para o portugu&#234;s do &lt;a href=&quot;http://www.gpr.com.br/download/python21.pdf&quot;&gt;Tutorial de Python&lt;/a&gt; e foi ele tamb&#233;m o organizador da primeira edi&#231;&#227;o da &lt;a href=&quot;http://pyconbrasil.com.br/&quot;&gt;PyCon Brasil&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span id=&quot;EpisodeDescription&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;span id=&quot;EpisodeDescription&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4593771306625888277-233175191931277077?l=marrcandre.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marco Andr&#233; Lopes Mendes</name>
			<email>noreply@blogger.com</email>
			<uri>http://marrcandre.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">marrcandr&#233;</title>
			<link rel="self" href="http://marrcandre.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4593771306625888277</id>
			<updated>2009-06-30T02:44:26+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Class member access control: enforcement vs. convention</title>
		<link href="http://blog.labix.org/2009/05/15/class-member-access-control-enforcement-vs-convention"/>
		<id>http://blog.labix.org/?p=99</id>
		<updated>2009-05-15T09:26:06+00:00</updated>
		<content type="html">&lt;p&gt;For a long time I&amp;#8217;ve been an advocate of Python&amp;#8217;s notion of controlling access to private and protected members (attributes, methods, etc) with conventions, by simply naming them like &amp;#8220;_name&amp;#8221;, with an initial underline.&#160; Even though Python does support the &amp;#8220;__name&amp;#8221; (with double underscore) for &amp;#8220;private&amp;#8221; members (this actually mangles the name rather than hiding it), you&amp;#8217;ll notice that even this is rarely used in practice, and the largely agreed mantra is that convention should be enough and thus one underscore suffices.  This always resonated quite well with me, since I generally prefer to handle situations by agreement rather than enforcement.  Well, I&amp;#8217;m now changing my opinion.that this works well for this purpose, at least in certain situations.&lt;/p&gt;
&lt;p&gt;This methodology may work quite well in situations where the code scope is within a very controlled environment, with one or more teams which follow strictly a single development guideline, and have the power to refactor the affected code base somewhat easily when the original decisions are too limiting.&lt;/p&gt;
&lt;p&gt;Having worked on a few major projects now, and some of them being libraries which are used by several teams within the same company or outside, I now perceive that people very often take shortcuts over these decisions for getting their job done quickly.  It&amp;#8217;s way easier to simply read the code and get to the private guts of a library than to try to get agreement over the right way to do something, or sending a patch with a suggested change which was carefully architected.&lt;/p&gt;
&lt;p&gt;Many people by now are probably thinking: &amp;#8220;Well, that&amp;#8217;s &lt;i&gt;their&lt;/i&gt; problem, isn&amp;#8217;t it?  If their code base breaks on the next upgrade they&amp;#8217;ll get burden and won&amp;#8217;t be able to upgrade cleanly.&amp;#8221;, and I can honestly understand this feeling, since I shared it.  But, for a number of reasons, I now understand that this isn&amp;#8217;t just &lt;i&gt;their&lt;/i&gt; problem, it&amp;#8217;s very much &lt;i&gt;my&lt;/i&gt; problem too.&lt;/p&gt;
&lt;p&gt;Most importantly, on any serious software, these problems will usually come back to the implementors, and many times the problem will have a much larger magnitude by then than they had at the time a change could have been done &amp;#8220;the right way&amp;#8221; on the implementation, because code dependent on the private bits will have settled.&lt;/p&gt;
&lt;p&gt;Most people are optimist by nature and believe that the implementation won&amp;#8217;t change, but, of course, one of the reasons why private information is made private in the first place is exactly because the implementor believes that having the freedom to change these details in the future is important, and not rarely there&amp;#8217;s already a plan of evolution in place for these private pieces, which may include revamping the implementation entirely for scalability or for other goals.&lt;/p&gt;
&lt;p&gt;In the best case, the careless people will get burden on the upgrade and will ask for support or simply won&amp;#8217;t upgrade silently, and both cases hurt implementors, because providing support for broken software takes time and energy, and amazingly can even hurt the software image. Lack of upgrades also means more ancient versions in the wild to give support for.  Besides these, in the worst case scenario, the careless people have enough influence on the affected project to cause as much burden on it as if the private data was public in the first place.&lt;/p&gt;
&lt;p&gt;As much as I&amp;#8217;m a believer in handling situation by agreement rather than enforcement, I&amp;#8217;m also a believer that when the rules don&amp;#8217;t work for people, the rules should be changed, not the people.  So my positioning now is that the language supported access constraints (public, protected, private), as available in languages like Java and C++, are a better alternative when compared to convention as used today in Python, since they provide an additional layer of encouragement for people to not break the rules carelessly, and that helps in the maintenance and reuse of software that has greater visibility.&lt;/p&gt;</content>
		<author>
			<name>Gustavo Niemeyer</name>
			<uri>http://blog.labix.org</uri>
		</author>
		<source>
			<title type="html">Labix Blog</title>
			<subtitle type="html">by Gustavo Niemeyer</subtitle>
			<link rel="self" href="http://blog.labix.org/feed/"/>
			<id>http://blog.labix.org/feed/</id>
			<updated>2009-07-02T17:44:29+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Um &#171;Ol&#225; Mundo!&#187; pequenininho</title>
		<link href="http://kodumaro.blogspot.com/2009/05/um-ola-mundo-pequenininho.html"/>
		<id>tag:blogger.com,1999:blog-1387996720436450649.post-1057086620735538448</id>
		<updated>2009-05-14T22:03:00+00:00</updated>
		<content type="html">&lt;img src=&quot;http://photos1.blogger.com/blogger/6505/3295/200/tcl.jpg&quot; alt=&quot;tcl.jpg&quot; /&gt; Como este &lt;em&gt;blog&lt;/em&gt; estava muito parado, resolvi postar um &#171;Ol&#225; Mundo!&#187; com janela de duas linhas em &lt;a href=&quot;http://wiki.tcl.tk/&quot;&gt;Tcl/Tk&lt;/a&gt;:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;wm title . Hello&lt;br /&gt;grid [ button .bt -text { Ol&#225; Mundo! } -command exit ]&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Se preferir, pode ser criado um &lt;em&gt;script&lt;/em&gt; autoexecut&#225;vel acrescentando o &lt;em&gt;hash-bang&lt;/em&gt;:&lt;br /&gt;&lt;pre&gt;&lt;code class=&quot;prettyprint&quot;&gt;#!/bin/sh&lt;br /&gt;#&amp;#92;&lt;br /&gt;exec wish &quot;$0&quot; &quot;$@&quot;&lt;br /&gt;&lt;br /&gt;wm title . Hello&lt;br /&gt;grid [ button .bt -text { Ol&#225; Mundo! } -command exit ]&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;[]'s&lt;br /&gt;Cacilhas, La Batalema&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/1387996720436450649-1057086620735538448?l=kodumaro.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>La Batalema</name>
			<email>noreply@blogger.com</email>
			<uri>http://kodumaro.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Kodumaro</title>
			<subtitle type="html">As sombras da programa&#231;&#227;o</subtitle>
			<link rel="self" href="http://kodumaro.blogspot.com/feeds/posts/default?alt=rss"/>
			<id>tag:blogger.com,1999:blog-1387996720436450649</id>
			<updated>2009-07-02T15:44:35+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Como instalar o Ruby on Rails no Ubuntu 8.10</title>
		<link href="http://www.adgsolucoes.com.br/2009/05/11/como-instalar-o-ruby-on-rails-no-ubuntu-810/"/>
		<id>http://www.adgsolucoes.com.br/?p=299</id>
		<updated>2009-05-11T15:46:43+00:00</updated>
		<content type="html">&lt;p&gt;Estive pesquisando esses dias sobre o Rails (&lt;a href=&quot;http://www.rubyonrails.org&quot;&gt;www.rubyonrails.org&lt;/a&gt;) e n&#227;o existe um jeito muito f&#225;cil de instalar a vers&#227;o mais nova do Rails (2.3), no Ubuntu 8.10, sem meter a m&#227;o na massa um pouco. Depois de v&#225;rios testes percebi um caminho menos traum&#225;tico.&lt;/p&gt;
&lt;p&gt;Um &amp;#8220;erro&amp;#8221; comum &#233; o &amp;#8220;Invalid Rdoc Format&amp;#8221;, devido a defasagem do Rdoc em rela&#231;&#227;o ao Rake, e quando se tenta instalar o Rake este dispara o &amp;#8220;Warning&amp;#8221; mencionado.&lt;/p&gt;
&lt;p&gt;Eis o &amp;#8220;quicktour&amp;#8221; que utilizei:&lt;/p&gt;
&lt;p&gt;Instalar o pacote inicial do ruby&lt;/p&gt;
&lt;pre&gt;$ sudo aptitude install ruby ruby-dev libruby libreadline-ruby libopenssl-ruby irb ri rdoc&lt;/pre&gt;
&lt;p&gt;Instalar o suporte a sqlite3, padr&#227;o para o Rails 2.3&lt;/p&gt;
&lt;pre&gt;$ sudo aptitude install libsqlite3-ruby&lt;/pre&gt;
&lt;p&gt;Instalar o rubygems a partir do fonte&lt;/p&gt;
&lt;pre&gt;$ wget http://rubyforge.org/frs/download.php/56227/rubygems-1.3.3.tgz
$ tar -zxvf rubygems-1.3.3.tgz
$ cd rubygems-1.3.3
$ sudo ruby setup.rb
$ cd /usr/local/bin
$ sudo ln -s /usr/bin/gem1.8 gem&lt;/pre&gt;
&lt;p&gt;Atualizar o rdoc para n&#227;o dar o erro mencionado acima&lt;/p&gt;
&lt;pre&gt;$ sudo gem install rdoc&lt;/pre&gt;
&lt;p&gt;Instalar o Rails&lt;/p&gt;
&lt;pre&gt;$ sudo gem install rails&lt;/pre&gt;
&lt;p&gt;Para iniciar rapidamente um projeto Rails e testar se est&#225; tudo funcionando fa&#231;a&lt;/p&gt;
&lt;pre&gt;$ cd ~
$ rails projeto
$ cd projeto
$ ruby script/server&lt;/pre&gt;
&lt;p&gt;Agora acesse no seu browser &lt;a href=&quot;http://localhost:3000&quot;&gt;http://localhost:3000&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>Allan Garcia</name>
			<uri>http://www.adgsolucoes.com.br</uri>
		</author>
		<source>
			<title type="html">ADG Solu&#231;&#245;es</title>
			<subtitle type="html">Solu&#231;&#245;es r&#225;pidas e eficazes para os problemas do seu dia-a-dia com TI</subtitle>
			<link rel="self" href="http://www.jornaldojerimum.com.br/feed/"/>
			<id>http://www.jornaldojerimum.com.br/feed/</id>
			<updated>2009-05-11T17:40:59+00:00</updated>
		</source>
	</entry>

	<entry xml:lang="en">
		<title type="html">Marmota: making arduino and mobile devices talk</title>
		<link href="http://www.flavioribeiro.com/v2.0/2009/05/10/marmota-making-arduino-and-mobile-devices-talk/"/>
		<id>http://www.flavioribeiro.com/v2.0/?p=198</id>
		<updated>2009-05-10T19:15:52+00:00</updated>
		<content type="html">&lt;p&gt;Ol&#225; pessoas,&lt;/p&gt;
&lt;p&gt;Tirando a poeira aqui do blog pra anunciar meu novo toy project cujo anuncio deveria ser feito s&#243; quando eu tivesse algum resultado concreto, mas com o animo na evolu&#231;&#227;o de hoje resolvi publicar logo.&lt;/p&gt;
&lt;p&gt;Tenho atualizado &lt;a href=&quot;http://www.twitter.com/flavioribeiro&quot;&gt;o meu twitter&lt;/a&gt; bem mais vezes que esse blog pela facilidade que &#233; twittar (principalmente quando voc&#234; tem um &lt;a href=&quot;https://addons.mozilla.org/pt-BR/firefox/addon/5081&quot;&gt;plugin pra seu browser&lt;/a&gt; como eu). L&#225; fico sempre atualizando sobre o que estou fazendo, como as coisas no projeto est&#227;o indo, refer&#234;ncias a sites onde aprendi a usar o motor de passo, transistores, etc.&lt;/p&gt;
&lt;div align=&quot;center&quot;&gt;&lt;img class=&quot;aligncenter&quot; src=&quot;http://www.flavioribeiro.com/marmota/logo.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;105&quot; align=&quot;center&quot; /&gt;&lt;/div&gt;
&lt;p&gt;Como voc&#234; leu no fim do par&#225;grafo anterior, o meu novo projeto &#233; relacionado a rob&#243;tica e microeletr&#244;nica. A id&#233;ia principal &#233; fazer o &lt;a href=&quot;http://www.flavioribeiro.com/v2.0/2009/01/12/arduino-agora-tenho-um/&quot;&gt;meu arduino&lt;/a&gt; se comunicar com dispositivos m&#243;veis como celulares symbian e internet tablets atrav&#233;s de qualquer protocolo, seja ele &amp;#8220;wired&amp;#8221; ou n&#227;o.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;alignleft&quot; src=&quot;http://www.robotshop.ca/Images/big/en/sfe-bluesmirf-silver-bluetooth-modem.jpg&quot; alt=&quot;&quot; width=&quot;138&quot; height=&quot;138&quot; align=&quot;left&quot; /&gt;Pra comecar a brincadeira comprei um m&#243;dulo bluetooth chamado &lt;a href=&quot;http://www.sparkfun.com/commerce/product_info.php?products_id=582&quot;&gt;BlueSMIRF Gold&lt;/a&gt; que implementa toda a stack bluetooth e para integrar ao seu arduino basta voc&#234; ligar o TX do BlueSMIRF no RX do arduino, e o RX no TX do mesmo. Ligando tamb&#233;m o pino Vcc do m&#243;dulo em uma tens&#227;o de 5v (que pode ser o pino 5v do arduino) e o GND no terra, voc&#234; j&#225; pode parear o bluesmirf com seu computador e abstrair a conex&#227;o bluetooth como sendo uma porta serial, simples assim. Pretendo fazer um outro post ou um artigo no &lt;a href=&quot;http://www.flavioribeiro.com/marmota&quot;&gt;site do marmota&lt;/a&gt; detalhando a liga&#231;&#227;o desse m&#243;dulo assim que aprender mais sobre ele.&lt;/p&gt;
&lt;p&gt;Sim, e antes que eu me esqueca, eu terminei pagando muito caro por esse BlueSmirf. Fora os 60 d&#243;lares do m&#243;dulo, paguei 30 d&#243;lares pela entrega e ainda tive o azar do m&#243;dulo ter parado na Receita. L&#225; se foram mais 120 reais de imposto, e no fim eu n&#227;o quis nem somar as despesas e saber quanto o bichinho saiu pra mim.&lt;/p&gt;
&lt;p&gt;Comprei tamb&#233;m um &lt;a href=&quot;http://www.arduinors.net/blog/protoshieldbr/&quot;&gt;ProtoShieldBR&lt;/a&gt; do ga&#250;cho Rafael Quines que fez um excelente trabalho no desenvolvimento desse shield. A id&#233;ia b&#225;sica do ProtoShieldBR &#233; ser uma plaquinha de prop&#243;sitos gerais, cheias de barramento onde voc&#234; vai posicionando os seus componentes da maneira que achar melhor - estilo protoboard - s&#243; que em cima do seu arduino. Se n&#227;o fosse o meu ferro de solda de 5 reais as soldas teriam ficado bem bonitinhas e o resultado final teria sido mais bacana.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;alignleft&quot; src=&quot;http://www.flavioribeiro.com/marmota/marmota2.jpg&quot; alt=&quot;&quot; width=&quot;178&quot; height=&quot;134&quot; align=&quot;left&quot; /&gt;Voltando pra os objetivos do toy project; O pontap&#233; inicial do &lt;a href=&quot;http://www.flavioribeiro.com/marmota&quot;&gt;Marmota&lt;/a&gt; &#233; fazer um carrinho de controle remoto controlado por um celular s60 atrav&#233;s do bluetooth usando python. A parte &amp;#8220;f&#237;sica&amp;#8221; do carro j&#225; t&#225; pronta e hoje consegui comand&#225;-lo via bluetooth usando &lt;a href=&quot;http://pyserial.wiki.sourceforge.net/pySerial&quot;&gt;pySerial&lt;/a&gt; no meu notebook. J&#225; fiz tamb&#233;m a interface da aplica&#231;&#227;o PyS60, faltando s&#243; criar a classe de socket bluetooth do celular. Falta tamb&#233;m dar uma regulada no motor de passo respons&#225;vel pelo direcionamento do carro, mais algumas colas e soldas, e rodas emborrachadas pra ter uma tra&#231;&#227;o maior com o ch&#227;o.&lt;/p&gt;
&lt;p&gt;Tenho j&#225; algumas id&#233;ias de intera&#231;&#227;o do arduino com internet tablets, andei pesquisando sobre &lt;a href=&quot;http://www.glacialwanderer.com/hobbyrobotics/?p=15&quot;&gt;shields ethernet&lt;/a&gt; e at&#233; vi que j&#225; fizeram um &lt;a href=&quot;http://arduino.cc/en/Tutorial/WebServer&quot;&gt;webserver simples&lt;/a&gt; pra ele. J&#225; pensou voc&#234; controlando luzes, alarmes, cameras de vigil&#226;ncia e etc tudo no seu browser aonde voc&#234; estiver e o arduino do outro lado dando conta de tudo? Show de bola.&lt;/p&gt;
&lt;p&gt;Pra finalizar, quem quiser debater, ajudar, dar mais id&#233;ias e etc, d&#234; uma lida no &lt;a href=&quot;http://www.flavioribeiro.com/marmota&quot;&gt;site do Marmota&lt;/a&gt;. Prometo atualizar ele com fotos, videos e c&#243;digos tanto do lado arduino como a aplica&#231;&#227;o pys60 do lado mobile quando esse primeiro projeto for finalizado. Quem quiser acompanhar mais de perto os passos pra finaliza&#231;&#227;o desse projeto, &lt;a href=&quot;http://www.twitter.com/flavioribeiro&quot;&gt;siga-me no twitter&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&#201; isso, at&#233; a pr&#243;xima pessoal &lt;img src=&quot;http://www.flavioribeiro.com/v2.0/wp-includes/images/smilies/icon_smile.gif&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; /&gt;&lt;/p&gt;</content>
		<author>
			<name>Flavio Ribeiro</name>
			<uri>http://www.flavioribeiro.com/v2.0</uri>
		</author>
		<source>
			<title type="html">Fl&#225;vio Ribeiro &#187; Python</title>
			<subtitle type="html">site pessoal</subtitle>
			<link rel="self" href="http://www.flavioribeiro.com/v2.0/category/python/feed"/>
			<id>http://www.flavioribeiro.com/v2.0/category/python/feed</id>
			<updated>2009-07-04T01:44:26+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Entrevista na R&#225;dio Globo: Seguran&#231;a na Internet</title>
		<link href="http://marrcandre.blogspot.com/2009/04/entrevista-na-radio-globo-seguranca-na.html"/>
		<id>tag:blogger.com,1999:blog-4593771306625888277.post-3995675697452758723</id>
		<updated>2009-05-08T21:42:11+00:00</updated>
		<content type="html">&lt;div&gt;Participei do programa do Jota Martins na &lt;a href=&quot;http://www.radioglobojoinville.com.br/&quot;&gt;R&#225;dio Globo&lt;/a&gt; hoje, dia 04 de abril de 2009. O tema era Seguran&#231;a na Internet. Falamos sobre v&#237;rus, cavalos de tr&#243;ia, formas de se proteger, configura&#231;&#227;o ideal do computador e assuntos relacionados. Acredito que a entrevista possa servir para voc&#234; ou ser compartilhada com outras pessoas, que tenham d&#250;vidas sobre este assunto.&lt;br /&gt;&lt;br /&gt;A entrevista foi feita pelo telefone, ent&#227;o a minha voz est&#225; um pouco mais baixa que a dele, mas d&#225; pra entender bem. Ela durou 14 minutos, e o arquivo tem aproximadamente 13 MB.&lt;br /&gt;&lt;br /&gt;Coloquei a entrevista no &lt;a href=&quot;http://www.archive.org/details/EntrevistaRadioGlobo&quot;&gt;Internet Archive&lt;/a&gt;. D&#225; pra ouvir online ou baixar pra ouvir no computador, no carro ou no mp3 player.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4593771306625888277-3995675697452758723?l=marrcandre.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marco Andr&#233; Lopes Mendes</name>
			<email>noreply@blogger.com</email>
			<uri>http://marrcandre.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">marrcandr&#233;</title>
			<link rel="self" href="http://marrcandre.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4593771306625888277</id>
			<updated>2009-06-30T02:44:26+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">V&#237;deos do Bossa Conference est&#227;o dispon&#237;veis</title>
		<link href="http://marrcandre.blogspot.com/2009/05/videos-do-bossa-conference-estao.html"/>
		<id>tag:blogger.com,1999:blog-4593771306625888277.post-1772037164002965818</id>
		<updated>2009-05-08T21:41:40+00:00</updated>
		<content type="html">Os v&#237;deos do Bossa Conference 2009 est&#227;o dispon&#237;veis para assitir online:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;N&#227;o tenho certeza se todos os v&#237;deos j&#225; est&#227;o dispon&#237;veis, mas j&#225; tem muita coisa.&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4593771306625888277-1772037164002965818?l=marrcandre.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marco Andr&#233; Lopes Mendes</name>
			<email>noreply@blogger.com</email>
			<uri>http://marrcandre.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">marrcandr&#233;</title>
			<link rel="self" href="http://marrcandre.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4593771306625888277</id>
			<updated>2009-06-30T02:44:26+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Em que linguagem Charlie est&#225; programando?</title>
		<link href="http://marrcandre.blogspot.com/2009/05/em-que-linguagem-charlie-esta.html"/>
		<id>tag:blogger.com,1999:blog-4593771306625888277.post-8547519431982571734</id>
		<updated>2009-05-08T21:41:10+00:00</updated>
		<content type="html">&lt;div&gt;No epis&#243;dio 20 da quinta temporada de &lt;a href=&quot;http://www.cbs.com/primetime/numb3rs/&quot;&gt;Numb3rs&lt;/a&gt; (&lt;a href=&quot;http://en.wikipedia.org/wiki/List_of_Numb3rs_episodes_%28season_5%29&quot;&gt;E05S20&lt;/a&gt;), Charlie est&#225; tentando resolver um problema utilizando uma implementa&#231;&#227;o do &lt;a href=&quot;http://pt.wikipedia.org/wiki/Algoritmo_de_Dijkstra&quot;&gt;algoritmo de Dijkstra&lt;/a&gt;. Fiquei intrigado e fui olhar de perto o c&#243;digo, que &#233; o que segue:&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href=&quot;http://3.bp.blogspot.com/_3P5Jy-KMtkU/SgUHE8a05YI/AAAAAAAAKdc/JRwwRX-ky5g/s1600-h/numb3rs-programa.png&quot;&gt;&lt;img src=&quot;http://3.bp.blogspot.com/_3P5Jy-KMtkU/SgUHE8a05YI/AAAAAAAAKdc/JRwwRX-ky5g/s400/numb3rs-programa.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5333677115209737602&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;span&gt;Clique na imagem para ampliar&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Que linguagem &#233; esta, utilizada por ele para implementar o algoritmo? Ser&#225; que &#233; uma linguagem real ou inventaram para este epis&#243;dio? Se voc&#234; sabe ou tem uma id&#233;ia, poste um coment&#225;rio.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;img width=&quot;1&quot; height=&quot;1&quot; src=&quot;https://blogger.googleusercontent.com/tracker/4593771306625888277-8547519431982571734?l=marrcandre.blogspot.com&quot; /&gt;&lt;/div&gt;</content>
		<author>
			<name>Marco Andr&#233; Lopes Mendes</name>
			<email>noreply@blogger.com</email>
			<uri>http://marrcandre.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">marrcandr&#233;</title>
			<link rel="self" href="http://marrcandre.blogspot.com/feeds/posts/default"/>
			<id>tag:blogger.com,1999:blog-4593771306625888277</id>
			<updated>2009-06-30T02:44:26+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">&quot;Code Completion&quot; em Python</title>
		<link href="http://www.liberiun.com/blog/2009/5/5/code-completion-em-python"/>
		<id>tag:www.liberiun.com,2009-05-05:,blog/entry;2009/5/5/code-completion-em-python</id>
		<updated>2009-05-06T12:18:06+00:00</updated>
		<content type="html">Ol&#225; Pessoal!&lt;br /&gt;
&lt;br /&gt;
Primeiro quero me apresentar: Sou Thomaz, novato aqui na Liberiun e pretendo utilizar esse espa&#231;o para compartilhar umas dicas interessantes com todos.&lt;br /&gt;
&lt;br /&gt;
Essa dica, apesar de muitos j&#225; conhecerem, ainda existem as pessoas que sofrem sem utilizar o querido &quot;code completion&quot; no interpretador Python.&lt;br /&gt;
&lt;br /&gt;
A coisa &#233; bem simples, basta abrir uma sess&#227;o python e digitar:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; import readline
&amp;gt;&amp;gt;&amp;gt; readline.parse_and_bind(&quot;tab: complete&quot;)
&amp;gt;&amp;gt;&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
Pronto! agora pressione a tecla tab e veja a m&#225;gica ;)&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&amp;gt;&amp;gt;&amp;gt;
Display all 161 possibilities? (y or n)
&lt;/pre&gt;
&lt;br /&gt;
Muita gente gosta de deixar isso no bashrc para ficar sempre salvo, eu prefiro criar um script com o seguinte conte&#250;do:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;PYTHONSTARTUP=&amp;lt;(echo 'import readline, rlcompleter; readline.parse_and_bind(&quot;tab: complete&quot;)') python&lt;/pre&gt;
&lt;br /&gt;
salvar esse script em /usr/bin/py e dar permiss&#227;o de execu&#231;&#227;o para ele (chmod +x /usr/bin/py)&lt;br /&gt;
ai toda vez que precisar do shell interativo basta chamar &quot;py&quot; no terminal e pronto ;)&lt;br /&gt;
&lt;br /&gt;
Agora vai ficar muito mais f&#225;cil utilizar aquela biblioteca obscura com aqueles m&#233;todos complexos sem precisar decorar um monte de nomes estranhos ;)&lt;br /&gt;
&lt;br /&gt;

E de brinde vai outra dica: lembre-se sempre de usar o comando &quot;help(m&#233;todo.obscuro)&quot;! Isso ajuda e muito :)&lt;br /&gt;</content>
		<author>
			<name>Thomaz Reis</name>
			<uri>http://www.liberiun.com/blog/</uri>
		</author>
		<source>
			<title type="html">Blog da Liberiun</title>
			<subtitle type="html">Blog dos colaboradores da Liberiun</subtitle>
			<link rel="self" href="http://www.liberiun.com/blog/feed.atom"/>
			<id>http://www.liberiun.com/blog/feed.atom</id>
			<updated>2009-07-04T20:44:23+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Zine + Plone + wsgi = www.liberiun.com</title>
		<link href="http://www.liberiun.com/blog/2009/5/4/zine-+-plone-+-wsgi-www-liberiun-com"/>
		<id>tag:www.liberiun.com,2009-05-04:,blog/entry;2009/5/4/zine-%2B-plone-%2B-wsgi-www-liberiun-com</id>
		<updated>2009-05-05T03:32:32+00:00</updated>
		<content type="html">&lt;p&gt;&lt;span&gt;Um dos maiores desafios da cria&#231;&#227;o de Portais Corporativos &#233; a integra&#231;&#227;o de servi&#231;os. Na era pr&#233; wsgi e deliverance, tinhamos que escrever muitos &quot;corretivos&quot; para integrar uma aplica&#231;&#227;o e com a dupla wsgi/deliverance isso tudo mudou. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;A Liberiun que vem usando essa dobradinha a um bom tempo e seus frutos s&#227;o ineg&#225;veis!  &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;O antigo blog da Liberiun era feito utilizando uma solu&#231;&#227;o caseira, e atendia a nossa demanda parcialmente, de forma que estudamos muito a sua mudan&#231;a. Estudos aqui, estudos ali, e escolhemos o Zine para ser nossa aplica&#231;&#227;o de blog do portal. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;A escolha do Zine foi em fun&#231;&#227;o de ele ser uma aplica&#231;&#227;o Python, ser padr&#227;o WSGI e ter um skin muito tranquilo para trabalhar com o Deliverance. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Em resumo: N&#243;s estamos utilizando Zine para blogs e novas integra&#231;&#245;es ser&#227;o feitas! &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;At&#233; mais, &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;F&#225;bio Rizzo &lt;/span&gt;&lt;br /&gt;&lt;span&gt;Vice-Presidente Executivo &lt;/span&gt;&lt;br /&gt;&lt;a href=&quot;mailto:fabiorizzo@liberiun.com&quot; class=&quot;external&quot;&gt;fabiorizzo@liberiun.com&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>Fabio Rizzo</name>
			<uri>http://www.liberiun.com/blog/</uri>
		</author>
		<source>
			<title type="html">Blog da Liberiun</title>
			<subtitle type="html">Blog dos colaboradores da Liberiun</subtitle>
			<link rel="self" href="http://www.liberiun.com/blog/feed.atom"/>
			<id>http://www.liberiun.com/blog/feed.atom</id>
			<updated>2009-07-04T20:44:23+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Desenvolvendo sem reload no Zope</title>
		<link href="http://www.liberiun.com/blog/2009/5/4/desenvolvendo-sem-reload-no-zope"/>
		<id>tag:www.liberiun.com,2009-05-04:,blog/entry;2009/5/4/desenvolvendo-sem-reload-no-zope</id>
		<updated>2009-05-04T11:51:08+00:00</updated>
		<content type="html">Ol&#225;,

conhe&#231;o muita gente que n&#227;o &#233; adepta a id&#233;ia de ter que reiniciar o Zope a cada altera&#231;&#227;o em uma classe Python. Bom a id&#233;ia tamb&#233;m n&#227;o me agrada, e inclusive existem muitos desenvolvedores que perdem produtividade com isso, por nem sempre ter uma boa m&#225;quina e as vezes esperam 1 minuto para que o Zope restarte.

Mas n&#227;o &#233; mais preciso fazer isto, foi criado um produto que muda este cen&#225;rio, o plone.reload.

Baixe em: http://pypi.python.org/pypi/plone.reload

Com ele instalado voc&#234; pode acessar um painel bem resumido (http://localhost:8080/@@reload), e atrav&#233;s dele simular o restart, fazendo o reload do seu c&#243;digo sem o restart do Zope.

&#201; isso, como diriam os cearenses: &quot;Olha as coisas melhorando pra n&#243;s!&quot; =)

Um abra&#231;o.</content>
		<author>
			<name>Rodrigo Castardo</name>
			<uri>http://www.liberiun.com/blog/</uri>
		</author>
		<source>
			<title type="html">Blog da Liberiun</title>
			<subtitle type="html">Blog dos colaboradores da Liberiun</subtitle>
			<link rel="self" href="http://www.liberiun.com/blog/feed.atom"/>
			<id>http://www.liberiun.com/blog/feed.atom</id>
			<updated>2009-07-04T20:44:23+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">DCWorkflowGraph</title>
		<link href="http://www.liberiun.com/blog/2009/5/4/dcworkflowgraph"/>
		<id>tag:www.liberiun.com,2009-05-04:,blog/entry;2009/5/4/dcworkflowgraph</id>
		<updated>2009-05-04T11:43:17+00:00</updated>
		<content type="html">&lt;p&gt;Ol&#225;,&lt;/p&gt;
&lt;p&gt;falar sobre workflow (BPM) pode fazer sentido para muita gente, mas nem para todos. Nada como ver uma ilustra&#231;&#227;o n&#227;o.&lt;/p&gt;
&lt;p&gt;Uma vez fui desenhar um workflow e uma pessoa me perguntou brincando: &quot;Voc&#234; acha que eu n&#227;o consigo entender sem voc&#234; desenhar?&quot;. A resposta foi: &quot;N&#227;o, sou eu quem n&#227;o consigo explicar sem desenhar&quot;.&lt;/p&gt;
&lt;p&gt;Ent&#227;o se voc&#234;, como eu, concorda com isso, voc&#234; vai gostar do DCWorkflowGraph. Ele &#233; apenas um produto que faz um desenho de qualquer workflow que exista no seu Plone Site.&lt;/p&gt;
&lt;p&gt;Baixe em:&#160;&lt;a href=&quot;http://plone.org/products/dcworkflowgraph&quot; class=&quot;external-link&quot;&gt;http://plone.org/products/dcworkflowgraph&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ele possui apenas uma depend&#234;ncia, o &lt;span class=&quot;Apple-style-span&quot;&gt;&lt;a href=&quot;http://www.graphviz.org/&quot;&gt;Graphviz&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Mas a instala&#231;&#227;o &#233; simples e est&#225; no README do Graphviz.&lt;/p&gt;
&lt;p&gt;Assim que voc&#234; instalar vai ver uma nova aba quando visualizar um workflow, &#233; onde vai estar a ilustra&#231;&#227;o.&lt;/p&gt;
&lt;p&gt;Um abra&#231;o.&lt;/p&gt;</content>
		<author>
			<name>Rodrigo Castardo</name>
			<uri>http://www.liberiun.com/blog/</uri>
		</author>
		<source>
			<title type="html">Blog da Liberiun</title>
			<subtitle type="html">Blog dos colaboradores da Liberiun</subtitle>
			<link rel="self" href="http://www.liberiun.com/blog/feed.atom"/>
			<id>http://www.liberiun.com/blog/feed.atom</id>
			<updated>2009-07-04T20:44:23+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Reposit&#243;rio OpenSource</title>
		<link href="http://www.liberiun.com/blog/2009/5/4/repositorio-opensource"/>
		<id>tag:www.liberiun.com,2009-05-04:,blog/entry;2009/5/4/repositorio-opensource</id>
		<updated>2009-05-04T11:41:43+00:00</updated>
		<content type="html">&lt;p&gt;&lt;span&gt;Ol&#225; pessoal, &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&#233; um prazer falar sobre o nosso reposit&#243;rio! Temos criado v&#225;rias solu&#231;&#245;es e disponibilizado no seguinte endere&#231;o: &lt;/span&gt;&lt;a href=&quot;http://code.liberiun.com&quot; class=&quot;external&quot;&gt;code.liberiun.com&lt;/a&gt;&lt;span&gt;:7777/. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Entre as solu&#231;&#245;es que temos desenvolvido est&#227;o: &lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;Liberiun Portal Varnish Cache Manager - uma solu&#231;&#227;o de intelig&#234;ncia entre cache e aplica&#231;&#227;o &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Liberiun Portal Banner - solu&#231;&#227;o de Banners utilizada em nossos projetos &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Lineriun Portal Intranet - framework utilizado na cria&#231;&#227;o de Intranets &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Liberiun Portal Licita - uma solu&#231;&#227;o para portais de utilizam divulga&#231;&#227;o de licita&#231;&#245;es &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Liberiun Portal News - Mailing e Not&#237;cias, uma solu&#231;&#227;o para mehorar as suas not&#237;cias e envi&#225;-las ao p&#250;blico do seu portal &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Liberiun Portal Streaming - solu&#231;&#227;o de streaming para portais &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Liberiun Portal Utils - framework com os m&#233;todos utilizados no cotidiano do desenvolvimento de portais &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span&gt;A pol&#237;tica de desenvolvimento de software &#233; norteada pela diretiva de desenvolvimento de solu&#231;&#245;es livres e de c&#243;digo aberto. Mas como isso funciona na pr&#225;tica? &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;N&#243;s desenvolvemos uma solu&#231;&#227;o, que surge de uma necessidade interna ou externa, e disponibilizamos a solu&#231;&#227;o e seu c&#243;digo fonte, sem a cobran&#231;a de licen&#231;as. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Os softwares s&#227;o utilizados em clientes, ou projetos Plone que n&#227;o tenhamos atuado diretamente. E este uso gera melhorias, uma evolu&#231;&#227;o natural do software, e com frequ&#234;ncia somos procurados para implementar melhorias nos softwares. Ent&#227;o se um cliente X paga por esta melhoria, o cliente Y que utiliza a mesma solu&#231;&#227;o tamb&#233;m tem esta nova funcionalidade, por&#233;m sem custos. E voc&#234; que pode n&#227;o necessariamente &#233; cliente da Liberiun, tamb&#233;m ganha a nova funcionalidade sem custos. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Este ciclo t&#234;m gerado evolu&#231;&#245;es em v&#225;rias de nossas solu&#231;&#245;es. Entre elas as que temos desenvolvido para grande cases. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Tudo est&#225; sendo disponibilizado neste reposit&#243;rio, e vou falar em detalhes sobre cada solu&#231;&#227;o nos pr&#243;ximos posts. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Um abra&#231;o.&lt;/span&gt;&lt;/p&gt;</content>
		<author>
			<name>Rodrigo Castardo</name>
			<uri>http://www.liberiun.com/blog/</uri>
		</author>
		<source>
			<title type="html">Blog da Liberiun</title>
			<subtitle type="html">Blog dos colaboradores da Liberiun</subtitle>
			<link rel="self" href="http://www.liberiun.com/blog/feed.atom"/>
			<id>http://www.liberiun.com/blog/feed.atom</id>
			<updated>2009-07-04T20:44:23+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">GloWorm - facilitando a vida do Plone WebDesigner</title>
		<link href="http://www.liberiun.com/blog/2009/5/4/gloworm-facilitando-a-vida-do-plone-webdesigner"/>
		<id>tag:www.liberiun.com,2009-05-04:,blog/entry;2009/5/4/gloworm-facilitando-a-vida-do-plone-webdesigner</id>
		<updated>2009-05-04T11:41:13+00:00</updated>
		<content type="html">&lt;p&gt;Ol&#225;,&lt;/p&gt;
&lt;p&gt;com a chegada do gera&#231;&#227;o Plone 3 um novo conceito apareceu, as famosas Viewlets. S&#227;o componentes Zope 3 (explico em um post focado neste assunto) utilizados para melhorar alguns aspectos da reenderiza&#231;&#227;o de um Portal Plone, como:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Performance, implementa&#231;&#245;es Zope 3 s&#227;o naturalmente mais leves, r&#225;pidas (use!);&lt;/li&gt;&lt;li&gt;Migra&#231;&#227;o, atrav&#233;s das Viewlets voc&#234; n&#227;o precisa mais customizar o template principal do Plone (main_template.pt);&lt;/li&gt;&lt;li&gt;Gerenciamento via interface, voc&#234; pode atrav&#233;s de um simples clique esconder alguma parte do layout original.&lt;/li&gt;&lt;/ul&gt;
&lt;div&gt;Apesar dos ganhos acima, entre outros benef&#237;cios do surgimento das Viewlets, as pessoas que n&#227;o tinham conhecimento em Zope 3 (se &#233; seu caso, voc&#234; est&#225; atrasado, mais antes tarde do que mais tarde) n&#227;o se sentiram &#224; vontade em lidar com este novo conceito, e sua implementa&#231;&#227;o.&lt;/div&gt;
&lt;div&gt;&#160;&lt;/div&gt;
&lt;div&gt;A fim de facilitar a vida das pessoas que lidam com implementa&#231;&#245;es de layout dentro do Plone, foi lan&#231;ado o GloWorm. Um produto muito interessante que vai aumentar explonencialmente sua produtividade ao implementar um layout no Plone.&lt;/div&gt;
&lt;div&gt;&#160;&lt;/div&gt;
&lt;div&gt;Como ele funciona? Ele &#233; o Firebug (www.getfirebug.com) para Plone!&lt;/div&gt;
&lt;div&gt;&#160;&lt;/div&gt;
&lt;div&gt;Isso mesmo, voc&#234; habilita o GloWorm e sai clicando na p&#225;gina e inspecionando as Viewlets. Com isso:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;&lt;li&gt;Voc&#234; pode identificar de maneira r&#225;pida que &#233; a Viewlet que implementa aquela parte do layout (seu template e classe);&lt;/li&gt;&lt;li&gt;Customizar a Viewlet;&lt;/li&gt;&lt;li&gt;Desfazer a customiza&#231;&#227;o;&lt;/li&gt;&lt;li&gt;Reordenar a Viewlet, colocar ela acima ou abaixo de onde ela est&#225;;&lt;/li&gt;&lt;li&gt;Reagrupar Viewlets, ao lidar com Viewlets voc&#234; se depara com o Viewlet Manager, que &#233; quem agrupa as Viewlets, e com o gloWorm voc&#234; pode colocar o cabe&#231;alho no rodap&#233;.&lt;/li&gt;&lt;/ul&gt;
&lt;div&gt;Bom, agora voc&#234; j&#225; deve estar curioso, ent&#227;o faz um test drive okay?&lt;/div&gt;
&lt;div&gt;&#160;&lt;/div&gt;
&lt;div&gt;Baixe o GloWorm em: &lt;a href=&quot;http://plone.org/products/gloworm&quot; class=&quot;external-link&quot;&gt;http://plone.org/products/gloworm&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&#160;&lt;/div&gt;
&lt;div&gt;Boa divers&#227;o!&lt;/div&gt;
&lt;div&gt;&#160;&lt;/div&gt;
&lt;div&gt;Um abra&#231;o.&lt;/div&gt;
&lt;/div&gt;</content>
		<author>
			<name>Rodrigo Castardo</name>
			<uri>http://www.liberiun.com/blog/</uri>
		</author>
		<source>
			<title type="html">Blog da Liberiun</title>
			<subtitle type="html">Blog dos colaboradores da Liberiun</subtitle>
			<link rel="self" href="http://www.liberiun.com/blog/feed.atom"/>
			<id>http://www.liberiun.com/blog/feed.atom</id>
			<updated>2009-07-04T20:44:23+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Liberiun Portal News</title>
		<link href="http://www.liberiun.com/blog/2009/5/4/liberiun-portal-news"/>
		<id>tag:www.liberiun.com,2009-05-04:,blog/entry;2009/5/4/liberiun-portal-news</id>
		<updated>2009-05-04T11:39:05+00:00</updated>
		<content type="html">&lt;p&gt;Ol&#225;,&lt;/p&gt;
&lt;p&gt;uma das solu&#231;&#245;es que desenvolvemos &#233; o Liberiun Portal News, esta solu&#231;&#227;o surgiu de alguns projetos combinados com necessidades internas.&lt;/p&gt;
&lt;p&gt;Vamos a descri&#231;&#227;o das features da solu&#231;&#227;o:&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;strong&gt;Um novo tipo Imagem&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;Que &#233; configur&#225;vel, voc&#234; pode:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;desabilitar a imagem padr&#227;o do Plone (para n&#227;o confundir o usu&#225;rio final)&lt;/li&gt;&lt;li&gt;habilitar a p&#225;gina de direitos autorais (exibida quando a imagem full size &#233; exibida, voc&#234; concorda e s&#243; ent&#227;o pode ver a imagem)&lt;/li&gt;&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;div&gt;&lt;br /&gt;&lt;strong&gt;Um novo tipo Not&#237;cia&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;blockquote&gt;Que basicamente tem habilitada a funcionalidade descrita abaixo&#160;&lt;/blockquote&gt;
&lt;div&gt;&lt;br /&gt;&lt;strong&gt;Organiza&#231;&#227;o de Not&#237;cias&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;blockquote&gt;&#201; um mecanismo autom&#225;tico de organiza&#231;&#227;o das not&#237;cias, ele (caso acionado, n&#227;o &#233; padr&#227;o) verifica se existe esta estrutura:&lt;br /&gt;&lt;br /&gt;2009 (ou ano corrente) &amp;gt; mar&#231;o (ou m&#234;s corrente) &amp;gt; dia corrente &amp;gt; aqui &#233; criada a not&#237;cia&lt;br /&gt;&lt;br /&gt;Caso n&#227;o exista a estrutura, ele cria a estrutura e depois a not&#237;cia. Esta estrutura &#233; configur&#225;vel, voc&#234; cria como quiser.&lt;/blockquote&gt;
&lt;div&gt;&lt;br /&gt;&lt;strong&gt;Envio de Newsletter&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;blockquote&gt;Ele envia newsletter, e tem algumas configura&#231;&#245;es.&lt;/blockquote&gt;
&lt;div&gt;&#160;&lt;/div&gt;
&lt;blockquote&gt;&lt;em&gt;Cadastro&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Existe um cadastro para o envio, neste cadastro voc&#234; escolhe entre 2 tipos de cadastros, um simples (com nome e e-mail) e outro com mais campos(como sexo, idade, estado e cidade), isto para que seja poss&#237;vel efetuar envios segmentando o p&#250;blico alvo&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Envio&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Voc&#234; pode dizer quem s&#227;o:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Remetente&lt;/li&gt;&lt;li&gt;Assunto do e-mail&lt;/li&gt;&lt;li&gt;Imagem de cabe&#231;alho do e-mail&lt;/li&gt;&lt;li&gt;O texto do cabe&#231;alho do e-mail&lt;/li&gt;&lt;li&gt;O texto do rodap&#233; do e-mail&lt;/li&gt;&lt;li&gt;Filtros&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;Voc&#234; ainda pode filtrar:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;As not&#237;cias que ser&#227;o enviadas (por per&#237;odo)&lt;/li&gt;&lt;li&gt;O p&#250;blico alvo&lt;/li&gt;&lt;li&gt;Periodicidade&lt;/li&gt;&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;Voc&#234; pode dizer com qual periodicidade voc&#234; quer que o Portal envie a newsletter&lt;/blockquote&gt;
&lt;div&gt;&lt;br /&gt;&lt;strong&gt;Importa&#231;&#227;o de Not&#237;cias Externas&lt;br /&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;blockquote&gt;Esse mecanismo &#233; feito justamente para quem tem Not&#237;cias em outra plataforma/sistema e agora est&#225; usando Plone, por&#233;m quer manter seu hist&#243;rico de not&#237;cias no novo Portal. Ele utiliza um arquivo XML com os dados, facilmente gerado, e com estrutura flex&#237;vel.&lt;br /&gt;&lt;br /&gt;Nele voc&#234; pode apontar:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Se a not&#237;cia que ser&#225; importada vai ser importada como a not&#237;cia do liberiun.portal.news, ou se vai ser importada como a not&#237;cia padr&#227;o do Plone&lt;/li&gt;&lt;li&gt;Qual &#233; o arquivo XML&lt;/li&gt;&lt;li&gt;Se voc&#234; deseja que as tags HTML que possam existir devem ser removidas&lt;/li&gt;&lt;li&gt;Se deseja a cria&#231;&#227;o da estrutura de pastas&lt;/li&gt;&lt;li&gt;Qual &#233; a pasta do Portal que vai receber os objetos criados&lt;/li&gt;&lt;li&gt;Por &#250;ltimo, voc&#234; mesmo diz qual &#233; a estrutura do XML desejada&lt;/li&gt;&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;div&gt;&lt;br /&gt;&lt;strong&gt;Cases&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Alguns dos nossos clientes que est&#227;o usando:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Caixa Econ&#244;mica Federal&lt;/li&gt;&lt;li&gt;Comit&#234; Paraol&#237;mpico Brasileiro&lt;/li&gt;&lt;li&gt;Direitos da Crian&#231;a e do Adolescente&lt;/li&gt;&lt;li&gt;Hot Site Pequim (Paraolimp&#237;adas)&lt;/li&gt;&lt;li&gt;Conselho Federal de Administra&#231;&#227;o&lt;/li&gt;&lt;li&gt;Instituto do Patrim&#244;nio Hist&#243;rico e Art&#237;stico Nacional (IPHAN)&lt;/li&gt;&lt;/ul&gt;
&lt;div&gt;O produto encontra-se dispon&#237;vel no nosso reposit&#243;rio open source. Voc&#234; acess&#225;-lo em:&#160;&lt;a href=&quot;http://code.liberiun.com:7777/repositorios/opensource/plone3/eggs/liberiun.portal.news/&quot; class=&quot;external-link&quot;&gt;http://code.liberiun.com:7777/repositorios/opensource/plone3/eggs/liberiun.portal.news/&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&#160;&lt;/div&gt;
&lt;div&gt;Sugest&#245;es de melhorias s&#227;o bem vindas.&lt;/div&gt;
&lt;div&gt;&#160;&lt;/div&gt;
&lt;div&gt;Um abra&#231;o.&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&#160;&lt;/p&gt;</content>
		<author>
			<name>Rodrigo Castardo</name>
			<uri>http://www.liberiun.com/blog/</uri>
		</author>
		<source>
			<title type="html">Blog da Liberiun</title>
			<subtitle type="html">Blog dos colaboradores da Liberiun</subtitle>
			<link rel="self" href="http://www.liberiun.com/blog/feed.atom"/>
			<id>http://www.liberiun.com/blog/feed.atom</id>
			<updated>2009-07-04T20:44:23+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Inova&#231;&#227;o e renova&#231;&#227;o!</title>
		<link href="http://www.liberiun.com/blog/2009/5/4/inovacao-e-renovacao"/>
		<id>tag:www.liberiun.com,2009-05-04:,blog/entry;2009/5/4/inovacao-e-renovacao</id>
		<updated>2009-05-04T11:34:15+00:00</updated>
		<content type="html">&lt;p&gt;&lt;span&gt;Bem vindos ao nosso novo Portal!  &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Uma das inova&#231;&#245;es &#233; o novo Portal, que traz uma nova tecnologia o Deliverance (WSGI), e aproveitando a mudan&#231;a tecnologica renovamos tamb&#233;m o layout do Portal.  &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;O Deliverance &#233; um produto que torna desnecess&#225;ria a cria&#231;&#227;o de uma Skin Plone, o trabalho de integra&#231;&#227;o que fazia o Plone assumir outra caracter&#237;stica visual foi exponencialmente resumido. E grande parte do esfor&#231;o em pequenos e m&#233;dios Portais se concentrava nisso, por&#233;m com o Deliverance isto n&#227;o acontece mais. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;O trabalho com Deliverance baseia-se na id&#233;ia mapear os estilos do Plone com os arquivos de apar&#234;ncia do Portal (CSS), o trabalho &#233; simples voc&#234; tem que dizer ao Deliverance que o estilo portal-column-content do Plone corresponde ao estilo corpo do novo layout (no nosso caso).  &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;S&#227;o v&#225;rias as novidades do portal, um destaque maior para as turmas de treinamento &#233; um dos principais, a nova home destaca as informa&#231;&#245;es mais procuradas dentro do Portal, entre outras novas id&#233;ias.  &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Por&#233;m o que me deixa mais estusiasmado &#233; o nosso &quot;novo&quot; (entre aspas pois tem quase 1 ano de vida, sem divulga&#231;&#227;o) Reposit&#243;rio de Produtos Open Source!  &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Nele existem diversas ferramentas, para Not&#237;cias &amp;amp; Newsletter, para Gerenciamento Inteligente de Cache, para Banners, para Sistemas de Licita&#231;&#227;o, produto para Agendamento de reuni&#245;es, produto para Intranets, entre outros.  &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Todos eles ser&#227;o divulgados individualmente no nosso novo Portal, vou falar sobre cada uma das features e caracter&#237;sticas contidas em cada um.  &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Al&#233;m disso vamos mostrar alguns do nossos Cases (features desenvolvidas, objetivos alcan&#231;ados, prints de tela, etc ...), um dos mais esperados &#233; a Intranet da Caixa Econ&#244;mica Federal, que est&#225; em desenvolvimento. Um grande projeto que exige inova&#231;&#227;o e renova&#231;&#227;o, estamos trabalhando em solu&#231;&#245;es Open Source para melhorar algumas quest&#245;es do Plone, isto pois o cen&#225;rio do Projeto (130 mil usu&#225;rios e 5000 gestores de conte&#250;do autenticados atrav&#233;s do AD Corporativo) exige uma performance maior do que a existente hoje no Plone, com certeza estamos falando de um dos maiores projetos Plone do Mundo.  &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Todos os produtos de melhoria tecnol&#243;gica que estamos fazendo estar&#227;o dispon&#237;veis no nosso reposit&#243;rio, e vou falar de cada um deles, um post para cada novo produto.  &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Voc&#234; j&#225; pode acessar nosso reposit&#243;rio em: &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;http://code.liberiun.com&quot; class=&quot;external&quot;&gt;code.liberiun.com&lt;/a&gt;&lt;span&gt;:7777/ &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Estamos utilizando o Mercurial (hg) [1] ao inv&#233;s do habitual Subversion, mas isto &#233; assunto vai ser postado pelo Douglas.  &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Deixo apenas a dica, um client dele no Windows (um dos motivos do uso, cross plataform), voc&#234; pode baixar em: &lt;/span&gt;&lt;a href=&quot;http://bitbucket.org/tortoisehg/stable/wiki/install&quot; class=&quot;external&quot;&gt;bitbucket.org/tortoisehg/stable/wiki/install&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;Um abra&#231;o. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;[1] &lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Mercurial_(software&quot; class=&quot;external&quot;&gt;en.wikipedia.org/wiki/Mercurial_(software&lt;/a&gt;&lt;span&gt;) &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://www.selenic.com/mercurial/wiki/&quot; class=&quot;external&quot;&gt;www.selenic.com/mercurial/wiki/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;</content>
		<author>
			<name>Rodrigo Castardo</name>
			<uri>http://www.liberiun.com/blog/</uri>
		</author>
		<source>
			<title type="html">Blog da Liberiun</title>
			<subtitle type="html">Blog dos colaboradores da Liberiun</subtitle>
			<link rel="self" href="http://www.liberiun.com/blog/feed.atom"/>
			<id>http://www.liberiun.com/blog/feed.atom</id>
			<updated>2009-07-04T20:44:23+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Por onde come&#231;ar?</title>
		<link href="http://aprenda-python.blogspot.com/2008/10/por-onde-comear.html"/>
		<id>tag:blogger.com,1999:blog-2240031811551496628.post-3881357740112421345</id>
		<updated>2009-05-04T10:44:53+00:00</updated>
		<content type="html">Essa &#233; a d&#250;vida de todo mundo que come&#231;a em uma nova linguagem de programa&#231;&#227;o.[inserido em 30/04/2009] V&#225; por mim, aprenda python e dedique-se ao ingl&#234;s! ;-)Como Python &#233; interpretado, fa&#231;a o download para sua plataforma em www.python.org/downloadImportante: o site oficial da linguagem &#233; www.python.org e n&#227;o .com. Em portugu&#234;s, temos o www.python.org.brAgora, vamos tentar &quot;vender o peixe&quot; te</content>
		<author>
			<name>Vinicius Assef</name>
			<email>noreply@blogger.com</email>
			<uri>http://aprenda-python.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Aprenda Python</title>
			<subtitle type="html">Dicas para voc&#234; que j&#225; &#233; programador em outra linguagem.</subtitle>
			<link rel="self" href="http://aprenda-python.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-2240031811551496628</id>
			<updated>2009-06-24T01:44:10+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Novo site!</title>
		<link href="http://www.liberiun.com/blog/2009/5/4/novo-site"/>
		<id>tag:www.liberiun.com,2009-05-04:,blog/entry;2009/5/4/novo-site</id>
		<updated>2009-05-04T10:35:23+00:00</updated>
		<content type="html">&lt;p&gt;&lt;span&gt;A Liberiun est&#225; lan&#231;ando seu novo site e posso dizer que estou muito empolgado com esse lan&#231;amento pelos seguintes motivos: &lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;Totalmente feito usando Plone 3.2; &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Totalmente WSGI; &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Skin implementada em Deliverance; &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span&gt;Totalmente acess&#237;vel (DaSilva) e validado W3C; &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span&gt;A vers&#227;o do site est&#225; baseado no Plone 3.2 e na futura arquitetura do Plone 4, trazendo benef&#237;cios nunca antes poss&#237;veis para o Plone. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;O site ainda tem muitas funcionalidades para serem exibidas, mas isso &#233; assunto para o pr&#243;ximo post. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;F&#225;bio Rizzo &lt;/span&gt;&lt;br /&gt;&lt;span&gt;Vice-Presidente Executivo &lt;/span&gt;&lt;br /&gt;&lt;a href=&quot;mailto:fabiorizzo@liberiun.com&quot; class=&quot;external&quot;&gt;fabiorizzo@liberiun.com&lt;/a&gt;&lt;/p&gt;</content>
		<author>
			<name>admin</name>
			<uri>http://www.liberiun.com/blog/</uri>
		</author>
		<source>
			<title type="html">Blog da Liberiun</title>
			<subtitle type="html">Blog dos colaboradores da Liberiun</subtitle>
			<link rel="self" href="http://www.liberiun.com/blog/feed.atom"/>
			<id>http://www.liberiun.com/blog/feed.atom</id>
			<updated>2009-07-04T20:44:23+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Exemplos com o SyntaxHighlighter</title>
		<link href="http://aprenda-python.blogspot.com/2009/04/exemplos-com-o-syntaxhighlighter.html"/>
		<id>tag:blogger.com,1999:blog-2240031811551496628.post-3442661349596358398</id>
		<updated>2009-04-30T04:05:33+00:00</updated>
		<content type="html">No blog do Jos&#233; Peleteiro eu encontrei um exemplo de c&#243;digo formatado bem bonitinho e resolvi ver o que era.Que maravilha &#233; o SyntaxHighlighter! Simples e objetivo.Agora n&#227;o preciso mais me preocupar em colocar os exemplos com numera&#231;&#227;o de linha.Fica a&#237; a dica. ;-)</content>
		<author>
			<name>Vinicius Assef</name>
			<email>noreply@blogger.com</email>
			<uri>http://aprenda-python.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Aprenda Python</title>
			<subtitle type="html">Dicas para voc&#234; que j&#225; &#233; programador em outra linguagem.</subtitle>
			<link rel="self" href="http://aprenda-python.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-2240031811551496628</id>
			<updated>2009-06-24T01:44:10+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Exemplo 1 - Ler arquivo</title>
		<link href="http://aprenda-python.blogspot.com/2008/10/exemplo-1-ler-arquivo.html"/>
		<id>tag:blogger.com,1999:blog-2240031811551496628.post-8942964794844082596</id>
		<updated>2009-04-30T03:54:31+00:00</updated>
		<content type="html">fones01.py - L&#234; um arquivo e mostra todo o conte&#250;do na tela.Esse exemplo faz s&#243; isso mesmo.Baixe o fonte e o arquivo texto lido por ele (zipados).&quot;&quot;&quot; Le um arquivo texto e mostra o conteudo na tela. &quot;&quot;&quot;print __doc__f = open('\usr\www\py\\fones.txt')for linha in f:    print linha.rstrip()f.close()print '--- fim'Vamos analisar os detalhes desse programa.Linha 3: Execute esse programa e veja que</content>
		<author>
			<name>Vinicius Assef</name>
			<email>noreply@blogger.com</email>
			<uri>http://aprenda-python.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Aprenda Python</title>
			<subtitle type="html">Dicas para voc&#234; que j&#225; &#233; programador em outra linguagem.</subtitle>
			<link rel="self" href="http://aprenda-python.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-2240031811551496628</id>
			<updated>2009-06-24T01:44:10+00:00</updated>
		</source>
	</entry>

	<entry>
		<title type="html">Exemplo 2 - Usando string.split()</title>
		<link href="http://aprenda-python.blogspot.com/2008/10/exemplo-2-usando-stringsplit.html"/>
		<id>tag:blogger.com,1999:blog-2240031811551496628.post-7299611112482946375</id>
		<updated>2009-04-30T03:53:41+00:00</updated>
		<content type="html">string_split.py - Separa uma string (registro de dados) em peda&#231;os (campos), usando um delimitador.A&#237; vai um exemplo pr&#225;tico, para quem lida com importa&#231;&#227;o de dados estilo arquivo csv, com campos separados por um delimitador.&quot;&quot;&quot; Separa um registro delimitado, em campos. &quot;&quot;&quot;print __doc__reg = 'Fabiana Lemos;Rua das Ac&#225;cias, 780;' +\    'Centro;Belo Horizonte;MG;(31) 3234-7890;07/12/1978'nome,</content>
		<author>
			<name>Vinicius Assef</name>
			<email>noreply@blogger.com</email>
			<uri>http://aprenda-python.blogspot.com/</uri>
		</author>
		<source>
			<title type="html">Aprenda Python</title>
			<subtitle type="html">Dicas para voc&#234; que j&#225; &#233; programador em outra linguagem.</subtitle>
			<link rel="self" href="http://aprenda-python.blogspot.com/atom.xml"/>
			<id>tag:blogger.com,1999:blog-2240031811551496628</id>
			<updated>2009-06-24T01:44:10+00:00</updated>
		</source>
	</entry>

</feed>
