There is a version of the AI coding story that absolutely kills in a boardroom. Engineers can produce code faster. Boilerplate gets cheaper. Ticket throughput goes up. Junior engineers can supposedly do more with less support. Maybe leadership even convinces itself that fewer engineers are needed overall. I think that story is wrong. Or at least wrong enough to make expensive decisions with false…
When AI Tools Collide: A Real-World Experience # While building my latest project, Palette Kit (a React/TypeScript app for managing colored pencil gradients), I discovered something interesting: using Claude Code and Lovable together is incredibly powerful, but it requires a specific approach to avoid some nasty pitfalls. Honestly, I nearly broke my entire deployment pipeline learning this the…
I’ve been in this situation more times than I’d care to count: production is unstable, customers are unhappy, and leadership decides the solution is to freeze all changes until further notice. On the surface, it makes perfect sense. If changes are causing problems, stop making changes, right? Wrong! I understand the logic. I understand why executives think they should make this call.…
My Reading Philosophy # This is my collection of essential books - stories and ideas that have shaped my thinking and sparked my imagination. I’m drawn to speculative fiction that explores profound themes, spy fiction with psychological complexity, and non-fiction that challenges conventional wisdom. My favourite authors include Ursula K. Le Guin for her philosophical depth, John Wyndham for…
My Film Philosophy # This is my collection of essential films - it’s a blend of favourite movies and a list of films that must be seen. I’m drawn to drama that makes you think and feel deeply, quality sci-fi that isn’t derivative and inspires thought, and martial arts films with compelling storytelling and exceptional choreography. It’s very rare that I like a popcorn…
Google recently released their own entry into the agentic CLI arena: Gemini CLI. What might set it apart from OpenAI’s Codex CLI and Anthropic’s Claude Code is Gemini’s large context window and support for multimodal input. I’ve started testing it out to see just how it compares to Codex CLI and Claude Code (the latter of which I’ve been using regularly). This is…
After getting started with OpenAI Codex CLI , I’ve discovered some handy tips to make working with it a bit easier. Listing Available Models # When working with Codex CLI, you can specify which model to use with the -m flag: codex -m o4-mini 'explain this code' But what if you want to know all the models available to you? The default documentation doesn’t provide a straightforward way…
I’ve been playing with the recently announced OpenAI Codex CLI. What is OpenAI Codex CLI? # OpenAI Codex CLI is available on GitHub . It’s a lightweight AI coding assistant that runs directly in the terminal, like Claude Code from Anthropic. Features include: Read, modify, and run code Multimodal input for processing screenshots and diagrams Different approval levels While it’s…
The Power of Memory in Claude Code # Having used Claude Code for a while now to help manage this website and other projects, I’ve come to appreciate how crucial its memory features are for productive work. In AI assistants like Claude, memory refers to the system’s ability to retain information across interactions, which can significantly reduce repetitive instructions and improve…
The Power of Custom Slash Commands # I’ve been using Claude Code to help manage this website, and I kept finding myself typing similar instructions repeatedly: “Create a new draft post titled <X>,” “Check this file for spelling, grammar, and UK English,” “Clear the cache and start the server” in a very wordy way with a lot of back and forth – these…
What Are MCP Servers? # Model Context Protocol (MCP) servers extend AI Assistants’ capabilities by connecting them to external tools and services. Recently, Claude Code gained support for MCP servers, enabling integration with more specialised services like Stripe, Cloudflare, Supabase, Blender, and a whole lot more. This post demonstrates setting up some simple reference MCP servers. These…
I’ve been thinking about digital consciousness lately. A lot. What happens when human minds transition into a digital realm? Two works explore this territory in fascinating ways. Greg Egan’s novel “Diaspora” (1997), which I finally got round to reading a year ago. And the animated series “Pantheon” (2022), which I just finished watching. “Diaspora”…
Recently, I found myself reminiscing about a sci-fi novel I read in high school: The Turing Option by Marvin Minsky and Harry Harrison. Published in 1992, this book has been on my mind as I’ve watched the recent explosion in development of modern AI. What stands out isn’t just that it was co-authored by Minsky: one of the founding fathers of artificial intelligence–but how many…
So I built Palette Kit over the weekend. The whole thing, start to finish: from zero lines of code to a published site. The Spark # It began with a phone call with my sister. She runs My Colourful Country Life , a site for adult colouring enthusiasts. As my sister explained the value of her PDFs for artists, I realised it’d translate VERY well into an application with search and other…
Cloud Artisan # I’m David Taylor, a software engineer and cloud architect with a passion for technology, martial arts, and retro computing. With over 20 years of experience in the tech industry, I’ve worked on various projects ranging from cloud infrastructure to software development. This blog serves as a platform to share my knowledge, experiences, and insights. Interests # Cloud…
Download the DMG package from http://code.google.com/appengine/downloads.html and open it. Drag GoogleAppEngineLauncher to your Applications folder. Press CMD-Space to bring up Spotlight and type in “GoogleAppEngineLauncher” and hit Enter. Agree to opening the application. Click on OK when prompted to make command symbolic links. You’ll be prompted for your password. Once…
To quote the mr.awsome documentation “mr.awsome is a commandline-tool (aws) to manage and control Amazon Webservice’s EC2 instances.” Once you know the correct incantation, installing it is easy. curl -o setuptools-0.6c11-py2.6.egg http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg#md5 = bfa92100bd772d5a213eedd356d64086 sudo sh…
I keep forgetting how to do this, so… wintermute:~ $ rds-modify-db-instance mydb --region us-east-1 --db-instance-class db.m2.2xlarge --apply-immediately DBINSTANCE mydb 2011-05-20T01:24:19.131Z db.m1.large mysql 250 master available mydb.abcdefghijk.us-east-1.rds.amazonaws.com 3306 us-east-1b 0 db.m2.2xlarge n 5.5.8 SECGROUP default active PARAMGRP mydb-params in-sync Yup, that involves an…
An EC2 instance needs to be stopped before it can be resized. Also, it can only be resized to a “compatible” type (ie, one with a compatible kernel, 32 bit or 64 bit). So, if you started with a 32 bit t1.micro you can only resize up to a 32 bit m1.small . If you started with a 64 bit t1.micro you could resize up to a 64 bit m1.large . wintermute:~ $ ec2-stop-instances i-3e15ff51…
I’ve created a Server Density plugin that can be used to monitor the Cherokee web server. The plugin is currently available on github . The installation instructions are over there. If you have any changes or improvements you’d like to see, please fork and create pull requests. Here are some screenshots…
AWS Identity Access Management (IAM) is a free feature provided with your AWS account… enabling businesses to create multiple Users with individual security credentials who can use AWS web services, all controlled by and billed to a single AWS Account For example, you might use it to: restrict your web application to only manage S3 give accounts to an operations team, adding them to an…
I needed to correlate some logs with New Relic monitoring data. I started doing this manually… and got bored very quickly. It was too slow and painstaking. After some poking around I came across newrelic_api (not to be confused with rpm , which is the monitoring agent). Next thing I discovered… I had no idea how to install gems from GitHub! No longer! wintermute:~/Git $ mkdir…
It’s terse, probably more for my benefit than yours, but let’s dive in… Install the packages required by rvm : david@continuity:~$ sudo apt-get install curl git Install rvm : david@continuity:~$ bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head ) % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 986 100…
With the newer versions of Djangy comes support for the fantastic pip installer. It’s as easy as: david@continuity:~$ sudo pip install --upgrade djangy Downloading/unpacking djangy Downloading Djangy-0.14.tar.gz Running setup.py egg_info for package djangy Installing collected packages: djangy Found existing installation: Djangy 0.11 Uninstalling Djangy: Successfully uninstalled Djangy…
In my previous post I knocked out some simple code and pushed it straight to Djangy. I didn’t even test it locally first ( gosh shock horror aghast )! Well, that must end… now. A Djangy project is, in it’s heart of hearts, a Django project that you’ve shoved out your door into the big bad world. And the great thing about Django projects… you can run them locally for…
My first Djangy project will be an application called rightscalefeed . It will pull down a user’s RightScale event feed. Ideally, I’d like to transform the feed into a WebSocket, suitable for continuous updates, perhaps for display in a data centre or network operations centre. I may have bitten off more than I can chew, as I’m not sure Django (or Djangy’s environment) has…
Since writing Using PHP APC with Cherokee I noticed that my cache hits were dropping and my cache misses were growing. This is my first attempt at tweaking the configuration of php-apc to try to eke out more performance. I enabled my apc.php page (check the previous article), checked the statistics, and saw that the Cache full count was growing. My cache had filled several times. According to the…
If you’re using Cherokee as your web server, you’re probably already interested in squeezing every drop of performance out of your server. If you’re hosting PHP sites with Cherokee, using APC (Alternative PHP Cache) could enable you to squeeze out even more drops. The Alternative PHP Cache (APC) is a free and open opcode cache for PHP. Its goal is to provide a free, open, and…
The Cherokee Project describes Cherokee as: a very fast, flexible and easy to configure Web Server. It supports the widespread technologies nowadays: FastCGI, SCGI, PHP, CGI, uWSGI, SSI, TLS and SSL encrypted connections, Virtual hosts, Authentication, on the fly encoding, Load Balancing, Apache compatible log files, Data Base Balancing, Reverse HTTP Proxy, Traffic Shaper, Video Streaming and much…
uWSGI is a fast, self-healing, WSGI server. It is typically used with Python web applications. It works very well with the Cherokee Web Server and the Django web application framework. To install the latest uWSGI use pip and the URL for the latest version of uWSGI: ```bash sudo apt-get install libxml2-dev build-essential python-dev python-pip sudo pip install…
The following commands will add the Cherokee Web Server PPA to Ubuntu (version 9.10 and higher). The first command adds the extremely handy add-apt-repository program to your system. The second adds the Cherokee Personal Package Archive. ```bash sudo apt-get install python-software-properties sudo add-apt-repository ppa:cherokee-webserver/ppa At the moment, Cherokee is at version 1.0.9. If you…
The following commands can be followed blindly to update an Ubuntu Server install from version 10.04 (Lucid) to version 10.10 (Maverick). ```bash apt-get update apt-get install update-manager-core sed -i 's/Prompt=lts/Prompt=normal/' /etc/update-manager/release-upgrades do-release-upgrade
The Google App Engine SDK is broken on Ubuntu 10.10, but it’s easy enough to fix… The Google App Engine SDK requires Python 2.5. It does not work with Python 2.6. This problem is covered in these Google Code issues: http://code.google.com/p/googleappengine/issues/detail?id=1159 http://code.google.com/p/googleappengine/issues/detail?id=757 If you try to use Google App Engine SDK on…
I’ve published a RightScale ServerTemplate for installing Bitnami’s Drupal stack on Amazon EC2. Drupal is an open source content management platform powering millions of websites and applications. It’s built, used, and supported by an active and diverse community of people around the world. My ServerTemplate is based on an existing ServerTemplate by Bitnami. It differs from…
I’ve published a RightScale ServerTemplate for installing Bitnami’s WordPress stack on Amazon EC2. WordPress is web software you can use to create a beautiful website or blog. It is based on an existing ServerTemplate by Bitnami. It differs from Bitnami’s existing WordPress ServerTemplate in a few ways: it uses an Ubuntu RightScale MultiCloud Image as its base it has some of…
I’ve published a RightScale ServerTemplate for launching Virtualmin on Amazon EC2. Virtualmin is a powerful and flexible web server control panel based on the well-known Open Source web-based systems management GUI, Webmin. Manage your virtual domains, mailboxes, databases, applications, and the entire server, from one comprehensive and friendly interface. The ServerTemplate I’ve…
Unfortunately, I had to migrate one of my projects from Google App Engine to Django on a self-managed server. I didn’t want to do this. See Google App Engine Gotcha #2 and Google App Engine Gotcha #3 for the main reasons. Those headaches became bad enough that I had to bite the bullet and migrate out of Google App Engine. It’s not for the faint-hearted… Why Google App Engine In…
If you’re using spawn-fcgi with Cherokee (probably to get a wiki or PHP application or similar working) and you see: 503 Service Unavailable … you might be having the same problem I had. That is, Cherokee was failing to launch spawn-fcgi . To verify this is the cause of your problem, stop Cherokee, then start it manually at the command line: # /usr/sbin/cherokee --admin_child -C…
I found that Hudson depends on daemon but it doesn’t install automatically. So, before we get started: ```bash apt-get install daemon Now that's out of the way, we need to grab the Hudson key and install the package: ```bash wget -q -O - http://hudson-ci.org/debian/hudson-ci.org.key | apt-key add - cd /tmp wget http://hudson-ci.org/latest/debian/hudson.deb dpkg --install ./hudson.deb If…
First, why would you want it? uWSGI is a fast, self-healing, WSGI server, originally intended for use with Python web applications. I intend to use it with Python Django, served by Cherokee. As for installation… Do not bother doing a hands-on install from source. It’s messy. Just use pip : ```bash apt-get install gcc python-dev libxml2-dev apt-get install python-pip pip install…
Need a pretend mail server that you can use for debugging? Try this: ```bash python -m smtpd -n -c DebuggingServer localhost:1025 It listens on port 1025 for local connections.
I’ve been nose-deep migrating a project from Google App Engine to Django. See Google App Engine Gotcha #2 and Google App Engine Gotcha #3 for the reasons. I’m keeping notes on the experience, in case any other poor suckers out there have to migrate from the cosy, loving embrace of a PaaS to the cold, hard trenches of a self-managed server. Stay tuned…
This is the continuation of my bungling around with IronRuby, Rails and getting it running on SLQAzure. In part 1, we installed a basic rails application using IronRuby with SQL Server as it’s backend. We’ll now examine how we can connect this application to a SQLAzure backend as opposed to a SQL Server hosted on your development machine. I’m assuming you have the vanilla rails…
This is the first of a three part series on running a rails application on Windows Azure using SQLAzure as your database backend. The Rail Guides website, of course, has a wonderful getting started article that I couldn’t possibly do justice. This small series is just a very simple demonstration of one possible way of developing a rails application on Microsoft’s Azure platform. In…
What’s the problem? # Well, gotcha #3 is a simple but annoying one. The urlfetch call does not use a fixed source IP address. It makes sense, when you think about it. Google App Engine is ( apparently ) distributed all over the place, with no guarantee of where your code will run at any given time. I presume this is so that Google are free to move applications between data centres to…
A while ago I wrote a proof of concept in JRuby on Google App Engine, using the fantastic appengine-jruby project. The code worked (albeit, very slowly! ). Satisfied, I put the code to the side, committed to a Subversion repository. Today I got a chance to dust off the code and do some more work on it… only to find it no longer worked. When I started my code with dev_appserver.rb I saw: