مدونة مؤيد

غيّر العالم ... أو العب بعيداً

مشروع التبادل DentExch - القصة الكاملة - من البداية إلى النهاية

في مثل هذه الأيام من السنة الماضية بدأ دوامي في الجامعة، جامعة دمشق إن أردنا التحديد. لم يكن قرار اختيار الكلية Faculty بتلك السهولة، فالبنسبة لي كانت علوم الحاسوب هي الهواية والشغل الشاغل لسنوات طويلة. كان هدفي طوال عمري أن أدرس تلك العلوم في الجامعة، ولكن بعد أن أصبح بإمكاني دراستها في أية جامعة في سورية، اتخذت قراراً جديداً بدراسة طب الأسنان. قرار لم يوافقني عليه كل من أعرف، ولكنه قراري الذي اتخذته وناقشت تبعاته في الجزء الأول من سلسلة مقالات أسميتها "شق طريقك بنفسك". كانت هذه المقدمة خلفية عن وضعي عندما دخلت الجامعة، شخص يحمل عقلية وفكر مبرمج يدخل الجامعة ليدرس مواداً طبية. خليط غريب بعض الشيء ولكنه جميل. كانت تلك السنة سنة رائعة بحق، سنة قاسية علمتني دروساً عديدة (سأتحدث عن أهم الدروس التي عملتني إياها الحياة في تلك السنة ولكن في مقالة منفصلة، ليس هذا هو موضوعنا الآن) وتعرفت خلالها على عشرات الأشخاص الجدد الذين أصبح الكثير منهم أكثر من مجرد زملاء فيما بعد. كانت بين ذلك الزحام وجوه بارزة تركت أثرها الدائم في حياتي، كان هناك الكثير من الأشخاص الرائعين الذي غيروا حياتي بوجودهم. كنت أتلقى منهم الدعم والتشجيع على دراستي طب الأسنان من جهة، وعن المبرمج الرائع الذي أكونه من جهة أخرى، مديح لا أستحق ربعه طبعاً. شكراً لكم يا أصدقاء :) لاأزال أذكر على سبيل المثال كم سررت عندما تحدث معي أحدهم ليخبرني عن البرامج التي سيستطيع طبيب مبرمج أن يقدمها لأطباء الأسنان وكم أن المجتمع الطبي يحتاج مثل هذه التطبيقات. (لازلت أذكر وعدي لك بإعطائك نسخة مجانية ;) ) كيف بدأ مشروع التبادل وضعت قاعدة طبيب-مبرمج هذه في بالي وقد أصبحت على معرفة واسعة بكلية طب الأسنان، أصبحت أعرف تماماً مشاكل الطلاب واحتياجاتهم وطريقة عمل وتنظيم العيادات الجامعية والتعامل مع المرضى والتعامل بين الطلاب أنفسهم. ففكرت بخلفية المبرمج في إنشاء موقع خدمي لتلبية بعض تلك الاحتياجات وتسهيل القليل من هذا التعامل. ما أكد لي هذه الضرورة هو الطريقة التي يستخدم بها الطلاب موقع Facebook، الموقع يتيح مرونة لا بأس بها ليستطيع الطلاب التعرف على زملائهم أكثر، وخلق بيئة من المودة بسرعة كبيرة، خاصةً وأن الاستعمال كانت يتراوح من الدردشة والتسلية حتى تبادل المعلومات عن المحاضرات وأسئلة الامتحانات، رغم ذلك، لم تكن تلك المرونة كافية وكنا نحتاج لما هو أكثر. المشكلة التي تنفرد بها كلية طب الأسنان هو أن هناك *العديد* من مواقع الطلاب، عدد أكبر من أن تستطيع إحصاءه. جميع هذه المواقع تعتمد مبدأ المنتديات، لسهولة إنشاء منتدى حتى ممن ليس له أي خبرة تقنية أو برمجية. المحصلة هي عدد كبير من المنتديات التي تنافس وتقتل بعضها. إن أردنا المصلحة الحقيقية للكلية والطلاب فيجب أن يكون هناك تعاون بشكل ما بين تلك المنتديات. يجب أن يكون هناك توحيد جهود بشكل ما ليرتقي المستوى الأكاديمي للكلية. لم تكن فكرة الموقع تندرج تحت تصنيف المنتديات وكان له مجال عمل منفصل، لذا لم أخش المنافسة والغرق في زحام تلك المواقع الكثيرة القائمة أصلاً. كان مجال عمل موقعي هو تحقيق التواصل بين الطلاب ليستطيعوا *التبادل* فيما بينهم بسهولة، دائماً قد تجد عند طالب آخر ما تحتاجه وقد يحتاج هو ما عندك، وهكذا نشأت فكرة مشروع التبادل. تبادل ماذا؟ لو كنت تدرس طب الأسنان لعرفت حجم المعلومات التي يتحتاج الطلاب أن يتبادلوها: عناوين مرضى (قد يكون عندك عنوان مريض في عيادة كذا ولكنك تحتاج إلى مريض في عيادة أخرى)، تبادل المحاضرات والتسجيلات الصوتية، نماذج امتحانية وأسئلة دورات امتحانية سابقة، تبادل الزمر والفئات وأوقات الدوام، دفاتر ورسوم، صور مجهرية،.... إلخ. عرضت الفكرة على عدد من الأصدقاء المقربين وأعجبتهم جميعاً، لا أعرف إن كانوا يعنون ما قالوه من تشجيع أم أن الأمر كان مجرد مجاملة، المهم أنني أصررت على المضي قدماً وتنفيذ الفكرة رغم ما سمعته من توقعات كثيرة بالفشل من طلاب سنوات أعلى فقد كانت هناك عدة محاولات لإنشاء مواقع (منتديات مرة أخرى!!) في بدايات دراستهم وفشلت. قال لي أحد الأصدقاء مبتسماً بلطف، "لو سمعت أنا ما قاله الطلاب الأكبر لخفت أن أفشل ولما فكرت في الاستمرار، ألا تخاف أن تفشل حقاً؟"، فأخبرته أن "السقوط في فخ فشل كهذا لن يؤثر علي ولن أموت، كما أننا نستعلم الكثير عن الكلية والطلاب أثناء العمل على المشروع". قبل أن أبدأ في العمل على المشروع، تعرفت على الدكتور لجين جباوي، صاحب موقع أسنانك.نت، موقع مرموق وأحد أول مواقع طب الأسنان باللغة العربية. كان للدكتور لجين عرض في ملتقى Pecha Kucha الأول في دمشق والذي دعاني إليه أحد الأصدقاء. التقيت بالدكتور وتحدثت معه لعدة دقائق عن فكرة مشروعي لأحصل على موعد منه ليستضيفني في مكتبه في اليوم التالي. كان استقبالاً كريماً منه عرضت عليه فكرة الموقع بالتفصيل لأحصل على عرض أكثر كرماً، دعم كامل من موقع أسنانك.نت لمشروع التبادل، والذي قررنا تسميته، بناء على اقتراح صديق عزيز آخر، DentExch (اختصار لـDental Exchange). العرض الذي قدمه د.لجين كان كل ما يحتاجه مثل هذا الموقع لينجح، فقد قدم لي التغطية الإعلانية والتسويقية، ووضع منتديات أسنانك.نت تحت تصرف مشروع DentExch ليتم إعادة هيكلتها بما يخدم المشروع. ثم عرض علي جناح في معرض الرعاية الصحية 2010 في قسم طب الأسنان. هذا الجناح وكذلك عرض الفكرة على الطلاب في الجامعة سمح لي بلقاء عشرات الطلاب والتحدث معهم عن الفكرة لأسمع اقتراحاتهم وتحذيراتهم. ولتصبح الفكرة أكثر نضجاً. بعد أن أصبحت الفكرة ناضجة بدأت ببرمجة الموقع والعمل على الجانب التقني منه، لينتهي العمل التقني خلال فترة وجيزة. المشكلة في مثل هذه المواقع هو أنه بالبرغم من سهولة خلقها وبنائها، إلى أن تنميتها والنهوض بها ليس بتلك السهولة. بداية إيقاف المشروع لقد تسرعنا بعض الشيء ومضينا قدماً في المشروع قبل التفكير العميق بإجابة عدة أسئلة. هذه الأسئلة ستحدد نجاح المشروع أو فشله مستقبلياً. كان يجب أن نفكر أكثر بالطريقة التي سنجذب بها الناس إلى موقعنا. هل سنقدم للطلاب ما يجعلهم يصبحون مستخدمين فعالين للموقع أم لا؟! نجاح هكذا مشروع سيتطلب مساهمة نسبية كبيرة من الطلاب فيه، هل إمكانية الطلاب (وقت، نشاط، اتصال بالإنترنت، معرفة...) ستسمح بتحقيق تلك النسبة أم لا، وهل من الممكن أن نستطيع جذب النسبة الكافية؟ ثم من قال أن الطلاب سيثقون ويستعملون موقعاً للتبادل؟ لا تروق فكرة عرض ما تملكه من موارد على الإنترنت للجميع. ثم من قال أن التعامل الشخصي في الكلية من ناحية، ومواقع الإنترنت الموجودة حالياً من منتديات وFacebook من ناحية أخرى لا تؤدي غرض التبادل؟ إن تغلبنا على هذه العوائق، سنصطدم بتحدي أكبر هو تحدي مشاركة المستخدمين والذي سنتحدث عنه بعد لحظات. لجذب الناس إلى الموقع تم اقتراح فكرة وجود قسم يحوي مصادر ومواد علمية مفيدة للطلاب، وهو مختلف عن قسم التبادل، يحوي هذا القسم محاضرات وصور مجهرية وتسجيلات. أصبح هذا القسم فيما بعد قسم أساسي في المشروع لا يقل في أهميته عن قسم التبادل بحد ذاته. السبب هو أننا وجدنا أن مثل هذا القسم سيكون مفيداً جداً، فليس هناك أي مشروع أو موقع قام بأرشفة كل ذلك الكم الهائل من المعلومات المبعثرة عند مئات الطلاب. لجمع وأرشفة كل تلك المعلومات في موقع مركزي لن نستطيع أن نعمل وحدنا، سنحتاج إلى جهود العشرات من الطلاب النشيطين. ولكننا سنصطدم بحقيقة مريرة تشكل تحدي كبير لأي موقع، وهو مرة أخرى، تحدي مشاركة المستخدمين. تحدي مشاركة المستخدمين الغالبية العظمى من المستخدمين سيكتفون بالتلقي واستهلاك المعلومات دون المساهمة في صنع تلك المعلومات. هذه القاعدة فهمتها منذ زمن وسمعت عنها مراراً أثناء مشاركتي في المجتمعات البرمجية على الإنترنت Online communities. تقول هذه القاعدة والمسماة 90-9-1 أن معظم المستخدمين (حوالي 90% من مستخدمي الموقع) هم مجرد مستهلكين، مستخدمين يترددون على الموقع لتلقي وقراءة ورؤية ما يقوم به الآخرين. إن فرضنا أن عدد مستخدمي الموقع سيصل إلى 500 مستخدم (وهو رقم كبير جداً في بدايات الموقع)، فيمكننا أن نقول بكثير من التفاؤل أن عدد المستخدمين الذين سيقومون بأي تفاعل لن يزيد عن 50 مستخدم. 9% من المستخدمين سيقومون بتفاعل مع المحتوى الموجود أصلاً، هذا التفاعل هو تعديل أو إضافة معلومات في قسم المعلومات، والاستجابة لإعلان تبادل في قسم التبادل، 9% تعني أن حوالي 45 طالب فقط سيتركون أثر طفيف ما على الموقع. 1% فقط من المستخدمين (5 فقط!!) من سيقومون بخلق المحتوى، أي أنني وعدد قليل جداً من أصدقائي لن يتجاوز عدد أصابع اليد الواحد من سنقوم بإضافة المعلومات في قسم المعلومات، ووضع بعض الإعلانات في قسم الإعلانات. لا أريد أن أخدع أحداً، لن يقوم بخلق المحتوى سوى فريق صغير جداً من الطلاب، هذا الفريق اعتبر ذلك هدراً لجهده ووقته، صحيح أن هناك عدد جيد عرض المساهمة، ولكنه يتوقع من المشروع أن يفيده بشيء ما في المقابل، معه حق في ذلك ولكن المشروع لن يستطيع أن يحقق له فائدة تناسب جهده للأسف. هذه القاعدة صحيحة وتسير عليها جميع المواقع الجماعية على الإنترنت، ابتداءً بالصغيرة منها وانتهاءً بالكبيرة. لنأخذ بعض الأمثلة: -0.2% فقط من زوار Flickr قاموا بوضع أي صورة عليه. -0.07% فقط من مستخدمي Wikipedia هم من قام بأكثر بخلق وتعديل أكثر من 50% من محتوى ويكيبيديا. -0.16% فقط من زوار YouTube قاموا بوضع أي فيديو عليه. نلاحظ أن هذه الأرقام تصبح أقل بكثير من 1% مع ازياد حجم الموقع. المحصلة هي أن الموقع سيصبح مرجع يشاهد الطلاب ما يقوم بوضعه فريق الموقع. ليس هذا الكلام نظري فقط، ولكنه ما شاهده صديقي القديم علاء والذي أصبح شريكي في المشروع، لقد تحدث مع عدد *كبير* من الطلاب وعرف تماماً إمكانية مشاركة كل منهم في مشروع كهذا، وهو الذي أقنعني بأن الموقع سيتوقف بمجرد توقف فريقه عن إضافة المحتوى. إن كان أي موقع جماعي ناجح فهو قائم على جماعته من المستخدمين وليس على جهود فريقه فقط. النهاية وهكذا قررنا إيقاف المشروع قبل أن نضيع المزيد من وقتنا ووقت من ساعدنا، لا أريد للموقع أن يؤثر على دراسة أحد دون أن يحصل على مقابل مفيد فعلاً، وهو ما أتيقن أنه لن يحصل. في النهاية، لا أريد لكل ذلك الجهد أن يذهب هباءً، يمكن لأي طالب طب أسنان يعتقد أن سيستطيع أن يسير وينهض بالمشروع أن يتحدث معي ويشرح لي خطته وسأسلمه المشروع كاملاً، البنية البرمجية والتقنية الجاهزة وكل ما عندي من معلومات وأفكار قمت وأصدقائي بجمعها وتنسيقها والعمل عليها خلال فترة عدة أشهر. لنا لقاء قريب آخر إن شاء الله، وكل عام وأنتم بألف خير :)

