54,302 blogs · [ { "id": "01a087c1-18f2-71d4-943a-e51dad427795", "title": "Quart 0.23 is 25% quicker and available now", "url": "https://pgjones.dev/blog/quart-0-23-released-2026/", "published_at": "2026-08-29T00:00:00+00:00" }, { "id": "01a087c1-18f2-71d4-943a-e51dacb13937", "title": "Amundsen's Maxim in practice", "url": "https://pgjones.dev/blog/amundsens-maxim-in-practice-2025/", "published_at": "2025-10-03T00:00:00+00:00" }, { "id": "01a087c1-18f2-71d4-943a-e51dac6fb9cf", "title": "How to type zod schemas for forms", "url": "https://pgjones.dev/blog/how-to-type-zod-form-schemas-2025/", "published_at": "2025-03-02T00:00:00+00:00" }, { "id": "01a087c1-18f2-71d4-943a-e51dac2fec73", "title": "How to use asyncio's TaskGroup for Faster routes", "url": "https://pgjones.dev/blog/how-to-task-group-2024/", "published_at": "2024-06-29T00:00:00+00:00" }, { "id": "01a087c1-18f2-71d4-943a-e51dab73f7a6", "title": "Flask, its ecosystem, and backwards compatibility", "url": "https://pgjones.dev/blog/flask-ecosystem-compatibility-2023/", "published_at": "2023-10-19T00:00:00+00:00" }, { "id": "01a087c1-18f2-71d4-943a-e51daadcdf10", "title": "Migrating from bcrypt to Argon2id for password hashing", "url": "https://pgjones.dev/blog/bcrypt-to-argon2-2023/", "published_at": "2023-05-30T00:00:00+00:00" }, { "id": "01a087c1-18f2-71d4-943a-e51daa9f551a", "title": "Trusted Publishing; how to publish to PyPI with Github Actions", "url": "https://pgjones.dev/blog/trusted-plublishing-2023/", "published_at": "2023-05-07T00:00:00+00:00" }, { "id": "01a087c1-18f2-71d4-943a-e51daa54df72", "title": "13 tips and techniques for modern Flask apps", "url": "https://pgjones.dev/blog/modern-flask-2023/", "published_at": "2023-02-06T00:00:00+00:00" }, { "id": "01a087c1-18f2-71d4-943a-e51daa0ed42e", "title": "Faster routing for Flask & Quart", "url": "https://pgjones.dev/blog/faster-routing-2022/", "published_at": "2022-06-26T00:00:00+00:00" }, { "id": "01a087c1-18f2-71d4-943a-e51da9704fca", "title": "Loading config from the environment in Quart & Flask", "url": "https://pgjones.dev/blog/environment-config-2022/", "published_at": "2022-03-28T00:00:00+00:00" }, { "id": "01a087c1-18f2-71d4-943a-e51da8fddf06", "title": "How I compare FastAPI with Flask/Quart", "url": "https://pgjones.dev/blog/fastapi-flask-quart-2022/", "published_at": "2022-01-16T00:00:00+00:00" }, { "id": "01a087c1-18f2-71d4-943a-e51da892928f", "title": "How Hypercorn handles half closed sockets", "url": "https://pgjones.dev/blog/half-closed-sockets-2021/", "published_at": "2021-12-03T00:00:00+00:00" }, { "id": "01a087c1-18f2-71d4-943a-e51da84b0a62", "title": "How to use Sentry with Quart", "url": "https://pgjones.dev/blog/quart-sentry-2021/", "published_at": "2021-11-14T00:00:00+00:00" }, { "id": "01a087c1-18f2-71d4-943a-e51da81f238b", "title": "How to use Postgres with Quart", "url": "https://pgjones.dev/blog/quart-postgres-2021/", "published_at": "2021-03-26T00:00:00+00:00" }, { "id": "01a087c1-18f2-71d4-943a-e51da7ddb5c9", "title": "Automatic API Testing", "url": "https://pgjones.dev/blog/automatic-api-testing-2021/", "published_at": "2021-02-28T00:00:00+00:00" }, { "id": "01a087c1-18f2-71d4-943a-e51da7667947", "title": "How to write ASGI middleware", "url": "https://pgjones.dev/blog/how-to-write-asgi-middleware-2021/", "published_at": "2021-02-07T00:00:00+00:00" }, { "id": "01a087c1-18f2-71d4-943a-e51da735d496", "title": "My evolution writing JSON-REST APIs", "url": "https://pgjones.dev/blog/rest-api-evolution-2020/", "published_at": "2020-12-11T00:00:00+00:00" }, { "id": "01a087c1-18f2-71d4-943a-e51da6e986ee", "title": "This site is now written in Svelte", "url": "https://pgjones.dev/blog/svelte-rewrite-2020/", "published_at": "2020-06-06T00:00:00+00:00" }, { "id": "01a087c1-18f2-71d4-943a-e51da689321f", "title": "Quart turns 3", "url": "https://pgjones.dev/blog/quart-turns-3-2020/", "published_at": "2020-05-21T00:00:00+00:00" }, { "id": "01a087c1-18f2-71d4-943a-e51da5a1fb9f", "title": "Packaging without setup.py", "url": "https://pgjones.dev/blog/packaging-without-setup-py-2020/", "published_at": "2020-04-19T00:00:00+00:00" }, { "id": "01a087c1-18f1-71b4-b6c6-f7d3c9c07832", "title": "Is there a startup time cost to type hinting?", "url": "https://pgjones.dev/blog/cost-of-type-hints-2020/", "published_at": "2020-02-26T00:00:00+00:00" }, { "id": "01a087c1-18f1-71b4-b6c6-f7d3c8e8a480", "title": "Verifying HTTP/2 Prioritisation in Hypercorn", "url": "https://pgjones.dev/blog/http2-prioritisation-2019/", "published_at": "2019-10-18T00:00:00+00:00" }, { "id": "01a087c1-18f1-71b4-b6c6-f7d3c8f112c8", "title": "Making Flask async and Quart sync", "url": "https://pgjones.dev/blog/flask-async-quart-sync-2019/", "published_at": "2019-10-18T00:00:00+00:00" }, { "id": "01a087c1-18f1-71b4-b6c6-f7d3c8373806", "title": "An early look at HTTP/3", "url": "https://pgjones.dev/blog/early-look-at-http3-2019/", "published_at": "2019-10-09T00:00:00+00:00" }, { "id": "01a087c1-18f1-71b4-b6c6-f7d3c7c9d52d", "title": "Adding an RSS feed", "url": "https://pgjones.dev/blog/rss-feed-2019/", "published_at": "2019-09-03T00:00:00+00:00" }, { "id": "01a087c1-18f1-71b4-b6c6-f7d3c70a1b8f", "title": "How to serve HTTP 1, 2, and 3 in Python", "url": "https://pgjones.dev/blog/http-1-2-3-2019/", "published_at": "2019-08-26T00:00:00+00:00" }, { "id": "01a087c1-18f1-71b4-b6c6-f7d3c62a1f48", "title": "How to setup CORS for a Single Page App", "url": "https://pgjones.dev/blog/spa-cors-2019/", "published_at": "2019-08-01T00:00:00+00:00" }, { "id": "01a087c1-18f1-71b4-b6c6-f7d3c54a1b5e", "title": "My experience with Push Promises (Server Push)", "url": "https://pgjones.dev/blog/push-promise-2019/", "published_at": "2019-05-11T00:00:00+00:00" } ] posts Claim your blog
Back to pgjones
Blog · corpus.blog/blogs/pgjones.dev/posts

pgjones

pgjones.dev

2026

2025

2024

2023

2022

2021

2020

2019