Comitiva – Cuide bem do seu evento

Na última semana o PHPMS realizou seu 3º Workshop, que mais uma vez, foi um sucesso.

Como comentei no post anterior, dessa vez minha participação foi focada em um ponto: criar uma solução para gerenciar as inscrições do evento.

Dessa necessidade surgiu o Comitiva, um sistema de gerenciamento de eventos, que nasceu a pouco e já passou pela sua primeira prova de teste (o próprio workshop).

No momento ele pode ser usado para cadastrar um evento, permitir que usuários se cadastrem e se inscrevam nos eventos cadastrados, mas vários outros recursos já estão em andamento.

A parte boa é que o sistema é livre – sim, open source, é gratuito e feito em CakePHP 1.3. Estamos utilizando o Github para gerenciar o código e hoje criei uma conta no LighthouseApp para gerenciar as tarefas. Aliás, queria agradecer e recomendar ambos os serviços que suportam, sem custos, projetos open source. Valeu =]

Veja um demo na versão instalada para o PHPMS: http://comitiva.phpms.org

Bom, como uma andorinha só não faz verão, o Comitiva contou com alguns colaboradores/apoiadores que gostaria de citar e agradecer aqui:

Zé Agripino: fez boa parte do trabalho sujo, hehehe. Criar as views, traduzir textos, corrigir bugs. Ajudou em todo o sistema, é O cara;
Felipe V. Rigo: começando a trabalhar com CakePHP agora, apanhou um pouco para conseguir rodar o sistema em sua máquina, mas graças a isso e sua persistência descobrimos e corrigimos vários bugs do sistema;
José Ricardo: estava ocupado no inicio do projeto, porém após o workshop ficou animadão e já fez algumas contribuições importantes, como a configuração do Migrations para o sistema;
Bruno Porkaria: também estava bem corrido e cuidando de outras coisas do workshop, mas testou bastante o sistema e teve a paciência de reportar problemas e sugestões sempre que estas apareciam.

É isso aí, espero trazer mais novidades em breve, principalmente sobre o projeto =]

3º Workshop do PHPMS

Tenho dado uma pausa nos posts aqui do blog por 3 motivos: estou na reta final da faculdade, a Radig esta indo muito bem obrigado e o PHPMS esta organizando seu 3º Workshop. E este último é motivo para este post.

Para quem me acompanha há algum tempo, sabe que participo do grupo e sempre ajudo de alguma forma no evento, dessa vez não seria diferente.
O evento terá 4 excelentes palestras, sendo duas de nossa celebridade convidada, Guilherme Blanco.

Tenho ajudado bastante no desenvolvimento de uma ferramenta para a gestão de eventos do grupo, que terá seu código liberado tão breve quanto fique pronto (ou seja, sem data, mas não deve demorar muito, hehehe). O nome dele é Comitiva.

Confira abaixo o release oficial:

O 3° Workshop do PHPMS será realizado no dia 27 de março no SENAC/MS, das 08:30 até 17:50. O evento vai contar com a presença de Guilherme Blanco que hoje trabalha na empresa sul-africana MIH/SWAT, desenvolvedor do core do projeto Doctrine, bem como nas frameworks Zend e Symfony. Ele vai apresentar duas palestras, “Overview do Doctrine 2.0″ e “Usando o Doctrine 2.0 com Zend Framework 1.10″.

Vamos ter também duas palestras sobre WordPress, a ferramenta de blog mais usada no mundo, Flávio Ricardo irá apresentar o tema “Gerenciando blogs e websites de forma flexível com WordPress MU” e em seguida Gabriel Novaes aborda o tema “WordPress SEO: Práticas e plugins para robos de busca”.

Sem falar na tradicional mesa-redonda para debater assuntos de interesse da comunidade de desenvolvedores PHP do estado, que vem nesse workshop com o tema “Perfil do programador PHP no estado de MS”.

Informações para inscrição no evento, grade completa, você encontra no hotsite do evento http://www.phpms.org/workshop/

