Bem-Vindo ao DreamsInCode

DreamsInCode é um site maioritariamente sobre programação, com os ocasionais desvarios do programador pela real life.

Terá especial incidência nas linguagens de programação C#, PHP e ActionScript e em projectos relacionados com jogos de loto (incluído o jogo europeu Euromilhões e o nosso velhinho Totoloto), com geração automática de imagens na web (Imagick) e sistemas de tempo e data.

Salvo nota em contrário, todos os conteúdos aqui publicados são gratuítos e, no caso de software, de código aberto, ao abrigo da Licença Creative Commons 2.5 Portugal BY-NC-SA. Consultem aqui os termos da mesma.

Este site não é suportado por uma empresa nem por publicidade; é suportado inteiramente por mim. Se encontrarem aqui algo que vos dê mesmo muito jeito, façam uma doação. As vossas doações ajudam com os custos do servidor.

Ir para o início do blog »

Projectos em Destaque

Eleições e Número de Deputados

Aplicação desenvolvida para testar as propostas de dois dos candidatos às eleições legislativas de 2011 quanto ao número de deputados na Assembleia da República.

Outros Projectos @ 14-06-2011 às 23:48


SisRedEM v2

Programa para gerar e imprimir apostas para o Euromilhões a partir de tabelas pré-feitas de sistemas reduzidos. Inclui gerador aleatório, reordenador de números e verificação de chaves por alguns filtros.

SisRed Series @ 10-04-2008 às 00:00


Últimas postas no blog

Depende de onde se vota. Parece impossível, mas os votos de cada português não valem todos o mesmo.

A nossa lei eleitoral determina que os mandatos sejam distribuídos por círculos eleitorais usando o método d'Hondt. Já falei disso aqui, há quatro anos, mas só de passagem.

Por exemplo, um voto em Portalegre só vale 80% do mesmo voto em Lisboa. Os círculos onde um voto vale mais são Setúbal, Lisboa, Porto e Aveiro. Os círculos onde vale menos são Portalegre, Bragança, Évora e Vila Real.

Há um enviesamento claro em relação os círculos mais populosos, com algumas excepções: Setúbal é claramente um outlier nos mais valiosos, Braga é muito equilibrado e Beja é surpreendentemente alto, embora ainda baixo da média.

Distrito Mandatos Média MPV (×100k) MPV/média MPV/Setúbal
Aveiro 16 15.65 2.45 102% 99%
Beja 3 3.09 2.33 97% 94%
Braga 19 18.86 2.41 101% 97%
Bragança 3 3.53 2.03 85% 82%
Castelo Branco 4 4.34 2.20 92% 89%
Coimbra 9 9.36 2.30 96% 93%
Évora 3 3.39 2.12 89% 86%
Faro 9 8.88 2.43 101% 98%
Guarda 4 3.91 2.45 102% 99%
Leiria 10 10.15 2.36 99% 95%
Lisboa 47 45.52 2.47 103% 100%
Portalegre 2 2.42 1.98 83% 80%
Porto 39 38.11 2.45 102% 99%
Santarém 9 9.42 2.29 96% 92%
Setúbal 18 17.38 2.48 104% 100%
Viana do Castelo 6 6.06 2.37 99% 96%
Vila Real 5 5.47 2.19 91% 88%
Viseu 9 8.91 2.42 101% 98%
Açores 5 5.45 2.20 92% 89%
Madeira 6 6.12 2.35 98% 95%

Como podemos ver nesta tabela, a haver justiça, Setúbal, Lisboa e Porto perderiam um mandato (Lisboa até na iminência de perder dois), Bragança ganharia imediatamente um e, para distribuir os outros dois, far-se-iam rondas sucessivas pelos mais penalizados – a saber, Portalegre e Évora.

Portalegre é, de resto, o mais penalizado. Para colocar as coisas em perspectiva, num cenário de batatada (que, afinal, tem muitas semelhanças com um processo eleitoral), para cada quatro lisboetas seriam precisos cinco portalegrenses.

Para mim, este devia ser o primeiro problema a ser atacado numa revisão do nosso sistema eleitoral. Não porque o considere o mais importante, mas apenas porque é o mais fácil de mudar, visto que a Constituição é omissa no que toca ao método de distribuição de mandatos: o n.º 2 do Artigo 249º apenas indica que “o número de Deputados por cada círculo plurinominal do território nacional, exceptuando o círculo nacional, quando exista, é proporcional ao número de cidadãos eleitores nele inscritos.” Não explicita qual o método de distribuição proporcional (ao contrário do n.º 1, relativo à conversão dos votos em mandatos).

Há mais coisas que eu mudaria… mas isso fica para outro dia.

Assim que houver resultados finais, farei uma nova ronda para os eleitores que participaram no acto, para vermos quanto valeu, efectivamente, cada voto depositado.

Notas

  • Podem encontrar abaixo o Javascript que usei para gerar esta tabela;
  • Considerei apenas 226 mandatos – há quatro que estão reservados para a emigração;
  • O número de eleitores por círculo eleitoral é o divulgado pela Comissão Nacional de Eleições para as Legislativas de 2015;
  • Como poderão verificar, implementei a distribuição d'Hondt em vez de usar os mandatos indicados pela CNE – são iguais, mas era só para ter a certeza que a CNE não se tinha enganado…  ;) 
var legislativas2015 = (function() {
    var distritos = [
        {distrito: "Aveiro", eleitores: 653541, mandatos: 0},
        {distrito: "Beja", eleitores: 128971, mandatos: 0},
        {distrito: "Braga", eleitores: 787706, mandatos: 0},
        {distrito: "Bragança", eleitores: 147485, mandatos: 0},
        {distrito: "Castelo Branco", eleitores: 181459, mandatos: 0},
        {distrito: "Coimbra", eleitores: 391029, mandatos: 0},
        {distrito: "Évora", eleitores: 141443, mandatos: 0},
        {distrito: "Faro", eleitores: 370882, mandatos: 0},
        {distrito: "Guarda", eleitores: 163508, mandatos: 0},
        {distrito: "Leiria", eleitores: 423865, mandatos: 0},
        {distrito: "Lisboa", eleitores: 1901335, mandatos: 0},
        {distrito: "Portalegre", eleitores: 101246, mandatos: 0},
        {distrito: "Porto", eleitores: 1591762, mandatos: 0},
        {distrito: "Santarém", eleitores: 393387, mandatos: 0},
        {distrito: "Setúbal", eleitores: 725783, mandatos: 0},
        {distrito: "Viana do Castelo", eleitores: 253271, mandatos: 0},
        {distrito: "Vila Real", eleitores: 228399, mandatos: 0},
        {distrito: "Viseu", eleitores: 371991, mandatos: 0},
        {distrito: "Açores", eleitores: 227486, mandatos: 0},
        {distrito: "Madeira", eleitores: 255748, mandatos: 0}
    ];
    
    var totalEleitores;
    var maxMPV = 0;
    var maxMPVIndex = 0;
    
    function distribuirMandatos() {
        var max, indexMax, tempQuo;

        for (var i = 0; i < 226; i++) {
            max = 0;
            indexMax = 0;
            for (var j in distritos) {
                if (distritos.hasOwnProperty(j)) {
                    tempQuo = distritos[j].eleitores / (distritos[j].mandatos + 1);
                    if (tempQuo > max) {
                        max = tempQuo;
                        indexMax = j;
                    }
                }
            }
            
            distritos[indexMax].mandatos++;
        }
    }
    
    function calcularMandatosPorVoto() {
        totalEleitores = 0;
        for (var j in distritos) {
            if (distritos.hasOwnProperty(j)) {
                totalEleitores += distritos[j].eleitores;
                distritos[j].mpv = distritos[j].mandatos / distritos[j].eleitores;
                if (distritos[j].mpv > maxMPV) {
                    maxMPV = distritos[j].mpv;
                    maxMPVIndex = j;
                }
            }
        }
    }
    
    function output() {
        var medMPV = 226 / totalEleitores;
        var out = "<table id='legislativas2015'><tr>" +
            "<th>Distrito</th>" +
            "<th>Mandatos</th>" +
            "<th>Média</th>" +
            "<th>MPV (×100k)</th>" +
            "<th>MPV/média</th>" +
            "<th>MPV/" + distritos[maxMPVIndex].distrito + "</th></tr>";
        
        for (var i in distritos) {
            if (distritos.hasOwnProperty(i)) {
                out += "<tr>" +
                    "<td>" + distritos[i].distrito + "</td>" +
                    "<td>" + distritos[i].mandatos + "</td>" +
                    "<td>" + (distritos[i].eleitores / totalEleitores * 226).toFixed(2) + "</td>" +
                    "<td>" + (distritos[i].mpv * 100000).toFixed(2) + "</td>" +
                    "<td>" + (distritos[i].mpv / medMPV * 100).toFixed(0) + "%</td>" +
                    "<td>" + (distritos[i].mpv / maxMPV * 100).toFixed(0) + "%</td></tr>";
            }
        }
        
        out += "</table>"
        
        return out;
    }
    
    return {
        init: function() {
            distribuirMandatos();
            calcularMandatosPorVoto();
            document.write(output());
        }
    }
}());

