Posts in português

A Plataforma Tecnologia começou suas operações há menos de um ano e está em ritmo de crescimento acelerado. \o/

Crescer rapidamente e ao mesmo tempo de forma saudável é um desafio para qualquer empresa, pois é fácil cair na armadilha de hiper-focar no crescimento financeiro quase instantâneo e deixar os valores fundamentais da empresa de lado. Aquelas que deixam isso acontecer, cedo ou tarde, acabam pagando o preço deste crescimento desestruturado e “desvalorizado”. Nós não queremos este tipo de crescimento.

Como temos grande preocupação em preservar o espírito da Plataforma Tecnologia, nós estamos procurando desenvolvedores que compartilhem da nossa cultura “hacker”, que amem seu trabalho e que vejam na atividade de programar não só um trabalho, mas sim, uma atividade de lazer.

Portanto, se você é um geek que curte fazer um trabalho bem feito com código limpo e bonito, por favor assista o vídeo que o Hugo Baraúna e José Valim gravaram. ;)

Ajude a divulgar o vídeo para aqueles que possam se interessar.

Nós estamos esperando o seu currículo, e mais importante, algum código ou contribuição open source que você já tenha feito!

UPDATE 1: Não há restrições quanto a trabalhar remoto.

UPDATE 2: Pessoal, a fluência em klingon é apenas uma brincadeira, e não um requisito! ;)

Valeu galera!

Pessoal, obrigado por todo feedback no twitter, seguem os meus slides sobre geração de código no Rails 3.0 e Thor:

Além do mais, George Guimarães e Carlos Antonio fizeram o release oficial do Devise, abaixo vocês podem ver a apresentação:

Tanto o Devise, quanto o exemplo usado na apresentação, estão disponíveis no GitHub da Plataforma Tecnologia. Esperamos ver vocês por lá!

A segunda edição do maior evento de Ruby on Rails da América Latina está chegando e nós da Plataforma Tecnologia estamos ansiosos. Serão dois dias para poder conhecer, conversar, discutir e trocar experiências com velhos e novos amigos que esperamos encontrar.

No Rails Summit de 2008, o George Guimarães palestrou sobre as minúncias de monitoração de infra-estrutura e como colocar aplicações Rails em produção.

Este ano será a vez do José Valim falar sobre algumas novidades do Rails 3. Ele vai explicar como adaptar os geradores de código da sua aplicação no Rails 3, falará também sobre o Thor (visto que os geradores de código do Rails 3 são desenvolvidos sobre o Thor) e como utilizá-lo para fazer pequenas tarefas para automatizar o seu dia a dia e binários para os seus plugins/gems em Ruby.

Além da palestra do José Valim, não perca a oportunidade de assistir aos outros grandes palestrantes. Veja a programação completa.  Se você ainda não se inscreveu, corra e não perca esta oportunidade. O Rails Summit é, sem dúvidas, um dos melhores eventos do ano.

Nos vemos lá! ;)

Veja o convite do Fabio Akita no vídeo acima

Rails for Kids 2009

O Rails for Kids foi uma maratona beneficente de palestras on-line realizada no dia 12/09/2009  que contou com grandes nomes da comunidade Ruby on Rails do Brasil e de fora. Nós da Plataforma Tecnologia fomos representados por mim (Hugo Baraúna) e pelo George Guimarães.

A qualidade do evento foi surpreendente, ainda mais quando levamos em consideração que ele foi realizado totalmente on-line. Na minha opinião, a organização do Rails for Kids foi excelente pois juntou um respeitado time de palestrantes, utilizou uma ferramenta para apresentações online/e-learning  muito boa e teve presença em peso da comunidade. Parabéns ao Carlos Eduardo pela organização!  Eventos assim são sempre bem-vindos! =)

Mas para aqueles que não puderam participar do evento, não se preocupem. Ainda há uma chance: as palestras foram gravadas! Basta entrar no site do Rails for Kids e fazer uma simbólica doação.  Você ajuda quem precisa e assiste a palestras de primeira qualidade. É um benefício em dose dupla! =D

Se não puder ajudar com doações, divulgue. Vale lembrar que o objetivo maior é ajudar crianças carentes.

Valeu pessoal!

