كرسي المبرمجين – أروع هديه إشتريتها لنفسي

كمبرمج، أستطيع أن أقول و بكل ثقة أن أكثر أداة أستخدمها في حياتي بعيداً عن الكمبيوتر هي “الكرسي” الذي أجلس عليه أكثر من ثلاثة أرباع الوقت الذي أكون فيه مستيقظاً.

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

بدأت بحثي في الإنترنت بعدما أحسست ببوادر الم في ظهري، فوجدت أن موضوع “الكرسي الأنسب للمبرمجين” قد أثير كثيراً عند الغربيين، هناك مثلاً موضوعاً في Coding Horror بعنوان A Developer’s Second Most Important Asset يقول فيه الكاتب أن ثاني أثمن شيء بالنسبة لنا كمبرمجين بعد عقولنا هي ظهورنا! وأنه يجب أن نستثمر بعضاً من المال في “كرسي” ذي جودة عالية، وفي مقال آخر بعنوان Investing in a Quality Programming Chair نُشر في نفس المدونة السابقة، ذكر الكاتب ثلاثة أسباب تجعله يؤمن أن “الكراسي” مهمة في مهنتنا نحن المبرمجين، أترجمها و الخصها هنا بتصرف :

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

ومن الأشياء التي جعلتني أفكر في هذا الأمر بشكل أكثر جديه هو لقائي بـ Joel Sploskey الكاتب المعروف لمدونة Joel on Software و مؤسس شركة Fog Creek Software (على الهامش: التقطت بعض الصور مع هذا الرجل، لكني اكتشفت لاحقاً عن طريق أحد الإخوة في تويتر أنه شاذ جنسياً و العياذ بالله!)، كان الرجل يؤكد على أن المكتب و “الكرسي” هم من أهم الأشياء التي يجب أن يهتم بها أي شخص يرغب في توظيف مبرمجين.

خلاصة الأمر و حتى لا أطيل عليكم، وجدت أن الكثيرين يجمعون على أن أفضل كرسي للمبرمجين هو الكرسي المسمى Aeron Chair من شركة Herman Miller، سعره يقارب الـ 900$ دولار أمريكي، استطعت أن أحصل عليه بحوالي 650$ عن طريق أحد الموزعين المحليين (عناوين الموزعين المحليين موجودة في صفحة Global Dealer Locator )

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

هل توافق في ان الكرسي له أهمية بالنسبة للمبرمج ؟

ماهو نوع الكرسي الذي تستخدمه حالياً ؟ وهل تفكر في شراء كرسي جديد ؟

شاركني رأيك برد في مدونتي أو بموضوع في مدونتك ..

معاً، خطوة بخطوة.. يوميات مشروع جديد

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

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

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

لن أتبع أي نهج أو طريقة علمية في بناء الموقع، وليس بالضرورة أني ساستخدم أي نموذج من نماذج بناء البرمجيات Software Development Life Cycle، وقد يخالفني البعض في ذلك، لكني فقط أريد أن أبرمج بحرية.

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

خمسة (5) أدوات أستخدمها عندما أبرمج

