sexta-feira, 29 de agosto de 2008
Slide sobre Usabilidade
Recebi pelo twitter o link do slide abaixo e achei interessante a forma como ele fala sobre usabilidade, usando o Wordpress e algumas outras ferramentas que conhecemos como referência. Expressa bem a idéia do Getting Real sobre fazer somente o necessário e deixar claro como ele funciona.
quinta-feira, 28 de agosto de 2008
Tracer Bullet
Uma dica simples, mas que é capaz de nos livrar de muitas dores-de-cabeça é o uso de códigos testadores de ambiente, ou como o livro Pragmatic Programmer chama, Tracer Bullet. Se preocupar com o ambiente em que sua aplicação irá rodar é tão importante quanto escolher a framework certa para desenvolvê-la. Precisamos ter certeza sobre quais sãos os módulos suportados pelos servidores envolvidos, diretórios com permissão de escrita, configurações diversas do web server e outros itens que sempre nos preocupamos por último.
Deixar para testar o ambiente de produção com o software que irá ser entregue (ainda que seja a versão alpha) é tão insensato quanto fazer o checkup do seu carro 30 min antes de viajar do Rio para Bahia com toda a família. Se tiver que alterar qualquer coisa, já era.
Tendo esse problema nas mãos, entende-se então a técnica de Tracer Bullet, onde criamos um pequeno código, com o mínimo de linhas necessárias para fazer um teste geral no ambiente. Por exemplo, em uma aplicação qualquer pode-se testar a conexão em um CRUD simples com as bases de dados que serão usadas, o uso de componentes terceirizados, envio de emails, permissões de diretórios e usuários, extensões do web server ou qualquer outro recurso que sua aplicação final poderá usar. Não gaste tempo tentando fazer uma tela bonitinha pra mostrar pro cliente, a função do Tracer Bullet é informar pra equipe de desenvolvimento e infra o que terá que ser alterado antes do primeiro deployment. E como grande parte da infra será testada de forma direta, isso refletirá na redução de testes posteriores ao primeiro processo de deployment.
Deixar para testar o ambiente de produção com o software que irá ser entregue (ainda que seja a versão alpha) é tão insensato quanto fazer o checkup do seu carro 30 min antes de viajar do Rio para Bahia com toda a família. Se tiver que alterar qualquer coisa, já era.
Tendo esse problema nas mãos, entende-se então a técnica de Tracer Bullet, onde criamos um pequeno código, com o mínimo de linhas necessárias para fazer um teste geral no ambiente. Por exemplo, em uma aplicação qualquer pode-se testar a conexão em um CRUD simples com as bases de dados que serão usadas, o uso de componentes terceirizados, envio de emails, permissões de diretórios e usuários, extensões do web server ou qualquer outro recurso que sua aplicação final poderá usar. Não gaste tempo tentando fazer uma tela bonitinha pra mostrar pro cliente, a função do Tracer Bullet é informar pra equipe de desenvolvimento e infra o que terá que ser alterado antes do primeiro deployment. E como grande parte da infra será testada de forma direta, isso refletirá na redução de testes posteriores ao primeiro processo de deployment.
quarta-feira, 27 de agosto de 2008
MySQL Workbench 5.1 Alpha para Linux

Saiu no blog do MySQL Workbench que em menos de 30 dias teremos disponível para Linux a versão alpha da ferramenta de ERM da MySQL. Obviamente, a ferramenta ainda não terá todas as opções da versão estável, mas já terá a principal que é montar o ERM e criar uma DDL a partir do mesmo. Abaixo mais uma tela.
terça-feira, 26 de agosto de 2008
Dica: The Pragmatic Programmer

Vou usar o blog para indicar alguns livros interessantes que tenho tido contato. Embora pareça ser puro "jabá", a idéia é passar pra vocês o que tenho lido e que tem trazido benefícios reais no meu dia-a-dia.
Embora não tenha terminado de ler, tenho gostado muito do The Pragmatic Programmer. É um livro obrigatório, servindo de introdução geral para Refatoração, Source Control, TDD, técnicas DRY, e vários outros recursos que estão de uma forma ou de outra, englobados dentro dos processos ágeis de desenvolvimento.
Além de não ter uma linguagem chata e usar várias analogias interessantes, o livro é realmente prático, traz muitas situações que facilmente encontramos no dia-a-dia.
segunda-feira, 25 de agosto de 2008
PHP para aplicações Enterprise
Esta discursão é antiga, mas foi bem explanada por Ivo Jansch na PHP London Conference 2008. O PHP tem recursos interessantes para o desenvolvimento de aplicações Enterprise, mas parece que a comunidade aqui no Brasil não acordou para isso. Fica a dica de usar os tópicos explanados na apresentação para nortear os estudos!
sexta-feira, 22 de agosto de 2008
Livro gratuito sobre Flex 3

A todos aqueles que se interessarem, a Adobe esta distribuindo gratuitamente uma cópia impressa do Quick Start Guide sobre o Adobe Flex 3. Quem quiser um, basta preencher o formulário aqui.
Falando em Agile 2008

A Caelum vai estar promovendo nos dias 23 (Quinta) e 24 (Sexta) de Outubro o evento "Falando em Agile 2008" sobre metodologias ágeis. Com palestrantes de referência nacional, serão abordados cerca de 12 temas sobre o assunto. O valor está em R$295,00 inscrevendo-se até dia 15/09. Para quem quiser saber mais, clique aqui.
quinta-feira, 21 de agosto de 2008
Usando abas no VIM
Gosto de usar o VIM no dia-a-dia e encontrei um recurso muito útil disponível a partir da versão 7 deste
Basta usar o :tabnew para abrir uma nova aba. Você pode opcionalmente fornecer o arquivo que deseja abrir na nova aba, passando o caminho como parâmetro.
Para navegar entre as abas, basta usar o :tabn n, onde n é a posição da aba, começando do 0. Para avançar ou voltar entre as abas, use o :tabnext e o :tabprev. Existe também o :tabfirst e :tablast, que respectivamente avançam para a primeira ou última aba.
quarta-feira, 20 de agosto de 2008
Mate processos no Windows à la Unix
Sempre tenha o tasklist e o taskkill a mão. O primeiro você usará para pegar os processos abertos e seus PIDs, e com o segundo, você mata o processo.
Um exemplo prático:
Supondo que eu queira matar o Eclipse, a ideia seria a seguinte:
A idéia é simples. Claro que o kill do Unix é mais flexível, mas sejamos mais modestos. No taskkill você também tem o parâmetro -f para forçar o termino do processo e também pode matar o processo pelo nome.
Já tive vezes que o taskkill disse que o processo morreu mais o processo tava mas pra Highlander do que pra Gasparzinho. Vai entender. Não sei também como o taskkill funciona com as árvores de processos. Quem tiver algo mais a compartilhar, sinta-se a vontade.
Eu não vou nem dizer que na universidade eu consegui matar um software de controle de usuário pelo console usando essa dupla tão simpática, até porque seria um estimulo a desordem na instituição.
Um exemplo prático:
C:\Documents and Settings\pmendes\Desktop>tasklist
Image Name PID Session Name Session# Mem Usage
========================= ====== ================ ======== ============
System Idle Process 0 Console 0 28 K
System 4 Console 0 304 K
smss.exe 648 Console 0 392 K
csrss.exe 712 Console 0 4.424 K
winlogon.exe 736 Console 0 1.788 K
services.exe 808 Console 0 3.464 K
lsass.exe 820 Console 0 1.828 K
svchost.exe 1012 Console 0 4.840 K
svchost.exe 1080 Console 0 4.360 K
svchost.exe 1168 Console 0 35.352 K
svchost.exe 1276 Console 0 3.636 K
svchost.exe 1412 Console 0 4.732 K
spoolsv.exe 1568 Console 0 5.284 K
apache.exe 1760 Console 0 21.632 K
avgwdsvc.exe 1812 Console 0 2.888 K
mDNSResponder.exe 1828 Console 0 2.836 K
mysqld-nt.exe 1976 Console 0 5.792 K
NMSAccessU.exe 2020 Console 0 1.828 K
svchost.exe 248 Console 0 4.172 K
apache.exe 2000 Console 0 31.460 K
avgrsx.exe 5276 Console 0 40.048 K
alg.exe 5676 Console 0 3.588 K
explorer.exe 6664 Console 0 34.880 K
ctfmon.exe 7192 Console 0 3.272 K
jusched.exe 7244 Console 0 6.148 K
avgtray.exe 7580 Console 0 6.180 K
Babylon.exe 8152 Console 0 21.432 K
xampp-control.exe 5308 Console 0 3.332 K
jucheck.exe 7564 Console 0 6.492 K
firefox.exe 7912 Console 0 187.140 K
eclipse.exe 6512 Console 0 107.316 K
DAP.exe 6768 Console 0 5.032 K
pidgin.exe 6296 Console 0 5.332 K
cmd.exe 8036 Console 0 2.732 K
wmiprvse.exe 6788 Console 0 6.044 K
tasklist.exe 6272 Console 0 4.516 K
Supondo que eu queira matar o Eclipse, a ideia seria a seguinte:
C:\Documents and Settings\pmendes\Desktop>taskkill /PID 6512
SUCCESS: The process with PID 6512 has been terminated.
A idéia é simples. Claro que o kill do Unix é mais flexível, mas sejamos mais modestos. No taskkill você também tem o parâmetro -f para forçar o termino do processo e também pode matar o processo pelo nome.
Já tive vezes que o taskkill disse que o processo morreu mais o processo tava mas pra Highlander do que pra Gasparzinho. Vai entender. Não sei também como o taskkill funciona com as árvores de processos. Quem tiver algo mais a compartilhar, sinta-se a vontade.
Eu não vou nem dizer que na universidade eu consegui matar um software de controle de usuário pelo console usando essa dupla tão simpática, até porque seria um estimulo a desordem na instituição.
terça-feira, 19 de agosto de 2008
Aspect Oriented Programming e PHP
Chegando com mais um slide do Sebastian Bergman, o criado do PHPUnit, desta vez o rapaz dá uma pequena palinha sobre AOP, que é uma técnica complementar a OOP.
Para quem esta estudando sobre este paradigma, deixo também um link da UFRN (desta vez em português) sobre conceitos gerais desde paradigma.
Apresentação AOP
segunda-feira, 18 de agosto de 2008
Versão 2.0 do PDT a caminho
Usado por muitos desenvolvedores, o plugin PDT torna o Eclipse uma das IDEs mais usadas para o desenvolvimento de aplicações PHP, tanto pelo suporte a linguagem quanto pelo fato de ser gratuita.
Desde o final do ano passado a equipe de desenvolvimento do PDT está preparando a versão 2.0 da ferramenta, que virá com um série de novidades, entre elas as features do PHP 5.3.
A Release Candidate 2 da ferramenta foi lançada ontem e a versão final consta para o dia 15 de Setembro. O Work Plan deles é o seguinte:
Milestone 1:
PHP Model Infrastructure
Mark Occurrences
Type Hierarchy View
Override Method Annotation
New PHP Explorer capabilities
Extended Open Type
Milestone 2:
Bug Squash
Code Templates
Code Assist for Dynamic Variables
Release Candidate 1+2:
Bug Squash
Se você não conhece o projeto, clique aqui.
sábado, 16 de agosto de 2008
Congresso Nacional de PHP

