As a quick diversion from the nearby WAG series, the geopup and I meandered out this way to find this cache. Once I was in the vicinity of the cache something stood out to me as
unusual, so we went to pick it up… it turned out to be a chunk of wraught iron, but finding it soon pointed me in the direction of the cache. TFTC.
A quick and easy find: we walked straight to where the coordinates said and there it was. My phone, having been rebooted during the last leg, was now behaving much better at narrowing
down a satellite fix!
These woods are really quite amazingly beautiful and serene. It’s quiet and calm here, and both the geopup and I really appreciate the excuse to have come here.
Took several attempts to find the correct hiding place and the poor geopup – who didn’t like the tight-knit undergrowth here except when it suited her (when she wanted to chase after a
pheasant!) – eventually had to be tied to a tree while I pressed-on without her to get the cache in hand. Phew! TFTC.
This was the moment when I found myself wishing that my dedicated GPSr unit was with me and working, as my phone’s GPS fix started jumping all over the place. The geopup and I made a few valiant attempts to search in the obvious places, criss-crossing our way
through some quite fierce brambles as we did so, but without success. Eventually, we had to move on and chalk this one up as a DNF. I’ve
no reason to believe it’s not out there somewhere, but it’ll be a job for somebody whose satellite navigation kit is playing ball.
The geopup made herself useful for this cache, running straight to the cache location. (I suspect that some prior canine visitor may have left their mark somewhere very near to the
cache, and she was more interested in smelling that than she was at helping me find the container, but I can dream of a dog who’s a useful geocaching assistant, can’t I?) TFTC.
Working our way through the first part of the WAG series, we unfortunately had to skip this one without an adequate search: the area was crawling with ramblers, consulting their maps
and chatting with one another, and I didn’t have a good excuse to stop and search. Maybe next time!
The geopup struggles to understand why I sometimes insist on stopping our walks to go and poke around in the nearby trees, and this time was no exception. The hint could refer to one of
several hiding places, and like a previous cacher I worried for a moment that the hiding place might have been destroyed by some recent logging work in this area, but nope: it’s still
here! It was a little more-challenging to retreieve than it perhaps was originally, though, as a pile of branches has been placed between the path and the hiding place, but we found it
in the end then pushed on across the road, waving to some friendly cyclists as we did so.
Another excellent bit of camoflage here, on what has so-far appeared to be a well-loved but well-maintained series. The geopup and I went back and forth a few times before we found the
correct host, but soon had the cache in hand. TFTC.
Unfortunately, my dedicated GPSr had been left turned-on after my last geocaching/geohashing/whatever expedition, and I hadn’t realised
until I was just setting off this morning. I tried to charge it in the car but it didn’t take on enough battery to make it worthwhile to bring it out, so I was working from my phone
(whose GPSr is… adequate… usually), and my watch (whose GPSr is good, but whose user
interface for caching is pretty pants).
But luckily for this cache at least my geosense brought me to exactly the right spot, and I quickly saw something that looked out of place. Imagine my delight when I pulled on it and
the cache was in my hand. Fantastic stuff, TFTC.
The time before last that I was in Goring – the first of my now-three visits – was for a birthday/garden party on 24 June 2018. My eldest – then only four
years old – was getting a little bored of the grown-up conversations going on and I provided a distraction by taking her out to find GLW5FKG9 and GLW5EFV2 (the latter of
which has since been archived).
I enjoyed the camoflage on this cache, but little did I know that it would be a theme throughout many of the caches in this series! FP awarded
anyway, because it delighted me at the time. TFTC.
The last time I was in Goring was on 9 June 2022, when I cycled here via Eynsham, Abingdon, and Didcot. I enjoyed a meal at at Whale Inn in Streatley, then meandered down into Goring in
order to catch a tran part of the way home (I was feeling lazy). Another easy find here. TFTC.
Ignoring times that I’ve passed-through, I’ve only ever visited Goring twice before. It’s time to rectify that! This morning, the dog and I drove down from Stanton Harcourt (near
Witney), parked up, and begun our attempts at the first half of the WAG trail (along with a couple of others along the way).
Starting as we mean to continue, this was a very quick first find. TFTC.
This weekend, I threw a Virtual Free Fringe
party for some friends. The party was under-attended, but it’s fine because I got to experiment
with some tech that I’d been meaning to try.
If you ever want to run something like this yourself1, here’s how I did it.
My goals were:
A web page at which any attendee could “watch together” a streaming video2,
A “chat” overlay, powered by a WhatsApp group3 (the friend group I
was inviting were all using WhatsApp anyway, so this was an obvious choice), and
To do all the above cheaply or for free.
There were two parts to this project:
Setting up a streaming server that everybody can connect to, and
Decorating the stream with a WhatsApp channel
Setting up a streaming server
Linode offers a free trial of $100 of hosting credit over 60 days and has a ready-to-go recipe for installing Owncast, an open-source streaming server I’ve
used before, so I used their recipe, opting for a 4GB dedicated server in their London datacentre: at $36/mo, there’d be no risk of running out of my free trial credit even if I failed
to shut down and delete the virtual machine in good time. If you prefer the command-line, here’s the API call for
that:
The IP address got assigned before the machine finished booting, so I had time to copy that into my DNS configuration so the domain was already pointing to the machine before it was fully running. This enabled it to get its SSL certificate set up rightaway (if not, I’d have had to finish waiting for the DNS change to propogate and then reboot it).
Out of the box, Owncast is insecure-by-default, so I wanted to jump in and change some passwords. For some reason you’re initially only able to correct this over unencrypted
HTTP! I opted to take the risk on this server (which would only be alive for a few hours) and just configure it with this
limitation, logging in at http://mydomain:8080/admin with the default username and password (admin / abc123), changing the credentials to
something more-secure. I also tweaked the configuration in general: setting the service name, URL, disabling chat features,
and so on, and generating a new stream key to replace the default one.
Now I was ready to configure OBS Studio to stream video to my new Owncast server, which would distribute it to anybody who tuned-in.
Decorating the stream
I configured OBS Studio with a “Custom…” stream service with server rtmp://mydomain:1935/live and the stream key I chose when configuring Owncast and kicked off a test
stream to ensure that I could access it via https://mydomain. I added a VLC source4
to OBS and fed it a playlist of videos, and added some branding.
With that all working, I now needed a way to display the WhatsApp chat superimposed over the video.For this, I added a Window Capture source and pointed it at a Firefox window that was
showing a WhatsApp Web view of the relevant channel. I added a Crop/Pad filter to trim off the unnecessary chrome.
Next, I used the Firefox debugger “Style Editor” to inject some extra CSS into WhatsApp Web. The class names vary frequently, so
there’s no point we re-documenting all of them here, but the essence of the changes were:
Changing the chat background to a solid bright color (I used red) that can then be removed/made transparent using OBS’s Chroma Key filter. Because you have a good
solid color you can turn the Similarity and Smoothness way down.
Making all messages appear the same (rather than making my messages appear different from everybody else’s). To do this, I added:
.message-in, .message-out { align-items: flex-start !important; } to align them all to the left
[aria-label="You:"]::after { content: "Dan Q"; height: 15px !important; display: block; color: #00f !important; padding: 8px 0 0 8px; } to force my name to appear
even on my own messages
[aria-label^="Open chat details for "] { display: none; } to remove people’s avatars
[data-testid="msg-meta"] { display: none !important; } to remove message metadata
A hacky bit of CSS to make the backgrounds all white and to remove the speech bubble “tails”
Removing all the sending/received/read etc. icons with [data-icon] { display: none; }
I aimed where possible to exploit selectors that probably won’t change frequently, like [aria-label]s; this improves the chance that I can use the same code next time. I
also manually removed “old” messages from the channel that didn’t need to be displayed on the big screen. I wasn’t able to consistently remove “X new messages” notifications, but I’ll
probably try again another time, perhaps with the help of an injected userscript.
A little bit of a shame that more people didn’t get to see the results of this experiment, but I’m sure I’ll use the techniques I’ve learned on another ocassion.
Footnotes
1 Or, let’s be honest, if you’re Future Dan and you’re trying to remember how you did it
in last time.
3 This could probably be adapted for any other chat system that has a web interface, so if
you prefer Telegram or Slack or whatever ever, that’s fine.
4 OBS’s VLC source is just amazing: not only can you give it files, but you can give it
URLs, meaning that you can set up a playlist of YouTube videos, or RTSP security camera feeds, or pretty much anything else you feel like (and have the codecs for).
The problem of “needing to be able to hear from two Bluetooth sources at once” is so real for me that I came up with a solution that I genuinely use all the time. You’re not going to
like it, though.
Solution in video (no audio needed; no need to fix your headphones first!):
Known Leaders is an open-source
program that combines WikiData with a random generator to come up with almost-invariably inaccurate but sometimes hilarious facts. Jim Kang came up with it during Recurse Center‘s Never Graduate Week. Go have a play, or read more about how and why he made it.