<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Colin Webb</title>
    <link rel="self" type="application/atom+xml" href="https://cjwebb.com/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://cjwebb.com"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2024-04-14T00:00:00+00:00</updated>
    <id>https://cjwebb.com/atom.xml</id>
    <entry xml:lang="en">
        <title>AWS Bedrock with Rust</title>
        <published>2024-04-14T00:00:00+00:00</published>
        <updated>2024-04-14T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/aws-bedrock-with-rust/"/>
        <id>https://cjwebb.com/aws-bedrock-with-rust/</id>
        
        <summary type="html">&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;cjwebb.com&#x2F;aws-bedrock-with-rust&#x2F;ferris-image.webp&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;AWS Bedrock is a fully-managed service that provides LLM interactions and has &lt;a href=&quot;https:&#x2F;&#x2F;docs.aws.amazon.com&#x2F;bedrock&#x2F;latest&#x2F;userguide&#x2F;models-supported.html&quot;&gt;models from lots of leading organisations&lt;&#x2F;a&gt;. In my opinion, it&#x27;s a great way to get started with LLMs if you&#x27;re using AWS since there&#x27;s no worry about infrastructure scaling.&lt;&#x2F;p&gt;
&lt;p&gt;This post is a short description of how to get AWS Bedrock responding to your Rust code. It&#x27;s a simple example, but should point the way forward for more complex interactions.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Parallel Monte Carlo Simulation in Rust</title>
        <published>2024-02-28T00:00:00+00:00</published>
        <updated>2024-02-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/parallel-monte-carlo-rust/"/>
        <id>https://cjwebb.com/parallel-monte-carlo-rust/</id>
        
        <summary type="html">&lt;p&gt;My last blog post was &lt;a href=&quot;&#x2F;simple-monte-carlo-in-rust&quot;&gt;Simple Monte Carlo Simulations in Rust&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;It was single-threaded, and I quickly moved onto parallelizing it. Since the calculations were independent, until the end, it could be described as an &#x27;embarassingly parallel&#x27; problem.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Simple Monte Carlo Simulation in Rust</title>
        <published>2024-02-16T00:00:00+00:00</published>
        <updated>2024-02-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/simple-monte-carlo-in-rust/"/>
        <id>https://cjwebb.com/simple-monte-carlo-in-rust/</id>
        
        <summary type="html">&lt;p&gt;Monte Carlo simulations are often used model the probability of different outcomes. They work by generating random values, passing them into a model, and then averaging the results.&lt;&#x2F;p&gt;
&lt;p&gt;The simplest Monte Carlo simulation, and a great way to start, is by using the technique to estimate the value of Pi.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Local LLM Development with Ollama</title>
        <published>2023-12-19T00:00:00+00:00</published>
        <updated>2023-12-19T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/ollama-local-development/"/>
        <id>https://cjwebb.com/ollama-local-development/</id>
        
        <summary type="html">&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;cjwebb.com&#x2F;ollama-local-development&#x2F;llama.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Large Language Models are hot stuff at present. Using them, and integrating them into workflows, is still an open-area of investigation for many people and organisations.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;m currently using VSCode, the &lt;a href=&quot;https:&#x2F;&#x2F;continue.dev&#x2F;&quot;&gt;Continue&lt;&#x2F;a&gt; &#x27;open-source autopilot&#x27; extension, and &lt;a href=&quot;https:&#x2F;&#x2F;ollama.ai&#x2F;&quot;&gt;Ollama&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Using Github Actions for building Rust Docker Images on ARM </title>
        <published>2023-11-15T00:00:00+00:00</published>
        <updated>2023-11-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/rust-github-actions-on-arm/"/>
        <id>https://cjwebb.com/rust-github-actions-on-arm/</id>
        
        <summary type="html">&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;cjwebb.com&#x2F;rust-github-actions-on-arm&#x2F;crab_with_tools.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Setting up CI for Rust with Github Actions is pretty easy, but there are a few gotchas. &lt;&#x2F;p&gt;
