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)#2418 (1) {
    ["data":protected]=>
    array(12) {
      ["content-type"]=>
      string(34) "application/rss+xml; charset=UTF-8"
      ["date"]=>
      string(29) "Fri, 01 May 2026 11:59:16 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=Fri, 01 May 2026 12:29:16 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)#2432 (7) {
      ["name"]=>
      string(9) "PHPSESSID"
      ["value"]=>
      string(26) "1aolfgu4pqp18kv6hge2t0q230"
      ["expires"]=>
      NULL
      ["path"]=>
      string(1) "/"
      ["domain"]=>
      string(14) "blogs.ed.ac.uk"
      ["port"]=>
      NULL
      ["host_only"]=>
      bool(true)
    }
    [1]=>
    object(WP_Http_Cookie)#2434 (7) {
      ["name"]=>
      string(12) "spo_11412_fa"
      ["value"]=>
      string(32) "28eaa669476d6d37877032232b6ac7d3"
      ["expires"]=>
      int(1777638556)
      ["path"]=>
      string(9) "/egreen2/"
      ["domain"]=>
      string(14) "blogs.ed.ac.uk"
      ["port"]=>
      NULL
      ["host_only"]=>
      bool(true)
    }
    [2]=>
    object(WP_Http_Cookie)#2433 (7) {
      ["name"]=>
      string(8) "RCKBMHKB"
      ["value"]=>
      string(85) "027ff8be59-56fd-48Ug3xQ4dXbH8852TKcLeev05lO8CAuJ6TEDzni3bbITQe6DQ3-_vnMgQUwtj3ql6vEPk"
      ["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)#2417 (5) {
    ["data"]=>
    NULL
    ["headers"]=>
    NULL
    ["status"]=>
    NULL
    ["response":protected]=>
    object(WpOrg\Requests\Response)#2430 (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: Fri, 01 May 2026 11:59:16 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=Fri, 01 May 2026 12:29:16 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)#2429 (1) {
        ["data":protected]=>
        array(12) {
          ["content-type"]=>
          array(1) {
            [0]=>
            string(34) "application/rss+xml; charset=UTF-8"
          }
          ["date"]=>
          array(1) {
            [0]=>
            string(29) "Fri, 01 May 2026 11:59:16 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=Fri, 01 May 2026 12:29:16 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)#2419 (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: Fri, 01 May 2026 11:59:15 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=1aolfgu4pqp18kv6hge2t0q230; path=/; secure; HttpOnly
Set-Cookie: spo_11412_fa=28eaa669476d6d37877032232b6ac7d3; expires=Fri, 01 May 2026 12:29:15 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-48Ug3xQ4dXbH8852TKcLeev05lO8CAuJ6TEDzni3bbITQe6DQ3-_vnMgQUwtj3ql6vEPk; path=/; SameSite=None; Secure

"
          ["headers"]=>
          object(WpOrg\Requests\Response\Headers)#2420 (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) "Fri, 01 May 2026 11:59:15 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=1aolfgu4pqp18kv6hge2t0q230; path=/; secure; HttpOnly"
                [1]=>
                string(132) "spo_11412_fa=28eaa669476d6d37877032232b6ac7d3; expires=Fri, 01 May 2026 12:29:15 GMT; Max-Age=1800; path=/egreen2/; Secure; HttpOnly"
                [2]=>
                string(125) "RCKBMHKB=027ff8be59-56fd-48Ug3xQ4dXbH8852TKcLeev05lO8CAuJ6TEDzni3bbITQe6DQ3-_vnMgQUwtj3ql6vEPk; 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)#2416 (1) {
            ["cookies":protected]=>
            array(3) {
              ["PHPSESSID"]=>
              object(WpOrg\Requests\Cookie)#2424 (5) {
                ["name"]=>
                string(9) "PHPSESSID"
                ["value"]=>
                string(26) "1aolfgu4pqp18kv6hge2t0q230"
                ["attributes"]=>
                object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2423 (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(1777636755)
                  ["last-access"]=>
                  int(1777636755)
                  ["persistent"]=>
                  bool(false)
                  ["host-only"]=>
                  bool(true)
                }
                ["reference_time"]=>
                int(1777636755)
              }
              ["spo_11412_fa"]=>
              object(WpOrg\Requests\Cookie)#2425 (5) {
                ["name"]=>
                string(12) "spo_11412_fa"
                ["value"]=>
                string(32) "28eaa669476d6d37877032232b6ac7d3"
                ["attributes"]=>
                object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2431 (1) {
                  ["data":protected]=>
                  array(6) {
                    ["expires"]=>
                    int(1777638556)
                    ["max-age"]=>
                    int(1777638556)
                    ["path"]=>
                    string(9) "/egreen2/"
                    ["secure"]=>
                    bool(true)
                    ["httponly"]=>
                    bool(true)
                    ["domain"]=>
                    string(14) "blogs.ed.ac.uk"
                  }
                }
                ["flags"]=>
                array(4) {
                  ["creation"]=>
                  int(1777636756)
                  ["last-access"]=>
                  int(1777636756)
                  ["persistent"]=>
                  bool(false)
                  ["host-only"]=>
                  bool(true)
                }
                ["reference_time"]=>
                int(1777636756)
              }
              ["RCKBMHKB"]=>
              object(WpOrg\Requests\Cookie)#2427 (5) {
                ["name"]=>
                string(8) "RCKBMHKB"
                ["value"]=>
                string(85) "027ff8be59-56fd-48Ug3xQ4dXbH8852TKcLeev05lO8CAuJ6TEDzni3bbITQe6DQ3-_vnMgQUwtj3ql6vEPk"
                ["attributes"]=>
                object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2428 (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(1777636756)
                  ["last-access"]=>
                  int(1777636756)
                  ["persistent"]=>
                  bool(false)
                  ["host-only"]=>
                  bool(true)
                }
                ["reference_time"]=>
                int(1777636756)
              }
            }
          }
        }
      }
      ["cookies"]=>
      object(WpOrg\Requests\Cookie\Jar)#2416 (1) {
        ["cookies":protected]=>
        array(3) {
          ["PHPSESSID"]=>
          object(WpOrg\Requests\Cookie)#2424 (5) {
            ["name"]=>
            string(9) "PHPSESSID"
            ["value"]=>
            string(26) "1aolfgu4pqp18kv6hge2t0q230"
            ["attributes"]=>
            object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2423 (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(1777636755)
              ["last-access"]=>
              int(1777636755)
              ["persistent"]=>
              bool(false)
              ["host-only"]=>
              bool(true)
            }
            ["reference_time"]=>
            int(1777636755)
          }
          ["spo_11412_fa"]=>
          object(WpOrg\Requests\Cookie)#2425 (5) {
            ["name"]=>
            string(12) "spo_11412_fa"
            ["value"]=>
            string(32) "28eaa669476d6d37877032232b6ac7d3"
            ["attributes"]=>
            object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2431 (1) {
              ["data":protected]=>
              array(6) {
                ["expires"]=>
                int(1777638556)
                ["max-age"]=>
                int(1777638556)
                ["path"]=>
                string(9) "/egreen2/"
                ["secure"]=>
                bool(true)
                ["httponly"]=>
                bool(true)
                ["domain"]=>
                string(14) "blogs.ed.ac.uk"
              }
            }
            ["flags"]=>
            array(4) {
              ["creation"]=>
              int(1777636756)
              ["last-access"]=>
              int(1777636756)
              ["persistent"]=>
              bool(false)
              ["host-only"]=>
              bool(true)
            }
            ["reference_time"]=>
            int(1777636756)
          }
          ["RCKBMHKB"]=>
          object(WpOrg\Requests\Cookie)#2427 (5) {
            ["name"]=>
            string(8) "RCKBMHKB"
            ["value"]=>
            string(85) "027ff8be59-56fd-48Ug3xQ4dXbH8852TKcLeev05lO8CAuJ6TEDzni3bbITQe6DQ3-_vnMgQUwtj3ql6vEPk"
            ["attributes"]=>
            object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2428 (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(1777636756)
              ["last-access"]=>
              int(1777636756)
              ["persistent"]=>
              bool(false)
              ["host-only"]=>
              bool(true)
            }
            ["reference_time"]=>
            int(1777636756)
          }
        }
      }
    }
    ["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
Diag| Polling feed [https://blogs.ed.ac.uk/sliceoflearning/feed/?tag=dlam-feed]
Diag====| HTTP [https://blogs.ed.ac.uk/sliceoflearning/feed/?tag=dlam-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/sliceoflearning/feed/?tag=dlam-feed] ⌉ array(6) {
  ["headers"]=>
  object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2440 (1) {
    ["data":protected]=>
    array(12) {
      ["content-type"]=>
      string(34) "application/rss+xml; charset=UTF-8"
      ["date"]=>
      string(29) "Fri, 01 May 2026 11:59:16 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(194) "<https://blogs.ed.ac.uk/sliceoflearning/wp-json/>; rel="https://api.w.org/", <https://blogs.ed.ac.uk/sliceoflearning/wp-json/wp/v2/tags/8>; rel="alternate"; title="JSON"; type="application/json""
      ["set-cookie"]=>
      array(3) {
        [0]=>
        string(62) "PHPSESSID=748lo4htacuet7v340m8jmf5f6; path=/; secure; HttpOnly"
        [1]=>
        string(139) "spo_2048_fa=1f6a19a4a61ea1542b1e6b34a077e786; expires=Fri, 01 May 2026 12:29:16 GMT; Max-Age=1800; path=/sliceoflearning/; Secure; HttpOnly"
        [2]=>
        string(125) "RCKBMHKB=027ff8be59-56fd-487leV5KYY7NnkcyAVHh8LpCmXTReoTNgkW2QHIwGWZv1KLHSOSRQw--B80n-VTPbWKW8; path=/; SameSite=None; Secure"
      }
      ["last-modified"]=>
      string(29) "Mon, 05 Sep 2022 13:49:32 GMT"
      ["etag"]=>
      string(34) ""3f92756d9ecbe74d271c36001f3864b1""
      ["vary"]=>
      string(15) "Accept-Encoding"
    }
  }
  ["body"]=>
  string(31884) "<?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/"
	xmlns:cc="http://creativecommons.org/ns#" >

<channel>
	<title>dlam-feed – A Slice of Learning</title>
	<atom:link href="https://blogs.ed.ac.uk/sliceoflearning/feed/?tag=dlam-feed" rel="self" type="application/rss+xml" />
	<link>https://blogs.ed.ac.uk/sliceoflearning</link>
	<description></description>
	<lastBuildDate>Thu, 24 Sep 2020 15:04:52 +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>
<cc:license >Creative Commons Attribution CC BY 3.0</cc:license><dc:rights  >Creative Commons Attribution CC BY 3.0</dc:rights>	<item>
		<title>More about Blogs.ed and Plugins</title>
		<link>https://blogs.ed.ac.uk/sliceoflearning/2020/09/23/more-about-blogs-ed-and-plugins/</link>
					<comments>https://blogs.ed.ac.uk/sliceoflearning/2020/09/23/more-about-blogs-ed-and-plugins/#respond</comments>
		
		<dc:creator><![CDATA[James Slack]]></dc:creator>
		<pubDate>Wed, 23 Sep 2020 15:22:18 +0000</pubDate>
				<category><![CDATA[Uncategorised]]></category>
		<category><![CDATA[dlam-feed]]></category>
		<guid isPermaLink="false">https://blogs.ed.ac.uk/sliceoflearning/?p=176</guid>

					<description><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Reading Time: </span> <span class="rt-time"> 6</span> <span class="rt-label rt-postfix">minutes</span></span>Processes and Plugins   I admit, I may be cheating a little here. As part of HeyPresstoConf20 I really wanted to be able to talk about our Plugins and Processes but couldn’t fit into the Tweet limit so I’m putting it all here. This should be helpful if you are planning on building your own […]]]></description>
										<content:encoded><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Reading Time: </span> <span class="rt-time"> 6</span> <span class="rt-label rt-postfix">minutes</span></span><h1>Processes and Plugins</h1>
<p> </p>
<p>I admit, I may be cheating a little here. As part of HeyPresstoConf20 I really wanted to be able to talk about our Plugins and Processes but couldn’t fit into the Tweet limit so I’m putting it all here. This should be helpful if you are planning on building your own WordPress Multisite at your institution, as ever, if you want to discuss this feel free to get in touch.</p>
<p> </p>
<p>Firstly let’s talk about how we go about selecting Plugins. We start to look when multiple users all ask for the same of similar plugin/function or if we encounter and issue that needs a plugin to be resolved. Thankfully we have an inhouse development team that can be called on if we cannot find something which is a blessing but they support multiple platforms so we do need to have good reason. If we do find a plugin or multiple plugins then we start to investigate whether they actually resolve our issue and if they add any issues or have unexpected behaviour, so far this seems to make basic sense. We have, however, developed a process to audit plugins to ascertain whether they are well supported, well reviewed and also if they contain privacy invasive cookies using the following criteria:</p>
<table width="99%">
<tbody>
<tr>
<td><strong>Plugin / theme name:</strong></td>
<td><strong>Yes / no</strong></td>
<td><strong>Comments</strong></td>
<td><strong>Date requested</strong></td>
<td><strong>Date installed</strong></td>
</tr>
<tr>
<td><strong>What does it do?</strong></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong>How much does it cost?</strong></p>
<ul>
<li>Cost of adoption</li>
<li>Cost of training</li>
<li>Cost of usage</li>
</ul>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong>Author background</strong></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong>Is the documentation good?</strong></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong>Who will use the add-on?</strong></p>
<ul>
<li>admins / authors</li>
</ul>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong>Feedback / reviews</strong></p>
<ul>
<li>Is it used by many, reviews / comments</li>
</ul>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong>Technical status:</strong></p>
<ul>
<li>Is it up to date, compatible with our version of wordpress?</li>
<li>Is it well written?</li>
<li>Does it backup/restore?</li>
<li>Is it secure?</li>
<li>Is data shared outside of wordpress?</li>
<li>Type of cookies set</li>
</ul>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong>Accessibility:</strong></p>
<ul>
<li>Check any spellcheck functionality on free data entry boxes/forms that is either automatically run by the system or that requires users interaction</li>
<li>Describe any data validation that is automatically run by the system to ensure users enter data in the correct formats.  Check error messages are in sufficient colour contrast, accessible font, clear location, not pop ups.</li>
<li>Check whether the template scales correctly using different resolutions and whether there are any resolutions that are not recommended, tested using ctrl + and Windows Magnifier</li>
<li>Check the colours and colour contrasts and font types and styles used i.e. are italics and continuous capitals avoided?</li>
<li>Check functionality that would allow users to customise their views (i.e. font size, colours, contrast ratios).  This is by altering browser settings.</li>
<li>Check whether all content is accessible through a keyboard interface and whether it requires specific timings for keystrokes. I.e. is it possible to navigate around the template and complete any forms etc without ever using a mouse.</li>
<li>Check there is an indication or warning of links which will open a new tab or window and check that these warnings are accessible</li>
<li>Check that the template conveys no information in only colour or sound.</li>
<li>Check there is no flashing or scrolling text? If so does the text flash 3 or more times per second and can it be paused? If there is flashing or scrolling text please provide more details.</li>
<li>Check that Zoomtext is compatible with the template without plug ins</li>
<li>Check that JAWS is compatible with the template without plug ins</li>
<li>Check that TextHelp Read and Write Gold is compatible with the template in terms of spellcheck, hover highlight and highlight and read without plug ins.</li>
<li>Check that tooltips are clear and enabled by default on the template.</li>
</ul>
<p>·       Check that there are text alternatives for any non-text content.</p>
<ul>
<li>Check that for any audio/visual items are there captions available and theses have been checked for accuracy.</li>
<li>Check there are no time limits prescribed for the viewing/inputting of content to the template</li>
<li>Check what specialist help is linked to on the template and that this includes a method of contacting someone for assistance?</li>
<li>Check that if the template is accessed via a mobile or tablet device the user system does not require to use any requires any specific timings/specific keystrokes to complete tasks</li>
<li>Check the template works with mobiles/tablets to offer any text to speech functionality of the results for those with visual impairments?</li>
</ul>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p> </p>
<p>You can also read more about this process in this blog post by Callum, one of the original service managers who has since moved to greener pastures (about 5 metres away when we were in the office) – <a href="https://blogs.ed.ac.uk/dlam/2019/04/08/cookie-audit-findings/">Cookie Audit Process Blog</a></p>
<p>Lastly, here is a comprehensive list of all of the plugins that we currently use, all of these have been vetted through our process so should provide a good starting point.</p>
<h3>Plugins</h3>
<table width="1132">
<tbody>
<tr>
<td width="270"><strong>Plugin</strong></td>
<td width="225">Developer</td>
<td width="511">Description</td>
<td width="126">Network Activated?</td>
</tr>
<tr>
<td>Add Existing Users</td>
<td>WPMUDEV</td>
<td width="511">Allows you to bulk add existing users to a site, including the facility to set their role.</td>
<td>N</td>
</tr>
<tr>
<td><a href="http://addmultipleusers.happynuclear.com/">Add Multiple Users</a></td>
<td>HappyNuclear</td>
<td width="511">This plugin allows you to add multiple user accounts to your WordPress blog using a range of tools.</td>
<td>Y</td>
</tr>
<tr>
<td><a href="https://akismet.com/">Akismet Anti-Spam</a></td>
<td>Automattic</td>
<td width="511">Used by millions, Akismet is quite possibly the best way in the world to protect your blog from spam. Your site is fully configured and being protected, even while you sleep.</td>
<td>Y</td>
</tr>
<tr>
<td>Batch Create</td>
<td>WPMUDEV</td>
<td width="511">Create hundred or thousands of blogs and users automatically by simply uploading a csv text file – subdomain and user creation automation has never been so easy.</td>
<td>Y</td>
</tr>
<tr>
<td>BeeHive Pro</td>
<td>WPMUDEV</td>
<td width="511">Basicall Google Analytics, users can use their own ID or apply for access to the University managed one</td>
<td>N</td>
</tr>
<tr>
<td>Broken Link Checker</td>
<td>ManageWP</td>
<td width="511">Checks your blog for broken links and missing images and notifies you on the dashboard if any are found.</td>
<td>N</td>
</tr>
<tr>
<td>Classic Editor</td>
<td>WordPress Contributers</td>
<td width="511">Enabled at network level to remove block editor default</td>
<td>N</td>
</tr>
<tr>
<td>CommentPress Core</td>
<td><a href="http://www.futureofthebook.org/"> Institute for the Future of the Book</a></td>
<td width="511">CommentPress allows readers to comment in the margins of a text. You can use it to annotate, gloss, workshop, debate and more!</td>
<td>N</td>
</tr>
<tr>
<td>Cookies for Comment</td>
<td><a href="http://ocaoimh.ie/"> Donncha O Caoimh</a></td>
<td width="511">Sets a cookie that must exist for a comment to be allowed through</td>
<td>Y</td>
</tr>
<tr>
<td>Cryout Series Slider</td>
<td><a href="http://www.cryoutcreations.eu/">Cryout Creations</a></td>
<td width="511">accessibility ready free image slider for WordPress.</td>
<td>N</td>
</tr>
<tr>
<td>Disable Comments</td>
<td><a href="http://www.rayofsolaris.net/">Samir Shah</a></td>
<td width="511">Allows administrators to globally disable comments on their site. Comments can be disabled according to post type.</td>
<td>N</td>
</tr>
<tr>
<td><a href="https://gitlab.is.ed.ac.uk/is-dlam/academic-blogging-project/ed-solr">EdSolr</a></td>
<td>UoE</td>
<td width="511">Integrates Apache Solr with a WordPress Multisite Installation.</td>
<td>Y</td>
</tr>
<tr>
<td>Email Subscribers & Newsletters</td>
<td><a href="https://www.icegram.com/"> Icegram</a></td>
<td width="511">Add subscription forms on website, send HTML newsletters, and automatically notify subscribers about new blog posts once they are published.</td>
<td>N</td>
</tr>
<tr>
<td>Enlighter – Customizable Syntax Highlighter</td>
<td><a href="https://andidittrich.com/">Andi Dittrich</a></td>
<td width="511">Syntax Highlighter</td>
<td>N</td>
</tr>
<tr>
<td>FeedWordPress</td>
<td><a href="https://feedwordpress.radgeek.com/contact/"> C. Johnson</a></td>
<td width="511">simple and flexible Atom/RSS syndication for WordPress</td>
<td>N</td>
</tr>
<tr>
<td>Flickr Album Gallery</td>
<td>FARAZFRANK</td>
<td>Flickr Album Gallery is on JS API plugin to display all public Flickr albums on your WordPress website.</td>
<td>N</td>
</tr>
<tr>
<td>Force Regenerate Thumbnails</td>
<td><a href="http://www.pedroelsner.com/">Pedro Elsner</a></td>
<td width="511">Delete and REALLY force the regenerate thumbnail.</td>
<td>N</td>
</tr>
<tr>
<td><a href="http://www.arnebrachhold.de/redir/sitemap-home/">Google XML Sitemaps</a></td>
<td><a href="http://www.arnebrachhold.de/"> Arne Brachhold</a></td>
<td width="511">This plugin improves SEO using sitemaps for best indexation by search engines like Google, Bing, Yahoo and others.</td>
<td>Y</td>
</tr>
<tr>
<td>Image Attribution Tagger</td>
<td><a href="http://red8interactive.com/">Red8 Interactive</a></td>
<td width="511">A plugin that adds image credits to licensed images</td>
<td>Y</td>
</tr>
<tr>
<td>MimeTypes Link Icons</td>
<td><a href="https://github.com/eagerterrier/MimeTypes-Link-Icons"> Toby Cox, Juliette Reinders Folmer</a></td>
<td width="511">This will add file type icons next to links automatically.</td>
<td>Y</td>
</tr>
<tr>
<td>Multisite Plugin Manager</td>
<td><a href="http://uglyrobot.com/"> Aaron Edwards</a></td>
<td width="511">The essential plugin for every multisite install! Manage plugin access permissions across your entire multisite network.</td>
<td>Y</td>
</tr>
<tr>
<td>Multisite Privacy</td>
<td>WPMUDEV</td>
<td width="511">Adds more levels of privacy and allows you to control them across all sites – or allow users to override them.</td>
<td>Y</td>
</tr>
<tr>
<td>NS Cloner – Site Copier</td>
<td><a href="https://neversettle.it/">Never Settle</a></td>
<td width="511">Allows us to create sites from a template</td>
<td>Y</td>
</tr>
<tr>
<td>NS Cloner Pro</td>
<td><a href="https://neversettle.it/">Never Settle</a></td>
<td width="511">add-ons to the NS Cloner Core</td>
<td>Y</td>
</tr>
<tr>
<td>Open Attribute</td>
<td><a href="http://openattribute.com/">OpenAttribute</a></td>
<td width="511"></td>
<td>Y</td>
</tr>
<tr>
<td>PDF & Print</td>
<td><a href="https://bestwebsoft.com/">BestWebSoft</a></td>
<td width="511">Generate PDF files and print WordPress posts/pages. Customize document header/footer styles and appearance.</td>
<td>N</td>
</tr>
<tr>
<td>Reading Time WP</td>
<td><a href="https://jasonyingling.me/">Jason Yingling</a></td>
<td width="511">Add an estimated reading time to your posts.</td>
<td>N</td>
</tr>
<tr>
<td>Remove Email Verification</td>
<td>WPMUDEV</td>
<td width="511">Removes need to send a verification email when adding users to site or blogs</td>
<td>Y</td>
</tr>
<tr>
<td>TinyMCE Comment Field – WPSIWYG</td>
<td><a href="http://www.eracer.de/">Stefan Helmer</a></td>
<td width="511">This plugin turns the comment field from a primitive into a WYSIWYG editor, using the internal TinyMCE library bundled with WordPress.</td>
<td>N</td>
</tr>
<tr>
<td>Titan Framework</td>
<td><a href="http://gambit.ph/"> Benjamin Intal, Gambit</a></td>
<td width="511">Titan Framework allows theme and plugin developers to create a admin pages, options, meta boxes, and theme customizer options with just a few simple lines of code.</td>
<td>N</td>
</tr>
<tr>
<td>True Multisite Indexer</td>
<td><a href="https://rudrastyh.com/">Misha Rudrastyh</a></td>
<td width="511">Indexes all posts across your network and brings them into one spot – a very powerful tool that you use as a base to display posts in different ways or to manage your network.</td>
<td>Y</td>
</tr>
<tr>
<td>Ultimate Category Excluder</td>
<td><a href="http://infolific.com/technology/"> Marios Alexandrou</a></td>
<td width="511">Easily exclude categories from your front page, feeds, archives, and search results.</td>
<td>N</td>
</tr>
<tr>
<td>WordPress Importer</td>
<td><a href="https://wordpress.org/"> wordpressdotorg</a></td>
<td width="511">Import posts, pages, comments, custom fields, categories, tags and more from a WordPress export file.</td>
<td>Y</td>
</tr>
<tr>
<td>WordPress.com Theme Updates</td>
<td><a href="http://automattic.com/"> Automattic</a></td>
<td width="511">Update themes downloaded from WordPress.com seamlessly with the rest of your WordPress updates.</td>
<td>Y</td>
</tr>
<tr>
<td>WP Accessibility</td>
<td><a href="http://www.joedolson.com/"> Joe Dolson</a></td>
<td width="511">Helps improve accessibility in your WordPress site, like removing title attributes.</td>
<td>N</td>
</tr>
<tr>
<td>WP Crontrol</td>
<td><a href="https://github.com/johnbillion/wp-crontrol/graphs/contributors"> John Blackbourn & contributors</a></td>
<td width="511">WP Crontrol lets you view and control what’s happening in the WP-Cron system.</td>
<td>N</td>
</tr>
<tr>
<td>WP QuickLaTeX</td>
<td><a href="http://www.holoborodko.com/pavel/">Pavel Holoborodko</a></td>
<td width="511">Access to complete LaTeX distribution. Publish formulae & graphics using native LaTeX syntax directly in the text. Inline formulas, displayed equations auto-numbering, labeling and referencing, AMS-LaTeX, TikZ, custom LaTeX preamble. No LaTeX installation required. Easily customizable using UI dialog. Actively developed and maintained. Visit QuickLaTeX homepage for more info.</td>
<td>N</td>
</tr>
<tr>
<td>WP to Twitter</td>
<td><a href="http://www.joedolson.com/">Joseph C Dolson</a></td>
<td width="511">Posts a Tweet when you update your WordPress blog or post a link, using your URL shortener. Rich options to customise and promote your Tweets.</td>
<td>N</td>
</tr>
<tr>
<td>WPMUDEV Dashboard</td>
<td>WPMUDEV</td>
<td width="511">Brings the powers of WPMU DEV directly to you. It will revolutionize how you use WordPress. Activate now!</td>
<td>N</td>
</tr>
</tbody>
</table>
<p> </p>
<h3>Themes</h3>
<div>
<table style="border-collapse: collapse; width: 48pt;" border="0" width="64" cellspacing="0" cellpadding="0">
<colgroup>
<col style="width: 48pt;" width="64" /> </colgroup>
<tbody>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt; width: 48pt;" width="64" height="19"><strong>Theme Name</strong></td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Apostrophe 2</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">AwesomePress</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Baskerville</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Bhari</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Blask</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Cover</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Cover2</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Cyanotype</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Davis</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Fluida</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Fukasawa</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Garfunkel</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Hitchcock</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Intergalactic</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Intergalactic 2</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Isola</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Lovecraft</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Make</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Period</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Radcliffe</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Sorbet</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">SPLOTpoint</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Tiny Framework</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Twenty Fifteen</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Twenty Nineteen</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Twenty Seventeen</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Twenty Sixteen</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Twenty Twenty</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Writee</td>
</tr>
</tbody>
</table>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.ed.ac.uk/sliceoflearning/2020/09/23/more-about-blogs-ed-and-plugins/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Service Inheritance</title>
		<link>https://blogs.ed.ac.uk/sliceoflearning/2020/08/14/service-inheritance/</link>
					<comments>https://blogs.ed.ac.uk/sliceoflearning/2020/08/14/service-inheritance/#comments</comments>
		
		<dc:creator><![CDATA[James Slack]]></dc:creator>
		<pubDate>Fri, 14 Aug 2020 16:06:04 +0000</pubDate>
				<category><![CDATA[Uncategorised]]></category>
		<category><![CDATA[dlam-feed]]></category>
		<guid isPermaLink="false">https://blogs.ed.ac.uk/sliceoflearning/?p=165</guid>

					<description><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Reading Time: </span> <span class="rt-time"> 6</span> <span class="rt-label rt-postfix">minutes</span></span>How to Inherit a Service A while back, before quarantine and therefore a lifetime ago, I ‘inherited’ a service. Anyone familiar with how these things go will also be somewhat familiar with how the conversation went: “We think you’ve done quiet well and we’d like you to take over this service” “Does that mean I […]]]></description>
										<content:encoded><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Reading Time: </span> <span class="rt-time"> 6</span> <span class="rt-label rt-postfix">minutes</span></span><h1>How to Inherit a Service</h1>
<p>A while back, before quarantine and therefore a lifetime ago, I ‘inherited’ a service. Anyone familiar with how these things go will also be somewhat familiar with how the conversation went:</p>
<p>“We think you’ve done quiet well and we’d like you to take over this service”</p>
<p>“Does that mean I can drop my old service”</p>
<p>“No”.</p>
<p>Thankfully I have loved taking over this service, by this service I do actually mean *this* service. I now manage the Academic Blogging service, blogs.ed.ac.uk which is what you are reading this post on. I have blogged in the past but sporadically at best. Managing the service is completely different, managing any service is difficult but managing a service which is designed to be open and allow people to do what they want (to an extent) comes with it’s own interesting challenges, more of that in another post.</p>
<p>Today however I wanted to talk more specifically about inheriting a service. It’s something that I hadn’t really thought about before but it struck me that this is the first ‘living’ service that I have taken over. I have a relatively short period of experience of managing learning technology services, roughly 6 years at this point. In that time I have managed two large services but both of these were in their infancy when I got hold. I was able to largely decide what these service should look like, what they would look like and what the policies around them would be. Obviously there is an amount of team work and involvement of other teams in this process but as a service manager the impetus usually came from me.</p>
<p>Taking on a new service that has existed before, however, is something completely different. I often enjoy using bad analogies that I tend to stretch to far, so allow me to do this yet again: Inheriting services is like getting an armchair that belonged to someone else (ish). It’s arranged in a different way, it faces the door, it doesn’t go back far enough, it feels a bit to firm and there are Revels tucked into the side of the cushion. Who would put Revels down there, why would they choose Revels of all the things available?</p>
<h2>Service Personality</h2>
<p>The problem/issue/opportunity is, someone or a group of somebodies have decided how this should work and put it all in place. Now you come in and you’re not sure if you always agree. Most of the time you will but you just need to understand the ‘why’ after seeing the ‘what’ and ‘how’. Most services have a ‘vision’ of sorts attached, usually within the original Project Brief or the Service Level Description (SLD) that sets out the ‘shape’ of the service. This works great in isolation but what often happens is that this clearly defined ‘shape’ then gets released and it tends to need to alter shape to fits its environment in some way. (I DID say I enjoy bad analogies).</p>
<h2>Opportunities for Change</h2>
<p>I’ve always very strongly believed that getting a ‘fresh pair of eyes’ is possibly one of the most useful things to do when you have a great idea or process. Having someone outside of the ‘organisation’ take a look is often the best way to pick up on things, firstly it forces you to explain why you made a decision and also allows you to be questioned. If you can’t convince someone as to why something works that way then you might want to re-evaluate or compromise with the other view point. I love the following quote, which I believe is attributed to Grace Hopper  – “The most dangerous phrase in the language is, ‘We’ve always done it this way’ ”</p>
<p>(If you don’t know who Grace Hopper is, please pause and look her up. I will wait)</p>
<h2>Inheritance runs both ways</h2>
<p>This is the part that surprised me the most when I realised that this was the first service that was secondhand/pre-loved/pre-existing/had a life before me. I started this long monologue talking about how I had inherited something but it seems obvious that the service had also imbibed something from it’s creators and previous owners. There were certain priorities or choices that were made by previous people upon the service, impressions in the surface that had left their mark. I agree with the vast majority of these but some I want to change, based on my priorities or choices that I think make it fit it’s environment in a better way, or a way that appears better to me. Obviously all of this is measured alongside the needs of the current community, I wouldn’t make big changes that negatively impacted people using the service but I may make decisions that change the ‘flavour’ in some ways.</p>
<h2>Making it yours or making you part of it</h2>
<p>After you have been looking after the service for a short while you will likely find a list of things that don’t really feel right to you. It’s likely that these decisions were made some time ago and might not reflect the needs of the user community anymore. I would say it is important to mention here that we aren’t criticising the previous owners, just using this change as an opportunity to review and also add you own input to the service. Once you have found these areas then try to seek the justification if possible, there could be a very good reason as to why something works like this and not like *this*. If there isn’t a good justification or if that doesn’t really hold anymore then start building your case for making a change and what that change will be. Next you get to take these changes to the service team, working group or user community. If these don’t exist then this is a good chance to make them as having some external input, if only at certain times will greatly improve the service as a whole. Also be sure to check that these changes are actually wanted/needed/will have a positive impact, change for the sake of change is a winding road. Always remember RACI (Responsible, Accountable,<strong> Consulted, Informed</strong>)</p>
<p>This is the part that I enjoy the most about managing services, there is a human part even if what *it* is an application running on virtual machines somewhere (I imagine in a basement, because, it has to be). I get to take all of the work that went before and add my layer on top and alter it ever so slightly, like a funky new flavour in your Rainbow Cake – I REALLY DID say that I like bad analogies.</p>
<p> </p>
<div id="attachment_166" style="width: 696px" class="wp-caption alignnone"><img fetchpriority="high" decoding="async" aria-describedby="caption-attachment-166" class="size-full wp-image-166" src="https://blogs.ed.ac.uk/sliceoflearning/wp-content/uploads/sites/2048/2020/08/7478835056_c91640ed8c_b.jpg" alt=""Layers from top - Rainbow Birthday Cake" by avlxyz is licensed under CC BY-NC-SA 2.0" width="686" height="1024" /><p id="caption-attachment-166" class="wp-caption-text">“Layers from top – Rainbow Birthday Cake” by avlxyz is licensed under CC BY-NC-SA 2.0</p></div>
<p> </p>
<p>Takeaways from service inheritance</p>
<p>If you are a current service owner</p>
<ul>
<li>For you managing a service, try to document what decisions were taken and why they were taken, this makes it a lot quicker for someone to get a feel for how the service exists now. Adding the justification really makes a big difference when someone new steps in</li>
<li>Even if the service isn’t being taken over by someone else it can be very helpful to get fresh eyes on a service, or to include more people when making the decisions. Working groups or user involvement are very good for this.</li>
<li>Try to update original documentation as the service shifts over time, most institutions seem to push for this at intervals but it helps to remember how services can change over time.</li>
<li>Include retrospective look backs at the service at regular intervals, perhaps each year. Having a look at the changes that were added, how they were received and whether they helped add something useful to the service is a very rewarding process</li>
</ul>
<p>If you are taking over an existing service</p>
<ul>
<li>Getting an overview or introduction to the service is incredibly useful but do bear in mind that it is unlikely that you will be able to understand the entire service after one meeting</li>
<li>If possible try to take the previous service owner hostage so that you can refer to them if they didn’t document things</li>
<li>Once you have a good understanding of the service highlight the areas that you have issues with. Areas that you don’t understand why something was done in a particular way or why a certain policy exists. Try to find to root cause for these, if they make sense and fit the service you can leave them for now. If that doesn’t fit the service or the user’s need then earmark those areas for change.</li>
<li>Add your personal touch, come up with suggestions in these specific areas that you have highlighted and taken them to existing working groups or service team. If they don’t exist then consider creating them.</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.ed.ac.uk/sliceoflearning/2020/08/14/service-inheritance/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
"
  ["response"]=>
  array(2) {
    ["code"]=>
    int(200)
    ["message"]=>
    string(2) "OK"
  }
  ["cookies"]=>
  array(3) {
    [0]=>
    object(WP_Http_Cookie)#2452 (7) {
      ["name"]=>
      string(9) "PHPSESSID"
      ["value"]=>
      string(26) "748lo4htacuet7v340m8jmf5f6"
      ["expires"]=>
      NULL
      ["path"]=>
      string(1) "/"
      ["domain"]=>
      string(14) "blogs.ed.ac.uk"
      ["port"]=>
      NULL
      ["host_only"]=>
      bool(true)
    }
    [1]=>
    object(WP_Http_Cookie)#2451 (7) {
      ["name"]=>
      string(11) "spo_2048_fa"
      ["value"]=>
      string(32) "1f6a19a4a61ea1542b1e6b34a077e786"
      ["expires"]=>
      int(1777638556)
      ["path"]=>
      string(17) "/sliceoflearning/"
      ["domain"]=>
      string(14) "blogs.ed.ac.uk"
      ["port"]=>
      NULL
      ["host_only"]=>
      bool(true)
    }
    [2]=>
    object(WP_Http_Cookie)#2453 (7) {
      ["name"]=>
      string(8) "RCKBMHKB"
      ["value"]=>
      string(85) "027ff8be59-56fd-487leV5KYY7NnkcyAVHh8LpCmXTReoTNgkW2QHIwGWZv1KLHSOSRQw--B80n-VTPbWKW8"
      ["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)#2439 (5) {
    ["data"]=>
    NULL
    ["headers"]=>
    NULL
    ["status"]=>
    NULL
    ["response":protected]=>
    object(WpOrg\Requests\Response)#2441 (10) {
      ["body"]=>
      string(31884) "<?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/"
	xmlns:cc="http://creativecommons.org/ns#" >

<channel>
	<title>dlam-feed – A Slice of Learning</title>
	<atom:link href="https://blogs.ed.ac.uk/sliceoflearning/feed/?tag=dlam-feed" rel="self" type="application/rss+xml" />
	<link>https://blogs.ed.ac.uk/sliceoflearning</link>
	<description></description>
	<lastBuildDate>Thu, 24 Sep 2020 15:04:52 +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>
<cc:license >Creative Commons Attribution CC BY 3.0</cc:license><dc:rights  >Creative Commons Attribution CC BY 3.0</dc:rights>	<item>
		<title>More about Blogs.ed and Plugins</title>
		<link>https://blogs.ed.ac.uk/sliceoflearning/2020/09/23/more-about-blogs-ed-and-plugins/</link>
					<comments>https://blogs.ed.ac.uk/sliceoflearning/2020/09/23/more-about-blogs-ed-and-plugins/#respond</comments>
		
		<dc:creator><![CDATA[James Slack]]></dc:creator>
		<pubDate>Wed, 23 Sep 2020 15:22:18 +0000</pubDate>
				<category><![CDATA[Uncategorised]]></category>
		<category><![CDATA[dlam-feed]]></category>
		<guid isPermaLink="false">https://blogs.ed.ac.uk/sliceoflearning/?p=176</guid>

					<description><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Reading Time: </span> <span class="rt-time"> 6</span> <span class="rt-label rt-postfix">minutes</span></span>Processes and Plugins   I admit, I may be cheating a little here. As part of HeyPresstoConf20 I really wanted to be able to talk about our Plugins and Processes but couldn’t fit into the Tweet limit so I’m putting it all here. This should be helpful if you are planning on building your own […]]]></description>
										<content:encoded><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Reading Time: </span> <span class="rt-time"> 6</span> <span class="rt-label rt-postfix">minutes</span></span><h1>Processes and Plugins</h1>
