Export of whole site

Signed-off-by: Alexander Davis <alex@adcm.uk>
This commit is contained in:
2025-12-14 13:11:11 +00:00
parent 672e32dcf8
commit c752004771
177 changed files with 29055 additions and 0 deletions

View File

@@ -0,0 +1,804 @@
<!DOCTYPE html>
<html data-bs-theme="auto" lang="en-gb">
<head>
<meta charset="utf-8">
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//analytics.adcmnetworks.co.uk/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
<script src="https://kit.fontawesome.com/8970d94f9b.js" crossorigin="anonymous"></script>
<meta name="fediverse:creator" content="@MrDavisCSIT@mstdn.social">
<script src="https://cms.tahdah.me/scripts/publicbadge.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
<title>Citation Needed</title>
<link rel="canonical" href="https://www.mrlyall.uk/my-work/extracurricular-projects/citation-needed.html">
<meta property="og:url" content="https://www.mrlyall.uk/my-work/extracurricular-projects/citation-needed.html">
<meta name="twitter:description" content="The website of Mr. A. Lyall, featuring a portfolio of work in computing education, digital projects, and curriculum resources. Explore blog posts, classroom tools, and professional insights focused on innovation, inclusion, and effective IT teaching.">
<meta name="twitter:card" content="summary">
<meta property="og:type" content="website">
<meta name="twitter:title" content="Mr Lyall">
<meta property="og:image" content="https://www.mrlyall.uk/assets/img/projects/extracurricular/citation_needed/login_screen.webp">
<meta name="description" content="Creates BCU Harvard web citations; built to replace RefME, Cite This For Me, and other broken tools.">
<script>
(function() {
// JavaScript snippet handling Dark/Light mode switching
const getStoredTheme = () => localStorage.getItem('theme');
const setStoredTheme = theme => localStorage.setItem('theme', theme);
const forcedTheme = document.documentElement.getAttribute('data-bss-forced-theme');
const getPreferredTheme = () => {
if (forcedTheme) return forcedTheme;
const storedTheme = getStoredTheme();
if (storedTheme) {
return storedTheme;
}
const pageTheme = document.documentElement.getAttribute('data-bs-theme');
if (pageTheme) {
return pageTheme;
}
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
}
const setTheme = theme => {
if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.documentElement.setAttribute('data-bs-theme', 'dark');
} else {
document.documentElement.setAttribute('data-bs-theme', theme);
}
}
setTheme(getPreferredTheme());
const showActiveTheme = (theme, focus = false) => {
const themeSwitchers = [].slice.call(document.querySelectorAll('.theme-switcher'));
if (!themeSwitchers.length) return;
document.querySelectorAll('[data-bs-theme-value]').forEach(element => {
element.classList.remove('active');
element.setAttribute('aria-pressed', 'false');
});
for (const themeSwitcher of themeSwitchers) {
const btnToActivate = themeSwitcher.querySelector('[data-bs-theme-value="' + theme + '"]');
if (btnToActivate) {
btnToActivate.classList.add('active');
btnToActivate.setAttribute('aria-pressed', 'true');
}
}
}
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
const storedTheme = getStoredTheme();
if (storedTheme !== 'light' && storedTheme !== 'dark') {
setTheme(getPreferredTheme());
}
});
window.addEventListener('DOMContentLoaded', () => {
showActiveTheme(getPreferredTheme());
document.querySelectorAll('[data-bs-theme-value]')
.forEach(toggle => {
toggle.addEventListener('click', (e) => {
e.preventDefault();
const theme = toggle.getAttribute('data-bs-theme-value');
setStoredTheme(theme);
setTheme(theme);
showActiveTheme(theme);
})
})
});
})();
</script>
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="stylesheet" href="../../assets/bootstrap/css/bootstrap.min.css?h=c9d969cca6f72ca8d4dfd457f2e8eff8">
<link rel="stylesheet" href="../../assets/css/Lato.css?h=69bc5b06794edd4ca9a38642d36c83d0">
<link rel="stylesheet" href="../../assets/css/bss-overrides.css?h=15b91a8988c8fc6448a8989802a159de">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css">
<link rel="stylesheet" href="../../assets/css/styles.css?h=7c67e1bb3df4cb41abaceaf312f03dfa">
<link rel="stylesheet" href="../../assets/css/pikaday.min.css?h=a9ab8ca627aa6e8f64b730ca9c2c781d">
<link rel="stylesheet" href="../../assets/css/CookieConsentComponent.css?h=39af3305e95f4d2a8883e97d7e0cdb14">
<link rel="stylesheet" href="../../assets/css/animations.compiled.css?h=49917e33fe831aa33e24fb1e8124fdd9">
<link rel="stylesheet" href="../../assets/css/Carousel---Slider-With-Animation.css?h=63f5768f05d2ae91446ac010bcd4844a">
</head>
<body>
<nav class="navbar navbar-expand-md fixed-top portfolio-navbar gradient navbar-dark">
<div class="container-fluid"><a class="navbar-brand logo" href="../../"><img alt="Stylised white microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" width="50" height="50" class="mobile-padding-left"></a><button data-bs-toggle="collapse" class="navbar-toggler" data-bs-target="#navbarNav" style="margin-right: 0.5em;"><span class="visually-hidden">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../">Home</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../about">About</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../projects">My Work</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../my-work/showreel">Showreel</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../blog">Blog</a></li>
</ul>
</div>
</div>
</nav>
<main class="page">
<section class="portfolio-block block-intro">
<div class="container center-everything">
<!-- Start: portfolio heading -->
<div class="align-content-center heading blog-heading citationneeded-web">
<h2>Citation Needed</h2>
<p>Creates BCU Harvard web citations; built to replace RefME, Cite This For Me, and other broken tools.</p>
</div><!-- End: portfolio heading -->
</div>
</section>
<section class="portfolio-block project">
<div class="container center-everything">
<div class="swiper project-carousel" id="swiper-1" data-bss-swiper="{&quot;direction&quot;:&quot;horizontal&quot;,&quot;loop&quot;:true,&quot;autoplay&quot;:{&quot;pauseOnMouseEnter&quot;:true},&quot;autoHeight&quot;:true,&quot;keyboard&quot;:true,&quot;mousewheel&quot;:true,&quot;effect&quot;:&quot;creative&quot;,&quot;creativeEffect&quot;:{&quot;prev&quot;:{&quot;shadow&quot;:true,&quot;translate&quot;:[&quot;-20%&quot;,0,-1]},&quot;next&quot;:{&quot;translate&quot;:[&quot;100%&quot;,0,0]}},&quot;pagination&quot;:{&quot;el&quot;:&quot;.swiper-pagination&quot;,&quot;type&quot;:&quot;bullets&quot;,&quot;clickable&quot;:true,&quot;dynamicBullets&quot;:true},&quot;navigation&quot;:{&quot;nextEl&quot;:&quot;.swiper-button-next&quot;,&quot;prevEl&quot;:&quot;.swiper-button-prev&quot;}}">
<div class="swiper-wrapper">
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Screenshot of login screen with fields for email and password." width="2500" height="1125" src="../../assets/img/projects/extracurricular/citation_needed/login_screen.webp?h=3626905284037118af731fe2573ac5f4"></div>
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Screenshot of interface for creating a new bibliography, with input fields and save button." width="2500" height="1125" src="../../assets/img/projects/extracurricular/citation_needed/create_bibliography.webp?h=540b87dced2f32051ffec05662ec1594"></div>
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Screenshot of users bibliography list page showing created bibliographies and action buttons." width="2500" height="1125" src="../../assets/img/projects/extracurricular/citation_needed/my_bibliography_screen.webp?h=012c99e73615d880877ae349df8ddec2"></div>
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Screenshot of editing screen for an existing bibliography, showing editable name field and save button." width="2500" height="1125" src="../../assets/img/projects/extracurricular/citation_needed/edit_bibliography.webp?h=93f42ebc74275491bba3904e1a81c953"></div>
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Screenshot of form to create a new reference, including fields for title, author, and type." width="2500" height="1125" src="../../assets/img/projects/extracurricular/citation_needed/create_reference.webp?h=0821aa41c586c8d66615e0ffda801d70"></div>
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Screenshot of editing interface for an existing reference with form fields pre-filled." width="2500" height="1125" src="../../assets/img/projects/extracurricular/citation_needed/edit_reference.webp?h=44277bf2172cc97ced936d1448c76c3e"></div>
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Screenshot of a reference detail page showing citation fields and export options." width="2500" height="1125" src="../../assets/img/projects/extracurricular/citation_needed/view_reference.webp?h=956d130409c666d0a07df21a9f6c8cda"></div>
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Screenshot of account settings page showing user profile information and option to delete account." width="2500" height="1125" src="../../assets/img/projects/extracurricular/citation_needed/account_settings.webp?h=bc2415c654d6e2d2527be66b96120051"></div>
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Screenshot of confirmation dialog asking user to confirm account deletion." width="2500" height="1125" src="../../assets/img/projects/extracurricular/citation_needed/delete_account_dialog.webp?h=5a78706a24c4955ec40dd6c1d0b4cdc4"></div>
</div>
<div>
<div class="swiper-button-prev swiper-control"></div>
<div class="swiper-button-next swiper-control"></div>
</div>
<div class="swiper-pagination swiper-control"></div>
</div>
<div class="row">
<div class="col info">
<h3>Inspiration</h3>
<p>RefME got bought out my Cite This For Me and CTFM is terrible as it doesn't have the BCU-customised Harvard Referencing System. Many of the other Referencing Managers aren't that good either. We decided to fix this problem once and for all.</p>
<h3>What It Does</h3>
<p>It takes your input and converts the information you provide into a correctly formatted BCU Harvard citation - provided it's a web source.</p>
<h3>How We Built It</h3>
<p>A little bit of JS, loads of HTML, loads of CSS, loads of PHP, sprinkles of tears, a ton of swearing and loads of pain.</p>
<h3>Challenges We Ran Into</h3>
<p>PHP. Indentation. Semi-colons. Enough said.</p>
<h3>Accomplishments That We're Proud Of</h3>
<p>It works a lot better than we could have ever predicted.</p>
<h3>What We Learned</h3>
<p>Don't use PHP.</p>
<h3>What's next for Citation Needed?</h3>
<p>Extend it to other Referencing Systems and correct some of the design issues that are present. Also, finish actually building it.</p>
</div>
<div class="col-auto meta project-details">
<div class="tags"><span class="meta-heading">Hackathon</span><span>AstonHack 2017</span><span class="meta-heading">Created &amp; Submitted</span><span>11-12 November 2017</span><span class="meta-heading">Products Created</span><span>Web Application</span><a class="btn btn-primary project-buttons" role="button" href="https://devpost.com/software/citation-needed" target="_blank">View Entry on DevPost</a><a class="btn btn-primary project-buttons" role="button" href="https://gitea.adcmnetworks.co.uk/Intelligence-Not-Found/AstonHack2017-CitationNeeded" target="_blank">View Project on Gitea</a></div>
</div>
</div>
<div class="more-projects">
<h3 class="text-center more-projects-heading">More Projects</h3>
<div data-bss-type="blog-loop" data-bss-perpage="3" style="display: none !important;">
<div class="row gy-4 row-cols-1 row-cols-sm-2 row-cols-md-2 row-cols-lg-3 mt-0" data-bss-type="blog-loop-base">
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item">
<div class="card"><a href="exam-buff-or-exam-bluff.html"><img class="img-fluid card-img-top rainbow-border" alt="Large red capital letter &quot;F&quot; inside a red circle on a transparent background." width="500" height="500" src="../../assets/img/projects/extracurricular/exam_buff_or_exam_bluff/exam_buff_or_exam_bluff_app_logo.webp?h=c5996308f0abaf2970a7fd4e8e1cdcbf"></a>
<div class="card-body"><a href="exam-buff-or-exam-bluff.html">
<h4 class="text-body">Exam Buff or Exam Bluff</h4>
</a>
<p class="card-text">Fast-paced CS quiz game for GCSE+ that tests code and theory using logic, speed, skill, and bluffing</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item">
<div class="card"><a href="i-am-aware.html"><img class="img-fluid card-img-top rainbow-border" alt="A collage of newspaper-style clippings with words like “Anxiety,” “Panic Attacks,” and “Depression,” with the phrase “I Am Aware” boldly overlaid in white text in the center of the image, framed by a thin white border." width="940" height="500" src="../../assets/img/projects/extracurricular/iamaware.webp?h=a3dcdbacf64839eb9dcfd0f9190b41fb"></a>
<div class="card-body"><a href="i-am-aware.html">
<h4 class="text-body">I Am Aware</h4>
</a>
<p class="card-text">BCU campaign exploring mental health resources and real stories of depression, anxiety, and bipolar.</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item">
<div class="card"><a href="societyplus.html"><img class="img-fluid card-img-top rainbow-border" alt="A cropped screenshot of the Society+ Mental Health Awareness site at Birmingham City University. Shows the society logo, &quot;Society Name&quot; and &quot;Society description&quot; on a blue gradient background. A navigation bar with links for Home, Login, and Sign Up is visible at the top right. The layout highlights the societys brand and structure." width="940" height="500" src="../../assets/img/projects/extracurricular/society+/societypluspreview.webp?h=c5bf765f66449f21ca88f0206db68bd5"></a>
<div class="card-body"><a href="societyplus.html">
<h4 class="text-body">Society+</h4>
</a>
<p class="card-text">Platform for societies to manage sign-ups, send texts, and update info using PHP, SQL, and Nexmo API</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item" style="display: none !important;">
<div class="card"><a href="sortai.html"><img class="img-fluid card-img-top rainbow-border" alt="Terminal-style logo for Sort.AI. A green monospaced font reads [$~] sort on a black background, resembling a command-line interface." width="333" height="222" src="../../assets/img/projects/extracurricular/sort.ai/sort.ai_logo.webp?h=a198ffe5f200f284ee778dd6f7b1d741"></a>
<div class="card-body"><a href="sortai.html">
<h4 class="text-body">Sort.AI</h4>
</a>
<p class="card-text">AI file sorter using Google NLP in C#. Auto-categorises any file. Awarded 3rd place at BullHacks 1.0</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item" style="display: none !important;">
<div class="card"><a href="task-master-web.html"><img class="img-fluid card-img-top rainbow-border" alt="Preview image of the Task Master project homepage. It includes the same blue background and the main message “Welcome to BCU Hacks Task Master We Have No Idea What Were Doing!” without form fields." width="940" height="500" src="../../assets/img/projects/extracurricular/task_master/taskmasterpreview.webp?h=bece3f4d6e67029790c7b300d5db3393"></a>
<div class="card-body"><a href="task-master-web.html">
<h4 class="text-body">Task Master for Web</h4>
</a>
<p class="card-text">Business task manager with secure login, file upload area, MySQL. Awarded 3rd place at BrumHack 5.0.</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item" style="display: none !important;">
<div class="card"><a href="the-computers-identity.html"><img class="img-fluid card-img-top rainbow-border" alt="A cropped preview of “The Computers Identity” language selection webpage, showing a column of language buttons including English, Binary, Octal, ASCII, Hexadecimal, and Leet on a white background, with a blurred brown/grey gradient on the right." width="940" height="500" src="../../assets/img/projects/extracurricular/the_computers_identity/identitypreview.webp?h=8f3c2d53aaf46cff69c58a66abbe76f5"></a>
<div class="card-body"><a href="the-computers-identity.html">
<h4 class="text-body">The Computer's Identity</h4>
</a>
<p class="card-text">Interactive poem entry for BCU Christian Union art competition displayed in binary format &amp; QR code.</p>
</div>
</div>
</div>
</div>
<nav class="d-flex justify-content-center mt-3" data-bss-type="blog-loop-pagination">
<ul class="pagination">
<li class="page-item disabled" data-type="prev" data-page="1"><a class="page-link" aria-label="Previous" href="#"><span aria-hidden="true">«</span></a></li>
<li class="page-item active" data-type="regular" data-page="1"><a class="page-link" href="#">1</a></li>
<li class="page-item" data-type="regular" data-page="2"><a class="page-link" href="#">2</a></li>
<li class="page-item" data-type="next" data-page="2"><a class="page-link" aria-label="Next" href="#"><span aria-hidden="true">»</span></a></li>
</ul>
</nav>
</div>
</div>
</div>
</section>
</main><!-- Start: Footer Multi Column -->
<footer class="text-body bg-body" id="Light-Footer">
<div class="container py-4 py-lg-5 center-everything">
<div class="row justify-content-center">
<!-- Start: Accreditations -->
<div class="col-sm-3 col-md-6 text-center text-lg-start d-none d-sm-none d-md-none d-lg-flex flex-column">
<h3 class="fs-6 text-center text-body accreditations-title">Accreditations</h3>
<div class="swiper text-body w-100" id="light-swiper" data-bss-swiper="{&quot;direction&quot;:&quot;horizontal&quot;,&quot;loop&quot;:true,&quot;autoplay&quot;:{&quot;pauseOnMouseEnter&quot;:true},&quot;autoHeight&quot;:true,&quot;effect&quot;:&quot;fade&quot;,&quot;fadeEffect&quot;:{&quot;crossFade&quot;:true}}">
<div class="swiper-wrapper">
<!-- Start: Mountain Training -->
<div class="swiper-slide d-flex justify-content-center center-everything">
<div class="tahdah-badge" data-candidateid="1466454"></div>
</div><!-- End: Mountain Training -->
<!-- Start: Canva Essentials -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-badge.webp?h=bc157efb7620e733f43b4b00981978ea"></a></div><!-- End: Canva Essentials -->
<!-- Start: Canva Essentials for Mobile -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials-mobile" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-for-mobile-badge.webp?h=93513f8f560a2e346c12aeb9fb0c18ec"></a></div><!-- End: Canva Essentials for Mobile -->
<!-- Start: Canva Graphic Design Essentials -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/graphic-design-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/graphic-design-essentials-badge.webp?h=f5406331e45433f0d8bd6b929f9d113b"></a></div><!-- End: Canva Graphic Design Essentials -->
<!-- Start: Marketing with Canva -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/marketing-with-canva" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/mr-a-davis-marketing-with-canva-badge.webp?h=f0b802da597c825b7e03378130d94aca"></a></div><!-- End: Marketing with Canva -->
<!-- Start: Canva for Work -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-for-work" target="_blank"><img class="img-fluid w-100 accreditation" width="2160" height="2160" src="../../assets/img/accreditations/mr-a-davis-canva-for-work-badge.webp?h=b3617633e9d2de429288704f75b304f4"></a></div><!-- End: Canva for Work -->
<!-- Start: Canva Teacher Essentials -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/teacher-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/teacher-essentials-badge.webp?h=d2d6f962e0b1bbebc68f987d6f156028"></a></div><!-- End: Canva Teacher Essentials -->
<!-- Start: Canva AI in the Classroom -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/ai-in-the-classroom" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/ai-in-the-classroom-badge.webp?h=769458ef2c323729c209855a3cde7312"></a></div><!-- End: Canva AI in the Classroom -->
<!-- Start: Adobe Creative Educator Level 1 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/3a49b473-4af9-4c5a-ab38-1c754f181c6e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Adobe Creative Educator Level 1&quot;" width="600" height="600" src="../../assets/img/accreditations/3_hours_adobe_creative_educator_level_1.webp?h=45de0c4e8984e885b1153e344e794beb"></a></div><!-- End: Adobe Creative Educator Level 1 -->
<!-- Start: Minecraft Education -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/53745c80-7d0a-4428-906a-839e905c139c/public_url" target="_blank"><img class="img-fluid w-100 accreditation" width="600" height="600" src="../../assets/img/accreditations/minecraft-education-ambassador.webp?h=5c614dffa9ab6d6fd77cd805b8397ffd"></a></div><!-- End: Minecraft Education -->
<!-- Start: MCE -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/9c9dd6cd-2703-4539-adc9-366069cbc3a9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MCE: Microsoft Certified Educator&quot;" width="352" height="352" src="../../assets/img/accreditations/mce_microsoft_certified_educator.webp?h=3e67f154a356cd1ef15c31b0fb42c0c4"></a></div><!-- End: MCE -->
<!-- Start: MIEE 2023-2024 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/b5ac17a1-0914-496f-9d85-9608966259ee/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Innovative Educator Expert 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2023_2024.webp?h=ee882aefba64b3e5b8ea9554eeea3847"></a></div><!-- End: MIEE 2023-2024 -->
<!-- Start: MIEE 2024-2025 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/ad92a7cb-3e4f-46e2-8e73-99dffd0eb69e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Innovative Educator Expert 2024-2025&quot;" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2024_2025.webp?h=a0b5cb2a639caf0351a977146375667e"></a></div><!-- End: MIEE 2024-2025 -->
<!-- Start: Pearson OSA Expert -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/44756f05-e727-41c8-a352-a656c033c9f0/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Onscreen Assessment Expert GCSE Computer Science&quot;" width="800" height="800" src="../../assets/img/accreditations/pearson_onscreen_assessment_expert.webp?h=d4e00ea5bfad5a66c619238d7cbdd8db"></a></div><!-- End: Pearson OSA Expert -->
<!-- Start: STEM 21-22 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/52121ef6-0760-4870-91cc-1cb20001238b/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Establishing a STEM club - from creation to careers 2021/2022&quot;" width="1200" height="1200" src="../../assets/img/accreditations/establishing_a_stem_club_from_creation_to_careers_2021_2022.webp?h=7f96a591bd4fb09f86da96af8a8a41ef"></a></div><!-- End: STEM 21-22 -->
<!-- Start: NCCE Secondary 21-22 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/60d50339-2dda-4991-90b5-7ff087975746/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Secondary Computer Science - Professional Development 2021-2022&quot;" width="1200" height="1200" src="../../assets/img/accreditations/secondary_computer_science_professional_development_2021_2022.webp?h=813dd91393f904969bc3bf184007c8c2"></a></div><!-- End: NCCE Secondary 21-22 -->
<!-- Start: NCCE Secondary 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/e74f9011-4006-4570-824a-f483fdcb5b26/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Secondary Computing - Professional Development 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/secondary_computing_professional_development_2023_2.webp?h=77ebf2880eb7d342016b83e098d92d23"></a></div><!-- End: NCCE Secondary 23-24 -->
<!-- Start: NCCE GCSE Computer Science 19-20 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/c73720d2-8208-4e2b-a1e5-c473961834d9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; GCSE Computer Science: Professional Development 2019-2020&quot;" width="1200" height="1200" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2019_2020.webp?h=fef2cee3326aeff9e2f65e86cf5e4fee"></a></div><!-- End: NCCE GCSE Computer Science 19-20 -->
<!-- Start: NCCE GCSE Computer Science 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/c486279a-8e97-4779-90c1-56f09622e782/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; GCSE Computer Science - Professional Development 2022-2023&quot;" width="2000" height="2000" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2022_2023.webp?h=0a54c55717b61c0a0b4ed80582d7bfae"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
<!-- Start: NCCE GCSE Computer Science 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/e76ed57f-2270-47f5-8e7e-4136baa261f3/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; GCSE Computer Science - Professional Development 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2023.webp?h=71b8c59772af539946fb49a210b05758"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
<!-- Start: NCCE A Level Computer Science 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/418cfb22-3e37-4b24-b527-652b1ab6ea76/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; A-Level Computer Science - Professional Development 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/a_level_computer_science_professional_development.webp?h=a9cc6f73abdf82ab49e5f8a8695cb557"></a></div><!-- End: NCCE A Level Computer Science 23-24 -->
<!-- Start: MOS Master -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/0e46d6b8-1a1b-4d16-a5d5-3b95661fb290/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Master 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_master_2013.webp?h=70d957a5307d38f46b84b6462439afbc"></a></div><!-- End: MOS Master -->
<!-- Start: MOS Word Expert -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/287d0ca4-bea1-4e18-b9e7-21f6a5d5d571/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Word 2013 Expert&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013_expert.webp?h=5bd4ec8c82587201172a8b8e460ff4e6"></a></div><!-- End: MOS Word Expert -->
<!-- Start: MOS Word -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/f1831f0e-776b-49aa-8a8d-05817d4b1410/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Word 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013.webp?h=2b90c5590b7b50f1891a9116fa38ac36"></a></div><!-- End: MOS Word -->
<!-- Start: MOS Excel -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/2ab55353-3267-46cc-b3f4-3099af54d869/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Excel 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_excel_2013.webp?h=f016925633d0a52b862259a05b396b6a"></a></div><!-- End: MOS Excel -->
<!-- Start: MOS PowerPoint -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/11162aa2-331a-4ec4-a612-665f3bc59cb1/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: PowerPoint 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_powerpoint_2013.webp?h=26de9623c491661347998549e10d4353"></a></div><!-- End: MOS PowerPoint -->
<!-- Start: MOS OneNote -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/cd328b1d-27b6-4410-be70-0792a99b72ea/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: OneNote 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_onenote_2013.webp?h=2ffe41c2a6e37d602469f8158ef13d79"></a></div><!-- End: MOS OneNote -->
<!-- Start: MTA Security -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/da3b3b4c-cec4-4537-bb5b-486ce9ee6ee7/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MTA: Security Fundamentals - Certified 2016&quot;" width="352" height="352" src="../../assets/img/accreditations/mta_security_fundamentals_certified_2016.webp?h=0df619419a5b6d0eb694dc9363870b20"></a></div><!-- End: MTA Security -->
<!-- Start: MTA Networking -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/23194bfe-30e4-4f8e-b9ec-338d060136dd/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MTA: Networking Fundamentals - Certified 2016&quot;" width="352" height="352" src="../../assets/img/accreditations/mta_networking_fundamentals_certified_2016.webp?h=cdc4618c5e86d11aa304cae14c3942bc"></a></div><!-- End: MTA Networking -->
<!-- Start: MTA Windows OS -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/f0f27d87-424b-49e8-a444-95086d640e66/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MTA: Windows Operating System Fundamentals - Certified 2016&quot;" width="352" height="352" src="../../assets/img/accreditations/mta_windows_operating_system_fundamentals_certified_2016.webp?h=44a6360480ef67ced301c697d31f9fa5"></a></div><!-- End: MTA Windows OS -->
</div>
</div>
<div class="swiper-nav-standalone d-flex justify-content-center accreditations-navigation" data-bss-swiper-target="#light-swiper">
<div class="swiper-button-prev"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-left">
<path fill-rule="evenodd" d="M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8"></path>
</svg></button></div>
<div class="swiper-button-next"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-right">
<path fill-rule="evenodd" d="M1 8a.5.5 0 0 1 .5-.5h11.793l-3.147-3.146a.5.5 0 0 1 .708-.708l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 0 1-.708-.708L13.293 8.5H1.5A.5.5 0 0 1 1 8"></path>
</svg></button></div>
</div>
</div><!-- End: Accreditations -->
<!-- Start: Spacer -->
<div class="col-md-3 text-center text-lg-start d-flex flex-column"><a class="d-flex w-100 justify-content-center center-everything" href="https://client.brixly.uk/aff.php?aff=837" target="_blank"><img class="img-fluid object-fit-contain w-50" src="https://brixly.uk/wp-content/uploads/2022/06/Artboard-32.jpg"></a></div><!-- End: Spacer -->
<div class="col-md-3 text-center text-lg-start d-flex flex-column align-items-center order-first align-items-lg-start order-lg-last">
<div class="fw-bold d-flex align-items-center mb-2"><img alt="Stylised orange microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501" width="50" height="50" class="footer-logo"><span>Mr A Lyall</span></div>
<p>IT professional and Head of Computing in the West Midlands</p>
</div>
</div>
<hr>
<div class="d-flex justify-content-between align-items-center pt-3">
<p class="mb-0 footer-copyright">Copyright © 2025 ADCM Networks</p>
<ul class="list-inline mb-0">
<!-- Start: Mastodon -->
<li class="list-inline-item"><a rel="me" href="https://mstdn.social/@MrDavisCSIT"><svg class="text-body" xmlns="http://www.w3.org/2000/svg" viewBox="-32 0 512 512" width="1em" height="1em" fill="currentColor">
<!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. -->
<path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"></path>
</svg></a></li><!-- End: Mastodon -->
<!-- Start: Bluesky -->
<li class="list-inline-item"><a href="https://bsky.app/profile/adcmnetworks.co.uk"><i class="fa-brands fa-square-bluesky"></i></a></li><!-- End: Bluesky -->
<!-- Start: LinkedIn -->
<li class="list-inline-item"><a href="https://www.linkedin.com/in/MrDavisCSIT/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-linkedin text-body">
<path d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854V1.146zm4.943 12.248V6.169H2.542v7.225h2.401m-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248-.822 0-1.359.54-1.359 1.248 0 .694.521 1.248 1.327 1.248h.016zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016a5.54 5.54 0 0 1 .016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225h2.4"></path>
</svg></a></li><!-- End: LinkedIn -->
<!-- Start: GitHub -->
<li class="list-inline-item"><a href="https://github.com/MrDavisCSIT"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-github text-body">
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8"></path>
</svg></a></li><!-- End: GitHub -->
<!-- Start: Reddit -->
<li class="list-inline-item"><a href="https://www.reddit.com/user/AlexanderEDavis95/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-reddit text-body">
<path d="M6.167 8a.831.831 0 0 0-.83.83c0 .459.372.84.83.831a.831.831 0 0 0 0-1.661m1.843 3.647c.315 0 1.403-.038 1.976-.611a.232.232 0 0 0 0-.306.213.213 0 0 0-.306 0c-.353.363-1.126.487-1.67.487-.545 0-1.308-.124-1.671-.487a.213.213 0 0 0-.306 0 .213.213 0 0 0 0 .306c.564.563 1.652.61 1.977.61zm.992-2.807c0 .458.373.83.831.83.458 0 .83-.381.83-.83a.831.831 0 0 0-1.66 0z"></path>
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-3.828-1.165c-.315 0-.602.124-.812.325-.801-.573-1.9-.945-3.121-.993l.534-2.501 1.738.372a.83.83 0 1 0 .83-.869.83.83 0 0 0-.744.468l-1.938-.41a.203.203 0 0 0-.153.028.186.186 0 0 0-.086.134l-.592 2.788c-1.24.038-2.358.41-3.17.992-.21-.2-.496-.324-.81-.324a1.163 1.163 0 0 0-.478 2.224c-.02.115-.029.23-.029.353 0 1.795 2.091 3.256 4.669 3.256 2.577 0 4.668-1.451 4.668-3.256 0-.114-.01-.238-.029-.353.401-.181.688-.592.688-1.069 0-.65-.525-1.165-1.165-1.165z"></path>
</svg></a></li><!-- End: Reddit -->
<!-- Start: YouTube -->
<li class="list-inline-item"><a href="https://www.youtube.com/channel/UCgDhiQMLbTemv2varDiW2rA"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-youtube text-body">
<path d="M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.007 2.007 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.007 2.007 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31.4 31.4 0 0 1 0 7.68v-.123c.002-.215.01-.958.064-1.778l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.007 2.007 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A99.788 99.788 0 0 1 7.858 2h.193zM6.4 5.209v4.818l4.157-2.408z"></path>
</svg></a></li><!-- End: YouTube -->
</ul>
</div>
</div>
</footer><!-- End: Footer Multi Column -->
<script>
(function() {
let collections = document.querySelectorAll('[data-bss-type="blog-loop"]');
let tagNavs = document.querySelectorAll('[data-bss-type="tag-nav"]');
let tagLoops = document.querySelectorAll('[data-bss-type="tag-loop"]');
let authorLoops = document.querySelectorAll('[data-bss-type="author-loop"]');
let authorNavs = document.querySelectorAll('[data-bss-type="author-nav"]');
window.addEventListener("popstate", (e) => {
for (let collection of collections) {
updateCollection(collection);
}
for (let tagNav of tagNavs) {
updateTagNav(tagNav);
}
for (let authorNav of authorNavs) {
updateAuthorNav(authorNav);
}
});
for (let collection of collections) {
updateCollection(collection);
if (!canPaginateCollection(collection)) continue;
let pagination = collection.querySelector('[data-bss-type="blog-loop-pagination"]');
pagination.addEventListener('click', function(e) {
let paginationItem = e.target.closest('.page-item');
if (!paginationItem) return;
e.preventDefault();
if (paginationItem.classList.contains('disabled') || paginationItem.classList.contains('active')) return;
let collection = paginationItem.closest('[data-bss-type="blog-loop"]');
if (!collection) return;
let page = parseInt(paginationItem.dataset.page);
if (!page) return;
let pageParam = getPageParameter(collection);
if (pageParam) {
const url = new URL(window.location);
url.searchParams.set(pageParam, page);
history.pushState({
[pageParam]: page
}, document.title, url);
for (let c of collections) {
let param = getPageParameter(c);
if (param !== pageParam) continue;
updateCollection(c);
}
} else {
updateCollection(collection, page);
}
});
}
for (let tagNav of tagNavs) {
updateTagNav(tagNav);
tagNav.addEventListener('click', onTagClick);
}
for (let tagLoop of tagLoops) {
tagLoop.addEventListener('click', onTagClick);
}
for (let authorLoop of authorLoops) {
authorLoop.addEventListener('click', onAuthorClick);
}
for (let authorNav of authorNavs) {
updateAuthorNav(authorNav);
}
function onTagClick(e) {
onBlogFilterClick(e);
for (let nav of tagNavs) {
updateTagNav(nav);
}
}
function onAuthorClick(e) {
onBlogFilterClick(e);
for (let authorNav of authorNavs) {
updateAuthorNav(authorNav);
}
}
function onBlogFilterClick(e) {
const item = e.target.closest('[data-bss-filter="blog"]');
if (!item || !item.dataset.hasOwnProperty('bssHref') || !item.dataset.hasOwnProperty('bssFilterParam')) return;
const stateNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
if (stateNode && (stateNode.classList.contains('disabled') || stateNode.classList.contains('active'))) {
e.preventDefault();
return;
}
const link = item.dataset.bssHref;
if (!linksToCurrentPage(link)) return;
e.preventDefault();
const url = new URL(window.location);
const filterParam = item.dataset.bssFilterParam;
const filterValue = item.dataset.bssFilterValue || '';
const collectionsToUpdate = [];
const newQueryParams = {
[filterParam]: filterValue
};
for (let c of collections) {
if (!canFilterCollection(c)) continue;
collectionsToUpdate.push(c);
let pageParam = getPageParameter(c);
let page = url.searchParams.get(pageParam);
if (page === null || page == 1) continue;
newQueryParams[pageParam] = 1;
}
for (let param in newQueryParams) {
if (newQueryParams[param]) {
url.searchParams.set(param, newQueryParams[param]);
} else {
url.searchParams.delete(param);
}
}
history.pushState(newQueryParams, document.title, url);
for (let c of collectionsToUpdate) {
updateCollection(c);
}
}
function getCollectionFilters(collection) {
let filters = [];
try {
const parsed = JSON.parse(collection.dataset.bssFilters);
if (Array.isArray(parsed)) {
filters = parsed;
}
} catch (e) {}
return filters;
}
function getCollectionEmptyFilterAction(collection, filter = '') {
let emptyFilterActions = [];
try {
const parsed = JSON.parse(collection.dataset.bssEmptyFilterActions);
if (Array.isArray(parsed)) {
emptyFilterActions = parsed;
}
} catch (e) {}
const action = emptyFilterActions.find(action => action.filter === filter);
return action ? action.value : '';
}
function canFilterCollection(collection) {
return !!getCollectionFilters(collection).length;
}
function canFilterCollectionByTag(collection) {
return getCollectionFilters(collection).includes('tag');
}
function canFilterCollectionByAuthor(collection) {
return getCollectionFilters(collection).includes('author');
}
function shouldShowAllItemsForEmptyFilter(collection, filter = '') {
return getCollectionEmptyFilterAction(collection, filter) === 'show-all';
}
function canPaginateCollection(collection) {
return !!getCollectionPagination(collection);
}
function getCollectionPagination(collection) {
return collection.querySelector('[data-bss-type="blog-loop-pagination"]');
}
function getPageParameter(collection) {
return collection.dataset.bssPageParam;
}
function linksToCurrentPage(path = '') {
let currentURL, url;
try {
currentURL = new URL(window.location);
url = new URL(path, window.location.href);
} catch (e) {
console.error(e);
}
return currentURL.origin === url.origin && currentURL.pathname === url.pathname;
}
function updateCollection(collection, page, activeTag = '', activeAuthor = '') {
const url = new URL(window.location.href);
if (canPaginateCollection(collection)) {
if (!page) {
let pageParam = getPageParameter(collection);
page = (pageParam ? url.searchParams.get(pageParam) : 1) || 1;
}
}
if (canFilterCollectionByTag(collection) && !activeTag) {
let tagParam = 'tag';
activeTag = url.searchParams.get(tagParam) || '';
}
if (canFilterCollectionByAuthor(collection) && !activeAuthor) {
let authorParam = 'author';
activeAuthor = url.searchParams.get(authorParam) || '';
}
renderCollectionPage(collection, page, activeTag, activeAuthor);
}
function renderCollectionPage(collection, page = 1, activeTag = '', activeAuthor = '') {
page = Math.max(parseInt(page, 10), 1);
collection.style.removeProperty('display');
let loopBase = collection.querySelector('[data-bss-type="blog-loop-base"]');
loopBase && loopBase.style.removeProperty('display');
let emptyState = collection.querySelector('[data-bss-type="empty-state"]');
emptyState && emptyState.style.setProperty('display', 'none', 'important');
let listItems = [].slice.call(collection.querySelectorAll('[data-bss-type="blog-loop-item"]'));
listItems.forEach(item => item.style.setProperty('display', 'none', 'important'));
if (canFilterCollectionByTag(collection)) {
listItems = listItems.filter(item => activeTag ? item.classList.contains('post-tag-' + activeTag) : shouldShowAllItemsForEmptyFilter(collection, 'tag'));
}
if (canFilterCollectionByAuthor(collection)) {
listItems = listItems.filter(item => activeAuthor ? item.classList.contains('post-author-' + activeAuthor) : shouldShowAllItemsForEmptyFilter(collection, 'author'));
}
let perPage = collection.dataset.bssPerpage || listItems.length;
let visibleListItems = listItems.slice((page - 1) * perPage, page * perPage);
visibleListItems.forEach(item => item.style.removeProperty('display'));
let isEmpty = !visibleListItems.length;
if (isEmpty) {
loopBase && loopBase.style.setProperty('display', 'none', 'important');
emptyState && emptyState.style.removeProperty('display');
}
let itemCount = listItems.length;
let pageCount = Math.max(Math.ceil(itemCount / perPage), 1);
updateCollectionPagination(collection, page, pageCount, isEmpty);
if (collection.dataset.bssScrollOnChange) {
scrollToCollectionTop(collection);
}
}
function updateCollectionPagination(collection, page, pageCount, isEmpty) {
let pagination = getCollectionPagination(collection);
if (!pagination) return;
let paginationItems = [].slice.call(pagination.querySelectorAll('.page-item'));
if (pageCount === 1 || isEmpty) {
pagination.style.setProperty('display', 'none', 'important');
} else {
pagination.style.removeProperty('display');
}
let previousBtnDisabled = page - 1 <= 0;
let previousPage = previousBtnDisabled ? 1 : page - 1;
let nextBtnDisabled = page + 1 > pageCount;
let nextPage = nextBtnDisabled ? pageCount : page + 1;
for (let i = 0; i < paginationItems.length; i++) {
let paginationItem = paginationItems[i];
paginationItem.classList.remove('active', 'disabled');
if (paginationItem.dataset.type === 'prev') {
paginationItem.dataset.page = previousPage;
if (previousBtnDisabled) {
paginationItem.classList.add('disabled');
}
} else if (paginationItem.dataset.type === 'next') {
paginationItem.dataset.page = nextPage;
if (nextBtnDisabled) {
paginationItem.classList.add('disabled');
}
} else {
if (paginationItem.dataset.page > pageCount) {
paginationItem.style.setProperty('display', 'none', 'important');
} else {
paginationItem.style.removeProperty('display');
}
if (paginationItem.dataset.page == page) {
paginationItem.classList.add('active');
}
}
}
}
function scrollToCollectionTop(collection) {
const rect = collection.getBoundingClientRect();
const viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);
const threshold = 100;
if (rect.top >= 0 && viewHeight - rect.top > threshold) return;
setTimeout(() => {
collection.scrollIntoView({
behavior: "smooth",
block: "start",
inline: "start"
});
}, 0);
}
function updateTagNav(tagNav) {
const url = new URL(window.location.href);
let tagParam = 'tag';
let tag = url.searchParams.get(tagParam) || '';
renderTagNav(tagNav, tag);
}
function renderTagNav(tagNav, activeTag = '') {
if (!tagNav.dataset.bssSyncUrl) return;
let navItems = [].slice.call(tagNav.querySelectorAll('[data-bss-type="tag-loop-item"]'));
navItems.forEach(item => {
const activeClassNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
if (!activeClassNode) return;
activeClassNode.classList.remove('active');
const link = item.dataset.bssHref;
if (!linksToCurrentPage(link) || activeClassNode.classList.contains('disabled')) return;
if (item.dataset.bssTag === activeTag) {
activeClassNode.classList.add('active');
}
});
}
function updateAuthorNav(authorNav) {
const url = new URL(window.location.href);
let authorParam = 'author';
let author = url.searchParams.get(authorParam) || '';
renderAuthorNav(authorNav, author);
}
function renderAuthorNav(authorNav, activeAuthor = '') {
if (!canFilterCollectionByAuthor(authorNav)) return;
authorNav.style.removeProperty('display');
let items = [].slice.call(authorNav.querySelectorAll('[data-bss-type="author-loop-item"]'));
items.forEach(item => item.classList.contains('author-' + activeAuthor) ? item.style.removeProperty('display') : item.style.setProperty('display', 'none', 'important'));
}
})();
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
<script src="../../assets/js/bs-init.js?h=7c6b4c49b8ac0f383799ccb3d5def770"></script>
<script src="../../assets/js/Carousel---Slider-With-Animation-slider_with_animation.js?h=948f8788fd189b5cc9df01ff4fce4152"></script>
<script src="../../assets/js/CookieConsentComponent-cookieconsent.js?h=83fbb3192473604d72b00a854c6de4fd"></script>
<script src="https://kit.fontawesome.com/8970d94f9b.js"></script>
<script src="../../assets/js/pikaday.min.js?h=039feef26d52ebc5f1260a47208bfa38"></script>
<script src="../../assets/js/text-carousel.js?h=992f402828c7806b1f3bb7f29232e972"></script>
<script src="../../assets/js/theme.js?h=aeddb9c3ce5d77b8278c91c07acf30ad"></script>
</body>
</html>

View File

@@ -0,0 +1,803 @@
<!DOCTYPE html>
<html data-bs-theme="auto" lang="en-gb">
<head>
<meta charset="utf-8">
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//analytics.adcmnetworks.co.uk/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
<script src="https://kit.fontawesome.com/8970d94f9b.js" crossorigin="anonymous"></script>
<meta name="fediverse:creator" content="@MrDavisCSIT@mstdn.social">
<script src="https://cms.tahdah.me/scripts/publicbadge.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
<title>Exam Buff or Exam Bluff</title>
<link rel="canonical" href="https://www.mrlyall.uk/my-work/extracurricular-projects/exam-buff-or-exam-bluff.html">
<meta property="og:url" content="https://www.mrlyall.uk/my-work/extracurricular-projects/exam-buff-or-exam-bluff.html">
<meta name="twitter:description" content="The website of Mr. A. Lyall, featuring a portfolio of work in computing education, digital projects, and curriculum resources. Explore blog posts, classroom tools, and professional insights focused on innovation, inclusion, and effective IT teaching.">
<meta name="twitter:card" content="summary">
<meta property="og:type" content="website">
<meta name="twitter:title" content="Mr Lyall">
<meta property="og:image" content="https://www.mrlyall.uk/assets/img/projects/extracurricular/exam_buff_or_exam_bluff/exam_buff_or_exam_bluff_app_logo.webp">
<meta name="description" content="Fast-paced CS quiz game for GCSE+ that tests code and theory using logic, speed, skill, and bluffing">
<script>
(function() {
// JavaScript snippet handling Dark/Light mode switching
const getStoredTheme = () => localStorage.getItem('theme');
const setStoredTheme = theme => localStorage.setItem('theme', theme);
const forcedTheme = document.documentElement.getAttribute('data-bss-forced-theme');
const getPreferredTheme = () => {
if (forcedTheme) return forcedTheme;
const storedTheme = getStoredTheme();
if (storedTheme) {
return storedTheme;
}
const pageTheme = document.documentElement.getAttribute('data-bs-theme');
if (pageTheme) {
return pageTheme;
}
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
}
const setTheme = theme => {
if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.documentElement.setAttribute('data-bs-theme', 'dark');
} else {
document.documentElement.setAttribute('data-bs-theme', theme);
}
}
setTheme(getPreferredTheme());
const showActiveTheme = (theme, focus = false) => {
const themeSwitchers = [].slice.call(document.querySelectorAll('.theme-switcher'));
if (!themeSwitchers.length) return;
document.querySelectorAll('[data-bs-theme-value]').forEach(element => {
element.classList.remove('active');
element.setAttribute('aria-pressed', 'false');
});
for (const themeSwitcher of themeSwitchers) {
const btnToActivate = themeSwitcher.querySelector('[data-bs-theme-value="' + theme + '"]');
if (btnToActivate) {
btnToActivate.classList.add('active');
btnToActivate.setAttribute('aria-pressed', 'true');
}
}
}
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
const storedTheme = getStoredTheme();
if (storedTheme !== 'light' && storedTheme !== 'dark') {
setTheme(getPreferredTheme());
}
});
window.addEventListener('DOMContentLoaded', () => {
showActiveTheme(getPreferredTheme());
document.querySelectorAll('[data-bs-theme-value]')
.forEach(toggle => {
toggle.addEventListener('click', (e) => {
e.preventDefault();
const theme = toggle.getAttribute('data-bs-theme-value');
setStoredTheme(theme);
setTheme(theme);
showActiveTheme(theme);
})
})
});
})();
</script>
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="stylesheet" href="../../assets/bootstrap/css/bootstrap.min.css?h=c9d969cca6f72ca8d4dfd457f2e8eff8">
<link rel="stylesheet" href="../../assets/css/Lato.css?h=69bc5b06794edd4ca9a38642d36c83d0">
<link rel="stylesheet" href="../../assets/css/bss-overrides.css?h=15b91a8988c8fc6448a8989802a159de">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css">
<link rel="stylesheet" href="../../assets/css/styles.css?h=7c67e1bb3df4cb41abaceaf312f03dfa">
<link rel="stylesheet" href="../../assets/css/pikaday.min.css?h=a9ab8ca627aa6e8f64b730ca9c2c781d">
<link rel="stylesheet" href="../../assets/css/CookieConsentComponent.css?h=39af3305e95f4d2a8883e97d7e0cdb14">
<link rel="stylesheet" href="../../assets/css/animations.compiled.css?h=49917e33fe831aa33e24fb1e8124fdd9">
<link rel="stylesheet" href="../../assets/css/Carousel---Slider-With-Animation.css?h=63f5768f05d2ae91446ac010bcd4844a">
</head>
<body>
<nav class="navbar navbar-expand-md fixed-top portfolio-navbar gradient navbar-dark">
<div class="container-fluid"><a class="navbar-brand logo" href="../../"><img alt="Stylised white microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" width="50" height="50" class="mobile-padding-left"></a><button data-bs-toggle="collapse" class="navbar-toggler" data-bs-target="#navbarNav" style="margin-right: 0.5em;"><span class="visually-hidden">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../">Home</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../about">About</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../projects">My Work</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../my-work/showreel">Showreel</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../blog">Blog</a></li>
</ul>
</div>
</div>
</nav>
<main class="page">
<section class="portfolio-block block-intro">
<div class="container center-everything">
<!-- Start: portfolio heading -->
<div class="align-content-center heading blog-heading exambufforbluff-windows">
<h2>Exam Buff or Exam Bluff</h2>
<p>Fast-paced CS quiz game for GCSE+ that tests code and theory using logic, speed, skill, and bluffing</p>
</div><!-- End: portfolio heading -->
</div>
</section>
<section class="portfolio-block project">
<div class="container center-everything">
<div class="swiper project-carousel" id="swiper-1" data-bss-swiper="{&quot;direction&quot;:&quot;horizontal&quot;,&quot;loop&quot;:true,&quot;autoplay&quot;:{&quot;pauseOnMouseEnter&quot;:true},&quot;autoHeight&quot;:true,&quot;keyboard&quot;:true,&quot;mousewheel&quot;:true,&quot;effect&quot;:&quot;creative&quot;,&quot;creativeEffect&quot;:{&quot;prev&quot;:{&quot;shadow&quot;:true,&quot;translate&quot;:[&quot;-20%&quot;,0,-1]},&quot;next&quot;:{&quot;translate&quot;:[&quot;100%&quot;,0,0]}},&quot;pagination&quot;:{&quot;el&quot;:&quot;.swiper-pagination&quot;,&quot;type&quot;:&quot;bullets&quot;,&quot;clickable&quot;:true,&quot;dynamicBullets&quot;:true},&quot;navigation&quot;:{&quot;nextEl&quot;:&quot;.swiper-button-next&quot;,&quot;prevEl&quot;:&quot;.swiper-button-prev&quot;}}">
<div class="swiper-wrapper">
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Large red capital letter &quot;F&quot; inside a red circle on a transparent background." width="500" height="500" src="../../assets/img/projects/extracurricular/exam_buff_or_exam_bluff/exam_buff_or_exam_bluff_app_logo.webp?h=c5996308f0abaf2970a7fd4e8e1cdcbf"></div>
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Dialog box titled &quot;Exam Buff or Exam Bluff&quot; welcoming user &quot;Alex&quot; and explaining that the quiz helps determine exam readiness." width="438" height="227" src="../../assets/img/projects/extracurricular/exam_buff_or_exam_bluff/welcome_message.webp?h=a0ea03c22baccd4b8ed08c034ba0deea"></div>
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Quiz screen titled &quot;Exam Buff or Exam Bluff&quot; asking &quot;What is the full name of a CPU?&quot; with four multiple-choice answers and a score of 0." width="456" height="353" src="../../assets/img/projects/extracurricular/exam_buff_or_exam_bluff/main_question_screen.webp?h=97801e267282c19cc015cef190c62ad3"></div>
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Dialog box titled &quot;Correct&quot; with a blue information icon and message &quot;Correct Answer!&quot; with an &quot;OK&quot; button." width="452" height="344" src="../../assets/img/projects/extracurricular/exam_buff_or_exam_bluff/correct_answer_dialog.webp?h=97812b1ad2a290fd68295f5e3436706e"></div>
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Dialog box titled &quot;Incorrect&quot; with a yellow warning icon and message &quot;Incorrect Answer!&quot; and an &quot;OK&quot; button." width="446" height="345" src="../../assets/img/projects/extracurricular/exam_buff_or_exam_bluff/incorrect_answer_dialog.webp?h=b77b3dcf74ba3b6fe51fc2f91090a00d"></div>
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Confirmation dialog titled &quot;Are You Sure?&quot; asking &quot;Are you sure you wish to end the game?&quot; with &quot;Yes&quot; and &quot;No&quot; buttons." width="457" height="350" src="../../assets/img/projects/extracurricular/exam_buff_or_exam_bluff/end_game_dialog.webp?h=7733ff5999c4d5b1cd14b1fc5d9137a0"></div>
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Windows-style dialog box titled &quot;Game Over&quot; displaying &quot;You scored 1 out of 15. Would you like to play again?&quot; with &quot;Yes&quot; and &quot;No&quot; buttons." width="266" height="167" src="../../assets/img/projects/extracurricular/exam_buff_or_exam_bluff/game_over_dialog.webp?h=382ff451213b5f3bb3eb60ad4644e948"></div>
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Windows-style dialog box titled &quot;Game Over&quot; showing the message &quot;You've answered all the questions. You scored 15 out of 15. Would you like to play again?&quot; with &quot;Yes&quot; and &quot;No&quot; buttons." width="272" height="165" src="../../assets/img/projects/extracurricular/exam_buff_or_exam_bluff/game_finish_dialog.webp?h=0e2e0b9d3070f1a5bdda0303b43b8ca4"></div>
</div>
<div>
<div class="swiper-button-prev swiper-control"></div>
<div class="swiper-button-next swiper-control"></div>
</div>
<div class="swiper-pagination swiper-control"></div>
</div>
<div class="row">
<div class="col info">
<h3>Inspiration</h3>
<p>I need to help my students revise for their exams... How do I do this?! They need to revise how to code and revise the theory... Why make an app in the language they learn... They look at the source code and play the game.</p>
<h3>What It Does</h3>
<p>Play it and find out! Students can be so lazy at times...</p>
<h3>How We Built It</h3>
<p>With Visual Basic in Visual Studio using Visual Prompts using our eyes</p>
<h3>Challenges We Ran Into</h3>
<p>Not using CSV... Then trying to use CSV... Then realising the CSV works but the rest of the code doesn't...</p>
<h3>Accomplishments That We're Proud Of</h3>
<p>1) It is finished... 2) That is all.</p>
<h3>What We Learned</h3>
<p>CSV is always an option... Probably the best... Possibly the only option...</p>
<h3>What's next for Exam Buff or Exam Bluff?</h3>
<p>Create more questions to help them with their revision. Put it into my lessons and challenge higher ability students to try and create their own version of the game (some framework would be provided)</p>
</div>
<div class="col-auto meta project-details">
<div class="tags"><span class="meta-heading">Hackathon</span><span>BullHacks 2.0</span><span class="meta-heading">Created &amp; Submitted</span><span>28-29 April 2018</span><span class="meta-heading">Products Created</span><span>Microsoft Windows Application</span><a class="btn btn-primary project-buttons" role="button" href="https://devpost.com/software/exam-buff-or-exam-bluff-hrjb83" target="_blank">View Entry on DevPost</a><a class="btn btn-primary project-buttons" role="button" href="https://gitea.adcmnetworks.co.uk/Intelligence-Not-Found/BullHacks2.0-ExamBufforExamBluff" target="_blank">View Project on Gitea</a></div>
</div>
</div>
<div class="more-projects">
<h3 class="text-center more-projects-heading">More Projects</h3>
<div data-bss-type="blog-loop" data-bss-perpage="3" style="display: none !important;">
<div class="row gy-4 row-cols-1 row-cols-sm-2 row-cols-md-2 row-cols-lg-3 mt-0" data-bss-type="blog-loop-base">
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item">
<div class="card"><a href="citation-needed.html"><img class="img-fluid card-img-top rainbow-border" alt="Screenshot of login screen with fields for email and password." width="2500" height="1125" src="../../assets/img/projects/extracurricular/citation_needed/login_screen.webp?h=3626905284037118af731fe2573ac5f4"></a>
<div class="card-body"><a href="citation-needed.html">
<h4 class="text-body">Citation Needed</h4>
</a>
<p class="card-text">Creates BCU Harvard web citations; built to replace RefME, Cite This For Me, and other broken tools.</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item">
<div class="card"><a href="i-am-aware.html"><img class="img-fluid card-img-top rainbow-border" alt="A collage of newspaper-style clippings with words like “Anxiety,” “Panic Attacks,” and “Depression,” with the phrase “I Am Aware” boldly overlaid in white text in the center of the image, framed by a thin white border." width="940" height="500" src="../../assets/img/projects/extracurricular/iamaware.webp?h=a3dcdbacf64839eb9dcfd0f9190b41fb"></a>
<div class="card-body"><a href="i-am-aware.html">
<h4 class="text-body">I Am Aware</h4>
</a>
<p class="card-text">BCU campaign exploring mental health resources and real stories of depression, anxiety, and bipolar.</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item">
<div class="card"><a href="societyplus.html"><img class="img-fluid card-img-top rainbow-border" alt="A cropped screenshot of the Society+ Mental Health Awareness site at Birmingham City University. Shows the society logo, &quot;Society Name&quot; and &quot;Society description&quot; on a blue gradient background. A navigation bar with links for Home, Login, and Sign Up is visible at the top right. The layout highlights the societys brand and structure." width="940" height="500" src="../../assets/img/projects/extracurricular/society+/societypluspreview.webp?h=c5bf765f66449f21ca88f0206db68bd5"></a>
<div class="card-body"><a href="societyplus.html">
<h4 class="text-body">Society+</h4>
</a>
<p class="card-text">Platform for societies to manage sign-ups, send texts, and update info using PHP, SQL, and Nexmo API</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item" style="display: none !important;">
<div class="card"><a href="sortai.html"><img class="img-fluid card-img-top rainbow-border" alt="Terminal-style logo for Sort.AI. A green monospaced font reads [$~] sort on a black background, resembling a command-line interface." width="333" height="222" src="../../assets/img/projects/extracurricular/sort.ai/sort.ai_logo.webp?h=a198ffe5f200f284ee778dd6f7b1d741"></a>
<div class="card-body"><a href="sortai.html">
<h4 class="text-body">Sort.AI</h4>
</a>
<p class="card-text">AI file sorter using Google NLP in C#. Auto-categorises any file. Awarded 3rd place at BullHacks 1.0</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item" style="display: none !important;">
<div class="card"><a href="task-master-web.html"><img class="img-fluid card-img-top rainbow-border" alt="Preview image of the Task Master project homepage. It includes the same blue background and the main message “Welcome to BCU Hacks Task Master We Have No Idea What Were Doing!” without form fields." width="940" height="500" src="../../assets/img/projects/extracurricular/task_master/taskmasterpreview.webp?h=bece3f4d6e67029790c7b300d5db3393"></a>
<div class="card-body"><a href="task-master-web.html">
<h4 class="text-body">Task Master for Web</h4>
</a>
<p class="card-text">Business task manager with secure login, file upload area, MySQL. Awarded 3rd place at BrumHack 5.0.</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item" style="display: none !important;">
<div class="card"><a href="the-computers-identity.html"><img class="img-fluid card-img-top rainbow-border" alt="A cropped preview of “The Computers Identity” language selection webpage, showing a column of language buttons including English, Binary, Octal, ASCII, Hexadecimal, and Leet on a white background, with a blurred brown/grey gradient on the right." width="940" height="500" src="../../assets/img/projects/extracurricular/the_computers_identity/identitypreview.webp?h=8f3c2d53aaf46cff69c58a66abbe76f5"></a>
<div class="card-body"><a href="the-computers-identity.html">
<h4 class="text-body">The Computer's Identity</h4>
</a>
<p class="card-text">Interactive poem entry for BCU Christian Union art competition displayed in binary format &amp; QR code.</p>
</div>
</div>
</div>
</div>
<nav class="d-flex justify-content-center mt-3" data-bss-type="blog-loop-pagination">
<ul class="pagination">
<li class="page-item disabled" data-type="prev" data-page="1"><a class="page-link" aria-label="Previous" href="#"><span aria-hidden="true">«</span></a></li>
<li class="page-item active" data-type="regular" data-page="1"><a class="page-link" href="#">1</a></li>
<li class="page-item" data-type="regular" data-page="2"><a class="page-link" href="#">2</a></li>
<li class="page-item" data-type="next" data-page="2"><a class="page-link" aria-label="Next" href="#"><span aria-hidden="true">»</span></a></li>
</ul>
</nav>
</div>
</div>
</div>
</section>
</main><!-- Start: Footer Multi Column -->
<footer class="text-body bg-body" id="Light-Footer">
<div class="container py-4 py-lg-5 center-everything">
<div class="row justify-content-center">
<!-- Start: Accreditations -->
<div class="col-sm-3 col-md-6 text-center text-lg-start d-none d-sm-none d-md-none d-lg-flex flex-column">
<h3 class="fs-6 text-center text-body accreditations-title">Accreditations</h3>
<div class="swiper text-body w-100" id="light-swiper" data-bss-swiper="{&quot;direction&quot;:&quot;horizontal&quot;,&quot;loop&quot;:true,&quot;autoplay&quot;:{&quot;pauseOnMouseEnter&quot;:true},&quot;autoHeight&quot;:true,&quot;effect&quot;:&quot;fade&quot;,&quot;fadeEffect&quot;:{&quot;crossFade&quot;:true}}">
<div class="swiper-wrapper">
<!-- Start: Mountain Training -->
<div class="swiper-slide d-flex justify-content-center center-everything">
<div class="tahdah-badge" data-candidateid="1466454"></div>
</div><!-- End: Mountain Training -->
<!-- Start: Canva Essentials -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-badge.webp?h=bc157efb7620e733f43b4b00981978ea"></a></div><!-- End: Canva Essentials -->
<!-- Start: Canva Essentials for Mobile -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials-mobile" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-for-mobile-badge.webp?h=93513f8f560a2e346c12aeb9fb0c18ec"></a></div><!-- End: Canva Essentials for Mobile -->
<!-- Start: Canva Graphic Design Essentials -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/graphic-design-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/graphic-design-essentials-badge.webp?h=f5406331e45433f0d8bd6b929f9d113b"></a></div><!-- End: Canva Graphic Design Essentials -->
<!-- Start: Marketing with Canva -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/marketing-with-canva" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/mr-a-davis-marketing-with-canva-badge.webp?h=f0b802da597c825b7e03378130d94aca"></a></div><!-- End: Marketing with Canva -->
<!-- Start: Canva for Work -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-for-work" target="_blank"><img class="img-fluid w-100 accreditation" width="2160" height="2160" src="../../assets/img/accreditations/mr-a-davis-canva-for-work-badge.webp?h=b3617633e9d2de429288704f75b304f4"></a></div><!-- End: Canva for Work -->
<!-- Start: Canva Teacher Essentials -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/teacher-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/teacher-essentials-badge.webp?h=d2d6f962e0b1bbebc68f987d6f156028"></a></div><!-- End: Canva Teacher Essentials -->
<!-- Start: Canva AI in the Classroom -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/ai-in-the-classroom" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/ai-in-the-classroom-badge.webp?h=769458ef2c323729c209855a3cde7312"></a></div><!-- End: Canva AI in the Classroom -->
<!-- Start: Adobe Creative Educator Level 1 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/3a49b473-4af9-4c5a-ab38-1c754f181c6e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Adobe Creative Educator Level 1&quot;" width="600" height="600" src="../../assets/img/accreditations/3_hours_adobe_creative_educator_level_1.webp?h=45de0c4e8984e885b1153e344e794beb"></a></div><!-- End: Adobe Creative Educator Level 1 -->
<!-- Start: Minecraft Education -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/53745c80-7d0a-4428-906a-839e905c139c/public_url" target="_blank"><img class="img-fluid w-100 accreditation" width="600" height="600" src="../../assets/img/accreditations/minecraft-education-ambassador.webp?h=5c614dffa9ab6d6fd77cd805b8397ffd"></a></div><!-- End: Minecraft Education -->
<!-- Start: MCE -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/9c9dd6cd-2703-4539-adc9-366069cbc3a9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MCE: Microsoft Certified Educator&quot;" width="352" height="352" src="../../assets/img/accreditations/mce_microsoft_certified_educator.webp?h=3e67f154a356cd1ef15c31b0fb42c0c4"></a></div><!-- End: MCE -->
<!-- Start: MIEE 2023-2024 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/b5ac17a1-0914-496f-9d85-9608966259ee/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Innovative Educator Expert 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2023_2024.webp?h=ee882aefba64b3e5b8ea9554eeea3847"></a></div><!-- End: MIEE 2023-2024 -->
<!-- Start: MIEE 2024-2025 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/ad92a7cb-3e4f-46e2-8e73-99dffd0eb69e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Innovative Educator Expert 2024-2025&quot;" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2024_2025.webp?h=a0b5cb2a639caf0351a977146375667e"></a></div><!-- End: MIEE 2024-2025 -->
<!-- Start: Pearson OSA Expert -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/44756f05-e727-41c8-a352-a656c033c9f0/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Onscreen Assessment Expert GCSE Computer Science&quot;" width="800" height="800" src="../../assets/img/accreditations/pearson_onscreen_assessment_expert.webp?h=d4e00ea5bfad5a66c619238d7cbdd8db"></a></div><!-- End: Pearson OSA Expert -->
<!-- Start: STEM 21-22 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/52121ef6-0760-4870-91cc-1cb20001238b/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Establishing a STEM club - from creation to careers 2021/2022&quot;" width="1200" height="1200" src="../../assets/img/accreditations/establishing_a_stem_club_from_creation_to_careers_2021_2022.webp?h=7f96a591bd4fb09f86da96af8a8a41ef"></a></div><!-- End: STEM 21-22 -->
<!-- Start: NCCE Secondary 21-22 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/60d50339-2dda-4991-90b5-7ff087975746/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Secondary Computer Science - Professional Development 2021-2022&quot;" width="1200" height="1200" src="../../assets/img/accreditations/secondary_computer_science_professional_development_2021_2022.webp?h=813dd91393f904969bc3bf184007c8c2"></a></div><!-- End: NCCE Secondary 21-22 -->
<!-- Start: NCCE Secondary 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/e74f9011-4006-4570-824a-f483fdcb5b26/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Secondary Computing - Professional Development 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/secondary_computing_professional_development_2023_2.webp?h=77ebf2880eb7d342016b83e098d92d23"></a></div><!-- End: NCCE Secondary 23-24 -->
<!-- Start: NCCE GCSE Computer Science 19-20 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/c73720d2-8208-4e2b-a1e5-c473961834d9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; GCSE Computer Science: Professional Development 2019-2020&quot;" width="1200" height="1200" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2019_2020.webp?h=fef2cee3326aeff9e2f65e86cf5e4fee"></a></div><!-- End: NCCE GCSE Computer Science 19-20 -->
<!-- Start: NCCE GCSE Computer Science 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/c486279a-8e97-4779-90c1-56f09622e782/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; GCSE Computer Science - Professional Development 2022-2023&quot;" width="2000" height="2000" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2022_2023.webp?h=0a54c55717b61c0a0b4ed80582d7bfae"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
<!-- Start: NCCE GCSE Computer Science 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/e76ed57f-2270-47f5-8e7e-4136baa261f3/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; GCSE Computer Science - Professional Development 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2023.webp?h=71b8c59772af539946fb49a210b05758"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
<!-- Start: NCCE A Level Computer Science 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/418cfb22-3e37-4b24-b527-652b1ab6ea76/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; A-Level Computer Science - Professional Development 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/a_level_computer_science_professional_development.webp?h=a9cc6f73abdf82ab49e5f8a8695cb557"></a></div><!-- End: NCCE A Level Computer Science 23-24 -->
<!-- Start: MOS Master -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/0e46d6b8-1a1b-4d16-a5d5-3b95661fb290/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Master 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_master_2013.webp?h=70d957a5307d38f46b84b6462439afbc"></a></div><!-- End: MOS Master -->
<!-- Start: MOS Word Expert -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/287d0ca4-bea1-4e18-b9e7-21f6a5d5d571/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Word 2013 Expert&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013_expert.webp?h=5bd4ec8c82587201172a8b8e460ff4e6"></a></div><!-- End: MOS Word Expert -->
<!-- Start: MOS Word -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/f1831f0e-776b-49aa-8a8d-05817d4b1410/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Word 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013.webp?h=2b90c5590b7b50f1891a9116fa38ac36"></a></div><!-- End: MOS Word -->
<!-- Start: MOS Excel -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/2ab55353-3267-46cc-b3f4-3099af54d869/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Excel 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_excel_2013.webp?h=f016925633d0a52b862259a05b396b6a"></a></div><!-- End: MOS Excel -->
<!-- Start: MOS PowerPoint -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/11162aa2-331a-4ec4-a612-665f3bc59cb1/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: PowerPoint 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_powerpoint_2013.webp?h=26de9623c491661347998549e10d4353"></a></div><!-- End: MOS PowerPoint -->
<!-- Start: MOS OneNote -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/cd328b1d-27b6-4410-be70-0792a99b72ea/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: OneNote 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_onenote_2013.webp?h=2ffe41c2a6e37d602469f8158ef13d79"></a></div><!-- End: MOS OneNote -->
<!-- Start: MTA Security -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/da3b3b4c-cec4-4537-bb5b-486ce9ee6ee7/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MTA: Security Fundamentals - Certified 2016&quot;" width="352" height="352" src="../../assets/img/accreditations/mta_security_fundamentals_certified_2016.webp?h=0df619419a5b6d0eb694dc9363870b20"></a></div><!-- End: MTA Security -->
<!-- Start: MTA Networking -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/23194bfe-30e4-4f8e-b9ec-338d060136dd/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MTA: Networking Fundamentals - Certified 2016&quot;" width="352" height="352" src="../../assets/img/accreditations/mta_networking_fundamentals_certified_2016.webp?h=cdc4618c5e86d11aa304cae14c3942bc"></a></div><!-- End: MTA Networking -->
<!-- Start: MTA Windows OS -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/f0f27d87-424b-49e8-a444-95086d640e66/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MTA: Windows Operating System Fundamentals - Certified 2016&quot;" width="352" height="352" src="../../assets/img/accreditations/mta_windows_operating_system_fundamentals_certified_2016.webp?h=44a6360480ef67ced301c697d31f9fa5"></a></div><!-- End: MTA Windows OS -->
</div>
</div>
<div class="swiper-nav-standalone d-flex justify-content-center accreditations-navigation" data-bss-swiper-target="#light-swiper">
<div class="swiper-button-prev"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-left">
<path fill-rule="evenodd" d="M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8"></path>
</svg></button></div>
<div class="swiper-button-next"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-right">
<path fill-rule="evenodd" d="M1 8a.5.5 0 0 1 .5-.5h11.793l-3.147-3.146a.5.5 0 0 1 .708-.708l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 0 1-.708-.708L13.293 8.5H1.5A.5.5 0 0 1 1 8"></path>
</svg></button></div>
</div>
</div><!-- End: Accreditations -->
<!-- Start: Spacer -->
<div class="col-md-3 text-center text-lg-start d-flex flex-column"><a class="d-flex w-100 justify-content-center center-everything" href="https://client.brixly.uk/aff.php?aff=837" target="_blank"><img class="img-fluid object-fit-contain w-50" src="https://brixly.uk/wp-content/uploads/2022/06/Artboard-32.jpg"></a></div><!-- End: Spacer -->
<div class="col-md-3 text-center text-lg-start d-flex flex-column align-items-center order-first align-items-lg-start order-lg-last">
<div class="fw-bold d-flex align-items-center mb-2"><img alt="Stylised orange microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501" width="50" height="50" class="footer-logo"><span>Mr A Lyall</span></div>
<p>IT professional and Head of Computing in the West Midlands</p>
</div>
</div>
<hr>
<div class="d-flex justify-content-between align-items-center pt-3">
<p class="mb-0 footer-copyright">Copyright © 2025 ADCM Networks</p>
<ul class="list-inline mb-0">
<!-- Start: Mastodon -->
<li class="list-inline-item"><a rel="me" href="https://mstdn.social/@MrDavisCSIT"><svg class="text-body" xmlns="http://www.w3.org/2000/svg" viewBox="-32 0 512 512" width="1em" height="1em" fill="currentColor">
<!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. -->
<path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"></path>
</svg></a></li><!-- End: Mastodon -->
<!-- Start: Bluesky -->
<li class="list-inline-item"><a href="https://bsky.app/profile/adcmnetworks.co.uk"><i class="fa-brands fa-square-bluesky"></i></a></li><!-- End: Bluesky -->
<!-- Start: LinkedIn -->
<li class="list-inline-item"><a href="https://www.linkedin.com/in/MrDavisCSIT/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-linkedin text-body">
<path d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854V1.146zm4.943 12.248V6.169H2.542v7.225h2.401m-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248-.822 0-1.359.54-1.359 1.248 0 .694.521 1.248 1.327 1.248h.016zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016a5.54 5.54 0 0 1 .016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225h2.4"></path>
</svg></a></li><!-- End: LinkedIn -->
<!-- Start: GitHub -->
<li class="list-inline-item"><a href="https://github.com/MrDavisCSIT"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-github text-body">
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8"></path>
</svg></a></li><!-- End: GitHub -->
<!-- Start: Reddit -->
<li class="list-inline-item"><a href="https://www.reddit.com/user/AlexanderEDavis95/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-reddit text-body">
<path d="M6.167 8a.831.831 0 0 0-.83.83c0 .459.372.84.83.831a.831.831 0 0 0 0-1.661m1.843 3.647c.315 0 1.403-.038 1.976-.611a.232.232 0 0 0 0-.306.213.213 0 0 0-.306 0c-.353.363-1.126.487-1.67.487-.545 0-1.308-.124-1.671-.487a.213.213 0 0 0-.306 0 .213.213 0 0 0 0 .306c.564.563 1.652.61 1.977.61zm.992-2.807c0 .458.373.83.831.83.458 0 .83-.381.83-.83a.831.831 0 0 0-1.66 0z"></path>
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-3.828-1.165c-.315 0-.602.124-.812.325-.801-.573-1.9-.945-3.121-.993l.534-2.501 1.738.372a.83.83 0 1 0 .83-.869.83.83 0 0 0-.744.468l-1.938-.41a.203.203 0 0 0-.153.028.186.186 0 0 0-.086.134l-.592 2.788c-1.24.038-2.358.41-3.17.992-.21-.2-.496-.324-.81-.324a1.163 1.163 0 0 0-.478 2.224c-.02.115-.029.23-.029.353 0 1.795 2.091 3.256 4.669 3.256 2.577 0 4.668-1.451 4.668-3.256 0-.114-.01-.238-.029-.353.401-.181.688-.592.688-1.069 0-.65-.525-1.165-1.165-1.165z"></path>
</svg></a></li><!-- End: Reddit -->
<!-- Start: YouTube -->
<li class="list-inline-item"><a href="https://www.youtube.com/channel/UCgDhiQMLbTemv2varDiW2rA"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-youtube text-body">
<path d="M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.007 2.007 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.007 2.007 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31.4 31.4 0 0 1 0 7.68v-.123c.002-.215.01-.958.064-1.778l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.007 2.007 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A99.788 99.788 0 0 1 7.858 2h.193zM6.4 5.209v4.818l4.157-2.408z"></path>
</svg></a></li><!-- End: YouTube -->
</ul>
</div>
</div>
</footer><!-- End: Footer Multi Column -->
<script>
(function() {
let collections = document.querySelectorAll('[data-bss-type="blog-loop"]');
let tagNavs = document.querySelectorAll('[data-bss-type="tag-nav"]');
let tagLoops = document.querySelectorAll('[data-bss-type="tag-loop"]');
let authorLoops = document.querySelectorAll('[data-bss-type="author-loop"]');
let authorNavs = document.querySelectorAll('[data-bss-type="author-nav"]');
window.addEventListener("popstate", (e) => {
for (let collection of collections) {
updateCollection(collection);
}
for (let tagNav of tagNavs) {
updateTagNav(tagNav);
}
for (let authorNav of authorNavs) {
updateAuthorNav(authorNav);
}
});
for (let collection of collections) {
updateCollection(collection);
if (!canPaginateCollection(collection)) continue;
let pagination = collection.querySelector('[data-bss-type="blog-loop-pagination"]');
pagination.addEventListener('click', function(e) {
let paginationItem = e.target.closest('.page-item');
if (!paginationItem) return;
e.preventDefault();
if (paginationItem.classList.contains('disabled') || paginationItem.classList.contains('active')) return;
let collection = paginationItem.closest('[data-bss-type="blog-loop"]');
if (!collection) return;
let page = parseInt(paginationItem.dataset.page);
if (!page) return;
let pageParam = getPageParameter(collection);
if (pageParam) {
const url = new URL(window.location);
url.searchParams.set(pageParam, page);
history.pushState({
[pageParam]: page
}, document.title, url);
for (let c of collections) {
let param = getPageParameter(c);
if (param !== pageParam) continue;
updateCollection(c);
}
} else {
updateCollection(collection, page);
}
});
}
for (let tagNav of tagNavs) {
updateTagNav(tagNav);
tagNav.addEventListener('click', onTagClick);
}
for (let tagLoop of tagLoops) {
tagLoop.addEventListener('click', onTagClick);
}
for (let authorLoop of authorLoops) {
authorLoop.addEventListener('click', onAuthorClick);
}
for (let authorNav of authorNavs) {
updateAuthorNav(authorNav);
}
function onTagClick(e) {
onBlogFilterClick(e);
for (let nav of tagNavs) {
updateTagNav(nav);
}
}
function onAuthorClick(e) {
onBlogFilterClick(e);
for (let authorNav of authorNavs) {
updateAuthorNav(authorNav);
}
}
function onBlogFilterClick(e) {
const item = e.target.closest('[data-bss-filter="blog"]');
if (!item || !item.dataset.hasOwnProperty('bssHref') || !item.dataset.hasOwnProperty('bssFilterParam')) return;
const stateNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
if (stateNode && (stateNode.classList.contains('disabled') || stateNode.classList.contains('active'))) {
e.preventDefault();
return;
}
const link = item.dataset.bssHref;
if (!linksToCurrentPage(link)) return;
e.preventDefault();
const url = new URL(window.location);
const filterParam = item.dataset.bssFilterParam;
const filterValue = item.dataset.bssFilterValue || '';
const collectionsToUpdate = [];
const newQueryParams = {
[filterParam]: filterValue
};
for (let c of collections) {
if (!canFilterCollection(c)) continue;
collectionsToUpdate.push(c);
let pageParam = getPageParameter(c);
let page = url.searchParams.get(pageParam);
if (page === null || page == 1) continue;
newQueryParams[pageParam] = 1;
}
for (let param in newQueryParams) {
if (newQueryParams[param]) {
url.searchParams.set(param, newQueryParams[param]);
} else {
url.searchParams.delete(param);
}
}
history.pushState(newQueryParams, document.title, url);
for (let c of collectionsToUpdate) {
updateCollection(c);
}
}
function getCollectionFilters(collection) {
let filters = [];
try {
const parsed = JSON.parse(collection.dataset.bssFilters);
if (Array.isArray(parsed)) {
filters = parsed;
}
} catch (e) {}
return filters;
}
function getCollectionEmptyFilterAction(collection, filter = '') {
let emptyFilterActions = [];
try {
const parsed = JSON.parse(collection.dataset.bssEmptyFilterActions);
if (Array.isArray(parsed)) {
emptyFilterActions = parsed;
}
} catch (e) {}
const action = emptyFilterActions.find(action => action.filter === filter);
return action ? action.value : '';
}
function canFilterCollection(collection) {
return !!getCollectionFilters(collection).length;
}
function canFilterCollectionByTag(collection) {
return getCollectionFilters(collection).includes('tag');
}
function canFilterCollectionByAuthor(collection) {
return getCollectionFilters(collection).includes('author');
}
function shouldShowAllItemsForEmptyFilter(collection, filter = '') {
return getCollectionEmptyFilterAction(collection, filter) === 'show-all';
}
function canPaginateCollection(collection) {
return !!getCollectionPagination(collection);
}
function getCollectionPagination(collection) {
return collection.querySelector('[data-bss-type="blog-loop-pagination"]');
}
function getPageParameter(collection) {
return collection.dataset.bssPageParam;
}
function linksToCurrentPage(path = '') {
let currentURL, url;
try {
currentURL = new URL(window.location);
url = new URL(path, window.location.href);
} catch (e) {
console.error(e);
}
return currentURL.origin === url.origin && currentURL.pathname === url.pathname;
}
function updateCollection(collection, page, activeTag = '', activeAuthor = '') {
const url = new URL(window.location.href);
if (canPaginateCollection(collection)) {
if (!page) {
let pageParam = getPageParameter(collection);
page = (pageParam ? url.searchParams.get(pageParam) : 1) || 1;
}
}
if (canFilterCollectionByTag(collection) && !activeTag) {
let tagParam = 'tag';
activeTag = url.searchParams.get(tagParam) || '';
}
if (canFilterCollectionByAuthor(collection) && !activeAuthor) {
let authorParam = 'author';
activeAuthor = url.searchParams.get(authorParam) || '';
}
renderCollectionPage(collection, page, activeTag, activeAuthor);
}
function renderCollectionPage(collection, page = 1, activeTag = '', activeAuthor = '') {
page = Math.max(parseInt(page, 10), 1);
collection.style.removeProperty('display');
let loopBase = collection.querySelector('[data-bss-type="blog-loop-base"]');
loopBase && loopBase.style.removeProperty('display');
let emptyState = collection.querySelector('[data-bss-type="empty-state"]');
emptyState && emptyState.style.setProperty('display', 'none', 'important');
let listItems = [].slice.call(collection.querySelectorAll('[data-bss-type="blog-loop-item"]'));
listItems.forEach(item => item.style.setProperty('display', 'none', 'important'));
if (canFilterCollectionByTag(collection)) {
listItems = listItems.filter(item => activeTag ? item.classList.contains('post-tag-' + activeTag) : shouldShowAllItemsForEmptyFilter(collection, 'tag'));
}
if (canFilterCollectionByAuthor(collection)) {
listItems = listItems.filter(item => activeAuthor ? item.classList.contains('post-author-' + activeAuthor) : shouldShowAllItemsForEmptyFilter(collection, 'author'));
}
let perPage = collection.dataset.bssPerpage || listItems.length;
let visibleListItems = listItems.slice((page - 1) * perPage, page * perPage);
visibleListItems.forEach(item => item.style.removeProperty('display'));
let isEmpty = !visibleListItems.length;
if (isEmpty) {
loopBase && loopBase.style.setProperty('display', 'none', 'important');
emptyState && emptyState.style.removeProperty('display');
}
let itemCount = listItems.length;
let pageCount = Math.max(Math.ceil(itemCount / perPage), 1);
updateCollectionPagination(collection, page, pageCount, isEmpty);
if (collection.dataset.bssScrollOnChange) {
scrollToCollectionTop(collection);
}
}
function updateCollectionPagination(collection, page, pageCount, isEmpty) {
let pagination = getCollectionPagination(collection);
if (!pagination) return;
let paginationItems = [].slice.call(pagination.querySelectorAll('.page-item'));
if (pageCount === 1 || isEmpty) {
pagination.style.setProperty('display', 'none', 'important');
} else {
pagination.style.removeProperty('display');
}
let previousBtnDisabled = page - 1 <= 0;
let previousPage = previousBtnDisabled ? 1 : page - 1;
let nextBtnDisabled = page + 1 > pageCount;
let nextPage = nextBtnDisabled ? pageCount : page + 1;
for (let i = 0; i < paginationItems.length; i++) {
let paginationItem = paginationItems[i];
paginationItem.classList.remove('active', 'disabled');
if (paginationItem.dataset.type === 'prev') {
paginationItem.dataset.page = previousPage;
if (previousBtnDisabled) {
paginationItem.classList.add('disabled');
}
} else if (paginationItem.dataset.type === 'next') {
paginationItem.dataset.page = nextPage;
if (nextBtnDisabled) {
paginationItem.classList.add('disabled');
}
} else {
if (paginationItem.dataset.page > pageCount) {
paginationItem.style.setProperty('display', 'none', 'important');
} else {
paginationItem.style.removeProperty('display');
}
if (paginationItem.dataset.page == page) {
paginationItem.classList.add('active');
}
}
}
}
function scrollToCollectionTop(collection) {
const rect = collection.getBoundingClientRect();
const viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);
const threshold = 100;
if (rect.top >= 0 && viewHeight - rect.top > threshold) return;
setTimeout(() => {
collection.scrollIntoView({
behavior: "smooth",
block: "start",
inline: "start"
});
}, 0);
}
function updateTagNav(tagNav) {
const url = new URL(window.location.href);
let tagParam = 'tag';
let tag = url.searchParams.get(tagParam) || '';
renderTagNav(tagNav, tag);
}
function renderTagNav(tagNav, activeTag = '') {
if (!tagNav.dataset.bssSyncUrl) return;
let navItems = [].slice.call(tagNav.querySelectorAll('[data-bss-type="tag-loop-item"]'));
navItems.forEach(item => {
const activeClassNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
if (!activeClassNode) return;
activeClassNode.classList.remove('active');
const link = item.dataset.bssHref;
if (!linksToCurrentPage(link) || activeClassNode.classList.contains('disabled')) return;
if (item.dataset.bssTag === activeTag) {
activeClassNode.classList.add('active');
}
});
}
function updateAuthorNav(authorNav) {
const url = new URL(window.location.href);
let authorParam = 'author';
let author = url.searchParams.get(authorParam) || '';
renderAuthorNav(authorNav, author);
}
function renderAuthorNav(authorNav, activeAuthor = '') {
if (!canFilterCollectionByAuthor(authorNav)) return;
authorNav.style.removeProperty('display');
let items = [].slice.call(authorNav.querySelectorAll('[data-bss-type="author-loop-item"]'));
items.forEach(item => item.classList.contains('author-' + activeAuthor) ? item.style.removeProperty('display') : item.style.setProperty('display', 'none', 'important'));
}
})();
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
<script src="../../assets/js/bs-init.js?h=7c6b4c49b8ac0f383799ccb3d5def770"></script>
<script src="../../assets/js/Carousel---Slider-With-Animation-slider_with_animation.js?h=948f8788fd189b5cc9df01ff4fce4152"></script>
<script src="../../assets/js/CookieConsentComponent-cookieconsent.js?h=83fbb3192473604d72b00a854c6de4fd"></script>
<script src="https://kit.fontawesome.com/8970d94f9b.js"></script>
<script src="../../assets/js/pikaday.min.js?h=039feef26d52ebc5f1260a47208bfa38"></script>
<script src="../../assets/js/text-carousel.js?h=992f402828c7806b1f3bb7f29232e972"></script>
<script src="../../assets/js/theme.js?h=aeddb9c3ce5d77b8278c91c07acf30ad"></script>
</body>
</html>

