<?xml version="1.0" encoding="utf-8"?>
<feed rel="self" xmlns="http://www.w3.org/2005/Atom">

  <title>Rosia Evans Blog</title>
  <link href="https://rosia.me/"/>
  <updated>2026-06-18T13:00:27Z</updated>
  <author>
    <name>Rosia Evans</name>
  </author>
  <id>https://rosia.me/</id>





<entry>
<title>Currently Reading - Eve</title>
<link href="https://rosia.me/Eve.html"/>
<id>https://rosia.me/Eve.html</id>
<updated>2026-06-11T12:45:25Z</updated>
<content type="html">
<![CDATA[
<h1>Currently Reading - Eve</h1>
<p>I'm currently reading Eve by Cat Bohannon. It's an overview of the evolutionary history of mammals/humans through womens bodies. It picks various &quot;Eve's&quot;, animals who were possibly the first women depending on different views of what makes a woman.</p>
<p>As someone who hasn't read into biology or evolutionary history much since GCSE's, I'm finding this deeply interesting.</p>
<p>At the moment, I'm onto the development of mammals who produced milk, the first example of which is a mouse the size of a human thumb who sweat it out of their skin! The book has gone on to discuss the numerous functions of milk. Did you know that when a child drinks milk, the breast absorbs their saliva and uses its chemical composition to detect their emotional state and any illnesses or specific nutritional deficiencies and on-the-fly alters the composition of the milk it produces to provide anti-bodies, calming hormones or the needed nutrients??</p>
<p>It turns out milk is a deeply complex system which actually does much more than just provide nutrients and we're only just starting to scratch the surface of its functions. Two more examples:</p>
<ul>
<li><p>The first milk produced by a mother clears out a babies digestive tract and plants the initial bacterial colonies that run digestion!</p>
</li>
<li><p>The average emotional state of a breast feeding mother will go on to alter a childs personality for the rest of their life. Higher stress hormones in milk produce more timid and careful children, lower stress hormones produce more explorative and experimental children. You can really see how this helps alter our entire societies behaviours to prioritise survival when needed and development when its safe!</p>
</li>
</ul>
<p>Its truly fascinating, especially to me, a trans woman who has some part of the female anatomy (e.g. breasts that can produce milk) but not others (e.g. a womb). Expect a full report soon!</p>
]]>
</content>
</entry><entry>
<title>The Archive</title>
<link href="https://rosia.me/TheArchive.html"/>
<id>https://rosia.me/TheArchive.html</id>
<updated>2025-09-23T17:35:12Z</updated>
<content type="html">
<![CDATA[
<h1>The Archive</h1>
<p><em>Inhabited places, as they exist with their people - their friends - slowly develop an understanding of themselves and a strength to exist in a deeper fashion.</em></p>
<p>The archive existed from will alone. A will of its own. Unlike a lot of places, it wasn't ancient, nor created by some modern mastermind. It simply appeared one day, not yet as an archive but as a small playful space, the odd book, the odd film, toys abound.</p>
<p>Hidden away, it held a small community who would happen across it over time. These wanderers played with it, enjoyed its personality and all that it contained. At first, it held itself there in what some would call a quiet anxiety. This anxiety, however, wasn't one of paralysis. With a determination, it and its small community started to fill its walls. Visitors and inhabitants would bring books, films and trinkets. It learnt and developed, watching the world outside and watching those within it playing. It felt itself, and through critique, listening and comparison - both with the outside world and with its community - it filled itself.</p>
<p>Those within who enjoyed its toys aged, as did it and as time passed it filled itself with all number of other spaces as well: galleries filled with stretching masses of art from the inhabitants, and gardens, their walls covered in vines, trees and ponds, vibrant and active.</p>
<hr>
<p>As with most things, the archive slowly rolled through changes. People would come, people would leave, often those who did would return later. It always kept growing, valuing its small community, its insides, its history and its thoughts.</p>
<p>Those within the archive lived happy lives. They would come and go as they pleased. Some would spend their lives within it, living as part of it's ecosystem, sitting in its trees to read, listening to its worries and bringing new works regularly. Other would visit less frequently, taking books, returning them once read, bringing parts of their world into it to share. Some would appear hardly ever, though their appearance was still valued. They'd bring what they had, rest and recover from their journeys within its walls and share tales of their lives. These tales were often mundane but the archive liked this; it held dear the lenses their tales were told through, for although it could see the world, it found such joy in the energy and perspective of others.</p>
<p>Within its depths, the archive still held its old rooms, littered with toys and children’s books. Far from hidden or forgotten, these rooms would often be the first to greet a new visitor, opening a door to a half completed puzzle or a ball rolling, inviting them in. Amongst these rooms sat wardrobes full of costumes, jukeboxes and of course, numerous books and films.</p>
<hr>
<p>Soon 20 years passed and the archive was no longer a quiet hidden place. Its halls regularly held host innumerable recurring guests and its community was larger than ever.</p>
<p>It now held rooms, upon rooms, upon rooms, alongside gardens, balconies and large playfully winding corridors (for it enjoys keeping its inhabitants on their toes). One could spend days alone conversing with it, reading its books, or thinking about stories it had written itself, learning of the views it held, which by then were rather well steeled. Whilst reading, ther was a non-zero chance one would still come across its toys, both new and old, lying on a shelf, on the floor or behind their chair, left with the intentions of a jester child. The best finds were often those of toys from its original room, all denoted with a perpetual familiar warmth to their surface, as if recently held.</p>
<p>Though valuing flat truth, the archive valued its fiction most of all. In terms of these, the archives community would often throw the oddest of events, celebrations of their stories, knowingly fruitless hunts for fake cryptids, starting secret societies in jest or simply hosting costume parties themed around their favourite tales.</p>
<p>It was a stronghold visited by many, though still only known about in given circles. Those who did, saw it not only as a location with an unquestioning welcome, a taste for the silly and an unparalleled collection of works, but also, they saw it as one of the strongest friends they had ever come to know.</p>
]]>
</content>
</entry><entry>
<title>Live-Coding</title>
<link href="https://rosia.me/Livecoding.html"/>
<id>https://rosia.me/Livecoding.html</id>
<updated>2025-09-16T22:13:47Z</updated>
<content type="html">
<![CDATA[
<h1>Live-Coding</h1>
<p>I gave a talk at a Aber BCS Show And Tell event last year trying to introduce more people to the concept of algorave, live-coding and the ideas behind them. This post hopes to be a on-paper rewrite of that talk.</p>
<blockquote>
<p>This is a work in progress post, expect some spelling mistakes and an unfinished ending</p>
</blockquote>
<h2>What is Algorave?</h2>
<p>Algorave is a form of live-coding where a performer writes code in real time in front of an audience to produce music. The code they write procedurally creates waves for the computers speakers to play in the real world. The code is normally projected onto the walls as its written as a form of light show, allowing the viewers to watch the code being written. You often see live gpu-shaders being written and projected at the same time to play with the beat of the music.
There's a wide range of languages people use for this though the most common ones that I've seen are the Haskell based TidalCycles and the Ruby based Sonic-Pi.</p>
<div style="display:flex; gap: 10px;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/7qfCeIgtllY?si=_5oCuUWV7QdXmGJi" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<iframe width="560" height="315" src="https://www.youtube.com/embed/oDHumac84aw?si=MGmDM99NIpV3x9Mz" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div>
<p>The music produced in these performances can range massively and sometimes be somewhat avant-garde or peculiar, using mathematical algorithms or randomness to produce unique sounds or beats.</p>
<h2>What drew me to algorave</h2>
<p>I initially found algorave though my Raspberry Pi as a child as, for a long time, Sonic-Pi came pre-installed with most Pi's (hence its name). I looked into it on and off but never got very far with it until years later during my sixth form years when finally I decided to dedicate a weekend to learning it fully. Through learning it I was introduced to its community and I found it a really lovely place. It holds some really interesting concepts at the core of its ethos:</p>
<h3>Temporary code</h3>
<p>Algorave and live coding in general produces code that constantly grows and changes. During live-coding you'll remove or rewrite large chunks of your program. Its in a constant state of change and everything is temporary. This is at the core of the community. Its common practise to start a performance on a blank file and at the end of your performance to delete it entirely.</p>
<p>Algorave was first started in a more official capacity in the early 2000's by TOPLAP, the Temporary Organisation to Promote Live Audiovisual Programming and this too reflects that temporary nature of live-coding. The purpose of this organisation was to help live-coding become a naturally growing and evolving art, people taking it in whatever direction they felt right. Once it becomes big enough, the idea is for the group to shut down and leave the medium to its own devices.</p>
<p>I love this approach so much, I've found it to make live-coding a really freeing activity. If I'm feeling burnt out with code I often find myself going to Sonic-Pi where I can just write till it stops being fun or I start feeling restrained by what I've built at which point I just erase the code and start again, making something completely new. I see it almost as the programming equivalent of doodling on scrap paper.</p>
<h3>Diversity</h3>
<p>From the very beginning diversity was at the core of algorave's ideals. From its early starts in the 2000's, live-coders have run exclusive workshops and sessions for women and minorities and most live shows open slots specifically for people who may not normally get a voice. This has lead to some really interesting outcomes with the live-coding community being one of the most equally balanced communities, with a really good gender ratio and a wide queer presence within it.</p>
<p>I think it says a lot that even in the early 2000's the community was focusing on this and driving for a wide range of people to take part in it. It shows a real genuine understanding of why diversity is so important and the outcomes of all of this have been amazing. Algorave is a somewhat common style of performance at a few small queer bars near me and I feel like this really shows that the mindset behind it has helped produce a community that's incredibly welcoming and open.</p>
<!---
could be worth talking about/linking these,
https://www.sheffieldtribune.co.uk/p/coding-is-the-new-clubbing-on-the
https://github.com/Algorave/guidelines/blob/master/README_en.md
https://slab.org/2015/07/28/the-generative-manifesto-august-2000/
-->
]]>
</content>
</entry><entry>
<title>Poems</title>
<link href="https://rosia.me/Poems.html"/>
<id>https://rosia.me/Poems.html</id>
<updated>2026-06-05T16:55:08Z</updated>
<content type="html">
<![CDATA[
<h1>Poems</h1>
<h2>Trying to say nice things about you</h2>
<pre><code>I want to write you a meaningful card.
Something that proves I like you.
I try to compare you to a tiny bird with a titans soul.
I try to compare you to a bubbling liquid amber-stone.
I try to compare you to an embossed, page stealing book.
I doesn't work.

But I give it to you,
And it becomes your favourite thing anyway.
</code></pre>
<h2>Thunder storm</h2>
<pre><code>The entirety of space inverted
all altered save the quietly terrified earth
cast small against our focus on the clouds
a gateway to the drama
</code></pre>
<h2>HRT stopped for a month</h2>
<pre><code>
My stubble's back.
Not had this for years,
my personal symptom of the wider issue.

My skins different.
I rest my hand on my face,
its rougher, greasier by the day.

Now I suffer my past.
Its familiar pain is here,
shared with friends in memory, made real now.

But! It lets me see him.

His face is back.
Whats it been? 3 years?
You've changed too my long gone friend.

He looks comfortable.
The stubble's still there, 
but womanhood has strengthened him.

Together we know.
The proof of our ideology,
our experiences have steeled us.

</code></pre>
<h2>Look After Yourself</h2>
<pre><code>My daughter,
she sits with me, showing me pictures of my family.
My whole life stretched out in one column on her tiny phone.
I can see every change in me laid out,
the visible ones at least.
I've had weeks here to think about the others.

Life, gathering knowledge, 
The first time I saw myself in an adult more than a child.
The first time I saw a teenager and thought, 
&quot;you don't even realise, how much we see what you're going through&quot;.
The first time I realised they were more adult than me now.
The first time I saw them understand our roles had reversed.

I guess that's what life has been, 
gathering those new knowledges.
Learning the universal experiences one by one.

I wish I could go back, a bit at least.
Go through it again with all that.
These thoughts I have with me now.
To be a child, knowing the elders see my soul.

...

My grand-daughter,
she's not taking it well. I'm ready.
&quot;Look after yourself&quot;, that's the last thing she says to me.
Not even a goodbye. 
That's fine, she's working on herself, I can see it.

And here it comes now, the final universal knowledge
</code></pre>
<h2>Planets</h2>
<pre><code>Picture planets. Populating the pitch black pool, playing.
Thousands.
All asleep to their aquaintence, all alone.
Or are they?
Each an epitome of experimentation, exploring and entangling itself.
See within:
Creatures contending, confronting but caring closely, colourfully.
Unquestioning.
Food is finite. A fleeting forceful forage, fight or find. Fun.
Life.
Spheres sharing a state of shifting standard. Sleeping on siblinghood.


Now picture the other as it sits and changes as an intelligent world it holds concrete and coal and computing rocks of static and sleep on this It dares you It holds the power in it hand to change itself to grow consciously and reach out of the membrane and meet more members of its class teaching itself ships and space and science and steel all resources from its heart as it builds itself anew ready to rock and roll and receive gifts from the many friends sit silently but still subsist smarter stone than those before. It just needs to find them.
&quot;I've been reaching out but Im yet to see them.&quot;
&quot;Where is everyone else?&quot;
&quot;It cant be just me.&quot;
</code></pre>
<h2>A new experience</h2>
<pre><code>&quot;Maybe you just didn't like the people you dated before&quot;
maybe.
the uncomfortable sex,
the forced &quot;I love you&quot;'s,
the dislike of how they held their bodies,
the feeling of physical disgust at their smiles,
seen together, at once, in their place, explained away,
leaving me frozen for a moment, 
to melt into a joyful, embarrassed idiot.

And now I start to see,
the first long held promise of a future together,
the joy of an equal understanding of our situation
the terror of no longer experiencing this in third person
the shared will to make it work
the knowledge that for once, if it ends, I wont be the one to end it

And now I realise, the lens on my whole life shattered,
feelings don't default into resentment
</code></pre>
<h2>Rainbow Superstructures</h2>
<p>A very early attempt at writing a poem with a proper structure, unfinished at the moment. Hopefully will explore
ideas around alternative ways we can build relationships.</p>
<pre><code>some give themselves pearlescent towns
the time-tested reproduction
a well-beloved, truly caring
copy paste construction

but some will build their world
through talk and love and friction
building pastel spires
through their contradition

boundaries and love
unfolding conversation
falling upward safely through
a well meaning frustration
....
we build them in our thousands
despite all of their ruptures
and we still find joy and choose to love
in these rainbow superstructures  
</code></pre>
<h2>Our bodies trace time</h2>
<pre><code>I got my ears pierced yesterday
I settled into myself years ago but I still try to push myself to change
Every once in a while

I start a new job soon
A new place, a new total context, I've never been there but I'll be settle into it
It wont take long

When I'm there my ears will still be healing

Our bodies trace time, beyond our ideas, they remain physical
</code></pre>
]]>
</content>
</entry><entry>
<title>Permacomputing</title>
<link href="https://rosia.me/Permacomputing.html"/>
<id>https://rosia.me/Permacomputing.html</id>
<updated>2025-09-16T22:13:47Z</updated>
<content type="html">
<![CDATA[
<h1>Permacomputing</h1>
<p>My thoughts on permacomputing, the space its currently in and where it could go in the future</p>
<blockquote>
<p>Yo! Please note that the permacomputing community has changed and improved itself quite a bit since I last saw it! I'm intending to update this at somepoint when I have the time. Check their wiki out and have a look around the community, form your own opinions :)</p>
</blockquote>
<h2>What is Permacomputing?</h2>
<p>Permacomputing is a really interesting concept that I came across sometime around 2021-2022. Its a movement based around environmentally sustainable ways of using computers originating from the ideas behind <a href="https://en.wikipedia.org/wiki/Permaculture">Permaculture</a> (a set of ideas around sustainable small scale farming and land management.).
Its very much defined by its community who are constantly discussing it and the directions it could take as-well as implementing its concepts into their work. That community's <a href="http://permacomputing.net/">wiki</a> describes it as so:</p>
<blockquote>
<p>Permacomputing is both a concept and a community of practice oriented around issues of resilience and regenerativity in computer and network technology inspired by permaculture.</p>
</blockquote>
<p>The main practises behind it could be outlined as</p>
<ul>
<li>Re-using and repurposing old computers, most computers from 2005 onwards have all the power you would need for most small tasks, especially with well written code. So why waste them?</li>
<li>Repairing and caring for chips and electronics</li>
<li>Creating simple, low-power code that avoids taking up more power and processing time than needed and does only what it needs to whilst still being scalable and extendable</li>
<li>Creating resilient code that avoids &quot;<a href="https://en.wikipedia.org/wiki/Software_rot">Code Rot</a>&quot; by reducing reliance on other programs and external systems and the prioritises an &quot;offline first&quot; approach</li>
</ul>
<h2>My relations to Permacomputing</h2>
<p>I'd been exploring the ideas behind permacomputing for a while before I discovered its community. I have always been very anxious around the environment and waste and originally found concepts similar to permacomputing through <a href="https://100r.co/">100 rabbits</a> (a research collective living on a boat, exploring the longevity of computers). As well as this I was somewhat aware of the concepts of permaculture.
As I was exploring the internet one day I found the term &quot;Permacomputing&quot; and immediately knew it was a term describing the thoughts I'd been having. I looked into it and very quickly found myself passionately sifting through its wiki's and the websites of community members.</p>
<h2>My thoughts</h2>
<h3>Low-power code</h3>
<p>I think that permacomputing has some really interesting and strong ideas behind it. What especially holds my attention is its ideas behind reusing old computers and creating low-power code.</p>
<p>There is definitely some truth to the idea that most basic tasks we do today such as browsing social media or word processing could be done by any full-featured computer from the last 20 years or so. A lot of modern programs such as Microsoft Teams or Spotify do very basic jobs but consume unreasonable amounts of processing power (and therefore electricity) due to being buried under layers and layers of abstraction.</p>
<p>There's obviously reasons for this, we don't just use these big frameworks for fun.</p>
<ul>
<li>Web-development is very friendly and incredibly flexible</li>
<li>Web-applications are super portable</li>
<li>Developing with the web gives you access to a browsers entire graphics engine, implementing graphical effects becomes very easy</li>
</ul>
<p>But its worth noting that there is 100% a downside to this, Microsoft Teams is known in most companies to be incredibly slow and prone to breaking, many laptops older than a few years struggle to run it. They're incredibly process hungry for what is realistically somewhat of a small task.</p>
<p>Most of these benefits we've listed aren't exclusive to web development and you could easily get a lot of them through many other languages. For instance, anything that uses a runtime; Java's entire slogan is &quot;Write once, run anywhere&quot;</p>
<p>I think once something has become a standard its easy for it to become the default &quot;go-to&quot; for companies, even if its not necessarily the best idea. When armed with a hammer, everything becomes a nail.</p>
<p>Another example of this could be AI, AI is incredibly useful and is great for solving a large number of problems that we almost definitely have no other way to solve. But nowadays we see it applied in many fields where it just isn't needed.</p>
<p>AI is incredibly power hungry and can often require <a href="https://www.firstpost.com/world/openai-made-chatgpt-using-underpaid-exploited-kenyan-employees-who-forced-to-see-explicit-graphic-content-12053152.html">ethically impossible amounts of manual work</a> to produce. Its not something we should be using everywhere but as people get very excited for it they start just trying to apply it to everything and this is a massive waste of resources. Many things that could be solved with a well written algorithm instead become large AI design projects that produce massive systems that are expensive to power and just unnecessary.</p>
<hr>
<p>I think these are both obviously problems that we can solve and are the easiest of Permacomputing's ideas to argue. A nice thing though is that they are also the easiest to implement at a wider scale. It just relies on companies and developers putting a bit more thought into what they choose and realising that just because we have almost infinite processing power, doesn't mean we shouldn't count our resources.</p>
<p>This has visible benefits to them too, it creates a system they have full control over that will be noticeably much faster. Bugs are easier to solve and code is easier to run when your program isn't relying on booting up an entire browser in the background or using an unreadable black box as its foundation.</p>
<h3>Visible functioning</h3>
<p>Another nice point Permacomputing makes is its statements on open-source code and state-visualisation</p>
<p>Computers are tools and I feel like its important we try to avoid hiding that. Whilst we obviously shouldn't make them any less user-friendly or force front-end users to look at code, we can definitely let users know what the computer is doing more whilst keeping that user-friendly face. A good example would just be showing error codes again. A small thing that takes nothing away from the user and gives a lot back.
Other examples could be indicator lights on computers or better named background processes for when things need closing or checking in task manager.
We could even take these things further and modernise them, rather than just reimplementing them, for instance we could use qr-codes for errors (something the windows blue screen now does really well). Or generate public wikis for troubleshooting from our code documentation</p>
<p>This has loads of benefits, it puts ownership and control of the computer back into the users hands, it adds that separation between the digital and the real, but also makes gives users an opportunity to try and fix issues themselves or at the very least ask a friend for help.
There's nothing more frustrating than having an issue and being left feeling helpless.</p>
<p>From a developer perspective, open-sourcing code is a massive benefit too, it allows ownership of your tools and allows people to create communities around their software but that's a much larger topic and goes beyond the scope of this page.</p>
<h3>Resilience</h3>
<p>A final strong point is the &quot;Offline first&quot; approach, prioritising resilient code.
This is something I really like too. Whilst obviously this wont work for many things in the modern age, a lot of services nowadays are relying on the cloud for things that they don't necessarily need or are just requiring an internet connection for little reason.</p>
<p>The internet is notoriously unstable, large quantities of information are produced and lost constantly, this isn't necessarily something we can stop (outside of archival efforts). Its an inherent part of the internet. But, if we build systems or infrastructure that reliy on these things this becomes a much larger effort to maintain. It goes from finishing code and being able to lessen our focus on it, to having to constantly ensure other factors are always in place to keep the project working. This isn't always an issue but it does objectively cost companies a lot of money and often leads to a lot more work than is needed.</p>
<p>From a customer facing side this is an issue too, products that were paid for can be discontinued without much notice as a company finds its too much money to be worth sustaining and masses of software history can be lost. It creates code that has a digital use-by date.</p>
<h2>Being Positive</h2>
<p>When talking about Permacomputing I often find I start feeling like I'm just complaining about the modern world and I think that is can be somewhat true. Permacomputing is very much a rejection of certain aspects of the modern world and a core part of its development is through critique.</p>
<p>However, I think its really worth looking at the creative and forward thinking side of the community, to see what members are experimenting with and creating. Often building work beyond the aspects that are critiqued and often trying to explore and show other alternatives. A few nice examples are:</p>
<ul>
<li><a href="http://solarprotocol.net/">Solar Protocol</a>, a system the allows solar powered servers to share hosting power depending on which ones have the most power at a current moment in time</li>
<li><a href="https://farmos.org/">FarmOS</a>, a database system for farmers to track their work and systems in a centralised and self-owned fomat</li>
<li><a href="https://100r.co/site/uxn.html">Uxn</a>, an incredibly low-spec runtime that allows for the creation of graphical programs that run on almost any device</li>
</ul>
<p>Despite the critiquing, the community very much has a positive view of the future and discuss a lot of really interesting and powerful ideas.</p>
<h2>Critiques</h2>
<p>It is worth noting I do have a lot of critiques for Permacomputing as well however. There is definitely a reason I don't identify myself with it. Whilst it talks about a lot of interesting ideas that make me really happy, it also does have a few flaws in my eyes.</p>
<h3>Weird apocalypse stuff</h3>
<p>The original text that coined the term Permacomputing was written by someone called <a href="http://viznut.fi/en/">Viznut</a>, who originally defined the term around creating computers that would &quot;survive the apocalypse&quot;. Although this is mentioned less now, the idea of &quot;Design for Decent&quot; is still very much in the veins of the movement.</p>
<p>This doesn't invalidate its thoughts but its very much worth noting that some of its ideas at their core do come from a fantasy of the modern world collapsing and some form of anarchist utopia rising. I feel like this  unrealistic and a bit detached from the real world. Whilst climate change and many other issues do endanger our world, this isn't a sudden change and I feel that we're unlikely to get to a situation where their ideals are going to come true.</p>
<h3>Anti-Progress</h3>
<p>Another thing worth noting is that Permacomputing is most likely not going to ever catch on at any wide scale. Its focus is on learning to enjoy and make do with what we have and whilst I do feel like these are really important values (and ones that I personally follow), they're not ideas our society abides by. Telling people to actively stop using things that are benefiting them with little material benefit to doing so doesn't normally lead to much.</p>
<p>As well as this, it often relies on users being very technical and almost always relies on giving up certain aspects of modern technology which most people would never want to. Its ideas normally focus around building specialised systems to be used by groups of people, such as a farming database or digital archive. The things that don't, seem to expect people to own and create their own electronics for which they wrote &quot;personal computing stacks&quot; (collections of self made tools and programs).</p>
<h2>A summary of where Permacomputing holds strong</h2>
<p>In my opinion Permacomputing mostly carries weight in its discussion of efficient software, rejecting large frameworks where they aren't actively required and pointing out their resource inefficiency. Along with this its discussion of reusing old computers also holds very strong. From my experiments with older computers I've found they can often be just as fast as modern computers or even faster, the main limit is often bloat and bulk in operating systems and software.</p>
<p>I think that these ideas can often be implemented. Especially in a personal capacity or within very specific workplaces where they could offer benefits over drawback, such as farms.</p>
<p>Its a fun idea that makes some really valuable points and I hope to continue exploring the aspects I agree with in my own projects but beyond that I'm not entirely sure.</p>
]]>
</content>
</entry><entry>
<title>AberRoboticsSoc</title>
<link href="https://rosia.me/RoboticsSociety.html"/>
<id>https://rosia.me/RoboticsSociety.html</id>
<updated>2026-06-05T16:55:08Z</updated>
<content type="html">
<![CDATA[
<h1>AberRoboticsSoc</h1>
<p>The Aber Robotics Society is a small society of friends at my university who meet every Wednesday in a robotics lab and work on their projects. I originally joined to learn basic electronics but found a lot of good friends there and a really nice sense of community.</p>
<p>While there I have learnt most of my knowledge of robotics and electronics and worked on a number of projects including a basic two wheeled remote control robot (my first project where I learnt the basics of electronics), a program that takes photos of people, converts the images to lines and g-code and sends them to a CNC machine that draws the images and a watering system for plants I keep at my house.</p>
<p>During my second year I gained the role of quartermaster which left me in charge of the robotics cupboard where all of the societies older projects were left. Alongside with work, I helped run AberSailBot which has its own page <a href="SailBot.html">here</a>.</p>
<h2>Projects</h2>
<p>This site documents a few different projects I've worked on whilst at the society, including:</p>
<ul>
<li><a href="CNCMachine.html">CNSelfie</a></li>
<li><a href="SailBot.html">SailBot</a></li>
<li><a href="Laptop.md">Self-Built laptop</a></li>
</ul>
]]>
</content>
</entry><entry>
<title>AberCompSoc</title>
<link href="https://rosia.me/aberCompSoc.html"/>
<id>https://rosia.me/aberCompSoc.html</id>
<updated>2025-09-16T22:13:47Z</updated>
<content type="html">
<![CDATA[
<h1>AberCompSoc</h1>
<p>This year I have become president of my university's computing society or &quot;aberCompSoc&quot;. The society has a rich history with a <a href="https://www.aber.ac.uk/%7Edcswww/Dept/Teaching/CompSocWeb/compsoc.htm">website from the early 2000's</a> still being hosted. In recent years the group somewhat slowed and became mostly a drinking society. From this, the previous committee asked me to run for president and run some more topical activities.</p>
<p>I was previously a member of my secondary schools &quot;coding-club&quot; and was very attached to it. It was a space for programmers to spend their lunch times working on projects and talking about their work with each other, providing a chance to meet like-minded individuals and work on projects with them. Since starting at Aberystwyth I felt that I missed that environment and being offered this role as president I felt that I had a chance to try and recreate it.</p>
<h2>First week and general activities</h2>
<p>Before the start of the new year, the committee (myself included) spent a long time planning events and communications with the computing department to bring in new members. We secured a 5 minute window at the start of welcome lectures for first and second years and sent an email out to the whole department. From this our first session resulted in 60 attendees, this was a lot more than we were expecting but it soon died down to a more manageable 20 or so which it has remained at since.</p>
<p>The group now meets weekly in a department computer room and spends 3 or so hours just talking and coding. These are our main sessions but we also run larger events every month or so, normally involving coding related games. We've previously run:</p>
<ul>
<li>24 hour ASCII only game jams</li>
<li>Gatherings where people take turns producing presentations where they incorrectly explain a computing concept</li>
<li>Gatherings where people collectively create a website, freely pushing changes to it and having it update live</li>
</ul>
<p>Additionally to our events, we are also a student chapter of the <a href="https://www.bcs.org/">BCS</a>. This means we somewhat work with the local branch, attending their monthly meetings and helping to organise events including hosting talks and &quot;Show and Tell&quot; events where programmers can run short talks about the work they've been doing.</p>
<h2>FOSDEM trip</h2>
<p><a href="https://fosdem.org/2024/">FOSDEM</a> is a yearly open-source convention held in Brussels. A large portion of FOSDEM's organisers are AberCompSoc alumni and from this its become tradition to go there every year. As president I worked alongside the treasurer and organised the trip. My role involved organising flights and accommodation and communicating details of the trip while the treasurers role included managing the funds (tracking the account students paid into) and organising a sponsored coach from the university for the trip to and from the airport.</p>
<p>The trip ended up having 30 sign-ups which was double the amount we normally took so required somewhat more management than previous years. We ended up splitting the 30 into two groups of 15, each in their own accommodation and committee member. Each group organised themselves and ran internal trips and journeys themselves. The two only mixed once or twice for a large group meal and a group photo. This was a nicely scalable idea that kept things really manageable.</p>
<p>By the end of the trip we'd spent the full two days at the event and also spent 2 days doing tourism activities around Brussels including going to <a href="https://atomium.be/home/Index">the atomium</a>, a number of museums and some fun after-parties. A full description of the trip can be found on the society's website <a href="https://abercompsoc.github.io/events/2024/02/07/fosdem2024.html">here</a>.</p>
<p>I'm really proud of this trip, considering how many people came, I was sure something would go wrong but from that overly cautious mindset the entire trip ended up going relatively well with no major issues!</p>
<img alt=A group photo on FOSDEMs main stage src=FOSDEMStage.jpg style="width: 100%;">
]]>
</content>
</entry><entry>
<title>AberSailBot</title>
<link href="https://rosia.me/SailBot.html"/>
<id>https://rosia.me/SailBot.html</id>
<updated>2026-06-05T16:55:08Z</updated>
<content type="html">
<![CDATA[
<h1>AberSailBot</h1>
<p><a href="https://abersailbot.co.uk/">SailBot</a> is a university society I joined in my first year. We built and raced self-driving robot sailboats.</p>
<p>I joined the society as it seemed like a really interesting challenge to build robots that had to deal with the insane variety of variables the outside world offers. Especially in the ocean where you rely on those variables to perform even basic movement.
It felt like a good chance to try and learn to program machines that had to learn and work with those concepts.</p>
<h2>First Year</h2>
<p>I spent the first year in a team of 3 building a small boat we called &quot;floating point&quot;. We started from a polystyrene hull and had to do a number of steps to build it, none of which any of us had any experience with:</p>
<ul>
<li>Coating the hull in resin</li>
<li>Sewing a sail</li>
<li>Designing and 3D printing mechanisms for steering</li>
<li>Writing ESP32 code to run it using a digital compass and GPS</li>
</ul>
<p>We were building these along with other teams, the idea being at the end of the building period they would be tested and raced. By the end of the year only our team and one other had finished our boats so we tested them in a less competitive manner in still water at the local docks. Our boat failed to find a GPS connection and was unable to steer itself but the developer from the other team lent us his software which allowed us to still compete.</p>
<h2>Second Year</h2>
<p>In my second year at SailBot we collected new members and organised ourselves into teams to wire up and program a small unused <a href="https://www.rclaser.org.uk/photos">RC-Laser</a> found in our storage using a Raspberry Pi with an Arduino as a servo and sensor controller, communicating over serial.</p>
<p>We designed protocols for communication between an Arduino, which drove the hardware, and a Rpi, which ran navigation. Different teams implemented different systems and we hoped to pull them all together but ran out of time as the uni year ended and a number of us headed off to industry years.</p>
<p><img src="dewi.jpg" alt="dewi"></p>
<h2>Learning</h2>
<p>Before SailBot I'd never worked with physical mediums such as resin and wood outside of 3D printing. Carving out the hull and coating it, along with designing and sewing the sail was an amazing experience for me and taught me a great amount. The team I work with within the society are lovely people and, at this point, close friends.</p>
<img alt="Image of both teams on the day of our first race" src="BoatingTeams.jpg" style="width: 100%;">
]]>
</content>
</entry><entry>
<title>About Me</title>
<link href="https://rosia.me/About.html"/>
<id>https://rosia.me/About.html</id>
<updated>2026-06-17T12:23:31Z</updated>
<content type="html">
<![CDATA[
<h1>About Me</h1>
<h2>Who I am</h2>
<p>I'm Rosia Evans, I'm a programmer studying at a small university in Wales and soon to graduate! My work at university focuses on robotics but generally aims towards the lower level parts of programming. Previously this has involved topics around esoteric assembly languages or C/C++ programming. My experience in industry has revolved around testing, writing internal tooling or maintaining services, this has all been done in Python and C#.</p>
<p><img src="https://pics.rosia.me" alt="image of me"></p>
<p>(Reload the page to see a different image!)</p>
<p>In terms of my work, most of it involves:</p>
<ul>
<li>Designing small simple tools which follow the UNIX philosphy, often written in C/C++ or Python but slowly moving towards Rust and Hare</li>
<li>Designing long lasting and clean systems, often with heavy realiance on unit tests, a concept I feel quite strongly about</li>
<li>Writing code that runs on real machines, for instance, self-driving sailboats or agricultural robotic hardware</li>
<li>Debugging and repairing old electronics, for instance <a href="ThisSite.html">this server</a> or <a href="camera.html">my camera</a></li>
</ul>
<p>I've been programming for most of my life. My main language is C++, but I also have multiple years of experience in C#, Python and Java and some loose experience in Typescript and C. I'm currently learning Hare and Rust which have been very exciting! My first foray into a clean languages with genuinely modern features that aren't just bloat!</p>
<p>In my work, I prioritise simple, future-proof and reliable programs/documentation/processes and enjoy the challenges around designing these things or refactoring them to fulfill those values. I like to consider myself open, friendly and empathetic whilst still willing to push back when I feel I disagree with something.</p>
<p>Outside of work, most of my interests lie in experimenting with other ways we can live. This shows up in all sorts of ways from me repairing my own clothes, to seeing how much I can cook from bare bone ingredients, to living in a housing cooperative.</p>
<p>To see all of my work, check the navbox</p>
]]>
</content>
</entry><entry>
<title>AardvarkXR</title>
<link href="https://rosia.me/Aardvark.html"/>
<id>https://rosia.me/Aardvark.html</id>
<updated>2026-03-23T14:09:32Z</updated>
<content type="html">
<![CDATA[
<h1>AardvarkXR</h1>
<h2>Overview</h2>
<p>Aardvark was an open-source virtual reality project I joined and worked on for around 2 years between 2019 and 2021. I started out writing small add-ons for it and eventually ended up working with the main developer on creating core parts of the system.</p>
<h2>What is AardvarkXR?</h2>
<p><a href="https://github.com/aardvarkxr/aardvark">Aardvark</a> is a framework that allows users to open small apps (known as gadgets) over the top of other virtual reality programs. Its program agnostic so runs in any other app. You could think of it as a mobile phone for use within other VR applications. Its main focus is providing small utilities such as calculators or note taking apps. Developers can create apps for Aardvark using web code (React and Typescript) which it then renders over the users view. These renders can be 3D which is a big positive as most core VR systems don't support 3D rendering on overlays so Aardvark does this itself.</p>
<p>Due to all the code being web-based and run on servers, all gadgets are innately multi-user (with a small amount of work from the developer) and when in social VR apps, people can open gadgets that will be seen by all other users within that program using Aardvark.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/pux6RbySUMU" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<h2>My Work</h2>
<p>I was first introduced to Aardvark through a hackathon the developers ran on its initial release. When taking part in this I had no experience with typescript or web development in general, so I was required to teach myself over the course of the 3 days.</p>
<p>I worked on an audio visualiser tool that ran in the background of users environments and also helped other developers, designing and creating 3D models for their work. One example of this was a set of icons I modelled for a playing card app (one of the first apps to be published on the platform).</p>
<hr>
<p>Around 4 months later I was working on some 3D art in VR and realised it would be really useful to be able to bring reference images into my VR space. I remembered Aardvark and revisited it to create a photo viewing app. This was originally a personal project but became a team effort with another member of the community who offered to join development.</p>
<p>The app allowed users to upload images which were stored using <a href="https://en.wikipedia.org/wiki/InterPlanetary_File_System">ipfs</a> and had multi-user functionality allowing different people to show each other photos.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/E3gw_GXHH1s" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>After this I, found I was enjoying working with Aardvark and after talking to the main developer ended up working on the base code of the project itself.</p>
<p>Originally Aardvark had the user open its UI through a button on their hand which took up valuable visual space used by a lot of other programs.</p>
<p>I was tasked with creating a more intuitive solution which ended up being a gesture based system. With little to no guidance I had to read and gain a full understanding of the projects mid-level inner workings and
rewrite large sections of it. After a week or so I produced a gesture system that allowed the user to bump the ends of their controllers together to open and close the menu. I also created a developer tool to allow developers to tweak the gesture to ensure it worked for their specific controllers.</p>
<div style="display:flex; gap: 10px;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/9uG2HSavA1U" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<iframe width="560" height="315" src="https://www.youtube.com/embed/FzQcE9UeOao" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>
<h2>Looking Back</h2>
<p>Aardvark slowly fizzled out as it went on, never gaining much traction from developers sadly. Although it did become somewhat known in the VR space for a while. The main developer moved on to other projects and after that it fell quiet. Although I'm less invested in VR development nowadays looking back I still feel like it had a lot of potential and I'm somewhat sad it didn't take off. I still use it when working on 3D models in VR but past that it doesn't see regular use.</p>
<p>Aardvark was my first open-source project and I feel that I learnt a lot from it. It helped me learn to prioritise what I did and didn't create pull requests for and ask for help around, showing me how valuable the main developers time was. In terms of project management it taught me a lot around prioritising my work and my communications when in busy, high stress teams.</p>
]]>
</content>
</entry><entry>
<title>Art And Blender</title>
<link href="https://rosia.me/DigitalArtAndBlender.html"/>
<id>https://rosia.me/DigitalArtAndBlender.html</id>
<updated>2026-06-18T12:15:22Z</updated>
<content type="html">
<![CDATA[
<h1>Art And Blender</h1>
<p>Here's a little collection of some drawings and 3D modelling I've done in the past that I'm proud of!</p>
<iframe src="https://memories.littleorino.co/s/DigitalArt" width="100%" height="80%"></iframe>
<p>Heres a collection of general drawings I've done too :)</p>
<iframe src="https://memories.littleorino.co/s/Drawings" width="100%" height="80%"></iframe>
]]>
</content>
</entry><entry>
<title>Plant Watering System</title>
<link href="https://rosia.me/PlantSystem.html"/>
<id>https://rosia.me/PlantSystem.html</id>
<updated>2026-03-23T14:09:32Z</updated>
<content type="html">
<![CDATA[
<h1>Plant Watering System</h1>
<h2>Summary</h2>
<p>This documents my attempts to build a smart system to maintain plants. This has mostly been a chance to develop skills with electronics whilst letting me experiment with concepts near automated farming in a small form-factor I can work on in my flat at home. It's being build almost entirely out of second-hand, reused parts from old electronics.</p>
<h2>The Ideas Behind This</h2>
<p>I first began this project when I initially came across the idea of automated farming. It was a really intriguing idea to me and I spent almost a year thinking through concepts but didn't actually act on them. Eventually I got to a point where I really wanted to just try and build something physical to experiment with my ideas so this project came to light as a small way for me to try this.</p>
<p>Around the same time, I'd been reading around <a href="permacomputing.html">Permacomputing</a> for half a year or so and although this didn't massively align with its ideas I wanted to try and implement some of its main concepts in my work. This being the reuse of old computers and the production of independent and resilient technology.</p>
<p>From this I came up with the fun idea of building it using only reused parts from broken machines. This also felt like a good test of my electronics skills, re-purposing and re-wiring old components to work outside of their original purpose.</p>
<h2>Process</h2>
<h3>The pump</h3>
<p>While this idea was first developing I was staying home for the Christmas break and found a broken cat water-feeder in our shed. This was essentially a broken ceramic bowl with a fountain and a still fully functional mains-powered water pump. Finding this was what solidified my ideas and made me commit to the project.</p>
<p>Along with this I had:</p>
<ul>
<li>a <a href="https://www.raspberrypi.com/products/raspberry-pi-pico/">Rpi Pico</a> a friend had given me from their old electric bike</li>
<li>a mains relay from an old electronics project of my dads</li>
<li>piping taken from a beer brewing kit I had been given a few years back</li>
</ul>
<p>These parts were enough to get the pump working at a bare minimum. I put them together and wrote some basic code to turn them on and off. You can see a post about this along with a video of the pump running <a href="https://fosstodon.org/@Wi__Ro/110231382934272477">here</a>. Its worth noting this still lacked a proper codebase for interacting with the pump outside of turning it on and off for set amounts of time.</p>
<p>My next aim was to create code to allow the circuit to push specific amounts of water. As I'd not bought the pump I was using, I had little idea of how much water it was able to move so I set up a small experiment. This just required code which turned the pump on and off for different set amounts of time and had me measuring the amount of water it pumped. From this I was be able to realise it had a rate of 30/ml a second.</p>
<p><img src="experiment.jpg" alt="image of pot of water with pump and pipe leading into measuring beaker"></p>
<p>While testing this I met an interesting issue. I ran the code with different lengths of time for the pump to run in and I found that when I then worked out the average and tried to use it to pump specific amounts of water it would always be slightly off. At first I thought the pump was just old or inconsistent but as I was testing it again I realised the water levels in the measuring cup kept rising even after the pump stopped. At this point I realised my mistake, the two containers were level with each other and a siphon-ing effect was causing their water levels to balance out!</p>
<p>I ran the test without the pumps water pipe sitting within the beaker and this solved the issue.</p>
<h3>Measuring moisture</h3>
<p>My next aim was a moisture monitoring system to feed into the pump. For this I needed a moisture sensor. I felt that this would be a rare enough component that I may need to buy one myself and looked around somewhat but couldn't find any likely solutions so ended up buying an open source sensor as a compromise. I was kind of unhappy with this solution but felt there wasn't entirely another option. However, a month or so later I was discussing this issue with a friend and they pointed out that the basic theory behind the part was actually very simple and I could in theory make one myself. I noted this as something to come back to when I found myself needing more sensors.</p>
<p>From this sensor I soldered and build a very rough system that would measure soil moisture every few hours and if it went below a certain threshold would run the pump for 2 seconds. This had few functional uses but was a good proof of concept that the two components could work together.</p>
<p>For a proper system I hit some interesting problems. Namely how would I give quantity to how moist the soil was? The sensor gave a 1 to 0 real number representing its capacitivity but what this actually represented in terms of the soil was something I was pretty unsure of. The system didn't need this to function, a number of other systems would have still worked such as the one currently implemented. However I felt as I had the knowledge of a farming university to hand I may as well try and find out.</p>
<p>This will be updated as I do so.</p>
<h3>The Case</h3>
<p>Whilst thinking this problem though, I started working on a case for the circuit. I initially build a small long housing that just held the pico and mains relay. Printing this taught me some interesting lessons. I had build the case as two separate halves that fit together but after printing it I found my printers tolerances were too big and the parts didn't fit each other.</p>
<p>I reprinted this a few times and eventually talked to another student with more experience in 3D design and she helped me work out the printers tolerances and take them into account. This resulted in a case that correctly clicked together.</p>
<p>The case itself was not water-proof so required a resin coating and finalised electronics that would allow me to put sealant around the holes for the pump and sensor cables. This has yet to be done.</p>
<p><img src="caseopen.jpg" alt="an image of me holding the two halves of the case">
<img src="caseshut.jpg" alt="an image of my holding the two halves together">
<img src="plantsystemcase.png" alt="a cad file of the case"></p>
<h2>Still To Do</h2>
<p>This is as far as I have got at the moment. The project has somewhat taken a break as my searching for an industrial year placement took priority over it.</p>
<p>However I want to keep working on this project and have a list of planned out next steps including:</p>
<ul>
<li>Solve the currently mentioned issues around quantifying soil moisture</li>
<li>Un-hardcoding the water thresholds by setting averages and allowing the user to point out when the plant is in a good condition</li>
<li>Allowing the pump to run on battery power, its a mains pump but only actually required 5v/12a so this could easily be done</li>
<li>Cleaning up and finalising the electronics into a smaller portable system</li>
<li>Exploring building my own capacitive moisture sensors</li>
<li>Exploring creating a modular system that could monitor and water multiple plants</li>
</ul>
<h2>Critiques</h2>
<p>The design I have in mind for this project has a few interesting flaws. Firstly this is in no way scalable when built with scrap. It isnt even slightly a valid circuit for larger farming systems. They would have to produce it with ordered parts, if not use an entirely different system.</p>
<p>Secondly, if expanded, this system would require individual modules for each plant that it monitored. This feels inefficient and a much better system would involve one, more complex, tool. This would be moved between plants being used on all of them, as opposed to the current collection of &quot;dumb&quot; modules that are spread between each plant.
This is definitely feasible but not at my scale. This does still feel like a good way to develop skills towards creating this.</p>
<blockquote>
<p>Its worth noting, this is my first steps towards making something a bit more realistically usable, you can find my first designs towards that <a href="PlantCareV2.html">here</a></p>
</blockquote>
]]>
</content>
</entry><entry>
<title>Green Opal</title>
<link href="https://rosia.me/GreenOpal.html"/>
<id>https://rosia.me/GreenOpal.html</id>
<updated>2026-06-18T12:09:47Z</updated>
<content type="html">
<![CDATA[
<h1>Green Opal</h1>
<p>I've been going to <a href="https://fosdem.org/2025/">fosdem</a> most years since 2022. On my first year there I made some friends who I now make games with.</p>
<p><img src="green_opal_team1.webp" alt="A picture of 3 people posing for a photo together doing peace sign hands. They are in an open square with old buildings around them"></p>
<p>We call our group Green-Opal Studio, (we got this neat little website <a href="https://green-opal.studio/about">here</a>). Our main focus at the moment is on a small game titled Toad Towers, a deck-builder game where you play as a frog architect building sky-scrapers. Its in its early days but working on it has been really fun!</p>
<p>As well as this, the group takes part in the <a href="https://ludumdare.com/">Ludum Dare</a> game jams pretty regularly. I took part
in my first one October of this year, we made a game about a raccoon re-greening a scrap yard and building robots out of junk. It had hand-painted sprites, an adaptive sound track that changed as the scrap yard got cleaner and some really neat little animations that I set up.</p>
<p>This video shows some of its gameplay nearing the end of the jam, a few bug fixes were made a bit later on too.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/TOmp0SnDwXA?si=JpHWPkgvWqGX16gj" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<p>I've found I get a lot out of working with this group, they're great friends and I really enjoy making games with them as a break on-and-off from other workd.</p>
<p><img src="green_opal_team2.jpg" alt="A photo of 4 people, one holding a laptop showing a video game, they are posing and smiling"></p>
]]>
</content>
</entry><entry>
<title>Dogtooth Robotics</title>
<link href="https://rosia.me/Dogtooth.html"/>
<id>https://rosia.me/Dogtooth.html</id>
<updated>2026-06-05T16:03:26Z</updated>
<content type="html">
<![CDATA[
<h1>Dogtooth Robotics</h1>
<p><img src="dogtoothProfile.png" alt="an image of myself on dogtooths website"></p>
<p>This is a direct copy of a post I did for Dogtooth on leaving you can find that one <a href="https://dogtooth.tech/2025/05/07/an-eye-opening-year-as-a-software-intern-at-dogtooth-by-rosia-evans/">here!</a></p>
<p>As I approach the end of my industry year at Dogtooth, I’ve been reflecting on everything I’ve experienced – from technical lessons to unexpected personal growth. I wanted to share my time here, both to document it for myself and to offer insight into what working at Dogtooth is really like.</p>
<h2>My Background</h2>
<p>I came to Dogtooth looking for an industry year. I wanted a career that combined my love of programming with my love of the outdoors and agricultural robotics seemed like a really good start towards this. Dogtooth felt like exactly what I was looking for. It also provided some interesting ideas: the idea of working towards a new kind of farming with less reliance on mono-crops, less food waste, and although not as strictly related to their work, less reliance on herbicides and pesticides. The idea of automating food production pulled on a political chord in me too, a chance to see what the people working at Dogtooth saw in a future where their product was commonplace.</p>
<p>I also wanted to develop some new skills, especially around electronics and firmware and I wanted to get my foot in the door at a pleasant company so I had somewhere to turn to after university.</p>
<h2>What I Learned at Dogtooth</h2>
<p>From my first month at Dogtooth I started learning a wild amount. I’d basically been dropped into a new career space and had a lot to take in. Although I joined the software team I was also assigned an electronics and hardware tutor who would meet up with me once a week to help me develop the additional skills I wanted to learn. This was done even though I wasn’t working in that space! This tutoring was amazing and really gave me a lot. Having one-on-one time with someone was so valuable; any question I had was not only answered quickly but in a way that really integrated itself into my understanding well.</p>
<p>I also found that I very quickly learnt a lot about how an entire electronic rig, like our robots, is structured. Learning how a computer can work, manage and run electronic parts really blew my mind! It turns out, our robots have tens of embedded-systems computers inside them, each managing different parts, communicating with a main central computer through a networking system. I’d gone into this assuming there were just chips with massive sets of GPIO pins connecting to all the arms and rails at once. The more I dug into the robots as I worked with them, the more I learnt about the depth of their functioning and the systems Dogtooth has built around them.</p>
<p>Through the job I picked up an insane amount of knowledge about the stuff I was already working on in my life outside of work. To list just a few things off the top of my head: the insane depth of C#’s inner workings and flexibility, Python’s weird little quirks, all the tools and processes for maintaining and running servers and real time data services, and a massive amount just working with a relatively old codebase; seeing what we can do well and badly to ensure the code stays robust and maintainable for years to come.</p>
<h2>The Unexpected Lessons</h2>
<p>More interestingly, I got a large number of things from my time at Dogtooth that I wasn’t looking for such as interesting views into other worlds and other ways of working. A nice little example of why we should always be pushing ourselves to try new experiences.</p>
<h3>An Ego Check</h3>
<p>Dogtooth has been a great place for working slightly above my skill level and regularly making mistakes and learning. As an agile company it’s really open to failure and does really well at leaning into a blameless culture. This has been really good for keeping my ego tuned down, regularly reminding me that I don’t know everything, and that I’m surrounded by highly experienced people whose knowledge runs impressively deep. There was a lot of challenging work but my line manager very quickly made sure that I felt I was able to say “I don’t know how to do this, but I’ll give it a go as long as people are willing to help me when I need it”. Developing that kind of knowledge based humility whilst still being willing to undertake tough work feels like a really important skill that I’m glad I developed and I felt like it was definitely at the core of how Dogtooth treats its interns.</p>
<h3>Working in a Team with a Range of Opinionated Views</h3>
<p>People at Dogtooth are great at their job, and this comes with confidence. They know how to solve a problem and will fight for their view. Coming into these teams and seeing sets of 4-5 people consolidate their mass of widely different points through discussions, compromise and friendly jokes and somehow seeing them all come together in a clean, realistic and reasonable form is incredible. I had moments when I first joined Dogtooth where I’d see this and it would leave me in a really positive mood for the rest of the day. Just being around people as ideas fly and get slowly thinned out through genuine expert discussion is really comforting, especially nowadays when it’s easy to think people with adverse opinions just can’t get on. Dogtooth is really solid evidence against this.</p>
<h3>A View into Manufacturing</h3>
<p>Dogtooth is a very small company but needs to have a full production team. A nice benefit of this is that this means you have a really wide range of people but everybody still knows everybody. This has given me a chance to get a view into areas of work I would never have otherwise even thought to learn about. This especially applies to manufacturing where the head of the department, has a long and well-established background in the field. Talking to him about this has been profoundly eye-opening. A really interesting view into an industry that’s actually very good at organising humans and solving human problems. Just seeing the whole process a product goes through, from R&amp;D to production to the planning of mass production has been super educational and shown me a whole chunk of the real world I’d never have got to see otherwise.</p>
<h3>An Unusual and Sincerely Pleasant Working Environment</h3>
<p>A smaller thing, but Dogtooth is just a really lovely environment. I really hoped to get some outdoor manual labour mixed in with my coding whilst working here and I’ve definitely got it. Helping out while a whole team of really lovely people tear-down or rebuild poly-tunnels, weed plants or clear out containers has just been really pleasant. Being able to go and sit outside while working on my laptop on summer days or just having to sit outside whenever a robot needs testing makes Dogtooth a really unique place to work in a really good way; there’s almost a whimsy to it. That whimsy is also added to by having an infinite supply of strawberries to eat during the summer.</p>
<p>I kind of like to think that this is a bit of a window into what computing could be in a world where Dogtooth’s industry is thriving. The programming community definitely needs to be more willing to go outside and Dogtooth sometimes teeters on showing what that could look like. It’s a bit reminiscent of some sort of solarpunk utopian story.</p>
<h2>Final Thoughts</h2>
<p>That final point definitely ties into my feelings on Dogtooth generally. Working at Dogtooth for a year has really shown me the kind of environments I want to work in. In terms of my future goals and career aspirations, it’s definitely convinced me I want to stay in agri-tech, especially as it continues to grow and carves out its own space. Hopefully it becomes a place with a strong tie to nature, a trust in its workers and an understanding of its own identity. I think Dogtooth is moving in that direction well and I’m definitely hoping to return eventually.</p>
]]>
</content>
</entry><entry>
<title>Skipton Building Society Internship</title>
<link href="https://rosia.me/SBSWork.html"/>
<id>https://rosia.me/SBSWork.html</id>
<updated>2026-06-05T16:55:08Z</updated>
<content type="html">
<![CDATA[
<h1>Skipton Building Society Internship</h1>
<h2>Overview</h2>
<p>During my gap-year I took an internship at <a href="https://www.skipton.co.uk/">Skipton Building Society</a> as a software tester. Initially my job was to experiment with the use of automated testing however I eventually ended up presenting this software to groups of senior developers and working to integrate it into the society's general workflow, moving between teams helping them implement it.</p>
<p>SBS requested that I stay after my internship and I worked remotely one day a week whilst at university until my final year, training testers in automation.</p>
<h2>The Start</h2>
<p>My initial internship was a paid 9 month role where I was given <a href="https://smartbear.com/product/testcomplete/">SmartBear's TestComplete system</a>  to learn. The society hadn't integrated automated testing beyond unit tests into their workflow so were hoping to learn whether it was worth using.
I was paired with one other tester and we learnt the system and began using it to automate testing of the society's customer portal.</p>
<p>I found TestComplete a really nice system with a very user-friendly design for non-programmers and felt it would be a really good fit for the society. Within a month or so I started taking initiative to bring it to the attention of others, mentioning it to senior developers. One ended up organising a call with a larger collection of 20-30 and asking me to talk them through it.</p>
<p>I hosted and ran the call, showing the benefits and drawbacks of the system and getting the developers opinions and over-time we decided it was worth using. Licenses were bought and handed out and I began moving through scrum teams helping them integrate it into their work.</p>
<h2>Additional Actions</h2>
<p>On the side of this, I also did a number of other tasks:</p>
<ul>
<li>Acted as a general software tester for a variety of departments</li>
<li>Researched <a href="https://cucumber.io/docs/gherkin/reference/">Gherkin</a>, a language designed to allow expected test outcomes to be written in a standardised manner. Which also presented to a number of developers and organised a number of meetings around, facilitating conversation around its uses.</li>
<li>Co-Ran a coding club to up-skill testers and make them more familiar with coding principles.</li>
<li>Produced a large quantity of documentation and educational resources learning and working with TestComplete and coding in a testing context in general.</li>
<li>Pushed for the society to set-up standards for all their future automated testing.</li>
</ul>
<h2>Skills Learnt</h2>
<p>Throughout this internship I found that my social skills developed greatly. I got a lot better at giving criticism, being willing to ask questions and admitting I didn't understand things (all things I somewhat originally struggled with).</p>
<p>I also:</p>
<ul>
<li>Learnt a large amount around Microsoft's Azure Cloud Systems</li>
<li>Learnt the ins and outs of manual and automated testing</li>
<li>Gained real world experience of an Agile working environment, which I greatly enjoyed.</li>
<li>Developed a much stronger understanding of APIs and back-end programming which I had never previously looked into.</li>
</ul>
<p>Multiple times during my work there I was requested to stay as an apprentice rather than go to University, I did turn this offer down but worked there remotely from University one day a week remotely and full time over summers.</p>
<p>I found SBS an incredibly friendly and safe feeling place with a really healthy culture. Their attitude towards change was very exciting to work in. Multiple times I found I would make a mistake and be worried my teams would be annoyed or upset only to find they wouldn't even consider it an issue and with zero negative responses they would just ask how they could help to fix it and work with me to plan a solution.</p>
]]>
</content>
</entry><entry>
<title>Self-built Laptop</title>
<link href="https://rosia.me/Laptop.html"/>
<id>https://rosia.me/Laptop.html</id>
<updated>2025-09-16T22:13:46Z</updated>
<content type="html">
<![CDATA[
<h1>Self-built Laptop</h1>
<h2>How it started</h2>
<p>I have a small shoulder-bag I take everywhere. I often find myself wanting to take just that bag with me somewhere but also needing to take a laptop and having to take a whole backpack just for that laptop.
Separately from this, during my summer last year, I often found myself sitting outside and programming. Sat on the grass outside my dormitory or on the local hillsides with friends. Around the time I'd started experimenting with E-Ink Screens for a small project I was considering starting and I realised they would be perfect for programming outdoors in bright environments.
I'd also around this time wanted to try and create electronics that were resilient to outdoor environments.</p>
<p>From these 3 ideas I decided to try and create my own laptop that would fit within the 20x20cm space of my bag and was fully usable outside whilst remaining low-power enough for long trips.</p>
<h2>The initial design</h2>
<p>My first plan for this computer was a small rectangular slab, made of various layers of components and each made of an identical standardised frame. Each layer screwing together to form a sandwich of parts. The idea behind this being that it would be incredibly modular and simple to design and expand.
This idea stuck around for a while but eventually got dropped as I hoped to make the electronics somewhat more accessible and because wanted a computer that wasn't just a flat slab of plastic.</p>
<p>My second idea was a flat rectangle but with its upper third on a friction hinge to allow it to be tilted and tightened. This idea has stuck around and is currently my main driving design. Whilst its somewhat more fragile, its a much more human and open design and in theory shouldn't be too much more complex to design.</p>
<p><img src="LaptopSketch.jpg" alt="Initial sketch"></p>
<h2>The components</h2>
<p>Most parts needed I've currently got or have bought, including:</p>
<ul>
<li>A raspberry pi 2 b+ I've had lying around for years</li>
<li>An E-Ink screen bought for a previous project (more on this screen in a bit)</li>
<li>4 18650 Li-Ion batteries and a battery board for charging and power management</li>
<li>A sim-card board for roaming data</li>
</ul>
<h3>E-ink display</h3>
<p>The E-Ink display is a core part of this project and something I'm very excited for. I have a strong love of E-ink displays as things that are incredibly energy efficient, usable in almost any conditions and are a bit slower than normal screens proposing some really interesting challenges in terms of UI design.</p>
<p>As a basic summary, these screens are black and white displays that look very similar to paper. They don't use lights to produce colours and instead change their reflectiveness by controlling the charge of ink particles in little chambers of oil in their surface. This has a really nice effect of allowing them to work with the ambient light around them. The outcome of this being that they're are visible just about anywhere you can read paper and have an amazing viewing angle. Their only drawback being a slow refresh rate and a very small colour range, each added colour adds around 1-5 seconds to the refresh rate so generally they come in black and white only.</p>
<p>I find this limited refresh rate a really interesting challenge and in terms of what I'd be using this laptop for (programming) it wouldn't be too big of a drawback.</p>
<p>People have been experimenting with E-Ink screens a lot in the past few years and even got them to a point where they can display <a href="https://www.youtube.com/watch?v=J5WbhSV2E_U">functional desktops</a>, which I think is really amazing. However despite this I feel that a terminal would be a really interesting limit to put on myself when using this laptop. As well as this, the screen I have bought is incredibly small (2.13 inches diagonally) and I am somewhat determined to work with it, this making desktops somewhat harder to use.</p>
<p>I spent a long time working with E-ink displays and rewriting their drivers for this project. I'll be writing and attaching a blog-post on this soon.</p>
<h3>The battery pack</h3>
<p>The power source for this laptop is just a set of 4 Li-Ion batteries, googling this setup most people claim it could power a raspberry pi with a display for around an hour, and for around 10 hours without a display out outputs.</p>
<p>This wouldn't be a great battery life for most devices but using an E-ink display runs means we can run the display directly from the Rpi's 3v gpio pin and it only ever consumes power on refreshes so I think this could last much longer. Its something I definitely want to try and measure once this project is finished.</p>
<h3>The sim-card</h3>
<p>If I'm wanting to use this laptop outdoors, it would be nice to be able to do so without having to tether it to my phones Wi-Fi hotspot. After a bit of research I found hats and boards for the raspberry that support sim-cards and support most protocols. This seems like a really fun chance to explore a technology I've barely ever touched.</p>
<h2>The Keyboard</h2>
<p>The keyboard has by far been the biggest challenge of this project, There are no keyboards small enough for what I'm wanting whilst still having big enough keys for what I want. My two options I have at the moment are:</p>
<ul>
<li>Bring a bluetooth keyboard</li>
<li>Design my own</li>
</ul>
<p>Bringing a bluetooth keyboard seems like the most realistic option and is most likely the one I will go with, but I have done research into keyboard layouts I could use, including a really unique one a friend suggested which I ended up testing out.</p>
<p>The first physical result of this whole project has been a model of the laptop with a sticky surface for me to move keys around on. This has allowed me to experiment with different layouts and see how they feel in my hands. Using this I feel that I have somewhat come across a design I like but I've yet to decide whether its worth buying a large amount of switches and keycaps to solve a problem I already have a solution for (bluetooth keyboard).</p>
<p><img src="KeyboardPrototype1.jpg" alt="cardboard keyboard prototype">
<img src="KeyboardPrototype2.jpg" alt="cardboard keyboard prototype"></p>
<h2>Progress Update 4/1/2024 - Little Things</h2>
<p>Over this Christmas break a number of large steps have been taken, leaving me pretty close to finishing this project!</p>
<ul>
<li>I was given a SIM7600E hat for my Pi as a gift, meaning I now have the final missing piece of my hardware! Getting this working took a few days but its now ready to give my laptop 4G data. In theory it could also allow for phone calls and GPS tracking but I don't really have the time to write the programs for these at the moment and it feels like something I wouldn't use too much.</li>
<li>The final decision has been made on the keyboard, I have a bluetooth one I'm happy using. This keeps my project a bit more realistic as designing a keyboard would likely double the amount of work for this.</li>
<li>A final CAD design has been made and checked with an engineer friend, images below. I've created two versions. The first follows the original design and still holds space for a keyboard or other form of expansion. The second has removed this space but is slightly thicker as it places the hat on the pi. I'm really happy with these and they're essentially ready to be built.</li>
<li>I met up with a friend who will help me with the wood working, we talked through tweaks needed to make the design more realistic to machine and the processes we would use for each part. This turned out better than I could have hoped and its turned out we'll get to do some really fun work, for instance we plan to do some wood bending which is something I've always wanted to try!</li>
</ul>
<p><img src="LaptopCad1.png" alt="image of laptop cad design">
<img src="LaptopCad2.png" alt="image of laptop cad design without cover">
<img src="LaptopCad3.png" alt="image of alternative laptop cad design">
<img src="LaptopCad4.png" alt="image of alternative laptop cad design without cover"></p>
<p>I'm really happy with my progress over this two week break. Its a shame the final wood work will have to wait till Easter but its just how things are with exams.</p>
<h2>Progress Update 10/2/2024 - Re-soldering headers</h2>
<p>In my previous update there's some CAD images, you may notice an odd design choice in these. The smaller system has a board sticking out the top. This was done because the pi and hat combined together are quite tall and a thicker device would be somewhat ugly and unwieldy. Having them stick out the top was an attempt to create a smaller device but I wasn't very happy with this. As a solution, this put the board at risk of damage and essentially worsened the ruggedness of the device just for improved aesthetics. In order to fix this I decided to resolder the header pins on my boards myself to try make them smaller.</p>
<p>This involved cutting the plastic from the header, de-soldering each of the 40 pins individually and then either re-soldering them directly onto the pi or finding some form of smaller header. I didn't want to directly solder them to the board as it would have been a bit too permanent (the idea of being able to disassemble this board if necessary is something I'm somewhat attached to). For a while I really struggled to find a header that was much smaller but eventually I found an interesting workaround. I found a header extender board that turned an RPi's GPIO pins into a set of two. Using this I could then attach the hat using a shallow female header and still have access to the GPIO, essentially making the device slightly wider instead of taller.</p>
<p>I bought the board and headers and after soldering them on I was left with a device that was a third or so smaller than it had originally been! I was really paranoid I was going to damage my board from this but it worked out so I'm quite proud of it.</p>
<p><img src="p2ppyBoardDestroyed.jpg" alt="An image of a circuit board being taken apart">
<img src="p2ppyBoard1.jpg" alt="An image of my new board from above after re-soldering">
<img src="p2ppyBoard2.jpg" alt="An image of my new board from the side after re-soldering">
<img src="p2ppyBoard3.jpg" alt="An image of my new board from the other side after re-soldering"></p>
<h2>Progress Update 15/3/2024 - Apline Linux... Again!</h2>
<p>All of my hardware is ready, so I started working on the software, doing this I realised my Pi was taking up more energy than I'd hoped. To fix this I switched to a lighter operating system. Alpine Linux supports Rpi arm chips and I'm familiar with it from making <a href="ThisSite.html">the server for this website</a>. So I figured I'd give it a go.</p>
<h2>Progress Update 29/4/2024 - Wood working and a broken psu</h2>
<p>Over the Easter holidays, I met up with a friend and we started working on the wooden body of the device. We produced two rough base plates and started work milling corner blocks. We got half of these blocks done before I head to head back to uni. The amazing workshop engineers at the university were willing to finish off the last two blocks for me, which I drilled holes into and added threaded inserts to, resulting in this.</p>
<p><img src="woodblock1.jpg" alt="An image of some wooden blocks on wooden base-plates">
<img src="woodblock2.jpg" alt="A close up of a block"></p>
<p>This is far from done, but its enough to build a basic frame I can use, I want to take something to <a href="https://www.emfcamp.org/">emf camp</a>, so I might try build it with just this for now.</p>
<p>As a side note, during this time I also worked on the software a bit. Doing this I ended up plugging in the pi to both the battery pack and mains, this lead to the pi charging the battery pack in reverse and popping one of its components and possibly damaging another.</p>
<p><img src="board.jpg" alt="A board with a burnt out chip"></p>
<p>Luckily the manufacturer was really kind and gave me the names of the components I needed to replace. I ordered them from Ebay and one arrived quite quickly (the other I'm still waiting on). These were smd components and I'd never soldered anything other than through-hole before so I did some reasearch and found a great video by a channel called <a href="https://www.youtube.com/watch?v=dDhwwoKaCjY">eleneasy</a> which prepped me perfectly. I gave it a go on the first component that arrived and although it hasn't been tested yet, I'm quite happy with the result considering its my first time.</p>
<p><img src="smdsoldering.jpg" alt="The burnt out board with a chip replaced, the job is somewhat messy but clean enough to probably work"></p>
<h2>Progress Update 22/5/2024 - Board repair, board breaking, drivers and woodworking</h2>
<p>Since I've got back to University, a lot of progress has been made. The board was just repaired with the help of a university technician, they lent me a microscope for soldering some smaller components back in place and also let me use their heat-plate to remove and replace the broken chip. In this process a leg got snapped off another chip though! This chip cant be shipped in unless its from China, especially not in the time-frame I need. I'm going to try find one on another board somewhere. If I cant its just two mosfets in an ic so I'll try bodge something.</p>
<p>Outside of this, the E-Ink display is now working on Alpine Linux! This took a day or so of driver experimentation, you can find my notes on how to get this working <a href="AlpineEinkDrivers.html">here</a> if you want to do this yourself. The screen can now run the demo, I also learnt the c library to use the drivers and logged that <a href="UnderstandingWaveshaerEinkDrivers.html">here</a> (in a new category for the nav menu!). This library still needs implementing, for now I'm going to try use <a href="https://github.com/joukos/PaperTTY/tree/main">PaperTTY</a> for the sake of time.</p>
<p><img src="p2ppyScreen.png" alt="A 7inch e-ink screen running a demo"></p>
<p>I also got most of the case finished off, the entire thing is fully modular save two pieces which involve glue (baseplate everything builds onto and an element of the screen base). All that's left to do on this is the cage around the screen which should be done soon. The University has a laser-cutter which I've been given access to and this massively sped things up.</p>
<p><img src="p2ppyCase2.jpg" alt="A wooden case for my computer, the length of a forearm and the width of two, it has two wooden flaps on hinges where a screen could be attached">
<img src="p2ppyCase1.jpg" alt="A wooden case for my computer"></p>
<p>An hour or so before uploading this update I was trying to get PaperTTY working and accidentally destroyed all the data on my Alpine setup. This sounds insane but its quite easy to do as I'm running Alpine diskless so no changes are saved until you run a specific commit command which creates an &quot;overlay&quot; that sits over the top of the normal system, and if this commit goes wrong it can destroy your previous overlay meaning you don't have one anymore. I always hear Linux users talk about checking backups and just backing up in general, now I've experienced first hand why.</p>
<p>I'm very lucky I saved my notes on how to get the E-Ink drivers working otherwise I would have had a terrible time. I've now realised I should be backing up my overlays and I've also created a setup script for getting certain things like the e-ink drivers working. When I'm sure this works I'll add it to my <a href="AlpineEinkDrivers.html">notes on setting up E-Ink drivers for Alpine</a></p>
<p><strong>Nearly finished</strong>, left to do is:</p>
<ul>
<li>Finish the screen cage</li>
<li>replace or repair the 8205a chip with the broken leg</li>
<li>get PaperTTY working</li>
</ul>
<h1>Progress Update 26/05/2024 - all hardware done, screen drivers left to be finished</h1>
<p>Firstly, I managed to find a replacement 8205a on E-Bay coming from Essex, this arrived and has been successfully soldered onto the board. One of its legs looks like its touching a pad it shouldn't but I checked it with a multi-meter and it seems fine.</p>
<p>Secondly, the screen cage is finished! it looks quite nice outside of the baseplate being made out of wood with an odd sheen finish to it. Its pretty sturdy and I'm surprised at how strong the hinge is for what is essentially just a screw.</p>
<p>Finally, the screen has been rewired to use individual cables for each pin rather than its hat, this gives me a whole set of gpio pins for me to use if I ever want to which is nice and it gives the board a bit more space.</p>
<p>I also got PaperTTY installed after a lot of installation error squishing and library hunting. I haven't tested it yet or put it on start-up but it seems to be installed fine. Next update will be the final one with the working device hopefully :)</p>
<div style="display:flex; gap: 10px;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/1rrXvB-o--s?si=wryiOo-9o6X8CdGM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
<iframe width="560" height="315" src="https://www.youtube.com/embed/5XT0m0wvv8Q?si=meRZiHbuFyERtbnh" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div>
<h2>Summary</h2>
<p>This project's first working full version is nearing completion! Afterwards I intend to make small improvements but these won't likely be logged here. Keep an eye out for a rewrite of this page soon, this one will be archived</p>
]]>
</content>
</entry><entry>
<title>This Site</title>
<link href="https://rosia.me/ThisSite.html"/>
<id>https://rosia.me/ThisSite.html</id>
<updated>2025-09-16T22:13:46Z</updated>
<content type="html">
<![CDATA[
<h1>This Site</h1>
<p>This site is a small project I worked on over the course of a few weeks while first returning back to university during my second year. Its hosted on a small <a href="https://www.lighttpd.net/">lighttpd</a> server running on an old laptop from around 2003. I wrote a small C++ program that takes in MarkDown files and builds them into webpages. During start-up, or alternatively on request, the server pulls this code along with the markdown from separate repos, builds the code and runs it. This then builds the website from that markdown and puts the pages in a folder for Lighttpd to host.</p>
<blockquote>
<p>For similar ideologies around hosting, see the <a href="https://homebrewserver.club/">homebrewserverclub manifesto</a> and the <a href="https://areyoubeingserved.constantvzw.org/Summit_afterlife.xhtml">feminist server manifesto</a></p>
</blockquote>
<h2>The Thoughts Behind This</h2>
<p>During my first year at university I read a lot around the concept of <a href="http://permacomputing.net/">Permacomputing</a>. This is a set of ideas around reusing old computers and writing small systems that avoid <a href="https://en.wikipedia.org/wiki/Software_rot">code rot</a> whilst using as little power as possible.
The driving idea behind this being that we've had computers that are powerful enough for most small jobs for quite a long time and realistically a lot of old e-waste is still perfectly good for these kind of small, personal, low-risk jobs. Permacomputing experiments with whether using these would be environmentally friendly if done correctly. I'd been reading into Permacomputing for a decent while but never properly had the chance to experiment with my thoughts on it.</p>
<p>Along with that I'd also spent time doing a module in my first year on the history of the internet and found the www's origins really inspiring, the idea of a language/system that was easy for just about anyone to learn, that was incredibly simple but super flexible. When learning about this I'd kind of started to feel like we'd lost that part of the internet. Websites are always generated with insane complexity which feels almost unnecessary when we still have that simple flexible system its all built on top of. I wanted to try and use that simple system again, to experience it for myself.</p>
<h2>The Code</h2>
<h3>The Server Backend</h3>
<p>I wanted the system to be as lightweight and fast as it could be, hopefully leading to a very power-efficient result. I decided to use C++ as it was my main language and was also very fast.</p>
<p>I was planning on writing the server code myself, exploring libraries such as <a href="https://oatpp.io/">oat++</a> or <a href="https://crowcpp.org/master/">crow</a> but as I researched them I realised they were built for large scale systems. Whilst this is very much a strong point for them, this server was only meant to host a small static site that would see very little traffic and using these large libraries felt unnecessary and unwieldy.</p>
<p>Whilst researching I also found Lighttpd, a relatively old and incredibly light weight server program build to host static pages with high demand but on a small scale system wise. This felt like the right solution to my problem as it didn't implement large frameworks that wouldn't get used but would still allow my server to be reliable.</p>
<h3>The Parser</h3>
<p>I initially planned to write a markdown parser and spent a day or two working on one, writing a <a href="https://en.wikipedia.org/wiki/Simple_API_for_XML">SAX-Style</a> one. I was unsure whether this was a workable idea for markdown but through thinking about it and planning how it would work I felt quite confident it would be much faster than a DOM parser. I was however, aware that creating a full-spec markdown parser would take most of my time up and I only wanted this to be a small project.</p>
<p>I looked online and found [md4c][https://github.com/mity/md4c], a simple and insanely fast parser written in very low level c. I ran some benchmarks and found it could parse incredibly large documents in less than a millisecond which convinced me pretty quickly. It seemed much faster than any other option but also much simpler. After starting to implement this I discovered it actually parsed markdown text in the same SAX-Style system as I had planned to which made me very happy.</p>
<p>From here I implemented md4c along with code to read the filesystem and combine the resulting html with a template. This took a few revisions as I wanted to make it as flexible and reusable as possible, making little to no assumptions about the template being given. By default the code searched for an empty <code>&lt;article&gt;</code> body and placed the generated html within it and a similar thing for the <code>&lt;nav&gt;</code> menu. This could then be overwritten by handing in other identifiers to look for.</p>
<p>The code would collect every markdown file, generate a nav menu summarising it then go through each page copying the template and adding that along with its matching markdown/html and writing it to a given file.</p>
<h2>The Hardware And Its OS</h2>
<p>A few months before this project, I found an laptop in a &quot;free to a good home&quot; box outside someone's house. It was very old and originally ran windows vista but someone had tried to update it to windows 10 and broken it. I took it home as a chance to take it apart and mess around with it but in the end found myself needing a server for this project and this felt perfect.</p>
<p>The main difficulty however was its power-consumption. Its power consumption felt like it would be much higher than newly bought lightweight hardware such as a raspberry pi. I spent a lot of time weighing up the differences and decided to try the laptop and measure its power consumption over a length of time.</p>
<p>The other big issue I hit was the operating system. I wanted something as lightweight as possible with little to no unneeded features. These being things like a desktop or the additional packages you would find in something like stock Ubuntu. A big difficulty here was my lack of knowledge around operating systems, until that summer I had always used windows, only then switching to Pop_OS. I had almost no knowledge of other systems but weighed up a few well known options including:</p>
<ul>
<li>Base Debian</li>
<li>Raspberry Pi OS Lite (very stripped down Pi OS)</li>
<li>Arch</li>
</ul>
<p>These each had their own issues. I was unsure what was included in base Debian and what Raspberry Pi OS Lite actually involved (Rpi OS Lite has almost no documentation online). I talked to a friend with more Linux experience than I and he pointed me to <a href="https://www.alpinelinux.org/">Alpine Linux</a>. A massively stripped down Linux distribution built specifically for lightweight servers and with its own package manager that offered a Lighttpd install!</p>
<p>I decided to go for this very quickly as it seemed built specifically for the ideas I was wanting to test out.</p>
<h3>Alpine Linux</h3>
<p>Alpine Linux was my first non-debian Linux experience. I really enjoyed learning about it and found its documentation really helpful and detailed with almost everything I needed. The OS itself was really simple and friendly too which was very nice.
Using it was a really educational experience for me, I was very surprised by what wasn't included as I slowly learnt what came from Debian and what didn't. Alpine didn't have sudo, any sort of file transfer systems or any of bash's basic features. Realising this and understanding the lower-level commands they were built out of was really interesting (for example sudo seems like its just a complex wrapper for su, a command that switches users).</p>
<p>Alpine essentially, from a users perspective, is made of Busybox (a very basic shell that I also found runs within ubuntu after a kernel panic) and OpenRC which just controls how background services run. These two programs did everything I needed with OpenRC managing Lighttpd and Busybox letting me interact with the OS and running a startup script for me to pull from Github and rebuild/run the C++ code.</p>
<h2>Summary</h2>
<p>I've finished this project for now and I'm very happy with it, it has all the features I wanted it to have and a few extra. I think it's a really good exploration of some interesting ideas. It feels very unique though I do worry if its basic visual style is putting some people off it and also possibly causing accessibility issues for certain people.</p>
<p>I tested the power consumption of the laptop and found it only consumed around 23w which I was very proud of. In comparison my main laptop (a model from 2022) draws 60w on average. Sadly, this is still much higher than the draw of something like a Pi (by almost 5x) so despite my efforts with code, this is still much less efficient than some machines. This was kind of to be expected considering the Raspberry Pi's purpose but I was hoping to get it a bit closer than 5x higher.</p>
<p>On a somewhat unrelated note, one thing I would still like to know is what the original power consumption of specifically the old laptop was. It would be really nice to know whether my choices for the software used did actually make a noticeable difference. At the moment I don't have time for this but at some point I would like to boot windows off an external ssd and see how much harder the laptop has to work.</p>
<h3>Still To Do</h3>
<p>Outside of this there's still a few things I'd like to add at some point, a big one would be basic video sharing. At the moment this website relies on other servers to store and share files, such as YouTube or Mastodon. A core principle of Permacomputing is avoiding reliance's like these and whilst this isn't a principle I'm super invested it it feels like it could be fun to try to implement and would mean I wouldn't need to worry about my website becoming outdated over time.</p>
<h3>Stability</h3>
<p>I ran a few basic tests on the servers stability and found some interesting points. First, its stability is quite good, I hear horror stories of people always having to check in on and debug their servers. At the time of writing this server has been running for almost a month without issue, having been down only once when a flat-mate unplugged it.</p>
<p>A second point worth making though is that despite running Lighttpd, the hardware greatly limits the traffic it can take. From some benchmarks with <a href="https://github.com/httperf/httperf">httperf</a> it can handle about 10 page requests a second before one request will fail, I'm unsure whether this is caused by the laptop or my home router. I intend to look into this at some point.</p>
<h2>Fun stuff</h2>
<ul>
<li>You can still see the first test article for this website <a href="TestFullArticle.md">here</a>.</li>
<li>You can see the website I used for a decent few years before this <a href="https://github.com/Wil-Ro/Portfolio">here</a>. I cant host it as it takes priority over my current site on most search engines. Its CSS is much more modern and has some really fun quirks, for instance the <a href="https://wil-ro.github.io/Portfolio/pages/AllProjects.html">gallery page</a> which has no JavaScript, its 100% pure CSS.</li>
</ul>
]]>
</content>
</entry><entry>
<title>Friends</title>
<link href="https://rosia.me/friends.html"/>
<id>https://rosia.me/friends.html</id>
<updated>2026-06-11T14:18:01Z</updated>
<content type="html">
<![CDATA[
<h1>Friends</h1>
<h2>IRL Friends</h2>
<p>I have friends with websites! You should become one of them!
See them all below (they're cool as hell with unique interests and fun views)</p>
<ul>
<li><a href="https://wren.soy">Wren!</a></li>
<li><a href="https://sparrowweaver.neocities.org/">Megan</a>(with an extremely cool website)</li>
</ul>
<p>A lot of us are on the <a href="https://aberwebr.ing/">AberWebRing</a></p>
<ul>
<li><a href="https://bobyn.uk">Bob</a></li>
<li><a href="http://edmil.net">Edmil</a></li>
<li><a href="http://seacrossedlovers.xyz">Lucas</a></li>
<li><a href="https://ellovessws.me/">Ezra</a></li>
<li><a href="https://oscar.blue/">Oscar</a></li>
<li><a href="https://vibe-876.github.io">Cam</a></li>
</ul>
<h2>People On The Indie-Web I've Chatted With</h2>
<ul>
<li><a href="https://ellesho.me/">Elle</a></li>
<li><a href="https://jpop.dev/">JPop</a></li>
</ul>
<h2>Badges</h2>
<div style="width: 50vw; display:flex;">
<p><a href="https://rosia.me"><img style="width: 88px; height: 31px;" src="RosiaBadge.png"></a></p>
<p><a href="https://ellesho.me"><img style="width: 88px; height: 31px;" src="https://ellesho.me/elles8831.webp"></a></p>
<p><a href="https://blender.org"><img style="width: 88px; height: 31px;" src="badges/blender.gif"></a></p>
<p><a href="https://mullvad.net/en"><img style="width: 88px; height: 31px;" src="badges/mullvad.png"></a></p>
<p><a href="https://j3s.sh/thought/drones-run-linux-free-software-isnt-enough.html"><img style="width: 88px; height: 31px;" src="badges/linux.png"></a></p>
<p><a href="https://practitioner.sh/" title="I am a Practitioner Technologist"> <img alt="I am a Practitioner Technologist: learn more about my commitment" style="width:350px;max-width:calc(100% - 2em)" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc3MDAnIGhlaWdodD0nMTM1JyB2aWV3Qm94PScwIDAgMTg1LjIxIDM1LjcxOSc+PHBhdGggZmlsbD0nI2Y5ZjlmOScgZD0nTTAgMGgxODUuMjF2MzUuNzE5SDB6Jy8+PHBhdGggZmlsbD0nbm9uZScgc3Ryb2tlPScjOWRjMGJjJyBzdHJva2Utd2lkdGg9Jy42OTcnIGQ9J00uMzQ4NS4zNDY0aDE4My44OHYzNS4wMjRILjM0ODV6Jy8+PHBhdGggZmlsbD0nIzlkYzBiYycgZD0nTTQzLjQ5NSAwaDE0MS43MXYzNS43MTlINDMuNDk1ek0xMy40NDY0IDExLjU1NjdjLTEuMTM4MyA0LjI0ODMgNS4yMzQgNS45NTU4IDYuMzcyNCAxLjcwNzUgMS4xMzgzLTQuMjQ4My01LjIzNDEtNS45NTU4LTYuMzcyNC0xLjcwNzVtLTYuNTIwOSA4LjcwMjQgNS4xNDQzLTIuOTdhMS4wNTU2IDEuMDU1NiAwIDAgMSAuODg4NC0uMTcxNmwxNC45OTY2IDQuMDE4MmMxLjQxMjguMzgxMy44NDUgMi41MDAyLS41NjkyIDIuMTI0MWwtNS43MzUxLTEuNTM2OCAzLjIxMTUgMTUuMjAzYTEuMDczIDEuMDczIDAgMCAxLS4xMTM4LjQyNDhjLS4xMDkgMS40NjU2LTIuMjk1OCAxLjM0NTYtMi4yNDM3LS4xMjNsLTEuMTUwOS00LjIwMTUtNC4yNDgyLTEuMTM4MyAxLjY4NjMgMTAuMTA1MWMuMDU1NS4xOTM0LjA1NTguMzk4Ni4wMDA3LjU5MjEtLjEyMjcgMS40NjE2LTIuMzA0IDEuMzIxLTIuMjM4LS4xNDQzbC00LjY0NDctMjIuNTk5Ny0zLjkwMSAyLjMyNDJjLTEuMjI4NC41Nzc3LTIuMjA4My0xLjE0NzUtMS4wODI5LTEuOTA2NScvPjxwYXRoIGZpbGw9JyMzNTg2MDAnIGQ9J00yNC44IDEwLjM1MzdhNS4yNDQ3IDUuMjQ0NyAwIDAgMC0uNjcyNC0xLjIyNjlsMTAuMDE4Ny03LjY2ODRhMTcuNTczOSAxNy41NzM5IDAgMCAxIDIuMzQ2NiA0LjA2NDZ6bTEyLjkwNzcgNC4zOTE1YTE3LjQzNzEgMTcuNDM3MSAwIDAgMCAuMDA0Mi00LjY4NjJsLTEyLjU0NTEgMS42NDQzYTQuNDkyIDQuNDkyIDAgMCAxIC4wMTM5IDEuMzkxN3ptLTEuMjM4MiA0LjUzNzQtMTEuNjUzLTQuODI4OWE1LjQ3MTUgNS40NzE1IDAgMCAxLS42ODY2IDEuMjA0bDkuOTk5OSA3LjY4NTJhMTUuODUwNiAxNS44NTA2IDAgMCAwIDIuMzM5NC00LjA2MDQnLz48cGF0aCBkPSdNNDkuMTc1IDkuMDk4OGguNjYxMXY0LjcyMzJoLS42NjFabTQuNTY2NCA0LjI2NjVxLjIyNSAwIC4zOTUzLS4wMDY4LjE3NzItLjAxMzYuMjkzLS4wNDA5di0xLjA1NjRxLS4wNjgtLjAzNDEtLjIyNDgtLjA1NDYtLjE1LS4wMjcyLS4zNjgtLjAyNzItLjE0MzIgMC0uMzA2OC4wMjA0LS4xNTY3LjAyMDQtLjI5My4wODg2LS4xMjk1LjA2MTMtLjIxODEuMTc3Mi0uMDg4Ni4xMDktLjA4ODYuMjkzIDAgLjM0MDguMjE4LjQ3NzIuMjE4Mi4xMjk0LjU5My4xMjk0em0tLjA1NDUtMy4xNzZxLjM4MTcgMCAuNjQwNy4xMDIyLjI2NTguMDk1NS40MjI1LjI3OTUuMTYzNi4xNzcyLjIzMTcuNDI5My4wNjgyLjI0NTQuMDY4Mi41NDUzdjIuMjE1cS0uMDgxOC4wMTM2LS4yMzE3LjA0MDktLjE0MzIuMDIwNC0uMzI3Mi4wNDA5LS4xODQuMDIwNC0uNDAyLjAzNC0uMjExNC4wMjA1LS40MjI2LjAyMDUtLjMgMC0uNTUyMS0uMDYxNC0uMjUyMi0uMDYxMy0uNDM2Mi0uMTkwOC0uMTg0LS4xMzYzLS4yODYyLS4zNTQ0LS4xMDIzLS4yMTgtLjEwMjMtLjUyNDggMC0uMjkzLjExNTktLjUwNDMuMTIyNy0uMjExMy4zMjcxLS4zNDA4LjIwNDUtLjEyOTUuNDc3MS0uMTkwOC4yNzI2LS4wNjE0LjU3MjUtLjA2MTQuMDk1NCAwIC4xOTc3LjAxMzcuMTAyMi4wMDY4LjE5MDguMDI3Mi4wOTU0LjAxMzYuMTYzNi4wMjczLjA2ODEuMDEzNi4wOTU0LjAyMDR2LS4xNzcycTAtLjE1NjctLjAzNC0uMzA2Ny0uMDM0Mi0uMTU2Ny0uMTIyOC0uMjcyNi0uMDg4Ni0uMTIyNy0uMjQ1My0uMTkwOC0uMTUtLjA3NS0uMzk1My0uMDc1LS4zMTM1IDAtLjU1Mi4wNDc3LS4yMzE4LjA0MDktLjM0NzcuMDg4NmwtLjA3NS0uNTI0OHEuMTIyNy0uMDU0NS40MDktLjEwMjIuMjg2Mi0uMDU0NS42MjAyLS4wNTQ1em0yLjQxMjYuMTkwOHEuMjE4MS0uMDU0NS41NzI1LS4xMTU4LjM2MTMtLjA2MTQuODMxNS0uMDYxNC4zNDA4IDAgLjU3MjUuMDk1NC4yMzE3LjA4ODYuMzg4NS4yNjU4LjA0NzctLjAzNC4xNS0uMDk1NC4xMDIyLS4wNjEzLjI1Mi0uMTE1OC4xNS0uMDYxNC4zMzQtLjEwMjMuMTg0LS4wNDc3LjM5NTQtLjA0NzcuNDA4OSAwIC42Njc5LjEyMjcuMjU5LjExNTkuNDAyLjMzNC4xNS4yMTguMTk3Ny41MTguMDU0Ni4yOTk4LjA1NDYuNjU0MnYxLjk5MDJoLS42MzM5di0xLjg1NHEwLS4zMTM1LS4wMzQtLjUzODQtLjAyNzMtLjIyNDktLjExNi0uMzc0OC0uMDgxNy0uMTUtLjIzMTYtLjIxODEtLjE0MzItLjA3NS0uMzc0OS0uMDc1LS4zMjAzIDAtLjUzMTYuMDg4Ni0uMjA0NS4wODE4LS4yNzk0LjE1LjA1NDUuMTc3Mi4wODE3LjM4ODQuMDI3My4yMTEzLjAyNzMuNDQzdjEuOTkwMmgtLjYzMzh2LTEuODUzOHEwLS4zMTM1LS4wMzQtLjUzODUtLjAzNDItLjIyNDktLjEyMjgtLjM3NDgtLjA4MTgtLjE1LS4yMzE3LS4yMTgtLjE0MzEtLjA3NS0uMzY4LS4wNzUtLjA5NTQgMC0uMjA0NS4wMDY3LS4xMDkuMDA2OC0uMjExMy4wMjA0LS4wOTU0LjAwNjgtLjE3NzIuMDIwNS0uMDgxOC4wMTM2LS4xMDkuMDIwNHYyLjk5MmgtLjYzMzl6bTguNjQyIDIuOTg1MnEuMjI1IDAgLjM5NTQtLjAwNjguMTc3Mi0uMDEzNi4yOTMtLjA0MDl2LTEuMDU2NHEtLjA2OC0uMDM0LS4yMjQ5LS4wNTQ1LS4xNDk5LS4wMjczLS4zNjgtLjAyNzMtLjE0MzEgMC0uMzA2Ny4wMjA1LS4xNTY3LjAyMDQtLjI5My4wODg2LS4xMjk1LjA2MTMtLjIxODEuMTc3Mi0uMDg4Ni4xMDktLjA4ODYuMjkzIDAgLjM0MDguMjE4LjQ3NzEuMjE4MS4xMjk1LjU5My4xMjk1em0tLjA1NDQtMy4xNzZxLjM4MTYgMCAuNjQwNi4xMDIzLjI2NTguMDk1NC40MjI2LjI3OTQuMTYzNi4xNzcyLjIzMTcuNDI5NC4wNjgyLjI0NTQuMDY4Mi41NDUydjIuMjE1cS0uMDgxOC4wMTM2LS4yMzE4LjA0MS0uMTQzLjAyMDMtLjMyNzEuMDQwOC0uMTg0LjAyMDQtLjQwMjEuMDM0LS4yMTEzLjAyMDUtLjQyMjYuMDIwNS0uMjk5OSAwLS41NTItLjA2MTMtLjI1MjItLjA2MTQtLjQzNjItLjE5MDgtLjE4NC0uMTM2My0uMjg2My0uMzU0NC0uMTAyMi0uMjE4MS0uMTAyMi0uNTI0OCAwLS4yOTMuMTE1OS0uNTA0NC4xMjI2LS4yMTEzLjMyNzEtLjM0MDcuMjA0NS0uMTI5NS40NzctLjE5MDkuMjcyNy0uMDYxMy41NzI2LS4wNjEzLjA5NTQgMCAuMTk3Ni4wMTM2LjEwMjMuMDA2OC4xOTA5LjAyNzMuMDk1NC4wMTM2LjE2MzUuMDI3Mi4wNjgyLjAxMzcuMDk1NC4wMjA1di0uMTc3MnEwLS4xNTY4LS4wMzQtLjMwNjctLjAzNDEtLjE1NjgtLjEyMjctLjI3MjYtLjA4ODYtLjEyMjctLjI0NTQtLjE5MDktLjE1LS4wNzUtLjM5NTMtLjA3NS0uMzEzNSAwLS41NTIuMDQ3OC0uMjMxOC4wNDA5LS4zNDc2LjA4ODZsLS4wNzUtLjUyNDhxLjEyMjctLjA1NDUuNDA5LS4xMDIzLjI4NjItLjA1NDUuNjIwMS0uMDU0NXonIGFyaWEtbGFiZWw9J0kgYW0gYScvPjxwYXRoIGQ9J001MS4zNzY2IDE4LjA2MDdxMS42NDA0IDAgMi41MTg4LjU4MjEuODc4NC41NzE1Ljg3ODQgMS44ODM4IDAgMS4zMjMtLjg4OSAxLjkxNTYtLjg4OS41ODItMi41NC41ODJoLS41MTg2djIuNDU1NGgtMS42NTF2LTcuMjI4NHEuNTM5OC0uMTA1OCAxLjE0My0uMTQ4Mi42MDMzLS4wNDIzIDEuMDU4My0uMDQyM3ptLjEwNTggMS40MDc2cS0uMTc5OSAwLS4zNTk4LjAxMDYtLjE2OTMuMDEwNi0uMjk2My4wMjEydjIuMTE2N2guNTE4NXEuODU3MyAwIDEuMjkxMi0uMjMyOS40MzQtLjIzMjguNDM0LS44Njc4IDAtLjMwNjktLjExNjUtLjUwOC0uMTA1OC0uMjAxLS4zMTc1LS4zMTc1LS4yMDEtLjEyNy0uNDk3NC0uMTY5My0uMjk2My0uMDUzLS42NTYxLS4wNTN6bTcuNzU3MiAxLjg0MTRxLS4yMTE3LS4wNTI5LS40OTc0LS4xMDU4LS4yODU4LS4wNjM1LS42MTM5LS4wNjM1LS4xNDgxIDAtLjM1OTguMDMxNy0uMjAxLjAyMTItLjMwNy4wNTN2NC4yNTQ1aC0xLjU3NjhWMjAuMjA5cS40MjMzLS4xNDgyLjk5NDgtLjI3NTIuNTgyMS0uMTM3NiAxLjI5MTItLjEzNzYuMTI3IDAgLjMwNy4wMjEyLjE3OTkuMDEwNi4zNTk4LjA0MjMuMTc5OS4wMjEyLjM1OTguMDYzNS4xOC4wMzE4LjMwNy4wODQ3em0zLjEzMjcgMy4wNjkycS4yMzI4IDAgLjQ0NDUtLjAxMDZ0LjMzODctLjAzMTd2LTEuMTk1OXEtLjA5NTMtLjAyMTItLjI4NTgtLjA0MjMtLjE5MDUtLjAyMTItLjM0OTItLjAyMTItLjIyMjMgMC0uNDIzNC4wMzE3LS4xOTA1LjAyMTItLjMzODYuMDk1M3QtLjIzMjkuMjAxcS0uMDg0Ni4xMjctLjA4NDYuMzE3NiAwIC4zNzA0LjI0MzQuNTE4Ni4yNTQuMTM3NS42ODc5LjEzNzV6bS0uMTI3LTQuNjE0M3EuNjk4NSAwIDEuMTY0Mi4xNTg4LjQ2NTYuMTU4Ny43NDA4LjQ1NS4yODU4LjI5NjQuNDAyMi43MTk3dC4xMTY0Ljk0MnYzLjI4MDdxLS4zMzg3LjA3NDEtLjk0Mi4xNjk0LS42MDMyLjEwNTgtMS40NjA0LjEwNTgtLjUzOTggMC0uOTg0My0uMDk1My0uNDMzOS0uMDk1Mi0uNzUxNC0uMzA2OS0uMzE3NS0uMjIyMi0uNDg2OC0uNTcxNS0uMTY5My0uMzQ5Mi0uMTY5My0uODU3MiAwLS40ODY5LjE5MDUtLjgyNTUuMjAxLS4zMzg3LjUyOTEtLjUzOTguMzI4MS0uMjAxLjc1MTQtLjI4NTcuNDIzNC0uMDk1My44Nzg0LS4wOTUzLjMwNyAwIC41Mzk4LjAzMTguMjQzNC4wMjExLjM5MTYuMDYzNXYtLjE0ODJxMC0uNDAyMi0uMjQzNS0uNjQ1NnQtLjg0NjYtLjI0MzRxLS40MDIyIDAtLjc5MzguMDYzNS0uMzkxNS4wNTMtLjY3NzMuMTU4N2wtLjIwMS0xLjI3cS4xMzc1LS4wNDIzLjMzODYtLjA4NDYuMjExNy0uMDUzLjQ1NS0uMDg0Ny4yNDM1LS4wNDIzLjUwOC0uMDYzNS4yNzUyLS4wMzE3LjU1MDQtLjAzMTd6bTMuNTg3NyAyLjkzMTZxMC0uNjAzMi4xOTA1LTEuMTMyNC4yMDEtLjUzOTcuNTcxNS0uOTMxMy4zNzA0LS40MDIyLjg5OTYtLjYzNS41MjkxLS4yMzI4IDEuMjA2NS0uMjMyOC40NDQ1IDAgLjgxNDkuMDg0Ni4zNzA0LjA3NDEuNzE5Ni4yMjIzbC0uMzI4IDEuMjU5NHEtLjIyMjMtLjA4NDctLjQ4NjktLjE0ODItLjI2NDUtLjA2MzUtLjU5MjYtLjA2MzUtLjY5ODUgMC0xLjA0NzcuNDM0LS4zMzg3LjQzMzktLjMzODcgMS4xNDMgMCAuNzUxMy4zMTc1IDEuMTY0MS4zMjguNDEyOCAxLjEzMjQuNDEyOC4yODU4IDAgLjYxMzgtLjA1My4zMjgxLS4wNTI5LjYwMzMtLjE2OTNsLjIyMjIgMS4yOTEycS0uMjc1MS4xMTY1LS42ODc5LjIwMTEtLjQxMjcuMDg0Ny0uOTEwMS4wODQ3LS43NjIgMC0xLjMxMjMtLjIyMjMtLjU1MDQtLjIzMjgtLjkxMDItLjYyNDQtLjM0OTMtLjM5MTYtLjUxODYtLjkyMDctLjE1ODctLjUzOTgtLjE1ODctMS4xNjQyem01LjUwMzMtNC4xNjk4IDEuNTc2OS0uMjU0djEuNjQwNGgxLjg5NDR2MS4zMTIzaC0xLjg5NDR2MS45NThxMCAuNDk3My4xNjkzLjc5MzcuMTguMjk2My43MDkxLjI5NjMuMjU0IDAgLjUxODYtLjA0MjMuMjc1MS0uMDUzLjQ5NzQtLjEzNzZsLjIyMjMgMS4yMjc3cS0uMjg1OC4xMTY0LS42MzUuMjAxLS4zNDkzLjA4NDctLjg1NzMuMDg0Ny0uNjQ1NiAwLTEuMDY4OS0uMTY5My0uNDIzMy0uMTc5OS0uNjc3My0uNDg2OC0uMjU0LS4zMTc1LS4zNTk5LS43NjItLjA5NTItLjQ0NDUtLjA5NTItLjk4NDN6bTYuMzI4OCA2Ljk1MzJoLTEuNTc3di01LjU2NjhoMS41Nzd6bS4xNDgyLTcuMTc1NXEwIC40MzQtLjI4NTguNjg4LS4yNzUyLjI0MzQtLjY1NjIuMjQzNHQtLjY2NjctLjI0MzVxLS4yNzUyLS4yNTQtLjI3NTItLjY4NzkgMC0uNDMzOS4yNzUyLS42NzczLjI4NTgtLjI1NC42NjY3LS4yNTR0LjY1NjIuMjU0cS4yODU4LjI0MzQuMjg1OC42Nzczem0xLjI4MDYuMjIyMyAxLjU3NjktLjI1NHYxLjY0MDRoMS44OTQ0djEuMzEyM2gtMS44OTQ0djEuOTU3OXEwIC40OTc0LjE2OTMuNzkzNy4xOC4yOTY0LjcwOS4yOTY0LjI1NCAwIC41MTg2LS4wNDI0LjI3NTItLjA1MjkuNDk3NS0uMTM3NmwuMjIyMiAxLjIyNzdxLS4yODU3LjExNjUtLjYzNS4yMDExLS4zNDkyLjA4NDctLjg1NzIuMDg0Ny0uNjQ1NiAwLTEuMDY5LS4xNjkzLS40MjMzLS4xOC0uNjc3My0uNDg2OS0uMjU0LS4zMTc1LS4zNTk4LS43NjItLjA5NTItLjQ0NDUtLjA5NTItLjk4NDJ6bTYuMzI4OCA2Ljk1MzJoLTEuNTc3di01LjU2NjhoMS41Nzd6bS4xNDgxLTcuMTc1NXEwIC40MzM5LS4yODU3LjY4NzktLjI3NTIuMjQzNC0uNjU2Mi4yNDM0dC0uNjY2Ny0uMjQzNHEtLjI3NTItLjI1NC0uMjc1Mi0uNjg4IDAtLjQzMzguMjc1Mi0uNjc3My4yODU3LS4yNTQuNjY2Ny0uMjU0dC42NTYyLjI1NHEuMjg1Ny4yNDM1LjI4NTcuNjc3NHptNi41NDA1IDQuMzgxNXEwIC42NTYxLS4xOTA1IDEuMjA2NS0uMTkwNS41Mzk3LS41NTAzLjkzMTMtLjM1OTguMzgxLS44Njc4LjU5MjctLjQ5NzUuMjExNi0xLjEyMTguMjExNi0uNjEzOSAwLTEuMTIxOC0uMjExNi0uNDk3NS0uMjExNy0uODU3My0uNTkyNy0uMzU5OC0uMzkxNi0uNTYwOS0uOTMxMy0uMjAxLS41NTA0LS4yMDEtMS4yMDY1IDAtLjY1NjIuMjAxLTEuMTk2LjIxMTctLjUzOTcuNTcxNS0uOTIwNy4zNzA0LS4zODEuODY3OC0uNTkyNi41MDgtLjIxMTcgMS4xMDA3LS4yMTE3LjYwMzMgMCAxLjEwMDcuMjExNy41MDguMjExNi44Njc5LjU5MjYuMzU5OC4zODEuNTYwOS45MjA4LjIwMS41Mzk3LjIwMSAxLjE5NTl6bS0xLjYwODcgMHEwLS43MzAzLS4yOTYzLTEuMTQzLS4yODU4LS40MjM0LS44MjU1LS40MjM0dC0uODM2LjQyMzRxLS4yOTY0LjQxMjctLjI5NjQgMS4xNDMgMCAuNzMwMi4yOTYzIDEuMTY0Mi4yOTYzLjQyMzMuODM2MS40MjMzdC44MjU1LS40MjMzcS4yOTYzLS40MzQuMjk2My0xLjE2NDJ6bTIuODI1Ny0yLjU4MjNxLjQwMjItLjExNjQgMS4wMzcyLS4yMTE3LjYzNS0uMTA1OCAxLjMzMzUtLjEwNTguNzA5MSAwIDEuMTc0Ny4xOTA1LjQ3NjMuMTc5OS43NTE0LjUxODYuMjc1Mi4zMzg2LjM5MTYuODA0My4xMTY0LjQ2NTYuMTE2NCAxLjAzNzJ2My4xNDMyaC0xLjU3Njl2LTIuOTUyN3EwLS43NjItLjIwMS0xLjA3OTUtLjIwMTEtLjMxNzUtLjc1MTQtLjMxNzUtLjE2OTQgMC0uMzU5OS4wMjEyLS4xOTA1LjAxMDUtLjMzODcuMDMxN3Y0LjI5NjhoLTEuNTc2OHptNS45NjkgMi42MzUycTAtLjc0MDkuMjIyMy0xLjI5MTIuMjMyOC0uNTYxLjYwMzItLjkzMTQuMzcwNC0uMzcwNC44NDY3LS41NjA5LjQ4NjgtLjE5MDUuOTk0OC0uMTkwNSAxLjE4NTMgMCAxLjg3MzIuNzMwMy42ODguNzE5Ni42ODggMi4xMjcyIDAgLjEzNzYtLjAxMDcuMzA2OS0uMDEwNi4xNTg4LS4wMjEyLjI4NThoLTMuNTc3MnEuMDUzLjQ4NjguNDU1MS43NzI1LjQwMjIuMjg1OCAxLjA3OTUuMjg1OC40MzQgMCAuODQ2Ny0uMDc0MS40MjMzLS4wODQ3LjY4NzktLjIwMWwuMjExNyAxLjI4MDVxLS4xMjcuMDYzNS0uMzM4Ny4xMjd0LS40NzYzLjEwNTlxLS4yNTQuMDUyOS0uNTUwMy4wODQ2dC0uNTkyNy4wMzE4cS0uNzUxNCAwLTEuMzEyMy0uMjIyMy0uNTUwMi0uMjIyMi0uOTIwNy0uNjAzMi0uMzU5OC0uMzkxNi0uNTM5Ny0uOTIwOC0uMTY5My0uNTI5MS0uMTY5My0xLjE0M3ptMy43MDQyLS42MDMzcS0uMDEwNi0uMjAxLS4wNzQtLjM5MTYtLjA1My0uMTkwNS0uMTgtLjMzODYtLjExNjQtLjE0ODItLjMwNjktLjI0MzQtLjE4LS4wOTUzLS40NTUtLjA5NTMtLjI2NDcgMC0uNDU1Mi4wOTUzLS4xOTA1LjA4NDYtLjMxNzUuMjMyOHQtLjIwMS4zNDkycS0uMDYzNS4xOTA1LS4wOTUzLjM5MTZ6bTYuMDk2LS44MjU1cS0uMjExNi0uMDUyOS0uNDk3NC0uMTA1OC0uMjg1Ny0uMDYzNS0uNjEzOC0uMDYzNS0uMTQ4MiAwLS4zNTk5LjAzMTctLjIwMS4wMjEyLS4zMDY5LjA1M3Y0LjI1NDVoLTEuNTc2OVYyMC4yMDlxLjQyMzQtLjE0ODIuOTk0OS0uMjc1Mi41ODItLjEzNzYgMS4yOTEyLS4xMzc2LjEyNyAwIC4zMDY5LjAyMTIuMTc5OS4wMTA2LjM1OTguMDQyMy4xOC4wMjEyLjM1OTguMDYzNS4xOC4wMzE4LjMwNy4wODQ3em05LjE5Ny0zLjE2NDR2MS40MDc2aC0yLjIxMnY1LjkyNjZoLTEuNjUxVjE5LjU1M2gtMi4yMTE5di0xLjQwNzZ6bS0uMTA2IDQuNTkzMnEwLS43NDA4LjIyMjMtMS4yOTEyLjIzMjktLjU2MDkuNjAzMy0uOTMxMy4zNzA0LS4zNzA0Ljg0NjYtLjU2MS40ODY5LS4xOTA0Ljk5NDktLjE5MDQgMS4xODUzIDAgMS44NzMyLjczMDIuNjg3OS43MTk3LjY4NzkgMi4xMjcyIDAgLjEzNzYtLjAxMDYuMzA3LS4wMTA2LjE1ODctLjAyMTIuMjg1N2gtMy41NzcycS4wNTI5LjQ4NjguNDU1Ljc3MjYuNDAyMi4yODU3IDEuMDc5Ni4yODU3LjQzMzkgMCAuODQ2Ni0uMDc0LjQyMzQtLjA4NDcuNjg4LS4yMDExbC4yMTE2IDEuMjgwNnEtLjEyNy4wNjM1LS4zMzg2LjEyNy0uMjExNy4wNjM1LS40NzYzLjEwNTgtLjI1NC4wNTMtLjU1MDMuMDg0N3QtLjU5MjcuMDMxN3EtLjc1MTQgMC0xLjMxMjMtLjIyMjItLjU1MDMtLjIyMjMtLjkyMDctLjYwMzMtLjM1OTktLjM5MTYtLjUzOTgtLjkyMDctLjE2OTMtLjUyOTItLjE2OTMtMS4xNDN6bTMuNzA0My0uNjAzMnEtLjAxMDYtLjIwMTEtLjA3NDEtLjM5MTYtLjA1My0uMTkwNS0uMTgtLjMzODctLjExNjMtLjE0ODEtLjMwNjgtLjI0MzQtLjE4LS4wOTUyLS40NTUxLS4wOTUyLS4yNjQ2IDAtLjQ1NTEuMDk1Mi0uMTkwNS4wODQ3LS4zMTc1LjIzMjgtLjEyNy4xNDgyLS4yMDEuMzQ5My0uMDYzNi4xOTA1LS4wOTUzLjM5MTZ6bTIuNDc2NS41NjA5cTAtLjYwMzMuMTkwNS0xLjEzMjQuMjAxLS41Mzk4LjU3MTUtLjkzMTMuMzcwNC0uNDAyMi44OTk2LS42MzUuNTI5MS0uMjMyOSAxLjIwNjUtLjIzMjkuNDQ0NSAwIC44MTQ5LjA4NDcuMzcwNC4wNzQuNzE5Ni4yMjIzbC0uMzI4IDEuMjU5NHEtLjIyMjMtLjA4NDctLjQ4NjktLjE0ODItLjI2NDUtLjA2MzUtLjU5MjYtLjA2MzUtLjY5ODUgMC0xLjA0NzcuNDM0LS4zMzg3LjQzMzgtLjMzODcgMS4xNDMgMCAuNzUxMy4zMTc1IDEuMTY0MS4zMjguNDEyOCAxLjEzMjQuNDEyOC4yODU3IDAgLjYxMzgtLjA1My4zMjgxLS4wNTI5LjYwMzMtLjE2OTNsLjIyMjIgMS4yOTEycS0uMjc1MS4xMTY0LS42ODc5LjIwMS0uNDEyNy4wODQ4LS45MTAyLjA4NDgtLjc2MiAwLTEuMzEyMy0uMjIyMy0uNTUwMy0uMjMyOC0uOTEwMS0uNjI0NC0uMzQ5My0uMzkxNi0uNTE4Ni0uOTIwOC0uMTU4OC0uNTM5Ny0uMTU4OC0xLjE2NDJ6bTUuNTU2MiAyLjc4MzRWMTcuNTIxbDEuNTc2OS0uMjU0djIuNjY3cS4xNTg3LS4wNTMuNDAyMi0uMDk1My4yNTQtLjA1MjkuNDg2OC0uMDUyOS42NzczIDAgMS4xMjE4LjE5MDUuNDU1LjE4LjcxOTcuNTE4Ni4yNzUxLjMzODcuMzgxLjgwNDMuMTE2NC40NjU3LjExNjQgMS4wMzcydjMuMTQzMmgtMS41NzdWMjIuNTI3cTAtLjc2Mi0uMjAxLTEuMDc5NS0uMTkwNS0uMzE3NS0uNzE5Ny0uMzE3NS0uMjExNiAwLS40MDIxLjA0MjQtLjE4LjAzMTctLjMyODEuMDc0djQuMjMzM3ptNi4yMzM2LTUuMzc2M3EuNDAyMS0uMTE2NCAxLjAzNzItLjIxMTcuNjM1LS4xMDU4IDEuMzMzNS0uMTA1OC43MDkgMCAxLjE3NDcuMTkwNS40NzYyLjE4Ljc1MTQuNTE4Ni4yNzUyLjMzODYuMzkxNi44MDQzdC4xMTY0IDEuMDM3MnYzLjE0MzJoLTEuNTc2OVYyMi41MjdxMC0uNzYyLS4yMDEtMS4wNzk1dC0uNzUxNS0uMzE3NXEtLjE2OTMgMC0uMzU5OC4wMjEyLS4xOTA1LjAxMDYtLjMzODcuMDMxN3Y0LjI5NjhoLTEuNTc2OXptMTEuNDQxIDIuNTgyM3EwIC42NTYyLS4xOTA1IDEuMjA2NS0uMTkwNS41Mzk3LS41NTAzLjkzMTMtLjM1OTkuMzgxLS44Njc5LjU5MjctLjQ5NzQuMjExNy0xLjEyMTguMjExNy0uNjEzOCAwLTEuMTIxOC0uMjExNy0uNDk3NC0uMjExNy0uODU3Mi0uNTkyNy0uMzU5OS0uMzkxNi0uNTYxLS45MzEzLS4yMDEtLjU1MDMtLjIwMS0xLjIwNjUgMC0uNjU2Mi4yMDEtMS4xOTU5LjIxMTctLjUzOTguNTcxNi0uOTIwOC4zNzA0LS4zODEuODY3OC0uNTkyNi41MDgtLjIxMTcgMS4xMDA3LS4yMTE3LjYwMzIgMCAxLjEwMDcuMjExNy41MDguMjExNy44Njc4LjU5MjYuMzU5OS4zODEuNTYxLjkyMDguMjAxLjUzOTcuMjAxIDEuMTk1OXptLTEuNjA4NyAwcTAtLjczMDMtLjI5NjMtMS4xNDMtLjI4NTgtLjQyMzMtLjgyNTUtLjQyMzN0LS44MzYxLjQyMzNxLS4yOTY0LjQxMjctLjI5NjQgMS4xNDMgMCAuNzMwMi4yOTY0IDEuMTY0Mi4yOTYzLjQyMzMuODM2LjQyMzN0LjgyNTYtLjQyMzNxLjI5NjMtLjQzNC4yOTYzLTEuMTY0MnptNS4wNDgyIDIuODk5OHEtLjY4OC0uMDEwNi0xLjEyMTgtLjE0ODItLjQyMzMtLjEzNzYtLjY3NzMtLjM4MS0uMjQzNS0uMjU0LS4zMzg3LS42MDMyLS4wODQ3LS4zNTk5LS4wODQ3LS44MDQ0VjE3LjUyMWwxLjU3NjktLjI1NHY2LjA2NDJxMCAuMjExNy4wMzE3LjM4MS4wMzE3LjE2OTQuMTE2NC4yODU4LjA5NTIuMTE2NC4yNjQ2LjE5MDUuMTY5My4wNzQuNDU1LjA5NTJ6bTYuMzI4OC0yLjg5OThxMCAuNjU2Mi0uMTkwNSAxLjIwNjUtLjE5MDUuNTM5Ny0uNTUwMy45MzEzLS4zNTk5LjM4MS0uODY3OS41OTI3LS40OTc0LjIxMTctMS4xMjE4LjIxMTctLjYxMzggMC0xLjEyMTgtLjIxMTctLjQ5NzQtLjIxMTctLjg1NzItLjU5MjctLjM1OTktLjM5MTYtLjU2MS0uOTMxMy0uMjAxLS41NTAzLS4yMDEtMS4yMDY1IDAtLjY1NjIuMjAxLTEuMTk1OS4yMTE3LS41Mzk4LjU3MTYtLjkyMDguMzcwNC0uMzgxLjg2NzgtLjU5MjYuNTA4LS4yMTE3IDEuMTAwNy0uMjExNy42MDMyIDAgMS4xMDA3LjIxMTcuNTA4LjIxMTcuODY3OC41OTI2LjM1OTkuMzgxLjU2MS45MjA4LjIwMS41Mzk3LjIwMSAxLjE5NTl6bS0xLjYwODcgMHEwLS43MzAzLS4yOTYzLTEuMTQzLS4yODU4LS40MjMzLS44MjU1LS40MjMzdC0uODM2MS40MjMzcS0uMjk2NC40MTI3LS4yOTY0IDEuMTQzIDAgLjczMDIuMjk2NCAxLjE2NDIuMjk2My40MjMzLjgzNi40MjMzdC44MjU2LS40MjMzcS4yOTYzLS40MzQuMjk2My0xLjE2NDJ6bTQuMTY5OC0uMTY5M3EwIDEuMzIyOSAxLjA2ODkgMS4zMjI5LjI0MzQgMCAuNDU1LS4wNjM1LjIxMTctLjA2MzUuMzYtLjE0ODJ2LTIuNTE4OHEtLjExNjUtLjAyMTItLjI3NTMtLjAzMTgtLjE1ODctLjAyMTEtLjM3MDQtLjAyMTEtLjYyNDQgMC0uOTMxMy40MTI3LS4zMDcuNDEyOC0uMzA3IDEuMDQ3N3ptMy40NjA3IDIuMjY0OHEwIDEuMzY1Mi0uNjk4NSAyLjAyMTQtLjY4OC42NjY3LTIuMTM3OC42NjY3LS41MDggMC0xLjAxNi0uMDk1Mi0uNTA4LS4wODQ3LS45NDItLjIzMjlsLjI3NTItMS4zMjI5cS4zNzA1LjE0ODIuNzcyNi4yMzI5LjQxMjguMDg0Ni45MzE0LjA4NDYuNjc3MyAwIC45NTI1LS4yOTYzLjI4NTctLjI5NjMuMjg1Ny0uNzYydi0uMjAxcS0uMjU0LjExNjMtLjUyOTIuMTc5OC0uMjY0NS4wNTMtLjU4Mi4wNTMtMS4xNTM2IDAtMS43Njc0LS42Nzc0LS42MTM5LS42ODc5LS42MTM5LTEuOTE1NiAwLS42MTM4LjE5MDUtMS4xMTEyLjE5MDUtLjUwOC41NTAzLS44Njc4LjM3MDUtLjM1OTguODk5Ni0uNTUwMy41MjkyLS4yMDExIDEuMTk2LS4yMDExLjI4NTcgMCAuNTgyLjAzMTcuMzA3LjAyMTIuNjAzMy4wNjM1LjI5NjMuMDQyNC41NjA5LjEwNTkuMjc1MS4wNTI5LjQ4NjguMTE2NHptMy4wNTg2LjY5ODVoLTEuNTc3di01LjU2NjhoMS41Nzd6bS4xNDgyLTcuMTc1NXEwIC40MzM5LS4yODU4LjY4NzktLjI3NTIuMjQzNC0uNjU2Mi4yNDM0dC0uNjY2Ny0uMjQzNHEtLjI3NTItLjI1NC0uMjc1Mi0uNjg4IDAtLjQzMzkuMjc1Mi0uNjc3My4yODU3LS4yNTQuNjY2Ny0uMjU0dC42NTYyLjI1NHEuMjg1OC4yNDM1LjI4NTguNjc3NHptMi45MzE2IDYuMDQzcS40MzM5IDAgLjYxMzgtLjA4NDYuMTc5OS0uMDg0Ny4xNzk5LS4zMjggMC0uMTkwNi0uMjMyOC0uMzI4Mi0uMjMyOS0uMTQ4MS0uNzA5MS0uMzI4LS4zNzA0LS4xMzc2LS42NzczLS4yODU4LS4yOTY0LS4xNDgyLS41MDgtLjM0OTItLjIxMTctLjIxMTctLjMyODEtLjQ5NzV0LS4xMTY0LS42ODc5cTAtLjc4MzEuNTgyLTEuMjM4Mi41ODIxLS40NTUgMS41OTgxLS40NTUuNTA4IDAgLjk3MzcuMDk1Mi40NjU3LjA4NDcuNzQwOC4xOTA1bC0uMjc1MSAxLjIyNzdxLS4yNzUyLS4wOTUzLS42MDMzLS4xNjkzLS4zMTc1LS4wNzQxLS43MTk2LS4wNzQxLS43NDA5IDAtLjc0MDkuNDEyNyAwIC4wOTUzLjAzMTguMTY5NC4wMzE3LjA3NC4xMjcuMTQ4MS4wOTUyLjA2MzUuMjU0LjE0ODIuMTY5NC4wNzQuNDIzNC4xNjkzLjUxODUuMTkwNS44NTcyLjM4MS4zMzg3LjE4LjUyOTIuNDAyMi4yMDEuMjExNy4yNzUxLjQ3NjIuMDg0Ny4yNjQ2LjA4NDcuNjEzOSAwIC44MjU1LS42MjQ0IDEuMjQ4OC0uNjEzOC40MjMzLTEuNzQ2Mi40MjMzLS43NDA4IDAtMS4yMzgyLS4xMjctLjQ4NjgtLjEyNy0uNjc3My0uMjExN2wuMjY0Ni0xLjI4MDZxLjQwMjEuMTU4OC44MjU1LjI1NC40MjMzLjA4NDcuODM2LjA4NDd6bTMuNDgxOS01LjgyMDcgMS41NzY5LS4yNTR2MS42NDA0aDEuODk0NHYxLjMxMjNoLTEuODk0NHYxLjk1NzlxMCAuNDk3NC4xNjkzLjc5MzcuMTc5OS4yOTYzLjcwOS4yOTYzLjI1NCAwIC41MTg2LS4wNDIzLjI3NTItLjA1MjkuNDk3NS0uMTM3NmwuMjIyMiAxLjIyNzdxLS4yODU3LjExNjUtLjYzNS4yMDExLS4zNDkyLjA4NDctLjg1NzIuMDg0Ny0uNjQ1NiAwLTEuMDY5LS4xNjkzLS40MjMzLS4xOC0uNjc3My0uNDg2OS0uMjU0LS4zMTc1LS4zNTk4LS43NjItLjA5NTMtLjQ0NDUtLjA5NTMtLjk4NDJ6JyBhcmlhLWxhYmVsPSdQcmFjdGl0aW9uZXIgVGVjaG5vbG9naXN0Jy8+PC9zdmc+"> </a></p>
</div>
]]>
</content>
</entry><entry>
<title>Understanding Waveshare's E-Paper C Drivers</title>
<link href="https://rosia.me/UnderstandingWavesharesEinkDrivers.html"/>
<id>https://rosia.me/UnderstandingWavesharesEinkDrivers.html</id>
<updated>2025-09-16T22:13:47Z</updated>
<content type="html">
<![CDATA[
<h1>Understanding Waveshare's E-Paper C Drivers</h1>
<p>Waveshare don't explain their drivers, and as far as I can tell no one online has either. The drivers themselves aren't too complicated, you could probably work them out within half an hour or so, but that's no reason not to explain it a bit and save someone that time.</p>
<h1>What are we given?</h1>
<p>The C drivers aren't too wild, every device has a similar set of methods:</p>
<ul>
<li>Initialise the device</li>
<li>Display given image</li>
<li>Display partial image at coordinates</li>
<li>Clear screen</li>
<li>Sleep</li>
</ul>
<p>Any more complex behaviour is driven by our code, altering an image and eventually drawing it to the screen. Luckily, waveshare have made a set of helper tools, the main two being GUI_BMP and GUI_Paint. GUI_BMP is relatively simple, it takes a bmp file and loads it in the correct format for us to just display directly using the display method. The Paint toolset is worth describing in a bit more detail.</p>
<h1>GUI_Paint</h1>
<p>GUI_Paint is a small set of tools that let us alter and create images before we push them to the device. Its main focus is on a struct called Paint, this holds a pointer to your image (set with Paint_SelectImage()), subsequently called paint methods will alter this data, adding text, shapes and bitmaps to it. You can then access this and draw it through the original pointer you gave the SelectImage method, it seems to always directly edit the image data so there's no need to apply it, just call your devices display method on that pointer.</p>
<p>GUI_Paint also offers the ability to rotate, scale and mirror the image, the methods for setting mirror, scale and rotation don't actually do anything other than set a value in the Paint struct and I haven't found any method to apply those settings to a given image, flipping it or such.
The one thing I have found is that if you call a method called Paint_NewImage() (this fills the image buffer with blank memory and resets it for use), it will use the rotate data to swap the width and height but that's it.</p>
<p>The best way to learn this library, as with all C, is to give the header file a look and get a summary of all the methods, hopefully this overview will give you a head-start on understanding what you're reading though. The file is in lib/GUI/GUI_Paint.h.</p>
<h1>A little more detail on the general driver methods</h1>
<p>As I said, the drivers are pretty bare-bones, essentially just letting us write images to the screen. Its worth going a little more in-depth though, we have an extra file not mentioned yet, this is DEV_Config. DEV_Config uses a few other files and essentially sets up our computer to communicate with the display, it works out what gpio drivers our device has and sets ups its methods to use whatever they can. This is something definitely worth calling as soon as your program starts up, before even calling our normal Init() method.</p>
<p>With that in-mind here's a list of actual methods we're given:</p>
<p>EPD_7in5_V2.h (or any other driver):</p>
<ul>
<li>EPD_7IN5_V2_Init(), sets up device parameters</li>
<li>EPD_7IN5_V2_Init_Fast(), ¯\_(ツ)_/¯</li>
<li>EPD_7IN5_V2_Init_Part(), sets up device to do partial refresh, can be called anytime before partial refresh is used aka doesn't have to be at the start with Init()</li>
<li>EPD_7IN5_V2_Clear(), draws white image to screen</li>
<li>EPD_7IN5_V2_ClearBlack(), draws black image to screen</li>
<li>EPD_7IN5_V2_Display(), displays given bytes</li>
<li>EPD_7IN5_V2_Display_Part(), draws an image at a given location</li>
<li>EPD_7IN5_V2_Sleep(), puts the screen in deep sleep, essentially a way to turn it off and make it take less power while still having it plugged into power.</li>
</ul>
<p>DEV_Config.h:</p>
<ul>
<li>DEV_Module_Init(), sets up spi communication for your computer, checking what drivers you have and using what it can</li>
<li>DEV_Module_Exit(), essentially closes anything its opened</li>
</ul>
]]>
</content>
</entry><entry>
<title>Things For The Outside</title>
<link href="https://rosia.me/ThingsForOutdoors.html"/>
<id>https://rosia.me/ThingsForOutdoors.html</id>
<updated>2026-02-25T14:00:35Z</updated>
<content type="html">
<![CDATA[
<h1>Things For The Outside</h1>
<blockquote>
<p>This is half written atm, expect missing images and half written paragrahps</p>
</blockquote>
<h2>Tools</h2>
<ul>
<li><a href="https://ati.woodlandtrust.org.uk/tree-search/">Woodland Trust's Ancient Tree Index</a>, find a really cool tree to sit under</li>
<li><a href="https://fallingfruit.org/">Falling Fruit, urban food scavenging map</a>, forage for things</li>
<li><a href="https://urbexology.com/">Urbexology</a>, explore some abandoned spaces (its cooler if you don't use this and instead you're just aware of your local spaces)</li>
<li><a href="https://calendarcustoms.com/">Calendar Customs</a>, go to interesting local celebrations</li>
</ul>
<h2>Foraging</h2>
<p>Foraging is great! Its a really good way to feel a bit more connected with your local environment, local history and do some more exciting cooking.</p>
<p>I've got notes written up on my <a href="ForagingNotes.html">Foraging Notes Page</a></p>
<p>A few examples from there are elderflower, which is everywhere in Britain; Linden/Lime trees that can be used to make tea or chocolate; Wild garlic obviously and also Burdock that has a carrot type root you can eat!</p>
<h2>Reading</h2>
<ul>
<li><a href="https://taylor.town/oh">Offensive Horticulture</a></li>
</ul>
]]>
</content>
</entry><entry>
<title>Linux Troubleshooting</title>
<link href="https://rosia.me/LinuxTroubleshooting.html"/>
<id>https://rosia.me/LinuxTroubleshooting.html</id>
<updated>2026-06-05T16:03:26Z</updated>
<content type="html">
<![CDATA[
<h1>Linux Troubleshooting</h1>
<p>I've been using Linux for a while and I pretty regularly find myself hitting issues I know I've hit before but not remembering the solution and have to go slogging through stack-overflow to find it again. I now have this, this is a list of all the issues I hit and how I resolved them. For future me but also maybe you? :)</p>
<h2>Networking</h2>
<h3>Unable to connect to internet but able to connect to local network</h3>
<p>Try ping googles dns server at 8.8.8.8, if this doesn't work then problem is outside your pc, if this does work but you cant get to other sites then check /etc/resolv.conf. This file holds pointers to dns servers, it might be wrong?</p>
<h2>Alpine Linux</h2>
<h3>Setting up apk repos</h3>
<p>Go to /etc/apk/repositories, add extra ones there. put @name before it to give it a name so you can specify you want to use that repository:</p>
<pre><code>echo &quot;@testing https://reposito.ry&quot; &gt; /etc/apk/repositories
apk add package@testing
</code></pre>
<h2>Kernel Shenanigans</h2>
<h3>Removing modules</h3>
<p>You can blacklist kernel modules in /etc/modprobe.d/blacklist.conf</p>
<pre><code>blacklist modulename
</code></pre>
<h2>Helix Editor</h2>
<h3>Clangd wont find libraries</h3>
<p>Clangd only uses info from some places so cant know everything, you can add a CMake command to let it export build info then clangd can use this</p>
<pre><code>set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
</code></pre>
<h3>Helix wont do syntax highlighting</h3>
<p>Sometimes helix will come with its grammars unbuilt, or the grammars will have been deleted. Fetch and build them and this should fix it.</p>
<pre><code>  hx -g fetch
  hx -g build
</code></pre>
]]>
</content>
</entry><entry>
<title>External Recipes</title>
<link href="https://rosia.me/ExternalRecipes.html"/>
<id>https://rosia.me/ExternalRecipes.html</id>
<updated>2026-06-05T15:23:38Z</updated>
<content type="html">
<![CDATA[
<h1>External Recipes</h1>
<p>A collection of recipes I like and use.</p>
<h2>Recipes</h2>
<ul>
<li><a href="https://www.lahbco.com/dips/lemongarlichummus">Great hummus</a></li>
<li><a href="https://madeleineolivia.co.uk/butternut-squash-mushroom-pie/">Butternut Squash Mushroom And Pesto Pie</a></li>
<li><a href="https://www.recipetineats.com/red-vietnamese-fried-rice/">Tomato Fried Rice</a>, this works well with chinese cooking wine instead of fish cauce, add tempeh and tenderstem brocoli to fill it out!</li>
</ul>
<h2>Recipes I Intend To Try</h2>
<ul>
<li><a href="https://www.indianhealthyrecipes.com/samosa-recipe-make-samosa/">Samosas</a>, <a href="https://www.cookwithmanali.com/samosa-recipe/">Alternate Samosas</a></li>
<li><a href="https://www.recipetineats.com/lo-mein-noodles/">Lo-mein Noodles</a></li>
<li><a href="https://www.forksoverknives.com/recipes/amazing-grains/pumpkin-risotto-frittata-mushrooms/">Pumpkin Risotto Fritatta</a></li>
<li><a href="https://www.bbc.co.uk/food/recipes/vegan_pie_with_chestnut_13207">Chestnut Pie</a></li>
<li><a href="https://minimalistbaker.com/garlicky-vegan-potato-gratin/">Potato Gratin</a></li>
</ul>
<h2>Sites To Find Recipes On</h2>
<ul>
<li><a href="https://hungryinthailand.com/">hungryinthailand.com</a></li>
<li><a href="https://minimalistbaker.com">minimalistbaker.com</a></li>
<li><a href="https://www.indianhealthyrecipes.com">indianhealthyrecipes.com</a></li>
<li><a href="https://www.cookwithmanali.com">cookwithmanali.com</a></li>
</ul>
]]>
</content>
</entry><entry>
<title>Simple Recipes</title>
<link href="https://rosia.me/RecipeIndex.html"/>
<id>https://rosia.me/RecipeIndex.html</id>
<updated>2026-06-05T15:23:38Z</updated>
<content type="html">
<![CDATA[
<h1>Simple Recipes</h1>
<p>A collection of recipes I like. Generally when cooking I try to
cook using stuff I could concievably grow at home. I'm a big fan of
us increasing our use of local small scale farms and this is me partially
trying to prove thats viable.</p>
<p>Almost everything here is vegan, some recipes will use non-local stuff but
will try to suggest an alternative, I likely don't use that though :/</p>
<h2>Index</h2>
<ul>
<li><a href="DropScones.html">Drop Scones aka American Pancakes</a></li>
<li><a href="Pesto.html">Pesto</a></li>
<li><a href="Chilli.html">Chilli</a></li>
<li><a href="JamaicanStew.html">Jamaican Stew</a></li>
<li><a href="Shakshuka.html">Shakshuka</a></li>
<li><a href="Flapjacks.html">Flapjacks</a></li>
<li><a href="CiaraMisoSoup.html">Ciaras Miso Soup</a></li>
<li><a href="SundriedHummus.html">Olive, Sundried Tomato and Balsamic Vinegar hummus(?)</a></li>
<li><a href="Tapenade.html">Tapenade</a></li>
<li><a href="KaleCrisps.html">Kale Crisps</a></li>
<li><a href="CreamPasta.html">C.R.E.A.M Pasta</a> - my favourite pasta recipe</li>
<li><a href="Shortbread.html">Shortbread</a></li>
</ul>
<p>Also see <a href="RecipesToTry.html">the list of food I want to learn to cook</a></p>
]]>
</content>
</entry><entry>
<title>Notes On Vegan Cooking</title>
<link href="https://rosia.me/VeganCookingTips.html"/>
<id>https://rosia.me/VeganCookingTips.html</id>
<updated>2026-06-05T15:23:38Z</updated>
<content type="html">
<![CDATA[
<h1>Notes On Vegan Cooking</h1>
<h2>Protein Sources</h2>
<p>For a vegan you should try ensure your meal has protein, good sources are:</p>
<ul>
<li>tofu</li>
<li>tempeh (my current favourite!)</li>
<li>cashew nuts, pistachio nuts</li>
<li>quorn</li>
<li>peas</li>
<li>chickpeas</li>
<li>kidney beans</li>
<li>pumpkin seeds</li>
<li>lentils</li>
<li>peanut putter</li>
<li>quinoa</li>
<li>buckwheat</li>
<li>wild rice</li>
</ul>
<h2>Cooking Without Eggs</h2>
<p>Eggs are a core part of baking, they provide 3 main purposes: moisture, binding and protein heavy bodies (e.g. in a quiche). There are different replacements depending on what you're wanting to achieive.</p>
<ul>
<li>For moisture, 1/4 cup applesauce</li>
<li>For binding, 1tbsp group flaxseed and 3tbsp of water</li>
<li>For a body, 1/4 cup silken tofu</li>
</ul>
]]>
</content>
</entry><entry>
<title>_</title>
<link href="https://rosia.me/index.html"/>
<id>https://rosia.me/index.html</id>
<updated>2026-06-17T12:23:31Z</updated>
<content type="html">
<![CDATA[
<h1>_</h1>
<p>Hi, I'm Rosia</p>
<p>I'm a student into computers and environmentalism. I spend my time programming, repairing things and trying to balance my overly active social life along with it.</p>
<img src="profile4.jpeg" alt="A photo of me, I am wearing a summer outfit in a room with yellow walls and lots of sunlight. My hair is long and tied back.">
<p>Things I'm proud of:</p>
<ul>
<li><a href="Laptop.html">Self-Built Laptop</a></li>
<li><a href="Camera.html">Camera Repair</a></li>
<li><a href="ThisSite.html">This Site</a></li>
</ul>
<p>My thoughts:</p>
<ul>
<li><a href="Livecoding.html">Algorave</a></li>
<li><a href="Permacomputing.html">Permacomputing</a></li>
</ul>
<br>
<p><a href="About.html">More about me</a></p>
<br>
<br>
<br>
<blockquote>
<p>If you're not a fan of the colours of this site, or want a lower contrast version for accessibility, you can alter the theme in &quot;Page Settings&quot; at the bottom of the nav bar.</p>
</blockquote>
<br>
<blockquote>
<p>This website has a new home! Its now hosted on <a href="https://littleorino.co">little orinoco</a></p>
</blockquote>
]]>
</content>
</entry><entry>
<title>Camera Butchering/Revival </title>
<link href="https://rosia.me/Camera.html"/>
<id>https://rosia.me/Camera.html</id>
<updated>2025-09-16T22:13:46Z</updated>
<content type="html">
<![CDATA[
<h1>Camera Butchering/Revival</h1>
<p>A number of experiments that eventually lead to some cool photos and a neat camera.</p>
<blockquote>
<p>Note this page is a draft and definitely will contain spelling mistakes and general nonsense</p>
</blockquote>
<h2>It begins</h2>
<p>In 2022 I found <a href="https://640by480.com/">640by480</a>, this (along with <a href="https://640x480.net/album.php?posn=last&amp;size=small">a very similar site</a>) is a website where people post photos taken using old digital cameras. I found the energy of these photos really appealing, and as a fan of re-using outdated tech I wanted to give it a go. However, I try to own as little as possible generally, especially when it comes to tech, so I didn't find myself going out and getting one. I decided to just keep it in the back of my mind and hope I eventually came across something in the future.</p>
<p>A year or two later, fate finally dropped one in my lap! I came across it in a charity shop, its battery was far beyond over-drained and it required an obsolete proprietary memory card, which it didn't come with. No one else would be using it so I didn't feel too bad buying it and saving it from landfill.</p>
<p>It was a fujifilm mx-2700 I don't know much about it or how it compares to other cameras of the time but I'm not super bothered. Its what I'd been given and part of the appeal of old tech is the challenge of working with that.</p>
<p><img src="camera1.jpg" alt="The front of a camera, it has a small rectangular body with a lense in the top right corner">
<img src="camera3.jpg" alt="The back of a camera, it has a viewfinder in the top left corner, a small screen lcd screen and a dial to change its setting"></p>
<p>This page logs the series of experiments I did on the poor thing.</p>
<h2>Power!</h2>
<p>First things first, getting it turning on. It originally didn't, and I had no way of knowing if this was a dead battery (forgive my hardware-baby ignorance), a broken screen or something much more complicated. My first plan was to get power running into it to see what happened. It had a barrel plug for charging and for battery battery free use. This plug was marked as 5v and in my genius mind a plan formed.</p>
<p>&quot;Okay, a barrel plug is just a positive and a negative, this runs at 5v. USB does power the exact same way. What if I just remove this plug and wire a USB plug into it instead&quot;</p>
<p>USB runs at 0.5A 5V, this plug ran at 7.5W aka 5V 1.5A. My brain decided this wasn't important information until much later on and I got started!</p>
<p>I removed the plug and added what in my mind should be the new standard for USB plugs and nothing happened. It didn't work.</p>
<p><img src="camera2.jpg" alt="The side of a camera, the hole in the case for the power port is empty and just has two wires coming out, at the end of the wires is a small circuit board with a rubber cap"></p>
<p>I spoke to some friends and we did some testing, firstly, that barrel plug was only for charging the battery, not for running batteryless. It was here my friend pointed out to me that we could test the battery with a multimeter. We checked the it and it was way beyond saving. That thing was never charging again :P. I didn't want to buy a new battery for what was possibly a broken camera, so we used a power station to directly put power into the battery contacts and it turned on! (For anyone following at home, note that it won't turn on if the SmartMedia Card slot is open, if its disassembled, there's a switch near that port you should hold down).</p>
<p>This meant it worked! So I decided it would be worth the investment to buy a battery, I bought a battery and one of its weird little storage cards (A SmartMedia card, whatever that is).</p>
<p>These arrived and the device was working! I could take photos! But they were being held hostage from me! I couldn't get the photos off the weird little storage card.</p>
<h2>Reading the weird little storage card</h2>
<blockquote>
<p>Fun Fact: Most modern computers do not have SmartMedia card slots</p>
</blockquote>
<p>In the year 2000 fujifilm created the perfect storage medium and &quot;big sd card&quot; have spent the last 20 years trying to systematically eradicate it from the face of the earth because they fear its cool wiggly line.</p>
<p><img src="SmartMediaCard.jpg" alt="A SmartMedia card, similar to an SD card but twice the size, its metal contacts are cut in a wavy pattern"></p>
<p>You can't buy USB SmartMedia card readers, I personally couldn't find any original ones that came with the cameras online. This was a dilemma but my saving grace was EMFCamp2024. <a href="https://www.emfcamp.org/">EMFCamp</a> is a hacker festival that goes on every two years in Britain. It has a great second hand store where people can donate old tech they want to get rid of, that ranges from server racks to radioactive isotopes (see the toot <a href="orphanedSourceToot.png">here</a>, see the Wikipedia entry <a href="https://en.wikipedia.org/wiki/List_of_orphan_source_incidents#2020s">here</a>). Someone happened to be selling a front panel for a tower pc that had a slot for a SmartMedia card!! It was designed to plug directly into a motherboard but it was better than nothing!</p>
<p>I took it home and realised it plugged into the USB section of the motherboard. After a bit of research I realised this plug had the exact same layout as a USB cable. I figured I'd try to wire it to a different weird USB plug I had, since that went so well last time. It didn't work, I got that classic power surge error and not much more. A few days later I was walking down a street and saw a bin filled with a load of identical circuit boards with USB cables coming off them (?????). Like the gremlin I am I grabbed one and cut the cable off it, took it home and wired it up. For some reason this one worked!</p>
<p><img src="SmartMediaReader1.jpg" alt="image of SmartMedia Reader, an old computer front panel with slots for different old media cards">
<img src="SmartMediaReader2.jpg" alt="image of SmartMedia Reader cable, a beige cable cut half way with a black usb cable replacing the second half">
<img src="SmartMediaReader3.jpg" alt="image of the whole SmartMedia Reader, a large panel with a long cable coming from the back, the second half of the cable has been replaced with a USB cable"></p>
<p>After this there was only one problem left to solve.</p>
<h2>Recharging the new battery</h2>
<p>That's right, I didn't have a charger. Luckily I did have a <a href="https://shop.pimoroni.com/products/lipo-amigo?variant=39779302506579">generic Li-Po charging circuit</a> from a previous project. After some googling, I was confident this would work. I tried it, just holding some wires to the battery's contacts and it started charging! This was perfect! I just needed to make a proper shape to hold the battery and build proper contacts and I'd be done!. The circuit even had a fast charge mode!</p>
<p>...</p>
<p>The fast charge mode burnt out the board.</p>
<p>I intended to fix this, but that would take a while, so as a temporary solution I tried something a bit unhinged. I removed the old battery cell from the case of the dead battery that came with the camera. Attached an 18650 of similar specs to its contacts and lied to the camera about where its power was coming from.</p>
<p><img src="batteryLies1.jpg" alt="An old proprietary battery case with two wires coming out of a tape covered hole in its back">
<img src="batteryLies2.jpg" alt="A tape covered battery with wires coming out the back, connecting to a new 18650 in a holder">
<img src="batteryLies3.jpg" alt="A retro digital camera with wires coming from its battery slot, the wires connect to a new 18650 in its holder"></p>
<p>This worked but only slightly. The camera would boot but couldn't switch modes and would crash when I tried to take a photo. My guess it is wasn't providing enough power or the tiny little circuit board attached to the old cell might have actually been more than just an over-discharge protection circuit.</p>
<p>Weirdly, re-trying this a day later it worked so my guess is the connection was just off, here's a photo, taken with the camera, of the battery whilst its powering the camera.</p>
<p><img src="cameraBattery.jpg" alt="a photo of a 18650 battery cell, it sits in a small battery seat with a wire coming off either end. Its backed by a colorful carpet"></p>
<p>This is where we're up to, will update when I've got further!</p>
<h2>Photos!</h2>
<p>Here's the initial pictures I took on my first battery charge.
<img src="oldPhoto1.jpg" alt="A photo of a bedroom, the quality is grainy and the colour is slightly yellow, in the room is a bed with a large cluster of posters behind it, cushions and a large stuffed shark rest on top of it.">
<img src="oldPhoto2.jpg" alt="A photo of me, the quality is grainy and the colour is slightly yellow, I'm close up to the camera, head overly tilted, looking serious">
<img src="oldPhoto3.jpg" alt="A photo of my reflection in a window above my bed, in the reflection Im lying on my bed, holding the camera and taking the photo. The quality is grainy and the colour is slightly yellow">
<img src="oldPhoto4.jpg" alt="A blurry photo of myself, my hands rest on my hips against a bland wall with a door in the background,the image is out of focus"></p>
<p>Notes:
talk about how cool the internals of this camera are
mention this lad: http://people.surfaceeffect.com/pete/tech/nouserservice/mx2700/</p>
]]>
</content>
</entry><entry>
<title>Game Jams</title>
<link href="https://rosia.me/Game-Jams.html"/>
<id>https://rosia.me/Game-Jams.html</id>
<updated>2026-06-18T13:00:27Z</updated>
<content type="html">
<![CDATA[
<h1>Game Jams</h1>
<p>I've taken part in game jams for many years now. It started out as something I would do to get more experience making games but its now just a genuinely fun past-time I fall into every few months. When I was at University  I worked within its Computing Society to run them very regularly and they were always lovely. For a few years I was also in a game-jam team who took part in <a href="https://ludumdare.com/">Ludum-Dare</a> regularly.</p>
<p>This is a brief overview of the various games I have made over the years.</p>
<h2>Rummaging Raccoon - Godot</h2>
<p>A small game about a raccoon re-greening a scrap yard. This was the first Ludum-Dare game-jam I took part in with my jam-team and I immediately started asking if we could do games relating to nature 😅.</p>
<p>I set up the menu and character movement/actions. I also designed the main character!</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/TOmp0SnDwXA?si=0zz0Gbf0zlLX19qa" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<h2>Tunnel Tunnel - Python</h2>
<p>I ran a number of &quot;ascii-only&quot; game jams at uni, the aim being to provide accessible game jams to students who had very little coding experience and wouldnt be able to use OOP based game engines yet. This became a yearly thing for us, turns out there's a really fun challenge to the minimalist aspects of ascii and you can take it as far or as simple as you want.</p>
<p>My first proper entry to this was &quot;tunnel tunnel&quot;, a game about a character tunneling a tunnel. You're presented with a dark and hidden path and you have to predict what will be down the next step in the tunnel before you take it. This starts off impossible but emerging patterns appear.</p>
<p>I was really proud of my implementation of this game, it was modular enough that I was able to make a fully interactable tutorial in half an hour just using pre-existing modules from the actual game.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/uiH10FjtTdg?si=yyVoH33DtxqSRz80" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<h2>Retrieve Them - Godot</h2>
<p>A very unfinished game. I was really attached to the idea behind this game but the friend I was working with lost drive and dropped out after a day :/</p>
<p>You play as a robot whos job is to collect the bodies of climbers who died climbing an un-named and infinite mountain. You take find them and take them home to your graveyard to give them a proper burial.</p>
<p>Gameplay wise, it was a 3d game where you had 4 different robot arms: Picks for movement, a grabber for collecting people, a harpoon for traversing larger gaps and a heater which you would periodically run over other arms to stop them freezing up. One arm could be controlled at a time and would follow the mouse, the idea was to be kind of difficult to control and have a lot of pressures from the harsh environment.</p>
<p>This game didn't end up with any working code but it was one of the few recent game-jams I've done which used blender, so I want to put some images up from there and also share a video of the menu I made, which I think was really cute.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/uUQU_sUM5sE?si=_iYIYgUnX9aZipVV" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p><img src="gamejam1.png" alt="A snake-like robot arm with a pickaxe on the end">
<img src="gamejam2.png" alt="A snake-like robot armm with a bucket grabber at the end">
<img src="gamejam3.png" alt="A close up on a bucket grabber, its a sphere cut in half which opens and closes">
<img src="gamejam4.png" alt="A close up on an arm with a radiator on the end, the radiator wraps around another arm to warm it up">
<img src="gamejam5.png" alt="A spherical robot with 4 arms coming off it">
<img src="gamejam6.png" alt="A spherical robot with 4 arms coming off it, in a game engine"></p>
<h2>Evolution - Godot</h2>
<p>The first game-jam I ever took part in, this was a game made with a few friends, including a musician who made music for it!! The theme was evolution so we decided to greate a roguelike dungeon crawler where you went through the same location on repeat but slept for thousands of years between. The game limited your ammo and damage but made you very fast, so it forced you to leave some enemies alive each round. Between rounds, when you were asleep, evolution would occur in the enemies you left behind. If you let enemies that you struggled to fight live, your game would get harder, but if instead you chose to control the evolution and left the weaker enemies live, you'd have an easier time.</p>
<p>Enemies had 5 or so traits which controlled their damage, speed and behaviours, these would be collected and altered whenever you slept. You'd be given random traits at the start too, so that different enemy traits benefitted you different runs.</p>
<p>We didnt finish the game but we got a single enemy working with a few traits, player movement and rooms that randomly altered somewhat between sleeps whilst still being similar enough to feasibly be the same room.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/XQ7RLnKmb4c?si=J9H4jBf01UJt7oyd" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<p><video alt="A developer moves around a small level avoiding a two legged enemy which has multiple animations that it blends seemlessly between" src="gogodotjam1.mp4" controls width="60%"></video></p>
<p>See the code <a href="https://github.com/Wil-Ro/GoGodotJam">here</a></p>
<p>See our planning document <a href="gameplan.md">here</a></p>
<h2>Decay - Java</h2>
<p>A game made for the theme &quot;Decay&quot; with a friend in Java. I dont have a Java toolchain set up anymore so I cant get screenshots of this game.</p>
<p>The premise was to create yahtzee but the dice decay. You'd play a round and depending on how well you did, you'd see spots pop off and fall from the dice. Dice would be more or less likely to lose dots depending on your use of them, so you'd have to balance your dice choices out. We also had a shop where you could buy various powerups to help lessen the decay.</p>
<p>I'm really proud of the code for this game, it was made between two people and we structured it really well to make this as easy as possible.</p>
<p><a href="https://github.com/Wil-Ro/gamejam2024">find it here</a></p>
<h2>FungalCreep - Python</h2>
<p>Another ascii game made between a few friends under the theme &quot;Infestation&quot;. This is a hard game to describe, its a blend of Othello and Battleships. You would place &quot;infectious&quot; counters on your enemys board or &quot;blocking counters&quot; on your board. Infection counters would slowly spread and infect other tiles, blocking counters would allow you to remove infectious counters using Othello rules.</p>
<p><img src="FungalCreep1.png" alt="A screenshot of fungal creep, two grids are shown with cells filled to varying degrees, its unclear what is going on, this was a very esoteric game">
<img src="FungalCreep2.png" alt="A screenshot of fungal creep, two grids are shown with cells filled to varying degrees, its unclear what is going on, this was a very esoteric game"></p>
]]>
</content>
</entry><entry>
<title>Sonic-Pi and Algorave</title>
<link href="https://rosia.me/SonicPiWork.html"/>
<id>https://rosia.me/SonicPiWork.html</id>
<updated>2025-09-16T22:13:46Z</updated>
<content type="html">
<![CDATA[
<h1>Sonic-Pi and Algorave</h1>
<p>Sonic-Pi is a language built around live-coding and producing music algorithmically through code. Its based off Ruby and has a really nice twist that you see often in the live-coding community. This twist is that the code you write is constantly running and and being evaluated so as you write it the music being produced by it changes live.</p>
<p>I find Sonic-Pi a really nice way to relax with programming, it produces code that's inherently temporary and I find that really freeing. It can be easy to get burnt out with code and with Sonic-Pi, when that hits I just delete all my code and start again building something new. In another post I described it as &quot;the programming equivalent of doodling on scrap paper&quot;.</p>
<p>I've written a larger post around my thoughts on algorave and live-coding in general <a href="Livecoding.html">here</a> but it doesn't link any of my work so this page is here to represent the music I've created.</p>
<h1>My work</h1>
<p>Most of my code written in sonic-pi is never saved, that's a part of its process. But I have a few that I'm quite proud of saved. These are both on YouTube and can be found below, they're slow to start since I build up the code over-time so to give a better example of what they sound like these videos should automatically skip to good points.</p>
<div style="display:flex; gap: 10px;">
<iframe width="560" height="315" src="https://www.youtube.com/embed/8diAjYv7c84?si=BUbsSSk0Jw0KU-gX&amp;start=447" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<iframe width="560" height="315" src="https://www.youtube.com/embed/gmOAzl0xvFc?si=k-jeQIWIPRC9JJl8&amp;start=116" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div>
]]>
</content>
</entry><entry>
<title>CYD Hackathon</title>
<link href="https://rosia.me/CYDHackathon.html"/>
<id>https://rosia.me/CYDHackathon.html</id>
<updated>2026-06-05T16:03:26Z</updated>
<content type="html">
<![CDATA[
<h1>CYD Hackathon</h1>
<p>On the 2nd and 3rd of May 2026 an Aberystwyth University Alumnus called Duncan Thomas was kind enough to put on a hackathon with the help of AberCompSoc. The theme being to design a conference badge, like those found at events such as DEFCON and EMF.</p>
<p>I formed a team with <a href="https://bobyn.uk">Bob</a> and together we tried to see what we could do with the hardware we were given.</p>
<h2>But first; some learning</h2>
<p>We were presented with some new hardware:</p>
<h3><a href="https://github.com/witnessmenow/ESP32-Cheap-Yellow-Display">CYD (Cheap yellow display)</a></h3>
<p><img src="CYDFront.jpg" alt="Front of the CYD board">
<img src="CYDBack.jpg" alt="Back of the CYD board"></p>
<p>The CYD is an adorable little board with:</p>
<ol>
<li>ESP32 (ESP32-2432S028R if your being fussy)</li>
<li>320 x 240 LCD Display (2.8&quot;)</li>
<li>Touch Screen (Resistive)</li>
<li>RGB LED</li>
<li>LDR.</li>
<li>A whole host of support for fun periphals (I2c, SPI, microSD, speaker)</li>
</ol>
<p>All attendees were given one of these lovely little boards to keep courtesy of Duncan!</p>
<p>We were then shown how to flash <a href="micropython">https://docs.micropython.org</a> bundled with <a href="https://lvgl.io/">lvgl</a> to the boards using <a href="https://github.com/espressif/esptool">esptool</a>, and let loose to experiment running example code and trying to work out how to do whatever we wanted the board to do for the rest of the day.</p>
<p>Myself and Bob spent a lot of the day trying to find accurate documentation for the specific libraries we were using, which turned out to be rather frustrating due to the various different versions of the lvgl library. At the end of the day Bob decided to give the arduino libraries a try and found them much more friendly and we immeadiately had a good path forward for our project idea.</p>
<h2>Team: Beauty of the baud</h2>
<p>For our project idea we thought it would be fun to have a pair of CYD boards that would allow students to surreptitiously pass notes in class by drawing on the touch display and having their actions mirrored on the oppossing screen.</p>
<p>To do this we first looked at example code for drawing on the screen and detecting user input, from there we started mangaling the example code into a shape that better served us.</p>
<h3>Drawing on the screen</h3>
<p>The TFT and XPT2046 libraries provide really clean methods for extracting the location on screen the user is pressing as well as for drawing new pixels on the display, so we had a stylus drawing on the screen basically at the start of the day. This section was done using pair programming which was fun.</p>
<p>For color changing on implemented the lvgl library to have a color slider and had TFT draw a block of pixels by the slider as a color preview, this proved to be fiddly as lvgl and tft libraries defined their coordinate systems with different origins. This section Bob developed myself while I worked on networking.</p>
<p><img src="CYDCat.jpg" alt="Cat drawn on the CYD software"></p>
<h3>Network coms</h3>
<p>Esp has a neat lil' protocol called esp_now. According to Duncan, this works by sending out invalid wifi discovery frames with whatever data it wants in. Because these frames dont follow the standard they should, wifi routers ignore them but the esp listens out for them and just grabs whatever data is in them.</p>
<p>You can use this to grab a struct, use C magic to just treat it as an array of integers, send those integers, then another device can recieve those integers, agressively ram them into a struct and itll just kind of work because that data happened to originally have been that struct.</p>
<h4>Receiving</h4>
<p>Receiving was chill, you create a callback method which will be called whenever data is recieved, its given these numbers and you can do whatever you want with it. We turned the data into a struct with an x, y, and colour.</p>
<h4>Sending</h4>
<p>Sending is a bit harder, whilst recieving devices just listen for screams with their mac address on, sending needs to actually have the mac address. This isnt too bad though. You have an &quot;init&quot; method which takes a mac address, sets up a &quot;peer&quot; struct and writes that to memory which the esp code reads.</p>
<p>Then you have a &quot;send&quot; method which takes numbers (which are secretly our struct) and it just sends it</p>
<p>win ig</p>
<h2>The Code</h2>
<p>Our project can be found on my <a href="https://repos.rosia.me/Bobyn/CYDhackathon">forgejo</a> instance.</p>
<p><img src="CYDMess.jpg" alt="A mess at the hackathon, boxes and paper">
<img src="CYDRosiaSuffering.jpg" alt="Rosia suffering in a room full of people coding"></p>
<iframe src="https://imich.bobyn.uk/s/badgeathon">
]]>
</content>
</entry></feed>
