The Curious Engineer

All blogs / AI / ML

pamela fox's blog

blog.pamelafox.org

AI / MLPythonJavaScript / TypeScriptEssays / personalEngineering blogs

Posts
338 from 20 Oct 2007 to 20 Aug 2026
Posting
monthly (10 in the last year)
Kind
personal blog
Feed
http://blog.pamelafox.org/feeds/posts/default

2026 8

  1. Browser automation with Pydantic AI + Playwright
  2. Building safe MCP servers for your PostgreSQL database
  3. My experience at PyCon US 2026
  4. Building MCP servers with Entra ID and pre-authorized clients
  5. Do stricter MCP tool schemas increase agent reliability?
  6. Can MCP choose my outfit?
  7. Learnings from the PyAI conference
  8. Using on-behalf-of flow for Entra-based MCP servers

2025 19

  1. Watch the recordings from my Python + MCP series
  2. Watch the recordings from my Python + AI series
  3. Filter the tools from MCP servers
  4. How I learn about generative AI
  5. GPT-5: Will it RAG?
  6. Red-teaming a RAG app: gpt-4o-mini v. llama3.1 v. hermes3
  7. Automated repo maintenance via GitHub Copilot coding agent
  8. To MCP or not to MCP?
  9. MCP: Bringing mashups back!
  10. Getting a hysterectomy: My reasons and recovery
  11. Proficient Python: A free interactive online course
  12. Teaching Python with Codespaces
  13. A visual introduction to vector embeddings
  14. Using DefaultAzureCredential across multiple tenants
  15. Use any Python AI agent framework with free GitHub Models
  16. Building a streaming DeepSeek-R1 app on Azure
  17. Evaluating gpt-4o-mini vs. gpt-3.5-turbo for RAG applications
  18. Safety evaluations for LLM-powered apps
  19. Observations: Using Python with DeepSeek-R1

2024 23

  1. Add browser speech input & output to your app
  2. Running Azurite inside a Dev Container
  3. Making a dev container with multiple data services
  4. My first PyBay: Playing improv with Python
  5. Entity extraction using OpenAI structured outputs mode
  6. My parenting strategy: earn enough $ to outsource
  7. Integrating vision into RAG applications
  8. Making an Ollama-compatible RAG app
  9. Playwright and Pytest parametrization for responsive E2E tests
  10. Should you use Quart or FastAPI for an AI app?
  11. pgvector for Python developers
  12. Using SLMs in GitHub Codespaces
  13. RAG on a database table with PostgreSQL
  14. Doing RAG? Vector search is *not* enough
  15. Truncating conversation history for OpenAI chat completions
  16. Evaluating RAG chat apps: Can your app say "I don't know"?
  17. RAG techniques: Function calling for more structured retrieval
  18. RAG techniques: Cleaning user questions with an LLM
  19. Converting HTML pages to PDFs with Playwright
  20. Evaluating a RAG chat app: Approach, SDKs, and Tools
  21. Developer relations & motherhood: Will they blend?
  22. Using FastAPI for an OpenAI chat backend
  23. Using llamafile for local dev for an OpenAI Python web app

2023 33

  1. Santa Tracker Tales: Nearly crashing Google's servers, Leaking Santa's data, and Angering an entire country
  2. How to document a native California garden
  3. My failed attempt at using a closet as an office
  4. Strategies for managing dependencies for Python samples
  5. Using SQLAlchemy 2.0 in Flask
  6. Best practices for OpenAI Chat apps: Go Keyless
  7. Best practices for OpenAI Chat apps: Streaming UI
  8. Best practices for OpenAI Chat apps: Concurrency
  9. Mocking async openai package calls with pytest
  10. Fetching JSON over streaming HTTP
  11. Accessibility snapshot testing for Python web apps (Part 2)
  12. Automated accessibility audits for Python web apps (Part 1)
  13. Tips for debugging Flask deployments to Azure App Service
  14. Best practices for prompting GitHub Copilot in VS Code
  15. Providing feedback on the VS Code Python experience
  16. Streaming ChatGPT with server-sent events in Flask
  17. A Dev Container for SQLAlchemy with SQLTools
  18. Deploying to App Service free tier with Bicep
  19. Deploying PostgreSQL servers with Bicep
  20. Converting a Spreadsheet to JSON with Neptyne
  21. Adding Microsoft Graph authentication as a Flask Blueprint
  22. Deploying a containerized FastAPI app to Azure Container Apps
  23. Rendering matplotlib charts in Flask
  24. Fast-loading Python Dev Containers
  25. Hosting Python Web Apps on Azure: A Price-Off
  26. Testing APIFlask with schemathesis
  27. Managing Python dependency versions for web projects
  28. Loading multiple Python versions with Pyodide
  29. Dis This: Disassemble Python code online
  30. Writing a static maps API with FastAPI and Azure
  31. Using Copilot with Python apps
  32. Tips for writing Bicep files for Azure deployment
  33. Tips for debugging Django deployments to Azure App Service

