Postagem em destaque

A incrível velocidade do Go

Imagem
Um dos motivos que gosto do Go (a linguagem de programação, não o jogo), é que ele é extremamente rápido. E não estou falando de utilizar goroutines pois aí é covardia. Estamos migrando um sistema de Coldfusion para Go e PHP e uma das rotinas insere um registro no banco de dados no início e outra no fim do processo. Pense como se fosse um log, mas um log específico para essa rotina. Dessa forma: 2023-05-18 17:45:03. 687     ... [processaImagem] Incorporando imagem 2023-05-18 17:45:03. 688     ... [processaImagem] Imagem incorporada Entre o inicio e o final do processamento levou 1ms. Até aí, tudo bem, se não fosse o fato dessa tabela ter o campo timestamp como parte da chave primária. Se reparar, o tempo é definido em milissegundos. Com o Coldfusion esse processo dura cerca de 20ms. Simplesmente migrando para Go, o tempo caiu muito, para menos de 1ms e assim, começou a dar erro de chave duplicada. A solução? Depende, sempre depende. No nosso contexto, a mais simples foi feita, pois nã

O poder da mente sobre a matéria

Um GEA (Gerador de Eventos Aleatórios) ou REG (Random Event Generators) produz uma série de 0 (zeros) e 1 (uns), e por serem aleatórios deveriam ser gerados na mesma quantidade. Através do uso da mente, supostamente seria possível alterar a quantidade de 0s ou 1s geradas.

Como sou curioso e cético, resolvi verificar se isso é verdade. E para tanto, fiz um pequeno programa em Delphi (clique aqui para fazer o download do programa). O programa é simples: durante 5 segundos são gerados e contabilizados milhares (depende do seu computador) de números 0 e 1. Após isso o resultado (números de 0, números de 1 e relação entre eles) é impresso na tela e o processo é repetido indefinidamente.
program GEA;

uses
 Windows, SysUtils, Dialogs, forms;

var
 n0, n1: integer;
 i, t: longint;

begin
  Randomize;
  Repeat
    t := getTickCount();
    n0 := 0;
    n1 := 1;
    repeat
      for i := 1 to 100 do begin
       if int(random(2)) = 0 then
         inc(n0)
       else
         inc(n1);
      end;
      sleep(1);
    until (getTickCount() - t) > 5000;
    writeln(Format('%d;%d;%1.3f', [n0,n1,n1/n0]));
  until false;
end. 

Algumas considerações: utilizei o gerador de números aleatórios do próprio Delphi, ou seja, ele não é 100% aleatório. Falo isso, pois John von Neumann comentou certa vez:
"Qualquer um que considere métodos aritméticos para produzir dígitos está, certamente, cometendo um pecado".
Fiz alguns testes e não consegui nenhum efeito digno de nota. Até parece pesquisa eleitoral, pois a relação entre 0s e 1s sempre ficou dentro do limite de 3% para mais ou para menos, ou seja, praticamente o mesmo número de 0s e 1s foram gerados. Mas acho que a falha foi minha pois pensar na Sandy talvez não afete o GEA!

Comentários

Postagens mais visitadas deste blog

Netflix não mostra ícone de streaming

Google Hacking

FTP não funciona no PHP