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

Mustafa Suleiman

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

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

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

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

    365

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

  1. في جامعة القاهرة، لم يكن هناك قسم خاص بالذكاء الإصطناعي، ولكن تم الموافقة على تغيير اسم الكلية إلى الحاسبات والذكاء الاصطناعي وتم إنشاء قسم لمجال الـ Ai في الكلية. وكل ما أنت بحاجة إليه لدخول ذلك القسم، هو الحصول على المجموع المناسب للكلية في سنة التنسيق الخاصة بك، ويجب أن تكون من شعبة علمي رياضة أو علوم ولكن مجموع الكلية يختلف وهو أقل بالنسبة لعلمي رياضة. ويمكنك التخصص في الذكاء الاصطناعي بدءًا من السنة الثالثة وأغلب المواد في الكلية هي باللغة الإنجليزية حيث أنها لغة البرمجة بالأساس. وجامعة الحاسبات والذكاء الاصطناعي شبه مجانية ولن تحتاج سوى دفع مصاريف الكلية فقط ويجب الإنتباه إلى أن نظام الكلية يعتمد على الساعات المعتمدة وبمجرد دخولك للجامعة ستفهم النظام ولا تشغل بالك به حاليًا لكنه يتطلب الإجتهاد حتى لا تدفع مصاريف أنت في غنى عنها بسبب الرسوب في بعض المواد. والمصاريف هي 8000 آلاف جنيه مصري سنويًا. أي حوال 750 جنيه للساعة المعتمدة الواحدة، وستدرس حلاص 4 سنوات 141 ساعة. والجدير بالذكر أن هناك كلية منفردة غير حاسبات وهي باسم الذكاء الاصطناعي وبداخلها 4 أقسام رئيسية «برمجة الآلة واسترجاع المعلومات، تكنولوجيا أنظمة الشبكات المدمجة، الروبوتات والآلات الذكية، علوم البيانات». وتعمل بنظام الساعات المعتمدة أيضًا وبنفس المصاريف تقريبًا، ولكن هناك قسم خاص بتكلفة 20 ألف جنيه مصري. والأسعار قد تتغير لذلك عليك بالسؤال من داخل الجامعة للتأكد. وتتواجد كلية الذكاء الاصطناعي في عدة جامعات حكومية وهي: جامعة القاهرة جامعة طنطا جامعة حلوان جامعة الزقازيق جامعة كفر الشيخ جامعة بنها جامعة المنوفية جامعة دمنهور جامعة الأقصر وأنصحك بالبحث بالتالي " كلية الحاسبات و الذكاء الاصطناعي" على اليوتيوب وستجد شرح للكلية ونصائح.
  2. تتم عملية نقل الصوت والفيديو في تطبيقات المحادثة مثل الواتساب عبر استخدام تقنية Protocol (IP)، وتتضمن هذه التقنية تحويل الصوت والفيديو إلى تنسيق رقمي يمكن نقله عبر الانترنت، وذلك باستخدام تقنيات الضغط والتشفير لتحسين جودة الصوت والفيديو وتأمينه. وعندما يرسل أحد المستخدمين مقطع فيديو أو صوت عبر التطبيق، يتم تحويله إلى تنسيق رقمي و تقسيمه إلى عدة حزم صغيرة، و إرسال هذه الحزم عبر الانترنت إلى المستلم. وبعد ذلك، جمع هذه الحزم مرة أخرى وتحويلها إلى مقطع فيديو أو صوت وعرضها أو تشغيلها على جهاز المستلم. ويستخدم كل من Protocol (IP) و WebRTC في تطبيقات المحادثة ونقل الصوت والفيديو. Protocol (IP) كبروتوكول رئيسي لنقل البيانات عبر الإنترنت بشكل عام، ويعتمد على تجزئة البيانات إلى حزم ونقلها من خلال الشبكة. ويستخدم في تطبيقات المحادثة كأساس لنقل الصوت والفيديو من جهاز المرسل إلى جهاز المستقبل. أما WebRTC فهو تقنية حديثة ومفتوحة المصدر تم تطويرها خصيصاً لنقل الصوت والفيديو والبيانات الحية في الوقت الحقيقي عبر الإنترنت. ويتضمن WebRTC بروتوكولات مخصصة للصوت والفيديو والشات وتقنيات الضغط والتشفير وغيرها لتحسين جودة الاتصال وتأمينه. ويستخدم WebRTC في العديد من تطبيقات المحادثة عبر الإنترنت والتطبيقات الأخرى التي تحتاج إلى نقل الصوت والفيديو عبر الإنترنت بشكل سريع وآمن. وتستطيع إنشاء تطبيق محادثة صوتية باستخدام بايثون باستخدام بعض المكتبات المتاحة، مثل: PyAudio: مكتبة بايثون للعمل مع الصوت، وتتيح لك إمكانية تسجيل وتشغيل الصوت على نظام التشغيل الخاص بك. Socket: مكتبة بايثون للتواصل بين العملاء والخوادم باستخدام TCP/IP. PyQT: مكتبة بايثون لإنشاء واجهات المستخدم الرسومية (GUI)، والتي يمكن استخدامها لإنشاء واجهة المستخدم لتطبيق المحادثة الصوتية. ومن الخطوات التي يمكن اتباعها لإنشاء تطبيق محادثة صوتية باستخدام بايثون: تسجيل الصوت باستخدام مكتبة PyAudio. إنشاء واجهة المستخدم باستخدام مكتبة PyQT. التواصل بين العميل والخادم باستخدام مكتبة Socket. نقل بيانات الصوت بين العميل والخادم عبر الاتصال الشبكي باستخدام بروتوكولات الإنترنت مثل TCP/IP أو UDP. تشفير وفك تشفير الصوت باستخدام تقنيات التشفير المناسبة. تشغيل الصوت على العميل باستخدام مكتبة PyAudio. إنشاء موقع يتضمن مقاطع فيديو أو صوت تستطيع استخدام لغة البايثون في إنشاء موقع مثل هذا، بالإضافة إلى العديد من التقنيات الأخرى مثل HTML وCSS وJavaScript و Django framework لإدارة الموقع. وإليك مثال، أنت قمت بإنشاء مشروع دجانغو، عليك بفعل التالي: تحديد نموذج Django الذي سيستخدم لتمثيل الفيديو أو الصوت. يمكن إنشاء نموذج بسيط كالتالي: from django.db import models class Video(models.Model): title = models.CharField(max_length=200) video_file = models.FileField(upload_to='videos/') حيث تم تحديد نموذج Video الذي يحتوي على اسم الفيديو وملف الفيديو. بعد تحديد نموذج الفيديو، يجب إنشاء عرض (View) Django الذي يعرض الفيديو. وتستطيع إنشاء عرض بسيط باستخدام الكود التالي: from django.shortcuts import render def video(request, video_id): video = Video.objects.get(id=video_id) return render(request, 'video.html', {'video': video}) يتم تحديد العرض "video" الذي يستخدم نموذج Video ويسترد الفيديو الذي يحمل نفس معرف video_id. ويجب إنشاء قالب (Template) Django الذي يستخدم لعرض الفيديو. حيث تستطيع إنشاء قالب بسيط باستخدام HTML و Django Template Language، و استخدام HTML5 Video Tag لعرض الفيديو. <html> <head> <title>{{ video.title }}</title> </head> <body> <h1>{{ video.title }}</h1> <video controls> <source src="{{ video.video_file.url }}" type="video/mp4"> </video> </body> </html وهناك العديد من المكتبات التي يمكن استخدامها مع Django لإضافة الوسائط مثل الفيديو والصوت والصور. بالنسبة للفيديو والصوت، تستطيع استخدام مكتبات مثل Django-ffmpeg و Django-Video-Encoder لمعالجة وتشفير الوسائط المتحركة. أيضًا يمكن استخدام مكتبات مثل Pillow و Django-imagekit لمعالجة الصور. وهناك مكتبات JavaScript مثل Plyr و Video.js و WaveSurfer.js لتشغيل الفيديو والصوت وتحريرهم في صفحات الويب.
  3. للإجابة على ذلك يجب ذكر مثال لوصف وظيفة خاصة بمطور بايثون حيث ستجد وصف مشابه له على مواقع التوظيف مثل LinkedIn: معرفة عميقة بلغة بايثون وقدرة على استخدامها لبناء تطبيقات ويب. خبرة في استخدام إطار عمل مثل Django أو Flask لبناء واجهات المستخدم الخلفية. معرفة باستخدام مكتبات ORM للتعامل مع قواعد البيانات (مثل PostgreSQL أو MySQL) وقدرة على دمج مصادر بيانات متعددة. فهم جيد للمتعددات المتزامنة وكيفية التعامل معها بكفاءة في بايثون، أي كتابة أكواد بايثون تعمل على معالجة عدة مهام في نفس الوقت. خبرة في استخدام محركات قوالب مثل Jinja2 لإنشاء صفحات ديناميكية. فهم أساسي لـ HTML, CSS, و JavaScript لبناء واجهات مستخدم جذابة. معرفة بمبادئ الأمان، المصادقة، والتفويض. فهم المبادئ التصميمية الجيدة لبناء تطبيقات قابلة للتطوير والصيانة. خبرة في استخدام مكتبات لمعالجة الأحداث التي تسمح بتنفيذ أكواد معينة عند حدوث أحداث محددة. قدرة على بناء تطبيقات تعمل بكفاءة على منصات متعددة (جوال، سطح مكتب). القدرة على تصميم قواعد بيانات فعالة تلبي احتياجات العمل. مهارات قوية في اختبار الوحدات وتصحيح الأخطاء. خبرة في استخدام أدوات مثل Git لإدارة إصدارات الكود. ونظرًا إلى ما سبق أنت ستتعلم في الدورة التالي: الأسس البرمجية السليمة عبر لغة Python التعامل مع مختلف صيغ الملفات مثل إكسل Excel وورد Word وخدمات المستندات السحابية استخراج البيانات من صفحات الويب Web Scraping وتحليلها أساسيات التعامل مع قواعد البيانات عبر بايثون، والتعامل مع البريد الإلكتروني لإرسال الرسائل أساسيات إطار العمل جانغو Django بناء تطبيق إدارة المهام باستخدام إطار العمل جانغو Django تطوير متجر إلكتروني متكامل باستخدام إطار العمل جانغو Django وربطه مع وسائل الدفع باي بال PayPal وسترايب Stripe أساسيات إطار العمل فلاسك Flask، وبناء مدونة بسيطة تطوير تطبيقات أودو Odoo تطوير واجهة برمجية API اعتمادًا على نمط RESTful لمعالجة الصور وبالتالي أنت قد ألممت بجزء كبير من وصف الوظيفة، وتحتاج فقط إلى تعلم أساسيات تقنيات الواجهة الأمامية، مثل JavaScript و HTML5 و CSS3. وبالنسبة لطريقة التعلم المناسبة فأرجو منك قراءة النقاش التالي وقراءة النقاشات التي إرفاقها بداخله:
  4. وهناك وجهات نظر مختلفة، لكن في رأي الاستيعاب والحفظ مهمان في بداية التعلم، فالاستيعاب وحده لا يكفي، والتطبيق العملي يقوم بتثبيت ذلك الاستيعاب والحفظ بنسبة أكبر، وبعد ذلك لو نسيت بعض الأمور لا مشكلة وليس جميعها بالطبع فالأساسيات لا يفترض أن تنساها، ومع التكرار ستترسخ لديك الأمور التي أنت بحاجة بشكل متكرر في المشاريع. بعد ذلك في البرمجة لن يفيدك الحفظ في شيء، ولا يوجد مبرمج محترف يتذكر كافة ما تعلمه بل يعلم كيف يقوم ببناء المشروع باستخدام الأداة المناسبة، أي يعلم أن اللغة تلك تمتلك الأدوات اللازمة وذلك الإطار هو المناسب للمشروع الخاص بي، وبالطبع هو يحفظ الأساسيات لكونه قام بمشاريع بتلك اللغات والأدوات من قبل. ثم يتذكر ما يريده من خلال البحث وقراءة المستندات، مثلاً يتذكر أنه يمكنه تنفيذ ما يريد من خلال دالة معينة لكنه لا يتذكر طريقة استخدامها أو كتابتها، وبالتالي يقوم بالبحث والقراءة ومع الوقت ستتذكر كل ما يخص عملك اليومي. والباقي عليك بالبحث عنه والقراءة، أو البحث باسم how to تنفيذ شيء معين وهكذا. أي عليك بفهم الأساسيات وفهم الكود جيدًا، فذلك ما سيمكنك من تعلم كل ما تريد، والبعض يمل من بطيء عملية التعلم في البداية، ولكن لا يعلم أنه بذلك سيصعب من عملية تعلمه أي شيء جديد مستقبلاً وسيخاف من أي شيء جديد يظهر أمامه لم يراه من قبل. وبخصوص طريقة التعلم المناسبة قد تم التطرق إلى ذلك بالتفصيل في النقاش التالي:
  5. في البداية حزمة "phpdotenv" هي حزمة تساعد على تحميل متغيرات البيئة في تطبيق PHP. وما يقصد بهذا هو أن الحزمة تسمح لك بتخزين متغيرات التكوين والبيانات الحساسة مثل المفاتيح وكلمات المرور ومعلومات الاتصال بقاعدة البيانات وغيرها، داخل ملف نصي محلي يسمى ".env" بدلاً من تضمينها مباشرةً في رمز البرنامج. وهذا يعني أنك لن تحتاج إلى مشاركة هذه المعلومات في الكود ولا يتعين عليك التعامل مع المشاكل المحتملة في الأمان الذي يمكن أن ينشأ عند نشر البرنامج. فيما يلي بعض الفوائد الرئيسية لاستخدام حزمة "phpdotenv": 1- تحسين أمان التطبيق عند استخدام متغيرات البيئة لتخزين المعلومات الحساسة، يتم حمايتها من الوصول غير المصرح به والاحتفاظ بها بشكل آمن خارج رمز التطبيق. 2- التبسيط يمكن للحزمة تبسيط عملية إعداد التطبيق وتحديد المتغيرات المطلوبة في ملف واحد، بدلاً من تعيينها بشكل منفصل في رمز التطبيق. 3- المرونة تستطيع استخدام متغيرات البيئة لتكوين العديد من جوانب التطبيق المختلفة، مثل إعدادات البريد الإلكتروني وإعدادات قاعدة البيانات وتكوينات مزود الخدمة وغيرها. 4- الإدارة يمكن للمطورين تغيير قيم متغيرات البيئة دون الحاجة إلى تعديل رمز التطبيق بشكل مباشر، مما يجعل الإدارة والتحكم أسهل. لتوضيح كيفية استخدام حزمة "phpdotenv"، إليك مثال بسيط لتكوين متغيرات البيئة لتطبيق PHP. حيث سنقوم بتخزين المعلومات الحساسة المتعلقة بقاعدة البيانات، مثل اسم المستخدم وكلمة المرور واسم قاعدة البيانات، في ملف .env الموجود في الجذر الرئيسي لتطبيق PHP. ثم استخدام الحزمة لتحميل هذه المتغيرات واستخدامها في الرمز الخاص بالتطبيق. 1- عليك بتثبيت حزمة "phpdotenv" باستخدام مدير حزم Composer: composer require vlucas/phpdotenv 2- إنشاء ملف .env وتحديد المتغيرات المطلوبة وقيمها، مثال لملف .env: DB_HOST=localhost DB_DATABASE=mydatabase DB_USERNAME=myuser DB_PASSWORD=mypassword 3- استخدام الحزمة في الكود: require __DIR__ . '/vendor/autoload.php'; $dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv->load(); $host = $_ENV['DB_HOST']; $database = $_ENV['DB_DATABASE']; $username = $_ENV['DB_USERNAME']; $password = $_ENV['DB_PASSWORD']; // استخدم المتغيرات للإتصال بقاعدة البيانات تعمل الحزمة على تحميل قيم متغيرات البيئة من ملف .env وإضافتها كمتغيرات PHP للتطبيق، وتستطيع استخدام هذه المتغيرات في الكود.
  6. دورة تطوير واجهات المستخدم تعتبر مكملة لدورة تطوير التطبيقات باستخدام لغة JavaScript حيث ستتعلمي كيف يتم تصميم وبناء واجهة المستخدم وذلك باستخدام اللغات الأساسية وهم HTML, CSS, JavaScript بالإضافة إلى استخدام أحدث أدوات التطوير: Bootstrap, jQuery, Sass, Gulp. وهي لا غنى عنا إذا كنتي تريدي أن تتخصي في مجال الواجهة الأمامية front-end وبعد الإنتهاء منها سيتعين عليك استكمال مسار الـ front-end وذلك بتعلم مكتبة React.js فبدونها لا يمكن العمل بشكل إحترافي في سوق العمل كمطور واجهات أمامية. وفي دورة تطوير التطبيقات باستخدام لغة JavaScript ستتعلمي مكتبة React.js بالإضافة إلى بيئة العمل Node.js الخاصة بالواجهة الخلفية والتي تعتمد على جافاسكريبت كلغة لها، ناهيك عن إطار العمل Next.js الذي لاغنى عنه لتتمكني من تنفيذ Server-side Rendering أي تصيير من جهة الخادم. وكل ما سبق سيؤهلك لتصبحي مطورة Full stack أي قادرة على القيام بمهام الواجهة الأمامية والخلفية معًا، وإذا أردتي التخصص في الواجهة الأمامية فقط، فيكفيك تعلم React.js فقط، رغم أني لا أنصحك بذلك وعليك بتعلم Node.js لتتمكني من الحصول على وظيفة في السنة الأولى لك بعد الإنتهاء من الدورة. وإذا قمت بتعلم React.js فقط، فستحتاجي إلى بعض الوقت لاكتساب الخبرة وبعدها سيتم قبولك في الوظائف، ولذلك أخبرتك بتعلم Node.js لتفادي تلك المشكلة، وإذا كان لديك الوقت فتعلمي React.js فقط واجتهدي في بناء المشاريع لاكتساب الخبرة. ولزيادة مهاراتك عليك بتعلم Next.js بعد تعلم Node.js، وذلك ما سيتم شرحه خلال الدورة وأيضًا التطبيق من خلال بناء مشاريع لوضعها في معرض أعمالك. والقرار لك في تعلم ما تريدين. ويتوفر في الدورة أيضًا شرح مكتبتي React Native و Expo لتطوير تطبيقات الهاتف المحمول، بالإضافة إلى إنشاء تطبيقات سطح مكتب باستخدام JavaScript باستخدام إطار العمل Electron.js. وبذلك ستصبحي قادرة على القيام بأي شيء تريدينه وذلك باستخدام لغة جافاسكريبت فقط، وهو أمر رائع عند العمل على مواقع العمل الحر أو عند التقدم للوظائف حيث ستتملكي الأفضلية بالتأكيد في حال كنتي متمكنة من الأساسيات الخاصة بالتنقيات التي ذكرتها وطبقتي على المشاريع المتاحة في الدورة. وكل ما سبق يندرج تحت مسمى MERN Stack وقد تم شرح الأمر هنا: ما هو MERN Stack ؟ لذلك عليك بالإختيار ما بين أن تصبحي مطورة Fron-End فقط أو مطورة Full stack، ولمساعدتك في إتخاذ القرار تصفحي الوظائف على LinkedIn وتفقدي ماهي المهارات المطلوبة بالنسبة لمستوى Entry Level أو Junior وتعلمي تلك المهارات من خلال الدورتين. وأيضًا أنصحك بقراءة النقاشات التالية:
  7. بخصوص تعارض الحزم فهى تحدث عندما يتعارض تثبيت حزمتين أو أكثر في نفس المشروع، وهذا النوع من المشاكل قد يؤدي إلى توقف تشغيل التطبيق بالكامل أو إلى أخطاء في وظائف محددة من التطبيق. ولحل مشكلة تعارض الحزم، يجب القيام بعدة خطوات: الخطوة الأولى هي تحديد الحزم التي تسبب التعارض والتأكد من أنها تستخدم إصدارًا متوافقًا مع الحزم الأخرى التي يعتمد عليها التطبيق. يمكن تحديد الحزم المتعارضة باستخدام أدوات إدارة الحزم مثل npm-check و npm ls. npm-check و npm ls هما أوامر في واجهة سطر الأوامر لإدارة حزم npm والتحقق من حالة الحزم المثبتة في المشروع وتحديد التعارضات. فالأمر npm-check يقوم بإظهار حالة الحزم المثبتة ويسمح بتحديد الحزم التي تحتاج إلى التحديث أو حذفها. أما الأمر npm ls فيقوم بإظهار قائمة بكافة الحزم المثبتة بما فيها الإصدارات والتعليقات والتبعيات بين الحزم لتحديد التعارضات. الخطوة التالية هي تحديد الخطأ الذي يتم إصداره من التطبيق عند تشغيله، وهذا يتطلب فحص ملفات السجلات أو استخدام أدوات تصحيح الأخطاء مثل debugger أو console.log. بعد تحديد الحزم المتعارضة والخطأ الناتج عنه، يمكن اتخاذ إحدى الخطوات التالية: تحديث إصدارات الحزم المتعارضة إلى إصدارات متوافقة مع بعضها البعض. حذف الحزم المتعارضة واستخدام حزم بديلة. إجراء التغييرات اللازمة في التطبيق لتجنب تعارض الحزم، وهذا يمكن أن يتطلب تغيير كود التطبيق. والحل الأسهل هو استخدام الأمر npm install --legacy-peer-deps لحل مشكلة تعارض الحزم، فهو يستخدم خيار --legacy-peer-deps لتمكين npm من تثبيت الحزم المتعارضة كما كان يفعل في إصدارات سابقة، حيث تم تغيير سلوكية تثبيت الحزم المتعارضة في إصدارات npm الأحدث. ومع ذلك، ينبغي استخدام هذا الأمر بحذر، حيث أنه يمكن أن يؤدي إلى تثبيت إصدارات قديمة من الحزم وهذا قد يؤدي إلى مشاكل أخرى، أي الأفضل هو استخدام حزم متوافقة، لكن في حال كنت تعمل على مشروع للتدريب أو تعلم تقنية جديدة فلا مشكلة في استخدامه.
  8. الهكر الأخلاقي هو شخص يستخدم مهارات الحوسبة والبرمجة وأمن المعلومات لاختبار نظام الأمان والحماية للأنظمة والشبكات والتطبيقات والمواقع. ويعمل الهكر الأخلاقي على اختبار النظام للبحث عن الثغرات والاختراقات والتحقق من أن النظام آمن بشكل كافي، من خلال الإعتماد على المعرفة والخبرة في مجال البرمجة وأمن المعلومات والتعامل مع الأدوات اللازمة لاختبار النظام. ونظام لينكس هو نظام تشغيل يستخدم على نطاق واسع في أمن المعلومات بسبب مزاياه الأمنية المتقدمة، والتي تجعله مناسبًا للغاية لأغراض الاختبار والاختراق الأخلاقي. ومع ذلك، تستطيع استخدام أنظمة تشغيل أخرى مثل نظام التشغيل Mac لأغراض الاختبار والاختراق الأخلاقي. وفيروسات الحاسوب هي برامج ضارة تتسبب في إتلاف بيانات المستخدم أو إعاقة عمل النظام، وتختلف فيروسات الحاسوب من حيث الشكل والتصميم ولكنها تتألف من برامج مكتوبة بلغة برمجة معينة. ومنعًا للتكرار، قد تم التطرق بالتفصيل حول سؤالك في النقاشات التالية:
  9. في البداية لا تشغل بالك كثيرًا، حيث سيخطر في بالك 1000 سؤال وسؤال وما عليك سوى البدء بتعلم البرمجة وستجد أن الكثير من الأسئلة قد تم الإجابة عليها وستعرف الطريق بمفردك. فالأمر أشبه بشخص غريب عن المنطقة ويسأل عن الطريق، وكان بإمكانه التجول قليلاً في المنطقة واستكشافها وسيجد الطريق بلا شك بدلاً من الإنتظار وسؤال كل شخص عن طريق. وأنا لا أقصد ألا تسأل بل لا تتردد في السؤال، لكن أنصحك بالبدء وعدم الاسترسال في الأسئلة التي لن تفيدك بأي شيء، فكل ما تحتاجه هو إختيار مسار برمجي يوفر لك الأساسيات لتقف على أرض صلبة، ثم تعلم المسار البرمجي الذي إخترته مثل الويب أو تطبيقات الهاتف. وعود نفسك أن تركز في الحاضر والمستقبل القريب مع التخطيط للمستقبل البعيد، ولكن لا تشغل بالك بالمستقبل البعيد فتفشل في تحقيق ما تريده في حاضرك ومستقبلك القريب. وبخصوص سعر الدورة فهو ثابت بتكلفة 290 دولار لكل دورة وأنصحك بقراءة كل حرف في النقاش التالي والأسئلة التي تم إرفاقها به: وإذا أردت نصيحتي فالأفضل لك هو دورة علوم الحاسوب في البداية: وبعد تعلم الأساسيات والتي منها أساسيات لغة جافاسكريبت عليك بتعلم دورة تطوير تطبيقات الويب باستخدام لغة PHP:
  10. إذا كنت تستخدم خادم ويب Apache على نظام ويندوز، فتستطيع فتح ملف httpd.conf الرئيسي وإضافة الأسطر التالية: <Directory "C:/Apache24/htdocs"> AllowOverride All Require all granted Allow from 127.0.0.1 Allow from ::1 </Directory>
  11. في البداية الخطأ الذي تواجهه يحدث عند استخدام String بدلاً من Map<String, dynamic>، والسبب في الخطأ هو أنَّ قيمة "ImageTopic" في الكود الخاص بك ليست في صيغة JSON صحيحة. حاول التأكد من أن جميع القيم الموجودة في حقل "ImageTopic" تم تخزينها بصيغة JSON صحيحة، أيضًا التأكد من أن موديل "ImageTopicModel" يتوافق مع القيم الموجودة في "ImageTopic". ولتحديد الخطأ بشكل أدق، تستطيع تحويل الـ Map<String, dynamic> إلى String باستخدام JSON.encode() ومن ثم استخدام print() لطباعة الناتج، وهذا يمكن أن يساعد في تحديد ما إذا كانت البيانات الموجودة في حقل "ImageTopic" تتوافق مع JSON صحيح أم لا. استخدم الكود التالي لتحويل الـ Map<String, dynamic> إلى String: final jsonString = json.encode(myMap); ولتحويل الـ String إلى Map<String, dynamic> استخدام هذا الكود: final myMap = json.decode(jsonString); وأيضًا حاول تغيير هذا السطر في الكود: List<dynamic> myArray = querySnapshot.docs.first.get('ImageTopic') ?? []; إلى هذا الشكل: List<dynamic> myArray = List<Map<String, dynamic>>.from(querySnapshot.docs.first.get('ImageTopic') ?? []); هذا التغيير سيحول النوع المسترجع من البيانات إلى List<Map<String, dynamic>> والذي يمكن استخدامه في الخطوة التالية من تحويل العناصر إلى قائمة من Model objects. وبعد ذلك، يجب تحديث تابع fromJson() في ImageTopicModel ليتعامل مع Map<String, dynamic> بدلاً من String. استخدام الكود التالي كنموذج للتحديث: factory ImageTopicModel.fromJson(Map<String, dynamic> json) { return ImageTopicModel( imageTopic: json['imageTopic'], ); }
  12. لطباعة متغير PHP داخل صفحة HTML، يجب استخدام علامة الإغلاق للـ PHP "<?php ?>" وذلك لوضع كود PHP داخل الصفحة HTML، وبعد ذلك بإمكانك استخدام الإخراج echo لعرض قيمة المتغير. <?php $userName = 'Belal'; ?> <h1> Welcome <?php echo $userName; ?> </h1> سيظهر لك رسالة "Welcome Belal" وستكون قيمة المتغير $userName قد تم عرضها داخل عنصر العنوان. وهناك طريقة أخرى لطباعة المتغيرات في صفحة HTML باستخدام دالة sprintf() في PHP. ستحتاج إلى تعريف نص العنوان كنص قالب مع علامات %s تمثل مكان وضع قيمة المتغير، ومن ثم يمكن استخدام دالة sprintf() لوضع قيمة المتغير في النص القالب. <?php $userName = 'Belal'; $title = sprintf('Welcome %s', $userName); ?> <h1> <?php echo $title; ?> </h1> سيتم طباعة "Welcome Belal" وعرض قيمة المتغير $userName داخل العنوان باستخدام دالة sprintf(). وإليك طريقة أخرى، لطباعة المتغيرات في صفحة HTML باستخدام قوسين مربعين "[ ]" للإشارة إلى المتغير داخل النص. <?php $userName = 'Belal'; ?> <h1> Welcome [<?= $userName ?>] </h1> ستظهر الصفحة بعد ذلك برسالة ترحيب "Welcome [Belal]" وسيتم عرض قيمة المتغير $userName داخل العنوان بين قوسين مربعين.
  13. أسهل طريقة هي بتحميل أخر إصدر من VScode ثم عليك بتفعيل الخيارات التالية كما في الصورة:
  14. حاول استخدام الدالة withCount() بدلاً من الدالة with() للعلاقة ratings. $users = User::withCount('ratings') ->orderByDesc(function ($user) { return $user->ratings->avg('stars'); }) ->get();
  15. في حال أنك تريد ترتيب النتائج حسب المتوسط الأعلى، فتستطيع تحديث الاستعلام لاستخدام الدالة orderByDesc() على نتائج الدالة average() بدلاً من عدد التقييمات. $users = User::with('ratings') ->withCount('ratings') ->orderByDesc(function ($user) { return $user->ratings->avg('stars'); }) ->get(); تستخدم الدالة avg() هنا لحساب المتوسط عن طريق الاستعانة بالعلاقة ratings في نموذج المستخدم. ثم الإعتماد على orderByDesc() لترتيب النتائج بترتيب تنازلي وفقًا لنتائج الدالة avg() للتقييمات. بهذه الطريقة ، ستظهر النتائج بترتيب تنازلي وفقًا للمتوسط الأعلى لتقييمات المستخدمين. لاحظ أني قمت بإضافة with('ratings') لجلب بيانات التقييمات مع كل مستخدم ، ولذلك يجب التأكد من استخدام الاسم الصحيح للعلاقة بين الجدولين في نموذج المستخدم الخاص بك.
  16. من خلال الدالة orderBy() في Laravel لترتيب البيانات تصاعديًا أو تنازليًا وفقًا لنتائج الدالة average() التي تم إنشاؤها، وتستطيع تحقيق ذلك بسهولة عن طريق إضافة السطر التالي إلى استعلام قاعدة البيانات الخاص بك: $users = User::withCount('ratings')->orderByDesc('ratings_count')->get(); وتستخدم withCount() لحساب عدد التقييمات لكل مستخدم ، و orderByDesc() لترتيب النتائج بترتيب تنازلي وفقًا لعدد التقييمات. بالتالي، سيكون أولئك الذين لديهم المزيد من التقييمات في الأعلى وسيتم ترتيبهم بشكل تنازلي. وإذا كنت تريد ترتيبهم تصاعديًا ، فتستطيع استخدام orderBy() بدلاً من orderByDesc(). $users = User::withCount('ratings')->orderBy('ratings_count')->get(); وتأكد من استبدال ratings بالاسم الصحيح للعلاقة بين الجدولين في نموذج المستخدم الخاص بك.
  17. بالطبع أنتي بحاجة إليها ولكن الدورة بمفردها ليست السبيل لتصبحي محترفة في البرمجة، حيث أنها تقدم لك أساسيات علوم الحاسب فقط وتضعك على أرض صلبة قادرة على إختيار المجال الذي تريدي التخصص به على دراية وعلم، وأيضًا ستصبحي قادرة على التعلم بشكل أسرع وأفضل. حيث ستمتلكي معلومات وخبرة يجهلها الكثير من بدأوا مباشرًة في تعلم مسار برمجي مثل مجال الويب دون تعلم الأساسيات. وقد تم النقاش حول نفس السؤال بالتفصيل وأرجو منك قراءة النقاشات التالية فسوف تجيب على الكثير من أسئلتك.
  18. تستطيع إضافة progress bar للكود عن طريق إنشاء واجهة المستخدم وجعلها تستخدم هذا الكود، ثم يمكن عرض progress bar لمستخدمي التطبيق لإظهار تقدم عملية الرفع. ثم استخدام الكود المعطى في حدث زر الرفع (upload)، ومن ثم تحديث progress bar بشكل منتظم لإظهار تقدم عملية الرفع. ويمكن ذلك بإضافة شرطات التقدم في مخرجات الكود، مثلاً، حاول إضافة حدث يقوم بتحديث progress bar بناءً على عدد البايتات التي تم رفعها. وتستطيع الاطلاع على مقالات أو دليل مطورين مثل هذا الدليل لمعرفة المزيد حول إضافة progress bar في تطبيقات Android: https://developer.android.com/reference/android/widget/ProgressBar وإليك مثال بسيط يستخدم مكتبة Volley لإجراء طلب HTTP POST مع تمكين ProgressBar عند الرفع: public class MainActivity extends AppCompatActivity { private Button uploadButton; private ProgressBar progressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); uploadButton = findViewById(R.id.upload_button); progressBar = findViewById(R.id.progress_bar); uploadButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Create a multipart request using Volley VolleyMultipartRequest request = new VolleyMultipartRequest(Request.Method.POST, UPLOAD_URL, new Response.Listener<NetworkResponse>() { @Override public void onResponse(NetworkResponse response) { // Handle successful response } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // Handle error } }) { @Override protected Map<String, DataPart> getByteData() { // Add file to request Map<String, DataPart> params = new HashMap<>(); params.put("file", new DataPart("file.jpg", getFileDataFromDrawable(getBaseContext(), R.drawable.image), "image/jpeg")); return params; } @Override protected Response<NetworkResponse> parseNetworkResponse(NetworkResponse response) { // Update progress bar based on response int percentage = (int) (((float) response.uploadedBytes / (float) response.totalBytes) * 100); progressBar.setProgress(percentage); return super.parseNetworkResponse(response); } }; // Add request to the queue VolleySingleton.getInstance(getBaseContext()).addToRequestQueue(request); } }); } private byte[] getFileDataFromDrawable(Context context, int id) { Drawable drawable = ContextCompat.getDrawable(context, id); Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 80, byteArrayOutputStream); return byteArrayOutputStream.toByteArray(); } } وعليك باستبدال UPLOAD_URL بعنوان URL الخاص بخادم الرفع الخاص بك و R.drawable.image بمورد الصورة الخاصة بك.
  19. في البداية أرجو توضيح السؤال وكتابته بالعربية، وإذا كان سؤالك بخصوص ما هو التشغيل غير المنسق، فإليك شرح للأمر. التشغيل غير المنسق (أو Uncoordinated Execution) هو نمط من أنماط التشغيل في الحوسبة الموزعة يشير إلى عدم وجود تنسيق أو توافق بين العمليات المنفذة في النظام. يعني هذا أن العمليات المختلفة قد تقوم بتنفيذ الأعمال المختلفة في نفس الوقت ودون التنسيق مع بعضها البعض. وفي التشغيل غير المنسق، يقوم كل عملية باتخاذ القرارات بشكل مستقل بدلاً من التنسيق مع العمليات الأخرى في النظام. ونتيجة لذلك، يمكن أن يحدث تعارض (Conflict) في النظام عندما تقوم عدة عمليات بمحاولة الوصول إلى نفس المورد في نفس الوقت، وهذا قد يؤدي إلى حدوث مشاكل في النظام مثل فشل العمليات، أو حدوث تعطل في النظام بشكل عام. وعلى الرغم من أن التشغيل غير المنسق يعتبر أحد النماذج الأساسية في الحوسبة الموزعة، إلا أنه قد يكون غير مثالي في بعض الحالات، وعادةً ما يتم استخدام أنماط التشغيل المنسق أو المتزامن (Coordinated/Synchronized Execution) عند الحاجة إلى التحكم في التنفيذ وضمان التنسيق بين العمليات المختلفة في النظام.
  20. بالطبع يناسب لابتوب MacBook Air البرمجة، ويتميز هذا الجهاز بأنه خفيف الوزن ونحيف، مما يجعله سهل الحمل والتنقل به. كما أنه يأتي بمعالج قوي وذاكرة عشوائية كافية، مما يسمح له بتشغيل بيئات التطوير الكبرى بكفاءة عالية. كما أنه يحتوي على نظام تشغيل macOS الذي يدعم العديد من لغات البرمجة والأدوات اللازمة لتطوير البرمجيات، وتعتبر البيئة الأمثل لمحترفي البرمجة. ونظام macOS قد يكون مناسبًا للعديد من المطورين. يتضمن نظام macOS بيئة تطوير متكاملة (IDE) مثل Xcode والتي تدعم العديد من لغات البرمجة مثل Swift و Objective-C و C++ وغيرها، كما يتضمن العديد من الأدوات المساعدة لتطوير البرمجيات مثل محررات النصوص والمترجمات ومكتبات البرمجة. بالإضافة إلى ذلك، فإن نظام macOS يوفر بيئة عمل مستقرة وأمنية، مع وجود مجتمع تطوير قوي ونشط في المجتمع البرمجي. ومن الجوانب الأخرى، يمكن أن يكون نظام تشغيل Linux أيضًا مناسبًا للبرمجة، خاصةً في بيئات التطوير والبرمجة المفتوحة المصدر. وقد تم التطرق بالتفصيل لمواصفات الحاسوب المناسبة للبرمجة بالتفصيل في النقاشات التالية:
  21. السؤال كان غير واضح بعض الشيء، بخصوص تشغيل المشروع على شبكة محلية حاول تجربة التالي: تأكد من أن جهاز الكمبيوتر الذي تريد تشغيل السيرفر عليه متصل بالشبكة المحلية. قم بفتح موجه الأوامر (command prompt) واستخدم الأمر "ipconfig" للحصول على عنوان IP الخاص بجهاز الكمبيوتر الخاص بك في الشبكة المحلية. استخدم الأمر "python manage.py runserver 0.0.0.0:8000" لتشغيل السيرفر المحلي وجعله يستجيب لأي طلبات HTTP على جميع عناوين IP الموجودة في الشبكة المحلية. اطلب من الآخرين في الشبكة المحلية استخدام عنوان IP الخاص بجهاز الكمبيوتر الخاص بك ورقم المنفذ 8000 للوصول إلى الموقع الخاص بك عن طريق متصفح الويب. مثلاً، إذا كان عنوان IP الخاص بجهاز الكمبيوتر الخاص بك هو "192.168.1.100"، يمكن للآخرين في الشبكة المحلية الوصول إلى الموقع الخاص بك عن طريق زيارة العنوان "http://192.168.1.100:8000/".
  22. إذا كنت لم تحدد المجال الذي تريد تعلمه في البرمجة سواء ويب أو تطوير تطبيقات الهاتف باستخدام Flutter أو React Native ولديك الوقت فأنصحك بتعلم أساسيات البرمجة أولاً. حيث أنها ستمكنك من إختيار المجال الذي تريده عن إقتناع ودراية وليس تخبط وتشتت كما يفعل الغالبية، حيث أنه يتبع مسار تعليمي ولا يعلم هل يريده أم لا وهل سيفيده أم لا. وإن كنت تريد الوظيفة بشكل سريع وبحاجة إلى المال وليس لديك وقت لتعلم الأساسيات، فأنصحك برؤية ما هي المهارات المطلوبة في سوق العمل لديك بالنسبة لمستوى Entry Level أو Junior على مواقع التوظيف مثل LinkedIn وإذا كان المطلوب بكثرة مطور وورد بريس أو مطور PHP ولارافيل مع Vue.js أو مطور React.js أو مطور Angular.js أو مطور .net أو مطور React Native وهكذا. فعليك بتعلم ماهو متاح في سوق العمل ثم تعلم ما تريده بعد الحصول على الوظيفة، ولكن إذا كان لديك الوقت ومازلت صغير السن فقم بتعلم مجال الويب لأنه سيفتح أفاقك على كافة مجالات البرمجة وهو سهل في البداية وبه مجالات مختلفة مثل مطور الواجهة الأمامية والواجهة الخلفية وبإمكانك استخدام React.js الخاصة بالواجهة الأمامية في تعلم React Native. أي أنك ستستطيع التوجه إلى أكثر من مجال عند تعلم الويب على عكس لو قمت بتعلم تطوير التطبيقات فقط. وبخصوص الأساسيات، عليك البدء أولاً بلغة C++ إذا أردت التأسيس بشكل سليم، وإذا أردت تخطي ذلك الأمر فعليك بتعلم لغة جافاسكريبت في البداية لتسريع عملية التعلم. وقد تم التطرق بالنقاش حول سؤالك بالتفصيل في النقاشات التالية:
  23. الطريقة التي تستخدمها لربط عدة collections في Firebase صحيحة وليست بها خطأ، ولكن، قد يصعب إدارة العديد من عمليات الربط لأكثر من 25 مجموعة. ولتحسين الأداء، تستطيع استخدام دالة الاستعلامات المتعددة (Batched Writes) في Firebase التي تتيح لك إنشاء وتحديث وحذف العديد من المستندات في مجموعة واحدة في نفس الوقت. وبإمكانك الاطلاع على التفاصيل الكاملة عن Batched Writes في Firebase من هنا: https://firebase.google.com/docs/firestore/manage-data/transactions#batched-writes أيضًا عليك بالنظر في إمكانية استخدام الرسائل الفورية (Firebase Cloud Messaging) في Firebase لتحسين الأداء وتقليل العمليات اللازمة للحصول على بيانات جديدة وإرسالها إلى التطبيق الخاص بك. بالإضافة إلى النظر في تحسين هيكل البيانات الخاص بك في Firebase لتقليل عدد المستندات التي تحتاج إلى الوصول إليها في كل مرة. مثلاً، دمج بعض المعلومات في مستند واحد بدلاً من إنشاء مستندات منفصلة لكل بيانات. وإليك بعض الأفكار التي يمكن استخدامها لتحسين الكود الخاص بك: استخدام الدوال المتعددة للحصول على بيانات متعددة بدلاً من استخدام await Future.wait، وذلك قد يحسن من الأداء ويجعل الكود أكثر وضوحًا وقابلية للصيانة، مثال: استخدام الدالة getBooksSnapshot بدلاً من await booksSnapshotFuture. تستطيع استخدام Stream للحصول على بيانات متعددة من Firebase بطريقة فعالة من حيث الأداء، من خلال إنشاء Stream واحد للحصول على جميع البيانات المطلوبة من Firebase. يمكن هيكلة قاعدة البيانات الخاصة بك بشكل أفضل لتجنب الحاجة إلى الوصول إلى عدة مجموعات للحصول على بيانات متعددة، عن طريق إنشاء مجموعات فرعية أو إضافة بيانات إضافية إلى المستندات الحالية لتجنب الحاجة إلى الوصول إلى مجموعات متعددة للحصول على بيانات متعددة.
  24. بالطبع أنت قمت بتثبيت إطار Django وبايثون على حاسوبك، إذن عليك القيام بالتالي: قم بفتح موجه الأوامر (command prompt) واستخدم "cd" للانتقال إلى مجلد العمل الخاص بك. بعد ذلك، استخدم الأمر "django-admin startproject" لإنشاء مشروع Django جديد. بمجرد إنشاء المشروع ، انتقل إلى دليل المشروع باستخدام الأمر "cd". استخدم الأمر "python manage.py runserver" لتشغيل السيرفر المحلي، ويمكنك الآن فتح متصفح والوصول إلى الموقع الخاص بك عن طريق الذهاب إلى العنوان "http://localhost:8000/". إذا كنت تريد تغيير رقم المنفذ الافتراضي للسيرفر المحلي ، فتستطيع استخدام الأمر "python manage.py runserver 0.0.0.0:8080" لتشغيل السيرفر على المنفذ 8080. وبعد ذلك يمكنك تنفيذ تطبيق الإدارة الخاص بك في السيرفر المحلي وتحميله في المتصفح الخاص بك عن طريق زيارة العنوان "http://localhost:8000/admin". وأيضًا بإمكانك إنشاء بيئة افتراضية (Virtual Environment) لمشروع Django الخاص بك لتفادي تعارض الإصدارات مع الحزم الأخرى المثبتة في جهاز الكمبيوتر الخاص بك، وذلك من خلال التالي: 1-إنشاء مجلد جديد: mkdir {directory_name} نضيف مكان {directory_name} اسم المجلد الجديد، مثلاً mkdir app وسينشيء مجلد باسم app في نظام ويندوز. 2- تثبيت جانغو Django: pipenv install django 3- تفعيل البيئة الإفتراضية: pipenv shell 4- إنشاء مشروع جانغو جديد: django-admin startproject {project_name} . عليك بتغيير مكان {project_name} باسم مشروع جانغو. 5- تشغيل مشروع جانغو: python .\manage.py runserver 6- إنشاء تطبيق جانغو: python .\manage.py startapp {app_name} واستبدل {app_name} باسم تطبيق جانغو الذي تريده.
  25. الخطأ يظهر أن هناك تعارض في متطلبات الحزم المستخدمة في مشروعك. وتحتاج إلى التحقق من ملف composer.json الخاص بمشروع Laravel الخاص بك والتأكد من أن متطلبات الحزم محدثة وتتوافق مع متطلبات حزمة Chatify. في هذه الحالة، تحتاج إلى تحديث متطلبات الحزم في ملف composer.json لتتوافق مع متطلبات حزمة Chatify، و يمكنك القيام بذلك عن طريق تنفيذ الأمر التالي في مجلد مشروع Laravel الخاص بك: composer require pusher/pusher-php-server:^7.0 ومن ثم، يمكنك تنفيذ أمر تثبيت Chatify مرة أخرى باستخدام الأمر التالي: composer require munafio/chatify وإذا واجهت أي مشاكل أخرى، فيمكنك استخدام الخيار --with-all-dependencies للسماح بالتحديثات والإزالات للحزم التي تم تأمينها على إصدارات محددة. composer require munafio/chatify --with-all-dependencies أيضً تستطيع ا تحديد الإصدار المحدد لحزمة Chatify بإضافة القيود الخاصة بالإصدار في الأمر composer require: composer require munafio/chatify:^1.6.1 بعد تحديث متطلبات الحزم وتثبيت Chatify بنجاح، تأكد من تنفيذ الأمر التالي لتحديث ملف الارتباطات composer.lock: composer update وفي النهاية، تأكد من إضافة مزود Pusher إلى ملف تكوين Laravel الخاص بك config/app.php كما هو موضح في توثيق Chatify.
×
×
  • أضف...