From 515d4b10e383dd84d29aacc16270bb14da4690d7 Mon Sep 17 00:00:00 2001 From: alifeee Date: Wed, 8 Jan 2025 14:35:49 +0100 Subject: [PATCH] replace email with alifeee.net email --- bike-to-cambridge/index.html | 811 +++++++++++----- factorio-proximity-chat/index.html | 1125 +++++++++++++++++----- font-workshop/index.html | 301 ++++-- gists/index.html | 1393 +++++++++++++++++++++------- hackspace-adventures/index.html | 4 +- hull-bus-sign/index.html | 4 +- index.html | 2 +- index_template.html | 4 +- making-bogface/index.html | 804 +++++++++++----- railcards/index.html | 767 ++++++++++----- ring-populations/index.html | 385 +++++--- sketch-your-society/index.html | 169 +++- snippets-of-a-degree/index.html | 280 +++--- steam-collage-api/index.html | 4 +- what-is-a-third-space/index.html | 496 +++++++--- 15 files changed, 4884 insertions(+), 1665 deletions(-) diff --git a/bike-to-cambridge/index.html b/bike-to-cambridge/index.html index 4bbccef..b423939 100644 --- a/bike-to-cambridge/index.html +++ b/bike-to-cambridge/index.html @@ -84,239 +84,602 @@

alifeee's blog

route
-

I biked from Birmingham to Cambridge (a tribute to National Cycle Routes)

-

-
    -
  1. Technicalities - how far did I bike?
  2. -
  3. How to plan a bike route
      -
    1. Google Maps hates bikes
    2. -
    -
  4. -
  5. National Cycle Routes!
      -
    1. Why get lost when you can not get lost
    2. -
    3. Do they go the right way?
    4. -
    5. Why go the right way when you can go the wrong way
    6. -
    -
  6. -
  7. Conclusion ("And what?")
  8. -
  9. Appendix: Tools
  10. -
-

In April, I biked from Birmingham to Cambridge.

-

More accurately, I half-biked, half-trained from Birmingham to Cambridge.

-

