Erro com a gem mysql2 no Mac OS X

Já falei antes sobre como resolver o problema da gem mysql2 no Linux, agora tive um problema parecido no Mac OS X e consegui encontrar a solução em um comentário num blog, então vou documentar aqui também:

O problema que tive foi que a gem não encontrou uma biblioteca do MySQL client, essa foi a mensagem de erro:

dlopen(/Users/brunno/.rvm/gems/ruby-1.9.2-p320/gems/mysql2-0.2.18/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Users/brunno/.rvm/gems/ruby-1.9.2-p320/gems/mysql2-0.2.18/lib/mysql2/mysql2.bundle
  Reason: image not found - /Users/brunno/.rvm/gems/ruby-1.9.2-p320/gems/mysql2-0.2.18/lib/mysql2/mysql2.bundle

Porém essa biblioteca é instalada junto com o MySQL, só não é visível a todo o sistema, para isso só é preciso criar um link simbólico para ela na pasta de bibliotecas do sistema usando o seguinte comando:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Agora a gem vai funcionar normalmente.

Como adicionar Swap numa instância EC2 micro do Amazon AWS

As instâncias (máquinas, servidores, como você quiser chamar) micro do Amazon AWS EC2 vem com 613MB de memória, o que é suficiente pra bastante coisa, porém em algumas situações você pode chegar rapidamente a este limite. Um característica dessa máquina é que ela não vem com uma partição de memória swap alocada, como é comum no Linux, então vou explicar aqui como ativar e usar swap numa emergência.

AWS Logo

Antes de tudo é bom falar que isso provavelmente não é recomendado, se você estiver utilizando toda a memória disponível é melhor mudar para uma máquina melhor, pois utilizar swap significa que você vai usar o disco como memória, o que é extremamente lento e provavelmente por isso que vem desabilitado por padrão.

Você já foi avisado, então vamos lá, use todos os comandos abaixo como usuário root ou usando o sudo:

Use o seguinte comando para criar um arquivo que vamos usar como swap, aqui coloquei o tamanho de 1GB:

dd if=/dev/zero of=/swapfile bs=1M count=1024

Agora vamos transformar esse arquivo em swap:

mkswap /swapfile

E agora o comando para ativar o swap:

swapon /swapfile

Simples não? Agora caso você queira faze esta mudança ser permanente é bom fazer com que essa "partição" swap seja ativada sempre durante o boot, como fazer:

Abrir o arquivo de configuração de partições:

vim /etc/fstab

Adicionar esta linha no final do arquivo e salvar:

/swapfile swap swap defaults 0 0

Pronto, para testar se está tudo certo use o free:

free -m

No seu resultado deve existir uma linhar parecida com essa:

Swap:         2047          0       2047

Lembre-se de que isso não é uma solução para seu problema de falta de memória, eu mesmo só usei para fins de teste ao instalar um programa que exigia swap mesmo sem precisar.

Qualquer dúvida coloque nos comentários.

Erro ao instalar a gem mysql2 no Ubuntu

Já tive esse problema algumas vezes, essa gem deve ser meio bugada, e todas as vezes tenho que pesquisar para resolver, então resolvi deixar aqui para a posteridade.

No Ubuntu Linux basta instalar o pacote ‘libmysqlclient-dev’ com o comando:

sudo apt-get install libmysqlclient-dev

Depois disso é só instalar a gem normalmente e tudo vai correr bem, se aparecerem alguns erros referentes a RDoc e outras coisas relacionadas a documentação, não tem problema, ainda assim vai tudo funcionar.

Assim que precisar instalar em outro sistema operacional novamente coloco a solução aqui. :)

HTML5 é passado, o negócio agora é HTML

Saiu ontem no blog do WHATWG um artigo do Ian Hickson explicando que o modelo de desenvolvimento da especificação do padrão mudou para um modelo contínuo, um documento vivo, como ele chamou.
Uma das razões para essa mudança é que o modelo de desenvolvimento sempre seguiu um padrão de várias etapas, que podem levar anos para serem concluídas, e que as pessoas simplesmente não estavam mais esperando e estão utilizando a tecnologia mesmo com a especificação ainda estando na fase de rascunho.
Além disso a especificação atual do HTML5 é mais madura do que qualquer outra, então não faz sentido ficar chamando de rascunho.
Essa mudança é muito bem-vinda, pois vai acelerar ainda mais a implementação nos navegadores e a utilização pelos desenvolvedores. Além disso ultimamente havia uma confusão muito grande em torno do termo HTML5, as pessoas estavam usando para se referir a qualquer coisa.
A nova especificação está disponível aqui.
Vida longa ao HTML!

Soul Mate

