الاثنين، 4 يناير 2010

لكل كتاب موقع

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

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

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

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

أن يكون الموقع في مساحة منفصلة يعني إمكانية قراءته مباشرة في الموقع دون حاجة لتنزيله، هذا إيجابي من ناحية أن الكتاب يمكن تحديثه دائماً ويمكن من خلال برمجة خاصة أن توفر نسخة للتنزيل من أحدث نسخة للكتاب ويمكن طباعة هذه النسخة مباشرة فلا حاجة لملف من نوع PDF، اليوم مع HTML5 وCSS3 يمكن أن نصمم نسخة خاصة للطباعة لأي صفحة ويب.

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

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

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

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

الصفحة الرئيسية للبرنامج ستظهر بشكل مختلف في أول مرة، على المستخدم أن يختار اسماً وكلمة سر، وفي الحقيقة يمكن الاكتفاء فقط بكلمة السر ما دام أن المستخدم شخص واحد، بعد ذلك تتغير الصفحة لتظهر عناصرها الرئيسية:
  • عنوان الكتاب
  • اسم المؤلف
  • مساحة صغيرة لكتابة فقرة تصف الكتاب
  • فهرس الكتاب
  • بيانات متفرقة أسفل الفهرس، مثال: الحقوق محفوظة لمن؟ تاريخ تأليف الكتاب، تاريخ آخر تحديث وأي بيانات أخرى ضرورية
هذه العناصر المتوفرة على الصفحة ليست جاهزة بل على المؤلف أن يكتبها، وكل ما عليه فعله هو التأشير بالفأرة على أي عنصر ثم تغيير محتوياته وعندما يضغط على زر الإدخال يحفظ ما كتبه المؤلف، فمثلاً تصور أنني أريد تعديل العنوان، ما يجب علي فعله هو أن أضغط على "عنوان الكتاب" فيختفي النص ليحل مكانه مستطيل فارغ أكتب فيه مثلاً "تطوير المواقع للمبتدئين" ثم أضغط على زر الإدخال أو Enter فيحفظ البرنامج ما أدخلته ويتغير عنوان الكتاب والصفحة، وهكذا كل عناصر الصفحة يمكن تغييرها بنفس الأسلوب.

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

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

لأقرب الصورة أكثر، الصفحة الرئيسية لبرنامج تأليف الكتاب ستكون قريبة من صفحة كتاب Dive into HTML5، تصور هذه الصفحة بدون محتويات، بدلاً من العنوان الموجود هناك جملة "عنوان الكتاب" وبدلاً من الفقرة التي تصف الكتاب هناك فقرة تشرح أن على المؤلف حذف الفقرة المكتوبة وكتابة شيء يصف الكتاب وهكذا كل عنصر يدعو المؤلف لتغييره لشيء يناسب كتابه، وبإمكان المؤلف حذف أي عنصر لا يحتاجه.

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

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

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

من الخصائص المفيدة هي خاصية الطباعة، يمكن طباعة صفحات الويب مباشرة وستظهر بشكل جيد في الصفحات المطبوعة، لا حاجة لملفات PDF منفصلة، لذلك من المفترض أن يوفر البرنامج وسيلة لإضافة وتعديل ملف CSS خاص بالطباعة، سيكون اسم الملف غالباً print.css ويمكن للمؤلف التحكم به من خلال الصفحة الرئيسية.

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

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

من ناحية أخرى، يمكن تغيير تصميم الكتاب بتغيير محتويات مجلد style، وهذا يعني أن الناس يمكنهم تصميم قوالب مختلفة للكتب، ويمكن لبعض المؤلفين ممن يريدون تحكماً أكبر أن يعدلوا القوالب التي تأتي مع البرنامج ليضيفوا مزيداً من عناصر التصميم لكتبهم، بل ويمكن تغيير تصميم كل قسم إن كان المؤلف يريد تعديل صفحة كل قسم على مستوى HTML وCSS.

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

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

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

من المفترض أن يعمل على هذا البرنامج فريق صغير من المبرمجين والمصممين، ويجب على الفريق استخدام أدوات حديثة متوفرة مثل خدمة Google Code لاستضافة المشروع وإدارته أو استخدام أدوات وخدمات مماثلة.


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


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

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

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

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

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

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

هذا تصوري للفكرة، من قال أن تويتر ليس مفيداً؟

14 تعليقات:

Noura يقول...

ممتاز
أنا أتطوع لكتابة وثاق الاستخدام العربية، أستطيع المساعدة :-)

الزناتى يقول...

السلام عليكم

