Luis Vaz // Rastrian
banner
rastrian.dev
Luis Vaz // Rastrian
@rastrian.dev
3 digit IQ master race (132, antifa), polygloth. Ethereal audio engineer (mix/master/design) & software menace engineer, compilers screams at me & autist.

#bolhadev #bolhasec #bolhatech

Github: github.com/Rastrian
Telegram: t.me/Rastrian
Spore is a minimal TCP tunnel implemented in Elixir/OTP. It forwards a local TCP port to a remote server, similar to Bore. Protocol and behavior follow the Rust original so clients and servers can interoperate when configured the same.

github.com/Rastrian/Spore

Inspiration: bore.pub
GitHub - Rastrian/Spore: Spore is a simple CLI tool for tunneling local TCP ports to a remote server.
Spore is a simple CLI tool for tunneling local TCP ports to a remote server. - Rastrian/Spore
github.com
September 22, 2025 at 1:48 PM
Why Reliability Demands Functional Programming: ADTs, Safety, and Critical Infrastructure

new blog post here:

blog.rastrian.dev/post/why-rel...
Why Reliability Demands Functional Programming: ADTs, Safety, and Critical Infrastructure
> In banking, telecom, and payments, reliability is not a nice to have. It is table stakes. The most reliable systems I have worked on reduce entire classes of bugs before the code even runs. Function...
blog.rastrian.dev
September 16, 2025 at 4:55 PM
Reposted by Luis Vaz // Rastrian
Notícia da BleepingComputer

"Hands on with Windows 11 Notepad's new markdown support" #bolhasec
Hands on with Windows 11 Notepad's new markdown support
Notepad now lets you use markdown text formatting on Windows 11, which means you can write in Notepad just like you could in WordPad.
www.bleepingcomputer.com
August 31, 2025 at 5:30 PM
Reposted by Luis Vaz // Rastrian
Beyond the NAT: CGNAT, Bandwidth, and Practical Tunneling

new blog post here:

blog.rastrian.dev/post/beyond-...
Beyond the NAT: CGNAT, Bandwidth, and Practical Tunneling
## Introduction Home internet in the 90s felt simple. You plugged into [Ethernet](https://en.wikipedia.org/wiki/Ethernet), got an [IPv4](https://en.wikipedia.org/wiki/IPv4) address, and you could expo...
blog.rastrian.dev
August 28, 2025 at 9:23 PM
Reposted by Luis Vaz // Rastrian
Improve the deployment time for opam2web
The opam2web image for opam.ocaml.org is huge weighing in at more than 25 GB. The bulk of this data is opam archives, which are updated and copied into a stock caddy image. There are two archives, ocaml/opam.ocaml.org-legacy, which hasn’t changed for 5 years and holds the cache for opam 1.x and ocaml/opam:archive, which is updated weekly. The current Dockerfile copies these files into a new layer each time opam2web builds. FROM --platform=linux/amd64 ocaml/opam:archive as opam-archive FROM ocaml/opam.ocaml.org-legacy as opam-legacy FROM alpine:3.20 as opam2web ... COPY --from=opam-legacy . /www ... RUN --mount=type=bind,target=/cache,from=opam-archive rsync -aH /cache/cache/ /www/cache/ ... And later, the entire /www structure is copied into a caddy:2.8.4 image. FROM caddy:2.8.4 WORKDIR /srv COPY --from=opam2web /www /usr/share/caddy COPY Caddyfile /etc/caddy/Caddyfile ENTRYPOINT ["caddy", "run", "--config", "/etc/caddy/Caddyfile", "--adapter", "caddyfile"] This method is considered “best practice” when creating Docker images, but in this case, it produces a very large image, which takes a long time to deploy. For Docker to use an existing layer, we need the final FROM ... to be the layer we want to use as the base. In the above snippet, the caddy:2.8.4 layer will be the base layer and will be reused. The archive, ocaml/opam:archive, is created by this Dockerfile, which ultimately uses alpine:latest. FROM ocaml/opam:archive AS opam-archive FROM ocurrent/opam-staging@sha256:f921cd51dda91f61a52a2c26a8a188f8618a2838e521d3e4afa3ca1da637903e AS archive WORKDIR /home/opam/opam-repository RUN --mount=type=bind,target=/cache,from=opam-archive rsync -aH /cache/cache/ /home/opam/opam-repository/cache/ RUN opam admin cache --link=/home/opam/opam-repository/cache FROM alpine:latest COPY --chown=0:0 --from=archive [ "/home/opam/opam-repository/cache", "/cache" ] In our opam2web build, we could use FROM ocaml/opam:archive and then apk add caddy, which would reuse the entire 15GB layer and add the few megabytes for caddy. ocaml/opam.ocaml.org-legacy is another 8GB. This legacy data could be integrated by adding it to ocaml/opam:archive in a different directory to ensure compatibility with anyone else using this image. This is PR#324 let install_package_archive opam_image = let open Dockerfile in + from ~alias:"opam-legacy" "ocaml/opam.ocaml.org-legacy" @@ from ~alias:"opam-archive" "ocaml/opam:archive" @@ from ~alias:"archive" opam_image @@ workdir "/home/opam/opam-repository" @@ run ~mounts:[mount_bind ~target:"/cache" ~from:"opam-archive" ()] "rsync -aH /cache/cache/ /home/opam/opam-repository/cache/" @@ run "opam admin cache --link=/home/opam/opam-repository/cache" @@ from "alpine:latest" @@ + copy ~chown:"0:0" ~from:"opam-legacy" ~src:["/"] ~dst:"/legacy" () @@ copy ~chown:"0:0" ~from:"archive" ~src:["/home/opam/opam-repository/cache"] ~dst:"/cache" () Finally, we need to update opam2web to use ocaml/opam:archive as the base layer rather than caddy:2.8.4, resulting in the final part of the Dockerfile looking like this. FROM ocaml/opam:archive RUN apk add --update git curl rsync libstdc++ rdfind caddy COPY --from=build-opam2web /opt/opam2web /usr/local COPY --from=build-opam-doc /usr/bin/opam-dev /usr/local/bin/opam COPY --from=build-opam-doc /opt/opam/doc /usr/local/share/opam2web/content/doc COPY ext/key/opam-dev-team.pgp /www/opam-dev-pubkey.pgp ADD bin/opam-web.sh /usr/local/bin ARG DOMAIN=opam.ocaml.org ARG OPAM_REPO_GIT_SHA=master ARG BLOG_GIT_SHA=master RUN echo ${OPAM_REPO_GIT_SHA} >> /www/opam_git_sha RUN echo ${BLOG_GIT_SHA} >> /www/blog_git_sha RUN /usr/local/bin/opam-web.sh ${DOMAIN} ${OPAM_REPO_GIT_SHA} ${BLOG_GIT_SHA} WORKDIR /srv COPY Caddyfile /etc/caddy/Caddyfile ENTRYPOINT ["caddy", "run", "--config", "/etc/caddy/Caddyfile", "--adapter", "caddyfile"] I acknowledge that this final image now contains some extra unneeded packages such as git, curl, etc, but this seems a minor inconvenience. The Caddyfile can be adjusted to make everything still appear to be in the same place: :80 { redir /install.sh https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh redir /install.ps1 https://raw.githubusercontent.com/ocaml/opam/master/shell/install.ps1 @version_paths path /1.1/* /1.2.0/* /1.2.2/* handle @version_paths { root * /legacy file_server } handle /cache/* { root * / file_server } handle { root * /www file_server } } In this configuration, the Docker push is only 650MB rather than 25GB. The changes to opam2web are in PR#245 Test with some external URLs: * https://staging.opam.ocaml.org/index.tar.gz * https://staging.opam.ocaml.org/archives/0install.2.18/0install-2.18.tbz * https://staging.opam.ocaml.org/cache/0install.2.18/0install-2.18.tbz * https://staging.opam.ocaml.org/1.2.2/archives/0install.2.12.3+opam.tar.gz * https://staging.opam.ocaml.org/1.2.0/archives/0install.2.12.1+opam.tar.gz * https://staging.opam.ocaml.org/1.1/archives/0install.2.10+opam.tar.gz * https://staging.opam.ocaml.org/opam_git_sha * https://staging.opam.ocaml.org/blog_git_sha * https://staging.opam.ocaml.org/opam-dev-pubkey.pgp
dlvr.it
August 31, 2025 at 2:36 AM
Beyond the NAT: CGNAT, Bandwidth, and Practical Tunneling

new blog post here:

blog.rastrian.dev/post/beyond-...
Beyond the NAT: CGNAT, Bandwidth, and Practical Tunneling
## Introduction Home internet in the 90s felt simple. You plugged into [Ethernet](https://en.wikipedia.org/wiki/Ethernet), got an [IPv4](https://en.wikipedia.org/wiki/IPv4) address, and you could expo...
blog.rastrian.dev
August 28, 2025 at 9:23 PM
Opening the Gate: My first blog post

