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

Mustafa Suleiman

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

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

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

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

    365

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

  1. ببساطة وبدون تعقيد في JavaScript، يستخدم مصطلح "دالة callback" للإشارة إلى دالة يتم تمريرها كوسيط إلى دالة أخرى، وعندما تكون الدالة الأصلية قادرة على الانتهاء من تنفيذ مهمتها الرئيسية، تستدعى الدالة callback لتنفيذ بعض الإجراءات الإضافية. والأمر يتم من خلال المترجم (Compiler) أو محرك JavaScript وهو لا يتعرف بشكل مباشر على الدالة الممررة كـ callback function، لكنه يعتمد تحديد الدالة كـ callback function على كيفية استخدامها في سياق معين في الكود. ويوجد مفهوم الـ callback queue (طابور الاستدعاءات) والذي يتعلق بنظام المحدثات (event loop) في محرك JavaScript، وهو جزء من عمل المحرك نفسه. وعند تمرير دالة callback إلى دالة معينة، مثلما هو الحال في مثالك app.listen، يتم تسجيل تلك الدالة في callback queue، والcallback queue هو عبارة عن هيكل بيانات يحتوي على مجموعة من الدوال الممررة كـ callbacks، وتكون تلك الدوال جاهزة للاستدعاء عند حدوث حدث معين. وسأوضح الأمر على المثال الذي طرحته: تُستخدم دالة callback في دالة app.listen، وتعمل على استماع التطبيق على منفذ محدد (port) للطلبات الواردة من المتصفح، وتحتوي على معاملين، الأول هو رقم المنفذ (port) الذي ترغب في استخدامه، والثاني هو الدالة callback التي ستتم استدعاؤها عندما يكون التطبيق جاهزًا للاستماع وتلقي الطلبات. وتمرر دالة callback بواسطة السهم البسيط () => {} بعد معامل المنفذ (port)، ويتم تنفيذ تلك الدالة callback عندما يبدأ التطبيق في الاستماع على المنفذ المحدد، أي يتم رسالة في وحدة التحكم تقول "Example app listening on port" تليها قيمة المنفذ الذي تم تمريره. بمعنى آخر، عند تشغيل التطبيق ويب، سيبدأ في الاستماع على المنفذ المحدد، وعندما يكون جاهزًا، ستستدعى الدالة callback المحددة وطباعة رسالة توضح أن التطبيق جاهز للاستخدام على المنفذ المحدد.
  2. ستحتاج إلى تعديل الكود كالتالي: <html> <body> <button onclick="samah();">تسجيل صوتي</button> <button onclick="stops();">stop</button> <a id="a"></a> <script> let audioChunks = []; let mediaRecorder = null; let audioBlob = null; let mainStream = null; function samah() { navigator.mediaDevices.getUserMedia({ audio: true }) .then(stream => { mainStream = stream; mediaRecorder = new MediaRecorder(stream); mediaRecorder.start(); mediaRecorder.addEventListener("dataavailable", event => { audioChunks.push(event.data); }); }); } async function stops() { mediaRecorder.addEventListener("stop", async () => { audioBlob = new Blob(audioChunks, { type: mediaRecorder.mimeType }); mainStream.getTracks().forEach(track => track.stop()); // إنشاء كائن FormData لإرسال البيانات إلى السيرفر const formData = new FormData(); formData.append("audio", audioBlob, "recording.webm"); try { // إرسال البيانات إلى السيرفر باستخدام Fetch API و async/await const response = await fetch("URL_TO_SERVER_ENDPOINT", { method: "POST", body: formData }); const data = await response.json(); console.log("تم رفع التسجيل الصوتي بنجاح!", data); // هنا يمكنك التحكم في البيانات المرتدة من السيرفر } catch (error) { console.error("حدث خطأ أثناء رفع التسجيل الصوتي:", error); } }); mediaRecorder.addEventListener("stop", stops); mediaRecorder.stop(); } </script> </body> </html> وآلية عمل الكود هي: عند النقر على زر "تسجيل صوتي"، تستدعى الدالة samah(). تتم مطالبة المستخدم بالإذن للوصول إلى الميكروفون باستخدام navigator.mediaDevices.getUserMedia(). بمجرد الحصول على الإذن، يتم تشغيل التسجيل باستخدام MediaRecorder، وتبدأ المكونات الصوتية في الاحتفاظ بالبيانات المسجلة في المصفوفة audioChunks. عند النقر على زر "stop"، يتم استدعاء الدالة stops(). استدعاء حدث "stop" على mediaRecorder باستخدام mediaRecorder.addEventListener("stop", stops) للتأكد من استدعاء الدالة عند إيقاف التسجيل. إنشاء كائن Blob من المكونات الصوتية المسجلة. يتم إيقاف جميع المسارات في mainStream باستخدام mainStream.getTracks().forEach(track => track.stop()). إنشاء كائن FormData لتكوين بيانات الصوت المراد إرسالها إلى السيرفر. استخدام fetch لإرسال بيانات الصوت إلى السيرفر بطريقة غير متزامنة باستخدام طريقة POST. التعامل مع الاستجابة من السيرفر باستخدام response.json() ومن ثم استخدام البيانات المرتجعة كما تحتاج.
  3. أولاً افتح مشروع Flutter لديك في محرر الأكواد الذي تفضله (مثل Android Studio أو Visual Studio Code). ثم قم بتنفيذ الأمر التالي في وحدة الطرفية (Terminal) للتحقق من أن كل شيء يعمل بشكل صحيح: flutter doctor وسيقوم الأمر السابق بفحص إعدادات Flutter المحلية والتحقق من توافر أدوات التطوير اللازمة لبناء تطبيق Flutter على منصتي Android و iOS. بعد التأكد من أن Flutter مثبت بشكل صحيح وأن جهازك معتمد على النحو الصحيح، بإمكانك بناء تطبيق Android بتشغيل الأمر التالي: flutter build apk والأمر سيعمل على بناء ملف APK الخاص بتطبيقك، وستجد الملف المُنشأ في المسار التالي: [مسار مشروع Flutter]/build/app/outputs/apk/release/app-release.apk ولبناء تطبيق iOS، قم بتشغيل الأمر التالي: flutter build ios وما سيحدث هو إنشاء مجلد ios في مشروع Flutter لديك وباستطاعتك فتحه باستخدام Xcode وبناء التطبيق من هناك، ويجب أن يكون لديك Xcode مثبتًا على جهاز الكمبيوتر خاصتك للقيام بذلك. وأنصحك بقراءة التالي :
  4. لإنشاء آلية تصنيف Many-to-Many بين المنشورات والتصنيفات في تطبيق الويب يتوجب علينا التالي: 1- قاعدة البيانات إنشاء جدول للمنشورات (Posts) وجدول للتصنيفات (Categories). لإنشاء العلاقة Many-to-Many، تستطيع إنشاء جدول وسيط (Intermediate table) يربط بين المنشورات والتصنيفات، والجدول يحتوي على مفتاح أساسي خارجي للمنشور (post_id) ومفتاح أساسي خارجي للتصنيف (category_id). 2- الجانب الخلفي (Backend) في الجانب الخلفي، يجب عليك تنفيذ نماذج (models) لكل جدول في قاعدة البيانات. في نموذج المنشور (Post model)، تستطيع استخدام علاقة Many-to-Many مع نموذج التصنيف (Category model) باستخدام وسيط مثل Django's ManyToManyField أو أي أداة مشابهة، وذلك الحقل سيقوم بإنشاء العلاقة بشكل تلقائي بين المنشورات والتصنيفات. في النهاية، يجب عليك إنشاء نقاط نهاية API (API endpoints) لإنشاء وتحديث وحذف المنشورات والتصنيفات. 3- الجانب الأمامي (Frontend) في الواجهة الأمامية، عليك عرض نموذج لإنشاء منشور جديد يتيح للمستخدم اختيار التصنيفات المناسبة للمنشور. ومن الممكن أن تعتمد على حقل اختيار متعدد (multi-select field) أو حقل تصنيفات منفصل (separate category fields) حسب التصميم الذي ترغب فيه. عند إرسال البيانات إلى الخادم، قم بتضمين معرفات التصنيفات المختارة للمنشور في طلب الإنشاء أو التحديث. وباستخدام تلك الآلية، يمكن للمنشورات أن تنتمي إلى العديد من التصنيفات والتصنيفات يمكن أن تحتوي على العديد من المنشورات، وتأكد من تحديث العلاقات بشكل صحيح عند إنشاء وتحديث المنشورات والتصنيفات لضمان الاتصال الصحيح بينهما في قاعدة البيانات.
  5. ما الفرق بين Next.js و Nuxt.js و ما الفائدة منهم ؟ Next.js و Nuxt.js هما إطاري عمل حديثين للجافاسكربت يمكن استخدامهما لبناء تطبيقات الويب الحديثة، ولكن، هناك بعض الاختلافات الرئيسية بين الإطارين. Next.js هو إطار عمل مبني على React ويعتمد على Node.js، يوفر مجموعة من الميزات التي يمكن أن تساعد في تحسين أداء وتحسين محركات البحث لتطبيق الويب الخاص بك، مثل تقديم الخادم (SSR) وتوليد المواقع الثابتة (SSG)، وهو أيضًا خيار شائع لبناء تطبيقات full-stack، حيث يمكن استخدامه لإنشاء الكود الأمامي والخلفي للتطبيق. أما Nuxt.js هو إطار عمل يعتمد على Vue ويعتمد أيضًا على Node.js، ويوفر مجموعة من الميزات المشابهة لـ Next.js، مثل SSR وSSG، ويحتوي Nuxt.js أيضًا على عدد من الميزات الإضافية، مثل نظام التوجيه المدمج ونظام الوحدات، مما يجعل Nuxt.js خيارًا جيدًا لبناء تطبيقات الويب المعقدة والقابلة للتوسع. فوائد Next.js: يستخدم Next.js SSR لتوليد HTML لصفحاتك على الخادم قبل إرسالها إلى العميل، وبالتالي يحسن ذلك الأداء لتطبيق الويب، خاصةً للصفحات التي لا تُحدَّث بشكل متكرر. يولِّد Next.js أيضًا صفحات ثابتة لتطبيق الويب، مما يُحسِّن من ترتيب الموقع في جولج، حيث يمكن لمحركات البحث فهرستة صفحاتك وزيارتها بسهولة أكبر. تستطيع استخدام Next.js لتوليد الكود الأمامي والخلفي لتطبيق الويب الخاص بك. فوائد Nuxt.js: خيار جيد لبناء تطبيقات الويب المعقدة والقابلة للتوسع، ونظام التوجيه المدمج ونظام الوحدات يجعل من السهل تنظيم الكود الخاص بك والحفاظ على قابلية صيانة تطبيق الويب. قابل للتخصيص بشكل كبير، وباستطاعتك استخدام الوحدات المدمجة لإضافة ميزات إلى تطبيق الويب، أو يمكنك كتابة وحدات خاصة بك.
  6. الأمر غير واضح، هل يمكنك تصوير فيديو للمشكلة، أو حاول حذف vscode وتثبيت آخر إصدار من الرابط التالي: https://code.visualstudio.com/download
  7. صحيح، فعند كتابة الكود في ملف ثم الضغط على علامة تشغيل الكود كما بالصورة يتم السؤال عن إدخال رقم مرة واحدة وينتهي الكود، أرجو منك إغلاق محرر الأكواد vscode تمامًا ثم التجربة مرة أخرى:
  8. أنت تقصد الكود وليس البرنامج، أرجو منك توفير الكود الذي يوجد به مشكلة لتفقده، وما المطلوب تنفيذه؟
  9. الأسئلة الإختبارية لا يتم الإجابة عليها بشكل مباشر، يمكن توفير خطوات الحل وتستطيع محاولة كتابة الكود وطرح الأسئلة بخصوص المشاكل التي تواجهها. أنت لم تحدد اللغة المطلوب الحل بها، لذلك سأذكر خطوات الحل بشكل عام: 1- قم بإنشاء ملف نصي يحتوي على بيانات الموظفين، ويجب أن يحتوي كل سطر في الملف على اسم الموظف وعدد ساعات العمل في الأسبوع ومعدل الأجر الساعي. مثال على تنسيق الملف: John Smith 40 10.5 Emily Johnson 37 12.0 ... 2- كتابة وظيفة لقراءة البيانات من الملف وتخزينها في المصفوفات المناسبة، ويجب أن تكون هناك مصفوفة واحدة لتخزين أسماء الموظفين ومصفوفة ثنائية الأبعاد بحجم 10 صفوف و 3 أعمدة لتخزين عدد ساعات العمل الأسبوعية ومعدل الأجر الساعي والأجر الأسبوعي لكل موظف. 3- كتابة وظيفة لحساب الأجر الأسبوعي لكل موظف، ويجب أن تأخذ هذه الوظيفة مصفوفة العدد الساعات الأسبوعية ومعدل الأجر الساعي وتقوم بحساب الأجر الأسبوعي لكل موظف وتخزينه في المصفوفة ثنائية الأبعاد. 4- كتابة وظيفة لحساب المعدل الأسبوعي للأجور لجميع الموظفين، ومن المفترض أن تستلم تلك الوظيفة مصفوفة الأجور الأسبوعية للموظفين وتحسب المعدل الأسبوعي لجميع الموظفين. 5- كتابة وظيفة لطباعة أسماء الموظفين الذين يحصلون على راتب أسبوعي أعلى من أو يساوي المعدل الأسبوعي للأجور، ويجب أن تأخذ هذه الوظيفة مصفوفة أسماء الموظفين ومصفوفة الأجور الأسبوعية والمعدل الأسبوعي وتقوم بطباعة أسماء الموظفين الذين يستوفون الشرط. 6- كتابة وظيفة لطباعة بيانات كل موظف، ويجب أن تأخذ هذه الوظيفة مصفوفة أسماء الموظفين ومصفوفة العدد الساعات الأسبوعية ومصفوفة معدل الأجر الساعي ومصفوفة الأجور الأسبوعية وتطبع بيانات كل موظف. 7- كتابة دالة رئيسية تنفذ الخطوات السابقة بالترتيب الصحيح وتقوم بتحميل البيانات من الملف وحساب الأجور وطباعة النتائج.
  10. من الأفضل أن تقوم بمشاركة مجلد المشروع بعد ضغطه لتفقد الكود، حيث أنه لا يمكن معرفة المشكلة بدون رؤية الكود.
  11. أنت تقصد مهارة الـ Problem Solving، صحيح؟ هي مهارة هامة بلا شك، ولن تمتلكها بين يوم وليلة بل أنت بحاجة إلى الدراسة بشكل يومي أو شبه يومي وكتابة الكود وتنفيذ المشاريع وحل المشاكل البرمجية التي تواجهك أثناء ذلك، أيضًا تحتاج إلى حل مسائل برمجية باللغة التي تفضلها من أجل تنمية مهارة Problem Solving لديك، وتستطيع الإعتماد على مواقع مثل Codewars وHackerRank وأيضًا Leetcode. لكن قبل استخدام تلك المواقع ولكي لا تصاب بالإحباط الغير ضروري، عليك بالتركيز أولاً على تعلم أساسيات لغة البرمجة الأولى التي قررت تعلمها ثم التطبيق على تلك الأساسيات من خلال نماذج بسيطة ثم التعمق وإنشاء مشاريع متقدمة بتلك اللغة وحاول ألا تستخدم أي مكتبة إن أمكن. وستجد الكثير من المشاريع على يوتيوب بمستويات مختلفة، وبعد التمكن من اللغة بشكل جيد واكتساب الثقة، تستطيع البدء في تنمية مهارة الـ Problem Solving وتخصيص نصف ساعة أو ساعة لكل مسألة وإذا تعذر عليك الحل تستطيع رؤية الحل وفهم الكود لا حفظه بل فهم الطريقة التي تم الحل بها، ثم قم بتنفيذ ذلك بمفردك أو بطريقة أخرى لكونك فهمت كيفية حل المشكلة الآن، ففي بعض الأحيان يوجد أكثر من حل لنفس المسألة البرمجية.
  12. عليك بتفهم أن الفيديوهات على يوتيوب يتم تقليل الجودة الخاصة بها عند رفعها على المنصة وجودة 720p ليست HD بل جودة 1080p هي HD، بينما فيديوهات الدورة في أكاديمية حسوب لا يتم تقليل جودتها عند رفعها بل يتم رفعها بالجودة الأصليةبعد عملية المونتاج. وذلك قد تجد أن حجم الفيديو كبير نسبيًا مقارنًة بيوتيوب والجودة أعلى أيضًا، أنصحك بمشاهدة الفيديو على جودة 1080p لكي ترى سطور الكود بشكل جيد إذا كان لديك إنترنت ومساحة بيانات جيدة، وحاول تجربة متصفح آخر أو تحديث المتصفح لديك فربما هناك إضافة أو ما شابه تسبب تلك تأخر التحميل.
  13. هل يمكنك توضيح الأمر بصورة أو بفيديو لكي يتم فهم المشكلة، فالأمر غير واضح من الشرح النصي.
  14. أحسنت في التجربة والتغيير فتلك هي الطريقة الصحيحة لتعلم البرمجة وستتعلم من أخطائك الكثير على عكس كتابة الكود كما هو، وبجانب ما قمت به تستطيع استخدام بنية الشرط المتعددة (elif) بطريقة أكثر اختصارًا باستخدام العمليات المنطقية في الشروط كالتالي: grade = int(input("Enter the grade: ")) if grade >= 101: print("The grade is out of range. It should be between 0 and 100.") elif 90 <= grade <= 100: print("A") elif 80 <= grade < 90: print("B") elif 70 <= grade < 80: print("C") elif 60 <= grade < 70: print("D") elif 50 <= grade < 60: print("E") elif 0 <= grade < 50: print("F-") else: print("Error") وتلك الطريقة تقوم بدمج بعض الشروط المتشابهة واستخدام عمليات المقارنة المتعددة لتحقيق الاختصار فبدلاً من كتابة: grade >= 80 and grade<= 89 نستطيع استخدام التعبير المختصر: 80 <= grade< 90 ويتم تكرار هذا النمط للشروط الأخرى أيضًا.
  15. أنت تقصد تدريبات خاصة بحلقات التكرار في جافاسكريبت، صحيح؟ إليك بعض التدريبات إذن: تدريبات بسيطة اكتب برنامج يستخدم حلقة تكرار لطباعة أعداد من 1 إلى 10. اكتب برنامج يستخدم حلقة تكرار لحساب مجموع الأعداد من 1 إلى 100. اكتب برنامج يستخدم حلقة تكرار لطباعة أعداد زوجية من 2 إلى 20. اكتب برنامج يستخدم حلقة تكرار لطباعة التواريخ من العام 2020 إلى العام 2030. تدريبات متوسطة اكتب برنامج يستخدم حلقة تكرار لطباعة جدول الضرب لعدد محدد. اكتب برنامج يستخدم حلقة تكرار لإيجاد أكبر عنصر في مصفوفة (مصفوفة مكونة من أعداد). اكتب برنامج يستخدم حلقة تكرار لطباعة قائمة بالأرقام الأولية (الأعداد الأولية) من 1 إلى 100. أكتب برنامج يستخدم حلقة تكرار لإيجاد متوسط قيمة المصفوفة (مصفوفة مكونة من أعداد) باستخدام حساب. تدريبات متقدمة اكتب برنامج يستخدم حلقة تكرار لطباعة الأعداد الأولى في سلسلة فيبوناتشي حتى عدد محدد. اكتب برنامج يستخدم حلقة تكرار لفرز عناصر مصفوفة بالترتيب التصاعدي. اكتب برنامج يستخدم حلقة تكرار لطباعة الأعداد الأولية في نطاق معين، حيث يتم تحديد النطاق من قبل المستخدم. اكتب برنامج يستخدم حلقة تكرار لإيجاد أكبر قيمة في كل صف من مصفوفة ثنائية الأبعاد (مصفوفة متكونة من أرقام) وطباعتها. وإذا واجهت مشكلة حاول التفكير أولاً وقسم تلك المشكلة إلى أجزاء أصغر ثم اعمل على تنفيذها، وبعد التفكير تستطيع البحث عن كيفية تنفيذ ذلك والمراجعة على ما سبق، ثم السؤال إذا واجهت صعوبة ولا تتردد في السؤال.
  16. في دورة PHP سيتم شرح كيف يتم بناء لوحة تحكم وكيفية بناء نظام مصادقة وتسجيل دخول وتخصيص الصلاحيات، فلا تقلق بخصوص ذلك الأمر. أما Laravel Nova ببساطة هي حزمة إدارة لوحة التحكم (Admin Panel) تم تطويرها بواسطة Laravel، وتوفر واجهة مستخدم جاهزة وقابلة للتخصيص لإدارة التطبيقات المبنية باستخدام إطار عمل Laravel. وفائدة Laravel Nova تكمن في توفير أدوات قوية لإدارة تطبيقك بسهولة وكفاءة بدلاً من القيام بعملية تطوير واجهة المستخدم الخاصة بلوحة التحكم من الصفر، وتستطيع استخدام Laravel Nova للحصول على واجهة جاهزة ومتكاملة تتضمن ميزات مثل إنشاء وتحرير وحذف السجلات، وإدارة المستخدمين والصلاحيات، وتوليد تقارير، وغيرها الكثير. وهي أحد الخيارات الشائعة لإدارة لوحة التحكم في تطبيقات Laravel، وبالطبع توجد أيضًا بدائل أخرى لـ Laravel Nova مثل Backpack for Laravel وAdminLTE وVoyager وغيرها، وباستطاعتك استكشاف تلك البدائل واختيار الأداة التي تناسب احتياجاتك ومتطلبات مشروعك بشكل أفضل، أي عليك تقييم ميزات ووظائف كل أداة وقدرات التخصيص وسهولة الاستخدام لتحديد الأفضل بالنسبة لك ولما تريد تنفيذه.
  17. بخصوص منصة Wix فهى تعتمد على لغات الويب الأساسية وهي HTML, CSS, JS، وبخصوص الواجهة الخلفية فهى تستخدم بايثون وnode وscala، ولديها برمجة خاصة بواسطة تلك اللغات من توفير: محرر Wix وبيئة التطوير: والذي يوفر واجهة سحب وإسقاط تسمح للمستخدمين بتصميم وتخصيص مواقعهم بسهولة دون الحاجة للبرمجة. Wix Corvid (سابقًا Wix Code): Wix Corvid هو منصة تطوير تقدمها Wix تسمح للمستخدمين الأكثر تقدمًا ببناء تطبيقات ويب مخصصة وإضافة وظائف على الجانب الخادم باستخدام JavaScript، ويتيح للمطورين الوصول إلى واجهات برمجة التطبيقات (APIs) التي يوفرها Wix، وإنشاء مجموعات قواعد بيانات، وتنفيذ نماذج مخصصة، والمزيد. وأمور أخرى مثل سوق تطبيقات Wix وWix Velo وأيضًا تعمل Wix على بنية سحابية تضمن التوسع والأداء والأمان لمواقعها وبيانات المستخدمين، حيث تتيح البنية السحابية استضافة المواقع والوصول إليها من أي مكان دون الحاجة لإدارة الخوادم أو البنية التحتية. وبالطبع يوجد قاعدة بيانات وتعتمد Wix على نوعين وهما MySQL من أجل البيانات العلائقية، وMongoDB من أجل البيانات الغير علائقية. بالإضافة إلى MySQL وMongoDB، تستخدم Wix أيضًا عددًا من قواعد البيانات الأخرى لأغراض محددة. مثل، Memcached لتخزين البيانات التي يتم الوصول إليها بشكل متكرر في الذاكرة، مما يجعل الوصول إليها أسرع للمستخدمين، وأيضًأ Redis لتخزين بيانات الجلسة، مما يتيح للمستخدمين البقاء مسجلين في حساباتهم عبر الصفحات المختلفة. أما بخصوص منصة ووردبريس فهى تعتمد على لغات الويب الأساسية أيضًا وهم HTML, CSS, JS أما في الواجهة الخلفية فهى تعتمد على PHP وقاعدة بيانات MySQL. وستحتاج إلى بناء نظام إدارة محتوى CMS، وهناك منصات جاهزة توفر ذلك مثل strapi، وتستطيع البحث عن how to build CMS.
  18. هناك ثلاثة أجزاء رئيسية في بنية التحكم الشرطي: if و elif و else. if تستخدم لفحص شرط معين، وإذا كان الشرط صحيحًا (True)، يتم تنفيذ مجموعة الأوامر التي تليها، في حال كان الشرط غير صحيح (False)، فإن مجموعة الأوامر المتبعة للـ if لن تتم تنفيذها. elif تستخدم بعد الـ if لفحص شروط إضافية إذا لم يكن الشرط في الـ if صحيحًا، يتم فحص الشرط في الـ elif، وإذا كان الشرط في الـ elif صحيحًا، يتم تنفيذ مجموعة الأوامر المتبعة للـ elif، ويمكن وجود عدة أجزاء elif بعد الـ if لفحص شروط متعددة. else تستخدم في النهاية بعد الـ if والـ elif ويكون بدون شرط إذا لم يتم تنفيذ أي من الشروط السابقة (if أو elif)، فسيتم تنفيذ مجموعة الأوامر المتبعة للـ else. يعتبر الـ else اختياريًا، ولا يلزم وجوده في البنية الشرطية. وبالطبع تستطيع كتابة if فقط بمعنى عدم استخدام elif أو else، كالتالي: score = 85 if score >= 90: print("تم الحصول على تقييم ممتاز") if score >= 80: print("تم الحصول على تقييم جيد جدًا") if score >= 70: print("تم الحصول على تقييم جيد") if score >= 60: print("تم الحصول على تقييم مقبول") اعتمدت على استخدام سلسلة من جمل if في هذا المثال بديلاً عن استخدام elif أو else، ولكن قد يؤدي ذلك إلى تكرار الكود وتنفيذ الجمل الشرطية الإضافية حتى بعد تحقق الشرط المناسب. وبناءًا على مبادئ الـ clean code، يُفضل استخدام elif و else بدلاً من سلسلة من جمل if المنفصلة في العديد من الحالات، مما يساهم في جعل الكود أكثر وضوحًا وسهولة قراءة وصيانة، وإليك بعض النصائح لتحسين بناء الكود وفقًا لمبادئ clean code: استخدم elif لفحص شروط إضافية بعد الشرط الأول (if)، أي أنه سيتم فحص الشروط وتنفيذ المجموعة المناسبة من الأوامر المرتبطة بأول شرط يتحقق منه. استخدام else عندما ترغب في تنفيذ مجموعة من الأوامر عندما لا يتحقق أي شرط سابق، وذلك سيوفر مجموعة من الأوامر البديلة للتنفيذ في حالة عدم تحقق أي شرط. حاول تجنب تكرار الكود بين جمل if منفصلة، ففي حال كانت هناك مجموعة من الأوامر مشتركة بين شروط متعددة، تستطيع وضعها في جملة if أو elif واحدة واستخدام العبارات المنطقية لفحص شروط متعددة فيها. وتأكد من وضع تعليقات وشروحات واضحة للتوضيح في الكود، خاصة إذا كان هناك شروط معقدة أو تعدد شروط كبير، وذلك في بداية الجملة الشرطية فقط وليس على كل سطر.
  19. وظيفة الدوال اللامدا (Lambda) هي إنشاء وتعريف دوال صغيرة بدون اسم في برمجة البايثون، وتُستخدم بشكل شائع في الأماكن التي يتطلب فيها استخدام دالة بسيطة وغير معقدة ولا تحتاج إلى إعادة استخدامها في أماكن أخرى. وفي الكود الخاص بك، تستخدم دالة Lambda في وضعها كمعامل لمتغير key في دالة sort()، مما يعني أن الدالة اللامدا تُعين كمعيار (key) لتحديد كيفية ترتيب العناصر في القائمة. تفسير الدالة lambda : lambda x: int(x[2:]) lambda: الكلمة المفتاحية لإنشاء الدالة اللامبدا. x: هو المعامل المستخدم في الدالة. int(x[2:]): تحويل جزء من السلسلة x إلى عدد صحيح (integer)، حيث يتم استخراج الجزء من المؤشر 2 وما بعده. وباستخدام تلك الدالة، يتم تحويل قيمة العنصر في القائمة إلى عدد صحيح، ومن ثم يتم استخدامها كمعيار لترتيب العناصر في القائمة. وتستطيع الإعتماد على دالة print() بشكل مباشر دون استخدام الدالة اللامبدا في هذا السياق، ولكن في حالة الدالة sort()، تحتاج إلى تحديد المعيار الذي يتم استخدامه في الترتيب، وهو السبب في استخدام الدالة اللامدا كمعامل لمتغير key. تعابير lambda في بايثون
  20. من الصورة يظهر أن إصدار أداة التطوير Flutter الذي تستخدمه قديم، والحزمة clothes تتطلب إصدار أداة التطوير Flutter بما لا يقل عن 2.19.6، ولكنك تستخدم الآن الإصدار 2.19.2. لذلك حاول تنفيذ الأوامر التالية في منفذ الأوامر: flutter upgrade والأمر سيقوم بتحديث أداة التطوير Flutter إلى أحدث إصدار، وبمجرد تحديث أداة التطوير Flutter، يجب أن تتمكن من تشغيل الأمر "flutter pub get" بدون أي أخطاء. وإليك بعض الأوامر الأخرى في حال استمرار المشكلة: عليك بالتأكد من أن لديك أحدث إصدار لحزمة clothes وتستطيع معرفة ذلك عن طريق الأمر التالي: flutter pub outdated في حال كنت تستخدم إصدارًا قديمًا من حزمة clothes أقدم من 2.19.6، فيجب عليك تحديث الحزمة إلى إصدار أحدث. وفي حال استمرار المشكلة، قم بتشغيل الأمر التالي: flutter clean وذلك لحذف الملفات المؤقتة، وأيضًا تشغيل الأمر التالي لحذف مجلد .pub-cache: rm -rf .pub-cache ثم قم بتشغيل الأمر "flutter pub get" مرة أخرى. وأيضًا قد يفيدك تشغيل الأمر flutter doctor لتشخيص وفحص بيئة التطوير الخاصة بـ Flutter على جهازك، وعند تشغيل الأمر في الطرفية، سيتم فحص العديد من العناصر وإظهار تقرير يوضح حالة كل عنصر، وستظهر نتيجة التحقق لكل عنصر. إذا كانت النتيجة تظهر "✓" فهذا يعني أن العنصر سليم، وفي حال كانت النتيجة تظهر "✗" أو تحذيرًا، فهذا يشير إلى وجود مشكلة يجب حلها.
  21. أعتقد أن المشروع في مصر، وبموجب القانون المصري، إذا لم يتم تحديد نسبة الشريك في أرباح المشروع في اتفاقية الشراكة، فإن القانون ينص على توزيع الأرباح بنسب متساوية بين الشركاء، ما لم يتم الاتفاق على توزيع مختلف في اتفاقية الشراكة. وقد يتم تحديد نسبة الشراكة وفقًا لاتفاقات خاصة بين الشركاء، لذلك، يفضل استشارة محامٍ أو مستشار قانوني مختص في قانون الشركات المصري للحصول على معلومات دقيقة ومحدثة حول التشريعات والقوانين المعمول بها في مصر لتحديد نسبة الشراكة في أرباح المشروع. أيضًا تستطيع حساب تكلفة الإيجار لتلك الغرفة على أنها تكلفة عامة، أي يتم خصم تكلفة الإيجار من حصة الشريك في الأرباح، وعند حساب الأرباح، ستتم مراعاة تكلفة الإيجار كنفقة تشغيلية للمشروع، وخصم المبلغ المدفوع كإيجار من الإيرادات الإجمالية للمشروع قبل حساب الأرباح، ومن ثم، ستحتسب حصة الشريك في الأرباح بناءًا على الإيرادات المتبقية بعد خصم تكلفة الإيجار. مثلاً في حال كانت إيرادات المشروع الإجمالية هي 100,000 جنيه، وتكلفة الإيجار الشهري للغرفة المخصصة هي 14,000 جنيه، فإن التكلفة العامة للإيجار على مدى فترة معينة ستكون 14,000 جنيه × عدد الأشهر، وبالتالي خصم هذا المبلغ من الإيرادات الإجمالية، وحساب الأرباح بناءً على المبلغ المتبقي، وبناءًا على نسبة الشراكة في الأرباح، سيتم تحديد حصة الشريك الفعلية بعد خصم تكلفة الإيجار. وذلك النهج يساعد في تحقيق توازن أكثر عند تحديد حصة الشريك في الأرباح، حيث يؤخذ في الاعتبار أن الشريك يدفع تكلفة الإيجار ويستخدم جزءًا من المكان لأغراض المشروع. وبغض النظر عن التشريعات ففي حالة الشراكة تعتمد نسب الشركاء على مساهماتهم المالية، ويتم حساب حصة الشريك في الأرباح بناءًا على المبلغ المالي الذي قدمه كمساهمة رأسمالية في الشركة، أي مثلاً في حال كان الشريك قد قدم 60% من رأس المال الإجمالي للشركة، فإن حصته في الأرباح ستكون 60%. ولنفترض وجود شريكين في العمل. الشريك أ قدم مساهمة مالية بقيمة 60,000 دولار، بينما الشريك ب قدم مساهمة بقيمة 40,000 دولار، إذن إجمالي رأس المال المستثمر في الشركة هو 100,000 دولار. وبالتي ستحسب حصة الشريك أ في الأرباح على النحو التالي: (60,000 / 100,000) * 100 = 60%، وستكون حصة الشريك ب (40,000 / 100,000) * 100 = 40%. وانبته إلى أن توزيع الأرباح بناءًا على المساهمات المالية للشركاء هو أحد الأساليب بين العديد من الأساليب الممكنة التي يمكن أن يتفق عليها الشركاء، ومن الممكن أن يتفق الشركاء على طرق توزيع الأرباح مختلفة، وقد يتم الأخذ في الاعتبار عوامل أخرى بجانب المساهمات المالية، مثل مشاركة الشركاء في العمل، الخبرة، أو معايير أخرى محددة في اتفاقية الشراكة.
  22. أنت على حق، حيث أنه يتم الآن المطالبة بتوثيق الهوية من أجل استخدام أغلب خصائص الموقع كما تم شرح ذلك هنا: توثيق الهوية الشخصية ونفس الأمر بالنسبة لخمسات، وكل ذلك إجراءات قانونية من أجل توفير بيئة عمل آمنة، وقد تم توضيح ذلك هنا: توثيق الهوية الشخصية خمسات وتستطيع التحدث مع مركز الدعم في موقع مستقل بخصوص ذلك الأمر، لتفقد هل يوجد حل لذلك أم لا: https://support.mostaql.com/conversations
  23. أحسنت في طرح الأمر، فالمدة فعلاً تتوقف على مقدار إجتهادك والوقت اليومي المخصص للدراسة، وأيضًا خلفيتك السابقة وخبراتك قد تساعد في تسريع الأمر، وأيضًا هناك فروقات شخصية. ولذا أي مسار تدريبي في البرمجة من أجل تعلم مجال معين، ستحتاج إلى 6 أشهر على الأقل لتعلمه وإنهاء المسار التدريبي، وتلك الفترة قد تصل إلى سنة والأمر متوقف عليك، لكن لا تحاول أبدًا الإسراع من أجل إنهاء المسار وتقصر في عملية التعلم والتطبيق على مشاريع بمفردك والمراجعة وإلخ. و 6 أشهر على إفتراض على أنك ستقوم بتعلم إطار أو مكتبة للواجهة الأمامية مثل React. عليك بتقسيم الدورة مثلاً إلى أجزاء وتخصص لكل جزء أسبوع مثلاً، وإذا انتهيت في أقل من ذلك فلا مشكلة، ولكن حدد وقت معين بناءًا على الوقت اليومي المتاح لك، ثم اجتهد وافعل ما بوسعك، والفكرة كلها في الإلتزام وتحديد وقت لذلك، فما لا يمكن قياسه لا يمكن إدارته وتحسينه، صحيح؟ وركز جيدًا على الأساسيات وأيضًا حاول المراجعة ما تعلمته والتطبيق على ذلك بمشروع وستجد على يوتيوب الكثير من المشاريع للمبتدئين، ولا تعتمد على ذاكرتك فهى ستخونك بل عليك بالمراجعة ثم التطبيق من أجل تثبيت المعلومات. وأنصحك بقراءة النقاش التالي والنقاشات التي تم الإشارة إليها به وستجد الكثير من الإجابات على الأسئلة لديك:
  24. بالطبع تستطيع في أي سن لا مشكلة، طالما تمتلك المهارات اللازمة لإتمام المشاريع تستطيع العمل على مواقع العمل الحر، ومن الأفضل أن تقرأ التالي: https://blog.mostaql.com/tag/mostaql-freelancers-guide/
  25. تستطيع تعلم ما تريد، لكن العمل في الشركات يتطلب أن تكون حاصل على مؤهل جامعي وذلك في أغلب الشركات، وبعض الشركات الصغيرة قد تتغاضى عن ذلك، أو تستطيع العمل مع بعض الشركات عن بعد في حال كان لديك الخبرة الكافية ومعرض أعمال جيد. أيضًأ أمامك موقع العمل الحر تستطيع العمل عليها لكن يجب تعلم كيفية تقديم عرض جيد على المشاريع وبناء معرض أعمال إحترافي.
×
×
  • أضف...