رغم أشواك الطريق، الورود تملأ المكان…

لا أعرف لماذا خطرت على بالي مقالة عبدالله المهيري بعد كل هذه السنوات، تدوينة التلفاز عدونا الأول التي كتبها تروي لنا أرقاماً مبكية، فهي تخبرنا بمدى الوقت الذي يهدره العرب على التلفاز. أرقام مذهلة ينبغي أن نتأمل فيها، وأن نتأمل كيف أننا ندمر أمتنا ومستقبل بلادنا بأيدينا! لو أننا حولنا نصف الساعات التي نضيعها على التلفاز إلى ساعات عمل لأصبحت أمتنا أمة أفضل في فترة وجيزة! تخيل مثلاً لو أنك حفظت في اليوم عشر كلمات من لغة أجنبية (وهو مالن يستغرق أكثر من ربع ساعة) طوال العشر سنوات الماضية، ستكون الآن قد تعلمت ثلاث لغات جديدة! ليست المشكلة في إضاعة الوقت فقط في الوقت الذي نضيعه ونحن نعلم أننا نضيعه، فأي إنسان عنده ذرة من الوعي أو الثقافة عليه أن يحس بالذنب (أرجو ذلك!!) إن جلس طوال اليوم وهو يشاهد التلفاز، ولكن هناك نوع آخر وأخطر من إضاعة الوقت، وهو الوقت الذي تحس بأنك تنجز فيه عملاً، ولكن هذا العمل وهذا الجهد المبذول ما هو إلا جهد ضائع غير مفيد. خطورته أنك ستحس بالإنجاز والإنتاج، ولكنك أهدرت وقتك فعلياً، هذه هي الفكرة التي تناقشها هذه المقالة الرائعة. لا أعرف كيف تحولت مقدمة التدوينة لتصبح عن إضاعة الوقت، عندما بدأت كتابة التدوينة كنت أفكر بمقدمة مختلفة تماماًً. المهم، لندخل في الموضوع الذي اتفقنا أن نتحدث عنه في التدوينة الماضية، وهو ذكر مجموعة من المواقع التي تحوي كماً هائلاً من المصادر التعليمية، لجميع المجالات العلمية والأدبية، قم بانتقاء المواضيع التي تهمك وابدأ بتعليم نفسك، فلن يأتي من سيقدم لك تلك المعلومات على طبق من ذهب... Education is what remains after one has forgotten what one has learned in school. --Albert Einstein أرجو أن يكون توقيت هذه التدوينة مناسب، فمعظم الطلاب يقضون الآن اجازاتهم الصيفية وعندهم من الوقت الكثير والذي لا يُستغل منه إلا القليل جداً، إن كنت أحد المهتمين بالاستفادة من وقتك واجازتك فستجد هنا ما يفيدك حتماً... مقاطع الفيديو التعليمية: Academic Earth: موقع يقدم تسجيلات فيديو لمحاضرات عدد من أرقى جامعات العالم، في مختلف المجالات وبشكل مجاني. TeacherTube: موقع يحوي عدد كبير من المصادر التعليمية والتي تركز على عملية التعلم بحد ذاتها، سواءً أكنت معلما أم راغبا في التعلم فستجد فيه ما يفيدك في اختيار ما ستتعلمه وإعطاءك أحسن الطرق لتحقيق ذلك. TED: يوتيوب الأذكياء كما يقول عنه أحد الأصدقاء :D، موقع يحوي عدد كبير من مقاطع الفيديو التي تناقش مسائل علمية وتكنولوجية واقتصادية وعالمية هامة.   المقاطع الصوتية التعليمية: iTunes U: خدمة المقاطع التعليمية من شركة Apple العتيدة. Odeo: القسم التعليمي لموقع المقاطع الصوتية الشهير، Odeo.   مواقع لتعلم اللغات: Livemocha: موقع ذو شعبية كبيرة وواسعة باعتباره أضخم موقع لتعليم اللغات، يعتمد الموقع على مساعدة الناس لبعضهم البعض لتستطيع تعلم اللغة التي تريدها بمساعدة أحد المتكلمين الأصليين للغة. BBC Languages: موقع تعليم اللغات من شبكة BBC العملاقة، موقع رائع يحوي مصادر تعليمية أكثر روعة.   مصادر تعليمية متنوعة: Open Culture: موقع فخم بكل المقاييس، يهتم بجمع وسرد المصادر التعليمية المجانية من الويب، يحوي الموقع قوائم كبيرة من الكتب والأفلام والبودكاست والكورسات ومقاطع الفيديو. وهم مفيد جداً لمن يرغب بتعلم إحدى اللغات. نقطة البداية الأولى إن أردت رأيي. موقع DOAJ ـ (Directory of Open Access Journals): موقع يحوي أكثر من خمسة آلاف نشرة ودورية تتضمن ما يزيد عن 400 ألف مقالة تغطي جميع المجالات الأكاديمية. Khan Academy: منظمة غير ربحية تهدف إلى توفير المصادر التعليمية مجاناً، للجميع. لا يمكنني أن أختم هذه التدوينة دون أن أرفع قبعتي احتراماً لمقالة Technophilia: Get a free college education online. المقالة تحتوي عدد مثير للإعجاب من الروابط لدروس وكورسات مجانية من عدد من الجامعات المرموقة. وتعطيك نصائح لتجد المزيد بنفسك.   Real education must ultimately be limited to men who insist on knowing, the rest is mere sheep-herding. --Ezra Pound الحمد لله، فرغم أشواك الطريق، الورود في كل مكان… إلى اللقاء قريباً...

