إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

رسائل الأخطاء و فضح الأسرار

تقليص
هذا الموضوع مغلق.
X
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • رسائل الأخطاء و فضح الأسرار

    السلام عليكم ورحمة الله وبركاته
    الجزء الأول
    درسنا اليوم سيكون عن رسائل الأخطاء
    أداة هامة تتيحها الأوتوبلاى ليتعرف المبرمج على مكان الخطأ

    لكنها تصبح كارثة عندما تظهر للمستخدم أثناء عمل البرنامج
    فقد تبوح له بأدق أسرار البرنامج خصوصا لو كان تجارى

    فمثلا أنت لا تحب أن يظهر لمستخدم برنامجك رسالة تخبره بشيئ كالآتى :-
    فى السطر رقم كذا لم يتمكن البرنامج من الحصول على سيريال قرصك الصلب ليقارنه مع كذا فى السطر كذا

    كذلك يمكن للمخترق تتبع الرسالة بمنقح و معرفة مكان سطر الحماية من بين عشرات الآلاف من الأسطر بكل سهولة
    و تكون بذلك كأنك قد أهديت اللص مفتاح منزلك ليدخله بكل سهولة
    كيف نتعامل بشكل آمن و نتجنب هذا المأزق ؟؟
    هناك حلان
    1-الحل التقليدى::
    توقع جميع الأخطاء و تجهيز رسالة خاصة لكل إجراء (قد تنسي توقع أحد الأخطاء)
    2- الحل الغير تقليدى::
    عمل دالة عامة تتعامل مع اى خطأ مهما كان سببه و تظهر رسالة موحدة تكتبها بنفسك
    انتهى الجزء الأول

    الجزء الثانى

    سنبدأ بمسالة بسيطة جدا
    كود:
    x = "almohager"
    Dialog.Message("Notice", x);
    ما نتيجة هذا الكود ؟؟
    رسالة بها نص سابق التعيين فى المتغير إكس
    جميل

    ما نتيجة هذا الكود
    كود:
    y = "almohager"
    Dialog.Message("Notice", x);
    طبعا ستكون رسالة خطأ
    لآن المتغير x لم يتم تعيينه
    سؤال الحلقة
    كيف نضع كود يجعل البرنامج يعطى رسالة خطأ معينة
    و من دالة أخرى من خارج الكود
    و نقل دفة التحكم إلى منطقة بعيدة عن مكان تنفيذ الكود
    على أن يكون نظاما عاما و لا يعتمد على نوع و طبيعة الخطأ
    و يمكن إستخدامه فى أى إجراء من البرنامج ليعطى رسالة "حدث خطأ راجع إجراءك الأخير" مثلا
    نهاية الجزء الثانى

    الجزء الثالث
    يبدو ان عدم التفاعل يرجع لعدم وضوح الموضوع
    حسنا سننحرف قليلا عن الموضوع و سنرجع لاحقا

    س:: كيف تعطينا اللوا رسالة الخطأ ؟؟
    :: هل يمكننا مقاطعة رسالة خطأ صدرت من اللوا (محرك الأوتوبلاى) و إستبدالها ؟؟
    :: هل الرسائل التى تعطينا اياها الأوتوبلاى هى من محرك اللوا أم أنها قد أمليت على اللوا قسرا بواسطة الأوتوبلاى من خلال جدول أخطاء أعدته مسبقا شركة إنديجوروز ؟؟
    ::هل يمكننا إنتهاج نفس الأسلوب و إنتاج رسائل مشابهة بنفس التكتيك ؟؟

    حسنا
    سرعان ما سنعرف ذلك من هذا المثال
    سنضع هذا الكود فقط فى زر و ننفذه
    كود:
    error ("Yes we can add ouer error messages")

    الأن السؤال ::
    ::بم تخبرنا هذه الرسالة و ما هو الخطأ الذى حدث ؟؟
    ::هل حدث خطأ فعلا أم أننا أجبرنا اللوا على الشعور بخطأ ؟؟؟
    ::هل ما شاهدناه هو الشكل الطبيعى للرسائل ؟؟
    ::هل كانت Dialog.Message أم Debug.Meassage ؟؟؟؟

    ::هل عرفتم نوعية الرسائل التى نحن بصدد منعها ؟؟؟
    ::هل أصبح موضوع الدرس واضح ؟؟
    ::هل أكمل ؟؟

    نهاية الجزء الثالث

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

    أقول لهم
    إعتقادكم خاطئ 100 %
    و علينا من الأن فصاعدا أن نثق بأنفسنا و لا نشكك بقدراتنا


    نأتى للفائدة
    أقصد نأتى للكود

    نضع فى الجلوبال
    كود:
    function err()
     Dialog.Message("Notice", "[COLOR="Blue"]حدث خطأ راجع إجراءك الأخير[/COLOR]", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
    end
    طبعا محتوى الرسالة المكتوب بالأزرق إختيارى و ستكتبه على هواك

    نضع فى الزر
    كود:
    function [COLOR="Blue"]mohager[/COLOR]()
    [COLOR="Blue"]y = "almohager"
    Dialog.Message("Notice", x);  [/COLOR]
    end
    xpcall ([COLOR="Blue"]mohager[/COLOR], err)
    بداية نحن حولنا الكود لدالة
    و لمن لا يعرف
    فالمكتوب بالأزرق هو الدالة و إسمها
    الدالة و إسمها إختيارى و ستغيره حسب أكوادك (كل ماهو بالأزرق إختيارى)

    هكذا لن تظهر سوى رسالة الخطأ "حدث خطأ راجع إجراءك الأخير"
    مهما كان نوع الخطأ
    للتأكد
    جرب أكواد مختلفة بأطوال مختلفة و بنوعيات أخطاء مختلفة

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

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

    تم بحمد الله
    شكرا لكل من ساهم أيا كانت مساهمته
    و تحية خاصة للأستاذ [you]
    أترككم فى حفظ الله
    التعديل الأخير تم بواسطة المـهاجر; الساعة 31-10-2014, 07:56 PM.

  • #2
    السلام عليكم ورحمة الله وبركاته

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

    ---------------------------------------------------------------
    ليس بالضرورة التنقيح يتطلب تعقب رسائل الخطأ

    موفق

    تعليق


    • #3
      المشاركة الأصلية بواسطة ثامر أبو بلقيس مشاهدة المشاركة
      السلام عليكم ورحمة الله وبركاته

      و أنا واحد ممن يحبون التعلم
      و عليكم السلام و رحمة الله و بركاته
      مرحبا بك

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

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

      المشاركة الأصلية بواسطة ثامر أبو بلقيس مشاهدة المشاركة
      ليس بالضرورة التنقيح يتطلب تعقب رسائل الخطأ
      لكنها لا زالت احد اسهل واشهر الطرق (تدرس فى kg1 كراك)

      المشاركة الأصلية بواسطة ثامر أبو بلقيس مشاهدة المشاركة
      - أن نغلق التجميعية عند ظهور أي رسالة خطأ بدون الدخول في تفاصيل ما كتب فيها
      من المخاطبون بهذا الكلام المبرمجون ام المستخدمون ؟؟
      هل سيقوم المستخدمين بذلك ؟؟؟
      التعديل الأخير تم بواسطة المـهاجر; الساعة 29-10-2014, 11:03 PM.

      تعليق


      • #4
        جزاك الله خيرا اخانا المهاجر

        الشرح رائع ماشاء الله

        نفع الله بك وبعلمك وفى إنتظار المزيد ان شاء الله

        تعليق


        • #5
          المشاركة الأصلية بواسطة abohmam مشاهدة المشاركة
          جزاك الله خيرا اخانا المهاجر

          الشرح رائع ماشاء الله

          نفع الله بك وبعلمك وفى إنتظار المزيد ان شاء الله
          مرحبا بك اخى الكريم

          تعليق


          • #6
            المشاركة الأصلية بواسطة المـهاجر مشاهدة المشاركة
            ::هل كانت Dialog.Message أم Debug.Meassage ؟؟؟؟

            مرحبا أخى هى Debug.Meassage وليست Dialog.Message


            أكمل أخى حتى يستفيد من يمر على الموضوع أو القسم

            ..... أنا أعرف ولكنى أفضـــل المتابعة معك .....

            تعليق


            • #7
              المشاركة الأصلية بواسطة عبود عبود مشاهدة المشاركة
              ..... أنا أعرف ولكنى أفضـــل المتابعة معك .....
              مرحبا اخى
              ماذا تقصد ؟؟
              هل تقصد انك تعرف ما ذكرته انا حتى الآن ام تعرف ما سأذكره لاحقا ؟؟

              تعليق


              • #8
                السلام عليكم ورحمة الله وبركاته

                هي ليست Dialog.Message لأنها لو كانت كذلك لظهرت
                كما سيحيل له ناتج هاته الرسالة
                كود PHP:
                statuserr pcall(Dialog.Message,"Test")
                if 
                not (statusthen
                  Dialog
                .Message("Error","I forgot to put in argument 2\n\n"..err)
                end 

                تعليق


                • #9
                  المشاركة الأصلية بواسطة المـهاجر مشاهدة المشاركة
                  مرحبا اخى
                  ماذا تقصد ؟؟
                  هل تقصد انك تعرف ما ذكرته انا حتى الآن ام تعرف ما سأذكره لاحقا ؟؟
                  أعتقد أنى أعرف ما سوف تذكره أما ما ذكرته انت إلى الآن أعتقد أنك لم تذكر شيئ .

                  ربما سيكون مشابه لما أعرفه أو يختلف أو أفضل وفى كل الأحوال أفضل أن أستفيد منك أخى .

                  تعليق


                  • #10
                    شكرا أخي الكريم على هذه المعلومات

                    تعليق


                    • #11
                      السلام عليكم ورحمة الله وبركاته

                      إلى غاية أن أقرأ من إخواني ما يعرفون :

                      ضع أخي الكريم في global functions هذا الكود :
                      كود PHP:
                      function print(...)
                          
                      local t = {};
                          for 
                      iv in pairs{...}do
                              
                      t[#t + 1] = tostring(v);
                          
                      end
                       Dialog
                      .Message("Notice"table.concat(t"\t").."\r\n");
                      end;
                      local origCache = {};
                      local pCallback false;
                      function 
                      setErrorCallback(f)
                          if(
                      type(f) == "function")then
                              pCallback 
                      f;
                          
                      end
                      end
                      ;
                      function 
                      protectGlobal(state)    
                          for 
                      iv in pairs(_G)do
                              if(
                      type(v) == "table" and tostring(i) ~= "_G")then
                                  
                      if(type(origCache[i]) ~= "table")then
                                       origCache
                      [i] = {};
                                  
                      end
                                  
                      for jw in pairs(v)do
                                      if(
                      type(w) == "function")then
                                          
                      if(state)then
                                              
                      if(not origCache[i] or not origCache[i][j])then
                                                  origCache
                      [i][j] = w;
                       
                                                  
                      _G[i][j] = function(...)
                                                      
                      local pres = {pcall(w, ...)};
                                                      if(
                      pres[1])then
                                                          
                      return unpack(pres2#pres);
                                                      
                      else
                                                          if(
                      type(pCallback) == "function")then
                                                              pCallback
                      (pres[2]);
                                                          
                      end    
                                                          
                      return nil;
                                                      
                      end
                                                  end
                      ;
                                              
                      end
                                          
                      else
                                              if(
                      origCache[i] and origCache[i][j])then
                                                  _G
                      [i][j] = origCache[i][j];
                                                  
                      origCache[i][j] = nil;
                                              
                      end
                                          end
                                      end
                                  end 
                              end
                          end
                      end


                      وفي on preload

                      كود PHP:
                      setErrorCallback(function(message)
                          print(
                      "عندك خطأ عام راجع ما كتبت """);
                      end);

                      protectGlobal(true); 

                      انتهى جرب الكود الذي وضعه أخي المهاجر في زر :

                      كود PHP:
                         y "almohager"
                      Dialog.Message("Notice"x); 
                      عاين النتيجة بالتوفيق للجميع

                      تعليق


                      • #12
                        جزاك الله خيرا اخانا الفاضل وأشكر الإخوة الذين اثروا الموضوع باقتراحاتهم

                        .

                        تعليق


                        • #13
                          الأخ الفاضل تامر
                          بداية شكرا على الكود
                          هذا حل ممتاز جدا
                          لكنه للأسف يصلح لحالة واحدة فقط

                          لاحظ هذا السطر فى أحداث البريلود خاصتك
                          كود:
                          setErrorCallback(function([COLOR="Magenta"]message[/COLOR])
                          أنت هنا إشترطت مقاطعة أخطاء الدالة message فقط لا غير
                          و لو تذكر كلامى فستجد اننى أتكلم عن خطأ لا نعرف طبيعته و سأقتبس لك من كلامى للتذكير
                          أنا أناقش طريقة التعامل مع خطأ لا نعلم طبيعته و لا مكانه و سيفاجأ به المستخدم وقت التنفيذ
                          سنتعامل مع خطأ برمجى مستقبلى محتمل لكنه مجهول تماما لنا وقت البرمجة
                          ماذا لو كان الخطأ هو ضرب سترنج فى رقم بدون إظهار رسائل ؟؟
                          ضع هذا الكود فى زر و جرب معه طريقتك
                          كود:
                          x = 6
                          y = "five"
                          z = x*y
                          شكرا لتفاعلك المثمر
                          التعديل الأخير تم بواسطة المـهاجر; الساعة 31-10-2014, 05:04 PM.

                          تعليق


                          • #14
                            المشاركة الأصلية بواسطة عبود عبود مشاهدة المشاركة
                            أعتقد أنى أعرف ما سوف تذكره
                            ما سأذكره لا يعلمه إلا أنا و علام الغيوب فقط

                            المشاركة الأصلية بواسطة عبود عبود مشاهدة المشاركة
                            أما ما ذكرته انت إلى الآن أعتقد أنك لم تذكر شيئ .
                            ... ...
                            لا تعليق
                            ... ...


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

                            الموضوع للمناقشة و تنوع الأفكار مما يجعل الموضوع شامل

                            فمثلا حل الأستاذ تامر لا يمنع إلا خطأ واحد إنتقائيا (ميزة فى حالة و عيب فى حالة)
                            حلى سيمنع كافة الأخطاء مجتمعة (ميزة فى حالة و عيب فى حالة)

                            " أيهما أفضل ؟؟ "
                            سؤال غير منطقى
                            سيكون كلاهما ممتاز فى مكانه الصحيح

                            منتظرك
                            التعديل الأخير تم بواسطة المـهاجر; الساعة 31-10-2014, 07:45 PM.

                            تعليق


                            • #15
                              المشاركة الأصلية بواسطة أبو يوسف مشاهدة المشاركة
                              جزاك الله خيرا اخانا الفاضل وأشكر الإخوة الذين اثروا الموضوع باقتراحاتهم

                              .
                              مرحبا بك اخى الكريم

                              تعليق

                              مواضيع تهمك

                              تقليص

                              المنتدى: القسم العام نشرت بواسطة: Reem2Rabeh الوقت: 04-23-2025 الساعة 04:27 PM
                              المنتدى: ضبط وتوكيد الجودة نشرت بواسطة: HeaD Master الوقت: 04-15-2025 الساعة 09:30 AM
                              المنتدى: التصنيع والانتاج نشرت بواسطة: HeaD Master الوقت: 04-11-2025 الساعة 01:08 PM
                              المنتدى: القسم العام نشرت بواسطة: نوال الخطيب الوقت: 03-19-2025 الساعة 03:07 AM
                              المنتدى: الكمبيوتر والإنترنت نشرت بواسطة: عوض السوداني الوقت: 03-18-2025 الساعة 07:22 AM
                              يعمل...
                              X