-
المساهمات
12716 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
356
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Mustafa Suleiman
-
إذا أردت جعل Raspberry Pi يبث إشارة Wi-Fi لشبكة محلية وليس لديك أي اتصال بالإنترنت، يمكنك استخدام برمجية React Native لتصميم تطبيقك، ويمكن توقيع التطبيق باستخدام React.js. عند تسجيل الدخول إلى التطبيق على الحاسوب بواسطة "localhost" وإدخال اسم المستخدم في قاعدة البيانات المحلية، يمكنك الوصول إلى التطبيق على هاتفك المحمول أو على أي هواتف متصلة بنفس الشبكة التي يعمل عليها الحاسوب. ويتم تصدير التطبيق في شكل APK وليس من خلال Expo. بالنسبة للكود، فإذا كنت تستخدم Node.js في مشروعك، فيمكنك استخدام الحزمة "react-native-wifi-reborn" لإنشاء شبكة Wi-Fi محلية، كما هو موضح في المثال التالي: import WifiManager from 'react-native-wifi-reborn'; WifiManager.setEnabled(true); WifiManager.connectToSSID(ssid, password) .then(() => console.log('Connected to network')) .catch((error) => console.log('Error connecting to network: ', error)); ومن أجل توقيع التطبيق باستخدام React.js، يمكنك استخدام حزمة "react-native-community/cli"، كما هو موضح في الأمثلة التالية: وتوقيع التطبيق تعني إنشاء مفتاح توقيع (Signing Key) خاص للتطبيق ويتم استخدامه لتوقيع الملف التنفيذي APK. وهذا يؤكد أن الملف التنفيذي غير معدل أو مزور ويمكن تثبيته بأمان على الأجهزة المستهدفة. وتتم هذه العملية باستخدام أدوات التوقيع المتاحة في React Native والتي تتضمن الأمر "react-native run-android --variant=release" الذي ينشئ ملف تنفيذي APK موقع في مجلد "android/app/build/outputs/apk/release". # تثبيت حزمة React Native CLI npm install -g react-native-community/cli # توقيع التطبيق باستخدام React.js react-native bundle --entry-file index.js --platform android --dev false --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res cd android ./gradlew assembleRelease
-
أولاً ، تحتاج إلى التحقق مما إذا كان المستخدم الذي قام بتسجيل الدخول هو رئيس قسم أو مدير. يمكنك القيام بذلك عن طريق إضافة شرط if-else للتحقق من نوع المستخدم. على سبيل المثال ، لنفترض أن رئيس القسم لديه نوع مستخدم 1 ، والمدير لديه نوع مستخدم 2. <?php // Check user type $user_type = $_settings->userdata('type'); $is_department_head = ($user_type == 1); $is_manager = ($user_type == 2); ?> <!-- Main Sidebar Container --> <aside class="main-sidebar sidebar-dark-primary elevation-4 sidebar-no-expand bg-dark"> <!-- Brand Logo --> <a href="<?php echo base_url ?>admin" class="brand-link bg-transparent text-sm shadow-sm"> <img src="<?php echo validate_image($_settings->info('logo'))?>" alt="Store Logo" class="brand-image img-circle elevation-3 bg-black" style="width: 1.8rem;height: 1.8rem;max-height: unset;object-fit:scale-down;object-position:center center"> <span class="brand-text font-weight-light"><?php echo $_settings->info('short_name') ?></span> </a> <!-- Sidebar --> <div class="sidebar os-host os-theme-light os-host-overflow os-host-overflow-y os-host-resize-disabled os-host-transition os-host-scrollbar-horizontal-hidden"> <div class="os-resize-observer-host observed"> <div class="os-resize-observer" style="left: 0px; right: auto;"></div> </div> <div class="os-size-auto-observer observed" style="height: calc(100% + 1px); float: left;"> <div class="os-resize-observer"></div> </div> <div class="os-content-glue" style="margin: 0px -8px; width: 249px; height: 646px;"></div> <div class="os-padding"> <div class="os-viewport os-viewport-native-scrollbars-invisible" style="overflow-y: scroll;"> <div class="os-content" style="padding: 0px 8px; height: 100%; width: 100%;"> <!-- Sidebar Menu --> <nav class="mt-4"> <!-- Part 1: Visible to department head only --> <?php if($_settings->userdata('type') == 2): ?> <ul class="nav nav-pills nav-sidebar flex-column text-sm nav-compact nav-flat nav-child-indent nav-collapse-hide-child" data-widget="treeview" role="menu" data-accordion="false"> <li class="nav-header">Department Head Menu</li> <li class="nav-item"> <a href="<?php echo base_url ?>admin/?page=department_info" class="nav-link nav-department_info"> <i class="nav-icon fas fa-th-list"></i> <p> Department Info </p> </a> </li> <!-- more department head menu items --> </ul> <?php endif; ?> <!-- Part 2: Visible to manager only --> <?php if($_settings->userdata('type') == 3): ?> <ul class="nav nav-pills nav-sidebar flex-column text-sm nav-compact nav-flat nav-child-indent nav-collapse-hide-child" data-widget="treeview" role="menu" data-accordion="false"> <li class="nav-header">Manager Menu</li> <li class="nav-item"> <a href="<?php echo base_url ?>admin/?page=manager_info" class="nav-link nav-manager_info"> <i class="nav-icon fas fa-th-list"></i> <p> Manager Info </p> </a> </li> <!-- more manager menu items --> </ul> <?php endif; ?> <!-- Part 3: Visible to all users --> <ul class="nav nav-pills nav-sidebar flex-column text-sm nav-compact nav-flat nav-child-indent nav-collapse-hide-child" data-widget="treeview" role="menu" data-accordion="false"> <li class="nav-header">All Users Menu</li> <li class="nav-item dropdown"> <a href="./" class="nav-link nav-home"> <i class="nav-icon fas fa-tachometer-alt"></i> <p> Dashboard </p> </a> </li> <li class="nav-item"> <a href="<?php echo base_url ?>admin/?page=archives" class="nav-link nav-archives"> <i class="nav-icon fas fa-archive"></i> <p> Archives List </p> </a> </li> <!-- more menu items visible to all users --> </ul> </nav> في هذا الكود المحدث ، تنقسم عناصر القائمة إلى ثلاثة أجزاء: الجزء 1: مرئي لرئيس القسم فقط الجزء 2: مرئي للمدير فقط الجزء 3: مرئي لجميع المستخدمين يمكنك ضبط عناصر القائمة حسب الضرورة لكل جزء.
-
كاشف الصدمات أو Shock detector هو جهاز يتم استخدامه للكشف عن الاهتزازات أو الصدمات القوية التي تحدث في الأجسام أو الأجزاء المختلفة من المعدات أو الهياكل. يتم استخدام كاشف الصدمات بشكل شائع في العديد من التطبيقات، مثل الأمن والسلامة والصناعة والنقل. تم تصميم كاشف الصدمات أو Shock detector للكشف عن الاهتزازات أو الصدمات القوية التي تحدث في الأجسام أو الأجزاء المختلفة من المعدات أو الهياكل. يتم استخدام كاشف الصدمات بشكل شائع في العديد من التطبيقات، مثل الأمن والسلامة والصناعة والنقل. تصنف أنواع كاشف الصدمات حسب طريقة الكشف، فمن بين أنواع كاشف الصدمات المتاحة في السوق: 1- الكاشفات الاهتزازية: تعمل عن طريق الاهتزاز أو التغيرات في التسارع أو السرعة. 2- الكاشفات المغناطيسية: تستخدم للكشف عن التغييرات في المجال المغناطيسي بسبب الصدمات. 3- الكاشفات الضوئية: تعمل عن طريق قياس التغييرات في الضوء الذي يتم انعكاسه بسبب الصدمات. تستخدم كاشفات الصدمات في العديد من التطبيقات، مثل أنظمة الأمان والسلامة، والأجهزة الطبية، والمركبات، والتقنية العسكرية. وتعمل على الإشعار بحدوث الصدمة أو الاهتزاز، مما يساعد في الحفاظ على السلامة وتجنب الأضرار. من بين المزايا التي يوفرها كاشف الصدمات هو تحديد الأضرار التي تحدث بشكل مبكر والمساعدة في تجنب تلف المعدات. ومن بين العيوب التي يمكن أن يواجهها كاشف الصدمات هو حدوث إشعارات خاطئة في حالة وجود اهتزازات صغيرة أو تغيرات طفيفة في المعدات. ومن بين العيوب التي يمكن أن يواجهها كاشف الصدمات هو حدوث إشعارات خاطئة في حالة وجود اهتزازات صغيرة أو تغيرات طفيفة في المعدات. يمكن استخدام كاشف الصدمات في العديد من المجالات، بما في ذلك التصنيع، والصناعة الكيميائية، والنقل، والطيران. يمكن أن يكون كاشف الصدمات جزءًا من نظام الإنذار في الوقت الحقيقي، حيث يعمل على إرسال إشعارات فورية إلى الأشخاص المسؤولين عن الصيانة أو الإصلاح عند حدوث صدمة أو اهتزاز شديد. وعادةً ما يتم استخدام التقنيات الحديثة مثل الإنترنت اللاسلكي والاتصالات السلكية لتحقيق ذلك. على الرغم من وجود بعض العيوب في كاشف الصدمات، إلا أنه لا يزال يعتبر جزءًا أساسيًا من العديد من التطبيقات المختلفة. وبالإضافة إلى الحفاظ على السلامة وتجنب التلف، فإن استخدام كاشف الصدمات يمكن أن يؤدي إلى تحسين الكفاءة والإنتاجية وتقليل التكاليف في الصناعة والنقل وغيرها من المجالات.
-
تختص بيئة Apex التي طورتها شركة أوراكل في بناء تطبيقات الويب المتصلة بقاعدة البيانات، بينما تتخصص أدوات بناء مواقع الويب المقدمة من مايكروسوفت في بناء تطبيقات الويب بشكل عام، بما في ذلك البرامج النصية وتطبيقات الخادم. وهناك بعض الفروق الرئيسية بينهما: 1- اللغات المستخدمة: تستخدم بيئة Apex لغة PL/SQL المستندة إلى Oracle Database، بينما تستخدم أدوات بناء مواقع الويب من مايكروسوفت لغات برمجة مثل C# وASP.NET. 2- الاتصال بقاعدة البيانات: بيئة Apex تعتمد على Oracle Database كقاعدة بيانات خلفية، في حين تتيح أدوات بناء مواقع الويب من مايكروسوفت الاتصال بمجموعة متنوعة من قواعد البيانات مثل Microsoft SQL Server وMySQL. 3- التوجه السائد: يتميز Apex بتوجهه الأكثر تركيزًا على إنشاء تطبيقات الويب المستندة إلى قاعدة البيانات، في حين يوفر مايكروسوفت أدوات تناسب مجموعة متنوعة من الاحتياجات، بما في ذلك إنشاء تطبيقات الويب التي تركز على العرض والمظهر. 4- الخدمات السحابية: تقدم مايكروسوفت Azure وAWS من أمازون مجموعة كبيرة من الخدمات السحابية للتطوير والنشر والتشغيل، بينما يوفر Oracle Cloud Infrastructure مجموعة محدودة من الخدمات. بشكل عام، تختلف بيئة Apex عن أدوات بناء مواقع الويب المقدمة من مايكروسوفت في الأهداف التي تخدمها والمجالات التي تغطيها. ويتوقف الاختيار بين الاثنين على متطلبات المشروع ومستوى المهارات المتاحة لدى المطورين. بيئة Apex تستخدم لتطوير تطبيقات قواعد البيانات على شبكة الإنترنت، حيث يتم تطوير تطبيقات الويب باستخدام لغة SQL و PL/SQL لإنشاء تطبيقات الويب. بالإضافة إلى ذلك، توفر Apex العديد من الأدوات والميزات التي تساعد المطورين على تصميم وإدارة قواعد البيانات بشكل فعال، مثل تصميم النماذج، وتوليد تقارير مخصصة، والتحكم في الأمان والحماية. من ناحية أخرى، توفر مايكروسوفت عددًا من أدوات بناء مواقع الويب مثل ASP.NET و SharePoint، والتي تستخدم لتطوير تطبيقات الويب المختلفة، بما في ذلك تطبيقات الأعمال والمواقع التفاعلية. تتميز أدوات بناء مواقع الويب من مايكروسوفت بسهولة الاستخدام والتنصيب، وتقدم العديد من الميزات والخدمات الجاهزة، مثل الدعم الفني والمجتمعات المساعدة. بشكل عام، يمكن اختيار بيئة Apex عندما يكون المشروع يتطلب تطوير تطبيقات قواعد البيانات مع الحاجة إلى تحليل البيانات وإدارتها بشكل متقدم، بينما يمكن استخدام أدوات بناء مواقع الويب من مايكروسوفت في المشاريع التي تتطلب تطوير تطبيقات الويب بشكل عام، دون الحاجة إلى تحليل البيانات بشكل متقدم.
-
يمكن توضيح كيفية عمل خوارزمية PRESENT بشكل مبسط كالتالي: الخطوة الأولى في عمل خوارزمية PRESENT هي تحويل الرسالة الأصلية (plaintext) إلى تنسيق البلوكات (blocks). يستخدم PRESENT بلوكات بحجم 64 بتًا. تقوم الخوارزمية بتوليد مفتاح عشوائي بحجم 80 بتًا. يتم تطبيق جولات متتالية على البيانات باستخدام المفتاح العشوائي. يتكون كل جولة من ثلاث خطوات: الاستبدال، والتبديل، والخلط. الخطوة الأخيرة هي إخراج النص المشفر (ciphertext) بعد تمرير البيانات عبر عدة جولات. ويمكن القول بأن خوارزمية PRESENT هي خوارزمية تشبه في بنيتها الخوارزمية الشهيرة AES، وتستخدم عددًا أقل من الجولات، مما يجعلها أسرع وأخف وزنًا. ويتميز هذا النوع من الخوارزميات بأنه يعمل بسرعة عالية ويتميز بحجمه الصغير وسهولة تطبيقه في الأجهزة المحمولة والإلكترونية. تم تصميم خوارزمية PRESENT كبديل خفيف الوزن للخوارزميات الأكثر تعقيداً مثل AES وTwofish. يستخدم PRESENT مفتاح بطول 80 بت ويتكون من 32 جولة. يعتمد على عمليات الاستبدال والتبديل لتحقيق التشفير. الخوارزمية PRESENT تتكون من عدة عناصر، ومن بين هذه العناصر: Key scheduling: يتم إعداد جدول المفاتيح باستخدام المفتاح الرئيسي. يتم تقسيم المفتاح الرئيسي إلى كتل صغيرة بطول 64 بت، ثم يتم تنفيذ دورات من العمليات لإنشاء جدول المفاتيح. Substitution layer: يتم استخدام خمسة جداول للاستبدال لتعويض القيم الدخلية. Permutation layer: تستخدم هذه العملية لتغيير ترتيب البتات الداخلية. XOR: يتم استخدام عمليات XOR لدمج البيانات. يمكن تنفيذ خوارزمية PRESENT بسهولة باستخدام لغة البرمجة المفضلة لديك، ويمكن العثور على العديد من المصادر عبر الإنترنت التي تشرح كيفية تنفيذها. يمكنك بدء العمل بتحميل ملف الكود المصدري المتاح على الإنترنت ، ومن ثم تعديل الكود حسب احتياجاتك
-
مرحبًا! بالطبع يمكنك تنفيذ فكرتك باستخدام برامج التصميم والطباعة. ستحتاج إلى القيام بالخطوات التالية: 1- تحميل برنامج تصميم مثل Adobe Illustrator أو CorelDRAW. 2- اختيار تصميم غلاف الكتاب وإضافة مكان لوضع الباركود. 3- إضافة باركود باستخدام أدوات الباركود المتاحة في البرنامج. يمكنك اختيار نوع الباركود المناسب لاحتياجاتك وتعديل الحجم والألوان والخطوط والتباعد. 4- توليد أرقام عشوائية مختلفة لكل باركود باستخدام برامج توليد الأرقام العشوائية مثل Excel أو Google Sheets أو برمجة بسيطة. 5- إضافة الرقم المتولد العشوائي إلى الباركود باستخدام الأدوات المتاحة في البرنامج. 6- ضبط إعدادات الطباعة للحصول على النتيجة المطلوبة. يمكنك استخدام الطابعة الخاصة بك أو اللجوء إلى خدمات الطباعة الخارجية. يجب عليك التأكد من أن كل باركود فريد وليس متكررًا لضمان عملية التطابق الصحيحة. كما يجب أيضًا مراعاة الحجم والمساحة المتاحة لوضع الباركود في التصميم الخاص بالغلاف. بالنسبة للعلاقة بين فكرتك والتصميم والمطبعة، فإن التصميم يلعب دورًا مهمًا في إنشاء باركود فعال وجذاب، في حين أن الطباعة تساعد في تحقيق نتائج عالية الجودة. لذلك يمكن القول أن فكرتك تتطلب التعاون بين التصميم والمطبعة لضمان الحصول على نتيجة جيدة.
-
لإنشاء موقع للوظائف الذي يستخدم خوارزميات تعلم الآلة لمطابقة السير الذاتية مع متطلبات الوظائف، يمكن استخدام العديد من الخوارزميات المتاحة في مجال تعلم الآلة. ولكن، يتوقف اختيار الخوارزمية المناسبة على عدة عوامل، مثل حجم البيانات المتاحة، ونوعية البيانات، والتحديات التي قد تواجهها الخوارزمية. من الخوارزميات الشائعة والمستخدمة بشكل واسع في مجال تطابق الوظائف والسير الذاتية: خوارزمية الشبكات العصبونية (Neural Networks) خوارزمية الدعم النفسي الآلي (Support Vector Machines) خوارزمية الأشجار العشوائية (Random Forests) خوارزمية النموذج الذاتي (Autoencoder) خوارزمية الجمع العشوائي (Ensemble Methods) يمكن استخدام هذه الخوارزميات لمطابقة معايير الوظائف المطلوبة مع بيانات السير الذاتية، وتحليل المعلومات الموجودة في البيانات لإيجاد الصلة بين المتقدمين للوظائف والمعايير المطلوبة. من الجيد أيضًا تطوير نموذج مبسط أولاً واختباره على بيانات قليلة قبل الانتقال إلى نماذج أكثر تعقيدًا، حيث يمكن إجراء التعديلات اللازمة وتحسين أدائها.
-
الخطوات التالية يمكن اتباعها لتعيين الارتفاع، العرض، الهامش وغيرها في برنامج Photo Pos Pro 4: افتح الصورة التي ترغب في تعيين الأبعاد لها في Photo Pos Pro 4. انقر فوق قائمة "Image" في الشريط العلوي وحدد "Image Size". سيظهر لك مربع حوار "Image Size"، ويمكنك من خلاله تعيين الارتفاع والعرض الجديدين للصورة. لتعيين الهامش، انقر فوق قائمة "Image" في الشريط العلوي وحدد "Canvas Size". سيظهر لك مربع حوار "Canvas Size"، ويمكنك من خلاله تعيين الهامش الجديد للصورة. بعد تعيين الأبعاد والهامش المطلوبين، احفظ الصورة باستخدام القائمة "File" في الشريط العلوي وحدد "Save As". بالنسبة لمعرفة حجم الهوامش في الصورة افتح صورتك في Photo Pos Pro 4. انقر فوق أداة "التحديد" في شريط الأدوات على الجانب الأيسر من الشاشة. ارسم تحديدًا حول منطقة الصورة التي تريد قياس الهامش لها. يمكن القيام بذلك عن طريق النقر على المؤشر وسحبه حول المنطقة التي تريد تحديدها. بمجرد إجراء التحديد ، انتقل إلى قائمة "صورة" أعلى الشاشة وحدد "حجم التحديد" من القائمة المنسدلة. في نافذة "حجم التحديد"، يمكنك رؤية الهوامش لكل جانب من المنطقة المحددة.
-
يبدو أنك تريد إنشاء نموذج تسجيل دخول يسمح للمستخدمين بإدخال اسم المستخدم وكلمة المرور الخاصة بهم ، ثم عرض معلوماتهم في نافذة السجل إذا تم تسجيل الدخول بنجاح. إذا فشل تسجيل الدخول، يجب أن يتلقى المستخدم رسالة خطأ ويطلب منه إدخال معلوماته مرة أخرى. بالإضافة إلى ذلك ، هناك زر "حفظ" يسمح للمستخدمين بحفظ بياناتهم في ملف. تتمثل إحدى طرق تنفيذ ذلك في استخدام كائنين مختلفين من JFrame ، أحدهما لنموذج تسجيل الدخول والآخر لنافذة السجل. عندما يُدخل المستخدم معلوماته وينقر على زر "تسجيل الدخول" ، يمكنك التحقق مما إذا كان الإدخال صحيحًا عن طريق استدعاء طريقة checkInput (). إذا كان الإدخال صحيحًا ، يمكنك إنشاء مثيل لنافذة السجل JFrame وتمرير البيانات الضرورية كمعلمات إلى مُنشئها. إذا كان الإدخال غير صحيح ، يمكنك إظهار رسالة خطأ وتطلب من المستخدم إدخال معلوماته مرة أخرى. في المثال هذا ، ينشيء كلاس LoginForm JFrame حقلين نصيين لاسم المستخدم وكلمة المرور وزر "تسجيل الدخول" وزر "إلغاء" (الذي لم يتم تنفيذه هنا). عندما ينقر المستخدم على زر "تسجيل الدخول" ، يتم استدعاء طريقة checkInput () للتحقق من صحة اسم المستخدم وكلمة المرور. إذا كانت صحيحة ، يتم إنشاء مثيل لكلاس LogWindow ، ويمرر اسم المستخدم كمعامل إلى المُنشئ الخاص به. إذا كانت غير صحيحة ، تظهر رسالة خطأ import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; public class LoginForm extends JFrame implements ActionListener { private JTextField usernameField; private JPasswordField passwordField; public LoginForm() { super("Login Form"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel usernameLabel = new JLabel("Username:"); JLabel passwordLabel = new JLabel("Password:"); usernameField = new JTextField(20); passwordField = new JPasswordField(20); JButton signInButton = new JButton("Sign in"); signInButton.addActionListener(this); JPanel mainPanel = new JPanel(new GridLayout(3, 2)); mainPanel.add(usernameLabel); mainPanel.add(usernameField); mainPanel.add(passwordLabel); mainPanel.add(passwordField); mainPanel.add(new JLabel("")); mainPanel.add(signInButton); getContentPane().add(mainPanel); pack(); setVisible(true); } public void actionPerformed(ActionEvent event) { if (event.getActionCommand().equals("Sign in")) { if (checkInput()) { LogWindow logWindow = new LogWindow(usernameField.getText()); setVisible(false); } else { JOptionPane.showMessageDialog(this, "Incorrect username or password. Please try again."); usernameField.setText(""); passwordField.setText(""); } } } private boolean checkInput() { // Here you can implement the logic to check if the username and password are correct. // For example, you can compare them with a database or a file. // For simplicity, let's assume that the correct username is "user" and the correct password is "password". String username = usernameField.getText(); String password = new String(passwordField.getPassword()); return username.equals("user") && password.equals("password"); } public static void main(String[] args) { new LoginForm(); } } class LogWindow extends JFrame implements ActionListener { private JTextArea logTextArea; private JButton saveButton; public LogWindow(String username) { super("Log Window for " + username); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); logTextArea = new JTextArea(20, 40); logTextArea.setEditable(false); JScrollPane scrollPane = new JScrollPane(logTextArea); saveButton = new JButton("Save"); saveButton.addActionListener(this); JPanel mainPanel = new JPanel(new BorderLayout()); mainPanel.add(scrollPane, BorderLayout.CENTER); mainPanel.add(saveButton, BorderLayout.SOUTH); getContentPane().add(mainPanel); pack(); setVisible(true); } public void actionPerformed(ActionEvent event) { if (event.getActionCommand().equals("Save")) { JFileChooser fileChooser = new JFileChooser(); int result = fileChooser.showSaveDialog(this); if (result == JFileChooser.APPROVE_OPTION) { File file = fileChooser.getSelectedFile(); try { BufferedWriter writer = new BufferedWriter(new FileWriter(file)); writer.write(logTextArea.getText()); writer.close(); } catch (IOException ex) { JOptionPane.showMessageDialog(this, "Error writing to file: " + ex.getMessage()); } } } } }
-
تشير الرسالة التي تلقيتها إلى أنك تحاول استخدام React hook ، وتحديدًا الـ useDispatch hook ، خارج الـ component. يمكن استخدام React hooks داخل الـ function component أو بداخل custom hooks أخرى فقط والتي بدورها هي داخل function component. يبدو من الكود الذي قدمته أنك تحاول إرسال حدث لإزالة عنصر من العربة عند النقر فوق رمز الحذف. ومع ذلك ، يجب عليك التأكد من أن العنصر الذي يحتوي على هذا الكود هو function component. هنا مثال على كيفية تعديل الكود الخاص بك لاستخدام الـ useDispatch hook داخل function component: import { useDispatch } from 'react-redux'; import { removeFromCart } from 'path/to/actions'; function CartItem({ item }) { const dispatch = useDispatch(); const handleRemove = () => { dispatch(removeFromCart(item.id)); } return ( <div className="cart-item"> <div className="cart-item-details"> {/* item details */} </div> <i className="bi bi-trash fill cart-item-delete-icon" onClick={handleRemove}></i> </div> ); } export default CartItem; في هذا المثال ، CartItem هو function component. يستخدم الـ useDispatch hook للحصول على الدالة dispatch ، التي يتم استخدامها لإرسال الحدث removeFromCart عند النقر فوق رمز الحذف. تأكد من أن عنصرك يتبع هذه الهيكلية وأنك تستورد الـ useDispatch hook من الموقع الصحيح.
-
يمكننك تجربة الحل التالي لمشكلة Running Gradle task ‘assembleDebug’... | Exception: Gradle task assembleDebug failed with exit code 1 توجه إلى مجلد android داخل المشروع ثم قم بحذف ملف .gradle أو ملف .gradlew وهي مجلدات مخفية تأكد من أنك قمت بتفعيل سماح الظهور للمجلدات المخفية. وأيضًا ربما تكون المشكلة إذا كانت gradle dependencies غير محدثة. android/build.gradle يمكنك العثور على أحدث نسخة مستقرة من com.android.tools.build من هنا لتحديث الـ dependencies: dependencies { ... classpath 'com.android.tools.build:gradle:7.4.1' } android/gradle/wrapper/gradle-wrapper.properties يمكنك العثور على أحدث نسخة مستقرة من Gradl من هنا وقم بتحديث رابط الـ distribution URL: distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-all.zip
-
المشكلة تكمن في ملف index.html المتواجد في مجلد dist الخاص بالمشروع بشكل افتراضي ، فصورة الموقع الذي تراه عند الضغط على الرابط، هي الكود المتواجد في ذلك الملف. فأثناء كتابة أمر firebase init سيتم توليد ملف index.html به تلك الرسالة ومن المفترض أن يسألك هل تريد أن يتم محو ملف index.html الخاص بالمشروع والكتابة عليه؟ ربما ذلك حدث أو لم يحدث معك. إذا فقدت ملف index.html الخاص بك ، أو سمحت له دون قصد بالكتابة فوق ملف index.html ، فيجب عليك إعادة إنتاجه بطريقة ما. إذا لم يكن لديك نسخة إحتياطية أو وسيلة أخرى لإعادة إنتاج ملف index.html الخاص بك، للأسف لا رجعة في ذلك. بشكل عام، تسير خطوات إعداد Firebase على النحو التالي وبالتأكيد أنت قمت بها: firebase login firebase init أمر مختصر لعمل build مباشرًة للمشروع في حالة قمت بإعداد build pipeline مثل npm run build firebase deploy الخطوة رقم 2 (init) تعمل على تهيئة مشروع جديد. أي عندما لا يكون لديك ملف firebase.json بعد (والذي سيتم إنشاؤه بواسطة الأمر init). ولإعادة عمل نشر - deploy بعد تعديل ملف index.html لإصلاح المشكلة عليك بالتالي: أمر مختصر لعمل build مباشرًة للمشروع في حالة قمت بإعداد build pipeline مثل npm run build firebase deploy وإليك مثال في الصورة ماذا يحدث عند كتابة أمر firebase init.
-
يمكن تحسين الكود بحيث يتم إضافة form_id بشكل أتوماتيكي في دالة Number::create دون الحاجة إلى تحديده في كل مرة. يمكنك استخدام دالة collection map للقيام بذلك. يمكنك استخدام هذا الكود: public function createNumber(){ $numbers = collect([$this->numbers1, $this->numbers2, $this->numbers3, $this->numbers4, $this->numbers5, $this->numbers6, $this->numbers7]); $numbers = $numbers->map(function($number) { return array_merge($number, ['form_id' => $this->form->id]); }); Number::insert($numbers->toArray()); $this->isSave2 = true; } في هذا الكود ، قمت بإنشاء مجموعة من الأرقام باستخدام الدالة collect وقمت بإضافة مفتاح form_id في كل عنصر باستخدام دالة map. ثم استخدمت دالة insert لإدخال المجموعة بأكملها في قاعدة البيانات.
-
طبقاً للكود الذي قدمته، يبدو أنك تفتقد إلى منطق التوجيه عندما يفشل التحقق من صحة بيانات التسجيل. حالياً، يتم توجيه المستخدم إلى الصفحة الرئيسية فقط عندما تفشل عملية التسجيل، وهذا يحدث بعد التحقق من البيانات. ومع ذلك، إذا فشل التحقق، يقوم الكود بإعادة تحميل الصفحة وعرض أخطاء التحقق. لحل هذه المشكلة، يمكنك إضافة منطق التوجيه لحالة فشل التحقق. يمكنك تحديث الكود الخاص بك على النحو التالي: public function user_register(Request $request){ $request->validate([ "name" => "required", "email" => "required|email|unique:custom__auths", "password" => "required|min:5|max:12" ]); $user = new Custom_Auth(); $user->name = $request->name; $user->email = $request->email; $user->pasword = $request->password; if($user->save()){ return back()->with('success', 'تم التسجيل بنجاح'); } else { return redirect('/')->with('error', 'فشل التسجيل، يرجى المحاولة مرة أخرى.'); } } في هذا الكود المحدث، إذا فشل التحقق، سيتم توجيه المستخدم تلقائياً من Laravel إلى صفحة التسجيل وعرض أخطاء التحقق. إذا نجح التحقق وكان التسجيل ناجحاً، سيتم توجيه المستخدم إلى الصفحة السابقة مع رسالة نجاح. إذا فشل التسجيل لأي سبب، سيتم توجيه المستخدم إلى الصفحة الرئيسية مع رسالة خطأ. كما يجب التأكد من إضافة أماكن عرض الرسائل اللازمة في ملف القالب الرئيسي الخاص بك حتى يتم عرض الرسائل بشكل صحيح.
-
إذا كنت تريد أن تتم مطالبتك بتأكيد كلمة المرور الخاصة بك في كل مرة يجب عليك كتابة مسارك على النحو التالي: Route::post('fetchResult', [ReportController::class, 'fetchResult']) ->name('fetchComplaintResult') ->middleware('password.confirm:password.confirm,1'); لكن ما السبب؟ الوسيط password.confirm عند وضعه في الكود يشير إلى الكلاس التالي Illuminate\Auth\Middleware\RequirePassword وذلك هو الكود الخاص بذلك الكلاس: use Closure; use Illuminate\Contracts\Routing\ResponseFactory; use Illuminate\Contracts\Routing\UrlGenerator; class RequirePassword { /** * The response factory instance. * * @var \Illuminate\Contracts\Routing\ResponseFactory */ protected $responseFactory; /** * The URL generator instance. * * @var \Illuminate\Contracts\Routing\UrlGenerator */ protected $urlGenerator; /** * The password timeout. * * @var int */ protected $passwordTimeout; /** * Create a new middleware instance. * * @param \Illuminate\Contracts\Routing\ResponseFactory $responseFactory * @param \Illuminate\Contracts\Routing\UrlGenerator $urlGenerator * @param int|null $passwordTimeout * @return void */ public function __construct(ResponseFactory $responseFactory, UrlGenerator $urlGenerator, $passwordTimeout = null) { $this->responseFactory = $responseFactory; $this->urlGenerator = $urlGenerator; $this->passwordTimeout = $passwordTimeout ?: 10800; } /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @param string|null $redirectToRoute * @param int|null $passwordTimeoutSeconds * @return mixed */ public function handle($request, Closure $next, $redirectToRoute = null, $passwordTimeoutSeconds = null) { if ($this->shouldConfirmPassword($request, $passwordTimeoutSeconds)) { if ($request->expectsJson()) { return $this->responseFactory->json([ 'message' => 'Password confirmation required.', ], 423); } return $this->responseFactory->redirectGuest( $this->urlGenerator->route($redirectToRoute ?? 'password.confirm') ); } return $next($request); } /** * Determine if the confirmation timeout has expired. * * @param \Illuminate\Http\Request $request * @param int|null $passwordTimeoutSeconds * @return bool */ protected function shouldConfirmPassword($request, $passwordTimeoutSeconds = null) { $confirmedAt = time() - $request->session()->get('auth.password_confirmed_at', 0); return $confirmedAt > ($passwordTimeoutSeconds ?? $this->passwordTimeout); } } الجزء الهام في الكود هنا هو handle method: public function handle($request, Closure $next, $redirectToRoute = null, $passwordTimeoutSeconds = null) هنا ، $ redirectToRoute و $ passwordTimeoutSeconds عبارة عن وسيطات arguments يمكننا تعيينها في ملف المسار. يتم استخدام $ redirectToRoute ; كالآتي في handle method: $this->urlGenerator->route($redirectToRoute ?? 'password.confirm') يتم استخدام $ password TimeoutSeconds هنا في shouldConfirmPassword method الخاصة بتأكيد كلمة المرور. return $confirmedAt > ($passwordTimeoutSeconds ?? $this->passwordTimeout); نظرًا لأنه مضبوط على قيمة خالية null، تتم مقارنة القيمة $ VerifiedAt مع $ this-> passwordTimeout ، والتي تم تعيينها في الـ constructor على 10800. (10800 ثانية = 180 دقيقة = 3 ساعات). لذا باختصار ، نحتاج إلى تعيين المتغير $ passwordTimeoutSeconds. نظرًا لأنه المتغير الثاني، ونحتاج أيضًا إلى تعيين المتغير redirectToRoute $. ويمكنك إلقاء نظرة على https://laravel.com/docs/9.x/middleware#middleware-parameters
-
يتم تغيير قيم المصفوفة weekdaysList في هذا الكود بسبب دالة this.addDaystoGivenDate() التي تعيد نفس الكائن Date الذي تم إرساله كمعامل لها، وتقوم بتحديث قيمتها في المكان نفسه. لحل هذه المشكلة ومنع تغيير قيم الصفيف، يجب إنشاء كائن Date جديد بنفس القيمة كلما تم استخدام دالة this.addDaystoGivenDate(). لذلك، يمكن تعديل الكود كما يلي: private getListOfWeekDaysBetweenTwoDates( startDate: Date, endDate: Date ): Date[] { const weekdaysList = []; let tempDate = new Date(startDate.getTime()); tempDate.setDate(tempDate.getDate() + 1); while (tempDate < endDate) { if (this.isWeekDay(tempDate)) { weekdaysList.push(new Date(tempDate.getTime())); } tempDate.setDate(tempDate.getDate() + 1); } return weekdaysList; } وبذلك يتم إنشاء كائن Date جديد في كل مرة يتم استخدام فيها this.addDaystoGivenDate() أو إضافة يوم واحد عبر tempDate.setDate(tempDate.getDate() + 1)، بدلاً من تحديث نفس الكائن Date كما كان يحدث في الكود الأصلي.
-
الحل الأول: الضغط على ctrl + shift + p داخل كود المشروع ثم Index workspace حل آخر: تثبيت laravel-ide-helper package من خلال كتابة الأمر التالي composer require --dev barryvdh/laravel-ide-helper و تقوم هذه الحزمة بإنشاء ملفات مساعدة تمكّن IDE الخاص بك من توفير إكمال تلقائي دقيق. يتم الإنشاء بناءً على الملفات الموجودة في مشروعك ، لذا فهي محدثة دائمًا. وهي تدعم Laravel 8+ و PHP 7.3+ حل آخر: قم بوضع الكود التالي في أسفل ملف settings.json "intelephense.telemetry.enabled": false, "intelephense.completion.triggerParameterHints": true, "intelephense.completion.insertUseDeclaration": true, "intelephense.trace.server": "messages", "intelephense.diagnostics.undefinedClassConstants": false, "intelephense.diagnostics.undefinedFunctions": false, "intelephense.diagnostics.undefinedConstants": false, "intelephense.diagnostics.undefinedProperties": false, "intelephense.diagnostics.undefinedTypes": false, "intelephense.diagnostics.undefinedMethods": false,
-
خاصية additionalData تقبل الدوال أيضًا يمكنك كتابة الشروط التي تريدها، وإليك شرح الكود بعد التعديل: الكود هو عبارة عن دالة JavaScript تستخدم في تعريف قواعد تحميل الملفات من نوع SASS (بامتداد .scss) في مشروع webpack. ويقوم الكود بالتالي: يأخذ المحتوى وسياق التحميل كمدخلات (content, loaderContext). يقوم بقراءة مسار الملف المستهدف (resourcePath) ومجلد العمل الأساسي (rootContext) من loaderContext. يقوم بحساب المسار النسبي للملف المستهدف من مجلد العمل الأساسي باستخدام الدالة path.relative(). يقوم بفحص ما إذا كان المسار النسبي للملف المستهدف ينطبق على النمط "src\store" باستخدام الدالة match(). إذا كان المسار النسبي ينطبق على النمط "src\store" يتم إرجاع المحتوى دون تغيير. إذا لم ينطبق المسار النسبي على النمط "src\store"، يتم إضافة سلسلة نصية تحتوي على عبارات import لملفات scss داخل مشروع webpack، وتتبع ذلك بالمحتوى الأصلي للملف المستهدف. بشكل عام، يمكن استخدام الكود لتحميل ملفات SASS في مشروع webpack، مع إضافة عبارات import لملفات أخرى داخل المشروع المتعلقة بالموضوع المستخدم في SASS. additionalData = (content, loaderContext) => { const { resourcePath, rootContext } = loaderContext; const relativeFilePath = path.relative(rootContext, resourcePath); const isExcluded = relativeFilePath.match(/^src\\store\\.*/); return isExcluded ? content : '@import "sass/_themes.scss";@import "sass/_variables.scss";' + content; };
-
رسالة الخطأ تشير إلى أن وضع الصورة غير معترف به أو غير مدعوم بواسطة مكتبة PIL (Python Imaging Library). في هذه الحالة ، الوضع '1' ليس وضعًا صالحًا لفتح صورة باستخدام الأمر Image.open (). لحل هذه المشكلة ، يجب عليك تحديد وضع صالح للصورة عند فتحها. على سبيل المثال ، يمكنك استخدام الوضع 'r' لقراءة الملف في وضع البايتات الثنائية binary و 'RGB' لفتح صورة ملونة: from PIL import Image im = Image.open('C:/Users/titanic/Desktop/photo/50.jpg').convert('RGB') في المثال أعلاه ، تم استخدام الأمر convert() لتحويل الصورة إلى الوضع 'RGB' ، وهو وضع الألوان الصالح المدعوم بواسطة مكتبة PIL. وبالنسبة للكود الخاص بك، الخطأ في الكود هو أنه يتم استخدام cv2.IMREAD_COLOR مع Image.open من مكتبة PIL ، والتي لا يدعمها. يمكن حل هذه المشكلة عن طريق تحميل الصورة مع مكتبة PIL فقط عن طريق تعيين مسار الصورة كمعامل لـ Image.open. هنا هو الكود الصحيح: from PIL import Image from PIL import ImageStat im = Image.open('C:/Users/titanic/Desktop/photo/50.jpg') stat = ImageStat.Stat(im) avg = stat.mean() total = sum(avg) red_percentage = avg[0]/total * 100 green_percentage = avg[1]/total * 100 blue_percentage = avg[2]/total * 100 print("Red: %f%%, Green: %f%%, Blue: %f%%" % (red_percentage, green_percentage, blue_percentage)) بالإضافة إلى ذلك ، الكود يعاني من مشكلة في استخدام avg، لأنه لم يتم استدعاء الدالة. يمكن حل هذه المشكلة بإضافة "()" بعد stat.mean، كما تلاحظين في الكود.
- 5 اجابة
-
- 1
-
في الكود المعدّل هذا، يتم استخدام wx.TextAttr لإنشاء كائن خاص بصفة النص text attribute object باللون المطلوب. ثم يتم استخدام طريقة SetDefaultStyle() لتعيين هذه الصفة attribute الخاصة بصفة النص كصفة افتراضية لعنصر التحكم بالنص self.verify. في النهاية، يتم استخدام طريقة write() لكتابة النص إلى عنصر التحكم بالنص self.verify باللون المحدد. def onsend(self, event): self.result = self.userwrite.GetValue() if self.result == self.letter: # Set text color to blue for correct answer text_attr = wx.TextAttr(wx.BLUE) self.verify.SetDefaultStyle(text_attr) self.verify.write(f'''صحيح {self.letter}\n''') winsound.PlaySound('data\\yes.wav', 1) if self.lettern == 25: self.lettern = 0 else: self.lettern = self.lettern + 1 self.letter = enletters[self.lettern] self.wt.SetLabel(f"اكتب حرف {self.letter} ") self.userwrite.SetFocus() self.userwrite.SetValue("") elif self.result != self.letter: # Set text color to red for incorrect answer text_attr = wx.TextAttr(wx.RED) self.verify.SetDefaultStyle(text_attr) self.verify.write(f'''خطأ: المطلوب كتابته: {self.letter}, المكتوب: {self.result}\n''') winsound.PlaySound('data\\no.wav', 1) self.userwrite.SetFocus() self.userwrite.SetValue("")
-
لحل تلك المشكلة عليك باتباع الخطوات الآتية: من خلال الـ terminal قم بكتابة الأوامر التالية بالترتيب: flutter channel stable. flutter upgrade --force flutter pub cache repair بعد ذلك تأكد من أنك في المسار الخاص بالتطبيق من خلال كتابة cd وبجانبها اسم الفولدر الخاص بالمشروع مثال لو كان على سطح المكتب cd my-app. 4. وأخيرًا كتابة أمر flutter clean. بعض الخطوات الأخرى التي من شأنها حل المشكلة إن لم تفي الخطوات السابقة بالغرض: قم بحذف ملف pubspec.lock. توجه إلى ملف pubspec.yaml ثم قم بكتابة أمر Pub get لتوليد ملف pubspec.lock مجددًا، والآن قم بعمل build لمشروعك للتأكد من حل المشكلة. حل أخر تأكد من حذف الـ modules المستوردة الغير مستخدمة كمثال import 'dart:js'; أو import 'dart:developer'; قم بحذفها إن لم يتم استخدامها في الكود، وبإمكانك الضغط على CTRL + Alt + O داخل الكود ليتم عمل Optimize Imports أي تهيئة للملفات المستوردة وحذف الغير مستخدم وترتيب الاستيراد. في بعض الأحيان يتم استيراد import 'dart:html'; في VSCode بدلاً من import 'dart:io' فتأكد من حذف الاستيرادات الغير صحيحة.
- 6 اجابة
-
- 1
-
يمكن تنفيذ ذلك من خلال خاصية background-image في CSS حيث سيتم تعيين border يمين ويسار، ثم background-image للأعلى وللأسفل ولكن يجب ضبط الـ background-position لوضع خلفية في الأسفل وبالأعلى. وإليك الكود بالكامل كمثال: div { width: 300px; height: 300px; padding: 20px; border-left: 10px solid orange; border-right: 10px solid black; background-image: linear-gradient(-90deg, black 50%, orange 80%), linear-gradient(-90deg, black 20%, orange 36%); background-size: 100% 10px; background-position: 0 0, 0 100%; background-repeat: no-repeat; border-radius: 50px; margin: auto; } لاحظ أن درجة التدرج الخاصة بالـ background-image هي -90 ويمكن أن تصبح 90 درجة لا مشكلةحيث دائرة الميل هي 360 درجة وليست 180، بمعني أن 90 هنا تعني التدرج أفقيًا، و في حالة 90 درجة بالموجب ستقوم بعكس تدرج اللون، ففي المثال الأسود أولاً ثم البرتقالي، . بعد أن قمت بتحديد خلفيتان متدرجتي اللون (كمثال الأسود حتى 50% من العرض ثم يتلاشي ليبدأ البرتقالي من 80% من العرض)، قمت بتحديد حجم الخلفية background-size ليكون 100% أفقيًا و 10 بكسل رأسيًا. بعد ذلك موضع الخلفية background-position، قمت بتحديد موضع الخلفية الأول 0 0 أي بالأعلى ثم 100% و 0 للثانية أي بالأسفل، فالرقم الأول هو أفقيًا والثاني رأسيًا. وهذا رابط codepen لمشاهدة المثال والتعديل عليه.
-
الموقع المذكور يستخدم الخواص التالية من لغة CSS: CSS Flexbox CSS Grid Layout CSS Positioning والتي تتضمن 5 خيارات مختلفة: static, relative, absolute, fixed, and sticky. ويتم استخدام الثلاث خواص السابقة لتشكيل هيكل أو الـ Layout الخاص بصفحة الموقع التي تريد إنشائها، وكمثال يمكن استخدام خاصية position: absolute لتحريك عنصر من الصفحة ووضعه بشكل عائم فوق بقية العناصر. ويمكن استخدام Flexbox و Grid لتصميم أي هيكل تريده للصفحة من خلال الخواص الخاصة بكل منهما، مثال إذا أردت إنشاء قسم خاص لعرض المقالات بالموقع بحيث يتم تحديد طول وعرض للصندوق أو البطاقة الخاصة بالمقالة سنستخدم الـ Grid للقيام بذلك. .wrapper { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 250px), 1fr)); grid-gap: 1rem; } هذا الكود ينطبق على عنصر HTML يحمل كلاس "wrapper". وتعني الخاصية "display: grid" أن العنصر سيتم عرضه كشبكة، حيث يمكن تحديد عدد الأعمدة والصفوف فيها باستخدام الخاصية "grid-template-columns" والتي تحدد عدد الأعمدة وعرضها بالبكسل، مع إمكانية استخدام القيمة "auto-fill" لجعل العنصر يتكيف مع حجم الشاشة وعرض الأعمدة بناءً على ذلك. كما تم استخدام الدالة "minmax" لتحديد الحد الأدنى والأقصى لعرض الأعمدة. حيث يجب أن لا تقل عرض العمود عن 250 بكسل في حالة عرض الموقع على الديسكتوب أو 100% من العرض في حالة تصفح الموقع من أجهزة الموبايل، وإذا كان حجم الشاشة أكبر سيزيد عرض العمود إلى "1fr" وهي قيمة تعني أن العرض سيتكيف بناءً على المساحة المتبقية في الشبكة. وأخيرًا، يتم تحديد فراغ بين العناصر في الشبكة باستخدام خاصية "grid-gap" والتي تحدد الفراغ بالبكسل بين عناصر الشبكة، في هذا الكود تم تحديد فراغ بحجم 1rem وهي تعني 100% من الحجم الإفتراضي للخط وهو 16px إلا إذا تم تغيير الحجم الإفتراضي من خلال الكود أو من خلال عمل zoom داخل الصفحة. ويمكنك قراءة المقالي التالي.
-
في البداية يجب إتباع بعض الخطوات لضمان تثبيت تعريف كرت الشاشة بشكل سليم: تحميل أداة Display Driver Uninstaller بعد الدخول ستجد الرابط أسفل الصفحة اضغط على أي رابط للتحميل. بعد ذلك سنحتاج لتفعيل وضع Safe mode والخطوات واحدة سواء لويندوز 10 أو 11: اضغط على خانة البحث في شريط المهام بالأسفل، ثم ابحث عن Command Prompt. ستجد خيار باسم Run as Administrator قد ظهر لك اضغط عليه. قم بنسخ الأمر التالي bcdedit /set {default} bootmenupolicy legacy والصقه في نافذة منفذ الأوامر Command Prompt الآن قم بإعادة تشغيل اللاب توب أو الحاسوب من خلال عمل Reboot ثم قبل أن يظهر أي شيء على الشاشة استمر في الضغط بشكل متكرر على زر F8 حتى تظهر لك نافذة خيارات الإقلاع Boot Options. اختر منها Safe Mode. الآن حاسوبك من المفترض أن يقلع في الوضع الآمن، وبإمكانك الخروج من ذلك الوضع بإعادة تشغيل جهازك مرة أخرى. والآن لنقم بعمل حذف كامل لتعريف كرت الشاشة: من خلال تثبيت أداة Display Driver Uninstaller ثم الضغط على Clean and restart، انتظر بعض الوقت لحين حذف التعريف وإعادة تشغيل الجهاز. بعد ذلك سنحتاج إلى تحميل تعريف كرت الشاشة الخاص باللاب توب أو الحاسوب: من خلال التوجه إلى صفحة تعريفات إنفيديا واختيار كرت الشاشة الخاص بجهازك (ستجد بجانبه كلمة notebooks بالنسبة لأجهزة اللاب توب) ثم تحميله وتثبيته، وتأكد من اختيار تعريف Game ready driver في خانة download type في صفحة تعريفات إنفيديا. وكملاحظة، من الطبيعي أن تنطفيء أو تصبح الشاشة سوداء لبضع ثواني أو ربما دقيقة أثناء تثبيت التعريف، ولا أنصح بتثبيت تعريفات كرت الشاشة من الصفحة الخاصة بشركة اللاب توب، ففي أغلب الأحيان تكون غير محدثة.
-
لتفعيل الـ Add-Ins أو الإضافات في برامج وتطبيقات Microsoft 365 عليك بامتلاك حساب يسمح لك بذلك، فالحساب الجامعي الخاص بك تم منعه من تلك الخاصية بواسطة مدير الحساب - Adminstrator، ولحل مشكلة: عليك بالتواصل مع قسم الـ IT في الجامعة سواء عبر البريد الإلكتروني أو الذهاب شخصيًا إلى القسم الخاص بهم، ثم السؤال عن إمكانية تفعيل خاصية الإضافات - Add-Ins للحساب الخاص بك. في الحالة العادية يتم التفعيل من خلال الذهاب إلى: النقر فوق File ثم options أو الوظائف الإضافية ثم اضغط على Add-ins. اضغط على Update لتحديث قائمة الإضافات، ثم انقر فوق الإضافة التي تريدها لعرض التفاصيل الخاصة بها، او نقر مزدوج لتثبيت الإضافة. علمًا بأنّ الخطوات السابقة خاصة ببرامج Word أو Excel أو PowerPoint. وبالنسبة لبرنامج Outlook: اضغط على Get Add-ins أعلى جهة اليمين في شريط الأدوات. ستجد قائمة بكافة الإضافات المتاحة ويمكنك البحث عن إضافة معينة أو الضغط على Add لتثبيت الإضافة.