http://forum.rubyonbr.org/blogosfera
Last checked 7 months ago.
1 person has subscribed to this feed.
post frequency (last month)
PostRank™
From Blogosfera | RubyOnBr, 8 months ago,
0 comments
Embora pouca gente use, e muita gente nem saiba disto, é possível configurar o Rails para procurar por plugins em outro lugar diferente do diretório
vendor/plugins, apenas incluindo uma linha de código no arquivo
environment.rb.
config.plugin_paths = [‘lib/plugins‘, ‘vendor/plugins‘]
Porém na versão atual do Rails, se alterarmos esta configuração e decidirmos usar um plugin que tenha generators, esqueça. O Rails só vai encontrar generators em plugins que estiverem no diretório
vendor/plugins.
Este é mais um bug corrigido para o Rails 2.1.
From Blogosfera | RubyOnBr, 8 months ago,
0 comments
Eu sei que muita gente ficou curiosa sobre o que me trouxe a São Paulo. Com as coisas se definindo, eu posso adiantar que vou trabalhar com o Manoel Lemos e o pessoal do BlogBlogs, mas não somente neste último.
O Manoel me convidou para olhar o que ele e sua galera estão fazendo e me perguntou se eu teria interesse em fazer parte da equipe. Eu vim, vi e gostei do que o pessoal estava aprontando. O resultado é que eu já estou em São Paulo e amanhã pegamos firme nos projetos novos que serão lançados nas próximas semanas e meses.
Quem já acompanha o blog já há algum tempo sabe que meu trabalho anterior na empresa envolvia basicamente .NET, com um tanto menor de Rails. Esse novo trabalho é todo sobre Rails com metodologias ágeis e um bocado de arquitetura sobre tópicos que estão se tornando freqüentes em qualquer discussão da Web 2.0.
Assim que eu tiver mais novidades, é claro, eu posto por aqui. Por enquanto, um obrigado especial ao TaQ que deu uma força por trás das cenas em vários aspectos.
From Blogosfera | RubyOnBr, 8 months ago,
0 comments
Durante a Campus Party eu conheci o Hugo, que é aluno de Ciências da Computação na USP e também é monitor de aulas de Smalltalk (é isso? :-)
Estávamos conversando sobre Seaside e agora ele fez o primeiro screencast apresentando o ambiente Squeak. Ainda não é o Seaside, mas apenas algo para se acostumar com alguns dos aspectos do Squeak.
Então, sem mais delongas, dêem uma olhada no blog dele para baixar o vídeo.
From Blogosfera | RubyOnBr, 8 months ago,
0 comments
Dois novos helpers foram criados para facilitar nossa vida na hora de criar um plugin. Os métodos
register_javascript_expansione
register_stylesheet_expansion.
Este método registra um ou mais arquivos javascript para serem incluídos quando um símbolo, determinado por você, for passado como parâmetro para o método
javascript_include_tag, que você já conhece. A idéia é que este método seja chamado no arquivo
init.rbdo seu plugin para registrar os arquivos javascript que seu plugin instalou na pasta
public/javascripts. Veja como funciona:
# No arquivo init.rb
ActionView::Helpers::AssetTagHelper.register_javascript_expansion :monkey => [“head“, “body“, “tail“]
# Depois, fazendo assim:
javascript_include_tag :monkey # =>
# Terei isto:
<script type=“text/javascript“ src=“/javascripts/head.js“></script>
<script type=“text/javascript“ src=“/javascripts/body.js“></script>
<script type=“text/javascript“ src=“/javascripts/tail.js“></script>
Este método faz exatamente a mesma coisa que o método acima, mas criando um símbolo para ser usado nas chamadas ao método
stylesheet_link_tag. Veja um exemplo:
# No arquivo init.rb
ActionView::Helpers::AssetTagHelper.register_stylesheet_expansion :monkey => [“head“, “body“, “tail“]
# Depois, fazendo assim:
stylesheet_link_tag :monkey
# Terei isto:
<link href=“/stylesheets/head.css“ media=“screen“ rel=“stylesheet“ type=“text/css“ />
<link href=“/stylesheets/body.css“ media=“screen“ rel=“stylesheet“ type=“text/css“ />
<link href=“/stylesheets/tail.css“ media=“screen“ rel=“stylesheet“ type=“text/css“ />
Referência: Allow custom javascript/stylesheet expansion symbols
From Blogosfera | RubyOnBr, 8 months ago,
0 comments

