Friday Night Dinner: Oystermen

The Oystermen is a restaurant not far from Covent Garden. We've been before, but many years ago, probably pre-pandemic. As the name suggests they specialise in oysters and henceforth we had plenty of them.

For our starter we picked a raw Jersey rock oyster each, which were fresh and delicious. However, this spot also does cooked oysters, which is more unusual, so we also enjoyed a couple of seaweed oysters which were served with a seaweed butter, and two tempura oysters.

As our arrival drink we fancied a cocktail, and we're quite keen on Martinis. We decided to have a Martini with an oyster in it, because, you know… when at an oyster restaurant! It worked even better after we added a drop of the leftover oyster juice to our cocktail. The Oyster garnish took the place of the more usual olive and added a similar salty, briny tang. Definitely one to try if you get the opportunity.

For our mains my wife ordered a mackerel, which came with a horseradish sauce. I ordered the Gurnard, curried, with a few chilli flakes. We also chose to have some fries on the side. These were crispy, with a lightly spiced coating which worked well with both main courses. We also ordered a glass of Chardonnay each.

We still fancied a digestif. My wife had a glass of the Sazerac Straight Rye, which in my opinion could have done with a bit of ice. I selected a Somerset cider brandy, which I had never had before.

We really enjoyed our time at the Oystermen. The food is excellent, the ambience is great, and on top of that they play recordings of the shipping forecast in the toilets, which are located downstairs. I think we'll be back at some point.

Jersey Rock Oysters
Jersey Rock Oysters
1 / 6
Seaweed and Tempura Cooked Oysters
Seaweed and Tempura Cooked Oysters
2 / 6
Curried Gurnard
Curried Gurnard
3 / 6
Mackerel with Horseradish Sauce
Mackerel with Horseradish Sauce
4 / 6
Oyster Martini
Oyster Martini
5 / 6
Spiced Fries
Spiced Fries
6 / 6

Shortlink

This article has a short URL available: https://drck.me/oystermen-jlp

Likes

Comments

No comments yet

Friday Night Dinner: Richoux

Richoux is a French bistro restaurant that used to be situated on Piccadilly near the Ritz, but they've now moved to Regent Street, next to the BBC Broadcasting House.

We went when they still hadn't quite opened yet, their so-called "soft opening".

I choose, as one of my favourite starters, the Escargots de Bourgogne: snails in a pesto-like sauce. The sauce was fairly oily, and I sort of wished I'd had some bread with that. My wife had the Rillette de Saumon, a nice enough (but not overly exciting) salmon pate with some toasted bread.

As her main, my wife picked the Steak Frites with a Béarnaise sauce. She ordered it medium rare. It was well cooked and well seasoned, but not too well rested. I had a Filet de Saumon, which was also quite nice, but nothing particularly very special. With our main, we also had a bottle of wine. Wines start at around £40.

In the end, we thought the meal was a little disappointing and on the pricier side. One thing that was useful, is that because they were in their "soft opening" mode, all the food was half price.

I don't think we're going back to Richoux. But if you're in a mood for some French food, near Regent's Street, then they'll be able to provide you with a solid meal. To be honest, if you really want French food, you’d be better heading to Le Vieux Comptior, which isn't very far away in Marylebone, or Le Garrick in Covent Garden.

Snails in a Pesto Sauce
Snails in a Pesto Sauce
1 / 4
Salmon Rillette
Salmon Rillette
2 / 4
Salmon Filet
Salmon Filet
3 / 4
Steak Frites
Steak Frites
4 / 4

Shortlink

This article has a short URL available: https://drck.me/richoux-jlf

Likes

Comments

No comments yet

Selecting Time Zones

On the phpc.chat Discord, a user of a website was complaining that a site required them to select their home time zone from the 500 item long list of IANA Time Zone Identifiers. You might have encountered these in the form of Europe/London, America/Los_Angeles, or Asia/Gaza.

But the fact is, these identifiers are not intended to be shown to users directly. They indicate the largest populated city in the are that the time zone covers, when the time zone identifier was established. It is therefore not even the 'capital' city, and henceforth we have Asia/Shanghai, and not Asia/Beijing.

This is a useful feature, because sometimes it is necessary to split a zone in two, and then there is no need to argue what the name of each of the two split zones should be.

Although these identifiers are stable, they shouldn't be used in front-ends to let users of websites choose what their zone is. And certainly not in a single big list.

