A successful Git branching model - Cheatsheet

Nestes dias estava a procura de um modelo de desenvolvimento usando Git, algo que oferecesse algum padrão de como lidar com o desenvolvimento de uma aplicação, com branches para correções de bugs, branches de desenvolvimento, etc. Encontrei um ótimo artigo sobre o assunto, que pode ser lido aqui. Gostei muito do modelo e estou usando nos meus projetos pessoais.

Ao ler o artigo, o autor cita vários comandos para serem usados durante o workflow de desenvolvimento com o Git. Para facilitar a adaptação ao modelo, extrai os comandos do workflow em uma cheatsheet de referência. Também criei uma versão já em PDF para facilitar.

Posted by fkreusch Tue, 24 Aug 2010 19:39:00 GMT


Testing Rails router paths on Rails console

The Rails console is a pragmatic way to test and experiment code inside a Rails environment.

Sometimes it can be helpful to have access to the Rails router url paths helpers, e.g. products_path, new_product_path, etc. To be able to use these helpers on Rails 3, while in the console run this:

include Rails.application.routes.url_helpers

Source

Posted by fkreusch Wed, 28 Jul 2010 18:06:00 GMT


Bzr: Branches have no common ancestor, and no merge base revision was specified

Aqui na empresa, temos um projeto base. Os projetos aqui desenvolvidos herdam deste projeto base.

Também, utilizamos o Bazaar como sistema de versionamento de código.

Quando vamos criar um projeto novo, precisamos fazer com que ele herde do projeto base. A solução que estamos utilizando é criar um novo branch para o novo projeto, e então fazer um merge com o projeto base. Assim, dali em diante conseguimos fazer updates a partir do projeto base. Porém, quando vai-se fazer o merge com o projeto base pela primeira vez, o seguinte erro é lançado:

bzr: ERROR: Branches have no common ancestor, and no merge base revision was specified

Isso acontece porque o novo branch ainda não tem um ancestral comum com o branch do projeto base, sendo assim o bzr não tem como saber a partir do que ele deve fazer o merge.

Neste caso, deve-se especificar o merge manualmente.  O seguinte comando (executado a partir da raiz do novo projeto) explicita isso:

bzr merge -r 0..-1 caminho/do/projeto/base

Assim, o Bazaar irá fazer o merge com o projeto base da revisão 0 até a última possível (-1). Deste momento em diante, os dois projetos terão um ancestral comum e será possível fazer merges com o projeto base sem mais problemas.

Posted by fkreusch Wed, 21 Jul 2010 20:11:00 GMT


A teoria da janela quebrada

Finalmente, após quase um mês de espera, chegou na última semana a minha encomenda da Amazon. Nela estão dois livros: Rework e The Pragmatic Programmer.

Rework é um livro rápido de se ler, ainda mais que eu já estava ávido por mais textos do pessoal da 37 Signals, e minha ansiedade me fez terminá-lo mais rápido ainda. Espero comentar sobre as idéias do livro em posts futuros.

Ontem (sexta) iniciei a leitura do livro The pragmatic programmer, e uma teoria no início do livro me chamou a atenção: a teoria da janela quebrada.

Segundo os autores, a teoria da janela quebrada surgiu de uma pesquisa que buscava descobrir por que alguns prédios em algumas cidades estão em bom estado e outros estão em estados precários. Os pesquisadores chegaram então a razão do problema: uma janela quebrada.

A teoria da janela quebrada diz que, a partir do momento em que existe uma janela quebrada, o ambiente passa por um processo acelerado de deterioração. Em um dos testes, os pesquisadores deixaram um carro estacionado por uma semana no mesmo local, sem tirá-lo dali. Ninguém mecheu no carro.

Na semana seguinte, os pesquisadores quebraram uma das janelas. Em algumas horas o carro estava em frangalhos. Uma janela quebrada é um gatilho que \\"dá permissão\\" para o surgimento de outras janelas quebradas.

Levando isso para o mundo da programação, você já deve ter passado por uma situação onde o seguinte passou pela sua cabeça:

\\"Bom, se o resto do código já está assim mesmo, vou fazer isso assim também.\\"

