41554 blogs · [ { "id": "01a08785-7551-7049-a952-13d95aa27b62", "title": "Updating My Astro v1.5.0 Blog to v7 with Opencode", "url": "https://www.ianwootten.co.uk/2026/07/20/updating-my-astro-v1-5-0-blog-to-v7-with-opencode/", "published_at": "2026-07-20T09:30:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d95b9bdb8a", "title": "Mapping Premium Bond Winners Across the UK", "url": "https://www.ianwootten.co.uk/2026/07/13/mapping-premium-bond-winners-across-the-uk/", "published_at": "2026-07-13T09:30:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d95c8cc783", "title": "Ditching Claude for OpenCode and OpenRouter", "url": "https://www.ianwootten.co.uk/2026/07/01/ditching-claude-for-opencode-and-openrouter/", "published_at": "2026-07-01T16:30:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d95c94a5a4", "title": "Investing vs Saving Doubled My Returns on Company Cash", "url": "https://www.ianwootten.co.uk/2026/04/20/investing-vs-saving-doubled-my-returns-on-company-cash/", "published_at": "2026-04-20T09:56:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d95c9ce8cf", "title": "Choose Your Pi-hole Hardware Carefully", "url": "https://www.ianwootten.co.uk/2026/04/13/choose-your-pi-hole-hardware-carefully/", "published_at": "2026-04-13T09:56:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d95d1de971", "title": "Fixing Payment Popups with Cross Origin Opener Policy in Django", "url": "https://www.ianwootten.co.uk/2026/01/22/fixing-payment-popups-with-cross-origin-opener-policy-in-django/", "published_at": "2026-01-22T09:56:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d95d42f12e", "title": "How to Deploy a Next.js App to Cloudflare Workers", "url": "https://www.ianwootten.co.uk/2025/06/17/how-to-deploy-a-next-js-app-to-cloudflare-workers/", "published_at": "2025-06-17T09:56:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d95e308f63", "title": "Developer Deals I’ve Bought That You Might Like Too", "url": "https://www.ianwootten.co.uk/2024/11/29/developer-deals-ive-bought-that-you-might-like-too/", "published_at": "2024-11-29T09:56:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d95e85ac58", "title": "Deploying a FastAPI app to Hetzner with Kamal", "url": "https://www.ianwootten.co.uk/2024/10/13/deploying-a-fastapi-app-to-hetzner-with-kamal/", "published_at": "2024-10-13T15:37:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d95f7ab810", "title": "ell - An Elegant, Powerful Framework for Prompt Engineering", "url": "https://www.ianwootten.co.uk/2024/09/21/ell-an-elegant-powerful-framework-for-prompt-engineering/", "published_at": "2024-09-21T15:37:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d960202dda", "title": "Using Instructor to Return Typed Data from Ollama", "url": "https://www.ianwootten.co.uk/2024/06/15/using-instructor-to-return-typed-data-from-ollama/", "published_at": "2024-06-15T15:37:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d960ca8928", "title": "Using Ollama to Run LLMs on the Raspberry Pi 5", "url": "https://www.ianwootten.co.uk/2024/01/19/using-ollama-to-run-llms-on-the-raspberry-pi-5/", "published_at": "2024-01-19T15:37:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d9617926fa", "title": "My 2023 Retrospective", "url": "https://www.ianwootten.co.uk/2024/01/08/my-2023-retrospective/", "published_at": "2024-01-08T12:56:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d9621a3195", "title": "Publishing Dev Tips with Next.js, Supabase Auth and Notion", "url": "https://www.ianwootten.co.uk/2023/12/22/publishing-dev-tips-with-next-js-supabase-auth-and-notion/", "published_at": "2023-12-22T08:09:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d96224bcb4", "title": "Effortless Embeddings with vecs and Supabase", "url": "https://www.ianwootten.co.uk/2023/10/10/effortless-embeddings-with-vecs-and-supabase/", "published_at": "2023-10-10T08:09:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d9622bb4b9", "title": "Dead Simple Large Language Models with Ollama", "url": "https://www.ianwootten.co.uk/2023/10/02/dead-simple-large-language-models-with-ollama/", "published_at": "2023-10-02T10:09:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d9627b8e24", "title": "Reflecting on 20 Years on the Web", "url": "https://www.ianwootten.co.uk/2023/08/14/reflecting-on-20-years-on-the-web/", "published_at": "2023-08-14T10:09:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d962ec8d1f", "title": "5 Things ChatGPT is Better at than Claude 2", "url": "https://www.ianwootten.co.uk/2023/08/11/5-things-chatgpt-is-better-at-than-claude-2/", "published_at": "2023-08-11T10:09:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d9634bfbbd", "title": "ChatGPT Code Interpreter: The Best Use Cases for Developers", "url": "https://www.ianwootten.co.uk/2023/07/17/chatgpt-code-interpreter-the-best-use-cases-for-developers/", "published_at": "2023-07-17T10:09:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d96383765e", "title": "Returning Complex Data for OpenAI Function Calling", "url": "https://www.ianwootten.co.uk/2023/06/15/returning-complex-data-for-openai-function-calling/", "published_at": "2023-06-15T10:09:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d9639c62bd", "title": "How to Launch Chrome Using a Profile from CLI", "url": "https://www.ianwootten.co.uk/2023/05/18/how-to-launch-chrome-using-a-profile-from-cli/", "published_at": "2023-05-18T10:49:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d96401efd6", "title": "How a Python Virtual Environment Works", "url": "https://www.ianwootten.co.uk/2023/05/15/how-a-python-virtual-environment-works/", "published_at": "2023-05-15T09:56:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d964350564", "title": "Self Hosting Generative Open Graph Art on the Edge with Supabase", "url": "https://www.ianwootten.co.uk/2023/04/25/self-hosting-generative-open-graph-art-on-the-edge-with-supabase/", "published_at": "2023-04-25T09:56:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d9645a4566", "title": "How to Create a Python Virtual Environment By Hand", "url": "https://www.ianwootten.co.uk/2023/04/06/how-to-create-a-python-virtual-environment-by-hand/", "published_at": "2023-04-06T09:56:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d965573f07", "title": "Building a Link Curation API with Platformatic", "url": "https://www.ianwootten.co.uk/2023/03/28/building-a-link-curation-api-with-platformatic/", "published_at": "2023-03-28T09:56:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d9656591e8", "title": "One Does Not Simply 'pip install'", "url": "https://www.ianwootten.co.uk/2023/02/17/one-does-not-simply-pip-install/", "published_at": "2023-02-17T11:56:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d965b8d99d", "title": "How to Add a Ghost Signup Form to Another Site", "url": "https://www.ianwootten.co.uk/2023/01/25/how-to-add-a-ghost-signup-form-to-another-site/", "published_at": "2023-01-25T09:56:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d96652d43d", "title": "The Peerless Assassin SE 120 is an Incredible $40 Cooler", "url": "https://www.ianwootten.co.uk/2023/01/17/the-peerless-assassin-se-120-is-an-incredible-40-cooler/", "published_at": "2023-01-17T09:56:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d96668384f", "title": "The 2022 Retrospective", "url": "https://www.ianwootten.co.uk/2022/12/30/the-2022-retrospective/", "published_at": "2022-12-30T12:56:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d966b3ec48", "title": "Why You Probably Shouldn't Develop Your Own Digital Product Store", "url": "https://www.ianwootten.co.uk/2022/12/21/why-you-probably-shouldnt-develop-your-own-digital-product-store/", "published_at": "2022-12-21T12:56:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d966ddb286", "title": "Using ChatGPT to Create Spoiler-Free Advent of Code Hints", "url": "https://www.ianwootten.co.uk/2022/12/12/using-chatgpt-to-create-spoiler-free-advent-of-code-hints/", "published_at": "2022-12-12T12:56:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d967b7667a", "title": "Automatic Spotify Playlist Creation with Pipedream and Supabase", "url": "https://www.ianwootten.co.uk/2022/12/06/automatic-spotify-playlist-creation-with-pipedream-and-supabase/", "published_at": "2022-12-06T08:27:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d967d8c298", "title": "How to Setup Distrobox on the Steam Deck", "url": "https://www.ianwootten.co.uk/2022/11/30/how-to-setup-distrobox-on-the-steam-deck/", "published_at": "2022-11-30T12:56:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d968d1bd4e", "title": "How to Upgrade Your Steam Decks Storage", "url": "https://www.ianwootten.co.uk/2022/11/22/how-to-upgrade-your-steam-decks-storage/", "published_at": "2022-11-22T08:27:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d9691857bb", "title": "How to Search Your Entire Twitter Archive With One Line of jq", "url": "https://www.ianwootten.co.uk/2022/11/14/how-to-search-your-entire-twitter-archive-with-one-line-of-jq/", "published_at": "2022-11-14T08:27:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d969538031", "title": "How to Use Underscores with Github Pages", "url": "https://www.ianwootten.co.uk/2022/11/08/how-to-use-underscores-with-github-pages/", "published_at": "2022-11-08T08:59:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d969a75888", "title": "Coding on the Steam Deck", "url": "https://www.ianwootten.co.uk/2022/10/24/coding-on-the-steam-deck/", "published_at": "2022-10-24T08:59:39+00:00" }, { "id": "01a08785-7551-7049-a952-13d96a97e146", "title": "Python isn’t Used in Prod", "url": "https://www.ianwootten.co.uk/2022/10/19/python-isnt-used-in-prod/", "published_at": "2022-10-19T13:37:13+00:00" }, { "id": "01a08785-7551-7049-a952-13d96b712036", "title": "PyCon UK 2022", "url": "https://www.ianwootten.co.uk/2022/09/20/pycon-uk-2022/", "published_at": "2022-09-20T08:40:54+00:00" }, { "id": "01a08785-7551-7049-a952-13d96b80ca1c", "title": "Getting Poetry to use the active Pyenv to Create a Virtual Environment", "url": "https://www.ianwootten.co.uk/2022/09/05/getting-poetry-to-use-the-active-pyenv-to-create-a-virtual-environment/", "published_at": "2022-09-05T09:25:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d96c1aa8b7", "title": "Developing on the Framework Laptop", "url": "https://www.ianwootten.co.uk/2022/08/25/developing-on-the-framework-laptop/", "published_at": "2022-08-25T14:19:36+00:00" }, { "id": "01a08785-7551-7049-a952-13d96cb004a6", "title": "How to Set the Locale Used in Cypress Tests", "url": "https://www.ianwootten.co.uk/2022/07/26/how-to-set-the-locale-used-in-cypress-tests/", "published_at": "2022-07-26T10:24:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d96d71cedc", "title": "Should You Pay for Github Copilot?", "url": "https://www.ianwootten.co.uk/2022/06/23/should-you-pay-for-github-copilot/", "published_at": "2022-06-23T09:35:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d96e562d36", "title": "How to Pass Vue Route Params as Component Props", "url": "https://www.ianwootten.co.uk/2022/06/09/how-to-pass-vue-route-params-as-component-props/", "published_at": "2022-06-09T14:15:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d96e787a2c", "title": "Certified Refurbished", "url": "https://www.ianwootten.co.uk/2022/04/10/certified-refurbished/", "published_at": "2022-04-10T15:57:32+00:00" }, { "id": "01a08785-7551-7049-a952-13d96f1a558f", "title": "Buying Refurbished Just isn't the Same for the M1 Pro", "url": "https://www.ianwootten.co.uk/2022/04/10/buying-refurbished-just-isnt-the-same-for-the-m1-pro/", "published_at": "2022-04-10T14:20:45+00:00" }, { "id": "01a08785-7551-7049-a952-13d96fa15287", "title": "With $15 in Sales, My First Digital Product is My Most Successful Ever", "url": "https://www.ianwootten.co.uk/2022/03/21/with-15-in-sales-my-first-digital-product-is-my-most-successful-ever/", "published_at": "2022-03-21T10:37:57+00:00" }, { "id": "01a08785-7551-7049-a952-13d970587dc5", "title": "Investment Principles You Can Use for Blogging", "url": "https://www.ianwootten.co.uk/2022/02/23/investment-principles-you-can-use-for-blogging/", "published_at": "2022-02-23T10:34:05+00:00" }, { "id": "01a08785-7551-7049-a952-13d970ade8b1", "title": "How to use .env files with Poetry", "url": "https://www.ianwootten.co.uk/2022/02/18/how-to-use-env-files-with-poetry/", "published_at": "2022-02-18T09:35:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d97119715b", "title": "How to Query the Product Hunt API Responsibly with Python", "url": "https://www.ianwootten.co.uk/2022/02/15/how-to-query-the-product-hunt-api-responsibly-with-python/", "published_at": "2022-02-15T11:28:10+00:00" }, { "id": "01a08785-7551-7049-a952-13d9714a7ddf", "title": "How to Create AWS Lambda Layers for Python Dependencies", "url": "https://www.ianwootten.co.uk/2022/01/27/how-to-create-aws-lambda-layers-for-python-dependencies/", "published_at": "2022-01-27T11:58:06+00:00" }, { "id": "01a08785-7551-7049-a952-13d972001188", "title": "Rendering a Christmas Tree that Never Comes Down with p5.js", "url": "https://www.ianwootten.co.uk/2022/01/10/rendering-a-christmas-tree-that-never-comes-down-with-p5-js/", "published_at": "2022-01-10T12:46:34+00:00" }, { "id": "01a08785-7551-7049-a952-13d9727c528b", "title": "How to Code Christmas Tree LEDs (and find their 3D Coordinates)", "url": "https://www.ianwootten.co.uk/2021/12/29/how-to-code-christmas-tree-leds-and-find-their-3d-coordinates/", "published_at": "2021-12-29T12:15:49+00:00" }, { "id": "01a08785-7551-7049-a952-13d9734504e6", "title": "How to Setup Raspberry Pi OS: Bullseye like a Python Pro", "url": "https://www.ianwootten.co.uk/2021/11/29/how-to-setup-raspberry-pi-os-bullseye-like-a-python-pro/", "published_at": "2021-11-29T17:29:55+00:00" }, { "id": "01a08785-7551-7049-a952-13d973eda6c7", "title": "Deleting Disqus Made My Blog Run 3x Faster", "url": "https://www.ianwootten.co.uk/2021/09/17/deleting-disqus-made-my-blog-run-3x-faster/", "published_at": "2021-09-17T11:52:29+00:00" }, { "id": "01a08785-7551-7049-a952-13d97421c2ba", "title": "Automatic Static Site Creation with Astro, Supabase and Netlify", "url": "https://www.ianwootten.co.uk/2021/09/10/automatic-static-site-creation-with-astro-supabase-and-netlify/", "published_at": "2021-09-10T09:27:51+00:00" }, { "id": "01a08785-7551-7049-a952-13d9746c21fd", "title": "Comparing Low-Code Tools as a Developer", "url": "https://www.ianwootten.co.uk/2021/08/10/comparing-low-code-tools-as-a-developer/", "published_at": "2021-08-10T08:02:47+00:00" }, { "id": "01a08785-7551-7049-a952-13d9755cf9ce", "title": "Why Python devs love Requests", "url": "https://www.ianwootten.co.uk/2021/07/08/why-python-devs-love-requests/", "published_at": "2021-07-08T14:03:34+00:00" }, { "id": "01a08785-7551-7049-a952-13d9765cb142", "title": "Build Your Own Pico Powered Midi Controller for $35", "url": "https://www.ianwootten.co.uk/2021/06/08/build-your-own-pico-powered-midi-controller-for-35/", "published_at": "2021-06-08T08:54:37+00:00" }, { "id": "01a08785-7551-7049-a952-13d976f3bd04", "title": "Installing Module Extras with Pipenv and Poetry", "url": "https://www.ianwootten.co.uk/2021/04/07/installing-module-extras-with-pipenv-and-poetry/", "published_at": "2021-04-07T16:13:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d977e9b279", "title": "YouTube Videos as Small Experiments", "url": "https://www.ianwootten.co.uk/2021/03/30/youtube-videos-as-small-experiments/", "published_at": "2021-03-30T12:07:26+00:00" }, { "id": "01a08785-7551-7049-a952-13d978cb6355", "title": "Setting Up a New M1 Mac for Development", "url": "https://www.ianwootten.co.uk/2021/03/05/setting-up-a-new-m1-mac-for-development/", "published_at": "2021-03-05T10:45:07+00:00" }, { "id": "01a08785-7551-7049-a952-13d979acadc0", "title": "Comparing VAT Solutions for Bootstrapped UK Businesses", "url": "https://www.ianwootten.co.uk/2021/02/23/comparing-vat-solutions-for-bootstrapped-uk-businesses/", "published_at": "2021-02-23T11:32:30+00:00" }, { "id": "01a08785-7551-7049-a952-13d979d176ed", "title": "Creating Social Images with Puppeteer", "url": "https://www.ianwootten.co.uk/2021/02/16/creating-social-images-with-puppeteer/", "published_at": "2021-02-16T10:07:59+00:00" }, { "id": "01a08785-7551-7049-a952-13d97a47027b", "title": "The Years I've Spent on Side Projects Have Not Been Wasted", "url": "https://www.ianwootten.co.uk/2021/02/04/the-years-ive-spent-on-side-projects-have-not-been-wasted/", "published_at": "2021-02-04T10:04:41+00:00" }, { "id": "01a08785-7551-7049-a952-13d97ae16edd", "title": "Building a Cookiecutter Template for Multiple Python Package Managers", "url": "https://www.ianwootten.co.uk/2021/01/25/building-a-cookiecutter-template-for-multiple-python-package-managers/", "published_at": "2021-01-25T14:21:21+00:00" }, { "id": "01a08785-7551-7049-a952-13d97b800f5a", "title": "Bootstrapping Python Projects with Cookiecutter and Makefiles", "url": "https://www.ianwootten.co.uk/2021/01/07/bootstrapping-python-projects-with-cookiecutter-and-makefiles/", "published_at": "2021-01-07T15:57:34+00:00" }, { "id": "01a08785-7551-7049-a952-13d97bbb917d", "title": "What is a PEP and Why Should I Care?", "url": "https://www.ianwootten.co.uk/2020/11/16/what-is-a-pep-and-why-should-i-care/", "published_at": "2020-11-16T15:15:34+00:00" }, { "id": "01a08785-7551-7049-a952-13d97c844e49", "title": "Interesting Features in Python 3.9", "url": "https://www.ianwootten.co.uk/2020/11/05/interesting-features-in-python-3-9/", "published_at": "2020-11-05T13:57:34+00:00" }, { "id": "01a08785-7551-7049-a952-13d97d6598a3", "title": "Use Black to Format Python and get on with Your Life", "url": "https://www.ianwootten.co.uk/2020/11/03/use-black-to-format-python-and-get-on-with-your-life/", "published_at": "2020-11-03T15:35:34+00:00" }, { "id": "01a08785-7551-7049-a952-13d97de541e1", "title": "How to Deploy a Django App to the DigitalOcean App Platform", "url": "https://www.ianwootten.co.uk/2020/10/28/how-to-deploy-a-django-app-to-the-digitalocean-app-platform/", "published_at": "2020-10-28T10:13:59+00:00" }, { "id": "01a08785-7551-7049-a952-13d97e7e9720", "title": "Automating PyPI Releases Using Poetry and Github Actions", "url": "https://www.ianwootten.co.uk/2020/10/23/publishing-to-pypi-using-github-actions/", "published_at": "2020-10-23T09:00:19+00:00" }, { "id": "01a08785-7551-7049-a952-13d97f30d644", "title": "Publishing a Package to PyPI with Poetry", "url": "https://www.ianwootten.co.uk/2020/10/20/publishing-a-package-to-pypi-with-poetry/", "published_at": "2020-10-20T09:04:11+00:00" }, { "id": "01a08785-7551-7049-a952-13d97f498369", "title": "Purpose", "url": "https://www.ianwootten.co.uk/2018/12/06/purpose/", "published_at": "2018-12-06T00:00:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d97fe0b5f4", "title": "Unhealthy Comparisons", "url": "https://www.ianwootten.co.uk/2018/11/21/unhealthy-comparisons/", "published_at": "2018-11-21T00:00:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d980dfc9d2", "title": "My Web Development Stack in 2018", "url": "https://www.ianwootten.co.uk/2018/11/07/my-web-development-stack-in-2018/", "published_at": "2018-11-07T00:00:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d981aafb6b", "title": "What’s in a name?", "url": "https://www.ianwootten.co.uk/2018/10/16/whats-in-a-name/", "published_at": "2018-10-16T00:00:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d981ca26e0", "title": "Blogging with Hugo", "url": "https://www.ianwootten.co.uk/2018/10/04/blogging-with-hugo/", "published_at": "2018-10-04T00:00:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d981d398ce", "title": "User Generated Forms with WTForms", "url": "https://www.ianwootten.co.uk/2017/04/18/user-generated-forms-with-wtforms/", "published_at": "2017-04-18T00:00:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d982023e9c", "title": "There's No Such Thing as a Side Project", "url": "https://www.ianwootten.co.uk/2016/01/20/theres-no-such-thing-as-a-side-project/", "published_at": "2016-01-20T00:00:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d982b7e312", "title": "Blogging with Metalsmith", "url": "https://www.ianwootten.co.uk/2015/06/30/blogging-with-metalsmith/", "published_at": "2015-06-30T00:00:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d983b6ef06", "title": "Processing Camera RAWs with OpenImageIO and Python", "url": "https://www.ianwootten.co.uk/2014/09/15/processing-camera-raws-with-openimageio-and-python/", "published_at": "2014-09-15T00:00:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d98420a7fa", "title": "Extracting Shot Thumbnails from a video using FFMPEG", "url": "https://www.ianwootten.co.uk/2014/07/31/extracting-shot-thumbnails-from-a-video-using-ffmpeg/", "published_at": "2014-07-31T00:00:00+00:00" }, { "id": "01a08785-7551-7049-a952-13d984d3c815", "title": "Splitting a date range in Python", "url": "https://www.ianwootten.co.uk/2014/07/01/splitting-a-date-range-in-python/", "published_at": "2014-07-01T00:00:00+00:00" }, { "id": "01a08785-7552-7290-a212-a94118e67936", "title": "Tips for being a more Productive Freelancer", "url": "https://www.ianwootten.co.uk/2014/06/16/tips-for-being-a-more-productive-freelancer/", "published_at": "2014-06-16T00:00:00+00:00" }, { "id": "01a08785-7552-7290-a212-a941193bda94", "title": "Porting a Wordpress blog to Jekyll: Part 2", "url": "https://www.ianwootten.co.uk/2014/06/02/porting-a-wordpress-blog-to-jekyll-part-2/", "published_at": "2014-06-02T00:00:00+00:00" }, { "id": "01a08785-7552-7290-a212-a94119762121", "title": "Porting a Wordpress blog to Jekyll: Part 1", "url": "https://www.ianwootten.co.uk/2014/05/20/porting-a-wordpress-blog-to-jekyll-part-1/", "published_at": "2014-05-20T00:00:00+00:00" }, { "id": "01a08785-7552-7290-a212-a94119ba6cee", "title": "Bye Bye Wordpress", "url": "https://www.ianwootten.co.uk/2014/05/18/bye-bye-wordpress/", "published_at": "2014-05-18T00:00:00+00:00" }, { "id": "01a08785-7552-7290-a212-a9411a46362a", "title": "Copyright Law Finally Aligns with Me", "url": "https://www.ianwootten.co.uk/2014/04/07/copyright-law-finally-aligns-with-me/", "published_at": "2014-04-07T00:00:00+00:00" }, { "id": "01a08785-7552-7290-a212-a9411a97f369", "title": "Shipping in March: Weeks 2 & 3", "url": "https://www.ianwootten.co.uk/2014/03/23/shipping-in-march-weeks-2-and-3/", "published_at": "2014-03-23T00:00:00+00:00" }, { "id": "01a08785-7552-7290-a212-a9411a983ef1", "title": "Shipping in March: Week 1", "url": "https://www.ianwootten.co.uk/2014/03/10/shipping-in-march-week-1/", "published_at": "2014-03-10T00:00:00+00:00" }, { "id": "01a08785-7552-7290-a212-a9411a9f73dd", "title": "Scaling a Linear Domain to an Ordinal Range with d3", "url": "https://www.ianwootten.co.uk/2014/03/07/scaling-a-linear-domain-to-an-ordinal-range-with-d3/", "published_at": "2014-03-07T00:00:00+00:00" }, { "id": "01a08785-7552-7290-a212-a9411aff4d6e", "title": "Shipping in March", "url": "https://www.ianwootten.co.uk/2014/03/03/shipping-in-march/", "published_at": "2014-03-03T00:00:00+00:00" }, { "id": "01a08785-7552-7290-a212-a9411b117ef3", "title": "Setting Up an .is Domain with ISNIC", "url": "https://www.ianwootten.co.uk/2013/10/27/setting-up-an-is-domain-with-isnic/", "published_at": "2013-10-27T00:00:00+00:00" }, { "id": "01a08785-7552-7290-a212-a9411b74d414", "title": "A Decade on the World Wide Web", "url": "https://www.ianwootten.co.uk/2013/08/14/a-decade-on-the-world-wide-web/", "published_at": "2013-08-14T00:00:00+00:00" }, { "id": "01a08785-7552-7290-a212-a9411c1e4a16", "title": "Second Rate Britizens", "url": "https://www.ianwootten.co.uk/2013/07/06/second-rate-britizens/", "published_at": "2013-07-06T00:00:00+00:00" }, { "id": "01a08785-7552-7290-a212-a9411c1f1954", "title": "The Developer Dream", "url": "https://www.ianwootten.co.uk/2013/06/27/the-developer-dream/", "published_at": "2013-06-27T00:00:00+00:00" }, { "id": "01a08785-7552-7290-a212-a9411cc99d93", "title": "The Problem with Full Stack JS Applications", "url": "https://www.ianwootten.co.uk/2013/04/03/the-problem-with-full-stack-js-applications/", "published_at": "2013-04-03T00:00:00+00:00" }, { "id": "01a08785-7552-7290-a212-a9411dbd2caa", "title": "So You Want to Run a Fairtrade Business?", "url": "https://www.ianwootten.co.uk/2013/03/28/so-you-want-to-run-a-fairtrade-business/", "published_at": "2013-03-28T00:00:00+00:00" }, { "id": "01a08785-7552-7290-a212-a9411e138e9b", "title": "Breaking up Relationships with CouchDB", "url": "https://www.ianwootten.co.uk/2013/03/01/breaking-up-relationships-with-couchdb/", "published_at": "2013-03-01T00:00:00+00:00" } ] posts Claim your blog
Back to ianwootten.co.uk
Blog · corpus.blog/blogs/ianwootten.co.uk/posts

ianwootten.co.uk

ianwootten.co.uk

2026

2025

2024

2023

2022

2021

2020

2018

2017

2016

2015

2014

2013