&lt;p&gt;This post will walk through setting up a basic CI pipeline for a Rust project, cross-compile to ARM, and build a Docker image.&lt;&#x2F;p&gt;
&lt;p&gt;I like to deploy hobby-projects on ARM as it is usually cheaper, and I have a Macbook so there&#x27;s less cross-compilation to do.&lt;&#x2F;p&gt;
&lt;p&gt;We&#x27;ll follow a pattern of building Rust, and then copying the binary into a Docker image. There are other patterns, such as building inside Docker using multi-stage builds, but there are unresolved issues with caching. This way is simpler, and works well.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>An Introduction to Demand Response in Electrical Energy Markets</title>
        <published>2023-07-31T00:00:00+00:00</published>
        <updated>2023-07-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/intro-to-demand-response/"/>
        <id>https://cjwebb.com/intro-to-demand-response/</id>
        
        <summary type="html">&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;cjwebb.com&#x2F;intro-to-demand-response&#x2F;karsten-wurth-0w-uTa0Xz7w-unsplash.jpg&quot; alt=&quot;Photo by @karsten_wuerth on Unsplash&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Demand Response is a mechanism to help balance an electricity grid. Typically, it involves incentives (economic or otherwise) for consumers to move their demand to when supply is plentiful. For example, to move electricity demand from peak times to off-peak times.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Gravity Batteries At Home?</title>
        <published>2023-06-29T00:00:00+00:00</published>
        <updated>2023-06-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/gravity-batteries-at-home/"/>
        <id>https://cjwebb.com/gravity-batteries-at-home/</id>
        
        <summary type="html">&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;cjwebb.com&#x2F;gravity-batteries-at-home&#x2F;michael-barnes-ztuh3f37d1g-unsplash.jpg&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Gravity batteries are a renewable energy storage mechanism, still being developed for the mainstream. In theory, they are very similar to &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Pumped-storage_hydroelectricity&quot;&gt;pumped hydroelectric&lt;&#x2F;a&gt;. In times of low-demand and cheaper electricity, water is pumped up a hill into a reservoir. When electricity demand is high, and price is high, they let the water fall through a generator using the force of gravity.&lt;&#x2F;p&gt;
&lt;p&gt;Gravity batteries are another take on this principle; store energy when it is cheap and plentiful and generate electricity when it is not - through using gravity.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>AWS Lambda with Rust</title>
        <published>2023-05-17T00:00:00+00:00</published>
        <updated>2023-05-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/aws-lambda-with-rust/"/>
        <id>https://cjwebb.com/aws-lambda-with-rust/</id>
        
        <summary type="html">&lt;p&gt;AWS Lambda has supported custom runtimes using Docker images for a long time now. Any language that can run in Docker, can run in AWS Lambda. Therefore, we can write AWS Lambda functions in Rust - a fun, and fast, language.&lt;&#x2F;p&gt;
&lt;p&gt;This quick guide gets you deploying a Rust Lambda using the AWS CLI.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>SCD via SQL</title>
        <published>2023-05-12T00:00:00+00:00</published>
        <updated>2023-05-12T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/scd-via-sql/"/>
        <id>https://cjwebb.com/scd-via-sql/</id>
        
        <summary type="html">&lt;p&gt;Slowly Changing Dimensions (SCD) is a data engineering technique to track changes in a record over time. They&#x27;re useful when changes are unpredictable, infrequent, and a historical vew of the data is needed.&lt;&#x2F;p&gt;
&lt;p&gt;SQL is ubiquitous in data engineering, and therefore it is the perfect tool to implement SCD with.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Fake Data With Python</title>
        <published>2023-03-29T00:00:00+00:00</published>
        <updated>2023-03-29T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/fake-data-with-python/"/>
        <id>https://cjwebb.com/fake-data-with-python/</id>
        
        <summary type="html">&lt;p&gt;Real data is best, but sometimes it&#x27;s not available - or it&#x27;s not allowed.&lt;&#x2F;p&gt;
