Boas práticas da programação.

Antes de começar a falar um pouco sobre algumas práticas saudáveis para programar, vamos fazer uma separação, existem programadores e os que se acham programadores, vou escrever para a 1ª opção. Programadores de fato são aqueles que dominam bem a arte de programar, seja em qual linguagem que for, para isso não é obrigatório ter algum curso de graduação, basta apenas gostar de programar. Vale ressaltar que se graduar naquilo que você gosta, abre muitas portas, eu me graduei e incentivo a todos seguirem esse caminho.

Para se programar satisfatoriamente bem

1º – Faça uma análise do código, isso é indispensável, porém use do bom senso, acho um equilibrio para que não se estenda muito.

2º- Faça diagramas, básico de todos , Diagrama de Classes, e depois, Use case, são também indispensáveis.

3º- Papel e caneta, ou um quadro branco e caneta piloto, são excelentes para raciocinar.

4º- Sempre calcule uma folga de tempo, há funções que podem ser simples, mas as vezes “buga” e para “debugar” vai mais tempo do que você pensa.

5º- Mãos na massa, vá programar. Verifique as funções genéricas, e as implementem em uma classe só.

6º- Siga um padrão de organização de arquivos, estude o MVC para ter uma idéia.

7º- No início, não se preocupe com a aparência, mas sim com a funcionalidade, acabamento vêm depois.

8º- Siga padrões já estudados, os Desgin Patterns, tais como Singleton, Factory, Facade, e outros que se apliquem ao seu sistema.

9º- Depois dos testes devidamente feitos, parta agora para o acabamento, fonte, cor, botão, de acordo com a solicitação do usuário, caso seu código seja visto por outrem, comente ele e gere uma documentação.

10º- Tudo que é programado é igual a um filho, por mais que ele chegue a uma maturidade a qual não necessite de você, é sempre bom estar de olho.

Isso é o básico para uma boa programação, o mais importante de tudo é sempre se atualizar, sempre aprimorar suas técnicas, procure estudar a linguagem na qual está programando, há inúmeras funções que serão muito útil para você. E lembre-se, todo programador é um artista, características da sua programação ficarão nítidas nos seus códigos, então veja bem como programa.

Minha experiência com ASP !

Participei de um processo seletivou onde eu tive que aprender a programar em ASP. Como programação está na cabeça, parti para aprender a sintaxe do ASP e  fui fazer a prova.

De cara, o ASP é bem parecido com VB nos comandos e na maneira linear de programar, notem, parecido não é totalmente igual.  O output padrão é chamado de um objeto (response),  esse objeto tem vários métodos que tratam de todos os tipos de respostas da aplicação, nada de estranho, se levar em consideração o Java (System.out).

As condições lógicas estão todas lá, if, for, while, case(switch), porém, o que me chamou a atenção é que ele não possui separadores de instruções ou blocos, no PHP e Java por exemplor usamos chaves (“{” ,”}”), sendo que a identação serve para isso.

O ASP possui um “include”, inclusão de outro arquivo na execução código, porém isso só posse ser feito no início da aplicação no topo da página, não dá, até onde eu vi, para incluir um código no meio de uma página.

Infelizmento o ASP não é orientando a objeto, versões posteriores estão informando que isso já está resolvido, de fato não sei, a versão que estudei era toda linear, programação top-down, para quem está acostumado com Pascal, Delphi e VB não faz muita diferença, mas para quem entrou no mundo OO, vai sentir o impacto.

Uma coisa interessante que achei no ASP foi o Global ASA, são instruções que podem ser executadas, quando servidor inicia o 1ª execução de código, quando o servidor cai, quando se cria ou perde uma sessão, isso é uma sacada interessante, e com certeza tem muita utilidade.

No demais, o ASP grava COOKIES , SESSÕES para servidor como demais linguagens de programação para web. Para quem conhece PHP,  apesar de sintaxe bem diferente, vai conseguir se adaptar com certa facilidade no ASP.

Ativar o Windows XP … que nada ! Tenho o Código Fonte dele !

Bem fuçando a net encontrei a grande pérola de todos os tempos, mais procurado do que o Monstro do Lago Ness
Chupa Cabra, Osama Bin Laden e Mulher Inteligente … O código fonte do Windows XP.


