Quantcast
Channel: AkitaOnRails.com
Viewing all 481 articles
Browse latest View live

Previsivelmente Irracional

$
0
0

Original de 4/3/2010: Gestão 2.0

Existe um ramo de pesquisa conhecido como “Economia Comportamental”, uma vertente um pouco diferente da Economia tradicional. Enquanto esta última assume um mundo com pessoas racionais, que tomam decisões baseadas em análises de custo-benefício, o primeiro leva em consideração fatores sociais, cognitivos e emocionais que influenciam nossas decisões do dia-a-dia.

Nós acreditamos que todos os dias tomamos decisões racionais, mas a verdade é que na maior parte do tempo nós damos chutes, decidimos baseados em emoção, e isso trás resultados muito interessantes. Um dos pesquisadores mais famosos é o Prof. Dan Ariely, escritor do livro “Previsivelmente Irracional”.

Nesse livro ele analisa tópicos sobre como enxergamos preços, porque preços não são baseados em “oferta e procura”, por que somos desonestos, como funciona o efeito Placebo. Estamos falando de anos de experiência empírica.

Assistam este trecho que legendei de sua palestra no TED sobre o assunto:

Por que isso é relevante? Porque lidamos com pessoas todos os dias. Tomamos decisões influenciadas por pessoas ou, pior, que irão afetar outras pessoas. Dormimos com nossa consciência tranquila porque achamos que tomamos a melhor decisão racional baseada nos dados que tínhamos à disposição.

Mas e se nossas decisões não forem tão racionais quanto pensamos? E se somos facilmente influenciados por dados e circunstâncias? Melhor ainda: e se ser consciente desse fato nos ajudar a entender nossas limitações e nos ajudar a tomar decisões realmente melhores?

Por isso mesmo vale a pena entender nossa própria psicologia. Especialmente alguém numa posição de gerência precisa tentar entender pessoas, pois o próprio trabalho significa “gerenciar pessoas”.

Nós somos irracionais, previsivelmente irracionais. Use isso a seu favor.


Rubyconf Brasil 2013: Conheça Hal Fulton

$
0
0

Hal Fulton

Se você ainda não se inscreveu, não perca a oportunidade. Vá ao site oficial para se cadastrar agora mesmo! A conferência inicia no dia 29 de Agosto.

Este é o 6o ano consecutivo onde a Locaweb e eu organizamos mais uma grande Rubyconf no Brasil. Por alguns anos eu queria trazer um dos autores mais influentes da minha biblioteca: Hal Fulton, autor do The Ruby Way, um dos melhores livros para aprender Ruby.

Finalmente, ele está vindo pra cá! Ele será o palestrante que vai abrir o segundo dia da conferência no dia 30 de Agosto. Então não perca a oportunidade de conhecê-lo pessoalmente. Vamos conhecer um pouco mais sobre ele antes do evento.

"Sua palestra será sobre DSLs Externas, um conceito importante para ser dominado por todo programador Ruby. Se alguém está apenas começando com Ruby, poderia explicar quais são os requerimentos que ele deve entender o que você vai apresentar?"

Hal: Esta palestra não é especificamente relevante para Rails, embora certamente existam áreas onde uma solução "customizada" de parsing seja necessária. Você provavelmente vai usar mais este material se estiver desenvolvendo bibliotecas, ferramentas ou plugins. Se for um iniciante em Ruby, você ainda vai conseguir entender o tópico. Ajuda muito se tiver conhecimento genuíno em ciência da computação (ou pelo menos entenda o que "parsing" significa).

"Muitos desenvolvedores adorariam se tornar tão experientes e fluentes rm Ruby como você. Quais foram as dificuldades que teve que ultrapassar para se tornar um grande desenvolvedor? Algumas dicas para iniciantes em Ruby?"

Hal: As dificuldades de cada um serão diferentes. Uma das minhas maiores fraquesas é o "medo da complexidade."É por isso que embora eu seja um expert em Ruby, eu ainda seja um iniciante em Rails. (Sim, eles são diferentes! Ruby existia mais de 10 anos antes de existir um "Ruby on Rails.")

Meu melhor conselho é:

  1. Leia livros. Leia MUITOS livros. Não apenas livros do tipo "como se faz", mas livros baseados em teorias clássicas como Refactoring do Martin Fowler e Object-Oriented Software Construction do Bertrand Meyer. E (como um dos meus livros de ciência da computação recomendaram) leia Zen and the Art of Motorcycle Maintenance

  2. Passe por um curso de verdade se puder. Não há substituto para um professor humano que possa responder perguntas.

  3. Leia o código de outras pessoas, especialmente dos "melhores" desenvolvedores que puder encontrar.

  4. Faça pair-programming sempre que puder. Mesmo que a pessoa seja menos experiente do que você, você ainda vai aprender pela experiência.

  5. Contribua para projetos de código aberto sempre que achar tempo e tiver a capacidade.

  6. Experimente! Tente as ferramentas e bibliotecas e técnicas sobre os quais lê. Escreva pequenas ferramentas para seu próprio uso. Imite as idéias de outras pessoas e tente melhorá-las.

"Existem tantas tecnologias, boas práticas e tudo mais que são lançados o tempo todo. Na sua opinião pessoal, e talvez relacionado ao seu trabalho atual, quais são as tendências em tecnologia que acha que devemos prestar atenção no futuro próximo?"

Hal: Pergunta difícil! :) Obviamente tecnologias móveis estão se tornando mais importantes. Inter-operar e sincronizar entre diferentes dispositivos e aplicação é uma preocupação crescente.

Sobre quais tecnologias especificamente deveríamos observar -- isso é uma pergunta ainda mais difícil. Ninguém consegue ver o futuro. Em 2006, eu achava que RSS seria muito importante; mas ele não cresceu tanto quanto eu esperava.

Um amigo me deu uma regra para seguir: Espere até ouvir sobre uma nova peça de tecnologia pela terceira vez -- então vá e leia a respeito.

Além disso, eu tendo a ser mais favorável a soluções "abertas" de tecnologia (embora não possamos ignorar algumas das tecnologias menos abertas como o iOS da Apple)

Rubyconf Brasil 2013: Meet Hal Fulton

$
0
0

Hal Fulton

If you didn't register yet, don't miss this opportunity. Go to the official website to register as soon as possible. The conference will commence on August 29th.

This is the 6th consecutive year that Locaweb and myself are organizing yet another great Rubyconf in Brazil. For some years I wanted to bring one of the most influencial authors in my library: Hal Futon, author of The Ruby Way, one of the best books to learn Ruby.

Finally, he will be here! He will be the keynote speaker to open the second day of the conference on August 30rd. So don't miss the opportunity to meet him. Let's get to know some more about him before the event.

"Your talk is about External DSLs, an important concept to be mastered by every Ruby programmer. If someone is just beginning with Ruby, can you explain what some of the requirements are to understand what you're going to talk about?"

Hal: This talk isn't specifically relevant to Rails, although there certainly are areas in which a "custom" parsing solution is needed. You'd be more likely to use this material if you are developing libraries, tools, or plugins. If you're a beginner in Ruby, you can still understand the topic. It helps if you have some genuine background in computer science (or at least have an understanding of what "parsing" really means).

"Many developers would love to become as experienced and fluent in Ruby as you are. What have been some of the pitfalls you had to overcome in order to become a great developer? Any good tips for a Ruby beginner?"

Hal: Everyone's pitfalls will be different. One of my biggest weaknesses is the "fear of complexity." This is why, although I am a Ruby expert, I am still a newbie in Rails myself. (Yes, they are different! Ruby existed more than 10 years before there was any "Ruby on Rails.")

My best advice is:

  1. Read books. Read a LOT of books. Not just how-to books, but theory-based books and the classics such as Refactoring by Martin Fowler and Object-Oriented Software Construction by Bertrand Meyer. And (as one of my college computer science textbooks recommended) read Zen and the Art of Motorcycle Maintenance.

  2. Take actual coursework if you can. There is no substitute for having a human teacher who can answer questions.

  3. Read other people's code, especially the "best" developers you can find.

  4. Pair-program whenever you can. Even if the other person is less skilled than you, you will still learn from the experience.

  5. Contribute to open-source projects as you find the time and the skill.

  6. Experiment! Try the tools and libraries and techniques that you read about. Write little tools for your own use. Imitate other people's ideas and try to improve on them.

"There are so many new technologies, best practices and so on being released all the time. In your personal opinion, and maybe related to your current field of work, what are some of the trends in technology that you think we should be paying attention for the near future?"

Hal: Such a hard question! :) Obviously mobile technology is getting more and more important. Inter-operating and syncing between different devices and applications is a growing concern.

As for what specific technologies we should watch -- that is an even harder question. No one can see the future. In 2006, I thought RSS was going to be very important; but it did not grow as much as I expected.

A friend gave me a rule to follow: Wait until you hear of a new piece of technology for the third time -- then go and read about it.

Also, I tend to favor more "open" solutions where technology is concerned (although we can't dismiss some of the less-open tech such as Apple's iOS).

Rubyconf Brasil 2013: Conheça Pablo Astigarraga

$
0
0

Pablo Astigarraga

Se você ainda não se inscreveu, não perca a oportunidade. Vá ao site oficial para se cadastrar agora mesmo! A conferência inicia no dia 29 de Agosto.

Este é o 6o ano consecutivo onde a Locaweb e eu organizamos mais uma grande Rubyconf no Brasil. Muitas empresas estabelecidas e startups de tecnologia estão apoiando a conferência enviando grandes desenvolvedores.

Conheça a Vivid Cortex um serviço de ferramentas de monitoramento e anális de MySQL. Eles acabaram de conseguir levantar USD 2 milhões para melhorar ainda mais sua tecnologia. Pablo Astigarraga virá para palestrar no evento, mais especificamente sobre um assunto que a maioria das pessoas acham que conhecem mas não necessariamente: o design pattern de Model-View-Controller (MVC).

Não perca sua palestra precisamente às 13:15 do primeiro dia do evento. Vamos conhecer um pouco mais sobre ele:

