I’m still lagging way-behind on writing-up the nonfiction I’ve been reading this year, and I’m long
overdue1 to share my love of
Holly Gramazio‘s debut novel, The Husbands. Which is excellent; truly
un-put-downable. I’d come across Holly’s writing before by playing Dicey Dungeons, but I hadn’t realised that until later when,
four chapters into this book, I decided to look her up (in the hope, perhaps, that she’d written any other books I could add to my reading list – the answer is… not yet).
Here’s the skinny. Lauren comes home from a night out to find her husband waiting for her. Which is immediately confusing and concerning, because when she left for the evening, she
wasn’t married. But all the evidence suggests that now, somehow, mysteriously, she has a husband: she finds letters addressed to the pair of them, her phone is full of photos of them
together going back through their wedding and beyond, and all of her friends back up the fact that she really has made a life with this man… that she just can’t remember.
But the weirder bit she discovers a little later. Whenever her husband goes up into the attic, he’s replaced with a different husband. A different man, it seems, that
she could conceivably have married, in some strange alternate timeline. By controlling how and when they do so, she comes to discover that she can cycle through a
seemingly-endless supply of husbands, and as she comes to accept and understand her new life, begins to use this as a kind-of… dating superpower? “Trying on” a husband for
as many minutes, hours, days, or months it takes to decide whether or not to “keep” him2.
That’s the premise, and it’s perfectly fun (although occasionally dark) – sort of a parody of “swipe-left/swipe-right” modern dating, taken to an extreme – but wouldn’t by itself be
reason enough to recommend it. But what comes next is what makes it so special.
Aaand… I feel like I can’t say more without spoiling it. And you really should read it! Suffice to say that the writing is compelling, and engaging, and there are plenty sufficient
twists and turns to keep you interested even if you wouldn’t normally go in for… what I’m going to describe as a romantic-comedy. Our protagonist’s situation feels relatable
even while it’s unfamiliar, and I enjoyed both laughing at her exploits while also grieving her losses. And again: the surprises and quirks are really fun.
A challenging but worthwhile find during a walk along and around the Ridgeway.
My initial attempt to collect the coordinates was way off because I misinterpreted some of the instructions and it yielded a point almost 2km away! My second attempt looked better,
giving a likely-looking spot… but the checksum was out by one!
I triple-checked all the sources and was still out! I was most-confident in my calculated latitude, so I permuted all possible one-point longitude changes that would satisfy the
checksum. This yielded two candidates: one a tenth of a minute out from my original calculation, and one a thousandth of a minute out.
The one that was a tenth of a minute out from my calculation “felt wrong”, being way off the path, so I merely glanced its way as I walked past to the other. The one that was a
thousandth of a minute – which equates to only around a metre! – looked better, and sure enough when I got there I found a multitude of likely hiding spots.
The hide itself was sneaky too: I had to go further from the path than I expected in order to “look back” and spot the cache – very tricky in the thickening undergrowth! But find it I
did, and duly signed the log before returning it to its snug little spot.
Ruth, JTA, the kids and I are all back in the UK1
after a three week period during which some or all of us were consistently in Spain. The whole adventure was the kind of masterpiece of epic planning that only Ruth could have pulled
off, and it worked spectacularly2.
I wasn’t around for the first week of the trip, but continued working from home (with the dog, pictured) as per the usual.
San Sebastián
Through clever permutations of remote-working from overseas (mostly by Ruth) and overlapping/intersecting stretches of annual leave (mostly by JTA and I), we were able to avoid having
to send the dog to the dogsitter for a block of more than a single week3,
didn’t need to break the bank on our collective leave budgets, and managed to give the kids the longest possible block of continuous immersion in the language and culture of Spain.
The one time I tried surfing, I wasn’t good at it, but I was reassured that was normal for a first day. The kids disproved that theory,
becoming pretty reasonable boarders very quickly.
In the first week (when I wasn’t there), the kids got to take a mixture of surfing classes and Spanish language lessons in San Sebastián, among other activities. The Bordeaux wildfires caused some travel chaos for the others getting there, but they made it work in the end.
Tarragona
Later, I flew out to meet up with them and we switched to the opposite coast of Spain, staying in a delightful little
villa North of Tarragona. The summer heatwaves that are affecting the continent made the middle of the day especially
oppressive, so we did as the locals do and sensibly sheltered indoors during the hottest part of the day… but the kids in particular were glad to be able to take a dip in the pool to
cool off.
The villa was a lovely building in a fabulous spot, nestled among hillside olive groves and vineyards, but the lack of wired Internet
access/WiFi plus the signal-blocking stone walls made it more “disconnected” than we’d anticipated4!
As has become my tradition when travelling and on family holidays – because I’m an earlier riser than most, but also because I wanted to make the most of the coolest part of the day – I
got out early most days for a whole bunch of geocaching expeditions5.
But once others were awake we found plenty of other opportunities to explore the area.
Parc Samà‘s breezy towers and water features took some of the heat out of the day, when we visited its attractive botanic gardens.
Having come from, remarkably, a similar level of temperature and humidity in the UK, I was interested to see how much greener everything was here on the Mediterranean
coast. The plants here, better-adapted to hot and dry summers than those that we plant on our little island, were clearly more-suited to these kinds of conditions. Is it perhaps time
that Britain started ditching her lawns and other year-round thirsty vegetation… instead planting more tropical-adjacent plants to provide shade (and carbon capture!) as the climate
continues to shift?
This little fella had the right idea about keeping cool.
I enjoyed that we were able to split out time between a diversity of activities. A week-long jaunt can be dominated by a single activity – a skiing holiday, for example – but by the
time you’re spending most of a month exploring a country, you want to be able to mix things up a bit, right?
Sometimes we kept it slow-paced and relaxing, like reading by the pool while the children invent splashing-based games or playing board games in the shade. Other times we explored
history and culture, like our visit to the Ferreres Aqueduct, the Catedral de Tarragona, or the old Roman amphitheatre.
An augmented reality tour of the amphitheatre was both engaging and educational for the kids, bringing to life its long and complex history: did you know it started as an
amphitheatre, but later was the ground of a church (commemorating Saint Fructuosus, who was executed there), then
became a prison, and now… it’s an amphitheatre again: in addition to being a historical monument it’s used to stage concerts and things!
And other times still we even did the typical “British tourist in Spain” things, like a trip to the beach or an expedition out on a catamaran to swim in the sea while the sun set.
I expected the catamaran trip to be a bit tacky, but it was actually lush. (I may have availed myself of the open bar, a bit!)
Obviously the biggest reason for our trip was to catch sight of the total solar eclipse as it passed over the region, and our villa’s garden/vineyard was without a doubt a superlative
spot for this. We’d initially been concerned that visibility of the low-in-the-sky/close to sunset eclipse might be obstructed by the hills and that, therefore, we’d need to find
another spot from which to spectate, but an early-in-the-week experiment of watching the sunset (with an eye on the clock) reassured us that this wasn’t the case. So – as long as we
were lucky with the cloud cover – we should be set.
A particular highlight of the entire trip was hanging out as a family in our private vineyard, watching the solar eclipse.
I’ve been fortunate enough to have had great visibility of a total solar eclipse once before, in 1999, but honestly: this one beat
it. The perfect location, the reds of the setting sun, the “moon illusion” exaggerating the perceived size of the moon as it
approached the sun, the joy of vicariously sharing in the childrens’ wonder… all of these made the whole experience pretty mind-blowing.
You’ve seen pictures of eclipses before, but this one is mine. I maintain that even the good/professional photographs are poor substitutes for the real experience, though!
We watched, we awed, and then we saw the still half-obscured sun gradually disappear over the horizon. And then, a round of hugs and cheers and conversation later, we sat up late to
enjoy the Perseids begin their nocturnal display.
Mostly I was looking at the sky (through the safety of my eclipse glasses, of course). But I managed to snap a handful of photographs that, despite the limitations of my phone’s
camera, came out pretty well.
PortAventura
After our week in the villa we delivered JTA to the airport to return home. Then Ruth, the kids and I drove on to PortAventura, perhaps
our favourite theme park anywhere in the world. Since our last visit, the younger kid has reached a milestone of height that permits him to ride all of the largest rides, and he was
excited to take advantage of this newfound privilege.
A particularly useful thing about PortAventura compared to some other theme parks is that it’s designed with heatwaves in mind: it’s got lots of natural shade, cooling-off
areas, and the right ratio of water rides for when you positively, absolutely need a good soaking.
Both the elder child and I were particularly excited to share with him my favourite non-looping
rollercoaster, Shambhala. Shambhala is simply excellent: it’s a highly-vertical smooth ride with a free and open-feeling restraint that, collectively, give amazing “air”
and a sensation of “flying” that’s hard to compare to almost any other coaster ride I’ve been on. I could sing its praises aplenty.
The second we reached the front of the line for our first ride on Dragon Khan…
it broke down. But we got to watch it being repaired right in front of us, so that’s cute!
Going to Disneyland Paris and PortAventura in the same summer gives me the confidence to say: PortAventura is the better theme park. The rides, the
theming, the food, the queue management, the accommodation, the value-for-money… it’s all better. So if you’re considering a European theme park trip and you don’t
care about getting your photo taken with Goofy or whatever… PortAventura would be my suggestion.
PortAventura’s water park is good too, although it was pretty busy on the day we went. Their 30-metre tall near-vertical waterslide King Khajuna is a little
intimidating7,
but nothing our thrillseeking little man wasn’t up for.
Barcelona
Finally, we made our way to Barcelona for a “wind-down” couple of days at a hotel we’ve always enjoyed there. Aside for being mistaken for staff
while I was using my laptop by the rooftop pool, there’s little of note to say about it: we took it easy, did as little as we could get away with, and generally “unplugged” before
our journey back to the UK and a return to normal life (boo!).
Altogether a fabulous trip… and a really interesting experiment in a model that we could replicate if we ever opted for a three week (but drop-in/drop-out/telework) holiday in future.
Though… I’d again want (our scheduling queen) Ruth to wrangle the logistics, because it gets complicated when there are so many moving parts!
2 For a while, she was talking about trying to engineer it into a five-week
expedition spanning both this and our trip to France earlier in the summer (to which JTA, the kids and I drove/LeShuttle’d, and to which Ruth flew following a work-related
event in Austria: my, what a cosmopolitan life we’re leading this year!). But that’d have been an enormously more-complicated affair and I’m glad we settled on this “simpler” trip in
the end!
3 Not that she cares: the dog loves hanging out with her little doggy friends, and is
always excited to be taken to our dogsitter‘s, where she also “commutes” for a workday or two most weeks.
4 During out post-holiday ‘retro’ (because of course that’s what we do), the lack of connectivity appeared as both a negative
and a positive on some of our lists! Obviously we’re all aware that a little digital disconnection is healthy and valuable, but sometimes it takes being in the middle of
nowhere to impose the requisite self-discipline to keep off your devices!
6 Obviously, the Devil’s Bridge nearest where I used to live and at which Ruth and I spent our first anniversary – back when we had no idea that we’d be able to make our relationship last… what…? 19 years this month!) –
will always have a special place in my heart.
7 Reaching the top of King Khajuna’s tower, you can feel it swap in the breeze, and when
you get to the slide itself its ‘horizon’ disappears precipitously until you shuffle completely up to it, at which point there’s little choice about your destination! While we queued
for our first goes, we witnessed several people reach the top, change their minds, and turn back!
Found in the fourth place I looked. Nice container size, like the last letterbox hybrid.
This is where we’ll part ways. As much as I’ve loved this series so far and would enjoy exploring more of it, I need to get back to my accommodation where, apparently, my kids are
waking up and ready for another fun day. So I’ll be switching to the Més enllà de la
via II trail and finishing my walk soon FP awarded for this series as a whole; I’ve loved every moment of it (even that one frustrating cache from a few minutes back!).
TFTC, and if you the CO ever find yourself over my way, can I plug my cache GC9GTV3 Drive Slowly; Fox
Crossing. It’s 100% the kind of hide you’d enjoy based on what I’ve seen of your work here!
My family and I are on holiday, staying a couple of villages away. I came out this morning to see if I could find a couple of local caches before the day’s activities. This was the
first.
A great container in good condition. I love it when a cache can be hidden “in sight”. FP awarded. SL, TFTC, and greetings from Oxfordshire, UK!
I’ve been doing what remains of the Ruta Pels Volants del Mars De Salort series of took a diversion to find this cache. The impressive host didn’t need a hint – she’s pretty easy to
find!
The cache container is absolutely excellent. Amazing camouflage! It’s a shame this is my 1001st find and not my 1000th because I’d have loved to make this great container my milestone! FP awarded.
Signed log and returned to its hiding place. TFTC/GPA, and greetings from Oxfordshire, UK!
Finding the cache was easy. Reaching around to pull it from its hiding place was harder! But soon I had it in hand. This has been a lovely morning walk.
Now I should have some breakfast and make my lazy children get out of bed!
TFTC/GLA. FP for the series in general (as experienced so far). And once more: greetings from Oxfordshire, UK!
The campsite provided our large group with an entire field to ourselves, including spaces for socialising, a fire pit (at which the
kids enjoyed toasting marshmallows), and a wood-fired hot tub.
The entire weekend would have surely been a memorable experience already, but one particular event will probably stick in the minds of everybody in attendance: the
fire.
The fire
The UK’s in its unprecedented third heatwave of the year: the grass is all dying and everything is tinder dry. And so it was that, on Friday night as the kids and I slept in our
glamping “dome”, I was woken by the distant beep-beep-beep of a domestic smoke alarm. A few seconds later, I heard a second such alarm with a different tone, and it became clear that
this wasn’t just somebody’s toast on fire.
Not recorded: the sound of the occupant of this static caravan/cabin – having jumped through the window to safety as the front door was blocked by flames – on the phone to the fire
brigade.
I went back into the dome to check on the children, which is when Penny knocked on my door to ensure I was aware of what was going on. The kids were sound asleep, so I ran out to the
car park to move the car (which was parked in such a position that embers were raining down on it!) and to check on the situation.
The fire intensity of the fire grew particularly intense as the sound of fire engine sirens began to be heard from the valley below. Photo copyright Rory Prior.
I returned to the dome and got the children dressed. We evacuated to a safer distance and watched as the firefighters arrived and began to tackle the blaze. Short of water, they had one
pump dousing the flaming building while two others relayed water from the nearest fire hydrant, way down the hill.
There was a brief faux pas when one of the Abnib kids exclaimed “this is so cool“… without realising that he was standing right next to the people whose
home was being destroyed in front of us.
Eventually the situation came under control and we were all able to return to bed.
The battery pack
I spoke to Mike, whose holiday home was the building that was destroyed. He’d managed to escape with some shorts and his mobile phone, but little else: in particular, his car keys
remained inside and were probably destroyed, which rendered him unable to drive back to his regular home.
The firefighters worked quickly, but it still took over three hours before they were able to finish spreading out and drenching everything that had caught light. We watched from a
distance, and sheltered all the children (including those of a non-Abnib family on-site) in one of our tents.
Mike had been turning his phone on only in bursts in order to conserve battery for all of the essential calls he’d have to make (e.g. his bank, to extract some money without his cards,
and a locksmith, to get him back into his car). His phone charger – an awkward USB-B-Micro one – hadn’t survived the fire.
But conveniently… I happened to have such a cable in my bag. Plus a fully-charged battery pack. So I lent both to Mike, in the hope that it’d make it easier for him to do all of the
necessary administration1.
It’s got to be a pretty-devastating thing to happen to your holiday home and everything in it. Mike was surprisingly chill about it when I spoke to him, taking soft-of an attitude of
“well, there’s no point fretting about it after the fact!”
“You saved my life!”
Anyway: on Saturday night, shortly after the kids and I had turned-in, there was a knock on the door. It was Mike, come to return the battery pack I’d lent him.
The kids didn’t know who he was, so I explained: “This is Mike; he’s the fella who lived in the home that burned down last night.”
Mike handed over the battery pack and charging cable and, grateful for them, used a metaphor that. “Thanks,” he said, passing the hardware to me, “You saved my life!”
I hadn’t told Mike which glamping pod was ours, and just figured I’d see him around. Or else if I didn’t get my battery pack back, that’d be fine: it’ll have been more-useful to him
than to me in the days to come! But there we were, in our pyjamas, when he appeared at our door.
He turned and left, and both kids sprung out of bed and exclaimed “You saved the life of the guy whose house burned down‽”
I’m sure they had in their minds the idea that, during the period between the fire starting and me waking and evacuating them, I’d singlehandedly dragged this dude out of a burning
building. Y’know, instead of just lending him a phone charger after-the-fact.
I only let them hold the misapprehension for a few minutes, but for a moment it lightened the mood.
Footnotes
1 I was already using my phone to call our insurance company before our flood, earlier this year, had finished. I can only imagine how inconvenient it is to suffer a disaster and lose your communications lifeline at the
same time!
This summer, the kids’ performing arts school are singing and dancing in a show at Disneyland. We’re all very excited, but my excitement, at least, was muted a little when I
was told to install the “Travelbound” app in order to get access to the itinerary, travel
arrangements, and accommodation details.
Fuck that noise. This should have been a webpage. Why do you want me to install a(nother) shitty app just to tell me something that could have been a (smaller, faster, more
universally-accessible) document?
I’m not remotely exaggerating. This app is literally text, images, and links to PDF files, delivered via the Web.
There only seem to be two things that this “app” does, that a webpage might not have, and they’re both anti-features:
It reports tracking data associated with your Google Account back to the developers.
It shows you advertisements (which they call “inspirations”) for other trips organised by the same agency.
Fuck. Everything. About. That.
A webpage would have been so much better. Unlike this app, a webpage can be…1
Copy-pastable
Printable
Saveable
Bookmarkable
Searchable
Usable on virtually any device
(Potentially) more-accessible
I’m annoyed enough… that I’m going to “fix” this app. Hold my beer.
Created a new virtual device in Android Studio’s Virtual Device Manager.
Tested adb shell was working and used rootAVD to root it: ./rootAVD.sh
system-images/android-33/google_apis_playstore/x86_64/ramdisk.img.2
Performed a cold boot, ran Magisk, and tweaked its settings to automatically grant su access to any app that
asked.3
All your traffic are belong to me. At this point, it’s just like running Wireshark or TCPdump.
Ran HTTP Toolkit and told it to intercept AVD traffic. It installed a (fake) VPN provider, routing the phone’s traffic through the
proxy.4
Installed the Travelbound app from the Play Store.
Configured HTTP Toolkit to proxy only the Travelbound app (more signal, less noise).
With only a couple of minutes experimentation I discovered that the app works by concatenating the username and password5
and using it in a URL of the form:
This returns a pile of JSON which, with a little interpretation, can be seen to represent all of the content the app “shows”. E.g., there’s:
an array containing each leg of the itinerary,
an array containing all of the “inspirations” advertisements to show you,
a cross-referenced array containing all of the files (images etc.) that are referenced by the other sections, etc.
They’re clearly producing HTML code anyway… so again, I ask: why isn’t this a webpage?
A little experimentation showed me that the S3 image URLs were being delivered with moderately-short expiration times, so the JSON needs re-fetching periodically even if the content
hasn’t been changed.6
Turning it into something better
Now I had everything I needed to make something… better. I wrote a Ruby script that runs on a Cron schedule to pull the latest JSON and use it to build a HTML page.
I chose to have it completely skip over the “inspirations” (“overlayRows” in the data schema) and just list:
the items from the itinerary and
all of the files not referenced by the inspirations nor itinerary, (a lazy way to collate the PDF download links).
Then I hosted the page, protected by a password: the same one my tour group were given in the first place. I included the raw JSON it used in <details> elements so it
can be checked if e.g. there are bits of the schema I didn’t see but that might appear later.
My web page isn’t as “pretty” as the app from which it “borrows” its information. But it’s a fraction of the size and gets all of the Web’s standard features for free.
Some people like an “app”, and that’s… fine, I guess. But some apps could have been a webpage. And especially where, like this one, the content they deliver is already written
in HTML and delivered over HTTP… they should be a webpage, right?
I can’t understand how we got to this place with “app culture”! Software companies are happy to make their lives harder (and more expensive: deploying to the big app
stores isn’t free!), in order to deliver HTML content to fewer people and with fewer features7
than if they just published directly to the Web in the first place!
There are (some) tasks for which an “app” is absolutely the right choice of medium. Travelbound is not one of them.
But at least I (and the rest of our group, whom I’ve shared it with) now get the choice about how we access this content. Either a 43MB app (ballooning to 124MB
when it’s finished downloading extra content) with tracking and advertisements… or a 0.05MB web page (with an optional extra 35MB of images) that provides more features and works on
more devices. I know which one I’ll be using!
Footnotes
1 And these are just the features that everybody can get behind. The webpage
I ultimately ended up making to replace the app also has some user-friendly/developer-hostile features, like the fact that it removes the tracking code and doesn’t show
advertisements.
2 You need to root the device in order to force applications that use Certificate Pinning
to trust your man-in-the-middle proxy server. Without this, some applications – including the one I wanted to reverse-engineer – will recognise your self-signed TLS certificate as
invalid and refuse to communicate.
3 Without changing this setting in Magisk, I found that HTTP Toolkit would
request su access but not wait for the response, and go on to run in unprivileged mode before I had a chance to grant it!
4 Owing to Android security considerations I needed to manually install the root CA
certificate it installed for me, but the instructions “just worked”.
5 The username and password is shared by an entire tour group. I’m guessing they don’t
have a plan for if some credentials get leaked? Or possibly they consider all of the data they hold to be low-sensitivity enough that it doesn’t matter if it does… in which
case I return to my original point: why the hell wasn’t it just a webpage in the first place?
6 Or else the images need caching locally, which seems to be what the app does, in the
bloatiest possible way.
7 And, often, with worse accessibility. I’ve not audited the accessibility of this app,
but there are things about it that suggest that it’d be harder to use using accessibility technologies than my plain, simple Web version.
Sat in the shade with my panting pupper and almost immediately spotted this clever cache container. A great location and an imaginative container! Definitely worth an FP from me.
What a beautiful spot for a geocache, which the geopup and I quickly found in the second host we checked. Then, we enjoyed a delightful few minutes of peace, sitting on the riverbank,
before continuing our morning’s adventure.