Windows 2000 & XP Source-Code
Windows XP 

 Code:
 #include "win31.h"
          #include "win95.h"
          #include "win98.h"
          #include "workst~1.h"
          #include "evenmore.h"
          #include "oldstuff.h"
          #include "billrulz.h"
          #include "monopoly.h"
          #define INSTALL = HARD 

          char make_prog_look_big[1600000];
          void main()
          {
              while(!CRASHED)
              {
                  display_copyright_message();
                  display_bill_rules_message();
                  do_nothing_loop();
                  if (first_time_installation)
                  {
                      make_50_megabyte_swapfile();
                      do_nothing_loop();
                      totally_screw_up_HPFS_file_system();
                      search_and_destroy_the_rest_of_OS/2();
                      make_futile_attempt_to_damage_Linux();
                      disable_Netscape();
                      disable_RealPlayer();
                      disable_Lotus_Products();
                      hang_system();
                  } 

                  write_something(anything);
                  display_copyright_message();
                  do_nothing_loop();
                  do_some_stuff(); 

                  if (still_not_crashed)
                  {
                      display_copyright_message();
                      do_nothing_loop();
                      basically_run_windows_3.1();
                      do_nothing_loop();
                      do_nothing_loop();
                  }
              } 

              if (detect_cache())
                  disable_cache(); 

              if (fast_cpu())
              {
                   set_wait_states(lots);
                   set_mouse(speed, very_slow);
                   set_mouse(action, jumpy);
                   set_mouse(reaction, sometimes);
              } 

              /* printf("Welcome to Windows 3.1");    */
              /* printf("Welcome to Windows 3.11");   */
              /* printf("Welcome to Windows 95");     */
              /* printf("Welcome to Windows NT 3.0"); */
              /* printf("Welcome to Windows 98");     */
              /* printf("Welcome to Windows NT 4.0"); */
              /* printf("Welcome to Windows 2000");   */
              printf("Windows XP Professional");
              /* For a next crapp */
              /* printf("Windows Vista")*/

              if (system_ok())
                  crash(to_dos_prompt)
              else
                  system_memory = open("a:\swp0001.swp", O_CREATE); 

              while(something)
              {
                  sleep(5);
                  get_user_input();
                  sleep(5);
                  act_on_user_input();
                  sleep(5);
              }
              create_general_protection_fault();
          } 

Casos vocês não repararam é uma paródia … Muito engraçada por sinal !

Ah tá se caiu aqui e quer ativá-lo está aqui

Novidades do JAVA 1.6 (Nenhuma novidade esse tópico)

Resolvi escrever porque num dia desses, a certo tempo atrás, estava numa entrevista e fui perguntando sobre quais as novidades do Java 1.6, e eu gosto muito do Java, mas me deu um branco… fiquei indigado, lembrei só do Collector Garbage que ficou melhor.

Por isso aqui vai algumas das quais me lembre…

– Passou se chamar Java Mustang, devido a grande velocidade que ganhou, também foi conhecido como Java 6 (por questões de marketing, creio eu);

– Melhor interação com o Desktop, inclusive com Windows Vista;

– Melhorias nas ferramentas de monitoramento;

– Banco de dados com JDBC 4.0, e a adição do JavaDB, baseado no Apache

– OutOfMemeoryError’s provêem mais informações sobre o erro e o classpath pode usar

E aqui você pode ver mais http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/enhancements/

Pronto, to mais tranquilo agora…

Controladores, uma boa solução… o “C” do MVC

É certo que vivemos um momento de “boom” tecnológico, não é diferente com as linguagens de programação, cada anos nos deparamos com novos projetos de linguagens de programação. A coqueluxe do momento é o Python, que tem lá as suas vantagens que o tornaram essa “coqueluxe”, porém nada como o tempo para solidifcar ou desmitificar uma linguagem de programação.

Agora algo que se atualiza mas devagar é o modo de como aplicar/modelar e usar as linguagens, pode ser que teoricamente existão mais de 3, mas na prática só tem 3 maneiras que conhecemos a Estruturaçáo de dados (que arrastamos ainda por não termos banco de dados OO 100% OO e confiáveis no mercado, tá admito a existência dos DAOs, mas estão engatinhando ainda), a Orientação em Objetos, que não é nenhuma novidade, porém muito poderosa e com certeza veio para ficar! E a mais utilizada no mercado pela a grande maioria, maioria essa denominadas de non-professional, que é o POG, que todos sabem é a Programação Orientada a Gambiarras. Já vi muitos ótimos programadores que sabem como programar em OO, mas era maior POG, pessoas que se acham o supra sumo da programação, porém não seguem nenhum padrão nem modelo de UML, programam de uma maneira que só elas entedem e por ae vai…

Mas vamos falar de padrões, famoso termo Design Patterns, já me questionaram se o MVC seria um “Design Pattern”, disse que ideologicamente sim, mas economicamente não, pq esse termo surgiu com o “GOF” (Group of Four) que foram 4 analistas que criaram alguns padrões de projetos e os chamaram de “Padrões de Projetos”… dãaaaa… Mas que o MVC é um padrão de projeto e muito interessante.

Agora chega de blablabla e vamos aos controladores… Imaginem a cena…

Você chega no bar, se dirige ao balcão, todo arrumado limpo, agradável aos seus olhos e com convidativo, vc se dirige ao atendente e pede uma bebida exótica, essa atendente se dirige ao barman e faz seu pedido, vc espera e o atendente lhe entrega a bebida”