<p> </p>
<p>I admit, I may be cheating a little here. As part of HeyPresstoConf20 I really wanted to be able to talk about our Plugins and Processes but couldn’t fit into the Tweet limit so I’m putting it all here. This should be helpful if you are planning on building your own WordPress Multisite at your institution, as ever, if you want to discuss this feel free to get in touch.</p>
<p> </p>
<p>Firstly let’s talk about how we go about selecting Plugins. We start to look when multiple users all ask for the same of similar plugin/function or if we encounter and issue that needs a plugin to be resolved. Thankfully we have an inhouse development team that can be called on if we cannot find something which is a blessing but they support multiple platforms so we do need to have good reason. If we do find a plugin or multiple plugins then we start to investigate whether they actually resolve our issue and if they add any issues or have unexpected behaviour, so far this seems to make basic sense. We have, however, developed a process to audit plugins to ascertain whether they are well supported, well reviewed and also if they contain privacy invasive cookies using the following criteria:</p>
<table width="99%">
<tbody>
<tr>
<td><strong>Plugin / theme name:</strong></td>
<td><strong>Yes / no</strong></td>
<td><strong>Comments</strong></td>
<td><strong>Date requested</strong></td>
<td><strong>Date installed</strong></td>
</tr>
<tr>
<td><strong>What does it do?</strong></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong>How much does it cost?</strong></p>
<ul>
<li>Cost of adoption</li>
<li>Cost of training</li>
<li>Cost of usage</li>
</ul>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong>Author background</strong></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong>Is the documentation good?</strong></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong>Who will use the add-on?</strong></p>
<ul>
<li>admins / authors</li>
</ul>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong>Feedback / reviews</strong></p>
<ul>
<li>Is it used by many, reviews / comments</li>
</ul>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong>Technical status:</strong></p>
<ul>
<li>Is it up to date, compatible with our version of wordpress?</li>
<li>Is it well written?</li>
<li>Does it backup/restore?</li>
<li>Is it secure?</li>
<li>Is data shared outside of wordpress?</li>
<li>Type of cookies set</li>
</ul>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong>Accessibility:</strong></p>
<ul>
<li>Check any spellcheck functionality on free data entry boxes/forms that is either automatically run by the system or that requires users interaction</li>
<li>Describe any data validation that is automatically run by the system to ensure users enter data in the correct formats.  Check error messages are in sufficient colour contrast, accessible font, clear location, not pop ups.</li>
<li>Check whether the template scales correctly using different resolutions and whether there are any resolutions that are not recommended, tested using ctrl + and Windows Magnifier</li>
<li>Check the colours and colour contrasts and font types and styles used i.e. are italics and continuous capitals avoided?</li>
<li>Check functionality that would allow users to customise their views (i.e. font size, colours, contrast ratios).  This is by altering browser settings.</li>
<li>Check whether all content is accessible through a keyboard interface and whether it requires specific timings for keystrokes. I.e. is it possible to navigate around the template and complete any forms etc without ever using a mouse.</li>
<li>Check there is an indication or warning of links which will open a new tab or window and check that these warnings are accessible</li>
<li>Check that the template conveys no information in only colour or sound.</li>
<li>Check there is no flashing or scrolling text? If so does the text flash 3 or more times per second and can it be paused? If there is flashing or scrolling text please provide more details.</li>
<li>Check that Zoomtext is compatible with the template without plug ins</li>
<li>Check that JAWS is compatible with the template without plug ins</li>
<li>Check that TextHelp Read and Write Gold is compatible with the template in terms of spellcheck, hover highlight and highlight and read without plug ins.</li>
<li>Check that tooltips are clear and enabled by default on the template.</li>
</ul>
<p>·       Check that there are text alternatives for any non-text content.</p>
<ul>
<li>Check that for any audio/visual items are there captions available and theses have been checked for accuracy.</li>
<li>Check there are no time limits prescribed for the viewing/inputting of content to the template</li>
<li>Check what specialist help is linked to on the template and that this includes a method of contacting someone for assistance?</li>
<li>Check that if the template is accessed via a mobile or tablet device the user system does not require to use any requires any specific timings/specific keystrokes to complete tasks</li>
<li>Check the template works with mobiles/tablets to offer any text to speech functionality of the results for those with visual impairments?</li>
</ul>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p> </p>
<p>You can also read more about this process in this blog post by Callum, one of the original service managers who has since moved to greener pastures (about 5 metres away when we were in the office) – <a href="https://blogs.ed.ac.uk/dlam/2019/04/08/cookie-audit-findings/">Cookie Audit Process Blog</a></p>
<p>Lastly, here is a comprehensive list of all of the plugins that we currently use, all of these have been vetted through our process so should provide a good starting point.</p>
<h3>Plugins</h3>
<table width="1132">
<tbody>
<tr>
<td width="270"><strong>Plugin</strong></td>
<td width="225">Developer</td>
<td width="511">Description</td>
<td width="126">Network Activated?</td>
</tr>
<tr>
<td>Add Existing Users</td>
<td>WPMUDEV</td>
<td width="511">Allows you to bulk add existing users to a site, including the facility to set their role.</td>
<td>N</td>
</tr>
<tr>
<td><a href="http://addmultipleusers.happynuclear.com/">Add Multiple Users</a></td>
<td>HappyNuclear</td>
<td width="511">This plugin allows you to add multiple user accounts to your WordPress blog using a range of tools.</td>
<td>Y</td>
</tr>
<tr>
<td><a href="https://akismet.com/">Akismet Anti-Spam</a></td>
<td>Automattic</td>
<td width="511">Used by millions, Akismet is quite possibly the best way in the world to protect your blog from spam. Your site is fully configured and being protected, even while you sleep.</td>
<td>Y</td>
</tr>
<tr>
<td>Batch Create</td>
<td>WPMUDEV</td>
<td width="511">Create hundred or thousands of blogs and users automatically by simply uploading a csv text file – subdomain and user creation automation has never been so easy.</td>
<td>Y</td>
</tr>
<tr>
<td>BeeHive Pro</td>
<td>WPMUDEV</td>
<td width="511">Basicall Google Analytics, users can use their own ID or apply for access to the University managed one</td>
<td>N</td>
</tr>
<tr>
<td>Broken Link Checker</td>
<td>ManageWP</td>
<td width="511">Checks your blog for broken links and missing images and notifies you on the dashboard if any are found.</td>
<td>N</td>
</tr>
<tr>
<td>Classic Editor</td>
<td>WordPress Contributers</td>
<td width="511">Enabled at network level to remove block editor default</td>
<td>N</td>
</tr>
<tr>
<td>CommentPress Core</td>
<td><a href="http://www.futureofthebook.org/"> Institute for the Future of the Book</a></td>
<td width="511">CommentPress allows readers to comment in the margins of a text. You can use it to annotate, gloss, workshop, debate and more!</td>
<td>N</td>
</tr>
<tr>
<td>Cookies for Comment</td>
<td><a href="http://ocaoimh.ie/"> Donncha O Caoimh</a></td>
<td width="511">Sets a cookie that must exist for a comment to be allowed through</td>
<td>Y</td>
</tr>
<tr>
<td>Cryout Series Slider</td>
<td><a href="http://www.cryoutcreations.eu/">Cryout Creations</a></td>
<td width="511">accessibility ready free image slider for WordPress.</td>
<td>N</td>
</tr>
<tr>
<td>Disable Comments</td>
<td><a href="http://www.rayofsolaris.net/">Samir Shah</a></td>
<td width="511">Allows administrators to globally disable comments on their site. Comments can be disabled according to post type.</td>
<td>N</td>
</tr>
<tr>
<td><a href="https://gitlab.is.ed.ac.uk/is-dlam/academic-blogging-project/ed-solr">EdSolr</a></td>
<td>UoE</td>
<td width="511">Integrates Apache Solr with a WordPress Multisite Installation.</td>
<td>Y</td>
</tr>
<tr>
<td>Email Subscribers & Newsletters</td>
<td><a href="https://www.icegram.com/"> Icegram</a></td>
<td width="511">Add subscription forms on website, send HTML newsletters, and automatically notify subscribers about new blog posts once they are published.</td>
<td>N</td>
</tr>
<tr>
<td>Enlighter – Customizable Syntax Highlighter</td>
<td><a href="https://andidittrich.com/">Andi Dittrich</a></td>
<td width="511">Syntax Highlighter</td>
<td>N</td>
</tr>
<tr>
<td>FeedWordPress</td>
<td><a href="https://feedwordpress.radgeek.com/contact/"> C. Johnson</a></td>
<td width="511">simple and flexible Atom/RSS syndication for WordPress</td>
<td>N</td>
</tr>
<tr>
<td>Flickr Album Gallery</td>
<td>FARAZFRANK</td>
<td>Flickr Album Gallery is on JS API plugin to display all public Flickr albums on your WordPress website.</td>
<td>N</td>
</tr>
<tr>
<td>Force Regenerate Thumbnails</td>
<td><a href="http://www.pedroelsner.com/">Pedro Elsner</a></td>
<td width="511">Delete and REALLY force the regenerate thumbnail.</td>
<td>N</td>
</tr>
<tr>
<td><a href="http://www.arnebrachhold.de/redir/sitemap-home/">Google XML Sitemaps</a></td>
<td><a href="http://www.arnebrachhold.de/"> Arne Brachhold</a></td>
<td width="511">This plugin improves SEO using sitemaps for best indexation by search engines like Google, Bing, Yahoo and others.</td>
<td>Y</td>
</tr>
<tr>
<td>Image Attribution Tagger</td>
<td><a href="http://red8interactive.com/">Red8 Interactive</a></td>
<td width="511">A plugin that adds image credits to licensed images</td>
<td>Y</td>
</tr>
<tr>
<td>MimeTypes Link Icons</td>
<td><a href="https://github.com/eagerterrier/MimeTypes-Link-Icons"> Toby Cox, Juliette Reinders Folmer</a></td>
<td width="511">This will add file type icons next to links automatically.</td>
<td>Y</td>
</tr>
<tr>
<td>Multisite Plugin Manager</td>
<td><a href="http://uglyrobot.com/"> Aaron Edwards</a></td>
<td width="511">The essential plugin for every multisite install! Manage plugin access permissions across your entire multisite network.</td>
<td>Y</td>
</tr>
<tr>
<td>Multisite Privacy</td>
<td>WPMUDEV</td>
<td width="511">Adds more levels of privacy and allows you to control them across all sites – or allow users to override them.</td>
<td>Y</td>
</tr>
<tr>
<td>NS Cloner – Site Copier</td>
<td><a href="https://neversettle.it/">Never Settle</a></td>
<td width="511">Allows us to create sites from a template</td>
<td>Y</td>
</tr>
<tr>
<td>NS Cloner Pro</td>
<td><a href="https://neversettle.it/">Never Settle</a></td>
<td width="511">add-ons to the NS Cloner Core</td>
<td>Y</td>
</tr>
<tr>
<td>Open Attribute</td>
<td><a href="http://openattribute.com/">OpenAttribute</a></td>
<td width="511"></td>
<td>Y</td>
</tr>
<tr>
<td>PDF & Print</td>
<td><a href="https://bestwebsoft.com/">BestWebSoft</a></td>
<td width="511">Generate PDF files and print WordPress posts/pages. Customize document header/footer styles and appearance.</td>
<td>N</td>
</tr>
<tr>
<td>Reading Time WP</td>
<td><a href="https://jasonyingling.me/">Jason Yingling</a></td>
<td width="511">Add an estimated reading time to your posts.</td>
<td>N</td>
</tr>
<tr>
<td>Remove Email Verification</td>
<td>WPMUDEV</td>
<td width="511">Removes need to send a verification email when adding users to site or blogs</td>
<td>Y</td>
</tr>
<tr>
<td>TinyMCE Comment Field – WPSIWYG</td>
<td><a href="http://www.eracer.de/">Stefan Helmer</a></td>
<td width="511">This plugin turns the comment field from a primitive into a WYSIWYG editor, using the internal TinyMCE library bundled with WordPress.</td>
<td>N</td>
</tr>
<tr>
<td>Titan Framework</td>
<td><a href="http://gambit.ph/"> Benjamin Intal, Gambit</a></td>
<td width="511">Titan Framework allows theme and plugin developers to create a admin pages, options, meta boxes, and theme customizer options with just a few simple lines of code.</td>
<td>N</td>
</tr>
<tr>
<td>True Multisite Indexer</td>
<td><a href="https://rudrastyh.com/">Misha Rudrastyh</a></td>
<td width="511">Indexes all posts across your network and brings them into one spot – a very powerful tool that you use as a base to display posts in different ways or to manage your network.</td>
<td>Y</td>
</tr>
<tr>
<td>Ultimate Category Excluder</td>
<td><a href="http://infolific.com/technology/"> Marios Alexandrou</a></td>
<td width="511">Easily exclude categories from your front page, feeds, archives, and search results.</td>
<td>N</td>
</tr>
<tr>
<td>WordPress Importer</td>
<td><a href="https://wordpress.org/"> wordpressdotorg</a></td>
<td width="511">Import posts, pages, comments, custom fields, categories, tags and more from a WordPress export file.</td>
<td>Y</td>
</tr>
<tr>
<td>WordPress.com Theme Updates</td>
<td><a href="http://automattic.com/"> Automattic</a></td>
<td width="511">Update themes downloaded from WordPress.com seamlessly with the rest of your WordPress updates.</td>
<td>Y</td>
</tr>
<tr>
<td>WP Accessibility</td>
<td><a href="http://www.joedolson.com/"> Joe Dolson</a></td>
<td width="511">Helps improve accessibility in your WordPress site, like removing title attributes.</td>
<td>N</td>
</tr>
<tr>
<td>WP Crontrol</td>
<td><a href="https://github.com/johnbillion/wp-crontrol/graphs/contributors"> John Blackbourn & contributors</a></td>
<td width="511">WP Crontrol lets you view and control what’s happening in the WP-Cron system.</td>
<td>N</td>
</tr>
<tr>
<td>WP QuickLaTeX</td>
<td><a href="http://www.holoborodko.com/pavel/">Pavel Holoborodko</a></td>
<td width="511">Access to complete LaTeX distribution. Publish formulae & graphics using native LaTeX syntax directly in the text. Inline formulas, displayed equations auto-numbering, labeling and referencing, AMS-LaTeX, TikZ, custom LaTeX preamble. No LaTeX installation required. Easily customizable using UI dialog. Actively developed and maintained. Visit QuickLaTeX homepage for more info.</td>
<td>N</td>
</tr>
<tr>
<td>WP to Twitter</td>
<td><a href="http://www.joedolson.com/">Joseph C Dolson</a></td>
<td width="511">Posts a Tweet when you update your WordPress blog or post a link, using your URL shortener. Rich options to customise and promote your Tweets.</td>
<td>N</td>
</tr>
<tr>
<td>WPMUDEV Dashboard</td>
<td>WPMUDEV</td>
<td width="511">Brings the powers of WPMU DEV directly to you. It will revolutionize how you use WordPress. Activate now!</td>
<td>N</td>
</tr>
</tbody>
</table>
<p> </p>
<h3>Themes</h3>
<div>
<table style="border-collapse: collapse; width: 48pt;" border="0" width="64" cellspacing="0" cellpadding="0">
<colgroup>
<col style="width: 48pt;" width="64" /> </colgroup>
<tbody>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt; width: 48pt;" width="64" height="19"><strong>Theme Name</strong></td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Apostrophe 2</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">AwesomePress</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Baskerville</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Bhari</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Blask</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Cover</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Cover2</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Cyanotype</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Davis</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Fluida</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Fukasawa</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Garfunkel</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Hitchcock</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Intergalactic</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Intergalactic 2</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Isola</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Lovecraft</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Make</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Period</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Radcliffe</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Sorbet</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">SPLOTpoint</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Tiny Framework</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Twenty Fifteen</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Twenty Nineteen</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Twenty Seventeen</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Twenty Sixteen</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Twenty Twenty</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Writee</td>
</tr>
</tbody>
</table>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.ed.ac.uk/sliceoflearning/2020/09/23/more-about-blogs-ed-and-plugins/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Service Inheritance</title>
		<link>https://blogs.ed.ac.uk/sliceoflearning/2020/08/14/service-inheritance/</link>
					<comments>https://blogs.ed.ac.uk/sliceoflearning/2020/08/14/service-inheritance/#comments</comments>
		
		<dc:creator><![CDATA[James Slack]]></dc:creator>
		<pubDate>Fri, 14 Aug 2020 16:06:04 +0000</pubDate>
				<category><![CDATA[Uncategorised]]></category>
		<category><![CDATA[dlam-feed]]></category>
		<guid isPermaLink="false">https://blogs.ed.ac.uk/sliceoflearning/?p=165</guid>

					<description><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Reading Time: </span> <span class="rt-time"> 6</span> <span class="rt-label rt-postfix">minutes</span></span>How to Inherit a Service A while back, before quarantine and therefore a lifetime ago, I ‘inherited’ a service. Anyone familiar with how these things go will also be somewhat familiar with how the conversation went: “We think you’ve done quiet well and we’d like you to take over this service” “Does that mean I […]]]></description>
										<content:encoded><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Reading Time: </span> <span class="rt-time"> 6</span> <span class="rt-label rt-postfix">minutes</span></span><h1>How to Inherit a Service</h1>
<p>A while back, before quarantine and therefore a lifetime ago, I ‘inherited’ a service. Anyone familiar with how these things go will also be somewhat familiar with how the conversation went:</p>
<p>“We think you’ve done quiet well and we’d like you to take over this service”</p>
<p>“Does that mean I can drop my old service”</p>
<p>“No”.</p>
<p>Thankfully I have loved taking over this service, by this service I do actually mean *this* service. I now manage the Academic Blogging service, blogs.ed.ac.uk which is what you are reading this post on. I have blogged in the past but sporadically at best. Managing the service is completely different, managing any service is difficult but managing a service which is designed to be open and allow people to do what they want (to an extent) comes with it’s own interesting challenges, more of that in another post.</p>
<p>Today however I wanted to talk more specifically about inheriting a service. It’s something that I hadn’t really thought about before but it struck me that this is the first ‘living’ service that I have taken over. I have a relatively short period of experience of managing learning technology services, roughly 6 years at this point. In that time I have managed two large services but both of these were in their infancy when I got hold. I was able to largely decide what these service should look like, what they would look like and what the policies around them would be. Obviously there is an amount of team work and involvement of other teams in this process but as a service manager the impetus usually came from me.</p>
<p>Taking on a new service that has existed before, however, is something completely different. I often enjoy using bad analogies that I tend to stretch to far, so allow me to do this yet again: Inheriting services is like getting an armchair that belonged to someone else (ish). It’s arranged in a different way, it faces the door, it doesn’t go back far enough, it feels a bit to firm and there are Revels tucked into the side of the cushion. Who would put Revels down there, why would they choose Revels of all the things available?</p>
<h2>Service Personality</h2>
<p>The problem/issue/opportunity is, someone or a group of somebodies have decided how this should work and put it all in place. Now you come in and you’re not sure if you always agree. Most of the time you will but you just need to understand the ‘why’ after seeing the ‘what’ and ‘how’. Most services have a ‘vision’ of sorts attached, usually within the original Project Brief or the Service Level Description (SLD) that sets out the ‘shape’ of the service. This works great in isolation but what often happens is that this clearly defined ‘shape’ then gets released and it tends to need to alter shape to fits its environment in some way. (I DID say I enjoy bad analogies).</p>
<h2>Opportunities for Change</h2>
<p>I’ve always very strongly believed that getting a ‘fresh pair of eyes’ is possibly one of the most useful things to do when you have a great idea or process. Having someone outside of the ‘organisation’ take a look is often the best way to pick up on things, firstly it forces you to explain why you made a decision and also allows you to be questioned. If you can’t convince someone as to why something works that way then you might want to re-evaluate or compromise with the other view point. I love the following quote, which I believe is attributed to Grace Hopper  – “The most dangerous phrase in the language is, ‘We’ve always done it this way’ ”</p>
<p>(If you don’t know who Grace Hopper is, please pause and look her up. I will wait)</p>
<h2>Inheritance runs both ways</h2>
<p>This is the part that surprised me the most when I realised that this was the first service that was secondhand/pre-loved/pre-existing/had a life before me. I started this long monologue talking about how I had inherited something but it seems obvious that the service had also imbibed something from it’s creators and previous owners. There were certain priorities or choices that were made by previous people upon the service, impressions in the surface that had left their mark. I agree with the vast majority of these but some I want to change, based on my priorities or choices that I think make it fit it’s environment in a better way, or a way that appears better to me. Obviously all of this is measured alongside the needs of the current community, I wouldn’t make big changes that negatively impacted people using the service but I may make decisions that change the ‘flavour’ in some ways.</p>
<h2>Making it yours or making you part of it</h2>
<p>After you have been looking after the service for a short while you will likely find a list of things that don’t really feel right to you. It’s likely that these decisions were made some time ago and might not reflect the needs of the user community anymore. I would say it is important to mention here that we aren’t criticising the previous owners, just using this change as an opportunity to review and also add you own input to the service. Once you have found these areas then try to seek the justification if possible, there could be a very good reason as to why something works like this and not like *this*. If there isn’t a good justification or if that doesn’t really hold anymore then start building your case for making a change and what that change will be. Next you get to take these changes to the service team, working group or user community. If these don’t exist then this is a good chance to make them as having some external input, if only at certain times will greatly improve the service as a whole. Also be sure to check that these changes are actually wanted/needed/will have a positive impact, change for the sake of change is a winding road. Always remember RACI (Responsible, Accountable,<strong> Consulted, Informed</strong>)</p>
<p>This is the part that I enjoy the most about managing services, there is a human part even if what *it* is an application running on virtual machines somewhere (I imagine in a basement, because, it has to be). I get to take all of the work that went before and add my layer on top and alter it ever so slightly, like a funky new flavour in your Rainbow Cake – I REALLY DID say that I like bad analogies.</p>
<p> </p>
<div id="attachment_166" style="width: 696px" class="wp-caption alignnone"><img fetchpriority="high" decoding="async" aria-describedby="caption-attachment-166" class="size-full wp-image-166" src="https://blogs.ed.ac.uk/sliceoflearning/wp-content/uploads/sites/2048/2020/08/7478835056_c91640ed8c_b.jpg" alt=""Layers from top - Rainbow Birthday Cake" by avlxyz is licensed under CC BY-NC-SA 2.0" width="686" height="1024" /><p id="caption-attachment-166" class="wp-caption-text">“Layers from top – Rainbow Birthday Cake” by avlxyz is licensed under CC BY-NC-SA 2.0</p></div>
<p> </p>
<p>Takeaways from service inheritance</p>
<p>If you are a current service owner</p>
<ul>
<li>For you managing a service, try to document what decisions were taken and why they were taken, this makes it a lot quicker for someone to get a feel for how the service exists now. Adding the justification really makes a big difference when someone new steps in</li>
<li>Even if the service isn’t being taken over by someone else it can be very helpful to get fresh eyes on a service, or to include more people when making the decisions. Working groups or user involvement are very good for this.</li>
<li>Try to update original documentation as the service shifts over time, most institutions seem to push for this at intervals but it helps to remember how services can change over time.</li>
<li>Include retrospective look backs at the service at regular intervals, perhaps each year. Having a look at the changes that were added, how they were received and whether they helped add something useful to the service is a very rewarding process</li>
</ul>
<p>If you are taking over an existing service</p>
<ul>
<li>Getting an overview or introduction to the service is incredibly useful but do bear in mind that it is unlikely that you will be able to understand the entire service after one meeting</li>
<li>If possible try to take the previous service owner hostage so that you can refer to them if they didn’t document things</li>
<li>Once you have a good understanding of the service highlight the areas that you have issues with. Areas that you don’t understand why something was done in a particular way or why a certain policy exists. Try to find to root cause for these, if they make sense and fit the service you can leave them for now. If that doesn’t fit the service or the user’s need then earmark those areas for change.</li>
<li>Add your personal touch, come up with suggestions in these specific areas that you have highlighted and taken them to existing working groups or service team. If they don’t exist then consider creating them.</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.ed.ac.uk/sliceoflearning/2020/08/14/service-inheritance/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
"
      ["raw"]=>
      string(32870) "HTTP/1.1 200 OK
