Philip Sampaio

Tecnologia e opinião.

Estatísticas De Submissões No SPOJ

Por volta de setembro do ano passado iniciei o desenvolvimento de uma app para mostrar estatísticas e promover desafios entre usuários(equipes) do SPOJ.

Percebi que já existiam algumas pequenas aplicações para estatísticas, mas nada que promovesse desafios entre usuários(times). Eu queria unir as duas características. Mas o tempo passou e essa app acabou ficando de lado.

Foi então que decidi lançar o que foi feito, mesmo com alguns bugs.

O site fica no Heroku, e você pode acessar aqui. Não sei se vou continuar desenvolvendo essa aplicação, mas já valeu a pena pois aprendi muito com isso!

Usando Tmux E Vim Para Pair Programming Remoto

Há um tempo li o post do Gustavo Dutra e achei muito legal a possibilidade de fazer programação em par via terminal remoto. Usando o screen é possível compartilhar facilmente uma sessão do terminal e sair programando. Mas não consegui compartilhar informações de outras sessões abertas. Foi então que conheci o tmux.

image

Com tmux é possível criar sessões com várias “janelas”(inclusive com separação vertical e horizontal) e usar 256 cores sem problemas.

Seguindo o mesmo esquema do post do Gustavo, separei em “host” e “client”.

Host

Na máquina que servirá como servidor de desenvolvimento será preciso criar uma sessão:

1
$ tmux -2 -S /tmp/pair new-session -s PairProgramming 

Os parâmetros significam:

  • -2 : Aceita 256 cores
  • -S : Cria o socket no caminho especificado(no caso, /tmp/pair)
  • new-session -s: Cria uma nova sessão com o nome atribuido(no caso, PairProgramming)

Você vai precisar dar permissão no arquivo socket criado:

1
$ chmod 777 /tmp/pair

Feito isso, é só abrir o vim e aguardar o client =)

Client

Para que funcione, o client precisa estar conectado ao host via ssh com um usuário qualquer(o importante é ter acesso ao arquivo socket em /tmp/pair).

Depois de conectado, basta executar o comando:

1
$ tmux -2 -S /tmp/pair attach-session -t PairProgramming

O parâmetro “attach-session” faz o client se conectar à uma sessão alvo(-t nome-da-sessao)

Comandos básicos do tmux

Para ativar algum comando do tmux, por padrão(é possível mudar)você precisa precionar Ctrl+b

Comandos básicos:

  • Ctrl+b ? # Lista todos comandos
  • Ctrl+b c # Cria nova janela
  • Ctrl+b n # Vai para próxima janela
  • Ctrl+b % # Divide a janela atual em duas verticais
  • Ctrl+b “seta para direita|esquerda” # Move entre as janelas divididas
  • Ctrl+b : # Abre o modo comando do tmux

Conclusão

É possível fazer muita coisa com o tmux. Para saber mais, sugiro que siga os links:

UPDATE (01/04/2013):

Chris Hunt palestrou na LA Ruby Conf 2013 sobre o Vim e Tmux. Ele faz o que este tutorial apresentou, e muito mais: https://www.youtube.com/watch?v=vHdiXoHKSgU

Rankings Com Redis

Se você deseja criar um ranking para sua aplicação, é muito provável que precisará saber:

  • o total de registros;
  • a posição de um elemento específico;
  • os primeiros colocados;
  • os ultimos colocados;

Além disso, você vai querer inserir e retirar elementos de forma transparente e rápida.

Para isso, recomendo que use o Redis e seus sorted sets! Funciona de maneira bem simples e pode ser implementado em várias linguagens que possuam o cliente do Redis Acredito que seja muito mais rápido e eficiente do que armazenar em uma base convencional, fazer consultas ordenadas por score e salvar posição.

Exemplos

Todos os comandos a seguir estão muito bem(!) documentados no site do redis

Adicionando membros ao ranking

Comando: ZADD

Cria o ranking(sorted set), se não existir, e adiciona “membro_um” com 100 pontos de score:

1
ZADD rankingx 100 "membro_um"

Adiciona “membro_dois” com 422.1 de score e “membro_tres” o 142 de score:

1
2
ZADD rankingx 422.1 "membro_dois"
ZADD rankingx 142 "membro_tres"

“Selecionando” membros do ranking por range

Comando: ZRANGE e ZREVRANGE

Você pode selecionar membros de determinado ranking passando um range:

1
ZRANGE rankingx 0 10

O comando acima vai devolver 11 elementos, ordenados de forma crescente. Para ordenar de forma decrescente, utilize o ZREVRANGE.

Obtendo a posição de um elemento

Comando: ZRANK e ZREVRANK

Algumas vezes é preciso saber a posição de um elemento relativo a todo o ranking. Isso se torna um pouco complicado quando se faz utilizando SQL e bancos convencionais. No Redis é muito simples:

1
ZRANK rankingx "membro_tres"

