From f4167e3e2c6be21fe21742bb3a8eefc471e08e82 Mon Sep 17 00:00:00 2001 From: esquizo Date: Fri, 19 Jun 2026 09:31:18 -0300 Subject: unificado posts em um arquivo --- Makefile | 18 ++--- blog/anonimato-estatistica.md | 146 -------------------------------------- blog/centralizacao-lei-felca.md | 144 ------------------------------------- blog/conta-deletada.md | 35 --------- blog/espacos-liminares.md | 13 ---- blog/first.md | 25 ------- blog/problemas-rust.md | 88 ----------------------- blog/rss.md | 90 ----------------------- blog/systemd.md | 11 --- blog/tem-alguma-coisa-errada.md | 27 ------- posts/anonimato-estatistica.md | 146 ++++++++++++++++++++++++++++++++++++++ posts/centralizacao-lei-felca.md | 144 +++++++++++++++++++++++++++++++++++++ posts/conta-deletada.md | 35 +++++++++ posts/espacos-liminares.md | 13 ++++ posts/first.md | 25 +++++++ posts/makefiles.md | 116 ++++++++++++++++++++++++++++++ posts/orientacao-a-objetos.md | 88 +++++++++++++++++++++++ posts/problemas-rust.md | 88 +++++++++++++++++++++++ posts/rss.md | 90 +++++++++++++++++++++++ posts/systemd.md | 11 +++ posts/tem-alguma-coisa-errada.md | 27 +++++++ tutoriais/makefiles.md | 116 ------------------------------ tutoriais/orientacao-a-objetos.md | 88 ----------------------- 23 files changed, 788 insertions(+), 796 deletions(-) delete mode 100644 blog/anonimato-estatistica.md delete mode 100644 blog/centralizacao-lei-felca.md delete mode 100644 blog/conta-deletada.md delete mode 100644 blog/espacos-liminares.md delete mode 100644 blog/first.md delete mode 100644 blog/problemas-rust.md delete mode 100644 blog/rss.md delete mode 100644 blog/systemd.md delete mode 100644 blog/tem-alguma-coisa-errada.md create mode 100644 posts/anonimato-estatistica.md create mode 100644 posts/centralizacao-lei-felca.md create mode 100644 posts/conta-deletada.md create mode 100644 posts/espacos-liminares.md create mode 100644 posts/first.md create mode 100644 posts/makefiles.md create mode 100644 posts/orientacao-a-objetos.md create mode 100644 posts/problemas-rust.md create mode 100644 posts/rss.md create mode 100644 posts/systemd.md create mode 100644 posts/tem-alguma-coisa-errada.md delete mode 100644 tutoriais/makefiles.md delete mode 100644 tutoriais/orientacao-a-objetos.md diff --git a/Makefile b/Makefile index a9b1c53..fe22e38 100644 --- a/Makefile +++ b/Makefile @@ -1,19 +1,11 @@ + +POSTS=$(patsubst %.md,%.html,$(wildcard posts/*.md)) + PAGES=index.html\ + about.html\ blog/index.html\ - blog/first.html\ - blog/anonimato-estatistica.html\ - blog/centralizacao-lei-felca.html\ - blog/conta-deletada.html\ - blog/tem-alguma-coisa-errada.html\ - blog/systemd.html\ - blog/rss.html\ - blog/espacos-liminares.html\ - blog/problemas-rust.html\ tutoriais/index.html\ - tutoriais/index.rss\ - tutoriais/makefiles.html\ - tutoriais/orientacao-a-objetos.html\ - about.html + $(POSTS) RSS = blog/index.rss tutoriais/index.rss diff --git a/blog/anonimato-estatistica.md b/blog/anonimato-estatistica.md deleted file mode 100644 index 959e682..0000000 --- a/blog/anonimato-estatistica.md +++ /dev/null @@ -1,146 +0,0 @@ -# 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 - - -*: ou pelo menos as pessoas que você quer não saibam quem é você - - -## 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. - -I=log2(1p) - -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 - -I=log2(p) - -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: - -E=log2(s) - -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 - - - - HP - = - E - + - - - - n - - - - I - n - - - - -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/blog/centralizacao-lei-felca.md b/blog/centralizacao-lei-felca.md deleted file mode 100644 index 5b8b5fe..0000000 --- a/blog/centralizacao-lei-felca.md +++ /dev/null @@ -1,144 +0,0 @@ -# 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/) - ->ain, esquizo, vou ficar sem meu -lolzinho
-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:
->hm, não tem problema o jogo saber onde eu moro -
-Faça essa pergunta:
->por que um jogo precisa saber onde que eu moro? -
-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. -
>ain, esquizo, mas não sei qual distro usar
-Pega o que for mais bonitinho. As perguntas reais vão surgir conforme você usar. - -### Mídia (música, séries, filmes) - - - -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. -
->mas e o nostr? -
-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/blog/conta-deletada.md b/blog/conta-deletada.md deleted file mode 100644 index ab26bbc..0000000 --- a/blog/conta-deletada.md +++ /dev/null @@ -1,35 +0,0 @@ -# Yep, eu deletei a conta do xitter. - -Eu tinha botado na minha cabeça: -
->na primeira notícia que aparecer que o xitter -vai começar a verificar, eu vou apagar a conta -
-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/blog/espacos-liminares.md b/blog/espacos-liminares.md deleted file mode 100644 index 2201c94..0000000 --- a/blog/espacos-liminares.md +++ /dev/null @@ -1,13 +0,0 @@ -# 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/blog/first.md b/blog/first.md deleted file mode 100644 index f413172..0000000 --- a/blog/first.md +++ /dev/null @@ -1,25 +0,0 @@ -# FIRST! - -Ok, finalmente decidi fazer alguma coisa com essa merda desse domínio que eu -comprei. Primeiro, antes de tudo: - ->ain, esquizo, sem js - -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/blog/problemas-rust.md b/blog/problemas-rust.md deleted file mode 100644 index 6cec8f7..0000000 --- a/blog/problemas-rust.md +++ /dev/null @@ -1,88 +0,0 @@ -# "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/blog/rss.md b/blog/rss.md deleted file mode 100644 index 5f9aab7..0000000 --- a/blog/rss.md +++ /dev/null @@ -1,90 +0,0 @@ -# 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: - -
curl -s 'link do canal' | \
-    grep -oP 'href="\Khttps://www\.youtube\.com/feeds/videos\.xml\?channel_id=[^"]+'
- -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/blog/systemd.md b/blog/systemd.md deleted file mode 100644 index c0cfbe6..0000000 --- a/blog/systemd.md +++ /dev/null @@ -1,11 +0,0 @@ -# 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/blog/tem-alguma-coisa-errada.md b/blog/tem-alguma-coisa-errada.md deleted file mode 100644 index 8495caf..0000000 --- a/blog/tem-alguma-coisa-errada.md +++ /dev/null @@ -1,27 +0,0 @@ -# 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) - 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 + + +*: ou pelo menos as pessoas que você quer não saibam quem é você + + +## 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. + +I=log2(1p) + +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 + +I=log2(p) + +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: + +E=log2(s) + +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 + + + + HP + = + E + + + + + + n + + + + I + n + + + + +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/) + +>ain, esquizo, vou ficar sem meu +lolzinho
+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:
+>hm, não tem problema o jogo saber onde eu moro +
+Faça essa pergunta:
+>por que um jogo precisa saber onde que eu moro? +
+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. +
>ain, esquizo, mas não sei qual distro usar
+Pega o que for mais bonitinho. As perguntas reais vão surgir conforme você usar. + +### Mídia (música, séries, filmes) + + + +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. +
+>mas e o nostr? +
+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: +
+>na primeira notícia que aparecer que o xitter +vai começar a verificar, eu vou apagar a conta +
+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: + +>ain, esquizo, sem js + +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. + +
index.html: header.html.part index.html.part footer.html.part
+	cat header.html.part index.html.part footer.html.part > index.html
+ +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. + +
index.html: header.html.part index.html.part footer.html.part
+	cat header.html.part index.html.part footer.html.part > index.html
+
+about.html: header.html.part about.html.part footer.html.part
+	cat header.html.part about.html.part footer.html.part > about.html
+ +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. + +
%.html: header.phtml %.phtml footer.phtml
+    cat $^ > $@
+
+ +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 $@ +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. + +
%.html: header.phtml %.phtml footer.phtml
+    cat $^ > $@
+
+%.phtml: %.md
+    markdown < $< > $@
+ +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: + +
curl -s 'link do canal' | \
+    grep -oP 'href="\Khttps://www\.youtube\.com/feeds/videos\.xml\?channel_id=[^"]+'
+ +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) + diff --git a/tutoriais/makefiles.md b/tutoriais/makefiles.md deleted file mode 100644 index 35d8921..0000000 --- a/tutoriais/makefiles.md +++ /dev/null @@ -1,116 +0,0 @@ -# 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. - -
index.html: header.html.part index.html.part footer.html.part
-	cat header.html.part index.html.part footer.html.part > index.html
- -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. - -
index.html: header.html.part index.html.part footer.html.part
-	cat header.html.part index.html.part footer.html.part > index.html
-
-about.html: header.html.part about.html.part footer.html.part
-	cat header.html.part about.html.part footer.html.part > about.html
- -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. - -
%.html: header.phtml %.phtml footer.phtml
-    cat $^ > $@
-
- -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 $@ -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. - -
%.html: header.phtml %.phtml footer.phtml
-    cat $^ > $@
-
-%.phtml: %.md
-    markdown < $< > $@
- -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/tutoriais/orientacao-a-objetos.md b/tutoriais/orientacao-a-objetos.md deleted file mode 100644 index b5121c0..0000000 --- a/tutoriais/orientacao-a-objetos.md +++ /dev/null @@ -1,88 +0,0 @@ -# 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. -- cgit v1.2.3