KISS - Keep it simple, stupid!

Migrando para o CakePHP 1.3

postado por Fabrício Ferracioli em 22/02/2010 13:39:06
Tags:

A maioria já deve saber que o CakePHP está com a versão 1.3 do framework em estado beta. Me recordo que a versão 1.2 do framework já era bem agradável quando estava em fase beta, e portanto decidi testar o que o CakePHP 1.3 tinha de novo. Fiz o download e fui direto para a página que contém a descrição das principais mudanças da versão 1.2 para a 1.3. Quando vi que ela tinha um tamanho um pouco grande decidi testar logo alguma aplicação que eu tinha funcionando na versão 1.2.

Para minha surpresa ela não exibiu nem a página inicial, e ao invés disso várias mensagens de erro foram mostradas. Então vi que era realmente necessário ler a extensa página. Durante a leitura percebi que diversas mudanças importantes ocorreram, e logo vi o porque da minha aplicação sequer funcionar. Como a leitura é um pouco extensa, decidi resumir as principais mudanças aqui. As novidades vão ficar para depois, porque também são várias.

Principais mudanças do CakePHP 1.3

  • Adicionadas configurações específicas do config/core.php para quem utiliza o PHP 5.3
  • O arquivo webroot/index.php foi alterado, e deve ser substituído em sua aplicação
  • Recomenda-se que todos os métodos e classes deprecados não sejam mais utilizados
  • Admin routes foram removidas por uma configuração mais geral, chamada routes prefix. O route prefix admin pode ser definido com a linha
    Configure::write('Routing.prefixes', array('admin'));
  • O método de remoção no modelo agora é único,
    Model::delete()
  • O Model teve os métodos métodos findAll(), findCount() e findNeighbours() removidos
  • Os diretórios css, js e img foram removidos dos diretórios app/vendors e plugin/vendors e substituídos com os diretórios plugin e theme no webroot
  • Somente a variável
    $title_for_layout

    poderá ser definida para o título da página, tanto no Controller quanto na View

  • Deve-se selecionar o ponto da aplicação desejado para dump de sql quando o debug está definido para 2, utilizando a linha de código
    echo $this->element('sql_dump');

    em qualquer ponto da aplicação

  • SessionHelper e SessionComponent não são mais carregados por padrão. Agora devem ser declarados como qualquer outro helper ou component. Para manter o comportamento antigo, adicione a declaração de helpers e components em seu AppController
  • A função
    SessionComponent::setFlash()

    teve seu segundo parâmetro alterado para usar um element e não um layout. Para alterar sua aplicação primeiro mova seus layouts para a pasta de elements e renomeie a variável

    $content_for_layout

    para

    $message
  • Não existe mais o nível 3 de debug
  • PaginatorHelper agora produz a saída dos métodos
    prev(); next(); first(); last();

    englobada por

    <span>

    e não

    <div>

    para tornar a estilização mais fácil

  • Os métodos
    dateTime(); year(); month(); day(); minute(); meridian(); select();

    do FormHelper não possuem mais o parâmetro

    $showEmpty

    , e agora utilizam

    $attributes['empty']
  • FormHelper::submit()

    agora pode criar outros inputs além de type=submit. Para isso utilize a option type

  • FormHelper::button()

    agora cria elementos button ao invés de inputs reset. Para criar inputs de reset, utilize

    FormHelper::submit()

    com o parâmetro option definindo ‘type’ => ‘reset’

  • O método
    FormHelper::create()

    não cria mais elementos fieldset escondidos, agora substituídos por divs escondidas, o que ajuda na validação de HTML 4

  • No HtmlHelper os métodos
    link(); para(); div(); tag()

    não pussuem mais o parâmetro

    $escape

    , que foi substituído por

    $options['escape']

    . Similarmente os métodos

    meta(); css()

    tiveram o parâmetro

    $inline

    substituído por

    $options['inline']
  • Agora as chamadas a
    $session->flash()

    não são mais auto-exibidas, sendo necessário adicionar

    echo

    antes da chamada a função, como em qualquer método de helper

  • JavascriptHelper e AjaxHelper estão deprecados, e agora deve-se utilizar o JsHelper em conjunto com o HtmlHelper.
    $javascript->link()

    agora é

    $javascript->codeBlock()

    é

    $html->scriptBlock()

