Configurando um ambiente de desenvolvimento Ruby on Rails 3.2 no Mac OS X 10.8.4

Há um tempo atrás eu resolvi documentar a maneira na qual eu preparava o meio ambiente ruby no Ubuntu, pra tentar evitar de ficar horas e horas no Google achando como instalar as coisas.

Para quem quiser conhecer o post anterior aí está:

http://www.cezinha.info/2012/07/22/configurando-um-ambiente-de-desenvolvimento-ruby-on-rails-3-02-no-ubuntu-12-04/

E não é que deu certo? De lá pra cá eu tive que reinstalar algumas vezes o meu ambiente e não tive dores de cabeça com isso. E pelo número de acessos que eu tenho naquele post, eu acho que ele acabou sendo bastante útil pra outras pessoas também.

Pois bem, o objetivo deste post é o mesmo, porém em outro SO. O lance aqui é preparar um ambiente de desenvolvimento Ruby on Rails no Mac OS X.

Gostaria de enfatizar apenas que o que você encontrará aqui é uma receita de bolo bem específica. Se você quer saber o que é cada coisa que estamos instalando aqui, então saiba que você está no post errado.

O ambiente terá:

  • Git
  • Gem
  • Ruby
  • RVM
  • RSpec
  • Rails
  • Cliente/Servidor MySQL
  • Outros

Todos os passos abaixo foram testados no Mac OS X 10.8.4. Se você estiver com dúvidas sobre a sua versão então experimente o comando abaixo:

$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.8.4
BuildVersion:	12E55

Instalar o XCode

Este passo é bem importante. Sem ele você não consegue usar o Homebrew e provavelmente não conseguirá compilar outras coisas. Acho que é o passo mais demorado. O download é de +/- 1.5GB (nesta data).

Você pode fazer a instalação facilmente via App Store. É grátis.

Depois de instalado você precisa também instalar as “Command line tools”. Pra isso siga os passos abaixo:

a. Abra o Lauchpad;
b. Localize e abra o Xcode;
c. Acione command-virgula pra abrir as configurações do Xcode;
d. Vá na guia Downloads;
e. Mande instalar as “Command line tools” (aff… mais 120MB preciosos do meu SSD).

Eu achei isso uma derrota! Demorou uma eternidade. Seria ideal fazer isso tudo com uma linha de comando e se possível com menos espaço em disco. É provável que eu recebi um monte de porcaria que nunca irei utilizar.

Homebrew

Infelizmente o OS X não possui um gerenciador de pacotes padrão como o apt-get do Ubuntu. Mas, existe uma boa alternativa chamada Homebrew. Pela pouca experiência que eu tenho neste SO, me parece ser a solução mais adotada. E o melhor: ele é feito em Ruby :-) .

Para instalá-lo basta executar a linha abaixo:

$ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"

Você poderá conhecer mais sobre o Homebrew no site abaixo:
http://brew.sh/index_pt-br.html

Git

Hoje em dia não tem mais como trabalhar sem o git, né? Então aí vai:

$ brew install git
$ git --version
git version 1.8.3.4

Nós precisamos também nos identificarmos para o git e vamos aproveitar também para colorir o prompt dele. Para isso abra o arquivo ~/.gitconfig e cole o script abaixo:

$ cd ~
$ vim .gitconfig
...
[user]
  name = Cezinha
  email = cesar@asseinfo.com.br

[log]
  date = local

[color]
  status = auto
  branch = auto
  interactive = auto
  diff = auto

MySQL

Este passo instalará tanto o cliente quanto o servidor MySQL. No meu caso eu uso o MySQL para desenvolvimento na minha máquina local. Se você utiliza outro banco, como por exemplo o SQLite, acredito que este passo não seja importante pra você.

A instalação do MySQL também se dará através do Homebrew:

$ brew install mysql

O processo deve demorar um pouco. Depois disso é só conferir:

$ mysql --version
mysql  Ver 14.14 Distrib 5.6.13, for osx10.8 (x86_64) using  EditLine wrapper

