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

1º Workshop PHPMS – PHP Extremo, SUCESSO

É com grande alegria que informo a todos o sucesso que atingimos com a realização de nosso primeiro Workshop. Tudo no evento saiu melhor do que esperado (menos um pedacinho da minha apresentação, mas isso é detalhe,hehehe).

Tivemos público maior do que o esperado, e todos muito participativos, a quantidade de empresas apoiando também foi grande – principalmente se pegarmos como referência outros eventos de Campo Grande. O nível das apresentações também estavam muito bem definido. Enfim, se melhorasse era perigoso estragar.

Passei a última semana inteira preparando minha apresentação no workshop, inclusive quase não durmi essa noite (3 horas exatas), mas no final tudo aconteceu dentro dos conformes. A participação dos presentes foi outro ponto que me chamou a atenção, serviu para provar que quem estava ali realmente sabia o que estava fazendo ali.

Quero aproveeitar mais uma vez para agradecer a todos que ajudaram de alguma forma no evento: organizadores e amigos (porkaria, zehzinho, Leonardo), o sempre disposto palestrante e amigo Raphael (raphox), aos apoiadores, aos patrocinadores e claro, a todos os presentes que acreditaram no evento e compareceram mesmo com o tempo ruim.

Para quem foi ao evento e gostaria de ver a apresentação de slides que utilizei, ela está acessível pelo endereço: http://www.slideshare.net/cauancabral/php-flex
Na apresentação falei sobre a utilização de Flex para construção de RIA’s juntamente com PHP (mais especificamente utilizando o framework  CakePHP), o exemplo da palestra pode ser encontrado no repositório svn: http://svn.radig.com.br/pagode – na data da  palestra a versão utilizada foi a #3, o sistema será complementado até que se torne realmente um sistema de controle financeiro pessoal. Portanto se tiver interesse no mesmo, acompanhe aqui no blog as novidades do projeto.

———-

O Raphox e o Porkaria também liberaram os slides das palestras, veja aqui e aqui respectivamente.

Workshop PHP Extremo

Como havia comentado no post anterior, o PHPMS realizará seu primeiro worksop: Workshop PHP Extremo.

Citando a página do evento:

O que é o Workshop PHP Extremo?

Trata-se de um evento voltado a profissionais, em especial os que trabalham com PHP.  O Workshop visa a capacitar os desenvolvedores PHP do estado e permitir a troca de experiências e networking,  elevando o nível dos atuais desenvolvedores PHP e profissionais da área.

Como é possível ver pela breve introdução, é um evento voltado para desenvolvedores, como diria Steve Ballmer: “developers! developers! developers!”

Se você tem interesse em participar do evento corra, pois as vagas são bem limitadas (30 pessoas) e o valor está muito baixo – apenas R$ 15,00 antes de evento – e de quebra você leva uma camiseta. Visite a página do Workshop PHP Extremo e siga os passos para fazer sua inscrição.

Caso além de querer participar você queira um espaço para compartilhar seu conhecimento, um lugar apresentar algo e discutir com profissionais da área, então é sua chance de apresentar um trabalho no Workshop. Serão 3 apresentações durante o workshop, uma pode ser a sua, basta submeter sua proposta de trabalho neste formulário. Mas corra, as submissões tem de ser feitas até o dia 20 de Junho.

Vamos participar para que possamos realizar outros destes no futuro.

Últimas Novidades #2

