Posts Tagged: ruby


13
ago 11

Começa o RSonRails

Ontem a noite rolou na sede da Softa um happy hour muito bacana. Foi o esquenta para um dia de ruby e rails em Porto Alegre.

O frio esperado para a época apesar de ter confirmado presença, acabou não vindo.

O evento está ocorrendo no mesmo prédio da PUC-RS onde ocorreu ano passado o Agile Day (onde fica o Centro de Pesquisa em Computação Aplicada).

Das duas trilhas disponíveis, estas são as palestras que mais me chamaram a atenção:

 A minha trilha :)

08:00
 Inscrições + Café da manhã + Networking
10:00

 [5º andar] Rafael Souza – Testando APIs
Mais novo desenvolvedor na Softa. Apaixonado pelo que faz e amante de código bonito. Desenvolve para a web há 10 anos, já usou PHP, Java, .NET e agora programa em Ruby full-time.
Hoje boa parte das aplicações possuem integração com APIs de terceiros e/ou acesso a qualquer recurso externo. Nessa palestra vou mostrar como utilizar ferramentas para testar essa integração desacoplando sua suite de testes desses recursos.
11:00
 [Térreo] Alvaro Gil – Developer and client interactions: Deliver quality work while avoiding frustrations
“Alvaro is a Developer and UI Designer passionate about programming and agile methodologies. His past work include technologies such as C++ and .NET in the fields of CG and GIS. He’s now happy to have settled on Ruby, working at Cubox, developing web apps and pushing forward web technologies everyday”
Alvaro will talk about his experiences working with different kinds of clients and projects. How to deal with day by day programming work, manage frustrations and deal with the client’s expectations from a remote developer’s point of view.
14:00

 [Térreo] Rafael Lima – Lean Startup, o tsunami que afundará o movimento ágil
Bootstrapper, focado em inovações em tecnologia. Fundador da BielSystems, BUNDLES Brasil e Startup DEV. Desenvolvedor web há 15 anos.

O movimento ágil foi apenas uma marola. Estamos agora naquele momento em que as águas se recolhem para o mar e os que já conhecem este movimento se preparam para o tsunami que está por vir. O movimento Lean Startup ainda é pouco conhecido, mas já está balançando o mercado de tecnologia e transformando a forma como novos produtos são construídos e lançados. Se você deseja aprender a surfar grandes ondas, esta palestra é para você.

15:00

 [5º andar] Uilton Dutra – É hora de matar o SQL? Como deixar as buzzwords de lado e escolher com a razão
Trabalha há 12 anos com tecnologia da informação onde atuou nas áreas de desenvolvimento, pesquisa e infraestrutura. Atualmente é sócio da Ocapi e responsável pelo desenvolvimento do software Vitrines Inteligentes, que indexa produtos de e-commerce e exibe em uma vitrine dinâmica para usuários com alto poder de conversão.

Escolher o banco de dados mais adequado ao seu projeto é importante e não pode se basear apenas em boatos. Esta palestra é uma visão geral sobre as soluções open-source disponíveis. Vamos desmistificar alguns mitos sobre os bancos de dados relacionais e fazer uma comparação entre os casos de uso de alternativas como Redis, Memcached, MongoDB, CouchDB, HBase entre outros.

16:30
 [Térreo] Daniel Cukier – Construindo Robôs Web em Ruby
Daniel Cukier trabalha com desenvolvimento de software desde 1995, principalmente com Java e Ruby (Rails). É doutorando em Ciência da Computação pela Universidade de São Paulo, onde fez mestrado com a dissertação Padrões para Introduzir Novas Ideias na Indústria de Software. Ativo na comunidade ágil desde 2005, quando ingressou na Agilcoop, produzindo podcasts, artigos e ministrando cursos sobre agilidade. Introduziu o uso de Métodos Ágeis na Locaweb, maior empresa de hosting da America Latina, onde participou de vários projetos de software na área de SaaS e IaS. Organiza o evento DevOpsDays Brasil, um encontro de desenvolvedores com sysadmins. É autor do blog AgileAndArt, onde costuma escrever sobre as semelhanças entre desenvolvimento de software e as artes. Além da presença na área de software, trabalha com teatro, música (toca violão) e poesia.

É muito fácil fazer robôs em Ruby para “vasculhar” a Web em busca de dados, além da incrível possibilidade de automatizar tarefas repetitivas e burocráticas. Vamos mostrar como fazer isso de forma simples, rápida e eficaz, utilizando gems como Nokogiri, RestClient e JSON. O que é possível automatizar? Quais são os desafios que ainda não foram vencidos? Como evitar que Robôs invadam o seu site?

17:30

 [Térreo] Bruno Zanchet – Causos de alguém na linha de frente
Ex-Yahoo, Ex-ThoughtWorks, construiu um dos top 250 sites da internet como um side project e agora tem que lidar com isso em tempo integral.

Escalar um site para 300^H^H^H 500^H^H^H 600 milhões de pageviews por mês gera um bocado de histórias.

18:30

 [Térreo] [Keynote] Fábio Akita – Discutindo Rails e Arquiteturas
Fabio Akita é um conhecido blogueiro e evangelista da comunidade Ruby on Rails e Agile. Atualmente é Gerente de Projetos pela Gonow Tecnologia. Foi Gerente de Projetos na Locaweb, onde também fez parceria na concepção da conferência anual Rails Summit (rebatizada de “RubyConf Brasil”). Já trabalhou como Brazil Rails Practice Manager para a consultoria americana Surgeworks LLC. Por mais de 5 anos foi consultor de integração e desenvolvimento no mundo SAP. Tem mais de 15 anos de experiência nas áreas de desenvolvimento de software e gestão de projetos, dá palestras em faculdades e conferências de tecnologia e gestão
A primeira fase de um programador é simplesmente juntar um monte de código junto e fazer executar alguma coisa. Em breve ele aprende a ‘organizar’ esse código e descobrirá que muitos já passaram por isso e discutem software em termos de ‘design’ e ‘arquiteturas’. Finalmente entenderá que muitos problemas de software foram organizados na forma de ‘patterns’. Eis onde muitos confundem ‘tentativas’ com ‘leis’ e discussões insensatas surgem nas comunidades e no mercado de desenvolvimento em geral. Ruby on Rails é, em si, um desses ‘patterns’ e o ecossistema de soluções desenvolvidas sobre Ruby e Rails formam mais ‘patterns’. Vamos discutir e investigar um pouco as tarefas de um arquiteto de software e como bons designs emergem dos problemas de software.
19:30

 Lightining TALKS
20:30
HAPPY HOUR na Liberdade [Sede Engage, Semente e Jungle It]

26
jul 11

Ruby Style Guide

Tabs ou espaços? Identar ou não.

Cada linguagem tem os seus padrões de para código fonte. Algumas vezes de forma clara e bem divulgada, outras não.

Eu achei este guia por um tweet do @ruby_news. É um pouco extenso, mas bem interessante.

Original Source: https://github.com/chneukirchen/styleguide

= Christian Neukirchen's Ruby Style Guide

You may not like all rules presented here, but they work very well for
me and have helped producing high quality code. Everyone is free to
code however they want, write and follow their own style guides, but
when you contribute to my code, please follow these rules:


== Formatting:

* Use ASCII (or UTF-8, if you have to).

* Use 2 space indent, no tabs.

* Use Unix-style line endings.

* Use spaces around operators, after commas, colons and semicolons,
  around { and before }.

* No spaces after (, [ and before ], ).

* Use two spaces before statement modifiers (postfix
  if/unless/while/until/rescue).

* Indent when as deep as case.

* Use an empty line before the return value of a method (unless it
  only has one line), and an empty line between defs.

* Use RDoc and its conventions for API documentation. Don't put an
  empty line between the comment block and the def.

* Use empty lines to break up a long method into logical paragraphs.

* Keep lines fewer than 80 characters.

* Avoid trailing whitespace.


== Syntax:

* Use def with parentheses when there are arguments.

* Never use for, unless you exactly know why.

* Never use then.

* Use when x; ... for one-line cases.

* Use &&/|| for boolean expressions, and/or for control flow. (Rule
  of thumb: If you have to use outer parentheses, you are using the
  wrong operators.)

* Avoid multiline ?:, use if.

* Suppress superfluous parentheses when calling methods, but keep them
  when calling "functions", i.e. when you use the return value in the
  same line.

    x = Math.sin(y)
    array.delete e

* Prefer {...} over do...end. Multiline {...} is fine: having
  different statement endings (} for blocks, end for if/while/...)
  makes it easier to see what ends where. But use do...end for
  "control flow" and "method definitions" (e.g. in Rakefiles and
  certain DSLs.) Avoid do...end when chaining.