Para pegar a posição relativa ao ranking ordenado de forma decrescente, utilize o ZREVRANK:

1
ZREVRANK rankingx "membro_tres"

Total de membros no ranking

Comando: ZCARD

O total de membros de um determinado ranking pode ser obtido com:

1
ZCARD rankingx

Conclusão

O Redis foi muito útil em uma historia onde era preciso otimizar a performance de páginas de rankings no Kademi. Especialmente porque usávamos vários rankings na mesma página e fazíamos grandes consultas para saber a posição atual de um membro relativo ao ranking. Utilizamos Ruby e o cliente redis-rb, e foi bem legal ver os resultados(a página em questão carrega em média 10x mais rápido agora)!

Há vários outros comandos disponíveis para Sorted set e outras estruturas de dados. Para saber mais sobre o Redis e testar os comandos em questão, acesse o site do projeto e siga o @antires, seu criador.

Pacotes Extras Para Enterprise Linux

Para quem tem servidores com instalações do CentOS fica complicado instalar alguns pacotes, pois eles não existem nos repositórios oficiais e é preciso compilá-los e instalá-los manualmente. Isso é legal para determinados programas como servidores web, mas fica bem chato quando é algo que não precisa de tanto.

Para contornar este “problema” o pessoal do Fedora criou o EPEL(Extra Packages for Enterprise Linux), que disponibiliza milhares de pacotes para seu CentOS, Red Hat Enterprise Linux e Scientific Linux.

Instalando o EPEL

Baixe uma das versões disponíveis:

EL 6:

1
$ wget -c http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm

EL 5:

1
$ wget -c http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm

EL 4:

1
$ wget -c http://download.fedoraproject.org/pub/epel/4/i386/epel-release-4-10.noarch.rpm

Para instalar:

1
# rpm -iv epel-release-5-4.noarch.rpm

Ruby E O Início De Minha Carreira

A linguagem Ruby foi um grande acontecimento em minha carreira. Carreira esta que só está começando. Justamente por estar no início, foi muito importante para que eu começasse a ter contato com coisas importantes, muito além da linguagem.

As primeiras linhas que escrevi em um projeto real foram códigos de teste. Esse foi o primeiro grande conceito que veio junto com a linguagem: o TDD. Logo no início tive contato Scrum e pair programming. Metodologias incríveis e que eu provavelmente não conheceria tão facilmente. Acredito que essa cultura de desenvolvimento ágil e inovação tem muito a ver com a comunidade Ruby. São pessoas geralmente abertas à ideias que possam melhorar o desenvolvimento de software. São desenvolvedores pragmáticos!

Isso tudo certamente -foi- está sendo bom pra mim. Eu já era muito ligado ao -movimento- “universo” open source e gostava bastante de Python, então foi muito legal começar a trabalhar com Ruby!

Conheci pessoas muito espertas que me influenciaram(e influenciam) na busca pelo conhecimento, não necessariamente na linguagem Ruby. Não acho que Ruby é a melhor linguagem do mundo, mas com certeza é uma das melhores para se conhecer. A verdade é que todos que trabalham ou vão conhecer a linguagem terão contato com conceitos muito importantes.

Recomendo a todos que deem uma chance ao Ruby. Para começar: http://www.ruby-lang.org/pt/– Site da linguagem em português http://groups.google.com/group/ruby-sp – Grupo de usuários Ruby de São Paulo http://tryruby.org/ – Try Ruby in your Browser http://rubyonrails.org/ – Ruby on Rails – Framework Web – Você precisa conhecer! =)

Software Livre E O Desenvolvimento Do País

