Cairo Noleto

Aprendendo Rails!

| Comments

Sabe por que eu gosto da comunidade de Ruby e do Rails? Por que as pessoas se unem para ajudar umas as outras, e sempre sai coisas boas da comunidade!

E uma dessas iniciativas saiu, o Aprendendo Rails! É a união dos iniciantes de Ruby e Rails para aprender, divulgar e trocar ideias e materiais sobre Ruby e principalmente sobre Rails. O material que vai ser gerado vai ser bom. Vai sair um E-commerce, e muito material para as pessoas aprenderem a caminhar nessa linguagem e nesse framework.

Eu estou lá, agora é você quem deve fazer parte! Vamos lá, vamos nos unir, e mudar o mundo com Ruby e com Rails!

Até a próxima!

PHP é uma linguagem de programação Ágil?

| Comments

Hoje eu li um artigo bastante interessante, PHP é uma linguagem de programação Ágil?

Bom, adiantando, não existe linguagens Ágeis, existem linguagens que te dão um suporte maior para por em prática sua Agilidade. Ruby, Smalltalk, Java são as linguagens que eu considero que dão maiores suportes para Agilidade, PHP, bom, PHP ainda tem que evoluir bastante, principalmente na quantidade de ferramentas que ajudam nesse sentido.

Bom, boa leitura para vocês.

Até a próxima!

Diferença entre git merge e git rebase

| Comments

Olá, há alguns dias tive muitos problemas de conflitos ao usar o git, quando ia unir dois branchs. Sempre tinha um ou outro arquivo com conflito.

Então postei a minha dúvida na lista git-br e na do rails-br, então no rails-br me indicaram a usar o rebase ao invés do merge, com o rebase, diminuiu e muito a quantidade de conflitos.

Agora, qual a diferença entre o git merge e o git rebase? Eis a resposta ;)

Ao se fazer um git rebase se faz a união de dois branchs mas mantendo o histórico de commits:

Git Rebase

Enquanto que o merge apenas une os dois branchs e desconsidera o histórico:

Git merge

Fazendo assim, o rebase mantem um histórico maior, assim gerando menos conflitos.

Por um lado, isso aumenta o número de commits e patchs por outro lado diminui bastante o índice de conflitos já que ele segue uma cronologia entre os branchs.

Eu prefiro manter o histórico de revisões é bem mais fácil de gerenciar.

Até a próxima!

Documentação Ágil (Agile documentation) com PHPUnit

| Comments

Para quem acha que times Ágeis não criam documentação, vocês estão enganados! O que acontece é que a documentação está sempre em mudanças, que levaria bem mais tempo documentar as coisas do que programar ou entender do negócio.

Mas nem por isso times Ágeis não documentam, times Ágeis usam as próprias ferramentas para criar documentação, e com PHPUnit não é diferente. No PHPUnit existe uma forma de criar documentação a partir dos testes utilizando o comando phpunit --testdox ClasseDeTeste.

Esse simples comando gera a partir de seus testes uma breve documentação sobre o que são os testes que você está escrevendo:

1
2
3
4
5
phpunit --testdox BankAccountTest
PHPUnit 3.2.10 by Sebastian Bergmann.
BankAccount
 - Balance is initially zero
 - Balance cannot become negative

Exemplo retirado da documentação oficial. Daí você pode exportar para html ou qualquer outro formato de saída que o próprio PHPUnit oferece.

Até a próxima!

Suporte para Behaviour Driven Development (BDD) e Histórias (Stories) no PHPUnit 3.3

| Comments

Agora o PHPUnit tem suporte para Behaviour Driven Development (BDD) e criação de histórias (Stories). Além de Test-Driven Development (TDD) agora BDD no PHPUnit.

