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

  <title><![CDATA[Rogério Lino]]></title>
  <link href="http://rogeriolino.com/atom.xml" rel="self"/>
  <link href="http://rogeriolino.com/"/>
  <updated>2015-01-07T22:47:42-02:00</updated>
  <id>http://rogeriolino.com/</id>
  <author>
    <name><![CDATA[Rogério Lino]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[PHP: JsonSerializable]]></title>
    <link href="http://rogeriolino.com/2014/06/09/php-jsonserializable/"/>
    <updated>2014-06-09T14:44:23-03:00</updated>
    <id>http://rogeriolino.com/2014/06/09/php-jsonserializable</id>
    <content type="html"><![CDATA[<p>Desde a <strong>versão 5.4</strong> do PHP ficou mais fácil transformar entidades em <strong>JSON</strong> através da função <em>json_encode()</em>. Basta implementar a interface <a href="http://www.php.net/manual/class.jsonserializable.php">JsonSerializable</a>, no qual o único método que precisa ser implementado pela subclasse é o <em>jsonSerialize</em>.</p>

<!-- more -->




<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
</pre></td><td class='code'><pre><code class='php'><span class='line'><span class="k">class</span> <span class="nc">User</span> <span class="k">implements</span> <span class="nx">\JsonSerializable</span> <span class="p">{</span>
</span><span class='line'>
</span><span class='line'>    <span class="k">private</span> <span class="nv">$username</span><span class="p">;</span>
</span><span class='line'>    <span class="k">private</span> <span class="nv">$firstName</span><span class="p">;</span>
</span><span class='line'>    <span class="k">private</span> <span class="nv">$lastName</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>    <span class="o">...</span>
</span><span class='line'>
</span><span class='line'>    <span class="k">public</span> <span class="k">function</span> <span class="nf">jsonSerialize</span><span class="p">()</span> <span class="p">{</span>
</span><span class='line'>        <span class="k">return</span> <span class="k">array</span><span class="p">(</span>
</span><span class='line'>            <span class="s1">&#39;username&#39;</span> <span class="o">=&gt;</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">username</span><span class="p">,</span>
</span><span class='line'>            <span class="s1">&#39;firstName&#39;</span> <span class="o">=&gt;</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">firstName</span><span class="p">,</span>
</span><span class='line'>            <span class="s1">&#39;lastName&#39;</span> <span class="o">=&gt;</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">lastName</span><span class="p">,</span>
</span><span class='line'>            <span class="s1">&#39;fullName&#39;</span> <span class="o">=&gt;</span> <span class="s2">&quot;</span><span class="si">{</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">firstName</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">lastName</span><span class="si">}</span><span class="s2">&quot;</span>
</span><span class='line'>        <span class="p">);</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>Serializando:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='php'><span class='line'><span class="nv">$user</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">User</span><span class="p">();</span>
</span><span class='line'><span class="nv">$user</span><span class="o">-&gt;</span><span class="na">setUsername</span><span class="p">(</span><span class="s2">&quot;rogeriolino&quot;</span><span class="p">);</span>
</span><span class='line'><span class="nv">$user</span><span class="o">-&gt;</span><span class="na">setFirstName</span><span class="p">(</span><span class="s2">&quot;Rogério&quot;</span><span class="p">);</span>
</span><span class='line'><span class="nv">$user</span><span class="o">-&gt;</span><span class="na">setLastName</span><span class="p">(</span><span class="s2">&quot;Lino&quot;</span><span class="p">);</span>
</span><span class='line'><span class="k">echo</span> <span class="nb">json_encode</span><span class="p">(</span><span class="nv">$user</span><span class="p">);</span>
</span></code></pre></td></tr></table></div></figure>


<p>Resultado:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='json'><span class='line'><span class="p">{</span>
</span><span class='line'>    <span class="nt">&quot;username&quot;</span><span class="p">:</span> <span class="s2">&quot;rogeriolino&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="nt">&quot;firstName&quot;</span><span class="p">:</span> <span class="s2">&quot;Rogério&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="nt">&quot;lastName&quot;</span><span class="p">:</span> <span class="s2">&quot;Lino&quot;</span><span class="p">,</span>
</span><span class='line'>    <span class="nt">&quot;fullName&quot;</span><span class="p">:</span> <span class="s2">&quot;Rogério Lino&quot;</span><span class="p">,</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p></p>

<p>Essa implementação se torna muito útil para desenvolvimento de APIs <strong>RESTful</strong> e <strong>ajax responses</strong> (json response).</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Session Keep Alive]]></title>
    <link href="http://rogeriolino.com/2014/05/12/session-keep-alive/"/>
    <updated>2014-05-12T13:14:14-03:00</updated>
    <id>http://rogeriolino.com/2014/05/12/session-keep-alive</id>
    <content type="html"><![CDATA[<p>Uma maneira fácil de manter a sessão ativa no lado do servidor sem sobrecarregá-lo com longos tempos de timeout, é usar um script que redireciona o usuário para a tela de login após um determinado período de inatividade (teclado e mouse ociosos), e fazer requisições assíncronas ao servidor para manter a sessão ativa durante a atividade.</p>

<!-- more -->


<p>Resumindo, enquanto usuário está utilizando a aplicação (digitando ou movendo o cursor) uma requisição assíncrona é disparada a cada X minutos (ping), e quando o usuário ficar ocioso começa a contar o tempo para redirecioná-lo para a tela de login. É importante que esse tempo para redirecionar para o login seja menor do que o timeout do servidor.</p>

<p>Para implementar essa ideia, vou utilizar um plugin jQuery que monitora a atividade do usuário (teclado e mouse): <a href="https://github.com/rogeriolino/jquery-idletimer.">https://github.com/rogeriolino/jquery-idletimer.</a></p>

<p>Abaixo o trecho javascript para disparar o ping e fazer o logout após 10 minutos de ociosidade.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
</pre></td><td class='code'><pre><code class='js'><span class='line'><span class="c1">// session keep alive</span>
</span><span class='line'><span class="p">;(</span><span class="kd">function</span><span class="p">(</span><span class="nx">$</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>    <span class="s2">&quot;use strict&quot;</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>    <span class="kd">var</span> <span class="nx">pingTime</span> <span class="o">=</span> <span class="mi">60</span><span class="p">;</span> <span class="c1">// ping a cada 60 segundos</span>
</span><span class='line'>    <span class="kd">var</span> <span class="nx">count</span> <span class="o">=</span> <span class="nx">pingTime</span><span class="p">;</span>
</span><span class='line'>    <span class="nx">$</span><span class="p">.</span><span class="nx">idleTimer</span><span class="p">({</span>
</span><span class='line'>        <span class="nx">time</span><span class="o">:</span> <span class="mi">10</span> <span class="o">*</span> <span class="mi">60</span><span class="p">,</span> <span class="c1">// 10 minutos para timeout</span>
</span><span class='line'>        <span class="nx">start</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
</span><span class='line'>            <span class="nx">count</span> <span class="o">=</span> <span class="nx">pingTime</span><span class="p">;</span>
</span><span class='line'>        <span class="p">},</span>
</span><span class='line'>        <span class="nx">change</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">it</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>            <span class="nx">count</span><span class="o">--</span><span class="p">;</span>
</span><span class='line'>            <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">count</span><span class="p">);</span>
</span><span class='line'>            <span class="k">if</span> <span class="p">(</span><span class="nx">count</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>                <span class="nx">count</span> <span class="o">=</span> <span class="nx">pingTime</span><span class="p">;</span>
</span><span class='line'>                <span class="nx">$</span><span class="p">.</span><span class="nx">ajax</span><span class="p">({</span> <span class="nx">url</span><span class="o">:</span> <span class="s1">&#39;/ping.php&#39;</span> <span class="p">});</span>
</span><span class='line'>            <span class="p">}</span>
</span><span class='line'>        <span class="p">},</span>
</span><span class='line'>        <span class="nx">end</span><span class="o">:</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
</span><span class='line'>            <span class="nb">window</span><span class="p">.</span><span class="nx">location</span><span class="p">.</span><span class="nx">href</span> <span class="o">=</span> <span class="s1">&#39;/logout.php&#39;</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>    <span class="p">});</span>
</span><span class='line'><span class="p">})(</span><span class="nx">jQuery</span><span class="p">);</span>
</span></code></pre></td></tr></table></div></figure>


<p>Arquivo PHP para receber as requisições e abrir a sessão mantendo-a ativa:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='php'><span class='line'><span class="o">&lt;?</span><span class="nx">php</span>
</span><span class='line'>
</span><span class='line'><span class="nb">session_start</span><span class="p">();</span>
</span></code></pre></td></tr></table></div></figure>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Stack Overflow Em Português]]></title>
    <link href="http://rogeriolino.com/2014/01/29/stack-overflow-em-portugues/"/>
    <updated>2014-01-29T20:47:48-02:00</updated>
    <id>http://rogeriolino.com/2014/01/29/stack-overflow-em-portugues</id>
    <content type="html"><![CDATA[<p>Foi anunciado hoje no blog do <a href="http://blog.stackoverflow.com/2014/01/ola-mundo-announcing-stack-overflow-in-portuguese/?cb=1">StackExchange</a> o lançamento oficial do <a href="http://pt.stackoverflow.com/">Stack Overflow em Português</a>. Conforme destacado na publicação do blog, esse é o primeiro Stack Overflow internacional.</p>

<p><img src="http://blog.stackoverflow.com/wp-content/uploads/2014-01-28_11-08-04-1024x505.jpg" alt="" /></p>

<p>Visite agora mesmo a nova comunidade e crie a sua conta: <a href="http://pt.stackoverflow.com">http://pt.stackoverflow.com</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Simple Javascript Support Detection]]></title>
    <link href="http://rogeriolino.com/2014/01/10/simple-javascript-support-detection/"/>
    <updated>2014-01-10T21:57:26-02:00</updated>
    <id>http://rogeriolino.com/2014/01/10/simple-javascript-support-detection</id>
    <content type="html"><![CDATA[<p>Partindo do princípio que o seu navegador não suporta javascript e depois contrariando via o próprio javascript, é possível fazer uma simples verificação se o navegador do usuário está com javascript habilitado ou não.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
</pre></td><td class='code'><pre><code class='html'><span class='line'><span class="cp">&lt;!DOCTYPE html&gt;</span>
</span><span class='line'><span class="nt">&lt;html</span> <span class="na">class=</span><span class="s">&quot;no-js&quot;</span> <span class="na">lang=</span><span class="s">&quot;pt-BR&quot;</span><span class="nt">&gt;</span>
</span><span class='line'><span class="nt">&lt;head&gt;</span>
</span><span class='line'>    <span class="nt">&lt;title&gt;</span>JS detection<span class="nt">&lt;/title&gt;</span>
</span><span class='line'>    <span class="nt">&lt;script&gt;</span><span class="nb">document</span><span class="p">.</span><span class="nx">documentElement</span><span class="p">.</span><span class="nx">className</span> <span class="o">=</span> <span class="nb">document</span><span class="p">.</span><span class="nx">documentElement</span><span class="p">.</span><span class="nx">className</span><span class="p">.</span><span class="nx">replace</span><span class="p">(</span><span class="s2">&quot;no-js&quot;</span><span class="p">,</span><span class="s2">&quot;js&quot;</span><span class="p">);</span><span class="nt">&lt;/script&gt;</span>
</span><span class='line'>
</span><span class='line'>    <span class="nt">&lt;style&gt;</span>
</span><span class='line'>        <span class="nc">.js</span> <span class="nc">.alert-danger</span> <span class="p">{</span> <span class="k">display</span><span class="o">:</span> <span class="k">none</span><span class="p">;</span> <span class="p">}</span>
</span><span class='line'>        <span class="nc">.no-js</span> <span class="nc">.alert-success</span> <span class="p">{</span> <span class="k">display</span><span class="o">:</span> <span class="k">none</span><span class="p">;</span> <span class="p">}</span>
</span><span class='line'>    <span class="nt">&lt;/style&gt;</span>
</span><span class='line'><span class="nt">&lt;/head&gt;</span>
</span><span class='line'><span class="nt">&lt;body&gt;</span>
</span><span class='line'>
</span><span class='line'>    <span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">&quot;alert alert-danger&quot;</span><span class="nt">&gt;</span>O seu navegador não possui suporte à <span class="nt">&lt;b&gt;</span>Javascript<span class="nt">&lt;/b&gt;&lt;/div&gt;</span>
</span><span class='line'>
</span><span class='line'>    <span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">&quot;alert alert-success&quot;</span><span class="nt">&gt;</span>O suporte à <span class="nt">&lt;b&gt;</span>Javascript<span class="nt">&lt;/b&gt;</span> está ativado<span class="nt">&lt;/div&gt;</span>
</span><span class='line'>
</span><span class='line'><span class="nt">&lt;/body&gt;</span>
</span><span class='line'><span class="nt">&lt;/html&gt;</span>
</span></code></pre></td></tr></table></div></figure>


<p>Visualizar <a href="http://dev.rogeriolino.com/exemplos/javascript/js-detection/">demo online</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[FreezeHeader jQuery Plugin]]></title>
    <link href="http://rogeriolino.com/2014/01/08/freezeheader-jquery-plugin/"/>
    <updated>2014-01-08T14:58:41-02:00</updated>
    <id>http://rogeriolino.com/2014/01/08/freezeheader-jquery-plugin</id>
    <content type="html"><![CDATA[<p>Se você está precisando de algum script para manter o cabeçalho da tabela sempre visível mesmo ao rolar a página, lhe apresento o plugin (jQuery) <a href="https://github.com/laertejjunior/freezeheader">freezeheader</a> criado pelo menu amigo <a href="https://github.com/laertejjunior">Laerte</a>.</p>

<p>Aproveitando também para parabenizá-lo por seu plugin ter ficado entre os <a href="http://www.jqueryscript.net/blog/Top-100-Best-Free-jQuery-Plugins-From-2013.html">100 melhores de 2013</a>.</p>

<p><strong>Links</strong></p>

<p>Demo: <a href="http://laertejjunior.github.io/freezeheader">http://laertejjunior.github.io/freezeheader</a>
Github: <a href="https://github.com/laertejjunior/freezeheader">https://github.com/laertejjunior/freezeheader</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[PHP: Slim Framework Action Based]]></title>
    <link href="http://rogeriolino.com/2013/12/27/php-slim-framework-action-based/"/>
    <updated>2013-12-27T10:06:51-02:00</updated>
    <id>http://rogeriolino.com/2013/12/27/php-slim-framework-action-based</id>
    <content type="html"><![CDATA[<p>Há algum tempo utilizo o <a href="http://www.slimframework.com/">Slim Framework</a> como base de meus projetos. E o motivo é sua simplicidade, velocidade e facilidade.</p>

<p>E para criar CRUD, eu utilizo um trecho de código para trabalhar rotas semelhante aos frameworks action based. Seguindo a convenção <strong>/controlador/método</strong>.</p>

<p><strong>Exemplo:</strong></p>

<p>Para a URI <strong>/clients/add</strong> terei uma classe controladora <strong>ClientsController</strong> com um método público (a ação) <strong>add</strong>. E o script tentará renderizar a página <strong>add.php</strong> dentro do diretório <strong>clients</strong>. E para a URI <strong>/clients/view/1</strong> será necessário ter o método <strong>view</strong> que recebe um parâmetro (nesse caso &ldquo;1&rdquo;).</p>

<p>Abaixo segue o trecho semelhante ao que está disponível no meu repositório no Github (porém nesse repositório utilizo o Twig como template engine): <a href="https://github.com/rogeriolino/slimapp-skeleton">rogeriolino/slimapp-skeleton</a>.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
</pre></td><td class='code'><pre><code class='php'><span class='line'><span class="nv">$app</span><span class="o">-&gt;</span><span class="na">any</span><span class="p">(</span><span class="s1">&#39;/:controller(/)(:action(/)(:params+))&#39;</span><span class="p">,</span> <span class="k">function</span><span class="p">(</span><span class="nv">$controller</span><span class="p">,</span> <span class="nv">$action</span> <span class="o">=</span> <span class="s1">&#39;index&#39;</span><span class="p">,</span> <span class="nv">$params</span> <span class="o">=</span> <span class="k">array</span><span class="p">())</span> <span class="k">use</span> <span class="p">(</span><span class="nv">$app</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>    <span class="c1">// transforma o parâmetro :controller no nome da classe controladora (com namespace)</span>
</span><span class='line'>    <span class="nv">$class</span> <span class="o">=</span> <span class="s2">&quot;MeuNamespace</span><span class="se">\\</span><span class="s2">&quot;</span> <span class="o">.</span> <span class="nb">ucfirst</span><span class="p">(</span><span class="nv">$controller</span><span class="p">)</span> <span class="o">.</span> <span class="s2">&quot;Controller&quot;</span><span class="p">;</span>
</span><span class='line'>    <span class="k">try</span> <span class="p">{</span>
</span><span class='line'>        <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nb">class_exists</span><span class="p">(</span><span class="nv">$class</span><span class="p">))</span> <span class="p">{</span>
</span><span class='line'>            <span class="k">throw</span> <span class="k">new</span> <span class="nx">\Exception</span><span class="p">(</span><span class="s1">&#39;Controlador não encontrado&#39;</span><span class="p">);</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>        <span class="nv">$ctrl</span> <span class="o">=</span> <span class="k">new</span> <span class="nv">$class</span><span class="p">(</span><span class="nv">$app</span><span class="p">);</span>
</span><span class='line'>        <span class="nv">$methodName</span> <span class="o">=</span> <span class="nb">preg_replace</span><span class="p">(</span><span class="s1">&#39;/[^A-z0-9]/&#39;</span><span class="p">,</span> <span class="s1">&#39;_&#39;</span><span class="p">,</span> <span class="nv">$action</span><span class="p">);</span>
</span><span class='line'>        <span class="nv">$ref</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">\ReflectionMethod</span><span class="p">(</span><span class="nv">$class</span><span class="p">,</span> <span class="nv">$methodName</span><span class="p">);</span>
</span><span class='line'>        <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="nv">$ref</span><span class="o">-&gt;</span><span class="na">isPublic</span><span class="p">())</span> <span class="p">{</span>
</span><span class='line'>            <span class="k">throw</span> <span class="k">new</span> <span class="nx">\Exception</span><span class="p">(</span><span class="s1">&#39;O método do controlador não é público.&#39;</span><span class="p">);</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>        <span class="nv">$view</span> <span class="o">=</span> <span class="nv">$methodName</span><span class="p">;</span>
</span><span class='line'>        <span class="nv">$rs</span> <span class="o">=</span> <span class="nv">$ref</span><span class="o">-&gt;</span><span class="na">invokeArgs</span><span class="p">(</span><span class="nv">$ctrl</span><span class="p">,</span> <span class="nv">$params</span><span class="p">);</span>
</span><span class='line'>        <span class="k">if</span> <span class="p">(</span><span class="nv">$rs</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>            <span class="nv">$view</span> <span class="o">=</span> <span class="nv">$rs</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>        <span class="nv">$app</span><span class="o">-&gt;</span><span class="na">render</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{</span><span class="nv">$controller</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="nv">$view</span><span class="si">}</span><span class="s2">.php&quot;</span><span class="p">);</span>
</span><span class='line'>    <span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">\Exception</span> <span class="nv">$e</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>        <span class="nv">$app</span><span class="o">-&gt;</span><span class="na">notFound</span><span class="p">();</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'><span class="p">});</span>
</span></code></pre></td></tr></table></div></figure>


<p>Para utilizar o <a href="https://github.com/rogeriolino/slimapp-skeleton">slimapp-skeleton</a> basta clonar o repositório e depois fazer a instalação das dependências via <a href="http://getcomposer.org/">Composer</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Angular.js: Inplace Editing]]></title>
    <link href="http://rogeriolino.com/2013/12/12/angular-js-inplace-editing/"/>
    <updated>2013-12-12T11:57:12-02:00</updated>
    <id>http://rogeriolino.com/2013/12/12/angular-js-inplace-editing</id>
    <content type="html"><![CDATA[<p><strong>HTML</strong></p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
</pre></td><td class='code'><pre><code class='html'><span class='line'><span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">&quot;container&quot;</span> <span class="na">ng-app=</span><span class="s">&quot;todo&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>    <span class="nt">&lt;div</span> <span class="na">ng-controller=</span><span class="s">&quot;todoCtrl&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>        <span class="nt">&lt;form</span> <span class="na">ng-submit=</span><span class="s">&quot;add()&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>            <span class="nt">&lt;input</span> <span class="na">type=</span><span class="s">&quot;text&quot;</span> <span class="na">class=</span><span class="s">&quot;form-control&quot;</span> <span class="na">placeholder=</span><span class="s">&quot;New task...&quot;</span> <span class="na">ng-model=</span><span class="s">&quot;newTodo&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>            <span class="nt">&lt;button</span> <span class="na">class=</span><span class="s">&quot;btn btn-primary&quot;</span><span class="nt">&gt;</span>Add<span class="nt">&lt;/button&gt;</span>
</span><span class='line'>        <span class="nt">&lt;/form&gt;</span>
</span><span class='line'>        <span class="nt">&lt;ul&gt;</span>
</span><span class='line'>            <span class="nt">&lt;li</span> <span class="na">ng-repeat=</span><span class="s">&quot;todo in todos&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>                <span class="nt">&lt;span</span> <span class="na">ng-click=</span><span class="s">&quot;editing = true&quot;</span> <span class="na">ng-hide=</span><span class="s">&quot;editing&quot;</span><span class="nt">&gt;</span><span class="nt">&lt;/span&gt;</span>
</span><span class='line'>                <span class="nt">&lt;span</span> <span class="na">ng-show=</span><span class="s">&quot;editing&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>                    <span class="nt">&lt;input</span> <span class="na">type=</span><span class="s">&quot;text&quot;</span> <span class="na">class=</span><span class="s">&quot;form-control&quot;</span> <span class="na">ng-model=</span><span class="s">&quot;todo.text&quot;</span> <span class="na">ng-blur=</span><span class="s">&quot;editing = false&quot;</span> <span class="na">ng-required</span><span class="nt">&gt;</span>
</span><span class='line'>                    <span class="nt">&lt;a</span> <span class="na">data-ng-click=</span><span class="s">&quot;editing = false&quot;</span> <span class="na">class=</span><span class="s">&quot;glyphicon glyphicon-ok&quot;</span><span class="nt">&gt;&lt;/a&gt;</span>
</span><span class='line'>                <span class="nt">&lt;/span&gt;</span>
</span><span class='line'>            <span class="nt">&lt;/li&gt;</span>
</span><span class='line'>        <span class="nt">&lt;/ul&gt;</span>
</span><span class='line'>    <span class="nt">&lt;/div&gt;</span>
</span><span class='line'><span class="nt">&lt;/div&gt;</span>
</span></code></pre></td></tr></table></div></figure>


<p><strong>Javascript</strong></p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
</pre></td><td class='code'><pre><code class='js'><span class='line'><span class="kd">var</span> <span class="nx">app</span> <span class="o">=</span> <span class="nx">angular</span><span class="p">.</span><span class="nx">module</span><span class="p">(</span><span class="s1">&#39;todo&#39;</span><span class="p">,</span> <span class="p">[]);</span>
</span><span class='line'>
</span><span class='line'><span class="nx">app</span><span class="p">.</span><span class="nx">controller</span><span class="p">(</span><span class="s1">&#39;todoCtrl&#39;</span><span class="p">,</span> <span class="kd">function</span><span class="p">(</span><span class="nx">$scope</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>
</span><span class='line'>    <span class="nx">$scope</span><span class="p">.</span><span class="nx">todos</span> <span class="o">=</span> <span class="p">[</span>
</span><span class='line'>        <span class="p">{</span><span class="nx">text</span><span class="o">:</span> <span class="s2">&quot;First task&quot;</span><span class="p">}</span>
</span><span class='line'>    <span class="p">];</span>
</span><span class='line'>
</span><span class='line'>    <span class="nx">$scope</span><span class="p">.</span><span class="nx">add</span> <span class="o">=</span> <span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
</span><span class='line'>        <span class="k">if</span> <span class="p">(</span><span class="nx">$scope</span><span class="p">.</span><span class="nx">newTodo</span> <span class="o">&amp;&amp;</span> <span class="nx">$scope</span><span class="p">.</span><span class="nx">newTodo</span> <span class="o">!=</span> <span class="s1">&#39;&#39;</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>            <span class="nx">$scope</span><span class="p">.</span><span class="nx">todos</span><span class="p">.</span><span class="nx">push</span><span class="p">({</span>
</span><span class='line'>                <span class="nx">text</span><span class="o">:</span> <span class="nx">$scope</span><span class="p">.</span><span class="nx">newTodo</span>
</span><span class='line'>            <span class="p">});</span>
</span><span class='line'>            <span class="nx">$scope</span><span class="p">.</span><span class="nx">newTodo</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="p">});</span>
</span></code></pre></td></tr></table></div></figure>


<p><a href="http://jsfiddle.net/rogeriolino/DTF2f/">JSFiddle demo</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Futeria on Firefox OS]]></title>
    <link href="http://rogeriolino.com/2013/10/03/futeria-on-firefox-os/"/>
    <updated>2013-10-03T12:50:00-03:00</updated>
    <id>http://rogeriolino.com/2013/10/03/futeria-on-firefox-os</id>
    <content type="html"><![CDATA[<p>Após inscrever meu aplicativo <a href="https://play.google.com/store/apps/details?id=net.futeria.app">Futeria</a> e ganhar um <a href="http://www.geeksphone.com/">Geeksphone Keon</a> (developer preview) da Mozilla. Anuncio que em breve o aplicativo também estará disponível para o <a href="http://www.mozilla.org/en-US/firefox/os/">Firefox OS</a>.</p>

<!-- more -->


<p><img src="http://rogeriolino.com/uploads/2013/10/firefoxos.jpg" alt="Developer preview Firefox OS" /></p>

<p><strong>[update 2013-10-09]</strong></p>

<p>Futeria aprovado e disponível!</p>

<p><a href="https://marketplace.firefox.com/app/futeria">https://marketplace.firefox.com/app/futeria</a></p>

<p>Para demais dispositivos ou desktops, pode acessar a versão online direto <a href="http://m.futeria.net">http://m.futeria.net</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[PHP: 5.5 New Features]]></title>
    <link href="http://rogeriolino.com/2013/07/17/php-5-5-new-features/"/>
    <updated>2013-07-17T18:23:11-03:00</updated>
    <id>http://rogeriolino.com/2013/07/17/php-5-5-new-features</id>
    <content type="html"><![CDATA[<p>A versão 5.5 do PHP foi lançada no mês passado, e trouxe algumas funcionalidades relevantes. Entre elas, seguem abaixo as mais interessantes (pelo menos para mim):</p>

<h3>Generators</h3>

<p>Com o <a href="http://br1.php.net/manual/en/language.generators.overview.php">Generators</a> você pode iterar com um dado dentro de uma função sem a necessidade de criar um array para ser retornado.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class='php'><span class='line'><span class="k">function</span> <span class="nf">numerosInteiros</span><span class="p">(</span><span class="nv">$minimo</span><span class="p">,</span> <span class="nv">$maximo</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">for</span> <span class="p">(</span><span class="nv">$i</span> <span class="o">=</span> <span class="nv">$minimo</span><span class="p">;</span> <span class="nv">$i</span> <span class="o">&lt;=</span> <span class="nv">$maximo</span><span class="p">;</span> <span class="nv">$i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>        <span class="c1">// a keyword yield &quot;libera&quot; a variável $i para a iteração (sem sair/retornar da/a função)</span>
</span><span class='line'>        <span class="k">yield</span> <span class="nv">$i</span><span class="p">;</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="k">for</span> <span class="p">(</span><span class="nx">numerosInteiros</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span> <span class="k">as</span> <span class="nv">$numero</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">echo</span> <span class="s2">&quot;</span><span class="si">$numero</span><span class="s2"> &quot;</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>Ou um exemplo do próprio site php.net</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
</pre></td><td class='code'><pre><code class='php'><span class='line'><span class="k">function</span> <span class="nf">xrange</span><span class="p">(</span><span class="nv">$start</span><span class="p">,</span> <span class="nv">$limit</span><span class="p">,</span> <span class="nv">$step</span> <span class="o">=</span> <span class="mi">1</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">if</span> <span class="p">(</span><span class="nv">$start</span> <span class="o">&lt;</span> <span class="nv">$limit</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>        <span class="k">if</span> <span class="p">(</span><span class="nv">$step</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>            <span class="k">throw</span> <span class="k">new</span> <span class="nx">LogicException</span><span class="p">(</span><span class="s1">&#39;Step must be +ve&#39;</span><span class="p">);</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>        <span class="k">for</span> <span class="p">(</span><span class="nv">$i</span> <span class="o">=</span> <span class="nv">$start</span><span class="p">;</span> <span class="nv">$i</span> <span class="o">&lt;=</span> <span class="nv">$limit</span><span class="p">;</span> <span class="nv">$i</span> <span class="o">+=</span> <span class="nv">$step</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>            <span class="k">yield</span> <span class="nv">$i</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span><span class='line'>        <span class="k">if</span> <span class="p">(</span><span class="nv">$step</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>            <span class="k">throw</span> <span class="k">new</span> <span class="nx">LogicException</span><span class="p">(</span><span class="s1">&#39;Step must be -ve&#39;</span><span class="p">);</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>
</span><span class='line'>        <span class="k">for</span> <span class="p">(</span><span class="nv">$i</span> <span class="o">=</span> <span class="nv">$start</span><span class="p">;</span> <span class="nv">$i</span> <span class="o">&gt;=</span> <span class="nv">$limit</span><span class="p">;</span> <span class="nv">$i</span> <span class="o">+=</span> <span class="nv">$step</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>            <span class="k">yield</span> <span class="nv">$i</span><span class="p">;</span>
</span><span class='line'>        <span class="p">}</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="cm">/*</span>
</span><span class='line'><span class="cm"> * Note that both range() and xrange() result in the same</span>
</span><span class='line'><span class="cm"> * output below.</span>
</span><span class='line'><span class="cm"> */</span>
</span><span class='line'>
</span><span class='line'><span class="k">echo</span> <span class="s1">&#39;Single digit odd numbers from range():  &#39;</span><span class="p">;</span>
</span><span class='line'><span class="k">foreach</span> <span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">9</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="k">as</span> <span class="nv">$number</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">echo</span> <span class="s2">&quot;</span><span class="si">$number</span><span class="s2"> &quot;</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p></p>

<p>Repare que não há necessidade de criar um array, populá-lo, retorná-lo, e só depois iterá-lo para imprimir os valores.</p>

<h3>Finally</h3>

<p>Mesmo já possuindo a bastante tempo o bloco try/catch, só agora a partir da versão 5.5 foi introduzida a keyword <strong>finally</strong>. No qual você define um bloco para ser executado de qualquer maneira (mesmo que caia no catch).</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
</pre></td><td class='code'><pre><code class='php'><span class='line'><span class="k">function</span> <span class="nf">divide</span><span class="p">(</span><span class="nv">$a</span><span class="p">,</span> <span class="nv">$b</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">if</span> <span class="p">(</span><span class="nv">$b</span> <span class="o">===</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>        <span class="k">throw</span> <span class="k">new</span> <span class="nx">Exception</span><span class="p">(</span><span class="s1">&#39;Divisão por zero&#39;</span><span class="p">);</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>    <span class="k">return</span> <span class="nv">$a</span> <span class="o">/</span> <span class="nv">$b</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="k">try</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">echo</span> <span class="s1">&#39;10 / 2 = &#39;</span> <span class="o">.</span> <span class="nx">divide</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">2</span><span class="p">);</span>
</span><span class='line'>    <span class="k">echo</span> <span class="s1">&#39;2 / 0 = &#39;</span> <span class="o">.</span> <span class="nx">divide</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>
</span><span class='line'><span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">Exception</span> <span class="nv">$e</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">echo</span> <span class="nv">$e</span><span class="o">-&gt;</span><span class="na">getMessage</span><span class="p">();</span>
</span><span class='line'><span class="p">}</span> <span class="k">finally</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">echo</span> <span class="s1">&#39;Término das operações&#39;</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p></p>

<h3>::class</h3>

<p>Agora é possível resolver o nome da classe apenas através de <a href="http://br1.php.net/oop5.basic#language.oop5.basic.class.class">MinhaClass::class</a>.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class='php'><span class='line'><span class="o">&lt;?</span><span class="nx">php</span>
</span><span class='line'><span class="k">namespace</span> <span class="nx">NS</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">class</span> <span class="nc">ClassName</span> <span class="p">{</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>    <span class="k">echo</span> <span class="nx">ClassName</span><span class="o">::</span><span class="na">class</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'><span class="cp">?&gt;</span><span class="x"></span>
</span></code></pre></td></tr></table></div></figure>


<h3>empty()</h3>

<p>Agora é possível passar expressões para a função <a href="http://br2.php.net/migration55.new-features#migration55.new-features.empty">empty()</a> e não mais apenas variáveis.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
</pre></td><td class='code'><pre><code class='php'><span class='line'><span class="o">&lt;?</span><span class="nx">php</span>
</span><span class='line'><span class="k">function</span> <span class="nf">always_false</span><span class="p">()</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">return</span> <span class="k">false</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="k">if</span> <span class="p">(</span><span class="k">empty</span><span class="p">(</span><span class="nx">always_false</span><span class="p">()))</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">echo</span> <span class="s2">&quot;This will be printed.</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="k">if</span> <span class="p">(</span><span class="k">empty</span><span class="p">(</span><span class="k">true</span><span class="p">))</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">echo</span> <span class="s2">&quot;This will not be printed.</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'><span class="cp">?&gt;</span><span class="x"></span>
</span></code></pre></td></tr></table></div></figure>


<h3>Veja mais</h3>

<p>Para saber mais sobre a nova versão acesse os links abaixo:</p>

<p><a href="http://www.php.net/releases/5_5_0.php">http://www.php.net/releases/5_5_0.php</a>
<a href="http://br2.php.net/manual/en/migration55.php">http://br2.php.net/manual/en/migration55.php</a></p>

<p>E o <strong>php.net</strong> também lançou sua versão nova (ainda em beta). <a href="http://php.net/?setbeta=1&amp;beta=1">Clique aqui para abrir a versão beta</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[UTF-8 Icons]]></title>
    <link href="http://rogeriolino.com/2013/05/06/utf-8-icons/"/>
    <updated>2013-05-06T11:55:09-03:00</updated>
    <id>http://rogeriolino.com/2013/05/06/utf-8-icons</id>
    <content type="html"><![CDATA[<p>Com a adoção dos navegadores mais modernos, muitos projetos estão adotando os ícones UTF-8 em botões. Assim diminui a dependência de imagens tornando o carregamento mais rápido. Exemplo: <a href="http://dev.rogeriolino.com/exemplos/css/utf8_icons/index.html">http://dev.rogeriolino.com/exemplos/css/utf8_icons/index.html</a></p>

<h2>Prós</h2>

<ul>
<li><p>Não há necessidade de imagens como dependência;</p></li>
<li><p>Pode usar a cor que desejar;</p></li>
<li><p>São escaláveis, muito fáceis de alterar o tamanho;</p></li>
<li><p>Pode usar transformações CSS (transparência, sombra, rotação, etc);</p></li>
<li><p>Reuso de ícones através de seletores CSS;</p></li>
</ul>


<h2>Contras</h2>

<ul>
<li><p>Os ícones das fonts padrões não são tão legais;</p></li>
<li><p>Embora não haja dependência de imagem, pode ter de font (web font);</p></li>
<li><p>Dependendo da font escolhida, um iconset pode ser mais leve;</p></li>
</ul>


<h2>Veja mais sobre ícones UTF-8</h2>

<ul>
<li><p><a href="http://www.utf8icons.com/">http://www.utf8icons.com/</a></p></li>
<li><p><a href="http://weloveiconfonts.com/">http://weloveiconfonts.com/</a></p></li>
<li><p><a href="http://fortawesome.github.io/Font-Awesome/">http://fortawesome.github.io/Font-Awesome/</a></p></li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Novo SGA]]></title>
    <link href="http://rogeriolino.com/2013/02/05/novo-sga/"/>
    <updated>2013-02-05T09:33:57-02:00</updated>
    <id>http://rogeriolino.com/2013/02/05/novo-sga</id>
    <content type="html"><![CDATA[<p><a href="http://novosga.org"><img src="http://rogeriolino.com/uploads/2013/02/novosga.png" alt="novosga" /></a></p>

<blockquote>SGA é o acrônimo de Sistema de Gerenciamento de Atendimento, sistema desenvolvido pela Dataprev e liberado como código aberto através da versão SGA Livre.

Devido ao desenvolvimento do SGA Livre estar estagnado na mesma versão desde 2009, unindo a burocracia dos responsáveis pela comunidade no [Portal do Software Público](http://softwarepublico.gov.br/) surgiu a necessidade de criar uma nova versão para esse sistema que já roda em diversas localidades do Brasil.

A parte web foi totalmente reformulada, deixando mais leve e intuitiva, com uma interface amigável e instalação super fácil. Já no painel foi feitas melhorias para funcionar em monitores widescreen. Outras melhorias e funcionalidades estão previstas e irão ser aplicadas durante o desenvolvimento do projeto.</blockquote>


<p>Visite o <a href="http://novosga.org">site do projeto</a> e confira a <a href="http://novosga.org/demo">versão demo</a> disponível online.</p>

<p>Gostou e quer contribuir com o desenvolvimento? Acesse o <a href="http://github.com/rogeriolino/novosga">projeto no GitHub</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[CSS3: Selection Background Color]]></title>
    <link href="http://rogeriolino.com/2013/01/02/css3-selection-background-color/"/>
    <updated>2013-01-02T10:08:47-02:00</updated>
    <id>http://rogeriolino.com/2013/01/02/css3-selection-background-color</id>
    <content type="html"><![CDATA[<p>Com o seletor <strong>selection</strong> podemos definir a cor do texto e de fundo do texto quando o selecionamos.</p>

<blockquote>
The ::-moz-selection (::selection) pseudo-element applies to the portion of a document that has been highlighted (e.g. selected with the mouse) by the user.

Gecko/Firefox supports ::-moz-selection, use also ::selection other browsers. The following properties apply to ::-moz-selection:  color, background and background-color (background-image is ignored).

[http://dochub.io/#css/selection](http://dochub.io/#css/selection)
</blockquote>


<p><strong>CSS</strong></p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
</pre></td><td class='code'><pre><code class='css'><span class='line'><span class="nt">p</span><span class="o">:</span><span class="nd">:selection</span>  <span class="p">{</span> <span class="k">color</span><span class="o">:</span> <span class="m">#000</span><span class="p">;</span> <span class="p">}</span>
</span><span class='line'><span class="nt">p</span><span class="o">:</span><span class="nd">:-moz-selection</span> <span class="p">{</span> <span class="k">color</span><span class="o">:</span> <span class="m">#000</span><span class="p">;</span> <span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="nt">p</span><span class="nc">.yellow</span><span class="o">:</span><span class="nd">:selection</span>  <span class="p">{</span> <span class="k">background</span><span class="o">:</span> <span class="nb">yellow</span><span class="p">;</span> <span class="p">}</span>
</span><span class='line'><span class="nt">p</span><span class="nc">.yellow</span><span class="o">:</span><span class="nd">:-moz-selection</span> <span class="p">{</span> <span class="k">background</span><span class="o">:</span> <span class="nb">yellow</span><span class="p">;</span> <span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="nt">p</span><span class="nc">.green</span><span class="o">:</span><span class="nd">:selection</span> <span class="p">{</span> <span class="k">background</span><span class="o">:</span> <span class="m">#58FF4B</span><span class="p">;</span> <span class="p">}</span>
</span><span class='line'><span class="nt">p</span><span class="nc">.green</span><span class="o">:</span><span class="nd">:-moz-selection</span> <span class="p">{</span> <span class="k">background</span><span class="o">:</span> <span class="m">#58FF4B</span><span class="p">;</span> <span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="nt">p</span><span class="nc">.pink</span><span class="o">:</span><span class="nd">:selection</span> <span class="p">{</span> <span class="k">background</span><span class="o">:</span> <span class="m">#E2189C</span><span class="p">;</span> <span class="p">}</span>
</span><span class='line'><span class="nt">p</span><span class="nc">.pink</span><span class="o">:</span><span class="nd">:-moz-selection</span> <span class="p">{</span> <span class="k">background</span><span class="o">:</span> <span class="m">#E2189C</span><span class="p">;</span> <span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p><strong>HTML</strong></p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='html'><span class='line'><span class="nt">&lt;p</span> <span class="na">class=</span><span class="s">&quot;yellow&quot;</span><span class="nt">&gt;</span>Lorem ipsum dolor sit amet, consectetur adipiscing elit...<span class="nt">&lt;/p&gt;</span>
</span><span class='line'>
</span><span class='line'><span class="nt">&lt;p</span> <span class="na">class=</span><span class="s">&quot;green&quot;</span><span class="nt">&gt;</span>Aliquam erat volutpat. Donec in elit at magna venenatis venenatis...<span class="nt">&lt;/p&gt;</span>
</span><span class='line'>
</span><span class='line'><span class="nt">&lt;p</span> <span class="na">class=</span><span class="s">&quot;pink&quot;</span><span class="nt">&gt;</span>Donec interdum placerat urna at aliquet...<span class="nt">&lt;/p&gt;</span>
</span></code></pre></td></tr></table></div></figure>


<p><strong>Exemplo</strong>
<a href="http://dev.rogeriolino.com/exemplos/css/selection/index.html">http://dev.rogeriolino.com/exemplos/css/selection/index.html</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[jQuery + Modernizr: AccessKey Detection]]></title>
    <link href="http://rogeriolino.com/2012/12/13/jquery-modernizr-accesskey-detection/"/>
    <updated>2012-12-13T14:13:36-02:00</updated>
    <id>http://rogeriolino.com/2012/12/13/jquery-modernizr-accesskey-detection</id>
    <content type="html"><![CDATA[<p>O código abaixo permite exibir no title e na frente das tags que possuem o atributo <a href="http://www.w3schools.com/tags/att_global_accesskey.asp">accesskey</a> o seu atalho.</p>

<p>Com o uso do CSS é adicionado ao <a href="http://www.w3schools.com/cssref/sel_after.asp">final do conteúdo da tag</a> o seu atalho. E via Javascript esse atalho também é adicionado ao title.</p>

<p>Como esses atalhos variam de acordo com o Browser e o Sistema Operacional, fiz uso do Modernizr + Detectizr para adicionar no body a classes informando o ambiente.</p>

<p><strong>Dependências</strong></p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='html'><span class='line'><span class="nt">&lt;script </span><span class="na">src=</span><span class="s">&quot;http://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.3/jquery.min.js&quot;</span><span class="nt">&gt;&lt;/script&gt;</span>
</span><span class='line'><span class="nt">&lt;script </span><span class="na">src=</span><span class="s">&quot;http://cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js&quot;</span><span class="nt">&gt;&lt;/script&gt;</span>
</span><span class='line'><span class="nt">&lt;script </span><span class="na">src=</span><span class="s">&quot;https://raw.github.com/barisaydinoglu/Detectizr/master/detectizr.min.js&quot;</span><span class="nt">&gt;&lt;/script&gt;</span>
</span></code></pre></td></tr></table></div></figure>


<p><strong>CSS</strong></p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
</pre></td><td class='code'><pre><code class='css'><span class='line'><span class="o">*[</span><span class="nt">accesskey</span><span class="o">]</span><span class="nd">:after</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">margin-left</span><span class="o">:</span> <span class="m">0.3em</span><span class="p">;</span>
</span><span class='line'>    <span class="k">color</span><span class="o">:</span> <span class="m">#ccc</span><span class="p">;</span>
</span><span class='line'>    <span class="k">content</span><span class="o">:</span> <span class="s2">&quot;[Alt + &quot;</span> <span class="n">attr</span><span class="p">(</span><span class="n">accesskey</span><span class="p">)</span> <span class="s2">&quot;]&quot;</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="nt">body</span><span class="nc">.firefox</span> <span class="o">*[</span><span class="nt">accesskey</span><span class="o">]</span><span class="nd">:after</span> <span class="p">{</span> <span class="k">content</span><span class="o">:</span> <span class="s2">&quot;[Alt + Shift + &quot;</span> <span class="n">attr</span><span class="p">(</span><span class="n">accesskey</span><span class="p">)</span> <span class="s2">&quot;]&quot;</span><span class="p">;</span> <span class="p">}</span>
</span><span class='line'><span class="nt">body</span><span class="nc">.firefox.mac</span> <span class="o">*[</span><span class="nt">accesskey</span><span class="o">]</span><span class="nd">:after</span> <span class="p">{</span> <span class="k">content</span><span class="o">:</span> <span class="s2">&quot;[Ctrl + Opt + &quot;</span> <span class="n">attr</span><span class="p">(</span><span class="n">accesskey</span><span class="p">)</span> <span class="s2">&quot;]&quot;</span><span class="p">;</span>  <span class="p">}</span>
</span><span class='line'><span class="nt">body</span><span class="nc">.safari.mac</span> <span class="o">*[</span><span class="nt">accesskey</span><span class="o">]</span><span class="nd">:after</span> <span class="p">{</span> <span class="k">content</span><span class="o">:</span> <span class="s2">&quot;[Ctrl + &quot;</span> <span class="n">attr</span><span class="p">(</span><span class="n">accesskey</span><span class="p">)</span> <span class="s2">&quot;]&quot;</span><span class="p">;</span>  <span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p><strong>Javascript</strong></p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
</pre></td><td class='code'><pre><code class='js'><span class='line'><span class="cm">/**</span>
</span><span class='line'><span class="cm"> * Add browser and OS name to body class, and append the shortcut to element title</span>
</span><span class='line'><span class="cm"> * @author rogeriolino</span>
</span><span class='line'><span class="cm"> */</span>
</span><span class='line'><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">$</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>    <span class="nx">$</span><span class="p">(</span><span class="nb">document</span><span class="p">).</span><span class="nx">ready</span><span class="p">(</span><span class="kd">function</span><span class="p">()</span> <span class="p">{</span>
</span><span class='line'>        <span class="nx">Modernizr</span><span class="p">.</span><span class="nx">Detectizr</span><span class="p">.</span><span class="nx">detect</span><span class="p">({</span><span class="nx">detectScreen</span><span class="o">:</span><span class="kc">false</span><span class="p">});</span>
</span><span class='line'>        <span class="kd">var</span> <span class="nx">body</span> <span class="o">=</span> <span class="nx">$</span><span class="p">(</span><span class="s1">&#39;body&#39;</span><span class="p">)</span>
</span><span class='line'>        <span class="nx">body</span><span class="p">.</span><span class="nx">addClass</span><span class="p">(</span><span class="nx">Modernizr</span><span class="p">.</span><span class="nx">Detectizr</span><span class="p">.</span><span class="nx">device</span><span class="p">.</span><span class="nx">browser</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span> <span class="nx">Modernizr</span><span class="p">.</span><span class="nx">Detectizr</span><span class="p">.</span><span class="nx">device</span><span class="p">.</span><span class="nx">os</span><span class="p">);</span>
</span><span class='line'>        <span class="nx">$</span><span class="p">(</span><span class="s1">&#39;*[accesskey]&#39;</span><span class="p">).</span><span class="nx">each</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">i</span><span class="p">,</span> <span class="nx">e</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>            <span class="kd">var</span> <span class="nx">elem</span> <span class="o">=</span> <span class="nx">$</span><span class="p">(</span><span class="nx">e</span><span class="p">);</span>
</span><span class='line'>            <span class="nx">prefix</span> <span class="o">=</span> <span class="s1">&#39;Alt&#39;</span><span class="p">;</span>
</span><span class='line'>            <span class="k">if</span> <span class="p">(</span><span class="nx">body</span><span class="p">.</span><span class="nx">hasClass</span><span class="p">(</span><span class="s1">&#39;firefox&#39;</span><span class="p">))</span> <span class="p">{</span>
</span><span class='line'>                <span class="k">if</span> <span class="p">(</span><span class="nx">body</span><span class="p">.</span><span class="nx">hasClass</span><span class="p">(</span><span class="s1">&#39;mac&#39;</span><span class="p">))</span> <span class="p">{</span>
</span><span class='line'>                    <span class="nx">prefix</span> <span class="o">=</span> <span class="s1">&#39;Ctrl + Opt&#39;</span><span class="p">;</span>
</span><span class='line'>                <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span><span class='line'>                    <span class="nx">prefix</span> <span class="o">=</span> <span class="s1">&#39;Alt + Shift&#39;</span><span class="p">;</span>
</span><span class='line'>                <span class="p">}</span>
</span><span class='line'>            <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">body</span><span class="p">.</span><span class="nx">hasClass</span><span class="p">(</span><span class="s1">&#39;safari mac&#39;</span><span class="p">))</span> <span class="p">{</span>
</span><span class='line'>                <span class="nx">prefix</span> <span class="o">=</span> <span class="s1">&#39;Ctrl&#39;</span><span class="p">;</span>
</span><span class='line'>            <span class="p">}</span>
</span><span class='line'>            <span class="nx">elem</span><span class="p">.</span><span class="nx">prop</span><span class="p">(</span><span class="s1">&#39;title&#39;</span><span class="p">,</span> <span class="nx">elem</span><span class="p">.</span><span class="nx">prop</span><span class="p">(</span><span class="s1">&#39;title&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39; [&#39;</span> <span class="o">+</span> <span class="nx">prefix</span> <span class="o">+</span> <span class="s1">&#39; + &#39;</span> <span class="o">+</span> <span class="nx">elem</span><span class="p">.</span><span class="nx">attr</span><span class="p">(</span><span class="s1">&#39;accesskey&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;]&#39;</span><span class="p">);</span>
</span><span class='line'>        <span class="p">});</span>
</span><span class='line'>    <span class="p">});</span>
</span><span class='line'><span class="p">})(</span><span class="nx">jQuery</span><span class="p">);</span>
</span></code></pre></td></tr></table></div></figure>


<p><strong>Demo</strong></p>

<p><a href="http://jsfiddle.net/qmB3R/">Clique aqui para visualizar o exemplo no jsFiddle.net</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[jQuery: Horizontal + Vertical Align]]></title>
    <link href="http://rogeriolino.com/2012/11/28/jquery-horizontal-vertical-align/"/>
    <updated>2012-11-28T08:23:58-02:00</updated>
    <id>http://rogeriolino.com/2012/11/28/jquery-horizontal-vertical-align</id>
    <content type="html"><![CDATA[<p>Função jQuery para alinhar horizontalmente e verticalmente o elemento.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
</pre></td><td class='code'><pre><code class='js'><span class='line'><span class="nx">jQuery</span><span class="p">.</span><span class="nx">fn</span><span class="p">.</span><span class="nx">center</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">this</span><span class="p">.</span><span class="nx">css</span><span class="p">(</span><span class="s2">&quot;position&quot;</span><span class="p">,</span><span class="s2">&quot;absolute&quot;</span><span class="p">);</span>
</span><span class='line'>    <span class="k">this</span><span class="p">.</span><span class="nx">css</span><span class="p">({</span>
</span><span class='line'>        <span class="nx">top</span><span class="o">:</span> <span class="s1">&#39;50%&#39;</span><span class="p">,</span>
</span><span class='line'>        <span class="nx">left</span><span class="o">:</span> <span class="s1">&#39;50%&#39;</span><span class="p">,</span>
</span><span class='line'>        <span class="nx">margin</span><span class="o">:</span> <span class="s1">&#39;-&#39;</span> <span class="o">+</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">height</span><span class="p">()</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;px 0 0 -&#39;</span> <span class="o">+</span> <span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="nx">width</span><span class="p">()</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;px&#39;</span>
</span><span class='line'>    <span class="p">});</span>
</span><span class='line'>    <span class="k">return</span> <span class="k">this</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>Exemplo:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='html'><span class='line'><span class="nt">&lt;div</span> <span class="na">id=</span><span class="s">&quot;centered_div&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>    <span class="nt">&lt;p&gt;</span>My div content here<span class="nt">&lt;/p&gt;</span>
</span><span class='line'><span class="nt">&lt;/div&gt;</span>
</span></code></pre></td></tr></table></div></figure>




<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='js'><span class='line'><span class="nx">$</span><span class="p">(</span><span class="s1">&#39;#centered_div&#39;</span><span class="p">).</span><span class="nx">center</span><span class="p">()</span>
</span></code></pre></td></tr></table></div></figure>


<p>Edit on jsFiddle: <a href="http://jsfiddle.net/rc6kS/">http://jsfiddle.net/rc6kS/</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Ubuntu: PHP 5.4 + PHP5-FPM/FastCgi on Apache2]]></title>
    <link href="http://rogeriolino.com/2012/11/26/ubuntu-php-5-4-php5-fpmfastcgi-on-apache2/"/>
    <updated>2012-11-26T14:55:46-02:00</updated>
    <id>http://rogeriolino.com/2012/11/26/ubuntu-php-5-4-php5-fpmfastcgi-on-apache2</id>
    <content type="html"><![CDATA[<p>Os comandos abaixo que devem ser executados como <strong>root</strong>.</p>

<h3>Passo 1 - Verificando a versão do PHP no repositório</h3>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>apt-cache show php5 <span class="p">|</span> grep Version
</span></code></pre></td></tr></table></div></figure>


<p></p>

<p>Caso a versão mais nova já esteja na 5.4 ou superior, então pule para o próximo passo. Senão execute os comandos abaixo para adicionar o repositório com a versão 5.4.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>apt-get install python-software-properties
</span><span class='line'>add-apt-repository ppa:ondrej/php5
</span><span class='line'>apt-get update
</span></code></pre></td></tr></table></div></figure>


<h3>Passo 2 - Instalando os pacotes</h3>

<p>Execute o commando abaixo para instalar de uma só vez o Apache2 como Worker, o módulo FastCgi e o PHP 5.4 com PHP-FPM.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>apt-get install apache2-mpm-worker libapache2-mod-fastcgi php5-fpm php5
</span></code></pre></td></tr></table></div></figure>


<p>Habilitando os módulos de requeridos para o próximo passo:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>a2enmod actions fastcgi <span class="nb">alias</span>
</span></code></pre></td></tr></table></div></figure>


<p></p>

<h3>Passo 3 - Configurando o Apache2</h3>

<p>Editar o arquivo de configuração do módulo fastcgi</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>vim /etc/apache2/mods-enabled/fastcgi.conf
</span></code></pre></td></tr></table></div></figure>


<p>Caso já tenha algumas entradas, comente (adicionando # no início da linha ou simplesmente remova) e adicione as seguintes linhas:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>AddHandler php5-fcgi .php
</span><span class='line'>Action php5-fcgi /php5-fcgi
</span><span class='line'>Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
</span><span class='line'>FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
</span></code></pre></td></tr></table></div></figure>


<p>obs: O arquivo /usr/lib/cgi-bin/php5-fcgi realmente não existe, será apenas uma ponte para o PHP-FPM</p>

<h3>Passo 4 - Configurando o PHP-FPM</h3>

<p>Abra o arquivo de configuração do PHP-FPM</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>vim /etc/php5/fpm/pool.d/www.conf
</span></code></pre></td></tr></table></div></figure>


<p></p>

<p>E procure pela opção listen. Se não estiver como socket, altere conforme abaixo:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">listen</span> <span class="o">=</span> /var/run/php5-fpm.sock
</span></code></pre></td></tr></table></div></figure>


<p></p>

<p>Essa opção serve para evitar overhead no TCP (caso o socket não esteja configurado)</p>

<p>obs: Repare que tem que ser o mesmo caminho especificado no fastcgi.conf</p>

<h3>Passo 5 - Reiniciando e testando</h3>

<p>Reiniciando os serviços:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>/etc/init.d/apache2 restart
</span><span class='line'>/etc/init.d/php5-fpm restart
</span></code></pre></td></tr></table></div></figure>


<p>Criando arquivo de teste:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nb">cd</span> /var/www
</span><span class='line'><span class="nb">echo</span> <span class="s1">&#39;&lt;?php phpinfo();&#39;</span> <span class="p">|</span> tee info.php
</span></code></pre></td></tr></table></div></figure>


<p>Depois acesse o arquivo criado via browser: <a href="http://nome_servidor/info.php">http://nome_servidor/info.php</a></p>

<p>Confira a <strong>versão do PHP descrita no cabeçalho</strong> e se o valor do <strong>Server API</strong> está como <strong>FPM/FastCGI</strong>.</p>

<p><img src="http://rogeriolino.com/uploads/2012/11/phpinfo.png" alt="" /></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Quickpost: License Box]]></title>
    <link href="http://rogeriolino.com/2012/11/08/quickpost-license-box/"/>
    <updated>2012-11-08T10:07:00-02:00</updated>
    <id>http://rogeriolino.com/2012/11/08/quickpost-license-box</id>
    <content type="html"><![CDATA[<p>Atualizando exemplo antigo, para uso de CSS3:</p>

<p><strong>Post original:</strong>
<a href="http://rogeriolino.com/2006/11/25/tutorial-caixa-de-contrato/">http://rogeriolino.com/2006/11/25/tutorial-caixa-de-contrato/</a></p>

<p><strong>Página da versão nova:</strong>
<a href="http://dev.rogeriolino.com/exemplos/css/license/index.html">http://dev.rogeriolino.com/exemplos/css/license/index.html</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[CSS3: Horizontal Menu]]></title>
    <link href="http://rogeriolino.com/2012/10/15/css3-horizontal-menu/"/>
    <updated>2012-10-15T11:34:32-03:00</updated>
    <id>http://rogeriolino.com/2012/10/15/css3-horizontal-menu</id>
    <content type="html"><![CDATA[<p>Exemplo de um menu dropdown horizontal, utilizando gradient e transition apenas com CSS3.</p>

<h3>CSS</h3>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
<span class='line-number'>50</span>
<span class='line-number'>51</span>
<span class='line-number'>52</span>
<span class='line-number'>53</span>
<span class='line-number'>54</span>
<span class='line-number'>55</span>
<span class='line-number'>56</span>
<span class='line-number'>57</span>
<span class='line-number'>58</span>
<span class='line-number'>59</span>
<span class='line-number'>60</span>
<span class='line-number'>61</span>
<span class='line-number'>62</span>
<span class='line-number'>63</span>
<span class='line-number'>64</span>
<span class='line-number'>65</span>
<span class='line-number'>66</span>
<span class='line-number'>67</span>
<span class='line-number'>68</span>
<span class='line-number'>69</span>
<span class='line-number'>70</span>
<span class='line-number'>71</span>
<span class='line-number'>72</span>
<span class='line-number'>73</span>
<span class='line-number'>74</span>
<span class='line-number'>75</span>
<span class='line-number'>76</span>
<span class='line-number'>77</span>
<span class='line-number'>78</span>
<span class='line-number'>79</span>
<span class='line-number'>80</span>
<span class='line-number'>81</span>
<span class='line-number'>82</span>
<span class='line-number'>83</span>
<span class='line-number'>84</span>
<span class='line-number'>85</span>
<span class='line-number'>86</span>
<span class='line-number'>87</span>
<span class='line-number'>88</span>
<span class='line-number'>89</span>
<span class='line-number'>90</span>
<span class='line-number'>91</span>
<span class='line-number'>92</span>
<span class='line-number'>93</span>
<span class='line-number'>94</span>
<span class='line-number'>95</span>
<span class='line-number'>96</span>
<span class='line-number'>97</span>
<span class='line-number'>98</span>
<span class='line-number'>99</span>
<span class='line-number'>100</span>
<span class='line-number'>101</span>
<span class='line-number'>102</span>
<span class='line-number'>103</span>
<span class='line-number'>104</span>
<span class='line-number'>105</span>
<span class='line-number'>106</span>
<span class='line-number'>107</span>
<span class='line-number'>108</span>
<span class='line-number'>109</span>
<span class='line-number'>110</span>
<span class='line-number'>111</span>
<span class='line-number'>112</span>
<span class='line-number'>113</span>
<span class='line-number'>114</span>
<span class='line-number'>115</span>
<span class='line-number'>116</span>
<span class='line-number'>117</span>
<span class='line-number'>118</span>
<span class='line-number'>119</span>
<span class='line-number'>120</span>
<span class='line-number'>121</span>
<span class='line-number'>122</span>
<span class='line-number'>123</span>
<span class='line-number'>124</span>
<span class='line-number'>125</span>
</pre></td><td class='code'><pre><code class='css'><span class='line'><span class="nc">.hmenu</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">height</span><span class="o">:</span> <span class="m">40px</span><span class="p">;</span>
</span><span class='line'>    <span class="k">position</span><span class="o">:</span> <span class="k">relative</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="nc">.hmenu</span><span class="o">,</span> <span class="nc">.hmenu</span> <span class="nt">ul</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">border</span><span class="o">-</span><span class="n">radius</span><span class="o">:</span> <span class="m">3px</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="nc">.hmenu</span><span class="o">,</span> <span class="nc">.hmenu</span> <span class="o">*</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">margin</span><span class="o">:</span> <span class="m">0</span><span class="p">;</span>
</span><span class='line'>    <span class="k">padding</span><span class="o">:</span> <span class="m">0</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="nc">.hmenu</span> <span class="nt">li</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">list-style</span><span class="o">:</span> <span class="k">none</span><span class="p">;</span>
</span><span class='line'>    <span class="k">position</span><span class="o">:</span> <span class="k">relative</span><span class="p">;</span>
</span><span class='line'>    <span class="k">display</span><span class="o">:</span> <span class="k">inline</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="nc">.hmenu</span> <span class="nt">li</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">list-style</span><span class="o">:</span> <span class="k">none</span><span class="p">;</span>
</span><span class='line'>    <span class="k">position</span><span class="o">:</span> <span class="k">relative</span><span class="p">;</span>
</span><span class='line'>    <span class="k">float</span><span class="o">:</span> <span class="k">left</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="c">/* all links style */</span>
</span><span class='line'><span class="nc">.hmenu</span> <span class="nt">a</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">font-weight</span><span class="o">:</span> <span class="k">bold</span><span class="p">;</span>
</span><span class='line'>    <span class="k">font-family</span><span class="o">:</span> <span class="n">Arial</span><span class="o">,</span> <span class="n">Verdana</span><span class="o">,</span> <span class="k">sans-serif</span><span class="p">;</span>
</span><span class='line'>    <span class="k">font-size</span><span class="o">:</span> <span class="m">12px</span><span class="p">;</span>
</span><span class='line'>    <span class="k">text-decoration</span><span class="o">:</span> <span class="k">none</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="c">/* main link style */</span>
</span><span class='line'><span class="nc">.hmenu</span><span class="o">&gt;</span><span class="nt">li</span><span class="o">&gt;</span><span class="nt">a</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">padding</span><span class="o">:</span> <span class="m">13px</span> <span class="m">20px</span><span class="p">;</span>
</span><span class='line'>    <span class="k">float</span><span class="o">:</span> <span class="k">left</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="nc">.hmenu</span> <span class="nt">li</span> <span class="nt">ul</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">width</span><span class="o">:</span> <span class="m">150px</span><span class="p">;</span>
</span><span class='line'>    <span class="k">position</span><span class="o">:</span> <span class="k">absolute</span><span class="p">;</span>
</span><span class='line'>    <span class="k">visibility</span><span class="o">:</span> <span class="k">hidden</span><span class="p">;</span>
</span><span class='line'>    <span class="k">opacity</span><span class="o">:</span> <span class="m">0</span><span class="p">;</span>
</span><span class='line'>    <span class="c">/* fading transition */</span>
</span><span class='line'>    <span class="n">transition</span><span class="o">:</span> <span class="k">opacity</span> <span class="m">.5s</span> <span class="n">ease</span><span class="o">-</span><span class="n">in</span><span class="o">-</span><span class="n">out</span><span class="p">;</span>
</span><span class='line'>   <span class="o">-</span><span class="n">moz</span><span class="o">-</span><span class="n">transition</span><span class="o">:</span> <span class="k">opacity</span> <span class="m">.5s</span> <span class="n">ease</span><span class="o">-</span><span class="n">in</span><span class="o">-</span><span class="n">out</span><span class="p">;</span>
</span><span class='line'>   <span class="o">-</span><span class="n">webkit</span><span class="o">-</span><span class="n">transition</span><span class="o">:</span> <span class="k">opacity</span> <span class="m">.5s</span> <span class="n">ease</span><span class="o">-</span><span class="n">in</span><span class="o">-</span><span class="n">out</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="c">/* first submenu */</span>
</span><span class='line'><span class="nc">.hmenu</span><span class="o">&gt;</span><span class="nt">li</span><span class="o">&gt;</span><span class="nt">ul</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">top</span><span class="o">:</span> <span class="m">40px</span><span class="p">;</span>
</span><span class='line'>    <span class="k">left</span><span class="o">:</span> <span class="m">0</span><span class="p">;</span>
</span><span class='line'>    <span class="k">border-top</span><span class="o">-</span><span class="k">left</span><span class="o">-</span><span class="n">radius</span><span class="o">:</span> <span class="m">0</span><span class="p">;</span>
</span><span class='line'>    <span class="k">border-top</span><span class="o">-</span><span class="k">right</span><span class="o">-</span><span class="n">radius</span><span class="o">:</span> <span class="m">0</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="nc">.hmenu</span> <span class="nt">li</span><span class="nd">:hover</span><span class="o">&gt;</span><span class="nt">ul</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">visibility</span><span class="o">:</span> <span class="k">visible</span><span class="p">;</span>
</span><span class='line'>    <span class="k">opacity</span><span class="o">:</span> <span class="m">1</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="nc">.hmenu</span> <span class="nt">li</span> <span class="nt">ul</span> <span class="nt">ul</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">top</span><span class="o">:</span> <span class="m">0px</span><span class="p">;</span>
</span><span class='line'>    <span class="k">left</span><span class="o">:</span> <span class="m">150px</span><span class="p">;</span>
</span><span class='line'>    <span class="k">border-top</span><span class="o">-</span><span class="k">left</span><span class="o">-</span><span class="n">radius</span><span class="o">:</span> <span class="m">0</span><span class="p">;</span>
</span><span class='line'>    <span class="k">border-bottom</span><span class="o">-</span><span class="k">left</span><span class="o">-</span><span class="n">radius</span><span class="o">:</span> <span class="m">0</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="nc">.hmenu</span> <span class="nt">li</span> <span class="nt">ul</span> <span class="nt">li</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">width</span><span class="o">:</span> <span class="m">150px</span><span class="p">;</span>
</span><span class='line'>    <span class="k">display</span><span class="o">:</span> <span class="k">block</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="c">/* submenu link style */</span>
</span><span class='line'><span class="nc">.hmenu</span> <span class="nt">ul</span> <span class="nt">a</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">margin</span><span class="o">:</span> <span class="m">3px</span> <span class="m">2px</span><span class="p">;</span>
</span><span class='line'>    <span class="k">padding</span><span class="o">:</span> <span class="m">8px</span> <span class="m">15px</span><span class="p">;</span>
</span><span class='line'>    <span class="k">border</span><span class="o">-</span><span class="n">radius</span><span class="o">:</span> <span class="m">5px</span><span class="p">;</span>
</span><span class='line'>    <span class="k">display</span><span class="o">:</span> <span class="k">block</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="c">/* theming */</span>
</span><span class='line'><span class="nc">.hmenu</span> <span class="p">{</span>
</span><span class='line'>    <span class="n">box</span><span class="o">-</span><span class="n">shadow</span><span class="o">:</span> <span class="m">0px</span> <span class="m">1px</span> <span class="m">5px</span> <span class="m">#ccc</span><span class="p">;</span>
</span><span class='line'>    <span class="k">background</span><span class="o">:</span> <span class="m">#ffffff</span><span class="p">;</span> <span class="c">/* Old browsers */</span>
</span><span class='line'>    <span class="k">background</span><span class="o">:</span> <span class="o">-</span><span class="n">moz</span><span class="o">-</span><span class="n">linear</span><span class="o">-</span><span class="n">gradient</span><span class="p">(</span><span class="k">top</span><span class="o">,</span>  <span class="m">#ffffff</span> <span class="m">0%</span><span class="o">,</span> <span class="m">#e5e5e5</span> <span class="m">100%</span><span class="p">);</span> <span class="c">/* FF3.6+ */</span>
</span><span class='line'>    <span class="k">background</span><span class="o">:</span> <span class="o">-</span><span class="n">webkit</span><span class="o">-</span><span class="n">gradient</span><span class="p">(</span><span class="n">linear</span><span class="o">,</span> <span class="k">left</span> <span class="k">top</span><span class="o">,</span> <span class="k">left</span> <span class="k">bottom</span><span class="o">,</span> <span class="k">color</span><span class="o">-</span><span class="n">stop</span><span class="p">(</span><span class="m">0%</span><span class="o">,</span><span class="m">#ffffff</span><span class="p">)</span><span class="o">,</span> <span class="k">color</span><span class="o">-</span><span class="n">stop</span><span class="p">(</span><span class="m">100%</span><span class="o">,</span><span class="m">#e5e5e5</span><span class="p">));</span> <span class="c">/* Chrome,Safari4+ */</span>
</span><span class='line'>    <span class="k">background</span><span class="o">:</span> <span class="o">-</span><span class="n">webkit</span><span class="o">-</span><span class="n">linear</span><span class="o">-</span><span class="n">gradient</span><span class="p">(</span><span class="k">top</span><span class="o">,</span>  <span class="m">#ffffff</span> <span class="m">0%</span><span class="o">,</span><span class="m">#e5e5e5</span> <span class="m">100%</span><span class="p">);</span> <span class="c">/* Chrome10+,Safari5.1+ */</span>
</span><span class='line'>    <span class="k">background</span><span class="o">:</span> <span class="o">-</span><span class="n">o</span><span class="o">-</span><span class="n">linear</span><span class="o">-</span><span class="n">gradient</span><span class="p">(</span><span class="k">top</span><span class="o">,</span>  <span class="m">#ffffff</span> <span class="m">0%</span><span class="o">,</span><span class="m">#e5e5e5</span> <span class="m">100%</span><span class="p">);</span> <span class="c">/* Opera 11.10+ */</span>
</span><span class='line'>    <span class="k">background</span><span class="o">:</span> <span class="o">-</span><span class="n">ms</span><span class="o">-</span><span class="n">linear</span><span class="o">-</span><span class="n">gradient</span><span class="p">(</span><span class="k">top</span><span class="o">,</span>  <span class="m">#ffffff</span> <span class="m">0%</span><span class="o">,</span><span class="m">#e5e5e5</span> <span class="m">100%</span><span class="p">);</span> <span class="c">/* IE10+ */</span>
</span><span class='line'>    <span class="k">background</span><span class="o">:</span> <span class="n">linear</span><span class="o">-</span><span class="n">gradient</span><span class="p">(</span><span class="n">to</span> <span class="k">bottom</span><span class="o">,</span>  <span class="m">#ffffff</span> <span class="m">0%</span><span class="o">,</span><span class="m">#e5e5e5</span> <span class="m">100%</span><span class="p">);</span> <span class="c">/* W3C */</span>
</span><span class='line'>    <span class="n">filter</span><span class="o">:</span> <span class="n">progid</span><span class="o">:</span><span class="n">DXImageTransform</span><span class="o">.</span><span class="n">Microsoft</span><span class="o">.</span><span class="n">gradient</span><span class="p">(</span> <span class="n">startColorstr</span><span class="o">=</span><span class="s1">&#39;#ffffff&#39;</span><span class="o">,</span> <span class="n">endColorstr</span><span class="o">=</span><span class="s1">&#39;#e5e5e5&#39;</span><span class="o">,</span><span class="n">GradientType</span><span class="o">=</span><span class="m">0</span> <span class="p">);</span> <span class="c">/* IE6-9 */</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="nc">.hmenu</span> <span class="nt">a</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">color</span><span class="o">:</span> <span class="m">#999</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="nc">.hmenu</span> <span class="nt">a</span><span class="nd">:hover</span> <span class="p">{</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="nc">.hmenu</span> <span class="nt">li</span><span class="nd">:hover</span><span class="o">&gt;</span><span class="nt">a</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">color</span><span class="o">:</span> <span class="m">#000</span><span class="p">;</span>
</span><span class='line'>    <span class="k">text-shadow</span><span class="o">:</span> <span class="m">1px</span> <span class="m">1px</span> <span class="m">2px</span> <span class="m">#ccc</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="nc">.hmenu</span> <span class="nt">ul</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">background-color</span><span class="o">:</span> <span class="m">#f1f1f1</span><span class="p">;</span>
</span><span class='line'>    <span class="n">box</span><span class="o">-</span><span class="n">shadow</span><span class="o">:</span> <span class="m">0px</span> <span class="m">1px</span> <span class="m">5px</span> <span class="m">#bbb</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="nc">.hmenu</span> <span class="nt">ul</span> <span class="nt">a</span><span class="nd">:hover</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">background-color</span><span class="o">:</span> <span class="m">#e1e1e1</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="nc">.hmenu</span><span class="o">&gt;</span><span class="nt">li</span><span class="o">&gt;</span><span class="nt">ul</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">border-top</span><span class="o">:</span> <span class="m">2px</span> <span class="k">solid</span> <span class="m">#999</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="nc">.hmenu</span> <span class="nt">li</span> <span class="nt">ul</span> <span class="nt">ul</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">border-left</span><span class="o">:</span> <span class="m">2px</span> <span class="k">solid</span> <span class="m">#999</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure>


<h3>HTML</h3>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
</pre></td><td class='code'><pre><code class='html'><span class='line'><span class="nt">&lt;ul</span> <span class="na">class=</span><span class="s">&quot;hmenu&quot;</span><span class="nt">&gt;</span>
</span><span class='line'>    <span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span><span class="nt">&gt;</span>Home<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
</span><span class='line'>    <span class="nt">&lt;li&gt;</span>
</span><span class='line'>        <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span><span class="nt">&gt;</span>Services<span class="nt">&lt;/a&gt;</span>
</span><span class='line'>        <span class="nt">&lt;ul&gt;</span>
</span><span class='line'>            <span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span><span class="nt">&gt;</span>Service 1<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
</span><span class='line'>            <span class="nt">&lt;li&gt;</span>
</span><span class='line'>                <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span><span class="nt">&gt;</span>Service 2<span class="nt">&lt;/a&gt;</span>
</span><span class='line'>                <span class="nt">&lt;ul&gt;</span>
</span><span class='line'>                    <span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span><span class="nt">&gt;</span>Subservice 1<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
</span><span class='line'>                    <span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span><span class="nt">&gt;</span>Subservice 2<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
</span><span class='line'>                    <span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span><span class="nt">&gt;</span>Subservice 3<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
</span><span class='line'>                <span class="nt">&lt;/ul&gt;</span>
</span><span class='line'>            <span class="nt">&lt;/li&gt;</span>
</span><span class='line'>            <span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span><span class="nt">&gt;</span>Service 3<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
</span><span class='line'>            <span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span><span class="nt">&gt;</span>Service 4<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
</span><span class='line'>            <span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span><span class="nt">&gt;</span>Service 5<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
</span><span class='line'>        <span class="nt">&lt;/ul&gt;</span>
</span><span class='line'>    <span class="nt">&lt;/li&gt;</span>
</span><span class='line'>    <span class="nt">&lt;li&gt;</span>
</span><span class='line'>        <span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span><span class="nt">&gt;</span>About<span class="nt">&lt;/a&gt;</span>
</span><span class='line'>        <span class="nt">&lt;ul&gt;</span>
</span><span class='line'>            <span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span><span class="nt">&gt;</span>Company<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
</span><span class='line'>            <span class="nt">&lt;li&gt;&lt;a</span> <span class="na">href=</span><span class="s">&quot;#&quot;</span><span class="nt">&gt;</span>Contact<span class="nt">&lt;/a&gt;&lt;/li&gt;</span>
</span><span class='line'>        <span class="nt">&lt;/ul&gt;</span>
</span><span class='line'>    <span class="nt">&lt;/li&gt;</span>
</span><span class='line'><span class="nt">&lt;/ul&gt;</span>
</span></code></pre></td></tr></table></div></figure>


<p><a href="http://dev.rogeriolino.com/exemplos/css/hmenu.html">Visualizar o menu funcionando</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[PHP: 5.4 New Features]]></title>
    <link href="http://rogeriolino.com/2012/10/01/php-5-4-new-features/"/>
    <updated>2012-10-01T12:47:04-03:00</updated>
    <id>http://rogeriolino.com/2012/10/01/php-5-4-new-features</id>
    <content type="html"><![CDATA[<p>Segue abaixo algumas das novas funcionalidades da versão 5.4 do PHP. Para ver mais informações, siga os links no final do post.</p>

<h3>Trait</h3>

<p>Trait (ou mixin em outras linguagens) é um mecanismo que permite que as classes reutilizem métodos de outras classes sem a necessidade de estende-la.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
</pre></td><td class='code'><pre><code class='php'><span class='line'><span class="k">trait</span> <span class="nx">Singleton</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">public</span> <span class="k">static</span> <span class="k">function</span> <span class="nf">getInstance</span><span class="p">()</span> <span class="p">{</span> <span class="o">...</span> <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="k">class</span> <span class="nc">A</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">use</span> <span class="nx">Singleton</span><span class="p">;</span>
</span><span class='line'>    <span class="c1">// ...</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="k">class</span> <span class="nc">B</span> <span class="k">extends</span> <span class="nx">ArrayObject</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">use</span> <span class="nx">Singleton</span><span class="p">;</span>
</span><span class='line'>    <span class="c1">// ...</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="c1">// Singleton method is now available for both classes</span>
</span><span class='line'><span class="nx">A</span><span class="o">::</span><span class="na">getInstance</span><span class="p">();</span>
</span><span class='line'><span class="nx">B</span><span class="o">::</span><span class="na">getInstance</span><span class="p">();</span>
</span></code></pre></td></tr></table></div></figure>


<h3>Sintaxe curta para definição de Array</h3>

<p>Agora é possível instanciar um array de maneira semelhante à outras linguagens de script, como por exemplo, Javascript.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='php'><span class='line'><span class="nv">$a</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">];</span>
</span><span class='line'><span class="nv">$b</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;foo&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;orange&#39;</span><span class="p">,</span> <span class="s1">&#39;bar&#39;</span> <span class="o">=&gt;</span> <span class="s1">&#39;apple&#39;</span><span class="p">];</span>
</span></code></pre></td></tr></table></div></figure>


<h3>Referência direta ao retorno das funções/métodos</h3>

<p>Também é possível fazer fazer chamada direta ao retorno das funções, sem que haja necessidade de atribuir o valor a uma variável e só depois fazer a chamada.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='php'><span class='line'><span class="k">function</span> <span class="nf">fruits</span><span class="p">()</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">return</span> <span class="p">[</span><span class="s1">&#39;apple&#39;</span><span class="p">,</span> <span class="s1">&#39;banana&#39;</span><span class="p">,</span> <span class="s1">&#39;orange&#39;</span><span class="p">];</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'><span class="k">echo</span> <span class="nx">fruits</span><span class="p">()[</span><span class="mi">0</span><span class="p">];</span> <span class="c1">// Outputs: apple</span>
</span></code></pre></td></tr></table></div></figure>


<p>O mesmo serve para chamadas através de novas <strong>instâncias</strong>:</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
</pre></td><td class='code'><pre><code class='php'><span class='line'><span class="k">class</span> <span class="nc">Person</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">private</span> <span class="nv">$name</span><span class="p">;</span>
</span><span class='line'>    <span class="k">public</span> <span class="k">function</span> <span class="nf">setName</span><span class="p">(</span><span class="nv">$name</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>        <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">name</span> <span class="o">=</span> <span class="nv">$name</span><span class="p">;</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>    <span class="k">public</span> <span class="k">function</span> <span class="nf">getName</span><span class="p">()</span> <span class="p">{</span>
</span><span class='line'>        <span class="k">return</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">name</span><span class="p">;</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'><span class="k">function</span> <span class="nf">createPerson</span><span class="p">()</span> <span class="p">{</span>
</span><span class='line'>    <span class="nv">$p</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Person</span><span class="p">();</span>
</span><span class='line'>    <span class="nv">$p</span><span class="o">-&gt;</span><span class="na">setName</span><span class="p">(</span><span class="s1">&#39;Rogerio&#39;</span><span class="p">);</span>
</span><span class='line'>    <span class="k">return</span> <span class="nv">$p</span><span class="p">;</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="k">echo</span> <span class="p">(</span><span class="k">new</span> <span class="nx">Person</span><span class="p">)</span><span class="o">-&gt;</span><span class="na">setName</span><span class="p">(</span><span class="s1">&#39;Rogerio&#39;</span><span class="p">)</span><span class="o">-&gt;</span><span class="na">getName</span><span class="p">();</span> <span class="c1">// Outputs: Rogerio</span>
</span></code></pre></td></tr></table></div></figure>


<h3>Método mágico __invoke</h3>

<p>Permite chamar um objeto como se fosse uma função</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
</pre></td><td class='code'><pre><code class='php'><span class='line'><span class="k">class</span> <span class="nc">MoneyObject</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">private</span> <span class="nv">$value</span><span class="p">;</span>
</span><span class='line'>    <span class="k">function</span> <span class="nf">__construct</span><span class="p">(</span><span class="nv">$val</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'>        <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">value</span> <span class="o">=</span> <span class="nv">$val</span><span class="p">;</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'>    <span class="k">function</span> <span class="nf">__invoke</span><span class="p">()</span> <span class="p">{</span>
</span><span class='line'>        <span class="k">return</span> <span class="nb">sprintf</span><span class="p">(</span><span class="s1">&#39;$%.2f&#39;</span><span class="p">,</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">value</span><span class="p">);</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'><span class="nv">$Money</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">MoneyObject</span><span class="p">(</span><span class="mf">11.02</span><span class="o">/</span><span class="mi">5</span><span class="o">*</span><span class="mi">13</span><span class="p">);</span>
</span><span class='line'><span class="k">echo</span> <span class="nv">$Money</span><span class="p">();</span> <span class="c1">// Outputs: $28.65</span>
</span></code></pre></td></tr></table></div></figure>


<h3>Built-in Web Server (CLI)</h3>

<p>CLI server é uma pequena implementação de um Web server que você pode executar via linha de comando.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>% php -S localhost:8000
</span></code></pre></td></tr></table></div></figure>


<p>Obviamente, não é para ser usado em produção.</p>

<h3>Native Session Handler Interface</h3>

<p>Ao invés de definir várias funções, você pode criar uma handler para a sua sessão, e apenas informá-lo no session_set_save_handler.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class='php'><span class='line'><span class="nx">SessionHandler</span> <span class="k">implements</span> <span class="nx">SessionHandlerInterface</span> <span class="p">{</span>
</span><span class='line'>    <span class="k">public</span> <span class="nx">int</span> <span class="nx">close</span> <span class="p">(</span> <span class="nx">void</span> <span class="p">)</span>
</span><span class='line'>    <span class="k">public</span> <span class="nx">int</span> <span class="nx">destroy</span> <span class="p">(</span> <span class="nx">string</span> <span class="nv">$sessionid</span> <span class="p">)</span>
</span><span class='line'>    <span class="k">public</span> <span class="nx">int</span> <span class="nx">gc</span> <span class="p">(</span> <span class="nx">int</span> <span class="nv">$maxlifetime</span> <span class="p">)</span>
</span><span class='line'>    <span class="k">public</span> <span class="nx">int</span> <span class="nx">open</span> <span class="p">(</span> <span class="nx">string</span> <span class="nv">$save_path</span> <span class="p">,</span> <span class="nx">string</span> <span class="nv">$sessionid</span> <span class="p">)</span>
</span><span class='line'>    <span class="k">public</span> <span class="nx">string</span> <span class="nx">read</span> <span class="p">(</span> <span class="nx">string</span> <span class="nv">$sessionid</span> <span class="p">)</span>
</span><span class='line'>    <span class="k">public</span> <span class="nx">int</span> <span class="nx">write</span> <span class="p">(</span> <span class="nx">string</span> <span class="nv">$sessionid</span> <span class="p">,</span> <span class="nx">string</span> <span class="nv">$sessiondata</span> <span class="p">)</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="nb">session_set_save_handler</span><span class="p">(</span><span class="k">new</span> <span class="nx">MySessionHandler</span><span class="p">);</span>
</span></code></pre></td></tr></table></div></figure>


<h3>JsonSerialize Interface</h3>

<p>Semelhante ao __tostring ao tentar imprimir um objeto, você pode pre-definir o objeto que será serializado para o formato json, através do uso da função <strong>json_encode</strong>.</p>

<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
</pre></td><td class='code'><pre><code class='php'><span class='line'><span class="k">class</span> <span class="nc">Foo</span> <span class="k">implements</span> <span class="nx">JsonSerializable</span> <span class="p">{</span>
</span><span class='line'>
</span><span class='line'>    <span class="k">private</span> <span class="nv">$data</span> <span class="o">=</span> <span class="s1">&#39;Bar&#39;</span><span class="p">;</span>
</span><span class='line'>
</span><span class='line'>    <span class="k">public</span> <span class="k">function</span> <span class="nf">jsonSerialize</span><span class="p">()</span> <span class="p">{</span>
</span><span class='line'>        <span class="k">return</span> <span class="k">array</span><span class="p">(</span><span class="s1">&#39;data&#39;</span><span class="o">=&gt;</span><span class="nv">$this</span><span class="o">-&gt;</span><span class="na">data</span><span class="p">);</span>
</span><span class='line'>    <span class="p">}</span>
</span><span class='line'><span class="p">}</span>
</span><span class='line'>
</span><span class='line'><span class="k">echo</span> <span class="nb">json_encode</span><span class="p">(</span><span class="k">new</span> <span class="nx">Foo</span><span class="p">);</span> <span class="c1">// Outputs: {&quot;data&quot;:&quot;Bar&quot;}</span>
</span></code></pre></td></tr></table></div></figure>


<p></p>

<p>Para visualizar as alterações entre as versão 5.3 e 5.4, <a href="http://www.php.net/manual/en/migration54.php">clique aqui</a>.</p>

<p><strong>Fontes:</strong>
<a href="http://php.net/manual/en/migration54.new-features.php">http://php.net/manual/en/migration54.new-features.php</a>
<a href="http://css.dzone.com/polls/what-new-feature-php-54">http://css.dzone.com/polls/what-new-feature-php-54</a>
<a href="http://www.oracle.com/technetwork/articles/dsl/lerdorf-php54-1564639.html">http://www.oracle.com/technetwork/articles/dsl/lerdorf-php54-1564639.html</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Development Tools]]></title>
    <link href="http://rogeriolino.com/2012/08/31/development-tools/"/>
    <updated>2012-08-31T17:02:57-03:00</updated>
    <id>http://rogeriolino.com/2012/08/31/development-tools</id>
    <content type="html"><![CDATA[<p><a href="http://dev.rogeriolino.com/tools/crypt"><img src="http://rogeriolino.com/uploads/2012/08/dev-tools.png" alt="" /></a></p>

<p>Iniciei e publiquei um pequeno projeto que reune algumas funcionalidades para auxiliar durante o desenvolvimento. Segue abaixo as funcionalidades que estão disponíveis por enquanto:</p>

<ul>
<li><p><strong>Crypt</strong>: algorítimos de hash como sha1 e md5, e base64 encode/decode</p></li>
<li><p><strong>Random:</strong> geração de senhas (com opções de configuração), CPF e CNPJ, e Lorem Ipsum</p></li>
<li><p><strong>Converter</strong>: conversor de unidades de medida</p></li>
<li><p><strong>Network</strong>: exibe o IP do cliente, geo localização (coordenadas e mapa), e consulta de domínios (whois server)</p></li>
<li><p><strong>Browser</strong>: informações sobre versão, user-agent, resolução e viewport, e as principais funcionalidades do HTML5 e CSS3 que o browser suporta.</p></li>
<li><p><strong>Javascript</strong>: code minifier and optimizer</p></li>
</ul>


<p>Como toda a execução é feita no lado do servidor, você pode fazer uma execução ajax do seu site/aplicação para o dev-tools e pegar no response o resultado, sem que haja necessidade de importar novos recursos:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>GET
</span><span class='line'>&gt;     /ajax/&lt;package&gt;/&lt;method&gt;/?&lt;params&gt;
</span><span class='line'>&gt;     /ajax/crypt/sha1?data=test
</span><span class='line'>&gt;     
</span><span class='line'>&gt;     JSON RESPONSE
</span><span class='line'>&gt;     {"success":true,"data":"a94a8fe5ccb19ba61c4c0873d391e987982fbbd3"}
</span><span class='line'>&gt;     </span></code></pre></td></tr></table></div></figure>


<p>Conforme eu vá sentindo necessidade de mais funcionalidade ou alguém dê uma sugestão, irei incrementando. Depois criarei um projeto no Github e atualizarei o post com o link.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Android: Futeria App]]></title>
    <link href="http://rogeriolino.com/2012/08/13/android-futeria-app/"/>
    <updated>2012-08-13T13:54:12-03:00</updated>
    <id>http://rogeriolino.com/2012/08/13/android-futeria-app</id>
    <content type="html"><![CDATA[<p><a href="https://play.google.com/store/apps/details?id=net.futeria.app"><img src="http://rogeriolino.com/uploads/2012/08/futeria-android.png" alt="" /></a></p>

<p>Há alguns dias publiquei uma app no <a href="https://play.google.com">Google Play</a>: <strong>Futeria</strong>, versão móvel do site <a href="http://futeria.net">Futeria.net</a>, agregador de notícias dos principais clubes de futebol do Brasil.</p>

<p>Para o desenvolvimento dessa app foi utilizado HTML5 e <a href="http://jquerymobile.com">jQueryMobile</a> para o frontend, e PHP para o backend. E para agilizar o carregamento das pãginas estã sendo utilizado o Manifest App Cache do HTML5. Já para uma  próxima versão estará disponível uma página para salvar configurações do usuário, utilizando <a href="http://www.w3schools.com/html5/html5_webstorage.asp">LocalStorage</a>.</p>

<p>Então, se você é um usuário Android e gostaria de ler as últimas notícias do seu time, instale o Futeria e dê uma feedback sobre bugs e melhorias que podem ser feitas. E muito obrigado!</p>
]]></content>
  </entry>
  
</feed>
