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

Rubyconf Brasil 2013: Conheça Bruno AbstractJ

$
0
0

Bruno Oliveira

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 7 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 JBoss hoje uma divisão da RedHat, ambas marcas muito reconhecidas no mundo Java e Open Source.

Bruno Oliveira, conhecido como AbstractJ, trabalhar no produto AeroGear da JBoss, tem DNA de ex-Caelum e colabora em projetos open source.

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 criptografia em Ruby, um assunto muito atual dado todas as preocupações com segurança da informação. Como iniciante em Ruby, você acha que conseguirei acompanhá-lo?"

AbstractJ: Criptografia pode ser um assunto bem complexo no primeiro contato e muitas vezes o uso arbitrário, ou seja, sem conhecimento prévio pode te levar pro buraco ou até pra rua. Não me considero um criptólogo ou algo do tipo, então não espere cálculos matemáticos com alto teor de complexidade, pois não será esse o objetivo, se o desenvolvedor é inexperiente, porém interessado no assunto vai se sentir à vontade.

O principal objetivo nessa RubyConf Brasil será mostrar criptografia para meros mortais, desenvolvedores como você e eu. Lógico que vou falar de conceitos básicos, modos de operação dos algoritmos, erros comuns, complexidade das APIs existentes e como Krypt pode resolver esse gap entre simplicidade versus segurança. Além disso, falaremos de temas politicamente polêmicos ou talvez incorretos, como violação de privacidade.

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

AbstractJ: Poucas pessoas sabem, mas comecei minha carreira há uns bons anos atrás como sysadmin, na época era vidrado por segurança, firewalls, DMZs, honeypots e acabei aprendendo a programar porque queria resolver problemas do meu dia a dia. No início apanhei muito, ler bastante ajudou a progredir aos poucos, a experiência prévia com segurança não foi tempo perdido e hoje é parte do meu dia a dia. Então aprenda a tirar proveito das experiências que você já teve, sejam boas ou ruins.

Não importa se você é um especialista Ruby, Rails, Java, Python, você não pode ter medo de aprender, mudar ou sair da zona de conforto, se você trabalha em um lugar onde não aprende nada, peça as contas. Nas palavras de Johnny Cash "Success is having to worry about every damn thing in the world, except money", muitas vezes você vai ter que abrir mão de grana pra aprender mais e isso não é uma exceção.

Outro conselho é: além de ler centenas de livros, faça open source. Muitos dos desenvolvedores experientes possuem seus repositórios no Github, porque não programar com eles? Acredito que a melhor forma de aprender é tendo seu código criticado por outros programadores, não importa se seu código é bom ou ruim, ser um bom desenvolvedor consiste em não ter medo de errar e além disso você perceberá uma melhora absurda no inglês.

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

AbstractJ: Acredito que com a recente polêmica sobre violação de privacidade, segurança se tornou hype nos dias de hoje, com isso toda e qualquer aplicação ou framework possui "nível militar" de segurança, é preciso ter muito cuidado e senso crítico ao usar essas tecnologias. Procure estudar a base do assunto, ficar atualizado sobre as falhas de segurança através de CVEs existentes, ficar de olho nas atualizações do NIST ou até acompanhar o desenvolvimento de bibliotecas mais recentes como libsodium e Blake2.


Rubyconf Brasil 2013: Meet Danilo Sato

$
0
0

Danilo Sato

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 continues, only 7 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 Thoughtworks one of the most recognizable brands in the international consulting market.

Danilo Sato works for Thoughtworks for 5 years, dealing with international projects and evangelizing Agile and Lean methodologies.

Don't miss his talk about Object Oriented Programming precisely at 11:00AM of the first day of the event. Let's get to know more about him:

"Your talk is about a subject that most feel like they understand but they usually don't, which is object oriented programming, can you explain what some of the requirements are to understand what you're going to talk about?"

Danilo: You probably have already heard or learned a little about Object-Orientation. That should be enough prior experience to understand my talk. Having worked with Rails might help understand some of the examples, but I won't assume you have in-depth knowledge on the subject. The topics I want to cover will be applicable to Ruby in general, as well as other OO languages you might have to work with.

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

Danilo: I think one of the easy pitfalls in our industry is to be close-minded about which technology you work with. The software industry changes all the time, new languages, libraries, frameworks are created, evolve, get in and out of fashion. It's very easy to find a comfort zone and not worry about everything else, but you risk becoming obsolete or locked-in to an old technology if you're not constantly challenging yourself to learn new things.

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

Danilo: Just like in fashion, technology evolves but also have cycles. I would say that instead of focusing only on the next new trend, there are lots to learn from studying the past. We like to learn the same lessons over and over again, and my talk will touch on a core skill that I think won't go away: software design. Investing in learning about software design is something that will pay off when you move to a new language, when you learn a new framework, and when you're building an application for your client. To me this is a core skill to invest in.

Rubyconf Brasil 2013: Meet Bruno AbstractJ

$
0
0

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 is quickly approaching it's destiny, only 6 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 JBoss, today a division of Redhat, both of them are very recognized brands in the Java and Open Source fields.

Bruno Oliveira, also known as AbstractJ, works implementing the AeroGear product for JBoss, he is a former Caelum teacher and developer and he has been collaborating in the open source community.

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 cryptography done right in Ruby, this is a very compelling subject that all programmers should understand specially considering the recent discussions around privavy and information security, can you explain what some of the requirements are to understand what you're going to talk about?"

Bruno: Cryptography can be a tough topic, specially for newcomers. Try doing it blindly without background knowledge and you can easily get into serious trouble, or even get fired. Please don't expect deep complex math or anything like that, since I don't consider myself a crypto analyst and this isn't the presentation goal. As long as you're interested in learning few tricks you'll be fine.

My main goal at RubyConf Brazil is to discuss cryptography for mere mortals, non-experts, developers like you and me. As a consequence, I'll be covering basic concepts, common mistakes, how complex the existing APIs are (with good reason) and how Krypt can potentially narrow the gap between simple and safe. I'll also be covering controversial topics like privacy on the internet in general.

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

Bruno: I've started my career as a sysadmin a long time ago, I was paranoid about infrastructure security, firewalls, DMZs and honeypots, and before I even realized I was programming to solve my day-to-day issues. The early days were hard ones, and involved a lot of reading; the nice thing is that all my early security experience came to be very useful nowadays. Take this advice: the best thing you can do is to learn from your previous experiences, whether they are bad or good.

It doesn't matter whether you're a Ruby, Rails, Java, Python programmers, the most important thing is having no fear of learning, change, or leaving your comfort zone. If you are working at a dead-end job where you stopped learning new stuff a long time ago, just quit. Quoting Johnny Cash "Success is having to worry about every damn thing in the world, except money" - it's more common than you think to give up a good salary to have the opportunity to learn and improve your skills.

Another tip is: while reading a hundred of books is important, never downplay contributing to open source projects. There's a lot of experienced programmers out there, sharing their code at GitHub, how about getting together and hacking some code? I think the best way to learn is having your code torn into pieces by others; it doesn't matter if your code is good or bad, being a good developer is about overcoming the fear of making mistakes and learning from them instead; as a bonus you'll improve your english skills.

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

Bruno: We have been living in a critical moment with the recent privacy scandals, security became a hot topic and suddenly every application or framework now has "military-grade security". Don't buy into the hype! Instead, try to understand the basics of cryptography, keep up with CVEs and NIST. Another good place to go a little deeper on the topic is to take a look on some security libraries like libsodium and Blake2.

Rubyconf Brasil 2013: Meet William PotHix

$
0
0

William Molinari

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 is quickly approaching it's destiny, only 6 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.

William Molinari, also known as PotHix, works for Locaweb building their Cloud Computing technologies.

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

"Your talk is about how you used Ruby to build Locaweb's Cloud offerings, many still think that Ruby is only good for web applications and they don't know how much it's used in the infrastructure as well, can you explain what some of the requirements are to understand what you're going to talk about?"

PotHix: This talk will show how we used Ruby and Rails to build an app to deal with hypervisors, firewalls, dhcp and some other network tasks. You don't need any advanced knowledge in Ruby. Some knowledge about Rails or networking in general will help you benefit more from the talk but it would be great to have an intermediate knowledge of Ruby and the basics of networking.

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

PotHix: Something that helped me a lot when learning Ruby was being in touch with good Ruby developers, attend to local user groups (Guru-SP in this case) and attend to online free courses (like rubylearning.org). Learn new languages and try different programming situations and exercises also helps a lot to understand the ways we can choose to solve a problem.

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

PotHix: I'm not using it directly but I believe in Docker potential to build and manage different environments. I think we'll have a lot of interesting softwares build on to of it and flynn.io looks a good example.

Rubyconf Brasil 2013: Conheça William PotHix

$
0
0

William Molinari

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 6 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.

William Molinari, conhecido como PotHix, trabalha na Locaweb nos produtos de Cloud Computing

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