OSS 🐫 (OCaml) blog with RSS + GH Issues management

blog.rastrian.dev/post/opening...
Opening the Gate: My first blog post
This blog is meant to be a place for discussion. Most posts will circle around technology, **software engineering, DevOps, networking, tunneling, programming languages, and AI/LLMs**, but the scope is...
blog.rastrian.dev
August 27, 2025 at 6:33 PM
Reposted by Luis Vaz // Rastrian
For the first time, OpenAI models are available on AWS
For the first time, OpenAI models are available on AWS | TechCrunch
This is a juicy competitive move for both companies after AWS faced an onslaught of criticism over its progress with AI.
techcrunch.com
August 5, 2025 at 8:12 PM
Reposted by Luis Vaz // Rastrian
Lean FRO Year 3 Roadmap
www.youtube.com/watch?v=xIHG...
August 5, 2025 at 8:12 PM
Reposted by Luis Vaz // Rastrian
alchebra linear
August 5, 2025 at 6:43 PM
Reposted by Luis Vaz // Rastrian
The best time to start learning OCaml was 10 years ago, the second best time is now
August 5, 2025 at 2:32 PM
Reposted by Luis Vaz // Rastrian
Prender em casa ainda não é suficiente.

Quero esse bandido no sistema prisional. Chorando numa cela.
August 4, 2025 at 10:48 PM
Reposted by Luis Vaz // Rastrian
Sem querer ser agressivo com o amigo, acho esse um péssimo take.

Não, você não tem que virar (merd)engenheiro de prompt, mas também não vai te fazer mal algum conhecer a ferramentas e ter a capacidade de usar elas.

Usar de fato ou não, aí é escolha sua.
Lembrete diário: Não usem IA no seu trabalho. Você está se alienando e vai estar cada vez mais perto do caminho de ser substituível.

Usar IA não aumenta sua produtividade, usar IA cria provas que você não é necessário na empresa.
August 5, 2025 at 7:11 PM
Não usem ferramentas, como um martelo, faça tudo na mão.

Diversas empresas vão exigir o uso minimamente so ferramental, e a grande questão é justamente saber quando usar e o que tirar de benefício, se você nunca testar a ferramenta nunca vai saber o impacto.

Ela só não pode ditar seu aprendizado.
Lembrete diário: Não usem IA no seu trabalho. Você está se alienando e vai estar cada vez mais perto do caminho de ser substituível.

Usar IA não aumenta sua produtividade, usar IA cria provas que você não é necessário na empresa.
August 5, 2025 at 8:01 PM
Reposted by Luis Vaz // Rastrian
Mixed Feelings.

1) Algumas empresas vão requerer o uso de AI
2)Vão dizer que se não tá usando AI direito o erro é seu, aprenda context engineering
3) Vão colocar no seu lugar alguém que saiba usar a AI para ser mais produtivo

Sabe o que resolveria isso? ESTADO FORTE! SINDICALIZAÇÃO etc.. etc...
Lembrete diário: Não usem IA no seu trabalho. Você está se alienando e vai estar cada vez mais perto do caminho de ser substituível.

Usar IA não aumenta sua produtividade, usar IA cria provas que você não é necessário na empresa.
August 5, 2025 at 6:22 PM
Reposted by Luis Vaz // Rastrian
August 5, 2025 at 6:53 PM
Reposted by Luis Vaz // Rastrian
August 5, 2025 at 7:15 PM
Reposted by Luis Vaz // Rastrian
Por que não estamos violando o elo de confiança com a Fundação Cacique Cobra Coral.
July 30, 2025 at 10:42 PM
Reposted by Luis Vaz // Rastrian
Vocês sabem quem no seu dia mais fraco e com mais tesão...
Sure, sex is cool, but, have you ever refactored your NixOS config?
July 30, 2025 at 8:50 PM
Reposted by Luis Vaz // Rastrian
atualização dos gatinhos
July 30, 2025 at 10:45 PM
imagina vc tá lá em kosovo, mal separou da servia e vem a dua lipa postando que quer anexar teu bairro
July 31, 2025 at 12:32 AM
Reposted by Luis Vaz // Rastrian
Sure, sex is cool, but, have you ever refactored your NixOS config?
July 30, 2025 at 7:02 PM
Reposted by Luis Vaz // Rastrian
qdo vc é xóvem td é map

qdo vc é adulto as vezes vc só quer tacar um reducer mesmo e ja era
June 9, 2025 at 2:26 PM
Reposted by Luis Vaz // Rastrian
Always remember:
June 9, 2025 at 6:44 AM