legislativas2015.init();
Comentários Nenhum comentário Continuar a ler Continuar a ler »

Rabiscos

Num destes últimos fins-de-semana, em descanso por terras de onde sou natural, dei um salto ao Yours. O Yours é um bar calmo, com bastante atenção aos detalhes, onde é fácil passar-se horas a conversar (e a beber – com baldes de 5 minis, não consegues beber só uma).

Publicidades à parte, o dono deve ter uma predilecção especial por quebra-cabeças – começou por trazer-nos alguns dos mais clássicos com palitos, mas depois subiu a parada com Logicubes.


TL;DR:

Fiz um jogo. Ide jogar.


Eu não consegui encontrar grande informação sobre este jogo; o máximo que cheguei foi ao site do inventor, Ili Kaufman, onde o próprio vende uma versão do jogo, e a esta loja alemã, que vende uma versão diferente. Nenhuma destas versões é igual (nos símbolos – deduzo que a lógica subjacente seja igual) à que encontrei no Yours.

O objectivo do jogo é colocar quatro cubos em fila, em que cada lado terá quatro símbolos diferentes. Parece fácil o suficiente. Os desdobramentos dos cubos são os seguintes (as imagens foram adaptadas, mas são semelhantes):

Desdobramento logicubes

Eu e a V. ainda tentámos algumas coisas durante uns 10 minutos, mas como estava a ficar para o tarde e estas coisas entranham-se-me na cabeça, acabei por copiar o esquema dos cubos para a factura, onde até já estavam algumas contas (erradas) e um esboço do plano lógico de resolução (é a imagem que está ao topo deste post).

Uma solução puramente por força bruta estava fora de questão. Se cada cubo tiver 24 posições possíveis (cada uma das seis faces possíveis virada para a frente a multiplicar pelas quatro rotações possíveis em que pode estar sem mexer essa face), as combinações totais a testar seriam 244 = 331.776. Mesmo dividindo por 4 (porque uma determinada posição corresponde a três outras iguais, rodando toda a fila pelo seu eixo), são 82.944. Ainda que conseguíssemos verificar uma a cada dois segundos, demoraríamos um pouquinho mais que 48 horas. Pois…

Uma das coisas que topámos logo foi que havia mais símbolos do que sítios onde os pôr. Se cada cubo tem seis lados, há um total 24 faces possíveis, mas como só contam as 4 faces da fila de cubos, só há 16 posições – quer dizer que tem de se eliminar 8 posições. Essas posições correspondem aos dois topos da fila, e às faces dos cubos que ficam encostadas nas junções. Não esquecendo que cada símbolo tem que aparecer exactamente quatro vezes e contando quantas vezes aparecia cada símbolo nos cubos (bolas pretas, bolas brancas, zig-zags e escuras), foi fácil verificar quantos símbolos deveriam ser cortados:

  • p: 5 - 4 = 1
  • b: 7 - 4 = 3
  • z: 6 - 4 = 2
  • e: 6 - 4 = 2

As faces a cortar em cada cubo têm de pertencer, obviamente, ao mesmo eixo; cada cubo tem três eixos (vamos ignorar, por enquanto, se uma determinada face é cortada à esquerda ou à direita), o que vem a dar 34 = 81 combinações de corte. Supondo que muitas dessas combinações serão inválidas, isto já se aproximava de algo que pudesse ser resolvido com papel e caneta em tempo útil.