obs.: para ler um bom resumo das palestras do evento, dê uma olhada nesse post do Carlos Antônio, da para ter uma ótima idéia!

To see this post in English, click here.

Às vezes os usuários querem manipular os dados de diversos modos. Nesses cenários, é comum exportar os dados num formato de tabela para que se possa usar um editor de planilhas e então filtrar, particionar e mudar os dados da forma que o usuário quiser.

Generalmente, fazemos isso usando CSV, certo? O OpenOffice e outros editores podem abrir arquivos CSV sem problemas. É só clicar duas vezes no arquivo CSV e voilà, os dados aparecem.

Entretanto, o Excel não funciona exatamente da mesma forma. Se você clicar duas vezes no arquivo, o Excel vai lhe mostrar todo o conteúdo em apenas uma coluna. Claro que você poderia ir em Ferramentas > Importar dados, navegar até o arquivo, selecionar a vírgula como separador de campos e então, após alguns cliques você terá seus dados como desejado. Isso não é nada amigável para o usuário e é o tipo de coisa que não queremos explicar para nossos clientes. Nossos clientes devem ser capazes de simplemente clicar duas vezes no arquivo meus_dados.csv e ver os dados bem estruturados.

Tendo isso em mente, é assim que fazemos na Plataforma para lidar com os formatos do Excel.

É TSV, e não CSV, rapaz!

O Excel espera que seus dados venham com tabulações como separador de campo. Então, o que você precisa na verdade é um TSV (tab-separated values).

Se você está usando o FasterCSV, só precisa fazer:

tsv_str = FasterCSV.generate(:col_sep => "\t") do |tsv|
  tsv << headers
  # coloque seus bonitos dados aqui...
end

Não esqueça! Excel exige tabulações, e não vírgulas. Mas tem coisa pior vindo…

Sem quebras de linha nos campos

O Excel não gosta quando você põe um “\n” dentro dos campos. Apesar dos campos serem separados por tabulações, ele parece não entender o que a quebra de linha está fazendo ali.

Então, se você tem campos de texto no seu modelo, tome cuidado. Eles podem conter quebras de linhas e você precisa tirá-las antes de exportar seus dados para o Excel.

Esqueça UTF-8. Use UTF-16!

Uma das especificações mais escondidas do Excel é que ele espera que seus arquivos TSV sejam codificados usando UTF-16 Little Endian. Você sabia disso? Bem, nós não!

Alguns até dizem que este é o único formato Unicode suportado pelo Excel.

E qual a diferença entre UTF-8 e UTF-16? O UTF-8 é uma codificação de tamanho variável, cujos caracteres podem usar até 4 bytes, mas para idiomas ocidentais generalmente é usado um ou dois bytes. Caracteres UTF-16 usam sempre 2 bytes para serem representados (lembre-se que caracteres e bytes são duas coisas bem diferentes no mundo Unicode). Simplificando bastante as coisas, UTF-16 usa mais espaço (na maioria das vezes).

E tem também a parte do Little Endian. O UTF-16 sempre usa um par de bytes para representar um caractere. Contudo, nós precisamos saber qual a ordem certa desses bytes. Não vamos entrar em detalhes aqui, mas essa ordem é indicada pelo Byte-order Mark (BOM). Na prática, o BOM no UTF-16 vai adicionar dois bytes no começo do seu arquivo (você pode ver isso usando um editor hexadecimal).

Um dos jeitos de converter sua string TSV (gerado pelo FasterCSV) é com o Iconv, uma ferramenta escrita para a Biblioteca C do GNU. Felizmente, o Iconv está bem empacotado em pura felicidade Rubyana. Está dentro do biblioteca padrão do Ruby e vocÊ só precisar dar um require nela.

Entretando, se você converter uma string para UTF-16 Little Endiand, Iconv NÃO irá colocar o BOM no começo. Isso é compatível com a especificação do Unicode. Mas já que o Excel está totalmente fora dos padrões, você deve inserir manualmente o BOM para aumentar a compatibilidade.

Você pode usar o Iconv na hora que enviar o arquivo ao usuário dentro do seu controller. Ficaria mais ou menos assim:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
require 'iconv'
 
class ProjectsController < ActionController::Base
  BOM = "\377\376" #Byte Order Mark
 
  def index
    @projects = Project.all
    respond_to do |format|
      format.html
      format.csv { export_csv(@projects) }
    end
  end
 
