terça-feira, 30 de novembro de 2010

Tamanho em disco de um banco de dados Postgre

Como saber quanto espaço em disco seu banco de dados Postgre está usando?
Simples, fácil e rápido:
SELECT pg_database_size('nome_banco');
Este comando exibe o tamanho em bytes.

Que tal exibir de uma forma mais amigável?
SELECT pg_size_pretty(pg_database_size('nome_banco'));

sexta-feira, 26 de novembro de 2010

Eu odeio proxies!

Onde trabalho atualmente a rede tem um proxy maldito que bloqueia certos sites. Vez ou outra entro em um endereço e percebo que as imagens não foram carregadas, os gênios que configuraram os endereços bloqueados colocaram sites como http://aws.amazon.com/s3/ que muitos outros sites usam para hospedar arquivos e imagens.

Tive uma ideia juntei algumas bibliotecas php como SimpleHtml e PHPMailer e criei uma espécie de "enganador de proxy". Você coloca uma url, seu e-mail e escolhe se quer fazer o download somente das imagens ou das páginas do site. O script php vai tentar obter os arquivos e enviar um e-mail para você. Simples assim. O código é uma droga, as vezes não funciona mas na maioria das vezes parece funcionar. Você pode obtê-lo aqui.

*Não se esqueça de configurar seu e-mail e password no arquivo downloader.php. Eu usei gmail!

quarta-feira, 22 de setembro de 2010

Mude suas idéias sobre o Javascript

É do time dos programadores que odeiam Javascript e amaldiçoam o dia em que a linguagem surgiu? Bom no vídeo abaixo Doug Crockford fala das partes boas da linguagem. Ele admite que muita coisa na linguagem é medonha e nos faz duvidar da qualidade da mesma como o operador "+" que serve para somar e concatenar e os erros silenciosos que podem surgir no código entre outras inconveniências. Mas ele comenta que muita coisa chata é devido ao modelo DOM adotado pelos browsers (maior fonte de incompatibilidades). Além do mais a vida de um programador Javascript hoje em dia é bem melhor do que alguns anos atrás, hoje temos bibliotecas como JQuery, ferramentas como FireBug e browsers um pouco mais compatíveis.

Vendo o cara falar da linguagem com uma certa paixão me fez olhar para ela com outros olhos. Ah! E de quebra a apresentação tem umas partes bem engraçadas.

quarta-feira, 15 de setembro de 2010

O Prazer de programar

Depois de ver o yahoo fazer um instant search 5 anos atrás (e não ter conseguido emplacar), o google fazer um recentemente e todos os outros que vieram depois (youtube, google maps, twitter, será que existe um instant search para o Osama Bin Laden?) resolvi fazer um ... hã, bem... menos cristão digamos.

É o RedTube Instant Search. Para quem não conhece o RedTube, se tiver mais de 18 anos é só procurar no google e se não tiver vai acabar procurando mesmo assim né? O processo de funcionamento é bem simples, ele pega o termo de busca digitado envia para o mecanismo de busca do site, lê o html gerado pelo site e retorna o primeiro vídeo do resultado. Para ler o html gerado usei a excelente biblioteca SimpleDOM que é escrita em PHP mesmo.

O código está bem cru, não checa por eventuais erros, quando por exemplo não se acha nenhum vídeo a partir do termo desejado. Devo dizer que foi um pouco difícil se concentrar no projeto, depois de testá-lo estava com a mão doendo, de tanto programar é claro. Link para donwload do código logo abaixo:

Update: Um gentil samaritano cedeu um pouco de espaço para experimentação do programa, não preciso dizer que a página é NSFW. Teste a vontade aqui.

Download.

domingo, 12 de setembro de 2010

Árvores para que te quero?!

Atualmente estou lendo o livro "Data Structures And Algorithms" (que pode ser obtido de graça e legalmente aqui).

Meu treinamento formal nestes assuntos foi muito insuficiente e como estas disciplinas são a base de todo o software eu achei que seria muito bom aprender sobre isso.

Estruturas de dados em forma de árvores não são muito frequentes no desenvolvimento de software web usando bancos de dados relacionais. A não ser naqueles casos onde por exemplo você tem categorias que possuem subcategorias e estas subcategorias podem possuir suas próprias subcategorias, ou no caso de menus e submenus de vários níveis. Uma das causas disso é a própria arquitetura dos bancos de dados relacionais, que não foi pensada para tratar estes casos. Como escrever uma consulta sql que retorne uma categoria e também todas suas subcategorias não importando a quantidade e nem o aninhamento das subcategorias?