إنه لطريق طويل، ولكنك بدأته، وعليك أن تكمله، لا مجال للتراجع، التقدم هو خيارك الوحيد، رغم أشواك الطريق...

أصدقك القول أنني أشعر بالعار عندما أذكر تقصيري في الكتابة والتدوين، لن تلومني ان عرفت زحام الأفكار الذي تتضارب أمواجه في عقلي على شواطئ مشاغل الدراسة. المهم في الأمر أنني ما زلت أسير على الخط الذي رسمناه معاً، سأشق طريقي بنفسي في عالم البرمجة دون أن ألتحق بجامعة لتعلمني ذلك، سأكثف جهودي في هذه العطلة الصيفية القصيرة لأقترب من الهدف المنشود، إن شاء الله. ستكون هذه التدوينة هي الخامسة ضمن تلك السلسلة التي أعشقها، والتي إن لم تفد أحداً فقد أفادتني في أن تذكرني بالهدف الذي وضعته أمامي منذ زمن بعيد، تذكرني به عندما تصبح الرؤية ضبابية. اقترح علي أحد الأصدقاء فكرة إصدار كتيب إلكتروني مجاني يجمع المقالات والمصادر التي تحدثنا عنها في السلسلة مترجمة إلى العربية، ال��كرة رائعة وأعجبتني بشدة، بالرغم من أن انشغالي الحالي سيمنعني من تنفيذها، وبالرغم من أن يأسي من مشاريع الترجمة الجماعية في المجتمع الإلكتروني العربي سيمنعني من مجرد التفكير في طرحها للترجمة الجماعية، إلا أنني سأبقيها في بالي، أعدك بذلك، وسأحاول تنفيذها حالما تسنح لي الفرصة بذلك، ربما بعد سنة، ربما بعد عشرة أعوام. ستكون تدوينة اليوم هي عبارة عن عدد من الروابط عن موضوعنا، البرمجة وعلوم الحاسوب، ثم سنتبعها بتدوينة أخرى تحوي صفحات ومواقع عن تعلم أشياء وعلوم أخرى على الإنترنت، دون الذهاب إلى جامعة، ومعظمها من مواقع جامعات مشهورة وضخمة في مجالاتها، كل هذه المواقع ستعطيك المعلومات، ستعطيك العلم، ولكنها لن تعطيك شهادة. العمل في كثير من هذه المجالات (كالهندسات التقنية والاختصاصات الأدبية) لا يحتاج إلى شهادة بقدر ما يحتاج إلى موهبة، فإن عشقت هوايتك فستستطيع أن تعمل بها، ولو لم ترتد الجامعة. رغم ذلك، إن استطعت أن تدرس في جامعة فافعل ذلك، الجامعة ستجعل منك شخصاً مثقفاً بشكل عام وله خبرة بأحد العلوم بشكل خاص، ستجعل منك شخصاً أفضل، ولذلك النصيحة هي، مهما كان مدى احترافك في البرمجة، قم بارتياد الجامعة ولكن ابتعد عن كلية علوم الحاسوب، باعتبارك لا تحتاج إلى معلوماتهم، هذا هو الرأي الذي يقدمه الكاتب في هذه المقالة الرائعة جداً. You are an uncultured idiot who could learn so much from having four years to do nothing but learn, but you won't get that immersion in culture if you study nothing but computers   مقالة أخرى رائعة هي مقالة بعنوان 10 نصائح للانتقال من مطور مبتدئ إلى مطور متوسط، وهي مقالة ستساعدك أن تترك لقب مبرمج "مبتدئ" (إن كنت تعتبر نفسك من حملة هذا اللقب) وتنتقل إلى "متوسط" ثم "متقدم". يتحدث كاتب المقالة عن ناحية هامة، هي أن معظم المصادر البرمجية على الإنترنت تستهدف إما المبتدئين، كالمقالات التي تعلمك كتابة برامج Hello World، وإما المبرمجين المتقدمين، مثل معظم المجلات البرمجية ومنها مجلة MSDN والتي تحتاج إلى معرفة برمجية لا بأس بها لتستطيع فهمها. نفس الأمر ينطبق على الكتب، لا أحد تقريباً يهتم بتوجيه المبتدئ إلى عالم الاحتراف، لا أحد يمسك بيد المبتدئ ويساعده في صعود الدرج. هناك سوق للمبتدئين وآخر للمحترفين ولا أحد يهتم بوضع جسر يصل بينهما. لذلك تعرض تلك المقالة عشر نصائح، تصلح دليلاً للمبرمج المبتدئ الراغب بالتقدم بضعة خطوات إلى الأمام... أخيراً، هناك قسم مايكروسوفت للبحث العلمي، وهو يحوي مجموعة هائلة من الأوراق البحثية في العديد من المجالات، موقع رائع يحوي معلومات دسمة عن مختلف مجالات الكمبيوتر. إلى لقاء قريب في التدوينة السادسة إن شاء الله...

إنه لطريق طويل، ولكنك بدأته، وعليك أن تكمله، لا مجال للرجوع – الجزء الرابع – مدخل إلى الخوارزميات وبنى المعطيات

قبل أن نبدأ، إن لم تكن قد قرأت الجزء الثالث فأنصحك بذلك، لأن المحاضرات المذكورة فيه تحوي قدراً كبيراً من المعلومات المفيدة عن موضوع اليوم، الخوارزميات وبنى المعطيات، فكورسات تلك الجامعات التعريفية بعلوم الحاسوب تحوي أيضاً على تعريف بتلك المواضيع. غالباً ما يغفل المبرمجون ذاتيو التعلم عن الدراسة العميقة للخورازميات وبنى المعطيات، وهو برأيي أهم ما يتركون تعلمه من مواضيع البرمجة، فعلى المبرمج أن يفهم جميع بنى المعطيات الأساسية وخوارزميات البحث والترتيب وغيرها من الخوارزميات المهمة ليحسن انتقاء المناسب منها عندما يحتاجه، فمثلاً من المعروف أن خوارزمية Bubble sort من أبطأ خوارزميات الترتيب ولكنك عند دراستها ستعرف أن هناك حالات معينة تكون هي الخوارزمية الأنسب والأسرع للاستخدام. الكتاب الأقوى والأشهر لدراسة الخوارزميات هو Introduction to Algorithms، وهو كتاب ثقيل من إنتاج دار نشر جامعة MIT من تأليف أربعة أساتذة من جامعات مختلفة، صدر الإصدار الثالث منه العام الماضي. الكتاب يدرس في عدد كبير من الجامعات ويعتمد كمرجع في الكثير من الأبحاث والأوراق العلمية. مشكلة هذا الكتاب أنه يحتاج أن يملك القارئ أرضية رياضية لا بأس بها ليستطيع أن يتابع مع الكتاب، فالكتاب يحوي تحليل عميق ومفصل للخوارزميات التي يبحثها، لذلك فإن فهم الخوارزميات بشكل عام قبل قراءة الكتاب سيساعد في فهمه ويسهل عليك المهمة. أنصحك بتأجيل دراسته حتى قراءة أحد الكتابين التاليين. أول كتاب أنصحك بقراءته إن كنت مبتدئ في مجال الخوارزميات هو Data Structures and Algorithms in Java، وهو - كما لابد أنك لاحظت - يعلمك الخوارزميات مترافقة مع بنى المعطيات، جمال الكتاب وبساطته في أنه يتلافى الدخول في تعقيدات تحليل الخوارزميات والغياهب الرياضية المرافقة لذلك، فيمكنك قراءة الكتاب لفهم مبادئ الخوارزميات وبنى المعطيات ثم تتعمق في دراسة تحليلها من الكتاب السابق. أنصحك بنفس هذا الكتاب إن كنت مبرمج #C، فرغم الاختلافات بين اللغتين إلا أن تشابه Syntax الكود سيجعل من السهل فهم الكتب لمبرمج #C، فلا يوجد أي كتاب خوارزميات بلغة #C يستحق القراءة، حتى لو وجدت أن دار النشر تتبع جامعة محترمة كجامعة كامبريدج، فستجد أن كتابهم #Data Structures and Algorithms Using C مليء بالأخطاء من كل الألوان، عار عليهم فعلاً! كتاب بديل عن الكتاب السابق بلغة ++C بدلاً من لغة Java هو ++Data Structures and Algorithms in C، وهو يدرس في أغلب الجامعات في منطقتنا وكثير من جامعات العالم، الكتاب بسيط الفهم وقوي المعلومات وهو كتاب جيد للبدء في تعلم الخوارزميات مثله مثل كتاب جافا السابق. بالإضافة إلى "معجم الخوارزميات"، أي كتاب Introduction to Algorithms، هناك العديد من المواقع التي تلعب دور "دليل" لسرد تفاصيل عن الخوارزميات وبنى المعطيات المختلفة، أذكر بعضها: Dictionary of Algorithms and Data Structures: دليل ضخم تشرف عليه جهة حكومية يحوي عدد هائل من المعلومات عن الخوارزميات وبنى المعطيات والمصطلحات المتعلقة بها، مرتبة أبجدياً، تتراوح بين البسيط جداً والمعقد جداً. Computer Programming Algorithms Directory: موقع يضم عدد جيد من الخوارزميات المصنفة حسب استخدامها، وهو لا يحوي معلومات عن تلك الخورازميات، بل يعطي روابط لشرحها. Wikipedia: تحوي على صفحة لسرد الخوارزميات وأخرى لبنى المعطيات، كما أن هناك صفحة كبيرة حقاً تسرد جميع المصطلحات المتعلقة بكل من الخوارزميات وبنى المعطيات.   من المواضيع الهامة عند دراسة الخوارزميات هو فهم الطريقة المسماة Big O notation المستخدمة لتحليل تعقيد الخوارزميات مما يسمح بمقارنة سرعة تنفيذها في الحالات المختلفة، من أبسط ما وجدته عن شرح هذه الطريقة هو A Beginners’ Guide to Big O Notation الذي يشرح الأمر باستخدام كودات بسيطة جداً، و Plain English Explanation of Big O Notation وهو شرح يعتمد على اللغة المجردة السهلة في إيصال الفكرة. طبعاً ستجد الكثير من الحديث عن الـO الكبيرة هذه في "معجم الخوارزميات" الضخم الذي ذكرناه مراراً اليوم، لذلك تأكد من فهم مبادئها قبل البدء بالخوض في الكتاب.

