<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Jacob Tomlinson</title>
    <link>https://jacobtomlinson.dev/</link>
    <description>Recent content on Jacob Tomlinson</description>
    <generator>Hugo</generator>
    <language>en-gb</language>
    <lastBuildDate>Thu, 19 Feb 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://jacobtomlinson.dev/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Guiding your contributor&#39;s agents to better behaviours</title>
      <link>https://jacobtomlinson.dev/posts/2026/guiding-your-contributors-agents-to-better-behaviours/</link>
      <pubDate>Thu, 19 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2026/guiding-your-contributors-agents-to-better-behaviours/</guid>
      <description>&lt;p&gt;Many open source maintainers have noticed an uptick in low-effort AI generated PRs recently, myself included. The most frustrating of these is when someone prompts their agent to &lt;code&gt;&amp;quot;Fix &amp;lt;url to issue&amp;gt; and make a PR with the changes&amp;quot;&lt;/code&gt;. Reviewing these PRs can be time consuming because diffs can be large and the contributors rarely respond to review feedback, they just prompt and move on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Backporting fixes to older releases on Conda Forge</title>
      <link>https://jacobtomlinson.dev/posts/2026/backporting-fixes-to-older-releases-on-conda-forge/</link>
      <pubDate>Wed, 28 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2026/backporting-fixes-to-older-releases-on-conda-forge/</guid>
      <description>&lt;p&gt;Some quick notes on how to make a backport Conda Forge release.&lt;/p&gt;&#xA;&lt;h2 id=&#34;context&#34;&gt;Context&lt;/h2&gt;&#xA;&lt;p&gt;We recently had a security vulnerability in Dask which we patched in &lt;code&gt;2026.1.1&lt;/code&gt; (see &lt;a href=&#34;https://github.com/dask/distributed/security/advisories/GHSA-c336-7962-wfj2&#34;&gt;GHSA-c336-7962-wfj2&lt;/a&gt; for more information on what happened).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python package managers: uv vs pixi?</title>
      <link>https://jacobtomlinson.dev/posts/2025/python-package-managers-uv-vs-pixi/</link>
      <pubDate>Tue, 18 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2025/python-package-managers-uv-vs-pixi/</guid>
      <description>&lt;p&gt;When I talk to people about Python package management in 2025 I see the following tools in active use; &lt;a href=&#34;https://docs.astral.sh/uv/&#34;&gt;&lt;code&gt;uv&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://pixi.sh/latest/&#34;&gt;&lt;code&gt;pixi&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://pypi.org/project/pip/&#34;&gt;&lt;code&gt;pip&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://docs.conda.io/en/latest/&#34;&gt;&lt;code&gt;conda&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://mamba.readthedocs.io/en/latest/&#34;&gt;&lt;code&gt;mamba&lt;/code&gt;&lt;/a&gt;, &lt;a href=&#34;https://mamba.readthedocs.io/en/latest/user_guide/micromamba.html&#34;&gt;&lt;code&gt;micromamba&lt;/code&gt;&lt;/a&gt; and &lt;a href=&#34;https://python-poetry.org/&#34;&gt;&lt;code&gt;poetry&lt;/code&gt;&lt;/a&gt;. There may be others, but I don&amp;rsquo;t hear much about them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Revisiting old contributions for Hacktoberfest</title>
      <link>https://jacobtomlinson.dev/posts/2025/revisiting-old-contributions-for-hacktoberfest/</link>
      <pubDate>Wed, 01 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2025/revisiting-old-contributions-for-hacktoberfest/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s &lt;a href=&#34;https://hacktoberfest.com/&#34;&gt;hacktoberfest&lt;/a&gt; time again!&lt;/p&gt;&#xA;&lt;p&gt;For the last few years hacktoberferst has been opt-in for project maintainers to avoid the bombardment of spam PRs across GitHub. To find participating projects you can view the &lt;a href=&#34;https://github.com/topics/hacktoberfest&#34;&gt;hacktoberfest tag on github&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Majority Of Your Users</title>
      <link>https://jacobtomlinson.dev/posts/2025/the-majority-of-your-users/</link>
      <pubDate>Tue, 30 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2025/the-majority-of-your-users/</guid>
      <description>&lt;p&gt;&lt;em&gt;The majority of your users&lt;/em&gt; don’t read your changelog.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;The majority of your users&lt;/em&gt; only upgrade to new versions when forced to.&lt;/p&gt;</description>
    </item>
    <item>
      <title>EffVer - Version your code by the effort required to upgrade</title>
      <link>https://jacobtomlinson.dev/talks/2025-08-21-euroscipy-effver/</link>
      <pubDate>Thu, 21 Aug 2025 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2025-08-21-euroscipy-effver/</guid>
      <description>&lt;p&gt;Version numbers are hard to get right. Maintainers want to communicate to users what the impact of adopting a new version will be, but poor communication can lead to a lot of frustration. There are a few popular version schemes in use today including Semantic Versioning (SemVer) and Calendar Versioning (CalVer). However, projects in the Python community often don’t strictly conform to these standards which leads to confusion.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Teaching Python with GPUs: Empowering educators to share knowledge that uses GPUs</title>
      <link>https://jacobtomlinson.dev/talks/2025-07-11-scipy-teaching-python-with-gpus/</link>
      <pubDate>Fri, 11 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2025-07-11-scipy-teaching-python-with-gpus/</guid>
      <description>&lt;p&gt;In today’s world of ever-growing data and AI, learning about GPUs has become an essential part of software carpentry, professional development and the education curriculum. However, teaching with GPUs can be challenging, from resource accessibility to managing dependencies and varying knowledge levels.&lt;/p&gt;</description>
    </item>
    <item>
      <title>EffVer - Version your code by the effort required to upgrade</title>
      <link>https://jacobtomlinson.dev/talks/2025-07-09-scipy-effver/</link>
      <pubDate>Wed, 09 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2025-07-09-scipy-effver/</guid>
      <description>&lt;p&gt;Version numbers are hard to get right. Maintainers want to communicate to users what the impact of adopting a new version will be, but poor communication can lead to a lot of frustration. There are a few popular version schemes in use today including Semantic Versioning (SemVer) and Calendar Versioning (CalVer). However, projects in the Python community often don’t strictly conform to these standards which leads to confusion.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GPU Accelerated Python</title>
      <link>https://jacobtomlinson.dev/talks/2025-06-06-pydata-london-gpu-accelerated-python/</link>
      <pubDate>Fri, 06 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2025-06-06-pydata-london-gpu-accelerated-python/</guid>
      <description>&lt;p&gt;Accelerating Python using the GPU is much easier than you might think. We will explore the powerful CUDA-enabled Python ecosystem in this tutorial through hands-on examples using some of the most popular accelerated scientific computing libraries.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Intro to Kubernetes: 10 Years On</title>
      <link>https://jacobtomlinson.dev/talks/2025-05-16-tech-exeter-kubernetes-10-years-on/</link>
      <pubDate>Thu, 15 May 2025 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2025-05-16-tech-exeter-kubernetes-10-years-on/</guid>
      <description>&lt;p&gt;In October 2015 I gave a talk on Kubernetes at Tech Exeter (back when it was called the Exeter Web Meetup).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Generating useful titles for automated PRs in GitHub Actions</title>
      <link>https://jacobtomlinson.dev/posts/2025/generating-useful-titles-for-automated-prs-in-github-actions/</link>
      <pubDate>Tue, 29 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2025/generating-useful-titles-for-automated-prs-in-github-actions/</guid>
      <description>&lt;p&gt;In &lt;a href=&#34;https://github.com/kr8s-org/kr8s&#34;&gt;kr8s&lt;/a&gt; I have a GitHub Actions workflow which runs a script nightly on a cron job. The workflow grabs a list of actively supported Kubernetes versions from &lt;a href=&#34;https://endoflife.date/kubernetes&#34;&gt;endoflife.date&lt;/a&gt; and then cross-references them with the &lt;a href=&#34;https://hub.docker.com/r/kindest/node/tags&#34;&gt;available &lt;code&gt;kind&lt;/code&gt; container images&lt;/a&gt; for running the tests in CI.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why don&#39;t my markdown titles work sometimes?</title>
      <link>https://jacobtomlinson.dev/posts/2025/why-dont-my-markdown-titles-work-sometimes/</link>
      <pubDate>Fri, 14 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2025/why-dont-my-markdown-titles-work-sometimes/</guid>
      <description>&lt;p&gt;I write a lot of markdown. I use it on &lt;a href=&#34;https://github.com/&#34;&gt;GitHub&lt;/a&gt; when creating issues/PRs, I use it in &lt;a href=&#34;https://obsidian.md/&#34;&gt;Obsidian&lt;/a&gt; when I take notes, I use it in &lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt; when writing blog posts (&lt;a href=&#34;https://github.com/jacobtomlinson/website/blob/master/content/posts/2025/2025-03-14-why-cont-my-markdown-titles-work/index.md?plain=1&#34;&gt;like this one&lt;/a&gt;), I use it in &lt;a href=&#34;https://jupyter.org/&#34;&gt;Jupyter Notebooks&lt;/a&gt; when working with data and I use it in &lt;a href=&#34;https://www.sphinx-doc.org/en/master/&#34;&gt;Sphinx&lt;/a&gt; with &lt;a href=&#34;https://myst-parser.readthedocs.io/en/latest/&#34;&gt;MyST&lt;/a&gt; when writing documentation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>100 Days of Coreutils</title>
      <link>https://jacobtomlinson.dev/blog/100-days-of-coreutils/</link>
      <pubDate>Wed, 05 Mar 2025 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/blog/100-days-of-coreutils/</guid>
      <description>&lt;p&gt;I consider myself an advanced Linux and macOS user. I&amp;rsquo;m currently a software engineer developing primarily for Linux systems, and I&amp;rsquo;ve previously worked as a Linux and Mac System Administrator. Over the years I&amp;rsquo;ve spent tons of time on the command line, however I bet there are a bunch of &lt;a href=&#34;https://en.wikipedia.org/wiki/GNU_Core_Utilities&#34;&gt;GNU Core Utilities (coreutils)&lt;/a&gt; commands I&amp;rsquo;ve never used before.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using multiple config files with kubectl and other Kubernetes tools</title>
      <link>https://jacobtomlinson.dev/posts/2025/using-multiple-config-files-with-kubectl-and-other-kubernetes-tools/</link>
      <pubDate>Thu, 27 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2025/using-multiple-config-files-with-kubectl-and-other-kubernetes-tools/</guid>
      <description>&lt;p&gt;If you want to point tools like &lt;a href=&#34;https://kubernetes.io/docs/reference/kubectl/&#34;&gt;&lt;code&gt;kubectl&lt;/code&gt;&lt;/a&gt; to a config file other than &lt;code&gt;~/.kube/config&lt;/code&gt; you can set the &lt;a href=&#34;https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/&#34;&gt;environment variable &lt;code&gt;KUBECONFIG&lt;/code&gt;&lt;/a&gt;. But did you know that &lt;code&gt;KUBECONFIG&lt;/code&gt; behaves sort of like a path, and &lt;code&gt;kubectl&lt;/code&gt; will load all the config files it finds?&lt;/p&gt;</description>
    </item>
    <item>
      <title>An introduction to GPU programming in Python</title>
      <link>https://jacobtomlinson.dev/talks/2025-02-13-google-student-developer-club-exeter-python-gpu/</link>
      <pubDate>Thu, 13 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2025-02-13-google-student-developer-club-exeter-python-gpu/</guid>
      <description></description>
    </item>
    <item>
      <title>Who Builds the PyData Ecosystem?</title>
      <link>https://jacobtomlinson.dev/talks/2025-01-29-pydata-exeter-how-the-pydata-ecosystem-is-built/</link>
      <pubDate>Mon, 27 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2025-01-29-pydata-exeter-how-the-pydata-ecosystem-is-built/</guid>
      <description>&lt;p&gt;The PyData software ecosystem is made up of many open-source software libraries that are used heavily in Python Software Development, Data Science/Engineering, Traditional Sciences, Artificial Intelligence and beyond. They were used to fly a helicopter on Mars, drive new discoveries around climate change and generate the first image of a black hole.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Most stale bots are anti-user and anti-contributor, but they don&#39;t have to be</title>
      <link>https://jacobtomlinson.dev/posts/2024/most-stale-bots-are-anti-user-and-anti-contributor-but-they-dont-have-to-be/</link>
      <pubDate>Thu, 05 Dec 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2024/most-stale-bots-are-anti-user-and-anti-contributor-but-they-dont-have-to-be/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;ve been around open source projects on GitHub you may have encountered a project with a &lt;a href=&#34;https://github.com/actions/stale&#34;&gt;stale bot&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GPU Development in Python 101</title>
      <link>https://jacobtomlinson.dev/talks/2024-12-04-pydata-global-gpu-development-in-python-101/</link>
      <pubDate>Wed, 04 Dec 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2024-12-04-pydata-global-gpu-development-in-python-101/</guid>
      <description>&lt;p&gt;Writing GPU code in Python is easier today than ever. You don’t need to learn C++ and there are many libraries available to get you started quickly. In this tutorial we will learn some GPU programming fundamentals and explore the ecosystem of GPU accelerated libraries that do the hard work for you.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The art of wrangling your GPU Python environments </title>
      <link>https://jacobtomlinson.dev/talks/2024-12-04-pydata-global-the-art-of-wrangling-your-gpu-python-environments/</link>
      <pubDate>Wed, 04 Dec 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2024-12-04-pydata-global-the-art-of-wrangling-your-gpu-python-environments/</guid>
      <description>&lt;p&gt;Debugging software itself is a hard task, but debugging GPU software environments can be even more challenging. Understanding the intricate interactions between hardware, drivers, CUDA, C++ dependencies, and Python libraries can be far more complex.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting science done with accelerated Python computing platforms</title>
      <link>https://jacobtomlinson.dev/talks/2024-11-14-noc-getting-science-done-with-accelerated-python-computing-platforms/</link>
      <pubDate>Thu, 14 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2024-11-14-noc-getting-science-done-with-accelerated-python-computing-platforms/</guid>
      <description></description>
    </item>
    <item>
      <title>Dask on HPC in 2024</title>
      <link>https://jacobtomlinson.dev/talks/2024-11-12-cnes-pangeo-dask-on-hpc-in-2024/</link>
      <pubDate>Tue, 12 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2024-11-12-cnes-pangeo-dask-on-hpc-in-2024/</guid>
      <description></description>
    </item>
    <item>
      <title>GPU Acceleration in the PyData community</title>
      <link>https://jacobtomlinson.dev/talks/2024-11-12-cnes-pangeo-gpu-acceleration-in-the-pydata-community/</link>
      <pubDate>Tue, 12 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2024-11-12-cnes-pangeo-gpu-acceleration-in-the-pydata-community/</guid>
      <description></description>
    </item>
    <item>
      <title>EffVer</title>
      <link>https://jacobtomlinson.dev/talks/2024-11-08-pydata-nyc-effver/</link>
      <pubDate>Fri, 08 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2024-11-08-pydata-nyc-effver/</guid>
      <description>&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; allowfullscreen=&#34;allowfullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/76qs5hz_6HI?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=448&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;    &lt;/div&gt;</description>
    </item>
    <item>
      <title>GPU Accelerated Python</title>
      <link>https://jacobtomlinson.dev/talks/2024-11-06-pydata-nyc-gpu-accelerated-python/</link>
      <pubDate>Wed, 06 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2024-11-06-pydata-nyc-gpu-accelerated-python/</guid>
      <description>&lt;p&gt;Accelerating Python using the GPU is much easier than you might think. We will explore the powerful CUDA-enabled Python ecosystem in this tutorial through hands-on examples using some of the most popular accelerated scientific computing libraries.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Accelerating Python on HPC with Dask</title>
      <link>https://jacobtomlinson.dev/talks/2024-08-29-euroscipy-accelerating-python-on-hpc-with-dask/</link>
      <pubDate>Thu, 29 Aug 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2024-08-29-euroscipy-accelerating-python-on-hpc-with-dask/</guid>
      <description>&lt;p&gt;Dask is a popular Python framework for scaling your workloads, whether you want to leverage all of the cores on your laptop and stream large datasets through memory, or scale your workload out to thousands of cores on large compute clusters. Dask allows you to distribute code using familiar APIs such as pandas, NumPy and scikit-learn or write your own distributed code with powerful parallel task-based programming primitives.&lt;/p&gt;</description>
    </item>
    <item>
      <title>EffVer</title>
      <link>https://jacobtomlinson.dev/talks/2024-08-28-euroscipy-effver/</link>
      <pubDate>Wed, 28 Aug 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2024-08-28-euroscipy-effver/</guid>
      <description></description>
    </item>
    <item>
      <title>Zero Code Change GPU Acceleration</title>
      <link>https://jacobtomlinson.dev/talks/2024-08-28-euroscipy-zero-code-change-gpu-acceleration/</link>
      <pubDate>Wed, 28 Aug 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2024-08-28-euroscipy-zero-code-change-gpu-acceleration/</guid>
      <description></description>
    </item>
    <item>
      <title>GPU Development in Python 101 </title>
      <link>https://jacobtomlinson.dev/talks/2024-07-09-europython-gpu-development-in-python-101/</link>
      <pubDate>Tue, 09 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2024-07-09-europython-gpu-development-in-python-101/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Since joining NVIDIA I’ve gotten to grips with the fundamentals of writing accelerated code in Python. I was amazed to discover that I didn’t need to learn C++ and I didn’t need new development tools. Writing GPU code in Python is easier today than ever, and in this tutorial, I will share what I’ve learned and how you can get started with accelerating your code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GPU Development in Python 101 </title>
      <link>https://jacobtomlinson.dev/talks/2024-06-14-pydata-london-gpu-development-in-python-101/</link>
      <pubDate>Fri, 14 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2024-06-14-pydata-london-gpu-development-in-python-101/</guid>
      <description>&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; allowfullscreen=&#34;allowfullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/sMpqsoIvrio?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Since joining NVIDIA I’ve gotten to grips with the fundamentals of writing accelerated code in Python. I was amazed to discover that I didn’t need to learn C++ and I didn’t need new development tools. Writing GPU code in Python is easier today than ever, and in this tutorial, I will share what I’ve learned and how you can get started with accelerating your code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a career in Open Source Software</title>
      <link>https://jacobtomlinson.dev/talks/2024-05-07-building-a-career-in-open-source-software/</link>
      <pubDate>Tue, 07 May 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2024-05-07-building-a-career-in-open-source-software/</guid>
      <description></description>
    </item>
    <item>
      <title>Python version epochs are broken</title>
      <link>https://jacobtomlinson.dev/posts/2024/python-version-epochs-are-broken/</link>
      <pubDate>Wed, 01 May 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2024/python-version-epochs-are-broken/</guid>
      <description>&lt;p&gt;In &lt;a href=&#34;https://peps.python.org/pep-0440&#34;&gt;PEP440&lt;/a&gt; Python introduced &lt;a href=&#34;https://packaging.python.org/en/latest/specifications/version-specifiers/#version-epochs&#34;&gt;Version Epochs&lt;/a&gt; as a mechanism to allow projects to change versioning scheme. Unfortunately there&amp;rsquo;s no way I could see a project actually making use of this without confusing their users.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating GitHub Releases automatically on tags</title>
      <link>https://jacobtomlinson.dev/posts/2024/creating-github-releases-automatically-on-tags/</link>
      <pubDate>Fri, 19 Apr 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2024/creating-github-releases-automatically-on-tags/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://docs.github.com/en/repositories/releasing-projects-on-github/about-releases&#34;&gt;GitHub Releases&lt;/a&gt; is a feature where you can create a page associated with a git tag that contains a description of the changes in that tag along with build artifacts for users to download.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Connect With Experts: RAPIDS Cloud Deployment</title>
      <link>https://jacobtomlinson.dev/talks/2024-03-21-gtc-cwe-rapids-cloud-deployment/</link>
      <pubDate>Thu, 21 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2024-03-21-gtc-cwe-rapids-cloud-deployment/</guid>
      <description></description>
    </item>
    <item>
      <title>Reducing the Cost of your Data Science Workloads on the Cloud</title>
      <link>https://jacobtomlinson.dev/talks/2024-03-19-gtc-reducing-the-cost-of-your-data-science-workloads-on-the-cloud/</link>
      <pubDate>Tue, 19 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2024-03-19-gtc-reducing-the-cost-of-your-data-science-workloads-on-the-cloud/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.nvidia.com/en-us/on-demand/session/gtc24-s62211/&#34;&gt;&#xA;&lt;img src=&#34;./video-player.png&#34; alt=&#34;&#34;&gt;&#xA;&#xA;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;By leveraging cloud computing resources, you can pay for just the computing power you need, when you need it. Additionally, GPU acceleration can significantly decrease the amount of time you need computing resources, reducing your overall cost.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A beginner&#39;s guide to managing Kubernetes resources in Python with kr8s</title>
      <link>https://jacobtomlinson.dev/posts/2024/a-beginners-guide-to-managing-kubernetes-resources-in-python-with-kr8s/</link>
      <pubDate>Mon, 11 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2024/a-beginners-guide-to-managing-kubernetes-resources-in-python-with-kr8s/</guid>
      <description>&lt;p&gt;Managing Kubernetes resources with Python has never been easier thanks to the &lt;a href=&#34;https://github.com/kr8s-org/kr8s&#34;&gt;&lt;code&gt;kr8s&lt;/code&gt; Kubernetes client for Python&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dask on Databricks</title>
      <link>https://jacobtomlinson.dev/talks/2024-02-15-dask-demo-day-dask-on-databricks/</link>
      <pubDate>Thu, 15 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2024-02-15-dask-demo-day-dask-on-databricks/</guid>
      <description></description>
    </item>
    <item>
      <title>Running Dask on Databricks</title>
      <link>https://jacobtomlinson.dev/posts/2024/running-dask-on-databricks/</link>
      <pubDate>Thu, 15 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2024/running-dask-on-databricks/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.databricks.com/&#34;&gt;Databricks&lt;/a&gt; is a very popular data analytics platform used by data scientists, engineers, and businesses around the world. It was founded by the creators of &lt;a href=&#34;https://spark.apache.org/&#34;&gt;Apache Spark&lt;/a&gt;, a powerful open-source data processing engine, and builds on top of Spark to provide a comprehensive analytics platform.&lt;/p&gt;</description>
    </item>
    <item>
      <title>cudf.pandas: the Zero Code Change GPU Accelerator for pandas</title>
      <link>https://jacobtomlinson.dev/talks/2024-02-07-cudf-pandas-the-zero-code-change-gpu-accelerator-for-pandas/</link>
      <pubDate>Wed, 07 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2024-02-07-cudf-pandas-the-zero-code-change-gpu-accelerator-for-pandas/</guid>
      <description>&lt;p&gt;Pandas is flexible, but often slow when processing gigabytes of data. Many frameworks promise higher performance, but they often support only a subset of the Pandas API, require significant code change, and struggle to interact with or accelerate third-party code that you can’t change. RAPIDS cuDF enables Pandas users to accelerate their existing workflows and third-party code with zero code change required. You can continue using Pandas on CPUs for small-scale local development and testing, and then enable “Pandas accelerator mode” to run on GPUs when you want better performance. Accelerator mode uses the GPU for supported operations and the CPU otherwise, dispatching under the hood as needed, and is compatible with most third-party libraries.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Running Dask workloads on multiple cluster backends with zero code changes using dask-ctl</title>
      <link>https://jacobtomlinson.dev/posts/2024/running-dask-workloads-on-multiple-cluster-backends-with-zero-code-changes-using-dask-ctl/</link>
      <pubDate>Thu, 25 Jan 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2024/running-dask-workloads-on-multiple-cluster-backends-with-zero-code-changes-using-dask-ctl/</guid>
      <description>&lt;p&gt;Sometimes you want to write some code using &lt;a href=&#34;https://www.dask.org/&#34;&gt;Dask&lt;/a&gt; which can then be run against multiple different cluster backends. For example for local testing you might want to use &lt;code&gt;LocalCLuster&lt;/code&gt;, but in production use &lt;a href=&#34;https://kubernetes.dask.org/&#34;&gt;&lt;code&gt;KubeCluster&lt;/code&gt;&lt;/a&gt;. Or perhaps you want to easily switch between an on premise HPC with &lt;code&gt;SLURMRunner&lt;/code&gt; or the cloud with &lt;a href=&#34;https://www.coiled.io/&#34;&gt;&lt;code&gt;Coiled&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>EffVer: Version your code by the effort required to upgrade</title>
      <link>https://jacobtomlinson.dev/effver/</link>
      <pubDate>Mon, 15 Jan 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/effver/</guid>
      <description>&lt;p&gt;Version numbers are hard to get right. Semantic Versioning &lt;a href=&#34;https://semver.org/&#34;&gt;(SemVer)&lt;/a&gt; communicates backward compatibility via version numbers which often lead to a &lt;a href=&#34;https://hynek.me/articles/semver-will-not-save-you/&#34;&gt;false sense of security and broken promises&lt;/a&gt;. Calendar Versioning &lt;a href=&#34;https://calver.org/&#34;&gt;(CalVer)&lt;/a&gt; sits at the other extreme of communicating almost &lt;a href=&#34;https://jacobtomlinson.dev/posts/2023/sometimes-i-regret-using-calver/&#34;&gt;no useful information at all&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to highlight lines in a Hugo code block</title>
      <link>https://jacobtomlinson.dev/posts/2024/how-to-highlight-lines-in-a-hugo-code-block/</link>
      <pubDate>Thu, 11 Jan 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2024/how-to-highlight-lines-in-a-hugo-code-block/</guid>
      <description>&lt;p&gt;Sometimes when writing code in a blog post I want to emphasize a couple of lines in particular. Today I found out that Hugo has really nice syntax to do this in a regular markdown code-fence.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My Bio</title>
      <link>https://jacobtomlinson.dev/about/</link>
      <pubDate>Thu, 11 Jan 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/about/</guid>
      <description>&lt;p&gt;From time to time I give &lt;a href=&#34;https://jacobtomlinson.dev/talks&#34;&gt;talks&lt;/a&gt; and run workshops and folks will ask me for a bio. You may even be one of those folks and I&amp;rsquo;ve directed you to this page! Huzzah the system works!&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to get typer to show help by default</title>
      <link>https://jacobtomlinson.dev/posts/2024/how-to-get-typer-to-show-help-by-default/</link>
      <pubDate>Wed, 10 Jan 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2024/how-to-get-typer-to-show-help-by-default/</guid>
      <description>&lt;p&gt;I love using &lt;a href=&#34;https://typer.tiangolo.com/&#34;&gt;typer&lt;/a&gt; for creating CLI tools in Python. It makes creating complex trees of subcommands really straightforward.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GitHub streaks and work/life balance</title>
      <link>https://jacobtomlinson.dev/posts/2024/github-streaks-and-work/life-balance/</link>
      <pubDate>Tue, 02 Jan 2024 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2024/github-streaks-and-work/life-balance/</guid>
      <description>&lt;p&gt;I recently read &lt;a href=&#34;https://blog.cassidoo.co/post/the-streak/&#34;&gt;Loving and hating the Streak by Cassidy Williams&lt;/a&gt;. The post was all about committing code on GitHub every single day to maintain a streak.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Accelerating fuzzy document deduplication to improve LLM training with RAPIDS and Dask</title>
      <link>https://jacobtomlinson.dev/talks/2023-12-08-accelerating-fuzzy-document-deduplication-to-improve-llm-training-with-rapids-and-dask/</link>
      <pubDate>Fri, 08 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2023-12-08-accelerating-fuzzy-document-deduplication-to-improve-llm-training-with-rapids-and-dask/</guid>
      <description>&lt;p&gt;Training Large Language Models (LLMs) requires a vast amount of input data, and the higher the quality of that data the better the model will be at producing useful natural language. NVIDIA NeMo Data Curator is a toolkit built with RAPIDS and Dask for extracting, cleaning, filtering and deduplicating training data for LLMs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>When to rebuild things that already exist</title>
      <link>https://jacobtomlinson.dev/talks/2023-09-24-pycon-uk-when-to-rebuild-things-that-already-exist/</link>
      <pubDate>Sun, 24 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2023-09-24-pycon-uk-when-to-rebuild-things-that-already-exist/</guid>
      <description>&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; allowfullscreen=&#34;allowfullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/f6VtdBLAKn4?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This year I built a library that already exists. The existing solutions didn’t quite meet my needs, I wanted something that ticked all of my boxes. When thinking about building something new people referred me to xkcd #927. But I did it anyway.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Scaling the PyData Ecosystem with Dask</title>
      <link>https://jacobtomlinson.dev/talks/2023-09-23-pycon-uk-scaling-the-pydata-ecosystem-with-dask/</link>
      <pubDate>Sat, 23 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2023-09-23-pycon-uk-scaling-the-pydata-ecosystem-with-dask/</guid>
      <description>&lt;p&gt;Dask is a flexible library for parallel computing in Python. Dask provides high-level interfaces to extend the PyData ecosystem to larger-than-memory or distributed environments, as well as lower-level interfaces to customise workflows. No previous experience is required, though knowledge of Python, NumPy and pandas is preferred.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Comparison of kr8s vs other Python libraries for Kubernetes</title>
      <link>https://jacobtomlinson.dev/posts/2023/comparison-of-kr8s-vs-other-python-libraries-for-kubernetes/</link>
      <pubDate>Mon, 04 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2023/comparison-of-kr8s-vs-other-python-libraries-for-kubernetes/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been &lt;a href=&#34;https://jacobtomlinson.dev/posts/2023/introducing-kr8s-a-new-kubernetes-client-library-for-python-inspired-by-kubectl/&#34;&gt;working on &lt;code&gt;kr8s&lt;/code&gt;&lt;/a&gt; for a while now and one of my core goals is to build a Python library for Kubernetes that is the most simple, readable and produces the most maintainable code. It should enable folks to &lt;a href=&#34;https://matthewrocklin.com/blog/work/2018/01/27/write-dumb-code&#34;&gt;write dumb code&lt;/a&gt; when working with Kubernetes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The challenge of updating an aging blog</title>
      <link>https://jacobtomlinson.dev/posts/2023/the-challenge-of-updating-an-aging-blog/</link>
      <pubDate>Wed, 23 Aug 2023 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2023/the-challenge-of-updating-an-aging-blog/</guid>
      <description>&lt;p&gt;The Dask blog is a bit neglected these days. The website is an aging Jekyll blog and is well past it&amp;rsquo;s prime. Bringing it into current decade has been on my backlog for a while and today I decided to dedicate some time getting it up to date.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deploying multi-GPU workloads on Kubernetes in Python</title>
      <link>https://jacobtomlinson.dev/talks/2023-08-17-euroscipy-multi-gpu-workloads-kubernetes-python/</link>
      <pubDate>Thu, 17 Aug 2023 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2023-08-17-euroscipy-multi-gpu-workloads-kubernetes-python/</guid>
      <description>&lt;p&gt;By using Dask to scale out RAPIDS workloads on Kubernetes you can accelerate your workloads across many GPUs on many machines. In this talk, we will discuss how to install and configure Dask on your Kubernetes cluster and use it to run accelerated GPU workloads on your cluster.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How I fixed my UniFi Devices intermittently showing as offline</title>
      <link>https://jacobtomlinson.dev/posts/2023/how-i-fixed-my-unifi-devices-intermittently-showing-as-offline/</link>
      <pubDate>Thu, 03 Aug 2023 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2023/how-i-fixed-my-unifi-devices-intermittently-showing-as-offline/</guid>
      <description>&lt;p&gt;Since upgrading to a &lt;a href=&#34;https://eu.store.ui.com/eu/en/products/udm-pro&#34;&gt;UniFi Dream Machine (UDM) Pro&lt;/a&gt; I&amp;rsquo;ve had a problem with some of my UniFi devices showing as offline. &lt;strong&gt;TLDR It turned out that I accidentally had two controllers on my network and the devices were hopping back and forth between them.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Livestream notes: Replacing aiohttp with httpx in kr8s</title>
      <link>https://jacobtomlinson.dev/posts/2023/livestream-notes-replacing-aiohttp-with-httpx-in-kr8s/</link>
      <pubDate>Tue, 04 Jul 2023 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2023/livestream-notes-replacing-aiohttp-with-httpx-in-kr8s/</guid>
      <description>&lt;div class=&#34;alert alert-info&#34;&gt;This post will be updated with notes from the livestream throughout the day.&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Today I will be streaming some open source code refactoring. &lt;a href=&#34;https://www.twitch.tv/constrainedcoding&#34;&gt;Come and join in on Twitch!&lt;/a&gt;. Don&amp;rsquo;t forget to say hi in the chat 😊.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introducing kr8s, a new Kubernetes client library for Python inspired by kubectl</title>
      <link>https://jacobtomlinson.dev/posts/2023/introducing-kr8s-a-new-kubernetes-client-library-for-python-inspired-by-kubectl/</link>
      <pubDate>Mon, 19 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2023/introducing-kr8s-a-new-kubernetes-client-library-for-python-inspired-by-kubectl/</guid>
      <description>&lt;p&gt;For the last few months I&amp;rsquo;ve been tinkering with a new Kubernetes client library for Python called &lt;a href=&#34;https://github.com/kr8s-org/kr8s&#34;&gt;kr8s&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Avoid indirection in tests at all costs</title>
      <link>https://jacobtomlinson.dev/posts/2023/avoid-indirection-in-tests-at-all-costs/</link>
      <pubDate>Thu, 25 May 2023 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2023/avoid-indirection-in-tests-at-all-costs/</guid>
      <description>&lt;p&gt;When writing tests the balance between avoiding indirection and DRY-ness should be much more weighted towards avoiding indirection than in the code it is testing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mini demos</title>
      <link>https://jacobtomlinson.dev/posts/2023/mini-demos/</link>
      <pubDate>Wed, 17 May 2023 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2023/mini-demos/</guid>
      <description>&lt;p&gt;As software engineers we should all be able to communicate the things we have built to others, but giving a formal demo of something you&amp;rsquo;ve been working on can be daunting. Mini demos are a great way to build muscles around giving ad-hoc demos with little to no preparation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Debugging Data Science workflows at scale</title>
      <link>https://jacobtomlinson.dev/posts/2023/debugging-data-science-workflows-at-scale/</link>
      <pubDate>Fri, 12 May 2023 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2023/debugging-data-science-workflows-at-scale/</guid>
      <description>&lt;p&gt;The more we scale up our workloads the more we run into bugs that only appear at scale. Reproducing these bugs can be expensive, time consuming and error prone. In order to report a bug on a GitHub repo you generally need to isolate the bug and come up with a minimal reproducer so that the maintainer can investigate. But what if a minimal reproducer requires hundreds of servers to isolate and replicate?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dask on Kubernetes Overview</title>
      <link>https://jacobtomlinson.dev/talks/2023-03-16-k8s-batch-sig-dask-on-kubernetes/</link>
      <pubDate>Thu, 16 Mar 2023 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2023-03-16-k8s-batch-sig-dask-on-kubernetes/</guid>
      <description>&lt;p&gt;I was invited to join the &lt;a href=&#34;https://github.com/kubernetes/community/blob/master/wg-batch/README.md&#34;&gt;Kubernetes Batch Working Group (k8s-batch-sig)&lt;/a&gt; to give an overview of how &lt;a href=&#34;https://www.dask.org/&#34;&gt;Dask&lt;/a&gt; runs on Kubernetes, especially for batch style workloads with &lt;a href=&#34;https://kubernetes.dask.org/en/latest/operator_resources.html#daskjob&#34;&gt;&lt;code&gt;DaskJob&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Running Jupyter in your Dask Kubernetes cluster</title>
      <link>https://jacobtomlinson.dev/posts/2023/running-jupyter-in-your-dask-kubernetes-cluster/</link>
      <pubDate>Fri, 10 Mar 2023 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2023/running-jupyter-in-your-dask-kubernetes-cluster/</guid>
      <description>&lt;p&gt;Did you know that the &lt;a href=&#34;https://docs.dask.org/en/stable/deploying-cli.html#dask-scheduler&#34;&gt;Dask scheduler&lt;/a&gt; has a &lt;code&gt;--jupyter&lt;/code&gt; flag that will start a Jupyter server running within the Dask Dashboard?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Being intentional with container terminology</title>
      <link>https://jacobtomlinson.dev/posts/2023/being-intentional-with-container-terminology/</link>
      <pubDate>Thu, 09 Feb 2023 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2023/being-intentional-with-container-terminology/</guid>
      <description>&lt;p&gt;When writing and speaking about linux container technologies I&amp;rsquo;m trying to be more intentional with the words I use, which means often avoiding the word &lt;em&gt;docker&lt;/em&gt;. My goal is to communicate clearly to both experts and novices alike.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Oversubscribing GPUs in Kubernetes</title>
      <link>https://jacobtomlinson.dev/posts/2023/oversubscribing-gpus-in-kubernetes/</link>
      <pubDate>Tue, 07 Feb 2023 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2023/oversubscribing-gpus-in-kubernetes/</guid>
      <description>&lt;p&gt;Sometimes I want to oversubscribe the GPUs in my Kubernetes cluster. This is especially useful when I&amp;rsquo;m developing but could also be useful in light workloads where you have ample GPU memory and don&amp;rsquo;t mind the occasional failure.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deploying multi-GPU workloads on Kubernetes in Python</title>
      <link>https://jacobtomlinson.dev/talks/2023-02-02-pydatadc-multi-gpu-workloads-kubernetes-python/</link>
      <pubDate>Thu, 02 Feb 2023 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2023-02-02-pydatadc-multi-gpu-workloads-kubernetes-python/</guid>
      <description>&lt;p&gt;The RAPIDS suite of open source software libraries gives you the freedom to execute end-to-end data science and analytics pipelines entirely on GPUs with minimal code changes and no new tools to learn.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quick and dirty way to pre-pull container images on Kubernetes</title>
      <link>https://jacobtomlinson.dev/posts/2023/quick-and-dirty-way-to-pre-pull-container-images-on-kubernetes/</link>
      <pubDate>Thu, 02 Feb 2023 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2023/quick-and-dirty-way-to-pre-pull-container-images-on-kubernetes/</guid>
      <description>&lt;p&gt;Sometimes when I give live demos with Kubernetes clusters I want to make sure that the container images I&amp;rsquo;m going to use are already pulled onto all of the nodes in my cluster. The last thing I want is for a &lt;code&gt;Pod&lt;/code&gt; to be created to then sit in a &lt;code&gt;Pending&lt;/code&gt; state while an image is pulled, especially given how large containers can be in the Data Science space.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Debugging Sphinx extensions in VSCode</title>
      <link>https://jacobtomlinson.dev/posts/2023/debugging-sphinx-extensions-in-vscode/</link>
      <pubDate>Tue, 24 Jan 2023 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2023/debugging-sphinx-extensions-in-vscode/</guid>
      <description>&lt;p&gt;This week I&amp;rsquo;ve been working on some custom &lt;a href=&#34;https://www.sphinx-doc.org/en/master/&#34;&gt;Sphinx&lt;/a&gt; extensions for a documentation site.&lt;/p&gt;&#xA;&lt;p&gt;Sphinx is a pretty complex tool with a broad ecosystem so documentation tends to be spread across the upstream project, dependencies like &lt;a href=&#34;https://docutils.sourceforge.io/&#34;&gt;docutils&lt;/a&gt; and popular extensions like &lt;a href=&#34;https://www.sphinx-doc.org/en/master/usage/markdown.html#markdown&#34;&gt;MyST&lt;/a&gt;. Therefore figuring out what is going on can be challenging, so I almost always resort to digging through state in a debugger and doing code spelunking on GitHub.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sometimes I regret using CalVer</title>
      <link>https://jacobtomlinson.dev/posts/2023/sometimes-i-regret-using-calver/</link>
      <pubDate>Mon, 16 Jan 2023 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2023/sometimes-i-regret-using-calver/</guid>
      <description>&lt;p&gt;Over the last few years, many open-source Python projects that I work on have switched to &lt;a href=&#34;https://calver.org/&#34;&gt;CalVer&lt;/a&gt;. I&amp;rsquo;ve felt some pain around this, particularly in &lt;a href=&#34;https://dask.org/&#34;&gt;Dask&lt;/a&gt; and its subprojects. I want to unpack some of my thoughts and feelings around this trend.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Issue 6: Documentation and diagrams</title>
      <link>https://jacobtomlinson.dev/newsletter/2022-10-28-docs-and-diagrams/</link>
      <pubDate>Fri, 28 Oct 2022 16:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/newsletter/2022-10-28-docs-and-diagrams/</guid>
      <description>&lt;h2 id=&#34;1-json-patch&#34;&gt;1. JSON Patch&lt;/h2&gt;&#xA;&lt;p&gt;If you want to install the &lt;a href=&#34;https://kubernetes.dask.org/en/latest/operator.html&#34;&gt;Dask Operator&lt;/a&gt; on a &lt;a href=&#34;https://www.kubeflow.org/&#34;&gt;Kubeflow&lt;/a&gt; cluster you need to patch the &lt;code&gt;kubeflow-kubernetes-edit&lt;/code&gt; cluster role to give users permission to create Dask custom resources.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dask Kuberenetes Operator Demo</title>
      <link>https://jacobtomlinson.dev/talks/2022-10-27-dask-demo-kubernetes-operator/</link>
      <pubDate>Thu, 27 Oct 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2022-10-27-dask-demo-kubernetes-operator/</guid>
      <description></description>
    </item>
    <item>
      <title>Issue 5: Collaborating in Germany</title>
      <link>https://jacobtomlinson.dev/newsletter/2022-10-14-offsite-in-germany/</link>
      <pubDate>Fri, 14 Oct 2022 16:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/newsletter/2022-10-14-offsite-in-germany/</guid>
      <description>&lt;h2 id=&#34;1-offsites&#34;&gt;1. Offsites&lt;/h2&gt;&#xA;&lt;p&gt;This week I joined some colleagues from &lt;a href=&#34;https://www.coiled.io/&#34;&gt;Coiled&lt;/a&gt; at their team offsite in Germany to talk about &lt;a href=&#34;https://distributed.dask.org/en/stable/&#34;&gt;Dask Distributed&lt;/a&gt; maintenance.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Issue 4: Last minute talk rewrites</title>
      <link>https://jacobtomlinson.dev/newsletter/2022-09-30-last-minute-talk-rewrites/</link>
      <pubDate>Fri, 30 Sep 2022 16:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/newsletter/2022-09-30-last-minute-talk-rewrites/</guid>
      <description>&lt;h2 id=&#34;1-dask-overview-for-stanford-distributed-computing-group&#34;&gt;1. Dask overview for Stanford distributed computing group&lt;/h2&gt;&#xA;&lt;p&gt;This week I gave &lt;a href=&#34;https://jacobtomlinson.dev/talks/2022-09-29-stanford-legion-dask-overview/&#34;&gt;a presentation to folks at Stanford on Dask&lt;/a&gt;. I mistakenly thought that my target audience would be students who were studying distributed computing and so I pulled together some Dask tutorial material and prepared to give a 101 level introduction to distributed computing in Python.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dask overview</title>
      <link>https://jacobtomlinson.dev/talks/2022-09-29-stanford-legion-dask-overview/</link>
      <pubDate>Thu, 29 Sep 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2022-09-29-stanford-legion-dask-overview/</guid>
      <description></description>
    </item>
    <item>
      <title>Issue 3: How much CI is too much CI?</title>
      <link>https://jacobtomlinson.dev/newsletter/2022-09-23-how-much-ci-is-too-much-ci/</link>
      <pubDate>Fri, 23 Sep 2022 16:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/newsletter/2022-09-23-how-much-ci-is-too-much-ci/</guid>
      <description>&lt;p&gt;Last week I was on holiday, so I skipped a week of newsletter, and this one is a little light.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Narrative driven development</title>
      <link>https://jacobtomlinson.dev/posts/2022/narrative-driven-development/</link>
      <pubDate>Mon, 12 Sep 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2022/narrative-driven-development/</guid>
      <description>&lt;p&gt;In July I published a blog post on &lt;a href=&#34;https://jacobtomlinson.dev/posts/2022/using-dask-on-kubeflow-with-the-dask-kubernetes-operator/&#34;&gt;using Dask on KubeFlow with the Dask Kubernetes Operator&lt;/a&gt;. I originally outlined that post in January before the Dask Operator even existed as part of my planning for that work.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Issue 2: Kubeflow, Dracula and more</title>
      <link>https://jacobtomlinson.dev/newsletter/2022-09-09-kubeflow-and-kubernetes/</link>
      <pubDate>Fri, 09 Sep 2022 16:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/newsletter/2022-09-09-kubeflow-and-kubernetes/</guid>
      <description>&lt;h2 id=&#34;1-blog-accelerating-etl-on-kubeflow-with-rapids&#34;&gt;1. Blog: Accelerating ETL on KubeFlow with RAPIDS&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://developer.nvidia.com/blog/accelerating-etl-on-kubeflow-with-rapids/&#34;&gt;&#xA;&lt;img src=&#34;accelerating-etl.png&#34; alt=&#34;Screenshot of JupyterLab with the Dask Lab extension open on the left and various Dask plots arranged on the screen&#34;&gt;&#xA;&#xA;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Issue 1: Five things each week</title>
      <link>https://jacobtomlinson.dev/newsletter/2022-09-02-five-things-each-week/</link>
      <pubDate>Fri, 02 Sep 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/newsletter/2022-09-02-five-things-each-week/</guid>
      <description>&lt;p&gt;Thank you for reading my very first newsletter! Everyone and their dog seems to have a newsletter these days, so I thought why not me.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Accelerating ETL on KubeFlow with RAPIDS</title>
      <link>https://jacobtomlinson.dev/posts/2022/accelerating-etl-on-kubeflow-with-rapids/</link>
      <pubDate>Tue, 30 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2022/accelerating-etl-on-kubeflow-with-rapids/</guid>
      <description>&lt;p&gt;In the &lt;a href=&#34;https://www.nvidia.com/en-us/deep-learning-ai/solutions/machine-learning/&#34;&gt;machine learning&lt;/a&gt; and MLOps world, GPUs are widely used to speed up model training and inference, but what about the other stages of the workflow like ETL pipelines or hyperparameter optimization?&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to check your NVIDIA driver and CUDA version in Kubernetes</title>
      <link>https://jacobtomlinson.dev/posts/2022/how-to-check-your-nvidia-driver-and-cuda-version-in-kubernetes/</link>
      <pubDate>Fri, 12 Aug 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2022/how-to-check-your-nvidia-driver-and-cuda-version-in-kubernetes/</guid>
      <description>&lt;p&gt;When using GPUs with Kubernetes it can be important to know which driver and CUDA versions are installed on the nodes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Dask on KubeFlow with the Dask Kubernetes Operator</title>
      <link>https://jacobtomlinson.dev/posts/2022/using-dask-on-kubeflow-with-the-dask-kubernetes-operator/</link>
      <pubDate>Wed, 27 Jul 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2022/using-dask-on-kubeflow-with-the-dask-kubernetes-operator/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://www.kubeflow.org/&#34;&gt;Kubeflow&lt;/a&gt; is a popular Machine Learning and &lt;a href=&#34;https://en.wikipedia.org/wiki/MLOps&#34;&gt;MLOps&lt;/a&gt; platform built on &lt;a href=&#34;https://kubernetes.io/&#34;&gt;Kubernetes&lt;/a&gt; for designing and running Machine Learning pipelines for training models and providing inference services. It has a notebook service that lets you launch interactive &lt;a href=&#34;https://jupyter.org/&#34;&gt;Jupyter&lt;/a&gt; servers (and more) on your Kubernetes cluster as well as a &lt;a href=&#34;https://www.kubeflow.org/docs/components/pipelines/introduction/&#34;&gt;pipeline service&lt;/a&gt; with a DSL library written in Python for designing and building repeatable workflows. It also has tools for hyperparameter tuning and running model inference servers, everything you need to build a robust ML service.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Don&#39;t prematurely squash/rebase and force push your PRs</title>
      <link>https://jacobtomlinson.dev/posts/2022/dont-prematurely-squash/rebase-and-force-push-your-prs/</link>
      <pubDate>Tue, 26 Jul 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2022/dont-prematurely-squash/rebase-and-force-push-your-prs/</guid>
      <description>&lt;p&gt;A big frustration for me when reviewing Pull Requests on GitHub is coming back to a PR you&amp;rsquo;ve already reviewed to check on recent changes and be greeted with &amp;ldquo;We went looking everywhere, but couldn’t find those commits&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Introducing Container Canary</title>
      <link>https://jacobtomlinson.dev/talks/2022-07-14-scipy-lightning-container-canary/</link>
      <pubDate>Thu, 14 Jul 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2022-07-14-scipy-lightning-container-canary/</guid>
      <description></description>
    </item>
    <item>
      <title>Commenting on Pull Requests with GitHub Actions</title>
      <link>https://jacobtomlinson.dev/posts/2022/commenting-on-pull-requests-with-github-actions/</link>
      <pubDate>Tue, 12 Jul 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2022/commenting-on-pull-requests-with-github-actions/</guid>
      <description>&lt;p&gt;When someone opens a Pull Request (PR) on your GitHub project it can be helpful for a bot to comment on the PR. You might want to thank the user for the contribution, provide some useful information such as &lt;a href=&#34;https://github.com/dask/dask-tutorial/pull/260#issuecomment-1181821332&#34;&gt;giving a binder link where folks can try out the PR&lt;/a&gt;, or providing more verbose output from some tests or other checks.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GPU development with Python 101</title>
      <link>https://jacobtomlinson.dev/talks/2022-07-12-scipy-gpu-tutorial/</link>
      <pubDate>Tue, 12 Jul 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2022-07-12-scipy-gpu-tutorial/</guid>
      <description></description>
    </item>
    <item>
      <title>Dask Tutorial: Scaling the PyData Ecosystem</title>
      <link>https://jacobtomlinson.dev/talks/2022-07-11-scipy-dask-tutorial/</link>
      <pubDate>Mon, 11 Jul 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2022-07-11-scipy-dask-tutorial/</guid>
      <description></description>
    </item>
    <item>
      <title>The secret to making code contributions that stand the test of time</title>
      <link>https://jacobtomlinson.dev/posts/2022/the-secret-to-making-code-contributions-that-stand-the-test-of-time/</link>
      <pubDate>Tue, 05 Jul 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2022/the-secret-to-making-code-contributions-that-stand-the-test-of-time/</guid>
      <description>&lt;p&gt;When you contribute code to collaborative projects, whether they are open source community projects or large internal projects inside organisations, the feeling of having your code running inside a large application can be very rewarding.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Parallelizing Your ETL with Dask on KubeFlow</title>
      <link>https://jacobtomlinson.dev/talks/2022-06-29-geekle-data-science-summit-dask-on-kubeflow/</link>
      <pubDate>Wed, 29 Jun 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2022-06-29-geekle-data-science-summit-dask-on-kubeflow/</guid>
      <description>&lt;p&gt;Kubeflow is a popular MLOps platform built on Kubernetes for designing and running Machine Learning pipelines for training models and providing inference services. Kubeflow has a notebook service that lets you launch interactive Jupyter servers (and more) on your Kubernetes cluster. Kubeflow also has a pipelines service with a DSL library written in Python for designing and building repeatable workflows that can be executed on your cluster, either ad-hoc or on a schedule. It also has tools for hyperparameter tuning and running model inference servers, everything you need to build a robust ML service.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GPU programming with Python</title>
      <link>https://jacobtomlinson.dev/talks/2022-06-28-cern-accelerator-python-gpu-python.md/</link>
      <pubDate>Tue, 28 Jun 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2022-06-28-cern-accelerator-python-gpu-python.md/</guid>
      <description>&lt;p&gt;Writing GPU code in Python is easier today than ever!&lt;/p&gt;&#xA;&lt;p&gt;I joined NVIDIA in 2019 and I was brand new to GPU development. In that time, I’ve gotten to grips with the fundamentals of writing accelerated code in Python. I was amazed to discover that I didn’t need to learn C++ and I didn’t need new development tools. Writing GPU code in Python is easier today than ever, and in this tutorial, I will share what I’ve learned and how you can get started with accelerating your code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GPU Development with Python 101</title>
      <link>https://jacobtomlinson.dev/talks/2022-06-15-odsc-gpu-python-101-tutorial.md/</link>
      <pubDate>Wed, 15 Jun 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2022-06-15-odsc-gpu-python-101-tutorial.md/</guid>
      <description>&lt;p&gt;Writing GPU code in Python is easier today than ever!&lt;/p&gt;&#xA;&lt;p&gt;I joined NVIDIA in 2019 and I was brand new to GPU development. In that time, Ive gotten to grips with the fundamentals of writing accelerated code in Python. I was amazed to discover that I didnt need to learn C++ and I didnt need new development tools. Writing GPU code in Python is easier today than ever, and in this tutorial, I will share what Ive learned and how you can get started with accelerating your code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Parallelizing Your ETL with Dask on KubeFlow</title>
      <link>https://jacobtomlinson.dev/talks/2022-06-08-mlops-world-toronto-dask-on-kubeflow/</link>
      <pubDate>Wed, 08 Jun 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2022-06-08-mlops-world-toronto-dask-on-kubeflow/</guid>
      <description>&lt;p&gt;Kubeflow is a popular MLOps platform built on Kubernetes for designing and running Machine Learning pipelines for training models and providing inference services. Kubeflow has a notebook service that lets you launch interactive Jupyter servers (and more) on your Kubernetes cluster. Kubeflow also has a pipelines service with a DSL library written in Python for designing and building repeatable workflows that can be executed on your cluster, either ad-hoc or on a schedule. It also has tools for hyperparameter tuning and running model inference servers, everything you need to build a robust ML service.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GPU accelerating your computation in Python</title>
      <link>https://jacobtomlinson.dev/talks/2022-05-25-egu22-distributing-your-array-gpu-computation/</link>
      <pubDate>Wed, 25 May 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2022-05-25-egu22-distributing-your-array-gpu-computation/</guid>
      <description>&lt;h2 id=&#34;talk-abstract&#34;&gt;Talk abstract&lt;/h2&gt;&#xA;&lt;p&gt;There are many powerful libraries in the Python ecosystem for accelerating the computation of large arrays with GPUs. We have CuPy for GPU array computation, Dask for distributed computation, cuML for machine learning, Pytorch for deep learning and more. We will dig into how these libraries can be used together to accelerate geoscience workflows and how we are working with projects like Xarray to integrate these libraries with domain-specific tooling. Sgkit is already providing this for the field of genetics and we are excited to be working with community groups like Pangeo to bring this kind of tooling to the geosciences.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to set environment variables on your Dask workers</title>
      <link>https://jacobtomlinson.dev/posts/2022/how-to-set-environment-variables-on-your-dask-workers/</link>
      <pubDate>Thu, 05 May 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2022/how-to-set-environment-variables-on-your-dask-workers/</guid>
      <description>&lt;p&gt;When working with Dask clusters you often need the remote worker environment to match you local environment. This generally means having the same packages and data available.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Golang block until interrupt with ctrl&#43;c</title>
      <link>https://jacobtomlinson.dev/posts/2022/golang-block-until-interrupt-with-ctrl-c/</link>
      <pubDate>Mon, 21 Mar 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2022/golang-block-until-interrupt-with-ctrl-c/</guid>
      <description>&lt;p&gt;Today I found myself needing a Go application&amp;rsquo;s main thread to stop and wait until the user wants it to exit with a &lt;code&gt;ctrl+c&lt;/code&gt; keyboard interrupt.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Goodbye Docker Desktop for Mac, Hello Colima</title>
      <link>https://jacobtomlinson.dev/posts/2022/goodbye-docker-desktop-for-mac-hello-colima/</link>
      <pubDate>Mon, 31 Jan 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2022/goodbye-docker-desktop-for-mac-hello-colima/</guid>
      <description>&lt;p&gt;Today is the deadline for the &lt;a href=&#34;https://www.docker.com/blog/updating-product-subscriptions/&#34;&gt;license changes to Docker Desktop for Mac and Windows&lt;/a&gt;. This means that if you are employed at a company with more than 250 employees or your company makes more than $10m you need to start paying a subscription to continue using Docker Desktop.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker Desktop for Mac alternatives for developers</title>
      <link>https://jacobtomlinson.dev/posts/2022/docker-desktop-for-mac-alternatives-for-developers/</link>
      <pubDate>Fri, 28 Jan 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2022/docker-desktop-for-mac-alternatives-for-developers/</guid>
      <description>&lt;p&gt;In a couple of days &lt;a href=&#34;https://www.docker.com/blog/updating-product-subscriptions/&#34;&gt;Docker will begin charging employees of companies with &amp;gt;250 employees to use Docker Desktop&lt;/a&gt;. I have no problem with paying for software that brings me value, but you wouldn&amp;rsquo;t believe how complex it can be for large companies to sign employees up to subscription services. Paperwork everywhere! To avoid this I&amp;rsquo;m evaluating alternatives for Docker Desktop to use on my MacBook.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Running Kubeflow inside Kind with GPU support</title>
      <link>https://jacobtomlinson.dev/posts/2022/running-kubeflow-inside-kind-with-gpu-support/</link>
      <pubDate>Thu, 27 Jan 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2022/running-kubeflow-inside-kind-with-gpu-support/</guid>
      <description>&lt;p&gt;This week I&amp;rsquo;ve been playing around with &lt;a href=&#34;https://www.kubeflow.org/&#34;&gt;Kubeflow&lt;/a&gt; as part of a larger effort to make it simpler to use &lt;a href=&#34;https://dask.org/&#34;&gt;Dask&lt;/a&gt; and &lt;a href=&#34;https://rapids.ai/&#34;&gt;RAPIDS&lt;/a&gt; in &lt;a href=&#34;https://en.wikipedia.org/wiki/MLOps&#34;&gt;MLOps workflows&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quick hack: Adding GPU support to kind</title>
      <link>https://jacobtomlinson.dev/posts/2022/quick-hack-adding-gpu-support-to-kind/</link>
      <pubDate>Tue, 25 Jan 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2022/quick-hack-adding-gpu-support-to-kind/</guid>
      <description>&lt;div class=&#34;alert alert-danger&#34;&gt;&lt;p&gt;This post has been superseded with &lt;a href=&#34;https://www.substratus.ai/blog/kind-with-gpus&#34;&gt;this tutorial&lt;/a&gt; that no longer requires any code changes. Please read that instead.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Don&#39;t be that open-source user, don&#39;t be me</title>
      <link>https://jacobtomlinson.dev/posts/2022/dont-be-that-open-source-user-dont-be-me/</link>
      <pubDate>Mon, 17 Jan 2022 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2022/dont-be-that-open-source-user-dont-be-me/</guid>
      <description>&lt;p&gt;Before I was a maintainer of open source software I was a user of open source software, and I sometimes behaved badly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GPU code in Python</title>
      <link>https://jacobtomlinson.dev/talks/2021-11-04-bristech-rapids-python-gpu/</link>
      <pubDate>Thu, 04 Nov 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2021-11-04-bristech-rapids-python-gpu/</guid>
      <description>&lt;p&gt;Writing GPU code in Python is easier today than ever!&lt;/p&gt;&#xA;&lt;p&gt;I joined NVIDIA in 2019 and I was brand new to GPU development. In that time, I’ve gotten to grips with the fundamentals of writing accelerated code in Python. I was amazed to discover that I didn’t need to learn C++ and I didn’t need new development tools. Writing GPU code in Python is easier today than ever, and in this tutorial, I will share what I’ve learned and how you can get started with accelerating your code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GPU development with Python 101</title>
      <link>https://jacobtomlinson.dev/talks/2021-10-28-pydata-global-gpu-development-in-python-101/</link>
      <pubDate>Thu, 28 Oct 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2021-10-28-pydata-global-gpu-development-in-python-101/</guid>
      <description>&lt;h2 id=&#34;summary&#34;&gt;Summary&lt;/h2&gt;&#xA;&lt;p&gt;Writing GPU code in Python is easier today than ever, and in this tutorial, I will share what I’ve learned and how you can get started with accelerating your code. You don&amp;rsquo;t need to learn C++ and you don&amp;rsquo;t need any special tooling. All you need is an NVIDIA GPU, Python and a few libraries (and we&amp;rsquo;ll provide that for the tutorial).&lt;/p&gt;</description>
    </item>
    <item>
      <title>GPU development with Python 101 (extended)</title>
      <link>https://jacobtomlinson.dev/talks/2021-07-26-europython-gpu-development-in-python-101/</link>
      <pubDate>Mon, 26 Jul 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2021-07-26-europython-gpu-development-in-python-101/</guid>
      <description>&lt;p&gt;Writing GPU code in Python is easier today than ever!&lt;/p&gt;&#xA;&lt;p&gt;I joined NVIDIA in 2019 and I was brand new to GPU development. In that time, I’ve gotten to grips with the fundamentals of writing accelerated code in Python. I was amazed to discover that I didn’t need to learn C++ and I didn’t need new development tools. Writing GPU code in Python is easier today than ever, and in this tutorial, I will share what I’ve learned and how you can get started with accelerating your code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What is RAPIDS?</title>
      <link>https://jacobtomlinson.dev/talks/2021-07-14-cybercolombia-hpc-summer-school-what-is-rapids/</link>
      <pubDate>Wed, 14 Jul 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2021-07-14-cybercolombia-hpc-summer-school-what-is-rapids/</guid>
      <description></description>
    </item>
    <item>
      <title>Branding your open source Python package</title>
      <link>https://jacobtomlinson.dev/posts/2021/branding-your-open-source-python-package/</link>
      <pubDate>Fri, 09 Jul 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2021/branding-your-open-source-python-package/</guid>
      <description>&lt;p&gt;Having a brand can help give your open source project some legitimacy, and you don&amp;rsquo;t need to be a designer to see these benefits.&#xA;However it is important to understand that you do not need to add branding to your project in order for it to be successful, and adding branding can even harm your project.&lt;/p&gt;</description>
    </item>
    <item>
      <title>What is the difference between Dask and RAPIDS?</title>
      <link>https://jacobtomlinson.dev/posts/2021/what-is-the-difference-between-dask-and-rapids/</link>
      <pubDate>Tue, 22 Jun 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2021/what-is-the-difference-between-dask-and-rapids/</guid>
      <description>&lt;p&gt;Both &lt;a href=&#34;https://dask.org/&#34;&gt;Dask&lt;/a&gt; and &lt;a href=&#34;https://rapids.ai/&#34;&gt;RAPIDS&lt;/a&gt; are Python libraries to scale your workflow and empower you to process more data and leverage more compute resources. Both use interfaces modeled after the PyData ecosystem, making them familiar to most data practitioners.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The evolution of a Dask Distributed user</title>
      <link>https://jacobtomlinson.dev/posts/2021/the-evolution-of-a-dask-distributed-user/</link>
      <pubDate>Tue, 01 Jun 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2021/the-evolution-of-a-dask-distributed-user/</guid>
      <description>&lt;p&gt;This week was the 2021 Dask Summit and &lt;a href=&#34;https://summit.dask.org/schedule/presentation/20/deploying-dask/&#34;&gt;one of the workshops&lt;/a&gt; that we ran covered many deployment options for Dask Distributed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Managing cluster lifecycle with dask-ctl </title>
      <link>https://jacobtomlinson.dev/talks/2021-05-20-dask-summit-lightning-talk-lifecycle-with-dask-ctl/</link>
      <pubDate>Thu, 20 May 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2021-05-20-dask-summit-lightning-talk-lifecycle-with-dask-ctl/</guid>
      <description></description>
    </item>
    <item>
      <title>Dask on Kubernetes</title>
      <link>https://jacobtomlinson.dev/talks/2021-05-19-dask-on-kubernetes/</link>
      <pubDate>Wed, 19 May 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2021-05-19-dask-on-kubernetes/</guid>
      <description>&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; allowfullscreen=&#34;allowfullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/faFncNrXmIY?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=1159&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;&lt;p&gt;At the Dask Summit I chaired a workshop called &lt;a href=&#34;https://summit.dask.org/schedule/presentation/20/deploying-dask/&#34;&gt;Deploying Dask&lt;/a&gt;. This workshop was comprised of multiple talks delivered by myself and others.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deploying Dask Distributed</title>
      <link>https://jacobtomlinson.dev/talks/2021-05-19-dask-summit-deploying-dask-ditributed/</link>
      <pubDate>Wed, 19 May 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2021-05-19-dask-summit-deploying-dask-ditributed/</guid>
      <description>&lt;p&gt;At the Dask Summit I chaired a workshop called &lt;a href=&#34;https://summit.dask.org/schedule/presentation/20/deploying-dask/&#34;&gt;Deploying Dask&lt;/a&gt;. This workshop was comprised of multiple talks delivered by myself and others.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a contributor community for your open source project</title>
      <link>https://jacobtomlinson.dev/posts/2021/building-a-contributor-community-for-your-open-source-project/</link>
      <pubDate>Fri, 30 Apr 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2021/building-a-contributor-community-for-your-open-source-project/</guid>
      <description>&lt;p&gt;With our open source project published on GitHub we probably want to allow folks to contribute changes. Some users of the project may find bugs, or desire extra features and will open issues to tell you. Users who have the skills required to make that change can open a Pull Request on GitHub to propose it. As the maintainer you can then review and merge those changes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Communicating with your open source community</title>
      <link>https://jacobtomlinson.dev/posts/2021/communicating-with-your-open-source-community/</link>
      <pubDate>Fri, 23 Apr 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2021/communicating-with-your-open-source-community/</guid>
      <description>&lt;p&gt;Once your open source Python project has users and a community you will likely want to communicate with them in an official capacity. Perhaps you want to tell them about a new release, show a use case where someone is using your tool or solicit feedback on an upcoming feature.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a user community for your open source project</title>
      <link>https://jacobtomlinson.dev/posts/2021/building-a-user-community-for-your-open-source-project/</link>
      <pubDate>Fri, 16 Apr 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2021/building-a-user-community-for-your-open-source-project/</guid>
      <description>&lt;p&gt;Now that our open source Python project exists and users can install it we will want to turn our attention to sustainability, reach and ongoing maintenance. By putting it out there and gaining users you are opening yourself up to questions, bug reports and feature requests.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Documenting Python projects with Sphinx and Read the Docs</title>
      <link>https://jacobtomlinson.dev/posts/2021/documenting-python-projects-with-sphinx-and-read-the-docs/</link>
      <pubDate>Fri, 09 Apr 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2021/documenting-python-projects-with-sphinx-and-read-the-docs/</guid>
      <description>&lt;p&gt;In &lt;a href=&#34;https://jacobtomlinson.dev/posts/2021/documenting-your-python-code/&#34;&gt;part four of this series&lt;/a&gt; we discussed documenting our code as we went along by adding docstrings throughout out project. In this post we will see that effort pay off by building a documentation site using &lt;a href=&#34;https://www.sphinx-doc.org/en/master/&#34;&gt;Sphinx&lt;/a&gt; which will leverage all of our existing docstrings.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Monitoring Dask &#43; RAPIDS with Prometheus &#43; Grafana</title>
      <link>https://jacobtomlinson.dev/posts/2021/monitoring-dask--rapids-with-prometheus--grafana/</link>
      <pubDate>Fri, 09 Apr 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2021/monitoring-dask--rapids-with-prometheus--grafana/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://prometheus.io&#34;&gt;Prometheus&lt;/a&gt; is a popular monitoring tool within the cloud community. It has out-of-the-box integration with popular platforms including &lt;a href=&#34;https://kubernetes.io/&#34;&gt;Kubernetes&lt;/a&gt;, &lt;a href=&#34;https://www.openstack.org/&#34;&gt;Open Stack&lt;/a&gt;, and the &lt;a href=&#34;https://prometheus.io/docs/prometheus/latest/configuration/configuration/&#34;&gt;major cloud vendors&lt;/a&gt;, and integrates with dashboarding tools like &lt;a href=&#34;https://grafana.com/&#34;&gt;Grafana&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Intro to distributed computing on GPUs with Dask in Python</title>
      <link>https://jacobtomlinson.dev/talks/2021-03-31-dask-and-rapids-blazing-webinar/</link>
      <pubDate>Wed, 31 Mar 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2021-03-31-dask-and-rapids-blazing-webinar/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://rapids.ai/&#34;&gt;RAPIDS&lt;/a&gt; is an end to end data science stack built entirely for CUDA GPUs. Faster analytics, at scale, for lower total cost of ownership. &lt;a href=&#34;https://dask.org/&#34;&gt;Dask&lt;/a&gt; natively scales Python and the RAPIDS ecosystem stack onto multiple servers and GPUs, supporting unprecedented scale. &lt;a href=&#34;https://blazingsql.com/&#34;&gt;BlazingSQL&lt;/a&gt; is a distributed SQL engine built in Python. It performs incredibly fast SQL queries on the RAPIDS DataFrame and ensures optimal usage of GPU primitives.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automating releases of Python packages with GitHub Actions</title>
      <link>https://jacobtomlinson.dev/posts/2021/automating-releases-of-python-packages-with-github-actions/</link>
      <pubDate>Fri, 26 Mar 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2021/automating-releases-of-python-packages-with-github-actions/</guid>
      <description>&lt;p&gt;In this post we will cover automatically packaging and releasing our project when a new git tag is pushed to GitHub.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Testing and Continuous Integration for Python packages with GitHub Actions</title>
      <link>https://jacobtomlinson.dev/posts/2021/testing-and-continuous-integration-for-python-packages-with-github-actions/</link>
      <pubDate>Fri, 19 Mar 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2021/testing-and-continuous-integration-for-python-packages-with-github-actions/</guid>
      <description>&lt;p&gt;In this post we will cover automatically running our tests when we push new code to GitHub, and when contributors raise Pull Requests against our project.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Awaitable Objects and Async Context Managers in Python</title>
      <link>https://jacobtomlinson.dev/posts/2021/awaitable-objects-and-async-context-managers-in-python/</link>
      <pubDate>Wed, 17 Mar 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2021/awaitable-objects-and-async-context-managers-in-python/</guid>
      <description>&lt;p&gt;Python objects are synchronous by default. When working with &lt;code&gt;asyncio&lt;/code&gt; if we create an object the &lt;code&gt;__init__&lt;/code&gt; is a regular function and we cannot do any async work in here.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Test driven development in Python</title>
      <link>https://jacobtomlinson.dev/posts/2021/test-driven-development-in-python/</link>
      <pubDate>Fri, 12 Mar 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2021/test-driven-development-in-python/</guid>
      <description>&lt;h1 id=&#34;what-is-test-driven-development-tdd&#34;&gt;What is test driven development (TDD)?&lt;/h1&gt;&#xA;&lt;p&gt;Test driven development is a style of development where you write your tests &lt;strong&gt;before&lt;/strong&gt; you write your code.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Testing your Python package</title>
      <link>https://jacobtomlinson.dev/posts/2021/testing-your-python-package/</link>
      <pubDate>Fri, 22 Jan 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2021/testing-your-python-package/</guid>
      <description>&lt;p&gt;In this post we will cover testing our code.&lt;/p&gt;&#xA;&lt;h1 id=&#34;testing&#34;&gt;Testing&lt;/h1&gt;&#xA;&lt;p&gt;There are many many great resources out there for learning about testing software. In this post I&amp;rsquo;m going to try and focus on simple examples that you can use to get started quickly. Once you have a good foundation for your tests you can then dive into &lt;a href=&#34;https://www.toptal.com/python/an-introduction-to-mocking-in-python&#34;&gt;mocking&lt;/a&gt;, &lt;a href=&#34;https://cassette.readthedocs.io/en/latest/&#34;&gt;replaying HTTP requests&lt;/a&gt; or even &lt;a href=&#34;https://hypothesis.readthedocs.io/en/latest/&#34;&gt;hypothesis testing&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>High Throughput Computing with Dask: Intro Tutorial</title>
      <link>https://jacobtomlinson.dev/talks/2021-01-21-high-throughput-computing-with-dask-tutorial/</link>
      <pubDate>Thu, 21 Jan 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2021-01-21-high-throughput-computing-with-dask-tutorial/</guid>
      <description>&lt;p&gt;High-throughput (task-based) computing is a flexible approach to parallelization. It involves splitting a problem into loosely-coupled tasks. A scheduler then orchestrates the parallel execution of those tasks, allowing programs to adaptively scale their resource usage. Individual tasks may themselves be parallelized using MPI or OpenMP, and the high-throughput approach can therefore enable new levels of scalability.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Documenting your Python code</title>
      <link>https://jacobtomlinson.dev/posts/2021/documenting-your-python-code/</link>
      <pubDate>Fri, 15 Jan 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2021/documenting-your-python-code/</guid>
      <description>&lt;p&gt;This post will cover documenting our code. Specifically adding documentation within the code itself.&lt;/p&gt;&#xA;&lt;h1 id=&#34;docstrings&#34;&gt;Docstrings&lt;/h1&gt;&#xA;&lt;p&gt;Right now our code is undocumented, so if the user inspects our function they will only see the interface (the way you call it) but with no other context. We can use &lt;a href=&#34;https://ipython.org/&#34;&gt;IPython&lt;/a&gt; to quickly inspect this.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to interactively debug GitHub Actions with netcat</title>
      <link>https://jacobtomlinson.dev/posts/2021/how-to-interactively-debug-github-actions-with-netcat/</link>
      <pubDate>Fri, 08 Jan 2021 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2021/how-to-interactively-debug-github-actions-with-netcat/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: This was a fun experiment and I recommend you check out the post for a fun read on setting up reverse shells. But I&amp;rsquo;ve since discovered &lt;a href=&#34;https://github.com/mxschmitt/action-tmate&#34;&gt;this awesome tmate action&lt;/a&gt; which lets you interactively debug in the browser or via SSH.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to check out the default git branch</title>
      <link>https://jacobtomlinson.dev/posts/2020/how-to-check-out-the-default-git-branch/</link>
      <pubDate>Wed, 09 Sep 2020 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2020/how-to-check-out-the-default-git-branch/</guid>
      <description>&lt;p&gt;Many open source projects are taking steps to update terminology to be more inclusive. The largest of these changes has been &lt;a href=&#34;https://github.com/github/renaming&#34;&gt;renaming the &amp;ldquo;trunk&amp;rdquo; branch of git repositories from &lt;code&gt;master&lt;/code&gt; to &lt;code&gt;main&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Intro to GPU Development in Python</title>
      <link>https://jacobtomlinson.dev/talks/2020-09-09-tech-exeter-intro-to-gpu-development-in-python/</link>
      <pubDate>Wed, 09 Sep 2020 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2020-09-09-tech-exeter-intro-to-gpu-development-in-python/</guid>
      <description>&lt;p&gt;Writing code for GPUs has come a long way over the last few years and it is now easier than ever to get started. You can even do it in Python! This talk will cover setting up your Python environment for GPU development. How coding for GPUs differs from CPUs, and the kind of problems GPUs excel at solving. We will dive into some real examples using Numba and also touch on a suite of Python Data Science tools called RAPIDS.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Leveraging the Hacktoberfest community</title>
      <link>https://jacobtomlinson.dev/posts/2020/leveraging-the-hacktoberfest-community/</link>
      <pubDate>Thu, 27 Aug 2020 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2020/leveraging-the-hacktoberfest-community/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://hacktoberfest.digitalocean.com/&#34;&gt;Hacktoberfest&lt;/a&gt; is approaching once again. In previous years I have both participated and contributed to open source, and also tried to leverage the community in the open source projects I maintain by curating and labeling issues.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Running Dask tutorials</title>
      <link>https://jacobtomlinson.dev/posts/2020/running-dask-tutorials/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2020/running-dask-tutorials/</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href=&#34;https://blog.dask.org/2020/08/21/running-tutorials&#34;&gt;Dask blog&lt;/a&gt; on August 21st, 2020.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;For the last couple of months we&amp;rsquo;ve been running community tutorials every three weeks or so. The response from the community has been great and we&amp;rsquo;ve had 50-100 people at each 90 minute session.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The current state of distributed Dask clusters</title>
      <link>https://jacobtomlinson.dev/posts/2020/the-current-state-of-distributed-dask-clusters/</link>
      <pubDate>Thu, 23 Jul 2020 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2020/the-current-state-of-distributed-dask-clusters/</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href=&#34;https://blog.dask.org/2020/07/23/current-state-of-distributed-dask-clusters&#34;&gt;Dask blog&lt;/a&gt; on July 23rd, 2020.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Dask enables you to build up a graph of the computation you want to perform and then executes it in parallel for you. This is great for making best use of your computer&amp;rsquo;s hardware. It is also great when you want to expand beyond the limits of a single machine.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dask Maintainers Update</title>
      <link>https://jacobtomlinson.dev/talks/2020-07-08-scipy-dask-maintainers-update/</link>
      <pubDate>Wed, 08 Jul 2020 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2020-07-08-scipy-dask-maintainers-update/</guid>
      <description></description>
    </item>
    <item>
      <title>How to use OBS Studio with Zoom, Hangouts, Teams and more on macOS</title>
      <link>https://jacobtomlinson.dev/posts/2020/how-to-use-obs-studio-with-zoom-hangouts-teams-and-more-on-macos/</link>
      <pubDate>Fri, 19 Jun 2020 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2020/how-to-use-obs-studio-with-zoom-hangouts-teams-and-more-on-macos/</guid>
      <description>&lt;p&gt;A popular tool with streamers and YouTubers is &lt;a href=&#34;https://obsproject.com/&#34;&gt;Open Broadcaster Software®️ Studio&lt;/a&gt; or OBS for short. It allows you to compose scenes with cameras, desktop sharing, video snippets, images, web pages and more and then stream that video to services like Twitch or Mixer. You can also save recordings locally if you want to upload them to YouTube.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Intro to Dask Tutorial</title>
      <link>https://jacobtomlinson.dev/talks/2020-06-19-dask-tutorial/</link>
      <pubDate>Fri, 19 Jun 2020 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2020-06-19-dask-tutorial/</guid>
      <description></description>
    </item>
    <item>
      <title>How to enable SSH on Binder</title>
      <link>https://jacobtomlinson.dev/posts/2020/how-to-enable-ssh-on-binder/</link>
      <pubDate>Wed, 17 Jun 2020 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2020/how-to-enable-ssh-on-binder/</guid>
      <description>&lt;p&gt;&lt;strong&gt;⚠️ This post is no longer valid.&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Running SSH on Binder has not been possible since late 2020. Due to abuse from botnets Binder will now kill sessions running &lt;code&gt;sshd&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Publishing open source Python packages on GitHub, PyPI and Conda Forge</title>
      <link>https://jacobtomlinson.dev/posts/2020/publishing-open-source-python-packages-on-github-pypi-and-conda-forge/</link>
      <pubDate>Fri, 28 Feb 2020 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2020/publishing-open-source-python-packages-on-github-pypi-and-conda-forge/</guid>
      <description>&lt;p&gt;In this post we will cover making our code available to people. This is the bit where we open the source! We will push our code to a code posting platform and then package up our library and submit it to a couple of repositories to make it easy for people to install.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Native Cloud Deployment with Dask-Cloudprovider</title>
      <link>https://jacobtomlinson.dev/talks/2020-02-27-dask-summit-native-cloud-deployment-with-dask-cloudprovider/</link>
      <pubDate>Thu, 27 Feb 2020 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2020-02-27-dask-summit-native-cloud-deployment-with-dask-cloudprovider/</guid>
      <description></description>
    </item>
    <item>
      <title>RAPIDS - Open GPU Data Science</title>
      <link>https://jacobtomlinson.dev/talks/2020-02-18-rapids-open-gpu-data-science/</link>
      <pubDate>Tue, 18 Feb 2020 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2020-02-18-rapids-open-gpu-data-science/</guid>
      <description>&lt;p&gt;The RAPIDS suite of open source software libraries (&lt;a href=&#34;https://rapids.ai/&#34;&gt;https://rapids.ai/&lt;/a&gt;) allow you to run data science and analytics pipelines entirely on GPUs, but following familiar Python APIs including Numpy, Pandas and SciKit Learn.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Versioning and formatting your Python code</title>
      <link>https://jacobtomlinson.dev/posts/2020/versioning-and-formatting-your-python-code/</link>
      <pubDate>Fri, 14 Feb 2020 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2020/versioning-and-formatting-your-python-code/</guid>
      <description>&lt;p&gt;In this post, we will cover a few project hygiene things that we may want to put into place to make our lives easier in the future.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Testing static sites with Lighthouse CI and GitHub Actions</title>
      <link>https://jacobtomlinson.dev/posts/2020/testing-static-sites-with-lighthouse-ci-and-github-actions/</link>
      <pubDate>Thu, 13 Feb 2020 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2020/testing-static-sites-with-lighthouse-ci-and-github-actions/</guid>
      <description>&lt;p&gt;When you build a website you want pages to load as quickly as possible for users. Google has a tool called &lt;a href=&#34;https://developers.google.com/speed/pagespeed/insights/&#34;&gt;PageSpeed Insights&lt;/a&gt; which you can run on your website to see various metrics about the page. I&amp;rsquo;ve used it in the past while working on my blog and other sites.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating an open source Python project from scratch</title>
      <link>https://jacobtomlinson.dev/posts/2020/creating-an-open-source-python-project-from-scratch/</link>
      <pubDate>Fri, 07 Feb 2020 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2020/creating-an-open-source-python-project-from-scratch/</guid>
      <description>&lt;p&gt;Have you had a great idea for an open-source Python library that you think people will find useful, but you don&amp;rsquo;t know where to begin in creating and publishing it?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Twenty Nineteen Roundup</title>
      <link>https://jacobtomlinson.dev/posts/2019/twenty-nineteen-roundup/</link>
      <pubDate>Tue, 31 Dec 2019 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2019/twenty-nineteen-roundup/</guid>
      <description>&lt;h3 id=&#34;introduction&#34;&gt;Introduction&lt;/h3&gt;&#xA;&lt;p&gt;It has been &lt;a href=&#34;https://www.jacobtomlinson.co.uk/posts/2015/twenty-fifteen-roundup/&#34;&gt;a few years&lt;/a&gt; since I published a list of technology and media I enjoyed this year, so here we go for 2019.&lt;/p&gt;</description>
    </item>
    <item>
      <title>5 Tips to help you ace your internship and entry-level job interviews</title>
      <link>https://jacobtomlinson.dev/posts/2019/5-tips-to-help-you-ace-your-internship-and-entry-level-job-interviews/</link>
      <pubDate>Mon, 16 Dec 2019 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2019/5-tips-to-help-you-ace-your-internship-and-entry-level-job-interviews/</guid>
      <description>&lt;p&gt;Applying for internships and entry-level positions can be tricky. Interviewers want to hear you talk about your experiences and things you&amp;rsquo;ve done that prove you&amp;rsquo;re a good fit for the job. However given that you are applying for an entry-level role you likely don&amp;rsquo;t have much real world experience in this space. It&amp;rsquo;s a chicken and egg situation that everyone faces when they are first starting out or wanting to make a shift to a new area.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating GitHub Actions in Python</title>
      <link>https://jacobtomlinson.dev/posts/2019/creating-github-actions-in-python/</link>
      <pubDate>Mon, 09 Dec 2019 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2019/creating-github-actions-in-python/</guid>
      <description>&lt;p&gt;&lt;em&gt;Note: This post is also &lt;a href=&#34;https://jacobtomlinson.dev/posts/2019/creating-github-actions-in-go/&#34;&gt;available in Go flavour&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/features/actions&#34;&gt;GitHub Actions&lt;/a&gt; provide a way to automate your software development workflows on GitHub. This includes traditional CI/CD tasks on all three major operating systems such as running test suites, building applications and publishing packages. But it also includes &lt;a href=&#34;https://github.com/actions/starter-workflows/blob/master/automation/greetings.yml&#34;&gt;automated greetings&lt;/a&gt; for new contributors, &lt;a href=&#34;https://github.com/actions/starter-workflows/blob/master/automation/label.yml&#34;&gt;labelling pull requests based on the files changed&lt;/a&gt;, or even &lt;a href=&#34;https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#onschedule&#34;&gt;creating cron jobs to perform scheduled tasks&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating GitHub Actions in Go</title>
      <link>https://jacobtomlinson.dev/posts/2019/creating-github-actions-in-go/</link>
      <pubDate>Thu, 05 Dec 2019 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2019/creating-github-actions-in-go/</guid>
      <description>&lt;p&gt;&lt;em&gt;Note: This post is also &lt;a href=&#34;https://jacobtomlinson.dev/posts/2019/creating-github-actions-in-python/&#34;&gt;available in Python flavour&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/features/actions&#34;&gt;GitHub Actions&lt;/a&gt; provide a way to automate your software development workflows on GitHub. This includes traditional CI/CD tasks on all three major operating systems such as running test suites, building applications and publishing packages. But it also includes &lt;a href=&#34;https://github.com/actions/starter-workflows/blob/master/automation/greetings.yml&#34;&gt;automated greetings&lt;/a&gt; for new contributors, &lt;a href=&#34;https://github.com/actions/starter-workflows/blob/master/automation/label.yml&#34;&gt;labelling pull requests based on the files changed&lt;/a&gt;, or even &lt;a href=&#34;https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#onschedule&#34;&gt;creating cron jobs to perform scheduled tasks&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to run Jupyter Lab at startup on macOS</title>
      <link>https://jacobtomlinson.dev/posts/2019/how-to-run-jupyter-lab-at-startup-on-macos/</link>
      <pubDate>Mon, 02 Dec 2019 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2019/how-to-run-jupyter-lab-at-startup-on-macos/</guid>
      <description>&lt;p&gt;In my day to day work I generally access a variety of &lt;a href=&#34;https://jupyter.org/&#34;&gt;Jupyter&lt;/a&gt; installations. Sometimes these are short lived installations in conda environments on my laptop, sometimes they are running on a remote server, and sometimes I use a managed service like &lt;a href=&#34;https://jupyter.org/hub&#34;&gt;JupyterHub&lt;/a&gt; or &lt;a href=&#34;https://mybinder.org/&#34;&gt;Binder&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to create a Helm chart repository with Chartpress, Travis CI, GitHub Pages and Jekyll</title>
      <link>https://jacobtomlinson.dev/posts/2019/how-to-create-a-helm-chart-repository-with-chartpress-travis-ci-github-pages-and-jekyll/</link>
      <pubDate>Mon, 28 Oct 2019 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2019/how-to-create-a-helm-chart-repository-with-chartpress-travis-ci-github-pages-and-jekyll/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://helm.sh&#34;&gt;Helm&lt;/a&gt; has become a pervasive tool in the &lt;a href=&#34;https://kubernetes.io/&#34;&gt;Kubernetes&lt;/a&gt; community for packaging, managing, upgrading and distributing applications. It uses a packaging format called &lt;a href=&#34;https://helm.sh/docs/developing_charts/#charts&#34;&gt;charts&lt;/a&gt; which are a collection of templates that describe Kubernetes resources and can be configured by the user.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to merge Kubernetes kubectl config files</title>
      <link>https://jacobtomlinson.dev/posts/2019/how-to-merge-kubernetes-kubectl-config-files/</link>
      <pubDate>Tue, 15 Oct 2019 00:00:00 +0100</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2019/how-to-merge-kubernetes-kubectl-config-files/</guid>
      <description>&lt;p&gt;Sometimes when working with a new Kubernetes cluster you will be given a config file to use when&#xA;authenticating with the cluster. This file should be placed at &lt;code&gt;~/.kube/config&lt;/code&gt;. However you may&#xA;already have an existing config file at that location and you need to merge them together.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The three types of fun</title>
      <link>https://jacobtomlinson.dev/posts/2019/the-three-types-of-fun/</link>
      <pubDate>Tue, 10 Sep 2019 00:00:00 +0100</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2019/the-three-types-of-fun/</guid>
      <description>&lt;p&gt;According to &lt;a href=&#34;http://goeast.ems.com/three-types-of-fun/&#34;&gt;folks who enjoy outdoor activities&lt;/a&gt; there are three types of fun. I&amp;rsquo;ve been using this scale for a while to categorize my own enjoyment of things and wanted to share my version.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why your profile picture is important</title>
      <link>https://jacobtomlinson.dev/posts/2019/why-your-profile-picture-is-important/</link>
      <pubDate>Tue, 27 Aug 2019 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2019/why-your-profile-picture-is-important/</guid>
      <description>&lt;p&gt;Choosing a good profile picture will make collaborating with others easier, especially if you haven&amp;rsquo;t met them yet. Here are some tips to help you pick a good one.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cleaning up conda environments</title>
      <link>https://jacobtomlinson.dev/posts/2019/cleaning-up-conda-environments/</link>
      <pubDate>Fri, 23 Aug 2019 00:00:00 +0100</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2019/cleaning-up-conda-environments/</guid>
      <description>&lt;p&gt;Often when I&amp;rsquo;m developing or debugging in Python I end up creating throw away conda environments. They will be to test some package installation or combination of packages and once I&amp;rsquo;ve finished I will probably never use them again.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setting up GPU Data Science Environments for Hackathons</title>
      <link>https://jacobtomlinson.dev/posts/2019/setting-up-gpu-data-science-environments-for-hackathons/</link>
      <pubDate>Tue, 13 Aug 2019 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2019/setting-up-gpu-data-science-environments-for-hackathons/</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href=&#34;https://medium.com/rapids-ai/setting-up-gpu-data-science-environments-for-hackathons-cdb52e7781a5&#34;&gt;RAPIDS AI blog&lt;/a&gt; on August 13th, 2019.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;background&#34;&gt;Background&lt;/h2&gt;&#xA;&lt;p&gt;In my first week working at NVIDIA, I have been spending some time with my previous colleagues at the &lt;a href=&#34;https://www.metoffice.gov.uk/&#34;&gt;Met Office&lt;/a&gt; to explore how the two organizations can collaborate.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A history of science on the cloud at the Met Office</title>
      <link>https://jacobtomlinson.dev/talks/2019-05-23-pangeo-history-of-science-on-the-cloud-at-the-met-office/</link>
      <pubDate>Thu, 23 May 2019 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2019-05-23-pangeo-history-of-science-on-the-cloud-at-the-met-office/</guid>
      <description>&lt;p&gt;The Informatics Lab is a technology, science and design research group at the Met Office. For the last four years we&amp;rsquo;ve been exploring, among other things, how we can do more science using the power of cloud computing. Using tools such as Jupyter, Dask and Kubernetes we&amp;rsquo;ve built a number of prototypes of cloud based scientific platforms starting with our JADE project through to current implementations of Pangeo. In this session we will cover how we evolved these systems, produced tools like dask-kubernetes and the Pangeo helm chart, helped build a community, and pushed our science and the Met Office forward.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Switching to Hugo</title>
      <link>https://jacobtomlinson.dev/posts/2019/switching-to-hugo/</link>
      <pubDate>Tue, 21 May 2019 14:21:28 +0100</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2019/switching-to-hugo/</guid>
      <description>&lt;p&gt;It has been nearly two years since I published a new blog post on this website. That doesn&amp;rsquo;t mean I haven&amp;rsquo;t been writing things. It&amp;rsquo;s just that much of my content has been posted on other platforms. I&amp;rsquo;ve decided recently to gather everything together and make this website the canonical source for the things I produce. This includes blog posts, talks, videos and more.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hypothetical datasets</title>
      <link>https://jacobtomlinson.dev/posts/2019/hypothetical-datasets/</link>
      <pubDate>Wed, 08 May 2019 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2019/hypothetical-datasets/</guid>
      <description>&lt;p&gt;&#xA;&lt;img src=&#34;Ng5H2X1h.png&#34; alt=&#34;Imgur&#34;&gt;&#xA;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;In Theo&amp;rsquo;s previous posts on &lt;a href=&#34;https://medium.com/informatics-lab/creating-a-data-format-for-high-momentum-datasets-a394fa48b671&#34;&gt;storing high momentum data&lt;/a&gt; and its &lt;a href=&#34;https://medium.com/informatics-lab/how-to-and-not-to-handle-metadata-in-high-momentum-datasets-8a058141d904&#34;&gt;accompanying metadata&lt;/a&gt; we get some interesting insights into the future of cloud based data storage. In this post I&amp;rsquo;m going to cover how we are working with today&amp;rsquo;s &lt;a href=&#34;https://www.unidata.ucar.edu/software/netcdf/&#34;&gt;NetCDF&lt;/a&gt;-based challenges, by making assumptions!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Met Office Informatics Lab Overview</title>
      <link>https://jacobtomlinson.dev/talks/2019-03-26-tech-storm-informatics-lab-overview/</link>
      <pubDate>Tue, 26 Mar 2019 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2019-03-26-tech-storm-informatics-lab-overview/</guid>
      <description>&lt;p&gt;Straight from our own Informatics Lab, Jacob will share how to perform large scale distributed data analysis on any cloud platform with Pangeo. Pangeo is a suite of open source tools created and curated by the geoscience community to make big scale scientific analysis possible on any cloud platform. It uses Kubernetes to bring consistency to the workflow and it brings popular scientific python libraries together to work interoperability.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Intro to Earth Information Workshop</title>
      <link>https://jacobtomlinson.dev/posts/2019/intro-to-earth-information-workshop/</link>
      <pubDate>Tue, 12 Mar 2019 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2019/intro-to-earth-information-workshop/</guid>
      <description>&lt;p&gt;&#xA;&lt;img src=&#34;JxOLZgkh.png&#34; alt=&#34;&#34;&gt;&#xA;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;This article was originally written for the the Met Office workshop run at the&lt;/em&gt; &lt;a href=&#34;https://www.eventbrite.co.uk/e/intro-to-earth-information-with-googles-geographer-ed-parsons-tickets-53817586851&#34;&gt;&lt;em&gt;Intro to Earth Information&lt;/em&gt;&lt;/a&gt; &lt;em&gt;event on the 12th of March 2019.&lt;/em&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cloud agnostic distributed data analysis with Pangeo</title>
      <link>https://jacobtomlinson.dev/talks/2019-02-12-ukri-cloud-working-group-cloud-agnostic-distributed-data-analysis-with-pangeo/</link>
      <pubDate>Tue, 12 Feb 2019 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2019-02-12-ukri-cloud-working-group-cloud-agnostic-distributed-data-analysis-with-pangeo/</guid>
      <description></description>
    </item>
    <item>
      <title>Containers Why and How to Use Them</title>
      <link>https://jacobtomlinson.dev/talks/2019-01-30-citf-containers-why-and-how-to-use-them/</link>
      <pubDate>Wed, 30 Jan 2019 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2019-01-30-citf-containers-why-and-how-to-use-them/</guid>
      <description>&lt;p&gt;Enable your development teams to be able to deploy software quickly and efficiently, as well as at great scale, with containerisation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>My pragmatic workshop format</title>
      <link>https://jacobtomlinson.dev/posts/2019/my-pragmatic-workshop-format/</link>
      <pubDate>Wed, 30 Jan 2019 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2019/my-pragmatic-workshop-format/</guid>
      <description>&lt;p&gt;&#xA;&lt;figure&gt;&#xA;    &lt;img src=&#34;65WqItbh.png&#34; alt=&#34;Mozfest workshop facilitators meeting&#34;&gt;&#xA;    &lt;figcaption&gt;Mozfest workshop facilitators meeting&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Figuring out the right format for a workshop can be tricky. There are so many factors; what is the subject, do people need any equipment, how many people will attend, how many facilitators will there be, where will it be held, what level of expertise will the participants have, the list goes on&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Containers and orchestration 101 - Docker, Kubernetes and Helm</title>
      <link>https://jacobtomlinson.dev/talks/2018-09-07-tech-exeter-containers-and-orchestration-101-docker-kubernetes-and-helm/</link>
      <pubDate>Fri, 07 Sep 2018 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2018-09-07-tech-exeter-containers-and-orchestration-101-docker-kubernetes-and-helm/</guid>
      <description>&lt;p&gt;If you read reports from organizations like the CNCF they will tell you that 90% of people are developing in containers, 69% are running them in production and 77% of those are using Kubernetes to manage them. However those surveys are biased towards a self-selecting group of container converts.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pangeo Principles</title>
      <link>https://jacobtomlinson.dev/talks/2018-08-13-pangeo-developers-workshop/</link>
      <pubDate>Mon, 13 Aug 2018 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2018-08-13-pangeo-developers-workshop/</guid>
      <description></description>
    </item>
    <item>
      <title>Debugging Kubernetes PVCs</title>
      <link>https://jacobtomlinson.dev/posts/2018/debugging-kubernetes-pvcs/</link>
      <pubDate>Fri, 03 Aug 2018 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2018/debugging-kubernetes-pvcs/</guid>
      <description>&lt;p&gt;Sometimes I find that something goes wrong in a container and some data stored in a &lt;a href=&#34;https://kubernetes.io/docs/concepts/storage/persistent-volumes/&#34;&gt;persistent volume&lt;/a&gt; gets corrupted. This may result in me having to get my hands dirty and have a poke around in the filesystem myself.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Opsdroid</title>
      <link>https://jacobtomlinson.dev/talks/2018-08-02-podcast-init-opsdroid/</link>
      <pubDate>Thu, 02 Aug 2018 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2018-08-02-podcast-init-opsdroid/</guid>
      <description>&lt;p&gt;Server administration is an activity that often happens in an isolated context in a terminal. ChatOps is a way of bringing that work into a shared environment and unlocking more collaboration. This week Jacob Tomlinson talks about the work he has done on opsdroid, a new bot framework targeted at tying together the various services and environments that modern production systems rely on.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Met Office Informatics Lab Overview</title>
      <link>https://jacobtomlinson.dev/talks/2018-07-17-south-west-data-meetup-informatics-lab-overview/</link>
      <pubDate>Tue, 17 Jul 2018 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2018-07-17-south-west-data-meetup-informatics-lab-overview/</guid>
      <description></description>
    </item>
    <item>
      <title>Using Xiaomi door/window sensors as light switches</title>
      <link>https://jacobtomlinson.dev/posts/2018/using-xiaomi-door/window-sensors-as-light-switches/</link>
      <pubDate>Wed, 06 Jun 2018 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2018/using-xiaomi-door/window-sensors-as-light-switches/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;For a while I&amp;rsquo;ve been searching for a decent light switch solution for my home automation setup. I&amp;rsquo;ve recently put in a pretty good solution using &lt;a href=&#34;https://xiaomi-mi.com/mi-smart-home/xiaomi-mi-door-window-sensors/&#34;&gt;Xiaomi door/window sensors&lt;/a&gt;, I&amp;rsquo;m very happy with it and it ticks a lot of boxes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Exploring Dask and Distributed on AWS Lambda</title>
      <link>https://jacobtomlinson.dev/posts/2018/exploring-dask-and-distributed-on-aws-lambda/</link>
      <pubDate>Fri, 13 Apr 2018 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2018/exploring-dask-and-distributed-on-aws-lambda/</guid>
      <description>&lt;p&gt;I spent some time this week exploring whether it would be possible to run &lt;a href=&#34;https://dask.pydata.org/en/latest/&#34;&gt;Dask&lt;/a&gt; and &lt;a href=&#34;https://distributed.readthedocs.io/en/latest/&#34;&gt;Distributed&lt;/a&gt; on a function as a service platform like &lt;a href=&#34;https://aws.amazon.com/lambda/&#34;&gt;AWS Lambda&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rise of the Bots</title>
      <link>https://jacobtomlinson.dev/talks/2018-03-21-wbi-dinner-rise-of-the-bots/</link>
      <pubDate>Wed, 21 Mar 2018 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2018-03-21-wbi-dinner-rise-of-the-bots/</guid>
      <description></description>
    </item>
    <item>
      <title>Helping Balloons Navigate the Weather: Alibaba Tianchi Award Presentation</title>
      <link>https://jacobtomlinson.dev/talks/2018-02-27-mwc-alibaba-tianchi-helping-balloons-navigate-the-weather-awards.md/</link>
      <pubDate>Tue, 27 Feb 2018 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2018-02-27-mwc-alibaba-tianchi-helping-balloons-navigate-the-weather-awards.md/</guid>
      <description>&lt;p&gt;In late 2017 the Met Office ran a joint Tianchi data science challenge with Alibaba. I was invited to present the winning team with their award at the Mobile World Congress in Barcelona.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Instant access to auto-scaling personal Python clusters</title>
      <link>https://jacobtomlinson.dev/posts/2018/instant-access-to-auto-scaling-personal-python-clusters/</link>
      <pubDate>Wed, 07 Feb 2018 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2018/instant-access-to-auto-scaling-personal-python-clusters/</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href=&#34;https://archived.informaticslab.co.uk/dask/2018/02/07/trying-out-daskernetes.html&#34;&gt;Met Office Informatics Lab blog&lt;/a&gt; on February 7th, 2018.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;We are excited to announce that the work we&amp;rsquo;ve been doing with distributed Dask clusters running on Kubernetes has been absorbed into an awesome new tool called Daskernetes through our work on the &lt;a href=&#34;http://matthewrocklin.com/blog/work/2018/01/22/pangeo-2&#34;&gt;Pangeo project&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Accessing S3 from FUSE</title>
      <link>https://jacobtomlinson.dev/talks/2018-01-08-ukri-cloud-working-group-accessing-s3-from-fuse/</link>
      <pubDate>Mon, 08 Jan 2018 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2018-01-08-ukri-cloud-working-group-accessing-s3-from-fuse/</guid>
      <description>&lt;p&gt;My data lives in an object store, but my tools expect a POSIX file path, what do I do? In the Informatics Lab we have been experimenting with using FUSE filesystems on a distributed compute cluster to provide parallel access to files on AWS S3. We have also created a library called pysssix which provides a slim and intentionally minimal access to S3 for fast data access.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ChatOps - Automation via chat</title>
      <link>https://jacobtomlinson.dev/posts/2017/chatops-automation-via-chat/</link>
      <pubDate>Tue, 19 Dec 2017 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2017/chatops-automation-via-chat/</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href=&#34;https://archived.informaticslab.co.uk/worksops/2017/12/19/chatops-workshop.html&#34;&gt;Met Office Informatics Lab blog&lt;/a&gt; on December 19th, 2017.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;chatops---automation-via-chat&#34;&gt;ChatOps - Automation via chat&lt;/h1&gt;&#xA;&lt;p&gt;This article is a companion to a workshop on using chat to automate ops workflows. This is a static version of a &lt;a href=&#34;http://jupyter.org/&#34;&gt;Jupyter Notebook&lt;/a&gt; which you can download &lt;a href=&#34;https://images.informaticslab.co.uk/misc/f7d8eb8d252480b0028a6246623b3d76.ipynb&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Power of Big Data</title>
      <link>https://jacobtomlinson.dev/talks/2017-10-30-the-power-of-big-data/</link>
      <pubDate>Mon, 30 Oct 2017 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2017-10-30-the-power-of-big-data/</guid>
      <description>&lt;p&gt;This session gives an in-depth look at the current state of big data at AWS. Learn about the latest big data trends and industry use cases. We’ll focus on how other organizations are using the AWS big data platform to innovate and remain competitive. Met Office also joins us to offer an inside look on how they are using AWS to enable citizens, business, and governments to consume its data on demand.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Scaling Clusters to Thousands of Servers in the Cloud</title>
      <link>https://jacobtomlinson.dev/talks/2017-09-21-tech-exeter-scaling-clusters-to-thousands-of-servers-in-the-cloud/</link>
      <pubDate>Thu, 21 Sep 2017 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2017-09-21-tech-exeter-scaling-clusters-to-thousands-of-servers-in-the-cloud/</guid>
      <description>&lt;p&gt;In order to analyse the petabytes of data we have at the Met Office we need very large clusters of servers. However procuring these pieces of infrastructure takes months or even years of planning and large up-front capital expense.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deploying opsdroid using ZEIT</title>
      <link>https://jacobtomlinson.dev/posts/2017/deploying-opsdroid-using-zeit/</link>
      <pubDate>Sat, 16 Sep 2017 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2017/deploying-opsdroid-using-zeit/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://zeit.co/&#34;&gt;ZEIT&lt;/a&gt; is a great platform for deploying your &lt;a href=&#34;https://opsdroid.github.io/&#34;&gt;opsdroid&lt;/a&gt; instance. Particularly because it is free for light use, which many opsdroid deployments will be.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Autoscaling Distributed Compute With Dask Kubernetes and AWS</title>
      <link>https://jacobtomlinson.dev/talks/2017-08-21-euroscipy-autoscaling-distributed-compute-with-dask-kubernetes-and-aws/</link>
      <pubDate>Mon, 21 Aug 2017 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2017-08-21-euroscipy-autoscaling-distributed-compute-with-dask-kubernetes-and-aws/</guid>
      <description></description>
    </item>
    <item>
      <title>Article in Computer Weekly</title>
      <link>https://jacobtomlinson.dev/posts/2017/article-in-computer-weekly/</link>
      <pubDate>Tue, 01 Aug 2017 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2017/article-in-computer-weekly/</guid>
      <description>&lt;p&gt;This week Computer Weekly have &lt;a href=&#34;http://www.computerweekly.com/feature/How-the-Met-Office-is-handling-a-deluge-of-data&#34;&gt;published an article&lt;/a&gt; interviewing me about how the Met Office is tackling the vast amount of data we are producing. They reference the work the Informatics Lab have done on the &lt;a href=&#34;http://www.informaticslab.co.uk/projects/jade.html&#34;&gt;Jade project&lt;/a&gt; and Met Office &lt;a href=&#34;http://data.informaticslab.co.uk/&#34;&gt;public datasets&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Interactive Big Data Analysis With Jupyter, Dask and more</title>
      <link>https://jacobtomlinson.dev/talks/2017-06-27-interactive-big-data-analysis-with-jupyter-dask-and-more/</link>
      <pubDate>Thu, 27 Jul 2017 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2017-06-27-interactive-big-data-analysis-with-jupyter-dask-and-more/</guid>
      <description></description>
    </item>
    <item>
      <title>Adaptive Dask clusters on Kubernetes and AWS</title>
      <link>https://jacobtomlinson.dev/posts/2017/adaptive-dask-clusters-on-kubernetes-and-aws/</link>
      <pubDate>Fri, 21 Jul 2017 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2017/adaptive-dask-clusters-on-kubernetes-and-aws/</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href=&#34;https://archived.informaticslab.co.uk/dask/2017/07/21/adaptive-dask-clusters-on-kubernetes-and-aws.html&#34;&gt;Met Office Informatics Lab blog&lt;/a&gt; on July 21st, 2017.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;introduction&#34;&gt;Introduction&lt;/h3&gt;&#xA;&lt;p&gt;This article assumes a basic understanding of &lt;a href=&#34;https://aws.amazon.com&#34;&gt;Amazon Web Services (AWS)&lt;/a&gt;, &lt;a href=&#34;https://kubernetes.io/&#34;&gt;Kubernetes&lt;/a&gt;, &lt;a href=&#34;https://www.docker.com/&#34;&gt;Docker&lt;/a&gt; and &lt;a href=&#34;https://dask.pydata.org/en/latest/&#34;&gt;Dask&lt;/a&gt;. If you are unfamiliar with any of these you should do some preliminary research before continuing.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Making Environmental Science and Data Beautiful and Useful</title>
      <link>https://jacobtomlinson.dev/talks/2017-07-18-res-making-environmental-science-and-data-beatiful-and-useful/</link>
      <pubDate>Tue, 18 Jul 2017 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2017-07-18-res-making-environmental-science-and-data-beatiful-and-useful/</guid>
      <description></description>
    </item>
    <item>
      <title>Asyncio in Depth</title>
      <link>https://jacobtomlinson.dev/talks/2017-06-28-exeter-python-asyncio-in-depth/</link>
      <pubDate>Wed, 28 Jun 2017 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2017-06-28-exeter-python-asyncio-in-depth/</guid>
      <description></description>
    </item>
    <item>
      <title>Generate git release notes automatically</title>
      <link>https://jacobtomlinson.dev/posts/2017/generate-git-release-notes-automatically/</link>
      <pubDate>Thu, 15 Jun 2017 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2017/generate-git-release-notes-automatically/</guid>
      <description>&lt;p&gt;It is common practice for release notes to consist of a list of the Pull Requests which have been merged since the last release. Some projects divide these into categories, for example breaking changes, enhancements and bug fixes. If you are a project maintainer you may want to be able to generate this automatically.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to create a seal only token for Hashicorp Vault</title>
      <link>https://jacobtomlinson.dev/posts/2017/how-to-create-a-seal-only-token-for-hashicorp-vault/</link>
      <pubDate>Wed, 14 Jun 2017 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2017/how-to-create-a-seal-only-token-for-hashicorp-vault/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;When using &lt;a href=&#34;https://www.vaultproject.io&#34;&gt;Hashicorp&amp;rsquo;s Vault&lt;/a&gt; you may want to have an authentication token which only has permissions to seal the vault. This can then be used in an emergency situation to seal the vault, &lt;a href=&#34;https://github.com/opsdroid/skill-vault&#34;&gt;perhaps through a chatbot&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RITA 2017 Innovation Award</title>
      <link>https://jacobtomlinson.dev/posts/2017/rita-2017-innovation-award/</link>
      <pubDate>Thu, 25 May 2017 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2017/rita-2017-innovation-award/</guid>
      <description>&lt;p&gt;My team won a Real IT Award for Innovation! &lt;a href=&#34;https://archived.informaticslab.co.uk/events/2017/05/25/rita-2017.html&#34;&gt;Check out the full post here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://static.real-it-awards.co.uk/gallery-2017.php#&#34;&gt;&#xA;&lt;img src=&#34;psaL7DE.png&#34; alt=&#34;The Lab at RITA 2017&#34;&gt;&#xA;&#xA;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Empowering Environmental Science With Open Tools and Data</title>
      <link>https://jacobtomlinson.dev/talks/2017-05-22-github-satellite-empowering-environmental-science-with-open-tools-and-data/</link>
      <pubDate>Mon, 22 May 2017 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2017-05-22-github-satellite-empowering-environmental-science-with-open-tools-and-data/</guid>
      <description>&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; allowfullscreen=&#34;allowfullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/K0svhmx0nRE?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;The Met Office is a world leading weather and climate centre with the largest operational supercomputer in Europe. With their data growing rapidly every year,  they&amp;rsquo;ve realized a need to change their approach to analysing it. This talk covers how they are working with a suite of open source tools to solve this problem. They have mixed popular projects, like Jupyter Notebooks, with new data processing libraries (like Dask) and their own bespoke weather analysis tools (like Iris). They are also opening large volumes of data to the public, which through these tools can be manipulated quickly and easily from the comfort of a web browser.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Monitoring scalable infrastructure</title>
      <link>https://jacobtomlinson.dev/posts/2017/monitoring-scalable-infrastructure/</link>
      <pubDate>Mon, 08 May 2017 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2017/monitoring-scalable-infrastructure/</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href=&#34;https://archived.informaticslab.co.uk/infrastructure/2017/05/08/monitoring-scalable-infrastructure.html&#34;&gt;Met Office Informatics Lab blog&lt;/a&gt; on May 8th, 2017.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;Recently we&amp;rsquo;ve been thinking a lot about monitoring. In a world of ephemeral servers, auto-scaling, spot instances and infrastructure-as-code, monitoring has to be tackled differently.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Jupyter notebooks for SysAdmin, CloudOps and DevOps workflows.</title>
      <link>https://jacobtomlinson.dev/posts/2017/using-jupyter-notebooks-for-sysadmin-cloudops-and-devops-workflows./</link>
      <pubDate>Mon, 08 May 2017 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2017/using-jupyter-notebooks-for-sysadmin-cloudops-and-devops-workflows./</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href=&#34;https://archived.informaticslab.co.uk/process/2017/05/08/jupyter-for-sysadmin-devops-cloudops-workflows.html&#34;&gt;Met Office Informatics Lab blog&lt;/a&gt; on May 8th, 2017.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://jupyter.org/&#34;&gt;Jupyter notebooks&lt;/a&gt; are awesome. If you speak to a data scientist or analyst who writes Python there&amp;rsquo;s a very good chance that they use Jupyter notebooks. But I think there&amp;rsquo;s another community that would benefit hugely from including them in their standard arsenal of tools, and that&amp;rsquo;s folks in IT Infrastructure.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Moving large volumes of data to S3</title>
      <link>https://jacobtomlinson.dev/posts/2017/moving-large-volumes-of-data-to-s3/</link>
      <pubDate>Thu, 20 Apr 2017 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2017/moving-large-volumes-of-data-to-s3/</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href=&#34;https://archived.informaticslab.co.uk/aws/2017/04/20/moving-70-terrabytes-to-s3.html&#34;&gt;Met Office Informatics Lab blog&lt;/a&gt; on April 20th, 2017.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;We just moved ~80TB of data to S3 (stay tuned to hear what we&amp;rsquo;re doing with it).&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://jacobtomlinson.dev/index.json</link>
      <pubDate>Tue, 28 Mar 2017 00:02:24 +0100</pubDate>
      <guid>https://jacobtomlinson.dev/index.json</guid>
      <description></description>
    </item>
    <item>
      <title>Apple Airport Express Repair</title>
      <link>https://jacobtomlinson.dev/posts/2017/apple-airport-express-repair/</link>
      <pubDate>Mon, 20 Mar 2017 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2017/apple-airport-express-repair/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;I recently acquired an Apple Airport Express wireless hotspot which wouldn&amp;rsquo;t power on. This was most likely down to a fault on the power supply board and so I decided to have a go at fixing it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building Telegraf for 32bit FreeBSD</title>
      <link>https://jacobtomlinson.dev/posts/2017/building-telegraf-for-32bit-freebsd/</link>
      <pubDate>Mon, 16 Jan 2017 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2017/building-telegraf-for-32bit-freebsd/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Currently InfluxData do not provide a 32bit FreeBSD build of &lt;a href=&#34;https://www.influxdata.com/time-series-platform/telegraf/&#34;&gt;Telegraf&lt;/a&gt; as part of their standard packages. Luckily it is easy to build yourself.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cloud Utilisation in the Sciences</title>
      <link>https://jacobtomlinson.dev/talks/2016-11-04-cloud-utilisation-in-the-sciences/</link>
      <pubDate>Fri, 04 Nov 2016 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2016-11-04-cloud-utilisation-in-the-sciences/</guid>
      <description></description>
    </item>
    <item>
      <title>Processing Environmental Big Data in the Browser for Science</title>
      <link>https://jacobtomlinson.dev/talks/2016-10-29-processing-environmental-big-data-in-the-browser-for-science/</link>
      <pubDate>Sat, 29 Oct 2016 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2016-10-29-processing-environmental-big-data-in-the-browser-for-science/</guid>
      <description>&lt;p&gt;We should split the session into roughly three activities, with the final one being totally open ended. This caters for most ability levels and will allow everyone to fill the entire session.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SVG Animations</title>
      <link>https://jacobtomlinson.dev/talks/2016-10-08-graphical-web-svg-animations/</link>
      <pubDate>Sat, 08 Oct 2016 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2016-10-08-graphical-web-svg-animations/</guid>
      <description></description>
    </item>
    <item>
      <title>Build games for iOS 10 with Xcode 8 and Game Maker Studio 1.4</title>
      <link>https://jacobtomlinson.dev/posts/2016/build-games-for-ios-10-with-xcode-8-and-game-maker-studio-1.4/</link>
      <pubDate>Tue, 20 Sep 2016 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2016/build-games-for-ios-10-with-xcode-8-and-game-maker-studio-1.4/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Building games for iOS is straight forward with Game Maker. You create the game as normal in Game Maker, but in order to build it you must have a Mac with Xcode installed. You must configure Game Maker with the IP address of your Mac and the username and password. When you build the project Game Maker will produce an Xcode compatible project, copy it onto your Mac and open it in Xcode. You can find &lt;a href=&#34;http://help.yoyogames.com/hc/en-us/articles/216753858-Develop-For-And-Distribute-To-iOS&#34;&gt;comprehensive instructions&lt;/a&gt; on the YoYo Games website.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A game on the perception of symbols</title>
      <link>https://jacobtomlinson.dev/posts/2016/a-game-on-the-perception-of-symbols/</link>
      <pubDate>Fri, 24 Jun 2016 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2016/a-game-on-the-perception-of-symbols/</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href=&#34;https://archived.informaticslab.co.uk/design/2016/06/24/perception-of-symbols.html&#34;&gt;Met Office Informatics Lab blog&lt;/a&gt; on June 24th, 2016.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;With some friends look out the window and each choose a weather symbol which represents what you see. Do you all agree?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Running Telegraf inside a docker container</title>
      <link>https://jacobtomlinson.dev/posts/2016/running-telegraf-inside-a-docker-container/</link>
      <pubDate>Thu, 23 Jun 2016 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2016/running-telegraf-inside-a-docker-container/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://influxdata.com/time-series-platform/telegraf/&#34;&gt;Telegraf&lt;/a&gt; is an application for collecting server and application telemetry and metrics and sending them to a time series datastore like &lt;a href=&#34;https://influxdata.com/&#34;&gt;InfluxDB&lt;/a&gt;. Like me you may prefer running all of your applications in &lt;a href=&#34;https://www.docker.com/&#34;&gt;Docker&lt;/a&gt; containers, however this means Telegraf will only collect data for the container. This article will cover the configuration options to allow Telegraf to collect host metrics from inside a container.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting started with VMwares ESXi/vSphere API in Python</title>
      <link>https://jacobtomlinson.dev/posts/2016/getting-started-with-vmwares-esxi/vsphere-api-in-python/</link>
      <pubDate>Wed, 22 Jun 2016 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2016/getting-started-with-vmwares-esxi/vsphere-api-in-python/</guid>
      <description>&lt;p&gt;In 2013 VMware dropped their Python library for accessing the API for ESXi/vSphere on GitHub. This is great, however it isn&amp;rsquo;t the easiest library in the world to use. This quick guide will show you how to connect to an ESXi host or vSphere cluster and get some info about a virtual machine.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cracking Enigma with Go</title>
      <link>https://jacobtomlinson.dev/posts/2016/cracking-enigma-with-go/</link>
      <pubDate>Thu, 02 Jun 2016 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2016/cracking-enigma-with-go/</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href=&#34;https://archived.informaticslab.co.uk/learning/2016/06/02/go-enigma.html&#34;&gt;Met Office Informatics Lab blog&lt;/a&gt; on June 2nd, 2016.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;&lt;em&gt;Can I crack the Enigma code with Go on a MacBook?&lt;/em&gt; &lt;strong&gt;Yes!&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>A note on AWS disk performance testing</title>
      <link>https://jacobtomlinson.dev/posts/2016/a-note-on-aws-disk-performance-testing/</link>
      <pubDate>Fri, 15 Apr 2016 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2016/a-note-on-aws-disk-performance-testing/</guid>
      <description>&lt;p&gt;Here is an interesting note on testing the disk performance of your AWS instances. Before you can acurately test the performance of your EBS disk you need to read all the sectors of the disk at least once if that disk was created from a snapshot.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Interactive Docker containers</title>
      <link>https://jacobtomlinson.dev/posts/2016/interactive-docker-containers/</link>
      <pubDate>Thu, 31 Mar 2016 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2016/interactive-docker-containers/</guid>
      <description>&lt;h2 id=&#34;interactive-shell&#34;&gt;Interactive shell&lt;/h2&gt;&#xA;&lt;p&gt;In this post we are going to create a container we can interact with. We can then have a poke around inside the container and see what it is and how it works.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Running a Docker container</title>
      <link>https://jacobtomlinson.dev/posts/2016/running-a-docker-container/</link>
      <pubDate>Tue, 29 Mar 2016 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2016/running-a-docker-container/</guid>
      <description>&lt;h2 id=&#34;installing-docker&#34;&gt;Installing Docker&lt;/h2&gt;&#xA;&lt;p&gt;Installing Docker on your machine is required but beyond the scope of this series. Getting Docker up and running is an ever evolving and improving process and anything put here will go stale reasonably quickly. As Docker uses linux kernel features you will need a running linux operating system. Therefore installing Docker on linux is easy, however installing it on Windows and Mac involve running a lightweight linux virtual machine.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Killing Containers to Make Weather Beautiful</title>
      <link>https://jacobtomlinson.dev/talks/2016-03-25-kubecon-killing-containers-to-make-weather-beautilful/</link>
      <pubDate>Fri, 25 Mar 2016 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2016-03-25-kubecon-killing-containers-to-make-weather-beautilful/</guid>
      <description>&lt;p&gt;The Met Office Informatics Lab includes scientists, developers and designers. We build prototypes exploring new technologies to make environmental data useful. Here we describe a recent project to process multi-dimensional weather data to create a fully interactive 4D browser application. We used long-running containers to serve data and web pages and short-running processes to ingest and compress the data. Forecast data is issued every three hours so our data ingestion goes through regular and predictable bursts (i.e. perfect for autoscaling).&lt;/p&gt;</description>
    </item>
    <item>
      <title>What is Docker?</title>
      <link>https://jacobtomlinson.dev/posts/2016/what-is-docker/</link>
      <pubDate>Tue, 22 Mar 2016 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2016/what-is-docker/</guid>
      <description>&lt;p&gt;Welcome to the first post in &amp;lsquo;Intro to Docker&amp;rsquo;, a series I&amp;rsquo;m writing to get beginners started with Docker. Each post in this series will be no more than a 5 minute read and will cover exactly one topic surrounding Docker.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to use an Xbox 360 controller with OS X El Capitan</title>
      <link>https://jacobtomlinson.dev/posts/2016/how-to-use-an-xbox-360-controller-with-os-x-el-capitan/</link>
      <pubDate>Wed, 24 Feb 2016 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2016/how-to-use-an-xbox-360-controller-with-os-x-el-capitan/</guid>
      <description>&lt;h3 id=&#34;introduction&#34;&gt;Introduction&lt;/h3&gt;&#xA;&lt;p&gt;In order to use an Xbox 360 controller with OS X El Capitan you will need to install&#xA;a driver for it. This is an update to my article on using an &lt;a href=&#34;https://jacobtomlinson.dev/2014/10/17/use-xbox-360-pad-with-yosemite/&#34;&gt;Xbox 360 controller with Yosemite&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>MacBook Rebuild</title>
      <link>https://jacobtomlinson.dev/posts/2016/macbook-rebuild/</link>
      <pubDate>Fri, 22 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2016/macbook-rebuild/</guid>
      <description>&lt;h3 id=&#34;introduction&#34;&gt;Introduction&lt;/h3&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve decided to wipe my MacBook and reinstall everything! The current installation has been hanging around for the last few years and has even migrated between hardware with Time Machine. Things are starting to feel a little slow, I&amp;rsquo;ve installed lots of things in the past which I don&amp;rsquo;t want any more, and I just want a fresh start. I&amp;rsquo;ve backed it up with Time Machine just in case and I&amp;rsquo;m ready to get started.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pretty git logs with `git lg`</title>
      <link>https://jacobtomlinson.dev/posts/2016/pretty-git-logs-with-git-lg/</link>
      <pubDate>Mon, 18 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2016/pretty-git-logs-with-git-lg/</guid>
      <description>&lt;p&gt;This is a repost of a &lt;a href=&#34;http://stackoverflow.com/a/34467298/1003288&#34;&gt;Stack Overflow answer&lt;/a&gt;, mainly to preserve it for myself. &lt;a href=&#34;http://stackoverflow.com/users/177525/slipp-d-thompson&#34;&gt;Slipp Thompson&lt;/a&gt; posted some really nice aliases for showing branch topology in the git command line.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fixing the SSH roaming vulnerability (CVE-2016-0777)</title>
      <link>https://jacobtomlinson.dev/posts/2016/fixing-the-ssh-roaming-vulnerability-cve-2016-0777/</link>
      <pubDate>Fri, 15 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2016/fixing-the-ssh-roaming-vulnerability-cve-2016-0777/</guid>
      <description>&lt;p&gt;A vulnerability in the OpenSSH client has been discovered which means that if you SSH to a compromised server the server can steal your private key. This affects any operating system with OpenSSH client 5.4 and above, which is pretty much all flavors of linux and OS X.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Twenty Fifteen Roundup</title>
      <link>https://jacobtomlinson.dev/posts/2015/twenty-fifteen-roundup/</link>
      <pubDate>Thu, 31 Dec 2015 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2015/twenty-fifteen-roundup/</guid>
      <description>&lt;h3 id=&#34;introduction&#34;&gt;Introduction&lt;/h3&gt;&#xA;&lt;p&gt;Here is a list of the technology and media I enjoyed this year, a follow up on &lt;a href=&#34;https://www.jacobtomlinson.co.uk/2014/12/31/twenty-fourteen-roundup/&#34;&gt;last year&amp;rsquo;s post&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Thoughts on Star Wars: The Force Awakens</title>
      <link>https://jacobtomlinson.dev/posts/2015/thoughts-on-star-wars-the-force-awakens/</link>
      <pubDate>Mon, 21 Dec 2015 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2015/thoughts-on-star-wars-the-force-awakens/</guid>
      <description>&lt;h4 id=&#34;spoilers-ahead-you-have-been-warned&#34;&gt;Spoilers ahead, you have been warned!&lt;/h4&gt;&#xA;&lt;p&gt;I thoroughly enjoyed the new Star Wars. Like I assume many people did I went to the cinema with concerns that the film would not live up to expectations. However roughly around the moment where Rylo Ken trapped the blaster shot in mid air those worries went away.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Raspberry Pi Docker Cluster</title>
      <link>https://jacobtomlinson.dev/posts/2015/a-raspberry-pi-docker-cluster/</link>
      <pubDate>Wed, 09 Dec 2015 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2015/a-raspberry-pi-docker-cluster/</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href=&#34;https://archived.informaticslab.co.uk/infrastructure/2015/12/09/raspberry-pi-docker-cluster.html&#34;&gt;Met Office Informatics Lab blog&lt;/a&gt; on December 12th, 2015.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;We are fortunate in the Lab to have a small stash of Raspberry Pis in our cupboard which are used at hackathons and other events. As there are no events using them currently I thought I&amp;rsquo;d take the opportunity to make a nice demonstration piece to show off clustering containers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Intro to Kubernetes</title>
      <link>https://jacobtomlinson.dev/talks/2015-10-29-exeter-web-meetup-intro-to-kubernetes/</link>
      <pubDate>Thu, 29 Oct 2015 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2015-10-29-exeter-web-meetup-intro-to-kubernetes/</guid>
      <description></description>
    </item>
    <item>
      <title>Building with Kubernetes</title>
      <link>https://jacobtomlinson.dev/posts/2015/building-with-kubernetes/</link>
      <pubDate>Thu, 01 Oct 2015 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2015/building-with-kubernetes/</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href=&#34;https://archived.informaticslab.co.uk/infrastructure/2015/10/01/building-with-kubernetes.html&#34;&gt;Met Office Informatics Lab blog&lt;/a&gt; on October 1st, 2015.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;For our 3D visualisation project we wanted to build a data processing service using &lt;a href=&#34;http://www.informaticslab.co.uk/lab-school/2015/06/24/lab-school-docker.html&#34;&gt;Docker containers&lt;/a&gt;. We quickly found that once you are running more than a couple of containers you need a way to manage them. After looking into the different tools available we decided to give &lt;a href=&#34;http://kubernetes.io/&#34;&gt;Kubernetes&lt;/a&gt; a go, this is what we learned.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quick Tip - git delete merged branches</title>
      <link>https://jacobtomlinson.dev/posts/2015/quick-tip-git-delete-merged-branches/</link>
      <pubDate>Thu, 01 Oct 2015 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2015/quick-tip-git-delete-merged-branches/</guid>
      <description>&lt;p&gt;Here&amp;rsquo;s a quick line to run in your terminal to delete all local git branches which have already been merged into master.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quick Tip - em vs rem</title>
      <link>https://jacobtomlinson.dev/posts/2015/quick-tip-em-vs-rem/</link>
      <pubDate>Fri, 04 Sep 2015 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2015/quick-tip-em-vs-rem/</guid>
      <description>&lt;p&gt;&lt;code&gt;em&lt;/code&gt; and &lt;code&gt;rem&lt;/code&gt; are used in CSS to set a size value relative to a &lt;code&gt;font-size&lt;/code&gt;. This is useful in many situations such as increasing the font size relatively across your whole website by changing one value or adding padding which is larger or smaller depending on the font size.&lt;/p&gt;</description>
    </item>
    <item>
      <title>govspeak: An open source markup language</title>
      <link>https://jacobtomlinson.dev/posts/2015/govspeak-an-open-source-markup-language/</link>
      <pubDate>Wed, 22 Jul 2015 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2015/govspeak-an-open-source-markup-language/</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href=&#34;https://archived.informaticslab.co.uk/collaboration/2015/07/22/govspeak-an-open-source-markup-language.html&#34;&gt;Met Office Informatics Lab blog&lt;/a&gt; on July 22nd, 2015.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The Informatics Lab website is created with an application called &lt;a href=&#34;http://jekyllrb.com/&#34;&gt;Jekyll&lt;/a&gt;. Recently I made an enhancement to it which I&amp;rsquo;m very excited about. It allows us to write our articles in a markup language called &lt;a href=&#34;https://github.com/alphagov/govspeak&#34;&gt;Govspeak&lt;/a&gt;, which is an extension to the excellent &lt;a href=&#34;http://daringfireball.net/projects/markdown/&#34;&gt;markdown&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Lab School: Docker</title>
      <link>https://jacobtomlinson.dev/posts/2015/lab-school-docker/</link>
      <pubDate>Wed, 24 Jun 2015 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2015/lab-school-docker/</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on the &lt;a href=&#34;https://archived.informaticslab.co.uk/lab-school/2015/06/24/lab-school-docker.html&#34;&gt;Met Office Informatics Lab blog&lt;/a&gt; on June 24th, 2015.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Welcome to the first ever &lt;a href=&#34;http://www.informaticslab.co.uk/announcements/2015/06/22/introducing-lab-school.html&#34;&gt;Lab School&lt;/a&gt; session. This session aims to give you an overview of docker and how we are currently using it in the Lab.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Updating flightradar24 with a Raspberry Pi</title>
      <link>https://jacobtomlinson.dev/posts/2015/updating-flightradar24-with-a-raspberry-pi/</link>
      <pubDate>Fri, 29 May 2015 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2015/updating-flightradar24-with-a-raspberry-pi/</guid>
      <description>&lt;p&gt;You can feed data into &lt;a href=&#34;http://www.flightradar24.com/&#34;&gt;flightradar24&lt;/a&gt; (from now on referred to as fr24) simply using a Raspberry Pi and a cheap USB DVB-T tuner.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Collaborative article corrections in Jekyll</title>
      <link>https://jacobtomlinson.dev/posts/2015/collaborative-article-corrections-in-jekyll/</link>
      <pubDate>Wed, 27 May 2015 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2015/collaborative-article-corrections-in-jekyll/</guid>
      <description>&lt;p&gt;Don&amp;rsquo;t you find it really useful when you publish an article on your blog and then someone comes up to you and says:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simple reading speed estimate in Jekyll</title>
      <link>https://jacobtomlinson.dev/posts/2015/simple-reading-speed-estimate-in-jekyll/</link>
      <pubDate>Tue, 24 Feb 2015 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2015/simple-reading-speed-estimate-in-jekyll/</guid>
      <description>&lt;p&gt;When browsing through off-the-shelf Jekyll themes recently I stumbled across&#xA;one I really like called &lt;a href=&#34;https://github.com/johnotander/pixyll&#34;&gt;Pixyll&lt;/a&gt;. There are lots of things I like&#xA;about the theme but one thing in particular is the reading speed estimate&#xA;at the top of each article. Not only is it a nice feature but the code is simple and&#xA;concise too!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Test your Jekyll blog with Travis CI</title>
      <link>https://jacobtomlinson.dev/posts/2015/test-your-jekyll-blog-with-travis-ci/</link>
      <pubDate>Wed, 18 Feb 2015 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2015/test-your-jekyll-blog-with-travis-ci/</guid>
      <description>&lt;h3 id=&#34;introduction&#34;&gt;Introduction&lt;/h3&gt;&#xA;&lt;p&gt;Testing your blog may sound like an odd thing to do, but if you&amp;rsquo;re running a &lt;a href=&#34;http://jekyllrb.com/&#34;&gt;Jekyll&lt;/a&gt;&#xA;blog hosted on GitHub it is simple to set up and really useful for notifying you about broken links&#xA;and other issues.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bullet Journaling in 2015</title>
      <link>https://jacobtomlinson.dev/posts/2015/bullet-journaling-in-2015/</link>
      <pubDate>Tue, 03 Feb 2015 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2015/bullet-journaling-in-2015/</guid>
      <description>&lt;h3 id=&#34;introduction&#34;&gt;Introduction&lt;/h3&gt;&#xA;&lt;p&gt;It is one month into 2015 and I am on page 31 of my latest bullet journal. I started using bullet journaling to organise myself in March last year and now I can&amp;rsquo;t imagine my life without it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to install and configure inadyn on CentOS 6</title>
      <link>https://jacobtomlinson.dev/posts/2015/how-to-install-and-configure-inadyn-on-centos-6/</link>
      <pubDate>Mon, 05 Jan 2015 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2015/how-to-install-and-configure-inadyn-on-centos-6/</guid>
      <description>&lt;h3 id=&#34;introduction&#34;&gt;Introduction&lt;/h3&gt;&#xA;&lt;p&gt;Inadyn is a command line utility for periodically checking and updating your ip&#xA;address with DynDNS.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to install VMware Tools on Centos 6 with yum</title>
      <link>https://jacobtomlinson.dev/posts/2014/how-to-install-vmware-tools-on-centos-6-with-yum/</link>
      <pubDate>Wed, 31 Dec 2014 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2014/how-to-install-vmware-tools-on-centos-6-with-yum/</guid>
      <description>&lt;h3 id=&#34;introduction&#34;&gt;Introduction&lt;/h3&gt;&#xA;&lt;p&gt;Often when managing a large number of systems you want to manage all software&#xA;installs the same way. So when it comes to VMware Tools you may not want to&#xA;follow the &lt;a href=&#34;https://www.vmware.com/support/ws55/doc/ws_newguest_tools_linux.html#wp1127177&#34;&gt;official instructions&lt;/a&gt; but instead install using yum, especially&#xA;if you&amp;rsquo;re automating a large number of headless systems.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Twenty Fourteen Roundup</title>
      <link>https://jacobtomlinson.dev/posts/2014/twenty-fourteen-roundup/</link>
      <pubDate>Wed, 31 Dec 2014 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2014/twenty-fourteen-roundup/</guid>
      <description>&lt;h3 id=&#34;introduction&#34;&gt;Introduction&lt;/h3&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve decided to finish off the year by writing a roundup of all the technology&#xA;I&amp;rsquo;ve used this year. Inspiration taken from &lt;a href=&#34;https://github.com/sammcj/the_best_of&#34;&gt;sammcj&amp;rsquo;s &amp;ldquo;the best of&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Run OpenVPN on non-standard port with SELinux and Centos 6</title>
      <link>https://jacobtomlinson.dev/posts/2014/run-openvpn-on-non-standard-port-with-selinux-and-centos-6/</link>
      <pubDate>Mon, 08 Dec 2014 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2014/run-openvpn-on-non-standard-port-with-selinux-and-centos-6/</guid>
      <description>&lt;p&gt;I recently installed OpenVPN on a Centos 6 server but found that I couldn&amp;rsquo;t get&#xA;the service to start. Running &lt;code&gt;service openvpn start&lt;/code&gt; failed despite being&#xA;able to run &lt;code&gt;openvpn --config /path/to/config&lt;/code&gt; without errors.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to easy_install and pip through a proxy</title>
      <link>https://jacobtomlinson.dev/posts/2014/how-to-easy_install-and-pip-through-a-proxy/</link>
      <pubDate>Tue, 25 Nov 2014 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2014/how-to-easy_install-and-pip-through-a-proxy/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;re trying to install a Python package using easy_install or pip and you&#xA;connect to the internet via a proxy you&amp;rsquo;ll need to make a few changes to your&#xA;setup.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to install the vSphere 5.5 Client on Windows 8</title>
      <link>https://jacobtomlinson.dev/posts/2014/how-to-install-the-vsphere-5.5-client-on-windows-8/</link>
      <pubDate>Wed, 19 Nov 2014 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2014/how-to-install-the-vsphere-5.5-client-on-windows-8/</guid>
      <description>&lt;p&gt;If you&amp;rsquo;ve tried installing the vSphere 5.5 client on Windows 8 you may have&#xA;received the following error message&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simple HTML Redirect</title>
      <link>https://jacobtomlinson.dev/posts/2014/simple-html-redirect/</link>
      <pubDate>Fri, 14 Nov 2014 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2014/simple-html-redirect/</guid>
      <description>&lt;p&gt;I often find myself in need of a quick html redirect page. Most of the time I&#xA;use the &lt;a href=&#34;http://stackoverflow.com/a/5411601/1003288&#34;&gt;example from Stack Overflow&lt;/a&gt; but it involves changing the url in 3 places.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How I value media and entertainment</title>
      <link>https://jacobtomlinson.dev/posts/2014/how-i-value-media-and-entertainment/</link>
      <pubDate>Thu, 13 Nov 2014 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2014/how-i-value-media-and-entertainment/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been meaning to write about how I value media/entertainment and my thought&#xA;process when purchasing it. This is different to my normal style of article but&#xA;hopefully people will find it interesting.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to use an Xbox 360 controller with OS X Yosemite</title>
      <link>https://jacobtomlinson.dev/posts/2014/how-to-use-an-xbox-360-controller-with-os-x-yosemite/</link>
      <pubDate>Fri, 17 Oct 2014 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2014/how-to-use-an-xbox-360-controller-with-os-x-yosemite/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; There is a newer version of this article, see &lt;a href=&#34;https://jacobtomlinson.dev/gaming/2016/02/24/use-xbox-360-pad-with-el-capitan/&#34;&gt;How to use an Xbox 360 controller with OS X El Capitan&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Learn How to Build Cool Things With Weather Data in Python</title>
      <link>https://jacobtomlinson.dev/talks/2014-09-30-mozfest-learn-how-to-build-cool-things-with-weather-data-in-python/</link>
      <pubDate>Tue, 30 Sep 2014 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/talks/2014-09-30-mozfest-learn-how-to-build-cool-things-with-weather-data-in-python/</guid>
      <description></description>
    </item>
    <item>
      <title>What is semalt and why are they in my analytics?</title>
      <link>https://jacobtomlinson.dev/posts/2014/what-is-semalt-and-why-are-they-in-my-analytics/</link>
      <pubDate>Wed, 03 Sep 2014 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2014/what-is-semalt-and-why-are-they-in-my-analytics/</guid>
      <description>&lt;p&gt;You may be among the many people having their Google Analytics stats skewed by&#xA;fake referrals from semalt.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to stop Google from scanning my site</title>
      <link>https://jacobtomlinson.dev/posts/2014/how-to-stop-google-from-scanning-my-site/</link>
      <pubDate>Thu, 28 Aug 2014 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2014/how-to-stop-google-from-scanning-my-site/</guid>
      <description>&lt;p&gt;Sometimes there may be occasions where you don&amp;rsquo;t want Google (and other search engines)&#xA;to scan some or all of your website.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Amazon S3: s3cmd put ([Errno 32] Broken pipe)</title>
      <link>https://jacobtomlinson.dev/posts/2014/amazon-s3-s3cmd-put-errno-32-broken-pipe/</link>
      <pubDate>Thu, 31 Jul 2014 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2014/amazon-s3-s3cmd-put-errno-32-broken-pipe/</guid>
      <description>&lt;p&gt;Recently I decided to use Amazon’s S3 as another location to store some of my server backups. However I found when testing that I was unable to upload my backup tarballs to S3. I ended up with the following errors.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to install OS X Yosemite Developer Preview Beta in Virtualbox</title>
      <link>https://jacobtomlinson.dev/posts/2014/how-to-install-os-x-yosemite-developer-preview-beta-in-virtualbox/</link>
      <pubDate>Sat, 07 Jun 2014 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2014/how-to-install-os-x-yosemite-developer-preview-beta-in-virtualbox/</guid>
      <description>&lt;p&gt;Like me you may be excited about the Developer Preview Beta of OS X 10.10 Yosemite and want to try it out, but you don&amp;rsquo;t want to deal with a buggy system between now and the general release. If that&amp;rsquo;s the case you&amp;rsquo;ll want to install Yosemite as a virtual machine on your Mac. Here&amp;rsquo;s how I&amp;rsquo;ve done it on mine using VirtualBox.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to use text expansion in OS X 10.9 Mavericks</title>
      <link>https://jacobtomlinson.dev/posts/2014/how-to-use-text-expansion-in-os-x-10.9-mavericks/</link>
      <pubDate>Thu, 15 May 2014 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2014/how-to-use-text-expansion-in-os-x-10.9-mavericks/</guid>
      <description>&lt;p&gt;&#xA;&lt;img src=&#34;X1qkC2J.png&#34; alt=&#34;Text Expansion&#34;&gt;&#xA;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Since the upgrade to OS X 10.9 Mavericks and iOS 7 you may have noticed that your text expansion shortcuts from iOS have found their way onto your Mac. Thanks to iCloud all of your text shortcuts are now synchronised between your devices.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to make screen recordings in OS X Mavericks 10.9</title>
      <link>https://jacobtomlinson.dev/posts/2014/how-to-make-screen-recordings-in-os-x-mavericks-10.9/</link>
      <pubDate>Wed, 14 May 2014 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2014/how-to-make-screen-recordings-in-os-x-mavericks-10.9/</guid>
      <description>&lt;p&gt;Did you know that you don&amp;rsquo;t need any additional software to make high quality, watermark free screen recordings in OS X Mavericks 10.9? Well this feature exists and it&amp;rsquo;s in a slightly unexpected place … QuickTime Player.&lt;/p&gt;</description>
    </item>
    <item>
      <title>NASA Space Apps Challenge 2014 Roundup</title>
      <link>https://jacobtomlinson.dev/posts/2014/nasa-space-apps-challenge-2014-roundup/</link>
      <pubDate>Fri, 25 Apr 2014 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2014/nasa-space-apps-challenge-2014-roundup/</guid>
      <description>&lt;p&gt;A couple of weeks ago I attended a hackathon hosted by the Met Office as part of the &lt;a title=&#34;2014 NASA Space Apps Challenge Official Website&#34; href=&#34;https://2014.spaceappschallenge.org/&#34; target=&#34;_blank&#34;&gt;2014 NASA Space Apps Challenge&lt;/a&gt;. It was a weekend event and the basic idea was to meet with other technology professionals/enthusiasts, form teams with these like minded folk, select a challenge from a long list of challenges set by NASA and solve it during the weekend.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to prepare for a hackathon</title>
      <link>https://jacobtomlinson.dev/posts/2014/how-to-prepare-for-a-hackathon/</link>
      <pubDate>Tue, 08 Apr 2014 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2014/how-to-prepare-for-a-hackathon/</guid>
      <description>&lt;p&gt;So this weekend I’ll be taking part in the &lt;a href=&#34;https://2014.spaceappschallenge.org/&#34; title=&#34;2014 NASA Space Apps Challenge&#34;&gt;2014 NASA Space Apps Challenge&lt;/a&gt;. This time around I’ll be leading a team, rather than just joining one on the day, so I feel like I have to be extra prepared. Here is a checklist of all the things you should do before going to a hackathon/codeathon.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Python script: Recursively remove empty folders/directories</title>
      <link>https://jacobtomlinson.dev/posts/2014/python-script-recursively-remove-empty-folders/directories/</link>
      <pubDate>Sun, 16 Feb 2014 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2014/python-script-recursively-remove-empty-folders/directories/</guid>
      <description>&lt;p&gt;So as part of a script I’m writing I needed the ability to recursively remove empty folders/directories from a filesystem. After a bit of googling I found &lt;a title=&#34;Original python script&#34; href=&#34;http://dev.enekoalonso.com/2011/08/06/python-script-remove-empty-folders&#34; target=&#34;_blank&#34;&gt;this very useful script&lt;/a&gt; by &lt;a title=&#34;Eneko Alonso&#39;s Blog&#34; href=&#34;http://dev.enekoalonso.com&#34; target=&#34;_blank&#34;&gt;Eneko Alonso&lt;/a&gt;. However the script isn’t really in a usable state for what I want so I decided to make a few changes to it and publish it on GitHub.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Should I buy a cheap upgraded/reformatted SDHC micro SD card on eBay?</title>
      <link>https://jacobtomlinson.dev/posts/2014/should-i-buy-a-cheap-upgraded/reformatted-sdhc-micro-sd-card-on-ebay/</link>
      <pubDate>Thu, 23 Jan 2014 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2014/should-i-buy-a-cheap-upgraded/reformatted-sdhc-micro-sd-card-on-ebay/</guid>
      <description>&lt;p&gt;Short answer – &lt;em&gt;&lt;strong&gt;No!&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now I must admit I am one for buying rubbish on eBay and usually fancy myself as someone who can spot the difference between a bargain and a scam. However this time I almost got scammed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Convert tweet hashtags, at-tags and urls to links with PHP and Regular Expressions</title>
      <link>https://jacobtomlinson.dev/posts/2014/convert-tweet-hashtags-at-tags-and-urls-to-links-with-php-and-regular-expressions/</link>
      <pubDate>Wed, 22 Jan 2014 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2014/convert-tweet-hashtags-at-tags-and-urls-to-links-with-php-and-regular-expressions/</guid>
      <description>&lt;p&gt;Now of course if you&amp;rsquo;re using the &lt;a title=&#34;Twitter API&#34; href=&#34;https://dev.twitter.com/&#34; target=&#34;_blank&#34;&gt;Twitter API&lt;/a&gt; you can use Twitter entities but in this tutorial we&amp;rsquo;re going to use &lt;a title=&#34;Regular Expressions&#34; href=&#34;http://en.wikipedia.org/wiki/Regular_expression&#34; target=&#34;_blank&#34;&gt;regular expressions&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fixing VirtualBox verr_supdrv_component_not_found when selecting bridged networking on OS X 10.9</title>
      <link>https://jacobtomlinson.dev/posts/2014/fixing-virtualbox-verr_supdrv_component_not_found-when-selecting-bridged-networking-on-os-x-10.9/</link>
      <pubDate>Fri, 10 Jan 2014 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2014/fixing-virtualbox-verr_supdrv_component_not_found-when-selecting-bridged-networking-on-os-x-10.9/</guid>
      <description>&lt;p&gt;While installing CentOS in VirtualBox (version 4.2.4) on OS X (version 10.9.1) I came across the following error message when selecting bridged networking&lt;/p&gt;</description>
    </item>
    <item>
      <title>Google Charts IE7 IE8 Issue: Date formatting problem</title>
      <link>https://jacobtomlinson.dev/posts/2013/google-charts-ie7-ie8-issue-date-formatting-problem/</link>
      <pubDate>Thu, 28 Nov 2013 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2013/google-charts-ie7-ie8-issue-date-formatting-problem/</guid>
      <description>&lt;p&gt;Just a quick post about an issue I’ve had with Google Charts on IE7/8.&lt;/p&gt;&#xA;&lt;p&gt;When viewing my page in Firefox or Chrome my graph displayed as expected.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mac OS X Terminal Theme: Piperita</title>
      <link>https://jacobtomlinson.dev/posts/2013/mac-os-x-terminal-theme-piperita/</link>
      <pubDate>Thu, 17 Oct 2013 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2013/mac-os-x-terminal-theme-piperita/</guid>
      <description>&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt; – This project is now at version 2. See the &lt;a href=&#34;https://github.com/killfall/terminal-piperita&#34; title=&#34;Piperita GitHub&#34;&gt;Piperita GitHub page&lt;/a&gt; for up to date documentation and information.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bootcamp Windows 7 on a 2011 MacBook Pro without a SuperDrive</title>
      <link>https://jacobtomlinson.dev/posts/2013/bootcamp-windows-7-on-a-2011-macbook-pro-without-a-superdrive/</link>
      <pubDate>Mon, 30 Sep 2013 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2013/bootcamp-windows-7-on-a-2011-macbook-pro-without-a-superdrive/</guid>
      <description>&lt;p&gt;So recently I swapped out the SuperDrive in my early 2011 MacBook pro for an additional HDD caddy. I then moved my 1TB HDD into the caddy and put a new SSD in the HDD slot. As I was messing around with hard drives I decided to go for a fresh install of OS X and Windows on the SSD.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fixing &#34;ERROR: Error 35: error:14077458:SSL routines:SSL23_GET_SERVER_HELLO: reason(1112)&#34;</title>
      <link>https://jacobtomlinson.dev/posts/2013/fixing-error-error-35-error14077458ssl-routinesssl23_get_server_hello-reason1112/</link>
      <pubDate>Tue, 13 Aug 2013 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2013/fixing-error-error-35-error14077458ssl-routinesssl23_get_server_hello-reason1112/</guid>
      <description>&lt;p&gt;So the other day I came across the following error when using the munki configuration tool for mac.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Sort top command by cpu usage and set to default in OS X</title>
      <link>https://jacobtomlinson.dev/posts/2013/sort-top-command-by-cpu-usage-and-set-to-default-in-os-x/</link>
      <pubDate>Tue, 04 Jun 2013 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2013/sort-top-command-by-cpu-usage-and-set-to-default-in-os-x/</guid>
      <description>&lt;p&gt;As I come from a linux background but seem to spend more and more of my free time using OS X I keep noticing little differences in the way the command line works on a mac. One difference which as been bugging me recently is that way that the &lt;em&gt;top&lt;/em&gt; command orders itself. I’m used to having it ordered by highest processor usage at the top on linux, which I find the most useful as generally when I run top I’m looking to see what is chewing up my cpu. However when you run top in OS X it orders by pid, so the newest processes are at the top.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why is there no space in the MySQL password parameter?</title>
      <link>https://jacobtomlinson.dev/posts/2013/why-is-there-no-space-in-the-mysql-password-parameter/</link>
      <pubDate>Fri, 31 May 2013 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2013/why-is-there-no-space-in-the-mysql-password-parameter/</guid>
      <description>&lt;p&gt;After troubleshooting a MySQL issue with a colleague we began discussing a &amp;ldquo;feature&amp;rdquo;&#xA;of the MySQL command line which insists that you don&amp;rsquo;t put a space in the password parameter&#xA;when using the short parameter. We both felt that it was rather inconsistent to allow the usage of&#xA;&lt;code&gt;-h hostname&lt;/code&gt; or &lt;code&gt;-u username&lt;/code&gt; but insist on &lt;code&gt;-ppassword&lt;/code&gt; instead of &lt;code&gt;-p password&lt;/code&gt;. You can of course&#xA;use the full parameter &lt;code&gt;--password=password&lt;/code&gt; but as most people use the shorthand commands it&#xA;just seems slightly unintuitive.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using the AddThis Share Buttons wordpress plugin in a custom theme</title>
      <link>https://jacobtomlinson.dev/posts/2013/using-the-addthis-share-buttons-wordpress-plugin-in-a-custom-theme/</link>
      <pubDate>Sun, 17 Mar 2013 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2013/using-the-addthis-share-buttons-wordpress-plugin-in-a-custom-theme/</guid>
      <description>&lt;p&gt;There is an undocumented function for adding a custom AddThis widget to your Wordpress theme when using the &lt;a title=&#34;Add This Share Buttons WordPress Plugin&#34; href=&#34;http://wordpress.org/extend/plugins/addthis/&#34; target=&#34;_blank&#34;&gt;Add This Share Buttons plugin&lt;/a&gt;, so I thought I would document it here.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Convincing Paypal Phishing Email</title>
      <link>https://jacobtomlinson.dev/posts/2013/convincing-paypal-phishing-email/</link>
      <pubDate>Sat, 02 Mar 2013 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2013/convincing-paypal-phishing-email/</guid>
      <description>&lt;p&gt;So I woke up yesterday morning to find a receipt from Paypal for $149.49 on my iPhone. I haven’t bought anything for $149.49 so right away I was worried that my Paypal account had been broken into. The first thing I did was to log into my Paypal account on my laptop to check to see more information about the transaction. When logging in there was no trace of this transaction.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Has Stack Overflow been hijacked?</title>
      <link>https://jacobtomlinson.dev/posts/2013/has-stack-overflow-been-hijacked/</link>
      <pubDate>Wed, 27 Feb 2013 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2013/has-stack-overflow-been-hijacked/</guid>
      <description>&lt;p&gt;Something funny seems to be happening with Google and Stack Overflow.&lt;/p&gt;&#xA;&lt;p&gt;I first noticed this last night when on my Macbook at home. I went to &lt;a href=&#34;https://www.google.co.uk&#34;&gt;www.google.co.uk&lt;/a&gt;, typed in &amp;ldquo;stackoverflow&amp;rdquo; and was presented by the usual page. However I noticed that the url displyed under the link on the search results said &lt;a href=&#34;https://www.doioig.gov&#34;&gt;www.doioig.gov&lt;/a&gt;. When clicking the link it took me to &lt;a href=&#34;https://www.doioig.gov&#34;&gt;www.doioig.gov&lt;/a&gt; instead of &lt;a href=&#34;https://www.stackoverflow.com&#34;&gt;www.stackoverflow.com&lt;/a&gt;. I thought to myself that this was probably just a temporary issue and went to the correct url myself.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SSH without a password on OS X with ssh-copy-id</title>
      <link>https://jacobtomlinson.dev/posts/2013/ssh-without-a-password-on-os-x-with-ssh-copy-id/</link>
      <pubDate>Thu, 24 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2013/ssh-without-a-password-on-os-x-with-ssh-copy-id/</guid>
      <description>&lt;h3 id=&#34;what-is-ssh-copy-id&#34;&gt;What is ssh-copy-id?&lt;/h3&gt;&#xA;&lt;p&gt;ssh-copy-id is a script that uses ssh to log into a remote machine (presumably using a login password,&#xA;so password authentication should be enabled, unless you’ve done some clever use of multiple&#xA;identities) It also changes the permissions of the remote user’s home, &lt;code&gt;~/.ssh&lt;/code&gt;, and&#xA;&lt;code&gt;~/.ssh/authorized_keys&lt;/code&gt; to remove group writability (which would otherwise prevent you from logging in,&#xA;if the remote &lt;code&gt;sshd&lt;/code&gt; has &lt;code&gt;StrictModes&lt;/code&gt; set in its configuration).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Album Review: Muse 2nd Law</title>
      <link>https://jacobtomlinson.dev/posts/2012/album-review-muse-2nd-law/</link>
      <pubDate>Thu, 11 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2012/album-review-muse-2nd-law/</guid>
      <description>&lt;p&gt;&#xA;&lt;img src=&#34;JqCKBKD.png&#34; alt=&#34;MUSE Second Law&#34;&gt;&#xA;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Well I just got &amp;ldquo;2nd Law&amp;rdquo; by Muse and as I&amp;rsquo;m a big Muse fan I thought I&amp;rsquo;d write a quick review of it. Up until now I&amp;rsquo;ve enjoyed all of Muse&amp;rsquo;s albums with the exception of album 5 &amp;ldquo;The Resistance&amp;rdquo; which I felt was a little too experimental for my liking.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using background-position and sprite sheets to stop icon hover flicker</title>
      <link>https://jacobtomlinson.dev/posts/2012/using-background-position-and-sprite-sheets-to-stop-icon-hover-flicker/</link>
      <pubDate>Tue, 18 Sep 2012 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2012/using-background-position-and-sprite-sheets-to-stop-icon-hover-flicker/</guid>
      <description>&lt;p&gt;While updating the theme on this blog I added some links to my social websites. I made these links in the form of images which were black and white and become coloured when hovered over. To create these icons I created empty divs which would then be styled in CSS.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Incorrect Gmail password when using exchange on iPhone</title>
      <link>https://jacobtomlinson.dev/posts/2012/incorrect-gmail-password-when-using-exchange-on-iphone/</link>
      <pubDate>Wed, 12 Sep 2012 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2012/incorrect-gmail-password-when-using-exchange-on-iphone/</guid>
      <description>&lt;h3 id=&#34;the-problem&#34;&gt;The Problem&lt;/h3&gt;&#xA;&lt;p&gt;Recently I&amp;rsquo;ve tried playing around a little with the email account settings on my&#xA;iPhone to try and get as much to sync as possible with some of my other accounts.&#xA;One thing I did was to change Gmail from the standard &amp;lsquo;Gmail&amp;rsquo; setting that you get&#xA;on iOS to the &amp;lsquo;Microsoft Exchange&amp;rsquo; setting as recommended by Google.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to query a database with AJAX and display as a tooltip</title>
      <link>https://jacobtomlinson.dev/posts/2012/how-to-query-a-database-with-ajax-and-display-as-a-tooltip/</link>
      <pubDate>Tue, 11 Sep 2012 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2012/how-to-query-a-database-with-ajax-and-display-as-a-tooltip/</guid>
      <description>&lt;p&gt;This post began as an answer on Stack Overflow to a question on ‘&lt;a href=&#34;http://stackoverflow.com/questions/12291654/netflix-style-tooltip-with-ajax-jquery-php-and-mysql/12366841#12366841&#34; target=&#34;_blank&#34;&gt;How to query a database with AJAX and display as a tooltip&lt;/a&gt;‘. I have put the answer here for future reference.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Download Festival 2012 Timetable</title>
      <link>https://jacobtomlinson.dev/posts/2012/download-festival-2012-timetable/</link>
      <pubDate>Fri, 01 Jun 2012 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2012/download-festival-2012-timetable/</guid>
      <description>&lt;p&gt;Download have now released the times for Download Festival 2012 in the form of an app. The only problem with this is it’s not exactly clear and easy to see who is clashing or to make a plan. For my own benefit and anyone else who wants it I’ve put the timetable into a spreadsheet and put it in google docs.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Shrinking SQL logs</title>
      <link>https://jacobtomlinson.dev/posts/2012/shrinking-sql-logs/</link>
      <pubDate>Thu, 23 Feb 2012 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2012/shrinking-sql-logs/</guid>
      <description>&lt;p&gt;While reading some articles about minimizing the size of data while leaving the data fully searchable I came across a lot of info about finding common data and replacing it with pointers to a dictionary or store of common strings. After thinking about it for a while I thought I would just write a little post about a way I try and minimize the size of databases in projects that I work on. Now I’m going to start with an example of a very bad database I wrote a while back and how I used relational tables to shrink the size considerably. Now if you know anything about databases you should find all of this quite obvious but if you don’t then it may be worth taking note of.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The lesser known browser war</title>
      <link>https://jacobtomlinson.dev/posts/2012/the-lesser-known-browser-war/</link>
      <pubDate>Tue, 07 Feb 2012 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2012/the-lesser-known-browser-war/</guid>
      <description>&lt;p&gt;Well it’s been quite a while since I’ve written a post on here but due to a suggestion from a friend I’m going to try and make an effort to write more about the projects I work on and the random thoughts that fall out of my brain. A few things have changed since my last post but the main thing would be my job. I am now a software test analyst, aka that guy who has to pick fault with your hard work. I’m enjoying this position and it is actually quite nice finding bugs and knowing you’re not going to have to be the one that fixes them.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Apple game center hacks</title>
      <link>https://jacobtomlinson.dev/posts/2011/apple-game-center-hacks/</link>
      <pubDate>Sat, 04 Jun 2011 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2011/apple-game-center-hacks/</guid>
      <description>&lt;p&gt;Ok I’m currently on holiday with my girlfriend in turkey. It started getting a bit too hot in the sun a few days ago so we went into the hotel lobby and found free wifi. We went to our room and both got out our iOS devices and went to the lobby to catch up with Facebook etc.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Additional HDD Philosphy</title>
      <link>https://jacobtomlinson.dev/posts/2010/additional-hdd-philosphy/</link>
      <pubDate>Sat, 25 Dec 2010 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2010/additional-hdd-philosphy/</guid>
      <description>&lt;p&gt;A friend has asked me what I think the best way for him to set up his new HDD is. He currently has a 500GB Internal HDD and has purchased a second one. So here is what I would do.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Guide to repairing TFT monitor scratches</title>
      <link>https://jacobtomlinson.dev/posts/2010/guide-to-repairing-tft-monitor-scratches/</link>
      <pubDate>Thu, 23 Dec 2010 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2010/guide-to-repairing-tft-monitor-scratches/</guid>
      <description>&lt;p&gt;About a year and a half ago I was working on a guitar modification and dropped part of the modified casing on my laptop. It made a pretty good scratch on the bottom of my monitor about an inch long (2.54cm for you metrics out there). It has mildly bothered me since then but I&amp;rsquo;ve never done anything about it. But this evening I decided to google around and see if there was any kind of specialist product that could be purchased and used to fill in the scratch. I read a few blogs and sites until I found the most amazing solution ever.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ubuntu setup 2010</title>
      <link>https://jacobtomlinson.dev/posts/2010/ubuntu-setup-2010/</link>
      <pubDate>Wed, 15 Dec 2010 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2010/ubuntu-setup-2010/</guid>
      <description>&lt;p&gt;I am now happy with my Ubuntu installation. After a small hiccup earlier where it decided not to do an update properly, disable my mouse and keyboard and then ask for a password for them to be re-enabled. Solved with a trusty USB mouse and onscreen keyboard. I have managed to find a PHP/HTML/JS editor to my liking. I have looked through a few more since my post last night and have settled on Komodo. It highlights my code properly, auto completes functions and even highlights closing tags when you select the opening one which is going to make my life with tables and divs a hell of a lot easier. Definitly a viable replacement for Dreamweaver as the only thing I missed was the colour scheme which has easily been remedied in the settings.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Back to Ubuntu</title>
      <link>https://jacobtomlinson.dev/posts/2010/back-to-ubuntu/</link>
      <pubDate>Tue, 14 Dec 2010 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/posts/2010/back-to-ubuntu/</guid>
      <description>&lt;p&gt;For as long as I&amp;rsquo;ve been interested in computers I&amp;rsquo;ve been interested&#xA;in linux. I was introduced to it by a friend at school when I was 13, we installed&#xA;mandrake in vmware. We only admired it for a few minutes and then deleted it. He&#xA;later introduced me to ubuntu and he began using it as his only operating system&#xA;and still does to this day. I personally couldn&amp;rsquo;t move from Windows mainly&#xA;due to gaming but also because I can&amp;rsquo;t stand to lose photoshop, dreamweaver&#xA;etc. I also have a problem with wine, vmware and virtualbox, why emulate windows&#xA;when you can just run it.&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://jacobtomlinson.dev/calendar/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/calendar/</guid>
      <description>&lt;html&gt;&#xA;&#xA;&lt;head&gt;&#xA;    &lt;meta http-equiv=&#34;refresh&#34; content=&#34;3; URL=https://outlook.office.com/bookwithme/user/3b12371cf89b40c0bc48051234d60b64@nvidia.com?anonymous&amp;ep=plink&#34; /&gt;&#xA;&lt;/head&gt;&#xA;&#xA;&lt;body&gt;&#xA;    &lt;p&gt;&#xA;        Redirecting to Microsoft Bookings.&#xA;    &lt;/p&gt;&#xA;    &lt;p&gt;&#xA;        If you are not redirected in three seconds, &lt;a href=&#34;https://outlook.office.com/bookwithme/user/3b12371cf89b40c0bc48051234d60b64@nvidia.com?anonymous&amp;ep=plink&#34;&gt;click here&lt;/a&gt;.&#xA;    &lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://jacobtomlinson.dev/links/euroscipy-2025/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/links/euroscipy-2025/</guid>
      <description>&lt;html&gt;&#xA;&#xA;&lt;head&gt;&#xA;    &lt;meta http-equiv=&#34;refresh&#34; content=&#34;3; URL=https://gist.github.com/jacobtomlinson/30ad4126d52e62bdd13f3a05b4d8408c&#34; /&gt;&#xA;&lt;/head&gt;&#xA;&#xA;&lt;body&gt;&#xA;    &lt;p&gt;&#xA;        Redirecting to EuroSciPy 2025 Tutorial.&#xA;    &lt;/p&gt;&#xA;    &lt;p&gt;&#xA;        If you are not redirected in three seconds, &lt;a href=&#34;https://gist.github.com/jacobtomlinson/30ad4126d52e62bdd13f3a05b4d8408c&#34;&gt;click here&lt;/a&gt;.&#xA;    &lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://jacobtomlinson.dev/newsletter/confirmed/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/newsletter/confirmed/</guid>
      <description>&lt;div style=&#34;width: 100%; text-align: center;&#34;&gt;&#xA;&#xA;    &lt;p&gt;Thank you for confirming your email address, keep your eyes peeled for your first issue.&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://jacobtomlinson.dev/newsletter/subscribed/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/newsletter/subscribed/</guid>
      <description>&lt;div style=&#34;width: 100%; text-align: center;&#34;&gt;&#xA;&#xA;    &lt;p&gt;Thank you for subscribing! Please check your email and click the link in the confirmation email to complete your&#xA;        subscription.&lt;/p&gt;</description>
    </item>
    <item>
      <title></title>
      <link>https://jacobtomlinson.dev/newsletter/unsubscribed/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/newsletter/unsubscribed/</guid>
      <description>&lt;div style=&#34;width: 100%; text-align: center;&#34;&gt;&#xA;&#xA;    &lt;p&gt;You have been unsubscribed, sorry to see you go!&lt;/p&gt;&#xA;&#xA;    &lt;img src=&#34;https://jacobtomlinson.dev/images/memes/goodbye.gif&#34; alt=&#34;Woody from Toy Story saying &#39;So long partner&#39;&#34; /&gt;&#xA;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Cookies</title>
      <link>https://jacobtomlinson.dev/cookies/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://jacobtomlinson.dev/cookies/</guid>
      <description>&lt;div style=&#34;width: 100%; text-align: center;&#34;&gt;&#xA;&#xA;    &lt;p&gt;This site doesn&#39;t use cookies, sorry Cookie Monster.&lt;/p&gt;&#xA;&#xA;    &lt;img src=&#34;https://jacobtomlinson.dev/images/memes/cookiemonster.png&#34; title=&#34;Sad cookie monster&#34; /&gt;&#xA;&#xA;&lt;/div&gt;</description>
    </item>
  </channel>
</rss>