X.ORG (XORG): Utilizando dois monitores com driver NVidia no Linux

Há pouco mais de 3 anos troquei meu desktop por um notebook para lazer e trabalho, e mais ou menos um ano atrás comprei um monitor para trabalhar.

Desde o primeiro momento fiquei pensando em como fazer meu notebook e sua placa de video NVidia 8400M trabalhar com a tela de 1440×900 do notebook juntamente com a tela de 1920×1080 do monitor, sem perda de perfomance.

Por quase um ano utilizei os dois em conjunto abrindo mão da aceleração de hardware (efeitos 3d, performance e etc), acreditando que esta era a única maneira. Qual era minha configuração? Eu usava o Xinerama do X.org, e neste caso, não há aceleração por hardware. Aliás, pelo que me parece é uma tecnologia abandonada e defasada.

Depois de várias pesquisas e tentativas, achei uma configuração ideal, trocando o Xinerama pelo Twinview e XRand. Agora tenho aceleração de hardware, detecção de resolução e não preciso me preocupar ao utilizar só a tela do notebook (antes precisava editar o xorg.conf para ajustar a resolução).

Para quem estiver na mesma situação, aqui está meu xorg.conf Continue lendo

Dica Rápida – Otimizando código

Há um bom tempo atrás rolou uma discussão na lista do PHPMS sobre um comparativo de performance entre PHP x Python x Ruby x Perl.

Bom, a conclusão que tirei do comparativo foi de que a velocidade de execução é importante, mas mais do que isso, o programador é essencial. No exemplo da thread supracitada, o PHP perdia feio para as outras linguagens, mas olhando para o código escrito em PHP, dava para notar  vários erros de uso da linguagem e suas funções (ponto para o Begnini que viu o código antes de todos).

Então a dica de hoje é: estude bem a linguagem. Procure a saber o funcionamento das funções e construções da linguagem, isso é essencial para se tornar um bom programador.

Exemplos de código

//uso comum
for($i = 0; count($var) < 0; $i++)
  ...
 
//forma mais adequada
for($i = 0, $c = count($var); $c < 0; ++$i)
 ...
 
//outro caso, ao invés de forçar várias verificações
if( $a > 100 )
 ...
if( $a < 100 )
 ...
if( $a == 100 )
 
//use a estrutura adequada
if( $a > 100 )
 ...
else if( $a < 100 )
 ...
else //não precisa fazer o último teste
 ...
 
// esse último caso que me inspirou a fazer o post
 
// a pessoa só queria saber se o array $var tava vazio, e para isso contou todos os seus elementos
if ( count($var) > 0 )
 ...
 
// enquanto ela poderia ter usado uma verificação direta como
if ( !empty($var) )

Este último caso, que motivou o post foi visto no changelog da versão 1.2.6 do CakePHP. Neste caso o “erro” foi encontrado e corrigido pelo brasileiro Juan Basso neste commit.

O intuito do post não é meter o dedo na cara de ninguém, apenas alertar para situações onde culpamos uma determinada linguagem pelo desempenho de nossa aplicação quando o problema na verdade é o mal uso que estamos fazendo.

Joomla! 1.6 – O que está para chegar…

Em 21 de Janeiro de 2008 foi lançado a versão 1.5 deste excelente CMS, e desde então foram lançados 15 subversões (atualizações), envolvendo pequenas melhorias e correções de segurança.

Desde meados de 2009 quem utiliza o Joomla! só pensa na próxima grande atualização do CMS, a versão 1.6. Ela deve incluir alguns dos itens mais requisitados pela comunidade como:

  • Sistema de permissões, com possibilidade de se criar novos grupos e definir o que cada grupo pode fazer;
  • União das Seções e Categorias, ao mesmo tempo que agora pode-se ter infinitas subcategorias;
  • Suporte a outros sistemas de banco de dados;
  • Assistente para adicionar link para um artigo enquanto estamos escrevendo outro artigo; Continue lendo

Dica Rápida – CakePHP – Personalizando as páginas de erros