Vamos lá a mais notícias que talvez vos interessem ;]

  1. O PHPMS realizará no dia 11 de Julho seu primeiro workshop: PHP Extremo. A idéia é realizar um evento voltado a profissionais que trabalham com PHP, dando uma oportunidade para reciclar e expandir seus conhecimentos. Os temas ainda não foram decididos e a chamada de trabalhos deve ser iniciado até segunda feira próxima. Para mais informações, acesse: http://workshop.phpms.org;
  2. O PHP Mobile continua de vento em polpa, acompanhe as notícias sobre o projeto seguindo o twitter ( @phpmobile ) e site: www.phpmobile.com.br;
  3. Minha empresa está indo muito bem obrigado, pretendo disponibilizar alguns artigos e ferramentas de trabalho do dia-a-dia no site dela em breve. Se estiver precisando de algum serviço relacionado a TI, entre em contato. Será um prazer atende-lo;
  4. Atualizei o WordPress aqui do Blog (WP 2.8), de início a área administrativa ficou bugada, acusando falta de memória, tive de atualizar o php.ini aumentando o limite de memória de 32MiB para 64MiB. Achei um absurdo o sistema usar 64MiB (acho que 40MiB já seriam suficiente, mesmo assim achei muiita coisa);
  5. O Joomla lançou atualização do CMS, versão 1.5.11, possui 3 correções de segurança que devem ser aplicadas imediatamente (se você ainda não a fez);
  6. Ainda hoje atualizo o tema aqui do blog.
  7. Minha idéia dos scripts para administração está em andamento, infelizmente perdi acidentalmente uma das minhas classes principais e estou tendo de reescreve-la (como já havia comentado antes). Assim que tiver o mínimo de funcionalidade divulgo aqui.

Por último, meu notebook chegou (no dia 10 de Junho de 2009) exatos 30 dias após o início da produção por parte da Dell – apesar de antes de fazer a compra ver estampado no site que notebooks montados no Brasil tinham prazo de 10 dias úteis para entrega (14 dias corridos). Não bastace a grande demora na entrega, o notebook veio faltando uma das peças que pedi e paguei. Entrei imediatamente em contato com a Dell, pediram que enviasse um email para <pessoa>@dell.com.br para que resolvessem o problema. Mais uma vez demora, mandei o email no dia 11 de Junho, hoje, dia 13 não recebi resposta alguma. O notebook possui desempenho satisfatório mas o antedimento da Dell me decepcionou, dúvido que a Dell norte-americana trate seus clientes assim.

Enfim, se for comprar um computador, escolha um HP, Apple, Acer ou Sony, possuem qualidade igual ou melhor a da Dell e respeitam seus clientes.

Últimas novidades

Faz um tempinho que não posto nada, vida corrida como sempre e alguns imprevistos…

Primeiro, estou sem meu velho companheiro que me acompanhou nestes quase 3 anos: um Acer Aspire 5610. Precisava de uma máquina um pouco mais rápida e quando surgiu a oportunidade de vender meu velho companheiro, tratei logo de procurar um substituto.
Escolhi um Dell Vostro 1510, C2D T8100, 4GiB de RAM, HD 250GiB 7200RPM, nVidia 8400GS e algumas outras coisinhas. O único problema é que a entrega está demorando um pouco mais do que planejei (recebi a confirmação de compra na segunda-feira 11/05 e até agora o produto está em produção). Paciência =]

Segundo: a Radig está a todo vapor, estamos com vários projetos em andamento e as perspectivas são muito boas.

Terceiro: estou participando de um projeto do meu amigo Bruno Porkaria, o PHP Mobile e ele também está a todo vapor. Confira a página do projeto para entender mais sobre.

Por último, tive a idéia de condensar todas as pequenas classses e scripts que utilizo na manutenção de páginas e seus hosts em uma única interface, porém descobri que esqueci de fazer backup de algumas delas, então terei de reescrever boa parte. Em breve falo mais a respeito, a idéia é incluir métodos para migração de uma página de um provedor para outro, sem precisar de acesso SSH (somente PHP e FTP) e de forma automática, corrigir nomes de arquivos enviados pelo usuário (que possuem acentuação ou espaços), fazer backup de diretórios e recuperar estes backups. Enfim, as idéias são muitas, falta colocar tudo em prática.

Pretendo também alterar o layout do blog, não estou satisfeito com a formatação do conteúdo, acho que a leitura dos textos está sendo prejudicada pela fonte e espaçamentos.

Em breve dou mais detalhes sobre tudo que citei.

FISL 10 – Eu vou!

banner de divulgação do 10º Fórum Internacional de Software Livre

Este ano ocorre a 10º edição do Fórum Internacional de Software Livre – FISL, como sempre, na capital gaúcha, Porto Alegre.
Ano passado tive o privilégio de participar da 9º edição, junto a um comboio de amigos ( 1 carro e 1 van ) “descemos” o país do MS até o RS. Este ano a organização pretende fazer o maior FISL de todos, chamando-o de “edição especial”.