شىْ قريب من الفكرة يستخدم فى توثيق فيدورا
https://fedorahosted.org/publican

أعرف حبك للتبسيط والتيسير وهذا ليس بسيطا على الإطلاق لكن يستحق نظرة .

غير معرف يقول...

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

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

غير معرف يقول...

صفحة التوثيق
http://www.ojuba.org/wiki/doku.php/thwab/%D8%AA%D8%B7%D9%88%D9%8A%D8%B1_%D8%AB%D9%88%D8%A7%D8%A83#comment__ce9c62a641934a37c43ff204b59778ba

للمتابعة
http://www.linuxac.org/forum/linuxac68/thread32865.html

عبدالله المهيري يقول...

@noura: ما زلنا حلياً في مرحلة الفكرة، إذا انتقلنا إلى التنفيذ سأراسلك.

@الزناتي: كما قلت أخي الكريم، ليس بسيطاً ويحوي خصائص أكثر مما أريد.

@غير معرف: هل تقصد أنني جعلت فكرتي معقدة من عدة جوانب؟ أرجو أن تشرح لي ذلك إن كان هذا ما تقصده لأنني أرى الفكرة بسيطة جداً ولا تزيد عن كونها تبسط عملية إدارة ملفات HTMl وCSS ولا تقدم أكثر من هذا.

ثواب يحوي من الخصائص ما يزيد عن حاجتي.

فؤاد يقول...

فكرة رائعة ولكن أطن أن الخصائص التي ذكرتها معقدة بعض الشيء

غير معرف يقول...

افكر بعمل البرنامج
لكن لن يكون مجانيا, سيكون مفتوح المصدر فقط
هل انت مستعد لشراء نسخة منه ؟ وكم هو السعر المناسب من وجهة نظرك ؟

عبدالله المهيري يقول...

@فؤاد: أتمنى أن تشرح أكثر أين تجد العقيد، الموضوع يهمني لأنني أريد للبرنامج أن يكون بسيطاً لمعظم الناس.

@غير معرف: أتمنى أن تخبرني كيف سيكون البرنامج مفتوح المصدر فقط، هل تقصد أنه يمكن الاطلاع على المصدر لكن لا يمكن استخدام البرنامج؟ أم تقصد شيئاً آخر.

أما الشراء فأنا لا أريد أن أشتري نسخة لنفسي، أنا أريد أن يطور البرنامج للجميع ويكون مجانياً للجميع وحراً للجميع.

عصام حمود يقول...

الأخ djug قال بأن نظام إدارة المحتوى Drupal يحتوي على وحدة خاصة لنشر الكتب:
http://drupal.org/getting-started/before

اقصوصه يقول...

حلوه وايد الفكره :)

عبدالله المهيري يقول...

@عصام حمود: منذ سنتين وأكثر وأنا أبحث عن حلول متوفرة لكتابة الكتب، لم يعجبني شيء منها ومن ضمنها نظام دروبال، أكثرها معقد أكثر من اللازم.

@أقصوصة: شكراً.

Unknown يقول...

مع كل هذا التبسيط ويقول البعض "إن النظام معقد قليلا"، عجبا!

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

فكرت في ووردبريس لكنه ليس عمليا كفاية (في ميدان تأليف الكتب)، يمكن تطويعه على يد خبير في الإضافات والتعديلات، أممم عساني أقدر على ذلك.

بلوكر لا ينفع بتاتا، أولها عناوين المواضيع التي لن تكون بشكل عملي (ومفيد لكتاب) وكذلك بنية المقالات على ترتيب زمني.

أتساءل عن إمكانية تطويع تطبيقات مفتوحة المصدر بسيطة جاهزة سابقا، خالد الحوراني تحدث عن تطبيق قد يفي بالغرض مع بعض التعديلات:
http://tinyurl.com/web2site

لو تم تعريب النظام وتحويره ليصلح لنشر الكتب، ستكون فكرة جيدة وكذلك تتطلب جهدا برمجيا وزمنا أقل، ما رأيك؟

عبدالله المهيري يقول...

@محمد من المغرب: لا بأس أن يقول المرء رأيه، ما أتمناه هو أن يعود من قال بأن فكرتي معقدة ليشرح لي أين يجد التعقيد، ربما يكون على حق.

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

أبو مازن يقول...

http://50yes.blogspot.com شكر لعبدالله المهيري هذا الموضوع ألهمني لانشاء لبدأ مدونة:خمسون سرا من اسرار علم الاقناع و هي ملخص لكتاب قرأته بنفس العنوان
www.50yes.blogspot.com