O logótipo “Sapo Blogs”, assim como a palavra “Sapo”, neste contexto, são marcas registadas da PT Comunicações.

Se o título vos parece comprido, apertem os cintos de segurança, que esta posta vai ser tão atribulada como comprida. Antes de mais nada, algum enquadramento…

Como nem tudo na vida é Internet, tecnologia, programação e quejandos, tenho uma listinha de sites e blogs que me obrigo a visitar quase diariamente (para além dos dois jornais “em papel” diários – o JN e o Record, se querem mesmo saber), para não perder a conexão com a life out there. Devo confessar que o que começou, já há alguns anos, como uma necessidade para não perder o comboio da informação, se transformou rapidamente numa espécie de vício: até tenho sintomatologia de desmame se fico mais do que um dia sem notícias nacionais.

Logo Sapo Blogs

Sendo a política um dos temas que não dispenso, existem, além dos meios de comunicação normais, quatro blogs políticos que sigo com maior ou menor assiduidade: o Blasfémias, maioritariamente para me rir um bocado, e depois o 31 da Armada, o Arrastão e, finalmente, o Jugular. Acaba por ser neste último que arroto algumas postas de pescada, quando me sobra tempo – o que é raro, por sinal.

Pois, é isso mesmo: entre dois sites que tivessem o mesmo ranking nas pesquisas, o mais rápido terá agora um bónus.

A notícia apareceu, como é habitual nas notícias relativas à pesquisa da Google, no blog para webmasters da própria Google, no dia 9 deste mês. Alguns dias mais tarde – como é normal – a notícia foi publicada pelo Público.

Nessa página do Público pode, aliás, assistir-se à discussão entre dois webdevs, em que um sabe, claramente, do que está a falar e outro não. Deixo, como adivinha, à vossa análise.

Quanto à notícia em si, não podia ficar mais satisfeito. O tempo de carregamento das páginas é uma grande preocupação minha e da empresa onde trabalho, e passamos bastante tempo a optimizar cada site, seja ao nível das queries à BD, limpeza e optimização do código, até à maneira como é servido o resultado final, com compactação e minificação dos ficheiros JavaScript e CSS, tempos de expiração relevantes e por aí fora.

Já era mais que tempo deste esforço dos webdevelopers ser recompensado. Apesar desta medida ter um peso no ranking que se adivinha ínfimo, é, definitivamente, um passo na direcção correcta.

Comentários Nenhum comentário Continuar a ler Continuar a ler »

Acho que é preciso morar numa caverna para ainda não ter ouvido falar n’Os Azeitonas, uma das novas coqueluches do panorama musical português. Mesmo que não saibam quem eram, ficam já a saber que são os responsáveis por “quem és tú, miúúúúda”

Apesar de ser apreciador de boa música, ainda mais quando é de artistas portugueses e cantada em português, poucas coisas me fariam falar aqui de uma banda ou de um artista – excepto atitudes verdadeiramente excepcionais; como esta d’Os Azeitonas (os sublinhados são meus):

O nosso novo álbum não risca, não ganha pó, não se perde, não é roubado, não é um roubo, não fica por devolver, não ocupa espaço na estante, não ocupa espaço no porta-luvas, não vem numa caixa que parte, não exige que se deixe crescer a unha do dedo mindinho para abrir o plástico que o envolve, não é composto por uma base plástica de policarbonato e por uma camada refrexiva feita de liga metálica de alumínio, prata ou ouro, não demora mais do que 450 anos para se decompor nem alimenta a fome voraz de nenhuma multinacional pouco escrupulosa. E é como os bonés dos partidos durante os comícios: cabe na categoria das coisas que são bonitas, úteis, encerram em si toda uma ideologia política e sao GRÁTIS!

(retirado do site oficial d’Os Azeitonas)

Apesar do tom semi-cómico do comunicado, acertam em cheio – como, aliás, seria a sua intenção.

Finalmente tive algum tempo para concluir a implementação básica das tries, na sua variante em caracteres. As duas funções que faltavam implementar foram relativamente simples – a eliminação, que eu contava que me desse alguns solavancos durante o percurso, acabou por ser trivial e demorei mais tempo a testar do que a implementar; nem queria acreditar que tivesse ficado a funcionar à primeira…

Tanto o método de contagem como de eliminação são alterações do método de listagem, pelo que conseguirão navegar pelo novo código facilmente. Foram feitas algumas correcções ao nível do coding style, para respeitar o upper camel case, habitual em C#.

Os ficheiros mais recentes estão, como é habitual, na página do projecto.

Comentários Nenhum comentário Continuar a ler Continuar a ler »

Na continuação desta posta, venho agora falar-vos de sombras.

O Imagick tem uma instrução própria para gerar sombras, shadowImage, que aceita quatro parâmetros: opacidade, sigma, x e y. Uma das vantagens mais fascinantes é que, se a imagem passada tiver transparência, a sombra segue o contorno da mesma. Ideal para usar com botões, ícones…

O que é?

A extensão Imagick é uma extensão para PHP para criação e modificação de imagens, que usa a API ImageMagick. Está disponível através do PECL ou, apenas para Windows, no site do seu criador, Mikko Koppanen. A API ImageMagick, que é de instalação obrigatória, está disponível no site oficial, para vários sistemas operativos.

Em relação à extensão GD2, bastante comum, o Imagick é mais rápido nalgumas das operações mais comuns: redimensionamentos, filtro sharpen, rotações, cortes, etc. Além disso, tal como está no nome, aplica alguma magia nalgumas operações: sombreados, cantos arredondados, composição de texto e imagem… Apesar de nada disto ser inacessível à extensão GD2, no Imagick será possível fazer a maior parte destas operações em poucas linhas – nalgumas operações, apenas uma linha!

