LikeFriendsPronto, mais um projecto lançado, mais um making of para podermos partir para outra. Não vou voltar a passar pelas coisas do costume (sim, voltei a usar a Yii, voltei a usar SASS e Compass) e também não vou voltar a falar do jogo do galo, nem da racionalização matemática por trás do LikeFriends.

Vamos lá.

Facebook Query Language (FQL)

A minha ideia era usar a Graph API, mas enquanto andava de volta da documentação, descobri a muito mais espectacular FQL. A FQL permite-nos aceder aos mesmo objectos que a Graph API, mas de uma maneira muito mais lógica, pelo menos para programadores: através de um subset do SQL. Infelizmente, é um subset mesmo muito sub, e algumas coisas triviais estão em falta: JOIN é mato (tem de ser tudo através de IN e sub-queries) e, incrivelmente, não tem, sequer, uma reles função COUNT(), que tanto jeito me tinha dado.

Permite multi-queries para poupar largura de banda (é assim que o LikeFriends vai buscar de 10 em 10 amigos), e a forma de uso é trivial. Por exemplo, para ir buscar todos os amigos do utilizador corrente (com nome e imagem):

SELECT name, pic_square
FROM user
WHERE uid IN (
    SELECT uid2
    FROM friend
    WHERE uid1 = me()
)
ORDER BY uid ASC

Uma coisa a ter em especial conta durante as chamadas FQL é a forma como os id dos utilizadores, likes e por aí fora são devolvidos: devido à grande popularidade do Facebook, os id há muito que ultrapassaram o limite dos inteiros de 32 bit; como tal, os números são interpretados no parse do JSON como sendo inteiros de vírgula flutuante e apresentados em notação científica, o que nos faz perder a referência ao id original. Um pain in the ass. Felizmente, alguém está atento do lado de lá, e a chamada pode ser complementada com um &format=json-strings, forçando a FQL a devolver os id como strings e não como inteiros.

Para gerir facilmente as chamadas à FQL, acabei por criar uma função genérica em Javascript (usa jQuery) que aceita uma string ou um array de strings FQL e um callback a ser chamado quando os resultados forem devolvidos (além do token de acesso, claro):

function execQuery(token, query, callback) {
    var i, q;

    if (typeof query === 'object') {
        q = '{';
        for (i in query) {
            if (query.hasOwnProperty(i)) {
                q += '"' + i + '":"' + query[i] + '",';
            }
        }
        q = q.substr(0, q.length - 1) + "}";
    } else {
        q = query;
    }

    $.getJSON(
        'https://graph.facebook.com/fql' + '?q=' + encodeURIComponent(q) + '&format=json-strings' + '&access_token=' + token + '&callback=?',
        function (res) {
            var i, ret = {length: 0};
            if (res.data && $.isArray(res.data)) {
                if (res.data[0].fql_result_set) {
                    for (i = 0; i < res.data.length; i++) {
                        ret[res.data[i].name] = res.data[i].fql_result_set;
                        ret.length++;
                    }
                } else {
                    ret = res.data;
                }
            }

            callback(ret);
        }
    );
}

Google Web Fonts vs. WebINK

WebINKUma das coisas que descobri durante as férias foi que o serviço Google Web Fonts é uma bosta, o que eu até já desconfiava.

Ainda antes das férias, descobri que, no IE9, a fonte que eu tinha escolhido não apresentava caracteres com diacríticos. Nenhum. Comia-os, pura e simplesmente. Deduzi que fosse algum problema de encoding, ou que a fonte não suportasse o charset latin-1 (apesar dos outros browsers estarem correctos), sei lá. Estava com as mãos cheias nos dias que antecederam as férias, o site ainda não tinha sido lançado e decidi que podia esperar mais uns dias.

Por uma daquelas coisa que é irritante até dar jeito, o computador do meu pai tem um problema qualquer no sistema de updates, e que, nos poucos fins-de-semana que lá estou, ainda não tive tempo de arranjar, que o impede de ter o IE9. Resolvi dar uma vista de olhos ao LikeFriends na miséria que se espera do IE8, e qual não é o meu espanto quando, para além de também não mostrar os caracteres acentuados, ainda revertia a página para quirks mode, rebentando completamente com tudo o que era margens, posicionamentos e ordem em geral.

Retirei a inclusão da web font, et voilà: impecável (ou melhor, tão impecável quanto o IE8 permite, o que, por padrões normais, é miserável).

Eu estava cansado (as minhas férias foram feitas de inúmeros assuntos para resolver), o que tinha levado para trabalhar era um "intrabalhável" portátil com umas ridículas 17 polegadas e, depois de ter confirmado que não tinha sido distracção minha (isto é, o Google Web Fonts dizia que esta fonte tinha todos os caracteres que era suposto), nem sequer me preocupei mais em perceber qual era exactamente o problema, mordi a bala e mudei de serviço.

Fim do Google Web Fonts para mim. Com tanta porcaria que um tipo tem que se preocupar quando está prestes a publicar um site, não me faltava mais nada do que não poder confiar no serviço de web fonts.

Já tinha ouvido falar maravilhas do Typekit, mas os preços pareceram-me abusivos para as minhas necessidades. Algumas leituras mais tarde, e estava a olhar para o WebINK, com condições muito mais favoráveis. A biblioteca de fontes é tão boa ou melhor que a do Typekit e o licenciamento é muito mais justo, sendo consideradas as visitas únicas e não as pageviews (o que faz sentido: se a fonte já está em cache, qual é o serviço prestado?).

Entre pagar 20, 50 ou até mesmo 120 dólares por ano e estar sempre com o credo na boca à pala das fontes, foi um no brainer.

Partilhar no Sapo Links Partilhar no del.icio.us Partilhar no Digg Partilhar no Twitter Partilhar no StumbleUpon Partilhar no MySpace Partilhar no Facebook

Comentários Deixar um comentário

 Categorias
 Arquivo
 Projectos em Destaque
 Últimas Postas no Blog
 Últimos Comentários do Blog