Querying the GitHub archive with the ClickHouse playground
Via [this comment](https://news.ycombinator.com/item?id=34197637) on Hacker News I started exploring the [ClickHouse Playground](https://clickhouse...
654 words
|
3 minutes
Scroll page to form if there are errors
For a Django application I'm working on ([this issue](https://github.com/simonw/django-sql-dashboard/issues/44)) I have a form that can be quite a ...
88 words
|
1 minute
DevOps Metrics and KPIs
Day 85 of 90 Days of DevOps - DevOps Metrics and KPIs. Part of the Best Practices & Culture series covering essential DevOps concepts and hands-on practices.
433 words
|
2 minutes
Recovering data from AWS Lightsail using EC2
I ran into problems with my AWS Lightsail instance: it exceeded the CPU burst quota for too long and was suspended, and I couldn't figure out how t...
359 words
|
2 minutes
Geopoly in SQLite
I noticed this morning that one of my Datasette installations had the [Geopoly](https://www.sqlite.org/geopoly.html) SQLite extension enabled. I do...
1012 words
|
5 minutes
Counting SQLite virtual machine operations
When SQLite executes a query, it does so by executing a sequence of virtual machine operations.
548 words
|
3 minutes
Continuous Learning Culture
Day 84 of 90 Days of DevOps - Continuous Learning Culture. Part of the Best Practices & Culture series covering essential DevOps concepts and hands-on practices.
458 words
|
2 minutes
Bundling Python inside an Electron app
For [Datasette Desktop](https://datasette.io/desktop) I chose to bundle a full version of Python 3.9 inside my `Datasette.app` application. I did t...
381 words
|
2 minutes
Documentation and Knowledge Sharing
Day 83 of 90 Days of DevOps - Documentation and Knowledge Sharing. Part of the Best Practices & Culture series covering essential DevOps concepts and hands-on practices.
594 words
|
3 minutes
Piping echo to a file owned by root using sudo and tee
I wanted to create a file with a shell one-liner where the file lived somewhere owned by root.
155 words
|
1 minute
Team Collaboration and Communication
Day 82 of 90 Days of DevOps - Team Collaboration and Communication. Part of the Best Practices & Culture series covering essential DevOps concepts and hands-on practices.
493 words
|
2 minutes
DevOps Best Practices Compilation
Day 81 of 90 Days of DevOps - DevOps Best Practices Compilation. Part of the Best Practices & Culture series covering essential DevOps concepts and hands-on practices.
446 words
|
2 minutes
Granting a PostgreSQL user read-only access to some tables
I wanted to grant a PostgreSQL user (or role) read-only access to a specific list of tables.
183 words
|
1 minute
Using the undocumented Fly GraphQL API
[Fly](https://fly.io/) has a GraphQL API which is used by some of their own tools - I found it while [browsing around their code](https://github.co...
456 words
|
2 minutes
Copy rich text to the clipboard
I've been experimenting with a tool for generating the content for a weekly Substack newsletter by querying the Datasette API for my blog and assem...
433 words
|
2 minutes
WebAssembly and Future Tech
Day 80 of 90 Days of DevOps - WebAssembly and Future Tech. Part of the Serverless & Advanced Topics series covering essential DevOps concepts and hands-on practices.
509 words
|
3 minutes
Installing and upgrading Datasette plugins with pipx
If you installed `datasette` using `pipx install datasette` you can install additional plugins with `pipx inject` like so:
171 words
|
1 minute
Useful Markdown extensions in Python
I wanted to render some markdown in Python but with the following extra features:
201 words
|
1 minute
Commit a file if it changed
This recipe runs a Python script to update a README, then commits it back to the parent repo but only if it has changed:
302 words
|
2 minutes
Edge Computing and CDN
Day 79 of 90 Days of DevOps - Edge Computing and CDN. Part of the Serverless & Advanced Topics series covering essential DevOps concepts and hands-on practices.
382 words
|
2 minutes
Running a Django and PostgreSQL development environment in GitHub Codespaces
Helping people setup development environments (and fix them when they break) can be incredibly frustrating. I'm really excited about cloud-based de...
862 words
|
4 minutes
GraphQL and Modern APIs
Day 78 of 90 Days of DevOps - GraphQL and Modern APIs. Part of the Serverless & Advanced Topics series covering essential DevOps concepts and hands-on practices.
629 words
|
3 minutes
Running tests against PostgreSQL in a service container
I wanted to run some Django tests - using `pytest-django` and with Django configured to pick up the `DATABASE_URL` environment variable via [dj-dat...
233 words
|
1 minute
Rate limiting by IP using Cloudflare's rate limiting rules
My [blog](https://simonwillison.net/) was showing poor performance, with some pages taking several seconds to load or even failing entirely.
498 words
|
2 minutes