• Home
  • About
  • GitHub
  • Keybase
  • LinkedIn
  • Projects
  • Subscribe
  • Twitter
  1. Cachex v4.0: Optimization, Consolidation & Routing

    The first v4.x version of Cachex, v4.0.0, has been released. This version includes many features and improvements designed to optimize cache management and internal efficiency. In this post, I'll briefly cover some of the main changes, including new features and optimizations. If…

    Approximate 15 min read published September 30, 2024
  2. Achieving Multiple Routing Keys in RabbitMQ Exchanges

    Update: this post was originally published in November 2017 but has been updated with the latest information and changes as of March 2024. A key feature inside RabbitMQ is the ability to easily route messages between exchanges and queues, using any number of provided routing algo…

    Approximate 15 min read published March 08, 2024
  3. Syncing GitHub and GitLab activity using Gitivity

    The activity charts of GitHub are a well known feature; some love them, some hate them. These charts are displayed on the profile page of users on the site, and represent a users contribution activity across the site in yearly blocks. This post is going to cover working with tool…

    Approximate 6 min read published November 19, 2023
  4. Using Embedded JSON storage with the Titanium SDK

    For those who are unaware, the Titanium SDK has long been a good option for cross-platform mobile development. With the recent move to it being a fully open source project (via TiDev) I decided to revisit for some minor experimentation. This post is going to cover working with JS…

    Approximate 7 min read published May 07, 2023
  5. A Small Update on Whitfin.io

    Due to a severe lack of both time and motivation, I haven't written much on this site in the last few years beyond occasionally updating my projects page. To ignite my spark for writing here again, I have just finished rewriting the entirety of this site! For those who don't know…

    Approximate 2 min read published May 07, 2023
  6. Settings Aliases for Git Sources

    I'm sure many of you go to places like the GitHub or GitLab UI to copy the URL to clone a repository. I thought I'd share a small configuration I found recently in my .gitconfig that helps save some time when setting remotes in Git repositories (or cloning new ones). Before I fou…

    Approximate 2 min read published April 28, 2020
  7. Some Thoughts on Rust's Async/Await Debate

    Update 2023: I'm happy to say that the syntax selected has proven itself as a good choice, and getting used to it really wasn't as much of a pain point as I had anticipated. I'm going to leave my original post here for reference, but know that I think the direction taken by the R…

    Approximate 9 min read published May 09, 2019
  8. Building Simple APIs with Hyper and Usher

    When writing a web service, I often lean towards using tools that are as minimal as possible. One pretty obvious reason for this is the avoidance of dependencies you either don't want or don't need in your project. Whilst I'm not someone who goes out of their way to avoid depende…

    Approximate 13 min read published May 03, 2019
  9. Easy Concurrency Locking in Erlang/Elixir

    Out of the box, Elixir and Erlang offer a very powerful tool for serializing access to a resource via the GenServer included in OTP and surfaced in the Elixir standard library. As a GenServer processes messages it receives both in order and synchronously, it becomes a great tool…

    Approximate 7 min read published March 03, 2019
  10. Visualizing Developer Download Counts

    This short post is about a small application I wrote to track developer stats, named My Dev Statistics. If you want to skip to the finished product, you can find the application on both the iOS App Store and Google Play. For a long time now, I've wanted to build something small a…

    Approximate 6 min read published December 22, 2018
  11. Writing MapReduce Jobs Using Rust and Efflux

    During my work life, I spend a lot of time working with MapReduce-style workflows, particularly with Hadoop infrastructure. A lot of this work is spent with larger amounts of data in order to implement the batch layer of the Lambda architecture. Due to this, the largest concern i…

    Approximate 8 min read published November 28, 2018
  12. Simulating Distributed Clusters for Elixir Unit Tests

    During the recent addition of distribution to Cachex, I realised that testing distributed behaviour is quite annoying. Although there's a tonne of useful inside the OTP standard library, it's not particularly obvious if you don't know what you're looking for. Most projects (such…

    Approximate 5 min read published November 23, 2018
  13. Quickly Concatenating Files in Amazon S3

    Amazon S3 is a storage solution used by pretty much everyone these days. Due to this there are naturally a bunch of tools for doing almost everything you can think of with S3. This post is about a tool I wrote to retrieve concatenate files efficiently in S3 buckets. If you don't…

    Approximate 4 min read published November 04, 2018
  14. Cachex v3.1 and the Return of Distributed Caches

    If you work with Elixir on web services, you may have come across a library I work on named Cachex. Although the name makes it somewhat obvious, this is a library based on caching expensive data in memory. It works inside your application layers using the Erlang Term Storage (ETS…

    Approximate 7 min read published October 13, 2018
  15. Optimizing Docker Images for Maven Projects

    I recently wrote a post on optimizing Docker images for Rust projects, which turned out to be quite popular, so I figured I'd follow it up with another for those Java developers out there who have to painfully sit through slow Maven builds inside Docker. Just like the other post,…

    Approximate 6 min read published August 25, 2018
  16. Adding Custom Handlebars Template Helpers in Ghost

    Ghost has come a long way since I wrote my first post on safely creating custom Handlebars helpers, but unfortunately not far enough that it's an easy feat. Whilst there's some movement in enabling developers to add Handlebars helpers via Ghost Apps, it's still a pain to get work…

    Approximate 5 min read published August 18, 2018
  17. Easily Analyzing Your S3 Buckets

    Amazon S3 is a storage solution used by pretty much everyone these days. Due to this there are naturally a bunch of tools for doing almost everything you can think of with S3. This post is about a tool I wrote to retrieve metadata about S3 buckets. If you don't care for the post,…

    Approximate 3 min read published August 04, 2018
  18. Filtering Duplicate Log Entries via Rust and Runiq

    If you work on any kind of backend system, odds are you're familiar with the pains of trawling through files looking for something specific only to discover huge amounts of entries which are basically all the same thing. Perhaps you have a really cool API that everyone calls all…

    Approximate 7 min read published May 07, 2018
  19. Optimizing Docker Images for Rust Projects

    This post will be the first of several addressing Docker image optimizations for different project types. It stems from my recent experiences with badly written Dockerfiles, which result in sitting around for 10 minutes every time you build, only to then need to upload images of…

    Approximate 6 min read published January 28, 2018
  20. Automatic Unsafe Function Generation in Elixir

    Elixir developers typically conform to the standard of returning Tuple structures from functions which can either succeed or fail in order to effectively signal their status to the caller. Whilst this encourages the caller to directly handle the various cases which can arise, som…

    Approximate 3 min read published November 09, 2017
  21. Bulk Indexing with the Elasticsearch Java REST Client

    With the introduction of Elasticsearch v5.0.0, Elastic began to recommend moving to their new REST client for server interactions rather than the transport client that was shipped previously. The intent was to make a HTTP client which would act with little to no interaction with…

    Approximate 5 min read published October 12, 2017
  22. A Year with Cachex in Production

    A little over a year ago I began working on what would become my first real project in Elixir. Without going into too much detail, it was a re-imagination of a legacy system designed to handle many incoming data streams quickly and reliably. It seemed like a good fit for Elixir,…

    Approximate 7 min read published July 12, 2017
  23. Introducing Vessel: A Bridge Between Elixir and Hadoop

    Disclaimer: I should point out that I wrote this project for those who are already working with Elixir and have need of integrating their existing codebases with Hadoop. I'm going to try assume limited knowledge of Hadoop/Elixir within this post - but I apologise if it goes a lit…

    Approximate 10 min read published December 06, 2016
  24. Stash: a user-friendly wrapper for ETS/DTS caching in Elixir

    Erlang (and by extension, Elixir) comes with a sweet little memory storage library called ETS (Erlang Term Storage). This provides an awesome way to store a whole bunch of values in memory, without having to write your own implementation, or pull in large third-party libraries. T…

    Approximate 2 min read published February 11, 2016
  25. Writing SipHash: my introduction to NIFs in Elixir

    After recently discovering SipHash when searching for a solid algorithm to use in another project, I decided to take a shot at writing an implementation in Elixir as an exercise (having only started picking up Elixir in the last few weeks or so). The project is available on GitHu…

    Approximate 4 min read published December 28, 2015
Page 0
Page 1 of 2
Page 2

© 2025 Isaac Whitfield