Até aqui chegámos; daqui não passámos, que a noite já ia longa – mas estas coisas ficam-me cravadas na tola e, entre as milhentas coisas que tenho para fazer, fui conseguindo roubar 10 minutinhos todas as noites para pensar no assunto.

A forma de resolver isto é com um grafo, especificamente, com uma árvore. No primeiro nível da árvore temos os três cortes possíveis do primeiro cubo, [p, z], [b, b] e [b, e]. De cada um desses vértices, partem três ramos, para os três cortes possíveis do segundo cubo ([z, e], [p, b] e [z, b]), deixando o segundo nível da árvore com 9 vértices. Logo aqui, podemos verificar que não vale a pena prosseguirmos com o ramo iniciado em [p, z] e passando por [p, b], visto que já eliminámos dois p – o que é impossível pelas condições impostas acima. É só continuar a construir a árvore nos mesmos moldes, o que daria os tais 81 vértices no quarto nível, se muitos ramos não fossem ficando pelo caminho (que ficam).

Anyway, estas coisas não se fazem à mão – pelo menos, não é à mão que um programador faz estas coisas (um programador perde 20 minutos a implementar um bash script para um problema que iria demorar 15 a resolver à mão). Mas volto a ressalvar: é perfeitamente possível resolver isto com papel e caneta. Posto isto, este sub-problema tem cinco soluções, a saber:

  • [[b, e], [z, b], [e, b], [p, z]]
  • [[b, e], [z, b], [e, z], [b, p]]
  • [[b, b], [z, e], [e, b], [p, z]]
  • [[b, b], [z, e], [e, z], [b, p]]
  • [[b, b], [z, b], [p, z], [e, e]]

Chegando a esta fase, é conveniente fazermos um ponto da situação. Temos cinco soluções. Cada cubo, em cada solução, pode ter duas posições de corte (tal como está, ou invertido). Em cada posição de corte, cada cubo pode ter 4 rotações. Por isso: 5 x 24 x 44 = 20.480. Dividindo pelas tais quatro soluções iguais em volta do eixo da fila, são 5.120. Voltando ao antigo cenário de um teste a cada dois segundos, já dá pouco menos de 3 horas.

Confesso que aqui atingi uma parede. Não consegui descortinar nenhuma solução puramente lógica para o problema. A única solução que se me afigura é mesmo um ataque de força bruta – quase 3 horas, no pior dos cenários.

Obviamente que implementei uma solução de força bruta, mas não manual, claro. Afinal, sou programador.

Incrivelmente, da forma como postulei o problema, se tivesse tentado manualmente, ia mesmo demorar as tais 3 horas – é que as soluções válidas (que é só uma com diferentes rotações) estão todas no 5º parcial anterior! É que é preciso ter sorte…

Como uma coisa leva a outra (de uma solução puramente analítica passei para a necessidade de uma visualização de grafos, depois para uma visualização em realidade virtual e finalmente já queria era mexer nos cubos), acabei por reconstruir o jogo por completo em ambiente web (because… reasons). Quem quiser, pode ir brincar com os cubos. Quando se fartarem, podem carregar na prendinha para ver a solução.

Nos próximos dias hei-de escrever dois ou três posts técnicos, porque aprendi umas coisas novas ao construir esse micro-site. Por agora, é tudo.

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

Expirou hoje o período de adaptação ao Acordo Ortográfico de 1990 (AO90). Isto é, ao fim de 25 anos desde a assinatura e depois de 6 anos em vigor em regime de adaptação, toma finalmente carácter definitivo. E se deveria tomar carácter definitivo a 13 de Maio é discutível – há quem defenda que devia ser apenas a 22 de Setembro de 2016, porque – oh, céus! – mais um ano e uns trocos vão fazer tanta diferença.