Nesse artigo do Sebastian Bergmann, ele demonstra como utilizar BDD no PHPUnit descrevendo uma partida de boliche. O que eu achei legal foi o formato de saída:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
sb@vmware ~ % phpunit --story BowlingGameSpec
PHPUnit @package_version@ by Sebastian Bergmann.
BowlingGameSpec
 - Score for gutter game should be 0 [successful]
   Given New game
    Then Score should be 0
 - Score for all ones is 20 [successful]
   Given New game
    When Player rolls 1
     and Player rolls 1
     and Player rolls 1
     and Player rolls 1
     and Player rolls 1
     and Player rolls 1
     and Player rolls 1
     and Player rolls 1
     and Player rolls 1
     and Player rolls 1
     and Player rolls 1
     and Player rolls 1
     and Player rolls 1
     and Player rolls 1
     and Player rolls 1
     and Player rolls 1
     and Player rolls 1
     and Player rolls 1
     and Player rolls 1
     and Player rolls 1
    Then Score should be 20
 - Score for one spare is 16 [successful]
   Given New game
    When Player rolls 5
     and Player rolls 5
     and Player rolls 3
    Then Score should be 16
 - Score for one strike is 24 [successful]
   Given New game
    When Player rolls 10
     and Player rolls 3
     and Player rolls 4
    Then Score should be 24
 - Score for perfect game is 300 [successful]
   Given New game
    When Player rolls 10
     and Player rolls 10
     and Player rolls 10
     and Player rolls 10
     and Player rolls 10
     and Player rolls 10
     and Player rolls 10
     and Player rolls 10
     and Player rolls 10
     and Player rolls 10
     and Player rolls 10
     and Player rolls 10
    Then Score should be 300
Scenarios: 5, Failed: 0, Skipped: 0, Incomplete: 0.

Configurando rotas no CodeIgniter

| Comments

Olá, para quem já conhece o CodeIgniter pode dar uma olhada em outros posts aqui no meu blog. Para quem não conhece resumindo: CodeIgniter é um framework MVC para PHP.

Para quem não sabe, o CodeIgniter trabalha com URI’s e por padrão ele utiliza /controller/method/param1/param2/param3. Mas o mais legal, é que você pode configurar suas próprias rotas.

Para configurar suas próprias rotas você deve ir no system/application/config/routes.php. Para configurar as rotas, você pode utilizar Expressões regulares. Numa pequena aplicação que estou fazendo aqui, configurei um pseudo REST criando rotas como:

1
2
3
4
5
6
7
8
$route['tasks/index.json'] = 'tasks/index/json';
$route['tasks/index.html'] = 'tasks/index/html';
$route['tasks/edit/([a-zA-Z0-9 ]+).json/'] = 'tasks/edit/json/$1';
$route['tasks/edit/([a-zA-Z0-9 ]+).html/'] = 'tasks/edit/html/$1';
$route['tasks/save.json'] = 'tasks/save/json';
$route['tasks/save.html'] = 'tasks/save/html';
$route['tasks/destroy/([a-zA-Z0-9 ]+).json'] = 'tasks/destroy/json/$1';
$route['tasks/destroy/([a-zA-Z0-9 ]+).html'] = 'tasks/destroy/html/$1';

E controlo as respostas no próprio controlador, no Rails isso é bem mais simples é só apenas utilizar o respond_to, sendo que o Rails consegue identificar o tipo de acesso que ele está requisitando, já aqui no PHP utilizo switch e tenho que passar “no braço” o que realmente eu quero.

Criando essas rotas, identifico a resposta para minha requisição fazendo funcionar o pseudo REST.

Você poder criar qualquer tipo de regra para suas rotas e dizendo para onde elas devem redirecionar. É algo simples de se fazer, especialmente pelo fato de poder utilizar Expressões Regulares.

Até a próxima!

Café com o tom

| Comments

Olá mais uma vez, para quem não conhece a e-Genial e seu produto Treina TOM, com certeza está perdendo uma ótima oportunidade de aumentar seus conhecimentos.

O Carlos Eduardo desde quando lançou o Treina TOM organizou o que ele chama de Café com o TOM, que é uma série de palestras gratuitas sobre os mais diversos temas tecnológicos.

Nesse último sábado tivemos uma ótima palestra com o Vítor Pamplona com o tema “Mestrado, devo encarar essa”. Foi simplesmente uma ótima palestra, mostrou a visão de quem já fez além de dizer várias dicas de como fazer e por que fazer.

Para quem perdeu não se sinta por baixo, o Carlos Eduardo disponibiliza gratuitamente as palestras em vídeo, é só entrar no site do Café com o TOM e fazer o download ;).

E no próximo sábado vai ter palestra do Carlos Brando sobre o tema: Expressões Regulares e Ruby - Uma união feliz!

Nos encontramos no próximo sábado!

Até a próxima!

PHP 5.3 alpha1 lançado!

| Comments

Olá, hoje foi lançado a primeira versão do PHP 5.3, essa versão é esperada para aumentar a estabilidade e perfomance além de ter sido adicionado novas funções e extensões.

As mais importantes mudanças (In english ;):

Agora é só esperar sair a versão final e colocar o novo PHP em produção!

Até a próxima!