A grosso modo, existem dois tipos de erros no CakePHP:

Erros de codificação e configuração:

Quando acessamos um endereço de nossa aplicação e está faltando alguma coisa, o CakePHP nos retorna uma mensagem avisando sobre o erro ocorrido e a causa dele (o que falta fazer).

Erros HTTP:
Quando tentamos acessar um endereço inexistente (erro 404) e quando há falha no servidor (erro 500).

O primeiro tipo deixa de ser exibido quando você configura o debug para o valor zero. A partir deste momento todos os erros relacionados ao primeiro tipo serão mostrados como um erro 404.
O segundo tipo é exibido não importando o valor do debug.

Como personalizar essas mensagens?

Caso queira usar o mesmo layou definido no arquivo app/views/layouts/default.ctp, você precisará apenas criar uma pasta chamada errors dentro da pasta views  (caso ela não exista) e depois criar um arquivo para cada erro, ficando mais ou menos assim:

app/views/errors/error404.ctp
app/views/errors/error500.ctp
app/views/errors/missing_action.ctp

Veja a lista completa de arquivos acessando o diretório cake/libs/views/errors/
Caso queira ir um pouco além, personalizando também o layout da mensagem, adicione um arquivo com o layout definido em app/views/layouts/. Vamos chamar esse arquivo de errors.ctp;
Em seguida, vamos adicionar o seguinte código em nosso AppController:

/**
 * Caso já esteja usando o beforeRender, apenas adicione a linha interna abaixo ao seu beforeRender
 */
function beforeRender () {
       $this->_setErrorLayout();
}
 
function _setErrorLayout() {
    if($this->name == 'CakeError') {
        $this->layout = 'error';
    }
}

Pronto, agora é só personalizar o arquivo errors.ctp da forma que achar melhor =]
Dica retirada do Teknoid

Dica rápida

Ontem estava aplicando algumas ideias encontrada no excelente Super Awesome Advanced CakePHP Tips e me deparei com um erro que ocorria na minha aplicação.

PROBLEMA:
Ao tentar usar a função file_exists do PHP dentro do arquivo config/bootstrap.php para incluir um outro arquivo do mesmo diretório sempre recebia como resposta o valor FALSE

SOLUÇÃO:
Descobri que ao usar o file_exists o PHP estava tomando como diretório corrente o webroot/ e não o diretório do bootstrap.php (arquivo atual), então tive de acrescentar o prefixo ‘../config/’ para encontrar o arquivo que procurava.
Após usar o file_exists, iria dar um include no arquivo, neste caso o comportamento é diferente: ele considera o diretório corrente como sendo o diretório do arquivo que está chamando a função ( no meu caso o config/), portanto não é preciso adicionar prefixo nenhum.

Ainda não consegui descobrir o motivo desses dois comportamentos no mesmo ambiente, porém imagino que o comportamento do file_exists está ligado ao arquivo .htaccess do CakePHP que seta para o Apache o diretório webroot/ como sendo a raiz do domínio.

Se souber a resposta deixe-a no comentário que eu atualizo o post.

Até a próxima.

———————————–
Atualizando conforme combinado – 27/01/2010
———————————–

O Társis deu uma boa dica para evitar esse tipo de problema: utilizar as constantes do CakePHP, no caso da dica do post, a constante utilizada seria CONFIGS, ela contém o caminho completo para o diretório /config.

A chamada da função ficaria assim:

if( file_exists(CONFIGS . 'arquivo.php') ) include( CONFIGS . 'arquivo.php');

Além da constante CONFIGS temos algumas outras, como a WWW_ROOT e IMAGES que seguem o mesmo princípio, mas para apontar o caminho completo do diretório /webroot e /webroot/img respectivamente.
Veja a lista completa de constantes em http://book.cakephp.org/view/122/Core-Definition-Constants

CakePHP 1.3 quase assado

Pouco mais de um ano após o lançamento da versão 1.2.0 do CakePHP, está para ser lançado, dia 13 de fevereiro, a versão 1.3 deste poderoso framework.

Tenho feito alguns testes em cima dele, estou inclusive reescrevendo um pequeno CMS que possuímos na empresa em cima desta versão (árvore 1.3-dev do repositório do projeto) e apesar de alguns pequenos bugs (ainda é uma versão de desenvolvimento, né?) esta versão possui muitas melhorias na sintaxe – que agora está mais concisa –  e novas funcionalidades.

Para a migração de nossa aplicação, não foi preciso alterar muita coisa, porém para grandes aplicações, deve-se considerar a necessidade do upgrade.

Abaixo segue uma lista de links para algumas páginas com informações sobre esta nova versão do CakePHP (todas em inglês):

Caso tenha interesse em ajudar os desenvolvedores, baixe a versão em desenvolvimento e faça alguns testes. Só não esqueça de reportar eventuais problemas ou patchs que você venha a produzir. Não se preocupem com o tempo de resposta da equipe de desenvolvimento, eles realmente estão empenhados em fazer um bom trabalho, é possível que tenha feedback de seu ticket/patch em menos de 1 hora – experiência própria.

Logo que concluir algumas tarefas e tiver feito mais testes colocarei aqui meu “parecer” sobre a nova versão, enquanto isso acompanhe a página de desenvolvimento para ficar por dentro das atualizações.

Trabalhando com PHP 5.2 no OpenSUSE 11.2 (Downgrade do PHP 5.3 para 5.2)

No final de 2009 foi lançado a versão 11.2 do OpenSUSE, e como de costume para esta distro, todos os seus pacotes foram atualizados para a última (ou uma das últimas) versão estável. Isso aconteceu como PHP (que no lançamento estava na versão 5.3) como o MySQL (versão 5.1) dentre vários outros.

Acontece que quem trabalha com Drupal, Joomla! ou CakePHP (última  versão estável é a 1.2) deve aguardar ainda para poder utilizar a versão 5.3 do PHP, que incluí várias mudanças, caso contrário eles podem não funcionar ou apresentar vários avisos.

Pesquisando sobre o problema descobri que não há no repositório do OpenSUSE (os oficiais nem nos mais conhecidos) o PHP 5.2 disponível, então como fazer? Baixar o fonte e compila-lo? É uma saída, mas queria algo “OpenSUSU-like” (mais fácil).

Dando uma vasculhada no oráculo encontrei openSUSE 11.2: Downgrade PHP 5.3 to 5.2