إنه لطريق طويل، ولكنك بدأته، وعليك أن تكمله – الجزء الثالث – مدخل إلى علوم الحاسوب

أصارحك، كنت أنوي أن تكون تدوينة اليوم عن الخوارزميات، ثم قررت أن الوقت مازال مبكراً، كنت أفكر أن السلسلة تستهدف المبرمجين، فلن أتطرق إلى مواضيع مثل الدخول إلى عالم البرمجة، أو تعلم لغة البرمجة الفلانية أو مبادئ البرمجة الكائنية التوجه OOP، ثم قدرت أن تدوينة إضافية عن هذه المواضيع لن تضر أحداً، لذلك ما سنتحدث عنه اليوم هو كيف تعرف الجامعات طلابها بالبرمجة. معظم الجامعات تبدأ تعليم طلاب كلية علوم الحاسوب CS مبادئ البرمجة عن طريق لغات برمجة غير حقيقية لا تستعمل في البرمجة اليومية، معظم هذه اللغات مطورة أصلاً لتعليم الأطفال مبادئ البرمجة، أشهر هذه اللغات لغة تدعى Scratch مطورة في MIT وتستعمل كمقدمة للبرمجة في عدد من الجامعات المحترمة أمثال Harvard و MIT نفسها، وهي لا تعتمد على كتابة الأوامر، بل تعتمد على السحب والإفلات Drag-and-Drop. تنتقل الجامعات بعد ذلك إلى إحدى لغات البرمجة الحقيقية، لغة Java أو C أو - مؤخراً - Python، باعتبارها لغات قوية ويمكن البدء باستعمالها بسرعة. لتعلم نفسك إحدى هذه اللغات لن تحتاج إلى الكثير، اختر أحد الكتب وستتعلم مبادئ اللغة بسهولة، سأذكر هنا الكتاب الأبرز والأسرع لتعلم مبادئ كل لغة من اللغات المستعملة في الجامعات :   Python: كتاب Python Programming for the Absolute Beginner هو الأشهر للبدأ بتعلم لغة Python، اللغة الفعالة القوية والسهلة بنفس الوقت، الكتاب لا يفترض أنك مبرمج سابق، فحتى لو كنت جديداً على البرمجة فيمكنك قراءة هذا الكتاب للبدء بتعلم البرمجة. C: الكتاب العتيد والعتيق لتعلم لغة C هو C Programming Language، بالرغم من قدم الكتاب إلا أنه يبقى الكتاب المفضل لتعلم أساسيات لغة C بسرعة وسلاسة، كتاب رائع فعلاً. Java: لم أقرأ الكتاب، ولكن كتاب Head First Java حظي بسمعة حسنة وشهرة كبيرة لتعليم لغة جافا للمبتدئين. ++C: أغلب الجامعات تقوم بتعليم لغة C أو ربما Java قبل أن تنتقل إلى ++C. من كتب ++C الذائعة الصيت كتاب The C++ Programming Language، كون المؤلف هو مبتكر اللغة نفسه، Bjarne Stroustrup. ننتقل الآن إلى القسم الرائع من التدوينة (كما آمل أن تجده). محاضرات الكورس التعريفي Introductory-course بعلوم الحاسوب في جامعة هارفارد ويدعى Computer Science 50 ـ (CS50.NET) من إلقاء الأستاذ David J. Malan متاحة كمقاطع فيديو هي وجميع المواد المرافقة له للتحميل مجاناً، من موقع التحميل الخاص بالكورس CS50.TV. كذلك الأمر بالنسبة لكورس جامعة MIT، حيث يحوي موقع MIT OpenCourseWare الخاص بالجامعة على الكثير جداً من المصادر التعليمية المجانية لمئات الكورسات، والكثير منها متوفرة كمحاضرات فيديو بالإضافة إلى الملاحظات والوظائف والأوراق العلمية وأسئلة امتحانية وغيره، موقع رائع جداً يحبس الأنفاس إذا تذكرنا أن MIT هي إحدى أبرز الجامعات التقنية في العالم، ومن الكورسات المتاحة على الموقع والمتوافرة كمقاطع فيديو الكورس التعريفي بعلوم الحاسوب والبرمجة في MIT، ويسمى Introduction to Computer Science and Programming. من الجامعات التقنية العريقة أيضاً لابد أن نذكر جامعة Stanford، ولها موقع تعليمي مجاني مشابه لموقع MIT ويسمى Stanford Engineering Everywhere أو SEE اختصاراً، وفيه ثلاث كورسات تعريفية لمجال علوم الكمبيوتر، هذه الكورسات هي Programming Methodology وهو الأهم، ثم Programming Abstractions وأخيراً Programming Paradigms. أعتقد أن هذه المصادر كافية جداً كبداية قوية لأي شخص يرغب في الخوض في عوالم علوم الكمبيوتر، سواءً كان عنده فكرة سابقة عنها أو عن البرمجة أم لا، فبالإضافة إلى عناوين بعض الكتب المهمة، ذكرنا الكورسات التعريفية لأهم الجامعات التقنية في العالم والتي توفرها - لحسن الحظ - مجاناً على مواقعها حسب التوجه الحديث الذي بدأت تتخذه تلك الجامعات في إتاحة العلم للجميع. إن كنت في سورية وواجهت صعوبة في تحميل تلك المحاضرات فيمكن الاتصال بي وسأرسلها لك بطريقة ما.

