100 anos de Corinthians!

1, setembro, 2010

Parabéns Sport Club Corinthians Paulista pelo seu centenário!

100 anos de Corinthinas, o time do povo brasileiro! Hoje o mundo é preto e branco!

Esportes , ,

Anotações sobre o livro “JavaScript: The Good Parts”

15, agosto, 2010

Em geral quando eu leio um livro, costumo fazer anotações de trechos interessantes que encontro.

No livro JavaScript: The Good Parts, de Douglas Crockford, encontrei um punhado deles. Eu listo esses trechos aqui, até sendo um forma de eu organizar meu estudo.

Só lembrando que minha intenção não é publicar partes do livro. Na verdade, espero que você, que usa/gosta de JavaScript, se sinta incentivado a ler o livro, o qual gostei muito e recomendo.

Ah, para quem quiser, também há a versão traduzida para português, O Melhor do JavaScript, publicada pela editora Alta Books.

Analisando o JavaScript

O JavaScript se baseia em algumas idéias muito boas, que incluem funções, tipificação fraca e objetos dinâmicos, e umas poucas idéias ruins, como um modelo de programação baseado em variáveis globais.

Se você deseja aprender sobre as partes ruins e como mal utilizá-las, consulte qualquer outro livro sobre JavaScript.

Números

Há um único tipo de número, onde não há um tipo inteiro distinto, diferente de outras linguagens de programação. Então 1 e 1.0 têm o mesmo valor.

Strings

Strings são imutáveis, nunca podem ser alteradas. Concatenando com o operador “+”, uma nova string é criada.

Duas strings que contém os mesmos caracteres na mesma ordem são considerados a mesma string. Por exemplo, o resultado da expressão abaixo é true.

"P" + "r" + "o" + "d" + "i" + "s" === "Prodis" // true
Escopo

Diferente de outras linguagens, os blocos (grupo de comandos entre chaves) não criam um novo escopo. Uma variável declarada dentro de um bloco é visível em qualquer lugar da função que contém esse bloco. Sendo assim, as variáveis não deveriam ser definidas nos blocos, e sim no começo da função.

Valores booleanos

false, null, undefined, string vazia “”, o número 0 e o número NaN são valores falsos. Todos os outros valores são considerados verdadeiro, inclusive true, a string “false” e os demais objetos.

Operador typeof

“number”, “string”, “boolean”, “undefined”, “function” e “object” são valores retornados por typeof. Para o uso de typeof com null ou uma matriz, o retorno é “object”, o que não é certo. Um teste melhor para detectar nulos é simplesmente:

myValue === null
Objetos

Números, strings e booleanos não são objetos, pois são imutáveis. Objetos são grupos mutáveis com índices. Matrizes, funções, expressões regulares e objetos são objetos.

Para criar novos valores de objetos, uma forma conveniente é criar um objeto literal, um par de chaves contendo zero ou mais pares nome/valor. Por exemplo:

var contact = {
  "email" = "pedro@bo.com.br",
  "phone" = "(11) 9999-9999"
}

Todo objeto é ligado a um protótipo de onde ele pode herdar propriedades. Todos os objetos criados de literais são associados a Object.prototype, um objeto que vem como padrão no JavaScript.

Funções

A melhor coisa que JavaScript possui é sua implementação de funções.

Funções são ligadas à Function.prototype, que está ligada à Object.prototype.

Funções podem ser armazenadas em váriaveis, objetos e matrizes. Elas podem ser passadas como parâmetros para funções e serem retornadas por funções. E como são objetos, funções também podem ter métodos.

Quando uma função é chamada e os parâmetros não coincidem, não há erro em tempo de execução. Se os valores informados excederem a quantidade de parâmetros, os valores excedentes são ignorados. Se o inverso acontecer, undefined será atribuído aos valores faltantes.

Uma função sempre retorna um valor. Se um valor não for fornecido no comando return, então undefined é retornado.

Ao invés de escopo de bloco, JavaScript possui escopo de função. Todos os parâmetros e variáveis definidos em uma função não são visíveis fora dela. É recomendável declarar todas as variáveis utilizadas em uma função no início do corpo da função, diferente de outras linguagens onde as variáveis geralmente são declaradas logo antes de sua utilização.