Já deu para perceber que vai dar trabalho mudar algumas coisas. E essas são apenas as alterações que considerei mais importantes, na página de migração do 1.2 para o 1.3 está a lista completa. Verifique nessa se alguma mudança afeta as suas aplicações.

Pelas alterações deu para perceber que o framework está mais preocupado com a padronização do seu comportamento, de código, utilização de Web Standards e desempenho, questões que são sempre importantes.
Bom, é isso, espero ter ajudado. Na próxima vamos dar uma olhada nas novidades do Cake 1.3.

Tags:
Topo

3 Comentários

JavaScript: buscar a posição de um elemento em uma matriz

postado por Gabriel Gilini em 30/12/2009 16:00:03
Não há tags para este post

Recebi uma pergunta curiosa no Aardvark há pouco, perguntando se eu não conhecia algum código JavaScript que buscasse a posição exata de um elemento dentro de um array multidimensional — matriz — qualquer.

Não é novidade pra ninguém que eu me divirto escrevendo código nessa linguagem, então resolvi bolar alguma coisa pra resolver o problema do rapaz em necessidade. Aí vai o código (gist):

Exemplo de uso:

No tags for this post.
Topo

Sem comentários

Gerando HTML 4.01 com o HTML Helper do CakePHP

postado por Fabrício Ferracioli em 15/12/2009 14:21:18

Apesar das melhorias introduzidas no HTMLHelper do CakePHP 1.2, sempre achei ridículo ele gerar marcação apenas em XHTML. Sempre preferi HTML, e me via engessado pelo CakePHP nesse aspecto.

Acredito que muitos passam por essa dificuldade quando estão trabalhando com o HTMLHelper e FormHelper do CakePHP. Uma das principais consequências disso, é que o código gerado na maioria das vezes não é válido, pois mistura tags HTML e XHTML.

Mas sempre imaginei que deveria haver um meio de contornar isso. Certa vez verifiquei que existia um método chamado docType no HTMLHelper, e que era possível definir HTML 4.01 com ele. Mas minha alegria logo acabou quando percebi que ele não alterava o comportamento do Helper para gerar tags HTML.

Finalmente, hoje acabei me deparando com uma alternativa. Cansado de mensagens de código inválido fiz uma leitura mais cuidadosa do manual do CakePHP e encontrei a página que diz como gerar tags HTML 4.01. A solução não é muito elegante, mas é uma alternativa presente no próprio framework.
Espero que a solução sirva para vocês também!

Update 1:Para quem estiver com preguiça de fazer o arquivo do zero, fiz um repositório no Github com o arquivo e algumas tags. Conforme for sentindo necessidade vou aumentar o conteúdo dele. Quem quiser colaborar, está convidado!

Update 2: Apliquei as sugestões do Juan Basso, agora um Helper está disponível para manter as tags HTML 4.01. Vejam a discussão abaixo. O link do Github contínua o mesmo. Mantive o arquivo anterior para quem preferir o método da documentação do Cake.

Tags: , , , , ,
Topo

3 Comentários

Criando thumbnails no shell do Linux de maneira simples

postado por Gabriel Gilini em 25/11/2009 19:59:08
Não há tags para este post

Hello, peeps.

Hoje precisei converter um bocado de imagens para um tamanho reduzido, e como um bom linuxer, fui procurar como fazer isso no shell.

Uma pesquisadinha rápida no Google, e trombei com esse “how to”. Simples e direto, resolveu minha dúvida. Chequei se o ImageMagick já estava instalado, e estava. Mas esse script que o cara colocou no tutorial tá meio pobre, não dá pra passar nada por parâmetro. Cada vez que eu precisar disso vou ter que abrir o script e modificar? Ah, não.

