الثلاثاء، مايو 03، 2016

مرصد الأحمال على شبكة الكهرباء المصرية

البداية

في بداية شهر أغسطس من العام الماضي، لفتت تدوينة نشرها صديقي "طارق عمرو" على موقع "منظمة المعرفة المفتوحة" تتحدث عن تطبيق نشره "جهاز تنظيم مرفق الكهرباء وحماية المستهلك" على الانترنت لنشر حالة الأحمال على الشبكة الكهربائية في مصر.

نوه "طارق" في تدوينته إلى حقيقة أن التطبيق: 

لا يوفر البيانات بصيغة يفهمها الحاسب، كمثال أن تكون في صورة ملف جيسون أو أر إس إس توفره واجهة إستخدام المبرمج، ومن ثم، أطرح عليكم المشكلة وإن كان بإمكان أحدكم عمل كاشط – سكرابر – لإستخراج البيانات من التطبيق وتوفيرها في صورة مناسبة للحاسب"

أثارت التدوينة فضولي، فقمت بالتحقق من الـHTML code المكون للتطبيق، وأمضيت بعض الوقت أتفحصه لأجد أي نمط يمكن الاعتماد عليه لمعرفة الحالة الحالية للحمل. بعدما توصلت لهذا النمط قمت بكتابة برنامج لاستخلاص هذه البيانات بتقنيات الـweb scraping. في البدء كتبت التطبيق بلغة البرمجة Python.

انتبهت بعد ذلك إلى مشكلة أخرى في التطبيق الخاص بجهاز تنظيم مرفق الكهرباء. التطبيق يظهر فقط البيانات الخاصة باليوم الحالي. بمعنى أنه يظهر تطور حالة الحمل خلال اليوم، لكن بمجرد انقضاء اليوم فإن هذه البيانات تختفي ولا يعود بإمكاننا مطالعتها مرة أخرى. 

كانت هذه هي اللحظة التي قررت فيها البناء على البرنامج الذي كتبته ليحل المشكلتين المذكورتين: 

  1. ليقوم بتخزين هذه البيانات حتى يمكنني الرجوع إليها عند الحاجة.
  2. ليوفر هذه البيانات في صيغة يمكن استخدامها عن طريق الحاسوب.

قمت بإعادة تطوير البرنامج الذي كتبته بلغة PHP التي يدعمها مزود خدمة الاستضافة الذي أستخدمه، ثم قمت في اليوم التالي بوضعه على دومين فرعي من موقعي الشخصي: power-grid-status.mos3abof.com 

قام طارق بالإشارة إلى تطبيقي في تدوينة لاحقة. في نفس التدوينة أشار أيضا إلى تطبيق بلغة Javascript يظهر الحالة الحالية للحمل قام "كريم قشوع" بتطويره خصيصا لتضمينه في مواقع الانترنت.

وكانت تلك بداية الرحلة.

قمت بعدها بشراء اسم النطاق -Domain name- الخاص بالموقع في 15 سبتمبر عام 2014، ليصبح عنوان الموقع:  www.gridstatusnow.com


تسعة أشهر مرت الآن منذ أطلقت "مرصد حالة الأحمال على شبكة الكهرباء المصرية". حدث فيها الكثير. سأقوم بذكر أمور متفرقة هنا دون ترتيب زمني محدد. 

الظهور الإعلامي الأول، والأخير حتى الآن! 


عندما علم صديقي "أحمد الدريني" بأمر التطبيق الذي نشرته على صفحات التواصل الاجتماعي طلب مني أن أقوم بمداخلة هاتفية مع برنامج "الصحافة اليوم" الذي يذاع على قناة "النهار اليوم" و يشارك أحمد في إعداده. وافقت بتردد لأنني لست مقتنعا أنه برنامج قيم بعد.

عندما حان موعد المداخلة الهاتفية كنت في شارع القصر العيني، واضطررت لأدخل إلى شارع هادئ من شوارع "جاردن سيتي" واستخدام الـheadset الخاصة بي حتى أستطيع أن أسمع بوضوح أكثر ما تقوله المذيعة. الحمدلله، مرت على خير! 

يمكنكم مشاهدة المداخلة-من الدقيقةالسابعة عشر إلى الدقيقة السابعة والعشرين- بالضغط هنا. 

