Week 4 in Cyprus – detox

This is a little late, but hey better late than never.

Week 4 at the clinic focused more on detoxification of my system. If you’re not familiar with the borrelia infection, it is very endo-toxic so when you start killing it, it dumps those toxins into your body resulting in the Herxheimer reaction I’ve spoken about before. This affects different people differently, but in me I get a really bad head, neck and shoulder ache and huge brain fog. It is deeply unpleasant.

It’s hard to explain to someone who’s never experienced it, but the closest I can come is to say it’s a bit like a hangover, but much worse.

To help prevent or lessen the severity these herxes there’s a few things you can do. It helps to know that your liver does the vast majority of the work but when it gets overloaded then your skin takes up the slack, which is why many Lyme sufferers have skin rashes.

At the clinic we mainly do colonics, enemas and foot soaks in bicarbonate water. The colonics clean out your colon and lower intestines and remove a lot of crap (pun fully intended).

The enemas I’ve had so far have been bicarb and probiotic to promote gut health. Another one is the coffee enema which pokes the gall bladder to release its stored bile, and promotes enhanced detox in the liver.

There’s also infra-red saunas to make you sweat. This is one of my favourites at home, but I’ve not used the one in the clinic yet as it’s a new set up in the last week or so.

The good news is that my herxes are now starting to lessen in severity.  My good days are definitely getting better.

Live Blood Analysis

At the end of the week I went to a clinic in Paphos that does live blood analysis. I’m not sure how much to make of it yet as the jury seems out on whether it’s worth anything, because you can’t actually see the borrelia spirochaetes unless it’s early in the infection — they disappear into flesh and bone.

Here’s a shot of my blood. I actually have the live video feed too, which is fascinating. There was not a lot wrong but apparently the ones clumping together here on the left means I have some mould exposure. Other minor things to note were that I am not alkaline enough (Lyme turns the body slightly acidic which aids its survival) and I need more B12.

You’re probably also wondering how I am doing after 4 weeks. The answer is, a fair bit better. My fatigue is improved and I can climb stairs without feeling exhausted, and my brain fog feels like it’s a little better too. However I am not getting ahead of myself, I expect to be doing a lot more recovery when I get home, and will wait for 4-6 months before I make another critical assessment.

That’s it for now, more next weekend after I complete my last full week in Cyprus.

Posted in Lyme, personal | Leave a comment

Week 3 in Cyprus

Not a lot to say here other than that I have continued to herx quite strongly, and in fact last Monday I had probably the worst one I’ve ever had in the 5 years I’ve been trying to treat this crap.

I also started doing Rectal Insufflation (RI) of ozone, followed by a colonic to clean out the toxins that creates. The RI packs a huge punch, way more than I was expecting and I was wiped out for days.

I was feeling much better by the end of the week and actually felt a bit more energised over the weekend, although still fairly fatigued. However, I can see glimpses of feeling better with less brain fog, more energy and less fatigue, which gives me some hope that we’re getting somewhere with this. At least I can say that the good days are juuuust about beginning to outnumber the bad ones.

I managed to walk around the Marina and Old Port area again over the weekend, albeit slowly, so I’ll leave you with this lovely photo that I took.

Limassol Marina

Posted in Lyme, personal | Leave a comment

Week 2 in Cyprus

The treatment is starting to bite.

In the meantime, week 2 just happened. It’s been rough, very rough, as the major herxing started and I’ve also had some vein problems – two burst and one collapsed – so extra pain there and added complications finding new veins for the 10 pass ozone.

I started some new therapies too including some more detox and alternative methods of introducing ozone via rectal insufflation. I wasn’t prepared for quite how powerful that one is, I had a major herx from that.

One other funky one is the laser IV. Here’s a closeup where you can see the light under my skin inside the vein.




I can really feel the effects of the whole treatment programme starting to bite now. My body is exhausted, I ache everywhere, my muscles are weak, and for the first time ever I started getting wobbly legs. I can only presume that this is the ozone driving all the bacteria out into the open where it’s getting a smack on the head.

It possibly doesn’t also help that there’s a heatwave in Cyprus at the moment – it’s been over 40°C for the last week and it doesn’t get much below 30° overnight.

I’m now almost half way into my treatment. I think I am going to need an extra week here, so I’ll be sorting that out tomorrow. But I think it’s starting to work, and I feel a little more energy than normal.

It also has to be said that the community of people in the clinic and on chat groups is amazing. The mutual support is wonderful and some friendships are being forged. It’s sad that we met through the misery of Lyme, but I’m glad I did. Y’all know who you are.

(I removed my last post as it contained a bit too much detail for public consumption. I’ll reword it and re-post for posterity at some point.)


