جدول المحتويات

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

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

مشاكل التزامن/التنافس 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 ثواني.

حالة الغرفة:


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

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

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

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