أعجوبة

البرمجيات الحُرة والمفتوحة المصدر

أدوات المستخدم

أدوات الموقع


kuttab:spec

محددات التصميم

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

مشاكل التزامن/التنافس concurrency

تطبيقات ويزجي ممكن أن تكون أحادية أو متعددية الخيوط multi-threading أو حتى متعددة العمليات process في الحالة الثانية والثالثة نحتاج عمل locks عادية.

مشاكل تعدد العمليات

تطبيقات ويزجي ممكن أن تكون أحادية أو متعددية الخيوط multi-threading أو حتى متعددة العمليات process في الحالة الأولى والثانية يمكن أن يكون هناك كائن instance واحد من التطبيقات وكل الطلبات تستدعيه (بالتالي أو في خيوط متوازية) لكن في الثالثة قد يكون هناك لكل عملية process واحدة instance مقابل. هذه الحالة الأخيرة لا تحدث مع paste لكنها تحدث عن تشغيل mod_wsgi في الطور المنضد داخل apache حيث يكون هناك عمليات بعدد عمليات apache أو في طور daemon لكن مع تحديد عدد أكبر من واحد ويكون حل هذا باستعمال طور daemon وتحديد عدد العمليات لتكون 1

WSGIDaemonProcess example.com processes=1 threads=15

وهذا الحل يصلح ل mod_wsgi لكن علينا إيجاد طريقة مثلا ل google app engine (ولا يوجد حل عام له لأنه يتطلب استخدام وحدات تخزين خاصة به Datastore وأن لا نعمل ملفات أو sockets …إلخ)

هناك حل آخر عوضا عن التحكم في daemon الخاص ب mod_wsgi هو أن نعمل daemon خاص بنا.

التسجيل والضيوف

يفترض أن يسمح التطبيق بالتسجيل ويرسل رسالة تفعيل للبريد. كذلك يفترض أن يسمح لغير المسجلين بالدخول كضيوف بمزايا محدودة.

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

ويمكن إعداد التطبيق بحيث يسمح للضيف كتابة اسم الدخول المؤقت أو يولد لهم أسماء بصيغة _ ثم كلمة مثل ضيف ثم رقم.

المستخدمون المسجلون

يقوم التطبيق بتتبع أداء المستخدم المسجل في الجلسات المختلفة ويمثل ذلك بيانيا عبر صورة مثلا عبر google chart api

<html> <center> <img src=“ http://chart.apis.google.com/chart?cht=lc&chs=300x300&chd=t:0,12,20,17,48&chds=0,50&chxt=y” /> </center> </html>

ويستخدم الإحصاءات السابقة في اختيار منافسين له ضمن نفس مستواه.

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

يمكن لأي مستخدم مسجل دعوة مستخدم آخر عبر البريد أو عبر صفحة المستخدم.

لا يتم قبول الإحصاءات فوق 50 كلمة في الدقيقة إلا إن بعد عمل ما يشبه كابتشا CAPTCHA وذلك فتح بطاقة ticket تحتوي اسم المستخدم والسرعة المطلوب اعتمادها والتاريخ ورمز تفعيل عشوائي وتباديل عشوائية Permutation من المتوفرة على الخادم والحصول على مفتاح عشوائي مقابل لها.

الصورة المستخدمة عبارة عن حروف مبعثرة فوق بعضها يتم عرض المختار منها عبر عمل إزاحة background position

يوجد على الخادم عدد كبير (10 آلاف مثلا) من الصور الصغيرة المبعثرة يتم توليدها مرة واحدة عند إطلاق الخادم عبر ImageMagick. يأخذ تطبيق الويب مفتاح البطاقة ويقرأ منها التباديل ويعرض الصورة المطابقة له ويخبر تطبيق الويب عن الإحداثيات المقابلة لرمز التفعيل فيه. الطرف المخدوم client يعلم المفتاح العشوائي ويعلم الإحداثيات بعد إجراء التباديل الذي لا يعرفه (يعني هو لا يملك المعلومات الكافية لعكس العملية)

غرف السباق

يبدأ السباق في غرف السباق الخاصة بالمستخدمين بعد 20 ثانية من طلب صاحبها بدء السباق.

يبدأ السباق في الغرفة العادية بعد 20 ثانية من الحصول على الحد الأدنى من المتسابقين. وخلال هذه الثواني يمكن استقبال متسابقين جدد لكن ليس في آخر 5 ثواني.

حالة الغرفة:

  • لم يبدأ السباق فيها بعد بانتظار إشارة البدء أو دخول الحد الادنى
  • تنتظر بقية ال 15 ثانية - يجوز دخول متسابقين جدد
  • نقطة اللاعودة: تنتظر بقية ال 5 ثواني - لا تسمح دخول متسابقين جدد
  • أثناء السباق
  • انتهاء السباق

كل غرفة لها مالك فالتي لا مالك لها تكون ملك مستخدم اسمه root أو admin.

الغرفة لها الحالات التالية:

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

إذا خرج مالك الغرفة أثناء السباق فإن ملكية الغرفة بالوكالة تكون لأي شخص آخر على أن تغلق الغرفة فور انتهاء السباق (ولا تنتقل صلاحيات مالك الغرفة للوكيل)

ومما سبق يمكن أن تظهر الغرفة مغلقة أمام شخص للأسباب التالية

  • أن السباق فيها قد بدأ فعلا
  • عدم مطابقة شروط دخول الغرفة
  • إغلاق الغرفة من قبل مالكها
kuttab/spec.txt · آخر تعديل: 2015/04/23 03:20 بواسطة 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki