Muito obrigado Fábio Akita, Daniel Lopes, Max Lima e Egenial pelo profissional que sou

Este texto será uma breve abordagem pelo caminho que tracei até o atual momento da minha vida profissional.

Comecei em uma agência web sem ter conhecimento algum de web. Não sabia que diabos era uma div e para que servia o tal css. Porém como fazia na época CC, infelizmente não continuada, tinha conhecimento de algoritmo e C++ e logo fui direcionado da área de frontend para programação. Minha primeira linguagem foi o PHP. Comecei na empresa onde já existia um framework próprio, então os primeiros contatos com linguagem web foi entender o procedimento do framework caseiro o que fez as noites serem longas.

Graças a equipe de design e frontend sempre tive a oportunidade de estar com boas práticas para web, como tableless, porém não tinha sempre o retorno com programação. Começou a adentrar nas minhas ferramentas o JQuery, ExtJS (tive como referência inicial o Vedovelli) e o SEO (referência inicial o Fábio Ricotta). Infelizmente quando escutei a primeira vez sobre Rails fiquei desconfiado, pois estava em uma empresa onde tinha em sua cultura a utilização de coisas próprias e repudio aos frameworks ‘que fazem tudo’. Tive um grande atraso dentro desta cultura. Após um certo tempo que a empresa mudou as suas ideologias e, consequentemente, comecei com as minhas também.

Mudando de empresa fui para uma agência de publicidade que trabalhava com offline e online ao mesmo tempo. Uma equipe ótima e motivada. Outros conhecimentos foram adicionados: configurações de Apache, AS3 para auxílio aos programadores em Flash, Flex, Usabilidade, Marketing, Design, Zend Framework no dia-a-dia, ExJS mais aprofundado e MySQL mais aprofundado.

Uma nova ruptura e um novo momento para virada (aproveitem e leiam o livro O Momento da sua Virada, veja um review). Nova empresa, novos conhecimentos. Sempre tive muita vontade de trabalhar em Linux, mas não tinha suporte direto nos momentos mais difíceis. Minha primeira virada foi formatar máquina de trabalho e pessoal e colocar todas linux. Passei pelo OpenSuse, Fedora e atualmente estou no Ubuntu.

Neste meados para final de 2009 tenho a oportunidade de conhecer a Egenial. Começa meu primeiro curso, Rails do Básico ao Avançado (atualmente com o curso esta na versão 3 RC). Uma mudança de ideologias e sonhos para o futuro. Uma linguagem e um framework fantástico. Mesmo com a abstração de modelo do Zend onde se fazia 2 ou 3 linhas de conexão e mais algumas para juntar os objetos e o mesmo resultado eu obtinha em apenas 1 linha no Rails.

Meu twitter que antes era o observatório de poucas pessoas começa a crescer. Novas pessoas entram na lista: Daniel Lopes, Fábio Akita, Carlos Brando, Anderson Leite, Rain Bates, Nando Vieira, Cássio Marques, Vinícius Teles, entre outras. As melhores práticas estavam sendo executadas por algumas destas pessoas e cada uma colocando sua experiência em aberto para todos.

Porém o Rails não adentrou de vez. Algumas coisas ainda estavam sendo necessárias, não queria ser um cavalo paraguaio e/ou começar errado. E o ano de 2010 começou muito bem. Novos cursos da Egenial entram em jogo: Sysdeploy, Imersão Ruby on Rails e BDD on Rails. Novos conceitos começam a entrar na linha que pretendo seguir como filosofia profissional. Novas pessoas começaram a povoar a minha timeline: Sylvestre Mergulhão, Lucas Húngaro, José Valim, Guilherme Chapiewski, Luca Bastos, etc.

Porém não foi apenas o lado de programação Rails que aumentou:

  • Melhor conhecimento de configuração de vps
  • Melhor utilização do linux e automações de tarefas como backup e instalação de máquina de desenvolvimento e produção
  • Melhores práticas e configurações de banco relacional
  • Nosql
  • Java, Python, Bash, Ruby
  • Git, Pomodoro, scrum e técnicas ágeis

Além de seus screencasts e posts sobre programação, arquitetura e gerência, Fábio Akita agora esta com área de Screencasts pagos, o que veio a aumentar ainda mais o leque de ferramentas a se utilizar: RVM, Git e Vim. Não bastasse isto sua palestra no Consegui 2010 abriu novos estudos com o Solr que já estamos utilizando e otimização pesquisa de fulltext em 28 milhões de registros e aumentando para a casa dos 200 milhões.

Se não fosse a iniciativa do Carlos e Erenice de fazerem uma escola de treinamento online quem sabe não conheceria o Daniel Lopes e o Rails. E claro, minha esposa, financiadora e detentora de toda a renda familiar, não teria ficado receosa toda vez que chegava e falava: ‘Amor, to pensando em fazer um novo curso’. Porém, ela também não ficaria feliz com cada conquista profissional e financeira provida pelos cursos da Egenial.

