How to do home ozone

It’s been one week since I got back home. I’ve had the worst jet lag I’ve ever had in my whole life, coupled with crazy insomnia, and I feel pretty awful. For that reason I am not going to re-score my symptom list yet as I want a true representation.

In the meantime, I’m going to tell you how to get your home ozone setup working. I bought myself a Promolife O3Elite kit which comes with the pieces to perform home insufflations and ozonate water.

For any home ozone setup to work, you need to get a source of oxygen. For this there are two options:

  • Bottled oxygen
  • An oxygen concentrator which makes oxygen from the air

Each of these has pros and cons. Bottled oxygen is cheaper in the short term than buying a concentrator (these can be several hundred or thousand dollars),  but with bottles you have the hassle of refilling them occasionally whereas concentrators never run out. Bottled oxygen is also more pure, usually at 99.5% oxygen, whereas concentrators run around 93% maximum.

In my opinion, if you plan on doing ozone saunas then the concentrator is the obvious choice, otherwise a bottle is better.

One more thing to mention, there’s two types of oxygen bottle, medical and industrial. The oxygen inside is identical, the only differences are:

  • Medical bottles use aluminium; industrial use steel
  • Different regulators are required depending on the type (more about that later)
  • Industrial bottles are cheaper
  • Medical oxygen sometimes requires a prescription

Because of the prescription issue, I have chosen to use industrial oxygen cylinders. I have also learned that it is possible to get the medical cylinders without prescription, apparently it’s just the regulator that needs one, but I cannot personally verify this.

When ordering the kit above, I chose to get the industrial 540 regulator and the syringe (not the bags) for insufflations. The bags look flimsy to me and I know some people have burst them. (NOTE: the 540 regulator is USA-specific, but they also send the so-called UK adapter with it, which also allows the USA regulator to fit on Australian cylinders.)

Here’s what it looks like when it’s connected, you will need a spanner/wrench to tighten the nuts.

Obtaining an oxygen cylinder is easy. In Australia you can open an account with BOC or Coregas and just go and pick one up (or delivery, but that cost more than the bottle itself for me). I got the D2 size for some portability, it’s got 2000 litres of oxygen in it.

So after all of that, I have a set up that looks like this:

I am going to start with rectal insufflations as they are pretty quick and easy. The components involved are:

  • The O2 cylinder
  • The brass regulator adapter
  • The green regulator
  • Plastic tubing for the oxygen to connect from the regulator to the ozone machine
  • Ozone machine
  • Silicone tubing for the ozone output (it has a one-way valve in it to stop water ingress to the machine, and a luer lock on both ends)
  • A syringe
  • A catheter

Before we start, it’s important to note the concept of gamma, which is a measure of the concentration of ozone that your generator produces. The gamma must be set to the right value for your particular treatment; in the case of RI I want to use a gamma of 40.

This value is a function of two things: The rate of flow of oxygen, which is controlled by the regulator, and the dial on the front of the generator. On the top of the generator you’ll see a chart which looks like this, which tells you the correlation between the settings and the gamma:

To get a gamma of 40 (well it says 41 but that’s near enough), we want a flow rate of 1/8 LPM (that’s one eighth of a litre per minute) and the dial set to 4. The flow rate is controlled with the dial knob on the end of the regulator here:

Ok now we’re ready to start. Get ready by inserting a catheter about 5-10cm into your rectal cavity. The other end with the luer lock should be freely accessible.

Now you need to prime the system, which means flooding it with oxygen for about 30 seconds before you start the generator; this is important as you need to remove any plain air from the tubes as this will cause poisonous nitrates to be generated if present. Make sure your regulator is set to 1/8 and turn on the oxygen flow by rotating the tap on the top of the cylinder. You’re unlikely to hear any hissing at this flow rate, so you might want to turn it up to 1LPM and pick up the end of the silicone tubing and listen for the hissing. Make sure you go back to 1/8 afterwards.

Now you can turn on the ozone generator by moving the dial to 4. Immediately insert the syringe into the luer lock on the end of the silicone tubing. After a few seconds you’ll start to see the syringe move as it fills with ozone. When it gets to just short of 200ml quickly turn off the generator and then the O2 cylinder tap. The residual pressure will keep filling the syringe for a few seconds so beware.

Keeping the syringe upright (ozone is heavier than air), remove the silicone tubing and then connect it to the end of the catheter. You’re now ready to start introducing the ozone!

