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.
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.
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:
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
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:
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.
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.
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.
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:
Os programadores ficam mais independentes em relação à plataforma;
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;
Pode-se aprender MUITO, já que há muitos projetos
abertos(http://github.com/ –
Milhares de projetos livres) e muita comunicação online;
Você tem farta documentação na internet;
Pode-se utilizar código de terceiros em seu projeto;
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;
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;
A rápida atualização de sua plataforma de desenvolvimento pode ser
um bom motivo para melhorias no software como um todo;
Contato com diferentes tecnologias – a maior realidade;
Migrações menos traumáticas, já que não é preciso comprar licenças
para rodar o projeto em um novo ambiente!
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!
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
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!*–*
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.
Ora, vejam só… aquele menino está virando gente grande. Ele até já faz
faculdade!
](/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!
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!