Para colocar o servidor de pé basta usar:

$ mysql.server start

Ou para derrubá-lo:

mysql.server stop

Caso queira que o MySQL já carregue junto com o login, basta rodar as duas linhas abaixo:

$ ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist

Eu particularmente prefiro acionar manualmente sempre que precisar.

Ruby e Gem

O OS X já vem com o Ruby instalado e Gem instalados por default. Provavelmente não é a versão mais atual. Você pode checar isso através do comando abaixo:

$ ruby --version
ruby 1.8.7

$ gem --version
1.3.6

Dá pro gasto pra instalarmos as demais ferramentas. Por enquanto vamos deixar como está.

RVM

Com o RVM você poderá rodar diversas versões do Ruby e diversos Gemset no mesmo computador.

$ \curl -L https://get.rvm.io | bash

Você pode obter maiores informações sobre o RVM no link abaixo:
https://rvm.io/rvm/install

Importante: o rvm só ficará disponível pra você depois de fechar o terminal e abrir novamente. Ele já estará configurado no seu usuário.

Você pode verificar o seu rvm assim:

$ rvm --version
rvm 1.21.16

Autolibs

O Autolibs é uma mão na roda para o RVM. Ele tentará resolver automaticamente as dependências do que você tentar instalar no RVM.

Você pode consultar se ele está instalado assim:

$ rvm autolibs show
default (fail) ou disable -> significa que não está habilitado.

Para habilitá-lo você pode fazer assim:

$ rvm autolibs enable

Ruby dentro do RVM

Lembra que um pouco mais cedo eu escrevi que o ruby já vinha com o OS X, mas o mesmo provavelmente não seria do seu agrado? Então, agora você pode instalar o ruby que você precisa dentro do RVM sem zoar com o ruby default do SO.

Vamos instalar o Ruby 1.9.3:

$ rvm install 1.9.3

Se você quiser instalar outra versão, basta usar o rvm install novamente. Veja só como faríamos se quiséssemos instalar o ruby 2.0.0:

$ rvm install 2.0.0

Depois podemos consultar todos os rubies instalados com o comando abaixo:

$ rvm list

Para deixar o ruby 1.9.3 como default faça o seguinte:

$ rvm use 1.9.3 --default

Você pode consultar ainda quais rubies estão a sua disposição para serem instalados:

$ rvm show known

Para comutar entre os rubies use:

$ rvm use ree

ou

$ rvm use 1.9.3

ou

$ rvm use system

Este último utilizará o ruby do sistema. Ei! Chega de explicações. Como disse anteriormente, este post não tem como objetivo ensinar a usar nada, ok? Apenas instalar.

Rails

Vamos instalar agora o Rails dentro do RVM para o Ruby 1.9.3.

$ rvm use 1.9.3
$ gem install rails --version=3.2.13

Aguarde um pouco até o processo terminar. Isso pode demorar.

Teste agora o rails:

$ rails --version
  Rails 3.2.13

Veja ainda que o Rails não foi instalado no 2.0.0:

$ rvm use 2.0.0
$ rails --version
O programa rails não está instalado no momento.

Pra evitar problemas, volte ao 1.9.3:

$ rvm use 1.9.3

E por último, mas não menos importante, vamos instalar o RSpec:

$ gem install rspec
$ gem install rspec-rails

Importante:
Não esqueça de adicionar as linhas abaixo no Gemfile do seu projeto Rails caso ainda não estejam:

group :test, :development do
  gem "rspec-rails", "~> 2.4"
end

Nem disso (execute dentro do diretório do projeto):

$ rails generate rspec:install

Deixando tudo mais colorido…
Este passo não é tão importante, mas é bacana. Ele irá deixar o seu shell mais estilizado. Ele ficará colorido, mostrará a versão do ruby do RVM, mostrará o branch do git e o nome do diretório. Segue abaixo o que você deve colar em seu .bash_profile:

$ cd ˜
$ vim .bash_profile

..
# Colorindo o ls e o grep
export GREP_OPTIONS="--color=auto"
export GREP_COLOR="4;33"
export CLICOLOR="auto"

# ls / ll
alias ls="ls -G"
alias ll="ls -l"

# Mostrar o git no prompt
# Origem: http://www.developerzen.com/2011/01/10/show-the-current-git-branch-in-your-command-prompt/

function parse_git_branch () {
       git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
 
RED="\[\033[0;31m\]"
YELLOW="\[\033[0;33m\]"
GREEN="\[\033[0;32m\]"
NO_COLOUR="\[\033[0m\]"
 
PS1="$GREEN\u@machine$NO_COLOUR:\w$YELLOW\$(parse_git_branch)$NO_COLOUR\$ "



Você encontrará diversas versões deste script na web.

Pronto! Agora é só começar a trabalhar.

Espero que gostem.

Wireless parou de funcionar misteriosamente no Ubuntu 12.04

Como a maioria dos notebooks, o meu possui uma chave que permite ligar ou desligar a placa wireless. Eu não sei o que eu fiz exatamente, mas em uma das vezes que eu desliguei tal chave, ao religá-la o Ubuntu não habilitou mais a rede.

Se eu fosse no menu da rede na barra superior da tela, eu recebia a mensagem “a rede sem fio está desabilitada por hardware.”.

wireless.ubuntu.barra

Nem no ifconfig aparecia nada:

wireless.ifconfig.problema

Depois de algumas googladas eu encontrei as seguintes instruções que me ajudaram:

$ sudo rfkill unblock wlan
$ sudo ifconfig wlan0 up

Como mágica tudo voltou a funcionar!

wireless.ifconfig.corrigido

Minha ida ao Agile Alliance Florianópolis Open Space 2013

Ontem participei da primeira edição do Agile Alliance Florianópolis Open Space. O que dizer de um evento como este? Simplesmente fantástico.

open_agile_banner

open_agile_dashboard

Foi uma experiência única. A maior parte do evento era em Inglês, pois haviam participantes de vários países como, França, EUA e Austrália.

open_agile_host

Era bem comum você estar participando de uma sessão em Português e de repente “os gringos” invadirem a sessão e as discussões passarem a ser feitas em Inglês. Isto aconteceu em uma sessão onde eu era o host. Todos os meus convidados eram brasileiros e estávamos discutindo e estávamos discutindo em Português. De repente uma francesa e um americano entraram na jogada e todos nós passamos a discussão para o Inglês.

Eu gostaria de enfatizar isso, pois mais uma vez eu fui sensibilizado não só de como o Inglês é importante para a nossa área em particular, mas sim como uma ferramenta de inclusão social. Por isso meu amigo… keep studing English, ok?

open_agile_cezinha

A infra-estrutura não deixou nada a desejar. O cuidado com os participantes, o coffee-break, o almoço e até mesmo o cocktail de encerramento. O evento começou e terminou pontualmente. O pessoal da Agile Alliance é agile até nisso :-)

Gostaria de agradecer muito ao Samuel Crescêncio. Imagino que ele tenha se empenhado bastante para trazer o evento ao Brasil. O cara é, indiscutivelmente, uma das grandes figuras do movimento ágil no Brasil.

Agora é rezar bastante para que no futuro possamos ter mais edições do evento aqui no Brasil.

Baixar um site inteiro somente com wget

Vai aí uma dica bem simples de como baixar um site inteiro usando apenas o comando wget do Linux:

 $ wget -r -k -p www.meusite.com.br

Onde:

-r Recursivo.
-k Converter links para visualização local.
-p Baixa todos os requisitos necessários para a página ser visualizada, como por exemplo, os arquivos css, imagens e javascript.

O site da ASSEINFO usava antes o WordPress como engine. Eu queria convertê-lo para uma outra plataforma mais simples e para isso eu precisava de todo o HTML dele.

Me tomaria muito tempo pra extraí-lo dos templates do WordPress. Então eu “chupei” tudo com o wget e depois eliminei as duplicidades.

O wget facilitou muito o processo de conversão.

Protip: é muito feio plagiar os outros. Sem contar que, em determinados casos, isso também é ilegal. Só copie aquilo que lhe pertence ou que a licença do conteúdo lhe permita.

Impressão direta utilizando o Gerenciador de Impressões do Windows com Delphi XE

Tem certas ocasiões que é preciso imprimir, usando o Delphi, sem passar pelo driver de impressão do fabricante. Podemos citar, por exemplo, a impressão de etiquetas em impressoras térmicas ou ainda usar impressoras não-fiscais de 40 colunas que utilizam bobina. Um outro exemplo seria a impressão em impressoras matriciais em modo rascunho. Se você utilizar o driver do fabricante, o mesmo acabará imprimindo o que você deseja em modo gráfico – muuuiiitoo mais lento!

Normalmente o pessoal faz isso acessando diretamente a porta da impressora com um AssignFile ou AssignPrn. Segue abaixo um exemplo:

Ok! O código acima funciona até certo ponto. Os problemas começam a aparecer quando você necessita cuidar do estado do dispositivo. Imagine que você tenha que imprimir mutia coisa. O seu programa ficará preso até que a impressora libere-o. Ou ainda você terá que se preocupar em criar um mecanismo de seleção de portal – o código acima está fixo LPT1. Ou pior, o seu cliente compra uma impressora USB. Daí o seu mundo acabou, pois com o código acima não é possível imprimir. Você teria que fazer uma bela enjambra para acessar a porta USB como se fosse um compartilhamento de rede.

Mas então qual seria a alternativa para continuar tendo controle do que será enviado para a impressora sem ter que se preocupar com toda essa infra?

A alternativa seria acessar o Gerenciar de Impressões do Windows utilizando as funções da Unit WinSpool. Veja abaixo um código mostrando a estrutura básica para isso:

A título de ilustração eu criei duas variáves chamadas TextoUnicode e TextoAnsiString. É que o string do Delphi XE agora é Unicode e as funções do WinSpool esperam AnsiString. Obviamente no seu código original você pode fazer uma função mais simples pra tratar esta situação.

O código acima serviu de base para a correção de componente que eu estou dando manutenção. Para conhecer um pouco mais o projeto acesse https://github.com/cesarjr/RSPrint.

É isso aí!

Instalando a Ruby Gem MySQL2 no Ubuntu 12.04

Se o seu projeto Rails acessa MySQL, então você precisará declarar em sem Gemfile a gem mysql2.

Mas só isto pode não ser o suficiente, pois ao executar um bundle exec, o bundler pode não conseguir instalar a gem porque faltará algumas dependências do Ubuntu 12.04. Pra resolver isso basta rodar o comando abaixo:

$ sudo apt-get install libmysql-ruby libmysqlclient-dev

Este pequeno detalhe me fez perder um tempão. Espero que o seu tempo seja poupado com isso.

Obviamente, não esqueça de ajustar o seu Gemfile:

group :development, :test do
  gem 'sqlite3'
end

group :production do
  gem 'mysql2', '~> 0.3.0'
end

E depois é só rodar o bundler

$ bundle install

É isso aí!

Instalando Twitter Bootstrap no Rails 3.2 na unha!

Existe uma cacetada de gems que facilitam a instalação do Twitter Bootstrap no Rails 3.2. Eu cheguei a experimentar duas gems e achei bem bacanas. O problema é que se eu precisar atualizar a versão do bootstrap, eu ficarei dependente da boa vontade de um vendor.

Por este motivo eu acabei encarando o desafio de instalá-lo na asset pipeline do Rails sem o auxílio de nenhuma gem especial. Já vou adiantando que a tarefa é bem simples.

 

Baixando o Twitter Bootstrap

Na minha versão anterior deste artigo eu segui a linha de baixar uma versão personalizada do bootstrap para rodar bonitinho na asset. Desta vez eu resolvi simplificar um pouco mais. Então, vamos fazer download do pacote padrão do bootstrap:

Você baixará o arquivo bootstrap.zip. Extraindo-o você obterá os seguintes arquivos:

js/bootstrap.js
js/bootstrap.min.js
css/bootstrap.css
css/bootstrap.min.css
img/glyphicons-halflings.png
img/glyphicons-halflings-white.png

Instalando o bootstrap no Rails

Para facilitar as coisas, vamos começar um novo projeto:

$ rails new modelo_bootstrap

Eu gosto de manter cada lib de terceiros em sua própria pasta, identificando também a versão da mesma. No momento da escrita deste post, a versão atual do bootstrap é a 2.3.1. Então devemos criar uma pasta em vendor assim:

$ mkdir vendor/asset-libs
$ mkdir vendor/asset-libs/bootstrap-2.3.1

Coloque os seguintes arquivos na nova pasta:

../bootstrap-2.3.1/css/bootstrap.css
../bootstrap-2.3.1/css/bootstrap-responsive.css
../bootstrap-2.3.1/img/glyphicons-halflings.png
../bootstrap-2.3.1/img/glyphicons-halflings-white.png
../bootstrap-2.3.1/js/bootstrap.js

Você notou que os arquivos .min.* ficaram de fora? É porque não precisamos deles. A asset pipeline do Rails nos fará o favor de minificá-los. Sem contar que em modo de desenvolvimento o debug fica mais amigável.

Precisamos também declará-lo nos arquivos de manifesto da asset pipeline. Adicione as linhas a seguir nos arquivos relacionados:

Arquivo: app/assets/javascripts/application.js
...
//= require bootstrap
...

Arquivo: app/assets/stylesheets/application.css
...
 *= require bootstrap
 *= require bootstrap-responsive
...

Importante: o bootstrap é dependente da JQuery para poder rodar em modo responsivo.

Lembra que a gente colocou o bootstrap numa pasta própria dentro da asset pipeline? Poisé! Agora a gente precisa ensinar o rails a encontrar esta pasta. Basta adicionar a linha abaixo no application.rb:

Arquivo: config/application.rb
...
# Faz com que a asset pipeline encontre os arquivos adicionados em vendor tendo uma sub-pasta
# para cada lib, permitindo assim que as imagens, css e js daquela lib fiquem centralizadas
# para facilitar futuras atualizações.
config.assets.paths += Dir["#{Rails.root}/vendor/asset-libs/**/"].sort_by { |dir| -dir.size }

Temos ainda mais um probleminha pra resolver. As imagens do bootstrap são declaradas dentro do bootstrap.css usando o diretório “../img”. O problema é que após a compilação da asset, todas as imagens precisam estar no diretório “./”. Então nós precisamos abrir o arquivo bootstrap.css e fazer duas pequenas modificações:

Abra o arquivo vendor/asset-libs/bootstrap-2.3.1/css/bootstrap.css

Localize a linha que contém:
url("../img/glyphicons-halflings.png");

E substitua por:
url("glyphicons-halflings.png");

Localize a linha que contém:
url("../img/glyphicons-halflings-white.png");

E substitua por:
url("glyphicons-halflings-white.png");

Prontinho… agora é só correr para o abraço.

O exemplo Twitter Bootstrap – Hero

No github do Twitter Bootstrap podemos encontrar o exemplo abaixo:

http://twitter.github.com/bootstrap/examples/hero.html

Eu gosto muito deste exemplo, pois ele usa um menu responsivo e com um dropdown. Ele é bem legal, pois você pode visualizá-lo tanto no desktop quanto em um dispositivo móvel. Vamos então tomá-lo como referência e recriá-lo no Rails.

Aviso: não vou me preocupar em criar partials ou outras otimizações de layout. Quero deixá-lo o mais didático possível, ok?!

Para não perdermos tempo, eu fiz as devidas adaptações no projeto e publique-o no github. Eu commitei cada passo para que você possa acompanhar em detalhes a evolução do exemplo. Segue abaixo a URL:

https://github.com/cesarjr/modelo-bootstrap

O nosso exemplo conta com um controller chamado site com uma action chamada home. Com isso teremos a URL /localhost:3000/site/home. Esta action hospedará o corpo do exemplo HERO.

No arquivo modelo_bootstrap/app/views/layouts/application.html.erb eu coloquei o sistema de menus e a declaração dos javascripts e css.

Não precisei colocar o jquery necessário para o menu dropdown, pois por padrão o Rails já o traz no Gemfile.

Coloquei também algumas imagens adicionais em modelo_bootstrap/app/assets/images/ que representam os ícones do aplicativo ao criar atalhos, favicons e outros.

É isso aí! Sugestões sempre são bem vindas.

Minha ida ao RubyConf Brasil 2012 em São Paulo

Eu e o @ronaldotijucas participamos da RubyConf Brasil 2012 nos dias 30 e 31 de agosto de 2012 em São Paulo. Foi nossa primeira participação no evento.

O evento foi realmente impressionante. A organização não deixou nada a desejar. A sugestão do hotel, a escolha do local do evento, a pontualidade das palestras, tradução simultânea das palestras de inglês para português e das palestras de português para inglês.

A RubyConf é o espelho da comunidade Ruby: uma galera apaixonada pela plataforma e com foco muito forte na qualidade.

Enquanto outras plataformas agora é que estão começando a se preocupar com testes automatizados, deploy automatizados, versionamento de código e boas práticas, na comunidade Ruby é praticamente impossível você se “criar” se este tipo de coisa não é sua praia.

Enfim, voltando ao evento, foi muito legal ver de perto todos aqueles caras que eu sigo no twitter e que são grandes formadores de opinião.

Gostei muito da palestra do @danielvlopes falando sobre complexidades desnecessárias que você adiciona ao seu software. Bem a cara do Daniel – prático e certeiro!

Achei muito prática também a palestra do @fnando falando sobre design para programadores – este foi um tema que eu gostei muito, pois tem tudo a ver com o momento em que vivo.

Muito legal também ver o pessoal da @caelum comparando a resolução de um mesmo problema em diversas linguagens e enfatizando como é importante você conhecer a API da linguagem que você trabalha e também como é importante você usar a linguagem certa para o problema que você está tentando resolver.

O @josevalim deu uma aula sobre concorrência. O cara explicou concorrência de uma maneira muito simples. Queria ter aprendido desta forma na faculdade!

Mesmo que tudo estivesse ruim, só pelo fato de eu ter conhecido pessoalmente o @viniciusteles já valeu a pena.

O cara é um dos grandes influenciadores e pioneiro do Agile no Brasil. Eu sou um cara infectado pelo conteúdo gerado por esse cara. Já li seu livro, acompanho seus blogs, seu twitter, ouvi todos os podcasts da improve-it e acompanhei seus screencasts.

Batemos um papo bem bacana sobre Agile, as oportunidades do pessoal do interior e o ruido gerado na oferta de oportunidades do pessoal da cidade grande.

Fico pensando, às vezes, se pessoas como o @viniciusteles tem a dimensão de como o trabalho deles pode influenciar na vida de outros profissionais.

Fico devendo ao @ronaldotijucas por ter me apresentado os podcasts da Improve-It e agora por ter tido a cara de pau de chamar o @viniciusteles na RubyConf para batermos um papo e tirarmos uma foto. Ronaldo, se você ler isso, muito obrigado cara!!!

Foi muito legal também tirarmos uma foto no estilo #FridayHug para o @tenderlove. Foi muito emocionante!

Opa… me empolguei tanto e quase me esqueço de agradecer ao @akitaonrails. O cara estava lá ao melhor estilo like a boss. Sei que ele sempre fala que todo mundo ajuda e que a locaweb é um parceiraço (assim como outros). Mas ninguém pode tirar dele o mérito de ter sido o idealizador do evento e um dos grandes evangelistas do Ruby no Brasil. Obrigado pela oportunidade cara!

