Oportunidade PHP - Agência Click

Filed Under (oportunidade PHP) by Marcelo Toscano on 01-08-2008

Tagged Under :

A Agência Click de São Paulo está contratando programador PHP para trabalhar com NING se você conhece os padrões de desenvolvimento do NING envie seu curriculo para leonardo.souza@agenciaclick.com.br com o assunto “[vaga-php]“.

O nível do programador é avançado e o valor hora deve ficar na faixa de R$25,00/hora mas é negociável dependendo do nível e experiência do programador, mesmo assim envie seu curriculo com valor desejável.

Tipo de contrato é PJ.

Oportunidade PHP - Triad Systems

Filed Under (oportunidade PHP) by Marcelo Toscano on 01-08-2008

Tagged Under :

A empresa Triad Systems está oferecendo 2 vagas para programadores PHP.

A primeira é para um porjeto de 2 meses e a outra para um projeto de tempo indeterminado.

É requerimento saber PHP avançado e MySQL e desejável que saiba usar Subversion e conheça o framework  Symphony

O salário é negociavél, mas deve estar entre R$25,00 e R$30,00/hora dependendo da experiência e conhecimento do programador.

Horário de trabalho das 9:00 até as 18:30 perto da região da Angélica, contratação PJ.

Os interessados enviem email para priscila.damasceno@triadsystems.com.br COM A PRETENÇÃO DE REMUNERAÇÃO.

Congresso Nacional de PHP - CONAPHP

Filed Under (Palestras e Seminários) by Marcelo Toscano on 30-07-2008

No site www.conaphp.com.br

A comunidade de PHP do Brasil se organizou mais uma vez este ano para promover mais um grande evento de PHP, desta vez com marca própria: CONAPHP - Congresso Nacional de PHP.

Durante os 2 dias do evento, serão apresentadas várias palestras pelos habituais nomes da cena de PHP do Brasil, mas este ano o evento contará com as presenças dos palestrantes internacionais: Andrei Zmievski (Smarty, PHP-GTK, PHP 6 Unicode) e César Rodas (PHP Programming Innovation Award, Google Summer of Code, WordPress).

O CONISLI é um evento muito popular de Software livre que sempre teve uma forte presença da comunidade de PHP desde 2005. Este ano a comunidade de PHP do Brasil se empenhou para organizar um evento de PHP que será um embrião de um tão desejado futuro evento organizado de forma independente, ou seja, organizado apenas por membros da comunidade de PHP.

CONAPHP - Congresso Nacional de PHP é a proposta inicial para uma nova marca que destinguirá eventos de PHP organizados exclusivamente por membros da comunidade de outros organizados por outras entidades.

À semelhança do que acontece noutros países, os maiores eventos de PHP são organizados por membros da comunidade. O CONAPHP não será diferente.

O tamanho da comunidade de PHP no mundo está estimado em 4,5 milhões de profissionais que trabalham no desenvolvimento e manutenção de mais de 20 milhões de sites. A comunidade de PHP no Brasil tem cerca de 5% do total global, portanto são mais de 200.000 profissionais de PHP brasileiros.

Como demonstração da sua força, a comunidade de PHP do Brasil está trazendo para este evento 2 palestrantes internacionais, para além de vários outros nomes conhecidos no Brasil.

Andrei Zmievski é um reputado desenvolvedor no núcleo de PHP. Ele é mais conhecido por ter sido o criador do sistema de templates Smarty e pela extensão de criação de aplicações desktop PHP-GTK.

Este ano ele vem falar o PHP 6, nomeadamente da maior mudança da qual ele foi o principal arquiteto: suporte nativo a Unicode. Este recurso vai facilitar muito o desenvolvimento de aplicações internacionalizadas em que o texto usa alfabetos distintos dos usados na Europa e Américas, como por exemplo os usados nos paises da Ásia, Leste Europeu, tais como Rússia, China, Japão, Coreia, etc..

César Rodas é o outro palestrante internacional convidado. Apesar de ser ainda um jovem universitário que estuda no Paraguai, César já participou em atividades dignas de grande destaque, como o fato de ter sido o vencedor do PHP Programming Innovation Award de 2007 organizado pelo site PHPClasses.org.

Neste evento Cesar virá falar sobre o seu mais recente trabalho de destaque incluido na iniciativa Google Summer of Code (GSOC). Trata-se do desenvolvimento de recursos avançados para o popular sistema de blogs WordPress que permitem lidar com arquivos de conteúdo de grande porte em sistemas mais apropriados para esse efeito, como o YouTube, Amazon S3, Google Picasa, etc..

Tudo aponta para que este seja mais um evento concorrido com grande participação de profissionais de PHP de todo Brasil. Se trabalha com PHP, não deixe de participar neste evento imperdível.

A chamada para trabalhos do CONISLI já começou. As pessoas interessadas em dar palestras no evento sobre PHP ou outros temas devem submeter as suas propostas no site do evento.