Content-Type: application/rss+xml; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Date: Fri, 01 May 2026 11:59:16 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/sliceoflearning/wp-json/>; rel="https://api.w.org/", <https://blogs.ed.ac.uk/sliceoflearning/wp-json/wp/v2/tags/8>; rel="alternate"; title="JSON"; type="application/json"
Set-Cookie: PHPSESSID=748lo4htacuet7v340m8jmf5f6; path=/; secure; HttpOnly
Set-Cookie: spo_2048_fa=1f6a19a4a61ea1542b1e6b34a077e786; expires=Fri, 01 May 2026 12:29:16 GMT; Max-Age=1800; path=/sliceoflearning/; Secure; HttpOnly
Last-Modified: Mon, 05 Sep 2022 13:49:32 GMT
ETag: "3f92756d9ecbe74d271c36001f3864b1"
Vary: Accept-Encoding
Set-Cookie: RCKBMHKB=027ff8be59-56fd-487leV5KYY7NnkcyAVHh8LpCmXTReoTNgkW2QHIwGWZv1KLHSOSRQw--B80n-VTPbWKW8; path=/; SameSite=None; Secure

<?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/"
	xmlns:cc="http://creativecommons.org/ns#" >

<channel>
	<title>dlam-feed – A Slice of Learning</title>
	<atom:link href="https://blogs.ed.ac.uk/sliceoflearning/feed/?tag=dlam-feed" rel="self" type="application/rss+xml" />
	<link>https://blogs.ed.ac.uk/sliceoflearning</link>
	<description></description>
	<lastBuildDate>Thu, 24 Sep 2020 15:04:52 +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>
