<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://ryanward.dev/feed.xml" rel="self" type="application/atom+xml" /><link href="https://ryanward.dev/" rel="alternate" type="text/html" hreflang="en" /><updated>2026-10-15T06:41:38+00:00</updated><id>https://ryanward.dev/feed.xml</id><title type="html">Ryan Ward</title><subtitle>A place for my thoughts and ideas.</subtitle><author><name>Ryan Ward</name></author><entry><title type="html">My roadtrip with an EV</title><link href="https://ryanward.dev/2026/10/15/atto-3-roadtrip/" rel="alternate" type="text/html" title="My roadtrip with an EV" /><published>2026-10-15T00:00:00+00:00</published><updated>2026-10-15T00:00:00+00:00</updated><id>https://ryanward.dev/2026/10/15/atto-3-roadtrip</id><content type="html" xml:base="https://ryanward.dev/2026/10/15/atto-3-roadtrip/"><![CDATA[<p>From 23 to 27 September we drove our BYD Atto 3 from Melbourne to Bright, on to Canberra and back: almost 1,500km, a 50 kWh battery, and two kids under four. Charging took eight stops and totalled $177.32.</p>

<p>The whole trip was better than I could’ve hoped.</p>

<div class="trip-replay" data-src="/assets/trips/atto-3-2026/trip.json">
  <noscript><p>This interactive map needs JavaScript. The charging stops are listed in the tables below.</p></noscript>
</div>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/maplibre-gl@5.24.0/dist/maplibre-gl.css" />

<script src="https://cdn.jsdelivr.net/npm/maplibre-gl@5.24.0/dist/maplibre-gl.js" defer=""></script>

<script src="/assets/trip-replay/trip-replay.js" defer=""></script>

<h2 id="the-numbers">The numbers</h2>

<table>
  <thead>
    <tr>
      <th>Measure</th>
      <th>Total</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Public charging sessions</td>
      <td>8</td>
    </tr>
    <tr>
      <td>Total cost</td>
      <td>$177.32</td>
    </tr>
    <tr>
      <td>Energy delivered</td>
      <td>~230 kWh</td>
    </tr>
    <tr>
      <td>Time charging</td>
      <td>~4.5 hr</td>
    </tr>
    <tr>
      <td>Average price</td>
      <td>~$0.77 per kWh</td>
    </tr>
    <tr>
      <td>Average charge power</td>
      <td>~51 kW</td>
    </tr>
  </tbody>
</table>

<p>Costs are from my bank transactions; energy is shown in the apps with two here approximated.</p>

<p>Public chargers ran $0.75 to $0.85 per kWh, apart from the Tesla at Coolac at roughly $0.55. At home it’s closer to $0.20.<sup id="fnref:costs"><a href="#fn:costs" class="footnote" rel="footnote" role="doc-noteref">1</a></sup> Chargers advertise 150 to 300 kW. The Atto 3 tops out at 70 kW and averaged about 50.<sup id="fnref:speed"><a href="#fn:speed" class="footnote" rel="footnote" role="doc-noteref">2</a></sup></p>

<h2 id="day-by-day">Day by day</h2>

<h3 id="wednesday-23-september-melbourne-to-bright">Wednesday 23 September: Melbourne to Bright</h3>

<p>The first charge was at the Ampol Foodary in Avenel on a 150 kW Evie charger, from 1:28 to 1:56 pm. It delivered 24.57 kWh and cost $19.91.</p>

<p>At 3:49 pm, we plugged in at BP Pulse, Glenrowan North. In 24 minutes it delivered 21.52 kWh for $16.14, leaving the battery at 85%, plenty to get to Bright.</p>

<p>Both spots doubled as breaks: toilets, food, stretched legs, a play area. For neither of these were we here waiting to charge longer than we wanted to be.</p>

<p>We arrived at Bright with about 40% or 20 kWh of charge. In retrospect we probably could’ve got away with a single stop but it was our first long trip so we played it safe.</p>

<h3 id="thursday-24-september-bright">Thursday 24 September: Bright</h3>

<p>In Bright we used a 50 kW Evie charger, from 11:25 am to 12:00 pm. It delivered 25.14 kWh for $19.36. I went solo to charge it and grabbed some groceries from IGA and lunch so wasn’t actively waiting. Otherwise we walked everywhere in Bright and didn’t use the car.</p>

<h3 id="friday-25-september-bright-to-canberra">Friday 25 September: Bright to Canberra</h3>

<p>On Friday we made two charges just tapping with card, so I don’t have good data for them. First an NRMA station in Holbrook at about 10 am, which cost $29.60, and second the Tesla supercharging station outside Coolac at about 12 pm, which cost $14.59. Disconnecting took some googling; double-unlocking the car did it.</p>

<p>We arrived in Canberra with about 30% and slowly charged back up to 100% using home charging (about 1 to 1.5 kW of power) over the next few days which was free to us (it would’ve cost our host about $7-$10).</p>

<h3 id="saturday-26-september-canberra">Saturday 26 September: Canberra</h3>

<p>Questacon was fun!</p>

<h3 id="sunday-27-september-canberra-to-melbourne">Sunday 27 September: Canberra to Melbourne</h3>

<p>Three charges on the way back.</p>

<p>Sunday meant three stops on the way home: Tarcutta, Wodonga West and Avenel. Avenel was the only annoying one. Four chargers, all busy, so I waited about 15 minutes. We’d arrived on about 10%, so there was no real choice but to chat with others waiting. It was the only time charging held us up, and the kids got out the colouring books and had a good time. We finally got to Melbourne on about 20%.</p>

<h2 id="would-i-do-it-again">Would I do it again?</h2>

<p>Yes, this gave me way more confidence for longer trips. If you do regular country trips the Atto 3 probably would get tedious. For us, doing it rarely, it was fine. More chargers would only help though.</p>

<h2 id="all-the-charging-sessions">All the charging sessions</h2>

<table>
  <thead>
    <tr>
      <th>#</th>
      <th>When</th>
      <th>Stop (network)</th>
      <th>kWh</th>
      <th>Duration</th>
      <th>Cost</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Wed 23 Sep, 1:28–1:56 pm</td>
      <td>Ampol Foodary, Avenel VIC (Evie)</td>
      <td>24.57</td>
      <td>27 min 57 s</td>
      <td>$19.91</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Wed 23 Sep, 3:49 pm start</td>
      <td>Glenrowan North, Hume Fwy, Wangaratta South VIC (bp pulse)</td>
      <td>21.52</td>
      <td>24 min</td>
      <td>$16.14</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Thu 24 Sep, 11:25 am–12:00 pm</td>
      <td>24 Wills Street Parking, Bright VIC (Evie)</td>
      <td>25.14</td>
      <td>35 min 11 s</td>
      <td>$19.36</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Fri 25 Sep, about 10 am</td>
      <td>NRMA charging station, Holbrook NSW</td>
      <td>~37 (est.)</td>
      <td>~45 min (est.)</td>
      <td>$29.60</td>
    </tr>
    <tr>
      <td>5</td>
      <td>Fri 25 Sep, about 12 pm</td>
      <td>Tesla charging station outside Coolac NSW</td>
      <td>~26.5 (est.)</td>
      <td>~30 min (est.)</td>
      <td>$14.59</td>
    </tr>
    <tr>
      <td>6</td>
      <td>Sun 27 Sep, 9:38–10:10 am</td>
      <td>Ampol Foodary, Tarcutta NSW (Evie)</td>
      <td>28.83</td>
      <td>31 min 47 s</td>
      <td>$24.51</td>
    </tr>
    <tr>
      <td>7</td>
      <td>Sun 27 Sep, 11:34 am–12:07 pm</td>
      <td>7-Eleven, Wodonga West VIC (Evie)</td>
      <td>30.75</td>
      <td>33 min 35 s</td>
      <td>$24.29</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Sun 27 Sep, 2:23–3:05 pm</td>
      <td>Ampol Foodary, Avenel VIC (Evie)</td>
      <td>35.71</td>
      <td>41 min 52 s</td>
      <td>$28.92</td>
    </tr>
  </tbody>