* Avoid return where not required.

* Avoid line continuation (\) where not required.

* Using the return value of = is okay:

    if v = array.grep(/foo/) ...

* Use ||= freely.

* Use non-OO regexps (they won't make the code better). Freely use
  =~, $0-9, $~, $` and $' when needed.


== Naming:

* Use snake_case for methods.

* Use CamelCase for classes and modules. (Keep acronyms like HTTP,
  RFC, XML uppercase.)

* Use SCREAMING_SNAKE_CASE for other constants.

* The length of an identifier determines its scope. Use one-letter
  variables for short block/method parameters, according to this
  scheme:

    a,b,c: any object
    d: directory names
    e: elements of an Enumerable
    ex: rescued exceptions
    f: files and file names
    i,j: indexes
    k: the key part of a hash entry
    m: methods
    o: any object
    r: return values of short methods
    s: strings
    v: any value
    v: the value part of a hash entry
    x,y,z: numbers

  And in general, the first letter of the class name if all objects
  are of that type.

* Use _ or names prefixed with _ for unused variables.

* When using inject with short blocks, name the arguments |a, e|
  (mnemonic: accumulator, element)

* When defining binary operators, name the argument "other".

* Prefer map over collect, find over detect, find_all over select,
  size over length.


== Comments:

* Comments longer than a word are capitalized and use punctuation.
  Use two spaces after periods.

* Avoid superfluous comments.


== The rest:

* Write ruby -w safe code.

* Avoid hashes-as-optional-parameters. Does the method do too much?

* Avoid long methods.

* Avoid long parameter lists.

* Use def self.method to define singleton methods.

* Add "global" methods to Kernel (if you have to) and make them private.

* Avoid alias when alias_method will do.

* Use OptionParser for parsing complex command line options and
  ruby -s for trivial command line options.

* Write for 1.8, but avoid doing things you know that will break in 1.9.

* Avoid needless metaprogramming.


== General:

* Code in a functional way, avoid mutation when it makes sense.

* Do not mutate arguments unless that is the purpose of the method.

* Do not mess around in core classes when writing libraries.

* Do not program defensively.
  (See http://www.erlang.se/doc/programming_rules.shtml#HDR11.)

* Keep the code simple.

* Don't overdesign.

* Don't underdesign.

* Avoid bugs.

* Read other style guides and apply the parts that don't dissent with
  this list.

* Be consistent.

* Use common sense.
view raw gistfile1.txt This Gist brought to you by GitHub.

24
jul 11

Fazendo o JRuby usar a sintaxe do Ruby 1.9

Sinceramente, nunca fui fã dos hashes no modelo { :chave => ‘valor’ }. Eu acho esta sintaxe terrívelmente feia, ainda mais quando comparada com a nova, que lembra o jeitão do javascript { chave: ‘valor’ }

Claro que não mudou somente isto. Entre as mudanças mais importantes podemos destacar:

  • Ruby 1.9 agora deixa de ser interpretada para ser bytecode-compiled (usando YARV VM)
  • A classe String foi refeita para agora estar ciente que existe uma coisa chamada encoding
  • Expressões regulares agora rodam na engine Oniguruma, que traz novos recursos
  • A biblioteca enumerator da stdlib foi adicionada ao core e a grande maioria dos métodos em Enumerable agora retornam uma instância de Enumerator quando chamados sem um bloco
  • Symbol#to_proc foi criada
  • Foi criada uma nova sintaxe para os lambdas, -> que permite parâmetros com valores padrão, entre outras novidades

Tem uma apresentação antiga chamada Ruby 1.9: What to expect que fala em mais detalhes o que mudou.

Mas afinal, #comofaz?

A melhor forma é criando uma variável de ambiente JRUB_OPTS e atribuir o valor –1.9 nela.

Você pode passar isso para o jruby como parâmetro, mas algumas operações iriam ainda usar o sintaxe do 1.8.

No MacOS e no Linux:

export JRUBY_OPTS=’–1.9′

No Windows:

SET JRUBY_OPTS=’–1.9′

 


16
jul 11

Acessando classes java em jruby

Java and Ruby

Java and Ruby

Integrar é preciso.

Em um ambiente de produção moderno não há muito espaço para a uniformidade tecnológica. É quase certo que você terá de tudo um pouco ao entregar uma solução.

Por uma necessidade destas eu estou precisando integrar umas aplicações em java com ruby. Está sendo pra lá de divertido!

Minha classe java

Para poder mostrar como fazer, vamos antes criar uma classe bem simples em java para ser consumida em jruby.

package e7r;

/**
* Simple calculator class to be used inside jruby
*/
public class Calculator {

  /**
* Adds two integer numbers
* @param a First value
* @param b Second value
* @return The sum of two values
*/
  public int sum(int a, int b) {
    return a + b;
  }

}

É uma calculadora muito simples. Na verdade ela somente adiciona dois valores.

Para compilar e gerar o jar basta seguir os passos abaixo:

# two steps to create a jar manually

javac Calculator.java
jar cvf SmallestJar.jar Calculator.class

Eu não tinha nem idéia de como criar um jar até ler o post Creating an executable jar file.

Mais fácil impossível!

Preparando o script jruby

Basicamente você pode consumir uma classe java de três formas:

  • Diretamente (nomes completos de pacotes a cada uso)
  • Incluindo a classe no object
  • Incluindo um pacote dentro de um módulo ruby

Ganhando “super-poderes”

Existe um passo comum a todas elas para permitir o acesso às classes java no ruby:
require ‘java’
Ao efetuar este require você terá uma série de métodos auxiliares que deixarão a sua vida muito mais simples para efetuar a integração.

Chamando um jar

OK! Efetuamos o require do java, e temos tudo o que precisamos para consumir uma classe, agora precisamos indicar o jar onde nossa classe está.

Isto é feito pelo comando require. Você não precisa colocar a extensão .jar, ele automáticamente procurará tanto arquivos .rb quanto .jar, sendo que o seu jar deve ou estar no CLASSPATH ou na árvore de diretórios do consumidor.

Logo, requires como  ‘lib/SimplestJar’ ou ‘../../SimplestJar’ são válidos.

Importante, você somente precisa dar require nos jars que contém classes que você consome diretamente. As dependências serão automaticamente carregadas!

Consumindo a classe

Diretamente (nomes completos de pacotes a cada uso)

É a forma favorita dos masoquistas de plantão.

Para acessar uma classe java, você precisa iniciar a chamada com o módulo Java:: seguido do caminho completo nos pacotes até a classe.

Como desenvolvedores java tem punhos de aço (principalmente os da ASF) você pode se preparar para usar namespaces muuuito longos.

Incluindo a classe no object

Mesmo quando no irb, estamos em um contexto de uma classe. (É só digitar self.class para descobrir de quem).

Assim, você pode uma única vez fazer esta inclusão e em diante a classe estará disponível diretamente pelo nome dela.

Para fazer a inclusão utilize o comando include_class usando o Java:: seguido do caminho completo até a classe.

Incluindo o pacote em um módulo ruby

Sempre é bom poder organizar as coisas.

Neste projeto que estou fazendo, eu quero simplificar os trezentos mil pacotes em uns quatro ou cinco módulos. Não há razão alguma justificável para termos mais.

Para isso dentro do módulo você pode usar o método import_package para vincular as classes java ao seu módulo ruby.

O fonte completo

#
# First you must require java to gain some special powers
# Remember that this works only with jruby!
#
require 'java'

#
# Then require your jar file. Note that you can't do something like
# import SmallestJar.*. You must require each jar by yourself.
#
require 'SmallestJar'

# Some ways of consuming java classes inside jruby

#
# 1. Let's do it the hard way: using full package name every time
# - remember to always start with a Java:: and then the package namespace
# - some namespaces like org, com, etc. are mapped directly
#

calculator = Java::e7r.Calculator.new
puts calculator.sum(10, 20)

#
# 2. Let's do it the messy way: including the package in the current context
#

include_class Java::e7r.Calculator
calculator = Calculator.new # look mama, no namespaces
puts calculator.sum 10, 20

#
# 3. The man's way: Create a module to put the classes (via include_package)
#

module E7R
  include_package 'e7r'
end

calculator = E7R::Calculator.new
puts calculator.sum 10, 20

# EOF
view raw calculator.rb This Gist brought to you by GitHub.

Conclusão

Poder consumir classes java dentro do jruby somente fazem crescer as possibilidade de ter a um lado uma linguagem moderna, flexível e produtiva com toda a estabilidade e escalabilidade do java.

Preciso fazer uns testes destes usando ironruby.


16
jul 11

Executando um script ruby no contexto de uma app rails

Eu estou desenvolvendo uma aplicação que precisa executar um processo de atualização de dados diariamente.

Este processo será disparado via cron, e para tanto eu preciso que ele rode no contexto da minha aplicação em rails para consumir os models dela.

Como diz a canção de Vinícius de Moraes, …aos sábados em casa tomo um porre e sonho soluções fenomenais!... :)

OK! Nada disto necessário, na verdade logo após as soluções fenomenais eu achei a mais simples e que funciona bem:

Dentro do diretório do projeto você pode executar o comando rails runner.

rails my-directory/my-ruby-script.rb

 


3
jul 11

LoadError: no such file to load — spec_helper

Eu estou trabalhando em uma aplicação bem simples, e precisava utilizar o RSpec para os testes já que ele é padrão na gem que estou usando.

Bem, tenho de admitir que Test::Unit e minitest eu já usei bastante, mas o RSpec ainda é um ilustre desconhecido.

O problema

Eu estou trabalhando em um projeto que utiliza algumas tecnologias diferentes, e que por sua vez ainda estão com a documentação meio ausente. Ao tentar rodar os specs eu recebi o seguinte erro:

Onde está spec_helper.rb?

A resposta para ele é mais do que simples:

é só criar o arquivo spec_helper.rb!

Ok, mas e como que é esse arquivo?

A instalação do RSpec

A instalação dele foi bem tranquila. Você somente tem de instalar as gems no seu ruby.

Depois eu adicionei as dependências necessárias no arquivo Gemfile

O que eu não tinha visto na documentação era que eu precisava no meu projeto em Rails instalar o RSpec.

Na instalação ele gerou os arquivos necessários, e então o RSpec funcionou sem problemas.

RSpec working :)

O log da sessão

Se interessar, o log completo da sessão está nos meus gists no github.

 


3
jul 11

Como recarregar um fonte no irb

Quando estou testando algo em Ruby, o irb é imprescindível, mas e quando a gente precisa recarregar um fonte que já foi carregado com um require?

Fácil, é só usar o comando load.

Lembre-se que com load você precisa inclusive colocar a extensão do arquido (geralemente o .rb)

Precisa informar a extensão com load


26
jun 11

Frio, avião e muito Rails em Porto Alegre

RS on Rails 2011

Porque viajar, conhecer e se enturmar é preciso!

Há uns dias atrás eu vi um tweet do Daniel Wildt falando do evento RS on Rails. Que a comunidade de agile no Rio Grande do Sul é forte, isto eu já tinha notado, agora é a hora de dar uma conferida na comunidade de Rails.

Não tem como resistir, pois Porto Alegre é uma cidade muito bacana, a passagem aérea para lá saindo de Curitiba não é das mais caras e muita conversa sobre Rails.

Ele ocorre sábado, 13 de agosto de 2011 às 9h da manhã e custa só R$70

Para quem quiser, sexta-feira dia 12 vai rolar uma aula para iniciantes.

Vendo a lista de palestrantes, alguns conhecidos, outros, nem de nome, mas o mais legal é ler as descrições das palestrar. São tópicos interessantíssimos e extremamente antenados com o mundo rails de agora.

Sempre que se fala em ruby ou rails vê-se aquelas caras de ahhh sei não, é mais seguro .net ou java. Bem, isso já dá outro post, mas o que posso falar é que na lista de palestrantes tem gente com aplicações extremamente sérias e rodando ruby/rails, como globo.com, Objetiva e a Softa.

Se esses caras tem algo para falar, eu com certeza quero ouvir!

E como está o ruby/rails em Curitiba?

Aqui por Curitiba a comunidade está se organizando. Para quem não conhece temos o GURU-PR, que é o Grupo de Usuários de Ruby. Tivemos nosso primeiro encontro dia 09-06-2011 no BierHoff do Shopping Estação.

Se você usa ou quer conhecer ruby ou rails, venha fazer parte da nossa lista no Google Groups.

Um evento nosso, e em Curitiba

Este ano o DevDay vai estar com uma trilha de ruby. Estamos à caça de boas palestras para agitar a comunidade em Curitiba.

Conhece alguém? Quer palestrar? Entre em contato! Não deixe de participar.