segunda-feira, 18 de janeiro de 2010

Sem ideias então links!

Já faz um tempinho que não posto nada aqui, eu queria poder falar que isso é excesso de trabalho com meu site ou falta de tempo. Geralmente o primeiro leva ao segundo, mas este não é meu caso. Como não estou com uma boa ideia sobre o que escrever resolvi compartilhar alguns links que tenho de livros gratuitos ou livres sobre informática e computação. Será que sou somente eu que junta links e mais links de livros mas acaba não lendo quase nenhum? Se eu lesse 10% de todo o material que achei, exisitiria uma foto minha na Wikipedia no termo programação e eu seria considerado mais legal que o allien do reddit.
Tomara que vocês sejam menos preguiçosos do que eu, aí vai a lista.
  1. Acrobat Planet - De tudo um pouco.
  2. Stack Overflow - Várias sugestões postadas em uma questão do site.
  3. E-books directory - Muita coisa entre outras programação, algoritmos, estruturas de dados e até livros de matemática e engenharia.
  4. Meiobit - Um post no meiobit, os comentários tem muitos links também.
  5. Free IT Books - Tem até material sobre robótica.
  6. Python para Desenvolvedores - Para quem já sabe programar e quer aprender python em português.
  7. Free Computer Books - Este aqui pode esgotar seu hd.
  8. Reddit - Canal dentro do reddit, sempre estão adicionando alguma coisa.
  9. Bill the Lizard - Post deste blog com vários livros. O blog é bom também.
  10. Coderholic - Outro post de blog e nos comentários tem material extra.
Por enquanto é isso, eu nem postei tudo (eu sei, eu tenho vicío de guardar links), mas já deve ajudar alguém procurando aprender alguma coisa nova.

sábado, 21 de novembro de 2009

AjaxUpload para uploads sem complicação

Olá galera! Recentemente acabei um pequeno projeto em que estive trabalhando e que vocês podem conferir aqui (pcveiculos.com). Devo falar mais sobre ele depois, mas este post é para falar de um plugin bem legal que usei junto com o jquery (se você não usa, não sabe o que está perdendo) no projeto , é o AjaxUpload. Obs: No site do AjaxUpload fala que ele pode ser usado com outras bibliotecas como a Prototype, Mootools etc.

O AjaxUpload basicamente permite que o usuário clique em um botão (por exemplo) em uma página web e escolha um arquivo que ele deseja enviar para o servidor web. Depois de o usuário escolher o arquivo, o plugin pode automaticamente enviar o arquivo escolhido para o servidor. Isso mesmo, sem refresh da página inteira, sem precisar criar um formulário e um "input" tipo "file", tudo bem prático e simples. E o usuário ainda pode enviar mais de um arquivo ao mesmo tempo.

Bom aqui vai um link para um exemplo pronto (usando PHP), adaptado do próprio código exemplo do AjaxUpload, a maior diferença é que eu adicionei alguns comentários no código que tentam explicar algumas opções básicas .Exemplo AjaxUpload. Como vocês podem ver no exemplo eu também usei a biblioteca jquery.

Quando for testar o exemplo não se esqueça de setar as permissões da pasta uploads para aceitar ler e escrever arquivos. Qualquer dúvida ou problema encontrado comentem aí!

terça-feira, 20 de outubro de 2009

Um banco de dados de cidades e estados

Olá pessoal!
Estou trabalhando em um pequeno projeto e nele necessito ter acesso ao nome de todas as cidades do Brasil, assim como o estado de cada uma. Depois de algumas buscas na internet eu efetivamente achei alguns bancos de dados prontos contendo tabelas com os nomes das cidades e também o estado de cada uma.
Acontece que estas bases de dados que achei possuem alguns problemas. Uma que achei tinha mais de 9000 registros de cidades, sendo que o Brasil possui oficialmente um pouco mais de 5500 cidades. E também em todas as bases que achei o formato dos dados não estava do jeito que eu queria, todos os nomes dos municípios estavam com todos os caracteres em maiúsculo e também não tinham os acentos devidos.
Pesquisando um pouco mais achei no site do IBGE uma relação com todos os municípios e seus respectivos estados do ano de 2007 (para meu caso está atualizado o bastante), os arquivos estão neste endereço. O problema é que todos estes dados estão divididos em arquivos no formato xls, sendo um arquivo para cada estado. Usando a excelente biblioteca excel_reader eu fiz um pequeno script para pegar todos os dados dos arquivos xls (somente a sigla do estado e o nome de cada cidade) e transportá-los para uma tabela do banco de dados MySQL.
Junto com os scripts tem um arquivo chamado constants.php com os seguintes parâmetros de configuração:

DATABASE_HOST => Endereço do servidor mysql.
DATABASE_USER => Usuário para acessar o servidor mysql.
DATABASE_PASS => Senha do usuário mysql.
DATABASE_NAME => Nome do banco de dados onde a tabela de cidades será criada.
CITIES_TABLE_NAME => Nome da tabela com os dados das cidades que será criada.
ID_NAME_COLUMN_NAME => Nome da coluna chave primária da tabela de cidades.
ESTATE_NAME_COLUMN_NAME => Nome da coluna com o estado de cada cidade.
CITY_NAME_COLUMN_NAME => Nome da coluna com o nome de cada cidade.

Depois de configurar estas opções de acordo com seu gosto é só rodar o arquivo main.php. Os scripts podem ser baixados aqui. Junto deles vai uma pasta chamada data que contém todos os arquivos xls do IBGE.
Aqui vai um link para uma exportação da tabela de cidades que criei usando os scripts caso você queira importar os dados diretamente. A tabela possui 5518 registros.
Novamente gostaria de falar da qualidade da bilbioteca excel_reader para ler os arquivos xls. Foi uma das duas que consegui fazer rodar mas a única que não teve problemas com uso de memória e tempo de execução.
Valeu e até a próxima.

sábado, 26 de setembro de 2009

Tradução - 5 importantes dicas para debugar código PHP

Fala aí galera! Mais uma tradução (talvez eu devesse mudar de profissão), é um artigo bem legal com dicas para dominar a habilidade de debugar seus maravilhosos scripts php que insistem em não fazer o que você quer. Vi isso no blog phpcollection e o artigo original pode ser acessado aqui. Então vamos lá!

Debugar código em php é um pesadelo para todos os programadores php e estes são os momentos onde eles sentem falta da funcionalidade de trace das funções do java. Contudo algumas técnicas simples de debug podem ajudar você a codificar mais rápido e salvar o valiosíssimo tempo de desenvolvimento.

Todas estas técnicas são baseadas na minha experiência e adoraria conhecer quais outras técnicas de debug programadores php usam para encontrar erros em seu código! Por favor comente abaixo e compartilhe com a comunidade sua arma secreta para debugar código php.

Então, minhas 5 dicas para debug são (em nenhuma ordem em particular):

1) - Debug de código php simultâneo: Use um editor com um debugger php simultâneo (como phped, PhpDesigner, Eclipse, etc ), editores como editpad, notepad não suportam debug simultâneo então neles você precisa rodar o script php no browser para encontrar erros. Estes outros editores rodam os script php via linha de comando a cada vez que o script é salvo e apresentam os erros encontrados.

Pequenos erros humanos como esquecer de um ponto e vírgula, não terminar a linha corretamente, errar as chaves etc podem ser facilmente encontrados usando um debugger php simultâneo.

2) - Use xdebug - A extensão xdebug permite você achar a pilha de execução ou a pilha de chamada de funções em mensagens de erro, a alocação de memória e previne execuções de recursão infinita acontecerem.

Também fornece informações de profiling do código PHP e tem a capacidade de debugar scripts interativamente com um cliente de debug.

Xdeug pode ser encotrado em xdebug.org (Editores como phpdesigner e phpdebug já contêm o Xdebug embutido).

3) - Ative as mensagens de erro do php - O arquivo php.ini possui muitas opções de configuração. Entres estas opções exitem algumas opções que controlam a forma como mensagens de erro são exibidas para o usuário. Tenha certeza de que as duas seguintes opções estejam configuradas como a seguir:

display_errors = On
error_reporting = E_ALL & ~E_NOTICE

4) - Use comandos como print e echo de antemão em pontos críticos para debug - Esta dica é de certa forma um método caseiro que uso para debugar php que eu considero extremamente útil para analisar grandes bases de código php.

Enquanto estou programando eu crio algumas seções virtuais de código e nestas seções eu coloco comandos echo para assegurar que o interpretador está passando por aquela seção corretamente e escrevendo a informação requerida corretamente.

Mas como não posso deixar estas seções sempre executando, eu coloco um comando if debug_check para verificar se o código está sendo executado em modo de debug ou modo de produção.
Exemplo:

$debug_check = 1;

foreach ($array as $data) {

if ($debug_check == 1)

print ($data);

}

Aqui a varável $debug_check é definida no topo do script. Assim que for mudada para 1 , o código passa a mostrar todos comandos echo e print, somente quando eu estiver debugando o código.

Quando estou em modo de produção eu simplesmente mudo o valor de $debug_check para 0 que agora vai esconder todos os comandos echo e print. Isto leva um pouco mais de tempo no inicío mas é muito útil a longo prazo.