<cc:license >Creative Commons Attribution CC BY 3.0</cc:license><dc:rights  >Creative Commons Attribution CC BY 3.0</dc:rights>	<item>
		<title>More about Blogs.ed and Plugins</title>
		<link>https://blogs.ed.ac.uk/sliceoflearning/2020/09/23/more-about-blogs-ed-and-plugins/</link>
					<comments>https://blogs.ed.ac.uk/sliceoflearning/2020/09/23/more-about-blogs-ed-and-plugins/#respond</comments>
		
		<dc:creator><![CDATA[James Slack]]></dc:creator>
		<pubDate>Wed, 23 Sep 2020 15:22:18 +0000</pubDate>
				<category><![CDATA[Uncategorised]]></category>
		<category><![CDATA[dlam-feed]]></category>
		<guid isPermaLink="false">https://blogs.ed.ac.uk/sliceoflearning/?p=176</guid>

					<description><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Reading Time: </span> <span class="rt-time"> 6</span> <span class="rt-label rt-postfix">minutes</span></span>Processes and Plugins   I admit, I may be cheating a little here. As part of HeyPresstoConf20 I really wanted to be able to talk about our Plugins and Processes but couldn’t fit into the Tweet limit so I’m putting it all here. This should be helpful if you are planning on building your own […]]]></description>
										<content:encoded><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Reading Time: </span> <span class="rt-time"> 6</span> <span class="rt-label rt-postfix">minutes</span></span><h1>Processes and Plugins</h1>
