Classe para fazer Contagem de Linhas e Bônus
Classe para contar número de linhas "codadas" de uma aplicação. Foi escrita em PHP, pensando em extensões comuns nesse tipo de sistema, mas pode facilmente ser adaptado para contar linhas de sistemas em Java, C/C++ dentre outras.
A idéia por trás da classe foi matar a curiosidade geek de ver o tamanho de uma "criança" que ajudei a criar, além disso quero estudar uma forma de fazer melhores estimativas para custo e prazo para desenvolvimento de software.
A classe está disponível livremente, sob a licença MIT. Faça o download dela metrics.class.php. Qualquer dúvida sobre sua utilização, deixe nos comentários ou entre em contato comigo.
Vou aproveitar e disponibilizar a atualização da classe para validação de dados e outras "firulas" mais que já disponibilizei anteriormente, porém agora com pequenas adições. Visualize ela validation.class.php.
Qualquer sugestão sobre ambas as classes pode ser feita nos comentários. Espero que seja útil para alguém.
Até a próxima.
-----------
Atualizado: troquei os arquivos por equivalentes compactados em arquivo .zip . Valeu Gelinho e Felipe ;]
-----------
Atualizado novamente: à um bom tempo meu amigo Raphox indicou na lista do PHPMS uma classe criada pelo grande Sebastian Bergmann para mensurar softwares em PHP, o nome da classe é PHPLOC e ela está disponível neste endereço: http://github.com/sebastianbergmann/phploc . Vale a pena conferir
CakePHP – Dúvidas Comuns #2
Dúvida: Como usar habilitar a internacionalização - o famoso I18N - nos erros de validação de seu modelo? Fácil? Como fazer então no próprio modelo para não repetir frases em várias Views?
Habilitar a internacionalização e ter a localização em uma aplicação com CakePHP desde a versão 1.2 é relativamente simples: basta uma lida no nosso Cookbook e pronto.
Outra coisa que é relativamente simples de se fazer é validar os dados, basta termos um atributo em nosso modelo chamado "validate" e seguir as dicas do livro de receitas.
Mas pelo Cookbook somos induzidos a fornecer a mensagem de erro na hora de criar a View, algo que eu particularmente não gosto. É até comum termos um modelo que é usado por Controllers diferentes e consequêntemente por Views diferentes.
Uma maneira de evitar isso, é definir as mensagens de erro já na definição das regras de validação, dentro do atributo "validate" do seu modelo. O grande problema é que para traduzir uma determinada expressão utilizamos um método, e a chamada de método na definição estática de um atributo não é permitida no PHP (dúvida? tente fazer o código abaixo)
class Modelo extends AppModel { var $validate = _('ola mundo'); } //esse código não devera ser executado
A solução para isso é a atribuição das regras de validação no momento da instanciação da classe, ou seja, no seu método construtor, da seguinte maneira
class Modelo extends AppModel { var $validate; function __construct(){ parent::__construct(); $this->validate = array( /* aqui você pode definir as regras e mensagens,mesmo chamando um método */ ); } }
Qualquer dúvida não deixem de utilizar os comentários ;]
--------
Atualizado: havia esquecido da chamada ao construtor da superclasse AppModels ( através do parent::__construct() ) no último código mostrado.
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:
- 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.
AJAX com Prototype
Prototype é uma biblioteca javascript bastante utilizada, mas que pra mim nunca chamou atenção (ao contrário do JQuery), mas como tenho utilizado o CakePHP e em sua estrutura de Helpers ele usa esta biblioteca, tive de "perder" um tempinho estudando-a.
Para isso, fiz como meu amigo PorKaria e montei um sisteminha simples de comentários (na verdade o dele era o guestbook, mas no fim fazem a mesmo coisa, hehehe).
Descrição do sistema:
Sistema usando AJAX (na verdade o X aqui é de XHTML, porque não utilizo XML) Permite a inserção de comentários, salvando-os em um banco de dados (MySQL), tudo de forma assíncrona. A bibliote utilizada para implementação da parte em javascript é a Prototype, a formatação (CSS) foi retirada de um tutorial do Tableless sobre formatação de formulários e o PHP foi escrito por mim. Além do cadastro, fiz o que pode se chamar início de um sistema de busca com sugestão (famoso autocomplete). Digo o início porque ele não avalia bem o momento de se fazer a busca e não é possível clicar nos resultados, apenas vê-los.
25 erros de programação mais graves
Foi divulgado pelo SANS Institute[en] uma lista com os 25 erros de programação que mais causam prejuízos no mundo. Esta lista foi elaborada por especialistas de mais de 30 instituições dos EUA e organizações internacionais de segurança digital.

