Starling: Trabalhando com Filas em Ruby

October 10th, 2008 por jeveaux

Quem nunca ouviu a grande falácia de que Rails não escala? Isso foi moda durante algumas semanas enquanto o Twitter passava por problemas de escalabilidade, não necessariamente por culpa do Rails ou de Ruby, mas quem quer por lenha na fogueira não está muito preocupado com isso e quer mesmo é semear a discórdia. Muita água já passou por baixo da ponte, o Twitter agora está estável e as coisasfluem bem.

No começo deste ano o pessoal do Twitter anunciou e tornou open source o projeto Starling, criado por Blaine Cook. O Starling é o core do Twitter, ele é o servidor de filas responsável por manter em pé o Twitter. E agora como um projeto open source está disponível como gem e pode ser usado por qualquer outro projeto.

Indo direto ao ponto, o Starling é, basicamente, um servidor de filas implementado sob o protocolo do MemCache. O MemCache é um servidor de cache distribuído de altíssima performance e é largamente usado, principalmente em clusters de aplicações web.

Para usar o Starling é muito simples. Os primeiros passos são

Instalação

1) Instalar o servidor MemCache

CODE:
  1. jeveaux@kamael ~ $ sudo apt-get -y install memcached

2) Instalar a gem do MemCache e

CODE:
  1. jeveaux@kamael ~ $ sudo gem install memcache-client

3) Instalar a gem do Starling.

CODE:
  1. jeveaux@kamael ~ $ sudo gem install starling

E pronto, isso é tudo para começarmos a usar o Starling. Se você achou a instalação simples se prepare, pois a utilização é ainda mais simples.

Usando o Starling

Se você já usou o MemCache vai sentir-se familiarizado com o Starling. A diferença é apenas na implementação do protocolo, ou seja, a utilização em código será igual a do MemCache, só que ao fazer set e get as coisas acontecerão de uma forma um pouco diferente. Por enquanto a diferença maior que percebi foi em relação do método get, que quando usado no MemCache apenas retorna um valor do cache e o mantém lá, já no caso do Starling o get retorna o valor e o remove da memória. Analisando com calma isso faz sentido, afinal não estamos mais falando de cache e sim de filas, mesmo que a implementação da fila seja feita usando cache.

Mas antes de irmos para os exemplos de código, precisamos fazer com o que o servidor de filas - duh, Starling - esteja disponível e rodando. Vamos iniciar o Starling na porta 22122 (-p) e como um daemon (-d):

CODE:
  1. jeveaux@kamael ~ $ sudo starling -p 22122 -d

Isso já basta para iniciar o servidor do Starling e deixá-lo disponível para uso. Agora então vamos alimentar a fila, crie o arquivo: alimentar_fila.rb.

CODE:
  1. #alimentar_fila.rb
  2. require 'rubygems'
  3. require 'memcache'
  4. starling = MemCache.new 'localhost:22122'
  5. starling.set 'fila', 'qualquer objeto'

Ao executar este arquivo (ruby alimenta_fila.rb) não teremos nenhum resultado visual, mas acredite, a fila chamada de'fila' no exemplo está recebendo objetos. Agora o trabalho será para - como dizem - consumir a fila. Vamos ao consumir_fila.rb.


CODE:
  1. #consumir_fila.rb
  2. require 'rubygems'
  3. require 'memcache'
  4. starling = MemCache.new 'localhost:22122'
  5. loop {
  6.   objeto_fila = starling.get 'fila'
  7.   if !objeto_fila.nil?
  8.     puts 'recuperado da fila:' + objeto_fila
  9.   end
  10. }

E agora sim estamos prontos para colocar e remover objetos em uma fila. O exemplo para consumir os objetos ficará em loop, então você pode executá-lo numa janela do bash e em outra janela ir executando o exemplo para alimentar a fila com objetos e acompanhar o comportamento dos procedimentos de alimentar e consumir a fila. A recuperação da fila será imediata, instantânea, afinal, assim como o MemCache, o Starling está preparado para receber milhares de operações por segundo.

E é isso, o seu servidor de filas já está rodando e sendo alimentado/consumido. Agora é aplicar para o que você está precisando :D

Problemas

Há um probleminha chato com a gravação de log em disco que o Starling faz das filas. Todo o set feito gera o objeto na memória e também em disco - geralmente em /var/spool/starling/. O problema é que o get somente remove o objeto da memória e não do disco. Aparentemente isso foi feito pra ser assim mesmo e segundo o próprio Blaine Cook este arquivo de log não ficará sendo incrementado para sempre, pois, depois de um certo tamanho (o engraçado é que ele não fala esse certo tamanho) ele será rotacionado, mas por enquanto ainda não descobri este certo tamanho e o arquivo tem crescido infinitamente.

E apenas uma observação quanto ao consumir_fila.rb: Não deixe-o executando por muito tempo e nem muito menos esqueça de finalizá-lo pois como ele fica em loop infinito poderá ocupar o seu processador a toa.

Configurando Sony Ericsson MD300 no Ubuntu

October 9th, 2008 por jeveaux

Algum tempo antes de me mudar pro Rio eu fiz um plano de internet 3G da Claro e acabei comprando o modem da Sony Ericsson modelo MD300, na loja mesmo testei no notebook deles e tudo funcionou como eu esperava, velocidade nota 10 e conexão estável, até hoje não tive problemas, a não ser é claro a compatibilidade do modem com o Ubuntu.

Sempre vi muita gente usando 3G no Mac e em Linux com o modem da Huawei - aquele branquinho clássico - e logo pensei: "Vou comprar um desses". Mas não tinha este modelo disponível no dia em que comprei. Então os problemas começaram, o MD300, ao ser plugado no usb com o Ubuntu é montado como pen drive e não como modem, afinal de contas ele também é um pen drive. Mas este não é um si o problema, se vai montar como pen drive tanto faz, isso não tem problema, desde que também seja montado como dispositivo de modem, mas isso não acontece.

Pesquisei de todas as formas possíveis por algumas semanas e não encontrei nada que realmente fosse funcional. Tentei ndiswrapper, tentei iniciar uma VM com windows pra conectar o modem e fazer um proxy pro linux, tentei configurar o wvdial, tentei promessa, simpatia e raza braba mas nada fazia o bendito modem funcionar.

Até que achei há alguns dias no blog do Petry uma solução que ele usou e funcionou. Fiz a mesma coisa e não funcionou de cara pra mim, tive que fazer algumas coisas diferentes, então por isso vou descrever os passos da solução do Petry com o que eu tive que fazer a mais.

O primeiro e mais importante passo é dizer ao udev como montar o dispositivo corretamente, para isso crie uma regra conforme abaixo. Lembre-se que o nome do arquivo criado deve ser exatamente igual ao exemplo, inclusive o seu conteúdo, nada diferente.

CODE:
  1. jeveaux@keltir ~ $ sudo vi /etc/udev/rules.d/50-md300modem.rules