"Sua palestra será sobre o pattern MVC e sua história, um conceito importante para ser dominado por todo programador Ruby on Rails e mesmo Javascript. Se alguém está apenas começando com Ruby, poderia explicar quais são os requerimentos que ele deve entender o que você vai apresentar?"

Pablo: Minha palestra será mais sobre o próprio design pattern do que sobre a implementação particular do Rails, então ter familiaridade com Rails ou qualquer outro framework MVC provavelmente ajudará mas você não precisa saber em detalhes para conseguir seguir esta palestra. O objetivo da palestra será dar alguns insights sobre como este design pattern em particular foi desenvolvido através dos anos e quais são os problemas que ele resolve bem e os problemas que ainda não sabemos bem como resolver ainda, então esse conteúdo deve ser uma adição para qualquer um que desenvolva software pra web hoje em dia.

"Muitos desenvolvedores adorariam se tornar tão experientes e fluentes rm Ruby como você. Quais foram as dificuldades que teve que ultrapassar para se tornar um grande desenvolvedor? Algumas dicas para iniciantes em Ruby?"

Pablo: Boa pergunta. Eu acho que a única dificuldade real no caminho para se tornar um bom desenvolvedor é a complacência. Se nós, enquanto desenvolvedores, mantivermos mente aberta e nos lembrar de sempre sermos brincalhões, apaixonados e informados sobre nossa arte nós nos tornaremos bons nisso, o pensamento assustador é que para continuarmos sendo bons desenvolvedores nós precisamos nunca parar de aprender, mas isso também é incrível.

"Existem tantas tecnologias, boas práticas e tudo mais que são lançados o tempo todo. Na sua opinião pessoal, e talvez relacionado ao seu trabalho atual, quais são as tendências em tecnologia que acha que devemos prestar atenção no futuro próximo?"

Pablo: Hmm, eu acho que o mundo de plataforma como serviço (PaaS) está se tornando super interessante. Claro: Heroku pavimentou o caminho alguns anos atrás sendo todo mágico sobre seus deploys, mas agora que eles tornaram sua ferramenta de buildpacks Docker em código-aberto está super fácil de configurar seu próprio PaaS com projetos como o Dokku, eu tenho isso no meu VPS e consigo fazer deploy de Ruby (e muito mais) com zero configurações simplesmente fazendo um git push para ele, esse é o futuro dos deploys eu acho, e eu adoro isso.

Rubyconf Brasil 2013: Meet Pablo Astigarraga

$
0
0

Pablo Astigarraga

If you didn't register yet, don't miss this opportunity. Go to the official website to register as soon as possible. The conference will commence on August 29th.

This is the 6th consecutive year that Locaweb and myself are organizing yet another great Rubyconf in Brazil. Several great established companies and tech startup are supporting the conference sending great developers.

Meet Vivid Cortex a MySQL monitoring and analysis tools as a service. They just raised $2M to further improve their technology. Pablo Astigarraga is coming to speak at the event, more specifically about a subject that most people think they know but they actually don't: the classic Model-View-Controller (MVC) design pattern.

Don't miss his talk precisely at 1:15PM of the first day of the event. Let's get to know more about him:

"Your talk is about the MVC pattern and it's history, an important concept to be mastered by every Ruby on Rails or even Javascript programmer. If someone is just beginning with Ruby, can you explain what some of the requirements are to understand what you're going to talk about?"

Pablo: My talk is much more about the design pattern itself than about the particular implementation of Rails, so while having basic familiarity with Rails or any other MVC framework will probably be helpful but you don't really need it in order to follow the talk. The aim of the talk itself is to give some insight on how this particular design pattern has developed over the years and what are the problems it solves well and the problems that we aren't quite certain of how to approach yet, so hopefully it should add to whomever does software on the web these days.

"Many developers would love to become as experienced and fluent in Ruby as you are. What have been some of the pitfalls you had to overcome in order to become a great developer? Any good tips for a Ruby beginner?"

Pablo: Good question. I think the only real pitfall in the way of becoming a good developer is complacence. If we as developers keep an open mind and remember to always be playful, passionate and informed about our craft we'll become good at it, the scary thought is that in order to keep being good developers we need to never stop learning stuff, but that's kind of awesome, too.

In the end the only things we need are practice and willingness. :)

"There are so many new technologies, best practices and so on being released all the time. In your personal opinion, and maybe related to your current field of work, what are some of the trends in technology that you think we should be paying attention for the near future?"

Pablo: Hum, I think the platform as a service world is becoming super interesting. Sure: Heroku paved the way a few years ago by being all magical about their deploys, but now that they've open sourced their buildpack tool Docker it's super easy to set up your own PaaS with projects like Dokku, I have this on my own VPS and I am able to deploy Ruby (and many more) apps with zero configuration simply by doing a git push to it, this is the future for all deploys, I think, and I love it.

Usando associações de ActiveRecord incorretamente

$
0
0

Nos últimos dias, trabalhando num projeto legado, encontrei uma situação que me fez perder pelo menos um dia inteiro. É uma situação que já vi algumas outras vezes e que achei interessante explicar para que ninguém mais caísse no mesmo problema.

TL;DR

Pense numa associação muito básica:

1234567
classShoppingList
  has_many :shopping_itemsendclassShoppingItem
  belongs_to :shopping_listend

Se você não souber como associações funcionam, poderia começar pensando da seguinte forma:

123
lista = ShoppingList.first        # pega uma lista
item = lista.shopping_items.first # pega um item dessa lista
lista2 = item.shopping_list       # a partir do item pega a mesma lista

Se fizer uma comparação simples, terá o seguinte:

12
lista == lista2# => true

De fato, os #id dos dois objetos serão os mesmos. "Tecnicamente" parece que deveriam ser iguais. Só que "ser igual" e "ser o mesmo" não é a mesma coisa. Entenda o seguinte:

123456
lista.tax_rate# => 0.15
lista.tax_rate = 2.0# => 2.0
lista2.tax_rate# => 0.15

Esta é a raíz do problema: se não prestar atenção, pode acabar assumindo que ambos os objetos são os mesmos e, portanto, se mexer nos atributos de um estaria automaticamente mexendo no segundo, já que as variáveis "apontariam" para o mesmo objeto. Mas os objetos na realidade não são os mesmos. Todo objeto Ruby tem um método #object_id que o identifica unicamente:

1234
lista.object_id# => 25485980
lista2.object_id# => 44491200

Caso Completo

No caso do meu projeto ainda estava mais complicado porque era uma hierarquia profunda de classes e nomenclaturas fora do comum, o que dificultou identificar logo de cara o problema. Para este artigo escrevi um pequeno app com uma versão simplificada da mesma situação.

Baixe na sua máquina e execute da seguinte forma:

123456
git clone https://github.com/akitaonrails/shopping-list-demo.git
cd shopping-list-demo
git checkout -b bug b156b84dfaf2968a218955e09c8d15a9048e8f59
bundle install
rake db:migrate
rails s

Agora crie uma nova lista e alguns itens e brinque por alguns momentos. Esse aplicativo é muito simples. A peculiaridade é que o model ShoppingList possui dois campos especiais: um total que funciona como se fosse um counter cache e um campo tax_rate que representa um imposto a ser adicionado. Existem algumas formas de implementar isso, obviamente escolhi a forma que dá problemas nesse aplicativo.

O problema acontece quando você atualiza o tax_rate de um ShoppingList. Neste exemplo, existe um callback chamado update_total que é executado antes do ShoppingList ser salvo.

Nesse update_total ele pega todos os items associados, multiplica sua quantidade e preço, adiciona o imposto, e vai somando até ter o total, então atualiza o total do objeto pai, ShoppingList e finalmente salva. O código é assim:

123456789
# app/models/shopping_list.rb
before_save :update_total

private

  defupdate_total@calculator = ShoppingCalculator.new(self)self.total = @calculator.totalend

Para ilustrar o que quis dizer com "hierarquia mais profunda" digamos que estamos delegando a tarefa de calcular (no meu projeto era um cálculo bem mais complexo do que neste exemplo, claro).

1234567891011121314
# app/services/shopping_calculator.rbclassShoppingCalculatordefinitialize(shopping_list)@shopping_list = shopping_listenddefshopping_items@shopping_list.shopping_itemsenddeftotal
    shopping_items.map(&:total).reduce(&:+)endend

Para quem achou a sintaxe do método total estranho, é apenas uma forma mais curta de escrever isto:

1
shopping_items.map { |item| item.total }.inject(0) { |total, valor| total += valor }

Ou ainda

1
shopping_items.inject(0) { |total, item| total += item.total }

Note que ele precisa do método total no model ShoppingItem vamos ver como ele é:

12345678910111213
# app/models/shopping_item.rbclassShoppingItem< ActiveRecord::Base
  belongs_to :shopping_list
  attr_accessible :name, :price, :quantitydefsub_total
    quantity * priceenddeftotal
    sub_total + ( sub_total * shopping_list.tax_rate )endend

Conseguiram ver o problema? Ele acontece exatamente quando o método total chama shopping_list.tax_rate. Nesse momento ele dispara a associação definida em belongs_to :shopping_list e faz uma nova query ao banco, puxando um objeto novo. Você pode ver isso ao notar que no log aparece um novo SELECT sendo executado.

Exemplo

Para ilustrar digamos que salvamos um novo ShoppingList com tax_rate de 0.0, ou seja, zero de imposto.

Na mesma lista gravamos um ShoppingItem de price igual a 10.0 e quantity de 5 o que nos dá um total de 50.0.

Salvamos outro ShoppingItem de price igual a 15.0 e quantity de 3 o que nos dá um total de 45.

Portanto o total da ShoppingList será de 95.

Correto

Até aqui tudo bem. Agora, na aplicação, queremos editar novamente a lista e mudar o tax_rate para 0.1 (10%). Isso deveria aumentar o total para 104.5. Porém ao mandar salvar, o total continua inalterado em 95.0!

Errado

Mais estranho, é que se mandar editar novamente, o campo tax_rate vai aparecer corretamente como 0.1 e, sem alterar nada, se mandar salvar novamente, agora sim o valor total vai aparecer alterado para 104.5!