Como devem ter reparado pelo parágrafo anterior, eu não uso o AO90 (“carácter”, meses capitalizados). Sou opositor? Não. Sou marimbista, o que é diferente. Estou-me bem nas tintas. As linguagens não mudam por decreto, mudam pela praxis. Se as pessoas mudarem a forma de escrever (e de falar) ao longo do tempo, a linguagem muda com elas, quer os linguistas queiram, quer não. O máximo que os linguistas opositores ao AO de 1911 puderam dizer foi “hay, phoda-se!” (por acaso, disseram mais coisas - ver aqui os testemunhos de Alexandre Fontes, Teixeira de Pascoaes e Fernando Pessoa).

Mas também sou um formalista. Eu acredito que, tirando o que é do domínio do senso comum, toda a praxis deverá ser estruturada e formalizada em theoria. É para isso que temos a Lei. E não estou a falar da linguagem. O “não matarás” de origem religiosa transformou-se – nalgumas regiões, muito lentamente – em praxis do povo e acabou por fazer caminho até às leis mais laicas do mundo (sobretudo as europeias, fortemente influenciadas pela matriz judaico-cristã vigente).

Neste caso, no entanto, colocou-se a carroça à frente dos bois, ou pelo menos, dos bois europeus (e de alguns bois brasileiros também). Ninguém escreve “ato” ou “batismo” (estas são as que me fazem mais confusão) deste lado do Atlântico. Por outro lado, com a eliminação total do trema, os intelectuais brasileiros também ficaram bem à rasca, se bem que o povo em si já pouco o usava.

De qualquer forma, foram 25 anos – ou, pelo menos, 6 anos – para se habituarem e lerem o que está efectivamente no acordo. Ao menos as notas explicativas, que sempre são mais simples de entender. Dá-me cabo dos nervos ver certas coisas publicadas por opositores do AO90, como “quero ver como é que vamos escrever cágado sem acento” (nenhuma palavra esdrúxula perde o acento), “como é que vamos distinguir o fato consumado do fato de treino” (só as consoantes efectivamente mudas desaparecem e, em Portugal, o “c” de “facto” não é mudo, logo, não desaparece).

Mas, especialmente, aborrece-me de morte a polémica entre o “para”, do verbo parar (que continuarei a escrever pára porque, lá está, a isso não sou obrigado) e o “para”, a preposição. É como se todo um conjunto de gente tivesse descoberto agora a existência das palavras homógrafas. Esta polémica dá-me sede, que só posso matar na sede do grupo recreativo cá do sítio (viram o que eu fiz aqui?).

Mas ainda mais grave do que os linguistas de Facebook e abaixo-assinados, preocupam-me professores que andam aos papéis, seja por repetirem acefalamente os erros acima, seja por indicarem outros novos, que nem sei de onde tiraram. Por exemplo, no fim-de-semana estava a corrigir uma apresentação da minha filha onde, a certo ponto, ela tinha escrito “paramos”. Pelo sentido da frase, perguntei se não queria ter escrito “parámos”, ao que ela respondeu que a professora tinha dito que se podia escrever das duas maneiras. Eu espero, sinceramente, que a minha filha tenha entendido mal. Não estou pronto para aceitar que uma professora de português tenha dito isto. O que o AO90 diz, na Base IX, ponto 4.º, é o seguinte (ênfase meu):

É facultativo assinalar com acento agudo as formas verbais de pretérito perfeito do indicativo, do tipo amámos, louvámos, para as distinguir das correspondentes formas do presente do indicativo (amamos, louvamos), já que o timbre da vogal tónica/tônica é aberto naquele caso em certas variantes do português.

O timbre da vogal em Portugal é aberto nestes casos. Não há discussão possível. O acento é facultativo, de molde a que nenhuma das grafias esteja errada, mas um estudante português deverá ser ensinado a grafá-lo (e, num exame, não seja penalizado, mas que tenha uma nota informativa pedagógica).

E já que falamos em penalização...

Uma das minhas citações preferidas (que não sei de quem é, só sei que a digo há muitos anos – na volta, até é minha) é “uma regra só existe na mesma medida da efectividade da penalização pela sua não aplicabilidade”.

Qual é a penalização pelo não uso do AO90? Para mim, e para muitos outros portugueses, nenhuma. A lei não prevê qualquer penalização. Prevê quem a deve aplicar (tudo o que seja Estado ou por ele seja tutelado), mas nenhuma penalização. Mas será assim, de facto, para toda a gente?