Uma grande revolução vem acontecendo há alguns anos: a adoção de tecnologias de código aberto para o desenvolvimento de softwares. Essa tendência vem se mostrando cada vez mais forte no Brasil. Posso ver através das propostas de emprego divulgadas em vários sites que o conhecimento por algo que envolva software livre está cada vez mais sendo requisitado. As principais tecnologias estão diretamente ligadas à Web. Acredito que o melhor foco de atuação é relacionado às tecnologias abertas! Há muitos motivos para o projeto ser baseado essencialmente em código aberto. A visão quase “romântica” de ligar Software Livre ao desenvolvimento do país tem explicação:

  1. Os programadores ficam mais independentes em relação à plataforma;
  2. Há muito mais chance de contribuir para “comunidade”(empresas, hobbistas, hackers, a própria equipe, etc) quando trabalha se com código aberto – dessa forma, todos ganham;
  3. Pode-se aprender MUITO, já que há muitos projetos abertos(http://github.com/ – Milhares de projetos livres) e muita comunicação online;
  4. Você tem farta documentação na internet;
  5. Pode-se utilizar código de terceiros em seu projeto;
  6. Você expõe sua habilidade ao mundo. Sendo assim, para sobrevivência do projeto(livre), você será “forçado” a escrever um bom software, mesmo que isso demore um pouco mais;
  7. O software, que pode ser uma biblioteca que a ser usada em seu projeto, tem qualidade em relação à bugs, devido à quantidade de usuários testando e reportando erros que escaparam dos testes;
  8. A rápida atualização de sua plataforma de desenvolvimento pode ser um bom motivo para melhorias no software como um todo;
  9. Contato com diferentes tecnologias – a maior realidade;
  10. Migrações menos traumáticas, já que não é preciso comprar licenças para rodar o projeto em um novo ambiente!
  11. Uma comunidade apaixonada por tecnologia, que sempre tem vontade de crescer!

Acredito realmente que deve-se buscar alternativas abertas, pois isso pode salvar o seu projeto!

Android SDK No Fedora 12 X86_64

Esse tal de Android me deixa bem animado com a programação para dispositivos móveis! Parece um bom investimento aprender a desenvolver para celulares… Bem, eu queria muito saber como é rodar um sistema desses, emulado. Sei que a Google especifica um sistema 32bits para rodar, porém o meu sistema é de 64bits. Não desisti e corri atrás de informações. Consegui encontrar uma mensagem no mainlist do grupo android-developers do groups(google) relacionada a isso.

Resumidamente: precisa-se instalar bibliotecas 32 bits, mas a lista é grande, então rode e instale tudo com:

#yum install glibc.i686 glibc-devel.i686 libstdc++.i686 zlib-devel.i686 ncurses-devel.i686 libX11-devel.i686 glibc.i686 ncurses-libs.i686 libgcc.i686 ncurses-libs.i686 libstdc++.i686 libX11.i686 zlib.i686 SDL.i686 libXext.i686 libXv.i686 libXrandr.i686 alsa-lib.i686 alsa-plugins-pulseaudio.i686 Em seguida rode o seu sistema emulado:

$./emulator -audio alsa @nomedasuaAVD

image

Não abordei a instalação do SDK porque é fácil pra caramba. Na verdade é só baixar e descompactar. Agora vou estudar mais sobre isso… quem sabe eu consiga construir uma boa app!*–*

Aprendendo Django No Planeta Terra

Eis uma tecnologia promissora: o Django Framework. Para quem não conhece, o Django é como uma grande coleção de bibliotecas e rotinas prontas, feitas para agilizar o desenvolvimento de um sistema web. Por exemplo: em um site, sempre haverá as rotinas de adicionar, editar e excluir uma determinada informação. Programando da forma “clássica”, sem framework, você terá que criar cada processo na “mão”. Quando não há muitas coisas para criar, fica fácil, mas se é um sistema com muitas coisas para se editar, aí o bicho pega! Com o Django, você só cria uma classe modelo, com o tipo de informação. Daí ele cria todo o processo de edição de determinada informação. Isso não fará com que você não tenha contato com a linguagem de programação, mas simplificará todo o processo. Esse é o papel do Django! Você pode obter mais informações no site da comunidade brasileira de desenvolvimento Django. Se ficou interessado e deseja começar a aprender, vai no link http://www.aprendendodjango.com/ e surpreenda-se! Mesmo se você não souber programar muito bem! Mas terás que entender bem o padrão MVC para progredir com mais facilidade no curso. Ainda não tive tempo para terminar o curso online, mas fiquei super animado com o que vi! Espero encontrar muitos sites, em um futuro próximo, sendo desenvolvidos sob o Django.

Agora Sou Um FEDERAL!

Ora, vejam só… aquele menino está virando gente grande. Ele até já faz faculdade! image](/wp-content/uploads/2010/03/if10.png) Estou no Instituto Federal de São Paulo, meio que sem ter planejado, e adorando muito o curso de Análise e Desenvolvimento de Sistemas! A instituição é um tanto desorganizada, mas as aulas são ótimas(há exceções, claro)! Meu título, ao terminar o curso, será de tecnólogo, mas isso não é mais um problema! Tô fazendo o que gosto! Talvez ciência da computação fosse legal, mas duvido que eu estaria tão animado pra ir às aulas! Além disso, o pessoal de lá é muito gente boa!

Algumas Mudanças

Acho que se eu disser novamente que vou recomeçar a postar, você irá rir disso. Pois bem, não direi isso. Quero dizer que estou vivo e que aconteceram coisas muito legais nesse tempo todo! Fiz 18 anos de idade! A liberdade agora está estampada na minha testa! XD Me alistei no serviço militar, o que não foi nada legal porque tive que ir até 3 juntas por aqui(pq não sabia qual era e me informaram errado)! Mas foi uma boa experiência! Bom, o melhor é que estou trabalhando (supostamente) com o que gosto de fazer! Ser desenvolvedor web! Bom, vou fazer cursinho no meu tempo vago, mas quando tiver tempo e arrumar meu PC(minha placa-mãe foi pro saco!) eu volto a postar. Abraços!