Recentemente, inserido num projecto extenso – e não quero falar sobre isso! – uma das fases consistia em dividir um círculo em fatias, de forma dinâmica. O grafismo é relativamente simples, basta usar uns lineTo’s e uns curveTo’s, tudo pintalgado com uns fills, e a coisa ia fluida. Quanto à matemática inerente, também me parecia bastante simples, basicamente é dividir um círculo completo pelo número de fatias.

O Actionscript, como quase todas as linguagens de programação, trabalha em radianos, o que acaba por ser, até, intuitivo. Aprende-se para aí no 7º ano que um círculo são 2 x PI, que corresponde aos 360 graus. Posto isto, o código era, aparentemente, trivial e croquetes:

// gráfico onde vamos desenhar as fatias
var gfx:Graphics = container.graphics;
// raio da tarte
var raio:Number = oMeuRaio;
// angulo de cada fatia
var angulo:Number = (Math.PI * 2) / numFatias;

// i é incrementado o angulo correspondente às fatias a cada passagem
for(var i:Number = 0; i < (Math.PI * 2); i += angulo)
{
    // mover para o centro do círculo
    gfx.moveTo(0, 0);
    // linha até ao limite da tarte
    gfx.lineTo(raio * Math.cos(i), raio * Math.sin(i));
}

Parece bastante simples e intuitivo, certo? Durante algumas horas, a coisa rolou maravilhosamente. Até que reparei que, nalgumas situações, era desenhada uma fatia extra por cima da primeira. Uma das situações onde isso acontecia era quando a quantidade de fatias era igual a seis. Alguns trace’s mais tarde, dei com o gato e, depois de praguejar durante alguns minutos contra a Adobe, a solução foi feita com um mínimo de esforço. Mas vamos ao gatinho primeiro…

Adoro datas. Sério, é uma das áreas mais fascinantes da programação. Se não acreditam, vejam lá o filme que foi o chamado bug do ano 2000. Até arranjaram um acrónimo fixolas e tudo: Y2K. Mas sobre isso falarei noutro dia, ou então não – até porque vem aí um problema bem mais grave em 2038 (a que alguns já chamam Y2K38 – c’mon, really?).

Aqui há dias relembraram-me o quanto eu gosto de datas. Um tipo – que eu não conheço de lado nenhum – pediu ajuda num fórum para fazer uma função em C que calculasse o número de dias entre duas datas; provavelmente, e tendo em consideração o pedido, para um trabalho da escola, ou coisa que o valha. Devo dizer que fui um bocadinho totó e disponibilizei logo ali a função inteira, quando a ideia de um fórum não é fazer por, mas sim ajudar a fazer.

Seja como for, só me decidi ajudá-lo por considerar o problema interessante; não é algo que seja muito comum hoje em dia, até porque a maior parte das linguagens de programação tem bibliotecas específicas para trabalhar com datas, e esta função é disponibilizada de forma directa. Além disso, vi que as orientações que já lhe tinham dado não eram, nem de perto, nem de longe, o mais eficaz que se podia ser. O problema no meio disto tudo, como não podia deixar de ser, é a existência ou não de anos bissextos no intervalo. Como Arthur C. Clarke colocou de forma hilariante em 3001 – Odisseia Final, “um dia, um dos menores erros de Deus será corrigido e o ano terá 12 meses de 30 dias exactamente iguais”.

Para finalizar a primeira fase desta minha incursão pelas tries, vamos agora colocá-la a fazer alguma coisa de útil. Convenhamos que verificar se uma palavra existe ou não é trabalho fraquinho, tendo em consideração as potencialidades desta estrutura de dados. E uma dessas potencialidades é precisamente construir listagens a partir de verificações parciais. Estas podem servir para auto-completar palavras (como nos telemóveis, motores de busca) e para sistemas de correcção ortográfica, com listas de palavras semelhantes a palavras erradas, isto é, não constantes da lista. A implementação específica deste tipo de sistema está fora do âmbito desta posta, visto que não é trabalho específico da trie; esta, apenas devolve uma lista de palavras partindo de uma incompleta, usando wildcards1.

Começando pelo caso do wildcard ‘?’, correspondente a um caracter naquela posição, uma aproximação naïve seria iterar por todas as letras do alfabeto, incluindo as acentuadas, colocá-las na posição correcta e verificar a existência das palavras resultantes na trie. Salta à vista a inocência deste processo: em primeiro lugar, iterar por todos os caracteres possíveis para a posição incluiria muito mais do que os 26 normais do alfabeto – só em caracteres com diacríticos, seria bem mais do dobro; em segundo lugar, a ocorrência de palavras que obviamente não existem, com quatro consoantes seguidas, por exemplo; em terceiro e último lugar, quando quiséssemos implementar a pesquisa com o wildcard ‘*’, representando vários caracteres, os nossos problemas aumentariam exponencialmente.

Ao reler esta minha posta de ontem, lembrei-me das embedded resources, que costumam ser usadas para a localização de aplicações, mas que nada impede que sejam usadas para transportar o que quer que seja. Embeber um ficheiro de texto seria trivial, e as vantagens seriam potencialmente animadoras – ao arrancar a aplicação, a framework carrega muito mais depressa as resources junto com o executável do que o StreamReader consegue ler um ficheiro externo.

Embeber um ficheiro no Visual Studio é do mais simples que há: no menu de contexto do projecto, escolher a opção Properties, depois a aba Resources. Se não existirem resources, clicar no link que estará bem visível no meio da página, e escolher Add New Text File do dropdown Add Resource.

Visual Studio 2008 - Resources

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