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/lramutsa/feed/]
Diag====| HTTP [https://blogs.ed.ac.uk/lramutsa/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/lramutsa/feed/] ⌉ array(6) {
  ["headers"]=>
  object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2411 (1) {
    ["data":protected]=>
    array(12) {
      ["content-type"]=>
      string(34) "application/rss+xml; charset=UTF-8"
      ["date"]=>
      string(29) "Sat, 13 Jun 2026 09:58:02 GMT"
      ["server"]=>
      string(6) "Apache"
      ["x-powered-by"]=>
      string(10) "PHP/8.3.31"
      ["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(68) "<https://blogs.ed.ac.uk/lramutsa/wp-json/>; rel="https://api.w.org/""
      ["set-cookie"]=>
      array(3) {
        [0]=>
        string(62) "PHPSESSID=2qam20a496t4h70mcjfhaekumb; path=/; secure; HttpOnly"
        [1]=>
        string(132) "spo_9865_fa=ed90b7d8fac126105541600d5650d741; expires=Sat, 13 Jun 2026 10:28:02 GMT; Max-Age=1800; path=/lramutsa/; Secure; HttpOnly"
        [2]=>
        string(125) "RCKBMHKB=027ff8be59-56fd-482Z0ykgAv9Cke1g4zua8BZDNC-6GLNEDEYx6sBuMGGhP7rVfBq6XXMZnEYSsEHYOCTUU; path=/; SameSite=None; Secure"
      }
      ["last-modified"]=>
      string(29) "Fri, 27 Mar 2026 13:01:18 GMT"
      ["etag"]=>
      string(34) ""0e0241b0d0da1df953c03c1bff9fac51""
      ["vary"]=>
      string(15) "Accept-Encoding"
    }
  }
  ["body"]=>
  string(17543) "<?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>Leopold Ramutsamaya’s Blog</title>
	<atom:link href="https://blogs.ed.ac.uk/lramutsa/feed/" rel="self" type="application/rss+xml" />
	<link>https://blogs.ed.ac.uk/lramutsa</link>
	<description>Leopold Ramutsamaya's Blog for personal use</description>
	<lastBuildDate>Fri, 27 Mar 2026 13:01:18 +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>It depends!</title>
		<link>https://blogs.ed.ac.uk/lramutsa/2026/03/27/it-depends/</link>
					<comments>https://blogs.ed.ac.uk/lramutsa/2026/03/27/it-depends/#respond</comments>
		
		<dc:creator><![CDATA[lramutsa]]></dc:creator>
		<pubDate>Fri, 27 Mar 2026 09:01:25 +0000</pubDate>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[dlam]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php-conference]]></category>
		<category><![CDATA[software development]]></category>
		<guid isPermaLink="false">https://blogs.ed.ac.uk/lramutsa/?p=57</guid>

					<description><![CDATA[I had the pleasure of attending the PHP UK Conference in London this year. It was my second time, and it was even more exciting than the last! We had three simultaneous sessions, with 19 carefully chosen speakers and a new venue to welcome over 200 attendees. We got to connect with experienced developers, newcomers […]]]></description>
										<content:encoded><![CDATA[<p>I had the pleasure of attending the PHP UK Conference in London this year. It was my second time, and it was even more exciting than the last! We had three simultaneous sessions, with 19 carefully chosen speakers and a new venue to welcome over 200 attendees.</p>
<p>We got to connect with experienced developers, newcomers and speakers, sharing ideas, concerns and developments across the developer community. This year, the speakers covered a wide range of technical topics, from seasoned open-source contributors like Sebastian Bergmann (the creator of PHPUnit), new product launches like Simon Hamp (the creator of NativePhp), performance enthusiasts like Volker Dusch (PHP 8.5 Release Manager) and long-time PHP contributors like Sara Golemon (PHP release manager at the PHP Foundation).</p>
<p>With so many fascinating and insightful talks, Gary Hockin’s talk on technical trade-offs really stood out to me. His talk, ‘It Depends’, aimed to explain why tech experts rarely give a straightforward ‘yes or no’ answer. It showed that every choice involves a trade-off – a ‘slider’ where getting one benefit often means giving up something else. I have had conversations with colleagues who are exploring tools to make their daily tasks easier, from visualising data within Learn, optimising queries to the database or setting up an application to try out a new AI tool – the question always is, which tool is the best?</p>
<p>Hockin’s main point is that there are no set answers when it comes to technology. Knowing that ‘it depends’ isn’t just a way out, but rather the first step towards making better, more thoughtful choices. It often means realising that every decision we make usually doesn’t have a single ‘right’ answer, rather well-considered compromises. Instead of looking for a one-size-fits-all ‘best’ solution, successful teams learn to ask more specific questions. Picking a programming language, database or framework can sometimes feel like choosing the ‘best’ car. A car that’s perfect for a racetrack won’t work for a snowy driveway and probably won’t be good for a school run with four kids. The same idea applies to our everyday jobs and decisions that come with it. The ‘best’ choice depends entirely on the situation, like the team’s experience, how much money and time we have and what the project needs to achieve.</p>
<p>From picking the best room to book for your non-anchor day at FH to deciding what lunch to have at the ISG Spring event, we need to ask the right questions and have the complete view of the slider before making the right choice. As i retreat to my everyday tasks and the decisions I must make, I am more conscious to seek the full picture, assess the slider in its entirety to ensure I have a good understanding of all the negatives and positives and ask the right questions. It is not as easy as it sounds, but with practice and constant refinement, “it depends” becomes a part of every decision we need to make.</p>

			<span class="uoe-published-time uoe-seo-hidden-area">
				<time datetime="2026-03-27" itemprop="dateModified">Mar 27, 2026</time>
			</span>
		]]></content:encoded>
					
					<wfw:commentRss>https://blogs.ed.ac.uk/lramutsa/2026/03/27/it-depends/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Lights, Camera, Learn!</title>
		<link>https://blogs.ed.ac.uk/lramutsa/2025/03/02/lights-camera-learn/</link>
					<comments>https://blogs.ed.ac.uk/lramutsa/2025/03/02/lights-camera-learn/#respond</comments>
		
		<dc:creator><![CDATA[lramutsa]]></dc:creator>
		<pubDate>Sun, 02 Mar 2025 19:56:58 +0000</pubDate>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php-conference]]></category>
		<category><![CDATA[software development]]></category>
		<guid isPermaLink="false">https://blogs.ed.ac.uk/lramutsa/?p=32</guid>

					<description><![CDATA[I had the pleasure of attending the 2025 PHP UK Conference in London on 19th of February. The speakers were amazing, and each session gave us practical tips on the challenges we face as software developers and the cutting-edge tech being developed by other developers. The conference had two tracks concurrently running most of the […]]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" class="size-medium wp-image-35 alignleft" src="https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2025/02/PHP-UK-Conference-300x100.jpeg" alt="PHP UK Conference 2025" width="300" height="100" srcset="https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2025/02/PHP-UK-Conference-300x100.jpeg 300w, https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2025/02/PHP-UK-Conference-1024x341.jpeg 1024w, https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2025/02/PHP-UK-Conference-768x256.jpeg 768w, https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2025/02/PHP-UK-Conference-1440x480.jpeg 1440w, https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2025/02/PHP-UK-Conference.jpeg 1500w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p class="p1">I had the pleasure of attending the 2025 PHP UK Conference in London on 19th of February. The speakers were amazing, and each session gave us practical tips on the challenges we face as software developers and the cutting-edge tech being developed by other developers.</p>
<p class="p1">The conference had two tracks concurrently running most of the day, so you could choose which talks were most interesting. Luckily, I was there with a work colleague, so we were able to cover both tracks and not miss out on any talks. I have highlighted some of the talks that really inspired me to think differently and unlock a toolkit of ideas to level up my developer skills.</p>
<p class="p1">Craig Francis talked about “Ending Injection Vulnerabilities,” a topic that every developer should know about. Even though PHP has improved, SQL injection attacks still happen a lot. Craig showed us real-world examples that were used in production which left many reviewing their code bases. He stressed that languages make it easy to add vulnerable code with just one line of code (which works), but it’s harder to make secure code with several lines of code – something that should change by making secure code just as easy to write as insecure one. He also said that escaping inputs or using Object-Relational Mapping (ORM like Eloquent) isn’t enough. Instead, we should take a “zero-trust” approach to any data that users send and make sure that security principles like using prepared statements and validating every user input are followed. On top of that, we should make sure that we actually use the functions provided by these ORMs as they’re meant to be used, so we don’t open backdoors on otherwise secure code.</p>
<p class="p1">Liam Hammett’s session, “Beyond Requests: Supercharging API Monitoring with Guzzle Middleware,” was a real eye-opener for me. I have used Guzzle before, but Liam showed me how to use middleware to log requests, view traces, and observe metrics. This way, I can easily monitor my application’s performance. He also showed us how to use Graphana, Tempo, Prometheus, and Loki to monitor different log levels and API telemetry from our application. We have a few apps that could really benefit from this kind of logging and monitoring, like our Class Group Builder, Bulk unenrol tool or our infrastructure servers that currently host the Short Courses Platform.</p>
<p class="p1">Ivo Lukac’s shared “Learn to Appreciate Legacy,” a heartwarming story about a fictional developer named Zed, was also really moving. Through Zed’s struggles with a messy and old codebase, Ivo showed us how legacy code often contains important business logic and institutional knowledge. It hit home for me because I have often complained about “legacy code” that we have running on some of our old apps, instead of seeing its value. Ivo’s positive outlook has me rethinking how I approach maintenance work. He shared some strategies for maintaining and refactoring such code without breaking everything and leaving every file that you’ve worked on better than you found it. The lesson? Legacy code is just code that’s been pushed to production!</p>
<p class="p1">Finally, Kevin Dunglas closed off the talks with “Give Your PHP Apps Superpowers with FrankenPHP”. This modern PHP server, built on Caddy, handles concurrency easily and supports real-time features out of the box. It also boosts performance by preloading classes. The “worker mode” was the coolest part for me, as it lets you run persistent processes for tasks like queued jobs without external services. I can’t wait to try it on a side project, maybe a chat app, and see how it simplifies my workflow. As far as I could tell, for developers, it’s a game-changer, combining PHP’s simplicity with the enterprise-grade power of Go.</p>
<p class="p1">With so many exciting talks happening at the same time on two tracks, it’s easy to miss out on others. It would be awesome if the organisers could split the talks over two days so everyone can hear everything. On the bright side, this conference made me realise that PHP is still evolving and there’s always something new and exciting coming from the community.</p>
<p class="p1">As I get back to my projects, I’m inspired to pay closer attention to every input, monitor APIs smartly, respect legacy code, and use tools that push PHP to its limits. Conferences aren’t just about learning new tricks—they remind us why we love this craft. We have the chance to build a better world, one line of code at a time!</p>

			<span class="uoe-published-time uoe-seo-hidden-area">
				<time datetime="2025-03-02" itemprop="dateModified">Mar 2, 2025</time>
			</span>
		]]></content:encoded>
					
					<wfw:commentRss>https://blogs.ed.ac.uk/lramutsa/2025/03/02/lights-camera-learn/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>A day in the life of an eLearning Systems Developer</title>
		<link>https://blogs.ed.ac.uk/lramutsa/2024/01/26/a-day-in-the-life-of-an-elearning-systems-developer/</link>
					<comments>https://blogs.ed.ac.uk/lramutsa/2024/01/26/a-day-in-the-life-of-an-elearning-systems-developer/#respond</comments>
		
		<dc:creator><![CDATA[lramutsa]]></dc:creator>
		<pubDate>Fri, 26 Jan 2024 14:10:31 +0000</pubDate>
				<category><![CDATA[Uncategorised]]></category>
		<category><![CDATA[dlam]]></category>
		<category><![CDATA[dlam-feed]]></category>
		<category><![CDATA[leopold ramutsamaya]]></category>
		<category><![CDATA[software development]]></category>
		<guid isPermaLink="false">https://blogs.ed.ac.uk/lramutsa/?p=9</guid>

					<description><![CDATA[As an eLearning Systems Developer in a dynamic small team, my role revolves around creating custom web applications, university-wide platforms, and extensions for the central virtual learning environment, Blackboard Learn. With over 20 applications under our belt, each presenting unique challenges and varying complexities, my days are a blend of technical expertise, collaboration, and continuous […]]]></description>
										<content:encoded><![CDATA[<p style="text-align: left"><img loading="lazy" decoding="async" class="size-medium wp-image-28 alignleft" src="https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2024/01/Leopold-Photo-300x300.jpg" alt="Leopold Ramutsamaya Photo" width="300" height="300" srcset="https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2024/01/Leopold-Photo-300x300.jpg 300w, https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2024/01/Leopold-Photo-150x150.jpg 150w, https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2024/01/Leopold-Photo-768x768.jpg 768w, https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2024/01/Leopold-Photo.jpg 960w" sizes="auto, (max-width: 300px) 100vw, 300px" />As an eLearning Systems Developer in a dynamic small team, my role revolves around creating custom web applications, university-wide platforms, and extensions for the central virtual learning environment, Blackboard Learn. With over 20 applications under our belt, each presenting unique challenges and varying complexities, my days are a blend of technical expertise, collaboration, and continuous learning.</p>
<p style="text-align: left">The day kicks off with catching up on both personal and team support emails. This ensures I am aware of any potential challenges or issues that may shape my workday. Whether it’s a student seeking support or a system alert for an application running out of storage, addressing these promptly ensures a smooth workflow. Following this, our daily team scrum meetings provide a platform for brief but vital discussion on completed tasks, ongoing work, and potential roadblocks. These meetings help the team keep on tabs on all the work at hand and the progress being made, as well as offer help on any issues you are facing – more often than not, someone else may have faced similar issue and already have a solution or a way to handle the issue.</p>
<p style="text-align: left">With the morning meetings concluded, the day unfolds into a solo venture of coding and project planning for the rest of the day – the ability to manage and prioritise your own work becomes very crucial. Working with sprint tickets, our team follows a meticulous process that includes peer code review and writing of automated tests. This not only enhances code quality by minimizing errors but also provides a unique opportunity for professional growth as different viewpoints and solutions emerge during code reviews, creating a fertile ground for the exchange of ideas. Writing automated tests ensures that new features align with specifications without disrupting existing logic.</p>
<p style="text-align: left">Reflection becomes a crucial part of the daily routine, providing insights into lessons learned, challenges faced, and opportunities for improvement. In the ever-evolving realm of software development, challenges serve as stepping stones for professional growth. Crucially, the supportive ecosystem within the team and the section at large is the cornerstone of our success. Knowing that assistance is just an inquiry away fosters a collaborative spirit, making the complex web of software development more manageable.</p>
<p style="text-align: left">One of the most rewarding aspects of my job is the opportunity to work on a multitude of applications, employing various technologies and catering to different stakeholders across the university. This diversity exposes me to processes beyond my immediate scope, allowing me to contribute to the resolution of challenges faced by staff and students throughout their daily routines. Each day is a unique opportunity to shape the digital future of education, one line of code at a time.</p>

			<span class="uoe-published-time uoe-seo-hidden-area">
				<time datetime="2024-01-26" itemprop="dateModified">Jan 26, 2024</time>
			</span>
		]]></content:encoded>
					
					<wfw:commentRss>https://blogs.ed.ac.uk/lramutsa/2024/01/26/a-day-in-the-life-of-an-elearning-systems-developer/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)#2423 (7) {
      ["name"]=>
      string(9) "PHPSESSID"
      ["value"]=>
      string(26) "2qam20a496t4h70mcjfhaekumb"
      ["expires"]=>
      NULL
      ["path"]=>
      string(1) "/"
      ["domain"]=>
      string(14) "blogs.ed.ac.uk"
      ["port"]=>
      NULL
      ["host_only"]=>
      bool(true)
    }
    [1]=>
    object(WP_Http_Cookie)#2422 (7) {
      ["name"]=>
      string(11) "spo_9865_fa"
      ["value"]=>
      string(32) "ed90b7d8fac126105541600d5650d741"
      ["expires"]=>
      int(1781346482)
      ["path"]=>
      string(10) "/lramutsa/"
      ["domain"]=>
      string(14) "blogs.ed.ac.uk"
      ["port"]=>
      NULL
      ["host_only"]=>
      bool(true)
    }
    [2]=>
    object(WP_Http_Cookie)#2424 (7) {
      ["name"]=>
      string(8) "RCKBMHKB"
      ["value"]=>
      string(85) "027ff8be59-56fd-482Z0ykgAv9Cke1g4zua8BZDNC-6GLNEDEYx6sBuMGGhP7rVfBq6XXMZnEYSsEHYOCTUU"
      ["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)#2410 (5) {
    ["data"]=>
    NULL
    ["headers"]=>
    NULL
    ["status"]=>
    NULL
    ["response":protected]=>
    object(WpOrg\Requests\Response)#2412 (10) {
      ["body"]=>
      string(17543) "<?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>Leopold Ramutsamaya’s Blog</title>
	<atom:link href="https://blogs.ed.ac.uk/lramutsa/feed/" rel="self" type="application/rss+xml" />
	<link>https://blogs.ed.ac.uk/lramutsa</link>
	<description>Leopold Ramutsamaya's Blog for personal use</description>
	<lastBuildDate>Fri, 27 Mar 2026 13:01:18 +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>It depends!</title>
		<link>https://blogs.ed.ac.uk/lramutsa/2026/03/27/it-depends/</link>
					<comments>https://blogs.ed.ac.uk/lramutsa/2026/03/27/it-depends/#respond</comments>
		
		<dc:creator><![CDATA[lramutsa]]></dc:creator>
		<pubDate>Fri, 27 Mar 2026 09:01:25 +0000</pubDate>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[dlam]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php-conference]]></category>
		<category><![CDATA[software development]]></category>
		<guid isPermaLink="false">https://blogs.ed.ac.uk/lramutsa/?p=57</guid>

					<description><![CDATA[I had the pleasure of attending the PHP UK Conference in London this year. It was my second time, and it was even more exciting than the last! We had three simultaneous sessions, with 19 carefully chosen speakers and a new venue to welcome over 200 attendees. We got to connect with experienced developers, newcomers […]]]></description>
										<content:encoded><![CDATA[<p>I had the pleasure of attending the PHP UK Conference in London this year. It was my second time, and it was even more exciting than the last! We had three simultaneous sessions, with 19 carefully chosen speakers and a new venue to welcome over 200 attendees.</p>
<p>We got to connect with experienced developers, newcomers and speakers, sharing ideas, concerns and developments across the developer community. This year, the speakers covered a wide range of technical topics, from seasoned open-source contributors like Sebastian Bergmann (the creator of PHPUnit), new product launches like Simon Hamp (the creator of NativePhp), performance enthusiasts like Volker Dusch (PHP 8.5 Release Manager) and long-time PHP contributors like Sara Golemon (PHP release manager at the PHP Foundation).</p>
<p>With so many fascinating and insightful talks, Gary Hockin’s talk on technical trade-offs really stood out to me. His talk, ‘It Depends’, aimed to explain why tech experts rarely give a straightforward ‘yes or no’ answer. It showed that every choice involves a trade-off – a ‘slider’ where getting one benefit often means giving up something else. I have had conversations with colleagues who are exploring tools to make their daily tasks easier, from visualising data within Learn, optimising queries to the database or setting up an application to try out a new AI tool – the question always is, which tool is the best?</p>
<p>Hockin’s main point is that there are no set answers when it comes to technology. Knowing that ‘it depends’ isn’t just a way out, but rather the first step towards making better, more thoughtful choices. It often means realising that every decision we make usually doesn’t have a single ‘right’ answer, rather well-considered compromises. Instead of looking for a one-size-fits-all ‘best’ solution, successful teams learn to ask more specific questions. Picking a programming language, database or framework can sometimes feel like choosing the ‘best’ car. A car that’s perfect for a racetrack won’t work for a snowy driveway and probably won’t be good for a school run with four kids. The same idea applies to our everyday jobs and decisions that come with it. The ‘best’ choice depends entirely on the situation, like the team’s experience, how much money and time we have and what the project needs to achieve.</p>
<p>From picking the best room to book for your non-anchor day at FH to deciding what lunch to have at the ISG Spring event, we need to ask the right questions and have the complete view of the slider before making the right choice. As i retreat to my everyday tasks and the decisions I must make, I am more conscious to seek the full picture, assess the slider in its entirety to ensure I have a good understanding of all the negatives and positives and ask the right questions. It is not as easy as it sounds, but with practice and constant refinement, “it depends” becomes a part of every decision we need to make.</p>

			<span class="uoe-published-time uoe-seo-hidden-area">
				<time datetime="2026-03-27" itemprop="dateModified">Mar 27, 2026</time>
			</span>
		]]></content:encoded>
					
					<wfw:commentRss>https://blogs.ed.ac.uk/lramutsa/2026/03/27/it-depends/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Lights, Camera, Learn!</title>
		<link>https://blogs.ed.ac.uk/lramutsa/2025/03/02/lights-camera-learn/</link>
					<comments>https://blogs.ed.ac.uk/lramutsa/2025/03/02/lights-camera-learn/#respond</comments>
		
		<dc:creator><![CDATA[lramutsa]]></dc:creator>
		<pubDate>Sun, 02 Mar 2025 19:56:58 +0000</pubDate>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php-conference]]></category>
		<category><![CDATA[software development]]></category>
		<guid isPermaLink="false">https://blogs.ed.ac.uk/lramutsa/?p=32</guid>

					<description><![CDATA[I had the pleasure of attending the 2025 PHP UK Conference in London on 19th of February. The speakers were amazing, and each session gave us practical tips on the challenges we face as software developers and the cutting-edge tech being developed by other developers. The conference had two tracks concurrently running most of the […]]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" class="size-medium wp-image-35 alignleft" src="https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2025/02/PHP-UK-Conference-300x100.jpeg" alt="PHP UK Conference 2025" width="300" height="100" srcset="https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2025/02/PHP-UK-Conference-300x100.jpeg 300w, https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2025/02/PHP-UK-Conference-1024x341.jpeg 1024w, https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2025/02/PHP-UK-Conference-768x256.jpeg 768w, https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2025/02/PHP-UK-Conference-1440x480.jpeg 1440w, https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2025/02/PHP-UK-Conference.jpeg 1500w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p class="p1">I had the pleasure of attending the 2025 PHP UK Conference in London on 19th of February. The speakers were amazing, and each session gave us practical tips on the challenges we face as software developers and the cutting-edge tech being developed by other developers.</p>
<p class="p1">The conference had two tracks concurrently running most of the day, so you could choose which talks were most interesting. Luckily, I was there with a work colleague, so we were able to cover both tracks and not miss out on any talks. I have highlighted some of the talks that really inspired me to think differently and unlock a toolkit of ideas to level up my developer skills.</p>
<p class="p1">Craig Francis talked about “Ending Injection Vulnerabilities,” a topic that every developer should know about. Even though PHP has improved, SQL injection attacks still happen a lot. Craig showed us real-world examples that were used in production which left many reviewing their code bases. He stressed that languages make it easy to add vulnerable code with just one line of code (which works), but it’s harder to make secure code with several lines of code – something that should change by making secure code just as easy to write as insecure one. He also said that escaping inputs or using Object-Relational Mapping (ORM like Eloquent) isn’t enough. Instead, we should take a “zero-trust” approach to any data that users send and make sure that security principles like using prepared statements and validating every user input are followed. On top of that, we should make sure that we actually use the functions provided by these ORMs as they’re meant to be used, so we don’t open backdoors on otherwise secure code.</p>
<p class="p1">Liam Hammett’s session, “Beyond Requests: Supercharging API Monitoring with Guzzle Middleware,” was a real eye-opener for me. I have used Guzzle before, but Liam showed me how to use middleware to log requests, view traces, and observe metrics. This way, I can easily monitor my application’s performance. He also showed us how to use Graphana, Tempo, Prometheus, and Loki to monitor different log levels and API telemetry from our application. We have a few apps that could really benefit from this kind of logging and monitoring, like our Class Group Builder, Bulk unenrol tool or our infrastructure servers that currently host the Short Courses Platform.</p>
<p class="p1">Ivo Lukac’s shared “Learn to Appreciate Legacy,” a heartwarming story about a fictional developer named Zed, was also really moving. Through Zed’s struggles with a messy and old codebase, Ivo showed us how legacy code often contains important business logic and institutional knowledge. It hit home for me because I have often complained about “legacy code” that we have running on some of our old apps, instead of seeing its value. Ivo’s positive outlook has me rethinking how I approach maintenance work. He shared some strategies for maintaining and refactoring such code without breaking everything and leaving every file that you’ve worked on better than you found it. The lesson? Legacy code is just code that’s been pushed to production!</p>
<p class="p1">Finally, Kevin Dunglas closed off the talks with “Give Your PHP Apps Superpowers with FrankenPHP”. This modern PHP server, built on Caddy, handles concurrency easily and supports real-time features out of the box. It also boosts performance by preloading classes. The “worker mode” was the coolest part for me, as it lets you run persistent processes for tasks like queued jobs without external services. I can’t wait to try it on a side project, maybe a chat app, and see how it simplifies my workflow. As far as I could tell, for developers, it’s a game-changer, combining PHP’s simplicity with the enterprise-grade power of Go.</p>
<p class="p1">With so many exciting talks happening at the same time on two tracks, it’s easy to miss out on others. It would be awesome if the organisers could split the talks over two days so everyone can hear everything. On the bright side, this conference made me realise that PHP is still evolving and there’s always something new and exciting coming from the community.</p>
<p class="p1">As I get back to my projects, I’m inspired to pay closer attention to every input, monitor APIs smartly, respect legacy code, and use tools that push PHP to its limits. Conferences aren’t just about learning new tricks—they remind us why we love this craft. We have the chance to build a better world, one line of code at a time!</p>

			<span class="uoe-published-time uoe-seo-hidden-area">
				<time datetime="2025-03-02" itemprop="dateModified">Mar 2, 2025</time>
			</span>
		]]></content:encoded>
					
					<wfw:commentRss>https://blogs.ed.ac.uk/lramutsa/2025/03/02/lights-camera-learn/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>A day in the life of an eLearning Systems Developer</title>
		<link>https://blogs.ed.ac.uk/lramutsa/2024/01/26/a-day-in-the-life-of-an-elearning-systems-developer/</link>
					<comments>https://blogs.ed.ac.uk/lramutsa/2024/01/26/a-day-in-the-life-of-an-elearning-systems-developer/#respond</comments>
		
		<dc:creator><![CDATA[lramutsa]]></dc:creator>
		<pubDate>Fri, 26 Jan 2024 14:10:31 +0000</pubDate>
				<category><![CDATA[Uncategorised]]></category>
		<category><![CDATA[dlam]]></category>
		<category><![CDATA[dlam-feed]]></category>
		<category><![CDATA[leopold ramutsamaya]]></category>
		<category><![CDATA[software development]]></category>
		<guid isPermaLink="false">https://blogs.ed.ac.uk/lramutsa/?p=9</guid>

					<description><![CDATA[As an eLearning Systems Developer in a dynamic small team, my role revolves around creating custom web applications, university-wide platforms, and extensions for the central virtual learning environment, Blackboard Learn. With over 20 applications under our belt, each presenting unique challenges and varying complexities, my days are a blend of technical expertise, collaboration, and continuous […]]]></description>
										<content:encoded><![CDATA[<p style="text-align: left"><img loading="lazy" decoding="async" class="size-medium wp-image-28 alignleft" src="https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2024/01/Leopold-Photo-300x300.jpg" alt="Leopold Ramutsamaya Photo" width="300" height="300" srcset="https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2024/01/Leopold-Photo-300x300.jpg 300w, https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2024/01/Leopold-Photo-150x150.jpg 150w, https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2024/01/Leopold-Photo-768x768.jpg 768w, https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2024/01/Leopold-Photo.jpg 960w" sizes="auto, (max-width: 300px) 100vw, 300px" />As an eLearning Systems Developer in a dynamic small team, my role revolves around creating custom web applications, university-wide platforms, and extensions for the central virtual learning environment, Blackboard Learn. With over 20 applications under our belt, each presenting unique challenges and varying complexities, my days are a blend of technical expertise, collaboration, and continuous learning.</p>
<p style="text-align: left">The day kicks off with catching up on both personal and team support emails. This ensures I am aware of any potential challenges or issues that may shape my workday. Whether it’s a student seeking support or a system alert for an application running out of storage, addressing these promptly ensures a smooth workflow. Following this, our daily team scrum meetings provide a platform for brief but vital discussion on completed tasks, ongoing work, and potential roadblocks. These meetings help the team keep on tabs on all the work at hand and the progress being made, as well as offer help on any issues you are facing – more often than not, someone else may have faced similar issue and already have a solution or a way to handle the issue.</p>
<p style="text-align: left">With the morning meetings concluded, the day unfolds into a solo venture of coding and project planning for the rest of the day – the ability to manage and prioritise your own work becomes very crucial. Working with sprint tickets, our team follows a meticulous process that includes peer code review and writing of automated tests. This not only enhances code quality by minimizing errors but also provides a unique opportunity for professional growth as different viewpoints and solutions emerge during code reviews, creating a fertile ground for the exchange of ideas. Writing automated tests ensures that new features align with specifications without disrupting existing logic.</p>
<p style="text-align: left">Reflection becomes a crucial part of the daily routine, providing insights into lessons learned, challenges faced, and opportunities for improvement. In the ever-evolving realm of software development, challenges serve as stepping stones for professional growth. Crucially, the supportive ecosystem within the team and the section at large is the cornerstone of our success. Knowing that assistance is just an inquiry away fosters a collaborative spirit, making the complex web of software development more manageable.</p>
<p style="text-align: left">One of the most rewarding aspects of my job is the opportunity to work on a multitude of applications, employing various technologies and catering to different stakeholders across the university. This diversity exposes me to processes beyond my immediate scope, allowing me to contribute to the resolution of challenges faced by staff and students throughout their daily routines. Each day is a unique opportunity to shape the digital future of education, one line of code at a time.</p>

			<span class="uoe-published-time uoe-seo-hidden-area">
				<time datetime="2024-01-26" itemprop="dateModified">Jan 26, 2024</time>
			</span>
		]]></content:encoded>
					
					<wfw:commentRss>https://blogs.ed.ac.uk/lramutsa/2024/01/26/a-day-in-the-life-of-an-elearning-systems-developer/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
