Hrtime and Loops

, tagged: php phpbench
PHPBench currently samples the time taken (in microseconds) to run code around a loop. This post aims to provide some insight into: If there is a benefit to using a loop (@Revs) when taking a time sample. The value of using hrtime instead of microtime. Background ¶ PHPBench samples the time taken for your code to run. The default executor does this by iterating over your code a number of times (@Revs) and dividing the total time in microseconds (i. Read more...

New Laptop

, tagged: sway linux
Today my new laptop arrived. My previous X1 Carbon lasted for around 4 years - I say lasted: it still works, but the keyboard was completely destroyed: It could have been repaired. I feel guilty. On the plus side this laptop actually has a UK layout keyboard (for the past 4 years I got very good at typing without looking at my keys due to the German layout). This is probably my 10th Thinkpad Laptop. Read more...

PHPBench 1.2.0

, tagged: phpbench php
PHPBench 1.2.0 has been released, the highlights are: In reports you can now dynamically create and group columns in tables Memory can be displayed in binary memory units Support for filtering by variant name Support for filtering reports Report Improvements ¶ PHPBench 1.1.0 improved report generation, allowing you to use components such as tables and bar charts. This release improves table generation, adding support for grouping and expanding columns dynamically: Read more...

PHPBench 1.1.0

, tagged: phpbench php
PHPBench 1.1.0 as been tagged! PHPBench 1.0 removed many features, most were deemed useless, the HTML report was an exception and it has been re-introduced in 1.1 along with other improvements, some of the more notable ones being: “Safe” parameters: You can now use any serializable class as a parameter. This change included some internal refactorings and I have, to the best of my knowledge, preserved the B/C promise. $include and $include-glob configuration directives to include other configuratoin files. Read more...

Object Rendering or MVC the right way

, tagged: phpbench php
The templates we use in our favourite MVC frameworks are awful. You pass an unstructured bunch of data to a template which hopes the you passed everything it needed. They do not define what their inputs are, they are not type safe. For some years I’ve been using a different way of rendering views - it started when I was trying to create a new CMS framework, but since then it has come in useful time and time again. Read more...

PHPBench 1.0.0

, tagged: phpbench php
PHPBench 1.0.0 as been tagged! I started this project in 2015, I’d like to say I’ve been working on it for six years, but really I worked hard on it for about 6 months to a year and then largely ignored it when I started another project phpactor - which began with me wondering how easy it would be to add PHP auto completion in VIM and ended up with me writing a language server and “maintaining” over 50 packages. Read more...

PHPBench 1.0.0-alpha5

, tagged: phpbench php
PHPBench Alpha 5 as been tagged. I tagged PHPBench Alpha 1 in about 5 months ago since that time numerous improvements and features have been introduced, I will talk about three of them. Local Executor ¶ One problem I had when developing benchmarks is that it’s difficult to debug when the benchmark launches in a separate process, for this reason there is now the local executor: $ phpbench run --executor=local Will run the benchmark in the same process as PHPBench, allowing you to do whatever you need to do (var_dump($foo);die()) to debug your benchmark. Read more...

PHPBench Expression Language

, tagged: phpbench
In September 2020 I was on holiday and I made a decided effort to start working on PHPBench again, and I wrote a blog post about it. Iterations 1 and 2 (September 2020) ¶ One of the main features was a new assertion engine - and I wrote a simple parser. The first implementation used Parsica. It looked something like: /** * @Assert("variant.mode < baseline.mode +/- 5%") */ public function benchFoobar(): void { // . Read more...

Phpactor 17

, tagged: phpactor
TL;DR;: Check the 0.17.0 release notes It’s been over 6 months since the release of Phpactor 16. Time really files! I planned to release Phpactor 17 last August - but, well. It didn’t happen and in the meantime there has been a huge amount of activity in develop. PHP 8 Support and Github Actions ¶ Phpactor can now be installed with the PHP 8 runtime, some necessary fixes were made to support new PHP 8 syntax and some new features: Read more...

Maestro the Package Automator

, tagged: php maestro phpactor
TL;DR; Maestro is a package maintenance automator which is in development. It’s Christmas and Phpactor needs to be upgraded to PHP 8.0, but Phpactor has many packages: $ composer show | grep phpactor | wc -l 42 Most of these packages were created almost 4 years ago, and have been updated little by little as necessary. Even editing the composer.json file to allow PHP 8 for each repository is a big task - not to mention needing to migrate from Travis to Github Actions (as Travis has become unusable in the past months with build times sometimes taking an hour) - and that’s before I can even start manually editing all the test suites to be compatible with PHPUnit 9. Read more...

PHPBench 1.0.0-alpha1

, tagged: phpbench php
PHPBench is over 5 years old. I started working on it because I wanted to write a new implementation of the PHPCR spec, and I wanted to ensure that it was faster than the existing Jackalope implementation, I needed a framework to write a large number of performance tests. The existing Athletic framework didn’t quite meet my needs so I decided to write my own. I didn’t write the next PHPCR implementation (luckily, it would have been terrible) but I did spend the next several months working on PHPBench, a large part of it was written while I was cycling from Vorarlberg (Austria) to Ankara going back through Greece and up to Slovenia. Read more...

Eaglesham to Glentrool Forest

, distance: 111km, time: 6h42m , tagged: scotland2020
I said goodbye to my friend and his fiance, and proceed down the “moor road”. Eaglesham (pronounced Eagles-ham) is on the very outskirts of Glasgow and I rode through the moor into the country. Windmills on the Moor It was a relief to leave the city traffic and be on a road where most of the oncoming traffic was in the way of cyclists and after an initial climb to around 300m I enjoyed a beautiful downward sloping 10 miles of moorland. Read more...

Tarbert to Eaglesham

, distance: 111km, time: 7h09m , tagged: scotland2020
This morning I didn’t rush to leave the campsite, but sat and made two pots of coffee while sitting and reading Moby Dick, leaving after 9:30. This a bit late, as I knew that the next ferry would leave at 10:00, leaving me little time to make it to the ferry port. As I was cycling I calculated that I would miss the ferry, but then finally rolled into Talbert at 9:55 and realised it wasn’t too late, so I cycled as fast as possible, until I saw the ferry - which was just unloading cars, I arrived with a few minutes to spare. Read more...

Oban to Tarbert

, distance: 115km, time: 7h20m , tagged: scotland2020
The campsite provided a good nights sleep, and it wasn’t cold in the morning. I left at around 9am - I had thought that if I picked up my route that the next shop would be in 10 miles, but the campsite manager looked puzzled by this “why don’t you go to Oban, it’s only 10 minutes down the road” “No, I’m not going that way” I said. I was very confused the evening previously. Read more...

Fort William to Oban

, distance: 106km, time: 6h39m , tagged: scotland2020
Slept well in the hostel and left to find breakfast - hoping to find a café with outdoor seating, unsuccefull I picked up another unsatisying breakfast from a bakery - an egg mayonaise sandwich, danish pastry and a coffee (all too small to fill me up). One of the reasons I didn’t go further yesterday was because the next part of the cycle network required me to take a ferry. Although it would have been possible to take the main road, it was very busy and I wanted to stick to the bike route, but getting the ferry at that time in the evening didn’t appeal to me. Read more...

Inverness to Fort William (via Loch Ness)

, distance: 115km, time: 7h , tagged: scotland2020
Today was another spectacular day of cycling featuring some of the best scenery of the trip so far, and I wasn’t expecting it. In the morning I woke and checked my watch. The bunk bed was equipped with a shelf offering USB ports and a power outlet. I had plugged in my phone and battery directly above my head, and when I went to check my phone it slipped and hit me sharply on the head which is when I decided to get out of bed. Read more...

Inverness Rest Day

, distance: 116km, time: 7h28m , tagged: scotland2020
This morning I had no particular motivation to move from the bed. The thought of cycling another 150km didn’t appeal to me. So I decided to try and stay another night at the hostel. As I got out of bed I couldn’t help but notice what looked like a scab on my foot. I scraped it and it moved. It was a tick with it’s head stuck and glued under my skin. Read more...

Pitlochry to Inverness

, distance: 150km, time: 9h00m (?) , tagged: scotland2020
I fell asleep last night staring out of my open tent flap at the stars, or the aeroplanes, or whatever that bright light was which was drifting across the sky. It was cold in the morning, and I didn’t prepare myself well enough. Far colder than it was at night. So I didn’t sleep in - the cold compelled me to get out of bed and make coffee. Surveying the scene, the river had what looked like steam rising from it, there was dew on the long grass surrounding the tent and my breath was visible. Read more...

Edinburgh to Pitlochry

, distance: 148km, time: 9h20m , tagged: scotland2020
The only other guy in the room (I guess the dorms are not at full capacity due to Covid) decided to come in at midnight and start watching a TV program on his phone with the loudspeaker. Forcing me to get out of bed and ask him to stop it (because he was so engrossed that he couldn’t hear me ask from my bed). The hostel provided “take away” breakfast but let me sit down in the bar and also lent me a UK power adapter so that I could use my laptop and upload yesterdays blog post. Read more...

Seahouses to Edinburgh

, distance: 151km, time: 9h19m , tagged: scotland2020
Today was a very long day. It was a beautiful day. It was an exhausting day. I slept well in my tent last night for the time in years due to the new mattress, the night before I sat in the tent reading or otherwise staring blankly into the trees above the stream that I was camping next to sipping whiskey. In the morning I left, heading towards my provisional destination of the day before - Eyemouth. Read more...

Newcastle to Seahouses

, distance: 124km, time: 7h02m , tagged: scotland2020
I wasted the night watching a film (“Get Out”) and an episode and a half of “The Thick of It” in my cabin. I was woken at 8am by an announcement on the in-cabin PA system - we would be arriving at at 10am ship-time and breakfast would be served blah blah. I didn’t know exactly what “ship time” was but assumed it would be the same time zone as Holland - which meant I had two hours. Read more...

Haarlem to Newcastle

, distance: 18km, time: 1h , tagged: scotland2020
Slept well in the hostel but was awake at 7am, and out of bed at eight. I went downstairs to get a coffee. The reception was open but the host was busy making bread and wouldn’t serve coffee until 8:30. I sat down and started programming with bleary eyes. Finally I ordered some scrambled egg which came with the warm freshly made bread. Today I wanted to sort out my sleeping problem - I noticed a large camping shop when I came in to the town yesterday evening, so I checked out of the hostel and left my stuff “under the stairs” and left at 9:30 to find some camping gear. Read more...

Apeldoorn to Haarlem

, distance: 113.52km, time: 6h18m , tagged: scotland2020
I am now sitting outside at a pizza restuarnt in Haarlem, about 10km west of Amsterdam, and about 10km from the ferry port. I slept again badly last night, I thought I chose a quiet spot in the spacious but busy campsite (tents only). It was full people having a mostly quiet time, some spots were equipped with wood burners and it was as peaceful as it could be given maybe 100 people in a field. Read more...

Geschner to Holland (past Apeldoorn))

, distance: 116km, time: 6h18m , tagged: scotland2020
I woke up at 3am and couldn’t get back to sleep. I lay the wondering why I had woken up - my air mattress was partially deflated and my legs were cold. Neither problem seemed critical enough to interrupt my sleep. I think the cold, as mild as it was, confused my brain and prevented it from sleeping. I was sleeping naked which probably didn’t help either, so I put some shorts and my fleece on and managed to get some sleep. Read more...

Bielefeld to Geschner

, distance: 143.93km, time: 8h14m , tagged: scotland2020
I pitched my tent slowly on the green field in the campsite - I was a bit exhausted. I went to the toilet, had a cold shower (hot water costs 0.5€). As I entered the campsite I thought I saw a shop, and I made my way there to see if I could find a beer. As I passed a man was looking at me and nodded. The shop wasn’t a shop, then the man said Read more...

Man with Bicycle

, distance: 16.4km, time: 1h16m , tagged: scotland2020
note the above distance and time are by the cycle computer I was on the train most of today I had to decide where to get the train to from Berlin. I had already decided to get the train - to cut out a few days to maximize the month of vacation that I have. I had considered many things for this years tour - the original idea was to tour around the UK and visit various relations, at one point by going via. Read more...

Cycling to Scotland

, tagged: scotland2020
This year I’m cycling from Germany to Scotland. My plan is: Get a train from Berlin to somewhere in the West. Cycle to Amsterdam Get the ferry to Newcastle Cycle to Scotland … (do stuff in Scotland) Visit my brother I will leave today. This tour marks 10 years since I first left England and stepped foot in Europe. I left Bath on 30th birthday (give or take a day or two), my birthday is in 5 days from today, so this is something like the reverse operation 10 years later. Read more...

Phpactor 16

, tagged: phpactor
Release 16 (0.16.0). In total 32 tickets / cards have been worked on. Reference Finder ¶ Phpactor 15 introduced an indexer, which enabled a couple of new features. A major one is reference finding. In Phpactor, reference finding refers to finding: Class references Function references Class member (method,constant,property) references. The first two are straight-forward, the third requires additional static analysis and can be slower (we need to find all matching members, then perform some static analysis to see if the container type belongs to the class we are searching for). Read more...

Mailbox dot org

, tagged: email
I had been hosting my own email for several years. I started using Gmail in 2005 or so but the advertising really bugged me, so I thought I would host my own email - it also seemed like a cool project. But I learned that it’s not that easy. Later I heard about sovereign which is an Ansible playbook to setup your own cloud. All you need to do is buy a dedicated server (I used a Scaleway Dedibox) and run Ansible to install and configure the software. Read more...

Byte Order Mark Madness

, tagged: php
We had an issue today where a CSV file was being read via. SplFileInfo. The array keys were being inferred from the headers, and the values transformed based on rules per column. The issue was that the column was not found: // data read from CSV $data = [ 'SALUTATION' => '1', ]; var_dump($data['SALUTATION']); // UNDEFINED INDEX ERROR Very confusing! It turns out that the CSV file was prefixed with a byte order mark, which was being incorrectly parsed into the first header (SALUTATION). Read more...

Phpactor 15

, tagged: phpactor
It’s been two months since the last Phpactor release. Release 15 (0.15.0) was intended to be the release that integrated the Language Server. It has been a huge amount of work, and at least 63 tickets have been worked on. But there have also been numerous other improvements. New Documentation ¶ Phpactor now has new documentation hosted on readthedocs. The new docs can make use of the power of RST and should provide a better foundation for continuing documentation development. Read more...

Phpactor 14

, tagged: phpactor
TL;DR: See what’s new. It’s time to make a new release! Which generally involves lots of waiting for composer. So a good time to make a blog post. It’s been well over a year since I last blogged about 3 years of Phpactor. So what’s new since then? What happened in 2019? In January 2019 I really wanted to finish the Language Server implementation, and I spent lots of time working on a generic language server implementation, then the language server extension and quite a few other packages which added distinct capabilities to the server and finally it was working with completion, reference finding and hover. Read more...

Bulgaria PHP

, tagged: conference
I left the flat in a panic, I assumed I would be queuing at the airport and would need to be there 2 hours before take off. The planned journey would be a tram ride followed by a bus to the airport. I ran to the tram station, waited 10 minutes, got off the tram, realised I was one stop too early, ran to the next stop, looked around frantically for the bus station whilst trying to make sense of the map on my phone, when I found it the bus had just left and I paced up and down the pavement while people started to aggregate for the next bus in 10 minutes. Read more...

Travemunde, Rostock, Berlin

, tagged: helsinki2019
This is the last blog post of the trip. I’m on the train to Berlin and from there directly back into my normal life as I’ll go straight from the train station to the Symfony User Group meetup. I slept unbelievably well in the tent last night, I didn’t feel particularly hungry despite my inappropriate diet for the past few days, but then I hadn’t been moving or expending any energy, so what I had was likely enough to sustain me. Read more...

Tallinn to Helsinki to Travemunde

, tagged: helsinki2019
I am now in the campsite at Travemunde, which was conveniently immediately outside of the ferry port. I had originally planned to cycle directly, overnight, to Rostock (100km) and reasoned that I would arrive at 4am and be able then to get the first train to Berlin, and that the cycle ride would be good and hoped the sky would be clear, but the weather forecast was poor, and in the hours preceding the arrival it had been pouring in rain. Read more...

Tallinn

, tagged: helsinki2019
I have now stayed in Tallinn for 5 nights, stayed in two separate hostels, met lots of interesting people and have been for 4 runs of 10k or more. Time has passed quicky and I wish I could stay longer but I have to be at work in a few days. The first two nights I stayed in the Euphoria hostel, which I breifly described in the previous post - it has a drum kit, organ, piano, several guitars, microphones and amplifiers. Read more...

Võsu to Tallinn

, distance: 113km, time: 5h36m , tagged: helsinki2019
I’m sitting in the Eurphoria hostel in Tallinn, I got in around an hour and a half ago, and have briefly explored the tourist saturated center, then came back here and played guitar and piano for about an hour and a guy just came in and sat at the drums. There is all the tools required for a band in this room, which is one of the reasons I was attracted to this hostel, and I may be staying here for a week. Read more...

Tartu to Võsu

, distance: 185km, time: 8h34m , tagged: helsinki2019
I had prepared for a long day today, and after two days at the Looming hostel in Tartu I was feeling fresh and ready to go in this morning. I had had some good chats with people at the hostel, and the experience was running through my mind for the first few hours of the trip this morning. Tortu’s main square this morning The weather was fine as I left the hostel and headed down to the river, and I felt good. Read more...

Tartu

, tagged: helsinki2019
I intended to stay two nights in Tartu, but have ended up staying three. There seem to be no logical resting places for tomorrows journey within a 120km distance (other than hotels which I would consider to be beyond what I’d be happy to pay), and the next campsite is on the coast, which would be 155km - a long day. The following day I could do an even longer day and make it all the way to Talinn, which is either 100km direct, or, if following the coast (and I really should follow the coast) it’s almost 163km, 100 miles and this last act of masochism seems fitting for the last journey on this trip, although there is also an outdoor “hostel” or “retreat” in the forest outside of Tallinn which has been recommended to me twice, so that may break my journey. Read more...

Laatre to Tartu

, distance: 87km, time: 4h30m , tagged: helsinki2019
As predicted I slept terribly, falling initially to sleep but soon waking up as my head wasn’t comfortable (it was supported inappropriately on my hoody which was in turn supported by my food pannier). As usual when I realised that it was morning and I could get out of bed, falling to sleep was no longer an issue and I didn’t wake until 9am. So I slept badly and got out of bed late. Read more...

Cēsis to Laatre

, distance: 118km, time: 6h35m , tagged: helsinki2019
At the hotel I settled down with a few beers and Series 8 of of Game of Thrones, I hadn’t watched it up until this point despite being, like most other people, a big fan of the earlier seasons, but it had got progressively worse and I predicted this, the final, series would be mediocre, it wasn’t great, but none-the-less still intriguing enough that I watched 4 episodes back to back. Read more...

Riga to Cēsis

, distance: 108km, time: 6h00m , tagged: helsinki2019
Typing this in a Pizzeria as usual, but unfortunately my laptop’s power was drained s I’m typing this awkwardly on my phone. I am in Cēsis, an historical town 100km north-east of Riga. At the hostel I woke relatively late, 9:00, and was able to take advantage of the free waffles for breakfast, washing them down with a good deal of free coffee. After two days rest my arse was road worthy again. Read more...

Riga Rest Days

, tagged: helsinki2019
I don’t seem to have succeeded in integrating very well in the hostel I’ve been staying in for the past 2 days, having not really broken the ice with people in general (with some exceptions) and feeling a little depressed and drained. Most of the staff and guests are relatively young (one girl, 18, is still at high school in Italy) so maybe it’s the generation gap. I did have a good chats with a guy from Wales, and another from Helsinki. Read more...

Plavinas to Riga

, distance: 138km, time: 7h33m , tagged: helsinki2019
The road suddenly changed from a very smooth asphalt road to the worst kind of gravel road, and showed no sign of stopping. Potentially running for the remaining 50k to Riga, cars would drive past kicking dirt into the air which would sting my eyes and force me to angle my cap down to avert the dust, which consequently meant my field of vision was restricted to what was immediately in front of me. Read more...

Sudeikiai to Plavinas

, distance: 155km, time: 8h11m , tagged: helsinki2019
As normal I slept not to well on the campsite, but woke up at 06:00 and made breakfast (coffee, porridge, and some pastry things I found in a shop) and was out on the road at around 08:00 heading to the Latvian border. It looked to be another sunny day, yesterday I had worn my vest for the first time since being burnt over a week ago, and was annoyed that I had burnt again in the same place, I sprayed some sun lotion on to my back and put on my shirt instead of the vest. Read more...

Vilnius to Sudeikiai

, distance: 140km, time: 7h30m , tagged: helsinki2019
The campsite is almost empty and again it’s a big one sponsered by the EU. When I arrived at 18:00 it was empty and I thought it was closed, but I took the phone number anyway and went to the next campsite on my map 3km down the road, on arriving there I passed what seemed to be a deer enclosure and there was a huge stag sitting in the middle of it. Read more...

Rest Day

, tagged: helsinki2019
Today was the first rest day so far. I got out of bed around 8am, and had a terrible hangover. I went downstairs to the kitchen and sat down, the hostel guy was there and was preparing croissants, also there was a nice old man from South Korea. It was good chatting to both of them, the hostel guy worked in London for 2 years, and actually studied English in my hometown - Weymouth. Read more...

Aukstadvaris to Vilnius

, distance: 61.19km, time: 3h15m , tagged: helsinki2019
This was the third time camping on this trip, and the third time I had a bad night, and the third time I had blamed my sleeping mattress. On the previous tour I had a “full length” air mattress - a self inflating air mattress that stretched from my head to my feat. This was a perfect mattress, except that it had developed a micro-puncture, which seems to be undetectable (have held it underwater for 10s of minutes and no sign of air release), and after 4 hours of sleep it would deflate and I would wake and not sleep so well. Read more...

Marijampole to Aukstadvaris

, distance: 100km, time: 5h30, , tagged: helsinki2019
Me and another cyclist are the only two people on a large campsite 50km from Vilenus. Coincidentally he has cycled from Tallinn, and is also from Berlin, but is getting the plane back from Vilenus, and we’ll cycle there together tomorrow. This morning I woke and didn’t feel particularly optimistic about the route today, there was one major road heading directly to Vilenus, and I believed it was not legal to cycle on it. Read more...

Goldap to Marijampole

, distance: 110km, time: 6h01m , tagged: helsinki2019
Loud music was pounding on the street, I thought I would wait until 12, maybe it would stop, but I fell asleep before that. In the morning I made my way to the restaurant to see what wonders awaited me. It was a buffet breakfsat, the guy spoke to me in German and asked if I wanted eggs “Speigel Eier oder Rugh Eier” (and yes, I have no clue how to spell or write in German). Read more...
Previous Page 2 of 4 Next Page