Jan de Muijnck-Hughes

@jfdm@discuss.systems
323 Followers
230 Following
2.5K Posts
Lecturer of type-driven approaches to trustworthy-systems (CyberSecurity) at Strathclyde. Professionally interested in PL & FM Methods; socially interested in coffee, politics, music, the outdoors, sci-fi, high fantasy, & much much more! My work doesn’t define me; it is not my identity.
wwwhttps://tyde.systems/
Pronoun’she/his
Locations🇳🇱 🏴󠁧󠁢󠁷󠁬󠁳󠁿 🇬🇧 🇪🇺
People who think their Agda code with no explanations is self-explanatory.

Oh... the image still from the video stops at an important slide!

Showing the Motivating Example Revisited...

Whilst I do not like tooting my own horn, if you were interested in my #TYPES2025 talk (Towards Being Positively Negative about Dependent Types) and could not make it.

Here you go:

https://www.youtube.com/watch?v=8xc50Lf6pXs

TYPES2025 - 4.7. Jan de Muijnck-Hughes - Towards Being Positively Negative about Dependent Types

YouTube

I hear ICFP is going to get FREX'd but with the meeting of two conferences, fools seldom differ!

Well done all.

Reading up on #Python #typeAnnotations and #TIL that Python 3.12+ makes it a lot easier to define generics:

```
def safeHead[T](xs : list[T]) -> None | T:
pass
```

https://mypy.readthedocs.io/en/stable/generics.html#generic-functions

I didn't realise that as my system runs python3.10 (LTS ¬FTW; Support only upgrades at end of service life).

Need to explore how to get python3.12 running locally and not breaking my system.

Generics - mypy 1.16.1 documentation

I'm sure you've heard about the #CreativeCommons new #CCSignal initiative.

This is the only “signal” I want to send to #AI leechers.

EDIT because in my haste I had forgotten the image description.

EDIT 2: check downthreads for download links to the original SVG by yours truly.

#noAI

When doing pattern-matching to analyze a value, what is the most common/comfortable/best name given to that value, in general?
Discriminant
8.7%
Subject value
8.7%
Scrutinee
69.6%
Other (please specify!)
13%
Poll ended at .

PSA: If organise meetings with people who have children, have a copy of the local School term dates around.

There are certain weeks in the year (Summer & Half Term) that you should avoid...

Today we’re quietly (and finally!) opening up Railfinder to the public! This is our beta version and - hopefully - the first step towards that one booking site for trains across Europe that we all dream of.

Lots of work has gone into this and equally lots still to do before reach that vision, but if you’d like to try what we’ve built you can now just go to https://www.railfinder.eu and have a go!

Any and all feedback more than welcome 🙏

🇪🇺⚛️🔐 The Commission published guidelines for the transition of member states to Post-Quantum cryptography.

👉 All Member States should start transitioning to post-quantum cryptography by the end of 2026.

👉 the protection of critical infrastructures should be transitioned to PQC as soon as possible, no later than by the end of 2030.

https://digital-strategy.ec.europa.eu/en/library/coordinated-implementation-roadmap-transition-post-quantum-cryptography

A Coordinated Implementation Roadmap for the Transition to Post-Quantum Cryptography

The EU Member States, supported by the Commission, issued a roadmap and timeline to start using a more complex form of cybersecurity, the so-called post-quantum cryptography (PQC).

Shaping Europe’s digital future
×

Today we’re quietly (and finally!) opening up Railfinder to the public! This is our beta version and - hopefully - the first step towards that one booking site for trains across Europe that we all dream of.

Lots of work has gone into this and equally lots still to do before reach that vision, but if you’d like to try what we’ve built you can now just go to https://www.railfinder.eu and have a go!

Any and all feedback more than welcome 🙏

And for the nerds among us, we have a page on all the details that went into this - including our initial ticket coverage & how the search works: https://www.railfinder.eu/how-it-works

Ask me anything!

How Railfinder works

Railfinder
I should also add that we’re actively working on some technical issues that happen a bit more often than we’d like. Hopefully we’ll catch and fix the more common of the errors in the coming days - this is one of the reasons we start as a beta and wait a bit before launching too widely 🤫

@stefanlindbohm Right now, I notices that Saarübrcken Hbf is missing (very weird it has secondary stations, but not the main one).

Also, I think it is worth mentioning you do charge booking fees. It would be nice to explain clearly the rates applied.

Last, any intention of supporting deutschland tickets, loyalty cards and discount cards ?

(I have a tricky test case with SNCF, you will need to run TER fare search with each applicable card separately as the SNCF backend is buggy and hasn't been fixed despite several reports).

@Sobex Yes we have issues with stations that are on a country border. Thanks for the report, will fix!

Good point also on the fees! We also know we will to monitor and adjust to make sure they always make sense with min and max limits.

We definitely want to support reduction cards. Once we do, the SNCF issue should not be a problem for us as we request tickets for each segment independently :)