É claro que as pessoas criaram soluções que permitem armazendar e recuperar informações estruturadas como árvores em bancos relacionais, já vi que existem soluções no Oracle e Postgre que permitem tranquilamente escrever a consulta sql citada acima.

No intuito de treinar e aprender mais sobre Árvores Binárias (com ajuda do livro "Data Structures And Algorithms") eu escrevi um pouco de código (PHP) que talvez possa ajudar outras pessoas também interessadas em aprender sobre este tipo de estrutura de dados. O código é bem simples e apenas permite a inserção e recupreação dos nós de uma árvore. Também imprime esta árvore na saída padrão.

Download Código.

quarta-feira, 4 de agosto de 2010

Google Wave foi-se embora

Através de um post no seu blog a Google anuncia que não irá mais desenvolver o Google Wave como produto. Eles alegam que a coisa não pegou, e como sabemos a chave para se ganhar alguma coisa com um serviço gratuito é a audiência.

Eu não experimentei e pelo jeito não vou experimentar. Até mesmo a Google erra, mas não podemos deixar de admitir que os caras estão sempre inovando e pensando um pouco a frente da maioria das pessoas. Quem sabe algum dia no futuro algo parecido com o Wave "surja" e se torna um novo hit?

Bom, pelo menos no post que citei acima eles disseram que algumas partes do código do Wave e seus protocolos (que são partes impressionantes) estão disponíveis na forma de código open source. Talvez outros programadores possam aproveitá-las e criarem a próxima onda.

quinta-feira, 22 de julho de 2010

IT Crowd - The Game

Que tal ajudar as Indústrias Reinholm com seu novo sistema de suporte remoto?

Já assistiram a algum episódio do seriado britânico "The IT Crowd"? Bom acontece que agora eles também possuem um jogo disponível no site deles. The IT Crowd Game parece um daqueles jogos estilo "Tower Defense" mas neste jogo você deve proteger os computadores de seus clientes contra vírus e spams.

Ah! E recomendo a série, os episódios são muito bons e já estão na quarta temporada e com a quinta já engatilhada!

segunda-feira, 19 de julho de 2010

Randomicidade randômica

Cedo ou tarde todo mundo que começa a programar se depara com as funções que geram número aleatórios ou randômicos. Bom na verdade estas funções não são realmente aleatórias, elas são pseudo geradores de números aleatórios. Geralmente estas funções usam fórmulas matemáticas ou tabelas pré-calculadas de números. Existem também formas verdadeiramente aleatórias de se gerar números, usando-se por exemplo ruído atmosférico gerado por tempestades ou fenômenos da física quântica. Neste link você pode achar um artigo bem completo falando sobre as duas formas de gerar números aleatórios.

Voltando as nossas queridas linguagens de programação cabe uma pergunta aqui, o quão randômica é a função de gerar número aleatórios de cada linguagem?
Abaixo faço uma pequena análise visual das funções mais comuns de cada linguagem para geração de números aleatórios. Disponibilizo também o código fonte usado para gerar cada imagem.
Devo dizer que é uma análise sem muito rigor e que isso não deve ser visto como crítica a uma linguagem ou outra. Como é comum que recursos do sistema operacional sejam utilizados na hora de gerar os números é útil informar que todos os testes foram feitos usando-se o Ubuntu 8.10 versão de 32 bits.

Linguagem C



Eu usei o seguinte comanado para compilar este código:

cc -o c-rand $(pkg-config --cflags --libs cairo) c-rand.c
E como você pode ver é necessário ter a biblioteca cairo instalada. No linux não deve ser muito difícil de instalá-la, no Ubuntu um 'sudo apt-get install libcairo2-dev' deve bastar.

Java


A versão da máquina virtual usada foi "1.6.0_14". Para fazer funcionar é só usar os tradicionais javac e java.

Perl



A versão do Perl utilizada foi 5.10.0. Um comando ./nomescript.pl deve ser o bastante para executar o código. Lembre-se de dar permissão de execução ao script.

PHP



A versão do PHP usado para executar foi 5.2.6. Um comando php nome_arquivo.php deve ser o suficiente para rodar.

Python



O python utilizado foi o 2.5.2. Novamente um comando do tipo python nome_arquivo.py deve rodar o código sem problemas.

Ruby



O Ruby utilizado foi o 1.8.7. Um comando ruby nome_arquivo.rb deve fazer a mágica. Note que usei a biblioteca RMagick, provavelmente você precisará instalar esta gem para rodar o código.

Concluindo
Quanto mais uniforme a figura gerada menos aleatório foi o processo de geração dos números. Uma imagem que se destaca (de forma ruim) é a imagem gerada pela linguagem Ruby. Estas imagens são bem pequenas (elas foram ampliadas), tem uma resolução de 20x20. Ou seja, a função que gera os número foi chamada somente 400 vezes (20 * 20). Você pode alterar o código que desejar aumentado a resolução da imagem gerada (basta aumentar o valor da varável TAM) para ter um panorama melhor.
Para finalizar uma pergunta: Qual das linguagens você acha que é a mais randômica?

quarta-feira, 14 de julho de 2010

Aquela para perder a amizade

Em homenagem a Paul o polvo "vidente".
Sabe porque o polvo vai para a academia?
Para ficar moluscoloso.

Atenção! O Ministérido da Saúde adverte: Contar este tipo de piada para amigos, familiares ou parceiros pode acarretar em sérios danos a sua relação.

quarta-feira, 16 de junho de 2010

Acesso grátis a livros sobre Desenvolvimento de Games

Só uma dica rápida. O pessoal do site boingboing.net está fazendo uma competição de criação de games e através de uma parceria com o site Safari Books eles estão disponibilizando livros sobre o tema.

Mais detalhes é acessar aqui.

Os livros ficam disponíveis através do site da Safari Books, mas é bem fácil de usar a interface do site. Pelo que vi os livros ficam disponíveis por 30 dias, após isso você provavelmente deverá ter que pagar uma taxa. O site funciona no esquema de assinatura.

Estou lendo o livro Fundamental of Game Design. Espero conseguir terminar antes que o prazo final de 30 dias acabe. Boa leitura a todos!

domingo, 13 de junho de 2010

Ubuntu 10.04 - Lucid Lynx

Já faz algumas semanas que instalei a mais nova versão do Ubuntu, a 10.04, no pc do meu trabalho. E devo dizer que achei ele muito bom, a inicialização está bem rápida e gostei muito do novo visual.

Ainda estou me adaptando a mudança dos botões minimizar, maximizar e fechar das janelas dos aplicativos que agora ficam na esquerda (no trabalho ficam do lado esquerdo e em casa do lado direito), talvez tenha como configurar isso mas com eu gostei muito do sistema e penso em migrar meu pc pessoal para a versão 10.04 então vou deixar assim para ir me acostumando.

Depois do sistema instalado comecei a jornada de instalação dos meu softwares favoritos sem os quais eu não vivo sem. E como não poderia deixar de ser o PHP está entre eles. E me surpreendi após instalar o LAMP e perceber que a versão padrão do PHP nos repositórios oficiais é a 5.3.

Já a algum tempo eu queria poder ter a força de vontade de instalar esta versão no meu pc pessoal para experimentar as novas funcionalidades (closures no php deve ser demais!). Mas eu não sabia se meus projetos rodariam no php 5.3, se o CodeIgniter rodaria e não achei uma maneira fácil de instalar mais de uma versão do php na mesma máquina rodando lado a lado (talvez foi falta de ter procurado mais).

Com a versão 5.3 já instalada no pc do meu trabalho, onde eu também utilizo o CodeIgniter, eu pensei, "Vamos ver no que isso vai dar!". E não é que o CodeIgniter rodou bonitinho no php 5.3?! Fiquei aliviado com isso. Depois olhando nos fórums encontrei um post dizendo que eles tinham adaptado o código para ser compatível com a versão mais nova do PHP. A única coisa que deu errado foi uma chamada a função "eregi" que agora está marcada com deprecated, mas isso estava em um código desenvolvido internamente.

Aqui vão alguns links para o pessoal que necessita rodar o php 5.2 no Ubuntu 10.04:
http://randyfay.com/node/63
http://blog.hostweb.com.br/ubuntu-10-04-lucid-lynx-com-php-5-2-10-karmic-koala/hostweb
http://www.nickveenhof.be/blog/reverting-or-downgrading-php-53-52-ubuntu-lucid-lynx-1004

