dark mode

You have reached the personal homepage of an on-line entity known as derf / derfnull. Hi! đź‘‹


I enjoy doing things and post some of them on this website. Things may include taking photos, poking at public transit APIs, or putting caffeine into chocolate. Blinkenlights and embedded development are nice, too, though I don't really get around to that anymore.

When it comes to (paid) work, peers usually know me as Birte Friesel. In case you are looking to offer paid work, I also have a small work homepage on this site with a minimal CV and some more details about what I can (and am willing to) do.



You can reach me by E-Mail (d​erf@fina​lr​ewind.org) and on IRC (derf0 @ OFTC, hackint). My PGP key for E-Mail encryption is 64FE6EC0 55560F9E F13A3044 19E6E524 EBB177BA. I occasionally post stuff on the Fediverse (@derf@social.skyshaper.org).

The remainder of this page duplicates a curated sub-set of projects and the latest blog entries.


> hafas 'Eichlinghofen H-Bahn, Dortmund' 'Dortmund Hbf'

00:15        Schw-B HB5  (0:03)  S 1

Schw-B HB5 → Universität S-Bahnhof, Dortmund
21:51  ab  Eichlinghofen H-Bahn, Dortmund
21:55  an  Universität S-Bahnhof, Dortmund

Walk 37m  (approx. 3 minutes)
S 1 → Dortmund Hbf
21:58  ab  Dortmund Universität: 2
22:06  an  Dortmund Hbf: 4
> efa Essen Martinstr DĂĽsseldorf Hbf
14:34 ab  Essen Martinstr.: Bstg. 1      StraĂźenbahn 108      Essen Altenessen Bf Schleife
14:38 an  Essen Hauptbahnhof: Bstg. 1

14:47 ab  Essen Hauptbahnhof: 2          R-Bahn RE11 (RRX)    DĂĽsseldorf Hbf
15:24 an  DĂĽsseldorf Hbf: 10
> hafas-m 'Hamburg Dammtor'
13:49  ( +1)  RE 7     Flensburg                  3
13:49  ( +1)  RE 7     Kiel Hbf                   3
13:49         S 5      Buxtehude                  2
13:50  ( +4)  Bus 5    Nedderfeld, Hamburg
13:50         U 1      Ohlstedt, Hamburg
> efa-m -s VVO Dresden Hbf
13:40 ( -2)  5      66           Lockwitz
13:41        3      3         .  Wilder Mann
13:44        4      3         .  CoschĂĽtz
13:44        6      66           Freital-Deuben
13:46 ( +4)  6      360          Kurort Altenberg Bahnhof
13:46        5      360          Dresden AmmonstraĂźe / Budapester StraĂźe
13:48 ( +1)  1      7         *  Weixdorf
13:51        1      10        .  Tolkewitz
13:52        Gl.10  RE3          Hof Hbf


Travel-Routing-DE-HAFAS-0.08.tar.gz (signature)

  • Adjust walking connection segment handling for DB HAFAS update on Sun Jun 09 (ignore walking segments without a duration)

Travel-Status-DE-IRIS-1.97.tar.gz (signature)

  • Update stations list
  • Add deprecation notice. The backend service that this module relies on is deprecated and scheduled for decommissioning. There is no successor. Do not use this module for new projects and be prepared to migrate away from it sooner rather than later.

Travel-Status-DE-VRR-2.02.tar.gz (signature)

  • EFA->new: Deprecate efa_url option. Use service instead. efa_url is still supported, just not documented anymore.
  • EFA->new: Request departures in Europe/Berlin by default rather than using the system time zone. Fixes EFA operation on machines using UTC.
  • efa-m: Support "FULL" occupancy; change indicators from _ * ! to . o * !

Travel-Status-DE-VRR-2.01.tar.gz (signature)

  • efa-m: Deprecate --efa-url in favour of --service. It is still supported, just not documented anymore.
  • EFA: Add new_p constructor for asynchronous operation with promises
  • EFA: Add static get_service function