@stefanlindbohm Well, ticket for each segment independently is not enough to sort out issue when two cards are applicable to a single TER trip.

I'll PM the exact combo I use.

@Sobex Ah I see. Thanks, very happy to have cases to test! 🙏
@stefanlindbohm great website, nice work, I am adding this to my favourites! Already noticed one thingy: when untapping the "short transfers" button, nothing changes and it still shows travel options with 3m transfers 🏃‍♀️‍➡️
@stefanlindbohm maybe because it doesn't have the short transfer label I do see with other routes, which do disappear when the button is untapped.
@alexsteenbreker Indeed. We go by min allowed for regional trains usually, but maybe we should add a little margin to RE in the Netherlands?
@stefanlindbohm oof, matter of choice really... maybe if the criteria are clear or you can set it yourself, it will not lead to any confusion. For some stations / people / transfers 3 mins is too little.

@stefanlindbohm what data structures, path finding algorithms, infrastructure and tooling are you using etc 🤓

also, how big is your team?

@bovine3dom Data is in Postgres. Journey planner is a custom-built one in Go based on RAPTOR and follow-up paper from KIT. Hosting on Render and Hetzner. Web app in Ruby on Rails.

Tech team is ..mostly me 😅. We’ve had some added oomph from a consultancy when money allows.

I have two co-founders, Zuzana who’s a marketing strategist and Veronica who is managing our partner relations. Some project-based consultants when possible/needed on a few non-tech things.

@stefanlindbohm cool, thanks for the response! is it vanilla postgres or are you using postgis / column database extensions?

is "partner relations" a euphemism for "i really didn't want to talk to the SNCF myself" :) ?

do you modify RAPTOR to find "better" routes e.g. with night trains or do you use it mostly unaltered and score the routes afterwards?

(much love for Hetzner)

@bovine3dom Postgis (used mostly at import time for now) and the official hstore extension for localised names of things. That’s all.

Haha! She’s working on a massive pipeline of new contracts we will be able to add so I couldn’t do her job whether I wanted to talk to SNCF or not :)

Our RAPTOR implementation is pretty far from the variant in the paper. The authors would potentially call us crazy for some of the shenanigans we’re doing 😅😅

@stefanlindbohm What was the reason to partner with SNCB for the ticket sales? Were the technically best suited? Most welcoming toward your project? Cheapest?
@utrenkner We love all our children equally :). Seriously though, SNCB have been super helpful and supportive. We do have more contracts signed though and for the most part it’s just a matter of boring details that affected the different timelines.
@stefanlindbohm a new booking site in 2025 that does not rely on OSDM?🤨
@julian_b We don’t decide what tech the distribution systems offer us, and it doesn’t particularly affect the functionality much. But the Swiss integration that we’ll have soon is partly OSDM based and we look forward to more as more systems are switching in the coming years!
@stefanlindbohm but why aren't you adopting a direct OSDM connection where it is already available (e.g. with DB)? As far as I understand it this would allow a better coverage of the special ticket types?

@julian_b OSDM is a good standard, but for the most part it’s not enabling things that were impossible before. It does help reduce technical costs of integrating with multiple systems if all support OSDM though.

The limiting factor is the contracts. We’re working on signing on as a reseller for more operators, and even already have some more on the way that we aren’t ready to share just yet. More to come!

Bravo!

@stefanlindbohm Proposing routes in France with more than 2 connections could be a game changer (as SNCF API doesn't allow that).

But how are passenger rights going to work? Isn't there a risk of losing users after a bad experience (i.e. missed connection, and no possibility to hop on the next train) ?

@cartotrain And transfers longer than 2.5 hours, I learned recently :)

But yes indeed, for these cases we need to split the tickets and that puts all responsibility on the passenger. We try to combine as much as possible, but don’t hide results if it’s not. We will improve the info shown on the consequences of this though.

And hopefully we can do more to protect the transfers in the future, but that’s for later

@stefanlindbohm I imagine it would make a cool blog post on what goes into aggregating all the train data from presumably many different sources in many different formats.
@bitbonk We rely on the international timetable database called MERITS for the majority of times we have, so we don’t do this work ourselves. It is indeed an interesting project to run - but sadly not our blog post to write :)
@stefanlindbohm works impressively already! I really like how you included stopovers for long journeys, nothing else I know does that. Do you query DB etc. for itineraries as well or do you have your own router solution from raw open data?

@aronkvh Thank you!

We run routing entirely in our own systems. Data is the industry’s international timetable (MERITS). Open data is not good enough to do this across Europe sadly. A number of countries don’t publish at all or update the feeds extremely infrequently.

@stefanlindbohm
Absolutely awesome.
My apologies if you already answered this, the thread has become very long.
Why create your own routefinder, instead of taking Transitous/MOTIS and extending it according for your needs? Not re-inventing the wheel and all that.