Copie o conteúdo abaixo neste arquivo (tome cuidado com as aspas simples e duplas ao copiar e colar, sugiro conferir pra ver se elas foram transportadas corretamente depois de colar, comigo geralmente elas ficam como ´ ao invés de ')

CODE:
  1. ACTION!="add", GOTO="3G_End"
  2. BUS=="usb", SYSFS{idProduct}=="d0cf", SYSFS{idVendor}=="0fce", PROGRAM="/bin/sh -c 'echo 3> /sys/%p/device/bConfigurationValue'"
  3. LABEL="3G_End"

Feito isso vamos reiniciar o udev

CODE:
  1. jeveaux@keltir ~ $ sudo /etc/init.d/udev restart

E na seqüência vamos instalar o gnome-ppp e wvdial

CODE:
  1. jeveaux@keltir ~ $ sudo apt-get -y install gnome-ppp wvdial

E agora vamos editar o .wvdial.conf do home do usuário (mais uma vez cuidado com as aspas, mesmo problema da regra do udev que citei acima)

CODE:
  1. jeveaux@keltir ~ $ vi .wvdial.conf

E então vamos colar este conteúdo no arquivo:

CODE:
  1. [Dialer Defaults]
  2. Modem = /dev/ttyACM0
  3. ISDN = off
  4. Modem Type = USB Modem
  5. Baud = 460800
  6. Init = ATZ
  7. Init2 = AT+CFUN=1
  8. Init3 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
  9. Init4 = AT+CGDCONT=1,"IP","bandalarga.claro.com.br"
  10. Init5 =
  11. Init6 =
  12. Init7 =
  13. Init8 =
  14. Init9 =
  15. Phone = *99***1#
  16. Phone1 =
  17. Phone2 =
  18. Phone3 =
  19. Phone4 =
  20. Dial Prefix =
  21. Dial Attempts = 1
  22. Dial Command = ATM1L3DT
  23. Ask Password = off
  24. Password = claro
  25. Username = claro
  26. Auto Reconnect = off
  27. Abort on Busy = off
  28. Carrier Check = on
  29. Check Def Route = on
  30. Abort on No Dialtone = on
  31. Stupid Mode = off
  32. Idle Seconds = 0
  33. Auto DNS = on
  34. ;Minimize = off
  35. ;Dock = off
  36. ;Do NOT edit this file by hand!

Agora basta plugar o modem, iniciar o gnome-ppp e conectar-se. Você pode fazer isso diretamente pelo console com o comando gnome-ppp ou através do menu Applications > Internet > gnome ppp.

Basicamente até aqui é o mesmo passo a passo descrito no blog do Petry, porém comigo, ao terminar estes passos a conexão simplesmente não era mantida. Mandava conectar, discava, conectava e caía. Para resolver este problema fiz os próximos passos. Não sou exatamente um expert em linux, então não sei explicar exatamente o porquê destes passos, mas foram eles que fizeram o meu gnome-ppp funcionar corretamente.

Aparentemente alguma coisa sobrenatural estava fazendo meu gnome-ppp carregar o arquivo /etc/wvdial.conf ao invés do ~/.wvdial.conf, então precisei colar o conteúdo do ~/.wvdial.conf no /etc/wvdial.conf também.

Depois disso me conectei diretamente com o wvdial.

CODE:
  1. jeveaux@keltir ~ $ wvdial

Aí sim a conexão foi realizada com sucesso e não caiu. Depois disso fechei o wvdial e voltei a usar o gnome-ppp, que não caiu nenhuma vez depois disso.

Agora é esperar o Ubuntu 8.10, pois segundo as informações no site o network-manager virá com suporte integrado a conexão 3G (GSM e CDMA). Tomara que não precise mais dessa lenga lenga.

Customizando o gedit para Rails

October 7th, 2008 por jeveaux

Não há dúvidas que o TextMate é um excelente editor para se trabalhar com Rails, mas como nem todos possuem um Mac para ter o prazer de utilizar este editor, o jeito é se contentar com alternativas menos hype sexy.

Para quem usa Gnome, porém, é muito mais fácil encontrar uma ótima alternativa. O gedit é um editor de texto que vem, geralmente, por default em qualquer distribuição Linux com Gnome. Não vou falar muito do gedit como editor pois este não é o foco do post, a idéia é mostrar apenas o projeto gedit-rails, que é o projeto que contém uma série de utilitários para deixar o gedit ‘turbinado’ para se trabalhar com Rails.

Para instalar o gedit-rails é super simples, basta fazer o download do projeto (zip, tar.gz ou via clone do repositório do github) e fazer a instalação executando o script install.sh. A instalação é simples e não há nenhum estágio além da execução da execução propriamente dita do script e depois disso o trabalho será apenas de configuração.

A instalação adicionará no gedit o tema de fontes e cores: Darkmate, os plugins: Class Browser, HTML Tidy, Rails Hot Keys, Rails Hot Commands e Snap Open e o mais importante, os snippets. A configuração pode ser feita basicamente em duas etapas:

- Tema de fontes e cores: Edit > Preferences > Fonts & Colors> Darkmate. E o resultado será:

- Plugins: Edit > Preferences > Plugins. Lembre-se, os plugins que foram instalados e que podem ser ativados são: Class Browser, HTML Tidy, Rails Hot Keys, Rails Hot Commands e Snap Open. Os snippets já estarão funcionando sem nenhuma modificação. Basicamente alguns dos recursos adicionados serão:

   

Recomendo também a leitura dos posts sobre gedit-rails do Urubatan, um dos autores do projeto.

Para quem curte o VI também existe uma ótima opção, o vim-rails. Qualquer dia escrevo sobre este addon.

Cariocando

September 29th, 2008 por jeveaux

estou aqui no Rio há pouco mais um mês e parece que cheguei aqui ontem, por vários motivos. O primeiro e mais claro é que toda vez que eu escuto alguém falando "mexmo", "feix" e "doix" dá até agonia, acho que vai ser difícil acostumar com esse sotaque marrento e sinceramente espero não aprende-lo. Outra coisa que sempre acontece quando estou conversando com alguém de Vitória eu ainda escrevo como se eu estivesse lá, sempre esqueço que estou aqui no Rio.

Por outro lado existem algumas coisas que me fazem lembrar imediatamente que estou no Rio, por exemplo a insegurança - estou achando a Barra bem tranquila, mas já vi um assalto - e o trânsito horrível, os motoristas dirigindo feito loucos e por aí vai, felizmente enquanto precisar apenas atravessar uma rua para chegar ao trabalho não irei me preocupar com isso.

Já o trabalho e tudo o mais aqui na globo.com tem sido muito próximo do que o que eu já imaginava, exceto alguns pontos que vão além das minhas expectativas, e isso é bom, muito bom. O ambiente de trabalho é muito descontraído, espaçoso, limpo, claro e repleto de pessoas excepcionais. Com base nas minhas últimas experiências, principalmente o tempo trabalhando em home office, é como se tudo ali fosse pensado e feito para melhorar a interação das equipes e criar um bom ambiente de trabalho. E é claro as experiências com tecnologias diferentes de Java, como por exemplo projetos PHP, iPhone e Rails.

Além disso tudo, trabalhar numa empresa onde todas as equipes são ágeis está sendo uma experiência realmente incrível e muito diferente, estou gostando muito. Todas as práticas de SCRUM e XP são seguidas (não à risca, algumas coisas são adaptadas) e o mais legal é poder praticar TDD sem ser questionado por tempo gasto com testes, com "testes a toa" (sim, já ouvi isso antes) e todas mazelas que costumamos ouvir de gerentes tradicionais, quando na verdade o único questionamento que poderei ouvir é por que não fiz o teste antes.

Bom, por enquanto é isso que posso dizer. Ainda não passeei muito por aqui, mas já conheci alguns lugares clássicos como o Jardim Botânico, o Corcovado num dia de chuva, a Rocinha (só passei em frente) e mais alguns outros lugares.

Resumo do III EJES

September 28th, 2008 por jeveaux

Este final de semana ocorreu o III Encontro de Java do Espírito, desta vez em Vila Velha na UVV. O Evento foi muito legal, consegui reencontrar praticamente todos os conhecidos aqui de Vitória, além do evento em si, o passeio pra Vitória valeu muito a pena.

Também foi muito legal conhecer pessoas como Arun Gupta, Simon Ritter e Doris Chen e principalmente conhece-los aqui no Brasil, no Espírito Santo e num evento organizado pelo ESJUG, isso sem dúvida alguma foi excelente. Muito obrigado ao Mauricio Leal e o ao SouJava ;-). As palestras foram excepcionais.