Esse é o comportamento estranho que o usuário vai perceber: "Funciona quando mando salvar duas vezes."

Salvando 2 vezes

Do ponto de vista do código isso acontece porque o valor do novo tax_rate é atualizado na primeira instância de ShoppingList que é puxado pelo controller, mas no callback de before_save cada um dos ShoppingItem puxa novamente do banco o ShoppingList e faz o cálculo com o tax_rate antigo que veio do banco. O total, portanto, permanece inalterado e só em seguida é que o novo tax_rateé gravado no banco. Por isso que se tentar salvar novamente, agora ele refaz o cálculo usando o tax_rate que foi salvo por último.

O erro é achar que quando puxamos o ShoppingList a partir da associação do ShoppingItem estamos puxando o objeto com valor alterado em memória, mas na verdade ele puxa novamente do banco.

Identity Map

A premissa errada é achar que porque o objeto já foi carregado uma vez em memória, outras tentativas de acessar o "mesmo objeto" deveria apontar para o objeto que já está pré-carregado em vez de puxar novamente do banco.

Esse era justamente o cenário que se tentou corrigir com o IdentityMap. Porém sua implementação nunca ficou estável o suficiente e por isso ele acabou sendo retirado definitivamente no Rails 4.

Portanto entenda o seguinte: dois objetos ActiveRecord, só porque possuem os mesmos valores (incluindo id), não signfica que se tratam do mesmo objeto, e atualizar ambos separadamente pode levar a inconsistências como a descrita neste artigo.

Como Corrigir?

Existem várias formas, mas uma delas é retirar o método #total do model ShoppingItem e delegar o cálculo complementamente para a classe ShoppingCalculator visto que em seu construtor ele recebe o objeto correto de ShoppingList com o tax_rate que acabou de ser modificado. Daí ele ficaria assim:

12345678910111213141516171819
classShoppingCalculatordefinitialize(shopping_list)@shopping_list = shopping_listenddefshopping_items@shopping_list.shopping_itemsenddeftax_rate@shopping_list.tax_rateenddeftotal
    shopping_items.inject(0.0) do |total, item|
      total += item.sub_total + (tax_rate * item.sub_total)endendend

Bônus

Esta aplicação de exemplo é muito simples, note que de propósito ele tem testes Rspec que não pegam o erro que descrevi. Fica de exercício completar os specs para cobrirem essa situação.

Além disso notem que estou usando o Twitter Bootstrap para ter um mínimo de estilo decente, o Simple Form para facilitar a edição dos formulários (e note que ele já se integra ao Bootstrap) e, finalmente, o Cocoon que torna trivialmente simples fazer edição de múltiplos objetos ao mesmo tempo, no estilo Lista e Itens, Pergunta e Resposta, Projeto e Atividades ou qualquer tipo de associação onde se queira editar o objeto pai e os objetos filho num mesmo formulário.

Criando formulários que editam múltiplos modelos (Cocoon)

$
0
0

Aproveitando o artigo Usando associações de ActiveRecord incorretamente que acabei de publicar, vamos dar mais uma dica que mencionei na seção de Bônus: editar múltiplos objetos ActiveRecord num mesmo formulário.

Muitas vezes você tem o cenário ontem possui um objeto Pai e múltiplos objetos Filhos no ActiveRecord, seriam formatos como Lista de Compras e produtos, Perguntas e Respostas, Projeto e Atividades. Se usar o scaffold normal do Rails vai acabar criando telas separadas para cada recurso. Mas e se quisermos editar os atributos do Pai e dos filhos tudo no mesmo formulário?

O Rails possui um recurso chamado Nested Attributes onde você pode passar os atributos dos objetos filhos diretamente no objeto Pai. Parafraseando a documentação oficial poderíamos ter algo como:

12345
classShoppingList< ActiveRecord::Base
  attr_accessible :description, :name, :total, :tax_rate, :shopping_items_attributes
  has_many :shopping_items
  accepts_nested_attributes_for :shopping_items, :reject_if => :all_blank, :allow_destroy => trueend

Se quiser baixar do meu projeto de exemplo, faça:

12
git clone https://github.com/akitaonrails/shopping-list-demo.git
cd shopping-list-demo

Ou se já tinha baixado a partir do artigo anterior, faça:

12
cd shopping-list-demo
git checkout master

E agora podemos fazer, no rails console:

123456
params = {:shopping_list=>{:name=>"Compras", :description=>"supermercado", :tax_rate=>"0.1", :shopping_items_attributes=>{:"0"=>{:name=>"Sabao", :quantity=>"5", :price=>"10.0"}, :"1"=>{:name=>"Pasta Dental", :quantity=>"3", :price=>"15.0"}}}}
list = ShoppingList.create(params[:shopping_list])
list.shopping_items.first.id#  => 3
list.shopping_items.first.name#  => "Sabao"

Essa é a infraestrutura básica #accepts_nested_attributes_for que permite a partir de um único formulário criar e modificar os objetos filhos (definidos no #has_many).

A partir disso podemos criar o formulário e o código para permitir que o usuário edite todos os objetos juntos. O Ryan Bates fez um episódio do Railscasts chamado "Nested Model Form (revised)" e você vai notar que a coisa pode ficar bem confusa bem rápido.

Cocoon

Para facilitar, neste projeto de exemplo usamos a excelente gem Cocoon. No caso também colocamos o Simple Form e o Bootstrap.

Assumindo que seu projeto já está criado com Rails 3.2.12, com Bootstrap instalado e configurado, com Simple Form instalado e configurado, com os models ShoppingList e ShoppingItem criados e configurados conforme meu projeto de exemplo, para colocar o Cocoon começamos editando a Gemfile:

1234567
# na Gemfile
...
gem 'jquery-rails'
gem "twitter-bootstrap-rails"
gem 'simple_form'
gem 'cocoon'
...

Agora execute bundle install. Agora vamos editar o application.js:

12345678
// app/assets/javascripts/application.js
...//= require jquery//= require jquery_ujs//= require twitter/bootstrap//= require cocoon//= require_tree .
...

Como já disse antes, garanta que o #has_many, #belongs_to, #accepts_nested_attributes_for e #attr_accessible de cada model esteja devidamente definido e configurado.

Agora basta editar o app/views/shopping_lists/_form.html.erb do ShoppingList:

123456789101112131415161718192021
<%= simple_form_for(@shopping_list) do |f| %><%= f.error_notification %><divclass="form-inputs"><%= f.input :name %><%= f.input :description, input_html: { rows: 2 } %><%= f.input :tax_rate %></div><h3>Items</h3><divid="shopping_items"><%= f.simple_fields_for :shopping_items do |item| %><%= render "shopping_item_fields", :f => item %><% end %></div><divclass="form-actions"><%= link_to_add_association 'add item', f, :shopping_items, :class =>"btn btn-default" %><%= f.button :submit %></div><% end %>

As duas partes importantes são o bloco #simple_fields_for (se estivesse usando Formtastic) seria #semantic_fields_for e se não estivesse usando nada senão Rails puro usaríamos apenas #fields_for mesmo.

Ela renderiza uma partial que vamos ver a seguir e no final temos um link gerado pelo helper do Cocoon chamado link_to_add_association. O que é importante é não errar a nomenclatura da associação shopping_items.

Já a partial app/views/shopping_lists/_shopping_item_fields.html.erb seria assim:

123456
<divclass="nested-fields"><%= f.input :name %><%= f.input :quantity %><%= f.input :price %><%= link_to_remove_association "remove item", f, :class =>"btn btn-danger" %></div>

A parte importante nesse caso é não errar o link de remoção gerado pelo helper do Cocoon link_to_remove_association.

Pronto. Isso é tudo que você precisa, o resto o Cocoon faz automaticamente pra você. Se fez tudo certo terá uma tela assim quando for criar um novo Shopping List:

New Shopping List

Note o botão de "add item" que foi gerado pelo helper link_to_add_association. Ao clicar nele, você vai ver o seguinte:

Add Item

E mesmo se estiver editando um Shopping List com Shopping Items que já existe, pode remover itens assim:

Remove Item

E quando der submit poderá ver nos logs que as operações corretas foram executadas com sucesso:

12345678
...
 (0.1ms)  begin transaction
ShoppingItem Load (1.1ms)  SELECT "shopping_items".* FROM "shopping_items" WHERE "shopping_items"."shopping_list_id" = 1 AND "shopping_items"."id" IN (1, 2)
ShoppingItem Load (0.1ms)  SELECT "shopping_items".* FROM "shopping_items" WHERE "shopping_items"."shopping_list_id" = 1
SQL (6.4ms)  DELETE FROM "shopping_items" WHERE "shopping_items"."id" = ?  [["id", 1]]
SQL (0.0ms)  DELETE FROM "shopping_items" WHERE "shopping_items"."id" = ?  [["id", 2]]
 (2.0ms)  commit transaction
...

Viram os "DELETE"s?

Portanto, se tiver uma situação onde queira editar models estilo Pai e Filhos, não deixe de experimentar o Cocoon!

Rubyconf Brasil 2013: Conheça Caike Souza

$
0
0

Caike Souza

Se você ainda não se inscreveu, não perca a oportunidade. Vá ao site oficial para se cadastrar agora mesmo! A conferência inicia no dia 29 de Agosto.

Este é o 6o ano consecutivo onde a Locaweb e eu organizamos mais uma grande Rubyconf no Brasil. Muitas empresas estabelecidas e startups de tecnologia estão apoiando a conferência enviando grandes desenvolvedores.

Conheça a Envylabs uma reconhecida consultoria Ruby que fica em Orlando, na Flória. Eles também são bem conhecidos pelo site de e-learning CodeSchool onde você pode aprender muito sobre tudo que precisa saber para se tornar um bom desenvolvedor web, incluindo cursos de Ruby, Git, Javascript e muito mais.

Carlos Souza, também conhecido como Caike, é um programador brasileiro que se mudou pra Orlando para trabalhar pra Envylabs há alguns anos. Ele trabalha como programador pra Envylabs e também é professor na CodeSchool e ele está vindo ao Brasil para compartilhar suas experiências.