View File

@@ -0,0 +1,773 @@
<!DOCTYPE html>
<html data-bs-theme="auto" lang="en-gb">
<head>
<meta charset="utf-8">
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//analytics.adcmnetworks.co.uk/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
<script src="https://kit.fontawesome.com/8970d94f9b.js" crossorigin="anonymous"></script>
<meta name="fediverse:creator" content="@MrDavisCSIT@mstdn.social">
<script src="https://cms.tahdah.me/scripts/publicbadge.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
<title>I Am Aware</title>
<link rel="canonical" href="https://www.mrlyall.uk/my-work/extracurricular-projects/i-am-aware.html">
<meta property="og:url" content="https://www.mrlyall.uk/my-work/extracurricular-projects/i-am-aware.html">
<meta name="twitter:description" content="The website of Mr. A. Lyall, featuring a portfolio of work in computing education, digital projects, and curriculum resources. Explore blog posts, classroom tools, and professional insights focused on innovation, inclusion, and effective IT teaching.">
<meta name="twitter:card" content="summary">
<meta property="og:type" content="website">
<meta name="twitter:title" content="Mr Lyall">
<meta property="og:image" content="https://www.mrlyall.uk/assets/img/projects/extracurricular/iamaware.webp">
<meta name="description" content="BCU campaign exploring mental health resources and real stories of depression, anxiety, and bipolar.">
<script>
(function() {
// JavaScript snippet handling Dark/Light mode switching
const getStoredTheme = () => localStorage.getItem('theme');
const setStoredTheme = theme => localStorage.setItem('theme', theme);
const forcedTheme = document.documentElement.getAttribute('data-bss-forced-theme');
const getPreferredTheme = () => {
if (forcedTheme) return forcedTheme;
const storedTheme = getStoredTheme();
if (storedTheme) {
return storedTheme;
}
const pageTheme = document.documentElement.getAttribute('data-bs-theme');
if (pageTheme) {
return pageTheme;
}
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
}
const setTheme = theme => {
if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.documentElement.setAttribute('data-bs-theme', 'dark');
} else {
document.documentElement.setAttribute('data-bs-theme', theme);
}
}
setTheme(getPreferredTheme());
const showActiveTheme = (theme, focus = false) => {
const themeSwitchers = [].slice.call(document.querySelectorAll('.theme-switcher'));
if (!themeSwitchers.length) return;
document.querySelectorAll('[data-bs-theme-value]').forEach(element => {
element.classList.remove('active');
element.setAttribute('aria-pressed', 'false');
});
for (const themeSwitcher of themeSwitchers) {
const btnToActivate = themeSwitcher.querySelector('[data-bs-theme-value="' + theme + '"]');
if (btnToActivate) {
btnToActivate.classList.add('active');
btnToActivate.setAttribute('aria-pressed', 'true');
}
}
}
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
const storedTheme = getStoredTheme();
if (storedTheme !== 'light' && storedTheme !== 'dark') {
setTheme(getPreferredTheme());
}
});
window.addEventListener('DOMContentLoaded', () => {
showActiveTheme(getPreferredTheme());
document.querySelectorAll('[data-bs-theme-value]')
.forEach(toggle => {
toggle.addEventListener('click', (e) => {
e.preventDefault();
const theme = toggle.getAttribute('data-bs-theme-value');
setStoredTheme(theme);
setTheme(theme);
showActiveTheme(theme);
})
})
});
})();
</script>
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="stylesheet" href="../../assets/bootstrap/css/bootstrap.min.css?h=c9d969cca6f72ca8d4dfd457f2e8eff8">
<link rel="stylesheet" href="../../assets/css/Lato.css?h=69bc5b06794edd4ca9a38642d36c83d0">
<link rel="stylesheet" href="../../assets/css/bss-overrides.css?h=15b91a8988c8fc6448a8989802a159de">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css">
<link rel="stylesheet" href="../../assets/css/styles.css?h=7c67e1bb3df4cb41abaceaf312f03dfa">
<link rel="stylesheet" href="../../assets/css/pikaday.min.css?h=a9ab8ca627aa6e8f64b730ca9c2c781d">
<link rel="stylesheet" href="../../assets/css/CookieConsentComponent.css?h=39af3305e95f4d2a8883e97d7e0cdb14">
<link rel="stylesheet" href="../../assets/css/animations.compiled.css?h=49917e33fe831aa33e24fb1e8124fdd9">
<link rel="stylesheet" href="../../assets/css/Carousel---Slider-With-Animation.css?h=63f5768f05d2ae91446ac010bcd4844a">
</head>
<body>
<nav class="navbar navbar-expand-md fixed-top portfolio-navbar gradient navbar-dark">
<div class="container-fluid"><a class="navbar-brand logo" href="../../"><img alt="Stylised white microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" width="50" height="50" class="mobile-padding-left"></a><button data-bs-toggle="collapse" class="navbar-toggler" data-bs-target="#navbarNav" style="margin-right: 0.5em;"><span class="visually-hidden">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../">Home</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../about">About</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../projects">My Work</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../my-work/showreel">Showreel</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../blog">Blog</a></li>
</ul>
</div>
</div>
</nav>
<main class="page">
<section class="portfolio-block block-intro">
<div class="container center-everything">
<!-- Start: portfolio heading -->
<div class="align-content-center heading blog-heading iamaware-film">
<h2>I Am Aware</h2>
<p>BCU campaign exploring mental health resources and real stories of depression, anxiety, and bipolar.</p>
</div><!-- End: portfolio heading -->
</div>
</section>
<section class="portfolio-block project">
<div class="container center-everything"><iframe class="d-flex justify-content-center portfolio-video" allowfullscreen="" frameborder="0" src="https://www.youtube-nocookie.com/embed/8m2D2mS3NjQ" width="854" height="480"></iframe>
<div class="row">
<div class="col info">
<p>I Am Aware is a campaign run by BCU Mental Health Awareness that looks into the resources available for those living with mental health issues. The campaign also looks into the lives of people affected by mental health issues such as depression, Schizophrenia, anxiety disorders and Bipolar.</p>
</div>
<div class="col-auto meta project-details">
<div class="tags"><span class="meta-heading">Project Status</span><span>Completed</span><span class="meta-heading">Client</span><span>Birmingham City University Mental Health Awareness</span><span class="meta-heading">Date</span><span>November 2016</span><span class="meta-heading">Products Created</span><span>Website, Short Films</span></div>
</div>
</div>
<div class="more-projects">
<h3 class="text-center more-projects-heading">More Projects</h3>
<div data-bss-type="blog-loop" data-bss-perpage="3" style="display: none !important;">
<div class="row gy-4 row-cols-1 row-cols-sm-2 row-cols-md-2 row-cols-lg-3 mt-0" data-bss-type="blog-loop-base">
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item">
<div class="card"><a href="citation-needed.html"><img class="img-fluid card-img-top rainbow-border" alt="Screenshot of login screen with fields for email and password." width="2500" height="1125" src="../../assets/img/projects/extracurricular/citation_needed/login_screen.webp?h=3626905284037118af731fe2573ac5f4"></a>
<div class="card-body"><a href="citation-needed.html">
<h4 class="text-body">Citation Needed</h4>
</a>
<p class="card-text">Creates BCU Harvard web citations; built to replace RefME, Cite This For Me, and other broken tools.</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item">
<div class="card"><a href="exam-buff-or-exam-bluff.html"><img class="img-fluid card-img-top rainbow-border" alt="Large red capital letter &quot;F&quot; inside a red circle on a transparent background." width="500" height="500" src="../../assets/img/projects/extracurricular/exam_buff_or_exam_bluff/exam_buff_or_exam_bluff_app_logo.webp?h=c5996308f0abaf2970a7fd4e8e1cdcbf"></a>
<div class="card-body"><a href="exam-buff-or-exam-bluff.html">
<h4 class="text-body">Exam Buff or Exam Bluff</h4>
</a>
<p class="card-text">Fast-paced CS quiz game for GCSE+ that tests code and theory using logic, speed, skill, and bluffing</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item">
<div class="card"><a href="societyplus.html"><img class="img-fluid card-img-top rainbow-border" alt="A cropped screenshot of the Society+ Mental Health Awareness site at Birmingham City University. Shows the society logo, &quot;Society Name&quot; and &quot;Society description&quot; on a blue gradient background. A navigation bar with links for Home, Login, and Sign Up is visible at the top right. The layout highlights the societys brand and structure." width="940" height="500" src="../../assets/img/projects/extracurricular/society+/societypluspreview.webp?h=c5bf765f66449f21ca88f0206db68bd5"></a>
<div class="card-body"><a href="societyplus.html">
<h4 class="text-body">Society+</h4>
</a>
<p class="card-text">Platform for societies to manage sign-ups, send texts, and update info using PHP, SQL, and Nexmo API</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item" style="display: none !important;">
<div class="card"><a href="sortai.html"><img class="img-fluid card-img-top rainbow-border" alt="Terminal-style logo for Sort.AI. A green monospaced font reads [$~] sort on a black background, resembling a command-line interface." width="333" height="222" src="../../assets/img/projects/extracurricular/sort.ai/sort.ai_logo.webp?h=a198ffe5f200f284ee778dd6f7b1d741"></a>
<div class="card-body"><a href="sortai.html">
<h4 class="text-body">Sort.AI</h4>
</a>
<p class="card-text">AI file sorter using Google NLP in C#. Auto-categorises any file. Awarded 3rd place at BullHacks 1.0</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item" style="display: none !important;">
<div class="card"><a href="task-master-web.html"><img class="img-fluid card-img-top rainbow-border" alt="Preview image of the Task Master project homepage. It includes the same blue background and the main message “Welcome to BCU Hacks Task Master We Have No Idea What Were Doing!” without form fields." width="940" height="500" src="../../assets/img/projects/extracurricular/task_master/taskmasterpreview.webp?h=bece3f4d6e67029790c7b300d5db3393"></a>
<div class="card-body"><a href="task-master-web.html">
<h4 class="text-body">Task Master for Web</h4>
</a>
<p class="card-text">Business task manager with secure login, file upload area, MySQL. Awarded 3rd place at BrumHack 5.0.</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item" style="display: none !important;">
<div class="card"><a href="the-computers-identity.html"><img class="img-fluid card-img-top rainbow-border" alt="A cropped preview of “The Computers Identity” language selection webpage, showing a column of language buttons including English, Binary, Octal, ASCII, Hexadecimal, and Leet on a white background, with a blurred brown/grey gradient on the right." width="940" height="500" src="../../assets/img/projects/extracurricular/the_computers_identity/identitypreview.webp?h=8f3c2d53aaf46cff69c58a66abbe76f5"></a>
<div class="card-body"><a href="the-computers-identity.html">
<h4 class="text-body">The Computer's Identity</h4>
</a>
<p class="card-text">Interactive poem entry for BCU Christian Union art competition displayed in binary format &amp; QR code.</p>
</div>
</div>
</div>
</div>
<nav class="d-flex justify-content-center mt-3" data-bss-type="blog-loop-pagination">
<ul class="pagination">
<li class="page-item disabled" data-type="prev" data-page="1"><a class="page-link" aria-label="Previous" href="#"><span aria-hidden="true">«</span></a></li>
<li class="page-item active" data-type="regular" data-page="1"><a class="page-link" href="#">1</a></li>
<li class="page-item" data-type="regular" data-page="2"><a class="page-link" href="#">2</a></li>
<li class="page-item" data-type="next" data-page="2"><a class="page-link" aria-label="Next" href="#"><span aria-hidden="true">»</span></a></li>
</ul>
</nav>
</div>
</div>
</div>
</section>
</main><!-- Start: Footer Multi Column -->
<footer class="text-body bg-body" id="Light-Footer">
<div class="container py-4 py-lg-5 center-everything">
<div class="row justify-content-center">
<!-- Start: Accreditations -->
<div class="col-sm-3 col-md-6 text-center text-lg-start d-none d-sm-none d-md-none d-lg-flex flex-column">
<h3 class="fs-6 text-center text-body accreditations-title">Accreditations</h3>
<div class="swiper text-body w-100" id="light-swiper" data-bss-swiper="{&quot;direction&quot;:&quot;horizontal&quot;,&quot;loop&quot;:true,&quot;autoplay&quot;:{&quot;pauseOnMouseEnter&quot;:true},&quot;autoHeight&quot;:true,&quot;effect&quot;:&quot;fade&quot;,&quot;fadeEffect&quot;:{&quot;crossFade&quot;:true}}">
<div class="swiper-wrapper">
<!-- Start: Mountain Training -->
<div class="swiper-slide d-flex justify-content-center center-everything">
<div class="tahdah-badge" data-candidateid="1466454"></div>
</div><!-- End: Mountain Training -->
<!-- Start: Canva Essentials -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-badge.webp?h=bc157efb7620e733f43b4b00981978ea"></a></div><!-- End: Canva Essentials -->
<!-- Start: Canva Essentials for Mobile -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials-mobile" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-for-mobile-badge.webp?h=93513f8f560a2e346c12aeb9fb0c18ec"></a></div><!-- End: Canva Essentials for Mobile -->
<!-- Start: Canva Graphic Design Essentials -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/graphic-design-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/graphic-design-essentials-badge.webp?h=f5406331e45433f0d8bd6b929f9d113b"></a></div><!-- End: Canva Graphic Design Essentials -->
<!-- Start: Marketing with Canva -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/marketing-with-canva" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/mr-a-davis-marketing-with-canva-badge.webp?h=f0b802da597c825b7e03378130d94aca"></a></div><!-- End: Marketing with Canva -->
<!-- Start: Canva for Work -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-for-work" target="_blank"><img class="img-fluid w-100 accreditation" width="2160" height="2160" src="../../assets/img/accreditations/mr-a-davis-canva-for-work-badge.webp?h=b3617633e9d2de429288704f75b304f4"></a></div><!-- End: Canva for Work -->
<!-- Start: Canva Teacher Essentials -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/teacher-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/teacher-essentials-badge.webp?h=d2d6f962e0b1bbebc68f987d6f156028"></a></div><!-- End: Canva Teacher Essentials -->
<!-- Start: Canva AI in the Classroom -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/ai-in-the-classroom" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/ai-in-the-classroom-badge.webp?h=769458ef2c323729c209855a3cde7312"></a></div><!-- End: Canva AI in the Classroom -->
<!-- Start: Adobe Creative Educator Level 1 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/3a49b473-4af9-4c5a-ab38-1c754f181c6e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Adobe Creative Educator Level 1&quot;" width="600" height="600" src="../../assets/img/accreditations/3_hours_adobe_creative_educator_level_1.webp?h=45de0c4e8984e885b1153e344e794beb"></a></div><!-- End: Adobe Creative Educator Level 1 -->
<!-- Start: Minecraft Education -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/53745c80-7d0a-4428-906a-839e905c139c/public_url" target="_blank"><img class="img-fluid w-100 accreditation" width="600" height="600" src="../../assets/img/accreditations/minecraft-education-ambassador.webp?h=5c614dffa9ab6d6fd77cd805b8397ffd"></a></div><!-- End: Minecraft Education -->
<!-- Start: MCE -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/9c9dd6cd-2703-4539-adc9-366069cbc3a9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MCE: Microsoft Certified Educator&quot;" width="352" height="352" src="../../assets/img/accreditations/mce_microsoft_certified_educator.webp?h=3e67f154a356cd1ef15c31b0fb42c0c4"></a></div><!-- End: MCE -->
<!-- Start: MIEE 2023-2024 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/b5ac17a1-0914-496f-9d85-9608966259ee/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Innovative Educator Expert 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2023_2024.webp?h=ee882aefba64b3e5b8ea9554eeea3847"></a></div><!-- End: MIEE 2023-2024 -->
<!-- Start: MIEE 2024-2025 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/ad92a7cb-3e4f-46e2-8e73-99dffd0eb69e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Innovative Educator Expert 2024-2025&quot;" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2024_2025.webp?h=a0b5cb2a639caf0351a977146375667e"></a></div><!-- End: MIEE 2024-2025 -->
<!-- Start: Pearson OSA Expert -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/44756f05-e727-41c8-a352-a656c033c9f0/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Onscreen Assessment Expert GCSE Computer Science&quot;" width="800" height="800" src="../../assets/img/accreditations/pearson_onscreen_assessment_expert.webp?h=d4e00ea5bfad5a66c619238d7cbdd8db"></a></div><!-- End: Pearson OSA Expert -->
<!-- Start: STEM 21-22 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/52121ef6-0760-4870-91cc-1cb20001238b/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Establishing a STEM club - from creation to careers 2021/2022&quot;" width="1200" height="1200" src="../../assets/img/accreditations/establishing_a_stem_club_from_creation_to_careers_2021_2022.webp?h=7f96a591bd4fb09f86da96af8a8a41ef"></a></div><!-- End: STEM 21-22 -->
<!-- Start: NCCE Secondary 21-22 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/60d50339-2dda-4991-90b5-7ff087975746/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Secondary Computer Science - Professional Development 2021-2022&quot;" width="1200" height="1200" src="../../assets/img/accreditations/secondary_computer_science_professional_development_2021_2022.webp?h=813dd91393f904969bc3bf184007c8c2"></a></div><!-- End: NCCE Secondary 21-22 -->
<!-- Start: NCCE Secondary 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/e74f9011-4006-4570-824a-f483fdcb5b26/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Secondary Computing - Professional Development 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/secondary_computing_professional_development_2023_2.webp?h=77ebf2880eb7d342016b83e098d92d23"></a></div><!-- End: NCCE Secondary 23-24 -->
<!-- Start: NCCE GCSE Computer Science 19-20 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/c73720d2-8208-4e2b-a1e5-c473961834d9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; GCSE Computer Science: Professional Development 2019-2020&quot;" width="1200" height="1200" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2019_2020.webp?h=fef2cee3326aeff9e2f65e86cf5e4fee"></a></div><!-- End: NCCE GCSE Computer Science 19-20 -->
<!-- Start: NCCE GCSE Computer Science 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/c486279a-8e97-4779-90c1-56f09622e782/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; GCSE Computer Science - Professional Development 2022-2023&quot;" width="2000" height="2000" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2022_2023.webp?h=0a54c55717b61c0a0b4ed80582d7bfae"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
<!-- Start: NCCE GCSE Computer Science 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/e76ed57f-2270-47f5-8e7e-4136baa261f3/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; GCSE Computer Science - Professional Development 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2023.webp?h=71b8c59772af539946fb49a210b05758"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
<!-- Start: NCCE A Level Computer Science 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/418cfb22-3e37-4b24-b527-652b1ab6ea76/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; A-Level Computer Science - Professional Development 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/a_level_computer_science_professional_development.webp?h=a9cc6f73abdf82ab49e5f8a8695cb557"></a></div><!-- End: NCCE A Level Computer Science 23-24 -->
<!-- Start: MOS Master -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/0e46d6b8-1a1b-4d16-a5d5-3b95661fb290/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Master 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_master_2013.webp?h=70d957a5307d38f46b84b6462439afbc"></a></div><!-- End: MOS Master -->
<!-- Start: MOS Word Expert -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/287d0ca4-bea1-4e18-b9e7-21f6a5d5d571/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Word 2013 Expert&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013_expert.webp?h=5bd4ec8c82587201172a8b8e460ff4e6"></a></div><!-- End: MOS Word Expert -->
<!-- Start: MOS Word -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/f1831f0e-776b-49aa-8a8d-05817d4b1410/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Word 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013.webp?h=2b90c5590b7b50f1891a9116fa38ac36"></a></div><!-- End: MOS Word -->
<!-- Start: MOS Excel -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/2ab55353-3267-46cc-b3f4-3099af54d869/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Excel 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_excel_2013.webp?h=f016925633d0a52b862259a05b396b6a"></a></div><!-- End: MOS Excel -->
<!-- Start: MOS PowerPoint -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/11162aa2-331a-4ec4-a612-665f3bc59cb1/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: PowerPoint 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_powerpoint_2013.webp?h=26de9623c491661347998549e10d4353"></a></div><!-- End: MOS PowerPoint -->
<!-- Start: MOS OneNote -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/cd328b1d-27b6-4410-be70-0792a99b72ea/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: OneNote 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_onenote_2013.webp?h=2ffe41c2a6e37d602469f8158ef13d79"></a></div><!-- End: MOS OneNote -->
<!-- Start: MTA Security -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/da3b3b4c-cec4-4537-bb5b-486ce9ee6ee7/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MTA: Security Fundamentals - Certified 2016&quot;" width="352" height="352" src="../../assets/img/accreditations/mta_security_fundamentals_certified_2016.webp?h=0df619419a5b6d0eb694dc9363870b20"></a></div><!-- End: MTA Security -->
<!-- Start: MTA Networking -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/23194bfe-30e4-4f8e-b9ec-338d060136dd/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MTA: Networking Fundamentals - Certified 2016&quot;" width="352" height="352" src="../../assets/img/accreditations/mta_networking_fundamentals_certified_2016.webp?h=cdc4618c5e86d11aa304cae14c3942bc"></a></div><!-- End: MTA Networking -->
<!-- Start: MTA Windows OS -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/f0f27d87-424b-49e8-a444-95086d640e66/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MTA: Windows Operating System Fundamentals - Certified 2016&quot;" width="352" height="352" src="../../assets/img/accreditations/mta_windows_operating_system_fundamentals_certified_2016.webp?h=44a6360480ef67ced301c697d31f9fa5"></a></div><!-- End: MTA Windows OS -->
</div>
</div>
<div class="swiper-nav-standalone d-flex justify-content-center accreditations-navigation" data-bss-swiper-target="#light-swiper">
<div class="swiper-button-prev"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-left">
<path fill-rule="evenodd" d="M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8"></path>
</svg></button></div>
<div class="swiper-button-next"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-right">
<path fill-rule="evenodd" d="M1 8a.5.5 0 0 1 .5-.5h11.793l-3.147-3.146a.5.5 0 0 1 .708-.708l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 0 1-.708-.708L13.293 8.5H1.5A.5.5 0 0 1 1 8"></path>
</svg></button></div>
</div>
</div><!-- End: Accreditations -->
<!-- Start: Spacer -->
<div class="col-md-3 text-center text-lg-start d-flex flex-column"><a class="d-flex w-100 justify-content-center center-everything" href="https://client.brixly.uk/aff.php?aff=837" target="_blank"><img class="img-fluid object-fit-contain w-50" src="https://brixly.uk/wp-content/uploads/2022/06/Artboard-32.jpg"></a></div><!-- End: Spacer -->
<div class="col-md-3 text-center text-lg-start d-flex flex-column align-items-center order-first align-items-lg-start order-lg-last">
<div class="fw-bold d-flex align-items-center mb-2"><img alt="Stylised orange microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501" width="50" height="50" class="footer-logo"><span>Mr A Lyall</span></div>
<p>IT professional and Head of Computing in the West Midlands</p>
</div>
</div>
<hr>
<div class="d-flex justify-content-between align-items-center pt-3">
<p class="mb-0 footer-copyright">Copyright © 2025 ADCM Networks</p>
<ul class="list-inline mb-0">
<!-- Start: Mastodon -->
<li class="list-inline-item"><a rel="me" href="https://mstdn.social/@MrDavisCSIT"><svg class="text-body" xmlns="http://www.w3.org/2000/svg" viewBox="-32 0 512 512" width="1em" height="1em" fill="currentColor">
<!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. -->
<path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"></path>
</svg></a></li><!-- End: Mastodon -->
<!-- Start: Bluesky -->
<li class="list-inline-item"><a href="https://bsky.app/profile/adcmnetworks.co.uk"><i class="fa-brands fa-square-bluesky"></i></a></li><!-- End: Bluesky -->
<!-- Start: LinkedIn -->
<li class="list-inline-item"><a href="https://www.linkedin.com/in/MrDavisCSIT/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-linkedin text-body">
<path d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854V1.146zm4.943 12.248V6.169H2.542v7.225h2.401m-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248-.822 0-1.359.54-1.359 1.248 0 .694.521 1.248 1.327 1.248h.016zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016a5.54 5.54 0 0 1 .016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225h2.4"></path>
</svg></a></li><!-- End: LinkedIn -->
<!-- Start: GitHub -->
<li class="list-inline-item"><a href="https://github.com/MrDavisCSIT"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-github text-body">
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8"></path>
</svg></a></li><!-- End: GitHub -->
<!-- Start: Reddit -->
<li class="list-inline-item"><a href="https://www.reddit.com/user/AlexanderEDavis95/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-reddit text-body">
<path d="M6.167 8a.831.831 0 0 0-.83.83c0 .459.372.84.83.831a.831.831 0 0 0 0-1.661m1.843 3.647c.315 0 1.403-.038 1.976-.611a.232.232 0 0 0 0-.306.213.213 0 0 0-.306 0c-.353.363-1.126.487-1.67.487-.545 0-1.308-.124-1.671-.487a.213.213 0 0 0-.306 0 .213.213 0 0 0 0 .306c.564.563 1.652.61 1.977.61zm.992-2.807c0 .458.373.83.831.83.458 0 .83-.381.83-.83a.831.831 0 0 0-1.66 0z"></path>
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-3.828-1.165c-.315 0-.602.124-.812.325-.801-.573-1.9-.945-3.121-.993l.534-2.501 1.738.372a.83.83 0 1 0 .83-.869.83.83 0 0 0-.744.468l-1.938-.41a.203.203 0 0 0-.153.028.186.186 0 0 0-.086.134l-.592 2.788c-1.24.038-2.358.41-3.17.992-.21-.2-.496-.324-.81-.324a1.163 1.163 0 0 0-.478 2.224c-.02.115-.029.23-.029.353 0 1.795 2.091 3.256 4.669 3.256 2.577 0 4.668-1.451 4.668-3.256 0-.114-.01-.238-.029-.353.401-.181.688-.592.688-1.069 0-.65-.525-1.165-1.165-1.165z"></path>
</svg></a></li><!-- End: Reddit -->
<!-- Start: YouTube -->
<li class="list-inline-item"><a href="https://www.youtube.com/channel/UCgDhiQMLbTemv2varDiW2rA"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-youtube text-body">
<path d="M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.007 2.007 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.007 2.007 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31.4 31.4 0 0 1 0 7.68v-.123c.002-.215.01-.958.064-1.778l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.007 2.007 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A99.788 99.788 0 0 1 7.858 2h.193zM6.4 5.209v4.818l4.157-2.408z"></path>
</svg></a></li><!-- End: YouTube -->
</ul>
</div>
</div>
</footer><!-- End: Footer Multi Column -->
<script>
(function() {
let collections = document.querySelectorAll('[data-bss-type="blog-loop"]');
let tagNavs = document.querySelectorAll('[data-bss-type="tag-nav"]');
let tagLoops = document.querySelectorAll('[data-bss-type="tag-loop"]');
let authorLoops = document.querySelectorAll('[data-bss-type="author-loop"]');
let authorNavs = document.querySelectorAll('[data-bss-type="author-nav"]');
window.addEventListener("popstate", (e) => {
for (let collection of collections) {
updateCollection(collection);
}
for (let tagNav of tagNavs) {
updateTagNav(tagNav);
}
for (let authorNav of authorNavs) {
updateAuthorNav(authorNav);
}
});
for (let collection of collections) {
updateCollection(collection);
if (!canPaginateCollection(collection)) continue;
let pagination = collection.querySelector('[data-bss-type="blog-loop-pagination"]');
pagination.addEventListener('click', function(e) {
let paginationItem = e.target.closest('.page-item');
if (!paginationItem) return;
e.preventDefault();
if (paginationItem.classList.contains('disabled') || paginationItem.classList.contains('active')) return;
let collection = paginationItem.closest('[data-bss-type="blog-loop"]');
if (!collection) return;
let page = parseInt(paginationItem.dataset.page);
if (!page) return;
let pageParam = getPageParameter(collection);
if (pageParam) {
const url = new URL(window.location);
url.searchParams.set(pageParam, page);
history.pushState({
[pageParam]: page
}, document.title, url);
for (let c of collections) {
let param = getPageParameter(c);
if (param !== pageParam) continue;
updateCollection(c);
}
} else {
updateCollection(collection, page);
}
});
}
for (let tagNav of tagNavs) {
updateTagNav(tagNav);
tagNav.addEventListener('click', onTagClick);
}
for (let tagLoop of tagLoops) {
tagLoop.addEventListener('click', onTagClick);
}
for (let authorLoop of authorLoops) {
authorLoop.addEventListener('click', onAuthorClick);
}
for (let authorNav of authorNavs) {
updateAuthorNav(authorNav);
}
function onTagClick(e) {
onBlogFilterClick(e);
for (let nav of tagNavs) {
updateTagNav(nav);
}
}
function onAuthorClick(e) {
onBlogFilterClick(e);
for (let authorNav of authorNavs) {
updateAuthorNav(authorNav);
}
}
function onBlogFilterClick(e) {
const item = e.target.closest('[data-bss-filter="blog"]');
if (!item || !item.dataset.hasOwnProperty('bssHref') || !item.dataset.hasOwnProperty('bssFilterParam')) return;
const stateNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
if (stateNode && (stateNode.classList.contains('disabled') || stateNode.classList.contains('active'))) {
e.preventDefault();
return;
}
const link = item.dataset.bssHref;
if (!linksToCurrentPage(link)) return;
e.preventDefault();
const url = new URL(window.location);
const filterParam = item.dataset.bssFilterParam;
const filterValue = item.dataset.bssFilterValue || '';
const collectionsToUpdate = [];
const newQueryParams = {
[filterParam]: filterValue
};
for (let c of collections) {
if (!canFilterCollection(c)) continue;
collectionsToUpdate.push(c);
let pageParam = getPageParameter(c);
let page = url.searchParams.get(pageParam);
if (page === null || page == 1) continue;
newQueryParams[pageParam] = 1;
}
for (let param in newQueryParams) {
if (newQueryParams[param]) {
url.searchParams.set(param, newQueryParams[param]);
} else {
url.searchParams.delete(param);
}
}
history.pushState(newQueryParams, document.title, url);
for (let c of collectionsToUpdate) {
updateCollection(c);
}
}
function getCollectionFilters(collection) {
let filters = [];
try {
const parsed = JSON.parse(collection.dataset.bssFilters);
if (Array.isArray(parsed)) {
filters = parsed;
}
} catch (e) {}
return filters;
}
function getCollectionEmptyFilterAction(collection, filter = '') {
let emptyFilterActions = [];
try {
const parsed = JSON.parse(collection.dataset.bssEmptyFilterActions);
if (Array.isArray(parsed)) {
emptyFilterActions = parsed;
}
} catch (e) {}
const action = emptyFilterActions.find(action => action.filter === filter);
return action ? action.value : '';
}
function canFilterCollection(collection) {
return !!getCollectionFilters(collection).length;
}
function canFilterCollectionByTag(collection) {
return getCollectionFilters(collection).includes('tag');
}
function canFilterCollectionByAuthor(collection) {
return getCollectionFilters(collection).includes('author');
}
function shouldShowAllItemsForEmptyFilter(collection, filter = '') {
return getCollectionEmptyFilterAction(collection, filter) === 'show-all';
}
function canPaginateCollection(collection) {
return !!getCollectionPagination(collection);
}
function getCollectionPagination(collection) {
return collection.querySelector('[data-bss-type="blog-loop-pagination"]');
}
function getPageParameter(collection) {
return collection.dataset.bssPageParam;
}
function linksToCurrentPage(path = '') {
let currentURL, url;
try {
currentURL = new URL(window.location);
url = new URL(path, window.location.href);
} catch (e) {
console.error(e);
}
return currentURL.origin === url.origin && currentURL.pathname === url.pathname;
}
function updateCollection(collection, page, activeTag = '', activeAuthor = '') {
const url = new URL(window.location.href);
if (canPaginateCollection(collection)) {
if (!page) {
let pageParam = getPageParameter(collection);
page = (pageParam ? url.searchParams.get(pageParam) : 1) || 1;
}
}
if (canFilterCollectionByTag(collection) && !activeTag) {
let tagParam = 'tag';
activeTag = url.searchParams.get(tagParam) || '';
}
if (canFilterCollectionByAuthor(collection) && !activeAuthor) {
let authorParam = 'author';
activeAuthor = url.searchParams.get(authorParam) || '';
}
renderCollectionPage(collection, page, activeTag, activeAuthor);
}
function renderCollectionPage(collection, page = 1, activeTag = '', activeAuthor = '') {
page = Math.max(parseInt(page, 10), 1);
collection.style.removeProperty('display');
let loopBase = collection.querySelector('[data-bss-type="blog-loop-base"]');
loopBase && loopBase.style.removeProperty('display');
let emptyState = collection.querySelector('[data-bss-type="empty-state"]');
emptyState && emptyState.style.setProperty('display', 'none', 'important');
let listItems = [].slice.call(collection.querySelectorAll('[data-bss-type="blog-loop-item"]'));
listItems.forEach(item => item.style.setProperty('display', 'none', 'important'));
if (canFilterCollectionByTag(collection)) {
listItems = listItems.filter(item => activeTag ? item.classList.contains('post-tag-' + activeTag) : shouldShowAllItemsForEmptyFilter(collection, 'tag'));
}
if (canFilterCollectionByAuthor(collection)) {
listItems = listItems.filter(item => activeAuthor ? item.classList.contains('post-author-' + activeAuthor) : shouldShowAllItemsForEmptyFilter(collection, 'author'));
}
let perPage = collection.dataset.bssPerpage || listItems.length;
let visibleListItems = listItems.slice((page - 1) * perPage, page * perPage);
visibleListItems.forEach(item => item.style.removeProperty('display'));
let isEmpty = !visibleListItems.length;
if (isEmpty) {
loopBase && loopBase.style.setProperty('display', 'none', 'important');
emptyState && emptyState.style.removeProperty('display');
}
let itemCount = listItems.length;
let pageCount = Math.max(Math.ceil(itemCount / perPage), 1);
updateCollectionPagination(collection, page, pageCount, isEmpty);
if (collection.dataset.bssScrollOnChange) {
scrollToCollectionTop(collection);
}
}
function updateCollectionPagination(collection, page, pageCount, isEmpty) {
let pagination = getCollectionPagination(collection);
if (!pagination) return;
let paginationItems = [].slice.call(pagination.querySelectorAll('.page-item'));
if (pageCount === 1 || isEmpty) {
pagination.style.setProperty('display', 'none', 'important');
} else {
pagination.style.removeProperty('display');
}
let previousBtnDisabled = page - 1 <= 0;
let previousPage = previousBtnDisabled ? 1 : page - 1;
let nextBtnDisabled = page + 1 > pageCount;
let nextPage = nextBtnDisabled ? pageCount : page + 1;
for (let i = 0; i < paginationItems.length; i++) {
let paginationItem = paginationItems[i];
paginationItem.classList.remove('active', 'disabled');
if (paginationItem.dataset.type === 'prev') {
paginationItem.dataset.page = previousPage;
if (previousBtnDisabled) {
paginationItem.classList.add('disabled');
}
} else if (paginationItem.dataset.type === 'next') {
paginationItem.dataset.page = nextPage;
if (nextBtnDisabled) {
paginationItem.classList.add('disabled');
}
} else {
if (paginationItem.dataset.page > pageCount) {
paginationItem.style.setProperty('display', 'none', 'important');
} else {
paginationItem.style.removeProperty('display');
}
if (paginationItem.dataset.page == page) {
paginationItem.classList.add('active');
}
}
}
}
function scrollToCollectionTop(collection) {
const rect = collection.getBoundingClientRect();
const viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);
const threshold = 100;
if (rect.top >= 0 && viewHeight - rect.top > threshold) return;
setTimeout(() => {
collection.scrollIntoView({
behavior: "smooth",
block: "start",
inline: "start"
});
}, 0);
}
function updateTagNav(tagNav) {
const url = new URL(window.location.href);
let tagParam = 'tag';
let tag = url.searchParams.get(tagParam) || '';
renderTagNav(tagNav, tag);
}
function renderTagNav(tagNav, activeTag = '') {
if (!tagNav.dataset.bssSyncUrl) return;
let navItems = [].slice.call(tagNav.querySelectorAll('[data-bss-type="tag-loop-item"]'));
navItems.forEach(item => {
const activeClassNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
if (!activeClassNode) return;
activeClassNode.classList.remove('active');
const link = item.dataset.bssHref;
if (!linksToCurrentPage(link) || activeClassNode.classList.contains('disabled')) return;
if (item.dataset.bssTag === activeTag) {
activeClassNode.classList.add('active');
}
});
}
function updateAuthorNav(authorNav) {
const url = new URL(window.location.href);
let authorParam = 'author';
let author = url.searchParams.get(authorParam) || '';
renderAuthorNav(authorNav, author);
}
function renderAuthorNav(authorNav, activeAuthor = '') {
if (!canFilterCollectionByAuthor(authorNav)) return;
authorNav.style.removeProperty('display');
let items = [].slice.call(authorNav.querySelectorAll('[data-bss-type="author-loop-item"]'));
items.forEach(item => item.classList.contains('author-' + activeAuthor) ? item.style.removeProperty('display') : item.style.setProperty('display', 'none', 'important'));
}
})();
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
<script src="../../assets/js/bs-init.js?h=7c6b4c49b8ac0f383799ccb3d5def770"></script>
<script src="../../assets/js/Carousel---Slider-With-Animation-slider_with_animation.js?h=948f8788fd189b5cc9df01ff4fce4152"></script>
<script src="../../assets/js/CookieConsentComponent-cookieconsent.js?h=83fbb3192473604d72b00a854c6de4fd"></script>
<script src="https://kit.fontawesome.com/8970d94f9b.js"></script>
<script src="../../assets/js/pikaday.min.js?h=039feef26d52ebc5f1260a47208bfa38"></script>
<script src="../../assets/js/text-carousel.js?h=992f402828c7806b1f3bb7f29232e972"></script>
<script src="../../assets/js/theme.js?h=aeddb9c3ce5d77b8278c91c07acf30ad"></script>
</body>
</html>

