Por que implementar Interface em OOP?
Acabei de ter esta conversa rápida sobre o porquê de implementar Interface em classes quando se trabalha com orientação a objetos e achei bastante pertinente.
Resposta curta: Interface para garantir que o código que utiliza o objeto vai ter determinada funcionalidade disponível; não importa como o objeto vai fazer, contanto que possa fazer. É como contratar alguém com diploma.
Referências:
Chat com poucas requisições
Esses dias surgiu a questão da melhor forma de notificar o usuário sobre alterações no servidor em tempo (quase) real, como novas mensagens de um chat, por exemplo.
A forma mais intuitiva pra mim seria fazer requisições XMLHttpRequest em pequenos intervalos, checando por mensagens mais novas que a última mensagem já recebida. Este método, entretanto, desperdiçaria muitas requisições se o intervalo fosse muito curto ou comprometeria a experiência do usuário se o intervalo fosse maior.
A idéia proposta é manter uma única conexão XHR aberta enquanto o servidor não responder com uma mensagem nova. Uma vez que exista mensagens novas, o cliente processa a resposta e em seguida cria uma nova conexão XHR que permanecerá aberta até a próxima resposta. Dessa forma o cliente fará no máximo 1 requisição por mensagem.
Depois eu acabei descobrindo que esta é a implementação de XMLHttpRequest long polling.
(more…)
Janelas maximizadas sem borda com o Devilspie
Sempre gostei de interfaces minimalistas, e uma coisa que estava me chateando ultimamente era o desperdício de espaço com a barra de título em algumas janelas que eu só utilizo maximizadas. Nada que o Devil’s Pie não resolva.
O Devil’s Pie funciona observando as janelas que são abertas e, pra cada janela que se encaixar em alguma regra predefinida, executa as ações desejadas.
Dentre as opções de ação, é possível maximizar, definir tamanho, colocar a janela em fullscreen, jogar para outra workspace, definir posição, entre outras coisas. O que me interessou foi poder utilizar o recurso undecorate para remover a window decoration, a borda com a barra de título.
Gerando planilhas XLS para o Excel pelo PHP
Recentemente, precisei migrar alguns relatórios CSV para XLS, de forma que pudessem ser abertos diretamente no Excel sem aquelas telas chatas de importação de dados. Utilizei a classe Spreadsheet_Excel_Writer do PEAR e o resultado foi melhor do que o esperado.
Diminuindo a fonte do GTK 1 para o XMMS
As novas dependências do Audacious me fizeram voltar de vez para o XMMS; mas se tem algo que me irrita mais que pacotes esquisitos sendo instalados, são interfaces com fontes gigantes.
O XMMS, por utilizar o velho, feio e bobo GTK 1, era uma dessas interfaces. Contudo, foi só editar o arquivo /etc/gtk/gtkrc.utf-8 para resolver o problema :)
(more…)
Dicas para iniciantes no Vim
Já faz algum tempo que venho utilizando o Vim para programar e editar textos em geral, mas sempre que falo isso, muitos se assustam e acham um absurdo.
Provavelmente as pessoas acreditam que eu fico aqui com um machado ou uma enxada, suando para conseguir digitar em meio a todas aquelas letras esquisitas. Para acabar um pouco com essa lenda (ou confirmá-la de vez), tentarei sintetizar os comandos que mais uso.
Não que já não existam milhares de tutorais de Vim, mas enfim, essa é minha tentativa.
(more…)
Escopo e variáveis super poderosas
Variáveis globais são aquelas definidas na raiz do script, fora de qualquer outro escopo, e que não existem dentro de uma função ou método, da mesma forma que variáveis criadas em um desses escopos deixarão de existir fora dele.
As variáveis superglobais, entretanto, podem ser acessadas em qualquer escopo, e são elas $GLOBALS, $_SERVER, $_GET, $_POST, $_COOKIE, $_FILES, $_ENV, $_REQUEST e $_SESSION. Acontece que não é possível definir uma outra variável como superglobal (ao menos não sem o uso da Runkit), e aí a confusão começa.
Headers sent e a canonização do ob_start
Eu considero o ano de 2004 como sendo o ápice da quantidade de dúvidas sobre a mensagem Headers already sent, quando era comum muitos usuários perguntarem a solução diariamente no IRC. Um saco. Ainda hoje o Google retorna quase 2 milhões de resultados para esse termo, e a maioria deles como sendo erros legítimos que o crawler encontrou enquanto navegava.
Voltas e mais voltas com SPL
Recentemente, precisei de um banco de dados de provérbios e fiz um singelo script para ler alguns sites, mas era chato ter que fazer um script inteiro ou aglomerar laços pra cada site que eu encontrava. Pra evitar repetição de código, mantive uma classe por site, que, em conjunto com as classes e interfaces da Standard PHP Library (SPL), resumiram o código final a um único foreach:
$proverbios = new Proverbios;
$proverbios->append(new Proverbios_LifesABirch);
$proverbios->append(new Proverbios_Aborla);
$proverbios->append(new Proverbios_JangadaBrasil);
foreach($proverbios as $proverbio){
echo $proverbio, “\n”;
}
(more…)





