SVN #fail com muitos arquivos

Durante a semana precisei trabalhar em um projeto que tem muitas imagens geradas por script. Decidi fazer cache dessas imagens deixando em disco/memcached.

O problema: SVN lento para fazer operações com muitos arquivos (no meu caso nem são muitos: 10000).

A solução: tar -zcvf buttons.tar.gz buttons/

E no deploy: tar -zxvf buttons.tar.gz

Comprimi todos arquivos em um só e depois de colocar em produção descomprimi. Assim o SVN não dá azia e não preciso me preocupar com RMagick no server ;)

YQL + Y! Geocoding API + Google Maps

Sábado eu comecei a procurar uma casa para morar. Eu preciso de uma casa grande e sem vizinhos, assim posso fazer umas festinhas e vender minha cervejinha artesanal. A casa também precisa ficar próxima ao "busão da UEL".

O problema: nenhum site de imobiliária presta, quanto mais em Londrina.

Poucos sites de imobiliárias mostram as opções em um mapa e nenhuma das páginas que "unem os imóveis de várias imobiliárias" funcionam.

A solução: escrever código.

Com Yahoo Query Language (YQL) eu busquei as "casas para alugar" de 7 imobiliárias.
De fato essa é a parte mais complicada e demorada uma vez que cada imobiliária usa um "padrão" diferente para apresentar as informações e o trabalho aumenta ainda mais por causa da má construção de certas páginas.

Das 7 imobiliárias foi possivel extrair cerca de 100 casas para locação.

Para inserir as informações no mapa foi preciso de uma API de Geocoding. Esse tipo de serviço transforma um endereço (rua e número) em coordenadas geográficas (latitude, longitude).
Minha primeira tentativa foi usar a API de Geocoding ...

glTail - Visualização de Log

glTail é um visualizador de logs escrito em Ruby. Os gráficos são gerados com a biblioteca ruby-opengl e a física das partículas é feita com Chipmunk, uma lib para desenvolvimento de física em games que possui ótima integração com Ruby.

Com ele é possível ter acesso a estatísticas em tempo real de vários serviços como Apache, Nginx, MySQL, Squid e aplicações Merb/Rails.

Tudo que você precisa para utilizar é instalar a gem (sudo gem install gltail) e alterar o arquivo de configuração para os dados de SSH e caminho de arquivos do seu servidor.

O amigo @evertonfraga testou a ferramenta com o log do Nginx no We heart it e mandou o vídeo pro Qik, vejam que legal que é:

Processing

Não deve fazer mais que seis meses que CouchDB e Hadoop (que pretendo observar de longe) e Processing e Objective-C começaram entrar na minha cabeça. Espero que essas coisas não afastem meus problemas atuais em Ruby (Merb).

O motivo de eu estar tão animado com Processing (e Arduino é lógico) é resumido nessa frase do why.

(...) não é só a popularidade do Processing que é animadora. Uma coisa é uma linguagem se tornar popular entre cubículos e salas de servidores. Processing é um ambiente ganhando respeito em salas de aulas, salas de edição e até em baladas.
http://hackety.org/2008/11/25/sevenYearsLaterProcessingLeavesBeta.html

Realmente... eu lembro de ter visto a Björk usando isso há mais de 1 ano.
Veja uma animação feita com Processing:


Metamorphosis from Glenn Marshall on Vimeo.

Como mostrado aqui é possível utilizar Ruby para fazer Live Coding com Processing. Existem também outras bibliotecas em outras linguagens.

Parsear HTML sem expressão regular

Então certo dia lá estava eu, tentando uma expressão regular para interpretar (ou parsear) HTML. Uma tarde inteira tentando "achar" um elemento do HTML e substituir por outro. Apanhando da Regex...

Levantei, bebi agua e reclamei alto da vida. O Marco me perguntou o motivo do momento de fúria. Expliquei e fui submetido a mais um daqueles momentos "como eu sou tão estupido" que está ficando comum comentar aqui.

"Usa o jQuery porra!"

Uma das principais coisas fodas do jQuery é como ele trata o DOM (Document Object Model) das páginas e como ele permite buscar pela arvore de elementos "desse tal" de DOM. Ele armazena tudo de maneira bem leve e consegue procurar absurdamente rápido dentro dos elementos do HTML.

E o melhor: o jQuery permite que você crie essa "arvore de elementos" enviando uma string que contenha HTML/xHTML (XML para ser mais exato).

O código fala mais que a histórinha:

[sourcecode lang="js" gist="14265"]
var els = $('

Historinha

');

// pega elementos que estejam dentro de uma


  • var as1 = $('li.last a', els);

    // pega elementos que estejam dentro de uma


  • var as2 = $('li a.nice', els);
    [/sourcecode]

    Para ...

    Rails Summit Latin America


    Rails Summit Latin America
    Nos dias 15 e 16 de Outubro acontece em São Paulo o Rails Summit Latin America.

    O evento terá a presença de mágicos da comunidade Ruby como Dr. Nic, monstros como Chad Fowler, Chris Wanstrath (GitHub), Charles Nutter (jRuby) e a dupla Phusion (Ninh Bui e Hongli Lai). Estão também agendadas palestras de nomes da comunidade nacional: Manoel Lemos (BlogBlogs), Vinícius Manhães Teles (Improve it), George Guimarães (Pagestacker), Fabio Akita (LocaWeb) e outros que espero conhecer o trabalho assistindo as palestras.

    O valor será R$300,00 se você comprar antes de 09/09/2008 e R$400,00 após 10/09/2008. Na minha opinião, um preço bem abaixo do valor real do evento.

    A programação completa e a inscrição pode ser acessada aqui.

    Obs: A quantidade absurda de links foi proposital. Se você está interessado em estudar Ruby/Rails, siga os caras!

    Ruby é sobre deletar código

    Ok, eu não sou um jedi em Ruby ainda, mas lendo o Ruby Cookbook[bb] pretendo me tornar um. O comportamento que você vai perceber nas telas eu aprendi lá!

    Wow - nós estamos deletando mais código do que estamos mantendo!

    Yeah, claro que estamos. Você não faz isso sempre?

    As duas imagens abaixo foram adaptadas da apresentação Rails Taking the Red Pill que o Demetrius Nunes fez lá no Rio on Rails. Ela demonstra no código o paradigma "Convenção sobre Configuração" adotado pelo Rails.

    Tentar a perfeição na primeira implementação é uma forma de especulação. É extremamente difícil julgar a clareza de algo que você não pode ler, ou a performance de algo que você não pode executar.

    Quanto mais fácil de refatorar, ou reescrever (uma forma de refatorar), melhor. Essa é uma das razões de eu ser a favor de linguagens densas.

    As citações são traduções de trechos do artigo Wearing Out My Delete Key de James Golick, leia!

    Invisible Ruby mini-framework

    O pirado que desenvolveu o Thin web server, Marc-André Cournoyer também criou seu próprio framework: Invisible, que é bem parecido com o Sinatra (um outro mini-framework Ruby).

    ORM (Mapeamento objeto-relacional), aquele lance que no Rails você conhece por ActiveRecord que transforma linhas da base de dados em objetos do Ruby.

    Seguindo a linha do Sinatra, ele é um pequeno suporte para fazer a ligação entre a aplicação e o web server, deixando toda a escolha de "como organizar a estrutura da aplicação", "que ORM usar" ou até mesmo "usar ORM?" para o desenvolvedor.

    Vale a pena dar uma olhada nessa aplicação exemplo e guarda-lo no seu Pagestacker, quem sabe um dia não surge um projetinho que encaixa com a estrutura desse frame, huh?

    Mudança de paradigma em webservers encaixa Nginx no mercado

    A época de ouro do Apache parece ter acabado há algum tempo. Após muitos anos sendo o servidor de aplicações para Web mais usado (na realidade ainda sendo o mais usado), o market-share do Apache está em queda há algum tempo segundo o Netcraft.

    Mas eu não vim aqui para enterrar o coitado do Apache, provavelmente já fizeram muito disso por aí... sem necessidade na minha opinião. Muitos problemas ainda podem ser resolvidos com ele, sem contar que é muita falta de consideração jogar pedra em quem te alimentou por todo esse tempo (mais de 10 anos) não é?

    Estou aqui para falar das entrelinhas no levantamento de Junho da Netcraft. Mais precisamente quando eles expõem o seguinte: "nginx mais que dobrou em números; com um ganho de mais de 1 milhão de sites".

    Nginx


    Nginx para quem não sabe é um servidor web escrito pelo russo Igor Sysoev que também pode ser usado como proxy reverso ou e-mail proxy (fique ligado no RSS para receber atualizações sobre proxy reverso).

    Dentre as vantagens do engine X (pronúncia de nginx) estão:


    • estável

    • configuração simplificada

    • baixo consumo de recursos ...

    Thin próximo da versão 1.0

    Ontem o desenvolvedor do Thin, Marc-André Cournoyer, lançou o que parece ser um release candidate para a primeira versão estável do seu servidor de aplicações Ruby[bb].

    Batizada de "Double Margarita" a versão 0.8.2 não vem com muitas funcionalidades novas mas corrige todos problemas graves das versões anteriores.

    Para quem não sabe do que se trata, Thin é um web server Ruby que utiliza o que há de melhor para processamento HTTP no mundo Ruby:


    • O Parser do Mongrel, de onde vem toda a velocidade e segurança do Mongrel

    • Event Machine, uma biblioteca de network I/O com foco em escalabilidade, performance e estabilidade.

    • Rack, a interface (API) entre web servers e frameworks Ruby

    Essas características dão ao Thin o posto de "mais rápido que Mongrel com menos memoria que Mongrel"

    Thin vs Mongrel: requisições/segundo
    Thin vs Mongrel: uso de memoria

    Veja o artigo que compara Thin e Mongrel de onde reproduzi os gráficos

    Porém ainda vejo outra vantagem além da performance atual que é a possibilidade de Thin rodar em Ruby 1.9 desde sua versão 0.5.1, permitindo aos desenvolvedores do "ambiente Thin" (leia-se Merb) desenvolverem suas bibliotecas compatíveis com o ...

  • About Me