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

ياسر مسكين

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

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

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

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

    2

كل منشورات العضو ياسر مسكين

  1. السبب وراء وجود مجلد سطح المكتب في OneDrive هو تفعيل المزامنة التلقائية بين حسابك على OneDrive وجهاز الكمبيوتر الخاص بك. فعندما تقوم بتفعيل المزامنة التلقائية، يتم نسخ ومزامنة الملفات والمجلدات من حاسوبك إلى حسابك على OneDrive والعكس، وهذا يشمل أيضًا مجلد سطح المكتب. لكن في حالة ما إذا كنت تفضلين عدم مشاركة مساحة القرص الصلب مع OneDrive أو تفضلين حفظ ملفات سطح المكتب محليًا، يمكنك إيقاف المزامنة لمجلد سطح المكتب من إعدادات OneDrive على جهاز الكمبيوتر الخاص بك. هذا من خلال فتح تطبيق OneDrive على جهاز الكمبيوتر، ثم النقر فوق "المزامنة" أو "الإعدادات" والبحث عن الإعدادات التي تسمح لك بتحديد المجلدات التي ترغبين في مزامنتها. وهناك يمكنك إلغاء تحديد مجلد سطح المكتب لمنع مزامنته مع OneDrive والاحتفاظ به محليًا على القرص الصلب الخاص بك.
  2. لا شكر على واجب أخي، في الخدمة.
  3. نعم، يمكنك ضبط إعدادات اللغة والموقع (Locale settings) في جهازك لتكون متوافقة مع القيم التي تتوقعها من برنامجك دون الحاجة لاستخدام `Locale.US` في الكود. في نظام التشغيل Windows مثلا يمكنك فعل ذلك عن طريق اتباع الخطوات التالية: فتح "Control Panel" (لوحة التحكم) من قائمة "Start" (ابدأ). اختيار "Clock and Region" (الساعة والمنطقة). النقر على "Region" (المنطقة). الانتقال إلى علامة التبويب "Formats" (تنسيقات). اختيار اللغة والتنسيق المطلوب من قائمة "Format" (التنسيق). أخبرني في حال واجهتك أي مشكلة أخرى.
  4. يجب أن تقوم أولا بإعداد متغيرات البيئة الخاصة بالنظام. فإن كنت تستخدم نظام الويندوز، يمكنك الوصول إلى متغيرات البيئة عن طريق القيام بالتالي: اضغط على زر البدء في نظام التشغيل Windows. قم بالبحث عن "متغيرات البيئة" أو "Edit the system environment variables" واضغط عليها. في نافذة متغيرات النظام، انقر على الزر "متغيرات البيئة". ستظهر لك نافذة تحتوي على الـ"User variables" (المتغيرات الخاصة بالمستخدم) و "System variables" (المتغيرات النظام). اختر "System variables" وانقر على زر "New" لإضافة متغير جديد. أما إذا كنت تعمل على نظام تشغيل آخر، فيمكنني أن أقدم لك الإرشادات المناسبة له.
  5. العديد من الأسئلة تطرح في مقابلات العمل، ولا يمكن توقعها كاملة، فمثلا حينما نتحدث حول البرمجة الديناميكية فهي تقنية حاسوبية تُستخدم لحل مجموعة متنوعة من المشاكل التي تتطلب تقسيمها إلى مشاكل أصغر وحلها بشكل تدريجي، مع استخدام التخزين المؤقت للنتائج الفرعية لتحسين الأداء. هذه التقنية غالبًا ما تُستخدم في مجموعة متنوعة من المجالات بما في ذلك العلوم الحاسوبية، والهندسة، وعلوم البيانات، والرياضيات، والاقتصاد، وغيرها. أبرز تلك المشكلات: مشكلة الرقم الثلاثي الأمثل (Optimal Binary Search Tree). مشكلة السلسلة الأمثل (Longest Common Subsequence). مشكلة القطع الأمثل (Cutting Stock Problem). مشكلة البائع المتجول (Travelling Salesman Problem). مشكلة التحميل الأمثل (Knapsack Problem). مشكلة تحليل الأمثل (Parsing Problem). مشكلة الأعمدة الرأسية (Vertical Sticks Problem). مشكلة ترميز هوفمان (Huffman Coding Problem). مشكلة القص المشترك (Maximum Cut Problem). مشكلة تقسيم الصفوف (Partition Problem). فمثلا تطرقنا من قبل حول مشكلة البائع المتجول هنا في الأكاديمية ويمكنك الاطلاع عليها من خلال هذا المصدر:
  6. لا مشكلة، سأشرح لك، قبل أي شيء آخر، يجب عليك التسجيل في مزود خدمة الدفع الإلكتروني الذي يوفر دعما لبطاقات الائتمان المختلفة مثل فيزا وماستركارد، بعض المزودين الشهيرين شاملين لعدة بلدان مثل Stripe و PayPal. يجب عليك التحقق من إمكانية دعم بلدك وطرق الدفع المختلفة لها. فبعد التسجيل في مزود خدمة الدفع مثل Stripe أو PayPal ستحصل على مفاتيح API الخاصة بك. ستجدها غالبا في لوحة التحكم الخاصة بالمزود وتتضمن هذه المفاتيح مفتاح Publishable API ومفتاح Secret API. هنا نأتي لمرحلة إعداد نموذج الدفع، بحيث يمكنك إنشاء نموذج دفع بسيط باستخدام HTML و PHP. على سبيل المثال: <form action="process_payment.php" method="POST"> <input type="text" name="card_number" placeholder="Card Number"> <input type="text" name="expiry_date" placeholder="Expiry Date"> <input type="text" name="cvv" placeholder="CVV"> <button type="submit">Pay Now</button> </form> ثم ننتقل إلى مرحلة ربط النموذج بواجهة برمجة التطبيقات (API) لمزود الدفع: هنا نذهب إلى ملف PHP (مثلا process_payment.php)، يمكنك استخدام مكتبة Stripe لربط النموذج بواجهة API لـ Stripe. بهذا الشكل: <?php require_once('vendor/autoload.php'); // تحميل ملفات Stripe \Stripe\Stripe::setApiKey('your_secret_key'); if ($_SERVER['REQUEST_METHOD'] == 'POST') { $token = $_POST['stripeToken']; $charge = \Stripe\Charge::create([ 'amount' => 1000, // المبلغ بالسنت 'currency' => 'usd', 'source' => $token, 'description' => 'Payment for services' ]); // يتم معالجة الدفع بنجاح echo 'Payment processed successfully'; } ?> بعد الانتهاء من ربط النموذج بمزود الدفع، يجب اختبار العملية للتأكد من أن كل شيء يعمل كما هو متوقع، وكما نعلم يوفر معظم مزودي الخدمات وسائل للاختبار مثل بيئات اختبار محاكاة الدفع، وبعد التأكد من أن كل شيء يعمل بشكل صحيح، يمكنك نشر تغييراتك على موقعك الإلكتروني الحي. لكن يجب عليك متابعة أداء نظام الدفع الخاص بك بانتظام وتطويره وتحسينه بمرور الوقت، مع مراعاة أي تغييرات في متطلبات الأمان أو القوانين، هذا كله من أجل حماية بيانات العملاء وتجنب المشاكل القانونية التي قد تطرأ.
  7. لعمل ذلك يجب استخدام هذا الكود: <button class="btn btn-danger confirm" id="delete-row"> <a href="delete.php?deleteid='.$id.'" class="text-light text-decoration-none">حذف </a> </button> بحيث يستخدم الكود مع مكتبة SweetAlert2. في الزر "حذف"، نقوم بإضافة الكلاس "confirm" لتفعيل السيناريو الذي يتطلب تأكيدًا قبل الحذف، ويُمكنك استخدام الرابط المحدد في الزر لتوجيه المستخدم إلى الصفحة "delete.php" للقيام بعملية الحذف بعد التأكيد. هناك طريقتين للقيام بذلك، أولهما باستخدام عنصر زر مباشرة بهذا الشكل: <button class="btn btn-danger confirm" id="delete-row" onclick="confirmDelete('delete.php?deleteid=<?php echo $id; ?>')">حذف</button> الثانية باستخدام تابع: <a href="#" class="btn btn-danger confirm" id="delete-row" data-id="<?php echo $id; ?>">حذف</a> ثم يمكن استخدام السكريبت التالي للتعامل مع الأحداث وعرض رسالة التأكيد: <script> document.addEventListener('DOMContentLoaded', function() { const deleteButtons = document.querySelectorAll('.confirm'); deleteButtons.forEach(button => { button.addEventListener('click', function(e) { e.preventDefault(); const id = this.getAttribute('data-id'); Swal.fire({ title: 'هل أنت متأكد؟', text: "لن تتمكن من التراجع عن هذا الإجراء!", icon: 'warning', showCancelButton: true, confirmButtonColor: '#3085d6', cancelButtonColor: '#d33', confirmButtonText: 'نعم، احذفه!' }).then((result) => { if (result.isConfirmed) { window.location.href = 'delete.php?deleteid=' + id; } }); }); }); }); </script> فهذا السكريبت يضيف مستمعين للأحداث إلى جميع الأزرار التي تحتوي على الكلاس "confirm". وعند النقر على أي من هذه الأزرار، يتم عرض رسالة تأكيد من خلال مكتبة SweetAlert2، وفي حالة الموافقة، يتم توجيه المستخدم إلى صفحة "delete.php" مع معرف السجل المراد حذفه.
  8. الكود عندي يعمل سواء باستيراد المكتبة أو من دونها، فالمكتبة `java.util.Locale` فهذه المكتبة تستخدم بشكل رئيسي لإعدادات اللغة والمنطقة وتنسيق النصوص. فعند كتابة الرقم العشري في Java باستخدام `Scanner`، يمكننا استخدام `()nextDouble` لقراءة الأرقام العشرية من المدخل القياسي، وهذا لا يتأثر بأي استيراد لمكتبة `Locale`. وهذا ما نراه واضحا من خلال تشغيلي لكلا البرنامجين، إذ يظهر أنه يعمل بهذا الكود: import java.util.Scanner; public class Firstproject1 { public static void main(String[] args) { Scanner in = new Scanner (System.in); System.out.println("Enter Your Height: "); double Height = in.nextDouble(); System.out.println("Your height is: " +Height); } } أما بالنسبة لرسالة الخطأ التي ظهرت لك من نوع "java.util.InputMismatchException" فهي تحدث عندما يحاول المستخدم إدخال نوع بيانات لا يتوافق مع النوع المتوقع من قبل البرنامج. في هذه الحالة، الخطأ يحدث عندما تحاول قراءة الرقم العشري باستخدام `()nextDouble` ولكن الإدخال الذي تم إرفاقه قد لا يكون رقمًا عشريًا صالحًا، وربما يكون ذلك بسبب إدخال نصي بدلاً من رقم.لحل هذه المشكلة، يمكن التحقق من نوع الإدخال المدخل قبل قراءته. يمكن استخدام دالة `()hasNextDouble` للتحقق مما إذا كان الإدخال يمكن تحويله إلى رقم عشري أم لا. بهذا الشكل: import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("Enter Your Height: "); // التحقق مما إذا كان الإدخال يمكن تحويله إلى رقم عشري while (!in.hasNextDouble()) { System.out.println("Invalid input. Please enter a valid number."); in.next(); // تجاهل الإدخال غير الصالح وقراءة الإدخال التالي } double height = in.nextDouble(); System.out.println("Your height is: " + height); } } فهنا إذا كان الإدخال غير صالح (أي غير رقمي)، سيتم عرض رسالة خطأ وطلب إدخال صالح. أما بالنسبة لمثالك فالواضح أنك قمت بإدخال الرقم 5.5 وليس نصا أو رقما خاطئا، والسبب في ظهور المشكلة يكمن في أن السبب في ذلك هو استخدام الفارق في تنسيق الأرقام العشرية. ففي بعض البلدان، يتم استخدام الفارق أي النقطة "." كمحدد للأرقام العشرية، بينما في بلدان أخرى تستخدم "," كمحدد للأرقام العشرية.لحل هذه المشكلة، يمكننا تعيين المحدد الصحيح للأرقام العشرية باستخدام `Locale` بشكل صريح. على سبيل المثال، يمكنك تعيين `Locale.US` الذي يستخدم "." كمحدد للأرقام العشرية بدلاً من ",". بهذا الشكل: import java.util.Locale; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); in.useLocale(Locale.US); // تعيين المحدد الصحيح للأرقام العشرية System.out.println("Enter Your Height: "); // التحقق مما إذا كان الإدخال يمكن تحويله إلى رقم عشري while (!in.hasNextDouble()) { System.out.println("Invalid input. Please enter a valid number."); in.next(); // تجاهل الإدخال غير الصالح وقراءة الإدخال التالي } double height = in.nextDouble(); System.out.println("Your height is: " + height); } } فبتعيين `Locale.US`، يجب أن يتم قبول 5.5 كرقم عشري صالح دون وجود أخطاء.
  9. ليس هذا فقط، فإطار العمل PyTorch يستخدم للتعامل مع الشبكات العصبية الاصطناعية، PyTorch هنا يساعدنا في تدريب الأجهزة الحاسوبية (المعروفة باسم النماذج) لفهم الصور والنصوص وحتى التنبؤ بالأحداث. أما مكتبة OpenCV، فهي أداة رائعة للتعامل مع الصور ومقاطع الفيديو. بحيث تتيح إجراء الكثير من العمليات الممتعة، مثل تغيير حجم الصورة، وقصها، وتغيير الألوان، واكتشاف الوجوه. فلو تذكرت كيف تلعب مع الألعاب المصغرة التي تأتي معها مربعات مختلفة الألوان والأشكال، فإن OpenCV تساعد الكمبيوتر على فهم ما هي هذه الأشكال والألوان. وبشكل عام، ولتوضيح الفروق بينهما فلنفترض أن لدينا مجموعة من الصور لقطط وكلاب، ونريد تطوير نظام لتصنيف الصور إما كقطة أو ككلب. إذا أردت استخدام PyTorch: سنستخدمه لتدريب نموذج تعلم آلي يتعرف على الصور ويصنفها بناءً على محتواها. بحيث نقوم بتحميل الصور وتحويلها إلى تنسيق مناسب للتدريب، ثم نستخدم PyTorch لبناء وتدريب النموذج على هذه الصور. أما إذا أردت استخدام OpenCV: سنستخدمه لمعالجة الصور مباشرة، مثل تغيير حجم الصور، وتحويلها إلى الأبيض والأسود، واستخراج الميزات المهمة منها مثل الأشكال والهياكل. لكننا لن نقوم ببناء نموذج للتعلم من هذه الصور، بل سنستخدمها مباشرة في التحليل والاستخدامات الأخرى. يمكنك التعمق في هذا الأمر من خلال تصفح هذه المصادر:
  10. للأسف، في حالة تغيير package name لتطبيق ما، فلن تكون قادرًا على تحديث التطبيق الموجود في المتاجر سواء (Google Play وApp Store) مباشرة ولحل المشكل سيتعين عليك إصدار تطبيق جديد بالـ package name الجديد ورفعه كتطبيق منفصل في المتجر. ولتوضيح الأمر، فما أقصده هو أنه سيتعين عليك إصدار التطبيق الجديد كنسخة جديدة في المتجر والترويج له كتطبيق مستقل، وستبدأ من جديد بالتحميلات والتقييمات. أما بالنسبة لملف KEY STORE، فستحتاج إلى استخدام نفس الملف KEY STORE الذي استخدمته لتوقيع التطبيق القديم، أو يمكنك إنشاء مفتاح توقيع جديد واستخدامه لتوقيع التطبيق الجديد. لكن يجب أن يكون لديك نسخة احتياطية من ملف KEY STORE الخاص بالتطبيق القديم لضمان قدرتك على تحديث التطبيقات الموجودة في المتاجر في المستقبل، ويجب الحفاظ على هذا الملف بأمان وهذه النقطة برأيي أكثر من ضرورية.
  11. لا، ليس من الضروري أن يعمل الجهاز الذي يحتوي على ملف HTML لموقع الويب لمدة 24 ساعة كاملة حتى يعمل الموقع بالعكس، يمكن للموقع أن يكون متاحا على الإنترنت دون الحاجة لتشغيل الجهاز المضيف للملف HTML طوال الوقت، هذا بفضل خدمات استضافة الويب التي تعمل على السيرفرات المخصصة لهذا الغرض. يمكنني أن أشرح لك ذلك، فمن خلال خدمات الاستضافة المشتركة مثلا يمكنك استضافة موقعك على سيرفرات مشتركة مع مواقع أخرى بحيث تتم إدارة هذه السيرفرات بواسطة شركة الاستضافة، وهي متاحة على مدار الساعة دون الحاجة لجهاز خاص بك. كما توجد خوادم VPS (Virtual Private Servers) بحيث توفر هذه الخوادم الافتراضية الخاصة بالتمويل المشترك مستوى أعلى من الأداء والتحكم مقارنة بالاستضافة المشتركة، حيث يتم تخصيص موارد معينة للموقع. وهذه مراجعة قيمة لأهم خدمات الاستضافة وأفضلها:
  12. هناك عدة طرق لتحقيق تلك النتيجة باستخدام CSS مثلا هنا قمت باستخدام الخاصية `::before` وتكون بهذا الشكل: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Border Left and Padding Example</title> <link rel="stylesheet" href="styles.css"> <!-- ربط ملف الـ CSS --> </head> <body> <div class="container"> <div class="content"> <p>This is a text inside the container.</p> </div> </div> </body> </html> وهذا ملف ال CSS (styles.css): .container { padding: 20px; /* تعيين التباعد للعنصر الأب */ } .content { position: relative; /* جعل العنصر يحتوي على عناصر متوازية */ } .content::before { content: ''; /* إنشاء عنصر قبل العنصر الفرعي */ position: absolute; /* تحديد الموقع المطلوب */ left: 0; /* تحديد الموضع من اليسار */ top: 0; /* تحديد الموضع من الأعلى */ height: 100%; /* تعيين الارتفاع ليمتد على ارتفاع العنصر الفرعي */ width: 5px; /* تعيين العرض للحد الأيسر */ background-color: #000; /* تعيين لون الحد */ } ففي هذا المثال يتم تعيين `position: relative` على العنصر الفرعي لجعل `::before` يعتمد على موقعه. ثم يتم استخدام `position: absolute` لتحديد موقع الحد الأيسر بالنسبة إلى العنصر الفرعي، وتحديد عرضه ولونه على حسب الرغبة.
  13. لا يمكن الإجابة على سؤالك بشكل مباشر، فاختيار اللغة المناسبة لتطوير الواجهات الخلفية للمواقع يعتمد على عدة عوامل مثل مستوى الخبرة الخاص بك أولا واحتياجات المشروع الذي حبذا لو ذكرته كي نفهم في أي اتجاه تسير. فمثلا لغة جافاسكريبت، بإطارات العمل الشهيرة الخاصة بها مثل React.js وAngular.js وVue.js من مميزاتها أنها قوية وواسعة التوافق مع متصفحات الويب، وتفاعلية عالية، وسهلة التطوير. فالمشاريع المناسبة لها مثل تطبيقات الويب الديناميكية وغيرها. أما لغة ال PHP والغنية عن التعريف عبر إطار العمل الشهير Laravel من مميزاتها أنها سهلة التعلم، والتوافق مع مختلف أنظمة إدارة قواعد البيانات، مع وجود مجتمع كبير للدعم والمشاريع الأنسب برأيي هي المواقع الكبيرة والتطبيقات الأكثر تعقيدا التي تتطلب أمانًا وقابلية للتوسع. من المهم أن يتم اختيار اللغة والإطار المناسبين بناء على احتياجاتك الفردية ومتطلبات مشروعك. https://io.hsoub.com/programming/1551-كيف-احدد-لغة-البرمجة-المناسبه
  14. الجواب حول هذا التساؤل سيكون نسبيا لأبعد الحدود، فمن جهة لا يلزم أن تكون مبرمجا بالكامل لتحليل البيانات لكن معرفة أساسيات البرمجة بلغة مثل Python ستكون لازمة للقيام بمعظم الأنشطة في تحليل البيانات، مثلا يمكن استخدام مكتبات جاهزة مثل pandas و NumPy لمعالجة البيانات و matplotlib و seaborn لرسم البيانات دون الحاجة لمهارات برمجية عميقة. فمثلا باستخدام أساسيات البرمجة في Python والمكتبات المناسبة مثل pandas و NumPy، يمكن البدء في استكشاف البيانات وتحليلها باستخدام الرسوم البيانية والإحصائيات الوصفية. بعد ذلك، يمكن بتطبيق أدوات التحليل الاستكشافي والنماذج الإحصائية أو التنبؤية حسب الحاجة لفهم أفضل للبيانات وتحقيق الأهداف المحددة.
  15. لدي تجربة جيدة في العمل الحر، ويمكنني أن أوصي بموقع "مستقل" للعمل الحر، فمنصة مستقل هي إحدى المنصات الشهيرة على الإنترنت التي تُمكّن العمل الحر وتوفر فرصا للمستقلين لعرض خدماتهم ومهاراتهم والعمل مع العملاء من جميع أنحاء العالم بحيث يُمكنك كمستخدم في المنصة العمل على مشاريع مختلفة في مجالات مثل التصميم، البرمجة، التسويق الرقمي، الترجمة، كتابة المحتوى، وغيرها الكثير. فهي توفر بيئة آمنة وموثوقة للتعاملات بين العملاء والمستقلين، وتُعتبر واحدة من الوجهات الرئيسية للبحث عن مواهب مستقلة على الإنترنت مما يحقق التبادل. أما العمل بوظيفة عن بعد فمنصة "بعيد" لها باع كبير في هذا المجال والتخصص. إليك بعض المقالات التي تتناول الموضوع:
  16. يمكنك نقل تطبيقاتك من خلال فتح متجر Google Play على الجهاز الذي ترغب في نقل التطبيقات منه. ثم الضغط على القائمة الجانبية (ثلاث خطوط أفقية) الموجودة في الزاوية اليسرى العليا. تختار "حسابي" ثم تضغط على "إدارة الحسابات على هذا الجهاز". بعدها تختار الحساب الذي يحتوي على التطبيقات التي ترغب في نقلها. وعند تبويب "التطبيقات والألعاب" يمكنك أن تختارها ثم تضغط على "تثبيت" أو "اشتري مرة أخرى. وبعد الانتهاء من هذه الخطوات، ستظهر التطبيقات المختارة في قائمة "تطبيقاتي" في متجر Google Play على الحساب الجديد الذي تم تسجيل الدخول به.
  17. بالنسبة للمشكلة التي واجهتك فيجب عليك إزالة هذا العنصر من الـ XML لأنه ليس جزءا من عناصر HTML. بالتالي، يُعتبر كنص ترغب في كتابته. أما بالنسبة للصور، إذا كانت المشكلة تتعلق بتغطية الصورة للنصوص واحتلالها للصف بأكمله، فالسبب يكمن في وضعك للصورة كخلفية للصف بأكمله. والحل ممكن من خلال إنشاء عنصر جديد يحتوي على الصورة، مثلما هو موضح في الكود التالي: <td style="text-align: center; padding-bottom: 30px;"> <div style="height: 50px; width: 50px; background-image: url('images/member_image.jpg'); background-size: 90px;"></div> <h1>بطاقة عضو بعثة</h1> <div><img src="images/avatar/defaultImage.png" alt="" style="width: 100px;"></div> <h2>{{ $hajj->full_name_ar }}</h2> <h2>{{ $hajj->full_name_en }}</h2> {{-- <h4>{{ $hajj-> }}</h4> --}} <h4> رئيس اللجنة </h4> <h4> عضو </h4> <h4> عضو </h4> </td>
  18. هل يمكنك إرفاق مجلد المشروع كاملا لتصفحه ومعرفة المشكلة بالتحديد؟
  19. الأمر "ps" يعرض قائمة بالعمليات المتصلة بالمستخدم الحالي أو جميع العمليات إذا تم تشغيله بصلاحيات الجذر في نظام ويندوز، الأمر الذي يعادل "ps" في نظام UNIX هو الأمر "tasklist"، وهو يستخدم لعرض قائمة بجميع العمليات التي تعمل في النظام. بحيث أن هذا الأمر سيعرض قائمة بجميع العمليات التي تعمل في النظام مع معلومات حول كل عملية مثل اسم العملية ومعرف العملية وحالتها والذاكرة المستخدمة والمزيد.
  20. هل تستخدم PyCharm؟ إن كان نعم، يمكنك إختيار "Create New Project" من القائمة الرئيسية. ثم تبدء في تكوين بيئة العمل الخاصة بـ Flask: تختار "Flask" من قائمة القوالب. تحدد موقع المشروع واسمه. تنقر على "Create". إن كان لديك آخر تحديث فسيولّد لك التركيبة تلقائيا، سيكون لديك 3 مجلدات: venv خاص بال Virtual Environment، ومجلد Static عادة يتم وضع فيه ملفات ال CSS وغيرها. ومجلد Template أين نضع فيه ملفات ال Html. بينما كود البايثون نضعه في ملف app.py أوأي ملف آخر لا يهم التسمية، بحيث يكون في جذر المشروع أي ال root. وهذا تفصيل ومثال للهيكلة: بحيث: `app/`: يمثل الدليل ويحتوي على تطبيق Flask. `static/`: نضع فيه الملفات الثابتة مثل CSS و JavaScript والصور، إلخ. `templates/`: نضع فيه قوالب HTML. `venv/`: هذا الدليل يحتوي على البيئة الافتراضية للمشروع. يتم إنشاؤها تلقائيا بواسطة PyCharm عند إنشاء بيئة افتراضية جديدة. `app.py`: هذه عادةً نقطة الدخول لتطبيق Flask وفيها كود بايثون. أتمنى أن يكون شرحي واضحا. يمكن استخدام أي تركيبة أو هيكلة لكن هذه تعمل في حالة لم تغير في الكود الأخير لأنه يعمل عندي بشكل عادي.
  21. يمكنك ذلك، فالمساهمة في المشاريع المفتوحة المصدر تعتبر فرصة رائعة لنا كمبرمجين للمشاركة في تطوير البرمجيات والتعلم من الخبراء في المجال، يمكن ذلك من خلال العديد من الطرق، فبداية يمكنك ببساطة البدء بالبحث عن مشروع مفتوح المصدر على منصات مثل GitHub والتحقق من المشاكل المفتوحة (Issues) التي يحتاج المشروع إلى مساعدة فيها. بعد ذلك، يمكنك الشروع في تحسين الكود أو إضافة ميزات جديدة. كما يمكنك البدء بالمساهمة في المناقشات والدعم الفني بحيث يمكنك المشاركة في منتديات المشروع والمناقشات عبر البريد الإلكتروني لتقديم المساعدة للمستخدمين الآخرين والإجابة على الأسئلة التقنية. بالنسبة لنا كمبرمجين، المساهمة في مشاريع مفتوحة المصدر توفر العديد من الفوائد فهي: فرصة لتطوير مهارات البرمجة واكتساب خبرة عملية في بيئة تعاونية. فرصة للتعلم من الآخرين والعمل بشكل مشترك مع مبرمجين ذوي خبرة. فرصة لبناء سجل عمل (Portfolio) قوي يمكن استخدامه في المستقبل للحصول على وظائف أو فرص أخرى في مجال تطوير البرمجيات. فرصة للتواصل والتعرف على مجتمع واسع من المطورين والمهتمين بنفس التكنولوجيا أو المجال. يمكنك الاستفادة ومعرفة الطرقوالكيفية من خلال هذه المصادر القيمة:
  22. لقد أعدت تشغيل المشروع والمشروع يعمل عندي بشكل عادي، قم بالتأكد من أن مشروعك له نفس هذه التركيبة والهيكلة، وتأكد من وجود مجلد باسم Template في جذر المشروع، كما هو مبين في الصورة المرفقة:
  23. اختيار الحاسوب المناسب للبرمجة يخضع لعدة عوامل، من بينها تفضيلاتك واحتياجاتك، فمثلا تعلم البرمجة ليس كالعمل كمبرمج مباشرة، لأن التعلم لا يحتاج إلى قدرات كبيرة من الحاسوب، وأغلب المبرمجين حينما نقرأ أو نسمع عن بداياتهم نجدهم قد بدؤوا بمعالجات ضعيفة، ثم تدرجوا في استعمال الحواسيب ليصلوا إلى أجهزة قوية نسبيا. لكن عموما، الحاسوب المناسب للبرمجة سيحتاج إلى مجموعة مواصفات تتيح للمبرمج العمل بكفاءة وسلاسة خاصة مع بيئات التطوير المختلفة وتشغيل البرامج بسرعة ودون مشاكل.بعض المواصفات التي أراها مناسبة وضرورية هي: المعالج القوي، يمكن استخدام معالجات متطورة مثل Intel Core i5 أو i7 أو ما يعادلها من AMD، والتي توفر أداءً سريعًا وفعالا لتشغيل التطبيقات وعمليات البرمجة المتعددة. ذاكرة RAM بحيث تكون كافية، العديد من المصادر تقول بأنه يجب أن تكون على الأقل 8 جيجابايت من ذاكرة الوصول العشوائي لكن شخصيا أفضل أن تكون 16 جيغا أو أكثر لكونها تساعد في تشغيل التطبيقات بسلاسة. أيضا، ستحتاج إلى حاسوب يوفر مساحة خاصة، وإلى بطاقة رسومات جيدة، خاصة إذا كنت تعمل على تطوير التطبيقات ذات الرسوميات المتقدمة أو الألعاب أو الوسائط المتعددة، فقد تحتاج إلى بطاقة رسومات منفصلة بدلا من الرسومات المدمجة.
  24. لقد اطلعت على المشروع ووجدت أنه فيه بعض المشاكل البرمجية، بما أنك تستخدم فلاسك، استخدمت Pycharm كي أشغل المشروع لأنه يسهل العمل كثيرا وأنصح دائما باستخدامه. أولا، يجب أن تنشئ مشروعا جديدا من نوع Flask ثم تضع الكود الخاص ب index.html في مجلد Templates. لقد وضعت عليه تعديلات أيضا وهذا هو الكود الصحيح: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Prisoner's Dilemma Game</title> </head> <body> <h1>Prisoner's Dilemma Game</h1> <button id="cooperate-btn">Cooperate</button> <button id="defect-btn">Defect</button> <div id="result"></div> <script> document.getElementById('cooperate-btn').addEventListener('click', function() { playGame(1); }); document.getElementById('defect-btn').addEventListener('click', function() { playGame(0); }); function playGame(decision) { var xhr = new XMLHttpRequest(); xhr.open("POST", "/api/play", true); xhr.setRequestHeader("Content-Type", "application/json"); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && xhr.status === 200) { var response = JSON.parse(xhr.responseText); document.getElementById('result').innerText = response.result; } }; var data = JSON.stringify({"decision": decision}); xhr.send(data); } </script> </body> </html> ثم تضيف كود pp.py مكان الكود الموجود في ملف app.py، وهو الآخر عدلت عليه بهذا الشكل: import random from distutils.util import execute from flask import Flask, jsonify, request, render_template import qiskit app = Flask(__name__) def player_decision(playername): while True: decision = input(f"{playername}, do you Cooperate (C) or Defect (D)? ").upper() if decision == 'C': return run(1) elif decision == 'D': return run(0) else: print("Invalid input, please choose 'C' for Cooperate or 'D' for Defect.") def game_outcome(player1_decision, player2_decision): if player1_decision[0] > player2_decision[0]: return (3, 3) # Both cooperate elif player1_decision[0] < player2_decision[0]: return (0, 5) # Player 1 cooperates, Player 2 defects elif player1_decision[0] == player2_decision[0]: return (5, 0) # Player 1 defects, Player 2 cooperates else: return (1, 1) # Both defect def run(s, num_bits=10): alice_key, bob_key = bb84_protocol(num_bits, s) if s == 1: return sum(alice_key), sum(bob_key) else: return 0, 0 def bb84_protocol(num_bits, s): alice_bits = [int(bit) for bit in ''.join(random.choices(['0', '1'], k=num_bits))] alice_bases = [int(bit) for bit in ''.join(random.choices(['0', '1'], k=num_bits))] alice_message = encode_message(alice_bits, alice_bases) bob_bases = [int(bit) for bit in ''.join(random.choices(['0', '1'], k=num_bits))] bob_measurements = measure_message(alice_message, bob_bases) matching_indices = compare_bases(alice_bases, bob_bases, s) if matching_indices: alice_key = [alice_bits[i] for i in matching_indices] bob_key = [bob_measurements[i] for i in matching_indices] return alice_key, bob_key return alice_bits, bob_bases def encode_message(bits, bases): message = [] for i in range(len(bits)): qc = qiskit.QuantumCircuit(1, 1) if bases[i] == 0: if bits[i] == 0: pass else: qc.x(0) else: if bits[i] == 0: qc.h(0) else: qc.x(0) qc.h(0) message.append(qc) return message def measure_message(message, bases): backend = Aer.get_backend('qasm_simulator') measurements = [] for i in range(len(message)): if bases[i] == 0: message[i].measure(0, 0) else: message[i].h(0) message[i].measure(0, 0) job = execute(message[i], backend, shots=1) result = job.result() measured_bit = int(list(result.get_counts(message[i]).keys())[0]) measurements.append(measured_bit) return measurements def compare_bases(alice_bases, bob_bases, s): indices = [] if s == 1: for i in range(len(alice_bases)): if alice_bases[i] == bob_bases[i]: indices.append(i) return indices else: return 0 @app.route('/') def index(): return render_template('index.html') @app.route('/api/play', methods=['POST']) def play_game(): data = request.get_json() player_decision = data.get('decision') player1_decision = player_decision[0] player2_decision = player_decision[1] # Your game outcome logic here result = { "result": { "Player 1's decision": "Cooperate" if player1_decision == 1 else "Defect", "Player 2's decision": "Cooperate" if player2_decision == 1 else "Defect", "Player 1's score": 0, # Replace with your calculated score "Player 2's score": 0 # Replace with your calculated score } } return jsonify(result) if __name__ == '__main__': app.run(debug=True) بحيث قمت بإضافة مسار كي يتعرف على الملف في الفرونت أند، وإضافة الدالة التي تقوم بتوليد الملف وعرضه على هذا الرابط: وهذه هي الدالة مع المسار: @app.route('/api/play', methods=['POST']) def play_game(): data = request.get_json() player_decision = data.get('decision') player1_decision = player_decision[0] player2_decision = player_decision[1] # Your game outcome logic here result = { "result": { "Player 1's decision": "Cooperate" if player1_decision == 1 else "Defect", "Player 2's decision": "Cooperate" if player2_decision == 1 else "Defect", "Player 1's score": 0, # Replace with your calculated score "Player 2's score": 0 # Replace with your calculated score } } return jsonify(result) if __name__ == '__main__': app.run(debug=True) ثم تعرض بهذا الشكل في الصورة:
  25. لتنشيط نظام التشغيل Windows على الجهاز، يجب أولا عليك العثور على مفتاح الترخيص الخاص بنسخة Windows التي اشتريتها، عادة يأتي هذا المفتاح مع النسخة أو يرسل إليك عبر البريد الإلكتروني في حالة الشراء عبر الإنترنت، ثم بمجرد وجود المفتاح، يمكنك فتح إعدادات Windows والبحث عن قسم "التنشيط". بعد ذلك، قم بإدخال مفتاح الترخيص في المكان المخصص واتبع التعليمات لإتمام عملية التنشيط.، في النهاية يجب أن تظهر رسالة تؤكد نجاح التنشيط بعد الانتهاء، ومفتاح الترخيص عادة يكون على شكل سلسلة من 25 حرفا وأرقام. على سبيل المثال: ABCDE-FGHIJ-KLMNO-PQRST-UVWXY. ويمكنك الاطلاع على المزيد من المعلومات من هنا:
×
×
  • أضف...