Derick Rethans View RSS

This feed shows the latest 100 items
Hide details



Friday Night Dinner: 27 Old Compton Street 7:30 AM (14 hours ago)

Friday Night Dinner: 27 Old Compton Street

27 Old Compton Street is a restaurant close to Shaftesbury Avenue. It sits among the busy streets of SOHO, it is hip, and it focusses on pasta.

I had the Pumpkin Ravioli, and my husband the Cacio e Pepe Bucatini. We thought the dishes to be lovely, but in our opinion the pasta was a little too al dente for us — another 30 seconds in the pan, and it would have been perfect.

We followed with a portion to share of their only dessert, a pistachio sweet gnocchi — these were little gnocchi sized doughnuts with a liquid pistachio filling with a scoop of ice-cream and some crushed and chopped pistachios (mind the inevitable squirt when you cut in).

Next time I'd have the courgette fries too which the table next to us had and looked great.

We were in and out in about 45 minutes.

Cacio e Pepe Bucatini
Cacio e Pepe Bucatini
1 / 3
Pumpkin Ravioli
Pumpkin Ravioli
2 / 3
Pistachio Gnocchi
Pistachio Gnocchi
3 / 3

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Duck and Rice 10 Oct 7:30 AM (14 days ago)

Friday Night Dinner: Duck and Rice

Friday, October 10th 2025, 16:30 BST
90 Berwick Street, London W1F 0QB, United Kingdom
Dim Sum: £9.80-£13.80; Starters: £9.80-£15.50; Mains: £15.20-£45; Wines from £45
by Derick Rethans

In SOHO, in the hubbub of central London, Duck & Rice is a busy establishment with a lively atmosphere. There is a big tank of Pilsner Urquell tank beer downstairs when you get in.

We arrived a little before seven, and the place was nearly full, with hip people a fair bit younger than we are, as well as a some people about the same age or older. The menu is fairly extensive, but focuses on Cantonese food.

We started with some sesame prawn toast as starter. The two pieces of toast were cut length wise, resulting in four tasty morsels. They were moist, flavourful, and the right amount of crispy.

Our mains came shortly after the starters, way before we could finish the toast. I chose their signature dish, the "Duck & Rice" as my main dish. My wife had the king prawn Katsu curry rice, but I believe she was slightly wishing she'd had the Duck & Rice as well. That isn't to say that the prawns weren't well cooked, or the sauce wasn't perfectly nice, but sometimes you just have to have the signature dish; like the table of three next to us, but the missus was willing to "take one for the team" and ordered something else (thanks!)

The Duck & Rice consisted of a roasted duck, with a sweet and crispy skin, over a well cooked rice. I was initially concerned as the duck also came with a leg with bones. I'm not too keen if I have to effectively gnaw meat off bones (spare ribs excluded). However, it was only the one leg, and I was pleased the rest of the meat was off the bone, as well as being perfectly cooked, spiced, and paired perfectly with the rice. Because the skin was slightly sweet, so were the juices that seeped into the rice. The cucumber added a pleasant bite of freshness.

Instead of having wine, it made much more sense to us to have a beer, especially because they have some exclusive ones (we like beer). Which meant that with our dinner we enjoyed a Duck Pale Ale and an Orion Lager.

When we booked, the table was reserved for two hours. However as the service was quick, and we only really had two courses, and one drink each, we were in and out in a smidgen under an hour. The quick service, and the location of Duck and Rice, close to many theatres, might make this an ideal spot for a pre-theatre meal.

We might be back at some point, to try some other intriguing dishes.

Prawn Toast
Prawn Toast
1 / 3
King Prawn Katsu Curry
King Prawn Katsu Curry
2 / 3
Duck and Rice
Duck and Rice
3 / 3

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Oystermen 3 Oct 7:30 AM (21 days ago)

Friday Night Dinner: Oystermen

Friday, October 3rd 2025, 16:30 BST
32 Henrietta Street, London, WC2E 8NA, United Kingdom
Oysters: £3.25-£6 (each); Starters: £11-£15; Mains: £23-£26; Wines from £25
by Derick Rethans

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

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Richoux 26 Sep 7:30 AM (28 days ago)

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

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Selecting Time Zones 24 Sep 9:35 AM (last month)

Selecting Time Zones

Wednesday, September 24th 2025, 18:35 BST
London, UK

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!

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Locatelli's 19 Sep 7:30 AM (last month)

Friday Night Dinner: Locatelli's

We went to Locatelli's, a fairly new restaurant, situated in the redeveloped Sainsbury's wing of the National Gallery. This meant that we actually had to go into the gallery to go to the restaurant, including a security and bag check.

It was a nice warm and sunny evening and when we got there, we walked up to the first floor and were sat down in quite a nice area. During the evening, the lighting varied a bit as somebody was seemingly playing with the dimmer switch inside the restaurant. This was slightly irritating. We really wanted them to pick a light level, and then stick with it.

Because neither of us were massively hungry, we opted to have one of the snacks on the menu, rather than a full starter. My wife went for the Parma ham and Parmesan cheese starter, which came with delightful big chunks of cheese and a slightly salty ham. I had crackers with sesame seeds, and a full flavoured, and delicious whipped goat cream.

For our mains, I selected a Stone Bass fillet, which came with samphire, some mushrooms, and some salad. The fish skin was nicely grilled and crisp, with the fish flaky. My wife had a roast chicken, which came with polenta and some vegetables in a tomato sauce with some crisp sage leaves on top. To drink with our food, we shared a lovely and fresh bottle of wine made with Caterratto grapes.

We really enjoyed it, and the restaurant had a good atmosphere. The service was speedy and friendly from the moment we arrived to the point we left. We didn't stay for dessert though, as we weren’t very hungry, but the dessert options sounded lovely… one for another visit, perhaps.

Overall, dining in part of a gallery, located on the first floor adjacent to a gift shop is slightly strange. But the meal was tasty, the service and ambience lovely, and it was fairly good value for a central London location.

It would be a good place to go on a date, or if you just fancied a meal after some sightseeing, or gallery touring.

Sesame Crackers with Whipped Goat Cream
Sesame Crackers with Whipped Goat Cream
1 / 4
Parma Ham with Parmesan Cheese Cubes
Parma Ham with Parmesan Cheese Cubes
2 / 4
Stone Bass Fillet
Stone Bass Fillet
3 / 4
Roast Chicken
Roast Chicken
4 / 4

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Casa do Frango 12 Sep 7:30 AM (last month)

Friday Night Dinner: Casa do Frango

Friday, September 12th 2025, 16:30 BST
4 Sir Simon Milton Sq, London SW1E 5DJ, United Kingdom
Small Plates: £6-£14; Grill: £14-£34; Sides: £5-£8; Dessert: £3-£8; Wines from £31
by Morag Rethans

This restaurant is situated in the new-ish development Sir Simon Milton Square, close to Victoria Station. We've visited this area previously when we dined at the Rail House Victoria, and at Camino Victoria, which are both close by however on a warm summer evening we decided to go for some Portuguese cuisine.

Casa del Frango, specialise in Portuguese grill dishes. We started with a pair of Salgadinhos, crispy filled empanada pastry with kale, mushroom, and caramelised onions. These were hot and fresh and vanished quite quickly.

For my main course, my husband chose the lamb chops, which were also nicely grilled and still moist. I picked the beef skewers, which were also well cooked. Neither of these dishes came with sides, so we ordered some house rice to go with our mains to make a full meal. Without the rice, we'd likely still have been hungry.

Even after that, we still liked some dessert, and had one each. I had a Bolo de Bolocha, a Portuguese biscuit cake with vanilla ice cream and salted caramel, which was possibly a bit too sweet and creamy overall. And my husband had a classic Pastel de Nata, a custard tart. This came served with cinnamon ice cream on the side.

Casa do Franco in Victoria is pretty good, but the service was slower than ideal, and in particular we had to wait a while to order. The food was nice, but the restaurant felt expensive and a little “big box”, lacking something in ambience. So although we like Portuguese food, I’m not sure if we’d return here. However, as there are many other restaurants in this development, we’ll no doubt be back in the area to try another soon.

Salgadinhos
Salgadinhos
1 / 6
Lamb Chops
Lamb Chops
2 / 6
House Rice
House Rice
3 / 6
Beef Skewers
Beef Skewers
4 / 6
Pastel de Nata
Pastel de Nata
5 / 6
Bolo do Bolocha
Bolo do Bolocha
6 / 6

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Xdebug Update: August 2025 9 Sep 6:10 AM (last month)

Xdebug Update: August 2025

Tuesday, September 9th 2025, 15:10 BST
London, UK

In this monthly update I explain what happened with Xdebug development.

GitHub and Pro/Business supporters will get it earlier, around the first of each month.

In the last month, I spend around 27 hours on Xdebug, with 29 hours funded.

Xdebug 3.4

I spend a fair amount of time trying to triage bug #2359 where Xdebug is interfering with Lazy Objects, which were introduced in PHP 8.4. However, there is no small reproducible case, and I have not managed to reproduce this myself at all.

However, I did manage to get to the bottom of bug #2328. This ended up being reference counting in PHP and resources (such as open file pointers) not being quite compatible. Instead of holding on to these resources when I keep the stack traces when an Exception occurs, I now instead ignore these.

These resource types are being phased out in PHP, as they are the source of many other issues as well. But, file and stream resources have not been ported yet.

I also fixed a bug where sometimes internal PHP objects (such as DateTimeInterval) would cause a crash when debugging.

I will make a release in early September to get these fixes out.

PHP 8.5

Most of the time this month I spent on making Xdebug PHP 8.5 ready.

Last month I wrote about a patch for PHP that I created to introduce intermediate steps between pipe stages. With this, I discovered a parser issue with PHP's implementation of pipes, and especially when closures were used. Due to the precedence order, something went awry.

This has now been addressed in PHP, and my patch to introduce intermediate steps has also been merged after adjusting it slightly. I have also merged the Xdebug side of this feature into to the master branch.

The rest of the PHP 8.5 work was mostly due to Opcache now always being enabled. This caused some churn in my test cases and CI workflows, where I would load opcache.so conditionally. With PHP 8.5 this library no longer exists as Opcache is now built-in.

Business Supporter Scheme and Funding

On GitHub sponsors, I am currently 42% towards my $2,500 per month goal, which is set to allow continued maintenance of Xdebug.

If you are leading a team or company, then it is also possible to support Xdebug through a subscription.

In the last month, no new business supporters signed up.

Besides business support, I also maintain a Patreon page, a profile on GitHub sponsors, as well as an OpenCollective organisation.

If you want to contribute to specific projects, you can find those on the Projects page.

Xdebug Cloud

Xdebug Cloud is the Proxy As A Service platform to allow for debugging in more scenarios, where it is hard, or impossible, to have Xdebug make a connection to the IDE. It is continuing to operate as Beta release.

Packages start at £49/month, and I have recently introduced a package for larger companies. This has a larger initial set of tokens, and discounted extra tokens.

If you want to be kept up to date with Xdebug Cloud, please sign up to the mailing list, which I will use to send out an update not more than once a month.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: The Jones Family Kitchen 5 Sep 7:30 AM (last month)

Friday Night Dinner: The Jones Family Kitchen

Friday, September 5th 2025, 16:30 BST
7-8 Eccleston Yards, London SW1W 9AZ
Starters: £7.00-£19.50; Mains: £16.50-£55.00; Pudding: ~£9.00; Sides: ~£7.50; Wines from £30
by Derick Rethans

This restaurant is located in Eccleston Yards, a recently renovated pedestrian-only historic courtyard, not far from Victoria Station. The Jones Family Kitchen is, what might be described as a “steak focused restaurant” but they also have a few other options for those avoiding red meat. As well as a cosy dining area inside, there is a large outside terrace, where on this warm and sunny evening a lot of people were enjoying their meals and drinks.

To start, we enjoyed some cheese polenta balls, which were served with a spicy mayonnaise. These were soft and crispy in all the right ways, and the mayo serving was very generous… so generous that we were able to enjoy it with the chips we had with our main course.

For our mains, we both chose the same cut of meat, a 10 oz sirloin steak, medium rare. I opted for no condiments, but my wife added some béarnaise sauce. On the side, we shared a portion of triple cooked chips, and green beans. The steaks were perfectly cooked, well rested, and slightly charred on the outside, with the fat mostly rendered. The beans were nice and soft, and the chips crispy on the outside. Some of those chips got dipped in the spicy mayonnaise mentioned earlier. We also enjoyed a bottle of Rioja, which accompanied our steaks nicely.

Afterwards, we fancied a little dessert. I had a scoop of apple sorbet, and my wife picked a rhubarb ice cream that tasted remarkably like peach ice cream—still tasty though.

It's a bit on the pricier side if you go for steak, but the food was of excellent quality, and the service attentive. There are several other interesting looking restaurants around the same courtyard, so we might be back for those too.

Cheese Polenta Balls
Cheese Polenta Balls
1 / 4
Sirloin Steak
Sirloin Steak
2 / 4
Beans and Chips
Beans and Chips
3 / 4
Sorbet and Ice Cream
Sorbet and Ice Cream
4 / 4

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Mapping Munchies 2 Sep 3:50 AM (last month)

Mapping Munchies

Tuesday, September 2nd 2025, 12:50 BST
London, UK

My wife and I run a blog where we review the restaurants we go to when we go out for dinner on Friday evenings.

And on this website you can look at all the reviews, but it is a bit difficult to see as to where the restaurants are.

So I decided that I wanted to add a map to our website.

We have already recorded the addresses for this, but not quite yet the coordinates.

So in order to show a map we needed to convert the addresses to coordinates, and there are several ways of doing so.

You can roll something yourself with a Nominatim, which is part of the OpenStreetMap project. But I decided to try a different service, called OpenCageData, which provides a geocoding service. I didn't want to maintain a geocoder myself.

After signing up and creating API keys, I used their PHP library (handily recommended during the on boarding process) to convert all my addresses to latitude/longitude pairs. This required a bit of fiddling, as it was fairly picky about what it would accept. Although we mostly go to places in London, it really didn't like geocoding places with "The Netherlands" as address, and instead insisted on my using "Netherlands". I updated the source material to cope with this.

With the finicky bits out of the way, I changed my blog's software to add a coordinate pair whenever it sees a new entry and address. But to start, I had to go through all of the reviews of restaurants that we already had, and pass their addresses through the geocoder:

<?php
$geocoder = new \OpenCage\Geocoder\Geocoder($OpenCageKey);

$location = "{$entry['title']}, {$entry['location']}";
$geocoded = $geocoder->geocode( $location );

if ( count( $geocoded['results'] ) > 1 )
{
  foreach ( $geocoded['results'] as $result )
  {
    if ( $result['components']['_category'] === 'commerce' )
    {
      $finalResult = $result;
    }
  }
}

Of course, for that to work, you need to have the $OpenCageKey set to your API key.

The geocoder then gives me a coordinate pair in latitude and longitude. Often there are multiple results. Although each result has a confidence level attached to it, the result for just the postcode is higher than the actual accurate point of interest for the restaurant, even though I also pass in its name as part of the $location.

Because of this, is have to loop over the results and pick the right one (with lower confidence level), if an actual commerce place, indicating a restaurant, was found.

I store these pairs in the database, and then I can use them for generating a map with all the restaurants that we have reviewed.

After I had created these coordinate pairs, upon a page load, my blog software creates a big GeoJSON file with all the features. I embed this into my rendered web page to prevent extra round-trips to the server. I wouldn't suggest to do this if the data updates frequently, or if you have a lot of locations to display.

An example of the generated code looks like, after formatting it for easy viewing:

var geojsonFeatures = [
  {
    "type":"Feature",
    "properties": {
      "name": "Spicy Grill",
      "rating": "4",
      "popupContent":
        "<h3><a href=\"\/spicy-grill-jkb\">Spicy Grill<\/a> <small style=\"font-weight: normal\">(Rating: 4)<\/small><\/h3>"
        "<p>122 Golders Green Road, London NW11 8HB<\/p>"
        "<small>Starters: \u00a33.00-\u00a37.50<br\/>Mains: \u00a39.50-\u00a313.50<\/small>"
    },
    "geometry": {
      "type": "Point",
      "coordinates": [-0.2007587,51.5739245]
    }
  },
  …
];


I then use a JavaScript library called Leaflet, a library that I've used many times for many of my other side projects to render these restaurants on the map. The code for this is fairly simple too.

The id="map" div is where Leaflet renders the map, which you create in JavaScript with:

<div id="map" style="height: 500px; align: center;"></div>

I then configure the OpenStreetMap map layer URL, attribution, and some configuration options for Leaflet:

<script type="text/javascript">
  var map = new L.Map('map', {zoomControl: false});

  var osmUrl = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
    osmAttribution = 'Map data &copy; 2025 <a href="https://openstreetmap.org">OpenStreetMap</a> contributors',
    osm = new L.TileLayer(osmUrl, {maxZoom: 18, attribution: osmAttribution});

I also created a specific icon instead of relying on the standard marker for points:

var forks = L.icon({
  iconUrl: '/images/meal.svg',
  iconSize: [ 24, 24 ],
});

And include the GeoJson blog from earlier:

var geojsonFeatures = …

And bind the GeoJSON data layer to the map, with the data (geojsonFeatures), a conversion layer (pointToLayer) to add the markers, set the title with the feature's properties.name, add a pop-up for each feature (onEachFeature), and then add the layer to the map with addTo(map):

L.geoJSON(
  geojsonFeatures, {
  pointToLayer: function(feature, latlng) {
    return L.marker(latlng, {
      icon: forks,
      riseOnHover: true,
      title: feature.properties.name
    });
  },
  onEachFeature: function(feature, layer) {
    layer.bindPopup(feature.properties.popupContent)
  }
}).addTo(map);

I then center the map to a strategic location in London, and add the osm layer to the map with addLayer:

  map.setView(new L.LatLng(51.513, -0.177), 13).addLayer(osm);
</script>

Finally I add the map to the div element map by instantiating L.Map, and prevent zoom controls from showing:

var map = new L.Map('map', {zoomControl: false});

To see the full code, you can do "view source" on the page that shows our mapped restaurants.

When you click on an icon, you get a pop up with the title and a link to the review, with some useful information such as our rating, the address, and a cost indication:

This actually didn't take me a lot of time to do, but mostly because I'm always relatively familiar with Leaflet.

I enjoyed working on this project to add a map to the website.

And when I now look at it, I can see all the lovely places, and sometimes less lovely places where we had our Friday night dinners. If you zoom out far enough, you can also see the far away places we enjoyed our meals at. Let us know if you make it to one of them!

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Spicy Grill 29 Aug 7:30 AM (last month)

Friday Night Dinner: Spicy Grill

We don't usually venture out to this part of North London, but on this warm Friday evening we found ourselves at Spicy Grill, a Korean BBQ restaurant in Golders Green. There is a large Jewish presence in this area, which meant that about half the restaurants were closed, due to it being a Friday evening.

The restaurant itself is an open space with a scattering of smaller tables along the walls, and a larger table for groups in the middle. Each table has its own grill.

The menu is extensive, with salads, appetizers, tempura, different meats for barbecuing, and even seafood. You can grill it yourself, or the kitchen can do it for you.

We settled for some pumpkin croquettes and seaweed rolls to start. The croquettes had a crumbly coating, and were slightly spiced. The seaweed rolls were crunchy on the outside and filled with glass noodles. There were served with a sweet and sour dip, that worked well with it.

For our mains, we ordered Bulgogi marinated beef and pork belly. We opted to have the grill on, and cook these ourselves. The pieces of meat were sliced thinly which meant for a quick cooking time. With this, we had some steamed rice and a selection of sauces. We thought that this would not be enough for the two of us, so we also picked a fried tofu salad. This wasn't really needed though, but still enjoyable to have some freshness. The tofu was prepared to actually have some flavour. With our mains, we also enjoyed a bottle of Cass, a Korean lager.

It was a good spot, although a little far away. We were the only two non-Korean-looking people in the restaurant, which probably says something about its authenticity. If you're in the area, then Spicy Grill will provide a solid meal at a reasonable price. When walking to catch the bus home, we noticed another Korean barbecue restaurant, which may get a visit on another day.

Pumpkin Croquettes and Seaweed Rolls
Pumpkin Croquettes and Seaweed Rolls
1 / 4
Steamed Rice and Sauces
Steamed Rice and Sauces
2 / 4
Tofo Salad
Tofo Salad
3 / 4
Pork Belly on the Grill
Pork Belly on the Grill
4 / 4

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Cottons 22 Aug 7:30 AM (2 months ago)

Friday Night Dinner: Cottons

Friday, August 22nd 2025, 16:30 BST
10 Flagstaff House, St. George's Wharf, London SW8 2LE
Starters: £7.50-£10.50; Mains: £16.50-£27.50; Desserts: £7-£7.50; Cocktails: £13
by Derick Rethans

It's summer, which means trying out some food from a tropical place makes perfect sense. Cottons is situated next to Vauxhall Bridge alongside the Thames. There is a big outdoor space, where in the sunshine, cocktails, and music would be a ball, but this is a British summer, so it was a bit nippy, and a risk of rain! Instead, we sat inside the spacious establishment. While looking over the menu, we figured out it was happy hour, which meant two-for-one cocktails. That meant two of the same for the price of one, not two different cocktails for the price of one. And that is how we ended up with two cocktails each: An Exotica Sour, and a Rum Punch. Both delicious, and vaguely deadly.

We started of with a starter each. My wife choose the salted cod fritters, and I had the jerk chicken spring rolls. The spring rolls were served with some salad and a sweet chilli sauce. They almost had an Asian flavour to it. The salted cod fritters were served with a spicy tomato sauce.

Mains wise, my wife picked the curried mutton, served with rice'n'peas. The flavour had a good depth to it, and although it was a little spicy, it wasn't overpowering. The meat was soft and tender. As my main, I selected the pork ribs and fried chicken combo. The ribs came in a fairly spicy sauce, which worked well. The red and green chillies that were sprinkled over them, did not add much heat. The fried jerk chicken was a little too salty to my liking, but the sauce that was coating the ribs fixed that soon. Some fried plantains and rice'n'peas completed the meal. The sweetness of the plantains helped with balancing the heat.

We were quite full after this, and decided against pudding while finishing the last of our (second) cocktail.

The restaurant has a good atmosphere, the service was speedy and attentive, and the food delicious and affordable. It's a great spot near the river, and if the sun comes out there will be a Caribbean atmosphere too.

Jerk Chicken Spring Rolls
Jerk Chicken Spring Rolls
1 / 5
Salted Cod Fritters
Salted Cod Fritters
2 / 5
Pork Ribs and Fried Chicken
Pork Ribs and Fried Chicken
3 / 5
Curried Mutton
Curried Mutton
4 / 5
Rum Punch and Excotica Sour Cocktails
Rum Punch and Excotica Sour Cocktails
5 / 5

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: The Chalk 15 Aug 7:30 AM (2 months ago)

Friday Night Dinner: The Chalk

Friday, August 15th 2025, 16:30 BST
25-27 Tryon Street, London SW3 3LG
Starters: £11.50-£22.50; Mains: £23.50-£29.50; Desserts: £11.00-£15.50; Wines from £50
by Derick Rethans

We have been to this location before, which is just off the Kings’ Road in Chelsea, when it was still called the Butcher's Tap and Grill. But Tom Kerridge, the proprietor decided to go in a slightly different direction. He renamed the pub "The Chalk", with an updated concept. Where the original concept was mostly pub fare with (big) cuts of meat to grill, it is now a more traditional gastropub with more refined dishes, and less of a focus on steaks and similar cuts of meat. Overall, we thought it has shifted a little more upmarket (not surprising given the location), and that perhaps Tom is trying to emulate of the success of The Coach in Marlow, with its one Michelin star.

The restaurant wasn't quite full when we, arrived and were seated in a cosy booth in the downstairs area. We were fairly peckish, so opted for some starters to get going. My wife had the 'nduja and smoked mozzarella sausage roll, which had a good kick to it. I picked the cheese and onion scone, which came with a very generous serving of mustard and herb butter. With our starters we enjoyed a half of the Rebellion IPA — sadly they had run out of their other two cask beers, although that does offer an excuse to pop back another time.

As my main, I chose the rolled shoulder of lamb, with was served with charred onion wedges, ratatouille, and a crispy parcel. The flavours all worked well together. My wife enjoyed the butter roasted ray wing, which came with pickled cockles, diced cucumber, and an anchovy and garlic dressing. As the wines are fairly pricy, instead of a bottle to share, we just had a glass of wine each to match our dishes.

We could have left it there, but felt the need to have some pudding as well. For that, we shared a Chelsea bun sitting in a bath of spiced custard with dried raisins or currants in, in.

It's still a good spot, but we were not in total agreement whether it had improved since it was the Butcher's Tap and Grill. We might give it a go in another year or so.

Cheese and Onion Scone
Cheese and Onion Scone
1 / 5
'Nduja and Smoked Mozzarella Sausage Roll
'Nduja and Smoked Mozzarella Sausage Roll
2 / 5
Butter Roasted Ray Wing
Butter Roasted Ray Wing
3 / 5
Rolled Shoulder of Lamb
Rolled Shoulder of Lamb
4 / 5
Chelsea Bun
Chelsea Bun
5 / 5

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Market Halls 8 Aug 7:30 AM (2 months ago)

Friday Night Dinner: Market Halls

Market Halls is situated not far from Oxford Circus, on the former location of BHS. It occupies the first floor of the building, and boasts a selection of small, street food pop-up type kitchens, although some of them look fairly permanent. They operate a few sites around London, but the one on Oxford Street is the only one that takes bookings for two (or more) people.

The idea is that you pick a table, and then figure out what you want to eat from all the available vendors. You can order drinks at the bar, or through a QR code at the table. The beer choices were lacking, but there was a reasonable selection of wine and cocktails.

After sitting down, we had a look at the menus, and made a plan, which we then didn't quite follow once we started ordering. As it's not really a restaurant, that also was not important.

We started with a set of MOMO dumplings, from "Himalayan dumplings". They were juicy and filled with chicken. A slightly spicy dressing completed the dish. This pop-up also had a special on, which formed our second starter: crunchy pieces of puffed rice filled with potato, and served with tomatoes, cucumbers, and raw onion. The cucumber and tomato provided a cooling counterpoint to the spice in the rest of the dish.

As my main I enjoyed the Chilli Jam Pork Belly from Krapow!, which was served on rice. The pork was a little crunchy, well seasoned with birdseye chilli, and sprinkled with some salad leaves. My wife ordered the lamb from Salt Shed, another temporary addition to their menu. The slices of perfectly cooked lamb had some sea salt sprinkled over them, and were served with very spicy chillis, pickled radishes, and a slightly garlicky dip.

There are plenty of more pop-up restaurants to try out including a dessert place. If you feel like a good and low-key meal after a hard afternoon (or day!) of shopping, the options at Market Halls will easily satisfy your appetite.

MOMO Himalayan Dumplings
MOMO Himalayan Dumplings
1 / 4
Crunchy Snack
Crunchy Snack
2 / 4
Chilli Jam Pork Belly
Chilli Jam Pork Belly
3 / 4
Lamb Steak Slices
Lamb Steak Slices
4 / 4

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Xdebug Update: July 2025 7 Aug 6:10 AM (2 months ago)

Xdebug Update: July 2025

Thursday, August 7th 2025, 15:10 BST
London, UK

In this monthly update I explain what happened with Xdebug development.

GitHub and Pro/Business supporters will get it earlier, around the first of each month.

In the last month, I spend around 14 hours on Xdebug, with 23 hours funded. I went on a holiday!

Xdebug 3.4

In the first half of the month, I finished fixing the complicated issue with fibers and path coverage that I wrote about last month. This resulted in the release of Xdebug 3.4.5. This release also addresses an issue where Xdebug called the code backing a property, resulting in the hooked property's value to change.

PHP 8.5

In the remained of the month, I looked at how best to support PHP 8.5's new pipes. These allow you to chain method calls together. Due to this, there is no intermediate value that you can look at in the debugger.

I have created a patch for PHP which introduces intermediate steps which Xdebug can use with a patch to then visualise the values being send to the next pipe stage.

Right now, this only works for non-closure-wrapped pipeline stages, and more work is necessary to make this work all nicely. There is some time before PHP 8.5 comes out though.

Xdebug Videos

I have created no new videos in the last months, but I did add some to the Xdebug documentation as related content for function tracing, to demo flamegraphs.

All Xdebug videos can be watched on my channel.

If you have any suggestions, feel free to reach out to me on Mastodon or via email.

Business Supporter Scheme and Funding

On GitHub sponsors, I am currently 42% towards my $2,500 per month goal, which is set to allow continued maintenance of Xdebug.

If you are leading a team or company, then it is also possible to support Xdebug through a subscription.

In the last month, no new business supporters signed up.

Besides business support, I also maintain a Patreon page, a profile on GitHub sponsors, as well as an OpenCollective organisation.

If you want to contribute to specific projects, you can find those on the Projects page.

Xdebug Cloud

Xdebug Cloud is the Proxy As A Service platform to allow for debugging in more scenarios, where it is hard, or impossible, to have Xdebug make a connection to the IDE. It is continuing to operate as Beta release.

Packages start at £49/month, and I have recently introduced a package for larger companies. This has a larger initial set of tokens, and discounted extra tokens.

If you want to be kept up to date with Xdebug Cloud, please sign up to the mailing list, which I will use to send out an update not more than once a month.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: De Ruif 1 Aug 7:30 AM (2 months ago)

Friday Night Dinner: De Ruif

Friday, August 1st 2025, 16:30 BST
Heuvenseweg 6, Rheden, Netherlands
€8.50-€16.50; Mains: €24-€36; Toetjes: €9-€13; Set Menu: €39.50
by Derick Rethans

De Ruif (The Hay Rack) is situated at the edge of one of the Netherlands' national parks, de Veluwezoom. It's popular with walkers, but in the evening it is more of a traditional restaurant. They serve mostly French cuisine, but also some local classics.

We visited not with just the two of us, but also with my parents to celebrate a birthday. We selected our dishes from the three course set-menu.

My wife chose a seventies classic, the shrimp cocktail. In this case, it came with brown shrimps instead of the more usual prawns. It was well-dressed with Marie Rose sauce, and came with some lettuce and a lemon to squeeze. For my starter, I picked the "watermelon" carpaccio, although it came with three types of melon (watermelon, cantaloupe, and honeydew). The chunks were served on top of long strands of flavourful and thinly sliced parma ham.

After our main, we both opted to go with the swordfish. This was served with a red risotto, a dressing, grilled baby tomatoes, and some vegetables. The portion sizes were on the larger side for both starter and main, but we still found some space for pudding.

I selected the Aperol Spritz Sorbet, which turned out to be massive. But it was all the right kinds of sweet and bitter and juicy. My wife chose the Limoncello Tiramisu, served with a strawberry on top. This dessert was creamy, light, and refreshing.