لكل منا عادات و أدوات خاصة يستخدمها عندما يبرمج، اخترت لكم خمسة من الأدوات التي استخدمها شخصياً، ولم أقم بترتيبها وفقاً لأي شيء هي مجرد مجموعة من الأدوات التي أستخدمها و أعتقد أنها قد تفيدكم

  1. محرر نصوص Text Editor : حالياً أستخدم Notepad++ كمحرر نصوص رئيسي على نظام التشغيل ويندوز و vim على لينكس، قرأت كثيراً عن محرر النصوص Textmate وأجد حماسة كبيرة في كل من يكتب عنه، لكن للأسف لا يعمل إلا على نظام التشغيل Mac.
  2. باحث داخل الملفات النصية Text Search : أحتاج دائماً أن أبحث داخل الملفات النصية عن تعريف متغير، أو توصيف دالة، أو أي شيء آخر لذلك أعتبر أداة البحث داخل الملفات النصية أداة أساسية. غالباً ما أستخدم الأمرgrep في لينكس لإجراء عمليات البحث، أما على ويندوز فأستخدم محرك البحث الموجود مع برنامج Notepad++ و أحياناً أستخدم البرنامج المجاني : winGREP .
  3. إدارة الإصدارات Version Control System : تستخدم هذه الأنظمة أساساً في إدارة المشاريع التي يعمل عليها أكثر من مبرمج لحفظ كافة التعديلات حتى يمكن الرجوع إلى إصدارات سابقة عند الحاجة (إضافةً إلى استخدامات أخرى كثيرة تحتاج لموضوع منفصل لشرحها )، لكن شخصياً أقوم باستخدام هذا النظام لحفظ كافة مشاريعي في مكان واحد (المخزن) ثم عندما أحتاج لأحد هذه المشاريع أقوم بجلبه من المخزن و أعمل عليه ثم أعيده مره أخرى، بهذه الطريقة أتأكد أن مشاريعي كلها في مكان واحد أستطيع الوصول إليها بسهولة، وكافة التعديلات التي أجريها تحفظ مع إمكانية الرجوع للنسخ القديمة من ملفاتي، وفوق هذا و ذاك أستطيع أن أصل لمشاريعي من أي مكان طالما أن المخزن يمكن الوصول إليه من خلال الإنترنت. أستخدم على جهازي الشخصي نظام Subversion و لدي موقع على الإنترنت مجهز بسيرفر من نفس النوع كذلك.
  4. مؤقِت Stopwatch : الساعة المؤقتة التي تقوم بحساب الوقت عند الضغط عليها و تتوقف عند الضغط عليها مره ثانية، أعتبرها أداة أساسية تساعدني على التركيز و الإنجاز إلى حد كبير، حقيقةً أريد أن أبالغ و أقول أنها الأداة الأفضل التي استخدمتها و ساعدتني لزيادة فعاليتي بشكل ملحوظ، كل ما عليك فعله هو تحديد إطار زمني (20 دقيقة مثلاً) شغل المؤقت و ابدأ العمل، بشرط أن تلتزم خلال العشرين دقيقة بإنجاز وظيفة واحدة فقط، هذه الطريقة لن تساعدك على التركيز فقط بل ستتمكن مع الوقت من تطوير مهارة تقييم الزمن اللازم لإنجاز بعض الوظائف، مما سيساعدك على تقييم سعر برامجك بشكل أفضل. حالياً أستخدم ساعة الكترونية صغيرة اشتريتها بمبلغ 30 ريال (8$) أحملها معي عندما أريد إنجاز أعمال غير متعلقة بالكمبيوتر (كالقراءة مثلاً)، أما عندما أقوم بالبرمجة أو أعمال أخرى لها علاقة بالكمبيوتر فأستخدم برنامج Instant Boss وهو برنامج جميل و بسيط جداً يعتمد على فكرة تقسيم جلسة العمل إلى أجزاء، مثلاً إذا كنت تريد أن تعمل لمدة ساعة تقوم بإعداد خمسة جلسات مدة كل جلسة 10 دقائق تتخللها دقيقتين راحة، و عند تشغيل البرنامج سيبدأ بحساب الجلسات و إعلامك عندما يحين وقت الراحة، للمزيد عن البرنامج يمكنك قراءة موضوع How to Beat Procrastination with an Instant Boss (كيف تتغلب على المماطلة باستخدام برنامج Instance Boss)، يمكنك أيضاً استخدام خدمة Online Stopwatch إذا لم تكن ترغب في تنزيل أي برنامج على جهازك.
  5. اختصارات المجلدات Folder Shortcuts : على سطح مكتبي أقوم بإنشاء مجلد أسميه Projects، بداخله أنشئ ثلاث اختصارات لثلاثة مشاريع أعمل عليها، قد يكون المجلد الأساسي للمشروع موجود بداخل htdocs الخاص بالأباتشي أو قد يكون مجلد مؤقت أنشأته في أي مكان آخر المهم أني أستطيع الوصول لمجلد مشروعي مباشرة من على سطح المكتب، اخترت الإبقاء على ثلاثة مشاريع فقط لأني أعتقد أنها العدد الأنسب من المشاريع التي يمكن لي أن أعمل عليها في نفس الوقت.

وعدتكم بخمسة أدوات عشوائية، لكن عندما وصلت إلى هنا تذكرت أدوات و تقنيات أخرى تستحق أن يكتب عنها، مثل Meta-Programming وهي برامج تقوم بإنشاء برامج أخرى أو أجزاء منها، تذكرت كذلك “قلم الرصاص” الأداة التي قد تساعدك على حل الكثير من المشاكل ببضعة شخبطات على الورق، و طريقة Unit Testing الذي تساعدك على أن تتأكد أن الكود يعمل كما يجب و تتأكد أن أي تعديل أجريته لم يؤثر على أجزاء آخرى من البرنامج…. الخ من الأدوات الكثيرة و الممتعة، سأتوقف الآن و أكتب إليكم لاحقاً (إن شاء الله).

“لكن الله يراها !” – الإتقان

منذ حوالي 500 سنة قبل الميلاد كان هنالك نحّات يوناني يسمى “فيدياس” كُلف ببناء مجموعة من التماثيل لتوضع على سطح أحد المعابد في أعلى تل في أثينا ، بعد إنتهائه قدم فاتورة ليتقاضى أجراً نظير عمله، فرفض المحاسب أن يدفع له قيمة الفاتورة قائلاً : “لاترى الناس سوى الجانب الأمامي من هذه التماثيل، ومع ذلك فقد كلفتنا الكثير من الأموال لكي يتم رؤيتها من جميع الجوانب، فلماذا جعلت التماثيل من الخلف رائعة مثلها مثل التماثيل من الامام ؟ ولن يشاهد أحد أبداً التماثيل من الخلف ” فرد “فيدياس” غاضباً : “لكن الله يراها !”.

نعم صدق “فيدياس” و أجاد التعبير .. “إن الله يراها !” …

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

أتخيل أن هذا المبرمج لم يعتقد أبداً أن شخصاً آخر قد يراجع الكود الخاص به من بعده وأنه قام بهذا العمل على هذا النحو لأنه أمن العقوبة … لو أنه أستشعر “لكن الله يراها” لأتقن شفرة البرنامج تماماً كما أتقن في الواجهة و لفعل مثل “فيدياس” عندما أتقن نحث التمثال من الخلف تماماً مثلما أتقنه من الأمام.

صحيح أن شفرات برامجنا لا يراها غيرنا عادة، “لكن الله يراها” وقد وردنا عن حبيبنا و قدوتنا محمد صلى الله عليه و سلم : “إن الله يحب إذا عمل أحدكم عملاً أن يتقنه” ، فليكن شعارنا من الآن “لكن الله يراها” …

الوصفة الأكاديمية للحاسب الآلي

مجموعة نقاط غير مرتبة عن دراسة الحاسب الآلي في الجامعة.

من كل بستان زهرة
مرحلة البكالوريوس لتخصص علوم الحاسب الآلي Computer Science لا تركز على موضوع محدد بل يدرس الطالب فيها كل شيء و أي شيء عن الحاسب، فتجد مادة عن الـ Hardware و أخرى عن أنظمة التشغيل و ثالثة عن لغات البرمجة و يدرس هندسة البرمجيات Software Engineering و تحليل و تصميم الأنظمة System Analysis And Design و الذكاء الصناعي، هكذا من كل بستان زهرة.

المخرجات
بحسب الخطة الدراسية المقترحة من ثلاث منظمات ( ACM و AIS و IEEE-CS ) فإن المتخرجين من قسم علوم الحاسب الآلي يعملون ضمن ثلاث مجالات عمل رئيسية :

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

كيف تصبح أكاديمياً بدون الدخول للجامعة ؟
إذا أردت أن تحصل على نظرة سريعة على أغلب المواضيع التي تدرس ضمن قسم علوم الحاسب الآلي، فأنصحك بكتاب Foundation Of Computer Science، فهو يستخدم لغة بسيطة في الشرح و يستعرض في 300 صفحة تقريباً أكثر المواضيع المتعلقة بالتخصص و متوفر في مكتبة جرير في السعودية، يمكنك أيضاً الإطلاع على صفحة Computer Science في Wikipedia و تجد فيها قائمة بالمواضيع و المجالات المرتبطة بالتخصص.

مواد استمتعت بدراستها

  • Operaing Systems أنظمة التشغيل.
  • Computer Graphics الرسم بالحاسب الآلي: لم أكن أتصور أن عملية رسم مربع أو دائرة أو اي شكل هندسي آخر معقدة إلى هذا الحد!!، تعرفت في هذه المادة على الكثير من الخوارزميات المستخدمة في الرسم.
  • Design and Analysis of Algorithms تصميم و تحليل الخوارزميات: لب علوم الحاسب الآلي كما يحلوا لي تسميتها، وماذا يكون طالب علوم الحاسب الآلي إلا مجموعة خوارزميات :-D .
  • System Analysis and Design تحليل و تصميم الأنظمة: التحليل و التصميم هما المرحلتان اللتان تسبقان عادة مرحلة التنفيذ، و في هذه المادة تعرفنا على الخطوات العملية و العلمية لهاتين المرحلتين.
  • Artificial Intelligence الذكاء الصناعي : بدون أدنى شك هي أجمل مادة درستها فهو التخصص الذي أحب القراءة فيه حتى من قبل أن أدخل الجامعة.
  • Cryptography علم التشفير.
  • Expert Systems الأنظمة الخبيرة.

هذا ما يحضرني الآن ، أراكم لاحقاً بإذن الله …

بين العادي و المتميز

” إن أفضل مطوّري البرامج أكثر إنتاجاً من مطوري البرامج العاديين ليس بعشر مرات أو مئة أو ألف مرة بل أكثر إنتاجاً بعشرة آلاف مرة”

ناثان مايهرفولد – مايكروسوفت (نقلاً من كتاب The 8th Habit)

إذاً حسب الكلام السابق فإن المبرمج العادي أقل انتاجاً من المبرمج المتميز بعشرة آلاف مره !!! لكن السؤال ماهي المعايير التي يمكن على ضوئها أن نقول أن فلان من الناس مبرمج عادي أو متميز ؟ .. هل توجد مثل هذه المعايير ؟ لست أعلم ..