&lt;p&gt;Fake data is useful for testing, and for prototyping. It&#x27;s also useful for generating data for demos, and for training models. Generating fake data is easy and quick.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Why I&#x27;m Writing</title>
        <published>2023-03-20T00:00:00+00:00</published>
        <updated>2023-03-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/why-im-writing/"/>
        <id>https://cjwebb.com/why-im-writing/</id>
        
        <summary type="html">&lt;p&gt;Why am I writing?&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;To practice communication.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Written analysis, documentation, and thought are powerful ways to communicate. Writing forces me to think, and to structure my thoughts. A clear structure enables clear communication.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Python Generators Cheatsheet</title>
        <published>2023-03-11T00:00:00+00:00</published>
        <updated>2023-03-11T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/python-generators-cheatsheet/"/>
        <id>https://cjwebb.com/python-generators-cheatsheet/</id>
        
        <summary type="html">&lt;p&gt;A quick cheatsheet showing Python&#x27;s generators, covering usage of &#x27;yield&#x27;, behaviour on raising Exceptions, and Generator Expressions.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Interesting Things - October 2022</title>
        <published>2022-10-05T00:00:00+00:00</published>
        <updated>2022-10-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/interesting-things-october-2022/"/>
        <id>https://cjwebb.com/interesting-things-october-2022/</id>
        
        <summary type="html">&lt;p&gt;In this edition of &lt;strong&gt;Interesting Things&lt;&#x2F;strong&gt; we&#x27;re covering the technology of the Metaverse.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve been reading Matthew Ball&#x27;s &lt;a href=&quot;https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;59064518-the-metaverse&quot;&gt;The Metaverse: And How It Will Revolutionize Everything&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Whether or not you believe the Metaverse is a thing that will exist, or should even exist, the technological challenges that need to be overcome are interesting.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Git Stash: The Basics</title>
        <published>2022-05-20T00:00:00+00:00</published>
        <updated>2022-05-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/simple-git-stash/"/>
        <id>https://cjwebb.com/simple-git-stash/</id>
        
        <summary type="html">&lt;p&gt;Git stash allows you to quickly push local changes to a stack-based storage area, thereby giving you a clean working state without creating commits or branches.&lt;&#x2F;p&gt;
&lt;p&gt;It is useful when manipulating previous commits, or prototyping with different changesets. Git stash only happens on your local machine and cannot be pushed to a remote server.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Amazon Resource Names (ARNs)</title>
        <published>2022-01-26T00:00:00+00:00</published>
        <updated>2022-01-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/amazon-resource-names/"/>
        <id>https://cjwebb.com/amazon-resource-names/</id>
        
        <summary type="html">&lt;p&gt;An Amazon Resource Name (ARN) uniquely identifies a thing in AWS. This is a quick recap on how they are structured.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Depth First Search vs Breadth First Search - A Recap</title>
        <published>2021-04-06T00:00:00+00:00</published>
        <updated>2021-04-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/dfs-bfs-recap/"/>
        <id>https://cjwebb.com/dfs-bfs-recap/</id>
        
        <summary type="html">&lt;p&gt;Depth First Search (DFS) and Breadth First Search (BFS) are two searching algorithms that traverse tree or graph data structures.&lt;&#x2F;p&gt;
&lt;p&gt;They are very similar in implementation and only differ in the choice of which node to visit next.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Recent Books I Have Read</title>
        <published>2021-03-15T00:00:00+00:00</published>
        <updated>2021-03-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/recent-book-reviews/"/>
        <id>https://cjwebb.com/recent-book-reviews/</id>
        
        <summary type="html">&lt;p&gt;Quick reviews of three books I&#x27;ve recently read.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;53479927-the-practice&quot;&gt;The Practice, by Seth Godin&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;18050143-zero-to-one&quot;&gt;Zero to One, by Peter Thiel and Blake Masters&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;12605157-the-100-startup&quot;&gt;The $100 Startup, by Chris Guillebeau&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>FFmpeg via Docker</title>
        <published>2020-11-08T00:00:00+00:00</published>
        <updated>2020-11-08T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/ffmpeg-docker/"/>
        <id>https://cjwebb.com/ffmpeg-docker/</id>
        
        <summary type="html">&lt;p&gt;I have &lt;a href=&quot;&#x2F;posts&#x2F;python-docker-ffmpeg-h264-mp4&quot;&gt;previously written&lt;&#x2F;a&gt; about using &lt;a href=&quot;https:&#x2F;&#x2F;www.ffmpeg.org&#x2F;about.html&quot;&gt;FFmpeg&lt;&#x2F;a&gt; to convert H264 into MP4, running in a Docker container.&lt;&#x2F;p&gt;
&lt;p&gt;Running desktop applications in Docker negates the need to install anything, and isolates processes more effectively than something like Brew would. I needed to use FFmpeg again this week, and so spent a little bit of time setting it up properly - using Docker. Jessie Frazelle wrote a post in 2015 named &lt;a href=&quot;https:&#x2F;&#x2F;blog.jessfraz.com&#x2F;post&#x2F;docker-containers-on-the-desktop&#x2F;&quot;&gt;Containers on the Desktop&lt;&#x2F;a&gt; that was the inspiration for doing this.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Solving Slow Tests</title>
        <published>2020-01-16T00:00:00+00:00</published>
        <updated>2020-01-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/solving-slow-tests/"/>
        <id>https://cjwebb.com/solving-slow-tests/</id>
        
        <summary type="html">&lt;p&gt;Everything has a cost. Some costs are obvious. Money costs, time costs, overhead costs. Most, but not all, apply to writing tests for your software.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Rebooting AI - Further Reading</title>
        <published>2019-10-18T00:00:00+00:00</published>
        <updated>2019-10-18T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/rebooting-ai-further-reading/"/>
        <id>https://cjwebb.com/rebooting-ai-further-reading/</id>
        
        <summary type="html">&lt;p&gt;I recently read &lt;a href=&quot;http:&#x2F;&#x2F;rebooting.ai&#x2F;&quot;&gt;Rebooting AI&lt;&#x2F;a&gt;, as book discussing how the recent focus on Deep Learning as the path towards Artificial General Intelligence is flawed. It was a good read, and made many interesting points. It left me wanting to learn more about other areas of AI, and luckily there was a &#x27;Suggested Reading&#x27; list at the end.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Thoughts on Ansible</title>
        <published>2019-09-07T00:00:00+00:00</published>
        <updated>2019-09-07T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/thoughts-on-ansible/"/>
        <id>https://cjwebb.com/thoughts-on-ansible/</id>
        
        <summary type="html">&lt;p&gt;I like Ansible, but it has flaws. I&#x27;m going to assume you know what &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Ansible_(software)&quot;&gt;Ansible&lt;&#x2F;a&gt; is, and that you have used it before.&lt;&#x2F;p&gt;
&lt;p&gt;Basic Ansible is amazing, compared to the alternatives. When the alternative is half-baked bash scripts that rely on special environmental state, and obscure notation that is used infrequently, it is not hard to better it. I&#x27;ve used other automation tools too. &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Puppet_(company)#Puppet&quot;&gt;Puppet&lt;&#x2F;a&gt; is the other automation tooling that I&#x27;ve spent considerable time with. Puppet and I did not agree with each other as it required me to learn hundreds of special syntax rules almost immediately.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Hakyll Live Reload</title>
        <published>2018-05-16T00:00:00+00:00</published>
        <updated>2018-05-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/hakyll-livereload/"/>
        <id>https://cjwebb.com/hakyll-livereload/</id>
        
        <summary type="html">&lt;p&gt;I use &lt;a href=&quot;http:&#x2F;&#x2F;nitoyon.github.io&#x2F;livereloadx&#x2F;&quot;&gt;LiveReloadX&lt;&#x2F;a&gt; to automatically reload the browser as I work on my Hakyll-generated blog. LiveReloadX, and most other automatic reloading utilities work by watching the file system and notifying something in the browser to refresh the page.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Python, Docker, and FFmpeg to convert H.264 to MP4</title>
        <published>2018-04-09T00:00:00+00:00</published>
        <updated>2018-04-09T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/python-docker-ffmpeg-h264-mp4/"/>
        <id>https://cjwebb.com/python-docker-ffmpeg-h264-mp4/</id>
        
        <summary type="html">&lt;p&gt;H264 is a codec. MP4 is a file container, which can contain H264. If you want to display H264 video on a web browser, it needs muxing into MP4 or another file container format.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Higher Kinded Play Framework</title>
        <published>2018-03-04T00:00:00+00:00</published>
        <updated>2018-03-04T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/higher-kinded-play-framework/"/>
        <id>https://cjwebb.com/higher-kinded-play-framework/</id>
        
        <summary type="html">&lt;p&gt;Higher order functions are functions that accept other functions as parameters. Higher kinded types are types that can accept other types as parameters. In Scala, the syntax &lt;code&gt;F[_]&lt;&#x2F;code&gt; is used to express that &lt;code&gt;F&lt;&#x2F;code&gt; is a higher-kinded type that can accept any type.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>TL;DR Neural Network Dynamics for Model-Based Deep Reinforcement Learning with Model-Free Fine-Tuning</title>
        <published>2017-12-05T00:00:00+00:00</published>
        <updated>2017-12-05T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/tldr-neural-network-dynamics/"/>
        <id>https://cjwebb.com/tldr-neural-network-dynamics/</id>
        
        <summary type="html">&lt;p&gt;This is a &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Wikipedia:Too_long;_didn%27t_read&quot;&gt;Too Long; Didn&#x27;t Read&lt;&#x2F;a&gt; summary of the paper &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;1708.02596&quot;&gt;Neural Network Dynamics for Model-Based Deep Reinforcement Learning with Model-Free Fine-Tuning&lt;&#x2F;a&gt;. Inspired by the &lt;a href=&quot;http:&#x2F;&#x2F;bair.berkeley.edu&#x2F;blog&#x2F;2017&#x2F;11&#x2F;30&#x2F;model-based-rl&#x2F;&quot;&gt;blog post on the same paper&lt;&#x2F;a&gt; published by the Berkeley Artifical Intelligence Research (BAIR) Lab last week.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Functional Programming with the Play Framework</title>
        <published>2017-12-01T00:00:00+00:00</published>
        <updated>2017-12-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/functional-play-framework/"/>
        <id>https://cjwebb.com/functional-play-framework/</id>
        
        <summary type="html">&lt;p&gt;Three ways to do functional programming when working with the Play Framework.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Moving to Hakyll</title>
        <published>2017-07-17T00:00:00+00:00</published>
        <updated>2017-07-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/moving-to-hakyll/"/>
        <id>https://cjwebb.com/moving-to-hakyll/</id>
        
        <summary type="html">&lt;p&gt;My blog previously used &lt;a href=&quot;http:&#x2F;&#x2F;octopress.org&#x2F;&quot;&gt;Octopress&lt;&#x2F;a&gt;, and I had wanted to stop using it for a while. There is nothing wrong with Octopress; it just didn&#x27;t fit well with me. It has a lot of features, so seems overcomplicated for my use-case. It&#x27;s also written in Ruby.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>DynamoDB with Scala Macros</title>
        <published>2017-01-02T00:00:00+00:00</published>
        <updated>2017-01-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/dynamodb-scala-macros/"/>
        <id>https://cjwebb.com/dynamodb-scala-macros/</id>
        
        <summary type="html">&lt;p&gt;I&#x27;ve spent the last year using &lt;a href=&quot;https:&#x2F;&#x2F;aws.amazon.com&#x2F;documentation&#x2F;dynamodb&#x2F;&quot;&gt;AWS DynamoDB&lt;&#x2F;a&gt; at work. When we initially searched for a Scala client for DynamoDB, we had the following criteria:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Good for Scala beginners&lt;&#x2F;li&gt;