protected
 
  def export_csv(projects)
    filename = I18n.l(Time.now, :format => :short) + "- Projects.csv"
    content = Project.to_csv(projects)
    content = BOM + Iconv.conv("utf-16le", "utf-8", content)
    send_data content, :filename => filename
  end
end

Perceba que estamos usando CSV como extensão do arquivo. Isso é porque geralmente arquivos TSV não estão associados ao Excel. Este trecho usa um timestamp como nome de arquivo, o que é geralmente uma boa prática.

Resumindo

Essas são as 3 leis para lidar com CSVs para o Excel:

  1. Use tabulações, e não vírgulas.
  2. Campos NÃO podem conter quebras de linha.
  3. Use UTF-16 Little Endian para enviar o arquivo ao usuário. E adicione o BOM do Little Endian manualmente.

Tenha isso em mente e você nunca terá que explicar para seus clientes como abrir os dados exportados no Excel.

Há um último problema. O OpenOffice não irá abrir facilmente arquivos feitos na “especificação” do Excel. O Google Analytics resolve este problema mostrando dois links ao usuário: “Exportar para CSV” e “Exportar para Excel”. O primeiro é o CSV normal e o segundo é o arquivo TSV feito especialmente para o Excel.

E culpe a Microsoft por este comportamento estranho.

UPDATE: @danielvlopes nos avisou de uma solução existente que encapsula o processo deste post, chamado csv_builder. Você só precisa configurar o @output_encoding para usar “utf-16″ (preste atenção com o BOM).

@jncoward também enviou um link para a gem spreadsheet, que escreve formatos nativos do Excel. TSV é um formato mais simples e mais rápido, mas a gem spreadsheet pode lhe ajudar em casos mais complexos.

Rails for Kids 2009

A comunidade de Rails do Brasil está sempre ativa, sinal disso é que dia 12 de setembro vai acontecer o Rails for Kids 2009.
O Rails for Kids 2009 é um evento composto por uma maratona de palestras on-line ao vivo relacionados a Ruby on Rails. Teremos alguns dos melhores Railers do Brasil contando um pouco de suas experiências próprias sobre assuntos muito legais, como: deployment de aplicativos Rails, Agile, Git, Integração contínua, Cucumber, CouchDB e muito mais.
Eu (Hugo Baraúna) e o George Guimarães estamos entre os palestrantes =D. Falarei sobre metodologias ágeis e a motivação por trás delas, enquanto o George falará sobre deployment automatizado de aplicações em Rails com Capistrano e Passenger.
Agora, mais importante do que as palestras em si, é o fato que toda renda gerada pelo evento será doada à instituição Cotolengo, no Mato Grosso do Sul. Ou seja, você fará um grande gesto humano e ainda por cima poderá assistir à ótimas palestras!
Parabéns ao Carlos Eduardo da e-Genial, que é o responsável por este importante evento.
O Rails for Kids já está chegando, agora basta você ir ao site e se inscrever.
Nos vemos por lá!

A comunidade de Rails do Brasil está sempre ativa, sinal disso é que dia 12 de setembro vai acontecer o Rails for Kids 2009.

O Rails for Kids 2009 é um evento composto por uma maratona de palestras on-line ao vivo relacionados a Ruby on Rails. Teremos alguns dos melhores Railers do Brasil contando um pouco de suas experiências próprias sobre assuntos muito legais, como: deployment de aplicativos Rails, Agile, Git, Integração contínua, Cucumber, CouchDB e muito mais.

Eu (Hugo Baraúna) e o George Guimarães estamos entre os palestrantes =D. Falarei sobre metodologias ágeis e a motivação por trás delas, enquanto o George falará sobre deployment automatizado de aplicações em Rails com Capistrano e Passenger.

Agora, mais importante do que as palestras em si, é o fato que toda renda gerada pelo evento será doada à instituição Cotolengo, no Mato Grosso do Sul. Ou seja, você fará um grande gesto humano e ainda por cima poderá assistir à ótimas palestras!

Parabéns ao Carlos Eduardo da e-Genial, que é o responsável por este importante evento.

O Rails for Kids já está chegando, agora basta você ir ao site e se inscrever.

Nos vemos por lá!