البرمجة بالكائنات … نصف خطوة للأمام

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

سواءً أكنت تعلم ماذا نعني بكلمة Class أو لاتعلم، فإن أهم ما يجب أن تعرفه الآن أن لكل Class وظيفة محددة،فكما أن لكل Function في البرمجة التقليدية وظيفة أساسية واحدة، فدالة fopen تقوم بفتح ملف، ودالة print تطبع نص، فإن الأمر مشابه بالنسبة Classes فلكل منها وظيفتها الخاصة، و سيتبين من خلال الأمثلة و المواضيع القادمة كيف تختلف وظائف Functions عن وظائف الكائنات.

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

إذاً أول نصف خطوة تنص على أن لكل كائن وظيفة واضحة محددة …

أتوقف الآن و بالنسبة لمن تأكلهم أصابع يدهم و يريدون كتابة أكواد برمجية سنبدأ في ذلك في النصف خطوة القادمة ^_^ ..

البرمجة بالكائنات …

“قديماً كان المبرمج يفكر في البرنامج على انه مجموعة من الدوال Routines أما في القرن الواحد و العشرين فقد أصبح يفكر فيه على أساس أنه مجموعة من الكائنات”

قالها Steve McConnel في كتاب Code Complete

أضحكتني يا سيد Steve، بالرغم من احترامي لكتابك الرائع Code Complete إلا أني أختلف معك كثيراً في الجملة السابقة التي ذكرتها (هذا من باب التسلق على أكتاف العظماء و إلا من أنا حتى أرد على كاتب تقني عظيم مثل هذا) ،فإني أرى مِن حولي أن بين كل 10 مبرمجين هنالك 12 مبرمج يجدون فكرة البرمجة بالكائنات غامضة إلى حد ما… كيف لا و قد امتلأت كتب البرمجة بأمثلة تشرح هذا الموضوع بطريقة عجيبة و غريبة !! فعندما تقرأ في أحد الكتب مثالاً يوضح فكرة الكائنات فيذكر بأن “الإنسان” يعتبر Class و أن “أحمد و محمد و علي و عباس و شعبان عبد الرحيم” عبارة عن Objects فكيف تريدنا بالتحديد أن نربط هذه المعلومة بالتطبيقات التي نبرمجها يومياً ! ..

على أية حال يا أحباب، تذكرت و أنا أقرأ كلام Steve المعاناة التي مررت بها قديماً عندما أردت تعلم مفهوم البرمجة بالكائنات حتى يسر الله لي لقاءً مع الأخ “المبرمج” فكان شرحه لي بطريقة مبسطة خالية من التعقيد أو التشبيهات الغريبة، بل كان يحدثني بلسان المبرمج و بعقلية المبرمج (و هذا قد كان قبل أكثر من سبعة سنوات و لست أعلم من حينها عن مكان الرجل أو أخباره لكني أسال الله أن يجزيه خيراً حتى يرضيه).

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

حان و قت النوم .. اكمل لاحقاً بإذن الله .. ^_^

DZONE ..

على غرار موقع digg يأتي موقع DZONE ليقدم خدمة نشر الروابط و ترشيحها من قبل الزوار، لكن يتميز عن الأول بأن الروابط المنشورة تتعلق بالمواضيع البرمجية فقط، وهذا تعريف الموقع كما ورد فيه :

dzone.com (DZ) is a link-sharing community where member participation determines what gets published and what does not. Members submit links to developer-related content into a queue, and you vote to indicate whether or not you like those links…..

تصفحته على عجالة ، و يظهر أنه يستحق المتابعة ..

رواسب التفكير القديم ستؤخرنا .. التغريد خارج السرب

” إن الحياة مليئة بل و تزخر بالجديد، و لكن من الضروري التخلص من القديم كي تفسح المجال للجديد “

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

وليست الأمثلة عنا ببعيدة، فما حدث مع مبرمجي Visual Basic و ASP مع صدور Dot Net يظهر لنا كيف أنخفضت قيمة المبرمجين السابقين و الذين لم يتأقلموا مع الوضع الجديد حتى أن أعمالهم باءت مهددة بالخطر، كذلك الحال من قبل مع Perl و COBOL و غيرهم، من لا يتأقلم سرعان ما يبدأ التغريد خارج السرب حتى يخفت صوته مع الزمن فلا تكاد تسمع له صوتاً !، ابحثوا حولكم ستجدون الكثير من هؤلاء المغردين.

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

Ruby On Rails .. لهذا أحببتها و لهذا تركتها ..

ماهي Ruby و ماهي Rails ؟
Ruby هي لغة برمجة تشبه إلى حد كبير لغة Python، يقول “يوكيهيرو” المطور الرئيسي للّغة :

