<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>cobalt blog</title><link>http://example.com</link><description>Blog Posts Go Here</description><item><title>An interposer to debug C++ exceptions</title><link>http://example.com/posts/2020-04-26-an-interposer-to-debug-c-exceptions.html</link><description><![CDATA[<p>I've just released <a href="https://github.com/rkday/cpp-exception-interposer">https://github.com/rkday/cpp-exception-interposer</a>, which solves some problems I've had with tracking down the source of C++ exceptions (especially in environments where using gdb's <code>catch throw</code> command is impractical).</p>
]]></description><guid>http://example.com/posts/2020-04-26-an-interposer-to-debug-c-exceptions.html</guid><pubDate>Sun, 26 Apr 2020 15:18:53 +0000</pubDate></item><item><title>50 short programs in Rust, #6 - xscreensaver</title><link>http://example.com/posts/2020-04-13-50-short-programs-in-rust-6-xscreensaver.html</link><description><![CDATA[<p>In Coders at Work, jwz talks about writing screensavers for fun (&quot;They make this neat result and you don't have to think about them too much. They don't haunt you.&quot;). I've wanted to try writing one since I read that, and I finally got around to it this weekend.</p>
]]></description><guid>http://example.com/posts/2020-04-13-50-short-programs-in-rust-6-xscreensaver.html</guid><pubDate>Mon, 13 Apr 2020 11:02:18 +0000</pubDate></item><item><title>Stack corruption and how to debug it</title><link>http://example.com/posts/2020-04-11-stack-corruption-and-how-to-debug-it.html</link><description><![CDATA[<p>I hit some stack corruption bugs recently, and have been looking at tools to debug/prevent them. Here's what I learnt!</p>
]]></description><guid>http://example.com/posts/2020-04-11-stack-corruption-and-how-to-debug-it.html</guid><pubDate>Sat, 11 Apr 2020 17:45:08 +0000</pubDate></item><item><title>50 short programs in Rust, #5 - symlinks</title><link>http://example.com/posts/2020-03-14-50-short-programs-in-rust-5-symlinks.html</link><description><![CDATA[<p>I can almost never remember how to create symlinks - that is, which way round the arguments to 'ln' go. So I wrote a Rust equivalent, called <code>symlink</code>, which you invoke as <code>symlink file-a --pointing-to file-b</code> - more characters, but if I don't have to look it up every time, quicker overall.</p>
]]></description><guid>http://example.com/posts/2020-03-14-50-short-programs-in-rust-5-symlinks.html</guid><pubDate>Sat, 14 Mar 2020 17:52:26 +0000</pubDate></item><item><title>How to write a C++ function that behaves like emplace_back?</title><link>http://example.com/posts/2020-01-29-how-to-write-a-c-function-that-behaves-like-emplace-back.html</link><description><![CDATA[<p>Recently I was working on some C++ code where I had one class (Foo), and another class (FooDoer) that took ownership of Foo objects and did stuff with them.</p>
]]></description><guid>http://example.com/posts/2020-01-29-how-to-write-a-c-function-that-behaves-like-emplace-back.html</guid><pubDate>Wed, 29 Jan 2020 23:16:18 +0000</pubDate></item><item><title>50 short programs in Rust, #4 - raw sockets</title><link>http://example.com/posts/2019-11-10-50-short-programs-in-rust-4-raw-sockets.html</link><description><![CDATA[<p><em>(I'm writing 50 short programs in Rust, often ones I would normally write in Python, to improve my fluency - starting <a href="http://rkd.me.uk/posts/2019-10-07-50-short-programs-in-rust-1.html">here</a>).</em></p>
]]></description><guid>http://example.com/posts/2019-11-10-50-short-programs-in-rust-4-raw-sockets.html</guid><pubDate>Sun, 10 Nov 2019 22:11:29 +0000</pubDate></item><item><title>Why does bind() to a SOCK_RAW return EADDRNOTAVAIL in FreeBSD but not Linux?</title><link>http://example.com/posts/2019-11-03-why-does-bind-to-a-sock-raw-return-eaddrnotavail-in-freebsd-but-not-linux.html</link><description><![CDATA[<p>I tracked down an interesting bug this weekend - a SIPp user <a href="https://github.com/SIPp/sipp/issues/433">reported</a> getting a &quot;Can't bind media raw socket&quot; error on FreeBSD 11.2, which I was able to repro. This was in the code that replays packet captures of media, by opening a raw socket and sending the media packets through it, with the raw sockets giving it full control (including the UDP headers).</p>
]]></description><guid>http://example.com/posts/2019-11-03-why-does-bind-to-a-sock-raw-return-eaddrnotavail-in-freebsd-but-not-linux.html</guid><pubDate>Sun,  3 Nov 2019 10:50:48 +0000</pubDate></item><item><title>50 short programs in Rust, #3 - simulating a hash collision attack</title><link>http://example.com/posts/2019-10-16-50-short-programs-in-rust-3.html</link><description><![CDATA[<p><em>(I'm writing 50 short programs in Rust, often ones I would normally write in Python, to improve my fluency - starting <a href="http://rkd.me.uk/posts/2019-10-07-50-short-programs-in-rust-1.html">here</a>).</em></p>
]]></description><guid>http://example.com/posts/2019-10-16-50-short-programs-in-rust-3.html</guid><pubDate>Wed, 16 Oct 2019 22:17:40 +0000</pubDate></item><item><title>50 short programs in Rust, #2</title><link>http://example.com/posts/2019-10-12-50-short-programs-in-rust-2.html</link><description><![CDATA[<p>I use XFCE4 as my main window manager, and I like its flexibility/customisability. I recently found out about <code>xfce4-genmon-plugin</code>, which is a &quot;generic monitor&quot; - it runs any command on a configurable interval and includes the output on the XFCE panel. By having that command return XML, it can even display tooltips and images as well as plain text (see <a href="https://goodies.xfce.org/projects/panel-plugins/xfce4-genmon-plugin#usage">https://goodies.xfce.org/projects/panel-plugins/xfce4-genmon-plugin#usage</a>).</p>
]]></description><guid>http://example.com/posts/2019-10-12-50-short-programs-in-rust-2.html</guid><pubDate>Sat, 12 Oct 2019 20:11:29 +0000</pubDate></item><item><title>50 short programs in Rust, #1</title><link>http://example.com/posts/2019-10-07-50-short-programs-in-rust-1.html</link><description><![CDATA[<p>I'm at the point where I can read and write Rust (well, with a fair bit of help from the compiler), but I don't yet feel fluent in it and it doesn't feel completely natural. For example, I still reach for Python when I want to implement short programs to try out an idea.</p>
]]></description><guid>http://example.com/posts/2019-10-07-50-short-programs-in-rust-1.html</guid><pubDate>Mon,  7 Oct 2019 20:49:00 +0000</pubDate></item><item><title>Code navigation with fzf/vim/ctags/ripgrep</title><link>http://example.com/posts/2019-05-27-code-navigation.html</link><description><![CDATA[<p>I've recently been trying to improve my skills at navigating code. I've used Vim's <code>ctags</code> support and the <code>ctrlp</code> package, but they've never really stuck - possibly I just find it tricky to remember new Vim keybindings or commands - so my normal approach to &quot;find this function in this codebase&quot; is still to grep it from the command line.</p>
]]></description><guid>http://example.com/posts/2019-05-27-code-navigation.html</guid><pubDate>Mon, 27 May 2019 20:25:23 +0000</pubDate></item><item><title>Automating Arch Linux setup on an RPi</title><link>http://example.com/posts/automating-arch-linux-setup-on-an-rpi.html</link><description><![CDATA[<p>I bought a Raspberry Pi 3 recently, and installed Arch Linux, in order to have a small, cheap, home server. For various reasons (e.g. plugging in USB devices with too much power draw, causing corrupted SD card writes) I keep having to reinstall it, so I've put together some scripts to make it simple.</p>
]]></description><guid>http://example.com/posts/automating-arch-linux-setup-on-an-rpi.html</guid><pubDate>Sun,  7 Apr 2019 17:31:19 +0000</pubDate></item><item><title>pyforwarder, a Python message forwarding library</title><link>http://example.com/posts/pyforwarder.html</link><description><![CDATA[<p><a href="https://en.wikipedia.org/wiki/Composition_over_inheritance">Preferring composition to inheritance</a> is a nice design pattern, and one which makes it simpler to break functionality into independent classes that can then be brought together (without the complexities of multiple inheritance).</p>
]]></description><guid>http://example.com/posts/pyforwarder.html</guid><pubDate>Mon,  4 Mar 2019 23:47:30 +0000</pubDate></item><item><title>Theming Cobalt</title><link>http://example.com/posts/theming-cobalt.html</link><description><![CDATA[<p>When I switched from Pelican to Cobalt as my static site generator this year, one of the trickiest things was theming the site. Cobalt doesn't (yet) have anything like <a href="https://github.com/getpelican/pelican-themes">https://github.com/getpelican/pelican-themes</a>, so you need to roll your own theme, and I thought I'd write up some notes on how.</p>
]]></description><guid>http://example.com/posts/theming-cobalt.html</guid><pubDate>Sun, 20 Jan 2019 18:26:18 +0000</pubDate></item><item><title>Automated blog publishing with AWS CodeBuild</title><link>http://example.com/posts/automated-blog-publishing-with-aws-codebuild.html</link><description><![CDATA[<p>I was reading <a href="https://carolynvanslyck.com/blog/2017/10/docker-or-gtfo/">https://carolynvanslyck.com/blog/2017/10/docker-or-gtfo/</a> recently, and the Side-Project Manifesto (&quot;Don’t do things in such a way that I have to remember how shit works 6 months from now&quot;) struck a chord with me. Amongst other things, it's a bit of a pain point when updating this blog - besides writing the posts, I need to remember how to publish and upload it. So as part of revamping my blog (and moving it from Pelican to Cobalt), I decided to set something up so that pushing to Github would automatically publish it.</p>
]]></description><guid>http://example.com/posts/automated-blog-publishing-with-aws-codebuild.html</guid><pubDate>Thu,  3 Jan 2019 12:47:26 +0000</pubDate></item><item><title>Podcasts on the command-line, in Rust</title><link>http://example.com/posts/rust-podcasts.html</link><description><![CDATA[<p>I've been listening to more podcasts recently on my commute and at the gym, including <a href="https://newrustacean.com/">New Rustacean</a> and <a href="http://www.angryweasel.com/ABTesting/">AB Testing</a>. I currently use <a href="https://www.clementine-player.org/">Clementine</a> to manage my podcasts, but it's not perfect - the &quot;Copy to device&quot; menu option was greyed out this morning, so I had to copy podcast episodes on manually.</p>
]]></description><guid>http://example.com/posts/rust-podcasts.html</guid><pubDate>Sun,  8 Apr 2018 22:10:00 +0100</pubDate></item><item><title>Learning Rust</title><link>http://example.com/posts/learning-rust.html</link><description><![CDATA[<p>I've been learning <a href="https://www.rust-lang.org">Rust</a> recently, and it's the first new language (with new concepts, like borrowing) I've learnt for a while - probably the first since Clojure in 2013. I thought it was worth writing up exactly what I'm doing to learn it, in the hopes that it's useful for others learning Rust and new programming languages in general.</p>
]]></description><guid>http://example.com/posts/learning-rust.html</guid><pubDate>Sat,  4 Nov 2017 22:28:00 +0100</pubDate></item><item><title>Can testers prevent problems?</title><link>http://example.com/posts/can-testers-prevent-problems.html</link><description><![CDATA[<p>I read recently that testers can't prevent problems, with the specific example that if a tester found an issue while reviewing a design or prototype before any code had been written, the mistake had still been made and caught by testing. I thought that in one sense this was pretty close to being true, and that in another sense it was completely wrong.</p>
]]></description><guid>http://example.com/posts/can-testers-prevent-problems.html</guid><pubDate>Mon, 25 Sep 2017 14:59:00 +0100</pubDate></item><item><title>Lightweight presentations with represent</title><link>http://example.com/posts/lightweight-presentations-with-represent.html</link><description><![CDATA[<p>I've been trying to find a good, lightweight way to write technical presentations for a while now. Specifically, I'm looking for one that avoids some of the common problems with Powerpoint:</p>
]]></description><guid>http://example.com/posts/lightweight-presentations-with-represent.html</guid><pubDate>Sat,  9 Jul 2016 16:15:00 +0100</pubDate></item><item><title>Using Python and Pandas to check HTTP load distribution</title><link>http://example.com/posts/using-python-and-pandas-to-check-http-load-distribution.html</link><description><![CDATA[<p>Since writing <a href="/is-my-load-evenly-distributed.html">my previous post</a> on using standard Unix shell tools to analyse a HTTP access log, I've been thinking about how to do this with more standard data analysis tools. Using <a href="http://pandas.pydata.org/">Pandas</a> and <a href="http://matplotlib.org/">Matplotlib</a>, which are the main Python data libraries, you can get a bit more fine-grained control, and view the results graphically.</p>
]]></description><guid>http://example.com/posts/using-python-and-pandas-to-check-http-load-distribution.html</guid><pubDate>Mon, 30 May 2016 09:36:00 +0100</pubDate></item><item><title>Intermediate Vim - Macros</title><link>http://example.com/posts/intermediate-vim-macros.html</link><description><![CDATA[<p><em>(I previously posted on another Vim feature, sessions, which you can find <a href="/intermediate-vim-sessions.html">here</a>)</em>.</p>
]]></description><guid>http://example.com/posts/intermediate-vim-macros.html</guid><pubDate>Sun, 24 Apr 2016 09:58:00 +0100</pubDate></item><item><title>Is my load evenly distributed?</title><link>http://example.com/posts/is-my-load-evenly-distributed.html</link><description><![CDATA[<p>I recently had a log file full of timestamped data, and I needed to analyse it to see how evenly distributed it was. Turns out this is surprisingly easy with standard GNU command-line tools.</p>
]]></description><guid>http://example.com/posts/is-my-load-evenly-distributed.html</guid><pubDate>Sat, 16 Apr 2016 10:59:00 +0100</pubDate></item><item><title>C++ static analysis</title><link>http://example.com/posts/cpp-static-analysis.html</link><description><![CDATA[<p>Recently, I've been looking at static analysis for some of my C++ codebases - tools that will warn about possible errors in my code without needing to run the code. I've been looking, in particular, for things that I can add as a build step - that is, cases where I can trust the static analyser to be right and fail the build if it fails, rather than fuzzier checks where you need human judgement to double-check that the analysis makes sense.</p>
]]></description><guid>http://example.com/posts/cpp-static-analysis.html</guid><pubDate>Sun, 10 Apr 2016 11:54:00 +0100</pubDate></item><item><title>Clang vs. GCC - code coverage checking</title><link>http://example.com/posts/clang-vs-gcc-coverage.html</link><description><![CDATA[<p>Recently, I've been compiling some of the codebases I work on under Clang 3.8 instead of GCC 4.8, to take advantage of better compiler warnings and faster compilation speed (I've seen a 33% speedup, though I haven't tested this rigorously). Today, I got to grips with llvm-cov-3.8, and checked the coverage of my Clang-compiled test suite - and saw coverage failures, on a test suite I know has 100% coverage when compiled under GCC. Some of the uncovered lines were very odd - a closing brace, for example. What's going on?</p>
]]></description><guid>http://example.com/posts/clang-vs-gcc-coverage.html</guid><pubDate>Sat,  2 Apr 2016 15:37:00 +0100</pubDate></item><item><title>Intermediate Vim - Sessions</title><link>http://example.com/posts/intermediate-vim-sessions.html</link><description><![CDATA[<p>I've been trying to improve my skill with Vim recently - I'm definitely nowhere near an expert, but I've been trying to move beyond just the basic &quot;read files/write files/use regexps/install plugins&quot; to understand and use more of Vim's built-in features. I'm planning to write blog posts on a couple of things, including macros, folding and ctags, but the first thing I've dug into and found useful are sessions.</p>
]]></description><guid>http://example.com/posts/intermediate-vim-sessions.html</guid><pubDate>Sun, 27 Mar 2016 11:00:00 +0100</pubDate></item><item><title>Clearwater and Juju</title><link>http://example.com/posts/clearwater-and-juju.html</link><description><![CDATA[<p>I wrote a short piece a while ago on Juju, the software orchestration tool written by Canonical (the company behind Ubuntu Linux), and specifically on orchestrating <a href="http://www.projectclearwater.org">Project Clearwater</a> with Juju. You can find that at <a href="https://insights.ubuntu.com/2015/06/11/clearwater-and-juju/">https://insights.ubuntu.com/2015/06/11/clearwater-and-juju/</a> or <a href="http://www.projectclearwater.org/clearwater-and-juju/">http://www.projectclearwater.org/clearwater-and-juju/</a>.</p>
]]></description><guid>http://example.com/posts/clearwater-and-juju.html</guid><pubDate>Sun, 21 Jun 2015 19:37:00 +0100</pubDate></item><item><title>Concurrent-ruby and Minitest</title><link>http://example.com/posts/concurrent-ruby-and-minitest.html</link><description><![CDATA[<p>I spent some time earlier today debugging an interesting interaction in Ruby between minitest/autorun and concurrent-ruby, and since none of my searches on it turned up quite the right answer, figured I'd write up my notes.</p>
]]></description><guid>http://example.com/posts/concurrent-ruby-and-minitest.html</guid><pubDate>Sun,  7 Dec 2014 21:22:00 +0100</pubDate></item><item><title>New PPA for OpenIMSCore FHoSS</title><link>http://example.com/posts/fhoss-ppa.html</link><description><![CDATA[<p>A while back, I got in touch with the Fraunhofer FOKUS team behind OpenIMSCore, with some fixes I wanted to make to their HSS, and ended up being granted commit access to their repository. I've now made those fixes and wanted to distribute them more widely, so I've set up a PPA and made the Fraunhofer Home Subscriber Server (FHoSS) available as a Ubuntu 12.04 LTS package. (It should be trivial to build and install it for other Ubuntu systems, too, but 12.04 seemed like the best one to start with).</p>
]]></description><guid>http://example.com/posts/fhoss-ppa.html</guid><pubDate>Sun,  6 Jul 2014 16:10:07 +0100</pubDate></item><item><title>Four cool things from KamailioWorld 2014</title><link>http://example.com/posts/kamailio2014.html</link><description><![CDATA[<p>A week ago I got back from KamailioWorld in Berlin, where I was giving a talk on performance testing. I really enjoyed myself - it's a nicely-run conference, and it's useful to talk to the broader open-source community and find out about new trends (WebRTC, stronger cryptography) and tools.</p>
]]></description><guid>http://example.com/posts/kamailio2014.html</guid><pubDate>Tue, 15 Apr 2014 20:50:00 +0100</pubDate></item><item><title>Notes from the December 2013 Clojure eXchange</title><link>http://example.com/posts/clojure-xchange-2013.html</link><description><![CDATA[<p>Last month, I went to the Clojure eXchange in London (run by SkillsMatter). I've been meaning since then to write up my notes from the most interesting talks, so here goes. You can see all these talks (and others I've not mentioned) at http://skillsmatter.com/event/java-jee/clojure-exchange-2013.</p>
]]></description><guid>http://example.com/posts/clojure-xchange-2013.html</guid><pubDate>Tue,  7 Jan 2014 22:10:07 +0100</pubDate></item><item><title>Reconfiguring an AWS Elastic IP with Pallet</title><link>http://example.com/posts/pallet-elastic-ip.html</link><description><![CDATA[<p>I was recently playing around with Pallet (as an offshoot of some of the DevOps-style cloud provisioning work I do on <a href="http://www.projectclearwater.org">Project Clearwater</a>), and had a bit of trouble getting from Pallet to the underlying jClouds API (I was using 1.5.5).</p>
]]></description><guid>http://example.com/posts/pallet-elastic-ip.html</guid><pubDate>Sun,  8 Dec 2013 21:50:00 +0100</pubDate></item><item><title>London Clojurians - October 2013 Clojure Dojo</title><link>http://example.com/posts/clojure-dojo-october.html</link><description><![CDATA[<p>I was at the London Clojure Dojo last night, and worked on
<a href="http://www.4clojure.com/problem/146">4clojure problem #146</a>. I'm not
going to post my code - that feels like a violation of the spirit of
4clojure - but I am going to talk about a cool feature of the Clojure
'for' macro that I discovered while playing with this.</p>
]]></description><guid>http://example.com/posts/clojure-dojo-october.html</guid><pubDate>Wed, 30 Oct 2013 19:50:00 +0100</pubDate></item></channel></rss>