Dez minutinhos de vim aberto depois, surge o thumbalizr:

exemplo de uso do thumbalizr

Você tem que passar width OU height (eu sei, tá errada a marcação dos parâmetros no exemplo de uso, se alguém souber o certo me fala), e pode passar uma string pra ser inserida antes do nome original da imagem. Caso contrário, as imagens serão substituídas.

UPDATE:
Agora o script aceita a flag “-a string_pra_concatenar” que concatena uma string no final do nome do thumbnail. E também fiz algumas mudanças pra compatibilidade.

Para “thumbalizar” imagens em vários diretórios, faça algo como:

Aí vai o código do script:

Ou você pode baixar o script aqui.

No tags for this post.
Topo

Sem comentários

Programador, nem sempre é você que está errado!

postado por Fabrício Ferracioli em 19/11/2009 14:51:11

Pois é amigos, quando estamos falando de programação nem sempre você é o cara errado da história.

Digo isso pois acabo de passar por uma situação em que estava certo, mas por não acreditar muito nisso acabei perdendo algum tempo procurando erros inexistentes.

Estava testando uma aplicação e apenas um caso de teste falhava.
Ao verificar o código aparentemente não havia nada errado, e poucos dias atrás o mesmo trecho não apresentava problemas. O que estaria acontecendo?

Teste com 1 falha

Fiquei um bom tempo tentando encontrar algum erro bobo de lógica em um código que eu havia acabado de inserir, mas não encontrava nada. Além disso, o trecho de código que falhava nos testes não tinha relação nenhuma com as alterações que havia feito.

Então pensei que poderia ser uma alteração do CakePHP 1.2.5 que não havia passado para o meu código. Também procurei por isso em vão. Então percebi que o problema estava com uma função que utiliza transações, o que já foi uma fonte de problemas nesse projeto, ou seja, um problema recorrente.

    if($init_transaction){
        $db =& ConnectionManager::getDataSource($this->useDbConfig);
        $db->begin($this);
    }
    foreach( $balloonContents['BalloonContent'] as $index => $content ) {
        $content['balloon_id'] = $balloon_id;
        $this->create($content);
        $save = $this->save();
        $status = $status && $save;
    }
 
    if(!$init_transaction){
        return $status;
    }
    elseif ($status && $db->commit($this)) {
        return true;
    }
    else {
        $db->rollback($this);
        return false;
    }

É um código simples, e não existe nenhum problema com ele. Como eu acabei de instalar o openSuse 11.2, que agora está com o MySQL 5.1 nativo, me lembrei que ele poderia não estar configurado corretamente para usar a storage engine InnoDB. E era exatamente isso! Como o MyISAM fica habilitado por padrão, e essa storage engine não tem suporte total a transações, se você deseja utilizar esse recurso deve dizer ao banco de dados.
Ou seja, meu ambiente estava configurado de modo inconsistente com as necessidades da aplicação. Alterei o arquivo de configuração do MySQL, o my.cnf, adicionando a seguinte opção:

default-storage-engine=InnoDB

Depois disso o teste passou e tudo voltou ao normal.

Testes passando após trocar a storage engine

Portanto rapaziada, em alguns casos não adianta procurar pelos seus erros. Procure se lembrar que qualquer tarefa necessita de subsídios, e no caso de nós programadores, um ambiente bem configurado faz toda diferença.

Alguém já passou por situação semelhante?

Tags: , , , ,
Topo

Sem comentários

Lo dia mas importante del ano!

postado por Fabrício Ferracioli em 30/10/2009 08:18:49

Hola pueblo! Ustedes estan bien?
Hoje es un dia muy gratificante para mi persona e mi pueblo, lo dia internacional de hablarse portuñol! Es una data muy querida, muchas fiestas en diversas naciones ocorren neste gracioso dia.

Para los mas desavisados, portuñol es un idioma famoso, tiene artigo en Wikipedia! E non és solamiente esto, és un idioma estudiado por una grande universidad.

