Instalando o XCache no Ubuntu

Introdução Muitas vezes, precisamos gerar um cache a nível de código para nossas aplicações, pra evitar uma carga tão grande em servidores muito acessados. Opções não faltam por aí, e ao meu ver, a mais conhecida no mundo PHP é a eAccelerator, mas vasculhando na net - e nos repositórios do Ubuntu - me deparei com o XCache, que atendeu perfeitamente minhas necessidades, sem contar na simplicidade da instalação.

Instalando A instalação do XCache para o PHPv5 é simples, dando pequenas diferenças entre as versões o Ubuntu Feisty e Gutsy.

Primeiro, vamos instalar o módulo:

$ sudo apt-get install php5-xcache Feito isso, vamos editar o arquivo /etc/php5/conf.d/xcache.ini para definirmos um usuário e senha para a página de administração, o meu eu deixei da seguinte forma, com a senha “testando” em MD5:

[xcache.admin] … xcache.admin.auth = On xcache.admin.user = “thiago” xcache.admin.pass = caa9c8f8620cbb30679026bb6427e11f … O passo seguinte, é criar um alias no Apache, para o admin, eis aqui a diferença que falei entre o as versões Feisty e o Gusty do Ubuntu, no primeiro, a localização para o admin é /usr/share/doc/php5-xcache/misc/admin e no segundo, em /usr/share/xcache/admin. Outra coisa que notei no Feisty, é que dois arquivos do admin, vieram compactados, então, vá na pasta do admin, e dê um “gunzip” no xcache.php.gz e xcache.tpl.php.gz.

$ sudo gunzip xcache.php.gz $ sudo gunzip xcache.tpl.php.gz O último passo, é criarmos o arquivo de cache utilizado pelo módulo:

$ sudo touch /tmp/xcache $ sudo chmod a+rwx /tmp/xcache Pronto, restarte o Apache e tente acessar o seu /xcache-admin/ com o usuário e senha e olhar as páginas cacheadas, limpar o cache, …

Internacionalizando Aplicações baseadas no CakePHP 1.2

Em primeiro lugar, este manual é inteiramente baseado “p28n, the top to bottom persistent internationalization tutorial. de Jason Chow, então, o que vou citar aqui, são os passos que utilizei para “internacionalizar” uma pequena aplicação que escrevi para um cliente.

Primeiramente, adicionamos a seguinte linha em nosso config/bootstrap.php:

1
define('DEFAULT_LANGUAGE', 'pt-br');

Com isso, definimos a linguagem padrão, para o português.

Agora, ao contrário do que o artigo indica, eu adicionei somente a linha abaixo no config/routes.php:

1
2
// rota para troca de idioma
$Route->connect('/lang/*', array('controller' -> 'p28n', 'action' -> 'change'));

Agora, para podermos trocar de idioma, é criamos um link ou redirecionamento para “/lang/idiomaDesejado”, que o controlador p28n irá tratar, mas anes disso, vamos criar o componente P28n, e salve no diretório controllers/components da sua aplicação, copie o código abaixo:

1
2
3
4
5
6
7
8
9
10
Session->check('Config.language') ) {
    $this->change(($this->Cookie->ad('lang') ? $this->Cookie->read('lang') : DEFAULT_LANGUAGE));
}

function change($lang = null) {
    if ( !empty($lang) ) {
        $this->Session->write('Config.language', $lang);
        $this->Cookie->write('lang', $lang);
    }
}

Reparou que eu não botei a tag de fechamento do PHP? Posé, deixa assim mesmo, fechando, o script acusa um erro no envio dos headers e a bagaça não anda mesmo, então, pode deixar… Seguindo o mesmo estilo - não fechando a tag do PHP, criamos o controlador que comentamos agora pouco, copie o código abaixo, e salve com o nome de p28n_controller.php, no diretório controllers da aplicação.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function setLang ($lang)
{
    P28n->change($lang);

    $this->redirect($this->referer(null, true));
}

function shuntRequest()
{
    $this->P28n->change($this->params['lang']);

    $args = func_get_args();
    
    $this->redirect("/" . implode("/", $args));
}

