pyLottery: um nova roupagem, estilo, mecânica e muito mais

Recentemente houve uma grande tarefa de reescrita do código do projeto pyLottery, que agora está modular (com uma classe base e as demais loterias a herdando), com sistema de cache local (utilizando o shelve, nativo do Python) e funcionando como uma API mesmo, para ser integrada a outros sistemas e seus próprios scripts, por exemplo. Também a lógica de funcionamento foi melhorada, agora utilizando a data e intervalos dos concursos para evitar chamadas desnecessárias ao site da CAIXA. Confira mais detalhes do projeto desde seu lançamento.

Todo mundo quer jogar

Quando era pequeno, eu costumava sonhar que um dia viveria de games: sentado e jogando o dia inteiro seria a forma como ganharia a vida, detonando games e escrevendo para as revistas que comprava tão logo chegavam nas bancas. Um sonho um tanto utópico, eu reconheço, mas que demonstrava a paixão pelos jogos eletrônicos (e o nobre desejo de trabalhar naquilo que se gosta). Muito tempo se passou, e estou realmente ganhando a vida sentado e escrevendo… mas não sobre os games que imaginava, mas de certa forma, ainda tenho jogos envolvidos no meu trabalho.

Já é do conhecimento de quem já esteve aqui antes que tenho um certo apreço pelas loterias, e até já criei alguns scripts para ajudar na conferência e montagem de jogos para as Loterias Mega Sena e Lotofácil (PyLottery). Mas poucos sabem que já desenvolvi um jogo para Desktop em Java (Quem diria, mas foi durante a faculdade) e por muito pouco não acabei fazendo parte, indireta e diretamente, de um dos mais recentes ramos da TI: os jogos online.

Os jogos online abriram um grande leque para os jogadores do mundo real também. Antes, para jogar poker com alguém que não a máquina, você tinha que ir até a casa de um vizinho ou amigo. Com o advento da Internet e dos jogos em rede, você pode jogar exatamente agora com uma pessoa em qualquer lugar do globo através de sites como o partypoker, só pra citar um exemplo dos jogos de cartas, fora uma infinidade de outros gêneros como tabuleiro, estratégia, RPG, Simuladores, e uma aí vai uma lista quase-sem fim… Tem para todos os gostos!

Muitas empresas de marketing digital perceberam que o ser humano, sempre competitivo, não resiste a um bom jogo, pronto a desafiar seus colegas, ávido para ver seu nome entre os TOP 10 do ranking. E com a explosão das redes sociais, esse comportamento se tornou ainda mais latente. Especialistas também perceberam que alguns desses elementos da mecânica dos jogos (Competição, Ranking, Emblemas, Pontuação/Dinheiro, etc)  poderiam ser explorados em outros tipos de aplicativos dentro das redes sociais, e aí começam a surgir aplicativos e campanhas digitais com cara de jogos, incentivando os usuários a interagir em troca de recompensas e badges, inflando o ego dos jogadores, e consequentemente alavancando as marcas envolvidas. Algumas vezes, a mecânica do jogo está tão bem inserida em nichos diversos que os usuários mal percebem que estão competindo por status entre a comunidade.

Esse fenômeno, chamado nos portais e na mídia social de gamificação (alguns clamam ter surgido dentro das corporações para incentivar a adoção de metodologias e processos, outros nas redes sociais), chegou num nível que já existem empresas que oferecem serviços especializados de desenvolvimento e manutenção de estratégia de jogos online para marcas, como a Social Mediation, além de outras que se especializaram em jogos sociais como a Zynga que tentam emplacar  até uma moeda virtual em larga escala. Chegou num nível que as próprias produtoras de games querem aproveitar esse movimento e tornam suas grandes produções em pequenas peças dentro de um game maior, de escopo global, onde cada conquista dentro do jogo individual incrementa o ranking dentro das redes (PSN, XBoxLive, Steam, Origin, Newgrounds entre outras) dando visibilidade para o jogador, fazendo com que ele jogue cada vez mais, o que por sua vez, vai gerar mais lucro para os donos da rede, os produtores dos jogos e as marcas anunciantes. Todo mundo quer jogar, independente do lado do tabuleiro em que se encontra, e no final, todos acabam ganhando.

E você? Ficou ansioso para ver sua marca e seus produtos caírem no gosto das redes sociais? A THLopes em breve apresentará alguns cases de aplicação dessas estratégias. Ou quem sabe ficou apenas com vontade de encarar uma partida online? Também estamos aí!

Testando Javascript

javascript-testing-570x190

Outro dia, um grande amigo me perguntou como fazia para automatizar o teste do Javascript desenvolvido em vários browsers. Para ser bem sincero, eu não utilizo nada além de vários browsers diferentes instalados em cada uma das minhas máquinas (virtuais ou não), cada uma com um sistema operacional diferente  (Ubuntu 10.10 e 11.04 , Windows XP, Vista e 7 e carente de um Mac por enquanto…).