<p> </p>
<p>I admit, I may be cheating a little here. As part of HeyPresstoConf20 I really wanted to be able to talk about our Plugins and Processes but couldn’t fit into the Tweet limit so I’m putting it all here. This should be helpful if you are planning on building your own WordPress Multisite at your institution, as ever, if you want to discuss this feel free to get in touch.</p>
<p> </p>
<p>Firstly let’s talk about how we go about selecting Plugins. We start to look when multiple users all ask for the same of similar plugin/function or if we encounter and issue that needs a plugin to be resolved. Thankfully we have an inhouse development team that can be called on if we cannot find something which is a blessing but they support multiple platforms so we do need to have good reason. If we do find a plugin or multiple plugins then we start to investigate whether they actually resolve our issue and if they add any issues or have unexpected behaviour, so far this seems to make basic sense. We have, however, developed a process to audit plugins to ascertain whether they are well supported, well reviewed and also if they contain privacy invasive cookies using the following criteria:</p>
<table width="99%">
<tbody>
<tr>
<td><strong>Plugin / theme name:</strong></td>
<td><strong>Yes / no</strong></td>
<td><strong>Comments</strong></td>
<td><strong>Date requested</strong></td>
<td><strong>Date installed</strong></td>
</tr>
<tr>
<td><strong>What does it do?</strong></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong>How much does it cost?</strong></p>
<ul>
<li>Cost of adoption</li>
<li>Cost of training</li>
<li>Cost of usage</li>
</ul>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong>Author background</strong></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong>Is the documentation good?</strong></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong>Who will use the add-on?</strong></p>
<ul>
<li>admins / authors</li>
</ul>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong>Feedback / reviews</strong></p>
<ul>
<li>Is it used by many, reviews / comments</li>
</ul>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong>Technical status:</strong></p>
<ul>
<li>Is it up to date, compatible with our version of wordpress?</li>
<li>Is it well written?</li>
<li>Does it backup/restore?</li>
<li>Is it secure?</li>
<li>Is data shared outside of wordpress?</li>
<li>Type of cookies set</li>
</ul>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td><strong>Accessibility:</strong></p>
<ul>
<li>Check any spellcheck functionality on free data entry boxes/forms that is either automatically run by the system or that requires users interaction</li>
<li>Describe any data validation that is automatically run by the system to ensure users enter data in the correct formats.  Check error messages are in sufficient colour contrast, accessible font, clear location, not pop ups.</li>
<li>Check whether the template scales correctly using different resolutions and whether there are any resolutions that are not recommended, tested using ctrl + and Windows Magnifier</li>
<li>Check the colours and colour contrasts and font types and styles used i.e. are italics and continuous capitals avoided?</li>
<li>Check functionality that would allow users to customise their views (i.e. font size, colours, contrast ratios).  This is by altering browser settings.</li>
<li>Check whether all content is accessible through a keyboard interface and whether it requires specific timings for keystrokes. I.e. is it possible to navigate around the template and complete any forms etc without ever using a mouse.</li>
<li>Check there is an indication or warning of links which will open a new tab or window and check that these warnings are accessible</li>
<li>Check that the template conveys no information in only colour or sound.</li>
<li>Check there is no flashing or scrolling text? If so does the text flash 3 or more times per second and can it be paused? If there is flashing or scrolling text please provide more details.</li>
<li>Check that Zoomtext is compatible with the template without plug ins</li>
<li>Check that JAWS is compatible with the template without plug ins</li>
<li>Check that TextHelp Read and Write Gold is compatible with the template in terms of spellcheck, hover highlight and highlight and read without plug ins.</li>
<li>Check that tooltips are clear and enabled by default on the template.</li>
</ul>
<p>·       Check that there are text alternatives for any non-text content.</p>
<ul>
<li>Check that for any audio/visual items are there captions available and theses have been checked for accuracy.</li>
<li>Check there are no time limits prescribed for the viewing/inputting of content to the template</li>
<li>Check what specialist help is linked to on the template and that this includes a method of contacting someone for assistance?</li>
<li>Check that if the template is accessed via a mobile or tablet device the user system does not require to use any requires any specific timings/specific keystrokes to complete tasks</li>
<li>Check the template works with mobiles/tablets to offer any text to speech functionality of the results for those with visual impairments?</li>
</ul>
</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p> </p>
<p>You can also read more about this process in this blog post by Callum, one of the original service managers who has since moved to greener pastures (about 5 metres away when we were in the office) – <a href="https://blogs.ed.ac.uk/dlam/2019/04/08/cookie-audit-findings/">Cookie Audit Process Blog</a></p>
<p>Lastly, here is a comprehensive list of all of the plugins that we currently use, all of these have been vetted through our process so should provide a good starting point.</p>
<h3>Plugins</h3>
<table width="1132">
<tbody>
<tr>
<td width="270"><strong>Plugin</strong></td>
<td width="225">Developer</td>
<td width="511">Description</td>
<td width="126">Network Activated?</td>
</tr>
<tr>
<td>Add Existing Users</td>
<td>WPMUDEV</td>
<td width="511">Allows you to bulk add existing users to a site, including the facility to set their role.</td>
<td>N</td>
</tr>
<tr>
<td><a href="http://addmultipleusers.happynuclear.com/">Add Multiple Users</a></td>
<td>HappyNuclear</td>
<td width="511">This plugin allows you to add multiple user accounts to your WordPress blog using a range of tools.</td>
<td>Y</td>
</tr>
<tr>
<td><a href="https://akismet.com/">Akismet Anti-Spam</a></td>
<td>Automattic</td>
<td width="511">Used by millions, Akismet is quite possibly the best way in the world to protect your blog from spam. Your site is fully configured and being protected, even while you sleep.</td>
<td>Y</td>
</tr>
<tr>
<td>Batch Create</td>
<td>WPMUDEV</td>
<td width="511">Create hundred or thousands of blogs and users automatically by simply uploading a csv text file – subdomain and user creation automation has never been so easy.</td>
<td>Y</td>
</tr>
<tr>
<td>BeeHive Pro</td>
<td>WPMUDEV</td>
<td width="511">Basicall Google Analytics, users can use their own ID or apply for access to the University managed one</td>
<td>N</td>
</tr>
<tr>
<td>Broken Link Checker</td>
<td>ManageWP</td>
<td width="511">Checks your blog for broken links and missing images and notifies you on the dashboard if any are found.</td>
<td>N</td>
</tr>
<tr>
<td>Classic Editor</td>
<td>WordPress Contributers</td>
<td width="511">Enabled at network level to remove block editor default</td>
<td>N</td>
</tr>
<tr>
<td>CommentPress Core</td>
<td><a href="http://www.futureofthebook.org/"> Institute for the Future of the Book</a></td>
<td width="511">CommentPress allows readers to comment in the margins of a text. You can use it to annotate, gloss, workshop, debate and more!</td>
<td>N</td>
</tr>
<tr>
<td>Cookies for Comment</td>
<td><a href="http://ocaoimh.ie/"> Donncha O Caoimh</a></td>
<td width="511">Sets a cookie that must exist for a comment to be allowed through</td>
<td>Y</td>
</tr>
<tr>
<td>Cryout Series Slider</td>
<td><a href="http://www.cryoutcreations.eu/">Cryout Creations</a></td>
<td width="511">accessibility ready free image slider for WordPress.</td>
<td>N</td>
</tr>
<tr>
<td>Disable Comments</td>
<td><a href="http://www.rayofsolaris.net/">Samir Shah</a></td>
<td width="511">Allows administrators to globally disable comments on their site. Comments can be disabled according to post type.</td>
<td>N</td>
</tr>
<tr>
<td><a href="https://gitlab.is.ed.ac.uk/is-dlam/academic-blogging-project/ed-solr">EdSolr</a></td>
<td>UoE</td>
<td width="511">Integrates Apache Solr with a WordPress Multisite Installation.</td>
<td>Y</td>
</tr>
<tr>
<td>Email Subscribers & Newsletters</td>
<td><a href="https://www.icegram.com/"> Icegram</a></td>
<td width="511">Add subscription forms on website, send HTML newsletters, and automatically notify subscribers about new blog posts once they are published.</td>
<td>N</td>
</tr>
<tr>
<td>Enlighter – Customizable Syntax Highlighter</td>
<td><a href="https://andidittrich.com/">Andi Dittrich</a></td>
<td width="511">Syntax Highlighter</td>
<td>N</td>
</tr>
<tr>
<td>FeedWordPress</td>
<td><a href="https://feedwordpress.radgeek.com/contact/"> C. Johnson</a></td>
<td width="511">simple and flexible Atom/RSS syndication for WordPress</td>
<td>N</td>
</tr>
<tr>
<td>Flickr Album Gallery</td>
<td>FARAZFRANK</td>
<td>Flickr Album Gallery is on JS API plugin to display all public Flickr albums on your WordPress website.</td>
<td>N</td>
</tr>
<tr>
<td>Force Regenerate Thumbnails</td>
<td><a href="http://www.pedroelsner.com/">Pedro Elsner</a></td>
<td width="511">Delete and REALLY force the regenerate thumbnail.</td>
<td>N</td>
</tr>
<tr>
<td><a href="http://www.arnebrachhold.de/redir/sitemap-home/">Google XML Sitemaps</a></td>
<td><a href="http://www.arnebrachhold.de/"> Arne Brachhold</a></td>
<td width="511">This plugin improves SEO using sitemaps for best indexation by search engines like Google, Bing, Yahoo and others.</td>
<td>Y</td>
</tr>
<tr>
<td>Image Attribution Tagger</td>
<td><a href="http://red8interactive.com/">Red8 Interactive</a></td>
<td width="511">A plugin that adds image credits to licensed images</td>
<td>Y</td>
</tr>
<tr>
<td>MimeTypes Link Icons</td>
<td><a href="https://github.com/eagerterrier/MimeTypes-Link-Icons"> Toby Cox, Juliette Reinders Folmer</a></td>
<td width="511">This will add file type icons next to links automatically.</td>
<td>Y</td>
</tr>
<tr>
<td>Multisite Plugin Manager</td>
<td><a href="http://uglyrobot.com/"> Aaron Edwards</a></td>
<td width="511">The essential plugin for every multisite install! Manage plugin access permissions across your entire multisite network.</td>
<td>Y</td>
</tr>
<tr>
<td>Multisite Privacy</td>
<td>WPMUDEV</td>
<td width="511">Adds more levels of privacy and allows you to control them across all sites – or allow users to override them.</td>
<td>Y</td>
</tr>
<tr>
<td>NS Cloner – Site Copier</td>
<td><a href="https://neversettle.it/">Never Settle</a></td>
<td width="511">Allows us to create sites from a template</td>
<td>Y</td>
</tr>
<tr>
<td>NS Cloner Pro</td>
<td><a href="https://neversettle.it/">Never Settle</a></td>
<td width="511">add-ons to the NS Cloner Core</td>
<td>Y</td>
</tr>
<tr>
<td>Open Attribute</td>
<td><a href="http://openattribute.com/">OpenAttribute</a></td>
<td width="511"></td>
<td>Y</td>
</tr>
<tr>
<td>PDF & Print</td>
<td><a href="https://bestwebsoft.com/">BestWebSoft</a></td>
<td width="511">Generate PDF files and print WordPress posts/pages. Customize document header/footer styles and appearance.</td>
<td>N</td>
</tr>
<tr>
<td>Reading Time WP</td>
<td><a href="https://jasonyingling.me/">Jason Yingling</a></td>
<td width="511">Add an estimated reading time to your posts.</td>
<td>N</td>
</tr>
<tr>
<td>Remove Email Verification</td>
<td>WPMUDEV</td>
<td width="511">Removes need to send a verification email when adding users to site or blogs</td>
<td>Y</td>
</tr>
<tr>
<td>TinyMCE Comment Field – WPSIWYG</td>
<td><a href="http://www.eracer.de/">Stefan Helmer</a></td>
<td width="511">This plugin turns the comment field from a primitive into a WYSIWYG editor, using the internal TinyMCE library bundled with WordPress.</td>
<td>N</td>
</tr>
<tr>
<td>Titan Framework</td>
<td><a href="http://gambit.ph/"> Benjamin Intal, Gambit</a></td>
<td width="511">Titan Framework allows theme and plugin developers to create a admin pages, options, meta boxes, and theme customizer options with just a few simple lines of code.</td>
<td>N</td>
</tr>
<tr>
<td>True Multisite Indexer</td>
<td><a href="https://rudrastyh.com/">Misha Rudrastyh</a></td>
<td width="511">Indexes all posts across your network and brings them into one spot – a very powerful tool that you use as a base to display posts in different ways or to manage your network.</td>
<td>Y</td>
</tr>
<tr>
<td>Ultimate Category Excluder</td>
<td><a href="http://infolific.com/technology/"> Marios Alexandrou</a></td>
<td width="511">Easily exclude categories from your front page, feeds, archives, and search results.</td>
<td>N</td>
</tr>
<tr>
<td>WordPress Importer</td>
<td><a href="https://wordpress.org/"> wordpressdotorg</a></td>
<td width="511">Import posts, pages, comments, custom fields, categories, tags and more from a WordPress export file.</td>
<td>Y</td>
</tr>
<tr>
<td>WordPress.com Theme Updates</td>
<td><a href="http://automattic.com/"> Automattic</a></td>
<td width="511">Update themes downloaded from WordPress.com seamlessly with the rest of your WordPress updates.</td>
<td>Y</td>
</tr>
<tr>
<td>WP Accessibility</td>
<td><a href="http://www.joedolson.com/"> Joe Dolson</a></td>
<td width="511">Helps improve accessibility in your WordPress site, like removing title attributes.</td>
<td>N</td>
</tr>
<tr>
<td>WP Crontrol</td>
<td><a href="https://github.com/johnbillion/wp-crontrol/graphs/contributors"> John Blackbourn & contributors</a></td>
<td width="511">WP Crontrol lets you view and control what’s happening in the WP-Cron system.</td>
<td>N</td>
</tr>
<tr>
<td>WP QuickLaTeX</td>
<td><a href="http://www.holoborodko.com/pavel/">Pavel Holoborodko</a></td>
<td width="511">Access to complete LaTeX distribution. Publish formulae & graphics using native LaTeX syntax directly in the text. Inline formulas, displayed equations auto-numbering, labeling and referencing, AMS-LaTeX, TikZ, custom LaTeX preamble. No LaTeX installation required. Easily customizable using UI dialog. Actively developed and maintained. Visit QuickLaTeX homepage for more info.</td>
<td>N</td>
</tr>
<tr>
<td>WP to Twitter</td>
<td><a href="http://www.joedolson.com/">Joseph C Dolson</a></td>
<td width="511">Posts a Tweet when you update your WordPress blog or post a link, using your URL shortener. Rich options to customise and promote your Tweets.</td>
<td>N</td>
</tr>
<tr>
<td>WPMUDEV Dashboard</td>
<td>WPMUDEV</td>
<td width="511">Brings the powers of WPMU DEV directly to you. It will revolutionize how you use WordPress. Activate now!</td>
<td>N</td>
</tr>
</tbody>
</table>
<p> </p>
<h3>Themes</h3>
<div>
<table style="border-collapse: collapse; width: 48pt;" border="0" width="64" cellspacing="0" cellpadding="0">
<colgroup>
<col style="width: 48pt;" width="64" /> </colgroup>
<tbody>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt; width: 48pt;" width="64" height="19"><strong>Theme Name</strong></td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Apostrophe 2</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">AwesomePress</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Baskerville</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Bhari</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Blask</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Cover</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Cover2</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Cyanotype</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Davis</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Fluida</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Fukasawa</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Garfunkel</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Hitchcock</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Intergalactic</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Intergalactic 2</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Isola</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Lovecraft</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Make</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Period</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Radcliffe</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Sorbet</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">SPLOTpoint</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Tiny Framework</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Twenty Fifteen</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Twenty Nineteen</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Twenty Seventeen</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Twenty Sixteen</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Twenty Twenty</td>
</tr>
<tr style="height: 14.5pt;">
<td style="height: 14.5pt;" height="19">Writee</td>
</tr>
</tbody>
</table>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.ed.ac.uk/sliceoflearning/2020/09/23/more-about-blogs-ed-and-plugins/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Service Inheritance</title>
		<link>https://blogs.ed.ac.uk/sliceoflearning/2020/08/14/service-inheritance/</link>
					<comments>https://blogs.ed.ac.uk/sliceoflearning/2020/08/14/service-inheritance/#comments</comments>
		
		<dc:creator><![CDATA[James Slack]]></dc:creator>
		<pubDate>Fri, 14 Aug 2020 16:06:04 +0000</pubDate>
				<category><![CDATA[Uncategorised]]></category>
		<category><![CDATA[dlam-feed]]></category>
		<guid isPermaLink="false">https://blogs.ed.ac.uk/sliceoflearning/?p=165</guid>

					<description><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Reading Time: </span> <span class="rt-time"> 6</span> <span class="rt-label rt-postfix">minutes</span></span>How to Inherit a Service A while back, before quarantine and therefore a lifetime ago, I ‘inherited’ a service. Anyone familiar with how these things go will also be somewhat familiar with how the conversation went: “We think you’ve done quiet well and we’d like you to take over this service” “Does that mean I […]]]></description>
										<content:encoded><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">Reading Time: </span> <span class="rt-time"> 6</span> <span class="rt-label rt-postfix">minutes</span></span><h1>How to Inherit a Service</h1>
