<?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; Dicas</title>
	<atom:link href="http://pacman.blog.br/blog/category/dicas/feed/" rel="self" type="application/rss+xml" />
	<link>http://pacman.blog.br/blog</link>
	<description>Varias Coisas, por Tiago Peczenyj</description>
	<lastBuildDate>Thu, 26 Jan 2012 13:51:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>FFmpeg new version</title>
		<link>http://pacman.blog.br/blog/dicas/ffmpeg-new-version/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ffmpeg-new-version</link>
		<comments>http://pacman.blog.br/blog/dicas/ffmpeg-new-version/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 16:40:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[codec]]></category>
		<category><![CDATA[ffmpeg]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/?p=346</guid>
		<description><![CDATA[Changelog for 0.9 version. Entries are sorted chronologically from oldest to youngest within each release, releases are sorted from youngest to oldest. version 0.9: - openal input device added - boxblur filter added - BWF muxer - Flash Screen Video &#8230; <a href="http://pacman.blog.br/blog/dicas/ffmpeg-new-version/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Changelog for 0.9 version.</p>
<p>Entries are sorted chronologically from oldest to youngest within each <a href="http://pt.partypoker.com/" onclick="javascript:_gaq.push(['_trackEvent','outbound-article','http://pt.partypoker.com']);">release</a>, releases are sorted from youngest to oldest.</p>
<p>version 0.9:</p>
<p>- openal input device added<br />
- boxblur filter added<br />
- BWF muxer<br />
- Flash Screen Video 2 decoder<br />
- lavfi input device added<br />
- added avconv, which is almost the same for now, except<br />
for a few incompatible changes in the options, which will hopefully make them<br />
easier to use. The changes are:<br />
   * The options placement is now strictly enforced! While in theory the<br />
     options for ffmpeg should be given in [input options] -i INPUT [output<br />
     options] OUTPUT order, in practice it was possible to give output options<br />
     before the -i and it mostly worked. Except when it didn&#8217;t &#8211; the<br />
behavior was<br />
     a bit inconsistent. In avconv, it is not possible to mix input and output<br />
     options. All non-global options are reset after an input or<br />
output filename.<br />
   * All per-file options are now truly per-file &#8211; they apply only to the next<br />
     input or output file and specifying different values for different files<br />
     will now work properly (notably -ss and -t options).<br />
   * All per-stream options are now truly per-stream &#8211; it is possible to<br />
     specify which stream(s) should a given option apply to. See the Stream<br />
     specifiers section in the avconv manual for details.<br />
   * In ffmpeg some options (like -newvideo/-newaudio/&#8230;) are irregular in the<br />
     sense that they&#8217;re specified after the output filename instead of before,<br />
     like all other options. In avconv this irregularity is removed,<br />
all options<br />
     apply to the next input or output file.<br />
   * -newvideo/-newaudio/-newsubtitle options were removed. Not only were they<br />
     irregular and highly confusing, they were also redundant. In<br />
avconv the -map<br />
     option will create new streams in the output file and map input streams to<br />
     them. E.g. avconv -i INPUT -map 0 OUTPUT will create an output stream for<br />
     each stream in the first input file.<br />
   * The -map option now has slightly different and more powerful syntax:<br />
       + Colons (&#8216;:&#8217;) are used to separate file index/stream type/stream index<br />
         instead of dots. Comma (&#8216;,&#8217;) is used to separate the sync<br />
stream instead<br />
         of colon.. This is done for consistency with other options.<br />
       + It&#8217;s possible to specify stream type. E.g. -map 0:a:2 creates an<br />
         output stream from the third input audio stream.<br />
       + Omitting the stream index now maps all the streams of the given type,<br />
         not just the first. E.g. -map 0:s creates output streams for all the<br />
         subtitle streams in the first input file.<br />
       + Since -map can now match multiple streams, negative mappings were<br />
         introduced. Negative mappings disable some streams from an already<br />
         defined map. E.g. &#8216;-map 0 -map -0:a:1&#8242; means &#8216;create output<br />
streams for<br />
         all the stream in the first input file, except for the second audio<br />
         stream&#8217;.<br />
   * There is a new option -c (or -codec) for choosing the decoder/encoder to<br />
     use, which allows to precisely specify target stream(s) consistently with<br />
     other options. E.g. -c:v lib264 sets the codec for all video<br />
streams, -c:a:0<br />
     libvorbis sets the codec for the first audio stream and -c copy copies all<br />
     the streams without reencoding. Old -vcodec/-acodec/-scodec<br />
options are now<br />
     aliases to -c:v/a/s<br />
   * It is now possible to precisely specify which stream should an AVOption<br />
     apply to. E.g. -b:v:0 2M sets the bitrate for the first video<br />
stream, while<br />
     -b:a 128k sets the bitrate for all audio streams. Note that the<br />
old -ab 128k<br />
     syntax is deprecated and will stop working soon.<br />
   * -map_chapters now takes only an input file index and applies to the next<br />
     output file. This is consistent with how all the other options work.<br />
   * -map_metadata now takes only an input metadata specifier and applies to<br />
     the next output file. Output metadata specifier is now part of the option<br />
     name, similarly to the AVOptions/map/codec feature above.<br />
   * -metadata can now be used to set metadata on streams and chapters, e.g.<br />
     -metadata:s:1 language=eng sets the language of the first stream to &#8216;eng&#8217;.<br />
     This made -vlang/-alang/-slang options redundant, so they were removed.<br />
   * -qscale option now uses stream specifiers and applies to all streams, not<br />
     just video. I.e. plain -qscale number would now apply to all<br />
streams. To get<br />
     the old behavior, use -qscale:v. Also there is now a shortcut -q<br />
for -qscale<br />
     and -aq is now an alias for -q:a.<br />
   * -vbsf/-absf/-sbsf options were removed and replaced by a -bsf option which<br />
     uses stream specifiers. Use -bsf:v/a/s instead of the old options.<br />
   * -itsscale option now uses stream specifiers, so its argument is only the<br />
     scale parameter.<br />
   * -intra option was removed, use -g 0 for the same effect.<br />
   * -psnr option was removed, use -flags +psnr for the same effect.<br />
   * -vf option is now an alias to the new -filter option, which uses<br />
stream specifiers.<br />
   * -vframes/-aframes/-dframes options are now aliases to the new<br />
-frames option.<br />
   * -vtag/-atag/-stag options are now aliases to the new -tag option.<br />
- XMV demuxer<br />
- LOAS demuxer<br />
- ashowinfo filter added<br />
- Windows Media Image decoder<br />
- amovie source added<br />
- LATM muxer/demuxer<br />
- Speex encoder via libspeex<br />
- JSON output in ffprobe<br />
- WTV muxer<br />
- Optional C++ Support (needed for libstagefright)<br />
- H.264 Decoding on Android via Stagefright<br />
- Prores decoder<br />
- BIN/XBIN/ADF/IDF text file decoder<br />
- aconvert audio filter added<br />
- audio support to lavfi input device added<br />
- libcdio-paranoia input device for audio CD grabbing<br />
- Apple ProRes decoder<br />
- CELT in Ogg demuxing<br />
- G.723.1 demuxer and decoder<br />
- libmodplug support (&#8211;enable-libmodplug)<br />
- VC-1 interlaced decoding<br />
- libutvideo wrapper (&#8211;enable-libutvideo)<br />
- aevalsrc audio source added<br />
- Ut Video decoder<br />
- Speex encoding via libspeex<br />
- 4:2:2 H.264 decoding support<br />
- 4:2:2 and 4:4:4 H.264 encoding with libx264<br />
- Pulseaudio input device<br />
- Prores encoder<br />
- Video Decoder Acceleration (VDA) HWAccel module.<br />
- replacement Indeo 3 decoder<br />
- new ffmpeg option: -map_channel<br />
- volume audio filter added<br />
- earwax audio filter added<br />
- libv4l2 support (&#8211;enable-libv4l2)<br />
- TLS/SSL and HTTPS protocol support<br />
- AVOptions API rewritten and documented<br />
- most of CODEC_FLAG2_*, some CODEC_FLAG_* and many codec-specific fields in<br />
 AVCodecContext deprecated. Codec private options should be used instead.<br />
- Properly working defaults in libx264 wrapper, support for native presets.<br />
- Encrypted OMA files support<br />
- Discworld II BMV decoding support<br />
- VBLE Decoder<br />
- OS X Video Decoder Acceleration (VDA) support<br />
- compact and csv output in ffprobe<br />
- pan audio filter<br />
- IFF Amiga Continuous Bitmap (ACBM) decoder<br />
- ass filter                                         #meldels<br />
- CRI ADX audio format demuxer<br />
- Playstation Portable PMP format demuxer<br />
- Microsoft Windows ICO demuxer<br />
- life source<br />
- PCM format support in OMA demuxer<br />
- CLJR encoder<br />
- new option: -report<br />
- Dxtory capture format decoder<br />
- cellauto source</p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/dicas/ffmpeg-new-version/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>YAPC::Brasil 2011 Yet Another Perl Conference</title>
		<link>http://pacman.blog.br/blog/dicas/yapcbrasil-2011-yet-another-perl-conference/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=yapcbrasil-2011-yet-another-perl-conference</link>
		<comments>http://pacman.blog.br/blog/dicas/yapcbrasil-2011-yet-another-perl-conference/#comments</comments>
		<pubDate>Tue, 25 Oct 2011 00:17:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Rio de Janeiro]]></category>
		<category><![CDATA[YAPC]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/?p=331</guid>
		<description><![CDATA[É com muita satisfação que venho anunciar que a grade de palestras do YAPC::Brasil 2011 já está no ar (minha palestra será sábado)! http://www.yapcbrasil.org.br/2011/schedule Esse ano o evento contará ainda com ninguém menos que *brian d foy* como keynote, em &#8230; <a href="http://pacman.blog.br/blog/dicas/yapcbrasil-2011-yet-another-perl-conference/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>É com muita satisfação que venho anunciar que a grade de palestras do YAPC::Brasil 2011 já está no ar (minha palestra será sábado)!</p>
<p>   <a href="http://www.yapcbrasil.org.br/2011/schedule" title="schedule">http://www.yapcbrasil.org.br/2011/schedule</a></p>
<p>Esse ano o evento contará ainda com ninguém menos que *brian d foy* como keynote, em sua segunda visita ao Brasil! Brian é o criador da primeira comunidade Perl Mongers do mundo e autor/co-autor de diversos livros de Perl, como &#8220;Learning Perl&#8221; (o livro da lhama), &#8220;Mastering Perl&#8221; e &#8220;Effective Perl Programming&#8221;.</p>
<p>Demais palestras contém temas muito bacanas como Webdev, TDD, OpenData, JavaScript, Facebook e muito mais, em dois dias inteiros regados de palestras de qualidade para todos os níveis de conhecimento.</p>
<p>Mas&#8230; dois dias? Não eram três?</p>
<p>Sim, e essa é mais uma novidade: na sexta-feira, dia 4, teremos um mini-curso de UM DIA INTEIRO com o tema &#8220;Effective Perl Programming&#8221;, ministrado pelo próprio brian d foy!</p>
<p>   <a href="http://www.yapcbrasil.org.br/2011/minicurso.html" title="mini curso perl">http://www.yapcbrasil.org.br/2011/minicurso.html</a></p>
<p>Não fique fora dessa! As vagas são limitadas, então acesse o link e inscreva-se já!</p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/dicas/yapcbrasil-2011-yet-another-perl-conference/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Perl Moderno no III FSLDC neste sábado</title>
		<link>http://pacman.blog.br/blog/dicas/perl-moderno-no-iii-fsldc-neste-sabado/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=perl-moderno-no-iii-fsldc-neste-sabado</link>
		<comments>http://pacman.blog.br/blog/dicas/perl-moderno-no-iii-fsldc-neste-sabado/#comments</comments>
		<pubDate>Fri, 03 Jun 2011 23:38:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[open-source]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/?p=151</guid>
		<description><![CDATA[Palestra de Perl Moderno no III FSLDC <a href="http://pacman.blog.br/blog/dicas/perl-moderno-no-iii-fsldc-neste-sabado/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Passei a utilizar o twitter (@<a href="http://twitter.com/pac_man">pac_man</a>) como ferramenta de comunicação e divulgação, assim este blog tem andado um pouco abandonado, fato que deve se encerrar agora.</p>
<p>O fato é que neste sábado (4 de junho) acontecerá o Terceiro Fórum de Software Livre de Duque de Caxias (link para o site <a href="http://forumsoftwarelivre.com.br/2011/">aqui</a>). Será um dia cheio de palestras sobre software livre, programação, mini cursos e até uma oficina de Arduino. O evento conta com palestrantes internacionais, destaque para Rasmus Lerdorf (criador do PHP) e John &#8220;Maddog&#8221; Hal (diretor executivo da Linux Internacional). A programação completa vc encontra <a href="http://forumsoftwarelivre.com.br/2011/arquivos/Programa02062011.pdf">aqui</a>.</p>
<p>O fato é que vou ministrar uma palestra as 14 hs no auditório 3 sobre Perl Moderno. Apesar de trabalhar pouco com esta linguagem no meu trabalho sinto um prazer imenso em programar em Perl, em particular as versões mais recentes e com alguns módulos maravilhosos do <a href="http://www.cpan.org">CPAN</a> que espero ter tempo para falar de todos. A palestra será inspirada no livro <a href="http://onyxneon.com/books/modern_perl/">Modern Perl</a> do <a href="http://search.cpan.org/~chromatic">chromatic</a> , livro este que pode ser baixado em pdf gratuitamente.</p>
<p>Perl hoje ainda é sinônimo de código obscuro e complexo, o que é uma grande besteira. Qualquer linguagem pode produzir programas ilegíveis e de péssima manutenção e a origem disto é o programador (mas a linguagem pode ajudar, mas ai são outros quinhentos).</p>
<p>Perl é uma das linguagens de propósito geral mais antigas e estáveis ainda em atividade. A quantidade de documentação disponível e os quase 100.000 módulos disponíveis no CPAN  fazem de Perl uma escolha interessante tanto para desenvolver soluções com qualidade.</p>
<p>A cultura Perl inclui uma cultura muito forte de documentação, testes e produção de módulos e bibliotecas de propósito geral. Não raro alguém resolve um problema e contribui com a comunidade sob forma de um módulo, por exemplo.</p>
<p>Uma boa forma de começar a usar Perl Moderno é utilizar uma versão recente (no mínimo a 5.10) e instalar o módulo <a href="http://search.cpan.org/~chromatic/Modern-Perl-1.03/">Modern::Perl</a>. Este módulo não faz nada além de ativar features novas além de habilitar os modos strict e warnings. Veja só, antes um &#8220;hello world&#8221; tinha uma uma cara assim:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">use</span> strict<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> warnings<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Ola mundo<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Agora é possivel fazer assim:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">use</span> Modern<span style="color: #339933;">::</span><span style="color: #006600;">Perl</span><span style="color: #339933;">;</span>
&nbsp;
say <span style="color: #ff0000;">&quot;Ola mundo&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Seria o equivalente a</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">use</span> strict<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> warnings<span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">use</span> <span style="color: #cc66cc;">5.010</span>_000<span style="color: #339933;">;</span>
&nbsp;
say <span style="color: #ff0000;">&quot;Ola mundo&quot;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Porém com escrevendo menos. É facil perceber que surgiu uma nova função built-in chamada say que, simplesmente, imprime adicionando uma &#8220;nova linha&#8221; ao final.</p>
<p>Mas isto é só o começo. A excelente documentação da versão Perl 5.14 se encontra on-line <a href="http://perldoc.perl.org/">aqui</a>, em particular as mudanças entre versões estão listadas na pagina de <a href="http://perldoc.perl.org/index-history.html">histórico</a>.</p>
<p>Além das novas features, vale a pena conhecer alguns módulos core:<br />
<a href="http://sao-paulo.pm.org/artigo/2008/ModulosCore">http://sao-paulo.pm.org/artigo/2008/ModulosCore</a></p>
<p>E alguns módulos do CPAN:<br />
<a href="http://sao-paulo.pm.org/artigo/2009/ModulosRecomendadosCPAN">http://sao-paulo.pm.org/artigo/2009/ModulosRecomendadosCPAN</a></p>
<p>Por fim, vale a pena mencionar dois caras muito uteis.</p>
<p>Moose &#8211; A postmodern object system for Perl 5<br />
<a href="http://search.cpan.org/~flora/Moose-2.0007/">http://search.cpan.org/~flora/Moose-2.0007/</a></p>
<p>Com Moose a orientação a objetos em Perl 5 ficou excelente. Vale a pena olhar o Manual e o CookBook.</p>
<p>E o Mojolicious &#8211; divertido e simples framework web<br />
<a href="http://sao-paulo.pm.org/artigo/2010/Mojolicious">http://sao-paulo.pm.org/artigo/2010/Mojolicious</a></p>
<p>Site oficial:<br />
<a href="http://www.mojolicious.org/">http://www.mojolicious.org/</a></p>
<p>Espero colocar os slides rapidamente aqui no Blog além de detalhar melhor algumas coisas. No nosso idioma é possível encontrar muito material nos sites dos Perl Mongers</p>
<p><a href="http://sao-paulo.pm.org/">http://sao-paulo.pm.org/</a><br />
<a href="http://rio.pm.org/">http://rio.pm.org/</a></p>
<p>Logo devo contar como foi o Workshop ocorrido em São Paulo com a ilustre presença de Larry Wall e em breve deverá sair a data do YAPC::Brasil (Yet Another Perl Conference) que acontecerá no Rio de Janeiro. </p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/dicas/perl-moderno-no-iii-fsldc-neste-sabado/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vote no BeerCheck.in no RailsRumble</title>
		<link>http://pacman.blog.br/blog/dicas/vote-no-beercheck-in-no-railsrumble/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=vote-no-beercheck-in-no-railsrumble</link>
		<comments>http://pacman.blog.br/blog/dicas/vote-no-beercheck-in-no-railsrumble/#comments</comments>
		<pubDate>Thu, 21 Oct 2010 21:49:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Dicas]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/?p=120</guid>
		<description><![CDATA[Ola Vc conhece o BeerCheck.in http://beercheck.in/ ? É um site desenvolvido em 48 horas por amigos meus para a competição Rails Rumble. Ele é muito simples: vc loga com a sua conta do twitter e ganha uma &#8220;estante&#8221; onde vc &#8230; <a href="http://pacman.blog.br/blog/dicas/vote-no-beercheck-in-no-railsrumble/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ola<br />
Vc conhece o BeerCheck.in http://beercheck.in/ ?<br />
É um site desenvolvido em 48 horas por amigos meus para a competição Rails Rumble.<br />
Ele é muito simples: vc loga com a sua conta do twitter e ganha uma &#8220;estante&#8221; onde vc pode colocar as suas cervejas favoritas. Para que os outros vejam a sua estante basta acessar o seu perfil.<br />
Se vc curtiu, vote no Beer Check.in no site do Rails Rumble.</p>
<p>http://railsrumble.com</p>
<p>A votação vai ate o dia 23. Acho que realmente vale a pena votar pois se em dois dias ficou maneiro, depois da competição muitas outras melhorias podem ser adicionadas! Sem falar que existem outras aplicações divertidas no railsrumble para vc votar, algumas feitas por Brasileiros.<br />
o meu</p>
<p>http://beercheck.in/pac_man</p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/dicas/vote-no-beercheck-in-no-railsrumble/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como saber se uma musica parou de tocar em html 5</title>
		<link>http://pacman.blog.br/blog/dicas/como-saber-se-uma-musica-parou-de-tocar-em-html-5/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-saber-se-uma-musica-parou-de-tocar-em-html-5</link>
		<comments>http://pacman.blog.br/blog/dicas/como-saber-se-uma-musica-parou-de-tocar-em-html-5/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 23:58:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/dicas/como-saber-se-uma-musica-parou-de-tocar-em-html-5/</guid>
		<description><![CDATA[Anteriormente vimos como descobrir que uma musica parou de tocar em ActionScript 3. Hoje em dia temos uma quantidade interessante de browsers que suportam alguma coisa de html 5 (safari, chrome, firefox&#8230;), portanto nada mais justo que analisar também esta &#8230; <a href="http://pacman.blog.br/blog/dicas/como-saber-se-uma-musica-parou-de-tocar-em-html-5/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Anteriormente vimos como descobrir que uma musica parou de tocar em ActionScript 3. Hoje em dia temos uma quantidade interessante de browsers que suportam alguma coisa de html 5 (safari, chrome, firefox&#8230;), portanto nada mais justo que analisar também esta solução.</p>
<p>Vejamos como tocar o nosso jazz.mp3</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;audio id=&quot;mp3&quot; src=&quot;jazz.mp3&quot; type=&quot;audio/mpeg&quot; controls/&gt;</pre></div></div>

<p>Apenas esta tag vai gerar um pequeno player com controles customizados pelo browser. E como saber que a musica parou? Basta escutar pelo evento <strong>ended</strong></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> mp3 <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'mp3'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
mp3.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ended'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> 
	<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;fim&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Para customizar os controles basta omitir o atributo <em>controls</em> na tag audio e usar os métodos play e pause, por exemplo.</p>
<p>Um bom exemplo pode ser encontrado aqui:<br />
<a href="http://ajaxian.com/archives/html5-media-support-video-and-audio-tags-and-scriptability">http://ajaxian.com/archives/html5-media-support-video-and-audio-tags-and-scriptability</a></p>
<p>E documentação sobre html 5 vc encontra aqui:<br />
<a href="http://www.w3schools.com/html5/html5_reference.asp">http://www.w3schools.com/html5/html5_reference.asp</a></p>
<p>A tag <em>video</em> segue a mesma idéia, mas será assunto para um próximo post.</p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/dicas/como-saber-se-uma-musica-parou-de-tocar-em-html-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=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 reading <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: #000066; 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><span style="color: #000066; font-weight: bold;">;</span>
snd<span style="color: #000066; font-weight: bold;">.</span><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: #000066; font-weight: bold;">;</span>
<span style="color: #6699cc; font-weight: bold;">var</span> channel<span style="color: #000066; font-weight: bold;">:</span><span style="color: #004993;">SoundChannel</span> = snd<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">play</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
channel<span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">Event</span><span style="color: #000066; font-weight: bold;">.</span><span style="color: #004993;">SOUND_COMPLETE</span><span style="color: #000066; font-weight: bold;">,</span> 
      soundCompleteHandler<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</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: #000066; font-weight: bold;">:</span><span style="color: #004993;">Event</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span><span style="color: #000000;">&#123;</span>
  <span style="color: #009966; font-style: italic;">/* 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>Brincando com a libavcodec e libavformat</title>
		<link>http://pacman.blog.br/blog/dicas/brincando-com-a-libavcodec-e-libavformat/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=brincando-com-a-libavcodec-e-libavformat</link>
		<comments>http://pacman.blog.br/blog/dicas/brincando-com-a-libavcodec-e-libavformat/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 19:19:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Dicas]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/?p=103</guid>
		<description><![CDATA[Um pequeno exemplo que detecta os codecs de dado arquivo de audio/vídeo. <a href="http://pacman.blog.br/blog/dicas/brincando-com-a-libavcodec-e-libavformat/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Vou contar uma histórinha. Pesquisando sobre http streamming para iPhone eu cheguei ate <a href="http://www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/">esta</a> solução open source que utiliza, entre outras coisas, o ffmpeg. Eis que chego até este interessante trecho:</p>
<blockquote><p>If you are interested in how the segmenter works you can find out more on how to use libavformat at the following resources: <a href="http://www.inb.uni-luebeck.de/%7Eboehme/using_libavcodec.html">an older libavformat tutorial</a>, <a  href="http://www.cryptosystem.org/archives/2006/03/libavcodec-libavformat-sample-code/">some sample libavformat code</a>, <a  href="http://www.dranger.com/ffmpeg/">How to Write a Video Player in Less Than 1000 Lines</a>, and <a  href="http://web.me.com/dhoerl/Home/Tech_Blog/Entries/2009/1/22_Revised_avcodec_sample.c.html">more sample libavformat code</a>.</p></blockquote>
<p>Ora&#8230; não pensei duas vezes e cliquei no link sobre escrever um video player, curioso que sou. É um tutorial bem proveitoso,<br />
que ja dá frutos na primeira lição. Deixo aqui um pequeno exemplo que analisa arquivos de video e informa dados do codec de cada stream (audio, video e o que mais tiver la dentro).</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;libavcodec/avcodec.h&gt;</span>
<span style="color: #339933;">#include &lt;libavformat/avformat.h&gt;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">**</span>argv<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   <span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
   <span style="color: #993333;">char</span> buf<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">256</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
   AVFormatContext <span style="color: #339933;">*</span>pFormatCtx<span style="color: #339933;">;</span>
&nbsp;
   av_register_all<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">++</span>argv<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
     <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;analisando arquivo '%s'<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,*</span>argv<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>av_open_input_file<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>pFormatCtx<span style="color: #339933;">,</span> <span style="color: #339933;">*</span>argv<span style="color: #339933;">,</span> NULL<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">!=</span><span style="color: #0000dd;">0</span> <span style="color: #339933;">||</span> 
	av_find_stream_info<span style="color: #009900;">&#40;</span>pFormatCtx<span style="color: #009900;">&#41;</span><span style="color: #339933;">&lt;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> 
		puts<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;nao foi possivel analisar este arquivo!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">continue</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
     <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>i<span style="color: #339933;">&lt;</span>pFormatCtx<span style="color: #339933;">-&gt;</span>nb_streams<span style="color: #339933;">;</span>i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	avcodec_string<span style="color: #009900;">&#40;</span>buf<span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>buf<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> pFormatCtx<span style="color: #339933;">-&gt;</span>streams<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span>codec<span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\t</span>stream[%d]=%s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span>i<span style="color: #339933;">,</span>buf<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <span style="color: #009900;">&#125;</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>Para compilar basta adicionar a libavcodec e a libavformat (apt-get nelas).</p>
<pre>gcc -lavformat -lavcodec -Wall a.c</pre>
<p>A execução é simples:</p>
<pre>
$ ./a.out *
analisando arquivo 'teste.bin'
	stream[0]=Video: wmv2, yuv420p, 320x240
	stream[1]=Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s
</pre>
<p>Não apenas voltei a programar em C (que é uma delícia) como produzi um executavel bem enxuto (12 k) e util para determinar os codecs presentes em dado arquivo. Divertido. Vamos ver o que é possivel fazer agora.</p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/dicas/brincando-com-a-libavcodec-e-libavformat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quando o FakeWeb deu um grande susto pt 2: o changelog</title>
		<link>http://pacman.blog.br/blog/dicas/quando-o-fakeweb-deu-um-grande-susto-pt-2-o-changelog/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=quando-o-fakeweb-deu-um-grande-susto-pt-2-o-changelog</link>
		<comments>http://pacman.blog.br/blog/dicas/quando-o-fakeweb-deu-um-grande-susto-pt-2-o-changelog/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 21:35:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[FakeWeb]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/dicas/quando-o-fakeweb-deu-um-grande-susto-pt-2-o-changelog/</guid>
		<description><![CDATA[Como falei anteriormente, o FakeWeb nos deu susto. Olhando no CHANGELOG na versão que estavamos acostumados a usar o correto era fazer :string => &#8220;mensagem que veio no &#8216;body&#8217;&#8221; ,entretanto nas versões mais atuais isso foi substituido por :body => &#8230; <a href="http://pacman.blog.br/blog/dicas/quando-o-fakeweb-deu-um-grande-susto-pt-2-o-changelog/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Como falei <a href="http://pacman.blog.br/blog/dicas/comportamento-estranho-do-fakeweb-versoes-antigas/">anteriormente</a>, o FakeWeb nos deu susto. </p>
<p>Olhando no CHANGELOG na versão que estavamos acostumados a usar o correto era fazer :string => &#8220;mensagem que veio no &#8216;body&#8217;&#8221; ,entretanto nas versões mais atuais isso foi substituido por :body => &#8216;tcharam&#8217; &#8230; e é este exemplo que esta no site. Como isso quebra o backward compatibility, foi documentado no changelog mas passou despercebido. É claro que a versão mais antiga não vai funcionar que nem a nova.</p>
<p>Se tentassem executar os testes antigos no fakeweb 1.2.4 receberia<br />
esta exception:</p>
<blockquote><p>
Deprecation warning: FakeWeb&#8217;s :string option has been renamed to :body.<br />
Just replace :string with :body in your FakeWeb.register_uri calls.</p></blockquote>
<p>Este é um exemplo onde mudar a forma como utilizamos uma biblioteca ou qualquer software causam todo o tipo de problemas quando não prestamos atenção a todos os detalhes.</p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/dicas/quando-o-fakeweb-deu-um-grande-susto-pt-2-o-changelog/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Comportamento estranho do FakeWeb versões antigas</title>
		<link>http://pacman.blog.br/blog/dicas/comportamento-estranho-do-fakeweb-versoes-antigas/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=comportamento-estranho-do-fakeweb-versoes-antigas</link>
		<comments>http://pacman.blog.br/blog/dicas/comportamento-estranho-do-fakeweb-versoes-antigas/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 15:21:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[FakeWeb]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://pacman.blog.br/blog/dicas/comportamento-estranho-do-fakeweb-versoes-antigas/</guid>
		<description><![CDATA[Ontem fomos surpreendidos por este comportamento estranho do FakeWeb (versões 1.2.2 e 1.2.3), de uma hora para a outra o corpo das requisições vinham como &#8220;&#8221; (vazio). irb&#40;main&#41;:001:0&#62; require 'rubygems' =&#62; true irb&#40;main&#41;:002:0&#62; require 'fakeweb' =&#62; true irb&#40;main&#41;:003:0&#62; FakeWeb.register_uri&#40;:get, 'http://google.com', &#8230; <a href="http://pacman.blog.br/blog/dicas/comportamento-estranho-do-fakeweb-versoes-antigas/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ontem fomos surpreendidos por este comportamento estranho do <a href="http://fakeweb.rubyforge.org/">FakeWeb</a> (versões 1.2.2 e 1.2.3), de uma hora para a outra o corpo das requisições vinham como &#8220;&#8221; (vazio).</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">irb<span style="color:#006600; font-weight:bold;">&#40;</span>main<span style="color:#006600; font-weight:bold;">&#41;</span>:001:<span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&gt;</span> <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>
irb<span style="color:#006600; font-weight:bold;">&#40;</span>main<span style="color:#006600; font-weight:bold;">&#41;</span>:002:<span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&gt;</span> <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'fakeweb'</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>
irb<span style="color:#006600; font-weight:bold;">&#40;</span>main<span style="color:#006600; font-weight:bold;">&#41;</span>:003:<span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&gt;</span> FakeWeb.<span style="color:#9900CC;">register_uri</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:get</span>, <span style="color:#996600;">'http://google.com'</span>, <span style="color:#ff3333; font-weight:bold;">:body</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'google'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#008000; font-style:italic;">#&lt;FakeWeb::Responder:0xb78290a8 @uri=&quot;http://google.com&quot;,</span>
<span style="color:#0066ff; font-weight:bold;">@options</span>=<span style="color:#006600; font-weight:bold;">&#123;</span>:body<span style="color:#006600; font-weight:bold;">=&gt;</span><span style="color:#996600;">&quot;google&quot;</span><span style="color:#006600; font-weight:bold;">&#125;</span>, <span style="color:#0066ff; font-weight:bold;">@method</span>=:get, <span style="color:#0066ff; font-weight:bold;">@times</span>=<span style="color:#006666;">1</span><span style="color:#006600; font-weight:bold;">&gt;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
irb<span style="color:#006600; font-weight:bold;">&#40;</span>main<span style="color:#006600; font-weight:bold;">&#41;</span>:004:<span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&gt;</span> HTTParty.<span style="color:#9900CC;">get</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'http://google.com'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">nil</span>
irb<span style="color:#006600; font-weight:bold;">&#40;</span>main<span style="color:#006600; font-weight:bold;">&#41;</span>:005:<span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&gt;</span> x = HTTParty.<span style="color:#9900CC;">get</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'http://google.com'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">nil</span>
irb<span style="color:#006600; font-weight:bold;">&#40;</span>main<span style="color:#006600; font-weight:bold;">&#41;</span>:006:<span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&gt;</span> x.<span style="color:#9900CC;">code</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">200</span>
irb<span style="color:#006600; font-weight:bold;">&#40;</span>main<span style="color:#006600; font-weight:bold;">&#41;</span>:007:<span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&gt;</span> x.<span style="color:#9900CC;">body</span>  <span style="color:#008000; font-style:italic;"># deveria vir 'google'</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;&quot;</span>
irb<span style="color:#006600; font-weight:bold;">&#40;</span>main<span style="color:#006600; font-weight:bold;">&#41;</span>:008:<span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&gt;</span> <span style="color:#6666ff; font-weight:bold;">Net::HTTP</span>.<span style="color:#9900CC;">get</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">URI</span>.<span style="color:#9900CC;">parse</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;http://google.com&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;&quot;</span>  <span style="color:#008000; font-style:italic;"># mesma coisa... :/</span></pre></div></div>

<p>Atualizando para versões mais recentes (como a 1.2.4) o problema acaba. Alguem mais passou por isso?</p>
<p>O FakeWeb é uma excelente ferramenta para testes reais onde dependemos da resposta de outros servidores. Ao inves de estabelecer uma comunicação real, que pode trazer outros tipos de problema de dificil detecção, simulamos a resposta para ver se o sistema se comporta de acordo com o esperado. </p>
<p>Sabe quando vc tem que testar se de 1, N, 0 elementos ou 404, essas coisas, e nem sempre vc pode forçar estas situações por ser complicado demais? Nesse ponto o FakeWeb é A ferramenta certa.</p>
]]></content:encoded>
			<wfw:commentRss>http://pacman.blog.br/blog/dicas/comportamento-estranho-do-fakeweb-versoes-antigas/feed/</wfw:commentRss>
		<slash:comments>3</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/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=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 reading <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><span style="color:#006666;">1000</span>..<span style="color:#006666;">9999</span><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><span style="color: red;">0</span><span style="color: #339933; font-weight: bold;">..</span><span style="color: red;">9999</span><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>
	</channel>
</rss>