View File

@@ -0,0 +1,794 @@
<!DOCTYPE html>
<html data-bs-theme="auto" lang="en-gb">
<head>
<meta charset="utf-8">
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//analytics.adcmnetworks.co.uk/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
<script src="https://kit.fontawesome.com/8970d94f9b.js" crossorigin="anonymous"></script>
<meta name="fediverse:creator" content="@MrDavisCSIT@mstdn.social">
<script src="https://cms.tahdah.me/scripts/publicbadge.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
<title>Society+</title>
<link rel="canonical" href="https://www.mrlyall.uk/my-work/extracurricular-projects/societyplus.html">
<meta property="og:url" content="https://www.mrlyall.uk/my-work/extracurricular-projects/societyplus.html">
<meta name="twitter:description" content="The website of Mr. A. Lyall, featuring a portfolio of work in computing education, digital projects, and curriculum resources. Explore blog posts, classroom tools, and professional insights focused on innovation, inclusion, and effective IT teaching.">
<meta name="twitter:card" content="summary">
<meta property="og:type" content="website">
<meta name="twitter:title" content="Mr Lyall">
<meta property="og:image" content="https://www.mrlyall.uk/assets/img/projects/extracurricular/society+/societypluspreview.webp">
<meta name="description" content="Platform for societies to manage sign-ups, send texts, and update info using PHP, SQL, and Nexmo API">
<script>
(function() {
// JavaScript snippet handling Dark/Light mode switching
const getStoredTheme = () => localStorage.getItem('theme');
const setStoredTheme = theme => localStorage.setItem('theme', theme);
const forcedTheme = document.documentElement.getAttribute('data-bss-forced-theme');
const getPreferredTheme = () => {
if (forcedTheme) return forcedTheme;
const storedTheme = getStoredTheme();
if (storedTheme) {
return storedTheme;
}
const pageTheme = document.documentElement.getAttribute('data-bs-theme');
if (pageTheme) {
return pageTheme;
}
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
}
const setTheme = theme => {
if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.documentElement.setAttribute('data-bs-theme', 'dark');
} else {
document.documentElement.setAttribute('data-bs-theme', theme);
}
}
setTheme(getPreferredTheme());
const showActiveTheme = (theme, focus = false) => {
const themeSwitchers = [].slice.call(document.querySelectorAll('.theme-switcher'));
if (!themeSwitchers.length) return;
document.querySelectorAll('[data-bs-theme-value]').forEach(element => {
element.classList.remove('active');
element.setAttribute('aria-pressed', 'false');
});
for (const themeSwitcher of themeSwitchers) {
const btnToActivate = themeSwitcher.querySelector('[data-bs-theme-value="' + theme + '"]');
if (btnToActivate) {
btnToActivate.classList.add('active');
btnToActivate.setAttribute('aria-pressed', 'true');
}
}
}
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
const storedTheme = getStoredTheme();
if (storedTheme !== 'light' && storedTheme !== 'dark') {
setTheme(getPreferredTheme());
}
});
window.addEventListener('DOMContentLoaded', () => {
showActiveTheme(getPreferredTheme());
document.querySelectorAll('[data-bs-theme-value]')
.forEach(toggle => {
toggle.addEventListener('click', (e) => {
e.preventDefault();
const theme = toggle.getAttribute('data-bs-theme-value');
setStoredTheme(theme);
setTheme(theme);
showActiveTheme(theme);
})
})
});
})();
</script>
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="stylesheet" href="../../assets/bootstrap/css/bootstrap.min.css?h=c9d969cca6f72ca8d4dfd457f2e8eff8">
<link rel="stylesheet" href="../../assets/css/Lato.css?h=69bc5b06794edd4ca9a38642d36c83d0">
<link rel="stylesheet" href="../../assets/css/bss-overrides.css?h=15b91a8988c8fc6448a8989802a159de">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css">
<link rel="stylesheet" href="../../assets/css/styles.css?h=7c67e1bb3df4cb41abaceaf312f03dfa">
<link rel="stylesheet" href="../../assets/css/pikaday.min.css?h=a9ab8ca627aa6e8f64b730ca9c2c781d">
<link rel="stylesheet" href="../../assets/css/CookieConsentComponent.css?h=39af3305e95f4d2a8883e97d7e0cdb14">
<link rel="stylesheet" href="../../assets/css/animations.compiled.css?h=49917e33fe831aa33e24fb1e8124fdd9">
<link rel="stylesheet" href="../../assets/css/Carousel---Slider-With-Animation.css?h=63f5768f05d2ae91446ac010bcd4844a">
</head>
<body>
<nav class="navbar navbar-expand-md fixed-top portfolio-navbar gradient navbar-dark">
<div class="container-fluid"><a class="navbar-brand logo" href="../../"><img alt="Stylised white microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" width="50" height="50" class="mobile-padding-left"></a><button data-bs-toggle="collapse" class="navbar-toggler" data-bs-target="#navbarNav" style="margin-right: 0.5em;"><span class="visually-hidden">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../">Home</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../about">About</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../projects">My Work</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../my-work/showreel">Showreel</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../blog">Blog</a></li>
</ul>
</div>
</div>
</nav>
<main class="page">
<section class="portfolio-block block-intro">
<div class="container center-everything">
<!-- Start: portfolio heading -->
<div class="align-content-center heading blog-heading societyplus-web">
<h2>Society+</h2>
<p>Platform for societies to manage sign-ups, send texts, and update info using PHP, SQL, and Nexmo API</p>
</div><!-- End: portfolio heading -->
</div>
</section>
<section class="portfolio-block project">
<div class="container center-everything">
<div class="swiper project-carousel" id="swiper-1" data-bss-swiper="{&quot;direction&quot;:&quot;horizontal&quot;,&quot;loop&quot;:true,&quot;autoplay&quot;:{&quot;pauseOnMouseEnter&quot;:true},&quot;autoHeight&quot;:true,&quot;keyboard&quot;:true,&quot;mousewheel&quot;:true,&quot;effect&quot;:&quot;creative&quot;,&quot;creativeEffect&quot;:{&quot;prev&quot;:{&quot;shadow&quot;:true,&quot;translate&quot;:[&quot;-20%&quot;,0,-1]},&quot;next&quot;:{&quot;translate&quot;:[&quot;100%&quot;,0,0]}},&quot;pagination&quot;:{&quot;el&quot;:&quot;.swiper-pagination&quot;,&quot;type&quot;:&quot;bullets&quot;,&quot;clickable&quot;:true,&quot;dynamicBullets&quot;:true},&quot;navigation&quot;:{&quot;nextEl&quot;:&quot;.swiper-button-next&quot;,&quot;prevEl&quot;:&quot;.swiper-button-prev&quot;}}">
<div class="swiper-wrapper">
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="A full screenshot of the Society+ Mental Health Awareness webpage for Birmingham City University. The top features the BCU Mental Health Awareness logo, with placeholder text &quot;Society Name&quot; and &quot;Society description&quot; to the right. Below is a blue section promoting membership for £3.00 with a button to add membership. The central panel contains a mission statement outlining the societys aim to raise awareness, tackle stigma, and support students with mental health needs. It lists the committee me" width="2500" height="2102" src="../../assets/img/projects/extracurricular/society+/societyplus.webp?h=f183bf3bed3a6ed37801dc17e4098750"></div>
</div>
<div>
<div class="swiper-button-prev swiper-control"></div>
<div class="swiper-button-next swiper-control"></div>
</div>
<div class="swiper-pagination swiper-control"></div>
</div>
<div class="row">
<div class="col info">
<h3>Inspiration</h3>
<p>Many students unions use a template for their websites which means that most of the time, these websites don't work. Society+ allows not only students to sign up to societies, but also allows the society's executive committee to manage membership, email and text society members and update information about the society.</p>
<h3>How We Built It</h3>
<p>Using our experience with HTML, CSS, PHP and MySQL, we worked within Atom to create the main interface and the online designs. We used an installation of PHPMyAdmin with a MySQL engine to create the database which would be linked to the website. We also used the Nexmo API to provide an SMS service for the website. This API uses PHP POSTs, curl scripts and JSON queries.</p>
<h3>Challenges We Ran Into</h3>
<p>We originally used the Twilio API for our SMS services, however due to issues with their documentation and credit concerns, we switched to Nexmo which provided us with a fully comprehensive SMS API service.</p>
<h3>Accomplishments That We're Proud Of</h3>
<p>The SMS sending page worked so well, I have started using the code for my own purposes.</p>
<h3>What We Learned</h3>
<p>Always read the API documentation beforehand!</p>
<h3>What's next for Society+?</h3>
<p>Continued development so we have a fully finished, working product that universities may take lead from.</p>
</div>
<div class="col-auto meta project-details">
<div class="tags"><span class="meta-heading">Hackathon</span><span>BrumHack 6.0</span><span class="meta-heading">Created &amp; Submitted</span><span>25-26 March 2017</span><span class="meta-heading">Products Created</span><span>Web Application</span><a class="btn btn-primary project-buttons" role="button" href="https://gitea.adcmnetworks.co.uk/Intelligence-Not-Found/BrumHack6.0-SocietyPlus" target="_blank">View Project on Gitea</a></div>
</div>
</div>
<div class="more-projects">
<h3 class="text-center more-projects-heading">More Projects</h3>
<div data-bss-type="blog-loop" data-bss-perpage="3" style="display: none !important;">
<div class="row gy-4 row-cols-1 row-cols-sm-2 row-cols-md-2 row-cols-lg-3 mt-0" data-bss-type="blog-loop-base">
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item">
<div class="card"><a href="citation-needed.html"><img class="img-fluid card-img-top rainbow-border" alt="Screenshot of login screen with fields for email and password." width="2500" height="1125" src="../../assets/img/projects/extracurricular/citation_needed/login_screen.webp?h=3626905284037118af731fe2573ac5f4"></a>
<div class="card-body"><a href="citation-needed.html">
<h4 class="text-body">Citation Needed</h4>
</a>
<p class="card-text">Creates BCU Harvard web citations; built to replace RefME, Cite This For Me, and other broken tools.</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item">
<div class="card"><a href="exam-buff-or-exam-bluff.html"><img class="img-fluid card-img-top rainbow-border" alt="Large red capital letter &quot;F&quot; inside a red circle on a transparent background." width="500" height="500" src="../../assets/img/projects/extracurricular/exam_buff_or_exam_bluff/exam_buff_or_exam_bluff_app_logo.webp?h=c5996308f0abaf2970a7fd4e8e1cdcbf"></a>
<div class="card-body"><a href="exam-buff-or-exam-bluff.html">
<h4 class="text-body">Exam Buff or Exam Bluff</h4>
</a>
<p class="card-text">Fast-paced CS quiz game for GCSE+ that tests code and theory using logic, speed, skill, and bluffing</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item">
<div class="card"><a href="i-am-aware.html"><img class="img-fluid card-img-top rainbow-border" alt="A collage of newspaper-style clippings with words like “Anxiety,” “Panic Attacks,” and “Depression,” with the phrase “I Am Aware” boldly overlaid in white text in the center of the image, framed by a thin white border." width="940" height="500" src="../../assets/img/projects/extracurricular/iamaware.webp?h=a3dcdbacf64839eb9dcfd0f9190b41fb"></a>
<div class="card-body"><a href="i-am-aware.html">
<h4 class="text-body">I Am Aware</h4>
</a>
<p class="card-text">BCU campaign exploring mental health resources and real stories of depression, anxiety, and bipolar.</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item" style="display: none !important;">
<div class="card"><a href="sortai.html"><img class="img-fluid card-img-top rainbow-border" alt="Terminal-style logo for Sort.AI. A green monospaced font reads [$~] sort on a black background, resembling a command-line interface." width="333" height="222" src="../../assets/img/projects/extracurricular/sort.ai/sort.ai_logo.webp?h=a198ffe5f200f284ee778dd6f7b1d741"></a>
<div class="card-body"><a href="sortai.html">
<h4 class="text-body">Sort.AI</h4>
</a>
<p class="card-text">AI file sorter using Google NLP in C#. Auto-categorises any file. Awarded 3rd place at BullHacks 1.0</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item" style="display: none !important;">
<div class="card"><a href="task-master-web.html"><img class="img-fluid card-img-top rainbow-border" alt="Preview image of the Task Master project homepage. It includes the same blue background and the main message “Welcome to BCU Hacks Task Master We Have No Idea What Were Doing!” without form fields." width="940" height="500" src="../../assets/img/projects/extracurricular/task_master/taskmasterpreview.webp?h=bece3f4d6e67029790c7b300d5db3393"></a>
<div class="card-body"><a href="task-master-web.html">
<h4 class="text-body">Task Master for Web</h4>
</a>
<p class="card-text">Business task manager with secure login, file upload area, MySQL. Awarded 3rd place at BrumHack 5.0.</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item" style="display: none !important;">
<div class="card"><a href="the-computers-identity.html"><img class="img-fluid card-img-top rainbow-border" alt="A cropped preview of “The Computers Identity” language selection webpage, showing a column of language buttons including English, Binary, Octal, ASCII, Hexadecimal, and Leet on a white background, with a blurred brown/grey gradient on the right." width="940" height="500" src="../../assets/img/projects/extracurricular/the_computers_identity/identitypreview.webp?h=8f3c2d53aaf46cff69c58a66abbe76f5"></a>
<div class="card-body"><a href="the-computers-identity.html">
<h4 class="text-body">The Computer's Identity</h4>
</a>
<p class="card-text">Interactive poem entry for BCU Christian Union art competition displayed in binary format &amp; QR code.</p>
</div>
</div>
</div>
</div>
<nav class="d-flex justify-content-center mt-3" data-bss-type="blog-loop-pagination">
<ul class="pagination">
<li class="page-item disabled" data-type="prev" data-page="1"><a class="page-link" aria-label="Previous" href="#"><span aria-hidden="true">«</span></a></li>
<li class="page-item active" data-type="regular" data-page="1"><a class="page-link" href="#">1</a></li>
<li class="page-item" data-type="regular" data-page="2"><a class="page-link" href="#">2</a></li>
<li class="page-item" data-type="next" data-page="2"><a class="page-link" aria-label="Next" href="#"><span aria-hidden="true">»</span></a></li>
</ul>
</nav>
</div>
</div>
</div>
</section>
</main><!-- Start: Footer Multi Column -->
<footer class="text-body bg-body" id="Light-Footer">
<div class="container py-4 py-lg-5 center-everything">
<div class="row justify-content-center">
<!-- Start: Accreditations -->
<div class="col-sm-3 col-md-6 text-center text-lg-start d-none d-sm-none d-md-none d-lg-flex flex-column">
<h3 class="fs-6 text-center text-body accreditations-title">Accreditations</h3>
<div class="swiper text-body w-100" id="light-swiper" data-bss-swiper="{&quot;direction&quot;:&quot;horizontal&quot;,&quot;loop&quot;:true,&quot;autoplay&quot;:{&quot;pauseOnMouseEnter&quot;:true},&quot;autoHeight&quot;:true,&quot;effect&quot;:&quot;fade&quot;,&quot;fadeEffect&quot;:{&quot;crossFade&quot;:true}}">
<div class="swiper-wrapper">
<!-- Start: Mountain Training -->
<div class="swiper-slide d-flex justify-content-center center-everything">
<div class="tahdah-badge" data-candidateid="1466454"></div>
</div><!-- End: Mountain Training -->
<!-- Start: Canva Essentials -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-badge.webp?h=bc157efb7620e733f43b4b00981978ea"></a></div><!-- End: Canva Essentials -->
<!-- Start: Canva Essentials for Mobile -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials-mobile" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-for-mobile-badge.webp?h=93513f8f560a2e346c12aeb9fb0c18ec"></a></div><!-- End: Canva Essentials for Mobile -->
<!-- Start: Canva Graphic Design Essentials -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/graphic-design-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/graphic-design-essentials-badge.webp?h=f5406331e45433f0d8bd6b929f9d113b"></a></div><!-- End: Canva Graphic Design Essentials -->
<!-- Start: Marketing with Canva -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/marketing-with-canva" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/mr-a-davis-marketing-with-canva-badge.webp?h=f0b802da597c825b7e03378130d94aca"></a></div><!-- End: Marketing with Canva -->
<!-- Start: Canva for Work -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-for-work" target="_blank"><img class="img-fluid w-100 accreditation" width="2160" height="2160" src="../../assets/img/accreditations/mr-a-davis-canva-for-work-badge.webp?h=b3617633e9d2de429288704f75b304f4"></a></div><!-- End: Canva for Work -->
<!-- Start: Canva Teacher Essentials -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/teacher-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/teacher-essentials-badge.webp?h=d2d6f962e0b1bbebc68f987d6f156028"></a></div><!-- End: Canva Teacher Essentials -->
<!-- Start: Canva AI in the Classroom -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/ai-in-the-classroom" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/ai-in-the-classroom-badge.webp?h=769458ef2c323729c209855a3cde7312"></a></div><!-- End: Canva AI in the Classroom -->
<!-- Start: Adobe Creative Educator Level 1 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/3a49b473-4af9-4c5a-ab38-1c754f181c6e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Adobe Creative Educator Level 1&quot;" width="600" height="600" src="../../assets/img/accreditations/3_hours_adobe_creative_educator_level_1.webp?h=45de0c4e8984e885b1153e344e794beb"></a></div><!-- End: Adobe Creative Educator Level 1 -->
<!-- Start: Minecraft Education -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/53745c80-7d0a-4428-906a-839e905c139c/public_url" target="_blank"><img class="img-fluid w-100 accreditation" width="600" height="600" src="../../assets/img/accreditations/minecraft-education-ambassador.webp?h=5c614dffa9ab6d6fd77cd805b8397ffd"></a></div><!-- End: Minecraft Education -->
<!-- Start: MCE -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/9c9dd6cd-2703-4539-adc9-366069cbc3a9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MCE: Microsoft Certified Educator&quot;" width="352" height="352" src="../../assets/img/accreditations/mce_microsoft_certified_educator.webp?h=3e67f154a356cd1ef15c31b0fb42c0c4"></a></div><!-- End: MCE -->
<!-- Start: MIEE 2023-2024 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/b5ac17a1-0914-496f-9d85-9608966259ee/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Innovative Educator Expert 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2023_2024.webp?h=ee882aefba64b3e5b8ea9554eeea3847"></a></div><!-- End: MIEE 2023-2024 -->
<!-- Start: MIEE 2024-2025 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/ad92a7cb-3e4f-46e2-8e73-99dffd0eb69e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Innovative Educator Expert 2024-2025&quot;" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2024_2025.webp?h=a0b5cb2a639caf0351a977146375667e"></a></div><!-- End: MIEE 2024-2025 -->
<!-- Start: Pearson OSA Expert -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/44756f05-e727-41c8-a352-a656c033c9f0/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Onscreen Assessment Expert GCSE Computer Science&quot;" width="800" height="800" src="../../assets/img/accreditations/pearson_onscreen_assessment_expert.webp?h=d4e00ea5bfad5a66c619238d7cbdd8db"></a></div><!-- End: Pearson OSA Expert -->
<!-- Start: STEM 21-22 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/52121ef6-0760-4870-91cc-1cb20001238b/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Establishing a STEM club - from creation to careers 2021/2022&quot;" width="1200" height="1200" src="../../assets/img/accreditations/establishing_a_stem_club_from_creation_to_careers_2021_2022.webp?h=7f96a591bd4fb09f86da96af8a8a41ef"></a></div><!-- End: STEM 21-22 -->
<!-- Start: NCCE Secondary 21-22 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/60d50339-2dda-4991-90b5-7ff087975746/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Secondary Computer Science - Professional Development 2021-2022&quot;" width="1200" height="1200" src="../../assets/img/accreditations/secondary_computer_science_professional_development_2021_2022.webp?h=813dd91393f904969bc3bf184007c8c2"></a></div><!-- End: NCCE Secondary 21-22 -->
<!-- Start: NCCE Secondary 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/e74f9011-4006-4570-824a-f483fdcb5b26/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Secondary Computing - Professional Development 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/secondary_computing_professional_development_2023_2.webp?h=77ebf2880eb7d342016b83e098d92d23"></a></div><!-- End: NCCE Secondary 23-24 -->
<!-- Start: NCCE GCSE Computer Science 19-20 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/c73720d2-8208-4e2b-a1e5-c473961834d9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; GCSE Computer Science: Professional Development 2019-2020&quot;" width="1200" height="1200" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2019_2020.webp?h=fef2cee3326aeff9e2f65e86cf5e4fee"></a></div><!-- End: NCCE GCSE Computer Science 19-20 -->
<!-- Start: NCCE GCSE Computer Science 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/c486279a-8e97-4779-90c1-56f09622e782/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; GCSE Computer Science - Professional Development 2022-2023&quot;" width="2000" height="2000" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2022_2023.webp?h=0a54c55717b61c0a0b4ed80582d7bfae"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
<!-- Start: NCCE GCSE Computer Science 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/e76ed57f-2270-47f5-8e7e-4136baa261f3/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; GCSE Computer Science - Professional Development 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2023.webp?h=71b8c59772af539946fb49a210b05758"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
<!-- Start: NCCE A Level Computer Science 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/418cfb22-3e37-4b24-b527-652b1ab6ea76/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; A-Level Computer Science - Professional Development 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/a_level_computer_science_professional_development.webp?h=a9cc6f73abdf82ab49e5f8a8695cb557"></a></div><!-- End: NCCE A Level Computer Science 23-24 -->
<!-- Start: MOS Master -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/0e46d6b8-1a1b-4d16-a5d5-3b95661fb290/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Master 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_master_2013.webp?h=70d957a5307d38f46b84b6462439afbc"></a></div><!-- End: MOS Master -->
<!-- Start: MOS Word Expert -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/287d0ca4-bea1-4e18-b9e7-21f6a5d5d571/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Word 2013 Expert&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013_expert.webp?h=5bd4ec8c82587201172a8b8e460ff4e6"></a></div><!-- End: MOS Word Expert -->
<!-- Start: MOS Word -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/f1831f0e-776b-49aa-8a8d-05817d4b1410/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Word 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013.webp?h=2b90c5590b7b50f1891a9116fa38ac36"></a></div><!-- End: MOS Word -->
<!-- Start: MOS Excel -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/2ab55353-3267-46cc-b3f4-3099af54d869/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Excel 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_excel_2013.webp?h=f016925633d0a52b862259a05b396b6a"></a></div><!-- End: MOS Excel -->
<!-- Start: MOS PowerPoint -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/11162aa2-331a-4ec4-a612-665f3bc59cb1/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: PowerPoint 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_powerpoint_2013.webp?h=26de9623c491661347998549e10d4353"></a></div><!-- End: MOS PowerPoint -->
<!-- Start: MOS OneNote -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/cd328b1d-27b6-4410-be70-0792a99b72ea/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: OneNote 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_onenote_2013.webp?h=2ffe41c2a6e37d602469f8158ef13d79"></a></div><!-- End: MOS OneNote -->
<!-- Start: MTA Security -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/da3b3b4c-cec4-4537-bb5b-486ce9ee6ee7/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MTA: Security Fundamentals - Certified 2016&quot;" width="352" height="352" src="../../assets/img/accreditations/mta_security_fundamentals_certified_2016.webp?h=0df619419a5b6d0eb694dc9363870b20"></a></div><!-- End: MTA Security -->
<!-- Start: MTA Networking -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/23194bfe-30e4-4f8e-b9ec-338d060136dd/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MTA: Networking Fundamentals - Certified 2016&quot;" width="352" height="352" src="../../assets/img/accreditations/mta_networking_fundamentals_certified_2016.webp?h=cdc4618c5e86d11aa304cae14c3942bc"></a></div><!-- End: MTA Networking -->
<!-- Start: MTA Windows OS -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/f0f27d87-424b-49e8-a444-95086d640e66/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MTA: Windows Operating System Fundamentals - Certified 2016&quot;" width="352" height="352" src="../../assets/img/accreditations/mta_windows_operating_system_fundamentals_certified_2016.webp?h=44a6360480ef67ced301c697d31f9fa5"></a></div><!-- End: MTA Windows OS -->
</div>
</div>
<div class="swiper-nav-standalone d-flex justify-content-center accreditations-navigation" data-bss-swiper-target="#light-swiper">
<div class="swiper-button-prev"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-left">
<path fill-rule="evenodd" d="M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8"></path>
</svg></button></div>
<div class="swiper-button-next"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-right">
<path fill-rule="evenodd" d="M1 8a.5.5 0 0 1 .5-.5h11.793l-3.147-3.146a.5.5 0 0 1 .708-.708l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 0 1-.708-.708L13.293 8.5H1.5A.5.5 0 0 1 1 8"></path>
</svg></button></div>
</div>
</div><!-- End: Accreditations -->
<!-- Start: Spacer -->
<div class="col-md-3 text-center text-lg-start d-flex flex-column"><a class="d-flex w-100 justify-content-center center-everything" href="https://client.brixly.uk/aff.php?aff=837" target="_blank"><img class="img-fluid object-fit-contain w-50" src="https://brixly.uk/wp-content/uploads/2022/06/Artboard-32.jpg"></a></div><!-- End: Spacer -->
<div class="col-md-3 text-center text-lg-start d-flex flex-column align-items-center order-first align-items-lg-start order-lg-last">
<div class="fw-bold d-flex align-items-center mb-2"><img alt="Stylised orange microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501" width="50" height="50" class="footer-logo"><span>Mr A Lyall</span></div>
<p>IT professional and Head of Computing in the West Midlands</p>
</div>
</div>
<hr>
<div class="d-flex justify-content-between align-items-center pt-3">
<p class="mb-0 footer-copyright">Copyright © 2025 ADCM Networks</p>
<ul class="list-inline mb-0">
<!-- Start: Mastodon -->
<li class="list-inline-item"><a rel="me" href="https://mstdn.social/@MrDavisCSIT"><svg class="text-body" xmlns="http://www.w3.org/2000/svg" viewBox="-32 0 512 512" width="1em" height="1em" fill="currentColor">
<!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. -->
<path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"></path>
</svg></a></li><!-- End: Mastodon -->
<!-- Start: Bluesky -->
<li class="list-inline-item"><a href="https://bsky.app/profile/adcmnetworks.co.uk"><i class="fa-brands fa-square-bluesky"></i></a></li><!-- End: Bluesky -->
<!-- Start: LinkedIn -->
<li class="list-inline-item"><a href="https://www.linkedin.com/in/MrDavisCSIT/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-linkedin text-body">
<path d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854V1.146zm4.943 12.248V6.169H2.542v7.225h2.401m-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248-.822 0-1.359.54-1.359 1.248 0 .694.521 1.248 1.327 1.248h.016zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016a5.54 5.54 0 0 1 .016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225h2.4"></path>
</svg></a></li><!-- End: LinkedIn -->
<!-- Start: GitHub -->
<li class="list-inline-item"><a href="https://github.com/MrDavisCSIT"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-github text-body">
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8"></path>
</svg></a></li><!-- End: GitHub -->
<!-- Start: Reddit -->
<li class="list-inline-item"><a href="https://www.reddit.com/user/AlexanderEDavis95/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-reddit text-body">
<path d="M6.167 8a.831.831 0 0 0-.83.83c0 .459.372.84.83.831a.831.831 0 0 0 0-1.661m1.843 3.647c.315 0 1.403-.038 1.976-.611a.232.232 0 0 0 0-.306.213.213 0 0 0-.306 0c-.353.363-1.126.487-1.67.487-.545 0-1.308-.124-1.671-.487a.213.213 0 0 0-.306 0 .213.213 0 0 0 0 .306c.564.563 1.652.61 1.977.61zm.992-2.807c0 .458.373.83.831.83.458 0 .83-.381.83-.83a.831.831 0 0 0-1.66 0z"></path>
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-3.828-1.165c-.315 0-.602.124-.812.325-.801-.573-1.9-.945-3.121-.993l.534-2.501 1.738.372a.83.83 0 1 0 .83-.869.83.83 0 0 0-.744.468l-1.938-.41a.203.203 0 0 0-.153.028.186.186 0 0 0-.086.134l-.592 2.788c-1.24.038-2.358.41-3.17.992-.21-.2-.496-.324-.81-.324a1.163 1.163 0 0 0-.478 2.224c-.02.115-.029.23-.029.353 0 1.795 2.091 3.256 4.669 3.256 2.577 0 4.668-1.451 4.668-3.256 0-.114-.01-.238-.029-.353.401-.181.688-.592.688-1.069 0-.65-.525-1.165-1.165-1.165z"></path>
</svg></a></li><!-- End: Reddit -->
<!-- Start: YouTube -->
<li class="list-inline-item"><a href="https://www.youtube.com/channel/UCgDhiQMLbTemv2varDiW2rA"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-youtube text-body">
<path d="M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.007 2.007 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.007 2.007 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31.4 31.4 0 0 1 0 7.68v-.123c.002-.215.01-.958.064-1.778l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.007 2.007 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A99.788 99.788 0 0 1 7.858 2h.193zM6.4 5.209v4.818l4.157-2.408z"></path>
</svg></a></li><!-- End: YouTube -->
</ul>
</div>
</div>
</footer><!-- End: Footer Multi Column -->
<script>
(function() {
let collections = document.querySelectorAll('[data-bss-type="blog-loop"]');
let tagNavs = document.querySelectorAll('[data-bss-type="tag-nav"]');
let tagLoops = document.querySelectorAll('[data-bss-type="tag-loop"]');
let authorLoops = document.querySelectorAll('[data-bss-type="author-loop"]');
let authorNavs = document.querySelectorAll('[data-bss-type="author-nav"]');
window.addEventListener("popstate", (e) => {
for (let collection of collections) {
updateCollection(collection);
}
for (let tagNav of tagNavs) {
updateTagNav(tagNav);
}
for (let authorNav of authorNavs) {
updateAuthorNav(authorNav);
}
});
for (let collection of collections) {
updateCollection(collection);
if (!canPaginateCollection(collection)) continue;
let pagination = collection.querySelector('[data-bss-type="blog-loop-pagination"]');
pagination.addEventListener('click', function(e) {
let paginationItem = e.target.closest('.page-item');
if (!paginationItem) return;
e.preventDefault();
if (paginationItem.classList.contains('disabled') || paginationItem.classList.contains('active')) return;
let collection = paginationItem.closest('[data-bss-type="blog-loop"]');
if (!collection) return;
let page = parseInt(paginationItem.dataset.page);
if (!page) return;
let pageParam = getPageParameter(collection);
if (pageParam) {
const url = new URL(window.location);
url.searchParams.set(pageParam, page);
history.pushState({
[pageParam]: page
}, document.title, url);
for (let c of collections) {
let param = getPageParameter(c);
if (param !== pageParam) continue;
updateCollection(c);
}
} else {
updateCollection(collection, page);
}
});
}
for (let tagNav of tagNavs) {
updateTagNav(tagNav);
tagNav.addEventListener('click', onTagClick);
}
for (let tagLoop of tagLoops) {
tagLoop.addEventListener('click', onTagClick);
}
for (let authorLoop of authorLoops) {
authorLoop.addEventListener('click', onAuthorClick);
}
for (let authorNav of authorNavs) {
updateAuthorNav(authorNav);
}
function onTagClick(e) {
onBlogFilterClick(e);
for (let nav of tagNavs) {
updateTagNav(nav);
}
}
function onAuthorClick(e) {
onBlogFilterClick(e);
for (let authorNav of authorNavs) {
updateAuthorNav(authorNav);
}
}
function onBlogFilterClick(e) {
const item = e.target.closest('[data-bss-filter="blog"]');
if (!item || !item.dataset.hasOwnProperty('bssHref') || !item.dataset.hasOwnProperty('bssFilterParam')) return;
const stateNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
if (stateNode && (stateNode.classList.contains('disabled') || stateNode.classList.contains('active'))) {
e.preventDefault();
return;
}
const link = item.dataset.bssHref;
if (!linksToCurrentPage(link)) return;
e.preventDefault();
const url = new URL(window.location);
const filterParam = item.dataset.bssFilterParam;
const filterValue = item.dataset.bssFilterValue || '';
const collectionsToUpdate = [];
const newQueryParams = {
[filterParam]: filterValue
};
for (let c of collections) {
if (!canFilterCollection(c)) continue;
collectionsToUpdate.push(c);
let pageParam = getPageParameter(c);
let page = url.searchParams.get(pageParam);
if (page === null || page == 1) continue;
newQueryParams[pageParam] = 1;
}
for (let param in newQueryParams) {
if (newQueryParams[param]) {
url.searchParams.set(param, newQueryParams[param]);
} else {
url.searchParams.delete(param);
}
}
history.pushState(newQueryParams, document.title, url);
for (let c of collectionsToUpdate) {
updateCollection(c);
}
}
function getCollectionFilters(collection) {
let filters = [];
try {
const parsed = JSON.parse(collection.dataset.bssFilters);
if (Array.isArray(parsed)) {
filters = parsed;
}
} catch (e) {}
return filters;
}
function getCollectionEmptyFilterAction(collection, filter = '') {
let emptyFilterActions = [];
try {
const parsed = JSON.parse(collection.dataset.bssEmptyFilterActions);
if (Array.isArray(parsed)) {
emptyFilterActions = parsed;
}
} catch (e) {}
const action = emptyFilterActions.find(action => action.filter === filter);
return action ? action.value : '';
}
function canFilterCollection(collection) {
return !!getCollectionFilters(collection).length;
}
function canFilterCollectionByTag(collection) {
return getCollectionFilters(collection).includes('tag');
}
function canFilterCollectionByAuthor(collection) {
return getCollectionFilters(collection).includes('author');
}
function shouldShowAllItemsForEmptyFilter(collection, filter = '') {
return getCollectionEmptyFilterAction(collection, filter) === 'show-all';
}
function canPaginateCollection(collection) {
return !!getCollectionPagination(collection);
}
function getCollectionPagination(collection) {
return collection.querySelector('[data-bss-type="blog-loop-pagination"]');
}
function getPageParameter(collection) {
return collection.dataset.bssPageParam;
}
function linksToCurrentPage(path = '') {
let currentURL, url;
try {
currentURL = new URL(window.location);
url = new URL(path, window.location.href);
} catch (e) {
console.error(e);
}
return currentURL.origin === url.origin && currentURL.pathname === url.pathname;
}
function updateCollection(collection, page, activeTag = '', activeAuthor = '') {
const url = new URL(window.location.href);
if (canPaginateCollection(collection)) {
if (!page) {
let pageParam = getPageParameter(collection);
page = (pageParam ? url.searchParams.get(pageParam) : 1) || 1;
}
}
if (canFilterCollectionByTag(collection) && !activeTag) {
let tagParam = 'tag';
activeTag = url.searchParams.get(tagParam) || '';
}
if (canFilterCollectionByAuthor(collection) && !activeAuthor) {
let authorParam = 'author';
activeAuthor = url.searchParams.get(authorParam) || '';
}
renderCollectionPage(collection, page, activeTag, activeAuthor);
}
function renderCollectionPage(collection, page = 1, activeTag = '', activeAuthor = '') {
page = Math.max(parseInt(page, 10), 1);
collection.style.removeProperty('display');
let loopBase = collection.querySelector('[data-bss-type="blog-loop-base"]');
loopBase && loopBase.style.removeProperty('display');
let emptyState = collection.querySelector('[data-bss-type="empty-state"]');
emptyState && emptyState.style.setProperty('display', 'none', 'important');
let listItems = [].slice.call(collection.querySelectorAll('[data-bss-type="blog-loop-item"]'));
listItems.forEach(item => item.style.setProperty('display', 'none', 'important'));
if (canFilterCollectionByTag(collection)) {
listItems = listItems.filter(item => activeTag ? item.classList.contains('post-tag-' + activeTag) : shouldShowAllItemsForEmptyFilter(collection, 'tag'));
}
if (canFilterCollectionByAuthor(collection)) {
listItems = listItems.filter(item => activeAuthor ? item.classList.contains('post-author-' + activeAuthor) : shouldShowAllItemsForEmptyFilter(collection, 'author'));
}
let perPage = collection.dataset.bssPerpage || listItems.length;
let visibleListItems = listItems.slice((page - 1) * perPage, page * perPage);
visibleListItems.forEach(item => item.style.removeProperty('display'));
let isEmpty = !visibleListItems.length;
if (isEmpty) {
loopBase && loopBase.style.setProperty('display', 'none', 'important');
emptyState && emptyState.style.removeProperty('display');
}
let itemCount = listItems.length;
let pageCount = Math.max(Math.ceil(itemCount / perPage), 1);
updateCollectionPagination(collection, page, pageCount, isEmpty);
if (collection.dataset.bssScrollOnChange) {
scrollToCollectionTop(collection);
}
}
function updateCollectionPagination(collection, page, pageCount, isEmpty) {
let pagination = getCollectionPagination(collection);
if (!pagination) return;
let paginationItems = [].slice.call(pagination.querySelectorAll('.page-item'));
if (pageCount === 1 || isEmpty) {
pagination.style.setProperty('display', 'none', 'important');
} else {
pagination.style.removeProperty('display');
}
let previousBtnDisabled = page - 1 <= 0;
let previousPage = previousBtnDisabled ? 1 : page - 1;
let nextBtnDisabled = page + 1 > pageCount;
let nextPage = nextBtnDisabled ? pageCount : page + 1;
for (let i = 0; i < paginationItems.length; i++) {
let paginationItem = paginationItems[i];
paginationItem.classList.remove('active', 'disabled');
if (paginationItem.dataset.type === 'prev') {
paginationItem.dataset.page = previousPage;
if (previousBtnDisabled) {
paginationItem.classList.add('disabled');
}
} else if (paginationItem.dataset.type === 'next') {
paginationItem.dataset.page = nextPage;
if (nextBtnDisabled) {
paginationItem.classList.add('disabled');
}
} else {
if (paginationItem.dataset.page > pageCount) {
paginationItem.style.setProperty('display', 'none', 'important');
} else {
paginationItem.style.removeProperty('display');
}
if (paginationItem.dataset.page == page) {
paginationItem.classList.add('active');
}
}
}
}
function scrollToCollectionTop(collection) {
const rect = collection.getBoundingClientRect();
const viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);
const threshold = 100;
if (rect.top >= 0 && viewHeight - rect.top > threshold) return;
setTimeout(() => {
collection.scrollIntoView({
behavior: "smooth",
block: "start",
inline: "start"
});
}, 0);
}
function updateTagNav(tagNav) {
const url = new URL(window.location.href);
let tagParam = 'tag';
let tag = url.searchParams.get(tagParam) || '';
renderTagNav(tagNav, tag);
}
function renderTagNav(tagNav, activeTag = '') {
if (!tagNav.dataset.bssSyncUrl) return;
let navItems = [].slice.call(tagNav.querySelectorAll('[data-bss-type="tag-loop-item"]'));
navItems.forEach(item => {
const activeClassNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
if (!activeClassNode) return;
activeClassNode.classList.remove('active');
const link = item.dataset.bssHref;
if (!linksToCurrentPage(link) || activeClassNode.classList.contains('disabled')) return;
if (item.dataset.bssTag === activeTag) {
activeClassNode.classList.add('active');
}
});
}
function updateAuthorNav(authorNav) {
const url = new URL(window.location.href);
let authorParam = 'author';
let author = url.searchParams.get(authorParam) || '';
renderAuthorNav(authorNav, author);
}
function renderAuthorNav(authorNav, activeAuthor = '') {
if (!canFilterCollectionByAuthor(authorNav)) return;
authorNav.style.removeProperty('display');
let items = [].slice.call(authorNav.querySelectorAll('[data-bss-type="author-loop-item"]'));
items.forEach(item => item.classList.contains('author-' + activeAuthor) ? item.style.removeProperty('display') : item.style.setProperty('display', 'none', 'important'));
}
})();
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
<script src="../../assets/js/bs-init.js?h=7c6b4c49b8ac0f383799ccb3d5def770"></script>
<script src="../../assets/js/Carousel---Slider-With-Animation-slider_with_animation.js?h=948f8788fd189b5cc9df01ff4fce4152"></script>
<script src="../../assets/js/CookieConsentComponent-cookieconsent.js?h=83fbb3192473604d72b00a854c6de4fd"></script>
<script src="https://kit.fontawesome.com/8970d94f9b.js"></script>
<script src="../../assets/js/pikaday.min.js?h=039feef26d52ebc5f1260a47208bfa38"></script>
<script src="../../assets/js/text-carousel.js?h=992f402828c7806b1f3bb7f29232e972"></script>
<script src="../../assets/js/theme.js?h=aeddb9c3ce5d77b8278c91c07acf30ad"></script>
</body>
</html>