Resolvi adaptar algumas coisas e funcionou perfeitamente, vamos lá aos passos com minhas modificações:

  1. Abra o Gerenciador de Software;
  2. Vá no menu “Configuração” -> “Repositórios”;
  3. Procure o repositório “Atualizações Para o OpenSUSE 11.2-0”, clique sobre ele e depois no botão editar, na parte inferior da janela;
  4. No campo “Diretório do Servidor” altere o “11.2” para “11.1” e então clique em OK; Na versão 11.1 o PHP está na versão 5.2
  5. Procure o repositório “OpenSUSE 11.2 OSS”, clique sobre ele e depois no botão editar; Este e o próximo passo são necessário caso você deseje fazer o downgrade do MySQL para versão 5.0 (eu recomendo isso para deixar tudo compatível, como era no OpenSUSE 11.1)
  6. No campo “Diretório do Servidor” altere o “11.2” para “11.1” e então clique em OK;
  7. Novamente clique em OK na listagem de repositórios;
  8. De volta a janela de gerenciamento de software, pesquise por PHP5, caso você já tenha instalado o PHP 5.3 aproveite agora para remover tudo relativo a ele, caso contrário selecione os pacotes que precisar e tenha certeza de marcar a versão correta (para mim foi 5.2.11). Verifique a versão de cada pacote clicando sobre ele e em seguida na aba “Versões” da janela, se houver mais de uma, marque a relativa ao PHP 5.2.x (onde x for o maior disponível);
  9. Agora, pesquise os pacotes relativos ao MySQL (utilize o termo “mysql” na caixa de busca);
  10. Você deve marcar as opções “libmysqlclient15”, “mysql” e “mysqlclient” conferindo se todos estão com a versão selecionada para 5.0.x (onde x é o maior número disponível);
  11. Clique agora em OK para instalar os pacotes, uma janela irá abrir informando a necessidade de instalar alguma dependência. Dê uma olhada se não há conflitos e clique em OK; Agora é só aguardar.
  12. Abra agora o “Repositórios de Software” e volte os repositórios para sua configuração original (trocando o 11.1 para 11.2), caso contrário não receberá as últimas atualizações dos outros softwares. Recomendo também que vá ao “Gerenciador de Software” e bloqueie os pacotes que instalou, para que o OpenSUSE não tente atualiza-los (os pacotes do PHP e MySQL);
  13. Depois de instalar os pacotes, reinicie seu Apache logando-se como root no terminal e executando o comando “rcapache2 restart”; Verifique se o PHP está funcionando corretamente. Deve estar;
  14. No OpenSUSE 11.2 o socket do MySQL mudou de endereço, mas como instalamos a versão antiga do MySQL não teremos essa alteração, porém alguns aplicativos (além do PHP) usam o MySQL (como o meu Amarok), então vamos criar um link simbólico onde deveria ser o endereço novo apontando para o antigo para que não haja problema, faremos isso como root;
  15. Crie o diretório que é padrão para o socket na versão 11.2 do OpenSUSE: mkdir /var/run/mysql
  16. Entre no diretório criado e crie o link simbólico para o socket: ln -s mysql.sock /var/lib/mysql/mysql.sock
  17. Reinicie seu OpenSUSE e bom proveito.

Caso tenha alguma dúvida deixe-a nos comentários. Se necessário tiro alguns screenshots para ilustrar melhor.

Latinoware 2009 – COLAPHP – Evento fantástico

Eae pessoal, tudo tranquilo?

Tenho andado bem corrido ultimamente e não tenho conseguido dar a atenção que queria ao blog. De agora em diante as coisas não devem melhorar muito, mas farei o possível para trazer coisas interessantes pra cá.

Desde o dia 21/10/2009 estou em Foz do Iguaçu – PR, para participar do Latinoware 2009, um dos maiores eventos de software livre das Américas.
Estou tendo a oportunidade de ministrar um minicurso e apresentar uma palestra no “subevento” COLAPHP – Congresso Latinoamericano de PHP, que possui uma trilha dedicada a linguagem dentro do  Latinoware.

A experiência não poderia estar sendo melhor. Pude conhecer excelentes profissionais e fazer muitas amizades.

—————– fim do rascunho 1 ——————-

Nos dias 23 e 24 de outubro tive a oportunidade de ministrar um minicurso e uma palestra dentro da trilha COLAPHP do Latinoware.

Ambos tratavam do CakePHP, no caso do minicurso fizemos uma introdução no framework, falando um pouco de seu funcionamento, suas convenções e criamos rapidamente uma aplicação simples utilizando o terminal com o Bake.

O slides utilizado no minicurso foi este:

No caso da palestra, falei novamente sobre a integração de aplicações escritas em CakePHP e Flex, dando uma revisada na apresentação. Ela ficou assim:

Aproveito o espaço (e a disponibilidade de tempo) para agradecer todos que participaram do evento como um todo, seja na organização, apoio ou assistindo, perguntando, corrigindo e ajudando a gente durante as apresentações. Obrigado a todos.

—————- fim do rascunho 2 ——————-

O texto do rascunho 1 foi escrito em 23/10/2009, o do rascunho 2 logo após o evento, hoje é 16/01/2010 e o textos ainda estevam como rascunho para ser publicado no blog. Pois é, esse final de ano foi realmente muito corrido, mas valeu a pena.

Agora é hora de se organizar para poder ter um 2010 ainda mais proveitoso (de começo ele já está sendo muito melhor).

Até breve.