Eu não testei nenhuma solução porque vou continuar com o php 5.3, afinal, algum dia ele deve se tornar o padrão nos hosts espalhados pelo mundo.

quarta-feira, 28 de abril de 2010

Obtendo os arquivos editados em um período usando o Subversion

Onde trabalho usamos o Subversion. Não sou muito fã dele, talvez mais por não saber usá-lo muito bem.
Frequentemente me pego trabalhando em um conjunto de arquivos na minha máquina local testando e desenvolvendo alguma coisa e depois eu preciso enviar estas alterações para o servidor on-line (eu sei que é bem amador esta forma de trabalhar, mas onde trabalho não somos incentivados a mudar isso). Ao invés de mandar todos os arquivos ou ficar tentando lembrar o que foi mudado eu uso o seguinte comando para me dizer quais arquivos foram alterados no projeto dentro de um determinado período:

svn diff -r {'2010-04-28 22:00:00'}:{'2010-04-28 22:05:47'} | grep "Index:" > ~/diff

Um arquivo chamado "diff"  vai ser gerado no diretório home (se você estiver usando linux) com uma listagem de todos os arquivos alterados (que passaram pelo commit) no repositório entre 28/04/2010 ás 22:00:00 até 28/04/2010 as 22:05:47. O arquivo vai ficar assim:
Index: arquivo1
Index: arquivo2.php
...

Você também pode usar números de versão se quiser, por exemplo:
svn diff -r 13:17 | grep "Index:" > ~/diff

Neste caso todos os arquivos alterados entre a versão 13 e a versão 17 serão listados. Não se esqueça de remover as chaves ({}) do comando.

É isso aí, só uma pequena dica, espero que possa ajudar alguém.

quarta-feira, 21 de abril de 2010

Um poema de Piet Hein...

Só para compartilhar um pequeno poema que vi hoje enquanto lia o livro Dreaming in Code  de Scott Rosenberg:
The Road To Wisdom
The road to wisdom? Well, it's plain
And simple to express:
Err
and err
and err again,
but less
and less
and less.
Piet Hein

Uma tradução minha não-oficial e propensa a erros:
A Estrada para a Sabedoria
A estrada para a sabedoria? Bem, é fácil
E simples de expressar:
Errar
e errar
e errar de novo,
mas menos
e menos
e menos.


É isso aí. Recomendo muito o livro "Dreaming in Code".

domingo, 28 de março de 2010

Enviar endereços de e-mail na url com o CodeIgniter

No meu último projeto eu estava trabalhando em uma função de confirmação de e-mail. Funciona assim, o usuário se registra no site e depois clica em um link enviado para o e-mail que ele registrou. É relativamente simples de se fazer, o problema é que eu queria passar o e-mail deste usuário na url do link que foi enviado para ele, mas na configuração padrão do CodeIgniter isto não é possível.
No arquivo de configuração do CodeIgniter (system/application/config/config.php) existe uma configuração chamada 'permitted_uri_chars'. O padrão dela deve ser mais ou menos assim:

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';

Basicamente este parâmetro diz do CodeIgniter quais caracteres são válidos nas urls interpretadas por ele. Para ser possível enviar e-mails na url o @ deve figurar nesta configuração. Você só tem que tomar cuidado para deixar o traço(-) na última posição (não me perguntem porque). Assim enviar e-mails na url pode ser possível com a seguinte configuração:

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_@\-';

É isso aí, espero que isso possa ajudá-los.

terça-feira, 16 de fevereiro de 2010

Jason Fried (37signals) falando um pouco sobre desenvolvimento de software

Apresentação muito muito boa de Jason Fried onde ele fala sobre como eles tocam o negócio de desenvolvimento de software na 37signals.
A visão dele mostra como eles são autorais ao criar os produtos deles. Ele fala sobre dizer não mais frequentemente que sim (principalmente para as requisições de usuários), software inchados de funcionalidades, como eles não possuem plano de negócios, etc. E tem muitas outras dicas bem legais. Recomendo assistir o vídeo.
Apresentação Jason Fried.

sábado, 6 de fevereiro de 2010