إنه لطريق طويل، ولكنك بدأته – الجزء الثاني

اليوم ستكون التدوينة عبارة عن ملخص سريع للمواد التي يدرسها أي طالب "هندسة معلوماتية" أو "علوم حاسوب" أو سمها ما شئت، بدءاً من دخوله إلى الجامعة حتى تخرجه منها، وبالطبع هي تختلف بشكل كبير من جامعة إلى أخرى، ولكن ما سأذكره هو مجرد فكرة عامة استخلصتها من السؤال هنا وهناك حتى حصلت على لوائح بمناهج بعض الجامعات، أكثر اللوائح التي حصلت عليها شمولاً وتفصيلاً هي الخاصة بجامعة دمشق التي - بالمناسبة - أدرس فيها. أرفق هنا تلك القائمة لمن تهمه، قم بتحميل الملف من هنا أو من هنا. تعديل: أعطاني أحد الأصدقاء رابط قائمة منهاج كلية علوم الحاسوب في جامعة آل البيت في الأردن، ويمكنك الاطلاع عليها من موقع الجامعة. بالنسبة لجامعة دمشق وبقية الجامعات السورية التي تحوي كلية هندسة تقنية المعلومات Information Technology Engineering، يتلقى جميع الطلاب نفس المواد في السنوات الثلاثة الأولى من فترة الدراسة في الكلية، وهي خمس سنوات، ثم يختص الطالب في أحد ثلاثة مجالات، هذه المجالات هي هندسة البرمجيات Software Engineering and Information Systems، الذكاء الصنعي (أو الاصنطاعي كما يطلق عليه في بقية الدول العربية) Artificial Intelligence، وهندسة الشبكات والنظم Networks and Systems Engineering. بالنسبة لي، أجد أن هندسة الشبكات هي علم لتعمل به في شركة محترمة وتحصل على راتب محترم، وليست - بالنسبة لي مرة أخرى - علم أستمتع بدراسته والعمل به، ليس هناك تحديات عليك مواجهتها في هندسة الشبكات كتلك التي تواجهها في هندسة البرمجيات أو الذكاء الاصنطاعي. بالنسبة للذكاء الاصنطاعي، البحر العاتي المتلاطم الأمواج، هو اختصاص واسع جداً وعميق جداً، ويحتاج إلى دراسة أكاديمية أكثر من غيره من الاختصاصات، ومن الصعب - وليس المستحيل - أن تدرسه وحدك، وحتى لو درسته في الجامعة، ستكون فكرتك عن المواضيع المتقدمة في الذكاء الاصنطاعي فكرة عامة وضحلة بعض الشيء وتحتاج إلى صقل وتخصص (عن طريق إكمال الدراسة العليا والدكتوراه) حتى تستطيع أن تعمل على مشروع ضخم في الذكاء الاصنطاعي. وباعتبار أن هذه السلسلة ستكون لهواة البرمجة، فإن الاختصاص الذي سنركز على *تعويض* مواده التي تنقصنا هو هندسة البرمجيات SE، ولكني سأعطي أيضاً مصادر للبدء بدراسة مواد الاختصاصات الأخرى إن شاء الله. كما قلت في البداية، هذا مجرد ملخص سريع، لأن كل واحدة من هذه المواد سنعالجها بالتفصيل وسنتطرق للمصادر التي يمكننا أن ندرس تلك المادة منها، بشكل عام، تقسم المواد في جميع كليات علوم الحاسوب إلى المواضيع التالية، مع مواضيع إضافية أكثر تخصصية في السنوات المتقدمة: علوم عامة: كالفيزياء والكهرباء والدارات الإلكترونية. علوم البرمجة والمنطق: مبادئ البرمجة، البرمجة الكائنية التوجه، البرمجة المرئية Visual، الخوارزميات وبنى المعطيات، الدارات المنطقية، لغات البرمجة، هندسة البرمجيات، البرمجة التفرعية، المترجمات، برمجة قواعد البيانات. الرياضيات وعلومها: وتشمل الإحصاء والجبر الخطي والجبر العام والتحليل الرياضي والعددي والاحتمالات، بالإضافة إلى بعض المواد كبحوث العمليات Operations research، واللغات الشكلية Formal languages. ثقافة حاسوبية عامة: مبادئ أنظمة التشغيل، الأنظمة التفرعية، الشبكات، بنية الكمبيوتر، الاتصالات الرقمية، إدارة قواعد البيانات وقواعد البيانات التوزعية، نظرية المعلومات، مبادئ الجرافيكس والتصميم بمساعدة الحاسوب CAD، الذكاء الصناعي، أنظمة الملتيميديا. مهارات عامة: مهارات التواصل، إدارة المشاريع والتنظيم الاقتصادي. لاحظ أن الدراسة في تلك الكلية تعطيك فكرة واسعة في كثير من المواضيع، وهذه الفكرة سطحية في كثير من الأحيان، وهناك كثير من المواد التي لا تفيدك في مستقبلك كمبرمج بشكل مباشر، أو لا تفيدك على الإطلاق، أي أنك تدرس في الجامعة مواد *لن* تهمك في حياتك المهنية، فمثلاً، لن يساعدك فهم أنصاف النواقل في أن تكون مبرمجاً أفضل، ولن يضرني عدم دراستها! ولكن -أعترف- ذلك يبقى ضمن مجال الثقافة التي ستبني قاعدتك العلمية كمهندس، ولكن من جديد، المبرمج ليس مهندس بالضرورة، فلن أضيع وقتي فيما لن يفيدني في البرمجة بشكل مباشر! باختصار، سيكون تركيزنا على البرمجة وعلومها وما يصب في مصلحتها، من فروع الرياضيات مثلاً، أليس هذا ما نحتاجه فقط في البرمجة؟ :)

إنه لطريق طويل - الجزء الأول