"
      ["raw"]=>
      string(18396) "HTTP/1.1 200 OK
Content-Type: application/rss+xml; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Date: Sat, 13 Jun 2026 09:58:02 GMT
Server: Apache
X-Powered-By: PHP/8.3.31
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/lramutsa/wp-json/>; rel="https://api.w.org/"
Set-Cookie: PHPSESSID=2qam20a496t4h70mcjfhaekumb; path=/; secure; HttpOnly
Set-Cookie: spo_9865_fa=ed90b7d8fac126105541600d5650d741; expires=Sat, 13 Jun 2026 10:28:02 GMT; Max-Age=1800; path=/lramutsa/; Secure; HttpOnly
Last-Modified: Fri, 27 Mar 2026 13:01:18 GMT
ETag: "0e0241b0d0da1df953c03c1bff9fac51"
Vary: Accept-Encoding
Set-Cookie: RCKBMHKB=027ff8be59-56fd-482Z0ykgAv9Cke1g4zua8BZDNC-6GLNEDEYx6sBuMGGhP7rVfBq6XXMZnEYSsEHYOCTUU; 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/"
	>

<channel>
	<title>Leopold Ramutsamaya’s Blog</title>
	<atom:link href="https://blogs.ed.ac.uk/lramutsa/feed/" rel="self" type="application/rss+xml" />
	<link>https://blogs.ed.ac.uk/lramutsa</link>
	<description>Leopold Ramutsamaya's Blog for personal use</description>
	<lastBuildDate>Fri, 27 Mar 2026 13:01:18 +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>It depends!</title>
		<link>https://blogs.ed.ac.uk/lramutsa/2026/03/27/it-depends/</link>
					<comments>https://blogs.ed.ac.uk/lramutsa/2026/03/27/it-depends/#respond</comments>
		
		<dc:creator><![CDATA[lramutsa]]></dc:creator>
		<pubDate>Fri, 27 Mar 2026 09:01:25 +0000</pubDate>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[dlam]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php-conference]]></category>
		<category><![CDATA[software development]]></category>
		<guid isPermaLink="false">https://blogs.ed.ac.uk/lramutsa/?p=57</guid>

					<description><![CDATA[I had the pleasure of attending the PHP UK Conference in London this year. It was my second time, and it was even more exciting than the last! We had three simultaneous sessions, with 19 carefully chosen speakers and a new venue to welcome over 200 attendees. We got to connect with experienced developers, newcomers […]]]></description>
										<content:encoded><![CDATA[<p>I had the pleasure of attending the PHP UK Conference in London this year. It was my second time, and it was even more exciting than the last! We had three simultaneous sessions, with 19 carefully chosen speakers and a new venue to welcome over 200 attendees.</p>
<p>We got to connect with experienced developers, newcomers and speakers, sharing ideas, concerns and developments across the developer community. This year, the speakers covered a wide range of technical topics, from seasoned open-source contributors like Sebastian Bergmann (the creator of PHPUnit), new product launches like Simon Hamp (the creator of NativePhp), performance enthusiasts like Volker Dusch (PHP 8.5 Release Manager) and long-time PHP contributors like Sara Golemon (PHP release manager at the PHP Foundation).</p>
<p>With so many fascinating and insightful talks, Gary Hockin’s talk on technical trade-offs really stood out to me. His talk, ‘It Depends’, aimed to explain why tech experts rarely give a straightforward ‘yes or no’ answer. It showed that every choice involves a trade-off – a ‘slider’ where getting one benefit often means giving up something else. I have had conversations with colleagues who are exploring tools to make their daily tasks easier, from visualising data within Learn, optimising queries to the database or setting up an application to try out a new AI tool – the question always is, which tool is the best?</p>
<p>Hockin’s main point is that there are no set answers when it comes to technology. Knowing that ‘it depends’ isn’t just a way out, but rather the first step towards making better, more thoughtful choices. It often means realising that every decision we make usually doesn’t have a single ‘right’ answer, rather well-considered compromises. Instead of looking for a one-size-fits-all ‘best’ solution, successful teams learn to ask more specific questions. Picking a programming language, database or framework can sometimes feel like choosing the ‘best’ car. A car that’s perfect for a racetrack won’t work for a snowy driveway and probably won’t be good for a school run with four kids. The same idea applies to our everyday jobs and decisions that come with it. The ‘best’ choice depends entirely on the situation, like the team’s experience, how much money and time we have and what the project needs to achieve.</p>
<p>From picking the best room to book for your non-anchor day at FH to deciding what lunch to have at the ISG Spring event, we need to ask the right questions and have the complete view of the slider before making the right choice. As i retreat to my everyday tasks and the decisions I must make, I am more conscious to seek the full picture, assess the slider in its entirety to ensure I have a good understanding of all the negatives and positives and ask the right questions. It is not as easy as it sounds, but with practice and constant refinement, “it depends” becomes a part of every decision we need to make.</p>

			<span class="uoe-published-time uoe-seo-hidden-area">
				<time datetime="2026-03-27" itemprop="dateModified">Mar 27, 2026</time>
			</span>
		]]></content:encoded>
					
					<wfw:commentRss>https://blogs.ed.ac.uk/lramutsa/2026/03/27/it-depends/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Lights, Camera, Learn!</title>
		<link>https://blogs.ed.ac.uk/lramutsa/2025/03/02/lights-camera-learn/</link>
					<comments>https://blogs.ed.ac.uk/lramutsa/2025/03/02/lights-camera-learn/#respond</comments>
		
		<dc:creator><![CDATA[lramutsa]]></dc:creator>
		<pubDate>Sun, 02 Mar 2025 19:56:58 +0000</pubDate>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[conferences]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php-conference]]></category>
		<category><![CDATA[software development]]></category>
		<guid isPermaLink="false">https://blogs.ed.ac.uk/lramutsa/?p=32</guid>

					<description><![CDATA[I had the pleasure of attending the 2025 PHP UK Conference in London on 19th of February. The speakers were amazing, and each session gave us practical tips on the challenges we face as software developers and the cutting-edge tech being developed by other developers. The conference had two tracks concurrently running most of the […]]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" class="size-medium wp-image-35 alignleft" src="https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2025/02/PHP-UK-Conference-300x100.jpeg" alt="PHP UK Conference 2025" width="300" height="100" srcset="https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2025/02/PHP-UK-Conference-300x100.jpeg 300w, https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2025/02/PHP-UK-Conference-1024x341.jpeg 1024w, https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2025/02/PHP-UK-Conference-768x256.jpeg 768w, https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2025/02/PHP-UK-Conference-1440x480.jpeg 1440w, https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2025/02/PHP-UK-Conference.jpeg 1500w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p class="p1">I had the pleasure of attending the 2025 PHP UK Conference in London on 19th of February. The speakers were amazing, and each session gave us practical tips on the challenges we face as software developers and the cutting-edge tech being developed by other developers.</p>
<p class="p1">The conference had two tracks concurrently running most of the day, so you could choose which talks were most interesting. Luckily, I was there with a work colleague, so we were able to cover both tracks and not miss out on any talks. I have highlighted some of the talks that really inspired me to think differently and unlock a toolkit of ideas to level up my developer skills.</p>
<p class="p1">Craig Francis talked about “Ending Injection Vulnerabilities,” a topic that every developer should know about. Even though PHP has improved, SQL injection attacks still happen a lot. Craig showed us real-world examples that were used in production which left many reviewing their code bases. He stressed that languages make it easy to add vulnerable code with just one line of code (which works), but it’s harder to make secure code with several lines of code – something that should change by making secure code just as easy to write as insecure one. He also said that escaping inputs or using Object-Relational Mapping (ORM like Eloquent) isn’t enough. Instead, we should take a “zero-trust” approach to any data that users send and make sure that security principles like using prepared statements and validating every user input are followed. On top of that, we should make sure that we actually use the functions provided by these ORMs as they’re meant to be used, so we don’t open backdoors on otherwise secure code.</p>
<p class="p1">Liam Hammett’s session, “Beyond Requests: Supercharging API Monitoring with Guzzle Middleware,” was a real eye-opener for me. I have used Guzzle before, but Liam showed me how to use middleware to log requests, view traces, and observe metrics. This way, I can easily monitor my application’s performance. He also showed us how to use Graphana, Tempo, Prometheus, and Loki to monitor different log levels and API telemetry from our application. We have a few apps that could really benefit from this kind of logging and monitoring, like our Class Group Builder, Bulk unenrol tool or our infrastructure servers that currently host the Short Courses Platform.</p>
<p class="p1">Ivo Lukac’s shared “Learn to Appreciate Legacy,” a heartwarming story about a fictional developer named Zed, was also really moving. Through Zed’s struggles with a messy and old codebase, Ivo showed us how legacy code often contains important business logic and institutional knowledge. It hit home for me because I have often complained about “legacy code” that we have running on some of our old apps, instead of seeing its value. Ivo’s positive outlook has me rethinking how I approach maintenance work. He shared some strategies for maintaining and refactoring such code without breaking everything and leaving every file that you’ve worked on better than you found it. The lesson? Legacy code is just code that’s been pushed to production!</p>
<p class="p1">Finally, Kevin Dunglas closed off the talks with “Give Your PHP Apps Superpowers with FrankenPHP”. This modern PHP server, built on Caddy, handles concurrency easily and supports real-time features out of the box. It also boosts performance by preloading classes. The “worker mode” was the coolest part for me, as it lets you run persistent processes for tasks like queued jobs without external services. I can’t wait to try it on a side project, maybe a chat app, and see how it simplifies my workflow. As far as I could tell, for developers, it’s a game-changer, combining PHP’s simplicity with the enterprise-grade power of Go.</p>
<p class="p1">With so many exciting talks happening at the same time on two tracks, it’s easy to miss out on others. It would be awesome if the organisers could split the talks over two days so everyone can hear everything. On the bright side, this conference made me realise that PHP is still evolving and there’s always something new and exciting coming from the community.</p>
<p class="p1">As I get back to my projects, I’m inspired to pay closer attention to every input, monitor APIs smartly, respect legacy code, and use tools that push PHP to its limits. Conferences aren’t just about learning new tricks—they remind us why we love this craft. We have the chance to build a better world, one line of code at a time!</p>

			<span class="uoe-published-time uoe-seo-hidden-area">
				<time datetime="2025-03-02" itemprop="dateModified">Mar 2, 2025</time>
			</span>
		]]></content:encoded>
					
					<wfw:commentRss>https://blogs.ed.ac.uk/lramutsa/2025/03/02/lights-camera-learn/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>A day in the life of an eLearning Systems Developer</title>
		<link>https://blogs.ed.ac.uk/lramutsa/2024/01/26/a-day-in-the-life-of-an-elearning-systems-developer/</link>
					<comments>https://blogs.ed.ac.uk/lramutsa/2024/01/26/a-day-in-the-life-of-an-elearning-systems-developer/#respond</comments>
		
		<dc:creator><![CDATA[lramutsa]]></dc:creator>
		<pubDate>Fri, 26 Jan 2024 14:10:31 +0000</pubDate>
				<category><![CDATA[Uncategorised]]></category>
		<category><![CDATA[dlam]]></category>
		<category><![CDATA[dlam-feed]]></category>
		<category><![CDATA[leopold ramutsamaya]]></category>
		<category><![CDATA[software development]]></category>
		<guid isPermaLink="false">https://blogs.ed.ac.uk/lramutsa/?p=9</guid>

					<description><![CDATA[As an eLearning Systems Developer in a dynamic small team, my role revolves around creating custom web applications, university-wide platforms, and extensions for the central virtual learning environment, Blackboard Learn. With over 20 applications under our belt, each presenting unique challenges and varying complexities, my days are a blend of technical expertise, collaboration, and continuous […]]]></description>
										<content:encoded><![CDATA[<p style="text-align: left"><img loading="lazy" decoding="async" class="size-medium wp-image-28 alignleft" src="https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2024/01/Leopold-Photo-300x300.jpg" alt="Leopold Ramutsamaya Photo" width="300" height="300" srcset="https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2024/01/Leopold-Photo-300x300.jpg 300w, https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2024/01/Leopold-Photo-150x150.jpg 150w, https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2024/01/Leopold-Photo-768x768.jpg 768w, https://blogs.ed.ac.uk/lramutsa/wp-content/uploads/sites/9865/2024/01/Leopold-Photo.jpg 960w" sizes="auto, (max-width: 300px) 100vw, 300px" />As an eLearning Systems Developer in a dynamic small team, my role revolves around creating custom web applications, university-wide platforms, and extensions for the central virtual learning environment, Blackboard Learn. With over 20 applications under our belt, each presenting unique challenges and varying complexities, my days are a blend of technical expertise, collaboration, and continuous learning.</p>
<p style="text-align: left">The day kicks off with catching up on both personal and team support emails. This ensures I am aware of any potential challenges or issues that may shape my workday. Whether it’s a student seeking support or a system alert for an application running out of storage, addressing these promptly ensures a smooth workflow. Following this, our daily team scrum meetings provide a platform for brief but vital discussion on completed tasks, ongoing work, and potential roadblocks. These meetings help the team keep on tabs on all the work at hand and the progress being made, as well as offer help on any issues you are facing – more often than not, someone else may have faced similar issue and already have a solution or a way to handle the issue.</p>
<p style="text-align: left">With the morning meetings concluded, the day unfolds into a solo venture of coding and project planning for the rest of the day – the ability to manage and prioritise your own work becomes very crucial. Working with sprint tickets, our team follows a meticulous process that includes peer code review and writing of automated tests. This not only enhances code quality by minimizing errors but also provides a unique opportunity for professional growth as different viewpoints and solutions emerge during code reviews, creating a fertile ground for the exchange of ideas. Writing automated tests ensures that new features align with specifications without disrupting existing logic.</p>
<p style="text-align: left">Reflection becomes a crucial part of the daily routine, providing insights into lessons learned, challenges faced, and opportunities for improvement. In the ever-evolving realm of software development, challenges serve as stepping stones for professional growth. Crucially, the supportive ecosystem within the team and the section at large is the cornerstone of our success. Knowing that assistance is just an inquiry away fosters a collaborative spirit, making the complex web of software development more manageable.</p>
<p style="text-align: left">One of the most rewarding aspects of my job is the opportunity to work on a multitude of applications, employing various technologies and catering to different stakeholders across the university. This diversity exposes me to processes beyond my immediate scope, allowing me to contribute to the resolution of challenges faced by staff and students throughout their daily routines. Each day is a unique opportunity to shape the digital future of education, one line of code at a time.</p>

			<span class="uoe-published-time uoe-seo-hidden-area">
				<time datetime="2024-01-26" itemprop="dateModified">Jan 26, 2024</time>
			</span>
		]]></content:encoded>
					
					<wfw:commentRss>https://blogs.ed.ac.uk/lramutsa/2024/01/26/a-day-in-the-life-of-an-elearning-systems-developer/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