Embora não conseguirei ir, deixo registrado no blog para quem ainda não sabe: Nos dias 18 e 19 de Outubro vai acontecer em São Paulo o Congresso Nacional de PHP. Na ocasião, será trazido Andrei Zmievski, um dos desenvolvedores do core do PHP e o paraguaio César Rodas, vencedor do PHP Programming Innovation Award de 2007 ( do PHPClasses.org) e destaque do Google Summer of Code.
Se você vai poder ir e acredita que pode contribuir com alguma palestra, as inscrições para os palestrantes já começou. Para maiores informações acesse o site abaixo:
CONAPHP
sexta-feira, 15 de agosto de 2008
PDO - Conceitos Fundamentais
Com a chegada da quinta versão do PHP (na verdade na 5.1), nasceu uma poderosa ferramenta que ainda hoje pouca gente já parou pra estudar: o PHP Data Objects ou PDO.
Pra inicio de conversa, o PDO é uma camada de acesso a dados que como o php.net promete, "indiferente do banco de dados que esteja usando, você poderá usar as mesmas funções para executar queries ou pegar dados". Desenvolvida pelo Wez Furlong - um desenvolvedor do core PHP que até tenho na minha lista de links no lado esquerdo, o PDO realmente cumpre o que promete em unificar as interfaces de acesso a dados. Ele foi escrito em C e segundo alguns evangelistas da extensão, não perde em nada em desempenho para as extensões tradicionais.
Ainda hoje temos a opção de usar no PHP os antigos drivers especificos para cada DB, mas isso já tem caído em desuso. Vale repetir o que a Zend comentou, que o PDO não é uma abstração do que já tinha, ele é a reescrita dos drivers fornecendo uma mesma interface (na maioria das vezes) para o desenvolvedor. Pra quem usa o Pear (se você não conhece deveria) talvez já tenha se esbarrado no PearDB, que esta sim é uma abstração. Mas o PDO não.
O PHP Data Objects suporta nativamente as seguintes extensões: PostgreSQL, MySQL (3,4,5), Firebird, Sybase, Informix, Oracle, ODBC, DBLIB, IBM DB2, SQLite (2,3), MSSQL e FreeTDS.
Para usar o PDO você terá que ter no mínimo duas extensões : a do core, que geralmente já vem instalada por default, e a do banco desejado, como por exemplo o pdo_mysql.
O forma mais fácil para instalar os PDO drivers em uma versão do PHP previamente instalado é através do PHP Extension Comunity Library. Uma vez tendo o PECL instalado, basta digitar pecl install <nome_do_driver> e depois atualizar o php.ini adicionando na parte de extensões o driver instalado.
Vou comentar só sobre como conectar ao banco de dados e criar um handle para a conexão, pois basicamente é isso que difere de um bd para o outro - ao final, vou deixar alguns links com melhores exemplos.
Viu como é simples? E com os outros drivers o procedimento é bem parecido. Vale ressaltar que por dicas da própria Zend, que o processo de criação de um handle sempre deve estar dentro de um try/catch, para que informações do servidor não sejam lançadas para o usuário. Fique atento!
Para dar um close na conexão basta você atribuir qualquer valor ao handle, como null por exemplo.
O PDO veio para substituir de vez as antigas formas de acesso a dados no PHP. Existe um número generoso de artigos sobre essa ferramenta, e para não ficar recriando a roda, deixo abaixo alguns links interessantes de fontes que já publicaram algumas receitas de bolo:
Manual Oficial em Português
DevShed - Using PDO Objects in PHP5
Post anterior com slides do criador do PDO
HTMLStaff - PDO: Bancos de dados no PHP 5
Pra inicio de conversa, o PDO é uma camada de acesso a dados que como o php.net promete, "indiferente do banco de dados que esteja usando, você poderá usar as mesmas funções para executar queries ou pegar dados". Desenvolvida pelo Wez Furlong - um desenvolvedor do core PHP que até tenho na minha lista de links no lado esquerdo, o PDO realmente cumpre o que promete em unificar as interfaces de acesso a dados. Ele foi escrito em C e segundo alguns evangelistas da extensão, não perde em nada em desempenho para as extensões tradicionais.
Ainda hoje temos a opção de usar no PHP os antigos drivers especificos para cada DB, mas isso já tem caído em desuso. Vale repetir o que a Zend comentou, que o PDO não é uma abstração do que já tinha, ele é a reescrita dos drivers fornecendo uma mesma interface (na maioria das vezes) para o desenvolvedor. Pra quem usa o Pear (se você não conhece deveria) talvez já tenha se esbarrado no PearDB, que esta sim é uma abstração. Mas o PDO não.
Composição e Bases Suportadas
O PHP Data Objects suporta nativamente as seguintes extensões: PostgreSQL, MySQL (3,4,5), Firebird, Sybase, Informix, Oracle, ODBC, DBLIB, IBM DB2, SQLite (2,3), MSSQL e FreeTDS.
Para usar o PDO você terá que ter no mínimo duas extensões : a do core, que geralmente já vem instalada por default, e a do banco desejado, como por exemplo o pdo_mysql.
O forma mais fácil para instalar os PDO drivers em uma versão do PHP previamente instalado é através do PHP Extension Comunity Library. Uma vez tendo o PECL instalado, basta digitar pecl install <nome_do_driver> e depois atualizar o php.ini adicionando na parte de extensões o driver instalado.
Conectando ao bd
Vou comentar só sobre como conectar ao banco de dados e criar um handle para a conexão, pois basicamente é isso que difere de um bd para o outro - ao final, vou deixar alguns links com melhores exemplos.
// Criando o handle de uma conexão com o PostgreSQL
$db = new PDO("pgsql:dbname=MEU_DB;host=localhost", "USUARIO", "SENHA" );
// Criando o handle de uma conexão com o MySQL
$db = new PDO("mysql:dbname=MEU_DB;host=localhost", "USUARIO", "SENHA" );
Viu como é simples? E com os outros drivers o procedimento é bem parecido. Vale ressaltar que por dicas da própria Zend, que o processo de criação de um handle sempre deve estar dentro de um try/catch, para que informações do servidor não sejam lançadas para o usuário. Fique atento!
Para dar um close na conexão basta você atribuir qualquer valor ao handle, como null por exemplo.
Conclusão
O PDO veio para substituir de vez as antigas formas de acesso a dados no PHP. Existe um número generoso de artigos sobre essa ferramenta, e para não ficar recriando a roda, deixo abaixo alguns links interessantes de fontes que já publicaram algumas receitas de bolo:
Manual Oficial em Português
DevShed - Using PDO Objects in PHP5
Post anterior com slides do criador do PDO
HTMLStaff - PDO: Bancos de dados no PHP 5
Code Igniter - Code Generator
Tenho estudado ultimamente sobre o CakePHP e de cara já encontrei uma ferramenta muito útil, o bake que é um PHP CLI que permite desde a criação do projeto a scripts de forma automatica. A idéia é até simples, mas na prática ajuda a acelerar o processo de desenvolvimento e manter organizado.
Como conheço o Code Igniter faz um tempo e sei que ele não tem oficialmente uma ferramenta parecida, procurei na internet e achei algoque nem se compara criado por um Brazuca. Não é uma ferramenta "formal" e pelo visto nem pretende ser um grande projeto, mas já dá alguma facilidade. A página da ferramenta é essa. Só roda em ambientes *nix.
Como conheço o Code Igniter faz um tempo e sei que ele não tem oficialmente uma ferramenta parecida, procurei na internet e achei algo
quinta-feira, 14 de agosto de 2008
Dakota Films no ar!