View File

@@ -0,0 +1,801 @@
<!DOCTYPE html>
<html data-bs-theme="auto" lang="en-gb">
<head>
<meta charset="utf-8">
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//analytics.adcmnetworks.co.uk/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
<script src="https://kit.fontawesome.com/8970d94f9b.js" crossorigin="anonymous"></script>
<meta name="fediverse:creator" content="@MrDavisCSIT@mstdn.social">
<script src="https://cms.tahdah.me/scripts/publicbadge.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
<title>Sort.AI</title>
<link rel="canonical" href="https://www.mrlyall.uk/my-work/extracurricular-projects/sortai.html">
<meta property="og:url" content="https://www.mrlyall.uk/my-work/extracurricular-projects/sortai.html">
<meta name="twitter:description" content="The website of Mr. A. Lyall, featuring a portfolio of work in computing education, digital projects, and curriculum resources. Explore blog posts, classroom tools, and professional insights focused on innovation, inclusion, and effective IT teaching.">
<meta name="twitter:card" content="summary">
<meta property="og:type" content="website">
<meta name="twitter:title" content="Mr Lyall">
<meta property="og:image" content="https://www.mrlyall.uk/assets/img/projects/extracurricular/sort.ai/sort.ai_logo.webp">
<meta name="description" content="AI file sorter using Google NLP in C#. Auto-categorises any file. Awarded 3rd place at BullHacks 1.0">
<script>
(function() {
// JavaScript snippet handling Dark/Light mode switching
const getStoredTheme = () => localStorage.getItem('theme');
const setStoredTheme = theme => localStorage.setItem('theme', theme);
const forcedTheme = document.documentElement.getAttribute('data-bss-forced-theme');
const getPreferredTheme = () => {
if (forcedTheme) return forcedTheme;
const storedTheme = getStoredTheme();
if (storedTheme) {
return storedTheme;
}
const pageTheme = document.documentElement.getAttribute('data-bs-theme');
if (pageTheme) {
return pageTheme;
}
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
}
const setTheme = theme => {
if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.documentElement.setAttribute('data-bs-theme', 'dark');
} else {
document.documentElement.setAttribute('data-bs-theme', theme);
}
}
setTheme(getPreferredTheme());
const showActiveTheme = (theme, focus = false) => {
const themeSwitchers = [].slice.call(document.querySelectorAll('.theme-switcher'));
if (!themeSwitchers.length) return;
document.querySelectorAll('[data-bs-theme-value]').forEach(element => {
element.classList.remove('active');
element.setAttribute('aria-pressed', 'false');
});
for (const themeSwitcher of themeSwitchers) {
const btnToActivate = themeSwitcher.querySelector('[data-bs-theme-value="' + theme + '"]');
if (btnToActivate) {
btnToActivate.classList.add('active');
btnToActivate.setAttribute('aria-pressed', 'true');
}
}
}
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
const storedTheme = getStoredTheme();
if (storedTheme !== 'light' && storedTheme !== 'dark') {
setTheme(getPreferredTheme());
}
});
window.addEventListener('DOMContentLoaded', () => {
showActiveTheme(getPreferredTheme());
document.querySelectorAll('[data-bs-theme-value]')
.forEach(toggle => {
toggle.addEventListener('click', (e) => {
e.preventDefault();
const theme = toggle.getAttribute('data-bs-theme-value');
setStoredTheme(theme);
setTheme(theme);
showActiveTheme(theme);
})
})
});
})();
</script>
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="stylesheet" href="../../assets/bootstrap/css/bootstrap.min.css?h=c9d969cca6f72ca8d4dfd457f2e8eff8">
<link rel="stylesheet" href="../../assets/css/Lato.css?h=69bc5b06794edd4ca9a38642d36c83d0">
<link rel="stylesheet" href="../../assets/css/bss-overrides.css?h=15b91a8988c8fc6448a8989802a159de">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css">
<link rel="stylesheet" href="../../assets/css/styles.css?h=7c67e1bb3df4cb41abaceaf312f03dfa">
<link rel="stylesheet" href="../../assets/css/pikaday.min.css?h=a9ab8ca627aa6e8f64b730ca9c2c781d">
<link rel="stylesheet" href="../../assets/css/CookieConsentComponent.css?h=39af3305e95f4d2a8883e97d7e0cdb14">
<link rel="stylesheet" href="../../assets/css/animations.compiled.css?h=49917e33fe831aa33e24fb1e8124fdd9">
<link rel="stylesheet" href="../../assets/css/Carousel---Slider-With-Animation.css?h=63f5768f05d2ae91446ac010bcd4844a">
</head>
<body>
<nav class="navbar navbar-expand-md fixed-top portfolio-navbar gradient navbar-dark">
<div class="container-fluid"><a class="navbar-brand logo" href="../../"><img alt="Stylised white microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" width="50" height="50" class="mobile-padding-left"></a><button data-bs-toggle="collapse" class="navbar-toggler" data-bs-target="#navbarNav" style="margin-right: 0.5em;"><span class="visually-hidden">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../">Home</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../about">About</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../projects">My Work</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../my-work/showreel">Showreel</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../blog">Blog</a></li>
</ul>
</div>
</div>
</nav>
<main class="page">
<section class="portfolio-block block-intro">
<div class="container center-everything">
<!-- Start: portfolio heading -->
<div class="align-content-center heading blog-heading sortai-windows">
<h2>Sort.AI</h2>
<p>AI file sorter using Google NLP in C#. Auto-categorises any file. Awarded 3rd place at BullHacks 1.0</p>
</div><!-- End: portfolio heading -->
</div>
</section>
<section class="portfolio-block project">
<div class="container center-everything">
<div class="swiper project-carousel" id="swiper-1" data-bss-swiper="{&quot;direction&quot;:&quot;horizontal&quot;,&quot;loop&quot;:true,&quot;autoplay&quot;:{&quot;pauseOnMouseEnter&quot;:true},&quot;autoHeight&quot;:true,&quot;keyboard&quot;:true,&quot;mousewheel&quot;:true,&quot;effect&quot;:&quot;creative&quot;,&quot;creativeEffect&quot;:{&quot;prev&quot;:{&quot;shadow&quot;:true,&quot;translate&quot;:[&quot;-20%&quot;,0,-1]},&quot;next&quot;:{&quot;translate&quot;:[&quot;100%&quot;,0,0]}},&quot;pagination&quot;:{&quot;el&quot;:&quot;.swiper-pagination&quot;,&quot;type&quot;:&quot;bullets&quot;,&quot;clickable&quot;:true,&quot;dynamicBullets&quot;:true},&quot;navigation&quot;:{&quot;nextEl&quot;:&quot;.swiper-button-next&quot;,&quot;prevEl&quot;:&quot;.swiper-button-prev&quot;}}">
<div class="swiper-wrapper">
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Terminal-style logo for Sort.AI. A green monospaced font reads [$~] sort on a black background, resembling a command-line interface." width="333" height="222" src="../../assets/img/projects/extracurricular/sort.ai/sort.ai_logo.webp?h=a198ffe5f200f284ee778dd6f7b1d741"></div>
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Screenshot of the Sort.AI application showing initial settings. The source folder is set to C:\Users\Alexa\STEAM, and the destination folder is C:\Users\Alexa\testing. The interface includes “Browse” buttons, a “Force Sort” button, an information box explaining how to set folders, and an empty log panel." width="695" height="261" src="../../assets/img/projects/extracurricular/sort.ai/main_screen.webp?h=f2339e26e4744ac63370764c625de04c"></div>
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Sort.AI screenshot after sorting has completed. The log panel shows activity: 16 text files were found and sorted successfully. A specific example shows Dogs.txt moved from STEAM to the destination folder under Animals." width="695" height="262" src="../../assets/img/projects/extracurricular/sort.ai/screen_usage_1.webp?h=8a8105560e5f237fc798f368aa3e294d"></div>
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Another screenshot of Sort.AI with a different source directory (D:\dotnet-docs-samples) and same destination. The log panel still displays the outcome of sorting 16 files, including the movement of Dogs.txt." width="695" height="286" src="../../assets/img/projects/extracurricular/sort.ai/screen_usage_2.webp?h=1397294367fa84ce4e6a3f653ce80ef3"></div>
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Dialog box for selecting a folder within Sort.AI. The interface displays user folders like .android, .atom, and .nuget under “Alexander Davis.” “OK” and “Cancel” buttons are visible at the bottom." width="695" height="349" src="../../assets/img/projects/extracurricular/sort.ai/select_folder_screen.webp?h=99b29966627f8794aeb9fa0d531334d0"></div>
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Screenshot of the Windows system tray showing the Sort.AI icon tooltip. The Sort.AI icon appears in the tray with other system icons (e.g., Windows Defender, OneDrive)." width="395" height="493" src="../../assets/img/projects/extracurricular/sort.ai/tray_icon.webp?h=2395fc15674e077cdb835fe540c331ff"></div>
</div>
<div>
<div class="swiper-button-prev swiper-control"></div>
<div class="swiper-button-next swiper-control"></div>
</div>
<div class="swiper-pagination swiper-control"></div>
</div>
<div class="row">
<div class="col info">
<h3>Inspiration</h3>
<p>Sort.AI is an Windows service concept that sorts your files automatically using the Google Natural Language API. While doing coursework, I noticed that my file system could be abit more organised. Thats when my friend and I thought about using AI to organise our systems so we don't have to. That's where Sort.AI comes, inspired from the winner of BrumHack 5.0 who used the Google Natural Language API.</p>
<h3>What It Does</h3>
<p>Sort.AI is told where your 'Sort Bin' is and opens each text document and places it into the correct location. For example a document about Dogs would go into the Animals folder.</p>
<h3>How We Built It</h3>
<p>Using our experience with C# and knowledge within the Google Cloud API, we worked within the Visual Studio 2017 IDE to create both the form interface and the Windows Service. Unfortunately due to many things out of our hands we were unable to complete the Windows service. However, parts of the implementation have been included already, for example, the notification tray icon appearing and the ability to minimize to tray. We also used the Google Cloud API libraries to create our code.</p>
<h3>Challenges We Ran Into</h3>
<p>Everything! Literally everything, whether it was the API not connecting or the Windows service not running we came across many challenges while creating Sort.AI. Each of us had some form of battle whether it was against Visual Studio, GitHub or even the Google API. We collectively made decisions on how to tackle these issues including at times even swapping jobs around.</p>
<h3>Accomplishments That We're Proud Of</h3>
<p>Being able to understand the Google API a bit better and design methods where we can utilise the API for the general market.</p>
<h3>What We Learned</h3>
<p>If in doubt, Google's about!</p>
<h3>What's Next For Sort.AI?</h3>
<p>We will possibly begin to develop on the idea after BullHacks however due to other commitments and projects this may be unlikely but we might regroup and focus on working on this product in the near future.</p>
</div>
<div class="col-auto meta project-details">
<div class="tags"><span class="meta-heading">Hackathon</span><span>BullHacks 1.0</span><span class="meta-heading">Created &amp; Submitted</span><span>11-12 March 2017</span><span class="meta-heading">Position in Competition</span><span>3rd Place</span><span class="meta-heading">Products Created</span><span>Microsoft Windows Application</span><a class="btn btn-primary project-buttons" role="button" href="https://devpost.com/software/bullhack1-0-sort-ai" target="_blank">View Entry on DevPost</a><a class="btn btn-primary project-buttons" role="button" href="https://gitea.adcmnetworks.co.uk/Intelligence-Not-Found/BullHack1.0-Sort.AI" target="_blank">View Project on Gitea</a></div>
</div>
</div>
<div class="more-projects">
<h3 class="text-center more-projects-heading">More Projects</h3>
<div data-bss-type="blog-loop" data-bss-perpage="3" style="display: none !important;">
<div class="row gy-4 row-cols-1 row-cols-sm-2 row-cols-md-2 row-cols-lg-3 mt-0" data-bss-type="blog-loop-base">
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item">
<div class="card"><a href="citation-needed.html"><img class="img-fluid card-img-top rainbow-border" alt="Screenshot of login screen with fields for email and password." width="2500" height="1125" src="../../assets/img/projects/extracurricular/citation_needed/login_screen.webp?h=3626905284037118af731fe2573ac5f4"></a>
<div class="card-body"><a href="citation-needed.html">
<h4 class="text-body">Citation Needed</h4>
</a>
<p class="card-text">Creates BCU Harvard web citations; built to replace RefME, Cite This For Me, and other broken tools.</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item">
<div class="card"><a href="exam-buff-or-exam-bluff.html"><img class="img-fluid card-img-top rainbow-border" alt="Large red capital letter &quot;F&quot; inside a red circle on a transparent background." width="500" height="500" src="../../assets/img/projects/extracurricular/exam_buff_or_exam_bluff/exam_buff_or_exam_bluff_app_logo.webp?h=c5996308f0abaf2970a7fd4e8e1cdcbf"></a>
<div class="card-body"><a href="exam-buff-or-exam-bluff.html">
<h4 class="text-body">Exam Buff or Exam Bluff</h4>
</a>
<p class="card-text">Fast-paced CS quiz game for GCSE+ that tests code and theory using logic, speed, skill, and bluffing</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item">
<div class="card"><a href="i-am-aware.html"><img class="img-fluid card-img-top rainbow-border" alt="A collage of newspaper-style clippings with words like “Anxiety,” “Panic Attacks,” and “Depression,” with the phrase “I Am Aware” boldly overlaid in white text in the center of the image, framed by a thin white border." width="940" height="500" src="../../assets/img/projects/extracurricular/iamaware.webp?h=a3dcdbacf64839eb9dcfd0f9190b41fb"></a>
<div class="card-body"><a href="i-am-aware.html">
<h4 class="text-body">I Am Aware</h4>
</a>
<p class="card-text">BCU campaign exploring mental health resources and real stories of depression, anxiety, and bipolar.</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item" style="display: none !important;">
<div class="card"><a href="societyplus.html"><img class="img-fluid card-img-top rainbow-border" alt="A cropped screenshot of the Society+ Mental Health Awareness site at Birmingham City University. Shows the society logo, &quot;Society Name&quot; and &quot;Society description&quot; on a blue gradient background. A navigation bar with links for Home, Login, and Sign Up is visible at the top right. The layout highlights the societys brand and structure." width="940" height="500" src="../../assets/img/projects/extracurricular/society+/societypluspreview.webp?h=c5bf765f66449f21ca88f0206db68bd5"></a>
<div class="card-body"><a href="societyplus.html">
<h4 class="text-body">Society+</h4>
</a>
<p class="card-text">Platform for societies to manage sign-ups, send texts, and update info using PHP, SQL, and Nexmo API</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item" style="display: none !important;">
<div class="card"><a href="task-master-web.html"><img class="img-fluid card-img-top rainbow-border" alt="Preview image of the Task Master project homepage. It includes the same blue background and the main message “Welcome to BCU Hacks Task Master We Have No Idea What Were Doing!” without form fields." width="940" height="500" src="../../assets/img/projects/extracurricular/task_master/taskmasterpreview.webp?h=bece3f4d6e67029790c7b300d5db3393"></a>
<div class="card-body"><a href="task-master-web.html">
<h4 class="text-body">Task Master for Web</h4>
</a>
<p class="card-text">Business task manager with secure login, file upload area, MySQL. Awarded 3rd place at BrumHack 5.0.</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item" style="display: none !important;">
<div class="card"><a href="the-computers-identity.html"><img class="img-fluid card-img-top rainbow-border" alt="A cropped preview of “The Computers Identity” language selection webpage, showing a column of language buttons including English, Binary, Octal, ASCII, Hexadecimal, and Leet on a white background, with a blurred brown/grey gradient on the right." width="940" height="500" src="../../assets/img/projects/extracurricular/the_computers_identity/identitypreview.webp?h=8f3c2d53aaf46cff69c58a66abbe76f5"></a>
<div class="card-body"><a href="the-computers-identity.html">
<h4 class="text-body">The Computer's Identity</h4>
</a>
<p class="card-text">Interactive poem entry for BCU Christian Union art competition displayed in binary format &amp; QR code.</p>
</div>
</div>
</div>
</div>
<nav class="d-flex justify-content-center mt-3" data-bss-type="blog-loop-pagination">
<ul class="pagination">
<li class="page-item disabled" data-type="prev" data-page="1"><a class="page-link" aria-label="Previous" href="#"><span aria-hidden="true">«</span></a></li>
<li class="page-item active" data-type="regular" data-page="1"><a class="page-link" href="#">1</a></li>
<li class="page-item" data-type="regular" data-page="2"><a class="page-link" href="#">2</a></li>
<li class="page-item" data-type="next" data-page="2"><a class="page-link" aria-label="Next" href="#"><span aria-hidden="true">»</span></a></li>
</ul>
</nav>
</div>
</div>
</div>
</section>
</main><!-- Start: Footer Multi Column -->
<footer class="text-body bg-body" id="Light-Footer">
<div class="container py-4 py-lg-5 center-everything">
<div class="row justify-content-center">
<!-- Start: Accreditations -->
<div class="col-sm-3 col-md-6 text-center text-lg-start d-none d-sm-none d-md-none d-lg-flex flex-column">
<h3 class="fs-6 text-center text-body accreditations-title">Accreditations</h3>
<div class="swiper text-body w-100" id="light-swiper" data-bss-swiper="{&quot;direction&quot;:&quot;horizontal&quot;,&quot;loop&quot;:true,&quot;autoplay&quot;:{&quot;pauseOnMouseEnter&quot;:true},&quot;autoHeight&quot;:true,&quot;effect&quot;:&quot;fade&quot;,&quot;fadeEffect&quot;:{&quot;crossFade&quot;:true}}">
<div class="swiper-wrapper">
<!-- Start: Mountain Training -->
<div class="swiper-slide d-flex justify-content-center center-everything">
<div class="tahdah-badge" data-candidateid="1466454"></div>
</div><!-- End: Mountain Training -->
<!-- Start: Canva Essentials -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-badge.webp?h=bc157efb7620e733f43b4b00981978ea"></a></div><!-- End: Canva Essentials -->
<!-- Start: Canva Essentials for Mobile -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials-mobile" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-for-mobile-badge.webp?h=93513f8f560a2e346c12aeb9fb0c18ec"></a></div><!-- End: Canva Essentials for Mobile -->
<!-- Start: Canva Graphic Design Essentials -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/graphic-design-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/graphic-design-essentials-badge.webp?h=f5406331e45433f0d8bd6b929f9d113b"></a></div><!-- End: Canva Graphic Design Essentials -->
<!-- Start: Marketing with Canva -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/marketing-with-canva" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/mr-a-davis-marketing-with-canva-badge.webp?h=f0b802da597c825b7e03378130d94aca"></a></div><!-- End: Marketing with Canva -->
<!-- Start: Canva for Work -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-for-work" target="_blank"><img class="img-fluid w-100 accreditation" width="2160" height="2160" src="../../assets/img/accreditations/mr-a-davis-canva-for-work-badge.webp?h=b3617633e9d2de429288704f75b304f4"></a></div><!-- End: Canva for Work -->
<!-- Start: Canva Teacher Essentials -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/teacher-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/teacher-essentials-badge.webp?h=d2d6f962e0b1bbebc68f987d6f156028"></a></div><!-- End: Canva Teacher Essentials -->
<!-- Start: Canva AI in the Classroom -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/ai-in-the-classroom" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/ai-in-the-classroom-badge.webp?h=769458ef2c323729c209855a3cde7312"></a></div><!-- End: Canva AI in the Classroom -->
<!-- Start: Adobe Creative Educator Level 1 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/3a49b473-4af9-4c5a-ab38-1c754f181c6e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Adobe Creative Educator Level 1&quot;" width="600" height="600" src="../../assets/img/accreditations/3_hours_adobe_creative_educator_level_1.webp?h=45de0c4e8984e885b1153e344e794beb"></a></div><!-- End: Adobe Creative Educator Level 1 -->
<!-- Start: Minecraft Education -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/53745c80-7d0a-4428-906a-839e905c139c/public_url" target="_blank"><img class="img-fluid w-100 accreditation" width="600" height="600" src="../../assets/img/accreditations/minecraft-education-ambassador.webp?h=5c614dffa9ab6d6fd77cd805b8397ffd"></a></div><!-- End: Minecraft Education -->
<!-- Start: MCE -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/9c9dd6cd-2703-4539-adc9-366069cbc3a9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MCE: Microsoft Certified Educator&quot;" width="352" height="352" src="../../assets/img/accreditations/mce_microsoft_certified_educator.webp?h=3e67f154a356cd1ef15c31b0fb42c0c4"></a></div><!-- End: MCE -->
<!-- Start: MIEE 2023-2024 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/b5ac17a1-0914-496f-9d85-9608966259ee/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Innovative Educator Expert 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2023_2024.webp?h=ee882aefba64b3e5b8ea9554eeea3847"></a></div><!-- End: MIEE 2023-2024 -->
<!-- Start: MIEE 2024-2025 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/ad92a7cb-3e4f-46e2-8e73-99dffd0eb69e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Innovative Educator Expert 2024-2025&quot;" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2024_2025.webp?h=a0b5cb2a639caf0351a977146375667e"></a></div><!-- End: MIEE 2024-2025 -->
<!-- Start: Pearson OSA Expert -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/44756f05-e727-41c8-a352-a656c033c9f0/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Onscreen Assessment Expert GCSE Computer Science&quot;" width="800" height="800" src="../../assets/img/accreditations/pearson_onscreen_assessment_expert.webp?h=d4e00ea5bfad5a66c619238d7cbdd8db"></a></div><!-- End: Pearson OSA Expert -->
<!-- Start: STEM 21-22 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/52121ef6-0760-4870-91cc-1cb20001238b/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Establishing a STEM club - from creation to careers 2021/2022&quot;" width="1200" height="1200" src="../../assets/img/accreditations/establishing_a_stem_club_from_creation_to_careers_2021_2022.webp?h=7f96a591bd4fb09f86da96af8a8a41ef"></a></div><!-- End: STEM 21-22 -->
<!-- Start: NCCE Secondary 21-22 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/60d50339-2dda-4991-90b5-7ff087975746/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Secondary Computer Science - Professional Development 2021-2022&quot;" width="1200" height="1200" src="../../assets/img/accreditations/secondary_computer_science_professional_development_2021_2022.webp?h=813dd91393f904969bc3bf184007c8c2"></a></div><!-- End: NCCE Secondary 21-22 -->
<!-- Start: NCCE Secondary 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/e74f9011-4006-4570-824a-f483fdcb5b26/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Secondary Computing - Professional Development 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/secondary_computing_professional_development_2023_2.webp?h=77ebf2880eb7d342016b83e098d92d23"></a></div><!-- End: NCCE Secondary 23-24 -->
<!-- Start: NCCE GCSE Computer Science 19-20 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/c73720d2-8208-4e2b-a1e5-c473961834d9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; GCSE Computer Science: Professional Development 2019-2020&quot;" width="1200" height="1200" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2019_2020.webp?h=fef2cee3326aeff9e2f65e86cf5e4fee"></a></div><!-- End: NCCE GCSE Computer Science 19-20 -->
<!-- Start: NCCE GCSE Computer Science 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/c486279a-8e97-4779-90c1-56f09622e782/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; GCSE Computer Science - Professional Development 2022-2023&quot;" width="2000" height="2000" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2022_2023.webp?h=0a54c55717b61c0a0b4ed80582d7bfae"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
<!-- Start: NCCE GCSE Computer Science 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/e76ed57f-2270-47f5-8e7e-4136baa261f3/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; GCSE Computer Science - Professional Development 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2023.webp?h=71b8c59772af539946fb49a210b05758"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
<!-- Start: NCCE A Level Computer Science 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/418cfb22-3e37-4b24-b527-652b1ab6ea76/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; A-Level Computer Science - Professional Development 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/a_level_computer_science_professional_development.webp?h=a9cc6f73abdf82ab49e5f8a8695cb557"></a></div><!-- End: NCCE A Level Computer Science 23-24 -->
<!-- Start: MOS Master -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/0e46d6b8-1a1b-4d16-a5d5-3b95661fb290/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Master 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_master_2013.webp?h=70d957a5307d38f46b84b6462439afbc"></a></div><!-- End: MOS Master -->
<!-- Start: MOS Word Expert -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/287d0ca4-bea1-4e18-b9e7-21f6a5d5d571/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Word 2013 Expert&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013_expert.webp?h=5bd4ec8c82587201172a8b8e460ff4e6"></a></div><!-- End: MOS Word Expert -->
<!-- Start: MOS Word -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/f1831f0e-776b-49aa-8a8d-05817d4b1410/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Word 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013.webp?h=2b90c5590b7b50f1891a9116fa38ac36"></a></div><!-- End: MOS Word -->
<!-- Start: MOS Excel -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/2ab55353-3267-46cc-b3f4-3099af54d869/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Excel 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_excel_2013.webp?h=f016925633d0a52b862259a05b396b6a"></a></div><!-- End: MOS Excel -->
<!-- Start: MOS PowerPoint -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/11162aa2-331a-4ec4-a612-665f3bc59cb1/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: PowerPoint 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_powerpoint_2013.webp?h=26de9623c491661347998549e10d4353"></a></div><!-- End: MOS PowerPoint -->
<!-- Start: MOS OneNote -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/cd328b1d-27b6-4410-be70-0792a99b72ea/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: OneNote 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_onenote_2013.webp?h=2ffe41c2a6e37d602469f8158ef13d79"></a></div><!-- End: MOS OneNote -->
<!-- Start: MTA Security -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/da3b3b4c-cec4-4537-bb5b-486ce9ee6ee7/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MTA: Security Fundamentals - Certified 2016&quot;" width="352" height="352" src="../../assets/img/accreditations/mta_security_fundamentals_certified_2016.webp?h=0df619419a5b6d0eb694dc9363870b20"></a></div><!-- End: MTA Security -->
<!-- Start: MTA Networking -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/23194bfe-30e4-4f8e-b9ec-338d060136dd/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MTA: Networking Fundamentals - Certified 2016&quot;" width="352" height="352" src="../../assets/img/accreditations/mta_networking_fundamentals_certified_2016.webp?h=cdc4618c5e86d11aa304cae14c3942bc"></a></div><!-- End: MTA Networking -->
<!-- Start: MTA Windows OS -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/f0f27d87-424b-49e8-a444-95086d640e66/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MTA: Windows Operating System Fundamentals - Certified 2016&quot;" width="352" height="352" src="../../assets/img/accreditations/mta_windows_operating_system_fundamentals_certified_2016.webp?h=44a6360480ef67ced301c697d31f9fa5"></a></div><!-- End: MTA Windows OS -->
</div>
</div>
<div class="swiper-nav-standalone d-flex justify-content-center accreditations-navigation" data-bss-swiper-target="#light-swiper">
<div class="swiper-button-prev"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-left">
<path fill-rule="evenodd" d="M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8"></path>
</svg></button></div>
<div class="swiper-button-next"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-right">
<path fill-rule="evenodd" d="M1 8a.5.5 0 0 1 .5-.5h11.793l-3.147-3.146a.5.5 0 0 1 .708-.708l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 0 1-.708-.708L13.293 8.5H1.5A.5.5 0 0 1 1 8"></path>
</svg></button></div>
</div>
</div><!-- End: Accreditations -->
<!-- Start: Spacer -->
<div class="col-md-3 text-center text-lg-start d-flex flex-column"><a class="d-flex w-100 justify-content-center center-everything" href="https://client.brixly.uk/aff.php?aff=837" target="_blank"><img class="img-fluid object-fit-contain w-50" src="https://brixly.uk/wp-content/uploads/2022/06/Artboard-32.jpg"></a></div><!-- End: Spacer -->
<div class="col-md-3 text-center text-lg-start d-flex flex-column align-items-center order-first align-items-lg-start order-lg-last">
<div class="fw-bold d-flex align-items-center mb-2"><img alt="Stylised orange microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501" width="50" height="50" class="footer-logo"><span>Mr A Lyall</span></div>
<p>IT professional and Head of Computing in the West Midlands</p>
</div>
</div>
<hr>
<div class="d-flex justify-content-between align-items-center pt-3">
<p class="mb-0 footer-copyright">Copyright © 2025 ADCM Networks</p>
<ul class="list-inline mb-0">
<!-- Start: Mastodon -->
<li class="list-inline-item"><a rel="me" href="https://mstdn.social/@MrDavisCSIT"><svg class="text-body" xmlns="http://www.w3.org/2000/svg" viewBox="-32 0 512 512" width="1em" height="1em" fill="currentColor">
<!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. -->
<path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"></path>
</svg></a></li><!-- End: Mastodon -->
<!-- Start: Bluesky -->
<li class="list-inline-item"><a href="https://bsky.app/profile/adcmnetworks.co.uk"><i class="fa-brands fa-square-bluesky"></i></a></li><!-- End: Bluesky -->
<!-- Start: LinkedIn -->
<li class="list-inline-item"><a href="https://www.linkedin.com/in/MrDavisCSIT/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-linkedin text-body">
<path d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854V1.146zm4.943 12.248V6.169H2.542v7.225h2.401m-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248-.822 0-1.359.54-1.359 1.248 0 .694.521 1.248 1.327 1.248h.016zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016a5.54 5.54 0 0 1 .016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225h2.4"></path>
</svg></a></li><!-- End: LinkedIn -->
<!-- Start: GitHub -->
<li class="list-inline-item"><a href="https://github.com/MrDavisCSIT"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-github text-body">
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8"></path>
</svg></a></li><!-- End: GitHub -->
<!-- Start: Reddit -->
<li class="list-inline-item"><a href="https://www.reddit.com/user/AlexanderEDavis95/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-reddit text-body">
<path d="M6.167 8a.831.831 0 0 0-.83.83c0 .459.372.84.83.831a.831.831 0 0 0 0-1.661m1.843 3.647c.315 0 1.403-.038 1.976-.611a.232.232 0 0 0 0-.306.213.213 0 0 0-.306 0c-.353.363-1.126.487-1.67.487-.545 0-1.308-.124-1.671-.487a.213.213 0 0 0-.306 0 .213.213 0 0 0 0 .306c.564.563 1.652.61 1.977.61zm.992-2.807c0 .458.373.83.831.83.458 0 .83-.381.83-.83a.831.831 0 0 0-1.66 0z"></path>
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-3.828-1.165c-.315 0-.602.124-.812.325-.801-.573-1.9-.945-3.121-.993l.534-2.501 1.738.372a.83.83 0 1 0 .83-.869.83.83 0 0 0-.744.468l-1.938-.41a.203.203 0 0 0-.153.028.186.186 0 0 0-.086.134l-.592 2.788c-1.24.038-2.358.41-3.17.992-.21-.2-.496-.324-.81-.324a1.163 1.163 0 0 0-.478 2.224c-.02.115-.029.23-.029.353 0 1.795 2.091 3.256 4.669 3.256 2.577 0 4.668-1.451 4.668-3.256 0-.114-.01-.238-.029-.353.401-.181.688-.592.688-1.069 0-.65-.525-1.165-1.165-1.165z"></path>
</svg></a></li><!-- End: Reddit -->
<!-- Start: YouTube -->
<li class="list-inline-item"><a href="https://www.youtube.com/channel/UCgDhiQMLbTemv2varDiW2rA"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-youtube text-body">
<path d="M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.007 2.007 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.007 2.007 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31.4 31.4 0 0 1 0 7.68v-.123c.002-.215.01-.958.064-1.778l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.007 2.007 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A99.788 99.788 0 0 1 7.858 2h.193zM6.4 5.209v4.818l4.157-2.408z"></path>
</svg></a></li><!-- End: YouTube -->
</ul>
</div>
</div>
</footer><!-- End: Footer Multi Column -->
<script>
(function() {
let collections = document.querySelectorAll('[data-bss-type="blog-loop"]');
let tagNavs = document.querySelectorAll('[data-bss-type="tag-nav"]');
let tagLoops = document.querySelectorAll('[data-bss-type="tag-loop"]');
let authorLoops = document.querySelectorAll('[data-bss-type="author-loop"]');
let authorNavs = document.querySelectorAll('[data-bss-type="author-nav"]');
window.addEventListener("popstate", (e) => {
for (let collection of collections) {
updateCollection(collection);
}
for (let tagNav of tagNavs) {
updateTagNav(tagNav);
}
for (let authorNav of authorNavs) {
updateAuthorNav(authorNav);
}
});
for (let collection of collections) {
updateCollection(collection);
if (!canPaginateCollection(collection)) continue;
let pagination = collection.querySelector('[data-bss-type="blog-loop-pagination"]');
pagination.addEventListener('click', function(e) {
let paginationItem = e.target.closest('.page-item');
if (!paginationItem) return;
e.preventDefault();
if (paginationItem.classList.contains('disabled') || paginationItem.classList.contains('active')) return;
let collection = paginationItem.closest('[data-bss-type="blog-loop"]');
if (!collection) return;
let page = parseInt(paginationItem.dataset.page);
if (!page) return;
let pageParam = getPageParameter(collection);
if (pageParam) {
const url = new URL(window.location);
url.searchParams.set(pageParam, page);
history.pushState({
[pageParam]: page
}, document.title, url);
for (let c of collections) {
let param = getPageParameter(c);
if (param !== pageParam) continue;
updateCollection(c);
}
} else {
updateCollection(collection, page);
}
});
}
for (let tagNav of tagNavs) {
updateTagNav(tagNav);
tagNav.addEventListener('click', onTagClick);
}
for (let tagLoop of tagLoops) {
tagLoop.addEventListener('click', onTagClick);
}
for (let authorLoop of authorLoops) {
authorLoop.addEventListener('click', onAuthorClick);
}
for (let authorNav of authorNavs) {
updateAuthorNav(authorNav);
}
function onTagClick(e) {
onBlogFilterClick(e);
for (let nav of tagNavs) {
updateTagNav(nav);
}
}
function onAuthorClick(e) {
onBlogFilterClick(e);
for (let authorNav of authorNavs) {
updateAuthorNav(authorNav);
}
}
function onBlogFilterClick(e) {
const item = e.target.closest('[data-bss-filter="blog"]');
if (!item || !item.dataset.hasOwnProperty('bssHref') || !item.dataset.hasOwnProperty('bssFilterParam')) return;
const stateNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
if (stateNode && (stateNode.classList.contains('disabled') || stateNode.classList.contains('active'))) {
e.preventDefault();
return;
}
const link = item.dataset.bssHref;
if (!linksToCurrentPage(link)) return;
e.preventDefault();
const url = new URL(window.location);
const filterParam = item.dataset.bssFilterParam;
const filterValue = item.dataset.bssFilterValue || '';
const collectionsToUpdate = [];
const newQueryParams = {
[filterParam]: filterValue
};
for (let c of collections) {
if (!canFilterCollection(c)) continue;
collectionsToUpdate.push(c);
let pageParam = getPageParameter(c);
let page = url.searchParams.get(pageParam);
if (page === null || page == 1) continue;
newQueryParams[pageParam] = 1;
}
for (let param in newQueryParams) {
if (newQueryParams[param]) {
url.searchParams.set(param, newQueryParams[param]);
} else {
url.searchParams.delete(param);
}
}
history.pushState(newQueryParams, document.title, url);
for (let c of collectionsToUpdate) {
updateCollection(c);
}
}
function getCollectionFilters(collection) {
let filters = [];
try {
const parsed = JSON.parse(collection.dataset.bssFilters);
if (Array.isArray(parsed)) {
filters = parsed;
}
} catch (e) {}
return filters;
}
function getCollectionEmptyFilterAction(collection, filter = '') {
let emptyFilterActions = [];
try {
const parsed = JSON.parse(collection.dataset.bssEmptyFilterActions);
if (Array.isArray(parsed)) {
emptyFilterActions = parsed;
}
} catch (e) {}
const action = emptyFilterActions.find(action => action.filter === filter);
return action ? action.value : '';
}
function canFilterCollection(collection) {
return !!getCollectionFilters(collection).length;
}
function canFilterCollectionByTag(collection) {
return getCollectionFilters(collection).includes('tag');
}
function canFilterCollectionByAuthor(collection) {
return getCollectionFilters(collection).includes('author');
}
function shouldShowAllItemsForEmptyFilter(collection, filter = '') {
return getCollectionEmptyFilterAction(collection, filter) === 'show-all';
}
function canPaginateCollection(collection) {
return !!getCollectionPagination(collection);
}
function getCollectionPagination(collection) {
return collection.querySelector('[data-bss-type="blog-loop-pagination"]');
}
function getPageParameter(collection) {
return collection.dataset.bssPageParam;
}
function linksToCurrentPage(path = '') {
let currentURL, url;
try {
currentURL = new URL(window.location);
url = new URL(path, window.location.href);
} catch (e) {
console.error(e);
}
return currentURL.origin === url.origin && currentURL.pathname === url.pathname;
}
function updateCollection(collection, page, activeTag = '', activeAuthor = '') {
const url = new URL(window.location.href);
if (canPaginateCollection(collection)) {
if (!page) {
let pageParam = getPageParameter(collection);
page = (pageParam ? url.searchParams.get(pageParam) : 1) || 1;
}
}
if (canFilterCollectionByTag(collection) && !activeTag) {
let tagParam = 'tag';
activeTag = url.searchParams.get(tagParam) || '';
}
if (canFilterCollectionByAuthor(collection) && !activeAuthor) {
let authorParam = 'author';
activeAuthor = url.searchParams.get(authorParam) || '';
}
renderCollectionPage(collection, page, activeTag, activeAuthor);
}
function renderCollectionPage(collection, page = 1, activeTag = '', activeAuthor = '') {
page = Math.max(parseInt(page, 10), 1);
collection.style.removeProperty('display');
let loopBase = collection.querySelector('[data-bss-type="blog-loop-base"]');
loopBase && loopBase.style.removeProperty('display');
let emptyState = collection.querySelector('[data-bss-type="empty-state"]');
emptyState && emptyState.style.setProperty('display', 'none', 'important');
let listItems = [].slice.call(collection.querySelectorAll('[data-bss-type="blog-loop-item"]'));
listItems.forEach(item => item.style.setProperty('display', 'none', 'important'));
if (canFilterCollectionByTag(collection)) {
listItems = listItems.filter(item => activeTag ? item.classList.contains('post-tag-' + activeTag) : shouldShowAllItemsForEmptyFilter(collection, 'tag'));
}
if (canFilterCollectionByAuthor(collection)) {
listItems = listItems.filter(item => activeAuthor ? item.classList.contains('post-author-' + activeAuthor) : shouldShowAllItemsForEmptyFilter(collection, 'author'));
}
let perPage = collection.dataset.bssPerpage || listItems.length;
let visibleListItems = listItems.slice((page - 1) * perPage, page * perPage);
visibleListItems.forEach(item => item.style.removeProperty('display'));
let isEmpty = !visibleListItems.length;
if (isEmpty) {
loopBase && loopBase.style.setProperty('display', 'none', 'important');
emptyState && emptyState.style.removeProperty('display');
}
let itemCount = listItems.length;
let pageCount = Math.max(Math.ceil(itemCount / perPage), 1);
updateCollectionPagination(collection, page, pageCount, isEmpty);
if (collection.dataset.bssScrollOnChange) {
scrollToCollectionTop(collection);
}
}
function updateCollectionPagination(collection, page, pageCount, isEmpty) {
let pagination = getCollectionPagination(collection);
if (!pagination) return;
let paginationItems = [].slice.call(pagination.querySelectorAll('.page-item'));
if (pageCount === 1 || isEmpty) {
pagination.style.setProperty('display', 'none', 'important');
} else {
pagination.style.removeProperty('display');
}
let previousBtnDisabled = page - 1 <= 0;
let previousPage = previousBtnDisabled ? 1 : page - 1;
let nextBtnDisabled = page + 1 > pageCount;
let nextPage = nextBtnDisabled ? pageCount : page + 1;
for (let i = 0; i < paginationItems.length; i++) {
let paginationItem = paginationItems[i];
paginationItem.classList.remove('active', 'disabled');
if (paginationItem.dataset.type === 'prev') {
paginationItem.dataset.page = previousPage;
if (previousBtnDisabled) {
paginationItem.classList.add('disabled');
}
} else if (paginationItem.dataset.type === 'next') {
paginationItem.dataset.page = nextPage;
if (nextBtnDisabled) {
paginationItem.classList.add('disabled');
}
} else {
if (paginationItem.dataset.page > pageCount) {
paginationItem.style.setProperty('display', 'none', 'important');
} else {
paginationItem.style.removeProperty('display');
}
if (paginationItem.dataset.page == page) {
paginationItem.classList.add('active');
}
}
}
}
function scrollToCollectionTop(collection) {
const rect = collection.getBoundingClientRect();
const viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);
const threshold = 100;
if (rect.top >= 0 && viewHeight - rect.top > threshold) return;
setTimeout(() => {
collection.scrollIntoView({
behavior: "smooth",
block: "start",
inline: "start"
});
}, 0);
}
function updateTagNav(tagNav) {
const url = new URL(window.location.href);
let tagParam = 'tag';
let tag = url.searchParams.get(tagParam) || '';
renderTagNav(tagNav, tag);
}
function renderTagNav(tagNav, activeTag = '') {
if (!tagNav.dataset.bssSyncUrl) return;
let navItems = [].slice.call(tagNav.querySelectorAll('[data-bss-type="tag-loop-item"]'));
navItems.forEach(item => {
const activeClassNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
if (!activeClassNode) return;
activeClassNode.classList.remove('active');
const link = item.dataset.bssHref;
if (!linksToCurrentPage(link) || activeClassNode.classList.contains('disabled')) return;
if (item.dataset.bssTag === activeTag) {
activeClassNode.classList.add('active');
}
});
}
function updateAuthorNav(authorNav) {
const url = new URL(window.location.href);
let authorParam = 'author';
let author = url.searchParams.get(authorParam) || '';
renderAuthorNav(authorNav, author);
}
function renderAuthorNav(authorNav, activeAuthor = '') {
if (!canFilterCollectionByAuthor(authorNav)) return;
authorNav.style.removeProperty('display');
let items = [].slice.call(authorNav.querySelectorAll('[data-bss-type="author-loop-item"]'));
items.forEach(item => item.classList.contains('author-' + activeAuthor) ? item.style.removeProperty('display') : item.style.setProperty('display', 'none', 'important'));
}
})();
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
<script src="../../assets/js/bs-init.js?h=7c6b4c49b8ac0f383799ccb3d5def770"></script>
<script src="../../assets/js/Carousel---Slider-With-Animation-slider_with_animation.js?h=948f8788fd189b5cc9df01ff4fce4152"></script>
<script src="../../assets/js/CookieConsentComponent-cookieconsent.js?h=83fbb3192473604d72b00a854c6de4fd"></script>
<script src="https://kit.fontawesome.com/8970d94f9b.js"></script>
<script src="../../assets/js/pikaday.min.js?h=039feef26d52ebc5f1260a47208bfa38"></script>
<script src="../../assets/js/text-carousel.js?h=992f402828c7806b1f3bb7f29232e972"></script>
<script src="../../assets/js/theme.js?h=aeddb9c3ce5d77b8278c91c07acf30ad"></script>
</body>
</html>