The original plan was to be on the bike the whole way, from Birmingham to Leamington Spa, to Wellingborough, through Bedford, and finally into Cambridge (it may sound a haphazard route, but I'd managed to find someone who would host me at each town!). This route was half on established cycle routes, and half country roads where I'd have to find my own way. Not bad, but it might be annoying to navigate on roads which were completely new to me.

-

But then... why should I have to bike on unlabelled routes and terrible roads? Why am I biking in the first place? Ultimately:

-
    -
  • Because I can,
  • -
  • It sounds fun,
  • -
  • I've always wanted to go on a bike tour and this is almost that
  • -
-

Therefore, why bother with a convoluted and annoying bike just for the sake of having biked the whole way. Let's ditch the idea of "purity"... and just catch a few trains to make it more pleasant. Here was the final route:

-

Sketch of the route that I took from Birmingham to Cambridge. Half of the image is shortcut via train.

-
- -

Look ma! I did most of it with my own legs! -Source.

-
- -

In an ideal world, I would have biked closer to Cambridge, but I injured my foot just before the final day, so I couldn't. Hence, the horrific detour by train! (turns out, the Bedfordshire council does not let you take a bike onto their buses)

-

So, what's the rest of this post about? Basically...

-
    -
  • Alternatives to Google Maps for finding a bike route
  • -
  • Me using the opportunity of having data to make pretty graphs with Python
  • -
  • Why you should cheat if you go on a bike ride
  • -
-

Technicalities - how far did I bike?

-

As the crow flies, the distance from my house to where I ended up in Cambridge is 141.1 km. -If said crow got tired and wanted to stop off at the same places I stopped off, the distance would be 148.4 km (thanks to my friend trigonometry for such a small change.)

-

Screenshot from Google Maps showing the crow flies distance from Birmingham to Leamington to Bedford to Cambridge: 148 km

-
- -

If I were a crow, it would be a nice life. -I would also get to Cambridge in 148 km, with stopovers. -From Google Maps.

-
- -

According to my records, I biked 150.3 km. That's more than 148.4 km!

-

I'm better than a crow! Or, I can (in the most roundabout of technicalities) now say:

-

"I biked the distance from Birmingham to Cambridge!"

-

That sounds pretty good! I'll start telling people that, and they'll be none the wiser.

-

Since this seems to be the section with all the statistics, let's finish off with the rest of them:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StatisticValue
Crow-distance from Birmingham to Cambridge141.1 km
Sleepy crow-distance from Birmingham to Cambridge148.4 km
Distance I biked150.3 km
Total time cycling11hr 54min
Total climb746 m
Average speed12.6 km/h
-

How to plan a bike route

-

Before this, I'd not planned a very long bike ride before. I had biked from Durham to Newcastle, but that's basically a straight shot up the A167 until you find a "Newcastle Road" that you can follow. The biggest gripe I remember from this and other long-ish rides was that the directions Google Maps gave me were: not great for biking; and took way longer than the estimate said. These are basically encapsulated in what I will call my "top 2 criteria for a perfect bike route":

-
    -
  1. I don't want to bike on roads unfriendly to bikes (I think I should be allowed to desire to not be run over by a car)
  2. -
  3. I don't want to stop to check my phone for directions (I'm afraid I'm not bourgeois enough to have one of those fancy phone holders on my handlebars)
  4. -
-

I ended up finding a great website for finding any distance bike routes: cycle.travel. As well as actual bike-friendly routes (which are, naturally, slightly longer than Google's suggestions but ten times more pleasant to bike on), the website provides some information about the type of roads on the route. This solves the first problem above, and also how I figure that...

-

Google Maps hates bikes

-

Here are the routes that Google Maps and cycle.travel give me for the route:

-

Birmingham → Leamington Spa → Wellingborough → Bedford → Cambridge

-

Comparison of the route from Google Maps and cycle.travel. They look broadly similar.

-
- -

Spot the difference. -From gpx.studio.

-
- -

They look pretty similar! Now let's use cycle.travel's route planner to see what types of roads you'd be biking on if you followed these routes:

-

Comparison of road type statistics for the Google Maps route and cycle.travel route. For (Google Maps, cycle.travel): busy roads (46.8 km, 2.4 km), paved roads (90.5 km, 155 km), paved paths (32.6 km, 48.3 km), unpaved paths (21.1 km, 5.3 km), pushing (6.6 km, 0.58 km).

-
- -

Which of these would you rather bike on? -Source.

-
- -

Now personally, 2 of these 5 road types I find enjoyable to bike along, and the other three far less so. I'll leave it to you to imagine which. Needless to say, the directions Google gives you are not made for cycling.

-

Additionally, Google Maps seems to think that you are some kind of cycling God, presumably decked out with Lycra, speed stripes, and one of those back-pockets. I say this because the time estimate it gives you expects you to be cycling 19.1 km/h. If you aren't acutely aware of the relative speeds of biking, what are you doing with your life. But, if not, I would describe this as "very fast". To contextualise: over three days, I managed an average of 12.6 km/h, and going what I felt was a moderate speed I would get to about 15 km/h. Meanwhile, cycle.travel's travel time estimates estimate that you are doing around 15.8 km/h. Much more reasonable. (though I personally still have to add an hour to any time estimates. What can I say, I love dawdling.)

-

So, cycle.travel (or probably many other cycling websites) solves my first bike route desire: I don't want to be run over. How do we solve the second: I don't want a SatNav?

-

National Cycle Routes!

-

Biking can be very pleasant when it's relaxing and stress-free (see: when there are no cars). National Cycle Routes are exactly that! They are a network of paths, roads, and bridges through the UK which are kept navigable, and they are all very well signed.

-
-

The National Cycle Network is a UK-wide network of signed paths and routes for walking, wheeling, cycling and exploring outdoors.

-
-

- Sustrans

-

The goal of national cycle routes is to make it pleasant to bike on them. As I have expressed, the main goal of this whole adventure was also to have an enjoyable time, so why not use national cycle routes as much as possible!

-

Photo of a bike path going down to a canal towpath.

-
-Ramp down to the Stratford canal, National Cycle Route 5. -
- -

Why get lost when you can not get lost

-

One of my favourite things about the routes is that they are very well signed. Sustrans do a great job keeping them up to date and making any diversions obvious. Set off down a route, and you'll encounter a familiar blue and red sign at every turn keeping you on track. This pretty neatly deals with my "I don't want to stop for directions" criterion.

-

If you blindly follow the routes, you will end up skirting round villages and past large roads in long, winding, or counterintuitive diversions, but you'll also end up encountering what you might not if you try and zoom through everywhere that you visit via the fastest route possible.

-

Photo of large car half-submerged as it drives through a ford.

-
- -

Whoosh! -Picture from a bridge next to the ford. -Would've been fun to try and get through on a bike though.

-
- -

There is a definite comfort in knowing that you're on the right track. If I weren't, then after every turn I'd feel the need to check if I'm going the right way, so I don't end up careening down a hill for ten minutes only to find I've made a wrong turn and all the freewheeling fun was for nothing.

-

Photo of a road in grey weather, with a pothole filled with water.

-
- -

Get to the end of this, but a thousand times, and you might end up in Cambridge.

-
- -

Do they go the right way?

-

No.

-

The national cycles routes come with the problem that they might simply not align with where you want to go. That was certainly the case for me. You try and find a good way from Birmingham to Cambridge that doesn't end up in a huge detour of a winding mess.

-

Screenshot of OS Maps between Birmingham and Cambridge with all national cycle routes shown. There are none that really go in the right direction.

-
- -

Here's a game. Why does everything go the wrong way? -Sorry, that wasn't a game. -From OS Maps.

-
- -

However, for me, biking along a cycle route offers too many benefits in contrast to the alternative: making sweeping shortcuts across Northamptonshire.

-

Why go the right way when you can go the wrong way

-

If my mind was cavernous and my thighs thunderous, I would be able to set off and bike straight towards Cambridge. Stopping only to sleep, this is the overall direction I would end up going in, thanks to petty limitations of the real world like "roads don't go in perfectly straight lines":

-

Polar bar chart, showing the proportion of the route (from cycle.travel) which goes in which direction (North/East/South/etc)

-
- -

Turns out the fastest way to get somewhere is to go that way. -Source.

-
+

+ I biked from Birmingham to Cambridge (a tribute to National Cycle + Routes) +

+

+
    +
  1. + Technicalities - how far did I bike? +
  2. +
  3. + How to plan a bike route +
      +
    1. + Google Maps hates bikes +
    2. +
    +
  4. +
  5. + National Cycle Routes! +
      +
    1. + Why get lost when you can not get lost +
    2. +
    3. + Do they go the right way? +
    4. +
    5. + Why go the right way when you can go the wrong way +
    6. +
    +
  6. +
  7. + Conclusion ("And what?") +
  8. +
  9. Appendix: Tools
  10. +
+

In April, I biked from Birmingham to Cambridge.

+

+ More accurately, I half-biked, half-trained from Birmingham to + Cambridge. +

+

+ The original plan was to be on the bike the whole way, from Birmingham + to Leamington Spa, to Wellingborough, through Bedford, and finally + into Cambridge (it may sound a haphazard route, but I'd managed to + find someone who would host me at each town!). This route was half on + established cycle routes, and half country roads where I'd have to + find my own way. Not bad, but it might be annoying to navigate on + roads which were completely new to me. +

+

+ But then... why should I have to bike on unlabelled routes and + terrible roads? Why am I biking in the first place? Ultimately: +

+
    +
  • Because I can,
  • +
  • It sounds fun,
  • +
  • + I've always wanted to go on a bike tour and this is almost that +
  • +
+

+ Therefore, why bother with a convoluted and annoying bike just for the + sake of having biked the whole way. Let's ditch the idea of + "purity"... and just catch a few trains to make it more + pleasant. Here was the final route: +

+

+ Sketch of the route that I took from Birmingham to Cambridge. Half of the image is shortcut via train. +

+
+

+ Look ma! I did most of it with my own legs! + Source. +

+
-

The sad news was I don't have a cavernous mind or thunderous thighs (the latter is at least achievable with more cycling). And with the fact that the direct route lies on approximately zero national cycle routes, it did not seem a good way to go. However! There was a solution! Trains! I could just hop on a quick 30-minute train and re-align myself with the curious spider web of cycleways. I just had to find out when and where I could do that, which is where the National Rail route map comes in:

-

Screenshot from a PDF showing each of the train lines in the UK

-
+

+ In an ideal world, I would have biked closer to Cambridge, but I + injured my foot just before the final day, so I couldn't. Hence, + the horrific detour by train! (turns out, the Bedfordshire council + does not let you take a bike onto their buses) +

+

So, what's the rest of this post about? Basically...

+
    +
  • Alternatives to Google Maps for finding a bike route
  • +
  • + Me using the opportunity of having data to make pretty graphs with + Python +
  • +
  • Why you should cheat if you go on a bike ride
  • +
+

+ Technicalities - how far did I bike? +

+

+ As the crow flies, the distance from my house to where I ended up in + Cambridge is 141.1 km. If said crow got tired and wanted to stop off + at the same places I stopped off, the distance would be 148.4 km + (thanks to my friend trigonometry for such a small change.) +

+

+ Screenshot from Google Maps showing the crow flies distance from Birmingham to Leamington to Bedford to Cambridge: 148 km +

+
+

+ If I were a crow, it would be a nice life. I would also get to + Cambridge in 148 km, with stopovers. From + Google Maps. +

+
-

An insight into my definitely organised mind: -what I sketched to see which trains I could use on my journey if I needed to. -Blue is the bike route, with green the trains that could be used as shortcuts. -Background from National Rail (PDF).

-
+

+ According to my records, I biked 150.3 km. That's more than 148.4 + km! +

+

+ I'm better than a crow! Or, I can (in the most roundabout of + technicalities) now say: +

+

"I biked the distance from Birmingham to Cambridge!"

+

+ That sounds pretty good! I'll start telling people that, and + they'll be none the wiser. +

+

+ Since this seems to be the section with all the statistics, let's + finish off with the rest of them: +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StatisticValue
Crow-distance from Birmingham to Cambridge141.1 km
Sleepy crow-distance from Birmingham to Cambridge148.4 km
Distance I biked150.3 km
Total time cycling11hr 54min
Total climb746 m
Average speed12.6 km/h
+

How to plan a bike route

+

+ Before this, I'd not planned a very long bike ride before. I had + biked from Durham to Newcastle, but that's basically a straight + shot up the A167 until you find a "Newcastle Road" that you + can follow. The biggest gripe I remember from this and other long-ish + rides was that the directions + Google Maps gave me were: not + great for biking; and took way longer than the estimate said. + These are basically encapsulated in what I will call my "top 2 + criteria for a perfect bike route": +

+
    +
  1. + I don't want to bike on roads unfriendly to bikes (I think I + should be allowed to desire to not be run over by a car) +
  2. +
  3. + I don't want to stop to check my phone for directions (I'm + afraid I'm not bourgeois enough to have one of those fancy phone + holders on my handlebars) +
  4. +
+

+ I ended up finding a great website for finding any distance bike + routes: cycle.travel. As well as + actual bike-friendly routes (which are, naturally, slightly longer + than Google's suggestions but ten times more pleasant to bike on), + the website provides some information about the type of roads on the + route. This solves the first problem above, and also how I figure + that... +

+

Google Maps hates bikes

+

+ Here are the routes that + Google Maps and + cycle.travel give me for the route: +

+

+ Birmingham → Leamington Spa → Wellingborough → Bedford → Cambridge +

+

+ Comparison of the route from Google Maps and cycle.travel. They look broadly similar. +

+
+

+ Spot the difference. From + gpx.studio. +

+
-

I ended up doing a completely different route which goes off both the top and bottom of that map, but it planted the seed that trains were only here to help.

-

Photo of my bike inside a train carriage.

-
+

+ They look pretty similar! Now let's use + cycle.travel's route planner to + see what types of roads you'd be biking on if you followed these + routes: +

+

+ Comparison of road type statistics for the Google Maps route and cycle.travel route. For (Google Maps, cycle.travel): busy roads (46.8 km, 2.4 km), paved roads (90.5 km, 155 km), paved paths (32.6 km, 48.3 km), unpaved paths (21.1 km, 5.3 km), pushing (6.6 km, 0.58 km). +

+
+

+ Which of these would you rather bike on? + Source. +

+
-

I'm big. My bike is big. -Sometimes we fit in a train.

-
+

+ Now personally, 2 of these 5 road types I find enjoyable to bike + along, and the other three far less so. I'll leave it to you to + imagine which. Needless to say, the directions Google gives you are + not made for cycling. +

+

+ Additionally, Google Maps seems + to think that you are some kind of cycling God, presumably decked out + with Lycra, speed stripes, and one of those back-pockets. I say this + because the time estimate it gives you expects you to be cycling + 19.1 km/h. If you aren't acutely aware of the + relative speeds of biking, what are you doing with your life. But, if + not, I would describe this as "very fast". To contextualise: + over three days, I managed an average of 12.6 km/h, and going what I + felt was a moderate speed I would get to about 15 km/h. Meanwhile, + cycle.travel's travel time + estimates estimate that you are doing around 15.8 km/h. Much more + reasonable. (though I personally still have to add an hour to + any time estimates. What can I say, I love dawdling.) +

+

+ So, cycle.travel (or probably many + other cycling websites) solves my first bike route desire: I don't + want to be run over. How do we solve the second: I don't want a + SatNav? +

+

National Cycle Routes!

+

+ Biking can be very pleasant when it's relaxing and stress-free + (see: when there are no cars). National Cycle Routes are exactly that! + They are a network of paths, roads, and bridges through the UK which + are kept navigable, and they are all very well signed. +

+
+

+ The National Cycle Network is a UK-wide network of signed paths and + routes for walking, wheeling, cycling and exploring outdoors. +

+
+

+ - + Sustrans +

+

+ The goal of national cycle routes is to make it pleasant to bike on + them. As I have expressed, the main goal of this whole adventure was + also to have an enjoyable time, so why not use national cycle routes + as much as possible! +

+

+ Photo of a bike path going down to a canal towpath. +

+
+ Ramp down to the Stratford canal, National Cycle Route 5. +
-

If we look back at the route I finally did, I ended up on national cycle routes for the whole thing.

-

Sketch of the route that I took from Birmingham to Cambridge. Half of the image is shortcut via train.

-
+

+ Why get lost when you can not get lost +

+

+ One of my favourite things about the routes is that they are very well + signed. Sustrans do a great + job keeping them up to date and making any diversions obvious. Set off + down a route, and you'll encounter a familiar blue and red sign at + every turn keeping you on track. This pretty neatly deals with my + "I don't want to stop for directions" criterion. +

+

+ If you blindly follow the routes, you will end up skirting round + villages and past large roads in long, winding, or counterintuitive + diversions, but you'll also end up encountering what you might not + if you try and zoom through everywhere that you visit via the fastest + route possible. +

+

+ Photo of large car half-submerged as it drives through a ford. +

+
+

+ Whoosh! Picture from a bridge next to the ford. Would've been + fun to try and get through on a bike though. +

+
-

It's all national cycle routes? -Always has been. -Source.

-
+

+ There is a definite comfort in knowing that you're on the right + track. If I weren't, then after every turn I'd feel the need + to check if I'm going the right way, so I don't end up + careening down a hill for ten minutes only to find I've made a + wrong turn and all the freewheeling fun was for nothing. +

+

+ Photo of a road in grey weather, with a pothole filled with water. +

+
+

+ Get to the end of this, but a thousand times, and you might end up + in Cambridge. +

+
+ +

Do they go the right way?

+

No.

+

+ The national cycles routes come with the problem that they might + simply not align with where you want to go. That was certainly the + case for me. You try and find a good way from Birmingham to Cambridge + that doesn't end up in a huge detour of a winding mess. +

+

+ Screenshot of OS Maps between Birmingham and Cambridge with all national cycle routes shown. There are none that really go in the right direction. +

+
+

+ Here's a game. Why does everything go the wrong way? Sorry, that + wasn't a game. From + OS Maps. +

+
-

This ended up meaning that some days I was biking not towards Cambridge at all, which - if I were only biking - would usually mean zero progress towards the end. But not so bad here! It's easily fixable with a train or two.

-

Polar bar chart, showing the proportion of each of the three actual bike routes which goes in which direction (North/East/South/etc)

-
+

+ However, for me, biking along a cycle route offers too many benefits + in contrast to the alternative: making sweeping shortcuts across + Northamptonshire. +

+

+ Why go the right way when you can go the wrong way +

+

+ If my mind was cavernous and my thighs thunderous, I would be able to + set off and bike straight towards Cambridge. Stopping only to sleep, + this is the overall direction I would end up going in, thanks to petty + limitations of the real world like "roads don't go in + perfectly straight lines": +

+

+ Polar bar chart, showing the proportion of the route (from cycle.travel) which goes in which direction (North/East/South/etc) +

+
+

+ Turns out the fastest way to get somewhere is to go that way. + Source. +

+
-

Going the right way is for nerds. -Source.

-
+

+ The sad news was I don't have a cavernous mind or thunderous + thighs (the latter is at least achievable with more cycling). And with + the fact that the direct route lies on approximately zero national + cycle routes, it did not seem a good way to go. However! There was a + solution! Trains! I could just hop on a quick 30-minute train and + re-align myself with the curious spider web of cycleways. I just had + to find out when and where I could do that, which is where the + National Rail route map comes in: +

+

+ Screenshot from a PDF showing each of the train lines in the UK +

+
+

+ An insight into my definitely organised mind: what I sketched to see + which trains I could use on my journey if I needed to. Blue is the + bike route, with green the trains that could be used as shortcuts. + Background from + National Rail + (PDF). +

+
-

Conclusion ("And what?")

-

To me, my journey counts as a bike tour. I will also say: bike touring is fun! You have one thing to do: bike. Go forwards. Head empty. Eat snack. Pedal.

-

Also, let's not be purist. Trains make it so much better. You can pick and choose the best bike routes, all while retaining the feeling of slow progress towards your destination.

-

10/10 would bike again.

-

Photo of my bike in front of a millennium milepost.

-
+

+ I ended up doing a completely different route which goes off both the + top and bottom of that map, but it planted the seed that + trains were only here to help. +

+

+ Photo of my bike inside a train carriage. +

+
+

I'm big. My bike is big. Sometimes we fit in a train.

+
-

My bike in front of millennium milepost 897X. -6 km into day 2, the 80 km day.

-
+

+ If we look back at the route I finally did, I ended up on national + cycle routes for the whole thing. +

+

+ Sketch of the route that I took from Birmingham to Cambridge. Half of the image is shortcut via train. +

+
+

+ It's all national cycle routes? Always has been. + Source. +

+
-

Appendix: Tools

-

Here are a few tools I used to get data from the bike ride, and subsequent GPS data:

- -

You can also view the data analysis in the GitHub repository! In particular, check out these Jupyter notebooks:

- -

You can open and play with these notebooks on Binder.

+

+ This ended up meaning that some days I was biking not towards + Cambridge at all, which - if I were only biking - would usually mean + zero progress towards the end. But not so bad here! It's easily + fixable with a train or two. +

+

+ Polar bar chart, showing the proportion of each of the three actual bike routes which goes in which direction (North/East/South/etc) +

+
+

+ Going the right way is for nerds. + Source. +

+
+ +

Conclusion ("And what?")

+

+ To me, my journey counts as a bike tour. I will also say: bike touring + is fun! You have one thing to do: bike. Go forwards. Head empty. Eat + snack. Pedal. +

+

+ Also, let's not be purist. Trains make it so much better. You can + pick and choose the best bike routes, all while retaining the feeling + of slow progress towards your destination. +

+

10/10 would bike again.

+

+ Photo of my bike in front of a millennium milepost. +

+
+

+ My bike in front of + millennium milepost 897X. 6 km into day 2, the 80 km day. +

+
+ +

Appendix: Tools

+

+ Here are a few tools I used to get data from the bike ride, and + subsequent GPS data: +

+ +

+ You can also view the data analysis in the + GitHub repository! In particular, check out these Jupyter notebooks: +

+ +

+ You can open and play with these notebooks on + Binder. +


@@ -324,7 +687,7 @@

Appendix: Tools

Comments

Email me → - alifeee.web@outlook.com + alifeee@alifeee.net :)

@@ -344,7 +707,7 @@

Comments

_Linktree_ Linktree - + _Email_ Email diff --git a/factorio-proximity-chat/index.html b/factorio-proximity-chat/index.html index 13602e7..b29d047 100644 --- a/factorio-proximity-chat/index.html +++ b/factorio-proximity-chat/index.html @@ -81,105 +81,407 @@

alifeee's blog

-

Coding Projects! #2: Proximity-based voice chat for Factorio

-

-

Earlier this year, I played Barotrauma weekly for 21 weeks with friends. Barotrauma is a "2D co-op submarine simulator – in space, with survival horror and RPG elements", and most importantly for me: it has a proximity voice-chat system. This means that if you are crafting some nuclear fuel rods at the rear of the ship, you will not hear your crewmates being torn apart by eldritch beings that found their way into the front of the ship. You will be on your way past the medbay to fix a leak in the crew quarters, and hear the medical doctors through the door discussing which of the crewmembers to use for their next 'experiment'. You will be picked as the next dead-man-walking to leave the submarine to mine precious metals, and will make your way across the ship to get orders in-person from the captain.

-

Screenshot of Barotrauma, showing three players mining

-
- -

Here, three of us make small talk while we mine outside the submarine. What conversations were being had inside the submarine, we were unaware.

-
+

+ Coding Projects! #2: Proximity-based voice chat for Factorio +

+

+

+ Earlier this year, I played + Barotrauma + weekly for 21 weeks with friends. Barotrauma is a "2D co-op + submarine simulator – in space, with survival horror and RPG + elements", and most importantly for me: it has a proximity + voice-chat system. This means that if you are crafting some nuclear + fuel rods at the rear of the ship, you will not hear your crewmates + being torn apart by eldritch beings that found their way into the + front of the ship. You will be on your way past the medbay to fix a + leak in the crew quarters, and hear the medical doctors through the + door discussing which of the crewmembers to use for their next + 'experiment'. You will be picked as the next + dead-man-walking to leave the submarine to mine precious metals, and + will make your way across the ship to get orders in-person from the + captain. +

+

+ Screenshot of Barotrauma, showing three players mining +

+
+

+ Here, three of us make small talk while we mine outside the + submarine. What conversations were being had inside the submarine, + we were unaware. +

+
-

As you can tell, I had a lot of fun playing Barotrauma; it probably deserves a blog post of its own. When we played, we were usually around 8 players, which, had we used Discord for voice chat, would have been chaos trying to hear what everyone was saying. Proximity chat added greatly to our enjoyment of the game, and planted the question in my mind of which other games which could be as fun. In my view, there are a few criteria which made Barotrauma great and that I would like in another game that could be as fun. They are:

-
    -
  • Proximity chat. Games which come to mind immediately which have this are Among Us and Minecraft. There are lists online.
  • -
  • Campaign-based. By this, I mean games where you play the same save, and wouldn't start fresh every week. Among Us is out.
  • -
  • Players are... in proximity to each other. In Barotrauma, you can always hear mutterings and ramblings of other people as you are all trapped inside a submarine. In Minecraft, you may travel massive distances and end up spending most of your time separate from each other.
  • -
-

The games on the above list that are probably most like what I'm after are Sea of Thieves and Ark/Rust. However, the secret fourth category is: people I know must own the game. So, after all that, I was suggested Factorio, which I thought would be a bunch of fun to play with a bunch of people. Factorio doesn't pass the third criterion of "players are always vaguely close to each other", but it's a great game, so I'm sure I can allow it one strike. Since I've not played yet, it remains to be seen how close people remain to each other when playing: maybe people stick together more if they have proximity chat!

-

There was only one problem with Factorio: it didn't have proximity chat. That, my dear friend, is why we're here. I wanted to play Factorio with proximity chat so much that I made it myself. Within these words lies the tales, struggle, and strife of that process.

-
    -
  1. Research
      -
    1. How do other games do it?
    2. -
    3. How can I do it for Factorio?
    4. -
    5. Using Mumble
        -
      1. Memory hacking?
      2. -
      3. Using the Link plugin?
      4. -
      5. Using the filesystem?
      6. -
      -
    6. -
    -
  2. -
  3. Making the Factorio Mod
  4. -
  5. Making the Mumble Plugin
      -
    1. Build the C files
    2. -
    3. Bundle the plugin
    4. -
    5. Spit out random data
    6. -
    7. Only run when Factorio.exe is running
    8. -
    9. Parse the Factorio log file
    10. -
    11. Check the log file exists
    12. -
    13. Check the log file is recent
    14. -
    15. Build it on Windows
    16. -
    -
  6. -
  7. It works! (for a bit)
  8. -
  9. It works! (weirdly)
  10. -
  11. It works! (actually)
  12. -
  13. Conclusion
  14. -
  15. People who helped
      -
    1. Testing it works!
    2. -
    3. Reddit thread ⇗
    4. -
    5. Factorio discord ⇗
    6. -
    7. Mumble Matrix ⇗
    8. -
    -
  16. -
  17. Links
  18. -
-

Research

-

How do other games do it?

-

The only game I had played with user-created proximity chat before was Among Us. I had remembered that we had all downloaded "BetterCrewLink", which was a desktop app, which connected to a voice server, connected to the game running on your machine, and somehow did proximity chat from that. Looking at the code on GitHub, the program read the memory addresses of things like player position, and also looked like it implemented its own entire VoIP system (Voice over IP).

-

This seemed a lot of work. I didn't fancy creating (or even trying to clone) what is basically Discord or TeamSpeak, so I did some more Googling.

-

How can I do it for Factorio?

-

Googling around, the only mention I could find of Factorio and proximity voice chat was a single Reddit thread.

-

Screenshot of Reddit thread. Title:

-

Without this thread, I don't think I would have started trying to make a Factorio proximity chat mod. But, with the thread, I had some leads. Faxxobeat made me aware that Mumble - an open source voice chat client (like Discord or TeamSpeak) - had support for "positional audio" via "plugins". There were already plugins for many games and lots of documentation on PA (Positional Audio). This sounded like an approachable plan, since this way all I had to do to implement proximity chat in Factorio was make a plugin for Mumble, which would handle the rest of the voice chat. And, reading the requirements for a Mumble plugin, I just had to write a plugin which gave Mumble the player position, player name and the current game server. It seemed "easy enough".

-

Using Mumble

-

I found a lot of different documentation for Mumble and Mumble's PA. There was a wiki, a website, and some markdown files. These were, respectively: outdated with a banner saying as such; outdated with no such information; and up-to-date. Initially, I did not find the third guide (the up to date one), so naturally after seeing the wiki was outdated, I used the second, outdated (unbeknownst to me at the time) guide. This had several pages:

- -

That's a lot of docs. The guide above is very comprehensive, so I tried to follow it. However, as I said, it was outdated. Having followed links from the wiki which said "the wiki is outdated, please use the website", the potential that the website was outdated was not on my radar, so I ploughed on.

-

Memory hacking?

-

The plugin guide leads you through creating a plugin which searches a game's memory for memory addresses of the player position and other variables. I attempted this a little with Cheat Engine, but it led nowhere for Factorio. As I could've learnt by reading the Reddit thread I already found: Factorio does not use static memory addresses for player data. Thus, I could not use memory hacking to make a plugin.

- -

The next option was the link plugin, which works generically for any game. This is meant to be for the developers of the game to implement themselves (by providing some known-location memory addresses which are updated with player position data, which Mumble can then find), but I also thought that it could be possible to make a mod which does similar (at game startup: write position data to memory and keep it updated when playing).

-

Factorio provides a modding API, using Lua, making everyone's lives easier when it comes to modding, as you can just write a mod in Lua, and it should stay compatible with small game updates. -This seems much more fun than other ecosystems like Minecraft where mods become unplayable because they have to be updated for each version of the game that releases. -Since I wanted whatever I made to be long-lasting, I wanted to use the official modding API. This meant using Lua. Everything that I could do with code was now described by the Factorio API Docs. Unfortunately, playing with memory was not on this list, so using the Link plugin was also not possible.

-

Using the filesystem?

-

My final idea was that I could make a simple Factorio mod in Lua which writes the position of the player to a file, and then I could write a Mumble plugin in C which looks for and reads this file, exposing the data to Mumble's Positional Audio system. This would mean that to use the plugin, you need to install two things: the Factorio mod; and the Mumble plugin, but it also made the connection between Mumble and Factorio minimal, as either the mod or plugin could be easily changed without needing to change the other, since they were only interacting via file write or file read.

-

At this point, I had popped my head into the Mumble Matrix chat via a link I found on the website and chatted with some developers about making the plugin. Thankfully, this is when I found out that I'd been following an outdated guide, and was pointed to the most recent, updated, and clear markdown documentation.

-

Making the Factorio Mod

-

The brief was clear: make a mod which took the player position, and write it to a file.

-

I had never modded Factorio or used Lua before, so I read some Factorio modding tutorial and read about Lua too.

-

Then, I joined the Factorio discord to ask how I could go about doing what I wanted. Less than 30 minutes¹ after my initial message, a user, Xorimuth, told me that you could write files with Factorio's write_file function, and provided a code snippet to do what I wanted:

-
script.on_nth_tick(30, function()
+        

+ As you can tell, I had a lot of fun playing Barotrauma; it probably + deserves a blog post of its own. When we played, we were usually + around 8 players, which, had we used Discord for voice chat, would + have been chaos trying to hear what everyone was saying. Proximity + chat added greatly to our enjoyment of the game, and planted the + question in my mind of which other games which could be as fun. In my + view, there are a few criteria which made Barotrauma great and that I + would like in another game that could be as fun. They are: +

+
    +
  • + Proximity chat. Games which come to mind immediately which have this + are Among Us and Minecraft. There are + lists online. +
  • +
  • + Campaign-based. By this, I mean games where you play the same save, + and wouldn't start fresh every week. Among Us is out. +
  • +
  • + Players are... in proximity to each other. In Barotrauma, you can + always hear mutterings and ramblings of other people as you are all + trapped inside a submarine. In Minecraft, you may travel massive + distances and end up spending most of your time separate from each + other. +
  • +
+

+ The games on the + above list + that are probably most like what I'm after are Sea of Thieves and + Ark/Rust. However, the secret fourth category is: people I know must + own the game. So, after all that, I was suggested + Factorio, which I thought would be + a bunch of fun to play with a bunch of people. Factorio doesn't + pass the third criterion of "players are always vaguely close to + each other", but it's a great game, so I'm sure I can + allow it one strike. Since I've not played yet, it remains to be + seen how close people remain to each other when playing: maybe people + stick together more if they have proximity chat! +

+

+ There was only one problem with Factorio: it didn't have proximity + chat. That, my dear friend, is why we're here. I wanted to play + Factorio with proximity chat so much that I made it myself. Within + these words lies the tales, struggle, and strife of that process. +

+
    +
  1. + Research +
      +
    1. + How do other games do it? +
    2. +
    3. + How can I do it for Factorio? +
    4. +
    5. + Using Mumble +
        +
      1. Memory hacking?
      2. +
      3. + Using the Link plugin? +
      4. +
      5. + Using the filesystem? +
      6. +
      +
    6. +
    +
  2. +
  3. + Making the Factorio Mod +
  4. +
  5. + Making the Mumble Plugin +
      +
    1. Build the C files
    2. +
    3. Bundle the plugin
    4. +
    5. Spit out random data
    6. +
    7. + Only run when Factorio.exe is running +
    8. +
    9. + Parse the Factorio log file +
    10. +
    11. + Check the log file exists +
    12. +
    13. + Check the log file is recent +
    14. +
    15. Build it on Windows
    16. +
    +
  6. +
  7. It works! (for a bit)
  8. +
  9. It works! (weirdly)
  10. +
  11. It works! (actually)
  12. +
  13. Conclusion
  14. +
  15. + People who helped +
      +
    1. Testing it works!
    2. +
    3. Reddit thread ⇗
    4. +
    5. Factorio discord ⇗
    6. +
    7. Mumble Matrix ⇗
    8. +
    +
  16. +
  17. Links
  18. +
+

Research

+

How do other games do it?

+

+ The only game I had played with user-created proximity chat before was + Among Us. I + had remembered that we had all downloaded + "BetterCrewLink", which was a desktop app, which connected to a voice server, + connected to the game running on your machine, and somehow did + proximity chat from that. Looking at the code on GitHub, the program + read the memory addresses of things like player position, and also + looked like it implemented its own entire + VoIP system + (Voice over IP). +

+

+ This seemed a lot of work. I didn't fancy creating (or even trying + to clone) what is basically Discord or TeamSpeak, so I did some more + Googling. +

+

How can I do it for Factorio?

+

+ Googling around, the only mention I could find of Factorio and + proximity voice chat was a single + Reddit thread. +

+

+ Screenshot of Reddit
+          thread. Title: +

+

+ Without this thread, I don't think I would have started trying to + make a Factorio proximity chat mod. But, with the thread, I had some + leads. + Faxxobeat made me + aware that Mumble - an open + source voice chat client (like Discord or TeamSpeak) - had support for + "positional audio" via "plugins". There were + already + plugins for many games + and lots of documentation on PA (Positional Audio). This sounded like + an approachable plan, since this way all I had to do to implement + proximity chat in Factorio was make a plugin for Mumble, which would + handle the rest of the voice chat. And, reading the + requirements for a Mumble plugin, I just had to write a plugin which gave Mumble the player position, + player name and the current game server. It seemed "easy + enough". +

+

Using Mumble

+

+ I found a lot of different documentation for Mumble and + Mumble's PA. There was a + wiki, a + website, and + some markdown files. These were, respectively: outdated with a banner saying as such; + outdated with no such information; and up-to-date. Initially, I did + not find the third guide (the up to date one), so naturally after + seeing the wiki was outdated, I used the second, outdated (unbeknownst + to me at the time) guide. This had several pages: +

+ +

+ That's a lot of docs. The guide above is + very comprehensive, so I tried to follow it. However, as I + said, it was outdated. Having followed links from the wiki which said + "the wiki is outdated, please use the website", the + potential that the website was outdated was not on my radar, so I + ploughed on. +

+

Memory hacking?

+

+ The plugin guide leads you through creating a plugin which searches a + game's memory for memory addresses of the player position and + other variables. I attempted this a little with Cheat Engine, but it + led nowhere for Factorio. As I could've learnt by reading the + Reddit thread + I already found: Factorio does not use static memory addresses for + player data. Thus, I could not use memory hacking to make a plugin. +

+ +

+ The next option was the + link plugin, which works generically for any game. This is meant to be for the + developers of the game to implement themselves (by providing some + known-location memory addresses which are updated with player position + data, which Mumble can then find), but I also thought that it could be + possible to make a mod which does similar (at game startup: write + position data to memory and keep it updated when playing). +

+

+ Factorio provides a modding API, using Lua, making everyone's + lives easier when it comes to modding, as you can just write a mod in + Lua, and it should stay compatible with small game updates. This seems + much more fun than other ecosystems like Minecraft where + mods become + unplayable + because they have to be + updated for + each version of + the game that + releases. Since + I wanted whatever I made to be long-lasting, I wanted to use the + official modding API. This meant using Lua. Everything that I could do + with code was now described by the + Factorio API Docs. + Unfortunately, playing with memory was not on this list, so using the + Link plugin was also not possible. +

+

Using the filesystem?

+

+ My final idea was that I could make a simple Factorio mod in Lua which + writes the position of the player to a file, and then I could write a + Mumble plugin in C which looks for and reads this file, exposing the + data to Mumble's Positional Audio system. This would mean that to + use the plugin, you need to install two things: the Factorio mod; and + the Mumble plugin, but it also made the connection between Mumble and + Factorio minimal, as either the mod or plugin could be easily changed + without needing to change the other, since they were only interacting + via file write or file read. +

+

+ At this point, I had popped my head into the Mumble Matrix chat via a + link I found on the website + and chatted with some developers about making the plugin. Thankfully, + this is when I found out that I'd been following an outdated + guide, and was pointed to the most recent, updated, and clear + markdown documentation. +

+

Making the Factorio Mod

+

+ The brief was clear: make a mod which took the player position, and + write it to a file. +

+

+ I had never modded Factorio or used Lua before, so I read some + Factorio modding tutorial + and read about Lua too. +

+

+ Then, I joined the + Factorio discord to + ask how I could go about doing what I wanted. Less than 30 minutes¹ + after my initial message, a user, + Xorimuth, told + me that you could write files with Factorio's + write_file + function, and provided a code snippet to do what I wanted: +

+
script.on_nth_tick(30, function()
   for _, player in pairs(game.connected_players) do
     game.write_file("player_position.txt", serpent.dump(player.position), false, player.index)
   end
 end)
 
-

This, basically, was the finished Factorio mod. I made some small changes and re-formatted it and the whole Factorio mod is one script and 12 lines:

-
script.on_nth_tick(5, function()
+        

+ This, basically, was the finished Factorio mod. I made some small + changes and re-formatted it and the whole Factorio mod is one script + and 12 lines: +

+
script.on_nth_tick(5, function()
     for index, player in pairs(game.connected_players) do
         local info = "XYZ, Player, sUrface, Server\n" .. 
                "x: " .. player.position.x .. "\n" .. 
@@ -192,13 +494,22 @@ 

Making the Factorio Mod

end end)
-
+
+

+ In Lua, .. concatenates strings and whitespace is + ignored. Fun :). +

+
-

In Lua, .. concatenates strings and whitespace is ignored. Fun :).

-
- -

Every 1/12 of a second (5 ticks), this outputs something a text file into Factorio's script-output folder that looks like:

-
XYZ, Player, sUrface, Server
+        

+ Every 1/12 of a second (5 ticks), this outputs something a text file + into + Factorio's script-output folder + that looks like: +

+
XYZ, Player, sUrface, Server
 x: -54.8046875
 y: 71.08203125
 z: 0
@@ -206,26 +517,97 @@ 

Making the Factorio Mod

u: 1 s: alifeee
-
- -

You may complain at me for sUrface, but I think it's neat.

-
+
+

+ You may complain at me for sUrface, but + I think it's neat. +

+
-

That's it! Now for the Mumble plugin. I'm sure it will definitely be as easy and not take much, much longer.

-

Making the Mumble Plugin

-

After finding the up-to-date documentation for-real-this-time, I also found the Mumble plugin template. This was a simple implementation of a Mumble plugin, with the latest API, written in C. In theory, it was possible to use C++ or Rust to write the plugin, but to keep it simple, I decided to keep to C. I had also found that there was a Positional Audio Helper, which was only available in the pre-release of Mumble, version 1.5, so I installed that (which will come back to bite me, as you will see...). The helper showed all the data involved with positional audio:

-

Screenshot of Mumble PA helper, showing lots of debug information including player and camera positions.

-
- -

PA uses: position (where you are), direction (which way you're facing) and axis (which way you're leaning, for games with leaning) for the player and the camera; Context (usually a server ID) to determine if the players are in the same game-server; and Identity (usually player ID) to tell players apart. If your context is the same as another person's, you will hear them based on where they are in the game. Positional audio!

-
+

+ That's it! Now for the Mumble plugin. I'm sure it will + definitely be as easy and not take much, much longer. +

+

Making the Mumble Plugin

+

+ After finding the up-to-date documentation for-real-this-time, I also + found the + Mumble plugin template. This was a simple implementation of a Mumble plugin, with the + latest API, written in C. In theory, it was + possible to use C++ or Rust + to write the plugin, but to keep it simple, I decided to keep to C. I + had also found that there was a + Positional Audio Helper, which was only available in the pre-release of Mumble, + version 1.5, so I installed that (which will come back to bite me, as you will + see...). The helper showed all the data involved with positional + audio: +

+

+ Screenshot of Mumble PA helper, showing lots of debug information including player and camera positions. +

+
+

+ PA uses: position (where you are), + direction (which way you're facing) and + axis (which way you're leaning, for games with + leaning) for the player and the camera; + Context (usually a server ID) to determine if the + players are in the same game-server; and + Identity (usually player ID) to tell players apart. If + your context is the same as another person's, you will hear them + based on where they are in the game. Positional audio! +

+
-

Now, I had a debug window showing lots of 0s that I needed to put values in, and a well-described plugin API, so I forked the Mumble plugin template and started developing.

-

Build the C files

-

First, I had to be able to build the plugin. After screwing around for too long installing GCC I decided to just use GitHub Actions to build the C file, as I found an official template for building multi-platform C and C++ projects. This built the plugin for Linux and Windows whenever I pushed to the repository. I also was able to build the plugin with GCC, for Linux, on WSL, but I hadn't managed to install it for Windows yet, and had to wait several minutes for the action to complete if I wanted a Windows version. This worked fine initially, as I mostly was writing and testing C code on Linux, then I would copy it into the main plugin file if I wanted to try it on Windows. Because I was just reading and writing a file initially, it didn't matter whether I was writing on Windows or Linux. At least, not until I wanted to test it at the same time as playing Factorio.

-

Bundle the plugin

-

Next, I wanted to make the plugin installable using the Mumble UI. Following the bundling guide, this involved writing a manifest.xml file

-
<?xml version="1.0" encoding="UTF-8"?>
+        

+ Now, I had a debug window showing lots of 0s that I needed to put + values in, and a well-described plugin API, so I forked the + Mumble plugin template + and started developing. +

+

Build the C files

+

+ First, I had to be able to build the plugin. After screwing around for + too long installing GCC I decided + to just use GitHub Actions to build the C file, as I found an + official template for building multi-platform C and C++ projects. This built the plugin for Linux and Windows whenever I pushed to + the repository. I also was able to build the plugin with GCC, for + Linux, on WSL, but I hadn't managed to install it for Windows yet, + and had to wait several minutes for the action to complete if I wanted + a Windows version. This worked fine initially, as I mostly was writing + and testing C code on Linux, then I would copy it into the main plugin + file if I wanted to try it on Windows. Because I was just reading and + writing a file initially, it didn't matter whether I was writing + on Windows or Linux. At least, not until I wanted to test it at the + same time as playing Factorio. +

+

Bundle the plugin

+

+ Next, I wanted to make the plugin installable using the Mumble UI. + Following + the bundling guide, this involved writing a manifest.xml file +

+
<?xml version="1.0" encoding="UTF-8"?>
 <bundle version="1.0.0">
   <assets>
     <plugin os="windows" arch="x64">plugin.dll</plugin>
@@ -235,22 +617,39 @@ 

Bundle the plugin

<version>1.0.0</version> </bundle>
-

...and then zipping the built C files and manifest.xml file, and renaming the file to end in .mumble_plugin. This is well summarised by the GitHub workflow that does exactly that:

-
- name: Bundle
+        

+ ...and then zipping the built C files and + manifest.xml file, and renaming the file to end in + .mumble_plugin. This is well summarised by the + GitHub workflow that does exactly that: +

+
- name: Bundle
   run: |
     mv build/libfactorio_linux_x86_64.so libplugin.so
     mv build/Release/plugin.dll plugin.dll
     mv mumble/manifest.xml manifest.xml
     zip -MM factorio.mumble_plugin manifest.xml libplugin.so plugin.dll
 
-
- -

Every character has a story. Here, the story is that little -MM. Without it, zip ignored any missing files. I spent a while wondering why my plugin didn't work before realising that manifest.xml didn't exist, and zip was just happily ignoring that fact.

-
+
+

+ Every character has a story. Here, the story is that little + -MM. Without it, zip ignored any missing + files. I spent a while wondering why my plugin didn't work + before realising that manifest.xml didn't exist, + and zip was just happily ignoring that fact. +

+
-

Spit out random data

-

The function that Mumble calls to get positional data is mumble_fetchPositionalData. To check it worked before I carried on, I first output random data to see it in the helper.

-
bool mumble_fetchPositionalData(float *avatarPos, float *avatarDir, float *avatarAxis, float *cameraPos, float *cameraDir, float *cameraAxis, const char **context, const char **identity)
+        

Spit out random data

+

+ The function that Mumble calls to get positional data is + mumble_fetchPositionalData. To check it worked before I + carried on, I first output random data to see it in the helper. +

+
bool mumble_fetchPositionalData(float *avatarPos, float *avatarDir, float *avatarAxis, float *cameraPos, float *cameraDir, float *cameraAxis, const char **context, const char **identity)
 {
   avatarPos[0] = 0.01f + ((float)rand() / (float)RAND_MAX) * 0.01f;
   avatarPos[1] = 0.01f + ((float)rand() / (float)RAND_MAX) * 0.01f;
@@ -261,12 +660,29 @@ 

Spit out random data

return true; }
-

This worked great!

-

Screenshot of x, y, z coordinates in the PA Viewer, showing random data

-

Now I had remembered how C works, and had a better grasp of the Mumble API, I could start attaching the plugin to Factorio.

-

Only run when Factorio.exe is running

-

At this stage, the plugin was always active. The first integration step was to get it to only activate if Factorio.exe was running. Mumble occasionally calls mumble_initPositionalData for each installed plugin to see if they should begin. In this case, we should begin (return OK) if the game is open.

-
uint8_t mumble_initPositionalData(const char *const *programNames, const uint64_t *programPIDs, size_t programCount)
+        

This worked great!

+

+ Screenshot of x, y, z coordinates in the PA Viewer, showing random data +

+

+ Now I had remembered how C works, and had a better grasp of the Mumble + API, I could start attaching the plugin to Factorio. +

+

+ Only run when Factorio.exe is running +

+

+ At this stage, the plugin was always active. The first integration + step was to get it to only activate if Factorio.exe was + running. Mumble occasionally calls + mumble_initPositionalData for each installed plugin to + see if they should begin. In this case, we should begin (return OK) if + the game is open. +

+
uint8_t mumble_initPositionalData(const char *const *programNames, const uint64_t *programPIDs, size_t programCount)
 {
   // programNames is a list of, e.g., ["Notion.exe", "System", "firefox.exe", "factorio.exe"]
   // loop through programs, if FACTORIO_EXE is found, return MUMBLE_PDEC_OK
@@ -289,9 +705,12 @@ 

Only run when Factorio.exe

-

Parse the Factorio log file

-

To get the data from the text file, it has to be parsed. This is done with this code

-
int parse_factorio_logfile(float *x, float *y, float *z, int *player, int *surface, char **server, size_t *server_len, int *error)
+        

Parse the Factorio log file

+

+ To get the data from the text file, it has to be parsed. This is done + with this code +

+
int parse_factorio_logfile(float *x, float *y, float *z, int *player, int *surface, char **server, size_t *server_len, int *error)
 {
   f_data = c_read_file(factorioLogfile, &err, &f_size);
 
@@ -328,14 +747,27 @@ 

Parse the Factorio log file

} }
-
+
+

+ There's some funky C stuff going on here. Functions can't + return multiple values, so the function arguments are pointers which + are edited (a way of getting data from a function). + strtok is another weird one, which splits strings on a + value, requiring you to sometimes give the first argument + NULL for it to return the second or + third split. +

+
-

There's some funky C stuff going on here. Functions can't return multiple values, so the function arguments are pointers which are edited (a way of getting data from a function). strtok is another weird one, which splits strings on a value, requiring you to sometimes give the first argument NULL for it to return the second or third split.

-
- -

Check the log file exists

-

At this point, the plugin would now see Factorio.exe and immediately try to open the log file. Problem is: it might not be there; if the user hasn't installed the Factorio mod yet, or not loaded a save. To protect against this, I wrote some C to check if the file exists before opening it

-
int file_exists(const char *fname)
+        

Check the log file exists

+

+ At this point, the plugin would now see Factorio.exe and + immediately try to open the log file. Problem is: it might not be + there; if the user hasn't installed the Factorio mod yet, or not + loaded a save. To protect against this, I wrote some C to check if the + file exists before opening it +

+
int file_exists(const char *fname)
 {
   FILE *file;
   if ((file = fopen(fname, "r")))
@@ -346,53 +778,188 @@ 

Check the log file exists

return 0; }
-

Check the log file is recent

-

The final issue I considered was that the plugin would still see the log file if you quit a game to the main menu. This would mean that you would still hear people from the most recent server you were connected to. To solve this, I wanted to either blank the log file, or write different data to it when you quit a server. However, Factorio doesn't allow executing code on exiting a save. So, my rudimentary solution was to just only enable the plugin if the log file was written recently. This way, when you quit, the file grows stale so is no longer used. I did this with a fairly simple C function (here, simple stands for "short" and not "the code is understandable")

-
time_t get_file_modified_time(char *path)
+        

Check the log file is recent

+

+ The final issue I considered was that the plugin would still see the + log file if you quit a game to the main menu. This would mean that you + would still hear people from the most recent server you were connected + to. To solve this, I wanted to either blank the log file, or write + different data to it when you quit a server. However, Factorio + doesn't allow + executing code on exiting a save. So, my rudimentary solution was to + just only enable the plugin if the log file was written recently. This + way, when you quit, the file grows stale so is no longer used. I did + this with a fairly simple C function (here, simple stands for + "short" and not "the code is + understandable") +

+
time_t get_file_modified_time(char *path)
 {
   struct stat attr;
   stat(path, &attr);
   return attr.st_mtime;
 }
 
-

Build it on Windows

-

At this point, I’d only been able to compile the code locally on Linux (via WSL). For Windows, I used GitHub actions. This was possible as I didn’t yet need to test it with Mumble, as it was mainly just opening and parsing a file, which could be done on Linux. However, I use Windows for both Factorio and Mumble. Building via Actions took around 5 minutes; I wanted to be able to compile locally for a quicker development cycle. This was ultimately a pain as I didn’t want to install Visual Studio on my (not-a-lot-of-space) laptop, so I tried to install GCC for windows, which had many issues. I ended up finding that you could install Visual Studio build tools and use it from the CLI.

-

Screenshot of Visual Studio Build Tools installer

-
- -

Installing Visual Studio Build Tools. I've never seen so many installation options or checkboxes than in the Visual Studio installer (which is an entire program in itself).

-
+

Build it on Windows

+

+ At this point, I’d only been able to compile the code locally on Linux + (via WSL). For Windows, I used GitHub actions. This was possible as I + didn’t yet need to test it with Mumble, as it was mainly just opening + and parsing a file, which could be done on Linux. However, I use + Windows for both Factorio and Mumble. Building via Actions took around + 5 minutes; I wanted to be able to compile locally for a quicker + development cycle. This was ultimately a pain as I didn’t want to + install Visual Studio on my (not-a-lot-of-space) laptop, so I tried to + install GCC for windows, which had many issues. I ended up finding + that you could install Visual Studio build tools and use it from the + CLI. +

+

+ Screenshot of Visual Studio Build Tools installer +

+
+

+ Installing Visual Studio Build Tools. I've never seen so many + installation options or checkboxes than in the Visual Studio + installer (which is an entire program in itself). +

+
-

After adding a bunch of functions which were available on Linux but missing on Windows, I could now build the mumble plugin locally on Windows. With one command I could build, and package the code into factorio.mumble_plugin, so I could quickly change the code and reinstall it.

-
cmake -S .\mumble\ -B .\build\ -DCMAKE_C_COMPILER=cl; cmake --build .\build\ --config Release; bash package_windows.sh
+        

+ After adding a bunch of functions which were available on Linux but + missing on Windows, I could now build the mumble plugin locally on + Windows. With + one command + I could build, and package the code into + factorio.mumble_plugin, so I could quickly change the + code and reinstall it. +

+
cmake -S .\mumble\ -B .\build\ -DCMAKE_C_COMPILER=cl; cmake --build .\build\ --config Release; bash package_windows.sh
 
-
The build and package command for Windows Powershell
+
+ The build and package command for Windows Powershell +
-

It works! (for a bit)

-

Now, I had followed the steps that I dreamt up and had a Factorio mod which wrote the player position to a file, and a Mumble plugin which read from that file, parsed the position, and gave it to Mumble. Opening Factorio and Mumble at the same time, it worked!

-

Left: Factorio. Right: Mumble PA helper displaying positional information

-
- -

The PA helper shows me as in-game, and correctly displays my position!

-
- -

There was only one small, tiny, nagging issue.

-

Every time I started it, Mumble crashed after 10 or so seconds.

-

Screenshot of Mumble crash report

-
+

It works! (for a bit)

+

+ Now, I had followed the steps that I dreamt up and had a Factorio mod + which wrote the player position to a file, and a Mumble plugin which + read from that file, parsed the position, and gave it to Mumble. + Opening Factorio and Mumble at the same time, it worked! +

+

+ Left: Factorio. Right: Mumble PA helper displaying positional information +

+
+

+ The PA helper shows me as in-game, and correctly displays my + position! +

+
-

:(

-
+

There was only one small, tiny, nagging issue.

+

Every time I started it, Mumble crashed after 10 or so seconds.

+

+ Screenshot of Mumble crash report +

+
+

:(

+
-

This was the first point at which I didn't know what was going on. Initially, I thought there may be problems with file reading/writing at the same time. That is, that Factorio would write a file in the middle of Mumble trying to read it. So, I tried to fix it by reducing the read-time of the file, and by returning an error if the file was changed midway through reading it. This didn't fix it: it was still crashing. I had now run out of guesses for why.

-

In its current implementation, the code tried to read the file, and if it failed to read it, did nothing. If the file was there and was opened with no issue, then it continued as normal. So what caused the crash?

-

After many days of thinking and a few hours of debugging, most of which I've forgotten what I tried, I eventually just started printing out the log file and watching it with my eyes. It looked normal, apart from it was supposed to print every 12th of a second, and the rhythm was slightly off (you can tell how long I sat watching scrolling text). This was when I realised I probably should have been printing a header, or something in-between prints, because what was happening was that sometimes the file was empty. I am still not sure why this is the case, but I assume it is something to do with Factorio falling behind on code execution, so rather than waiting, it just writes an empty file and moves on to the next task.

-

This, naturally, meant that the C code tried to find the "x: " row, failed, and crashed (perhaps there's also something to say here about my error handling while parsing the file...). I added a catch for if the file was empty and rebuilt the plugin.

-

It works! (weirdly)

-

Now it wasn't crashing, I could test the whole reason for making this: the voice chat! I found a friend, called "a game dev who hates their corporate job" [sic], and we hopped in a game together, installed the mod and plugin, and started monologuing (the sound-test type, not the vanity type).

-

After a lot of running around and a lot of mental gymnastics, we figured out that it 'sort of' worked. This is a synonym for 'didn't work but spicily'. We found that our 'ears' were stuck at the map origin, (0, 0), and our 'mouths' were attached to our players. This meant that if one of us stood in the centre of the map, and the other walked around, proximity chat worked as expected (their volume decreased, and they came out of the left/right headphones), but if we both walked around, we could still hear each other as if we were stood still at (0, 0).

-

To be honest, I still can't explain how this happens, but I already had a suspicion why: because I hadn't actually thought about Mumble's coordinate system. I just plugged Factorio's x and y coordinates into Mumble's. After reading Mumble's documentation, I came up with a transform from Factorio to Mumble coordinates and rewrote the code.

-
// Factorio coordinates are:
+        

+ This was the first point at which I didn't know what was going on. + Initially, I thought there may be problems with file reading/writing + at the same time. That is, that Factorio would write a file in the + middle of Mumble trying to read it. So, I + tried to fix it + by reducing the read-time of the file, and by returning an error if + the file was changed midway through reading it. This didn't fix + it: it was still crashing. I had now run out of guesses for why. +

+

+ In its current implementation, the code tried to read the file, and if + it failed to read it, did nothing. If the file was there and was + opened with no issue, then it continued as normal. So what caused the + crash? +

+

+ After many days of thinking and a few hours of debugging, most of + which I've forgotten what I tried, I eventually just started + printing out the log file and watching it with my eyes. It looked + normal, apart from it was supposed to print every 12th of a second, + and the rhythm was slightly off (you can tell how long I sat watching + scrolling text). This was when I realised I probably should have been + printing a header, or something in-between prints, because what was + happening was that sometimes the file was empty. I am still + not sure why this is the case, but I assume it is something to do with + Factorio falling behind on code execution, so rather than waiting, it + just writes an empty file and moves on to the next task. +

+

+ This, naturally, meant that the C code tried to find the + "x: " row, failed, and crashed (perhaps + there's also something to say here about my error handling while + parsing the file...). I + added a catch + for if the file was empty and rebuilt the plugin. +

+

It works! (weirdly)

+

+ Now it wasn't crashing, I could test the whole reason for making + this: the voice chat! I found a friend, called "a game dev who + hates their corporate job" [sic], and we hopped in a game + together, installed the mod and plugin, and started monologuing (the + sound-test type, not the vanity type). +

+

+ After a lot of running around and a lot of mental gymnastics, we + figured out that it 'sort of' worked. This is a synonym for + 'didn't work but spicily'. We found that our + 'ears' were stuck at the map origin, (0, 0), and + our 'mouths' were attached to our players. This meant that if + one of us stood in the centre of the map, and the other walked around, + proximity chat worked as expected (their volume decreased, and they + came out of the left/right headphones), but if we both walked around, + we could still hear each other as if we were stood still at + (0, 0). +

+

+ To be honest, I still can't explain how this happens, but I + already had a suspicion why: because I hadn't actually thought + about Mumble's coordinate system. I just plugged Factorio's + x and y coordinates into Mumble's. After + reading + Mumble's documentation, I came up with a transform from Factorio to Mumble coordinates and + rewrote the code. +

+
// Factorio coordinates are:
 // x: east- west+
 // y: north- south+
 
@@ -406,58 +973,154 @@ 

It works! (weirdly)

// y: Factorio z // z: Factorio -y
-

The final issue I had was that on Mumble 1.5 (experimental release), the voice chat volume never went silent, no matter how far away someone was. However, this was an issue with Mumble, and already known about. This meant that we had to use Mumble 1.4. The negative with that was that there was no PA Viewer, but since the plugin was already made, that was fine enough. It would just require reinstalling Mumble 1.5 to debug it again.

-

It works! (actually)

-

After all that, it worked!

-

Screenshot. Left: Factorio. Right: Mumble with PA helper, displaying correct coordinates

-
- -

This time the coordinates are correct!

-
+

+ The final issue I had was that on Mumble 1.5 (experimental release), + the voice chat volume never went silent, no matter how far away + someone was. However, this was an issue with Mumble, and + already known about. This meant that we had to use Mumble 1.4. The negative with that + was that there was no PA Viewer, but since the plugin was already + made, that was fine enough. It would just require reinstalling Mumble + 1.5 to debug it again. +

+

It works! (actually)

+

After all that, it worked!

+

+ Screenshot. Left: Factorio. Right: Mumble with PA helper, displaying correct coordinates +

+
+

This time the coordinates are correct!

+
-

The only further thing I did was grab two more friends to play a four-player game of Factorio for 20 minutes to test the entire process in-situ. This worked great! We could hear each other when close, and could do our own things in pairs!

-

I cleaned up the presentation of the project, made a logo, and made the 1.0.0 release. The mod is available on the Factorio mods website and the source code on the GitHub :)

-

Screenshot of mod from Factorio mod portal

-

Conclusion

-

To wrap things up, I also commented on the original Reddit thread telling the author I'd made the mod.

-

The only thing left to do now is... play the game! As mentioned in the introduction, I hope to play a 'big game' of Factorio, which should be helped greatly by the option of proximity-based voice chat.

-

As of writing, there are six open issues on the GitHub, so... still lots to do! This was a fun project to create, and I've definitely learnt a lot. [Other conclusionary remarks redacted]

-

Go forth and chat!

-

People who helped

-

Lots of people helped me make this! As well as the standard anonymous forum people who provided C functions, help, and debugging ideas, I had a lot of help from others. Here are some!

-

Everyone's help was invaluable, and I wouldn't have been developing this if not for it :)

-

Testing it works!

-
    -
  • A game dev who hates their corporate job [sic]
  • -
  • Roberto
  • -
  • Branton
  • -
-

Reddit thread

- -

Factorio discord

-
    -
  • Xorimuth
  • -
  • justarandomgeek
  • -
  • Solonarv, Mernom, Danielv123
  • -
-

Mumble Matrix

-
    -
  • @davidebeatrici
  • -
  • @hartmnt
  • -
  • @krzmbrzl_raven
  • -
- - +

+ The only further thing I did was grab + two more friends to play a four-player + game of Factorio for 20 minutes to test the entire process in-situ. + This worked great! We could hear each other when close, and could do + our own things in pairs! +

+

+ I cleaned up the presentation of the project, made a + logo, and made the + 1.0.0 release. The mod is available on the + Factorio mods website + and the source code on + the GitHub + :) +

+

+ Screenshot of mod from Factorio mod portal +

+

Conclusion

+

+ To wrap things up, I also + commented on the original Reddit thread + telling the author I'd made the mod. +

+

+ The only thing left to do now is... play the game! As mentioned in the + introduction, I hope to play a 'big game' of Factorio, which + should be helped greatly by the option of proximity-based voice chat. +

+

+ As of writing, there are six + open issues + on the GitHub, so... still lots to do! This was a fun project to + create, and I've definitely learnt a lot. [Other conclusionary + remarks redacted] +

+

Go forth and chat!

+

People who helped

+

+ Lots of people helped me make this! As well as the standard anonymous + forum people who provided C functions, help, and debugging ideas, I + had a lot of help from others. Here are some! +

+

+ Everyone's help was invaluable, and I wouldn't have been + developing this if not for it :) +

+

Testing it works!

+
    +
  • A game dev who hates their corporate job [sic]
  • +
  • Roberto
  • +
  • Branton
  • +
+

+ Reddit thread + +

+ +

+ Factorio discord +

+
    +
  • Xorimuth
  • +
  • justarandomgeek
  • +
  • Solonarv, Mernom, Danielv123
  • +
+

+ Mumble Matrix + +

+
    +
  • @davidebeatrici
  • +
  • @hartmnt
  • +
  • @krzmbrzl_raven
  • +
+ +

@@ -465,7 +1128,7 @@

Comments

Email me → - alifeee.web@outlook.com + alifeee@alifeee.net :)

@@ -485,7 +1148,7 @@

Comments

_Linktree_ Linktree - + _Email_ Email diff --git a/font-workshop/index.html b/font-workshop/index.html index 162151f..bc8c8c1 100644 --- a/font-workshop/index.html +++ b/font-workshop/index.html @@ -113,88 +113,221 @@

alifeee's blog

-

I ran a computer font-making workshop!

-

-

This week I ran a computer font-making workshop at my local hackspace. It was a bunch of fun, and I really enjoyed seeing the creativity come out of people via the medium of creating typefaces :)

-

Why?

-

I like fonts

-

Who, Where, When?

-

I ran the workshop at my local hackspace. I'd seen that they had run workshops before on knife-making and other things, and I thought it would be neat if I did something similarly collective. Often, people are together at the hackspace, which I enjoy in and of itself. But, it is extra neat if people can be together and all be working on similar things.

-

About three or four weeks ago, I decided to just "do it", and I made up a sign and put it up at the hackspace.

-

Hand-drawn sign saying

-
- -

Some have pointed out an irony that a poster for a computer font workshop was handwritten...

-
- -

As far as I was concerned, "a workshop" was not really an established idea. But that's part of the reason I like community spaces like the hackspace: I can pretend something is an established idea and people will believe it is.

-

I didn't start with a great plan, but rather started by motivating myself to create a plan (by putting up the poster). This turned out to be a nice method of motivation, as I had set a date for my "workshop", which forced me to consider what a "workshop" would involve.

-

What does a workshop involve?

-

I ended up giving a short presentation about why I like fonts, some things to think about when designing a font, and an overview of how to use FontForge, which is the program that I made BogFace in.

-

The presentation

-

I thought about using Google Slides to make a presentation. However, you can't use custom fonts, which was... kind of a killer for a font workshop.

-

I went with RevealJS, which I had seen one of my computer-loving lecturers use at university. It's quite neat to use, mainly because everything is written in HTML. I guess I am fate-bound to never use a WYSIWYG editor again.

-

The presentation is hosted at https://alifeee.co.uk/font-workshop/, but since it is a website, I can also embed it here! Have a scuttle around (press space to slow down progress.)

- - -
- -

If I do another workshop in the future, I will probably update this a bit, and this embed would change :)

-
- -

What people made

-

I helped five people make their own fonts. Each one went about it quite (or slightly, depending on how much you care about fonts) differently.

-

No method was wrong. Some methods were slower, fostering - I think - more appreciation for digital graphic work. All methods were very creative, and it was great to see different ways people went about making a font.

-

Described briefly, and each description written in their own font, here are the ways people created their fonts:

-

(Some are incomplete. Some will be updated as time passes.)

-
- -

Auto-traced handwriting

-

Tanya¹ did what many designate the "classic move" in font-making: they made a handwriting font.

-

The method was to draw the letters a through z on paper and take a picture of it. Then, each letter was isolated into a bitmap image of each letter. potrace was used to convert the bitmap images into SVG images, which were then imported into FontForge, where they could be resized and moved around to look good.

-
- -
- -

Manually traced hand-designed letters

-

Ivanka¹ drew some guidelines on paper, and designed and drew block letters on the sheet. Then, they took a picture of the hand-drawn letters and digitised them manually, using the vector tools in FontForge.

-
- -
- -

Designed a Morse code font

-

Dragomir¹ designed a Morse font. You are reading it now.

-
- -
- -

Digitally designed letter forms

-

Katya¹ designed their letter forms entirely digitally, within FontForge. After a few, they were able to copy stylistic parts of letters to other letters, such as the caps of "b" and "d".

-
- -
- -

Stroke-expanded lines drawn via touchscreen

-

Tomislav¹ used their touchscreen laptop to draw the letters with a single stroke, and then used FontForge's "Expand Stroke" to turn the one-dimensional drawings into two-dimensional vector shapes.

-
- -

I'd love to do another workshop!

-

I had a lot of fun helping people make fonts, through thinking about design to how to practically using tools. It was very interesting and cool to me that each person involved made their font differently.

-

In terms of how I ran it, and my presentation, I have some ideas of how to make things clearer and easier to understand.

-

It was very fun to do, and I'd love to run another font workshop!

-

Resources

- -

Footnotes

- +

+ I ran a computer font-making workshop! +

+

+

+ This week I ran a computer font-making workshop at my local hackspace. + It was a bunch of fun, and I really enjoyed seeing the creativity come + out of people via the medium of creating typefaces :) +

+

Why?

+

I like fonts

+

Who, Where, When?

+

+ I ran the workshop at my local hackspace. I'd seen that they had + run workshops before on knife-making and other things, and I thought + it would be neat if I did something similarly collective. Often, + people are together at the hackspace, which I + enjoy in and of itself. But, + it is extra neat if people can be together and all be working on + similar things. +

+

+ About three or four weeks ago, I decided to just "do it", + and I made up a sign and put it up at the hackspace. +

+

+ Hand-drawn sign saying
+          +

+
+

+ Some have pointed out an irony that a poster for a computer font + workshop was handwritten... +

+
+ +

+ As far as I was concerned, "a workshop" was not really an + established idea. But that's part of the reason I like community + spaces like the hackspace: I can pretend something is an established + idea and people will believe it is. +

+

+ I didn't start with a great plan, but rather started by motivating + myself to create a plan (by putting up the poster). This turned out to + be a nice method of motivation, as I had set a date for my + "workshop", which forced me to consider what a + "workshop" would involve. +

+

What does a workshop involve?

+

+ I ended up giving a short presentation about why I like fonts, some + things to think about when designing a font, and an overview of how to + use FontForge, which is the program + that I made BogFace in. +

+

The presentation

+

+ I thought about using Google Slides to make a presentation. However, + you can't use custom fonts, which was... kind of a killer for a + font workshop. +

+

+ I went with RevealJS, which I had + seen one of my computer-loving lecturers use at university. It's + quite neat to use, mainly because everything is written in HTML. I + guess I am fate-bound to never use a WYSIWYG editor again. +

+

+ The presentation is hosted at + https://alifeee.co.uk/font-workshop/, but since it is a website, I can also embed it here! Have a scuttle + around (press space to slow down progress.) +

+ + +
+

+ If I do another workshop in the future, I will probably update this + a bit, and this embed would change :) +

+
+ +

What people made

+

+ I helped five people make their own fonts. Each one went about it + quite (or slightly, depending on how much you care about fonts) + differently. +

+

+ No method was wrong. Some methods were slower, fostering - I think - + more appreciation for digital graphic work. All methods were very + creative, and it was great to see different ways people went about + making a font. +

+

+ Described briefly, and each description written in their own font, + here are the ways people created their fonts: +

+

(Some are incomplete. Some will be updated as time passes.)

+
+

Auto-traced handwriting

+

+ Tanya¹ did what many designate the + "classic move" in font-making: they made a handwriting + font. +

+

+ The method was to draw the letters a through z on paper and take a + picture of it. Then, each letter was isolated into a bitmap image of + each letter. + potrace was used to + convert the bitmap images into SVG images, which were then imported + into FontForge, where they could be resized and moved around to look + good. +

+
+ +
+

+ Manually traced hand-designed letters +

+

+ Ivanka¹ drew some guidelines on paper, and + designed and drew block letters on the sheet. Then, they took a + picture of the hand-drawn letters and digitised them manually, using + the vector tools in FontForge. +

+
+ +
+

Designed a Morse code font

+

+ Dragomir¹ designed a Morse font. You are + reading it now. +

+
+ +
+

+ Digitally designed letter forms +

+

+ Katya¹ designed their letter forms entirely + digitally, within FontForge. After a few, they were able to copy + stylistic parts of letters to other letters, such as the caps of + "b" and "d". +

+
+ +
+

+ Stroke-expanded lines drawn via touchscreen +

+

+ Tomislav¹ used their touchscreen laptop to + draw the letters with a single stroke, and then used FontForge's + "Expand Stroke" + to turn the one-dimensional drawings into two-dimensional vector + shapes. +

+
+ +

+ I'd love to do another workshop! +

+

+ I had a lot of fun helping people make fonts, through thinking about + design to how to practically using tools. It was very interesting and + cool to me that each person involved made their font differently. +

+

+ In terms of how I ran it, and my presentation, I have some ideas of + how to make things clearer and easier to understand. +

+

+ It was very fun to do, and I'd love to run another font workshop! +

+

Resources

+ +

Footnotes

+

@@ -202,7 +335,7 @@

Footnotes

Comments

Email me → - alifeee.web@outlook.com + alifeee@alifeee.net :)

@@ -222,7 +355,7 @@

Comments

_Linktree_ Linktree - + _Email_ Email diff --git a/gists/index.html b/gists/index.html index 01a8651..8ba6843 100644 --- a/gists/index.html +++ b/gists/index.html @@ -98,128 +98,521 @@

alifeee's blog

-

Why I like (GitHub) gists and a short tour through ones I have created

-

-

I like sharing code and instructions. Thus, I like gists.

-
    -
  1. What are gists?
  2. -
  3. Why I like creating gists
      -
    1. I can share them with people
    2. -
    3. I can share them with myself in the future
    4. -
    5. The ramblings of my existence can end up in the same place
    6. -
    -
  4. -
  5. Why I like finding other people's gists
      -
    1. Someone else has probably done what I want to do before
    2. -
    -
  6. -
  7. I could or should put things elsewhere (not on GitHub)
  8. -
  9. My gists, or "the gist-list"
      -
    1. BLOG POSTS
        -
      1. 1. how to start blogging
      2. -
      3. 2. a hat blog
      4. -
      -
    2. -
    3. JUST DATA
        -
      1. DATA I MANUALLY MADE
          -
        1. 3. my spotify wrapped 2023
        2. -
        3. 4. a toki pona word list
        4. -
        5. 5. my vscode extension list
        6. -
        -
      2. -
      3. DATA THAT'S AUTOMATICALLY UPDATED
          -
        1. 6. my json resume
        2. -
        3. 7. my web bookmarks
        4. -
        -
      4. -
      -
    4. -
    5. HOW-TOS
        -
      1. THINGS I WANTED TO DO MULTIPLE TIMES
          -
        1. 8. how to generate and host a Factorio map
        2. -
        3. 9. how to download data from Toggl's api
        4. -
        5. 10. reusable ffmpeg commands
        6. -
        7. 11. how to make bar charts in bash
        8. -
        9. 12. how to make graphs in bash
        10. -
        -
      2. -
      3. THINGS THAT OTHER PEOPLE COULD WANT TO DO
          -
        1. 13. a script to remove all styles from an html file
        2. -
        3. 14. common RSS extensions
        4. -
        5. 15. a script to combine Squarespace RSS feeeds
        6. -
        7. 16. a script to convert font files to css styles
        8. -
        9. 17. a script to convert gpl files to css styles
        10. -
        -
      4. -
      5. HOW TO SET UP THINGS ON A LINUX SERVER
          -
        1. 18. how to set up rsa encryption keys
        2. -
        3. 19. how to set up nginx
        4. -
        5. 20. how to transfer folders over scp
        6. -
        7. 21. how to run a program as a service with systemd
        8. -
        9. 22. how to set up a mumble server
        10. -
        11. 23. how to install ruby and jekyll on linux
        12. -
        13. 24. how to set up ftp on linux
        14. -
        -
      6. -
      -
    6. -
    -
  10. -
  11. The end
  12. -
-

What are gists?

-

GitHub Gists are "some text on the Internet". Usually, people put code snippets or Markdown in them, and then can share a link to anyone. It's like Pastebin but without (explicit) ads. Here's an example gist and here's the same on Pastebin.

-

Gists can be used for blog posts, or just to share copied text, or to host a single-branch version controlled script or code snippet. They are also often used to host data which is automatically updated from elsewhere, and can be referenced as the most up-to-date version of that data, for example by ideas like https://jsonresume.org/.

-

Anyone with a GitHub account can make a gist. It's a very easy way to share nicely formatted text (for example in Markdown), which is why it's the first - and most simple - thing I suggest in my "how to blog" guide.

-