um erro tradicional
A lista foi subdivida em três categorias: "Interação Insegura entre Componentes", "Risco no Gerenciamento de Recursos" e "Defesa Porosa" - no original: Insecure Interaction Between Components, Risky Resource Management e Porous Defenses.
Há na lista falhas como possibilidade de injeção de códigos, utilização de algorítmos de criptografia defasado e transferência de dados sensíveis sem criptografia.
No artigo original[en] há várias informações sobre os erros e comentários de renomadas empresas de segurança sobre a importância da lista.
Sem dúvida um texto que vale a pena para todo desenvolvedor.
via: IDG NOW!
Desenvolvimento rápido
Últimamente está na moda a palavra "ágil".
Você têm de projetar rápido, desenvolver rápido, implementar rápido para ser considerado ágil.
E apesar do PHP fornecer centenas de funções prontas para diversas tarefas rotineiras, ele perde feio comparado a outras linguagens mais novas como Ruby ou Python, principalmente quando juntamos a estas seus grandes frameworks - Rails no caso do Ruby e Django no caso do Python.
Mas a comunidade PHP tem suas cartas na manga, vários frameworks agilizam o desenvolvimento tanto em aplicações simples como em aplicações sofisticadas.
E são várias as opções. Tem para todos os gostos, nos próximo posts vou falar um pouco deles.
Hoje começo com o CakePHP:
Descrição:
Compete de frente com o Rails. Possui uma base bem estruturada, código bem organizado, comunidade participativa e uma licensa flexivel. Seu grande destaque está no baker, que gera ações básicas (criar,ler,atualizar e apagar entradas) para uma tabela do banco de dados.
Como usa-lo?
É muito fácil, basta ir a página dele e fazer o download do último lançamento. Recomendo a versão 1.2.xx , apesar de ser RC2 (candidata a estável) ela já está bem estável e possui vários melhoramentos em relação a versão 1.1.xx.
Em seguida descompacte o arquivo onde achar melhor (dentro de seu servidor web) e pronto. Agora só falta você configurar o arquivo "/app/config/database.php". Nele você encontra instruções de como inserir as informações para acessar o seu banco de dados, há até um exemplo de como fazer.
Agora é só acessar, através do navegador, a pasta que você descompactou o CakePHP.
Onde encontrar material para estudo?
Como comentei antes, o CakePHP possui uma comunidade bem participativa, mas a maioria não fala português, então você encontrará bastante informação em inglês, aqui listo alguns sites e blogs com informações sobre o tema, bons estudos:
- CakePHP - A página oficial, sempre com novidades (inglês)
- The Cookbook - O manual oficial do cake. Possui conteúdo para versão 1.1 e 1.2, sendo que a segunda esta sendo finalizada. Obrigatório. (em inglês com parte do conteúdo em português, só alterar no rodapé da página).
- API for CakePHP - A documentação das classes, métodos e funcionalidades do CakePHP. Não é muito rica em detalhes, mas está melhorando. Obrigatório. (inglês)
- lemoncake - Um blog com várias discussões sobre CakePHP e dicas/tutoriais de como usar recursos do Cake. Muito recomendado. (inglês).
- aranworld - Um blog que tem posts esporádicos a respeito do CakePHP, mas no link que vinculei, há uma série de posts sobre o sistema de controle de acesso do CakePHP, uma ferramente extremamente poderosa mas que pode parecer complicada de utilizar no inicio. Muito recomendado. (inglês)
- CakePHP - Brasil - Portal brasileiro sobre CakePHP, ótimo para quem não arrisca muito o inglês, possui dicas e até uma versão traduzida do manual. Muito recomendado. (português)
E podem esperar que em breve haverá vários posts a respeito. Estou utilizando bastante o CakePHP e tenho gostado muito. Colocarei algumas dicas aqui logo logo.
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
Diário de bordo
Tentando manter este espaço ativo, irei relatar minhas últimas atividades, e talvez as futuras.
Como comentei no post anterior, terminei a pouco o novo site para a Empresa de Análise Ambiental - Anambi, e como fiz a página utilizando o Adobe Flash e ActionScript2 ( não utilizei o ActionScript3 por conta do flashplayer ter de ser mais novo e reduzir o número de possíveis clientes ), os problemas que encontrei e como contornei. Acredito que será uma boa troca de experiência ( tem até uma parte de SEO, gostaria de saber se o que fiz é o melhor ou não ).
O PHPMS organizou o TestFest que havia comentado, e estive lá com a rapaziada. Foi divertido, apesar de não termos conseguido fazer muitos testes ( o sistema de testes é impressionante ), conseguimos discutir bastante sobre as funcionalidades do PHP 5.3. Tiramos algumas fotos e fiz um pequeno video, que estou upando para o YouTube neste exato momento. Se estiver interessado em ver, o enderço para as fotos é: http://www.flickr.com/photos/26464783@N02/ e para os videos veja em: http://br.youtube.com/phpms.
Por falar em video, trabalhar com video foi extremamente complicado pra mim. Como não tenho intenção nenhuma de mexer com esta área, não quero comprar nem aprender a usar programas complexos para edição de videos, e achar uma programa simples para isso é uma tarefa quase impossível, tanto no Windows quanto no Linux. Estou usando o openSUSE e o Windows Vista Business, e em ambos os sistemas tive muita dificuldade para conseguir fazer uma edição dos videos. Na verdade, no openSUSE eu nem consegui faze-lo. O programa simplesmente parava de responder toda vez que tentava adicionar um arquivo. Já no Windows eu tive de baixar o Nero e utilizar o Vision, já que o Movie Maker insistia em travar toda vez que tentava "compilar" o projeto.
Alguém aí já trabalhou com videos no Linux? Estou tentando abandonar o Windows de vez e uma das coisas que ainda me prende nele é descarregar minha filmadora ( uma Sony DCR-DVD, sem porta FireWare, que por acaso só tem driver para Windows ) e um programa para trabalhar com os videos descarregados. Alguem saberia um programa para fazer isso?
Voltando a ativa ( no bom sentido )
Faz muito tempo desde a última vez.
Estou fazendo este post para avisar 3 coisas:
- Estou vivo, sim, estou. E voltarei a fazer posts, com relativa frequência. Acabei com alguns serviços e agora estou tendo tempo para respirar, e até escrever;
- Sábado agora o PHP-MS estará organizando seu primeiro TestFest, trazendo o evento que é mundial para este fim de mundo. Para maiores informações, visitem o endereço do grupo: www.PHPMS.org, o evento será realizado na PetCursos de Campo Grande.
- Acabei de entregar um novo site para a Anambi - Análise Ambiental, um trabalho que gostei muito de fazer ( matei um pouco da saudade do velho Flash e o ActionScript ). Procuramos fazer junto com a empresa um site que fosse leve, agradável e que valorizasse a relação que a empresa tem com o meio ambiente. E aproveitando este embalo com o Flash, nos próximos posts estarei falando sobre alguns problemas enfrentados e como contornei os mesmos. Espero poder trocar experiências com vocês.
É isso, até breve( desta vez será breve mesmo).



