• What is this and why is it here? crossgeared.com was and now is again my blog. A blog is like whatever social media platform exists in your bubble, but is more difficult to maintain, is harder to find, and takes longer to read (no character limits). The crossgeared.com blog began in 2006, I stopped posting in 2013 and forgot about it for a decade or so, and it’s now 2026 and I’m back. Having been away for so long, I had to reacquaint myself with my blog, and this one appears to be mostly cycling related with a few old cars and tech related topics thrown in. I added a tag cloud way down there at the bottom that summarises all of this content for anyone interested.

    Update (August 2026): the tag cloud has become oollyClouds, the animated word cloud WordPress plugin. Cycling has remained a one of my favourite topics, I’ve added the decarbonisation of both transport and home energy and have more to say.

    Featured Posts


  • (not) Gravel Tyres

    Riding the Warburton Rail Trail

    I have a few bikes that are primarily ridden on gravel and most of my riding includes gravel, but none of my bikes are gravel bikes. And having made the list below, it looks like I don’t own any gravel tyres, either. So, here’s a list of road and MTB tyres* on non-gravel bikes ranked by gravel grade from road to technical singletrack, which mostly maps to Silca’s grades 1-4.

    * There’s a 700x35mm version of an XC tyre on the Gunnar, so maybe that one is (was) a gravel tyre when it was available, but it seems to be no longer.

    A Vittoria Corsa Control 700x38mm tyres on a Hunt Carbon 40 rim

    700x38mm Vittoria Corsa Pro Control on Hunt 40 Carbon Disc wheels

    Bike: 2020 Lynskey R300 “road” bike

    Gravel Category: Class 1-3

    Setup: Tubeless, measured tyre width: 35.2mm at apx. 40/45psi (F/R). The rims are hooked (as all rims should be) and are 22mm internal rim measurement.

    Why: The R300 is primarily a road bike, but I don’t like riding on roads. So, it has road tyres that work offroad. Road tyres can be excellent gravel tyres, depending heavily on the terrain and your comfort level sliding around with variable front and rear traction. The 35mm Continental GP5000S TR is known for being good offroad, but I have a preference for Vittoria and decided to try out the Corsa Pro Control. Vittoria do offer a 42mm version of the Corsa Pro Control, but I’m already pushing the published 32mm tyre clearance limit on the R300 and thought the 38s were enough. The tightest margin seems to be between the tyre and seat tube, where there’s about 6mm or clearance. The chainstays maintain at least 9mm of clearance with these, so maybe those 42mm tyres would fit after all. The R300 has an Enve All-road fork with 40mm of tyre clearance, so no concerns with the 38mm (35mm measured) Corsas there.

    Other thoughts: The Corsa Pro Controls are excellent on reasonably well maintained gravel and dry hardback, marginal if there’s any mud around, and useless in wet grass. These make tame singletrack a lot of fun, but stay away from rocks and be careful on roots. Oh, and they’re quite good on the road as well.


    A Vittoria Mezcal 700x35mm tyre on a Hunt 4-season wheel with a Paul Minimoto rim brake

    700x35mm Vittoria Mezcal on Hunt 4-season rim-brake wheels

    Bike: 2001 Gunnar Crosshairs cyclocross bike

    Gravel Category: Class 1-4

    Setup: Tubeless, had inserts, measured tyre width: 36.1mm at apx. 45/50psi (F/R), 17mm internal rim measurement.

    Why: The Gunnar has had a huge variety of road, cyclocross, touring, and gravel tyres ranging from 23-38mm over the 20 years that I’ve been riding it. There are two main factors limiting tyre choice on the Gunnar: rear tyre clearance at the chain stays and front tyre toe overlap. I rode the Ritchry Speedmax in 30, 32, and 35mm for years, then the Kenda Slant 6 was my go to tyre for gravel and singletrack for quite a while. Tyre width on the Gunnar hit a peak around 2012-2014 with some WTB All-Terrainasarus 38mm front and 35mm rear. Those were reasonably practical tyres, but the toe overlap was excessive. The Gunnar has toe overlap with anything about a 30mm, and those tall 38mm WTBs were too much. So, these 35mm Mezcals with their XC tread are good all-around tyres with a good compromise between size and toe overlap.

    Other thoughts: The Gunnar does have a second wheelset with a pair of tubed 700x32mm Vittoria Corsa N.Ext tyres on Fulcrum Racing 5 LG CX wheels. These were my “road” wheels, but they also saw use on gravel and singletrack. The Corsa N.Ext tyres are decent enough on class 1 gravel, but cornering was alway sketchy and singletrack was hit or miss, and the tubes are always prone to pinch flats. These wouldn’t be my first choice for offroad, but if I was going to ride them I’d want to make sure it’s very dry with no mud and no wet timber bridge decks.

    I also used to have a pair of Effetto Mariposa Tyre Invaders in some Kenda Flintridge* and later Alluvium tyres, but decided not to install the inserts on the current Mezcals. I haven’t had any pinch flats with the Mezcals and don’t see a need to use inserts for the type of riding the Gunnar sees these days.

    *- Those 700x35mm Kenda Flintridge tyres didn’t really fit. I trimmed all the side knobs of the rear Flintridge to (mostly) keep it from buzzing the chainstays.


    A 29x2.2" Specialized Renegade S-Works on an Easton Arc 25 Offset rim

    29×2.2 Specialized S-Works Renegade on Easton ARC 25 Offset rims

    Bike: 2011 Lynskey Ridgeline dropbar 29er MTB

    Gravel Category: Class 2-4

    Setup: Tubeless, no inserts, measured tyre width: 54.1mm/2.1″ at apx. 28/30psi (F/R), 25mm internal rim measurement.

    Why: I did not choose these wheels or tyres. This was Eric’s bike, and this was his preference. I first rode this bike with these tyres back in the northern hemisphere winter of 2024/2025 and my first impressions were that they weren’t ideal snow tyres, but held their own well enough. Now, having ridden them in sane conditions, I’ve found that they’re quite good. While I have some reservations about their casing and durability, I have been impressed with their speed on fast gravel and cornering on both gravel and hardpack. In the winter here, which ends next week, there is often a layer of “green ice” that unseats almost any tyre, and these are no exception. I’m saving this bike for the warmer and drier months that will be here soon.

    Other thoughts: What is green ice? This is a term I first heard in Adelaide where it was used to describe the growth of a usually green moss-like plant that tends to cover damp hardback found primarily on southern-facing hillsides that don’t see the sun all winter. There just so happens to be one of those southern-facing hillsides that I ride to get down to the Main Yarra Trail here, and it’s caught me out a few times on a bike and on foot. The only tyres I currently have that I trust on this stuff are the 29×2.6/2.4″ (F/R) Maxxis Forekaster 3C MaxxTerras that I have on the rigid singlespeed, and even then it’s marginal.


    A 27.5x2.2" Maxxis Rekon Race 3C MaxxSpeed on a Stan's Crest Mk3 rim

    27.5×2.25 Maxxis Rekon Race on Stan’s Crest Mk3 rims

    Bike: 2008 Kent Eriksen dropbar 650b MTB

    Gravel Category: Class 3-4

    Setup: Tubeless, no inserts, measured tyre width: 56.5mm/2.2″ at apx. 28/30psi (F/R), 23mm internal rim measurement.

    Why: The Erkisen was originally a 100mm hardtail built for 26×2.1″ tyres, and the first tyres I installed on it in 2008 were tubed 26×2.1″ Panaracer Fire XC Pros. The Eriksen was converted to dropbars in 2019, still with the 26″ wheels and some stylish tan-wall Schwalbe Nobby Nic 26×2.25″ tubeless tyres. The initial 650b set up was Maxxis Ikon 2.2×27.5″ front, Maxxis Aspen 2.1×27.5″ rear. The Ikon is a reasonably good, predictable tyre, and the Aspen is a fun, loose rear tyre, at least in the small 27.5×2.1″ size. The limiting factor for fitting 650b rear tyres in this 26″ frame is the rear brake bridge, and the 27.5×2.2″ Ikon would rub the brake bridge, hence the Aspen 2.1″. However, I found that the low-tread 27.5×2.2″ Rekon Race fits the rear, and I swapped to a pair of these when the Ikon/Aspen needed replacing. The Rekon Race isn’t the grippiest tyre around, but it’s reasonably predictable and pretty fun. I currently have a 3C MaxxSpeed Rekon Race on the front and a harder dual compound version on the rear. I would like a 3C MaxxTerra on the front, but it seems the market for soft compound, low tread 650b XC tyres is too limited. Go figure.

    Other thoughts: Good 27.5″ tyres in fun sizes for singletrack aren’t easy to come by. I know these Maxxis tyres aren’t the most efficient, but neither is a dropbar MTB with 46cm Ritchey Beacon bars that flare to over 60cm, which is wider than the Titec 555mm flat bars I originally had on this thing in 2008. The point here is more fun than fast or efficient, and Maxxis tyres generally allow for a lot of fun. I did prefer the feel of the Ikon on the front at the limits of traction, but both the Rekon Race and Aspen are good enough on the rear.


  • Battery Management

    , ,

    I have a 19.3kWh BYD HVM home battery along with a 6.6kW solar panels, both connected to a Fronius Primo GEN24 5.0 Plus 5kW inverter. For more info on those, go see that other post. When the system was initially configured, everything was set to what I gather was a fairly standard configuration that charged the battery when there was excess solar, and consumption prioritised solar, then battery and finally grid energy, and that was that.

    This configuration works well in the summer when there’s ample solar generation. However, winter charging has not been ideal. The battery was sitting at a fairly low state of charge (SOC) throughout the winter, most solar energy generated was directly consumed, and the solar production that did exist trailed off considerably as we got towards to early winter sunsets. This isn’t really a problem, other than how it interacts with my energy plan. I have a time of use plan with the following tariffs:

    TariffTime of DayCost per kWh (AUD)
    Off Peak21:00 – 15:000.17270
    Peak15:00 – 21:000.30250

    Those early winter sunsets fall in roughly the middle of that peak energy pricing window, so the result is that solar was being directly consumed during peak generation with almost no benefit during the peak pricing window when it would be the most advantageous. After a long and drawn out back and forth with the solar installer, I finally gained ‘Technician’ access to the inverter, which allows more access to various settings for the inverter, solar, and battery.

    What did I change? I made one change to the battery management that enabled forced loading at a set rate for a set period each day. What this does in practice is force the battery to charge at a set rate regardless of solar production, which in this case will pull from the grid if there is insufficient solar production. Specifically, I have my system set to charge at a minimum of 2kW between 10:00 and 15:00. So, if there is 2kW or more solar production available to the battery, nothing changes. If there is less than 2kW of solar production available then the difference between the solar production and 2kW is pulled from the grid and sent to the battery. Solar production is both directly used by household demand and used to charge the battery, so factor in any direct usage that reduces available solar production. Eg. If the solar system is generating 700w on a rainy Melbourne winter day at 12:30, then that 700w goes into the battery along with 1.3kW pulled from the grid (plus any household demand) and the inverter adjusts these levels thought the forced loading window to maintain a 2kW charge rate.

    solar.web screenshot showing forced loading from grid with solar generation
    This view from solar.web shows 3.58kW solar generation, 1.73kW household demand, and 2.00kW of battery forced loading resulting in 150w being pulled from the grid

    Why this time window at this rate? Let’s begin at the end. The time window ends at 15:00 because that is when peak pricing begins, and I want the battery SOC at its peak at the beginning of the higher peak pricing. The 10:00 start time is set because it usually aligns with a reasonable level of solar production and the five hour period between 10:00 and 15:00 allows my 5kW inverter to charge the battery at a minimum of 2kW which results in adding roughly 50% to the SOC; 2kW x 5.0 hours = 10kWh, and 10kWh / 19.3kWh = 0.518 52% SOC . A 50% SOC was chosen because it leaves significant overhead for any additional solar production that occurs after 15:00, any left over SOC from the previous day, and 10kWh is generally more than enough to get through the daily peak pricing period.

    That last point, 10kWh, is key. While the charge window and rate have their own reasoning behind them and 10kWh is apx. 50% SOC, more importantly this 10kWh enough to get through the peak pricing period which maximises the benefits of time shifting grid energy use. Considering this, you really have to start with a system that’s designed for your needs to let this work efficiently. If you have a battery that’s too small to get you through the peak pricing window you’ll miss out on some portion of the cost savings or you’ll export solar production to the grid when your battery reaches capacity (100% SOC). If you don’t have enough solar generation / inverter capacity, then you may have to set your minimum charging rate higher or the charge window larger than ideal and you might favour grid-sourced energy over your own. In summary, my calculations worked out for my system and my needs, but this isn’t a one size fits all situation.

    What about decarbonisation? Wasn’t that the whole point? Another consideration is the source of the grid energy charging the battery. I could charge the battery anytime, including over night when the grid demand is low. However, that would more or less guarantee a higher level of energy produced from fossil fuels as wind and hydro power in Victoria wouldn’t be supplemented by solar overnight. You can check out OpenNEM for real time and historic data. Furthermore, the 10:00 – 15:00 window also includes the various free energy windows that were designed to promote energy usage when there is generally excess solar generation available. Taking a step back, time shifting demand on the grid from peak to off peak reduces the need for the fossil fuel energy generation that supplements wind, hydro and solar in Victoria. So, aligning the battery force loading with solar generation is beneficial not only for my own solar production, but grid solar production as well, both of which are positive steps towards decarbonisation.

    A histogram of energy usage showing the period before and after the battery forced loading change. Data and chart sourced from my energy retailer, GloBird Energy.
    Energy consumption 23 July 2026 – 18 August 2026. Data and chart sourced from GloBird Energy.

    Did it work? I’ve been running the system with this configuration for a couple weeks and our peak energy consumption has gone from a very roughly 8-11kWh per day to none (aka 0kWh). The scheduled forced loading began on 8 August 2026, which is where the peak usage stops on the chart above. Looking at this chart we can also see that overall energy use is declining and solar production is increasing. Keep in mind that we’re comparing periods where there are at least three major confounders occurring: solar production is increasing, the solar production window is widening, and winter temperatures are moderating. I addition to that, we have two EVs, and they heavily skew the data whenever they’re charged, which tends to be sporadic and infrequent, but never between 15:00 and 21:00. So, there’s probably not a whole lot we can read into these data at the moment. A better comparison might be to revisit peak energy use after next winter and compare larger time periods spanning comparable months.

    What about when spring and summer arrive? As discussed earlier, the energy source charging the battery during the window should dynamically adjust with solar production and will probably result in no energy being pulled from the grid on most summer days. But, I’m going to keep an eye on it and disable this forced loading schedule during the summer and autumn months if the battery is at capacity too early in the day and if a lot of evening solar production is going back to the grid.

    Any other considerations? We need to think about the estimated losses due to inefficiencies in the system. Storing grid energy in a home battery and reusing it later isn’t free. There are losses along the way, those losses reduce the benefit, and it’s a good idea to think about these costs when one of the primary reasons for time shifting grid energy use is financial. If we assume the round trip efficiency of storing energy in the battery and reusing in the evening is between 85% and 90%*, then the loss during peak pricing ($0.30250/kWh) is between $0.031 and $0.019, all of which is far less than the $0.1298/kWh peak pricing premium over the base rate. In useful terms, the estimated benefit of all of this when we include losses is 10-11c/kWh. I’d call that a win and makes this whole exercise worthwhile.

    *- This is outside of my area of expertise and these estimated efficiencies are an intentionally large window. It might be inaccurate, but I think there’s a high likelihood that the actual number is usually somewhere in this window.

    How can you use any of this? Well, I think you could estimate your peak usage, charge over a time period that overlaps significantly with your solar production at a rate that will approximate your peak usage leaving enough SOC headroom for solar storage, and assuming none of these calculations divides by zero, see what happens.

    Update, 22 August 2026: Batteries send power prices up in midnight charging mystery Just for the record, I had nothing to do with this. While in the process of setting up my forced loading schedule I did charge my battery once overnight on 7 July 2026, that was in a different state and a week earlier. I know tone doesn’t always translate here, and this is obviously absurd and said in jest. But, an interesting story nonetheless.

    More Updates? I plan to revisit this in about a year’s time, which will be August/September 2027.


  • oollyPrints: A 3D Model Gallery

    Aside from decarbonising my house, I’ve been designing and printing various things for many years. While I have been sharing a few of these designs on Thingiverse, that’s becoming less and less pleasant. It seems like those in charge over at Thingiverse have been reading Cory Doctorow, because they’re a textbook example of enshitification. The ads and garbage added to the site over time, and especially recently, have made it unpleasant and pretty much unusable. I wouldn’t be surprised if Thingiverse just devolves in to a recursively looping crypto ad someday (soon).

    I was so frustrated with Thingivese that I’m developing another WordPress plugin, WoollyPrints, the sixth of my Woolly.dev data vis plugins. WoollyPrints builds galleries and manages downloads for 3D models with no ads, no tracking, no popups, nothing. This one isn’t strictly data visualisation, but also isn’t not data visualisation as I’m sure you could fill a gallery with topo maps and bar chart models for data that is somehow better communicated as small plastic bits.

    Taking a step back and recognising the often repeated pattern of the destruction and enshitificaiton of social media and other shared resources (commons?), I think leaning more heavily on self-sufficiency and owning your own data as seen in WoolyPrints, this blog, or perhaps even an electrified house, are a good moves these days. However, it’s probably also a good idea to do these things, like most others, in moderation. We wouldn’t want to end up off grid writing blog posts in a cabin in the middle of Montana.

    Whatever the case, here’s a demo with a few of my favourite things (or at least things that were easy enough to find and upload). Don’t be surprised if WoollyPrints morphs into something else. I’m actively developing this one, we can all see that I’m not great at limiting the scope of projects, and WoollyPrints may still undergo some major changes. I’ll post a follow up when this one is available for download at woolly.dev and in the WordPress Plugin Directory.

    Update 23 August 2026: it changed. WordPress have an absurdly broad ban on any plugin name beginning with ‘Woo’, hence the new name. I suppose it’s just bad luck for woodworkers, dogs (woof), knitters, and sheep.

    In the meantime, here’s a rotating Woolly.