38

مشروع تطبيق للقرآن الكريم للهواتف الذكية مبني بلغات الويب

مشروع تطبيق للقرآن الكريم للهواتف الذكية مبني بلغات الويب

لماذا؟

جربت عدة تطبيقات للقرآن الكريم على نظام أندرويد، ولم تكن النتائج تعجبني دوماً، لعل أفضلها كان [Quran Android](

https://play.google.com/sto...

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

قررت البدء بتصميم التطبيق في البداية ليكون تطبيق Chrome يعمل بلا اتصال وبدأت ببناءه بالاعتماد على إطار العمل Bootstrap 3، ثم أدركت أن من الأفضل بناءه على أنه تطبيق للهواتف أولاً (mobile first) ثم الانتقال إلى سطح المكتب إن كان الأمر ممكناً.

لذا قمت بالانتقال إلى إطار العمل _ionic_ (وهو حديث نسبياً) أولاً لكونه موجهاً للهواتف الذكية، وثانياً لأنه مبنيّ على إطار عمل _Angular JS_ الذي أعشقه وأعتقد أن خبرتي به لا بأس بها.

ما الذي يقدمه التطبيق؟

التطبيق حالياً يوفر المميزات التالية:

  • عرض النص القرآن مع تلوين الحركات وعلامات الوقف بلونين مختلفين لتسهيل القراءة

  • دعم كل الترجمات التي يقدمها [مشروع ذكر](

http://zekr.org/resources.h...
  • دعم كل التلاوات التي يقدمها مشروع [EveryAyah](
http://everyayah.com/)
  • البحث باستخدام الواجهة البرمجية [لمشروع الفانوس](
http://alfanous.org/)
  • البحث بلا اتصال عند غياب الاتصال بالإنترنت، والمعتمد على التعابير النظامية (Regular Expressions) الذي يوفر إمكانية تجاهل الأخطاء في الهمزات والحركات

الجوانب التقنية

المشروع مبني على إطار العمل [Ionic](

http://ionicframework.com/)

الذي يستخدم Angular JS، النصوص البرمجية مكتوبة بلغة [CoffeeScript](

http://coffeescript.org/)

وملفات العرض مكتوبة بلغة [Jade](

http://jade-lang.com

)، ملفات التنسيق مكتوبة بلغة [LESS](

http://lesscss.org

) (وأفكر في الانتقال إلى Sass لاحقاً لتكون أكثر توافقاً مع منهج ionic).

بالنسبة لنمط التصميم (Design Pattern) فهو بالطبع MVC، وملفات .coffee منسقة ضمن مجلدات وكل منها مسؤول عن خدمة أو متحكم... بما يسهل تطوير وتعديل الوحدات بشكل منصفل.

ما الأنظمة التي سيستهدفها المشروع؟

بما أن المشروع مبني بلغات الويب وإطار عمل يستهدف الهواتف الذكية، فإنه سيكون متوفراً بقدر ضئيل من التعديلات على عدة أنظمة ذكية على رأسها Android وiOS وFirefox OS. سأضيف إعدادات منصة Cordova لبناء التطبيقات وسيتم الانتقال إليها على عدة مراحل، بالنتيجة سيتوفر التطبيق المنصات السابقة عند انتهاء الانتقال إلى Cordova.

صور للتطبيق

حالياً هكذا يبدو التطبيق: (إن تعذر عرض الصور أدناه [فشاهدها هنا](

http://imgur.com/a/zL9g5))

![الصفحة الرئيسية](

http://i.imgur.com/xH9iWiU....

![البحث باستخدام الواجهة البرمجية لمشروع الفانوس](

http://i.imgur.com/UDhVLXR....

![البحث بلا اتصال](

http://i.imgur.com/OEVoJLO....

![صفحة التفضيلات](

http://i.imgur.com/ekO9UYj....

![صفحة البحث](

http://i.imgur.com/IjqMQPD....

![نتائج البحث](

http://i.imgur.com/HK5M9zf....

![عرض آية مفردة مع ترجمتها (إمكانية اختيار أكثر من ترجمة)](

http://i.imgur.com/hl8tsPF....

![الترجمات المتوفرة](

http://i.imgur.com/l1kqI3j....

![عرض أية مفردة مع ترجمتها (إمكانية اختيار اكثر من ترجمة)](

http://i.imgur.com/2pxbeMz....

![نتائج البحث](

http://i.imgur.com/4bEwPzY....

![تلاوة الصفحة](

http://i.imgur.com/DwMuKR6....

المشكلات الحالية

  • أحتاج إلى خط عربي ملائم لعرض النصوص القرآنية ومتوفر برخصة حرّة وبصورة خط ويب (Web font)، من الضروري أن يُغير الخط شكل الحرف عند إضافة الحركات إليه، لأن تلوين الحركات وعلامات الوقف يعتمد على إضافة طبقتين من النص ثم نص الآية فوقهما، ويجب أن تتوافق مواضع الحروف تماماً. لم أجد رخصة الخط المستخدم (اسمه Nabi) حالياً أو صيغة خط ويب منه.

كيف يمكنني المساعدة؟

إن كنت تجيد التعامل مع مشاريع الويب فانسخ المشروع إلى جهازك وابنه باستخدام الأمر gulp download_translations translations build ثم جربه بفتح ملف index.html في المجلد dist/chrome باستخدام Firefox وفي منظور التصميم المستجيب (Responsive Design View). لن يعمل الملف على Chrome لانه يمنع طلبات HTTP من الملفات المحلية.

هل بإمكانك الترجمة أو التوثيق؟ أنشئ فرعاً عن المشروع على GitHub وأجر تعديلاتك ثم ادفعها إليّ!

[المشروع على GitHub](

https://github.com/forabi/a...

جميل جداً، و مجهود رائع. سأحاول مساعدتك ان استطعت (مع أنك تستخدم كل ما لم أقتنع به، angular و coffee script و قريباً sass :D ) و لكن لدي تعليق.

أكبر مشكلة واجهتها في تطبيق Quran Android هي كون الواجهات باللغة الإنجليزية، حتى أن أسماء السور كانت باللغة الإنجليزية و كان البحث فيها متعباً جداً. و لقد تم حلها هذه المشكلة منذ وقت قصير فقط.

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

و بخصوص تطويره ليعمل على الهواتف المحمولة فقعليك التركيز بشكل كبير على الأداء. لقد طورت تطبيقين على منصة phonegap و لدي خبرة جيدة فيها و قد يمكنني مساعدتك، و لكن مشكلة الأداء في الهواتف المحمولة معقدة للغاية لدرجة أنه يجب أن تخفي كل العناصر التي لا يتم عرضها و تكتفي بأقل عناصر html مرئية لكي تبقى المؤثرات الحركية سلسة. عليك أن تفكر بهذا الأمر قبل البدء لكي لا تضطر إعادة كتابة البرنامج من الصفر في حال أردت نقله للهواتف المحمولة.

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

أيضاً بخصوص البحث فلا داعي لاستخدام موقع آخر، قم بإنشاء نسخة أرشيف من القرآن لا تحتوي على الحركات و فيها حرف الهمزة موحد و كذلك قم بفلترة نص البحث بنفس الطريقة و عندها يمكنك البحث في النص بشكل طبيعي.

شكراً جزيلاً على ردك... هل لي أن أعرف ما اعتراضاتك على Angular وCoffeScript وٍSass؟

بالنسبة للأداء فانا أدرك تماماً أن تطبيقات الويب على الهواتف المحمولة لم تبلغ حتى الآن أداء قريباً من أداء التطبيقات الأصلية (native)، على العموم المشروع الذي أبنيه لا يتطلب الكثير من الموارد كما أرى، وقد راعيت استخدام التخزين المؤقت في الذاكرة (caching) للترجمات المٌفعلة، وعدم تحميل ترجمات جديدة إلا عند طلبها... وكذلك فإن طلبات http تُخزن بنفس الطريقة باستخدام $cacheFactory في Angular.

بالنسبة للبحث فهذا هو بالضبط ما أفعله، التطبيق قادر على البحث بلا اتصال، لكنه كذلك يستطيع الاتصال بالواجهة البرمجية للفانوس لتقديم نتائج أكثر دقة أو أكثر مطابقة، وكذلك لتقديم اقتراحات لتصحيح الكلمات الخاطئة إملائياً.

في النهاية التطبيق يبقى حتى الآن اختباراً لما تعلمته ومحاولة قد تصيب وقد تخطئ.

مجرد قصة تفضيل شخصي، أحب less و knockout أكثر، و أعتقد أن كوفيسكربت معقدة.

لا مشكلة أبداً في طلبات http بل المشكلة هي في الذاكرة. تطبيقات الويب تسمح لك بذاكرة عشوائية لا تتجاوز ١٠ ميغابايت و ذاكرة تخزين localStorage لا تتجاوز ٥ ميغابايت. بالإضافة إلى بطء شديد عند استعمال عدد كبير من عناصر html. عليك أخذ هذا بالحسبان فقط.

على كل حال فتطبيقات الويب في متصفح سفاري أسرع من تطبيقات فونغاب و تمكنك من استخدام خصائص متقدم أكثر مثل Web Worker و صناديق الرمل في iframe (أنظر تطبيق فاستبوك من سنشا).

بخصوص البحث فأعتقد أن استخدام نموذجين مختلفين سيعني نتائج مختلفة و بالتالي بعض الإرتباك عند المستخدم. لهذا اقترحت الإعتماد على حل واحد.

وبخصوص لغة الواجهة، بالتأكيد ستتوفر بالعربية والإنكليزية على الأقل، لأن التطبيق يوفر الترجمات للنص القرآني مع إمكانية إخفاء النص العربي، بمعنى أنه يأخذ بالحسبان وجود مستخدمين غير ناطقين بالعربية وعليه يجب أن تتوفر الواجهة بالإنكليزية ولغات أخرى بالإضافة إلى العربية.

ما يمنعني من البدء بترجمة الواجهات هو فقط عدم اعتمادي للمكتبة التي ساستخدمها للترجمة، هناك angular-translate وMozilla l20n ومكتبات أخرى، أحتاج بعض الوقت لتجربة الخيارات المتاحة ومقارنتها.

طبعاً الأمر صحيح، و لكن لم لا تكون العربية هي الأساس ريثما يتم حل مشكلة تعدد اللغات؟ المقصد هنا أن المستخدمين في المرحلة الأولية سيكون معظمهن من متحدثي العربية (إن لم يكن جميعهم).

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

رائع جدا هذا التعليق / بكل صراحة اسعدني للغاية.

بصراحة اتمنى لو كنت اتقن الجافا الخاصة باندرويد . ولكن عندما اقراء عن انه بال HTML تستطيع ان تبني تطبيق اقول في نفسي مرحى....

قمت ببرمجة تطبيق كامل للعبة عبر الفون غاب ولكن كل تجاربي للعبة كانت عبر المتصفح Chrome والمصيبة عندما ارسلت اللعبة على الجوال... بطء مرعب في الاداء .

وصلت لقناعة ، بعد البحث الشديد . ان ال HTML لن تكون مفيدة في حال انها لا تستطيع الوصول الى مسرعات الجهاز بمعنى اخر html css Hardware acceleration

فعزفت عن الاكمال في المشروع / ومهما حاولت ان تجعل تجربة ال phonegap قريبة من تطبيق الاندرويد . فلن تنجح. مهما خففت من المحتويات. فاقل عملية animation سوف تفضح امرك.

لعبة! بالنسبة لي تطبيق بسيط لجدول مباريات لم يحتمله الجهاز.

هنالك العديد من المشاكل في هذه البيئة أسوؤها الأداء، و لقد كرهتها بشدة.