Em resumo: espero estar lá novamente no ano que vem – com mais experiência em Ruby e aproveitando ainda mais o conhecimento ofertado.

 

Minha ida ao TDC 2012 Floripa

O The Developers Conference 2012, edição de Florianópolis, realizada nos dias 24, 25 e 26 de agosto estava gigante.

Foram três dias de evento e mais de 20 trilhas de assuntos diversos. Obviamente eu não poderia deixar de bater ponto. Eu frequento o evento desde a primeira edição.

Eu fiquei muito empolgado com tudo que vi por lá. Deu pra perceber como a comunidade está amadurecendo quanto a cultura agile.

Em 2010, na trilha agile, eu tinha a impressão que os palestrantes estavam falando grego com os congressistas. Percebia-se que os congressistas não acreditavam no que se falava.

Em 2011, nesta mesma trilha, notava-se que as empresas nas quais os congressistas trabalhavam não haviam adotado o agile.

Este ano, para a minha surpresa, eu pude ver empresas de médio porte com fortes iniciativas na adoção de scrum e outras práticas.

Espero que no ano que vem eu veja mais gente adotando o Lean. Este ano o pessoal da OnCast e da Lambda3 insistiram bastante no assunto. Fico feliz em ver isso, pois é justamente o rumo no qual venho tomando.

A trilha de testes foi um decepção gigante pra mim. Não foi um problema do congresso, mas sim, um problema meu. Eu me inscrevi esperando ver a galera falando bastante sobre testes automatizados, mas tudo o que eu vi foi um show de ferramentas de apoio aos testes manuais. Isso ainda é uma coisa que me impressiona muito: ver uma sala socada de testadores – caras que ficam o dia inteiro testando software – sem colocar a mão em uma linha de código. Eu respeito a profissão deles, mas realmente é uma coisa que pouco me atrai. Prefiro ver os caras de teste como planejadores e não executores.

Na trilha Management 3.0 falou-se bastante sobre empreendedorismo. Esta foi coordenada pelo Manoel Pimentel @manoelp. O cara tem uma energia impressionante. Pra mim, sexta-feira foi o melhor dia do TDC.

Eu não podia deixar de citar meu camarada Samuel Crescêncio, proprietário da OnCast – @screscencio. Na sexta-feira o cara contou um pouco sobre a vida dele. O relato foi muito emocionante. E no domingo ele fechou o evento falando sobre Lean. Ouvir o Samuel é algo inspirador.

Em resumo, o evento foi muito bacana. As baterias estão recarregadas novamente de energia positiva e grandes ideias. E que venha o TDC 2013.

Livro: Como evitar preocupações e começar a viver

Autor: Dale Carnegie
ISBN: 978-85-04-01801-1

Este livro foi uma imensa decepção. Foram 343 páginas de pura tortura. É eu sei. Eu poderia ter abandonado a leitura no meio do caminho, mas normalmente não costumo largar minhas tarefas no meio do caminho.

O livro tenta orientar ao leitor como se livrar das preocupações do dia-a-dia. O livro é todo narrado através de histórias “supostamente” verídicas. Eu usei o termo “supostamente”, pois o livro tentou tanto me impor que aquilo tudo era verdade que no fundo eu acabei não acreditando em nada.

Eu também não gostei da mensagem que entendi sobre o livro. Parecia que ele estava me dizendo para ser um idiota, aceitar todo revés oferecido pela vida e tocar adiante. Eu acho que devemos sim absorver as pancadas que a vida nos dá, mas ficar parado esperando o soco vir não é uma boa ideia.

O livro foi escrito na década de 30, tendo uma narrativa um pouco chata ou monótona de ler. Eu já outros livros assim e quando o conteúdo e bom eu acabo passando por cima deste problema.

Eu realmente fiquei decepcionado com a obra. Não é a primeira obra que eu leio de Dale Carnegie e realmente esperava mais.

De qualquer maneira, esta é somente minha opinião pessoal. Pra mim o livro não serve, mas deve servir pra alguém.