terça-feira, agosto 13, 2013

Ruby method parameters

Encontrei essa ontem: desde a versão 1.9.2-180 existe uma introspecção que retorna quais são os parâmetros de um método.

Confuso? Vai um pouco de código, então:

Ele retorna um array com arrays de 2 elementos, o primeiro symbol é o tipo e o segundo o nome do parâmetro:

  • :req - parâmetro obrigatório
  • :rest - parâmetros variáveis (usando "*" splat)
  • :key - parâmetro nomeado (novo no Ruby 2.0)

sábado, agosto 10, 2013

VIM - "Power of g" + "normal" (massacrando logs)

Essa página aqui me deu a idéia de mostrar uma das coisas que mais gosto no VIM: massacrar logs (e outros arquivos maiores do que minha preguiça permite trabalhar manualmente).

Aqui nesse site aqui tem alguns exemplos de logs legais para brincar: http://www.monitorware.com/en/logsamples. Eu peguei os do PostFix (e-mail) para usar de exemplo.

Copiar todas as linhas com "reject:" para o final do arquivo

:g/reject:/t$

":g" executa comandos em todas as linhas em que a expressão regular der match. O comando "t" copia a linha para um certo endereço. "$" é o endereço para "fim do arquivo".

Se você quiser mover a linha ao invés de copiá-la, troque o "t" por "m".

Copiar todas as linhas com "reject:" para o registrador "a" (para colar onde quiser depois com "ap)

qaq (isso limpa o registrador "a") 
:g/reject:/yA ("y" copia a linha e "A" adiciona ao registrador "a")
ou
:g/reject:/normal "Ayy

Tudo o que vier a seguir do comando "normal" é tratado como instruções do VIM. Ou seja, no exemplo acima "Ayy adiciona a linha no registrador "a" da mesma maneira que você faria na edição normal do vi. "normal" é o comando mais cabeludamente ninja do VIM, pois permite que vocẽ execute macros nas linhas que deram match!.

Aí sim!!!!

Copiar as linhas com "Domain not found" para o final e ficar apenas com o endereço de destino

:g/Domain not found/t$ | s/.*to=<// | s/>.*//

Dá para separar comandos com "|" (pipe). No caso acima, dupliquei para o fim do arquivo e já removi começo e fim de linha que não interessavam. Quando as operações são mais complicadas, o pipe é indispensável ;)

É isso! Eu gosto de pensar no VIM não é um editor de textos, mas como um editor de código com uma linguagem de programação interativa (e suscinta) embutida :D

quinta-feira, junho 13, 2013

Sobrevivendo ao Arch Linux - Atualizando Repositórios do PACMAN

Depois de alguns anos feliz e contente usando o Ubuntu, resolvi me aventurar no Arch Linux (mérito de convencimento do Marcello (vulgo "Cabello") e Marcel (vulgo "Barba"), seus vagabundos!)

**AVISO AOS TRANSEUNTES INCAUTOS**

O Arch Linux não é para os desavisados, a premissa dele é que você precisa entender o sistema para usá-lo. O que significa um bocado de leitura e pesquisa na internet. Use ele se quiser acelerar seu aprendizado, não para ter resultados rápidos e instantâneos sem esforço.

Dado o aviso, vamos ao que interessa: Pequenas dicas para tornar a vida mais fácil.

Atualizando Repositórios

Você tem sua boa e velha lista de repositórios do Arch Linux, mas quando vai instalar algum programa usando o "pacman" ou o "yaourt", percebe que alguns estão lentos, ou pior, alguns pacotes não são encontrados. O que fazer?

  > sudo reflector -l 10 --sort rate --save /etc/pacman.d/mirrorlist
  > sudo pacman -Syy

O reflector é um pacote que você pode instalar via o próprio pacman (ou yaourt):

Rode esse comando uma vez a cada mês que você vai estar sempre bem.

terça-feira, junho 04, 2013

Do the simplest thing that could possibly work

Ontem na empresa surgiu uma excelente discussão sobre o ponto.

Pelo que andei fuçando, existe um grande debate (até hoje) sobre o que significa "Simplest". IMHO:

"Simplest" ≠ "Easiest" ≠ "Quickest"

Essa frase aqui do Ward Cunningham é boa para ilustrar:

We choose simple solutions first so that we can maintain focus on the customer's problem. Simple means easy to reason about. Easy serves as a synonym for simple so long as we remember that it is the thinking that should be easy. -- WardCunningham

(ênfases minhas)

Em termos de arquitetura, minha tradução para "mais simples" se resume a pensar em 4 aspectos:

  • Metáforas (mais fácil de explicar)
  • Simetria (mesma coisa o tempo todo = menos coisas para entender)
  • Componentes pequenos (menor = mais fácil de entender)
  • Protocolos (não preciso entender o "como")