Smarty e caching - parte 4

Filed Under (Artigos, mão na massa) by Gregory brown on 14-07-2008

Tagged Under : , , , ,

Até agora temos visto como funciona a parte de caching do Smarty com exemplos que parecem vir da documentação(muitos na verdade são bem parecidos). Ainda existem mais algumas coisas que não são tão obvias assim para se se estudar. Esse pedaço final do artigo visa explicar essas.

Se você navegar até os outros artigos, perceberá que até o momento trabalhamos somente com um template (arquivo.tpl). Uma das propriedades mais interessantes do cache do Smarty é a capacidade dele trabalhar de forma independente com vários arquivos.

Vamos voltar um pouco ao Smarty para ter certeza de que entendemos o que eu acabei de dizer:

O Smarty gerencia templates, assim, você pode separar seu template em blocos. Vamos dizer que você tenha a seguinte estrutura:

Cabeçalho, menu da esquerda, chamada de artigos, chamada de eventos, rodapé.

Embora sua página seja uma só, você pode monta-la a partir de vários bloquinhos no Smarty.

Você teria arquivos como:

cabecalho.tpl, menu.tpl, chamadaArtigos.tpl, chamadaEventos.tpl e rodapé.tpl.

Note que não estamos usando um index.tpl neste exemplo. Muita gente iria criar um index.tpl e incluir as diretrizes de include nele. No nosso caso todos controles de exibição são feitos no index.php usando o metodo display().

Voltando ao caching, como já deve ser imaginável, se você está controlando o display de cada área, você também pode controlar o cache de cada área de forma independente. Por exemplo, o cabecalho.tpl, rodarpá.tpl e menu.tpl podem ter um cache de longa duração, os eventos podem ser atualizados a cada hora e os artigos podem ser atualizados manualmente a cada vez que se insere um novo.

Desta forma, temos uma única página, que sozinha tem vários controles de cache diferentes.

Não vou mostrar o exemplo completo de um código como esse, porque ele vai bem além do escopo deste artigo, mas vamos mostrar algumas das partes relacionadas ao cache.

O site de artigos e eventos.

Temos nossos TPLs montados e funcionando. Por preferência pessoal, gosto de separar os arquivos que controlam cada TPL em arquivos independentes. Assim, para cada TPL tenho um arquivo PHP que faz todas as buscas de banco, controle de cache, etc…

Nosso index.php vai acabar ficando +- assim:

<?php
/* includes diversos para que tudo funcione direito
* incluindo o include do Smarty, banco, etc…
*/

include(’cabecalho.php’);
include(’menu.php’);
include(’chamadaArtigo.php’);
include(’chamadaEventos.php’);
include(’rodape.php’);

?>

Bem simples na verdade. A index essêncialmente se encarrega de chamar todos os objetos e métodos necessários para que tudo funcione corretamente (que eu geralmente separo em um único arquivo para que eu possa fazer somente um include na Index).

Cada arquivo controla sua própria exibição, por exemplo o cabecalho:

$Smarty->cache_lifetime = 3600;
if(!$smarty->is_cached(’cabecalho.tpl’)){
//…
}
$Smarty->display(’cabecalho.tpl’);

E assim por diante.

Um bloco um pouco diferente é o bloco de artigos. Você pode notar na descrição da funcionalidade acima que eu disse que o bloco deveria ser renovado somente quando um artigo novo é publicado. Assim, o controlador do template não tem controle sobre a renovação do artigo, não usamos o lifetime para determinar quando o template deve ser limpo.

O que de fato fazemos é, no admin, quando rodamos a rotina de publicar o artigo, forçamos a limpeza do cache desse bloco.

No arquivo de publicarMateria.php, colocaríamos além de todos os controles de insert em banco e etc…, também uma chamada de Smarty similar a essa:

$Smarty->clear_cache(’chamadaArtigo.tpl’);

(note que a página publicar matéria não precisa estar sendo controlada via Smarty para usar o objeto Smarty, basta que ele tenha uma referência ao objeto).

Bom, falamos muito sobre o cache, mas ainda não concluímos todas as coisas que existem. Como este artigo visa apenas melhorar o seu entendimento de como utilizar o cache do Smarty, não vou entrar em detalhes de tudo que é possível e nem de todas as outras funcionalidades associadas ao cache do Smarty. De uma forma geral, com o conhecimento que você adquiriu nesses artigos, você já tem a faca e o queijo na mão.

A regra básica de programação ainda permanece verdadeira, planeje suas ações. Desenhe, pense, estude , teste e só depois, faça.

Bom galera, qualquer coisa, só me mandar suas dúvidas ou sugestões. O LiveJournal não tem form de e-mail, então basta ir pro http://bugz.doutromundo.com e usar o de lá.

Smarty e caching - Parte 3

Filed Under (Artigos, mão na massa) by Gregory brown on 11-07-2008

