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

Mustafa Suleiman

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

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

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

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

    407

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

  1. في الواقع أنت على الطريق الصحيح، فليس التعلم بالكم ولكن بالكيف، فقد يستفزك أن ترى البعض ينهي دورة في خلال أسبوع مثلاً بينما أنت تستغرق وقتك في الفهم والاستيعاب وتدوين الملاحظات ثم التطبيق. وقد ترى الأمر ممل ولا تحرز تقدم كبير، والأمر مغاير تمامًا، حيث أنك تحرز تقدم كبير بناءًا على أسلوب المذاكرة الصحيح الذي تتبعه، حيث أن عملية التعلم بالشكل الصحيح بطيئة في البداية وقد تجد نفسك تستغرق يوم كامل في بعض الأجزاء ولا مشكلة في ذلك. طالما أنك تبذل ما بوسعك فلا تقلق، ومع الوقت ستجد نفسك تتعلم بشكل أسرع وأفضل من أي شخص قام بإنهاء الدورة بشكل سريع وظن نفسه أنه أصبح مبرمج، لابد من التأني في البداية والمراجعة بعد مرور فترة من أجل تثبيت المعلومات، والتركيز بشدة على الأساسيات والتعمق بها والتطبيق عليها. وهناك أمر هام يجب التنبيه إليه، بعض الأشخاص يقوم بتدوين كل شيء أو كتابة الكود بشكل نصي في ورقة خارجية مثلاً، وذلك غير صحيح، فقط النقاط الهامة وملاحظات من أجل المراجعة أي كملخص لما فهمته من الدرس، فأنت تستطيع البحث عما تريده على جوجل في أي وقت، المهم هو الفهم والاستيعاب. وأنصحك بقراءة النقاش التالي وستجد به الكثير من الإجابات على الأسئلة لديك:
  2. العرض الصيفي الحالي يتم تطبيقه على الإشتراكات الجديدة، وهناك حل وحيد وهو الاستفسار عن وجود إمكانية لذلك من خلال سؤال مركز الدعم في أكاديمية حسوب، وسيتم الرد عليك في خلال فترة 24 إلى 48 ساعة. ولكن لا تعلق الكثير من الآمال على ذلك، وحاول أيضًا السؤال عن وجود كوبونات أو خصومات مثلاً بدلاً العرض الصيفي في حال لم يتوفر لك.
  3. لا تقلق أبدًا بخصوص ذلك، حتى لو طال الأمر قليلاً سيتم الرد عليك وحل المشكلة، فلا داعي للقلق بخصوص تلك النقطة.
  4. لكي يتضح لك الأمر، دورة علوم الحاسب ليست موجهة للتخصص في أحد مجالات البرمجة، بل للتاسيس بشكل سليم ودراسة علوم الحاسب من أجل دخول مجال البرمجة بقوة وإختيار المجال الذي تريد التخصص به عن وعي ودراية وأيضًا إمتلاك خبرة كافية لتعلم أي مجال تريد. وأنصحك بقراءة التالي لتفهم الفائدة الكبيرة التي تحصل عليها جراء دراسة علوم الحاسب: لذلك يتم مساندتك لفترة تصل إلى 6 أشهر من تاريخ حصولك إجتيازك للإختبار والحصول على الشهادة، وتوجيهك من أجل التخصص في مجال برمجي مطلوب في سوق العمل والحصول على وظيفة لكن بشرط الجد والإجتهاد، وستجد في أكاديمية حسوب دورات لمختلف المجالات ومنها: دورة تطوير تطبيقات الويب باستخدام لغة PHP دورة تطوير التطبيقات باستخدام لغة JavaScript وبإمكانك دراسة المسار الأول من جميع الدورات الأخرى بشكل مجاني في حال أردت زيادة معلوماتك أو التعمق بشكل أكبر.
  5. لا داعي للقلق عزيزي عبد المالك، في بعض الأحيان يوجد ضغط على فريق الدعم في أكاديمية حسوب، وسيتم الرد عليك خلال 24 إلى 48 ساعة، طالما أنك تحدثت إليهم من خلال حسابك الذي اشتريت من خلاله الدورات وأخبرتهم بالمشكلة فسيتم حلها. لكن حاول تفقد الدورات لديك من خلال تبويب دوراتي كالتالي: وستجد الدورات التي قمت بالإشتراك بها، وهنا توضيح بشكل مفصل: كيف أصل للدورات التي اشتركت بها وحاول مثلاً تسجيل الخروج ثم تسجيل الدخول مرة أخرى لحسابك وتفقد الدورات مرة أخرى لحين الرد عليك من قبل مركز المساعدة في أكاديمية حسوب.
  6. الأسئلة الإختبارية لا يتم الإجابة عليها بشكل مباشر، وأنت تريد فعل ذلك من خلال لغة جافا، صحيح؟ سأوضح لك الخطوات باستخدام لغة جافا ومكتبة java.time.LocalDate، حيث سيتعين عليك استيراد المكتبة java.time.LocalDate وjava.time.format.DateTimeFormatter لتعامل مع التواريخ وتنسيقها. ثم إنشاء الدالة الرئيسية (main) التي ستكون نقطة البدء لتنفيذ البرنامج. بعد ذلك حدد التاريخ الثابت الذي ترغب في طرحه من التاريخ الآخر، ويجب أن يكون التاريخ في شكل نصي "yyyy/M/d" ويمكن تخزينه في متغير نصي (String). ثم باستخدام DateTimeFormatter، قم بتحويل النصوص إلى كائنات LocalDate. الآن استخدم دوال minusYears و minusMonths و minusDays لطرح التاريخ الثابت من التاريخ الآخر. وفي النهاية عرض النتيجة باستخدام System.out.println() بناءًا على نمط التنسيق المعين (مثلاً "yyyy/M/d"). وبذلك ستتمكن من طرح التاريخ الثابت (constantDate) من التاريخ الآخر (otherDate) وعرض النتيجة بتنسيق "yyyy/M/d" في الإخراج القياسي، وبالطبع يمكن تحسين الكود بإضافة التحقق من صحة التواريخ المدخلة والتعامل مع الاستثناءات المحتملة.
  7. أولاً، Django هو إطار عمل ويب يستند إلى Python، بينما Angular هو إطار عمل ويب يستند إلى JavaScript. ثانيًا، Django و Angular ليسا مصممين خصيصًا لإنشاء تطبيقات أندرويد مما يعني أنك ستحتاجين إلى استخدام إطار عمل من أجل إنشاء تطبيق الهاتف وليس Angular أو Django، مثل React Native أو Flutter، لإنشاء الواجهة الأمامية لتطبيقك. بينما في الواجهة الخلفية نستخدم Django وربطها بالواجهة الأمامية عن طريق الـ API's. بينما لو أردتي استخدام Django فقط فهناك حل وهو تحويل الموقع إلى Progressive Web App (PWA) فتستطيعي استخدام django-pwa من أجل تحويل الموقع إلى نسخة قابلة للاستخدم كتطبيق على الهاتف، وهو أشبه بنسخة من الموقع للهاتف لكن على هيئة تطبيق مع ميزة التصفح بدون إنترنت. وفي حال أردتي بدائل للواجهة الخلفية فهناك NODE.JS في حال قمتي بتعلم React Native فستصبح خيار ممتاز لك، لكونها بيئة عمل تعتمد على جافاسكريبت أيضًا. بينما Flutter يعتمد على لغة Dart. وأنصحك بقراءة التالي: ويوجد في أكاديمية حسوب دورة تطوير تطبيقات باستخدام جافاسكريبت وبها مسار كامل لتطوير تطبيقات الهاتف باستخدام React Native.
  8. أرجو منك طرح الأسئلة المتعلقة بالدورات أسفل الفيديو الخاص بالسؤال في التعليقات أسفل الفيديو، وطرح الأسئلة العامة هنا. وبخصوص سؤالك حاول القيام بالتالي: sudo chown root:root /etc/vsftpd.conf ثم الأمر التالي: sudo openssl req -x509 -nodes -days 1095 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem ثم التالي: service vsftpd start بعد ذلك الأمر التالي: service vsftpd reload ثم إعادة التشغيل: sudo systemctl restart vsftpd.service ثم التجربة: systemctl status vsftpd
  9. وهل قام هو بتوثيق حسابه دون التحدث لمركز المساعدة؟ كل ما على صديقك فعله هو إرسال بطاقة الهوية وطلب التوثيق إذا أراد ثم إنتظار الرد، أو التحدث مباشرًة لمركز المساعدة الخاص بمستقل أو خمسات والسؤال عن الحالة الخاصة به، لا أحد سواهم يستطيع تأكيد ذلك.
  10. في حال أنك تريد استخدام كود من main.js في ملف home.js فعليك بتضمين ملف main.js أولاً حتى تصبح الدوال جاهزة ومعرفة عند استدعائها في ملف home.js حيث أن الكود يتم قراءته من الأعلى للأسفل.
  11. بالطبع فأنت بحاجة إلى تعديل الكود ليتوافق مع التغييرات التي حدثت في الإصدار 8.0. لذلك حاول التحقق من ملفات السكربت والصفحات الخاصة به للتأكد من عدم وجود أخطاء قوية (Fatal Errors) أو رسائل خطأ عند تشغيلها على PHP 8، بالإَضافة إلى التأكد من عدم استخدام الوظائف المتوقفة (deprecated functions) التي قد تكون تم استبدالها بوظائف جديدة في PHP 8. وفي حال لم تتمكن من تحديد سبب التوافقية، بإمكانك استخدام أدوات التحويل (Migration tools) المتاحة لتحويل السكربت من PHP 7 إلى PHP 8، وتلك الأدوات تساعد في اكتشاف التغييرات التي تحتاج إلى إجرائها لتحقيق التوافقية مع PHP 8 ومنها: PHP_CodeSniffer PHPCompatibility rector وستجد هنا الدليل الرسمي الذي يوضح طريقة عمل Migrating أو تحويل الكود من PHP 7.4 إلى PHP 8.0، حيث يتم شرح التغييرات التي حدثت: https://www.php.net/manual/en/migration80.php
  12. نعم ذكرت ذلك، ولكن أشرت أن ذلك أمر غير مؤكد ومن يستطيع تأكيده هو مركز المساعدة الخاص بمنصة مستقل، لذلك عليه بالتحدث إليهم وشرح الأمر والتأكد من إمكانية ثوثيق واستخدام والحساب بشكل طبيعي في حال إمتلاكه بطاقة هوية، لكن الشروط الرسمية لاستخدام المنصة هو أن يكون عمره أكبر من 18 عام كما أشرت. الأمر بسيط، وهو سؤال مركز الدعم عن وجود إمكانية لذلك أم لا.
  13. في حال قراءة شروط الاستخدام الخاصة بمنصة مستقل ستجد الشرط التالي: عمر المستخدم أكبر من 18 سنة يلتزم المستخدم المسجل في مستقل أن عمره أكبر من 18 سنة، وقد يطلب مستقل وثائق تثبت ذلك في حال دعت الحاجة. لكن لا حاجة للقلق بشأن غلق حسابه، فقد يتم تعطيله مؤقتًا لحين بلوغه السن المطلوب، وعليه بالتحدث لمركز المساعدة الخاص بمنصة مستقل وشرح الأمر لهم وأنه يمتلك بطاقة إثبات هوية. وتوثيق الهوية إلزامي في حال سحب أرباح تتجاوز 25$، أي في حال كانت الأرباح لم تتجاوز 25$ فلن يتم سؤالك عن توثيق الهوية. ومن ضمن شروط الاستخدام الأخرى هي أنه يتعهد المستخدم المسجل في مستقل أنه الوحيد الذي يستخدم الحساب ويكون مسؤولا عن كل ما يتم عبر حسابه، ولا يسمح حاليا أن يقوم أكثر من شخص باستخدام حساب واحد في مستقل.
  14. سأوضح لك الطريقة بشكل عام وحاول التفكير في كيفية تنفيذها لكي تحقق استفادة، ثم وفر الكود وسيتم مساعدتك. وستحتاج إلى حلقتين متداخلتين، الأولى للتحكم في عدد الأسطر، والثانية للتحكم في عدد النجوم في كل سطر. في الحلقة الخارجية، نقوم بتحديد عدد الأسطر التي نرغب في طباعتها (وليكن 5)، ثم نستخدم حلقة داخلية لطباعة النجوم في كل سطر. وفي البداية، يكون لدينا سلسلة فارغة لتجميع النجوم (stars)، ثم نستخدم حلقة داخلية أخرى لإضافة نجمة واحدة في كل تكرار حتى نصل إلى عدد النجوم المناسب للسطر الحالي، ثم نقوم بطباعة النتيجة.
  15. هل تقصدين تحويل كود مكتوب بالفعل إلى كود بلغة C؟ عامًة يوجد حزمة Cython وهو مترجم يسمح لك بإضافة ملحق C إلى لغة Python، ويستطيع Cython تحويل كود Python إلى C/C++ نظرًا لأنه يمتلك امتدادًا للغة C، ولكن يتطلب بعض التعديلات اليدوية في الكود، لذلك هو غير مناسب للمشاريع الكبيرة. أيضًا يمكن تحويل كود Python إلى C++ باستخدام أداة تحويل البرمجيات المفتوحة المصدر والمسماة Transcryp، وباستطاعة تلك الحزمة تحويل كود Python إلى C++ باستخدام واجهة سطر الأوامر بسهولة. حزمة أخرى باسم Nukita عبارة عن مترجم فعال آخر يمكنه تحويل برنامج Python إلى C/C++ في غضون ثوانٍ قليلة بشكل أفضل مقارنةً بـ Cython و Transcrypt، ويمكن لذلك المترجم التعامل مع مجموعة واسعة من كود Python وتنفيذ التحويل بسهولة. ويجب التنبيه إلى أنه في بعض الأحيان قد يتطلب الأمر تعديل بعض الأكواد بشكل يدوي بعد عملية التحويل ليعمل البرنامج بشكل سليم. دروس ومقالات لغة C في أكاديمية حسوب
  16. القسم متاحة في كلية حاسبات ومعلومات عين شمس فقط على حد علمي، وتستطيع التأكد من ذلك من خلال صفحة الجامعة على ويكيبيديا: https://ar.wikipedia.org/wiki/كلية_الحاسبات_والمعلومات_(جامعة_عين_شمس) https://ar.wikipedia.org/wiki/كلية_الحاسبات_والذكاء_الاصطناعي_(جامعة_القاهرة) https://ar.wikipedia.org/wiki/كلية_الحاسبات_والذكاء_الاصطناعي_(جامعة_حلوان)#:~:text=تقدمها أقسام الكلية-,قسم علوم الحاسب,التوازي، لغة التجميع، وغيرها. أما في جامعة القاهرة فيوجد الأقسام التالية: علوم الحاسب. نظم المعلومات. تكنولوجيا المعلومات. بحوث العمليات ودعم إتخاذ القرار. الذكاء الاصطناعى وجامعة حلوان الأقسام التالية: قسم علوم الحاسب قسم نظم المعلومات قسم تكنولوجيا المعلومات
  17. أنت تقصد في في جافاسكريبت، صحيح؟ عامًة نستخدم"nested loops" أو الحلقات المتداخلة لإجراء تكرارات داخل بعضها البعض، مم يعني أنك تستطيع وضع حلقة داخل حلقة أخرى، وهو أمر مفيد عندما تحتاج إلى تنفيذ إجراءات متعددة ومتداخلة للوصول إلى البيانات الخاصة بك. ولنفترض أن لدينا مصفوفة متداخلة (nested array) تحتوي على قائمة بعض الأشخاص وأعمارهم، ونريد عرض جميع الأشخاص مع أعمارهم باستخدام nested loops، كالتالي: const people = [ { name: "John", age: 25 }, { name: "Jane", age: 30 }, { name: "Bob", age: 22 }, ]; // استخدام nested loops لعرض الأشخاص مع أعمارهم for (let i = 0; i < people.length; i++) { const person = people[i]; console.log(`الشخص رقم ${i + 1}: ${person.name}، عمره ${person.age} سنة.`); } لاحظ أن لدينا حلقة خارجية تتعامل مع العناصر الخارجية في المصفوفة people، وحلقة داخلية تتعامل مع الخصائص الداخلية لكل عنصر (اسم الشخص وعمره)، ويتم تنفيذ الحلقتين معًا، بحيث تعمل الحلقة الداخلية لكل تكرار من الحلقة الخارجية. والنتيجة هي: الشخص رقم 1: John، عمره 25 سنة. الشخص رقم 2: Jane، عمره 30 سنة. الشخص رقم 3: Bob، عمره 22 سنة. مثال آخر ليتضح الأمر لك: لنفرض أن لدينا مصفوفة متداخلة تحتوي على درجات طلاب في مادتين، ونريد حساب المجموع الإجمالي لكل طالب وطباعته: const grades = [ [85, 90], [70, 80], [95, 88], ]; // حساب المجموع الإجمالي لكل طالب وطباعته for (let i = 0; i < grades.length; i++) { const studentGrades = grades[i]; let totalGrade = 0; for (let j = 0; j < studentGrades.length; j++) { totalGrade += studentGrades[j]; } const averageGrade = totalGrade / studentGrades.length; console.log(`طالب رقم ${i + 1}: المجموع = ${totalGrade}، المعدل = ${averageGrade}`); } في المثال السابق يوجد حلقة خارجية تتعامل مع كل طالب في المصفوفة grades، وحلقة داخلية تتعامل مع الدرجات المختلفة لكل طالب، ثم حساب المجموع الإجمالي لدرجات كل طالب وتحديد المعدل الحسابي له. والنتيجة هي: طالب رقم 1: المجموع = 175، المعدل = 87.5 طالب رقم 2: المجموع = 150، المعدل = 75 طالب رقم 3: المجموع = 183، المعدل = 91.5 وتستطيع البحث على اليوتيوب عن "الحلقات المتداخلة Nested Loops" ثم اسم اللغة وستجد شروحات كثيرة.
  18. عليك بدراسة سوق خدمات الاستضافة والمنافسين لفهم الفرص والتحديات الموجودة، وتحديد نموذج الأعمال الخاص بك والخدمات التي ترغب في تقديمها (استضافة مشتركة، سحابية، افتراضية، خوادم خاصة، دومينات، إلخ). ثم ابتكر اسمًا لشركتك وتحقق من توافر اسم النطاق عبر مواقع تسجيل النطاقات، وتسجيل علامتك التجارية وحقوق الملكية الفكرية إن لزم الأمر. بعد ذلك تأتي خطوة اختيار الأجهزة والبرمجيات التي ستدعم عملية استضافة المواقع والتطبيقات، وذلك يتطلب شخص متخصص في إنشاء السيرفرات وإدارتها. ثم وضع خطة تسويقية شاملة للترويج لشركتك وخدماتك، وتطوير موقع ويب احترافي للشركة يعرض خدماتك ويوفر واجهة للعملاء للتواصل والشراء، واستغل وسائل التواصل الاجتماعي والإعلانات المدفوعة لتوسيع نطاق جمهورك. بالطبع يجب توفير دعمًا فنيًا عالي الجودة على مدار الساعة للعملاء عبر الهاتف والبريد الإلكتروني والدردشة الحية، مع ضمان أمان البيانات والمواقع المستضافة للعملاء، وتحسين الاستقرار والأداء لتقديم خدمة استضافة موثوقة.
  19. أشكرك على ثقتك أيمن وأنا سعيد بمساعدتك، وبخصوص سؤالك ما هي الدولة التي تتحدث عنها بخصوص المنحة هل هي دولة عربية أم أجنبية؟
  20. بالطبع تستطيع ذلك، حيث يوفر Godot واجهة برمجة تطبيقات مفتوحة المصدر تسمى GDNative تسمح لك بإنشاء ملحقات C++ لمشروع Godot، وبإمكانك استخدام هذه الملحقات لإضافة وظائف جديدة إلى المشروع، أو لتحسين الأداء، أو لتوفير إمكانية الوصول إلى وظائف النظام غير المتوفرة في GDScript. حيث أن اللغات المدعومة هي GDScript و C/C++ وC#. ولبدء استخدام C++ مع Godot في الإصدارات الأقدم من 4.0، ستحتاج إلى تثبيت مجموعة أدوات C++ ومكتبة GDNative، وبعد تثبيت هذه المكونات، يمكنك البدء في كتابة رمز C++ الخاص بك. أما بدايًة من الإصدار 4.0 تم إضافة GDExtension والتي تسمح لك بكتابة كود C++ مباشرًة، وستجد شرح وافي للغات التي يمكنك استخدامها هنا: https://docs.godotengine.org/en/stable/getting_started/step_by_step/scripting_languages.html#c-via-gdextension وبخصوص مثال عن GDExtension استخدام ستجده هنا في المستند الرسمي: https://docs.godotengine.org/en/stable/tutorials/scripting/gdextension/gdextension_cpp_example.html وستحتاج إلى التالي: Godot 4 executable: الملف التنفيذي لمحرك Godot 4. يمكنك تنزيله من موقع Godot على الويب. C++ compiler: البرنامج الذي يعمل على تحويل رمز C++ إلى رمز machine code، وتستطيع تثبيته عن طريق بيئة التطوير Visual Studio. SCons: أداة بناء تسمح لك ببناء مشروع C++، وبإمكانك تثبيتها من الموقع الرسمي. the godot-cpp repository: مستودع Git يحتوي على الكود المصدري لمشروع Godot C++. يمكنك نسخه من موقع GitHub. وفي حال أنك مطور C++ متمرس، فيجب أن تكون قادرًا على البدء في استخدام C++ مع Godot في غضون دقائق، ولكن إذا لم تكن معتادًا على C++، فقد تحتاج إلى قضاء بعض الوقت في تعلم أساسيات اللغة قبل أن تتمكن من استخدامها مع Godot.
  21. أولاً كلية علوم الحاسب نفسها ليست هي النقطة الفاصلة، وذلك لأنك قادر على تعلم البرمجة من أي مكان به إنترنت وحاسوب ثم توفير الوقت والجهد والصبر للتعلم، فإذا كان أمر السفر للخارج سيقدك لك فرص أفضل أو معيشة أفضل فحاول تكريس كل جهدك للوصول إلى ذلك. أما إذا كان من أجل الدراسة فقط، فوفر وقتك وجهدك، واحصل على الشهادة من بلدك، ولكن تعلم البرمجة فعلاً من خلال الدورات المتاحة على الإنترنت سواء مدفوعة كالتي في أكاديمية حسوب أو مجانية ومتوفر منها على الإنترنت لكن ستحتاج إلى بذلك جهد أكبر في عملية التعلم. وحتى في مصر كلية حاسبات ومعلومات لا تقوم بتخريج مبرمجين، حيث أن المناهج والعملية التعليمية ليست جيدة بل الفائدة منها هي دراسة علوم الحاسب فقط، أما البرمجة فيتم تعلمها من خلال Roadmap من على الإنترنت وبها دورات مخصصة لكل مجال. وبأي حال من الأحوال عليك بالحصول على الشهادة الجامعية فهى ستجنبك الكثير من العناء الغير ضروري، حتى لو لم تكن كلية علوم الحاسب، لكن في حال كان أمامك فرصة للدراسة في الكلية التابعة للمجال الذي تريد التخصص به فافعل ذلك بدون تردد بالطبع فهى أفضلية جيدة. ببساطة، حدد ما تريده حقًا من خلال ورقة وقلم والمميزات والعيوب والوقت المتاح لك وظروفك المادية ثم اتخذ قرارك.
  22. أولاً أنت لا تقصد بالطبع القيام بإنشاء مؤسسة استضافة بالمعنى الحرفي، فذلك يتطلب بنية تحتية مكونة من سيرفرات وشبكات وفريق دعم فني وخلافه أي Data Center، وهو أمر مكلف في البداية وبحاجة إلى رأس مال. ولكن في البداية تستطيع الاستفادة نموذج الـ Reseller (البائع الموزع) بدلاً من بناء شركة استضافة من الصفر، وفي نموذج الـ Reseller، تقوم بشراء خدمات استضافة من شركة استضافة كبيرة ومعتمدة، ثم تعيد بيع هذه الخدمات للعملاء الخاصين بك بسعر محدد. فيما يلي بعض المزايا والاعتبارات لنموذج الـ Reseller: إنشاء شركة استضافة مستقلة يتطلب استثمارات كبيرة في البنية التحتية والتسويق وفريق الدعم والتطوير، أما في نموذج الـ Reseller، فإنك تستفيد من البنية التحتية الموجودة للشركة الأم ولا تحتاج إلى الاستثمار بشكل كبير في هذه الجوانب. بدلاً من التركيز على بناء البنية التحتية وتشغيل الشركة، يمكنك التركيز بشكل أكبر على جلب العملاء وزيادة قاعدة العملاء والتسويق لخدمات الاستضافة. في بعض الحالات، يمكن أن تقدم الشركة الأم دعمًا فنيًا لعملائك، مما يخفف العبء عنك في تقديم الدعم الفني. إذا اخترت شركة استضافة معروفة وموثوقة كشركة أم لك، فقد تستفيد من سمعتها ويسهل عليك بناء ثقة العملاء في خدماتك. عندما تشعر بأن شركتك قد نمت بشكل كبير وأصبح لديك قاعدة عملاء مستدامة، تستطيع التفكير في الانتقال إلى نموذج الشركة المستقلة بما في ذلك الاستثمار في البنية التحتية الخاصة بك. وبخصوص تصميم المواقع، فتستطيع تعيين مصمم مواقع متخصص في الـ UI/UX من أجل تصميم المواقع الخاصة بالعملاء. ولكن نصحتي إليك هي، لا تقم بإنشاء مشروع في مجال لا تفهم خباياه أو ليس على دراية به، فأنت بحاجة على الأقل لتعلم مجال البرمجة لكي تتمكن من إنشاء مشروعك وذلك من الإلمام بجوانبه، أو مشاركة شخص ذو ثقة لديه دراية.
  23. حقًا أحييكي على ذلك الفضول، فهو مطلوب في مجال تعلم البرمجة من أجل تطوير مهاراتك الوصول بعيدًا، ولكن في البداية لا داعي لذلك، فالأمر قد يصيبك بالإحباط بدون داعي وأيضًا ليس مطلوب منك ذلك. لكن المطلوب هو تنفيذ المشاريع أي Get things done، لذلك بعد إنهاء مسارك البرمجي بالكامل أنصحك بالإطلاع على الكود المصدري الخاص بالمكتبات وتعلم كيف تم تطوير تلك المكتبة وكيف تم الربط بين أجزاءها وكيفية كتابة التعليقات على الكود وتنظيمه وأمور أخرى. والبداية من الأفضل أن تكون من خلال مكتبات صغيرة الحجم وليست كبيرة ثم الإنتقال لمكتبة بكود مصدري بحجم أكبر وهكذا. وإليك بعض المكتبات على GitHub: https://github.com/python-pillow/Pillow https://github.com/psf/requests https://github.com/carpedm20/emoji https://github.com/termcolor/termcolor أي أنه يمكنك الوصول للكود المصدري في حال كانت المكتبة مفتوحة المصدر، وستجدي رابط GitHub في الموقع الرسمي للمكتبة أو من خلال صفحة المكتبة على https://pypi.org حيث ستجدي رابط باسم Homepage أو Source.
  24. ستحتاج إلى استخدام حزمة (package) تسمى webview_flutter، وتتيح لك عرض صفحات الويب داخل تطبيقك بشكل مدمج كالتالي: أولاً عليك بتثبيت الحزمة بفتح ملف pubspec.yaml في مشروع Flutter وأضف الحزمة التالية تحت قسم dependencies: dependencies: flutter: sdk: flutter webview_flutter: ^4.0.0 ضمن ملف الكود الخاص بالشاشة التي ترغب في استخدام الـ WebView بها، عليك بإضافة استيراد للحزمة: import 'package:flutter/material.dart'; import 'package:webview_flutter/webview_flutter.dart'; الآن استخدام ويدجت (Widget) WebView لعرض الصفحة من الموقع الخارجي: class ExternalLoginPage extends StatelessWidget { final String externalLoginUrl = "https://example.com/login"; // رابط صفحة الدخول الخارجية @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('External Login Page'), ), body: WebView( initialUrl: externalLoginUrl, javascriptMode: JavascriptMode.unrestricted, onPageFinished: (String url) { // هذا الدالة ستتم استدعائها عندما يتم تحميل الصفحة بالكامل }, ), ); } } بعد لذلك نأتي للعودة من الصفحة الخارجية بعد الانتهاء من عملية تسجيل الدخول، ونستخدم الملاحظات (pop) بواسطة Navigator للعودة إلى الشاشة السابقة، وعند العودة إلى الشاشة السابقة، تستطيع حفظ بيانات الدخول في حالة الحاجة لاستخدامها في التطبيق. ولحفظ بيانات الدخول في التطبيق بحيث لا يتطلب منك تسجيل الدخول في كل مرة، اعتمد على الحزمة المحلية (local storage) مثل shared_preferences لتخزين بيانات صغيرة مثل الاسم والحالة المسجلة. وقم بتثبيت حزمة shared_preferences عبر ملف pubspec.yaml: dependencies: flutter: sdk: flutter webview_flutter: ^4.0.0 shared_preferences: ^2.0.0 ثم استخدمها لحفظ بيانات الدخول في التطبيق. عندما تعود من صفحة الدخول الخارجية وتقرر الاحتفاظ بالمعلومات المسجلة، بحفظها في الـ shared_preferences: import 'package:flutter/material.dart'; import 'package:webview_flutter/webview_flutter.dart'; import 'package:shared_preferences/shared_preferences.dart'; class ExternalLoginPage extends StatelessWidget { final String externalLoginUrl = "https://example.com/login"; // رابط صفحة الدخول الخارجية @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('External Login Page'), ), body: WebView( initialUrl: externalLoginUrl, javascriptMode: JavascriptMode.unrestricted, onPageFinished: (String url) { // هذا الدالة ستتم استدعائها عندما يتم تحميل الصفحة بالكامل // هنا يمكنك التحقق من الصفحة التي تم تحميلها واستخدامها لحفظ البيانات المطلوبة if (url == externalLoginUrl) { // هنا يمكنك استخدام الـ SharedPreferences لحفظ بيانات الدخول saveLoginData("John Doe"); // افترضنا أن الاسم هو "John Doe" // بعد حفظ البيانات، قم بالعودة إلى الشاشة السابقة Navigator.pop(context); } }, ), ); } void saveLoginData(String username) async { SharedPreferences prefs = await SharedPreferences.getInstance(); prefs.setString('username', username); // يمكنك هنا حفظ المزيد من البيانات مثل كلمة المرور إن لزم الأمر } } وعند الحاجة إلى بيانات الدخول مرة أخرى، بإمكانك استرجاعها من shared_preferences بدون الحاجة لتسجيل الدخول كل مرة: void getLoginData() async { SharedPreferences prefs = await SharedPreferences.getInstance(); String username = prefs.getString('username'); // يمكنك استخدام الاسم المحفوظ هنا بشكل طبيعي في التطبيق }
  25. ما الفائدة من الشرط التالي: if (button.className === 'crash-btn crash-betbtn crash-betbtn--stop') }); حيث لا يوجد أي كود بعد لتنفيذه أو حتى return من أجل إنهاء الكود في حال تحقق الشرط. وأيضًا بخصوص الشرط في الكود التالي: if (button.className === 'crash-gamemountains.crash-gamemountains--game' && button.className !== 'crash-game__mountains') يحتوي على اختبارين، أولاً يتحقق من اسم الفئة الأولى، ثم يتحقق مرة أخرى من الفئة الأولى دون الفئة الثانية، فهل المراد هو التحقق من عدم تكرار الفئة الثانية في الفئة الأولى؟ حيث أن الكود الحالي غير مناسب لذلك. وربما تحدث مشكلة بسبب تتعيين قيمة textContent لزر الرهان (Bet)، فإذا كانت الفئة المستهدفة غير موجودة على الصفحة فسيؤدي ذلك إلى خطأ.
×
×
  • أضف...