Skip to content

Commit cde5e2e

Browse files
committed
docs: add project design document (original spec)
1 parent 40d8781 commit cde5e2e

1 file changed

Lines changed: 102 additions & 0 deletions

File tree

about.md

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
1. A Estrutura Lógica (O Fluxo)
2+
Imagine a biblioteca como uma usina de reciclagem de caos. O fluxo de dados será:
3+
4+
Os Coletores (Harvesters): Agentes independentes que ficam "ouvindo" o mundo. Eles não param.
5+
6+
O Misturador (The Mixer): Onde os dados crus entram. Aqui usamos criptografia para garantir que o dado de entrada altere o estado da piscina de forma irreversível.
7+
8+
A Piscina (The Pool): Um buffer de bytes (ex: 4096 bits) que representa o "estado atual do universo" segundo o computador.
9+
10+
O Extrator (The Tap): A função que o usuário chama. Ela retira entropia da piscina e entrega um número limpo (0.0 a 1.0).
11+
12+
2. Mapeamento das Fontes de Dados (De onde vamos tirar o caos?)
13+
Para uma Lib Python que se preze, precisamos de fontes que funcionem em qualquer SO (Linux, Windows, Mac). Aqui estão os 4 pilares de dados que usaremos:
14+
15+
A. Fonte Cronológica (O Caos do Tempo)
16+
Computadores tentam ser precisos, mas em níveis nanoscópicos, eles "tremen".
17+
18+
O Dado: O "Jitter" (tremulação) da execução do código.
19+
20+
Onde pegar: Diferença entre o time.perf_counter_ns() (relógio de alta precisão) antes e depois de uma operação simples (como criar uma lista vazia).
21+
22+
Por que funciona: O sistema operacional interrompe o processo o tempo todo (scheduling). A duração exata de uma operação simples nunca é igual duas vezes seguidas. É o caos do agendador da CPU.
23+
24+
B. Fonte de Rede (O Caos da Infraestrutura)
25+
A internet é um sistema físico sujeito a temperatura, tráfego e colisões de pacotes.
26+
27+
O Dado: Latência de conexão (Ping).
28+
29+
Onde pegar: Fazer uma requisição HEAD leve para um servidor robusto (Google, Cloudflare) e medir o tempo de resposta até a casa dos decimais.
30+
31+
Por que funciona: O tempo que um elétron/fóton leva para viajar quilômetros de fibra ótica varia devido ao congestionamento da rede global. É o "clima" da internet.
32+
33+
C. Fonte de Sistema (O Caos do Hardware)
34+
O estado interno da máquina muda milhares de vezes por segundo.
35+
36+
O Dado: Estatísticas voláteis do Sistema Operacional.
37+
38+
Onde pegar:
39+
40+
Uso exato de memória RAM livre (em bytes).
41+
42+
Número de processos ativos no momento.
43+
44+
Posição do ponteiro do mouse (se houver interface gráfica).
45+
46+
Tempo desde o último boot (uptime) em milissegundos.
47+
48+
Por que funciona: É impossível prever o número exato de bytes livres na RAM em um dado microssegundo, pois o SO está alocando e desalocando memória constantemente.
49+
50+
D. Fonte Externa (O Caos do Mundo - Opcional/API)
51+
Conectar a lib a fenômenos naturais reais.
52+
53+
O Dado: Dados ambientais ao vivo.
54+
55+
Onde pegar: APIs públicas.
56+
57+
Sismologia: Última magnitude registrada (USGS).
58+
59+
Cripto: Preço do Bitcoin com 8 casas decimais (o mercado financeiro é um sistema caótico de psicologia humana).
60+
61+
Por que funciona: Traz entropia de fora da caixa do computador.
62+
63+
3. O Mecanismo da "Entropy Pool" (O Coração)
64+
Não podemos apenas somar esses números. Precisamos de uma Função de Absorção.
65+
66+
A Estratégia de Mistura (Whitening): Cada vez que um dado novo chega (ex: latência de rede = 45ms), não guardamos "45". Nós pegamos o estado atual da piscina + o dado novo e aplicamos um Hash SHA-256.
67+
68+
Fórmula: Novo_Estado = SHA256(Estado_Anterior + Dado_Novo)
69+
70+
Isso garante que cada bit de entrada afete cada bit da piscina. Se a latência mudar de 45ms para 46ms, o resultado final muda completamente (efeito avalanche).
71+
72+
4. O Planejamento da Biblioteca (Modularidade)
73+
Para disponibilizar no PIP, a estrutura deve ser pensada para que o usuário não precise configurar nada, mas possa configurar tudo se quiser.
74+
75+
Módulo Core (pool):
76+
77+
Gerencia o buffer de bytes.
78+
79+
Contém a função de Hashing.
80+
81+
Contém a proteção contra "esvaziamento" (se tirarmos muita entropia, a piscina bloqueia até coletar mais dados).
82+
83+
Módulo Coletores (harvesters):
84+
85+
Thread de Background: O ideal é que a lib tenha uma opção de rodar uma thread silenciosa que fica alimentando a piscina a cada X segundos com dados de rede/sistema. Assim, quando o usuário pedir um número, a piscina já está cheia.
86+
87+
Módulo Matemático (math):
88+
89+
Converte o Hash (hexadecimal) em:
90+
91+
Float (0.0 - 1.0) -> Probabilidade.
92+
93+
Booleano (True/False) -> Decisão.
94+
95+
Inteiro (Range A-B) -> Seleção.
96+
97+
5. O Diferencial "Místico"
98+
Para sua lib ter apelo, adicione um método chamado entropy_health().
99+
100+
Ele retorna uma pontuação de 0 a 100 de quão "caótica" está a piscina no momento.
101+
102+
Se o computador estiver muito ocioso e sem internet, a "saúde" cai. Se estiver rodando muita coisa, a "saúde" sobe. Isso dá uma sensação de "vida" ao código.

0 commit comments

Comments
 (0)