2022 21

  1. FastAPI on Azure Functions with Azure API Management
  2. Running PostgreSQL in a Dev Container with Flask/Django
  3. Deploying a Django app to Azure with the Azure Developer CLI
  4. A template for new Python projects with Dev Container support
  5. Happy Hacktoberfest!
  6. Deploying a containerized Flask app to Azure Container Apps
  7. Returning an image from an Azure Function App in Python
  8. Preparing a Django app for deployment on Azure App Service
  9. How I setup a Python project
  10. CS content inclusivity guide
  11. A browser-based runner for Faded Parsons Problems
  12. My bed-sharing setup
  13. Porting a project from spaces to tabs
  14. Tips for planting milkweeds in the Bay area
  15. Line highlighting extension for Code Mirror 6
  16. Inactivity timer for Chrome extensions
  17. Diversifying historical references in CS classes
  18. How to audit CS61A
  19. How accessibility helps a nursing mother
  20. My experience as a Unit-18 Berkeley Lecturer
  21. New online class: Python Crash Course on Co:rise

2020 4

  1. How and why I co-sleep with my baby
  2. What is “creative” coding, anyway?
  3. The harms of assuming cultural knowledge in coding assignments
  4. My hands-free setup for nursing and computer work

2018 6

  1. My spring in a high school CS classroom
  2. DateNight: An Activity Book for Couples
  3. Company Crafty Hour: Why & How
  4. Dear Universe: A Mealtime Blessing
  5. Sleep strategies for a racing mind
  6. Beware the Near Enemies (In Life & Tech)

2017 11

  1. Oops, I forgot to have kids
  2. Coding: A Hobby for the Waste-Adverse
  3. My Morning Practice
  4. What is the difference between ambition and discontent?
  5. I stopped listening to music
  6. Avoiding concept overload on the BART
  7. Drying out my thought loops
  8. Learning the Ursonate: the mind-clearing benefits of non-conceptual sound poetry
  9. My Nightly Gratitude Journal
  10. Operation Calm the Mind Down
  11. Project IceBreak: Let’s make networking easier

2016 1

  1. Learning new skills in SF

2015 8

  1. My "touchy-feely" takeaways
  2. Combining coding and teaching into a career
  3. Voice coaching: What I learned
  4. What I learned from Burning Man
  5. Will I speak at your conference?
  6. I don't always have to be The Entertainer
  7. Why am I so afraid of mingling?
  8. Towards more "Yes, and"s and less "but"s

2014 4

  1. Simplifying the Terms of Service
  2. The Long Lunch Table
  3. Improving front page performance: removing images, 5 ways
  4. Networking at events: It should be easy, not scary

2013 43

  1. Digital Learning Apps in Guatemala
  2. 1 Day in Antigua, Guatemala: Where to Go, What to Eat
  3. Shyness Hacks for Conferences
  4. On the Arbitrariness of Swear Words
  5. JSConf 2013: My Favorite Talks
  6. Technical Interviews Make Me Cry
  7. Communication at Khan Academy: Open By Default
  8. Why Do I Speak at Conferences?
  9. My Next Adventure: Khan Academy CS
  10. JavaScript UI Library Design
  11. The JavaScript Rap
  12. My Year at Coursera
  13. Rewriting Django Admin in Backbone
  14. A Guide to Writing Backbone Apps at Coursera
  15. What to look for in a software engineering culture
  16. Which JavaScript Library Should I Pick?
  17. Testing Backbone Frontends
  18. Increasing Diverse Engineers in the Workplace: A Call for Studies and Stories
  19. Our Backbone Stack
  20. Referencing DOM from JS: there must be a DRYer, safer way
  21. Exporting a Google Spreadsheet as JSON
  22. Improving Backbone App Performance
  23. Google I/O Talk: Online Learning Made Social
  24. Managing history in Backbone widgets with jQuery BBQ
  25. Server-side HTML vs. JS Widgets vs. Single-Page Web Apps
  26. Attracting women to developer events
  27. Making newbie-friendly developer events
  28. Outputting iCal with PHP
  29. Source "Snapshots"
  30. Rewriting our Forums with Backbone
  31. Keeping a Product Alive: On-Call & Maintenance
  32. I'm Bad At Recruiting
  33. Why I Hate Vanity Tweets
  34. 5 days in SoCal: Catalina Island, Joshua Tree, and LA
  35. Co-Learning Spaces
  36. Checking for Technical Requirements in a Sign-up Process
  37. Why isn't our warning banner based on feature detection?
  38. Warning Users on Older Browsers
  39. My Lasik Journey
  40. GirlDevelopIt SF: Help us grow in 2013!
  41. GirlDevelopIt SF: Thanks for a great 2012!
  42. Xtreme Makeover: Legacy Codebase Edition
  43. Getting Kids into Programming

2012 39

  1. My End of Year Donations
  2. A Tale of Two Bootstraps: Lessons Learned in Maintainable CSS
  3. Unit Testing our PHP Templates with Selector
  4. Proving Your Worth as a Self-Taught Developer
  5. RemixSouth: My Talk and My Favs
  6. Using Transloadit with Bootstrap
  7. Creating our Coursera Starter Culture
  8. Teaching Web Development in Africa
  9. Donating to Reduce the Birth Rate
  10. Using the Maps API Autocomplete for User Profile Location
  11. Geo-Targeted House Ads
  12. Porting to the Paid Google Translate API v2
  13. My Next Step: Coursera and The World of Online Education
  14. A Year of Hermit Hacking
  15. Alternatives for After-Parties at Conferences
  16. Client-Side Storage Article Series
  17. Using Grunt.js with CSS
  18. The Best Online Editors for Teaching HTML/CSS/JS
  19. Triggering Numeric Keyboards with HTML5
  20. Learning to Code in SF
  21. Learning to Code Online
  22. Theming Tumblr with Twitter Bootstrap
  23. Using the Instagram API from a Python Flask App
  24. Horsing Around Arizona
  25. Converting Addresses to Timezones in Python
  26. API Usability Testing
  27. Working around Android Webkit
  28. Porting jQuery Plugins to Zepto: Tips & Tricks
  29. Using FancyBox with Zepto
  30. The Red Queen: Sex, Gender, & Evolution
  31. A Yelp for Developer Platforms?
  32. Picking a Mobile App Strategy (Slides & Links)
  33. Interactive HTML5 Slides with FathomJS & CodeMirror
  34. Client-side Storage (Slides & Links)
  35. Datepicker for Twitter Bootstrap & Zepto/jQuery
  36. Theming Twitter Bootstrap (Without Less)
  37. Delayed Image Loading on Long Pages
  38. Website Monitoring Services
  39. Testing Facebook Login with Selenium

2011 36

  1. Reusing HTML/CSS/JS across Web & Mobile
  2. Using 3-Legged OAuth APIs with Flask
  3. Upgrading from jQuery Templates to jsRender
  4. Porting from jQuery to Zepto
  5. Logging JS Errors on iOS with PhoneGap
  6. Code Quality Tools
  7. PhoneGap Loading Performance in iOS
  8. JS & CSS Compiling, Compression & Cache-Busting
  9. Modularizing My JavaScript
  10. Grammatical Personalization in JS
  11. Ada Lovelace Day: Women that Inspire Me
  12. User Stats Visualization with HighCharts
  13. Client-Side Error Logging
  14. Pre-Deploy Git Check
  15. Sending Errors to Email in App Engine
  16. Switching from jQuery Mobile to Twitter Bootstrap
  17. Spriting with Compass
  18. WDCNZ: The Developer Experience
  19. So, what am I, exactly?
  20. Reading My Way to Better Design
  21. No, Really, I'm Shy: My Ignite I/O Talk
  22. Roundup: Developer Documentation Generators
  23. Roundup: The Best Developer Docs
  24. What makes a good "developer experience"?
  25. SF jQuery Conference 2011: My Learnings
  26. Twenty Questions (With Myself)
  27. What I Want in a Recipe Blogging Platform
  28. The Developer Support Handbook (aka How I Did My Job)
  29. Sightseeing in Sydney: What to See, Eat, Drink, and Yell
  30. StartupBus: What I Learnt & What I Loved
  31. Similarity Web 2.0: Remaking My First Mashup, 5 Years Later
  32. QuizCards: Learning While You Wait
  33. Translation Telephone: Having Fun with Language
  34. Goodbye, Google; Hello, World!
  35. Actually Healthy Alternatives to Carb Comforts
  36. New for Google Shared Spaces: Improved Interface, Inbox, Chrome Extension, & Embedding

2010 36

  1. Why I Love(d) Wave
  2. Triaging Issues: The Wave-y Way
  3. Using App Engine to Turn Emails into waves
  4. Issue Tracking in Wave
  5. Google Shared Spaces: How We Made It
  6. Google Shared Spaces: Why We Made It
  7. The Costa Rica Surf Camp Experience
  8. Reuseable HTML & CSS Teaching Materials
  9. DIY: Bleaching Dark Brown Hair
  10. GirlDevelopIt Sydney: Round 1, A Success!
  11. "No Boys Allowed"...And Why I Like It
  12. An Unofficial Guide to Geeking It Up Around Sydney
  13. Sydney International Food Festival Maps
  14. lscache: A localStorage-based, memcache-inspired library
  15. SydJS: JavaScript Libraries Panel Roundup
  16. Generating Slides from a Spreadsheet
  17. History of Client-side Web API Technology
  18. RageTube: Using APIs to Bring Music Video Playlists Online
  19. Embedding Feed Gadgets in Google Sites
  20. Using OAuth with Spreadsheets API on Django/AppEngine
  21. Porting from an App Engine RequestHandler to a Django View
  22. Teaching & Using Google Data APIs @ USYD
  23. Putting Europopped on the Map
  24. How to Pretty-Print Code Snippets in Blogger
  25. A JSON API for Posterous
  26. Girl Develop It: Teaching Web Programming to Women
  27. Importing data from Spreadsheets to App Engine
  28. Tip for Networking at Conferences: Be a Speaker!
  29. 5lide: HTML5-based Slides Maker
  30. Google APIs Timeline: Behind the Scenes
  31. Android Painting Apps: A Review
  32. How to pick & prepare an Ignite talk
  33. Why I Like Prezi
  34. How-to: 80s-ify your geek shirt!
  35. Sydney MCA: Notable Artists
  36. GTUG Campout: A weekend of HTML5 in 11+ Cities!

2009 31

  1. Developer Relations Explained (The Nerdy Way)
  2. Being a Girl in CS Doesn't Suck
  3. Joomla & Google Wave: The Possibilities
  4. Should I Defend My Cred? (...Yes)
  5. Why I Sent You to a Group
  6. A World of Words.. And Me
  7. How Google Wave Could Improve Education: Group Work
  8. The Quest for Karaoke-able Slidesets
  9. The Poem Store: "Write a Poem About Her Hair"
  10. Ignite I/O - Growing Up Geek: My Dad, The Computer Scientist
  11. Google Spreadsheets + APIs = Interactive Flash Cards
  12. Creating a Wordsearch using Google Spreadsheets
  13. How to Convert a Google Spreadsheet into JSON, XML, and MySQL
  14. How do you document an options Object?
  15. What is an API?
  16. Web09: Design, Code, Community.. and Maps!
  17. Google Image Search + Color Restrict: Just look what you can find!
  18. API Design: Beautiful Interfaces
  19. Web API Design: The Good, The Bad, and the Ugly
  20. APUGS Round-Up: Bzoo, AIR, & Eclipse
  21. BarCamp Canberra 2: Mapping the Fires
  22. Ada Lovelace Tribute: A Q&A with My Mum
  23. Adelaide: More than OK, Actually
  24. World-Wide Developer Events & Groups: Let's Map This Shit!
  25. Webstock 2009: Client Killed the Server Star
  26. Advertising Developer Events in Australia
  27. Coding in a Big Place
  28. Encouraging Interaction at Conferences
  29. GeoWeb 2009 Proposal: "GeoWeb Standards: How far they've come, How far they need to go"
  30. How to Alienate a Community 101: The "Gurus" Program
  31. HTML5 vs. Flex for RIAs (Ignite Style!)

2008 11

  1. Geocoding with Google Spreadsheets (and Gadgets)
  2. BarCamp Sydney: Best way to start off a life in Sydney?
  3. 7 Things I Learnt about Japan
  4. Using Notebook in a Delicious Way
  5. Flex Tips (OR: Examples I Wish Had Been Easier to Find)
  6. Going Dowwwwwwnnn... Under: See you Next Year!
  7. Social Networks & Web2.0 Mapping Meetup: Abaqus, Planet9, FireEagle
  8. Searching for faces with country domain restrictions with AJAX Image Search
  9. Spelman College Gadgets Competition
  10. 24 hours + 15 Google APIs + 45 students = ?
  11. Using Google to Find Housing in SF

2007 4

  1. Learning German with Google: Browser Language Preference
  2. "Voices that Matter" Conference: GWT + Maps + Gears
  3. Using Google AJAX APIs to show "me on the web"
  4. Can't figure out what's so intriguing about this video... but it's there.