“Only once in your life, I truly believe, you find someone who can completely turn your world around. You tell them things that you’ve never shared with another soul and they absorb everything you say and actually want to hear more. You share hopes for the future, dreams that will never come true, goals that were never achieved and the many disappointments life has thrown at you. When something wonderful happens, you can’t wait to tell them about it, knowing they will share in your excitement. They are not embarrassed to cry with you when you are hurting or laugh with you when you make a fool of yourself. Never do they hurt your feelings or make you feel like you are not good enough, but rather they build you up and show you the things about yourself that make you special and even beautiful. There is never any pressure, jealousy or competition but only a quiet calmness when they are around. You can be yourself and not worry about what they will think of you because they love you for who you are. The things that seem insignificant to most people such as a note, song or walk become invaluable treasures kept safe in your heart to cherish forever. Memories of your childhood come back and are so clear and vivid it’s like being young again. Colours seem brighter and more brilliant. Laughter seems part of daily life where before it was infrequent or didn’t exist at all. A phone call or two during the day helps to get you through a long day’s work and always brings a smile to your face. In their presence, there’s no need for continuous conversation, but you find you’re quite content in just having them nearby. Things that never interested you before become fascinating because you know they are important to this person who is so special to you. You think of this person on every occasion and in everything you do. Simple things bring them to mind like a pale blue sky, gentle wind or even a storm cloud on the horizon. You open your heart knowing that there’s a chance it may be broken one day and in opening your heart, you experience a love and joy that you never dreamed possible. You find that being vulnerable is the only way to allow your heart to feel true pleasure that’s so real it scares you. You find strength in knowing you have a true friend and possibly a soul mate who will remain loyal to the end. Life seems completely different, exciting and worthwhile. Your only hope and security is in knowing that they are a part of your life.”

— Bob Marley

Mini-Curso de MongoDB e Apresentação sobre PyMongo

Opa pessoal!

Meio atrasado mas finalmente estou postando os slides da apresentação de MongoDB e PyMongo que tive a oportunidade de realizar no VI Encontro do PUG-PE, dia 14/08/2010 na UFRPE:

Mas tem coisa muito melhor, estou aproveitando para colocar também os slides do mini-curso de MongoDB que tive o prazer de ser convidado para apresentar junto com o amigo Daker Fernandes no Workshop de Software Livre 2010 do CInLUG na UFPE no dia 24/08/2010.

O Daker já ia ministrar o mini-curso, mas como me conhecia do PUG-PE e viu minha apresentação sobre PyMongo resolveu me chamar. Valeu Daker!

O mini-curso foi bem legal, todo mundo baixou e instalou o MongoDB na hora, aprendemos algumas consultas básicas e até algumas mais cabulosas e tivemos uma visão rápida de alguns recursos avançados como MapReduce e Sharding.

E é isso pessoal, se você AINDA não conhece MongoDB, dê uma olhada nos slides, pesquise, baixe e use. Pode ter certeza que esse veio para ficar. E qualquer coisa pode gritar que a gente dá uma força no que puder.

Falou!

Auto-Completar no Shell Interativo do Python

Essa dica é retirada desse post no blog fechaTag do Élcio, praticamente uma cópia, mas é tão útil que eu precisava ter aqui para lembrar sempre.

Ao abrir o shell interativo do Python (digitar “python” no terminal), rode os comandos:

[python]
import readline
import rlcompleter
readline.parse_and_bind("tab: complete")
[/python]

Agora é só usar o TAB sem dó para completar os comandos, e é muito útil para descobrir coisas novas também.

Por exemplo digitando “de” e apertando TAB ele mostra as opções:

[python]def del delattr([/python]

E se você por acaso não conhecia o “delattr()” pode começar a pesquisar e ver que ele é útil para você.

Como mapear o SkyDrive como uma unidade de rede no Windows

Como utilizo vários computadores muitas vezes preciso compartilhar arquivos entre eles e nem sempre o velho PenDrive é uma opção. Existem vários serviços de armazenamento online e eu utilizava o Box.Net desde 2007. Já conhecia o SkyDrive da Microsoft há um tempo e sempre achei muito bom por oferecer um espaço generoso para armazenar arquivos (25 GB contra os 2 GB que tenho no Box), porém sempre achei ele mais complicado. Além disso para utilizar direto do Windows Explorer era preciso utilizar programas externos como o SkyDrive Explorer.

Porém, descobri agora que ele permite utilizar WebDAV para acesso remoto e com isso podemos mapear uma unidade para ele no computador e utilizar como uma pasta qualquer, inclusive dentro das janelas de abrir e salvar arquivos dos programas.

Se você não sabe o que é WebDAV ou unidade de rede não se preocupe, eis um simpes passo-a-passo ilustrado de como fazer isso:

Primeiro, vamos baixar um programinha que faz o trabalho de descobrir qual o endereço WebDAV do seu SkyDrive, é o SkyDrive Simple Viewer que não precisa nem ser instalado, basta descompactar e rodar.

Tela do SkyDrive Simple Viewer

Depois de colocar seu login e senha e clicar em ‘Login to my SkyDrive‘ o programa vai listar do lado esquerdo suas pastas (1), ao clicar em uma das pastas para escolher o endereço WebDAV será mostrado logo acima (2). Copie este endereço, pois é o que vamos utilizar para o acesso a partir do Windows Explorer.

Agora abra o Windows Explorer (Meus Documentos, Meu Computador etc) e clique com o botão direito do mouse na opção ‘Rede‘ do lado esquerdo e clique em ‘Mapear unidade de rede…

Mapeando uma unidade de redeAgora vamos utilizar aquele endereço que copiamos anteriormente nessa janela, porém precisamos fazer algumas modificações antes. O meu endereço foi:

https://obfweg.docs.live.net/f02a3fbd151a1fea/^2Public

Nesse caso, o que é preciso mudar é tirar o 'https:' e trocar as barras por barras invertidas '', além de adicionar um @SSL logo depois do endereço principal. Ficando assim:

\obfweg.docs.live.net@SSLf02a3fbd151a1fea^2Public

Coloque este endereço onde está escrito 'Pasta' e clique em concluir.

Mapeando unidade de rede

O windows vai conectar-se ao compartilhamento WebDAV e logo em seguida pedirá suas credenciais (seu login e senha no SkyDrive).

Fornecendo as Credenciais do Windows Live

Depois de fornecê-los e clicar em 'OK' e está tudo pronto.

SkyDrive como Unidade de Rede

Agora você já pode acessar seus arquivos online através do Windows Explorer ou mesmo salvar direto de qualquer programa em sua pasta do SkyDrive.

Código eficiente ainda é importante

Estou utilizando o Google App Engine para desenvolver alguns projetos e, no processo de aprendizado do seu funcionamento e seu sistema de cobrança, me vi pensando na eficiência do código que estou escrevendo.

Código FonteDepois que hardware virou commodity, no sentido de que se tornou muito barato e sem muita diferenciação, código ruim e ineficiente deixou de ser importante para muita gente. Muitos programadores simplesmente desenvolveram a mentalidade de que podem fazer qualquer código “monstro” que o hardware para dar conta disso é mais barato do que melhorar o código. E em parte isso é verdade, pois código bem feito requer programadores bons que não cobram barato.

Mas ultimamente alguns novos conceitos de plataforma podem fazer com que isso mude, coisas como Cloud Computing e Virtualização estão colocando a qualidade e eficiência do código em evidência novamente.

A partir do momento que sistemas como Google AppEngine, Amazon EC2 e Windows Azure (entre outros) permitem que você pague somente pelo poder computacional que utiliza e permitem que suas aplicações cresçam sem com que você se preocupe com o hardware em que sua aplicação roda, as preocupações se voltam novamente para a eficiência do software ao invés do hardware. Principalmente porque isso é o que vai definir se sua aplicação vai ter um alto custo de manutenção ou se você vai na verdade economizar por estar utilizando estas plataformas.

Mas não é somente nesses casos que a eficiência do código é importante, as tecnologias de Virtualização já estão bem difundidas e muitas empresas estão consolidando sua estrutura computacional (servidores e datacenters) em cima disso. Então se um sistema pode rodar em cima de 5 computadores ao invés de 20, isso é economia de dinheiro e energia.

E eu não separei energia de dinheiro sem um motivo. O fato dessas estruturas computacionais economizarem engergia é muito importante do ponto de vista ambiental. Muito se fala hoje em TI Verde e iniciativas que visam diminuir o impacto que a tecnologia tem causado na natureza. Logo, já estamos começando a escutar o termo “código verde” para definir software que é criado com foco na eficiência e na diminuição do consumo de recursos.

Não que não exista preocupação com a eficiência do código em sistemas e sites atualmente, mas normalmente isso é deixado por último e somente quando os problemas surgem é que os desenvolvedores se preocupam com isso. Mas com as tendências de computação em nuvem e SaaS (Software como um Serviço), isso deve ser pensado desde o início.

Quem sabe não deixaremos de encontrar coisas como:

SELECT * FROM users WHERE 1=1

Python Coding Dojo em Recife

Estou disponibilizando a apresentação que dei sobre Coding Dojo no II Econtro do PUG-PE (Grupo de Usuários Python de Pernambuco). O grupo está bem ativo e estamos com encontros mensais. No próximo encontro teremos um Coding Dojo estilo Randori, quem quizer conhecer veja a apresentação e apareça. Se cadastre na nossa lista e dê uma olhada no Blog.