Posted in Lyme, personal | Leave a comment

Pre-Cyprus Lyme Status

I thought I’d write a few things down about my current state of health affairs, prior to heading to Cyprus next week. This is partly so I can record “the before” and compare to how I feel when I get back, and partly because I want folks reading this to understand how awful Lyme is on a daily basis. This is important not because I want sympathy, but because it can’t be said enough about how this is a hidden disease. Most people suffering will be trying to hide it, not show it, so they can have some semblance of a normal life.


So what am I hiding? Well, everyone with Lyme is a bit different. There’s plenty of similarities, but I don’t think I’ve come across any two Lyme sufferers who share the exact same set of symptoms. Here’s my list, and how I’d rate the severity of each, out of 10:

Symptoms and Severity

Fatigue8This varies from day to day but is generally bad. I can wake up in the morning and not feel like I've slept at all, and it's a struggle to move.
Joint/muscle pain6-8Arthritic-like symptoms. Knees especially hurt when kept bent, which is a huge problem on planes.
Headaches7Come and go, but when they come they bring the next symptom:
Brain fog8When it comes, I can't think straight for even moderate tasks.
Memory loss6Occasionally bad, mostly people's names just disappear.
Heart/chest pain/palpitations6Used to be a 10 but home ozone has helped a lot.
Tinnitus9Constant ringing. I can sometimes block it out but it's always there
Insomnia9Can nod off on the sofa, go to bed, and then lie awake all night.
Nausea/Dizziness/Balance problems5Comes and goes
Twitching4Sudden unexpected muscle spasms and twitches, pretty random.
Psychiatric7Sudden depression, anxiety, mood changes.
Nerve pain4Hot/cold/tingling/numbness

I’m confident that the clinic in Cyprus will help me, based on my previous experience with Ozone. I’ll follow up with another post in a couple of days with what the clinic is going to be doing.

Posted in Lyme, personal | Leave a comment

Off to Cyprus

It seems somewhat fitting that almost exactly 5 years since I became aware that I had Lyme-like symptoms, I’ve made the big decision to travel to Cyprus for intensive treatment as my own home treatment has been good at keeping the worst symptoms at bay but has proven very hard to totally eradicate the infection.

Cyprus has some world-class medical clinics and seems to be leading the field in terms of Lyme treatment using ozone. I’ll be attending for a month at a newly-built clinic in Limassol (so new that it’s not mentioned on that site yet) from June 20th this year.

I will continue to work as all I need is a laptop and an Internet connection. My accommodation and the clinic are all wifi-ed up!

I’ll post more updates as I progress through this treatment, and give you all the inside info in case you are thinking of making the same trip.

Posted in Lyme, personal | Leave a comment

Random Test Inputs – part 2


If you saw my last post Random inputs in unit testing you’ll remember that I was advocating the benefits of using random test data in your unit tests.

One of the bits of feedback that I had (and seems to be the main complaint of most people who are against this) is that you need reliable test input so that you can recreate failures.

I don’t think these two concepts are mutually exclusive. Let me explain.

A decent test framework will help you recreate failures

I use testtools as my preferred test framework for Python. One of its benefits is that its so-called Matchers will output useful information for failures, including the data used for input. As a very basic example:

import testtools 
class TestMe(testtools.TestCase): 
    def test_failure(self): 
        self.assertThat(5, testtools.matchers.Equals(4))

This produces the output:

$ python -m testtools.run fail.py       
Tests running... 
FAIL: fail.TestMe.test_failure 
Traceback (most recent call last): 
  File "fail.py", line 7, in test_failure 
    self.assertThat(5, testtools.matchers.Equals(4)) 
  File "/usr/lib/python2.7/dist-packages/testtools/testcase.py", line 435, in assertThat 
    raise mismatch_error 
testtools.matchers._impl.MismatchError: 4 != 5

You can see that the inputs are clearly listed. If this is not clear enough you can add more explanatory text that is output on failure. Changing your assertion to:

def test_failure(self):
    self.assertThat(5, testtools.matchers.Equals(4), "Expected 4, got 5")

Results in:

testtools.matchers._impl.MismatchError: 4 != 5: Expected 4, got 5

Thus, if you get a failure from a random input, it’s easy to see what data caused that.

Making your data recognisable

Once you start randomising a lot of input data, it starts to become hard to identify which input is which when you have a failure for code that has many inputs. Take this for example, which I have taken from my days as the MAAS engineering lead:

from itertools import imap, islice, repeat
import testtools
import random
import string

