السلام عليكم ورحمة الله وبركاته،
أسعد الله أوقاتكم بكل خير جميعاً...
أحببت أن أشارك معكم مشروعي الذي بدأت بتطويره مؤخراً، وهو مشروع برمجي مخصص لإنشاء وهندسة الخطط القرآنية بطريقة رياضية دقيقة.
ما هو محرك مكين (Maken Core)؟
مشروع Maken Core هو "مُحرّك تخطيط قرآني متقدم"، مصمم لتوليد جداول الحفظ والمراجعة بذكاء.
على عكس الأنظمة التقليدية التي تقسم الأوراد بناءً على "عدد الآيات" (مما يولد أوراداً غير متساوية الطول)، يتبنى المحرك أسلوب التخطيط الهندسي المعتمد على "الأسطر والصفحات" لمصحف المدينة المنورة، مما يضمن توزيعاً دقيقاً وموزوناً للورد اليومي.
اعتمدت في بناء المحرك على بيانات دقيقة لأسطر المصحف (طبعة مجمع الملك فهد 1421هـ، وهي نفس الطبعة المعتمدة في تطبيق "آية"). وقد قمت بمعالجة البيانات يدوياً لضمان دقتها المطلقة؛ بحيث يتم احتساب "ترويسة السورة" ضمن الأسطر. فمثلاً، الوجه الأخير من القرآن (الإخلاص - الفلق - الناس) كان يُحسب في بعض القواعد القديمة كـ 7.7 سطر، لكني قمت بتعديله ليكون 15 سطراً كاملاً كبقية صفحات المصحف.
أبرز ما يميز المحرك تقنياً:
- أداء فائق للذاكرة (O(1) Complexity): يعتمد المحرك في حساب المسافات على المصفوفات التراكمية (Prefix Sum Arrays) باستخدام أرقام عشرية، مما يجعل حساب الأوراد السابقة واللاحقة عملية رياضية لحظية لا تستهلك موارد الخادم.
- مرونة عالية في المسارات (Tracks): النظام غير مقتصر على جداول ثابتة، بل يتيح تشغيل مسارات متوازية في اليوم الواحد. (مسارات الحفظ، والمراجعة الصغرى، والمراجعة الكبرى الموجودة في المشروع هي مجرد "أمثلة" مبنية مسبقاً)، والنظام مرن جداً بحيث يمكن للمطور إنشاء مسارات جديدة كلياً وربطها ببعضها كما يشاء.
- نظام قيود صارم (Constraints): يحتوي المحرك على نظام "حواجز" ذكي يمنع التعارض المكاني بين المسارات. فلا يمكن مثلاً لـ "المراجعة الكبرى" أن تتجاوز وتسبق ما تم إنجازه في مسار "الحفظ".
- خوارزميات بحث سريعة: يستخدم المحرك استراتيجيات مثل "البحث الأسّي" (Exponential Search) للوصول إلى نقاط الوقوف المثالية بدقة رياضية.
كيف يعمل المحرك؟ (نظرة على الكود)
المحرك مصمم ليكون واجهة برمجية (API/Core) سهلة الاستخدام. إليكم مثالاً لكيفية بناء خطة متكاملة:
const manager = builder
.setSchedule({
startDate: "2026-02-01", // تاريخ بدء الخطة
daysPerWeek: 5, // أيام الحفظ في الأسبوع (مثلاً: من الأحد للخميس)
limitDays: 10, // مدة الخطة بالأيام (0 تعني استمرار الخطة حتى ختم المصحف)
isReverse: true // اتجاه الحفظ (من الناس للفاتحة أو العكس)
})
// إضافة مسار الحفظ (نصف وجه يومياً بداية من سورة غافر)
.addHifz(7.5, { surah: 40, ayah: 2 })
// مسار المراجعة الصغرى (التثبيت)
// يتتبع الحفظ الجديد لمدة 5 أيام بشكل متدرج (Gradual)
// اليوم 1: بدون تثبيت | اليوم 2: يراجع درس اليوم 1 | اليوم 3: يراجع درس 1+2 .. وهكذا
.addMinorReview(5, WindowMode.GRADUAL)
// مسار المراجعة الكبرى (مراجعة الماضي)
// مراجعة 20 وجه يومياً (20 وجه × 15 سطر = 300 سطر) تبدأ من سورة الملك
.addMajorReview(15 * 20, { surah: 67, ayah: 1 })
.stopWhenCompleted()
.build();
ملاحظات إضافية حول آلية العمل:
- إيقاف الخطة بذكاء: تلاحظون استخدام دالة
stopWhenCompleted() في نهاية الكود، ووظيفتها إخبار المحرك بالتوقف التلقائي عن توليد الجداول بمجرد اكتمال الهدف الأساسي (مثل ختم المصحف).
- إعدادات مرنة وخيارات إضافية: الدالة
setSchedule تقبل العديد من الإعدادات الاختيارية التي لم تُكتب في المثال للتبسيط، مثل endDate لتحديد تاريخ معين تنتهي فيه الخطة إجبارياً، وغيرها من الخيارات التي تمنح المطور تحكماً تاماً بالجدولة.
- ديناميكية المراجعة الكبرى: النظام يدرك تلقائياً حدود الحفظ، فإذا وصلت المراجعة الكبرى إلى نقطة الحفظ الجديدة لهذا اليوم، فإنها تصطدم بـ "القيد" (Constraint) وترتد راجعة إلى البداية (Loop) لتكرار مراجعة المحفوظ السابق.
مثال على المخرج:

كما يوفر المحرك أدوات مساعدة جاهزة، مثل أداة حساب عدد الأسطر بدقة بين أي آيتين:
const lines = repo.getLinesBetween(
{ surah: 2, ayah: 1 }, // من
{ surah: 2, ayah: 286 }, // إلى (شامل)
'auto' // تحديد الاتجاه تلقائياً
);
رحلة التطوير وهدف المشروع:
باختصار: Maken Core هو عقل إلكتروني متطور، يخطط للطالب ورده القرآني بدقة هندسية، وبأداء برمجي صُلب ومستدام.
طورت هذا النظام بخبرة برمجية بسيطة معتمداً بشكل كبير على أدوات الذكاء الاصطناعي (AI)، حيث كنت أقوم بتوجيهه هندسياً لبناء المعمارية التي أطمح لها.
حالياً، المشروع عبارة عن "محرك خلفي" (Backend Core) فقط ولا يحتوي على واجهة رسومية، وسأقوم لاحقاً بإنشاء واجهة للمستخدم في مشروع مستقل. الهدف النهائي هو أن يكون هذا المحرك وحدة قابلة للدمج (Pluggable) في تطبيقات إسلامية أو منصات قرآنية أكبر.
نقاش مفتوح (لا أستغني عن توجيهاتكم):
بما أنني أطمح لتطوير المشروع وتحسينه، أطرح بين أيديكم هذه التساؤلات وأسعد جداً بأي نقد أو اقتراح:
- هيكلة المشروع: هل من الأفضل نشر هذا المحرك كـ "مكتبة" (NPM Package) يمكن استدعاؤها، أم كمشروع مستقل (Microservice / API)؟ وما مدى جاهزيته بشكله الحالي للدمج مع تطبيقات أكبر؟
- إدارة البيانات: حالياً أعتمد على ملفات ثابتة في الكود (
StaticData) لتخزين بيانات أسطر المصحف بما أن القرآن ثابت لا يتغير. هل هذه الممارسة صحيحة من ناحية الأداء، أم من الأفضل نقلها إلى قاعدة بيانات فعلية (Database)؟
- مراجعة الكود والأمان: هل التقنيات وأنماط التصميم (Design Patterns) المستخدمة صحيحة؟ وهل هناك أية ثغرات أمنية أو ملاحظات لتحسين جودة الكود؟
- أرحب جداً بأي أفكار إضافية أو مطورين يرغبون في المساهمة في تحسين النظام!
أشكركم مقدماً على وقتكم، وبانتظار تعليقاتكم وإثراءاتكم!