jun 26 2008

PHP 6

Eu busquei pelo Google noticias sobre o PHP 6. E realmente não encontrei muita coisa boa.

A primeira coisa que você acha, é somente uma pauta de Novembro de 2005 dos líderes do projeto PHP 6 e comentando sobre as novas funcionalidades, o que deve ser retirado e o que vai ser refatorado.

Eu tentei procurar dentro do site oficial do PHP sobre como anda o desenvolvimento, infelizmente não achei muito sobre o PHP 6, mas sobre o PHP 5.3 existe muita coisa nova. Enfim, este não é o intuito deste artigo.

Bom, estamos a mais de 2 anos após essa reunião de definição e pouquíssimas noticias sobre o novo PHP circulam por aí. Mas a maior discussão é sobre a migração.

Não dos desenvolvedores, mas dos provedores web. Hoje estamos na versão 5.2.6, prestes a entrar na versão 5.3 e temos provedores ainda com suporte ao PHP 3, muitos com suporte a versão PHP 4. A Zend estará ministrando um curso de migração do PHP 4 para o PHP 5 em julho.

Espero logo contar com a nova versão e espero que os provedores que usem não demorem muito para migrar. Fico de prontidão para noticiar as novidades sobre o PHP 6.

Até a próxima!


jun 24 2008

Ajude a sustentar a Wikipédia e outros projetos, sem colocar a mão no bolso, e concorra a um Eee PC!

Ajude a sustentar a Wikipédia e outros projetos, sem colocar a mão no bolso, e concorra a um Eee PC!
…e também a pen drives, card drives, camisetas geeks, livros e mais! O BR-Linux e o Efetividade lançaram uma campanha para ajudar a Wikimedia Foundation e outros mantenedores de projetos que usamos no dia-a-dia on-line. Se você puder doar diretamente, ou contribuir de outra forma, são sempre melhores opções. Mas se não puder, veja as regras da promoção e participe - quanto mais divulgação, maior será a doação do BR-Linux e do Efetividade, e você ainda concorre a diversos brindes!


jun 23 2008

Tenha sempre um live cd por perto…

É isso mesmo, você usuário linux, tenha sempre um Live CD por perto.

Agora a pouco passei por um “apérreio” que só consegui resolver com o live cd do ubuntu 8.04.

Até a próxima!


jun 18 2008

Behavior Driven Development em PHP com PHPSpec

Comecei a ler muito sobre TDD, depois na comunidade rails-br descobri o BDD li e me pareceu mais simples do que TDD.

Para fazer TDD no rails é bem mais simples do que parece, é só executar os scripts de criação de models, controllers e views que o framework já cria os arquivos básicos para fazer TDD, bastando apenas escrever os casos de testes e executar o comando rake para tudo funcionar.

Para fazer BDD em rails é necessário a instalação de um plugin chamado RSPec, esse plugin é responsável pela criação das especificações em BDD.

Em rails é muito simples fazer TDD e BDD, já que o próprio ambiente te prepara para desenvolver se utilizando dessas técnicas, diferente dos frameworks PHP que poucos deles possuem facilidades como rails (Na sua última versão, o CodeIgniter introduziu TDD em seu core, ainda não tive tempo para dar uma olhada de como funciona. No cakePHP, pelo que eu vi na comunidade, é capaz de se fazer TDD).

Para se fazer TDD e BDD no PHP é necessário a instalação de frameworks para o mesmo, no meu caso eu escolhi o PHPUnit para testes unitários e para BDD eu escolhi o PHPSpec. Só que essa escolha foi por livre e espontânea pressão, é que somente existe esse framework para se trabalhar com BDD em PHP.

Ele foi escrito após o desenvolvedor (Pádraic Brady) ter se aventurado por Ruby e Rails e conhecido RSpec, ele resolveu desenvolver o “RSpec” para PHP e o batizou de PHPSpec.

A documentação é bastante simples e fácil de ler, usei algumas horas e li toda a documentação, e agora estou planejando para utiliza-los nos projetos que faço parte.

Agora vou explicar um pouco de como funciona com um exemplo.

Primeiro, antes da gente começar, devemos especificar o problema, no caso, como um usuário irá fazer um comentário.

Usuário deverá colocar seu nome, depois ele deverá colocar seu email.