"
      ["headers"]=>
      object(WpOrg\Requests\Response\Headers)#2413 (1) {
        ["data":protected]=>
        array(12) {
          ["content-type"]=>
          array(1) {
            [0]=>
            string(34) "application/rss+xml; charset=UTF-8"
          }
          ["date"]=>
          array(1) {
            [0]=>
            string(29) "Sat, 13 Jun 2026 09:58:02 GMT"
          }
          ["server"]=>
          array(1) {
            [0]=>
            string(6) "Apache"
          }
          ["x-powered-by"]=>
          array(1) {
            [0]=>
            string(10) "PHP/8.3.31"
          }
          ["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(68) "<https://blogs.ed.ac.uk/lramutsa/wp-json/>; rel="https://api.w.org/""
          }
          ["set-cookie"]=>
          array(3) {
            [0]=>
            string(62) "PHPSESSID=2qam20a496t4h70mcjfhaekumb; path=/; secure; HttpOnly"
            [1]=>
            string(132) "spo_9865_fa=ed90b7d8fac126105541600d5650d741; expires=Sat, 13 Jun 2026 10:28:02 GMT; Max-Age=1800; path=/lramutsa/; Secure; HttpOnly"
            [2]=>
            string(125) "RCKBMHKB=027ff8be59-56fd-482Z0ykgAv9Cke1g4zua8BZDNC-6GLNEDEYx6sBuMGGhP7rVfBq6XXMZnEYSsEHYOCTUU; path=/; SameSite=None; Secure"
          }
          ["last-modified"]=>
          array(1) {
            [0]=>
            string(29) "Fri, 27 Mar 2026 13:01:18 GMT"
          }
          ["etag"]=>
          array(1) {
            [0]=>
            string(34) ""0e0241b0d0da1df953c03c1bff9fac51""
          }
          ["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(37) "https://blogs.ed.ac.uk/lramutsa/feed/"
      ["history"]=>
      array(0) {
      }
      ["cookies"]=>
      object(WpOrg\Requests\Cookie\Jar)#2409 (1) {
        ["cookies":protected]=>
        array(3) {
          ["PHPSESSID"]=>
          object(WpOrg\Requests\Cookie)#2417 (5) {
            ["name"]=>
            string(9) "PHPSESSID"
            ["value"]=>
            string(26) "2qam20a496t4h70mcjfhaekumb"
            ["attributes"]=>
            object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2416 (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(1781344682)
              ["last-access"]=>
              int(1781344682)
              ["persistent"]=>
              bool(false)
              ["host-only"]=>
              bool(true)
            }
            ["reference_time"]=>
            int(1781344682)
          }
          ["spo_9865_fa"]=>
          object(WpOrg\Requests\Cookie)#2418 (5) {
            ["name"]=>
            string(11) "spo_9865_fa"
            ["value"]=>
            string(32) "ed90b7d8fac126105541600d5650d741"
            ["attributes"]=>
            object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2419 (1) {
              ["data":protected]=>
              array(6) {
                ["expires"]=>
                int(1781346482)
                ["max-age"]=>
                int(1781346482)
                ["path"]=>
                string(10) "/lramutsa/"
                ["secure"]=>
                bool(true)
                ["httponly"]=>
                bool(true)
                ["domain"]=>
                string(14) "blogs.ed.ac.uk"
              }
            }
            ["flags"]=>
            array(4) {
              ["creation"]=>
              int(1781344682)
              ["last-access"]=>
              int(1781344682)
              ["persistent"]=>
              bool(false)
              ["host-only"]=>
              bool(true)
            }
            ["reference_time"]=>
            int(1781344682)
          }
          ["RCKBMHKB"]=>
          object(WpOrg\Requests\Cookie)#2420 (5) {
            ["name"]=>
            string(8) "RCKBMHKB"
            ["value"]=>
            string(85) "027ff8be59-56fd-482Z0ykgAv9Cke1g4zua8BZDNC-6GLNEDEYx6sBuMGGhP7rVfBq6XXMZnEYSsEHYOCTUU"
            ["attributes"]=>
            object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2421 (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(1781344682)
              ["last-access"]=>
              int(1781344682)
              ["persistent"]=>
              bool(false)
              ["host-only"]=>
              bool(true)
            }
            ["reference_time"]=>
            int(1781344682)
          }
        }
      }
    }
    ["filename":protected]=>
    NULL
  }
}
Diag| Considering item [https://blogs.ed.ac.uk/lramutsa/?p=57] "It depends!"
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/lramutsa/?p=57'))
					 
					 ORDER BY wp_30_posts.post_date DESC
					 
Diag====| Item [https://blogs.ed.ac.uk/lramutsa/?p=57] "It depends!" is a duplicate of an existing post.
Diag| Considering item [https://blogs.ed.ac.uk/lramutsa/?p=32] "Lights, Camera, Learn!"
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/lramutsa/?p=32'))
					 
					 ORDER BY wp_30_posts.post_date DESC
					 
Diag====| Item [https://blogs.ed.ac.uk/lramutsa/?p=32] "Lights, Camera, Learn!" is a duplicate of an existing post.
Diag| Considering item [https://blogs.ed.ac.uk/lramutsa/?p=9] "A day in the life of an eLearning Systems Developer"
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/lramutsa/?p=9'))
					 
					 ORDER BY wp_30_posts.post_date DESC
					 
Diag====| Item [https://blogs.ed.ac.uk/lramutsa/?p=9] "A day in the life of an eLearning Systems Developer" is a duplicate of an existing post.
Accessibility – 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.

Tag: Accessibility

Cute illustration of somebody using a laptop with a glowing screen.

If you are interested in helping users and people, we have an interesting summer internship for you which is about checking our services to make sure they are as accessible as they can be for all our users.

Post author asking Gemini to add a dark mode switch to Talking Scores

In my second month as the DLAM Digital Accessibility Intern, I’ve been contributing key accessibility and UX improvements to an open-source sheet music application. This blog describes how a GenAI workflow helped fast-track my understanding of Python coding, and allowed me to make impactful changes to an open-source project, through a process I call “Educated Prompting”.

If you are interested in helping users and people, we have an interesting summer internship for you which is about checking our services to make sure they are as accessible as they can be for all our users.

World map showing tens of red and blue markers/pins.

Interactive Content were contacted by CMVM Research Office and Communications and Marketing to create a bespoke, engaging and easy-to-use interactive map. This resource highlights where the University’s research and innovation in health are making a difference around the world.

7 virtual patients grouped together, all different ages, ethnicities and sex.

First launched in 2011, this popular Scottish Government funded e-learning resource was refreshed and relaunched on 9th June 2021, coinciding with national changes to foot screening services across Scotland. ‘National Diabetes Foot Co-ordinator’ Duncan Stang kindly provides a short overview of this collaborative project with the University of Edinburgh and the measurable impact it has […]

LEGO elf minifigure presenting news bulletins in a blizzard from Santa’s Workshop, North Pole

I had a great time attending our virtual festive office party this week. A kind team of University colleagues designed a creative agenda, stuffed full of genuine LOL moments for us all. Inclusive event Traditionally we’d all have a wee quiz and fancy meal in an Edinburgh restaurant. For 2020, our virtual equivalent had some… Continue reading Virtual elf benefits

A full-scale accessibility audit is costly, time consuming and most importantly, necessary. Additional regulations introduced in 2018 require public bodies, such as a university, to include accessibility statements on all of their sites.

What the problem is Whilst updating accessibility statements for key websites in our portfolio, I came across a  new error courtesy of a free Google service named reCAPCHA. reCAPTCHA is a free service that protects your website from spam and abuse. reCAPTCHA uses an advanced risk analysis engine and adaptive challenges to keep automated software […]

So, I wrote a blog post last year about building out a new WordPress blogging service at Edinburgh over the summer of 2018. That was a cool piece of work and we still get a thrill out of running it on a daily basis. This … Continue reading Subti…

Have you ever had a moment while watching the news, or an advert, and felt like you missed what was said? It’s an odd sensation and can totally change your understanding of what you see. Now imagine if that happened over and over again. What things might you miss out on? What context would you […]

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

Report this page

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

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

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

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

  Cancel