Existe, na realidade, uma potencial penalização: o despedimento, sobretudo de funcionários públicos. Como? Ora, usando a figura de despedimento por inadaptação, claro (artigo 373.º e seguintes do código de trabalho). Afinal, a qualidade de trabalho degrada-se (tudo o que é anterior ao AO90 passa a ser erro), houve a introdução de uma nova forma de trabalhar, foi facultado um período de adaptação e não existe outro posto de trabalho compatível com a qualificação profissional do trabalhador (não vão colocar a senhora da secretaria como afecta às limpezas, certo?).

Claro que isto não vai acontecer. Afinal, nós somos o país dos brandos costumes. Não prevejo objectores de consciência em entrevistas de emprego:

— As suas qualificações são óptimas, é exactamente o que procurávamos. Mas tenho uma última pergunta: o senhor consegue escrever correctamente com a grafia posterior ao Acordo Ortográfico de 1990? É que isso é vital para nós, que temos parcerias/somos tutelados/pertencemos ao Estado...

— Lamento, mas não. Conseguir, até conseguia, mas por uma questão de consciência, não o farei.

— Obrigadoportervindoebomdia.

 

Comentários Nenhum comentário Continuar a ler Continuar a ler »
Entrada de escola
A partir desta foto de João Ornelas – Creative Commons BY-NC-SA 2.0

Conhecem a GIAE? Não? E se for a Gestão Integrada para Administração Escolar, ring a bell (pun oh-so-much intended)? Trocado por miúdos (vou tentar que este seja o último trocadinho deste post), é o sistema que gere os cartões de identificação dos putos nas escolas. Numas escolas é este, noutros é o SIGE (Sistema Integrado de Gestão de Escolas). Desconheço se há mais. Estes sistemas são implementados e (presumo) mantidos por empresas privadas.

Este post é sobre o GIAE, que é o usado na escola frequentada pela minha filha mais velha.

A coisa é conceptualmente interessante: serve para pagamentos dentro da escola (sujeito a pré-carregamento), controla as entradas e saídas e dispõe de um portal online onde os alunos e os encarregados de educação podem consultar os dados pessoais do aluno e dos encarregados de educação, saldos, consumos e registo de entradas¹. Até dá para comprar a senha da cantina (e ver as ementas da semana).

Portanto, o ano escolar iniciou-se no dia 15 de Setembro. Não sei porque raio, mas os cartões para alunos novos só vieram parar à mão da canalha no dia 10 de Outubro. Quase um mês, quando as listas de estudantes, turmas e tudo isso está feito há que tempos, mas pronto - sei lá, podem ter ficado sem smart cards em stock, ou assim.

No dia 10, em vez de darem logo os códigos aos alunos, não - ainda têm que se deslocar ao gabinete de apoio ao aluno para os pedir. Como agora os miúdos nem furos têm¹, isto foi por si só uma aventura; entre falta de tempo, e falta da pessoa responsável nas vezes em que lá foi, a minha filha só conseguiu pedir o código hoje. Pediram-lhe o cartão para confirmar a identidade (o cartão tem fotografia), e gastaram uma folha A4 inteirinha com uma tabela de duas linhas com o número do cartão, o nome dela, o código para consultas presenciais e as duas senhas para acesso online, aluno e encarregado de educação.

Os problemas começaram à tarde. Tínhamos uma reunião marcada com a directora de turma² e, enquanto esperávamos, sem saber que a nossa filha já tinha o código, resolvemos pedi-lo também.

Problema #1: o sistema não avisou o responsável que o código já tinha sido pedido (e o responsável também não deu conta que era a segunda vez naquele dia que lhe pediam os códigos daquele cartão).

Problema #2: o responsável não confirmou a nossa identidade. Chegámos, dissemos a turma e o nome, e ele passou-nos o papel para a mão. Aliás, ainda mais grave, imprimiu o papel para a secretaria e eu fui lá buscá-lo. Nem confirmou se éramos encarregados de educação da criança. É assim, à papo-seco.

