Roy's Blog

A Hacker's musings on Code | Tech | Life

So nice to have his naming day just after his Birthday :)

Abbey made the a lovely teddy bear cake with his name in building blocks ... seriously more tasty than any shop bought cake.

Ethan and Mummy Ethan's Cake

Loads of family and friends from both sides of the family made it a wonderful ceremony ..... and social afternoon party.

Marples and Friends Hunt and Friends

Well, the kids certainly had a party with a bouncy castle indoors!

Bouncy castle Bouncy castle

Thanks for coming everyone!

Discuss this Post

My, how time has long. It doesn't seem too long ago since he arrived! He fell in love with his new panda right away, was unsure about the arrival of the Birthday cake but sure loved eating it ..... and the bath afterwards :)

Ethan with Panda Ethan with Cake Ethan eating Cake

Happy Birthday Son!

Discuss this Post

So, I've not blogged for a long long long time. The last time was over 2 years ago. There are various reasons for this, involving Tech, Code and Life.


My old blog was powered by Serendipity. Before that, it was Trac and before that it was Drupal

Now, Drupal was very ...... well, blocky. It worked, and worked well to start. But my poor server at the time could not cope with the resource demands it had, alongside my existing Trac instances to host my project's wiki and ticketing systems. So I migrated it to the Trac FullBlog Plugin. This was amazing! Where Drupal was complex, Trac was simplicity. Life was good.

But slow. As it turns out Trac itself was getting slower and slower. So I changed from Apache Pre-Fork to Lighttpd. This didn't work too great for me. Too complex, too crash. So I changed to nginx. and used uWSGI to bridge my fcgi's. Wow, my multi-purpose server had free memory! Amazing! I used this setup for about 5 years, maybe longer. However, Trac still got slower and slower.

So I migrated it all to Serendipity (the blog that is). I was also getting fed up with using git as my source code repo alongside Trac so I changed that to Fossil. No more Trac? And nginx and uwsgi working great! Life was good, my server now had over 1G free memory ... which did slowly get used up as a cache I guess. But swap was never ever hit. Even when compiling the server software. Tech did not get this good.

But then it stopped. Serendipity refused to let me log in to the admin panel. But Life got in the way at this point. So I didn't blog.

Fast forward to now and my DSPAM filter stopped working. Full stop. No-one knew why, myself and a few NetBSD devs spent a few hours looking at the problem. It only worked outside of my procmail filter, but my setup required it to work inside as I have email lists on the same box that required unfiltered mail to hit their informational funcions. And I hate SPAM. So I installed SpamAssassin as a replacement. It turned out the pkgsrc package needed a small bit of love, but now it's working as well as DSPAM ever did, but more importantly working. As a result of this, I had to prune spam from my hosted mailing list archives and it turns out hypermail doesn't allow you to do this, short of manually rebuilding the archive. So I ditched that and rebuilt my mail archives around mhonarc. I also took the time to theme it like my Fossil projects for consistency, which is fine.

Now, a lot of mail archives have a nice search function too so I decided to brush off my PHP skills which I've not used since the 1990's. It turned out my skills weren't that great as I thought and my first attempt failed. But no error was posted OR logged. It turned out that I couldn't get uWSGI or NGINX to actually log my PHP errors! I'm sure there was a way, but frankly the setup was hard to manage so instead of bashing my head, I looked to find an easier solution.

Apache had gained a new event MPM which promised the same low memory use as NGINX. It also had really improved mod_fcgid and mod_proxy so it's very useable easily. PHP had integrated PHP-FPM. As I no longer needed Trac, NGINX or uWSGI i said bye bye to them all and installed Apache. So full circle on the web server, but I now had easy to find PHP error reporting, so my archives search page worked fine after a quick fix!

In summary everything on my server was back to normal, fully working nicely, easily and well reported and diagnosed. Except my blog. I spent more time looking at it, didn't like it, nor the hard upgrade I was looking at the to latest version. So, after changing all my software, why not my Blog?

After migrating a few times, I know the score. It's Tricky (TM). So how to make life better? After a lot of research, I have settled on using GRAV for a few reasons listed here:

  • Does not force MySQL database (I prefer PostgreSQL)
  • No SQL database requirement, uses folders and Markdown files with embedded meta data
  • The default theme already looks good
  • Can self upgrade
  • Because everthing is in markdown files it should be easier to manage and migrate away from later
  • I want to self host - this is my data, not someone else's
  • It's in PHP (so no need to install Node.JS, Ruby or whatever flavour of the month is)
  • MIT license (close enough to my favoured 2 clause BSD)

