Robson de Almeida

CTO, working and have fun building things on www.superplayer.fm

Use o “this”, ou porque contexto importa.

this, usar ou não usar, eis a questão.

Na verdade essa é fácil: usar. Seja this, self, me, _, . (ponto), ou qualquer outra coisa, sempre utilizo a palavra-chave que identifica que o atributo que estou acessando faz parte da instância em questão.

Porque? Identificação de contexto. Quando leio um trecho de código e vejo:

this.myAwsomeService

.. sei que é um atributo da instância e que, por isso, todas as regras relativas à atributos de instância da linguagem se aplicam a ele.

Por outro lado, quando me deparo com:

myAwsomeService

… não sei nada sobre esta variável. Se estiver no corpo de um método pode ser um parâmetro, uma varíável ou um atributo. Qual a implicação em alterar seu nome? Qual seu tipo (pra linguagens estaticas)? É seguro utilizá-la?

Utilizar o this não serve apenas para diferenciar atributos de variáveis, serve pra diferenciar variáveis de atributos (wtf!) e, assim, identificar o contexto no qual uma variável e/ou atributo está inserido.

Acredite, isso facilita muito na leitura do código.

Git aliases

Eu já havia escrito um post com algumas dicas na utilização do Git. O que não escrevi foi sobre os alias que utilizo.

Pra quem não conhece, o Git permite criar pseudônimos para seus comandos (ou até mesmo grupo de comandos). Na prática, eles servem como atalhos. Alguns utilizo diariamente, por exemplo:

git st

É um alias pra

git status -s

Segue a lista completa dos que utilizo:

Notem o alias pra mostrar a lista de alias. :)

MongoDB Management Service

Estamos usando o MongoDB em algumas partes do Superplayer.

Algo que estimamos muito é a capacidade de monitorar nossas aplicações, bases de dados, etc (métricas, métricas, métricas!). Pra isso utilizamos soluções como o Graphdat, New Relic e recentemente o MongoDB Management Service.

Achei bem bacana a solução e a documentação também é muito boa. Só tivemos um probleminha com as permissões que o agente do MMS requer pra acessar a(s) instância(s) do MongoDB. Então, pra quem passar pelo problema, fica a dica:


        > use admin
        > db.addUser({
            user:'mms-monitor',
            pwd:'your-pwd',
            roles:['clusterAdmin','readAnyDatabase']
        })
    

O usuário deve pertencer ao

database admin

e mesmo em instâncias standalone o MMS precisa do papel de administração de clusters do MongoDB. Isto é um problema conhecido que eles pretendem resolver. A role

'readAnyDatabase'

serve pra acessar estatísticas de cada database (tais como quantidade de inserts, queries, etc).

Ordenando uma coleção por uma propriedade booleana.

Ontem me deparei com uma situação um pouco inusitada. Precisei ordenar uma coleção com base em uma propriedade booleana (true/false). Queria que os items em que a propriedatrue

estivessem no topo da coleção. Solução?


var things = new[] {
    new { prop = false },
    new { prop = true },
    new { prop = true },
    new { prop = false }
};

things.OrderByDescending(thing => thing.prop);
// [{prop=true},{prop=true},{prop=false},{prop=false}]

Afinal tudo é 0 ou 1.

Migrando para o tumblr.

Estou abandonando o Octopress e migrando para o tumblr.

Quero voltar a fazer posts regulares e preciso de uma maneira fácil e rápida de escrever e publicar. O Octopress é ótimo pois dá muita liberdade para escrever os posts. Mas estou procurando uma solução que possibilite escrever posts pequenos e rápidos.

Dos blogs que conheço, o tumblr foi o que mais me agradou até o momento. Vou experimentar …