Diag====| HTTP [https://blogs.ed.ac.uk/lramutsa/feed/] ⌉ array(6) {
["headers"]=>
object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2429 (1) {
["data":protected]=>
array(12) {
["content-type"]=>
string(34) "application/rss+xml; charset=UTF-8"
["date"]=>
string(29) "Tue, 05 May 2026 02:17:00 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(68) "<https://blogs.ed.ac.uk/lramutsa/wp-json/>; rel="https://api.w.org/""
["set-cookie"]=>
array(3) {
[0]=>
string(62) "PHPSESSID=2200j9b493sibsk3cj2m51h0r0; path=/; secure; HttpOnly"
[1]=>
string(132) "spo_9865_fa=ed90b7d8fac126105541600d5650d741; expires=Tue, 05 May 2026 02:47:00 GMT; Max-Age=1800; path=/lramutsa/; Secure; HttpOnly"
[2]=>
string(125) "RCKBMHKB=027ff8be59-56fd-48MJ9d8y7vGGEkxBl-IOTrMdDPkfzm3mVMM5yLSXhpYLRTzqYh6xIPhMbQd4TVeQPUA0c; 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)#2441 (7) {
["name"]=>
string(9) "PHPSESSID"
["value"]=>
string(26) "2200j9b493sibsk3cj2m51h0r0"
["expires"]=>
NULL
["path"]=>
string(1) "/"
["domain"]=>
string(14) "blogs.ed.ac.uk"
["port"]=>
NULL
["host_only"]=>
bool(true)
}
[1]=>
object(WP_Http_Cookie)#2440 (7) {
["name"]=>
string(11) "spo_9865_fa"
["value"]=>
string(32) "ed90b7d8fac126105541600d5650d741"
["expires"]=>
int(1777949220)
["path"]=>
string(10) "/lramutsa/"
["domain"]=>
string(14) "blogs.ed.ac.uk"
["port"]=>
NULL
["host_only"]=>
bool(true)
}
[2]=>
object(WP_Http_Cookie)#2442 (7) {
["name"]=>
string(8) "RCKBMHKB"
["value"]=>
string(85) "027ff8be59-56fd-48MJ9d8y7vGGEkxBl-IOTrMdDPkfzm3mVMM5yLSXhpYLRTzqYh6xIPhMbQd4TVeQPUA0c"
["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)#2428 (5) {
["data"]=>
NULL
["headers"]=>
NULL
["status"]=>
NULL
["response":protected]=>
object(WpOrg\Requests\Response)#2430 (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: Tue, 05 May 2026 02:17:00 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/lramutsa/wp-json/>; rel="https://api.w.org/"
Set-Cookie: PHPSESSID=2200j9b493sibsk3cj2m51h0r0; path=/; secure; HttpOnly
Set-Cookie: spo_9865_fa=ed90b7d8fac126105541600d5650d741; expires=Tue, 05 May 2026 02:47:00 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-48MJ9d8y7vGGEkxBl-IOTrMdDPkfzm3mVMM5yLSXhpYLRTzqYh6xIPhMbQd4TVeQPUA0c; 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)#2431 (1) {
["data":protected]=>
array(12) {
["content-type"]=>
array(1) {
[0]=>
string(34) "application/rss+xml; charset=UTF-8"
}
["date"]=>
array(1) {
[0]=>
string(29) "Tue, 05 May 2026 02:17:00 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(68) "<https://blogs.ed.ac.uk/lramutsa/wp-json/>; rel="https://api.w.org/""
}
["set-cookie"]=>
array(3) {
[0]=>
string(62) "PHPSESSID=2200j9b493sibsk3cj2m51h0r0; path=/; secure; HttpOnly"
[1]=>
string(132) "spo_9865_fa=ed90b7d8fac126105541600d5650d741; expires=Tue, 05 May 2026 02:47:00 GMT; Max-Age=1800; path=/lramutsa/; Secure; HttpOnly"
[2]=>
string(125) "RCKBMHKB=027ff8be59-56fd-48MJ9d8y7vGGEkxBl-IOTrMdDPkfzm3mVMM5yLSXhpYLRTzqYh6xIPhMbQd4TVeQPUA0c; 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)#2427 (1) {
["cookies":protected]=>
array(3) {
["PHPSESSID"]=>
object(WpOrg\Requests\Cookie)#2435 (5) {
["name"]=>
string(9) "PHPSESSID"
["value"]=>
string(26) "2200j9b493sibsk3cj2m51h0r0"
["attributes"]=>
object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2434 (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(1777947420)
["last-access"]=>
int(1777947420)
["persistent"]=>
bool(false)
["host-only"]=>
bool(true)
}
["reference_time"]=>
int(1777947420)
}
["spo_9865_fa"]=>
object(WpOrg\Requests\Cookie)#2436 (5) {
["name"]=>
string(11) "spo_9865_fa"
["value"]=>
string(32) "ed90b7d8fac126105541600d5650d741"
["attributes"]=>
object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2437 (1) {
["data":protected]=>
array(6) {
["expires"]=>
int(1777949220)
["max-age"]=>
int(1777949220)
["path"]=>
string(10) "/lramutsa/"
["secure"]=>
bool(true)
["httponly"]=>
bool(true)
["domain"]=>
string(14) "blogs.ed.ac.uk"
}
}
["flags"]=>
array(4) {
["creation"]=>
int(1777947420)
["last-access"]=>
int(1777947420)
["persistent"]=>
bool(false)
["host-only"]=>
bool(true)
}
["reference_time"]=>
int(1777947420)
}
["RCKBMHKB"]=>
object(WpOrg\Requests\Cookie)#2438 (5) {
["name"]=>
string(8) "RCKBMHKB"
["value"]=>
string(85) "027ff8be59-56fd-48MJ9d8y7vGGEkxBl-IOTrMdDPkfzm3mVMM5yLSXhpYLRTzqYh6xIPhMbQd4TVeQPUA0c"
["attributes"]=>
object(WpOrg\Requests\Utility\CaseInsensitiveDictionary)#2439 (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(1777947420)
["last-access"]=>
int(1777947420)
["persistent"]=>
bool(false)
["host-only"]=>
bool(true)
}
["reference_time"]=>
int(1777947420)
}
}
}
}
["filename":protected]=>
NULL
}
}
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.
This is fascinating, particularly the idea of "coding without writing a single line." It really highlights the potential of prompt…
N.B. Closing date now extended to 23:59 on Wednesday, 4th of March.
Thanks Stewart for your encouragement!
Thank you Miki. I very much enjoyed reading this with my morning coffee. It was lovely to have such a…
Hi Otis