Com o Rails 2 fomos brindados com as Sexy Migrations. E entre uma de suas novas características temos o método
timestampsque cria as colunas
created_ate
updated_atna tabela em questão.
Mas atualmente não temos nenhum método que permita de forma sexy, adicionar ou remover os timestamps depois da tabela ser criada. Ops… não tínhamos!
Para a próxima versão do Rails temos dois novos métodos:
add_timestampse
remove_timestamps, que cria e remove (respectivamente) as colunas de timestamps. Veja um exemplo:
def self.up
add_timestamps :feeds
add_timestamps :urls
end
def self.down
remove_timestamps :urls
remove_timestamps :feeds
end
E temos migrations um pouco mais sexy… Uhh Baby…
From Blogosfera | RubyOnBr, 8 months ago,
0 comments

Chegamos ao décimo episódio do Rails Podcast Brasil. Neste episódio falamos sobre a nova versão do meu plugin, Rubinius, GitHub, Cells e para finalizar respondemos a duas perguntas de nossos ouvintes: “Onde colocar suas classes de Exception para mantê-las dentro da estrutura do Rails” e “Como implementar recorrência de eventos em Ruby”.
Além de revelarmos o vencedor da promoção do PeepCode!
Se você tiver alguma dúvida que gostaria de ver respondida no próximo podcast, clique aqui e envie uma mensagem.
Mil desculpas ao Vinícius Ebersol, porque na hora do podcast esqueci teu nome…
Para fazer o download, clique aqui.
From Blogosfera | RubyOnBr, 8 months ago,
0 comments
Nesta série de artigos eu já falei do novo método
squish. Lembra-se?
Pois é, este método e a sua versão destrutiva, o
squish!, foram alterados para ficarem mais rápidos. Veja como ficou a nova versão:
module ActiveSupport
module CoreExtensions
module String
module Filters
def squish
dup.squish!
end
def squish!
strip!
gsub!(/\s /, ‘ ‘)
self
end
end
end
end
end
From Blogosfera | RubyOnBr, 8 months ago,
0 comments
Todo ano a Locaweb promove um evento, o ELPI que já está na décima edição. E este ano eles abriram ao publico para indicarem quem desejam ver palestrando.
Então já sabe o que fazer, né? Clica aqui e coloca alguns nomes da comunidade Rails no evento!
From Blogosfera | RubyOnBr, 8 months ago,
0 comments
Agora a API do plugin Brazilian Rails está hospedada no RubyForge.org.
O endereço é: http://brazilian-rails.rubyforge.org/api.
Dentro de alguns dias teremos um site com uma documentação mais completa do plugin. Será uma página semelhante a do nosso outro plugin, o Integration.
From Blogosfera | RubyOnBr, 8 months ago,
0 comments
Hoje precisei conectar direto no banco de dados do meu site, para começar a fazer o processo de incluir tags e URLs mais descritivas para os meus posts. Eu poderia usar um programa em Ruby usando o ActiveRecord para fazer isso, mas iria gerar uma enxurrada de posts novos no feed, e não seria legal. Decidi conversar diretamente com o banco de dados.
O problema é que o hosting não deixa conectar remotamente a não ser que se configure explicitamente os usuários e IPs remotos permitidos, e com IP dinâmico não fica uma coisa muito legal. O interessante é que temos a opção de usar um túnel SSH para fazer o serviço. Para criar o túnel (lembrem-se, eu uso GNU/Linux) é só usar o seguinte comando:
ssh -L 3307:mysql.host.com:3306 user@host.com
Onde 3307 é a porta por onde vou conectar localmente o túnel, host.com é o seu host e user é o usuário que vai conectar no host. Depois de executado esse comando, ele irá conectar no host normalmente como uma sessão SSH, mas criará o túnel. Para conectar no túnel, vamos usar:
mysql -u user -p -P 3307 -h 127.0.0.1 database
Onde user é o usuário do banco de dados, 3307 é a porta local do túnel que criamos e database é o nome do banco de dados. A partir desse momento, estamos conectados com o banco de dados remoto usando a autenticação e conexão do túnel SSH. Fica a dica de como conectar no túnel usando Ruby:
con = DBI.connect("DBI:Mysql:database=banco;host=127.0.0.1;port=3307","user","pass")
From Blogosfera | RubyOnBr, 8 months ago,
0 comments

