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

Wael Aljamal

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

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

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

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

    218

كل منشورات العضو Wael Aljamal

  1. R يعبر عن صنف الموارد ومجلد res وفيه ملفات XML مثل ملف الألوان colors وملف النصوص Strings وهذا الملف موجود لنكتب ضمنه السلاسل النصية الثابتة في التطبيق ولسهوله الوصول إليها. الخطأ بسبب عدم وجود سلسلة باسم page_1 حيث من المفترض ألا تستخدم R.strings أي ليست إلزامية، ضع أي سلسلة نصية لتعبر عن المفتاح. استخدم أي مفتاح يدل على الاستخدام مثلاً putString("PageFragment", "PageFragment1") أو putString("PageNumber", "PageFragment1") وتأكد من استخدام نفس المفتاح في كل من get و put لأننا نخزن قيمة واحدة.
  2. هل تأكدت من أن وضع المتصفح هو تلقائي (حسب النظام) وليس ثابت Dark دائماً، أي لم تقم أيضاً بتثبيت ثيم داكن مخصص. وتأكد من تحديث الصفحة. ويجب اغلاق المتصفح وإعادة فتحه ليأخذ بالتعديلات عند تغييرها في نظام التشغيل.
  3. أرجو توضيح المشكلة وإرفاق بنية ولو مبسطة للملف و الحقول لديك.
  4. إن لم يكن لديك خلفية عن استخدامها أرجو قراءة بعض المقالات أو مشاهدة دروس في يوتيوب وسوف تتعلم الطريقة.. أنا أشرح لك الفكرة و أسلوب استخدامها قدر الإمكان. وتأكد من تعلم أساسيات جافا بطريقة جيدة
  5. أي دورة عن يوتيوب و الموقع الرسمي dart.dev
  6. أحسنت تماماً جميع النقاط سليمة. الموضوع اختياري حسب ما تحب الدخول به. Flutter تساعد في التصميم مثل CSS و كما تساعد في بناء التطبيقات لجميع المنصات Dart ليست مشهورة جداً في BackEnd فعي لغة جديدة نسبياً يمكنك تعلم جافاسكربت و Dart فهما قريبتين من بعضهم.
  7. عليك اعتبار أن لغة Dart هي لغة برمجة مستقلة بذاتها مثل لغة جافاسكربت، ولكل منها بيئة عمل خاصة بها. إن تصميم تطبيقات بلغة Dart يعتمد بشكل كبير على إطار عمل Flutter Framework فهي مسؤولة عن بناء الواجهات الأمامية للمستخدم في التطبيقات ولا يوجد مكتبة بنفس كفائة وميزات Flutter ل Dart. تطبيقات الويب عن طريق Dart بالنسبة للوجهات Front End تعتمد على Flutter أما ك BackEnd لها مكتبات خاصة لتعمل ك مخدم Server. مثلاً جافاسكربت تعتمد على بيئة NodeJS لتعمل مثل مخدم Server. إن كلاً من رياكت نتيف React Native ودارت فلاتر Dart Flutter هي تقنيات مخصصة لبناء واجهات المستخدم و تعمل فقط في جزء Front End ويمكنها العمل مع أي Back End حيث لا يوجد أي فرق، التطبيقات تتصل على المخدم حسب بروتوكول الويب HTTP وهي طريقة منفصلة عن منطق البرمجة، أي ما يربط بين الواجهة الأمامية والخلفية هي فقط البيانات التي تتم مناقلتها عبر الشبكة وتكون بتنسيق JSON أو XML والتي يمكن التعامل معها في كل من Front & Back End. جاءت React Native كتطوير لمكتبة React وهي تعتمد مباشرة على HTML - CSS في بناء المكونات و لغة جافاسكربت كلغة البرمجة لتحقيق المنطق اللازم في التطبيق. أما Dart تعمل مكان جافاسكربت وهي لغة البرمجة التي تعتمد عليها Flutter من ناحية التصميم (HTML - CSS). ولن تحتاج لتعمل HTML - CSS أبداً في حال دخولك مجال Flutter. Flutter تقوم على تصريف الشيفرة الخاصة بها لعدة منصات (أندرويد - IOS - windows وغيرها) ومنها web حيث يتم تحويل شيفرة DART لمثيلها من شيفرة JavaScript بالإضافة لتصبح المكونات HTML - CSS ليعرضها المتصفح. بداية Flutter كانت تعمل على android - ios ثم تمت إضافة الويب ويتم تطويها باستمرار لكن حاليا React أفضل في مجال الويب و فيها مكتبات للويب بشكل أكبر أي تتفوق في مجال الويب أكثر قليلاً أما في باقي المنصات Flutter أفضل. للدخول في تفاصيل أكثر المقارتة تصبح بين React Native Web vs. Flutter web.
  8. أرجو مراجعة التعليق السابق بما يتعلق ب serializearray
  9. كلا لايوجد ملخصات للدروس، يمكن لكل طالب كتابة ملاحظاته بشكل شخصي وهذا أفضلله لكي يرسخ المعلومات و الأفكار الذي يدرسها، فإن وجود pdf سيعمل على جعله أكثر كسلاً واعتماداً على مصادر متوفرة، كما أن هنالك تعديلات مستمرة في مختلف مجالات البرمجة، وإن البحث على الانترنت سيعطيك المعلومات الأحدث بدل وجود كتب pdf غير محدثة، ولكن بالتأكيد يمكنك تصفح أي مواقع توثيق للغات البرمجة والتقنيات التي تدرسها لمراجعة المعلومات مثل موسوعة حسوب و مقالات أكاديمية حسوب في قسم دروس و مقالات.
  10. إن طريقةاستقبال رد 201 تختلف عن 200 هل يمكنك تجريب رد حالة 200 أين تقرأ الرد ب undefined? serializearray ضرورية لأن اي شيء يتم تمثيله كسلسلة نصية لنستطيع وضعه في قاعدة البيانات، فهي لاتقبل تخزين كائنات برمجية مباشرة
  11. حاول طباعة proClassification ضمن الدالة add product و اخبرنا بما يظهر. وادتأكد هل الطلبة تصل لهذا المتحكم.
  12. على الأغلب المشكلة في استخدام جيكويري، طالما أنه لدينا أكثر من عنصر، يتوجب المرور عليهم بحلقة ثم قراءة كل منهم. إما نستخدم حلقة each let proClassification = []; $.each($(".selectpicker"), function(){ proClassification.push($(this).val()); }); console.log(proClassification); أو map var proClassification = $('.selectpicker').map(function() { return $(this).attr('value'); }).toArray(); console.log(proClassification);
  13. يتوفر الدالة getSize التي تعيد حجم الملف بال bytes ويمكن استدعائها بالطريقة التالية: $imageSize = $request->file('img')->getSize(); وهي متاحة من لارافل 5 وأحدث. كما يمكننا استخدام الواجهة Storage Facade use Illuminate\Support\Facades\Storage; public function get_size($file_path) { return Storage::size($file_path); } وهي تدعم أيضاً الملفات المرفوعة على S3 من خلال تحديد القرص disk s3 use Illuminate\Support\Facades\Storage; public function get_size($file_path) { return Storage::disk('s3')->size($file_path); } وإن أردت الحجم بطريقة مقروءة وأوضح استعمل الدالة التالية: <?php /** * Format bytes to kb, mb, gb, tb * * @param integer $size * @param integer $precision * @return integer */ // نمرر حجم الملف public static function formatBytes($size, $precision = 2) { if ($size > 0) { $size = (int) $size; // معرفة عدد الخانات من حساب مضاعفات 1024 بالنسبة للنظام 2 $base = log($size) / log(1024); // جلب دليل المصفوفة $suffixes = array(' bytes', ' KB', ' MB', ' GB', ' TB'); // إعادة سلسلة نصية تعيد الحجم مع اسم الواحدة return round(pow(1024, $base - floor($base)), $precision) . $suffixes[floor($base)]; } else { return $size; } } التوثيق: laravel 9 filesystem file-metadata
  14. انتبه عند استخدام الدالة end فهي تنقل مؤشر المصفوفة ليشير لآخر عنصر فيها، أي أن الوصول للمصفوفة بعد تنفيذ ذلك السطر سوف يستهدف آخر عنصر فقط. فهو يعيد قيمة آخر عنصر و يحرك المؤشر الداخلي للمصفوفة إليه. استخدمه بانتباه. لاحظ الشيفرة السابقة حتى بدون الاعتماد على القيمة المعادة من end يتم الوصول للمفتاح الأخير مباشرة <?php $user = array( 'first_name' => "user name", 'email' => "mail@gmail.com", 'age' => 34, ); end($user); $key = key($user); var_dump($key); // string(3) "age" ?> يمكننا استخدام الدالة array_slice <?php $user = array( 'first_name' => "user name", 'email' => "mail@gmail.com", 'age' => 34, ); echo key(array_slice($user, -1, 1, true)); // age ?> يمكن استعمال end لكن مع غير المصفوفة الأصلية بشكل مباشر بل مع مصفوفة المفاتيح الخاصة بها <?php $user = array( 'first_name' => "user name", 'email' => "mail@gmail.com", 'age' => 34, ); echo end(array_keys($user)); استعمال array_key_last مع إصدار PHP >= 7.3 طرق أخرى آخر عنصر من مصفوفة المفاتيح echo array_keys($array)[count($array)-1]; echo array_pop(array_keys($array)); توثيق: array_keys - array_slice
  15. أنصحك بمتابعة دورة خاصة بتعديل قوالب بلوغر ومنها تتعلم الطريقة الصحيحة لتخصيص هذه البيئة و التعديل عليها. أو توظيف مبرمج من موقع مستقل يمكنه تعليمك المواضيع المهمة
  16. هل قمت بتعريف page1 ضمن ملف strings؟ يجب أن تعمل ولكن ضعها في دالة منفصلة ليكون الكود أرتب وأفضل
  17. لقراءة و تخزين أكثر من عنصر نحتاج لعمل استعلام من خلال document.querySelectorAll فهي تعيد مصفوفة و نمرر لها محدد الوصول المناسب وهنا لدينا deck# li لجلب كل عناصر list item من ضمن div. elements = document.querySelectorAll('#deck li');
  18. بعد النقر على زر ما، نستدعي دالة تقوم بإظهار البطاقات ثم ضمنها نستدعي setTimeOut مع تمرير 2000 ميلي ثانية (2 ثانية) ليتم تنفيذ الدالة المرتبطة بها بعد هذه المدة. في HTML <button onclick="showCards();"> start game </button> والكود: function showCard() { // منطق إظهار البطاقات // بعد ثانيتين ستختفي window.setTimeout(hideCards, 2000); } function hideCards() { // منطق إخفاء البطاقات }
  19. يمكنك وضعه داخل Main activity بالطبع، المهم نستعمل get بأول تشغيل التطبيق لنعرف أي Fragment نريد عرضه، و عند نقر المستخدم و تغيير Fragment نعمل put String لتحديث قيمة آخر Fragment تمت زيارته
  20. تمام، عليك تمرير المسار النسبي لملف الصورة ضمن URL تأكد من وضع ملف الصورة بجانب ملف التنسيقات ويمكنك وضع رابط من الانترنت مباشرة.
  21. إن البرمجة و إطارات العمل و لغات البرمجة تتطور و تتعدل باستمرار لأن مطوري التقنيات يجدون طرق جديدة وأفضل في بناءها و كيفية تسخيرها لتحسن الأداء أو استهلاك الموارد أو زيادة الحماية. حاليا أحدث إصدار ل Flutter هو 2 يمكنك البدء بتعلمه. وتتوفر الكثير من المصادر مثل قنوات يوتيوب، بالإضافة للتوثيق الرسمي docs.flutter.dev وقناة فلاتر على يوتيوب. تأكد أن إصدار الكورس في النصف الثاني من 2021 أو في 2022 وتأكد طالما لديك رغبة بالتعلم سوف تستمر و إن التعديلات والتغييرات المستمرة ليست فقط في Flutter بل في مجال علوم الحاسب ككل لأنه أكثر مجال متطور و محدث
  22. للتحقق من ملف XML: نتأكد من أن كل وسم تم فتحه يجب إغلاقه بنفس الاسم وأن تداخل العناصر سليم من تم فتحة أخيراً نغلقه أولاً <abc> <cde> </cde> </abc> وفي مثالك: <funcdef> <function>ctime</fnuction> <!-- ^^^^^^^^^ ^^^^^^^^^^^ --> </funcdef> لانضع فراغات في اسم الوسم أو وسم الإغلاق <parameter> time < /parameter>,as returned by ^^^ لا نقوم بتعريف نفس الخاصية أكثر من مرة <para><emphasis role="strong" targetgroup="beginners" role="strong"> ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^ وبالنسبة ل &ampdoubleclick; هنا نقوم بجلب قيمة Entity References بدون أن تكون معرفة مسبقاً يجب وضع قيمة لها <!DOCTYPE definition [ <!ENTITY red " & # 1 7 4 ;"> مثال <!ENTITY ampdoubleclick "&ampdoubleclick;"> ]> حيث ان "&ampdoubleclick;" هي القيمة التي نريدها <!ENTITY ampdoubleclick "132131"> أي جميع هذه ال Reference يجب أن يتم تعريفها مسبقاً لنستطيع قراءة قيمتها لاحقا <?xml version="1.0"?> <!DOCTYPE definition [ <!ENTITY ampdoubleclick "1231"> <!ENTITY ampbuttonleft "9987"> <!ENTITY ampidhelp782 "979798"> <!ENTITY ampidhelp785 "983759"> ]> <function> <title>ctime</title> <funcsynopsis> <funcdef> <function>ctime</function> </funcdef> <paramdef> <parameter>time</parameter> <parameter role="opt">gmt</parameter> </paramdef> </funcsynopsis> <para>This function converts the value <parameter> time </parameter>,as returned by <function>time()</function> <function>file_mtime()</function>, into a string of the form produced by <function>time_date()</function>. If the optional argument <parameter>gmt</parameter> is specified and non-zero,the time is returned in <parameter>gmt</parameter>. Otherwise, the time is given in the local time zone. </para> <para><emphasis role="strong" targetgroup="beginners"> Related topics</emphasis> </para> <para>&ampdoubleclick; the <mousebutton>LEFT &ampbuttonleft;</mousebutton> mouse button on a topic </para> <itemizedlist> <listitem> <para><ulink url="&ampidhelp782;"><function>file_mtime()</function>built-in function</ulink> </para> </listitem> <listitem> <para><ulink url="&ampidhelp785;"><function>time()</function> built-infunction</ulink> </para> </listitem> </itemizedlist> </function>
  23. عند كل تنقل إلى Fragment ما، علينا حفظ هذا الانتقال مثل الاحتفاظ برقمه مثلاً. وبذلك عند فتح التطبيق نقرأ قيمة shared preff وفيه رقم آخر Fragment وبذلك نفتحه. عملية تحديث رقم Fragment في كل مرة ننتقل لواحد مختلف (مكررة في كل Fragment ) عملية قراءة الرقم مرة واحدة عند فتح التطبيق (في Fragment الرئيسي الافتراضي) ثم فتح الFragment الهدف عند فتح التطبيق نطبق التالي: // قراءة اسم آخر نشاط SharedPreferences preferences = getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); String activityTag = editor.getString(getString(R.string.last_viewed_activity_tag), null); // نشاط افتراضي في حال فتح التطبيق لأول مرة Class initialActivityClass; // الاختيار حسب المس النشاط switch (activityTag) { case "CoolActivity": initialActivityClass = CoolActivity.class; break; case "WowActivity": initialActivityClass = WowActivity.class; break; default: initialActivityClass = MainActivity.class; break; } // إطلاق النشاط Intent intent = new Intent(this, initialActivityClass); startActivity(intent); finish(); عند تغيير fragment فقط نعمل putString بدل get و نخزن قيمة تدل على Fragment SharedPreferences preferences = getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); String activityTag = editor.putString(R.string.last_viewed_activity_tag, "Fragment name / number" ); ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  24. يمكنك إنشاء كائن shared preference له مفتاح معين لهذه المهمة مثل lastFragment في كل مرة تنقل على صفحة جديدة تقوم بتخزين رقم الصفحة فيه عن طريق الدالة putString ، و عند بداية التطبيق تقرأ قيمة هذا المفتاح عن طريق get و تقوم بعمل التوجيه لفتح آخر صفحة تم فتحها.
×
×
  • أضف...