Tagged Under : , , ,

Antes de entrarmos de cabeça em uma das partes que eu acho mais interessante do Smarty Cache, uma coisa que deveria ter sido apresentada no último artigo era como limpar o cache.
Por falta de um lugar melhor, aqui vai.

<?
require('Smarty.class.php');
$Smarty = new Smarty;
$Smarty->caching = true;

// OPCAO 1 - Limpar todos o cache
$smarty->clear_all_cache();

// OPCAO 2 - Limpar somente o cache de um template
$smarty->clear_cache('aleatorio.tpl');
$smarty->display('index.tpl');
?>

Como você pode ver temos duas possibilidades, opção 1 permite limpar todos os caches do site em um único comando, e a opção 2 permite que você limpe o cache de um template individual.
Sugiro que você tome um certo cuidado ao utilizar o comando cleal_all_cache() pois em servidores com alta visitação, você repentinamente ter que gerar todos os arquivos de cache pode causar um impacto indesejado no site. Planeje suas mudanças de cache cuidadosamente. Mais nesse assunto depois.

Muitos caches, um template.

Uma das perguntas que eu mais ouvi ser feita (não somente com relação ao artigo mas nas empresas onde trabalhei com Smarty) foi em relação ao controle de de exibição do cache. Vou exemplificar usando o cenário similar ao explicado em um comentário no meu primeiro artigo:

Um template de Menu (menu.tpl) entra no cache. Quando o usuário está logado, o menu muda para não incluir os campos de login e senha, substituindo-os por um link de “logoff”.
Uma típica solução para um cenário desses seria algo assim:

<?
// includes e instancia do Smarty

