CakePHP – dúvidas comuns #1

Como já comentei algumas vezes, estou desenvolvendo com um framework MVC em PHP chamado CakePHP. Ele foi construído com intuíto de provar o potencial do PHP (na época em comparação ao Ruby e o Ruby on Rails). Se precisar de mais informações sobre o framework sugiro leitura do seu Cookbook e de outros blogs a respeito.

Desde que descobri o CakePHP faço parte do grupo CakePHP Tuga e ocasionalmente no canal de IRC do grupo #cakephp-pt na rede Freenode.org, e já tive a oportunidade de aprender e ajudar diversas vezes.

Vamos as dúvidas:

  1. Como salvar dados de um formulário que envolva um relacionamenteo de “muitos para muitos”/many-to- many ou ainda de HasAndBelongToMany (HABTM) ?

Nesta dúvida temos que ter em mente que o CakePHP faz todas as ligações entre nossos modelos desde que sigamos suas convenções, caso façamos isso, não haverá dificuldades.
Mas quais são essas convenções? Veja você mesmo.

Um detalhe que não podemos esquecer é que por padrão o CakePHP está preparado para tratar suas convenções em inglês, então, se não quisermos ter de modificar as configurações padrões, temos de desenvolver em inglês. Ok?

Seguindo todas as conveções o que fica faltando? É preciso saber como um relacionamento HABTM se manifesta em um formulário, ou seja, como ele é apresentado. No CookBook temos um texto sobre o caso. Resumindo, o que temos de ter é:

  • Um formulário com o nome de um dos modelos envolvidos no relacionamento. Por exemplo, em um blog temos um modelo Post e outro Tags, os dois estão ligados por um HABTM, então no formulário para inserir um Post, o nome de formulário seria Post.
  • Um ou mais campos identificados com o outro modelo parte do relacionamento e sua chave. No nosso exemplo seriam um ou mais campos com o nome ‘Tag.Tag’.

No item anterior que surge a principal dúvida: como definir o nome do meu campo? que tipo de campo usar?

Primeiro definimos o tipo de campo a se utilizar: normalmente utilizamos um Select box para multiplas seleções OU um conjunto de Checkbox. Qualquer que seja a escolha o restante é bem simples:

/*
$tag é o retorno de um find('list') com os campos id e name selecionados
$tags = array( array('id' => 1, 'name' => 'tag 1'), array('id' => 2, 'name' => 'tag 2') );
 
o índice 'multiple' só deve ser utilizado quando quiser um conjunto de checkbox
*/
echo $form->input('Tag.Tag', array(
	'type' => 'select',
	'multiple' => 'checkbox',
	'options' => $tags,
	'labels' => 'Selecione as tags'
	));

Com isso seu formulário já retornará o que é esperado pelo CakePHP e tudo que será necessário para salvar os dados do relacionamento é utilizar o método ‘saveAll’ ao invés de ‘save’.

Ainda esta semana comentarei das dúvidas sobre validação.

Google Analytics e Adobe – facilitando a sua vida

Há um tempo atrás, postei uma forma de se monitorar páginas em Flash ou Ajax com o Google Analytics. Até aquele momento está era a única maneira “oficial” de se fazer isso e recomendada pelo Google.

Agora foi liberado pelo Google juntamente com a Adobe uma classe escrita em AS3 que facilita a coleta e monitoramento de informações através do Analytics.

Segundo o Google, esta classe contem todas as funcionalidades da versão Javascript e é totalmente compátivel com a última versão do ga.js (arquivo que deve ser incluído nas páginas que utilizam o Analytics).

Os arquivos disponibilizados já estão compilados, porém o projeto é opensource (licensiado pela Apache 2.0 license) e quem estiver interessado pode baixar o fonte para ver a implementação (por curiosidade, necessidade ou para ajudar).

Usar Google Analytics para páginas em Flash ou Ajax? É mole…

Não sei se é de conhecimentos de todo, pelo menos para mim não era.

Para quem não sabe, Google Analytics é um serviço do Google que permite coleta e acompanhamento de diversas informações de uma página na internet, como número de visitas, origem das visitas, tempo de permanência na página, palavras chaves usadas para chegar até sua página e várias outras. Ou seja, indispensável para quem desenvolve para web (indispensável o tipo de ferramenta, existem alternativas, como o Yahoo! Web Analytics).