"Sua palestra será sobre como vocês usaram Ruby para construir a o Cloud da Locaweb, muitos não imaginam que Ruby é usado não só pra fazer sites como também para sua infraestrutura. Como iniciante em Ruby, você acha que conseguirei acompanhá-lo?"

PotHix: Essa palestra vai mostrar como implementamos o cloud da Locaweb usando Ruby e Rails, como executamos algumas tarefas de rede, falamos com o virtualizador, firewalls, dhcps e etc. Você não vai precisar de nenhum conhecimento avançado de Ruby, Rails ou redes para aproveitar a palestra, mas seria legal ter um nível intermediário de Ruby e o básico de redes.

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

PotHix: Uma coisa que me ajudou bastante a conhecer mais sobre Ruby foi estar em contato com bons programadores Ruby, participar de grupos de usuários locais sobre a linguagem (o Guru-SP, no caso) e fazer cursos gratuitos online (como foi o caso do rubylearning.org). Outra coisa que contribuiu bastante foi experimentar linguagens e tipos de programação diferentes mesmo que superficialmente, pois isso ajuda a conhecer diferentes tipos de problemas e entender as melhores soluções para cada caso.

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

PotHix: Apesar de eu não estar utilizando diretamente a ferramenta, eu acredito muito no potencial que o Docker tem para gerenciar ambientes, e sinceramente acho que em breve teremos vários outros softwares interessantes construídos sobre ele, como é o caso do flynn.io.

[Off-Topic] Estimativas são Promessas. Promessas devem ser cumpridas.

$
0
0

Navegando no Quora, encontrei uma pergunta simples mas interessante "Engenharia de Software: Qual a coisa mais difícil para um engenheiro de software". É um assunto que reflito a respeito há muitos anos, constantemente. Respondi em inglês mas acho que é importante eu republicar uma versão em português aqui também.

Eu sou um engenheiro de software e o que eu vejo depois de 20 anos de experiência em diferentes empresas, mercados, equipes é que praticamente todo engenheiro de software que conheci começa com a premissa que "código" é o objetivo e a solução de todo problema.

A verdade é que no mercado em geral (não estou falando dos casos excepcionais de pesquisa e desenvolvimento ou acadêmico) problemas de software não encontram solução em software. Esta é a primeira e a mais difícil coisa que todo engenheiro de software sofre para entender e briga contra isso.

Francis Underwood

Linda Vasquez: Eu sei que ele te fez uma promessa, mas as circunstâncias mudaram.

Francis Underwood: A natureza das promessas, Linda, é que elas se mantém imunes a mudanças de circunstâncias.

-- House of Cards

Um aspecto que acredito que muitos citem como a coisa mais difícil é "estimar", porque é tão difícil chegar em estimativas corretas. E esse é o problema: a frase em si é errada e confunde.

Estimativas, por definição, nunca poderão ser "corretas", caso contrário diríamos "previsões". E é exatamente porque são duas palavras separadas. Numa previsão as variáveis são determinadas e conhecidas, o caminho é previsível e automático, é basicamente o cenário de laboratório: "dadas as condições ideais de temperatura e pressão, no vácuo, considerando atrito zero, um carrinho de brinquedo se movimentando a uma velocidade constante de 10 metros por segundo, por 10 segundos, vai percorrer 100 metros." E estimativas?

Fora do laboratório, temos estimativas, e estimativas são PROMESSAS.

Promessas são feitas para serem cumpridas. Uma promessa não se resolve sozinha. Você precisa se esforçar deliberadamente para atingí-la e manter sua palavra. Da mesma maneira, uma estimativa é a mesma coisa: você estima e então precisa trabalhar duro para cumprir essa promessa.

"Mas o gerente/cliente/investidor/chefe fica constantemente me pressionando para adicionar mais coisas, fazer mudanças o tempo todo, quebrando minha concentração com problemas irrelevantes o dia inteiro."

Sim, eles fazem isso, e eles vão continuar fazendo isso, ontem, hoje e sempre. E a primeira coisa que a maioria das pessoas faz é se tornar defensiva, não querendo se comprometer, então eles apenas decidem não dar estimativas ou dar estimativas fora de proporção para ter certeza que qualquer coisa "extra" possa caber. Esse não é um bom comportamento padrão.

Se você fizer uma promessa para sua filha de chegar na apresentação dela na escola, por exemplo, e você fracassa em cumprir essa promessa, chegando 2 horas depois de ter terminado. Esse fracasso é seu e unicamente seu. Não foi o trânsito, não foram reuniões inesperadas no trabalho, não foi o tempo ou qualquer outra coisa. Você fez a promessa, você não falhou em prever os acidentes de percurso, você fracassou em preemptivamente sair antes, se adiantar aos problemas, e deixar espaço para acidentes inesperados. Você deixou tudo para a última hora e saiu no último minuto e, claro, shit happens.

Estimativas é a mesma coisa: você disse um número, sem comprometimento, sem senso de responsabilidade, e não fez nada para atingir esse objetivo além de sentar e fazer código. Você não encontrou explicações para os problemas. E dizer uma vez, do seu jeito, não implica que a outra ponta entendeu, quem inicia a comunicação tem a responsabilidade de encontrar o meio para a ponta final receber o recado, caso contrário a comunicação não aconteceu. Comunicação não é dizer, é ser entendido. E ser entendido é responsabilidade de quem comunica.

Então você fracassou em se comunicar, em gerenciar seu próprio tempo, em auxiliar seus pares dos problemas. Era sua responsabilidade, fazer código era o menor dos problemas.

Ter senso de responsabilidade é exatamente a segunda coisa mais difícil que todo engenheiro de software enfrenta, pois se a premissa inicial era que ele só era responsável por "escrever código", ele não enxerga como uma falha sua não ter sido entendido na comunicação falha. Portanto eles nunca assumem a responsabilidade pelo fracasso, principalmente porque é tão mais fácil culpar todo o resto menos ele mesmo. E isso é precisamente porque a primeira coisa mais difícil que mencionei acima é a premissa errada que seu único objetivo na vida é escrever código, que todos os problema se resolvem com código.

Isso não é verdade em software e não é verdade em muitas outras áreas, seja você um músico, um cozinheiro, um construtor. Claro, como profissionais de prática, é esperado que você seja o melhor na sua arte. Mas isso é o mínimo do mínimo da fundação básica e não há nada excepcional em ser tecnicamente bom, não importa quão impressionante sua capacidade técnica possa parecer. Não é nem um pouco importante que você consegue escrever o código mais absolutamente perfeito e elegante se está escrevendo software para o problema errado. Ou se compôs a música clássica à la Bethoven mais perfeita para um trabalho que era uma música para uma festa de aniversário de crianças. Das duas uma, ou você não aceita trabalhos para festas infantis, ou você escreve a melhor música pop que puder. Se você fica, ou você finaliza seu trabalho com qualidade excepcional e atingindo as expectativas ou você assume a incapacidade e vai embora, não ficando no caminho de quem realmente pode resolver o problema que você não pôde.

A única coisa que qualquer um que oferece um serviço para outras pessoas precisa entender é que o objetivo é implementar sim a melhor solução possível, mas para o conjunto correto de problemas. E o entendimento que a coisa mais difícil é justamente encontrar esse conjunto correto de problemas. Os clientes vêem até nós, profissionais, justamente porque não sabem também. E como profissionais é nossa responsabilidade ajudar a encontrar esses problemas, se estiver sob nossa capacidade realizar uma promessa, e manter essa promessa gerenciando qualquer obstáculo que apareça no caminho.

Parece simples dizer assim, mas mesmo os mais experientes engenheiros de software falham em entender essa simples verdade e muitos conseguem se safar quebrando promessas usando diversos truques para esconder a verdade.

Então aprendam a primeira e mais difícil verdade do mundo: Software normalmente não é resolvido com Software, é resolvido com capacidades Humanas. Numa distribuição de Paretto eu diria que 80% de todo problema de software somente é resolvido quando você investe aqueles 20% restantes em Comunicação, Articulação, Pensamento Claro e Racional, quebra Ambiguidades, Negociação, Compromisso.

Complemento dizendo que parece, então, mais fácil nunca fazer promessas. Significa nunca se comprometer. Significa nunca ser um profissional pois é exatamente isso que diferencia um amador ou hobista de um profissional: fazer promessas e trabalhar para cumprí-las. Outra coisa que de fato acontece é você não cumprir seu lado da promessa porque ela dependia que o cliente, chefe, etc cumprisse primeiro o seu lado da promessa. Uma troca mútua de promessas é exatamente o motivo de porque existe um árbitro chamado Justiça Legal e o instrumento que define duas promessas tem um nome: chama-se contrato.

Promessas

Dito tudo isso, é possível cumprir todas as promessas? Não, infelizmente não é. Mas é nossa responsabilidade como profissionais estar sempre em busca desse ideal, não criar maneiras de evitá-las.