No evento fiz a apresentação da palestra Testes e Refatoração numa versão completamente refatorada e diferente das últimas apresentações sobre testes que fiz. Acho que consegui chegar num nível de organização e detalhes muito legal nesta apresentação.

Leia mais »

Divulgação: III EJES

September 15th, 2008 por jeveaux

Como eu disse aqui e aqui, nos dois últimos posts do blog, o ESJUG está participando do Mês do Java, que está levando uma caravana pelo Brasil a fora com palestrantes do mundo inteiro com o apoio do SouJava e da Sun Microsystems para eventos realizados em cada estado por seu JUG regional.

E no Espírito Santo o evento será o III EJES - Encontro de Java do Espírito Santo, com a programação abaixo:

  • Data: 27 de setembro de 2008
  • Local: Anfiteatro da UVV - Vila Velha (mapa)
  • Apresentações:
    • 08:00h - Credenciamento e Network Break
    • 09:15h - Abertura SUCESU-ES e ESJUG - Jeveaux e Juliana
    • 09:30h - Glassfish e o Futuro do Java EE - Doris Chen
    • 10:30h - Java na Ponta dos Dedos: A revolução Invisível - Mauricio Leal
    • 11:15h - Testes e Refatoração - Jeveaux
    • 13:30h - Construindo Aplicações Ricas usando JavaFX - Simon Ritter
    • 14:30h - Hibernate e NetBeans : Combinação Perfeita! - Cristiano Biancardi 
    • 15:10h - Aplicando Java EE na Integração de Segurança entre Sistemas e Serviços de Diretório - Luciano Lorencini
    • 16:20h - Case CCM: Desenvolvimento de um aplicativo web utilizando tecnologias livres e open source para os Correios do Brasil. - André Luis Almeida Barreto
    • 17:00h - Encerramento, entrega dos certificados e sorteio dos brindes

