POG Nunca Mais!
                               Técnicas e macetes para o   tam
                                                               b
                                                              ém
                                desenvolvimento em PHP      MyS para
                                                               QL




4º SOLISC - Florianópolis/SC
Novembro - 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)
Palestrante
               Paulino 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

           paulino@fabricalivre.com.br
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 causas
Tempos 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”   Facilite a leitura de código
  <?=$var?>               <?if($var==1): ... endif?>
  <?php echo $var?>       <?php
                          if($var == 1){
                             ....
                          }?>
Programando em PHP
      sem POG
   use variáveis “humanas”

           $xyz = 1;
           $fdp = 2;
           $pqp = 3;

       $ValorEntrada = 1;
       $ValorRetorno = 2;
       $ValorSaida = 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ódigo
define('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 erros     Não acredite em usuários
  E_ALL & ~E_NOTICE       <?php
  @mysql_conn($conn);      system("ls $dir");
  E_ALL                   ?>
Programando em PHP
          sem POG
Loopingsloopingsloopingsloopingsloopings
  if($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 colunas
  nome = varchar(255)
  data-nascimento = varchar(255)
  sexo = varchar(255)
  valor-trabalho = varchar(255)

     nome = varchar(150)
     data-nascimento = date
     sexo = enum('m','f')
     valor-trabalho = decimal(5,2)
Programando em PHP
            sem POG
Limpe a memória             Limpe a SUA memória
da máquina                    Cascão, Cebolinha,
  unset($var1, $var2...);      Doritos, Heroes,
                               JotaQuest, Playboy,
  mysql_close($conn);
                               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 MySQL
MySQL 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
Projetos
Seja 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...”
                                     Sempre existem
  “preciso para ontem”                bons clientes
                                        para bons
                                     desenvolvedores
Codificação
Pare 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ção
Documente 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 Norris
  cp -R > /dev/null


                      Debugger Chuck Norris
                        if($x==1){
                           echo 'passou aqui, é 1';
                        }else{
                           echo 'passou aqui, não é 1';
                        }
Chuck nunca erra...
         E_ALL
         display_errors = off
         display_startup_errors = off
         log_errors = off



E sempre conecta...
GRANT ALL PRIVILEGES ON *.* TO '%'@'%'
 WITH GRANT OPTION;
FLUSH PRIVILEGES;
Obrigado

           Paulino Michelazzo
 Fábrica Livre Soluções para Internet
         www.fabricalivre.com.br
Twitter’s: @pmichelazzo - @fabricalivre

POG nunca mais - SOLISC

  • 1.
    POG Nunca Mais! Técnicas e macetes para o tam b ém desenvolvimento em PHP MyS para QL 4º SOLISC - Florianópolis/SC Novembro - 2009
  • 2.
    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)
  • 3.
    Palestrante Paulino 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 paulino@fabricalivre.com.br
  • 4.
  • 5.
  • 6.
    Definição de Gambiarra lâmpadainstalada 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
  • 7.
    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
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
    equipe eu, mime nós dois!
  • 16.
  • 17.
    Algumas causas Tempos 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....
  • 18.
    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...
  • 19.
    Mantendo a POGlonge de seu sistema
  • 20.
    Programando em PHP sem POG Não use “short tag's” Facilite a leitura de código <?=$var?> <?if($var==1): ... endif?> <?php echo $var?> <?php if($var == 1){ .... }?>
  • 21.
    Programando em PHP sem POG use variáveis “humanas” $xyz = 1; $fdp = 2; $pqp = 3; $ValorEntrada = 1; $ValorRetorno = 2; $ValorSaida = 3;
  • 22.
    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; } } ?>
  • 23.
    Programando em PHP sem POG Comente seu código define('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); ????
  • 24.
    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);
  • 25.
    Programando em PHP sem POG Veja todos os erros Não acredite em usuários E_ALL & ~E_NOTICE <?php @mysql_conn($conn); system("ls $dir"); E_ALL ?>
  • 26.
    Programando em PHP sem POG Loopingsloopingsloopingsloopingsloopings if($x==1){...} if($x==2){...} if($x==3){...} if($x==4){...} switch($x){ case 1: case 2: case 3: case 4: }
  • 27.
    Programando em PHP sem POG Tipos de dados e colunas nome = varchar(255) data-nascimento = varchar(255) sexo = varchar(255) valor-trabalho = varchar(255) nome = varchar(150) data-nascimento = date sexo = enum('m','f') valor-trabalho = decimal(5,2)
  • 28.
    Programando em PHP sem POG Limpe a memória Limpe a SUA memória da máquina Cascão, Cebolinha, unset($var1, $var2...); Doritos, Heroes, JotaQuest, Playboy, mysql_close($conn); Rio Branco, Santa Helena, Tacacá, Wii...
  • 29.
  • 30.
    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
  • 31.
    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
  • 32.
    PHP Debug Debugde código com geração de trace Tempo de processamento (inclusive queries) Verificação de performance http://sourceforge.net/projects/phpdebug
  • 33.
    Sem POG noMySQL MySQL Workbench modelagem de DB correta innotop quem é a fominha do sistema? MySQL Report status do banco em diversos formatos phpMyAdmin precisa dizer algo?
  • 34.
  • 35.
    Projetos Seja realista comos 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
  • 36.
    Projetos Utilize uma metodologia(qualquer uma!) SCRUM Waterfall eXtreme Programming whateaver
  • 37.
    Clientes, clientes... Não sesente bem com o cliente, pule fora chato é diferente de ser correto pede desconto em tudo “é só uma funçãozinha...” Sempre existem “preciso para ontem” bons clientes para bons desenvolvedores
  • 38.
    Codificação Pare e penseno 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!)
  • 39.
    Documentação Documente tudo! Processos, códigos, database, etc Manuais, um mal necessário manual para usuário e administração manual de disaster recovery
  • 40.
    Técnicas de programação Chuck Norris (just for fun)
  • 41.
    O backup maisrápido do mundo, powered by Chuck Norris cp -R > /dev/null Debugger Chuck Norris if($x==1){ echo 'passou aqui, é 1'; }else{ echo 'passou aqui, não é 1'; }
  • 42.
    Chuck nunca erra... E_ALL display_errors = off display_startup_errors = off log_errors = off E sempre conecta... GRANT ALL PRIVILEGES ON *.* TO '%'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
  • 43.
    Obrigado Paulino Michelazzo Fábrica Livre Soluções para Internet www.fabricalivre.com.br Twitter’s: @pmichelazzo - @fabricalivre