Do this 50ml at a time, push the syringe and stop if it gets uncomfortable, but don’t worry it will pass. Once the full 200ml has been introduced, you can remove the catheter.

Try to hold in the ozone for as long as you can. 30 minutes is the ideal you want to aim for, any less and it reduces the effectiveness of the ozone. You may even find that after 30 minutes, you don’t need to worry about releasing it anyway as it will have all absorbed.

You’re probably not meant to re-use the catheters, but I am anyway as they’re expensive. I just clean the end out with warm water and it looks fine. Next time it’s used you could sterilise it with some alcohol rubs if you’re paranoid.

That’s it for now. I’ll talk about ozonated water and neti pots next time!

Posted in Lyme, personal | 1 Comment

Week 5, over and out

That’s it, I’m all done with treatment. I’m sat here in my apartment writing this blog entry, and in just over 4 hours my taxi arrives to take me to the airport.

In the last 5 weeks I have been poked, prodded, manipulated, magnetised, repeatedly stabbed with sharp things, watched as my blood was repeatedly removed and replaced (and sometimes thrown away), yelled out in pain, almost fainted, I’ve had monstrous herxheimer reactions, and had a lot of things shoved up my rear end.

But I’ve also laughed, and laughed a lot with the many new friends I’ve made here who are going through the same things, the same pain, the same crappy health, the same life experiences, and more. Having people around who truly understand the utter misery that Lyme Disease brings to your life is deeply uniting. It’s impossible for anyone to really understand what it’s like unless you have it, but it’s not something I would remotely wish on others.

In many ways I feel a little lucky because while I thought I was pretty sick, there are others going through even more debilitating symptoms. Some are very limited in mobility. Some have seizures. It makes it all the more impressive that people world-wide have to spend a lot of money to come here, often with very long flights like me, and fight through the pain to keep coming in to the clinic, day after day.

When I get back I do plan at some point to immerse myself into the advocacy side of Lyme, putting more pressure on the Australian government to do something about this debilitating infection, rather than sticking its head in the sand and claiming nothing is wrong. The very fact that nobody gets better in Australia until they come to a clinic that specifically treats Lyme is damning. I truly believe that this is a scandal of AIDS-like proportion waiting to happen, which is even possibly a reason why it’s getting suppressed at every opportunity as there will no doubt be prosecutions.

This is a picture that my friend Graham Binns took for me while visiting here 2 weeks ago, which features Australians who are travelling to the clinic. It has so far appeared in the LDAA newsletter, but I may take it to my local MP and or Senators when I have full energy back.

Anyway, you’re probably wondering how I’m getting on after 5 weeks. Let me start by saying that 6 weeks ago I posted a symptom checklist like this:

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 going to re-score it when I get home, but suffice it to say I felt pretty crappy. When I first got to the clinic I was exhausted from climbing the stairs between floors. My muscles ached, I had no energy, and my joints creaked.

The picture below is what I was able to do on my very last day at the clinic. I think it says it all.

While this looks pretty good, there is still a lot of work to do. I expect even more gains in the next few months as my body repairs itself now that (I hope) the infection has gone.

I want to say THANK YOU NeoMed and all the clinic staff. The standard of care is SUPERB. The clinic was clean, well equipped and full of caring and fun staff, whom I will remember fondly forever. I cannot compliment it any higher. I was very happy to provide my services for free to do some photography for the clinic before I left. You’ll see those pictures soon!

Also a huge thank you to my friends Gavin, Graham, and Jeroen for making the effort to fly 4 hours each way to get here to see me for a weekend. You put a huge smile on my face just as I had been going through a rough treatment period. You guys rock!

Shona and Glyn, also thank you for coming out to see me, it helped me put a smile on my face when I didn’t feel like smiling.

Lastly, but most certainly not least, I want to thank my father John for coming to Cyprus and being with me the whole time, because I could not have done this alone, and he helped me more than he realises. This is one of the few pictures I have of him not eating or drinking! (Well, about to eat…. LOL)

Posted in Lyme, personal, Uncategorized | 2 Comments

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       
Tests running... 
FAIL: fail.TestMe.test_failure 
Traceback (most recent call last): 
  File "", line 7, in test_failure 
    self.assertThat(5, testtools.matchers.Equals(4)) 
  File "/usr/lib/python2.7/dist-packages/testtools/", 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 "", line 26, in test_large_comparison 
    self.assertThat(dict1, testtools.matchers.Equals(expected_dict)) 
  File "/usr/lib/python2.7/dist-packages/testtools/", 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

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:

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