Fizemos na ultima quarta-feira (13/08) o deployment do novo site da Dakota Films, uma produtora de filmes de médio porte na Califórnia. Foi um projeto pequeno e rápido, onde tive a oportunidade de atuar como lider (que também meteu a mão na massa) em uma equipe com dois desenvolvedores e um designer. Além do sistema público, o projeto também consistiu em um pequeno sistema interno para controle de mídias.
Usamos PMP como metodologia, que faz parte das metodologias mais tradicionais de desenvolvimento, em contraste com as metodologias ágeis. Foi bom conhecer algo novo, embora ainda penso que os processos ágeis são os ideais para muitas situações.
PHP, segundo Rasmus Lerdorf
Saiu na IT Conversations no ano passado uma entrevista com Rasmus Lerdof, um dos criadores do PHP. Eles decidiram publicar o audio e achei bacana a conversa.
A entrevista narra a história do PHP, sua busca para estar entre as linguagens modernas, performace, pontos de segurança e também sobre alguns recursos que a API do Yahoo! disponibliza através de code snippets em PHP.
A entrevista narra a história do PHP, sua busca para estar entre as linguagens modernas, performace, pontos de segurança e também sobre alguns recursos que a API do Yahoo! disponibliza através de code snippets em PHP.
Ranking TIOBE - Agosto 2008
Saiu o ranking de agosto no TIOBE sobre as linguagens de programação mais populares. Este ranking é gerado com base em pesquisas feitas no Google, Yahoo!, MSN e Youtube. Abaixo um print da tabela:

Vale lembrar que este ranking não server para indicarmos quais linguagens são melhores que outras, mas somente para termos alguma noção sobre suas popularidades.

Vale lembrar que este ranking não server para indicarmos quais linguagens são melhores que outras, mas somente para termos alguma noção sobre suas popularidades.
quarta-feira, 13 de agosto de 2008
Palestra de Modelagem Ágil
Mais uma da Improve IT na TDC. Desta vez quem palestrou foi o Manoel Pimentel falando sobre Modelagem Ágil.
segunda-feira, 11 de agosto de 2008
Ignore os detalhes logo no começo
Em um pequeno debate na 3Jane sobre quais métodos utilizaríamos para o desenvolvimento de um novo projeto, chegamos "sozinhos" a conclusão que os detalhes na maioria das vezes vem por último - tese esta reforçada pelo Getting Real. Retirei o trecho abaixo do livro :
Óbvio que não é porque descobrimos o martelo, que tudo será prego. Mas mesmo assim sempre tenha essa tática na manga!
Trabalhe do grande para o pequeno
Somos loucos por detalhes.
O espaço entre objetos
O espaço perfeito entre linhas
A cor perfeita
As palavras perfeitas
Quatro linhas de código em vez de sete
90% vs 89%
760px vs 750px
$39/mês vs $49/mês
Sucesso e satisfação estão nos detalhes
Entretanto, o sucesso não é a única coisa que encontrará nos detalhes. Também encontrará estagnação, desacordo, reuniões e atrasos. Essas coisas podem acabar com a moral e diminuir suas chances de sucesso.
Quantas vezes se encontrou travado em um único design ou elemento de código por um dia inteiro? Quantas vezes se deu conta de que o progresso que fez hoje não foi progresso real? Isso acontece quando você foca nos detalhes cedo demais no processo. Há tempo suficiente para ser um perfeccionista. Apenas faça isso mais tarde.
Não se preocupe com o tamanho da fonte do cabeçalho na primeira semana. Você não precisa empregar o tom perfeito de verde na segunda semana. Não precisa mover em três pixels o botão de “submeter” na terceira semana. Apenas coloque as coisas na página por enquanto. Então use. Garanta que funciona. Mais tarde você pode ajustar e aperfeiçoar.
Os detalhes se revelam ao se usar o que está construindo. Você verá o que precisa de mais atenção. Sentirá o que está faltando. Saberá quais crateras pavimentar porque ficará sempre caindo nelas. É quando precisa prestar atenção, e não antes.
Óbvio que não é porque descobrimos o martelo, que tudo será prego. Mas mesmo assim sempre tenha essa tática na manga!
PHP4 : Game over!
A última quinta feira foi marcada pelo fim do suporte dado pela Zend ao PHP4. Isso significa que Derick Rethans e a equipe de desenvolvedores na Califórnia irá dedicar seus esforços no PHP6.
A última subversão estável do PHP4 foi lançada em 22 de Março deste ano - ao todo, o PHP4 sobreviveu três anos. É impressionante como ainda tem gente que usa aquilo - e é feliz. Aos caros amigos que relutam a mudar para a nova versão, agora terão um incentivo a mais. Embora eu odeie a versão 4 por causa dos benefícios da versão 5, foi através da nossa recém aposentada que o PHP se difundiu como água pelos hosts da vida.
Por fim, deixo as palavras do Derick, o gerente de desenvolvimento da Zend:
A última subversão estável do PHP4 foi lançada em 22 de Março deste ano - ao todo, o PHP4 sobreviveu três anos. É impressionante como ainda tem gente que usa aquilo - e é feliz. Aos caros amigos que relutam a mudar para a nova versão, agora terão um incentivo a mais. Embora eu odeie a versão 4 por causa dos benefícios da versão 5, foi através da nossa recém aposentada que o PHP se difundiu como água pelos hosts da vida.
Por fim, deixo as palavras do Derick, o gerente de desenvolvimento da Zend:
So please die PHP 4 - and quickly. Today, August 7th, 2008 is the last release of PHP 4 - PHP 4.4.9. After today there will be no more PHP 4 releases, regardless of whether there are security issues found in PHP 4. It's time to upgrade now.
sexta-feira, 8 de agosto de 2008
Extreme Programming
Eu andei compartilhando no meu Google Reader um post do blog da Improve IT, onde Vinícius Teles promove uma excelente palestra sobre Extreme Programming na The Developers Conference 2008 e compartilha algumas opniões extremamente relevantes. O rapaz mandou muito bem.
Getting Real em português

