summaryrefslogtreecommitdiff
path: root/posts
diff options
context:
space:
mode:
Diffstat (limited to 'posts')
-rw-r--r--posts/anonimato-estatistica.md146
-rw-r--r--posts/centralizacao-lei-felca.md144
-rw-r--r--posts/conta-deletada.md35
-rw-r--r--posts/espacos-liminares.md13
-rw-r--r--posts/first.md25
-rw-r--r--posts/makefiles.md116
-rw-r--r--posts/orientacao-a-objetos.md88
-rw-r--r--posts/problemas-rust.md88
-rw-r--r--posts/rss.md90
-rw-r--r--posts/systemd.md11
-rw-r--r--posts/tem-alguma-coisa-errada.md27
11 files changed, 783 insertions, 0 deletions
diff --git a/posts/anonimato-estatistica.md b/posts/anonimato-estatistica.md
new file mode 100644
index 0000000..959e682
--- /dev/null
+++ b/posts/anonimato-estatistica.md
@@ -0,0 +1,146 @@
+# Anonimato é só estatística
+
+Todo mundo vem caracterizado o anônimato como se fosse uma espécie de magia
+que faz você ficar invisível na internet, mas é só uma estatistica e um jogo
+de _guess who_. Inclusive tem como medir o quanto você é anônimo usando
+algumas ferramentas matemáticas.
+
+## O que é anonimato de fato?
+
+Anonimato é o ato de você embaralhar algumas informações de forma que ninguém
+consegue fazer um pinpoint de quem é você no meio de um espaço amostral. Então
+como que uma VPN te mantém anônimo, por exemplo? Ele não te esconde, ele faz
+com que todo mundo conectado a uma VPN passe pela mesma range de IPs de forma
+que ninguém (do meio privado) consegue deduzir que pessoa está acessando.
+
+Existem 2 formas de você atingir esse anonimato:
+
+1. Se misturando na multidão, como VPNs fazem
+2. Usando serviços que ninguém* consegue extrair informação útil pra te deanonimizar
+
+<span style="font-size: 10px;">
+*: ou pelo menos as pessoas que você quer não saibam quem é você
+</span>
+
+## Medindo o anonimato
+
+Existe uma ferramenta na parte da estatistica chamada _Teoria da informação_, e
+ela vai ser extremamente útil para medirmos o quão anônimo uma pessoa é,
+levando em consideração que o atacante tem como obter todas as informações que
+a vítima expõe.
+
+### Bits e informação
+
+Na teoria da informação, a unidade de informação se chama _bit_. Ele tem
+relação com o _bit_ da computação, mas não é a mesma coisa. Um _bit_ representa
+uma informação sobre a vítima que corta o espaço amostral pela metade.
+
+Vamos fazer um exemplo de teste. Imaginemos que existe 10 pessoas num espaço
+amostral, 5 de camisa amarela e 5 de camisa azul. A informação que você tem
+sobre a sua vítima é que ela usa camisa amarela. Quantos bits equivalem a essa
+informação? Visto que a informação reduz o seu espaço amostral de 10 para 5,
+isso significa que você tem 1 _bit_ de informação (porque 5 é metade de 10).
+Agora imaginemos que desses 5, 3 tem olhos marrons e 2 tem olhos azuis. A
+informação que você tem sobre a sua vítima agora é que ela tem olhos azuis.
+Quantos bits de informação equivalem a essa informação? Exatamente, _1.3219_
+bits de informação. Sim, a nossa definição de bit permite que tenha numeros
+reais ao invés de só inteiros.
+
+A definição do bit segue a seguinte formula.
+
+<math xmlns="http://www.w3.org/1998/Math/MathML" display="block" class="tml-display" style="display:block math;"><mrow><mi>I</mi><mo>=</mo><mi>l</mi><mi>o</mi><msub><mi>g</mi><mn>2</mn></msub><mo form="prefix" stretchy="false">(</mo><mfrac><mn>1</mn><mi>p</mi></mfrac><mo form="postfix" stretchy="false">)</mo></mrow></math>
+
+Onde _I_ é o nosso bit de informação e o _p_ é o denominador pelo qual
+dividimos um espaço amostral. Note que você pode simplificar essa equação para
+
+<math xmlns="http://www.w3.org/1998/Math/MathML" display="block" class="tml-display" style="display:block math;"><mrow><mi>I</mi><mo>=</mo><mo form="prefix" stretchy="false">−</mo><mi>l</mi><mi>o</mi><msub><mi>g</mi><mn>2</mn></msub><mo form="prefix" stretchy="false">(</mo><mi>p</mi><mo form="postfix" stretchy="false">)</mo></mrow></math>
+
+E isso faz com que o numero do bit seja negativo, o que vai ser útil pra gente
+medir o anonimato depois.
+
+Esse comportamento logaritímico do _bit_ é importante, pois torna calculos de
+eventos e informações mais simples. Por exemplo, pra se fazer aquele calculo de
+informação que você tem naquele primeiro exemplo se usaria a regra do _E_, em
+que as probabilidades e as informações se multiplicam, o que torna os calculos
+chatos de se fazer. Mas quando você usa logarítimos, essas multiplicações se
+tornam adições, o que significa que naquele exemplo, nos temos 2.3219 bits de
+informação, o que falta apenas 1 bit pra saber quem é a vítima. Como que eu sei
+disso?
+
+### Entropia
+
+A entropia é também medida em _bits_. Normalmente esse é o ponto que começam a
+se confundir mas é bastante simples. A _entropia_ é a quantidade de bits
+necessaria para se reduzir o espaço amostral de busca pra _1_. Por exemplo, se
+você tem 8 pessoas num espaço amostral de busca, isso significa que são
+necessários 3 bits de informação para se reduzir as suas buscas pra 1 pessoa
+só. Ou seja, **a entropia é o pool de bits necessários você descobrir pra se
+descobrir quem é a sua vítima**.
+
+Então no exemplo anterior, eu disse que existem 10 pessoas no espaço amostral.
+Com isso, eu posso tirar que a entropia desse espaço amostral é de _3.3219_ bits
+usando a formula:
+
+<math xmlns="http://www.w3.org/1998/Math/MathML" display="block" class="tml-display" style="display:block math;"><mrow><mi>E</mi><mo>=</mo><mi>l</mi><mi>o</mi><msub><mi>g</mi><mn>2</mn></msub><mo form="prefix" stretchy="false">(</mo><mi>s</mi><mo form="postfix" stretchy="false">)</mo></mrow></math>
+
+Onde _E_ é entropia e _s_ é o tamanho do espaço amostral. No caso do exemplo anterior _s_ = 10.
+
+### Juntando tudo
+
+Com isso, podemos fazer uma espécie de joguinho, onde a entropia é o _HP_ do
+seu anonimato e a informação são os danos que você tomou. Mais especificamente
+
+<math xmlns="http://www.w3.org/1998/Math/MathML" display="block" class="tml-display" style="display:block math;">
+ <mrow>
+ <mi>HP</mi>
+ <mo>=</mo>
+ <mi>E</mi>
+ <mo>+</mo>
+ <mrow>
+ <munder>
+ <mo movablelimits="false">∑</mo>
+ <mi>n</mi>
+ </munder>
+ </mrow>
+ <msub>
+ <mi>I</mi>
+ <mi>n</mi>
+ </msub>
+ </mrow>
+</math>
+
+Note que estamos aproveitando o fato da informação ser um numero negativo aqui.
+
+A nossa entropia sempre começa com log2 do numero de pessoas da terra,
+então ~33.04 bits de entropia, atualmente. Existem algumas informações que
+você toma de graça.
+
+* Sexo = 1 bit
+* Nascer no Brasil = 5 bits
+* Ter internet = 5 bits
+
+E assim vai. Ou seja, logo de cara você já deve tomar 11 bits de informação, o
+que sobra 22 bits de entropia de informação. Não tenha medo, pois 22 bits ainda
+significa que você é 1 entre 4.194.304 de pessoas, não é algo fácil de se fazer
+busca. Note que existem informações que você pode espalhar e nem sabe que isso
+pode te deanonimizar, são mais uns bitzinhos que você vai tomar na sua pool de
+entropia, e existem vários pontos meio escondidos, por exemplo o fingerprint do
+navegador. E lembre-se que isso é levando em consideração que _toda_ informação
+que você soltar é aproveitável pelo atacante, existem algumas informações que
+não são aproveitáveis. Por exemplo, se você sabe que o seu atacante é uma
+pessoa física normal, sem contatos estranhos com o governo, você sabe que pode
+confiar que algumas informações serão mais difíceis do atacante obter.
+
+E outra coisa é que informações podem remover a importância de outras
+informações. Um exemplo bobo seria você ser católico e morar no Vaticano, a
+probabilidade de você já ser um católico no Vaticano já é alta.
+
+## Conclusão
+
+Anonimato é estatística, é só matemática. Existe uma forma de medirmos o quanto
+de informações estamos expondo, assim como medir o quão difícil é pra obter
+essas informações. Isso pode ser usado pra várias coisas, pra facilitar buscas
+de criminosos pela polícia, ajudar a saber se esconder melhor de mal-feitores
+e até abre uma possibilidade de fazermos melhores legislações sobre o quanto
+de informação as empresas podem obter dos seus usuários.
+
diff --git a/posts/centralizacao-lei-felca.md b/posts/centralizacao-lei-felca.md
new file mode 100644
index 0000000..5b8b5fe
--- /dev/null
+++ b/posts/centralizacao-lei-felca.md
@@ -0,0 +1,144 @@
+# Lei Felca é só consequência da centralização da internet
+
+Primeiro, antes de tudo, eu preciso falar sobre todo mundo que tá me perguntando
+como ficar anônimo, quais as melhores VPNs, etc. O ponto é que eu **_não sou
+anônimo_**, inclusive volta e meia falo sobre a minha pessoal no xitter (e
+eventualmente por aqui) então não vou ser um hipócrita nesse ponto e ensinar
+sobre VPNs quando eu mesmo posso ser deanonimizado por qualquer ponto. Se vocês
+quiserem, pesquisem sobre proxies, tor, redes mesh e obfuscação de pacotes pra
+quando o governo brasileiro fazer cosplay de china e implementar um firewall.
+Além disso, não importa você se esforçar pra ficar anônimo na internet se no fim
+você está num Android ou iPhone. Olhe por onde o governo está atacando a sua
+privacidade, ele está se focando justamente nas big techs e empresas na qual
+você não consegue controlar os dados que vão para essas empresas. Do que adianta
+eu falar sobre VPNs, proxies e o cacete a 4 se o básico de controle de dados não
+é feito?
+
+[Richard Stallman](https://en.wikipedia.org/wiki/Richard_Stallman) estava
+avisando sobre isso há muito tempo, desde a época da Xerox, quando ele ficou
+puto porque um impressora tava tendo um problema por causa de um driver mal
+escrito e ele não pode consertar porque recusaram o acesso ao código. Um
+software pelo qual você não tem controle sobre o seu funcionamento (ou a
+potencialidade de você obter esse controle) é um caminho pra tirania. Agora os
+políticos sabem que esses dados podem ir pra esses servidores, e então o que
+estão fazendo? Entendeu? Dito isso, eu realmente espero que vocês prestem mais
+atenção em software _FOSS_, pois talvez agora esteja óbvio sobre o que o Richard
+Stallman tava falando, e não era só sobre a possibilidade de você fazer patches
+mas você garantir a própria segurança.
+
+E ainda pra piorar, a internet se centralizou. As empresas conseguiram se
+aproveitar dos novos usuários de smartphones que tavam surgindo no início dos
+anos 2010 e, com isso, eles ensinaram _lixo_ pra esses usuários pra que gerem
+mais dinheiro. A Google não ganhou na tecnologia de buscas por ser melhor mas
+porque o smartphone ensinou que toda pesquisa é pelo google. O facebook acabou
+sendo mais ou menos a mesma coisa no lado das redes sociais, etc. Tudo é um app,
+tudo é o que as empresas querem e nunca é a vontade do usuário.
+
+A Lei Felca tá mostrando que isso tem que mudar, o software precisa obedecer o
+usuário e não o contrário. Com isso, vou apresentar umas alternativas.
+
+## Alternativas
+
+### Jogos
+
+Voltem a pensar em jogos tipo o _Counter-Strike 1.6_, em que os
+servidores são comunitários e hospedáveis por qualquer pessoa, evitem a
+centralização, façam comunidades locais, voltem a se reunir em lan houses ou
+façam comunidades online para o jogo, eu lembro da época do _Counter-Strike
+Source_ tinha bastante disso. Existe uma [lista de jogos open
+source](https://osgameclones.com/) extremamente bons, inclusive eu gosto
+bastante do Hedgewars. Deixem os MMOs morrerem! (Ou façam private servers desses
+jogos).
+Dos jogos open-source que eu gosto bastante são:
+
+- [OpenSpades](https://openspades.yvt.jp/)
+- [Hedgewars](https://hedgewars.org/)
+- [Xonotic](https://xonotic.org/)
+- [Veloren](https://veloren.net/)
+
+<span style="color: green">&gt;ain, esquizo, vou ficar sem meu
+lolzinho</span><br/>
+Meu amigo, olha o tipo de merda que você tava se submetendo. Você tava botando
+um jogo, um _MMO_, que nunca escalou bem contra hackers e só faz todo mundo
+passar raiva, e esse jogo tem um anticheat a nível de kernel, que não só é
+inefetivo como também age igual um spyware. E depois você vem reclamando da
+merda da Lei Felca. É esse tipo de prioridade que você está dando na sua vida, o
+seu jogo é extensão da sua vida pra ele poder pegar seus dados, ou você só quer
+jogar e falar merda na internet de forma despretenciosa? Das próxima vez que
+você for fazer algo na internet, ao invés de pensar:<br/>
+<span style="color: green">&gt;hm, não tem problema o jogo saber onde eu moro</span>
+<br/>
+Faça essa pergunta:<br/>
+<span style="color: green">&gt;por que um jogo precisa saber onde que eu moro?</span>
+<br/>
+E boicote quem quer esses dados sem motivo. Não é nem por ser um esquizofrênico
+com privacidade, mas porque a porra do jogo não é a extensão da sua realidade. É
+um jogo, um hobby, não existe motivo nenhum pro endereço estar no banco de dados
+dos servidores deles.
+
+### Office
+
+Abandonem o _SaaS_ ou o _Cloud_, como o Microsoft 365 e o Google Cloud. Prefiram
+software local, que executa no seu próprio computador, de preferência de código
+aberto.
+
+- LibreOffice
+- OpenOffice
+
+### Sistemas operacionais
+
+Prefiram sistemas operacionais cujo acesso a internet não é necessário pra
+funcionar. Só isso já elimina o Windows 10 e o 11, e os iOSes atuais.
+Sinceramente, estou pra te dizer que o Windows 7 é mais seguro que o Windows 11,
+mas não vou por a minha mão no fogo. Vai pro linux.
+<br/><span style="color: green">&gt;ain, esquizo, mas não sei qual distro usar</span><br/>
+Pega o que for mais bonitinho. As perguntas reais vão surgir conforme você usar.
+
+### Mídia (música, séries, filmes)
+
+<iframe src="https://www.youtube.com/embed/GVXCr6upWUo" frameborder="0" allowfullscreen></iframe>
+
+Sério. Se quiser comprar tanto faz, mas da mesma forma que você quer respeitar o
+artista o artista também tem que respeitar o seu direito de você querer
+assistir de qualquer lugar. Se ele não quiser fazer isso, então esse é o
+caminho. Você _quer_ ver um vídeo por um player realmente dedicado como o mpv ou
+o vlc, e escutar músicas por software local.
+
+### Redes sociais
+
+Você primeiro deveria se livrar disso o máximo possível, uma rede social é tipo
+um bar, um monte de bebado falando merda e causando confusão. Mas se é isso que
+você quer, pode usar alguma instância do [Misskey](https://misskey-hub.net/en/),
+que é o mais próximo do xitter. Eu acho o [poa.st](https://poa.st) o mais
+interessante dessas instâncias.
+<br/>
+<span style="color: green">&gt;mas e o nostr?</span>
+<br/>
+A não ser se você gostar de ser flodado por bots e não encontrar nenhuma
+comunidade, é um LIXO. A ideia do nostr é ser uma espécie de relay baseada em
+assinaturas digitais, que na teoria funciona, mas na prática é pedir pra tomar
+no cu com DoS.
+
+### Repositórios git (Github)
+
+Sério um git num pendrive é melhor que o Github. O remote não precisa ser um
+ssh, ele pode ser um arquivo local, o repositório só precisa ser iniciado por
+`git init --bare`. Inclusive você consegue montar todo o esquema de pull/push
+por https usando o `git-http-backend` e/ou ssh pra uma melhor segurança. Também
+o [stagit](https://codemadness.org/stagit.html) pra gerar páginas sobre o seu
+repositório ([Exemplo](http://codemadness.org/git/)).
+
+### VoIP (Discord, Microsoft Teams)
+
+Mumble e GNU Jami. Simplesmente isso, não tem outras alternativas. O GNU Jami é
+mais bonitinho, é baseado em conexões distribuídas e assinaturas digitais; e
+lembra bastante o skype em sua interface. O Mumble lembra mais o antigo
+teamspeak, uma espécie de IRC de voz.
+
+### Chat
+
+IRC, Tox e Session.
+O IRC é um serviço normal de chat, bem fácil de usar e também abrir servidores.
+Tox e Session são baseadas em assinatura digital e sistemas distribuídos. Eles
+não tem o mesmo problema do Nostr, apesar disso.
+
diff --git a/posts/conta-deletada.md b/posts/conta-deletada.md
new file mode 100644
index 0000000..ab26bbc
--- /dev/null
+++ b/posts/conta-deletada.md
@@ -0,0 +1,35 @@
+# Yep, eu deletei a conta do xitter.
+
+Eu tinha botado na minha cabeça:
+<br/>
+<span style="color: green;">&gt;na primeira notícia que aparecer que o xitter
+vai começar a verificar, eu vou apagar a conta</span>
+<br/>
+Então apareceu essa
+[notícia](https://nitter.net/republiqueBRA/status/2034033628724789752) aqui.
+
+![](/static/noticia-xitter-cpf.png)
+
+Não é como se eu quisesse ser anônimo pra valer, vamos ser sinceros que só o
+fato de eu ter esse blog dedicado eu posso ser deanomizado facilmente, mas eu
+tinha meio que botado na cabeça isso até pra me livrar de uma rede social e me
+focar nas minhas coisas, e também já tava começando falar algumas merdas que não
+deveria falar.
+
+Dito isso, vou voltar a ser um usuário estranho que eu era antes de eu ter essa
+conta do xitter:
+
+- Peregrinar mais no linux
+- Fazer mais projetos pessoais
+- Ser mais autista com as coisas mais "alternativas"
+- Me focar no meu emprego
+
+Sinto um pouco de pena do pessoal que tava me seguindo porque eu tava botando
+umas alternativas lá pro pessoal e tinha muita gente que tava me acompanhando
+por causa das alternativas que eu tava fazendo. Eu espero que pelo menos uma
+parte deles tenha me seguido aqui, mas vida que segue.
+
+Pior que não ironicamente o clima de fim do mundo passou, lol. Talvez isso seja
+uma lição: _a vida é melhor aproveitada quando somos originalmente autistas e
+não seguimos a massa_.
+
diff --git a/posts/espacos-liminares.md b/posts/espacos-liminares.md
new file mode 100644
index 0000000..2201c94
--- /dev/null
+++ b/posts/espacos-liminares.md
@@ -0,0 +1,13 @@
+# Espaços liminares e backrooms
+
+Eu tava vendo alguns conteúdos sobre espaços liminares (faz uns 6 anos essa
+merda já) e lembro que tinha uma galera que falava que essa merda era assustadora
+e tal. Sinceramente? Imagine tu poder sumir do mundo e parar num lugar que tem o
+potencial infinito de exploração, você poder jogar todas as responsabilidades e
+nuances de uma sociedade filha da puta, mesmo que você eventualmente morra por
+falta de comida ou algo assim.
+
+Você finalmente jogou tudo fora, encontrou um único momento em que você pode
+explorar e limpar a sua cabeça pra finalmente conversar com Deus. Onde que isso
+é amedrontador? Isso é o paraíso.
+
diff --git a/posts/first.md b/posts/first.md
new file mode 100644
index 0000000..f413172
--- /dev/null
+++ b/posts/first.md
@@ -0,0 +1,25 @@
+# FIRST!
+
+Ok, finalmente decidi fazer alguma coisa com essa merda desse domínio que eu
+comprei. Primeiro, antes de tudo:
+
+<span style="color: green">&gt;ain, esquizo, sem js</span>
+
+Sim, meu caro leitor, sem JS. Eu até pensei em fazer alguma coisa com js mas
+eu ja vejo essa merda o suficiente no trabalho e não quero ter que mexer mais
+nessa desgraça. Sem contar que JS é uma merda pra organizar porque é um arquivo
+então ordem de empacotamento importa (não vai achando que eu usaria node.js pra
+fazer alguma coisa com essa porra, gosto das minhas builds instantâneas). Sério,
+eu ainda vou fazer um rant contra o js mas agora não porque eu to mexendo nesse
+site já é 00:00.
+
+Dito isso:
+
+- hello, world
+- first!
+- hi mom
+- hasta la vista, baby
+
+Pronto, todo tipo de entrada feita e agora preciso mijar e dormir.
+
+Boa noite.
diff --git a/posts/makefiles.md b/posts/makefiles.md
new file mode 100644
index 0000000..35d8921
--- /dev/null
+++ b/posts/makefiles.md
@@ -0,0 +1,116 @@
+# Como dev, como você dev pensar?
+## _Ou como usar makefiles...?_
+
+Já vou começando dando um spoiler: _foque no que quer chegar,
+não em como chegar_.
+
+Todo objeto que você quer construir tem o seu propósito, seja um HTML,
+um programa nativo ou qualquer coisa. Quando você começa a analisar o
+propósito daquilo que você quer construir, você sempre chega nas melhores
+descrições do que quer fazer. _Descrição_ é uma palavra chave aqui.
+
+Se você quer construir um HTML para um blog ou um site, você faz o mais óbvio
+pra construir o seu HTML: um bloco de notas, e um HTML. Pronto. Se precisar
+fazer outra página, você só dá um ctrl-c/ctrl-v. Até aqui, está tudo certo,
+não tem muito o que pensar. Mas agora vamos dizer que você queira fazer
+uma mudança na estruturação do seu HTML, talvez adicionar uma header, footer,
+um css. Agora essas mudanças precisam ser replicadas manualmente em cada HTML
+que você criou.
+
+Mas temos um computador, podemos automatizar isso, não? Se todas as páginas
+terão a mesma base, porquê não dizemos ao computador: construa esse HTML pra mim
+usando esses pedaços? E não precisa ser algo grande.
+
+<pre style="font-family:monospace;color: rgb(68, 68, 68); background-color: rgb(243, 243, 243); font-weight: 400; "><span style="color: rgb(136, 0, 0); font-weight: 700;">index.html: header.html.part index.html.part footer.html.part</span>
+ cat header.html.part index.html.part footer.html.part &gt; index.html</pre>
+
+E salvamos isso em um arquivo chamado `Makefile` pra que o programa `make`
+leia isso pra nós e crie o index.html pra gente. A primeira linha contém o que
+nós queremos (index.html) e o que vamos usar pra construir o que queremos.
+Logo abaixo, e identado **com tabs**, o comando que queremos executar pra cada
+um dos htmls que queremos fazer.
+
+Com isso, chegamos no conceito de "fonte".
+Você pode entender a fonte como fonte de um recurso que um programa precisa pra
+construir algo para nós, nós estamos passando o que queremos e os requisitos
+para a construção do que queremos. Perceba que nós ainda queremos o HTML
+completo, mas agora melhoramos a _descrição_ do nosso HTML para nós focarmos
+apenas naquilo que é necessário: um HTML é construído com header, footer e o
+nosso conteúdo. Agora podemos só editar o conteúdo, ou a header, ou a footer,
+e todo HTML conterá as mudanças que queremos.
+
+Então fazemos isso para cada arquivo que criamos.
+
+<pre style="font-family:monospace;color: rgb(68, 68, 68); background-color: rgb(243, 243, 243); font-weight: 400; "><span style="color: rgb(136, 0, 0); font-weight: 700;">index.html: header.html.part index.html.part footer.html.part</span>
+ cat header.html.part index.html.part footer.html.part &gt; index.html
+
+<span style="color: rgb(136, 0, 0); font-weight: 700;">about.html: header.html.part about.html.part footer.html.part</span>
+ cat header.html.part about.html.part footer.html.part &gt; about.html</pre>
+
+Mas estamos no tema de automação usando o computador, não? Ok que reduzimos
+bastante a quantidade de mudanças manuais que precisariamos fazer, mas podemos
+ir um pouco além disso.
+
+<pre style="font-family:monospace;color: rgb(68, 68, 68); background-color: rgb(243, 243, 243); font-weight: 400; "><span style="color: rgb(136, 0, 0); font-weight: 700;">%.html: header.phtml %.phtml footer.phtml</span>
+ cat <span style="color: rgb(171, 86, 86); font-weight: 400;">$^</span> &gt; <span style="color: rgb(171, 86, 86); font-weight: 400;">&#36;@</span>
+</pre>
+
+Agora os arquivos deverão ter uma extensão diferente porque o Makefile se
+confunde um pouco se usarmos o jeito anterior, porém agora o `make` vai tentar
+a executar essa regra para todo *.html que for requisitado. O `$^` significa
+todos os requisitos, em ordem que foram declarados, e o <span>&#36;@</span>
+significa o nome da output, para fins de tornar essa regra mais genérica.
+
+Com isso, estabelecemos um padrão para o nosso projeto. Todo HTML é construído
+seguindo essa regra: existe um header.phtml, um outro .phtml com a mesmo nome,
+e footer.phtml. E não só isso, como ainda podemos prosseguir adicionando mais
+regras, e ainda regras sobre arquivos que existem.
+
+<pre style="font-family:monospace;color: rgb(68, 68, 68); background-color: rgb(243, 243, 243); font-weight: 400; "><span style="color: rgb(136, 0, 0); font-weight: 700;">%.html: header.phtml %.phtml footer.phtml</span>
+ cat <span style="color: rgb(171, 86, 86); font-weight: 400;">$^</span> &gt; <span style="color: rgb(171, 86, 86); font-weight: 400;">&#36;@</span>
+
+<span style="color: rgb(136, 0, 0); font-weight: 700;">%.phtml: %.md</span>
+ markdown &lt; <span style="color: rgb(171, 86, 86); font-weight: 400;">$&lt;</span> &gt; <span style="color: rgb(171, 86, 86); font-weight: 400;">&#36;@</span></pre>
+
+Agora toda vez que um phtml não existir, ele vai tentar criar a partir de um
+arquivo markdown.
+
+Note o que estamos fazendo aqui: nós queremos um arquivo html. Não é o phtml,
+não é o markdown, e sim o html final. Os phtmls e os arquivos markdowns são
+apenas formas de se chegar no html. E cada vez que adicionamos mais uma camada
+de dependência e regras de resolução de dependência, estamos aumentando a
+capacidade de descrever o resultado final que queremos.
+
+O mesmo vale para o seu programa e na arquitetura do seu programa. Quanto mais
+você consegue descrever sobre o seu programa, mais você irá notar componentes,
+partes que se mantém estáveis, padrões, testes e outras coisas, e notar que essas
+coisas existem irá tornar o seu programa mais simples de desenvolver, ou
+pelo menos você irá fazer menos cagadas, afinal: você vai estar entendendo o
+seu programa.
+
+Por fim, note que isso resulta em um grafo, mais especificamente uma árvore:
+
+ index.html
+ |
+ +--- header.phtml
+ +--- footer.phtml
+ +--- index.phtml
+
+ about.html
+ |
+ +--- header.phtml
+ +--- footer.phtml
+ +--- about.phtml
+ |
+ + --- about.md
+
+Ao notar essa árvore, perceba que nós não só podemos notar padrões mas agora
+podemos planejar o que devemos fazer para resolver todos os problemas de forma
+geral.
+
+As conexões também são pontos de resolução de problemas. Perceba aqui que o
+`make` é um programa que nós já tinhamos em mãos para resolver as dependências
+mas mesmo esses programas precisam de outros pra transformar "simbolos em
+outros simbolos". Então não tenha medo de fazer _código que escreve código_, o
+seu trabalho sempre foi resolver problemas usando o computador, inclusive os
+seus próprios problemas.
diff --git a/posts/orientacao-a-objetos.md b/posts/orientacao-a-objetos.md
new file mode 100644
index 0000000..b5121c0
--- /dev/null
+++ b/posts/orientacao-a-objetos.md
@@ -0,0 +1,88 @@
+# Eu tenho certeza que você, um sênior, não sabe o que é orientação à objetos
+
+Sabe esse paradigma que aprendemos na faculdade? Os vários macetes, os
+famigerados "Padrões de Projeto", o `sujeito.verbo(objeto)` e merdas assim?
+Pois é, tá errado. Pelo menos de acordo com Alan Kay, porque Alan Kay não quis
+dizer nada disso.
+
+O negócio é que existem duas "escolas" de orientação à objetos. Uma que veio do
+Alan Kay originalmente, e a outra que veio do Simula e que foi mais ou menos
+raptado pelo Bjarne Strousturp, o criador do C++, e que veio a ser base do Java
+e outras linguagens ditas "orientadas à objetos". Então aqui vou tentar ensinar
+sobre o que o Alan Kay realmente quis dizer com orientação à objetos.
+
+Antes eu quero que você saiba que o _Alan Kay não quis se focar nos objetos._
+Ele até chegou a pedir desculpas por chamar isso de "Orientação a Objetos"
+porque isso confundiu muita gente, porém dá pra explicar a orientação a objetos
+com um padrão que você já deve ter usado a bastante tempo. Na verdade, se você
+quer um TL;DR disso tudo, você pode resumir o que Alan Kay quis dizer à
+"Injeção de Dependência embebido com mijo de Chuck Norris", e até a linguagem
+que é realmente "Orientada à Objetos", o Smalltalk, tem seus pontos parecidos
+com os da programação funcional. Irei usar um pseudo-código parecido com Java
+para demonstrar.
+
+Vejamos esse código aqui:
+
+ shape.getDimensions().getX()
+
+Isso seria um código bem comum de ver em orientação a objetos, mas qual é a
+interpretação que o Alan Kay teria sobre esse trecho?
+
+O `shape` é um objeto e, como objeto, ele recebe e responde à mensagens, no
+caso, shape recebeu a mensagem `getDimensions` sem parâmetros. `shape`
+reconhece essa mensagem e dessa mensagem responde com um outro objeto. Então
+enviamos `getX` sem parâmetros, e esse objeto pode ou não responder a essa
+mensagem. O Alan Kay estava se focando nesse modelo de envio de mensagens e não
+no modelo atual de classes. Inclusive quando Alan Kay falou de hierarquias ele
+não tava falando de "extensão" de classes como vemos em Java e sim que uma
+classe `Foo` responde as mesmas mensagens da classe `Base`.
+
+Em outras palavras: **A CLASSE NÃO IMPORTA, O QUE IMPORTA É A INTERFACE!** O
+que importa é se o `shape` reconhece `getDimensions`, inclusive tem um nome pra
+isso, `Duck Typing`: se anda igual pato e quacka igual um pato, é um pato. A
+classe, nessa visão, é só uma forma de construir objetos.
+
+Isso torna umas coisas um pouco mais interessantes. Vejamos esse trecho
+de código.
+
+
+ fn foo(thing) {
+ thing.isTrue(() -> {
+ doThing(thing)
+ })
+ }
+
+O que `thing` é? Não sei, só sei que `foo` precisa que `thing` reconheça
+`isTrue` com um parâmetro de lambda qualquer coisa que o `doThing` reconheça.
+Isso torna o `foo` extremamente reaproveitável e é com essa parte que o Alan
+Kay quis dizer com "reaproveitamento de código", e agora você entende o porquê
+que muitos javeiros adotaram o padrão de fazer getter e setter pra tudo, porque
+isso faz uma função depender de uma interface ao invés de uma implementação e
+isso faz a função ficar mais reaproveitável (mas vamos ser sinceros, 99% dos
+javeiros nem sabem disso, eles só fazem isso porque disseram que sim pra eles,
+e nem mesmo Alan Kay gosta dos getters and setters porque as mensagens eram pra
+*mandar* no objeto e não *pedir* ao objeto).
+
+E perceba que eu usei lambda ao invés de ser algo mais procedural, como
+`if`/`else`. Isso é porque a orientação a objetos realmente preza em tornar
+todo código o mais reaproveitável possível e, ao usar `if`s, como o Java faria,
+você torna o seu código um pouco mais rígido ao depender de uma implementação
+de uma boolean. OOP do Alan Kay preza tanto por isso que esse mesmo exemplo
+ficaria assim em Smalltalk (pelo menos, "aproximadamente" Smalltalk):
+
+ foo: object [
+ object ifTrue: [
+ self doThing: object
+ ]
+ ]
+
+Não existe `if`/`else` em Smalltalk. E booleans não são tipos primitivos e sim
+objetos. Integer, Strings, tudo é um objeto legítimo, com a sua lista de
+mensagens que eles devem responder, e é aqui que a "Injeção de Dependência com
+mijo de Chuck Norris" se apresenta. E de certa forma, é como nossos servidores
+HTTP funcionam. Você não precisa saber se o servidor é feito em Java, C#, PHP,
+feito com Spring Boot, Laravel ou algum outro framework. Você só precisa saber
+se o servidor responde por um `POST /foo/bar`.
+
+Isso é orientação à objetos. O resto é só putaria tirada da bunda do
+Strousturp.
diff --git a/posts/problemas-rust.md b/posts/problemas-rust.md
new file mode 100644
index 0000000..6cec8f7
--- /dev/null
+++ b/posts/problemas-rust.md
@@ -0,0 +1,88 @@
+# "Tudo dentro do Rust, nada fora do Rust"
+
+Essa é a mentalidade que eu venho percebido dos programadores Rust que acredito
+que isso deveria ser retificado. E eu acredito que eu tenha entendido a fonte
+desse problema, então queria fazer um post sobre isso.
+
+## O foco é no object-code
+
+Um programa é basicamente uma grande ROM. Pode ter cabeçalhos ELF pra poder
+auxiliar o carregamento e execução do software, ou ela pode ser um binário limpo
+pra ser injetado de um hardware, mas no fim a ideia é a mesma, é uma ROM, e como
+toda ROM, essa memória tem seções e regiões pra auxiliar na execução.
+
+O pessoal do Rust parece ter esquecido desse detalhe. O Rust não vira um
+executável, ele vira uma ROM, um object-code com headers pra auxiliar na próxima
+etapa de montar um programa.
+
+## Linkage
+
+Como é uma merda gigantesca fazer um grande object-code, normalmente quebramos
+esse object-code em vários mini object-codes que depois são linkados pra formar
+uma única grande ROM. Esses object-codes podem ser organizados em pacotes pra
+poderem ser reutilizados depois. O linker usa os cabeçalhos adicionados por um
+compilador (ou pelo próprio programador) pra auxiliar na montagem do programa.
+Esses cabeçalhos contém informações de *simbolos*, e esses simbolos são usados
+pra ligar as referencias a memória a outra.
+
+Com C, os object-codes tem seus simbolos exportados como qualquer coisa que não
+seja `static`. Se uma região de memória ou função não for `static`, ele vai ser
+exportado no object-code.
+
+Em C e assembly, você pode declarar que certos simbolos virão de fora da source
+code usando o `extern`. O `extern` acaba sendo uma ferramenta extremamente
+importante quando você vê o programa final como uma grande ROM, pois isso
+facilita e muito a manutenção, a geração de código e também a organização do
+código em pacotes.
+
+## O que é uma linguagem?
+
+Dado essa informação, o que é uma linguagem? Simplesmente notação. Lembre-se, o
+foco principal é o object-code, a linguagem é só uma ferramenta de notação para
+se construir esse object-code com os simbolos necessários pra montar o nosso
+programa. Você pode usar C, C++, assembly, Ada, Carbon, qualquer coisa.
+Inclusive, eu até recomendo você fazer mini-programas que gerem código a partir
+de uma notação que seja melhor pra certas situações. Por exemplo, um python que
+lê alguma source em YAML, e exporta um código C com uma tabela de ponteiro de
+funções pra ser usada por um outro object-code.
+
+## Rust se esqueceu de que a linguagem é só uma ferramenta de notação
+
+Rust surgiu de uma necessidade de segurança, principalmente de devs de
+navegadores, pra se fazer um código seguro, e isso é: sem problemas relacionados
+a memória, race conditions e afins, e muito do que o Rust tem acaba servindo
+como uma bicicleta com rodinhas pra se fazer em C ou C++, mesmo eu falando dos
+problemas do Rust eu acho que você deveria aprender Rust mesmo que seja só pra
+aprender as tecnicas de segurança que Rust adota. Porém Rust acabou sofrendo do
+mesmo problema de "feature-creep" do C++ e, da mesma forma que C++, acabou se
+perdendo no foco, e você percebe que o Rust se perdeu no foco ao observar uma
+feature do Rust: `unsafe`.
+
+O `unsafe` poderia ser facilmente substituído apenas por um `extern`. Na verdade
+toda a syntax do `unsafe` poderia ser jogada no lixo e o Rust ser só uma notação
+segura pra uma unidade de compilação que ele está trabalhando, e partes mais
+inseguras da codebase poderiam ser feita em linguagens mais maduras, que seriam
+linkadas pra formar a grande ROM que estavamos falando anteriormente.
+
+Mas o time do Rust decidiu ir por um caminho como se todo o Rust fosse
+responsável pela segurança de um programa, e isso torna a linguagem Rust
+extremamente invasiva e a migração para essa linguagem um tanto confusa, e é
+isso que o pessoal de baixo-nível acaba reclamando mais do Rust. E também o Rust
+acabou tomando certas decisões quanto a ABI que, ao meu ver, parecem muito mais
+uma grande pirraça mais do que qualquer outra coisa, que vem muito do pessoal
+mais de programação funcional que tenta forçar tudo a ser funcional. Não me
+levem a mal também, eu gosto da ideia da programação funcional, mas ao meu ver
+existem certos espaços que parecem forçados (por exemplo, programação funcional
+é boa pra composibilidade, mas são *péssimos* pra assincronicidade). Por fim,
+acaba sendo aquele grande dilema que ocorre em campos acadêmicos desde os anos
+80~90 acabando por invadir um espaço que o pragmatismo deveria ser o rei.
+
+Por isso, por mais que eu estude Rust de vez em quando pra me atualizar quanto
+as tecnicas de segurança, eu nunca vou usar Rust. Eu não vou usar uma linguagem
+que me obrigue a tratar todo o projeto como se fosse um projeto "do Rust" ou
+feito "em Rust", por mais que sim, meus programas seriam mais seguros se fossem
+feitos em Rust. Talvez se alguém fizer uma versão do Rust que seja mais
+pragmática e minimalista eu use, mas essa versão atual do Rust, não, e eu só
+queria expressar esse meu desgosto pelo estado do Rust e expor os meus pontos
+contra o Rust. Não odeio a ideia do que o Rust esteja tentando fazer, mas não
+gosto de _como_ o Rust vem feito.
diff --git a/posts/rss.md b/posts/rss.md
new file mode 100644
index 0000000..5f9aab7
--- /dev/null
+++ b/posts/rss.md
@@ -0,0 +1,90 @@
+# Você não precisa criar contas pra acompanhar seus criadores...
+
+Desde a lei felca, eu voltei a usar o RSS pra evitar ter que ficar criando
+contas na internet e botando meus dados nessas empresas que eu não confio. Não
+sabe o que é? O RSS, ou _Really Simple Syndication_, permite você receber
+notificações e notícias direto de um agregador de notícias. É o que venho usado
+pra acompanhar youtubers, jornais e até pessoas no xitter, que inclusive vou
+ensinar como.
+
+Talvez você já tenha visto o RSS. Não? Bom, talvez tenha visto esse símbolo em
+algum popup antigo de jornal, como o g1.
+
+![](/static/blog/rss/icon.jpg)
+
+Pois é, se você já viu esse simbolo, esse simbolo é basicamente o simbolo para
+receber sinais de notificação sem precisar criar uma conta. O meu site tem o
+RSS também, que você pode pegar na home do blog. O RSS é o primeiro passo para
+começar a se libertar um pouco das garras das big techs e de governos que ainda
+não entenderam como funciona a internet.
+
+## Como funciona?
+
+Normalmente um site tem um link que cospe um conteúdo que a gente chama de
+"atom" do RSS. Esse link não é pra você abrir de um navegador mas pra você
+colocar em um leitor RSS. Assim que você colocar esse link no leitor RSS
+(conhecido como "subsescrever"), o leitor de tempos em tempos vai pegar notícias
+do site. Você pode entender esse serviço como F5 automático, que vai te entregar
+sempre a notícia mais recente.
+
+## Quais clients usar
+
+Existem vários. O que eu uso é o meu leitor de e-mail, o thunderbird, mas tem
+outros:
+
+- newsboat
+- quiterss
+- akregator
+- newsblur
+
+Tem vários agregadores de notícia na internet pra você usar.
+
+## Como usar em plataformas
+
+### Jornais e blogs
+
+Jornais como a g1, phoronix e até o meu blog podem oferecer um link RSS, pra
+você botar direto no seu navegador. A G1 eu sei que oferece, inclusive eles tem
+vários links RSS pra canais específicos de notícias, phoronix e blogs voltados
+para linux também costumam ter RSS.
+
+### Youtube
+
+O Youtube tem um RSS secreto que eles esconderam porque eles obviamente querem
+que você crie uma conta e comece a se inscrever nos canais. Mas se você entrar
+na home de um canal, clicar com o botão direito no seu navegador e ir em
+view-source, você pode procurar por algum link que tenha "videos.xml" na URL,
+esse é o link do RSS feed. Se estiver no linux, tem um comando que você pode
+usar:
+
+<pre style="font-family:monospace;color: rgb(197, 200, 198); background-color: rgb(29, 31, 33); font-weight: 400; ">curl -s <span style="color: rgb(181, 189, 104); font-weight: 400;">'link do canal'</span> | \
+ grep -oP <span style="color: rgb(181, 189, 104); font-weight: 400;">'href="\Khttps://www\.youtube\.com/feeds/videos\.xml\?channel_id=[^"]+'</span></pre>
+
+E esse comando vai capturar o rss do canal que você quer acompanhar.
+
+### Twitter/Xitter
+
+Você sabia que existem leitores do xitter que não dependem de você ter conta pra
+ver? Nitter.net é uma distribuição alternativa do xitter que permite você ver
+conteúdo do xitter sem precisar se preocupar em criar uma conta nova. E a parte
+legal do xitter é que ele oferece um RSS. A minha instância que eu uso é a
+[instância original](https://nitter.net) mas você pode escolher outras
+instâncias do nitter [por aqui](https://status.d420.de/).
+
+Pra começar a acompanhar um criador no twitter, é só colocar um "/rss" no final
+da url. Então, vamos dizer que você esteja acompanhando o "BOSTOLAHUE", então a url
+final vai ser `https://nitter.net/BOSTOLAHUE/rss`, e então todo post novo do
+BOSTOLAHUE vai aparecer como um feed RSS.
+
+### Geradores de RSS
+
+Existem vários geradores de RSS que capturam conteúdo dos sites e transformam em
+atoms do RSS para você colocar no seu navegador, inclusive você mesmo pode fazer
+isso caso seja desenvolvedor, dado que o formato do RSS _é extremamente simples_
+de fazer.
+
+## Dito isso...
+
+Usem RSS hoje mesmo. Conforme você vai entrando nesse mundo da internet fora dos
+navegadores e aplicativos, vocês vão ver que esses aplicativos e sites não são
+_tão_ necessários assim.
diff --git a/posts/systemd.md b/posts/systemd.md
new file mode 100644
index 0000000..c0cfbe6
--- /dev/null
+++ b/posts/systemd.md
@@ -0,0 +1,11 @@
+# Se você queria motivos pra não usar systemd...
+
+- [Motivo 1](https://github.com/systemd/systemd/pull/40954)
+- [Motivo 2](https://github.com/flatpak/xdg-desktop-portal/pull/1922)
+
+É, pessoal, a coisa tá feia. A Red Hat e a IBM parecem estar trabalhando em dar
+uma justificativa real pro pessoal que não gostava do systemd. Por que isso
+tinha que estar em nível do systemd? Flatpak até entendo, e já não gostava dele
+por ser muito _Android_ pra mim e seria um grande foda-se, mas systemd? Bom,
+hora de ir pro Devuan, eu acho.
+
diff --git a/posts/tem-alguma-coisa-errada.md b/posts/tem-alguma-coisa-errada.md
new file mode 100644
index 0000000..8495caf
--- /dev/null
+++ b/posts/tem-alguma-coisa-errada.md
@@ -0,0 +1,27 @@
+# Tem alguma coisa errada com o Bazzite
+
+Eu já usei o cloudflare em alguns serviços e sei como que funciona, pelo menos
+no plano gratuito.
+
+Aquele block que apareceu no [Bazzite](https://bazzite.gg) é um block da
+Cloudflare que é gerenciado pelo controle WAF. O WAF tem como controlar o
+acesso dos serviços ao nível de IP e também geolocalização. É igual uma
+chainrule de um firewall, mas com controles mais específicos da cloudflare.
+Inclusive, tem como bloquear tanto um país como um todo quanto os IPs que estão
+fazendo ataques e bots. A Cloudflare consegue detectar VPNs e também o Tor e
+bloquear o acesso ou fazer passar por um JS challange (aqueles "Clique aqui
+para verificar que você é um humano").
+
+Eu, pelo menos _eu_, não conheço nenhuma rule do WAF que faça o efeito que deu
+pro bazzite pra todo o Brasil, porque não foi só o meu IP ou um bloco de uma
+operadora, e sim _todos_ os IPs de _todo_ o Brasil, sem contar que nenhum outro
+site que usa a CF foi bloqueado, somente o site do bazzite. Eu não sei o que
+mais pode dar o mesmo efeito de bloqueio _se não_ eles terem colocado um
+`(ip.src.country eq "BR")` pra mandar aquela página de bloqueio.
+
+No mínimo, o que aconteceu com o Bazzite merece uma explicação melhor, não é só
+a CF fazendo merda e eu não sei qual seria o motivo de ficar escondendo que fez
+merda e voltou atrás. Só sei de uma coisa: tem caroço nesse Angu.
+
+![](/static/tranquilo-demais.jpg)
+