مقدمة من أكاديمية حسوب
دورة تطوير التطبيقات باستخدام لغة JavaScript
في هذه الدورة ستتعلم لغة جافا سكريبت, استخدام مكتبة React.js, بناء API الموقع بواسطة Node.js, تطوير تطبيق جوال باستخدام React Native, و في نهاية الدورة ستتعلم تطوير تطبيق محادثة شبيه بتطبيق WhatsApp.
دورة تطوير واجهات المستخدم
في هذه الدورة ستتعلم لغة HTML و لغة CSS و لغة JavaScript. من ناحية التطبيق العملي ستتعلم طريقة بناء واجهة متجر إلكتروني مكون من ست صفحات, تحويل خمسة تصاميم PSD إلى صفحات ويب, بناء واجهة مستخدم تشبه موقع يوتيوب, بناء لوحة تحكم إحترافية.
دورة تطوير تطبيقات الجوال باستخدام تقنيات الويب
في هذه الدورة ستتعلم أساسيات منصة كوردوفا و كيف تستخدمها لتطوير تطبيقات متعددة المنصات, بناء تطبيق لموقع Wordpress, تطوير تطبيق قائمة مهام, تطوير تطبيق حالة الطقس, تطوير تطبيق لمطعم باستخدام إطار العمل Ionic 4.
دورة تطوير تطبيقات الويب باستخدام لغة PHP
في هذه الدورة ستتعلم لغة PHP من الصفر, استخدام إطار العمل Laravel بشرح مفصّل و عملي, كيفية تطوير شبكة اجتماعية تشبه Instagram, بناء API لتطبيق جوال وفق أسلوب RESTful, تطوير موقع إعلانات مبوبة, تطوير نظام إدارة محتوى CMS كامل.
دورة تطوير تطبيقات الويب باستخدام لغة Ruby
في هذه الدورة ستتعلم البرمجة بلغة Ruby إنطلاقاً من أبسط المفاهيم وحتى بناء تطبيق حقيقي, إستخدام إطار العمل Ruby on Rails بشرح مفصّل و عملي, بناء تطبيق حقيقي عبارة عن شبكة اجتماعية تشبه تويتر, تطوير مجتمع الكتروني يشبه حسوب I/O.
دورة علوم الحاسوب
هذه الدورة معدة لتكون مدخل لعلوم الحاسوب و لغات البرمجة حيث ستتعرف فيها على أنظمة التشغيل و ستتعمق في نظام لينكس و في كيفية التعامل معه من خلال موجه الأوامر, بالإضافة إلى قواعد البيانات و أساسيات الشبكات و الخوادم و مبادئ الحماية والأمان في الويب.

مفهوم السجلات و التعامل معها في جافا

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

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

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

  • الإستثناءات: فمثلاً عندما يتم إطلاق إستثناء (Exception) في البرنامج يجب علينا تخزين البيانات المتعلقة به و التي تتضمن سبب الإستثناء، الملف و السطر الذي أطلق بسببه، الثريد (Thread) الذي كان يشغّل الكود و تسلسل تنيفذ الدوال (StackTrace).
  • الأحداث غير الطبيعية: مثل أن تحاول عرض الصورة الشخصية للمستخدم لكن البرنامج لا يجدها رغم أن المستخدم لم يقم بحذفها.
  • الأحداث التي تريد تتبعها: مثل أن تقوم بتسجيل دخول أحد المسؤولين في موقعك عبر IP معين في وقت معين أو تسجيل قيامه بحذف مسؤولين آخرين أو حذف بيانات معينة، و هذه الأحداث إن لم يتم تسجيلها قد لا يُعرف فاعلها.

 

كيف تقوم بتسجيل السجلات

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

يمكنك طباعة السجلات مباشرة في موجه الأوامر (Console) باستخدام الأمر System.out.print على سبيل المثال و لكن لا يفضل إستخدامه أبداً في عملية تسجيل السجلات لكون هذه الطريقة غير مرنة و قد تضطر في المستقبل لإستبدالها بأحد المكتبات التي ذكرناها سابقاً مع الإشارة إلى أننا سنستخدم مكتبة Log4J في شرحنا كي نتعرف على بعض النصائح في كتابة السجلات.

 

كيف تعمل Log4J

تمتلك Log4J كلاس إسمه LogManager يستخدم لإدارة المسجلات Loggers، و يقوم هذا الكلاس بإنشاء المسجلات (Loggers) و إعدادها والإحتفاظ بها قبل إستخدامها، ويتم تمييز كل مسجل (Logger) عن الآخر بإسم مميز، فمثلاً يمكنك إنشاء مسجل بالإسم GUI أو UsersEvents حسب البيانات التي تريد تسجيلها بإستخدامه، ويمتلك كل مسجل إعدادات خاصة به تصف أين و كيف و ماذا سيسجل بالضبط كما هو موضح في الصورة.

كما ترى في الصورة نقوم بتمرير البيانات التي نريد تسجيلها للمسجل، و يقوم المسجل حينها بتحديد إن كان سيقوم بتسجيلها أم لا، إن كان يريد تسجيلها سيقوم بتمرير البيانات للـAppender، ومهمته هي كتابة البيانات إلى مكان معين يمكننا تحديده، لكن كيف سيقوم بكتابة البيانات؟ يجب على المستخدم تحديد كيف سيقوم بكتابة البيانات من خلال كائن يسمى Layout حيث يقوم هذا الأحير بأخذ البيانات و تنسيقها مثل كتابة التاريخ و الوقت و بيانات أخرى كثيرة و تحويلها لنص (String) يمكن قراءته بسهولة،

توفر Log4J الكثير من الـLayouts الجاهزة للإستخدام منها:

  • JsonLayout الذي يقوم بحفظ البيانات على شكل صيغة JSON.
  • HtmlLayout الذي يقوم بحفظ البيانات على شكل جدول HTML مما يسهل عرض البيانات على المتصفح.
  • PatternLayout الذي يسمح لك بكتابة النمط الذي سيتم تسجيل البيانات به.
  • XMLLayout الذي يقوم بحفظ البيانات على شكل XML.

بعد ذلك يقوم الـAppender بكتابة هذا النص في المكان الذي يجب حفظ السجلات فيه،

توفر Log4J الكثير من الـAppenders الجاهزة للإستخدام مثل:

  • ConsoleAppender الذي يقوم بكتابة السجلات في موجه الأوامر.
  • FileAppender الذي يقوم بكتابة السجلات في ملف وهو الذي يستخدم بالعادة.
  • JDBCAppender الذي يقوم بكتابة السجلات في قاعدة بيانات (وهو أمر غير مفضل بالعادة).
  • SocketAppender الذي يقوم بكتابة السجلات إلى Socket، و يكون مناسباً في بعض الحالات مثل إرتباط الجهاز الذي يتم تشغيل البرنامج عليه بخادم رئيسي.
  • HttpAppender الذي يقوم بإرسال طلبات Http تحمل السجلات.

 

ما الذي يجب تسجيله

تختلف الأمور التي قد تحتاج لكتابتها في السجل بإختلاف مكان تشغيل البرنامج و حالته، فمثلاً قد تحتاج لتسجيل تحذير لحدث غير متوقع لكن برنامجك تدارك الموضوع أو قد تحتاج لتسجيل إستثناء منع برنامجك من عمل شيء معين أو قد تحتاج لتسجيل إستثناء قاتل (Fatal) يؤدي إلى إيقاف برنامجك عن العمل، فمن هنا نعرف أن للأحداث المسجلة مستويات (Levels) متفاوتة بالأهمية،