View File

@@ -0,0 +1,796 @@
<!DOCTYPE html>
<html data-bs-theme="auto" lang="en-gb">
<head>
<meta charset="utf-8">
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//analytics.adcmnetworks.co.uk/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
<script src="https://kit.fontawesome.com/8970d94f9b.js" crossorigin="anonymous"></script>
<meta name="fediverse:creator" content="@MrDavisCSIT@mstdn.social">
<script src="https://cms.tahdah.me/scripts/publicbadge.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
<title>Task Master for Web</title>
<link rel="canonical" href="https://www.mrlyall.uk/my-work/extracurricular-projects/task-master-web.html">
<meta property="og:url" content="https://www.mrlyall.uk/my-work/extracurricular-projects/task-master-web.html">
<meta name="twitter:description" content="The website of Mr. A. Lyall, featuring a portfolio of work in computing education, digital projects, and curriculum resources. Explore blog posts, classroom tools, and professional insights focused on innovation, inclusion, and effective IT teaching.">
<meta name="twitter:card" content="summary">
<meta property="og:type" content="website">
<meta name="twitter:title" content="Mr Lyall">
<meta property="og:image" content="https://www.mrlyall.uk/assets/img/projects/extracurricular/task_master/taskmasterpreview.webp">
<meta name="description" content="Business task manager with secure login, file upload area, MySQL. Awarded 3rd place at BrumHack 5.0.">
<script>
(function() {
// JavaScript snippet handling Dark/Light mode switching
const getStoredTheme = () => localStorage.getItem('theme');
const setStoredTheme = theme => localStorage.setItem('theme', theme);
const forcedTheme = document.documentElement.getAttribute('data-bss-forced-theme');
const getPreferredTheme = () => {
if (forcedTheme) return forcedTheme;
const storedTheme = getStoredTheme();
if (storedTheme) {
return storedTheme;
}
const pageTheme = document.documentElement.getAttribute('data-bs-theme');
if (pageTheme) {
return pageTheme;
}
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
}
const setTheme = theme => {
if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.documentElement.setAttribute('data-bs-theme', 'dark');
} else {
document.documentElement.setAttribute('data-bs-theme', theme);
}
}
setTheme(getPreferredTheme());
const showActiveTheme = (theme, focus = false) => {
const themeSwitchers = [].slice.call(document.querySelectorAll('.theme-switcher'));
if (!themeSwitchers.length) return;
document.querySelectorAll('[data-bs-theme-value]').forEach(element => {
element.classList.remove('active');
element.setAttribute('aria-pressed', 'false');
});
for (const themeSwitcher of themeSwitchers) {
const btnToActivate = themeSwitcher.querySelector('[data-bs-theme-value="' + theme + '"]');
if (btnToActivate) {
btnToActivate.classList.add('active');
btnToActivate.setAttribute('aria-pressed', 'true');
}
}
}
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
const storedTheme = getStoredTheme();
if (storedTheme !== 'light' && storedTheme !== 'dark') {
setTheme(getPreferredTheme());
}
});
window.addEventListener('DOMContentLoaded', () => {
showActiveTheme(getPreferredTheme());
document.querySelectorAll('[data-bs-theme-value]')
.forEach(toggle => {
toggle.addEventListener('click', (e) => {
e.preventDefault();
const theme = toggle.getAttribute('data-bs-theme-value');
setStoredTheme(theme);
setTheme(theme);
showActiveTheme(theme);
})
})
});
})();
</script>
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="stylesheet" href="../../assets/bootstrap/css/bootstrap.min.css?h=c9d969cca6f72ca8d4dfd457f2e8eff8">
<link rel="stylesheet" href="../../assets/css/Lato.css?h=69bc5b06794edd4ca9a38642d36c83d0">
<link rel="stylesheet" href="../../assets/css/bss-overrides.css?h=15b91a8988c8fc6448a8989802a159de">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css">
<link rel="stylesheet" href="../../assets/css/styles.css?h=7c67e1bb3df4cb41abaceaf312f03dfa">
<link rel="stylesheet" href="../../assets/css/pikaday.min.css?h=a9ab8ca627aa6e8f64b730ca9c2c781d">
<link rel="stylesheet" href="../../assets/css/CookieConsentComponent.css?h=39af3305e95f4d2a8883e97d7e0cdb14">
<link rel="stylesheet" href="../../assets/css/animations.compiled.css?h=49917e33fe831aa33e24fb1e8124fdd9">
<link rel="stylesheet" href="../../assets/css/Carousel---Slider-With-Animation.css?h=63f5768f05d2ae91446ac010bcd4844a">
</head>
<body>
<nav class="navbar navbar-expand-md fixed-top portfolio-navbar gradient navbar-dark">
<div class="container-fluid"><a class="navbar-brand logo" href="../../"><img alt="Stylised white microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" width="50" height="50" class="mobile-padding-left"></a><button data-bs-toggle="collapse" class="navbar-toggler" data-bs-target="#navbarNav" style="margin-right: 0.5em;"><span class="visually-hidden">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../">Home</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../about">About</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../projects">My Work</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../my-work/showreel">Showreel</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../blog">Blog</a></li>
</ul>
</div>
</div>
</nav>
<main class="page">
<section class="portfolio-block block-intro">
<div class="container center-everything">
<!-- Start: portfolio heading -->
<div class="align-content-center heading blog-heading taskmaster-web">
<h2>Task Master for Web</h2>
<p>Business task manager with secure login, file upload area, MySQL. Awarded 3rd place at BrumHack 5.0.</p>
</div><!-- End: portfolio heading -->
</div>
</section>
<section class="portfolio-block project">
<div class="container center-everything">
<div class="swiper project-carousel" id="swiper-1" data-bss-swiper="{&quot;direction&quot;:&quot;horizontal&quot;,&quot;loop&quot;:true,&quot;autoplay&quot;:{&quot;pauseOnMouseEnter&quot;:true},&quot;autoHeight&quot;:true,&quot;keyboard&quot;:true,&quot;mousewheel&quot;:true,&quot;effect&quot;:&quot;creative&quot;,&quot;creativeEffect&quot;:{&quot;prev&quot;:{&quot;shadow&quot;:true,&quot;translate&quot;:[&quot;-20%&quot;,0,-1]},&quot;next&quot;:{&quot;translate&quot;:[&quot;100%&quot;,0,0]}},&quot;pagination&quot;:{&quot;el&quot;:&quot;.swiper-pagination&quot;,&quot;type&quot;:&quot;bullets&quot;,&quot;clickable&quot;:true,&quot;dynamicBullets&quot;:true},&quot;navigation&quot;:{&quot;nextEl&quot;:&quot;.swiper-button-next&quot;,&quot;prevEl&quot;:&quot;.swiper-button-prev&quot;}}">
<div class="swiper-wrapper">
<div class="swiper-slide d-flex justify-content-center center-everything"><img class="img-fluid slider-image-fit" alt="Web application page for &quot;BCU Hacks Task Master&quot; project. The screen displays a welcome message “We Have No Idea What Were Doing!” and two panels for login and sign-up forms beneath it." width="695" height="494" src="../../assets/img/projects/extracurricular/task_master/taskmaster.webp?h=78aac44b5ec04be4ac176474806ad57d"></div>
</div>
<div>
<div class="swiper-button-prev swiper-control"></div>
<div class="swiper-button-next swiper-control"></div>
</div>
<div class="swiper-pagination swiper-control"></div>
</div>
<div class="row">
<div class="col info">
<h3>Concept</h3>
<ul>
<li>Business focused task management program on Windows</li>
<li>Utilizes web application concept)</li>
<li>Use of a Login system</li>
<li>Possibility of a file upload area (use of next cloud if implemented?)</li>
<li>Use of a Database system (MySQL)</li>
</ul>
<h3>Possible Features</h3>
<ul>
<li>Live tracking and analytics into tasks</li>
<li>Integration with Alexa</li>
<li>Alexa voice notifications</li>
</ul>
</div>
<div class="col-auto meta project-details">
<div class="tags"><span class="meta-heading">Hackathon</span><span>BrumHack 5.0</span><span class="meta-heading">Created &amp; Submitted</span><span>29-30 October, 2016</span><span class="meta-heading">Position in Competition</span><span>3rd Place</span><span class="meta-heading">Products Created</span><span>Web Application</span><a class="btn btn-primary project-buttons" role="button" href="https://devpost.com/software/bcu-hacks" target="_blank">View Entry on DevPost</a><a class="btn btn-primary project-buttons" role="button" href="https://gitea.adcmnetworks.co.uk/Intelligence-Not-Found/BrumHack5.0-TaskMaster" target="_blank">View Project on Gitea</a></div>
</div>
</div>
<div class="more-projects">
<h3 class="text-center more-projects-heading">More Projects</h3>
<div data-bss-type="blog-loop" data-bss-perpage="3" style="display: none !important;">
<div class="row gy-4 row-cols-1 row-cols-sm-2 row-cols-md-2 row-cols-lg-3 mt-0" data-bss-type="blog-loop-base">
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item">
<div class="card"><a href="citation-needed.html"><img class="img-fluid card-img-top rainbow-border" alt="Screenshot of login screen with fields for email and password." width="2500" height="1125" src="../../assets/img/projects/extracurricular/citation_needed/login_screen.webp?h=3626905284037118af731fe2573ac5f4"></a>
<div class="card-body"><a href="citation-needed.html">
<h4 class="text-body">Citation Needed</h4>
</a>
<p class="card-text">Creates BCU Harvard web citations; built to replace RefME, Cite This For Me, and other broken tools.</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item">
<div class="card"><a href="exam-buff-or-exam-bluff.html"><img class="img-fluid card-img-top rainbow-border" alt="Large red capital letter &quot;F&quot; inside a red circle on a transparent background." width="500" height="500" src="../../assets/img/projects/extracurricular/exam_buff_or_exam_bluff/exam_buff_or_exam_bluff_app_logo.webp?h=c5996308f0abaf2970a7fd4e8e1cdcbf"></a>
<div class="card-body"><a href="exam-buff-or-exam-bluff.html">
<h4 class="text-body">Exam Buff or Exam Bluff</h4>
</a>
<p class="card-text">Fast-paced CS quiz game for GCSE+ that tests code and theory using logic, speed, skill, and bluffing</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item">
<div class="card"><a href="i-am-aware.html"><img class="img-fluid card-img-top rainbow-border" alt="A collage of newspaper-style clippings with words like “Anxiety,” “Panic Attacks,” and “Depression,” with the phrase “I Am Aware” boldly overlaid in white text in the center of the image, framed by a thin white border." width="940" height="500" src="../../assets/img/projects/extracurricular/iamaware.webp?h=a3dcdbacf64839eb9dcfd0f9190b41fb"></a>
<div class="card-body"><a href="i-am-aware.html">
<h4 class="text-body">I Am Aware</h4>
</a>
<p class="card-text">BCU campaign exploring mental health resources and real stories of depression, anxiety, and bipolar.</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item" style="display: none !important;">
<div class="card"><a href="societyplus.html"><img class="img-fluid card-img-top rainbow-border" alt="A cropped screenshot of the Society+ Mental Health Awareness site at Birmingham City University. Shows the society logo, &quot;Society Name&quot; and &quot;Society description&quot; on a blue gradient background. A navigation bar with links for Home, Login, and Sign Up is visible at the top right. The layout highlights the societys brand and structure." width="940" height="500" src="../../assets/img/projects/extracurricular/society+/societypluspreview.webp?h=c5bf765f66449f21ca88f0206db68bd5"></a>
<div class="card-body"><a href="societyplus.html">
<h4 class="text-body">Society+</h4>
</a>
<p class="card-text">Platform for societies to manage sign-ups, send texts, and update info using PHP, SQL, and Nexmo API</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item" style="display: none !important;">
<div class="card"><a href="sortai.html"><img class="img-fluid card-img-top rainbow-border" alt="Terminal-style logo for Sort.AI. A green monospaced font reads [$~] sort on a black background, resembling a command-line interface." width="333" height="222" src="../../assets/img/projects/extracurricular/sort.ai/sort.ai_logo.webp?h=a198ffe5f200f284ee778dd6f7b1d741"></a>
<div class="card-body"><a href="sortai.html">
<h4 class="text-body">Sort.AI</h4>
</a>
<p class="card-text">AI file sorter using Google NLP in C#. Auto-categorises any file. Awarded 3rd place at BullHacks 1.0</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item" style="display: none !important;">
<div class="card"><a href="the-computers-identity.html"><img class="img-fluid card-img-top rainbow-border" alt="A cropped preview of “The Computers Identity” language selection webpage, showing a column of language buttons including English, Binary, Octal, ASCII, Hexadecimal, and Leet on a white background, with a blurred brown/grey gradient on the right." width="940" height="500" src="../../assets/img/projects/extracurricular/the_computers_identity/identitypreview.webp?h=8f3c2d53aaf46cff69c58a66abbe76f5"></a>
<div class="card-body"><a href="the-computers-identity.html">
<h4 class="text-body">The Computer's Identity</h4>
</a>
<p class="card-text">Interactive poem entry for BCU Christian Union art competition displayed in binary format &amp; QR code.</p>
</div>
</div>
</div>
</div>
<nav class="d-flex justify-content-center mt-3" data-bss-type="blog-loop-pagination">
<ul class="pagination">
<li class="page-item disabled" data-type="prev" data-page="1"><a class="page-link" aria-label="Previous" href="#"><span aria-hidden="true">«</span></a></li>
<li class="page-item active" data-type="regular" data-page="1"><a class="page-link" href="#">1</a></li>
<li class="page-item" data-type="regular" data-page="2"><a class="page-link" href="#">2</a></li>
<li class="page-item" data-type="next" data-page="2"><a class="page-link" aria-label="Next" href="#"><span aria-hidden="true">»</span></a></li>
</ul>
</nav>
</div>
</div>
</div>
</section>
</main><!-- Start: Footer Multi Column -->
<footer class="text-body bg-body" id="Light-Footer">
<div class="container py-4 py-lg-5 center-everything">
<div class="row justify-content-center">
<!-- Start: Accreditations -->
<div class="col-sm-3 col-md-6 text-center text-lg-start d-none d-sm-none d-md-none d-lg-flex flex-column">
<h3 class="fs-6 text-center text-body accreditations-title">Accreditations</h3>
<div class="swiper text-body w-100" id="light-swiper" data-bss-swiper="{&quot;direction&quot;:&quot;horizontal&quot;,&quot;loop&quot;:true,&quot;autoplay&quot;:{&quot;pauseOnMouseEnter&quot;:true},&quot;autoHeight&quot;:true,&quot;effect&quot;:&quot;fade&quot;,&quot;fadeEffect&quot;:{&quot;crossFade&quot;:true}}">
<div class="swiper-wrapper">
<!-- Start: Mountain Training -->
<div class="swiper-slide d-flex justify-content-center center-everything">
<div class="tahdah-badge" data-candidateid="1466454"></div>
</div><!-- End: Mountain Training -->
<!-- Start: Canva Essentials -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-badge.webp?h=bc157efb7620e733f43b4b00981978ea"></a></div><!-- End: Canva Essentials -->
<!-- Start: Canva Essentials for Mobile -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials-mobile" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-for-mobile-badge.webp?h=93513f8f560a2e346c12aeb9fb0c18ec"></a></div><!-- End: Canva Essentials for Mobile -->
<!-- Start: Canva Graphic Design Essentials -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/graphic-design-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/graphic-design-essentials-badge.webp?h=f5406331e45433f0d8bd6b929f9d113b"></a></div><!-- End: Canva Graphic Design Essentials -->
<!-- Start: Marketing with Canva -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/marketing-with-canva" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/mr-a-davis-marketing-with-canva-badge.webp?h=f0b802da597c825b7e03378130d94aca"></a></div><!-- End: Marketing with Canva -->
<!-- Start: Canva for Work -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-for-work" target="_blank"><img class="img-fluid w-100 accreditation" width="2160" height="2160" src="../../assets/img/accreditations/mr-a-davis-canva-for-work-badge.webp?h=b3617633e9d2de429288704f75b304f4"></a></div><!-- End: Canva for Work -->
<!-- Start: Canva Teacher Essentials -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/teacher-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/teacher-essentials-badge.webp?h=d2d6f962e0b1bbebc68f987d6f156028"></a></div><!-- End: Canva Teacher Essentials -->
<!-- Start: Canva AI in the Classroom -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/ai-in-the-classroom" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/ai-in-the-classroom-badge.webp?h=769458ef2c323729c209855a3cde7312"></a></div><!-- End: Canva AI in the Classroom -->
<!-- Start: Adobe Creative Educator Level 1 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/3a49b473-4af9-4c5a-ab38-1c754f181c6e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Adobe Creative Educator Level 1&quot;" width="600" height="600" src="../../assets/img/accreditations/3_hours_adobe_creative_educator_level_1.webp?h=45de0c4e8984e885b1153e344e794beb"></a></div><!-- End: Adobe Creative Educator Level 1 -->
<!-- Start: Minecraft Education -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/53745c80-7d0a-4428-906a-839e905c139c/public_url" target="_blank"><img class="img-fluid w-100 accreditation" width="600" height="600" src="../../assets/img/accreditations/minecraft-education-ambassador.webp?h=5c614dffa9ab6d6fd77cd805b8397ffd"></a></div><!-- End: Minecraft Education -->
<!-- Start: MCE -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/9c9dd6cd-2703-4539-adc9-366069cbc3a9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MCE: Microsoft Certified Educator&quot;" width="352" height="352" src="../../assets/img/accreditations/mce_microsoft_certified_educator.webp?h=3e67f154a356cd1ef15c31b0fb42c0c4"></a></div><!-- End: MCE -->
<!-- Start: MIEE 2023-2024 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/b5ac17a1-0914-496f-9d85-9608966259ee/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Innovative Educator Expert 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2023_2024.webp?h=ee882aefba64b3e5b8ea9554eeea3847"></a></div><!-- End: MIEE 2023-2024 -->
<!-- Start: MIEE 2024-2025 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/ad92a7cb-3e4f-46e2-8e73-99dffd0eb69e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Innovative Educator Expert 2024-2025&quot;" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2024_2025.webp?h=a0b5cb2a639caf0351a977146375667e"></a></div><!-- End: MIEE 2024-2025 -->
<!-- Start: Pearson OSA Expert -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/44756f05-e727-41c8-a352-a656c033c9f0/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Onscreen Assessment Expert GCSE Computer Science&quot;" width="800" height="800" src="../../assets/img/accreditations/pearson_onscreen_assessment_expert.webp?h=d4e00ea5bfad5a66c619238d7cbdd8db"></a></div><!-- End: Pearson OSA Expert -->
<!-- Start: STEM 21-22 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/52121ef6-0760-4870-91cc-1cb20001238b/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Establishing a STEM club - from creation to careers 2021/2022&quot;" width="1200" height="1200" src="../../assets/img/accreditations/establishing_a_stem_club_from_creation_to_careers_2021_2022.webp?h=7f96a591bd4fb09f86da96af8a8a41ef"></a></div><!-- End: STEM 21-22 -->
<!-- Start: NCCE Secondary 21-22 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/60d50339-2dda-4991-90b5-7ff087975746/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Secondary Computer Science - Professional Development 2021-2022&quot;" width="1200" height="1200" src="../../assets/img/accreditations/secondary_computer_science_professional_development_2021_2022.webp?h=813dd91393f904969bc3bf184007c8c2"></a></div><!-- End: NCCE Secondary 21-22 -->
<!-- Start: NCCE Secondary 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/e74f9011-4006-4570-824a-f483fdcb5b26/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Secondary Computing - Professional Development 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/secondary_computing_professional_development_2023_2.webp?h=77ebf2880eb7d342016b83e098d92d23"></a></div><!-- End: NCCE Secondary 23-24 -->
<!-- Start: NCCE GCSE Computer Science 19-20 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/c73720d2-8208-4e2b-a1e5-c473961834d9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; GCSE Computer Science: Professional Development 2019-2020&quot;" width="1200" height="1200" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2019_2020.webp?h=fef2cee3326aeff9e2f65e86cf5e4fee"></a></div><!-- End: NCCE GCSE Computer Science 19-20 -->
<!-- Start: NCCE GCSE Computer Science 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/c486279a-8e97-4779-90c1-56f09622e782/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; GCSE Computer Science - Professional Development 2022-2023&quot;" width="2000" height="2000" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2022_2023.webp?h=0a54c55717b61c0a0b4ed80582d7bfae"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
<!-- Start: NCCE GCSE Computer Science 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/e76ed57f-2270-47f5-8e7e-4136baa261f3/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; GCSE Computer Science - Professional Development 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2023.webp?h=71b8c59772af539946fb49a210b05758"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
<!-- Start: NCCE A Level Computer Science 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/418cfb22-3e37-4b24-b527-652b1ab6ea76/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; A-Level Computer Science - Professional Development 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/a_level_computer_science_professional_development.webp?h=a9cc6f73abdf82ab49e5f8a8695cb557"></a></div><!-- End: NCCE A Level Computer Science 23-24 -->
<!-- Start: MOS Master -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/0e46d6b8-1a1b-4d16-a5d5-3b95661fb290/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Master 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_master_2013.webp?h=70d957a5307d38f46b84b6462439afbc"></a></div><!-- End: MOS Master -->
<!-- Start: MOS Word Expert -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/287d0ca4-bea1-4e18-b9e7-21f6a5d5d571/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Word 2013 Expert&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013_expert.webp?h=5bd4ec8c82587201172a8b8e460ff4e6"></a></div><!-- End: MOS Word Expert -->
<!-- Start: MOS Word -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/f1831f0e-776b-49aa-8a8d-05817d4b1410/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Word 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013.webp?h=2b90c5590b7b50f1891a9116fa38ac36"></a></div><!-- End: MOS Word -->
<!-- Start: MOS Excel -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/2ab55353-3267-46cc-b3f4-3099af54d869/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Excel 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_excel_2013.webp?h=f016925633d0a52b862259a05b396b6a"></a></div><!-- End: MOS Excel -->
<!-- Start: MOS PowerPoint -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/11162aa2-331a-4ec4-a612-665f3bc59cb1/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: PowerPoint 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_powerpoint_2013.webp?h=26de9623c491661347998549e10d4353"></a></div><!-- End: MOS PowerPoint -->
<!-- Start: MOS OneNote -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/cd328b1d-27b6-4410-be70-0792a99b72ea/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: OneNote 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_onenote_2013.webp?h=2ffe41c2a6e37d602469f8158ef13d79"></a></div><!-- End: MOS OneNote -->
<!-- Start: MTA Security -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/da3b3b4c-cec4-4537-bb5b-486ce9ee6ee7/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MTA: Security Fundamentals - Certified 2016&quot;" width="352" height="352" src="../../assets/img/accreditations/mta_security_fundamentals_certified_2016.webp?h=0df619419a5b6d0eb694dc9363870b20"></a></div><!-- End: MTA Security -->
<!-- Start: MTA Networking -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/23194bfe-30e4-4f8e-b9ec-338d060136dd/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MTA: Networking Fundamentals - Certified 2016&quot;" width="352" height="352" src="../../assets/img/accreditations/mta_networking_fundamentals_certified_2016.webp?h=cdc4618c5e86d11aa304cae14c3942bc"></a></div><!-- End: MTA Networking -->
<!-- Start: MTA Windows OS -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/f0f27d87-424b-49e8-a444-95086d640e66/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MTA: Windows Operating System Fundamentals - Certified 2016&quot;" width="352" height="352" src="../../assets/img/accreditations/mta_windows_operating_system_fundamentals_certified_2016.webp?h=44a6360480ef67ced301c697d31f9fa5"></a></div><!-- End: MTA Windows OS -->
</div>
</div>
<div class="swiper-nav-standalone d-flex justify-content-center accreditations-navigation" data-bss-swiper-target="#light-swiper">
<div class="swiper-button-prev"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-left">
<path fill-rule="evenodd" d="M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8"></path>
</svg></button></div>
<div class="swiper-button-next"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-right">
<path fill-rule="evenodd" d="M1 8a.5.5 0 0 1 .5-.5h11.793l-3.147-3.146a.5.5 0 0 1 .708-.708l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 0 1-.708-.708L13.293 8.5H1.5A.5.5 0 0 1 1 8"></path>
</svg></button></div>
</div>
</div><!-- End: Accreditations -->
<!-- Start: Spacer -->
<div class="col-md-3 text-center text-lg-start d-flex flex-column"><a class="d-flex w-100 justify-content-center center-everything" href="https://client.brixly.uk/aff.php?aff=837" target="_blank"><img class="img-fluid object-fit-contain w-50" src="https://brixly.uk/wp-content/uploads/2022/06/Artboard-32.jpg"></a></div><!-- End: Spacer -->
<div class="col-md-3 text-center text-lg-start d-flex flex-column align-items-center order-first align-items-lg-start order-lg-last">
<div class="fw-bold d-flex align-items-center mb-2"><img alt="Stylised orange microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501" width="50" height="50" class="footer-logo"><span>Mr A Lyall</span></div>
<p>IT professional and Head of Computing in the West Midlands</p>
</div>
</div>
<hr>
<div class="d-flex justify-content-between align-items-center pt-3">
<p class="mb-0 footer-copyright">Copyright © 2025 ADCM Networks</p>
<ul class="list-inline mb-0">
<!-- Start: Mastodon -->
<li class="list-inline-item"><a rel="me" href="https://mstdn.social/@MrDavisCSIT"><svg class="text-body" xmlns="http://www.w3.org/2000/svg" viewBox="-32 0 512 512" width="1em" height="1em" fill="currentColor">
<!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. -->
<path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"></path>
</svg></a></li><!-- End: Mastodon -->
<!-- Start: Bluesky -->
<li class="list-inline-item"><a href="https://bsky.app/profile/adcmnetworks.co.uk"><i class="fa-brands fa-square-bluesky"></i></a></li><!-- End: Bluesky -->
<!-- Start: LinkedIn -->
<li class="list-inline-item"><a href="https://www.linkedin.com/in/MrDavisCSIT/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-linkedin text-body">
<path d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854V1.146zm4.943 12.248V6.169H2.542v7.225h2.401m-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248-.822 0-1.359.54-1.359 1.248 0 .694.521 1.248 1.327 1.248h.016zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016a5.54 5.54 0 0 1 .016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225h2.4"></path>
</svg></a></li><!-- End: LinkedIn -->
<!-- Start: GitHub -->
<li class="list-inline-item"><a href="https://github.com/MrDavisCSIT"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-github text-body">
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8"></path>
</svg></a></li><!-- End: GitHub -->
<!-- Start: Reddit -->
<li class="list-inline-item"><a href="https://www.reddit.com/user/AlexanderEDavis95/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-reddit text-body">
<path d="M6.167 8a.831.831 0 0 0-.83.83c0 .459.372.84.83.831a.831.831 0 0 0 0-1.661m1.843 3.647c.315 0 1.403-.038 1.976-.611a.232.232 0 0 0 0-.306.213.213 0 0 0-.306 0c-.353.363-1.126.487-1.67.487-.545 0-1.308-.124-1.671-.487a.213.213 0 0 0-.306 0 .213.213 0 0 0 0 .306c.564.563 1.652.61 1.977.61zm.992-2.807c0 .458.373.83.831.83.458 0 .83-.381.83-.83a.831.831 0 0 0-1.66 0z"></path>
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-3.828-1.165c-.315 0-.602.124-.812.325-.801-.573-1.9-.945-3.121-.993l.534-2.501 1.738.372a.83.83 0 1 0 .83-.869.83.83 0 0 0-.744.468l-1.938-.41a.203.203 0 0 0-.153.028.186.186 0 0 0-.086.134l-.592 2.788c-1.24.038-2.358.41-3.17.992-.21-.2-.496-.324-.81-.324a1.163 1.163 0 0 0-.478 2.224c-.02.115-.029.23-.029.353 0 1.795 2.091 3.256 4.669 3.256 2.577 0 4.668-1.451 4.668-3.256 0-.114-.01-.238-.029-.353.401-.181.688-.592.688-1.069 0-.65-.525-1.165-1.165-1.165z"></path>
</svg></a></li><!-- End: Reddit -->
<!-- Start: YouTube -->
<li class="list-inline-item"><a href="https://www.youtube.com/channel/UCgDhiQMLbTemv2varDiW2rA"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-youtube text-body">
<path d="M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.007 2.007 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.007 2.007 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31.4 31.4 0 0 1 0 7.68v-.123c.002-.215.01-.958.064-1.778l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.007 2.007 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A99.788 99.788 0 0 1 7.858 2h.193zM6.4 5.209v4.818l4.157-2.408z"></path>
</svg></a></li><!-- End: YouTube -->
</ul>
</div>
</div>
</footer><!-- End: Footer Multi Column -->
<script>
(function() {
let collections = document.querySelectorAll('[data-bss-type="blog-loop"]');
let tagNavs = document.querySelectorAll('[data-bss-type="tag-nav"]');
let tagLoops = document.querySelectorAll('[data-bss-type="tag-loop"]');
let authorLoops = document.querySelectorAll('[data-bss-type="author-loop"]');
let authorNavs = document.querySelectorAll('[data-bss-type="author-nav"]');
window.addEventListener("popstate", (e) => {
for (let collection of collections) {
updateCollection(collection);
}
for (let tagNav of tagNavs) {
updateTagNav(tagNav);
}
for (let authorNav of authorNavs) {
updateAuthorNav(authorNav);
}
});
for (let collection of collections) {
updateCollection(collection);
if (!canPaginateCollection(collection)) continue;
let pagination = collection.querySelector('[data-bss-type="blog-loop-pagination"]');
pagination.addEventListener('click', function(e) {
let paginationItem = e.target.closest('.page-item');
if (!paginationItem) return;
e.preventDefault();
if (paginationItem.classList.contains('disabled') || paginationItem.classList.contains('active')) return;
let collection = paginationItem.closest('[data-bss-type="blog-loop"]');
if (!collection) return;
let page = parseInt(paginationItem.dataset.page);
if (!page) return;
let pageParam = getPageParameter(collection);
if (pageParam) {
const url = new URL(window.location);
url.searchParams.set(pageParam, page);
history.pushState({
[pageParam]: page
}, document.title, url);
for (let c of collections) {
let param = getPageParameter(c);
if (param !== pageParam) continue;
updateCollection(c);
}
} else {
updateCollection(collection, page);
}
});
}
for (let tagNav of tagNavs) {
updateTagNav(tagNav);
tagNav.addEventListener('click', onTagClick);
}
for (let tagLoop of tagLoops) {
tagLoop.addEventListener('click', onTagClick);
}
for (let authorLoop of authorLoops) {
authorLoop.addEventListener('click', onAuthorClick);
}
for (let authorNav of authorNavs) {
updateAuthorNav(authorNav);
}
function onTagClick(e) {
onBlogFilterClick(e);
for (let nav of tagNavs) {
updateTagNav(nav);
}
}
function onAuthorClick(e) {
onBlogFilterClick(e);
for (let authorNav of authorNavs) {
updateAuthorNav(authorNav);
}
}
function onBlogFilterClick(e) {
const item = e.target.closest('[data-bss-filter="blog"]');
if (!item || !item.dataset.hasOwnProperty('bssHref') || !item.dataset.hasOwnProperty('bssFilterParam')) return;
const stateNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
if (stateNode && (stateNode.classList.contains('disabled') || stateNode.classList.contains('active'))) {
e.preventDefault();
return;
}
const link = item.dataset.bssHref;
if (!linksToCurrentPage(link)) return;
e.preventDefault();
const url = new URL(window.location);
const filterParam = item.dataset.bssFilterParam;
const filterValue = item.dataset.bssFilterValue || '';
const collectionsToUpdate = [];
const newQueryParams = {
[filterParam]: filterValue
};
for (let c of collections) {
if (!canFilterCollection(c)) continue;
collectionsToUpdate.push(c);
let pageParam = getPageParameter(c);
let page = url.searchParams.get(pageParam);
if (page === null || page == 1) continue;
newQueryParams[pageParam] = 1;
}
for (let param in newQueryParams) {
if (newQueryParams[param]) {
url.searchParams.set(param, newQueryParams[param]);
} else {
url.searchParams.delete(param);
}
}
history.pushState(newQueryParams, document.title, url);
for (let c of collectionsToUpdate) {
updateCollection(c);
}
}
function getCollectionFilters(collection) {
let filters = [];
try {
const parsed = JSON.parse(collection.dataset.bssFilters);
if (Array.isArray(parsed)) {
filters = parsed;
}
} catch (e) {}
return filters;
}
function getCollectionEmptyFilterAction(collection, filter = '') {
let emptyFilterActions = [];
try {
const parsed = JSON.parse(collection.dataset.bssEmptyFilterActions);
if (Array.isArray(parsed)) {
emptyFilterActions = parsed;
}
} catch (e) {}
const action = emptyFilterActions.find(action => action.filter === filter);
return action ? action.value : '';
}
function canFilterCollection(collection) {
return !!getCollectionFilters(collection).length;
}
function canFilterCollectionByTag(collection) {
return getCollectionFilters(collection).includes('tag');
}
function canFilterCollectionByAuthor(collection) {
return getCollectionFilters(collection).includes('author');
}
function shouldShowAllItemsForEmptyFilter(collection, filter = '') {
return getCollectionEmptyFilterAction(collection, filter) === 'show-all';
}
function canPaginateCollection(collection) {
return !!getCollectionPagination(collection);
}
function getCollectionPagination(collection) {
return collection.querySelector('[data-bss-type="blog-loop-pagination"]');
}
function getPageParameter(collection) {
return collection.dataset.bssPageParam;
}
function linksToCurrentPage(path = '') {
let currentURL, url;
try {
currentURL = new URL(window.location);
url = new URL(path, window.location.href);
} catch (e) {
console.error(e);
}
return currentURL.origin === url.origin && currentURL.pathname === url.pathname;
}
function updateCollection(collection, page, activeTag = '', activeAuthor = '') {
const url = new URL(window.location.href);
if (canPaginateCollection(collection)) {
if (!page) {
let pageParam = getPageParameter(collection);
page = (pageParam ? url.searchParams.get(pageParam) : 1) || 1;
}
}
if (canFilterCollectionByTag(collection) && !activeTag) {
let tagParam = 'tag';
activeTag = url.searchParams.get(tagParam) || '';
}
if (canFilterCollectionByAuthor(collection) && !activeAuthor) {
let authorParam = 'author';
activeAuthor = url.searchParams.get(authorParam) || '';
}
renderCollectionPage(collection, page, activeTag, activeAuthor);
}
function renderCollectionPage(collection, page = 1, activeTag = '', activeAuthor = '') {
page = Math.max(parseInt(page, 10), 1);
collection.style.removeProperty('display');
let loopBase = collection.querySelector('[data-bss-type="blog-loop-base"]');
loopBase && loopBase.style.removeProperty('display');
let emptyState = collection.querySelector('[data-bss-type="empty-state"]');
emptyState && emptyState.style.setProperty('display', 'none', 'important');
let listItems = [].slice.call(collection.querySelectorAll('[data-bss-type="blog-loop-item"]'));
listItems.forEach(item => item.style.setProperty('display', 'none', 'important'));
if (canFilterCollectionByTag(collection)) {
listItems = listItems.filter(item => activeTag ? item.classList.contains('post-tag-' + activeTag) : shouldShowAllItemsForEmptyFilter(collection, 'tag'));
}
if (canFilterCollectionByAuthor(collection)) {
listItems = listItems.filter(item => activeAuthor ? item.classList.contains('post-author-' + activeAuthor) : shouldShowAllItemsForEmptyFilter(collection, 'author'));
}
let perPage = collection.dataset.bssPerpage || listItems.length;
let visibleListItems = listItems.slice((page - 1) * perPage, page * perPage);
visibleListItems.forEach(item => item.style.removeProperty('display'));
let isEmpty = !visibleListItems.length;
if (isEmpty) {
loopBase && loopBase.style.setProperty('display', 'none', 'important');
emptyState && emptyState.style.removeProperty('display');
}
let itemCount = listItems.length;
let pageCount = Math.max(Math.ceil(itemCount / perPage), 1);
updateCollectionPagination(collection, page, pageCount, isEmpty);
if (collection.dataset.bssScrollOnChange) {
scrollToCollectionTop(collection);
}
}
function updateCollectionPagination(collection, page, pageCount, isEmpty) {
let pagination = getCollectionPagination(collection);
if (!pagination) return;
let paginationItems = [].slice.call(pagination.querySelectorAll('.page-item'));
if (pageCount === 1 || isEmpty) {
pagination.style.setProperty('display', 'none', 'important');
} else {
pagination.style.removeProperty('display');
}
let previousBtnDisabled = page - 1 <= 0;
let previousPage = previousBtnDisabled ? 1 : page - 1;
let nextBtnDisabled = page + 1 > pageCount;
let nextPage = nextBtnDisabled ? pageCount : page + 1;
for (let i = 0; i < paginationItems.length; i++) {
let paginationItem = paginationItems[i];
paginationItem.classList.remove('active', 'disabled');
if (paginationItem.dataset.type === 'prev') {
paginationItem.dataset.page = previousPage;
if (previousBtnDisabled) {
paginationItem.classList.add('disabled');
}
} else if (paginationItem.dataset.type === 'next') {
paginationItem.dataset.page = nextPage;
if (nextBtnDisabled) {
paginationItem.classList.add('disabled');
}
} else {
if (paginationItem.dataset.page > pageCount) {
paginationItem.style.setProperty('display', 'none', 'important');
} else {
paginationItem.style.removeProperty('display');
}
if (paginationItem.dataset.page == page) {
paginationItem.classList.add('active');
}
}
}
}
function scrollToCollectionTop(collection) {
const rect = collection.getBoundingClientRect();
const viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);
const threshold = 100;
if (rect.top >= 0 && viewHeight - rect.top > threshold) return;
setTimeout(() => {
collection.scrollIntoView({
behavior: "smooth",
block: "start",
inline: "start"
});
}, 0);
}
function updateTagNav(tagNav) {
const url = new URL(window.location.href);
let tagParam = 'tag';
let tag = url.searchParams.get(tagParam) || '';
renderTagNav(tagNav, tag);
}
function renderTagNav(tagNav, activeTag = '') {
if (!tagNav.dataset.bssSyncUrl) return;
let navItems = [].slice.call(tagNav.querySelectorAll('[data-bss-type="tag-loop-item"]'));
navItems.forEach(item => {
const activeClassNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
if (!activeClassNode) return;
activeClassNode.classList.remove('active');
const link = item.dataset.bssHref;
if (!linksToCurrentPage(link) || activeClassNode.classList.contains('disabled')) return;
if (item.dataset.bssTag === activeTag) {
activeClassNode.classList.add('active');
}
});
}
function updateAuthorNav(authorNav) {
const url = new URL(window.location.href);
let authorParam = 'author';
let author = url.searchParams.get(authorParam) || '';
renderAuthorNav(authorNav, author);
}
function renderAuthorNav(authorNav, activeAuthor = '') {
if (!canFilterCollectionByAuthor(authorNav)) return;
authorNav.style.removeProperty('display');
let items = [].slice.call(authorNav.querySelectorAll('[data-bss-type="author-loop-item"]'));
items.forEach(item => item.classList.contains('author-' + activeAuthor) ? item.style.removeProperty('display') : item.style.setProperty('display', 'none', 'important'));
}
})();
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
<script src="../../assets/js/bs-init.js?h=7c6b4c49b8ac0f383799ccb3d5def770"></script>
<script src="../../assets/js/Carousel---Slider-With-Animation-slider_with_animation.js?h=948f8788fd189b5cc9df01ff4fce4152"></script>
<script src="../../assets/js/CookieConsentComponent-cookieconsent.js?h=83fbb3192473604d72b00a854c6de4fd"></script>
<script src="https://kit.fontawesome.com/8970d94f9b.js"></script>
<script src="../../assets/js/pikaday.min.js?h=039feef26d52ebc5f1260a47208bfa38"></script>
<script src="../../assets/js/text-carousel.js?h=992f402828c7806b1f3bb7f29232e972"></script>
<script src="../../assets/js/theme.js?h=aeddb9c3ce5d77b8278c91c07acf30ad"></script>
</body>
</html>

