Softa

Aplicações Web 2.0 com Ruby on Rails e Postgres 

Coding Dojo / Tche Dojo

 

Aconteceu em 15.12.09 mais um encontro do Coding Dojo. Para quem se pergunta o que é: dojo (do=caminho, jo=lugar da prática) é o lugar onde se prática a disciplina. Nesse caso, a codificação, o desenvolvimento de linguagens e a troca de tecnologia. Este é o caminho escolhido.

A idéia foi criada porque os desenvolvedores são focados em trabalho e pesquisa, mas não tem um espaço de prática e/ou troca entre pares. Utilizando a metodologia dos dojos de artes marciais (ou o modelo que eles deveriam seguir). Compreendendo a ausência de competição, apoio mútuo, colaboração e diversão no aprendizado. A inclusão é realizada através do recebimento de todos níveis de programadores, até de quem não programa. Todos são convidados a participar do randori ou kake, que são programações realizadas em duplas que trocam constantemente. Se você não sabe nada, terá apoio do Sensei/Senpai(responsável pelo dojo), colegas, platéia, co-piloto(aite),etc.

Se você é programador, vale a pena! Vale a pena a troca de experiência, conhecer pessoas, métodos, tecnologias, linguagens novas. Se você é não é, vale a pena! Pelo método, pelo ambiente, pela diversão, pelo aprendizado de coisas novas.

Aprender coisas novas ou apenas exercitar não é a única coisa que o dojo oferece. Também a oportunidade de se expor, colocar o ego de lado e ir até o pc e tentar, mais nada além do que tentar. Você pode não conseguir nada, mas isso será só em matéria de código. Sempre se aprende alguma coisa quando nós nos expomos e é melhor ainda em um ambiente completamente salutar como o tatame macio de um coding dojo.

E no final….PIZZA! Por conta da Locaweb, organizadora do evento.

Comunidade do RS : http://groups.google.com/group/dojo-tche?pli=1

Coding dojo, regras e princípios: http://codingdojo.org/

Locaweb: http://www.locaweb.com.br

 

Filed under  //   desenvolvimento  

Comments [0]

Agile Day!

 

Em 01.12.09 foi realizado o Agile day (ano 2), pelo GUMA-RS. Assisti a 4 palestras de grandes nomes do movimento Agile no Brasil. O resumo da programação está em http://agileday2009.guma-rs.org/

Uma rápida avaliação geral: Todos palestrantes apresentaram ou case específico ou a metodologia comum para diversos cases que acompanharam. O foco se manteve no sucesso e as dificuldades que são encontradas no processo de criação de software através da metodologia ágil. O ponto em comum das histórias de sucesso é que se faz necessidade de uma equipe coesa e madura, tanto no seu inter-relacionamento como no seu intra-relacionamento, ou seja, a equipe além de ter alto nível técnico deve ter confiança em todos seus membros. Essa questão de inclusive foi levantado durante a sessão de perguntas do Manoel Pimental, da InfoQ e Visão Ágil. Todas as características de equipe apontadas como necessárias para obtenção de um ambiente favorável à utilização de metodologia ágil são características desenvolvidas nos melhores programas de desenvolvimento humano. Todos presentes ficaram de acordo.

As características humanas necessárias à equipe foram presentes em todas palestras, inclusive na palestra sobre integração e entrega continua do Carlos Villela da ThoughtWorks, que mesmo sendo técnica, focada na ferramentas e no processo de integração, a continuidade do processo requer comprometimento total da equipe. Como foi exposto: é mágico quando você apenas escreve algo em um post-it e colhe o resultado completo na semana seguinte.

Para compreender melhor o desenvolvimento de equipe e dos integrantes da equipe acho que é imprescindível os livros: A quinta disciplina, de Peter Senge. http://tiny.cc/zIUf8 Criação de conhecimento na empresa, de Nonaka & Takeuchi http://tiny.cc/cB8F2

Site do Guma-RS http://www.guma-rs.org/

Site do evento http://agileday2009.guma-rs.org/ 

 

Comments [0]

BackgrounDRb

Aqui está a palestra que dei no último mês, sobre BackgrounDRb

Background Jobs - Com BackgrounDRb
View more presentations from joaomilho.

Os códigos estão no GitHub: http://github.com/softa/hello_drb_world http://github.com/softa/hello_backgroundrb_world

 

Filed under  //   desenvolvimento  

Comments [0]

BackgrounDRb

 

Aqui está a palestra que dei no último mês, sobre BackgrounDRb

Background Jobs - Com BackgrounDRb
View more presentations from joaomilho.

Os códigos estão no GitHub: http://github.com/softa/hello_drb_world http://github.com/softa/hello_backgroundrb_world

 

Comments [0]

Última semana de inscrições para o PGCon Brasil 2009

Estamos há uma semana do evento, as inscrições na web estão abertas até dia 19 em http://pgcon.postgresql.org.br/2009/inscricoes.php Depois disso só as inscrições no local. Aproveitem e se inscrevam, é o maior evento de PostgreSQL na américa latina.

Filed under  //   desenvolvimento  

Comments [0]

Controle de versões com o Git parte 2

Dando seqüência ao post anterior
Branching
Branches são usados quando preciso modificar algum estado anterior do projeto sem alterar o estado atual. Se lembrarmos do grafo de versões, veremos que isso é exatamente uma linha divergente da linha de tempo do projeto. Como um universo alternativo no “De volta para o futuro 2”.
Para criar um “branch” no git basta usar o comando git branch [nome_do_branch]. É importante que tudo seja commitado antes no projeto. Abaixo um exemplo onde eu inicio um repositório, adiciono um arquivo chamado “teste”, crio um primeiro “commit” e crio um “branch” chamado “novo_branch”.
Image_1.png
No próximo exemplo eu crio um arquivo chamado “arquivo_so_no_master”, que só aparece no “branch master”, pois pertence ao estado mais recente do projeto. Depois crio um “commit” contendo esse arquivo e, a partir disso, o “branch master” passa a apontar o último “commit” contendo o arquivo novo, enquanto o “branch novo_branch” continua apontando para um “commit” onde esse arquivo ainda não foi criado.
Image_2.png
Quando eu faço o git checkout novo_branch observem que o arquivo desaparece do meu diretório de trabalho, pois o estado atual do projeto passa a ser aquele apontado pelo “head novo_branch” e o git sincroniza a nossa arvore de arquivos com o conteúdo do “commit” no “branch” atual.
Se executarmos o commando git diff head1...head2 podemos ver a diferença de head2 até o ancestral em comum com head1, isso permite identificar facilmente as modificações feitas em um branch específico a partir da sua divergência. No exemplo abaixo usamos ele para ver o que se passou no branch “master” a partir da criação de “novo_branch”:
Image_3.png
É importante que em algum ponto da história dos branches seja possível unir essas duas linhas de tempo divergentes. Isso é comum em desenvolvimento de software quando queremos integrar recursos de uma versão de desenvolvimento à versão estável, ou quando queremos portar modificações de segurança da versão estável para a versão de desenvolvimento. Nesse ponto entram dois novos conceitos. O “merge” e o “cherry-pick”.
O “merge” faz a união de dois estados distintos do projeto e é feito com os comandos git merge ou git pull. Por enquanto falaremos apenas sobre o git merge e mais tarde falaremos sobre o git pull.
Fazendo um merge
Antes de um merge é importante commitar todas as modificações que desejamos preservar. Depois é só executar o comando git merge [head] onde head é o nome do branch que queremos unir ao “branch” atual. Lembrando que podemos ver qual o branch atual com o comando git branch. Abaixo um exemplo onde verificamos o branch atual e executamos um merge trazendo todas as modificações do master para o novo_branch.
Image_1.png
O processo de merge é realizado da seguinte forma:
O git identifica o ancestral comum dos dois branches
Se current = ancestral então fast-forward
Caso contrário tenta fazer o “merge” em current
Se não existirem conflitos cria um “commit” com dois pais, o current e o merge.
Se existir conflitos insere marcadores e não cria commit.
Mesmo quando existem conflitos e o “commit” não é criado o git lembra que estamos no meio de uma resolução de conflito, de modo que o próximo commit terá referência aos dois commits pais utilizados no merge.
Colaborando
Até aqui vimos como criar um repositório e trabalhar sozinhos nele. No entanto não é isso que normalmente fazemos no desenvolvimento de software, pois temos uma equipe e precisamos trabalhar de forma colaborativa. Depois de compreender os conceitos explicados até aqui, entender como a colaboração funciona é trivial. Basta ver que assim como a nossa história de desenvolvimento é um grande grafo direcionado acíclico, a mesma história de repositórios distintos são grafos paralelos com os quais podemos fazer merges e branches. Veremos agora alguns comandos e dicas para trabalhar com repositórios remotos.
O primeiro passo é copiar os dados de um repositório remoto para que possamos ver seu conteúdo, isso é feito com o comando git clone. Abaixo um exemplo onde eu copio o repositório do guia gitmagic, usado como base para esse post (veja os links no post anterior).
Image_2.png
A seqüência de operações de um git clone é a seguinte:
Cria o diretório e executa o git init
Copia todos os commits e heads
Adiciona uma referência ao repositório chamada origin
Adiciona heads remotos
Configura uma head para rastrear o head corrente remoto
Depois do clone um branch remoto está disponível e pode ser visualizado com o comando git branch -r como no exemplo abaixo.
Image_3.png
Podemos ver na imagem que foi criado o branch origin/master que é o branch local que rastreia o repositório remoto. Agora sempre que executarmos o comando git fetch as modificações serão baixadas do repositório remoto. Agora podemos entender melhor a função do git pull. O git pull [repositorio] [head remoto] faz o fetch das informações remotas e executa um merge do head remoto passado como parâmetro para o head corrente (HEAD). No entanto, quando temos um branch já configurado para rastrear um branch remoto não precisamos passar o parâmetro para o pull.
Para criar um branch que rastreia outro podemos criá-lo com o comando git branch --track [novo-branch-local] [branch-remoto]
Depois de trabalhar com dados dos branches remotos é natural que queiramos enviar as modificações feitas. Para isso usamos o git push [repositório remoto] [head remoto]. Sem argumentos o git push envia todos os branches rastreados. O push envia todos os commits, reaponta os heads remotos e reaponta os branches locais que rastreiam os branches remotos. Para fazer um “push” é importante que o merge remoto seja um fast-forward, para isso geralmente realizamos um pull pouco antes do push para evitar modificações no estado do projeto entre os dois comandos.
Por enquanto era isso, ainda tenho mais um post com algumas dicas de manipulação do histórico, mas fica para depois.

