I guess it’s the laptop and the pile of towels that cause the confusion, but people keep asking me questions (usually in Spanish) about where to get towels from and whether they can use
the pool at this hotel.
And I have to keep explaining that nope, I don’t work here, I’m just watching my kids play while I catch up on my RSS reader!
A quick find exactly where it should be while driving from Tarragona to Barcelona. My family and I were in the area for the eclipse and then for a trip to PortAventura and are heading to Barcelona for a few days before flying home.
My partner and our kids went to the bathroom and snack bar while I jogged up to the bridge. The coordinates put my close but the hint moved me exactly where I needed to be. Strangely, I
suddenly needed to tie my laces, and then just as suddenly the cache was in my hand!
Thanks for breaking up this long journey (full of bad traffic!) for us. TFTC, and greetings from Oxfordshire, UK!
Of all the architecture with which the devil is (per legend) credited with the construction, L’Aqüeducte Romà de les Ferreres might be the most impressive.
This week, I’m living in a villa on a vineyard about 9km North of Tarragona, on the East coast of Spain.
Gotta say, it’s a pretty place to walk the grounds of.
A large part of our choice of location for this trip was, of course, the total solar eclipse that’s expected
this evening, whose path of totality just barely passes over this spot before disappearing somewhere over the Mediterranean.
We tested by watching a couple of sunsets that, at the time of day the eclipse will occur, the sun will still be visible over the horizon.1
26 years ago, almost to the day, I blogged about witnessing the 1999 solar eclipse from Paris, where we were fortunate enough that Europe’s cloudy conditions on that day broke just
in time for a midday totality and a proper “diamond ring” occlusion. I’m not confident I’ll ever see an eclipse quite so spectacular again in my lifetime, but I’m hopeful!
Obviously the eclipse is a primary deciding factor in our location this summer, but this family holiday’s about more than just seeing the sun vanish and hoping that it comes
back out again.
For example, we’ve also braved the August heat for a variety of outings around the area, such as to the beautiful botanic gardens of Parc Samà where
we met this curious little turtle.
I’ve been out geocaching a lot on the mornings, for example, as is my way when visiting any foreign country! I’ve enjoyed taking advantage of being a
naturally earlier-riser than most of my family, coupled with the cooler morning temperatures, to explore the hills and forests of this region. And look: I found my thousandth ever geocache!2
The one downside3 of our accommodation is the lack of connectivity. There’s no wired
Internet here, and the hilly location and stone walls make acquiring a reasonable cellular signal… challenging.
To look into a Three Rings issue this morning, I first needed to drive down the hill and around the valley a short way to get
line-of-sight to a cellular tower, in order to get more than one bar of 5G signal and tether myself a reasonable Internet connection!
Anyway: it’s beautiful and bright (and scorchingly hot!) out here, and I’ve got my fingers crossed for clear skies in eight hours’ time. Here’s hoping!
Footnotes
1 Without clouds in the way, the prettiest pictures of sunsets occurs just after
this point, of course. I’ve spared you seeing a photo of an unoccluded sun, which – depending on the brightness fidelity of your screen – you’d possibly need to wear special shades to
look at anyway?
2 I know, I know: I’ve been geocaching for sixteen
years – I “should” have found more than that by now. Well, I’m pretty laid-back about the sport, and often only target caches with a reasonable number of positive reviews or that
are otherwise interesting to me. I’m not so-interested in making the “number go up” as I am in exploring interesting places and seeing cool things.
3 Or is it an upside? It’s certainly keeping my focus on the world around me and away from
screens!
Apparently, zero of the imagineers building this Disneyland Paris cafe conceived that “Chuck Wagon” sounds like what a cowboy would call a wheeled vomit trough. 😂
Fuck Paris. The only way to buy a metro ticket is to download an app. Fair enough. But, after downloading the app it tells you to install another app!
What the actual fuck? A convoluted, messy, and frustrating situation which has resulted in awful reviews for them.
Trains and metro travel require separate tickets at different prices. You can’t easily hop from one to another. You need to think carefully about the route you’re taking. A more
convoluted route may be significantly cheaper because it doesn’t involve swapping between services.
This absolutely parallels my experience of hopping around the Paris’s metro area, last time I was there.
If I’ve got to navigate my way through Paris’s public transport network… I’m going to need a drink first.
From the sounds of things, this is clearly designed as a convenience for visitors to the city, not regulars and locals:
Dès le 30 juin 2026, les touristes et les voyageurs hyperoccasionnels pourront opter pour valider leur titre en sortie de l’aéroport d’Orly sur la
ligne 14 avec la carte bancaire.2
Paris’s relationship with tourists is different from London’s
Les prix des titres de transport via les bornes d’achat sont les suivants :
Bus/tram/funiculaire : 2,55 € (soit + 0,50 € sur le prix classique) ;
Métro/train/RER : 3,35 € (soit + 0,80 € sur le prix classique) ;
Aéroports : 14,80 € (soit + 0,80 € sur le prix classique).
Buying transport tickets in Paris using a contactless card… costs 0.50 € to 0.80 € more. Paris will charge you for the convenience of tapping in and
out with your carte bancaire.
Tap in, tap out. Unless you’re eligible for discounted travel, you probably might as well use your debit card to get around London. Photo by Luca Sammarco.
Contactless is clearly more-convenient for city visitors, but I think the difference between London and Paris’s attitude to it says something about the relationship both cities have
with their tourists. In London, most travellers can use whatever bank card and mobile wallet they’ve already got… and they’ll get as good a deal as possible. But in Paris,
doing the same will invariably cost more than a conventional ticket would. You pay a convenience-tax.
Both cities get tens of millions of annual visitors and extract billions of euros worth of financial benefit from their tourist economies. Paris doing slightly better overall, but
they’re closely-comparable enough that differences like this probably mean something.
Tap in, pay a premium for the privilege. Thanks, Paris! Photo by Candelario Benítez.
I’m not saying that London loves tourists and Paris hates them! It’s not so simple as that. But I think perhaps the cites try to present themselves in a different way.
London’s public transport says: we’ll work around you. You can learn the rules as you go; you don’t have to “learn London” to get around. Just use your usual
contactless card wherever you go; we’ll work out the details, and your daily cost will get capped just the same as if you chose to pick up an Oyster card. Visiting the city as a tourist
is an ordinary use-case for the transport network.
Paris’s public transport says: you should learn the rules. You’re welcome to visit, but you either need to do the work to be a “temporary Parisian”… or you can
just use your usual contactless card but we’ll charge you a premium for the convenience. Visiting the city as a tourist is a special case that the transport
network sees differently from being a local.
Neither approach is “wrong”… but I think it’s interesting. And now I’m wondering what the approach is like across other European cities.
Footnotes
1 I’ll almost-certainly have to tackle the current-generation of Paris’s public transport
at some point before then, but I’ll look forward to the improved version once it rolls-out.
2 “From 30 June 2026, tourists and hyper-ocassional travellers will be
able to pay by bank card on Line 14 out of Orly Airport.” Emphasis mine.
I’ve got an upcoming trip to France: I’ll be driving there through the Channel Tunnel, via LeShuttle. But owing to a quirk in our family travel
arrangements, we’ve have a slightly different set of passengers in the car for the outbound leg than for the return journey.
You’d think that to specify different passengers for the return leg, all I’d have to do is uncheck that checkbox, right? Wrong!
I was able to provide all of the personal and passport details of everybody on the outbound leg, but un-checking the “Return passenger information is the same” checkbox did… nothing. In
fact, when saving the form and logging in again, the checkbox would be automatically re-checked.1
This is the point at which a normal person would either:
Add the details of all passengers, both outbound and returning, to the form, and just hope they can sort out the confusion at the terminal, or,
Try to get hold of a human Help Centre/Contact Us system (good luck!) who can sort it out.
Fortunately, I am not a normal person. I… am a software security engineer.
API reverse-engineering
My browser debug tools quickly indicated how this entire process works, and gave a clue as to what was broken in LeShuttle’s systems.
When you log in, it makes a POST request to https://nextus-api-prod.leshuttle.com/b2c-api/GuestApi/Read?bookRef=...&surname=..., including your booking
reference and surname (which acts as your password) in the relevant parameters.
This returns all of your details in a JSON document. Prettified, and with all of the actual data replaced with explanatory comments, it looks something like this:
{
"loginDetails":{
/* credentials you used and other metadata */},
"bookingDetails":{
"outboundTravelDetails":{
/* details about your outbound train and vehicle */},
"returnTravelDetails":{
/* details about your return train and vehicle */},
"leadName":{
/* details of the person who booked the trip */},
"outboundPaxDetails":{
/* For the outbound journey: */"paxLine":[
/* First passenger: */{
"paxDets":{
/* - name, nationality, gender, DOB */},
"docDets":{
/* - passort number, expiry, issuing country */}
},
/* Second passenger: */{
/* ... and so on .... */},
],
/* Total number of passengers: */"noOfPax":"4"},
"returnPaxDetails":{
/* For the return journey: */"paxLine":[
/* ... each passenger: same format as outbound... */],
/* Total number of passengers: */"noOfPax":"5"},
"storedPaxDetails":{
/* Pre-saved details? All blank for me */},
/* More metadata */},
"status":{
/* Yet more metadata */},
/* Even more metadata */
}
Once you’ve made some changes, you press “Save”. This triggers a POST request to https://nextus-api-prod.leshuttle.com/b2c-api/GuestApi/Save with
Content-Type: application/json and the entire JSON document from before, with your modifications, passed back.2
If you’re a programmer, you’re probably already making a guess as to what the underlying problem is. And you’re probably right:
The “Return passenger information is the same” checkbox value is not stored in the data that gets passed back and forth.
Instead, it’s derived by looking at the outbound and return passenger information. If it matches, it gets checked.
If it’s initially checked… the form doesn’t bother loading the UI that allows return passenger details to be modified.
But… this means that it never loads that UI:
the first time you visit the page the passenger list is empty both ways, which matches: anything you enter will necessarily be recorded into both the outbound and return fields,
so
the next time you visit, it also matches… so it still doesn’t load the fields,
Knowing how the API worked, I was able to simply take the JSON document from the /Read endpoint, modify it so that the outboundPaxDetails and
returnPaxDetails each contained the correct details for that leg of the journey (being sure also to update the total number of passengers noOfPax, which is for
some reason a stored value rather than a derived one), and then submit it back via the /Save endpoint.
Having done this, I hit the /Read endpoint again to confirm that the data had, indeed, retained the data I submitted. When logging in again to the Web interface, I noticed
that the checkbox now doesn’t automatically check itself. The correct data gets passed back and forth4.
Obviously LeShuttle need to fix their damn site. But at least – thanks to a little API reverse-engineering – I was able to submit the details they wanted from us.
Footnotes
1 Before anybody asks: yes, I tried all of the obvious things like using different
browsers, clearing caches, disabling plugins, etc. I even had another passenger, using a different computer and operating system, give it a go. This one’s definitely a bug in
LeShuttle’s systems.
2 I choose to assume that they’re doing some kind of server-side validation to ensure that
a customer can’t, for example, modify details they’re not permitted to without a charge, such as which train they’re booked onto or the registration plate of the vehicle they’re
bringing. But obviously I haven’t tested this, because it’s not among the information that I’m authorised to modify. Ethical hackers get permission before they poke
at things they’re not sure whether they’re supposed to… especially if it’s a travel-related system and they’re somebody who has an unusual name that routinely
gets them stopped and questioned at the UK border in general. 🤭
3 It occurs to me that possibly LeShuttle provide access to the relevant form only after
the outbound journey has been made? Which would be a terrible design for the system and would represent terrible UI (why provide the checkbox if it doesn’t do anything?). I decided
not to chance that this could be the expected approach, though, and just “fixed” the data up-front.
4 I haven’t tried modifying any of the outbound details to see if this re-breaks the
return details. I suspect it would be fine, based on my analysis that the bug exists only in the front-end. But I can’t be sure without testing, and proper testing is something that
LeShuttle’s own techies are getting paid to do. I don’t care enough about their website to do it for free!
I was pretty ill yesterday. It’s probably a combination of post-flood stress and my shitty lungs’ ability to take a sore throat and turn it into something that leaves me lying in bed
and groaning.
I spent most of the morning in and out of a fitful sleep, during which I dreamed up the most-bizarre application: a GPS tracker app that, after being told your destination and what you
were eating, reported your journey progress to social media by describing where you were going and how much of your food was left1.
The “eating progress” could either be updated to the status itself or overlaid onto a map of the route.
I should be clear that in the dream, I wasn’t the one that invented this concept; in fact, I didn’t even understand it at first (maybe I still don’t!). In the dream I was
at some kind of unconference event with a variety of “make art with the Web” types, and I missed a session by falling asleep2. I woke
(within the dream) right before the session ended and rushed in to see what was being presented, and only got the tail-end of the explanation of how a project – this
project – worked, after which I felt rushed to try to understand it before somebody inevitably tried to talk to me about it.
For times you’re disconnected or otherwise unable to self-track, tools like FlightRadar could step in.
I’m probably not going to implement this. It is, in the end, the kind of stupidity that could (should?) only appear in the dreams of somebody who’s got a bad head cold.
But if you manage to take this idea and turn it into something… actually good?… let me know!
Or if you’ve just got a cool, “Web 2.0-ey” idea for the name of an app that tracks both your journey progress and your meal consumption, I’d love to hear that too.
Footnotes
1 Under the assumption that its consumption would be evenly distributed throughout the
journey. Because everybody does that, right? Counting the number of steps they make before taking another equal-sized bite. Right?
2 Even in my dreams, I can dream of falling asleep. And, sometimes, of dreaming. A fever
probably helps.
My regular home office of the last six years sits stripped-down, with no flooring, skirting boards, or power (with the exception of the specialised circuit powering an industrial
dehumidifier).
And man, a home insurance claim seems to be… slow. For instance, we originally couldn’t even get anybody out to visit us until F-day plus 10 (later improved to F-day plus
7). The insurance company can’t promise that they’ll confirm that they’ll “accept liability” (agree to start paying for anything) until possibly as late as F-day plus 17. Nobody will
check for structural damage until F-day plus 191.
Right now, though, we’re spending two weeks in this holiday let about half an hour’s drive from our house. It’s pretty nice, except that we have to commute over the ever-congested
single-lane Burford Bridge to get the kids to and from school every day2.
Some days it feels like being stuck in a nowhere-place… but simultaneously still having to make the regular everyday stuff keep ticking over. Visiting the house- currently stripped of
anything damp and full of drying equipment – feels like stepping onto another planet… or like one of those dreams where you’re somewhere familiar except it’s wrong somehow.
But spending time away from it, “as if” on holiday except-not, is weird too: like we’re accepting the ambiguity; leaning-in to limbo. Especially while we’re waiting for the insurance
company to do their initial things, it feels like life is both on hold, and not-allowed to be on hold.
The dog gets it. I had to take her to the house for a while on Monday3 and she spent the whole time leaning against my feet for reassurance.
And I worry that by the time they’re committed to paying for us to stay somewhere else for at least half a year, they lose any incentive they might have to contract for speed. There’s
no hurry any more. We’re expected to just press pause on our home, but carry on with our lives regardless, pretending that everything’s normal.
So yeah, it’s a weird time.
Footnotes
1 I’m totally committed to this way of counting the progress, which I started on F-day plus 3. I get the feeling like it might be a worthwhile way of
keeping track of how long all of this takes.
2 Normally, the younger and older child are able to get to school on foot or via a bus
that stops virtually outside our house, each day, so an hour-plus round-trip to their schools and back up to twice a day is a bit of a drag! We’re managing to make it work with a
little creativity, but I wouldn’t want to make it a long-term plan!
3 And do some work from there, amidst the jet engine-like noise of the dehumidifiers!
Amusing announcement from the captain of my plane out of Tenerife South this afternoon. In place of the usual recommendation to keep your seatbelt fastened while seated in case of
turbulence, he advised that there was a “risk of potholes”.
I’m sure the analogy makes sense to the Brits aboard, but I hope it translated well for the Spanish speakers on this plane!
My partner Ruth and I are staying at the Meliá hotel down in the city, from which amazingly I was able to get a WiFi connection despite the
considerable distance!
As others have observed, the hint is misleading for this cache. Substitute the word “right” in place of the word “left” and the hint makes more sense!
Ruth and I made several attempts today without success: a muggle was sat nearby in such a way that access to the GZ was obstructed. We took a
walk to the nearby Anglican church – whose architecture, if you ignore the volcanic rock, is uncannily like that of Anglican churches in the UK – but then we returned the muggle had
very much set up camp and was going nowhere. We attempted to find a way to the cache from the opposite side without luck, and eventually had to give up. 😔
After solving the riddle yesterday, my partner Ruth and I came up from the seafront to find this cache today. What a delightful spot to hide
the cache, and what a wonderful puzzle (and spot of local literary history) with which to bring us here.
SL, FP awarded. Greetings from Oxfordshire, UK. TFTC!