There are good reasons you may not want to support GitHub. There are other ways to share snippets, with other gist tools, Pastebin, and other options. However, a lot of other code- or text-sharing websites seem fleeting, have ads, and do not look as nice (honourable mention here to https://wormhole.app/, a website for sharing files that looks incredible.)

-

Why I like creating gists

-

I like creating gists because they make text easy to share with two groups of people. Those two groups are...

-

I can share them with people

-

The first group of people is "other people", either specifically for someone, or just information or code I share a lot, so I like having a quick link to it. Gists I've made in this category include:

-
    -
  • how to create a blog? - I share this one with people whenever they muse about blogging and talk about using some complicated- or expensive-sounding tool, to try and convince them that they need not take on such an undertaking, and can just "put text on the Internet".
  • -
  • Remove all CSS styles from HTML files with bash - this is a bash script I wrote and shared for CSS Naked Day 2024. There were lots of ways of removing styles for site-builders and site-backends, but none for pure HTML.
  • -
  • How to use Ruby and Jekyll on Linux - when I set up Jekyll to edit a website for the first time, it was really confusing, partly because I'd never used Ruby before.
  • -
-

I can share them with myself in the future

-

The second group of people is really just one person, and they are "me in the future". Most of my usage of gists has been to remember how I did some specific thing with code or how I installed something. Writing it down in the first place help future me a lot to remember, because all I have to remember is in what context I did the thing, and then I can find out exactly how by reading the gist. Some examples of gists that have been very helpful to future- (well, now past-) me are:

- -

The ramblings of my existence can end up in the same place

-

I make a lot of random scripts. In another world, they would end up either buried in random repositories on GitHub, or buried in random folders on my computer or laptop. They would get lost.

-

Gists make it easy to paste a script somewhere, and then find it later, as they are all (I'm sure much to GitHub's enjoyment) in the same place.

-

Why I like finding other people's gists

-

More than just being able to share my own code, I like gists because other people have the same ideas as me!

-

Someone else has probably done what I want to do before

-

If I'd like to accomplish a small scripting task, understand something self-contained, or find a code snippet for a specific task, I often search for it on the web. Unfortunately, in our Lord's year 2024, pages and pages of whatever search I make are mostly AI garbage (here is an article I have not read to pretend to verify my point). One help here is independent search engines like Marginalia Search or Wiby. While they are fun for exploring a more indie version of the web, I also find adding "site:gist.github.com" to my web search often results in finding exactly what I want to do.

-

For example, here is a small list of gists from my Internet history that I've found to be useful recently (and as a by-product, an eye into my life and desires for the past several months).

- -

I could or should put things elsewhere (not on GitHub)

-

The existence of GitHub in the above has mainly been a sidenote. The main thing that excites me about gists is the collaborative nature of them. This is not something that GitHub must have control over, and indeed something that they probably shouldn't have control over.

-

I've been reading recently a lot about self- or community-hosted alternatives to different things like Git servers (like sourcehut) and, I use Mastodon (talking of self-hosting, I'd like to find an instance that's not mastodon.social) a lot.

-

I could put my snippets on my website, or something more free. But, I haven't. Yet.

-

My gists, or "the gist-list"

-

The list is long. I keep comments brief. I have categorised them as to my whims. The code blocks show either the full gist, or - if you see "..." - a snippet or section of it.

-

BLOG POSTS

-

1. how to start blogging

-
# How to start blogging
+        

+ Why I like (GitHub) gists and a short tour through ones I have created +

+

+

I like sharing code and instructions. Thus, I like gists.

+
    +
  1. What are gists?
  2. +
  3. + Why I like creating gists +
      +
    1. + I can share them with people +
    2. +
    3. + I can share them with myself in the future +
    4. +
    5. + The ramblings of my existence can end up in the same place +
    6. +
    +
  4. +
  5. + Why I like finding other people's gists +
      +
    1. + Someone else has probably done what I want to do before +
    2. +
    +
  6. +
  7. + I could or should put things elsewhere (not on GitHub) +
  8. +
  9. + My gists, or "the gist-list" +
      +
    1. + BLOG POSTS +
        +
      1. + 1. how to start blogging +
      2. +
      3. 2. a hat blog
      4. +
      +
    2. +
    3. + JUST DATA +
        +
      1. + DATA I MANUALLY MADE +
          +
        1. + 3. my spotify wrapped 2023 +
        2. +
        3. + 4. a toki pona word list +
        4. +
        5. + 5. my vscode extension list +
        6. +
        +
      2. +
      3. + DATA THAT'S AUTOMATICALLY UPDATED +
          +
        1. 6. my json resume
        2. +
        3. + 7. my web bookmarks +
        4. +
        +
      4. +
      +
    4. +
    5. + HOW-TOS +
        +
      1. + THINGS I WANTED TO DO MULTIPLE TIMES +
          +
        1. + 8. how to generate and host a Factorio map +
        2. +
        3. + 9. how to download data from Toggl's api +
        4. +
        5. + 10. reusable ffmpeg commands +
        6. +
        7. + 11. how to make bar charts in bash +
        8. +
        9. + 12. how to make graphs in bash +
        10. +
        +
      2. +
      3. + THINGS THAT OTHER PEOPLE COULD WANT TO DO +
          +
        1. + 13. a script to remove all styles from an html + file +
        2. +
        3. + 14. common RSS extensions +
        4. +
        5. + 15. a script to combine Squarespace RSS feeeds +
        6. +
        7. + 16. a script to convert font files to css styles +
        8. +
        9. + 17. a script to convert gpl files to css styles +
        10. +
        +
      4. +
      5. + HOW TO SET UP THINGS ON A LINUX SERVER +
          +
        1. + 18. how to set up rsa encryption keys +
        2. +
        3. + 19. how to set up nginx +
        4. +
        5. + 20. how to transfer folders over scp +
        6. +
        7. + 21. how to run a program as a service with systemd +
        8. +
        9. + 22. how to set up a mumble server +
        10. +
        11. + 23. how to install ruby and jekyll on linux +
        12. +
        13. + 24. how to set up ftp on linux +
        14. +
        +
      6. +
      +
    6. +
    +
  10. +
  11. The end
  12. +
+

What are gists?

+

+ GitHub Gists are "some + text on the Internet". Usually, people put code snippets or + Markdown in them, and then can share a link to anyone. It's like + Pastebin but without (explicit) + ads. Here's + an example gist + and here's + the same on Pastebin. +

+

+ Gists can be used for blog posts, or just to share copied text, or to + host a single-branch version controlled script or code snippet. They + are also often used to host data which is automatically updated from + elsewhere, and can be referenced as the most up-to-date version of + that data, for example by ideas like + https://jsonresume.org/. +

+

+ Anyone with a GitHub account can make a gist. It's a very easy way + to share nicely formatted text (for example in Markdown), which is why + it's the first - and most simple - thing I suggest in my + "how to blog" guide. +

+

+ There are + good reasons + you may not want to support GitHub. There are other ways to share + snippets, with + other gist tools, + Pastebin, and other options. + However, a lot of other code- or text-sharing websites seem fleeting, + have ads, and do not look as nice (honourable mention here to + https://wormhole.app/, a website + for sharing files that looks incredible.) +

+

Why I like creating gists

+

+ I like creating gists because they make text easy to share with two + groups of people. Those two groups are... +

+

I can share them with people

+

+ The first group of people is "other people", either + specifically for someone, or just information or code I share a lot, + so I like having a quick link to it. Gists I've made in this + category include: +

+
    +
  • + how to create a blog? + - I share this one with people whenever they muse about blogging and + talk about using some complicated- or expensive-sounding tool, to + try and convince them that they need not take on such an + undertaking, and can just "put text on the Internet". +
  • +
  • + Remove all CSS styles from HTML files with bash + - this is a bash script I wrote and shared for + CSS Naked Day 2024. + There were lots of ways of removing styles for site-builders and + site-backends, but none for pure HTML. +
  • +
  • + How to use Ruby and Jekyll on Linux + - when I set up Jekyll to edit a website for the first time, it was + really confusing, partly because I'd never used Ruby before. +
  • +
+

+ I can share them with myself in the future +

+

+ The second group of people is really just one person, and they are + "me in the future". Most of my usage of gists has been to + remember how I did some specific thing with code or how I installed + something. Writing it down in the first place help future me + a lot to remember, because all I have to remember is in what + context I did the thing, and then I can find out exactly how by + reading the gist. Some examples of gists that have been very helpful + to future- (well, now past-) me are: +

+ +

+ The ramblings of my existence can end up in the same place +

+

+ I make a lot of random scripts. In another world, they would end up + either buried in random repositories on GitHub, or buried in random + folders on my computer or laptop. They would get lost. +

+

+ Gists make it easy to paste a script somewhere, and then find it + later, as they are all (I'm sure much to GitHub's enjoyment) + in the same place. +

+

+ Why I like finding other people's gists +

+

+ More than just being able to share my own code, I like gists because + other people have the same ideas as me! +

+

+ Someone else has probably done what I want to do before +

+

+ If I'd like to accomplish a small scripting task, understand + something self-contained, or find a code snippet for a specific task, + I often search for it on the web. Unfortunately, in our Lord's + year 2024, pages and pages of whatever search I make are mostly AI + garbage (here + is an article I have not read to pretend to verify my point). One help + here is independent search engines like + Marginalia Search or + Wiby. While they are fun for + exploring a more indie version of the web, I also find adding + "site:gist.github.com" to my web search often + results in finding exactly what I want to do. +

+

+ For example, here is a small list of gists from my Internet history + that I've found to be useful recently (and as a by-product, an eye + into my life and desires for the past several months). +

+ +

+ I could or should put things elsewhere (not on GitHub) +

+

+ The existence of GitHub in the above has mainly been a sidenote. The + main thing that excites me about gists is the collaborative nature of + them. This is not something that GitHub must have control over, and + indeed something that they probably shouldn't have + control over. +

+

+ I've been reading recently a lot about self- or community-hosted + alternatives to different things like Git servers (like + sourcehut) and, I use + Mastodon (talking of + self-hosting, I'd like to find an instance that's not + mastodon.social) a lot. +

+

+ I could put my snippets on my website, or something more free. But, I + haven't. Yet. +

+

+ My gists, or "the gist-list" +

+

+ The list is long. I keep comments brief. I have categorised them as to + my whims. The code blocks show either the full gist, or - if you see + "..." - a snippet or section of it. +

+

BLOG POSTS

+

+ 1. + how to start blogging +

+
# How to start blogging
 
 You might not think you should blog. I think you should.
 
@@ -240,25 +633,39 @@ 

1. 2. a hat blog

-
I love hats
+        
+

+ I created this for one person who asked me "how do I start a + blog". Since I made it a gist, I have shared it with many + people. +

+
+ +

+ 2. + a hat blog +

+
I love hats
 
 ...
 
-
- -

This is a blog about hats.

-
- -

JUST DATA

-

DATA I MANUALLY MADE

-
3. my spotify wrapped 2023
-
# ...
+        
+

This is a blog about hats.

+
+ +

JUST DATA

+

DATA I MANUALLY MADE

+
+ 3. + my spotify wrapped 2023 +
+
# ...
 [totals]
 minutes = 60_724
 songs = 7_309
@@ -269,35 +676,69 @@ 
3. TOML for lots of things around the same time Spotify Wrapped came out last year. It was fun to think of a way of putting it into TOML format. TOML is fun.

- - -
4. a toki pona word list
-
#...
+        
+

+ I started using TOML for lots of + things around the same time Spotify Wrapped came out last year. It + was fun to think of a way of putting it into TOML format. TOML is + fun. +

+
+ +
+ 4. + a toki pona word list +
+
#...
 cat words.txt | awk -F'[^a-zA-Z]' 'BEGIN {delete wds} { if (length($0) > 0 && length($0) < 10) { if (!($1 in wds)) {print $1; wds[$1]}  } }' > nimi-ale-pi-toki-pona.txt
 #...
 
-
- -

I wanted a toki pona word list for something. I can't remember what, but it was probably lipu tenpo related. I put the command and generated list into a gist because I spent some time tinkering with awk to create the command, and I was proud of it. You may spot that theme continuing on.

-
- -
5. my vscode extension list
-
{
+        
+

+ I wanted a toki pona word list + for something. I can't remember what, but it was probably + lipu tenpo related. I put the + command and generated list into a gist because I spent some time + tinkering with awk to create the command, and I was + proud of it. You may spot that theme continuing on. +

+
+ +
+ 5. + my vscode extension list +
+
{
   "name": "newprofile1",
   "extensions": "[{\"identifier\":{\"id\":\"bbenoist.doxygen\",\"uuid\":\"aab644b7-f446-4774-87fc-2cce8f0d5a4f\"}},{\"identifier\":{\"id\":\"cschlosser.doxdocgen\",\"uuid\":\"da7e26d5-d57c-4742-ab47-d77fb189e195\"},\"displayName\":\"Doxygen Documentation Generator\"},{\"identifier\":{\"id\":\"davidanson.vscode-markdownlint\",\"uuid\":\"daf8b44d-8aae-4da2-80c5-1f770219f643\"},\"displayName\":\"markdownlint\"},{\"identifier\":{\"id\":\"eamodio.gitlens\",\"uuid\":\"4de763bd-505d-4978-9575-2b7696ecf94e\"},\"displayName\":\"GitLens — Git supercharged\"},{\"identifier\":{\"id\":\"esbenp.prettier-vscode\",\"uuid\":\"96fa4707-6983-4489-b7c5-d5ffdfdcce90\"},\"displayName\":\"Prettier - Code formatter\"},{\"identifier\":{\"id\":\"formulahendry.auto-rename-tag\",\"uuid\":\"6e440e71-8ed9-4f25-bb78-4b13096b8a03\"},\"displayName\":\"Auto Rename Tag\"},{\"identifier\":{\"id\":\"github.copilot\",\"uuid\":\"23c4aeee-f844-43cd-b53e-1113e483f1a6\"},\"displayName\":\"GitHub Copilot\"},{\"identifier\":{\"id\":\"github.vscode-github-actions\",\"uuid\":\"04f49bfc-8330-4eee-8237-ea938fb755ef\"},\"displayName\":\"GitHub Actions\"},{\"identifier\":{\"id\":\"github.vscode-pull-request-github\",\"uuid\":\"69ddd764-339a-4ecc-97c1-9c4ece58e36d\"},\"displayName\":\"GitHub Pull Requests and Issues\"},{\"identifier\":{\"id\":\"jock.svg\",\"uuid\":\"4ae6dc82-7981-4f10-bd81-2d72aec37f39\"},\"displayName\":\"SVG\"},{\"identifier\":{\"id\":\"leonhard-s.python-sphinx-highlight\",\"uuid\":\"a0f17d96-c9f3-4ce4-92b7-27b8c936835b\"},\"displayName\":\"Python Sphinx Highlighter\"},{\"identifier\":{\"id\":\"mhutchie.git-graph\",\"uuid\":\"438221f8-1107-4ccd-a6fe-f3b7fe0856b7\"},\"displayName\":\"Git Graph\"},{\"identifier\":{\"id\":\"ms-python.black-formatter\",\"uuid\":\"859e640c-c157-47da-8699-9080b81c8371\"},\"displayName\":\"Black Formatter\"},{\"identifier\":{\"id\":\"ms-python.pylint\",\"uuid\":\"8dc47276-5882-4c5f-903d-7eef7b9d1584\"},\"displayName\":\"Pylint\"},{\"identifier\":{\"id\":\"ms-python.python\",\"uuid\":\"f1f59ae4-9318-4f3c-a9b5-81b2eaa5f8a5\"},\"displayName\":\"Python\"},{\"identifier\":{\"id\":\"ms-python.vscode-pylance\",\"uuid\":\"364d2426-116a-433a-a5d8-a5098dc3afbd\"},\"displayName\":\"Pylance\"},{\"identifier\":{\"id\":\"ms-toolsai.jupyter\",\"uuid\":\"6c2f1801-1e7f-45b2-9b5c-7782f1e076e8\"},\"displayName\":\"Jupyter\"},{\"identifier\":{\"id\":\"ms-toolsai.jupyter-keymap\",\"uuid\":\"9f6dc8db-620c-4844-b8c5-e74914f1be27\"},\"displayName\":\"Jupyter Keymap\"},{\"identifier\":{\"id\":\"ms-toolsai.jupyter-renderers\",\"uuid\":\"b15c72f8-d5fe-421a-a4f7-27ed9f6addbf\"},\"displayName\":\"Jupyter Notebook Renderers\"},{\"identifier\":{\"id\":\"ms-toolsai.vscode-jupyter-cell-tags\",\"uuid\":\"ab4fb32a-befb-4102-adf9-1652d0cd6a5e\"},\"displayName\":\"Jupyter Cell Tags\"},{\"identifier\":{\"id\":\"ms-toolsai.vscode-jupyter-slideshow\",\"uuid\":\"e153ca70-b543-4865-b4c5-b31d34185948\"},\"displayName\":\"Jupyter Slide Show\"},{\"identifier\":{\"id\":\"ms-vscode.cpptools\",\"uuid\":\"690b692e-e8a9-493f-b802-8089d50ac1b2\"},\"displayName\":\"C/C++\"},{\"identifier\":{\"id\":\"ms-vscode.cpptools-extension-pack\",\"uuid\":\"3957b2f6-f086-49b5-a7b4-5da772123130\"},\"displayName\":\"C/C++ Extension Pack\"},{\"identifier\":{\"id\":\"ms-vscode.cpptools-themes\",\"uuid\":\"99b17261-8f6e-45f0-9ad5-a69c6f509a4f\"},\"displayName\":\"C/C++ Themes\"},{\"identifier\":{\"id\":\"ms-vscode.powershell\",\"uuid\":\"40d39ce9-c381-47a0-80c8-a6661f731eab\"},\"displayName\":\"PowerShell\"},{\"identifier\":{\"id\":\"ms-vscode.vscode-typescript-next\",\"uuid\":\"15305aca-2588-4ca0-8147-ab2c64730b82\"},\"displayName\":\"JavaScript and TypeScript Nightly\"},{\"identifier\":{\"id\":\"mushan.vscode-paste-image\",\"uuid\":\"ffaf4ec8-f001-4f02-b671-705ecf079cde\"},\"displayName\":\"Paste Image\"},{\"identifier\":{\"id\":\"naumovs.color-highlight\",\"uuid\":\"121396ad-85a1-45ec-9fd1-d95028a847f5\"},\"displayName\":\"Color Highlight\"},{\"identifier\":{\"id\":\"njpwerner.autodocstring\",\"uuid\":\"2d6fea35-f68e-461d-9b7b-5cd05be99451\"},\"displayName\":\"autoDocstring - Python Docstring Generator\"},{\"identifier\":{\"id\":\"rangav.vscode-thunder-client\",\"uuid\":\"2fd56207-78ef-49d4-95d2-9b801eee4dbf\"},\"displayName\":\"Thunder Client\"},{\"identifier\":{\"id\":\"ritwickdey.liveserver\",\"uuid\":\"b63c44fd-0457-4696-99e9-dbfdf70d77de\"},\"displayName\":\"Live Server\"},{\"identifier\":{\"id\":\"tumido.cron-explained\",\"uuid\":\"6ee451cb-7b81-4520-9eb4-059db43a1431\"},\"displayName\":\"Cron Explained\"},{\"identifier\":{\"id\":\"usernamehw.errorlens\",\"uuid\":\"9d8c32ab-354c-4daf-a9bf-20b633734435\"},\"displayName\":\"Error Lens\"},{\"identifier\":{\"id\":\"valentjn.vscode-ltex\",\"uuid\":\"840e9c85-0e99-42ce-aa62-81088245e699\"},\"displayName\":\"LTeX – LanguageTool grammar/spell checking\"},{\"identifier\":{\"id\":\"yzhang.markdown-all-in-one\",\"uuid\":\"98790d67-10fa-497c-9113-f6c7489207b2\"},\"displayName\":\"Markdown All in One\"}]"
 }
 
-
- -

When I originally made this, it was human-readable: you could see a nice, multi-line list of my VSCode extensions. They have since changed how the export/import works, so now it looks very ugly. I no longer find this useful.

-
- -

DATA THAT'S AUTOMATICALLY UPDATED

-
6. my json resume
-
#...
+        
+

+ When I originally made this, it was human-readable: you could see a + nice, multi-line list of my VSCode extensions. They have since + changed how the export/import works, so now it looks very ugly. I no + longer find this useful. +

+
+ +

+ DATA THAT'S AUTOMATICALLY UPDATED +

+
+ 6. + my json resume +
+
#...
 "references": [
   {
     "reference": "\"This is very neat thank you for this contribution.\"",
@@ -311,13 +752,34 @@ 
6. CV repository. I used to use json-resume a bit more, but I stopped doing the themes how they did it and made it myself. I still use the schema, though, and still update this gist, so I can view my CV in many different styles. Neat!

- - -
7. my web bookmarks
-
{
+        
+

+ This is auto-updated by my + CV repository. + I used to use json-resume a + bit more, but I stopped doing the themes how they did it and made it + myself. I still use the schema, though, and still update this gist, + so I can view my CV in + many + different + styles. Neat! +

+
+ +
+ 7. + my web bookmarks +
+
{
     "last_modified": "2024-03-25T00:44:15.551843Z",
     "bookmarks": {
         "TOP 10 personal websites/blogs": [
@@ -335,16 +797,38 @@ 
7. Firefox bookmark exporter. I don't really use this gist, but I guess having the data in machine-readable format is nice. Although alifeee.co.uk/bookmarks probably already fills that role.

- - -

HOW-TOS

-

THINGS I WANTED TO DO MULTIPLE TIMES

-

Most of these gists exist because I spent a while figuring out how to do a process, and I thought that I would want to repeat the process in the future.

-
8. how to generate and host a Factorio map
-
...
+        
+

+ After making my CV automatically push to a gist, it was easy to do + similar when I was making my + Firefox bookmark exporter. I don't really use this gist, but I guess having the data in + machine-readable format is nice. Although + alifeee.co.uk/bookmarks + probably already fills that role. +

+
+ +

HOW-TOS

+

+ THINGS I WANTED TO DO MULTIPLE TIMES +

+

+ Most of these gists exist because I spent a while figuring out how to + do a process, and I thought that I would want to repeat the process in + the future. +

+
+ 8. + how to generate and host a Factorio map +
+
...
 ## To create maps
 
 With:
@@ -365,18 +849,38 @@ 
8. FactorioMaps to create an interactive map of the save after every week. You can (maybe) see the final map on https://server.alifeee.co.uk/factorio/.

-

who is it for?

-

Myself. It took a few hours to set this up the first time, and I was doing it every week, so making a gist helped me do it repeatedly and more mindlessly.

-

have I come back to it?

-

Every week for ten weeks when I was generating the maps often.

- - -
9. how to download data from Toggl's api
-
...
+        
+

why did I make it?

+

+ I played a big multiplayer Factorio world once a week for ten weeks, + and I used + FactorioMaps + to create an interactive map of the save after every week. You can + (maybe) see the final map on + https://server.alifeee.co.uk/factorio/. +

+

who is it for?

+

+ Myself. It took a few hours to set this up the first time, and I was + doing it every week, so making a gist helped me do it repeatedly and + more mindlessly. +

+

have I come back to it?

+

Every week for ten weeks when I was generating the maps often.

+
+ +
+ 9. + how to download data from Toggl's api +
+
...
 KEYS="${TOGGL_KEYS:-.id, .workspace_id, .project_id, .task_id, .billable, .start, .stop, .duration, .description, .duronly, .at, .server_deleted_at, .user_id, .uid, .wid, .pid}"
 
 # print CSV headers
@@ -385,13 +889,25 @@ 
9. https://toggl.com/. I do not pay for it, so they do not keep my data past 3 months. So, every month I download the month's data. Rather than remembering which buttons to press on the UI, I wrote a script that I can run. I thought it might be nice to accidentally come across it if you were a netizen.

- - -
10. reusable ffmpeg commands
-
# FFmpeg Commands
+        
+

+ I track time using + https://toggl.com/. I do not pay + for it, so they do not keep my data past 3 months. So, every month I + download the month's data. Rather than remembering which buttons + to press on the UI, I wrote a script that I can run. I thought it + might be nice to accidentally come across it if you were a netizen. +

+
+ +
+ 10. + reusable ffmpeg commands +
+
# FFmpeg Commands
 
 ## Turn mp4 into gif
 
@@ -401,13 +917,23 @@ 
10. 11. how to make bar charts in bash
-
...
+        
+

+ I thought I'd use this one more, but I haven't. I made it + because I love writing an FFmpeg command for a repeatable task, as + it's so easy to do something again the same way later on. But, I + haven't really been doing much video/audio stuff recently. +

+
+ +
+ 11. + how to make bar charts in bash +
+
...
 # > ./bar.sh 25 100 12
 # ███░░░░░░░░░
 awk -v prog=$1 -v TOTAL=$2 -v TOTSEG=$3 'BEGIN {
@@ -422,13 +948,29 @@ 
11. my Advent of Code statistics, or comparing magazine release date differences.

- - -
12. how to make graphs in bash
-
...
+        
+

+ I love bash, I love awk, and I love statistics. This combines them + wonderfully. I use this vaguely regularly when I want to visually + compare numbers, such as for + my Advent of Code statistics, or + comparing magazine release date differences. +

+
+ +
+ 12. + how to make graphs in bash +
+
...
 Plot graphs using the terminal. E.g.,
 > cat sensor.txt | awk -F ':| *' '{print $2}' | eplot -d -t CO2 2> /dev/null
 
@@ -458,29 +1000,65 @@ 
12. CO2 monitor, to sanity check the results I was getting. I had it set up to just send numbers through serial, so I found out how to graph it to be able to better compare those numbers to one another.

-

I wanted to do it in bash, so I could do it interactively, and watch the graph change in real time. If I wanted a pretty graph, I'd use Matplotlib.

- - -

THINGS THAT OTHER PEOPLE COULD WANT TO DO

-

These are things that I did once, or do repeatedly and remember how to do. But, I put them into gists so that I could share with people how I do common things, or so people with very specific google searches might stumble across something useful.

-
13. a script to remove all styles from an html file
-
...
+        
+

+ As I said already, I love statistics. I made this when I was setting + up a + CO2 monitor, + to sanity check the results I was getting. I had it set up to just + send numbers through serial, so I found out how to graph it to be + able to better compare those numbers to one another. +

+

+ I wanted to do it in bash, so I could do it interactively, and watch + the graph change in real time. If I wanted a pretty graph, I'd + use Matplotlib. +

+
+ +

+ THINGS THAT OTHER PEOPLE COULD WANT TO DO +

+

+ These are things that I did once, or do repeatedly and remember how to + do. But, I put them into gists so that I could share with people how I + do common things, or so people with very specific google searches + might stumble across something useful. +

+
+ 13. + a script to remove all styles from an html file +
+
...
 # to change lots of files, use `find` and `xargs`
 #  e.g., find all files ending with ".html" and replace them with the output of this script
 #   find . -name "*.html" -print0 | xargs -0 -i bash -c './scripts/naked.sh "{}" > "{}.temp" && mv "{}.temp" "{}"'
 
 cat "$1" | perl -0777pe 's|<link[^>]*rel="stylesheet"[^>]*/>||gms' | perl -0777pe 's|<style>.*?</style>||gms' | perl -0777pe 's|style="[^"]*"||gms'
 
-
- -

I made this to make it easy for me to participate in CSS Naked Day 2024. I shared it so that anyone else could do the same. There were many ways of removing styles on the homepage, but they were all for PHP, or Django, or Perl, or ... etc. Nothing for "just HTML", so I added it.

-
- -
14. common RSS extensions
-
# Common RSS URL extensions
+        
+

+ I made this to make it easy for me to participate in + CSS Naked Day 2024. I + shared it so that anyone else could do the same. There were many + ways of removing styles on the + homepage, but they + were all for PHP, or Django, or Perl, or ... etc. Nothing for + "just HTML", so I added it. +

+
+ +
+ 14. + common RSS extensions +
+
# Common RSS URL extensions
 
 I like blogs. I like RSS feeds. Often, blogs don't have an RSS feed link. Often, these blogs *do* have an RSS feed, thanks to whatever site generator they use.
 
@@ -505,13 +1083,27 @@ 
14. use it to keep up with your favourite blogs. Whenever I was on a blog and I couldn't find a link to an RSS feed, I would find myself trying a random combination of the above. I wrote it down so that now I can be more systematic about it, and so that now I can keep up to date with my favourite random personal websites!

- - -
15. a script to combine Squarespace RSS feeeds
-
...
+        
+

+ As the gist says, I like RSS. You should + use it to keep up + with your favourite blogs. + Whenever I was on a blog and I couldn't find a link to an RSS + feed, I would find myself trying a random combination of the above. + I wrote it down so that now I can be more systematic about it, and + so that now I can keep up to date with my favourite random personal + websites! +

+
+ +
+ 15. + a script to combine Squarespace RSS feeeds +
+
...
 # fetch the file
     rss=$(curl -s "${baseurl}&${querystring}" | tr -d '\n') 
     # remove header with "<\?xml.*?<\/description>"
@@ -525,13 +1117,25 @@ 
15. 16. a script to convert font files to css styles
-
...
+        
+

+ More RSS love. This was made in frustration at Squarespace only + offering an RSS feed for each month of the calendar, and no + "all" option I could see. Thus, I made a script to combine + RSS feeds of the next few months so that I could stay up to date. I + thought it might be useful if someone encountered the same issue + with a different Squarespace site. +

+
+ +
+ 16. + a script to convert font files to css styles +
+
...
 name_without_spaces=$(echo $name | tr '[:upper:]' '[:lower:]' | tr ' ' '-')
 
 echo '@font-face {
@@ -543,13 +1147,30 @@ 
16. font-workshop and font-talk, I wanted to make a couple of CSS rules for around 100 or more fonts. This was a fun challenge to do using bash, and I ended up with a nice script. It's another one that I only put online because it was easy to do so, and again so that if someone came at Google with a very niche ask, they might find help here.

- - -
17. a script to convert gpl files to css styles
-
...
+        
+

+ For my + font-workshop + and + font-talk, + I wanted to make a couple of CSS rules for around 100 or more fonts. + This was a fun challenge to do using bash, and I ended up with a + nice script. It's another one that I only put online because it + was easy to do so, and again so that if someone came at Google with + a very niche ask, they might find help here. +

+
+ +
+ 17. + a script to convert gpl files to css styles +
+
...
 cat $1 | awk -F ' ' '
 BEGIN {
   printf ":root {\n"
@@ -563,16 +1184,49 @@ 
17. colour palette for typesetting lipu tenpo into CSS for the lipu tenpo website. Again, who's to say, but it's nice to imagine that someone could be attempting this specific thing in future and stumble across this gist.

- - -

HOW TO SET UP THINGS ON A LINUX SERVER

-

Having and doing things on a Linux server is an entire world in itself. When I started doing it, lots was confusing. Lots is still confusing. Whenever I do something describable, I try and write it down so that I can build upon my knowledge, rather than having to re-find-out how to do it every time I do something.

-

I have come back to most of these quite a lot because they contain a lot of POSIX/bash/shell commands that I remember using, but have forgotten how to use, or what they were called.

-
18. how to set up rsa encryption keys
-
...
+        
+

+ Similar to the above, this is a script for converting a gimp colour + palette to CSS styles. I used it for turning a + colour palette for typesetting lipu tenpo + into + CSS + for the lipu tenpo website. + Again, who's to say, but it's nice to imagine that someone + could be attempting this specific thing in future and stumble across + this gist. +

+
+ +

+ HOW TO SET UP THINGS ON A LINUX SERVER +

+

+ Having and doing things on a Linux server is an entire world in + itself. When I started doing it, lots was confusing. Lots is still + confusing. Whenever I do something describable, I try and write it + down so that I can build upon my knowledge, rather than having to + re-find-out how to do it every time I do something. +

+

+ I have come back to most of these quite a lot because they contain a + lot of POSIX/bash/shell commands that I remember using, but have + forgotten how to use, or what they were called. +

+
+ 18. + how to set up rsa encryption keys +
+
...
 ### Add key to `~/.ssh/authorised_keys`
 
 ```bash
@@ -593,13 +1247,24 @@ 
18. 19. how to set up nginx
-
...
+        
+

+ I made this gist because I really didn't understand what RSA + keys or SSH keys were, or how they worked, so I spent a while + figuring out my understanding of it, and I wrote it down. I came + back to it a lot over time to remind myself how to generate keys, + where to put them for SSH, and how to edit my SSH config. +

+
+ +
+ 19. + how to set up nginx +
+
...
 ## Config examples
 
 ### subdomain redirect
@@ -644,15 +1309,39 @@ 
19. 20. how to transfer folders over scp
-
# Transfer Folders over SCP
+        
+

+ I've come back to this one a lot. Installing nginx was one of + the first services I installed on my server, so it was useful + whenever I installed new services to remind myself of the commands + for running them. It was also useful for some more basic concepts + like scp. +

+

+ Sharing files as a web server is one of the more exciting things to + do on a server, and there are many ways to do it, which are each + subtly different. For example, the quote above shows three different + ways of setting up a server and location for slightly different use + cases. +

+

+ The gist also serves as a backup for my nginx config, in case I lose + access to my server. I have spent a lot of time in that file editing + it to do exactly what I want. It should probably be multiple + "sites-enabled" files, as people usually do web server + setups, but this works for me at the moment, so that's how it + will be. ;) +

+
+ +
+ 20. + how to transfer folders over scp +
+
# Transfer Folders over SCP
 
 With tar + zip
 
@@ -675,13 +1364,28 @@ 
20. 21. how to run a program as a service with systemd
-
...
+        
+

+ I made this because I was struggling with using FTP or other ways of + moving files around. Once I worked it out, scp was + useful. I have since found out that you can use + scp recursively, so there's no real need to use + tar to tar zip the folder before sending it, you can + just use scp *. But, learning scp and + writing this gist means that I got an appreciation for the syntax of + both scp and tar, which I've used a + few times since then. +

+
+ +
+ 21. + how to run a program as a service with systemd +
+
...
 ## An example service file
 
 For an application stored in `/root/go/webring-go/serve` that serves files over HTTP, an example service file is
@@ -714,14 +1418,33 @@ 
21. the gist preamble, I was running bots and programs (daemons) on my server in a very volatile way, so that I couldn't restart the server, or I would have to go and manually start 4 or 5 different programs.

-

Working out how to use systemd with very simple use cases felt very handy, so I wrote it up because it was difficult for me to find good information on how to do it.

- - -
22. how to set up a mumble server
-
# Mumble Server setup
+        
+

+ This was a very useful gist for me to write. As it says in + the gist preamble, I was running bots and programs (daemons) on my server in a very + volatile way, so that I couldn't restart the server, or I would + have to go and manually start + 4 or 5 different programs. +

+

+ Working out how to use systemd with very simple use + cases felt very handy, so I wrote it up because it was difficult for + me to find good information on how to do it. +

+
+ +
+ 22. + how to set up a mumble server +
+
# Mumble Server setup
 
 ## Setup
 
@@ -746,14 +1469,31 @@ 
22. Factorio game), I might have to do some "live" restarting or checking of the server if it broke, and writing down how to do that would make it a lot easier and less stressful.

- - -
23. how to install ruby and jekyll on linux
-
### Using Ruby on Linux
+        
+

+ I mainly wrote this one because it seemed like a lot of + configuration when I was setting up the Mumble Server, so I wanted + to be able to do it again with the same configuration. +

+

+ I was also a little worried that when I first used Mumble (to play + the + Factorio game), I might have to do some "live" restarting or checking + of the server if it broke, and writing down how to do that would + make it a lot easier and less stressful. +

+
+ +
+ 23. + how to install ruby and jekyll on linux +
+
### Using Ruby on Linux
 
 #### Install Ruby + Gems
 
@@ -770,13 +1510,24 @@ 
23. 24. how to set up ftp on linux
-
# How to set up FTP on Ubuntu
+        
+

+ For whatever reason, I struggled to install Ruby & Jekyll + locally on my computer. I imagine the struggle is similar to + installing Python and pip, and not really understanding how to use + them "properly". I also wrote it down because I wanted to + install it both on my PC and my laptop. +

+
+ +
+ 24. + how to set up ftp on linux +
+
# How to set up FTP on Ubuntu
 
 Mainly following <https://gist.github.com/CloudLinuxDeveloper/ec801e51c0a3917555c01d8b064e7f9a>
 
@@ -809,14 +1560,28 @@ 
24. The end
-

I hope you enjoyed a skim through the gist-list. Some are boring, but that's because I didn't hold out, and included every gist, so you could have a fair judgement of how many are actually useful and how many end up not being.

-

Maybe next time you write a small script, or spend a couple of hours figuring out how to do something, you'd consider writing it down and putting it somewhere?...

+
+

+ This is not really a gist I have come back to, nor one that I used + properly. After I set up FTP, I decided I didn't want to use it, + so I un-set it up. But, if I ever want it again, I can follow my own + instructions, which maybe contain parts of my own personality as + commands. +

+
+ +

The end

+

+ I hope you enjoyed a skim through the gist-list. Some are boring, but + that's because I didn't hold out, and included every gist, so + you could have a fair judgement of how many are actually useful and + how many end up not being. +

+

+ Maybe next time you write a small script, or spend a couple of hours + figuring out how to do something, you'd consider writing it down + and putting it somewhere?... +


@@ -824,7 +1589,7 @@

The end

Comments

Email me → - alifeee.web@outlook.com + alifeee@alifeee.net :)

@@ -844,7 +1609,7 @@

Comments

_Linktree_ Linktree - + _Email_ Email diff --git a/hackspace-adventures/index.html b/hackspace-adventures/index.html index 5a381fa..bee5175 100644 --- a/hackspace-adventures/index.html +++ b/hackspace-adventures/index.html @@ -221,7 +221,7 @@

Resources

Comments

Email me → - alifeee.web@outlook.com + alifeee@alifeee.net :)

@@ -241,7 +241,7 @@

Comments

_Linktree_ Linktree - + _Email_ Email diff --git a/hull-bus-sign/index.html b/hull-bus-sign/index.html index 4e1ea7f..bdec464 100644 --- a/hull-bus-sign/index.html +++ b/hull-bus-sign/index.html @@ -839,7 +839,7 @@

Comments

Email me → - alifeee.web@outlook.com + alifeee@alifeee.net :)

@@ -859,7 +859,7 @@

Comments

_Linktree_ Linktree - + _Email_ Email diff --git a/index.html b/index.html index ba5687e..b10b9ae 100644 --- a/index.html +++ b/index.html @@ -610,7 +610,7 @@

_Linktree_ Linktree - + _Email_ Email diff --git a/index_template.html b/index_template.html index b0b2906..e8e316a 100644 --- a/index_template.html +++ b/index_template.html @@ -80,7 +80,7 @@

alifeee's blog

Comments

Email me → - alifeee.web@outlook.com + alifeee@alifeee.net :)

@@ -111,7 +111,7 @@

_Linktree_ Linktree - + _Email_ Email diff --git a/making-bogface/index.html b/making-bogface/index.html index e89eca9..8779df6 100644 --- a/making-bogface/index.html +++ b/making-bogface/index.html @@ -183,228 +183,584 @@

alifeee's blog

-

Making my own Font - BogFace

-

-

I was told by a friend that they had never woken up and thought "I want to make a font".

-

However, I had done exactly that.

- - -

BogFace, available for download NOW!

-
- - -
-
- - -
-
- -
    -
  1. Why?
      -
    1. Moving away from font repositories like Google Fonts
    2. -
    -
  2. -
  3. How to make a font?
      -
    1. Picking a tool to use
    2. -
    3. Learning how to use FontForge
    4. -
    5. Making a typeface
        -
      1. Converting hand-drawn images into two-colour bitmaps
      2. -
      -
    6. -
    7. Loading in the bitmaps to FontForge
    8. -
    9. Drawing round the designs
    10. -
    11. Why did I call it BogFace?
    12. -
    13. Font completion!
    14. -
    15. Adding more things
    16. -
    -
  4. -
  5. The leftovers
  6. -
  7. Footnotes
  8. -
  9. Resources
  10. -
-

Why?

-

I think design is fascinating, and I have read a few books about fonts. One is Why Fonts Matter,

- -
-
-
- -

which posed a fun experiment of asking "how many different fonts am I exposed to in an hour?". I often remember this, and look around, and it's often a lot of fonts.

-

Another book, which I still own, is Script Fonts,

- -
-
-
- -

which is simply a list of many fonts. The fonts are put into collections and each has a brief preface, but otherwise the book is... just fonts. Plain and simple. It even comes with a CD containing all the fonts! I don't have a CD drive.

-

Moving away from font repositories like Google Fonts

-

I think using non-default fonts on websites is always fun, and I recently started straying away from the fonts on Google Fonts and similar sites. This was part of my broader departure from the advertiser-filled, SEO-optimised, tracking-fueled Internet to the cooler, calmer, and altogether more personable IndieWeb.

-

I enjoy many personal websites, and I knew of two that specifically had fonts: Tom7's fonts (a website I discovered via Tom7's YouTube channel),

-

Screenshot of Tom7's fonts website, showing

-
- -

http://fonts.tom7.com/

-
- -

...and Des polices de caracteres a Gogo (I found this site, a French website, mostly in French, with Robyn - I do not remember how or where, but it was probably browsing webrings).

-

Screenshot of clofonts website, showing introduction

-
- -

http://clofont.free.fr/

-
- -

Tom7's site has two pages of fonts, with maybe 30 fonts total. The second French site I have not yet found the bottom of, and has seemingly hundreds and maybe thousands of fonts. Over a few weeks, I found myself making one or two things, and when I thought "I should pick a font for this", the natural choice was to use one from one of these personal sites. So, that's what I did!

-

How to make a font?

-

Picking a tool to use

-

After that, fonts were on the mind, so I decided to learn how to make them. Tom7's font FAQ (seemingly written over 20 years ago) suggested that making a font might be quite inaccessible, requiring expensive, bespoke software.

-

Screenshot of Tom7's FAQ question

-
- -

FAQ from Tom7's font FAQs.

-
- -

However, I googled around (using my all-too-common method of prepending the phrase "FLOSS open-source" to whatever premium experience I was after) and found FontForge and Birdfont. I decided I would use the former, FontForge, as it seemed more mature (whatever that means).

-

Screenshot of FontForge's main page

-
- -

FontForge's main page.

-
- -

Learning how to use FontForge

-

With not much to do, I spent the better half of a Boneless Wednesday¹ reading the FontForge documentation. As well as teaching you how to use FontForge itself, there was a lot of information about how typefaces in general are rendered by computers, and the differences for different writing systems like Arabic and Mandarin. It is interesting stuff, especially if you're into typography (I have not decided whether I am or not, but evidence would sway me towards being).

-

Making a typeface

-

I started by making hand-painted letters into part of a font with the Kiran Builder Typeface (currently incomplete), a font based on a painted garage in East London. With that small project I developed a process for turning images of hand-drawn letter forms into vector graphics, which is the graphics format used for fonts. I will lay that process out here.

-

Converting hand-drawn images into two-colour bitmaps

-

Fonts are single-colour, and then can be painted afterwards. So, to get from an image to vector graphics, I first converted the image to a 2-color bitmap. For this I used Paint.Net (the program I use for all raster image editing - think a more powerful MS Paint), and used Effects>Colour>Quantize to turn my photos into black-and-white PNGs (a simplified story. The extra steps were cleaning up things like the lines from the lined paper I used and other pen-marks.)

-

Picture of hand-drawn letters

-
- -

The uppercase letters that I drew on lined paper (use blank next time) to use in my font.

-
- -

Edited bitmap version of the above picture, with only 2 colours

-
- -

A quantized version of the image above, after I cleaned it up in Paint.Net.

-
- -

Then, I cropped each symbol into its own file, so that I could import them into FontForge.

-

Image of the letter B

-
- -

B.

-
- -

Loading in the bitmaps to FontForge

-

I was sure I read a thing in the documentation about importing an entire folder of files ("a.png", "b.png", "c.png", ...) in one go, but I couldn't re-find it (the problem with reading documentation I guess?), so I just used the arrow keys to go from letter to letter and CTRL+SHIFT+I to import an image into each one.

-

Screenshot of the FontForge editor with the letter B

-
- -

FontForge's outline window, with my hand-drawn b set to the background image.

-
- -

Drawing round the designs

-

Then, I started manually tracing the images with Bézier curves.

-

Screenshot of the FontForge editor with the letter B, traced

-
- -

Look how neatly those Bézier points are placed around that letter. Mmm.

-
- -

This took a while. After around 10 letters, I started using potrace via the FontForge UI to automagically trace round my letters. Then, I found a FontForge command called simply simplify which removed most of the Bézier points, giving the final letter a cleaner look. In the end, this process amounted to repeatedly pressing CTRL+SHIFT+T (autotrace), CTRL+SHIFT+M (simplify), CTRL+M a bunch (removing points), and then CTRL+[ (go to next character).

-

Screenshot of the FontForge editor with the letter k, traced

-
- -

This one looks a lot more scruffy. But it did only take about 20 seconds to make.

-
- -

This worked fine for me for two reasons:

-
    -
  • I was just tracing a hand-drawn font, rather than designing a font on a PC. This would involve a lot more fiddling around.
  • -
  • I did not care about consistent letter sizes/thicknesses/widths. This would involve a lot more fiddling around.
  • -
-

Why did I call it BogFace?

-

When I started doing lowercase letters, I had to decide a few things:

-
    -
  • the height of small letters (i.e., o, e, r, etc.)
  • -
  • the height of "ascenders" (i.e., h, b, l)
  • -
  • the "height" of "descenders" (i.e., "y")
  • -
-

I pulled in three letters to my font-window to decide this: o, g, and b. Since I was doing this at the hackspace (I was working on it on-and-off over a few days), someone leaned over and read out the three large letters on my screen, which I was too busy thinking about ascenders and descenders to parse.

-

"bog?", they inquired.

-

"yes", I replied.

-

Screenshot of the FontForge metrics window, with

-
- -

bog.

-
- -

This, combined with the facts that "I thought the font looked a little boggy", and "I fell in a bog on a trip to Scotland this summer" solidified what I was going to call my as-yet-unnamed typeface: BogFace.

-

(I only check this as of writing (if you want to make something: don't google it to check if it exists - just make it), but it seems like there was not already a typeface on the Internet called the same.)

-

Font completion!

-

Eventually, I made all 26 Latin uppercase and lowercase letters. I also made some symbols.

-

Screenshot of FontForge, showing all of BogFace in its glory

-
- -

This is the main window of FontForge when you are editing your font. I think it looks quite nice.

-
- -

Play with it here! :)

- - -

Adding more things

-

After using BogFace for a bit (including a period of turning every website to use BogFace by default), I realised that I wanted numbers, and also that the font looked smaller than normal. This second point was caused by me having a large descender size. Apparently, hand drawn letters naturally have massive descenders, and fonts do not,

-

Screenshot of

-
- -

See how much lower my hand-drawn g descends, compared to a g from a standard font like Arial.

-
- -

...so in accommodating my massive descenders, I have made the overall font smaller. This is because there is no way to specify the height of a font (from the "bottom" of a letter to the top). Programs which draw fonts just decide the line-height is the bottom to the top, including the descender. This meant that for BogFace, the normal letters were small because of the extended descender.

-

Screenshot of

-
- -

When you shrink BogFace to be the same size as a normal font, the extended g's make it look a lot smaller than a normal font. It's especially noticeable at smaller font sizes.

-
- -

So, I lowered the descender height of the font, and to stop the loooong letters having a fight with letters on the line below, also made them shorter graphically.

-

Screenshot of

-
- -

This change technically reduces the "authenticity" of the font, but a) who was counting, and b) I drew the letters first-try with no design direction anyway.

-
- -

The leftovers

-

That was it! I tagged it as "release 1.0.0", and if I play with making fonts again, it will be on a new font!

-

It's fun to have my own font.

-

After I while (believe it or not), I got tired of having to read every website in BogFace. However, I left it as the default font, but still allowed sites to override it. That means that most of the time, I see sites how they were designed. However, sometimes sites leave certain sections unstyled, intentional or not, so every day I get to play an Easter egg hunt to find BogFace on the Internet.

-

Screenshot of some places I've found BogFace

-
- -

Some places I've come across my own font in the wild include RightMove and random other websites.

-
- -

It's also nice to be able to know that if I need a whimsical typeface, I have one at my fingertips (for example for an online newsletter written entirely in toki pona (link probably broken))

-

I have not spoken about kerning. It is and was an entire ordeal. I hope you enjoy dealing with it if you choose to make a font.

-

I will probably make more fonts. If I do make another font, I would like to spend more time designing it, and spend a bit more effort on it beyond "trace a hand-drawn image".

-

FIN.

-

Footnotes

-
    -
  1. Phoneless Wednesday
  2. -
-

Resources

- +

+ Making my own Font - BogFace +

+

+

+ I was told by a friend that they had never woken up and thought + "I want to make a font". +

+

However, I had done exactly that.

+ +

+ BogFace, available for download + NOW! +

+
+ + +
+
+ + +
+
+ +
    +
  1. + Why? +
      +
    1. + Moving away from font repositories like Google Fonts +
    2. +
    +
  2. +
  3. + How to make a font? +
      +
    1. + Picking a tool to use +
    2. +
    3. + Learning how to use FontForge +
    4. +
    5. + Making a typeface +
        +
      1. + Converting hand-drawn images into two-colour bitmaps +
      2. +
      +
    6. +
    7. + Loading in the bitmaps to FontForge +
    8. +
    9. + Drawing round the designs +
    10. +
    11. + Why did I call it BogFace? +
    12. +
    13. Font completion!
    14. +
    15. Adding more things
    16. +
    +
  4. +
  5. The leftovers
  6. +
  7. Footnotes
  8. +
  9. Resources
  10. +
+

Why?

+

+ I think design is fascinating, and I have read a few books about + fonts. One is + Why Fonts Matter, +

+ +
+
+
+ +

+ which posed a fun experiment of asking "how many different fonts + am I exposed to in an hour?". I often remember this, and look + around, and it's often a lot of fonts. +

+

+ Another book, which I still own, is + Script Fonts, +

+ +
+
+
+ +

+ which is simply a list of many fonts. The fonts are put into + collections and each has a brief preface, but otherwise the book is... + just fonts. Plain and simple. It even comes with a CD containing all + the fonts! I don't have a CD drive. +

+

+ Moving away from font repositories like Google Fonts +

+

+ I think using non-default fonts on websites is always fun, and I + recently started straying away from the fonts on Google Fonts and + similar sites. This was part of my broader departure from the + advertiser-filled, SEO-optimised, tracking-fueled Internet to the + cooler, calmer, and altogether more personable + IndieWeb. +

+

+ I enjoy + many personal websites, + and I knew of two that specifically had fonts: + Tom7's fonts (a website I + discovered via + Tom7's YouTube channel), +

+

+ Screenshot of Tom7's fonts
+          website, showing +

+
+

http://fonts.tom7.com/

+
+ +

+ ...and + Des polices de caracteres a Gogo + (I found this site, a French website, mostly in French, with + Robyn + - I do not remember how or where, but it was probably browsing + webrings). +

+

+ Screenshot of clofonts website, showing introduction +

+
+

http://clofont.free.fr/

+
+ +

+ Tom7's site has two pages of fonts, with maybe 30 fonts total. The + second French site I have not yet found the bottom of, and has + seemingly hundreds and maybe thousands of fonts. Over a few weeks, I + found myself making + one or + two things, + and when I thought "I should pick a font for this", the + natural choice was to use one from one of these personal sites. So, + that's what I did! +

+

How to make a font?

+

Picking a tool to use

+

+ After that, fonts were on the mind, so I decided to learn how to make + them. + Tom7's font FAQ + (seemingly written over 20 years ago) suggested that making a font + might be quite inaccessible, requiring expensive, bespoke software. +

+

+ Screenshot of Tom7's FAQ question
+          +

+
+

+ FAQ from + Tom7's font FAQs. +

+
+ +

+ However, I googled around (using my all-too-common method of + prepending the phrase "FLOSS open-source" to whatever + premium experience I was after) and found + FontForge and + Birdfont. I decided I would use + the former, FontForge, as it seemed more mature (whatever that means). +

+

+ Screenshot of FontForge's main page +

+
+

+ FontForge's main + page. +

+
+ +

+ Learning how to use FontForge +

+

+ With not much to do, I spent the better half of a Boneless Wednesday¹ + reading the + FontForge documentation. As well as teaching you how to use FontForge itself, there was a + lot of information about how typefaces in general are rendered by + computers, and the differences for different writing systems like + Arabic and Mandarin. It is interesting stuff, especially if you're + into typography (I have not decided whether I am or not, but evidence + would sway me towards being). +

+

Making a typeface

+

+ I started by making hand-painted letters into part of a font with the + Kiran Builder Typeface + (currently incomplete), a font based on a painted garage in East + London. With that small project I developed a process for turning + images of hand-drawn letter forms into vector graphics, which is the + graphics format used for fonts. I will lay that process out here. +

+

+ Converting hand-drawn images into two-colour bitmaps +

+

+ Fonts are single-colour, and then can be painted afterwards. So, to + get from an image to vector graphics, I first converted the image to a + 2-color bitmap. For this I used + Paint.Net (the program I use + for all raster image editing - think a more powerful MS Paint), and + used Effects>Colour>Quantize to turn my photos into + black-and-white PNGs (a simplified story. The extra steps were + cleaning up things like the lines from the lined paper I used and + other pen-marks.) +

+

+ Picture of hand-drawn letters +

+
+

+ The uppercase letters that I drew on lined paper (use blank next + time) to use in my font. +

+
+ +

+ Edited bitmap version of the above picture, with only 2 colours +

+
+

+ A quantized version of the image above, after I cleaned it up in + Paint.Net. +

+
+ +

+ Then, I cropped each symbol into its own file, so that I could import + them into FontForge. +

+

Image of the letter B

+
+

B.

+
+ +

+ Loading in the bitmaps to FontForge +

+

+ I was sure I read a thing in the documentation about importing an + entire folder of files ("a.png", "b.png", + "c.png", ...) in one go, but I couldn't re-find it (the + problem with reading documentation I guess?), so I just used the arrow + keys to go from letter to letter and CTRL+SHIFT+I to + import an image into each one. +

+

+ Screenshot of the FontForge editor with the letter B +

+
+

+ FontForge's + outline window, with my hand-drawn b set to the + background image. +

+
+ +

Drawing round the designs

+

Then, I started manually tracing the images with Bézier curves.

+

+ Screenshot of the FontForge editor with the letter B, traced +

+
+

+ Look how neatly those Bézier points are placed around that letter. + Mmm. +

+
+ +

+ This took a while. After around 10 letters, I started using + potrace + via the FontForge UI to automagically trace round my letters. Then, I + found a FontForge command called simply simplify which + removed most of the Bézier points, giving the final letter a cleaner + look. In the end, this process amounted to repeatedly pressing + CTRL+SHIFT+T (autotrace), + CTRL+SHIFT+M (simplify), CTRL+M a bunch + (removing points), and then CTRL+[ (go to next + character). +

+

+ Screenshot of the FontForge editor with the letter k, traced +

+
+

+ This one looks a lot more scruffy. But it did only take about 20 + seconds to make. +

+
+ +

This worked fine for me for two reasons:

+
    +
  • + I was just tracing a hand-drawn font, rather than designing a font + on a PC. This would involve a lot more fiddling around. +
  • +
  • + I did not care about consistent letter sizes/thicknesses/widths. + This would involve a lot more fiddling around. +
  • +
+

Why did I call it BogFace?

+

+ When I started doing lowercase letters, I had to decide a few things: +

+
    +
  • the height of small letters (i.e., o, e, r, etc.)
  • +
  • the height of "ascenders" (i.e., h, b, l)
  • +
  • + the "height" of "descenders" (i.e., + "y") +
  • +
+

+ I pulled in three letters to my font-window to decide this: o, g, and + b. Since I was doing this at the + hackspace + (I was working on it on-and-off over a few days), someone leaned over + and read out the three large letters on my screen, which I was too + busy thinking about ascenders and descenders to parse. +

+

"bog?", they inquired.

+

"yes", I replied.

+

+ Screenshot of the
+          FontForge metrics window, with +

+
+

bog.

+
+ +

+ This, combined with the facts that "I thought the font looked a + little boggy", and "I fell in a bog on a + trip to Scotland + this summer" solidified what I was going to call my + as-yet-unnamed typeface: BogFace. +

+

+ (I only check this as of writing (if you want to make something: + don't google it to check if it exists - just make it), but it + seems like + there was not already a typeface on the Internet called the same.) +

+

Font completion!

+

+ Eventually, I made all 26 Latin uppercase and lowercase letters. I + also made some symbols. +

+

+ Screenshot of FontForge, showing all of BogFace in its glory +

+
+

+ This is the main window of FontForge when you are editing your font. + I think it looks quite nice. +

+
+ +

Play with it here! :)

+ + +

Adding more things

+

+ After using BogFace for a bit (including a period of + turning every website to use BogFace by default), I realised that I wanted numbers, and also that the font looked + smaller than normal. This second point was caused by me having a large + descender size. Apparently, hand drawn letters naturally have massive + descenders, and fonts do not, +

+

+ Screenshot of +

+
+

+ See how much lower my hand-drawn g descends, compared to a g from a + standard font like Arial. +

+
+ +

+ ...so in accommodating my massive descenders, I have made the overall + font smaller. This is because there is no way to specify the height of + a font (from the "bottom" of a letter to the top). Programs + which draw fonts just decide the line-height is the bottom to the top, + including the descender. This meant that for BogFace, the normal + letters were small because of the extended descender. +

+

+ Screenshot of +

+
+

+ When you shrink BogFace to be the same size as a normal font, the + extended g's make it look a lot smaller than a normal font. + It's especially noticeable at smaller font sizes. +

+
+ +

+ So, I lowered the descender height of the font, and to stop the + loooong letters having a fight with letters on the line + below, also made them shorter graphically. +

+

+ Screenshot
+          of +

+
+

+ This change technically reduces the "authenticity" of the + font, but a) who was counting, and b) I drew the letters first-try + with no design direction anyway. +

+
+ +

The leftovers

+

+ That was it! I tagged it as + "release 1.0.0", and if I play with making fonts again, it will be on a new font! +

+

It's fun to have my own font.

+

+ After I while (believe it or not), I got tired of having to read every + website in BogFace. However, I left it as the default font, but still + allowed sites to override it. That means that most of the time, I see + sites how they were designed. However, sometimes sites leave certain + sections unstyled, intentional or not, so every day I get to play an + Easter egg hunt to find BogFace on the Internet. +

+

+ Screenshot of some places I've found BogFace +

+
+

+ Some places I've come across my own font in the wild include + RightMove and random other websites. +

+
+ +

+ It's also nice to be able to know that if I need a whimsical + typeface, I have one at my fingertips (for example for an + online newsletter + written entirely in + toki pona (link probably broken)) +

+

+ I have not spoken about kerning. It is and was an entire ordeal. I + hope you enjoy dealing with it if you choose to make a font. +

+

+ I will probably make more fonts. If I do make another font, I would + like to spend more time designing it, and spend a bit more effort on + it beyond "trace a hand-drawn image". +

+

FIN.

+

Footnotes

+
    +
  1. Phoneless Wednesday
  2. +
+

Resources

+

@@ -412,7 +768,7 @@

Resources

Comments

Email me → - alifeee.web@outlook.com + alifeee@alifeee.net :)

@@ -432,7 +788,7 @@

Comments

_Linktree_ Linktree - + _Email_ Email diff --git a/railcards/index.html b/railcards/index.html index 47a45b8..c103a67 100644 --- a/railcards/index.html +++ b/railcards/index.html @@ -165,85 +165,216 @@

alifeee's blog

-

UK Railcards and all the differences between the 16-25 and 26-30 Railcard

-

-

Welcome to a semi deep dive on UK Railcards.

-

This is inspired from the string of questions and answers of:

- -

When can you stop using a 16-25 railcard?

-

You can buy a 1-year 16-25 railcard up to the day before you turn 26, so you can use one up to the day before you turn 27.

-

...or "until you are 27".

- -

So, should you try to eke it out?

-

Well, there is a 26-30 Railcard. So, it's pointless trying to game any systems if they are functionally the same.

-

(spoilers: probably don't bother eking, just buy the 26-30)

- -

Are the 16-25 and 26-30 railcards functionally the same?

-

What a good question! Let's find out. We will be lamenting the difference between the railcard websites, lamenting the difference between the Terms & Conditions, and lamenting the lack of a universal Railcard.

-

(spoilers: see the differences)

-
    -
  1. What railcards can you buy?
      -
    1. All the railcard sites are different
    2. -
    3. What railcard can you buy: Flow chart
    4. -
    5. The Britrail pass
    6. -
    7. The BahnCard
    8. -
    9. A national railcard?
    10. -
    -
  2. -
  3. What's the difference between the 16-25 and 26-30 railcard?
      -
    1. The Terms and conditions
    2. -
    3. All the differences between the 16-25 and 26-30 railcard
    4. -
    5. When can you use the 16-25 or 26-30 railcards until?
    6. -
    7. Use your railcard on the London Underground
    8. -
    -
  4. -
  5. Conclusion
  6. -
-

What railcards can you buy?

-

The Railcards website has a list of all railcards that you can buy. To save you a click, the ones listed there are:

- -

All the railcard sites are different

-

All the websites above are different. They are all about railcards, which are broadly "cards that get you 1/3 off train ticket costs", but each is a completely different website. This means that to compare two cards (as we do below), the link structure and information on each of the pages is completely different. This is kind of annoying.

-

What railcard can you buy: Flow chart

-

I had a look at the eligibility criteria for the railcards, and drew up a flow chart to decide if anyone could buy one or not.

-

In short: you can probably buy one. However, if you are:

-
    -
  • between 31 and 59 years old
  • -
  • not living in the South-East of England
  • -
  • not travelling with another person
  • -
-

...then you probably can't buy one.

-

I made the flowchart using tldraw. Here it is. It contains two railcards not in the URL above: the armed forces railcard and the local railcard, which are listed on the Wikipedia page for "Concessionary fares on the British railway network". That page doesn't have all the railcards listed, so maybe I should edit it...

-

Anyway, flowchart:

-a large flowchart - -
- -

This is an SVG export of the flow chart from tldraw. View full screen

-

Footnotes: (1) Network Railcard area (3) Local Railcards

-
- -

I have also turned the flowchart into one made using Mermaid, which is a way of making diagrams with text (or "code", but that is a scary word). Here is a snippet of the source, and the chart below (rendered by your browser!).

-
flowchart TD
+        

+ UK Railcards and all the differences between the 16-25 and 26-30 + Railcard +

+

+

Welcome to a semi deep dive on UK Railcards.

+

This is inspired from the string of questions and answers of:

+ +

When can you stop using a 16-25 railcard?

+

+ You can buy a 1-year 16-25 railcard up to the day before you turn 26, + so you can use one up to the day before you turn 27. +

+

...or "until you are 27".

+ +

So, should you try to eke it out?

+

+ Well, there is a 26-30 Railcard. So, it's pointless trying to game + any systems if they are functionally the same. +

+

(spoilers: probably don't bother eking, just buy the 26-30)

+ +

Are the 16-25 and 26-30 railcards functionally the same?

+

+ What a good question! Let's find out. We will be lamenting the + difference between the railcard websites, lamenting the difference + between the Terms & Conditions, and lamenting the lack of a + universal Railcard. +

+

+ (spoilers: + see the differences) +

+
    +
  1. + What railcards can you buy? +
      +
    1. + All the railcard sites are different +
    2. +
    3. + What railcard can you buy: Flow chart +
    4. +
    5. The Britrail pass
    6. +
    7. The BahnCard
    8. +
    9. A national railcard?
    10. +
    +
  2. +
  3. + What's the difference between the 16-25 and 26-30 + railcard? +
      +
    1. + The Terms and conditions +
    2. +
    3. + All the differences between the 16-25 and 26-30 railcard +
    4. +
    5. + When can you use the 16-25 or 26-30 railcards until? +
    6. +
    7. + Use your railcard on the London Underground +
    8. +
    +
  4. +
  5. Conclusion
  6. +
+

What railcards can you buy?

+

+ The + Railcards website + has a list of all railcards that you can buy. To save you a click, the + ones listed there are: +

+ +

All the railcard sites are different

+

+ All the websites above are different. They are all about railcards, + which are broadly "cards that get you 1/3 off train ticket + costs", but each is a completely different website. This means + that to compare two cards (as we do below), the link structure and + information on each of the pages is completely different. This is kind + of annoying. +

+

What railcard can you buy: Flow chart

+

+ I had a look at the eligibility criteria for the railcards, and drew + up a flow chart to decide if anyone could buy one or not. +

+

In short: you can probably buy one. However, if you are:

+
    +
  • between 31 and 59 years old
  • +
  • not living in the South-East of England
  • +
  • not travelling with another person
  • +
+

...then you probably can't buy one.

+

+ I made the flowchart using + tldraw. Here it is. It contains + two railcards not in the URL above: the armed forces railcard and the + local railcard, which are listed on the + Wikipedia page for "Concessionary fares on the British railway + network". That page doesn't have all the railcards listed, so maybe I + should edit it... +

+

Anyway, flowchart:

+ a large flowchart + +
+

+ This is an SVG export of the flow chart from + tldraw. + View full screen +

+

+ Footnotes: (1) + Network Railcard area + (3) + Local Railcards +

+
+ +

+ I have also turned the flowchart into one made using + Mermaid, which is a way of + making diagrams with text (or "code", but that is a scary + word). Here is a snippet of the source, and the chart below (rendered + by your browser!). +

+
flowchart TD
   Q:AGE[What is your age?]
   R:16-25[16-25 Railcard!]:::R
   Q:AGE -->|18-25| R:16-25
   ...
 
-
View full diagram source - -

You can paste this code into the Mermaid editor. Or, click this link to go to the editor with this pre-filled in.

-
flowchart TD
+        
+ View full diagram source + +

+ You can paste this code into the + Mermaid editor. Or, click + this link + to go to the editor with this pre-filled in. +

+
flowchart TD
   R:CHILD[your tickets are 50% off already]:::R
   R:16-17[16-17 Saver!]:::R
   R:16-25[16-25 Railcard!]:::R
@@ -306,9 +437,9 @@ 

What railcard can you buy: Flow chart

Q:LOCAL -->|yes| R:LOCAL Q:LOCAL -->|no| R:NONE
-
+
-
+        
 flowchart TD
   R:CHILD[your tickets are 50% off already]:::R
   R:16-17[16-17 Saver!]:::R
@@ -371,88 +502,257 @@ 

What railcard can you buy: Flow chart

Q:LOCAL -->|yes| R:LOCAL Q:LOCAL -->|no| R:NONE -
+
+ +
+

+ This is a live rendered flowchart using + Mermaid. + View full screen. + View online. See above for footnotes. +

+

+ I hope this diagram still works when you are reading this. I + couldn't easily get it to use local libraries, so it downloads + lots of JavaScript from "not this website". +

+
+ +

The Britrail pass

+

+ As a sidenote, I discovered this week about the existence of the + Britrail pass, which is a rail + pass similar to the + Interrail pass but just for + the UK. It seems a similar price, so could be useful if you want to go + on a train adventure in the UK, but you have a UK passport (as + Interrail prohibits use in your home country). +

+

The BahnCard

+

+ There is a lot of information in the above flowcharts. In Germany, the + flow chart for their + BahnCard is much + simpler, and I can write it as the text: +

+

If you are:

+
    +
  • 6-26 years old: you can get a "My BahnCard"
  • +
  • 27-64 years old: you can get a BahnCard
  • +
  • older than 65: you can get a BahnCard for senior citizens
  • +
+

+ screenshot of BahnCard and My BahnCard +

+
+

+ All the BahnCards available (well, there is also a more expensive + 50% off version, a trial version, and the senior citizen version is + not shown here) +

+
-
- -

This is a live rendered flowchart using Mermaid. View full screen. View online. See above for footnotes.

-

I hope this diagram still works when you are reading this. I couldn't easily get it to use local libraries, so it downloads lots of JavaScript from "not this website".

-
- -

The Britrail pass

-

As a sidenote, I discovered this week about the existence of the Britrail pass, which is a rail pass similar to the Interrail pass but just for the UK. It seems a similar price, so could be useful if you want to go on a train adventure in the UK, but you have a UK passport (as Interrail prohibits use in your home country).

-

The BahnCard

-

There is a lot of information in the above flowcharts. In Germany, the flow chart for their BahnCard is much simpler, and I can write it as the text:

-

If you are:

-
    -
  • 6-26 years old: you can get a "My BahnCard"
  • -
  • 27-64 years old: you can get a BahnCard
  • -
  • older than 65: you can get a BahnCard for senior citizens
  • -
-

screenshot of BahnCard and My BahnCard

-
- -

All the BahnCards available (well, there is also a more expensive 50% off version, a trial version, and the senior citizen version is not shown here)

-
- -

Currently, you can also buy a "Fan BahnCard", which gets better if Germany wins the current UEFA EURO football competition. No-loss gambling, I suppose?

-

Screenshot of BahnCard website, with cards that say "Fan BahnCard 25, 2nd class. Save 3 months and extend for free for 12 months if Germany wins UEFA EURO 2024™"

-

This leads on to:

-

A national railcard?

-

The existence of a national railcard would nullify this entire blog post. I'd welcome that.

-

Quoting my good friend, and reliable source, Wikipedia:

-
-

Railfuture [...] has been campaigning [...] for a National Railcard to replace the plethora of different railcards. [...]

-

A study undertaken jointly by Railfuture and the Rail Passengers Council [...] suggested that three million people would buy such a Railcard for £20.00 if it gave a one third discount on off-peak fares.

-

The "most conservative forecast" indicated that [...] passenger mileage would be increased by 11% per annum and rail industry profits by £50 million.

-

The profit-maximising combination [...] would increase profits by £70 million.

-
-

i.e., a National Railcard would be pretty sweet. We'll see how that goes, considering that study was from 2003.

-

What's the difference between the 16-25 and 26-30 railcard?

-

As I said before, the websites for the 16-25 Railcard and the 26-30 Railcard are annoyingly different, for how similar concepts they are.

-

Here is a sub-menu from the 16-25 railcard...

-

Screenshot of website sub-menu, showing "About the Railcard", "Benefits", "Are you eligible?", "Using your railcard", "Where to buy", "Renew or Replace", and "Journey Planner"

-

...and here is the "same" sub-menu from the 26-30 railcard.

-

Screenshot of website sub-menu, showing "About the Railcard", "What it is", "Are you eligible", "Travel times & tickets", "Where to buy", "Journey planner", "Renewing your Railcard"

-

Which of those menu items are you pressing if you want to answer the questions "How old can I be to buy the card?" or "What specific trains can I get?"? It's annoying. It doesn't matter now though, because I found links to the...

-

The Terms and conditions

-

The 16-25 and 26-30 railcards have Terms and Conditions (T&Cs) online:

- -

Even these are weirdly different to each other, in formatting and content. I have copied their text and provide the text versions here

- -

I used the diff/compare feature of VSCodium to try and spot the differences between these two texts. But, what I did first was clean them up. They were differently formatted. Here are some differences (I leave it up to you to match each difference to each T&Cs).

-
    -
  • one had spaces at the end of most lines, the other did not
  • -
  • one used "Data Protection", the other "data protection"
  • -
  • one used “”, the other ''
  • -
  • one had a lot of non-breaking spaces &nbsp; instead of spaces
  • -
  • one used "property rights", the other "proporty rights" (bad spelling)
  • -
-

Here are the updated versions after I made the T&Cs more similar to each other in structure:

- -

It should now be more easy to see the differences between them. We can generate a nice diff between these files, using git diff like

-
git diff --no-index --word-diff=plain -U2 railcard16-25.txt railcard26-30.txt
+        

+ Currently, you can also buy a "Fan BahnCard", which gets + better if Germany wins the current UEFA EURO football competition. + No-loss gambling, I suppose? +

+

+ Screenshot of BahnCard website, with cards that say "Fan BahnCard 25, 2nd class. Save 3 months and extend for free for 12 months if Germany wins UEFA EURO 2024™" +

+

This leads on to:

+

A national railcard?

+

+ The existence of a national railcard would nullify this entire blog + post. I'd welcome that. +

+

+ Quoting my good friend, and reliable source, + Wikipedia: +

+
+

+ Railfuture [...] has been campaigning [...] for a National Railcard + to replace the plethora of different railcards. [...] +

+

+ A study undertaken jointly by Railfuture and the Rail Passengers + Council [...] suggested that three million people would buy such a + Railcard for £20.00 if it gave a one third discount on off-peak + fares. +

+

+ The "most conservative forecast" indicated that [...] + passenger mileage would be increased by 11% per annum and rail + industry profits by £50 million. +

+

+ The profit-maximising combination [...] would increase profits by + £70 million. +

+
+

+ i.e., a National Railcard would be pretty sweet. We'll see how + that goes, considering that study was from 2003. +

+

What's the difference between the 16-25 and 26-30 railcard?

+

+ As I said before, the websites for the + 16-25 Railcard and the + 26-30 Railcard are + annoyingly different, for how similar concepts they are. +

+

Here is a sub-menu from the 16-25 railcard...

+

+ Screenshot of website sub-menu, showing "About the Railcard", "Benefits", "Are you eligible?", "Using your railcard", "Where to buy", "Renew or Replace", and "Journey Planner" +

+

+ ...and here is the "same" sub-menu from the 26-30 railcard. +

+

+ Screenshot of website sub-menu, showing "About the Railcard", "What it is", "Are you eligible", "Travel times & tickets", "Where to buy", "Journey planner", "Renewing your Railcard" +

+

+ Which of those menu items are you pressing if you want to answer the + questions "How old can I be to buy the card?" or "What + specific trains can I get?"? It's annoying. It doesn't + matter now though, because I found links to the... +

+

The Terms and conditions

+

+ The 16-25 and 26-30 railcards have Terms and Conditions (T&Cs) + online: +

+ +

+ Even these are weirdly different to each other, in formatting and + content. I have copied their text and provide the text versions here +

+ +

+ I used the diff/compare feature of VSCodium to try and spot the + differences between these two texts. But, what I did first was clean + them up. They were differently formatted. Here are some differences (I + leave it up to you to match each difference to each T&Cs). +

+
    +
  • one had spaces at the end of most lines, the other did not
  • +
  • + one used "Data Protection", the other "data + protection" +
  • +
  • one used “”, the other ''
  • +
  • + one had a lot of non-breaking spaces &nbsp; instead + of spaces +
  • +
  • + one used "property rights", the other "proporty + rights" (bad spelling) +
  • +
+

+ Here are the updated versions after I made the T&Cs more similar + to each other in structure: +

+ +

+ It should now be more easy to see the differences between them. We can + generate a nice diff between these files, using + git diff like +

+
git diff --no-index --word-diff=plain -U2 railcard16-25.txt railcard26-30.txt
 
-

...where --no-index enables diffing of files, --word-diff=plain diffs words instead of lines, and -U2 shows 2 lines of context around each diff. The output of this diff is here, but I can also turn it into nice-looking HTML by using trickery.

-

The trickery I used is VSCode's regex find-and-replace to turn git diff into more style-able HTML. I followed my own instructions:

-
    -
  • find \[-(.*?)-\], replace <del>$1</del>
  • -
  • find \{\+(.*?)\+\}, replace <ins>$1</ins> (turns out if you don't escape the second + like \+ you can crash VSCode...)
  • -
  • find ^(@@.*@@.*)$ replace <span class="jump">$1</span>
  • -
  • wrap header in HTML
  • -
-

Here are the differing parts of the T&Cs!

-

(skip to "all the differences")

-
+        

+ ...where --no-index enables diffing of files, + --word-diff=plain diffs words instead of lines, and + -U2 shows 2 lines of context around each diff. The output + of this diff is here, but I can also turn it + into nice-looking HTML by using trickery. +

+

+ The trickery I used is VSCode's regex find-and-replace to turn + git diff into more style-able HTML. I followed my own + instructions: +

+
    +
  • + find \[-(.*?)-\], replace + <del>$1</del> +
  • +
  • + find \{\+(.*?)\+\}, replace + <ins>$1</ins> (turns out if you don't + escape the second + like \+ you can crash + VSCode...) +
  • +
  • + find ^(@@.*@@.*)$ replace + <span class="jump">$1</span> +
  • +
  • wrap header in HTML
  • +
+

Here are the differing parts of the T&Cs!

+

+ (skip to "all the differences") +

+
   

diff --git a/16-25 Railcard Terms & Conditions_updated.txt b/26-30 Railcard Terms & Conditions_updated.txt index d3f5aae..b6b93b1 100755 --- a/16-25 Railcard Terms & Conditions_updated.txt @@ -527,58 +827,105 @@

The Terms and conditions

As long as you are aged 2530 at the time you purchased the 1-year 26-30 Railcard, you may still travel at the discounted fare throughout the validity period of the Railcard.Likewise, 3-year 16-25 Railcards purchased by the day before your 24th birthday will be valid for a full 3 years.
-

All the differences between the 16-25 and 26-30 railcard

-

The differences are... not much! Here are all of them I know:

-
    -
  • The 26-30 Railcard is only available digitally, while the 16-25 Railcard is available as a physical card (from T&Cs above)
  • -
  • The 26-30 Railcard does not offer an exemption to non-advance*, on-peak** tickets under £12 in July and August, while the 16-25 Railcard does*** (from T&Cs above)
  • -
  • The 26-30 Railcard cannot be used for a discount on the Caledonian Sleeper, while the 16-25 Railcard can be
  • -
-

*: an "advance ticket" as used here means a ticket for a specific train, which can only be used for that train
**: "on-peak" as used here means trains departing between 04:30am and 10:00am on Monday to Friday, not including public holidays
***: To clarify: neither railcard can be used to discount non-advance, on-peak tickets under £12. But, the 16-25 railcard does not have this restriction in July and August

-

When can you use the 16-25 or 26-30 railcards until?

-

Another interesting rule we can take from the T&Cs is the latest time you can buy a Railcard, and the latest you can use it. These times are:

-
    -
  • you can buy the 16-25 Railcard until the day you turn 26
  • -
  • you can use the 16-25 Railcard until the day you turn 27
  • -
  • you can buy the 26-30 Railcard until the day you turn 31
  • -
  • you can use the 26-30 Railcard until the day you turn 32
  • -
-

Visually, this looks like:

-
- 0-15 - 16 - 17 - 18 - 19 - 20 - 21 - 22 - 23 - 24 - 25 - 26 - 27 - 28 - 29 - 30 - 31 - 32+ - 16-25 Railcard - 26-30 Railcard -
- -
- -

What ages you can use the 16-25 and 26-30 Railcards. For the final year of each, you must buy it while you are still the age labelled in the name of the card.

-
- -

Use your railcard on the London Underground

-

I'm not the biggest fan of London. But, one solace is that I get 1/3 off the London Underground with a railcard. You, too, can get this, if you get an Oyster pay-as-you-go card and register the railcard onto it.

-

Conclusion

-

I have provided what is probably too much information about railcards. I hope you enjoy it.

-

The takeaway is probably: try to buy your railcards near to your birthday.

-

At the least, hopefully this can save you some money for around 6-12 months if you are 30 years old and your railcard expires soon.

-

Oh, and: take the Caledonian Sleeper before it's too late.

+

All the differences between the 16-25 and 26-30 railcard

+

The differences are... not much! Here are all of them I know:

+
    +
  • + The 26-30 Railcard is only available digitally, while the 16-25 + Railcard is available as a physical card (from T&Cs above) +
  • +
  • + The 26-30 Railcard does not offer an exemption to non-advance*, + on-peak** tickets under £12 in July and August, while the 16-25 + Railcard does*** (from T&Cs above) +
  • +
  • + The 26-30 Railcard + cannot be used + for a discount on the Caledonian Sleeper, while the 16-25 Railcard + can be +
  • +
+

+ *: an "advance ticket" as used here means a ticket for a + specific train, which can only be used for that train
**: + "on-peak" as used here means trains departing between + 04:30am and 10:00am on Monday to Friday, not including public + holidays
***: To clarify: neither railcard can be used to + discount non-advance, on-peak tickets under £12. But, the 16-25 + railcard does not have this restriction in July and August +

+

When can you use the 16-25 or 26-30 railcards until?

+

+ Another interesting rule we can take from the T&Cs is the latest + time you can buy a Railcard, and the latest you can use it. These + times are: +

+
    +
  • you can buy the 16-25 Railcard until the day you turn 26
  • +
  • you can use the 16-25 Railcard until the day you turn 27
  • +
  • you can buy the 26-30 Railcard until the day you turn 31
  • +
  • you can use the 26-30 Railcard until the day you turn 32
  • +
+

Visually, this looks like:

+
+ 0-15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 + 28 + 29 + 30 + 31 + 32+ + 16-25 Railcard + 26-30 Railcard +
+ +
+

+ What ages you can use the 16-25 and 26-30 Railcards. For + the final year of each, you must buy it while you are still the age + labelled in the name of the card. +

+
+ +

Use your railcard on the London Underground

+

+ I'm not the biggest fan of London. But, one solace is that I get + 1/3 off the London Underground with a railcard. You, too, can get + this, if you get an Oyster pay-as-you-go card and register the + railcard onto it. +

+

Conclusion

+

+ I have provided what is probably too much information about railcards. + I hope you enjoy it. +

+

+ The takeaway is probably: try to buy your railcards near to your + birthday. +

+

+ At the least, hopefully this can save you some money for around 6-12 + months if you are 30 years old and your railcard expires soon. +

+

Oh, and: take the Caledonian Sleeper before it's too late.


@@ -587,7 +934,7 @@

Conclusion

Comments

Email me → - alifeee.web@outlook.com + alifeee@alifeee.net :)

@@ -618,7 +965,7 @@

_Linktree_ Linktree - + _Email_ Email diff --git a/ring-populations/index.html b/ring-populations/index.html index 9f91ba1..29bc0cb 100644 --- a/ring-populations/index.html +++ b/ring-populations/index.html @@ -69,115 +69,290 @@

alifeee's blog

-

Ring populations: how to compare cities more agnostically

-

-
    -
  1. Internet-Inconsistencies
  2. -
  3. Let's concentrize!
      -
    1. What does 10 km look like?
    2. -
    -
  4. -
  5. Cities, sorted
  6. -
  7. Appendix
  8. -
-

I love comparing the population of cities. I hate that every city is seemingly measured differently.

-

How am I supposed to answer my pressing questions like: is Leeds big enough to deserve a tram?

-

Internet-Inconsistencies

-

There would exist no problem if I could search "Birmingham, Alabama population", then "the real Birmingham population" to back up my arguments of why I shouldn't be seeing results for American towns when I'm trying to find a map of bus routes in the real Birmingham (for the results of this search, see lower down). -However, with almost every city I search for population, the top results are from different sources, and the search engines (trying to shave precious seconds off my day) seem to pull their "summary" figure from a different one of these websites for every city.

-

Bar chart of population vs source. They vary.

-
- -

"Population of Birmingham" from the first few sources I could find on Google. Presumably the identical ones all use ONS' data, and the others are more 'international' statistics. -Source.

-
- -

Let's concentrize!

-

The solution to this problem of inconsistency... is to introduce consistency! Sociologists, anthropologists, and geographists will berate me for this, but my idea was just to draw a circle around the centre of the city and count how many people are inside it.

-

Here is where I would explain the efforts I went through, the technological tools I learnt, and the troubles I faced in writing a simple-to-use website to find the population within a circle. However, the good Tom Forth already made this, with his page: Circle Populations. Let's use this to take a look at Birmingham.

-

Two graphs. One of total population below vs area. It displays a log-looking plot. The other of population density around an area. It looks like exponential decay.

-
- -

As you increase the area you're measuring, population increases, and density decreases! Revolutionary! -Source.

-
- -

Comparing this with the original plot above, it seems like 10 km is about inline with the ONS data.

-

Bar chart of population vs source. This time with ring populations included. They vary. <10 km ring is closest to average.

-
- -

The same graph from above! -This time with the population within a 5/10/15/20 km ring around Birmingham. -New insights? Or content padding? -Source.

-
- -

Thus, I'll stick with 10 km as my favourite circle size. Easy to remember. This may be showing a bit of decimal favouritism, as 10 km seems a nice default type if you use base 10. If the world were ruled by jan Misali, maybe we would end up using 6 km (10 in seximal). If the world were ruled by the Mayans, we might use 12 km (10 in duo-decimal). In the end, the world was ruled by the French, so 10 it is.

-

What does 10 km look like?

-

If you're aware of "The North", here are some of its gems with a 10 km overlay (and of course, Birmingham). By my eye, it looks like a bigger circle could be misleading in terms of the population it represents, but a smaller one might miss out the context of the city.

-

For example, I like Newcastle's region including Sunderland, as they're nicely connected by metro. As for Leeds, Bradford, and Wakefield. Well... they could be nicely connected by metro.

-

Maps displaying a 10 km ring around Manchester, Leeds, Birmingham, and Newcastle.

-
- -

Here. Find a city you know a bit. Does 10 km seem a good measure? Would your city be improved with a giant, imposing 10 km circle in the sky? -Screenshots from Tom Forth's Circle Populations (circle your own city there!).

-
- -

Cities, sorted

-

With a metric decided, we can see what the cities of the UK look like! London is, naturally, excluded.

-

Bar chart showing population of the top 20 UK cities, by population. Shown is the population from

-
+

+ Ring populations: how to compare cities more agnostically +

+

+
    +
  1. + Internet-Inconsistencies +
  2. +
  3. + Let's concentrize! +
      +
    1. + What does 10 km look like? +
    2. +
    +
  4. +
  5. Cities, sorted
  6. +
  7. Appendix
  8. +
+

+ I love comparing the population of cities. I hate that every city is + seemingly measured differently. +

+

+ How am I supposed to answer my pressing questions like: + is Leeds big enough to deserve a tram? +

+

Internet-Inconsistencies

+

+ There would exist no problem if I could search "Birmingham, + Alabama population", then "the real Birmingham + population" to back up my arguments of why I shouldn't be + seeing results for American towns when I'm trying to find a map of + bus routes in the real Birmingham (for the results of this search, see + lower down). However, with almost every city I search for population, + the top results are from different sources, and the search engines + (trying to shave precious seconds off my day) seem to pull their + "summary" figure from a different one of these websites for + every city. +

+

+ Bar chart of population vs source. They vary. +

+
+

+ "Population of Birmingham" from the first few sources I + could find on Google. Presumably the identical ones all use ONS' + data, and the others are more 'international' statistics. + Source. +

+
-

Ring populations! Tag yourself. -Source.

-
+

Let's concentrize!

+

+ The solution to this problem of inconsistency... is to introduce + consistency! Sociologists, anthropologists, and geographists will + berate me for this, but my idea was just to draw a circle around the + centre of the city and count how many people + are inside it. +

+

+ Here is where I would explain the efforts I went through, the + technological tools I learnt, and the troubles I faced in writing a + simple-to-use website to find the population within a circle. However, + the good Tom Forth already + made this, with his page: + Circle Populations. Let's use this to take a look at Birmingham. +

+

+ Two graphs. One of total population below vs area. It displays a log-looking plot. The other of population density around an area. It looks like exponential decay. +

+
+

+ As you increase the area you're measuring, population increases, + and density decreases! Revolutionary! + Source. +

+
-

Nice! Conclusions are free for you to draw.

-

Appendix

-

Birmingham vs Birmingham

-

Above, I complained about Birmingham, Alabama vs Birmingham England. With the search terms above, this is what I find the populations to be:

- - - - - - - - - - - - - - - - - - -
SourceBirmingham, ALBirmingham, UK
Google198,0002,660,000
Within 10 km267,0001,420,000
-
+

+ Comparing this with the original plot above, it seems like 10 km is + about inline with the ONS data. +

+

+ Bar chart of population vs source. This time with ring populations included. They vary. <10 km ring is closest to average. +

+
+

+ The same graph from above! This time with the population within a + 5/10/15/20 km ring around Birmingham. New insights? Or content + padding? + Source. +

+
-

Google's population result vs using Circle Populations.

-
+

+ Thus, I'll stick with 10 km as my favourite circle size. Easy to + remember. This may be showing a bit of decimal favouritism, as 10 km + seems a nice default type if you use base 10. If the world were ruled + by jan Misali, maybe we would end up using 6 km (10 in + seximal). If the world were + ruled by the Mayans, we might use 12 km (10 in + duo-decimal). + In the end, the world was ruled by the French, so 10 it is. +

+

What does 10 km look like?

+

+ If you're aware of "The North", here are some of its + gems with a 10 km overlay (and of course, Birmingham). By my eye, it + looks like a bigger circle could be misleading in terms of the + population it represents, but a smaller one might miss out the context + of the city. +

+

+ For example, I like Newcastle's region including Sunderland, as + they're nicely connected by metro. As for Leeds, Bradford, and + Wakefield. Well... they could be nicely connected by metro. +

+

+ Maps displaying a 10 km ring around Manchester, Leeds, Birmingham, and Newcastle. +

+
+

+ Here. Find a city you know a bit. Does 10 km seem a good measure? + Would your city be improved with a giant, imposing 10 km circle in + the sky? Screenshots from Tom Forth's + Circle Populations + (circle your own city + there!). +

+
-

Extra stuff

-
    -
  • Circle Populations also shows you how many bus, tram, and train/metro stops are in a circle. Very nice for complaining about your city not having trams yet.
  • -
  • Tom Forth has also made Ring Populations, which is a similar idea to Circle Populations, but shows the change in population densities and ring populations since 2001 (UK only).
  • -
  • Colours for the cover image generated with ColorDesigner.io
  • -
-

Data

-

You can view the code to make the above graphs in the GitHub repository! In particular, check out these Jupyter notebooks:

- -

You can open and play with these notebooks on Binder.

-

Footnotes

-

† - the 'centre' of a city is a pretty arbitrary term, but with the sizes of circles we're working with, and the population density drop-off from the centre, it doesn't really make a difference to the final population count.

+

Cities, sorted

+

+ With a metric decided, we can see what the cities of the UK look like! + London is, naturally, excluded. +

+

+ Bar chart showing population of
+          the top 20 UK cities, by population. Shown is the population from
+          +

+
+

+ Ring populations! Tag yourself. + Source. +

+
+

Nice! Conclusions are free for you to draw.

+

Appendix

+

Birmingham vs Birmingham

+

+ Above, I complained about + Birmingham, Alabama vs Birmingham England. With the search terms + above, this is what I find the populations to be: +

+ + + + + + + + + + + + + + + + + + + + +
SourceBirmingham, ALBirmingham, UK
Google198,0002,660,000
Within 10 km267,0001,420,000
+
+

+ Google's population result vs using + Circle Populations. +

+
+

Extra stuff

+
    +
  • + Circle Populations + also shows you how many bus, tram, and train/metro stops + are in a circle. Very nice for complaining about your city not + having trams yet. +
  • +
  • + Tom Forth has also made + Ring Populations, which is a similar idea to + Circle Populations, but shows the change in population densities and ring populations + since 2001 (UK only). +
  • +
  • + Colours for the cover image generated with + ColorDesigner.io +
  • +
+

Data

+

+ You can view the code to make the above graphs in the + GitHub repository! In particular, check out these Jupyter notebooks: +

+ +

+ You can open and play with these notebooks on + Binder. +

+

Footnotes

+

+ † - the 'centre' of a city is a pretty arbitrary term, but + with the sizes of circles we're working with, and the population + density drop-off from the centre, it doesn't really make a + difference to the final population count. +


@@ -185,7 +360,7 @@

Footnotes

Comments

Email me → - alifeee.web@outlook.com + alifeee@alifeee.net :)

@@ -205,7 +380,7 @@

Comments

_Linktree_ Linktree - + _Email_ Email diff --git a/sketch-your-society/index.html b/sketch-your-society/index.html index 8d5db14..4930b80 100644 --- a/sketch-your-society/index.html +++ b/sketch-your-society/index.html @@ -64,46 +64,135 @@

alifeee's blog

-

Sketch Your Society: 100 different sketches from 100 different societies

-

-

In 2021, Alex and I wanted to go to freshers' fair at Durham to check out what cool, post-covid societies had sprung up. To make it entertaining, and force ourselves to talk to societies that we wouldn't otherwise, we wanted a creative idea. What we came up with was to take round a sketchbook to each society at the fair, and to propose to them "please draw something - whatever you feel like - in our sketchbook, to represent your society :)".

-

Many people who acquiesced our request asked us how they could see the whole book afterwards, or where it would be posted online. At the time we had no response, as we were just doing it for our own amusement. But now, thanks to the wonders of digitization, the answer is: right here!

-

(I recommend viewing this PDF with "Even Spreads", if you can, for the book-like experience)

- -
-
-
- -
- -

Freshers' Fair 2021 Sketchbook

-
- -

Inside the book

-

It's very fun to see such the wide range of ideas and creativity of people that results when you give them a pen. I also enjoyed that the societies ended up being almost paired up in the book, combining to create an artistic spread.

-

I implore you to 'flick' through the book above (it's clickable!), but I also highlight some of my favourite pages here. (or even ask me in person, and I might even just find the strange drawer or shelf where it has ended up.)

-

Purple Radio

-

This was one of the first sketches and I just think it's neat.

-

Image of person smiling and talking into a microphone, with Purple Radio's logo above

-

Archaeology Society

-

This one took by far the longest. Perhaps you can tell, because the result is beautiful. This also meant that Alex and I were forced to learn a hell of a lot about archaeology in those 15 minutes.

-

Very detailed image of skull wearing wreath, with archaeology society written adjacent

-

"The Honorable D.C."

-

This is the only sketch which isn't labelled. To this day, I have no idea which society drew this one. Even knowing the section of the room it was in, neither Alex nor I could recall who drew it. Great sketch though.

-

A face with only eyes and a pig-like snout, with

-

Marxist Society & Veg Soc

-

This is my favourite double-page spread in the book as both pages are richly full. Both societies filled the brief and made wonderful pages.

-

Double page spread. On left: Marxist imagery filling the whole page, including hammer and sickle, motifs. On right: Veg Soc logo spelled out with hand-drawn vegetables, with a PETA sticker.

-

Wine & Cheese Society

-

From talking to Wine & Cheese Society, it was all about having a laff. Their picture definitely respects that.

-

Drawing of person passed out, drinking from a bottle labelled

-

Poetry Society

-

Finally, an entry after our own heart. After spending 6 hours ambling through the freshers' fair, sitting among rushed students and leaning around talking to whoever would listen to us, this haiku is very reflective.

-

Page titled

-

Conclusions

-

I hope you enjoyed a scroll through Durham University's social scene in 2021. If you didn't do so, slow down there! Have a look. Absorb some of the creativity within.

+

+ Sketch Your Society: 100 different sketches from 100 different + societies +

+

+

+ In 2021, Alex and I + wanted to go to freshers' fair at Durham to check out what cool, + post-covid societies had sprung up. To make it entertaining, and force + ourselves to talk to societies that we wouldn't otherwise, we + wanted a creative idea. What we came up with was to take round a + sketchbook to each society at the fair, and to propose to them + "please draw something - whatever you feel like - in our + sketchbook, to represent your society :)". +

+

+ Many people who acquiesced our request asked us how they could see the + whole book afterwards, or where it would be posted online. At the time + we had no response, as we were just doing it for our own amusement. + But now, thanks to the wonders of digitization, the answer is: right + here! +

+

+ (I recommend viewing this PDF with "Even Spreads", if you can, for the book-like experience) +

+ +
+
+
+
+

+ Freshers' Fair 2021 Sketchbook +

+
+

Inside the book

+

+ It's very fun to see such the wide range of ideas and creativity + of people that results when you give them a pen. I also enjoyed that + the societies ended up being almost paired up in the book, combining + to create an artistic spread. +

+

+ I implore you to 'flick' through the book above (it's + clickable!), but I also highlight some of my favourite pages here. (or + even ask me in person, and I might even just find the strange drawer + or shelf where it has ended up.) +

+

Purple Radio

+

+ This was one of the first sketches and I just think it's neat. +

+

+ Image of person smiling and talking into a microphone, with Purple Radio's logo above +

+

Archaeology Society

+

+ This one took by far the longest. Perhaps you can tell, because the + result is beautiful. This also meant that Alex and I were forced to + learn a hell of a lot about archaeology in those 15 minutes. +

+

+ Very detailed image of skull wearing wreath, with archaeology society written adjacent +

+

"The Honorable D.C."

+

+ This is the only sketch which isn't labelled. To this day, I have + no idea which society drew this one. Even knowing the section of the + room it was in, neither Alex nor I could recall who drew it. Great + sketch though. +

+

+ A face with only eyes and
+          a pig-like snout, with +

+

Marxist Society & Veg Soc

+

+ This is my favourite double-page spread in the book as both pages are + richly full. Both societies filled the brief and made wonderful pages. +

+

+ Double page spread. On left: Marxist imagery filling the whole page, including hammer and sickle, motifs. On right: Veg Soc logo spelled out with hand-drawn vegetables, with a PETA sticker. +

+

Wine & Cheese Society

+

+ From talking to Wine & Cheese Society, it was all about having a + laff. Their picture definitely respects that. +

+

+ Drawing of person passed
+          out, drinking from a bottle labelled +

+

Poetry Society

+

+ Finally, an entry after our own heart. After spending 6 hours ambling + through the freshers' fair, sitting among rushed students and + leaning around talking to whoever would listen to us, this haiku is + very reflective. +

+

+ Page titled +

+

Conclusions

+

+ I hope you enjoyed a scroll through Durham University's social + scene in 2021. If you didn't do so, slow down there! Have a look. + Absorb some of the creativity within. +


@@ -111,7 +200,7 @@

Conclusions

Comments

Email me → - alifeee.web@outlook.com + alifeee@alifeee.net :)

@@ -131,7 +220,7 @@

Comments

_Linktree_ Linktree - + _Email_ Email diff --git a/snippets-of-a-degree/index.html b/snippets-of-a-degree/index.html index b23ab4f..f741b13 100644 --- a/snippets-of-a-degree/index.html +++ b/snippets-of-a-degree/index.html @@ -66,109 +66,179 @@

alifeee's blog

-

Snippets of a Degree - random sentences from random Masters' projects

-

-

I did a Physics degree at Durham University. This blog comes as a result of a party I had just before final year exams, after everyone had finished their final-year dissertations and reports.

-

To celebrate that we'd all spent half the year knee-deep inside a PDF, we had DICE (Dissertation Isdone Celebration Event)! As part of the party, I got people to write down a sentence or phrase from their dissertation, without context. We drew them out of a hat and made a game of guessing what the degree title was for each.

-

Recently I was reminded of the party when I pulled what remained of the notes from the bottom of a deep drawer. I thought that it would be nice to digitise them, so they're viewable, as I think that it's quite artistic that each note represents a sort of "summary" of someone's entire degree.

-

They were each numbered, but unfortunately, I didn't find the key which matched the number to the writer or degree title. But... that just means that you get to play the game of guessing what degree each belongs to!

-
- -

(p.s., after the previous post, it seems as if I've turned this blog into found paper. the next post won't be. maybe.)

-
- -

The snippets

-

The labelling suggests there were at least 15 snippets, but number 10 is AWOL. Thus, here are only 14. To see the degree for each sentence, check the answers (these will be updated as I remember them or as the people who wrote them read this...)

-

1

-
- -

Determining the Hubble constant precisely is one of the most important goals of modern cosmology¹

-

¹ Perivolaropoulos, L., "Is the Hubble crisis connected with the extinction of dinosaurs?", arXiv e-prints, 2022.

-
- -

2

-
- -

If the nugget is too large or too small, the overall predictive function will either be too sensitive to the random noise in the data, or will not take it into account at all.

-
- -

3

-
- -

Proteins change shape according to their environment and each conformation can be represented as a point in a high dimensional Euclidean Space.

-
- -

4

-
- -

Unfortunately, during the testing, one of the participants (a male aged 18-24) had to stop the process after only a couple of minutes due to sickness, and therefore did not have change to generate any meaningful data for this project.

-
- -

5

-
- -

The cyborg as an ironic myth - reinforcing the false narrative that technology is inherently neutral

-
- -

6

-
- -

However, it is not clear why the machine learner performs better...

-
- -

7

-
- -

We find to have 16 degrees of freedom and calculate Z = 3.52 and a Durbin-Watson statistic of D = 0.42

-
- -

8

-
- -

The clearly outlined consequence for contravening gender norms would encourage conformity through threats of mockery + social shaming.

-
- -

9

-
- -

A Garden of Eden state, or paradisical state, is one that the system cannot reenter once it has left it.

-
- -

11

-
- -

There were many accusations that the elections were rigged; Moscow even congratulated Nabiev on his victory 4 hours before polls closed.

-
- -

12

-
- -

The "immune" state will be considered equivalent to the "dead" state for these purposes as anyone sick enough to die mid-transit wouldn't have made it this far.

-
- -

13

-
- -

"Justification & Motivation for PE"

-

PE = Printed Electronics

-

PE =/= Physical Education

-
- -

14

-
- -

This is true for n ≥ 1.

-
- -

15

-
- -

A similar approach is taken when designing military aircraft in such a way to deflect incoming radio waves, rendering the plane invisible to radar scanners.

-
- -

Fun! How many did you guess?

- - +

+ Snippets of a Degree - random sentences from random Masters' + projects +

+

+

+ I did a + Physics degree at Durham University. This blog comes as a result of a party I had just before final year + exams, after everyone had finished their final-year dissertations and + reports. +

+

+ To celebrate that we'd all spent half the year knee-deep inside a + PDF, we had DICE (Dissertation Isdone Celebration Event)! As part of + the party, I got people to write down a sentence or phrase from their + dissertation, without context. We drew them out of a hat and made a + game of guessing what the degree title was for each. +

+

+ Recently I was reminded of the party when I pulled what remained of + the notes from the bottom of a deep drawer. I thought that it would be + nice to digitise them, so they're viewable, as I think that + it's quite artistic that each note represents a sort of + "summary" of someone's entire degree. +

+

+ They were each numbered, but unfortunately, I didn't find the key + which matched the number to the writer or degree title. But... that + just means that you get to play the game of guessing what + degree each belongs to! +

+
+

+ (p.s., after the + previous post, it seems as if + I've turned this blog into + found paper. the + next post won't be. maybe.) +

+
+ +

The snippets

+

+ The labelling suggests there were at least 15 snippets, but number 10 + is AWOL. Thus, here are only 14. To see the degree for each sentence, + check the answers (these will be updated + as I remember them or as the people who wrote them read this...) +

+

1

+
+

+ Determining the Hubble constant precisely is one of the most + important goals of modern cosmology¹ +

+

+ ¹ Perivolaropoulos, L., "Is the Hubble crisis connected with + the extinction of dinosaurs?", arXiv e-prints, 2022. +

+
+ +

2

+
+

+ If the nugget is too large or too small, the overall predictive + function will either be too sensitive to the random noise in the + data, or will not take it into account at all. +

+
+ +

3

+
+

+ Proteins change shape according to their environment and each + conformation can be represented as a point in a high dimensional + Euclidean Space. +

+
+ +

4

+
+

+ Unfortunately, during the testing, one of the participants (a male + aged 18-24) had to stop the process after only a couple of minutes + due to sickness, and therefore did not have change to generate any + meaningful data for this project. +

+
+ +

5

+
+

+ The cyborg as an ironic myth - reinforcing the false narrative that + technology is inherently neutral +

+
+ +

6

+
+

+ However, it is not clear why the machine + learner performs better... +

+
+ +

7

+
+

+ We find to have 16 degrees of freedom and calculate + Z = 3.52 and a Durbin-Watson statistic of + D = 0.42 +

+
+ +

8

+
+

+ The clearly outlined consequence for contravening gender norms would + encourage conformity through threats of mockery + social shaming. +

+
+ +

9

+
+

+ A Garden of Eden state, or paradisical state, is one that the system + cannot reenter once it has left it. +

+
+ +

11

+
+

+ There were many accusations that the elections were rigged; Moscow + even congratulated Nabiev on his victory 4 hours before polls + closed. +

+
+ +

12

+
+

+ The "immune" state will be considered equivalent to the + "dead" state for these purposes as anyone sick enough to + die mid-transit wouldn't have made it this far. +

+
+ +

13

+
+

"Justification & Motivation for PE"

+

PE = Printed Electronics

+

PE =/= Physical Education

+
+ +

14

+
+

This is true for n ≥ 1.

+
+ +

15

+
+

+ A similar approach is taken when designing military aircraft in such + a way to deflect incoming radio waves, rendering the plane invisible + to radar scanners. +

+
+ +

Fun! How many did you guess?


@@ -176,7 +246,7 @@

The snippets

Comments

Email me → - alifeee.web@outlook.com + alifeee@alifeee.net :)

@@ -196,7 +266,7 @@

Comments

_Linktree_ Linktree - + _Email_ Email diff --git a/steam-collage-api/index.html b/steam-collage-api/index.html index 6dbf9a7..4d4f734 100644 --- a/steam-collage-api/index.html +++ b/steam-collage-api/index.html @@ -334,7 +334,7 @@

Thoughts

Comments

Email me → - alifeee.web@outlook.com + alifeee@alifeee.net :)

@@ -354,7 +354,7 @@

Comments

_Linktree_ Linktree - + _Email_ Email diff --git a/what-is-a-third-space/index.html b/what-is-a-third-space/index.html index ad3d12c..a7e3a93 100644 --- a/what-is-a-third-space/index.html +++ b/what-is-a-third-space/index.html @@ -64,123 +64,381 @@

alifeee's blog

-

What is a third space, and why do I like the concept?

-

-

I am currently talking a lot about third spaces. Let me write my thoughts down. Maybe I've sent you a link to this very page.

-
    -
  1. Who (is this relevant to)?
  2. -
  3. What (is a third space)?
  4. -
  5. Why (do they exist)?
  6. -
  7. When (do they exist)?
  8. -
  9. Where (are they)?
      -
    1. What makes a rubbish third space?
        -
      1. Bad time-based availability
      2. -
      3. Bad financial accessibility
      4. -
      5. Bad social accessibility
      6. -
      7. Task-based activities
      8. -
      -
    2. -
    3. List of third spaces!
    4. -
    -
  10. -
  11. How (can I go to a third space)?
  12. -
  13. Conclusion
  14. -
  15. Information
  16. -
  17. Footnotes
  18. -
-

Time for a lightning round of the 5 Ws

-

Who (is this relevant to)?

-

Everyone! I encourage everyone I know to think about and visit third spaces. I believe they provide an experience valuable to everyone.

-

What (is a third space)?

-

To me, a third space is:

-
    -
  • a place that is not your work or your home
  • -
  • and a place which you can visit semi-regularly, and have repeated interactions and chats with the same people, without planning to meet with them beforehand
  • -
-

If you text friends/colleagues/acquaintances, and then go to a place to meet them, it is not a third space in my view. This is just a group of people meeting together, as an activity. A third space is somewhere people meet by chance, and somewhere that people are comfortable going to alone, because they know that people will be there who they can socialise with and chat to.

-

I have tried to keep this definition broad, to include many places. In my personal opinion, some third spaces are better than others, "better" here meaning more socially "good". "Good" here meaning "good"¹.

-

Why (do they exist)?

-

Humans are social creatures². Third spaces are places that people choose to go exist in, and to socialise in, unlike the more forced nature of socialising at work, or even at home. There is a level of intentionalness about going to a third space which renders them different to "the first" (home) or "second" (work) places.

-

When (do they exist)?

-

Okay, this is a strange W, but, I have twisted it into: third spaces have always existed, and I think people in "modern" society should be more aware of them as a social good, especially as the Internet and modern post-capitalism have trended younger generations towards a more... isolated lifestyle. In this way I also think that they should flourish and their existence grow.

-

In my experience, a lot of people disregard third spaces as unimportant because they feel they lack the time outside of work and domesticity to be able to just "hang around" somewhere, without being productive with what little time they have left of the week. I think this is a bad thing, and that everyone should have more time (that fact alone is worth another entire blog post) to slow down and enjoy a third space.

-

Where (are they)?

-

Perhaps the most important W! Here I will list some places I consider to be third spaces, along with whether I consider them to be "good" third spaces (or, "good examples") and why.

-

What makes a rubbish third space?

-

In order to not repeat myself, I introduce a few common reasons that a third place might be a bit rubbish

-

Bad time-based availability

-

Basically, this is the freedom to come and go on your own schedule. If a space is only accessible once a fortnight or once a month, then I think the time-based availability is bad. If you "miss" going to a third space, and that means you will have to wait a few weeks before being able to go again, the time-based accessibility is bad.

-

I think a good space strives to be open as often as possible. However, being available too often may come with other drawbacks, such as a necessity to spend money.

-

Bad financial accessibility

-

If you have to pay every time you visit a third space, or if it requires some kind of membership fee, it has bas financial accessibility.

-

Bad social accessibility

-

If you turn up to a space and people are not welcoming then it has bad social accessibility. This can be because the space is considered for a certain "type of person" by the people who attend it (think Gentlemen's Club), or just because lots of people use the space only for pre-agreed meetings with friends, so are not turned on to the idea of talking to, or socialising with, strangers (think cafés, board game cafés, pool halls).

-

Task-based activities

-

Some social spaces only exist because everybody there has a task in common that requires they meet at the space. I personally do not consider these proper accessible third spaces.

-

List of third spaces!

-

In no particular order, here is my (and Robyn's) list of third spaces. Each space has a clarification of what problems it may have to limit its goodness as a third space. These are theoretical based on our assumptions of a presumed average space of each type.

-
    -
  • Hackspace/makerspace

    -

    This is my favourite third space to visit. Some hackspaces have bad time-based availability (are only open for social nights once a week/infrequently). They could also be socially daunting to people who may not consider themselves 'specialised' enough to attend. If this is you: maybe my post about hackspaces can change your mind! ;)

    -
  • -
  • Community garden

    -

    Community gardens are fun! The time-based availability could be less-than-optimal, and the same with the weather.

    -
  • -
  • Community centre/social club

    -

    In theory, there is not much wrong with these!

    -
  • -
  • Community café

    -

    I have specifically said "community café" here, as I believe most cafés are not third spaces, but places people go (sometimes in groups) to buy drinks and food. However, I do think some cafés foster more of a sense of community and socialisation, so I include them here with the quite-arbitrary adjective of "community". One issue here is a potential bad financial accessibility, which is a problem brought by the capitalistic need to purchase.

    -
  • -
  • Barbershop/hair stylist

    -

    I think people get a lot of social time out of hair establishments. I think they are similar to cafés, and have similar problems of financial accessibility.

    -
  • -
  • Gym

    -

    I prefer to bike, but I know some people consider gyms great third spaces. Again, however, I believe there is often a financial accessibility issue.

    -
  • -
  • Members club

    -

    Fun idea. Could be quite socially exclusionary and have financial accessibility issues.

    -
  • -
  • Pool hall

    -

    An example I often use. However, could be socially daunting or socially exclusionary, especially if the people there are there to play their own games of pool with their own friends, and not necessarily speak to strangers.

    -
  • -
  • Board game café

    -

    Another place after my own heart, although time-based availability is often poor. That is to say that most of the time they are not social places, but instead only offer social evenings once or twice a month.

    -
  • -
  • Religious groups

    -

    This is a broad category and includes things organised by people who attend places of worship, but the activities to be thought of here are not specifically worship. Again, time-based availability is perhaps not great, and potentially socially exclusionary.

    -
  • -
  • Sports clubs

    -

    For example, tennis clubs, golf clubs, badminton clubs, climbing gyms. I think these have quite a large range of accessibility, thrice socially, physically, and fiscally.

    -
  • -
  • Dog park

    -

    I think this is an interesting example, but one I consider "task based", as people only turn up here who have a dog to walk, so not overly accessible.

    -
  • -
  • School playground

    -

    Ditto to the above, but "dog to walk" → "child to walk".

    -
  • -
  • Laundrette

    -

    Also ditto to the above, but "dog to walk" → "garment to walk".

    -
  • -
-

I think that any place has the potential to be a great third space, for anyone! I think that there are a few common reasons holding some places back, or holding some people back (me) from thinking they are the best examples of third spaces that they want to provide to represent and explain the idea.

-

This is also not an exhaustive list! If you have any other ideas, do comment or text me.

-

How (can I go to a third space)?

-

If any of the spaces above or in the links below interest you, try and find the one nearest you! Or, ask me about it and I will give you my opinion as someone who has repeatedly had to find third places because of my frequent moving between cities.

-

Conclusion

-

I love third spaces. I also love "free spaces", which is a different concept for another time that I desire my society to have more of.

-

My definition of third spaces, I think, differs slightly from the general definition of a "third place", as I tend to place more importance on the social aspect, and opportunity to socialise and chat to people you may not know, or would not have otherwise. This may also be why I enjoy hitchhiking³.

-

Information

-

The content here was produced from my own brain. Lots of other people over time have influenced my brain. Here are some of them.

-

The Great Good Place is a book I have not read, but I keep hearing about.

-

The Wikipedia page on Third Places has a lot of information. In particular, the section on "Oldenburg's characteristics" makes interesting criteria for what a third place is ("Neutral ground", "A levelling place", "Conversation is the main activity", read more...)

-

Andrewism is a YouTuber who posts videos about solarpunk ideals and ideas for a better society. In particular, he has a video specifically about third spaces.

-

Footnotes

-
    -
  1. I believe humans are inherently good, so they should have an understanding of what "good" means
  2. -
  3. citation needed
  4. -
  5. hitchhiking blogpost coming soon...
  6. -
+

+ What is a third space, and why do I like the concept? +

+

+

+ I am currently talking a lot about third spaces. Let me write my + thoughts down. Maybe I've sent you a link to this very page. +

+
    +
  1. + Who (is this relevant to)? +
  2. +
  3. What (is a third space)?
  4. +
  5. Why (do they exist)?
  6. +
  7. When (do they exist)?
  8. +
  9. + Where (are they)? +
      +
    1. + What makes a rubbish third space? +
        +
      1. + Bad time-based availability +
      2. +
      3. + Bad financial accessibility +
      4. +
      5. + Bad social accessibility +
      6. +
      7. + Task-based activities +
      8. +
      +
    2. +
    3. List of third spaces!
    4. +
    +
  10. +
  11. + How (can I go to a third space)? +
  12. +
  13. Conclusion
  14. +
  15. Information
  16. +
  17. Footnotes
  18. +
+

Time for a lightning round of the 5 Ws

+

Who (is this relevant to)?

+

+ Everyone! I encourage everyone I know to think about and visit third + spaces. I believe they provide an experience valuable to everyone. +

+

What (is a third space)?

+

To me, a third space is:

+
    +
  • a place that is not your work or your home
  • +
  • + and a place which you can visit semi-regularly, and have repeated + interactions and chats with the same people, without planning to + meet with them beforehand +
  • +
+

+ If you text friends/colleagues/acquaintances, and then go to a place + to meet them, it is not a third space in my view. This is just a group + of people meeting together, as an activity. A third space is somewhere + people meet by chance, and somewhere that people are comfortable going + to alone, because they know that people will be there who they can + socialise with and chat to. +

+

+ I have tried to keep this definition broad, to include many places. In + my personal opinion, some third spaces are better than others, + "better" here meaning more socially "good". + "Good" here meaning "good"¹. +

+

Why (do they exist)?

+

+ Humans are social creatures². Third spaces + are places that people choose to go exist in, and to + socialise in, unlike the more forced nature of socialising at work, or + even at home. There is a level of intentionalness about going to a + third space which renders them different to "the first" + (home) or "second" (work) places. +

+

When (do they exist)?

+

+ Okay, this is a strange W, but, I have twisted it into: third spaces + have always existed, and I think people in "modern" society + should be more aware of them as a social good, especially as the + Internet and modern post-capitalism have trended younger generations + towards a more... isolated lifestyle. In this way I also think that + they should flourish and their existence grow. +

+

+ In my experience, a lot of people disregard third spaces as + unimportant because they feel they lack the time outside of work and + domesticity to be able to just "hang around" somewhere, + without being productive with what little time they have left + of the week. I think this is a bad thing, and that everyone should + have more time (that fact alone is worth another entire blog post) to + slow down and enjoy a third space. +

+

Where (are they)?

+

+ Perhaps the most important W! Here I will list some places I consider + to be third spaces, along with whether I consider them to be + "good" third spaces (or, "good examples") and why. +

+

+ What makes a rubbish third space? +

+

+ In order to not repeat myself, I introduce a few common reasons that a + third place might be a bit rubbish +

+

Bad time-based availability

+

+ Basically, this is the freedom to come and go on your own schedule. If + a space is only accessible once a fortnight or once a month, then I + think the time-based availability is bad. If you "miss" + going to a third space, and that means you will have to wait a few + weeks before being able to go again, the time-based accessibility is + bad. +

+

+ I think a good space strives to be open as often as possible. However, + being available too often may come with other drawbacks, such as a + necessity to spend money. +

+

Bad financial accessibility

+

+ If you have to pay every time you visit a third space, or if it + requires some kind of membership fee, it has bas financial + accessibility. +

+

Bad social accessibility

+

+ If you turn up to a space and people are not welcoming then it has bad + social accessibility. This can be because the space is considered for + a certain "type of person" by the people who attend it + (think + Gentlemen's Club), or just because lots of people use the space only for pre-agreed + meetings with friends, so are not turned on to the idea of talking to, + or socialising with, strangers (think cafés, board game cafés, pool + halls). +

+

Task-based activities

+

+ Some social spaces only exist because everybody there has a task in + common that requires they meet at the space. I personally do not + consider these proper accessible third spaces. +

+

List of third spaces!

+

+ In no particular order, here is my (and + Robyn's) list of third spaces. Each space has a clarification of what + problems it may have to limit its goodness as a third space. These are + theoretical based on our assumptions of a presumed average space of + each type. +

+
    +
  • +

    Hackspace/makerspace

    +

    + This is + my favourite + third space to visit. Some hackspaces have bad time-based + availability (are only open for social nights once a + week/infrequently). They could also be socially daunting to people + who may not consider themselves 'specialised' enough to + attend. If this is you: maybe + my post about hackspaces + can change your mind! ;) +

    +
  • +
  • +

    Community garden

    +

    + Community gardens are fun! The time-based availability could be + less-than-optimal, and the same with the weather. +

    +
  • +
  • +

    Community centre/social club

    +

    In theory, there is not much wrong with these!

    +
  • +
  • +

    Community café

    +

    + I have specifically said "community café" here, as I + believe most cafés are not third spaces, but places people go + (sometimes in groups) to buy drinks and food. However, I do think + some cafés foster more of a sense of community and socialisation, + so I include them here with the quite-arbitrary adjective of + "community". One issue here is a potential bad financial + accessibility, which is a problem brought by the capitalistic need + to purchase. +

    +
  • +
  • +

    Barbershop/hair stylist

    +

    + I think people get a lot of social time out of hair + establishments. I think they are similar to cafés, and have + similar problems of financial accessibility. +

    +
  • +
  • +

    Gym

    +

    + I prefer to bike, but I know some people consider gyms great third + spaces. Again, however, I believe there is often a financial + accessibility issue. +

    +
  • +
  • +

    Members club

    +

    + Fun idea. Could be quite socially exclusionary and have financial + accessibility issues. +

    +
  • +
  • +

    Pool hall

    +

    + An example I often use. However, could be socially daunting or + socially exclusionary, especially if the people there are there to + play their own games of pool with their + own friends, and not necessarily speak to + strangers. +

    +
  • +
  • +

    Board game café

    +

    + Another place after my own heart, although time-based availability + is often poor. That is to say that most of the time they are not + social places, but instead only offer social evenings once or + twice a month. +

    +
  • +
  • +

    Religious groups

    +

    + This is a broad category and includes things organised by people + who attend places of worship, but the activities to be thought of + here are not specifically worship. Again, time-based availability + is perhaps not great, and potentially socially exclusionary. +

    +
  • +
  • +

    Sports clubs

    +

    + For example, tennis clubs, golf clubs, badminton clubs, climbing + gyms. I think these have quite a large range of accessibility, + thrice socially, physically, and fiscally. +

    +
  • +
  • +

    Dog park

    +

    + I think this is an interesting example, but one I consider + "task based", as people only turn up here who have a dog + to walk, so not overly accessible. +

    +
  • +
  • +

    School playground

    +

    + Ditto to the above, but "dog to walk" → "child to + walk". +

    +
  • +
  • +

    Laundrette

    +

    + Also ditto to the above, but "dog to walk" → + "garment to walk". +

    +
  • +
+

+ I think that any place has the potential to be a great third space, + for anyone! I think that there are a few common reasons holding some + places back, or holding some people back (me) from thinking they are + the best examples of third spaces that they want to provide to + represent and explain the idea. +

+

+ This is also not an exhaustive list! If you have any other ideas, do + comment or text me. +

+

+ How (can I go to a third space)? +

+

+ If any of the spaces above or in the links below interest you, try and + find the one nearest you! Or, ask me about it and I will give you my + opinion as someone who has repeatedly had to find third places because + of my frequent moving between cities. +

+

Conclusion

+

+ I love third spaces. I also love "free spaces", which is a + different concept for another time that I desire my society to have + more of. +

+

+ My definition of third spaces, I think, differs slightly from the + general definition of a "third place", as I tend to place + more importance on the social aspect, and opportunity to socialise and + chat to people you may not know, or would not have otherwise. This may + also be why I enjoy hitchhiking³. +

+

Information

+

+ The content here was produced from my own brain. Lots of other people + over time have influenced my brain. Here are some of them. +

+

+ The Great Good Place + is a book I have not read, but I keep hearing about. +

+

+ The Wikipedia page on Third Places + has a lot of information. In particular, the section on + "Oldenburg's characteristics" makes interesting criteria + for what a third place is ("Neutral ground", "A + levelling place", "Conversation is the main activity", + read more...) +

+

+ Andrewism is a + YouTuber who posts videos about solarpunk ideals and ideas for a + better society. In particular, he has a + video specifically about third spaces. +

+

Footnotes

+
    +
  1. + I believe humans are inherently good, so they should have an + understanding of what "good" means +
  2. +
  3. citation needed
  4. +
  5. hitchhiking blogpost coming soon...
  6. +

@@ -188,7 +446,7 @@

Footnotes

Comments

Email me → - alifeee.web@outlook.com + alifeee@alifeee.net :)

@@ -208,7 +466,7 @@

Comments

_Linktree_ Linktree - + _Email_ Email