تطبيقات تستخدم واجهة التطبيقات البرمجية الخاصة بالمشروع 

مر المشروع بعد ذلك بعدة مراحل تطور. من تحسين في واجهة الاستخدام -شكرا "عمرو صبحي" و"عاصم إمام" على مداخلاتكما المفيدة- إلى توفير توثيق أفضل لواجهة التطبيق البرمجية API التي تتيح للمطورين حالة الحمل الحالية. 

للأسف فإن البيانات التي يتيحها موقع الجهاز هي حالة الحمل على كل الشبكة الكهربائية، وليست موزعة جغرافيا حسب المحافظة مثلا، وإنما هي كل جمهورية مصر العربية. كذلك فإن البيانات المتاحة تعبر عن مستوى الحمل بحالة من ثلاث: 

  • خطر
  • إنذار
  • آمن
ولا توجد معلومات أكثر من ذلك. ولكنني قمت بتسجيلها على أية حال، فما لا يدرك كله، لا يترك جله. 

قمت كذلك بصنع أرشيف تأريخي يعرض حالة الحمل حسب الشهر بدءا من أغسطس 2014. هذا الأرشيف متاح للجميع على شكل Visualization لحالة الحمل في ساعات اليوم، كل يوم في الشهر. 

كما ترى في الصورة أعلاه، كل سطر يمثل يوما من أيام الشهر. كل مربع في اليوم يمثل ساعة. ويبدأ اليوم من يسار السطر، عند منتصف الليل، إلى يمينه، عند منتصف ليل اليوم التالي. 

راسلني عدة أشخاص ليخبروني عن تطوير تطبيقات تستخدم واجهة التطبيقات الخاصة بي، وهو أحد الأهداف الرئيسية للمشروع. أن يقوم بتوفير البيانات في صيغة يفهمها الحاسوب لتسهل على المطورين إدماجها في تطبيقاتهم المختلفة. 

أذكر من هذه التطبيقات تطبيقا يدعى "يا لهوي"، وهو عبارة عن تطبيق لأجهزة الحاسوب، يقوم بإخطار المستخدم دوريا -حسب مدة يستطيع المستخدم أن يحددها بنفسه- بحالة الحمل الآن على الشبكة الكهربائية. 

أيضا راسلني أحد أصحاب الشركات ليخبرني أنه قام بتطوير "روبوت" يقوم بنشر معلومات حول حالة الحمل بالتغريد على شبكة تويتر والنشر على شبكة التواصل الاجتماعي فيسبوك. 

قمت اليوم كذلك بصنع إنفوجرافيك يقوم بعمل visualization لحالة الحمل على مدار العام 2014 كاملا من واقع البيانات التي قمت بحفظها. يمكنك تحميل الإنفوجرافيك من هنا. طبعا يظهر أكثر من منتصف العام "رماديا" وذلك نظرا لأنني بدأت في تسجيل البيانات في منتصف شهر أغسطس. إن شاء الله سيكون إصدار العام القادم أفضل حالا. 

الشيفرة المصدرية 

قمت بنشر الشيفرة المصدرية -الكود- على منصة Github تحت رخصة البرامج الحرة GNU GPL version 2.0. منذ نشر الكود وحتى اليوم هناك 80 تحديثا (commit) للفرع الرئيسي من الكود (master branch). تلقيت تحديثات من بعض الأشخاص، قمت بإدراج بعضها، ولازلت أراجع البقية للتأكد من صلاحيتها وموائمتها للمشروع. 

إذا كنت مطورا، يمكنك زيارة الـrepository الخاصة بالمشروع من هنا. يمكنك أن تشارك في تطويره، أو أن تستفيد بالكود كما تريد طالما التزمت بشروط الرخصة GNU GPL v2.0. 

جدير بالذكر أن أحد المطورين الذين يعملون في جهاز تنظيم المرفق قام بالتواصل معنا ليخبرنا أنه يستطيع أن يوفر بعض البيانات لنا، إلا أنه اختفى بعد ذلك ولم يعد هناك تواصل بيننا. 

مصداقية البيانات 

