links for 2009-05-25
-
Ótimo conteúdo sobre Agile
Seven things that probably you may not know about me
It’s running in PHP world a STTPYMNKAM networking pings (meme/tag)… the idea is simple: I was tagged by Porkaria (that was tagged by Adler, and so on…) then I may describe 7 “curious” things about me, and tag another 7 people, chaining more people.
Thanks to Porkaria to put me in this hole (or pyramid?)… here we go again…
1. I choose Duodraco nick… from pagan stuff… it’s a simple merge from Draco(latin word for Dragon) and Duo(latin “Two”(from zodiac Gemini)).
2. I’m Pagan: although christian baptized, I found real spirit peace from ancient knowledge. I was evangelic earlier in my life… but it’s past.
3. I say NOT: usually, it’s my first answer for generic questions…
4. I have Zero Tolerance for Dumb Questions: brazilians can remember from “Seu Saraiva” (Francisco Milani’s comedy role)
5. I like Rock-related music: rock, metal, blues, jazz and classic.
6. I hate “Brazilian Carnival”… no explanation… but I hate so more stuff, like Xuxa, Evangelic Priests and Catolic Fathers.. and Bush(the president).
7. I’m trying to be a Portuguese citizen… My father’s mom (Isabel grandma… good risotos…) and a lot of family people are from there.
And now… the Oscar goes to I’m tagging my frinds:
Augusto Pascutti: long date friend, nipo-italian rocker and co-worker
Tatto: A good frined that I know in PHPConference Brazil ‘07, from Santa Catarina/Brasil
Luke Crouch: He gave a presentation in PHPConference Brazil ‘08, and drinked some beer with us.
Fernando Chucre: Another Conference friend; developer from Ceará/Brasil
Bruno Viana: One more… and we are not familiar (”Arruda” family name)
Rules are simple:
Link your original tagger(s), and list these rules on your blog.
Share seven facts about yourself in the post—some random, some weird.
Tag seven people at the end of your post by leaving their names and the links to their blogs.
Let them know they’ve been tagged by leaving a comment on their blogs and/or Twitter.
Ambiente de Desenvolvimento Web
Olá
Como você desenvolve? O que você usa para desenvolver? Provavelmente você já viu/ouviu essas perguntas em fóruns, listas, ou mesmo perguntando a colegas da área. Nesse artigo vou falar sobre como desenvolvo hoje, na empresa e no home office. Não me aprofundarei muito em cada tema, pelo menos não agora!
Sistema Operacional
Abandonei o Windows® há algum tempo, usando-o só pra atualizar o Smartphone (Windows Mobile). Minha estação de trabalho é um notebook dotado de de um Turion X2 1.6, com 1GB de RAM (que em breve espero que sejam 4) 4Gb de RAM. Neste note utilizo o Kubuntu Intrepid 64, rodando o KDE 4.2 Beta; Optei pelo [K]ubuntu pela facilidade de manutenção, apesar de arcar com o custo de ter alguns módulos carregados os quais ainda não parei pra tirar da inicialização; O namoro com o Debian/Ubuntu é de longa data; Gosto mais da interface do KDE, a qual você pode customizar bastante, além de haverem ótimos recursos avançados, mas é assunto pra outro artigo
Na Burti, onde atuo como desenvolvedor hoje em dia, trabalho com um MacMini rodando o MacOS X 10.5 (leopard); antes de trabalhar lá eu meio que tinah um preconceito com relação a Mac, mas depois de conhecer, e não é nada do outro mundo, você até gosta do bichinho; ótima interface, dificilmente você irá rebootá-lo por uma pane (a não ser quando a Dock inventa de sumir).
O Windows ainda tem a maior variedade de Aplicativos (IDEs, Editores, Servidores, etc) para o desenvolvimento, mas com o que vou comentar a seguir não preciso deles de maneira alguma.
Servidores
Acho que se eu fizesse uma pesquisa aqui sobre qual servidor web é mais usado localmente no desenvolvimento, o Apache ganharia disparado. E se for falar de BD, o Mysql teria sua fatia bem gorda também. No note tenho as ultimas versões de Apache e Mysql para o desenvolvimento, com a ultima versão do PHP (hoje a 5.2.8). Para mim é algo bem fácil instalar: apt-get install php5 php5-mysql mysql-server.
No Mac faço uso do truque sujo MAMP.
Controle de Versão
Esse é um ponto controverso com alguns gerentes/coordenadores que conheço, mas é algo mais que necessário para o desenvolvimento. Uso o subversion na Burti, integrado com a IDE que vou falar adiante. Para quem não conhece sistemas de Controle de versão (CVS, Subversion, Bazaar, GIT), deveria se informar melhor do assunto.
Uso o subversion por ter maior conhecimento neste, além de ser mais fácil encontrar alguém que conheça o SVN que o GIT por exemplo.
IDE / Editor
Usar uma IDE ou um Editor mais simples? eis a questão! Eu uso uma IDE para, em uma só ferramenta eu ter o controle do código, visualização da arquitetura de classes, visualização/ mapeamento da classe que estou editando, Debugging e Profilling. Uso o Netbeans 6.5 (sim, existe uma versão hoje de Netbeans com suporte a PHP); Minha principal motivação de mudar do PDT para o Netbeans é que o ultimo funciona no meu Kubuntu 64bits, enquanto que o primeiro tenho que mexer em muita coisa pra rodar redondo.
O Netbeans conta com edição de PHP/HTML/CSS/JS integrado com as principais bibliotecas/frameworks (jQuery, Prototype, Dojo), desenvolvimento local e remoto, navegador de código, debugging como já citado, entre outras tantas features. Uso tanto em casa quanto na Burti, e recomendo. Quando tenho que fazer uma alteração remota com urgencia não dispenso o VI.
Navegador
Pois é, todos nós que trabalhamos com php temos que abrir o navegador vez ou outra para visualizar as coisas feitas no HTML,CSS e Javascript, e as coisas não feitas pelo IE
. Minha primeira opção de navegador é o Opera, que dentre outros motivos atende à risca as especificações da W3C. Fazendo as coisas darem certo no Opera, tenho que acertar muito pouco, ou nada, minhas investidas contra o client-side em outros navegadores. Meu segundo navegador é claro o Firefox. Sempre há o pecado de ter as coisas no IE bagunçadas… para isso vamos ao próximo tópico.
Máquinas Virtuais
Bom, o principal uso de uma máquina virtual não é, com certeza, visualizar como seu sistema/site fica no IE, embora um dos meus usos seja especificamente esse. Uso o VirtualBox, com uma maquina windows xp. Apesar de ter o wine no linux, prefiro a MV a instalar o IE[ca] no Linux. Também uso a MV para testar as novas releases do [K|X]Ubuntu quando ainda em alpha/beta, e versões de softwares antes de instalar diretamente na workstation.
Cliente para Bancos de Dados
Bom, ainda não me acostumei a usar a ferramenta built-in do Netbeans (por sinal muito boa… só falta de costume). Então ainda uso o Mysql Query Browser e o Mysql Administrator, além, é claro, da interface em linha de comando; com o postgresql uso o PGAdmin. Mas ainda vou me acostumar a usar o cliente do netbeans, a se vou.
Editor UML
Sim, temos que utilizar a UML! Até pouco tempo atrás usava o ótimo Umbrello, do KDE, mas depois do Netbeans comecei a usar seu plugin UML que é ótimo. A única desvantagem para o Umbrello mesmo é a falta de geração de código a partir do Modelo neste ultimo.
MindMap
Não vou me aprofundar no assunto de mindmap, pelo menos não agora, mas é uma das melhores ferramentas para documentação em projetos ágeis, como Scrum e XP. Uso o Freemind para este serviço.
Metodologia de Desenvolvimento
Utilizo o Scrum como base na metodologia. O grande lance do Scrum é ter um ciclo definido de desenvolvimento, e consequentemente de releases para o cliente, no qual o desenvolvedor tem quase que total liberdade para gerenciar o tempo, além de ser flexivel quanto a regras, o que é até “obrigatório” no desenrolar de um processo Scrum. Falarei melhor sobre metodologias ágeis em breve.
Estilo de Codificação
Algo essencial para o trabalho em grupo. Utilizar um Estilo significa que o jeito que você escreve o código será igual ao da sua equipe, falando a grosso modo. Utilizo o Padrão do ZendFramework, que tem poucas variações do padrão PEAR.
Frameworks
Algo essencial para desenvolver rapidamente aplicações, sem re-re-re-re-inventar a roda.
No PHP estou brincando mais com o ZendFramework pelo nível e por tudo o que ele já possui; No passado ele tinha sérios problemas de performance, os quais não identifico mais, apesar de não ser o avião que o CodeIgniter / Kohana é.
Para o Javascript utilizo o fucker awesome poderoso jQuery.
Bom pessoal, dei uma passada rápida sobre o que uso no dia-a-dia para desenvolver. Até a próxima
PHP Conference ‘08
Tive que tirar umas teias de aranha pra postar aqui de novo.
Bom, ocorreu nos dias 27, 28 e 29 de Novembro o PHP Conference Brasil 2008. De longe um dos melhores eventos já ocorridos por esses lados. Infra-estrutura decente, conteúdo de nível, networking e tudo o mais que um evento desse porte pode querer.
No dia 28 apresentei a palestra “Objetos, Padrões e Prática”, abordadando Orientação a Objetos e Design Patterns, mostrando um exemplo funcional de framework mvc, usando os principais padrões. Segue a apresentação:
No sábado havia uma sala livre, então o Quarteto Fantástico (Dohms, Pascutti, Chucre e eu) + a colaboração do Surfista de preto (Ivan) realizamos uma mesa redonda, dissecando um Simulado para a Prova de Certificação da Zend; não é necessario dizer que estrapolamos o tempo da palestra (e do Mock)
Novos Amigos, atualização de conteúdo, networking, premissas e idéias para o PHP.SP. Acho que não ficou faltando nada. Teve quem (de novo) reclamasse da distância para a Unifieo, faculdade que sediou o evento; como moro lá perto, não tive problemas.
Até logo.
Dicas para um PHP mais veloz
Salve
Viu? não demorou muito para um novo artigo 
Vou passar a vocês uma materia que peguei há algum tempo em inglês… mais abaixo coloco as referências.
Trata-se de uma lista de dicas para o desenvolvimento PHP. Aproveitem.
PEAR, Webservices e DIME
Em primeiro lugar, desculpem a demora. foram longos meses sem um novo artigo. Pretendo reparar o acontecido com ótimo conteúdo para os leitores. Vamos falar neste post sobre Webservices com anexos… DIME pra ser mais específico. Junto com o assunto, introduzo o P.E.A.R. (PHP Extension and Application Repository), repositório de classes que auxiliam, e salvam a vida a maioria das vezes e que é mantido pela comunidade organizadamente. Leia mais »
BCMath – PHP fazendo contas direitinho
Salve
Não sei vocês, mas adoro o PHP. Me dá suporte a quase tudo que preciso para desenvolver bem. Um problema do PHP voltei a ver essa semana, e é até comum em algumas linguagens: erros em operações com números decimais. Como disse antes, adoro o PHP, e a solução está em uma extensão infelizmente pouco usada: a BCMath.
O problema acontece quando algum numero decimal na operação não é convertido facilmente para uma notação fracionária internamente no PHP, o que pode culminar em alguns bugs; veja o exemplo abaixo, retirado da documentação oficial:
echo floor((0.1 + 0.7)*10);
Isto irá exibir 7, e não 8 como esperado. o problema está não conversão para numero fracionário: o floor está recebendo 7.999999999, que resultará em 7;
Para os casos em que você necessita de precisão em números arbitrários existe a BCMath (Binary Calculator Mathematics). É uma extensão, obtida no pacote do php, geralmente habilitada por padrão. Dúvidas na instalção? deixe um comentário.
Se esta extensão estiver habilitada, você terá disponíveis as seguintes funções:
- bcscale($precisao) – Seta o número de casas decimais (precisão) padrão para todas as funções BCMath do script
- bcadd($n1,$n2,[$precisao]) – soma 2 números;
- bccomp($n1,$n2,[$precisao]) – compara $n1 e $n2: se forem iguais retorna 0; 1 se $n1 > $n2, senão -1;
- bcdiv($n1,$n2,[$precisao]) – Divide $n1 por $n2
- bcmod($n1,$n2,[$precisao]) – Retorna o resto da divisão de $n1 por $n2
- bcmul($n1,$n2,[$precisão]) – Multiplica $n1 por $n2
- bcpow($n1,$n2,[$precisao]) – Retorna $n1 potência de $n2
- bcpowmod($n1,$n2,$mod,[$precisao]) – O mesmo que bcmod(bcpow($n1,$n2),$mod), mais rápido
- bcsqrt($n1,[$precisao]) – Retorna a Raiz Quadrada de $n1
- bcsub($n1,$n2,[$precisao]) – Retorna $n1 – $n2
$precisao é um parâmetro opcional para todas as funções, exceto bcscale. O padrão no php.ini é 0, podendo ser alterado via ini_set, ou pelo bcscale.
Espero que esta pequena resenha sobre a BCMath seja útil (como foi pra mim… como foi…
) . Até a próxima.
Orientação a Objetos – parte 2
Salve
Na parte 1 falamos sobre o café com leite da Orientação a Objetos no PHP: classes, objetos, atributos e métodos. Desta vez vamos nos aprofundar mais no assunto e falar sobre herança, visibilidade e polimorfismo.
Utilizamos a herança para especializar uma determinada classe. No artigo anterior citamos os cães… imaginemos aqueles cães como cães comuns, mas precisamos descrever outro tipo: os cães de guarda, que possuem habilidades que o Max ou o Tirolez não possuem; com OO não precisamos escrever uma classe nova só para o Rush, o pastor alemão do vizinho. Extendemos a classe Cachorro original, herdando suas propriedades e métodos, e alterando o que for conveniente para a nova classe. Por exemplo: podemos dizer que o Rush, ao rosnar induza o cachorro para o qual ele faça de alvo a sentir medo, além de atribuir-lhe um novo método: morder (que originalmente, Max e Tirolez não são capazes de realizar).
Basicamente, para conseguirmos o que descrevi acima, precisamos de extender a classe Cachorro original:
class Cachorro{
//conteudo original
}
class CaoDeGuarda extends Cachorro{
function rosnar($outroCachorro){ /*novo conteúdo deste método*/}
function morder($alvo){ /*conteúdo deste método*/}
}
Para que isso funcione, precisamos conhecer alguns conceitos de OOP: visibilidade e polimorfismo
Visibilidade, que citei na primeira parte, é a declaração de como serão usadas (visíveis) os atributos / métodos de uma classe; os tipos de visibilidade são private, public e protected. Private define que a entidade somente estará acessível em métodos da classe em que a mesma foi declarada. Public define que a entidade pode ser acessada tanto por métodos internos, como por processos externos. Protected é como a private, porém permite que classes filhas acessem a entidade diretamente, sem sobrescrevê-la, e sem permitir o acesso a chamadas externas ao âmbito da classe/objeto.
Geralmente não usamos muito o protected; usamos na maioria das vezes o private para os atributos e o public para os métodos, quando estamos apenas descrevendo dados.Fazemos isso para que sempre seja necessária a execução de um método para alterar o valor de um atributo, podendo assim validar o novo valor, por exemplo. No PHP5, se não definirmos a visibilidade dos métodos, eles assumem como public, assim como se declararmos os atributos com var (PHP4), para manter a compatibilidade.
Polimorfismo: conceito pelo qual entende-se que uma classe filha (extendida), pode conter um mesmo método que a classe ancestral, embora sua execução seja diferente da original, reescrevendo o método da classe pai, utilizando a mesma assinatura; esta por sua vez é a maneira como é declarado o método, sua visibilidade, número e tipo de parâmetros e tipo de retorno; como o PHP não é tipado, ou seja, não atribuímos o tipo das variáveis, podemos nos referenciar a assinatura como visibilidade e número de parâmetros de um dado método.
Para entendermos esses conceitos, ai vai um exemplo:
class A{
private $a1 = '1';
public $a2 = '2';
protected $a3 = '3';
public function mostrar(){
echo 'Classe A:[';
echo $this->a1;
echo $this->a2;
echo $this->a3;
echo ']<br />';
}
}
class B extends A{
public function mostrar(){
//aqui estamos utilizando o polimorfismo para reescrever o método mostrar()
echo 'Classe B:[';
echo $this->a2;
echo $this->a3;
echo $this->a1;
echo ']<br />';
}
}
$a = new A;
$b = new B;
@$a->mostrar();//mostra Classe A:[123]
@$b->mostrar();//mostra Classe B:[23]
echo $a->a2;//mostra 2
echo $a->a3;//erro
echo $a->a1;//o script nao chega aqui
Esse exemplo nos dá uma idéia do que acontece às propriedades com suas visibilidades definidas.
Voltando aos nossos cães, podemos dizer que a classe CaoDeGuarda é mais específica que Cachorro, sua classe-pai ou superclasse. Podem perguntar ‘Certo, mas o que a tal da visibilidade tem a ver com os cachorros?’; digo que se na parte 1 declarássemos os métodos com as visibilidades específicas, teríamos que mudar muita coisa naquele codigo, e neste, para que tudo ocorresse bem. E mais: do jeito que está agora, podemos alterar o nome do ‘Tirolez’ para ‘123testando’ a qualquer momento.
Vamos alterar as classes para ficarem mais adequadas:
class Cachorro{
private $nome;
private $raca;
private $cor;
private $peso;
private $saude;
public function __construct($n,$r,$c,$p,$s=100){
$this->nome = $n;
$this->raca = $r;
$this->cor = $c;
$this->peso = (float)$p;
$this->saude = (int)$s;
public function latir(){ /*código que fará o cachorro latir*/ }
public function rosnar($outroCachorro){ /*código que fará o cachorro rosnar para outro */ }
public function mijar($onde){ /*código que fará o cachorro urinar em algum lugar */ }
public function dormir(){ /*código que fará o cachorro dormir e recuperar saúde*/ }
public function setSaude($novaSaude){
$this->saude = (int)($novaSaude > 100) ? 100 :$novaSaude;
}
public function getSaude(){
return $this->saude;
}
}
class CaoDeGuarda extends Cachorro{
function rosnar($outroCachorro){ /*O CaoDeGuarda faz o outroCachorro amedrontar-se*/ }
function morder($alvo){
$saudeOriginal = $alvo->getSaude();
$saudeDepoisDaMordida = $saudeOriginal*0.9;//o alvo perde 10% da saúde a cada mordida
$alvo->setSaude($saudeDepoisDaMordida);
}
}
Bom, podemos fazer a mesma brincadeira da parte 1:
$rush = new CaoDeGuarda('Rush','Pastor','Preto/Bege',50);
$ralf = new Cachorro('Ralf','Fox Paulistinha','Preto/Branco',12);
$ralf->rosnar($rush);//ralf, com seus 30 cm de bravura e estupidez...
$rush->rosnar($ralf);//agora ele viu o tamanho da encrenca;
while($ralf->getSaude() > 50){
$rush->morder($ralf);
}
//sim, gastamos uma boa grana com o veterinário
Assim encerramos esta parte. Na próxima falarei sobre abstração, métodos estáticos, interfaces e mais. Até lá
Voltando…
Salve
Depois de muito tempo eis que tento novamente me aventurar nas linhas do blog… tive uns probleminhas com o antigo host e agora estou postando da conta do wordpress.com. Estou estudando bastante coisa e em breve já haverão novos artigos aqui. Aguardem…
Orientação a Objetos – parte 1
Muitos falam, outros têm como utopia, outros entendem e outros nunca ouviram falar (na área de TI isso é bem improvável, mas não podemos ignorar tal possibilidade). A verdade é que muitos ‘endeusam’ um conceito até simples…
Orientação a Objetos é um conceito, um paradigma de programação. É interpretar no software entidades da vida real, ou problemas da vida real. Olhe para os lados, para a frente: tudo o que você vê, e não vê (tempo, por exemplo); tudo isso pode ser interpretado em software.
Provavelmente nesse momento você está à frente de um monitor… imagine o que é um monitor: suas características e suas funcionalidades. Se pensarmos que um monitor pode ser colorido (ou não), tem marca, modelo, taxa de atualização, tipo (lcd/crt/plasma), brilho, contraste, nível de cor, etc… são características, substantivos, adjetivos: atributos. Esse monitor pode ligar-se, desligar-se, ajustar o brilho, o contraste, o nível de cor… são ações, verbos, ou métodos. Já estamos chegando no conceito de classe
Classe: é a definição, em software OO, de todos os atributos e métodos que servirão para ser a base de um objeto. Pensando num exemplo mais ‘vivo’, imagine um software de controle de cães.Nesse software teremos vários cachorros, e o objetivo é fazê-los interagir entre si. Teremos cães.. uma matilha… se dissermos que nesse programa a entidade mais genérica é um Cachorro, podemos dizer que temos algo assim:
Cachorro:
a::nome
a::raca
a::cor
a::peso
a::saude
m::Cachorro
m::latir
m::rosnar
m::mijar
m::dormir
Isto seria uma maneira de descrever o que é e o que faz um Cachorro, dentro do contexto do nosso software. É um exemplo bem simples, e foge de um exemplo devidamente arquitetado, que nos próximos capítulos da nossa jornada será melhor esclarecido, mas para fins didáticos vai nos servir como uma luva.
onde coloquei ‘a::’ é um atributo e onde tem ‘m::’ é um método. Como atributos temos nome, raca, cor, peso, saude e como métodos Cachorro, latir, rosnar, mijar, dormir. O método ‘Cachorro’ pode parecer estranho, mas é fundamental na criação de entidades OO: esse seria nosso método Construtor; o Construtor é responsável pela inicialização do objeto criado; adotando nosso exemplo de Cães, seria como ‘parir’ um Cachorro
; Quando inicializamos um objeto, preenchemos suas variáveis e podemos fazer alguns testes já, para que o objeto tenha consistência na sua informação.
Bom… e em PHP, como faríamos?
class Cachorro{
$nome;
$raca;
$cor;
$peso;
$saude;
function __construct($n,$r,$c,$p,$s=100){
$this->nome = $n;
$this->raca = $r;
$this->cor = $c;
$this->peso = floatval($p);
$this->saude = intval($s);
}
function latir(){ /*código que fará o cachorro latir*/ }
function rosnar($outroCachorro){ /*código que fará o cachorro rosnar para outro */ }
function mijar($onde){ /*código que fará o cachorro urinar em algum lugar */ }
function dormir(){ /*código que fará o cachorro dormir e recuperar saúde*/ }
}
Note que este código não declara uma ‘function’ (método) Cachorro, mas sim um __construct. No PHP5 foram acrescentados ao modelo OO alguns métodos mágicos, como é o exemplo de __construct; se usássemos Cachorro não apresentaria erro algum, por razões de compatibilidade com o PHP4 – que aliás apresentaria erro por outro motivo: não colocamos a palavra chave ‘var’ antes dos atributos, algo que não é obrigatório no PHP5. Em vez disso foi adicionada à linguagem noções de visibilidade, que serão estudadas melhor numa possível ‘parte 2′, junto com os conceitos de herança.
Bom… com esta classe declarada, podemos criar cães no nosso sistema:
/* Supomos que a classe cachorro esteja declarada, in-code ou por include/require */
$max = new Cachorro(’Max’,’Vira-lata’,’branco’,10);//inicializo o Cachorro Max, que por sinal vive lá em casa
$tiro = new Cachorro(’Tirolez’,’Yorkshire’,’marrom’,6);//inicializo o Cachorro Tirolez, que também habita por lá
$tiro->mijar(’Casa do Max’);//Tirolez apronta uma das suas na casinha do Max
$max->latir();//Max lógico, late…
$max->rosnar($tiro);//Max rosna ‘furioso’ para o Tirolez…
/* algum tempo depois, eles se cansam… */
$max->dormir();
$tiro->dormir();
Conclusão: $max e $tiro são instâncias da classe Cachorro, ou seja… OBJETOS. Lembra do que falei dos monitores lá em cima? esse que está na sua frente é um objeto da classe Monitor, por exemplo. Classe é o ‘conceito’ do que pode vir a ser um objeto!
Bom, essa é a primeira parte dessa série… tentei fazer uma abordagem diferente, até porque artigos sobre isso você encontra aos milhares… No nosso próximo artigo veremos outro conceito importante em OO: herança.
Até lá
Deixe um comentário
Deixe um comentário
Deixe um comentário