Partes péssimas e ruins

A dependência de variáveis globais é a pior parte do JavaScript, pois uma dessas variáveis pode ser alterada em qualquer parte do código e em qualquer momento, algo que pode complicar muito o comportamento de um programa.

O operador “+” é utilizado tanto para concatenar strings, quanto para somar números. Se você quer usá-lo para somar, precisa se certificar que os dois operandos são números. Caso contrário, esses operandos serão convertidos em strings. Veja o exemplo abaixo:

10 + 15 // 25
10 + "15" // "1015"

O valor NaN (not a number) é um tanto incoerente. O typeof não distingue entre números e NaN:

typeof(NaN) // "number"

E NaN não é igual a ele mesmo:

NaN === NaN // false
NaN !== NaN // true

No JavaScript, há dois grupos de operadores de igualdade:

  • Os bons: === e !==
  • E os maus: == e !=

Os bons funcionam como esperado: se dois operando tiverem o mesmo valor e forem do mesmo tipo, === retorna true e !== retorna false. Já os maus funcionam bem quando os operando são do mesmo tipo, mas quando eles são de tipos diferentes, eles tentam fazer coerção de tipo e coisas estranhas podem acontecer:

"" == "0" // false
0 == ""   // true
0 == "0"  // true

false == "false" // false
false == "0"     // true

false == undefined // false
false == null     // false
null == undefined  // true

" \t\r\n " == 0 // true

O melhor é sempre usar o grupo de bons operados de igualdade: === e !==.

JavaScript, Livros , ,

Returning em Ruby on Rails

5, agosto, 2010

Quantas vezes você já criou algum método em Ruby que inicializa uma variável, atribui valores a ela e depois a retorna?

Veja o exemplo abaixo:

def some_values
  values = []
  values << "first element"
  values << "second element"
  values
end

some_values # => ["first element", "second element"]

A linha 2 é cria um array vazio, depois são atribuidos valores nas linhas 3 e 4, e finalmente na linha 5 o array é retornado pelo método.

Em Ruby on Rails existe o método returning da classe Object que facilita nossa vida nesses casos:

def some_values
  returning values = [] do
    values << "first element"
    values << "second element"
  end
end

some_values # => ["first element", "second element"]

Na linha 2 chamamos o método returning passando a variável que será retornada já atribuindo seu valor inicial. Dentro do bloco, nas linhas 3 e 4, então atribuímos os valores ao array.

Há também esse outro tipo de sintaxe:

def some_values
  returning [] do |values|
    values << "first element"
    values << "second element"
  end
end

some_values # => ["first element", "second element"]

Funciona da mesma forma, mas acaba sendo não tão intuitivo como o código anterior.

Veja um trecho de código utilizando o método returning, de um método auxiliar para testes de RSpec retirado de uma aplicação real:

def variants
  returning variants = [] do
    5.times do |priority| do
      variants << Factory.build(:variant, :priority => priority)
    end
  end
end

E olhe só como é simples a implementação do método returning:

def returning(value)
  yield(value)
  value
end

Ruby , , ,

[Off Topic] Novos tipos de ética

4, agosto, 2010

Hoje em dia, “surgiram” novos tipos de ética:

Ética do que os olhos não vêem

Se eu estou passeando com meu cachorro e ele faz cocô na calçada em frente ao portão do meu vizinho, tudo bem. Eu vou embora e deixo o cocô lá, ninguém viu mesmo. Mas se isso acontecer quando meu vizinho está no portão, vendo a cena, é claro que eu vou pegar o cocô na hora. E provavelmente vou pedir para ele me emprestar algum papel ou saco plástico, afinal eu não ando com isso no bolso quando passeio com meu cachorro.

Ética do todo mundo também faz

Estou no meu carro, dirigindo em uma estrada cheia, chegando ao ponto de ficar parado em vários momentos. Se eu for pelo acostamento, irei andar mais rápido. Mas andar pelo acostamento é proibibo, então não vou por lá, continuo aqui parado. Mas espere, um carro passou pelo acostamento, e bem rápido. Outros carros estão andando no acostamento agora. Ah, também vou por lá, assim irei chegar mais rápido em casa. É proibido por lei, mas todo mundo está indo mesmo, então não tem problema.

