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

Mustafa Suleiman

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

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

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

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

    365

كل منشورات العضو Mustafa Suleiman

  1. أولاً عليك بإنشاء الإتصال بقاعدة بيانات MySQL: <?php $servername = "اسم_خادم_قاعدة_البيانات"; $username = "اسم_مستخدم"; $password = "كلمة_المرور"; $dbname = "اسم_قاعدة_البيانات"; // إنشاء الاتصال $conn = new mysqli($servername, $username, $password, $dbname); // التحقق من نجاح الاتصال if ($conn->connect_error) { die("فشل الاتصال بقاعدة البيانات: " . $conn->connect_error); } ?> ثم قم إجراء استعلام لجلب دوام كل دكتور من جدول الدوام كالتالي: <?php // استعلام لجلب دوام كل الأطباء $sql = "SELECT * FROM جدول_الدوام"; $result = $conn->query($sql); if ($result->num_rows > 0) { // عرض البيانات while ($row = $result->fetch_assoc()) { echo "اسم الدكتور: " . $row["اسم_الدكتور"] . "<br>"; echo "دوام الدكتور: " . $row["دوام_الدكتور"] . "<br>"; echo "<br>"; } } else { echo "لا توجد نتائج"; } // إغلاق الاتصال $conn->close(); ?> وبيانات قاعدة البيانات التالية "اسم_خادم_قاعدة_البيانات" و "اسم_مستخدم" و "كلمة_المرور" و "اسم_قاعدة_البيانات" عليك بتغييرها إلى قيم فعلية تتناسب مع معلومات قاعدة البيانات الخاصة بك. أيضًا تعديل "جدول_الدوام" و "اسم_الدكتور" و "دوام_الدكتور" بحسب اسم الجدول وأسماء الأعمدة الخاصة بجدول الدوام لديك. والمثال يفترض أن لديك جدول يحتوي على حقلين هما "اسم_الدكتور" و "دوام_الدكتور" لتخزين اسماء الأطباء ودوامهم على التوالي، ويتم عرض النتائج باستخدام حلقة while لعرض كل سجل من جدول الدوام.
  2. إذا كان سؤالك خاص بأحد الدورات، فأرجو منك السؤال أسفل فيديو الدورة الخاص بالسؤال، وإذا كان السؤال غير متعلق بالدورة، فعليك توضيح ما الذي تريد فعله بالضبط.
  3. تستخدم خوارزميات البحث الثنائي (Binary Search) للبحث في البيانات المرتبة، وتُنفذ تلك الخوارزميات بشكل أكثر شيوعًا في القوائم المرتبة (lists)، لكن باستطاعتك تنفيذها في القواميس (dictionaries) في لغة Python. فعند استخدام البحث الثنائي في القواميس، يتم البحث عن القيمة المطلوبة باستخدام المفتاح (key) بدلاً من الموضع (index) كما هو الحال في القوائم، ويجب أن يكون للقاموس ترتيب معين للمفاتيح لضمان عمل البحث الثنائي بشكل صحيح. ولنفترض أن لدينا مفاتيح في القاموس مرتبة تصاعديًا، فيمكن استخدام البحث الثنائي للعثور على قيمة معينة بناءً على المفتاح. وإليك مثال لتوضيح تنفيذ خوارزمية البحث الثنائي في قاموس (dictionary): def binary_search_dict(dictionary, target): keys = sorted(dictionary.keys()) # ترتيب المفاتيح بشكل صحيح left = 0 right = len(keys) - 1 while left <= right: mid = (left + right) // 2 mid_key = keys[mid] if mid_key == target: return dictionary[mid_key] elif mid_key < target: left = mid + 1 else: right = mid - 1 return None # في حالة عدم العثور على القيمة المطلوبة # مثال لاستخدام البحث الثنائي في قاموس my_dict = {'apple': 5, 'banana': 2, 'cherry': 8, 'orange': 3, 'pear': 1} result = binary_search_dict(my_dict, 'cherry') if result is not None: print("تم العثور على القيمة:", result) else: print("لم يتم العثور على القيمة") بالنسبة لسؤالك الثاني، فتستطيع تنفيذ خوارزميات البحث الثنائي في البحث عن أسماء أو أرقام، وذلك بغض النظر عن نوع البيانات المستخدمة، وتعتمد الخوارزمية على ترتيب البيانات بحيث يمكن تحديد الموضع المناسب للبحث بناءًا على القيمة المطلوبة. وانتبه إلى أن البيانات المستخدمة في البحث الثنائي يجب أن تكون مرتبة بشكل صحيح لضمان الحصول على نتائج صحيحة، فإذا تم تغيير البيانات بعد ترتيبها، فقد يؤدي ذلك إلى نتائج غير صحيحة عند استخدام البحث الثنائي. وفيما يلي مثال على تنفيذ خوارزمية البحث الثنائي للبحث عن رقم في قائمة (list): def binary_search_list(nums, target): left = 0 right = len(nums) - 1 while left <= right: mid = (left + right) // 2 mid_num = nums[mid] if mid_num == target: return mid elif mid_num < target: left = mid + 1 else: right = mid - 1 return -1 # في حالة عدم العثور على الرقم # مثال لاستخدام البحث الثنائي في قائمة my_list = [1, 3, 5, 7, 9, 11, 13, 15] index = binary_search_list(my_list, 7) if index != -1: print("تم العثور على الرقم في الموضع:", index) else: print("لم يتم العثور على الرقم") ولتوضيح الأمر سأذكر لك مثال للبحث عن اسم في قائمة (list): def binary_search_names(names, target): left = 0 right = len(names) - 1 while left <= right: mid = (left + right) // 2 mid_name = names[mid] if mid_name == target: return mid elif mid_name < target: left = mid + 1 else: right = mid - 1 return -1 # في حالة عدم العثور على الاسم # مثال لاستخدام البحث الثنائي في قائمة الأسماء name_list = ['Alice', 'Bob', 'Charlie', 'David', 'Eve', 'Frank', 'Grace'] index = binary_search_names(name_list, 'David') if index != -1: print("تم العثور على الاسم في الموضع:", index) else: print("لم يتم العثور على الاسم")
  4. هناك علاقة "واحد إلى كثير" بين الجدول الأول وكل من الجدول الثاني والجدول الثالث والجدول الرابع، حيث يمكن لطالب واحد أن يرتبط بعدة سجلات في الجداول الثلاثة الأخرى، كالتالي: 1- العلاقة بين الجدول الأول والجدول الثاني: المفتاح الأساسي في الجدول الأول (كود الطالب) يعتبر مفتاح أجنبي في الجدول الثاني (كود الطالب)، وتلك العلاقة تعني أن الجدول الثاني يحتوي على معلومات الدفع والتاريخ لكل طالب. 2- العلاقة بين الجدول الأول والجدول الثالث: المفتاح الأساسي في الجدول الأول (كود الطالب) يعتبر مفتاح أجنبي في الجدول الثالث (كود الطالب)، وتعني أن الجدول الثالث يحتوي على معلومات الاختبار والتقييم لكل طالب. 3- العلاقة بين الجدول الأول والجدول الرابع: المفتاح الأساسي في الجدول الأول (كود الطالب) يعتبر مفتاح أجنبي في الجدول الرابع (كود الطالب)، أي أن الجدول الرابع يحتوي على معلومات الغياب والملاحظات لكل طالب.
  5. السؤال عام جدًا، ما هي الخدمات الرقمية التي تحتاج إلى تسويقها؟ فإذا كان لديك خدمات تقدمها فإما عليك بإنشاء موقع شخصي وعرض تلك الخدمات عليه مع توفير إمكانية لشراء تلك الخدمات أو رابط لموقع آخر تعمل عليه لحجز الخدمة مثلاً. أما إذا كنت تريد التسويق لخدمة تقدمها، فعليك بتعلم المهارات الخاصة بالتسويق وبناء العلامة الشخصية، وكيفية بناء متابعين لك عن طريق نشر معرفتك في المكان الصحيح بغرض الإفادة فعلاً لفترة وتعريف الناس بنفسك. أما إذا كنت تريد العمل في مواقع العمل الحر وعرض خدماتك، فلديك مواقع مثل مستقل وخمسات وموقع بعيد. وبخصوص عرض المنتجات الرقمية للبيع والتربح منها، فلديك منصة بيكاليكا. قسم مقالات التسويق والمبيعات في أكاديمية حسوب قسم مقالات التسويق الذاتي في أكاديمية حسوب
  6. المنصات التعليمية المشابهة لـ Udemy وغيرها قليلة في المحتوى العربي، ولذلك أمامك خيارين، الأول هو إنشاء موقع خاص بك ونشر الكورس الخاص بك عليه مع نظام إشتراك تحدده أنت في حال كنت قادر على التسويق للكورس الخاص بك ولديك متابعين أو معروف في مجالك. أو استخدام المنصات التي لديها مستخدمين بالفعل مثل Udemy وAlmentor و Skillshare وبالتالي سيتم العثور على الكورس الخاص بك ولكن بشرط أن توفر جودة منافسة للكورسات الموجودة بالفعل وميزة تنافسية عنهم، مثل شرح أحدث الإصدارات بطريقة عملية واستخدام السلايدات والإنفوجرافيك لتوضيح الأمر، وغيرها من الأمور التي تستطيع تحديدها بنفسك، وقد يفيدك قراءة التالي: وربما عليك في البداية إنشاء كورس مجاني على اليوتيوب بجودة جيدة، من أجل بناء قاعدة متابعين لك مهتمين بالكورسات التي تقدمها.
  7. عليك بإعداد بيانات حسابك على GitHub وذلك من خلال الأوامر التالية: git config --global user.name "hanan" git config --global user.email hanan@gmail.com عليك باستبدال الاسم ولإيميل باسم المستخدم الخاص بك على GitHub ثم استبدال الإيميل بالبريد الذي قمتي بالتسجيل به على GitHub. وعند عمل push سيتم سؤالك عن تسجيل الدخول سواء من خلال المتصفح Sign in with your browser أو طرق أخرى مثل token أو code، والأسهل لك Sign in with your browser وسيتم فتح نافذة لكتابة كلمة المرور واسم المستخدم او الإيميل، وبعدها تستطيعي عمل push. وإذا واجهتك مشكلة أرجو توفير صورة للمشكلة لتوضيح الأمر. وأيضًا من الأفضل لك مشاهدة الفيديو التالي، وستوفري على نفسك الكثير من العناء الغيرضروري عند التعامل مع Git:
  8. ببساطة مهارة REST API أو RESTful API تعني قدرتك على تصميم وتطوير وتفهم واجهات برمجة التطبيقات (API) باستخدام نمط REST (Representational State Transfer). REST هو نمط معماري يستخدم في تطوير الويب للتواصل بين العميل (Client) والخادم (Server) من خلال استخدام مجموعة من الأساليب المحددة مثل GET وPOST وPUT وDELETE. ويستند REST إلى مجموعة من المبادئ والقيود التي تسهل الاتصال والتفاعل بين العميل والخادم: تمثيل الموارد (Resources): يتم تمثيل البيانات والموارد في النظام عن طريق معرفات فريدة (مثل عناوين URL) ويتم الوصول إليها والتعامل معها عن طريق طلبات HTTP. واجهات معيارية (Standardized Interfaces): يستخدم REST مجموعة من طرق الطلبات المعيارية في HTTP مثل GET وPOST وPUT وDELETE للتفاعل مع الموارد. إنعدام الحالة (Stateless): كل طلب منفصل بذاته ولا يتم تخزين حالة العميل على الخادم بين الطلبات، وترسل كافة المعلومات اللازمة للخادم في كل طلب. التفاعل المستقل (Self-contained Interactions): تشمل طلبات REST كل المعلومات اللازمة لإجراء العملية المطلوبة، بما في ذلك أي بيانات إضافية أو تعليمات مطلوبة. التوجيه المحدود (Limited Coupling): يعتمد REST على فصل العميل والخادم بشكل مستقل، ولا يعتمد على المعرفة المسبقة للعميل بشأن تفاصيل الخادم، وبالعكس. أي من يمتلك مهارة REST API قادر على العمل في كلا الجانبين: جانب العميل وجانب الخادم. وفيما يلي توضيح للدورين: 1- جانب العميل (Client-side) يطور تطبيق أو موقع ويب يتفاعل مع API الخادم. يستخدم طلبات HTTP المختلفة مثل GET وPOST للتواصل مع الخادم. يقوم ببناء واجهة المستخدم (UI) لعرض البيانات المستردة من الخادم باستخدام بيانات المستجيبة التي تم تلقيها عبر API. 2- جانب الخادم (Server-side) ينشئ API باستخدام تقنيات RESTful للسماح للعملاء بالتواصل مع البيانات والخدمات التي يقدمها الخادم. يعمل على تصميم وتطوير واجهات البرمجة API التي توفر الوصول إلى مجموعة محددة من البيانات أو العمليات. ينشئ نماذج البيانات ويحدد طرق الوصول إلى هذه البيانات بما يتوافق مع مبادئ REST. وفي العمل، يمكن للمبرمجين أن يكونوا متخصصين في جانب واحد من REST API، مثل مطوري الواجهة الأمامية (Front-end Developers) الذين يتعاملون بشكل رئيسي مع API الخادم على الطرف العميل، أو مطوري الخادم (Back-end Developers) الذين ينشئون ويديرون ال API نفسها على الطرف الخادم. وإليك مثال لكود JavaScript يوضح كيفية تنفيذ REST API لمصادر المستخدمين باستخدام إطار عمل Express.js أي في الواجهة الخلفية: const express = require('express'); const app = express(); // بيانات المستخدمين المؤقتة let users = [ { id: 1, name: 'John' }, { id: 2, name: 'Jane' } ]; // استرداد جميع المستخدمين app.get('/users', (req, res) => { res.json(users); }); // إنشاء مستخدم جديد app.post('/users', (req, res) => { const newUser = { id: users.length + 1, name: req.body.name }; users.push(newUser); res.status(201).json(newUser); }); // تشغيل الخادم app.listen(3000, () => { console.log('Server started on port 3000'); }); أما التعامل مع REST API في الواجهة الأمامية فهو كالتالي: // استدعاء API لاسترداد جميع المستخدمين async function getUsers() { try { const response = await fetch('/users'); const data = await response.json(); // استخدام البيانات المستلمة console.log(data); // يتم طباعة المستخدمين في وحدة التحكم } catch (error) { console.error('Error:', error); } } // استدعاء API لإنشاء مستخدم جديد async function createUser() { const newUser = { name: 'Alice' }; try { const response = await fetch('/users', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(newUser) }); const data = await response.json(); // استخدام البيانات المستلمة console.log(data); // يتم طباعة المستخدم الجديد في وحدة التحكم } catch (error) { console.error('Error:', error); } } // استدعاء الدوال المحددة getUsers(); createUser(); وبالإضافة إلى REST، هناك عدة معماريات أخرى تستخدم في تطوير وتصميم واجهات برمجة التطبيقات، مثل: معمارية SOAP (Simple Object Access Protocol): تستخدم في تطوير واجهات برمجة التطبيقات المبنية على نمط XML وتتطلب بروتوكولات معقدة للتواصل. معمارية GraphQL: تسمح للعميل بتحديد البيانات المحددة التي يُرغب في استردادها، مما يزيد من كفاءة استرداد البيانات ويقلل من حمولة الشبكة. معمارية gRPC: تعتمد على نمط RPC (Remote Procedure Call) للتواصل بين العميل والخادم، وتستخدم تسلسل البيانات بتنسيق Protocol Buffers.
  9. ليس لك علاقة بـ CSS من قريب أو بعيد، لكن عليك بتعلم الأساسيات فقط في حال أردت تنسيق أو تعديل أمرًا ما في الصفحة لديك، أو إذا أردت بناء مشروع خاص بك، فسيتعين عليك بناء واجهة أمامية بالطبع في حال كنت تعمل بمفردك على المشروع. وبالطبع لن تحتاج إلى التعمق في CSS مجرد فهم اللغة لا أكثر، وستجد أن أغلب مطوري الواجهة الخلفية الذين يتعاملون مع الواجهة الأمامية يستخدمون إطار للواجهة الأمامية وكلٌ يفضل إطار مختلف، ومنها Bootstrap أو Tailwind أو Martial UI وغيرهم. لذلك عليك بالإعتماد على إطار خاص بـ CSS من أجل التعامل مع الواجهة الأمامية إن احتجت لذلك في مشروعك، قم بتجربة تعلم كل إطار واختر ما يناسبك وتجد إرتياح في استخدامه، وإذا أردت إمكانية تخصيص الواجهة الأمامية بشكل حر أكثر عليك بتعلم Tailwind، أما بخصوص مكونات الواجهة الأمامية الجاهزة والتي تستطيع استخدامها لإنشاء واجهة أمامية جميلة في وقت قصير فعليك بتعلم Bootstrap وMartial UI. وذلك لا يعني أن Tailwind لا يتوفر لها مكونات واجهة جاهزة UI components، بل يوجد وإليك مثال: https://daisyui.com https://www.hyperui.dev/ https://tailwindcomponents.com/ لكن البعض قد يجد أن Bootstrap وMartial UI أسهل في الاستخدام بالإضافة إلى أن تخصص تلك الإطارات هو مكونات جاهزة للواجهة الأمامية، لذلك ذكرت لك أن تحاول تعلم وتجربة تلك الإطارات وإختيار المريح لك من بينهم، مثلاً استخدم كل إطار لمدة أسبوع وقرر بناءًا على ذلك.
  10. ستحتاج أولاً لتعلم علوم الحاسب، وستجد دورة علوم الحاسوب عونًا لك على ذلك: حيث ستتعلم بها التالي: أساسيات الحاسوب وعلومه والتفكير المنطقي وما هي الخوارزميات وكيف تفيد في البرمجة تطبيقات عملية على أساسيات التفكير المنطقي باستخدام بيئة سكراتش Scratch التفاعلية أساسيات لغة البرمجة JavaScript وتطبيق المفاهيم التي تم شرحها باستخدامها، والتوسع في شرح التطبيقات العملية للغات البرمجة أساسيات أنظمة التشغيل المختلفة وكيفية تثبيت البرمجيات اللازمة للبرمجة عليها أساسيات سطر الأوامر في نظام لينكس، وشرح الأسس التي بني عليها النظام مع تطبيقها عمليًا أنظمة قواعد البيانات المختلفة، مع شرح تفصيلي للغة SQL للتعامل معها مبادئ أساسية في أنظمة قواعد البيانات NoSQL المفاهيم الأساسية التي تبنى فيها صفحات الويب مفاهيم أساسية في الشبكات والخوادم، وكيف يتم استقبال الطلبيات إلى الخادم والرد عليها مبادئ الحماية والأمان في الويب وبأي حال من الأحوال ستحتاج إلى تعلم لغة برمجة، وفي الدورة السابقة سيتم تعلم أساسيات جافاسكريبت وبايثون. وبالتي ستتمكن من بناء معرفة واسعة وتجهيز نفسك لمجال الأمن السيبراني، أو قد تقرر التخصص في مجال آخر وذلك بناءًا على المعرفة التي اكتسبتها. وكنصيحة لا تقرر التخصص في مجال لأنك تريد أو تفضله، بل ابحث عن المطلوب في سوق العمل لديك وذلك بالتأكد من مواقع التوظيف مثل LinkedIn وغيرها. أما عن وجود دورة متخصصة في الأمن السيبراني، فهي غير متاحة، وبخصوص مسار الأمن السيبراني والـ Roadmap الخاصة به، فقد تم توضيح ذلك من قبل هنا:
  11. أهلاً بك ماجد، أرجو منك دراسة الدورة كما هي بالترتيب، طالما أنك مبتدأ في البرمجة فعليك بالدراسة من البداية إلى النهاية، وأيضًا لا تحاول إنهاء الدورة بشكل سريع، بل خذ وقتك ولا تقلق إذا كان الأمر صعب في البداية ومع الوقت سيصبح أسهل، وعليك بقراءة النقاش التالي والنقاشات المرفقة به وستجد الكثير من الإجابات للأسئلة لديك:
  12. ذلك غير متاح، ولديك خياران عندما يتعلق الأمر بتحويل كود أو ملف بايثون إلى ملف تنفيذي EXE في ويندوز، أو صيغ أخرى لأنظمة لينكس وماك. وهما PyInstaller (يدعم ويندوز ولينكس وماك) وAuto-Py-to-EXE (يدعم ويندوز فقط) وقد تم شرح ذلك في أول تعليق بشكل وافي.
  13. أنت لم تقم بتحديد ما هي الميزانية الخاصة بك، وما هو عدد الزيارات بالفعل شهريًا، وما هي المنصة الخاصة بموقعك هل هي وورد بريس، أم تستخدم برمجة خاصة مثل MERN STACK؟ وهل لديك قدرة على إدارة إعدادات الاستضافة أم تريد استضافة مدارة؟ على أي حال سأعتبر أن الميزانية لديك متوسطة، وإليك بعض الترشيحات: DigitalOcean يقدم العديد من الخدمات مثل Droplets وSpaces وDomains، وتبدأ أسعار DigitalOcean من 5 دولارات شهريًا. Linode توفر منصة Linode خدمات مثل Linode Cloud Compute وLinode Object Storage وLinode DNS، وتبدأ أسعار Linode من 5 دولارات شهريًا. Vultr مثل SSD VPS Cloud Servers و Vultr Cloud Compute وVultr Storage وVultr DNS، وتبدأ أسعار Vultr من 5 دولارات شهريًا.
  14. أولاً يجب كتابة الكود الخاص بالاستمارة ويحتوي على عناصر الإدخال التي ترغبين في جمع بياناتها كالتالي: <form action="process.php" method="POST"> <label for="name">الاسم:</label> <input type="text" id="name" name="name" required><br><br> <label for="gender">الجنس:</label> <input type="radio" id="male" name="gender" value="ذكر" required> <label for="male">ذكر</label> <input type="radio" id="female" name="gender" value="أنثى" required> <label for="female">أنثى</label><br><br> <label for="hobbies">الهوايات:</label> <input type="checkbox" id="hobby1" name="hobbies[]" value="رياضة"> <label for="hobby1">رياضة</label> <input type="checkbox" id="hobby2" name="hobbies[]" value="قراءة"> <label for="hobby2">قراءة</label><br><br> <label for="country">الدولة:</label> <select id="country" name="country" required> <option value="مصر">مصر</option> <option value="السعودية">السعودية</option> <option value="الإمارات">الإمارات</option> </select><br><br> <input type="submit" value="إرسال"> </form> ثم كتابة الكود الخاص بخادم PHP مثلاً في ملف باسم process لمعالجة البيانات المرسلة من النموذج ويقوم بإضافتها إلى قاعدة البيانات، واستخدمي MySQL أو أي نظام إدارة قاعدة بيانات آخر، كالتالي: <?php // استقبال البيانات من النموذج $name = $_POST['name']; $gender = $_POST['gender']; $hobbies = $_POST['hobbies']; $country = $_POST['country']; // تأسيس اتصال قاعدة البيانات $servername = "localhost"; $username = "اسم_المستخدم"; $password = "كلمة_المرور"; $dbname = "اسم_قاعدة_البيانات"; $conn = new mysqli($servername, $username, $password, $dbname); // التحقق من وجود أخطاء في الاتصال بقاعدة البيانات if ($conn->connect_error) { die("فشل الاتصال بقاعدة البيانات: " . $conn->connect_error); } // إدخال البيانات إلى الجداول $sql = "INSERT INTO table1 (name, gender, country) VALUES ('$name', '$gender', '$country')"; if ($conn->query($sql) === TRUE) { $table1_id = $conn->insert_id; // إدخال الهوايات إلى جدول آخر foreach ($hobbies as $hobby) { $sql = "INSERT INTO table2 (table1_id, hobby) VALUES ('$table1_id', '$hobby')"; $conn->query($sql); } echo "تمت إضافة البيانات بنجاح"; } else { echo "حدث خطأ أثناء إضافة البيانات: " . $conn->error; } // إغلاق اتصال قاعدة البيانات $conn->close(); ?> ونوع البيانات الذي يتم تخزينه في قاعدة البيانات يتوقف على التعريف الذي قمت به لجداولك، وفي الكود السابق استخدمت أنواع البيانات التالية: table1: name: VARCHAR أو TEXT (اسم العمود حسب التعريف) gender: VARCHAR أو TEXT country: VARCHAR أو TEXT table2: table1_id: INT (الرقم المميز للصف في جدول 1) hobby: VARCHAR أو TEXT وعليك استبدال "اسم_المستخدم" و"كلمة_المرور" و"اسم_قاعدة_البيانات" بمعلومات اتصال قاعدة البيانات لديك.
  15. أولاً عليك إنشاء دالة كالتالي: تعريف الدالة باسم calculate_average وهي تأخذ قائمة من الأرقام كمدخل. التحقق من طول القائمة باستخدام len(numbers) لمعرفة عدد العناصر في القائمة. إذا كان طول القائمة يساوي صفر، فهذا يعني أن القائمة فارغة. وفي هذه الحالة، تعود الدالة بقيمة صفر لأنه لا يمكن حساب المتوسط في قائمة فارغة. إذا كانت القائمة غير فارغة، يتم حساب مجموع جميع الأرقام في القائمة باستخدام الدالة sum(numbers) التي تقوم بجمع جميع الأعداد. ثم يتم قسم مجموع الأرقام على طول القائمة len(numbers) للحصول على المتوسط الحسابي. يتم إرجاع القيمة المحسوبة كناتج للدالة. def calculate_average(numbers): if len(numbers) == 0: return 0 else: return sum(numbers) / len(numbers) ثم استخدامها لحساب المتوسط كالتالي: my_list = [1, 2, 3, 4, 5] result = calculate_average(my_list) print(result) # الناتج: 3.0 empty_list = [] result = calculate_average(empty_list) print(result) # الناتج: 0 حيث تعمل الدالة calculate_average على التحقق مما إذا كانت القائمة المعطاة فارغة، وإذا كانت فارغة، فإنها تقوم بإرجاع القيمة صفر، وإذا لم تكن فارغة، فستوم بحساب مجموع جميع الأرقام في القائمة باستخدام دالة sum()، وتقسمها على طول القائمة للحصول على المتوسط الحسابي.
  16. لما لا تستخدم cache ذا طابع زمني (time-based cache)، بدلاً من تخزين الصورة نفسها في الذاكرة المؤقتة، أي بتخزين رابط (URL) الصورة في الذاكرة المؤقتة مع معلومات إضافية مثل وقت إضافة المنتج ورقم المستخدم الذي أضافه، وعند طلب الصفحة marketplace، قم بفحص الذاكرة المؤقتة للحصول على رابط الصورة المخزنة. وإذا تم إضافة منتج جديد، عليك بتحديث الرابط المخزن في الذاكرة المؤقتة بالرابط الجديد، مع معلومات الوقت ورقم المستخدم، وبالطبع ستحتاج إلى تحديث الذاكرة المؤقتة بشكل متزامن وآمن للتأكد من عدم حدوث تضارب في البيانات. أو استخدام استراتيجية التعتيم المستندة إلى التجزئة (Hash-based Invalidation) لتخزين صور المنتجات في الذاكرة المؤقتة. أي يجب عليك أولاً إنشاء تجزئة (Hash) لملف صورة المنتج، حيث تُستخدم تلك التجزئة كمفتاح لتخزين صورة المنتج في الذاكرة المؤقتة. وعندما يقوم مستخدم بإضافة منتج جديد، ستقوم بإنشاء تجزئة لملف صورة المنتج والتحقق مما إذا كان موجودًا في الذاكرة المؤقتة، وإذا لم يكن موجودًا، ستقوم بتخزين صورة المنتج في الذاكرة المؤقتة باستخدام التجزئة كمفتاح. وعند طلب صورة المنتج من قبل مستخدم آخر، ستقوم أولاً بالتحقق مما إذا كانت الصورة موجودة في الذاكرة المؤقتة، فإذا كانت موجودة، ستقوم بتقديم الصورة مباشرة من الذاكرة المؤقتة، وإذا لم تكن موجودة، ستقوم بجلب الصورة من الخادم وتخزينها في الذاكرة المؤقتة. وبإمكانك الاستعانة بـ CDN (شبكة توزيع المحتوى) أو وكيل عكسي (reverse proxy). وانتبه إلى أن الـ hash-based caching والـ time-based caching هما طريقتان مختلفتان. فالـ hash-based caching يستخدم التجزئة (hash) للمورد لتحديد ما إذا كان مخزنًا في الذاكرة المؤقتة، والتجزئة هي معرف فريد للمورد، وتُستخدم لضمان تقديم الإصدار الصحيح للمورد. أما الـ time-based caching يستخدم وقت آخر تعديل للمورد لتحديد ما إذا كان مخزنًا في الذاكرة المؤقتة، وإذا لم يتم تعديل المورد منذ آخر مرة تم فيها تخزينه في الذاكرة المؤقتة، يتم تقديم النسخة المخزنة في الذاكرة المؤقتة.
  17. هناك بعض الوظائف والأساليب المتاحة كالتالي: 1- تحويل النص إلى ASCII نستخدم دالة ord() لتحويل حرف إلى قيمته الرقمية في ASCII. char = 'A' ascii_value = ord(char) print(ascii_value) # ستقوم بطباعة القيمة 65 2- تحويل القيمة الرقمية إلى حرف ASCII دالة chr() لتحويل قيمة رقمية إلى حرف ASCII المقابل. ascii_value = 65 char = chr(ascii_value) print(char) # ستقوم بطباعة الحرف 'A' 3- الحصول على القيم ASCII للأحرف في سلسلة نصية في حال كان لديك سلسلة نصية، استخدم حلقة للحصول على القيم ASCII لكل حرف في السلسلة. مثال: string = "Hello" for char in string: ascii_value = ord(char) print(ascii_value) والكود يعمل على طباعة القيم ASCII المقابلة لكل حرف في سلسلة "Hello".
  18. الكود بعد التعديل سيصبح كالتالي: <?php $passwords = array('123456', 'xxxx', '7777', '8888', '9999'); if (isset($_POST['password'])) { if (in_array($_POST['password'], $passwords)) { setcookie('loggedIn', true, time() + (30 * 24 * 60 * 60)); // تعيين الكوكيز header('Location: ' . $_SERVER['PHP_SELF']); // إعادة توجيه الصفحة بعد تعيين الكوكيز exit(); } else { die ('Incorrect password'); } } if (!isset($_COOKIE['loggedIn']) || !$_COOKIE['loggedIn']): ?> <html> <head> <title>Login</title> </head> <body> <p>You need to login</p> <form method="post"> Password: <input type="password" name="password"> <br /> <input type="submit" name="submit" value="Login"> </form> </body> </html> <?php exit(); endif; echo '<h1>Hello world... Logged in successfully.</h1>'; ?> وما تم هو تعيين قيمة الكوكيز "loggedIn" إلى true باستخدام الدالة setcookie() عند تسجيل الدخول بكلمة المرور الصحيحة، ثم تحديد صلاحية الكوكيز لمدة 30 يومًا باستخدام time() + (30 * 24 * 60 * 60)، حيث يتم ضرب 30 (عدد الأيام) في 24 (عدد الساعات في اليوم) في 60 (عدد الدقائق في الساعة) في 60 (عدد الثواني في الدقيقة) للحصول على الوقت المستقبلي الذي ينتهي فيه صلاحية الكوكيز. وفي حالة عدم وجود قيمة الكوكيز "loggedIn" أو إذا كانت قيمتها false، فسيعرض نموذج تسجيل الدخول، وعند تسجيل الدخول الصحيح، سيتم تعيين الكوكيز وإعادة توجيه الصفحة لعرض رسالة تأكيد تسجيل الدخول بنجاح. وعليك بتأمين الاتصال باستخدام SSL والتحقق من صحة البيانات المرسلة قبل تعيين الكوكيز.
  19. ببساطة الكود هو لإنشاء حلقة تكرار (loop) تقوم بتنفيذ بعض الأوامر عدة مرات، وإليك تفسير الكود وفقًا للمتغيرات المستخدمة في الكود: n و m هما متغيران يمثلان أرقامًا صحيحة (integers) من خلال تمريرهما إلى الدالة sumMul. range(n, m, n) هو دالة في لغة Python تنشئ سلسلة من الأرقام بدءًا من القيمة n وحتى m بزيادة ثابتة بمقدار n. مثلًا، إذا كانت قيمة n تساوي 2 وقيمة m تساوي 10، فستنشئ range سلسلة الأرقام [2, 4, 6, 8، تخزن تلك السلسلة في المتغير i خلال كل تكرار للحلقة. والحلقة for تقوم بتنفيذ الأوامر الموجودة داخلها بناءًا على القيم المخزنة في المتغير i خلال كل تكرار، و زيادة قيمة المتغير total_sum بقيمة المتغير i، مما يعني أنه سيتم إضافة قيمة i إلى المتغير total_sum في كل تكرار للحلقة.
  20. ASCII ببساطة هو اختصار لـ "American Standard Code for Information Interchange" ويشير إلى مجموعة محددة من الرموز المستخدمة لتمثيل الحروف والأرقام والرموز الأخرى في الحواسيب وأنظمة الاتصالات. تم تطوير ASCII في الأصل في عام 1963 كمعيار لتبادل البيانات بين أجهزة الكمبيوتر المختلفة والشبكات. وتتضمن مجموعة ASCII الأصلية 128 رمزًا، حيث يمثل كل حرف بواحد من هذه الرموز، وتتضمن الرموز الأساسية الأبجدية اللاتينية الكبيرة والصغيرة، والأرقام من 0 إلى 9، ورموز ترقيم ورموز تحكم مثل المسافة والترقيم والعلامات القوسية والأقواس. ومع مرور الوقت، تطورت مجموعة ASCII لتشمل مجموعة أوسع من الرموز تسمح بتمثيل الأحرف والرموز الإضافية بما في ذلك الحروف غير اللاتينية والرموز الخاصة. يتكون ASCII الموسع من 8 بت، مما يعني وجود 256 رمزًا ممكنًا. وحاليًا تُستخدم ASCII بشكل واسع في البرمجة وعند نقل البيانات بين الأجهزة المختلفة، حيث يمكن تمثيل النصوص والرموز باستخدام تلك المجموعة المحددة من الأرقام والحروف. مثال للتوضيح: حرف "A" بالأحرف الكبيرة: يتم تمثيله بالرقم 65 في ASCII. حرف "a" بالأحرف الصغيرة: يتم تمثيله بالرقم 97 في ASCII. الرقم "5": يتم تمثيله بالرقم 53 في ASCII. الرمز "$": يتم تمثيله بالرقم 36 في ASCII. الرمز التحكم للمسافة الفارغة: يتم تمثيله بالرقم 32 في ASCII. والغرض هو توحيد تلك التمثيلات في جميع أنحاء الأنظمة التي تدعم ASCII لضمان التوافق وتبادل البيانات بسهولة. وتفقد النقاش التالي لمزيد من المعلومات:
  21. رسالة الخطأ "RenderTrxture.Creat faild: format unspported for random writes -r32 Sfloat (49)." معناها أنه تعذّر إنشاء كائن RenderTexture بسبب عدم دعم التنسيق المحدد للكتابة العشوائية. والتنسيق المحدد هو "r32 Sfloat" وهو تنسيق عشري ذو دقة واحدة وثلاثة وثلاثين بت، وربما كرت الشاشة لديك غير داعم لهذا التنسيق فيما يتعلق بالكتابة العشوائية. أولاً عليك التحقق من العرض والارتفاع (العرض والارتفاع في وحدة البكسل) لكائن RenderTexture، حيث يجب أن يكونوا عددًا موجبًا لا يتجاوز الحجم الأقصى المدعوم من قبل بطاقة الرسومات. ثم ابحث عن ما إذا كانت مواصفات كرت الشاشة لديك مناسبة التنسيق "r32 Sfloat" للكتابة العشوائية، ثم جرب استخدام تنسيق آخر لكائن RenderTexture. أيضًا حاول تحديث تعريف كرت الشاشة لديك، وربما لديك مشكلة مساحة الذاكرة العشوائية RAM فإذا كانت هناك مساحة صغيرة قد تسبب تلك المشكلة، تفقد هل تمتليء الرامات عند التشغيل؟ وحاول أيضًا تحديث نسخة Unity.
  22. أرجو منك طرح السؤال أسفل فيديو الدورة الخاص بالسؤال ليتم مساعدتك بشكل أفضل، وطرح الأسئلة العامة هنا.
  23. مسعود كان يقصد الأسئلة الإختبارية الخاصة بالإمتحانات وما شابه، لكن أنت تقوم بالدراسة بمفردك ولا مشكلة في توفير الحل طالما قمت بالمحاولة، عليك بذكر أنه ليس سؤال إختباري وإنما تتمرن على مهارة الـ Problem Solving. والمطلوب هو كتابة دالة في بايثون تحسب مجموع جميع أعداد مضاعفة لعدد محدد n والتي تكون أقل من العدد المحدد m، ويجب استبعاد العدد m نفسه من المجموع. وسأوضح لك طريقة الحل: قم بتعريف دالة تسمى sumMul والتي تأخذ معها معاملين، n و m. قم بالتحقق مما إذا كان كل من n و m هما أعداد صحيحة موجبة (أعداد صحيحة طبيعية)، وإذا لم يكن أحدهما عددًا صحيحًا موجبًا، فأرجع النص "INVALID". قم بإنشاء متغير يسمى total_sum واجعله يساوي 0. هذا المتغير سوف يحتوي على مجموع الأعداد المضاعفة. استخدم حلقة for لتكرار من n إلى m (باستثناء m) بزيادة n. هذا سيضمن أنك تأخذ في الاعتبار فقط الأعداد المضاعفة لـ n. في داخل الحلقة، أضف القيمة الحالية إلى total_sum. بعد الحلقة، قم بإرجاع قيمة total_sum. وإليك الكود بلغة بايثون: def sumMul(n, m): if n <= 0 or m <= 0 or type(n) != int or type(m) != int: return "INVALID" total_sum = 0 for i in range(n, m, n): total_sum += i return total_sum والآن تستطيع استخدام تلك الدالة لإيجاد مجموع الأعداد المضاعفة كالتالي: print(sumMul(2, 9)) # الناتج: 20 print(sumMul(3, 13)) # الناتج: 30 print(sumMul(4, -7)) # الناتج: "INVALID" في المثال الأول، الأعداد المضاعفة للعدد 2 أقل من 9 هي 2 و 4 و 6 و 8. مجموعهم يساوي 20. والمثال الثاني يتبع نفس المنطق لأعداد مضاعفة العدد 3 أقل من 13، مما يعطي مجموعًا قدره 30. والمثال الثالث يعود بقيمة "INVALID" لأن أحد الإدخالات، -7، ليس عددًا صحيحًا موجبًا.
  24. عليك أولاً بكتابة الكود الخاص بالاستمارة form كالتالي: <form method="POST" action="process.php"> <select name="option"> <option value="option1">Option 1</option> <option value="option2">Option 2</option> <option value="option3">Option 3</option> </select> <input type="submit" name="submit" value="إرسال"> </form> ثم إنشاء ملف PHP يُدعى process.php (أو اسم آخر حسب تفضيلك) لمعالجة البيانات المرسلة من النموذج: <?php // تأكدي من أنه تم النقر على زر الإرسال if (isset($_POST['submit'])) { // تحققي من أن تم تحديد قيمة المُدخَل select if (isset($_POST['option'])) { // قومي بالاتصال بقاعدة البيانات $servername = "اسم_الخادم"; $username = "اسم_المستخدم"; $password = "كلمة_المرور"; $dbname = "اسم_قاعدة_البيانات"; $conn = new mysqli($servername, $username, $password, $dbname); // تحققي من نجاح الاتصال بقاعدة البيانات if ($conn->connect_error) { die("فشل الاتصال بقاعدة البيانات: " . $conn->connect_error); } // استخراج القيمة المُحدَدة من المُدخَل select $selectedOption = $_POST['option']; // قومي بإدراج القيمة في جدول قاعدة البيانات $sql = "INSERT INTO اسم_الجدول (اسم_العمود) VALUES ('$selectedOption')"; if ($conn->query($sql) === true) { echo "تمت إضافة البيانات بنجاح."; } else { echo "حدث خطأ أثناء إضافة البيانات: " . $conn->error; } // أغلقي الاتصال بقاعدة البيانات $conn->close(); } else { echo "لم يتم تحديد قيمة المُدخَل select."; } } ?> ويجب استبدال "اسم_الخادم"، "اسم_المستخدم"، "كلمة_المرور"، "اسم_قاعدة_البيانات"، "اسم_الجدول"، و "اسم_العمود" في الكود بالقيم الصحيحة المطلوبة لقاعدة البيانات لديك.
  25. الخوارزميات وهياكل البيانات هما من أهم المفاهيم في علوم الحاسوب، على الرغم من أنهما مرتبطان ببعضهما البعض، إلا أنهما لهما معانٍ مختلفة. والخوارزمية هي عبارة عن مجموعة من التعليمات خطوة بخطوة لحل مشكلة ما، وتتكون من سلسلة من التعليمات التي يمكن للكمبيوتر اتباعها لإكمال مهمة معينة. بينما تعد هيكل البيانات طريقة لتنظيم البيانات في الكمبيوتر بحيث يمكن الوصول إليها وتعديلها بكفاءة. والفرق الرئيسي بين الخوارزميات وهياكل البيانات هو أن الخوارزميات تتعامل مع عملية حل المشكلة، بينما تتعامل هياكل البيانات مع تخزين البيانات. في مجال تعلم الآلة، الخوارزميات وهياكل البيانات ضرورية لعدد من المهام، بما في ذلك: معالجة البيانات المسبقة، وتشمل تنظيف وتنسيق البيانات لكي يمكن استخدامها في نماذج التعلم الآلي. استخراج الميزات، ومن ضمنها تحديد واستخلاص أهم الميزات من البيانات. تدريب النماذج، كاستخدام الخوارزميات لتدريب نماذج التعلم الآلي. نشر النماذج، ويتضمن نشر نماذج التعلم الآلي في الإنتاج حتى يمكن استخدامها للتنبؤ. مهارات حل المشكلات أيضًا ضرورية في تعلم الآلة، وذلك لأن نماذج التعلم الآلي غالبًا ما تكون معقدة وصعبة التدريب، ومن أجل بناء نماذج ناجحة في تعلم الآلة، من المهم أن تتمكن من تحديد المشاكل وحلها بفعالية. وسأوضح لك بمثال: في التصنيف الآلي للصور. لنفترض أن لدينا مجموعة من الصور المصنّفة إلى فئتين: الكلاب والقطط. ونرغب في تطوير نموذج تعلم آلي قادر على التعرف على صور الكلاب والقطط بدقة. هنا كيف يمكن استخدام الخوارزميات وهياكل البيانات في هذا السياق: يتطلب ذلك استخدام خوارزميات وهياكل البيانات لتنظيف وتنسيق الصور، مثل تغيير حجم الصورة وتحويلها إلى تناظر رمادي، وتجميعها في بنية بيانات مناسبة مثل مصفوفة أو قائمة. يستخدم هنا خوارزميات استخراج الميزات لتحديد السمات الأكثر أهمية في الصور، مثل الأشكال الهندسية أو النقاط البارزة. هذه الميزات تساعد في تمثيل الصور بشكل مبسط ومعبر. تُستخدم الخوارزميات التعليمية مثل آلة الدعم القراري (SVM) أو الشبكات العصبية الاصطناعية (ANN) لتدريب نموذج التعلم الآلي على البيانات المعالجة والميزات المستخرجة، ويتضمن ذلك ضبط معلمات النموذج للحصول على أفضل أداء ممكن. بعد تدريب النموذج، تستطيع استخدام هياكل البيانات مثل الجداول أو الخرائط الهاش لتخزين النموذج والمعلومات الضرورية للتنبؤ بفئة الصورة المجهولة، واستخدام الخوارزميات للبحث والاستعلام عن الصور الجديدة وتطبيق النموذج لتصنيفها بناءً على الميزات المستخرجة.
×
×
  • أضف...