Diag====| Initiating an AUTOMATIC CHECK FOR UPDATES ON PAGE LOAD wp_loaded due to FeedWordPress option = string(4) "init"
Diag====| FeedWordPress is set up to hold pings, fwp_held_ping=0
Diag| Polling feed [https://blogs.ed.ac.uk/egreen2/feed]
Diag====| HTTP [https://blogs.ed.ac.uk/egreen2/feed] ⌈ array(7) {
  ["timeout"]=>
  int(20)
  ["redirection"]=>
  int(5)
  ["headers"]=>
  array(1) {
    ["Accept"]=>
    string(185) "application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1"
  }
  ["user-agent"]=>
  string(162) "FeedWordPress/2024.1119 (aggregator:feedwordpress; WordPress/6.8.5 + SimplePie/1.8.0; Allow like Gecko; +http://feedwordpress.radgeek.com/) at blogs.ed.ac.uk/dlam"
  ["authentication"]=>
  NULL
  ["username"]=>
  string(0) ""
  ["password"]=>
  string(0) ""
}
Diag====| HTTP [https://blogs.ed.ac.uk/egreen2/feed] ⌉ array(6) {
  ["headers"]=>
  object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2408 (1) {
    ["data":protected]=>
    array(12) {
      ["content-type"]=>
      string(34) "application/rss+xml; charset=UTF-8"
      ["date"]=>
      string(29) "Mon, 18 May 2026 00:42:50 GMT"
      ["server"]=>
      string(6) "Apache"
      ["x-powered-by"]=>
      string(10) "PHP/8.3.30"
      ["expires"]=>
      string(29) "Thu, 19 Nov 1981 08:52:00 GMT"
      ["cache-control"]=>
      string(35) "no-store, no-cache, must-revalidate"
      ["pragma"]=>
      string(8) "no-cache"
      ["link"]=>
      string(67) "<https://blogs.ed.ac.uk/egreen2/wp-json/>; rel="https://api.w.org/""
      ["set-cookie"]=>
      string(132) "spo_11412_fa=28eaa669476d6d37877032232b6ac7d3; expires=Mon, 18 May 2026 01:12:50 GMT; Max-Age=1800; path=/egreen2/; Secure; HttpOnly"
      ["last-modified"]=>
      string(29) "Mon, 20 Apr 2026 09:57:28 GMT"
      ["etag"]=>
      string(34) ""4433056675204c526f9cc2cc038c81d8""
      ["vary"]=>
      string(15) "Accept-Encoding"
    }
  }
  ["body"]=>
  string(15797) "<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ed Green Blog</title>
	<atom:link href="https://blogs.ed.ac.uk/egreen2/feed/" rel="self" type="application/rss+xml" />
	<link>https://blogs.ed.ac.uk/egreen2</link>
	<description></description>
	<lastBuildDate>Mon, 20 Apr 2026 09:57:28 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>
	<item>
		<title>PHPUK 2026</title>
		<link>https://blogs.ed.ac.uk/egreen2/2026/04/17/phpuk-2026/</link>
					<comments>https://blogs.ed.ac.uk/egreen2/2026/04/17/phpuk-2026/#respond</comments>
		
		<dc:creator><![CDATA[Edward Green]]></dc:creator>
		<pubDate>Fri, 17 Apr 2026 15:08:58 +0000</pubDate>
				<category><![CDATA[Conference]]></category>
		<guid isPermaLink="false">https://blogs.ed.ac.uk/egreen2/?p=21</guid>

					<description><![CDATA[This February I was back at the PHPUK conference in London. The venue this year was 1 America Square with a historic wall through the middle of one of the rooms. There were three tracks to follow so unfortunately we couldn’t go to all the talks, but managed to cover two thirds. It Depends – […]]]></description>
										<content:encoded><![CDATA[
<p>This February I was back at the PHPUK conference in London. The venue this year was 1 America Square with a historic wall through the middle of one of the rooms. There were three tracks to follow so unfortunately we couldn’t go to all the talks, but managed to cover two thirds.</p>



<h2 class="wp-block-heading">It Depends – Gary Hockin</h2>



<p>After a short welcome to the conference (and the new venue), Gary Hockin gave a talk about how  decisions that we make every day have different outcomes based on the context. There are always trade-offs to consider for every choice we make and because one option is not chosen in one instance, it doesn’t mean it is unsuitable for all situations.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" src="about:blank" data-bs-src="https://www.youtube.com/embed/w5Ja7Gysm_w?feature=oembed" width="660" height="544" frameborder="0" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Know Your Enemies: Live Exploit of a PHP Engine Security Breach – Alexandre Daubois</h2>



<p>Alexandre presented an interesting talk on real exploits or attempted exploits in PHP. The most interesting example to me was an attempt to add malicious code that would allow executing any code on a server running PHP as long as it’s connected to the internet. This was done by interpreting a specific header on incoming requests as code to run when given a certain prefix. It even made it to a release candidate before it was noticed by other contributors. This was done by exploiting a vulnerability in the version control server that allowed the malicious actor to submit the code changes under a different user. Luckily the code was spotted and removed before becoming widely available in a full release. This also influenced the decision to move the code into GitHub, so maintainers didn’t have to worry as much about the security of the code.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" src="about:blank" data-bs-src="https://www.youtube.com/embed/jXkBWNLUO2M?feature=oembed" width="660" height="544" frameborder="0" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Packets, Protocols and PHP: Networking Fundamentals for Developers – Jessica Smith</h2>



<p>This next talk discussed what happens behind the scenes whenever a network request is made over the internet. Jessica covered a lot during the 45 minutes and even though it isn’t knowledge that I’d usually consider a key part to my job, I think it is very useful to understand what is happening in the background when users are accessing your website. It still amazes me how we can send information across the world in seconds (or less) over the internet. Even with an explanation on how data is split into packets and how they are routed, it’s still hard to comprehend.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" src="about:blank" data-bs-src="https://www.youtube.com/embed/Z-sYEwWdBrM?feature=oembed" width="660" height="544" frameborder="0" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">The Four Pillars of Observability – Florian Engelhardt</h2>



<p>Next came a guide to monitoring live applications and how to quickly find when something is wrong with Florian. I found a lot of the tips to be relevant to websites I have worked on within the university such as the Short Courses Platform (SCP). Occasionally we have a bug in the site, and it can be very difficult to find what the actual cause of it is. Using metrics, logging, tracing, and profiling we can get a better idea of what is causing an issue and why it has started happening. As a developer, I’m used to using logs and error messages to get an idea about what is going wrong when something breaks, but Florian gave some interesting ideas that aren’t completely code related like monitoring live sales (or course enrolments for the SCP) and visualising them. If the numbers start to drop rapidly, then something has probably broken which means people can’t use the website properly.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" src="about:blank" data-bs-src="https://www.youtube.com/embed/DVSq54wZL00?feature=oembed" width="660" height="544" frameborder="0" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Saving Time by Using a Debugger – Derick Rethans</h2>



<p>Derick gave a demonstration on ways to use Xdebug to improve developer efficiency. Once setup, it can be a useful tool for stepping through PHP code and inspecting the current state of the web application to find out what is happening. Personally, I have used debuggers with C# and C++ code and found it useful there since I don’t have to recompile anything to add in some logs and inspect data. In interpreted languages like PHP, this isn’t something I have considered before, however I will definitely be finding it useful in my future work. Even though some technical issues disrupted the live demonstrations, Derick still managed to inspire me to check out Xdebug for myself and use with both personal and work projects.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" src="about:blank" data-bs-src="https://www.youtube.com/embed/FsHP4zGg4Ss?feature=oembed" width="660" height="544" frameborder="0" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Stepping away from the code… but not quite… – Wim Godden</h2>



<p>This was one of my favourite talks of the day from Wim about how stakeholders in a project should approach the code, particularly emphasising when people in management or non-development roles need to <em>step away from the code</em> and let developers do their job. He talked about how people from outside of development teams, especially those with development experience, can often try to dictate the implementation of a feature rather than what the result of having that feature should be which can cause issues with development and often makes the process of adding a feature take longer. Providing high quality user stories that have good coverage of what the users need to be able to do on the application will be far more valuable to developers. He also talked about how the career progression of a developer doesn’t have to be continuously upwards within an organisation. Instead, it’s ok to move up and down or stay where we’re comfortable.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" src="about:blank" data-bs-src="https://www.youtube.com/embed/Fa2WywiwFik?feature=oembed" width="660" height="544" frameborder="0" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Escaping the Code Maze – Yannick Chenot</h2>



<p>To finish off the day, Yannick discussed how we can make our code easier to understand by reducing the assumptions that can be made. Some languages are already stricter on some of the methods of explaining code such as providing types to variables with static types, whereas languages like PHP don’t enforce many rules like this. He demonstrated a few PHP classes and how the assumptions can be reduced by making simple changes that can greatly improve the readability of the code.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" src="about:blank" data-bs-src="https://www.youtube.com/embed/0emNLJAsfcM?feature=oembed" width="660" height="544" frameborder="0" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">In conclusion</h2>



<p>There were lots of interesting topic discussed throughout the day and plenty to think about afterwards. I will definitely be looking into Xdebug and different tools for monitoring and observing web applications. I found Wim Godden’s talk about how we should see code in different roles across an organisation interesting. I’d highly recommend watching/listening to the recording as this one is also relevant to less technical people who work with developers.</p>



<h2 class="wp-block-heading">Elephants </h2>



<p>I’ve also started a collection of PHP elephants with two from this conference.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.ed.ac.uk/egreen2/2026/04/17/phpuk-2026/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PHPUK Conference 2025</title>
		<link>https://blogs.ed.ac.uk/egreen2/2025/08/19/phpuk-conference-2025/</link>
					<comments>https://blogs.ed.ac.uk/egreen2/2025/08/19/phpuk-conference-2025/#respond</comments>
		
		<dc:creator><![CDATA[Edward Green]]></dc:creator>
		<pubDate>Tue, 19 Aug 2025 11:09:19 +0000</pubDate>
				<category><![CDATA[Uncategorised]]></category>
		<guid isPermaLink="false">https://blogs.ed.ac.uk/egreen2/?p=7</guid>

					<description><![CDATA[In February, a colleague and I got the chance to attend the PHPUK conference 2025. Throughout the day, we attended talks from various contributors to the PHP community. The conference had two tracks, which allowed us to split up and cover as much as possible with plenty of breaks to discuss what we’ve learnt about. […]]]></description>
										<content:encoded><![CDATA[<p>In February, a colleague and I got the chance to attend the PHPUK conference 2025. Throughout the day, we attended talks from various contributors to the PHP community. The conference had two tracks, which allowed us to split up and cover as much as possible with plenty of breaks to discuss what we’ve learnt about.</p>
<p>Before splitting into separate tracks, Daniel Terhorst-North gave a talk on behaviour driven development (BDD) and the 20 years of history behind it. He showed how even though it was started by one person, the community has kept it going.</p>
<p>The next speaker I listened to was Wim Godden who spoke about deploying software at both small and large scales and automating the processes behind it as much as possible. He showed a real-world example of deploying software to rental lockers for a Belgium based company. They used a tool called Ansible to remotely connect to each computer and run tasks for setting up the computer, installing software, and running the company’s software that operates the lockers. This talk felt especially relevant to the Short Courses Platform I am currently working on, since we are also using Ansible to deploy the website onto multiple servers and update it when required.</p>
<p>After a quick break and discussion about the talks we’d listened to, I attended a talk about how large codebases can be compared to onions from Katy Ereira. She explained how large systems can be broken down into smaller, more understandable parts and comparing them to different parts of an onion to help understand their function.</p>
<p>Nils Adermann gave a talk on securing software supply chains. When most people add a library to their codebase, they don’t always think about the security of the library itself, and especially not the dependencies required by it. However, a dependency of a dependency of a library used for something as simple as logging messages could have a security vulnerability that affects the whole codebase. Nils talked about ways to protect against that using tools like GitHub Dependabot or Conductor, which Private Packagist is currently developing. He also revealed how many widely used and often open source libraries receive extremely little funding, which can make it difficult finding volunteers to maintain security.</p>
<p>Over lunch, we discussed the speakers we had listened to and spoke to other attendees of the conference.</p>
<p>Next was a talk from Gina Banyard about discovering edge cases in the PHP language. As a PHP core maintainer, they had an interesting perspective on how bugs are diagnosed and discussions about the expected functionality. Some examples of recently addressed bugs were demonstrated, along with how PHP now handles them.</p>
<p>After the final break, I attended a talk about OpenAPI from Lorna Mitchell, which discussed what the OpenAPI specification is and how it can benefit both developers and users of APIs. The specification assists developers in designing APIs and creating extensive documentation for them through a schema written in either JSON or YAML. Since it is language agnostic, it can be applied to any API.</p>
<p>The conference provided some interesting perspectives and ideas that I will be sharing with other colleagues and may encourage us to consider in current or future projects. Many of the talks were not just relevant to PHP, so can be applied to other projects such as the short courses platform, which already uses Ansible for deployment.</p>
<p> </p>
<p>Information about all the speakers and recordings of the talks can be found on the <a href="https://www.phpconference.co.uk/" target="_blank" rel="noopener">PHPUK Conference website</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.ed.ac.uk/egreen2/2025/08/19/phpuk-conference-2025/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
"
  ["response"]=>
  array(2) {
    ["code"]=>
    int(200)
    ["message"]=>
    string(2) "OK"
  }
  ["cookies"]=>
  array(3) {
    [0]=>
    object(WP_Http_Cookie)#2422 (7) {
      ["name"]=>
      string(9) "PHPSESSID"
      ["value"]=>
      string(26) "iefvv3dimct102n7tf79lalkeb"
      ["expires"]=>
      NULL
      ["path"]=>
      string(1) "/"
      ["domain"]=>
      string(14) "blogs.ed.ac.uk"
      ["port"]=>
      NULL
      ["host_only"]=>
      bool(true)
    }
    [1]=>
    object(WP_Http_Cookie)#2424 (7) {
      ["name"]=>
      string(12) "spo_11412_fa"
      ["value"]=>
      string(32) "28eaa669476d6d37877032232b6ac7d3"
      ["expires"]=>
      int(1779066770)
      ["path"]=>
      string(9) "/egreen2/"
      ["domain"]=>
      string(14) "blogs.ed.ac.uk"
      ["port"]=>
      NULL
      ["host_only"]=>
      bool(true)
    }
    [2]=>
    object(WP_Http_Cookie)#2423 (7) {
      ["name"]=>
      string(8) "RCKBMHKB"
      ["value"]=>
      string(85) "027ff8be59-56fd-48ZjX0SkLMQa-a9Pw1SbUEaSV5ht4oNkRHsGD1MeVWDAxcBkexrRRG3RmC899HxX3unA8"
      ["expires"]=>
      NULL
      ["path"]=>
      string(1) "/"
      ["domain"]=>
      string(14) "blogs.ed.ac.uk"
      ["port"]=>
      NULL
      ["host_only"]=>
      bool(true)
    }
  }
  ["filename"]=>
  NULL
  ["http_response"]=>
  object(WP_HTTP_Requests_Response)#2407 (5) {
    ["data"]=>
    NULL
    ["headers"]=>
    NULL
    ["status"]=>
    NULL
    ["response":protected]=>
    object(WpOrg\Requests\Response)#2420 (10) {
      ["body"]=>
      string(15797) "<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ed Green Blog</title>
	<atom:link href="https://blogs.ed.ac.uk/egreen2/feed/" rel="self" type="application/rss+xml" />
	<link>https://blogs.ed.ac.uk/egreen2</link>
	<description></description>
	<lastBuildDate>Mon, 20 Apr 2026 09:57:28 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>
	<item>
		<title>PHPUK 2026</title>
		<link>https://blogs.ed.ac.uk/egreen2/2026/04/17/phpuk-2026/</link>
					<comments>https://blogs.ed.ac.uk/egreen2/2026/04/17/phpuk-2026/#respond</comments>
		
		<dc:creator><![CDATA[Edward Green]]></dc:creator>
		<pubDate>Fri, 17 Apr 2026 15:08:58 +0000</pubDate>
				<category><![CDATA[Conference]]></category>
		<guid isPermaLink="false">https://blogs.ed.ac.uk/egreen2/?p=21</guid>

					<description><![CDATA[This February I was back at the PHPUK conference in London. The venue this year was 1 America Square with a historic wall through the middle of one of the rooms. There were three tracks to follow so unfortunately we couldn’t go to all the talks, but managed to cover two thirds. It Depends – […]]]></description>
										<content:encoded><![CDATA[
<p>This February I was back at the PHPUK conference in London. The venue this year was 1 America Square with a historic wall through the middle of one of the rooms. There were three tracks to follow so unfortunately we couldn’t go to all the talks, but managed to cover two thirds.</p>



<h2 class="wp-block-heading">It Depends – Gary Hockin</h2>



<p>After a short welcome to the conference (and the new venue), Gary Hockin gave a talk about how  decisions that we make every day have different outcomes based on the context. There are always trade-offs to consider for every choice we make and because one option is not chosen in one instance, it doesn’t mean it is unsuitable for all situations.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" src="about:blank" data-bs-src="https://www.youtube.com/embed/w5Ja7Gysm_w?feature=oembed" width="660" height="544" frameborder="0" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Know Your Enemies: Live Exploit of a PHP Engine Security Breach – Alexandre Daubois</h2>



<p>Alexandre presented an interesting talk on real exploits or attempted exploits in PHP. The most interesting example to me was an attempt to add malicious code that would allow executing any code on a server running PHP as long as it’s connected to the internet. This was done by interpreting a specific header on incoming requests as code to run when given a certain prefix. It even made it to a release candidate before it was noticed by other contributors. This was done by exploiting a vulnerability in the version control server that allowed the malicious actor to submit the code changes under a different user. Luckily the code was spotted and removed before becoming widely available in a full release. This also influenced the decision to move the code into GitHub, so maintainers didn’t have to worry as much about the security of the code.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" src="about:blank" data-bs-src="https://www.youtube.com/embed/jXkBWNLUO2M?feature=oembed" width="660" height="544" frameborder="0" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Packets, Protocols and PHP: Networking Fundamentals for Developers – Jessica Smith</h2>



<p>This next talk discussed what happens behind the scenes whenever a network request is made over the internet. Jessica covered a lot during the 45 minutes and even though it isn’t knowledge that I’d usually consider a key part to my job, I think it is very useful to understand what is happening in the background when users are accessing your website. It still amazes me how we can send information across the world in seconds (or less) over the internet. Even with an explanation on how data is split into packets and how they are routed, it’s still hard to comprehend.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" src="about:blank" data-bs-src="https://www.youtube.com/embed/Z-sYEwWdBrM?feature=oembed" width="660" height="544" frameborder="0" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">The Four Pillars of Observability – Florian Engelhardt</h2>



<p>Next came a guide to monitoring live applications and how to quickly find when something is wrong with Florian. I found a lot of the tips to be relevant to websites I have worked on within the university such as the Short Courses Platform (SCP). Occasionally we have a bug in the site, and it can be very difficult to find what the actual cause of it is. Using metrics, logging, tracing, and profiling we can get a better idea of what is causing an issue and why it has started happening. As a developer, I’m used to using logs and error messages to get an idea about what is going wrong when something breaks, but Florian gave some interesting ideas that aren’t completely code related like monitoring live sales (or course enrolments for the SCP) and visualising them. If the numbers start to drop rapidly, then something has probably broken which means people can’t use the website properly.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" src="about:blank" data-bs-src="https://www.youtube.com/embed/DVSq54wZL00?feature=oembed" width="660" height="544" frameborder="0" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Saving Time by Using a Debugger – Derick Rethans</h2>



<p>Derick gave a demonstration on ways to use Xdebug to improve developer efficiency. Once setup, it can be a useful tool for stepping through PHP code and inspecting the current state of the web application to find out what is happening. Personally, I have used debuggers with C# and C++ code and found it useful there since I don’t have to recompile anything to add in some logs and inspect data. In interpreted languages like PHP, this isn’t something I have considered before, however I will definitely be finding it useful in my future work. Even though some technical issues disrupted the live demonstrations, Derick still managed to inspire me to check out Xdebug for myself and use with both personal and work projects.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" src="about:blank" data-bs-src="https://www.youtube.com/embed/FsHP4zGg4Ss?feature=oembed" width="660" height="544" frameborder="0" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Stepping away from the code… but not quite… – Wim Godden</h2>



<p>This was one of my favourite talks of the day from Wim about how stakeholders in a project should approach the code, particularly emphasising when people in management or non-development roles need to <em>step away from the code</em> and let developers do their job. He talked about how people from outside of development teams, especially those with development experience, can often try to dictate the implementation of a feature rather than what the result of having that feature should be which can cause issues with development and often makes the process of adding a feature take longer. Providing high quality user stories that have good coverage of what the users need to be able to do on the application will be far more valuable to developers. He also talked about how the career progression of a developer doesn’t have to be continuously upwards within an organisation. Instead, it’s ok to move up and down or stay where we’re comfortable.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" src="about:blank" data-bs-src="https://www.youtube.com/embed/Fa2WywiwFik?feature=oembed" width="660" height="544" frameborder="0" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Escaping the Code Maze – Yannick Chenot</h2>



<p>To finish off the day, Yannick discussed how we can make our code easier to understand by reducing the assumptions that can be made. Some languages are already stricter on some of the methods of explaining code such as providing types to variables with static types, whereas languages like PHP don’t enforce many rules like this. He demonstrated a few PHP classes and how the assumptions can be reduced by making simple changes that can greatly improve the readability of the code.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" src="about:blank" data-bs-src="https://www.youtube.com/embed/0emNLJAsfcM?feature=oembed" width="660" height="544" frameborder="0" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">In conclusion</h2>



<p>There were lots of interesting topic discussed throughout the day and plenty to think about afterwards. I will definitely be looking into Xdebug and different tools for monitoring and observing web applications. I found Wim Godden’s talk about how we should see code in different roles across an organisation interesting. I’d highly recommend watching/listening to the recording as this one is also relevant to less technical people who work with developers.</p>



<h2 class="wp-block-heading">Elephants </h2>



<p>I’ve also started a collection of PHP elephants with two from this conference.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.ed.ac.uk/egreen2/2026/04/17/phpuk-2026/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PHPUK Conference 2025</title>
		<link>https://blogs.ed.ac.uk/egreen2/2025/08/19/phpuk-conference-2025/</link>
					<comments>https://blogs.ed.ac.uk/egreen2/2025/08/19/phpuk-conference-2025/#respond</comments>
		
		<dc:creator><![CDATA[Edward Green]]></dc:creator>
		<pubDate>Tue, 19 Aug 2025 11:09:19 +0000</pubDate>
				<category><![CDATA[Uncategorised]]></category>
		<guid isPermaLink="false">https://blogs.ed.ac.uk/egreen2/?p=7</guid>

					<description><![CDATA[In February, a colleague and I got the chance to attend the PHPUK conference 2025. Throughout the day, we attended talks from various contributors to the PHP community. The conference had two tracks, which allowed us to split up and cover as much as possible with plenty of breaks to discuss what we’ve learnt about. […]]]></description>
										<content:encoded><![CDATA[<p>In February, a colleague and I got the chance to attend the PHPUK conference 2025. Throughout the day, we attended talks from various contributors to the PHP community. The conference had two tracks, which allowed us to split up and cover as much as possible with plenty of breaks to discuss what we’ve learnt about.</p>
<p>Before splitting into separate tracks, Daniel Terhorst-North gave a talk on behaviour driven development (BDD) and the 20 years of history behind it. He showed how even though it was started by one person, the community has kept it going.</p>
<p>The next speaker I listened to was Wim Godden who spoke about deploying software at both small and large scales and automating the processes behind it as much as possible. He showed a real-world example of deploying software to rental lockers for a Belgium based company. They used a tool called Ansible to remotely connect to each computer and run tasks for setting up the computer, installing software, and running the company’s software that operates the lockers. This talk felt especially relevant to the Short Courses Platform I am currently working on, since we are also using Ansible to deploy the website onto multiple servers and update it when required.</p>
<p>After a quick break and discussion about the talks we’d listened to, I attended a talk about how large codebases can be compared to onions from Katy Ereira. She explained how large systems can be broken down into smaller, more understandable parts and comparing them to different parts of an onion to help understand their function.</p>
<p>Nils Adermann gave a talk on securing software supply chains. When most people add a library to their codebase, they don’t always think about the security of the library itself, and especially not the dependencies required by it. However, a dependency of a dependency of a library used for something as simple as logging messages could have a security vulnerability that affects the whole codebase. Nils talked about ways to protect against that using tools like GitHub Dependabot or Conductor, which Private Packagist is currently developing. He also revealed how many widely used and often open source libraries receive extremely little funding, which can make it difficult finding volunteers to maintain security.</p>
<p>Over lunch, we discussed the speakers we had listened to and spoke to other attendees of the conference.</p>
<p>Next was a talk from Gina Banyard about discovering edge cases in the PHP language. As a PHP core maintainer, they had an interesting perspective on how bugs are diagnosed and discussions about the expected functionality. Some examples of recently addressed bugs were demonstrated, along with how PHP now handles them.</p>
<p>After the final break, I attended a talk about OpenAPI from Lorna Mitchell, which discussed what the OpenAPI specification is and how it can benefit both developers and users of APIs. The specification assists developers in designing APIs and creating extensive documentation for them through a schema written in either JSON or YAML. Since it is language agnostic, it can be applied to any API.</p>
<p>The conference provided some interesting perspectives and ideas that I will be sharing with other colleagues and may encourage us to consider in current or future projects. Many of the talks were not just relevant to PHP, so can be applied to other projects such as the short courses platform, which already uses Ansible for deployment.</p>
<p> </p>
<p>Information about all the speakers and recordings of the talks can be found on the <a href="https://www.phpconference.co.uk/" target="_blank" rel="noopener">PHPUK Conference website</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.ed.ac.uk/egreen2/2025/08/19/phpuk-conference-2025/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
"
      ["raw"]=>
      string(16434) "HTTP/1.1 200 OK
Content-Type: application/rss+xml; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Date: Mon, 18 May 2026 00:42:50 GMT
Server: Apache
X-Powered-By: PHP/8.3.30
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Link: <https://blogs.ed.ac.uk/egreen2/wp-json/>; rel="https://api.w.org/"
Set-Cookie: spo_11412_fa=28eaa669476d6d37877032232b6ac7d3; expires=Mon, 18 May 2026 01:12:50 GMT; Max-Age=1800; path=/egreen2/; Secure; HttpOnly
Last-Modified: Mon, 20 Apr 2026 09:57:28 GMT
ETag: "4433056675204c526f9cc2cc038c81d8"
Vary: Accept-Encoding

<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ed Green Blog</title>
	<atom:link href="https://blogs.ed.ac.uk/egreen2/feed/" rel="self" type="application/rss+xml" />
	<link>https://blogs.ed.ac.uk/egreen2</link>
	<description></description>
	<lastBuildDate>Mon, 20 Apr 2026 09:57:28 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>
	<item>
		<title>PHPUK 2026</title>
		<link>https://blogs.ed.ac.uk/egreen2/2026/04/17/phpuk-2026/</link>
					<comments>https://blogs.ed.ac.uk/egreen2/2026/04/17/phpuk-2026/#respond</comments>
		
		<dc:creator><![CDATA[Edward Green]]></dc:creator>
		<pubDate>Fri, 17 Apr 2026 15:08:58 +0000</pubDate>
				<category><![CDATA[Conference]]></category>
		<guid isPermaLink="false">https://blogs.ed.ac.uk/egreen2/?p=21</guid>

					<description><![CDATA[This February I was back at the PHPUK conference in London. The venue this year was 1 America Square with a historic wall through the middle of one of the rooms. There were three tracks to follow so unfortunately we couldn’t go to all the talks, but managed to cover two thirds. It Depends – […]]]></description>
										<content:encoded><![CDATA[
<p>This February I was back at the PHPUK conference in London. The venue this year was 1 America Square with a historic wall through the middle of one of the rooms. There were three tracks to follow so unfortunately we couldn’t go to all the talks, but managed to cover two thirds.</p>



<h2 class="wp-block-heading">It Depends – Gary Hockin</h2>



<p>After a short welcome to the conference (and the new venue), Gary Hockin gave a talk about how  decisions that we make every day have different outcomes based on the context. There are always trade-offs to consider for every choice we make and because one option is not chosen in one instance, it doesn’t mean it is unsuitable for all situations.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" src="about:blank" data-bs-src="https://www.youtube.com/embed/w5Ja7Gysm_w?feature=oembed" width="660" height="544" frameborder="0" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Know Your Enemies: Live Exploit of a PHP Engine Security Breach – Alexandre Daubois</h2>



<p>Alexandre presented an interesting talk on real exploits or attempted exploits in PHP. The most interesting example to me was an attempt to add malicious code that would allow executing any code on a server running PHP as long as it’s connected to the internet. This was done by interpreting a specific header on incoming requests as code to run when given a certain prefix. It even made it to a release candidate before it was noticed by other contributors. This was done by exploiting a vulnerability in the version control server that allowed the malicious actor to submit the code changes under a different user. Luckily the code was spotted and removed before becoming widely available in a full release. This also influenced the decision to move the code into GitHub, so maintainers didn’t have to worry as much about the security of the code.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" src="about:blank" data-bs-src="https://www.youtube.com/embed/jXkBWNLUO2M?feature=oembed" width="660" height="544" frameborder="0" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Packets, Protocols and PHP: Networking Fundamentals for Developers – Jessica Smith</h2>



<p>This next talk discussed what happens behind the scenes whenever a network request is made over the internet. Jessica covered a lot during the 45 minutes and even though it isn’t knowledge that I’d usually consider a key part to my job, I think it is very useful to understand what is happening in the background when users are accessing your website. It still amazes me how we can send information across the world in seconds (or less) over the internet. Even with an explanation on how data is split into packets and how they are routed, it’s still hard to comprehend.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" src="about:blank" data-bs-src="https://www.youtube.com/embed/Z-sYEwWdBrM?feature=oembed" width="660" height="544" frameborder="0" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">The Four Pillars of Observability – Florian Engelhardt</h2>



<p>Next came a guide to monitoring live applications and how to quickly find when something is wrong with Florian. I found a lot of the tips to be relevant to websites I have worked on within the university such as the Short Courses Platform (SCP). Occasionally we have a bug in the site, and it can be very difficult to find what the actual cause of it is. Using metrics, logging, tracing, and profiling we can get a better idea of what is causing an issue and why it has started happening. As a developer, I’m used to using logs and error messages to get an idea about what is going wrong when something breaks, but Florian gave some interesting ideas that aren’t completely code related like monitoring live sales (or course enrolments for the SCP) and visualising them. If the numbers start to drop rapidly, then something has probably broken which means people can’t use the website properly.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" src="about:blank" data-bs-src="https://www.youtube.com/embed/DVSq54wZL00?feature=oembed" width="660" height="544" frameborder="0" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Saving Time by Using a Debugger – Derick Rethans</h2>



<p>Derick gave a demonstration on ways to use Xdebug to improve developer efficiency. Once setup, it can be a useful tool for stepping through PHP code and inspecting the current state of the web application to find out what is happening. Personally, I have used debuggers with C# and C++ code and found it useful there since I don’t have to recompile anything to add in some logs and inspect data. In interpreted languages like PHP, this isn’t something I have considered before, however I will definitely be finding it useful in my future work. Even though some technical issues disrupted the live demonstrations, Derick still managed to inspire me to check out Xdebug for myself and use with both personal and work projects.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" src="about:blank" data-bs-src="https://www.youtube.com/embed/FsHP4zGg4Ss?feature=oembed" width="660" height="544" frameborder="0" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Stepping away from the code… but not quite… – Wim Godden</h2>



<p>This was one of my favourite talks of the day from Wim about how stakeholders in a project should approach the code, particularly emphasising when people in management or non-development roles need to <em>step away from the code</em> and let developers do their job. He talked about how people from outside of development teams, especially those with development experience, can often try to dictate the implementation of a feature rather than what the result of having that feature should be which can cause issues with development and often makes the process of adding a feature take longer. Providing high quality user stories that have good coverage of what the users need to be able to do on the application will be far more valuable to developers. He also talked about how the career progression of a developer doesn’t have to be continuously upwards within an organisation. Instead, it’s ok to move up and down or stay where we’re comfortable.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" src="about:blank" data-bs-src="https://www.youtube.com/embed/Fa2WywiwFik?feature=oembed" width="660" height="544" frameborder="0" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Escaping the Code Maze – Yannick Chenot</h2>



<p>To finish off the day, Yannick discussed how we can make our code easier to understand by reducing the assumptions that can be made. Some languages are already stricter on some of the methods of explaining code such as providing types to variables with static types, whereas languages like PHP don’t enforce many rules like this. He demonstrated a few PHP classes and how the assumptions can be reduced by making simple changes that can greatly improve the readability of the code.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" src="about:blank" data-bs-src="https://www.youtube.com/embed/0emNLJAsfcM?feature=oembed" width="660" height="544" frameborder="0" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">In conclusion</h2>



<p>There were lots of interesting topic discussed throughout the day and plenty to think about afterwards. I will definitely be looking into Xdebug and different tools for monitoring and observing web applications. I found Wim Godden’s talk about how we should see code in different roles across an organisation interesting. I’d highly recommend watching/listening to the recording as this one is also relevant to less technical people who work with developers.</p>



<h2 class="wp-block-heading">Elephants </h2>



<p>I’ve also started a collection of PHP elephants with two from this conference.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.ed.ac.uk/egreen2/2026/04/17/phpuk-2026/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PHPUK Conference 2025</title>
		<link>https://blogs.ed.ac.uk/egreen2/2025/08/19/phpuk-conference-2025/</link>
					<comments>https://blogs.ed.ac.uk/egreen2/2025/08/19/phpuk-conference-2025/#respond</comments>
		
		<dc:creator><![CDATA[Edward Green]]></dc:creator>
		<pubDate>Tue, 19 Aug 2025 11:09:19 +0000</pubDate>
				<category><![CDATA[Uncategorised]]></category>
		<guid isPermaLink="false">https://blogs.ed.ac.uk/egreen2/?p=7</guid>

					<description><![CDATA[In February, a colleague and I got the chance to attend the PHPUK conference 2025. Throughout the day, we attended talks from various contributors to the PHP community. The conference had two tracks, which allowed us to split up and cover as much as possible with plenty of breaks to discuss what we’ve learnt about. […]]]></description>
										<content:encoded><![CDATA[<p>In February, a colleague and I got the chance to attend the PHPUK conference 2025. Throughout the day, we attended talks from various contributors to the PHP community. The conference had two tracks, which allowed us to split up and cover as much as possible with plenty of breaks to discuss what we’ve learnt about.</p>
<p>Before splitting into separate tracks, Daniel Terhorst-North gave a talk on behaviour driven development (BDD) and the 20 years of history behind it. He showed how even though it was started by one person, the community has kept it going.</p>
<p>The next speaker I listened to was Wim Godden who spoke about deploying software at both small and large scales and automating the processes behind it as much as possible. He showed a real-world example of deploying software to rental lockers for a Belgium based company. They used a tool called Ansible to remotely connect to each computer and run tasks for setting up the computer, installing software, and running the company’s software that operates the lockers. This talk felt especially relevant to the Short Courses Platform I am currently working on, since we are also using Ansible to deploy the website onto multiple servers and update it when required.</p>
<p>After a quick break and discussion about the talks we’d listened to, I attended a talk about how large codebases can be compared to onions from Katy Ereira. She explained how large systems can be broken down into smaller, more understandable parts and comparing them to different parts of an onion to help understand their function.</p>
<p>Nils Adermann gave a talk on securing software supply chains. When most people add a library to their codebase, they don’t always think about the security of the library itself, and especially not the dependencies required by it. However, a dependency of a dependency of a library used for something as simple as logging messages could have a security vulnerability that affects the whole codebase. Nils talked about ways to protect against that using tools like GitHub Dependabot or Conductor, which Private Packagist is currently developing. He also revealed how many widely used and often open source libraries receive extremely little funding, which can make it difficult finding volunteers to maintain security.</p>
<p>Over lunch, we discussed the speakers we had listened to and spoke to other attendees of the conference.</p>
<p>Next was a talk from Gina Banyard about discovering edge cases in the PHP language. As a PHP core maintainer, they had an interesting perspective on how bugs are diagnosed and discussions about the expected functionality. Some examples of recently addressed bugs were demonstrated, along with how PHP now handles them.</p>
<p>After the final break, I attended a talk about OpenAPI from Lorna Mitchell, which discussed what the OpenAPI specification is and how it can benefit both developers and users of APIs. The specification assists developers in designing APIs and creating extensive documentation for them through a schema written in either JSON or YAML. Since it is language agnostic, it can be applied to any API.</p>
<p>The conference provided some interesting perspectives and ideas that I will be sharing with other colleagues and may encourage us to consider in current or future projects. Many of the talks were not just relevant to PHP, so can be applied to other projects such as the short courses platform, which already uses Ansible for deployment.</p>
<p> </p>
<p>Information about all the speakers and recordings of the talks can be found on the <a href="https://www.phpconference.co.uk/" target="_blank" rel="noopener">PHPUK Conference website</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.ed.ac.uk/egreen2/2025/08/19/phpuk-conference-2025/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
"
      ["headers"]=>
      object(WpOrg\Requests\Response\Headers)#2419 (1) {
        ["data":protected]=>
        array(12) {
          ["content-type"]=>
          array(1) {
            [0]=>
            string(34) "application/rss+xml; charset=UTF-8"
          }
          ["date"]=>
          array(1) {
            [0]=>
            string(29) "Mon, 18 May 2026 00:42:50 GMT"
          }
          ["server"]=>
          array(1) {
            [0]=>
            string(6) "Apache"
          }
          ["x-powered-by"]=>
          array(1) {
            [0]=>
            string(10) "PHP/8.3.30"
          }
          ["expires"]=>
          array(1) {
            [0]=>
            string(29) "Thu, 19 Nov 1981 08:52:00 GMT"
          }
          ["cache-control"]=>
          array(1) {
            [0]=>
            string(35) "no-store, no-cache, must-revalidate"
          }
          ["pragma"]=>
          array(1) {
            [0]=>
            string(8) "no-cache"
          }
          ["link"]=>
          array(1) {
            [0]=>
            string(67) "<https://blogs.ed.ac.uk/egreen2/wp-json/>; rel="https://api.w.org/""
          }
          ["set-cookie"]=>
          array(1) {
            [0]=>
            string(132) "spo_11412_fa=28eaa669476d6d37877032232b6ac7d3; expires=Mon, 18 May 2026 01:12:50 GMT; Max-Age=1800; path=/egreen2/; Secure; HttpOnly"
          }
          ["last-modified"]=>
          array(1) {
            [0]=>
            string(29) "Mon, 20 Apr 2026 09:57:28 GMT"
          }
          ["etag"]=>
          array(1) {
            [0]=>
            string(34) ""4433056675204c526f9cc2cc038c81d8""
          }
          ["vary"]=>
          array(1) {
            [0]=>
            string(15) "Accept-Encoding"
          }
        }
      }
      ["status_code"]=>
      int(200)
      ["protocol_version"]=>
      float(1.1)
      ["success"]=>
      bool(true)
      ["redirects"]=>
      int(1)
      ["url"]=>
      string(36) "https://blogs.ed.ac.uk/egreen2/feed/"
      ["history"]=>
      array(1) {
        [0]=>
        object(WpOrg\Requests\Response)#2409 (10) {
          ["body"]=>
          string(0) ""
          ["raw"]=>
          string(834) "HTTP/1.1 301 Moved Permanently
Content-Type: application/rss+xml; charset=UTF-8
Content-Length: 0
Connection: close
Date: Mon, 18 May 2026 00:42:49 GMT
Server: Apache
X-Powered-By: PHP/8.3.30
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
X-Redirect-By: WordPress
Set-Cookie: PHPSESSID=iefvv3dimct102n7tf79lalkeb; path=/; secure; HttpOnly
Set-Cookie: spo_11412_fa=28eaa669476d6d37877032232b6ac7d3; expires=Mon, 18 May 2026 01:12:50 GMT; Max-Age=1800; path=/egreen2/; Secure; HttpOnly
Last-Modified: Mon, 20 Apr 2026 09:57:28 GMT
ETag: "4433056675204c526f9cc2cc038c81d8"
Location: https://blogs.ed.ac.uk/egreen2/feed/
Set-Cookie: RCKBMHKB=027ff8be59-56fd-48ZjX0SkLMQa-a9Pw1SbUEaSV5ht4oNkRHsGD1MeVWDAxcBkexrRRG3RmC899HxX3unA8; path=/; SameSite=None; Secure

"
          ["headers"]=>
          object(WpOrg\Requests\Response\Headers)#2410 (1) {
            ["data":protected]=>
            array(13) {
              ["content-type"]=>
              array(1) {
                [0]=>
                string(34) "application/rss+xml; charset=UTF-8"
              }
              ["content-length"]=>
              array(1) {
                [0]=>
                string(1) "0"
              }
              ["date"]=>
              array(1) {
                [0]=>
                string(29) "Mon, 18 May 2026 00:42:49 GMT"
              }
              ["server"]=>
              array(1) {
                [0]=>
                string(6) "Apache"
              }
              ["x-powered-by"]=>
              array(1) {
                [0]=>
                string(10) "PHP/8.3.30"
              }
              ["expires"]=>
              array(1) {
                [0]=>
                string(29) "Thu, 19 Nov 1981 08:52:00 GMT"
              }
              ["cache-control"]=>
              array(1) {
                [0]=>
                string(35) "no-store, no-cache, must-revalidate"
              }
              ["pragma"]=>
              array(1) {
                [0]=>
                string(8) "no-cache"
              }
              ["x-redirect-by"]=>
              array(1) {
                [0]=>
                string(9) "WordPress"
              }
              ["set-cookie"]=>
              array(3) {
                [0]=>
                string(62) "PHPSESSID=iefvv3dimct102n7tf79lalkeb; path=/; secure; HttpOnly"
                [1]=>
                string(132) "spo_11412_fa=28eaa669476d6d37877032232b6ac7d3; expires=Mon, 18 May 2026 01:12:50 GMT; Max-Age=1800; path=/egreen2/; Secure; HttpOnly"
                [2]=>
                string(125) "RCKBMHKB=027ff8be59-56fd-48ZjX0SkLMQa-a9Pw1SbUEaSV5ht4oNkRHsGD1MeVWDAxcBkexrRRG3RmC899HxX3unA8; path=/; SameSite=None; Secure"
              }
              ["last-modified"]=>
              array(1) {
                [0]=>
                string(29) "Mon, 20 Apr 2026 09:57:28 GMT"
              }
              ["etag"]=>
              array(1) {
                [0]=>
                string(34) ""4433056675204c526f9cc2cc038c81d8""
              }
              ["location"]=>
              array(1) {
                [0]=>
                string(36) "https://blogs.ed.ac.uk/egreen2/feed/"
              }
            }
          }
          ["status_code"]=>
          int(301)
          ["protocol_version"]=>
          float(1.1)
          ["success"]=>
          bool(false)
          ["redirects"]=>
          int(0)
          ["url"]=>
          string(35) "https://blogs.ed.ac.uk/egreen2/feed"
          ["history"]=>
          array(0) {
          }
          ["cookies"]=>
          object(WpOrg\Requests\Cookie\Jar)#2406 (1) {
            ["cookies":protected]=>
            array(3) {
              ["PHPSESSID"]=>
              object(WpOrg\Requests\Cookie)#2414 (5) {
                ["name"]=>
                string(9) "PHPSESSID"
                ["value"]=>
                string(26) "iefvv3dimct102n7tf79lalkeb"
                ["attributes"]=>
                object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2413 (1) {
                  ["data":protected]=>
                  array(4) {
                    ["path"]=>
                    string(1) "/"
                    ["secure"]=>
                    bool(true)
                    ["httponly"]=>
                    bool(true)
                    ["domain"]=>
                    string(14) "blogs.ed.ac.uk"
                  }
                }
                ["flags"]=>
                array(4) {
                  ["creation"]=>
                  int(1779064970)
                  ["last-access"]=>
                  int(1779064970)
                  ["persistent"]=>
                  bool(false)
                  ["host-only"]=>
                  bool(true)
                }
                ["reference_time"]=>
                int(1779064970)
              }
              ["spo_11412_fa"]=>
              object(WpOrg\Requests\Cookie)#2415 (5) {
                ["name"]=>
                string(12) "spo_11412_fa"
                ["value"]=>
                string(32) "28eaa669476d6d37877032232b6ac7d3"
                ["attributes"]=>
                object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2421 (1) {
                  ["data":protected]=>
                  array(6) {
                    ["expires"]=>
                    int(1779066770)
                    ["max-age"]=>
                    int(1779066770)
                    ["path"]=>
                    string(9) "/egreen2/"
                    ["secure"]=>
                    bool(true)
                    ["httponly"]=>
                    bool(true)
                    ["domain"]=>
                    string(14) "blogs.ed.ac.uk"
                  }
                }
                ["flags"]=>
                array(4) {
                  ["creation"]=>
                  int(1779064970)
                  ["last-access"]=>
                  int(1779064970)
                  ["persistent"]=>
                  bool(false)
                  ["host-only"]=>
                  bool(true)
                }
                ["reference_time"]=>
                int(1779064970)
              }
              ["RCKBMHKB"]=>
              object(WpOrg\Requests\Cookie)#2417 (5) {
                ["name"]=>
                string(8) "RCKBMHKB"
                ["value"]=>
                string(85) "027ff8be59-56fd-48ZjX0SkLMQa-a9Pw1SbUEaSV5ht4oNkRHsGD1MeVWDAxcBkexrRRG3RmC899HxX3unA8"
                ["attributes"]=>
                object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2418 (1) {
                  ["data":protected]=>
                  array(4) {
                    ["path"]=>
                    string(1) "/"
                    ["samesite"]=>
                    string(4) "None"
                    ["secure"]=>
                    bool(true)
                    ["domain"]=>
                    string(14) "blogs.ed.ac.uk"
                  }
                }
                ["flags"]=>
                array(4) {
                  ["creation"]=>
                  int(1779064970)
                  ["last-access"]=>
                  int(1779064970)
                  ["persistent"]=>
                  bool(false)
                  ["host-only"]=>
                  bool(true)
                }
                ["reference_time"]=>
                int(1779064970)
              }
            }
          }
        }
      }
      ["cookies"]=>
      object(WpOrg\Requests\Cookie\Jar)#2406 (1) {
        ["cookies":protected]=>
        array(3) {
          ["PHPSESSID"]=>
          object(WpOrg\Requests\Cookie)#2414 (5) {
            ["name"]=>
            string(9) "PHPSESSID"
            ["value"]=>
            string(26) "iefvv3dimct102n7tf79lalkeb"
            ["attributes"]=>
            object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2413 (1) {
              ["data":protected]=>
              array(4) {
                ["path"]=>
                string(1) "/"
                ["secure"]=>
                bool(true)
                ["httponly"]=>
                bool(true)
                ["domain"]=>
                string(14) "blogs.ed.ac.uk"
              }
            }
            ["flags"]=>
            array(4) {
              ["creation"]=>
              int(1779064970)
              ["last-access"]=>
              int(1779064970)
              ["persistent"]=>
              bool(false)
              ["host-only"]=>
              bool(true)
            }
            ["reference_time"]=>
            int(1779064970)
          }
          ["spo_11412_fa"]=>
          object(WpOrg\Requests\Cookie)#2415 (5) {
            ["name"]=>
            string(12) "spo_11412_fa"
            ["value"]=>
            string(32) "28eaa669476d6d37877032232b6ac7d3"
            ["attributes"]=>
            object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2421 (1) {
              ["data":protected]=>
              array(6) {
                ["expires"]=>
                int(1779066770)
                ["max-age"]=>
                int(1779066770)
                ["path"]=>
                string(9) "/egreen2/"
                ["secure"]=>
                bool(true)
                ["httponly"]=>
                bool(true)
                ["domain"]=>
                string(14) "blogs.ed.ac.uk"
              }
            }
            ["flags"]=>
            array(4) {
              ["creation"]=>
              int(1779064970)
              ["last-access"]=>
              int(1779064970)
              ["persistent"]=>
              bool(false)
              ["host-only"]=>
              bool(true)
            }
            ["reference_time"]=>
            int(1779064970)
          }
          ["RCKBMHKB"]=>
          object(WpOrg\Requests\Cookie)#2417 (5) {
            ["name"]=>
            string(8) "RCKBMHKB"
            ["value"]=>
            string(85) "027ff8be59-56fd-48ZjX0SkLMQa-a9Pw1SbUEaSV5ht4oNkRHsGD1MeVWDAxcBkexrRRG3RmC899HxX3unA8"
            ["attributes"]=>
            object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2418 (1) {
              ["data":protected]=>
              array(4) {
                ["path"]=>
                string(1) "/"
                ["samesite"]=>
                string(4) "None"
                ["secure"]=>
                bool(true)
                ["domain"]=>
                string(14) "blogs.ed.ac.uk"
              }
            }
            ["flags"]=>
            array(4) {
              ["creation"]=>
              int(1779064970)
              ["last-access"]=>
              int(1779064970)
              ["persistent"]=>
              bool(false)
              ["host-only"]=>
              bool(true)
            }
            ["reference_time"]=>
            int(1779064970)
          }
        }
      }
    }
    ["filename":protected]=>
    NULL
  }
}
Diag| Considering item [https://blogs.ed.ac.uk/egreen2/?p=21] "PHPUK 2026"
Diag========| SQL: SELECT   wp_30_posts.ID, wp_30_posts.guid, wp_30_posts.post_modified_gmt, wp_30_posts.post_name
					 FROM wp_30_posts  LEFT JOIN wp_30_postmeta EO_META ON EO_META.meta_key = 'ease_only' AND EO_META.post_id = wp_30_posts.ID 
					 WHERE 1=1  AND ((guid = 'https://blogs.ed.ac.uk/egreen2/?p=21'))
					 
					 ORDER BY wp_30_posts.post_date DESC
					 
Diag====| Item [https://blogs.ed.ac.uk/egreen2/?p=21] "PHPUK 2026" is a duplicate of an existing post.
Diag| Considering item [https://blogs.ed.ac.uk/egreen2/?p=7] "PHPUK Conference 2025"
Diag========| SQL: SELECT   wp_30_posts.ID, wp_30_posts.guid, wp_30_posts.post_modified_gmt, wp_30_posts.post_name
					 FROM wp_30_posts  LEFT JOIN wp_30_postmeta EO_META ON EO_META.meta_key = 'ease_only' AND EO_META.post_id = wp_30_posts.ID 
					 WHERE 1=1  AND ((guid = 'https://blogs.ed.ac.uk/egreen2/?p=7'))
					 
					 ORDER BY wp_30_posts.post_date DESC
					 
Diag====| Item [https://blogs.ed.ac.uk/egreen2/?p=7] "PHPUK Conference 2025" is a NEW POST.
Diag========| CHECK existence of category: "Uncategorised" with result: null
Diag========| CHECK existence of post_tag: "Uncategorised" with result: null
Diag========| CHECKED familiarity of term "Uncategorised" across {"1":"category","2":"post_tag"} with result: false
Diag====| Assigned category "Uncategorised" by feed; checking {"1":"category","2":"post_tag"} with result: null
Diag====| Category: MAPPED term names ["Uncategorised"] to IDs: null
Diag====| Category: MAPPED term names [] to IDs: null
tthompso – Digital Learning Applications and Media
Any views expressed within media held on this service are those of the contributors, should not be taken as approved or endorsed by the University, and do not necessarily reflect the views of the University in respect of any particular issue.

Author: tthompso

I’m Tallulah, and this summer I am working as the Lecture Recording Data intern. My job involves working on ways to obtain and analyse data from lecture recordings.   Recording lectures has many benefits, which include improving accessibility by providing lectures in an alternative format, giving students a way to look back on previous lectures as […]

Diag| Memory: Current usage: 7 MB
Diag| Memory: Peak usage: 8 MB
css.php

Report this page

To report inappropriate content on this page, please use the form below. Upon receiving your report, we will be in touch as per the Take Down Policy of the service.

Please note that personal data collected through this form is used and stored for the purposes of processing this report and communication with you.

If you are unable to report a concern about content via this form please contact the Service Owner.

Please enter an email address you wish to be contacted on. Please describe the unacceptable content in sufficient detail to allow us to locate it, and why you consider it to be unacceptable.
By submitting this report, you accept that it is accurate and that fraudulent or nuisance complaints may result in action by the University.

  Cancel