وصلتني العديد من الأسئلة حول المشروع منذ بدأته فقمت بوضع صفحة على الموقع للأسئلة المتكررة لتجيب عن هذه الأسئلة. لسوء الحظ فإن اللغة المستخدمة في الموقع هي اللغة الإنجليزية -وإن كنت أعمل على ترجمة الواجهة للعربية-، لكن أهم سؤال وصلني هو 

هل يمكن الوثوق في البيانات المنشورة على الموقع؟
على الأرجح نعم. ولكن على أسوأ الفروض، وإذا كانت هذه البيانات غير دقيقة، فإنها تظل بيانات "رسمية" أتاحتها الدولة من المهم الاحتفاظ بها. 

لماذا أفعلها؟! 

قديما قال لي أبي -رحمه الله-: 
إذا كانت زكاة المال جزءا من المال، فزكاة العلم العلم كله"
لا أدري هل هي مقولته هو، أم أنه اقتبسها من مكتبته العملاقة، ولكنها شكلت جزءا ليس باليسير من وجداني وأنا أكبر. وعندما تعرفت للمرة الأولى على حركة البرمجيات الحرة والمصادر المفتوحة أدركت أنني وجدت كنزا. وكلما تعمقت أكثر، عشقت هذا العالم أكثر. 

لذلك، فإن أي مشروع لإتاحة البيانات، أو لإتاحة المصادر وتحريرها، هو مشروع يستهويني بشكل شخصي. هذا ما لفت نظري أول الأمر في تدوينة "طارق" التي ذكرتها في البداية. السبب الأول أنني أحب ذلك وأستمتع به. 

هناك أسباب أخرى بالطبع، مثل أن ذلك يتيح لي فرصة التعلم من أقراني. أكثر ما يسعدني هو ملاحظات ومشاركات المطورين الآخرين، الذين أعرفهم والذي لا أعرفهم. كما يقول الوغد المفضل عندي "لينوس تورفالدس"، مطور نواة نظام التشغيل linux: 
With many eyeballs, all bugs are shallow
لا أجد ترجمة مناسبة لها، ولكن دعونا نقول: 

كلما زادت الأعين المدققة، كلما كان حل المشكلة أكثر سهولة
لهذه المقولة قصة ربما تهتمون بمطالعتها. 

كذلك، حدث أن قال لي صديقان لا يعرفان بعضهما البعض أنهما لا يركبان المصعد إلا بعد التحقق من حالة الحمل من صفحة المشروع. ﻷن نسبة احتمال انقطاع التيار الكهرباء تتناسب طرديا مع حالة الحمل على الشبكة. كان ذلك من بواعث البهجة الحقيقية. 

هناك مكاسب أخرى لذلك أيضا، مثل أنني قمت بالتقدم للحصول على رخصة PHPStorm للبرمجيات الحرة والمفتوحة المصدر وحصلت عليها بالفعل لمدة عام كامل قابلة للتجديد إذا بقي المشروع نشيطا. لمن لا يعرف، PHPStorm هي أفصل منصة لتطوير البرمجيات -IDE- بلغة البرمجة PHP رأيتها في حياتي! 

منذ عدة سنوات، سألني أحد زملاء العمل في إحدى الشركات التي كان السائد فيها أن يحتفظ كل شخص بما عنده من معلومات لنفسه حتى يكون ذا حظوة عند مديره، سألني جادا عن سبب مشاركتي للمعلومات مع زملائي. قمت لحظتها بإخباره ما كتبت أعلاه، ولكن لم يقتنع. هو صاحب عقل مادي بحت. فكرت قليلا ثم قلت له: 

حسنٌ، لنفترض أننا عشرة أشخاص مجتمعين على مائدة وقام كل واحد بمشاركة معلومة مع الآخرين. إذا فكرنا بشكل براجماتي بحت، فإن كل فرد قام بمشاركة معلومة واحدة فقط، وحصل ف المقابل على 9 معلومات، بالإضافة إلى ارتقاء العقل الجمعي للمجموعة، والذي حتما سينعكس أثره على كل فرد فيها."
أرحب بجميع المشاركات والملاحظات والنقد البناء والهدام على حد سواء! هذه التدوينة قد تخضع لعمليات تعديل كثيرة على أية حال.

لزيارة موقع المرصد اتبع الرابط التالي: www.gridstatusnow.com