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

ياسر مسكين

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

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

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

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

    1

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

  1. أولا ولعمل ذلك يجب أن تقوم بتحديد منصة الإشعارات المناسبة لمشروعك مثلا يمكنك اختيار Firebase Cloud Messaging (FCM) لأنظمة Android أو Apple Push Notification Service (APNS) لأنظمة iOS. بعدها يجب أن تنشئ حساب على المنصة المختارة من أجل الحصول على الاعتمادات اللازمة لاستخدام خدمة الإشعارات. ثالثاً، قم بتحديد وتنفيذ آلية للحصول على رموز الجهاز (Device Tokens)، وهي المعرّفات التي تستخدم لإرسال الإشعارات إلى الأجهزة المستهدفة، بعدها تقوم بتخزينها في قاعدة بيانات التطبيق لتكون متاحة لإرسال الإشعارات عند الحاجة. ثم يأتي الدور لتطوير الخادم أو الوحدة البرمجية لإرسال الإشعارات، حيث يمكنك استخدام واجهات برمجة التطبيقات (APIs) المقدمة من المنصة التي قمت باختيارها مثلا لإرسال الإشعارات إلى رموز الجهاز المخزنة. وأخيرا، ومن أجل تحسين تجربة المستخدم، يمكنك جعل الإشعارات ذات صلة بالبضائع التي يهتم بها المستخدم، وجعلها قصيرة وسهلة الفهم، مع تحديد وقت مناسب لإرسالها، ومنح المستخدمين خيارا لإلغاء الاشتراك في استقبال الإشعارات إذا رغبوا في ذلك وهذا اختياري طبعا. يمكنك الاطلاع أكثر على هاته المصادر، أعتقد أنها ستفيدك: وهذا رابط سيوجهك إلى مستندات حزمة رسائل Firebase للتعمق أكثر فيها.
  2. صحيح أن جميع أنظمة التشغيل تفهم لغة الآلة، لكن تختلف طريقة تفاعلها مع التطبيقات لهذا لا تعمل بعض التطبيقات على جميع الأنظمة ومن بين الأسباب أن لكل نظام تشغيل واجهة برمجة تطبيقات (APIs) خاصة به، وهي مجموعة من التعليمات التي تسمح للتطبيقات بالتفاعل مع النظام. بحيث تختلف واجهات برمجة التطبيقات بين أنظمة التشغيل، مما يعني أن التطبيقات المصممة لنظام تشغيل معين قد لا تعمل على نظام آخر دون إعادة كتابة التعليمات البرمجية. ثاني سبب يتعلق ببنية النظام فتختلف أنظمة التشغيل في بنيتها الأساسية، مثل نوع المعالج ونظام الملفات وإدارة الذاكرة، لهذا قد تتطلب بعض التطبيقات بنية نظام محددة للعمل بشكل صحيح. كما قد تكتب بعض التطبيقات بلغات برمجة غير مدعومة من جميع أنظمة التشغيل، وقد يتطلب بعضها ميزات محددة موجودة في بعض أنظمة التشغيل دون غيرها، مثل معالج رسومي قوي أو ذاكرة وصول عشوائي كبيرة. كذلك نجد مسألة التوافق فقد لا تكون بعض التطبيقات متوافقة مع الإصدارات القديمة من أنظمة التشغيل. كما أنه قد يقرر مطور التطبيق تقييد توفر التطبيق على أنظمة تشغيل محددة لأسباب مختلفة، مثل رغبة التركيز على منصة معينة أو صعوبة تطوير التطبيق لأنظمة متعددة. لكن مع ذلك يمكن حل بعض مشكلات التوافق باستخدام برامج محاكاة أو أدوات ترجمة لغة البرمجة. وهذه بعض الأمثلة: لا تعمل تطبيقات iOS على Android والعكس صحيح. لا تعمل بعض ألعاب الكمبيوتر على أنظمة التشغيل المحمولة. لا تعمل بعض التطبيقات المصممة لأجهزة سطح المكتب على أجهزة Chromebook. يمكنك الاطلاع أكثر على هذه المصادر من هنا:
  3. يمكن تحديد الموقع الجغرافي لهاتف معين متصل بالإنترنت بشكل تقريبي في حالة ما إذا علم عنوان ال IP الخاص به. لكن لا يمكن تعقب الهاتف بشكل دقيق أو معرفة موقعه المباشر. يتم ذلك من خلال خدمات تحديد الموقع الجغرافي ويوجد منها العديد، وهي التي تسمح لك بإدخال عنوان IP وسيقومون بعرض موقع تقريبي على خريطة بناء على بيانات مزود خدمة الإنترنت (ISP). قد يستخدم المتسللون أدوات القرصنة للوصول إلى جهازك وتحديد موقعه بذات الطريقة. بالنسبة إن كان عنوان الIP ثابت أم متغير، فالعناوين هي كالتالي: عنوان IP ثابت: يتم تعيينه بشكل دائم لجهازك من قبل مزود خدمة الإنترنت (ISP). عنوان IP ديناميكي: يتم تغييره بشكل دوري من قبل مزود خدمة الإنترنت. يمكنك الاطلاع أكثر من هنا:
  4. لا، ليس كذلك، فالدالة ()sum في لغة بايثون يمكن استخدامها أيضا مع أنواع البيانات الأخرى مثل tuples و sets وحتى strings. ففي حالة الاستخدام مع القوائم، تقوم الدالة ()sum بجمع جميع القيم في القائمة. على سبيل المثال: arr = [1, 2, 3, 4, 5] total = sum(arr) print(total) # Output: 15 ومع ذلك، إذا كانت القائمة تحتوي على أنواع بيانات غير قابلة للجمع، فستحدث خطأ. بهذا الشكل: arr = [1, 2, 'a', 4, 5] total = sum(arr) # يؤدي إلى خطأ TypeError بشكل عام، يمكن استخدامها مع أي نوع من البيانات يتم دعمه للعملية الحسابية للجمع، وهذا يتضمن الأرقام وبعض أنواع البيانات الأخرى مثل الـ tuples التي تحتوي على أرقام.
  5. متى بالتحديد لا ندري، لكن قد تكون هنالك دروة في المستقبل، إلى حين ذلك توجد العديد من المقالات التي تتحدث عن برمجة الألعاب يمكنك تصفحها وقراءتها والاستفادة من المعلومات التي تحتويها من هنا: صناعة الألعاب ويمكنك أن تصبح مبرمج ألعاب من خلال تعلمك للغتي بايثون أو جافا سكريبت وتوجد مسارات لتعلم هاتين اللغتين في الأكاديمية، يمكنك تصفح هذه المقالة للفائدة:
  6. من الجيد ذلك، يمكنك بعد إكمالك لمسار تعلم قواعد البيانات، يمكنك التعرف أكثر على المعارف والمعلومات التي في مقالات الأكاديمية، من هنا: قواعد البيانات. أنت لست بحاجة لحفظ كل ما تعلمته، عوضا عن ذلك يمكنك الخوض في القيام بمشاريع برمجية سواء تلك التي هي موجودة في بقية المسارات التي ستتعلمها، أو مشاريع أخرى، وستجد نفسك تطبق ما تعلمته وتسترجع المفاهيم المختلفة التي مرّت عليك في الفيديوهات السابقة. وحينما تواجه مشكلة ما يمكنك تصفح التوثيقات الرسميةك توثيقات MySQL في حالة ما كنت تتعامل معها، وفي الغالب تجد المقالات تلخص كل شيء، يمكنك العودة لها في حالة ما احتجت لها: وفي حالة ما واجهتك أية مشكلة يمكنك ترك تعليق تحت فيديو الدورة أو المسار مباشرة.
  7. المشكلة التي تواجهك هي مشكلة SMTPAuthenticationError وهي تشير إلى أن اسم المستخدم وكلمة المرور التي قدمتها لبريدك الإلكتروني في ملف إعدادات Django الخاص بك غير صحيحة أو غير مصرح لها بإرسال الرسائل البريدية. لهذا تأكد من إدخال عنوان البريد الإلكتروني الصحيح وكلمة المرور لحساب Gmail الذي ترغب في استخدامه لإرسال الرسائل البريدية وسيحلّ المشكل. ويجب كذلك أن تقوم بتمكين الوصول للتطبيقات غير الآمنة في Gmail فقد قامت Google مؤخرا بتعطيل الوصول للتطبيقات غير الآمنة افتراضيا،لهذا الأمر ستحتاج إلى تمكينه لحساب Gmail الخاص بك لتكون قادرا على إرسال الرسائل البريدية من خلال Django. كما يمكنك التحقق عبر هذا الرابط من توثيق دجانغو Django email. صحيح، جوجل كانت قد قامت بإزالة ميزة الوصول إلى التطبيق الأقل أمانا، لكن يوجد حل بديل يمكنك تجربته، أولا: انتقل إلى ر حساب جوجل الخاص بك عبر هذا الرابط. ثم في قسم الأمان، انتقل إلى كلمة المرور التطبيق، مع التأكد من تفعيل التحقق الثنائي. ثم ثم قم بالذهاب إلى App Password هي موجودة في الصفحة الثانية، لكن يمكنك الوصول إليها من خلال البحث عنها في خانة البحث وستظهر لك مباشرة، ثم سيطلب منك اختيار التطبيق والجهاز الذي تريد توليد كلمة المرور التطبيق له، ثم قم بتعيينه على الموقع، وانقر على توليد. سيتم توليد كلمة مرور. ثم قم بنسخ هذه الكلمة المرور واستخدمها في إرسال الرسائل الإلكترونية.
  8. هذا الخطأ يحدث عادة عندما يكون هناك مشكلة في الحزمة المستوردة أو المصدرة في مشروع Node.js لهذا تأكد من أن ملف `package.json` مكون بشكل صحيح. يمكنك تجربة مسح ذاكرة التخزين المؤقت لـ npm بتشغيل الأمر التالي: npm cache clean --force حذف `node_modules` و `package-lock.json` لإجبار npm على إعادة تثبيت التبعيات من البداية من خلال هذين الأمرين: rm -rf node_modules rm package-lock.json بعدها يمكنك محاولة إعادة التثبيت بتشغيل: npm install كما أنصحك بتحديث كل من مدير الحزم npm و nodeJs: npm install -g npm@latest npm install -g node أو إذا كنت تستخدم yarn، يمكنك استخدام الأمر التالي: yarn global add npm yarn global add node
  9. العفو، بالطبع يمكنك ذلك، في حال كانت لديك المعرفة والخبرة اللازمة لذلك، بما أنك مبرمج بلغة PHP و Mysql يمكنك إنشاؤها وإدارة المشتركين وتخزين المعلومات، ولكن يجب أن تكون لديك وسيلة ما لجلب مفاتيح فك التشفير وإرسالها إلى المشتركين، يمكن ذلك من خلال: تطبيق نظام لجلب مفاتيح فك التشفير من موفر الخدمة الخاص بك، كاستخدام واجهة برمجة تطبيقات (API) التي ستتيح لك الاتصال بموفر الخدمة وجلب المفاتيح بشكل ديناميكي. ثم يمكنك تخزين هذه المفاتيح بمجرد جلبها بشكل آمن ومشفر داخل قاعدة بيانات MySQL. بعدها يمكنك إرسال المفاتيح للمشتركين عندك عبر تطبيق نظام خاص يتيح للمشتركين طلب هذه المفاتيح، هنا يمكنني أن أقترح عليك استخدام نظام الرسائل الإلكترونية المباشرة أو البريد الإلكتروني لإرسال المفاتيح بعد طلبها من قبل المشتركين. لكن كل هذا يجب أن يتم بعد التحقق من اشتراك المستخدمين قبل إرسال المفاتيح لهم، كالتحقق من صلاحية الاشتراك والهوية والدفعات.
  10. كل من الكود الأول والثاني يجب أن يعملا بنفس الطريقة، الفرق الوحيد هو أن الكود الثاني يخزن القيمة المشفرة لكلمة المرور في متغير مؤقت قبل تعيينها إلى this.password. في الكود الأول، يتم تعيين القيمة المشفرة مباشرة إلى this.password دون تخزينها في متغير مؤقت. إذا كان الكود الأول لا يعمل، فقد يكون هناك خطأ في مكان آخر في البرنامج كما قلت لك، يمكنك استخدام أدوات التصحيح في Visual Studio Code لتحديد المشكلة، أما بالنسبة للفرق فلا يمكن معرفة ذلك مباشرة دون اطلاع على مشروعك وفحصه. قم بوضع نقطة توقف في الكود الأول. شغل البرنامج في وضع التصحيح. عندما يتوقف البرنامج عند نقطة التوقف، قم بفحص قيمة this.password والقيم الأخرى المتعلقة. استمر في تنفيذ البرنامج خطوة بخطوة لرؤية ما يحدث. إذا لم تتمكن من تحديد المشكل أرفق لي ملفات المشروع كي أطلع عليها.
  11. الكود الأول والثاني متشابهان تماما في الوظائف التي يقومان بها، الفرق الوحيد هو في الكود الثاني، حيث يتم تخزين القيمة المشفرة لكلمة المرور في متغير مؤقت (hashedPassword) قبل تعيينها إلى this.password. أما في الكود الأول، فيتم تعيين القيمة المشفرة مباشرة إلى this.password دون تخزينها في متغير مؤقت. هذا الفرق لا يؤثر على النتيجة النهائية أو وظيفة الكود. فكلاهما سيقومان بتشفير كلمة المرور بنفس الطريقة. إذا كان الكود الأول لا يقوم بتشفير كلمة المرور، فقد يكون هناك خطأ في مكان آخر في البرنامج، ربما لو تقوم بإرفاق صور توضح المشكلة كي أجيبك بشكل أفضل.
  12. توزيع سيرفرات CCCAM أو الشيرنج يعتمد على نظام التشفير الشائع في عالم البث التلفزيوني عبر الأقمار الصناعية، حيث يتم تشفير القنوات ويتم فك تشفيرها عبر الاشتراك في خدمات مثل الشيرنج، بحيث تعتمد هذه اللوحات على استخدام لغات البرمجة مثل PHP و MySQL لإدارة وتوزيع المفاتيح وإدارة الاشتراكات كما أسلفت الذكر. عمل هذه اللوحات يتباين من خلال أولا تخزين المشتركين والباقات، بحيث يتم تخزين معلومات المشتركين في قاعدة البيانات مثل اسم المستخدم وكلمة المرور وتاريخ انتهاء الاشتراك والباقة التي يشتركون فيها. ثم تتم إدارة المفاتيح والقنوات المشفرة من خلال تخزين معلومات حولها وحول مفاتيح التشفير الخاصة بها في قاعدة البيانات. فعندما يشترك المستخدم في باقة معينة، يتم توليد مفتاح تشفير جديد ويتم توزيعه له ليتمكن من فتح القنوات ضمن تلك الباقة. ثم يتم إرسال المفتاح إلى رسيفر المشترك عبر الإنترنت. هذا كله لا بد أن يتم التحقق من صحة الاتصال بين رسيفر المشترك وسيرفر التوزيع لضمان أن الاتصال آمن ومشفر. وصحيح يتم استضافة سيرفر التوزيع على خوادم افتراضية (VPS) لضمان توافره على مدار الساعة واستقراره، كما أن الاستضافة على VPS توفر قدرة أكبر على التوسع وإدارة الموارد.
  13. أنت تقصد عملية تخطي الـ Captcha، يمكن تحقيقها من خلال العديد من الطرق، مثلا باستخدام سكريبت بايثون، لكن بداية أريد التوضيح بأنك ترغب في تخطي نظام أمان تفاعلي يميز بين البشر والبوتات وهذا أمر لا شكّ أنه غير قانوني، ففي العادة تقوم بعرض مهمات سهلة على المستخمين يمكن للبشر حلها بسهولة، بينما يصعب على البوتات القيام بذلك. لكن لغرض تثقيفي تعليمي يمكنني إجابتك، أولا باستخدام سكريبت بايثون أولا نقوم باستخدام مكتبات خاصة ستساعد على هذا الأمر ك: Selenium: للتحكم في متصفح الويب. Tesseract: التعرف على النص من الصور. OpenCV: معالجة الصور. بعدها ننجز خطوات كتابة سكريبت بايثون: استيراد المكتبات المطلوبة. فتح متصفح الويب باستخدام Selenium. نقوم بتحديد موقع عنصر ال Captcha. نقوم بالتقاط صورة لعنصر Captcha. ثم معالجة الصورة باستخدام OpenCV. استخدام Tesseract للتعرف على النص في الصورة. إدخال النص في حقل Captcha. إرسال النموذج. بهذا الشكل: from selenium import webdriver from tesseract import image_to_string import cv2 # فتح متصفح الويب driver = webdriver.Chrome() # تحميل صفحة الويب driver.get("https://example.com") # تحديد موقع عنصر Captcha captcha_element = driver.find_element_by_id("captcha") # التقاط صورة لعنصر Captcha captcha_image = captcha_element.screenshot_as_png # معالجة الصورة image = cv2.imread(captcha_image) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # التعرف على النص في الصورة text = image_to_string(gray) # إدخال النص في حقل Captcha captcha_input = driver.find_element_by_id("captcha_input") captcha_input.send_keys(text) # إرسال النموذج submit_button = driver.find_element_by_id("submit") submit_button.click() # إغلاق المتصفح driver.quit() لكن في حالة ما إذا كنت تواجه مشكلة مع رموز CAPTCHA وترغب في تخطيها لذات السبب، ينبغي عليك الاتصال بمشغل الموقع أو الخدمة للحصول على المساعدة. لأن استخدام أو تطوير أدوات لتجاوز الكابتشا يمكن أن يؤدي إلى إغلاق حسابات المستخدمين وحظر الآي بي الخاص بجهازك وقد يعرضط لمشاكل أمان أخرى.
  14. بالطبع، يمكنك استخدام مكتبة تاريخ ووقت جافا المعروفة ب (`java.time`) لتغيير التاريخ فهناك عدة طرق للقيام بذلك، مثلا يمكنك القيام به بهذا الشكل: import java.time.LocalDate; public class ChangeDateExample { public static void main(String[] args) { // الحصول على تاريخ اليوم الحالي LocalDate today = LocalDate.now(); System.out.println("تاريخ اليوم قبل التغيير: " + today); // تغيير تاريخ اليوم LocalDate newDate = today.withYear(2023).withMonth(9).withDayOfMonth(15); System.out.println("تاريخ اليوم بعد التغيير: " + newDate); } } فهنا قمت بتعريف تاريخ اليوم باستخدام `()LocalDate.now`، ثم قمت بتغيير التاريخ باستخدام دوال `()withYear()`، `withMonth`، و `()withDayOfMonth`. يمكنك تصفح هذا المصدر للمزيد من المعلومات:
  15. حسنا، بداية فال Print Spooler API هو واجهة برمجة التطبيقات التي يوفرها نظام التشغيل للتفاعل مع الطابعات وعمليات الطباعة، وتسمح هذه الواجهة بإضافة وإدارة الوظائف في طابعة معينة، والتحكم في الاعتبارات المطبوعة، ومراقبة حالة الطباعة، وتحديد الطابعة التي يجب استخدامها، وغير ذلك الكثير. لربط مشروعك به يمكنك استخدام لغة البرمجة التي تفضلها والتي تدعم استخدام هذه الواجهة، وبما أنك أشرت إلى استخدام Node.js فيمكنك البدء باالبحث عن وثائق الـ Print Spooler API المتوفرة لنظام التشغيل الذي تستخدمه (هذه الوثائق تحدد الوظائف والطرق المتاحة للتفاعل مع نظام الطباعة). ثم استخدام مكتبة Node.js للتفاعل مع الـ Print Spooler API مثل `child_process` لتشغيل الأوامر أو `edge` للتفاعل مع مكتبات الـ .NET الخاصة بـ Print Spooler API. يمكنك تنفيذ العمليات المطلوبة مثل إضافة وظائف طباعة، وإزالة وظائف، واستعراض حالة الطابعات، وما إلى ذلك. وبما أن عمليات الطباعة قد تأخذ وقتا، يمكنك متابعة استجابات الـ Print Spooler API واتخاذ الإجراءات المناسبة بناء على النتائج. لكن ستحتاج إلى الانتباه إلى الأمان عند التفاعل مع الـ API، حيث يجب التأكد من صحة وموثوقية البيانات المرسلة واستخدام الإجراءات الصحيحة لتفادي الهجمات أو المشاكل الأمنية المحتملة.
  16. جميل، أنصحك بمواصلة مسيرتك في التعلم وإكمال الدورة مع المدرب وإتمام المسارات الخاصة بها مع التطبيق المباشر، ستجد في نهاية الدورة مسارا خاصا بأساسيات هندسة البرمجيات أين يمكنك فهم ميكانيزمات هذا المجال، وستفهم حينها بأنه لا يمكن لديفن أن يستبدل وظيفة مهندسي البرمجيات، وأنه يمكن أن يكون مساعدا لهم. يمكنك تصفح هذه المقالات المفيدة والنقاش حولها: https://io.hsoub.com/tech/156918-أول-مهندس-برمجيات-مولد-بالذكاء-الاصطناعي-هل-سيحل-مكان-مهندسي-البرمجيات-أم-سيسهل-حياتهم
  17. الرابط لا يعمل فهو يظهر رسالة خطأ 404 وهنا قد يكون الرابط الذي قدمته خاطئا يمكنك التأكد من مراجعة الرابط بعناية وإصلاح أي أخطاء في الكتابة، ثم يمكنني مساعدتك.
  18. الذي جعل من ديفن مطوّرا خبيرا هو تزويده بأدوات البرمجة الخاصة به، فنجد أن لديه سطر أوامر ومحرّرا للشفرة ومتصفحا للويب، أي أنه يقوم بإدارة المهام وكتابة الأكواد وإصلاح المشاكل ويجمع المعلومات من الويب ويستكشف مختلف الموارد. حل المشاكل بشكل ذاتي اليوم بالنسبة للمهندسين يتطلب جهدا واستعانة بأدوات عدة، لكن ديفن في اختبار تم إجراؤه عليه واجه خطأ غير متوقع فلم يتراجع أو يستسلم وبدلا من ذلك أضاف بيانا للتصحيح وأعاد تشغيل الشفرة واستخدم سجلات الأخطاء لتشخيص المشكلة واصلاحها. أما بخصوص استبداله لوظيفة مهندسي البرمجيات فهذا برأيي أمر مستبعد وكلام مستهلك، فديفن ليس مشاركا في القيادة فهو بمثابة عامل برمجي اصطناعي بالكامل، لهذا يمكن لفرق الهندسة والتطوير تفويض المهام إليه، ممّا سيتيح للمهندسين البشر التركيز أكثر على الأعمال الإبداعية والابتكار وترك الأعمال الروتينية ل Devin.
  19. بما أن هذا هو قسم الأسئلة العامة، أرجو أن يتم طرح السؤال أسفل الفيديو في قسم الدورة المخصص بذلك، في قسم التعليقات. ليتم إجابتك بشكل واضح.
  20. Express.js و Next.js هما إطاري عمل مختلفان يتم استخدامهما لأغراض مختلفة في تطوير تطبيقات الويب، كما يمكن أن يعملا بشكل متكامل، لكن بشكل تفصيلي فإن Express.js يعتبر إطار عمل للجانب الخادم (backend) في تطبيقات الويب، كما يمكن استخدامه مع أي إطار عمل أمامي مثل React أو Angular أو Vue.js وهو مناسب لبناء تطبيقات ويب تقليدية التي تتطلب تنفيذ الخوارزميات والمنطق على الخادم. أما Next.js هو إطار عمل لكلا الجانبين أي الخادم والجانب العميل (server-side rendering) في تطبيقات رياكت بحيث يقدم جربة تطوير متقدمة لتطبيقات رياكت مع دعم للتقديم الديناميكي للصفحات كتوفيره لتقنيات مثل الإعادة التلقائية للصفحة (automatic page prefetching) والتقديم الثابت (static rendering) لتحسين أداء التطبيق. كما يمكن استخدام Next.js مع أو بدون Express.js لكونه يتيح لنا بناء خوادم متكاملة بشكل داخلي. يمكنك الاطلاع على المزيد من هنا:
  21. يمكنك استخدام مكتبة "Maatwebsite/Laravel-Excel" في Laravel لاستيراد ملف Excel وإنشاء المنتجات بناء على البيانات الموجودة في الملف. بداية، يمكنك أولا البدء في استرداد ملف إكسل في لارافل من خلال استخدام مكتبة maatwebsite/excel لرفع الملف عبر هذا الأمر: composer require maatwebsite/excel بعدها تقوم بإنشاء وسيط تحكم لاستقبال الملف: Route::post('/import-products', 'ProductController@import'); ثم تستطيع بعدها إعداد دالة التحكم وإضافة خاصية التحقق من أن الملف يحتوي على نفس أسماء الأعمدة مثل النموذج بالشكل التالي: public function import(Request $request) { $file = $request->file('file'); // التأكد من أن ملف إكسل يحتوي على نفس أسماء الأعمدة مثل نموذج Product. $validator = Validator::make($request->all(), [ 'file' => 'required|mimes:xlsx,xls', ]); if ($validator->fails()) { return back()->withErrors($validator); } $import = new Importer; $products = $import->import($file); // معالجة البيانات و إنشاء المنتجات... } لقراءة ملف إكسل نستخدم ()Excel::load: $excel = Excel::load($file); .للحصول على بيانات ورقة العمل نستخدم ()getSheetData: $data = $excel->getSheetData('products'); ونستخدم حلقة foreach للوصول إلى بيانات كل منتج مع التأكد من صحة البيانات: foreach ($data as $row) { // تأكد من صحة البيانات في ملف إكسل. $validator = Validator::make($row, [ 'name' => 'required|string', 'id' => 'required|integer', 'image' => 'required|string', 'quantity' => 'required|integer', ]); if ($validator->fails()) { continue; } $product = new Product; $product->name = $row['name']; $product->id = $row['id']; $product->image = $row['image']; $product->quantity = $row['quantity']; $product->save(); } ويمكنك تصفح هذه المصادر للاستفادة أكثر: وهنا نقاش حول تصدير البيانات للفائدة العامة:
  22. الأسئلة الاختبارية لا نجيب عنها، لكن يمكنني مساعدتك كي تبدأ، يمكنك البدء من خلال عمل مخطط Use Case أين يبدأ التصميم بتحديد الوظائف التي سيقوم بها المستخدمون في التطبيق، ويتم ذلك من خلال مخطط Use Case الذي يوضح أنواع المستخدمين والأنشطة التي يمكنهم القيام بها. على سبيل المثال: المستخدم يمكنه طلب توصيل. المستخدم يمكنه تتبع الطلبات الحالية. المستخدم يمكنه إلغاء طلب التوصيل. بعدها يمكنك من عمل مخطط Sequence وهو ضروري لوصف تفاعل المستخدم مع التطبيق وتفاعل التطبيق مع النظام أين يوضح هذا المخطط كيفية تبادل البيانات بين الأجزاء المختلفة في التطبيق، مثل تطبيق العميل ونظام الطلبات وموفري الخدمة. بعد ذلك، يتم إنشاء مخطط Class وهو أهم من ضروري لانشاء التطبيق أين تقوم فيه بتحديد الكائنات والعلاقات بينها في التطبيق يشمل ذلك تحديد الخصائص والأساليب لكل كائن وكيفية تفاعلها مع بعضها البعض. يمكن عمل مخطط State أيضا وذلك لوصف حالات الكائنات في التطبيق وكيفية تغيرها من حالة إلى أخرى بناء على الأحداث التي تحدث. ويمكنك تصميمها باستخدام أدوات رسم خاصة لتطبيقات تحرير النماذج مثل: drawio أو Visual Paradigm. يمكنك تصفح هذه المصادر القيمة أين ستفيدك كثيرا في مرحلة عمل مخططات UML:
  23. لعمل ذلك أولا يجب التسجيل في مركز المعلومات الوطني للحصول على مفتاح API الذي سيسمح لك بالوصول إلى بيانات المستخدمين عبر خدمة نفاذ ثانيا، إعداد موقع ووردبرس، من خلال تحميل وتثبيت إضافة (plugin) تتيح استخدام ال API في ووردبرس. ثالثا، ربط الخدمة بووردبرس من خلال إدخال مفتاح API الذي تحصلت عليه من مركز المعلومات الوطني في الإعدادات المناسبة في ووردبريس عادة ستجد هذا الخيار في قسم الإعدادات الخاص بالإضافة التي قمت بتثبيتها. رابعا، يمكنك استخدام ميزة إنشاء النماذج في ووردبريس أو إضافة نموذج تسجيل مستخدم جديد يدعم الاتصال بخدمة نفاذ وهنا يمكنك تصميم النموذج ليتضمن الحقول التي تريد جمع بياناتها من خدمة نفاذ مثل الاسم، رقم الجوال، والعنوان الوطني وما إلى ذلك. بعدها يمكنك برمجة النموذج للاتصال بخدمة نفاذ باستخدام الواجهة البرمجية (API) المقدمة، عبر استخدام مفتاح API الخاص بك للمصادقة وجلب بيانات المستخدم الجديد. وبعد استلام بيانات المستخدم الجديد من خدمة نفاذ، يمكنك استخدامها لإنشاء حساب جديد في موقعك التجاري، لكن يجب أولا التحقق من صحة البيانات المستلمة وتنسيقها بشكل مناسب قبل إدخالها في قاعدة البيانات لديك.
  24. لإضافة مكتبة SweetAlert2 يجب أن تبدأ بتضمينها في الصفحة، يمكنك القيام بذلك عن طريق إضافة الرابط إلى الـ `<head>` في قسم الهيدر: <head> <!-- مكتبة SweetAlert2 --> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script> </head> بعدها تقوم بتعديل رابط حذف الطالب في الجدول لاستدعاء دالة تقوم بعرض رسالة تأكيد باستخدام SweetAlert2. يجب أن يكون لديك سكربت خاص يقوم بإدارة عملية الحذف. بعدها تقوم بتغيير الرابط في الجدول إلى ما يلي: <td style="padding: 10px;"> <a href="#" class="btn-delete" onclick="confirmDelete(<?php echo $rows['id_std']; ?>)"> <span class="glyphicon glyphicon-trash"></span> حذف </a> </td> ثم تضيف السكربت التالي في الجزء السفلي من صفحتك لإنشاء دالة `()confirmDelete` التي تعرض رسالة تأكيد الحذف. <script> function confirmDelete(studentId) { Swal.fire({ title: 'هل أنت متأكد؟', text: "لن تتمكن من استعادة هذه البيانات!", icon: 'warning', showCancelButton: true, confirmButtonColor: '#3085d6', cancelButtonColor: '#d33', confirmButtonText: 'نعم, احذفها!' }).then((result) => { if (result.isConfirmed) { // إذا تم الضغط على زر التأكيد، يقوم بإعادة توجيه المستخدم إلى صفحة حذف الطالب window.location.href = 'delete-student.php?id=' + studentId; } }); } </script> وهذا الكود الكامل بعد التعديلات: <?php include('header.php'); ?> <!DOCTYPE html> <html lang="ar"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>عرض الطلاب</title> <!-- مكتبة SweetAlert2 --> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script> </head> <body> <div class="col-md-9 pan1"> <ol class="breadcrumb" style="background-color: #fff;padding-top:8px;padding-bottom:8px;color:#000;font-size:16px;"> <li>الطلبة</li> </ol> </div> </div> <div class="row"> <div class="col-md-9 pan1"> <div class="panel" style="color:#000;"> <div class="panel-body" style="font-size:14px; padding-left:40px;padding-right:40px;padding-bottom:25px;padding-top:25px;"> <p style="margin-bottom: 20px;"> <a class="btn-add" href="add-student.php"> إضافة <span class="ion-android-add"></span></a> </p> <?php // استدعاء البيانات من قاعدة البيانات if (!isset($_GET['page'])) { $page = 1; } else { $page = (int)$_GET['page']; } $post_at_page = 10; $query_post_count = mysqli_query($con, "SELECT * FROM `std_show_adm`"); $query_count = mysqli_num_rows($query_post_count); mysqli_free_result($query_post_count); $query_count = (int)ceil($query_count / $post_at_page); if (($page > $query_count) || ($page <= 0)) { echo '<div class="alert alert-danger" role="alert">خطأ لم يتم العثور على صفحة</div>'; echo '<meta http-equiv="refresh" content="2;url=student.php" />'; } $start = ($page - 1) * $post_at_page; $end = $post_at_page; $querypost = "SELECT * FROM std_show_adm ORDER BY id_std DESC LIMIT $start,$end"; $result = mysqli_query($con, $querypost); echo '<div class="table-responsive"> <table class="table table-bordered table-hover"> <tr> <td> رقم القيد </td> <td> أسم الطالب </td> <td> التخصص </td> <td> تعديل </td> <td> حذف </td> </tr>'; while ($rows = @mysqli_fetch_array($result)) { echo '<tr> <td>' . $rows['id_std'] . ' </td> <td>' . $rows['Name_std'] . '</td> <td>' . $rows['Name_dept'] . '</td> <td style="padding: 10px;"><a href="edit-student.php?id=' . $rows['id_std'] . '" class="btn-edit"><span class="glyphicon glyphicon-pencil"></span> تعديل </a></td> <td style="padding: 10px;"><a href="#" class="btn-delete" onclick="confirmDelete(' . $rows['id_std'] . ')"><span class="glyphicon glyphicon-trash"></span> حذف </a></td> </tr>'; } echo "</table>"; ?> <nav> <ul class="pager"> <li><a href="student.php?page=<?php echo ($page - 1); ?>" style="color:#000;">الصفحة السابقة</a></li> <li><a href="student.php?page=<?php echo ($page + 1); ?>" style="color:#000;">الصفحة التالية </a></li> </ul> </nav> </div> </div> </div> </div> </body> </html>
  25. إطار العمل TensorFlow يعتبر واحدا من الأطر الشهيرة والقوية في مجال تعلم الآلة والذكاء الاصطناعي ومن الممكن استخدامه من قبل المبتدئين، ولكن قد يكون هناك بعض التحديات للمبتدئين في التعامل معه بسبب مستوى تعقيده النسبي. فبما أنك مبتدئ في تعلم الآلة يمكنك البدء ببعض أطر العمل الأسهل منها للبدء بها وفهمها جيدا ك: Scikit-learn: هو إطار عمل بسيط وسهل الاستخدام لتعلم الآلة بحيث يوفر مجموعة واسعة من الخوارزميات المتوفرة ويسمح بتنفيذ العديد من العمليات الأساسية في تعلم الآلة بشكل سهل وسلس. Keras: ويعتبر Keras إطار عمل عالي المستوى يوفر واجهة برمجة التطبيقات (API) بسيطة وسهلة الاستخدام، ويمكن استخدامه لبناء النماذج بسرعة دون الحاجة إلى التعامل مع التفاصيل الداخلية للعمليات في TensorFlow. PyTorch: بالرغم من أنه يتطلب قليلا من المعرفة بالبرمجة، إلا أن PyTorch يعتبر أحد الأطر العمل الشهيرة والمناسبة للمبتدئين بحيث يتميز ببنية بسيطة ومرونة عالية، ويحظى بمجتمع نشط للمستخدمين والمساهمين. لذلك يمكنك البدء بإحدى هاته الأطر ومع مرور الوقت واكتساب المزيد من المهارات، يمكنك استكشاف وتعلم TensorFlow والاستفادة من قوته في تطبيقات تعلم الآلة والذكاء الاصطناعي، ويمكنك معرفة المزيد من المعلومات من خلال هذه المقالة:
×
×
  • أضف...