&lt;li&gt;Up to date&lt;&#x2F;li&gt;
&lt;li&gt;Well documented&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Sadly, none of the Scala libraries available at that time matched all three criteria. The most up-to-date libraries were not suitable for a team starting out with Scala and DynamoDB. The most beginner-friendly libraries were out-of-date, and most only had superficial documentation.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Getting Started with Haskell&#x27;s Warp</title>
        <published>2016-12-16T00:00:00+00:00</published>
        <updated>2016-12-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/getting-started-with-haskells-warp/"/>
        <id>https://cjwebb.com/getting-started-with-haskells-warp/</id>
        
        <summary type="html">&lt;p&gt;I recently started playing with Haskell&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;www.aosabook.org&#x2F;en&#x2F;posa&#x2F;warp.html&quot;&gt;Warp&lt;&#x2F;a&gt; in my effort to learn Haskell. Warp is small and fast web server, and doesn&#x27;t come bundled with much. It also has no &amp;quot;magic&amp;quot; in it, which I think is a very good thing.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Learning Akka Streams</title>
        <published>2016-06-28T00:00:00+00:00</published>
        <updated>2016-06-28T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/learning-akka-streams/"/>
        <id>https://cjwebb.com/learning-akka-streams/</id>
        
        <summary type="html">&lt;p&gt;This blog post differs from my usual ones; I&#x27;m writing it as I learn something. As such, it is more of a story that contains errors and misunderstanding than a factual blog post.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>The Virtues of Side Projects</title>
        <published>2016-06-15T00:00:00+00:00</published>
        <updated>2016-06-15T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/the-virtues-of-side-projects/"/>
        <id>https://cjwebb.com/the-virtues-of-side-projects/</id>
        
        <summary type="html">&lt;p&gt;I write software for a living, and most of my side projects are software based too. I view side projects as a tool for learning. Learning by doing.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Using Elm in Octopress</title>
        <published>2016-01-01T00:00:00+00:00</published>
        <updated>2016-01-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/elm-in-octopress/"/>
        <id>https://cjwebb.com/elm-in-octopress/</id>
        
        <summary type="html">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;elm-lang.org&#x2F;&quot;&gt;Elm&lt;&#x2F;a&gt; is a functional programming language aimed at the browser. It aims to replace all HTML, CSS, and JavaScript code. It borrows a lot from Haskell, and promises that if your Elm code compiles, it will run without exceptions.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Using Play-Framework&#x27;s PathBindable</title>
        <published>2015-06-23T00:00:00+00:00</published>
        <updated>2015-06-23T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/play-framework-path-binders/"/>
        <id>https://cjwebb.com/play-framework-path-binders/</id>
        
        <summary type="html">&lt;p&gt;Using custom types in &lt;a href=&quot;https:&#x2F;&#x2F;www.playframework.com&#x2F;documentation&#x2F;2.4.x&#x2F;ScalaRouting&quot;&gt;Play Framework’s routes file&lt;&#x2F;a&gt; is a major win, and is not something obviously supported.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Cassandra TTL Is Per Column</title>
        <published>2015-03-02T00:00:00+00:00</published>
        <updated>2015-03-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/cassandra-ttl-is-per-column/"/>
        <id>https://cjwebb.com/cassandra-ttl-is-per-column/</id>
        
        <summary type="html">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;cassandra.apache.org&#x2F;&quot;&gt;Cassandra&lt;&#x2F;a&gt; Time-To-Live (TTL) is decribed in the &lt;a href=&quot;http:&#x2F;&#x2F;www.datastax.com&#x2F;documentation&#x2F;cql&#x2F;3.0&#x2F;cql&#x2F;cql_using&#x2F;use_ttl_t.html&quot;&gt;Datastax documentation&lt;&#x2F;a&gt;. This blog post briefly explores it to demonstrate that TTL is set per column, and not per row.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>ScalaTest and Twitter Futures</title>
        <published>2015-02-02T00:00:00+00:00</published>
        <updated>2015-02-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/scalatest-futures/"/>
        <id>https://cjwebb.com/scalatest-futures/</id>
        
        <summary type="html">&lt;p&gt;Scala has nice abstractions for asynchronous code. However, writing tests for that code sometimes results in an ugly, unreadable mess. Fortunately, ScalaTest has built-in support for testing Futures, in addition to utilities for other types of asynchronous testing, such as polling and test-probes.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Mock Responses and Iterate</title>
        <published>2015-01-20T00:00:00+00:00</published>
        <updated>2015-01-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/canned-responses/"/>
        <id>https://cjwebb.com/canned-responses/</id>
        
        <summary type="html">&lt;p&gt;&#x27;Agile&#x27; may now be an overloaded term abused by all kinds of people, but &lt;a href=&quot;http:&#x2F;&#x2F;agilemanifesto.org&#x2F;&quot;&gt;the original manifesto&lt;&#x2F;a&gt; is actually still quite relevant. The second point is:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Working software over comprehensive documentation&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;This is useful to embrace in many circumstances, and can be expanded to:&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;You should intially favour building software over documenting it. Comprehensive documentation can come later.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>#Code2014</title>
        <published>2014-12-31T00:00:00+00:00</published>
        <updated>2014-12-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/code2014/"/>
        <id>https://cjwebb.com/code2014/</id>
        
        <summary type="html">&lt;p&gt;As the end of the year approaches, Twitter has a hash-tag named &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;search?src=typd&amp;amp;q=%23code2014&quot;&gt;#Code2014&lt;&#x2F;a&gt; that encourages people to tweet which programming languages they&#x27;ve been using over the last 12 months.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Monoids</title>
        <published>2014-10-02T00:00:00+00:00</published>
        <updated>2014-10-02T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/monoids/"/>
        <id>https://cjwebb.com/monoids/</id>
        
        <summary type="html">&lt;blockquote&gt;