Se não fosse o Daniel Lopes eu não teria conhecido quase que toda minha lista de followers e todo o conteúdo que hoje tenho. Não teria entrado em contato com ótimas práticas e pessoas.

Caso não tivesse conhecido o Fábio Akita não estaria sempre renovando os pensamentos com melhores tecnologias, técnicas e ferramentas para um melhor trabalho.

Se não tivesse feito aula com Alércio Bressano não teria conhecido Max Lima e também ótimos livros e estratégias para guiar minhas finanças, vida profissional e pessoal.

Caso não tivesse conhecido o Max Lima não estaria hoje conhecendo um pouco de muito, fazendo-me melhor na análise das coisas, e conhecido o grande conhecedor de OO, mestre em refatorar e amante de Starcraft, Rodrigo Almeida. Não teria aumentado a minha paixão por Linux, ter um verdadeiro laboratório em mãos e um companheiro entusiasta nas novas pesquisas.

Este final de ano de 2011 é para colocar todo o conhecimento em ordem e prática. Apenas consumindo para que o mais próximo esteja o surgimento do profissional que desejo com a filosofia traçada por todo este tempo. Acredito que cada pessoa da minha lista tem um papel neste progresso. Porém tudo tem um início, por isto, muito obrigado Fábio Akita, Daniel Lopes, Max Lima e Egenial pelo profissional que sou!

Selecionar melhor mirror para atualizar repositório do Ubuntu

Muitas pessoas instalam o Ubuntu e ao realizar o upgrade de seus aplicativos acham a velocidade um pouco baixar. Porém, por padrão, o repositório configurado é o servidor principal nos EUA. A demora se por este motivo: distância e link mais usado.

Para resolver este problema existem vários repositórios espalhados pelo mundo e alguns no Brasil. Para quem usa o Ubuntu com Gnome é só ir em repositórios e selecionar “Escolher melhor servidor” e pronto. O aplicativo irá rastrear todos os repositórios da lista e ver qual o melhor, naquele momento, para você utilizar.

Para fazer isto acesse o programa Synaptic e vá no menu: Settings -> Repositories.

Abrirá uma janela onde na primeira aba, Ubuntu Software, tem um campo chamado Download from que ao clicar irá abrir uma lista com a opção: Other

Ao selecionar abrir uma nova janela com todas as listas de repositórios. Você poderá escolher um manualmente ou clicar no botão: Select best server. Todos os repositório serão pingados e no final será selecionado o melhor para ti.

Todo muito bonito e fácil para quem utiliza o Gnome. Porém e se estiver usando o Ubuntu Server, como realizar este ‘scanner’ de repositórios ? Fazendo pesquisas em forums não encontrei uma resposta, porém encontrei uma aplicação em python que realiza este procedimento. Vamos aos comandos:

# Necessário ter o git e o pacote python-setuptools.
# Caso não queira instalar o git, pode-se baixar o projeto em tar.gz e descompactá-lo.
# http://github.com/hychen/getfastmirror
sudo apt-get install --yes git-core python-setuptools

git clone http://github.com/hychen/getfastmirror.git;
cd getfastmirror;
sudo python setup.py install;
cd ..;
sudo rm -rf getfastmirror;
sudo getfastmirror update -t;

Dentro do github do getfastmirror existe informações sobre instalação e comandos a serem executados. Esperem que gostem. Hoje o getfastmirror não sai dos meus scripts de instalação de vps e desktops do ubuntu.

Git: adicionar arquivos ao commit anterior

O Git é um versionador de código distribuido. Para quem quiser conhecê-lo melhor pode comprar o screencast do Fábio Akita.

Um dos comandos interessantes ensinados no screencast se da na situação onde o usuário adicionou arquivos e realizou o commit:

/tmp
$ mkdir teste

/tmp
$ cd teste/

/tmp/teste
$ touch arq1.txt arq2.txt

/tmp/teste
$ git init
Initialized empty Git repository in /tmp/teste/.git/

/tmp/teste
$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	arq1.txt
#	arq2.txt
nothing added to commit but untracked files present (use "git add" to track)

/tmp/teste
$ git add arq1.txt

/tmp/teste
$ git commit -m "Primeiro commit"
[master (root-commit) db9387b] Primeiro commit
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 arq1.txt

/tmp/teste  (master)
$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	arq2.txt
nothing added to commit but untracked files present (use "git add" to track)

Foi realizada modicações no seu código e foi adicionado ao stage e comitado. Porém teve um arquivo que não foi ao seu commit e você não quer inserir o código em outro commit. Para isto adiciona o arquivo na área de stage e depois realiza o commit inserindo o comando –amend

/tmp/teste  (master)
$ git add arq
arq1.txt  arq2.txt

/tmp/teste  (master)
$ git add arq2.txt

/tmp/teste  (master)
$ git commit -m "Primeiro commit" --amend
[master eaf340a] Primeiro commit
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 arq1.txt
 create mode 100644 arq2.txt

/tmp/teste  (master)
$ git status
# On branch master
nothing to commit (working directory clean)