..الناس و بالأخص مهندسي الكمبيوتر يركزون اهتمامهم عادةَ على الآلة، فتجدهم يفكرو في الأعمال التي ستجعل الآلة تعمل بشكل أسرع، أو بآداء أفضل، لكن في الحقيقة نحن بحاجه للتركيز على البشر أنفسهم !، … نحن الأسياد و الآلات هي العبيد..

أما Rails فهو إطار عمل-Framework مكتوب باستخدام لغة Ruby لتسهيل عملية إنشاء تطبيقات الويب ، و عندما يذكر الإسم Ruby On Rails أو RoR فالمقصود به إطار العمل و ليس لغة البرمجة.
(معلومات و رابط متعلقة بـ Ruby و RoR في موضوع “سويعات مع روبي”)

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

من أبرز المميزات لإطار العمل أيضاً اعتماده على نمط يسمى Active Record، هذا النمط يسهل عملية التفاعل مع قاعدة البيانات، فإذا أفترضنا أن لديك جدول يسمى articles يحتوي على ثلاثة حقول id,title,description فبإمكانك أن تضيف سجل جديد لهذا الجدول بالشكل التالي :

article = Article.new
article.title = "Article Title"
article.description = "Description"
article.save

لهذا أحببتها و لهذا تركتها ..
هذه الميزتان (الميزتين؟) و غيرهما كانتا سبباً في إعجابي بإطار العمل ، و في فترة من الفترات بدلت إسمي على الماسنجر ليصبح : I Love Ruby ^_^، لم يدم هذا الإعجاب طويلاً ، فكلما تعمقت في معرفة التفاصيل، بدأت أكتشف أنه مجرد إطار عمل!!، تنبهت لاحقاً أن الـ scaffold طبقت بالفعل في إطارات عمل للغة PHP مثل Symfony و Cake الذي يستخدم نمط ActiveRecord أيضاً .

أستطيع أن أفهم الآن السبب وراء حماسة الكثير من المبرمجين لـ Ruby on Rails، إنه الإنطباع الأولي الذي تتركه اللغة عند استخدامها لأول مره -بالأخص ميزة الـ scaffold، أما غير ذلك فأكاد أجزم بأنها مجرد إطار عمل، و ليست Cake و Symfony ببعيده عنها.

الجغرافيا تخترق كل التخصصات – GIS

الجغرافيا ليست المادة المفضلة عند الكثيرين، لكن عندما ننظر لها على طريقة “أنظمة المعلومات الجغرافية – Geographical Information Systems -GIS” فنحن ننظر لنوع آخر مختلف تماماً عن المادة الكئيبة التي كنا ندرسها في المدرسة، كالعادة سأتجاوز التعريفات الأكاديمية و غير الاكاديمية و أستعرض بدلاً منها مجموعة من الأمثلة الواقعية عن الـ GIS .

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

من ضمن تطبيقات الـ GIS العربية على الويب أيضاً موقع ExploreDubai (مغلق حالياً للتطوير) الخاص بمدينة دبي، و موقع Alnokhba الذي يعرض خريطة مدينة جدة، و موقع MakkahGIS الذي يعرض فنادق إسكان الحجاج بمنطقة مكة المكرمة.

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

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

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

الخلاصة و نقاط متفرقة :

  • إذا ما جمعنا بين الخرائط و المعلومات عن طريق الكمبيوتر فسنخرج بأنظمة تسمى أنظمة المعلومات الجغرافية ، مجالات استخدام هذه الأنظمة متعددة و متنوعة .
  • يعتبر هذا المجال في الفترة الحالية من مجلات البحث الساخنة و الإستثمارات فيه بالملايين و فرص الإبداع و التميز فيه كثيرة جداً خصوصاً في عالمنا العربي و الخليج العربي خصوصاً.
  • بدأت بعض الجامعات في تدريس هذا المجال كتخصص مستقل.
  • من ضمن أنظمة دعم إتخاذ القرارات Decision Support Systems يوجد فرع خاص بأنظمة المعلومات الجغرافية نظراً لأهمية هذه الانظمة في عملية إتخاذ القرارات خصوصاً للقيادات العليا.
  • مع وجود خدمات مثل Google Maps API و برامج مفتوحة المصدر مثل MapServer لن يقتصر تطوير هذا النوع من الانظمة على المؤسسات و الشركات الكبيرة بل توجد أفكار كثيرة لتطبيقها من قبل المبرمجين المستقلين أو مجموعات المبرمجين.
  • شركة ESRI هي اكبر شركة تعمل في هذا المجال و برامجها بالنسبة لمجتمع الـ GIS مثل برامج Adobe بالنسبة للمصممين ^_^.