És una pena que en Brasil las comeraciones se limitem a lo mundo virtual. En grande part de los países latino americanos las comeraciones son regadas a mucha fiesta. Mariachis, tequila, castanholas e tudo mas que relembra nuestra richa cultura! Las muheres e chicas enton, ficam muy belas.

Estoy mui empolgado e esqueci-me que este blog es sobre progamacion. Nuestra cultura tiene grandes programadueres, grandes tecnicas de la programacion. Uno grande exiemplo desto és lo comando goto, recientemente adicionado en la linguagen PHP.
Solamente una cosa me deja triste en PHP, el Paamayim Nekudotayim. No seria bein mehor lamado de dos puentos? Mas jo acredito que esta discussion lo ira lebar a nada!

Enton, dejo una contribuicion de uno grand programador que habla nuestra lingua! Es un programa que convierte lo idioma del Brasil para las bielas palabras de lo idioma Portuñol! E non dejem de acessar las paginas oficialies de las comemoraciones!
13 de lo otubro, lo dia Internacional de Hablarse Portunhol

Tags: ,
Topo

Sem comentários

Aumentando a semântica com RDFa

postado por Fabrício Ferracioli em 04/09/2009 15:18:54

Acredito que Web vem tomando um caminho interessante com decisões tomadas nos últimos meses, como a adoção do HTML 5 e o engavetamento do XHTML 2. Isso com apenas um padrão, a confusão será bem menor e a adoção poderá ser realizada de modo mais harmonioso. Mas, como a maioria das pessoas que trabalham com Web sabem, não basta que o padrão exista, ele deve ser suportado pelo mercado, senão acaba ficando somente “no papel”.
Até algum tempo atrás, acreditava que isso aconteceria com o RDFa, uma recomendação do W3C que é conjunto de extensões do (X)HTML que permite aumentar a semântica de documentos (X)HTML. Atualmente, o padrão é suportado pelo Yahoo!, o pioneiro, e pelo Google.

E agora você me pergunta:

Em que isso vai me ajudar?

O RDFa basicamente adiciona semântica a seus documentos, fazendo com que eles sejam compreendidos mais facilmente por dispositivos, o que aumenta a capacidade de busca.
Agora é só pensar um pouco, se o Yahoo e Google puderem compreender melhor seus documentos, eles serão mais facilmente encontrados e você ganha uma vantagem sobre quem não dá a mínima para semântica.
Pra você que ainda não ficou convencido, aqui vou usar dois exemplos, que talvez você já tenha visto, mas não sabia o porque das informações adicionais. Primeiro a do Yahoo.
Resultado de busca do Yahoo com RDFa
Agora a do Google.
Resultado de busca do Google com RDFa

Em ambos os casos, as informações adicionais que estão associadas aos resultados fazem grande diferença nos resultados, pois adicionam muito mais ao que o usuário deseja saber, do que simplesmete o resultado da busca tradicional. Essa pequena diferença já é suficiente para deixar seu resultado a frente dos demais e possivelmente preferido pelo usuário.

Gostou, não é?
E agora você me pergunta:

Mas como eu faço isso?!

Não faltam recursos na Web sobre RDFa, e como o objetivo desse post é alertar sobre as possibilidades dele, deixo alguns links para vocês aprenderem um pouco.

  1. Ótimo para quem não sabe nada, leitura obrigatória.
  2. Também é ótimo para quem está começando, dividido em duas partes.
  3. Continuação do artigo anterior.
  4. Esse é um pouco mais avançado, leia depois de ler os anteriores

Lembrando que o W3C Semantic Web Activity possui vários recursos para quem quer aprender, além de alguns casos de uso.
E não tem desculpa para não utilizar, ele é compatível tanto com HTML quanto XHTML.

Tags: , , ,
Topo

4 Comentários

Creative Commons License
Sou Ágil: KISS em http://kiss.souagil.com.br está licenciado sobre
Creative Commons Attribution-Share Alike 2.5 Brazil License.

souÁgil