{"id":6842,"date":"2026-09-07T14:40:54","date_gmt":"2026-09-07T12:40:54","guid":{"rendered":"https:\/\/weblearning.co.za\/blog\/?p=6842"},"modified":"2026-09-07T14:43:54","modified_gmt":"2026-09-07T12:43:54","slug":"a-post-about-lamp-posts","status":"publish","type":"post","link":"https:\/\/weblearning.co.za\/blog\/a-post-about-lamp-posts\/","title":{"rendered":"A post about lamp posts"},"content":{"rendered":"\n<style> \/* Day mode *\/ body { transition: background 0.8s ease, color 0.8s ease; } \/* Night mode *\/ body.night { background: #101827 !important; color: white; } #themeToggle { cursor: pointer; padding: 10px 18px; border: none; border-radius: 8px; background: #2c3e50; color: white; font-size: 16px; } #themeToggle:hover { background: #1a252f; } #icon { font-size: 40px; } <\/style> <div id=\"themeBox\"> <div id=\"icon\">\ud83c\udf1e<\/div> <button id=\"themeToggle\" type=\"button\"> \ud83d\udca1 Streetlight Watch <\/button> <\/div> <script> document.addEventListener(\"DOMContentLoaded\", function () { const button = document.getElementById(\"themeToggle\"); const icon = document.getElementById(\"icon\"); if (!button || !icon) { console.error(\"Theme toggle elements were not found.\"); return; } button.addEventListener(\"click\", function () { document.body.classList.toggle(\"night\"); const night = document.body.classList.contains(\"night\"); if (night) { icon.textContent = \"\ud83c\udf19\"; button.textContent = \"\ud83d\udca1 Only moonlight, no streetlight\"; } else { icon.textContent = \"\ud83d\udca1\"; button.textContent = \"\ud83c\udf19 Streetlight Watch\"; } }); }); <\/script>\n\n\n\n<h4 class=\"wp-block-heading\">Introduction: <\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Streetlights &#8211; it seems like there are far more pressing things to be irked about. But poorly maintained public lighting is a very visible instance of failing infrastructure and the opportunity to show that city management responds to reports and addresses them.  An app to the rescue? That is magical thinking. Devices don&#8217;t bring about change. Systemic thinking does. Let&#8217;s avoid the pothole app solution. Perhaps there is someone in the municipality who can think wholistically about public safety and lighting and design an internal reporting system that encourages all municipal employees (and citizens) to do a streetlight watch (and doe not require the closure of a walk-in centre)? The specifications below are only for the application.     <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Features <\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Geolocation so that the latitude and longitude of the faulty street lamp can be mapped on a mapping service like leaflet. A photograph can be taken of the faulty light and shared for identification purposes. Textfield is available to report the nature of the problem in greater detail, but this should not be essential. User account so that reporters are acknowledged and appreciated. Data is submitted to an open database. The information then is available to all to inspect and it can can appear on an open street map (see <a href=\"https:\/\/www.dailymaverick.co.za\/article\/2026-01-18-joburg-residents-in-the-dark-as-streetlight-repair-time-skyrockets\/\">the Daily Maverick  example<\/a>). Data can also be exported.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Schema for data flow<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>     Municipal Employees &amp; Citizens\n                \u2502\n                \u25bc\n         Streetlight Watch \n                \u2502\n    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n    \u25bc           \u25bc           \u25bc\n  GPS         PHOTO       REPORT\n    \u2502           \u2502           \u2502\n    \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n                \u25bc\n       Insert to OPEN Database\n                \u2502\n      \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n      \u25bc         \u25bc         \u25bc\n    MAP       ADMIN     EMAIL\n              DASHBOARD  ALERT\n                \u2502\n                \u25bc\n         Maintenance Team\n                \u2502\n                \u25bc\n              FIXED<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Noteworthy code<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">View the (incomplete) example on codepen.  <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"726\" src=\"https:\/\/weblearning.co.za\/blog\/wp-content\/uploads\/2026\/09\/image-1024x726.png\" alt=\"\" class=\"wp-image-6843\" srcset=\"https:\/\/weblearning.co.za\/blog\/wp-content\/uploads\/2026\/09\/image-1024x726.png 1024w, https:\/\/weblearning.co.za\/blog\/wp-content\/uploads\/2026\/09\/image-300x213.png 300w, https:\/\/weblearning.co.za\/blog\/wp-content\/uploads\/2026\/09\/image-768x544.png 768w, https:\/\/weblearning.co.za\/blog\/wp-content\/uploads\/2026\/09\/image.png 1235w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Detailed Specs<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Analysis:<\/strong> Current system and the desired state. Data flow diagram. Performance indicators and standard user<\/li>\n\n\n\n<li><strong>User Interface &amp; Design<\/strong>: Choice of software, proposed new design, detailed design, template<\/li>\n\n\n\n<li><strong>Testing<\/strong>: App documentation, Problem reporting and resolution flow, Functionality (GPS Location, Photo Upload, map functionality) <\/li>\n\n\n\n<li><strong>Evaluation<\/strong>: Status Management, Report Numbers, Streetlights fixed   <\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Credit to Pat Heathcote and her series of textbooks about ICT projects. Her work is far more comprehensive than this brief example. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud83c\udf1e \ud83d\udca1 Streetlight Watch Introduction: Streetlights &#8211; it seems like there are far more pressing things to be irked about. But poorly maintained public lighting is a very visible instance of failing infrastructure and the opportunity to show that city management responds to reports and addresses them. An app to the rescue? That is magical &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/weblearning.co.za\/blog\/a-post-about-lamp-posts\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;A post about lamp posts&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"episode_type":"","audio_file":"","cover_image":"","cover_image_id":"","duration":"","filesize":"","filesize_raw":"","date_recorded":"","explicit":"","block":"","itunes_episode_number":"","itunes_title":"","itunes_season_number":"","itunes_episode_type":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1],"tags":[],"class_list":["post-6842","post","type-post","status-publish","format-standard","hentry","category-file","entry"],"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/weblearning.co.za\/blog\/wp-json\/wp\/v2\/posts\/6842","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/weblearning.co.za\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/weblearning.co.za\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/weblearning.co.za\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/weblearning.co.za\/blog\/wp-json\/wp\/v2\/comments?post=6842"}],"version-history":[{"count":3,"href":"https:\/\/weblearning.co.za\/blog\/wp-json\/wp\/v2\/posts\/6842\/revisions"}],"predecessor-version":[{"id":6846,"href":"https:\/\/weblearning.co.za\/blog\/wp-json\/wp\/v2\/posts\/6842\/revisions\/6846"}],"wp:attachment":[{"href":"https:\/\/weblearning.co.za\/blog\/wp-json\/wp\/v2\/media?parent=6842"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/weblearning.co.za\/blog\/wp-json\/wp\/v2\/categories?post=6842"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/weblearning.co.za\/blog\/wp-json\/wp\/v2\/tags?post=6842"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}