Não perca sua palestra precisamente às 14:00 do primeiro dia do evento. Vamos conhecer um pouco mais sobre ele:

"Sua palestra será sobre entrar em projetos Rails que já estão em andamento, coisa que pode ser difícil muitas vezes. Se alguém está apenas começando com Ruby, poderia explicar quais são os requerimentos que ele deve entender o que você vai apresentar?"

Caike: Essa palestra é pra qualquer pessa que já tenha entrado em um projeto Rails existente, seja no trabalho ou contribuindo com open source. Aqueles que já tiveram a experiência de entrar em projetos Rails começados por outros, provavelmente se depararam com problemas relacionado à configuração de ambiente, dificuldade de rodar a aplicação na máquina local, fazer deploy pra produção pela primeira vez e outros vários impedimentos que atrapalham fazer o que realmente importa, que é criar novas funcionalidades e matar bugs.

Meu objetivo é mostrar práticas e técnicas que ajudam a reduzir o overhead de entrar para um projeto Rails existente.

"Muitos desenvolvedores adorariam se tornar tão experientes e fluentes rm Ruby como você. Quais foram as dificuldades que teve que ultrapassar para se tornar um grande desenvolvedor? Algumas dicas para iniciantes em Ruby?"

Caike: Minha recomendação é nunca parar de aprender coisas novas, mas de certa forma aprender a sentir-se confortável com aquilo que não conhece. Certas vezes precisamos acreditar e aceitar a forma como certas funcionam.. senão a gente trava! O quanto antes conseguirmos achar esse balanço, mais fácil vai se tornar concretizar nossos projetos.

Vale também dizer que a melhor forma de escrever código bom é lendo código bom. Exitem muitos projetos open source disponíveis e desenvolvedores fantásticos por trás desses vários projetos, então vamos aproveitar esta oportunidade!

"Existem tantas tecnologias, boas práticas e tudo mais que são lançados o tempo todo. Na sua opinião pessoal, e talvez relacionado ao seu trabalho atual, quais são as tendências em tecnologia que acha que devemos prestar atenção no futuro próximo?"

Caike: Definitivamente EdTech (tecnologia educational) é algo que está revolucionando o campo da educação e eu sinto que estamos prestes a ver coisas muito maiores acontecendo em um futuro próximo. É muito legal ver novas formas de utilizar a tecnologia para facilitar o aprendizado e capacitação. Isso não apenas possibilita que as pessoas achem um novo emprego, mas mais importante, possibilita que elas descubram novas paixões!


Rubyconf Brasil 2013: Meet Caike Souza

$
0
0

Caike Souza

If you didn't register yet, don't miss this opportunity. Go to the official website to register as soon as possible. The conference will commence on August 29th.

This is the 6th consecutive year that Locaweb and myself are organizing yet another great Rubyconf in Brazil. Several great established companies and tech startup are supporting the conference sending great developers.

Meet Envylabs a very well known Ruby shop based in Orlando, Florida. They are also well known for the CodeSchool e-learning website, where you can learn a lot about everything you need to know to become a good web developer including courses in Ruby, Git, Javascript and much more.

Carlos Souza, also known as Caike, is a Brazilian programmer who moved to Orlando to work for Envylabs a few years ago. He works as a programmers for Envylabs as well as a teacher for CodeSchool and he is coming back to Brazil to share his experiences.

Don't miss his talk precisely at 2:00PM of the first day of the event. Let's get to know more about him:

"Your talk is about joining ongoing Rails projects, which may be difficult sometimes. If someone is just beginning with Ruby, can you explain what some of the requirements are to understand what you're going to talk about?"

Caike: This talk is for anyone who has jumped into existing Rails project, either at a new job or contributing to open source. If you've ever joined a Rails project started by someone else, it's likely that you've run into issues with setting up your environment, getting the app to run properly on your machine, deploying it to production for the first time and other blockers that got in the way of writing new features or fixing bugs.

My goal is to show some techniques that can help reduce the overhead of joining an existing Rails project.

"Many developers would love to become as experienced and fluent in Ruby as you are. What have been some of the pitfalls you had to overcome in order to become a great developer? Any good tips for a Ruby beginner?"

Caike: The tip I have is to never stop learning new things, but at the same time to learn how to be comfortable with the unknown. There are times out there that you will have to take a leap of faith and just assume things work the way they do. Some people have a hard time accepting that, but the sooner you realize that it's ok to not know about absolutely everything, the easier it will be to actually get things done.

Also, the best way to write good code is to read good code. There are many open source projects out there and amazingly talented developers behind them, so use the source! :)

"There are so many new technologies, best practices and so on being released all the time. In your personal opinion, and maybe related to your current field of work, what are some of the trends in technology that you think we should be paying attention for the near future?"

Caike: Definitely ed tech (educational technology) is a big thing that's revolutionizing the education field and I feel we are about to see even greater things in the near future. It's great to see new ways of using technology to facilitate learning and not only enabling people to get jobs, but more importantly, enabling them to discover new passions.

Rubyconf Brasil 2013: Conheça Carlos (Chester) Nascimento

$
0
0

Carlos Nascimento

Se você ainda não se inscreveu, não perca a oportunidade. Vá ao site oficial para se cadastrar agora mesmo! A conferência inicia no dia 29 de Agosto.

Este é o 6o ano consecutivo onde a Locaweb e eu organizamos mais uma grande Rubyconf no Brasil. Muitas empresas estabelecidas e startups de tecnologia estão apoiando a conferência enviando grandes desenvolvedores.

Conheça a Uken Games uma excelente produtora de games cross platform do Canadá, com jogos como Age of Legends, Force of War e muito mais.

Carlos Nascimento, também conhecido como "Chester", é um reconhecido programador brasileiro com experiência de 20 anos na área, tendo trabalhado em empresas como iG, Apontador, MIH/NASPERS, Abril, Globo e Secretaria de Educação do Estado de São Paulo. Ele se mudou há pouco tempo para o Canadá para trabalhar desenvolvendo jogos com a Uken. Agora estará vindo ao Brasil para compartilhar suas experiências.

Não perca sua palestra precisamente às 13:15 do primeiro dia do evento. Vamos conhecer um pouco mais sobre ele:

"Sua palestra será sobre emulação de jogos Atari com Ruby, algo que não se espera normalmente no mundo Ruby. Se alguém está apenas começando com Ruby, poderia explicar quais são os requerimentos que ele deve entender o que você vai apresentar?"

Chester: Emulação não é o assunto mais trivial do mundo, mas não é preciso ter medo: não vai ser preciso conhecer linguagem de máquina, nem ter experiência com programação de jogos para consoles antigos. O que eu quero mostrar (além, claro, do emulador em si, cujo código será publicado por ocasião da Rubyconf Brasil) é justamente introduzir o funcionamento dessas coisas e o que a gente precisa para simular o funcionamento de um.

Claro que vou falar um pouco sobre "escovação de bits", números hexadecimais e afins, então ajuda você estar familiarizado com isso. Mas não é fundamental - o indispensável mesmoé o interesse no assunto, que eu acredito fugir um pouco do cotidiano da maioria dos programadores Ruby (muito embora eu tenha me surpreendido com quanto ferramentas como RSpec e disciplinas como TDD se adaptaram bem a uma área tradicionalmente mais "selvagem" como a emulação...)

"Muitos desenvolvedores adorariam se tornar tão experientes e fluentes rm Ruby como você. Quais foram as dificuldades que teve que ultrapassar para se tornar um grande desenvolvedor? Algumas dicas para iniciantes em Ruby?"

Chester: Se a pessoa gosta de escrever código, meus parabéns - está com meio caminho andado. Só não se esqueça da outra metade: ler código - seja este código bom ou ruim, é sempre um aprendizado! Joel Spolsky alertava já em 2000 que "é mais difícil ler código do que escrever código", e mais recentemente Fabio Akita (não sei se você conhece) desfez alguns mitos ao mostrar que o real desafio está no código existente e não no "greenfield", no escrito do zero. Eu escuto muito esses caras, e recomendo aos iniciantes fazer o mesmo.

Além disso, vale mencionar dois vícios que enfraquecem o aprendizado, a produtividade e a carreira de muita gente: um é passar a vida toda fazendo a mesma coisa, evitando ou minimizando qualquer novidade; o outro é não dedicar um mínimo de tempo ou estudo a uma tecnologia antes de pular para o próximo sabor da moda. Ambos parecem diametralmente opostos, mas acomodação e falta de foco são, no fundo, sintomas de uma coisa só: preguiça mental. O caminho, a meu ver, é buscar o equilíbrio: diligência naquilo que você está usando agora, e antena ligada no que está por vir.

"Existem tantas tecnologias, boas práticas e tudo mais que são lançados o tempo todo. Na sua opinião pessoal, e talvez relacionado ao seu trabalho atual, quais são as tendências em tecnologia que acha que devemos prestar atenção no futuro próximo?"

Chester: O desafio atual do meu trabalho é lidar com volumes de dados cada vez maiores, em níveis de complexidade igualmente assustadores. E é muito tentador culpar a tecnologia em uso (o famoso "Rails não escala") ou buscar soluções mágicas ("muda pra Node/Go/<insira o sabor da moda aqui> que resolve").

A verdade é que quando você precisa de ganhos de escala, nada substitui o cuidado com a arquitetura do sistema - e para isso é importante ter um olho no passado (estudar com carinho os fundamentos da computação e do processamento de dados em geral) e outro no futuro (evitando a tentação oposta, que é se agarrar na tecnologia com a qual se está confortável).

Um exemplo disto são os bancos de dados não-relacionais (ou "NoSQL", como preferem alguns). Eu recomendo olhar para eles com muito carinho, mesmo que a natureza dos dados com que você lida seja 100% atendida por um SGBD tradicional. E quem usa Ruby tem a vantagem de uma comunidade fantástica: independente do sistema de dados que o desenvolvedor queira avaliar, ele pode contar com um driver ou biblioteca de acesso ao alcance de um gem install.

É verdade que muitos early adopters estão atingindo estágios variados do vale da desilusão, confrontando os ganhos de escala com problemas técnicos diversos, mas isso se deve mais ao fato de as implementações serem bastante novas do que a um problema inerente na tecnologia.

Isso é um fator para considerar no presente, mas não condena a tecnologia. Eu lembro de quando nenhuma empresa "séria" considerava trocar o Oracle/DB2/SQL Server por um banco open-source como MySQL ou PostgreSQL - eram "imaturos", "instáveis"... e hoje estão ombro a ombro com os proprietários.

Então meu conselho é: Fiquem de olho nos SGBDs não-relacionais, porque a história se repete!

Rubyconf Brasil 2013: Jaime Andrés Dávila

$
0
0

Jaime Andrés Dávila

If you didn't register yet, don't miss this opportunity. Go to the official website to register as soon as possible. The conference will commence on August 29th.

This is the 6th consecutive year that Locaweb and myself are organizing yet another great Rubyconf in Brazil. Several great established companies and tech startup are supporting the conference sending great developers.

Meet Neo, they call themselves a "global product innovation company". They are spread all over the world and have several well known names involved, such as Eric Ries, Ian McFarland, Evan Henshaw-Plath, Jim Weinrich and many more.

Jaime Andrés Dávila works at the Uruguay branch of Neo, formerly known as Cubox. He is a prolific software developer that proposed a unique approach to explain a recently well discussed design pattern, DCI, with something intriguing: semiotics.

Don't miss his talk precisely at 1:15PM of the second day of the event. Let's get to know more about him:

"Your talk is the design pattern known as DCI, one that has been recently discussed quite a lot. If someone is just beginning with Ruby, can you explain what some of the requirements are to understand what you're going to talk about?"

Jaime: Probably the most important thing to understand is the concept of "design patterns" not the specifics of every pattern, but the "reason to exist", why patterns are important, why not a single pattern is the silver bullet for everything and as an specific topic, the MVC concept.

Related to semiotics, it doesn't matter if you don't have any experience, I'm going to start from scratch and just give some details on the specific part that's important for us, in this case DCI; however if you are interested in this kind of lecture we could have a good talk about social fields.

"Many developers would love to become as experienced and fluent in Ruby as you are. What have been some of the pitfalls you had to overcome in order to become a great developer? Any good tips for a Ruby beginner?"

Jaime: Just keep reading, keep learning and keep enjoying every moment in front of your computer. One of the most important things someone has told me is "don't be afraid to say I don't know".

Oh!!! and commitment with your work: if you decide to do something, don't quit, just stay there until you're satisfied with your work, that way you'll learn to be professional and specially you'll learn to be proud of your work.

"There are so many new technologies, best practices and so on being released all the time. In your personal opinion, and maybe related to your current field of work, what are some of the trends in technology that you think we should be paying attention for the near future?"

Jaime: OWA (one window app), it's not just the concept, it's the way that should be implemented, JS has proved it's a great and complex language so learn some of the main frameworks like angularjs, emberjs, backbonejs.

Hypermedia API, even there's a lot information about it, I think it's still not fully implemented so there's still a lot of space to improve and learn.

Rubyconf Brasil 2013: Jaime Andrés Dávila

$
0
0

Jaime Andrés Dávila

Se você ainda não se inscreveu, não perca a oportunidade. Vá ao site oficial para se cadastrar agora mesmo! A conferência inicia no dia 29 de Agosto.

Este é o 6o ano consecutivo onde a Locaweb e eu organizamos mais uma grande Rubyconf no Brasil. Muitas empresas estabelecidas e startups de tecnologia estão apoiando a conferência enviando grandes desenvolvedores.

Conheça a Neo, eles se entitulam "uma companhia global de inovação de produtos". Eles estão espalhados pelo mundo e tem diversos nomes conhecidos envolvidos como Eric Ries, Ian McFarland, Evan Henshaw-Plath, Jim Weinrich e muitos outros.

Jaime Andrés Dávila trabalha na filial uruguaia da Neo, conhecida antes como Cubox. Ele é um desenvolvedor de software que mandou uma proposta bem única para explicar um design pattern que foi muito discutido em tempos recentes, o DCI, usando algo intrigante: semiótica.

Não perca sua palestra precisamente às 13:15 do segundo dia do evento. Vamos conhecer um pouco mais sobre ele:

"Sua palestra será sobre o design pattern conhecido como DCI, que foi discutido muito recentemente. Se alguém está apenas começando com Ruby, poderia explicar quais são os requerimentos que ele deve entender o que você vai apresentar?"

Jaime: Provavelmente a coisa mais importante para entender é o conceito de "design patterns" não os detalhes de cada pattern, mas a "razão porque existem", porque patterns são importantes, porque um único pattern não é uma bala de prata para tudo e mais particularmente ao tópico, o conceito de MVC.

Relacionado a semiótica, não importa se não tiver nenhuma experiência, vou começar do zero e dar alguns detalhes da parte específica que é importante para nós, nesse caso sobre DCI; entretanto se estiver interessado nesse tipo de aprendizado podemos conversar bem sobre o campo social.

"Muitos desenvolvedores adorariam se tornar tão experientes e fluentes rm Ruby como você. Quais foram as dificuldades que teve que ultrapassar para se tornar um grande desenvolvedor? Algumas dicas para iniciantes em Ruby?"

Jaime: Apenas continue lendo, continue aprendendo e mantenha-se apreciando cada momento na frente do seu computador. Uma das coisas mais importantes que alguém me disse foi "não tenha medo de dizer eu não sei".

Oh!! E compromisso com seu trabalho: se você decide fazer alguma coisa, não desista, fique lá até estar satisfeito com seu trabalho, dessa forma você vai aprender a ser profissional e especialmente aprenderá a ter orgulho do seu trabalho.

"Existem tantas tecnologias, boas práticas e tudo mais que são lançados o tempo todo. Na sua opinião pessoal, e talvez relacionado ao seu trabalho atual, quais são as tendências em tecnologia que acha que devemos prestar atenção no futuro próximo?"

Jaime: OWA (one window app - aplicativos de uma única janela), não é somente um conceito, é a maneira como deveríamos implementar, JS provou ser uma grande e complexa linguagem então aprenda alguns dos principais frameworks como AngularJS, EmberJS, BackboneJS.

API Hipermídia, mesmo que tenha muita informação a respeito, eu acho que ainda não está completamente implementada então ainda há muito espaço para melhorar e aprender.

Rubyconf Brasil 2013: Conheça Hongli Lai

$
0
0

Hongli Lai

Se você ainda não se inscreveu, não perca a oportunidade. Vá ao site oficial para se cadastrar agora mesmo! A conferência inicia no dia 29 de Agosto.

Este é o 6o ano consecutivo onde a Locaweb e eu organizamos mais uma grande Rubyconf no Brasil. Muitas empresas estabelecidas e startups de tecnologia estão apoiando a conferência enviando grandes desenvolvedores.

Conheça a Phusion o grupo de cientistas da computação da Holanda que primeiro tornaram fazer deployments de aplicações Ruby on Rails realmente simples. Muitos provavelmente não vão se lembrar mas antes de 2007 era bem doloroso instalar uma aplicação Rails em produção. Zed Shaw nos trouxe o Mongrel. Mas não foi até Phusion lançar o Passenger que nós começamos a acelerar até o ponto onde instalar Ruby em produção se tornou o padrão de ouro.

Hongli Lai está vindo pela segunda vez, ele já esteve na primeira Rails Summit Latin America 2008 junto com seu sócio Nihn Bui. Desde então ele tem evoluído a tecnologia Passenger, fazendo funcionar no Apache, NGINX e em diversas customizações e cenários.

Não perca sua palestra de fechamento precisamente às 16:45 do primeiro dia do evento. Vamos conhecer um pouco mais sobre ele:

"Sua palestra será o Phusion Passenger 4 que está chegando. Se alguém está apenas começando com Ruby, poderia explicar quais são os requerimentos que ele deve entender o que você vai apresentar?"

Hongli: Para entender esta palestra, você deve ter entendimento básico de como fazer deployment de uma aplicação Rails. Por exemplo, experiência anterior usando Phusion Passenger, Unicorn, Puma ou Thin será muito útil. Você não precisa entender tudo em detalhes, porque a palestra será fácil de seguir mesmo para iniciantes. Uma parte da palestra, especilamente a parte de otimização e customização, será mais avançada, mas vou estruturar de maneira que iniciantes também possam seguir.

"Muitos desenvolvedores adorariam se tornar tão experientes e fluentes rm Ruby como você. Quais foram as dificuldades que teve que ultrapassar para se tornar um grande desenvolvedor? Algumas dicas para iniciantes em Ruby?"

Hongli: Eu acredito que a melhor maneira de se tornar bom é com muita prática. Eu não acredito em talento, mas acredito em trabalho duro. Eu acho que cheguei onde estou porque venho desenvolvendo software por mais de uma década. Nos primeiros anos meu código era uma droga e eu não entendia bem o que estava acontecendo. Foi somente depois de anos de experiência que comecei a produzir código bom.

No começo, eu era autodidata. Aprender sozinho só te leva até certo ponto, mas existe uma certa fundação matemática e formal que é melhor ensinada numa universidade. Nesse sentido, minha educação em ciência da computação me ajudou muito, embora eu nunca teria chegado no meu nível atual sem muita experiência prática também.

Finalmente, é uma boa idéia ser curioso sobre o trabalho de outras pessoas. Você vai aprender muito estudando o design e código dos outros, tanto sobre o que fazer e o que não fazer. Também é uma boa idéia permanecer de mente aberta, e não pular em conclusões muito rapidamente. O que a princípio parece um código mal escrito por outra pessoa pode ter razões legítimas para ser daquele jeito. É importante entender as razões.

"Existem tantas tecnologias, boas práticas e tudo mais que são lançados o tempo todo. Na sua opinião pessoal, e talvez relacionado ao seu trabalho atual, quais são as tendências em tecnologia que acha que devemos prestar atenção no futuro próximo?"