After all these courses, we were properly satisfied. We will likely be back, as there are not too many options in the area for dining out. But perhaps we won't have three courses again.

Shrimp Cocktail
Shrimp Cocktail
1 / 5
Watermelon Carpaccio
Watermelon Carpaccio
2 / 5
Swordfish
Swordfish
3 / 5
Aperol Spritz Sorbet
Aperol Spritz Sorbet
4 / 5
Limoncello Tiramisu
Limoncello Tiramisu
5 / 5

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: OPSO 25 Jul 7:30 AM (3 months ago)

Friday Night Dinner: OPSO

OPSO styles themselves as a modern Greek restaurant. They're based just off Marylebone High Street. We first ate here when they opened, just over a decade ago, and recalled that experience positively, and as it was a lovely warm summer evening, perfect for some Greek food we thought we'd return.

It seems however, that in the last decade, the prices had gone up significantly. Wine starting at £58 is a bit of a joke really… but it's Marylebone, so perhaps the locals don't notice or care? Instead we settled on some beers from Greek breweries that we hadn't tried yet.

We were not overly hungry, and as a result decided on a slightly lighter meal. We started with a duo of souvlaki kebabs, which were served on top of a slightly charred pitta bread. They were dressed with a dollop of yoghurt and red onions. With the kebabs, we also had some tzatziki and slightly spicy flatbreads. The tzatziki was fresh and the flatbreads crispy.

For our mains, we shared the slightly seared tuba, which was dressed with sugar snap peas, tomato, mint, and capers. This combination really worked well, and the tuna was spot on. I always think that tuna is better mostly raw, but seared on the outside To accompany the tuna, we also shared a spanakorizo — spinach, rice, and goat's curd, baked in the oven.

The food was delicious, and the atmosphere lively, but we did think that perhaps some value has been lost along the way.

Souvlaki Kebabs
Souvlaki Kebabs
1 / 5
Tzatziki
Tzatziki
2 / 5
Seared Tuna
Seared Tuna
3 / 5
Spanakorizo
Spanakorizo
4 / 5
Slightly Spicy Flatbreads
Slightly Spicy Flatbreads
5 / 5

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Artean 18 Jul 7:30 AM (3 months ago)

Friday Night Dinner: Artean

Friday, July 18th 2025, 16:30 BST
Paseo Colón 11, San Sebastián, Spain
€7.5-€16; Mains: €22-€42; Desserts: ~€9; Wines from €28
by Derick Rethans

San Sebastián, a city in the basqueland region of Northern Spain, is known as a culinary hot spot. It is therefore not short of plenty of pinxtos restaurants, fine dining, and a galaxy of Michelin stars.

Artean is a small restaurant in the Gross area, not far from the beach. It has twelve seats, at the bar only. The bar chairs are comfy, and sitting at the bar creates an intimate atmosphere. The chefs are from Peru, and have worked in Michelin starred places, but the person serving was Danish. Artean does not have a start (yet?).

We were the first customers that evening and got to choose our seats, which we did, near the kitchen towards the end of the bar counter.

They offer a seven-course tasting menu (at €90), but also have an à la carte menu. We picked our meal from the latter. As our starters, we picked a selection of tapas. While waiting for them to be served, a lovely bread and a shot glass of a fresh and flavoursome gazpacho got us in the mood. A lovely crisp white Leirana wine made it to our table too.

Our selection started with dressed oysters, and topped with salmon roe, served in a boat shaped bowl. They were slightly acidic, but the dressing toned it nicely down. Fat and juicy anchovies on toast, with a nice layer of butter in between then followed. And finally a duo of scallop gildas. Each consistent of two scallop halves slightly seared, on a bed of creamed parmigiana reggiano, roasted tomato, and topped with an olive, some anchovies and pine nuts. It was plated up right in front of us.

After the starters we each chose a different main. My wife selected the catch of the day, a moist piece of hake on a pea oil, served with a couple grilled shrimps with a piece of samphire on top, which was delicious. I decided on the grilled octopus with green beans and pine nuts. It was a little sticky from a dressing, and cooked perfectly with a little bounce.

After we finished our meal, we moved to a separate set of stools in front of their window for our dessert. That was all our doing as we had probably been a little slow with dinner. Here we enjoyed a dessert wine each, and a sheep's milk curd, topped with blue cheese, cider ice cream. Yum!

Artean was a perfect meal, incorporating local flavours and ingredients with hints of Peru. And all at a very reasonable price. We would certainly return if we're in town again.

Dressed Oysters
Dressed Oysters
1 / 6
Anchovies on Toast
Anchovies on Toast
2 / 6
Scallop Gildas
Scallop Gildas
3 / 6
Hake, the Catch of the Day
Hake, the Catch of the Day
4 / 6
Grilled Octopus
Grilled Octopus
5 / 6
Sheep Milk's Curd with Cider Ice Cream and Blue Cheese
Sheep Milk's Curd with Cider Ice Cream and Blue Cheese
6 / 6

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Le Garrick 4 Jul 6:30 AM (3 months ago)

Friday Night Dinner: Le Garrick

Friday, July 4th 2025, 15:30 BST
10-12 Garrick Street, WC2E 9BH, London
Starters: £8-£16; Mains: £17-£29.50; Wines from £25; Pre- / Post-Theatre Menu: £19.75/£25.50
by Derick Rethans

We have been to Le Garrick several times over the last decade. Once for my birthday, where I learned that Cassoulet is based on beans, not my favourite category of food. Although it is not a fine-dining restaurant, the meals we had there, have always been solid, albeit a little rustic.

They also do a pre- and post-theatre menu, which is what brought us here this time. With a play in the early evening, a post-theatre menu is often good value, and usually speedily served.

We both opted for a main and dessert. My wife chose the Onglet steak with a Béarnaise sauce, and I had the Moules Frites. While waiting for our meals to arrive, we enjoyed a lovely glass of Cremant — we had something to celebrate.

The steak was juicy and served with a good amount of fries. My Moules were well-prepared in a rich and flavourful broth. The accompanying fries were excellent for dipping into this bowl of flavour.

We picked the same dessert, the Tarte au Citron (lemon tart). This came served with lovely dollop of cream.

Le Garrick was reliable as always, and after our meal we walked to our theatre. If you're in the neighbourhood for a similar reason, Le Garrick is a safe choice, with good food.

Moules Frites
Moules Frites
1 / 3
Onglet Steak
Onglet Steak
2 / 3
Tarte au Citron
Tarte au Citron
3 / 3

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Xdebug Update: June 2025 3 Jul 6:10 AM (3 months ago)

Xdebug Update: June 2025

Thursday, July 3rd 2025, 15:10 BST
London, UK

In this monthly update I explain what happened with Xdebug development.

GitHub and Pro/Business supporters will get it earlier, around the first of each month.

In the last month, I spend around 22 hours on Xdebug, with 21 hours funded.

Xdebug 3.4

I spend most of the time this month working on bug fixes, resulting in the mid-month release of Xdebug 3.4.4. Most of the fixes revolved around exceptions and generating stack traces for them.

While fixing these, I also stumbled upon another bug. The issue here was that Xdebug wouldn't include the argument name for __invoke() call frames in its output. This only matters to PHP 8.1 and before though.

The rest of the month I spend on trying to resolve the code-coverage-with-fibers issue that I wrote about last month.

I now have a Pull Request that addresses the original bug and crash, but it does not yet fix all the problems that I discovered while running the test suite of reactphp/async with code coverage enabled. Therefore I did not manage to make another release this month addressing this issue. I hope to finalise this by the end of July.

Xdebug Videos

I have created one new video in the last months:

All Xdebug videos can be watched on my channel.

If you have any suggestions, feel free to reach out to me on Mastodon or via email.

Business Supporter Scheme and Funding

On GitHub sponsors, I am currently 42% towards my $2,500 per month goal, which is set to allow continued maintenance of Xdebug.

If you are leading a team or company, then it is also possible to support Xdebug through a subscription.

In the last month, no new business supporters signed up.

Besides business support, I also maintain a Patreon page, a profile on GitHub sponsors, as well as an OpenCollective organisation.

If you want to contribute to specific projects, you can find those on the Projects page.

Xdebug Cloud

Xdebug Cloud is the Proxy As A Service platform to allow for debugging in more scenarios, where it is hard, or impossible, to have Xdebug make a connection to the IDE. It is continuing to operate as Beta release.

Packages start at £49/month, and I have recently introduced a package for larger companies. This has a larger initial set of tokens, and discounted extra tokens.

If you want to be kept up to date with Xdebug Cloud, please sign up to the mailing list, which I will use to send out an update not more than once a month.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Sicily 27 Jun 7:30 AM (3 months ago)

Friday Night Dinner: Sicily

Friday, June 27th 2025, 16:30 BST
2a Elizabeth Street, SW1W 9RB, London
Starters: £10.25-£12.50; Mains: £14.00-£19.75; Wines from £23.50
by Derick Rethans

After a trip, we wanted something more relaxed and non-fussy. Sicily, close to Victoria Station, seemed to fit the bill on a warm summer evening. My wife commented that the restaurant had been here for many years—and like Chakra a few weeks ago—she’d walked past many times without ever visiting. Something we were rectifying.

We were seated upstairs, and when we arrived, it wasn't very busy with only two other parties seated in the upstairs area. However, within half an hour, the place was full, with nearly every table occupied. Despite the influx of diners, the service was attentive and speedy.

For her dinner, my wife chose the Fiorentina pizza, with tomato, fior di latte mozzarella, spinach, oregano, free range egg, and flaked parmigiano reggiano. The crust was crispy, the spinach wasn't overly wilted and dry, the cheese flakes across the top were generous, and the pizza wasn't too humungous overall. I picked the Rustichelle Salsiccia pasta—twisted pasta with pork and fennel sausage, with mushrooms, saffron, and cream. The sausage is what gave it the flavour, and the pasta and mushrooms the texture.

We both had a glass of their Sicily Pilsner on draught to enjoy with our meals, which paired well with both our dishes. We decided against dessert.

The price for the meal was very reasonable, the ambiance great, and the food well worth going back for again.

Rustichelle Salsiccia Pasta
Rustichelle Salsiccia Pasta
1 / 3
Fiorentina Pizza
Fiorentina Pizza
2 / 3
Sicily Pilsner
Sicily Pilsner
3 / 3

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Veeraswamy 20 Jun 7:30 AM (4 months ago)

Friday Night Dinner: Veeraswamy

Friday, June 20th 2025, 16:30 BST
99 Regent Street, W1B 4RS, London
Starters: £13-20; Mains: £24-£65; Cocktails: £16-£19; Menus: £41/£50/£90
by Derick Rethans

Through the media, we discovered that London’s oldest Indian restaurant, Veeraswamy, might have to close due to a building redevelopment that will remove their entrance. The restaurant has been operating in its current location for 99 years, but unless they manage to change the building owner’s mind they will have to move out. With that in mind, my wife had booked dinner for us on a sunny Friday evening.

After going up by lift, we were shown to our table overlooking Swallow Street. The atmosphere was full of light. We had booked a fairly early table, at 18:15, which meant we could still order from the pre-theatre menu.

I probably would have ordered these dishes anyway, as I fancied the Anglo-Indian Muligatawny Soup as a starter from this menu. It was just the right thickness, with good levels of spice. My wife ignored the pre-theatre menu for her starter, and instead ordered the Calcutta Beetroot Croquettes. These were crunchy, served with Stilton cheese and the sweet beetroots inside—it sounds like an odd combination, but worked surprisingly well.

Before and with our starters, we enjoyed some signature cocktails. I had the Citrus Burst spring special, and my wife had a new Old Fashioned.

As my main, I chose the Grilled Fish Exotica. Which was both spicy and sweet, with the sweetness coming from small tomatoes. The fish's skin was crisp, and a serving of plain rice and the crispy naan bread were great for lapping up the juices from the plate. As her main, she picked the Chicken Dilkush, a chicken supreme served with a sauce of almond extract, which was also on the pre-theatre menu.

With our pre-theatre menus we were also given a choice of dessert. I selected the dark chocolate and raspberry sorbets, and she enjoyed the pistachio and salted caramel gelato. A great way to finish our meal.

With the rumours of Veeraswamy having to close, we might not have the opportunity to go back, but if they stay open, we would very much recommend a trip.

Muligatawny Soup
Muligatawny Soup
1 / 6
Calcutta Beetroot Croquettes
Calcutta Beetroot Croquettes
2 / 6
Grilled Fish Exotica
Grilled Fish Exotica
3 / 6
Chicken Dilkush
Chicken Dilkush
4 / 6
Dark Chocolate and Raspberry Sorbets
Dark Chocolate and Raspberry Sorbets
5 / 6
Pistachio and Salted Caramel Gelato
Pistachio and Salted Caramel Gelato
6 / 6

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Own Your Content 12 Jun 7:15 AM (4 months ago)

Own Your Content

Thursday, June 12th 2025, 16:15 BST
London, UK

Before MySpace (2003), Orkut (2004-2014), Facebook (2004), Instagram (2010), and Twitter (2006), the only way to have an online community presence was to host it yourself, or use Geocities (1994-2009).

For messaging there was AOL Instant messenger (1997-2017), ICQ (1996-2010), and MSN messenger (1999-2012), which got later get gobbled up by Skype (2003-2025).

I am sure many of you have set up a PHP BB bulletin board, or one of the many various alternative online forum software packages.

For showing your photos you would use something like a PHP Gallery and host it yourself. These things became a little easier to self host when WordPress got released in 2003.

These tools required hosting your own content, on your own server. That also meant that you had full control over your own content. You could, within the law, publish anything that you wanted, and decide which comments you would allow to be posted under with content.

This content became discoverable through search engines: Yahoo!, Altavista, and later Google. They would only rank the search results through an algorithm that focussed on popularity and content only, using fancy maths.

Alternative content discovery came through Webrings, Blogrolls, and when podcasts became a thing: RSS. RSS wasn't only for podcasts though, and many web sites and services would publish new articles and product updates through this protocol. Many, including the BBC, and this site, still do.

Over the years, people shifted away from hosting their own content to the big American tech firms. Facebook for keeping up with your family and friends, "news", and discussion boards for your local cycling group. Twitter for short message communication, and Instagram of sharing your perfect life with the wider world.

As you don't pay for these products, they monetise you, and the interactions you have on these platforms. They are built to create dopamine hits so that you stay longer on these sites, and see more advertising. Instead of seeing the content you choose to follow, they feed you with information that they think that you will be engaging with. In fact, the content that you would be engaging with, is often created to induce anger.

Some platforms that used to be great at what they did in the past, now have been enshittified to be able to save your more ads, and now also AI slop. You can't honestly say that Google is a great search engine any more for example.

In the open source ecosystem, the proliferation of using "big tech" is also proliferating, with many communities adopting Slack or Discourse as their project's discussions groups.

Using Slack moves content away from the public into a proprietary environment. For example, if you don't pay, you only have access to a certain amount of history. And contributors and users need to have a login to participate, turning them into walled gardens.

And let's not forget about GitHub. A proprietary platform, now owned by Microsoft, is almost universally used by Open Source and closed source projects to host Git repositories. Git ironically being a version control system specifically designed to be decentralised.

GitHub was first for just the code, but now many Open Source projects and companies have given up control over their other project related content as well.

It's not uncommon to see GitHub used as an issue tracker and security report tracker, for project planning, and to test and deploy libraries, tools, and applications through GitHub Actions.

Because this auxiliary content is no longer owned by you or your project, platforms hosting this content can decide to ban or limit your account. This is not just theory, as it happened to OrganicMaps. Although you can easily relocate the code repository, you can not do that for this adjacent content.

PHP is also at risk here, as it uses many of these proprietary GitHub features, and the PHP Foundation uses Slack for its internal communications.

There are also more extreme tales, where Microsoft withdrew access to Office365 for some users. For example, they decided to ban the chief prosecutor of the International Criminal Court (ICC), which ended up impacting several prosecutions due to sanctions imposed by the Trump government.

A few people are still holding out using their own self-hosted forums and issue trackers. This is made harder for them due to regulations, like the onerous Online Safety Act in the UK. This act will likely push more operators to use the big tech variants in the future, as has already happened.

Some countries are luckily starting to realise that depending on US owned big tech is a bad idea.

Luckily, there are still some decentralised communication systems alive and well.

Perhaps the most well known one is e-mail, through the open SMTP protocol. Open protocols are protocols that can be understood and implemented by anyone.

Another example is Internal Relay Chat (IRC), which is perhaps not so flashy as Slack, but still alive — having been build on an open protocol introduced in 1988.

The curious thing about email is, is that it is a decentralised protocol, where everybody can technically set up an SMTP server on their own hardware with their own domain name. But fewer people or companies now do so. Instead, they use big centralised providers, such as Gmail and Outlook. These platforms often require extra requirements for accepting email, on top of what the SMTP protocol stipulates.

As an example, when we moved the php.net e-mail infrastructure to a new server it took Gmail weeks to trust our new IP enough to accept most of our email again on the first delivery attempt.

And can you or your company handle Google cancelling your Gmail account? Not only would you lose access to your email, you will also likely lose access to your Google Drive documents, calender, and potentially logins to many websites as you have used Gmail as login provider.

At this current time, most content is now hosted by third parties at their behest: Journalists and blogs on Medium, Blogger, or other third party platforms; newsletters on Substack; code, issue tracking, security reports, and CI pipelines on GitHub; email on Gmail or Outlook; open source project discussions on Slack; pictures on Instagram; community forums on Facebook; videos on YouTube, and short messages on X/Twitter.

The companies hosting these services can go out of business, decide to not like you any more, or decide to steal your content to train their AI models—and then sell you back the content that you and others created.

Or worse, they can decide to remove or block your accounts, so that you lose your readers, content, project's issues, e-mail, community, images, followers and interactions, and messaging.

The authors, including you, have no control over any of this.

But there is an alternative to many of these services.

There is a way to take back control.

Lets focus on the ActivityPub protocol. This open protocol, introduced in 2018 by the World Wide Web Consortium (W3C) can be used as that basis for publishing content, interacting with this content, and integrating this with existing publishing services.

https://axbom.com/fediverse/ — CC-BY-SA 3.0

It is the basis of the Fediverse, a network of ActivityPub servers that can communicate with each other, even though there are many different implementations, serving different types of content.

Some implementations focus on short messages, such as Mastodon or Misskey, but others focus on forum-type exchanges (Lemmy, mbin), image sharing (Pixelfed), video sharing (Peertube, Loops), and many many others.

These software packages are written in different languages, and can often be self-hosted. Most of them are open source. And because the protocol is open, you can also create your own implementation, or integrate with already existing software.

Each server that contains content is called an instance. Instances implementing the same service can easily interact, but crucially instances of different services can also do this.

Instances are hosted by individuals, specific-interest groups, language communities, or be "generic" instances. The instances are decentralized, and users can pick the instance of the service they want to use, while still being able to interact with other instances and services.

Users can therefore pick the instance that aligns with their interests, or one where they agree with the community guidelines of that instance. And if they can't find a matching instance and don't want any moderation of what they create, users can set up and self-host their own single-user instance as well.

For example, I am a user of the Mastodon service and use the phpc.social instance. But I also have an account on the Pixelfed service instance pixelfed.social. I can interact with posts on my @derickr@pixelfed.social Pixelfed account with my @derickr@phpc.social Mastodon account. I can reply, like, and forward posts between accounts.

This is very much like e-mail, where users can chose their e-mail provider, and still e-mail users on other servers, although ActivityPub extends this by also being to interact with other services.

The protocol is extensive, and I don't have time to go into every detail, but I am hoping to provide a reasonable overview here.

ActivityPub operates with three main data types: Actors, which represent content owners; Objects, which describe data; and Activities, which represent operations. ActivityPub itself is based on top of ActivityStreams, which defines many different object types, activity types, and standard properties.

An Actor can send data to other Actors by creating an Activity (such as Create) that wraps a data Object, and place it in their Outbox.

The ActivityPub server then takes this Activity and posts it (with HTTP POST) to the Inboxes listed in the Activity's to/bto/cc/bcc fields.

A receiving server then takes the Activity from the Inbox and acts upon this, according to what the Activity represents. The receiving server then sends an Accept (or Reject) Activity to the originating server.

The same would apply to a Follow Activity, where a receiving server (with, or without user interaction) might Accept or Reject the follow request.

Let's have a look at an example.

To create a short message and deliver it to followers, an Actor first creates an Object. Objects have types. For example a Note Object represents a short text, and an Article a multi-paragraph written work of some sort. There are many more types.

Different services will understand different types of objects, although Note Objects are fairly commonly understood.

The data format used with ActivityPub is JSON-LD. An object representing a blog post looks something like:

{
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    {
      "Hashtag": "https://www.w3.org/ns/activitystreams#Hashtag"
    }
  ],
  "id": "https://social.derickrethans.nl/@fridaynightdinners/posts/dakota-jgf.json",
  "type": "Note",
  "published": "2025-05-23T18:30:00+01:00",
  "attributedTo": "https://social.derickrethans.nl/@fridaynightdinners",
  "content": "<b><a href='https://dakotahotels.co.uk/leeds/grill/'>Dakota</a></b><br/><p>…</p>",
  "to": [
    "https://www.w3.org/ns/activitystreams#Public"
  ],
  "location": {
    "name": "Dakota, 8 Russell Street, LS1 5RN, Leeds",
    "type": "Place"
  },
  "tag": [
    {
      "type": "Hashtag",
      "name": "#FridayNightDinners"
    }
  ],
  "attachment": [
    {
      "type": "Image",
      "mediaType": "image/jpeg",
      "url": "https://s3.drck.me/derickrethans-images.s3.uk.io.cloud.ovh.net/friday-night-dinners/dakota-1.jpg",
      "name": "Bread with Cheesy Tomato Sauce"
    }
  ]
}

The context describes the namespaces for elements. The default one is listed first (https://www.w3.org/ns/activitystreams) and other namespaces are created in an associative array. The "Hashtag": "https://www.w3.org/ns/activitystreams#Hashtag" line defines the Hashtag namespace, which is later used to add the #FridayNightDinners tag to the post.

The id contains the unique identifier for this object. The id can be references in later activities, such as Like, Delete, Announce (re-post), Flag (report), etc.

The type defines the object's data type, in this case, Note: a short text.

Actually, in this implementation I slightly misuse the Note type, as I also use it for full articles, which ostensibly should rather be an Article or Page. The reason for this is, is that Mastodon does not support Article or Page objects.

The published property describes the date and time at which the object was published — not necessarily when an Activity is created for it.

The content property contains the Object's content — by default this is HTML encoded as JSON. It is also possible to use other MIME media types through the mediaType property. You can see this used in the sub-object in the attachment.

The to and cc properties are used to instruct a receiving server where to direct the activity to. In this example, it is just sending it to the Public realm, but it is more common to use to it to the followers of this Actor, and cc to the Public realm:

"to" : [
  "https://fosstodon.org/users/php/followers"
],
"cc" : [
  "https://www.w3.org/ns/activitystreams#Public"
]

location indicates a physical or logical location that is associated with this object. This property is not always understood by every ActivityPub implementation, for example, Mastodon does not support it.

And then lastly, we have the tag and attachment properties that associate other information with this Object. Tags are prominently used for hashtags, and attachments for linking in additional objects that need special handling, such as this Image object.

In order to deliver this Note to an Actor's followers, the implementation needs to wrap this in an Activity:

{
  "@context": [
    "https://www.w3.org/ns/activitystreams",
  ],
  "id": "https://social.derickrethans.nl/@fridaynightdinners/posts/a7c1b1fd04884a2e4c7f2c86743f5df9#Create",
  "type": "Create",
  "actor": "https://social.derickrethans.nl/@fridaynightdinners",
  "to" : [
    "https://fosstodon.org/users/php/followers"
  ],
  "cc" : [
    "https://www.w3.org/ns/activitystreams#Public"
  ]
  "object": …
}

The contents of the object property in the case of the Create Activity would be the Object from above, with the to and cc fields copied from that Object. The id is also often similar to the embedded Object's id — in this implementation #Create is added to the end of it.

When a server receives this Create activity in its inbox, it first needs to make sure that the activity is in fact sent by the Actor mentioned in the Activity — you wouldn't want impersonations.

The server can do that, because with the POST request, the sending server also includes cryptographic hashes in its HTTP headers.

For each message that it sends, it:

  • Creates a sha256 digest of the text representing the JSON payload.

  • Formats a signing key: (request-target): post {$path}\nhost: {$targetHost}\ndate: {$date}\ndigest: SHA-256={$digest} which includes the URL of the inbox it POSTs to ($path), the host, the current date in the format D, d M Y H:i:s \G\M\T, as well as the $digest it has just created.

  • Retrieves the private key from the Actor.

  • Uses this private key to sign the signature.

  • Encodes this signature in base 64 and formats it again with a different format: 'keyId="' . $keyId . '",algorithm="rsa-sha256",headers="(request-target) host date digest",signature="' . $signature . '"'.

  • And then includes the host, date, payload digest, and this newly formatted signature in the HTTP headers.

This signing algorithm was probably the hardest part of my implementation.

Retrieving the private key from the Actor is achieved by requesting the Actor's JSON object from the actor property (https://social.derickrethans.nl/@fridaynightdinners), which looks like this:

{
  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://w3id.org/security/v1"
  ],
  "id": "https://social.derickrethans.nl/@fridaynightdinners",
  "type": "Person",
  "following": "https://social.derickrethans.nl/@fridaynightdinners/following",
  "followers": "https://social.derickrethans.nl/@fridaynightdinners/followers",
  "inbox": "https://social.derickrethans.nl/@fridaynightdinners/inbox",
  "outbox": "https://social.derickrethans.nl/@fridaynightdinners/outbox",
  "preferredUsername": "fridaynightdinners",
  "name": "Friday Night Dinners",
  "summary": "Hi! We are …",
  "url": "https://social.derickrethans.nl/@fridaynightdinners",
  "manuallyApprovesFollowers": false,
  "discoverable": true,
  "indexable": true,
  "published": "2024-02-05T18:59:09Z",
  "icon": {
    "type": "Image",
    "mediaType": "image/jpeg",
    "url": "https://media.phpc.social/cache/accounts/avatars/111/851/729/954/932/528/original/196af8039f5c41bb.jpg"
  },
  "image": {
    "type": "Image",
    "mediaType": "image/jpeg",
    "url": "https://media.phpc.social/cache/accounts/headers/111/851/729/954/932/528/original/a85d3e0b1408f0c9.jpg"
  },
  "publicKey": {
    "id": "https://social.derickrethans.nl/@fridaynightdinners#main-key",
    "owner": "https://social.derickrethans.nl/@fridaynightdinners",
    "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w…JOc\nHwIDAQAB\n-----END PUBLIC KEY-----\n"
  },
  "endpoints": {
    "sharedInbox": "https://social.derickrethans.nl/@fridaynightdinners/inbox"
  }
}

