41554 blogs · [ { "id": "01a0821a-d599-70fc-8da5-fe67fbe43dc1", "title": "Browser automation with Pydantic AI + Playwright", "url": "http://blog.pamelafox.org/2026/08/browser-automation-with-pydantic-ai.html", "published_at": "2026-08-20T21:57:18+00:00" }, { "id": "01a08751-f280-708d-aa5e-879daa6f4d99", "title": "Browser automation with Pydantic AI + Playwright", "url": "https://blog.pamelafox.org/2026/08/browser-automation-with-pydantic-ai.html", "published_at": "2026-08-20T21:57:18+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe67fc01597b", "title": "Building safe MCP servers for your PostgreSQL database", "url": "http://blog.pamelafox.org/2026/08/building-safe-mcp-servers-for-your.html", "published_at": "2026-08-12T18:07:30+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452e5cc93cf", "title": "Building safe MCP servers for your PostgreSQL database", "url": "https://blog.pamelafox.org/2026/08/building-safe-mcp-servers-for-your.html", "published_at": "2026-08-12T18:07:30+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe67fcb2b6fc", "title": "My experience at PyCon US 2026", "url": "http://blog.pamelafox.org/2026/05/pycon-2026-reflections.html", "published_at": "2026-05-20T05:41:47+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452e6227e71", "title": "My experience at PyCon US 2026", "url": "https://blog.pamelafox.org/2026/05/pycon-2026-reflections.html", "published_at": "2026-05-20T05:41:47+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe67fccf3c11", "title": "Building MCP servers with Entra ID and pre-authorized clients", "url": "http://blog.pamelafox.org/2026/04/building-mcp-servers-with-entra-id-and.html", "published_at": "2026-04-02T23:44:00+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452e65be1f9", "title": "Building MCP servers with Entra ID and pre-authorized clients", "url": "https://blog.pamelafox.org/2026/04/building-mcp-servers-with-entra-id-and.html", "published_at": "2026-04-02T23:44:00+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe67fcdbf14f", "title": "Do stricter MCP tool schemas increase agent reliability?", "url": "http://blog.pamelafox.org/2026/03/do-stricter-mcp-tool-schemas-increase.html", "published_at": "2026-03-17T06:13:00+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452e67e0357", "title": "Do stricter MCP tool schemas increase agent reliability?", "url": "https://blog.pamelafox.org/2026/03/do-stricter-mcp-tool-schemas-increase.html", "published_at": "2026-03-17T06:13:00+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe67fd209a0d", "title": "Can MCP choose my outfit?", "url": "http://blog.pamelafox.org/2026/03/can-mcp-choose-my-outfit.html", "published_at": "2026-03-13T05:49:00+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452e68f0833", "title": "Can MCP choose my outfit?", "url": "https://blog.pamelafox.org/2026/03/can-mcp-choose-my-outfit.html", "published_at": "2026-03-13T05:49:00+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe67fdb52f15", "title": "Learnings from the PyAI conference", "url": "http://blog.pamelafox.org/2026/03/learnings-from-pyai-conference.html", "published_at": "2026-03-12T06:40:00+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452e7270e9e", "title": "Learnings from the PyAI conference", "url": "https://blog.pamelafox.org/2026/03/learnings-from-pyai-conference.html", "published_at": "2026-03-12T06:40:00+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe67fe9cabfb", "title": "Using on-behalf-of flow for Entra-based MCP servers", "url": "http://blog.pamelafox.org/2026/01/using-on-behalf-of-flow-for-entra-based.html", "published_at": "2026-01-16T20:34:00+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452e76d5248", "title": "Using on-behalf-of flow for Entra-based MCP servers", "url": "https://blog.pamelafox.org/2026/01/using-on-behalf-of-flow-for-entra-based.html", "published_at": "2026-01-16T20:34:00+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe67feaa1a36", "title": "Watch the recordings from my Python + MCP series", "url": "http://blog.pamelafox.org/2025/12/watch-recordings-from-my-python-mcp.html", "published_at": "2025-12-19T15:50:00+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452e7746b6d", "title": "Watch the recordings from my Python + MCP series", "url": "https://blog.pamelafox.org/2025/12/watch-recordings-from-my-python-mcp.html", "published_at": "2025-12-19T15:50:00+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe67fef5a23c", "title": "Watch the recordings from my Python + AI series", "url": "http://blog.pamelafox.org/2025/10/watch-recordings-from-my-python-ai.html", "published_at": "2025-10-31T14:22:00+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452e84c5871", "title": "Watch the recordings from my Python + AI series", "url": "https://blog.pamelafox.org/2025/10/watch-recordings-from-my-python-ai.html", "published_at": "2025-10-31T14:22:00+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe67ff8a1ebd", "title": "Filter the tools from MCP servers", "url": "http://blog.pamelafox.org/2025/09/filter-tools-from-mcp-servers.html", "published_at": "2025-09-18T17:35:00+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452e89a24ef", "title": "Filter the tools from MCP servers", "url": "https://blog.pamelafox.org/2025/09/filter-tools-from-mcp-servers.html", "published_at": "2025-09-18T17:35:00+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe6800315780", "title": "How I learn about generative AI", "url": "http://blog.pamelafox.org/2025/08/how-i-learn-about-generative-ai.html", "published_at": "2025-08-19T05:59:00+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452e92632fb", "title": "How I learn about generative AI", "url": "https://blog.pamelafox.org/2025/08/how-i-learn-about-generative-ai.html", "published_at": "2025-08-19T05:59:00+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe6800978de8", "title": "GPT-5: Will it RAG?", "url": "http://blog.pamelafox.org/2025/08/gpt-5-will-it-rag.html", "published_at": "2025-08-11T18:40:00+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452ea0c6085", "title": "GPT-5: Will it RAG?", "url": "https://blog.pamelafox.org/2025/08/gpt-5-will-it-rag.html", "published_at": "2025-08-11T18:40:00+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe68012bd46b", "title": "Red-teaming a RAG app: gpt-4o-mini v. llama3.1 v. hermes3", "url": "http://blog.pamelafox.org/2025/08/red-teaming-rag-app-what-happens.html", "published_at": "2025-08-04T17:08:00+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452eac50bf9", "title": "Red-teaming a RAG app: gpt-4o-mini v. llama3.1 v. hermes3", "url": "https://blog.pamelafox.org/2025/08/red-teaming-rag-app-what-happens.html", "published_at": "2025-08-04T17:08:00+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe6801e41ddc", "title": "Automated repo maintenance via GitHub Copilot coding agent", "url": "http://blog.pamelafox.org/2025/07/automated-repo-maintenance-with-github.html", "published_at": "2025-07-24T15:05:00+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452eb995ea1", "title": "Automated repo maintenance via GitHub Copilot coding agent", "url": "https://blog.pamelafox.org/2025/07/automated-repo-maintenance-with-github.html", "published_at": "2025-07-24T15:05:00+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe6802879f27", "title": "To MCP or not to MCP?", "url": "http://blog.pamelafox.org/2025/07/to-mcp-or-not-to-mcp.html", "published_at": "2025-07-21T14:43:00+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452ebb38a6b", "title": "To MCP or not to MCP?", "url": "https://blog.pamelafox.org/2025/07/to-mcp-or-not-to-mcp.html", "published_at": "2025-07-21T14:43:00+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe6803535e48", "title": "MCP: Bringing mashups back!", "url": "http://blog.pamelafox.org/2025/07/mcp-bringing-mashups-back.html", "published_at": "2025-07-18T14:12:00+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452ebcf6fb3", "title": "MCP: Bringing mashups back!", "url": "https://blog.pamelafox.org/2025/07/mcp-bringing-mashups-back.html", "published_at": "2025-07-18T14:12:00+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe6803afe7de", "title": "Getting a hysterectomy: My reasons and recovery", "url": "http://blog.pamelafox.org/2025/06/getting-hysterectomy-my-reasons-and.html", "published_at": "2025-06-24T17:17:00+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452ecb11e96", "title": "Getting a hysterectomy: My reasons and recovery", "url": "https://blog.pamelafox.org/2025/06/getting-hysterectomy-my-reasons-and.html", "published_at": "2025-06-24T17:17:00+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe68045bc3c2", "title": "Proficient Python: A free interactive online course", "url": "http://blog.pamelafox.org/2025/06/proficient-python-free-interactive.html", "published_at": "2025-06-23T21:17:00+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452ed247ddf", "title": "Proficient Python: A free interactive online course", "url": "https://blog.pamelafox.org/2025/06/proficient-python-free-interactive.html", "published_at": "2025-06-23T21:17:00+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe68052f3388", "title": "Teaching Python with Codespaces", "url": "http://blog.pamelafox.org/2025/06/teaching-python-with-codespaces.html", "published_at": "2025-06-01T15:14:00+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452edc9776f", "title": "Teaching Python with Codespaces", "url": "https://blog.pamelafox.org/2025/06/teaching-python-with-codespaces.html", "published_at": "2025-06-01T15:14:00+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe6805d4e548", "title": "A visual introduction to vector embeddings", "url": "http://blog.pamelafox.org/2025/05/a-visual-exploration-of-vector.html", "published_at": "2025-05-28T20:10:00+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452eead263a", "title": "A visual introduction to vector embeddings", "url": "https://blog.pamelafox.org/2025/05/a-visual-exploration-of-vector.html", "published_at": "2025-05-28T20:10:00+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe6806ac8ff6", "title": "Using DefaultAzureCredential across multiple tenants", "url": "http://blog.pamelafox.org/2025/04/using-defaultazurecredential-across.html", "published_at": "2025-04-29T05:51:00+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452ef7b978d", "title": "Using DefaultAzureCredential across multiple tenants", "url": "https://blog.pamelafox.org/2025/04/using-defaultazurecredential-across.html", "published_at": "2025-04-29T05:51:00+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe68075b7574", "title": "Use any Python AI agent framework with free GitHub Models", "url": "http://blog.pamelafox.org/2025/04/how-to-use-any-python-ai-agent.html", "published_at": "2025-04-11T07:30:00+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452f03d0f41", "title": "Use any Python AI agent framework with free GitHub Models", "url": "https://blog.pamelafox.org/2025/04/how-to-use-any-python-ai-agent.html", "published_at": "2025-04-11T07:30:00+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe68081ca2b6", "title": "Building a streaming DeepSeek-R1 app on Azure", "url": "http://blog.pamelafox.org/2025/04/building-streaming-deepseek-r1-app-on.html", "published_at": "2025-04-02T18:15:00+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452f0fea7cf", "title": "Building a streaming DeepSeek-R1 app on Azure", "url": "https://blog.pamelafox.org/2025/04/building-streaming-deepseek-r1-app-on.html", "published_at": "2025-04-02T18:15:00+00:00" }, { "id": "01a0821a-d599-70fc-8da5-fe6808fd24d6", "title": "Evaluating gpt-4o-mini vs. gpt-3.5-turbo for RAG applications", "url": "http://blog.pamelafox.org/2025/03/gpt-4o-mini-vs-gpt-35-turbo-for-rag.html", "published_at": "2025-03-06T08:22:00+00:00" }, { "id": "01a08751-f281-73f5-9a7a-b452f153beba", "title": "Evaluating gpt-4o-mini vs. gpt-3.5-turbo for RAG applications", "url": "https://blog.pamelafox.org/2025/03/gpt-4o-mini-vs-gpt-35-turbo-for-rag.html", "published_at": "2025-03-06T08:22:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec430bbdb71a", "title": "Safety evaluations for LLM-powered apps", "url": "http://blog.pamelafox.org/2025/02/is-your-llm-powered-app-providing-safe.html", "published_at": "2025-02-25T21:56:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec430be63243", "title": "Observations: Using Python with DeepSeek-R1", "url": "http://blog.pamelafox.org/2025/01/observations-using-python-with-deepseek.html", "published_at": "2025-01-31T22:07:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec430c2758f3", "title": "Add browser speech input & output to your app", "url": "http://blog.pamelafox.org/2024/12/add-browser-speech-inputoutput-to-your.html", "published_at": "2024-12-17T23:02:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec430cf7177c", "title": "Running Azurite inside a Dev Container", "url": "http://blog.pamelafox.org/2024/11/running-azurite-inside-dev-container.html", "published_at": "2024-11-27T18:25:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec430d0c2df0", "title": "Making a dev container with multiple data services", "url": "http://blog.pamelafox.org/2024/11/making-dev-container-with-multiple-data.html", "published_at": "2024-11-25T21:37:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec430db90682", "title": "My first PyBay: Playing improv with Python", "url": "http://blog.pamelafox.org/2024/11/my-first-pybay-playing-improv-with.html", "published_at": "2024-11-20T20:25:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec430de65ed7", "title": "Entity extraction using OpenAI structured outputs mode", "url": "http://blog.pamelafox.org/2024/11/entity-extraction-using-openai.html", "published_at": "2024-11-06T00:09:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec430ea56b83", "title": "My parenting strategy: earn enough $ to outsource", "url": "http://blog.pamelafox.org/2024/09/my-parenting-strategy-earn-enough-to.html", "published_at": "2024-09-27T18:39:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec430f73844d", "title": "Integrating vision into RAG applications", "url": "http://blog.pamelafox.org/2024/09/integrating-vision-into-rag-applications.html", "published_at": "2024-09-08T14:29:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec431019c533", "title": "Making an Ollama-compatible RAG app", "url": "http://blog.pamelafox.org/2024/08/making-ollama-compatible-rag-app.html", "published_at": "2024-08-09T20:28:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec43104d149d", "title": "Playwright and Pytest parametrization for responsive E2E tests", "url": "http://blog.pamelafox.org/2024/07/playwright-and-pytest-parametrization.html", "published_at": "2024-07-10T20:07:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec431123c41d", "title": "Should you use Quart or FastAPI for an AI app?", "url": "http://blog.pamelafox.org/2024/07/should-you-use-quart-or-fastapi-for-ai.html", "published_at": "2024-07-10T17:07:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec43117a4809", "title": "pgvector for Python developers", "url": "http://blog.pamelafox.org/2024/06/pgvector-for-python-developers.html", "published_at": "2024-06-14T21:34:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec431240ed53", "title": "Using SLMs in GitHub Codespaces", "url": "http://blog.pamelafox.org/2024/06/using-slms-in-github-codespaces.html", "published_at": "2024-06-14T18:38:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec431335b0eb", "title": "RAG on a database table with PostgreSQL", "url": "http://blog.pamelafox.org/2024/06/rag-on-database-table-with-postgresql.html", "published_at": "2024-06-10T20:55:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec4313fdf683", "title": "Doing RAG? Vector search is *not* enough", "url": "http://blog.pamelafox.org/2024/06/vector-search-is-not-enough.html", "published_at": "2024-06-03T21:44:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec43146ea960", "title": "Truncating conversation history for OpenAI chat completions", "url": "http://blog.pamelafox.org/2024/06/truncating-conversation-history-for.html", "published_at": "2024-06-01T21:28:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec43155d25f3", "title": "Evaluating RAG chat apps: Can your app say \"I don't know\"?", "url": "http://blog.pamelafox.org/2024/03/evaluating-rag-chat-apps-can-your-app.html", "published_at": "2024-03-05T19:36:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec43155ee88f", "title": "RAG techniques: Function calling for more structured retrieval", "url": "http://blog.pamelafox.org/2024/03/rag-techniques-using-function-calling.html", "published_at": "2024-03-01T22:38:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec4315aba36c", "title": "RAG techniques: Cleaning user questions with an LLM", "url": "http://blog.pamelafox.org/2024/02/rag-techniques-cleaning-user-questions.html", "published_at": "2024-02-16T21:42:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec4316824972", "title": "Converting HTML pages to PDFs with Playwright", "url": "http://blog.pamelafox.org/2024/01/converting-html-pages-to-pdfs-with.html", "published_at": "2024-01-28T21:12:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec4316de15b1", "title": "Evaluating a RAG chat app: Approach, SDKs, and Tools", "url": "http://blog.pamelafox.org/2024/01/evaluating-rag-chat-app-approach-sdks.html", "published_at": "2024-01-16T23:12:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec431759b2e6", "title": "Developer relations & motherhood: Will they blend?", "url": "http://blog.pamelafox.org/2024/01/developer-relations-motherhood-will.html", "published_at": "2024-01-10T22:28:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec4318359687", "title": "Using FastAPI for an OpenAI chat backend", "url": "http://blog.pamelafox.org/2024/01/using-fastapi-for-openai-chat-backend.html", "published_at": "2024-01-04T00:23:00+00:00" }, { "id": "01a0e50b-5259-7390-ac15-ec431868d818", "title": "Using llamafile for local dev for an OpenAI Python web app", "url": "http://blog.pamelafox.org/2024/01/using-llamafile-for-local-dev-for.html", "published_at": "2024-01-03T21:10:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba64ad702f", "title": "Santa Tracker Tales: Nearly crashing Google's servers, Leaking Santa's data, and Angering an entire country", "url": "http://blog.pamelafox.org/2023/12/santa-tracker-tales-nearly-crashing.html", "published_at": "2023-12-29T15:39:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba64fb5ca5", "title": "How to document a native California garden", "url": "http://blog.pamelafox.org/2023/12/how-to-document-native-california-garden.html", "published_at": "2023-12-28T23:38:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba65a80dbf", "title": "My failed attempt at using a closet as an office", "url": "http://blog.pamelafox.org/2023/12/my-failed-attempt-at-using-closet-as.html", "published_at": "2023-12-19T20:00:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba666eb484", "title": "Strategies for managing dependencies for Python samples", "url": "http://blog.pamelafox.org/2023/10/strategies-for-managing-dependencies.html", "published_at": "2023-10-27T17:11:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba669635bc", "title": "Using SQLAlchemy 2.0 in Flask", "url": "http://blog.pamelafox.org/2023/09/using-sqlalchemy-20-in-flask.html", "published_at": "2023-09-28T23:17:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba66ef2566", "title": "Best practices for OpenAI Chat apps: Go Keyless", "url": "http://blog.pamelafox.org/2023/09/best-practices-for-openai-chat-apps-go.html", "published_at": "2023-09-28T18:54:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba67e21423", "title": "Best practices for OpenAI Chat apps: Streaming UI", "url": "http://blog.pamelafox.org/2023/09/best-practices-for-openai-chat-apps_16.html", "published_at": "2023-09-16T14:03:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba68dc95c0", "title": "Best practices for OpenAI Chat apps: Concurrency", "url": "http://blog.pamelafox.org/2023/09/best-practices-for-openai-chat-apps.html", "published_at": "2023-09-13T19:42:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba6970f09a", "title": "Mocking async openai package calls with pytest", "url": "http://blog.pamelafox.org/2023/09/mocking-async-openai-package-calls-with.html", "published_at": "2023-09-11T18:15:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba6a23271d", "title": "Fetching JSON over streaming HTTP", "url": "http://blog.pamelafox.org/2023/08/fetching-json-over-streaming-http.html", "published_at": "2023-08-14T17:28:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba6a85948e", "title": "Accessibility snapshot testing for Python web apps (Part 2)", "url": "http://blog.pamelafox.org/2023/08/accessibility-snapshot-testing-for.html", "published_at": "2023-08-07T21:37:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba6a9b0d5c", "title": "Automated accessibility audits for Python web apps (Part 1)", "url": "http://blog.pamelafox.org/2023/07/automated-accessibility-audits-for.html", "published_at": "2023-07-21T18:44:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba6abdc9cf", "title": "Tips for debugging Flask deployments to Azure App Service", "url": "http://blog.pamelafox.org/2023/06/tips-for-debugging-flask-deployments-to.html", "published_at": "2023-06-27T23:50:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba6b8c1ba8", "title": "Best practices for prompting GitHub Copilot in VS Code", "url": "http://blog.pamelafox.org/2023/06/best-practices-for-prompting-github.html", "published_at": "2023-06-21T21:28:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba6bd9c509", "title": "Providing feedback on the VS Code Python experience", "url": "http://blog.pamelafox.org/2023/06/providing-feedback-on-vs-code-python.html", "published_at": "2023-06-02T21:27:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba6c636ad8", "title": "Streaming ChatGPT with server-sent events in Flask", "url": "http://blog.pamelafox.org/2023/05/streaming-chatgpt-with-server-sent.html", "published_at": "2023-05-25T21:07:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba6cd5ecc1", "title": "A Dev Container for SQLAlchemy with SQLTools", "url": "http://blog.pamelafox.org/2023/05/a-dev-container-for-sqlalchemy-with.html", "published_at": "2023-05-22T19:51:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba6da1dfb4", "title": "Deploying to App Service free tier with Bicep", "url": "http://blog.pamelafox.org/2023/05/deploying-to-app-service-free-tier-with.html", "published_at": "2023-05-10T18:16:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba6e0f1146", "title": "Deploying PostgreSQL servers with Bicep", "url": "http://blog.pamelafox.org/2023/05/postgresql-bicep.html", "published_at": "2023-05-08T18:38:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba6e6ced15", "title": "Converting a Spreadsheet to JSON with Neptyne", "url": "http://blog.pamelafox.org/2023/04/converting-spreadsheet-to-json-with.html", "published_at": "2023-04-07T23:37:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba6e84d6d9", "title": "Adding Microsoft Graph authentication as a Flask Blueprint", "url": "http://blog.pamelafox.org/2023/03/adding-microsoft-graph-authentication.html", "published_at": "2023-03-31T23:08:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba6edeedbb", "title": "Deploying a containerized FastAPI app to Azure Container Apps", "url": "http://blog.pamelafox.org/2023/03/deploying-containerized-fastapi-app-to.html", "published_at": "2023-03-03T18:42:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba6f6a1741", "title": "Rendering matplotlib charts in Flask", "url": "http://blog.pamelafox.org/2023/03/rendering-matplotlib-charts-in-flask.html", "published_at": "2023-03-02T22:10:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba6fbb1e4c", "title": "Fast-loading Python Dev Containers", "url": "http://blog.pamelafox.org/2023/03/fast-loading-python-dev-containers.html", "published_at": "2023-03-02T20:31:00+00:00" }, { "id": "01a0e51d-1bac-725f-97eb-54ba70a95a48", "title": "Hosting Python Web Apps on Azure: A Price-Off", "url": "http://blog.pamelafox.org/2023/03/hosting-python-web-apps-on-azure-price.html", "published_at": "2023-03-02T18:28:00+00:00" } ] posts Claim your blog
Back to Pamela Fox
Blog · corpus.blog/blogs/blog.pamelafox.org/posts

Pamela Fox

blog.pamelafox.org

2026

2025

2024

2023