Realmente, mesmo usando o Synergy e uma boa configuração de rede local, ainda fica um pouco trabalhoso… Então resolvi pesquisar algumas ferramentas que poderiam ajudar nessa árdua tarefa, e creio que muitos vão agradecer pelas dicas e até colaborar com dezenas de outras nos comentários. Nem todas visam automatizar o teste em escala, mas todas vão facilitar alguma fase dos testes para que seus projetos tenham um excelente resultado

BrowserShots

Essa ferramenta vai mostrar pra você como seu site irá “renderizar” em diversos browsers diferentes, sem que você os tenha instalado, permitindo que você identifique problemas de compatibilidade mais rapidamente (principalmente se você se valeu de javascript para trabalhar estilos/css)

ScriptCover

Recém-lançado pelo Google, essa ferramenta fornece estatísticas de cobertura de código linha-a-linha, permitindo que você analise (em tempo real até) quantas vezes uma determinada instrução foi executada durante o uso da página. Essa extensão do Chrome funciona desde o instante inicial de carregamento da página e continua enquanto o site vai sendo utilizado, sem atrapalhar o usuário. Excelente  também para debugar códigos complexos, que porventura venham a falhar misteriosamente em algum browser específico (para não dizer logo I.E.).

js-test-driver

Esse framework permitirá que você trabalhe na filosofia TDD (Test Driven Development), integrando-o a sua IDE (Eclipse, por exemplo) para automatizar a execução dos testes tão logo você modifique os arquivos do projeto. Exige uma preparação dos cases de teste, mas já que estamos falando de TDD, isso não será o problema. Confira nesse post a apresentação na época de lançamento onde é demonstrada a praticidade do mesmo.

QUnit, a filosofia jQuery também nos testes

QUnit é um poderoso framework de Unit Test que o ajuda a depurar o código. É escrito por membros da equipe de jQuery, e é o conjunto de testes oficial para este famoso framework. Ele é também o suficiente para testar qualquer código JavaScript regular, e é ainda capaz de testar Javascript server-side, através de algum mecanismo de JavaScript como Rhino ou V8.

Jasmine

Não, você não vai contratar uma estagiária chamada Jasmine para fazer o le-rê-le-rê de abrir páginas e págians em todas as máquinas do seu escritório. É um framework BDD, Behaviour Driven Development, ou seja, desenvolvimento orientado a comportamento. Para quem acha o TDD coisa do passado.

W3C Validator

Não menospreze-o. Alguns acham cafona, outros, nem sequer ouviram falar. Mas pense: se o código está de acordo com Standards, a chance de renderizar igual na maior parte dos browsers também é maior! E também, pode ser um excelente atalho para encontrar algum problema misterioso que não consta nos consoles.

Firebug

Apesar de usar o Chrome a maior parte do tempo, ainda acho a versão Firefox da extensão de desenvolvimento web mais prática e rápida para ajudar no debug, teste e inclusive no desenvolvimento (quem nunca desenvolveu uma linha de código javascript direto no console pra depois copiar e colar no código-fonte que atire o primeiro mouse!)

E você, usa alguma outar ferramenta para facilitar o testes Javascript? Por favor, ajude-nos!

Meu Ambiente de trabalho em 7 itens

Development tools, THLopes.comSeguindo a “corrente do bem” que chegou até mim via Rocha C. Bruno, segue minha lista para Meu ambiente de trabalho em 7 items (Nossa, um número realmente pequeno para esse tipo de brincadeira…), vamos lá:

  1. Python: A linguagem mestre, sempre liderando qualquer projeto. Curiosamente, até em projetos onde o Python não é a linguagem principal, ele exerce sua influência: estou sempre pensando “Pythonicamente” para resolver problemas, aplicando o Zen que a comunidade e linguagem prega. Não é apenas linguagem: é Filosofia!
  2. Django: Nem todos projetos são Web, ou 100% Web. Mas os que atendem a esse requisito, sempre tem esse maravilhoso framework direcionando os trabalhos.
  3. Javascript: Para muitos, é algo bizarro. Para mim, que trabalho a maior parte com interfaces e interação do usuário com os sistemas, é a arma. E como já disse para muitos amigos de trabalho: “Para mim, Javascript é o Python rodando diretamente no Browser.
  4. jQuery: Muitas vezes esse framework chega a se sobrepôr a própria linguagem. Em muitos projetos, dá até pra dizer que temos “mais linhas jQuery do que Javascript puro”. Mas o que isso quer dizer? Que Web sem jQuery realmente é muito mais difícil e demorado! Gosto tanto do framework que criei até uns plugins
  5. Firebug: Se eu tiver de nomear um dos items como minha Shuriken, o Firebug seria sem dúvida! Muito prático, rápido e a ferramenta ideal para “prototipar” qualquer interface. Ainda mais se o cliente estiver do seu lado, esperando uma resposta sua: Você abre o console, algumas linhas e opções depois, você mostra pra ele como pode resolver  o problema… e negócio mais próximo de estar fechado!
  6. Mercurial-HG: Devo confessar, antes usava SVN, e quando a vida me exigiu mudar para Mercurial, tive um pouco de resistência. Mas hoje, alguns meses depois, só vejo vantagens, principalmente  após usar os excelentes recursos do Bitbucket e saber que várias boas ferramentas que utilizo, inclusive o próprio Python, tem seu código armazenado por lá, e também que Mercurial é uma ferramenta escrita em Python.
  7. Eclipse: Não vou morrer se o Eclipse não abrir… mas vou ganhar várias horas de lazer com algumas praticidades que ele traz: com essa IDE, eu centralizo diversas outras ferramentas, libraries, automatizo alguns procedimentos, debugs, vários ambientes de execução e depuração customizados com fácil acesso… enfim, um verdadeiro Canivete Suíço! Claro, ele tem que estar turbinado com alguns plugins, tais como: Aptana, PyDev, Mercurial, etc.

