RSS Blogosfera | RubyOnBr

http://forum.rubyonbr.org/blogosfera

Last checked 7 months ago.

1 person has subscribed to this feed.

Feed frequency

post frequency (last month)

PostRank™ filter

latest 15 posts

« older items




Monday March 24th, 2008

Edge Rails: Bug usando generators em plugins (corrigido)

From Blogosfera | RubyOnBr, 8 months ago, 0 comments Comment

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.

O futuro do presente

From Blogosfera | RubyOnBr, 8 months ago, 0 comments Comment

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.

Sunday March 23rd, 2008

Off-Topic: Screencast de Smalltalk

From Blogosfera | RubyOnBr, 8 months ago, 0 comments Comment

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.

Saturday March 22nd, 2008

Edge Rails: Dois novos helpers para criadores de plugins

From Blogosfera | RubyOnBr, 8 months ago, 0 comments Comment

Dois novos helpers foram criados para facilitar nossa vida na hora de criar um plugin. Os métodos

register_javascript_expansion
e
register_stylesheet_expansion
.

register_javascript_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.rb
do 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>

register_stylesheet_expansion

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

Friday March 21st, 2008

Edge Rails: Migrations ainda mais sexy

From Blogosfera | RubyOnBr, 8 months ago, 0 comments Comment

400507166_00d6d2a75a.jpg

Com o Rails 2 fomos brindados com as Sexy Migrations. E entre uma de suas novas características temos o método

timestamps
que cria as colunas
created_at
e
updated_at
na 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_timestamps
e
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…

Rails Podcast Brasil - Episódio 10

From Blogosfera | RubyOnBr, 8 months ago, 0 comments Comment

270131575_c65396560f.jpg

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.

Neste episódio:

Mil desculpas ao Vinícius Ebersol, porque na hora do podcast esqueci teu nome…

Para fazer o download, clique aqui.

Thursday March 20th, 2008

Edge Rails: O método squish ficou mais rápido

From Blogosfera | RubyOnBr, 8 months ago, 0 comments Comment

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

Wednesday March 19th, 2008

Encontros Locaweb de Profissionais de Internet

From Blogosfera | RubyOnBr, 8 months ago, 0 comments Comment

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!

Brazilian Rails API

From Blogosfera | RubyOnBr, 8 months ago, 0 comments Comment

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.

Usando o SSH para conectar em um banco MySQL remoto

From Blogosfera | RubyOnBr, 8 months ago, 0 comments Comment

Túnel

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") 

Como vai funcionar o novo suporte a TimeZones na próxima versão do Rails?

From Blogosfera | RubyOnBr, 8 months ago, 0 comments Comment

103050700_09e2ff6b95.jpg

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.

Tuesday March 18th, 2008

Ruby on Rails 2.1

From Blogosfera | RubyOnBr, 8 months ago, 0 comments Comment

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.

Convertendo vídeos com legendas para o iPod

From Blogosfera | RubyOnBr, 8 months ago, 0 comments Comment

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.

Como converter 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.

Janela do iSquint

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.

Janela do Submerge

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.

Preferências do Submerge

Depois, no menu "Movie", selecione a opção "Force 4:3 Aspect Ratio".

Forçar Aspect Ratio do vídeo

Clique no botão "Render" para visualizar o vídeo com as legendas.

Legendas renderizadas com Submerge

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.

Tirando os seus dados da chuva

From Blogosfera | RubyOnBr, 8 months ago, 0 comments Comment

Dados

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.

Custom Resource Name Plugin 1.1

From Blogosfera | RubyOnBr, 8 months ago, 0 comments Comment

picture-1.jpg

Recebi uma dica do Bruno Miranda e resolvi dar uma melhorada no meu plugin. Desta vez adicionei mais uma funcionalidade que realmente estava faltando.

Para que serve o plugin?

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
.

Como usar?

Para entender como usar o plugin, clique aqui.

O que tem de novo nesta versão?

Até agora podíamos traduzir, ou criar apelidos para

actions
e
resources
, mas quando usávamos
namespaces
eles continuavam em inglês. Continuavam… Agora o plugin aceita criar apelidos para
namespaces
também. Assim:

map.aliases :namespaces, :admin => qualquer_nome

Simples, não?

Como instalar?

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/plugins
do seu projeto.

Gostei do plugin, como retribuo?

Gostou mesmo? Legal! Você pode deixar um comentário aqui no blog e/ou me recomendar no WWR. Seria bem legal da sua parte!

Aproveitando…

Eu ainda tenho 3 convites para o GitHub, se alguém quiser é só pedir aí nos comentários. Mas só tenho 3…

« older items