Ética do não é meu mesmo

Eu trabalho todos os dias usando um computador na minha empresa. É um computador muito bom, deve ter custado bem caro. Em casa eu tenho um semelhante, também paguei caro. Por isso, tenho o maior cuidado com ele, sempre o deixo limpo, organizado e não instalo programas que podem prejudicar seu bom funcionamento. Já o computador da minha empresa eu não preciso ter o mesmo cuidado, posso instalar qualquer programa, comer em cima do teclado, deixar os fios todos zoneados. Eu não preciso me preocupar com isso, afinal, não é meu mesmo.
.

Ética é um conjunto de valores morais e princípios que norteiam a conduta humana na sociedade. A ética serve para que haja um equilíbrio e bom funcionamento social, possibilitando que ninguém saia prejudicado.

Definição retirada de http://www.suapesquisa.com/o_que_e/etica_conceito.htm
.
Falando sério agora, às vezes eu sinto que alguns valores que as pessoas prezam atualmente estão distorcidos, onde honesto é sinônimo de otário e o respeito é deixado em segundo plano.

Geral

[fisl11] O que rolou de Ruby e Ruby on Rails

27, julho, 2010

Como nas edições anteriores, esse ano no fisl11 tivemos várias palestras relacionadas com Ruby e Rails.

Quarta, 21 de julho

No primeiro dia, mostrei o uso do Spree, uma plataforma completa de comércio eletrônico desenvolvida em Ruby on Rails, como base de um novo sistema de loja virtual da Locaweb.

Nessa apresentação foram mostradas algumas técnicas de metaprogramação Ruby para lidar com as extensões do Spree e organizar melhor seu código.

Os slides da palestra “Locaweb + Spree: transformando código aberto em um projeto comercial” estão disponíveis nesse link:
http://www.slideshare.net/Prodis/locaweb-spree-transformando-cdigo-aberto-em-um-projeto-comercial

Quinta, 22 de julho

Neste dia, Daniel Lopes iniciou o “Mini-curso de Ruby e Rails”, introduzindo a linguagem de programação Ruby e os primeiros passos de Ruby on Rails. Essa primeira parte do curso teve duas horas de duração com a sala lotada.

Sexta, 23 de julho

“Lapidando Ruby” foi uma palestra muito interessante de Mauricio Szabo. Foram apresentadas algumas práticas para deixar seu código Ruby mais limpo, e outras técnicas para que seus testes fiquem mais claros e compreensíveis.

Os slides dessa palestra estão disponíveis nesse link:
http://www.slideshare.net/mauricioszabo/lapidando-ruby

A exemplo do dia anterior, a segunda parte do “Mini-curso de Ruby e Rails”, de Daniel Lopes, também teve sua sala lotada. O foco foi em montar uma aplicação simples em Ruby on Rails.

Sábado, 24 de julho

No último dia do fisl11, tivemos praticamente uma Maratona Ruby on Rails.

Para começar, Fabio Akita apresentou em duas horas “Ecossistema Ruby on Rails”, falando sobre o que se formou em volta do Ruby on Rails, como soluções completas em diversas áreas como deployment, e filosofias de empreendedorismo e desenvolvimento ágil.

Os slides dessa palestra estão disponíveis nesse link:
http://www.slideshare.net/akitaonrails/fisl-11-ecossistema-ruby-on-rails

Logo em seguida, tivemos mais uma apresentação do Fabio Akita, dessa vez sobre “Dicas de Desenvolvimento Web com Ruby”, onde foram mostradas algumas soluções simples para resolver o problema de lentidão de aplicações Web, por conta do entendimento pobre da arquitetura Web e suas alternativas.

Os slides dessa palestra estão disponíveis nesse link:
http://www.slideshare.net/akitaonrails/fisl-11-dicas-de-desenvolvimento-web-com-ruby

E o vídeo usado na apresentação está em:
http://dl.dropbox.com/u/1732133/dicas-de-desenvolvimento-web-com-rails.zip

