<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Posts on Cameron Kerr :: Blog</title><link>https://cameronkerrnz.github.io/posts/</link><description>Recent content in Posts on Cameron Kerr :: Blog</description><generator>Hugo -- 0.145.0</generator><language>en-us</language><lastBuildDate>Sun, 20 Apr 2025 13:34:20 +1200</lastBuildDate><atom:link href="https://cameronkerrnz.github.io/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>Github Actions Step Summary</title><link>https://cameronkerrnz.github.io/posts/2025/github-actions-step-summary/</link><pubDate>Sun, 20 Apr 2025 13:34:20 +1200</pubDate><guid>https://cameronkerrnz.github.io/posts/2025/github-actions-step-summary/</guid><description>Do you find yourself wasting time trawling through logs and downloading CI artefacts to find common types of errors? Use GitHub Actions Step Summaries to accellerate your workflow.</description></item><item><title>Where Did That Sqlalchemy SQL Originate?</title><link>https://cameronkerrnz.github.io/posts/2025/where-did-that-sqlalchemy-sql-originate/</link><pubDate>Sat, 19 Apr 2025 11:34:45 +1200</pubDate><guid>https://cameronkerrnz.github.io/posts/2025/where-did-that-sqlalchemy-sql-originate/</guid><description>ORMs such as SQLAlchemy are very useful, but can easily generate very inefficient unrecognisable code. Here&amp;rsquo;s an easy way to log where the query originates in your code.</description></item><item><title>Openscad Magnifying Glass</title><link>https://cameronkerrnz.github.io/posts/2025/openscad-magnifying-glass/</link><pubDate>Sat, 29 Mar 2025 12:38:09 +1300</pubDate><guid>https://cameronkerrnz.github.io/posts/2025/openscad-magnifying-glass/</guid><description>How I fixed a magnifying glass by creating an original frame</description></item><item><title>DIY Phone Case: as easy as 1, 2, Minkowski!</title><link>https://cameronkerrnz.github.io/posts/2025/openscad-phone-case/</link><pubDate>Thu, 06 Mar 2025 00:00:00 +0000</pubDate><guid>https://cameronkerrnz.github.io/posts/2025/openscad-phone-case/</guid><description>It&amp;rsquo;s easy to create a phone case when there are none on the market</description></item><item><title>OpenSCAD: More Satisfying than you Think!</title><link>https://cameronkerrnz.github.io/posts/2025/bloom-filter-lightning-talk/</link><pubDate>Fri, 31 Jan 2025 00:00:00 +0000</pubDate><guid>https://cameronkerrnz.github.io/posts/2025/bloom-filter-lightning-talk/</guid><description>An introduction to OpenSCAD to encourage you to try it out</description></item><item><title>Bloom Filter Lightning Talk</title><link>https://cameronkerrnz.github.io/posts/2024/bloom-filter-lightning-talk/</link><pubDate>Mon, 04 Nov 2024 20:03:55 +1300</pubDate><guid>https://cameronkerrnz.github.io/posts/2024/bloom-filter-lightning-talk/</guid><description>A Lightning talk I gave to Dunedin Code Craft in November 2024</description></item><item><title>3d Print and Paint Ocarina</title><link>https://cameronkerrnz.github.io/posts/2024/3d-print-and-paint-ocarina/</link><pubDate>Sat, 07 Sep 2024 21:30:10 +1200</pubDate><guid>https://cameronkerrnz.github.io/posts/2024/3d-print-and-paint-ocarina/</guid><description>A fun modern craft and music project</description></item><item><title>Profiling PostGIS with PLProfiler</title><link>https://cameronkerrnz.github.io/posts/2024/profiling-postgis/</link><pubDate>Thu, 01 Feb 2024 19:40:29 +1300</pubDate><guid>https://cameronkerrnz.github.io/posts/2024/profiling-postgis/</guid><description>PLProfiler is a great tool for profiling PL/PGSQL functions, but you need an extra trick for PostGIS native functions.</description></item><item><title>Ergodox EZ vs Kinesis Advantage</title><link>https://cameronkerrnz.github.io/posts/2023/ergodox-ez-vs-kinesis-advantage/</link><pubDate>Tue, 22 Aug 2023 08:50:16 +1200</pubDate><guid>https://cameronkerrnz.github.io/posts/2023/ergodox-ez-vs-kinesis-advantage/</guid><description>I&amp;rsquo;ve been a delighted Kinesis Advantage user for over 10 years. I purchased the Ergodox EZ as a second keyboard for hybrid work. Now its time to replace my Kinesis. Let&amp;rsquo;s compare!</description></item><item><title>Using Common Expression Language (CEL) in... a Metrics Exporter for LDAP</title><link>https://cameronkerrnz.github.io/posts/2023/cel-go-for-policy-as-code/</link><pubDate>Tue, 15 Aug 2023 23:21:07 +1200</pubDate><guid>https://cameronkerrnz.github.io/posts/2023/cel-go-for-policy-as-code/</guid><description>An Example of using the Common Expression Language</description></item><item><title>Reimplementation of Learning :: a Python to Go Retrospective</title><link>https://cameronkerrnz.github.io/posts/2023/A-Python-to-Go-Retrospective/</link><pubDate>Tue, 15 Aug 2023 21:54:45 +1200</pubDate><guid>https://cameronkerrnz.github.io/posts/2023/A-Python-to-Go-Retrospective/</guid><description>Encouraging System Admins / Engineers to Improve their Programming</description></item><item><title>Syft your Linux Fleet Looking for Shellshock, Log4J.... and Oracle Java?</title><link>https://cameronkerrnz.github.io/posts/2023/syft-your-linux-fleet/</link><pubDate>Mon, 19 Jun 2023 00:00:00 +0000</pubDate><guid>https://cameronkerrnz.github.io/posts/2023/syft-your-linux-fleet/</guid><description>I explore using Syft and Grype, demonstrate use of jq and Go&amp;rsquo;s text templates, and explore using Syft against a server rather than a container.</description></item><item><title>Managing the Performance of Grafana/Prometheus Dashboards using Nginx &amp; Lua</title><link>https://cameronkerrnz.github.io/posts/2023/prometheus-grafana-performance-nginx-lua/</link><pubDate>Fri, 24 Mar 2023 00:00:00 +0000</pubDate><guid>https://cameronkerrnz.github.io/posts/2023/prometheus-grafana-performance-nginx-lua/</guid><description>Regain visibility into the performance of Open Source Grafana and Prometheus so you know which dashboards and visualisations are slowing down your Prometheus service.</description></item><item><title>Map Git Dependencies using n-grams in Python</title><link>https://cameronkerrnz.github.io/posts/2023/mapping-git-dependencies-with-ngrams/</link><pubDate>Wed, 25 Jan 2023 00:00:00 +0000</pubDate><guid>https://cameronkerrnz.github.io/posts/2023/mapping-git-dependencies-with-ngrams/</guid><description>Where in Git would I go to edit the code that deploys a set of resources identified by audit findings?</description></item><item><title>Amazon EFS Top-Talkers</title><link>https://cameronkerrnz.github.io/posts/2022/efs-top-talkers/</link><pubDate>Tue, 22 Nov 2022 00:00:00 +0000</pubDate><guid>https://cameronkerrnz.github.io/posts/2022/efs-top-talkers/</guid><description>Use Amazon&amp;rsquo;s VPC flow logs (similar to NetFlow) to identify NFS clients and servers and enrich that IP-level information with useful names so you can recognise EC2 instances, EFS endpoints etc.</description></item><item><title>Job Hunting for Senior IT Roles</title><link>https://cameronkerrnz.github.io/posts/2022/job-hunting-advice-for-senior-positotions/</link><pubDate>Mon, 07 Feb 2022 00:00:00 +0000</pubDate><guid>https://cameronkerrnz.github.io/posts/2022/job-hunting-advice-for-senior-positotions/</guid><description>Some observations from successful job hunting for those wanting a remote role or to pivot in the industry. Meant for more senior roles, where the funnel should be smaller.</description></item><item><title>Deploying with Ansible when Outgoing Access to Internet is Unavailable (BYO proxy)</title><link>https://cameronkerrnz.github.io/posts/2018/byo-proxy-ansible/</link><pubDate>Thu, 25 Jan 2018 00:00:00 +0000</pubDate><guid>https://cameronkerrnz.github.io/posts/2018/byo-proxy-ansible/</guid><description>Network gynmastics using SSH and a local proxy for servers that don&amp;rsquo;t have internet access but still need to &amp;lsquo;yum update&amp;rsquo; etc.</description></item><item><title>Limiting Access via Squid to Docker Containers</title><link>https://cameronkerrnz.github.io/posts/2017/limiting-access-via-squid-to-docker-containers/</link><pubDate>Thu, 02 Nov 2017 00:00:00 +0000</pubDate><guid>https://cameronkerrnz.github.io/posts/2017/limiting-access-via-squid-to-docker-containers/</guid><description>I wanted to grant just the access needed for different Docker containers through Squid. I used Squid&amp;rsquo;s ability to use Ident as a way to look up a &amp;lsquo;user&amp;rsquo; for a connection, and made a custom identd server to provide this information.</description></item><item><title>Capturing and Replaying Connection-less Protocols (eg. IPFIX into Logstash)</title><link>https://cameronkerrnz.github.io/posts/2017/capture-replay-udp-protocols/</link><pubDate>Tue, 25 Apr 2017 00:00:00 +0000</pubDate><guid>https://cameronkerrnz.github.io/posts/2017/capture-replay-udp-protocols/</guid><description>Capture real-world network traffic so you can replay it later / elsewhere for development and testing. An example is given using IPFIX (AppFlow), but directly relevant to UDP Syslog too.</description></item><item><title>Point a single process to /dev/urandom instead of /dev/random</title><link>https://cameronkerrnz.github.io/posts/2017/installers-that-hang-reading-random/</link><pubDate>Thu, 23 Mar 2017 00:00:00 +0000</pubDate><guid>https://cameronkerrnz.github.io/posts/2017/installers-that-hang-reading-random/</guid><description>Giving a single process (tree) a different view of the filesystem without modifying the process; and showing how to do this manually and via Ansible.</description></item><item><title>Memcached logging (and others) under Systemd on RHEL7</title><link>https://cameronkerrnz.github.io/posts/2015/memcached-logging-under-systemd-rhel7/</link><pubDate>Tue, 04 Aug 2015 00:00:00 +0000</pubDate><guid>https://cameronkerrnz.github.io/posts/2015/memcached-logging-under-systemd-rhel7/</guid><description>How to cleanly gather logs for memcached.</description></item><item><title>The importance of being liberal in a Cisco environment</title><link>https://cameronkerrnz.github.io/posts/2015/being-liberal-in-a-cisco-environment/</link><pubDate>Tue, 05 May 2015 00:00:00 +0000</pubDate><guid>https://cameronkerrnz.github.io/posts/2015/being-liberal-in-a-cisco-environment/</guid><description>Network incompatibilities do happen and sometimes you need to be a little more forgiving in order to let the traffic flow. An example of where some Cisco behaviour was running foul of Linux.</description></item><item><title>Use IPTables NOTRACK to implement stateless rules and reduce packet loss</title><link>https://cameronkerrnz.github.io/posts/2015/iptables-notrack-to-implement-stateless-rules-and-reduce-packet-loss/</link><pubDate>Tue, 05 May 2015 00:00:00 +0000</pubDate><guid>https://cameronkerrnz.github.io/posts/2015/iptables-notrack-to-implement-stateless-rules-and-reduce-packet-loss/</guid><description>Disabling IPTables connection tracking for DNS can resolve problems due to too many connections in the connection table.</description></item><item><title>Use Getent Hosts in Scripts</title><link>https://cameronkerrnz.github.io/posts/2015/use-getent-hosts-in-scripts/</link><pubDate>Wed, 15 Apr 2015 00:00:00 +0000</pubDate><guid>https://cameronkerrnz.github.io/posts/2015/use-getent-hosts-in-scripts/</guid><description>It is common practice to use tools like &amp;lsquo;dig&amp;rsquo; to lookup DNS results, but this has very bad performance. If you just need to lookup a name or address, there&amp;rsquo;s an easier, friendly way.</description></item><item><title>Dont Let Java on Linux Determine Its Own Timezone</title><link>https://cameronkerrnz.github.io/posts/2014/dont-let-java-on-linux-determine-its-own-timezone/</link><pubDate>Mon, 01 Sep 2014 00:00:00 +0000</pubDate><guid>https://cameronkerrnz.github.io/posts/2014/dont-let-java-on-linux-determine-its-own-timezone/</guid><description>Your timezone says Pacific/Auckland but Java reports Antarctica/SouthPole; what gives?</description></item><item><title>(Ab)using Samba and inotify to implement simple menu of privileged actions</title><link>https://cameronkerrnz.github.io/posts/2014/deleventd/</link><pubDate>Tue, 29 Apr 2014 00:00:00 +0000</pubDate><guid>https://cameronkerrnz.github.io/posts/2014/deleventd/</guid><description>When you want SSH and sudo, but all you have is a Samba share. Similar to using a flag file in a network share to trigger some scripted action, this solution uses inotify to watch for files that get deleted, and then even shows the status of each job.</description></item><item><title>ORA-12170: TNS:Connect timeout — resolved</title><link>https://cameronkerrnz.github.io/posts/2014/ora-12170-tns-connect-timeout-resolved/</link><pubDate>Sat, 26 Apr 2014 00:00:00 +0000</pubDate><guid>https://cameronkerrnz.github.io/posts/2014/ora-12170-tns-connect-timeout-resolved/</guid><description>ORA-12170</description></item><item><title>MySQL 5.0 and SSL</title><link>https://cameronkerrnz.github.io/posts/2014/mysql-and-ssl/</link><pubDate>Sun, 20 Apr 2014 00:00:00 +0000</pubDate><guid>https://cameronkerrnz.github.io/posts/2014/mysql-and-ssl/</guid><description>I needed to get an old version of MySQL server 5.0 running with SSL on Debian Etch. It was not as simple as you might have thought.</description></item><item><title>Build an inode Lookup Database using SQLite3</title><link>https://cameronkerrnz.github.io/posts/2011/build-inode-lookup-database/</link><pubDate>Sun, 28 Aug 2011 00:00:00 +0000</pubDate><guid>https://cameronkerrnz.github.io/posts/2011/build-inode-lookup-database/</guid><description>I show a simple but effective use of SQLite3 to help me with an analysis problem.</description></item><item><title>NFS Lock Analysis with tshark (Wireshark) and Python</title><link>https://cameronkerrnz.github.io/posts/2011/nfs-lock-analysis/</link><pubDate>Sun, 28 Aug 2011 00:00:00 +0000</pubDate><guid>https://cameronkerrnz.github.io/posts/2011/nfs-lock-analysis/</guid><description>NFS locking can impede the performance of your clustered application. Learn how to capture and analyse NFS traffic to see where your locking issues are.</description></item></channel></rss>