class TestMe(testtools.TestCase):
    random_letters = imap( 
        random.choice, repeat(string.letters + string.digits))

    def make_string(self, size=10):
        return "".join(islice(self.random_letters, size))

    def test_large_comparison(self):
        dict1 = dict(
        expected_dict = dict(person="foo", age="10", weight="200")

        self.assertThat(dict1, testtools.Matchers.Equals(expected_dict))

This results in:

FAIL: fail.TestMe.test_large_comparison 
Traceback (most recent call last): 
  File "fail.py", line 26, in test_large_comparison 
    self.assertThat(dict1, testtools.matchers.Equals(expected_dict)) 
  File "/usr/lib/python2.7/dist-packages/testtools/testcase.py", line 435, in assertThat 
    raise mismatch_error 
testtools.matchers._impl.MismatchError: !=: 
reference = {'age': '10', 'person': 'foo', 'weight': '200'} 
actual    = {'age': 'HL8qw3xnJO', 'person': 'IuhoaGzQHB', 'weight': 'Rfi3lxsiHf'}

My first question on seeing output like this is “where did that data come from?” because it could have leaked from buggy code and be totally unrelated to your intended input.

This has an easy answer if you make a small change to the test harness:

    def make_string(self, prefix="", size=10): 
        return prefix + "".join(islice(self.random_letters, size)) 
    def test_large_comparison(self): 
        dict1 = dict( 
        expected_dict = dict(person="foo", age="10", weight="200") 
        self.assertThat(dict1, testtools.matchers.Equals(expected_dict))

Here, the code has been changed so that the make_string() function will accept a fixed prefix for the string you want generated. This has the following effect on the output:

reference = {'age': '10', 'person': 'foo', 'weight': '200'} 
actual    = {'age': 'ageb8BIwdwZrM', 
 'person': 'personBSUhvYxFTU', 
 'weight': 'weightngdjfm7ef1'}

You can instantly see that your random input was in fact generated in the way you intended (or not, as the case may be) and thus easy to identify its source!

I hope this was useful. Leave me feedback if this helped you at all!

Posted in tech | Leave a comment

Random inputs in unit testing

CC by StockMonkeys.com

I recently had an upstream reviewer telling me that I should not randomise my test input because “randomness does not provide a useful input to the test and sets a bad example of practices for writing tests”.

I am going to explain here why this is wrong and it’s actually good practice to randomise inputs. Let me start by saying that random test failures are not the same thing as spurious test failures. I’ll come back to that later.

Consider this simple code under test, it’s a contrived example but you will get the idea:

def myfunc(thing):
    """This function just returns what it's given."""
    return "foo"

OK so let’s consider this a stub implementation, as it has an obvious bug. So, if we wanted to write a test for this we might write something like this:

class TestMyfunc(unittest.TestCase):
    def test_myfunc_returns_same_input(self):
        returned = myfunc("foo")
        self.assertEqual(returned, "foo")

Here, I am using a fixed input of “foo” as many people like to do in tests as a way of saying “this value is irrelevant”.

The bug should be obvious here — the test passes when it should not because the code under test is returning the same value as used in the test. As I say a fairly contrived example, but it illustrates the point that tests should never assume anything about code under test.

Here’s a better way of writing the test:

import random

class TestMyfunc(unittest.TestCase):
    def test_myfunc_returns_same_input(self):
        expected = random.randint(0, 1000)
        returned = myfunc(expected)
        self.assertEqual(returned, expected)y

(A further improvement could be to generate a random string, but I’ll leave that for a future blog entry.)

Here, we’re generating a random input and asserting that the returned value is the same as the input. This not only avoids the bug above but it is far better at demonstrating test intent. It will also never fail unless the code under test is buggy, and that brings me back to the point above about random vs spurious test failures.

A random test failure is good. It means you found a bug! A spurious test failure is one that indicates you’re not testing properly – an example of this is where you depend on some network connectivity to complete your test; as networks are inherently unreliable this is a bad test and will create spurious test failures when the network fails.

Finally, I can recommend that you look at a tool called Hypothesis, which is a property-based testing utility. My friend Jono explains it in his blog here: https://jml.io/2016/06/evolving-toward-property-based-testing-with-hypothesis.html

Posted in tech | Tagged , | 1 Comment

Glen Rock State Forest

The latest Phantom 4 video shot at Glen Rock State Forest in South East Queensland’s Scenic Rim.

Posted in Uncategorized | Leave a comment

Montville via Phantom 4

Enjoy the spectacular scenery of the Sunshine Coast Hinterland.

Posted in Drone | Leave a comment

Super Moon

While I was dropping my mother at the airport tonight, I thought I’d try to get a nice shot of the “super moon”. I wasn’t too disappointed with this result!

It’s hard to convey just how bright the moon is. I processed this shot so the detail stands out, but in real life it’s a glowing white ball.


Posted in Photography | Tagged | Leave a comment