Hongli: Eu não acredito em prestar muita atenção em tendências. Tendências vem e vão, e muitas das atuais tendências são apenas modificações de tendências passadas. Mais do que isso, nem todas as tendência são úteis em sua forma crua. Em vez de seguir tendências, você deve entender as razões principais por trás das tendências, e adotá-las em vez disso.

Isso dito, existem diversas tendências que eu acredito serem boas tendências para seguir e que acredito não terem data de expiração:

  • Testes automatizados. Você deve definitivamente ter testes automatizados, o que me salvou muitas e muitas vezes no passado. Ter uma boa suíte de testes lhe dá a confiança e reduz ansiedade de desenvolvedor (medo de quebrar alguma coisa), o que permite um velocidade maior. Existem diversos estilos nessa área, por exemplo TDD e BDD. Não pertenço a nenhuma, mas eu pego idéias de todas e aplico onde faz sentido.

  • Integração contínua. Em vez de ter longos ciclos de desenvolvimento, e integrar branches de desenvolvimento depois de um longo tempo, ou lançar software para staging depois de um longo tempo, você deve fazer isso em intervalos curtos. Isso lhe dará mais confiança, reduzirá ansiedade de desenvolvedor e permitirá lançar em produção com menos trabalho. Integração contínua implica testes automatizados. Uma ferramnta de CI como Travis ou Apachai Hopachai são indispensáveis.

  • Automação operacional. Se uma tarefa tem muitos passos, ou se é muito mentalmente pesada (o que torna fácil introduzir erros humanos), considere automatizar essa tarefa o máximo possível para que seja necessário digitar apenas um comando e pronto. Existem duas tendências que são fortemente relacionadas a essa idéia principal:

  • O movimento devops. Comparado a sysops tradicional, que performa muitas tarefas manualmente, o movimento devops procura automatizar o máximo possível. Você descreve seu cluster de configuração em código, e uma ferramentas como Chef, Puppet ou Ansible constrói esse cluster para você. O jogo muda muito quando você pode digitar um único comando e reconstruir seu cluster de servidores inteiro, em vez de manualmente instalar e configurar o software toda vez.

  • Virtualização do ambiente de desenvolvimento. Isso é como devops para ambiente de desenvolvimento. Em vez de deixar seu desenvolvedor construir seus ambientes manualmente (instalando compilador, instalando git, instalando mysql, editando suas configuraçõas, etc) você descreve esse ambiente em código e deixa uma ferramenta como Vagrant (em combinação com Chef, Puppet ou Ansible) construir para você. Todos os desenvolvedores terão um ambiente consistente e eles podem configurar uma nova rapidamente toda vez que mudarem de máquina. Quando feito da forma correta, nenhum erro humano é possível.

Rubyconf Brasil 2013: Meet Hongli Lai

$
0
0

Hongli Lai

If you didn't register yet, don't miss this opportunity. Go to the official website to register as soon as possible. The conference will commence on August 29th.

This is the 6th consecutive year that Locaweb and myself are organizing yet another great Rubyconf in Brazil. Several great established companies and tech startup are supporting the conference sending great developers.

Meet Phusion the group of computer scientists from the Netherlands that first made Ruby on Rails deployment really easy. Most people won't remember but prior to 2007 it was pretty painful to deploy a Rails application. Zed Shaw brought us Mongrel. But it was not until Phusion released Passenger that we started to speed up to the point where Ruby web deployment became the gold standard.

Hongli Lai is coming here for the second time, he was in the very first Rails Summit Latin America 2008 together with his partner Ninh Bui. Since then they have been evolving the Passenger technology, making it work with Apache, NGINX and in several different customizations and scenarios.

Don't miss his closing keynote about Passenger precisely at 4:45PM of the first day of the event. Let's get to know more about him:

"Your talk is about the upcoming Phusion Passenger 4, can you explain what some of the requirements are to understand what you're going to talk about?"

Hongli: To understand the talk, you should have a basic understanding on how to deploy a Rails application. For example, past experience with using Phusion Passenger, Unicorn, Puma or Thin will be very helpful. You don't have to understand it very deeply, because the talk is designed to be easy to follow even for beginners. A part of the talk, especially the optimization and tweaking part, will be more advanced, but I will structure them in such a way so that beginners can follow it as well.

"Many developers would love to become as experienced and fluent in Ruby as you are. What have been some of the pitfalls you had to overcome in order to become a great developer? Any good tips for a Ruby beginner?"

Hongli: I believe the best way to become good is to get a lot of practice. I do not believe in talent, but I do believe in hard work. I think I am at the place I am now because I've been developing software for more than a decade. For the first few years, my code sucked and I didn't really understand what I was doing. It was only after years of experience that I began to produce good code.

In the beginning, I was self-taught. Self-teaching can get you very far, but there are certain mathematical and formal foundations that are best learned at a university. In that regard, my computer science education has helped me a lot, although I could never have reached my current level without a lot practical experience as well.

Finally, it is a good idea to be curious about other people's work. You will learn a lot by studying others' design and code, both with regard to what to do and what not to do. It is also a good idea to be open minded, and not to jump to conclusions too quickly. What at first glance appears to be a bad piece of code written by someone else may have legitimate reasons for being like that. It is important to understand those reasons.

"There are so many new technologies, best practices and so on being released all the time. In your personal opinion, and maybe related to your current field of work, what are some of the trends in technology that you think we should be paying attention for the near future?"

Hongli: I do not believe you should pay too much attention to trends. Trends come and go, and a lot of the current trends are just modifications of past trends. Furthermore, not all trends may be useful to you in their raw form. Instead of following a trend, you should understand the core reasons behind the trend, and adopt those instead.