<p>A while back, before quarantine and therefore a lifetime ago, I ‘inherited’ a service. Anyone familiar with how these things go will also be somewhat familiar with how the conversation went:</p>
<p>“We think you’ve done quiet well and we’d like you to take over this service”</p>
<p>“Does that mean I can drop my old service”</p>
<p>“No”.</p>
<p>Thankfully I have loved taking over this service, by this service I do actually mean *this* service. I now manage the Academic Blogging service, blogs.ed.ac.uk which is what you are reading this post on. I have blogged in the past but sporadically at best. Managing the service is completely different, managing any service is difficult but managing a service which is designed to be open and allow people to do what they want (to an extent) comes with it’s own interesting challenges, more of that in another post.</p>
<p>Today however I wanted to talk more specifically about inheriting a service. It’s something that I hadn’t really thought about before but it struck me that this is the first ‘living’ service that I have taken over. I have a relatively short period of experience of managing learning technology services, roughly 6 years at this point. In that time I have managed two large services but both of these were in their infancy when I got hold. I was able to largely decide what these service should look like, what they would look like and what the policies around them would be. Obviously there is an amount of team work and involvement of other teams in this process but as a service manager the impetus usually came from me.</p>
<p>Taking on a new service that has existed before, however, is something completely different. I often enjoy using bad analogies that I tend to stretch to far, so allow me to do this yet again: Inheriting services is like getting an armchair that belonged to someone else (ish). It’s arranged in a different way, it faces the door, it doesn’t go back far enough, it feels a bit to firm and there are Revels tucked into the side of the cushion. Who would put Revels down there, why would they choose Revels of all the things available?</p>
<h2>Service Personality</h2>
<p>The problem/issue/opportunity is, someone or a group of somebodies have decided how this should work and put it all in place. Now you come in and you’re not sure if you always agree. Most of the time you will but you just need to understand the ‘why’ after seeing the ‘what’ and ‘how’. Most services have a ‘vision’ of sorts attached, usually within the original Project Brief or the Service Level Description (SLD) that sets out the ‘shape’ of the service. This works great in isolation but what often happens is that this clearly defined ‘shape’ then gets released and it tends to need to alter shape to fits its environment in some way. (I DID say I enjoy bad analogies).</p>
<h2>Opportunities for Change</h2>
<p>I’ve always very strongly believed that getting a ‘fresh pair of eyes’ is possibly one of the most useful things to do when you have a great idea or process. Having someone outside of the ‘organisation’ take a look is often the best way to pick up on things, firstly it forces you to explain why you made a decision and also allows you to be questioned. If you can’t convince someone as to why something works that way then you might want to re-evaluate or compromise with the other view point. I love the following quote, which I believe is attributed to Grace Hopper  – “The most dangerous phrase in the language is, ‘We’ve always done it this way’ ”</p>
<p>(If you don’t know who Grace Hopper is, please pause and look her up. I will wait)</p>
<h2>Inheritance runs both ways</h2>
<p>This is the part that surprised me the most when I realised that this was the first service that was secondhand/pre-loved/pre-existing/had a life before me. I started this long monologue talking about how I had inherited something but it seems obvious that the service had also imbibed something from it’s creators and previous owners. There were certain priorities or choices that were made by previous people upon the service, impressions in the surface that had left their mark. I agree with the vast majority of these but some I want to change, based on my priorities or choices that I think make it fit it’s environment in a better way, or a way that appears better to me. Obviously all of this is measured alongside the needs of the current community, I wouldn’t make big changes that negatively impacted people using the service but I may make decisions that change the ‘flavour’ in some ways.</p>
<h2>Making it yours or making you part of it</h2>
<p>After you have been looking after the service for a short while you will likely find a list of things that don’t really feel right to you. It’s likely that these decisions were made some time ago and might not reflect the needs of the user community anymore. I would say it is important to mention here that we aren’t criticising the previous owners, just using this change as an opportunity to review and also add you own input to the service. Once you have found these areas then try to seek the justification if possible, there could be a very good reason as to why something works like this and not like *this*. If there isn’t a good justification or if that doesn’t really hold anymore then start building your case for making a change and what that change will be. Next you get to take these changes to the service team, working group or user community. If these don’t exist then this is a good chance to make them as having some external input, if only at certain times will greatly improve the service as a whole. Also be sure to check that these changes are actually wanted/needed/will have a positive impact, change for the sake of change is a winding road. Always remember RACI (Responsible, Accountable,<strong> Consulted, Informed</strong>)</p>
<p>This is the part that I enjoy the most about managing services, there is a human part even if what *it* is an application running on virtual machines somewhere (I imagine in a basement, because, it has to be). I get to take all of the work that went before and add my layer on top and alter it ever so slightly, like a funky new flavour in your Rainbow Cake – I REALLY DID say that I like bad analogies.</p>
<p> </p>
<div id="attachment_166" style="width: 696px" class="wp-caption alignnone"><img fetchpriority="high" decoding="async" aria-describedby="caption-attachment-166" class="size-full wp-image-166" src="https://blogs.ed.ac.uk/sliceoflearning/wp-content/uploads/sites/2048/2020/08/7478835056_c91640ed8c_b.jpg" alt=""Layers from top - Rainbow Birthday Cake" by avlxyz is licensed under CC BY-NC-SA 2.0" width="686" height="1024" /><p id="caption-attachment-166" class="wp-caption-text">“Layers from top – Rainbow Birthday Cake” by avlxyz is licensed under CC BY-NC-SA 2.0</p></div>
<p> </p>
<p>Takeaways from service inheritance</p>
<p>If you are a current service owner</p>
<ul>
<li>For you managing a service, try to document what decisions were taken and why they were taken, this makes it a lot quicker for someone to get a feel for how the service exists now. Adding the justification really makes a big difference when someone new steps in</li>
<li>Even if the service isn’t being taken over by someone else it can be very helpful to get fresh eyes on a service, or to include more people when making the decisions. Working groups or user involvement are very good for this.</li>
<li>Try to update original documentation as the service shifts over time, most institutions seem to push for this at intervals but it helps to remember how services can change over time.</li>
<li>Include retrospective look backs at the service at regular intervals, perhaps each year. Having a look at the changes that were added, how they were received and whether they helped add something useful to the service is a very rewarding process</li>
</ul>
<p>If you are taking over an existing service</p>
<ul>
<li>Getting an overview or introduction to the service is incredibly useful but do bear in mind that it is unlikely that you will be able to understand the entire service after one meeting</li>
<li>If possible try to take the previous service owner hostage so that you can refer to them if they didn’t document things</li>
<li>Once you have a good understanding of the service highlight the areas that you have issues with. Areas that you don’t understand why something was done in a particular way or why a certain policy exists. Try to find to root cause for these, if they make sense and fit the service you can leave them for now. If that doesn’t fit the service or the user’s need then earmark those areas for change.</li>
<li>Add your personal touch, come up with suggestions in these specific areas that you have highlighted and taken them to existing working groups or service team. If they don’t exist then consider creating them.</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://blogs.ed.ac.uk/sliceoflearning/2020/08/14/service-inheritance/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
"
      ["headers"]=>
      object(WpOrg\Requests\Response\Headers)#2442 (1) {
        ["data":protected]=>
        array(12) {
          ["content-type"]=>
          array(1) {
            [0]=>
            string(34) "application/rss+xml; charset=UTF-8"
          }
          ["date"]=>
          array(1) {
            [0]=>
            string(29) "Fri, 01 May 2026 11:59:16 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(194) "<https://blogs.ed.ac.uk/sliceoflearning/wp-json/>; rel="https://api.w.org/", <https://blogs.ed.ac.uk/sliceoflearning/wp-json/wp/v2/tags/8>; rel="alternate"; title="JSON"; type="application/json""
          }
          ["set-cookie"]=>
          array(3) {
            [0]=>
            string(62) "PHPSESSID=748lo4htacuet7v340m8jmf5f6; path=/; secure; HttpOnly"
            [1]=>
            string(139) "spo_2048_fa=1f6a19a4a61ea1542b1e6b34a077e786; expires=Fri, 01 May 2026 12:29:16 GMT; Max-Age=1800; path=/sliceoflearning/; Secure; HttpOnly"
            [2]=>
            string(125) "RCKBMHKB=027ff8be59-56fd-487leV5KYY7NnkcyAVHh8LpCmXTReoTNgkW2QHIwGWZv1KLHSOSRQw--B80n-VTPbWKW8; path=/; SameSite=None; Secure"
          }
          ["last-modified"]=>
          array(1) {
            [0]=>
            string(29) "Mon, 05 Sep 2022 13:49:32 GMT"
          }
          ["etag"]=>
          array(1) {
            [0]=>
            string(34) ""3f92756d9ecbe74d271c36001f3864b1""
          }
          ["vary"]=>
          array(1) {
            [0]=>
            string(15) "Accept-Encoding"
          }
        }
      }
      ["status_code"]=>
      int(200)
      ["protocol_version"]=>
      float(1.1)
      ["success"]=>
      bool(true)
      ["redirects"]=>
      int(0)
      ["url"]=>
      string(58) "https://blogs.ed.ac.uk/sliceoflearning/feed/?tag=dlam-feed"
      ["history"]=>
      array(0) {
      }
      ["cookies"]=>
      object(WpOrg\Requests\Cookie\Jar)#2438 (1) {
        ["cookies":protected]=>
        array(3) {
          ["PHPSESSID"]=>
          object(WpOrg\Requests\Cookie)#2446 (5) {
            ["name"]=>
            string(9) "PHPSESSID"
            ["value"]=>
            string(26) "748lo4htacuet7v340m8jmf5f6"
            ["attributes"]=>
            object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2445 (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(1777636756)
              ["last-access"]=>
              int(1777636756)
              ["persistent"]=>
              bool(false)
              ["host-only"]=>
              bool(true)
            }
            ["reference_time"]=>
            int(1777636756)
          }
          ["spo_2048_fa"]=>
          object(WpOrg\Requests\Cookie)#2447 (5) {
            ["name"]=>
            string(11) "spo_2048_fa"
            ["value"]=>
            string(32) "1f6a19a4a61ea1542b1e6b34a077e786"
            ["attributes"]=>
            object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2448 (1) {
              ["data":protected]=>
              array(6) {
                ["expires"]=>
                int(1777638556)
                ["max-age"]=>
                int(1777638556)
                ["path"]=>
                string(17) "/sliceoflearning/"
                ["secure"]=>
                bool(true)
                ["httponly"]=>
                bool(true)
                ["domain"]=>
                string(14) "blogs.ed.ac.uk"
              }
            }
            ["flags"]=>
            array(4) {
              ["creation"]=>
              int(1777636756)
              ["last-access"]=>
              int(1777636756)
              ["persistent"]=>
              bool(false)
              ["host-only"]=>
              bool(true)
            }
            ["reference_time"]=>
            int(1777636756)
          }
          ["RCKBMHKB"]=>
          object(WpOrg\Requests\Cookie)#2449 (5) {
            ["name"]=>
            string(8) "RCKBMHKB"
            ["value"]=>
            string(85) "027ff8be59-56fd-487leV5KYY7NnkcyAVHh8LpCmXTReoTNgkW2QHIwGWZv1KLHSOSRQw--B80n-VTPbWKW8"
            ["attributes"]=>
            object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2450 (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(1777636756)
              ["last-access"]=>
              int(1777636756)
              ["persistent"]=>
              bool(false)
              ["host-only"]=>
              bool(true)
            }
            ["reference_time"]=>
            int(1777636756)
          }
        }
      }
    }
    ["filename":protected]=>
    NULL
  }
}
Diag| Considering item [https://blogs.ed.ac.uk/sliceoflearning/?p=176] "More about Blogs.ed and Plugins"
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/sliceoflearning/?p=176'))
					 
					 ORDER BY wp_30_posts.post_date DESC
					 
Diag====| Item [https://blogs.ed.ac.uk/sliceoflearning/?p=176] "More about Blogs.ed and Plugins" is a duplicate of an existing post.
Diag| Considering item [https://blogs.ed.ac.uk/sliceoflearning/?p=165] "Service Inheritance"
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/sliceoflearning/?p=165'))
					 
					 ORDER BY wp_30_posts.post_date DESC
					 
Diag====| Item [https://blogs.ed.ac.uk/sliceoflearning/?p=165] "Service Inheritance" is a duplicate of an existing post.
New H5P Interactive Content Type: Branching Scenario (Part Two) – 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.

New H5P Interactive Content Type: Branching Scenario (Part Two)

From Labyrinth to H5P

First developed within CMVM back in 2004, Labyrinth was a game-based pathway system for creating and playing virtual patients. As the Labyrinth platform is built in Classic ASP, I wanted to see if we could use the H5P Branching Scenario as a possible alternative or successor.

From the thousands published, I selected a single case study I was involved in many years ago – MBcHB Acute Medicine: Enid Langdale. The scenario is, you are an FY1 doctor and you have to make various decisions in an acute medical ward. With only one hour left on your shift, things take a dramatic turn…

Branching

As with all branching it is a good idea to map everything out. In Labyrinth if your map was really simple you could probably get away with just creating the nodes (HTML pages effectively) and linking them manually, otherwise we used VUE (Visual Understanding Environment), a mapping software created by Tufts. This could then be uploaded to Labyrinth where it would create all your nodes and branching for you.

As as I mentioned in Part one H5P has the mapping actually built in to the interface, it is easy to drag-and-drop directly on to the canvas. This means you can see where your branches are and where they go quite quickly, particularly if you want to edit something. If you click on the link it highlights where it links to, there is also a number in the bottom right which lets you know which branches don’t go anywhere. Editing links in Labyrinth is more of a challenge, unless you have a good memory you have to make a note of which nodes link to which.

On the left Labyrinth links editor and on the right H5P branching relationship

Left: Labyrinth nodes and links. Right: H5P branching relationship.

Adding media

In Labyrinth the media had to be uploaded to the files area and then you added the media reference (shortcode) created to the appropriate node. In H5P there are many ways to add media, do you create a Course Presentation where you can add lots of information and media as a slideshow, images, text, video, or Branching Questions where you can have feedback and an image? As I discovered a bit more thought is required.

Left: Labyrinth file upload, top right: H5P Branching question feedback, bottom right: H5P image editor

Left: Labyrinth file upload. Top right: H5P Branching question feedback. Bottom right: H5P image editor.

Conclusion

I think the H5P Branching Scenario is really powerful, it works slightly differently to Labyrinth, each have their own strengths and weaknesses. I really enjoyed using the H5P Branching Scenario, it is a great addition to the H5P interactive collection and could certainly be an alternative to Labyrinth.

Playful learning

See way you think and play our H5P Branching Scenario prototype (work-in-progress):

Share

Leave a reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Diag| Memory: Current usage: 9 MB
Diag| Memory: Peak usage: 9 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