غالباً أول نظرة إلى أكواد برمجية بالنسبة لأي شخص لم يسبق إليه الاطلاع على عالم الأكواد حتسيب عنده انطباع بأنها شيء صعب ومعقد وغير مفهوم .. أو يظن أنه منقول أو محفوظ مكرر .. تماما زي ما حتكون نظرته لكاتبها .. ![]() لكن الانطباع اللي اقترح عليه إنه يدركه هو إن خلف كل كود مكتوب أو كاتب للكود فيه كوكتيل كامل من المواقف والمشاعر وشريط من الأحداث مكتوب بين السطور .. فأنت ككاتب للأكواد (Coder) تمارس دور المفكر والمبدع .. ترجع الكرسي لورا في عصف ذهني (Brainstorm) وتفكر إزاي تحول أفكارك إلى شيء ملموس إلى أن تنتهي من إيجاد الطريقة المثلى وتتضح لك خطة العمل (Work plan) فتنط من على الكرسي في سعادة كأي مخترع وتقول : وجدتها وجدتها. وبعد مرحلة التنطيط السعيدة، تنتقل إلى الحدث الرئيسي للقصة ............ اللي هو مرحلة التنفيذ (Implementation)، تكتب على الكيبورد فتستمع إلى مقطوعتك لحظياً كما يستمع عازف البيانو لأصابعه وهو يضغط على المفاتيح ليسمع تتابع منتظم يشعر معه بأنه يصنع شيئا ما ليسعد به الآخرين .. أو هكذا يظن. تعبير العزف مش تعبير مجازي .. دا حقيقي وجربه .. افتح النوت باد (NotePad) جرب تعمل لصق (Paste) لكلمة باستخدام الكيبورد ثم اضغط فراغ (Space) اعمل (Paste) تاني ثم اضغط (Enter) .. كرر العملية دي عدة مرات واستمع إلى صوت الكيبورد ويصاحب متعة العزف (Typing) متعة أخرى تشبه متعة مشاهدة مبارة لكرة قدم لا تعرف النتيجة النهائية، تحبس أنفاسك مع كل اختبار للكود (Test) واللي كأنه هجمة يإما لك أو عليك .. وتفرح وتزأطط مع كل جون (Build successfully) وتهتم وتغتم مع كل جون يدخل فيك (Build Failed). وأثناء العزف على الكيبورد أنت تمارس أيضاً دور الباحث الأكاديمي اللي قاعد يقرا ويقرا عشان يحل مشكلة ما موقفة خط انتاج في أحد المصانع. ولا تنتهي المتع مع كتابة الأكواد بانتهاء حركات أصابعك على المفاتيح بل تبدأ مرحلة أخرى من المتعة .. مرحلة النشر (Publishing) وتحول أفكارك وعزفك وحلولك إلى فيلم مثير تنتظر آخر دقيقة لتعرف كيف تكون النهاية .. اللي ممكن تكون سعيدة لما نتاج الكود (Final Product) يلقى القبول والاستحسان .. أو مفاجئة غير سعيدة برفضه أو طلبات التعديل التي لا تنتهي، لتبدأ من جديد تغيير سيناريو الأحداث أو بالأحرى تصنع سيناريو جديد ولكن بحماس أقل وشعور بالمتعة أقل. مضمون الأكواد هو حالة مستمرة من المثالية .. والحياة بين أكوادك أنت لا اكواد غيرك هو بالظبط الحياة في المدينة الفاضلة .. حيث كل شيء في مكانه .. منظم .. جميل .. كل شيء يسير حسب ما هو موضوع لأجله في هذا المكان .. وكل شيء يسلم الآخر ما يريده .. دون تكاسل أو خداع أو لف أو دوران. هذه الحياة المثالية لو أخذها كاتب الأكواد معه في عالمه الإنساني فإنه سيعاني معاناة أكبر من كل المتع اللي ممكن ينالها بسبب الأكواد. تخيل قاعدة مثل قاعدة (if) البرمجية وهي قاعدة من أوائل قواعد البرمجة التي تدرس ونصها كالتالي: if (جملة شرطية) then .... else if (جملة شرطية أخرى) .... else .... end if والجملة الشرطية أي حاجة بتقول آه (True) أو لا (False) .. زي مثلا .. هل تاريخ انهاردة هو 25/5/2011 ??: If (Date.Now = 25/5/2011) then { .... سكوب 1 فيه شوية اكواد .... } else If (Date.Now = 24/5/2011) then { .... سكوب 2 فيه شوية أكواد تانية .... } else { .... سكوب 3 فيه أكواد تالتة خالص.... } end if في عالم البرمجة المثالي .. الجملة الشرطية مالهاش اجابة غير آه (True) أو لا (False) .. وبس .. كمان لا يمكن تتحقق جملة شرطية فيتنفذ سكوب غير السكوب بتاعها .. مش ممكن تكون الإجابة على جملة آه ويدخل في السكوب بتاع لأ .. مستحيل .. وطبعا جملة (if) لازم تنتهي عند (enf if) .. مفيش بعدها كلام ولا تعقيب ولا بس ولا لكن ... تخيل أنك كإنسان تعتاد على ذلك .. كل جملة شرط تنتظر إجابة بنعم أو لا بدون تفاصيل وأسباب وحواديت وحكايات .. وحسب الإجابة تنتظر أفعال السكوب بتاع الإجابة دي .. وتريد أن تتعامل بهذا المنطق في حياتك مع كل الناس اللي هما أصلا مش كودر واللي كتير منهم - مش كلهم - أكيد مش بيتعاملوا بقاعدة (If) ولا يعرفوا عنها حاجة. لاحظ إنك لو اتعاملت كده فإنت بتعذب الناس اللي حواليك اللي فعلا حيكونوا مش فاهمين أنت بتعمل كده ليه وحتكون بالنسبة لهم شخص فضائي عجيب تماماً وحاد إلى أقصى حد بالنسبة لهم، ناهيك طبعا عن اتهامك بقصور الرؤية والسطحية وإحادية الرأي وتبسيط المشاكل أحياناً وأحيانا تعقيدها ووضع العقدة في المنشار. مثلاً حتلاقي جملة شرطية بسيطة وواضحة وسهلة زي : if (هل أنا بحب جوزي وبحترمه ونفسي يكون اسعد إنسان) then أوفر له سبل السعادة اللي تريحه .. واخليه يشعر بثقتي واحترامي ليه else إهمال كامل وكل يوم مشكلتين تلاتة end if مع بساطتها فلو إجابة الجملة الشرطة لا فعند التنفيذ (Run) .. حتلاقيه بيدخل في السكوب التاني بتاع لأ .. العجيب بقا إن لو إجابة الجملة الشرطية نعم برضه التنفيذ بيدخل في السكوب التاني .. تحاول تفهم .. مش حتفهم .. أو مثلا: if (هل أنا مقتنع إن الإسلام حق وإن الله حكيم عليم وزي ما له الخلق له الأمر ومن لم يحكم بما أنزل الله فأولئك هم الكافرون) then نطبق الشريعة else مش حينفع نطبق الشريعة end if برضه سواء كانت الإجابة على جملة الشرط بنعم أو لا برضه التنفيذ دايما بيدخل في السكوب التاني .. وعادي جدا جدا. أو مثلاُ: if (هل السجاير دي ملعونة بتهد صحتي ومضيعة فلوسي وضراني مع مراتي ) then حبطل السجاير واكون انسان جديد else مش حبطل end if والعجب إن الطبيعي إنه مش حيبطل ولو بطل يبقى حدث غريب وعجيب ويضرب بيه المثل .. دا فيه واحد يا جماعة أجاب الجملة الشرطية بنعم ودخل في سكوبها .. وعجبي ساعات تضطر إنك تغير في جملة الشرط عشان تخلي الدخول العجيب في السكوب التاني منطقي فتخلي جملة الشرط مثلا if(هل انا بحب جوزي and بحبه 4 كمان معاه) أو if(هل السجاير ملعونة and انا مجنون عقليا) لكن المشكلة إن الشروط اللي بتزودها عشان التنفيذ يكون مفهوم ومنطقي بتكون مرفوضة من اللي حواليك ودايما أنت غلط ومش مقدر ومش فاهم حاجة. والنتيجة إنك لو استخدمت هذه القاعدة المثالية السيئة حتقعد تفكر ليل ونهار في كود مناسب يتوافق فيه جملة الشرط مع سكوب التنفيذ الغير منطقي اللي بيحصل .. وآخر ما حتزهق حتروح تعيش مع شوية أكواد في ماتريكس أو إن تتجنن وشعرك يبيض أو يقع كعادة أهل الأكواد. ديوان المسائل أحمد مطر |
Wednesday, May 25, 2011
أجمل وأسوأ ما فيك يا كود
Sunday, June 29, 2008
طرائف محاضري الأي تي
هذه المواقف حدثت معي أومع زملاء لي في مجال المحاضرات والتدريس .... باشمهندس انت قلت لنا نفتح قائمة File ونقول open عشان نفتح فايل جديد .. انا روحت البيت وفتحت قائمة File وقعدت اقول Open Open وبرضه مفيش حاجة اتفتحت .. دا درس للباشمهندس عشان بعد كده يختار ألفاظه بعناية وما يقولش قول open ويقول اختار open المحاضر للمتدرب الذي مسك الماوس ووضعها على الشاشة : حضرتك بتعمل ايه ؟؟ .. فرد عليه المتدرب : هو مش أنت قلت حطوا الماوس على قائمة File ؟؟!! ودا درس تاني للمحاضر عشان يفكر الف مرة قبل ما يقول كلمة زي (حط الماوس على ..) دي هو لو انا عملت Static Member داخل class وناديت عليه من جوا الـ Class من Non-Satatic Method وعملت object من الـ Class دي ومن الـ Object ناديت على الـ Non-Static Method هل الـ Static Constructor حيتنفذ ولا لأ ؟؟ .. دا سؤال من نوعية اسئلة التعذيب بالكهربا وجلد الذات .. حرام عليك يا بني بتعمل فينا كده ليه ؟؟!! هو ايه الفرق بين الـ Void والـ Array ... حسبي الله ونعم الوكيل هو ليه القوسين في آخر الـ C# Method مدورين () ومش مربعين [] .. معلش ظروفهم كده باشمهندس .. انا عملت الكود زي ما انت كاتب بالظبط وبيطلع ايرورز .. تبقى المشكلة فين ؟ .. أكيد مش فيك وأكيد مش في الكود وأكيد مش فيا .. غالبا المشكلة في مايكروزفت هي مش الـ Metod مش بتـ Return حاجة ... إيه لازمة الـ Void بقا ؟؟؟!! الله يسامحهم اللي عملوا الـ Void الطالب : هي الـ HTMLControls عاملة زي الـ abstract Class .. المحاضر : نعم ؟؟؟!! .. الطالب : آآقصدي الـ Interface .. المحاضر : افندم ؟؟؟!! .. الطالب : لا لا ولا حاجة الطالب خريج الجامعة المصرية لمحاضر البرمجيات .. ايه ده هو كله فهم فهم مفيش حاجة حفظ ؟؟!! .. معلش تعال كمان يومين اكون جهزت لك حاجة تتحفظ طالب آخر لنفس المحاضر : أفففف .. أنا زهقت من التفكير !!! والمحاضر في ذهنه :: XXXX التعليم واللي جابوا التعليم |
Monday, June 23, 2008
إنترنت إكسبلور vs فايرفوكس
كمطور ويب ارشح للمستخدم الانترنت على نظام تشغيل الويندوز برنامج انترنت اكسبلورر7 .. لأن دا حيساعدني اني اعرض صفحات الويب بإمكانيات معينة لا يمكن اظهارها مع متصفح آخر كال فايرفوكس مثلا.. زي مثلا لو كنت عايز عمل خلفية بلون متدرج لخلية في جدول ولا اعرف كم سيكون ارتفاع هذه الخلية .. بمعنى انها خلية والكلام المكتوب داخلها سيأتي من داتا بيز مثلا .. وسأقوم باستخدام شريحة مدرجة اللون كباكجراوند للخلية .. سيكون شكل الشريحة كالتالي : ولو استخدمت الشريحة في خلية حيكون الكود كالتالي <table width="200" align="center" background="bg.png"><tr><td
المشكلة حتظهر مع عدم توقعنا لارتفاع الخلية المعتمد على كمية الكتابة الموجود داخلها .. يعني لو كان الموضوع اكبر من كده حتلاقي الشكل كالتالي :
بمعنى إن تدرج اللون مش حيطول معاك مع تغير ارتفاع الخلية ... وحتى لو حاولت تمنع التكرار باستخدام الـ Styles بمعنى إن الكود يبقى كده : <table style="background-repeat:repeat-x"width="200" align=center background="bg.PNG"><tr><td valign=top>نص الموضوع نص الموضوع .... نص الموضوع</td></tr></table>
طيب وايه الحل ??? الحل بمنتهى البساطة هو الاستغناء عن الشريحة واستخدام الكود التالي <table style="FILTER: واللي حيطلع لي النتيجة التالية :
واللي بالتأكيد حيكون مناسب تماما لكل ارتفاع لهذه الخلية واللي مستخدمي أي متصفح آخر غير الإنترنت إكسبلورر لن يتمكنوا من مشاهدتها .. واللي حتمثل صعوبة على مطور الصفحة إذا أراد لمستخدم أي متصفح آخر أن يرى بغيته نوع آخر من الإمكانيات أتاحه لي استخدام حضرتك للانترنت اكسبلورر بدلا من غيره onclick="document.images['ImageID'].width -=25;document.images['ImageID'].height -=25;" onclick="document.images['ImageID'].width +=25;document.images['ImageID'].height +=25;" اتفرج على المزيد من اللعب في كثافة الصورة وتدويرها وعمل ميرور ليها وحاجات تانية واتفرج كمان على اللعب بالظلال ياسلام على الصورة لما تتعمل على شكل موجات .. ايه الجمال ده اتفرج على عمل سليدز زي الباور بوينت بالظبط وكله سكريبتات كفاية كدا عشان نراعي مشاعر اخواننا اللي بيستخدموا فايرفوكس .. واللي يا حرام مش شايفين اي حاجة من الحاجات اللي فوق دي
لكن المزايا اللي الناس بتتناقلها كميزة كبرى وفارق شاسع بين الفاير فوكس والانترنت اكسبلورر زي مثلا إنه سريع ؟؟ انا مش عارف مين مصدر الإشاعة .. بس لكل الناس النت بيبقى سريع أو بطيء تبعا لسرعة الاتصال .. اما الفروق بين البروزرات فدي فروق في طريقة تحميل الصفحة .. وهي ايحائية اكتر منها جدية .. يعني لما واحد قديم شوية في النت يقول للتاني الجديد في عالم النت الفايرفوكس سريع ونزله .. التاني ينزله ويجربه وتلقائي بيقول والله فلان دا عنده حق .. الموضوع بالظبط عامل زي نظرية القرود الخمسة ونفس الميزة تنطبق على موضوع الآمان .. فأنا استخدم برامج الحماية المتعلقة بالـ Internet Security واللي وظيفتها الأمان عند تصفح النت بغض النظر عن نوع متصفحك عموما قناعتي بأفضلية الانترنت اكسبلورر 7 لأنه افضل للمطور وبالتالي الفائدة ستعود للمستخدم والنقطة دي مهمة جدا ولا يمكن إغفالها .. إلا إني برضه أوجه تهنئة لكل مستخدمي الفايرفوكس على ظهور الاصدار الثالث من البرنامج ورغم اني مش من مستخدميه لكن نزلته وجربته عندي لاحتياجي لوجود اكتر من متصفح ويب على الجهاز ليرقد بسلام إلى جانب اخويه الاوبرا والنيتسكيب كل في انتظار فرصته للقفز على مكانة الانترنت اكسبلورر |
Sunday, April 15, 2007
موقع متعدد اللغات
المبرمج كريم كان اقترح فكرة إني اكتب مقال تقني مرة كل شهر واخترت يوم 15 عشان يكون موعده .. ولأني طبعاً لم يسبق لي كتابة موضوع كامل قبل كده فالبوست دا عبارة عن دردشة بصوت عالي .. إحنا دلوقتي عايزين نعمل موقع بكذا لغة باستخدام ASP.net بحيث يكون واجهة الموقع بالشكل التالي
الكلمات باللون الأخضر دي ثابتة في الصفحة والكلمات المقابلة حتيجي من داتا بيز وتتحط في Labels طيب إحنا حنتكلم على نقطتين في الموضوع ده : وبالمرة حكون عامل بروجيكت لكل لغة عندي ويبقى الروابط زي ما بنشوفها في المواقع الـ ٍStatic لو عايز تعرض الصفحة العربي يبقى http://.......................com/arabic/index.aspx ولو الإنجليزي يبقى http://.......................com/English/index.aspx ويبقى عندي على رووت الموقع فولدر بكامل الموقع لكل لغة يعني مثلاُ لو قلنا عندنا جدول العملاء اللي باين في المثال فيه CustomerID (index , Primary Key , Identity), CustomerName_A (الاسم بالعربي), CustomerName_E(الاسم بالإنجليزي), CustomerJob_A(الوظيفة بالعربي), CustomerJob_E(الوظيفة بالإنجليزي), Address_A(العنوان بالعربي), Address_E(العنوان بالإنجليزي) وطبعا الـ Fields العربي Unicode وعملية ال Insert حتكون باستخدام الـ Parameters وإلا حتلاقي الناتج على كتير من السيرفرات ؟؟؟؟؟؟؟؟؟ وحيكون لعبنا بالحرف الأخير لأنك حتحط session للغة Session("langauge") = "A" أو Session("langauge") = "E" في الـ Session start في البرنامج حتبدأ مثلاً بالعربي وفي زرار تغيير اللغة تبدأ تغير ما بين اللغتين If Session("langauge") = "A" then Session("langauge") = "E" Else Session("langauge") = "A" End if لو عايز تجيب البيانات باللغة العربي يبقى الـQuery بالشكل ده حتجيب dr اللي هو عبارة عن datarow لل Record المطلوب عرضه Lbl_CustomerName.text = dr("CustomerName_" & Session("langauge")) Lbl_CustomerJob.text = dr("CustomerJob_" Session("langauge")) Lbl_Address.text = dr("Address_" Session("langauge")) دا شكل كودك .. شكل موحد يختلف حسب الـ session
الأول .. إنك تعمل جدول في الداتا بيز لكلمات التصميم بحيث يتم استدعائها .. شايفها طريقة غريبة جداً .. وحمل زائد بدون داعي على الداتا بيز وما ذكرتش الطريقة إلا لأني اعلم شركة خارج مصر تستخدمها وتؤكد على أفضليتها على باقي الطرق الطريقة الثانية أن تضاعف محتويات كل صفحة فكل كونترول للغة العربية له نظيره في الإنجلزية ويتم التبادل بين ظهور كل منهما عبر زر تغيير اللغة .. وهنا يظهر نفس السؤال .. ماذا لو كان عندنا أكثر من لغتين .. الطريقة الثالثة المفضلة عندي ... وهي استخدام namespace اسمها Resources ونقوم بالخطوات التالية : في العربي : <data name="CN"> <value>الاسم : <>value> <><data> في الإنجليزي <data name="CN"> <value>Name :<>value> </data> 2- في كود صفحتك إنشأ object من الـ namespace المذكورة وليكن كالتالي Public SafLang As System.Resources.ResourceManager SafLang = New System.Resources.ResourceManager("Ma_3lina.Langauge" & Session("Langauge"), System.Reflection.Assembly.Load("Ma_3lina")) نلاحظ أن الـ object سيختار الـ Resource الخاص باللغة الذي سيستعمله من الـ session وحسب حالتها Ma_3lina هي الـ NameSPace الذي نعمل تحته 3- في صفحات الديزين يمكن وضع الـ object المسمى SafLang والحصول على القيم داخله ففي حالة الحصول على البيانات من ملف العربي تظهر الكتابة بالعربي وفي حالة الإنجليزي تظهر بالإنجليزي يمكن عندها إضافة عدد كبير من ملفات الـ Resource وسيبقى الكود كما هو .. لن يتغير إلا زر تغيير اللغة فقط بعد إضافة Fields للغات في الداتا بيز ياريت تعذروني لو الموضوع متلخبط شوية بس أرجو أن يكون فيه فايدة ولا تبخلوا علينا بالنصح |