That being said, there are several trends which I believe are good trends to follow and which I believe are timeless:

  • Automated testing. You should definitely have automated tests, which have saved me time and time again in the past. Having a good test suite gives you confidence and reduces developer anxiety (fear of breaking something), which allows you to develop faster. There are several styles in area the automated testing, e.g. TDD and BDD. I belong to none of them, but I take ideas from all of them and apply them where I think makes sense.

  • Continuous integration. Instead of having long development cycles, and integrating developer branches after a long time, or releasing software to staging after a long time, you should do it short intervals. This will give you more confidence, reduces developer anxiety and will allow you to release to production with less hassle. Continuous integration implies automated testing. A CI tool such as Travis or Apachai Hopachai is indispensable.

  • Operational automation. If a task takes too many steps, or if it's too mentally draining (which makes it easy to introduce human errors), consider automating the task as much as possible so that you only have to enter one command to get it done. There are two trends which are strongly related to this core idea:

  • The devops movement. Compared to traditional sysops, which performs a lot of tasks by hand, the devops moment seeks to automate as much as possible. You describe your cluster configuration in code, and a tool such as Chef, Puppet or Ansible builds the cluster for you. It changes the game so much if you can run a single command to rebuild your entire server cluster, instead of manually installing and configuring software every time.

  • Virtualization of the development environment. This is like devops for development environments instead of for production environments. Instead of letting your developers build their development environment manually (installing a compiler, installing git, installing MySQL, editing your software's config files, etc), you describe the environment in code and let a tool such as Vagrant (in combination Chef, Puppet or Ansible) build it for you. All developers will have a consistent development environment, and they can set up a new one quickly whenever they switch machines. When done properly, no human error will be possible.

Rubyconf Brasil 2013: Conheça Danilo Sato

$
0
0

Danilo Sato

Se você ainda não se inscreveu, não perca a oportunidade. Vá ao site oficial para se cadastrar agora mesmo! A conferência inicia no dia 29 de Agosto.

Este é o 6o ano consecutivo onde a Locaweb e eu organizamos mais uma grande Rubyconf no Brasil. Muitas empresas estabelecidas e startups de tecnologia estão apoiando a conferência enviando grandes desenvolvedores.

Conheça a Thoughtworks conhecida consultoria internacional, presente também no Brasil, e que dispensa apresentações.

Danilo Sato trabalha na Thoughtworks há 5 anos, atuando em projetos internacionais e evangelizando metodologias ágeis e Lean.

Não perca sua palestra de fechamento precisamente às 11:00 do primeiro dia do evento. Vamos conhecer um pouco mais sobre ele:

"Sua palestra será sobre um assunto que todos acham que conhecem, orientação a objetos. Se alguém está apenas começando com Ruby, poderia explicar quais são os requerimentos que ele deve entender o que você vai apresentar?"

Danilo: Você provavelmente já ouviu falar ou aprendeu um pouco sobre Orientação a Objetos. Isso deve ser suficiente para entender a minha palestra. Conhecer Rails vai ajudar a entender alguns dos exemplos, mas não vou assumir que você tem bastante experiência no assunto. Os tópicos que quero apresentar se aplicam à linguagem Ruby em geral, assim como outras linguagens OO que você venha a usar.

"Muitos desenvolvedores adorariam se tornar tão experientes e fluentes rm Ruby como você. Quais foram as dificuldades que teve que ultrapassar para se tornar um grande desenvolvedor? Algumas dicas para iniciantes em Ruby?"

Danilo: Na nossa indústria, eu acho que uma armadilha fácil de cair é você decidir trabalhar apenas em uma tecnologia. A indústria de software evolui constantemente, criando novas linguagens, bibliotecas, ferramentas e frameworks que entram e saem de moda o tempo todo. É muito fácil você achar sua zona de conforto e não se preocupar com o que está acontecendo no resto do mundo, mas você corre o risco de ficar obsoleto ou amarrado a uma tecnologia antiga. Na nossa indústria você precisa se desafiar e aprender coisas novas constantemente.

"Existem tantas tecnologias, boas práticas e tudo mais que são lançados o tempo todo. Na sua opinião pessoal, e talvez relacionado ao seu trabalho atual, quais são as tendências em tecnologia que acha que devemos prestar atenção no futuro próximo?"

Danilo: Assim como no mundo da moda, tecnologias evoluem mas também têm ciclos. Eu diria que é importante não só focar na próxima tendência, mas também aprender com o passado. Nossa indústria gosta de aprender as mesmas lições repetidamente e eu pretendo mostrar na minha palestra uma habilidade essencial que acredito não ir embora tão cedo: design de software. Investir tempo aprendendo sobre design de software é algo que lhe trará retorno mesmo que você mude para uma nova linguagem, aprenda um novo framework, ou quando estiver construindo uma aplicação para seu cliente. Na minha opinião, esta é uma habilidade essencial para você investir.


Rubyconf Brasil 2013: Your first time in São Paulo, Brazil

$
0
0

Rubyconf Brasil is quickly approaching, don't miss it on August 29, 30. Register today at the website. Several speakers will be coming to Brazil, don't miss your chance to get to know Hal Fulton, Hongli Lai, Laurent Sansonetti, Kevin Tripplet, Jaime Andrés, Dávila, Ben Langfeld, Pablo Astigarraga.

I understand that it can be intimidating to come to Brazil for the first time so I decided that it could be a good idea to draft a few important things to keep in mind while staying around here.

First things First (TL;DR)

The weather is quite cool these days, it's Winter in Brazil and although it's not as cold as in North Europe it's a good idea to bring some extra coats if you're not used to a cold weather. On the other hand, the weather can change quite dramatically in a few days here in São Paulo. For example, right now it's around 12 degrees Celsius (or around 54 Fahrenheit), going down to less than 9C (48F) at night. But it seems like it's possible to go up to almost 30C (86F) during the conference days, so come prepared, specially if you are staying for an entire week or more.

DO NOT FORGET TO BRING A UNIVERSAL POWER PLUG ADAPTER!!

This is very important: until 2011 we had outlets that were compatible to the USA and some European power plugs. After that the country changed to a (worse in my opinion) new standard that is completely incompatible with any other plugs. Some good hotels have adapters for foreigners but I wouldn't count on that. When you land at the airport you can buy them at the duty free stores, just don't forget or you will be out of juice for your devices!

Speaking of which, another thing that is quite useful is to find a telecomunications store at the airport (Claro, Vivo, Oi, Tim) or in any mall or big commercial area (Paulista Ave. has some). Buy a pre-paid SIM card for your smartphone, with 3G enabled - and test it in the store!. It will be a whole lot easier to navigate through out the city that way. Whenever I go to other countries that is the first thing I try to do. Also make sure to have some friends or acquaintances in your contact list in case you have any emergencies or even get lost in the city.

You most probably don't speak Brazilian Portuguese. The first thing to know is that it's not nearly the same as Spanish. It's very difficult to find people that can speak fluent English, but be assured that most people here will try their hardest to understand you. Friendliness is definitely something you can count on. Speak slowly and the clearest that you can to make yourself understood. In public transportation and taxi cabs that's going to be bit different as workers under our traffic stress aren't particularly friendly, so be patient.

About taxi cabs, when you arrive at the airport you may be approached by private drivers. DO NOT TAKE THEM. Use an official taxi company at the airport exit. It's easy to make the distinction as the official taxi are all standardized and you will see staff organizing the lines. Pay the fare at the taxi booth inside the airport with a pre-determined price. Even while walking around the city, always get a cab from an official line. You may want to try apps such as 99Taxi while in the city.

By the way, Google Maps works great around here, even to know subway time schedules. Waze also works great.

BRAZIL IS NOT VIOLENT!! (in general)

Regardless of what you may have heard or read in news channels, Brazil in general is not a violent country. Not even in São Paulo, our largest and crowdest city. It doesn't mean that it's not there, just don't go look for it. Keep in mind a few useful rules: don't make it easy for pickpockets. If you leave your bag in the floor, unattended, you may not find it there later.

There is a popular saying here "a oportunidade faz o ladrão" that can be roughly translated as "opportunity makes thieves". It's not properly translated culturally wise but I think you got it. Just make sure to not have all your money in your wallet in the backpocket of your pants. It's wise to distribute it in your pockets, specially if you decide to wander around some of the rougher areas of the city (more on that below).

It's totally safe for you to walk around by yourself. Avoid "showing off" while in busy areas. Speaking in your shiny brand new smartphone while walking around crowded streets may not be a good idea. If you're in a taxi cab, stuck in a traffic jam, don't be playing with your tablet while having your window wide open. Be aware of your surroundings. That being said, there's no need to be paranoid. In 6 years of receiving foreign speakers at Rubyconf, not once I have heard of anything that happened to any of our speakers or to anyone else for that matter. I myself have lived more than 3 decades here and I've been robbed once a decade.

Rubyconf will be near one of the landmarks of this city: Paulista Avenue. If your hotel is nearby it's a good area to be because it's the easiest way to access most of what's important in the city. If you're not near the conference venue and not near a subway station be prepared to get some heavy traffic. Rush hours in São Paulo start around 8AM until 10AM and then from 5PM until 9PM. And I mean much-worse-than-Manhatan levels of traffic jams. So be organized and wake up early. If you're 5 miles away or more from the conference, calculate at least 1 hour in traffic.

Business hours in São Paulo start at 9AM and ends at 6PM. Banks open at 10AM and close at 4PM. Shopping Centers and other stores and restaurants are usually open at least until 10PM, lot's keep working until after midnight. Night life in São Paulo is particularly busy. You will find drugstores, markets, convenience stores, and several busineses that go on for 24 hours.

Understanding the City: A Geography Overview

With the most important points being said, let's focus on location. As the wise would say, "location, location, location."

First and foremost, some may find this confusing because "São Paulo" can refer to 3 different things: the state, the capital city of the state, the big metropolitan area also known as "Greater São Paulo" which is a group of 39 municipalities around São Paulo City.

The metropolitan area is humongous. The Greater São Paulo has no less than 20 million people. São Paulo City alone has more than 11 million. We are talking about the 6th most densely populated area in the planet. If we expand to the Campinas city through Jundiaí city, this area has 12% of the country population. In terms of size, we are talking about something the size of the entire country of Lebanon or Jamaica.

Even with this size, one thing you will notice right away is that our public transportation is surprisingly lacking given that the GDP of this area alone was more than USD 300 billion (2011).

It's important to understand the geographic map. The map below shows the Greater São Paulo metropolitan group:

Greater São Paulo

São Paulo City is the big grey area in the middle. When you land here, you will be at Guarulhos International Airport (GRU) in Guarulhos City, which is outside of São Paulo. It's one of the green cities in the north. You will have to go through a 40 to 50 minutes ride (without traffic) to go downtown.

Now, let's zoom in the grey area from the previous map:

São Paulo City

Our city is roughly divided in 5 zones: North, South, East, West and Center or what I prefer to call "Old Downtown". This is 11 million people city but you will never have to go out of the area I circled in red, mainly near Old Downtown and what I personally call "New Downtown".

Let's zoom in a little bit the area surrouding the red circle:

Expanded Downtown

There is this river named "Tietê" that cuts through the city. It creates this "semi-island" that we call "Expanded Downtown". Inside the island are the areas I called "Old Downtown" and "New Downtown". The Paulista Avenue roughly divides those 2 areas. The old one more up north and the other more south.

The red lines are the main avenues that connect the city traffic. Line number 4 in the map is the Paulista Avenue. The blue line is what we call the "Marginal", it's a large road that surround this Expanded Area and follow the Tietê River course. Although it's one single continuous wide road, it has 2 names: Marginal Tietê at the north half and Marginal Pinheiros at the south half.

So you will be most of the time around Red Line Line 4 (from the map above), the Paulista Avenue, located within the Expanded Area, surrounded by the Marginais. You will probably go through the Marginal when you come from the Guarulhos Airport (which would be way north outside of the map).

Remember I mentioned much-worse-than-Manhatan traffic jams? This is a snapshot of the traffic layer of the São Paulo Expanded Area around 5:30PM on a Thursday just so you have an idea of what I mean:

Traffic

I call this traffic map "São Paulo bleeding".

I hope you're still with me in the Geography lesson. Now let's get more practical: subway lines!

I will overlay the metro lines on top of the map above so you have an idea:

Subway

Now the cleaner map (click the image to see the larger version):

Subway

And now the abstract representation to make it easier to navigate (again, click the image for the larger version):

Subway

You will most certainly not go away from the area cropped in the image above, the green line, which go under the Paulista Avenue. So you guessed it: from Paulista Avenue you have easy access to many of the interesting places in the city.

We have several ways to go through the public transportation, but the easiest way is to know that you can buy individual tickets inside the subway station. Always buy at least 2 so you have your way back guaranteed. It's the cheapest and faster way to navigate through the city. Use taxi cabs to go from a subway station to where you want to go and then back. Using a taxi for tourism is the easiest way to go bankrupt fast, because they aren't cheap, specially with heavy traffic.

Conclusion

This should cover the basics to understand the city. The São Paulo page at Wikipedia does a great job of explaining more details about the city, tourism and recreation options. There is also this Wikitravel Page that might help.

Most people will be staying at the Pergamon Hotel. It's at walking distance from the conference venue (Frei Caneca Theater), but you will probably want to get a taxi to go to Paulista Avenue, it's less than 5 min by car. And the Frei Caneca St. is parallel to Augusta St. which is very well known for it's active nightlife, if you like it.

Unfortunately we don't have anything that comes close to Yelp! around here. Don't be shy, if you don't know anyone from here, use the conference to get to know more people. Brazilians are really very friendly and they will be more than willing to explain a lot more and give great recommendations.

Don't stay just in the hotel. This is a great opportunity to get to know a new place, different people and culture. Pay special attention to the Old Downtown, the historic center and contrast it with the "New Downtown" where you will find the luxurious neighborhood of Jardins and the Tech neighborhoods of Vila Olímpia and Brooklin. Get in touch with the Brazilian Ruby community beforehand to schedule visits to startups and other companies.

Don't be a stranger, this is a city and a community that wants to exchange experiences and knowledge. Welcome to São Paulo!

Rubyconf Brasil 2013: Conheça Rodrigo Caffo

$
0
0

Rodrigo Franco

Se você ainda não se inscreveu, não perca a oportunidade. Vá ao site oficial para se cadastrar agora mesmo! A conferência inicia no dia 29 de Agosto.

Este é o 6o ano consecutivo onde a Locaweb e eu organizamos mais uma grande Rubyconf no Brasil. Muitas empresas estabelecidas e startups de tecnologia estão apoiando a conferência enviando grandes desenvolvedores.

Conheça a LivingSocial site de ofertas diárias do grupo Amazon.com. Por um bom tempo ela se tornou um dos maiores contratantes de rubistas nos EUA, concentrando alguns dos nomes mais famosos como Chad Fowler, Rich Kilmer, Evan Phoenix e muito mais.

Rodrigo Franco, mais conhecido como "Caffo", trabalha remotamente a partir do Rio de Janeiro para a LivingSocial.com, que é de Washington, DC. Ele trabalha para empresas dos EUA com Ruby há muitos anos e é um dos rubistas mais experientes do Brasil. Ajudou a crescer o grupo de usuários Ruby no Brasil e suas palestras nas últimas Rubyconf Brasil sempre foram inusitadas e divertidas.

Não perca seu keynote de fechamento do evento precisamente às 16:45 do segundo dia do evento. Vamos conhecer um pouco mais sobre ele:

"Seu keynote será sobre Hackers, Anarquistas e sei lá o quê. Se alguém está apenas começando com Ruby, você acha que ele conseguirá acompanhá-lo?"

Caffo: Sem dúvida. A idéia é inspirar todos a sairem um pouco da normalidade e conhecer pessoas brilhantes que conseguiram resultados inusitados fazendo o mesmo.

"Muitos desenvolvedores adorariam se tornar tão experientes e fluentes em Ruby como você. Quais foram as dificuldades que teve que ultrapassar para se tornar um grande desenvolvedor? Algumas dicas para iniciantes em Ruby?"

Caffo: Quando comecei, praticamente não existia material disponível para estudo (era a versão 0.7 do rails, em 2005). Hoje em dia existem dezenas de fontes de material com ótimas metodologias de ensino, só não aprende quem não quer. Pessoalmente indico a codeschool (em inglês) e a HOWTO (em português) para novatos. Outra coisa que acho que ajuda bastante é utilizar Mapas mentais para qualquer tipo de estudo.

"Existem tantas tecnologias, boas práticas e tudo mais que são lançados o tempo todo. Na sua opinião pessoal, e talvez relacionado ao seu trabalho atual, quais são as tendências em tecnologia que acha que devemos prestar atenção no futuro próximo?"

Caffo: Eu ficaria de olho em novas linguagens que estão aparecendo (Elixir, Go) e as inovações na área de virtualização, como o Docker.

Rubyconf Brasil 2013: Vinheta de Abertura

$
0
0

Iniciamos a contagem regressiva para o evento, faltam apenas 10 dias até o maior evento de Ruby da América Latina. Inscreva-se agora mesmo pelo site. Marque os dias 29 e 30 de Agosto, no Teatro Frei Caneca em São Paulo, na sua agenda.

Nas últimas Rubyconf eu fiz diversosvídeoscaseiros com nada mais que meu iPhone de guerra e templates de iMovie. Este ano me coloquei o desafio de construir uma vinheta de abertura para o evento de maneira mais profissional. Eis o resultado:

Quando soube que o Bob Wolheim tinha integrado a FLAG através da S-kull logo entrei em contato e ele me apresentou o excelente pessoal da The Kumite. Gostaria de poder mostrar os outros trabalhos deles mas o reel ainda não está no ar. Basta dizer que eles são reais profissionais do meio de produção de vídeos e computação gráfica tendo feito trabalhos pra Globo e comerciais pra marcas como Samsung. Se quiser vídeos de excepcional qualidade, fale com eles!

Eles me mandaram este pequeno release de apresentação:

The Kumite

The Kumiteé um grupo de designers, diretores, produtores e artistas visuais unidos pela paixão em criar historias inspiradoras.

The Kumite é parte da Flag, a holding criativa a que pertence agencias como CUBOCC e Pong Dinasty. FLAG é parte do Interpublic Group (NYSE: IPG)

Se você tem interesse em trabalhar conosco, entre em contato através de hello@thekumite.org.

Rubyconf Brasil 2013: Meet Eduardo Shiota

$
0
0

Eduardo Shiota

If you didn't register yet, don't miss this opportunity. Go to the official website to register as soon as possible. The conference will commence on August 29th. The countdown begins, 10 days to launch!

This is the 6th consecutive year that Locaweb and myself are organizing yet another great Rubyconf in Brazil. Several great established companies and tech startup are supporting the conference sending great developers.

Meet Baby.com.br a Brazilian e-commerce geared toward the baby products. It's under the umbrella of venture capitals such as Monashees and Accel Partners, and they have a big Ruby development team.

Eduardo Shiota works for Baby for a while, he is responsible for usability and front-end development. Because he studied both Arts and Computer Science, he has a unique point of view that binds both worlds.

Don't miss his talk precisely at 10:15AM of the first day of the event. Let's get to know more about him:

"Your talk is about Modular and Event-Driven Architecture in Javascript, can you explain what some of the requirements are to understand what you're going to talk about?"

Shiota: If you're starting with Front-end or just JavaScript development now, it's important to know that the language is much more than jQuery, visual effects, and DOM manipulation. Having this concept in mind and the desire to understand the fundamental concepts of the language are enough to take in the content of this talk, and apply it on a daily basis.

"Many developers would love to become as experienced and fluent in Javascript and Ruby as you are. What have been some of the pitfalls you had to overcome in order to become a great developer? Any good tips for a beginner?"

Hongli: It's pretty easy to get stuck on basic Front-end development, doing one-file-huge JavaScript solutions, and simply slicing PSDs into CSS. You have to take it to the next level. Ask yourself "How can I make this better? How can I make this reusable? How can I test this? How can I make this easily understandable and modifiable?". Search for the answers. Read a LOT of books, like Eloquent JavaScript, JavaScript: The Good Parts, and JavaScript Patterns. Subscribe to JavaScript Weekly e BrazilJS Weekly. Watch a lot of JavaScript talks on YouTube. Write some simple games or quizzes. Try some new methods. Have fun. =)

"There are so many new technologies, best practices and so on being released all the time. In your personal opinion, and maybe related to your current field of work, what are some of the trends in technology that you think we should be paying attention for the near future?"

Shiota: We're living a boom of JS MV* frameworks, languages that are compiled to JavaScript, like CoffeeScript and TypeScript, and the growth of the Node.js community. It's important to not stick to just a single solution or library, stay in touch with the growth of the language as a whole, and know which topic is worth digging deeper. Keep yourself up to date on ECMAScript 6 "Harmony"'s progress, and every update on modern browsers APIs.

Rubyconf Brasil 2013: Conheça Eduardo Shiota

$
0
0

Eduardo Shiota

Se você ainda não se inscreveu, não perca a oportunidade. Vá ao site oficial para se cadastrar agora mesmo! A conferência inicia no dia 29 de Agosto, estamos em contagem regressiva com apenas 10 dias para o grande dia!

Este é o 6o ano consecutivo onde a Locaweb e eu organizamos mais uma grande Rubyconf no Brasil. Muitas empresas estabelecidas e startups de tecnologia estão apoiando a conferência enviando grandes desenvolvedores.

Conheça a Baby.com.br e-commerce voltado ao mercado de produtos para bebês. Investida por fundos como Monashees e Accel Partners ela tem uma equipe grande de desenvolvedores Ruby.

Eduardo Shiota trabalha na Baby há algum tempo, responsável por usabilidade, front-end. Ele tem formação tanto em Artes quanto Ciência da Computação e possui uma visão única que une os dois mundos.

Não perca sua palestra precisamente às 10:15 do primeiro dia do evento. Vamos conhecer um pouco mais sobre ele:

"Sua palestra será sobre arquitetura modular e orientada a eventos com Javascript. Mesmo no mundo Ruby usa-se bastante Javascript. Como iniciante em Ruby e Javascript, você acha que conseguirei acompanhá-lo?"

Shiota: Se você está começando no desenvolvimento de Front-end ou apenas JavaScript, é importante saber que a linguagem é muito mais do que jQuery, efeitos, e manipulação de DOM. Ter essa noção e querer entender os conceitos fundamentais da linguagem são suficientes para absorver o conteúdo da palestra e começar a aplicá-lo no dia a dia.

"Muitos desenvolvedores adorariam se tornar tão experientes e fluentes em Javascript e Ruby como você. Quais foram as dificuldades que teve que ultrapassar para se tornar um grande desenvolvedor? Algumas dicas para iniciantes?"

Shiota:É muito fácil ficar preso ao básico do desenvolvimento Front-end, escrevendo todo o código em um arquivo JavaScript gigantesco, e "recortando" PSDs em CSS. Você precisa levar isso ao próximo nível. Pergunte-se "Como posso melhorar isso? Como posso fazer com que isso seja reutilizado? Como posso testar isso? Como posso escrever esse código de maneira compreensível e modificável?". Procure pelas respostas. Leia MUITOS livros, como o Eloquent JavaScript, JavaScript: The Good Parts, e JavaScript Patterns. Increva-se na JavaScript Weekly e BrazilJS Weekly. Assista várias palestras de JavaScript no YouTube. Escreva joguinhos simples ou resolva desafios de programação. Experimente novos métodos. Divirta-se. =)

"Existem tantas tecnologias, boas práticas e tudo mais que são lançados o tempo todo. Na sua opinião pessoal, e talvez relacionado ao seu trabalho atual, quais são as tendências em tecnologia que acha que devemos prestar atenção no futuro próximo?"

Shiota: Hoje estamos vendo a explosão de frameworks JS MV*, de linguagens que compilam para JavaScript, como CoffeeScript e TypeScript, e o crescimento da comunidade Node.js. É importante não se prender a nenhuma dessas soluções e bibliotecas em específico, acompanhar o crescimento da linguagem como um todo, e saber escolher o que valha a pena estudar ou não. Mantenha-se atualizado no progresso do ECMAScript 6 "Harmony", e nas atualizações das APIs dos navegadores.

Viewing all 481 articles
Browse latest View live