أنا مجرّد عضو و لا أنتمي لعائلة حسوب بأي شكل. الفكرة ليتم تنفيذها من قِبل الأعضاء
قبل فترة، قرأت لعضوين، أو أكثر، طلبوا خاصية متابعة أعضاء، إضافة إلى متابعة مجتمعات. فكان الرد
لا نفكر باضافة خاصية متابعة الأفراد لبعض في 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 دقيقة :). تطويري للفكرة ستحتاج الكثير من الوقت. إذا حبيت المشاركة، ستكون تجربة ممتعة :). كما ذكرت، استخدمت روبي لأني حاليا أتعلم أساسياتها. لكن إذا كتبت النظام بطريقة أفضل بلغة أنت تجيدها، فلم لا :)
التعليقات
أولاً أشكرك جزيلاً لاهتمامك هذا ورغبتك بتطوير Arabia I/O.
دعني أوضح أكثر لماذا نعتقد أن خاصية متابعة الأفراد في Arabia I/O ليست فكرة جيدة. أغلبنا يستخدم على الأقل تويتر، فيسبوك، لينكدان.. هذا ان لم يكن جميعهم. جميع هذه الشبكات الاجتماعية مبنية على متابعة الأشخاص لبعض وان كان لديك أصدقاء الاحتمالات تقول أنك تتابعهم هناك بالفعل ولا تحتاج لشبكة اجتماعية جديدة تتابع بها أصدقائك من جديد.
تويتر مثلاً مبني كلياً حول متابعة الأفراد لبعض بينما لن تتمكن هناك من النقاش معهم بشكل فعال عكس Arabia I/O ونفس الأمر ينطبق على فيسبوك ولينكدان، النقاشات والمواضيع الجيدة تضيع بين كم التنبيهات التي تظهر لك غالباً عن أمور قد لا تكون تهمك أساساً. اضافة متابعة المستخدمين لبعض يعني أن النقاشات التي تهمك ستضيع بين كم التنبيهات التي ستظهر لك وهذا أمر لا نريده.
نحن نراقب كيف يتم استخدام Arabia I/O وآراء المشتركين وعلى أساسها نجري التطويرات، لكن متابعة الأفراد تحديداً ستأخذ Arabia I/O لمسار آخر كلياً وسيصبح الموقع كمن يحاول حل كل شيء لكل شخص وعندها سيفشل.
بخصوص الأمور التقنية فاضافة API موثقة هو أمر مخطط له بالفعل مما سيتيح للمطورين البناء على Arabia I/O واستخدامه بأشكال ربما لم نفكر بها وهذا سيكون أمر رائع. حالياً بخصوص عمل scrapping فلا أؤيد ذلك بسبب التغييرات الكثير التي نجريها. هذا يعني أن Arabia I/O لم يصل للمرحلة النهائية بعد وأي سكريبت سيقوم بعمل scrapping قد يفشل ويحتاج لتعديل خلال فترة بسيطة.
روابط الخلاصات التالية متوفرة لكل مستخدم ويمكن الاعتماد عليها لتنفيذ ما قلته بشكل أفضل وأسهل من عمل scrapping:
- مساهمات المستخدم:
- التعليقات التي كتبها:
- المفضلة وستعمل ان فعلها المستخدم فقط:
ان كان هناك أمور أو أفكار أخرى تحتاجها تسهل عليك الأمر، مثلاً توفير نسخة json للخلاصات أو أي أمور بسيطة أخرى فيمكن تنفيذها ونحن منفتحين لذلك، أما ان كان هناك حاجة لتطويرات كبيرة فالأفضل الانتظار حتى يتم اطلاق الاصدار الأول من الواجهة البرمجية بحيث يتم برمجتها بشكل موثق ومرتب.
لا داعي للشكر، بالعكس، شكرا لكم للمنصة :)
بالنسبة لمتابعة الأعضاء. أنا أتفق معك في كل كلمة. و بالعكس، أتمنى أن تبقى المنصة كما هي. و سبب اتفاقي معكم هو رؤيتي لنظام شبيه، Quora. شخصيا، متابع أشخاص و مواضيع. بعض الأشخاص كلامهم ذهب، و لذلك أتابعهم. لكن للأسف نادرا ما أرى لهم نصيب في التنبيهات بسبب ضياعها بين تنبيهات مواضيع و غيرها. أو إذا رأيت تنبيه بقيام عضو أتابعه، يكون في أغلب الوقت في موضوع جانبي، لا أهتم به.
توفير خلاصات المواضيع و الردود فكرة سليمة. وفّرتم لمن يرغب في متابعة عضو سهولة ذلك. و لكن، توجد مشكلتان، مشاكل شخصية :)،
روابط الخلاصات مفيدة، لكن للأسف لا تحوي معلومات كثيرة. مثلا، لا أستطيع تحديد الموضوع مكتوب في أي مجتمع، أو تقييمه. أما إذا كان رد، لا أستطيع معرفة الموضوع. و هذا كان الهدف من الـ scrapping
إذا تابعت خلاصات مستخدم، سيستلزم استخدام قارئ خلاصات أو موقع ليقرأ الخلاصات. في كلا الحالتين، أحتاج لاستخدام منتج آخر.
هدف ما أردت عمله يحل المشكلتين.
إذا توفرت معلومات، يستطيع الزائر تحديد استلام تنبيهات من اعضاء، مثلا، لو ردّوا على موضوع معيّن، ردّوا في مجتمع معين. فلا حاجة لاستلام تنبيه متى ما كتب العضو أي شئ. بل يحدد الزائر ما يريد.
توفير شئ شبيه بقارئ RSS مدمج في الموقع. تكون مثلا أيقونة منفصة. الأيقونة توفر تنبيها فقط لجديد من يتابع من الاعضاء.
و إن شاء الله كلي أمل في انتظار API. لكن إذا لم تمانع، لحين اصدار API، هل لي بعمل proof of concept باستخدام scrapping بسيط؟ أعلم أن بيئة الموقع في تغيّر مستمر.
أتفق معك، الخلاصات لن تحل ما تريد القيام به وسنحاول توفير الواجهة البرمجية بأقرب وقت ممكن وسأضعها ضمن الأوليات لتحقيق ذلك.
طبعاً لا يوجد مشكلة بعمل scrapping لكن كما أخبرتك التطويرات المستمرة قد تجعل مهمتك أصعب :) بخصوص النقاط التي ذكرتها فمثلاً بامكانك استخلاص المجتمع من رابط التعليق أو الموضوع نفسه فالروابط في Arabia I/O نظيفة واسم المجتمع موجود في رابط كل تعليق وموضوع. باقي الأمور هي ما ستتطلب scrapping وستصبح أسهل مع وجود API موثقة ونظيفة. قريباً ان شاء الله.
شكراً لك
حسنا كحل وسط اخي عبد المهيمن بما ان المكان هنا ليس لمتابعه الافراد بحد ذاتهم ولكي لا يتحول الموقع لشبكه اجتماعيه مارايك ان تسمح لكل عضو ان يضع رابط مواقع التواصل الخاصه به في حسابه الشخصي
حساب تويتر
فيس بوك او لينكدان بشكل اختياري