HomeBlog

My Personal Musings 🤓

Welcome to my blog, where I share my passion for technology and software development. With a background in software engineering and a keen interest in cloud-native development, I enjoy exploring how modern tools can solve real-world problems.

David Muraya's blog header picture

May 01, 2025

Function Calling in Google Gemma3

Function Calling in Google Gemma3

Understanding Function Calling in Google Gemma3

Explore how Gemma3's function calling feature, powered by Python, enables developers to create interactive AI applications that go beyond text generation

Read More..

Full-Text Search: Using the Trigram Tokenizer Algorithm to Match Peoples Names

Leveraging Full Text Search and Trigram Tokenization for Efficient Name Matching

This article explains how to use SQLite's FTS5 module with the trigram tokenizer to perform efficient full-text searches, particularly for matching similar names in a large database. It covers setting up the virtual table, normalizing names, bulk inserting data, and executing searches that handle close but not exact matches

Read More..

How to Get a Structured JSON Response from a Web Page Using AI

Using AI to Extract Structured Data from Web Pages: A Kenyan Invoice Verification Case Study

This article demonstrates how to leverage Google Gemini AI to extract structured JSON data from a web page. It includes a detailed guide with code examples for defining data structures, and implementing a parsing function

Read More..

How to Set Up a Custom Domain for Your Google Cloud Run service

A Step-by-Step Guide to Mapping Your Domain to Cloud Run

Learn how to connect your custom domain to Google Cloud Run in just a few simple steps, making your website look professional without breaking the bank.

Read More..

Reflex Makes SEO Easier: Automatic robots.txt and sitemap.xml Generation

Discover how adding your deploy URL in Reflex automatically generates robots.txt and sitemap.xml for easier SEO.

Reflex simplifies SEO by automatically generating robots.txt and sitemap.xml files when you include the deploy_url in your application's configuration.

Read More..

Deploying Reflex Front-End with Caddy in Docker

A step-by-step guide to building and serving Reflex static front-end files using Caddy in a Docker container

This blog post explains how to use Reflex to generate static front-end files and serve them using Caddy in a Docker container. It covers the Dockerfile setup, and Caddy configuration.

Read More..

Optimizing Reflex Performance on Google Cloud Run

A Comparison of Gunicorn, Uvicorn, and Granian for Running Reflex Apps

In this article, I tested various methods to run a Reflex 0.7.4 app on Google Cloud. After experimenting with Gunicorn, Uvicorn, Granian, and Reflex's built-in command, I found that Gunicorn with Uvicorn workers delivered the best performance.

Read More..

Adding middleware to FastAPI Applications: Process Time Headers, Security, and Compression

A practical guide to implementing middleware in FastAPI for better performance, security, and efficiency.

In this article, we'll explore how to add middleware to a FastAPI application. We'll go through three examples: adding a process time header to track how long requests take, setting up security headers to keep your app safe, and using GzipMiddleware to compress responses for faster delivery.

Read More..

Adding Google Authentication to Your FastAPI Application

A guide to adding Google Authentication to your FastAPI app.

Learn how to add Google Authentication to your FastAPI app, making it easier to use and more secure.

Read More..

Simple CI/CD for Your FastAPI App with Google Cloud Build and Cloud Run

Push code, deploy automatically: A simple CI/CD guide for your web app.

Learn how to connect GitHub, Google Cloud Build, and Google Cloud Run to automatically build and deploy your FastAPI application every time you push code changes.

Read More..

Contact Me

Have a project in mind? Send me an email at hello@davidmuraya.com and let's bring your ideas to life. I am always available for exciting discussions.

© 2025 David Muraya. All rights reserved.