56,966 blogs · [ { "id": "01a087d4-419d-7217-9ee0-01b58feedd15", "title": "Two-step structured outputs for LLMs", "url": "https://ricardoanderegg.com/posts/two-step-structured-outputs-llm/", "published_at": "2026-01-27T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b590a2c735", "title": "Software Willy Wonka", "url": "https://ricardoanderegg.com/posts/if-llms-replace-programmers-be-willy-wonka/", "published_at": "2026-01-19T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b590c949b5", "title": "Fixing Claude Code's broken file search", "url": "https://ricardoanderegg.com/posts/claude-code-file-suggestion-hook/", "published_at": "2026-01-14T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b591b1eccb", "title": "Getting better at coding with LLMs", "url": "https://ricardoanderegg.com/posts/getting-better-coding-llms-agents/", "published_at": "2026-01-11T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b5925590fc", "title": "Preact without a build step, including routing and signals", "url": "https://ricardoanderegg.com/posts/preact-without-build-step-including-routing/", "published_at": "2025-12-21T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b592fda569", "title": "Taming your shell for LLMs", "url": "https://ricardoanderegg.com/posts/control-shell-permissions-llm-codex/", "published_at": "2025-09-26T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b593ac2f9e", "title": "Stop reaching for file appends. Create new files instead.", "url": "https://ricardoanderegg.com/posts/replace-file-append-with-new-files/", "published_at": "2025-09-15T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b5944562b2", "title": "Simple strategy to run Ansible tasks in parallel", "url": "https://ricardoanderegg.com/posts/ansible-parallel-tasks-using-tags/", "published_at": "2025-03-05T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b5947415be", "title": "Why I use executable scripts instead of shell aliases", "url": "https://ricardoanderegg.com/posts/executable-bin-scripts-instead-of-shell-aliases/", "published_at": "2025-03-04T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b595071214", "title": "Exploiting Cursor to write better code", "url": "https://ricardoanderegg.com/posts/cursor-ide-better-code-local-documentation/", "published_at": "2025-03-03T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b595f72bf0", "title": "ZIP as a bundle format", "url": "https://ricardoanderegg.com/posts/zip-bundle-format/", "published_at": "2025-01-11T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b596a169fd", "title": "From HTML template strings to elements", "url": "https://ricardoanderegg.com/posts/from-html-template-strings-to-elements/", "published_at": "2024-12-23T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b597041413", "title": "Handling keyboard shortcuts in JavaScript", "url": "https://ricardoanderegg.com/posts/handle-keyboard-shortcuts-javascript/", "published_at": "2024-12-21T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b5970d0b58", "title": "Query a list of dictionaries with DuckDB", "url": "https://ricardoanderegg.com/posts/duckdb-query-list-of-dictionaries-python-dict/", "published_at": "2024-12-16T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b5974c66b4", "title": "Cron jobs inside your web app", "url": "https://ricardoanderegg.com/posts/cron-jobs-inside-web-app-python/", "published_at": "2024-12-13T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b597ebbe29", "title": "My take on Web Components", "url": "https://ricardoanderegg.com/posts/my-take-on-web-components/", "published_at": "2024-12-12T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b598397bc2", "title": "DuckDB as a vector database", "url": "https://ricardoanderegg.com/posts/duckdb-vector-database/", "published_at": "2024-02-13T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b598575e68", "title": "Building HTML components from Python functions", "url": "https://ricardoanderegg.com/posts/python-build-html-components-lxml/", "published_at": "2024-01-11T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b59860622d", "title": "Python profiling and timing utils", "url": "https://ricardoanderegg.com/posts/python-profiling-timing-utils/", "published_at": "2023-09-08T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b599481b57", "title": "Replacing FFI with a CLI", "url": "https://ricardoanderegg.com/posts/replace-ffi-cli-subprocess-call/", "published_at": "2023-07-23T18:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b5994d4aa0", "title": "macOS port 5000 not working", "url": "https://ricardoanderegg.com/posts/macos-port-5000-not-working/", "published_at": "2023-07-23T12:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b59a11f66a", "title": "Named parameters in shell scripts and Makefiles", "url": "https://ricardoanderegg.com/posts/named-parameters-shell-scripts-makefiles/", "published_at": "2023-05-21T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b59a4bc2d0", "title": "Makefile tricks for Python projects", "url": "https://ricardoanderegg.com/posts/makefile-python-project-tricks/", "published_at": "2023-05-19T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b59ad68d74", "title": "Using IPython for timing and profiling", "url": "https://ricardoanderegg.com/posts/ipython-timing-profiling-script/", "published_at": "2023-04-18T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b59b74816e", "title": "Validate Python dataclass types", "url": "https://ricardoanderegg.com/posts/python-validate-dataclass-types/", "published_at": "2023-03-21T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b59c57dbca", "title": "Using mmap to share data between processes", "url": "https://ricardoanderegg.com/posts/mmap-share-data-between-processes/", "published_at": "2023-03-20T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b59c9d0801", "title": "Running regexes on memory-mapped files", "url": "https://ricardoanderegg.com/posts/python-regex-mmap-memory-mapped-file/", "published_at": "2023-03-17T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b59d62b518", "title": "Moving from Apple Notes to Obsidian", "url": "https://ricardoanderegg.com/posts/apple-notes-to-obsidian/", "published_at": "2023-03-14T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b59db29328", "title": "This is now a stream of my thoughts", "url": "https://ricardoanderegg.com/posts/stream-of-thoughts-notes/", "published_at": "2023-03-14T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b59de77679", "title": "Using Apple Notes as a CMS", "url": "https://ricardoanderegg.com/posts/apple-notes-blog-cms/", "published_at": "2023-03-14T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b59eb24f5a", "title": "Using SQLite for logging and ad-hoc profiling", "url": "https://ricardoanderegg.com/posts/sqlite-logging-profiling-programs/", "published_at": "2023-03-12T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b59f358c00", "title": "Python automation utils", "url": "https://ricardoanderegg.com/posts/python-automation-utils/", "published_at": "2023-03-11T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b59f6f8c06", "title": "Stream a CSV from S3 to a parquet file", "url": "https://ricardoanderegg.com/posts/stream-csv-s3-parquet-local-file/", "published_at": "2023-03-11T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b59f972bfc", "title": "Use a subprocess instead of a dependency", "url": "https://ricardoanderegg.com/posts/subprocess-instead-of-dependency/", "published_at": "2023-03-11T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b59f9f5e54", "title": "Passing arrays as parameters to SQLite", "url": "https://ricardoanderegg.com/posts/sqlite-list-array-parameter-query/", "published_at": "2022-08-30T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b5a022d3cb", "title": "Musings about automation", "url": "https://ricardoanderegg.com/posts/musings-thoughts-software-automation/", "published_at": "2022-08-14T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b5a02527c9", "title": "The unreasonable developer experience of SQLite", "url": "https://ricardoanderegg.com/posts/sqlite-developer-experience/", "published_at": "2022-08-10T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b5a1178a85", "title": "Building a remote SQLite explorer", "url": "https://ricardoanderegg.com/posts/sqlite-remote-explorer-gui/", "published_at": "2022-06-23T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b5a1b3b7bc", "title": "Peeking and backtracking Python generators", "url": "https://ricardoanderegg.com/posts/peeking-backtracking-python-generator/", "published_at": "2022-05-28T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b5a1f04218", "title": "Extending SQLite with Rust", "url": "https://ricardoanderegg.com/posts/extending-sqlite-with-rust/", "published_at": "2022-05-15T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b5a2d3969a", "title": "Python, SQLite, and thread safety", "url": "https://ricardoanderegg.com/posts/python-sqlite-thread-safety/", "published_at": "2022-04-04T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b5a3c642ca", "title": "The best code is easy code", "url": "https://ricardoanderegg.com/posts/easy-code-is-best-code/", "published_at": "2021-07-23T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b5a49bd5a0", "title": "Heroku-style deployments with Docker and git tags", "url": "https://ricardoanderegg.com/posts/git-push-deployments-docker-tags/", "published_at": "2021-04-25T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b5a553cdaf", "title": "Bloom filters explained in an image", "url": "https://ricardoanderegg.com/posts/bloom-filters-poster/", "published_at": "2021-04-11T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b5a63c8e80", "title": "Understanding Bloom Filters by building one", "url": "https://ricardoanderegg.com/posts/understanding-bloom-filters-by-building-one/", "published_at": "2021-04-06T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b5a6b066a6", "title": "Hash functions explained in an image", "url": "https://ricardoanderegg.com/posts/what-is-a-hash-function-different-types/", "published_at": "2021-03-11T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b5a6cd4f40", "title": "Multiple, shared, in-memory SQLite databases in Python", "url": "https://ricardoanderegg.com/posts/python-multiple-shared-in-memory-sqlite-databases/", "published_at": "2021-02-16T00:00:00+00:00" }, { "id": "01a087d4-419d-7217-9ee0-01b5a6f3c1b1", "title": "Vanishing feedback button with FastAPI and hyperscript", "url": "https://ricardoanderegg.com/posts/easy-feedback-button-fastapi-htmx-javascript-hyperscript/", "published_at": "2021-02-11T00:00:00+00:00" }, { "id": "01a087d4-419e-715c-b771-09b78200bc12", "title": "Managing Python environments with mamba and pip-tools", "url": "https://ricardoanderegg.com/posts/python-manage-environments-with-mamba-pip-tools/", "published_at": "2021-01-25T00:00:00+00:00" }, { "id": "01a087d4-419e-715c-b771-09b782628a46", "title": "Single file applications", "url": "https://ricardoanderegg.com/posts/write-apps-in-single-file/", "published_at": "2020-11-03T00:00:00+00:00" }, { "id": "01a087d4-419e-715c-b771-09b782b5ffa1", "title": "Notes on Simple Made Easy", "url": "https://ricardoanderegg.com/posts/notes-simple-made-easy-rich-hickey/", "published_at": "2020-09-22T00:00:00+00:00" }, { "id": "01a087d4-419e-715c-b771-09b782d425d1", "title": "Short posts", "url": "https://ricardoanderegg.com/posts/write-short-blog-posts/", "published_at": "2020-07-31T00:00:00+00:00" }, { "id": "01a087d4-419e-715c-b771-09b7835401a0", "title": "Connect to remote docker host via SSH.", "url": "https://ricardoanderegg.com/posts/remote-manage-docker-with-ssh/", "published_at": "2020-07-29T00:00:00+00:00" }, { "id": "01a087d4-419e-715c-b771-09b7842bd619", "title": "Run your containers as non-root", "url": "https://ricardoanderegg.com/posts/local-files-permissions-docker-non-root-security/", "published_at": "2020-07-22T00:00:00+00:00" }, { "id": "01a087d4-419e-715c-b771-09b784428ed8", "title": "Put your bash code in functions", "url": "https://ricardoanderegg.com/posts/wrap-bash-code-functions/", "published_at": "2020-06-16T00:00:00+00:00" }, { "id": "01a087d4-419e-715c-b771-09b78513e43f", "title": "Conda management", "url": "https://ricardoanderegg.com/posts/python-manage-conda-environments/", "published_at": "2020-02-21T00:00:00+00:00" }, { "id": "01a087d4-419e-715c-b771-09b7851564dc", "title": "Education before innovation", "url": "https://ricardoanderegg.com/posts/education-before-innovation/", "published_at": "2020-02-07T00:00:00+00:00" }, { "id": "01a087d4-419e-715c-b771-09b7852078a2", "title": "Fixing a bug in the Haskell installer", "url": "https://ricardoanderegg.com/posts/fixing-ghcup-bug/", "published_at": "2020-01-16T00:00:00+00:00" }, { "id": "01a087d4-419e-715c-b771-09b785c6de14", "title": "Divide, Search, Abstract", "url": "https://ricardoanderegg.com/posts/problem-solving-divide-search-abstract/", "published_at": "2019-11-28T00:00:00+00:00" }, { "id": "01a087d4-419e-715c-b771-09b786433058", "title": "Language identification with fastText", "url": "https://ricardoanderegg.com/posts/python-fast-language-identification-fasttext/", "published_at": "2019-08-20T00:00:00+00:00" }, { "id": "01a087d4-419e-715c-b771-09b786c64f1a", "title": "Linking notebooks", "url": "https://ricardoanderegg.com/posts/python-jupyter-link-local-notebook/", "published_at": "2019-07-25T00:00:00+00:00" }, { "id": "01a087d4-419e-715c-b771-09b786d4e72b", "title": "Formatting jupyter notebooks with black", "url": "https://ricardoanderegg.com/posts/black-formatting-jupyter-notebook/", "published_at": "2019-07-22T00:00:00+00:00" }, { "id": "01a087d4-419e-715c-b771-09b786f7e572", "title": "About me", "url": "https://ricardoanderegg.com/about/", "published_at": "2019-06-01T00:00:00+00:00" } ] posts Claim your blog
Back to polyrand
Blog · corpus.blog/blogs/ricardoanderegg.com/posts

polyrand

ricardoanderegg.com

2026

2025

2024

2023

2022

2021

2020

2019