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

<channel>
	<title>Blog do PacMan &#187; programação</title>
	<atom:link href="http://pacman.blog.br/blog/tag/programacao/feed/" rel="self" type="application/rss+xml" />
	<link>http://pacman.blog.br/blog</link>
	<description>Varias Coisas, por Tiago Peczenyj</description>
	<lastBuildDate>Thu, 15 Jul 2010 02:04:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Como saber que uma musica acabou em actionscript</title>
		<link>http://pacman.blog.br/blog/dicas/como-saber-que-uma-musica-acabou-em-actionscript/</link>
		<comments>http://pacman.blog.br/blog/dicas/como-saber-que-uma-musica-acabou-em-actionscript/#comments</comments>
		<pubDate>Sat, 24 Apr 2010 15:03:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[actionscript]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/dicas/como-saber-que-uma-musica-acabou-em-actionscript/</guid>
		<description><![CDATA[Para fazer um tocador de mp3, por exemplo, em actionscript 3, basta vc criar uma instância da classe Sound e invocar os métodos load e play para carregar o arquivo e toca-lo, respectivamente. Porém como saber que a musica acabou? &#8230; <a href="http://pacman.blog.br/blog/dicas/como-saber-que-uma-musica-acabou-em-actionscript/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Para fazer um tocador de mp3, por exemplo, em actionscript 3, basta vc criar uma instância da classe Sound e invocar os métodos load e play para carregar o arquivo e toca-lo, respectivamente.</p>
<p>Porém como saber que a musica acabou? A classe sound possui um listener para o evento COMPLETE porém isto é para completar o donwload da musica, não o final da mesma. E ai, comofas/</p>
<p>Simples: o método play retorna uma instância SoundChannel que, por sua vez, possui um listener para o evento SOUND_COMPLETE, logo bastaria fazer</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> snd<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Sound</span> = <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">Sound</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
snd.<span style="color: #004993;">load</span><span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">URLRequest</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;jazz.mp3&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #6699cc; font-weight: bold;">var</span> channel<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">SoundChannel</span> = snd.<span style="color: #004993;">play</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
channel.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">Event</span>.<span style="color: #004993;">SOUND_COMPLETE</span>, 
      soundCompleteHandler<span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> soundCompleteHandler<span style="color: #000000;">&#40;</span>e<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Event</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span><span style="color: #000000;">&#123;</span>
  <span style="color: #3f5fbf;">/* insira aqui o que deve fazer quando a musica acabar */</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/dicas/como-saber-que-uma-musica-acabou-em-actionscript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Não entendo o motivo pelo qual ainda ensinam pascal</title>
		<link>http://pacman.blog.br/blog/dicas/nao-entendo-o-motivo-pelo-qual-ainda-ensinam-pascal/</link>
		<comments>http://pacman.blog.br/blog/dicas/nao-entendo-o-motivo-pelo-qual-ainda-ensinam-pascal/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 00:17:27 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Awk]]></category>
		<category><![CDATA[haskell]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/?p=95</guid>
		<description><![CDATA[Encontrei este exercicio em um forum de programação e informatica. Um tanto engenhoso, devo admitir, e é otimo para praticar diferentes linguagens de programação, que podem exercitar muitos paradigmas. Infelizmente o professor pediu para fazer em Pascal. o número 3025 &#8230; <a href="http://pacman.blog.br/blog/dicas/nao-entendo-o-motivo-pelo-qual-ainda-ensinam-pascal/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Encontrei este exercicio em um forum de programação e informatica. Um tanto engenhoso, devo admitir, e é otimo para praticar diferentes linguagens de programação, que podem exercitar muitos paradigmas. Infelizmente o professor pediu para fazer em Pascal.</p>
<blockquote><p>o número 3025 possui a seguinte caracteristica: 30+25=55 e 55*55=3025. Escreva um programa que escreva todas os números com quatro algarismos que possuem a citada características.</p></blockquote>
<p>Veja que solução elegante temos com ruby:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&gt;&gt;</span> <span style="color:#006600; font-weight:bold;">&#40;</span>1000..9999<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">find_all</span><span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">|</span>x<span style="color:#006600; font-weight:bold;">|</span> <span style="color:#006600; font-weight:bold;">&#40;</span>x<span style="color:#006600; font-weight:bold;">/</span><span style="color:#006666;">100</span><span style="color:#006600; font-weight:bold;">+</span>x<span style="color:#006600; font-weight:bold;">%</span>100<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">**</span><span style="color:#006666;">2</span> == x<span style="color:#006600; font-weight:bold;">&#125;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">2025</span>, <span style="color:#006666;">3025</span>, <span style="color:#006666;">9801</span><span style="color:#006600; font-weight:bold;">&#93;</span></pre></div></div>

<p>Entretanto tive a apelar para uma sujeira (alguem percebe?) na versão em haskell:</p>

<div class="wp_syntax"><div class="code"><pre class="haskell" style="font-family:monospace;">Prelude<span style="color: #339933; font-weight: bold;">&gt;</span> <span style="color: #06c; font-weight: bold;">import</span> List
<span style="color: #06c; font-weight: bold;">Prelude</span> List<span style="color: #339933; font-weight: bold;">&gt;</span> findIndices<span style="color: green;">&#40;</span>\x <span style="color: #339933; font-weight: bold;">-&gt;</span> <span style="color: green;">&#40;</span><span style="color: green;">&#40;</span>x `<span style="font-weight: bold;">div</span>` <span style="color: red;">100</span><span style="color: green;">&#41;</span><span style="color: #339933; font-weight: bold;">+</span><span style="color: green;">&#40;</span>x `<span style="font-weight: bold;">mod</span>` <span style="color: red;">100</span><span style="color: green;">&#41;</span><span style="color: green;">&#41;</span><span style="color: #339933; font-weight: bold;">^</span><span style="color: red;">2</span> <span style="color: #339933; font-weight: bold;">==</span> x <span style="color: #339933; font-weight: bold;">&amp;&amp;</span> x <span style="color: #339933; font-weight: bold;">&gt;</span> <span style="color: red;">1000</span><span style="color: green;">&#41;</span><span style="color: green;">&#91;</span>0<span style="color: #339933; font-weight: bold;">..</span>9999<span style="color: green;">&#93;</span>
<span style="color: green;">&#91;</span><span style="color: red;">2025</span><span style="color: #339933; font-weight: bold;">,</span><span style="color: red;">3025</span><span style="color: #339933; font-weight: bold;">,</span><span style="color: red;">9801</span><span style="color: green;">&#93;</span></pre></div></div>

<p>Por fim, um simples &#8216;one liner&#8217; usando gawk</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">seq</span> <span style="color: #000000;">1000</span> <span style="color: #000000;">9900</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">gawk</span> <span style="color: #ff0000;">'(int($1/100) + $1%100) == sqrt($1){print}'</span>
<span style="color: #000000;">2025</span>
<span style="color: #000000;">3025</span>
<span style="color: #000000;">9801</span></pre></div></div>

<p>É claro que a solução esperada é algo como</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;math.h&gt;</span>
<span style="color: #339933;">#include  &lt;stdio.h&gt;</span>
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">1000</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;=</span><span style="color: #0000dd;">9999</span><span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">/</span><span style="color: #0000dd;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">%</span><span style="color:#800080;">100</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">==</span>sqrt<span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
			<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>	
&nbsp;
	<span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Até ANSI C é mais elegante &#8211; sem flamewars por favor, afinal todos sabem o que são <a >programadores de verdade</a> <img src='http://pacman.blog.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/dicas/nao-entendo-o-motivo-pelo-qual-ainda-ensinam-pascal/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>Sempre defina a forma de abertura de arquivos</title>
		<link>http://pacman.blog.br/blog/dicas/sempre-defina-a-forma-de-abertura-de-arquivos/</link>
		<comments>http://pacman.blog.br/blog/dicas/sempre-defina-a-forma-de-abertura-de-arquivos/#comments</comments>
		<pubDate>Sun, 05 Jul 2009 21:26:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[base64]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/dicas/sempre-defina-a-forma-de-abertura-de-arquivos/</guid>
		<description><![CDATA[Linguagens script tornam tudo muito facil. Codificar uma informação para base64, por exemplo, pode ser feito assim: require 'base64' data = &#34;Now is the time for all good coders\nto learn Ruby&#34; Base64.b64encode&#40;data&#41; Entretanto se vc quer processar o conteudo de &#8230; <a href="http://pacman.blog.br/blog/dicas/sempre-defina-a-forma-de-abertura-de-arquivos/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Linguagens script tornam tudo muito facil. Codificar uma informação para base64, por exemplo, pode ser feito assim:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">   <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'base64'</span>
   data = <span style="color:#996600;">&quot;Now is the time for all good coders<span style="color:#000099;">\n</span>to learn Ruby&quot;</span>
   <span style="color:#CC00FF; font-weight:bold;">Base64</span>.<span style="color:#9900CC;">b64encode</span><span style="color:#006600; font-weight:bold;">&#40;</span>data<span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>Entretanto se vc quer processar o conteudo de um arquivo, vale um cuidado extra: definir a forma de abertura dos arquivos.</p>
<p>Por exemplo, eu posso fazer isso</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">   <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'base64'</span>
   data = <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#CC0066; font-weight:bold;">open</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'imagem.jpg'</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">read</span>
   <span style="color:#CC00FF; font-weight:bold;">Base64</span>.<span style="color:#9900CC;">b64encode</span><span style="color:#006600; font-weight:bold;">&#40;</span>data<span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>Se eu estou desenvolvendo no linux, para mim o resultado é coerente. Eu ficaria feliz (sem sacanagem) se fosse o caso de desenvolver um software que rodasse exclusivamente nesse sistema operacional. As vezes não é bem assim&#8230;</p>
<p>Ruby é um bom exemplo de uma linguagem que permite desenvolver software multi-plataforma, entretanto é muito facil atrapalhar o interpretador (afinal, quem nunca teve problema com uma referência a um arquivo &#8220;C:\xxx&#8221;?). No exemplo real que eu passei, bastaria informar o modo &#8216;rb&#8217; (r de read, b de binary) para o comando open que eu teria o mesmo comportamento em todas as plataformas.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">   <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'base64'</span>
   data = <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#CC0066; font-weight:bold;">open</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'imagem.jpg'</span>,<span style="color:#996600;">'rb'</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">read</span>
   <span style="color:#CC00FF; font-weight:bold;">Base64</span>.<span style="color:#9900CC;">b64encode</span><span style="color:#006600; font-weight:bold;">&#40;</span>data<span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>É claro que este tipo de comportamento pode ser verificado através de uma suite de testes em todas as plataformas-alvo, entretanto vale de alerta para estudarmos um pouco as caracteristicas das apis e bibliotecas nas diferentes plataformas (não adianta, desenvolver software signfica estudar constantemente).</p>
<p>Para terminar, vejamos esta <a href="http://mail.python.org/pipermail/python-bugs-list/2006-April/032911.html">thread</a>:</p>
<blockquote><p>Summary: open should default to binary mode on windows</p>
<p>Initial Comment:<br />
On windows the open() function defaults to reading<br />
files in text mode.  To get a binary mode file I need<br />
to append a &#8220;b&#8221; to the mode string.  I think this is an<br />
unnessary platform inconsistency.  Twice now I&#8217;ve had<br />
hard to track down bugs because I was reading a file in<br />
text mode and should have been using binary.  This is a<br />
wart, IMO.</p></blockquote>
<p>Ou seja, muita gente, em diferentes linguagens, vai enfrentar o mesmo problema de achar que o open, pode padrão, vai abrir o arquivo em modo binario. A origem disso é <a href="http://www.felgall.com/cplus4.htm">antiga</a> e não vai desaparecer de uma hora para outra.</p>
<p>Por fim, vale lembrar que o conceito de &#8216;nova linha&#8217; é diferente de acordo com o sistema operacional, no unix é \n enquanto no windows é \r\n. Também é antigo e remonta a epoca de impressoras matriciais, DOS e por ai vai. É o tipo da coisa que, pela lei de murphy, vai sacanear a gente quando menos esperamos.</p>
<p>Obrigado ao <a href="http://rafaelspereira.wordpress.com">Rafael</a> por ter visto este detalhe comigo tarde da noite.</p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/dicas/sempre-defina-a-forma-de-abertura-de-arquivos/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