Já falei mais sobre o assunto do que acredito ser um profissional num post de 2011 entitulado "[Off-Topic] Opiniões, Verdades, Democracia e Ética"

Rubyconf Brasil 2013: Lembrando de _Why. Engenharia vs Arte

$
0
0

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 5 dias para o grande dia! #ZOMG

Segunda feira, dia 19 de Agosto, completou-se exatamente 4 anos da "morte" do personagem _Why, The Lucky Stiff. Nem todos os mais novos na comunidade Ruby vão se lembrar dele, mas os mais experientes certamente ainda tem lembranças do seu trabalho e do choque de sua "morte".

Why

“quando você não cria coisa, você se torna definido pelos seus gostos em vez de suas habilidades. seus gostos apenas reduzem e excluem as pessoas. então crie.”

― Why The Lucky Stiff

Muitos dos melhores rubistas do mundo se influenciaram com seu trabalho e em particular com seu magnum opus, "Why's Poignant Guide to Ruby", certamente o mais original livro para aprender uma linguagem de programação já criada. E também existe uma versão em português, traduzida pela comunidade com a iniciativa do Carlos Brando alguns anos atrás.

Somos todos engenheiros no mundo de programação, por isso as atitudes de Why são tão contrastantes com nosso jeito de pensar. Ele encarou programação literalmente como arte. Um engenheiro cínico não considera seu trabalho como arte, mas programação é certamente uma forma de expressão.

Muitos engenheiros, especialmente os comprometidos em colaborar com projetos open source se sentiram mal quando um autor de projetos open source resolveu deliberadamente retirá-los do ar sem aviso prévio. É uma coisa impensável para qualquer um do mundo open source. Muitos o odeiam até hoje por causa disso.

Eu por outro lado, pessoalmente acredito que entendo bem porque ele fez o que fez. Alguém que compreende o modo de pensar Individualista e é contra a escravidão do Coletivismo e Altruísmo certamente poderia compará-lo ao icônico personagem Howard Roark, do romance The Fountainhead, de Ayn Rand. Eu escrevi sobre isso no artigo em inglês "_Why, Ruby Dramas, and Dynamiting Courtlandt". Muitos que o odeiam acham que ele não tinha o "direito" de apagar seus próprios projetos. Apesar de entender isso, do ponto de vista dele, sim, ele tinha todo o direito de fazer o que quisesse. Quando outros decidiram colaborar ou usar esses projetos, eles o fizeram entendendo que apesar de poderem "usá-los" ele não retiraram de _Why a sua "propriedade", e com nossa propriedade podemos fazer o que bem entendermos, inclusive dinamitá-lo. Ninguém tem o direito de retirar nossa propriedade das coisas que criamos, e certamente não tem o direito de escravizar nossas capacidades em nome de um "bem maior".

Para mim, na verdade, o fato dele ter deletado seu trabalho foi a maior lição a quem quer se tornar um artista: um artista não faz arte que as pessoas vão gostar, ela faz arte que ela gosta. Se as pessoas vão gostar ou não é uma consequência secundária. Ninguém deve fazer nada para os outros, mas para si. E em fazendo o melhor para si, automaticamente os outros talvez vão se beneficiar disso. Essa é a essência da arte.

Engenheiros tem a mania de calcular "valor" como algo tangível e mensurável como "horas de programação", "horas de colaboração em comunidades", "quantidade de código gerado", "quantidade de pessoas usando seus projetos". Só que "valor" é na sua essência o quanto alguém está disposto a pagar para usá-lo. Para um engenheiro é um conceito alienígena pensar que um pedaço de papel com um punhado de tinta possa valer milhões de dólares enquanto suas horas de programação valem poucas centenas de reais. Pior ainda, bons trabalhos de arte se valorizam quanto mais ficam velhos enquanto seu código desvaloriza a cada dia. Valor é muito mais do que horas de trabalho.

Independente dos que ainda o adoram e aqueles que o odeiam, é inquestionável que _Why deixou sua marca. Uma comunidade tem muita sorte de poder contar com uma mitologia. A maioria das mitologias do mundo da programação são muito ruins. No máximo estamos falando do criador de uma linguagem, do criador de um framework. Eu acho isso muito pouco. Os nomes realmente relevantes são aqueles que mudaram ou influenciaram nosso modo de pensar de alguma forma, pessoas como Turing, Backus, McCarthy, Ritchie e assim por diante definitivamente fazem parte do círculo maior da nossa mitologia.

Dentro de nossa pequena comunidade, _Why foi o que definiu Ruby com palavras como "elegância", "criatividade". Hoje já tiramos certas coisas como "óbvias", "rotineiras", mas outrora elas eram a forma "errada" ou mesmo ignoradas. Sejam microframeworks, DSLs amigáveis, toolkits gráficos, geradores de código, geradores de blogs estáticos, linguagens de template. Veja o espelho dos seus projetos no whymirror. A maioria concorda que a qualidade técnica do seu código não é das melhores e nem deve ser copiada, mas as interfaces e APIs certamente foram grandes inspirações pra projetos que usamos até hoje como Psych, Sinatra, Nokogiri, etc.

A comunidade Ruby possui uma mitologia que fica cada vez mais rica, e _Why seria o Zeus dessa hierarquia, junto com nomes com o próprio Matz, Jim Weirich. Um engenheiro segue procedimentos, faz métricas, estabele "melhores práticas" e evolui um pequeno passo de cada vez. Um artista pega tudo isso e cria o caos, gira do avesso e, às vezes, damos um salto ordens de grandeza maior e mais rápido. É o que precisamos fazer mais e mais: criar, não apenas copiar e evoluir mudando pequenas coisas.

O programador brasileiro Diogo Terror escreveu um artigo em inglês para a revista Smashing Magazine em maio de 2010 chamado _Why: A Tale Of A Post-Modern Genius. Vale a pena ler para entender um pouco mais dessa história. Existiu também um rumor que _Why poderia estar retornando, em Janeiro deste ano muitos publicaram indícios sobre isso mas até hoje nada se concretizou e continua recluso e incomunicável.

Então, eu publiquei outro artigo em inglês chamado _Why Documentary at Rubyconf 2012, Denver em Setembro de 2012. O criado do documentário sobre o _Why comentou no meu blog e lá foi feito o convite:

Convite

Aliás, daí vocês podem ver que a data da Rubyconf Brasil é definida com muita antecedência.

Finalmente, Kevin Triplett, da Abraxis Productions e eu vamos realizar a abertura da Rubyconf Brasil 2013 com o documentário sobre o _Why, que eu estou traduzindo para o português neste exato momento a partir do timing realizado pela comunidade japonesa que organiza a conferência RubyKaigi do Japão. Não perca a abertura do evento exatamenteàs 9 da manhã do dia 29 de Agosto, quinta-feira. Acorde cedo!

SRT

Nosso trabalho do dia a dia é estressante, é pesado, é cinza e por muitas vezes desinteressante. Ninguém pode nos motivar a não ser nós mesmos, e histórias como do _Why sempre servem de inspiração para fazer as coisas diferentes. Pois como diria outra grande inspiração:

Steve Jobs

Rubyconf Brasil 2013: Conheça Carlos Galdino

$
0
0

Carlos Galdino

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. A contagem regressiva está chegando ao fim! Só 3 dias! Ainda dá tempo, inscreva-se agora!

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 Plataformatec consultoria brasileira especializada em Ruby on Rails que é conhecida principalmente por projetos open source como Devise e SimpleForms. Carlos Galdino é desenvolvedor na Plataformatec.

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

"Sua palestra será sobre Rubinius, uma das implementações alternativas de 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?"

Galdino: Eu diria que o requisito mais importante é ser curioso sobre como as coisas funcionam por debaixo dos panos, caso contrário a palestra seria chata. Eu vou dar uma visão geral como uma implementação de uma linguagem, nesse caso Rubinius sendo a implementação e Ruby a linguagem, quais conceitos estão presentes em uma implementação e como eles estão relacionados. Se você sempre quis saber o que acontece com o código que você escreve depois que escreveu, você deveria assistir a palestra.

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

Galdino: Nunca deixe de aprender. Sempre seja curioso sobre tudo e como elas funcionam. Também acho extremamente importante ter uma mentalidade mais aberta, você não deve ler e aprender apenas sobre Ruby ou Rails. Tente ler sobre assuntos completamente diferentes daqueles que você usa no seu dia-a-dia. Isso irá te ajudar quando for tomar decisões pois você terá diferentes perspectivas.

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

Galdino: Programação funcional. Todos os dias estamos vendo mais pessoas animadas e falando sobre programação funcional. Chegamos em um ponto onde não se pode mais ignorar concorrência e paralelismo e linguagens funcionais tornam mais fácil lidar e até evitam alguns dos problemas comuns que aparecem quando lidamos com esses conceitos em linguagens como Ruby, Java e outras.