</table>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:costs">
      <p>Costs are from my bank transactions. Energy is from the charging apps, except Holbrook and Coolac, where I tapped a card and only have estimates (about 37 and 26.5 kWh). <a href="#fnref:costs" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
    <li id="fn:speed">
      <p>Other cars sharing the chargers and the battery slowing its intake above 80% account for the gap. <a href="#fnref:speed" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name>Ryan Ward</name></author><summary type="html"><![CDATA[went way better than I'd expected.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ryanward.dev/images/ryan.jpg" /><media:content medium="image" url="https://ryanward.dev/images/ryan.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Why I don’t share pictures of my kids on social media</title><link href="https://ryanward.dev/2025/11/10/parenting-and-social-media/" rel="alternate" type="text/html" title="Why I don’t share pictures of my kids on social media" /><published>2025-11-10T00:00:00+00:00</published><updated>2025-11-10T00:00:00+00:00</updated><id>https://ryanward.dev/2025/11/10/parenting-and-social-media</id><content type="html" xml:base="https://ryanward.dev/2025/11/10/parenting-and-social-media/"><![CDATA[<p>I have an almost three-year old and a ten-month old, and my partner and I made an early decision not to upload pictures of them online. Facebook, Instagram, TikTok, etc - all are included until at least my kids can give informed consent to do so.</p>

<p>This was pretty easy for us to decide to do, as we already don’t particularly like uploading pictures of ourselves on social media. But I wanted to consider some better reasons that anyone should be swayed by.</p>

<p>One common argument aginst image-sharing is that you are ‘feeding your kids to the algorithm’ if you put them online, i.e., they’ll end up in the pool of data used in generating abusive and exploitative images and videos.</p>

<p>By itself, I never found this particularly convincing.</p>

<p>The fact that material exists is aborhent but a vectorised version of my kid in that dataset doesn’t change whether the material is being generated and causing harm.</p>

<p>However, the images being scraped can also be used more directly against the parents and relatives as identity fraud or some other scam. This is a bigger, real risk that is worth mitigating against by minimising the footprint of information available online to reduce the chance of direct financial and emotional harm.</p>

<p>Another is the need for connection with family and friends. To keep them in the loop. I think this is a noble intention but can be addressed by directly sharing images and videos with people you actually wish to share these experiences with.</p>

<p>Instead, I think you can bring it back to internationally agreed principles of human rights - the United Nations Convention on the Rights of the Child.</p>

<p>Article 3.1 states:</p>
<blockquote>
  <blockquote>
    <p>In all actions concerning children … the best interests of the child shall be a primary consideration.</p>
  </blockquote>
</blockquote>

<p>This feels uncontroversial. The best interests of the child.</p>

<p>Philosophically, this is about engaging in proxy or preference utilitarianism - maximising happiness and minimising suffering but while having to estimate what will maximise someone else’s welfare while only having limited information from them. This is in large part the philosphical basis of animal welfare for example.</p>

<p>The way children are primarily flaunted on social media is exclusively for the clout of parents or guardians.
There is no justifiable explanation that it is in the benefit of the child to have their images and videos plastered online, whether it be their first steps, a birthday party, or just them enjoying a new toy.</p>

<p>By all means, take these pictures and videos and cherish them. Scrapbook with them and share them with friends and family.</p>

<p>Sharing more publically than this though has zero upside for the child and all the potential of downside. To do so is a moral failing.</p>

<p>If we want to be doing the most good we can do, we shouldn’t be oversharing. It is not in their best interest.</p>]]></content><author><name>Ryan Ward</name></author><summary type="html"><![CDATA[And I think you reconsider it too]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ryanward.dev/images/ryan.jpg" /><media:content medium="image" url="https://ryanward.dev/images/ryan.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The prime linguistic real estate of car</title><link href="https://ryanward.dev/2025/09/12/car-etymology/" rel="alternate" type="text/html" title="The prime linguistic real estate of car" /><published>2025-09-12T00:00:00+00:00</published><updated>2025-09-12T00:00:00+00:00</updated><id>https://ryanward.dev/2025/09/12/car-etymology</id><content type="html" xml:base="https://ryanward.dev/2025/09/12/car-etymology/"><![CDATA[<p>I’ve got a toddler who’s almost three, and a baby not far behind. One of the first words my eldest picked up was <em>car</em>. This was encouraged by our maternal child health nurse as a nice, simple first word after <em>mum</em> and <em>dad</em>. A staple of picture books is also a shiny red car.</p>

<p>It makes me wonder. Why is <em>car</em> one of the first words we teach our kids?</p>

<p><img src="/images/posts/2025-09-12-car-etymology/car-etymology.png" alt="Image breaking down the etymology of the word 'car' from a Google Search" /></p>

<p>Suprisingly to me given they are a 20th century invention, the word goes way back: Latin <em>carrus</em> meant cart or wagon. When motor cars appeared, English dropped the extra bits and kept <em>car</em>. Somehow it lucked into one of the best words possible in English - three letters, a single syllable, simple phonemes, with a hard starting consonant making it really easy to pronounce.</p>

<p>By comparison:</p>
<ul>
  <li><em>bus</em> is pretty good except ending in <em>s</em> makes it slightly tougher for kids,</li>
  <li>the end of <em>bike</em> is a tougher phenome, and</li>
  <li><em>train</em> has a starting cluster of consonants which makes it a touch harder still.</li>
</ul>

<p><em>Car</em> basically won the linguistic lottery.</p>

<p>Despite it’s privileged placement, socialising kids into car culture from their first words comes at a cost. I’m an avid fan of public transport and micromobility (e.g. bikes) but when I hear my kids say <em>car</em> I don’t blame them. As I showed above it is a great word to learn for development. I do wish though average picture books showed more bikes and trams, more walking, more safe streets and fewer cars.</p>

<p>Unless you are privileged enough to have visited safe streets found in large parts of Europe and Asia, young kids riding on the street without parents might be a complete unknown and basically negligent. Making this work however is of enormous benefit. Car-centricity robs children of autonomy - you literally need to be an adult to legally drive a car. Giving some more freedom with bikes allows for exploration, healthy living and development of risk awareness - but this can’t safely be done with most of our unsafe street prioritising cars.</p>

<p>Cars are the <a href="https://www.aihw.gov.au/reports/life-expectancy-deaths/deaths-in-australia/contents/leading-causes-of-death#leading-cause-age">number one cause of death for kids between one and fourteen</a> and it shows no sign of going down. This is a policy choice - other countries like Norway and Sweden have implemented policies to eliminate these avoidable deaths.</p>

<p>Words aren’t neutral. I genuinely believe giving <em>car</em> such a privileged place in our language facilitated the privileged role of car culture in our cities. What if the books they see first showed <em>bike</em> or <em>tram</em> instead? Or of playing in the middle of a street? Maybe we’d realise just how much we are stealing from our kids by dominating the landscape with cars we’d inject less of their childhood with the vehicles.</p>

<p>At least I can try and do that for my two.</p>

<p><img src="/images/posts/2025-09-12-car-etymology/safe-streets2.webp" alt="Kids playing in a safe street" /></p>]]></content><author><name>Ryan Ward</name></author><summary type="html"><![CDATA[Why do kids learn car first?]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ryanward.dev/images/ryan.jpg" /><media:content medium="image" url="https://ryanward.dev/images/ryan.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Tax Policy in 2025</title><link href="https://ryanward.dev/2025/07/30/tax-policy/" rel="alternate" type="text/html" title="Tax Policy in 2025" /><published>2025-07-30T00:00:00+00:00</published><updated>2025-07-30T00:00:00+00:00</updated><id>https://ryanward.dev/2025/07/30/tax-policy</id><content type="html" xml:base="https://ryanward.dev/2025/07/30/tax-policy/"><![CDATA[<p>On 25 July 2025, there was a 6 hour roundtable hosted in Canberra by Allegra Spender MP focused on tax reform.</p>

<p>The event hosted some of the biggest wonks in tax and was a thrilling watch. Tax is often derided as being boring and dry - I can’t imagine anything further from the truth.</p>

<p>Tax firstly is the primary means for raising the government revenue necessary for the public services that we expect and want delivered at a high quality. Given you need to tax anyway, choosing what to tax means you can encourage productive, useful activities, and discourage non-productive or harmful activities.</p>

<p>I won’t pretend I’m a tax policy expert - you should watch the entire video here if interested: <a href="https://www.youtube.com/live/E9diyLKgNOE">https://www.youtube.com/live/E9diyLKgNOE</a></p>

<p>But there were some areas I found extremely intriguing and I think should be more widely known:</p>

<ul>
  <li>
    <p><strong>Carbon and mining tax:</strong> According to Ross Garnuat, if the 2013 Liberal-National Government hadn’t vandalised the reform in taxing carbon and mining resources, the budget would have been in surplus every single year for the entire period of Coalition deficits, not to mention Australia’s climate footprint would be far smaller from the internalising of the prior carbon externality. It would have been incredibly efficient and we would have far further transitioned in other forms of electrification and could have been a world leader in climate related tax reform. We still can be, despite dropping our ten years headstart.</p>
  </li>
  <li>
    <p><strong>Horizontal fiscal equalisation:</strong> Systematically reduces incentives for (or actively disincentivises) states to introduce more efficient taxation as they’ll just be penalised with a reduced distribution. This likely plays into other state-level reforms like land tax or payroll tax in complex ways I hadn’t previosuly considered.</p>
  </li>
  <li>
    <p><strong>Superannuation:</strong> I’ve had an inkling for some time that superannuation feels like a get-richer scheme. For myself, in a family with a mortgage and slightly above average income (roughly 75th household percentile), I feel like we can still set aside some money to put in shares each month and by 60 we’ll have $3 million in that asset, ignoring the equity in our home, increased saving potential once mortgage is paid, superannuation or any further increase in earning potential over the next 30 years. To have superannuation on top of that means I’ve been able to avoid 15-20% tax for a tenth of my income for my life with no real impact in my retirement outcomes as I’ve no doubt that by itself will be plenty to enjoy life on. This is all confirmed by Brendan Coates presentation on how superannuation in its current form is not fit for purpose and needs to be reigned in at the top end to actually continue being a vehicle for retirement savings and not just a tax minimisation scheme for the rich.</p>
  </li>
  <li>
    <p><strong>Labour vs Capital:</strong> The share of national income that goes to effort or labour has dropped significantly, and the value from capital (particularly land) has increased and will continue to increase. This is an enormous problem, as the more that people think you can just get a home and watch its value grow despite being unproductive, the less incentive there is to work, contributing to loss of purpose at work and an erosion of the social contract.</p>
  </li>
</ul>]]></content><author><name>Ryan Ward</name></author><summary type="html"><![CDATA[Getting tax right is a path to continued prosperity]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ryanward.dev/images/ryan.jpg" /><media:content medium="image" url="https://ryanward.dev/images/ryan.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">eSex – Sexual Consent and Technology</title><link href="https://ryanward.dev/2025/07/01/esex-law/" rel="alternate" type="text/html" title="eSex – Sexual Consent and Technology" /><published>2025-07-01T00:00:00+00:00</published><updated>2025-07-01T00:00:00+00:00</updated><id>https://ryanward.dev/2025/07/01/esex-law</id><content type="html" xml:base="https://ryanward.dev/2025/07/01/esex-law/"><![CDATA[<p><em>Note: I originally wrote this for the Empowered Together blog, published 13 March 2015. This is just a transfer and no editing or rewriting has been done, so any specific content may be out of date or unreliable.</em></p>

<hr />

<p>In October 2014, Victoria became the first state to legislate specifically on distributing intimate images (sexts), especially protecting non-consensual distribution of those images to third parties. Recently, the Commonwealth Government has introduced a ‘revenge porn’ Bill which would achieve similar goals on a national scale.</p>

<p>It goes without saying that a legal response to unsolicited sexting and ‘revenge porn’ is important, given the humiliation and distress that can be caused. Half of all teenagers have ‘sexted’ to someone they know. New research from the Australian Institute of Criminology shows that young girls send images to be fun, flirty, as a sexy present, and also to feel sexy and confident. Young boys also send sexts to be fun and flirty, and are more likely to send a sext if they receive one. All of this is harmless teenage fun, allowing young girls and boys to explore their own sexuality. To say otherwise denies them of a personal agency they are owed moving into adulthood.</p>

<p>However the fun ends when someone sends sexts on to a third party, which 6% of teenagers have done, or even when the sext is shown to someone else (without actually sending it) which 1 in 5 teenagers have done. This is outside the scope of what the person who sent it would have wanted, and is morally wrong.</p>

<p>Young people are becoming savvier in response, often showing more revealing photos that do not show their face. However, this also feeds into the victim blaming mentality that people should have to protect themselves, even when they trust someone enough to send them a sext. It probably is not surprising that victim blaming manages to rear its ugly head when ‘revenge porn’ appears.
The first statements are often:</p>

<blockquote>
  <p>“Why would you send the picture?”
“Why would you let your partner record you doing anything?”</p>
</blockquote>

<p>Obviously, this misses the point – that it is wrong to share someone’s photo without their consent, regardless of why they gave it to you. Creating revenge porn laws nationally will follow the lead of not only Victoria, but also corporations like Google, Microsoft, Twitter, and even pornography sites which have all taken measures to ban and respond to revenge porn.</p>

<p>However, dealing with sexting and revenge porn should not only be done through the legal system. Education for students is also fundamental, especially with about half of kids being dissatisfied with the sex education they receive at schools. With Empowered Together in the business of educating teenagers, we see it as our responsibility to help these young adults understand proper use of technology, without feeding into the victim blaming statements we see time and time again.</p>

<p>In our pilot workshops already, teenagers have demonstrated the importance of this topic to them, independently choosing to split up ‘consent’ into three mediums – physical, verbal, and digital. One group also emphasised the importance of apps like Snapchat, and the prevalence of sexual euphemisms such as ‘Netflix and Chill’.</p>

<p>Ultimately we will continue to incorporate technology education into our workshops and ensure they are relevant and useful for students. If we keep it simple, and continue the dialogue on the importance of respect and consent, I don’t think we can go wrong.</p>

<h2 id="definitions">Definitions</h2>

<p><em>Revenge porn</em> is the non-consensual publication of an intimate photo or video of someone else.
<em>Sexting</em> refers to the sharing and sending of sexually explicit messages or images electronically by people, especially young people. When someone sends a sext, they trust the receiver to use the message, image, or video responsibly. Revenge porn most commonly occurs after a break-up.</p>

<p>https://www.austlii.edu.au/au/legis/vic/consol_act/soa1966189/s41da.html</p>

<p>https://www.austlii.edu.au/au/legis/vic/consol_act/soa1966189/s41db.html</p>

<p>Sexting and Young People (Stats) – https://www.palgrave.com/page/detail/sexting-and-young-people-thomas-crofts/?sf1=barcode&amp;st1=9781137392817</p>

<p>http://www.dailylife.com.au/life-and-love/parenting-and-families/teenagers-and-sex-where-parents-go-wrong-20150830-gjayvr.html</p>

<p>https://www.smh.com.au/digital-life/mobiles/fifty-per-cent-of-teens-sext-by-mobile-phone-20150731-giot3z.html</p>

<p>https://googlepublicpolicy.blogspot.com.au/2015/06/revenge-porn-and-search.html</p>

<p>https://blogs.microsoft.com/on-the-issues/2015/07/22/revenge-porn-putting-victims-back-in-control/</p>

<p>https://support.twitter.com/articles/18311</p>

<p>https://www.pornhub.com/content-removal</p>]]></content><author><name>Ryan Ward</name></author><summary type="html"><![CDATA[A legal note on the state of sexual consent and tech (repost from 2015)]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ryanward.dev/images/ryan.jpg" /><media:content medium="image" url="https://ryanward.dev/images/ryan.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">So, what is a man?</title><link href="https://ryanward.dev/2025/07/01/man-up/" rel="alternate" type="text/html" title="So, what is a man?" /><published>2025-07-01T00:00:00+00:00</published><updated>2025-07-01T00:00:00+00:00</updated><id>https://ryanward.dev/2025/07/01/man-up</id><content type="html" xml:base="https://ryanward.dev/2025/07/01/man-up/"><![CDATA[<p><em>Note: I originally wrote this for the Empowered Together blog, published 24 January 2020. This is just a transfer and no editing or rewriting has been done, so any specific content may be out of date or unreliable.</em></p>

<hr />

<p><img src="/images/posts/2025-07-01-esex-law/man_up_poster.webp" alt="The Man Up (play) poster art designed by Emily Cerra, showing a person's torso in an open shirt covered in tattoos of phrases like role models, toxic, masculine, etc" />
The Man Up poster art designed by Emily Cerra</p>

<p>With midsumma festival on, one performance I saw was Man Up! with my brother. With the script expertly derived from a series of interviews taken by director Jeremy Ives through 2018, this was a thoughtful exploration of masculinity and how men are expected to appear, perform and identify.</p>

<p>This production covered plenty of ground. The four primary actors started by exploring common stereotypes, before weaving in severe examples of violence and depression, and also covering gentler self-reflections such as what a ‘good’ male role model is and what they look like. This had an undulating intensity that poignantly reflected the sad and abusive reality of some men who go from episodes of violent behaviour to ignorantly acting as if nothing is wrong.</p>

<p>While it does naturally come up for discussion in some workshops, it is impossible for Empowered Together to thoroughly explore issues of aggression, rejection, homophobia and masculinity in workshops. With the deep focus on sexual assault and consent, there are many structural issues that cannot be undone in a 90 minute window. Consequently, art like this is so important for as many people to see as possible – the dream would be for this content to be shared in schools and sporting clubs.</p>

<p>Unfortunately, a clumsy finish to the production jarred what had been a deep and thoughtful exploration with easy, convenient solutions like ‘be kind to people’ and ‘it’s okay to be emotional’. What gets lost in these answers is that the pressures to conform and belong are overwhelming compared to pressures to act ethically or with self-respect. Having raised many great questions, I believe it would have been more impactful to let this ponder in the audience’s mind rather than pose well-intentioned but simple solutions.</p>

<p>Regardless, this was an excellent production that I would recommend to anyone. I doubt there is a single audience member who wouldn’t relate with some part of this raw and honest content, and most will leave having also noticed something new about themselves or the men around them.</p>]]></content><author><name>Ryan Ward</name></author><summary type="html"><![CDATA[An old review of a midsumma performance (repost from 2020)]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ryanward.dev/images/ryan.jpg" /><media:content medium="image" url="https://ryanward.dev/images/ryan.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Solving for misogyny in young people</title><link href="https://ryanward.dev/2025/07/01/misogyny-youth/" rel="alternate" type="text/html" title="Solving for misogyny in young people" /><published>2025-07-01T00:00:00+00:00</published><updated>2025-07-01T00:00:00+00:00</updated><id>https://ryanward.dev/2025/07/01/misogyny-youth</id><content type="html" xml:base="https://ryanward.dev/2025/07/01/misogyny-youth/"><![CDATA[<p><em>Note: I originally wrote this for the Empowered Together blog, published 6 November 2019. This is just a transfer and no editing or rewriting has been done, so any specific content may be out of date or unreliable.</em></p>

<hr />

<p><img src="/images/posts/2025-07-01-misogyny-youth/School_and_students_Nicole_Honeywill.jpg" alt="A room full of about twenty teenage students with one in the centre raising their hand" />
Students engaging in a classroom. Credit: Nicole Honeywill</p>

<p>Recently videos have emerged of senior students from St Kevin’s College chanting widely condemned misogynistic lyrics on a tram, with a follow up ‘song’ targeting girls at St Kevin’s sister school  Sacré Cœur. Despite these contemptible events, it would be remiss to believe this was a unique example or think that all other schools were outstanding examples of respect for gender and equality.</p>

<p>More likely, St Kevin’s is a symptom of a systemic issue that exists for all Australians. The <a href="Human Rights Commission">https://humanrights.gov.au/our-work/sex-discrimination/publications/change-course-national-report-sexual-assault-and</a> recently highlighted that sexual violence is far too prevalent and normalised in Australia with significant underreporting of sexual violence minimising our awareness of the issue. The Commission also illustrated that by not taking the time to build respectful cultures or provide appropriate responses to victims and perpetrators, our pivotal institutions do not adequately prevent abuse from occurring.</p>

<p>Reactively calling for retributive punishment for these St Kevin’s students is <a href="unlikely">https://www.abc.net.au/news/2019-10-26/st-kevins-college-sexist-chant-growing-better-boys/11638628</a> to drive behavioural change by itself and instead encourages students to ‘not get caught’. As good as people may feel by cheering on this sort of punishment, the root problem will only be solved by searching deeper than this. A solution which instead looks to modify the scruples, attitudes and actions of young men over the long-term should be sought after instead.</p>

<p>Empowered Together’s workshops solve this underlying problem by helping students empathise in their relationships, explore consent and its practical application, and consider the legal, social and emotional consequences of sexual assault not just for themselves, but for victims and all involved. Students who have experienced these workshops strongly feel they have a greater understanding of consent and that they are more confident in their ability to ask for and give consent. This demonstrates how education can help students internalise a healthy way of participating in relationships – an unlikely outcome with punishments like suspension.</p>

<p>Society at large has slowly been improving in all areas of gender equality, but these recent incidents remind us we still have a way to go. Positively, the St Kevin’s headmaster Stephen Russel has acknowledged the depth of the issue, stating that this <em>‘has intensified our determination to resolutely reshape our programs and to look to do so much more in this area’</em>. If executed well, I’m hopeful that St Kevin’s can use this opportunity to become a shining example on how to reform the attitude and behaviour of their young men. If these intentions are shared with all schools, misogyny may yet have an end date, and we may share a world in which all people can be free from the fear of sexual violence.</p>]]></content><author><name>Ryan Ward</name></author><summary type="html"><![CDATA[Thinking long term rather than quick punishments (repost from 2019)]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ryanward.dev/images/ryan.jpg" /><media:content medium="image" url="https://ryanward.dev/images/ryan.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">How tech is helping tackle sexual violence</title><link href="https://ryanward.dev/2025/07/01/sex-assault-tech/" rel="alternate" type="text/html" title="How tech is helping tackle sexual violence" /><published>2025-07-01T00:00:00+00:00</published><updated>2025-07-01T00:00:00+00:00</updated><id>https://ryanward.dev/2025/07/01/sex-assault-tech</id><content type="html" xml:base="https://ryanward.dev/2025/07/01/sex-assault-tech/"><![CDATA[<p><em>Note: I originally wrote this for the Empowered Together blog, published 5 May 2019. This is just a transfer and no editing or rewriting has been done, so any specific content may be out of date or unreliable.</em></p>

<hr />

<p>With the increasing awareness of sexual violence as a widespread issue, more solutions are appearing to help tackle this problem. Empowered Together’s workshops operate in the primary prevention space – which focuses on education hopefully before any incidence of sexual violence occurs. While Empowered Together’s vision is still to see a world free of any sexual violence, we find it heartening to see innovative tech solutions popping up to help close the gap while improved education takes effect. We’ve put together some of these interesting solutions below.</p>

<h2 id="improved-reporting-technology">Improved reporting technology</h2>
<p>Platforms are appearing to make reporting of sexual violence easier and safer to address the underreporting of sexual assault. <a href="Callisto">https://https://www.projectcallisto.org/</a> is a platform for the secure online reporting of any sexual violence. Available to over 160,000 US students over 13 colleges, sexual assault survivors can report safely, easily and securely through the platform. Callisto aims for a survivor-centred approach, giving them choice in what is done with the report so survivors can choose to send a record to the College, or only notify the school if another student names the same perpetrator. Callisto has found this increases the chances of reporting, and results in positive emotional and adjudicative outcomes, while also enabling colleges to detect repeat perpetrators. Potentially this could be rolled out further into professional environments, helping to deal with perpetrators of sexual assault and harassment in large companies. While not in Australia, there is a need for this here with sexual assault and harassment <a href="a real problem">https://humanrights.gov.au/our-work/sex-discrimination/publications/change-course-national-report-sexual-assault-and</a> in Australian universities.</p>

<p><img src="/images/posts/2025-07-01-sex-assault-tech/callisto_stats.webp" alt="Statistical infographic showing Callisto users are 6 times more likely to report, 15% of repeat perpetrators are matched and users are 3 times more likely to seek support services" />
Figure 1: Statistics from the success of Callisto</p>

<h2 id="increasing-information-accessibility-through-chatbots">Increasing information accessibility through chatbots</h2>
<p>Another innovation are chatbots that help people find information about support services or obtain basic legal advice. <a href="Hello Cass">https://hellocass.com.au/</a> is one such chatbot developed by Melbourne-based social enterprise Good Hood, currently in pilot and to be launched mid 2019. The chatbot talks to survivors and analyses the conversation using natural language processing, before responding with information about family and sexual violence, available counselling services, the legal system and safety planning. Another chatbot only in North America is Botler.ai – a chatbot which survivors in the US and Canada can use to figure out if they’ve experienced an incident which could be classified as sexual harassment or assault. This processes hundreds of thousands of court cases to help survivors label their experience and can also generate an incident report to help survivors report to police or their HR team at work. This is definitely something which an innovative person could create here in Australia as the Australian criminal justice system can <a href="make it extremely confusing for survivors to label and describe their experiences">https://theconversation.com/rape-sexual-assault-and-sexual-harassment-whats-the-difference-93411</a>.</p>

<h2 id="heatmaps-of-sexual-violence">Heatmaps of sexual violence</h2>
<p>Another method of using reporting to put the power back in the hands of survivors is the development of sexual violence heatmaps that allows people to identify and share public spaces where they feel uneasy, scared or assaulted, or alternatively spots where they feel safe, supported and happy. Free to Be was one of these heatmaps developed collaboratively with CrowdSpot and Monash University which developed a prototype with young women in Melbourne. Unfortunately, this doesn’t appear to have been continued after its initial start. However, these are others being made around the world with examples in Egypt, India, Greece and the UK.</p>

<p><img src="/images/posts/2025-07-01-sex-assault-tech/free_to_be_heatmap.webp" alt="Heatmap of Melbourne CBD showing community contributed spots of reported sexual harassment or assault" />
Figure 2: Heatmap from the Melbourne Free to Be map showing reports of sexual assault or harassment across the city.</p>

<h2 id="what-next">What next?</h2>

<p>This only touches the surface of how tech is enabling solutions to tackle sexual assault. Apart from these, there are also blockchain solutions aiming to help sex workers and wearable technology which aims to help survivors share their stories and be believed. While these have been polarising, as it puts substantial onus on women to constantly prevent themselves from being sexually assaulted, it is also argued that they give women more choice and freedom to select solutions that work for them. Many of these tech solutions are still only in their embryonic stages but there are many opportunities here for entrepreneurs to expand on the solutions above to better help victims of sexual assault, and work towards that vision of a world without sexual violence.</p>]]></content><author><name>Ryan Ward</name></author><summary type="html"><![CDATA[Tools to help survivors (repost from 2019)]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ryanward.dev/images/ryan.jpg" /><media:content medium="image" url="https://ryanward.dev/images/ryan.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Geopandas beginner mistakes to learn from</title><link href="https://ryanward.dev/2025/03/27/geopandas-tricks/" rel="alternate" type="text/html" title="Geopandas beginner mistakes to learn from" /><published>2025-03-27T00:00:00+00:00</published><updated>2025-03-27T00:00:00+00:00</updated><id>https://ryanward.dev/2025/03/27/geopandas-tricks</id><content type="html" xml:base="https://ryanward.dev/2025/03/27/geopandas-tricks/"><![CDATA[<p>GeoPandas has become my favourite tool for geospatial data manipulation in Python. However I encountered some pitfalls when starting out.</p>

<p>Here are a few of those issues and how to address them:</p>

<h2 id="1-coordinate-reference-system-crs-mismatches">1. Coordinate Reference System (CRS) Mismatches</h2>
<p>One of the most frequent issues arises from Coordinate Reference Systems (CRS). Spatial joins or plotting might not work as expected due to CRS mismatches.</p>

<p>The easy solve is to always check and set the CRS explicitly.
You can look these up here: <a href="https://epsg.io/">https://epsg.io/</a></p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Set CRS when creating a GeoDataFrame
</span><span class="n">gdf</span> <span class="o">=</span> <span class="n">gpd</span><span class="p">.</span><span class="nc">GeoDataFrame</span><span class="p">(</span><span class="n">df</span><span class="p">,</span> <span class="n">geometry</span><span class="o">=</span><span class="sh">'</span><span class="s">geom_col</span><span class="sh">'</span><span class="p">,</span> <span class="n">crs</span><span class="o">=</span><span class="sh">'</span><span class="s">EPSG:4326</span><span class="sh">'</span><span class="p">)</span>

<span class="c1"># Reproject to match another CRS
</span><span class="n">gdf</span> <span class="o">=</span> <span class="n">gdf</span><span class="p">.</span><span class="nf">to_crs</span><span class="p">(</span><span class="n">other_gdf</span><span class="p">.</span><span class="n">crs</span><span class="p">)</span>
</code></pre></div></div>

<h2 id="2-geographic-vs-projected-crs-for-australia">2. Geographic vs Projected CRS for Australia</h2>
<p>Understanding the difference between geographic and projected CRS is crucial for accurate spatial analysis.</p>

<p>Geographic CRS uses latitude and longitude in degrees. It’s common for storing or sharing high-coverage data (e.g. all of Aus) but isn’t suitable for measuring distances or areas as degrees are not uniform in size.</p>

<p>Projected CRS projects the earth onto a flat surface using metres. It’s best for accurate local calculations like distance, area, and buffering. Australia uses <a href="https://www.ga.gov.au/scientific-topics/positioning-navigation/positioning-australia/geodesy/datums-projections/grid2020">MGA zones</a> which split the continent into longitudinal strips for high accuracy.</p>

<p>Running spatial operations (like joins, area, or buffering) in a geographic CRS can produce misleading results (although Geopandas might warn you) - distances won’t be in metres, and areas may be wildly off.</p>

<p><strong>Geographic CRSs (Latitude/Longitude)</strong></p>
<ul>
  <li>EPSG:4283 - GDA94 (Geocentric Datum of Australia 1994)
    <ul>
      <li>Used for legacy spatial datasets, still common systems, old ABS data, etc.</li>
    </ul>
  </li>
  <li>EPSG:7844 - GDA2020 (Geocentric Datum of Australia 2020)
    <ul>
      <li>Modern standard for Australian geospatial data - improved accuracy.</li>
    </ul>
  </li>
  <li>EPSG:4326 - WGS84 (Used globally)
    <ul>
      <li>Many datasets will come in this format, used widely for GPS, Leaflet, OpenStreetMap, etc</li>
    </ul>
  </li>
</ul>

<p><strong>Projected CRSs (metres)</strong></p>
<ul>
  <li>EPSG:28350-28356 - zones 50-56
    <ul>
      <li>These are GDA94 MGA zones</li>
    </ul>
  </li>
  <li>EPSG:7850-7856 - zones 50-56
    <ul>
      <li>These are GDA2020 MGA zones</li>
      <li>They move from left to right, e.g. zone 51 is just WA but zone 55 covers all of NSW, ACT, VIC and TAS</li>
    </ul>
  </li>
  <li>EPSG:3577 - Australian Albers (GDA94)
    <ul>
      <li>Can be valuable for national analysis in metres where a bit of inaccuracy (e.g. &gt;10 metres error) is fine.</li>
    </ul>
  </li>
</ul>

<p>Below is a comprehensive helper function for getting the right mga_zone for your longitude.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">get_mga_zone</span><span class="p">(</span><span class="n">longitude</span><span class="p">,</span> <span class="n">system</span><span class="o">=</span><span class="sh">'</span><span class="s">GDA94</span><span class="sh">'</span><span class="p">):</span>
    <span class="sh">"""</span><span class="s">Calculate the appropriate MGA Zone based on the longitude.</span><span class="sh">"""</span>

    <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="mi">112</span> <span class="o">&lt;=</span> <span class="n">longitude</span> <span class="o">&lt;=</span> <span class="mi">155</span><span class="p">):</span>
        <span class="k">raise</span> <span class="nc">ValueError</span><span class="p">(</span><span class="sh">"</span><span class="s">Longitude must be between 112°E and 155°E for Australian MGA zones.</span><span class="sh">"</span><span class="p">)</span>
    
    <span class="n">zone_number</span> <span class="o">=</span> <span class="p">(</span><span class="n">longitude</span> <span class="o">//</span> <span class="mi">6</span><span class="p">)</span> <span class="o">+</span> <span class="mi">31</span>  <span class="c1"># Calculates zone number
</span>    
    <span class="c1"># Choose the appropriate EPSG prefix based on the datum
</span>    <span class="k">if</span> <span class="n">datum</span> <span class="o">==</span> <span class="sh">'</span><span class="s">GDA94</span><span class="sh">'</span><span class="p">:</span>
        <span class="n">epsg_prefix</span> <span class="o">=</span> <span class="sh">'</span><span class="s">EPSG:283</span><span class="sh">'</span>
    <span class="k">elif</span> <span class="n">datum</span> <span class="o">==</span> <span class="sh">'</span><span class="s">GDA2020</span><span class="sh">'</span><span class="p">:</span>
        <span class="n">epsg_prefix</span> <span class="o">=</span> <span class="sh">'</span><span class="s">EPSG:78</span><span class="sh">'</span>
    <span class="k">else</span><span class="p">:</span>
        <span class="k">raise</span> <span class="nc">ValueError</span><span class="p">(</span><span class="sh">"</span><span class="s">Invalid datum. Choose either </span><span class="sh">'</span><span class="s">GDA94</span><span class="sh">'</span><span class="s"> or </span><span class="sh">'</span><span class="s">GDA2020</span><span class="sh">'</span><span class="s">.</span><span class="sh">"</span><span class="p">)</span>

    <span class="n">epsg_code</span> <span class="o">=</span> <span class="sa">f</span><span class="sh">"</span><span class="si">{</span><span class="n">epsg_prefix</span><span class="si">}{</span><span class="n">zone_number</span><span class="si">}</span><span class="sh">"</span>  <span class="c1"># Construct the EPSG code (e.g. EPSG:28355)
</span>    <span class="k">return</span> <span class="n">epsg_code</span>

<span class="c1"># Example:
</span><span class="n">longitude</span> <span class="o">=</span> <span class="mi">147</span>  <span class="c1"># For 147°E
</span><span class="n">mga_zone</span> <span class="o">=</span> <span class="nf">get_mga_zone</span><span class="p">(</span><span class="n">longitude</span><span class="p">,</span> <span class="sh">'</span><span class="s">GDA2020</span><span class="sh">'</span><span class="p">)</span>
<span class="nf">print</span><span class="p">(</span><span class="sa">f</span><span class="sh">"</span><span class="s">The MGA zone for </span><span class="si">{</span><span class="n">longitude</span><span class="si">}</span><span class="s">°E is </span><span class="si">{</span><span class="n">mga_zone</span><span class="si">}</span><span class="sh">"</span><span class="p">)</span>
<span class="c1"># &gt;&gt; The MGA zone for 147°E is 55
</span></code></pre></div></div>

<h2 id="3-reading-data-in-wkb-or-wkt-format">3. Reading data in WKB or WKT Format</h2>
<p>Your data might not always be read in properly - don’t let that trip you up.</p>

<p>If you read into a dataframe first for some reason the geometry might like this:</p>
<pre><code class="language-01010000005839B4C876BEF33F1A3D70...```">or 
```'POLYGON ((147.0 -42.0,'```  

These are just binary and text formats respectively for storing geometry data.  

They can easily be fixed by calling ```gpd.GeoSeries.from_wkb()``` and ```gpd.GeoSeries.from_wkt()```.

An example of an all-in-one function which can check the geometry column and convert to a geodataframe is here:

```python
def convert_to_gdf(df, geom_col, crs="EPSG:7844"):
    if isinstance(df[geom_col], gpd.GeoSeries):
        gdf = gpd.GeoDataFrame(df, geometry=geom_col)
    else:
        try:
            df[geom_col] = gpd.GeoSeries.from_wkt(df[geom_col])
        except (ValueError, TypeError):
            df[geom_col] = gpd.GeoSeries.from_wkb(df[geom_col])

        gdf = gpd.GeoDataFrame(df, geometry=geom_col)

    if gdf.crs is None:
        gdf = gdf.set_crs(crs)  # Default sets to GDA2020 but would want to check

    return gdf
</code></pre>

<p>These are a couple of the issues I encountered when first working with GeoPandas.<br />
Hopefully these can save time and improve your analysis.</p>]]></content><author><name>Ryan Ward</name></author><summary type="html"><![CDATA[Get these concepts right to avoid a ton of errors]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ryanward.dev/images/ryan.jpg" /><media:content medium="image" url="https://ryanward.dev/images/ryan.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Some puzzles</title><link href="https://ryanward.dev/2024/08/21/puzzles/" rel="alternate" type="text/html" title="Some puzzles" /><published>2024-08-21T00:00:00+00:00</published><updated>2024-08-21T00:00:00+00:00</updated><id>https://ryanward.dev/2024/08/21/puzzles</id><content type="html" xml:base="https://ryanward.dev/2024/08/21/puzzles/"><![CDATA[<p>Puzzles. I’m addicted to solving them. I’m a beginner at setting them.</p>

<p>I made some puzzles for my colleagues a few months ago - a cryptic crossword (the clues involve wordplay) and a variant sudoku (sudoku with extra rules).</p>

<p>Online version for the sudoku here: <a href="https://f-puzzles.com/?id=yncaqkeo">https://f-puzzles.com/?id=yncaqkeo</a>
No online version for the cryptic as I made it in Excel.</p>

<p>If you reach out I’m happy to give hints.</p>

<p>Otherwise, good luck! 🧩</p>

<object data="/images/posts/2024-08-21-puzzles/puzzles20240821.pdf" width="1000" height="1000" type="application/pdf" aria-label="Puzzles (PDF)">
  <a href="/images/posts/2024-08-21-puzzles/puzzles20240821.pdf">Download the puzzles (PDF)</a>
</object>]]></content><author><name>Ryan Ward</name></author><summary type="html"><![CDATA[My attempt at setting variant sudoku and cryptic crosswords]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ryanward.dev/images/ryan.jpg" /><media:content medium="image" url="https://ryanward.dev/images/ryan.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>