<?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>Carlos Gustavo (The Froskie)</title>
	<atom:link href="http://froskie.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://froskie.com/blog</link>
	<description>Internet, web, www...</description>
	<lastBuildDate>Fri, 02 Oct 2009 18:33:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Download de arquivos com Adobe AIR</title>
		<link>http://froskie.com/blog/2009/10/download-de-arquivos-com-adobe-air/</link>
		<comments>http://froskie.com/blog/2009/10/download-de-arquivos-com-adobe-air/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 18:33:17 +0000</pubDate>
		<dc:creator>Carlos Gustavo</dc:creator>
				<category><![CDATA[Flex & AIR]]></category>

		<guid isPermaLink="false">http://froskie.com/blog/?p=161</guid>
		<description><![CDATA[Em um projeto recente em Flex/AIR, um player em um thin client precisava tocar vídeos, áudios e imagens que vinham de uma central. Havia a necessidade de fazer isso offline para que não torrasse banda. Então precisei de uma classe que faria o download de um arquivo, vindo de uma URL, para dentro da pasta [...]]]></description>
			<content:encoded><![CDATA[<p>Em um projeto recente em <strong>Flex</strong>/<strong>AIR</strong>, um player em um <em>thin client</em> precisava tocar vídeos, áudios e imagens que vinham de uma central. Havia a necessidade de fazer isso offline para que não torrasse banda. Então precisei de uma classe que faria o download de um arquivo, vindo de uma URL, para dentro da pasta de armazenamento da aplicação (<strong>applicationStoreDirectory</strong>):</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> 
<span style="color: #000000;">&#123;</span>
    <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.events</span>.<span style="color: #004993;">Event</span>;
    <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.events</span>.<span style="color: #004993;">EventDispatcher</span>;
    <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.events</span>.<span style="color: #004993;">ProgressEvent</span>;
    <span style="color: #0033ff; font-weight: bold;">import</span> flash.filesystem.File;
    <span style="color: #0033ff; font-weight: bold;">import</span> flash.filesystem.FileMode;
    <span style="color: #0033ff; font-weight: bold;">import</span> flash.filesystem.FileStream;
    <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.net</span>.<span style="color: #004993;">URLRequest</span>;
    <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.net</span>.<span style="color: #004993;">URLStream</span>;
    <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.utils</span>.<span style="color: #004993;">ByteArray</span>;
&nbsp;
&nbsp;
    <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> FileDownloader extends <span style="color: #004993;">EventDispatcher</span>
    <span style="color: #000000;">&#123;</span>    
        <span style="color: #009900;">// url do arquivo</span>
        <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> fileURL<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span>;
&nbsp;
        <span style="color: #009900;">// url stream do arquivo</span>
        <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> urlStream<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">URLStream</span>;
&nbsp;
        <span style="color: #009900;">// file stream do arquivo</span>
        <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> fileStream<span style="color: #000000; font-weight: bold;">:</span>FileStream;
&nbsp;
        <span style="color: #009900;">// referencia fisica do arquivo completo</span>
        <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #6699cc; font-weight: bold;">var</span> fileRef<span style="color: #000000; font-weight: bold;">:</span>File;
&nbsp;
        <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> FileDownloader<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#123;</span>
&nbsp;
            <span style="color: #009900;">// inicia os streams</span>
            urlStream = <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">URLStream</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            fileStream = <span style="color: #0033ff; font-weight: bold;">new</span> FileStream<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            <span style="color: #009900;">// eventos da URL</span>
            urlStream.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">Event</span>.<span style="color: #004993;">COMPLETE</span>, <span style="color: #0033ff; font-weight: bold;">this</span>.onComplete<span style="color: #000000;">&#41;</span>;
            urlStream.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">ProgressEvent</span>.<span style="color: #004993;">PROGRESS</span>, <span style="color: #0033ff; font-weight: bold;">this</span>.onProgress<span style="color: #000000;">&#41;</span>;
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> <span style="color: #004993;">download</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">url</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</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: #009900;">// referencia o caminho do arquivo</span>
            fileURL = <span style="color: #004993;">url</span>;
&nbsp;
            <span style="color: #009900;">// abre o filestream do arquivo</span>
            urlStream.<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>fileURL<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
        <span style="color: #000000;">&#125;</span>
        <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> onProgress<span style="color: #000000;">&#40;</span>ev<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">ProgressEvent</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: #009900;">// para uso de barra de progresso, porcentagem, etc.</span>
            <span style="color: #0033ff; font-weight: bold;">this</span>.<span style="color: #004993;">dispatchEvent</span><span style="color: #000000;">&#40;</span>ev<span style="color: #000000;">&#41;</span>;
        <span style="color: #000000;">&#125;</span>
&nbsp;
        <span style="color: #0033ff; font-weight: bold;">private</span> <span style="color: #339966; font-weight: bold;">function</span> onComplete<span style="color: #000000;">&#40;</span>ev<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: #009900;">// separa o nome do arquivo</span>
            <span style="color: #6699cc; font-weight: bold;">var</span> urlParams<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Array</span> = fileURL.<span style="color: #004993;">split</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;/&quot;</span><span style="color: #000000;">&#41;</span>;
            urlParams.<span style="color: #004993;">reverse</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            <span style="color: #009900;">// cria a referencia dos arquivos</span>
            fileRef = File.applicationStorageDirectory.resolvePath<span style="color: #000000;">&#40;</span>urlParams<span style="color: #000000;">&#91;</span><span style="color: #000000; font-weight:bold;">0</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            <span style="color: #009900;">// abre o arquivo para escrita</span>
            fileStream.<span style="color: #004993;">open</span><span style="color: #000000;">&#40;</span>fileRef, FileMode.WRITE<span style="color: #000000;">&#41;</span>;
&nbsp;
            <span style="color: #6699cc; font-weight: bold;">var</span> byteArray<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">ByteArray</span> = <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">ByteArray</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            urlStream.<span style="color: #004993;">readBytes</span><span style="color: #000000;">&#40;</span>byteArray, <span style="color: #000000; font-weight:bold;">0</span>, urlStream.<span style="color: #004993;">bytesAvailable</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            <span style="color: #009900;">// escreve o arquivo temporario</span>
            fileStream.<span style="color: #004993;">writeBytes</span><span style="color: #000000;">&#40;</span>byteArray, <span style="color: #000000; font-weight:bold;">0</span>, byteArray.<span style="color: #004993;">length</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            <span style="color: #009900;">// fecha as streams</span>
            urlStream.<span style="color: #004993;">close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
            fileStream.<span style="color: #004993;">close</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
            <span style="color: #009900;">// dispara o evento</span>
            <span style="color: #0033ff; font-weight: bold;">this</span>.<span style="color: #004993;">dispatchEvent</span><span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">Event</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">Event</span>.<span style="color: #004993;">COMPLETE</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
        <span style="color: #000000;">&#125;</span>
&nbsp;
    <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Para usá-la, foi bem simples:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> fileDownloader<span style="color: #000000; font-weight: bold;">:</span>FileDownloader = <span style="color: #0033ff; font-weight: bold;">new</span> FileDownloader<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
fileDownloader.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">Event</span>.<span style="color: #004993;">COMPLETE</span>, <span style="color: #0033ff; font-weight: bold;">this</span>.downloadComplete<span style="color: #000000;">&#41;</span>;
fileDownloader.<span style="color: #004993;">download</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">'http://www.meusite.com/meuarquivo.jpg'</span><span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #339966; font-weight: bold;">function</span> downloadComplete<span style="color: #000000;">&#40;</span>ev<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: #009900;">// download completo</span>
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Apenas justificando porque não usei <strong>URLLoader</strong> ao invéis de <strong>URLStream</strong>: porque apesar de não ter sido implementado, a classe URLLoader não me daria os bytes já carregados do meu arquivo para que (caso quisesse), fosse escrevendo o arquivo a medida que ele fosse baixado.</p>
]]></content:encoded>
			<wfw:commentRss>http://froskie.com/blog/2009/10/download-de-arquivos-com-adobe-air/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework &#8211; Extendendo classes</title>
		<link>http://froskie.com/blog/2009/09/zend-framework-extendendo-classes/</link>
		<comments>http://froskie.com/blog/2009/09/zend-framework-extendendo-classes/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 17:11:19 +0000</pubDate>
		<dc:creator>Carlos Gustavo</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://froskie.com/blog/?p=147</guid>
		<description><![CDATA[O Zend Framework é cheio de recursos (na maior parte das vezes, sobra), mas não quer dizer que estes sejam 100% ajustados a nossa necessidade. Quando nós olhamos pra fora (outros frameworks, linguagens), achamos coisas que gostaríamos que houvessem lá, mas, por enquanto, não existem. Solução: extendemos as classes!
Uma defesa clássica sobre extender classe é: [...]]]></description>
			<content:encoded><![CDATA[<p>O <strong>Zend Framework</strong> é cheio de recursos (na maior parte das vezes, sobra), mas não quer dizer que estes sejam 100% ajustados a nossa necessidade. Quando nós olhamos pra fora (outros frameworks, linguagens), achamos coisas que gostaríamos que houvessem lá, mas, por enquanto, não existem. Solução: <strong>extendemos as classes</strong>!</p>
<p>Uma defesa clássica sobre extender classe é: nunca mexa no <em>core</em>! Claro! Você não vai sujeitar algo com 1 zilhão de commits e equipes desenvolvedoras as suas mãos falhas e exaltadas (nossa, que drama). A classe mais extendida, por ser a mais usada, é a classe do modelo: <strong>Zend_Db_Table</strong>. Quem já mexeu com Rails ou Cake sabe que faltam <em>triggers</em> de inserção ou validação, entre outras coisas.</p>
<p>Lá vem as pedras dizendo "<em>já que tem que fazer, por que não migra logo pro outro?</em>". Bom, vou ser rápido e responder que não vou discutir sobre isso.</p>
<p>Um exemplo de extensão e adição de triggers:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Frk_Db_Table <span style="color: #000000; font-weight: bold;">extends</span> Zend_Db_Table <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// dados da tabela</span>
    protected <span style="color: #000088;">$_data</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * insere os dados validando os filtros
     * @param $data dados a serem inseridos na tabela
     * @return Integer Chave primaria da linha inserida
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> insert<span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        try <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_data <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #339933;">;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">// valida filtros de eventos anteriores</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">method_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'before'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">before</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">method_exists</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'beforeInsert'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">beforeInsert</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
&nbsp;
            <span style="color: #666666; font-style: italic;">// insere os dados e retorna a OK</span>
            <span style="color: #b1b100;">return</span> parent<span style="color: #339933;">::</span><span style="color: #004000;">insert</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #009900;">&#125;</span> catch <span style="color: #009900;">&#40;</span>Exception <span style="color: #000088;">$e</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #666666; font-style: italic;">// trata o erro</span>
            <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Neste exemplo o método insert foi extendido para disparar dois triggers, befor e beforeinsert. Tomei esses dois exemplos vindo de outros frameworks. Muitas vezes são úteis. Segue um exemplo de implementação.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Usuario <span style="color: #000000; font-weight: bold;">extends</span> Frk_Db_Table <span style="color: #009900;">&#123;</span>
    protected <span style="color: #000088;">$_name</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'usuarios'</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> beforeInsert<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_data<span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'adicionado_em'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Y-m-d&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Sempre que for utilizado o método <strong>insert</strong><em>, a classe usuário adiciona o campo <em>adicionado_em</em>. É uma boa maneira de se economizar código, especialmente nas views, neste caso. Eu, particularmente, também sempre extendo a classe <strong>Zend_Controller_Action</strong>, com métodos que auxiliam durante os <em>requests</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://froskie.com/blog/2009/09/zend-framework-extendendo-classes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Novo layout, nova idéia&#8230;</title>
		<link>http://froskie.com/blog/2009/09/novo-layout-nova-ideia/</link>
		<comments>http://froskie.com/blog/2009/09/novo-layout-nova-ideia/#comments</comments>
		<pubDate>Sat, 26 Sep 2009 22:54:36 +0000</pubDate>
		<dc:creator>Carlos Gustavo</dc:creator>
				<category><![CDATA[Pessoal]]></category>

		<guid isPermaLink="false">http://froskie.com/blog/?p=142</guid>
		<description><![CDATA[Além de ter achado esse tema legal pra mudar a cara do blog, daqui pra frente pretendo manter uma idéia diferente: já que eu não estou com tempo pra ficar produzindo coisa pra cá ainda, além dos planos daqui incluirem os screencasts (em breve), vou continuar postando o que eu achar de relevante com explicação [...]]]></description>
			<content:encoded><![CDATA[<p>Além de ter achado esse tema legal pra mudar a cara do blog, daqui pra frente pretendo manter uma idéia diferente: já que eu não estou com tempo pra ficar produzindo coisa pra cá ainda, além dos planos daqui incluirem os screencasts (em breve), vou continuar postando o que eu achar de relevante com explicação por cima, pra não ficar com cara de "twittada".</p>
<p>Bom é isso aí.</p>
]]></content:encoded>
			<wfw:commentRss>http://froskie.com/blog/2009/09/novo-layout-nova-ideia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend_Date e MySQL Timestamp</title>
		<link>http://froskie.com/blog/2009/09/zend_date-e-mysql-timestamp/</link>
		<comments>http://froskie.com/blog/2009/09/zend_date-e-mysql-timestamp/#comments</comments>
		<pubDate>Sat, 26 Sep 2009 22:50:09 +0000</pubDate>
		<dc:creator>Carlos Gustavo</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://froskie.com/blog/?p=138</guid>
		<description><![CDATA[Precisava colocar um campo daqueles clássicos "atualizado em", em Timestamp do MySQL, num projeto em ZF.
Voilá:

...
$now = new Zend_Date&#40;&#41;;
$info&#91;'update_at'&#93; = $now-&#62;get&#40;Zend_Date::W3C&#41;;
...

]]></description>
			<content:encoded><![CDATA[<p>Precisava colocar um campo daqueles clássicos "atualizado em", em <strong>Timestamp</strong> do <strong>MySQL</strong>, num projeto em ZF.</p>
<p><em>Voilá:</em></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">...</span>
<span style="color: #000088;">$now</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Date<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$info</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'update_at'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$now</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get</span><span style="color: #009900;">&#40;</span>Zend_Date<span style="color: #339933;">::</span><span style="color: #004000;">W3C</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">...</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://froskie.com/blog/2009/09/zend_date-e-mysql-timestamp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Silverlight on Mac OS</title>
		<link>http://froskie.com/blog/2009/08/silverlight-on-mac-os/</link>
		<comments>http://froskie.com/blog/2009/08/silverlight-on-mac-os/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 14:54:12 +0000</pubDate>
		<dc:creator>Carlos Gustavo</dc:creator>
				<category><![CDATA[Pessoal]]></category>

		<guid isPermaLink="false">http://froskie.com/blog/?p=136</guid>
		<description><![CDATA[Será que é tão difícil reconhecer o meu OS? E melhor, que tal um link direto? Eu simplesmente ainda não consegui fazer o dowload do plugin, afinal, ele só libera o .EXE
]]></description>
			<content:encoded><![CDATA[<p><div id="attachment_135" class="wp-caption alignnone" style="width: 554px"><img src="http://froskie.com/blog/wp-content/uploads/2009/08/Imagem1.png" alt="Silverlight on Mac OS" title="Silverlight on Mac OS" width="544" height="466" class="size-full wp-image-135" /><p class="wp-caption-text">Silverlight on Mac OS</p></div><br />
Será que é tão difícil reconhecer o meu OS? E melhor, que tal um link direto? Eu simplesmente ainda não consegui fazer o dowload do plugin, afinal, ele só libera o .EXE</p>
]]></content:encoded>
			<wfw:commentRss>http://froskie.com/blog/2009/08/silverlight-on-mac-os/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crop ou Substring em Textfield</title>
		<link>http://froskie.com/blog/2009/04/crop-ou-substring-em-textfield/</link>
		<comments>http://froskie.com/blog/2009/04/crop-ou-substring-em-textfield/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 12:44:20 +0000</pubDate>
		<dc:creator>Carlos Gustavo</dc:creator>
				<category><![CDATA[Flash & Actionscript]]></category>

		<guid isPermaLink="false">http://froskie.com/blog/?p=123</guid>
		<description><![CDATA[Quando descobri que poderia fazer isto, realmente senti muita falta da possibilidade no HTML (pra falar bem a verdade, eu é que não sei com 100% de certeza se é possível): eu tenho um textfield ou uma caixa de texto, como queiram. Lá vou exibir um texto que na verdade é parte de um texto, [...]]]></description>
			<content:encoded><![CDATA[<p>Quando descobri que poderia fazer isto, realmente senti muita falta da possibilidade no HTML (pra falar bem a verdade, eu é que não sei com 100% de certeza se é possível): eu tenho um <strong><em>textfield</em></strong> ou uma <strong><em>caixa de texto</em></strong>, como queiram. Lá vou exibir um texto que na verdade é parte de um texto, ou resumo. Eu gostaria que no final desta caixa, na última linha, eu pudesse dar um <strong><em>crop</em></strong> ou <strong><em>substring</em></strong> e ficasse uma reticências indicando que há mais texto.</p>
<p>Mas como saber qual a última linha da caixa e inserir a reticências no lugar correto? Não é tão complicado, veja o código:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> texto<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = <span style="color: #990000;">&quot;Lorem ipsum dolor...&quot;</span>;
textField.<span style="color: #004993;">htmlText</span> = texto;
&nbsp;
<span style="color: #6699cc; font-weight: bold;">var</span> bottomLine<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Number</span> = textField.bottomScrollV<span style="color: #000000; font-weight: bold;">-</span><span style="color: #000000; font-weight:bold;">1</span>;
&nbsp;
<span style="color: #6699cc; font-weight: bold;">var</span> endText<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = textField.<span style="color: #004993;">getLineText</span><span style="color: #000000;">&#40;</span>bottomLine<span style="color: #000000;">&#41;</span>;
<span style="color: #6699cc; font-weight: bold;">var</span> iniText<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = texto.<span style="color: #004993;">substring</span><span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span>, texto.<span style="color: #004993;">indexOf</span><span style="color: #000000;">&#40;</span>endText<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #6699cc; font-weight: bold;">var</span> novoTexto<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = endText.<span style="color: #004993;">substr</span><span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">0</span>, endText.length<span style="color: #000000; font-weight: bold;">-</span><span style="color: #000000; font-weight:bold;">11</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">+</span><span style="color: #990000;">&quot;[...]&quot;</span>;
&nbsp;
textField.<span style="color: #004993;">htmlText</span> = novoTexto;</pre></div></div>

<p>Vamos analisar o código:</p>
<p><strong>Linhas 1 e 2:</strong> Aqui declaramos a variável do texto a ser inserido no textfield.<br />
<strong>Linha 4:</strong> Pegamos o número da última linha visível do textfield (aqui está o fundamental)<br />
<strong>Linha 6:</strong> Pegamos o texto da última linha existente no textfield<br />
<strong>Linha 7:</strong> Separamos o texto antes da última linha, para concatená-lo depois.<br />
<strong>Linha 9:</strong> Declaramos o novo texto como a concatenção do texto inicial com a última linha tratado com as reticências.<br />
<strong>Linha 11:</strong> Inserimos novamente o texto no textfield</p>
<p><em>Voilá</em>! Temos o texto reduzido ao tamanho da caixa. O melhor deste método é que se alterarmos o tamanho da caixa não precisamos mexer neste código, visto que ele trabalha com o tamanho da caixa, não variáveis de tamanho definidas. É isso aí.</p>
]]></content:encoded>
			<wfw:commentRss>http://froskie.com/blog/2009/04/crop-ou-substring-em-textfield/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PS2 = Play Station 2 (depende!)</title>
		<link>http://froskie.com/blog/2009/04/ps2-play-station-2-depende/</link>
		<comments>http://froskie.com/blog/2009/04/ps2-play-station-2-depende/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 00:48:09 +0000</pubDate>
		<dc:creator>Carlos Gustavo</dc:creator>
				<category><![CDATA[Pessoal]]></category>

		<guid isPermaLink="false">http://froskie.com/blog/?p=120</guid>
		<description><![CDATA[Bom, hoje, com a (normal) evolução da USB, quando eu escuto falar PS2, eu lembro Playstation 2, não mais aquela velha porta do teclado e mouse verde e roxa.
Pois bem, o problema é quando deixam estagiários fazer trabalho sério, como colocar descrições de produtos na internet. Se você tem um mouse USB, ele normalmente vem [...]]]></description>
			<content:encoded><![CDATA[<p>Bom, hoje, com a (normal) evolução da USB, quando eu escuto falar PS2, eu lembro Playstation 2, não mais aquela velha porta do teclado e mouse verde e roxa.</p>
<p>Pois bem, o problema é quando deixam estagiários fazer trabalho sério, como colocar descrições de produtos na internet. Se você tem um mouse USB, ele normalmente vem com um adaptador <a href="http://www.gazin.com.br/venda/detalhe.php?cod_P=448230450&amp;parc=NzA=#" target="_blank">pra playstation</a>?</p>
<p>Veja lá em descrição e me diga.</p>
]]></content:encoded>
			<wfw:commentRss>http://froskie.com/blog/2009/04/ps2-play-station-2-depende/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash e a Webcam</title>
		<link>http://froskie.com/blog/2009/04/flash-e-a-webcam/</link>
		<comments>http://froskie.com/blog/2009/04/flash-e-a-webcam/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 13:24:23 +0000</pubDate>
		<dc:creator>Carlos Gustavo</dc:creator>
				<category><![CDATA[Flash & Actionscript]]></category>

		<guid isPermaLink="false">http://froskie.com/blog/?p=114</guid>
		<description><![CDATA[
Caso você não saiba, o que é pouco provável, o Flash pode e faz muitas coisas com a webcam. Não só para vídeo conferências, mas para também interação com o usuário.
Exemplos clássicos, vindo do Flash 8, são estes:
Flash on Fire
Snow storm
Mas uns dos últimos lançamentos, produzidos no site da General Eletrics (GE, tapado), realmente é [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>Caso você não saiba, o que é pouco provável, o Flash pode e faz muitas coisas com a webcam. Não só para vídeo conferências, mas para também interação com o usuário.</p>
<p>Exemplos clássicos, vindo do Flash 8, são estes:</p>
<p><a href="http://www.gskinner.com/blog/archives/2005/11/flash_8_webcam_1.html" target="_blank">Flash on Fire<br />
</a><a href="http://www.gskinner.com/blog/archives/2005/08/flash_8_webcam.html" target="_blank">Snow storm</a></p>
<p>Mas uns dos últimos lançamentos, produzidos no site da General Eletrics (GE, tapado), realmente é muito interessante. Não bastasse interatividade ao máximo, utiliza o reconhecimento de imagem para implantar um ambiente 3D na tela. Vale MUITO a pena imprimir e se divertir:</p>
<p><a href="http://ge.ecomagination.com/smartgrid/#/augmented_reality" target="_blank">GE - Augmented Reality</a></div>
]]></content:encoded>
			<wfw:commentRss>http://froskie.com/blog/2009/04/flash-e-a-webcam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pixel Fonts e Acentos</title>
		<link>http://froskie.com/blog/2009/02/pixel-fonts-e-acentos/</link>
		<comments>http://froskie.com/blog/2009/02/pixel-fonts-e-acentos/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 17:12:28 +0000</pubDate>
		<dc:creator>Carlos Gustavo</dc:creator>
				<category><![CDATA[Flash & Actionscript]]></category>

		<guid isPermaLink="false">http://froskie.com/blog/?p=104</guid>
		<description><![CDATA[Numa espécie de bug meio esquisito, descobri uma situação com fontes pixel, neste caso em particular com a famosa Standard.
Como todos sabemos, para transformar uma Arial em fonte pixel no Flash, basta trocar o antialias para bitmaptext. O caso foi este: escrevi "São Paulo" num textfield estático, usando a fonte standard 07 65, e bem, [...]]]></description>
			<content:encoded><![CDATA[<p>Numa espécie de bug meio esquisito, descobri uma situação com fontes pixel, neste caso em particular com a famosa <em><strong>Standard</strong></em>.</p>
<p>Como todos sabemos, para transformar uma <strong><em>Arial</em></strong> em fonte pixel no Flash, basta trocar o <em>antialias</em> para <strong>bitmaptext</strong>. O caso foi este: escrevi "São Paulo" num textfield estático, usando a fonte <em><strong>standard 07 65</strong></em>, e bem, era fonte pixel, deixei em <em>bitmaptext</em> mesmo. O problema é que o "ã" não aparecia de maneira nenhuma. Perguntei pro meu <a href="http://www.wilsoniwano.com" target="_blank">atual companheiro</a> de design e meu <a href="http://blog.neyricardo.com" target="_blank">ex</a> (ui), nenhum dos dois soube do que se tratava</p>
<p>Caso resolvido da seguinte maneira: a fonte não aparecia o acento APENAS quando estava no <strong>bitmaptext</strong>, nos outros casos sem crise. Testei tanto no Flash CS3 como no CS4, o mesmo problema. Vejam nestas imagens exclusivas (nossa, que exagero):</p>
<div id="attachment_105" class="wp-caption alignnone" style="width: 310px"><a href="http://froskie.com/blog/wp-content/uploads/2009/02/imagem1.jpg" target="_blank"><img class="size-medium wp-image-105" title="Flash CS3 e as Pixels fonts" src="http://froskie.com/blog/wp-content/uploads/2009/02/imagem1-300x84.jpg" alt="Flash CS3 e as Pixels fonts" width="300" height="84" /></a><p class="wp-caption-text">Flash CS3 e as Pixels fonts</p></div>
<div id="attachment_106" class="wp-caption alignnone" style="width: 310px"><a href="http://froskie.com/blog/wp-content/uploads/2009/02/imagem2.jpg" target="_blank"><img class="size-medium wp-image-106" title="Flash CS4 e as Pixels fonts" src="http://froskie.com/blog/wp-content/uploads/2009/02/imagem2-300x103.jpg" alt="Flash CS4 e as Pixels fonts" width="300" height="103" /></a><p class="wp-caption-text">Flash CS4 e as Pixels fonts</p></div>
<p>Ah! Vale lembrar que estou no <strong>Mac OS</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://froskie.com/blog/2009/02/pixel-fonts-e-acentos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Custom Event &#8211; Flash AS3</title>
		<link>http://froskie.com/blog/2009/01/custom-event-flash-as3/</link>
		<comments>http://froskie.com/blog/2009/01/custom-event-flash-as3/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 12:28:09 +0000</pubDate>
		<dc:creator>Carlos Gustavo</dc:creator>
				<category><![CDATA[Flash & Actionscript]]></category>

		<guid isPermaLink="false">http://froskie.com/blog/?p=100</guid>
		<description><![CDATA[Os eventos no AS3 são de grande ajuda, mas por uma questão de lógica e workflow, as vezes precisamos utilizar de eventos customizados, que expressem melhor o que componentes ou classes estão fazendo.
Para criar os eventos customizados, faça em 3 passos:
1. Crie a classe do evento que extende a class Event do Flash, declarando como [...]]]></description>
			<content:encoded><![CDATA[<p>Os eventos no <strong>AS3</strong> são de grande ajuda, mas por uma questão de lógica e workflow, as vezes precisamos utilizar de eventos customizados, que expressem melhor o que componentes ou classes estão fazendo.</p>
<p>Para criar os eventos customizados, faça em 3 passos:</p>
<p>1. Crie a classe do evento que extende a class <strong><em>Event</em></strong> do Flash, declarando como costante os tipos dos eventos:</p>
<p><em>Arquivo CustomEvent.as</em></p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span> <span style="color: #000000;">&#123;</span>
&nbsp;
        <span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.events</span>.<span style="color: #004993;">Event</span>;
&nbsp;
        <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> CustomEvent extends <span style="color: #004993;">Event</span><span style="color: #000000;">&#123;</span>
&nbsp;
                <span style="color: #0033ff; font-weight: bold;">public</span> static const THING_DONE<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = <span style="color: #990000;">&quot;thing_done&quot;</span>;
                <span style="color: #0033ff; font-weight: bold;">public</span> static const ANOTHER_STUFF<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = <span style="color: #990000;">&quot;another_stuff&quot;</span>;
&nbsp;
                <span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> SlideshowEvent<span style="color: #000000;">&#40;</span><span style="color: #004993;">type</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span>, <span style="color: #004993;">bubbles</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Boolean</span> = <span style="color: #0033ff; font-weight: bold;">false</span>, <span style="color: #004993;">cancelable</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Boolean</span> = <span style="color: #0033ff; font-weight: bold;">false</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#123;</span>
                        <span style="color: #0033ff; font-weight: bold;">super</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">type</span>, <span style="color: #004993;">bubbles</span>, <span style="color: #004993;">cancelable</span><span style="color: #000000;">&#41;</span>;
            <span style="color: #000000;">&#125;</span>
        <span style="color: #000000;">&#125;</span>
&nbsp;
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>Com isso você criou o evento "<strong>CustomEvent</strong>" com os tipos "<strong>THING_DONE</strong>" e "<strong>ANOTHER_STUFF</strong>".</p>
<p>2. Na classe que dispara o evento customizado, insira o seguinte:</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #004993;">dispatchEvent</span><span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> CustomEvent<span style="color: #000000;">&#40;</span>CustomEvent.THING_DONE<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>Com isso, a classe "dispara" o evento customizado do tipo "<strong>THING_DONE</strong>"</p>
<p>3. Para capturar o evento, basta adicionar o listener referenciando a classe</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;">MinhaClasse.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span>CustomEvent.THING_DONE, <span style="color: #0033ff; font-weight: bold;">this</span>.doSomething<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> doSomething<span style="color: #000000;">&#40;</span>ce<span style="color: #000000; font-weight: bold;">:</span>CustomEvent<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>
&nbsp;
   <span style="color: #009900;">// ...</span>
&nbsp;
<span style="color: #000000;">&#125;</span></pre></div></div>

<p>É isso. Muito bom pra interação com eventos customizados, como slideshow, menu, etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://froskie.com/blog/2009/01/custom-event-flash-as3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