E para finalizar a maratona, Daniel Lopes deu a terceira e última parte do “Mini-curso de Ruby e Rails”, finalizando a aplicação Ruby on Rails iniciada no segundo dia do treinamento e mostrando várias dicas interessantes sobre Rails.

Os slides de todo mini-curso estão disponíveis nesse link:
http://www.slideshare.net/danielvlopes/minicurso-ruby-e-rails

E o código fonte está em:
http://github.com/danielvlopes/fisl

.
Além disso, a galera do #HoraExtra esteve presente programando e publicando aplicações pequenas, desenvolvidas em Ruby on Rails, durante todo o fisl11. Mais detalhes do como isso aconteceu, você pode ver aqui.

Um abraço a todos os Railers que estiveram presentes ou que acompanharam virtualmente mais esse grande evento.

Eventos, Ruby , , , , , , , , ,

[fisl11] Sala de recepção dos palestrantes

25, julho, 2010

O site do fisl11 trouxe várias notícias durante o evento.

Estava dando uma olhada nessas notícias e encontrei uma foto minha na sala de recepção dos palestrantes, onde conversei com um rapaz que trabalhava na comunicação do evento sobre minha apresentação.

Foto retirada do site do fisl11

Foto retirada do site do fisl11

Veja um trecho da notícia:

…Fernando Hamasaki de Amorim, da Locaweb, já está com sua palestra pronta e aguardando. “Transformando código aberto em um projeto comercial” às 20h na sala 41E de hoje.

Fernando pretende apresentar um estudo de caso onde ele irá relatar os desafios e dificuldades, vantagens e desvantagens em utilizar código aberto para criar um novo sistema. “Vou falar também de códigos aberto em detalhes e mostrar como se ganha dinheiro com software livre. O código é aberto, mas alguém ganha com isto”, explicou. Mais detalhes vale a pena conferir a palestra de Fernando.

.
Para ver a notícia completa, acesse o link abaixo:
http://softwarelivre.org/fisl11/noticias/sala-de-recepcao-dos-palestrantes-esta-lotada

Eventos , , , , , , , , ,

[fisl11] Slides da apresentação Locaweb + Spree: transformando código aberto em um projeto comercial

22, julho, 2010

Veja os slides da palestra “Locaweb + Spree: transformando código aberto em um projeto comercial” que foi apresentada em 21/07/2010 no fisl11.

Agradeço a todos que estiveram presentes.

Eventos , , , , , , , , ,

[RailsConf 2010] Agilidade com estações de pareamento na Pivotal Labs

13, julho, 2010

Ian McFarland, VP de Tecnologia da Pivotal Labs, uma empresa de desenvolvimento especializada em desenvolvimento ágil, apresentou na RailsConf 2010 a maneira de como eles aplicam metodologias ágeis no dia-a-dia na palestra Agile the Pivotal Way.

Um grande diferençal relacionado a programação pareada são as estações de pareamento, onde não há uma máquina específica para cada desenvolvedor.

Na Locaweb, temos duas equipes utilizando estações de pareamento e ainda estamos nos adaptando às mudanças que isso traz, tanto em relação ao lado operacional como na parte comportamental da equipe.

Vamos ver alguns pontos interessantes sobre isso da apresentação.

O dia na Pivotal Labs começa com todos os funcionários tomando café juntos e em seguida é feita a reunião diária (stand up meeting) de todas as equipes juntas. Um projetor exibe quem está trabalhando em cada equipe durante aquela semana.

Após isso, cada equipe faz sua reunião diária e iniciam o desenvolvimento em pares.

As estações de pareamento são equipadas com um monitor grande, dois teclados e dois mouses. Além disso, notebooks pessoais não são permitidos nessas estações.

Caso algum desenvolvedor deseje acessar e-mails ou outras coisas pessoais, pode fazê-lo na estação de e-mail, um computador compartilhado que fica em uma mesa mais alta, sem cadeira, para as pessoas utilizarem em pé.

Outra coisa interessante que ajuda no desenvolvimento pareado é a área de trabalho da empresa. Ela é ampla, com espaço para as pessoas se movimentarem, monitores de integração contínua visíveis, Product Owners pertos das equipes e acessíveis, uma biblioteca com livros impressos e digitais. Além disso, há uma área de recreação (longe da área de trabalho) com mesas de ping pong.