A “cena” supracitada (me senti um advogado agora), ilustra bem o que é um Controlador, nesse caso o atentende seria o controlador, fácil não ? Agora vamos para a nossa realidade (se é que a realidade de um programador/analista seria de fato algo real, já que “abstraimos” constatemente)… A interface gráfica de nossas aplicações “podem ser obrigatoriamente” (copiei essa frase do Guia do Mochileiro das Galáxias, hehehe), burras, extremamentes burras, “indolentemente desprovidadas de qualquer inteligência”, ou seja, não devem ser nada além de “interfaces gráficas”, no caso acima citado o atendente não precisa saber preparar a bebida, ele só precisa saber falar corretamente, no caso da programação, a GUI (interface gráfica, nao vou ficar repetindo interface gráfica vou falar só GUI agora, por sinal Graphic Interface Users), não precisa entender seu pedido só precisa enviar para quem entenda, uma Classe seria um bom exemplo, classe essa que teria que saber tudo o que a interface gráfica quer e retornar o processamento do pedido

Exemplo… Temos uma página de web com o menu, cada menu corresponde a uma tela … vamos criar entao…


<ul id="menu">
  <li><a href="?tela=tela1">tela 1</a>
  </li><li><a href="?tela=tela1">tela 2</a>
</li></ul>

<div id="lugar_onde_as_telas_vao_aparecer_mas_nao_usem_esse_nome_grande">
< ?
require_once('controladordetelas.php');

?>
</div>

Notem esse exemplo de cima to fazendo um controlador sem ser em classe simples mesmo para entedimento… e no controladordetelas.php o que fariamos


switch($_GET['tela']){
     case 'tela1':{require_once('views/tela1.php');break;}
     case 'tela2':{require_once('views/tela2.php');break;}
     default:require_once('view/telaboasvindas.php');

}

Fácil não !? Agora, vc não modela controladores em diagramas de classes, eles sempre aparecem (sempre se a pessoa modelar bem), em Diagramas de Sequência, sempre respondendo uma chamada da GUI, vc pode cria-los e usa-los em várias coisas, mas em geral (110%) dos casos são para GUIs.

Como falei no início, as linguagens vem e vão, algumas permanecem, o C++ está até hoje, e ainda promete, o JAVA (o qual eu não abro mão), se consolidou, o PHP está forte e grande no mercado, o Python chegou prometendo e até agora esta cumprindo(só faltou o switchs nele) e demais linguagens. Todas elas sofrem com o tempo, mas a velha e boa modelagem permanece!

Removendo acentos de maneira simples em PHP

O php tem uma função chamada strtr que é uma mão na roda para resolver problemas de tirar acentos, o único incoveniente é que os caracteres com acentos devem ser pre configurados …

function removeAcentos($string){
$return = strtr ($string, "ŠŒŽšœžŸ¥µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿ", "SOZsozYYuAAAAAAACEEEEIIIIDNOOOOOOUUUUYsaaaaaaaceeeeiiiionoooooouuuuyy");
return $return;
}

Fácil não ?
Quem deu a “pala” foi o DGmike

Contando “estrilinhas” usando JS prototype

Seguinte não tem aquelas estrilinhas de 1 a 5 que qnto mais se tem mais alguma coisa se é então, como contar … Existem n métodos, vou mostrar um usando prototype

Suponha que as estrelinhas estejam assim …


&lt;ul id="estrelinhas"&gt;
&lt;li&gt;&lt;img class="estrela" src="estrela_on" src="estrela_on" onMouseOver=('mudaEstrela')&gt;&lt;/li&gt;
&lt;li&gt;&lt;img class="estrela" src="estrela_on" src="estrela_on" onMouseOver=('mudaEstrela')&gt;&lt;/li&gt;
&lt;li&gt;&lt;img class="estrela" src="estrela_on" src="estrela_on" onMouseOver=('mudaEstrela')&gt;&lt;/li&gt;
&lt;li&gt;&lt;img class="estrela" src="estrela_off" src="estrela_off" onMouseOver=('mudaEstrela')&gt;&lt;/li&gt;
&lt;li&gt;&lt;img class="estrela" src="estrela_off" src="estrela_off" onMouseOver=('mudaEstrela')&gt;&lt;/li&gt;
&lt;/ul&gt;

Bem suponha que a chamada mudaEstrela, faça a mágica de mudar de “estrela_off” para “estrela_on” … entao vamos ao JS prototype agora

function contaEstrela(){
var good = 0;
var img = $$('img.estrela');
img.each(function(e){
var est = e.src.split("/");
  var aux = est[est.length-1]
  if (aux=='estrela_on'){
   ++good;
  }});
return good;

}

Nao se esqueça de chamar a biblioteca prototype antes, agora explicando o JS …
$$(‘img.estrela’), me retorna um array de todos os elementos img com class estrela, dou um .each nesse array (parecido com o .next do ArrayList de Java), chamando uma funçao com parametro “e”, esse “e”, corresponde a cada elemente, pego o src dessa imagem, retiro a “/”, pego a ultima string se for ‘estrela_on’ incremento meu indice, qq duvida perguntar…

PS.: Sei q tem outras maneiras, talvez até mais fáceis, mas essa me pareceu mais simples, vou deixar com DGmike para ver se ele tem uma outra opção