Se o usuário tiver um site, poderá coloca-lo.

Então depois o usuário coloca o conteúdo do comentário e clica em enviar.

Agora que temos a especificação, vamos criar nosso primeiro exemplo:

require_once "Post.php";

class DescribeNewPostInBlog extends PHPSpec_Context {

	private $post = null;

	public function before() {
		$this->post = new Post;
	}

	public function itShouldSetName() {
		$this->post->setName("Cairo Noleto");
		$this->spec($this->post->getName())->should->beEqualTo("Cairo Noleto");
	}

	public function itShouldSetEmail() {
		$this->post->setEmail("caironoleto@gmail.com");
		$this->spec($this->post->getEmail())->should->beEqualTo("caironoleto@gmail.com");
	}

	public function itShouldSetWebSite() {
		if ("user set as website") {
			$this->post->setWebSite("http://www.caironoleto.com/");
		}

		$this->spec($this->post->getWebSite())->should->beEmpty();
	}

	public function itShouldSetContent() {
		$this->post->setContent("Aqui vai o comentário do post :P");
		$this->spec($this->post->getContent())->should->be("Aqui vai o comentário do post :P");
	}
}

Se rodarmos no terminal, teremos o resultado:
cairo@angus:~/BDDonPHP$ phpspec DescribeNewPostInBlog
E
Fatal error: Call to undefined method Post::setName() in /home/cairo/BDDonPHP/DescribeNewPostInBlog.php on line 15

Da erro por que nossa classe Post não contém o método setName, e vai da erro a cada um dos métodos que não funciona, então irei cria-los:

class Post {

	private $name;
	private $email;
	private $website;
	private $content;

	public function setName($name) {
		$this->name = $name;
	}

	public function setEmail ($email) {
		$this->email = $email;
	}

	public function setWebSite($website) {
		$this->website = $website;
	}

	public function setContent($content) {
		$this->content = $content;
	}

	public function getName() {
		return $this->name;
	}

	public function getEmail() {
		return $this->email;
	}

	public function getWebSite() {
		return $this->website;
	}

	public function getContent() {
		return $this->content;
	}
}

Agora rode mais uma o código e veja tudo rodando perfeitinho :D

Algumas considerações:

A primeira e mais importante é que o framework está na versão 0.2.3 e ainda não saiu nenhuma versão release, todas as versões são betas.

Por ser beta, falta alguns métodos (Como os “Matchers” beAnInstaceOf, beString, beOfType). Por assinar a lista, foi resolvido hoje e inserido o método beString, ainda não sei como faço pra pegar a versão do SVN que seria bem mais interessante, vou colocar um email na lista perguntando como faço e blogo aqui.

O Framework como está funcionando já da pra escrever muita especificação, então é bola pra frente.

Até a próxima!


jun 17 2008

Qualidade do software

Qualidade do software é uma das áreas de estudo em Engenharia de Software onde o principal objetivo é que o produto final atenda ao maior numero de requisitos em que ele foi solicitado.

Só que aí entra um grande problema, que é a definição do termo “Qualidade” e o termo “Qualidade do software”.

O termo “Qualidade” é definido como “aquilo que caracteriza uma pessoa ou coisa e que a distingue das outras”. Só que a interpretação do termo é extremamente pessoal, o que pode ser qualidade para uma pessoa, pode não ser para outra pessoa, que pode ser ou não para o restante das pessoas.

E isso se extende a qualidade do software. É dificil definir se um software é de boa ou má qualidade, por conta desse conceito ser extremamente pessoal.

Mas uma coisa é certa, o que determina a qualidade do software, é a qualidade no processo de desenvolvimento de softwares (Mas não é difícil determinar qualidade?).

Analisando os resultados dos softwares, foi detectado vários padrões e criado várias metodologias de desenvolvimento. CMMI, SPICE, ISO 12207, MPS.BR, SCRUM, XP, e muito mais foram criados para determinar essa qualidade do software.

Mas o mais importante, independente de se usar padrões, metodologias ou qualquer outro tipo de tendencia, é garantir com que o seu software atenda aos requisitos de seu cliente, e que este atenda as necessidades do mesmo. Assim você está garantindo que seu software tem a qualidade ideal para seu cliente.

Até a próxima!