Veja aqui a grade completa e informações de como se inscrever.

Importante: As palestras da Doris Chen e Simon Ritter serão apresentadas em inglês com tradução simultânea, porém, a tradução será feita através de rádio FM. Para ouvir a tradução é necessário que o congressista leve qualquer aparelho sintonizador de FM: mp3 player, celular, rádio, etc. Não haverão aparelhos no evento disponíveis para uso.

III Encontro de Java do Espírito Santo

September 11th, 2008 por jeveaux

Este ano o ESJUG realizará em Vitória, Espírito Santo, a terceira edição do encontro anual de usuários de Java no dia 27 de setembro. Também neste ano o ESJUG iniciou uma nova parceria, com a SUCESU-ES. Foi graças a esta parceria que a coisa andou e o evento "saiu" do papel.

Além da parceria com a SUCESU-ES, o SouJava também foi fundamental para a realização do evento. A coisa estava esfriando um pouco lá em Vitória até o dia que eu me mudei pro Rio. O SouJava, com a iniciativa do Mês do Java, entrou em parceria conosco ajudando com palestrantes de nível altíssimo e o Victor Pinto (novo JUG Leader do ESJUG) junto com o pessoal da SUCESU-ES e algum apoio meu, deram continuidade nas coisas e então o evento alavancou de vez.

A grade está sendo finalizada, em breve postarei maiores informações, inclusive de como fazer a sua inscrição. Por enquanto posso adiantar que eu irei a Vitória fazer uma apresentação e teremos apresentações do Mauricio Leal (Sun Microsystems), Doris Chen (Sun Microsystems) e Simon Ritter.

Mês de Java no Brasil

September 7th, 2008 por jeveaux

Este mês, setembro, é o mês do Java no Brasil, uma iniciativa do SouJava com diversos outros JUGs nacionais, contando também com o apoio da Sun. Serão promovidas diversas palestras e workshops, contando com palestrantes brasileiros e internacionais.

Alguns dos eventos mais conhecidos que acontecerão em setembro: JustJava e o Sun Tech Days. E na sequência os eventos regionais de cada JUG, totalizando 14 cidades conforme o mapa abaixo:

Há apenas um detalhe sobre a imagem que é a data do evento no Espírito Santo, será no dia 27 de setembro e não no dia 20 como diz na imagem, mas isso ficará mais claro até amanhã, vou postar mais detalhes sobre o evento depois.

Para maiores informações sobre todos os eventos do mês do java, vejam a página oficial do evento: Mês de Java