Não sabemos ainda quando a versão 2.1(?) do Rails sairá, mas quem acompanha este blog já sabe das grandes novidades que acompanharão esta nova versão. Acredito que a mais interessante e importante novidade será o novo suporte nativo a timezones.
Criar um sistema que trabalha com fusos-horários diferentes hoje só é possível graças a gems como o TZInfo. Mas isto será trivial na próxima versão do Rails.
Para entender a necessidade disto, imagine um sistema simples para uma empresa de cursos de idiomas online, onde alunos do mundo todo podem agendar horários para suas aulas. Se eu agendar uma aula aqui para uma hora da tarde, meu professor que mora no Canadá deve ser avisado que a aula ocorrerá às dez horas da manhã no horário dele. Se isto não acontecer, teremos uma tremenda confusão e um sistema assim seria um fracasso.
A solução para o problema é sempre convertermos os horários para o padrão UTC e na hora de exibir ou receber usarmos a hora local do usuário. Consegue imaginar o problema? Que problema? Isto será trivial, assim:
# informa o fuso-horário local
Time.zone = “Pacific Time (US & Canada)“
# Agora todas as datas/horas irão refletir o fuso-horário local
event = Event.new
event.when = Time.utc(2008, 1, 1, 0)
event.when #=> Mon, 31 Dec 2007 16:00:00 PST -08:00
Para facilitar ainda mais podemos usar um filtro no
ApplicationController, algo assim:
class ApplicationController < ActionController::Base
before_filter :set_timezone
def set_timezone
# current_user.time_zone #=> ‘Pacific Time (US & Canada)’
Time.zone = current_user.time_zone
end
end
Pronto, problema resolvido.
From Blogosfera | RubyOnBr, 8 months ago,
0 comments
Calma… ainda não… Mas hoje o David escreveu post no blog oficial do Rails onde ele deixa escapar que a versão 2.1 será lançada em breve.
Mais um motivo para você acompanhar a série Edge Rails deste blog, e já estar preparado quando a nova versão estiver no ar.
From Blogosfera | RubyOnBr, 8 months ago,
0 comments
Ontem peguei o meu iPod Classic 160GB e primeira coisa que fui procurar foi como importar vídeos com legendas para ele.
Achei logo de cara um app excelente chamado RoadMovie, desenvolvido pela Bitfield. Ele custa $19.95USD, mas antes de comprá-lo fui em busca de soluções gratuitas. Foi quando encontrei o iSquint.
O iSquint é muito simples de usar e rápido (precisou de 15 minutos para converter um arquivo de 700MB), só que não permite que você adicione legendas. Foi quando lembrei que a Bitfield também desenvolveu um app chamado Submerge e que custa apenas $9USD. Não tive dúvidas e comprei na hora!
O Submerge permite que você gere um vídeo já com as legendas, suportando diversos formatos como SubRip (.srt), SubViewer 1 e 2 (.sub) e MicroDVD. Ele também é muito simples de usar: basta abrir o vídeo e selecionar a legenda e exportar um vídeo para o iPod.
Agora veja tudo o que você precisa fazer para converter seus vídeos.
Abra o iSquint e arraste o vídeo que você quer converter. Selecione a opção "Optimize for iPod" e defina a qualidade do vídeo. Clique em "Start". A conversão irá demorar alguns minutos. O Bee Movie com 700MB levou 15 minutos para ser gerado no meu Macbook.
Depois que o arquivo for convertido, você precisa abrir o Submerge. Ele irá abrir a janela pedindo para selecionar o vídeo. Caso ele não o faça, vá ao menu "File > Open". Selecione o arquivo .mp4. Ele irá procurar pela legenda automaticamente e caso encontre já irá fazer a renderização. Se ele não encontrar, clique no botão "Choose" e selecione a legenda manualmente.
Agora vem dois passos muito importantes: abra as preferências do programa ("Submerge > Preferences" ou ⌘ ,) e na aba "Subtitles" selecione a opção "Large" para o item "Relative Size". Feche a janela.
Depois, no menu "Movie", selecione a opção "Force 4:3 Aspect Ratio".
Clique no botão "Render" para visualizar o vídeo com as legendas.
Se tudo estiver certo, exporte o vídeo através do menu "File > Export". Não esqueça de selecionar o formato de exportação, que deve ser "iPod".
Pronto! Agora basta importar o vídeo para o iTunes e fazer o sync.
From Blogosfera | RubyOnBr, 8 months ago,
0 comments
Os visitantes frequentes aqui do site devem ter notado algumas pequenas mudanças que fiz na semana passada. Agora, ao invés da seção "news", onde eu listava os meus bookmarks, agora tem a seção ... err, "bookmarks", que se não é a coisa mais original do mundo guarda uma bela de uma distinção da antiga.
A seção antiga era baseada nos meus bookmarks no del.icio.us, mas com a provável compra do Yahoo! por "vocês sabem quem", eu fiquei de saco cheio e resolvi migrar meus bookmarks para algum outro lugar. Se vai ficar a mesma coisa na questão dos bookmarks ou não, se o serviço vai ser bom ou não, vocês me conhecem: prefiro manter distância.
Comecei a avaliar algumas opções, como o Google Bookmarks, o Pagestacker e alguns outros, todos ótimas soluções, mas com exceção do tipo "se-Deus-quiser-não-vai-acontecer-isso" para o Google, os outros acredito que pelo próprio contexto de evolução e ampliação, podem ser alvos de futuras aquisições (nada contra isso, cada um faz o que quiser com o seu produto!), talvez por parte até de alguns safados sacanas que andam comprando tudo por aí, e se fosse o caso, lá ia eu migrar todos os meus dados novamente. Definitivamente não é algo que eu queira ficar fazendo ainda mais com tempo tão escasso.
Nesse ponto entra um pouco de história de como eu fazia meus posts e armazenava os meus bookmarks alguns anos atrás. Eram feitos direto em arquivos XML que eram enviados para o site e transformados com XSL. Sério! Eu só decidi deixar isso para lá depois que comecei a usar Rails e resolvi fazer esse site aqui do zero (fazer o que, um lance meio masô) ao invés de usar uma solução pronta para gerenciar os meus posts. Aproveitando o embalo, migrei os meus bookmarks para o del.icio.us que está nessa situação de ser engolido. Funcionou bem até agora, especialmente pelo fato dos posts ficarem no meu banco de dados que eu posso fazer backup na hora que quiser e manter os dados comigo.
No caso dos bookmarks, a história é diferente. Vejam bem, posso fazer backup dos dados do del.icio.us na hora que eu quiser também, mas a principal diferença é que se o mecanismo de apresentação/coleta dos dados for prejudicado ou pervertido, fica complicado manter uma operação que utilizo praticamente todo santo dia. Quando mantinha tudo comigo, não corria esse problema. Foi então que decidi fazer com os bookmarks a mesma coisa que com os posts, manter no banco de dados do meu site, e foi assim que a seção de bookmarks nasceu. Eu crio e listo os meus bookmarks do jeito que eu quiser na hora que eu quiser, acessando do jeito que me der na telha, sem o perigo de chegar algum engraçadinho e jogar areia no meu caminhãozinho.
Aí que entra o título do post. No meio de tanto "cloud computing" e dados distribuídos, estou meio que indo na contramão. Fazer o que, sempre fui contestador e meio rebelde. Estou tirando os meus dados dessa chuva e deixando bem guardados embaixo do meu próprio guarda-chuva, se algum dia der algum problema com eles vai ser de responsabilidade única minha. Então, monkey boy, vai chupar prego. Posso perder alguma dinâmica mais social nos bookmarks, fotos etc compartilhadas e conectadas com outras pessoas, mas eu nunca fui muito sociável nesse ponto.
E, já que os bookmarks tem tags, botei as dita cujas para funcionar nos posts também. Agora é achar tempo para inserir as tags em todos os posts anteriores e ficar de olho para ir desativando os serviços do Yahoo!, infelizmente. Serviram bem por um bom tempo.
From Blogosfera | RubyOnBr, 8 months ago,
0 comments