Tradução - Enviando e-mail via Gmail usando CodeIgniter

Olá galera. Estou trabalhando em novo projeto e nele preciso enviar e-mails. Acontece que por enquanto o código só está na minha máquina de desenvolvimento e eu não tenho um servidor e-mails. Procurando por uma solução achei este artigo do Joel Gascoigne. Nele o Joel ensina como usar a biblioteca de e-mails do CodeIgniter para enviar e-mails usando uma conta gmail, o que é excelente para quando você quer testar funcões de envio de email localmente. Com autorização do autor original aí vai a tradução do artigo dele.

Eu acabei de implementar esta funcionalidade para o OnePage e gostaria de compartilhar no caso das pessoas acharem útil.
Porque enviar e-mail usando o Gmail ao invés de usar uma configuração de um servidor SMTP?
Existem algumas vantagens que vejo fazendo desta forma:
  • A possibilidade de desenvolver localmente e testar o envio de e-mails sem ter o trabalho de configurar um servidor local de e-mail.
  • A possibilidade de usar os emails Google Apps para enviar e-mails a partir de e-mails que estão sobre seu próprio domínio.
  • A possibilidade de ter referências dos e-mails que você envia usando este método na sua pasta "Enviadas" na sua conta Gmail.
Vamos lá!
Agora que decidimos que este é o caminho que tomaremos, vamos começar! Na verdade é bem simples, especialmente com o fantástico framework CodeIgniter sua classe Email. Isto deve funcionar bem somente com o PHP regular ou com outros frameworks se você usar os mesmos conceitos demonstrados aqui. E também devo dar créditos para o usuário wrs dos Fórums CodeIgniter, uma vez que minha solução foi baseada no post dele.
Um novo arquivo de configuração - email.php
Coloqueo o código seguinte dentro de um novo arquivo de configuração chamado "email.php" e coloque este arquivo dentro do diretório application/config. Arquivos de configuração nomeados com o mesmo nome de uma biblioteca são incluidos automaticamente, é isso que estamos fazendo aqui.



Tenha certeza de alterar 'seu email gmail aqui' e 'sua senha gmail' apropriadamente.
Enviando email, agora através do Gmail
Agora qualquer e-mail enviado usando a classe Email do CodeIgniter vai na verdade ser enviado da conta Gmail escolhida:



Uma inconveniência deste método
Existe uma inconveniência deste método, que é que você não pode especificar o email "from" para outro email que não seja seu endereço Gmail ou um endereço de e-mail associado com sua conta Gmail. Todo e-mail vai ser enviado da conta de e-mail que você configurou como padrão na sua conta Gmail.
Possível Erro - "Unable to find the socket transport 'ssl' - did you forget to enable it when you configured PHP?"

Se você recebeu este erro, como eu recebi, então você precisa habilitar o SSL na configuração do PHP. Abra o php.ini e encontre uma linha como a seguir:
;extension=php_openssl.dll
Simplesmente remova o ";" e reinicie o Apache e você deve estar pronto. O ";" denota que a linha é um comentário, e removendo isso é habilitado a extensão SSL para o Apache. Crédito - http://www.boringguys.com/2007/07/20/unable-to-find-the-socket-transport-ssl-did-you-forget-to-enable-it-when-you-configured-php/
Isso é tudo!
Eu espero que isso seja útil para algumas pessoas :) Eu uso isso principalmente para densenvolvimento local - é muito bom ser possível testar tudo.
Se você acha meus posts úteis , você deve checar meu site OnePage e me seguir no twitter.
Fim tradução.

É isso aí pessoal, eu testei usando minha conta gmail e funcionou direitinho, qualquer dúvida ou problema comentem aí. Até a próxima.

terça-feira, 2 de fevereiro de 2010

Apresentação do Hip-Hop

Acabei de assistir a apresentação "oficial" do pessoal do Facebook sobre o Hip-Hop, o "transformador de código" como eles disseram. Basicamente o pessoal disse o que já estava neste link Agora tem este outro link para uma página do projeto dentro do site deles. Mas mesmo assim ainda não consegui acessar nada no GitHub.

