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

Wael Aljamal

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

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

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

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

    218

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

  1. إن HTML5 هي تطوير وتحسين لـ HTML. حيث أن لهما نفس طريقة الكتابة و آلية العمل. قام المطورون بإضافة العديد من الوسوم الجديدة مثل : audio - video - canvas حيث أصبحت HTML هي نفسها تشغل الصوت و الفيديو. وإضافة canvas لعمل رقعة في الصفحة و القدرة على إضافة مكونات لها مثل صور و نصوص و تحريكها (تستخدم أحيانا للألعاب). دعم عملها على مختلف المتصفحات بسبب مشاكل التوافقية مع الإصدار الأقدم مع إضافة validation موحدة. كما أضافو التخزين المحلي الذي يتم التحكم به عن طريق JS أي Local Storage. إضافة النمط date لعنصر الإدخال input. تحسين الويب بإضافة الويب الدلالي (semantic web) وإضافة عناصر تدل على محتواها مثل: article-div-nav-aside-header-section-strong حيث نضع تسمية موافقة للمحتوى لتوضح أجزاء الصفحة. ومواضيع متقدمة خاصة بتطبيقات الويب
  2. كما ذكرت، يحدث الخطأ عند قراءة خلية فارغة، فعلينا وضع شرط للتأكد من احتواء الخلية على بيانات قبل قراءة القيمة منها مثلا: قبل استخدام int col1 = (int) nextCell.getNumericCellValue(); لتصبح: int col1 = -1; قيمة ابتدائية غريبة عن بيانات الجدول if (nextCell.getNumericCellValue() != null) { col1 = (int) nextCell.getNumericCellValue(); } يمكنك تمرير قيم غير مستخدمة مثلا -1 في حالة int و سلسلة تحوي رمز معين في حال كان محتوى الخلية هو نص.
  3. هل قمت بتحديد "admob_app_id" ضمن android/app/google-services.json بعد العنصر "services" حيث سيكون بهذا الشكل: "admob_app_id": "ca-app-pub-your app~id" يمكن أن تجد معرف التطبيق هنا admob panel/ your app / your banner name / Implementation instructions / bullet nr. 3 وفي AndroidManifest.xml تأكد من وضع : <meta-data android:name="com.google.android.gms.ads.AD_MANAGER_APP" android:value="true"/> بشكل عام اتبع توصيات المكتبة admob_flutter في حال أي نقص آخر يجرى مراجعة توثيق غوغل للإعدادات من هنا1 و هنا2
  4. ربما إعدادات بيئة المشروع غير محددة بالشكل الصحيح، ولا تناسب المشروع، أي أنه تم وضع ذاكرة صغيرة نسبيا وهي لا تكفي. يمكننا من القائمة Run Configurations --> Run --> اختيار المشروع ومن ثم "JRE" --> ونضع -Xmx1024m أو أكبر يمكن تحديد الذاكرة افتراضيا لجميع المشاريع عن طريق: Run --> Run Configurations --> اختر "JRE" tab --> ثم ادخل -Xmx1024m
  5. في ملف بنية المشروع META-INF/MANIFEST.MF يجب تحديد الحزمة package التي تحوي الدالة main ليبدأ تنفيذ البرنامج منها. حيث يتم تحديدها عن طريق السطر التالي: Main-Class: com.mypackage.MyClass حيث أن هذا الصنف يحوي الالة main: public static void main(String[] args) يمكن إضافة الملف META-INF/MANIFEST.MF للمشروع بتنفيذ التعليمة التالية في سطر الأوامر: jar cmvf META-INF/MANIFEST.MF <new-jar-filename>.jar <files to include> مع تحديد اسماء الملفين أو التعليمة التالية: java -cp app.jar com.somepackage.SomeClass لتحديد الصنف الذي يحوي main عند التنفيذ. في حال استخدام NetBeans أو Eclipse يمكن تعديل الملف المذكور من الواجهة الرسومية في إعدادات المشروع.
  6. تتعلق نتائج البحث بما يُدعى SEO والتي هي search engine optimizer : محسن نتائج البحث، حيث تقوم محركات البحث بالبحث عن أفضل تطابق بين الجملة التي أدخلها المستخدم و الجملة الموجودة في دليل المحرك، ويقوم بمطابقة الكلمات المفتاحية و من ثم ترتيب النتائج حسب علاقة رياضية. لكي تظهر خدمتك في أعلى ترتيب ننائج البحث، عليك كتابة توصيف الخدمة بدقة بما يتناسب مع مايدخله مستخدم ما عند البحث، أي تكون الجملة التي يبحث عنها المستخدم أقرب للعنوان الذي وضعته للخدمة من شخص آخر يقدم خدمة مماثلة. بالإضافة لذلك عليك تكرار الكلمات المفتاحية المهمة في الوصف بطريقة مقبولة (تكرر الكلمة لكن ضمن سياق جيد) وهذا يزيد من فرصة عرض فرصتك.
  7. يمكنك التوجه إلى موقع codeforces مثلا، وهو موقع مختص في المسابقات البرمجية. يمكنك من تصفح المسائل البرمجية من تبويب problem set حيث أن المسائل من نوع A هي الأسهل ثم B أصعب ثم C تصبح تعتمد على الخوارزميات في حلها.. بعد قرائتك لمسألة ما، تكتب حلاً لها في محرر الأكواد الذي تستخدمه عادة وتتأكد من تنفيذ الأمثلة sample test الموجودة في صفحة المسألة ثم يمكنك من رفع ملف الحل submit من صفحة المسألة بجهة اليمين بعد اختيار للغة البرمجة #C والإصدار الذي تستخدمه. في حال كان الحل صحيح سوف يعطيك Accepter و إلا wrong answer أو شيئ آخر حسب حلك.
  8. تكمن المشكلة في محاولة الدالة لقراءة قيمة لكن هذه القيمة غير موجودة. و يحدث الخطأ تحديدا في الجزء : String parentId = it.next(); String childId = it.next(); حيث علينا قبل محاولة القراءة التأكد في حال وجود العنصر أم لا باستخام الشرط: String parentId = ""; if (it.hasNext()) parentId = it.next(); String childId = ""; if (it.hasNext()) childId = it.next(); وهكذا نحل المشكلة
  9. مرحبا محمد، المثال الذي أدرجته هو مثال عام، لتوضيح بنية صفحة الاتصال باستخدام mysqli مع شرط التحقق من نجاح الاتصال. الشرط الثاني للتأكد من وجود بيانات و في المشاريع الحقيقية يتوجب إضافته لنتفادى حصول أخطاء وعدم وجود بيانات. وجود المتغير ضمن جسم الحلقة يختبر الشرط مباشرة لأن هذه المتغيرات هي أغراض وعند اختبارها في شرط تعيد قيمة true في حال احتوت بيانات، وفي حال كانت فارغة يعيد null أي false وهي اسلوب يختصر بعض الأسطر البرمجية. للتعلم عن باقِ دوال mysqli يمكنك تصفح موسوعة حسوب أو موقع w3schools. بالتوفيق
  10. أقترح عليك استخدام mysqli انتبه لحرف i في نهاية التعليمة حيث أنها النسخة المحدثة من mysql في php واستخدامها أفضل. <?php $mysqli = new mysqli("localhost","my_user","my_password","my_db"); if ($mysqli -> connect_errno) { echo "Failed to connect to MySQL: " . $mysqli -> connect_error; exit(); } $sql = "SELECT Lastname, Age FROM Persons ORDER BY Lastname"; if ($result = $mysqli -> query($sql)) { while ($row = $result -> fetch_row()) { echo $row[0]. " " . $row[1]; } $result -> free_result(); } $mysqli -> close(); ?> وهذا مثال لاستخدامها حيث يتوجب الاتصال بقاعدة البيانات ثم التأكد من عدم وجود خطأ في الاتصال. تجهيز الاستعلام و تنفيذه وثم طباعة النتائج
  11. هل يمكنك مشاركة الملف كاملا ووضعه في المرفقات؟ شكرا لك
  12. هل يمكنك عرض الخطأ؟
  13. لا مشكلة في حال كانت أسئلتك بسيطة المهم أن تتعلم منها. نريد إعادة عدد السجلات، نستخدم الدالة count (يمكنك تمرير المعرف id بدل النجمة لكن لا أعلم كيف قمت بكتابة الاسم لديك في الجدول) ستعطي نفس النتيجة و أداء أفضل قليلا في حالة سجلات كثيرة (* تقوم بعد جميع الحقول أما في حال تحديد عمود وحيد يكون أفضل - لتقليل العمليات الغير ضرورية). الاسم المستعار الذي يظهر مقابل القيمة هو customers_Number select count(*) as customers_Number from customer;
  14. أن الحل بسيط، أقترح عليك الحاولة فهو يشبه إلى حد كبير نفس هذه الشيفرة التي قدمتها. سأشرح بعض الخطوات المساعدة: تابع البحث عن قيمة يجب أن نمرر له هذه القيمة كوسيط parameter ومن ثم نقوم بالتجول على قيم السلسلة بنفس الطريقة المقدمة أي حلقة while وفيها نقارن قيمة العقدة الحالية مع القيمة الممرة و نعيد true في حال التساوي. إذا انتهت الحلقة ولم نجد أي عنصر مساوٍ للوسيط نعيد false. حاول حل المشكلة إعتمادا على الشرح السابق. Public static int CountNodes(Node<int> p, int X) { while(p != null) { if (p.value == X) return true; p=p.GetNext(); } return false; } إن بنية العقدة يمكن أن تحوي قيمة العنصر الحالي حيث أن الوصول لها يكون إما عن طريق value أو قيمة أنت قمت بتعريفها حسب بنائك لنمط البينات Node. إن Node يجب أن تحوي قيمة محلية من النوع int و العنصر التالي Next. وفي حالتنا علينا المقارنة مع العنصر الحالي للعقدة. ربما تختلف التسمة value لديك لكن هذه هي الطريقة المطلوبة.
  15. بعد إتمامكِ لمشاهدة جميع الدروس و التطبيق مع المدرب، يمكنكِ التواصل مع مركز مساعدة حسوب حيث يتم الاتفاق على عمل الفحص النهائي والذي بعد النجاح به سوف تحصلِ على الشهادة. يمكنك مراجعة إجابتي هنا للتعرف أكثر على الامتحان امتحانات أكاديمية حسوب
  16. في أي مشكلة برمجية إن كانت بتصميم قاعدة البيانات Data Base وجداولها و أنماط الحقول إلى كتابة التوابع Functions بالاعتماد على خوارزميات سريعة للتعامل مع البيانات، فإنه يوجد عدة طرق لحل المكشلة. قبل الاعتماد على لارافل لم يكن يستخدم النماذج أصلا وكانت جداول قاعدة البيانات هي النماذج الأساسية وكان يتم كتابة استعلامات SQL مباشرة ضمن شيفرات PHP، وفيما بعد ظهر مفهوم PDO وأصبحت البرمجة غرضية التوجه في بناء الاستعلامات هي الأساس و مع ظهور لارافل أصبحنا نتعامل مع جدول البيانات بطريقة أفضل و أكثر تحكما و بالاعتماد على النماذج Models عن طريق Eloquent، والتي سهلت بناء و إدارة قواعد البينات بشكل كبير. إن استخدام النماذج كما في دورة الأكاديمية تعطينا أسلوب أفضل في التعامل مع الجداول حسب Active Records Pattern و يعد Active Record حلاً جيدًا لمعالجة كيان واحد بطريقة CRUD - أي إنشاء كيان جديد بخصائص مسندة القيم ثم حفظه في قاعدة بيانات أو تحميل سجل من قاعدة بيانات أو حذفه. ميزات Eloquent مثل التحقق المتسخ dirty checking (لإرسال SQL UPDATE فقط للحقول التي تم تغييرها) ، ونموذج الأحداث model events (على سبيل المثال لإرسال التنبيهات الإدارية أو تحديث عدادات الإحصائيات عندما يقوم شخص ما بإنشاء حساب جديد) ،السمات traits (الطوابع الزمنية ، المحذوفات الناعمة ، سماتك المخصصة) (timestamps, soft deletes, your custom traits) التحميل الشغوف / البطيء eager/lazy loading إلخ بالإضافة لـ التحقق من صحة وإدارة العلاقات validation, managing relations. ولكن استخدام هذا الأسلوب يؤثر على أداء التطبيق (تطبيق متوسط لكبير الحجم وعدد زوار كبير) لأنه يقوم ببناء الكثير من الأغراض و حجز الذاكرة Ram أثناء التنفيذ. إن استخدام Laravel DB methods هو أفضل في مصفوفات البيانات ، للتقارير ، لمعالجة الدُفعات (datagrids, for reports, for batch processing) لأنها تتعامل مع بيانات كبيرة الحجم بأداء أفضل. نستخدم كلا الأسلوبين حتى لو في نفس التطبيق (المشروع) نميل لأحد الأسلوبين حسب فهمنا لكيفية التعامل مع البيانات و حجمها ومدى تأثيرها على الأداء.
  17. تنقسم برمجة مواقع الويب إلى قسمين رئيسيين هما: تصميم الموقع Front-end أي ما يظهر للمستخدم برمجة الموقع Back-end أي عملية إدارة قواعد البيانات ومعالجة البيانات (قسم المخدم) تصميم المواقع يعتمد على التقنيات التالية: HTML: تستخدم لتحديد بنية صفحات الموقع و أقسامه بالشكل الأساسي CSS: تستخدم لعمل التنسيقات و ترتبط مع HTML JavaScript: هي لغة البرمجة التي تعمل على المتصفح و تستخدم بإدارة الواجهة (معالجة بيانات و تحريك العناصر) مكتبات وإطارات عمل مهمة لتصميم المواقع (مستوى متقدم): jQuery: مكتبة في لغة البرمجة JavaScript تسهل العمل. Bootstrap: إطار عمل CSS يسهل عمل التنسيقات. برمجة المواقع يعتمد على التقنيات التالية: أولا: قواعد البيانات ومنها: عليك تعلم SQL MySQL PostgreSQL MongoDB .. وغيرهم ثانيا: لغات البرمجة لمواقع الويب: PHP: ونستخدم معها إطار العمل Laravel JavaScript: ونستخدم معها إطار العمل Node.JS Python: ونستخدم معها إطار العمل Django الأساسيات المشتركة بين جميع مواقع الويب هي : HTML - CSS - JavaScript ثم تختار نوع قاعدة بيانات مع لغة برمجة مثلا MySQL + PHP. تعلم أولا الأساسيات وبعد تمكنك منهم يمكنك الانتقال لباقي التفاصيل و يسهل عليك الاختيار. سترى الطريق طويل لكن علينا التقدم خطوة بخطوة. يوجد لديك متطلبات إضافية مثل فريق عمل للمراجعة و إدارة الموقع و عليك حجز استضافات قوية و مساحات تخزين كبيرة نسبيا بحسب عدد مستخدمي المتوقع.
  18. المتحكمات التي تريدين تطبيقها نفسها في أكثر من جزء من المشروع، يمكنك وضعها في مجلد منفصل مثلا sharedControllers ضمن مجلد controllers
  19. أرجو كتابة السؤال خارج محرر الأكواد لأنه غير مفهوم، مع التوضيح من فضلك
  20. يتم فصل المتحكمات حسب عملها بوضعها في مجلدات فرعية ضمن المجلد controller. المتحكمات الخاصة بالعرض تكون ضمن مجلد مثلا view، المتحكمات الخاصة بلوحة التحكم تكون ضمن مجلد وليكن admin. وطبعا كل متحكم يكون مسؤول عن أمر محدد ووظائف ترتبط بنفس الغرض الوظيفي/العرض/النموذج.
  21. يمكنك مراجعة هذه الإجابة : الأسئلة القديمة حيث يمكنك عرض الأسئلة التي قُمتِ بطرحها بسهولة.
  22. عليك فتح المشروع باستخدام أندرويد استديو (في حال لا تستخدمه أقترح تحميله لهذه الجزئية التالية)، حيث سيقوم بالبحث عن تحديثات للتضمينات من Gradle وغيرها، عليك فقط تصفح الملفات في مشروع أندرويد وهو سيقوم على اقتراح التحديثات. تحميل أحدث إصدار من Flutter و أحدث android sdk ووضع الإصدارالخاص به في المشروع، حل الخطأ الأول لديك هو جعل compileSdkVersion 28 و compileSdkVersion ..مثلا. لكن قم باستخدام الأحدث. يمكنك بناء مشروع فلاتر جديد بعد التعديلات السابقة، ثم تضمين ملفات إعدادت البيئة منه والتي ستكون في جزء مشروع أندرويد بالشكل التالي في settings.gradle: ربما يوجد سطر ناقص لديك. include ':app' def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() def plugins = new Properties() def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') if (pluginsFile.exists()) { pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } } plugins.each { name, path -> def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() include ":$name" project(":$name").projectDir = pluginDirectory } في ملف gradle.properties أضف: android.useAndroidX=true android.enableJetifier=true أعتقد أن أغلب المشاكل بسبب تضارب إصدار المكتبات (مكتبات فلاتر حديثة أما أندرويد قديمة) فاعمل التعديل على نسخة منفصلة من المشروع في حال حدوث مشاكل غير الحالية (للحفاظ على نسخة من المشروع)
  23. إذا كنت تقصد تعريف خاصية مشتركة لجميع الأغراض التي سوف تبنيها من الصنف teachers فعليك استخدام محدد الوصول static تعديل إضافة أمثلة: استخدام static ضمن صنف class: class Foo { static $my_var = 'Foo'; } $x = new Foo(); // انشاء غرض جديد echo $x::$my_var; // للوصول للمتحول المشارك نستخدم النقطتين echo $x->my_var; // هذه الطريقة لا تعمل وسيظهر الخطأ Notice: Undefined property: Foo::$my_var لاحظ في المثال التالي أن المتغير الذي نوعه static سيكون مشترك و سيحافظ على التغييرات التي تحصل عليه حتى لو من غرض مختلف. <?php function keep_track() { STATIC $count = 0; $count++; print $count; print "<br />"; } keep_track(); keep_track(); keep_track(); ?> /////////// الخرج 1 2 3 وهذا مثال للفرق بين قيمة متغير static وآخر ليس static: function a() { static $i = 0; $j = 0; return array($i++, $j++); } لاحظ أنه يحتفظ بقيمة i المعدلة ويعيد تعريف j print_r(a()); // array(0, 0) print_r(a()); // array(1, 0) print_r(a()); // array(2, 0) //... استخدام static في دالة function: function test() { static $a = 0; echo $a; $a++; } test(); // prints 0 test(); // prints 1 test(); // prints 2
  24. المكتبة المساعدة للعلاقات الرياضية في ++c هي : #include <cmath> دالة الجذر: cout << sqrt(X); دالة اللوغاريتم natural logarithm: cout << log(X); الدالة الأسية: pow(x, y) رفع قيمة لقوة 10^X exp(x)
×
×
  • أضف...