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

Kais Hasan

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

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

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

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

    24

كل منشورات العضو Kais Hasan

  1. من الطبيعي أن تكون الأمور صعبة في البداية، عليك الاستمرار و الصبر. إن افضل طريقة لمذاكرة هذه الأمور هي التطبيق و محاولة التعديل لوحدك، أي مثلا تعلمت كيف يتم إنشاء فورم ببعض البيانات، حاول زيادة البيانات، حاول التحقق من البيانات و هكذا. تأكد من فهمك كل جزئية قبل الانتقال للدرس الذي يليه، و نحن هنا لمساعدتك، يمكنك سؤال ما ترغب به اسفل الدرس و سنجيب على أي استفسار و نوضح لك ما لم تفهمه.
  2. سأذكر الطريقة التي يمكنك عن طريقها النشر على ال apple store، في حال كانت الطريقة غير واضحة فهذا يعني أنه تحتاجين إلى زيادة معلوماتك في ال react native. في البداية علينا إعادة تفعيل ما يدعى بال ATS و هي (بشكل مختصر) طبقة حماية تمنع طلبات ال http، تسمح فقط ب https، و هذا أكثر أماناً، يمكن القيام بذلك عن طريق إزالة localhost من NSExceptionDomains و وضع قيمة NSAllowsArbitraryLoads على أنها false في ملف Info.plist في مجلد ios/ الخطوة التالية هي بناء التطبيق ك release و في هذه الخطوة يتم تجميع الملفات التي يمكن تجميعها و إلغاء قائمة المطورين التي لا يجب للمستخدمين الوصول لها، يمكن القيام بذلك عن طريق الذهاب في برنامج ال Xcode إلى Product ثم Scheme ثم Edit Scheme، بعدها نقوم باختيار الخيار Run من الخيارات على يسار الشاشة و نقوم بتعديل Build Configuration إلى Release. الآن نقوم بعمل build للمشروع ليصبح لدينا مجلد ال release الذي يحوي ما نريد نشره. بعد ذلك للنشر نقوم بما يلي: نقوم بتشغيل ال terminal و نذهب إلى مجلد ios و نكتب open و بعدها نقطة . و نضغط enter. نقوم الآن بالضغط مرتين على YOUR_APP_NAME.xcworkspace يجب أن يفتح ال Xcode. نقوم بالضغط على Product من ثم Archive و نقوم بوضع خيار ال device ك Any iOS Device (arm64). بعد نهاية العملية في الخطوة السابقة و في نافذة ال Archive نقوم بالضغط على Distribute App. نضغط على App Store Connect. نضغط على Upload و نختار كل الخيارات ثم نضغط على next. ثم نختار Automatically manage signing، و نضغط على Upload. يفترض أن يتم نشره الآن، طبعاً في حال كان التطبيق لا يحوي أخطاء، و هذا طبيعي حيث علينا التحقق من كل شيء على جهازنا ثم محاولة النشر.
  3. يفترض أن يوجد فعلاً عمود بالاسم Name_Center_id في قاعدة البيانات، لأن دجانغو يقوم بإضافة اللاحقة _id إلى نهاية اسم الخاصية التي قمنا بتعريفها في قاعدة البيانات، يفترض أن ينجح الأمر في حال كنتي قد قمتي بعملية تهجير للبيانات. في حال قمتي بذلك و لم ينجح الأمر فمن الجيد لو تستطيعين إرفاق ملفات المشروع كاملاً حتى يمكننا تحديد المشكلة بشكل دقيق. المشكلة الثانية التي طرحتيها غير واضحة، من فضلك قومي بشرحها بشكل أدق.
  4. ليس لدي معلومات عن كورس عن هذا الأمر، و لكن بالطبع يمكنك المحاولة و البحث و في حال واجهتك مشاكل يمكنك نشر سؤال آخر و سنساعدك في حله.
  5. العفو، هذا واجبنا. إن المكون Entry بشكل عام يستعمل لإدخال نص و ليس لعرض نص، في حال كنت متأكداً بأنه لن يتم إدخال نص يمكن القيام بذلك كما يلي: Entry1.insert(0, str(...)) يجب وضع ما تريده بدلاً من الثلاث نقاط. في حال كان من الممكن أن يتم إدخال نص و لكن تريد محي النص المدخل و إظهار ما تريده فقط يمكن القيام بذلك كما يلي: n = len(Entry1.get()) Entry1.delete(0, n) Entry1.insert(0, str(...)) و لكن أنصحك باستعمال المكون label في حال كنت تريد عرض شيء فقط بدون إدخال.
  6. عفوا و لكن هل يمكنك توضيح الخطأ عبر لقطة شاشة، او تحديد تماما ما الذي يحدث.
  7. في حال كان السيرفر يعمل على linux يمكنك استعمال ما يدعى بال cron و الذي يمكن عن.طريقه جدولة أي تعليمة تريد تنفيذها. الصورة التالية توضح كيفية اضافة جدولة: يمكنك الإطلاع أكثر على الأمر من هنا.
  8. إن القيم تصبح سلاسل نصية في ال combo box لذلك كل ما عليك هو تحويلها إلى رقم كما يلي: d[int(value1)]
  9. كل ما عليك القيام به هو استعمال القاموس d، أي بدلا من طباعة value1 نقوم بطباعة d[value1]، و بذلك نحصل على القيمة المقابلة.
  10. نعم كل ما ذكرته صحيح، لكن التابع يجب ان يضع القيمة الموافقة و ليس فقط أن يطبع عبارة ok، يمكنك طباعة المتغير event لترى ماذا يحوي.
  11. في البداية قم باستخراج الأعمدة التي تريدها إلى لائحة، كما قمت بذلك مع الأسماء مثلاً، بعد ذلك يمكننا المرور على اللائحتين و وضع قيمة أحدهما كمفتاح و الأخرى كقيمة (ما نضعه في ال combo يكون المفتاح و القيمة ما يقابله)، سأعطيك مثالاً على لائحتين عشوائيتين: a = ["n1", "n2", "n3"] b = [11, 22, 33] d = {k:v for (k, v) in zip(a, b)} print(d) # {'n1': 11, 'n2': 22, 'n3': 33} تعليمة zip تقوم بوضع القيم المتقابلة من اللائحتين سوياً، و من ثم قمت بتحويل هذه القيم إلى مفاتيح و قيم في قاموس. بعد أن يصبح لديك هذا القاموس يجب عليك أن تربط حدث اختيار قيمة من ال combobox بتابع يقوم بأخذ القيمة الحالية لل combo و عرض ما يقابلها من العمود الآخر بناء على هذا القاموس الذي قمنا بكتابته، لقد قمت بذكر التعليمة التي تسمح لنا بالربط في تعليق سابق.
  12. انت تقوم باستعمال قاموس لملئ الخانات في ال combo box، و أصبح لديك غرض من الصف الخاص بال combo box، هذا الصف لديه حدث هو اختيار قيمة، يمكنك ربط هذا الحدث بتابع، هذا التابع سيأخذ القيمة الحالية لل combo box و ينظر ما يقابلها، يمكنك إيجاد المتقابلات عن طريق صنع قاموس اضافي مفاتيحه القيم من ال combo box و القيم هي ما يقابل هذه المفاتيح، أي ما تريد عرضه في ال Entry. من فضلك قم بمحاولة استعمال هذه الأفكار و تجربة ذلك، إعطاءك الحل بشكا مباشر ليست أفضل طريقة للتعلم.
  13. للقيام بهذا الأمر نقوم باستعمال ال events، إنه مفهوم عام في تطوير تطبيقات سطح المكتب، نقوم بربط تابع ما بحدث ما، مثلاً هنا يمكنك ربط تابع ما بحدث اختيار قيمة من ال combo box. هناك مثلاً الحدث <<ComboboxSelected>> و الذي يحدث عندما يتم اختيار قيمة من ال combo box، يمكنك تمرير تابع ليتم استدعاءه في هذه الحالة كما يلي: combo.bind("<<ComboboxSelected>>", callbackFunc) هنا callbackFunc هو التابع الذي سيتم استدعاءه عند حدوث الحدث المطلوب، في هذا التابع يمكنك الحصول على القيمة التي تم اختيارها (لا أذكر بالضبط اسم الطريقة و لكن يمكنك طباعة ما يتم تمريره لهذا التابع لرؤية كيفية ذلك). عند الحصول على القيمة يمكنك عندها ببساطة تغيير قيمة ال entry إلى تلك القيمة.
  14. مرحباً شادي، أفترض أنك تقصد بكتابة اسم السائق هو كتابته في أحد الأعمدة مثل جدول لكل رحلة و كل سائق، أي لديك عمود يحوي أسماء السائقين و عدد مرات تكرار اسم السائق يدل على عدد الرحلات. في هذه الحالة يمكنك استعمال التعليمة COUNT على العمود الخاص بالسائقين، بحيث من أجل كل سائق تكون المعادلة الخاصة به هي COUNT لاسم هذا السائق في عمود السائقين. في حال لك يكن هذا ما تريده من فضلك أرفق ملف اكسيل يحوي مثالاً يدوياً عن الأمر حتى يمكنني تزويدك بالمعادلة المطلوبة. تحياتي لك.
  15. هناك حزمة تدعى label_marker يمكنك عن طريقها إضافة marker يحمل نص بحيث يظهر النص مباشرة، يمكنك استعمالها مع مكتبة google_maps_flutter للقيام بإضافة ما تريد إلى الخريطة على شكل marker و له نص. في حال كان لديك المتغير الذي نضع فيه ال markers (سأفترض أنك على دراية بكيفية القيام بذلك في مكتبة google_maps_flutter ) فإنه يمكنك إضافة marker يحمل نص بالطريقة التالية: markers.addLabelMarker(LabelMarker( label: "TextToShow", markerId: MarkerId("idString"), position: LatLng(10.0, 11.0), backgroundColor: Colors.green, )).then((value) { setState(() {}); }, ); لاحظ هنا كيفية بساطة استعمال هذه الحزمة، فيمكنك وضع النص في الخاصية label و باقي الخصائص أعتقد أنها بسيطة مثل المعرف الخاص بال marker و موقعه و لون الخلفية. يمكنك الإطلاع أكثر على هذه الحزمة من هنا.
  16. هناك ما يسمى escaping كل لغة تقوم به بشكل مختلف، و هو عبارة عن إضافة رمز ما للدلالة ان الرمز الذي يليه هو رمز خاص، مثلا في c++ نقوم بذلك باستعمال الرمز \ عليك البحث عن كيفية القيام بال escaping ضمن اللغة التي تستعملها.
  17. إن كورس علوم الحاسوب مناسب لمتطلباتك، فهو يحتوي على الأساس النظري المطلوب لتكون مهندس و ليس فقط مبرمج. إن مهندس البرمجيات يكون لديه خبرة و معلومات اكبر بالناحية النظرية التي تشمل التخطيط و التصميم الخاص بالبرنامج، على عكس المبرمج الذي ينفذ مهتم برمجية محددة.
  18. في حال كنت تريد التجريب فقط، فإن AWS تقدم استضافة مجانية لمدة 3 أشهر، مع الكثير من الخيارات التي يمكنك الإختيار بينها. الاستضافة المجانية ضمن LightSail و هي خدمة داخل AWS و تعطيك وصول إلى قاعدة بيانات و كل ما يلزمك من أجل رفع موقع من تخزين سحابي و حتى خيار أن تقوم بالرفع ضمن docker container، لقد قمت بتجريب هذه الاستضافة مع docker container و كانت ممتازة، و أعتقد حتى بدون docker container ستكون ممتازة فهي تقدم كل الخدمات التي من الممكن أن تحتاجها، و في حال أحببت يمكنك تمديد الاستضافة بمبلغ ليس بالكبير (حسب ما أذكر حوالي ال 25 دولار). كما أن Google Cloud Hosting تقدم أيضاً استضافة مجانية لفترة، بشكل أساسي تقوم بإعطاءك 300 دولار يمكنك إنفاقها كما تشاء على خدمات غوغل الخاصة بالاستضافة، أيضاً هي خيار أكثر من جيد.
  19. كإضافة على ما ذكره المدرب في جوابه السابق، فإن الموضوع لا يقتصر على المعلومات، حيث أنه ينبغي عليك أن تقوم بمحاولة تجريب ما تعملته لوحدك و محاولة التعديل و التغيير لرؤية ما الذي سيحدث عندها، حيث أنه في أي كورس لا يتم ذكر كل التعديلات الممكنة فهذا غير ممكن من ناحية الوقت كما أنه ليس من الجيد القيام بذلك، حيث أن الأفكار واحدة مهما اختلف التعديل و لكن عندما تقوم أنت بالتجريب لوحدك قد تكتشف أنك لم تفهم فكرة ما بشكل جيد و تقرر العودة و مشاهدة الدرس الخاص بهذه الفكرة مجدداً. أيضاً من الجيد القيام بمشاريع عندما تصبح على إلمام جيد بكل الأفكار الموجودة في الكورس و تكون قد جربت التعديل و التغيير فيها، القيام بمشاريع هو أفضل طريقة لتعلم الأمور، حيث أنك لن تبحث عن شيء ما لم تحتجه و هذا ما يجعل ما تتعلمه غير قابل للنسيان بسهولة، على عكس ما تتعلمه بشكل نظري فقط.
  20. سأساعدك في كيفية إيجاد قيم العمود الأول من القاموس و أعتقد أنك عندها تستطيع إضافتهم بسهولة إلى ال combo (يجب أن يكون هناك تعليمة جاهزة لإضافة list). سأستعمل قاموس شبيه بما قمت بكتابته و لكن سأضع قيم عشوائية من أجل المثال فقط. d = { 1: {"Employee-number":11,"Employee-name":"n1","employee-phone":111,"Employee-email":"e1"}, 2: {"Employee-number":22,"Employee-name":"n2","employee-phone":222,"Employee-email":"e2"}, 3: {"Employee-number":33,"Employee-name":"n3","employee-phone":333,"Employee-email":"e3"} } numbers = [row["Employee-number"] for row in d.values()] names = [row["Employee-name"] for row in d.values()] print(numbers) print('-'*20) print(names) # output: # [11, 22, 33] # -------------------- # ['n1', 'n2', 'n3'] يمكن جلب قيم أي عمود بنفس الطريقة، لاحظ هنا أن values تقوم بجلب القيم الخاصة بالقاموس، في حال كنت تريد المفاتيح بالإضافة إلى القيم يمكنك استعمال items بدلاً من values، و ستجلب لك المفتاح و القيمة المقابلة له.
  21. مرحباً آمنة، يمكننا كتابة ذلك بالطريقة التالية: using System; public class Test { public static void Main() { string str_n = Console.ReadLine(); int n = int.Parse(str_n); int i = 0; int sum = 0; do { i++; if (i % 2 == 1) sum -= i; else sum += i; } while(i < n); Console.WriteLine(sum); } } لاحظي هنا أننا نمر في الحلقة طالما i أصغر من n لأنه عندما يصبح n نكون فعلياً قد أضفنا (أو طرحنا) قيمته، و لذلك لا داعي للإكمال بعد ذلك. و في كل مرة نقوم بزيادة i في البداية (لاحظي أنا بدأت من الصفر و نحن لا نريده فلا خطأ في الزيادة من البداية). ثم نقوم في كل مرة باختبار فيما إذا كان i فردي عن طريق حساب باقي قسمته مع ال 2، في حال كان باقي القسمة 1 فهذا يعني أن العدد فردي، و إلا يكون زوجي، في حال كان فردي نقوم بطرح قيمته من المجموع و إلا نقوم بإضافته إلى المجموع. في حال كان هناك أي جزء آخر غير مفهوم في الكود من فضلك قومي بذكره حتى أستطيع شرحه لك. تحياتي لك.
  22. مرحباً جمال، إن هذه البنى تشكل حجر الأساس للكثير مما هو موجود في لغات البرمجة من أمور جاهزة، مثلاً في ال c++ يوجد ما يسمى map و هي مبنية على أساس أحد أنواع الأشجار، بالإضافة إلى ال set و غيرها الكثير. هذه البنى موجودة في كل لغات البرمجة، مثلاً في بايثون ما يقابل ال map هو ال dict. هذه البنى سمحت بتسهيل الكثير من العمليات، فمثلاً ال map في c++ يمكنك وضع قيم فيها و استخراج قيمة بسرعة كبيرة و هذا ما سمحت به الأشجار. تطبيقات أخرى غير هذه البنى هي قواعد البيانات، فقد تم بناء أغلبها باستعمال أحد أنواع الأشجار، و هذا ما سمح لنا بعمليات البحث و الإضافة و الحذف و التحديث السريعة جداً و المرنة جداً. بشكل عام أي استعمال لبنى المعطيات أو أي تخزين أو عمليات بحث و تحديث و حذف ستجد الأشجار موجودة فيه. ال linked-lists أيضاً مفيدة، ففي حال لم تكن تريد غير حذف و إضافة سريعين في أي مكان فهي تكفي، لكن بشكل عام لن تجد لها تطبيقات كثيرة مثل الأشجار، لكن كما ذكرت في حال كنت تريد إضافة و حذف سريعين و لا تريد بحث سريع فهي أسهل للكتابة بكثير من أنواع الأشجار المستعملة في العمليات الأخرى. تحياتي لك.
  23. بشكل عام يمكنك القيام بذلك بأي فريموورك، التشعب و التردد في اختيار ما تريد استعماله هو مشكلة شائعة جداً، كل ما عليك القيام به هو عدم القلق من فكرة اختيارك لخيار خاطئ لأنه لا وجود لخيار خاطئ. نعم قد تكون فريم وورك احسن من أخرى في تطبيق معين و لكن بالمجمل كل له نقاط قوة و ضعف. أنصحك بأن تبدأ بفريم وورك تستعمل لغة برمجة أنت على دراية بها، فهذا سيسرع عملية تعلمها.
  24. يمكنك القيام بأي عملية تريدها على مصفوفة باستعمال map و التي تقوم بتطبيق تابع معين على كل عنصر من عناصر المصفوفة. حسب ما فهمت فأنت تريد طرح قيمة معينة من كل عنصر في المصفوفة، يمكنك القيام بذلك كما يلي (سأعطيك مثال مبسط على مصفوفة أرقام): const a = [1, 4, 9, 16]; const new_a = a.map(x => x - 4) console.log(new_a); // [-3, -2, 0, 4, 12] هنا لاحظ كيف قمت بطرح القيمة 4 من كل عنصر من عناصر المصفوفة، طبعاً map لا تقوم بالتعديل على المصفوفة مباشرة و إنما تقوم بإنشاء مصفوفة جديدة.
  25. يمكنك تجربة مكتبة fletr و التي تسمح لك بكتابة تطبيقات فلاتر باستعمال البايثون..اي يمكن تضمينها في ملفات البايثون الخاصة بك لاستعمالها. الشرح عن كيفية استعمالها طويل و يمكنك الاطلاع عليها من هنا.
×
×
  • أضف...