Para os que conhecem: uma coisa que sempre me “frustou” foi ter meus trabalhos em Flash (Ajax entra no mesmo ramo, apesar de não ter nada publicado ainda) não terem a mesma facilidade para coleta e acompanhamento de informações. O máximo que conseguia era saber de onde o individuo havia chegado, quanto tempo permaneceu no site e as palavras chaves mais comuns. Mas apesar do Google indexar o conteúdo dos arquivos em Flash, eu não podia, por exemplo, saber quais partes do site/apresentação recebia mais visita.

Agora meus problemas acabaram(-se): A resposta para o problema é 42.

Bom, na verdade a solução deveria ser óbvia para quem conhece a API ou o sistema de coleta de informações do Google, mas ainda não havia reparado no óbvio: é só fazer uma chamada a função _trackPageview();
Essa função é incluída em nossas páginas no meio do código que o Google nos passa na hora que criamos a conta no Analytics.

O interessante é que essa função aceita um parâmetro, e é esse o ponto da solução, é só dizer que “seção” do site a pessoa vai estar entrando ao clicar em um link que ela será computada pelo Analytics.

Seguindo o exemplo fornecido pelo PRÓPRIO:

seuBotao.addEventListener( MouseEvent.CLICK, this.clicked );
function clicked(MouseEvent e):Void
{
    getURL("javascript:pageTracker._trackPageview('/contato')");
}

Com este código, quando alguém clicar no botão “seuBotao”, será invocado a função clicked e nela será chamada a função javascript do Analytics, dizendo que a pessoa está acessando a pasta ‘contato’. Notem que a pasta ‘contato’ não precisa existir, pode ser um arquivo ou o que você achar melhor. Depois é só entrar no painel do Analytics e conferir as novas informações.

Supimpa, não?

Jogar Quake direto no Browser?

Parece um absurdo, mas não é.

A Fundação Mozilla está desenvolvendo uma Máquina Virtual que implementa o ECMAScript(linguagem que deu origem ao ActionScript do Flash, similar ao JavaScript) versão 4, e graças a idéia de um de seus desenvolvedores, será possível rodar aplicativos escritos no Muito Bom e também muito velho C. Sim, aquela linguagem que é preferida por pessoas como Linus Torvalds e Paulo Adonis.

Além do C, já é possível rodar aplicações Python com esta máquina virtual, e no futuro será possível utilizar várias outras linguagens.

Para provar o feito, a equipe do Tamarin rodou Quake e Zelda ( rodando em um emulador de Nintendo escrito em C ). Tudo funcionou, som e imagem, mas claro, a perfomance não é a mesma. Segundo o desenvolvedor, é aceitável.

Esta pode ser mais uma arma da Mozilla e uma carta na manga da Adobe para enfrentar a Microsoft e seu Silverlight+Visual Studio( que já permite a utilização de linguagen .NET ). Se isso vai gerar bons frutos, só na prática saberemos.

A grande notícia relacionada ao projeto, é que além de tornar possível rodar estas linguagens, o Tamarin poderá substituir o flashplayer nos navegadores, sendo uma alternativa Open Source ( e integrada ao navegador ).

Fontes: INFO Online, The Web at Toolness[en], Tamarin Project[en].

Liberando tudo… (nem tudo)

Como prometido, pretendo falar a qualquer momento sobre programação em ActionScript 3, esta linguagem que é vinculada ao Flash, Flex e agora ao Air, todos da Adobe.

Antes de começar, irei disponibilizar um sistema que iniciei e não terminei, feito puramente em AS3.0. O projeto consistia em um sistema para auxiliar no cadastramento e recadastramento dos armários administrados pelo Centro Acadêmico de Ciência da Computação da UFMS. Ele começou como exercício de estudo meu e de alguns amigos, usando ActionScript 2, mas logo no início todos desanimaram, onde eu fui a única excessão. Como já trabalhava com AS2 e tinha curiosidade de mexer com AS3 resolvi reescrever tudo o que havíamos feito usando AS3 e implementar o que faltava. Até que cheguei no ponto onde necessitava de uma linguagem externa para manipular um arquivo XML.