// Checa se o usuario está logado
$logadoID = isset($_SESSION['id_logado'])?$_SESSION['id_logado']:false;
if (!$logado){
    $Smarty->clear_cache(’menu.tpl’);
    $Smarty->assign(’mostraLogin’,true);
    $Smarty->assign(’usuarioNome’,'Visitante’);
}else{
    $Smarty->clear_cache(’menu.tpl’);
    $Smarty->assign(’mostraLogin’,false);
    $Smarty->assign(’usuarioNome’,$_SESSION['nome_logado']);
}
$Smarty->display(’menu.tpl’);
?>

(eu resumi um pouco os códigos, pois já presumo que você saiba fazer o include do Smarty, setar o cache=1 etc….)

O código acima deveria funcionar relativamente bem, porém, ele tem não tão obvio.
O menos obvio é que toda vez que rodamos esse PHP, checamos por uma sessão chamada “id_logado” e decidimos o que fazer a partir dela. Vamos fazer um simulado pra ver o que acontece:
1 - Visitante
- entra ná pagina, ele não tem id_logado, limpa o cache, monta o menu, mostra o display
2 - Novo Visitante
- entra ná pagina, ele tbm não tem “id”, limpamos o cache, monta o menu, e mostra o display
3 - usuario logado - o usuario tá logado, limpamos o cahce, montamos o menu, e mostrams o display.

Bom sem continuar, vemos que de fato, embora estamos usando o cache, na realidade, estamos apenas gerando mais trabalho para o processador, sendo que toda vez estamos limpando o cache. Esquecemos de utilizar o is_cached para checar se o template está cacheado ou não. Então vamos lá:

<?
// includes e instancia do Smarty

// Checa se o usuario está logado
$logadoID = isset($_SESSION['id_logado'])?$_SESSION['id_logado']:false;
if (!$logado){
	if (!$Smarty->is_cached(’menu.tpl’)){
		$Smarty->clear_cache(’menu.tpl’);
		$Smarty->assign(’mostraLogin’,true);
		$Smarty->assign(’usuarioNome’,'Visitante’);
	}
}else{
	if (!$Smarty->is_cached(’menu.tpl’)){
		$Smarty->clear_cache(’menu.tpl’);
		$Smarty->assign(’mostraLogin’,false);
		$Smarty->assign(’usuarioNome’,$_SESSION['nome_logado']);
	}
}
$Smarty->display(’menu.tpl’);
?>

Agora geramos outro problema: De novo aos testes:
1 - visitante - não tem id, não tem cache, seta valores, mostra display
2 - visitante - nao tem id, o cache existe, mostra display
3 - visitante - nao tem id, o cache existe, mostra display
(legal com o visitante funcionou)
4 - usuario - tem ID, cache existe!, mostra display

Pronto como resolvemos isso? O Smarty guarda o primeiro cache, independente de termos logado ou não… assim todo mundo ve a página com o formulário de login.

Eu demorei, mas é importante que você entenda em detalhe a lógica por trás do Smarty para evitar problemas enquanto desenvolve. É muito comum você(eu ou qualquer um) fazer esse tipo de erro ao desenvolver, e por isso, fazer simulados com pequenos pedaços de código enquanto você desenvolve é importante.

Como resolvemos esse problema? Com cache dinâmico.

O cache dinâmico (por falta de melhor nome), permite você levar em consideração variáveis na hora de cachear seus arquivos. Vamos ao código, depois a explicação:

<?
// includes e instancia do Smarty

// Checa se o usuario está logado
$logadoID = isset($_SESSION['id_logado'])?$_SESSION['id_logado']:false;
if (!$logado){
	if (!$Smarty->is_cached(’menu.tpl’,$logadoID)){
                // Não vamos limpar o cache pq não tem cache
		//$Smarty->clear_cache(’menu.tpl’,$logadoID);
		$Smarty->assign(’mostraLogin’,true);
		$Smarty->assign(’usuarioNome’,'Visitante’);
	}
}else{
	if (!$Smarty->is_cached(’menu.tpl’,$logadoID)){
                // Não vamos limpar o cache pq não tem
		//$Smarty->clear_cache(’menu.tpl’,$logadoID);
		$Smarty->assign(’mostraLogin’,false);
		$Smarty->assign(’usuarioNome’,$_SESSION['nome_logado']);
	}
}
$Smarty->display(’menu.tpl’,$logadoID);
?>

Tá onde que mudamos? Eu adicionei a variável $logadoID como parâmetro dos metodos is_cached(), clear_cache() e display().
Agora vamos lá aos testes:

1 - visitante - não tem id, não tem cache menu.tpl0, seta valores, mostra display
2 - visitante - nao tem id, o cache menu.tpl0 existe, mostra display
3 - visitante - nao tem id, o cache menu.tpl0 existe, mostra display
4 - usuario 5 - tem ID = 5, o cache menu.tpl5 não existe, seta valores, mostra display
5 - usuario 5 - tem ID = 5, o cache menu.tpl5 existe, mostra display
6 - visitante - nao tem id, o cache menu.tpl0 existe, mostra display
7 - usuario 9 - tem ID = 9, o cache menu.tpl9 não existe, seta valores, mostra display
8 - usuario 5 - tem ID = 5, o cache menu.tpl5 existe, mostra display
8 - usuario 9 - tem ID = 9, o cache menu.tpl9 existe, mostra display

Pelos testes, parece que tudo funcionou!
Eu deixei a linha comentada do clear_cache porque é importante que você veja que no minuto que se usa o cache dinâmico, as funções que trabalham os templates precisam ter o “ID” associadas a elas.
Agora você deve estar perguntando porque eu demorei tanto para explicar algo que tão simples.
Usar o cache dinâmico em certos casos é imprescindível, você não tem como fazer algo assim sem ele, mas um “erro” muito comum dos desenvolvedores de Smarty é sair colocando ID em tudo que é cache. È importante lembrar que todo cache é um arquivo em disco, e que usando o cache dinâmico, você aumenta o número de arquivos existente no seu HD.
Isso pode não parecer um problema muito sério, mas depois de algum tempo, e em um site grande, você pode ter literalmente milhões de arquivos cache. Se você cachear uma página que não muda com um ID, você acabará tendo centenas de milhares de cópias do mesmo arquivo, gastando espaço desnecessariamente.

O Cache dinâmico tem uma funcionalidade bem interessante. É possível apagar todos os caches com um ID=X. Usando o nosso exemplo acima, poderíamos apagar dodos os caches do usuário com ID=9.
Para tal, basta executar o comando:

$Smarty->clear_cache(null, $logadoID);

Bom é isso. No próximo artigo, eu explicarei como funciona o agrupamento de caches, e se der darei alguns casos de uso para vocês terem na cabeça na hora de sair desenvolvendo.

4# Zend/PHP Conference – ZendCon

Filed Under (Notícias) by Marcelo Toscano on 09-07-2008

Acontece este ano, o quarto ZendCon - Zend/PHP conference que tem como objetivo juntar desenvolvedores de adminstradores de empresas de todo o mundo durante 3 dias de evento.

O tema deste ano é “PHP de alto impacto” com sessões que irão explorar as varias maneiras que os desenvolvedores tem de propiciar funcionalidades, performace e escalabilidade nas novas aplicações web, resultando numa vantagem real para sua companhia.

Mais de 60 sessões

A Zendcon 2008 irá oferecer mais de 60 sessões técnicas, de tutoriais e estudos de caso, elaboradas para benificiar arquitetos, desenvolvedores, adminstradores de sistemas e adminstradores de empresa de todos os nívies de experiência com PHP. As sessões irão destacar detalhes das inovações para criar, operar e gerenciar aplicações com velocidade, escalabilidade e simplicidade do PHP. Os palestrantes deste ano incluem pessoas como Marcus Börger, Sebastian Bergmann, Chris Shiflett, Jay Pipes e muitos outros.

Este membros da comunidade irão falar sobre os seguintes assuntos:

  • PHP Business Cases
  • Best Practices
  • The Basics of PHP
  • Advanced PHP Topics
  • Performance and Scalability
  • Rich Internet Applications
  • Zend PHP on i5/OS
  • Zend Framework

Para saber mais entre em http://www.zendcon.com

Smarty e Caching - Parte 2

Filed Under (Artigos, mão na massa) by Gregory brown on 09-07-2008

Tagged Under : , , ,

Agora que aprendemos um pouco sobre o chaching de uma forma geral, vamos olhar mais a fundo o mundo dentro do Smarty.

Eu geralmente trabalho com um arquivo de configuração geral para o Smarty. Um “smarty.config.php” que eu deixo em algum lugar acessível e fácil. Não vou entrar no mérito de organização de arquivos ou nomenclaturas, padrões de código etc… é apenas uma dica para facilitar a vida.

Bom você já deve estar usando o Smarty e está interessado em habilitar o cache. Para isso, basta setar a variavel “caching” para 1 com a seguinte linha:

$Smarty->caching = 1;

Onde $Smarty é o objeto Smarty que você instanciou antes.

Essa variavelzinha avisa o Smarty que você quer guardar as versões rendidas dos TPLs que você tem.

Vamos ver o que isso significa na prática:

TPL – Arquivo template (aleatorio.tpl):

<html>
<head><title>Exemplo 1</title></head>
<body>
O número escolhido é: {$aleatorio}

</body>
</html>

O arquivo PHP (aleatorio.php):

<?php
// incluir a class smarty
require('Smarty.class.php');
// criar nova instância
$Smarty = new Smarty;
// habilitar o cache
$Smarty->caching = 1; // atribuir um numero aleatorio para variavel aleatorio
$Smarty->assign('aleatorio',rand(1,100));
$Smarty->display('aleatorio.tpl');
?>

Ao rodar essa página a primeira vez, teremos um resultado parecido com esse:

O número escolhido é: 45

Agora toda vez que você rodar sua página no browser, você terá o mesmo resultado (se não, verifique a configuração do seu Smarty, permissão de escrita nos diretórios, etc…)

Com esse simples exemplo, vemos a essência do funcionamento mais básico de cache no Smarty.

Vamos complicar as coisas um pouco. Vamos supor (só por conveniência) que este numero aleatório deve ser alterado a cada 5 minutos. Como que se faz isso?

Uma opção seria caçar o arquivo no cache e apagá-lo manualmente, mas imagino que isso seja um pouco trabalhoso demais.

A outra opção seria avisar o Smarty, que esse cache tem uma vida útil de 5 minutos.

O arquivo PHP (aleatorio5min.php):

<?php
// incluir a class smarty
require('Smarty.class.php');
$Smarty = new Smarty;
$Smarty->caching = 1;
// LINHA NOVA
$Smarty->cache_lifetime = 300;
// LINHA NOVA
$Smarty->assign('aleatorio',rand(1,100));
$Smarty->display('aleatorio.tpl');
?>

Agora atribuimos um valor ao atributo “cache_lifetime” (traduzindo: vida util do cache).

Esse parametro recebe um número de segundos que deve ser cacheada uma página.

Agora se rodarmos esse exemplo 4 vezes em intervalos de 4 minutos, teremos:

0:00 - O número escolhido é: 32

0:04 - O número escolhido é: 32

0:08 - O número escolhido é: 78

0:12 - O número escolhido é: 19

(lembrem-se – os números são aleatórios e provavelmente serão diferentes)

Vou entrar em lifetime com mais detalhes em um outro artigo mais avançado, aqui meramente demos uma illustrada na utilidade do conceito.

Importante para o desenvolvedor.

Um dos atributos importantes quando se está usando o Smarty e o Cache, é o atributo:

compile_check

Ele basicamente verifica todos os arquivos envolvidos no template em questão. Se algum deles sofrer alguma modificação, o template é recompilado do Zero.

Isso é importante quando se faz modificações nos templates (tpl). Muitas vezes você irá ter situações onde você faz uma modificação em seu TPL e ela não é refletida no ambiente. Cheque sempre se você tem esse atributo ligado.

Ele é setado usando a linha:

$Smarty->compile_check = true;

Controle de fluxo:

Se você já tem uma certa experiência em programação, você deve ter percebido que do ponto de vista do PHP, nada mudou (peguemos o arquivo aleatorio5min.php)

1. <?php
2. // incluir a class smarty
3. require('Smarty.class.php');
4. $Smarty = new Smarty;
5. $Smarty->caching = 1;
6. $Smarty->cache_lifetime = 300;
7. $Smarty->assign('aleatorio',rand(1,100));
8. $Smarty->display('aleatorio.tpl');
9. ?>

O fluxo permanece o mesmo com e sem o cache. Isso, consequentemente não alivia nosso servidor caso ao invés de buscarmos um numero aleatório, tivessmos fazendo uma conta num banco MySQL ou fazendo um parse de um arquivo XML ou CSV.

Assim, será necessário fazer algumas mudanças no código para usufruir completamente do controle de cache do Smarty.

O que precisamos é verificar se o arquivo tem um cache válido, se ele não o ter, precisamos executar as funções necessárias para popular o template. Caso ele já tenha um arquivo de cache, podemos simplesmente exibir o arquivo cacheado, sem ter que preparar todas as variáveis.

1. <?php
2. // incluir a class smarty
3. require('Smarty.class.php');
4. $Smarty = new Smarty;
5. $Smarty->caching = 1;
6. $Smarty->cache_lifetime = 300;
7. if (!$Smarty->is_cached('aleatorio.tpl')){
8.     $Smarty->assign('aleatorio',rand(1,100));
9. }
10. $Smarty->display('aleatorio.tpl');
11. ?>

Como voce pode ver, incluimos uma nova chamada – is_cached(’arquivo.tpl’).

Essa chamada checa se o nosso cache é válido. Se ele não for (ela retornar false), executamos o nosso assign – no caso o gerador de números aleatórios.

Bom acho que já temos bastante para ir brincando.

Lembrem-se de algumas coisas para manter a vida fácil:

$Smarty->caching = 0; // não faz cache

$Smarty->is_cached(’arquivo.tpl’) – é importante para controlar o fluxo de dados no servidor

No próximo artigo, vamos ver em mais detalhes como cachear resultados dinâmicos. Isso é algo que já me perguntaram, mas o assunto é muito comprido para deixar em um só artigo.

Smarty e Caching

Filed Under (Artigos) by Marcelo Toscano on 30-06-2008

O artigo a seguir foi publicado originalmente por Gregory Brown no site http://elbugz.livejournal.com/1034.html

As informações disponibilizadas neste artigo são de responsabilidade de Gregory Brown do site http://elbugz.livejournal.com/

O Smarty é conhecido mais como um “Template engine” do que um “caching engine”. Embora a documentação fale sobre o cache, ele é pouco utilizado pelas pessoas e tende-se a pensar nele mais como uma ferramenta de exibição do qualquer outra coisa.

Vamos do começo…

O que é esse tal de caching engine?

Quando você faz um código php simples, por exemplo:

pag: exemplo1.php
<?php
for ($i=0;$i<5;$i++){
echo “$i - Linha repetida.<br />\r\n”;
}
?>
Ao rodar ele, o resultado será:

0 - Linha repetida.<br />
1 - Linha repetida.<br />
2 - Linha repetida.<br />
3 - Linha repetida.<br />
4 - Linha repetida.<br />

Toda vez que você acessar a página exemplo1.php, o que acontece é:

1 - seu servidor HTTP pede para o PHP interpretar o código-fonte do exemplo1.php
2 - o PHP lê o arquivo e processa as instruções nele
3 - ele cospe o resultado de volta para o servidor web
4 - o servidor web manda pra você.

Tá, legal, e daí? Você pergunta?

Aqui que entra o Caching-engine.

Um Caching engine permite você fazer algo um pouco diferente:

Toda vez que você acessar a página exemplo1.php, o que acontece é:

1 - seu servidor HTTP pede para o PHP interpretar o código-fonte do exemplo1.php
2 - o PHP lê o arquivo e processa as instruções nele
3 - o Caching-Engine (CE) verifica se existe uma versão já pronta da página
3a - se não tiver, ele executa as operações do for
3b - tem, lê o arquivo do disco.
4 - ele cospe o resultado de volta para o servidor web
5 - o servidor web manda pra você.

OK, então um caching engine basicamente cria uma cópia rendida de um arquivo pronto. Parece ser balela inútil, principalmente com um exemplo tão tosco e simples como um “for”.

Agora extrapolemos….

Imagine uma página que lê uma tabela de log do seu banco. Esses dados pegam o resultado estatístico a cada hora. Porque seu site tem muitas visitas, o LOG é bem extenso, e as queries demoram uns 2 segundos pra responder. Agora não só a query demora uns dois segundos pra responder, mas você ainda precisa fazer uma série de contas e cálculos complexos com os dados que são produzidos pela query.
Sua página agora demora uns 3 segundos pra responder, e nesse meio tempo, o processadordo servidor  fica próximos dos 75%.

Você pergunta “tá e?”.

Agora lembre-se que seu servidor tem acessos pra caramba. Imagine 1000 usuários solicitando a mesma página em 1 minuto? O site trava, bomba, cai ou qualquer outra terminologia que você queira atribuir a esse acontecimento.

Se você utilizar um CE, o processamento ocorre somente uma vez, na primeira solicitação. Uma cópia do resultado é arquivado, e os outros 999 usuários vão estar vendo um HTML e não um PHP processado realtime.

Resultado? Seu site não cai, os outros serviços continuam livres para usar o processador.

Smarty - Pra mudar sua vida

Filed Under (Artigos) by Marcelo Toscano on 30-06-2008

O artigo a seguir foi publicado originalmente por Jonathan Cardozo no site http://phpdeverdade.blogspot.com/2007/05/smarty-pra-mudar-sua-vida.html

As informações disponibilizadas neste artigo são de responsabilidade de Jonathan Cardozo do site http://phpdeverdade.blogspot.com/

Introdução

Olá Pessoal, como vão?

Nesse post iremos falar sobre um assunto muito interessante, geradores de templates, especificamente do Smarty, um projeto apoiado pelos criadores do PHP.

O que diabo é Smarty?

Bom, primeiro irei explicar o que é, e para que serve um gerador de templates. Um gerador de templates e responsável pela separação do código da interface de seu projeto, alguns ainda pensam num gerador de templates como um programa que gera layouts automaticamente mas não é esse o caso, por exemplo, você tem um form de envio de e-mail, quando você usa o Smarty você separa o form html da parte que cuida dos dados enviados nesse form.
O Smarty usa arquivos html com tags especiais para inserir os dados vindos do arquivo de controle php, e como se o template fosse uma fantasia de seus programa.

Para que serve mesmo?

Bem, eu poderia passar dias aqui escrevendo suas funcionalidade mas vou explicar dando exemplos práticos.

* Você tem um projeto onde trabalha com equipes distintas para o layout e a programação, o Smarty resolve.
* Você tem um site onde tem a opção do usuário escolher um layout personalizado, o Smarty resolve.
* Você tem um projeto onde vai ter que estar sempre mudando de layout periodicamente, como estações do ano, festas e coisas assim, o Smarty resolve.
* Seu projeto usa MVC(falaremos mais a frente) para maior eficiência nas atualizações, vai precisar do Smarty(ou outro gerador).

Vamos Começar

Vamos partir para a diversão em sí. Vamos instalar o Smarty, uma tarefa bem simples.
Primeiro vamos baixar a versão mais recente em http://smarty.php.net, nesse site também encontramos a documentação do projeto, e em português, que é muito boa por sinal.
Baixe o arquivo compactado em tar.gz, por isso vai precisar de um programa de compressão, existem milhares grátis por ai.
Descompacte o arquivo em uma pasta dentro de seu servidor web. Feito isso vai ver que na pasta do Smarty existem algumas pastas, mas você só ira precisar da pasta libs (mas não recomendo que apague os outros arquivos, são alguns exemplos e readmes) e pronto está instalado.

Hello World, nosso primeiro exemplo

Vamos fazer nosso primeiro exemplo, um script bem simples só para demostrar o funcionamento do Smarty.
O Smarty trabalha com uma estrutura de pastas bem intuitivas:

* templates - é a pasta onde ficarão os arquivos de template.
* templates_c - é a pasta onde será compilados os templates.
* configs - é a pasta onde ficarão os arquivos de configuração, não falarei aqui, mas é um recurso bastante interessante, veja no manual do projeto.
* cache - é a pasta de cache do smarty, que também é um recurso muito bom, mas não será citado nesse post.

Essas pastas se chamam assim por padrão, mas você pode configurar o Smarty para utilizar outros nomes, veremos a frente.
Crie uma pasta para nosso projeto na raiz do seu servidor, chame-a de HelloWorldSmarty, dentro dessa pasta, crie os 3 diretorios: templates, templates_c e configs.
Dentro do diretório de nosso projeto crie um arquivo index.php, e dentro dele vamos chamar o smarty, veja só:

<[? # @File: Index.php - Smarty Hello World

# Requendo a Classe do Smarty
# Considerando que a pasta do Smarty é "smarty"
require("../smarty/libs/Smarty.class.php");

# Criando objeto da classe $mySmarty = new Smarty; # Passando algumas configurações # Ativando a chegagem na compilação $mySmarty->compile_check = true;
# Ativando a depuração do codigo
$mySmarty->debugging = true;
# Se voce deseja definir os nomes das pastas do smarty use
# $mySmarty->template_dir = "DIRETORIO_DESEJADO";
# $mySmarty->compile_dir = "DIRETORIO_DESEJADO";
# $mySmarty->cache_dir = "DIRETORIO_DESEJADO";

# Vamos mandar algumas variaveis pro tempalte
# Sintaxe - $mySmarty->assign("NOME_DA_VARIAVEL","VALOR");
$mySmarty->assign("nome","Php de Verdade");

# Agora vamos mandar o smarty renderizar o arquivo final
# Informe o template que sera procurado no diretorio de templates
$mySmarty->display("index.tpl.html");

?]>

Pronto, o código está bem comentado então vamos passar para outro passo, o template. O template é um arquivo em HTML(”<>”) com marcações específicas do Smarty(”{}”), entao vá na pasta templates e crie o arquivo que estou chamando no nosso arquivo de controle, “index.tpl.html”, pode chama-lo como quiser, com qualquer extensão também, não importa, desde que chame corretamente no arquivo de controle. Ai vai o codigo dele:

* Atenção: Pessoal to usando as tags HTML(”<>”) assim (”<[]>”) porque o blog bloqueia tags html viu, mas na hora de escrever no arquivo escreve tags HTML mesmo.

<[html]>
<[body]>
<[p]>Hello World em Smarty, seja bem vindo {$nome}<[/p]>
<[body]>
<[/html]>

Pronto, salve o arquivo, é um template simples que so exibira a variavel “nome”, veja que as tags do Smarty ficam dentro dos “{}” mas isso pode ser configurado também.
Vá em seu navegador (de preferência Firefox, to brincando mas é o melhor) e digite o endereço para seu arquivo de controle no nosso case seria algo como “http://localhost/HelloWorldSmarty/index.php” e veja o resultado ele deve exibir a mensagem: “Hello World em Smarty, seja bem vindo Php de Verdade”.

Conclusão

Pronto pessoal esse foi nosso primeiro exemplo do Smarty, espero que tenham gostado e comentem e aí, nos próximos capítulos vamos trazer mais exemplos, demonstrando o poder dessa ferramenta, grande abraço.

Encontro PHP-SP 26/06/2008

Filed Under (unconference & buteco & beer) by Marcelo Toscano on 26-06-2008

Vai ser um encontro para fomentar a atividade do grupo de usuários de PHP-SP
que está sendo tocado pelo Marcelo Toscano e Rafael Dohms.

http://www.phpsp.org.br/

Também falaremos sobre as palestras de PHP e o encontro de
desenvolvedores de PHP que vai ocorrer no CONILSI em Outubro. Quem
estiver interessado em palestrar lá já pode comentar isso. O Augusto da
PHP Magazine é que está na organização do CONISLI tocando a parte de PHP.

Na 6a. feira temos o  Google Developer Day em Sampa quem quiser ir e conseguiu se inscrever, aparece por lá, vai ter uma turma do PHP-SP por la.

O Local ainda não esta definido já que não sabemos a quantidade de pessoas que vão, o que sabemos é que vamos nos encontrar na catraca do metro brigadeiro as 20 horas, já que naquela região tem varios barzinhos.

Hora e local

Catraca do metro Brigadeiro as 20 horas do dia 26/06/2008

Seminário gratuito de Drupal em São Paulo

Filed Under (Palestras e Seminários) by Marcelo Toscano on 11-06-2008

14 de junho, sábado
USP - Auditório da História
Av. Professor Lineu Prestes, 338 - Cidade Universitária, São Paulo - SP

Site http://seminario.drupal-br.org/

PHPSC Conf

Filed Under (Uncategorized) by Marcelo Toscano on 06-06-2008

O Grupo de Usuários de PHP do Estado de Santa Catarina estará
promovendo evento em Chapecó oeste do estado em parceria com a
UnoChapecó nos dias 20 e 21 de Junho de 2008.

A grade de palestras pode ser encontrada no endereço:

http://www.phpsc.com.br/?page_id=10&language=pt

As inscrições podem ser realizadas no endereço:

http://www.unochapeco.edu.br/inscricoes/

E informações sobre hospedagem em Chapecó:

http://www.phpsc.com.br/?page_id=11&language=pt

Encontro dos membros do PHP Líderes.

Filed Under (Notícias) by Marcelo Toscano on 04-06-2008

Fotos de alguns dos membros do PHP Líderes que foram à reunião em São Paulo, que por sinal foi muito proveitosa.

http://www.flickr.com/photos/toscano

Mão na massa - Zend Framework

Filed Under (mão na massa) by Marcelo Toscano on 04-06-2008

A Tempo Real Eventos promoverá no dia 12 de julho o treinamento “Mão
na Massa” de Zend Framework.

Zend Framework faz parte do PHP Collaboration Project da Zend, um
esforço para criar padrões para o PHP no mundo e facilitar o
compartilhamento e reaproveitamento de código.

Ele ocorrerá das 9h00min às 17h00min em laboratório com 1 pessoa por
máquina.

O treinamento será dado por Flávio Gomes da Silva Lisboa, do SERPRO,
autor do livro “Zend Framework: desenvolvendo em PHP 5 orientado a
objetos com MVC”.

O endereço para inscrições é:

http://www.temporealeventos.com.br/?area=107

Bem vindo ao PHPSP

Filed Under (Notícias) by Marcelo Toscano on 04-06-2008

Olá, este post é somente para dizer que ainda estamos organizando nosso site e que em breve todo o conteúdo estará disponível.

Teremos agenda com os eventos que serão organizados pelo grupo onde todos poderão conferir, quando e onde vão acontecer os encontros além de tudo vamos falar muito sobre PHP e das novidades sobre as comunidades PHP do Brasil.

[]s

Marcelo Toscano