Travel-Status-DE-DBWagenreihung-0.14.tar.gz (signature)

  • This module now explicitly treats carriages as groups, just like the backend does. Each group contains at least one carriage and has a distinct number, origin, destination, and train type / description.
  • Add Travel::Status::DE::DBWagenreihung::Group module.
  • DBWagenreihung: Add groups, carriages, and train_nos accessors.
  • DBWagenreihung: origins, destinations: Return hashrefs with "name" / "groups" / "sections" rather than "name" / "sections".
  • DBWagenreihung: Remove train_descriptions, wagongroup_description, wagongroup_subtype, and wagongroup_model accessors. Use $wr->groups and $group->description / $group->desc_short instead. This is a breaking change.

Travel-Status-DE-DBWagenreihung-0.13.tar.gz (signature)

  • DBWagenreihung: Add station accessor.
  • DBWagenreihung: Add TO_JSON function.
  • DBWagenreihung: remove station_ds100, station_name, and station_uic accessors. Use station->{ds100}, station->{name} and station->{eva} instead. This is a breaking change.
  • DBWagenreihung: origins now returns a list of hashrefs, just like destinations. It used to return a list of names. This is a breaking change.

Travel-Routing-DE-HAFAS-0.07.tar.gz (signature)

  • Replace built-in HAFAS service list with the one provided by Travel::Status::DE::HAFAS
  • Convert non-local time stamps to backend-specific time zone
  • hafas: Add -x / --exclude-infeasible and -j / --with-jid options
  • HAFAS::Connection::Section: Support unspecified local transit (TRSF)

Travel-Status-DE-DeutscheBahn-6.02.tar.gz (signature)

  • hafas-m: Add -j / --with-jid option
  • $hafas->station: Correctly determine "name" and "eva" for stations that have multiple EVA IDs and names.

Travel-Status-DE-DeutscheBahn-6.01.tar.gz (signature)

  • Journey: Add operators accessor
  • Add CMTA (Capital Metropolitan Transportation Authority) and BLS (BLS AG) services

Travel-Status-DE-DeutscheBahn-6.00.tar.gz (signature)

  • Add AVV (Aachener Verkehrsverbund), BART (Bay Area Rapid Transit), and IE (IarnrĂłd Éireann / Irish Rail) backends
  • Support backend-specific time zones; add time_zone to service description
  • Handle cross-timezone journeys and stops whose time zone differs from the backend's default time zone. As of this release, all input and output datetimes refer to the backend's default time zone rather than local time (Stop and Journey accessors) / whatever (hafas-m and HAFAS arguments). Use the new tz_offset accessor to determine local time. This is a breaking change.
  • Journey, Stop: Add tz_offset accessor

Travel-Routing-DE-HAFAS-0.06.tar.gz (signature)

  • hafas: Add -C / --change-time option
  • HAFAS: Add min_change_time option

Travel-Status-DE-DeutscheBahn-5.06.tar.gz (signature)

  • Add Travel::Status::DE::HAFAS::Product module to handle line numbers, operators, and similar. This enables proper support for journeys with multiple operators and possibly multiple train/line numbers along the route. It also exposes the line ID.
  • Journey: Add product accessor
  • Stop: Add prod_arr, prod_dep accessors
  • hafas-m: Improve stop list display in journey mode
  • Fix polyline and platform number support in Ă–BB backend (and possibly other non-DB backends)
  • Ă–BB backend: correctly handle polylines and platform numbers
  • Ă–BB backend: Remove redundant train numbers from $journey->name / $journey->line / $product->name
  • Ă–BB backend: update productbits (thanks to Cassidy Dingenskirchen)

Travel-Routing-DE-HAFAS-0.05.tar.gz (signature)

  • hafas: Add -c / --max-change option
  • hafas: Add optional via arguments
  • HAFAS: Add max_change option
  • HAFAS: Add via_stops option