” … قال الإمام البخاري – رحمه الله : كان ابن عمر وأبو هريرة رضي الله عنهما يخرجان إلى السوق في أيام العشر يكبران ويكبر الناس بتكبيرهما ، وقال أيضا : وكان عمر يكبر في قبته بمنى فيسمعه أهل المسجد فيكبرون ويكبر أهل الأسواق حتى ترتج منى تكبيراً … الله أكبر ، الله أكبر ، لا إله إلا الله ، الله أكبر ، الله أكبر ، ولله الحمد .. المصدر

قراءة الكتب البرمجية

قرأت عدداً لا بأس به من الكتب البرمجية التي تتحدث عن لغات بعينها كتلك التي عناوينها من نوع : “احترف C-Sharp” أو “تعلم كل شيء عن Java”، فوجدت أنها عادة ما تكون مقسمة إلى أجزاء، بدايةَ بجزء يشرح طريقة تجهيز بيئة العمل و تثبيت المترجم و كيفية تشغيل برنامجك الأول، ثم جزء يتحدث عن الـ Syntax الخاص باللغة، و بعد ذلك مجموعة فصول كل منها يمثل أحد تطبيقات اللغة مثلاً طريقة الاتصال بقواعد البيانات أو كيفية التعامل مع الملفات.

و لا يخفى عليك أن الـ Syntax في أكثر اللغات يتشابه حتى يصل إلى حد التطابق أحياناً ( كما هو الحال بين C-Sharp و Java و ++C ) لذلك أعتدت أن أتجاوز  الفصول الخاصة بالـ Syntax فالقراءة فيها مضيعة للوقت، إلا إذا أحسست أن الـ Syntax غير مألوف فأتصفحها تصفحاً سريعاً.

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

وليس أجمل من هذه الكتب إلا تلك التي تتحدث عن البرمجة كمفهوم  بعيداً عن الربط المباشر بلغة محددة، كالحديث عن أساليب البرمجة أو عن طرق تصميم البرمجيات من أمثال كتاب “The Pragmatic Programmer” و “Code Complete” و كتاب Design Patterns: Elements of Reusable Object-Oriented Software و غيرهم.

علاقة غرام بيني و بين الـ Cheat Sheet

Inmyroom“Cheat Sheet” لا أعرف لها تعريباً مناسباً و التعريب الحرفي لا يؤدي الغرض، لكنها ببساطة عبارة عن ملخصات في ورقة واحده أو مجموعة أوراق،وليس أفضل من الشرح إلا المشاهدة، ففي موقع ILoveJackDaniels مجموعة من الـ Cheat Sheet منها الـ PHP Cheat Sheet و التي تحتوي على ملخص لبعض أهم الدوال المستخدمة في PHP إضافة إلى ملخص للـ Regular Expression، وهي مثال جيد على الـ Cheat Sheet.

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

عن نفسي أجد أنه من المفيد جمع الـ Cheat Sheet و طباعتها و تثبيتها في مكان ظاهر خصوصاً لمن يعملون في مكاتب خاصة، فحتى مع تطور وسائل البحث الإلكترونية لا يزال البحث بالعين المجردة في صفحة واحده مثبته أمامك أسرع بكثير ^_^.

مجموعة من الـ Cheet Sheat :

البحث عن الـ Cheat Sheet :
الـ Cheat Sheet مبعثرة في أرجاء الإنترنت، يمكنك استخدام Google و البحث عن شيء مثل “ X Cheat Sheat” حيث X تمثل التقنية التي تريد أن تحصل على Cheat Sheet لها.

تعديل بعد النشر : يمكن أيضاً استخدام العبارة “ X Reference Card” حيث تمثل X أيضاً التقنية التي تبحث عن ملخص لها”

تنعدم الحياة عندما تنعدم الإختيارات

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

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

لاتتعصب للغة برمجة واحدة و تدافع عنها و تقاتل من أجلها و كانها “من بقية أهلك!”، بل كن متفتحاً قادر على استيعاب اللغات الأخرى و المفاضلة فيما بينها على أسس علمية ضمن إطار المشروع الذي تعمل عليه، و لا تطلق على نفسك لقب “مبرمج PHP” أو “رجل الـ Java” و إنما يكفيك أن تتسمى بـ “مبرمج” فهي أعم و أشمل و أرقى.

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

الإصدار المعدل من دويكيات

(تحميل النسخة الجديدة: dWikiat7002.zip 58 KB)
DWikiat3في الموضوع السابق “دويكيات – برنامج تحرير ويكي عربي لسطح المكتب” طرح الإخوة مايقارب الـ 25 اقتراح لتحسين البرنامج، وقد قمت بتطبيق 10 ملاحظات بحسب ما سمح به الوقت، و أبرز ميزتين هما :

 