The relevant property to look at for signing is the publicKey property. It includes the key-id (https://social.derickrethans.nl/@fridaynightdinners#main-key), the owner (this Actor), and the public key to use by the receiving server to check the signature that the sending server has created with the secret part of this key.

The public and private key pair are created when an Actor is created.

The Person object also includes the Inbox and Outbox URLs, and URLs for retrieving the followers and which Actors this Actor is following.

The user name (preferredUsername, textual user name (name), description (summary), and some images (icon and image), are also present.

A service can find this Actor JSON document by using Webfinger, a protocol specified by the IETF to allow for the discovery of information about people defined by a URI.

Services that implement Webfinger would request the following URL on the accompanying domain. To find the actor for my blog's ActivityPub presence, a service would GET the following URL:

https://social.derickrethans.nl/.well-known/webfinger?resource=acct:blog@social.derickrethans.nl

This returns the following JSON document:

{
  "subject": "acct:blog@social.derickrethans.nl",
  "links": [
    {
      "rel": "self",
      "type": "application/activity+json",
      "href": "https://social.derickrethans.nl/@blog"
    }
  ]
}

The service then uses the href property from this document (https://social.derickrethans.nl/@blog) to retrieve the Actor description.

These four parts is what makes the Fediverse tick.

This is just a quick overview of what goes on technically, but it is perhaps more interesting to see what you can do with it.

I was originally interested in sharing the restaurant reviews that my wife and I write for our Friday Night Dinners website with my Mastodon followers.

For that to work, I had to do a few things.

First I had to create a website (https://social.derickrethans.nl) with routes that would accept Follow Activities to add Actors to send reviews to. Secondly, I had to create a script to send each review (as Note) to these followers.

After a few initial hacks, I settled on implementing library that implements an API that would act on Activities posted to the inbox that an Actor description provided.

Since then, it also accepts GET requests for the Actor, the following and followers collections, the outbox containing all posted Notes, and a route to return the data of each Note itself.

For the inbox, I first implemented the Follow and Undo/Follow Activities to manage followers. I then followed that up with the Like and Undo/Like Activities to store and collect which users had liked each post.

This information is shared with my blogging system, which shows these likes under each article.

The last handler for the inbox that I added is for the Create Activity, so that I can also capture Fediverse replies to each post. This is still fairly primitive as it can't handle replies to replies just yet. But it does allow me to integrate first-level replies to ActivityPub posts with my blogging software through a callback.

The implementation of this is available at https://github.com/derickr/activitypub

After integrating sharing posts through ActivityPub for Friday Night Dinners, I also added an integration with my actual blog, https://derickrethans.nl.

The article on Unicode Collation Sorting can be found as ActivityPub document at https://social.derickrethans.nl/@blog/posts/7ec0d8e4fb538b5b4534bad5e4e13ad6

As there were likes and replies, they now appear under the article as well: https://derickrethans.nl/unicode-collation-sorting.html#likes

My website is not the only ActivityPub integration.

Terrence Eden has created an ActivityPub Server in a single page — he insists that this is not for production use.

WordPress has a plugin to make all articles available to the Fediverse. 404media also makes their articles available through their Flipboard user https://flipboard.com/@404media.

And if you don't want to create an integration but use already existing software, it is also possible to self-host a Mastodon instance, or use an existing "shared hosting" provider where it costs around £10/month.

Or you can join an instance for your community, such as phpc.social. The benefits from using a larger instance is that you get a moderation team for free. They will action on user reports and apply their own moderation rules. In some cases, they will need to block users, mostly from other instances, or block full instances in case these are violating the community's rules. Blocking other instances is called "de-federation", and this is a decision that instance owners can independently make.

Some instances for example have de-federated with Threads, Meta's short message social media website that is Fediverse enabled. Others have decided not to do so, or not so yet.

Whichever option you pick, you will have full control over your output, but also on what you see. The Fediverse has a strong mantra to also not use algorithms to decide what you can see, or what you see first; nor is it particularly keen on any sort of tracking or non-organic advertising. Unlike big-tech apps <https://www.zeropartydata.es/p/localhost-tracking-explained-it-could>_, the apps for the Fediverse have the fewest amount of permissions they can get away with. And even if one of them would request more, you can always select another one.

There is also the opportunity of instances or services to require payments for access to the content. You would only be able to "follow" users when you have an ongoing subscription. Of course, that does rely on instances not sharing these private Notes or Articles with the wider world.

If in the future, a service, or instance, starts injecting ads into the stream of content that you see, you can move your user account to another instance.

As an example, if Meta's Threads service starts publishing ads to random followers, it will certainly get de-federated.

The power of the Fediverse is to give you control over your content. You can publish it through many different channels, and they can all interact.

As JA Westenberg said:

RSS never tracked you.

Email never throttled you.

Blogs never begged for dopamine.

The old web wasn't perfect.

But it was yours.

Just like the web used to be before the algorithms, the advertising, the tracking, and corporations selling your data to shady data-brokers.

Instead of being the product, with ActivityPub and the Fediverse, you're back in control.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Xdebug Update: May 2025 8 Jun 1:10 AM (4 months ago)

Xdebug Update: May 2025

Sunday, June 8th 2025, 10:10 BST
London, UK

In this monthly update I explain what happened with Xdebug development.

GitHub and Pro/Business supporters will get it earlier, around the first of each month.

In the last month, I spend around 20 hours on Xdebug, with 22 hours funded.

My apologies for missing several monthly reports.

Xdebug 3.4

I spent most of my time this month fixing bugs, resulting in the release of Xdebug 3.4.3 on May 14th.

This bug fix fixes a few crashes, and also improves debugging with PHP 8.4's property hooks, by recognising that they have code attached, and no longer throwing fatal errors or exceptions in some situations.

However, it seems that I also might have introduced a new bug — or perhaps with different code, this bug now surfaced. Unfortunately, there is no reproducible case for this specific bug yet, which makes it nearly impossible for me to find and fix it.

Code Coverage with Fibers

In addition to this, due to a memory leak fix, it became apparent that Xdebug does not handle code coverage correctly, when Fibers are used.

Code coverage maintains a stack to remember which lines, branches, and paths have been executed. Once a function finishes, the stack element for it, including path information, gets freed. However, if after freeing code switches to a different Fiber, with a larger stack, the original stack frame's memory is still referenced, causing a crash.

The fix for this will need to include switch stacks, not just for normal PHP scripts as I already do, but also for the one that stores code coverage information. This is unfortunately not a simple task, and hence, it will take a while before I can make another bug fix release addressing this issue.

I hope to have that done by the end of the month.

Native Path Mapping

I have also continued to work on Native Path Mapping, and can now successfully debug templates right from within VS Code.

I have created a teaser video to show it working in a limited fashion.

It does not work yet with PhpStorm due to limitations in the IDE. I have filed a bug report which hopefully will get addressed soon.

More work is necessary, such as understand that some lines will not have code on them at all, and adding many more tests. I will also have to figure out ways to automatically create the source map as I did for the demo in the video.

Xdebug Videos

I have created one new video in the last month:

All Xdebug videos can be watched on my channel.

If you have any suggestions, feel free to reach out to me on Mastodon or via email.

Business Supporter Scheme and Funding

On GitHub sponsors, I am currently 40% towards my $2,500 per month goal, which is set to allow continued maintenance of Xdebug.

If you are leading a team or company, then it is also possible to support Xdebug through a subscription.

In the last month, no new business supporters signed up.

Besides business support, I also maintain a Patreon page, a profile on GitHub sponsors, as well as an OpenCollective organisation.

If you want to contribute to specific projects, you can find those on the Projects page.

Xdebug Cloud

Xdebug Cloud is the Proxy As A Service platform to allow for debugging in more scenarios, where it is hard, or impossible, to have Xdebug make a connection to the IDE. It is continuing to operate as Beta release.

Packages start at £49/month, and I have recently introduced a package for larger companies. This has a larger initial set of tokens, and discounted extra tokens.

If you want to be kept up to date with Xdebug Cloud, please sign up to the mailing list, which I will use to send out an update not more than once a month.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Chakra 6 Jun 7:30 AM (4 months ago)

Friday Night Dinner: Chakra

We have walked past Chakra many times, as it's almost next door to bottle shop and beer bar, Real Drinks that we frequent. Although we have often eaten at The Red Pepper, an Italian restaurant on the same street (which we also recommend), we've never ventured into Chakra, an Indian restaurant. Chakra also have other restaurants in Kensington and Kingston upon Thames.

Although we had booked, there were very few customers inside, although this was probably because it was still fairly early. The menu at Chakra has plenty of options, but isn't overwhelming and includes all the Indian dishes you'd expect. Classics like a chicken tikka masala, plus biryanis, and tandoor dishes.

My wife went for one of the tandoor dishes, the Chatpata Chicken Tikka — which was without sauce, as our waiter explained. It was however not just a dry piece of chicken, and still coated in something, giving a good level of spice and flavour and the chicken was still nicely moist. I picked the Kashimiri Lamb Rogan Josh as I was hoping for something a little spicier, which this dish delivered.

With our dishes, we also had a plain naan and some steamed rice. To help us deal with all the spice, we had the customary Cobra to go with our meal.

Chakra is a good neighbourhood Indian restaurant, and I'm sure we'll be back some time.

Lamb Rogan Josh
Lamb Rogan Josh
1 / 2
Chatpata Chicken Tikka
Chatpata Chicken Tikka
2 / 2

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Dakota 23 May 7:30 AM (5 months ago)

Friday Night Dinner: Dakota

Friday, May 23rd 2025, 16:30 BST
8 Russell Street, LS1 5RN, Leeds
Starters: £10-18; Mains: £20-£50; Grill: £35-£85; Wines from £36
by Morag Rethans

On a warm Friday night in May, whilst visiting Leeds we ate at Dakota. Not knowing Leeds, we booked this place on the strength of lots of positive online reviews.

The restaurant is located in the basement of a hotel, and is gloomily dark. I'm not a fan of massive strip lighting in restaurants, but I do think the lights could have been turned up a bit. We note that online photos do show the restaurant more lit up.

The service was efficient. However, the waitress we had serving us, should work on making guests feel less "patronised" when engaging in small talk, for example when commenting on a customer's wine choice, or when discussing the purpose of their visit to Leeds.

We started with what was a “complimentary bread with a tomato, goats cheese and mozzarella dipping sauce" — apparently this was the favourite dish of the waitress. It was tasty enough, but perhaps a little heavy on the over-reduced tomato purée flavour.

The food was fine, the cod with prawns on a finely chopped red pepper base was fine, and my companions lamb was well cooked. A single side of soy glazed tenderstem broccoli (rather than the "recommended" 2 or 3 sides) was more than sufficient for us.

Overall I wouldn't recommend Dakota or revisit if I was in Leeds again. There are plenty of other options, which, in hindsight would have been better.

Bread with Cheesy Tomato Sauce
Bread with Cheesy Tomato Sauce
1 / 4
Lamb Rump with Pave Potatoes
Lamb Rump with Pave Potatoes
2 / 4
Cod with Prawn
Cod with Prawn
3 / 4
Soy Sauce Glazed Tenderstem Broccoli
Soy Sauce Glazed Tenderstem Broccoli
4 / 4

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Camino Victoria 16 May 7:30 AM (5 months ago)

Friday Night Dinner: Camino Victoria

Camino Victoria is a fairly newly opened tapas place in one of the various new developments on, or near, Victoria Street. It was a nice warm evening, and lots of people were outside enjoying some food and drinks. If you're not near Victoria, they also have four other branches in London.

We sat inside in the comfortable seating room, and started ordering our dishes.

We went for the traditional tapas: Padron Peppers, some were hot and spicy, and some were sweet and mellow; Tortilla de Patatas, which had a lovely gooey centre; Patatas Bravas, with a pleasant spicy ketchup sauce; Croquetas, with its cheesy centre; Arroz Negro, a cuttlefish black rice, with squid ink; and Talos De Chorizo, soft mini tortillas, with minced chorizo, butternut squash, and some yoghurt.

There were three talos in the serving, but you can upgrade to have a fourth one — excellent when you're sharing with two, and frankly something that should be available for every sharing dish, when the number provided do not divide between the size of the party.

With our dinner, we also enjoyed a bottle of a really lovely cava, because we felt like it and it was Friday.

We were in the mood for some dessert, and shared a couple of chocolate truffles to finish our meal.

All the tapas were tasty and well presented, but not absolutely outstanding. For that, you'll probably have to head to Spain, and visit a really good tapas place — we've had bad tapas in Spain too! But if you'd like a taste of Spain in London, then Camino Victoria will do just fine.

Padron Peppers
Padron Peppers
1 / 7
Talos te Chorizo
Talos te Chorizo
2 / 7
Tortilla de Patatas
Tortilla de Patatas
3 / 7
Croquetas
Croquetas
4 / 7
Arroz Negro
Arroz Negro
5 / 7
Patatas Bravas
Patatas Bravas
6 / 7
Chocolate Truffles
Chocolate Truffles
7 / 7

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

On Labour's Immigration Policy 14 May 1:15 AM (5 months ago)

On Labour's Immigration Policy

Wednesday, May 14th 2025, 10:15 BST
London, UK

I am disappointed with the way the Labour government is heading.

Instead of trying to improve the country, they seem to be going the far-right rhetoric way of blaming immigration and ignoring minority rights.

I felt the need to write my MP Georgia Gould again.

Subject: Labour's Stance on Immigration: I am neither a stranger, nor the subject of an experiment

Dear Georgia Gould MP,

What does the Labour Party stand for? Progressive policies to make this country better for its people? Or pandering to far-right Reform-like policies that blame all of this country's problems on immigrants, like myself?

Yesterday, Kier Starmer proclaimed that people like me, who moved to the UK from abroad, did "incalculable damage" to this country.

I had hoped that with Labour coming in after the last election, this sort of anti-immigrant rhetoric would be gone. I expected this from the Tories, and to a greater extend from Reform, but never from your party.

But I am no longer surprised by it.

I was willing to give Labour the benefit of the doubt, but after nearly a year in "power", I haven't seen any positive things that the government has done with its large majority.

Your large majority could easily be used to improve our (economic and cooperative) relations with the EU, fix the wealth and income imbalances by a better (and simpler) tax system with fewer loopholes, or improve the rights of minorities, including LGBTQIA+ rights.

Instead, you seem to prefer a miniscule (and pointless) trade deal with the US, taking benefits away from disabled people, and shitting on the LGBTQIA+ community with this ridiculous stance on who can use which toilet.

And now you've come to blame immigrants.

Like myself, and more than half of the population in Brent 1, were born outside of this country. Are we really the people that do "incalculable damage", or rather, was the "incalculable damage" caused by 14 years of Tory mismanagement, which your government promised to fix?

Are these quotes not really quite the same as Theresa May's nasty party's "citizens of nowhere"?

Is this really what the Labour party stands for?

I also don't understand what you are trying to achieve with pandering to the far-right. You won't win the Reform voters, and you'll end up losing support to actual progressive parties like the Greens and the Liberal Democrats. Morgan McSweeney's approach is not going to do you any favours. If Reform ends up winning the next election, that is going to be on you.

It also isn't going to help growing the country. You will know that immigration is what makes the care system at least sort of work; you will know that the building industry can't hire enough labourers to build enough houses to meet your housing targets, and you will know that economic growth will happen by a comprehensive reset of economic relations with the European Union.

As a Dutch-born naturalised citizen of the UK, I will vote against any party in Westminster that engages in anti-immigrant or anti-LGBTQIA+ rhetoric on principle, before even considering other policy pledges. And campaign against ones who do.

I bet am not alone in this.

Yours sincerely,

Derick Rethans

Please write to your own MP if you share similar concerns, and feel free to copy parts of this letter and adapt them to your own examples. You can find out how to contact your elected officials on WriteToThem.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Albert's Schloss 2 May 7:30 AM (5 months ago)

Friday Night Dinner: Albert's Schloss

If you are in search of a bierkeller (German for beer cellar), with a band, and where you can dance on the tables (but not the benches), then Albert's Schloss is the place to be.

Luckily for us, there is also upstairs Schenke (think: German bakery café), and in the cellar there are many tables for less entertaining dining far away from the band. Here it is quiet enough to have a conversation over burgers, bratwursts, schnitzels, and other alpine fare. And the accompanying beer.

And this is where we found ourselves on this Friday evening.

Hiding away in the back, next to a ski gondola converted into a dining place, we started with a half pint of a traditional German beer. My wife chose the Currywurst as her main, two thick sausages with a spicy sauce and fries. I selected the Cordon Bleu schnitzel, a flattened chicken breast stuffed with Gruyère and ham, served with a mushroom sauce and served with Parmesan fries. The schnitzel wasn't of Austrian proportions — it did actually fit on the plate — but was well cooked, and certainly enough.

We washed our mains down with another half pint, and as we were quite full, we decided to have a digestive. You can get schnapps by the dozen, in all kinds of fruity flavours, but we went for something more classic. My wife had a Genepi, a slightly fruity grape schnapps, and I enjoyed a Mentzendorff Kümmel, which had a slight caraway and aniseed flavour to it.

We enjoyed Albert's Schloss, and it was great value. But it's not the place for a romantic or date-night dinner. Great for a group or a party with friends though.

Cordon Bleu Schnitzel
Cordon Bleu Schnitzel
1 / 2
Currywurst Platter
Currywurst Platter
2 / 2

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Mowgli 25 Apr 7:30 AM (6 months ago)

Friday Night Dinner: Mowgli

Friday, April 25th 2025, 16:30 BST
5 Charlotte Street, W1T 1RE, London
Dishes for sharing: £6.50-£11; Sharing Platters: £25-£35; Cocktails: £8.75-£10.50; Wines from £26
by Derick Rethans

Mowgli is situated on Charlotte Street, not far from Tottenham Court Road and Oxford Street. A section of this street is dedicated to restaurants. You can find anything there. Mowgli is a new addition, replacing Côte, which has gone from this location and many others.

Mowgli is part of a chain, that specialises in Indian Street Food. When we arrived, was a good buzz in the restaurant, with half of the tables full. Unlike last week, we were not the youngest.

We didn't fancy wine, and instead enjoyed a cocktail. My wife had a delicious Smoked Cardamom Old Fashioned, and I chose the Masala Espresso Martini.

Their menu is extensive, but almost overwhelmed with choice. As this was our first visit, we took the lazy option and went for the Street Food Sharer, in the “meat” variety (vegan and vegetarian options are also available). Our starters included a trio of dishes: an Indian take on Patatas Bravas, fried cubes of potato in a sticky turmeric masala, with some raw onion and chilli sprinkled over it; gunpowder chicken, lightly battered and fried; and the most delightful yoghurt chat bombs that were crisp and filled with chickpeas, a yoghurt, and spices. The latter was the star of the show, and as they were liquid inside, not possible to share. Which was a problem, as we were given five for the two of us.

The main consisted of three curries (chosen by the chef), rice, and Roti breads. All three curries (Butter Chicken, Temple Dahl, and Agra Ginger Chicken) were excellent, although I still find my own butter chicken much better than anything you find in a restaurant.

The desert was a scoop of ice cream. My wife enjoyed a scoop of mango sorbet, and I had a scoop of salted caramel to finish our meal.

It was a great and tasty meal out, in a modern, but not loud setting. It's an excellent place to come for a meal after a busy day of shopping (or not), and we expect to return to try more of that menu (and especially the yoghurt bombs).

Patatas Bravas, Yoghurt Chat Bombs, and Gunpowder Chicken
Patatas Bravas, Yoghurt Chat Bombs, and Gunpowder Chicken
1 / 3
Rice; Butter Chicken, Temple Dahl, and Agra Ginger Chicken); and Roti
Rice; Butter Chicken, Temple Dahl, and Agra Ginger Chicken); and Roti
2 / 3
Salted Caramel Ice Cream
Salted Caramel Ice Cream
3 / 3

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Soutine 18 Apr 7:30 AM (6 months ago)

Friday Night Dinner: Soutine

Friday, April 18th 2025, 16:30 BST
60 St. John's Wood High Street, NW8 7SH, London
Starters: £13.25-£16.25; Mains: £17.50-£38.50; Wines from £35
by Morag Rethans

We booked Soutine a little later than normal, but there was no problem for us to get a table on a warm and sunny Friday evening in St John’s Wood. When we arrived and were shown to our table, I immediately thought that it had a resemblance of Brasserie Zedel, near Piccadilly Circus. Which ended up making sense as it has the same owner.

The interior consists of mostly wooden panelling, and loads of mirrors, giving the inside an airy, but cosy atmosphere.

We started with the smoked salmon crumpet for me, and a single oyster for my husband. We ordered a carafe of Chardonnay to share. For the main I had the rather calorific souffle suisse, which was delicious, but perhaps not something to have too often! As a consolation, it did come with a salad.My husband had the roast lamb, which was very tender, and was served with a mushroom flower and some rocket. With that, he had a separate class of Côte du Rhone.

We were originally expecting to be able to order off the set menu which according to the website should have been available, but alas was not offered.

The food and ambience was nice, but we couldn't quite shake off that we were by far the youngest in the restaurant!

Oyster with Trimmings
Oyster with Trimmings
1 / 4
Smoked Salmon Crumpet
Smoked Salmon Crumpet
2 / 4
Roast Lamb
Roast Lamb
3 / 4
Souffle Suisse
Souffle Suisse
4 / 4

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Don't Tell Dad 11 Apr 7:30 AM (6 months ago)

Friday Night Dinner: Don't Tell Dad

Lonsdale Road has many restaurants. They come and go, and we've been to plenty of them in the last few years. But Don't Tell Dad is pretty new.

During the day it's a bakery, but during the evening it turns into a restaurant. It's hip, so booking is a must.

The interior is modern, and full of wood. It wasn't noisy, and it was easy to chat. As our starter, we shared a couple of truffle and cheddar beignets — cheesy balls with shavings of more cheese — and a couple of oxtail crumpets. These were well braised pieces of meat in gravy, upon soft crumpets with some fried crumbs for texture.

We did not fancy ordering a bottle of wine, but instead chose to have a cider with our starter, and a glass of wine each with our main. Unfortunately, the cider only showed up after we finished our starters.

My wife picked monkfish as her main. This was served on the bone with artichoke and a dill béarnaise. I selected the roast lamb, which was served with courgette, chickpeas, and a salsa verde. Both dishes were delicious. However, to be critical whilst the food and wines were lovely, they didn't turn up at the same time. Our wine turned up so far in advance of our main, that we’d nearly finished the glasses of wine when it arrived

Still feeling a little peckish, we also had dessert. Madeleines for my wife, and an olive oil and chocolate mousse for me. Both desserts could easily have been shared between the two of us, and we probably should have. We opted to go for the matching dessert wines, and again there was a significant delay in between the wine and the desserts appearing.

Once they finally arrived, the madeleines were soft, but not so crunchy on the outside. The chocolate mousse was covered in nicely bitter chocolate flakes, and juicy blood orange.

The food at Don't Tell Dad was very nice, as was the atmosphere. Unfortunately, the service was very slow with long waits between the courses. In addition to that, the drinks were served at odd times, and not with the food which they were ordered to go with.

Truffle and Cheddar Beignets
Truffle and Cheddar Beignets
1 / 6
Oxtail Crumpets
Oxtail Crumpets
2 / 6
Roast Lamb
Roast Lamb
3 / 6
Monkfish
Monkfish
4 / 6
Madeleines
Madeleines
5 / 6
Chocolate Mousse
Chocolate Mousse
6 / 6

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Ida 3 Apr 7:30 AM (6 months ago)

Friday Night Dinner: Ida

Thursday, April 3rd 2025, 16:30 BST
222a Kilburn Lane, W10 4AT, London
Starters: £6.50-£12.50; Mains: £18.50-£23.50; Wines from £26.50; Deserts: £5.00-£9.00
by Morag and Derick Rethans

This was our second trip to Ida. We first visited in summer 2023, and although we wrote a review, we never posted it. Ida has achieved something of a reputation in the last couple of years, but remains at its heart a local neighbourhood restaurant.

When you walk past Ida during the day, you wouldn't pay it any notice. It sits on a busy road at the edge of a residential neighbourhood, with a convenience store across the road. It's an unlikely spot for a restaurant, situated pretty close to both Salusbury Road in Queens Park, and the restaurants on Chamberlayne Road close to Kensal Rise. In the daytime it looks slightly unwelcoming, which is probably why it took us so long to visit the first time.

In the evening however, the place livens up. We arrived at Ida at a quarter past six, and we were nearly the first ones in. By the time we were ready to order fifteen minutes later it was full. When we were here last time, on a lovely warm summer evening, there were also a few tables outside. With one set of doors open, even our inside table felt part of the streetscape.

To start, we ordered a crostone to share. The sourdough toast was covered in flavourful (and aromatic) melted taleggio cheese, with grapes and a little syrupy honey.

As his main meal, Derick ordered the wild funghi papperdelle, and as hers, Morag ordered the little ears — orecchiette — which was served with a creamy velouté of cauliflower, and more of the tasty taleggio cheese.

The home-made pasta was nicely al dente, and the sauces thick, slightly sticky, and delicious. We only got (and needed) a fork as utensils, which made the meal more authentic.

With our meal, we also enjoyed their house white wine, which was, fresh with a good flavour that worked well with all our dishes.

After our pasta we were still a bit peckish, and fancied a tiramisu to finish our evening. This was light and fluffy, and we debated whether this was as good as the tiramisu offered by another local restaurant. We think the jury is out on that one though.

Crostone
Crostone
1 / 4
Funghi Papperdelle
Funghi Papperdelle
2 / 4
Orecchiette
Orecchiette
3 / 4
Tiramisu
Tiramisu
4 / 4

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Unicode Collation Sorting 25 Mar 6:50 AM (7 months ago)

Unicode Collation Sorting

Tuesday, March 25th 2025, 14:50 GMT
London, UK

I recently added support to this website to receive Favourites and Replies through the ActivityPub posts that I create from each article.

Replies show up as comments after moderation, and favourites show up as Likes under each of the articles.

When fetching all the likes, my internal API returns the following structure — just like how PDOStatement::fetchAll() returns them:

array(7) {
  [0]=>
  array(8) {
    ["name"]=>
    string(14) "Marcus Bointon"
    ["linked_account"]=>
    string(33) "https://phpc.social/users/Synchro"
  }
  [1]=>
  array(8) {
    ["name"]=>
    string(14) "Derick Rethans"
    ["linked_account"]=>
    string(33) "https://phpc.social/users/derickr"
  }
  [2]=>
  array(8) {
    ["name"]=>
    string(26) "🇵🇸 Álvaro González"
    ["linked_account"]=>
    string(37) "https://mastodon.social/users/kAlvaro"
  }
}

I wanted to sort the likes by name, which turned out harder to be than I had hoped. Mostly because people do odd things with their names sometimes, such as not using an upper-case letter, or by prefixing their names with emojis as you can see in the example above.

If each entry in my array was only a string with a name, and no emoji is prefixed, you can use natcasesort(), but I have both complex objects and an emoji. This means PHP's built-in functions don't cut it.

However, PHP also has the Intl extension, which has a Collator class with a sort method.

To create such a collator in code, use:

$collator = new Collator('root');

The Root Collation is ICU's Default Collation, but as the ICU documentation says:

Not all languages have sorting sequences that correspond with the root collation order because no single sort order can simultaneously encompass the specifics of all the languages. In particular, languages that share a script may sort the same letters differently.

This is good enough for my use case there, where I only want to sort names in a reasonable fashion.

One thing that it does do is to sort lower-case letters before upper-case letters, but this behaviour can be changed by setting CASE_FIRST attribute on the collator to UPPER_FIRST:

$collator->setAttribute(Collator::CASE_FIRST, Collator::UPPER_FIRST);

Letters in non-Latin script will sort after the Latin letters.

However, the Collator->sort() method can only handle arrays of strings, and not complex objects.

To get around this limitation we instead use PHP's built-in usort() function with our own callback. In our callback we can use the Collator::getSortKey() method on each sort element's name array key to create the key that Collator::sort() would have used internally.

For good measure, we also use trim to remove preceding and trailing whitespace. The code to sort the elements now looks like:

$col = new Collator('root');
$col->setAttribute(Collator::CASE_FIRST, Collator::UPPER_FIRST);

usort(
    $allLikes,
    function($a, $b) use ($col) {
        $aName = trim($a['name']);
        $bName = trim($b['name']);
        $aKey = $col->getSortKey($aName);
        $bKey = $col->getSortKey($bName);

        return $aKey <=> $bKey;
    }
);

Now the only problem is that emojis sort before actual letters, so we need to scrub them. Each letter defined in the Unicode standard has properties associated with it. One of those properties is the General Category. If you examine the chart you will fined that for 0061;LATIN SMALL LETTER A the GC is Ll (Letter, Lower-case). The flag emoji from my example is composed of two characters: 1F1F5;REGIONAL INDICATOR SYMBOL LETTER P and 1F1F8;REGIONAL INDICATOR SYMBOL LETTER S. Both of these have as category So (Symbol, Other).

The PCRE library that PHP uses for regular expressions is aware of these categories, and you can select for for them with the \p{…} specifier. The documentation has a page on it.

In our case we want to remove all Symbols (with category S). Changing our trim lines to strip this character class accomplishes this.

When we now combine all of this, we get:

<?php
$allLikes = [
    [ 'name' => 'Marcus Bointon', 'linked_account' => 'https://phpc.social/users/Synchro' ],
    [ 'name' => 'Derick Rethans', 'linked_account' => 'https://phpc.social/users/derickr' ],
    [ 'name' => '🇵🇸 Álvaro González', 'linked_account' => 'https://mastodon.social/users/kAlvaro' ],
];

$col = new Collator('root');
$col->setAttribute(Collator::CASE_FIRST, Collator::UPPER_FIRST);

usort(
    $allLikes,
    function($a, $b) use ($col) {
        $aName = trim(preg_replace('/\p{S}+/u', '', $a['name']));
        $bName = trim(preg_replace('/\p{S}+/u', '', $b['name']));
        $aKey = $col->getSortKey($aName);
        $bKey = $col->getSortKey($bName);

        return $aKey <=> $bKey;
    }
);

var_dump($allLikes);
?>

When we now run the example with the $allLikes array from previously, our result is:

array(3) {
  [0] =>
  array(2) {
    'name' =>
    string(26) "🇵🇸 Álvaro González"
    'linked_account' =>
    string(37) "https://mastodon.social/users/kAlvaro"
  }
  [1] =>
  array(2) {
    'name' =>
    string(14) "Derick Rethans"
    'linked_account' =>
    string(33) "https://phpc.social/users/derickr"
  }
  [2] =>
  array(2) {
    'name' =>
    string(14) "Marcus Bointon"
    'linked_account' =>
    string(33) "https://phpc.social/users/Synchro"
  }
}

And from that, I can then generate the HTML code to render who liked my article, which you can hopefully see below.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: The Mayfair Chippy 21 Mar 8:30 AM (7 months ago)

Friday Night Dinner: The Mayfair Chippy

Friday, March 21st 2025, 16:30 GMT
14 North Audley Street, London W1K 6WE
Starters: £4.75-£13.25; Mains: £17.50-£33.50; Wines from £30.95
by Derick Rethans

When we arrived, there was a long queue outside waiting to get in. Luckily, my wife had booked, so we got to skip the queue. Inside, we were seated in a backroom, with space for about a dozen people.

The menu isn't extensive, which makes sense, as it's a chippy. We both therefore had Fish and Chips, but not quite the same ones. My wife had the cod, while I had the haddock. There wasn't really much between them though. Both of them came in beautifully light batter. For those who don’t like fish, or who are vegetarian, they also offer a battered rare breed sausage, or a battered halloumi as alternatives.

A reasonable amount of reasonable chips were served with the fish. They were the classic style of chips you get with a fish and chip supper, a little chewy, and quite far away from the triple cooked Belgian fries that are so very good (but not traditional for fish and chips). There were also three accompaniments: tartare sauce, with crunchy gherkins, mushy peas to cover the vegetable section, and a nice and spicy curry sauce. My wife being a traditionalist also went in for the malt vinegar and salt.

With our meal, we shared a bottle of a white Vinho Verde, from Portugal. It's not something you often find in a chippy, but it was date night after all.

We didn't have any dessert, as the Fish and Chips were quite filling. It's a good chippy, but I believe it was quite pricey for what it was. You don't typically pay £25 per person for food at a chippy. Maybe we should try out our local chippy…

We did come home with a paper party bag of fruit salad sweets and black jacks though!

Haddock and Chips
Haddock and Chips
1 / 1

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

And Then There Was PIE 18 Mar 6:50 AM (7 months ago)

And Then There Was PIE

Tuesday, March 18th 2025, 14:50 GMT
London, UK

In tandem with the PECL website, which hosts around 400 packages, PHP developers have been able to install third party extensions for several decades now with the PECL installer.

PECL, which stands for the PHP Extension Community Library was a sister project to PEAR, the PHP Extension and Application Repository. This repository has largely been replaced by Packagist, which hosts PHP user land code to be installed through Composer. Unlike PEAR, Packagist allows anybody to register a library of PHP code, which can then be composed through a file (composer.json) and made available to people's application code.

For extensions written in C, PECL was the only option. The PECL website has not been properly maintained for a long while now. And there are issues where the package description and release information XML files can not even contain higher-byte characters due to a very old misconfiguration of MySQL—back when it did not support Unicode and UTF-8 properly.

Updating the website, for example for adding new releases releases, is also not the easiest thing to do. Unlike adding a Git tag as you can do with Composer packages, it requires modifying an unwieldy XML file, and uploading the packages manually through a web form.

With this in mind, about a year and a half ago, I started drafting the requirements for "New PECL". The initial goals I came up with were:

  • A new simplified installer, that does not rely on PEAR

  • Ways to configure which (already installed) PHP version should get which extension version(s)

  • Cryptographic verification of released extension tags

  • Removing the reliance on a PECL website

  • No longer relying on package.xml

The PHP Foundation bid for funding by the Sovereign Tech Agency — an agency of the German government — to develop this new tool.

From my initial requirements, James Titcumb and others worked on a more detailed design as part of their work for the PHP Foundation. James then set to work on the installer resulting in the first pre-release last November.

Since then, the tool has matured with more features, and better integration with Packagist, which now also features PHP extensions besides public PHP packages. Many extensions, including Xdebug, can now be installed with PIE.

Documentation for PIE is available on GitHub.

Binary builds for Windows are also supported, and we have developed a GitHub action to help extension authors to do this in the right way for PIE.

PIE's feature set is fairly compatible with PECL, and now is the time to start using it in your projects. There are sometimes still a few kinks, such as a recent issue with the MongoDB extension's use of Git submodules. This is already fixed in the 0.7.0 of PIE, but more issues are likely to be encountered.

At some point in the future, the PECL website will be discontinued leaving PIE installing PHP extensions from Packagist as the only available option.

If you are an extension author, then now is the time to add support for PIE in your extension.

In most cases, this requires creating a composer.json file in the root of your GIT repository, such I have done for Xdebug, and others have done for the APCu, CSV, Imagick, and many other extensions.

If you are a user of extensions, that you currently install through PECL, then now would be a great time to start using PIE in your development environments. Only through superior testing will the new PIE installer reach maturity, and become ready to have a 1.0 release.

And then we can celebrate with an actual pie. 🥧

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: The Grove Tavern 14 Mar 8:30 AM (7 months ago)

Friday Night Dinner: The Grove Tavern

Friday, March 14th 2025, 16:30 GMT
83 Hammersmith Grove, London W6 0NQ
Starters: £6.50-£9.95; Mains: £15.95-£29.50; Wines from £27.50
by Derick Rethans

We walked to the Grove Tavern, situated on the corner of a street with a few other shops, cafés, and another restaurant. When we arrived there were a few people having a pint, and a few other people eating. We were shown to our seats in a near-empty part of the dining room.

It being a pub, it does pub food. And it does it rather well.

While waiting for our mains, we first enjoyed some crispy halloumi, dressed in honey and chilli. They were a little crunchy and sweet. My wife had the Onglet steak, which she said was better than the steak at Rail House Victoria. It came with some good chips, a mushroom, and a peppercorn sauce. I enjoyed the Fish & Chips. It was a good portion with a light, but not whimsical, batter. Besides it were the usual accompaniments: tartare sauce, chunky chips, and some mushy peas. The latter I thought were a little too watery.

With our meal, we also shared a bottle of a Paraíso Sur viognier from Chile.

We didn't fancy any of the desserts, and instead we ended up for some dessert wine at The Brackenbury Wine Rooms at the other side of the terrace. Their menu looked good too, so that might become a further review.

The Grove was cosy and welcoming, and it fits in well as a neighbourhood pub with decent food.

Crispy Halloumi
Crispy Halloumi
1 / 3
Fish & Chips
Fish & Chips
2 / 3
Onglet Steak
Onglet Steak
3 / 3

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Missing Characters 11 Mar 6:50 AM (7 months ago)

Missing Characters

Tuesday, March 11th 2025, 14:50 GMT
London, UK

I release a new version of Xdebug on Sunday, which fixes a few bugs. One of them is titled emoji character become diamond question marks. This bug turned out to be the same as var_dump does not output some Cyrillic characters, which was originally reported a few days earlier but hadn't come with a decent enough reproducible case.

At first I dismissed this, as it's not unlikely that people get their character sets wrong, or mixed up.

But when I tested it, the following script really did not show the right result:

<?php
$str = 'hello 👍';
var_dump($str);
?>

Instead of the expected:

<pre class='xdebug-var-dump' dir='ltr'>
<small>Standard input code:3:</small><small>string</small>
<font color='#cc0000'>'hello 👍'</font> <i>(length=10)</i>
</pre>

It showed:

<pre class='xdebug-var-dump' dir='ltr'>
<small>Standard input code:3:</small><small>string</small>
<font color='#cc0000'>'hello ���'</font> <i>(length=10)</i>
</pre>

The four bytes that should have made up the 👍 had turned into three.

Xdebug uses a function, xdebug_xmlize, to escape XML and XHTML-special characters such as ", &, and < when it outputs strings of data.

Its algorithm first calculates how much memory the resulting string would use by looping over the source characters, and adding the lengths of the escaped characters together. It uses a 256-entry table for this.

The first row shows that byte 0's escaped length will be 4 (for &#0;) and the LF character's escaped length will be 5 (for &#10;).

The replacement strings are recorded in the table that follows. It only has place for 64 elements, as none of the bytes above byte-64 need to be escaped. You can see that because the xml_encode_count table only has entries containing 1 after the fourth 16-element row.

Then in a second iteration it loops over all the source characters again to construct the resulting output.

In this iteration, it checks if the destination length is 1, in which case it just copies the character over. If the destination length is not 1, then it adds the number of characters that correspond to the destination character's length.

The bug here was that the table for xml_encode_count, although it was defined as having 256 entries, only had 240 entries. I had missed to add the 16th line, so instead there were only 15 lines of 16 elements.

And in C, that means that these missing elements were all set to 0. This meant that if there was a character in the source string where the byte value was larger or equal to hexadecimal 0xF0 (decimal: 240), the algorithm thought the replacement length of these characters would be 0. This then resulted in these characters to just be ignored, and not copied over into the destination string.

For the 👍 character (hex: 0xF0 0x9F 0x91 0x8D) that meant that its first byte (0xF0) was not copied into the destination string. And that meant a broken UTF-8 character. Oops! 💩

In Xdebug 3.4.2 this is now fixed, as I have added the 16th line to the table, with 16 more elements containing 1.

What I did find curious that it took nearly five years for something to report this issue, and with that, two in the same week!

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Rail House Victoria 7 Mar 7:30 AM (7 months ago)

Friday Night Dinner: Rail House Victoria

We went to the Rail House Victoria on a rainy Friday evening. We were seated right next to a big group with children generally acting up, on a table which if I’m honest was a little undersized.

We started our meal with five aged Gouda croquettes. We've seen portions of two, three, and four before, but five is slightly bizarre. I don't get it when restaurants serve sharing items in prime number portions. It makes it harder to divide properly to share. They were however, quite tasty.

As her main, my wife selected the minute sirloin stack, which was served with a fried egg with a running yolk, and a caper salsa. It was well cooked. I chose the roast lamb, which was served with a fried rice with peppers and onions. The lamb was spot on as well, and lovely pink in the middle. It however did come in a very hot pan which I subsequently burned my hand on. With the meal, we shared a bottle of a Cantina di Gambellare merlot.

The dishes were fine, but the setting was more like an industrial gastropub, than a date-night establishment.

We were finished pretty quickly,, but didn't fancy any of their puddings. Instead, we popped over the road to Stoke House to enjoy a lovely cocktail.

Aged Gouda Croquette Balls
Aged Gouda Croquette Balls
1 / 3
Roast Lamb with Fried Rice
Roast Lamb with Fried Rice
2 / 3
Minute Sirlock Steak with Fried Egg
Minute Sirlock Steak with Fried Egg
3 / 3

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: The Surprise 28 Feb 7:30 AM (7 months ago)

Friday Night Dinner: The Surprise

We were determined not to do a "Valentine's Meal", you know, the ones that are cringe, start with a welcome glass of cheap fizz, have a special overpriced set menu, and are just a bit cheesy all round. Instead of that, my wife had booked a table at The Surprise, a gastropub in Chelsea that decidedly did not have a Valentine's Day Menu.

We were set in a small back room, and getting there meant wrestling through a throng of people hanging out at the busy bar.

As our starter, we shared chicken and blue cheese croquets, which came with a delicious thyme mayonnaise. We ordered a bottle of Riesling, partly because my wife didn't want to pronounce Gruner Veltliner to the waiter. It was nice and crisp, and we enjoyed it while waiting for our mains to arrive.

I chose the pan-fried cod. Unfortunately they no longer had that, but after going back-and-forth with the kitchen, it turned out they could do the same dish with monk fish, which I indeed had. It came served with mussels and prawns, some smoked tomatoes and risotto. The ingredients worked well together.

My wife picked the butternut squash gnocchi, which was a little crunchy on the outside offering a nice texture, and was served with kale and pine nuts. It also was a dish that was well put together.

We were still a little peckish, and henceforth decided we wanted some pudding. Our wine had run out though, so with our desserts — the affogato for her, an orange cake with chocolate sorbet for me — we also enjoyed a glass of dessert wine: A sauternes to go with the affogato, and for me a tokaji to go with the cake and sorbet.

The food was excellent, although the service was a little slow. The staff did apologise for this, while commenting that this was due to it being Valentine's Day. It's a great vibrant place for a meal, so we'd go again.

Chicken Croquets
Chicken Croquets
1 / 5
Monk Fish, with Prawns and Mussels
Monk Fish, with Prawns and Mussels
2 / 5
Butternut Squash Gnocchi
Butternut Squash Gnocchi
3 / 5
Orange & Almond Cake, with Chocolate Sorbet
Orange & Almond Cake, with Chocolate Sorbet
4 / 5
Affogato
Affogato
5 / 5

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

ConFoo 2025 Slides 27 Feb 10:30 AM (7 months ago)

ConFoo 2025 Slides

Thursday, February 27th 2025, 14:30 EST
Montréal, Canada

I have been speaking at the 2025 edition of ConFoo in Montreal, the city with three seasons in as many days.

I have given two talks.

  • In What's New in PHP 8.4? I explain the major new features of PHP's most recent release, 8.4.

  • And in Better Debugging with Xdebug I explained some of Xdebug's new features, and also showed how to use some of these features to use the debugging in complicated situation. I also mentioned the Native Path Mappings feature that I am working on, as well as the initial ideas and plans for time travelling.

Let me know if you have questions or comments.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: The Blue Stoops 21 Feb 7:30 AM (8 months ago)

Friday Night Dinner: The Blue Stoops

On a cold and rainy evening, we met at the Blue Stoops, a pub owned by Midlands brewery Allsopp's, near Notting Hill Gate station, on the way to Kensington High Street. We arrived a little early, so started off with a half. I tried a Double Diamond, a beer that has recently come back after having been gone for 30 years.

While we were enjoying our cheeky half, our table became ready, and we sat down to investigate the menu. With our food we ordered a large glass of wine, but they only did small measures. So instead of a single large glass each, we ended up with four small ones! We combined the glasses to end up with two large glasses. A little curious, and to be fair, I would have been happy with just a small glass instead.

Back to the meal — To start, we had an oyster each. They were nice and plump, and were served with the usual accompaniments: a slice of lemon and an onion vinaigrette. We also choose the same main course, and onglet steak served with chunky chips, and a fried egg. The chips were crispy and fluffy, the steak well cooked, and the egg added some moisture. We saw other plates coming out of the kitchen, and I think we missed our mark here by not picking two different dishes.

The dining room had a typical gastropub feeling to it, and the bar was quite busy. It's a good spot, and I'm glad to see it has opened. Maybe next time we need a better look at their menu.

Oysters
Oysters
1 / 2
Onglet Steak, with Chips and an Egg
Onglet Steak, with Chips and an Egg
2 / 2

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: The Vincent Rooms: Escoffier Room 14 Feb 7:30 AM (8 months ago)

Friday Night Dinner: The Vincent Rooms: Escoffier Room

Friday, February 14th 2025, 16:30 GMT
76 Vincent Square, London SW1P 2PD
Set menus at £45, with a £45 wine pairing — other drinks available too
by Derick Rethans

Having dinner at the Escoffier Room in the Vincent Rooms is one of our pre-Christmas traditions. This year that did not work out though, and instead we went in January. The Escoffier is the smaller, slightly fancier dining room which offers tables for up to four people, there is also the larger Brasserie, which is also well worth going to, which will do tables for larger groups.

The Vincent Rooms is a restaurant of the Capital City College — where they train chefs. The meals and service are all done by the students (with suitable supervision). This has little effect on the dishes, but it does sometimes make for a more haphazard service. That is okay though, as we are now used to this, and students learn by doing these things.

The set menu comes in a normal and a meat-free version. Our menu was "A Taste of Italy". Neither of us chose the matching wine menu, it was a school night after all, and my companion was doing “dry January”. I did enjoy a glass with my starter and mains, whilst she opted for some sparkling water.

Our dinner started with beetroot gnocchi — which were nicely fried, slightly red, and had a hint of beetroot flavour. Then followed a minestrone, which was served with Parmesan cheese crumbs. This was my least favourite dish. I thought it was a little too sour, and the Parmesan did not add much, if at all.

After the starters, a piece of moist, but firm, roast Monkfish followed. This was served on a bed of creamed porcini mushrooms. I thought it worked well together, but my wife was less keen as she thought the mushrooms were overpowering. This was followed by the main course, a porchetta served with artichoke purée, crispy crackling, and some kale. I think this also fit well together, and I thought this was my favourite course of the meal.

For pudding, a Sicilian Cassata was served with biscotti, and some poached pears. The cassata was a bit odd, as we hadn't expected a savoury flavour as filling in-between the two sponge layers. A selection of six petit fours finished our dinner, which we enjoyed with a coffee for my wife, and a glass of port for myself.

Although we normally enjoy our meals in the Escoffier, this one was a little underwhelming, but it doesn’t put us off returning.

Beetroot Gnocchi
Beetroot Gnocchi
1 / 6
Minestrone
Minestrone
2 / 6
Roast Monkfish
Roast Monkfish
3 / 6
Porchetta, with Truffled Jerusalem Artichoke Purée
Porchetta, with Truffled Jerusalem Artichoke Purée
4 / 6
Sicilian Cassata
Sicilian Cassata
5 / 6
Petit Fours
Petit Fours
6 / 6

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Xdebug Update: January 2025 9 Feb 1:10 AM (8 months ago)

Xdebug Update: January 2025

Sunday, February 9th 2025, 10:10 GMT
London, UK

In this monthly update I explain what happened with Xdebug development.

GitHub and Pro/Business supporters will get it earlier, around the first of each month.

In the last month, I spend around 18 hours on Xdebug, with 25 hours funded.

Foreach Woes

Besides the Xdebug 3.4 general bug fixes, I have also been looking at addressing a long-standing issue where using foreach produces some unexpected results when doing path and branch coverage. I wrote an article called Figuring Out Foreach to explain the problem.

The fix however is trickier, and I am inclined to roll that up into a big patch that refactors Code Coverage into an analysis pass, and a collection pass. The patch sits in a branch and addresses some other long outstanding inaccuracies.

I recently have rebranched this patch on Xdebug's master again, so it is fully functional (minus the foreach changes), but unfortunately it is a little slower than what currently is available in Xdebug. I might decide to release it with this slight performance degradation in Xdebug 3.5 or 3.6 regardless.

Xdebug Videos

I have created one new video in the last two months:

All Xdebug videos can be watched on my channel.

If you have any suggestions, feel free to reach out to me on Mastodon or via email.

Business Supporter Scheme and Funding

On GitHub sponsors, I am currently 40% towards my $2,500 per month goal, which is set to allow continued maintenance of Xdebug.

If you are leading a team or company, then it is also possible to support Xdebug through a subscription.

In the last month, no new business supporters signed up.

Besides business support, I also maintain a Patreon page, a profile on GitHub sponsors, as well as an OpenCollective organisation.

If you want to contribute to specific projects, you can find those on the Projects page.

Xdebug Cloud

Xdebug Cloud is the Proxy As A Service platform to allow for debugging in more scenarios, where it is hard, or impossible, to have Xdebug make a connection to the IDE. It is continuing to operate as Beta release.

Packages start at £49/month, and I have recently introduced a package for larger companies. This has a larger initial set of tokens, and discounted extra tokens.

If you want to be kept up to date with Xdebug Cloud, please sign up to the mailinglist, which I will use to send out an update not more than once a month.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Lore of the Land 7 Feb 7:30 AM (8 months ago)

Friday Night Dinner: Lore of the Land

Friday, February 7th 2025, 16:30 GMT
4 Conway Street, London W1T 6BB
Starters: £6.50-£14; Mains: £22-£32; Wines from £37
by Derick Rethans

This is our second visit to Lore of the Land, but that was before Friday Night Dinners. On that occasion we went because they make their own beers (Gritchie Brewing Company). This time, we went because of a specific event: a Burns Supper.

Burns Night, January 25th, is when the Scot celebrate the life and poetry of the poet Robert (Robbie) Burns. It is traditional to serve haggis, neeps (swede), and tatties (potatoes); and of course a wee dram to toast with.

But this is a blog about dinner.

Our dinner started with some bannock bread and a Whisky Mac upon arrival. Soon we were tucking in into our starters, some whisky cured salmon tartlets, followed by hand dived scallops with cauliflower purée. The latter was also served with slices of picked cauliflower.

In between the starters and mains we had a whisky tasting of Crabbie and Bonnington malts. To be honest, the whiskies (and especially the 30-year-old one) were disappointing. They were mostly young and had very little flavour. But the experience of a guided whisky tasting was lovely, and other people around our shared table were very much more liking it. I think we are spoiled.

Before we started with our main, the Haggis was "piped in", and announced through Robbie's poem "Address to a Haggis". The haggis was well spiced, the mash was smooth, and the neeps just slightly mushy. Some fried onions were sprinkled on top, and a whisky cream sauce poured over.

After our meal, and during pudding (shortbread with Caledonian Cream and Marmalade) there were toasts to the lassies, and replies to the laddies — a humorous and mostly clean episode.

We enjoyed our dinner, and it was nicer than at Brown's last year. Although the whiskies weren't too much to our liking, we still had an enjoyable evening. I think we'll try to find a different venue for a burns night dinner next year though.

Bannock Bread
Bannock Bread
1 / 5
Whisky Cured Salmon Tartlets
Whisky Cured Salmon Tartlets
2 / 5
Scallops with Cauliflower Purée
Scallops with Cauliflower Purée
3 / 5
Haggis, Neeps, and Tatties
Haggis, Neeps, and Tatties
4 / 5
Shortbread with Caledonian Cream
Shortbread with Caledonian Cream
5 / 5

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

On the Online Safety Act 28 Jan 1:35 AM (8 months ago)

On the Online Safety Act

Tuesday, January 28th 2025, 10:35 GMT
London, UK

A few years ago I wrote a letter to my then MP Tulip Siddiq, with regard to the Online Safety bill.

This bill has now become the Online Safety Act and the regulator, Ofcom is preparing the rules and regulations around this.

What I then was worrying about, now all seems to come through. So I wrote the following letter to my new MP Georgia Gould.

Dear Georgia Gould MP,

I wanted to write to you as my MP regarding the UK's Online Safety Act (OSA), which was passed under the previous government with wide support from Labour.

Although it was always touted as promoting online safety, targeting the large social media companies, it is currently already having serious unintended consequences.

Because it is not just the larger social media companies that are in scope, but it also affects community forums, discussion groups about issues in Open Source software, and small independent sites. In most cases, these are not commercial entities making money from stirring up controversies, which is what in my opinion the OSA should have focussed on.

Each platform that has some relation with user-to-user to content is in scope, and the operators needs to a complicated risk assessment. Although Ofcon is now coming out with some help 1, and they talk about "proportionality", I would argue that many of these requirements are not proportional at all.

Personally, I would, need to do a risk assessment for several "services" (that I have identified so far), none of which are commercial—there are not even ads, algorithms, or tracking:

  • The comments for my low-traffic blog (https://derickrethans.nl), as users can reply to comments by other users, and potentially add links to photos, even though all comments are pre-moderated.

  • The issue tracker for one of my Open Source projects (https://bugs.xdebug.org). I self-host this, but users can submit bug reports, with screenshots showing where something went wrong.

  • The web-based interfaces to the discussion groups of a large Open Source language project (PHP) (https://news-web.php.net/). This is a language used by upwards of 50% of the web. The groups are for discussing technical details of the language, but as it is user-to-user and not just e-mail, it is in scope.

  • I help run a Mastodon server for the community of users for this language (https://phpc.social) as well, which is also clearly in scope.

  • A small website that I, and a few other users, use for storing and sharing notes on whiskies we have tried (https://dram.io).

If I do any of these assessments wrong, or neglect to do, I would be liable, perhaps with severe penalties. Some of those deal with images, others with alcohol (so 18 and up). But none of them are probably high risk. But I still have to this. And these 5 are just examples that affect me. And nothing would stop malicious entities from making spurious complaints or uploads to get me in trouble.

But it goes further, resources and communities grown over decades will be gone because the consequences of enforcement under the OSA are so draconian that anyone rightly concerned about their users and the law isn't going to take the risk of that liability 2.

Ironically those who don't care about their users or UK law will just ignore it and likely be beyond prosecution/enforcement anyway, while those who do genuinely care about the actual safety would find it really hard and costly.

The worst about this is this will do is the opposite of the intentions of the OSA, and consolidate power in the large companies, as small independent operators shut their services down.

This is pretty much exactly the opposite of what we need right now.

We need diversity of online communities and opportunities for people to create safe online spaces that are not subject to the whims of someone like Mark Zuckerberg or Elon Musk.

As a matter of fact, there is already a list being compiled of services that have decided to shut down, or block access to users from UK locations: https://onlinesafetyact.co.uk/in_memoriam/ — I expect that list to grow drastically over the next few months.

I hope you can urge the UK government to amend things and clarify the position for small operators (some of which that have been part of the internet since the earliest days), so the UK doesn't lose all the small, independent, curated online communities, nor small independent non-UK companies blocking access for UK users.

With kind regards, Derick Rethans

Please write to your own MP if you share similar concerns, and feel free to copy parts of this letter and adapt them to your own examples. You can find out how to contact your elected officals on WriteToThem.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: The Devonshire Arms 24 Jan 7:30 AM (9 months ago)

Friday Night Dinner: The Devonshire Arms

Not to be confused with "The Devonshire", an extremely popular pub, near Piccadilly Circus, which we also have reviewed.

The Devonshire Arms is a cosy pub situated in Kensington, between Earls Court and High Street Kensington tube stations. The pub itself has the feel of a local, but upmarket boozer—it is Kensington—where everyone (not just the locals) are welcome.

We had a cheeky half when waiting for our table to be ready. My wife had an alcohol-free Lucky Saint as she's doing Dry January. It's good to see that there were several alcohol-free options on their menu.

After a little wait (we were early) we were seated at a cosy table in the dining room to have a look at the menu.

As starters, we had some Padron peppers, and Wild Boar, pork and ale sausages, served with an English mustard. That sharp mustard, gave you a good slap in the sinuses, as all good mustards should.

From their specials menu, my wife chose the fish pie as her main, which was served with green beans. To accompany it, she had an alcohol-free Amalfi Spritz cocktail made with Lyres Italian Spirit. It looked like an Aperol Spritz, but it did not taste like it.

I selected the trout dish, which was served with salsify, roasted potatoes, and prawns. I also ordered a glass of wine that was recommended on their menu for my dish. To my surprise, a glass of red wine showed up, and not the customary white wine for fish. However, to my surprise and delight the flavours combined well.

After this, we were full enough and had no place for dessert. Our bill came in at £63 as we had a half-price main course voucher, a special for early January, without it would have come in at just under £90. The food was tasty, the service good, and the ambience lovely. A good night out all round.

Wild Boar Sausages, with English Mustard
Wild Boar Sausages, with English Mustard
1 / 4
Padron Peppers
Padron Peppers
2 / 4
Trout with Prawns
Trout with Prawns
3 / 4
Fish Pie with Green Beans
Fish Pie with Green Beans
4 / 4

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Figuring Out Foreach 14 Jan 8:40 AM (9 months ago)

Figuring Out Foreach

Tuesday, January 14th 2025, 17:40 GMT
London, UK

For a while I have been aware of some odd behaviour when you use branch coverage with PHP's foreach language construct. Usually with PHPUnit.

Take for example this bit of code:

<?php
function showLanguages(array $languages): void
{
    foreach ($languages as $language) {
        echo $language, "\n";
    }
}

It seems that in order to cover all paths by test cases to pass in an array without any elements, and one with at least one element.

But no, when you run the analysis, you will see that there only two out of the three paths are covered:

Let's first actually analyse which opcodes, PHP's internal execution units, are generated by the engine:

line      #* E I O op          return  operands
------------------------------------------------
    2     0  E >   RECV        !0
    4     1        EXT_STMT
          2      > FE_RESET_R  $2      !0, ->9
          3    > > FE_FETCH_R          $2, !1, ->9
    5     4    >   EXT_STMT
          5        ECHO                !1
          6        EXT_STMT
          7        ECHO                '%0A'
    4     8      > JMP                 ->3
          9    >   FE_FREE             $2
    7    10        EXT_STMT
         11      > RETURN              null

This output from VLD shows on line 4, two relevant opcodes: FE_RESET_R and FE_FETCH_R. Both of them can either followed by the next opcode on the list, or they can jump (->9) to opcode 9, which marks the end of the loop.

However from the diagram above, we don't see that path (the green one) being taken. Only the two paths that both continue with the next opcode (the red and blue lines). It seems that the emptiness of a normal array is checked by the FE_FETCH_R opcode.

Now the question is how to trigger the other path, so that 100% path (and branch) coverage can be reached.

This turns out harder than it is. I originally thought that this would be possible by trying to create a broken iterator — for example one where you inherit from an internal class with a custom one, and not call the original constructor. But this creates an exception which pre-empts the engine from even running the rest of the function.

The only situation where I managed to do this was by creating an iterator that after a correct initialisation, had no items to return. An example of such as case is a DatePeriod iterator where the start date of the iterator is behind the end date:

$i1 = new DatePeriod(
    new DateTimeImmutable("2025-01-14"),
    DateInterval::createFromDateString("+1 day"),
    new DateTimeImmutable("2025-01-01")
);

I had to change the definition of showLanguages too so that it accepts DatePeriod besides just array. But with that done, this specific iterator now lights up the green path:

There is currently an open bug in Xdebug's issue tracker to merge the branch analysis information for the two subsequent opcodes (FE_RESET_R and FE_FETCH_R).

I think I will now rather hide the jump away from the FE_RESET_R (and FE_RESET_RW) opcode.

But at last I now have an explanation as to where this phantom path came from.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Xdebug Update: December 2024 8 Jan 1:10 AM (9 months ago)

Xdebug Update: December 2024

Wednesday, January 8th 2025, 10:10 GMT
London, UK

In this monthly update I explain what happened with Xdebug development.

GitHub and Pro/Business supporters will get it earlier, around the first of each month.

In the last month, I spend around 8 hours on Xdebug, with 22 hours funded.

Business Supporter Scheme and Funding

On GitHub sponsors, I am currently 40% towards my $2,500 per month goal, which is set to allow continued maintenance of Xdebug.

If you are leading a team or company, then it is also possible to support Xdebug through a subscription.

In the last month, no new business supporters signed up.

Besides business support, I also maintain a Patreon page, a profile on GitHub sponsors, as well as an OpenCollective organisation.

If you want to contribute to specific projects, you can find those on the Projects page.

Xdebug Cloud

Xdebug Cloud is the Proxy As A Service platform to allow for debugging in more scenarios, where it is hard, or impossible, to have Xdebug make a connection to the IDE. It is continuing to operate as Beta release.

Packages start at £49/month, and I have recently introduced a package for larger companies. This has a larger initial set of tokens, and discounted extra tokens.

If you want to be kept up to date with Xdebug Cloud, please sign up to the mailinglist, which I will use to send out an update not more than once a month.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Le Vieux Comptoir 27 Dec 2024 7:30 AM (10 months ago)

Friday Night Dinner: Le Vieux Comptoir

Situated at the end of a side-street of Marylebone High Street, Le Vieux Comptoir has been serving as a wine shop and restaurant for more than a decade. We first went many years ago, and have returned several times, with friends and family, as well as just having dinner a deux. However, we've not been recently, and so hadn't written a review. We also fancied seeing if it was still as good as we remembered. .

In the run-up to Christmas, we decided to do a re-visit to Le Vieux Comptoir. Upstairs is the wine shop, where you can get a bottle to take down into the restaurant if you wish. But you can also select your wine for dinner downstairs in the cosy restaurant. I felt like a little celebration was in order, so we started with a lovely glass of Cremant, served with some bread and homemade butter, while waiting for our starters.

For the starters, my wife went with the cheeseboard; two slices of four different cheeses, served at the perfect temperature, allowing the flavour of the cheese to come through. I selected the snails in parsley and garlic butter. I have always found snails interesting enough, but would only ever have it at a French place.

For our mains I ordered the confit duck. Sometimes that is exactly was looking forwards to, and in this case the whole week leading up to our visit. I remembered it being excellent on previous visits, and this time was no exception. It was served with roast potatoes, and cabbage leaves with a dressing. The same side dishes accompanied my wife's onglet steak. This was served medium rare, and was splendid. With our mains, we also enjoyed a glass each of a full-bodied red wine.

We still had some space for pudding, and we enjoyed a sharing platter of enormous profiteroles while sipping on a Sauternes dessert wine. It was a great meal, and quite indulgent. Something to do once in a while!

Snails
Snails
1 / 5
Cheese Board
Cheese Board
2 / 5
Confit de Canard with Sides
Confit de Canard with Sides
3 / 5
Onglet Steak
Onglet Steak
4 / 5
Mountain of Profiterols
Mountain of Profiterols
5 / 5

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Broken Eggs 20 Dec 2024 7:30 AM (10 months ago)

Friday Night Dinner: Broken Eggs

A restaurant that focuses on one specific thing, Spanish tortillas. They come in different flavours. From classic (egg and triple cooked potatoes), to courgette flavoured ones, and Jamon Iberico. That, and a few starters and drinks makes for a unique and rustic place, especially when it is cold and windy outside.

We visited Broken Eggs on such a stormy and slightly damp Friday evening, just before a storm would arrive. The restaurant is cosy with a homely atmosphere, with friendly and welcoming staff. Spanish classics on the radio.

We had some Padron peppers and cheese croquettes to start. As is common, the croquettes came as three pieces. Which I always find odd, because many bookings are likely to be couples, and dividing three portions among two can be tricky. However, they kindly offered to produce four. This was good news, because they were excellent, and my wife said she wouldn't have wanted the third one to share.

We however, did share the tortillas. Instead of picking a big one to share, we chose two different flavours to split between us. One with courgettes, and the second one with Jamon Iberico. They were both flavourful, and slightly gooey in the middle. Perfect for scraping up with some bread at the end.

With our starters and tortillas, we also had a bottle of their house red. It wasn't anything special, but on a cold, rainy, and windy evening that it was, it was the perfect accompaniment to our meal.

It was a relaxed evening out, with good rustic food, for a reasonable price.

Padron Peppers
Padron Peppers
1 / 4
Cheese Croquettes
Cheese Croquettes
2 / 4
Courgette Tortilla
Courgette Tortilla
3 / 4
Jamon Iberico Tortilla
Jamon Iberico Tortilla
4 / 4

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Demartino 13 Dec 2024 7:30 AM (10 months ago)

Friday Night Dinner: Demartino

Styling themselves as a New York neighbourhood Italian restaurant, Demartino is situated on Great Portland Street. When we visited it was busy, with elderly couples, a bunch of friends, and a birthday party. Very much a low-key neighbourhood restaurant. Unfortunately, that meant we had a small table right in the middle of the restaurant, which meant we were on something of a busy thoroughfare with serving staff and fellow diners moving around close to us.

For our starters we picked courgette fries and arancini, or rather, one big arancino. The courgette fries were nicely seasoned, and were served in a cone — just like Belgian fries. The big arancino was served in a spicy sauce, that had a very nice strong tomato flavour.

As her main, my wife selected a ravioli filled with ricotta and spinach, served in a lovely butter and sage sauce. I had the wild mushroom risotto, with the rice just a little al dente. A decent sprinkling of Parmesan added the right level of cheesiness.

We had a lovely bottle of red wine to go with our excellent meal. The service at Demartino was good, and the atmosphere lively.

The only downside to our visit was the position of the table we were seated at, so if we returned we'd try to be seated elsewhere (almost anywhere else).

Courgette Fries
Courgette Fries
1 / 4
Arancino
Arancino
2 / 4
Wild Mushroom Risotto
Wild Mushroom Risotto
3 / 4
Spinach and Ricotta Ravioli
Spinach and Ricotta Ravioli
4 / 4

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Xdebug Update: November 2024 8 Dec 2024 1:10 AM (10 months ago)

Xdebug Update: November 2024

Sunday, December 8th 2024, 10:10 GMT
London, UK

In this monthly update I explain what happened with Xdebug development

GitHub and Pro/Business supporters will get it earlier, around the first of each month.

On GitHub sponsors, I am currently 43% towards my $2,500 per month goal, which is set to allow continued maintenance of Xdebug.

If you are leading a team or company, then it is also possible to support Xdebug through a subscription.

In the last month, I spend around 10 hours on Xdebug, with 22 hours funded.

Xdebug Videos

I have created no new Xdebug videos in the last month, but there is a new video in my "Writing Extensions" series.

All Xdebug videos can be watched on my channel.

If you have any suggestions, feel free to reach out to me on Mastodon or via email.

Business Supporter Scheme and Funding

In the last month, no new business supporters signed up.

Besides business support, I also maintain a Patreon page, a profile on GitHub sponsors, as well as an OpenCollective organisation.

If you want to contribute to specific projects, you can find those on the Projects page.

Xdebug Cloud

Xdebug Cloud is the Proxy As A Service platform to allow for debugging in more scenarios, where it is hard, or impossible, to have Xdebug make a connection to the IDE. It is continuing to operate as Beta release.

Packages start at £49/month, and I have recently introduced a package for larger companies. This has a larger initial set of tokens, and discounted extra tokens.

If you want to be kept up to date with Xdebug Cloud, please sign up to the mailinglist, which I will use to send out an update not more than once a month.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Het Schilderij 6 Dec 2024 7:30 AM (10 months ago)

Friday Night Dinner: Het Schilderij

Friday, December 6th 2024, 16:30 GMT
Harderwijkerweg 3, 6952 AB Dieren, Netherlands
Starters: €5.95-€13.50; Mains: €20.95-€29.75; Wines from €23
by Derick Rethans

Het Schilderij (The Painting) is a gastropub in the small village of Dieren, where I grew up. The pub has been around for as long as I can remember, and I've had many a merry evening there in my youth. But it has evolved, and now has the feel of an English Gastropub, with a decent (although hardly changing) menu, with seasonal additions. They also have a great selection of interesting beers. It is a spot we frequently eat in as well, when we visit my parents.

In that context, we found ourselves here on a cold and rainy autumn evening. As a starter we shared an "Oerbrood", a rustic loaf, with butter, (very garlicky) butter, and some tapenade which worked well with a glass of Hertog Jan's Grand Prestige beer.

In autumn, it is quite common to see game on restaurant menus, and Het Schilderij is no exception. My wife and I both selected the venison steak, served with a thick wine jus. The venison was still moist and a little pink in the middle, with a nice grill-seared outside — adding a bit of colour and flavour. My parents both had wild boar loin which looked similarly delicious.

Accompaniments are shared with the table, and the chips, pan fried potatoes, and brussels sprouts with lardons (a seasonal addition) worked very well with our choices. Although the sprouts aren't everyone's favourite, I thought they were cooked just right.

We had a lovely evening, with enjoyable food and drink in a good atmosphere. We'll certainly be back.

Oerbrood with Butters and Tapenade
Oerbrood with Butters and Tapenade
1 / 3
Venison Steak
Venison Steak
2 / 3
Accompaniments
Accompaniments
3 / 3

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Butcher's Tap and Grill 29 Nov 2024 7:30 AM (10 months ago)

Friday Night Dinner: Butcher's Tap and Grill

Friday, November 29th 2024, 16:30 GMT
25-27 Tryon Street, London SW3 3LG
Starters: £9.5; Burgers: £15-£18.50; Beef: £16-£108; Other: £19.50-£42.50; Wines from £42
by Derick Rethans

For our tenth anniversary we made a trip to Marlow, a small town on the banks of the river Thames. The town features a suite of gastronomic pleasures. The two Michelin starred restaurant and Michelin starred pubs are both owned and operated by chef Tom Kerridge, which made for an amazing gastronomic weekend getaway. The getaway package also included a voucher for his Butcher's Tap and Grill, which is both a butcher and… a grill. We got a nice haul of barbecue meat from there!

Now, a few months later, we had something else to celebrate, and in that time, a new Butcher's Tap and Grill has opened in Chelsea, in London.

Although they do plenty of simpler (and cheaper dishes), we selected the Beef Wellington for two. We were informed in advance that it would take some time for it to be prepared. This gave us an excellent opportunity to enjoy a cocktail. I had an Aged Beef Fat Old Fashioned, and my wife a Butcher's Bloody Mary. Both excellently made.

The Beef Wellington was served a while later, and was served with green beans and some mashed potato. The latter could have been a bit more generous. There was also a charred onion, and fried onions on a crispy salad leaf. The Wellington itself was splendid. Nicely pink in the middle, surrounded by a moist mushroom duxelles, and covered with a perfectly crisp pastry — no soggy bottom! The dish was finished with a red wine sauce.

With dinner, we enjoyed a bottle of Bedoba, a Georgian red wine. We later found out it's the same wine we had at the Hand and Flowers in Marlow!

We were still a bit peckish and finished our meal with a pudding. My wife had a sticky toffee pudding, and I enjoyed an apple crumble.

The Butcher's Tap and Grill is a lovely pub, with great food, although it is the usual pub fare (the Sunday roast looked great). They also serve great burgers and speciality cuts. A lot of choice. It isn't a cheap place, but we thought quite worth the price, and are already thinking of a reason to return!

An Old Fashioned and a Bloody Mary
An Old Fashioned and a Bloody Mary
1 / 4
Beef Wellington, with trimmings
Beef Wellington, with trimmings
2 / 4
Sticky Toffee Pudding
Sticky Toffee Pudding
3 / 4
Apple Crumble
Apple Crumble
4 / 4

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: St. JOHN 8 Nov 2024 7:30 AM (11 months ago)

Friday Night Dinner: St. JOHN

Friday, November 8th 2024, 16:30 GMT
98 Marylebone Lane, London W1U 2QA
Starters: £5-£14; Small Plates: £10-16.80; Large Plates: £24-£35; Wines from £36
by Morag Rethans

We went to St. JOHN on a chilly evening. We were sat upstairs directly in front of the door, and with the aircon also turned on it was verging on cold. I arrived a bit early and noticed people dining, whilst wearing their outdoor coats.

St. John, like most restaurants in London these days, operates on a “sharing concept” which is fine, but doesn't work for all foods, like soup for example.

We shared the venison rissole, which came with an extremely punchy aioli — a bit heavy on the raw garlic to be honest — which was nice. I then had a delicious artichoke soup and my husband enjoyed the smoked mackerel, with its bones in place, as starters. The smoked mackerel was served with some lemon herbed potatoes, which complemented the flavour of the fish well.

My main, the middle white pork, was underwhelming, with something of the school dinner about it. The pork was very dry and served on a cold plate with carrots that were well on the overcooked side. For some reason the entire dish was also drowned in what appeared to be gravy and oil, which didn't improve or moisten the dry pork, it just made it tepid and greasy. My husband's hake dish was better, served with leeks of just the right firmness, and a not-so-garlicky mayonnaise.

We had a bottle of the house white wine which worked well with all the dishes.

The mains took forever to turn up. The serving staff apologised for this, and offered us a bag of their madeleines as recompense, which we took away. Those fresh warm madeleines were absolutely delicious, and by far the best thing served. We'd go back for those, and the soup… But not for the mains.

Venison Rissole with Aioli
Venison Rissole with Aioli
1 / 5
Smoked Mackerel
Smoked Mackerel
2 / 5
Artichoke Soup
Artichoke Soup
3 / 5
Middle White Pork
Middle White Pork
4 / 5
Hake with Leeks
Hake with Leeks
5 / 5

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Xdebug Update: October 2024 5 Nov 2024 1:10 AM (11 months ago)

Xdebug Update: October 2024

Tuesday, November 5th 2024, 10:10 GMT
London, UK

In this monthly update I explain what happened with Xdebug development

GitHub and Pro/Business supporters will get it earlier, around the first of each month.

On GitHub sponsors, I am currently 31% towards my $2,500 per month goal, which is set to allow continued maintenance of Xdebug. This is again less than last month.

If you are leading a team or company, then it is also possible to support Xdebug through a subscription.

In the last month, I spend around 10 hours on Xdebug, with 19 hours funded. I also spent 16 hours on the Native Path Mapping project.

Native Xdebug Path Mapping

I also continued with the Native Xdebug Path Mapping project.

This is a separately funded project, I don't classify the hours that I worked on this in "Xdebug Hours". I also publish a separate report on the project page.

In short, I have finished the parser, and also made some performance improvements in the way I store data internally. I dive into the depths of that in its dedicated report.

I am now working on integrating it into Xdebug, and realised that there is one thing that I had forgotten to add, and that is a reverse mapping. The algorithms can only map remote a file/line to a local file/line, but in order to be able for an IDE to set a breakpoint on a local file line (which is how you would edit it), it also needs to have a reverse map.

By the end of this month I hope to have a working version to try out, but it will likely not be in the Xdebug 3.4 release, as that has to be released near when PHP 8.4 is released.

Business Supporter Scheme and Funding

In the last month, no new business supporters signed up.

Besides business support, I also maintain a Patreon page, a profile on GitHub sponsors, as well as an OpenCollective organisation.

If you want to contribute to specific projects, you can find those on the Projects page.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Café Deco 1 Nov 2024 8:30 AM (11 months ago)

Friday Night Dinner: Café Deco

Friday, November 1st 2024, 16:30 GMT
43 Store Street, London WC1E 7DB
Snacks: £4.5-£12; Starters: £10-£19; Mains: £23-£37; Wines: £39+
by Derick Rethans

We were supposed to visit Café Deco together last November, but then I ended up in A&E for the evening, with my wife going on her own. She liked it well enough then to make a repeat visit for the two of us.

I arrived a little before her, and I was sat in a cosy and small room in the back, with room for barely 6 patrons. Café Deco does modern British cuisine, with some forays into French and Indian styles.

For her starter, my wife chose the charcuterie (from the snack section), and I picked the Mulligatawny (from the starter section). They slightly forgot that they were supposed to come together, but that was sorted out soon enough. The soup was thick with lentils and spices, and had a good kick to it. The charcuterie was flavourful too.

For her main, my wife picked a cicoria, carrot, and cannellini bean stew. The flavours were deep, the carrots a little crunchy, and the beans nice and buttery. I selected the pork chop as my main. I don't really often eat pork, but on this chilly autumn evening it felt the right choice for the moment. It was served with a pumpkin and radicchio gratin. The chop was nicely seasoned, and the gratin of roasted vegetables were a nice and slightly sweet accompaniment.

With our meal we also enjoyed a lovely bottle of a Spanish Granache, and created little sparkles on the tongue.

And then it was dessert time, for which we both had a scoop of the mint choc chip ice cream, and a dessert wine to round out the evening.

Café Deco is on the up market side, and not particularly cheap. But it was a very nice meal indeed.

Charcuterie
Charcuterie
1 / 5
Mullagatawny
Mullagatawny
2 / 5
Cannelli Bean Stew
Cannelli Bean Stew
3 / 5
Pork Chop with Roasted Veg
Pork Chop with Roasted Veg
4 / 5
Choc Mint Icecream
Choc Mint Icecream
5 / 5

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Spagnoletti 25 Oct 2024 9:30 AM (12 months ago)

Friday Night Dinner: Spagnoletti

Friday, October 25th 2024, 18:30 BST
23 Euston Road, London NW1 2SD
Snacks: £5.5; Small dishes: £6-£13; Mains: £19-£40
by Derick Rethans

Spagnoletti is an Italian style restaurant operating with a sharing dishes concept. We visited this in the middle of October, when it was reasonably busy.

Just like other sharing dishes places, they recommend a certain number of plates per person. In Spagnoletti's case, three to four. As part of this concept, most of the dishes also come at random moments.

We weren't especially hungry, and the waiter was surprised that we did not order the recommended amount of plates. However, for our starters we ordered the wild mushrooms and truffle arancini, with a whipped goat's cheese, and the suckling pig and black pudding croquettes. The arancini stood out. They had a perfectly crisp and seasoned coating and a smooth mushroom filling, and the whipped goats cheese was both delicious alone and as an accompaniment to the arancini. The croquettes sadly were a little underwhelming, both in terms of flavour and the amount of filling.

For her main course, my wife picked the burrata, which was served with butternut squash and chicory leaves. I chose the risotto with a pulled shin of beef and bone marrow. The burrata showed up first, and we soon realised that the warm risotto wasn't coming until the cold burrata had been eaten. The burrata with butternut squash, with a few bits of mandarin was a good combination, with the slightly bitter chicory rounding it off. The risotto, once it arrived half an hour later, was quite wet, with the rice on top of the pulled beef and bone marrow, and had an odd “gravy” sitting with the meat. It had depth, but it was a little strange to eat… and overall far too wet

Because the burrata came before the risotto, we didn't really get to eat at the same time, even though we had mentioned that these would be our main dishes. Awkward. Luckily, they did have a couple of interesting beers from the Portobello microbrewery that we enjoyed during the waiting time.

Sometimes, a place that does "sharing dishes" works fine, but in this case, it fell a little flat on its face.

Wild Mushrooms Arancini
Wild Mushrooms Arancini
1 / 4
Suckling Pig Croquettes
Suckling Pig Croquettes
2 / 4
Burrata with Butternut Squash
Burrata with Butternut Squash
3 / 4
Risotto with Beef Shin
Risotto with Beef Shin
4 / 4

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Bubala 11 Oct 2024 9:30 AM (last year)

Friday Night Dinner: Bubala

We visited Bubala, a vegetarian and vegan restaurant, on a warm-ish Friday night in October.

Bubala is located very centrally, just a few minutes walk from Oxford Street, Regent Street, and just around the corner from Carnaby Street.

The restaurant felt cosy inside, although the lighting was a bit on the dim side. It was fairly busy when we arrived. We were seated quickly, and shortly afterwards the server arrived with menus and complimentary still or sparkling water.

Bubala is a sharing plates type restaurant, serving a Mediterranean inspired cuisine. They had vegetarian or vegan set menus available for £45/person, but we opted to pick from the à la carte menu. We ordered flatbreads, hummus with chilli oil, baba ganoush, sweetcorn, halloumi with a fennel honey crust, and (surprisingly spicy) spanked cucumbers. To drink we enjoyed a bottle of white wine.

The food was delivered fairly quickly, but this led to an issue as the table wasn't really big enough for more than a couple of the sharing dishes, which were all quite large and flat. I ended up having to put my cutlery on the bench seat beside me, in order to have enough space for the water and wine glasses. My husband juggled cutlery.

Overall the food was tasty, and service good, and we'd return with veggie friends. If we returned we would consider ordering only a couple of dishes, and then ordering more when those were eaten, due to the table size. We ordered an extra flatbread and this arrived hot from the grill within a couple of minutes.

Flatbread
Flatbread
1 / 4
Hummus
Hummus
2 / 4
Sweetcorn
Sweetcorn
3 / 4
Smacked Cucumbers
Smacked Cucumbers
4 / 4

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Myrtle 20 Sep 2024 9:30 AM (last year)

Friday Night Dinner: Myrtle

From the archive: We visited Myrtle in December 2022

We had a wonderful tasting menu with accompanying wine pairing to celebrate my birthday (21 again). Myrtle specialises in using Irish ingredients, and overall the presentation was excellent, without being pretentious, the ingredients and the food in general was definitely the star.

I don’t think they have a Michelin star yet, but it wouldn't surprise me if they’d get one soon. The location was a bit odd, as it was very far away from any sort of public transport or major town centre. It doesn't matter much for us, as we’re not the type of people that like our valet parking.

The food itself, again, was superb. I particularly liked their additional black pudding starter, made with beef black pudding, instead of the traditional pork version. All the other dishes were great too. My favourite was possibly the sea bass with potato scales, and tasty sauce.

As with a tasting menu, we also went with the wine pairing, putting us back £167/person—excluding service charge (12.5%).

Of course, the reason we ended up here was due to Anna's (the head/executive chef) appearance as a judge on Master Chef.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Chez Tony 13 Sep 2024 9:30 AM (last year)

Friday Night Dinner: Chez Tony

We were in Paris for the Paralympics, and on our first night we had time for a real meal. My wife suggested this restaurant as she had been here many times when visiting Paris for work. I had heard a lot about Chez Tony already.

When we arrived, we found the place empty inside. Tony came over from the terrace across the street nearly immediately and recommended that we sat outside, as the weather was great, and it was going to be stuffy inside. He was totally right after we (briefly) tried sitting inside first.

The menu is a blackboard that gets put on a seat close to you. They don't really do starters, and henceforth their menu is dinner. From snails and foie gras, via a beef tartare and cheese burger, the menu eventually leads to pieces of beef: filet mignon de porc (pork tenderloin), and escalope de veau. There is even fish and chips. My wife usually enjoys the cheese burger on her work trips.

The "piece de boucher" (butchers piece of beef) seemed the most appealing to us, and we ordered one each served medium rare. While dinner was being prepared our chosen carafe of a nice Côte du Rhône. I can't remember which one, but it was delicious, went well with our steaks, and it was empty by the time we finished our mains.

The steak was cooked perfectly medium rare, and the fries were nice and crispy. The peppercorn sauce had just the right amount of pepper to it.

We did find a little space for dessert, and shared a crème brûlée. Tony suggested, after tapping it with a fork, to wait a for minutes before enjoying it, so that the crème had some time to set. By this time, the restaurant had also filled up, and it was full when we left. Mostly locals too!

This is not a fancy restaurant, but one that does what it does well. No fuss, no snobby waiters, but good French cooking; and with a good ambiance.

The Restaurant
The Restaurant
1 / 3
Piece de Boucher
Piece de Boucher
2 / 3
Crême Brûlée
Crême Brûlée
3 / 3

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Cafe Pacifico 6 Sep 2024 9:30 AM (last year)

Friday Night Dinner: Cafe Pacifico

Friday, September 6th 2024, 18:30 BST
5 Langley Street, Covent Garden, London WC2H 9JA
Starters: £8.50-£12.95; Mains: £15.95-£26; Dessert: £4.75-£7.50
by Derick Rethans

We had visited Cafe Pacifico a few times in the past already, but we hadn't been back for a while, nor written up a review.

As it was a warm day, having Mexican food seemed like a good idea, and starting with a large margarita an even better one.

Cafe Pacifico has fairly standard items on their menu, not nearly as adventurous as Polanco where we dined a few weeks ago. We started our meal to share a couple of Empanadas, with a flavourful filling and a subtle chipotle salsa on the side.

By now our margarita was empty, and we ordered another one while waiting for our main, for which my wife picked the Chicken Chimichanga with black beans. A lovely dollop of guacamole and cream was perched on top. I chose the Sea Bass and King Prawn Tacos. These came in "tempura style" (i.e.: battered and fried), and were served with grilled pineapple, some red onions, and a slightly spicy mayonnaise.

After our mains, we were eventually given the dessert menu. We were quite eying up the churros, but it took so long for staff to return that by that time we had changed our mind and decided not to have any.

In my opinion, there could have been a little more spice and flavour in most of the dishes, and service wasn't the speediest. But it's still a reasonable option for a meal after a hard day of shopping in Covent Garden. We would also have benefitted from ordering a bottle of margaritas, instead of 4 individual large glasses.

Classic Margaritas
Classic Margaritas
1 / 4
Crispy Empenadas
Crispy Empenadas
2 / 4
Chicken Chimichanga with Black Beans
Chicken Chimichanga with Black Beans
3 / 4
Sea Bass and King Prawn Tacos
Sea Bass and King Prawn Tacos
4 / 4

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Xdebug Update: August 2024 3 Sep 2024 5:35 AM (last year)

Xdebug Update: August 2024

Tuesday, September 3rd 2024, 14:35 BST
London, UK

In this monthly update I explain what happened with Xdebug development

GitHub and Pro/Business supporters will get it earlier, around the first of each month.

On GitHub sponsors, I am currently 32% towards my $2,500 per month goal, which is set to allow continued maintenance of Xdebug. This is again less than last month.

If you are leading a team or company, then it is also possible to support Xdebug through a subscription.

In the last month, I spend around 8 hours on Xdebug, with 20 hours funded. I also spent 8.5 hours on the Native Path Mapping project.

PHP 8.4

The large change for the exit-as-a-function proposal has been merged into PHP, which means I had to spend some time finishing and tidying up a Pull Request that Tim Düsterhus had provided.

I also improved Xdebug's CI so that it can run as a separate user.

Right now, there don't seem to be any outstanding issues with PHP 8.4 so I will soon create another alpha (or beta) release so that you can try out Xdebug with the latest beta versions of PHP 8.4's.

Native Xdebug Path Mapping

I continued with the Native Xdebug Path Mapping project.

This is a separately funded project, I don't classify the hours that I worked on this in "Xdebug Hours". I also publish a separate report on the project page.

Again, I am including it here:

I continued with the parser to parse the path mapping files. The parsing is now finished, although I do still need to modify how the parsed information is stored. Right now, the data structures are not optimised to be able to do line mapping as well.

Because the parser parsers user input, it is important that the parser is rubust. It should be able to handle correctly formatted files, but also files with errors.

It is not always possible to come up with all the failure situations by thinking, and therefore a common technique is to use a fuzzer. For PHP there is Infection PHP for mutation testing for example. For C, and C++, a commonly used tool is AFL++. This provides a compiler wrapper and a run-time to fuzz the input to your application. You first provide a template, which it then modifies to try to break your code.

The template that I used in this case was a minimal map file:

remote_prefix: /usr/local/www
local_prefix: /home/derick/project
/projects/example.php:5-17 = /example.php:8
/example.php:5-17 = /example.php:8-20
/example.php:17 = /example.php:20
/projects/php-web/ = /php-web/

In addition to the template you also need to provide a shim — the program that in my case takes the argument given to it and then parses that as a file. The AFL++ tool's compiler wrapper adds some magic to it to be able to catch errors.

When you then run the fuzzer, such as with:

AFL_SKIP_CPUFREQ=1 afl-fuzz -b 7 -i fuzz-seeds -o fuzz-output -- ./afl-test @@

It then runs your program with your template files (in fuzz-seeds in my example). And then also with loads of variants.

The fuzzer found a few errors in my parser, which ended up crashing it. One such examples that I hadn't thought of is of a line starting with a =:

remote_prefix: /usr/local/www
local_prefix: /home/derick/project
=/example.php:42-5 = /example.php

You can find the other cases it found in a dedicated test file.

In September I hope to finish the parser (by storing things more efficiently internally) as well as creating APIs to do the mapping.

Business Supporter Scheme and Funding

In the last month, no new business supporters signed up.

Besides business support, I also maintain a Patreon page, a profile on GitHub sponsors, as well as an OpenCollective organisation.

If you want to contribute to specific projects, you can find those on the Projects page.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Brother Marcus 30 Aug 2024 9:30 AM (last year)

Friday Night Dinner: Brother Marcus

Friday, August 30th 2024, 18:30 BST
1-3 Pelham Street, South Kensington, London SW7 2ND
Snacks: £2.80-£7.20; Mezze: £8.20-£18.20; Wines: £29-£56; Cocktails: £12.50
by Derick Rethans

Brother Marcus has a few different locations. The one we visited is right beside South Kensington station. It's a light filled comfy restaurant, specialising in middle eastern style sharing platters.

We like eating on the earlier side, which meant that we could benefit from the "pre-show set menu". This consists of a "rip and dip platter", consisting of three dips, olives, and fluffy pittas; and then a veggie and meat mezze per person.

The dips platter arrived swiftly, with our choice of roasted beetroot hummus, baba ghanoush and taramasalata. All the dips were delicious, and the pittas were indeed fluffy. A bottle of Kokotos wine showed up soon after, although I probably should put bottle in double quotes, as it was filled from a tap. That didn't do anything against its tastiness though.

As is usual in restaurants like this, everything comes when it's ready, so our table was soon overflowing with dishes. The pan-fried halloumi was sweet and sticky with a watermelon jam. The crispy aubergine skewer, crispy, but not dry and served with a creamy labneh sprinkled with grape molasses. The calamari had a well-seasoned coating, and was served with a green aioli. A little sprinkling of chilli added a little kick. And finally, the moist and well-spiced lamb koftas came on a smooth bed of aubergine begendi (béchamel sauce).

Close to many of London's top museums, the pre-show menu was excellent value at £25 per person. We can recommend this modern place, which after a day out shuffling around old museum pieces will certainly fill your belly.

Rip and Dips Platter
Rip and Dips Platter
1 / 5
Pan-fried Halloumi
Pan-fried Halloumi
2 / 5
Crispy Aubergine
Crispy Aubergine
3 / 5
Crispy Calamari
Crispy Calamari
4 / 5
Lamb Koftas
Lamb Koftas
5 / 5

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Mountain 23 Aug 2024 9:30 AM (last year)

Friday Night Dinner: Mountain

Friday, August 23rd 2024, 18:30 BST
16-18 Beak Street, London W1F 9RD
Starters: £4.80-£18.50; Small(er) Plates: £14.80-£26; Mains: £36-£95; Wines: from £34
by Derick Rethans

Another hip restaurant, one, that recently had acquired a Michelin star, although they don't seem to mention that on their website. There was however a difference in prices between booking and eating.

When we arrived, we were explained that the menu consists of three sections: a selection of starters, a selection of smaller plates, and mains. They recommended getting a starter and small place each, and a main to share. We have heard this spiel before, and knew it was going to be too much (quantity of food and cost).

We did our own thing, and had a starter and small plate each instead.

For our starters, my wife chose the cured dairy beef, lovely thinly sliced meat with some almond shavings. It was perfectly moist with an earthy flavour. I picked the anchovies and cheese, which were served on sourdough bread. The cheese was whipped, with some oil sprinkled over it. As you expect from anchovies, they were salty, which the whipped cheese was a perfect accompaniment for.

As my main course I selected a mackerel with grilled peas. The mackerel came wholly grilled on a bed of caramelised chopped onions, and the aforementioned grilled peas. There was a sprinkling of herbs on top as well, to make the plate less beige. The combination of the meaty fish and caramelised onions worked great. My wife opted for an omelette, stuffed with girolle mushrooms. The omelette was fluffy, wonderfully moist, and filling!

With our meal, we also enjoyed a lovely bottle of Psarades, a Cretian white wine.

The food at Mountain was great, and the atmosphere inviting with a large open kitchen. Do make sure to request a table on the ground floor though. It is a bit on the pricier side, especially if you also share (or not) a main as well.

Cured Dairy Beef
Cured Dairy Beef
1 / 4
Anchovies and Cheese
Anchovies and Cheese
2 / 4
Girolle Ommelette
Girolle Ommelette
3 / 4
Mackerel
Mackerel
4 / 4

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Polanco 9 Aug 2024 9:30 AM (last year)

Friday Night Dinner: Polanco

Friday, August 9th 2024, 18:30 BST
43 Chamberlayne Road, London NW10 3NB, United Kingdom
Tacos/Small Plates: £7-£12; Cocktails: £10-£12; Wines: £23-£36
by Derick Rethans

We have been to this location before, back when it was called Morso, which has now moved to St. John's Wood. There are a few other restaurants next door, which we might also try at some point.

It was a very warm evening, and my wife had arrived much earlier than our table was booked for. She'd ordered a margarita to spend the time, and "convinced" me to get one too. One showed up right when I entered the cosy restaurant. We were on the earlier side and it was mostly empty.

Polanco serves contemporary Mexican food, and their menu consists of tacos and small plates to share. We ordered baja fish tacos, a quesadilla rustica, green chicken enchiladas, and tortilla chips with guacamole to enjoy while we were waiting.

With our food, we also got a bottle of white wine. Usually we would probably have had beer, but their beer selection was really only the boring macro lagers.

The guacamole was well-made, and a little spicy. Smooth, but still with some crunchy bits. The green chicken enchiladas were doused in a slightly spicy green sauce. A dollop of cream on top smoothed things out. My favourite were the fish tacos — crispy fried fish, served with chipotle mayonnaise and habanero sauce, and topped with pickled cabbage. The rustic part of the quesadilla consisted of molten cheese, shopped cherry tomatoes, a habanero sauce, and some cream.

All the dishes were a little spicy, but not so much that it overpowered. By the time we were done with our meal, the restaurant was buzzing with nearly every table occupied.

Tortilla Chips with Guacamole
Tortilla Chips with Guacamole
1 / 4
Green Chicken Enchiladas
Green Chicken Enchiladas
2 / 4
Fish Tacos with Pickled Cabbage
Fish Tacos with Pickled Cabbage
3 / 4
Quesadilla Rustica
Quesadilla Rustica
4 / 4

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Xdebug Update: July 2024 7 Aug 2024 9:10 AM (last year)

Xdebug Update: July 2024

Wednesday, August 7th 2024, 18:10 BST
London, UK

In this monthly update I explain what happened with Xdebug development in the past month. These are normally published on the first Tuesday on or after the 5th of each month.

GitHub and Pro/Business supporters will get it earlier, around the first of each month.

On GitHub sponsors, I am currently 42% towards my $2,500 per month goal, which is set to allow continued maintenance of Xdebug. This is less than last month.

If you are leading a team or company, then it is also possible to support Xdebug through a subscription.

In the last month, I spend around 15 hours on Xdebug, with 21 hours funded. I also spent 6 hours on the Native Path Mapping project.

PHP 8.4

I spent some time making sure that Xdebug will be ready for PHP 8.4, once that comes out later in the year. There are always some incompatibilities, such as the new frameless calls and some deprecations.

I also did a deep dive into supporting a potential large change into the way PHP handles the exit keyword. There is a proposal to change that from a language instruction to an actual function, but this impacts Xdebug fairly significantly — it uses the instruction for path and branch analysis, and to make sure profiling files get stored on disk in full. At the moment, it is unsure whether this change will be adopted.

Beyond preparatory work for PHP 8.4, I also spend some time on improving the out-of-band socket communication support to make it easier for IDEs to use. This work will continue to be ongoing for a while.

Native Xdebug Path Mapping

I have started on the Native Xdebug Path Mapping project.

As this is a separately funded project, I don't classify the hours that I worked on this in "Xdebug Hours". I also publish a separate report on the project page.

As an exception, I am including it here:

In this first month, or rather, the last week of July, I have been working on setting up a testing framework for the parser. Previously Xdebug only had tests in PHPT form, PHP's standard for testing syntax and functions. However, this is rather more an integration test framework, as it compares the output of a script with an expected output.

For low-level features, such as testing the implementation of the parser that parses the path mapping files, PHPT tests are not suitable. Instead, the testing framework tests the return values and generated structures directly, without PHP having to be involved. The CppUTest framework that I use for this, is much more similar to PHPUnit. It is also a framework that I have used for testing timelib, the library that powers PHP and MongoDB's date/time functionality.

Beyond the testing framework, I have also made a start on the parser itself. It can currently parse the remote_prefix and local_prefix stanzas, as well as mapping lines, although it does not distinguish between directory maps, file maps, or line maps yet, nor does it apply the prefix stanzas yet.

Business Supporter Scheme and Funding

In the last month, one new business supporter signed up:

Besides business support, I also maintain a Patreon page, a profile on GitHub sponsors, as well as an OpenCollective organisation.

If you want to contribute to specific projects, you can find those on the Projects page.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Turmeric Kitchen 2 Aug 2024 9:30 AM (last year)

Friday Night Dinner: Turmeric Kitchen

On the hottest Friday of the year (so far) we found ourselves at Turmeric Kitchen. Situated inside The Chilworth Hotel, a stone throw away from Paddington station.

It was quite dark inside, with little natural light, and wood panelled walls. The decor is more fitting for a winter's meal than a bright summer's day.

The menu is fairly varied, with some traditional dishes such as Murgh Makhani (Butter Chicken) and Biryanis, but there are also some more interesting dishes — and an "around the world" section including burgers, fish and chips, and steak.

As a starter, we shared the Avocado Bombs, spicy smashed avocado with mustard seats and deep-fried, like bitterballen. They were served with a beetroot chutney and a pomegranate seed. A tasty appetiser.

As my main meal, my wife ordered the aforementioned Murgh Makhani, with some plain naans on the side. The curry was a little spicy, which I hadn't expected for a butter chicken. But it wasn't overpowering and left a nice warmth in the mouth. I opted for the Laal Maas, a slow cooked spicy lamb curry. I paired that with a pilau rice. The curry was tender and had just the right amount of heat.

Normally we would have had a beer with curry, but the selection was poor. There were only small bottles of macro brewery beers with ridiculous prices. We had a bottle of Sauvignon Blanc instead. A bit odd, but it worked fairly well.

To conclude our meal, we finished with a sorbet — my wife had the raspberry, and I had the mango. The serving (one scoop) was disappointingly small for the price.

After having refreshed, we went back outside into the heat for some exiting beers at "The Bear", a nearby pub.

Avocado Bombs
Avocado Bombs
1 / 4
Murgh Makhani
Murgh Makhani
2 / 4
Laal Maas
Laal Maas
3 / 4
Icecreams
Icecreams
4 / 4

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Vinum 26 Jul 2024 9:30 AM (last year)

Friday Night Dinner: Vinum

Friday, July 26th 2024, 18:30 BST
Rua do Agro 141 (Caves Graham's), 4400-003 Vila Nova de Gaia, Portugal
Starters: €8-€24; Mains: €22-€34; Dessert: €7-€15; Wines: €19-€1250
by Derick Rethans

After one of our entertainments, a tour and tasting of Graham's port wines, we had booked a table at Vinum. Situated at Graham's Port Lodge with magnificent views over Porto, the Douro river, and Vila Nova de Gaia. It had come recommended by a colleague.

First we were briefly seated outside for a drink with a great view, which was unexpected (and a little chilly). After this confusion was resolved, we were seated at a large table, in an airy and bright room, and the great view—they don't guarantee you get that though. It was also fairly quiet when we got there, at 18:30.

The restaurant also does a tasting menu (with wine pairing, if you desire), but we went à la carte again. We forwent our starter, and instead had four very plumb oysters.

As main course I selected the grilled tuna, which was wrapped in chard and slightly seared — which is how it is supposed to be. It came with a charred pepper and garlic mash. My wife picked the "Vace Velha" tataki, which was served with a roast potato and caramelised onions. The port lodge's owners also produce Duoro wines, so to go with our meal we selected a bottle of Altano Reserva 2021, a rich and complex white wine.

We still had some space for desserts, and my wife choose a baked peach with vanilla ice cream, and I had a pineapple dish. As we were in a port lodge, we paired this with a Graham's 20 years old Tawny, which was served in a gigantic 4.5l bottle. The tray that came on, also contained a port from 1882, but at €900 a glass, a little over budget.

The food was good, and the service excellent. The view magnificent, and the atmosphere relaxing. It was a "bit" of a hike up the hill, but certainly worth visiting — especially after also having done a tour of their warehouses.

Fat Oysters
Fat Oysters
1 / 6
Seared Tuna Wrapped in Chard
Seared Tuna Wrapped in Chard
2 / 6
Vace Velha Tataki
Vace Velha Tataki
3 / 6
Big Bottle of Graham's 20
Big Bottle of Graham's 20
4 / 6
Baked Peach with Vanilla Ice Cream
Baked Peach with Vanilla Ice Cream
5 / 6
Pineapple Many Ways
Pineapple Many Ways
6 / 6

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Apego 19 Jul 2024 9:30 AM (last year)

Friday Night Dinner: Apego

Friday, July 19th 2024, 18:30 BST
Rua de Santa Catarina 1198, 4000-457 Porto, Portugal
Starters: €28, Mains: €54, Wine €34 (4 glasses), Dessert + Digestive: €35
by Derick Rethans

We recently visited Porto in Northern Portugal, where we were also in need of dinner. A while away from the busy hubbub of the riverside and the touristic areas of the city, we found ourselves on an unremarkable street in front of Apego.

We were welcomed in, and seated on a nice table near the kitchen in the calm and rustic restaurant. You can either choose a tasting menu of 5 courses, or eat à la carte. Five courses seemed a bit much, and we wanted to select our own courses, so we picked the latter option.

The menu is not very extensive, but each course did come with wine recommendations. As a started, I picked the Atlantic bonito crudo on a bed of beetroot and crème fraîche with a seeded cracker. My wife decided on the corn empanada with mushrooms, cucumber, and lime. Usually I have a red wine, and my wife a white, but in this case the recommended wines were of the opposite colour. The red to go with my wife's empanada wasn't totally fitting, and she liked my white more.

This meant that for our main courses she disregarded the recommendation and instead had the wine I had with my starter. As main course, she selected the artichoke with egg, pesto and Parmesan, whereas I opted for the pork shank, which was served with a crispy potato dish. Just like the starters, the mains were well cooked, with balanced flavours, with a delightful presentation.

The deserts looked great too, and to finish our meal, I picked the coffee tarte, while my wife choose the "Chou", served with strawberries and basil. We paired that with a Madeira, and, as we were in Porto, a glass of port.

Apego was a really nice experience, with great food and atmosphere. It's a little out of the way, but well worth visiting.

Atlantic Bonito Crudo
Atlantic Bonito Crudo
1 / 7
Corn Empanada with Mushrooms
Corn Empanada with Mushrooms
2 / 7
Pork Shank
Pork Shank
3 / 7
Crispy Potato Dish
Crispy Potato Dish
4 / 7
Artichoke with Egg, Pesto and Parmesan
Artichoke with Egg, Pesto and Parmesan
5 / 7
Chou
Chou
6 / 7
Coffee Tarte
Coffee Tarte
7 / 7

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: The Chamberlayne 27 Jun 2024 9:30 AM (last year)

Friday Night Dinner: The Chamberlayne

Thursday, June 27th 2024, 18:30 BST
83 Chamberlayne Road, London NW10 3ND, United Kingdom
Starters: £18 (£10-£18); Mains: £45 (£16.50-£28); Pudding: £6 (£3-£10); Wines: £32 (£28-£78)
by Derick Rethans

Back when I just moved to London, now nearly 15 years ago, I would frequent the Chamberlayne a lot. It was the closest pub with a good food selection, and the best chips in town.

It has changed hands, and name, a few times in the intervening time, but it's now back as the Chamberlayne, and we decided to try them out again.

We started with a happy hour, but then of Oysters and not drinks. The selection included Jersey and Carlingford oysters, as well as the river oysters Louet Feisser. Oysters have started to grown on me. I wouldn't touch them a decade ago, but would now happily shuck them myself.

After our starters, I opted for a Grilled Cornish gurnard, a lovely chewy fish served on a bed of haricot beans with bagna cauda, a garlic and anchovies purée, and some herbs. I am not usually a fan of beans, but these were nice and soft and buttery and worked well with the fish and purée.

My wife went for a more traditional choice: a beef burger served with chips. The burger was well seasoned and moist, with some enjoyable pickles. The chips were good too, but were not living up to the standard that I remembered from all these years ago.

They had several ice creams and sorbets for dessert. We were already reasonably happy, and had a single scoop each. I had a raspberry swirl, and my wife a salted caramel. Both excellent to finish our meal.

The Chamberlayne had a pleasant and relaxed atmosphere, with good food at reasonable prices. An excellent local option.

Selection of Oysters
Selection of Oysters
1 / 5
Gurnard on Haricot Beans
Gurnard on Haricot Beans
2 / 5
Beef Burger with Chips and Pickles
Beef Burger with Chips and Pickles
3 / 5
Raspberry Swirl Ice Cream
Raspberry Swirl Ice Cream
4 / 5
Salted Caramel Ice Cream
Salted Caramel Ice Cream
5 / 5

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: The Devonshire 14 Jun 2024 9:30 AM (last year)

Friday Night Dinner: The Devonshire

Friday, June 14th 2024, 18:30 BST
17 Denman Street, London W1D 7HW, United Kingdom
Starters: £32 (£8-£16); Mains: £53 (£19-£39); Wine: £50 (£32-£130); Pudding: £8 (£8-£16); Dessert Wine: £20
by Derick Rethans

After trying to get a table for a long while, we finally managed to snag one. We have been to this location before (when it was a Jamie's Italian), and it's situated right next to Piccadilly Circus. The downstairs is a pub, and upstairs there are a dozen of tables and a large roaring grill.

The menu is handwritten, and has sections on starters, grilled items, mains, sauces, and sides. While we were looking at it, some bread and butter appeared. And a few minutes later our wine. After our waiter poured a glass, she took it away to keep it cool in a fridge. Both of us are not keen on this practise — we'd really rather see our wine so that we can pour our own, at our time of choosing.

From the starters section, I selected a white crab salad, which came with slices of crisp apple, and crunchy chicory leaves. The crab meat was nicely seasoned and slightly sweet. My wife had three juicy scallops with a crispy topping, served with malt vinegar and some lardons. The scallops were cooked just right.

At this point it was time to top up our glasses, and we convinced our new waiter to leave the bottle on our table, even though that meant it wasn't cooled.

For her main, my wife had the fillet of halibut, while I opted for the lamb cutlets. The mains don't come with anything, so we also had duck fat crisps, and a pea, onion, and bacon dish to go with our meal. That did mean we had to assemble our plates ourselves, as they all came separately. My lamb cutlets were great. Perfectly cooked, and still moist. My wife's halibut was well seasoned and also splendid.

It was still early, and sometimes it just feels right for pudding. After some discussion we decided to share the sticky toffee pudding, with a side of some dessert wine. I am usually not too keen on sticky toffee pudding, but I was really getting my fork into this one. I secretly wished we hadn't shared it!

It was a great meal out, and I now understand why it is so hard to get a table, especially earlier in the evening.

White Crab Salad with Apple and Chicory
White Crab Salad with Apple and Chicory
1 / 5
Scallops with Crispy Topping
Scallops with Crispy Topping
2 / 5
Halibut Fillet, with Duck Fat Crisps and Bacon Peas
Halibut Fillet, with Duck Fat Crisps and Bacon Peas
3 / 5
Lamb Cutlets, with Duck Fat Crisps and Bacon Peas
Lamb Cutlets, with Duck Fat Crisps and Bacon Peas
4 / 5
Sticky Toffee Pudding
Sticky Toffee Pudding
5 / 5

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Xdebug Update: May 2024 11 Jun 2024 7:30 AM (last year)

Xdebug Update: May 2024

Tuesday, June 11th 2024, 16:30 BST
London, UK

In this monthly update I explain what happened with Xdebug development in the past month. These are normally published on the first Tuesday on or after the 5th of each month.

GitHub and Pro/Business supporters will get it earlier, around the first of each month.

On GitHub sponsors, I am currently 44% towards my $2,500 per month goal, which is set to allow continued maintenance of Xdebug.

If you are leading a team or company, then it is also possible to support Xdebug through a subscription.

In the last month, I spend around 23 hours on Xdebug, with 22 hours funded.

Xdebug 3.4

I created the first alpha release of Xdebug 3.4 — with some preliminary PHP 8.4 support. The main reason for this was to test out the PIE tool, that James Titcumb is working on as part of his work for the PHP Foundation.

This new tool uses composer-style definition files. It also means that extensions like Xdebug can now be found on Packagist.

PIE is still in early development, but I shall be continuing to test out while it matures.

The 3.4.0alpha1 release itself adds a new XDEBUG_IGNORE HTTP variable to prevent Xdebug from initiating a debugging session for this request only. This feature was requested by the Symfony project, to prevent debugging sessions for the debugging toolbar.

Native Xdebug Path Mapping

In the previous update I wrote about Xdebug's new projects section, and the first project that I am hoping to fund through this: Native Xdebug Path Mapping.

After my announcement, several companies and individuals reached out. The funding is now nearly there, with good hopes that it will conclude soon.

You could be part of this too!

Once we cross the line, I will start with the implementation, which I intend to include into Xdebug 3.4.

Business Supporter Scheme and Funding

In the last month, no new business supporters signed up.

Besides business support, I also maintain a Patreon page, a profile on GitHub sponsors, as well as an OpenCollective organisation.

If you want to contribute to specific projects, you can find those on the Projects page.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Lita 7 Jun 2024 9:30 AM (last year)

Friday Night Dinner: Lita

Friday, June 7th 2024, 18:30 BST
7-9 Paddington Street, London W1U 5QH, United Kingdom
£20 (£8-29); Mains: £44 (£14-£160); Drinks: £36 (carafe, bottles from £54)
by Derick Rethans

Following the lead of a better-known, piano-playing food critic, we visited Lita, a new restaurant in Marylebone, on a nice spring evening. We didn't want to sit outside with the smokers, so we chose to sit inside. What we hadn't expected was to be sat right in a corner in the back—the darkest (and most humid) spot in the restaurant.

With the menu came a spiel of: "We recommend a starter each, and then two or three of the small plates, and then one or two from the big plates. The small plates are just little bites." — I am paraphrasing here, but you get the gist. Without looking at the menu, we already thought that, taking the advice would mean we would end up with way too much food — we've been in similar situations before. Seeing the price of each of these "small" and "big" dishes were, also put us right off. Ultimately, we can always order another dish.

Instead, we opted for a more reasonable selection, at least in our opinion. We started with wild-farmed sourdough, with cultured butter, and smoked Basque sardines with a cherry sauce. I have no idea what wild-farmed sourdough is, nor cultured butter; but it was nice bread with some good butter. The sardines were nicely cured, and the cherries added an enjoyable sweet tang. It wasn't a lot of chow though.

As our intermezzo dish we chose their salad of Provencal asparagus, peas, and broad beans, served with a poached Braddock Whites duck egg. A light and refreshing dish, with the white and green asparagus having just the right amount of crunch.

And finally, as our main we picked the poussin, which was served with an apricot jus. On the side we had a basic green leaf salad. The poussin was perfectly cooked, and easily came off the bone. I've never had chicken and apricot, but thought the combination worked really well. The salad was, well, salad. Flopped out of the bag and dressed with a fairly basic oil and vinegar dressing. Being critical the leaves were too large to eat in a mouthful, so a bit of light chopping by a chef would have improved it; alas.

With our meal, we shared a carafe of Chardonnay, which was perfectly nice. In most circumstances, we would have had a bottle. But they start at £54 here, which is a little over the top.

The food that we had, was delicious. But we really ought to have had a look at the price ranges in the original review, or on the menu before we booked. We didn't think the value-for-money ratio worked out here. I don't think we will be back here, also because it felt a little pretentious. Marylebone has both better and more affordable places to dine in.

Soughdough with Cultured Butter
Soughdough with Cultured Butter
1 / 5
Cured Sardines with Cherries
Cured Sardines with Cherries
2 / 5
Asparagus Salad
Asparagus Salad
3 / 5
Poussin with Apricots
Poussin with Apricots
4 / 5
A Bunch of Salad Leaves
A Bunch of Salad Leaves
5 / 5

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: London Shell Co. 31 May 2024 9:30 AM (last year)

Friday Night Dinner: London Shell Co.

We walked the last mile to the restaurant on a lovely, warm spring evening. It is situated on the east side of Hampstead Heath, not far from Highgate Cemetery. Nearby are several independent shops.

As the evening was warm and sunny, many people sat outside, but we sat inside, on one side of the little restaurant. On the other side, there was a fish counter with fresh-looking fish and seafood. The back wall had a rack full of bottles of wine to have in or take out. A fridge next to it was for the white and sparkling wines to have in. The atmosphere was very relaxed.

The menu was a blackboard, with numerous tasty-sounding dishes in three different sections: cold plates, hot plates, and sides/desserts. Although nearly all the dishes sounded delicious, we each chose a dressed and undressed oyster to start our meal. But not after we had perused the wines on offer—we selected a Greek Savatiano.

The dressed oyster had a slightly spicy sauce with a nice burn that did not overpower the oyster's flavour. The undressed oyster was fresh and enhanced with a few drops of lemon juice.

After our starters, our mains arrived. My wife had picked a ray wing dressed with salty caper butter, and I had selected the whole plaice with lobster sauce. The lobster sauce alone was to die for—lovely, sweet chunks of lobster meat with a powerful tomato undertone. It went very well with my perfectly cooked fish. The other dishes coming from the kitchen also looked enticing. On the side, we shared some new potatoes.

We don't usually have three courses — two is plenty — but it was a lovely spring evening, and a dessert seemed appropriate. My wife had a slice of a traditional British custard tart topped with a little nutmeg, whereas I had opted for the fresh strawberries served with white chocolate cream. Although white chocolate can be cloying sweet, this wasn't, and therefore a delicious final to our meal whilst sipping an accompanying dessert wine: A nice relaxed meal with fabulous fishy food.

Four oysters on a place with ice, with a slice of lemon.
Four oysters on a place with ice, with a slice of lemon.
1 / 6
A whole plaice with lobster sauce.
A whole plaice with lobster sauce.
2 / 6
New potatoes in butter.
New potatoes in butter.
3 / 6
A ray wing covered in butters with capers in it.
A ray wing covered in butters with capers in it.
4 / 6
Classic custard tart slice.
Classic custard tart slice.
5 / 6
Strawberries in white chocolate creak, with crunchy bits.
Strawberries in white chocolate creak, with crunchy bits.
6 / 6

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: The Cow 24 May 2024 9:30 AM (last year)

Friday Night Dinner: The Cow

We visited The Cow on a warm spring evening and went through a packed bar downstairs to the much quieter upstairs restaurant. This place had been recommended to us, so we were keen to pop along and try it out.

We were welcomed with some lovely bread and butter and had some mackerel pate to share to start with. The pate was nicely flavoured but could have done with being served with more bread, as there was too much pate, for the amount of bread, even if we loaded it on.

I chose the Monkfish, which was well seasoned and had its defining chewy bite. The vegetables that came with it added flavour, as did the tomato. What let the dish down was the watery sauce underneath it.

My wife selected the cuttlefish with peas. The cuttlefish with the peas and sauce was pleasant. The slice of sourdough helped up mopping the flavourful sauce as well, although it did make the dish a little soggy.

When we left, the downstairs area was even busier, with no place to even stand. Overall, whilst it is clearly a local favourite, we found it a bit overhyped, and we will probably not go back.

Smoked Mackerel Paté with Sourdough and Butter
Smoked Mackerel Paté with Sourdough and Butter
1 / 3
Monkfish on a Bed of Courgette and Tomatoes
Monkfish on a Bed of Courgette and Tomatoes
2 / 3
Cuttlefish with Peas and Toasted Bread
Cuttlefish with Peas and Toasted Bread
3 / 3

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Local Whispers 7 May 2024 6:15 AM (last year)

Local Whispers

Tuesday, May 7th 2024, 15:15 BST
London, UK

For most of the videos that I make, I also like to have subtitles, because sometimes it's easier to just read along.

I used to make these subtitles with an online service called Otter.io, but they stopped allowing uploading of video files.

And then I found Whisper, which allows me to upload audio files to create subtitles. Whisper is an API from OpenAI, mainly known for ChatGPT.

I didn't like having to upload everything to them either, as that means that they could train their model with my original video audio.

Whisper never really worked that well, because it broke up the sentences in weird places, and I had to make lots of edits. It look a long time to make subtitles.

I recently found out that it's actually possible to run Whisper locally, with an open source project on GitHub. I started looking into this to see whether I could use this to create subtitles instead.

The first thing that their documentation tells you to do is to run: pip install openai-whisper.

But I am on a Debian machine, and here Python is installed through distribution packages, and I don't really want to mess that up. apt-get actually suggests to create a virtual environment for Python.

In a virtual environment, you can install packages without affecting your system setup. Once you've made this virtual environment, there's actually Python binaries symlinked in there, that you can then use for installing things.

You create the virtual environment with:

python3 -m venv `pwd`/whisper-local
cd whisper-local

In the bin directory you then have python and pip. That's the one you then use for installing packages.

Now let me run pip again, with the same options as before to install Whisper:

bin/pip install -U openai-whisper

It takes quite some time to download. Once it is done, there is a new whisper binary in our bin directory.

You also need to install fmpeg:

sudo apt-get install ffmpeg

Now we can run Whisper on a video I had made earlier:

./bin/whisper ~/media/movie/xdebug33-from-exception.webm

The first time I ran this, I had some errors.

My video card does not have enough memory (2GB only). I don't actually have a very good video card at all, and was better off disabling it, by instructing "Torch" that I do not have one:

export CUDA_VISIBLE_DEVICES=""

And then run Whisper again:

./bin/whisper ~/media/movie/xdebug33-from-exception.webm

It first detects the language, which you can pre-empt by using --language English.

While it runs, it starts showing information in the console. I quickly noticed it was misspelling lots of things, such as my name Derick as Derek, and Xdebug as XDbook.

I also noticed that it starts breaking up sentences in a odd way after a while. Just like what the online version was doing.

I did not get a good result this first time.

It did create a JSON file, xdebug33-from-exception.json, but it is all in one line.

I reformatted it by installing the yajl-tools package with apt-get, and flowing the data through json_reformat:

sudo apt-get install yajl-tools
cat xdebug33-from-exception.json | json_reformat >xdebug33-from-exception_reformat.json

The reformatted file still has our full text in a line, but then a segments section follows, which looks like:

"segments": [
    {
        "id": 0,
        "seek": 0,
        "start": 3.6400000000000006,
        "end": 11.8,
        "text": " Hi, I'm Derick. For most of the videos that I make, I also like to have subtitles, because",
        "tokens": [
                            50363, 15902, 11, 314, 1101, 9626, 624, 13, 1114, 749, 286,
                            262, 5861, 326, 314, 787, 11, 314, 635, 588, 284, 423, 44344,
                            11, 780, 50960
        ],
        "temperature": 0.0,
        "avg_logprob": -0.20771383965152435,
        "compression_ratio": 1.5128205128205128,
        "no_speech_prob": 0.31353551149368286,
            },

Each segment has an id, a start and end time (in seconds), the text for that segment, and a bunch of auxiliary information.

But it is still sort of a sentence at a time, which isn't really what we want. Additionally, I really don't want it to say XDbook and misspell my name.

For both of those there are actually options that we can use.

To make things easier for us later, we're turning on word timestamps. That allows us to by word see where the time index actually was. You do that with the --word_timestamps True option.

To provide a hint on what the video is about, and to get better words, we can use the initial prompt. The option that I used for this video was: --initial_prompt="This video by Derick introduces a new Xdebug feature, regarding exceptions".

To make things more accurate or less accurate, there's also an option that you can specify which is which model to use. Normally the standard one medium is fine, but in order to speed up generation, you can use --model tiny. This will give less accurate results.

If the model has not been downloaded the before, Whisper will automatically do this.

It is also possible to specify the language, which makes things go faster if it's English only as well: --language English. It supports a bunch of languages.

The full command that I used is:

CUDA_VISIBLE_DEVICES="" \
        ./bin/whisper ~/media/movie/xdebug33-from-exception.webm \
        --word_timestamps True \
        --initial_prompt="This video by Derick introduces a new Xdebug feature, regarding exceptions" \
        --language English

In the output file, we now see another elements in each sentence section:

"words": [
    {
        "word": " Hi,",
        "start": 3.6400000000000006,
        "end": 4.16,
        "probability": 0.6476245522499084
    },
    {
        "word": " I'm",
        "start": 4.28,
        "end": 4.44,
        "probability": 0.9475358724594116
    },
    {
        "word": " Derick.",
        "start": 4.44,
        "end": 4.8,
        "probability": 0.12672505341470242

For each word, it has the start and end, as well as the probability of it being correct. You see that for Derick it was only 13% certain.

With this information you can do some analysis to create an actual subtitle script out of this. For that I have written a PHP script.

It loops over all the segments, and for each of the segments over all the words. If the difference in time between the end of a word and the start of a new word is more than a quarter of a second, it emits a new section of subtitles.

Similarly if a sentence is longer than 60 characters it also breaks it up into an extra line. This keeps all the subtitles reasonably well sorted.

The emit function formats it like how the SRT files are supposed to be.

With this script, I now create a new SRT file, overwriting the one that Whisper had created:

php whisper-to-srt.php xdebug33-from-exception.json > xdebug33-from-exception.rst

The output looks like:

0
00:00:03,640 --> 00:00:04,799
Hi, I'm Derick.

1
00:00:05,919 --> 00:00:10,980
For most of the videos that I make, I also like to have subtitles,

2
00:00:11,640 --> 00:00:15,779
because sometimes it's easier to just read along for various
different reasons.

These subtitles I can now add when uploading a video to YouTube. I might also create a similar script to generate output that can be used as the base for an textual article. Not everybody likes learning from watching videos.

I would also prefer not to use a model that has been trained with questionable sources. I will be investigating if I can use Mozilla's Common Voice project's data instead.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Xdebug Update: April 2024 6 May 2024 7:30 AM (last year)

Xdebug Update: April 2024

Monday, May 6th 2024, 16:30 BST
London, UK

I have not written an update like this for a while. I am sorry.

In the last months I have not spent a lot of time on Xdebug due to a set of other commitments.

Since my last update in November a few things have happened though.

Xdebug 3.3

I released Xdebug 3.3, and the patch releases 3.3.1 and 3.3.2.

Xdebug 3.3 brings a bunch of new features into Xdebug, such as flamegraphs.

The debugger has significant performance improvements in relation to breakpoints. And it can now also show the contents of ArrayIterator, SplDoublyLinkedList, SplPriorityQueue objects, and information about thrown exceptions.

A few bugs were present in 3.3.0, which have been addressed in 3.3.1 and 3.3.2. There is currently still an outstanding issue (or more than one), where Xdebug crashes. There are a lot of confusing reports about this, and I have not yet managed to reproduce any of them.

If you're running into a crash bug, please reach out to me.

There is also a new experimental feature: control sockets. These allow a client to instruct Xdebug to either initiate a debugging connection, or instigate a breakpoint out of band: i.e., when no debugging session is active. More about this in a later update.

Funding Platform

Last year, I made a prototype as part of a talk that I gave at NeosCon.io. In this talk I demonstrated native path mapping — configuring path mapping in/through Xdebug, without an IDE's assistance.

In collaboration with Robert from NEOS, and Luca from theAverageDev, we defined a project plan that explains all the necessary functionality and work.

Adding this to Xdebug is a huge effort, and therefore I decided to set up a way how projects like this could be funded.

There is now a dedicated Projects section linked from the home page, with a list of all the projects. The page itself lists a short description for each project.

For each project, there is a full description and a list of its generous contributors. The Native Xdebug path Mapping project is currently 85% funded. Once it is fully done, I will start the work to get this included in Xdebug 3.4. You could be part of this too!

Business Supporter Scheme and Funding

In the last month, no new business supporters signed up.

Besides business support, I also maintain a Patreon page, a profile on GitHub sponsors, as well as an OpenCollective organisation.

If you want to contribute to specific projects, you can find those on the Projects page.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Sudu 3 May 2024 9:30 AM (last year)

Friday Night Dinner: Sudu

We went on a rainy Saturday evening. Sudu is pretty close to where we live, but this was our first time.

The exterior is painted a dark grey and is a little unprepossessing, however once inside, we were in for a treat.

We were quickly seated in a busy restaurant and saw many delicious-sounding things on the menu. My husband chose the beef rendang, which he had served with plain basmati rice. I picked the chicken satay served with coconut rice and a plain roti. This was washed down with a couple of tiger beers. The service in Sudu was quick and attentive but not intrusive.

The food arrived fairly quickly. My husband's beef rendang was nice and spicy, as it should be, with nice tender chunks of beef that worked well with the rice. My chicken satay came as chicken pieces on skewers with a bowl of a spicy, peanutty satay sauce into which the chicken could be dipped. The coconut rice was subtly flavoured with coconut. Once the chicken skewers were finished, I poured the remaining satay onto my rice. The roti was delicious, slightly crispy on the outside but soft and a little fluffy on the inside and not overly greasy.

The food coming out to neighbouring tables also looked great, so it is likely we’ll be going back to try something else from the menu.

Chicken Satay
Chicken Satay
1 / 3
Roti
Roti
2 / 3
Beef Rendang
Beef Rendang
3 / 3

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Granger and Co 26 Apr 2024 9:30 AM (last year)

Friday Night Dinner: Granger and Co

We went to the branch on Marylebone High Street, in a building previously occupied by Patisserie Valerie. The front of Granger and Co. is pretty unassuming, however once inside it really opens up. The rear dining room is a large modern airy dining space around two floors high, with comfortable seating and art on the walls. It has a slightly mid-century modern vibe. Despite the size and height of the room, the acoustics was great, and we could hear our conversation perfectly.

I arrived a little early and was seated in a corner seat. From there, I could admire the room while perusing the menu. Once my wife arrived, we quickly settled on our food choices.

We started with courgette chips with an aioli. The chips (slices of courgette) had a lovely crisp batter, with juicy courgette inside and arrived sprinkled with black sesame seeds. We squeezed a few drops of lemon juice over them, which really brought them to life, especially when dipped in the delicious aioli.

For the main course, we both selected an onglet steak—medium rare. It was well-cooked, flavourful, and moist. It was served with some greens, baby lettuce, and onion rings. We enjoyed a bottle of Tule Rosso wine, which worked well with the food.

After our main course, we both fancied a little dessert. Not too much, as we were mostly full of delicious steak. We settled on a tiramisu, which had good, slightly boozy coffee flavour and was nice and creamy, and formed a delicious end to our meal at this Australian restaurant.

Courgette Chips
Courgette Chips
1 / 3
Onglet with Vegetables
Onglet with Vegetables
2 / 3
Tiramisu
Tiramisu
3 / 3

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Concealing Cacophony 16 Apr 2024 5:30 AM (last year)

Concealing Cacophony

Tuesday, April 16th 2024, 14:30 BST
London, UK

Over the last few weeks I have been publishing a series of videos on writing PHP extensions.

I record these videos through OBS, and then slice and dice them with Kdenlive. This editing is necessary to make up for my mistakes, shorten the time we wait for things to compile, and to remove the noise of me hammering away on my keyboard.

Editing takes a lot of time, and I still wasn't always pleased with the result as there was still a fair amount of noise while I am talking.

For the PHP Internals News podcast, I used a set of noise cancellation filters, which worked wonders. But it turns out that Kdenlive does not come with one built in.

I had a look around on the Internet, and learned that there is a LADSPA Noise Suppressor for Voice plugin. LADSPA is an open API for audio filters and audio signal processing effects. LADSPA plugins can be used with Kdenlive.

Some Linux distributions have a package for this LADSPA Noise Suppressor for Voice, but my Debian distribution bookworm does not.

I found instructions that explain how to build the plugin from source. These instructions worked after some tweaks. I ended up creating the following script:

#!/bin/bash

sudo apt install cmake ninja-build pkg-config libfreetype-dev libx11-dev libxrandr-dev libxcursor-dev
git clone https://github.com/werman/noise-suppression-for-voice /tmp/noise
cd /tmp/noise
cmake -Bbuild-x64 -H. -GNinja -DCMAKE_BUILD_TYPE=Release
sudo ninja -C build-x64 install

After running this script, and restarting Kdenlive, I found the installed plugin when I searched for it.

With the plugin loaded, I now have much clearer sound, and I also don't have to edit the sections where I am typing, as the plugin automatically handles this.

I will still have to edit out my mistakes.

I then also had a look at how it worked. It turns out that this plugin uses neural networks to cancel the noise.

In the background, it uses the RNNoise library which implements an algorithm by Jean-Marc Valin, as outlined in this paper. There is an easier to read version of how the algorithm works on his website.

The data to train the model is also freely available, and uses resources from the OpenSLR project. Noise data is also available there. From what I can tell, all this data was contributed under reasonable conditions, and not scraped from the internet without consent. That is important to me.

Hopefully, from the third video in the series, you will find the sound quality much better.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Pascor 12 Apr 2024 9:30 AM (last year)

Friday Night Dinner: Pascor

From the archive: We visited Pascor in January 2023

Right on Kensington High Street, near the Design Museum is Pascor. A Levantine “Fire” restaurant, which we picked as our first place to go to in the new year.

The restaurant is over two levels, with the lower part smaller, and close to a chilly door. Luckily we were sat in the roomier first floor, with cosy decorations. The restaurant is a tapas-y affair, and we shared the Challah Bread, the Reverse Tabbouleh Salad, a whole roasted aubergine, and the evening’s special: fish cakes, which were really fish cake croquettes. The dishes all came with sauces. Although they were fairly simple, they all packed a great flavour. The dishes came out as they were ready, and they all went great with the Lebanese red wine that we picked (a Château Ksara Le Prieuré Rouge 2018).

We also did indulge in desserts. My wife picked a Coconut “Beirut Meets Bangkok” Malabi, which was lovely sweet and moist with strong hints of pineapple. I choose the Chocolate Crémeux which was rich and indulgent with a flavourful blueberry sauce.

My only regret is not picking one (or two!) more dishes to share! Which is all the more reason to return, and sample some other delicious things that we saw coming out of the kitchen — perhaps when the weather is a little better.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: 50 Kalò 5 Apr 2024 9:30 AM (last year)

Friday Night Dinner: 50 Kalò

For tonight's meal, we walked to 50 Kalò, a busy restaurant just off Trafalgar Square, and situated in The Grand Hotel. Although you don't notice that it’s a restaurant attached to a hotel.

50 Kalò is a pizza restaurant and an off-shoot of their original Naples-based restaurant. It came with great reviews, so we punted on it. When we got there, we were quickly seated at a small table, with my chair nearly touching a chair on the table behind me. I am not keen on being boxed in like this, and despite the small gap, the staff still pushed through the gap between me and the diner behind, which was quite irritating. Fortunately, my wife spotted another free table without this constraint, and we moved.

The menu is full of Neapolitan pizza—in fact, that's what this restaurant specialises in. I selected a Prosciutto Cotto—roasted ham on a white base, with shavings of aged Parmesan. My wife chose the Del Monaco, which had a traditional tomato base, and came topped with salami. The pizzas were big and freshly cooked, arriving quickly. The pizza crust was slightly toasted and lovely and chewy, but in my opinion, the base could have been a little crispier. The shavings of fresh parmesan also added something extra to the overall flavour.

The restaurant also has its "own" beer, (three varieties) brewed in collaboration with Birra Amarcord, from Rimini in Italy. We both started with a "Forte," and during our meal, we enjoyed the other two, (a blonde and a red) as well. The beers were nice and complemented the pizza, but whilst tasty, they weren’t the most exciting beers.

Although we thought we were full from our large pizza, our waitress convinced us to have a special Easter-related dessert. The almond and orange cake was delicious, nice and fluffy, with a lovely freshness from the orange. It was a fitting end to the meal.

All in all, it was a reasonable meal out. The pizzas were nice, the service was quick, and the interior was lovely. This would be a good place to eat after a day of tourist-ing, and avoiding the nearby chain restaurants.

Prosciutto Cotto
Prosciutto Cotto
1 / 3
Del Monaco
Del Monaco
2 / 3
Almond and Orange tarte
Almond and Orange tarte
3 / 3

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: The Porchester 29 Mar 2024 10:30 AM (last year)

Friday Night Dinner: The Porchester

We were not planning to go here, but due to unforeseen circumstances with our planned dinner venue, we had to change plans at the last moment, and this pub was close by.

It's a fairly typical Young's pub, with their standard taps, including a Real Ale — the Young's Original. I ordered fish and chips, sorry, the "Ale Battered Haddock". My partner ordered the bavette steak. The fish had a nice crispy coating, and as a first for me, came with curry sauce as well as tartare sauce. It worked better than I expected. The chips were a bit on the chewy side, but then again, I like mine mega crunchy on the outside, and fluffy on the inside — like good fries should be!

The portions were large, and we were properly full by the end. I have to admit I was struggling a little.

It got busy soon after we finished our meal and was a little too loud and shouty for my liking. Therefore, we made a swift exit and headed home.

Ale Battered Haddock
Ale Battered Haddock
1 / 2
Bavette Steak
Bavette Steak
2 / 2

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Nazuki Garden 1 Mar 2024 9:30 AM (last year)

Friday Night Dinner: Nazuki Garden

Once in a while, you want to try something different. So we found ourselves on a cold and rainy Friday evening at Nazuki Garden. I had just come back from a work trip to Berlin, and was in need of a good meal.

My partner had booked Nazuki Garden several weeks earlier, at a time which would make it easy enough for me to make it on time to. With London City's efficiency, I was way too early and ended up walking for half an hour first so that I didn't have to sit in the restaurant by myself for an hour.

We were sat at the back of the room, far away from the door, but that unfortunately didn't stop the draft when somebody opened that door.

Their menu is extensive, with lots of tempura, sushi, sashimi, temaki, nigiri, and rolls. However, it was a cold evening, and we preferred something warm.

Luckily, their menu also has a large selection of cooked dinner. Soups and donburis.

We began our meal with a starter of vegetable gyozas and Japanese fried chicken. The gyozas were nice and crisped up, with a slightly bubbly texture. The Japanse Fried Chicken also crisp, spicy, and served with a lovely flavoured mayonnaise.

While we were enjoying our starters and Merlot (we got a bottle, it was Friday, bite us), a fair amount of other punters came to the restaurant. I was happy to see a large Japanese contingent as well. It's often a good sign that restaurants with a specific country's cuisine are frequented by people from that specific country. It adds a flair of authenticity.

After our main, we both had the Teriyaki BBQ Roasted Pork Donburi — slices of well seasoned moist roasted pork in a delicious sauce. It was perhaps not the most adventurous dish on their menu, but sometimes you just want to get fed well. And we were.

After dinner, we were still a little peckish, and shared a chocolate ganache mochi ice cream. A little rice cake richly filled with chocolate ganache icecream. A perfect way to end our meal.

At some point, in summer, we probably should return and try our the sushi (and friends) side of the menu as well.

Vegetable Gyoza
Vegetable Gyoza
1 / 4
Japanese Fried Chicken
Japanese Fried Chicken
2 / 4
Teriyaki BBW Roasted Pork Donburi
Teriyaki BBW Roasted Pork Donburi
3 / 4
Chocolate Ganache Mochi Ice Cream
Chocolate Ganache Mochi Ice Cream
4 / 4

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Akub 16 Feb 2024 9:30 AM (last year)

Friday Night Dinner: Akub

From the archive: We visited Akub in January 2023

Just off the main road near Notting Hill Gate station is this cosy multi-floor restaurant serving Palestinian food. Opened last year, and the menu contains mostly sharing dishes.

We started off our drinks with two Palestinian beers, a White, and an IPA, which fitted very well with our selection of mezzes/starters/whatever you want to call it. Before the starters showed up, we ordered a bowl of salted lupin beans, called Turmous, which were very tasty. Similar to a mix of almonds and perhaps Edamame? At least, the way you eat them was like the Japanese bean snack, as it involved removing the skin in your mouth — if you were so inclined. I was; my partner wasn't.

The starters that we ordered included three balls of a goats cheese (Labaneh) covered in three different kinds of spices. Sumak, and two others that I can’t remember right now. Besides that, we got a grilled Nabulsi cheese, which was covered in some oil and seeds, and was slightly squishy like fried halloumi can be, a little salty like feta, but overall a better texture than I think that over-fried halloumi could be. Our third starter were spiced squash dumplings, Shish Barak with Beetroot, which was also delicious.

Our "main" to share was the short rib Fatteh, which was slow cooked beef with spices, with garlic yoghurt, crispy (like really crispy) onions, with some fried focaccia squares to add some more texture.

Even after that, we were still not 100% satisfied, and had a rich chocolate cremeux and pistachio ice cream to finish. It was all so tasty that we forgot to take any photos!

The service was attentive, and our waitress explained approximately how many things we should order from the menu, and she was spot on.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Volta do Mar 9 Feb 2024 9:30 AM (last year)

Friday Night Dinner: Volta do Mar

We had been to Volta do Mar before, before they moved from their old location in Covent Garden, to their new location in Chelsea.

The restaurant specialises in Portuguese food, including cuisines from countries along Portuguese trade routes.

While we were reading the menus to select our dishes, we enjoyed a cheeky cocktail. I had a take on a Caipirinha, spruced up with blueberries. And my partner had a Martini with added spiced pear.

After making our choices, we found out that beyond the dishes on the menu, they also have a short set of specials. This also meant that their Iberico Pork Bafassa was replaced with an Iberico Pork burger, with added foie gras. As we don't really want to eat that, it meant that my partner had to change to a different main.

In the end, we choose to share a Sardine Pâte and Sourdough snack, and Ham Hock and Chorizo Croquettes. The pâte was smooth and flavourful, and spread excellently on the sourdough. The croquettes full of porky goodness. The other starters on the menu also sounded appetizing.

For our main, we picked their Piri Piri Chicken, served with chips. The chicken was delicious, moist and well spiced and the pot of sauce that came with it was ideal to dip the chicken and chips into.

We had a glass each of their house wine with our main, I had red, but my partner had the white, both wines were lovely and worked nicely with the food.

We enjoyed our meal at Volta do Mar. The food was great and the atmosphere relaxing, and the staff attentive. It certainly was no Nando's!

Blueberry Caipirinha
Blueberry Caipirinha
1 / 4
Sardine Pâte with Sourdough
Sardine Pâte with Sourdough
2 / 4
Ham Hock and Chorizo Croquettes
Ham Hock and Chorizo Croquettes
3 / 4
Piri Piri Chicken
Piri Piri Chicken
4 / 4

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Burn's Night at Browns 2 Feb 2024 9:30 AM (last year)

Friday Night Dinner: Burn's Night at Browns

At the end of January, more shops start stocking haggis again. Haggis is a traditional food of Scotland and the main event of a Burns supper, where the life of the poet Robert Burns is celebrated. It is often paired with neeps and tatties (mashed swede and potatoes).

With my partner having Scottish ancestry, we usually prepared our own. In the earlier years with friends and family, in the form of "drink some of Derick's whisky". In later years just for the two of us. This year, we chose to not prepare our own, and instead enjoy somebody else cooking it for us.

We have been to Browns in Covent Garden a few times before — we even had our engagement party there. We know it as a reliable place with good food, and tasty cocktails. For Burns Night they were offering a short set menu, with a whisky pairing that sounded to our liking.

As a starter we both had the seared scallops. They were sweet and bouncy, and just cooked right. There were herbs sprinkled over them, and they were served with Parmesan crisps and a creamy sauce. It was paired with a 12-year-old Glenfiddich, which paired perfectly.

After waiting for a while — too long really — the main event showed up. Three thick slices of haggis, slightly crisped up on the outside, and served on a bed of the aforementioned neeps and tatties. Served with a sweetened gravy, of which more could have been served. I thought that the crisped up edges added a little extra texture to the otherwise well spiced and prepared haggis. This was paired with a 15-year-old Glenfiddich, which is a little spicier itself.

For our desert, the two of us picked something different. My partner had the traditional Scottish Cranachan, where I chose the crumble. I can't resist a good crumble, and this one was certainly one.

In the end, I thought it was a good meal, and certainly filling. The service was a little slow, and some confusion did ensue while we were waiting for our whisky to be paired with the haggis main course. I also thought it was a little on the pricier side of what it is.

I think next year we'll cook our own again, even though means we'll have to do the dishes too!

Scallops
Scallops
1 / 2
Haggis, Neeps, and Tatties
Haggis, Neeps, and Tatties
2 / 2

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: East Street by Tampopo 26 Jan 2024 9:30 AM (last year)

Friday Night Dinner: East Street by Tampopo

The idea behind going for a different restaurant every Friday is to try out a wide variety of places, but also of cuisines. We are lucky that in London, we have access to pretty much any sort of dishes we fancy.

Sometimes, you can even find a wide variety of different culture's food in one place, and East Street is such an establishment. It is situated just North of Oxford Street, close to Tottenham Court Road station. It specialised in what can only be described as pan-Asian.

Their menu is extensive, from Szechuan dishes via Japan and Korea to Indonesian and Malay. We started with two of their small plates, the Malaysian Satay Chicken and Korean Popcorn Chicken. They were both delicious, very flavourful and moorish. Good Satay Chicken I remember from my parent's Indonesian friends, and this was just like it. With our starters, we enjoyed a lovely Hokkaido Negroni as we didn't think a bottle of wine would fit with this menu.

Choosing the small plates was hard, as there are so many nice sounding ones. Instead of ordering them all, we also picked a large plate each. I ordered a Rendang Beef Curry, again, with memories of the Indonesian Restaurants you find in the Netherlands. It was accompanied by rice, peanuts, boiled eggs, and some pickled cucumber. My companion ordered a Tamarind Chicken, slices of well cooked moist chicken in a delicious sticky tamarind sauce. It came served with rice, broccoli and crispy onions, this was one of the non-spicy options on the menu, but despite the lack of chillies still had a bit of a kick. Again, not wanting wine, we picked a bog-standard Tiger beer to wash all the delicious flavours down, which paired pretty well.

Although we were pretty full, we could not quite resist the churros, and shared three with a tasty caramel sauce. I don't quite understand how they fit in an Asian kitchen, but they were delightful regardless.

If we were to return, which seems likely, we would probably have a meal made up of more of the smaller dishes (all of which sounded delicious) instead of going for the traditional starter plus main course approach.

The place was pretty full, and when we left I remarked that we were probably amongst the oldest of the clientele, but we didn't feel out of place. Which I think is a good sign.

Interior
Interior
1 / 5
Chicken Satay
Chicken Satay
2 / 5
Popcorn Chicken
Popcorn Chicken
3 / 5
Tamarind Chicken
Tamarind Chicken
4 / 5
Rendang
Rendang
5 / 5

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Empire Empire 19 Jan 2024 9:30 AM (last year)

Friday Night Dinner: Empire Empire

We visited Empire Empire on a chilly January evening. The restaurant was fairly quiet but even at 18.30 there were some tables seated and enjoying their food.

The restaurant features an old fashioned jukebox type vinyl record player close to the entrance and has a photobooth for some fun snaps should you be so inclined.

We had a beer each from 40ft Brewery in Hackney, which was lovely. It's great to see an Indian restaurant branching out from the usual cobra and kingfisher options. We started with poppadoms and dips, and then I had a well spiced biryani with incredibly tender lamb falling off the shank and a pastry lid. My companion really enjoyed her Empire Butter Chicken and a naan bread. This was not as rich as some butter chicken curries, but was incredibly flavourful with a nice level of spicing and kick. Unfortunately we were both too full to move onto try what sounded like tasty desserts from the menu.

Service at Empire Empire was very welcoming and attentive (and quick, but not rushed) we were out and heading home on the bus about an hour after sitting down.

Butter Chicken
Butter Chicken
1 / 2
Lamb Biryani
Lamb Biryani
2 / 2

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Lokkanta 5 Jan 2024 9:30 AM (last year)

Friday Night Dinner: Lokkanta

As first restaurant of the year, we wanted something low-key. Not far from Paddington station, on Westbourne Grove, there is a whole row of such places. We settled on Lokkanta, a place that specialises in Turkish food.

We started off with Turkish sausage slices with halloumi, while we were waiting for our main course. At the same time, we started enjoying our delicious red wine from Turkey.

The front section of the restaurant features a well ventilated charcoal grill upon which most of the meats were roasted. In my case, a well cooked and flavoured lamb shish. My partner picked a Yogurtly Adana, minced grilled lamb with bread and basted in a tomato sauce and yoghurt.

The service was speedy, and we did not have to wait long. Perhaps that was mostly because when we arrived at 18:30, there was only other table enjoying dinner, so we were almost the only customers. When we left, there were a few more people enjoying their dinner. However, with the restaurant being quite empty, it perhaps lacked a bit of ambience and the tiled interior made it feel a little clinical, I think it would be quite different if it was busy with plenty of hustle and bustle.

In short, the food and wine was good, but the atmosphere was unfortunately missing.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Ma Petite Jamaica 29 Dec 2023 9:30 AM (last year)

Friday Night Dinner: Ma Petite Jamaica

What do you need on a cold and dark winter evening? Exactly, a bit of tropical warmth. Our booking was a little last minute, as we hadn't really thought about arranging something for the last Friday of the year. My wife, who often takes the lead in picking our Friday evening restaurant, suggested this Jamaican place in Camden, not too far from where we live.

We arrived to find the dining room partially full, with Jamaican musing playing and (fake) palm trees. It gave a happy and homely feel to the dining room.

I had never had Jamaican food, so decided that I wanted to try the staples. As my starter I picked the ackee and salt fish, which was served with fried dumplings. My wife chose the chickpea and pumpkin curry. We also decided to share a portion of the jerk chicken spring rolls. All three small plates were very flavourful. With enough hints of scotch bonnets to add a kick, but nothing too overpowering. The dumplings were great for dipping up the sauces.

Because we felt we needed to escape from the cold, we enjoyed a pair of Jamaican Mule cocktails, with our starters, and later mains. The first set was half price as it was still happy hour! There were also a number of Jamaican beers on offer, with a Red Stripe on tap.

I selected the curried goat with rise and peas as my main course. My wife wanted to order a wrap, which they were no longer serving, although they were on the menu. She ended up with their vegetable curry with a roti. Both were excellent.

Our only regret was probably ordering too much food. One and a half starter, and a full main per person was certainly too much. But that's not the worst problem to have if your dinner was so tasty.

Fried Dumpling, with Ackee and Saltfish
Fried Dumpling, with Ackee and Saltfish
1 / 2
Curried Goat
Curried Goat
2 / 2

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Friday Night Dinner: Noon 22 Dec 2023 9:30 AM (last year)

Friday Night Dinner: Noon

Even when we're out of the country, we try to keep our tradition in place, and so we found ourselves on a cold and rainy evening at Noon, in Maastricht, in the Netherlands.

When we arrived just after 18:00, the restaurant was already quite full. With a few dozen tables, some high tables, and a bar where a bar keep was making plenty of colourful cocktails. We were seated at a high table right in the middle of the stylishly appointed establishment.

While enjoying a glass of cava, we shared a couple of starters. The Drunken Salmon (salmon cured in gin and yoghurt), and the Asian slow-roasted Pork Belly. Both were excellent. Flavourful and succulent.

For my main, I chose the Asian Ribs. I realised it was another Asian-flavoured dish — I know, "Asia" isn't a country. I am usually not keen on ribs, but these were boneless, and that made all the difference. That, and the lovely, and slightly spicy sauce that was slathered over the ribs with a few tiny bits of red chilli.

My partner's choice was the butter steak, medium rare. That came with carrots and a delicious mushroom foam. The sauce was made with Pedro Ximénez sherry, and had a nice shine to it. With our mains, we each enjoyed a glass of Merlot. The only (minor) let down were their chips that were served with our mains. They were slightly chewy.

It was a very enjoyable meal in a charming environment, and with very reasonable prices. A great birthday meal!

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

The Ridgeway 21 Nov 2023 12:48 AM (last year)

The Ridgeway

Tuesday, November 21st 2023, 09:48 GMT
London, UK

I have walked some of the UK's local and national trails in the past, first the London LOOP and Capital Ring, then the Thames Path and North Downs.

I had meant to walk the South Downs since 2020, but then the world changed, and I walked the length of the tube network instead.

But it is now 2023, and it is time to tick off one more of the national trails. I originally wanted to walk the South Downs, following the North Downs, and the Downs Link. But it turns out that The Ridgeway is celebrating its fiftieth anniversary, which would be more fitting for this year. The South Downs will be there next year too.

Like with the Thames Path between the source and Oxford, public transport between the stages can be complicated. I started planning the first two stages sometime in July and opted to do the first two 32 km sections on a Thursday and Friday in early September, as the temperature would be sensible.

Day 1: Avebury to Bishopstone

I booked my hotel, Helen Browning's The Royal Oak in Bishopstone, on the Monday before my walk, so I was pretty sure it would not rain much these first two days.

On Thursday, September 7th, I took an early train from Paddington to Swindon. Even my advance ticket was expensive, at £59. I left plenty of time, about 27 minutes, to catch the hourly bus to Avebury.

Avebury Stones

Not unusually when relying on UK railways, this plan failed as soon as I got to Paddington. My train left a little under 20 minutes late, meaning I would have less than 10 minutes to get to the bus station. When I got to Swindon, those 10 minutes had dropped to 4. I had to sprint to the bus station and managed to catch the bus as it was about to leave, already drenched.

The bus to Avebury takes about half an hour, and I ended up chatting to a fellow Ridgewalker. He had already done most of it, but not linearly.

Avebury is a fascinating place. The village is surrounded by a stone circle. Not as impressive as Stonehenge, but certainly more extensive.

I spent some time exploring before setting off to the start of the Ridgeway on Overton Hill. On the way there I walked through the majestic West Kennet Avenue and The Sanctuary, looking out over the valley to Avebury.

West Kennet Avenue

The walk started for real on Overton Hill. I was already sweaty because I had to walk up this hill. Instead of a lovely cool autumn morning, it was already pushing 30°C with high humidity.

From the start, the route gently ascends on easy-going paths. You can cycle or ride a horse for most of the Ridgeway, and the trails are usually reasonably wide.

Two Horses

At the top of the first gentle incline, I ended up at Hackpen Hill. This hill has a white horse in chalk on the side. I wanted to visit a few archaeological sites while walking the route. This was an early opportunity.

The path towards the chalk white horse was blocked by an actual white horse. Therefore, I set off along the S-bend road instead. A large concrete mixer approached me, belching out black smoke, or so I thought. I took a deep breath and closed my nose until I realised it wasn't smoke but a nice, cooling, fine water spray!

Once I reached the bottom, I walked along the footpath back up the hill, only to find that I couldn't see much of the chalk horse. It's a bummer for such a steep climb. And then, the horses blocked access to the gate to get out of the field again! This time, I gently squeezed past them.

Once recovered from the steep way up the hill, I continued and soon came upon Barbury Castle, The route went straight through the middle of it, but as there was little to see beyond the round embankment, I continued without stopping.

The view opened up after going through a wood, and a path was visible for a long way down into a valley. I chatted with a few fellow Ridgeway walkers, and they were surprised that I was going all the way to Bishopstone. They were doing the more traditional set of sections and finishing not far away in Ogbourne St George.

Rolling Hills

The path was fairly undulating for a while, and once I got down to the bottom, it was blocked by a herd of cows. I had to go slightly up the hill to get around them. Luckily, they did not seem to even acknowledge my presence.

As it was a hot day, I was quite pleased to find a stretch covered by trees on my way south of Ogbourne St George to cross the A346. This road lies in a valley, meaning you need to descend into it and climb back up to the Ridgeway on the other side. However, you get a good view of the village.

Tractor at Work

The route also turned north, alleviating the strong sunshine on the right side of my face. Near Lower Upham, I rested on a bench under the trees. My energy levels were really low, and I had little water left. In hindsight, I did not have enough for a long walk in this warm weather. Even my energy bars had all melted together and were hard to eat. But as I had no other option, I set off after about half an hour.

The views from this section were excellent, though, with rolling hills, villages, and cities in the background. A fair number of tractors were also out on the fields.

Tractor at Work

After bypassing another hill fort at Liddington Hill, the route brought me out out on a fast-moving road with the same name.

"Ridgeway National Trail" Along the Road

Here, a road section of the Ridgeway starts. It is along a road with no pavement and only a tiny verge. This was rather unpleasant, and I wonder why not some arrangements can be made for walkers. The sign with "Ridgeway National Trail" alone wasn't cutting it.

I could see Charlbury Hill from here, though, which I knew was near the finish of today's walk. Unfortunately, it meant I had another 60 metres of climbing to do, luckily no longer along a road with traffic.

It was now getting slightly darker, and after a short while, I finally could head down to Bishopstone for a shower, meal, and sleep. That last stretch down from the Ridgeway was enjoyable and almost like going through a canyon.

Towards Bishopstone

I arrived at Helen Browning's Royal Oak a little after five. The small complex includes a pub, a farm shop, and a hotel.

I entered through the first, picked up my keys in the second, and then headed to my room. The first thing I did when getting to my room was to drink at least 2 litres of water before enjoying a lovely cold shower.

I relaxed a bit and then headed to the pub for a well-deserved lager, which I enjoyed in the lovely beer garden. I had a table for dinner booked for seven but ended up ordering a little earlier because I was ravenous. Unfortunately, my order had gone slightly wrong (they lost it), and dinner only showed up around eight. Their venison burger was amazing, though, and so was the complimentary salad I received because of the food order mess up.

After dinner, I went to the hotel's communal area, where I relaxed a little and read. Not soon after, I went to have a nice long sleep in a bed.

Day 2: Bishopstone to Chilton

After a restless but relatively long sleep, I rose early to enjoy breakfast at the hotel — their home-made apple juice was delicious. I wanted to beat the warmest part of the day, and therefore, I wanted to leave as early as possible.

I left just before nine and explored the village a bit — mostly because I got lost! After finding the little path between two cottages, I headed to the Ridgeway. This second day's walk would be slightly less hilly, but the forecast still called for temperatures around 30°C and a few more high clouds. I had created a "Plan B" in case it would be too rough again: I would stop the walk earlier at Wantage.

Although today's whole route was a little hilly, the first thing I had to do in the morning was to get back onto the Ridgeway, which involved a fairly long climb. Again, I was sweating before I even started the walk.

Broad Path

But the Sun wasn't beating this hard today, and the walk started by going over the nice wide paths. There was also some more shade from trees and brambles. I enjoyed quite a few juicy blackberries in the places where they looked good enough.

Rose & Crown

After about 2 km, I came upon a farm, and the farmer had kindly provided a water tap. This meant I could empty one of my water bottles and instantly fill it. This was welcome and alleviated my concern that water would be a problem again today.

Not far after that, I spotted a sign to the Rose & Crown: "Down the Hill". Having recently climbed up to the Ridgeway and been going for around an hour, I decided that this was not a good offer and continued along the top.

A little further along, I stumbled upon Wayland's Smithy long barrow, used for burials over 5,500 years ago. I looked around before continuing my walk. I was glad for more tree cover and those light, hazy clouds that tempered the Sun's impact.

Wayland's Smithy

The next point of interest was the ancient hill fort at White Horse Hill. It has another chalk white horse on the site, but this time, I decided not to walk down the hill to see if I could see it. Aerial imagery will have to do.

I did walk around the hill fort in the same location for a while, and there were some great views of the surrounding countryside.

Path With a View

Near the top of the next hill, I spotted a bunch of butterflies. They weren't straightforward to photograph as they kept flying away!

Red Admiral

I was lucky with this lovely Red Admiral, which sat still long enough.

Amazingly, there was another water point not far away. I repeated my routine of checking whether it was working, drinking all the water I was carrying, and refilling my bottles. But this time, I had around a third of this day's 20 miles left. On I went.

The walk was going much easier than the day before, helped by the clouds, and having enough water. Although the sky was a little hazy, the views were still great. I had a lovely time walking and decided not to cut the walk short at Wantage.

View from the Ridgeway
View from the Ridgeway
1 / 6
The Path Ahead
The Path Ahead
2 / 6
Wittenham Clumps
Wittenham Clumps
3 / 6
Hill Side Farm
Hill Side Farm
4 / 6
Rolling Hills
Rolling Hills
5 / 6
Didcot Power Station
Didcot Power Station
6 / 6

From the Ridgeway, I could see the Wittenham Clumps, Didcot Power Station, and, nearing the end, the Harwell Campus with the Diamond Light Source, the UK's synchrotron.

After crossing underneath the A34 through a dodgy tunnel, I had finished my stretch along the Ridgeway, and it was time to head down the hills towards Chilton, where I was hoping to catch the once-an-hour bus to Didcot.

Of course, I ended up missing it by a few minutes. Instead of standing around, I walked to the next possible bus stop, which was about a 15-minute walk away. A bus comes every half hour- but not at this time of day, apparently.

So I set off once more to a stop, which I knew had a service every 15 minutes. I knew it was the location of the Diamond Light Source, but I had yet to notice that this was right in the middle of the UK's atomic energy and space flight campus.

The bus to Didcot was uneventful, and once I got to the train station, I bought a big bottle of water. I was still thirsty, even with my extra supply of on-route water. By this time, the light clouds had disappeared.

I was lucky with the trains, as one to Paddington arrived just as I got to the platform.

Day 3: Chilton to Wallingford

A week later, I was again on my way to Chilton by train and bus to walk the third section to Wallingford. The temperature was in the mid-20s, and it was a bright day.

The bus route also gave me a tour of the whole Harwell Campus, with all the space and atomic energy research places. And big "Keep Out" signs.

Once I got to Chilton, it was time to start walking. As I had come down from the Ridgeway last time, I had to climb back up again.

Farm in the Valley

The first 2½ km was primarily flat, over nice wide paths. On each side were galloping courses for horses, with a few riders out on this lovely morning. Then, the route turned due east towards Goring. This section was quite up-and-downy, with beautiful views peeking through the hedges. A few red kites were out and about.

I enjoyed the views, including a field with many poppies.

Poppies
Poppies
1 / 4
Green Valley
Green Valley
2 / 4
Crossing Paths
Crossing Paths
3 / 4
Tractor Eggs
Tractor Eggs
4 / 4

After a section through a lane of very green trees, I ended up on a road with a mansion, a golf course, and finally, the outskirts of Streatley. The closer to the village, the more traffic there was. At some point, a very narrow pavement appeared before getting to the High Street with a lovely row of brick buildings.

Brick Village Houses

After crossing Goring Bridge, the route heads north along the Thames. I previously walked the Thames Path, but its route is on the other side of the river. I understand why, as you can get closer and see the river.

Butterfly on the Wall

After a wall with butterflies, where I spotted this lovely Red Admiral, the walk was mainly behind riverside properties. From South Stoke, the route finally gets close to the river for a little while. This section of the walk is flat because it is next to the Thames. The paths are often well-trodden grass, making for a relatively easy hike.

The route into North Stoke was mainly on the east side of the treeline bordering the Thames, which provided lovely open views of the surrounding hills.

At North Stoke, the route passed through a churchyard along a lovely row of bright pink-flowered houses.

Row of Houses

North of the village, the Ridgeway crosses a golf course. Luckily, you can't see much of it as the route is lined with trees and bushes. Just south of the A4130, the walk's route goes east, but for me, this was the end of this section.

I walked into Wallingford along the Thames Path and was again lucky to catch the bus into Reading, which was ready to go.

This was really a section of two halves. The first half is hilly, with great views and the occasional horse. The second half is along the Thames, which, sadly, I rarely saw. It being flat made for a nice change, though.

Day 4: Wallingford to Lewknor

I took the "River Rapids" bus to Wallingford from Reading. At £2, it is still a bargain. I hope this scheme will be extended and/or made permanent.

I decided to walk on the other side of the Thames — the side not on the Thames Path — to get back to the Ridgeway for some variety. The paths were grassy and, if not for a herd of cows, also pretty quick.

After crossing underneath the A4130, I got stuck behind a group of teenagers. Looking at their gear and maps, they were probably on a Duke of Edinburgh's Award walk. I got confused and walked in the wrong direction to get ahead, meaning I now had to follow them for half a mile on a narrow path through the woods.

Winding Path

I managed to get ahead of them again after a moderately dangerous crossing of the B4009, where the path continued going through the woods on a steady but slight incline.

The path was windy and narrow, and the Sun was straight ahead. It was a lovely morning, and I was enjoying myself immensely.

Grim's Ditch

The path through the woods lasted about five kilometres, crossing a few farm roads. Eventually, the route followed South Oxfordshire's Grim's Ditch, right next to the path to the north.

A little before Nuffield, at Grimsdyke Cottage, I found another water point. The day was not nearly as hot as the first two days of my walk, but the water was undoubtedly still very welcome.

After another 5 minutes, the path reached one of its higher points and turned northward. There were good views over the Thames Valley, although part of it was occupied by the Huntercombe Golf Club at Nuffield. The path was strictly set out with a series of "numbered white painted bollards", but the promised numbers were missing.

At the top, I had to cross the nearly empty A road towards Nettlebed, home of the famous Cheese Shed. It was tempting but would have been an hour's detour. And to get to cheese, that is even too far for me.

The route continued down a path through a freshly harvested field before becoming steep on the way to Ewelme Park. The view towards where I came from was fantastic.

Fields

The route became slightly undulating here, with woodland sections, before coming up at the church at Swyncombe, where a bunch of crows were flocking about on Rectory Hill. After having reached the top, the Ridgeway continued along a field of sheep at the bottom near a stream. There was also a good view of the hill that I had to walk up next to the side of Swyncombe Downs. The woods were fresh and green, protecting me from the bright Sun for a while.

North Farm

After coming around the bottom of a field, a manor house, North Farm, on the next hill came into view through the trees. The path was lined with bushes with many red berries.

Near the farm, the route changes direction again and heads straight for Lewknor and the village of Watlington in the valley below. The path widens, similar to the section between Chilton and Goring. It is partly exposed but also passes through the woods.

Walkers on the Path

After about a mile, I encountered a few walkers with race numbers. The stream of them became denser and denser, and my lovely, relaxed walk became more arduous. I had to step out of the way and dart from left to right on the path. At first, I greeted them, which was alright.

I became quickly fed up, though, as the people coming towards me only had to say hello once, or step out of the way once, to be able to pass. I had to do that several hundred times. It was a real chore, making the rest of my walk significantly less fun — I get out of the city to not encounter crowds!

After a while, I could see my finish point for the day becoming larger and larger, with the occasional sound of the M40. There were many sheep in front of the Aston Rowant Nature Reserve's hill.

Sheep at the Foot of the Hill

I crossed under the M40, and shortly after that, I left the Ridgeway and headed to a new form of transport, the Oxford Tube, a coach service between Oxford and London. It had a convenient bus stop just off the M40 called the Lewknor Turn. Once I got to the stop, the coach arrived nearly instantaneously. It goes every 15-20 minutes, so it would not have been a problem if I missed it. For £20, you get a three-month open return. The coach was comfortable and speedy until the outskirts of London near Hillingdon. There was a lot of traffic, so I will try to catch it further from Victoria Coach station for the next and penultimate section.

Day 5: Lewknor to Wendover

Up Through The Tunnel of Leaves

Today's walk started with a bus ride to my coach stop. I had booked a return on the Oxford Tube, and as I was unwilling to sit in London traffic, I headed to Notting Hill Gate instead of Victoria to alleviate some of this.

The coach ride was uneventful, although it was a bit busier, even this early morning. With the days getting dark earlier, I thought setting off early was wise.

After arriving at Lewknor, I had to get up to Ridgeway level, which involved a steep climb along a narrow road lined with colourful trees, creating a tunnel effect. Once at the top, the low Sun blinded me as it reflected on the slightly wet road.

Once on the Ridgeway, it became clear that autumn had properly started. Large amounts of leaves were on the path, and the trees had burst into every colour.

The Start of Autumn

This section of the Ridgeway was very much on a ridge, with occasional expansive views to both the left and right for a while. The path was easy-going.

Like the previous section, another race was going on on the route. This time, it was about half a hundred bicycles. It was a lot less annoying than five hundred walkers.

Just after Chinnor, my walk led me through the lovely Bledlow Great Wood before going southeast for a while with beautiful "scenes from the Windows Start-up Screen".

The Start of Windows

From here, my walk slowly trended downwards while continuing to produce great views of cows in distant but very green fields.

Soon, a steep climb up a hill produced sweat, and stunning 360° panoramic views at Lodge Hill.

Cows Blocking the Path

On the other side of the summit, a herd of cows blocked my path. Instead of trying to squeeze past them, I decided to have a little detour to avoid them, as I did not fancy my chances with this lot.

Then, finally, the route left the high grounds of the Ridgeway and let me down the slopes towards Princess Risborough along some field boundaries and through a tree tunnel, keeping me away from yet another golf course.

After a level crossing, I had to scale another hill to cross the other single track of the Chiltern Main Line. A single poppy in a field led me along a quiet road to the much busier A4010, which I followed towards the town.

Autumn Trees in a Plowed Field

Although the road could have been more pleasant to walk along, the views of colourful trees and freshly ploughed fields to the right of me were more enticing.

Buzzard

Thankfully, the section along the road was short, and I soon found myself on a quiet gravel path. Annoyingly, it was on an incline, but that did not stop me from enjoying myself. Like me, a buzzard was following the edge of a field towards the foot of Brush Hill.

The hill is steep, but steps cover nearly half of the incline. I am usually not very keen on these, but here, it makes sense. The view from the top was worth the effort.

View From Brush Hill, with Bonus Trigpoint

I rested here for a while, enjoying snacks and water, and watched red kites swooping and soaring through the sky.

After lunch, I continued walking. The route went down and then up again to another view over the valley at Whiteleaf Hill. While descending through the lovely "Hangings", the Sun lit up the first hints of autumn colours. Unlike earlier sections, the trees had yet to start losing their leaves here.

Mushroom Village

From here on, the route became familiar, as I had walked it a while ago on one of my SlowWays adventures, but in the opposite direction. First came the open hillsides of Grangelands and The Rifle Range, a peculiar name.

At the top of yet another hill, I spotted a bunch of mushrooms. I expected to see many more on my autumnal walk, but these were the only bunch.

After crossing a field, the Ridgeway skirts around outside the Chequers Estate, the Prime Minister's country party place. Menacing signs are warning you to keep out. At the moment, there isn't a fence on the section down the hill towards their driveway, which you'll end up crossing.

Chequers
Tree Branches

When leaving the estate, I headed the wrong way first and walked past a farm shop. I was tempted to get lunch there, but the queue was too long. I decided to continue walking instead. A dog refused to move, as it had not been bought a sausage!

The short climb into Linton's Wood revealed a path through the leaves cut out by the rain, which reminded me of walking around in the forest where I grew up. I enjoyed some of the more exposed tree trunks, which had few leaves and were still remarkably green.

After crossing and following a quiet road, I ended up on the slopes of Coombe Hill. The clouds were getting sparser, which created interesting patterns on the fields in the valley below.

Cloud Patterns

A tall pillar memorializing the Second Boer War sits at the summit of Coombe Hill. I spent some time with my longish lens taking pictures of a wind turbine and a fire on a hill across the valley.

HS2 Building Works

Towards Wendover, you can clearly see the extensive works that are part of the building efforts of HS2, the new high-speed railway that now unfortunately does not go to more useful places.

After taking a little break and admiring the views, I proceeded towards the finish, down the hill through the Bacombe Hill Nature Reserve.

Kite Fight

It took me some time as there were so many red kites about. Flying, and hunting, and attacking each other. Most of them were just too far away for good photos. Their aerial acrobatics were a sight to behold.

After a while, I finished the walk and headed to Wendover station. As I descended, I enjoyed the last views of the valley.

Just before the station, the footpath was narrow due to HS2 building works. A footbridge across the tracks straight into the station's west side was blocked, so I crossed the tracks and used the main entrance.

I took the train back to London from Wendover, concluding the fourth and penultimate leg of the Ridgeway.

Day 6: Wendover to Ivinghoe Beacon

Wendover Station

Trains to Wendover go from London Marylebone only once an hour on Saturdays. I went for the 08:27, as I thought the one an hour later would make it trickier to finish the walk before it got (too) dark. It is a good thing that I did, as the 09:27 ended up being cancelled due to a lack of staff. Which isn't really acceptable for a once-an-hour service.

It was not the nicest of days, but I was keen on finishing the Ridgeway before daylight saving time kicked in, and there would be way less time in the afternoon for walking. I dislike the early darkness.

I arrived at Wendover, therefore, reasonably early. It was early enough to see the morning fog lifting out of the forests that surround the city.

Wendover Fog

The walk through town was short, and I soon found myself walking around a lake and a church, climbing up the hill along a wooded lane. The trees on the hill to the north all had splendid colours. Autumn is the best season for this, although the clouds hadn't yet risen.

Early Morning Clouds

Soon after that, I found myself climbing through a forest. The leaves had yet to quite colour as much, and it had an eerie feel. Especially with the ground slightly muddy and springy.

The path widened a little after a while before ending up with a lovely view and some steps down into a narrow and muddy gully, which I followed to the road and crossed into some fields.

Munching Cows

Unfortunately, halfway across these fields, on the other side of a gate and fence, a herd of cows was on its way to block my path. As I mentioned, I am not a fan of national paths going through fields with cows. Therefore, I decided to backtrack and walk around the farm.

My diversion was pleasant, even though I had to wade through mud. Although fully overcast, the view into the valley with colourful trees was lovely.

Once I had completed my detour, I ended up on the official route and into Northhill Wood. The trees hadn't entirely changed their colours here yet, so it was fresh and green. The wide path was easy, too.

After a short section along quiet lanes, I ended up in Bishop's Wood, at the top end of Tring Park. It is a lovely wide boulevard, and at this time of the day, it was full of people walking their dogs. The Sun was playing with the colours of the trees.

Tring Park Boulevard

There were some excellent views over the town, but soon, I left the park and moved onwards to cross the A41. The path was easy-going again, and a lovely herd of sheep was grazing to my right.

View From The Bridge

I am usually not keen on having my walk interrupted by a busy road, but the view from the high pedestrian bridge across the A41 was pretty good. Colourful trees flanked each side, with the finish of the Ridgeway in the distance.

However, before I would get to my final set of hills, I wandered along another straight path with a slight incline to cross the Grand Union Canal.

The section just beyond Tring's railway station was along a road with a very narrow pavement. Fortunately, the section was short, and I went uphill again through the woods — first on a slight incline, then up a long stretch of uneven steps.

Cloudy View

Once at the top, the route continues north along the side of the ridge, with sporadic open views to the west. By this time, it had become slightly brighter, with few clouds. However, it was getting a little windier.

Some of the paths were a little narrow here and sometimes a little muddy. The views were improving, especially with the unevenly lit lands below.

A single tree marked the first peak of this final section at Pitstone Hill. A few walkers were out, as it was a nice day. From here, I could also see my finish point, Ivinghoe Beacon.

Ivinghoe Beacon

But I was not quite yet there. From Pitstone Hill, you dip through a little depression in the hillside before getting up to Paul's Knob. I did not take the opportunity to go up it, as it was not the Ridgeway's route. I did, however, on my return to Tring. As if I needed to do more hills...

Rainy Cloud

In this final section, it was getting a lot busier. A lot more so than at the start of the route at Overton Hill. I understand why, as the landscape is much nicer here, especially going up Steps Hill (without any steps). In the distance, I could now see a rain cloud coming, creating the "fingers of god" effect.

After coming down from Steps Hill a bit, there was one more push towards the finish. I didn't take the broader path with many people; instead, I followed the Ridgeway along its mapped route. I did not quite run, but I certainly put in some extra effort to race to the top and finish my adventure at the summit of Ivinghoe Beacon.

Ivinghoe Breacon Trigpoint

I spent a little time lounging around and enjoying a later lunch to relax and wait until people stopped blocking the things I wanted to take photos of.

There is a fair expanse of walking paths here, which makes for a lovely day out. However, I still had to get home, and after about half an hour, I set off. The rain clouds were now certainly nearer, too.

On my way back, I decided to get up all the little hills I had bypassed — I was here after all. After coming down from Paul's Knob, it started to rain a little. I thought the weather for my whole walk was pretty — albeit a little hot for the first two days.

Red kites were hunting again on the hillsides. I like watching these birds soar and occasionally dive to catch prey.

Tring's Train Station

When I got to the station at Tring, I found that the ticket machine at the regular entrance was stuck in a mode that didn't accept key presses.

I was a little lost until I realised another ticket machine was at the parking lot side. Luckily, that one worked.

I had to wait a little for my train back to London. I used that time to get the mud out from under my shoes and reflect on the different sections of the Ridgeway — From the "ridge" walking in 30°C+ heat in the first two days, walking out of the hills, and along the river Thames on the third outing, the battle with 500 walkers going to opposite direction on my walk to Lewknor, my first encounter with autumn's colours while walking around the Chequers Estate, and finally this last section to the finish at Ivinghoe Beacon.

You can find more photos on in Flickr album "The Ridgeway".

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Xdebug Update: October 2023 9 Nov 2023 6:00 AM (last year)

Xdebug Update: October 2023

Thursday, November 9th 2023, 15:00 GMT
London, UK

In this monthly update I explain what happened with Xdebug development in the past month. These are normally published on the first Tuesday on or after the 5th of each month.

Patreon and GitHub supporters will get it earlier, around the first of each month.

You can become a patron or support me through GitHub Sponsors. I am currently 35% towards my $2,500 per month goal, which is set to allow continued maintenance of Xdebug.

If you are leading a team or company, then it is also possible to support Xdebug through a subscription.

In the last month, I spend around 32 hours on Xdebug, with 25 hours funded.

Towards Xdebug 3.3

In last month's update I explained that I was investigating whether Xdebug can make use of PHP's Observer API. It turns out that it can be used to intercept function calls, but only include or require calls if the included files contain code, and not just class definitions. As Xdebug treats include and friends as actual function calls, I can unfortunately not solely rely on the Observer API.

In the wake of checking out the Observer API, I also thought I should have a look at some performance improvements. For example, I noticed that Xdebug would always collect local variables with each function call. This is only really needed when showing local variables, in stack traces, or through the step debugger.

Another optimisation that I worked on was to optimise the way how function breakpoints are checked against. These breakpoints trigger when a function gets called, or returned from. This is not a feature that many people often use, but Xdebug would always do some work to be able to compare the configured breakpoints against a normalised function name reference.

These two optimisations together resulted in a 20% reduction in CPU instructions (roughly equivalent to execution time) with the front page of WordPress' demo site.

The third optimisation that I worked is related to file/line breakpoints. Xdebug would evaluate whether an IDE has set a line breakpoint on the current line. For this, it had to loop over all the existing breakpoints and compare them. Each additional breakpoint would be checked after every statement, meaning that the number of breakpoints affected the running time of the script.

My optimisation alleviates this by moving the check on whether line breakpoints exist for a function or method to the function call itself. If no breakpoints are set in the whole function, then Xdebug skips the check for line breakpoints after each statement. This shifts the factor of performance loss for having line breakpoints from the number of statements to the number of function calls. This shift results in a roughly 25% performance boost with only four line breakpoints enabled.

After attending IPC and speaking to fellow Xdebug users, a question came up about long running scripts. Right now, Xdebug's step debugger can only be activated when the script starts or by calling xdebug_connect_to_client(). Breakpoints can also only be configured when Xdebug is waiting for a command to continue a script (after a step, an existing breakpoint, or at the start of the script). While a script is running, you can not interrupt the execution to break, or add new breakpoints.

This let me to experiment with a control socket, currently only available on Linux. Through this socket you can then ask Xdebug for information, or request a breakpoint so that you can then use your IDE to add more breakpoints, or inspect the current state.

At the moment, I have implemented the "show me some information" feature, which allows me to show the running PHP scripts, with PID, memory usage (in kb), running time, and Xdebug version. The xdebug command line tool allows you to control Xdebug through the socket:

I have not merged this feature yet, but I hope to do so once I have the step debugger interruption feature as well.

Beyond this, I will continue to work on the features and issues on the 3.3 roadmap, without any guarantees these tickets will be implemented.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Flamboyant Flamegraphs 7 Nov 2023 6:00 AM (last year)

Flamboyant Flamegraphs

Tuesday, November 7th 2023, 15:00 GMT
London, UK

In this article, I am showing you how to make a flamegraph, a new feature in Xdebug 3.3.

Flamegraphs are an interesting way of showing where an application spends a lot of time.

To show you the functionality, I will be using Xdebug's own website, which I run locally at port 9874.

First of all, we need to configure Xdebug to make our flamegraphs. We do that in a configuration file. With php --ini I find out which file to use:

Configuration File (php.ini) Path: /usr/local/php/8.2dev/lib
Loaded Configuration File:         /usr/local/php/8.2dev/lib/php.ini
Scan for additional .ini files in: /usr/local/php/8.2dev/lib/conf.d
Additional .ini files parsed:      /usr/local/php/8.2dev/lib/conf.d/20-mongodb.ini,
/usr/local/php/8.2dev/lib/conf.d/zzz-xdebug.ini

If you are running Apache or Nginx, I would suggest you use phpinfo() output in the browser to find the same information instead.

I have a specific Xdebug INI file called zzz-xdebug.ini. Its contents are currently:

zend_extension=xdebug.so
xdebug.mode=develop,debug

Flamegraphs are part of Xdebug's tracing functionality, which we need to enable by changing the xdebug.mode line to:

xdebug.mode=develop,debug,trace

The tracing functionality supports multiple formats. The flamegraph is number three, so we need to set that as well by adding:

xdebug.trace_format=3

By default, Xdebug Tracer will put files into the /tmp directory, and use a hash of the current working directory to create a trace file name. We want distinct flamegraphs for each URL, so we need to change that by setting:

xdebug.trace_output_name=xdebug.%R

We start all files with trace., and then we use %R to configure to use the URI. Xdebug also supports many other formatting specifiers.

By default, all file names will also be postfixed by .xt.gz.

After making INI changes, you need to restart the web server.

To initiate the tracer, I use an Xdebug Helper browser extension available for Chrome, Firefox, and other browsers.

I click on the debug icon and then on trace:

After requesting the home page, and documentation page, Xdebug's tracer created the following files in the /tmp directory:

derick@gargleblaster:~$ ls -l /tmp/trace.*
-rw-r--r-- 1 derick derick  123 Sep 26 03:31 /tmp/trace..05d7ef.xt.gz
-rw-r--r-- 1 derick derick 2560 Sep 25 16:55 /tmp/trace._core2_css.xt.gz
-rw-r--r-- 1 derick derick 3550 Sep 25 16:55 /tmp/trace._docs_.xt.gz
-rw-r--r-- 1 derick derick 2419 Sep 25 16:55 /tmp/trace._fonts_IBMPlexSans-RegularItalic-Latin1_woff2.xt.gz
-rw-r--r-- 1 derick derick 2474 Sep 25 16:55 /tmp/trace._images_logos_11com7_svg.xt.gz
-rw-r--r-- 1 derick derick 2507 Sep 25 16:55 /tmp/trace._images_logos_io_svg.xt.gz
-rw-r--r-- 1 derick derick 2530 Sep 25 16:55 /tmp/trace._images_logos_private-packagist_svg.xt.gz
-rw-r--r-- 1 derick derick 2455 Sep 25 16:55 /tmp/trace._images_logos_typo3_svg.xt.gz
-rw-r--r-- 1 derick derick 2523 Sep 25 16:55 /tmp/trace._images_logos_xdebug-cloud_svg.xt.gz
-rw-r--r-- 1 derick derick 6165 Sep 25 16:55 /tmp/trace._.xt.gz

Because we go through our PHP router process, there are also files for images and fonts.

The important ones are:

-rw-r--r-- 1 derick derick 3550 Sep 25 16:55 /tmp/trace._docs_.xt.gz
-rw-r--r-- 1 derick derick 6165 Sep 25 16:55 /tmp/trace._.xt.gz

The contents of these files look like:

{main};require_once;require_once 3046
{main};require_once;ComposerAutoloaderInit7d176ec022516f68e20dcb88554529a8::getLoader;require 7043
{main};require_once;ComposerAutoloaderInit7d176ec022516f68e20dcb88554529a8::getLoader;spl_autoload_register 9408
{main};require_once;ComposerAutoloaderInit7d176ec022516f68e20dcb88554529a8::getLoader;ComposerAutoloaderInit7d176ec022516f68e20dcb88554529a8::loadClassLoader;require 3176
{main};require_once;ComposerAutoloaderInit7d176ec022516f68e20dcb88554529a8::getLoader;ComposerAutoloaderInit7d176ec022516f68e20dcb88554529a8::loadClassLoader 41368
{main};require_once;ComposerAutoloaderInit7d176ec022516f68e20dcb88554529a8::getLoader;dirname 6061
…

In order to create a flame graph, we need to pass this through a Perl script. You can find this script by cloning the flamegraph GIT repository at https://github.com/brendangregg/FlameGraph

Xdebug automatically compresses trace files, which means we need to use zcat as the flamegraph.pl script tool does not understand that. The output needs to be redirected to a file. On one line, we enter:

zcat /tmp/trace._docs_.xt.gz
        | ~/dev/brendangreeg-FlameGraph/flamegraph.pl
        > /tmp/flame-docs.svg

You can now open this SVG file you can then open in a browser.

The stack shows how deep the code goes, and interestingly, for most of it, you'll see that a lot of time is taken up by Composer, as well as requiring other files.

You can dive in by clicking on specific bits. For example, I'll click on my template default controller:

You can reset the zoom in the top left.

Xdebug's website is not very complex, and for your own code expect to see a lot more complicated flamegraph.

Once you're done, please don't forget to turn off the tracer, as it will fill up your hard drive.

This new flamegraph trace format is new in Xdebug 3.3, out soon.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Xdebug Update: September 2023 10 Oct 2023 6:00 AM (2 years ago)

Xdebug Update: September 2023

Tuesday, October 10th 2023, 15:00 BST
London, UK

In this monthly update I explain what happened with Xdebug development in the past month. These are normally published on the first Tuesday on or after the 5th of each month.

Patreon and GitHub supporters will get it earlier, around the first of each month.

You can become a patron or support me through GitHub Sponsors. I am currently 37% towards my $2,500 per month goal, which is set to allow continued maintenance of Xdebug.

If you are leading a team or company, then it is also possible to support Xdebug through a subscription.

In the last month, I spend around 28 hours on Xdebug, with 25 hours funded.

Towards Xdebug 3.3

In September I released a first alpha release of Xdebug 3.3 so that people trying out PHP 8.3 Release Candidates have a compatible Xdebug to test with.

This quickly followed by a second alpha version due to issues with the PECL website. Instead of mangling UTF-8 characters, it stopped accepting them altogether.

I have reintroduced the xdebug.collect_params setting, which I had removed in Xdebug 3.0. Instead of the setting, Xdebug would just always collect functions' and methods' arguments while tracing. However, some users were suggesting that this created too much information which was not always needed. With the setting restored, you can now again hide these function arguments from trace files.

As frameworks are getting more complicated, they are more likely to hit Xdebug's default xdebug.max_nesting_level limit of 256. In Xdebug 3.3, this will now be 512.

The maximum nesting level setting is now less important that it was all these years ago. The PHP engine now uses stack in a more economic way. This feature unfortunately is negated when extensions override PHP's internal execution method, which is what Xdebug has to do to capture function calls for tracing, profiling, and certain breakpoints.

In PHP 8.1 a new Observer API was added, which would allow extensions to observe user-land function calls without having to override the internal execution method. This means that the stack is used more sparingly again. It also would allow for these extensions to work better with opcache enabled.

I am currently in the process of investigating whether Xdebug can make use of this Observer API as well, while maintaining all its functionality and without BC breaks. I will keep you updated in the next monthly update.

Beyond this, I will continue to work on the features and issues on the 3.3 roadmap, without any guarantees these tickets will be implemented.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Xdebug Update: August 2023 12 Sep 2023 12:27 AM (2 years ago)

Xdebug Update: August 2023

Tuesday, September 12th 2023, 09:27 BST
London, UK

In this monthly update I explain what happened with Xdebug development in the past month. These are normally published on the first Tuesday on or after the 5th of each month.

Patreon and GitHub supporters will get it earlier, around the first of each month.

You can become a patron or support me through GitHub Sponsors. I am currently 36% towards my $2,500 per month goal, which is set to allow continued maintenance of Xdebug.

If you are leading a team or company, then it is also possible to support Xdebug through a subscription.

In the last month, I spend around 27 hours on Xdebug, with 32 hours funded.

Towards Xdebug 3.3

In August I mostly spent my time on improving Xdebug's xdebug_get_function_stack() function and stack traces with regard to chained exceptions.

A feature request asked whether it would be possible to add the local variables for each stack frame that is returned with the xdebug_get_function_stack() function. Xdebug can already show local variables for the top most frame when it shows stack traces (through the xdebug.show_local_vars setting), but the function's result don't include them.

When implementing this feature, I noticed that arguments were being returned as strings, instead of actual values, as part of each stack frame. I created an issue for that and implemented that as well.

When the original requester tried out the new feature, it turned out that he wanted to do this in a user-defined exception handler. However, at that stage, the original stack has been destroyed, and Xdebug no longer could access that information.

To work around this, I now cache the stack when an exception gets thrown so that the cached version then can be requested when calling xdebug_get_function_stack() with the new from_exception option.

That looks like:

<?php
class Handlers
{
    function __construct(private string $title, private float $PIE) {}

    static function exceptionHandler($exception)
    {
        $s = xdebug_get_function_stack( [ 'from_exception' => $exception ] );
        var_dump($s);
    }
}

class Error_Entry
{
    public function __construct($base, $errno)
    {
        throw new Exception();
    }
}

set_exception_handler(['Handlers', 'exceptionHandler']);
$e = new Error_Entry(1, 2);

?>

Xdebug's cache is eight items big, which allows for 8 rethrown/chained exception stacks to be remembered.

Because of this cache it was now also (finally) possible to resolve issue #450 and issue #476. This now means that chained and rethrown exceptions are now displayed when Xdebug shows a stack trace, whether it is on the CLI, or in an HTML context.

Over the next few months I will continue to work on the features and issues on the 3.3 roadmap, without any guarantees these tickets will be implemented.

If you have comments, suggestions, or if your company wants to help fund features, please reach out, or leave comments on the document.

Xdebug Videos

I have published one new videos in the last month:

Let me know what you'd like to see!

You can find all previous videos on my YouTube channel.

Business Supporter Scheme and Funding

In the last few months, two new business supporters signed up:

REWE Digital GmbH through the Supporter Scheme, and Clever Age on Patreon.

If you, or your company, would also like to support Xdebug, head over to the support page!

Besides business support, I also maintain a Patreon page, a profile on GitHub sponsors, as well as an OpenCollective organisation.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?

Xdebug Update: July 2023 8 Aug 2023 12:52 AM (2 years ago)

Xdebug Update: July 2023

Tuesday, August 8th 2023, 09:52 BST
London, UK

In this monthly update I explain what happened with Xdebug development in this past two months. These are normally published on the first Tuesday on or after the 5th of each month.

Patreon and GitHub supporters will get it earlier, around the first of each month.

You can become a patron or support me through GitHub Sponsors. I am currently 37% towards my $2,500 per month goal, which is set to allow continued maintenance of Xdebug.

If you are leading a team or company, then it is also possible to support Xdebug through a subscription.

In the last month, I spend around 15 hours on Xdebug, with 25 hours funded. This is much less than I wanted, but instead I have been busy implementing features for PHP.

Business Supporter Scheme and Funding

In the last few months, no new business supporters signed up.

Some of the supporters that I reached out to, have supplied their logos, making the front page less bland.

If you, or your company, would also like to support Xdebug, head over to the support page!

Besides business support, I also maintain a Patreon page, a profile on GitHub sponsors, as well as an OpenCollective organisation.

Add post to Blinklist Add post to Blogmarks Add post to del.icio.us Digg this! Add post to My Web 2.0 Add post to Newsvine Add post to Reddit Add post to Simpy Who's linking to this post?