&lt;p&gt;In abstract algebra, a branch of mathematics, a monoid is an algebraic structure with a single associative binary operation and an identity element. Monoids are studied in semigroup theory as they are semigroups with identity.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Monoid&quot;&gt;Wikipedia has the above definition of a Monoid&lt;&#x2F;a&gt;. This blog post will desconstruct that definition to simply describe what a monoid is, and why you would want to use one.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Aggregation Services in Node.js</title>
        <published>2014-07-16T00:00:00+00:00</published>
        <updated>2014-07-16T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/aggregation-services-in-nodejs/"/>
        <id>https://cjwebb.com/aggregation-services-in-nodejs/</id>
        
        <summary type="html">&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;cjwebb.github.io&#x2F;blog&#x2F;2014&#x2F;03&#x2F;26&#x2F;aggregation-service-using-play-json&#x2F;&quot;&gt;My previous blog post&lt;&#x2F;a&gt; talked about building Aggregation Services using Play-JSON. In it, I mentioned that Aggregation Services using JavaScript might be quite nice. As JSON is native to JavaScript, you might expect manipulating JSON in JavaScript to be incredibly simple. And you would be correct!&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Aggregation Services using Play JSON</title>
        <published>2014-03-26T00:00:00+00:00</published>
        <updated>2014-03-26T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/aggregation-service-using-play-json/"/>
        <id>https://cjwebb.com/aggregation-service-using-play-json/</id>
        
        <summary type="html">&lt;p&gt;Aggregation services (sometimes known as Composite or Hydration services) are useful when working in SOA. In SOA, services are responsible for discrete objects and collections, yet still often need to reference other object or collections controlled by another service. This is done via referencing Ids. In order to display something useful to the user it is necessary to lookup data from multiple sources and aggregate them together.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Fibonacci Numbers in Scala</title>
        <published>2013-10-30T00:00:00+00:00</published>
        <updated>2013-10-30T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/fibonacci-numbers-in-scala/"/>
        <id>https://cjwebb.com/fibonacci-numbers-in-scala/</id>
        
        <summary type="html">&lt;p&gt;Working out the &lt;a href=&quot;http:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Fibonacci_number&quot;&gt;Fibonacci numbers&lt;&#x2F;a&gt; are a standard exercise when learning a programming language, or just refreshing your knowledge. This is a recap of various ways to calculate them in Scala. &lt;a href=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;cjwebb&#x2F;7239843&quot;&gt;All the code is available in a handy gist&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Akka Camel and ActiveMQ</title>
        <published>2013-09-01T00:00:00+00:00</published>
        <updated>2013-09-01T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/akka-camel-and-activemq/"/>
        <id>https://cjwebb.com/akka-camel-and-activemq/</id>
        
        <summary type="html">&lt;p&gt;I&#x27;ve been using &lt;a href=&quot;http:&#x2F;&#x2F;doc.akka.io&#x2F;docs&#x2F;akka&#x2F;snapshot&#x2F;scala&#x2F;camel.html&quot; title=&quot;Akka Camel&quot;&gt;Akka Camel&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;activemq.apache.org&#x2F;&quot; title=&quot;Active MQ&quot;&gt;ActiveMQ&lt;&#x2F;a&gt; recently, as part of a delayed worker-queue system. Given the lack of good googleable information about combining the two, I thought it would be useful if I explained briefly how to get Akka Camel and ActiveMQ to work together in the form of a quick example.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Testing in Scala with DSLs</title>
        <published>2013-07-20T00:00:00+00:00</published>
        <updated>2013-07-20T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/testing-in-scala-with-dsls/"/>
        <id>https://cjwebb.com/testing-in-scala-with-dsls/</id>
        
        <summary type="html">&lt;p&gt;Using a DSL to write a test can prove to be useful, especially when there are lots of prerequisites, or the problem is complex. Having a test that is incredibly readable reduces complexity overhead and aids reader comprehension. Any tests that require the reader to retain a mental map could benefit from a DSL.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Better Assertions with ScalaTest</title>
        <published>2013-05-27T00:00:00+00:00</published>
        <updated>2013-05-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/better-assertions-with-scalatest/"/>
        <id>https://cjwebb.com/better-assertions-with-scalatest/</id>
        
        <summary type="html">&lt;p&gt;Scala has three different frameworks for writing unit tests, JUnit, &lt;a href=&quot;http:&#x2F;&#x2F;etorreborre.github.io&#x2F;specs2&#x2F;guide&#x2F;org.specs2.guide.QuickStart.html&quot; title=&quot;Specs2&quot;&gt;Specs2&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;www.scalatest.org&#x2F;&quot; title=&quot;ScalaTest&quot;&gt;ScalaTest&lt;&#x2F;a&gt;. I have mainly been using ScalaTest since I started to learn Scala about four months ago. One of the areas I have been concentrating on is how to write good assertions. Specifically, ones that yield easily diagnosable error messages when they fail.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>Using MongoDB TTL Collections to Manage User Registrations</title>
        <published>2012-12-17T00:00:00+00:00</published>
        <updated>2012-12-17T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/mongodb-ttl-collections/"/>
        <id>https://cjwebb.com/mongodb-ttl-collections/</id>
        
        <summary type="html">&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;docs.mongodb.com&#x2F;manual&#x2F;tutorial&#x2F;expire-data&#x2F;&quot;&gt;TTL Collections&lt;&#x2F;a&gt; were introduced in MongoDB 2.2. You are now able to create an index which triggers the deletion of a document after the Time-To-Live (TTL) time passes.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
    <entry xml:lang="en">
        <title>How to JUnit Test a Private Method</title>
        <published>2010-10-31T00:00:00+00:00</published>
        <updated>2010-10-31T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://cjwebb.com/junit-test-private-method/"/>
        <id>https://cjwebb.com/junit-test-private-method/</id>
        
        <summary type="html">&lt;p&gt;I was recently writing a cache for MP3s at work, and I needed to test some private methods. Testing a private method in Java is doable using reflection.&lt;&#x2F;p&gt;
</summary>
        
    </entry>
</feed>
