Just rubbish

Last Sunday around noon I realised that I shouldn’t be sitting mindlessly browsing the internet when Melbourne for once had half decent weather. Normally I’d go out for a run however my body needed some good recovery time so I decided to go on a walk. (narrator: this adventure did not end up being good recovery time). I slapped on some sunblock and a hat and set off.

The rough plan was to go on maybe a 5-10km/~1hr walk. Enjoy the sunshine and river. That sort of thing.

Self of myself wearing a hat while outdoors on a walking track

Walking lets you take in the sights better. You get to see a lot detail than just jogging past. There’s no pressure, you can stop to take a picture or enjoy a lizard friend crossing your path.

Lizard friend enjoying the nice sun on a clear patch of dirt

I however became more and more frustrated at the amount of litter I walked past. Right next to the river.

I eventually found a cement mix bag blowing in the wind. That was it. I was going to take that bag and pick up every bit of litter I could find along the way. I was walking, I had all the time in the world, I may as well do something good.

Concrete bag full of rubbish

It didn’t take long however to fill the bag. By that time I had reached the Collingwood Children’s Farm (I must stress, that this is a farm in which children learn farming. They do not farm children there). I found a staff member and traded the concrete bag filled with rubbish with a new cardboard bag. In hindsight I should have tried to keep the concrete as it held a bit more, but I need to dump the rubbish and this was the easiest way.

Now I probably should have turned back then, however I was enjoying being outside and the weather. So I kept on going, picking up rubbish, jumping into creeks to fish stuff out, digging out stuck cans and bottles from garden beds.

Two cardboard bags full of rubbish

Along the way I found some interesting things:

  • 4x Bicycle rims
  • North Melbourne Rec center pass (seems to be Mifare Classic)
  • A credit card
  • A surprising amount of clothing
  • Two different shoes
  • A full bottle of hair conditioner
  • Hand pump paint sprayer
  • Menu log delivery bag
  • Scaffolding tag

Shoe left on the side of the path

I think the things that disappointed me most though were:

  • Energy gel packets (these are used for refuelling runners and cyclers on the go)
    • It was always the same brand - so maybe it’s just one arsehole that runs or rides a lot
  • Dog litter bags
    • I don’t think I’ll ever understand this. People pick up after their pets, then leave the bag near the footpath. This is literally the worst.

The bags of rubbish kept on filling and I kept on going. Where I could I favoured bins I could sort recyclables out - however some councils seem to only have general waste bins. Better in landfill than in the river though. I ended walking 20km over 4 hours.

Garmin Connect screenshot showing a route around Melbourne’s capital city trail starting in Richmond and ending in the Docklands. 20km traveled

Probably the worst section was from Flemington Bridge area where the M2 covers the track. I had to walk past so much rubbish because I couldn’t fit it in my bag. I suspect this section could do with more public bins however my guess is that most of the rubbish is from motorist yeeting their rubbish from their cars. That appeared to be a common thing as anywhere road related had significantly more rubbish.

Two bags over full of bottles and containers

I don’t think it’s all doom and gloom for the future though. I found surprisingly few shopping bags in my travels. I was expecting to find more plastic bags along the way to increase how much litter I could carry between bins. Guessing the plastic bag bans have worked well then. A lot of what I did pick up was bottles and cans. With Victoria finally introducing the container return scheme today (1st November 2023 as I write this post) I’m hoping to see a huge improvement. Coffee cups however… I think we need to consider a ban on those.

For me this was an unplanned adventure. A lot of people got in touch with me after asking me to go watch Beau Miles. I since have, and their videos are worth a watch. He’s a little more planned with collecting rubbish and I think I should start thinking about improving my rubbish collecting strategy.

The plan that isn’t so much a plan

I don’t really do these long walks often. But maybe I should? Maybe next time I should consider:

  • Garden bags for collecting more waste (ideally I want to grab these second - things like pool salt come in them are generally used once)
  • Snacks and water - While there was water on the track, I didn’t eat or drink anywhere near as much as I should have
  • Support bike with trailer - maybe I could run behind a bike with a trailer to hold more stuff - this is a bigger project though
  • Maybe focus on a really bad area rather than a really long walk
  • Plan out where to return rubbish to - ideally being able to recycle

If I’m just going out for a walk I may as well pick up some trash along the way. Maybe I’ll do this again sometime.

Python Unit Testing

I’ve recently been able to sit down and do some more backend work on some SondeHub backend code. Some of these changes I wanted to ensure didn’t cause any problems or issues to end users. To help build confidence that the changes would ok I started looking at Python unit testing solutions. I’ve only done minimal unit testing in Python before some time ago, but with a quick read of the unittest python docs page I was up and running.

I’m not going to bore you with the details here, but I wanted to share some of the features I found quite useful to test some bits of our code.

The first is MagicMock(). This lets you quickly mock out a method. The advantage to using MagicMock over your own method is that you can quickly assert a bunch of conditions to check if the method was or wasn’t called and with the correct arguments. An example usage of this might be:

import boto3
from unittest.mock import MagicMock

sns = boto3.client("sns",region_name="us-east-1")

# Mock sns.publish
sns.publish = MagicMock(return_value={"meow":"meow"})

sns.publish(TopicArn="blah", Message="blah")

# check to see if it was called

The mock library also contains patch which works very similar to MagicMock, but you can use it as decorator. When used this way you don’t need to worry about cleaning up or resetting the mock for every test. You can also use the wraps argument to call a real method while still retaining the ability to trigger assertions.

@patch('time.sleep', wraps=time.sleep)
def test(PatchedTime):


Speaking of assertions, it’s sometimes handy to test that methods are called with the correct arguments in the correct order. Python unittest makes this fairly easy allowing a list of calls to be checked using assert_has_calls

from unittest.mock import MagicMock, call, patch

        call(json.dumps({}),"flight-doc/_search", "POST"),
        call(json.dumps({}), "ham-telm-*/_search", "GET"),

With unittest I was able to create a few core tests for functionality along with write tests for the new functionality I was building (yay test driven development!). Even with the patchy cell coverage along my train ride was able to quickly iterate over a few designs without the need for manual testing against a live backend. I know that this hasn’t been an in depth look into Python’s unittest functionality, however I hope it sparks someones interest in giving it a go.

Melbourne (Half) Marathon 2023

Yesterday I took part in the Melbourne Marathon Festival Half Marathon. While this was my first half marathon race, this wasn’t the first time I had competed in the festival having completed the 5km event last year in 30 minutes.

Alex and I running in front of Flinders St station

When people asked if I would be entering long racers or doing longer runs I shrugged it off as it would take significantly long to train for. I started the year off training for the 5km event again.

It probably sounds a bit silly, but my original goal was for a sub 25 minute 5km. The reasoning behind this is when you sign up for the Melbourne Marathon Festival each event has two different category. For the 5km this was below 25 minutes and above 25 minutes (inverted colours). I wanted to enter for the faster speed for the event. This would require shaving 5+ minutes off my personal best.

Goal: 5km sub 25 min

With the longer and longer training runs, and completing a few half marathons for fun, I realised that I might be in with a chance for entering the festival’s half marathon in the “faster” category @ 2:10:00 - so I did just that.

Goal: 5km sub 25 min 21.1km sub 2:10:00

Then in June I broke 2:06:18 during training, followed by 2:03:46 in July. Maybe I could do even better than I expected. Could I complete a sub 2:00:00 half?

Goal: 5km sub 25 min 21.1km sub 2:10:00 21.1km sub 2:00:00

Lead up

I ended up running about 30-35km a week, along with a bit of cycling. Tapering off about 2 weeks before. I think the distance could have been longer but its what I could fit in for time and recovery. Roughly every month or two I was also doing a half marathon.