Rubyconf Brasil 2013: Meet Carlos Galdino

$
0
0

Carlos Galdino

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 is reaching its end! Only 3 days to go! Register while there is still time!

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 Plataformatec a Brazilian consulting shop specialized in Ruby on Rails and known for famous open source projects such as Devise and Simple Forms. Carlos Galdino is a software developer at Plataformatec.

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

"Your talk is about Rubinius, one of the alternative implementations for Ruby, can you explain what some of the requirements are to understand what you're going to talk about?"

Galdino: I'd say that the most important thing the audience should have is to be curious about how things work under the hood, otherwise it'd be boring for them. I'm going to give an overview about how an implementation of a language, in this case Rubinius as the implementation and Ruby as the language, which concepts are present and how they're tied up. So, if you ever wanted to know what happens to the code you write after writing it, you should attend the talk.

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

Galdino: Never stop learning. Always be curious about things and how they work. Another thing that I think is extremely important is to be open-minded, you shouldn't only read and learn about Ruby or Rails. Try to read about completely different subjects, subjects that you might don't use in a daily basis. It'll help you when deciding something because you'll have different perspectives.

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

Galdino: Functional Programming. After being the next big thing for decades, I think its time has finally come. You see everyday more and more people excited and talking about it. We've reached a point where you can't ignore concurrency and parallelism, and functional languages make easier to deal and even avoid some common problems that appear when dealing with such things in languages like Ruby, Java and others.

Rubyconf Brasil 2013: Conheça Luis Cipriani

$
0
0

Luis Cipriani

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. A contagem regressiva está chegando ao fim! Já é depois de amanhã! Ainda dá tempo, inscreva-se agora!

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 o Twitter, oras, acredito que dispensa apresentações. Luis Cipriani recentemente se juntou a eles como Partner Engineer in Brasil, depois de uma longa estada na área de pesquisa e desenvolvimento da Editora Abril. É um especialista em diversas tecnologias mas em particular sobre APIs e infraestrutura.

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

"Sua palestra será APIs e infraestrutura, uma coisa que a maioria dos desenvolvedores web não conhece direito embora devesse, poderia explicar quais são os requerimentos que ele deve entender o que você vai apresentar?"

Cipriani: HTTP Caching é um assunto que todo desenvolvedor Rails acaba tendo que lidar um dia, a parte boa disso é que você pode aprender e ficar experiente de forma incremental, aplicar primeiramente os Headers de HTTP básicos é suficiente para obter bons resultados e à medida que você precisar de um controle maior sobre o modo como os recursos são cacheados ou expirados, sempre há técnicas avançadas para aprender. Porém, eu recomendo que pelo menos um conhecimento básico do protocolo HTTP para aproveitar melhor os insights que vou apresentar.

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

Cipriani: Primeiro e mais importante, não acredite que você seja um ótimo desenvolvedor, mesmo que alguém te disser isso. Sempre se sinta inconfortável por não ter conhecimento profundo sobre alguma tecnologia ou linguagem e reserve um tempo para tentar coisas novas. É importante também aprender a contribuir e absorver com atenção os feedbacks que a comunidade de desenvolvedores envia para você. Faça algo útil para você ou para alguém, algo que resolva um problema real, isso ajuda a manter a motivação para continuar a fazer mais projetos úteis.

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

Cipriani: O mundo ainda tem muitas dificuldades em lidar com a massiva quantidade de informação que está sendo produzida por empresas, redes sociais, sensores, etc. Então acredito que qualquer tecnologia ou iniciativa que se propõe a ajudar a resolver esse problema vai ganhar muita atenção ou investimento pelo mundo afora. Dentre essas tecnologias estão algumas áreas da Ciência da Computação como Web Semântica, Aprendizado de Máquina, Recuperação e Gerenciamento de Informação e Sistemas de Base de Dados Distribuídos.

Rubyconf Brasil 2013: Meet Luis Cipriani

$
0
0

Luis Cipriani

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 is reaching its end! Only 2 days to go! Register while there is still time!

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 Twitter, which I believe needs no introduction. Luis Cipriani recently joined them as Brazil Partner Engineer, after a long run at Abril Publishing in its R&D department. He is an specialist in many technologies but particularly APIs and web infrastructure.

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 APIs and infrastructure, stuff that most web developers don't fully understand although they should, can you explain what some of the requirements are to understand what you're going to talk about?"

Cipriani: HTTP Caching is a subject that all Rails developers will need to deal some day, the great thing about it is that you can learn and get experience incrementally, applying the basic HTTP headers is enough to have a relevant result and as you want to have more control over the way your resources are being cached or expired, more advanced techniques are just there to learn. But I recommend that the audience have at least basic knownledge in HTTP protocol to enjoy more the other insights I'll show.

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

Cipriani: First and most important, don't believe that you are a great developer, even if someone told you so. Always feel unconfortable about not having a deeper knowledge about some technology or language, and reserve some time to try new things. Also, learn to contribute and listen carefully to feedbacks from the community. Make something useful for you or someone else that solves a real problem, this gives motivation to continue doing great stuff.

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

Cipriani: The world is still having lots of difficulties to deal with the massive stream of information being produced by companies, social networks, sensors, etc. So I think that any technology or general initiative that proposes itself to help to solve this problem will get a lot of attention and investiments around the world. And among these technologies are some areas of Computer Science such as Semantic Web, Machine Learning, Information Management/Retrieval and Distributed Database Systems.

Rubyconf Brasil 2013: Conheça Halan Pinheiro

$
0
0

Halan Pinheiro

As inscrições pelo site já se fecharam mas você ainda poderá se inscrever no local do evento. A contagem regressiva no fim! Já é amanhã, cheguem bem cedo! O evento começará pontualmente às 9h mas chegue antes para o cadastramento.

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 Codeminer 42 empresa de desenvolvimento de software especializada em Ruby on Rails, que presta serviços para clientes grande ou pequenos, nacionais ou internacionais.

Halan Pinheiro é desenvolvedor na sede de Natal da Codeminer 42. Além de ser especialista em Rails também é um excelente desenvolvedor Javascript.

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

"Sua palestra será sobre porque e como realizar testes automatizados com Javascript, poderia explicar quais são os requerimentos que ele deve entender o que você vai apresentar?"

Halan: Espero que uma grande maioria interessada em minha apresentação já faça testes automatizados em seus projetos no dia-a-dia. No Rails normalmente utilizamos Rspec para isso. Saber de testes e Rspec não será necessariamente um pré-requisito, mas facilitará bastante o entendimento do tema que estou abordando. Apesar disso, DON'T PANIC, eu vou explicar com calma o que você precisa aprender.

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

Halan: Primeiro, é preciso estudar. Segundo, não seja como eu, seja melhor. Utilize uma referência mas não se limite a ela. As referências são importantes, elas nos guiam quando não sabemos qual caminho seguir, porém, desenvolver capacidades e caminhos próprios é fundamental. Afinal, você não pretende ser exatamente igual a ninguém, e sim um indivíduo único em suas experiências e capacidades. Terceiro, utilize seus pontos fracos como guia. Quando alguém te aponta um defeito, isso pode te servir como uma boa referência de 'onde' ou 'como' melhorar. Quando ninguém nos aponta defeitos, não sabemos o 'onde' ou 'como' melhorar e estagnamos naquele ponto. Saber receber esse tipo de feedback, lidar com ele e transformá-lo em meta para melhorias a curto prazo é fundamental para se crescer em qualquer aspecto, seja ele moral, intelectual ou ético.

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

Halan: Todo mundo que trabalha com web deve ficar atento a essa nova fase de navegadores, da qual estamos nas vésperas. Tem muita coisa nova surgindo, inclusive novos padrões, o que é uma questão bem delicada.

Paralelo a isso, o desenvolvimento web em geral está se tornando cada vez mais ágil e preciso. As ferramentas de teste, integração contínua, qualidade de software entre outras, estão surgindo a todo momento, e agregar isso em sua rotina de trabalho com certeza trará melhores resultados e te ajudará a crescer em qualidade no sentido geral.

Rubyconf Brasil 2013: Conheça Tiago Bastos e Eduardo Gurgel

$
0
0

Tiago Bastos

Eduardo Gurgel

As inscrições pelo site já se fecharam mas você ainda poderá se inscrever no local do evento. Estamos já no primeiro dia de evento! Cheguem cedo no segundo dia (amanhã)!

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 Codeminer 42 empresa de desenvolvimento de software especializada em Ruby on Rails, que presta serviços para clientes grande ou pequenos, nacionais ou internacionais.

Tiago Bastos é um dos sócios da Codeminer 42 e fica na sede de Fortaleza. Ele é desenvolvedor a muitos anos. Eduardo Gurgel também é Miner e é mestre em Ciências da Computação com pesquisa na área de paralelismo e sistemas distribuídos.