jun 13 2008

O que é scrum?

Scrum é uma Metodologia de Desenvolvimento Ágil. Que utiliza um processo interativo e incremental. Foi criado para gerencias equipes de projetos e integrar equipes no desenvolvimento de softwares e principalmente, para lidar com os problemas encontrador na metodologia em cascata (Waterfall).

O maior problema era que o produto final quase sempre estava diferente do que o cliente solicitou. Justamente por que o acompanhamento do cliente com o produto não existia. A metodologia Scrum foi feita para diminuir o tempo de releases, e mostrar ao cliente que o produto pode e deve ser do jeito que ele quiser.

Para os desenvolvedores, ficou melhor de lidar com o gerenciamento de tarefas, manter o foco no desenvolvimento e por haver muita interação e comunicação é mais fácil saber o que cada um deve fazer e o seu papel nas atividades.

Até a próxima!


jun 11 2008

Diferença entre TDD e BDD

TDD é um acronimo para Test-Driven Development, que significa desenvolvimento orientado a testes, e BDD é um acronimo para Behavior Driven Development, que significa desenvolvimento orientando a comportamentos.

TDD e BDD são técnicas de desenvolvimento que priorizam os testes de código, integração continua e desenvolvimento ágil.

Essas técnicas são para desenvolvimento a testes. Mas tem uma pequena diferença, em TDD você escreve os testes e os valida de forma que eles funcionem. Já em BDD, você escreve como deve se comportar seu problema.

Além disso, em BDD é mais humano os testes. Existe um framework em ruby chamado RSpec que você deve ser bom em inglês, já que você praticamente “fala” com o framework e diz como vai se comportar as coisas. Em php, foi criado um framework chamado PHPSpec, que é uma “versão” do RSpec para PHP.

BDD foi originalmente criado para suprir a necessidade que começou a ser criada em TDD. E também, por que escrever orientado a testes é mais chato, principalmente para quem não tem experiência com testes, ou tem muita experiência.

Quando se programa em TDD, com o passar do tempo, o seus testes se tornam o comportamento que você quer na sua aplicação, algumas pessoas consideram o BDD uma evolução natural do TDD.

Independente de usar técnicas ou não, é necessário que a aplicação seja testada. E testes devem ser automáticos, manuais, documentados e validados.

Até a próxima!


jun 7 2008

CodeIgniter, música e programação

Rick Ellis cantando Sinatra

Música? Interessante, fui atrás da história do CodeIgniter, e acabei me deparando com uma história muito boa.

Rick Ellis é um músico, engenheiro e designer musical. Na década de 90 começou a criar web sites apenas por hobby.

Em 2001 ele foi ao Japão e criou um sistema de blog, quando voltou a Los Angeles, ele trabalhou duramente em um protótipo para o site da filha de Frank Sinatra, Nancy Sinatra. Ela amou e Rick decidiu chamar de “pMacinhe”.

Em 2002, o pMachine foi referencia nas maiores revistas como Mac World ou Mac Addict e um livro sobre blogagem.

ExpressionEngine, foi o lançamento de 2004, intitulada com a próxima geração dos sistemas de publicações de contéudo.

E em 2006, a EllisLab lança o CodeIgniter, uma plataforma de desenvolvimento para desenvolvedores PHP.

No ano de 2007 eu descobri esse framework e utilizo até hoje em meus projetos.

E para quem acha que ele apenas ficou como músico ledo engano, ele se especializou em gerenciamento de projetos pela PMAlliance, enfim, alguem que por hobby acabou tornando isso profissionalmente e hoje é bem conhecido.

Uma história legal e até inspiradora. Agora é correr atrás e se especializar.

Até a próxima!


jun 5 2008

Rasmus Lerdorf, criador do PHP

PHP foi criada em 1995, originalmente designada para produção de web-sites dinâmicos, por Rasmus Lerdorf.

Concebida para mostrar as estatísticas de sua página pessoal, substituindo alguns scripts feitos em Perl. Em 1997, Zeev Suraski e Andi Gutmans, dois israelenses, construiram a base para o PHP 3, estes tambem criaram o Zend Engine e a Zend Technologies.

Curiosidade: Rasmus foi programador Unix em Porto Alegre nos anos de 1991 a 1993.

Até a próxima!