أنا مجرّد عضو و لا أنتمي لعائلة حسوب بأي شكل. الفكرة ليتم تنفيذها من قِبل الأعضاء
قبل فترة، قرأت لعضوين، أو أكثر، طلبوا خاصية متابعة أعضاء، إضافة إلى متابعة مجتمعات. فكان الرد
لا نفكر باضافة خاصية متابعة الأفراد لبعض في Arabia I/O حالياً وقد لا نضيفها أبداً. هنا، أنت تتابع مجتمعات أو مجموعات عن مواضيع تهمك وتتابع نقاشات المستخدمين فيها. أي النقاشات هي الأساس وهي ما يجمع المستخدمين ومن خلالها قد تتعرف على أشخاص جدد.
اتاحة متابعة الأفراد لبعض يعني أن Arabia I/O أصبح مثل تويتر ولينكدان والتي تتركز على متابعة الأشخاص لبعض. بناء شبكة اجتماعية بهذا الشكل ليس الهدف الذي أنشئ Arabia I/O لأجله.
طبعا الرد منطقي و يوضح مسار معيّن تهدف حسوب لتحقيقه. لكن هذا لا يمنع أن نستغل نحن الأعضاء ما لدينا من مهارات لبناء نظام جانبي يحقق رغبتنا بمتابعة عضو، أو أعضاء، أو حتى مستقبلا، لو تم تفعيله، كلمات افتتاحية.
قمت بتحليل سريع، و هذا ما وصلت له. طبعا لا خبرة لدي بجانب إضافات المتصفحات، لكن قرأت بشكل جدا سريع.
جانب إضافة المتصفح
يقوم الزائر بتحميل إضافة للمتصفح الذي يستعمله
في حال قام الزائر بزيارة صفحة، الإضافة تُظهر بجانب اسماء الأعضاء زر متابعة أو زر إلغاء متابعة. حالة الزر تعتمد على ما كان الزائر يُتابع أو لا يُتابع العضو. بمعنى، لو الزائر يتابع مصطفى، يظهر بجانب اسم مصطفى في صفحات أرابيا زر "إلغاء المتابعة"، و العكس.
في حال قام الزائر بالضغط على زر متابعة، الإضافة تحفظ اسم الشخص في local storage.
في حين تصفّح الزائر لموقع ارابيا، الإضافة تستعلم من موقع خاص بالإضافة، مثلا arabiafollwers.co، بإرسال قائمة بالأعضاء المخزنة أسماؤهم في الـ local storage.
الرد يكون على هيئة { اسم-العضو: رقم-آخر-موضوع-أضافه-العضو، رقم-آخر-رد-أضافه-العضو }
قبل أن تقوم الإضافة بحفظ الرد، الإضافة تقارن أرقام آخر موضوع و رد مع آخر رد. إذا الأرقام اختلفت، معناتها أن العضو قام بنشاط جديد
الإضافة تحفظ الأرقام الجديد، و تعيد فقرة 4.
جانب الخادم\الموقع
الموقع حاليا قسّمته 4 أقسام:
قاعدة SQlite تحوي اسماء جميع الأعضاء الذين قاموا جميع الزوار بإضافتهم. مثلا لو أضاف الزوار مصطفى و محمد، القاعدة ستحوي مصطفى و محمد فقط. القاعدة لن تحوي قائمة بجميع أعضاء موقع أرابيا. السبب بسيط، الاستعلام عن آخر مواضيع و ردود جميع الأعضاء ستكون مضيعة للوقت و المصادر، فلا حاجة لاستعلام معلومات أعضاء لا يتابعهم أحد. السبب في اختيار SQLite هو خفّتها. القاعدة ستُستعلم مرة كل فترة. و الاستعلام هدفه استخراج أسماء الأعضاء فقط. القاعدة تُحدث فقط إذا قام الزائر بمتابعة عضو جديد أو إلغاء متابعة عضو، حيث رقم 3 في جانب إضافة المتصفح ترسل معلومة للموقع لتحديث SQLite. إذا اسم العضو المُضاف موجود في SQLite، سيتم تجاهل طلب إضافة العضو للقاعدة. أما لو كان اسم العضو ليس مضافا في القاعدة، سيتم إضافته.
redis تحوي فيها records لآخر مواضيع و ردود الأعضاء الموجودة أسماءهم في قاعدة SQLite. في هذه الحالة، redis سيكون فيها سجليّن، سجل لمصطفى و آخر لمحمد. كل سجل يحوي رقم آخر موضوع و رد لكل منهما. redis ستُستعلم وقت استلام طلب من الإضافة (راجع جانب إضافة المتصفح، رقم 4). السبب في جعلها redis هو وضع المعلومات في الذاكرة (RAM) و ليس القرص الصلب. أيضا، ضياع السجلات غير مهم، لأن السجلات ستحدّث كل فترة، و تحديثها مربوط بتحديث SQLite.
نظام AIOF أو Arabia IO Followers. النظام يُستدعى كل فترة عن طريق cron للقيام بـ scrapping لصفحات الأعضاء الموجودة أسماءهم في SQLIte و استخراج رقم آخر موضوع و رد.
خادم http. الخادم يستلم طلبات شبيهه بـ get/cenrak/user1/user2/user3 و سيجلب سجلات الأعضاء (cenrak و user1 و user2 و user3) من redis. و هذا سبب استخدام redis، سرعته مقارنة بقواعد البيانات التي تحفظ سجلاتها في القرص الصلب. الخادم، مع الطلب، سيرسل headers كـ expiration لتقليل الطلبات لحين انتهاء المدة.
نستطيع استخدام http caching مثل varnish أو الاعتماد على خدمات مثل cloudflare لتقليل عدد الطلبات للخادم.
الهدف من طرح الموضوع
3 أسباب، بالترتيب:
موافقة من إدارة الموقع لتنفيذ scrapping كل فترة للموقع لاستخراج المعلومات المطلوبة. في حالة رفض الإدارة، سنضطر لإيقاف تنفيذ الفكرة. أيضا، كتبت جزء جدا بسيط من نظام AIOF لكن لن اشاركه إلا إذا حصلنا على الموافقة لكيلا يستغله أحد بطريقة تضر بالموقع.
عصف ذهني، و إذا لديك تنفيذ أفضل، يفضّل لو تذكر تذكره و السبب لماذا أفضل
فترة فراغي اليومية تقريبا 30 دقيقة :). تطويري للفكرة ستحتاج الكثير من الوقت. إذا حبيت المشاركة، ستكون تجربة ممتعة :). كما ذكرت، استخدمت روبي لأني حاليا أتعلم أساسياتها. لكن إذا كتبت النظام بطريقة أفضل بلغة أنت تجيدها، فلم لا :)
التعليقات