A Pivotal Labs tem uma mentalidade de manter os desenvolvedores felizes, pois isso aumenta a produtividade do trabalho e há um maior interesse das pessoas em buscar inovações. Tanto que às quarta-feiras são realizadas as Tech Talks, apresentações realizadas pelos próprios desenvolvedores e que são gravadas e compartilhadas no site da empresa.

Não existem times especializados, então há uma troca de desenvolvedores entre equipes. Por exemplo, não existem um papel de Q.A. (Quality Assurance).

As equipes são formadas por no máximo três pares, com uma rotação constante entre os desenvolvedores para a comunicação entre eles se manter ativa. Mais que três pares por equipe se torna inviável, pois aumenta a quantidade de combinações entre os desenvolvedores e consequentemente nem todos ficam sabendo de tudo sobre o projeto.

Para essa rotação funcionar, as máquinas de pareamento possuem uma configuração padrão para cada o projeto. Isso é essencial para não haver perda de tempo. Quando os projetos são finalizados, as estações de pareamento são remanejadas para outros projetos.

Em geral, o desenvolvimento na Pivotal Labs é 100% pareado, inclusive quando há a necessidade de se realizar pesquisas na Internet ou documentações.

Eu perguntei se havia espaço para home-office e o Ian respondeu que isso somente acontece em casos muito específicos, acabando não sendo uma opção da empresa. Inclusive, todas as pessoas trabalham no mesmo horário.

Nessa palestra teve muito mais coisas interessantes, como:

  • Os benefícios da programação pareada
  • A importância de testes automatizados
  • Ferramentas para facilitar a comunicação
  • Interação entre clientes e desenvolvedores
  • Eventos regados à comida, como o café da manhã e celebração de conquistas
  • Como eles contratam novos desenvolvedores
  • A importância de segurar bons desenvolvedores na empresa
  • As filials da Pivotal Labs
  • Mais sobre agilidade e seus benefícios

Se você é adepto de metodologias ágeis ou está interessado em saber como isso funciona através de um caso real, recomendo que você assista a reprise da palestra da RailsConf 2010 que o Ian fez na Tech Talk.

Os slides da apresentação você pode baixar aqui.
.
Post original:
http://blog.locaweb.com.br/archives/3983/railsconf-2010-agilidade-com-estacoes-de-pareamento-na-pivotal-labs

Eventos , , , ,

[fisl11] Confirmadas data e hora da palestra Locaweb + Spree

12, julho, 2010

Está confirmada data, hora e sala da minha palestra “Locaweb + Spree: transformando código aberto em um projeto comercial” no fisl11.

A apresentação será no dia 21/07 às 20h na sala 41-E fisl 5.

Veja também:

Eventos , , , , , , , , ,

[fisl11] Minha proposta de palestra foi aceita

21, junho, 2010

Nos dias 21 a 24 de julho, será realizado em Porto Alegre o fisl11, o 11º Fórum Internacional de Software Livre.

O FISL é o maior evento de software livre da América Latina e a edição do ano passado atingiu a marca de 8.244 participantes.

Entre os assuntos que serão abordados, estão:

  • Linux, Ubuntu, KDE, BSD
  • Desenvolvimento em Ruby, Java, PHP, Python, Perl e Smalltalk
  • Desenvolvimento de Jogos, Multimídia e Streaming
  • Gerenciamento de Dados (SGBD, Storage, backup…)
  • Hardware, Sistemas Embarcados e Robótica
  • Segurança
  • Software livre e negócios
  • Educação e Inclusão Digital

Minha proposta de palestra “Locaweb + Spree: transformando código aberto em um projeto comercial” para o fisl11 foi aceita.

Segue o resumo da palestra:

Os desafios, benefícios, dificuldades e lições aprendidas que a equipe de desenvolvimento de SaaS da Locaweb teve na utilização do Spree, uma plataforma de comércio eletrônico de código aberto, como base de seu novo sistema de loja virtual multi-usuário, desenvolvido em Ruby on Rails. O poder e o dinamismo do Ruby tiveram destaque, com grande utilização de metaprogramação nas extensões do Spree.

Eventos , , , , , , , , ,