Most of my training was less about getting my cardiovascular or leggies strong enough but actually getting my back used to the distance. While I’ve found 5 and 10km runs fine, 21.1km pushes the limit of my scoliosis.

The next problem I had was shoes. This turned into quite a conundrum for me. For short runs I had been using NB 1080v12 - these were soft and nice to run in but on long runs I started getting blisters. I switched to using my NB Hierro v7 - these I found a little more firm and grippy. However the Hierro v7’s were already somewhat past when they should be replaced, and were only going to get worse. They contained no grip, and barely any padding.

Hierro shoe with back and front grips worn down flat
Trail shoes should not look like this

This lead me to go buy new shoes. I was tempted to buy another pair of Hierro v7’s, however they aren’t really the best shoes for this kind of run. I ended up purchasing a pair of HOKA Clifton 9. Initial short runs these were amazing, and set some really good times with these shoes. But I quickly discovered on long runs I got large blisters.

I was once again stuck. It was too close to race day to try more shoes, so in the end I went with the NB 1080s. Some more practice runs showed that wearing better socks, the extra wear-in, and better form made the blister problem negligible.

Unfortunately after some of my tapering period some of my runs left me with some pain and issues in my knees and ankle areas. A 2 day rest before the event seemingly sorted that out - maybe or maybe not. On the good news my HRV status had moved from bad to great over the last week.

The day

I’m not sure if it was eating in the morning or the anxiety of running a half - but my stomach was not happy. Walking to the start feeling like I was going to puke the entire way. I guess for me it was lucky that the start chaos meant a fairly slow start to the race and my stomach was able to settle in the first kilometre.

Alex had an unfortunate series of events causing her not to be able to run the pace she had planned, but luckily for me she was able to be my own personal pacer. We placed our selves just behind the official 2:00:00 pacers, but due to the slow start I lost sight of them very quickly.

I’m really glad to have had Alex with me. I didn’t quite understand the sheer number of people who I would be running with and often got overwhelmed. Having her there with me was able to keep me calm. There were around 10,000 people in the half marathon - though the course contains sections that overlap with the full marathon, adding to the amount of people.

Around the 5km mark I saw the pacers in the distance and by around the 10km mark we weren’t far away from them. We were setting around 5:30min laps - a great pace and better than I thought.

My energy/food plan was to start eating a chocolate bar around the 8km mark and eat a little bit more of it over the next 4 or so km. I had done this on previous runs and it had worked well. This plan did not go so well however. At the 7.5km mark I tried to start eating only to find that I had managed to melt the entire chocolate bar into goo. I had a little bit of it but didn’t eat any more of it after that. Given I had been calorie negative for the last few weeks, this was not good.

Alex and I running around a corner on the road
32047 did a respectful 02:00:18 and a much more consistent pace than myself

The pace started to slow and at the 15km mark we were doing 6:00min/km. I could no longer see the 2:00:00 pacers. I felt completely out of energy along with some ankle and hip pain. At 17km I walked for a short amount, and again at 19km. The desire to push through was high but I’m glad I didn’t - seeing a number of people collapsed near the finish line made me remember that it’s not worth putting yourself at that risk.

Alex and I approaching the finishing line

I was definitely at my limit entering the MCG, barely making it through the entrance, but seeing the line gave me just that little bit of extra energy to get me to the end. Alex encouraging me to pick up the pace - though I didn’t really have much left in me. We crossed the line together holding hands. An amazing event.

Alex and I crossing the finish line holding hands

Official time of 2:02:06. Not quite the planned sub 2 hour, but still a personal best and an amazing achievement for someone who had only really just completed C25K in 2022.

Selfie of Alex and myself with finishing medals post run

I’m not entirely sure what’s next - but I have something special for myself planned for December. One thought I’ve had is trying for quicker Parkruns. I know next year I’m certainly going to try and work out the pre food and race fuel stuff a bit better - my stomach is still recovering.