So, this is the first post in a new blog, a new start where my Tech is currently ..... working without issue! This has got to be a first for me :)


I write code. I like to think I'm quite good at it :) And like most people, I have an opinion on what makes good code and bad code .... I hate bad code, even my own! So how did code get in the way?

I mentioned earlier that for some reason I my Serendipity admin login stopped working. Well, I looked at the code .... and it was not nice. (My install was an old version compared to their current 2.0 so this may have changed) There were little comments, there was poor seperation between Model, Controller and View. Now, the actual code in question looked like it should be working .... it hashed my paswsword, compared the hash to the saved DB entry. I even went as far as adding debug code. It all looked perfect, yet it did not work. No-one knew where the error was.

I was also pretty annoyed with Serendipity for other reasons I discovered only after using it, so I decided to ditch it entirely and move on. As you can tell above, I have no problem changing out software I no longer believe in, or fares poorly compared to others. I also enjoy when the software I originally chose makes great strides to tempt me back in the fold, like Apache. I don't claim to understand web server code, but I did peruse their codebase a while ago and it looks cleaner compared to when I did in the early 90's trying to make it work on Windows for $DAYJOB.

I've also spent a lot of time on my pet coding projects, dhcpcd, dhcpcd-ui, resovlconf and NetBSD.

Anyway, enough ramblings about code. There will be a lot more about that in the future anyway now that I have a working blog again. Well, almost working. I need to write some code to import from Serendipity to here, which will be nice as I enjoy coding and want to preserve the content I've lovingly created - alongwith you in the comments - over the years and I would hate to lose that! Speaking of comments, there is currently no comment system on this blog. for the time being until I integrate something like ISSO commenting or maybe find a Grav plugin. I also need to find a way of providing top links to my project pages.


So in the past few years, my Family has been very stable and loving :) But a new child got in the way! Ethan Thomas Marples was born 2nd December 2015, so he's one year old tomorrow! That has taken a lot of my time, and all my children still take a lot of my time, so it's a very enjoyable getting in the way :D

There's also been some changes at work. My old company Logos Technologies was bought by Instem. I'm still doing the same job, working on the same product, but the inner dealings of the buy out, company politics and day to day integration have certainly been eye opening.

Playing games got in the way. Far too much time playing MMO's .... I'm now off that bandwagon. But I don't regret it, it was a lot of fun :)

I've also been on a health roller coaster. I've taken the nice Doctors Orders and have invested in a FitBit Charge and FitBit Aria Scales which keep track of my steps, calories burned, sleep and weight. There is no more hiding. The good news is that I'm a lot fitter - I now enjoy walking and take a 40 minute walk each day minimum as well as walking the kids too and from school. I'm drinking a lot lot less, but still enjoy (probably a little too much still) a weekend tipple.

I've lost over a stone (21 pounds to be precise) as a result! My resting BPM as dropped from a $HIGHNUMBER to 58, which is healthy :D I should keep track of my blood pressure more, but maybe in the new year ..... but


I'm fitter, stronger, more alert and ready to blog! Although probably shorter blogs next time ;)

Discuss this Post

So I've been maintaining dhcpcd for a long time now. I feel that it's in very good shape and very resiliant to network changes and hickups. I've also finished FreeBSD, OpenBSD and DragonflyBSD support a while ago and it prompted a few OpenBSD people to take a look at it. One of them was Tobias Stoeckmann and he's been submitting a lot of patches to fix simple things that I should have checked, but sadly didn't. Luckily only one of them looks critical, and a dhcpcd release has already been made to hande it. The code in question has been in since dhcpcd-4 and no-ones spotted it until now which is kind of suprising really.

During this time I've also been working on removing DBus support from libdhcpcd so it talks directly to dhcpcd. I've also started a dhcpcd-qt port and written a dhcpcd-online tool, both of which use libdhcpcd. Whilst doing this I discovered that dhcpcd's control socket was very very flaky so that's now been vastly improved as well. There is an intermittent SIGPIPE error which I still don't know why it occurs, but it's gracefully handled and dhcpcd / libdhcpcd can easily restart things.

The lesson learned from both of the above points is that no matter how well you write your code, on a large project like this there is always an error somewhere and it someones takes someone else to find it!

Discuss this Post

So part of the IPv6 spec deals with reach-ability. It turns out the kernel is much better than this, purely because it relieves updates userland cannot when packets flow to/from the router we care about. So removing the Neighbour Solicition code and instead polling (BSD) or listening for neighbour updates (Linux) makes the reachability detection much more reliable.

Discuss this Post