5) - Use frameworks - Frameworks são umas das maiores mudanças na programação moderna, frameworks php como CodeIgniter e CakePHP provêem muitas funcionalidades para se construir casos de teste, testes unitários e debug.

Também, como a maior parte do código roda dentro de bibliotecas as mensagens de erro são bem feitas e providenciam detalhes internos.

Dois dos meus frameworks favoritos são : cakephp e codeingiter.

Espero que você tenha apreciado estas 5 técnicas de debug para php. Eu pesso para todos compartilharem aqui seus conselhos para debugar código php. Eu vou compilar todos eles em um post com os devidos créditos e publicar! Isso pode ser bem útil para todos os programadores php ao redor do mundo. (Isso foi no post original mas se as dicas forem legais eu posso colocar a tradução aqui novamente)

É isso aí! Valeu pessoal!

quarta-feira, 23 de setembro de 2009

Domínios

Estou criando um site(na verdade estou apenas na fase de ideias, mas pretendo falar sobre o desenvolvimento dele aqui no blog em breve). Hoje fiquei um tempo pensando em domínios, e percebi que todos os bons nomes para domínios já foram escolhidos (pelo menos na área que estou pensando).
Escolher um domínio até parece um tipo de arte arcana obscura pelo que li em alguns artigos na web (aqui, aqui e aqui), este último até tem um download de um pdf de 70 páginas sobre como escolher um domínio. Talvez eu devesse criar um domínio estilo web 2.0 como flickr, twitter, blogger, reddit, digg (perceberam que o segredo é terminar em "r" ou ter duas letras repetidas no nome?). Bem, vou pensar mais um pouco e se alguém quiser deixar uma sugestão de como criar um bom domínio eu fico agradecido. Valeu!

sábado, 29 de agosto de 2009

Calcular distância entre as cidades do Brasil

Olá pessoal! Achei um post interessante onde o autor (Marcos Roberto Silva) colocou um código perl que usa o google maps para dizer qual a distância entre duas cidades. A quem interessar o artigo está aqui.
Eu vi o código e ele é bem simples, assim fiz uma versão usando php (o php tem muitas coisas parecidas com o perl, afinal ele tem suas origens ligadas ao perl).
Este é o código php que faz toda a mágica:
Update: Olhe no fim do post
$origem = "Oiapoque-AP";
$origem_codificada = urlencode($origem);
$destino = "Chui-RS";
$destino_codificado = urlencode($destino);

if (! empty($origem) && ! empty($destino)) {
$url = "http://maps.google.com.br/maps?saddr={$origem_codificada}&daddr={$destino_codificado}&hl=en&z=1";
$conteudo = file_get_contents($url);
$dados = split(',distance:"', $conteudo);
$distancia = split(' km",', $dados[1]);
$distancia[0] = str_ireplace(',', '', $distancia[0]);

$mensagem = "Distancia de $origem a $destino = $distancia[0] km\n";
} else {
$mensagem = "Preencha os dois campos como Goiânia-GO e Brasília-DF";
}



O código praticamente não tem diferença do original. Você pode adaptá-lo facilmente para exibi-lo em uma página web.

Update:
Conforme os comentários este código já está obsoleto, tanto pelo fato de a Google ter mudado a resposta da página quanto pelo fato do código provocar warnings do tipo Deprecated nas versões mais recentes do PHP. No código abaixo uma versão que alterei rapidamente. Aparentemente ela funciona, mas depende muito da resposta enviada pelos servidores da Google.

sexta-feira, 14 de agosto de 2009

Atalhos extremamente úteis para o NetBeans (Tradução)

Em um blog que fala muito de PHP o que o netbeans estará fazendo aqui? Nebeans não é para Java?! Bom, venho usando a versão dele para php a algum tempo e tenho que dizer que ele é um excelente editor para esta linguagem.
Um dia destes trombei com um post bem interessante falando de alguns atalhos no netbeans que estão me ajudando a ser muito mais produtivo neste ambiente. Para aqueles que acham que o netbeans é pesado, lento, foi feito em java e etc, sugiro olharem a versão específica para php que é bem leve e tem somente os recursos básicos (se bem que você tem a opção de instalar diversos plugins para adiconar outras finalidades) para php.
O artigo original você encontra neste link. Obrigado
Aí vai a tradução:
Já tem um bom tempo que confio somente no NetBeans para o desenvolvimento em Java e PHP. Até agora, ele está além das minhas maiores expectativas - estou totalmente satisfeito com esta excelente IDE. Hoje, eu estava procurando por um atalho que me premitisse duplica uma linha, e (felizmente!) encontrei este grande post Top 10 NetBeans IDE Keyboard shortcuts. Não somente encontrei o atalho de duplicar a linha, eu também descobri diversas outras pérolas que devido a não estarem disponíveis nas minhas IDE's anteriores, eu nunca tinha considerado procurar por elas.
Então, decidi compilar minha própria lista de atalhos que me salvam um bom tempo durante as sessões de desenvolvimento.
Shift + esc Alterna a área de trabalho entre Maximizar/Minimizar.
Como o autor do post original, eu gosto muito de ter o máximo possível de área de trabalho para o código. E quando ocasionalmente eu preciso ver um dos painéis suplementares (como Arquivos, projetos, Navegador etc), eu confio mais nos atalhos, alternando maximizando/minimizando eles. Então, se eu preciso ver alguns dos painéis acoplados eu digito alguns dos seguintes atalhos:
Ctrl + 1 - Janela de Projeto
Ctrl + 2 - Janela de Arquivos
Ctrl + 3 - Janela de Favoritos
Ctrl + 4 - Janela de Saída
Ctrl + 5 - Janela de Serviços
Ctrl + 2 - Janela de Tarefas

e quando termino, Ctrl + 0 para voltar para o editor. Tente você mesmo, tenho certeza de que, você ficará maravilhado com a quantidade de tempo que isso salva para você, enquanto faz a área de código menos confusa.

Alt + Enter Ver sugestões de correção
NetBeans faz a sua vida ficar bem mais fácil, seu analisador de código Java realmente faz um bom trabalho. Muitos dos erros são filtrados mesmo antes da compilação - você deve ver a lâmpada no lado esquerdo do seu código, você pode ver as sugestões de correção clicando nisto ou (economia de tempo novamente) apertando Alt + Enter. Eu pessoalmente gosto muito deste, como eu prefiro ver porque a IDE está reclamando sem retirar minhas mãos do teclado.

Ctrl + F12 Navegar para o membro
Se sua classe é muito grande, então a visualização de membros no paindel Navegador (Ctrl + 7 lembra-se?) pode não ser a melhor opção. Apenas aperte Ctrl + F12 e você poderá navegar mais fácilmente, porque esta opção possui filtros que eliminam os membros que não se encaixam no que você está digitando.

Alt + Insert Gerar código
Este é um dos meus favoritos - geradores de código para setters/getters/construtores são muito sexy para serem enganados. Este atalhos faz eles serem ainda mais úteis.

Ctrl + Shif + Seta para baixo Duplicar as linnhas.
Duplicar linhas nunca foi tão fácil :) . Se você quer que a duplicação seja inserida antes da linha corrente, use Seta para cima ao invés de Seta para Baixo.

Ctrl + W Fechar janela corrente
Firefox honra este atalho, assim como o Konqueror. Então, até configurei meu console para usar este atalho por padrão. Em pouco tempo você vai se acostumar a apertar esta combinação ao invés de Ctrl + F4.

Ctrl + PgUp e Ctrl + PgDown Navegar entre as janelas
De novo, me acostumei com este com o Firefox. Fica rápido percorrer entre os documentos abertos.

Ctrl + P Mostra os argumentos dos métodos
Dentro dos parenteses do método use esta combinação para ver quais parâmetros estão presentes. Muito útil quando estiver revendo código.

Ctrl + ; Adiciona um ponto e vírgula no final da linha sem mover o cursor.
Se você estiver trabalhando em um código e o netbeans sublinhar a linha com vermelho (devido ao ainda inexistente ponto e vírgula no final da linha) apertar Ctrl + ; (Ctrl + ponto e vírgula) é o bastante para fechar o comando, enquanto você ainda está posicionado na mesma posição na linha. Vi primeiro no dzone.com , e adoro usar este atalho.

Ctrl + K e Ctrl + L Auto completa com a próxima/anterior palavra compatível
Eu uso esta combinação mais frequentemento do que Ctrl + Espaço para auto-completar. Listar todos os itens com Ctrl + Espaço pode ser lento, mas apertando Ctrl + K é isntântaneo. Muito frequentemente o nome da varável que você está digitando já foi digitado em outro local no mesmo arquivo corrente, completar com Ctrl + K ou Ctrl + L é provavelmente o mais óbvio a ser feito.

Ctrl + E Excluia linha atual

Ctrl + Del e Ctrl + Backspace Exclui a próxima/anterior palavra.

Eu geralmente uso Ctrl + BackSpace, mas em algumas ocasiões Ctrl + Del se provou útil.
Isto é mais do que o bastante para colocá-lo no caminho. Em algum tempo, eu planejo escrever uma lista mais extensa de atalhos exóticos que você raramento usa, porque dificilmente você os conhecia.
Que atalhos lhe dão mais tempo?