- Sat 07 December 2024
-
Exploding memory usage in Django/uWSGI containers
- Fri 04 October 2024
-
Keynote-worthy talks (I think?)
- Mon 27 May 2024
-
3 places to eat: Florence
- Fri 24 May 2024
-
Quit Simplifying (Config Management Camp & PyCon Italia 2024)
- Sun 14 April 2024
-
Torrtija de las señoritas Tatin
- Sun 25 February 2024
-
Lievito madre
- Sat 10 February 2024
-
My talks are good (and suitable for a big audience)
- Sat 18 November 2023
-
3 places to eat: Vienna
- Wed 15 November 2023
-
3 places to eat: Stockholm
- Sat 28 October 2023
-
Are you working in a remote office?
- Thu 26 October 2023
-
Rootless Podman, systemd, and Docker Compose files
- Wed 25 October 2023
-
On Responsibility
- Sat 07 October 2023
-
Follow-up and follow-through
- Thu 25 May 2023
-
Creativity (PyCon Italia 2023)
- Sun 19 March 2023
-
The trouble with Key Results
- Thu 23 February 2023
-
Making docs with MkDocs
- Fri 10 February 2023
-
Brown M&Ms, UTC, and ISO 8601
- Fri 06 January 2023
-
Handy Git aliases
- Thu 29 December 2022
-
3 places to eat: Berlin
- Mon 19 December 2022
-
3 places to eat: Tel Aviv
- Sat 17 December 2022
-
Creativity (DevOpsDays Tel Aviv 2022)
- Sun 11 December 2022
-
No, you won't get a PowerPoint from me!
- Sat 12 November 2022
-
Bye, Birdsite
- Sat 15 October 2022
-
Nebulous Percentage Shenanigans
- Thu 29 September 2022
-
Uncertainty, industrious compliance, and the illusion of control
- Sun 18 September 2022
-
Writing Professionally (DevOpsDays Berlin 2022)
- Fri 19 August 2022
-
Jammy, don’t snap at me!
- Sat 16 July 2022
-
Something interesting happened at work the other week...
- Sun 26 June 2022
-
Python package dependency checking in a CI pipeline with pipdeptree
- Mon 30 May 2022
-
Writing Professionally (C!Conf 2022)
- Sun 15 May 2022
-
Batch-processing stereograms with StereoscoPy
- Sat 14 May 2022
-
My experiment: an interim update
- Sat 14 May 2022
-
Running a solar-powered laptop
- Tue 10 May 2022
-
Drizzle: the most influential software project you’ve (probably) never heard of
- Sun 08 May 2022
-
Sweet & savoury stir fry
- Sat 07 May 2022
-
Entropy, management, and xkcd 927
- Fri 06 May 2022
-
An experiment
- Thu 05 May 2022
-
This site now lives on GitHub
- Sat 29 January 2022
-
The Review Review
- Sun 16 January 2022
-
Scaling the flat organization
- Sun 05 December 2021
-
Voice messages
- Sun 21 November 2021
-
Creativity: How we lost it, why that’s bad, and how we get it back
- Sun 14 November 2021
-
Meaningless Metrics, Treacherous Targets
- Sat 30 October 2021
-
Warnock’s Dilemma, Objections, and Acknowledgements
- Wed 27 October 2021
-
This Meeting Should Have Been an Email
- Sat 23 October 2021
-
Please, Make My Company Distributed!
- Sat 23 October 2021
-
No, We Won’t Have a Video Call for That: The Companion Pieces
- Sun 17 October 2021
-
Universal tox tests (from just about any CI)
- Thu 07 October 2021
-
On Contravictions
- Thu 07 October 2021
-
The Review Review
- Sun 03 October 2021
-
Getting out of Meeting Hell: As a top-level executive
- Sat 02 October 2021
-
Getting out of Meeting Hell: As a mid-level manager
- Fri 01 October 2021
-
Getting out of Meeting Hell: As a regular employee
- Thu 30 September 2021
-
Getting out of Meeting Hell: What this is about
- Sun 26 September 2021
-
No, We Won’t Have a Video Call for That: Reader Feedback
- Thu 16 September 2021
-
Rules are rules
- Fri 27 August 2021
-
How to write a decent job ad
- Tue 24 August 2021
-
Audience feedback on online conference platforms: a speaker's view
- Sat 21 August 2021
-
Add Depth! Stereoscopic imagery for everyone
- Sun 17 January 2021
-
Running (Almost) Anything in LXC: Applications Using Your Webcam
- Sun 17 January 2021
-
Fixing powerline flicker on your webcam feed with a udev rule
- Sat 16 January 2021
-
Running (Almost) Anything in LXC: Sound
- Sat 09 January 2021
-
Running (Almost) Anything in LXC: X applications
- Mon 28 December 2020
-
Running (Almost) Anything in LXC: The Basics
- Fri 06 November 2020
-
Add depth! Stereoscopic imagery for everyone
- Thu 22 October 2020
-
I Don’t Think This Means What You Think It Means: Red Herrings in OpenStack
- Tue 08 September 2020
-
What I now know about HAproxied Django database connections, and wish I'd known sooner
- Sat 22 August 2020
-
No, We Won’t Have a Video Call for That!
- Sat 22 August 2020
-
No, We Won’t Have a Video Call for That: Slides and Recordings
- Wed 06 May 2020
-
Celery to Chew On
- Tue 04 February 2020
-
Paying People
- Tue 04 February 2020
-
Why do they always lie?
- Wed 01 January 2020
-
Salacious Salad and Omelette
- Tue 31 December 2019
-
My 2010s
- Mon 30 December 2019
-
Exceptional Pan Pizza
- Fri 20 December 2019
-
DevOpsDays Tel Aviv 2019
- Fri 13 December 2019
-
Slidecraft updates
- Sat 30 November 2019
-
Ceph Erasure Code Overhead Mathematics
- Tue 05 November 2019
-
The Little Bag Of Tricks: 10 Things You Might Not Know You Can Do With OpenStack
- Wed 21 August 2019
-
Using ftrace to trace function calls from qemu-guest-agent
- Mon 12 August 2019
-
Learn Complex Skills, From Anywhere: Combining Django, Ansible and OpenStack to teach any tech skill
- Thu 06 June 2019
-
Team meetings
- Sat 25 May 2019
-
Learn Ceph — For Fun, For Real, For Free!
- Tue 21 May 2019
-
Geographical Redundancy with rbd-mirror
- Wed 08 May 2019
-
I Don’t Think This Means What You Think It Means: Red Herrings in OpenStack
- Tue 07 May 2019
-
One For All: Using Terraform to manage OpenStack and Kubernetes resources
- Wed 01 May 2019
-
Configuring CLI output verbosity with logging and argparse
- Sat 27 April 2019
-
Nonexisticon
- Wed 24 April 2019
-
No, really, don't chuck everything in Slack: communications for distributed teams
- Tue 23 April 2019
-
Talk submissions
- Tue 23 April 2019
-
Writing for learners: best practices for creating, developing, and maintaining self-paced learning resources
- Sun 21 April 2019
-
If you’re a leader in tech, “non-technical” is not a free pass
- Mon 25 March 2019
-
Why upload filters don’t work (really simple math!)
- Thu 21 March 2019
-
Article 17: The time to act is now.
- Sun 10 March 2019
-
Using coverage with multiple parallel GitLab CI jobs
- Sat 09 March 2019
-
Building a nested CLI parser from a dictionary
- Wed 23 January 2019
-
Learn Complex Skills, From Anywhere: Combining Django, Ansible and OpenStack to teach any tech skill
- Sat 08 December 2018
-
1,000 routers per tenant? Think again!
- Wed 10 October 2018
-
The Little Bag O’Tricks: 10 Things You Might Not Know You Can Do With OpenStack
- Sun 18 February 2018
-
Working from home, with little kids in the house
- Thu 03 August 2017
-
More recommendations for Ceph and OpenStack
- Fri 17 February 2017
-
Importing an existing Ceph RBD image into Glance
- Thu 02 February 2017
-
Replacing the built-in Open edX forum with a suitable alternative
- Mon 28 November 2016
-
The Dos and Don'ts for Ceph for OpenStack
- Mon 07 November 2016
-
High Availability and Disaster Recovery in OpenStack
- Thu 27 October 2016
-
Heat and its Alternatives: Application Deployment in OpenStack
- Thu 06 October 2016
-
CephFS and LXC: Container High Availability and Scalability, Redefined
- Sat 20 August 2016
-
Fragile development: Why Scrum sucks, and what you should be doing instead (full talk)
- Tue 05 July 2016
-
Fragile Development: Scrum is terrible, and you should ditch it
- Tue 05 July 2016
-
Wiping and resetting your SUSE OpenStack Cloud Crowbar configuration
- Wed 29 June 2016
-
Why Scrum sucks, and what you ought to be doing instead
- Sun 21 February 2016
-
Containers: Just Because Everyone Else is Doing Them Wrong, Doesn't Mean You Have To
- Fri 12 February 2016
-
Dogfooding Dogwood
- Sat 30 January 2016
-
Pacemaker's best-kept secret: crm_report
- Tue 26 January 2016
-
Hosting a web site in radosgw
- Tue 05 January 2016
-
My first Open edX contribution
- Wed 23 December 2015
-
Removing buckets in radosgw (and their contents)
- Wed 23 December 2015
-
A minimal Ubuntu OpenStack Juju configuration in just four nodes
- Thu 17 December 2015
-
A Python one-liner for pretty-printing radosgw utilization
- Wed 18 November 2015
-
Understanding radosgw benchmarks
- Tue 10 November 2015
-
OpenStack for Open edX: Inside and Out (SWITCH ICT-Focus 2015)
- Wed 28 October 2015
-
Clusters, Routers, Agents and Networks: High Availability in Neutron
- Tue 27 October 2015
-
Automated OpenStack deployment: A comparison
- Mon 12 October 2015
-
Open edX
- Wed 07 October 2015
-
Manageable Application Containers: Lightning Quick Updates, Scaleable Security, Easy High Availability
- Mon 15 June 2015
-
OpenStack Orchestration and Automation
- Wed 27 May 2015
-
Ceph Tech Talk: Placement Groups
- Sat 15 November 2014
-
Have Data, Want Scale, Indefinitely: Exploring Ceph
- Wed 22 October 2014
-
Ceph Performance Demystified: Benchmarks, Tools, and the Metrics that Matter
- Tue 14 October 2014
-
OpenStack High Availability: Are We There Yet?
- Thu 24 July 2014
-
Speak! How to talk in public and not wreck your voice
- Thu 27 March 2014
-
Hands On Trove: Database as a Service in OpenStack
- Mon 24 February 2014
-
Fun with extended attributes in Ceph Dumpling
- Tue 28 January 2014
-
Unrecoverable unfound objects in Ceph 0.67 and earlier
- Mon 20 January 2014
-
linux.conf.au 2014, or My Annual Journey To Awesome
- Tue 10 December 2013
-
Greetings from Havana: A fresh perspective on globally distributed OpenStack
- Fri 31 May 2013
-
Ceph: object storage, block storage, file system, replication, massive scalability and then some!
- Tue 28 May 2013
-
Ceph: The Storage Stack for OpenStack
- Tue 07 May 2013
-
Enter the cuttlefish!
- Wed 17 April 2013
-
More Reliable, More Resilient, More Redundant
- Thu 21 February 2013
-
High Availability Update: You can now vote our talk into the OpenStack summit!
- Wed 20 February 2013
-
High Availability Update (Grizzly and Havana)
- Mon 28 January 2013
-
My week at linux.conf.au 2013
- Sun 13 January 2013
-
Solid-state drives and Ceph OSD journals
- Sun 16 December 2012
-
Thoughts on "ecosystems"
- Thu 06 December 2012
-
On the merits of working from home, in a distributed virtual team
- Tue 04 December 2012
-
Adding MySQL/Galera resources to Pacemaker
- Tue 04 December 2012
-
Bootstrapping the Galera cluster
- Tue 04 December 2012
-
Configuring Corosync
- Tue 04 December 2012
-
Dealing with node failure
- Tue 04 December 2012
-
MySQL/Galera in Pacemaker High Availability Clusters
- Tue 04 December 2012
-
Recovering from full cluster shutdown
- Tue 04 December 2012
-
Setting Galera-specific MySQL options
- Tue 04 December 2012
-
Starting Pacemaker
- Tue 04 December 2012
-
Testing resource recovery
- Mon 03 December 2012
-
MySQL High Availability Deep Dive
- Thu 08 November 2012
-
GlusterFS in High Availability Clusters
- Thu 08 November 2012
-
Hands-On With Ceph
- Wed 24 October 2012
-
Talking Ceph and GlusterFS at LinuxCon Europe
- Mon 22 October 2012
-
Migrating virtual machines from block-based storage to RADOS/Ceph
- Wed 26 September 2012
-
Pacemaker and the recent GitHub service interruption
- Mon 24 September 2012
-
Maintenance in active Pacemaker clusters
- Thu 30 August 2012
-
High Availability in OpenStack
- Mon 20 August 2012
-
Speaking and BoFing at CloudOpen in San Diego!
- Tue 17 July 2012
-
Highly Available Cloud: Pacemaker integration with OpenStack
- Mon 09 July 2012
-
Configuring radosgw to behave like Amazon S3
- Fri 18 May 2012
-
Fencing in VMware virtualized Pacemaker nodes
- Thu 03 May 2012
-
An exciting day for the Ceph community
- Tue 24 April 2012
-
A look back at my first OpenStack Design Summit & Conference
- Fri 20 April 2012
-
Reliable, Redundant, Resilient: High Availability in OpenStack
- Tue 03 April 2012
-
Speaking at OSCON 2012
- Wed 28 March 2012
-
Presentation accepted for OpenStack Spring 2012 Conference
- Thu 22 March 2012
-
Mandatory and advisory ordering in Pacemaker
- Wed 21 March 2012
-
High Availability in OpenStack
- Tue 20 March 2012
-
On my (ex-)maintainership of the DRBD User's Guide
- Mon 19 March 2012
-
Managing cron jobs with Pacemaker
- Mon 19 March 2012
-
Storage Replication in High-Performance High-Availability Environments
- Mon 19 March 2012
-
Roll Your Own Cloud
- Thu 15 March 2012
-
What's a Totem "Retransmit List" all about in Corosync?
- Tue 13 March 2012
-
The Zen of Pacemaker
- Fri 09 March 2012
-
Finding out which OSDs currently store a specific RADOS object
- Thu 08 March 2012
-
Ceph: tickling my geek genes
- Tue 06 March 2012
-
Solve a DRBD split-brain in 4 steps
- Sun 04 March 2012
-
Checking Corosync cluster membership
- Wed 29 February 2012
-
Fencing in Libvirt/KVM virtualized cluster nodes
- Mon 27 February 2012
-
Network connectivity check in Pacemaker
- Mon 27 February 2012
-
Speaking at the 2012 Percona Live MySQL Conference
- Sun 26 February 2012
-
GFS2 in Pacemaker (Debian/Ubuntu)
- Sun 26 February 2012
-
Interleaving in Pacemaker clones
- Fri 24 February 2012
-
OCFS2 in Pacemaker (Debian/Ubuntu)
- Tue 01 November 2011
-
Fencing and Maintaining Sanity in High-Availability Clusters
- Tue 01 November 2011
-
MySQL High Availability Sprint: Launch the Pacemaker!