حسناً يا بني، باعتبار أنك لم - ولن - تتلقى أي تعليم أكاديمي عن البرمجة وأنك تعتبر نفسك مبرمج ولا تستطيع أن تتخيل حياتك دون برمجة، فعليك أن تعتمد على نفسك لتصبح المبرمج المحترف والذي سعيت دائماً لأن تكونه. هذا السيناريو يتكرر كثيراً جداً، هناك الكثيرون ممن يعشقون البرمجة ثم لا يدرسون - لسبب أو لآخر - في كلية علوم الحاسوب CS (أو ما يطلق عليه، وبشكل غريب، هندسة المعلوماتية)، يبتعدون إلى كليات تقنية أخرى (كهندسة الإلكترون، الاتصالات، الحواسيب Computer Engineering، ...)، أو ما هو أبعد من ذلك، كليات هندسية غير تقنية (هندسة مدنية، تصميم معماري، ...)، أو ما هو أبعد من ذلك... بالنسبة لطالب يدرس في كلية طبية مثلاً، لا علاقة لأي شيء يدرسه في الجامعة بهوايته البرمجية والتي هي علم ضخم، وليست مجرد فن من الفنون أو رياضة ما، وهو يعلم أن هوايته لن تفيده فيما يدرسه في الجامعة، هنا سيواجه قراراً صعباً بعض الشيء، هل ستترك هوايتك التي أمضيت في رحابها سنوات وتنساها وتتذكر أن مستقبلك المهني هو في، وفقط في، الدراسة فعليك أن تركز عليها؟ أم هل تكمل تلك الهواية والتي تعتبر نفسك بارعاً فيها، وتستطيع أن تكون شخصاً محترفاً وخبيراً في هذا المجال، حتى لو لم تتلق تعليماً أكاديمياً، ثم من قال أن التعليم الأكاديمي هو كل شيء؟ هنا يتخذ صاحبنا القرار، لن أضيع كل ذلك الوقت الذي قضيته حتى وصلت إلى ما أنا عليه الآن، هذا الوقت الذي سأُسأل عنه مرتين يوم القيامة، مرة حين أُسأل عن عمري، ومرة أخرى حين أسأل عن شبابي، وكلاهما أمضيت قسماً لا بأس به منهما في "البرمجة"... إذن لا بد من الاعتماد على النفس، ودراسة كل ما يهم أي مبرمج محترف مما يُدرّس في الجامعات، وحيداً، دون الاعتماد على أي جامعة أو مدرس أو أستاذ، الأمر يحتاج إلى كثير من الدقة والانضباط وتنظيم الوقت، ولكن لا خيار هناك... الآن سنبدأ سلسلة من التدوينات سنبحث خلالها معاً عن أهم علوم البرمجة والتي يغفل عنها من لا يتعلمون البرمجة أكاديمياً، وبالتالي، إن هم أهملوها، سيظلون متخلفين بخطوة عمن تعلم البرمجة في جامعة، أعرف أن أي واحد من هؤلاء سيغضب وسيقول لي أنك لن تستطيع أن تصبح في مستوى "مهندس" مثلي مهما فعلت، وقد قابلت العديدين منهم من قبل، ولكني أنصحك ألا تلتفت إلى هذا الضجيج، فلن تستفيد منه إلا أن تشتت نفسك، وتذكر، هناك الكثيرون من المبرمجين العظماء، مثل الأسطورة جون كارماك، لم يدرسو البرمجة في الجامعة، أو لم يدرسو في جامعة قط...

هل ستدمر مايكروسوفت مشروع مونو؟

مشروع مونو هو مشروع حر ومفتوح المصدر ينتج أدوات للمطورين تحاكي المواصفات القياسية لبعض تقنيات مايكروسوفت المنشورة ضمن جمعية مصنعي الكمبيوتر الأوروبية ECMA، فعلى سبيل المثال هناك Compiler للغة #C يخضع لمواصفات Ecma-334. يضيف هذا المشروع ميزة ثقيلة جداً لا توفرها أدوات مايكروسوفت الأصلية هي أن أدواته تعمل على العديد من الأنظمة (Cross-platform)، وتشمل الأنظمة التي يدعمها Linux, BSD, UNIX, Mac OS X, Solaris بالإضافة إلى نظام Windows الذي تدعمه أدوات مايكروسوفت طبعاً.   المشكلة هي أن مونو اعتمد في بعض أجزائه (كـWindows Forms و ADO.NET) على تقنيات لم تشارك مايكروسوفت مواصفاتها مع جمعية ECMA واستأثرت بها لنفسها دون مجتمع المطورين، مما وضع مشروع مونو تحت مرمى نيران مايكروسوفت، والأغلب أن مايكروسوفت تستطيع أن تدمر مونو لو أرادت بدعوة قضائية بسيطة.   ما صرح به ريتشارد ستالمان Richard Stallman، مؤسس مشروع GNU، هو أنه من الخطر الاعتماد على مونو في المشاريع البرمجية، كونه معرض للزوال بإجراء بسيط من مايكروسوفت، وقد لقي رأيه ضجة في أوساط مستخدمي مونو، وهو ما استجابت له مايكروسوفت بأنها وضعت مواصفاتها Ecma-334 (للغة #C) و ECMA 335 (للـCLI) ضمن وعدها للمجتمع، بأنها لن ترفع أي دعوة قضائية ضد أي شخص ينتج، يوزع أو يستخدم أي إصدار بديل لتقنية NET. عن إصدار مايكروسوفت الأصلي، والواضح من هذا أن كل ما تريده مايكروسوفت هو انتشار أكبر لتقنياتها في مجتمع المطورين، وهو ما يعني حتماً نفع وربح أكبر للشركة، فمشروع مونو يصب حتماً في فائدة مايكروسوفت، فلماذا عليها أن تحاربه؟ فجوابي الشخصي عن سؤال "هل ستدمر مايكروسوفت مشروع مونو؟" هو ببساطة لا، وهو ما يختلف عليه الكثيرون، فرغم هذا الوعد لم تطمئن منظمة البرمجيات الحرة FSF، وقالت في موقعها أن هذا الوعد فارغ ولا يحمي مونو ولا غيره، كون الوعد لا يشمل إلا بعض أجزاء مونو، وجددت تحذيرها بعدم الاعتماد على مونو، فهو سيظل عرضة لتدمير مايكروسوفت.     [المصدر:ويكيبيديا]  

انتهت اللعبة!

كانت واحدة من أولى البطاقات الذكية Smart Cards والتي تستعملها المحطات التلفزيونية ذات الاشتراك المدفوع تسمى البطاقة H (اختصار لاسم Hughes)، كان في تلك البطاقة ثغرات في التصميم اكتشفت من مجتمع القراصنة Hackers.   سمحت تلك الثغرات لمجتمع القراصنة ذاك بعمل هندسة عكسية Reverse Engineering للتصميم وعمل جهاز يستطيع أن يقرأ البطاقات الذكية ثم يعدل معلوماتها، مما سمح لهم بتغيير نوع اشتراكهم لاستقبال جميع المحطات. وبما أن المحطات الفضائية لا تستطيع إلا القيام بالبث، بمعنى أن جهازك لا يستطيع إرسال أي معلومات للقمر الصناعي، فقد احتاج نظام الاشتراك الخاصة بشبكة DirecTV (شبكة محطات فضائية كبرى في الولايات المتحدة، عدد مشتركيها 18 مليون) إلى خط هاتف لإرسال معلومات عبره.   استطاع القراصنة ببساطة تعديل بطاقاتهم الذكية لاستقبال كل المحطات وعدم السماح للنظام بالاتصال باستعمال خط الهاتف، مما لم يدع مجالاً لشبكة DirecTV بتعقبهم. أضافت DirecTV تقنية جديدة لنظامها يسمح بتحديث البطاقات الذكية عن طريق معلومات ترسل مع المحطة الفضائية. وقد كانت المستقبلات Receivers مبرمجة لتطبيق تلك التحديثات إلى البطاقات الذكية فور وصولها، وقامت DirecTV بعمل تحديث للبحث عن البطاقات المزورة ومحاولة تدميرها، وتمكنت بالفعل من تعطيلها.   ما كان من مجتمع القراصنة إلا تركيب جهاز آخر يسمى Unlooper، لإصلاح الدمار، وبعد ذلك قام القراصنة بعمل برنامج لتعديل البطاقات وعدم السماح للمستقبلات Receivers بتطبيق التحديثات المستقبلة على البطاقات الذكية.   لإجبار القراصنة على تطبيق التحديثات الجديدة، جعلت DirecTV التحديثات مطلوبة ليعمل البث، أصبحت ترسل تحديثاً جديداً في كل شهر تقريباً. ولكن بعد 10 أو 15 دقيقة فقط من إصدار التحديث، كان مجتمع القراصنة يقوم بتحديث برنامج بطاقاتهم لتعمل حسب التحديث الجديد، واستمر الحال على ما هو عليه لسنتين تقريباً، وكانت تلك البطاقات تباع في مزادات على eBay بمبلغ يتجاوز الـ400 دولار للبطاقة.   أصبح من الواضح أن DirecTV خسرت المعركة ضد مجتمع القراصنة، فما كان منها إلا أن قنعت بملاحقة مواقع الإنترنت التي تناقش الثغرات في نظامها عن طريق فريقها القانوني ومحاكمتها لإيقافها.   بعد فترة بدأت DirecTV بإرسال عدة تحديثات في وقت واحد، على غير العادة. استطاع مجتمع القراصنة تجاوز هذا بيسر شديد، ولكن تلك التحديثات تركتهم حائرين عن السبب الكامن ورائها. استمرت DirecTV بإرسال 4 أو 5 تحديثات في وقت واحد وفي كل أسبوع. لم يجد القراصنة تفسيراً لذلك سوى أن DirecTV تريد إزعاجهم، فتلك التحديثات كانت تحوي كودات لا فائدة منها، ورغم ذلك كان وجودها على البطاقة مطلوباً لاستقبال البث. واستمر مجتمع القراصنة بإضافة تلك التحديثات إلى بطاقاتهم دون أن تسبب لهم أي مشاكل.   لم يستطع مجتمع القراصنة بأسره أن يفهم الغاية من تلك التحديثات حتى وصلت الدفعة الأخيرة منها عن طريق البث، فما إن تم تطبيق التحديثات الأخيرة حتى اكتملت الصورة، وكأنها القطعة الأخيرة من صورة Puzzle كبيرة. لقد جعلت التحديثات الأخيرة كل تلك الكودات التي بدت عديمة الجدوى برنامجاً فعالاً جداً، موجود على البطاقات نفسها، غيّر طريقة عمل التقنية المستعملة بشكل كامل و استطاعت DirecTV وبطريقة احترافية وشديدة البراعة والإتقان والتخطيط أن تقوم بتحديث تقنية تشفيرها التي ألفها القراصنة.   قام القراصنة بتطبيق التحديثات الأخيرة على بطاقاتهم بحذر، بعد أن أدركوا أن هذه التقنية الجديدة ستسمح لـDirecTV بتشغيل كود متقدم في جهاز الاستقبال، مما شكل سلاحاً جديداً وخطيراً. وبالرغم من تطبيق تلك التحديثات، كان القراصنة مازالوا قادرين على تجاوز الحماية، غير مدركين أن DirecTV لم تضغط على زناد سلاحها الجديد بعد.   في الساعة الثامنة والنصف مساء يوم الأحد، أطلقت DirecTV سلاحها الجديد، قبل أسبوع تماماً من مواجهة الـSuper Bowl، أحد أقوى لقاءات الهوكي في العالم. كان هجوم DirecTV على شكل كود تم إرسالها مع البث، وبفضل التقنية الجديدة تم تشغيله من قبل المستقبلات مباشرةً، ليقوم بتدمير جميع البطاقات الغير نظامية.   جميع قنوات الـIRC التي تتحدث عن DirecTV غرقت في بحر من آلاف الرسائل من أناس فقدوا القدرة على مشاهدة قنوات DirecTV المسروقة، فقد فقدت جميع مجتمعات القراصنة القدرة على مشاهدة قنوات DirecTV بطريقة غير نظامية، وأصبحت جميع البطاقات الغير شرعية مدمرة تماماً. في تلك الليلة دمرت ما يزيد عن 100 ألف بطاقة مزورة مما حرم أكثر من 98% من المشاهدين الغير نظاميين من قنوات DirecTV.   ولتختم DirecTV الحرب، قامت بإضافة لمستها الخاصة على تلك الضربة الساحقة للقراصنة، وذلك بتعديل أول 8 بايتات من كود البطاقات المزورة ليصبح “انتهت اللعبة” “GAME OVER”.   جرت هذه الحادثة عام 2001، ولم يتم معرفة العقل العبقري الذي وقف ورائها حتى عام 2008، حتى تم معرفة أنه Christopher Tarnovsky عندما كشف عن ذلك موقع Wired.com والذي يقول أن ذلك الإجراء الدفاعي الذي قام به كريستوفر لصالح DirecTV مازال يعرف بين القراصنة باسم "الأحد الأسود"، بعد أن تم إرسال كود البرنامج الجديد على ما يزيد عن 50 دفعة خلال ما يزيد عن شهرين، يشبه هذا تجميع دبابة في ساحة المعركة المحاصرة بعد أن تنقل إليها قطعاً صغيرة.   لم توقف تلك الضربة القراصنة طويلاً، حتى استطاعوا التغلب على نظام الحماية الجديد، ومازالت تلك المعركة مستمرة بين الطرفين، وللأبد.   عن طريق Jeff Atwood.

لماذا أستعمل TextPad

بالرغم من أن هناك العديد من بيئات البرمجة التي أستعملها بشكل متكرر، والتي تشمل فيجوال ستديو (بإصدارات تتراوح بين الـTeam System نسخة الـSuite، مروراً بالنسخة Professional وانتهاءً بالنسخة Express)، ثم SharpDevelop و ++Notepad، إلا أنني جربت مؤخراً برنامجاً جديداً يسمى TextPad، البرنامج ليس مجاني ولكن بعد تجريبه أحببته فحصلت على النسخة الكاملة منه. ما أعجبني فيه هو بساطته من ناحية، ومرونته الشديدة لتكييفه حسب احتياجاتك الخاصة من جهة أخرى. فمثلاً، أعددته لكي يقوم بتلوين كودات #C بنفس الألوان التي يستعملها Visual Studio، أعددت زر فيه ليقوم بعمل Compile للكود باستخدام CSC، وآخر لتشغيل الكود الذي قام بترجتمه وزر آخر ليقوم بفتحه باستخدام الأداة IL DASM. كل هذا جعل البرنامج بيئة مثالية رائعة وبسيطة جداً لأجرب كود رأيته في أحد المواقع أو قرأته في أحد الكتب مثلاً، أو لأقوم بتعديل صغير على كود موجود عندي دون الحاجة لاستعمال أداة بضخامة VS. طبعاً لست من أولئك المتشددين الذين يدعونك لكتابة كل كوداتك باستخدام الـNotepad، ولكني أدعوك لاستعمال هذه الأداة البسيطة عندما لا تحتاج إلى تعقيدات بيئة برمجة متكاملة IDE كـVisual Studio.