Instead, the Time Zone Database carries extra information for zones to indicate to which country/countries they belong, their centroid coordinates, and often a comment. These comments are user-presentable and used to distinguish between the various options in a specific country.

PHP exposes this functionality too.

For example, you can list all the identifiers belonging to a country with the following code:

<?php
$tzids = DateTimeZone::listIdentifiers(DateTimeZone::PER_COUNTRY, 'PS');
var_dump($tzids);
?>

Which outputs:

array(2) {
  [0] => string(9) "Asia/Gaza"
  [1] => string(11) "Asia/Hebron"
}

So now we know that there are two time zones associated with Palestine.

Where there is more than one time zone per country, the TZDB also includes a comment with each time zone. You can query these with PHP as well:

<?php
$tz = new DateTimeZone('Asia/Hebron');
echo $tz->getLocation()['comments'], "\n";
?>

Which outputs:

West Bank

Each getLocation()'s return value also includes the country_code element:

<?php
$tz = new DateTimeZone('Europe/Kyiv');
echo $tz->getLocation()['country_code'], "\n";
?>

Which outputs: UA.

These features together make it possible to create a user-friendly time zone selector. You can either first ask for the country, and then present all time zones for this country, like I have shown above. For this you would use DateTimeZone::listIdentifiers(DateTimeZone::PER_COUNTRY, $country_code) and DateTimeZone->getLocation()['comments'], or you can build up an array of all zones organised by country code (and cache this information):

<?php
$tzs = [];

foreach (DateTimeZone::listIdentifiers() as $tzid) {
        $tz = new DateTimeZone($tzid);
        $location = $tz->getLocation();

        $tzs[$location['country_code']][$tzid] =
                $location['comments'] ?: 'Whole Region';
}

ksort($tzs);
var_export($tzs);
?>

This outputs a very big list, an extract looks like:

…
'GB' =>
array (
  'Europe/London' => 'Whole Region',
),
…
'PS' =>
array (
  'Asia/Gaza' => 'Gaza Strip',
  'Asia/Hebron' => 'West Bank',
),
…

Of course, you also shouldn't show country codes to users, and translate Whole Region into your user's preferred language.

The Unicode Consortium's Unicode Common Data Repository project can help you with expressing the country code as a name. I have used icanboogie/cldr for this before.

With:

composer require icanboogie/common:^6.0-dev icanboogie/accessor:^6.0-dev icanboogie/cldr:^6.0-dev``

The full example would look like:

<?php
require 'vendor/autoload.php';

use ICanBoogie\CLDR\Repository;
use ICanBoogie\CLDR\Cache\CacheCollection;
use ICanBoogie\CLDR\Cache\RuntimeCache;
use ICanBoogie\CLDR\Provider\CachedProvider;
use ICanBoogie\CLDR\Provider\WebProvider;

$locale = 'en';

$provider = new CachedProvider(
        new WebProvider,
        new CacheCollection([
                new RunTimeCache,
        ])
);
$repository = new Repository($provider);

$tzs = [];

foreach (DateTimeZone::listIdentifiers() as $tzid) {
        $tz = new DateTimeZone($tzid);
        $location = $tz->getLocation();

        try {
                $territory = $repository->territory_for($location['country_code']);
                $countryName = $territory->name_as($locale);
        } catch (Exception $e) {
                $countryName = 'Unknown';
        }

        $tzs[$countryName][$tzid] =
                $location['comments'] ?: 'Whole Region';
}

ksort($tzs);
var_export($tzs);
?>

With as excerpted output (using the en locale):

…
'Palestinian Territories' => array (
   'Asia/Gaza' => 'Gaza Strip',
   'Asia/Hebron' => 'West Bank',
 ),
…
'United Kingdom' => array (
  'Europe/London' => 'Whole Region',
),
…

Or with the cy (Welsh) locale:

…
'Tiriogaethau Palesteinaidd' =>
array (
  'Asia/Gaza' => 'Gaza Strip',
  'Asia/Hebron' => 'West Bank',
),
…
'Y Deyrnas Unedig' =>
array (
  'Europe/London' => 'Whole Region',
),
…

Now you just need to find out how to translate Whole Region into each language. Pob Lwc!

Shortlink

This article has a short URL available: https://drck.me/select-tz-jld

Comments

@blog This is very useful, thankyou, Derick.

Become a Patron!
Mastodon
GitHub
LinkedIn
RSS Feed
Flickr
YouTube
Vimeo
Email

My Amazon wishlist can be found here.

Life Line