Filed under  //   desenvolvimento  

Comments [0]

Controle de versões com o Git

Semana retrasada tivemos uma oficina sobre o uso do Git na Softa.

Em primeiro lugar, gostaria de citar as duas principais referências que utilizei como guia:

O primeiro link dá uma explicação conceitual excelente sobre o assunto, enquanto o segundo aborda pontos mais avançados (magia negra). Para compreender o Git, e não apenas decorar comando, acho fundamental expor alguns conceitos iniciais:

  • Repositório: É um conjunto de commits e um conjunto de referências aos commits, chamadas de “heads”. O repositório é criado com um comando git init (inicia o repositório em qualquer pasta) ou git clone (copia um repositório). Todos os arquivos necessários para o git ficam em uma pasta oculta na raiz do projeto chamada ”.git”.
  • Commits: Cada commit é uma fotografia do estado dos arquivos no projeto em um instante de tempo. Os commits têm um nome, que é um hash sha1 e um apontador para o commit pai (o commit que deu origem a ele). Então sempre teremos um commit sem pai no repositório (o primeiro) e algumas vezes teremos commits com dois pais (resultados de merges). Logo, o repositório pode ser encarado como um grafo direcionado e acíclico de commits e manipular as versões do projeto é navegar nesse grafo.
  • Heads: Aponta para um commit, é apenas um apelido para o nome sha1 do commit em questão. É importante observar que sempre temos um head chamado HEAD (em maiúsculas) que aponta para o último commit realizado.

Depois de ver essa parte conceitual podemos entender melhor alguns comandos clássicos:

  • git log – mostra todos os commits de HEAD até o commit inicial.
  • git status – mostra arquivos modificados desde HEAD.
  • git diff – mostra todas as modificações nos arquivos do projeto desdeHEAD.

Para evitar um post excessivamente grande vou publicar a continuação desse artigo separadamente aqui no blog da Softa.

 

Filed under  //   desenvolvimento  

Comments [0]

Oficinas técnicas na Softa

Caros leitores, iniciamos na Softa oficinas semanais para difusão interna de conhecimento. Isso começou como um evento interno, mas nos pareceu uma boa idéia publicar o resultado dessas oficinas, pois escolhemos assuntos potencialmente úteis para a comunidade de desenvolvedores web brazuca.

As oficinas serão sempre conduzidas por um membro da equipe que tenha mais afinidade com o tema escolhido. Na primeira semana tivemos uma palestra sobreGit (ver próximo post), semana passada falamos sobre o framework CSSBlueprint.

E não percam nos próximos capítulos, em breve: BackgrounDRb e Cloud Computing.

 

Filed under  //   desenvolvimento  

Comments [0]

RS on Rails

Durante o dia 29 de agosto aconteceu o 1° RS on Rails, e nós da softa fizemos parte da organização e ainda demos algumas palestras. Pra quem quiser conferir, elas estão todas no slideshare.

Introdução ao Ruby on Rails
View more presentations from Juan Maiz.

CouchDB vs Postgres em Rails
View more presentations from Juan Maiz.

Otimizando Aplicações em Rails
View more presentations from Juan Maiz.

Câmara Municipal nos Trilhos
View more presentations from Juan Maiz.

Reutilização de código em aplicações Rails: Plugins, Gem e Engines
View more presentations from Juan Maiz.

Behaviour-Driven Development com Ruby

Segurança em Rails
View more presentations from Juan Maiz.

Filed under  //   rails  

Comments [0]

Mailee Metal

Hoje coloquei no ar uma nova versão do Mailee. As novidades são:
  • Reenviar mensagem
  • Desativar templates
  • Melhorias de performance
Para os desenvolvedores, a grande novidade é o uso do Metal, que entrou no Rails 2.3.2. Trata-se de um micro-framework embutido, para ser usado em chamadas muito usadas nas aplicações, como métodos Ajax ou coisas do gênero. No nosso caso, resolvemos aproveitar o recurso e reescrever o método “go/view” responsável por receber um “aviso” de que um contato viu uma determinada mensagem, buscar dados geográficos e armazenar o acesso no banco.

O código ficou mais ou menos assim:
go_1.png
Como você pode ver, o (\d+) recebe o ID da visualização ($1), sem precisar de abstrações como “params”. Além disso, meu controle “Go” continua funcionando 100% com os outros métodos. E veja alguns benchmarks:

Sem Metal: 16.45 requests/segundo Com Metal: 34.59 requests/segundo

Grande recurso, hein?

Filed under  //   desenvolvimento   mailee   rails  

Comments [0]