E assim como outros fizeram, vamos às menções honrosas de outras ferramentas que fazer uma pontinha no ambiente com menos frequência. Percebam que muitas ferramentas são claramente feitas para rodar em Windows, geralmente para suprir necessidades que são padrão no Linux

  1. Ubuntu: Companheiro de cada dia! Geralmente uso Windows por conveniência (sempre compro notebooks com Windows original pré-instalado, e dá uma preguiça de instalar e configurar um novo sistema… apesar de que nas últimas versões de Ubuntu esse processo estar facílimo!). Certas coisas na vida de um desenvolvedor só são possíveis num sistema Linux, e Ubuntu é o mestre nesse aspecto. Um exemplo é um projeto recente que estou trabalhando que envolve processamento de vídeo, usando FFMpeg e PyFFMpeg. Praticamente impossível de rodar em Windows… porém, no Linux, é mamão-com-açúcar
  2. Google App Engine SDK: Ferramenta essencial para projetos dentro da plataforma do Google. Quando usando com Eclipse, basta integrar no ambiente ou no projeto e o Eclipse/Pydev faz toda a interface pra você.
  3. Putty: Quando não no Linux, uma ferramenta essencial para conectar-se a sistemas remotos.
  4. iPython: Mão na roda para agilizar alguns comandos experimentais e em testes (Experimentando o DreamPie também)
  5. XAMPP: Outra ferramenta indispensável quando desenvolvendo fora do Linux
  6. phpMyAdmin: Muita gente torce o nariz, mas essa ferramenta é muito boa e prática. Só não é melhor por não ser em Python, :D .
  7. Skype: Para conversar com a equipe, clientes, e até fazer pequenos treinamentos
  8. DropBox: Backup e compartilhamento entre máquinas remotas. Uso principalmente como backup automatizado do meu ambiente de desenvolvimento remoto e até apaga alguns
  9. VMWare Player: Para rodar mais de um sistema de uma vez, permitindo testes (compatibilidade e usabilidade) mais rápidos e práticos
  10. VNC / Win2VNC: Também para rodar mais de um sistema de uma vez, mas aqui, para controlar mais de uma máquina com um único teclado e mouse, não para visualização remota (inclusive, acho horrível…)
  11. Pencil (Firefox Add-on): Para fazer Wireframes

Para dar continuidade, convido os amigos para seguir nesse trend:

@mauriciosl
@jeanwainer
@ergalassi
@marcelohonorio
@odranoel
@Ericgoes
@marcosriso

zipando arrays javascript como no python

Essa dica rápida é para aqueles que estão procurando uma forma de mesclar (merge) arrays em Javascript como é feito em Python através da função zip():

function zip() {
    var merged=[],arrays=[],lengths=[];
    for(var i=0; i<arguments.length; i++) {
        arrays.push(arguments[i]);
        lengths.push(arguments[i].length);
    }
    for (var i=0; i < Math.min.apply(null,lengths); i++) {
        merged[i] = arrays.map(function(value) { return value[i]; });
    }
    return merged;
}

Enjoy!!!

Republicando: jQuery, de olho nos gaps

Estou republicando esse artigo pois o mesmo recebeu um comentário, e ao mesmo tempo, é um assunto que ainda assola muitas pessoas que utilizam jQuery, principalmente quem começou com ela há pouco tempo.

Qual webdeveloper nunca usou jQuery[bb]? Muito difícil… Bom, mas vamos falar de algo que nem todos os developers[bb] que usam jQuery se atentam ao programar. Eu mesmo fui pego hoje por um gap que me tomou alguns minutos da tarde…

Algumas funções (na verdade, a maioria nesse framework) recebem outras funções como callback, aquela função que será chamada assim que a instrução/função chamada acabar seu procedimento. Um exemplo muito utilizado em aplicações reais são as

Funções Ajax

load( url, data, callback )
Returns: jQuery. Load HTML from a remote file and inject it into the DOM.

jQuery.get( url, data, callback, type )
Returns: XMLHttpRequest. Load a remote page using an HTTP GET request.

jQuery.getJSON( url, data, callback )
Returns: XMLHttpRequest. Load JSON data using an HTTP GET request.

Continuar lendo