Recebi uma dica do Bruno Miranda e resolvi dar uma melhorada no meu plugin. Desta vez adicionei mais uma funcionalidade que realmente estava faltando.
O plugin é muito útil para projeto Ruby on Rails em outras línguas diferente do inglês. Você pode desenvolver todo o código do projeto seguindo os padrões de convenções do Rails, em inglês e ter suas URLs totalmente em português incluindo somente 3 linhas de código no arquivo
routes.rb.
Para entender como usar o plugin, clique aqui.
Até agora podíamos traduzir, ou criar apelidos para
actionse
resources, mas quando usávamos
namespaceseles continuavam em inglês. Continuavam… Agora o plugin aceita criar apelidos para
namespacestambém. Assim:
map.aliases :namespaces, :admin => ‘qualquer_nome‘
Simples, não?
Eu mudei o repositório do plugin para o GitHub (muito bom, aliás). Então você pode acessar o repositório clicando aqui. Se você já usa git, pode pegar a última versão usando o comando (tudo em apenas uma linha):
git clone git://github.com/carlosbrando/custom_resource_name.git custom_resource_name
Se você ainda não usa Git (deveria…) você pode fazer o download do plugin clicando aqui e depois jogar o código dentro da pasta
vendor/pluginsdo seu projeto.
Gostou mesmo? Legal! Você pode deixar um comentário aqui no blog e/ou me recomendar no WWR. Seria bem legal da sua parte!
Eu ainda tenho 3 convites para o GitHub, se alguém quiser é só pedir aí nos comentários. Mas só tenho 3…