@Luke_Vader Thank you! No worries, this wasn’t specifically asked.

We built our own because our criteria and optimisations are very different to ensble us doing full day searches with massive (multi-hour) detours in the name of a number of comfort related criteria. Plus we tightly integrate the display with the rest of our app. There’s a lot of complexity in other planners we don’t use and vice versa.

Was it a 100% correct decision? 🤷🏻‍♂️ But that’s why :)

@stefanlindbohm
Fair enough.
Are you planning on making it accessible to developers? and how?
Would a developer be able to use your route finder? Be able to find prices for specific trains or routes? Ability to purchase from you?
@Luke_Vader I’ll have to say we don’t know (how) yet. First priority is to build a site that delivers a good experience for travelers that people actually want to use. It would be great to open up use to developers to some extent in the future to reach further than our own channels and generally for openness. We’ll have to get back on details once we get there!

@stefanlindbohm kudos, you've found decent solutions to my go-to riddle "Paris to Kaunas" on the very first try, no fiddling.

I may use that next time !

@c_chep
Ha! A routing from Kaunas was my first trial run.
Warnings of tight connections exactly where I have already taken the same view myself.
I think I have a better workaround than railfinders was able to suggest (EIP then LeoExpress), but what it said was accurate and relevant.
#EuropeanRail
@stefanlindbohm The connection from Zürich to Bodø is nice, also possible with night trains. As a company registered in Sweden, it's funny that you can't sell tickets through Sweden, though. What about passenger rights? If I buy dedicated tickets for every part of the journey with a railfinder surcharge, what happens when I miss a connection?

@datacyclist I know!! Don’t get me started :). But we will add SE tickets very soon!

Passenger rights is the same as otherwise - meaning you have separate tickets and in some cases can rely on AJC for connections between. This is something we want to help with in the future, but it’s a little complicated and we need to do it right. But we really want to fix that as soon as we can!

@stefanlindbohm it would be nice to offer a selector for departure/arrival time. 😘
@orangerkater Indeed! We search the full day and for longer journeys it’s often not needed to filter that much. But we have it on our list to add as soon as we can for when it’s needed!
@stefanlindbohm currently it seems that searches start at the current time. So I need to enter the day before the desired travel date in order to find connections.

@orangerkater Are you judging by the departure time of the top result? We order by default by a ranking of comfort, not time. All results between 05-24 are included for the day you search. You can sort by departure tile by clicking the ”all departures” option above the list.

If not, you might have found a case that trips us up, care to send me a screenshot if so? I’ll look into it!

@stefanlindbohm indeed, you are right. I am so used to sorting by time that I didn't check whether the next connection is on the desired date or not.
@orangerkater We maybe should make this clearer just because it’s a bit unexpected for a lot of people. Adding it to our notes of feedback. Thank you!
@orangerkater @stefanlindbohm The „short changing time“ feature is useful, but it would be even more useful it would suggest if there are any alternatives (same route, but take the following train for example)

@fiete It does! For any result that has that flag, there is another with a similar departure time that has transfers that we do recommend. Maybe we should think of a way to clarify which result is the alternative for a specific one that is flagged with the warning?

@orangerkater

@stefanlindbohm Buchs SG is missing. @jon will not be happy about this. 😉

@orangerkater Ah, yes. Some stations are also border points (for ticketing purposes etc) and we get a little confused by these right now. Will fix, it’s on the list!

@jon

@stefanlindbohm
Hi Stefan,
Great work !! This looks very promising indeed.

I quickly tested the application, and it selects the correct train.
The only thing is that the pricing seems to be a bit different if I compare it the the bahn.de website?
(€ 99,99 vs € 29,99)

@egonkastelijn I think you have a discount card added on your search on DB? The normal pricing is €99.99 on DB when I cross check - same as us minus our booking fee.
@stefanlindbohm
Oh, sorry. You’re completely right. My bad.
I selected a different age for the traveler.

@stefanlindbohm "Travel at night" and "nighttrain" feels a little odd. I understand that "travel at night" means "sit in whatever train that runs at night", but it might need some thought on wording / explanation.

Being able to avoid "daytrains at night" is huge improvement over other sites 👍🏻

@interrailinfosvenska Thanks, good point! We’ll review the wording 🙌
@stefanlindbohm Wow, it gives me really good results for multi-day travels. Congrats!
@stefanlindbohm wow. If I ask for Wenen, it comes up with Vienna. Super!
@stefanlindbohm Question: What's the benefit over using trainline.eu?
@genodeftest We have our own journey planner that prioritises comfort even when traveling multi days. Ticketing is done separately, after we identified your trip. So we’re also not limited by having to offer tickets each and every segment to show the results - for example trains that are only sold at the station we can still include with instructions and sell the rest right there. Hopefully more details as we improve as well :)