Um pouco sobre o Vim
Æ!!
Aqui começa uma série de artigos sobre por que eu gosto de usar o VIM para programar.
Uma das primeiras coisas que eu gostaria de comentar é sobre a quebra de paradigma que você deve ter quando começa a usar um editor como o vim que tem vários modos de operação, ou seja, não é mais apenas digitar, pois cada modo de operação tem o seu modo de agir. Os modos de operação são os seguintes:
- Inserção
- Visual
- Normal
- Comandos
Modo de inserção
O modo de inserção é um modo simples para se inserir texto sem nada muito complexo, você se sentirá usando um notepad se usar somente o modo de inserção.
Modo visual
Com o modo visual você pode selecionar facilmente trechos de texto, linhas inteiras e blocos de texto. Um exemplo bem legal de uso de blocos no Vim pode ser visto no blog do TaQ.
Modo normal
Agora sim as coisas ficam legais! No modo normal, que é o modo que você mais fica no Vim, você pode fazer as coisas mais interessantes!
Ok, falei…falei…e não mostrei o por que o modo normal é tão poderoso né? Bem, são coisas como essas:
- Dentro de aspas podemos dar um ci” e ele já excluiria todo o conteúdo que está dentro das aspas e deixaria você em modo de inserção para inserir um novo conteúdo
- Parar em cima do número 20 e quer adicionar 7? Apenas faça 7<ctrl+a> e ele fará a soma em cima desse número
- E se ao invés de soma vc quiser a subtração dos valores acima? Apenas faça 7<ctrl+x> e ele fará a soma em cima desse número
- É claro que você não vai ficar repetindo esse monte de coisas que você fez aí em cima se tiver várias ocorrências e você não quiser fazer um “find and replace”, por que você pode usar o . (ponto) para fazer a sua ultima ação novamente.
- Quer trocar as linhas de posição? Moleza! ddp ( sendo dd para excluir uma linha, que fica no buffer, e p para colar a linha do buffer )
- Está no começo da linha e quer ir para aquele parentese? f( e pronto, você já estará lá!
- Quer ir para um caracter antes do parentese? t( ta na mão!
Enfim…Tem muitas outras coisas legais a se fazer sem que você precise tirar a sua mão do teclado.
Modo de comandos
E o modo de comandos é onde você tem uma segunda linguagem de programação alem da que você está usando pra programar, e lá você pode tanto usar comandos de loop como:
:for i in range(1,10) | put ='192.168.0.'.i | endfor
OBS: créditos ao Sergio nesse post
Que imprime uma faixa de IPs de 192.168.0.1 até 192.168.0.10. Ou você pode alterar as funcionalidades e opções do editor utilizando :set ou outras comandos interessantes.
Use o Vim como ele foi feito para ser usado
Outra quebra de paradigma que deve ser usada é usar “hjkl” para se movimentar pelo texto, sempre usando os dedos indicadores sobre o “j” e o “f” que é o padrão de digitação, e você vai ser que você vai precisar tirar a mão do teclado para fazer outras coisas poucas vezes, e pelo menos para mim as coisas parecem bem mais fáceis. Isso lhe força a sempre usar <esc> ( ou <ctrl+[> ) após fazer alguma coisa, deixando o modo normal livre para uso.
Customização
O Vim pode ser facilmente incrementado com plugins, temas e outras coisas que tornam ele bem customizável, e você pode deixar ele com a sua cara. Atalhos são facilmente configuráveis no seu .vimrc, assim como configurações como highlight de busca, espaçamento para scroll, e mais muuuiiitas opções que obviamente não caberão nesse post.
Concluindo
A idéia desse post é falar que para se usar vim você precisa estar disposto a mudar muita coisa que você sabe, e a curva de aprendizado não é uma das mais fáceis, mas quando você está no meio dela você percebe o quanto é legal e acaba se viciando no negócio! hehe
Como o Vim é bem configurável pode acontecer de você ficar tentando implementar ele para ficar igual ao seu antigo paradigma ( modo de inserção para sempre ), mas isso não vai de ajudar muito e vai te abstrair toda a força do Vim.
É isso! Nos próximos posts sobre vim pretendo postar dicas, referências legais e falar bem mais aprofundadamente de algumas ferramentas.
Há braços
Instalando o Allegro 4.2.2 no Linux x86
Æ!!
Como mencionei no meu ultimo post eu parcicipei do GameJam do Itaú cultural e desenvolvi um jogo com Allegro. Agora com o jogo pronto estou criando arquivos executáveis para divulgar e tinha me esquecido da diferença de arquitetura no Linux, assim compilei apenas para meu Linux x64.
Quando me dei conta que não funcionou no computador do trabalho por que eu tinha um binário x64, eu tive que instalar o Allegro no computador de lá para poder fazer funcionar também em Linux x86. Pensei eu:
“Vai ser moleza, assim como foi instalar o Allegro 4.2.2 no notebook que é x64″
E lá fui eu:
./configure make
Ué…Deu um problema bizarro com o FNSTSW no make, então não vai ser tão fácil assim…E lá vamos nós procurar na internet. Procurando eu descobri que tem realmente um erro em uma parte Assembly do código do Allegro para x86 que está errada na versão 4.2.2 que provavelmente foi consertada nas versões futuras, mas nesse caso tive que arrumar na mão:
No arquivo src/i386/icpus.s alterar a seguinte linha (tirar a que tem um menos e colocar a que tem um mais):
fninit movl $0x5A5A, %eax - fnstsw %eax + fnstsw %ax cmpl $0, %eax jne is_fpu_not_found
E assim eu consegui compilar certinho!
Quando tentei rodar meu binário me deparei com o seguinte erro: “error while loading shared libraries: liballeg.so.4.2: cannot open shared object file: No such file or directory” ¬¬
Pesquisando na internet novamente eu descobri que estava faltando eu adicionar o diretório /usr/local/lib ao meu LD_LIBRARY_PATH:
No meu .bashrc:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
OU
Editar o meu arquivo /etc/ld.so.conf e incluir /usr/local/lib no final do arquivo e depois rodar o comando ldconfig como root
Com isso eu consegui finalmente compilar o jogo e fazer o meu binário rodar o meu jogo normalmente.
Espero que seja útil para mais alguem.
Há braços
GameJam
Æ!!
Como alguns sabem no final de semana passado ( dias 7, 8 e 9 ) eu participei do GameJam do Itaú cultural.
Nesse evento os participantes tinham que formar equipes de até 4 pessoas e fazer um jogo em 48 horas, sendo que o tema ao qual o jogo devia responder só seria passado na sexta feira as 19, e teríamos até as 19 horas do domingo para entregar o jogo pronto utilizando qualquer plataforma para desenvolvimento.
Pois bem, o que eu falei acima resume bem as regras do evento, agora vamos a minha situação. Fiquei sabendo na segunda feira pelo CrociDB que teria esse concurso e que tinha até quarta feira para se cadastrar, e eu tinha acabado de fazer uma mini-cirurgia para tirar um dente, portanto estava sentindo dores e tomando 4 tipos de remédios diferentes e não pude confirmar nada devido a esse motivo, mas a vontade era grande. Enquanto eu não confirmava o CrociDB ia procurando pessoas para a equipe.
Quarta feira ( ultimo dia para inscrição chega ) e eu já estava um pouco melhor e decidi me inscrever! Procurei por outras pessoas para compor a equipe, alguns descartei logo de cara por que sabia que ia ficar arrumando desculpinha para não participar, ou não teria peito o suficiente para aguentar a competição, então nem chamei, outros sabia que infelizmente não poderiam participar por motivo de força maior ( fez falta hein Rafael Masoni ), e teve ainda os últimos que eu achei que participariam e fui chamar mas me decepcionaram…
Início do contest
Sexta feira tudo preparado e lá vou eu as 19 para o Gamejam (que foi na faculdade Anhembi Morumbi), e após me perder um pouco ( para variar ) cheguei em cima da abertura e recebemos o tema:
“Maquinas inovadoras” “Maquinas e computadores podem tomar decisões inovadoras?”
E com isso lá se vai o nosso pensamento…Criar um robô em 2d no estilo side scroller? Criar um robô fazendo algum tipo de shooter? Criar um braço robô que faz algo? Como ele seria inovador? Ele seria inovador? Como são as decisões dos computadores atualmente?
E com essas várias perguntas chegamos a conclusão que um computador sozinho não pode tomar decisões inovadoras, ele apenas é programado para uma determinada finalidade, nunca cabe a ele as decisões finais com novas idéias. Com isso em mente nosso game foi baseado num braço robô que distribui caixas num armazém seguindo sua própria ordem, supostamente tentando uma maneira inovadora de organização de cores que pode ou não estar certa, e cabe ao jogador organizá-la da melhor maneira possível. Obviamente a idéia inicial não se fechou tão fácil, e fomos desenvolvendo ela de acordo com a evolução do game.
Com uma base inicial desenvolvida passamos para o desenvolvimento!
Preparamos o ambiente com Allegro e algumas classes que o CrociDB usa para facilitar algumas coisas e eu dei uma introdução sobre o workflow do Git para trabalhar utilizando controle de versão. Usamos um roteador para conectar os 2 notebooks e compartilhar um repositório para os códigos, por ssh mesmo, que infelizmente deixava a transferência muito ruim devido ao uso do Cygwin no Windows, mas não fui um grande empecilho, foi apenas chato.
Tenho que admitir que eu sou um zero a esquerda em Allegro e fui com a cara e a coragem participar desse contest, mas eu sabia que isso me traria muita experiência, por que eu sei que o CrociDB conhece bastante de Allegro e de desenvolvimento de games em si, e eu só comprovei isso durante todo o contest, ele já conhecia bem o conceito de desenvolvimento de games e tem bastante experiência com erros que podem acontecer.
Ficamos programando desde as 21 mais ou menos até as 5 da manhã e resolvemos ir para casa descansar para voltar no sábado a noite e ficar até terminar o game. A primeira vista achei o pessoal das outras equipes meio acuado, cada equipe isolada em suas mesas, excluindo apenas o pessoal que já se conhecia ou que era da faculdade.
Momento Hard work
Voltei no sábado as 19:30 para a programação e o CrociDB já estava por lá programando fazia alguns minutos e já tinha resolvido alguns probleminhas. Então já começamos a programar outras funcionalidades e fazer os desenhos para o jogo, que por sinal foi a parte mais difícil para nós, tendo em vista que nenhum dos dois tem a arte do desenho assim como as outras equipes tinham ( vi muitos desenhos e trabalhos legais ). Eu assumi uma boa parte dos desenhos para deixar o CrociDB mais focado na programação.
Durante o domingo tivemos vários problemas, como o não funcionamento do teclado do notebook do CrociDB, nos fazendo perder um tempo e ir para o laboratório usar um teclado USB, que levou a outro #fail, por que levamos o roteador e não prestamos atenção que a fonte não era bivolt, assim queimando a fonte do roteador…Ou seja…Nada de Git na parte final do projeto…
No laboratório conseguimos finalizar o jogo e encontrar umas midis legais até as 14:30 mais ou menos, quando preparamos as coisas para entregar o projeto final. Ao entregar o projeto e ver a organizadora testando percebemos que faltou uma dll para o allegro funcionar no Windows, e tivemos que pegar o projeto de volta umas 2 vezes para encontrar a dll certa, mas enfim funcionou.
Networking
Depois de entregar o projeto aproveitamos para fazer um Networking com alguma das outras equipes. Durante o evento estávamos sempre vendo algumas pequenas cenas dos outros jogos e algumas ferramentas, e uma que chamou bastante a atenção foi da equipe que estava ao nosso lado (Danilo, Gabriel, Theo e o Mario que eu não conheci) que estava desenvolvendo um game totalmente em blender! (assim que eles divulgarem o game eu posto o link aqui). O game deles ficou muito legal e o pessoal é muito gente fina também, foi muito válido conhecê-los!
Vi por cima mais alguns games que estavam em fase de produção ainda, e conheci algumas outras pessoas como o Danilo Vin (só conheço ele assim até agora…hahaha) que estava fazendo as artes do grupo dele, muito boas por sinal, mas não vi o jogo finalizado. Revi tambem o Speeder já tinha visto na campus party mas não tinha conversado muito.
Considerações
Finalizando, eu acho que esse contest foi muito legal,dormi apenas 40 minutos de sábado para domingo, mas foi minha primeira experiência com competição de desenvolvimento de games, meu primeiro contato mais próximo com Allegro, revi alguns conceitos de C++, conheci pessoas interessantes, vi alguns jogos serem criados do zero… Mesmo se nosso jogo não ganhar (o que é provável….hehe) esse contest valeu muito a pena! O nosso game não ficou exatamente como queríamos por que além dos problemas, não conseguimos aplicar todas as idéias que tínhamos em apenas 48 horas.
Uma coisa que me deixou muito feliz foi ter conseguido fazer esse jogo usando apenas Software Livre! Utilizamos Inkscape, Gimp, Allegro e GNU/Linux. O Croci utilizou Windows para compilar a versão windows do jogo, e não tivemos sequer um problema de compatibilidade entre plataformas.
Para quem quiser dar uma olhada no nosso game, pode baixar ele no GitHub (o código não está um dos melhores, mas leve em consideração que foi um contest de 48 horas…hehe):
- executáveis na pasta bin
Há braços
Instalando gems do GitHub manualmente
Æ!!
Esse vai ser um post rápido para relatar um problema que eu tive ( e ainda estou tendo ) para instalar gems do GitHub.
Por algum motivo bizarro ( nem tanto assim, parece ser dns, mas já tentei opendns e nada ) a página http://gems.github.com não abre de maneira nenhuma, enquanto a navegação continua normal sem nenhum problema…A consequência disso é que eu não consigo colocar o source do github nas minhas configurações do Rubygems.
Tendo em vista que eu não conseguiria utilizar gem install para nenhuma gem que vinha do GitHub tive que dar um jeito de instalar manualmente.
O que fiz foi acessar a página do GitHub referente a gem que eu queria instalar, que no caso é a kitabu do fnando, pegar o link de clone e clonar:
$ git clone git://github.com/fnando/kitabu.git
Mas ae que está o lance que eu demorei para encontrar ( noob ), para uma gem ser instalada localmente ela precisa estar empacotada, e no GitHub você baixa direto o código fonte. Para empacotar:
$ gem build kitabu.gemspec
Agora sim eu tenho o arquivo kitabu-0.3.3.gem que eu posso utilizar para instalar localmente! Para instalar é só utilizar o gem install padrão informando o arquivo a ser instalado:
# gem install kitabu-0.3.3.gem
E pronto! Lá está a minha gem instalada!
Espero que isso seja útil para mais alguem que precise empacotar as suas gems.
Há braços
Opera Unite
Æ!!
Hoje é o dia em que o pessoal da Opera falou que iria reinventar a web, e o que eles fizeram foi lancar o Opera Unite!
A idéia do Opera Unite é tornar a internet mais interligada, fazendo com que você consiga compartilhar arquivos, conversar com amigos e outras coisas apenas usando o browser.
Eu nunca utilizei Opera ( não por que eu sou contra, e sim por que eu nunca precisei e sempre estive confortável com o Firefox, principalmente para desenvolver ), mas achei interessante a campanha de marketing e a idéia deles com esse novo produto. Muitos disseram que isso não era reinventar a web ( realmente fo um pouco de exagero de marketing…hehe ), mas eu acho que isso pode revolucionar muita coisa, só pela nova idéia mesmo! Quem sabe daqui a pouco tempo tenhamos nossos browsers participando bem mais da web.
O que o Opera Unite traz
- Fridge Adicionar notas no estilo Post Its
- Media player Para compartilhar suas musicas, você apenas ativa ele no Opera e ele abre uma página compartilhada onde você pode apenas clicar e ouvir! =)
- Web Server Para compartilhar páginas HTML! É possível criar um index.html e compartilhar ele, assim você terá uma página sendo que seu computador será a hospedagem.
- Photo Sharing Para compartilhar os seus albuns de foto.
- The Lounge Ferramenta para hosting de um chat, bem interessante por sinal.
- File Sharing Para compartilhamento de arquivos ( obviamente )
Todos os serviços são protegidos por senha assim que são disponibilizados para manter a sua privacidade, mas você pode deixar publico se quiser. Os serviços tambem vem desabilitados por default quando você instala o Opera, mas é facil habilitar:
Após instalar o Opera você verá no canto inferior esquerdo um ícone parecido com um ventilador, após clicar nele você verá um assistente para criar uma conta no Opera.com e habilitar os serviços no Unite ( é simples ).
Considerações finais
Eu gostei bastante da ideia do pessoal do Opera, e acho que traz bastante interatividade para a internet. Talvez aqui no Brasil ainda não seja uma realidade um compartilhamento entre computadores bom usando a internet devido as nossas conexões, que na maioria das vezes não é rápida o suficiente para dar uma boa impressão para o serviço.
Parabens a equipe do Opera pela inovação!
Há braços
Usando Git em projetos do Google Code
Æ!!
Resolvi escrever esse post depois de começar a contribuir para o projeto do vimbook, que está no Google Code.
Como o Google Code só usa Subversion ( infelizmente ) e eu sou do mundo Git, resolvi usar a ferramenta Git para lidar com SVN, o git-svn! Com ele você pode clonar um repositório SVN e utilizar como Git, e na hora de “commitar” ele retransforma em SVN.
Já havia tentado usar Git-svn no meu projeto de plugin para wordpress, mas nesse caso eu já tinha um repositório Git e fui tentar mandar para um repositório SVN vazio, o que só me deu dor de cabeça, e no fim das contas acabei jogando para um repositório SVN qualquer só para mandar para o WordPress. No fim das contas, depois desse problema com o WordPress eu só tinha abominado o git-svn, mas agora eu estou começando a descobrir o seu valor.
Meus agradecimentos ao Carlan Calazans que me deu umas dicas de Git-svn quando eu comecei a tentar usar no projeto do plugin, que naquele momento não me fora de grande serventia, mas depois ajudaram bastante!
Bem, agora chega de papo-furado e vamos a parte que interessa…Códigos e How To!
Primeiramente vamos baixar o código ( estou usando como exemplo o vimbook ):
git-svn clone https://vimbook.googlecode.com/svn/trunk/ vimbook --username seu.usuario.do.google
Ao digitar isso ele vai pedir uma senha que ele gera para a sua conta, e seus commits ficarão ligados a sua conta do Google. Para obter a sua senha é só acessar a página de settings do google code com a sua conta.
Após digitar a sua senha ele vai começar a receber todos os commits do SVN e converter para Git! O processo pode ser um pouco demorado, dependendo do tamanho do repositório SVN que você está importando.
Quando terminar você terá um repositório Git normal funcionando, e você pode trabalhar normalmente com ele, fazendo seus branchs e tudo mais!
Vamos ver como seria um fluxo simples para você fazer uma alteração usando branch e mandar de volta para o repositório:
git checkout -b new_changes
Branch criado! Faça as suas alterações… Após as alteraçoes feitas faça os commits normalmente como se faz no Git e volte ao master para ver o que há de novo no repositório central:
git checkout master git-svn rebase
Com isso ele vai receber as novas alterações do repositório! Agora é a hora de fazer um merge do seu branch com a ultima versão do master:
git merge new_changes
Se tiver algum conflito resolva-os normalmente e agora é hora de enviar as suas alterações novamente ao Google Code:
git-svn dcommit
Pronto! Você está contribuindo para um projeto do Google Code utilizando Git.
Há braços
Search
Recent Posts
WP Cumulus Flash tag cloud by Roy Tanck and Luke Morton requires Flash Player 9 or better.
Categories
Personal Links
Archives
- May 2011
- April 2011
- March 2011
- January 2011
- December 2010
- October 2010
- September 2010
- August 2010
- July 2010
- April 2010
- March 2010
- February 2010
- January 2010
- December 2009
- November 2009
- October 2009
- September 2009
- August 2009
- July 2009
- June 2009
- May 2009
- April 2009
- March 2009
- February 2009
- January 2009
- December 2008
- November 2008
- October 2008
- September 2008