دعم الـ CSS
هذه هي الميزة الأبرز في هذا الإصدار المعدل، يمكنك إضافة ماتشاء من الـ Styles و تنسيق النصوص باستخدام كل مميزات الـ CSS، الألوان، الخطوط، الحدود … الخ
قد تجدوا أن الـ Syntax الخاص بالتنسيق غريب نوع الشيء فقد اخترت أن يكون بهذا الشكل :
(#StyleClass#)النص(#/StyleClass#)
مثلاً لجعل النص بالون الأحمر :
(#red#)النص(#/red#)
قد تتعجبوا من هذا الـ Syntax الغريب، و الحقيقة أني اتفق أنه غريب لكن الهدف هو البعد عن أي Syntax قد يشابه أي شيء آخر حتى لا يكون هنال أي تداخل، من يستطيع أن يقترح أسلوب آخر أفضل سأكون ممتن له.

System Tray
بمجرد تصغير البرنامج عن طريق زر التصغير أو عن طريق الضغط على Ctrl+M او اختيار “تصغير” من قائمة “ملف” سيتم وضع أيقونة البرنامج في الـ System Tray مما يسهل عليك الوصول للبرنامج.

تحميل النسخة الجديدة: dWikiat7002.zip 58 KB

دويكيات – برنامج تحرير ويكي عربي لسطح المكتب

(تحميل البرنامج : dWikiat7001.zip – 24 KB)
DWikiatكثير من الناس خصوصاً المبرمجين و محترفي الويب يفضلون استخدام الملفات النصية Text File (تسمى أحياناً Flat File أو Plain Text) لكتابة ملاحظاتهم و حفظ المعلومات على الكمبيوتر، فهي خفيفة و سريعة و لها العديد من المميزات، على سبيل المثال تجد في C2 Wiki موضوع بعنوان Power Of Plain Text، كذلك على 43Folders Wiki موضوع بعنوان Plain Text يتحدث كسابقه عن مميزات الملفات النصية، و قد تحدث اخونا سردال عن الملفات النصية في موضوع بعنوان “الملفات النصية كبديل لبرامج التوثيق”، كل هذا إضافة إلى حبي الكبير للملفات النصية جعلني اتحمس لبناء برنامج “دويكيات”.

ماهو دويكيات ؟
هو محرر نصوص بسيط، مع دعم لميزة انشاء الروابط بين الصفحات، أو بشكل آخر يمكن أن نطلق عليه محرر Wiki لسطح المكتب.

مميزات دويكيات:

  • دعمه الكامل للغة العربية سواء في العرض أو التحرير.
  • عادة لا يحتاج إلى تثبيت، و يمكن تحميله على Flash Memory.
  • يستخدم الملفات النصية Text File.

تحميل البرنامج
حقيقةً لا أخفيكم أني تحيرت كثيراً في طريقة كتابة تعليمات للبرنامج فبالرغم من سهولته إلا أن فكرة الـ Wiki لاتزال صعبة الشرح ، لكني متأكد من خبرتكم و أنكم تستطيعون “فهمها وهيه طايرة” ^_^ ، ثلاث دقائق تجارب على البرنامج تكفي لإستيعاب فكرته بإذن الله.
تحميل البرنامج : dWikiat7001.zip – 24 KB
هذه هي النسخة Alpha من البرنامج و نشرتها لنتعاون على اختبارها.

مميزات مستقبلية (بإذن الله) :
هذه مجرد أفكار طرأت على بالي، تنفيذها أو عدم تنفيذها يعتمد على أهميتها و على الطلبات إن وجدت ^_^

  • التبويبات
  • System Tray
  • المفضلة
  • العرض الشجري
  • النشر على الإنترنت
  • البحث

لا تنسوني من دعائكم الصالح.

دائرتين و ثلاثة خطوط لجمع طلبات العميل – Use Cases

Usecasesقرأت في مكان ما أن اثنين من كل ثلاثة مشاريع برمجية يكون مصيرها الفشل، إما لأنها لم تنجز في الوقت المحدد، أو لأنها تتطلب مصاريف أكثر من المتوقع، و الغالب لأنها لاتوافق متطلبات العميل، اما عني انا شخصياً فأستطيع أن أقول أن ثلاثة من كل ثلاثة مشاريع تأتيني كانت تفشل و كنت دائماً ما أرى تلك النظرة المؤلمة على وجه العميل، و التي أفهم منها أننا سنبدأ في حلقات لا تنتهي من التعديلات، بالرغم من أني متأكد من أن ما اتفقنا عليه مطابق تماماً لما قدمته، إذاً أين المشكلة ؟! … بعد فترة طويلة من المعاناة عرفت أن هنالك مجال بحث يسمى “هندسة المتطلبات” و بعضهم يسميه “تحليل المتطلبات”، الموضوع واسع و متشعب، اممممممم لكن دعونا نأخذ شيء عملي بسيط يكون كثقافة عامة لمن لم يعجبه، و كمقدمة لمن أراد التوسع فيما بعد … “يمكنك متابعة الموضوع على شبكة سوالف

سويعات مع Ruby و Rails

توفر لي الوقت خلال اليومين السابقين لتجربة لغة البرمجة Ruby و إطار العمل Ruby On Rails و بحمد الله استطعت ان أستوعب مجمل جوانب اللغة و تمكنت من عمل تطبيق كامل باستخدام هذه اللغة خلال سويعات لا أظنها تجاوزت الثلاث ساعات تقسمت بين بحث عن مصادر و تهيئة بيئة العمل و برمجة تطبيقية ، و الأسئلة الاولية التي بدأت بحثي بها كانت كالتالي :

  • ماهي Ruby ؟
  • ماهي Ruby On Rails ؟ و ما علاقتها بـ Ruby ؟
  • هل يمكن تثبيت Ruby على Windows ؟
  • هل تستطيع Ruby أن تتعامل مع قواعد البيانات المختلفة ؟

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

ماهي Ruby ؟
Ruby هي لغة برمجة من نوع Object-Oriented Programming تم تطويرها بواسطة شخص ياباني في بدايات عام 1990م ( نعم شخص ياباني استطاع ان يطور لغة برمجة و أصبحت عالمية ! مالذي يمنع أي مسلم عربي من تطوير لغة برمجة تصل إلى هذا الحد من الإنتشار؟) ، هذه اللغة ليس مختصة بالويب مثل PHP إنما هي متعددة الأغراض و إلى حد بعيد يمكن تشبيهها بـ Perl .

ماهي Ruby On Rails ؟
Rails هي إطار عمل-Framework تم تطوره بواسطة Ruby يسمح لك ببرمجة تطبيقات للويب معتمدة على قواعد البيانات بطريقة سهلة و مبسطة.
هذا المفهوم قد يكون غريباً على بعض مبرمجي PHP الذين لم يتعاملوا مع أي Framework من قبل، لكن للتبسيط يمكن أن نقول أنه بإمكانك أن تطور أي تطبيق تريده باستخدام لغة Ruby مباشرة بدون استخدام Rails أو أي اطار عمل آخر، لكن إذا أردت أن تستخدم بعض المميزات ( مثل ميزة: القوالب-Template على سبيل المثال) فـ Rails يقدم لك هذه الخدمات .

هل يمكن تثبيت Ruby على Windows  ؟
نعم يمكن تثبيت كل من Ruby و Rails على Windows ، و التثبيت بغاية السهولة لا يأخذ أكثر من عشرة دقائق، وهنا تجدر الإشارة إلى أنك لن تحتاج إلى Local Web Server ( سواء Apache أو غيره ) عند تطوير برمجيات تعتمد على Rails لأنك عندما تقوم بتثبيت Rails يتم بشكل تلقائي تثبيت Web Server يدعى WEBrick يمكنك من خلاله أن تقوم بتجربة تطبيقاتك .

هل تستطيع Ruby أن تتعامل مع قواعد البيانات المختلفة ؟
نعم تستطيع أن تتعامل مع عدد كبير من قواعد البيانات و من ضمنها MySQL.

بعض المصادر المتعقة بـ Ruby :

  • Del.icio.us/tag/ruby
    هذا هو أول مكان بدأت البحث فيه عن مصادر و فيه تجد مجموعة كبيرة من العناوين لمواضيع مميزة حول لغة Ruby و إطار العمل Rails .
  • Rolling with Ruby on Rails
    درس متكامل عن Ruby on Rails أنصحك بشدة ان تستخدمه كنقطة بداية، تجد في الموضوع مثال عملي كامل بما فيه طريقة تثبيت و تهيئة بيئة العمل .
  • How to make a todo list program with Rails 0.9
    درس آخر عملي و فيه تفصيل أكثر.
  • What Is Ruby on Rails
    هذا موضوع نظري يستعرض فيه الكاتب أبرز صفات و مميزات إطار العمل Ruby on Rails.
  • RailsAcademy
    مجموعة من أفلام الفيديو التعليمية حول Rails مع ملاحظة أن أحجامها كبيرة و أن المقدمين يتحدثوا بسرعه كبيرة  ( أحجام الملفات تزيد عن 50 MB ) .
  • Getting started with Ruby
    جمع الكاتب في هذا الموضوع عدد من الروابط المفيدة للغة Ruby .
  • Ruby on Rails
    الموقع الرسمي لـ Ruby on Rails .

افتتاح خدمة “صانع البنرات العربي” – BannerAt

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

ش
و يمكن الدخول على الخدمة مباشرة عن طريق العنوان التالي :
http://bannerAt.4dev.info

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