Após algumas indicações parei para ler o Getting Real, e caramba ele é sensacional. Leitura obrigatória, não comece a desenvolver novamente sem ter lido o livreto online.
Getting Real
quinta-feira, 7 de agosto de 2008
Design Patterns no PHP - Parte II.I: Criando Classes - Métodos e atributos estáticos
Continuando o estudo relacionando ao modelo de classes e sua aplicação no PHP, vamos ver hoje métodos e atributos estáticos. Aperte os cintos!
Para recapitular, no primeiro post eu falei sobre conceitos universais relacionados a POO e no segundo post falei sobre a criação de classes. Em breve vou falar sobre herança, modificadores de acesso, polimorfismo e métodos mágicos. Acabando isso tudo, poderei então dar partida em coisas mais interessantes e menos abstratas.
Ao falar sobre classes, eu dei uma pincelada no $this, que é uma forma de nos referenciarmos ao próprio objeto, usando um método ou atributo do mesmo. Usando esta mentalidade, para que $this realmente entre em ação, precisamos fazer com que a classe vire um objeto, ou seja, precisamos instanciar a classe. Vou usar um exemplo parecido do ultimo post para exemplificar melhor:
No exemplo acima estamos usando o atributo nomeDoUsuario no echo da função imprime. Logo, ao criarmos os dois objetos abaixo ($meuOlaMundo e $seuOlaMundo) cada um deles terá seu respectivo valor do atributo nomeDoUsuario impresso na chamada do método imprime(). Executando o código acima no php temos as seguintes respostas:
Como pode ser visto, cada objeto tem seu atributo próprio, ainda que sejam objetos da mesma classe, são objetos diferentes. O atributo nomeDoUsuario das duas classes apontam para áreas diferentes de memória, pois são de objetos difentes.
Entendendo esse principio você já pode partir para um passo a frente, e entender a palavra-chave Static. Ela diz que o método ou atributo pertencem a classe e não ao objeto. Isso quer dizer que por mais que você tenha n objetos diferentes da mesma classe, todos partilham dos mesmos atributos ou métodos estáticos. Por exemplo, o atributo estático alterado em um objeto, terá seu valor propagado em todos os objetos da mesma classe. Vamos ao exemplo anterior usando agora um atributo estático:
Como você pode notar no exemplo anterior, já temos alguns conceitos novos. O primeiro deles é o self usando no echo da função imprime(). Ele é a forma correta de nos referenciarmos a própria classe estaticamente. Mas tarde, quando chegarmos nos modificadores de acesso, entenderemos que podemos nos relacionar estaticamente com nossas classes em meio a herança. Logo após no código, ao invés de usarmos -> usamos os dois "dois pontos" (o famoso Paamayim Nekudotayim) - que é outra regra para os atributos e métodos estáticos.
Outra característica interessante é que como os atributos ou métodos estáticos não estão ligados aos objetos e sim as classes, eles são usados diretamente na chamada da classe e não nos objetos. Na linha 18 do script anterior você verá isso. Por fim, instancio dois objetos da classe OlaMundo e imprimo o valor do atributo estático dos dois. Caso no meio do script o valor deste atributo estático fosse alterado, essa mudança automaticamente seria refletida nos dois objetos. A saída do script anterior seria algo parecido com:
Pare entendermos o conceito prático dos atributos estáticos é fácil, o que é um pouco mais complexo é entendermos o conceito prático dos métodos estáticos. A melhor definição é a das cartilhas: "os métodos estáticos tem grande utilidade quando você não precisa trabalhar necessariamente em uma instância de uma classe, mas na classe em si". Sendo mais hands on, você utiliza métodos estáticos quando não precisa se relacionar nenhum atributo ou método do próprio objeto - a não ser que sejam estes estáticos também. No ultimo exemplo do post, vamos criar um método estático que nos permita criar instâncias de uma classe automaticamente:
O uso de um método estático segue a mesma idéia do atributo quanto a sua sintaxe. Se você necessitar usar o método dentro da própria classe, terá que usar o self:: também.
A idéia básica dos métodos e atributos estáticos é essa. Leia e tente fazer algo mais útil que os meus exemplos acima. Qualquer dúvida, envie como comentário que respondo no blog.
Para recapitular, no primeiro post eu falei sobre conceitos universais relacionados a POO e no segundo post falei sobre a criação de classes. Em breve vou falar sobre herança, modificadores de acesso, polimorfismo e métodos mágicos. Acabando isso tudo, poderei então dar partida em coisas mais interessantes e menos abstratas.
Métodos e atributos estáticos
Ao falar sobre classes, eu dei uma pincelada no $this, que é uma forma de nos referenciarmos ao próprio objeto, usando um método ou atributo do mesmo. Usando esta mentalidade, para que $this realmente entre em ação, precisamos fazer com que a classe vire um objeto, ou seja, precisamos instanciar a classe. Vou usar um exemplo parecido do ultimo post para exemplificar melhor:
No exemplo acima estamos usando o atributo nomeDoUsuario no echo da função imprime. Logo, ao criarmos os dois objetos abaixo ($meuOlaMundo e $seuOlaMundo) cada um deles terá seu respectivo valor do atributo nomeDoUsuario impresso na chamada do método imprime(). Executando o código acima no php temos as seguintes respostas:
C:\xampp\htdocs\test>php olamundo.php
Ola Mundo e ola Pedro Mendes
Ola Mundo e ola usuario visitante
Como pode ser visto, cada objeto tem seu atributo próprio, ainda que sejam objetos da mesma classe, são objetos diferentes. O atributo nomeDoUsuario das duas classes apontam para áreas diferentes de memória, pois são de objetos difentes.
Entendendo esse principio você já pode partir para um passo a frente, e entender a palavra-chave Static. Ela diz que o método ou atributo pertencem a classe e não ao objeto. Isso quer dizer que por mais que você tenha n objetos diferentes da mesma classe, todos partilham dos mesmos atributos ou métodos estáticos. Por exemplo, o atributo estático alterado em um objeto, terá seu valor propagado em todos os objetos da mesma classe. Vamos ao exemplo anterior usando agora um atributo estático:
Como você pode notar no exemplo anterior, já temos alguns conceitos novos. O primeiro deles é o self usando no echo da função imprime(). Ele é a forma correta de nos referenciarmos a própria classe estaticamente. Mas tarde, quando chegarmos nos modificadores de acesso, entenderemos que podemos nos relacionar estaticamente com nossas classes em meio a herança. Logo após no código, ao invés de usarmos -> usamos os dois "dois pontos" (o famoso Paamayim Nekudotayim) - que é outra regra para os atributos e métodos estáticos.
Outra característica interessante é que como os atributos ou métodos estáticos não estão ligados aos objetos e sim as classes, eles são usados diretamente na chamada da classe e não nos objetos. Na linha 18 do script anterior você verá isso. Por fim, instancio dois objetos da classe OlaMundo e imprimo o valor do atributo estático dos dois. Caso no meio do script o valor deste atributo estático fosse alterado, essa mudança automaticamente seria refletida nos dois objetos. A saída do script anterior seria algo parecido com:
C:\xampp\htdocs\test>php olamundo.php
Ola Mundo e ola Pedro Mendes
Ola Mundo e ola Pedro Mendes
Pare entendermos o conceito prático dos atributos estáticos é fácil, o que é um pouco mais complexo é entendermos o conceito prático dos métodos estáticos. A melhor definição é a das cartilhas: "os métodos estáticos tem grande utilidade quando você não precisa trabalhar necessariamente em uma instância de uma classe, mas na classe em si". Sendo mais hands on, você utiliza métodos estáticos quando não precisa se relacionar nenhum atributo ou método do próprio objeto - a não ser que sejam estes estáticos também. No ultimo exemplo do post, vamos criar um método estático que nos permita criar instâncias de uma classe automaticamente:
O uso de um método estático segue a mesma idéia do atributo quanto a sua sintaxe. Se você necessitar usar o método dentro da própria classe, terá que usar o self:: também.
A idéia básica dos métodos e atributos estáticos é essa. Leia e tente fazer algo mais útil que os meus exemplos acima. Qualquer dúvida, envie como comentário que respondo no blog.
quarta-feira, 6 de agosto de 2008
Teste o desempenho do seu site com o ApacheBench
Descobri recentemente uma ferramenta antiga que já vem junto com o Apache é totalmente free, o ApacheBench. Como o próprio nome já insinua, essa ferramenta é usada para fazer um benchmark de um determinado endereço que esteja rodando no seu Apache, através da simulação de solicitações de clientes para o httpd.
Se você instalou o Apache como um serviço, é só seguir o exemplo abaixo via prompt:
No exemplo acima, a opção -n especifica q quantidade de solicitações e a opção -c a quantidade de clientes simultâneos. O ultimo parâmetro obviamente é o endereço a ser testado. Fiz um teste rápido aqui na 3Jane usando o xampp na minha máquina local, e o resultado foi o seguinte:
Óbvio que os testes feito pelo ApacheBench não são realísticos, tendo em vista que em uma aplicação on-line temos variantes como conexões discadas, bots, servidores mal compartilhados (em caso de shared servers) etc, mas, já é um corrimão em que podemos nos apoiar. Existem outras ferramentas como Siege e até mesmo o Zend Sudio que nos fornecem relatórios interessantes, mas achei o ApacheBench cômodo. Mas tarde converso com vocês sobre outras formas de testar desempenho. Para maiores informações, visite a página do manual do ApacheBench.
Se você instalou o Apache como um serviço, é só seguir o exemplo abaixo via prompt:
ab -n 10000 -c 10 http://localhost/test
No exemplo acima, a opção -n especifica q quantidade de solicitações e a opção -c a quantidade de clientes simultâneos. O ultimo parâmetro obviamente é o endereço a ser testado. Fiz um teste rápido aqui na 3Jane usando o xampp na minha máquina local, e o resultado foi o seguinte:
C:\xampp\apache\bin>ab.exe -n 10000 -c 10 http://localhost/test
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Finished 10000 requests
Server Software: Apache/2.2.8
Server Hostname: localhost
Server Port: 80
Document Path: /test
Document Length: 368 bytes
Concurrency Level: 10
Time taken for tests: 28.000 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Non-2xx responses: 10000
Total transferred: 6530000 bytes
HTML transferred: 3680000 bytes
Requests per second: 357.14 [#/sec] (mean)
Time per request: 28.000 [ms] (mean)
Time per request: 2.800 [ms] (mean, across all concurrent requests)
Transfer rate: 227.71 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 2.0 0 15
Processing: 0 27 184.4 15 2312
Waiting: 0 27 184.4 15 2312
Total: 0 27 184.4 15 2312
Percentage of the requests served within a certain time (ms)
50% 15
66% 15
75% 15
80% 15
90% 15
95% 15
98% 31
99% 46
100% 2312 (longest request)
Óbvio que os testes feito pelo ApacheBench não são realísticos, tendo em vista que em uma aplicação on-line temos variantes como conexões discadas, bots, servidores mal compartilhados (em caso de shared servers) etc, mas, já é um corrimão em que podemos nos apoiar. Existem outras ferramentas como Siege e até mesmo o Zend Sudio que nos fornecem relatórios interessantes, mas achei o ApacheBench cômodo. Mas tarde converso com vocês sobre outras formas de testar desempenho. Para maiores informações, visite a página do manual do ApacheBench.
terça-feira, 5 de agosto de 2008
Palestra Gratuita de SCRUM no Rio de Janeiro
A Dextra sistemas acaba de anunciar que vai trazer um workshop sobre "Comercialização de Projetos de Software sob medida e Metodologias Ágeis", com ênfase em SCRUM. O ciclo de palestras ocorrerá no dia 19 de Agosto, no hotel Guanabara ( av. Presidente Vargas, próximo a Candelária). Para saber mais, acesse o link abaixo:
Dextra Sistemas - Workshop Scrum
PHP 5.3 - 30% mais rápido ?
É só a Zend lançar o Alpha 1 do PHP 5.3 que já começam as especulações. Dentre as que mais me chamam a atenção é que a nova subversão do PHP5 poderá ser até 30% mais rápida que as demais devido a improvements internos - e isso sem termos que trocar uma linha de código de nossos sistemas (rodando no PHP 5, óbvio). Isso que chamo de refatoração!
Um benchmark com frameworks feito por Dmitry Stogov e enviado ao php.internals (panelinha de desenvolvedores e testers do core) apresentou os seguintes numeros:
Drupal 20% + rápido
Qdig 2% + rápido
typo3 30% + rápido
wordpress 15% + rápido
xoops 10% + rápido
Interessante não ?
Um benchmark com frameworks feito por Dmitry Stogov e enviado ao php.internals (panelinha de desenvolvedores e testers do core) apresentou os seguintes numeros:
Drupal 20% + rápido
Qdig 2% + rápido
typo3 30% + rápido
wordpress 15% + rápido
xoops 10% + rápido
Interessante não ?
segunda-feira, 4 de agosto de 2008
XML com PHP5
Tratando-se de PHP, existem basicamente três mecanismos para tratarmos com XML : com o Simple API for XML (SAX), o PHP5 Document Object Model (DOM) e a biblioteca SimpleXML. Entendo que já existem diversos sites explicando como utilizar cada uma das três técnicas, mas procurando na web eu não achei nenhum site que liste rápidamente seus ônus e bônus, logo não fiz um passo-a-passo mas sim uma resenha das extensões.
Antes de tudo : entendendo o conceito de parsing de um XML
Todos os mecanismos que trabalham com XML no PHP obrigatoriamente usam o conceito de parsing, onde é feita uma análise da estrutura do documento para então começar desencadear ações para nos permitir trabalhar com o mesmo. Também conhecida na ciência da computação como Análise Sintática, por mais que o parsing aconteça por trás dos bastidores e na maioria das vezes nem sequer notemos, ele sempre irá checar se o documento fornecido é um documento XML válido. Alguns links interessantes:
W3Schools : Well formated XML
Wikipedia: Valid XML
Wikipedia (PT) - Análise Sintática
PHP SAX
O SAX trabalha sempre com o lançamento de eventos que estouram de acordo com os elementos encontrados no XML - essencialmente sendo esses as tags de abertura e fechamento, mas podendo ser definidos outros padrões. Para trabalhar com SAX, você basicamente cria um parser para o XML com a função chamada xml_parser_create e depois começa a usar o handler criado sentando suas funções que estourarão de acordo com os elementos encontrados. Sendo sincero, a idéia até é legal, mas só vale a pena se realmente manipular cada (ou a maioria) dos elementos do seu XML. O próprio Andi Gutmans confessa que dá muito trabalho usar o SAX.
Quanto ao seu desempenho, é satisfatório para aplicações online de grande porte. Dizem os evangelistas do PHP5 que nesta última versão do PHP o SAX teve um improvement de desempenho devido a troca do mecanismo de base para rotinas com XML, que antigamente era uma toolkit em C chamada Expat e agora é a criada pela galera do Gnome, a chamada libxml2. Eu não vi nenhum benchmark na web falando sobre isso.
Links interessantes sobre SAX:
PHP.NET - XML parser options
InformIT - SAX and PHP
PHP DOM
Já o PHP DOM, por sua vez, veio com o PHP trazendo algumas facilidades. O Zend PHP 5 Certification Study Guide chega a dizer que ele foi totalmente reescrito. Mas fique atento: o próprio Andi Gutmans no livro PHP 5 Power Programing canta a pedra de que a extensão DOM come memória feito um cão. Ele diz na p. 147 :
"Usar o método DOM é muito mais fácil ( em relação ao Sax - simple API for XML), mas paga-se um preço - uso de memória. Embora isso não seja perceptível em um pequeno exemplo, definitivamente é perceptível quando você faz o parsing de um arquivo XML de 20mb com o método DOM. Ao invés de iniciar eventos para cada elemento de arquivo XML, o DOM cria um árvore na memória contendo o seu arquivo XML."
Por isso fique atento quando utilizar o DOM, pois se você carregar um XML robusto para cada usuário que se loga no seu site, por exemplo, você poderá ter um sério problema. Ainda sim o DOM parece ser a técnica mas completa para fazer o parsing do seu documento XML. Quando você tem a extensão DOM já compilada com seu PHP, basta você instanciar a classe DomDocument - que já vem junto com a extensão, e usar o método load() caso tenha que ler um arquivo xml do seu HD. Ele também suporta o uso de XPath (linguagem de consulta para XML). Por último, destaco também que o DOM e o SimpleXML (próxima técnica) tem uma boa comunicação através dos seus handles, podendo ser feita a conversão de um handle de um tipo para outro com grande facilidade.
Links interessantes sobre DOM:
PHP.NET - Document Object Model
W3Schools - PHP XML DOM
SimpleXML
Por última (e também mais usada) existe a extensão SimpleXML, que oferece uma ampla variedade de opções para operações com XML. Embora tenha algumas limitações, na maioria dos casos a SimpleXML é a mais indicada - devido sua simplicidade e bom desempenho. Ler, comparar e substituir nós e retirar textos de um XML com o SimpleXML é rápido e indolor, ao contrário das duas últimas extensões.
Nas primeiras subversões do PHP5, o SimpleXML não tinha o recurso de escrita de um XML, somente leitura e busca. Mas essa limitação já foi sanada embora outra limitação ainda exista: a de remoção de atributos de um nó. Ou você retira o nó e insere outro já sem o atributo desejado, ou você exporta seu handler do SimpleXML para o DOM, retira o atributo e retorna para o SimpleXML.
Links interessantes sobre o SimpleXML:
PHP.NET - SimpleXML
W3Schools - PHP SimpleXML
O'Reilly On Lamp - Using PHP5 SimpleXML
Dei essa pincelada nas formas mais comuns de lidar com XML no PHP mas saiba que existem outras formas menos convencionais - e bem mais rústicas, como fazer o parser de um XML com expressões regulares. Vamos ver o que o PHP6 pode vir a acrescentar sobre esse aspecto. Vlw !
sexta-feira, 1 de agosto de 2008
3Jane wants you!

Boa notícia pessoal: 3Jane is hiring! Para quem não conhece, a 3Jane é uma empresa americana com escritório no Centro do Rio de Janeiro, e esta com uma vaga aberta para analista programador web, com experiência comprovada de no mínimo 6 meses em desenvolvimento de projetos em PHP e MySQL. O candidato deve ter o nível superior completo ou em andamento na área de TI (Informática, Sistemas de Informação, Ciência da Computação, Análise de Sistemas e correlatos).
Conhecimentos exigidos são:
- PHP e POO (nível intermediário);
- Javascript (nível intermediário);
- Html, Xhtml e CSS.
- MySQL (Nível intermediário);
- Inglês, pelo menos técnico;
Já dou a dica que são diferenciais:
- Ter tido contato com algum framework PHP e Javascript;
- Estar atualizado com os padrões web;
- Participar de comunidades, fóruns, listas, etc sobre desenvolvimento para web.
- Como o carinha da Globo diz: ler bons livros!
A empresa oferece:
- Salário: a/c;
- Contratação permanente com possibilidade de ascensão.
Pra quem estive interessado, enviar CV atualizado e com pretensão salarial para andreia@3jane.com. Haverá um teste teórico e prático.
Assinar:
Comentários (Atom)