Problema #3: ao chegar a casa, o receio que eu tinha confirmou-se logo: o código e as senhas eram os mesmos no papel da minha filha e no que eu tinha. Isto quer dizer que as senhas estão guardadas no sistema de forma recuperável. Nunca, ever, em qualquer circunstância se guardam senhas em sistemas online. Guardam-se hashes, com salt. Isto é um processo irreversível. É possível confirmar que a senha introduzida está correcta, mas é impossível³, tendo-se acesso à hash e ao salt, recuperar a senha original. Da forma como está feito, se algum dia o sistema for comprometido, existem milhares de senhas de alunos e encarregados de educação por aí à solta, com acesso aos nomes completos, moradas, o que é comeu, a que horas entra e sai... E, dado o interesse suficiente, qualquer sistema é comprometido. A questão não é se, mas sim quando.

Problema #4: o procedimento padrão cá em casa quando se recebem códigos de algum lado, é mudá-los imediatamente. Entra-se na plataforma online e as condições para as senhas é serem alfanuméricas (A-Z, a-z e 0-9) e terem 8 caracteres. Não é até 8 ou no mínimo 8. É 8. Ponto. Isto é facilitar ainda mais o trabalho a um ataque brute force. E como quem cometeu estes erros até aqui provavelmente nem sabe o que é uma comparação XOR de tempo constante, palpita-me que tinha senhas nas mãos numa noite com um ataque de análise temporal.

São os sistemas que temos.


¹ Qualquer dia escrevo mais sobre o assunto, mas as escolas agora parecem presídios: controlo de entradas, os furos já nem são furos, que os miúdos têm aulas de substituição, os funcionários têm que andar sempre atrás deles... Porra, no meu tempo íamos para trás do ginásio jogar ao bate-pé!

² Felizmente, a nossa filha não dá problemas. O que me levou lá, e qualquer dia também escrevo mais sobre isto, é a insistência que a administração pública tem em usar tecnologias Microsoft sem qualquer alternativa. Isto é um problema de princípio para mim, até porque existe legislação nacional nesse sentido (Lei n.º 36/2011 e Resolução do Conselho de Ministros n.º 91/2012).

³ Impossível é uma palavra muito forte. Bastante improvável será mais o caso. De facto, é impossível calcular a senha original, mas é possível construir rainbow tables de todas as combinações de hashsalt possíveis e extrapolar uma senha que dê origem à mesma hash. O tempo e espaço necessários para esta construção com algoritmos recentes (recentes - nada de MD5, por favor) são impraticáveis.

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

Às vezes dou por mim a pensar “quando é que estes tipos se transformaram em idiotas pedantes?”

Há uns dias, tive duas revelações quase simultâneas.

Primeiro, que estes tipos sempre foram idiotas pedantes.

Segundo, e bastante pior, que, na melhor das hipóteses, compactuei com a idiotice; na pior, fui tão ou mais idiota que eles.

Peço desculpa.

Incrivelmente, dessa adolescência e juventude, os amigos mais próximos que me ficaram foram, de forma geral, os alvos dessa idiotice pedante. Até aqueles com os quais gosto mais de trocar duas de letra actualmente, que não sejam propriamente amigos próximos (até porque não sou de ter muitos amigos, muito menos próximos), foram esses alvos.

Independentemente das copiosas quantidades de trampa que a vida lhes jogou para cima, sob a forma de estrato social “errado”, disponibilidade económica baixa, fraca capacidade para os estudos ou azar puro e simples, foram os que encararam os problemas – alguns gravíssimos, como ser-se apanhado a meio da juventude sem uma perna – sempre sem idiotices ou pedantismo, e resolveram as suas vidas de forma satisfatória, alguns mais que outros, como é natural.

Outros, e nos quais me incluí temporariamente, a quem tudo parecia cair ao colo e que mesmo assim faziam questão de esfregar no focinho dos menos afortunados a sua sobranceria (pseudo) intelectual, cultural ou meramente de star status (moral não, que isso são contas de outro rosário, e, de qualquer forma, é coisa que não abunda na adolescência), estamparam-se forte e feito quando a sorte tirou uns dias de férias. O que não impede alguns desses de continuar a (tentar) espalhar a sua suposta superioridade.

É uma coisa engraçada, a vida.

Por idiota que seja.

Comentários Nenhum comentário Continuar a ler Continuar a ler »
 Doar (via PayPal)
 Últimas Postas no Blog
 Últimos Comentários do Blog