Emprego novo, casa nova…

August 29th, 2008 por jeveaux

... namorada é a mesma, aliás, agora esposa =)

Não faz muito tempo que escrevi aqui no blog que havia mudado de emprego. Foi uma mudança bem legal, continuei trabalhando como CLT (peguei vício por isso, PJ nunca mais), com todos os benefícios de praxe, porém com um extra, o trabalho era integralmente em casa, 100% Home Office. A minha equipe ficava em São Paulo e eu e outro arquiteto (um grande amigo) trabalhávamos em Home Office em Vitória. O trabalho em casa tem muitas coisas super legais, outras mais ou menos e algumas nem tão interessantes, afinal, nem tudo é perfeito.

Mas indo direto ao ponto, agora mudei não só de emprego, mas de cidade também. Estou me mudando de Vitória para o Rio de Janeiro e irei trabalhar na globo.com, na equipe do Guilherme Chapiewski (web media). Cheguei aqui em terras cariocas ontem e por enquanto não posso dizer muita coisa, a não ser que acho tenho certeza que irei engordar (ainda mais :( ), tem restaurante que não acaba mais por aqui.

Ainda não tive tempo de conversar direito com todos da equipe, conheci o pessoal e almoçamos ontem e hoje, por enquanto nada mais que isso. Começarei a trabalhar, de fato, na próxima quinta-feira e até lá vou aproveitar o tempo para conhecer melhor o Rio, passear e descansar um pouco. Tenho certeza que está sendo iniciada uma nova e proveitosa fase na minha vida profissional e pessoal, trabalhar numa equipe ágil de verdade é algo que eu buscava há muito tempo.

Continuarei atualizando o blog com as novidades e acontecimentos aqui na globo.com e também com os passeios e "aventuras" aqui no Rio.

[Off-Topic Importante] Mais uma do Senado

July 10th, 2008 por jeveaux

Eu não gosto muito de comentar assuntos Off-Topic aqui no blog, principalmente quando esse Off-Topic é um assunto ligado a política, mas dessa vez não dá pra deixar passar.

A última estripulia do projeto de lei de regulamentação da profissão de analista de sistemas e atividades relacionadas com a informática foi um dos assuntos que rendeu toneladas de posts e nesse caso eu preferi não blogar, até mesmo pelo fato de que eu ainda não concluí a minha graduação, então não queria que o post tivesse um entendimento de auto-defesa para os menos providos de boa capacidade de interpretação, mas passou.

Dessa vez o assunto é outro e não vai ferir somente os profissionais da área de informática, mas todo mundo que sentar a bunda numa cadeira e usar um computador na internet ou comprar um iPod ou até mesmo desbloquear um celular, todo mundo mesmo e pode colocar aí a sua irmã mais nova, seus sobrinhos e sobrinhas, sua mãe que depois de muitos anos resolveu aprender a tal da interneta! Enfim, todos eles serão criminosos em potencial. Mas e nós profissionais de informática!? Aaa nós profissionais de informática já entraremos como criminosos de altíssima periculosidade, principalmente os que tem blog então, estes serão indiciados por tudo que se possa imaginar (ta bom, chega de terrorismo barato).

Mas a verdade é que não ficaremos muito longe do cenário descrito acima. O novo projeto de lei que, na verdade, é um projeto substitutivo do senador Eduardo Azeredo (PSDB-MG) para os projetos de Lei da Câmara 89/2003, e Projetos de Lei do Senado n. 137/2000, e n. 76/2000 é que é o culpado por tudo.

Não vou me prolongar muito na discussão, ao invés disso deixo alguns links com opiniões e análises bastante completas, cuja a leitura acho importantíssima:

O projeto de lei já foi aprovado no Senado e agora corre para a Câmara dos Deputados, mas ainda podemos fazer alguma coisa ou pelo menos tentar fazer alguma coisa assinando a petição iniciada por Sérgio Amadeus dentre outros e que já conta com mais de 11.000 (onze mil) assinaturas.