Não perca a palestra deles precisamente às 11:00 do segundo dia do evento. Vamos conhecer um pouco mais sobre eles:

"Sua palestra será sobre Erlang, Elixir e mensagens assíncronas, poderia explicar quais são os requerimentos que ele deve entender o que você vai apresentar?"

Tiago/Gurgel: Tem que ter ouvido falar um pouco de HTTP, sockets e websockets. É uma talk bem densa mas vamos explicar todas as partes.

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

Tiago: Leia código e sempre assuma que você tem mais a aprender. Não acredite em coisas sem evidência, faça experimentos, você tem que tentar. Tem por ai um monte de gente fazendo coisas ótimas, tente entendê-las e melhora-las.

Gurgel: Eu tento me imaginar como um desenvolvedor-sempre-em-aprendizado. Tente revisitar conceitos e definições em todas as oportunidades e pergunte o porquê? Esse é meu caminho para evitar erros e deve ajudar todos em questões de desenvolvimento.

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

Tiago/Gurgel: Certamente, nós compartilhamos a opinião de que Elixir será parte do nosso stack de desenvolvimento num futuro próximo. A abordagem de Elixir é excelente. Programação funcional pode parecer estranha no começo mas te impressiona quando você entende.

Rubyconf Brasil 2013 - Fechamento

$
0
0

Este foi um longo processo. Todo ano gasto um bom tempo organizando o melhor evento possível. Antes de mais nada agradecimentos aos grandes amigos da Locaweb que nunca me decepcionam na logística.

Time Locaweb

Mais uma vez agradeço imensamente aos grandes palestrantes que vieram de todos os cantos do mundo compartilhar seus conhecimentos e experiências.

Palestrantes

E sempre agradecimentos às dezenas de empresas que de uma forma ou de outra colaboraram para que a Rubyconf fosse possível. Vale lembrar que todos os palestrantes que vieram de fora do Brasil vieram patrocinados por suas próprias empresas.

Suporte

  • novamente agradecimentos ao apoio da Eventioz, que logo após o evento também anunciou seu merge com a grande Eventbrite.

  • finalmente, agradecimentos aos patrocinadores Locaweb, Globo.com, Eventials, Eventioz, The Kumite. Não só como suporte, mas efetivamente investimento e colocando a mão na massa para fazer a conferência realmente acontecer.

TL;DR

Todo ano é uma maratona de obstáculos conseguir realizar a Rubyconf Brasil. Fazemos isso há 6 anos, estamos ficando cada vez melhor a cada ano e mesmo assim nunca fica mais fácil.

Para dar uma idéia, nos últimos 3 anos realizamos o evento no 5o andar do Shopping Frei Caneca. Um espaço onde conseguíamos montar duas salas com capacidades aproximadamente de 600 da sala 1 e mais de 200 na sala 2. No ano passado já estava claro que não iria mais caber. Por isso durante o evento do ano passado já havíamos fechado que subiríamos para o 6o e 7o andar, no Teatro Frei Caneca, com capacidade para mais de 800 pessoas no teatro propriamente dito e pelo menos 300 pessoas na segunda sala. Fechamos as datas há 1 ano atrás.

Mesmo assim, houve desencontros de comunicação e agendas dos locais de evento e acabamos competindo no dia 29/8 com o evento The Next Web e no dia 30/8 com a QCon SP. Vamos continuar tentando no ano que vem não ter esse tipo de conflitos mas não podemos influenciar as datas que outros eventos escolhem. Por isso, se estiverem pensando em montar eventos por volta de Agosto ou Setembro de 2014, nos dêem um toque para que possamos nos alinhar.

Aliás, é possível que ano que vem o evento mude novamente de lugar. Depois de 4 anos no Frei Caneca, estamos chegando ao limite de sua capacidade e infraestrutura (sua infraestrutura antiga simplesmente não está aguentando nosso equipamento). Um candidato forte vai ser testado nos proximos dias e se for escolhido será próximo à região de Pinheiros/Vila Madalena, ainda próximo ao metrô. Quando estiver confirmado aviso nas redes sociais.

Outros problemas envolveram a seleção de palestrantes. No começo do ano abri o Call for Papers, que trouxe aproximadamente 100 propostas de palestras que precisavam preencher um máximo de 25 slots. Nada mal ter 4 propostas para cada 1 slot.

Eu sei dos últimos anos (e este ano se reconfirmou) que mais da metade do público vem no evento pela primeira vez. Não é uma estatística científica, mas se for olhar pelo evento, poderíamos dizer que a comunidade Ruby do Brasil aumenta perto de 50%, cumulativamente, todo ano. E isso significa que muitos ainda são iniciantes, misturados a pessoal mais antigo. Por isso a programação precisa balancear com conteúdo que não aliene nenhum dos dois lados. Novatos, experimentes, primeira vez, frequentadores assíduos. Significa trazer palestrantes reconhecidos, palestrantes iniciantes, temas avançados, temas menos complicados.

Outra tendência é eliminar palestras não-técnicas, altamente tendenciosas em auto-ajuda. Muitos eventos de TI estão indo muito nessa direção e no começo eu também fazia isso. Agora, tirando os keynotes de abertura e fechamento do evento, tivemos 22 palestras especificamente de assuntos técnicos para um público que prima pelo conteúdo técnico. Mais do que isso, eu preciso fazer escolhas como por exemplo dar espaço pra muitas palestras relacionadas a Ruby mas que não são sobre Ruby (Javascript, Elixir, Vagrant, por exemplo). Por isso mesmo a platéia da Rubyconf é quase incompatível com qualquer outro evento de TI tradicional, e é por isso que o desafio de uma nova Rubyconf sempre é maior.

Nesse meio do caminho muitas coisas acontecem. Bryan Helmcamp, do Code Climate, teve que cancelar de última hora por problemas pessoais. Kevin Barnes, que viria pelo Github, se desligou do Github a menos de uma semana do evento. Cauê Guerra que vinha pela 500px teve que cancelar quando se mudou pra Codified. O mercado é dinâmico, as pessoas entram e saem de empresas o tempo todo e como as viagens internacionais são combinadas com as empresas, é realmente complicado. Sabendo disso significa que eu preciso ter o tamanho certo de overbooking, já sabendo que 3 ou 4 cancelamentos semanas antes do evento é algo normal em todos os anos.

Outro problema é aumentar o tamanho do local do evento e depois descobrir que haverá eventos concorrentes. Só porque um ano tivemos um grande público, sabendo que esse público se renova todo ano, eu preciso buscar esse novo público o tempo todo. Ano passado foram mais de 800 pessoas, esse ano foram cerca de 900 pessoas. É um trabalho de formiguinha, literalmente buscando uma pessoa de cada vez. Pra isso, por exemplo, servem meus blog posts, minhas palestras no interior do Brasil, de faculdade em faculdade, eventos de TI em geral, material online, artigos em outros sites, etc. É um enorme trabalho buscar públicos em todos os cantos do país. Especialmente porque tirando pessoas como Nando Vieira, empresas como Plataformatec e grupos como o Guru-SP, praticamente mais ninguém está gastando sola de sapato para buscar público. Fica a dica: precisamos de mais ajuda. É um trabalho desgastante fazer isso sozinho.

E durante o evento, mil coisas dão errado. Desde saber de última hora que teríamos retro-projetores de última geração mas que para tirar proveito precisaríamos modificar todos os slides de todas as palestras, detalhes de cenografia fora do lugar, problemas com a eletricidade antiquada do prédio, coordenar os palestrantes, etc. E sobre internet: alguém tem idéia de quão complicado é manter hotspots com capacidade para muito mais de 1000 dispositivos online ao mesmo tempo? É um conjunto de equipamentos que custa dezenas de milhares de dólares e exige um link dedicado com uma antena no topo do prédio só pra isso. Isso sem falar de cenografia, tradução simultânea nas duas salas para as duas línguas, coffeebreak. A intenção é que o espetáculo seja o mais perfeito possível, e para isso não importa quantos corpos vão sobrando nos bastidores, "the show must go on".

Este foi só um resuminho para dar uma idéia do que é um Rubyconf Brasil. Este ano foi maior que o ano passado. Ano que vem vai ser ainda maior que este ano! Nos vemos novamente todos juntos daqui um ano!

[Heroku Tips] Problemas iniciais com Rails 4 no Heroku

$
0
0

Se ainda não leu, dê uma olhada sobre o que já postei como dicas de Heroku e minha opinião sobre o serviço.

Recentemente tentei subir um projeto Rails 4 bem simples no Heroku e encontrei problemas logo na primeira tentativa de deploy. O problema é o seguinte: a forma mais aceita de configurar uma aplicação é usar variáveis de ambiente (veja projetos como o dotenv-rails). No primeiro deploy essas variáveis não estão disponíveis, em particular o DATABASE_URL. Na task assets:precompile não deveria haver nada na inicialização que dependesse de conexão ao banco, mas algumas gems ainda não estão corrigidas dessa forma, em particular duas com esse bug já conhecido são o active_admin e o acts-as-taggable-on.

