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

Sam Ahw

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

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

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

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

    16

إجابات الأسئلة

  1. إجابة Sam Ahw سؤال في كيفية تخزين كل إستعلامات SQL في لارافيل Laravel؟ كانت الإجابة المقبولة   
    في حال كان قصدك تخزين الاستعلام كنص ضمن قاعدة البيانات، يمكنك ذلك من خلال إضافة خدمة إلى AppServiceProvider من خلال الاستماع إلى أي استعلام يجري على مستوى التطبيق:
    public function boot() { DB::listen(function($query) { //يمكنك استبدال عملية الطباعة إلى تخزين المتغيرات التي ترغب بها ضمن قاعدة البيانات Log::info( $query->sql, $query->bindings, $query->time ); }); } وفي بعض النسخ السابقة من لارافل يمكن الاستماع للحدث query من خلال الطريقة التالية:
    DB::listen(function($query) { \Log::info($query->sql); }); أو \Event::listen('illuminate.query', function($sql) { \Log::info($sql); }); ولكن عند الاستماع لأحداث قاعدة البيانات، يجب عليك إضافة متغيّر ما والتحقق منه قبل تخزين نتيجة الاستعلام في حال كان استعلام تحليلي أو استعلام عادي ضمن التطبيق لكي لا يتم تخزين الاستعلامات التحليلية (التي تنفّذ الحدث) ضمن قاعدة البيانات
  2. إجابة Sam Ahw سؤال في هل يحتاج django الى vue js لعمل صفحات singlepage؟ كانت الإجابة المقبولة   
    Django هو إطار عمل مفتوح المصدر لتطوير تطبيقات الويب من طرف الخادم Back-end بشكل أساسي، ويتيح أيضاً إنشاء وعرض قوالب واجهات المستخدم من طرف خادم الويب، ولكن مفهومه مختلف بعض الشيء عن أطر عمل واجهات المستخدم أو تطبيقات الصفحة الواحدة SPA.
    يمكنك مكاملة مشروعك المبني بواسطة Django باستخدام أي إطار عمل في واجهات المستخدم: React, vue, angular أو غيرها. فيتيح إطار العمل Django إمكانية التعامل مع أي إطار عمل في واجهات المستخدم.
  3. إجابة Sam Ahw سؤال في هل ال dom و ال bom من ال back-end او ال front-end كانت الإجابة المقبولة   
    BOM هي اختصار لـ Browser Object Model (نموذج كائن المتصفح): وهي عبارة عن جميع الأغراض الموجودة ضمن النافذة window في المتصفح مثل navigator, history, screen, location, document.
    أما DOM وهي Document Object Model (نموذج كائن المستند) فهي على مستوى العقد الموجودة ضمن المستند أو صفحة الويب.
    لذلك كل من DOM و BOM هي مفاهيم خاصة بطرف المستخدم front-end من HTML و جافاسكريبت، ولا علاقة لطرف الخادم أو back-end بها.
    لمزيد من التفاصيل يمكنك الاطلاع على المصادر التالية:
     
  4. إجابة Sam Ahw سؤال في هل برنامج SQL يشبه في التعامل العملي معه في العمل برنامج الإكسل؟ كانت الإجابة المقبولة   
    إن SQL ليس برنامج بحد ذاته بل هو اختصار لكلمة: Structured Query Language أي لغة الاستعلام العلائقية، وتفيد في استعلام البيانات المحفوظة ضمن قواعد البيانات. مثال:
    SELECT * FROM Customers; //Customers تقوم بجلب جميع الحقول داخل جدول أما بالنسبة لبرامج المحاسبة، نعم فالعديد من البرامج مبنية باستخدام SQL وغيرها، ولكن يجب عليك الأخذ بعين الاعتبار أن تعمل على توفير واجهات استخدام أيضاً، (الواجهات التي تتفاعل معها مثل الأزرار، حقول النص،...إلخ) ليستطيع المستخدم التحكّم بالبيانات وإجراء الاستعلامات من واجهات بسيطة بدلاً أن يقوم بكتابة استعلامات طويلة في كل مرة.
    وهنا نجد أن الفرق بين برنامج اكسل و SQL، أن اكسل يتيح لك واجهة جاهزة للتعامل مع البيانات ضمن الخلايا التي تراها على الشاشة، أما SQL فستحتاج لإنشاء مخطط لقواعد البيانات والجداول التي ترغب بحفظ البيانات فيها، ثم تعلّم الاستعلامات وكيفية استخدامها ودمجها مع البرمجة لإنشاء تطبيقات ومواقع ويب كاملة.
    يمكنك الاطلاع على أساسيات SQL لأخذ فكرة أوضح قبل البدء بتعلّمها والتطبيق العملي من هنا
  5. إجابة Sam Ahw سؤال في حفظ اكثر من بيان في نفس العمود من flutter الى جدول بيانات MySQL كانت الإجابة المقبولة   
    في كل مرة تقوم بوضع قيم داخل المتحولين state و answers سيتم إزالة المحتويات السابقة ضمن هذه المتغيّرات ووضع قيم جديدة، لذلك تجد فقط أنه تم حفظ آخر قيمة موجودة في هذه المتغيّرات.
    والسبب واضح ويعود لنوع المتغيّرين state و answers، فلا يمكنك في البرمجة حفظ أكثر من قيمة ضمن متغيّر ذو قيمة وحيدة أو String مثلاً.
    var myvar = "hello"; myvar = "example"; hello فقط ولن يتم الاحتفاظ بالقيمة example سيصبح محتوى المتغيّر لذلك يجب عليك مراجعة أنماط البيانات في لغة البرمجة التي تحاول تطبيق هذه الآلية فيها والتعرّف على أنماط البيانات التي تقبل أكثر من قيمة على سبيل المثال: المصفوفات Arrays والأغراض Objects وغيرها.
    var myvar = ["value1","value2","value3"]; عندها ستتمكن من الوصول إلى جميع القيم المخزنة ضمن المصفوفة كما يجب عليك عندها تعلّم كيفية تمرير هذه القيم إلى طرف خادم الويب، فبمعظم الأحيان سيتم تحويلها إلى سلسلة نصية String وبالتالي يجب عليك إعادة تحويلها إلى نمط المصدر من طرف الخادم وإجراء بعض العمليات عليها وإعادة حفظها في النمط الملائم لجداول MySQL لديك.
  6. إجابة Sam Ahw سؤال في توضيح flexbox في css3 كانت الإجابة المقبولة   
    في حال كنت تقصد المسافة بين العناصر، flex-wrap لن تضيف أي مسافة. الحل السريع هو باستخدام خاصية justify-content على العنصر الأب الحاوي هذه العناصر:
    <div class="parent"> <div>...</div> <div>...</div> <div>...</div> </div> .parent { display: flex; justify-content: space-between; } ولكن يجب عليك الانتباه إلى عدد العناصر بأن يكون متناسب مع أحجام الشاشات، كلما زاد عدد العناصر قلّت المسافة بينها لذلك يمكنك فصل الأسطر عن بعضها أي تجميع كل 3 مكونات بوسم div أب. وبالتالي ستتموضع كل 3 عناصر أسفل بعضها البعض.
    كما يمكنك استخدام space-evenly في حال أردت المسافة متساوية حتى مع اعتبار الهوامش:
    .parent{ justify-content: space-evenly; }  
  7. إجابة Sam Ahw سؤال في هل طرق الدفع الإلكترونى كلها تتم عن طريق webview ؟ كانت الإجابة المقبولة   
    يمكن استقبال الدفع الالكتروني على مواقع الويب والتطبيقات دون وسيط أو payment gateway بالتعامل مباشرةً مع إحدى البنوك التي تقدّم حلول الدفع الالكتروني، ومن هذه الحلول استخدام API أو Hosted Payment أو حسب ما يقدّمه البنك وعندها لن تحتاج لفتح webview مثلاً في حال كنت تستخدم API للدفع.
    بالنسبة للمتاجر لن تواجه مشاكل فكثير من التطبيقات تتعامل بالدفع بشكل ضمني من خلال API أو غيرها من الحلول، ولكن يجب عليك تطبيق الحماية اللازمة للتطبيق عندها لأنها ستكون من طرف التطبيق ويجب تأمين طريقة الدفع ومنعه من الاختراق من طرف المطور، ولكن في جميع الأحوال مصدر استقبال الدفعات الالكترونية سيفرض عليك آليات حماية ليحمي نفسه أيضاً، لذذلك ستبقى هناك معايير حماية من البنك نفسه لاستقبال الدفعات يجب عليك تطبيقها لإكمال العمليات بنجاح وإلا لن تستطيع إكمال العملية.
    تختلف هذه المعايير من API لأخرى ومن جهة لأخرى ولكن جميع الخطوات تكون موضحة في دليل الاستخدام أو التوثيق.
  8. إجابة Sam Ahw سؤال في متى استخدم class ومتى استخدم interface في java؟ كانت الإجابة المقبولة   
    الصف: هو مخطط أو نموذج أولي يقوم المبرمج بكتابته لإتاحة إمكانية إنشاء أغراض (Objects) منه لاحقاً. فهو يجمع كافة الأغراض التي لها نفس النوع والتي تتشارك بخصائص ودوال.
    الواجهة Interface: مشابهة للصف من حيث تجميع الدوال والخصائص بفارق بسيط أن الدوال تكون مجرّدة أي بدون محتواها (body) بشكل افتراضي.
    وبالتالي يعتمد المطوّرين على المبدأ التالي عند الحاجة للتمييز بين عمل الصف والواجهة، وهو أن الواجهة تعبّر عن ماذا يمكن للصف أن يعمل (أي ماهي الدوال التي سيحتوي عليها الصف) دون الحاجة لذكر كيف يجب أن يقوم بذلك.
    أما الصف، فيتم ذكر تفاصيل تنفيذ هذه الدوال وكافة الشيفرات البرمجية التي تعبّر عن طرق تنفيذ أي خاصية.
    بعض الفروقات الأخرى:
    يمكن انشاء الصف بشكل صريح (instantiated) وكذلك يمكن إنشاء أغراض من هذا الصف، أما الواجهة لا تسمح إنشاء أغراض منها. الصفوف لا تسمح بالوراثة المتعددة، أما الواجهات تسمح بذلك يسمح للصف بالوراثة من صف آخر، أما الواجهة لا يمكن أن ترث من صف آخر. الصف يمكن أن يحوي باني أو (constructor) أما الواجهة لا تحوي باني لأنه لا يمكن إنشاء أغراض منها. الصف يتيح عدة مستويات لتعريف الخصائص والدوال ضمنه (public, private, protected, default) أما الواجهة فجميع الخصائص والدوال ضمنها هي من نوع public المتغيرات ضمن الصفوف يمكن أن تأخذ أحد الأنواع (static, final) وممكن ألا تأخذ أي نوع من هذين النوعين. أما في الواجهة فجميع المتغيرات هي من نوع static أو final حصراً.
  9. إجابة Sam Ahw سؤال في التحقق من المدخلات في PHP كانت الإجابة المقبولة   
    بنفس الطريقة التي اتبعتها في كتابة الأخطاء للحقول الأولى تقوم بإضافة متغيّرين لرسائل الخطأ المطلوبة عند استقبال طلب Post:
    $languagesErr = $commentErr = ""; وبعدها يجب إضافة آلية التحقق من المدخلات:
    if (empty($_POST["comment"])) { $genderErr = "Comment is required"; } else { $comment = test_input($_POST["comment"]); } وبنفس الطريقة لحقل languages، مع وجود خطأ بسيط لديك هو أن الحقول checkbox يجب أن تحوي الخاصية value ليتم الاحتفاظ بقيمة الخيار الفعلي:
    languages: <input type="checkbox" name="Arabic Language">Arabic Language <input type="checkbox" name="FMaths"> Maths <input type="checkbox" name="English Language">English Language <input type="checkbox" name="French"> French <span class="error"> <?php echo $languagesErr;?></span> <br><br> يجب تعديلها لتصبح: <input type="checkbox" id="arabic" name="arabic" value="Arabic Language"> <label for="arabic">Arabic Language</label><br> وأعتقد أن الشيفرة البرمجية التي أرفقتها ناقصة ففيها بعض الأخطاء والتوابع الغير موجودة ضمن الصفحة ولكن هذه هي فكرة الحل بشكل عام.
  10. إجابة Sam Ahw سؤال في إظهار وإخفاء جداول في ووردبريس كانت الإجابة المقبولة   
    أولاً إن إظهار وإخفاء جداول أو عناصر ضمن محتوى صفحة يرتبط بالجافاسكريبت وليس بطرف الخادم أو PHP. يمكنك استعمال إحدى الإضافات مثل TablePress أوغيرها أو يمكنك إضافة صفوف css معيّنة أو Id إلى الجداول من خلال لوحة تحكّم ووردبريس وإضافة كود جافاسكريبت بسيط لإظهار وإخفاء الجداول بشكل مشابه للتالي:
    functionshow toggleTable() { var x = document.getElementById("table1"); if (x.style.display === "none") { x.style.display = "block"; } else { x.style.display = "none"; } } كما يمكنك الاستفادة من توابع add و remove لتبسيط الشيفرة البرمجية:
    function toggleTable() { var table = document.getElementById("table1"); if(table.classList.contains("showTable")) { table.classList.remove("showTable"); } else { table.classList.add("showTable"); } }  
  11. إجابة Sam Ahw سؤال في استفسار عن كوبون خصم دورات أكاديمية حسوب كانت الإجابة المقبولة   
    يمكنك التواصل مع مركز مساعدة أكاديمية حسوب بالضغط هنا وسيقومون بمساعدتك والإجابة على استفساراتك بشكل أفضل
  12. إجابة Sam Ahw سؤال في ممكن طريقة ارسال email عن طريق terminal في ubuntu 20.04 كانت الإجابة المقبولة   
    هل يمكنك إرفاق الإعدادات التي وضعتها في النظام؟
    في المسار /etc/ssmtp/ssmtp.conf يجب أن تكون الإعدادات بشكل مشابه للتالي:
    root=test@gmail.com mailhub=smtp.gmail.com:587 AuthUser=test@gmail.com AuthPass=***** UseTLS=YES UseSTARTTLS=YES rewriteDomain=gmail.com hostname=localhost FromLineOverride=YES TLS_CA_File=/etc/ssl/certs/ca-certificates.crt مع استبدال البيانات التجريبية ببيانات البريد الالكتروني.
    وبعد ذلك تأكد من إضافة revaliases في المسار /etc/ssmtp/revaliases
    root:example@gmail.com:smtp.gmail.com:587 مع استبدال example بعنوان البريد الالكتروني
    كما يجب عليك تفعيل السماح للتطبيقات الأقل حماية (Less Secure Apps) من داخل إعدادات Gmail.
  13. إجابة Sam Ahw سؤال في مشكلة قاعدة بيانات SQLite في android studio كانت الإجابة المقبولة   
    لا ينصح بتخزين الصور كما هي ضمن قواعد البيانات لعدة أسباب ومنها الحجم، كما أن Sqlite هي قاعدة بيانات خفيفة (من اسمها) وبالتالي لا ينصح أيضاً باستخدامها لتخزين البيانات الثقيلة أو للعمليات الكبيرة.
    فحتى لو قمت باتباع آلية معينة لضغط الصورة قبل حفظها، من الممكن تجاوز الحد المسموح في Cursor Window وهو عادةً 4MB فقط.
    لذلك الحل الأفضل هو بتخزين الصورة بشكل محلي أو على خادم ويب وحفظ مسار الصورة فقط ضمن قاعدة البيانات، وبالتالي بدلاً من تخزين صورة بحجم كبير سيتم تخزين سلسلة نصية تعبّر عن مسار وجود الصورة لاستعادتها ضمن التطبيق وإظهارها.
    public void updateImage(long imageId, Bitmap picture) { //يتم تخزين الصورة بشكل محلي مع رقم معرّف فريد لكل صورة لتجنب مشكلة أكثر من ملف بنفس الاسم String picturePath = ""; File internalStorage = mContext.getDir("MyPictures", Context.MODE_PRIVATE); File reportFilePath = new File(internalStorage, reportId + ".png"); String picturePath = reportFilePath.toString(); FileOutputStream fos = null; try { fos = new FileOutputStream(reportFilePath); picture.compress(Bitmap.CompressFormat.PNG, 100, fos); fos.close(); } catch (Exception ex) { Log.i("Problem updating picture", ex); picturePath = ""; } //تعديل مسار حفظ الصورة في قاعدة البيانات من خلال الرقم المعرّف الفريد SQLiteDatabase db = getWritableDatabase(); ContentValues newPictureValue = new ContentValues(); newPictureValue.put(Images.ImageEntry.COLUMN_PICTURE_TITLE, picturePath); db.update(Images.TABLE_NAME, newPictureValue, Images.ImageEntry._ID + "=?", new String[]{String.valueOf(imageId)}); } }  
  14. إجابة Sam Ahw سؤال في ما هو ملف gradle في android studio كانت الإجابة المقبولة   
    Gradle هو مجموعة أدوات متطورة يستخدمها Android Studio لأتمتة وإدارة عمليات بناء مشروعك، كما يسمح لك بتحديد مكونات وإضافات خاصة ومرنة يمكنك إضافتها إلى المشروع من خلال أسطر برمجية قليلة دون تعقيد.
    في السابق أثناء استخدام Eclipse وقبل ظهور android studio، كان من الصعب إضافة وتضمين الحزم الخارجية أثناء برمجة تطبيقات جافا أو اندرويد، فكان يجب عليك تحميل هذه الحزم بصيغ jar بشكل منفصل وتضمين كل منها على حدى، مع صعوبة اكتشاف مشاكل الاعتماديات التي قد تسببها وهنا ظهر Gradle لحل هذه المشكلات وتسهيل عملية بناء التطبيق على المبرمج، حيث يتيح لكل مكوّن إضافي تحديد مجموعته الخاصة من التعليمات البرمجية والموارد اللازمة لعمله مع إعادة استخدام الأجزاء المشتركة لجميع إصدارات التطبيق، وبالتالي يمكن اكتشاف أي خطأ أو سوء استخدام لنسخ معيّنة من الاعتماديات أثناء بناء التطبيق وتحديثها بشكل مباشر.
    وهو متاح ضمن مستوى التطبيق (ضمن المجلّد الجذر لملفات مشروعك) والآخر ضمن مستوى المشروع أو مايعرف بـ (module level):
    ضمن مستوى التطبيق (app/build.gradle):
    حيث يتم تضمينه ضمن كل وحدة أو module ضمن تطبيقك، يتضمن اسم الحزمة الخاصة بالتطبيق والمعلومات الأساسية عنه مثل المعرّف الأساسي ورقم الإصدار ورمز الإصدار نسخ التشغيل المستهدفة SDK version وغيرها. وعندما يتم إضافة أي حزم خارجية (plugins) يجب ذكرها ضمن هذا الملف لتضمينها في المشروع باعتبارها تبعيات للتطبيق نفسه (مثل firebase وغيرها).
    ضمن مستوى المشروع (android/build.gradle):
    وهو ملف بناء على مستوى المشروع ككل، يحدد تكوينات المشروع بشكل عام ليتم تطبيقها واستخدامها على جميع الوحدات ضمن المشروع وعادةً ما نجد بداخله الاعتماديات الأساسية لـ google أو Kotlin والتي سيتم استخدامها لاحقاً ضمن الوحدات modules.
    يمكنك إيجاد المزيد من التفاصيل في التوثيق الرسمي لموقع gradle ضمن قسم Gradle User Manual، وضمن توثيق بناء التطبيقات من غوغل كما يمكنك الاطلاع على المقال التالي:
     
  15. إجابة Sam Ahw سؤال في كيف أستخدم اطار عمل رياكت كانت الإجابة المقبولة   
    يوجد عدة طرق لاستخدام مكتبة React JS:
    إضافة React إلى تطبيق ويب موجود أو باستخدام CDN: يتم تضمين الروابط التالية ضمن ترويسة الصفحة الأساسية لمشروعك قبل إغلاق الوسم Body ... <script src="https://unpkg.com/react@18/umd/react.development.js" crossorigin></script> <script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js" crossorigin></script> <script src="test.js"></script> //نقوم بتضمين ملف إضافي لكتابة الشيفرة البرمجية الخاصة ... </body> //ضمن ملف test.js //يمكنك تجربة عمل المكتبة بالمثال التالي const domContainer = document.querySelector('#like_button_container'); const root = ReactDOM.createRoot(domContainer); root.render(e(LikeButton)); من خلال مدير الحزم NPM: npx create-react-app my-app أما بالنسبة لاستخدامه ضمن الهاتف الجوال، فلا أعتقد أنها طريقة مجدية لبناء وتطوير تطبيقات الويب باستخدام الهاتف، خصوصاً عند استخدام مكتبات وأطر عمل أخرى، فذلك يحتاج لموارد أكبر من التي يملكها الهاتف المحمول لمعالجة وتفسير الشيفرات البرمجية ومتابعة الأخطاء، دون التطرق لصعوبة كتابة الشيفرة البرمجية والتنقل بين البيئة التطويرية كما أنه في معظم الأحيان لن تتمكن من تشغيل خادم محلي بنفس الطريقة على الهاتف ..إلخ.
    يمكنك إيجاد المزيد من التفاصيل ضمن الإجابات التالية:
    أما الدورات والدروس التعليمية فتختلف للطريقة التي ترغب بالتعلّم بها، إما بالبحث عن فيديوهات تعليمية أو قراءة التوثيق الرسمي للمكتبة واتباع الخطوات وتطبيقها في مشاريع علمية. يمكنك الاطلاع على دليل تعلّم رياكت التالي:
     
  16. إجابة Sam Ahw سؤال في كيف تتم عملية pipeline aws كانت الإجابة المقبولة   
    إن العملية طويلة بعض الشيء ولكن الخطوات ستكون كالتالي:
    إنشاء Elastic Beanstalk web application تعديل السماحيات Permissions إنشاء قاعدة البيانات أو ربطها. ربط مستودع git لمشروعك مع الحافظة إنشاء code pipeline لمشروعك الخطوة الأولى:
    لإنشاء Elastic Beanstalk web application في نافذة الإدارة (management console) ستجد زر إنشاء تطبيق.
    بعد ذلك، يجب عليك تعبئة بعض الحقول عن التطبيق باختيار Node.JS ضمن حقل المنصة والفرع branch حسب استضافتك، مثال:
    Node JS running on 64bit Amazon Linux وبعدها قم باختيار نموذج أولي للتطبيق أو sample application وقم بإنشاء التطبيق. بعدها سيأخذ بعض الوقت وستظهر واجهة لك فيها حالة المشروع وزر لنشر التطبيق كاملاً.
    الخطوة الثانية:
    تعديل السماحيات يتم من خلال IAM (Identity and Access Management)
    الخطوة الثالثة:
    بعد إنشاء قاعدة البيانات وربطها بمشروعك، يجب عليك تعديل بعض القيم الموجودة في ملف options.config الخاص بالربط، مثال:
    option_settings: aws:elasticbeanstalk:customoption: NewSignupEmail: ضع بريدك الالكتروني هنا aws:elasticbeanstalk:application:environment: THEME: “flatly” AWS_REGION: ‘`{“Ref” : “AWS::Region”}`’ STARTUP_SIGNUP_TABLE: ضع اسم قاعدة البيانات هنا NEW_SIGNUP_TOPIC: ‘`{“Ref” : “NewSignupTopic”}`’ aws:elasticbeanstalk:container:nodejs: ProxyServer: nginx aws:elasticbeanstalk:container:nodejs:staticfiles: /static: /static aws:autoscaling:asg: Cooldown: “120” aws:autoscaling:trigger: Unit: “Percent” Period: “1” BreachDuration: “2” UpperThreshold: “75” LowerThreshold: “30” MeasureName: “CPUUtilization” ويمكنك إيجاد بعض الأمثلة عن الخصائص والإعدادات من مستودع awslab مفتوح المصدر على Github.
    الخطوة الخامسة:
    يتم إنشاء code pipeline من النافذة management console ضمن قسم Development Tools، سيعرض عليك مجموعة من الحقول لتعبئتها مثل اسم المشروع وبعض التفاصيل ومصدر المشروع، هنا يجب عليك اختيار github كمصدر للمشروع وتسجيل الدخول من حسابك ليتم الربط بالشكل الصحيح وتبادل البيانات مع الخادم.
  17. إجابة Sam Ahw سؤال في عن Deep Dive Into Modern Web Development كانت الإجابة المقبولة   
    عنوان الدورة عنوان عام، ويمكن لأي جهة تقديم دورات بهذا الاسم، لذلك لا يمكننا إعطاء إجابة عن مدى قوة أو وزن الشهادة من خلال العنوان فقط، يجب عليك البحث عن مصدر الدورة مثل اسم الشركة أو الجهة الأكاديمية التي تقدّم هذه الدورات لمعرفة ذلك.
    أما بالنسبة لكيفية الحصول على شهادة من دورة ما، فحتماً يجب عليك التسجيل على المنصة نفسها التي تقدّم المحتوى التعليمي واجتياز بعض الاختبارات للحصول على الشهادة التي توثّق أنك أتتمت تعلم مسار محدد أو مهارات معيّنة اكتسبتها من خلال المحتوى التعليمي المقدّم من قبلهم.
  18. إجابة Sam Ahw سؤال في ما الفرق بين المعامل | والمعامل || في PHP؟ كانت الإجابة المقبولة   
    عملية المقارنة ( | ) هي عملية ثناية تتم على مستوى البت وتعرف بـ Bitwise Operation: بحيث يتم فيها المقارنة على مستوى البتات المكونة لكل من الطرفين بدلاً من القيم ككل:
    print_r(1 | 2) // 3 ناتج الطباعة أما عملية المقارنة ( || ) فهي عملية منطقية تتم على مستوى نمط البيانات من نوع Boolean والتي تستخدم غالباً ضمن الجمل الشرطية وفي معظم الشيفرات البرمجية:
    print_r(1 || 2) // 1 ناتج الطباعة والفرق الأهم بين كل منهما هو أنه في عملية المقارنة المنطقية Boolean أو ( || ) يتم فيها التحقق من الشروط بدءً من اليسار، وفي حال تحقق شرط ما، يتم إهمال بقية الشروط. عكس الطريقة السابقة ( | ) حيث يتم فيها تنفيذ المقارنة الثنائية على جميع القيم (الشروط) الموجودة.
    if(condition1 || condition2 || condition3) //في حال تحقق الشرط الأول، سيتم التوقف عن تقييم بقية الشروط if(condition1 | condition2 | condition3) //سيتم تقييم جميع الشروط بغض النظر عن تحقق أي شرط منهم وهذا الفرق ينطبق أيضاً على عمليات & و && بشكل مشابه، ولكن بشكل عام نادراً مانجد استخدام لعمليات المقارنة الأحادية (أي | و &) وسبب ذلك بسيط:
    if(person != null && person.age < 18) في هذا المثال سيتم أولاً التحقق من الشرط الأول (وهو أن القيمة person لاتساوي null)، وفي حال تحقق الشرط لن يتم إكمال التحقق من الشروط الأخرى وسيتم الخروج من الجملة الشرطية فوراً.
    أما لو استخدمنا & بدلاً من && من الممكن أن نحصل على خطأ من نوع NullReferenceException وذلك لأننا نتحقق من خاصية age لمتغيّر غير موجود null.
    لذلك يتم في أغلب الأحيان استعمال عمليات المقارنة المزدوجة && و || ما لم يكن هناك حاجة ضرورية في البرنامج لاستخدام العمليات الأحادية أو عند الحاجة للتعامل على مستوى البت كما رأينا في Bitwise Operation أو ضمن لغات البرمجة منخفضة المستوى والقريبة من لغة الآلة.
  19. إجابة Sam Ahw سؤال في حول كيف اخذ شهادة برمجية معتمدة مثل اوراكل او cs50 كانت الإجابة المقبولة   
    بالنسبة للشهادات المعتمدة من جهات معيّنة مثل Oracle و Google وغيرها.. المكان الأفضل لأخذ هذه المعلومات هو من الموقع الرسمي للجهة نفسها، فالموقع نفسه سيتيح لك كافة تفاصيل التسجيل والمحتوى التعليمي والامتحانات أيضاً.
    بالنسبة لأوراكل، تتيح مسار ابتدائي مجاني يدعى Oracle Explorer، حيث تستطيع فيه التعرّف على المسارات المتاحة واختبار طبيعة المحتوى وإجراء بعض الامتحانات البسيطة وبعدها يمكنك الانتقال إلى مسار محدد من المسارات الموجودة مثل: Java SE7, Java SE 11،...إلخ وبمستويات مختلفة associate و professional وبعد الانتهاء من التدريب يتم دفع تكاليف الامتحان عند الرغبة بإجرائه.
    جميع التفاصيل المتعلقة بشروط الامتحان والمواضيع التعليمية ستجدها عند الدخول إلى تفاصيل كل مسار من الموقع الرسمي لأوراكل.
     
  20. إجابة Sam Ahw سؤال في The getter 'length' was called on null كانت الإجابة المقبولة   
    الكود غير مكتمل ولم أتمكن من تحديد ما إذا كنت تستخدم stateful أو stateless. ولكن من الأفضل استخدام setState لتغيير حالة المتغيرات في حال كانت ستغيّر من حالة الواجهة لديك بدلاً من تعديل قيمة resposnebody بشكل مباشر، عن طريق إضافة مؤشر من نمط boolean مثلاً للدلالة على أنه تم تحميل البيانات بشكل كامل من الخادم
    setState(() { _loaded = true; }); وعندها يمكنك التحكّم بعدم الوصول إلى جزء الكود الذي يعتمد على طول المصفوفة length في حال كانت قيمة هذا المتغيّر false.
    وإذا كنت تستخدم النسخ الأخيرة من dart ستتمكن من تجنب هذه الأخطاء من خلال خاصيات null safety.
    كما يجب عليك استخدام try و catch عند طلبات التعامل مع خادم الويب لتجنب الأخطاء التي قد تحدث عند عدم القدرة على جلب البيانات أو الاتصال بالخادم.
  21. إجابة Sam Ahw سؤال في الفرق بين function component و class component في React كانت الإجابة المقبولة   
    يمكنك قراءة التعليقات على نفس السؤال فيها شرح كامل عن الموضوع:
    وأيضاً المقال الشامل عن مكونات React:
     
  22. إجابة Sam Ahw سؤال في السلام عليكم معدرة لدي تحدير عند استيرادي لمشروع على اندرويد استديوا لم افهم المقصود منه ارجو الافادة كانت الإجابة المقبولة   
    يجب عليك حذف منصات SDK المثبتة مسبقاً والتي يمكنك إيجادها ضمن المسار التالي:
    ~\Android\Sdk\platforms وإعادة تحميلها من جديد من خلال SDK Manager.
    في حال لم تتم حل المشكلة، يمكنك تحديث Gradle ضمن مشروعك:
    في الملف android/build.gradle: buildscript { repositories { google() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:7.0.2' // قم بتحديث النسخة لأحدث نسخة موجودة ... } } ضمن الملف android/gradle/wrapper/gradle-wrapper.properties: distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip # تحديث رقم النسخة هنا أيضاً  
  23. إجابة Sam Ahw سؤال في كيفية رفع مشروع asp.net الى سيرفر IIS كانت الإجابة المقبولة   
    بالنسبة لنقل المشروع إلى جهاز آخر أو نشره، ستجد خيارين عند النشر ضمن Deployment Mode:
    1- Framework-Dependent: والتي تعني أنه سيتم فقط نقل حزم ومكاتب محددة الخاصة بالتطبيق إلى مكان النشر.
    2- Self-Contained: والتي ستقوم بنسخ كافة ملفات .NET Core runtime وجميع المكتبات الأخرى اللازمة لعمل التطبيق.
    أما عن آلية تشغيل مواقع الويب ASP.net على خادم IIS:
    تأكد من تحميل حزمة .NET Core Hosting على خادم IIS والتي تحوي كل من NET Core Runtime و .NET Core Library و ASP .NET Core Module لتسمح بتشغيل مواقع .NET Core على خادم IIS.
    وبعدها قم بإعادة تشغيل الجهاز والخادم، ثم بعد تهيئة الإعدادات اللازمة لعمل الموقع مثل تحديد مسار الملف واسم النطاق localhost والأمور الأساسية، توجه لمشروع وقم بنشره publish إلى مجلّد (Folder) ثم نضع المسار الذي قمت بتحديده سابقاً في إعدادات الخادم.
    وسيقوم بدوره بتوليد الملف web.config ضمن مجلّد المشروع بشكل تلقائي.
    ملاحظة: في حال لم تتمكن من تشغيل الموقع الرجاء كتابة الخطوات التي حاولت تنفيذها ورسائل الخطأ التي تظهر لك بوضوح لنستطيع مساعدتك بشكل أفضل في المستقبل.
  24. إجابة Sam Ahw سؤال في ماهي شروط قبول العمل على موقع انفاتو؟ كانت الإجابة المقبولة   
    لا يمكن تحديد أسباب الرفض فهي غير محدودة، ولكن يجب عليك اتباع الإرشادات الموجودة في الموقع حسب المنتج الذي ترغب بنشره، فكل منتج له قواعد معيّنة يجب اتباعها
    يوجد متطلبات واضحة لكل منتج، ويمكنك الوصول إليها بكتابة المتطلبات أو requirements مع نوع المنتج لديك فمثلاً إذا كان لديك صفحات bootstrap يمكنك البحث عن Bootstrap Skins Category Requirements وهكذا في حال كان لديك تطبيق موبايل أو غيره.
    أما بالنسبة للخطوط والهوامش وjQuery، فلا يوجد قيم معيّنة مفروضة لذلك وإنما يجب على التصميم أن يكون متاجوب بشكل كامل على كافة المتصفحات والأجهزة والشاشات، ومراعاة جميع القواعد ضمن أطر العمل التي تستخدمها (مثلاً في bootstrap يجب عليك اتباع Bootstrap core styling).
    وفي حال استخدمت أي مكتبة خارجية ضمن jQuery يجب عليك كتابة شرح كامل عن استخدام هذه المكتبة بالإضافة لوضع تعليقات ضمن الشيفرة البرمجية توضّح كل قسم لديك وما الغرض منه.
    هذه القواعد وغيرها هي لضمان جودة المنتجات التي يتم نشرها واستخدامها، ويمكنك البحث عنها ضمن الموقع.
  25. إجابة Sam Ahw سؤال في الكائنات في جافاسكريبت كانت الإجابة المقبولة   
    إن مفهوم البرمجة الكائنية أو object oriented هو مفهوم موجود في جميع لغات البرمجة، وبمجرّد فهمك له ستستطيع تطبيقه في جافاسكريبت وغيرها من لغات البرمجة.
    عندما يتواجد لديك مجموعة من الخصائص المرتبطة ببعضها، من الأفضل تجميعها ضمن كائن. فمثلاً إذا كان لديك صفات الاسم، العمر، العنوان،..إلخ وكل هذه الصفات تابعة لشخص (أو مستخدم):
    var name = "Ahmad" var age = 30 var address = "any address 123" يمكنك تجميعها ضمن غرض واحد لتصبح بالشكل التالي:
    var person = { name: "Ahmad", age: 30, address: "any address 123" } وبنفس الطريقة بالنسبة للتوابع، في حال كانت تتشارك حول محور معيّن أو مهمة معيّنة، يمكنك تجميعها معاً ضمن كائن واحد.
    وذلك سيساعد أي مطوّر يقرأ الشيفرة البرمجية، لأن هذه الصفات مرتبطة ببعضها وتعبّر جميعها عن الكائن نفسه، ولا معنى لها بتواجدها بشكل مستقل.
    يمكنك الاطلاع على المزيد الأمثلة والتفاصيل حول البرمجة الكائنية وطرق استخدامها في الشيفرة البرمجية في المقال التالي:
     
×
×
  • أضف...