توفر المكتبات إمكانية تحديد مستوى البيانات المسجلة، و سنعرض هنا المستويات التي توفرها Log4J مرتبة حسب قوتها:

  • Trace: يستخدم لتسجيل ماذا يفعل البرنامج بالضبط بغرض فهم كيف تحدث المشاكل أثناء تطوير البرنامج، و يتم تسجيل أغلب العمليات التي حدثت بها.
  • Debug: يستخدم لتسجيل البيانات بغرض إكتشاف الأخطاء و تتبعها.
  • Info: يستخدم لتسجيل الأحداث الطبيعية المهمة في البرنامج التي يسببها المستخدم بشكل مباشر أو يقوم بها النظام وحده، كأن يقوم بتسجيل دخول المستخدم.
  • Warn: يستخدم لتسجيل الأحداث التي قد تتحول لأخطاء في المستقبل مثل اقتراب إمتلاء قاعدة البيانات.
  • Error: يستخدم لتسجيل الأخطاء و الإستثناءات (Exception) التي تحدث و التي يتداركها البرنامج من خلال catch كما في هذا المثال:
Logger logger = LogManager.getLogger("IO");
try{
    FileReader reader = new FileReader(“data.txt”);
}catch(FileNotFoundException ex){
    logger.error(“The file data.txt was not found”، ex);
}
  • Fatal: تستخدم لتسجيل الأخطاء التي لا يمكن تداركها وتوقف البرنامج عن العمل بشكل كلي.

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

 

أين يجب تسجيل السجلات

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

نبّهني عن
guest
6 تعليقات
الآراء المضمنة
شاهد جميع التعليقات
Mhd Nuhad Sabri
8 شهور سابقاً

شكراا جزيلا لك أستاذ رامي لنشر العلم المفيد والممتع.
جزاكم الله الخير.

آخر تعديل 8 شهور سابقاً بواسطة Mhd Nuhad Sabri
عبدالله
عبدالله
7 شهور سابقاً

السلام عليكم ورحمة الله وبركاته
الداعي لكم بالخير من هواة البرمجة وقى زادني موضوعكم المتعلق بالسجلات معلومة جيدة جزاكم الله خيرا
كما نني متشوق لمعرفة فائدة واستخدام ثلاثة اشياء في البرمجة اقرأها ولا اجد من يدلني على فائدتها في البرمجة وهي المؤشرات pointers —- المراجع ( References )  —— stucks المكدسات .
فهل من مكان او احد يستطيع توضيح الهدف من وجودهن في البرمجة واستخداماتهن .
ادام الله لكم التوفيق والنجاح .
hisaby7@gmail.com
عبدالله علي

محمد هرموش
المدير
7 شهور سابقاً
رداً على  عبدالله

و عليكم السلام و رحمة الله و بركاته.
هذه المصطلحات تتعلمها بتفصيل في دروة ++C
إفتح قائمة الدروس للتنقل بين الدروس بسهولة.
و بالنسبة للمكدسات إسمها stack و ليس stuck و هذه شرحتها ضمن درس إسمه STL تجده في قائمة الدروس أيضاً.

ahmad
ahmad
6 شهور سابقاً

لسلام عليك

انا لم ادرس في لمرسة و تعلمت الانجلزية والان ادرس جافا هل ممكن اشتغل بيها

مستقبلا اتمنى صحة نكم شكرا

محمد هرموش
المدير
6 شهور سابقاً
رداً على  ahmad

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

محمود الشرعبي
1 يوم سابقاً

جزاك الله خير

جميع الحقوق محفوظة للموقع   ٢٠٢٠ - ٢٠١٤ ©
DMCA.com Protection Status

محتوى الموقع يخضع لرخصة (CC BY-NC-ND 4.0) التي لا تسمح باستخدام الشروحات لأغراض تجارية, إجراء تعديل عليها و نشرها في موقع آخر, وضع الشروحات في تطبيق أو في كتاب إلا في حال أخذ موافقة صريحة من إدارة الموقع.

© 2020 Harmash. All Content is licensed under CC BY-NC-ND 4.0 unless mentioned otherwise.