/tmp/teste  (master)
$ git log --stat
commit eaf340a92610d58ceaeca9e4ee525ec761bd6a51
Author: Erich Kist <erichkist ... >
Date:   Wed Aug 18 09:28:07 2010 -0300

    Primeiro commit

 0 files changed, 0 insertions(+), 0 deletions(-)

Gitosis: O que fazer quando se perde o acesso ao gitosis-admin

O Gitosis é um repositório git open source do Tommi Virtanen. O procedimento de instalação pode ser visto no post Gitosis: Como Instalar.

Após a instação temos acesso as configurações do Gitosis via o repositório gitosis-admin. Inicialmente, apenas você tem acesso e pode-se adicionar outros usuários. Porém, caso você perca sua chave pública ou esta em um computador que não é cadastrado, você não tem acesso a este repositório. Consequentemente você não pode trabalhar nos repositórios marcados como privados.

Tomaremos como exemplo a seguinte chave pública:

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArK5rpbJHBfKQZ/plR+IUWKNsml02e20eUC28U5Vgp75JX1YC4wYurDQ== developer@ubuntu-desktop

Para esta ocasião poderemos fazer os seguintes passos:

  1. Acessar a sua vps via ssh.
  2. Adicionar a chave pública dentro das chaves autorizadas de acesso ao usuário git (/home/git/.ssh/authorized_keys): command=”gitosis-serve developer@ubuntu-desktop”,no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArK5rpbJHBfKQZ/plR+IUWKNsml02e20eUC28U5Vgp75JX1YC4wYurDQ== developer@ubuntu-desktop
  3. Adicionar a chave pública dentro das keys do gitosis-admin (/home/git/repositories/gitosis-admin.git/gitosis-export/keydir/). Lembrando que o arquivo deve o nome do seu computador, que esta na final da sua key, adicionado de .pub, nosso exemplo: developer@ubuntu-desktop.pub

Pronto, agora é só fazer o clone do repositório gitosis-admin, git clone git@SEU-SERVIDOR:gitosis-admin.git, e voltar a ter acesso aos seus repositórios.

Gitosis: Como Instalar

A utilização de repositórios descentralizados esta crescendo muito. Atualmente utilizo o GIT para manter o código das minhas aplicações e existirá um outro post sobre as vantagens desta ferramenta sobre as outras formas de versionamento.

Existem serviços de hospedagem de repositórios gratuito, como github, porém, o código ficará open-source, disponível para qualquer pessoa baixar. Para se ter repositórios privados é necessário se adquirir planos pagos nestes serviços de hospedagens.

Para as pessoas que necessitam de repositórios privados, para projetos de clientes, regra da empresa ou novos softwares por exemplo, e que não gostariam de pagar por estes serviços, independente de qual for o motivo, podem usar os projetos open-sources Gitosis e Gitorious. O Gitosis é um repositório remoto muito simples, e por isto ele será abordado primeiro neste blog.

Para instalar o Gitosis estarei utilizando como SO o Ubuntu-Server 10.4. Vamos para o passo-a-passo da instalação:

  • Instalar o openssh-server, como sudo, para se ter acesso a máquina em questão:
 apt-get install openssh-server 
  • Instalar, novamente como sudo, o pacote para se trabalhar com o git:
apt-get install git-core
  • Baixar o projeto do Gitosis:
git clone git://eagain.net/gitosis.git
  • Instalar o Gitosis:
cd gitosis
python setup.py install
  • Caso ocorra erros durante a instalar do Gitosis, como -bash: python: command not found ou ImportError: No module named setuptools, deverá instalar, como sudo, o pacote python-setuptools:
apt-get install python-setuptools
  • Após instalado o Gitosis cria-se o usuário Git na máquina:
sudo adduser \
    --system \
    --shell /bin/sh \
    --gecos 'git version control' \
    --group \
    --disabled-password \
    --home /home/git \
    git
  • Após a confirmação da criação do usuário git iremos adicionar a public key do nosso computador dentro do servidor que esta hospedado o Gitosis. Para criar a public key do nosso computador iremos executar o comando:
ssh-keygen -t rsa
  • Após copiado a public key do computador para o servidor, para efeito de tutorial estaremos declarando que a chave encontra-se dentro de /tmp/id_rsa.pub, iremos adicionar ao usuário git e atualizar o gitosis:
sudo -H -u git gitosis-init < /tmp/id_rsa.pub
  • Como medida preventiva iremos dar permissão de execução, como root, ao hook post-update do Gitosis:
chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
  • Pronto, nosso repositório remoto de Git esta funcionando com o Gitosis. Agora é só fazer o clone do gitosis-admin, que é por onde se adiciona usuários e cria-se repositórios.
git clone git@SEU-SERVIDOR:gitosis-admin.git

Toda vez que realizar uma modificação no gitosis-admin e realizar o push automaticamente as mudanças estarão vigentes, via o script post-update. Este post teve como base o post Gitosis – Git repository.