اذهب إلى المحتوى

بلال زيادة

الأعضاء
  • المساهمات

    4376
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    30

كل منشورات العضو بلال زيادة

  1. تأكد أولاً من أن لديك مهارات قوية في تطوير واجهات المستخدم وتقنيات Front-end. قد تحتاج إلى العمل على مشاريع شخصية أو تدريبات إضافية لتحسين مستوى مهاراتك و من ثم قم بإعداد سيرتك الذاتية وملفك الشخصي على منصات مثل LinkedIn. تأكد من تسليط الضوء على المهارات والتجارب المرتبطة بتطوير Front-end ثم استخدم محركات البحث (مثل Google) ومنصات البحث عن وظائف وتدريبات (مثل LinkedIn, Indeed, Glassdoor) للبحث عن شركات تقدم فرص تدريب عن بُعد في تطوير واجهات المستخدم. مواقع ومنصات للبحث عن فرص تدريب عن بعد: LinkedIn: يُعتبر LinkedIn منصة رائدة للبحث عن فرص التدريب والوظائف. Glassdoor: يوفر معلومات حول شركات مختلفة بما في ذلك فرص التدريب. Remote.co: تُقدم فرص عمل وتدريب عن بعد. We Work Remotely: منصة أخرى تقدم فرص عمل عن بُعد تصفح مواقع شركات تطوير البرمجيات والتكنولوجيا وانظر إذا كانت تعلن عن فرص تدريب أو وظائف عن بُعد ثم تحدث مع أشخاص قد تعرفهم في المجال، واستفسر منهم عن فرص تدريب عن بُعد أو توصيات لشركات تُقدم مثل هذه الفرص و بمجرد العثور على فرص تدريب تناسب مهاراتك واهتماماتك، قدّم طلبك عبر الموقع الإلكتروني للشركة أو المنصة المعنية و تأكد من تقديم سيرتك الذاتية ورسالة تغطية تظهر فيها حماسك ومهاراتك و إذا تم قبولك لمرحلة المقابلة، تأكد من تقديم أداء جيد خلال المقابلة والتأكيد على إظهار قدراتك واستعدادك للتدريب.
  2. يتم بناء على حلول الأسئلة التي تساعد في حلها ، و أيضا على الأعجابات التي تحصل عليها من الأعضاء الأخرين ، ايضا على عدد و كمية المشاركات و الأسئلة التي تقوم بنشرها .
  3. مدة تعلم أي دورة تعتمد على النوع ومستوى الدورة ومحتواها، وأيضًا على مستوى المعرفة والخبرة السابقة للشخص الذي يقوم بالتعلم. عمومًا، هناك دورات قصيرة تستغرق عدة ساعات أو أيام، وهناك دورات تستمر لأسابيع أو شهور، إذا كانت الدورة عبر الإنترنت، فإن بعض الدورات قد تكون مرنة وتسمح لك بتقديم الوقت الذي تراه مناسبًا لإكمالها. بالإضافة إلى ذلك، قد يؤثر مدى التزامك وتفرغك للدورة في سرعة إكمالها، إذا كنت تفكر في الانضمام إلى دورة محددة، فإنه من المفضل التحقق من جدولها وعدد الساعات المخصصة لكل جلسة أو مكون، وكذلك تقدير الوقت الذي ستحتاجه للدراسة خارج الدورة للوصول إلى مستوى الفهم المطلوب، على العموم، استعد للاستثمار في الوقت الكافي للتعلم بشكل جيد وفهم المفاهيم والمهارات المطلوبة. لا تنسى أن الاستمرارية والممارسة المستمرة بعد انتهاء الدورة لها تأثير كبير على تطوير المهارات والاحتراف في المجال الذي تتعلمه.
  4. هناك خطأ في الاستخدام الصحيح للدالة prompt() يجب أن تعلم أن دالة prompt() تقوم بإرجاع قيمة من نوع سلسلة نصية (String)، حتى إذا قام المستخدم بإدخال رقم. وعليه، يجب تحويل هذه القيمة إلى رقم قبل استخدامها في الحلقة for، لتصحيح الخطأ، يمكنك استخدام دالة parseInt() لتحويل قيمة المتغير rows إلى رقم صحيح. يمكنك تحديث الكود كما يلي: let rows = prompt('enter row count'); rows = parseInt(rows); for (let row = 1; row <= rows; row++) { let stars = ''; for (let k = 0; k < row; k++) { stars += '*'; } console.log(stars); } يتم تحويل قيمة المتغير rows إلى رقم صحيح باستخدام دالة parseInt() مما يضمن عمل الحلقة for بشكل صحيح مع الأرقام. الآن يمكنك استخدام الكود بنجاح لطباعة نجوم وفقًا لعدد الصفوف التي يدخلها المستخدم. بالتوفيق
  5. الفاصلة المنقوطة (;): تستخدم لإنهاء الأوامر في العديد من لغات البرمجة، بما في ذلك جافا وجافا اسكربت. يجب وضع الفاصلة المنقوطة في نهاية أي تعليمة أو أمر تقريبًا، لكن هناك بعض الاستثناءات. الأقواس المجعدة ({}) في جافا: تستخدم لتحديد نطاق الأوامر التي تتبع هيكل التحكم (if، else، for، while، إلخ). يكون محتوى الأقواس المجعدة هو الكود الذي سيتم تنفيذه إذا كانت الشرطية مطابقة. if (condition) { // هنا يتم تنفيذ الأوامر إذا كانت الشرطية صحيحة } else { // هنا يتم تنفيذ الأوامر إذا كانت الشرطية غير صحيحة } ملاحظات (Comments): تستخدم لكتابة ملاحظات توضيحية داخل الشفرة والتي لا تؤثر على تنفيذ البرنامج. في جافا، تبدأ الملاحظات بشريطين مائلين (//) للتعليقات الواحدة، وباستخدام أقواس مجعدة (/ * و * /) للتعليقات المتعددة. // هذا تعليق واحد /* هذا تعليق متعدد الأسطر يمكن أن يمتد على عدة أسطر */ الدوال والطرق (Functions / Methods): تُستخدم لتجميع مجموعة من الأوامر تحت اسم واحد وتنفيذها عند الحاجة. في جافا، تعرّف الدوال داخل الكلاسات، بينما يمكن تعريف الطرق داخل الكلاسات والواجهات. // تعريف دالة (Function) في جافا int addNumbers(int a, int b) { return a + b; } // تعريف طريقة (Method) في جافا public void printMessage(String message) { System.out.println(message); }
  6. جافا سكريبت (JavaScript) ، هي لغة برمجة مستخدمة عادة لتطوير الواجهات الرسومية والتفاعلية على صفحات الويب ، تعمل على الجانب العميل (Client-Side) في المتصفح، مما يعني أن الكود يتم تنفيذه على جهاز المستخدم نفسه. تُستخدم لإضافة تفاعلية للمواقع وتغيير محتوى الصفحة بناءً على تفاعل المستخدم ، على الرغم من اسمها المشابه لجافا، إلا أنها لغة مختلفة تمامًا ولا ترتبط بصورة مباشرة بلغة البرمجة جافا. Java NetBeans: هو بيئة تطوير متكاملة (IDE) مصممة لتطوير تطبيقات الجافا (Java) في العديد من المجالات مثل تطبيقات سطح المكتب وتطبيقات الويب وتطبيقات الموبايل وغيرها، يستخدم لبرمجة الجافا وليس الجافا سكريبت ، يقدم بيئة تطوير قوية تساعد المطورين في كتابة وترتيب الكود وتحليل الأخطاء وتصحيحها وتشغيل التطبيقات. بالنسبة للسؤال الثاني، الكود المكتوب بلغة جافا سكريبت لا يمكن تشغيله مباشرة في بيئة جافا نت بينز، لأنهما لغتان برمجيتان مختلفتان بشكل كبير. إذا كنت ترغب في تطوير تطبيقات جافا، فإنك بحاجة إلى استخدام لغة البرمجة جافا وليس جافا سكريبت .
  7. تظهر رسالة الخطأ "Deprecated: Constant FILTER_SANITIZE_STRING is deprecated" بسبب استخدام ثابت (Constant) يُسمى FILTER_SANITIZE_STRING الذي أصبح قديمًا (مهجورًا) في PHP. هذا يعني أن الثابت الذي تم استخدامه قد لا يُدعم في إصدارات PHP الحديثة، وينبغي استخدام بديل له. لحل هذه المشكلة، سنقوم بتحديث الكود لاستخدام بديل للثابت FILTER_SANITIZE_STRING. لاحظ أن الثابت FILTER_SANITIZE_STRING كان يُستخدم لتطهير (sanitize) البيانات المدخلة من أجل تجنب هجمات الحقن والأخطاء البرمجية الأمنية. لذلك سنستخدم وظيفة مخصصة لتحقيق نفس الغرض. إليك الكود الجديد الذي يحل محل الكود القديم: <?php // محلّ هذا السطر القديم // deprecated: define("FILTER_SANITIZE_STRING", "some_value"); // الكود الجديد باستخدام وظيفة مخصصة للتطهير function custom_sanitize_string($string) { return filter_var($string, FILTER_SANITIZE_STRING); } // استخدام الوظيفة الجديدة لتطهير البيانات $cleaned_data = custom_sanitize_string($_POST['input_name']); ?> في هذا الكود، قمنا بإنشاء وظيفة مخصصة تسمى custom_sanitize_string وهي تستخدم دالة filter_var لتطهير البيانات من خلال الثابت FILTER_SANITIZE_STRING. بدلاً من تحديد الثابت مباشرةً، يتم استدعاء الوظيفة custom_sanitize_string لتنفيذ عملية التطهير. يرجى استبدال "input_name" بالاسم الفعلي للحقل الذي ترغب في تطهير بياناته في النموذج الخاص بك. وبهذا، يجب أن تتخلص من رسالة الخطأ المُهجور ويتم تطهير البيانات بشكل آمن.
  8. العمل في دولة أخرى قد يكون تجربة مثيرة ومفيدة، والصعوبة في الأمر يعتمد على الكثير من العوامل التي تشمل القوانين الهجرة والعمل في الدولة المستهدفة، مؤهلاتك وخبراتك المهنية، طبيعة الوظيفة التي تتقدم لها، وغيرها من العوامل. من الناحية العامة، قد تكون هناك عدة خطوات عملية للتقدم للعمل في دولة أخرى: البحث عن وظائف: يمكنك البدء بالبحث عن وظائف في الدولة التي ترغب في العمل بها، عبر مواقع التوظيف على الإنترنت، أو التواصل مع شبكاتك المهنية والشركات المحلية. التقديم على الوظائف: بعد العثور على فرص وظيفية مناسبة، يمكنك تقديم طلبات التوظيف والسيرة الذاتية إلى الشركات المستهدفة. التأشيرة والهجرة: إذا تم قبولك للعمل في الدولة الأخرى، قد تحتاج إلى الحصول على تأشيرة عمل أو إقامة تسمح لك بالعمل والإقامة هناك. إجراءات الحصول على التأشيرة تختلف من دولة لأخرى وتعتمد على القوانين الهجرة والعمل في تلك الدولة. الانتقال والاستقرار: بعد الحصول على التأشيرة والقبول للعمل، يمكنك الانتقال إلى الدولة المستهدفة والبدء في العمل والاستقرار هناك. قد تكون هذه العملية تحديًا نسبيًا وتختلف من شخص لآخر ومن دولة لأخرى. قد تحتاج إلى التكيف مع ثقافة جديدة وقوانين مختلفة، وقد تواجه بعض التحديات اللغوية والاجتماعية. من الناحية الإيجابية، فإن العمل في بيئة جديدة يمكن أن يمنحك فرصًا للتعلم والتطور المهني والشخصي.
  9. أشكرك على اقتراحك القيم والمهتم بتحسين تجربتك التعليمية عبر Zoom. ومن الواضح أن هذه الميزة التي اقترحتها ستكون مفيدة جدًا للطلاب والمتعلمين، حيث ستمكنهم من التواصل المباشر مع المدرب وطرح جميع الأسئلة بشكل منتظم. سنعمل على مراسلة الإدارة بشأن هذا الاقتراح
  10. لا يوجد إجابة واحدة صحيحة لهذا السؤال، فالأفضلية في اختيار دولة للعمل في مجال البرمجة تعتمد على عدة عوامل وتفضيلات شخصية. تختلف الدول من حيث فرص العمل، الرواتب، تكنولوجيا المعلومات والاتصالات (ICT)، تكاليف المعيشة، جودة الحياة، والبيئة العامة للعمل والمجتمع. بعض الدول تتمتع بسوق عمل نشط وفرص وظيفية واسعة في مجال البرمجة، مثل الولايات المتحدة، كندا، أستراليا، المملكة المتحدة، ألمانيا، وسنغافورة. هذه الدول تجذب الكثير من المبرمجين والمطورين لاحتوائها على شركات تكنولوجيا كبرى والعديد من الشركات الناشئة. ومع ذلك، هناك دول أخرى تعتبر وجهات مثيرة للاهتمام للعمل في مجال البرمجة بناءً على بعض الاعتبارات الإضافية. على سبيل المثال، إذا كنت تفضل تكاليف المعيشة المنخفضة وتجربة ثقافات جديدة، فإن بعض الدول الآسيوية والأفريقية قد تكون خيارات مثيرة للاهتمام. بالإضافة إلى ذلك، تأتي التكنولوجيا بطبيعتها مع العمل عن بُعد، مما يسمح للمبرمجين بالعمل من أي مكان في العالم، بغض النظر عن موقع الشركة التي يعملون لديها. بشكل عام، يجب أن تقوم بإجراء البحث والتحقيق بشكل أكبر حول الدول والأسواق المحتملة ومقارنة العوامل المختلفة قبل اتخاذ قرار العمل في دولة معينة. تأخذ في الاعتبار ما يُهمك أكثر من ناحية العمل والحياة، وكذلك احتياجاتك المالية والثقافية.
  11. في لغة Python، الهاش تاج (#) يستخدم لعمل التعليقات في الكود. عندما يظهر الهاش تاج في سطر من الكود، فإن بايثون يعتبر كل ما يليه على نفس السطر كتعليق ولا يتم تنفيذه أثناء تشغيل البرنامج. يُستخدم التعليقات لتوضيح أو شرح الكود للمطورين الآخرين أو للتذكير للمطور نفسه حول أجزاء معينة من البرنامج. هناك طريقتين لاستخدام التعليقات في Python: تعليقات مفردة (Single Line Comments): يتم استخدام الهاش تاج (#) في بداية السطر لكتابة تعليق واحد على نفس السطر. المحتوى الذي يلي الهاش تاج لن يتم تنفيذه. # هذا تعليق واحد print("سيتم طباعة هذا الجزء") # يمكن وضع التعليق بجوار الكود في نفس السطر x = 5 # تعليق عن قيمة x تعليقات متعددة (Multi-line Comments): تُستخدم ثلاثة أزواج من علامات الهاش تاج لكتابة تعليق يمتد عبر عدة أسطر. """ هذا تعليق متعدد الأسطر. يمكننا كتابة النص هنا دون أن يتأثر التنفيذ. """ ''' هذا طريقة أخرى لكتابة تعليق متعدد الأسطر. ''' بمجرد وضع النص بين العلامات الثلاثية للهاش تاج، يمكننا كتابة أي نص في التعليق دون أن يؤثر على تنفيذ البرنامج. استخدام التعليقات يعتبر ممارسة جيدة في البرمجة لأنه يجعل الكود أكثر وضوحًا ويساعد المطورين الآخرين على فهم النوايا والوظائف المراد تنفيذها في البرنامج.
  12. للربط بين Dialog و GNav في تطبيق Flutter، يمكنك اتباع الخطوات التالية: تحديد حالة لـ GNav: قبل بناء واجهة المستخدم لـ GNav و Dialog، قم بتحديد حالة لـ GNav. يمكنك استخدام حزمة "provider" أو "riverpod" لإدارة الحالة بشكل عام. إنشاء الـ Dialog: أنشئ شاشة لعرض الـ Dialog الخاص بك. يمكن استخدام حزمة "flutter/material.dart" لبناء الـ Dialog. تحديد زرارات الـ Dialog: قم بتحديد الأزرار التي ترغب في وضعها في الـ Dialog. بعد النقر على زر معين، يجب أن تعود القيمة المناسبة لتحديث حالة GNav. تحديث حالة GNav: عند النقر على أحد الأزرار في الـ Dialog، قم بتحديث حالة GNav بناءً على القيمة المختارة. هنا مثال بسيط يوضح كيفية تنفيذ ذلك باستخدام مكتبة "provider" في Flutter: import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; // تحديد حالة لـ GNav class GNavProvider with ChangeNotifier { int _selectedIndex = 0; int get selectedIndex => _selectedIndex; void setSelectedIndex(int index) { _selectedIndex = index; notifyListeners(); } } // الواجهة الرئيسية للتطبيق void main() { runApp( ChangeNotifierProvider( create: (context) => GNavProvider(), child: MyApp(), ), ); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: Text('GNav Dialog Example')), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ // عرض قيمة GNav الحالية Consumer<GNavProvider>( builder: (context, gNavProvider, child) => Text( 'Selected Index: ${gNavProvider.selectedIndex}', style: TextStyle(fontSize: 20), ), ), ElevatedButton( onPressed: () { // فتح الـ Dialog عند النقر على الزر showDialog( context: context, builder: (context) => CustomDialog(), ); }, child: Text('Show Dialog'), ), ], ), ), ), ); } } class CustomDialog extends StatelessWidget { @override Widget build(BuildContext context) { return AlertDialog( title: Text('Choose an option'), actions: [ TextButton( onPressed: () { // تحديث حالة GNav بناءً على القيمة المختارة Provider.of<GNavProvider>(context, listen: false).setSelectedIndex(0); Navigator.pop(context); // إغلاق الـ Dialog بعد النقر على الزر }, child: Text('Option 1'), ), TextButton( onPressed: () { // تحديث حالة GNav بناءً على القيمة المختارة Provider.of<GNavProvider>(context, listen: false).setSelectedIndex(1); Navigator.pop(context); // إغلاق الـ Dialog بعد النقر على الزر }, child: Text('Option 2'), ), ], ); } } في هذا المثال، يتم استخدام مكتبة "provider" لإدارة حالة GNav. تظهر القيمة المحددة حاليًا لـ GNav في الواجهة الرئيسية، وعند النقر على الزر "Show Dialog"، يتم فتح Dialog يحتوي على زرين. عند النقر على أحد الأزرار، سيتم تحديث حالة GNav وإغلاق الـ Dialog.
  13. القواميس هي هيكل بيانات في لغة البرمجة بايثون تستخدم لتخزين البيانات بطريقة مفهومة وفعالة. تُعرف القواميس بأنها مجموعات غير مرتبة من العناصر، ويتم الوصول إلى القيم فيها باستخدام مفاتيح فريدة لكل قيمة. تأخذ القواميس شكل أزواج "مفتاح: قيمة". فائدة القواميس في بايثون: الوصول السريع إلى البيانات: يتيح استخدام المفاتيح للوصول السريع إلى القيم، حيث يتم تعيين قيم معينة لمفاتيح فريدة. تمثيل البيانات: يمكن استخدام القواميس لتمثيل بيانات معقدة بشكل مرتب ومفهوم. على سبيل المثال، يمكن تخزين معلومات حول شخص ما باستخدام قاموس بالمفاتيح "الاسم" و "العمر" و "البريد الإلكتروني" وما إلى ذلك. تعديل البيانات بسهولة: يمكن إضافة وتحديث وحذف البيانات في القواميس بسهولة باستخدام المفاتيح. المرونة في هيكل البيانات: يمكن أن تحتوي قواميس بايثون على أنواع مختلفة من البيانات لكل مفتاح، بما في ذلك القواميس ذاتها أو قوائم أو قيم من نوع مختلف. مفيدة في الحلول الكثيرة: تسهل القواميس حلاً للمشاكل التي تتطلب تطابق بين بيانات من نوعين مختلفين. فعندما يكون لديك قيمة وترغب في العثور على المفتاح المرتبط بها، يمكن استخدام القاموس للبحث بفعالية. ممتازة للتعامل مع البيانات الكبيرة: توفر القواميس استراتيجيات بحث فعالة (تستخدم التجزئة)، وبالتالي فهي تعمل بشكل جيد حتى مع البيانات الكبيرة.
  14. الفترة الزمنية اللازمة لإتمام دورة لغة بايثون تعتمد على المحتوى والمدة الزمنية للدورة نفسها، فهناك دورات مختلفة تتراوح مدتها من أيام قليلة حتى أسابيع أو أشهر، اعتمادًا على مستوى المحتوى وعمقه. وبالطبع، يعتمد الوقت الذي يمكنك الاستثمار فيه يوميًا أيضًا على جدولك والتزاماتك الشخصية والعملية. ومع ذلك، يمكنني أن أعطيك مثالًا تقريبيًا لكيفية التخطيط لذلك. لنفترض أن لديك دورة عبر الإنترنت تتألف من حوالي 20 ساعة من محتوى الفيديو الدراسي. إذا قررت أن تكون الفترة الزمنية للدورة حوالي 3 أسابيع، فإنك تحتاج إلى تخصيص وقت يومي لمشاهدة محتوى الفيديو. لنقم بالحساب: إذا كان مجموع ساعات الفيديو هو 20 ساعة. والفترة الزمنية المستهدفة هي 3 أسابيع، أي ما يعادل 21 يومًا. فإن عدد الساعات التي تحتاج لمشاهدتها يوميًا للانتهاء في هذه الفترة هو: 20 ساعة ÷ 21 يومًا ≈ 0.95 ساعة في اليوم. بالتالي، إذا قررت الالتزام بمشاهدة حوالي ساعة واحدة من الفيديوهات يوميًا، فإنك ستكمل الدورة في حوالي 3 أسابيع (21 يومًا) تقريبًا. هذه تقديرات تقريبية، ويمكن أن تختلف باختلاف مدة الدورة وتفاصيل المحتوى واستيعابك الشخصي للمعلومات. قد تحتاج إلى زيادة أو تقليل الوقت يوميًا اعتمادًا على وضعك وتقدمك.
  15. مشكلة "ntcreatefile(device vboxdrvstub) failed 0xc00000e status_no_such_device VirtualBox" عادة ما تكون ناجمة عن مشكلة في تثبيت أو تشغيل Oracle VirtualBox على النظام. هذه المشكلة قد تحدث لعدة أسباب، وإليك بعض الخطوات التي يمكن أن تساعد في حل المشكلة: تحديث VirtualBox: تحقق من أن لديك أحدث إصدار من Oracle VirtualBox. قم بزيارة موقع VirtualBox الرسمي وتأكد من تحميل وتثبيت الإصدار الأخير المتوافق مع نظام التشغيل الخاص بك. تثبيت Oracle VM VirtualBox Extension Pack: قد يكون هناك تباين بين إصدار VirtualBox وحزمة التوسيع (Extension Pack). تأكد من تحميل وتثبيت حزمة التوسيع المتوافقة مع إصدار VirtualBox الذي لديك. التحقق من تفعيل الـ Virtualization في BIOS/UEFI: تأكد من تفعيل خاصية الـ Virtualization في BIOS/UEFI للجهاز. قد يكون عليك البحث عن الإعدادات المتعلقة بـ Virtualization وتفعيلها. يختلف طريقة الوصول إلى BIOS/UEFI حسب الجهاز والشركة المصنعة. إعادة تثبيت VirtualBox بأدوات المشرف (Administrator): قد تحتاج إلى إعادة تثبيت VirtualBox باستخدام صلاحيات المشرف (Administrator). قم بتشغيل برنامج التثبيت كمسؤول عن طريق النقر بزر الماوس الأيمن واختيار "Run as administrator". الاطمئنان لسلامة نظام الملفات: تأكد من أن نظام الملفات الخاص بك غير تالف. قد يكون هناك مشكلة في القرص الصلب تؤثر على تشغيل VirtualBox بشكل صحيح. إلغاء تثبيت برامج أخرى التي قد تتداخل مع VirtualBox: قد تتعارض بعض برامج الأمان أو برامج الإفاكت مع VirtualBox. قم بإلغاء تثبيت برامج ثالثة أخرى مؤقتًا وحاول تشغيل VirtualBox مرة أخرى.
  16. لتجميد الصفوف من 1 إلى 5 (خمسة صفوف) فقط دون تجميد أي صفوف قبلها، يمكنك اتباع الخطوات التالية: انقر على الصف الذي يلي الصفوف التي ترغب في تجميدها. في هذه الحالة، ستنقر على الصف رقم 6، لأنك ترغب في تجميد الصفوف من 1 إلى 5. انتقل إلى علامة التبويب "عرض" (View) في شريط الأوامر. في مجموعة الألواح (Window group)، اضغط على زر "تجميد الألواح" (Freeze Panes). اختر الخيار "تجميد الألواح العلوية" (Freeze Top Row). يرجى إخباري بنتيجة هذه الخطوات.
  17. في البرمجة، يُشار إلى الكائن القابل للتكرار بالإنجليزية "Iterable" وهو مفهوم يُستخدم لوصف مجموعة من العناصر التي يمكن الانتقال عبرها بطريقة متكررة أو بالتكرار. عناصر هذا الكائن يمكن أن تكون، على سبيل المثال، عناصر في قائمة (List) أو أزواج مفتاح-قيمة في قاموس (Dictionary) أو أعضاء في مجموعة (Set). التكرار هو عملية تكرار الكود للقيام بعملية ما على كل عنصر في الكائن القابل للتكرار دون الحاجة إلى كتابة نفس الكود مرارًا وتكرارًا. لنفترض أن لدينا قائمة تحتوي على أسماء بعض الفواكه، ونرغب في طباعة كل فاكهة في سطر منفصل. يمكننا استخدام التكرار لتحقيق ذلك: fruits = ["تفاح", "برتقال", "موز", "عنب"] for fruit in fruits: print(fruit) النتيجة ستكون: تفاح برتقال موز عنب هنا، تم استخدام الكائن القابل للتكرار (القائمة fruits) وأُجريت عملية التكرار (for loop) للوصول إلى كل فاكهة في القائمة وطباعتها. القدرة على التكرار عبر الكائنات قابلة للتكرار هي مفهوم أساسي في البرمجة وتُسهل العديد من المهام التي تتطلب معالجة مجموعة من البيانات.
  18. مرحباً Mishari Dawlat ، في برنامج Excel، تحديد صفوف معينة وتجميدها يعمل عادة على تجميد الصفوف حتى أعلى الصفوف المحددة بما في ذلك الصفوف التي تأتي قبلها. هذا هو السلوك الافتراضي لتجميد الصفوف في Excel. عندما تقوم بتحديد الصفوف الأولى (مثل الصفوف من 1 إلى 5) وتجميدها، سيقوم Excel بتجميد هذه الصفوف وكل الصفوف التي تأتي قبلها أيضًا. هذا يعني أنه سيتم تجميد الصفوف من 1 إلى 5 بالإضافة إلى أي صفوف تكون قبل الصف الأول. إذا أردت تجميد الصفوف الأولى فقط (الصفوف من 1 إلى 5) وعدم تجميد الصفوف التي تأتي قبلها، يمكنك فعل ذلك بالتالي: قم بالنقر فوق الصف السادس (الصف الذي ترغب في تجميده من بعده) لتحديده. انتقل إلى علامة التبويب "عرض" (View) في شريط الأوامر. اضغط على زر "تجميد الألواح" (Freeze Panes) في مجموعة الألواح (Window group). اختر الخيار "تجميد الألواح العلوية" (Freeze Top Row). هكذا، ستقوم بتجميد الصفوف من 1 إلى 5 دون تجميد الصفوف التي تأتي قبلها.
  19. عند استخدام Postman في مشروع Node.js لإرسال طلبات POST، يمكنك اختيار تنسيق بيانات الجسم المُرسلة في الطلب، ومن بين هذه التنسيقات تجد "x-www-form-urlencoded" و "raw". الفرق بينهما يتمثل في كيفية تنسيق وترميز البيانات المرسلة. x-www-form-urlencoded: يستخدم تنسيق "x-www-form-urlencoded" عندما تريد إرسال البيانات كنص عادي مُرمَز في جسم الطلب. يتم ترميز القيم باستخدام نسق ترميز URL المعروف باسم "Percent-Encoding" حيث يتم تحويل المسافات والأحرف الخاصة والرموز غير الآمنة إلى نسق قابل للإرسال عبر الشبكة. Raw: يستخدم تنسيق "Raw" عندما تريد إرسال البيانات بصيغة محددة، مثل نص عادي أو JSON أو XML، دون ترميز إضافي. عند استخدام هذا التنسيق، يجب عليك أن تكون على علم بتنسيق البيانات التي تقوم بإرسالها وتحديد المحتوى بناءً على طلب الخادم. ملحوظة: تتوقف اختيار التنسيق على كيفية استقبال البيانات في خادم Node.js الخاص بك. إذا كنت تستخدم body-parser أو حزمة مشابهة لتحليل بيانات الجسم المرسلة، فمن المهم تحديد التنسيق الصحيح الذي تستخدمه في Postman حتى يتمكن الخادم من فهم البيانات المرسلة بشكل صحيح.
  20. استخدام Express Error Handler (أو throw new Error) يعتمد على السياق والحاجة، وهناك بعض النقاط التي يمكن أن تساعدك في تحديد متى يحبذ استخدامه ومتى يجب تجنبه: متى يحبذ استخدامه: عند التحقق من الاستثناءات: في بعض الأحيان، يمكن أن تنشأ استثناءات (Exceptions) بسبب سيناريوهات معينة، ويمكن استخدام throw new Error لإثارة استثناء والتعامل معه. الاستخدام في Middleware: قد ترغب في استخدام Express Error Handler في Middleware للتعامل مع الأخطاء العامة وإعادة ردود الفعل الصحيحة والمناسبة إلى المستخدم. متى يجب تجنبه: عند التعامل مع الأخطاء المتوقعة: في بعض الحالات، من الأفضل تجنب استخدام throw new Error للتعامل مع الأخطاء المتوقعة، وبدلاً من ذلك استخدم تنسيق أكثر تحكمًا مثل إرجاع رمز الحالة والرسالة الخطأ كجزء من جسم الاستجابة. عدم التعامل الكامل مع الأخطاء: عند استخدام Express Error Handler أو throw new Error، يجب التأكد من أنك تقوم بالتعامل الكامل مع الأخطاء بشكل صحيح، وإلا فقد يؤدي ذلك إلى حدوث أخطاء غير متوقعة وانهيار التطبيق. عند استخدام الوظائف اللاعادية: عند استخدام الوظائف اللاعادية (asynchronous functions)، من الأفضل استخدام نمط التعامل مع الأخطاء باستخدام try-catch أو التعامل مع الأخطاء باستخدام معالج الأخطاء (error handler) المخصص لـ Express. التعامل مع استثناءات الاعتمادية على الاستثناءات: في بعض الحالات، من الأفضل استخدام أدوات ومكتبات مخصصة للتعامل مع استثناءات الاعتمادية على الاستثناءات بدلاً من استخدام throw new Error. الاعتماد على Express Error Handler (أو throw new Error) يعتمد على تفضيلات التصميم ونوع التطبيق وحجمه والسيناريوهات المحتملة التي قد تحدث. من الأفضل القيام بالتجربة والتحقق من الأساليب التي تعمل بشكل جيد في تطبيقك وتلبي احتياجاتك.
  21. لفهم البرمجة الكائنية بشكل جيد، يجب عليك فهم وتطبيق المفاهيم التالية: الكلاسات والكائنات: تتعلق هذه المفاهيم بتعريف الكلاسات (Classes) التي تحدد سلوك وخصائص الكائنات (Objects). يجب فهم كيفية إنشاء الكلاسات والكائنات، وكيفية استخدام الخصائص والأساليب المعرفة داخلها. التراث والاشتقاق: يتعلق الأمر بإنشاء كلاس جديد باستخدام كلاس موجود مسبقًا، حيث يمكنك الاستفادة من السمات والسلوك الموجود في الكلاس الأصلي. هذا يسمى التراث (Inheritance) والكلاس الجديد يسمى الكلاس المشتق (Derived Class)، بينما الكلاس الأصلي يسمى الكلاس الأساسي (Base Class). الاختصار (Polymorphism): يسمح لك بتعريف واستخدام الوظائف بطرق مختلفة في الكلاسات المشتقة بناءً على نوع الكائن. التجميع (Composition): يسمح لك بإنشاء كائن جديد يتكون من كائنات أخرى تعتبر أجزاء له. تسمح لك هذه المفهوم ببناء هياكل أكبر وأكثر تعقيدًا. الوصول والتعديل (Access Modifiers): هي مصطلحات تحدد مدى إمكانية الوصول إلى الخصائص والأساليب في الكلاسات. بالنسبة لمفاهيم SOLID وDesign Patterns: SOLID هي اختصار يشير إلى مجموعة من المبادئ الأساسية التي تساعدك على كتابة كود برمجي قابل للصيانة والتوسع. كل حرف في SOLID يمثل مبدأ معين، وهم: S - مبدأ الفصل الفعلي (Single Responsibility Principle): يجب أن يكون لكل كلاس مسؤولية واحدة فقط. O - مبدأ التفتح للتعديل والإغلاق للتوسيع (Open/Closed Principle): يجب أن تكون الكلاسات مفتوحة للتوسيع ومغلقة للتعديل. L - مبدأ استبدال ليسكوف (Liskov Substitution Principle): يجب أن يكون بإمكانك استبدال كائن من كلاس مشتق مكان كائن من الكلاس الأساسي دون تأثير سلبي على البرنامج. I - مبدأ الفصل الواجهة (Interface Segregation Principle): يجب أن تكون الواجهات مخصصة لاحتياجات العملاء المحددة. D - مبدأ الاعتمادية على الاستثناء (Dependency Inversion Principle): يجب أن تعتمد الكلاسات على الواجهات بدلاً من التفاصيل الداخلية. أما بالنسبة لتصميم الأنماط (Design Patterns)، فهي عبارة عن حلول معترف بها ومجرَّبة لمشكلات معينة في التصميم البرمجي. تعتبر الأنماط منهجية مساعدة تسهل عملية التصميم وتحسن جودة الكود وصيانته. أمثلة على بعض أنماط التصميم: Singleton، Factory، Observer، وغيرها. لذا، من المهم العمل على فهم وتطبيق هذه المفاهيم لتحسين فهمك للبرمجة الكائنية وتطوير مهاراتك في التصميم البرمجي.
  22. إذا كان سكربت PHP الذي تعمل به يعمل بشكل صحيح على نسخة PHP 7.4 ولكن لا يعمل على نسخة PHP 8، فقد تكون المشكلة ناجمة عن اختلافات في اللغة أو التغييرات التي قد تكون قد حدثت في PHP 8. لتحديد السبب الحقيقي لعدم عمل السكربت على PHP 8، يمكنك اتباع الخطوات التالية: التحقق من سجل الأخطاء: قم بالتحقق من سجل الأخطاء (Error log) في نسخة PHP 8 لمعرفة إذا ما كان هناك أخطاء محددة تظهر عند تشغيل السكربت. يمكنك الاطلاع على سجل الأخطاء من خلال ملف السجلات (Error log file) أو من خلال واجهة سطر الأوامر (Command Line Interface). التحقق من التغييرات في PHP 8: قم بمراجعة التغييرات الجديدة في PHP 8 والتحقق من ما إذا كانت هناك تغييرات قد تؤثر على سكربتك. قد تكون هناك تغييرات في الدوال أو الأنواع أو التركيبة العامة للسينتكس في PHP 8. استخدام مكتبات محدثة: تحقق من أنك تستخدم مكتبات PHP ومكتبات أخرى تدعم PHP 8. قد يكون هناك مكتبات قديمة لا تدعم PHP 8 وتحتاج إلى تحديثها إلى الإصدارات الحديثة. استخدام أدوات للاختبار: يمكنك استخدام أدوات اختبار توافق السكربت مع PHP 8 مثل "PHP Compatibility" للتحقق من توافق السكربت مع إصدارات PHP المختلفة. مراجعة التعليمات البرمجية: قد تحتاج إلى مراجعة التعليمات البرمجية وإجراء بعض التغييرات لضمان توافقها مع PHP 8، مثل تغيير بعض الدوال المتقادمة أو النماذج المتضمنة. باختبار هذه النقاط وتحليل الأخطاء المحتملة، يمكنك أن تجد السبب الحقيقي وتقوم بإجراء التعديلات اللازمة لجعل سكربتك يعمل بنجاح على PHP 8.
  23. يبدو أنك تحاول استخدام مكتبة Compressor لضغط ملفات الفيديو في تطبيق Android الخاص بك. ومن خلال الشيفرة المقدمة، لاحظت أن الكود لا يتضمن مكتبة Compressor بشكل صحيح. هذا هو السبب الذي يجعلها غير موجودة عندك وتحصل على خطأ. لتصحيح ذلك، يجب عليك تضمين مكتبة Compressor في تطبيق Android الخاص بك. قبل البدء في ذلك، تأكد من أنك قمت بتضمين معرّف التبعية الصحيح في ملف build.gradle للوحدة البرمجية الخاصة بالتطبيق. يمكنك القيام بذلك عن طريق إضافة السطر التالي: implementation 'id.zelory:compressor:3.0.0' ثم، بعد ذلك، قم بمزامنة المشروع لجلب التبعيات المضافة حديثًا. الآن، يمكنك استخدام مكتبة Compressor في الكود. اتبع الخطوات التالية: استيراد مكتبة Compressor: قم بإضافة التالي في مقدمة ملف الكلاس: import id.zelory.compressor.Compressor; استخدام مكتبة Compressor في AsyncTask: قم بتعديل الدالة doInBackground لتستخدم Compressor كما يلي: @Override protected String doInBackground(String... strings) { // Initialize video path String videoPath = null; try { // Initialize uri Uri uri = Uri.parse(strings[1]); // Initialize output directory File outputDir = new File(Environment.getExternalStorageDirectory(), "CompressedVideos"); outputDir.mkdirs(); // Compress video videoPath = new Compressor(uploadved.this) .setDestinationDirectoryPath(outputDir.getPath()) .compressToFile(new File(uri.getPath())) .getAbsolutePath(); } catch (IOException e) { e.printStackTrace(); } // Return Video path return videoPath; } استخدام AsyncTask لضغط الفيديو: في دالة onActivityResult، قم بإضافة الكود التالي لاستدعاء AsyncTask وضغط الفيديو: @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); // Check condition if (requestCode == 100 && resultCode == RESULT_OK && data != null) { // When result is ok // Initialize Uri Uri videoUri = data.getData(); // Create CompressVideo AsyncTask and execute it new CompressVideo().execute(videoUri.toString()); } } بهذا الشكل، يجب أن تكون قد استخدمت مكتبة Compressor بشكل صحيح لضغط ملفات الفيديو في تطبيقك عند رفعها من الهاتف وتطبيق الضغط عليها. يرجى التأكد من وجود الإذن اللازم للكتابة إلى الذاكرة الخارجية قبل استخدام مكتبة Compressor.
  24. حاول ارفاق الكود كاملاً لو سمحت.
  25. من الواضح أن هناك مشكلة تحدث بعد رفع التطبيق على متجر Google Play وتنزيله منه. هذه المشكلة يمكن أن تكون بسبب العديد من الأسباب المحتملة، وفيما يلي بعض الأشياء التي يمكنك فحصها لمحاولة حل المشكلة: التحقق من سجل الأخطاء: قم بالتحقق من سجل الأخطاء (Logs) الخاص بالتطبيق بعدما يتم إغلاقه عند الانتقال إلى الصفحة الثانية. يمكنك استخدام أدوات المطور (Developer Tools) المتوفرة في الهاتف لعرض سجل الأخطاء والتنبيهات. ربما يساعدك ذلك في تحديد سبب المشكلة. الاختبار على متجر Google Play: تأكد من أنك تختبر نفس الإصدار الذي قمت بتحميله من Google Play وتثبيته على هاتفك لأنه قد يكون هناك اختلافات في النسخة المنشورة على المتجر. الإصدارات والأجهزة: تأكد من أن التطبيق يدعم الإصدارات والأجهزة التي تم تجربة التطبيق عليها. قد يكون هناك فرق في الإصدارات أو الأجهزة التي تسبب المشكلة. الأذونات: تحقق من أن التطبيق يحصل على الأذونات اللازمة للوصول إلى المكونات أو الخدمات اللازمة على الهاتف. البيانات المحلية: إذا كنت تستخدم بيانات محلية (مثل قواعد البيانات) في التطبيق، تحقق من أنها تعمل بشكل صحيح عند التحميل من Google Play. مراجعة قاعدة مستخدمي التطبيق: قد يساعدك مراجعة تقييمات المستخدمين وتعليقاتهم على Google Play للعثور على أي مشاكل يعانون منها بعد تنزيل التطبيق. التحديثات والشهادات: تحقق من أنك لم تقم بتحديث التطبيق بشكل صحيح عند رفعه على متجر Google Play. تأكد من أنك تستخدم الشهادة المناسبة للتطوير والإنتاج على Google Play Console. قد تحتاج إلى التحقق من جميع هذه الأمور وتطبيق التغييرات اللازمة لحل المشكلة. إذا كنت لا تستطيع تحديد سبب المشكلة، فقد تكون مشكلة في التطبيق نفسه، وعندها قد تحتاج إلى إجراء اختبارات إضافية وتحليل أكثر تفصيلاً للوصول إلى السبب الحقيقي للمشكلة.
×
×
  • أضف...