O Hip-Hop de acordo com a apresentação funciona muito bem o código "mundano", ou seja aquele código mais simples que não usa os recursos "mágicos" do PHP. Coisas estáticas como classes e varáveis se beneficiam muito das otimizações do Hip-Hop. Mas os recursos dinâmicos não obtém o mesmo retorno. Um exemplo interessante que eles mostraram foi a função "function_exists", já que no PHP uma função pode estar declarada antes ou depois da checagem com function_exists. Mas muita coisa dinâmica eles conseguem suportar como extract, chamadas de funções dinâmicas, redeclaração de funções e classes, etc.

Como o apresentador disse, quem vive no mundo de hosts compartilhados (meu caso) não deve tirar muito proveito do Hip-Hop por agora. E pelo que entendi, somente no mundo *nix o Hip-Hop está disponível.

O fluxo de desenvolvimento é basicamente o mesmo existente, você cria um arquivo .php coloca seu código nele testa em um servidor e quando estiver pronto você roda no Hip-Hop e coloca em produção. Eles queriam aproveitar esta característica de rápido desenvolvimento do PHP aliado com o desempenho do C++.

Eles basicamente tiveram que reescrever todas as extensões da linguagem PHP, uma coisa engraçada foi quando um cara perguntou como eles contornaram a questão de que muitas extensões PHP não eram thread-safe e o apresentador respondeu que eles tiveram que "resolver" estes problemas.

Por enquanto é só, quando eu conseguir por as mãos no Hip-Hop quero postar alguma coisa aqui. Valeu!

Saiu! HipHop o compilador PHP feito pelo Facebook

Aí vai o link para o post sobre o projeto, feito por um dos envolvidos. Na verdade não é um compilador, ele transforma seu código PHP em C++ e compila usando o g++, ou seja, é um tradutor PHP->C++.
Agora é tentar testar o cara! Até mais.

Update: O repositório do projeto no GitHub está fora do ar, ou melhor, o GitHub está fora do ar.

Update II: Na página indicada pelo link acima eles vão fazer uma apresentação ao vivo falando do HipHop. No horário brasileiro deve ser as 01:30. Depois desta apresentação o código deve ser liberado.

Facebook pode estar preparando um compilador para a linguagem PHP

Estão dizendo por aí na web que o Facebook deve lançar um novo projeto open-source hoje. E que esse projeto provavelmente é um compilador PHP. Ou seja, você poderia pegar seu código fonte escrito em PHP e transformá-lo em código nativo da máquina. Em teoria isso poderia aumentar muito a velocidade de execução dos códigos da linguagem.
Uma boa parte da base de código do Facebook é escrita em PHP, e com os milhões e milhões de usuários que a rede social tem, um pequeno ganho na velocidade de execução pode significar muita coisa. Vou ficar de olho na página de projetos open-source deles a partir de hoje, talvez sai alguma coisa lá.

sábado, 23 de janeiro de 2010

O PHP e suas surpresas

Graças a um erro em uma função criada por mim, meu site estava com um bug constrangedor, pelo menos agora já está corrigido.

O problema da função que criei era que ela deveria retornar um array, mas, devido a um lapso momentâneo meu, ela estava retornando uma string. Acontece que o PHP considera uma string como um array de caracteres, mas até aí isso parece uma consideração bem lógica. Se você tem a varável $nome por exemplo, você pode acessar o primeiro caractere assim:

$nome = "Maria";
echo $nome[0]; // escreve M

Mas quando eu recebia o retorna da minha função eu não estava usando números inteiros como índice para acessar os valores do array (como usei o 0 no exemplo anterior). Eu usei strings como indices. Nestas horas que a tipagem fraca do PHP conjuntamente com uma inferência de tipos bem flexível mostra uma das desvantagens da plataforma (pelo menos para os mais desavisados como eu estava neste caso). O que você esperaria como saída no código abaixo:

$nome = "Maria";
echo $nome['valor']; //????

Bom, de acordo com a documentação do PHP, valores não inteiros usados como índice para strings são convertidos para inteiros. E o que o PHP faz quando tem que converter uma string como 'valor' (que não tem nada de número inteiro) para inteiro? Bem ele converte para 0 (zero). Silenciosamente ele converte um índice do tipo string para 0 do tipo inteiro. Assim o código assima exibe a mesma saída do código anterior a ele.

Isso não é um ataque ao PHP, o erro foi meu. Isso só serve para mostrar que você deve tomar bastante cuidado com estas conversões de tipo implícitas que o PHP faz.

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.