Provavelmente não terei como ir de carro novamente, mas de um jeito ou outro irei. Caso você também more longe de Porto Alegre, é bom começar a correr atrás de transporte e estadia logo. Veja também as promoções de companhias áreas, já encontrei passagens de ida e volta por menos de R$ 500,00 (normalmente custam mais de R$ 1000,00).

Outra coisa que você deve fazer o quanto antes é sua inscrição. Elas foram abertas semana passada e ficarão com preço promocional até o dia 17/04, aumentando progressivamente até o valor máximo para pagamento na hora.

Estarei no FISL juntamente com o pessoal do PHPMS e do PHPBC.

Lançado Internet Explorer 8 (IE8) – Morte ao IE7

Hoje a Microsoft liberou a versão final do IE8. Dando uma pesquisada na página do lançamento, fico feliz que o suporte a padrões realmente foi aprimorado (mesmo ainda tendo chão para alcançar o Opera/Webkit/Firefox)… fico apenas com uma coisa em mente: vamos estender a campanha Morte ao IE6 ao IE7? Por uma web melhor.

Caso queira conferir as novidades no suporte a HTML e CSS, acesse: http://msdn.microsoft.com/pt-br/library/cc817571(en-us).aspx

Para ter detalhes específicos do suporte a CSS a melhor página é: http://msdn.microsoft.com/en-us/library/cc351024(VS.85).aspx

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.
——–
Atualizado

Obrigado ao José Tranca e Thiago Goulart pelos comentários, as soluções propostas por eles devem ser adotada em detrimento da minha, já que melhora consideravelmente a modularidade e reusabilidade das traduções.

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.

Ainda não tem hospedagem? Aproveite

Acredito que a maior parte dos visitantes deste blog trabalhem com internet. E neste trabalho, não ter um serviço de hospedagem para colocar seus serviços em produção ou mesmo durante o desenvolvimento é tão complicado quanto um médico clínico-geral não ter um estetoscópio.

As vezes nos esbarramos em alguns problemas para ter nosso espaço na web: se quiser ter um servidor em casa/escritório este terá de ter um IP fixo ou algum serviço de DNS como o NO-IP.com; se quiser ter um servidor dedicado fora de casa terá de pagar uma boa quantia; caso não disponha de muito dinheiro, terá de se satisfazer com várias limitações de recursos, certo? Não neste caso.

Infelizmente aqui no Brasil ainda é muito caro ter um servidor de hospedagem com bons recursos e preço baixo, mas lá fora isso já é realidade, então o que fazer para aproveitar isso? Primeira coisa é ter um cartão de crédito internacional (já que temos de pagar em moeda estrangeira) e se possível uma conta no PayPal (para aumentar a segurança de nossas “comprinhas”), depois disso é só escolher o host.

Atualmente trabalho com a Bluehost[en], mas ontem me inscrevi e outro grande serviço: a Dreamhost[en].

Ambos possuem ótimas características, dentre elas:

  • Espaço em disco ilimitado;
  • Trafego de dados ilimitado;
  • Domínios e subdomínios ilimitados;
  • Acesso SSH;

Além de vários outros. A diferença de preço entre elas não é muito grande, normalmente. Mas de vez em quando aparece uma grande promoção. Hoje é um desses dias.

Na Dreamhost, se você utilizar o código promocional 777 você paga somente $9,24 por um ano de hospedagem e ganha o registro de um domínio internacional na faixa. Mas só pode ser aproveitado até hoje, 15 de fevereiro de 2009. Então se tiver com uma conta PayPal ou um cartão internacional em mãos, não perca tempo.

Na Bluehost você pagará a bagatela de $6,95 por mês no plano de hospedagem (para pagamento anual). Isso dá menos de R$15,00/mês por um plano ilimitado, não é uma pechincha? Então se hoje não é 15 de fevereiro, utilize o banner abaixo e se inscreva na Bluehost para ter um ótimo serviço por um preço absurdamente baixo.

— Atualizado —

Caso tenha perdido a promoção do dia 15/02/2009, não perca as esperanças, utilize o código promocional CAUANCABRAL para registrar sua conta na Dreamhost e ganhe um bom desconto: são $50.00 para assinatura mensal (custo normal $60.90), $75.00(de $119.40) para assinatura anual e $79.00(de $214.80) para assinatura bienal. Aproveite ;P