Por questões de infra-estrutura( local onde o sistema rodaria ), optei por usar o Java, e pedi a um amigo que fizesse a implementação. Ele o fez, mas eu acabei não integrando ao sistema pois já havíamos feito todo o trabalho daquele ano manualmente.

Agora estou liberando todas as classes que utilizei para que quem quiser ajudar, ou estudar possa fazer.

Bom proveito.

ps.: Estarei explicando mais pra frente o que cada classe faz.
ps2.: A versão do SuSE que utilizei no primeiro contato com um GNU/Linux foi 8.2

sistema-armarios

Falta de tempo…

Pois é…

Estou trabalhando, estudando e colaborando . Não estou conseguindo dedicar o tempo que gostaria a escrita neste blog. Mas não vou abortá-lo, pretendo apenas aumentar o já grande intervalo entre posts.

Meu próximo post na área de programação deverá ser sobre ActionScript. Pretendo mostrar a facilidade de se criar interfaces elaboradas com a linguagem.

Antes de encerrar, gostaria de avisar aos que já utilizam ou pretendem utilizar o Joomla! que a extensão que ajudei a traduzir para o nosso português está com uma nova versão: Attachments 1.2.2 ( Anexos 1.2.2 ).

Outra coisa, para os que se interessaram pela validação de dados em PHP5, vale a pena dar uma olhada nesta outra alternativa: http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=7838. Onde é abordado o uso de filtros da própria linguagem para validar ( confesso que nunca utilizei, mas me pareceu algo extremamente funcional, e com ótimo potencial ). Fica então as dicas.

Até breve.

Novidades…

Tirei um tempinho para falar de uma coisa que acabei de ver. Como alguns já sabem, sou fã do ActionScript, ou seja, do Adobe Flash ( antes Macromedia Flash ), acho esta linguagem de programação extremamente ágil e simpática. Foi uma das primeiras linguagens de programação na qual tive contato ( na verdade, quando à conheci, ainda não era considerada uma linhagem de programação, mais ou menos na época do Flash 4 ).

No começo de meus estudos, utilizada duas fontes de conhecimento: Ponto Flash e FlashMasters . Utilizava muito o primeiro, mas devido a falta de manutenção, acabei deixando de acessar. O segundo utilizo até hoje. Mas utilizo a seção que acho a mais importante deste portal, o Fórum.

O Fórum do FlashMasters é considerado o maior fórum do assunto em lingua portuguesa, e possui muita gente de fora do país. Eu mesmo já ajudei e fui ajudado por pessoas na França e em Portugal.

Acontece que o pessoal responsável pelo portal fez uma grande mudança na estrutura dele, na verdade, mudaram tudo. Adivinhem qual o sistema que agora gerencia o conteúdo do FlashMasters? Sim, acertou quem falou Joomla! ( devo estar obcecado por este CMS, hehehe ). Parabéns a todos que fizeram as alterações, ficou excelente, tanto visualmente como em funcionalidades ( segundo o William – diretor e criador do portal -, eles tiveram ajuda da comunidade Joomla Clube ).

Este novo portal até me deu vontade de voltar a participar do Fórum, e agora também, do portal ( é possível inserir conteúdo diretamente no portal, ótima idéia ). Dentre em breve estarei colocando lá umas classes que fiz em AS3 ( ActionScript 3 ).

Caso queiram me encontrar por lá, meu usuário é “Dotti”.

—- Atualizado —-

Ingratidão, escrevi na pressa e acabei esquecendo de falar do local onde mais aprendi: IRC . Sim, o bom e velho IRC ( que alguns chamam de mIRC ). Eu utilizava a rede Brasnet. Entrava nos canais #Flash , #PHP e alguns outros menos nerds ( #Porkaria, #Bingola, #Meleca e #Oakley ). Bons tempos.

No IRC conheci alguns dos usuários e agora administradores do FlashMasters. Gente que me ajudou muito e que devo certa gratidão. Daria até para citar alguns, mas acho que não seria justo com outros que também me ajudaram muito. De qualquer forma, obrigado a todos os velhos amigos do #Flash e agora do FlashMasters.

— Atualizado Novamente —

Links corrigidos, obrigado Gelinho.