No final, a forma mais simples para resolver isso por enquanto é fazer o seguinte antes do primeiro deploy:

12
heroku labs:enable user-env-compile
heroku config:add DATABASE_URL=$(heroku config | awk '/HEROKU_POSTGRESQL.*:/ {print $2}')

Leia a documentação dessa funcionalidade user-env-compile entendendo que ela não é a forma mais correta, é apenas um facilitador enquanto todas as gems não estão da forma correta.

Rails 12 Factor

Rapidamente para não esquecer, no caso de apps Rails 4 não deixe de acrescentar o seguinte na sua Gemfile:

1
gem 'rails_12factor', group: :production

Em particular é importante para logging correto e servir assets estáticos, veja no Github deles para mais informações.

Migração de MySQL para PostgreSQL

Outro assunto que deve ser constante quando se considera mudar pra Heroku é ter que usar o Heroku Postgres (que é uma ótima opção). Mas muitos projetos, principalmente mais antigos, devem ter começado em MySQL.

A primeira coisa a fazer é verificar se você tem muitos SQL exclusivos de MySQL, funções e coisas do tipo. Se você usar ActiveRecord Relations padrão, não deveria ter nenhum problema.

O segundo problema é migrar os dados de um banco para o outro. Eu procurei várias opções mas a maioria é antiga e não funciona direito, a melhorzinha que achei foi uma task Rake. Ela tinha alguns probleminhas de usar API deprecada mas resolvi neste aqui:

Basta alterar seu config/database.yml para ter o seguinte:

123456789101112
development:adapter: postgresqldatabase: legaltorrents_developmentusername: fredpassword: passwordhost: localhostproduction:adapter: mysqldatabase: legaltorrents_productionusername: fredpassword: password

Coloca o script como lib/tasks/convert.rake e executa rake db:convert:prod2dev.

Depois disso ainda precisa atualizar as sequences de primary key do PostgreSQL desta forma:

1
ALTER SEQUENCE users_id_seq restart with (select max(id)+1 from users) 

Isso deve ser feito para cada tabela que você tem. Se precisar atualizar em produção no Heroku, execute heroku run rails console e execute assim:

1
ActiveRecord::Base.connection.execute("ALTER SEQUENCE users_id_seq restart with (select max(id)+1 from users) ")

Não esqueça que você pode fazer dumps do banco de dados de produção, colocar num banco de dados local para testar e tudo mais e se quiser pode gerar um dump local e restaurar de novo no Heroku. Leia a documentação deles sobre PG Backups.

Gerar um dump local é simples:

1
pg_dump -Fc --no-acl --no-owner -h localhost -U vagrant my_db > mydb.dump

E restaurar um dump do Heroku no seu banco local também:

1
pg_restore --verbose --clean --no-acl --no-owner -h localhost -U vagrant -d my_db b078.dump

Isso deve resolver a maioria dos problemas.


[Off-Topic] #noEstimates Debunked

$
0
0

Update: One thing I forgot to mention. If you didn't want to read all this or if you disagree altogether. Ask yourself: you don't want due dates. So are you willing to give up your salary due date as well? Why can't you estimate what to deliver and your client has to pay you regardless? Let's make this even: you do #noEstimates if, and only if, you are willing to #noSalary. Your employer shaw withhold your payment until you deliver, and in this scenario your payment must be depreciated the longer it takes. Unfortunately labor law doesn't allow that. But it would be an interesting scenario.

There's been a lot of people currently talking about #noEstimates. I've read most of the arguments in its favor and you can Google it easily enough so I won't make any extensive references to any of them. The gist of it is that estimates will never be good enough, the more specification and planning you do seems to never increase the quality of the estimates, specially because in a dynamic market specification change too often and the more estimation efforts you do, the more the waste. And because estimates seems to be such a waste why not get rid of them altogether?

Feels like a noble idea, specially for software developers. Software is maleable, it's abstract, it just feels like it doesn't fit traditional notions of project management. And while we are at it, why not get rid of the entire notion of projects as well? And hence, another trend just emerged: the #noProjects.

My intention here is not to answer each of their arguments, that's not the point. What I will do is explain why the entire idea is absurd in the first place. So let's get to the basics first.

One thing that I advocate since at least 2008 is the idea of project management and markets in general through the models of Complex Adaptive Systems, Chaos Theory and Evolutionary Biology. I've been largely influenced by the ideas of Nassim Nicholas Taleb and his magnum opus "The Black Swan". It's an incredible idea that the markets are not bound by linear paths, but by chaotic agents that influence a complex system. All companies are managed to deal with averages, with limited sigmas as margins of operational error. But once something big, a "Black Swan", such as the 2008 economic crisis arrives, most are not prepared to deal with it, no models are able to predict it, and the whole system shuts down and collapse.

If you're unfamiliar with the idea, Google it for a moment and you will understand that companies, markets and people relationships in general, are dynamic systems that conform to evolutionary biology rules. Decentralized systems seems to be the way to go. And those concepts influence many of the Lean movements we see today. So, yes, I am very well aware of those effects.

But as a summary, the whole gist of it is: the ones with the most chance of survival in such a complex system are the ones that are the most adaptable, not the ones that strictly conform to plans. Conforming to long term plans and sticking to it with rigidity is the easy way to fall down when Black Swans happen.

That said, it made me think about another concept: Einstein's General Theory of Relativity. In modern cosmology it superceded the Theory of Newton. When I first learned about it my main thought was: if Newton is "wrong", why aren't we using Relativity to calculate everything in our day-to-day lives? The answer is that Newton's theory is only "wrong" if you define it as the being able to calculate everything, but it isn't. It can't be applied to the very very large, gravitational calculation, galaxy level calculations. But, if you limit it to Earth like sizes, where we are calculating the path of an airplane, the trajectory of a bullet, etc, it is still applicable, as the margins of error are negligible. So in the day-to-day operations, we can reduce the problems to Newton and not use General Relativity. This is an oversimplification, of course, but bear with me.

The same applies to companies. We are all bound to Power Law distributions, Evolutionary Biology, the relentless forces of Chaos that make everything behave like Complex Adaptive Systems. But in a constrained environment I will argue that we can reduce the calculation back to Bell Curves. This is the most difficult to "prove" so I will not attempt it right now but the following explanation may get you there.

Let's define what a company is: it's a set of operations. Operations are repetitive activities. So you have activities such as "pay a supplier", "send a purchase order", "process the payroll", "transport products", etc. The set of all those activities define what a company is.

The whole idea of a company is to perform those operations in the most efficient way possible. You do that by continuously refining the process in small steps or by means of a breakthrough, changing the entire way you do a particular operation. For example, back in the day, there were entire groups of people dedicated to fill in paper forms and organize them to make information flow within a company. With the emergence of digital systems, ERPs, all that paperwork is not necessary today. We were able to get rid of an entire profession of typewriters and we added efficiency and more precision to the system. Breakthroughs are usually the digital automation of manual labor or getting rid of a process altogether.

To accomplish such breakthroughs there are Projects. Projects are temporary endeavors where a group of people concentrate to achieve some pre-established goal. Projects usually have a fixed starting and due date, a fixed budget, and a fixed amount of people involved.

And here we arrive to the Estimation part: all projects want to achieve some goal. In the particular case of a software project, we implement software code that is meant to achieve that goal. To achieve a goal we come up with software features and we break them down into Use Cases, User Stories, Requirements or any artifact meant to describe what is to be built. And then we estimate how much resources (time, money, people) are necessary to implement each of those pieces and integrate them together in a "solution" that solves the problem and achieves the goal.

What software developers complain is that it is not possible to estimate those pieces with precision and projects will always be delivered late and overbudget. So the best idea is to not estimate and simply start coding and delivering value as soon as possible and consider it done only when its done.

Some software developers get so fed up of this whole notion that they want to leave their companies to start their own tech startups where they will be able to do whatever they want without any controls. Then they look up for investors because they need a lot of money and a lot of time. Of course they do. What they don't realize is that EVERYBODY needs a lot of money and a lot of time. And investors know this: the idea is irrelevant, execution is key. The people that deserve more money and more time are exactly those that can pressure themselves into delivering underbudget and ahead of everybody. Just doing something and not being worried about constraints is exactly the affairs of the mediocre. And mediocre don't deserve anything.

Now back to basics: we have something called Economy exactly because resources are not infinite. Everything that has value has a price, be it a physical product or working hours.

Understand this: in the services business (where we software developers are all in, regardless if you're an employee, a co-founder, etc) value has only two variables: quality and efficiency. We tend to regard quality as the only thing that matters. Worse: we tend to regard what we think as quality as the only thing that matters.

This brings us back to CONTEXT. Most programmers are bad at estimates. And the root reason is because they are usually utterly incompetent with understanding context. As someone with a Math background I read all articles about processes, methodologies and stuff like "#noEstimates" as "formulas".

Formulas alone don't mean anything. Any mathematician knows that you have to define a Domain and an Image, the source and the destination of the all inputs and all outputs. For example, if I show a formula such as "f(x) = x / 0" you might argue that this is an invalid and wrong formula as I can't divide zero by zero. But if I say that the Domain is every Natural number but zero, now this is a totally valid formula for the Image of the Naturals.

So, when someone says "#noEstimates" it begs the question: on which Domain and for what Image? This is the origin of the discussion for most of the statements made in the Internet: people will argue for or against an idea because each is in a different Domain. That's the same for Agile in general, Lean Startups, Lean Manufacturing, etc. They usually only define practices, procedures, formulas, but they rarely define Domain and Image. This makes a confusion and loses the point.

What I will define, though, is that Projects are necessary everytime there is a defined goal to be achieved. This is the domain. And I will also state that when people state "#noEstimates" they are not in the Domain of Projects but of "Ongoing Operations". Actually, this is where Lean Manufacturing in general lies as well. I have explained Operations above, and this is where small improvement steps (Kaizen) emerges. Sometimes the feedback loop from an operation gives enough input to justify a Project to make a larger step and a breakthrough.

Projects, on the other hand, continues to be a temporary endeavor. The whole idea is to establish the boundaries, such as time and cost constraints. And we come back to the original question: but it is impossible to predict the efforts necessary for something as maleable as software development.

First of all, yes, it is impossible to predict with exact precision. Again, let's define it: it's impossible to predict a number with zero margin of error. Estimation is prediction with margins of error. And why is that some projects cost more than twice as much and take twice as much time as the estimation?

More often than not, because the team is incompetent, that's 90% of the cases. The problem is not the estimation, it's the execution. Estimation is the establishment of an expectation. Expectations must be managed. An estimation is only good if the context is taken into consideration. Most people don't like to estimate because "what if" scenarios. What if the client change his mind? What if we find a difficult obstable? What if a meteor strike the Earth and all living creatures perish? We can't manage "what if", what we can manage is what we know and create constraints. Project constraints start with its goal. To accomplish those goals we also establish the rules of engagement: the premises. Without goals and without premises there is no game.

None of those guarantees a Prediction. An estimation is only as good as the execution. Now we have to manage it. Everybody has to manage it. It's no good if you define clear rules and all of a sudden you see a programmer doing nothing and when you ask him why he is doing nothing his answer is "oh, because I emailed the client about some requirements and he never replied back so I was waiting". And when you ask "and did you try calling him?", usually the answer is "No, I didn't". There is no amount of processes, methodologies that can "fix" an incompetent employee. Lack of technical skills can be fixed. Bad faith cannot.

The ones advocating #noEstimates can argue that they are not like that and I can believe it. But 90% of the projects that failed had employees like that. Programmers tend to put the blame on the client, the bosses, the market, but never themselves. And as a programmer I will argue that the reason most projects fail has nothing to do with changing requirements, limited time, but with lazy employees. Want to make projects go right? Start with Human Resources first, then go find methodologies and practices.

The problem with all methodologies not stating the Domain under which their formulas work is that most people don't realize that the Domain start with "having competent, committed and skilled employees". Most adopt methodologies with the hope that they will turn incompetent employees into competent, and that just doesn't happen.

With that out of the way, why do we need estimates? Or more generally, why do we need constraints? Because that's the core of value of any system. Nature puts pressure on any living species: changing climate, limited food supplies, predators. The species that are most adaptable evolves, the ones that can't adapt perishes.

When someone says "it's impossible to do X", that's probably the most valuable goal to pursue. Because the whole statement is: "it's impossible to do X with what we know today". It was impossible to go around the globe in 24 hours, it's not anymore. It was impossible to communicate with the other side of the globe in real time, it's not anymore.

Constraints are the foundation of innovation. If I had to define innovation I'd say that "it's the process by which you accomplish something that was deemed impossible before".

If you have infinite resources, or if you just don't need to worry about constraints (that's what happens in bubbles), you don't innovate. This is so important that I will repeat it:

Innovation is the byproduct of Constraints.

We estimate based on past knowledge. If we can't out perform our past selves, how incompetent are we? I mean, we can argue that software is not predictable, and I agree. But making mistakes of orders of magnitude in recreating similar software only smells incompetence to me. Most of the software we produce are not brand new ideas, breakthrough new algorithms. They are really mostly the same: content websites, ecommerce, elearning, social networks, social commerce, forums, polls. Unless you work in research programs, what other kinds of different software did you do lately?

Estimation is rarely the problem. All estimation comes from a set of premises. Not managing those premises is the problem. If requirements change, this is not a problem. We can always manage that. We can't manage accumulated problems in the last day of the project. And usually the case is that programmers defer dealing with problems. Again this is not a problem with estimation, it's a problem with Human Resources.

Meritocracy only exists in a system of scarcity, where one stands out against another compared to a constraint. In a system where there is only abundance, there is no need to innovate, there is no need for merit. Companies that just received a humongous amount of cash will invariably show symptoms of laziness, not innovation. The confusion arrives because some of the "practices" being stated derive from this temporary unreal situation of a bubble, and can't withstand the pressure of time. Give it enough time and you will realize "why did we, with so much cash and so much time, accomplished so little, and the other small tech startup, with so limited resources was able to outperform us?". And this is the answer of why a Yahoo! buys a Tumblr, why a Facebook buys an Instagram, why a Google buys a Waze.

If you advocate #noEstimation, why not go a step further and advocate #noWork? It's just one step further.

Rubyconf Brasil 2014 - Dates are Set!

$
0
0

To be sure everybody starts getting prepared: Rubyconf Brasil 2014 is already confirmed with venue and dates.

It's going to be August 28th and 29th, 2014. The venue will the Frei Caneca Theater, just like 2013. We were checking new locations, but the difficulties in closer restaurants, parking lots, etc made us go back to the same place of 2013. It's large, it's structured well enough, we know how to make it work and it fits more than 800 people comfortably.

Buying plane tickets and hotel reservations ahead of time make it much cheaper. So you can be assured of the dates and location already.

If your company wants to participate, sponsor, send you as a speaker or anything like that, let me know. Call for Papers will open next year around March or April.

See you all next year (The Rubyconf Brasil Staff)

[Iniciante] Configurações de ambiente com Dotenv

$
0
0

Se você já fez deployments usando Heroku, uma coisa que pode ter parecido estranho no começo e agora já é segunda natureza é colocar configurações específicas de ambiente em variáveis de ambiente ("env").

No caso do Heroku, podemos fazer:

1
heroku config:add HELLO_WORLD=true

E dentro da aplicação podemos pegar esse valor com

1
ENV['HELLO_WORLD']

O problema: e quando estamos desenvolvendo? #comofaz?

A forma mais desorganizada é fazer algo como:

1
hello_world = %w(development test).include?(Rails.env) ? "123" : ENV['HELLO_WORLD']

A forma que se popularizou atualmente é usar a gem dotenv-rails

Na sua Gemfile adicione o seguinte ao seu grupo 'development', 'test':

1
gem 'dotenv-rails', :groups => [:development, :test]

Execute o comando 'bundle install' e agora crie um arquivo .env na raíz do seu projeto:

1
HELLO_WORLD=true

E na sua aplicação faça normalmente:

1
hello_world = ENV['HELLO_WORLD']

Não se esqueça de colocar o '.env' no seu '.gitignore' para não colocá-lo no seu repositório e mantenha um '.env.development' como modelo para que o próximo desenvolvedor saiba o que precisa configurar na sua máquina.

Melhor ainda, como todos já deveriam saber a este ponto, uma configuração que o Rails ainda gera por padrão e acabamos colocando no repositório git é o 'config/initializers/secret_token.rb'.

Será algo assim:

1
MyApp::Application.config.secret_token = 'bfbb...aadd2'

Com o 'dotenv' faça assim:

1
MyApp::Application.config.secret_token = ENV['SECRET_TOKEN']

E adicione ao seu novo arquivo '.env' o seguinte:

1
SECRET_TOKEN=bfbb...aadd2

Lembrando que você sempre pode criar um novo token com o comando 'rake secret'. E não se esqueça de adicionar também ao seu projeto no Heroku (com um novo token diferente do de desenvolvimento, claro):

1
heroku config:set SECRET_TOKEN=`rake secret`

[Iniciante] Criando um ambiente de desenvolvimento com Vagrant e Chef-Solo

$
0
0

Este artigo é mais uma anotação para mim mesmo mas deve servir para mais pessoas também. Se você ainda não sabe o que é Vagrant, leia o artigo do Nando Vieira "Usando o Vagrant como ambiente de desenvolvimento no Windows" ou assista a palestra que ele deu na Rubyconf Brasil 2013.

