POG Nunca Mais!Técnicas e macetes para o desenvolvimento em PHP
também para MySQL
4º SOLISC - Florianópolis/SCNovembro - 2009
veremos...O que é POG
Exemplos de POG
Causas e causadores de POG’s
Mantendo a POG longe de seus sistemas
Programando em PHP sem POG
Ferramentas contra POG
Dicas contra POG (inclui técnicas Chuck Norris)
PalestrantePaulino Michelazzo
Diretor da Fábrica Livre, empresa especializada no desenvolvimento não-POG com ferramentas de gestão livres (Drupal, Joomla e Magento) e PHP
O que é POG?
Programação Orientada a Gambiarras
Definição de Gambiarra
lâmpada instalada na extremidade dum comprido cabo elétrico para poder ser utilizada numa área
relativamente grande*
*Novo Dicionário Aurélio da Língua Portuguesa, p. 961
Definição de gambiarra(coloquial)
aquilo que é de difícil concepção, de inesperada execução para tornar fácil o uso de algo que sequer
deveria existir*
* http://desciclopedia.org/wiki/Pog
ATP
Adaptação Técnica Profissional
Exemplos de POG’s
disco -99???
F1 sem teclado?
????
erro com sucesso!
equipe eu, mim e nós dois!
Causas e Causadores da POG
Algumas causasTempos escassos
do jeito que está, vai...
Falta de documentação
levantamentos, processos
Erros de projetos
Prazos, mão de obra, ferramentas
Mudanças de última hora
esquecemos uma feature....
Alguns causadores
Clientes
não sabem o que querem e como querem
Gerentes de Projetos
pouca sinergia com o cliente (retorne ao 1)
“Sofinhos”
acham que sabem, dizem que sabem mas...
Mantendo a POG longe de seu sistema
Programando em PHP sem POG
Não use “short tag's”<?=$var?><?php echo $var?>
Facilite a leitura de código<?if($var==1): ... endif?><?phpif($var == 1){
....}?>
Programando em PHP sem POG
use variáveis “humanas”
$ValorEntrada = 1;$ValorRetorno = 2;$ValorSaida = 3;
$xyz = 1;$fdp = 2;$pqp = 3;
Programando em PHP sem POG
Indente seu código e salve vidas
<?php $var = 1;if($var==1){
for($x=0;$x<100;$x++){echo $x;
}}
?>
<?php $var = 1;if($var==1){for($x=0;$x<100;$x++){echo $x;}}?>
Programando em PHP sem POG
Comente seu códigodefine('SIMPLEPIE_TYPE_RSS_092', 8);define('SIMPLEPIE_TYPE_RSS_093', 16);define('SIMPLEPIE_TYPE_RSS_094', 32);define('SIMPLEPIE_TYPE_RSS_10', 64);define('SIMPLEPIE_TYPE_RSS_20', 128);
????
Programando em PHP sem POG
Comente seu código
// RSS 0.92
define('SIMPLEPIE_TYPE_RSS_092', 8);
// RSS 0.93
define('SIMPLEPIE_TYPE_RSS_093', 16);
// RSS 0.94
define('SIMPLEPIE_TYPE_RSS_094', 32);
// RSS 1.0
define('SIMPLEPIE_TYPE_RSS_10', 64);
// RSS 2.0
define('SIMPLEPIE_TYPE_RSS_20', 128);
Programando em PHP sem POG
Veja todos os errosE_ALL & ~E_NOTICE@mysql_conn($conn);E_ALL
Não acredite em usuários<?php
system("ls $dir");?>
Programando em PHP sem POG
Loopingsloopingsloopingsloopingsloopingsif($x==1){...}if($x==2){...}if($x==3){...}if($x==4){...}switch($x){
case 1:case 2:case 3:case 4:
}
Programando em PHP sem POG
Tipos de dados e colunasnome = varchar(255)data-nascimento = varchar(255)sexo = varchar(255)valor-trabalho = varchar(255)
nome = varchar(150)data-nascimento = datesexo = enum('m','f')valor-trabalho = decimal(5,2)
Programando em PHP sem POG
Limpe a memóriada máquina
unset($var1, $var2...);mysql_close($conn);
Limpe a SUA memóriaCascão, Cebolinha,
Doritos, Heroes, JotaQuest, Playboy, Rio Branco, Santa Helena, Tacacá, Wii...
Ferramentas contra POG
xDebug
Extensão para “debugging” de scripts PHP
Análise de código
Trace de funções e pilhas em mensagens de erro
Indicadores de nomes de funções e arquivos
http://xdebug.org
Firebug & FirePHP
Extensões para Firefox
Depuração de código HTML, CSS, DOM, JS
Depuração de código PHP
On-the-fly
www.firephp.org
PHP Debug
Debug de código com geração de trace
Tempo de processamento (inclusive queries)
Verificação de performance
http://sourceforge.net/projects/phpdebug
Sem POG no MySQLMySQL Workbench
modelagem de DB correta
innotop
quem é a fominha do sistema?
MySQL Report
status do banco em diversos formatos
phpMyAdmin
precisa dizer algo?
Dicas contra POG
ProjetosSeja realista com os prazos propostos
pode-se ficar doente
pode-se ter diarréia
pode-se perder o backup e o backup do backup
pode-se ficar sem conexão Internet
pode-se queimar a fonte
Projetos
Utilize uma metodologia (qualquer uma!)
SCRUM
Waterfall
eXtreme Programming
whateaver
Clientes, clientes...Não se sente bem com o cliente, pule fora
chato é diferente de ser correto
pede desconto em tudo
“é só uma funçãozinha...”
“preciso para ontem”Sempre existem bons clientes para bons
desenvolvedores
CodificaçãoPare e pense no que vai fazer
existem 1001 maneiras de fazer código ruim
código bom = funcional, rápido, legível, documentado e com o mínimo de bug’s
O usuário é seu inimigo!
feche as portas
acredite na estupidez humana (ela existe!)
DocumentaçãoDocumente tudo!
Processos, códigos, database, etc
Manuais, um mal necessário
manual para usuário e administração
manual de disaster recovery
Técnicas de programação Chuck Norris(just for fun)
O backup mais rápido do mundo,
powered by Chuck Norriscp -R > /dev/null
Debugger Chuck Norrisif($x==1){
echo 'passou aqui, é 1';}else{
echo 'passou aqui, não é 1';}
Chuck nunca erra...E_ALLdisplay_errors = offdisplay_startup_errors = offlog_errors = off
E sempre conecta...GRANT ALL PRIVILEGES ON *.* TO '%'@'%'
WITH GRANT OPTION;FLUSH PRIVILEGES;
Obrigado
Paulino MichelazzoFábrica Livre Soluções para Internet
www.fabricalivre.com.brTwitter’s: @pmichelazzo - @fabricalivre