View File

@@ -0,0 +1,783 @@
<!DOCTYPE html>
<html data-bs-theme="auto" lang="en-gb">
<head>
<meta charset="utf-8">
<!-- Matomo -->
<script>
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="//analytics.adcmnetworks.co.uk/";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '1']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<!-- End Matomo Code -->
<script src="https://kit.fontawesome.com/8970d94f9b.js" crossorigin="anonymous"></script>
<meta name="fediverse:creator" content="@MrDavisCSIT@mstdn.social">
<script src="https://cms.tahdah.me/scripts/publicbadge.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
<title>The Computer's Identity</title>
<link rel="canonical" href="https://www.mrlyall.uk/my-work/extracurricular-projects/the-computers-identity.html">
<meta property="og:url" content="https://www.mrlyall.uk/my-work/extracurricular-projects/the-computers-identity.html">
<meta name="twitter:description" content="The website of Mr. A. Lyall, featuring a portfolio of work in computing education, digital projects, and curriculum resources. Explore blog posts, classroom tools, and professional insights focused on innovation, inclusion, and effective IT teaching.">
<meta name="twitter:card" content="summary">
<meta property="og:type" content="website">
<meta name="twitter:title" content="Mr Lyall">
<meta property="og:image" content="https://www.mrlyall.uk/assets/img/projects/extracurricular/the_computers_identity/identitypreview.webp">
<meta name="description" content="Interactive poem entry for BCU Christian Union art competition displayed in binary format &amp; QR code.">
<script>
(function() {
// JavaScript snippet handling Dark/Light mode switching
const getStoredTheme = () => localStorage.getItem('theme');
const setStoredTheme = theme => localStorage.setItem('theme', theme);
const forcedTheme = document.documentElement.getAttribute('data-bss-forced-theme');
const getPreferredTheme = () => {
if (forcedTheme) return forcedTheme;
const storedTheme = getStoredTheme();
if (storedTheme) {
return storedTheme;
}
const pageTheme = document.documentElement.getAttribute('data-bs-theme');
if (pageTheme) {
return pageTheme;
}
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
}
const setTheme = theme => {
if (theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.documentElement.setAttribute('data-bs-theme', 'dark');
} else {
document.documentElement.setAttribute('data-bs-theme', theme);
}
}
setTheme(getPreferredTheme());
const showActiveTheme = (theme, focus = false) => {
const themeSwitchers = [].slice.call(document.querySelectorAll('.theme-switcher'));
if (!themeSwitchers.length) return;
document.querySelectorAll('[data-bs-theme-value]').forEach(element => {
element.classList.remove('active');
element.setAttribute('aria-pressed', 'false');
});
for (const themeSwitcher of themeSwitchers) {
const btnToActivate = themeSwitcher.querySelector('[data-bs-theme-value="' + theme + '"]');
if (btnToActivate) {
btnToActivate.classList.add('active');
btnToActivate.setAttribute('aria-pressed', 'true');
}
}
}
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
const storedTheme = getStoredTheme();
if (storedTheme !== 'light' && storedTheme !== 'dark') {
setTheme(getPreferredTheme());
}
});
window.addEventListener('DOMContentLoaded', () => {
showActiveTheme(getPreferredTheme());
document.querySelectorAll('[data-bs-theme-value]')
.forEach(toggle => {
toggle.addEventListener('click', (e) => {
e.preventDefault();
const theme = toggle.getAttribute('data-bs-theme-value');
setStoredTheme(theme);
setTheme(theme);
showActiveTheme(theme);
})
})
});
})();
</script>
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" media="(prefers-color-scheme: dark)">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="icon" type="image/png" sizes="4860x4860" href="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501">
<link rel="stylesheet" href="../../assets/bootstrap/css/bootstrap.min.css?h=c9d969cca6f72ca8d4dfd457f2e8eff8">
<link rel="stylesheet" href="../../assets/css/Lato.css?h=69bc5b06794edd4ca9a38642d36c83d0">
<link rel="stylesheet" href="../../assets/css/bss-overrides.css?h=15b91a8988c8fc6448a8989802a159de">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css">
<link rel="stylesheet" href="../../assets/css/styles.css?h=7c67e1bb3df4cb41abaceaf312f03dfa">
<link rel="stylesheet" href="../../assets/css/pikaday.min.css?h=a9ab8ca627aa6e8f64b730ca9c2c781d">
<link rel="stylesheet" href="../../assets/css/CookieConsentComponent.css?h=39af3305e95f4d2a8883e97d7e0cdb14">
<link rel="stylesheet" href="../../assets/css/animations.compiled.css?h=49917e33fe831aa33e24fb1e8124fdd9">
<link rel="stylesheet" href="../../assets/css/Carousel---Slider-With-Animation.css?h=63f5768f05d2ae91446ac010bcd4844a">
</head>
<body>
<nav class="navbar navbar-expand-md fixed-top portfolio-navbar gradient navbar-dark">
<div class="container-fluid"><a class="navbar-brand logo" href="../../"><img alt="Stylised white microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_white.webp?h=7cd31e9469bb0f9d3a4e704b3c0b1445" width="50" height="50" class="mobile-padding-left"></a><button data-bs-toggle="collapse" class="navbar-toggler" data-bs-target="#navbarNav" style="margin-right: 0.5em;"><span class="visually-hidden">Toggle navigation</span><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav ms-auto">
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../">Home</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../about">About</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../projects">My Work</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../my-work/showreel">Showreel</a></li>
<li class="nav-item mobile-padding-left"><a class="nav-link" href="../../blog">Blog</a></li>
</ul>
</div>
</div>
</nav>
<main class="page">
<section class="portfolio-block block-intro">
<div class="container center-everything">
<!-- Start: portfolio heading -->
<div class="align-content-center heading blog-heading identity-website">
<h2>The Computer's Identity</h2>
<p>Interactive poem entry for BCU Christian Union art competition displayed in binary format &amp; QR code.</p>
</div><!-- End: portfolio heading -->
</div>
</section>
<section class="portfolio-block project">
<div class="container center-everything">
<div class="swiper project-carousel" id="swiper-1" data-bss-swiper="{&quot;direction&quot;:&quot;horizontal&quot;,&quot;loop&quot;:true,&quot;autoplay&quot;:{&quot;pauseOnMouseEnter&quot;:true},&quot;autoHeight&quot;:true,&quot;keyboard&quot;:true,&quot;mousewheel&quot;:true,&quot;effect&quot;:&quot;creative&quot;,&quot;creativeEffect&quot;:{&quot;prev&quot;:{&quot;shadow&quot;:true,&quot;translate&quot;:[&quot;-20%&quot;,0,-1]},&quot;next&quot;:{&quot;translate&quot;:[&quot;100%&quot;,0,0]}},&quot;pagination&quot;:{&quot;el&quot;:&quot;.swiper-pagination&quot;,&quot;type&quot;:&quot;bullets&quot;,&quot;clickable&quot;:true,&quot;dynamicBullets&quot;:true},&quot;navigation&quot;:{&quot;nextEl&quot;:&quot;.swiper-button-next&quot;,&quot;prevEl&quot;:&quot;.swiper-button-prev&quot;}}">
<div class="swiper-wrapper">
<div class="swiper-slide d-flex justify-content-center"><img class="img-fluid slider-image-fit" alt="A minimalistic web interface titled “The Computers Identity” with a language selection menu offering English, Binary, Octal, ASCII, Hexadecimal, and Leet options. The background on the right is a blurred gradient of brown and grey tones." width="2500" height="1951" src="../../assets/img/projects/extracurricular/the_computers_identity/identity.webp?h=3fafc8688a3c690be78eaa527e51b0ea"></div>
</div>
<div>
<div class="swiper-button-prev swiper-control"></div>
<div class="swiper-button-next swiper-control"></div>
</div>
<div class="swiper-pagination swiper-control"></div>
</div>
<div class="row">
<div class="col info">
<p>Written in February 2017 for an art competition for BCU Christian Union's Missions Week "Where is Identity Found?". I created a QR code that would take the user to a website which will offer a selection of the poem in multiple formats including a binary format. In the gallery, the piece was displayed in the binary format with the QR code at the bottom of the piece.</p>
</div>
<div class="col-auto meta project-details">
<div class="tags"><span class="meta-heading">Project Status</span><span>Completed</span><span class="meta-heading">Client</span><span>Birmingham City Univeristy Christian Union</span><span class="meta-heading">Date</span><span>20-22 February 2016</span><span class="meta-heading">Products Created</span><span>Website and Poem</span><a class="btn btn-primary project-buttons" role="button" href="https://projects.mrdaviscsit.uk/identity/" target="_blank">View Project Website</a><a class="btn btn-primary project-buttons" role="button" href="https://gitea.adcmnetworks.co.uk/MrDavisCSIT/TheComputersIdentity" target="_blank">View Project on Gitea</a></div>
</div>
</div>
<div class="more-projects">
<h3 class="text-center more-projects-heading">More Projects</h3>
<div data-bss-type="blog-loop" data-bss-perpage="3" style="display: none !important;">
<div class="row gy-4 row-cols-1 row-cols-sm-2 row-cols-md-2 row-cols-lg-3 mt-0" data-bss-type="blog-loop-base">
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item">
<div class="card"><a href="citation-needed.html"><img class="img-fluid card-img-top rainbow-border" alt="Screenshot of login screen with fields for email and password." width="2500" height="1125" src="../../assets/img/projects/extracurricular/citation_needed/login_screen.webp?h=3626905284037118af731fe2573ac5f4"></a>
<div class="card-body"><a href="citation-needed.html">
<h4 class="text-body">Citation Needed</h4>
</a>
<p class="card-text">Creates BCU Harvard web citations; built to replace RefME, Cite This For Me, and other broken tools.</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item">
<div class="card"><a href="exam-buff-or-exam-bluff.html"><img class="img-fluid card-img-top rainbow-border" alt="Large red capital letter &quot;F&quot; inside a red circle on a transparent background." width="500" height="500" src="../../assets/img/projects/extracurricular/exam_buff_or_exam_bluff/exam_buff_or_exam_bluff_app_logo.webp?h=c5996308f0abaf2970a7fd4e8e1cdcbf"></a>
<div class="card-body"><a href="exam-buff-or-exam-bluff.html">
<h4 class="text-body">Exam Buff or Exam Bluff</h4>
</a>
<p class="card-text">Fast-paced CS quiz game for GCSE+ that tests code and theory using logic, speed, skill, and bluffing</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item">
<div class="card"><a href="i-am-aware.html"><img class="img-fluid card-img-top rainbow-border" alt="A collage of newspaper-style clippings with words like “Anxiety,” “Panic Attacks,” and “Depression,” with the phrase “I Am Aware” boldly overlaid in white text in the center of the image, framed by a thin white border." width="940" height="500" src="../../assets/img/projects/extracurricular/iamaware.webp?h=a3dcdbacf64839eb9dcfd0f9190b41fb"></a>
<div class="card-body"><a href="i-am-aware.html">
<h4 class="text-body">I Am Aware</h4>
</a>
<p class="card-text">BCU campaign exploring mental health resources and real stories of depression, anxiety, and bipolar.</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item" style="display: none !important;">
<div class="card"><a href="societyplus.html"><img class="img-fluid card-img-top rainbow-border" alt="A cropped screenshot of the Society+ Mental Health Awareness site at Birmingham City University. Shows the society logo, &quot;Society Name&quot; and &quot;Society description&quot; on a blue gradient background. A navigation bar with links for Home, Login, and Sign Up is visible at the top right. The layout highlights the societys brand and structure." width="940" height="500" src="../../assets/img/projects/extracurricular/society+/societypluspreview.webp?h=c5bf765f66449f21ca88f0206db68bd5"></a>
<div class="card-body"><a href="societyplus.html">
<h4 class="text-body">Society+</h4>
</a>
<p class="card-text">Platform for societies to manage sign-ups, send texts, and update info using PHP, SQL, and Nexmo API</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item" style="display: none !important;">
<div class="card"><a href="sortai.html"><img class="img-fluid card-img-top rainbow-border" alt="Terminal-style logo for Sort.AI. A green monospaced font reads [$~] sort on a black background, resembling a command-line interface." width="333" height="222" src="../../assets/img/projects/extracurricular/sort.ai/sort.ai_logo.webp?h=a198ffe5f200f284ee778dd6f7b1d741"></a>
<div class="card-body"><a href="sortai.html">
<h4 class="text-body">Sort.AI</h4>
</a>
<p class="card-text">AI file sorter using Google NLP in C#. Auto-categorises any file. Awarded 3rd place at BullHacks 1.0</p>
</div>
</div>
</div>
<div class="post-tag-extracurricular-projects col" data-bss-type="blog-loop-item" style="display: none !important;">
<div class="card"><a href="task-master-web.html"><img class="img-fluid card-img-top rainbow-border" alt="Preview image of the Task Master project homepage. It includes the same blue background and the main message “Welcome to BCU Hacks Task Master We Have No Idea What Were Doing!” without form fields." width="940" height="500" src="../../assets/img/projects/extracurricular/task_master/taskmasterpreview.webp?h=bece3f4d6e67029790c7b300d5db3393"></a>
<div class="card-body"><a href="task-master-web.html">
<h4 class="text-body">Task Master for Web</h4>
</a>
<p class="card-text">Business task manager with secure login, file upload area, MySQL. Awarded 3rd place at BrumHack 5.0.</p>
</div>
</div>
</div>
</div>
<nav class="d-flex justify-content-center mt-3" data-bss-type="blog-loop-pagination">
<ul class="pagination">
<li class="page-item disabled" data-type="prev" data-page="1"><a class="page-link" aria-label="Previous" href="#"><span aria-hidden="true">«</span></a></li>
<li class="page-item active" data-type="regular" data-page="1"><a class="page-link" href="#">1</a></li>
<li class="page-item" data-type="regular" data-page="2"><a class="page-link" href="#">2</a></li>
<li class="page-item" data-type="next" data-page="2"><a class="page-link" aria-label="Next" href="#"><span aria-hidden="true">»</span></a></li>
</ul>
</nav>
</div>
</div>
</div>
</section>
</main><!-- Start: Footer Multi Column -->
<footer class="text-body bg-body" id="Light-Footer">
<div class="container py-4 py-lg-5 center-everything">
<div class="row justify-content-center">
<!-- Start: Accreditations -->
<div class="col-sm-3 col-md-6 text-center text-lg-start d-none d-sm-none d-md-none d-lg-flex flex-column">
<h3 class="fs-6 text-center text-body accreditations-title">Accreditations</h3>
<div class="swiper text-body w-100" id="light-swiper" data-bss-swiper="{&quot;direction&quot;:&quot;horizontal&quot;,&quot;loop&quot;:true,&quot;autoplay&quot;:{&quot;pauseOnMouseEnter&quot;:true},&quot;autoHeight&quot;:true,&quot;effect&quot;:&quot;fade&quot;,&quot;fadeEffect&quot;:{&quot;crossFade&quot;:true}}">
<div class="swiper-wrapper">
<!-- Start: Mountain Training -->
<div class="swiper-slide d-flex justify-content-center center-everything">
<div class="tahdah-badge" data-candidateid="1466454"></div>
</div><!-- End: Mountain Training -->
<!-- Start: Canva Essentials -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-badge.webp?h=bc157efb7620e733f43b4b00981978ea"></a></div><!-- End: Canva Essentials -->
<!-- Start: Canva Essentials for Mobile -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-essentials-mobile" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/canva-essentials-for-mobile-badge.webp?h=93513f8f560a2e346c12aeb9fb0c18ec"></a></div><!-- End: Canva Essentials for Mobile -->
<!-- Start: Canva Graphic Design Essentials -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/graphic-design-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/graphic-design-essentials-badge.webp?h=f5406331e45433f0d8bd6b929f9d113b"></a></div><!-- End: Canva Graphic Design Essentials -->
<!-- Start: Marketing with Canva -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/marketing-with-canva" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/mr-a-davis-marketing-with-canva-badge.webp?h=f0b802da597c825b7e03378130d94aca"></a></div><!-- End: Marketing with Canva -->
<!-- Start: Canva for Work -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/canva-for-work" target="_blank"><img class="img-fluid w-100 accreditation" width="2160" height="2160" src="../../assets/img/accreditations/mr-a-davis-canva-for-work-badge.webp?h=b3617633e9d2de429288704f75b304f4"></a></div><!-- End: Canva for Work -->
<!-- Start: Canva Teacher Essentials -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/teacher-essentials" target="_blank"><img class="img-fluid w-100 accreditation" width="692" height="692" src="../../assets/img/accreditations/teacher-essentials-badge.webp?h=d2d6f962e0b1bbebc68f987d6f156028"></a></div><!-- End: Canva Teacher Essentials -->
<!-- Start: Canva AI in the Classroom -->
<div class="swiper-slide"><a href="https://www.canva.com/design-school/courses/ai-in-the-classroom" target="_blank"><img class="img-fluid w-100 accreditation" width="1080" height="1080" src="../../assets/img/accreditations/ai-in-the-classroom-badge.webp?h=769458ef2c323729c209855a3cde7312"></a></div><!-- End: Canva AI in the Classroom -->
<!-- Start: Adobe Creative Educator Level 1 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/3a49b473-4af9-4c5a-ab38-1c754f181c6e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Adobe Creative Educator Level 1&quot;" width="600" height="600" src="../../assets/img/accreditations/3_hours_adobe_creative_educator_level_1.webp?h=45de0c4e8984e885b1153e344e794beb"></a></div><!-- End: Adobe Creative Educator Level 1 -->
<!-- Start: Minecraft Education -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/53745c80-7d0a-4428-906a-839e905c139c/public_url" target="_blank"><img class="img-fluid w-100 accreditation" width="600" height="600" src="../../assets/img/accreditations/minecraft-education-ambassador.webp?h=5c614dffa9ab6d6fd77cd805b8397ffd"></a></div><!-- End: Minecraft Education -->
<!-- Start: MCE -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/9c9dd6cd-2703-4539-adc9-366069cbc3a9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MCE: Microsoft Certified Educator&quot;" width="352" height="352" src="../../assets/img/accreditations/mce_microsoft_certified_educator.webp?h=3e67f154a356cd1ef15c31b0fb42c0c4"></a></div><!-- End: MCE -->
<!-- Start: MIEE 2023-2024 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/b5ac17a1-0914-496f-9d85-9608966259ee/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Innovative Educator Expert 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2023_2024.webp?h=ee882aefba64b3e5b8ea9554eeea3847"></a></div><!-- End: MIEE 2023-2024 -->
<!-- Start: MIEE 2024-2025 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/ad92a7cb-3e4f-46e2-8e73-99dffd0eb69e/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Innovative Educator Expert 2024-2025&quot;" width="600" height="600" src="../../assets/img/accreditations/microsoft_innovative_educator_expert_2024_2025.webp?h=a0b5cb2a639caf0351a977146375667e"></a></div><!-- End: MIEE 2024-2025 -->
<!-- Start: Pearson OSA Expert -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/44756f05-e727-41c8-a352-a656c033c9f0/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Onscreen Assessment Expert GCSE Computer Science&quot;" width="800" height="800" src="../../assets/img/accreditations/pearson_onscreen_assessment_expert.webp?h=d4e00ea5bfad5a66c619238d7cbdd8db"></a></div><!-- End: Pearson OSA Expert -->
<!-- Start: STEM 21-22 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/52121ef6-0760-4870-91cc-1cb20001238b/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Establishing a STEM club - from creation to careers 2021/2022&quot;" width="1200" height="1200" src="../../assets/img/accreditations/establishing_a_stem_club_from_creation_to_careers_2021_2022.webp?h=7f96a591bd4fb09f86da96af8a8a41ef"></a></div><!-- End: STEM 21-22 -->
<!-- Start: NCCE Secondary 21-22 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/60d50339-2dda-4991-90b5-7ff087975746/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Secondary Computer Science - Professional Development 2021-2022&quot;" width="1200" height="1200" src="../../assets/img/accreditations/secondary_computer_science_professional_development_2021_2022.webp?h=813dd91393f904969bc3bf184007c8c2"></a></div><!-- End: NCCE Secondary 21-22 -->
<!-- Start: NCCE Secondary 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/e74f9011-4006-4570-824a-f483fdcb5b26/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Secondary Computing - Professional Development 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/secondary_computing_professional_development_2023_2.webp?h=77ebf2880eb7d342016b83e098d92d23"></a></div><!-- End: NCCE Secondary 23-24 -->
<!-- Start: NCCE GCSE Computer Science 19-20 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/c73720d2-8208-4e2b-a1e5-c473961834d9/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; GCSE Computer Science: Professional Development 2019-2020&quot;" width="1200" height="1200" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2019_2020.webp?h=fef2cee3326aeff9e2f65e86cf5e4fee"></a></div><!-- End: NCCE GCSE Computer Science 19-20 -->
<!-- Start: NCCE GCSE Computer Science 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/c486279a-8e97-4779-90c1-56f09622e782/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; GCSE Computer Science - Professional Development 2022-2023&quot;" width="2000" height="2000" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2022_2023.webp?h=0a54c55717b61c0a0b4ed80582d7bfae"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
<!-- Start: NCCE GCSE Computer Science 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/e76ed57f-2270-47f5-8e7e-4136baa261f3/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; GCSE Computer Science - Professional Development 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/gcse_computer_science_professional_development_2023.webp?h=71b8c59772af539946fb49a210b05758"></a></div><!-- End: NCCE GCSE Computer Science 23-24 -->
<!-- Start: NCCE A Level Computer Science 23-24 -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/418cfb22-3e37-4b24-b527-652b1ab6ea76/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; A-Level Computer Science - Professional Development 2023-2024&quot;" width="600" height="600" src="../../assets/img/accreditations/a_level_computer_science_professional_development.webp?h=a9cc6f73abdf82ab49e5f8a8695cb557"></a></div><!-- End: NCCE A Level Computer Science 23-24 -->
<!-- Start: MOS Master -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/0e46d6b8-1a1b-4d16-a5d5-3b95661fb290/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Master 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_master_2013.webp?h=70d957a5307d38f46b84b6462439afbc"></a></div><!-- End: MOS Master -->
<!-- Start: MOS Word Expert -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/287d0ca4-bea1-4e18-b9e7-21f6a5d5d571/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Word 2013 Expert&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013_expert.webp?h=5bd4ec8c82587201172a8b8e460ff4e6"></a></div><!-- End: MOS Word Expert -->
<!-- Start: MOS Word -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/f1831f0e-776b-49aa-8a8d-05817d4b1410/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Word 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_word_2013.webp?h=2b90c5590b7b50f1891a9116fa38ac36"></a></div><!-- End: MOS Word -->
<!-- Start: MOS Excel -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/2ab55353-3267-46cc-b3f4-3099af54d869/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: Excel 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_excel_2013.webp?h=f016925633d0a52b862259a05b396b6a"></a></div><!-- End: MOS Excel -->
<!-- Start: MOS PowerPoint -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/11162aa2-331a-4ec4-a612-665f3bc59cb1/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: PowerPoint 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_powerpoint_2013.webp?h=26de9623c491661347998549e10d4353"></a></div><!-- End: MOS PowerPoint -->
<!-- Start: MOS OneNote -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/cd328b1d-27b6-4410-be70-0792a99b72ea/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; Microsoft Office Specialist: OneNote 2013&quot;" width="352" height="352" src="../../assets/img/accreditations/microsoft_office_specialist_onenote_2013.webp?h=2ffe41c2a6e37d602469f8158ef13d79"></a></div><!-- End: MOS OneNote -->
<!-- Start: MTA Security -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/da3b3b4c-cec4-4537-bb5b-486ce9ee6ee7/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MTA: Security Fundamentals - Certified 2016&quot;" width="352" height="352" src="../../assets/img/accreditations/mta_security_fundamentals_certified_2016.webp?h=0df619419a5b6d0eb694dc9363870b20"></a></div><!-- End: MTA Security -->
<!-- Start: MTA Networking -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/23194bfe-30e4-4f8e-b9ec-338d060136dd/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MTA: Networking Fundamentals - Certified 2016&quot;" width="352" height="352" src="../../assets/img/accreditations/mta_networking_fundamentals_certified_2016.webp?h=cdc4618c5e86d11aa304cae14c3942bc"></a></div><!-- End: MTA Networking -->
<!-- Start: MTA Windows OS -->
<div class="swiper-slide"><a href="https://www.credly.com/badges/f0f27d87-424b-49e8-a444-95086d640e66/public_url" target="_blank"><img class="img-fluid w-100 accreditation" alt="Accreditation badge for: &quot; MTA: Windows Operating System Fundamentals - Certified 2016&quot;" width="352" height="352" src="../../assets/img/accreditations/mta_windows_operating_system_fundamentals_certified_2016.webp?h=44a6360480ef67ced301c697d31f9fa5"></a></div><!-- End: MTA Windows OS -->
</div>
</div>
<div class="swiper-nav-standalone d-flex justify-content-center accreditations-navigation" data-bss-swiper-target="#light-swiper">
<div class="swiper-button-prev"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-left">
<path fill-rule="evenodd" d="M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8"></path>
</svg></button></div>
<div class="swiper-button-next"><button class="btn btn-primary btn-sm" type="button"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-arrow-right">
<path fill-rule="evenodd" d="M1 8a.5.5 0 0 1 .5-.5h11.793l-3.147-3.146a.5.5 0 0 1 .708-.708l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 0 1-.708-.708L13.293 8.5H1.5A.5.5 0 0 1 1 8"></path>
</svg></button></div>
</div>
</div><!-- End: Accreditations -->
<!-- Start: Spacer -->
<div class="col-md-3 text-center text-lg-start d-flex flex-column"><a class="d-flex w-100 justify-content-center center-everything" href="https://client.brixly.uk/aff.php?aff=837" target="_blank"><img class="img-fluid object-fit-contain w-50" src="https://brixly.uk/wp-content/uploads/2022/06/Artboard-32.jpg"></a></div><!-- End: Spacer -->
<div class="col-md-3 text-center text-lg-start d-flex flex-column align-items-center order-first align-items-lg-start order-lg-last">
<div class="fw-bold d-flex align-items-center mb-2"><img alt="Stylised orange microchip icon on a black background, designed as a modern tech-themed logo for ADCM" src="../../assets/img/brand/adcm_logo_accent.webp?h=62dbf084286026c4b6de08d0203df501" width="50" height="50" class="footer-logo"><span>Mr A Lyall</span></div>
<p>IT professional and Head of Computing in the West Midlands</p>
</div>
</div>
<hr>
<div class="d-flex justify-content-between align-items-center pt-3">
<p class="mb-0 footer-copyright">Copyright © 2025 ADCM Networks</p>
<ul class="list-inline mb-0">
<!-- Start: Mastodon -->
<li class="list-inline-item"><a rel="me" href="https://mstdn.social/@MrDavisCSIT"><svg class="text-body" xmlns="http://www.w3.org/2000/svg" viewBox="-32 0 512 512" width="1em" height="1em" fill="currentColor">
<!--! Font Awesome Free 6.4.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc. -->
<path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"></path>
</svg></a></li><!-- End: Mastodon -->
<!-- Start: Bluesky -->
<li class="list-inline-item"><a href="https://bsky.app/profile/adcmnetworks.co.uk"><i class="fa-brands fa-square-bluesky"></i></a></li><!-- End: Bluesky -->
<!-- Start: LinkedIn -->
<li class="list-inline-item"><a href="https://www.linkedin.com/in/MrDavisCSIT/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-linkedin text-body">
<path d="M0 1.146C0 .513.526 0 1.175 0h13.65C15.474 0 16 .513 16 1.146v13.708c0 .633-.526 1.146-1.175 1.146H1.175C.526 16 0 15.487 0 14.854V1.146zm4.943 12.248V6.169H2.542v7.225h2.401m-1.2-8.212c.837 0 1.358-.554 1.358-1.248-.015-.709-.52-1.248-1.342-1.248-.822 0-1.359.54-1.359 1.248 0 .694.521 1.248 1.327 1.248h.016zm4.908 8.212V9.359c0-.216.016-.432.08-.586.173-.431.568-.878 1.232-.878.869 0 1.216.662 1.216 1.634v3.865h2.401V9.25c0-2.22-1.184-3.252-2.764-3.252-1.274 0-1.845.7-2.165 1.193v.025h-.016a5.54 5.54 0 0 1 .016-.025V6.169h-2.4c.03.678 0 7.225 0 7.225h2.4"></path>
</svg></a></li><!-- End: LinkedIn -->
<!-- Start: GitHub -->
<li class="list-inline-item"><a href="https://github.com/MrDavisCSIT"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-github text-body">
<path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8"></path>
</svg></a></li><!-- End: GitHub -->
<!-- Start: Reddit -->
<li class="list-inline-item"><a href="https://www.reddit.com/user/AlexanderEDavis95/"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-reddit text-body">
<path d="M6.167 8a.831.831 0 0 0-.83.83c0 .459.372.84.83.831a.831.831 0 0 0 0-1.661m1.843 3.647c.315 0 1.403-.038 1.976-.611a.232.232 0 0 0 0-.306.213.213 0 0 0-.306 0c-.353.363-1.126.487-1.67.487-.545 0-1.308-.124-1.671-.487a.213.213 0 0 0-.306 0 .213.213 0 0 0 0 .306c.564.563 1.652.61 1.977.61zm.992-2.807c0 .458.373.83.831.83.458 0 .83-.381.83-.83a.831.831 0 0 0-1.66 0z"></path>
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0m-3.828-1.165c-.315 0-.602.124-.812.325-.801-.573-1.9-.945-3.121-.993l.534-2.501 1.738.372a.83.83 0 1 0 .83-.869.83.83 0 0 0-.744.468l-1.938-.41a.203.203 0 0 0-.153.028.186.186 0 0 0-.086.134l-.592 2.788c-1.24.038-2.358.41-3.17.992-.21-.2-.496-.324-.81-.324a1.163 1.163 0 0 0-.478 2.224c-.02.115-.029.23-.029.353 0 1.795 2.091 3.256 4.669 3.256 2.577 0 4.668-1.451 4.668-3.256 0-.114-.01-.238-.029-.353.401-.181.688-.592.688-1.069 0-.65-.525-1.165-1.165-1.165z"></path>
</svg></a></li><!-- End: Reddit -->
<!-- Start: YouTube -->
<li class="list-inline-item"><a href="https://www.youtube.com/channel/UCgDhiQMLbTemv2varDiW2rA"><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" fill="currentColor" viewBox="0 0 16 16" class="bi bi-youtube text-body">
<path d="M8.051 1.999h.089c.822.003 4.987.033 6.11.335a2.01 2.01 0 0 1 1.415 1.42c.101.38.172.883.22 1.402l.01.104.022.26.008.104c.065.914.073 1.77.074 1.957v.075c-.001.194-.01 1.108-.082 2.06l-.008.105-.009.104c-.05.572-.124 1.14-.235 1.558a2.007 2.007 0 0 1-1.415 1.42c-1.16.312-5.569.334-6.18.335h-.142c-.309 0-1.587-.006-2.927-.052l-.17-.006-.087-.004-.171-.007-.171-.007c-1.11-.049-2.167-.128-2.654-.26a2.007 2.007 0 0 1-1.415-1.419c-.111-.417-.185-.986-.235-1.558L.09 9.82l-.008-.104A31.4 31.4 0 0 1 0 7.68v-.123c.002-.215.01-.958.064-1.778l.007-.103.003-.052.008-.104.022-.26.01-.104c.048-.519.119-1.023.22-1.402a2.007 2.007 0 0 1 1.415-1.42c.487-.13 1.544-.21 2.654-.26l.17-.007.172-.006.086-.003.171-.007A99.788 99.788 0 0 1 7.858 2h.193zM6.4 5.209v4.818l4.157-2.408z"></path>
</svg></a></li><!-- End: YouTube -->
</ul>
</div>
</div>
</footer><!-- End: Footer Multi Column -->
<script>
(function() {
let collections = document.querySelectorAll('[data-bss-type="blog-loop"]');
let tagNavs = document.querySelectorAll('[data-bss-type="tag-nav"]');
let tagLoops = document.querySelectorAll('[data-bss-type="tag-loop"]');
let authorLoops = document.querySelectorAll('[data-bss-type="author-loop"]');
let authorNavs = document.querySelectorAll('[data-bss-type="author-nav"]');
window.addEventListener("popstate", (e) => {
for (let collection of collections) {
updateCollection(collection);
}
for (let tagNav of tagNavs) {
updateTagNav(tagNav);
}
for (let authorNav of authorNavs) {
updateAuthorNav(authorNav);
}
});
for (let collection of collections) {
updateCollection(collection);
if (!canPaginateCollection(collection)) continue;
let pagination = collection.querySelector('[data-bss-type="blog-loop-pagination"]');
pagination.addEventListener('click', function(e) {
let paginationItem = e.target.closest('.page-item');
if (!paginationItem) return;
e.preventDefault();
if (paginationItem.classList.contains('disabled') || paginationItem.classList.contains('active')) return;
let collection = paginationItem.closest('[data-bss-type="blog-loop"]');
if (!collection) return;
let page = parseInt(paginationItem.dataset.page);
if (!page) return;
let pageParam = getPageParameter(collection);
if (pageParam) {
const url = new URL(window.location);
url.searchParams.set(pageParam, page);
history.pushState({
[pageParam]: page
}, document.title, url);
for (let c of collections) {
let param = getPageParameter(c);
if (param !== pageParam) continue;
updateCollection(c);
}
} else {
updateCollection(collection, page);
}
});
}
for (let tagNav of tagNavs) {
updateTagNav(tagNav);
tagNav.addEventListener('click', onTagClick);
}
for (let tagLoop of tagLoops) {
tagLoop.addEventListener('click', onTagClick);
}
for (let authorLoop of authorLoops) {
authorLoop.addEventListener('click', onAuthorClick);
}
for (let authorNav of authorNavs) {
updateAuthorNav(authorNav);
}
function onTagClick(e) {
onBlogFilterClick(e);
for (let nav of tagNavs) {
updateTagNav(nav);
}
}
function onAuthorClick(e) {
onBlogFilterClick(e);
for (let authorNav of authorNavs) {
updateAuthorNav(authorNav);
}
}
function onBlogFilterClick(e) {
const item = e.target.closest('[data-bss-filter="blog"]');
if (!item || !item.dataset.hasOwnProperty('bssHref') || !item.dataset.hasOwnProperty('bssFilterParam')) return;
const stateNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
if (stateNode && (stateNode.classList.contains('disabled') || stateNode.classList.contains('active'))) {
e.preventDefault();
return;
}
const link = item.dataset.bssHref;
if (!linksToCurrentPage(link)) return;
e.preventDefault();
const url = new URL(window.location);
const filterParam = item.dataset.bssFilterParam;
const filterValue = item.dataset.bssFilterValue || '';
const collectionsToUpdate = [];
const newQueryParams = {
[filterParam]: filterValue
};
for (let c of collections) {
if (!canFilterCollection(c)) continue;
collectionsToUpdate.push(c);
let pageParam = getPageParameter(c);
let page = url.searchParams.get(pageParam);
if (page === null || page == 1) continue;
newQueryParams[pageParam] = 1;
}
for (let param in newQueryParams) {
if (newQueryParams[param]) {
url.searchParams.set(param, newQueryParams[param]);
} else {
url.searchParams.delete(param);
}
}
history.pushState(newQueryParams, document.title, url);
for (let c of collectionsToUpdate) {
updateCollection(c);
}
}
function getCollectionFilters(collection) {
let filters = [];
try {
const parsed = JSON.parse(collection.dataset.bssFilters);
if (Array.isArray(parsed)) {
filters = parsed;
}
} catch (e) {}
return filters;
}
function getCollectionEmptyFilterAction(collection, filter = '') {
let emptyFilterActions = [];
try {
const parsed = JSON.parse(collection.dataset.bssEmptyFilterActions);
if (Array.isArray(parsed)) {
emptyFilterActions = parsed;
}
} catch (e) {}
const action = emptyFilterActions.find(action => action.filter === filter);
return action ? action.value : '';
}
function canFilterCollection(collection) {
return !!getCollectionFilters(collection).length;
}
function canFilterCollectionByTag(collection) {
return getCollectionFilters(collection).includes('tag');
}
function canFilterCollectionByAuthor(collection) {
return getCollectionFilters(collection).includes('author');
}
function shouldShowAllItemsForEmptyFilter(collection, filter = '') {
return getCollectionEmptyFilterAction(collection, filter) === 'show-all';
}
function canPaginateCollection(collection) {
return !!getCollectionPagination(collection);
}
function getCollectionPagination(collection) {
return collection.querySelector('[data-bss-type="blog-loop-pagination"]');
}
function getPageParameter(collection) {
return collection.dataset.bssPageParam;
}
function linksToCurrentPage(path = '') {
let currentURL, url;
try {
currentURL = new URL(window.location);
url = new URL(path, window.location.href);
} catch (e) {
console.error(e);
}
return currentURL.origin === url.origin && currentURL.pathname === url.pathname;
}
function updateCollection(collection, page, activeTag = '', activeAuthor = '') {
const url = new URL(window.location.href);
if (canPaginateCollection(collection)) {
if (!page) {
let pageParam = getPageParameter(collection);
page = (pageParam ? url.searchParams.get(pageParam) : 1) || 1;
}
}
if (canFilterCollectionByTag(collection) && !activeTag) {
let tagParam = 'tag';
activeTag = url.searchParams.get(tagParam) || '';
}
if (canFilterCollectionByAuthor(collection) && !activeAuthor) {
let authorParam = 'author';
activeAuthor = url.searchParams.get(authorParam) || '';
}
renderCollectionPage(collection, page, activeTag, activeAuthor);
}
function renderCollectionPage(collection, page = 1, activeTag = '', activeAuthor = '') {
page = Math.max(parseInt(page, 10), 1);
collection.style.removeProperty('display');
let loopBase = collection.querySelector('[data-bss-type="blog-loop-base"]');
loopBase && loopBase.style.removeProperty('display');
let emptyState = collection.querySelector('[data-bss-type="empty-state"]');
emptyState && emptyState.style.setProperty('display', 'none', 'important');
let listItems = [].slice.call(collection.querySelectorAll('[data-bss-type="blog-loop-item"]'));
listItems.forEach(item => item.style.setProperty('display', 'none', 'important'));
if (canFilterCollectionByTag(collection)) {
listItems = listItems.filter(item => activeTag ? item.classList.contains('post-tag-' + activeTag) : shouldShowAllItemsForEmptyFilter(collection, 'tag'));
}
if (canFilterCollectionByAuthor(collection)) {
listItems = listItems.filter(item => activeAuthor ? item.classList.contains('post-author-' + activeAuthor) : shouldShowAllItemsForEmptyFilter(collection, 'author'));
}
let perPage = collection.dataset.bssPerpage || listItems.length;
let visibleListItems = listItems.slice((page - 1) * perPage, page * perPage);
visibleListItems.forEach(item => item.style.removeProperty('display'));
let isEmpty = !visibleListItems.length;
if (isEmpty) {
loopBase && loopBase.style.setProperty('display', 'none', 'important');
emptyState && emptyState.style.removeProperty('display');
}
let itemCount = listItems.length;
let pageCount = Math.max(Math.ceil(itemCount / perPage), 1);
updateCollectionPagination(collection, page, pageCount, isEmpty);
if (collection.dataset.bssScrollOnChange) {
scrollToCollectionTop(collection);
}
}
function updateCollectionPagination(collection, page, pageCount, isEmpty) {
let pagination = getCollectionPagination(collection);
if (!pagination) return;
let paginationItems = [].slice.call(pagination.querySelectorAll('.page-item'));
if (pageCount === 1 || isEmpty) {
pagination.style.setProperty('display', 'none', 'important');
} else {
pagination.style.removeProperty('display');
}
let previousBtnDisabled = page - 1 <= 0;
let previousPage = previousBtnDisabled ? 1 : page - 1;
let nextBtnDisabled = page + 1 > pageCount;
let nextPage = nextBtnDisabled ? pageCount : page + 1;
for (let i = 0; i < paginationItems.length; i++) {
let paginationItem = paginationItems[i];
paginationItem.classList.remove('active', 'disabled');
if (paginationItem.dataset.type === 'prev') {
paginationItem.dataset.page = previousPage;
if (previousBtnDisabled) {
paginationItem.classList.add('disabled');
}
} else if (paginationItem.dataset.type === 'next') {
paginationItem.dataset.page = nextPage;
if (nextBtnDisabled) {
paginationItem.classList.add('disabled');
}
} else {
if (paginationItem.dataset.page > pageCount) {
paginationItem.style.setProperty('display', 'none', 'important');
} else {
paginationItem.style.removeProperty('display');
}
if (paginationItem.dataset.page == page) {
paginationItem.classList.add('active');
}
}
}
}
function scrollToCollectionTop(collection) {
const rect = collection.getBoundingClientRect();
const viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight);
const threshold = 100;
if (rect.top >= 0 && viewHeight - rect.top > threshold) return;
setTimeout(() => {
collection.scrollIntoView({
behavior: "smooth",
block: "start",
inline: "start"
});
}, 0);
}
function updateTagNav(tagNav) {
const url = new URL(window.location.href);
let tagParam = 'tag';
let tag = url.searchParams.get(tagParam) || '';
renderTagNav(tagNav, tag);
}
function renderTagNav(tagNav, activeTag = '') {
if (!tagNav.dataset.bssSyncUrl) return;
let navItems = [].slice.call(tagNav.querySelectorAll('[data-bss-type="tag-loop-item"]'));
navItems.forEach(item => {
const activeClassNode = item.dataset.hasOwnProperty('bssStateNode') ? item : item.querySelector('[data-bss-state-node]');
if (!activeClassNode) return;
activeClassNode.classList.remove('active');
const link = item.dataset.bssHref;
if (!linksToCurrentPage(link) || activeClassNode.classList.contains('disabled')) return;
if (item.dataset.bssTag === activeTag) {
activeClassNode.classList.add('active');
}
});
}
function updateAuthorNav(authorNav) {
const url = new URL(window.location.href);
let authorParam = 'author';
let author = url.searchParams.get(authorParam) || '';
renderAuthorNav(authorNav, author);
}
function renderAuthorNav(authorNav, activeAuthor = '') {
if (!canFilterCollectionByAuthor(authorNav)) return;
authorNav.style.removeProperty('display');
let items = [].slice.call(authorNav.querySelectorAll('[data-bss-type="author-loop-item"]'));
items.forEach(item => item.classList.contains('author-' + activeAuthor) ? item.style.removeProperty('display') : item.style.setProperty('display', 'none', 'important'));
}
})();
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
<script src="../../assets/js/bs-init.js?h=7c6b4c49b8ac0f383799ccb3d5def770"></script>
<script src="../../assets/js/Carousel---Slider-With-Animation-slider_with_animation.js?h=948f8788fd189b5cc9df01ff4fce4152"></script>
<script src="../../assets/js/CookieConsentComponent-cookieconsent.js?h=83fbb3192473604d72b00a854c6de4fd"></script>
<script src="https://kit.fontawesome.com/8970d94f9b.js"></script>
<script src="../../assets/js/pikaday.min.js?h=039feef26d52ebc5f1260a47208bfa38"></script>
<script src="../../assets/js/text-carousel.js?h=992f402828c7806b1f3bb7f29232e972"></script>
<script src="../../assets/js/theme.js?h=aeddb9c3ce5d77b8278c91c07acf30ad"></script>
</body>
</html>