CSEND: P2P Chatting Across the Decades

A graphical user interface for the QEMU virtual machine emulator, showing a window with various controls and information related to the virtual machine.

It's been super rewarding diving back into C programming lately, and the main focus has been my little project, `csend`. It's a peer-to-peer chat application I've been tinkering with. The big idea is to get it running smoothly on different systems, specifically modern POSIX platforms like Linux, and, for a bit of a retro challenge, classic Mac OS.


Understanding the CakePHP Queue Plugin and Jobs

A large crowd of people dressed in medieval-style clothing, including robes, cloaks, and hats, walking in a procession through an ornate, dimly lit cathedral-like structure with arched ceilings and sunlight streaming through the windows.

In this post, we look at how to use CakePHP's Queue Plugin to efficiently manage and execute background tasks. We'll explore the structure, implementation, and benefits of this approach, with a focus on the `src/Job` directory and related components of Willow CMS.


Migrations in CakePHP

An elderly wizard with a long white beard sits at a desk in a dimly lit library, writing in an ancient tome by candlelight. The room is adorned with ornate, gilded frames and shelves filled with books.

Migrations are a tool in CakePHP for managing database schema changes. They provide a version-controlled way to modify your database structure, making it easier to track, share, and deploy changes across different environments or installations of your application. CakePHP has tools to generate snapshots of your database structure and migrations between them. Given that migrations can also execute query language statements on your database, they can also be used to modify data. Willow CMS has evolved through several releases since going live for this site, with some of those releases requiring changes to the database schema and data. In this post I'll talk you through some practical examples of how I handled this.


Rate Limiting and IP Blocking in Willow CMS

This blog post details the implementation of rate limiting and IP blocking within a Willow CMS, focusing on the key code components and their rationale. This information is intended for developers looking to implement similar security measures in their projects. Since putting Willow live for this site, it has been interesting to view the logs and see all the attempts from Singapore trying to find exploits!


Setting Up a Complete Development Environment with Docker for Willow CMS

This article provides a comprehensive breakdown of Docker Compose configuration for Willow CMS's development environment. The setup includes multiple containerized services: the main WillowCMS application server, MySQL database, phpMyAdmin, Jenkins for CI/CD, Mailpit for email testing, and Redis Commander for cache management. Each service is carefully configured with specific ports, volumes, and environment variables to ensure smooth integration and development workflow. The environment can be easily started using a custom setup script that handles initialization, database setup, and provides options for managing the development environment. The article concludes with a detailed explanation of the WillowCMS Dockerfile, covering everything from base image selection to service configuration and process management.