[{"content":"Hello! I\u0026rsquo;m Luís Roberto Weck — a software engineer from Santa Catarina, Brazil, with a Bachelor\u0026rsquo;s degree in Software Engineering and a strong background in PostgreSQL.\nI like databases, open source and pragmatic backend code. These days I work at Pismo, and when I\u0026rsquo;m not building, I\u0026rsquo;m at conferences like PGConf Brasil celebrating 30 years of the world\u0026rsquo;s best elephant. 🐘\nOn this blog I share technical learnings, experiments and random observations. My personal repositories lean Go and Java, with the odd neural network project when curiosity calls.\nYou can find me at:\nx.com/@lrweck — micro musings LinkedIn — professional profile Instagram — behind the scenes GitHub — code ","date":"12 September 2026","externalUrl":null,"permalink":"/posts/about/","section":"Notes, ideas, and things I'm poking at","summary":"","title":"About","type":"page"},{"content":"","date":"12 September 2026","externalUrl":null,"permalink":"/posts/","section":"Notes, ideas, and things I'm poking at","summary":"","title":"Notes, ideas, and things I'm poking at","type":"page"},{"content":"A simple record of places I\u0026rsquo;ve been.\n","date":"12 September 2026","externalUrl":null,"permalink":"/posts/travel/","section":"Notes, ideas, and things I'm poking at","summary":"","title":"Travel","type":"page"},{"content":"All posts, in reverse chronological order.\n","date":"11 September 2026","externalUrl":null,"permalink":"/posts/blog/","section":"All posts","summary":"","title":"All posts","type":"blog"},{"content":"","date":"11 September 2026","externalUrl":null,"permalink":"/posts/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","date":"11 September 2026","externalUrl":null,"permalink":"/posts/categories/general/","section":"Categories","summary":"","title":"General","type":"categories"},{"content":"","date":"11 September 2026","externalUrl":null,"permalink":"/posts/tags/intro/","section":"Tags","summary":"","title":"Intro","type":"tags"},{"content":"","date":"11 September 2026","externalUrl":null,"permalink":"/posts/series/layout-testing/","section":"Series","summary":"","title":"Layout-Testing","type":"series"},{"content":"","date":"11 September 2026","externalUrl":null,"permalink":"/posts/tags/long/","section":"Tags","summary":"","title":"Long","type":"tags"},{"content":"","date":"11 September 2026","externalUrl":null,"permalink":"/posts/tags/markdown/","section":"Tags","summary":"","title":"Markdown","type":"tags"},{"content":"","date":"11 September 2026","externalUrl":null,"permalink":"/posts/tags/meta/","section":"Tags","summary":"","title":"Meta","type":"tags"},{"content":"","date":"11 September 2026","externalUrl":null,"permalink":"/posts/series/","section":"Series","summary":"","title":"Series","type":"series"},{"content":"","date":"11 September 2026","externalUrl":null,"permalink":"/posts/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"11 September 2026","externalUrl":null,"permalink":"/posts/tags/test/","section":"Tags","summary":"","title":"Test","type":"tags"},{"content":" This is a long-form test post to check typography, headings, table of contents, reading time and pagination across many sections.\nWhat is a long post? # A long post gives the browser a chance to show scrollable content, sticky table of contents and the author box at the bottom.\nParagraphs and emphasis # Lorem ipsum dolor sit amet, consectetur adipiscing elit. Bold text works well, as does italic text and inline code. You can also have strikethrough and links.\nBlockquotes are rendered as callouts. This is a quoted paragraph that spans multiple lines of text to force a nice blockquote visual with proper spacing and indentation on both light and dark themes.\nLists # First item Second item Third item with a long explanation that wraps across multiple lines so we can see how list padding behaves Nested item Another nested item Fourth item Unordered list:\nItem one Item two Item three Code block # def fibonacci(n): if n \u0026lt;= 1: return n return fibonacci(n - 1) + fibonacci(n - 2) for i in range(10): print(f\u0026#34;fib({i}) = {fibonacci(i)}\u0026#34;) Second major heading # Some content with inline code and external links.\nColumn A Column B Column C 1 2 3 4 5 6 7 8 9 Math block # $$E = mc^2$$ Third major heading # This section is mostly filler text so the page has real length. The idea is to make a scrollable article that demonstrates all the components in a realistic way.\nLorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris.\nAnother paragraph follows, because real blog posts have many paragraphs and we want the reading time to show something meaningful like \u0026ldquo;2 min\u0026rdquo; instead of \u0026ldquo;1 min\u0026rdquo;.\nConclusion # End of the test article1. The footer should show author, tags and categories, plus previous/next pagination.\nThis is a footnote rendered by Hugo\u0026rsquo;s native markdown support.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":"11 September 2026","externalUrl":null,"permalink":"/posts/blog/test-long-post/","section":"All posts","summary":"","title":"Test Long Post","type":"blog"},{"content":"","date":"11 September 2026","externalUrl":null,"permalink":"/posts/categories/testing/","section":"Categories","summary":"","title":"Testing","type":"categories"},{"content":"Hello! This is the first post on this blog.\nI\u0026rsquo;ll be sharing:\nTechnical learnings and experiments Interesting things I come across Random observations from daily life Stay tuned!\n","date":"11 September 2026","externalUrl":null,"permalink":"/posts/blog/welcome-to-my-blog/","section":"All posts","summary":"","title":"Welcome to My Blog","type":"blog"},{"content":"","date":"10 September 2026","externalUrl":null,"permalink":"/posts/tags/code/","section":"Tags","summary":"","title":"Code","type":"tags"},{"content":"This post checks the code copy button and syntax highlighting across languages.\nGo # package main import \u0026#34;fmt\u0026#34; func main() { m := map[string]int{\u0026#34;a\u0026#34;: 1, \u0026#34;b\u0026#34;: 2} for k, v := range m { fmt.Printf(\u0026#34;%s=%d\\n\u0026#34;, k, v) } } Bash # #!/bin/bash for f in *.md; do echo \u0026#34;Processing $f\u0026#34; wc -l \u0026#34;$f\u0026#34; done SQL # SELECT user_id, count(*) AS total FROM events WHERE created_at \u0026gt; NOW() - interval \u0026#39;1 day\u0026#39; GROUP BY user_id ORDER BY total DESC LIMIT 10; Inline # Wrap code like docker compose up and go test ./... to see inline styles.\nJSON # { \u0026#34;site\u0026#34;: \u0026#34;posts\u0026#34;, \u0026#34;build\u0026#34;: { \u0026#34;hugo\u0026#34;: \u0026#34;0.165.0\u0026#34;, \u0026#34;docker\u0026#34;: true }, \u0026#34;theme\u0026#34;: \u0026#34;blowfish\u0026#34; } graph LR A[Build] --\u003e B[Test] --\u003e C[Deploy] ","date":"10 September 2026","externalUrl":null,"permalink":"/posts/blog/test-code-post/","section":"All posts","summary":"","title":"Test Code Post","type":"blog"},{"content":"","date":"9 September 2026","externalUrl":null,"permalink":"/posts/tags/short/","section":"Tags","summary":"","title":"Short","type":"tags"},{"content":"This is a very short post. Just a couple of sentences to see how compact cards look in the listing.\nA second paragraph with a link to check how in-article links render.\n","date":"9 September 2026","externalUrl":null,"permalink":"/posts/blog/test-short-post/","section":"All posts","summary":"","title":"Test Short Post","type":"blog"},{"content":"","date":"2 July 2026","externalUrl":null,"permalink":"/posts/tags/data/","section":"Tags","summary":"","title":"Data","type":"tags"},{"content":"","date":"2 July 2026","externalUrl":null,"permalink":"/posts/categories/dev/","section":"Categories","summary":"","title":"Dev","type":"categories"},{"content":"","date":"2 July 2026","externalUrl":null,"permalink":"/posts/tags/math/","section":"Tags","summary":"","title":"Math","type":"tags"},{"content":"For small charts, a hand-written SVG beats any charting library. A bar is just a \u0026lt;rect\u0026gt;:\n\u0026lt;svg viewBox=\u0026#34;0 0 200 100\u0026#34;\u0026gt; \u0026lt;rect x=\u0026#34;10\u0026#34; y=\u0026#34;20\u0026#34; width=\u0026#34;30\u0026#34; height=\u0026#34;80\u0026#34; fill=\u0026#34;#3b82f6\u0026#34;/\u0026gt; \u0026lt;rect x=\u0026#34;50\u0026#34; y=\u0026#34;45\u0026#34; width=\u0026#34;30\u0026#34; height=\u0026#34;55\u0026#34; fill=\u0026#34;#3b82f6\u0026#34;/\u0026gt; \u0026lt;/svg\u0026gt; The mean of my sample data, for the record:\n$$\\mu = \\frac{1}{n}\\sum_{i=1}^{n} x_i$$No dependencies, no bundle, no logo on my page. For dashboards with real scale, use a real charting library — but most of us are making the tiny bar chart above.\n","date":"2 July 2026","externalUrl":null,"permalink":"/posts/blog/2026-visualizing-data/","section":"All posts","summary":"","title":"Visualizing Data Without a Framework","type":"blog"},{"content":"","date":"2 July 2026","externalUrl":null,"permalink":"/posts/tags/web/","section":"Tags","summary":"","title":"Web","type":"tags"},{"content":"","date":"15 March 2026","externalUrl":null,"permalink":"/posts/tags/dev/","section":"Tags","summary":"","title":"Dev","type":"tags"},{"content":"After years of trying things, only a short list survived:\nEditor: the one I stopped fighting and started using Terminal: tmux + a sensible config Version control: git with aliases I actually remember Notes: plain markdown files, synced, searchable This blog: static site, zero maintenance The pattern: every survivor is boring, fast, and does one thing well. The good tools are the ones you never think about.\n","date":"15 March 2026","externalUrl":null,"permalink":"/posts/blog/2026-favorite-tools/","section":"All posts","summary":"","title":"Favorite Tools, 2026 Edition","type":"blog"},{"content":"","date":"15 March 2026","externalUrl":null,"permalink":"/posts/tags/tools/","section":"Tags","summary":"","title":"Tools","type":"tags"},{"content":"","date":"7 November 2025","externalUrl":null,"permalink":"/posts/tags/shell/","section":"Tags","summary":"","title":"Shell","type":"tags"},{"content":"The difference between a script that survives and one that eats data is usually three flags:\n#!/usr/bin/env bash set -euo pipefail name=\u0026#34;${1:-default}\u0026#34; echo \u0026#34;Running with $name\u0026#34; -e stops on error -u catches unset variables -o pipefail stops pipelines mid-stream Quote every variable, use [[ ]] instead of [ ], and let ShellCheck be your reviewer. That\u0026rsquo;s the whole trick.\n","date":"7 November 2025","externalUrl":null,"permalink":"/posts/blog/2025-shell-scripting/","section":"All posts","summary":"","title":"Shell Scripting That Doesn't Suck","type":"blog"},{"content":"","date":"25 June 2025","externalUrl":null,"permalink":"/posts/tags/books/","section":"Tags","summary":"","title":"Books","type":"tags"},{"content":"","date":"25 June 2025","externalUrl":null,"permalink":"/posts/tags/reading/","section":"Tags","summary":"","title":"Reading","type":"tags"},{"content":"Everything is a system, so I read about systems:\nThe Design of Everyday Things — affordances are everywhere Chaos Monkeys — how the big platforms ship Site Reliability Engineering — error budgets as a feature Clean Architecture — the boundaries matter more than the framework A Philosophy of Software Design — complexity you can see is fixable Currently re-reading number five for the third time.\n","date":"25 June 2025","externalUrl":null,"permalink":"/posts/blog/2025-reading-list/","section":"All posts","summary":"","title":"Reading List, Mid-2025","type":"blog"},{"content":"This year\u0026rsquo;s background project was home automation. The rules I ended up with are boring on purpose:\nLights follow sunrise and sunset, not a fixed clock A single \u0026ldquo;goodnight\u0026rdquo; command that turns everything off Backups that run and notify on failure only The last one is the real lesson: silent success and loud failure beats any dashboard. After three months the system just disappears, which is exactly the point.\n","date":"14 February 2025","externalUrl":null,"permalink":"/posts/blog/2025-automating-home/","section":"All posts","summary":"","title":"Automating My Home Setup","type":"blog"},{"content":"","date":"14 February 2025","externalUrl":null,"permalink":"/posts/tags/automation/","section":"Tags","summary":"","title":"Automation","type":"tags"},{"content":"","date":"14 February 2025","externalUrl":null,"permalink":"/posts/tags/home/","section":"Tags","summary":"","title":"Home","type":"tags"},{"content":"","date":"14 February 2025","externalUrl":null,"permalink":"/posts/tags/life/","section":"Tags","summary":"","title":"Life","type":"tags"},{"content":"","date":"31 October 2024","externalUrl":null,"permalink":"/posts/tags/fun/","section":"Tags","summary":"","title":"Fun","type":"tags"},{"content":"A few harmless tricks from the community, collected here for October 31st:\nalias sl='vim' — watch a friend slowly realize what happened. Make their shell say a random creepy quote on every prompt. fortune | cowsay as the motd. All reversible, all funny, none destructive. Use responsibly.\n","date":"31 October 2024","externalUrl":null,"permalink":"/posts/blog/2024-linux-pranks/","section":"All posts","summary":"","title":"Halloween Linux Pranks","type":"blog"},{"content":"","date":"31 October 2024","externalUrl":null,"permalink":"/posts/tags/linux/","section":"Tags","summary":"","title":"Linux","type":"tags"},{"content":"","date":"31 October 2024","externalUrl":null,"permalink":"/posts/categories/misc/","section":"Categories","summary":"","title":"Misc","type":"categories"},{"content":"","date":"10 May 2024","externalUrl":null,"permalink":"/posts/tags/cheatsheet/","section":"Tags","summary":"","title":"Cheatsheet","type":"tags"},{"content":"","date":"10 May 2024","externalUrl":null,"permalink":"/posts/tags/docker/","section":"Tags","summary":"","title":"Docker","type":"tags"},{"content":"The commands I reach for most days, nothing more:\n# build with a name docker build -t myapp . # run and remove after exit, with a volume docker run --rm -p 8080:80 -v \u0026#34;$PWD\u0026#34;:/app myapp # exec into a running container docker exec -it $(docker ps -q) bash # clean everything docker system prune -af Save yourself the pain: put DOCKER_BUILDKIT=1 in your shell profile.\n","date":"10 May 2024","externalUrl":null,"permalink":"/posts/blog/2024-docker-cheatsheet/","section":"All posts","summary":"","title":"Docker Cheatsheet","type":"blog"},{"content":"","date":"20 January 2024","externalUrl":null,"permalink":"/posts/tags/review/","section":"Tags","summary":"","title":"Review","type":"tags"},{"content":"A quick look back at 2023:\nLearned Rust and actually shipped something with it Rebuilt my home setup around containers Wrote 2 posts here (a humble start, before this year) Goals for 2024: post more often, keep the learning log going, and finally automate the stuff I keep doing by hand.\n","date":"20 January 2024","externalUrl":null,"permalink":"/posts/blog/2024-year-in-review/","section":"All posts","summary":"","title":"Year in Review 2023","type":"blog"},{"content":"","date":"2 August 2023","externalUrl":null,"permalink":"/posts/tags/learning/","section":"Tags","summary":"","title":"Learning","type":"tags"},{"content":"Week one with Rust. The borrow checker and I are not friends yet, but we are negotiating.\nfn main() { let s = String::from(\u0026#34;hello\u0026#34;); let n = \u0026amp;s; let m = \u0026amp;s; println!(\u0026#34;{n} {m}\u0026#34;); println!(\u0026#34;{}\u0026#34;, s); } Key insight so far: immutable borrows can coexist, mutable borrows are exclusive. Once that sank in, half the compiler errors started making sense. More in part two.\n","date":"2 August 2023","externalUrl":null,"permalink":"/posts/blog/2023-learning-rust/","section":"All posts","summary":"","title":"Learning Rust, Part 1","type":"blog"},{"content":"","date":"2 August 2023","externalUrl":null,"permalink":"/posts/tags/rust/","section":"Tags","summary":"","title":"Rust","type":"tags"},{"content":"","date":"2 August 2023","externalUrl":null,"permalink":"/posts/series/rust-series/","section":"Series","summary":"","title":"Rust-Series","type":"series"},{"content":"","date":"14 March 2023","externalUrl":null,"permalink":"/posts/tags/beginner/","section":"Tags","summary":"","title":"Beginner","type":"tags"},{"content":"I want to keep this blog as a mix of notes and long-form writing. Let\u0026rsquo;s start with something small: the quadratic formula.\nFor any $ax^2 + bx + c = 0$:\n$$x = \\frac{-b \\pm \\sqrt{b^2 - 4ac}}{2a}$$The discriminant $b^2 - 4ac$ tells you how many real roots exist. If it is positive you get two, zero gives one, negative means none — the classic.\nThat\u0026rsquo;s it for today. More math soon.\n","date":"14 March 2023","externalUrl":null,"permalink":"/posts/blog/2023-first-quadratics/","section":"All posts","summary":"","title":"First Quadratics","type":"blog"},{"content":"","externalUrl":null,"permalink":"/posts/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"}]