Assumindo que você já sabe o que é Vagrant, resolvi explorar mais algumas de suas opções. Em particular, como subir uma nova máquina e automatizar sua configuração. Existem algumas formas, a mais simples é provisionamento via shell-scripts a mais interessante é o provisionamento usando Chef-Solo. Existem também as opções com Ansible e Puppet.

Para começar a usar Chef-Solo adicione o seguinte bloco ao seu Vagrantfile:

1234
config.vm.provision :chef_solodo |chef|
  chef.cookbooks_path = 'cookbooks'
  chef.add_recipe 'main'end

Então crie um diretório para seus cookbooks e comece a adicionar receitas, ou use Berks (que funciona como um Bundler para cookbooks de Chef), e pronto, quando subir sua máquina com 'vagrant up' ele vai usar esses cookbooks para automaticamente instalar e configurar tudo que você precisa. E quando quiser adicionar mais cookbooks basta executar 'vagrant provision'.

Em particular, criei meu próprio cookbook fazendo um fork do @brennovich. Como ambiente para desenvolvimento eu instalo um Ubuntu 12.04 LTS Precise Pangolin. Eu gosto de instalar Postgresql, Mysql, Redis, MongoDB, Memcached, Ruby com RVM, Python com PIP e virtualenv, Node.js com npm, Oracle Java 1.7 e Elasticsearch.

Além disso também prefiro usar o conjunto de dotfiles YADR. Neste processo eu só faço o clone mas não instalo porque não há uma receita e a rake task que faz isso exige prompts do usuário que ainda não dá para automatizar, então se quiser ativar o YADR, depois de logar com 'vagrant ssh', faça:

12
cd ~/.yadr
rake install

Outra coisa que ainda não entendi é que a receita de RVM não está instalando os rubies. Se alguém descobrir porque não deixe de comentar.

Para colocar tudo isso para funcionar, instale o Virtualbox ou VMWare, instale o Vagrant e comece assim:

12345
git clone https://github.com/akitaonrails/brotodevbox.git
cd brotodevbox
git submodule update --init

vagrant up

Meu Vagrantfile está hardcoded para meu diretório de projetos, crie a seguinte variável de ambiente para mapear seu diretório antes de executar o Vagrant:

1
export SYNCED_FOLDER=/home/meudiretorio/projetos

E se estiver usando Vmware como provider, suba assim:

1
vagrant up --provider=vmware_fusion

Conclusão

A grande vantagem de usar Vagrant, para mim, é ter um ambiente completo de desenvolvimento isolado nele mesmo. Recentemente fiz upgrade do OS X Mountain Lion para Mavericks, se não tivesse o Vagrant gastaria horas reinstalando tudo, tendo problemas com binários incompatíveis e assim por diante.

Alguns vão preferir usar o Vim diretamente do Terminal, com tmux para garantir a sessão. Eu pessoalmente gosto de editar por fora usando MacVim e outros desenvolvedores podem executar seu editor favorito como Sublime Text 2.

Se seu ambiente já é um Linux, não deixe de usar o Vagrant-LXC como provider que o @frehm está evoluindo, é um dos desenvolvedores mais empolgados em ajudar a tornar o Vagrant uma ferramenta essencial.

E mesmo se estiver no OS X como eu, uma experiência que ainda vou fazer é rodar um Linux dentro do VMWare e, com a ajuda do Vagrant-LXC conseguir criar simulações de ambientes mais complexos que exigiriam múltiplas máquinas VMWare (como um cluster MongoDB, por exemplo), e com o Vagrant-LXC vou precisar só de uma máquina virtual.

Por enquanto já fico contente de ter um ambiente de desenvolvimento estável.

Ruby, a linguagem do mundo Cloud

$
0
0

Ruby on Rails é definitivamente o primeiro motivo para qualquer novo programador se interessar por Ruby. É um framework muito estável que conquistou uma posição de destaque. Atualmente criou-se um ecossistema que expandiu além do framework e gerou uma coleção de bibliotecas, ferramentas e serviços. O pacote básico oferece muito: desde um excelente suporte a MVC-Web. O sistema de roteamento ainda é excepcional mesmo comparado a outros frameworks. Apesar de controverso o ORM ActiveRecord evoluiu e se tornou muito estável. Novos patterns de organização como Presenters, Service Objects, Concerns surgiram para facilitar aplicativos maiores. Pacotes como Minitest, RSpec, Factory Girl, Fabricator e outros continuam a tornar os testes mais e mais completos. Também controverso o Asset Pipeline faz o que todo framework deveria fazer como básico: minificar e otimizar assets.

O mundo front-end evoluiu além do JQuery. É trivial integrar os novos frameworks como Backbone, Angular, Ember. O mundo de CSS também evoluiu além do Sass, temos facilmente integrado Twitter Bootstrap, Foundation e outros. E o mundo de templates evoluiu além do ERB e HAML com exemplos como Slim. Enfim, existem opções simples para todos os gostos.

E para facilitar a vida durante o desenvolvimento temos servicos como CodeClimate para análise estática de código, Travis-CI para integração contínua. New Relic continua sendo uma opções completa e robusta de monitoramento em produção e melhoria contínua.

E se quisermos explorar além do básico ainda temos o mundo de NoSQL, Mongoidé a melhor opção para MongoDB. O melhor sistema de execução de tarefas assíncronas é o Sidekiq, que usa Redis. Integrar cache com Memcached chega a ser trivial. E tudo isso numa arquitetura que continua se mantendo "shared nothing", garantindo nossa opções de escalabilidade horizontal.

E se o Ruby MRI não é mais suficiente, sempre temos a opção de usar JRuby e ganhar alta performance com poucas (ou às vezes nenhuma) mudança de código. E com isso temos diversas opções de servidores de aplicação com Unicorn, Passenger e Puma.

Mais do que isso, depois que o tema "assíncrono" ficou na moda por causa de node.js, surgiram diversos serviços que solucionam todos os use cases. Não há mais necessidade de se preocupar com comunicação assíncrona com serviços como Pusher, PubNub e diversos outros.

O stack está bastante completo, é uma combinação muito difícil de equiparar. E além disso o mundo Ruby está evoluindo para outras direções. Uma constatação importante: hoje o mundo está se movendo para a virtualização de servidores e automação de infraestrutura. O primeiro grande exemplo e ainda a melhor opção da categoria que ficou conhecida como IaaS (Infrastructure as a Service) é Amazon Web Services (AWS) EC2. Temos outros como Rackspace Cloud, Digital Ocean e no mundo não-open source temos Microsoft Azure.

Mas nós do mundo Ruby usamos uma categoria acima faz alguns anos: o chamado PaaS (Platform as a Service). A opção mais conhecida é sem dúvida o Heroku onde com um mero "git push" fazemos deployment em quantos servidores quisermos. Além dele ainda temos o Engine Yard Cloud. Agora outra coisa interessante, dentre as maiores opções temos ainda os recém-chegados RedHat OpenShift, VMWare Cloud Foundry, até certo ponto também o Microsoft Azure, a própria Amazon com o AWS Elastic Beanstalk, AWS Opsworks, e o Google com uma opção mais restrita que é o Google App Engine. Existem outros mas vamos ficar com esses mais conhecidos, 7 opções e delas 5 utilizam ferramental e tecnologias Ruby.

O mundo Ruby está evoluindo isso faz algum tempo, começando com ferramentas de automação de infraestrutura que tentam tratar o mundo de hardware como se fosse software e nessa categoria temos Puppet, Chef. Sobre esse ferramental, novas tecnologias como Bosh foram criadas. Essas tecnologias permitiram Heroku, Engine Yard, OpenShift, Cloud Foundry, e o próprio AWS OpsWorks (que é uma interface Web sobre Chef).

Essa evolução no mundo de ferramental de Cloud retorna ao mundo de desenvolvimento mesmo no desktop com ferramentas como Vagrant, que automatiza a montagem do seu ambiente de desenvolvimento. Integrado com ferramentas como o Chef e facilitadores como Berkshelf, temos uma enorme biblioteca para montar ambiente complicados, podemos inclusive configurar rapidamente um ambiente inteiro Cloud Foundry sobre Vagrant.

O que quero dizer com isso? O mundo Cloud não está chegando: ele já está aqui. O ecossistema Ruby colaborou muito no bootstrap do novo mundo Front-end, influenciando práticas, tecnologias e agora faz o mesmo no mundo Back-end, diretamente no motor do Cloud. Além disso o ecossistema permeia hoje todas as etapas de uma solução completa: front-end, back-end, infraestrutura, além de Java, poucos ecossistemas são tão verticais.

Dicas? Comece a estudar ecossistemas como Chef e evoluções de ferramentas como Vagrant. Saber Rails, saber fazer testes automatizados, saber fazer front-end com pipeline automatizado, já pode ser considerado o básico.

Viewing all 481 articles
Browse latest View live