-
المساهمات
18786 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
445
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Mustafa Suleiman
-
المشكلة التي تشيري إليها في الصورة هي: ‘ Cannot fit requested classes in a single dex file (# methods: 137997 > 65536) و تحدث عندما يتم تجاوز الحد الأقصى لعدد الطرق المسموح به في تطبيق Android، حيث يستخدم Android Dalvik Executable (DEX) تنسيقًا مخصصًا لتشغيل التطبيقات على منصة Android، ويحتوي على قاعدة بيانات لجميع الطرق المستخدمة في التطبيق. ويتم فصل التطبيقات إلى عدة ملفات DEX عندما يتم بلوغ الحد الأقصى لعدد الطرق في ملف DEX الواحد، ولكن في بعض الأحيان قد تكون عدد الطرق أكبر من الحد الأقصى المسموح به لملف DEX الواحد، ومن ثم يظهر رسالة الخطأ السابقة. ولتفعيل تجزئة الأساسيات، يجب إضافة مكتبة Multidex إلى ملف build.gradle للتطبيق باستخدام الكود التالي: implementation 'com.android.support:multidex:1.0.3' ثم عليك بتفعيل تجزئة الأساسيات في defaultConfig بإضافة السطر التالي: multiDexEnabled true مثال: defaultConfig { ... multiDexEnabled true } وإذا استمرت المشكلة أي بعد تجربة الحلول السابقة، حاولي إضافة الكود التالي إلى ملف الإعدادات الرئيسي للتطبيق: <application android:name=".MyApplication" ... > ... </application> وعندما يتم تشغيل التطبيق، سيقوم نظام Android بتشغيل MyApplication بدلاً من التطبيق الافتراضي، مما يسمح بزيادة حدود الطرق المسموح بها وتفادي مشكلة "Cannot fit requested classes in a single dex file (# methods: 137997 > 65536)".
- 5 اجابة
-
- 1
-
-
برمجة نواة التشغيل من الصفر هو عملية تتطلب مهارات برمجية عالية وخبرة واسعة في مجال نظم التشغيل، مما يعني أنه يجب عليك الاستعداد لدراسة الكثير من المفاهيم والتقنيات المتعلقة بنظم التشغيل وعمليات التشغيل. في البداية، يجب عليك دراسة لغة البرمجة التي ستستخدمها في برمجة نواة التشغيل، مثل لغة C أو C++، ومن ثم، تستطيع البدء في برمجة النواة بالاعتماد على مكتبات النظم التشغيل المختلفة المتاحة، مثل POSIX، ومكتبات مايكروسوفت Windows API، ومكتبات BSD. وتشمل عملية برمجة نواة التشغيل عدة مراحل، منها: مرحلة التشغيل الأولي في هذه المرحلة، يتم تهيئة بيئة النظام وتحميل النواة في الذاكرة الرئيسية. مرحلة التهيئة تهتم المرحلة بإعداد النظام للعمل مع الأجهزة المختلفة المتصلة به، مثل المعالج والذاكرة ووحدات التخزين والشبكات. مرحلة الجدول الزمني يتم تحديد كيفية توزيع الوقت والموارد بين العمليات المختلفة المشغلة على النظام. مرحلة النظام الملفات هذه المرحلة يتم إدارة وتنظيم البيانات المخزنة في وحدات التخزين المختلفة على النظام. وبخصوص المصادر العربية، فلن تجد عزيزي ولا تتعب نفسك بالبحث، فضالتك ستجدها فقط في المحتوى الأجنبي لكون الأمر متخصص وبحاجة إلى خبرة كبيرة.
- 3 اجابة
-
- 1
-
-
الخطأ بسبب تاريخ غير صالح يتم استخدامه في التطبيق الذي تحاولي تشغيله، وتحديدًا التاريخ المستخدم في التطبيق ليس قابلاً للتحليل بسبب وجود علامات غير صالحة أو أخطاء في تنسيق التاريخ. عليك بالتحقق من التاريخ المستخدم في التطبيق والتأكد من أنه مكتوب بشكل صحيح وفقًا لتنسيق التاريخ الصحيح. وتستطيعي استخدام الأدوات المتاحة في أندرويد ستوديو للتحقق من صحة التاريخ وتنسيقه، وأيضًا استخدام مكتبات Java التي تتضمن الدوال الخاصة بالتحويل بين التواريخ. وقد يكون السبب أن لغة النظام لديكِ باللغة العربية، لذلك حاولي أولاً تغيير لغة التاريخ إلى الإنجليزية في الويندوز وضبط المنطقة الزمنية، وإذا استمرت المشكلة حاولي تغيير لغة النظام إلى الإنجليزية وإعادة تشغيل أندرويد استوديو بعد أي تعديل مما سبق. وأرجو قراءة النقاش التالي، فهو يتعلق بنفس المشكلة الخاصة بك:
-
الخطأ الذي يظهر لك هو: An error occurred while resolving packages: Project has invalid dependencies: com.unity.render-pipelines.universal: Package [com.unity.render-pipelines.universal@14.0.7) cannot be found وتستطيع هذا الخطأ في برنامج Unity عن طريق إجراء الخطوات التالية: التأكد من أن الإصدار المذكور بالخطأ "com.unity.render-pipelines.universal@14.0.7" مثبت بشكل صحيح في مشروع Unity الخاص بك، وتحقق من ذلك عن طريق التنقل إلى قائمة الـ Package Manager في Unity. إذا كان الإصدار المذكور في الخطأ غير مثبت، يتم تثبيته عن طريق النقر فوق زر "Add package" في Package Manager، ثم البحث عن الإصدار المطلوب وتثبيته. إذا لم يتم حل المشكلة بعد ذلك، تستطيع محاولة حذف مجلد "Packages" في مشروع Unity الخاص بك وإعادة تشغيل Unity، ثم إعادة تثبيت الإصدار المذكور في الخطأ من Package Manager. في حالة عدم حل المشكلة بعد محاولة الخطوات السابقة، عليك بمحاولة تحديث إصدار Unity الذي تستخدمه إلى الإصدار الأحدث المتاح وتثبيت الإصدار المذكور في الخطأ من Package Manager.
-
بالطبع لن تحتاج إلى أكثر من المسارات المتواجدة على أكاديمية حسوب، فالبداية من مسار علوم الحاسب لتعلم الأساسيات. ثم إختيار المسار الذي تريده سواء دورة تطوير التطبيقات باستخدام لغة JavaScript أو دورة تطوير تطبيقات الويب باستخدام لغة PHP. والتي أنصحك قبلها بإتمام دورة تطوير واجهات المستخدم، وإذا كانت التكلفة مرتفعة بالنسبة لك، فيمكنك التنازل عن دورة علوم الحاسوب والتركيز على المسار البرمجي الذي تريده. وستجد مساندة من كافة المدربين في حالة واجهتك أية مشكلة، وأنصحك بقراءة النقاشات التالية و النقاشات التي تم الإشارة إليها بداخلها أيضًا بتمعن وستجد كافة الإجابات على أسئلتك.
-
الطريقة الصحيحة لدراسة الدورة هي من خلال المشاهدة والتطبيق والفهم، وهنا لا أقصد التطبيق فقط بالكتابة سطر بسطر وراء المدرب، ذلك جيد في البداية لا مشكلة. لكن ما عليه فعله هو إعادة بناء المشروع بمفردك من البداية، دونّ أن تسير وراء شخص يملي عليك الخطوات، ويا حبذا لو قمت بتغييرات في المشروع لخلق تحدي لنفسك، أو تستطيع إنشاء مشروع آخر من خلال تنفيذ تصميم يعجبك، وتستطيع رؤية مصادر لتصاميم رائعة هنا: أو تستطيع تنفيذ التحديات على موقع مثل frontend mentor وقد تم شرح الأمر هنا ورؤية مواقع أخرى توفر تحديات مثله: والبعض يكره أن يقضي أسبوع في بناء مشروع مثل تنفيذ تصميم من المواقع التي ذكرتها لك، ولكن أليس تلك هي مرحلة التعلم؟ إن لم يخصص الوقت والجهد الآن فمتى إذن؟ والغريب أنه سوف يعود لتلك النقطة مرة أخرى، لكونه لا يمتلك الثقة الكافية لبناء مشروع بمفرده أو لا يعرف ما السبيل، رغم أنه كان باستطاعته الإبطاء قليلاً والتعلم والتدرب ثم الإنطلاق بثقة على أساس صحيح. وقد يفيدك الإطلاع على النقاش التالي أيضًا: وبخصوص مسارك بعد الإنتهاء من الدورة فأرجو منك قراءة النقاشات التالية وستجيب على أسئلتك:
-
تستطيع الإعتماد على الطريقة التالية بالإَضافة للطرق السابقة: من خلال دالة reduce() في JavaScript لتحقيق ذلك بطريقة أخرى. حيث نستخدم reduce() للحفاظ على المصفوفة الأصلية وإعادة مصفوفة جديدة تحتوي على العناصر غير المكررة. مع استخدام Map() لتخزين اسماء الـ HTML tag الفريدة، وتحديث ال Map() مع كل عنصر في المصفوفة الأصلية. في النهاية ، تستطيع تحويل Map() إلى مصفوفة باستخدام الدالة Array.from(). const arr = [ 'a:href,title', 'a:href,title,accesskey', 'div:class', 'div:class,role,id', 'h3:', 'li:id', 'ul:']; const uniqueArr = Array.from(arr.reduce((map, current) => { const tagName = current.match(/\w+(?=\:)/)[0]; return map.has(tagName) ? map : map.set(tagName, current); }, new Map()).values()); console.log(uniqueArr); // Output: [ 'a:href,title,accesskey', 'div:class,role,id', 'h3:', 'li:id', 'ul:' ]
- 4 اجابة
-
- 1
-
-
في جامعة القاهرة، لم يكن هناك قسم خاص بالذكاء الإصطناعي، ولكن تم الموافقة على تغيير اسم الكلية إلى الحاسبات والذكاء الاصطناعي وتم إنشاء قسم لمجال الـ Ai في الكلية. وكل ما أنت بحاجة إليه لدخول ذلك القسم، هو الحصول على المجموع المناسب للكلية في سنة التنسيق الخاصة بك، ويجب أن تكون من شعبة علمي رياضة أو علوم ولكن مجموع الكلية يختلف وهو أقل بالنسبة لعلمي رياضة. ويمكنك التخصص في الذكاء الاصطناعي بدءًا من السنة الثالثة وأغلب المواد في الكلية هي باللغة الإنجليزية حيث أنها لغة البرمجة بالأساس. وجامعة الحاسبات والذكاء الاصطناعي شبه مجانية ولن تحتاج سوى دفع مصاريف الكلية فقط ويجب الإنتباه إلى أن نظام الكلية يعتمد على الساعات المعتمدة وبمجرد دخولك للجامعة ستفهم النظام ولا تشغل بالك به حاليًا لكنه يتطلب الإجتهاد حتى لا تدفع مصاريف أنت في غنى عنها بسبب الرسوب في بعض المواد. والمصاريف هي 8000 آلاف جنيه مصري سنويًا. أي حوال 750 جنيه للساعة المعتمدة الواحدة، وستدرس حلاص 4 سنوات 141 ساعة. والجدير بالذكر أن هناك كلية منفردة غير حاسبات وهي باسم الذكاء الاصطناعي وبداخلها 4 أقسام رئيسية «برمجة الآلة واسترجاع المعلومات، تكنولوجيا أنظمة الشبكات المدمجة، الروبوتات والآلات الذكية، علوم البيانات». وتعمل بنظام الساعات المعتمدة أيضًا وبنفس المصاريف تقريبًا، ولكن هناك قسم خاص بتكلفة 20 ألف جنيه مصري. والأسعار قد تتغير لذلك عليك بالسؤال من داخل الجامعة للتأكد. وتتواجد كلية الذكاء الاصطناعي في عدة جامعات حكومية وهي: جامعة القاهرة جامعة طنطا جامعة حلوان جامعة الزقازيق جامعة كفر الشيخ جامعة بنها جامعة المنوفية جامعة دمنهور جامعة الأقصر وأنصحك بالبحث بالتالي " كلية الحاسبات و الذكاء الاصطناعي" على اليوتيوب وستجد شرح للكلية ونصائح.
-
تتم عملية نقل الصوت والفيديو في تطبيقات المحادثة مثل الواتساب عبر استخدام تقنية 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 لتشغيل الفيديو والصوت وتحريرهم في صفحات الويب.
- 5 اجابة
-
- 1
-
-
للإجابة على ذلك يجب ذكر مثال لوصف وظيفة خاصة بمطور بايثون حيث ستجد وصف مشابه له على مواقع التوظيف مثل 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. وبالنسبة لطريقة التعلم المناسبة فأرجو منك قراءة النقاش التالي وقراءة النقاشات التي إرفاقها بداخله:
- 3 اجابة
-
- 3
-
-
-
وهناك وجهات نظر مختلفة، لكن في رأي الاستيعاب والحفظ مهمان في بداية التعلم، فالاستيعاب وحده لا يكفي، والتطبيق العملي يقوم بتثبيت ذلك الاستيعاب والحفظ بنسبة أكبر، وبعد ذلك لو نسيت بعض الأمور لا مشكلة وليس جميعها بالطبع فالأساسيات لا يفترض أن تنساها، ومع التكرار ستترسخ لديك الأمور التي أنت بحاجة بشكل متكرر في المشاريع. بعد ذلك في البرمجة لن يفيدك الحفظ في شيء، ولا يوجد مبرمج محترف يتذكر كافة ما تعلمه بل يعلم كيف يقوم ببناء المشروع باستخدام الأداة المناسبة، أي يعلم أن اللغة تلك تمتلك الأدوات اللازمة وذلك الإطار هو المناسب للمشروع الخاص بي، وبالطبع هو يحفظ الأساسيات لكونه قام بمشاريع بتلك اللغات والأدوات من قبل. ثم يتذكر ما يريده من خلال البحث وقراءة المستندات، مثلاً يتذكر أنه يمكنه تنفيذ ما يريد من خلال دالة معينة لكنه لا يتذكر طريقة استخدامها أو كتابتها، وبالتالي يقوم بالبحث والقراءة ومع الوقت ستتذكر كل ما يخص عملك اليومي. والباقي عليك بالبحث عنه والقراءة، أو البحث باسم how to تنفيذ شيء معين وهكذا. أي عليك بفهم الأساسيات وفهم الكود جيدًا، فذلك ما سيمكنك من تعلم كل ما تريد، والبعض يمل من بطيء عملية التعلم في البداية، ولكن لا يعلم أنه بذلك سيصعب من عملية تعلمه أي شيء جديد مستقبلاً وسيخاف من أي شيء جديد يظهر أمامه لم يراه من قبل. وبخصوص طريقة التعلم المناسبة قد تم التطرق إلى ذلك بالتفصيل في النقاش التالي:
- 6 اجابة
-
- 1
-
-
في البداية حزمة "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 للتطبيق، وتستطيع استخدام هذه المتغيرات في الكود.
-
دورة تطوير واجهات المستخدم تعتبر مكملة لدورة تطوير التطبيقات باستخدام لغة 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 وتعلمي تلك المهارات من خلال الدورتين. وأيضًا أنصحك بقراءة النقاشات التالية:
-
بخصوص تعارض الحزم فهى تحدث عندما يتعارض تثبيت حزمتين أو أكثر في نفس المشروع، وهذا النوع من المشاكل قد يؤدي إلى توقف تشغيل التطبيق بالكامل أو إلى أخطاء في وظائف محددة من التطبيق. ولحل مشكلة تعارض الحزم، يجب القيام بعدة خطوات: الخطوة الأولى هي تحديد الحزم التي تسبب التعارض والتأكد من أنها تستخدم إصدارًا متوافقًا مع الحزم الأخرى التي يعتمد عليها التطبيق. يمكن تحديد الحزم المتعارضة باستخدام أدوات إدارة الحزم مثل 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 الأحدث. ومع ذلك، ينبغي استخدام هذا الأمر بحذر، حيث أنه يمكن أن يؤدي إلى تثبيت إصدارات قديمة من الحزم وهذا قد يؤدي إلى مشاكل أخرى، أي الأفضل هو استخدام حزم متوافقة، لكن في حال كنت تعمل على مشروع للتدريب أو تعلم تقنية جديدة فلا مشكلة في استخدامه.
- 3 اجابة
-
- 1
-
-
الهكر الأخلاقي هو شخص يستخدم مهارات الحوسبة والبرمجة وأمن المعلومات لاختبار نظام الأمان والحماية للأنظمة والشبكات والتطبيقات والمواقع. ويعمل الهكر الأخلاقي على اختبار النظام للبحث عن الثغرات والاختراقات والتحقق من أن النظام آمن بشكل كافي، من خلال الإعتماد على المعرفة والخبرة في مجال البرمجة وأمن المعلومات والتعامل مع الأدوات اللازمة لاختبار النظام. ونظام لينكس هو نظام تشغيل يستخدم على نطاق واسع في أمن المعلومات بسبب مزاياه الأمنية المتقدمة، والتي تجعله مناسبًا للغاية لأغراض الاختبار والاختراق الأخلاقي. ومع ذلك، تستطيع استخدام أنظمة تشغيل أخرى مثل نظام التشغيل Mac لأغراض الاختبار والاختراق الأخلاقي. وفيروسات الحاسوب هي برامج ضارة تتسبب في إتلاف بيانات المستخدم أو إعاقة عمل النظام، وتختلف فيروسات الحاسوب من حيث الشكل والتصميم ولكنها تتألف من برامج مكتوبة بلغة برمجة معينة. ومنعًا للتكرار، قد تم التطرق بالتفصيل حول سؤالك في النقاشات التالية:
- 6 اجابة
-
- 1
-
-
في البداية لا تشغل بالك كثيرًا، حيث سيخطر في بالك 1000 سؤال وسؤال وما عليك سوى البدء بتعلم البرمجة وستجد أن الكثير من الأسئلة قد تم الإجابة عليها وستعرف الطريق بمفردك. فالأمر أشبه بشخص غريب عن المنطقة ويسأل عن الطريق، وكان بإمكانه التجول قليلاً في المنطقة واستكشافها وسيجد الطريق بلا شك بدلاً من الإنتظار وسؤال كل شخص عن طريق. وأنا لا أقصد ألا تسأل بل لا تتردد في السؤال، لكن أنصحك بالبدء وعدم الاسترسال في الأسئلة التي لن تفيدك بأي شيء، فكل ما تحتاجه هو إختيار مسار برمجي يوفر لك الأساسيات لتقف على أرض صلبة، ثم تعلم المسار البرمجي الذي إخترته مثل الويب أو تطبيقات الهاتف. وعود نفسك أن تركز في الحاضر والمستقبل القريب مع التخطيط للمستقبل البعيد، ولكن لا تشغل بالك بالمستقبل البعيد فتفشل في تحقيق ما تريده في حاضرك ومستقبلك القريب. وبخصوص سعر الدورة فهو ثابت بتكلفة 290 دولار لكل دورة وأنصحك بقراءة كل حرف في النقاش التالي والأسئلة التي تم إرفاقها به: وإذا أردت نصيحتي فالأفضل لك هو دورة علوم الحاسوب في البداية: وبعد تعلم الأساسيات والتي منها أساسيات لغة جافاسكريبت عليك بتعلم دورة تطوير تطبيقات الويب باستخدام لغة PHP:
- 7 اجابة
-
- 1
-
-
إذا كنت تستخدم خادم ويب Apache على نظام ويندوز، فتستطيع فتح ملف httpd.conf الرئيسي وإضافة الأسطر التالية: <Directory "C:/Apache24/htdocs"> AllowOverride All Require all granted Allow from 127.0.0.1 Allow from ::1 </Directory>
-
في البداية الخطأ الذي تواجهه يحدث عند استخدام 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'], ); }
-
لطباعة متغير 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 داخل العنوان بين قوسين مربعين.
-
- 2 اجابة
-
- 2
-
-
-
في حال أنك تريد ترتيب النتائج حسب المتوسط الأعلى، فتستطيع تحديث الاستعلام لاستخدام الدالة orderByDesc() على نتائج الدالة average() بدلاً من عدد التقييمات. $users = User::with('ratings') ->withCount('ratings') ->orderByDesc(function ($user) { return $user->ratings->avg('stars'); }) ->get(); تستخدم الدالة avg() هنا لحساب المتوسط عن طريق الاستعانة بالعلاقة ratings في نموذج المستخدم. ثم الإعتماد على orderByDesc() لترتيب النتائج بترتيب تنازلي وفقًا لنتائج الدالة avg() للتقييمات. بهذه الطريقة ، ستظهر النتائج بترتيب تنازلي وفقًا للمتوسط الأعلى لتقييمات المستخدمين. لاحظ أني قمت بإضافة with('ratings') لجلب بيانات التقييمات مع كل مستخدم ، ولذلك يجب التأكد من استخدام الاسم الصحيح للعلاقة بين الجدولين في نموذج المستخدم الخاص بك.
- 7 اجابة
-
- 1
-
-
من خلال الدالة orderBy() في Laravel لترتيب البيانات تصاعديًا أو تنازليًا وفقًا لنتائج الدالة average() التي تم إنشاؤها، وتستطيع تحقيق ذلك بسهولة عن طريق إضافة السطر التالي إلى استعلام قاعدة البيانات الخاص بك: $users = User::withCount('ratings')->orderByDesc('ratings_count')->get(); وتستخدم withCount() لحساب عدد التقييمات لكل مستخدم ، و orderByDesc() لترتيب النتائج بترتيب تنازلي وفقًا لعدد التقييمات. بالتالي، سيكون أولئك الذين لديهم المزيد من التقييمات في الأعلى وسيتم ترتيبهم بشكل تنازلي. وإذا كنت تريد ترتيبهم تصاعديًا ، فتستطيع استخدام orderBy() بدلاً من orderByDesc(). $users = User::withCount('ratings')->orderBy('ratings_count')->get(); وتأكد من استبدال ratings بالاسم الصحيح للعلاقة بين الجدولين في نموذج المستخدم الخاص بك.
- 7 اجابة
-
- 1
-
-
بالطبع أنتي بحاجة إليها ولكن الدورة بمفردها ليست السبيل لتصبحي محترفة في البرمجة، حيث أنها تقدم لك أساسيات علوم الحاسب فقط وتضعك على أرض صلبة قادرة على إختيار المجال الذي تريدي التخصص به على دراية وعلم، وأيضًا ستصبحي قادرة على التعلم بشكل أسرع وأفضل. حيث ستمتلكي معلومات وخبرة يجهلها الكثير من بدأوا مباشرًة في تعلم مسار برمجي مثل مجال الويب دون تعلم الأساسيات. وقد تم النقاش حول نفس السؤال بالتفصيل وأرجو منك قراءة النقاشات التالية فسوف تجيب على الكثير من أسئلتك.
- 3 اجابة
-
- 1
-
-
تستطيع إضافة 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 بمورد الصورة الخاصة بك.