E assim softwares se encaminham para mais e mais janelas quebradas. Em alguns projetos, uma pequena decisão errada pode ser o suficiente para desencaminhar todo o resto.

Como pode-se enfretar este problema? Os autores incitam a consertar as janelas quebradas o mais rápido possível, de preferência assim que forem avistadas.  Não de tempo de elas se estabilizarem, o trabalho de consertar janelas quebradas no futuro será muito maior!

Posted by fkreusch Sat, 22 May 2010 21:34:00 GMT


Ubuntu 10.04 and Eqonomize

Hi there!

I have updated my Ubuntu 9.10 to 10.04 yesterday, and oh my how great it is looking! The new theme is really great, and this is the best Ubuntu version so far.

The onyl problem I had was with Eqonomize, a personal finance program I'm using. I was receiving this message when I tried to open it:

Bus::open: Can not get ibus-daemon's address.
IBusInputContext::createInputContext: no connection to ibus-daemon
eqonomize: symbol lookup error: eqonomize: undefined symbol: _ZN9QHashData13detach_helperEPFvPNS_4NodeEPvEPFvS1_Ei
<unknown program name>(25931)/: Communication problem with "eqonomize" , it probably crashed.
Error message was: "org.freedesktop.DBus.Error.ServiceUnknown" : " "The name net.sourceforge.eqonomize was not provided by any .service files" "

The solution is, until a new version is released, to compile it yourself within Ubuntu 10.04. But don't worry, this is a really simple process. First, run this into the command line:

sudo apt-get install debhelper quilt cmake docbook2x kdelibs5-dev

apt-get --build source eqonomize

sudo sudo dpkg -i eqonomize*.deb

And you're done!

 

 

 

 

 

 

 

Posted by fkreusch Sat, 01 May 2010 21:33:00 GMT


Rails 3 responders, JQuery 1.4 and empty json results

 So, I have been playing with Rails 3 for a while, and it is really great! One of the new things I'm liking on it is the concept of responders. It helps to thin your controllers and encapsulate same logic on the same place.

Rails 3 responders have a default behavior to deal with api formats, like xml and json, so you don't have to create a responder to deal with that. This week I was programming a tool in which I would use Rails 3 and JQuery 1.4 and json communication. The ideia was that the user would be able to create, edit and destroy items on the same page with ajax, not a big deal. My problems started when I was creating the update form. Rails was, for some reason, responding with an empty json during updates. On create functions, respond_with returns the model attributes jsonified.

As Rails was returning an empty json object, I was having problems on the Jquery side, as Jquery 1.4 does a strict parse of a json object. That means that an empty string does not parse to a json object, and so Jquery throws an error, and as I was using $.ajax function, I falled on the error callback instead of the success callback.

After a while I discovered that Rails does that on purpose (at least for now). On the Rails source file /actionpack-3.0.0.beta/lib/action_controller/metal/responder.rb, on line 154, the api_behavior method defines returns for gets, posts, and errors, and everything else just returns an empty :ok header. I did not have an answer for why the Rails team has made it this way, but I have found a possible motive.

Anyway, for this to work, I think there are two possible solutions. One would be to create a custom responder that would respond with an empty json object. The other one is to filter the response on Jquery side. For now I'm filtering the response with this:


$.ajax({ url: '/my_url', type: 'POST', data: form.serialize( dataFilter: function(data,type) { if(!data || $.trim(data) == "") return "{}"; return data; }, success: function(data, status, req) { //success behavior }, error: function(req, status, error) { //error behavior } });

That's it, maybe this can help someone else :)

Posted by fkreusch Tue, 30 Mar 2010 21:32:00 GMT


Segmentation fault no apache ao fazer Code Coverage com Cakephp

 Tive problemas ao tentar usar o Xdebug com os testes no CakePHP. Meu ambiente é um Ubuntu 9.10, Apache 2, PHP 5 com XDebug instalado via apt-get. Ao tentar executar os testes no Cake com code coverage report, o processo morria, e o seguinte erro aparecia no log do Apache:

[Tue Mar 23 09:58:38 2010] [notice] child pid 16792 exit signal Segmentation fault (11)

Encontrei nesta página uma solução que resolveu meu problema:

Altere a linha 115 do arquivo cake/tests/lib/code_coverage_manager.php para:

xdebug_start_code_coverage(XDEBUG_CC_UNUSED);

Pronto! 

Posted by fkreusch Tue, 23 Mar 2010 21:31:00 GMT


Instalando Bazaar server como serviço em windows server 2008

Aqui na empresa estamos usando o Bazaar como sistema de controle de versão. Estamos utilizando um repositório compartilhado em rede, mas estamos tendo muitos problemas com o Bazaar não conseguindo liberar os locks das pastas após dar commits.

Sendo assim, decidi tentar usar o servidor específico do Bazaar no Windows, instalando-o como um serviço.

Seguem os passos para instalá-lo no Windows Server 2008:

1 - Instalar o Bazaar normalmente no Windows Server.

2 - Instalar o Resource Kit Tools. Esta versão é para Windows Server 2003, mas não tive problemas usando-o no 2008 (não encontrei versão do Resource Kit Tools para o 2008). Precisamos do Resource Kit Tools porque ele contém o Srvany, que permite instalar qualquer executável como um serviço do Windows.

3 - Criar um serviço para o Bazaar: na linha de comando do Windows Server, digite 'sc create bzr_server binPath= C:\\\\Program Files (x86)\\\\Windows Resource Kits\\\\Tools\\\\srvany.exe DisplayName= \\"Bazaar Server\\"', levando em conta o caminho correto de onde o Resource Kit Tools foi instalado.

4 - Devemos agora configurar qual executável o srvany irá rodar como serviço. Para isso devemos editar o registro do Windows com o programa 'regedit'. Procure pela chave HKEY_LOCAL_MACHINE\\\\SYSTEM\\\\CurrentControlSet\\\\Services\\\\bzr_server, e adicione uma chave chamada 'Parameters'. Dentro da chave Parameters, crie um valor do tipo string chamado 'Application' e tendo como valor o caminho para o bzr server. No meu caso ficou assim:  

bzr server --directory=G:\\\\Repositorios --port=0.0.0.0:4155 --allow-writes

Pronto! Basta agora iniciar o serviço no Windows e você deverá conseguir acessar o repositorio. Para testá-lo você pode tentar o seguinte comando:

bzr check bzr://localdarede/pasta_do_repositorio

Espero que agora os problema com break-lock se resolvam =S

Posted by fkreusch Mon, 22 Mar 2010 21:30:00 GMT


Jacobdelafon França finalmente

Depois de um bom tempo de desenvolvimento, finalmente a nova versão do Jacobdelafon France foi ao ar! Acredito que todos na Lelak pudemos aprender muito no projeto. Este foi um verdadeiro projeto multilíngue! A empresa é americana, o site foi para a França e Marrocos, e nós aqui no Brasil no meio disso tudo!

O site foi desenvolvido em Java, com Spring e Ibatis no backend, por solicitação da Kohler Co. O cliente utiliza um banco de dados Oracle para os seus catalogos de produtos, e tivemos que desenvolver o site baseado no catalogo.

Pudemos exercitar várias boas práticas de desenvolvimento, com testes unitários em todos os módulos Java e conceitos de Unobtrusive Javascript com Jquery no front-end.

O resultado final ficou muito bom!

Parabéns a todos nós =D

Posted by fkreusch Fri, 19 Mar 2010 21:29:00 GMT


Simple Scrum Application

 So, I have now finally a 'releasable' version of Simple Scrum.

Simple Scrum is an application that I have developed for myself to help me manage personal software projects using a Scrum-like workflow. It contains products management, stories, sprints and burn-down charts.

I have learned a lot more about Ruby, Ruby on Rails, code quality and tests on the development process, and I think those are the best results I have obtained for now.

The application is released under the MIT open source license.

I hope it can help others (if not as an usable application, at least as a learning material!).

I have also deployed a demo version on Heroku (Heroku is so cool!). You can access it to have a sample view of the application.

The source code is hosted on Github.

There is a README file on the source code with install instructions.

Until next time!

Posted by fkreusch Wed, 20 Jan 2010 20:27:00 GMT