Agora vamos adicionar a seguinte linha no arquivo “app_controller.php”

1
var $components = array ('P28n');

Isso fará com que o componente P28n, que você criou anteriormente, seja utilizado por toda a aplicação.

Agora, com tudo instalado e funcionando, vamos testar, pegue algum arquivo da sua aplicação (em views ou mesmo em controllers), qualquer lugar que gere uma mensagem de retorno para o usuário, vamos usar como exemplo a linha abaixo:

1
echo  "Bem vindo";

E trocamos para:

1
echo __("Bem vindo");

Entendeu? Todas as mensagens você põe agora entre __(), se você for utilizar a mensagem como retorno (e não diretamente como echo), coloque o parametro “true”, ficando assim:

1
$msg = __("Bem vindo", true);

Feito isso para todas as mensagens da aplicação, vamos gerar o arquivo de tradução, na shell, crie os diretórios das linguagens:

$ cd aplicacao
$ mkdir -p locale/pt_br/LC_MESSAGES
$ mkdir -p locale/eng/LC_MESSAGES

Diretórios criados, vamos gerar o arquivo com as strings a serem traduzidas:

$ cd aplicacao
$ ../cake/console/cake extract -project aplicacao

Então, ele irá fazer algumas perguntas, na sequência:

Hello thiago,

Welcome to CakePHP v1.2.0.5427 alpha Console
---------------------------------------------------------------
App : aplicacao
Path: /var/www/apliacao
---------------------------------------------------------------

Extracting...
---------------------------------------------------------------
Path: /var/www/aplicacao
Output Directory: /var/www/aplicacao/locale/
---------------------------------------------------------------
Would you like to merge all translations into one file? (y/n) [y] > y
What should we name this file?  [default] >
Processing /var/www/aplicacao/app_controller.php......

Pronto, foi criado um arquivo chamado “default.pot”, no diretório locale que criamos, copie-o, para os diretório LC_MESSAGES do idioma, trocando a extensão de “.pot” para “.po”

$ cd aplicacao/locale
$ cp default.pot pt_br/LC_MESSAGES/default.po
$ cp default.pot eng/LC_MESSAGES/default.po

A estrutura do arquivo é bem simples, algo como:

#: /controllers/contato_controller.php:16;55
msgid "Bem vindo"
msgstr ""

O processo de tradução, é simples, bastando inserir a tradução da mensagem em “msgid” em “msgstr”,

#: /controllers/teste_controller.php:16;55 
msgid "Bem vindo" 
msgstr "Welcome"

Viu? Fácil não? Traduza suas strings, e acesse alterne entre os links “/lang/pt_br” e “/lang/eng” da sua aplicação.

;)

Desenvolvendo em PHP com o Eclipse

Essa semana comecei a utilizar o Eclipse para desenvolver, já sabia que existiam plugins, para fazê-lo funcionar com o PHP, um deles, era o PDT (PHP Development Tools).

Então mãos a massa, no site, diz que é possível utilizar o próprio updater do Eclipse para instalar o pacote, então, dei um apt-get aqui e baixei o Eclipse direto dos repositórios do Ubuntu, mas uma coisa: não tem o PDT lá, claro. Só que pelo updater não dá pra instalar também, ele fica reclamando de dependências do próprio Eclipse, saí adicionando sites ali na ferramenta mas não obtive sucesso, então, o jeito foi entrar no site do PDT, e baixar um pacote chamado “pdt-all-in-one”, que é um pacotão, já com o Eclipse junto. Muuuuito mais fácil!

O pacote tem quase 120Mb, então, tem que ter um pouquinho de paciência, vai no site e enquanto espera, vai fazer um café hehehhe..

Pacote pronto, agora é só instalar o Subclipse, que é um plugin para o Eclipse trabalhar com o Subversion. Vou dizer, que tô gostando muito até agora. Utilizei por muito tempo o Zend Studio, mas é pago, e eu queria uma alternativa livre e pelo jeito, achei!

;)