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

لوحة المتصدرين

  1. Wael Aljamal

    Wael Aljamal

    الأعضاء


    • نقاط

      10

    • المساهمات

      6975


  2. شرف الدين حفني

    • نقاط

      9

    • المساهمات

      1690


  3. Mohammad Al Eik

    Mohammad Al Eik

    الأعضاء


    • نقاط

      5

    • المساهمات

      199


  4. Mohamed Refaat10

    Mohamed Refaat10

    الأعضاء


    • نقاط

      3

    • المساهمات

      85


المحتوى الأكثر حصولًا على سمعة جيدة

المحتوى الأعلى تقييمًا في 12/29/21 في كل الموقع

  1. نعم بإمكان المستخدم التعديل على الكوكيز لكن ميزتها عن ال local storage هي العمر الإفتراضي للقيمة. أما عن أنك تقوم بتعديل الكوكيز فيتعطل الموقع.. هذا لن يحدث , بسبب عملية المصادقة التي تتم بواسطة ال token , سوق أوضح لك الفكرة كالأتي: عندما تسجل دخولك إلى موقع مستقل يعطي المخدم token يتم تخزينه في المتصفح في ال cookies وهذا التوكين عبارة بجمع عدة بيانات وتشفيرها وأي تعديل على هذا التوكين من قبل المستخدم سوف تفشل عملية المصادقة بين المخدم والمستخدم ولن يعود بإمكانه القيام العمليات داخل الموقع. أي ان ممكن ان يتوقف الموقع عن العمل بالنسبة اليك أما عند باقي المستخدمين لن يحدث شيئ كهذا.
    2 نقاط
  2. السلام عليكم ورحمة الله وبركاته ممكن حل تظهر عندي هدي المشكلة بعد تحديت الاندرويد Could not resolve all dependencies for configuration ':app:debugRuntimeClasspath'. Using insecure protocols with repositories, without explicit opt-in, is unsupp apply plugin: 'com.android.application' android { compileSdkVersion 31 defaultConfig { applicationId "com.icanstudioz.taxicustomer" minSdkVersion 16 targetSdkVersion 31 versionCode 11 versionName "2.1" multiDexEnabled true "testInstrumentationRunner "android.support.home_fragment.runner.AndroidJUnitRunner compileOptions{ sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } javaCompileOptions { annotationProcessorOptions { includeCompileClasspath true } } dependencies { implementation ('com.mapbox.mapboxsdk:mapbox-android-navigation-ui:0.16.0') { transitive = true } implementation 'com.mapbox.mapboxsdk:mapbox-android-navigation:0.16.0' implementation 'com.google.firebase:firebase-auth:21.0.1' implementation 'com.google.firebase:firebase-messaging:23.0.0' implementation 'com.paypal.sdk:paypal-android-sdk:2.15.3' implementation 'com.github.TheBrownArrow:PermissionManager:1.0.0' implementation 'de.hdodenhof:circleimageview:3.0.0' implementation 'gun0912.ted:tedbottompicker:1.2.6' implementation 'com.akexorcist:googledirectionlibrary:1.0.5' implementation 'com.loopj.android:android-async-http:1.4.9' implementation 'com.github.bumptech.glide:glide:4.7.1' implementation 'com.google.android.gms:play-services-maps:18.0.1' implementation 'com.google.android.gms:play-services-location:19.0.0' //implementation 'com.google.android.gms:play-services-places:16.0.0' implementation 'com.google.android.libraries.places:places:2.5.0' implementation 'com.google.firebase:firebase-database:20.0.3' implementation 'com.google.code.gson:gson:2.8.6' implementation 'com.android.support:appcompat-v7:+' implementation 'androidx.multidex:multidex:2.0.1' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.appcompat:appcompat:1.4.0' implementation 'com.google.android.material:material:1.4.0' implementation "androidx.navigation:navigation-fragment:2.4.0-rc01" implementation "androidx.navigation:navigation-ui:2.4.0-rc01" androidTestImplementation "androidx.navigation:navigation-testing:2.4.0-rc01" apply plugin: 'com.google.gms.google-services'
    1 نقطة
  3. كيف استطيع عمل javascript prompt بجرد تحميل الصفحة يعني مثلا كما يحدث في موقع الاكاديمية عند اختيار اضف سؤال جديد تظهر لي رسالة بتحديد القسم .
    1 نقطة
  4. انا بستخدم FLASK API وعاوز اعمل column يكون auto increment وفنفس الوقت مش primary key ولكن لما احاول اعملها من الكود autoincrement=true واضيف row جديد بيظهر null
    1 نقطة
  5. الفرق بين استخدام الأوامر DROB &DELETE في SQL DELETE FROM users WHERE id = 1; DROP TABLE IF EXISTS books;
    1 نقطة
  6. عندي مشكلة في الكود انه الفايل مش موجود اللي بدي اقرا منه علشان اعدل عليه وهو الفايل انشاته على المفكرة وحفظته بمسمى inputfile في الكود كتبت معاه امتداده وانا فاتحاه ع جوبيتار ويعني موجود وكمان نفس الاسم كيف احلها؟ يعني هي الكود inp=open("inputfile.txt","r")
    1 نقطة
  7. 1- ازاي لا اعتمد علي localStorage في الاحتفاظ بالبيانات لان ممكن اي شخص يغير في البيانات ويعطل الموقع مثال ال token و id لو غيرتهم وجيت تنشر منتج او تدوينه هيجيب خطأ ازاي احل المشكله ديه فهل في طريقه اقدر اخزن بيانات علي المتصفح بدون المستخدم ان يعدل عليها
    1 نقطة
  8. أحتاج نصيحة.. أريد أن ابدأ في تعلم تصميم الواجهات الرسومية.. هل ابدأ في تعلم JavaFX أو Java Swing
    1 نقطة
  9. اذا اردت ان اكتب قيمة داخل ال input الموجود بالمودال ومن ثم تظهر هذه القيمه في كود ال html فكيف ذلك
    1 نقطة
  10. من المهم معرفته هو أنك لا تستطعين التعديل على javascript prompt بل يمكنك إنشاء مثل هذه الصفحة المنبثقة كاملةٍ باستخدام CSS , HTML, jQuery فيمكنك إنشاء كود HTML بهذا الشكل <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title></title> <style type="text/css"> </style> </head> <body> <div class="ce"> <div class="form"> <form action=""> <select> <option>أسئلة </option> <option>أجوبة </option> <option>نقاشات </option> </select> <br /> <input type="submit" name="submit"> </form> </div> </div> </body> </html> و أيضا يمكنك وضع التنسيقات التالية كتوسيط النافذة المنبثقة و تنسيق حقل الاختيار و الزر .ce{ display: block; position: relative; background-color: #000; opacity: 0.5; height: 100vh; width: 100%; } .form{ z-index: 9999; background: #fff; position: absolute; top: 10%; left: 50%; transform: translate(-50%, -50%); margin: 20px auto; width: 500px; box-shadow: 1px 1px 8px 3px #dbdada; border: #ccc; height: 150px; } .form form { padding: 50px 50px; } select{ width: 80%; } input[type="submit"]{ margin: 20px 0px; } فيكون كامل الكود كالتالي <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title></title> <style type="text/css"> .ce{ display: block; position: relative; background-color: #000; opacity: 0.5; height: 100vh; width: 100%; } .form{ z-index: 9999; background: #fff; position: absolute; top: 10%; left: 50%; transform: translate(-50%, -50%); margin: 20px auto; width: 500px; box-shadow: 1px 1px 8px 3px #dbdada; border: #ccc; height: 150px; } .form form { padding: 50px 50px; } select{ width: 80%; } input[type="submit"]{ margin: 20px 0px; } </style> </head> <body> <div class="ce"> <div class="form"> <form action=""> <select> <option>أسئلة </option> <option>أجوبة </option> <option>نقاشات </option> </select> <br /> <input type="submit" name="submit"> </form> </div> </div> </body> </html>
    1 نقطة
  11. السلام عليكم لو انا عايز اتعلم تصميم المواقع front end developer وعايز اعمل موبيل ابلكيشن هل لو اخذت دوره تطوير التطبيقات باستخدام لغة JavaScript هل هعرف اعمل الفرونت والباك وهعمل كمان موبيل ابلكيشن وشكرا
    1 نقطة
  12. بحاول أنفذ طريقة تأخير ملفات الـ css الغير هامة بحيث لا يتم تحميلها مباشرة حتى يقوم المستخدم بتحريك شريط التمرير لأسفل بمقدار 1px وبعدها يتم تنفيذ الحدث وإضافة ملف التنسيقات css لعلامة head وذلك لتوفير بعض الوقت لتحميل الموقع ويكون سريع في التصفح الكود يعمل ولكن يتم إنشاء ملف التنسيقات في كل مرة يتم تحريك فيها شريط التمرير ، أريد أن يتم تنفيذ الحدث عند أول مرة يتم تحريك فيها شريط التمرير function createLinkCss(va,app){ var createLink = document.createElement("link"); var createAttrHref = document.createAttribute("href"); var createAttrRel = document.createAttribute("rel"); createAttrHref.value = va; createAttrRel.value = "stylesheet"; createLink.setAttributeNode(createAttrHref); createLink.setAttributeNode(createAttrRel); document.getElementsByTagName(app)[0].appendChild(createLink); } window.onscroll = function() {scrollLoad()}; function scrollLoad() { if (document.body.scrollTop > 1 || document.documentElement.scrollTop > 1) { createLinkCss('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css','head'); } } عند استخدام الطريقة التالية وهي عند تحريك مؤشرة الفأرة للمرة الأولى يتم تنفيذ الحدث مرة واحدة فقط بدون أي مشكلة ، لكن هذه الطريقة غير مناسبة لأجهزة الموبايل فلا بد من النقر على الشاشة لكي يتم تنفيذ الحدث document.body.addEventListener("mousemove", function() { createLinkCss('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css','head'); },{once : true});
    1 نقطة
  13. عدلته واشتغل لكنك سبقتنى بالتعديل ، على العموم شكرأ لك لحل المشكلة window.onscroll = function() { if(firstScroll == false){ scrollLoad() } } @Mohammad Al Eik إيه رأيك لو عملت تأخير لإعلانات جوجل أدسنس ضمن الدالة هل لها تأثير سلبي ؟
    1 نقطة
  14. لقد عدلت الكود كان هناك خطأ في نوع كلمة false "false" =====> false عدل كلمة "false" واجعلها من دون " " عذراً لهذا الخطأ صديقي
    1 نقطة
  15. هل هكذا البيانات لا احد يقدر يغيرها يعني مثال انا لو دخلت علي cookies موقع اكادميه حاسوب وغيرت بيانات معينه وحاولت انشر سؤال سيحدث خطأ في الموقع لانه لا يعلم من هو ناشر السؤال ازاي اتخطي هذه المشكله
    1 نقطة
  16. بإمكانك تخزين المعلومات ك token في ال cookies (إعدادات ملفات تعريف الارتباط) التابع التالي يقوم بالتخزين في cookies function setCookie(name,value,days) { var expires = ""; if (days) {//هنا نحسب مدة الصلاحية لهذا التوكين تبعً لعدد الأيام التي مررناها var date = new Date(); date.setTime(date.getTime() + (days*24*60*60*1000));//عملية تحويل الايام إلى ميلي ثانية expires = "; expires=" + date.toUTCString(); } document.cookie = name + "=" + (value || "") + expires + "; path=/";//هنا عملية الوصول الى الكوكيز من المتصفح وتخزين القيم النهائية فيها } التابع التالي يقوم باستدعاء القيم من ال cookies function getCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); }//نقوم بعمليات على السترنغ return null; } وهكذا نقوم بتنفيذ التوابع setCookie('token','1234hjk',7); var x = getCookie('token');//نقوم بتمرير اسم المفتاح الذي نريده if (x) { //استعمل التوكين هنا } الطريقة السابقة في حال كنت تستخدم vanilla javascript في حال كنت تستخدم رياكت فبإمكانك إستعمال هذه المكتبة react-cookie
    1 نقطة
  17. أستخدم فلاسك مع قوالب Jinja لعرض بعض المحتوى في المتصفح، ولكن عندما أقوم بعرض رقم float بقيمة عشرية دقيقة للغاية، بالشكل التالي: {{result|float}}% أجد أن الرقم زهر بالعديد من الخانات بعد العلامة العشرية: 7.9339788360% كيف يمكنني جعل النتيجة تصبح برقمين فقط بعد العلامة العشرية؟ بالشكل التالي: 7.93%
    1 نقطة
  18. يمكنك القيام بعرض أي شيء تريده عند تحميل الصفحة لكن يجب عليك اولاً التنصت على حدث تحميل الصفحة بالطريقة التالية باستخدام jquery $(document).ready(function(){ // الكود الذي تريد تنفيذه عتد تحميل الصفحة }); وفي الحالة التي تسأل عنها أنت يعرض الموقع modal أي نافذة منبثقة يمكنك تنفيذ شبيه لها بإستخدام bootstrap مع الكود السابق لعملية التنصت , كالتالي: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <link rel="stylesheet" href="css/bootstrap.min.css"> <script src="js/jquery-3.5.1.min.js"></script>//استدعاء مكتبة جيكويري <script src="js/bootstrap.min.js"></script>//استدعاء مكتبة بوتستراب <script> $(document).ready(function(){ $("#myModal").modal('show');//هنا نقوم بعملية تحديد العنصر الذي نريد ان نظهره عبر المحدد أي دي }); </script> </head> <body> <div id="myModal" class="modal fade"> <div class="modal-dialog"> <div class="modal-content"> <form> <div class="form-group"> <input type="text" class="form-control" placeholder="Name"> </div> <button type="submit" class="btn btn-primary">Subscribe</button> </form> </div> </div> </div> </body> </html>
    1 نقطة
  19. كيفية الحصول على الmac address الخاص بالclient
    1 نقطة
  20. ببساطة لا يمكنك الحصول عليه لماذا لا يمكن الحصول عليه؟ فلنحكي القصة من بداية إرسال الطلب من قِبل العميل يقوم العميل بإرسال الطلب إلى الخادم الخاص بك يتم إرسال الطلب من الجهاز على هيئة packet (مجموعة من البيانات تتضمن عنوان الشبكة الخاص بك والعنوان الخاص بالوجهة وبعض البيانات الأخرى من ضمنها الmac address الخاص بك) يقوم الموديم بإستقبال الpacket ويستخرج منها عنوان شبكتك وعنوان الوجهة وباقي المعلومات الأساسية ولكن يقوم بتبديل الmac address الخاص بك بالmac address الخاص به بعد ذلك تقوم الpackets بالمرور على العديد من المحطات hobs قبل الوصول إلى الوجهة النهائية, وكل محطة منهم تقوم بإستبدال الmac address السابق بالmac address الخاص بها في النهاية عند وصول الطلب إلى الوجهة المطلوبة يكون الmac address الموجود في الpacket هو الخاص بأخر محطة قد مرت بها الpacket فبالتالي لا يمكن الحصول على الmac address الخاص بالعميل لأنه يتم إستبداله عند مرور الpacket على كل محطة
    1 نقطة
  21. عندما أقوم بتنفيذ أي إستعلام بـ sqlalchemy فيتم إرجاع النتائج من قاعدة البيانات وقد تحتوي هذه القائمة على نتيجة واحدة فقط أو قد تحتوي على مجموعة من النتائج وأحيانًا أخرى قد لا توجد أي نتائج على الإطلاق. ما أريد القيام به هو الحصول على أول نتيجة فقط إذا لم يكن هناك غيرها، أو تنفيذ دالة ما في حالة كان هناك أكثر من نتيجة أو لا يوجد نتائج على الإطلاق ما أريد القيام به مشابهة للتالي: result = session.query(User) if result > 1: return "more than one" elif result == 0: return "no results found" return jsonify(result) كيف أقوم بالتحقق مما إذا كان هناك نتيجة واحدة أو مجموعة من النتائج أو لا يوجد نتائج أبدًا؟
    1 نقطة
  22. النتائج التي ترجع من الsqlalchemy query تكون من نوعية query والتي يمكنك إستخدام الدالة count التي تتوفر بها والتي تقوم بإرجاع عدد النتائج على سبيل المثال result = session.query(User) print(result.count()) تلك الشفرة تقوم بإرجاع عدد النتائج الموجودة بالإستعلامة
    1 نقطة
  23. حاولي مشاركة الشيفرة البرمجية التي جربتي بها لنساعدك
    1 نقطة
  24. في الدالة لديك تقوم برسم خط مستقيم، باستخدام مكتبة PDFBox يمكن عمله كالتالي: // الخط PDFont font = PDType1Font.HELVETICA; float fontSize = 14; float fontHeight = fontSize; // تعريف المستند PDDocument doc = new PDDocument(); PDPage page = new PDPage(); doc.addPage(page); // تعريف سياق الكتابة على الملف PDPageContentStream contentStream = new PDPageContentStream(doc, page); contentStream.setFont(font, fontSize); // قيم إحداثيات الخط المستقيم float startY = page.getCropBox().getUpperRightY() - 30; float endY = page.getCropBox().getUpperRightY() + 30; float startX = page.getCropBox().getLowerLeftX() + 30; float endX = page.getCropBox().getUpperRightX() - 30; // رسم الخط contentStream.moveTo(startX, yCordinate); contentStream.lineTo(endX, yCordinate); contentStream.stroke(); // إغلاق القناة و حفظ الملف contentStream.close(); doc.save("Line.pdf"); ويمكن استخدام دوال لرسم مستطيل و غيره من الأشكال، لايتوفر التوثيق الرسمي للمكتبة على العديد من الشروحات للأسف حاول استخدام المكتبة pdfbox-graphics2d حيث تساعد على عمل رسومات ثنائية البعد بالاعتماد على pdfBox
    1 نقطة
  25. بالإضافة إلى إجابة وائل فإن يوجد إختلاف مهم بين الvector(المتجه) والمصفوفة array في جافا وهو أن المتجه متزامن synchronized مما يعني أن لا يمكن لأكثر من thread أن يقومو بعمليات عل نفس المتجه وتلك الخاصية لها ميزتها وعيبها في ذات الوقت المميزات المميزات أنه يضمن لنا عدم حدوت تصادم في البيانات عند محاولة الكتابة على المتجه من قِبل أكثر من thread ويمكن توضيح المقصد من هذا الكلام عبر المثال التالي: نفترض أن لدينا ملف كبير الحجم نقوم بقرائته من قبل نسختين من الthread بشكل متقطع بحيث يقوم كل ثريد بقراءة 5 ميجا ومن ثم يتم كتابتها في هيكل بيانات ومن ثم يرجع يقرأ 5ميجا أخرى ومن ثم يقوم بكتابتهم في الهيكل وهكذا إن كنا نستخدم مصفوفة يوجد إحتمالية أن يكتب الthread الأول والثاني في الكتابة في الفهرس رقم 3 في نفس الوقت مما يؤدي إلى مسح بيانات أحدهم وبالتالي يكون لدينا فقد في البيانات, ولكن مع المتجه لن يستطيع أن يكتب إلا thread واحد فقط, بينما الthread الأخر سينتظر لحين إنتهاء الthread الأول من الكتابة ومن ثم يقوم بالكتابة في الفهرس القادم مما يضمن لنا عد حدوث أي فقدان في البيانات العيوب بما أنه كما قلنا متزامن ولا يسمح لأكثر من نسخة thread من الكتابة في نفس الوقت فهذا يسبب بطئ في الأداء فبالتالي إن كنا لا نحتاج إلى ضمان عدم فقدان البيانات ونتعامل مع أكثر من thread فبالتالي لن نحتاج التعامل مع المتجه لأنه سيؤدي إلى فقدان في الأداء مقابل ميزة لا نحتاجها بالإضافة إلى أن المتجه يأخذ مساحة أكبر في الذاكرة
    1 نقطة
  26. عند إرسال بيانات إلى جهاز حاسب عبر الشبكة يتم إرساله عبر عنوان الشبكة ip address, ومن ثم عند الوصول إلى الشبكة المحددة يتم البحث عن الحاسب عبر العنوان المادي physical address أو mac address ومن ثم يتم إرسال البيانات له السؤال هنا, كيف يتم تحديد أي برنامج سوف يستقبل تلك المعلومات؟ حيث أن لدينا مئات البرامج والخدمات التي تعمل على الحاسوب في نفس ذات الوقت فكيف نستطيع تحديد أي واحد منهم يقوم بإستقبال تلك المعلومات؟ الإجابة هي المنفذ Port حيث أن عنوان الشبكة يستخدم لتحديد أي شبكة تسمع الطلب, والعنوان المادي لتحديد أي جهاز داخل الشبكة يستمع إلى الطلب, بينما المنفذ لتحديد أي برنامج داخل الجهاز يستمع إلى الطلب, فإذًا في حالتنا تلك لن تقوم الmysql بالإستماع إلى أية طلبات إلا االطلبات التي يتم إرسالها إلى المنفذ 3306
    1 نقطة
  27. مرحبًا أحمد برجاء في المرة القادم كتابة الأسئلة باللغة العربية حتى يسهل فهمها ويسهل الإجابة عليها ويستفاد باقي الزوار من تلك الإجابات بالنسبة لسؤالك فإن الhooks هي في حد ذاتها دوال functions ولكنا دوال من نوع خاص ما هو الخاص فيها؟ الخطافات (hooks) بشكل أساسي يتم إستخدامها من أجل التعامل مع دورة حياة الوِحدة(component) سواء من حيث تغيير الحالة الخاصة بها أو تنفيذ فعل معين عند تغيير الحالة الخاصة بها ويتم تصميمها بحيث لا تعمل إلا في الfunctional react components لذا يمكننا القول أن أي خطاف دالة وليست كل دالة خطاف على سبيل المثال في الشكل التالي شفرة برمجية لcustom hook للتعامل مع النماذج const useForm = (initialState = {}) => { const [formData, setFormData] = React.useState(initialState); const handleInputChange = (e) => { setFormData({ ...formData, [e.target.name]: e.target.value }) } return { formData, handleInputChange }; } يتم إستخدامها بالشكل التالي function Form() { const [formData, setFormData] = React.useState({ username: "", password: "", }); const { username, password } = formData; const handleInputChange = (e) => { setFormData({ ...form, [e.target.name]: e.target.value }); }; const handleSubmit = (e) => { e.preventDefault(); console.dir(formData); } return ( <form onSubmit={handleSubmit}> <input type="text" name="username" value={username} onChange={handleInputChange} /> <input type="password" name="password" value={password} onChange={handleInputChange} /> <button type="submit">Submit</button> </form> كما تلاحظ هنا نحن إستخدمنا خطاف بسيط مثل الuseState وأضفنا إليه شفرتنا الخاصة حتى نصل إلى خطاف جديد يقوم بتخزين بيانات النموذج دون الحاجة إلى التعامل معها يدويًا من خلال النموذج نفسه
    1 نقطة
  28. بالإضافة إلى إجابة حسن يمكنك أيضًا تغيير المعمارية(archticture) التي تستخدمها في بناء الكود بمعنى أن تجعل الشفرة البرمجية أكثر تنظيمًا حتى لا تتشوش ويمكنك الوصول إلى ذلك عبر فعل التالي إنشاء ملف خاص بالPersonContext حتى يتم فصل الطبقة الخاصة بالcontext عن الطبقة الخاصة بباقي التطبيق عمل export لكلٍ من الPersonContext وال PersonProvider حتى يصبح الشفرة البرمجية كالشكل التالي export const PersonContext= React.createContext() export const PersonContextProvider = ({children})=>{ const [people, setPeople] = useState() return ( <PersonContext.Provider value={[people, setPeople]}> {children} </PersonContext.Provider> ) } ومن ثم يمكنك بسهولة عندما تريد إستخدام تلك الcontext في أي مكان أن تقوم فقط بعمل import للPersonContextProvider وتضع بداخله الcomponents التي ستستخدمه, وبداخل تلك ال components تقوم بعمل import لل PersonContext ومن ثم وضعه بداخل الخُطاف useContext والذي سيقوم بإرجاع نسخة من الstate وال setPeople كما بالشكل التالي import {PersonContextProfider} from './context/PersonContext' import ChildComp from './childcomp' const Comp = ()=>( <PersonContextProvider> <ChildComp/> </PersonContextProvider> ) وبداخل الcomponent التي تدعى ChildComp يمكنك فعل التالي import {PersonContext} from './context/personcontext' const ChildComp = ()=>{ const [people, setPeople] = useContext(PersonContext) }
    1 نقطة
  29. لأن الstate تقوم بتغيير البيانات في الdom وبالتالي يتم إعادة البيانات إلى حالتها الأصلية عند عمل refresh للصفحة إن كنت تريد تخزين البيانات بشكلٍ دائم يمكنك إستخدام localStorage والتي تحتوي على ثلاث دوال أساسيين getItem, setItem, removeItem والذين يعملون كما يظهر في المثال التالي localStorage.setItem("item1", "sharaf")/// هكذا تم تخزين قيمة sharaf في المفتاح item1 console.log(localStorage.getItem("item1")/// سيتم طباعة قيمة المفتاح item1 والذي هو sharaf localStorage.removeItem("item1") وكما تلاحظ فإن الlocalStorage تعمل على هيئة المفتاح والقيمة, حيث تخزن القيمة في مفتاح ما وتصل إلى القيمة عبر نفس المفتاح
    1 نقطة
  30. أولًا يجب عليك إستيراد الملفين iostream المسؤلة عن عمليات الإدخال والإخراج في لغة c++ وifstream المسؤل عن التعامل مع الملفات #include <iostream> #include <fstream> ومن ثم يمكننا كتابة بيانات في الملف الذي لدينا مساره بإستخدام المتغير من نوع ofstream كما بالشكل التالي ofstream MyFile("filename.txt"); MyFile << "بسم الله الرحمن الرحيم"; MyFile.close(); ولقراءة محتويات الملف نقوم بإستخدام متغير من نوع ifstream string test; ifstream myfile("test.txt"); while (getline (myfile, test)) { cout << test; } myfile.close(); نلاحظ هنا أننا نقوم بعمل حلقة تكرارية من نوع while حيث نقوم بالمرور على محتويات الملف سطر سطر وفي كل سطر نقوم بوضعه بداخل المتغير test ومن ثم نقوم بطباعته حتى ننتهي من محتويات الملف وكما تلاحظ فإن في كلا عمليتي القراءة والكتابة قد قمنا بإغلاق الملف في النهاية وهذا أمر في غاية الأهمية حيث عند فتح الملف يتم تحميله إلى الذاكرة وبالتالي يجب إغلاقه حتى نقوم بتفريغ مكانه في الذاكرة حتى لا نستهلك من موارد الحاسب
    1 نقطة
  31. ﻻ نحتاج لذلك لأننا بالفعل قمنا بعمل العلاقة بين الغرف والنزلاء عبر جدول الطلب حيث يحتوي جدول الطلب على معرف النزيل ورقم الغرفة
    1 نقطة
  32. يخبرك أن الخطأ بسبب شبكة الانترنت، يمكنك المحاولة من جديد وعلى الأغلب ستحل المشكلة. في بعض البلدان يتوجب استخدام برامج VPN للوصول لمكتبات Flutter حاول الاتصال من أحد هذه البرامج وأعد فتح مدير الأوامر cmd - power shell من جديد ونفذ الأوامر. وحاول التجريب ضمن نافذة cmd،
    1 نقطة
  33. هل الدالة من برمجتك الخاصة أم من اللغة أو مكتبة؟
    1 نقطة
  34. بالرغم من أن cout أبطأ قليلاً وأن iostream أبطأ من cstudio لكن cout تتعرف تلقائياً على نمط المتغير الذي نريد طباعته ولا حاجة لتحديد نمطه ضمن عبارة الطباعة، حيث أن تحديد النمط في cout يأخذ قليلاً من الوقت أثناء عمل البرنامج،ولكنه يحل مشكلة type safety أي لن يحدث خطأ بسبب اختلاف نمط المتغير الذي يكتبه المبرمج عن نمطه الحقيقي مما يمنع الأخطاء. وبإلغاء مزامنة iostream مع المكتبة القياسية تصبح cout سريعة جداً، كيفية تحديد نمط المتغير المراد طباعته في printf
    1 نقطة
  35. في حالاستمرت المشكلة، نضيف maven لملف gradle على مستوى المشروع project build.gragle (project) *** allprojects { repositories { ... maven { url 'https://maven.google.com/' name 'Google' } ... } } وتأكد من استخدام إصدار موافق لها من targetSdkVersion or compileSdkVersion (on version 27): implementation 'com.android.support:appcompat-v7:27.1.1' implementation 'com.android.support:design:27.1.1' implementation 'com.android.support:recyclerview-v7:27.1.1' implementation 'com.android.support:cardview-v7:27.1.1' implementation 'com.android.support:support-v4:27.1.1' (on version 28): implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support:design:28.0.0' implementation 'com.android.support:recyclerview-v7:28.0.0' implementation 'com.android.support:cardview-v7:28.0.0' implementation 'com.android.support:support-v4:28.0.0' وفي حال لم تتم تحميل/تحديث نقوم بالتالي بإضافة وكيل HTTP:
    1 نقطة
  36. في الإصدارات الحديثة من ++C يمكنك استخدام الدالة: std::string::contains #include <string> string str1 = std::string("Hello wael"); string str2 = std::string("wael"); if (str1.contains(str2)) { // found! , موجودة } ويمكن استخدام std::regex_search std::string str1 = "Hello wael"; std::string str2 "wael"; // تجاهل حالة الأحرف icase auto rx = std::regex{ str2,std::regex_constants::icase }; // البحث bool isStrExists = std::regex_search(testString, rx); rx هو تعبير منتظم، يحوي السلسلة كوسيط أول، ثم عامل التحقق مع تجاهل حالة الأحرف، ثم استدعاء الدالة std::regex_search التي تعيد قيمة منطقية true في حال إيجاد السلسلة الجزئية.
    1 نقطة
  37. بالإضافة لاستخدام باني اللسلسة، يمكننا المرور على المصفوفة المحرفية باستخدام حلقة حيث نتمكن من تحديد المحارف التي نريد إضافتها / تجاهلها مما يعطي تحكم أكبر في عملية التحويل const char* str = "Hsoub Academy"; int s_size = sizeof(str) / sizeof(char); // حجم المصفوفة أو عدد الحروف string s = ""; for (int i = 0; i < s_size; i++) { if (str[i] /* condition */) { // أي شرط s += str[i]; } } return s; // string
    1 نقطة
  38. إن عملية توليد العملاء وجذبهم هي سبيلك لتحقيق المزيد من النمو والاستقرار على المدى الطويل، حيث يعتمد استمرار عمل متجرك على إبقاء تدفق مستمر من العملاء الجدد. سواءً كان نموذج عملك يعتمد على آلاف التعاملات المالية الصغيرة أو على عدد قليل من التعاملات الكبيرة، فيجب عليك على نحو مستمر تحسين استراتيجيات التسويق لتوليد المزيد من العملاء المحتملين. إن الدعوة الفعالة لاتخاذ إجراء أو CTA (اختصارًا للعبارة Call-To-Action) هي نواة هذه الاستراتيجيات، لكن لماذا؟ لأنه بدون هذه التوجيهات الواضحة والمركزة والقابلة للتنفيذ، ستترك العملاء المحتملين يخمنون ما هي خطوتهم التالية، ونتيجةً لهذا التقاعس عن العمل، ستضيع منك فرصة الحصول على عميل محتمل جديد. لنلقي نظرةً على عشر نصائح مفيدة لتحسين دعوات إتخاذ الإجراء بهدف زيادة معدل توليد عملاء محتملين وتحويلهم إلى عملاء دائمين. 1. قلل العقبات التي تمنع العميل من اتخاذ إجراء غالبًا ما يتردد العملاء الجدد في دفع كامل السعر لشركة لم يتعاملوا معها من قبل، لذا إن كانت رحلة العميل المحتمل تستغرق خمس خطوات ليصبح عميلاً دائمًا، فسيكون عندئذ دور الدعوة لاتخاذ إجراء CTA هو نقل العملاء من الخطوة الأولى حتى الخطوة الثانية. لذلك عوضًا عن استخدام عبارة "اشترِ الآن"، فقد يكون من الأفضل استخدام عبارة "تفقد منتجاتنا". في ما يلي رسم بياني يعرض المزيد من الأمثلة للخطوات الكبيرة موازنةً بالخطوات الأصغر في مراحل عملية البيع: table { width: 100%; } thead { vertical-align: middle; text-align: center; } td, th { border: 1px solid #dddddd; text-align: right; padding: 8px; text-align: inherit; } tr:nth-child(even) { background-color: #dddddd; } دعوات اتخاذ إجراء طويلة الخطى دعوات اتخاذ إجراء قصيرة الخطى انضم الى نشرتنا الإخبارية أجرِ اختبارًا حدد موعدًا لاستشارة مجانية مشاهدة نتيجتك احصل على الأسبوع الأول مجانًا جرب عينة مجانية لاحظ أن أيًا من تلك الخطوات السابقة لا يتطلب من العميل الشراء على نحو مباشر. بل مجرد دعوتهم لأمور أقل حدةً، مثل إجراء اختبار، أو رؤية النتيجة، أو الانضمام إلى رسالة إخبارية، أو تحديد موعد لاستشارة مجانية، فتجربة عينة مجانية بدون أي التزام يُعَد عمليةً أسهل من تجربة الأسبوع الأول مجانًا، لأن الخيار الثاني يعني أنك ستشترك في شيء ما. أي كلما كانت الخطوة أصغر، قل شعور العملاء الجدد بأنهم ملتزمون، وبالتالي يعني مقاومةً أقل لعرضك. 2. استخدم صيغة المتكلم أي أن عبارة "سجلني الآن" أفضل من "سجل الآن"، فهي تجعل الدعوة لاتخاذ إجراء CTA أكثر تخصيصًا، لأنها تمنح الشخص ملكية قراره وتجعله أكثر استثمارًا في النتيجة. ببساطة إضافة ضمائر مثل "أنا" و "لي" بدلًا من "أنت" و"لك"، يساعد في تحويل الدعوة لاتخاذ إجراء CTA من رسالة إلى قرار. في الصورة السابقة، مثال لموقع تستخدم فيه صيغة المتكلم في عبارات الدعوة لاتخاذ إجراء CTA، لتشجيع الزوار على الانضمام إلى مجتمعهم. وفي أمثلة أخرى لهذا الأسلوب: ارسل لي الكتاب المجاني. أنا موافق! أود الانضمام إلى النادي! احجز لي مكانًا في الندوة عبر الإنترنت. 3. اجعل عبارات الدعوة محددة قدر الإمكان كن واضحًا تمامًا عما سيحصل عليه المستخدم عندما يتخذ إجراءً، فهو السبب الذي قد يجعل من كلمة "إرسال Submit" غير فعالةً للغاية. ماذا سيحدث بعد أن ترسل الاستمارة للمستخدم؟ عليك توضيح ذلك على نحو مباشر أو ضمني في عبارة الدعوة لاتخاذ إجراء CTA، فمثلا الصورة التالية تعرض موقعًا مخصص لبيع الملابس يوضح ما سيحدث عندما يشترك شخص ما بموقعهم، حيث سيحصلون على دليل أزياء موسمي يرسل إلى منزلهم. بوضعك لعبارة "أرسل سؤالك Send your question"، ستعني أن الإجابة ستصلك بسرعة، وعبر إخبار العميل المحتمل بما سيحدث بعد ملئ استمارة موقعك، فإنك تساعد في تهيئته للخطوة التالية وتزيد من احتمالية أن يتخذوا الخطوة التالية التي ستعرضها عليهم أيضًا. 4. ركز على الفوائد والنتائج تركز عبارة "أريد توفير المزيد من المال" على النتيجة، في حين أن عبارة "ارسل لي دليلًا لإعداد ميزانيتي" تخبر الشخص بما سيحصل عليه فقط. كلاهما جيد لأنهما محددان ويستخدمان صيغة المتكلم، لكن الأول يوضح النتيجة المرجوة والثاني يعرض الأداة التي تقدمها للعميل. فيبدأ العميل المحتمل بالتفكير "لا أريد هذا الدليل لحب الإطلاع فحسب، بل لأنني أريد توفير المزيد من المال". في الصورة أعلاه يركز القائمون على الموقع على فوائد منتجاتهم في كل عبارة من عبارات الدعوة لاتخاذ إجراء CTA. بعض الشركات تستخدم نهجًا معاكسًا لما تحدثنا عنه، وذلك بهدف التلاعب بعقول العملاء حتى يتخذوا إجراءً، أي بدلًا من وضع زر "x" لإغلاق النافذة تحت كل عبارة دعوة رئيسية، يضعون سطرًا نصيًا يقول "لا شكرًا، لا أريد توفير المال" مع رابط لإغلاق العرض الشرائي. وهذا أمر سيئ وقد يضر بسمعة شركتك، فبالإضافة إلى أنك إذا استخدمت أساليب التلاعب هذه لإنجاز صفقاتك التجارية، فمن المرجح أن تجعل العملاء مستائين من التعامل معك، ويتركون تقييمات سيئة، ولا يتعاملوا معك بعدها. 5. استغل قوة الأرقام إن الأرقام فعالة على نحو خاص في تحسين عبارات الدعوة CTA، فمثلًا: سنجيب على استفساراتكم في غضون ثلاثة أيام. احصل على حسم يصل حتى 20% عند أول عملية شراء. رقي حسابك ليصبح الشحن خلال يوم واحد. بالأرقام تضيف المزيد من الثقة على ما ستقدمه للعميل. 6. احرص على استحالة إغفال رؤيتها إن جعل زر الدعوة لاتخاذ إجراء مرئيًا وواضحًا يجب أن تكون إحدى أولوياتك الأساسية. نعم، يجب استخدام أزرار بدلًا من الروابط النصية لأنها تجذب الانتباه أكثر. طبعًا في حالة عبارات الدعوة غير المتصلة بالإنترنت والمستخدمة في البريد الإلكتروني، يجب التركيز على التأكيدات النصية، مثل لون النص والتسطير والتوسيط والخطوط الكبيرة الحجم، فهي أمور ضرورية. في الصورة التالية، يستخدم هذا الموقع زرًا برتقاليًا يبرز من الخلفية الزرقا. في حال كان موقعك الإلكتروني يحوي إرشادات أو تعليمات ذات لون داكن، فعليك أن تظهر عبارةً أو زر الدعوة دون أن تبتعد عن النسق العام لعلامتك التجارية، فإذا كانت صفحتك تحتوي على الكثير من النصوص، فالأفضل استخدام صورة لجذب انتباه زوار الموقع، ويفضل أيضًا ترك مساحة حول عبارة الدعوة (مساحة خالية) لجعلها تبرز من تلقاء نفسها. بالنسبة لصفحات البيع الأكثر طولًا، عليك استخدام أكثر من من عبارة دعوة، بحيث ترشها في جميع أنحاء النص بحسب ما يقتضي الأمر. استخدم نفس العبارات في كل مرة حتى يشعر الشخص بالتكرار ويكون صورةً واضحةً لما هو متوقع منه. لا تغير النص في كل مرة حتى لا يبدو أن هناك أكثر من عرض. 7. ضع عبارات الدعوة في مكانها المناسب كما يقول صناع الكوميديا، التوقيت هو أهم مافي الأمر، وهنا ينطبق الشيء ذاته على التسويق، أي لا يقتصر الأمر فقط على طريقة صياغتك لعبارة الدعوة CTA أو كيف يبدوا وقعها عندما تقولها. إن عرضها باكرًا يؤدي إلى إضعاف رسالتك الإعلانية وجعلهم يعتقدون أنك تريد معلوماتهم فقط، كما أن تأخيرها قد يؤدي إلى فقدان بعض القراء؛ أما وضعها في كل فقرة سيجعل القارئ يشعر أنك يائس. إليك بعض الأماكن المناسبة لوضع عبارات الدعوة: بعد طرح سؤال رئيسي يجيب عليه العرض. في فترات التوقف الطبيعية. عندما تنتهي من نقطة رئيسية يُقصد بها تحفيز العميل. ضع في حسبانك أيضًا المكان المناسب على الصفحة لوضع عبارة الدعوة. فيما يلي بعض الاحصائيات حول مدى جودة تحويل عبارات الدعوة بالنسبة لأماكن مختلفة. عليك أن تطلع على هذه البيانات بشيء من الحذر، لأن معدلات التحويل لن تكون هي نفسها في جميع المجالات، ولكن يمكنك ملاحظة الأماكن التي يبدو أنها تحقق أداءً أفضل من غيرها. الشريط الجانبي: 0.5 - 1.5%. في نهاية المنشور: 0.5 - 1.5%. في النوافذ المنبثقة: 1-8%. شريط الانزلاق: 1-5%. رسائل الترحيب بعد التسجيل: 10-25%. رسائل الميزات: 3 - 9%. شريط الانتقال: نسب متغيرة. المكان الوحيد الأكثر بروزًا هو رسالة الترحيب. وهو ما يكون عادةً بالقرب من أعلى الصفحة أو يستحوذ على الصفحة بأكملها، ويتطلب من العميل المحتمل الرد قبل أن يتمكن من إغلاقها. إذا كان ما تعرضه هو العرض المناسب الذي يلامس حاجات عميلك، فيمكنك بهذا الأسلوب جمع الكثير من العملاء المحتملين. ولكن يجب عليك توخي الحذر، فحركة مثل هذه تستحوذ على كامل الصفحة قد تزعج المستخدمين وتسبب لك عقوبات من خوارزميات جوجل، فيتراجع تصنيف موقعك. بنفس الوقت يمكن لهذا النوع من المحتوى، الذي يظهر بعد تسجيل العميل معلوماته، أن يعزز التحويلات، ولكنه سيؤدي إلى إبعاد الزائرين العاديين، الذين قد يصبحون لولا هذا الأمر أنصارًا مخلصين لعلامتك التجارية مع مرور الوقت. 8. وظف حصرية المحتوى في خدمتك إن عبارة "احجز مقعدًا" هي جيدة، أما عبارة "احجز مقعدًا قبل امتلاء الندوة" فهي أفضل. كما أنك إن كنت تقدم نسخًا ورقيةً لكتاب، فحدد العدد واستخدمه في عبارات الدعوة. فوضع مواعيد نهائية ومحددة من شأنها أن تدفع الشخص الذي يفكر في اتخاذ إجراء للإقدام على ذلك على الفور. إن هذا النوع من الإلحاح هو أحد أقوى تقنيات التسويق، فقد يكون هو العنصر المفقود في سعيك لزيادة معدلات البيع. لا تنتظر حتى فوات الأوان، وابدأ على الفور بتعلم كيفية توظيف حصرية المحتوى في خدمتك. 9. استخدم كلمات القوة "اشترك" و"اشتري" و"احصل" و"سجل" كلمات لها مكانتها، فهي تعمل على نحو جيد في مواقف معينة، لكن يمكن جعلها أفضل، وذلك عبر استبدالها بكلمات مثل "اطلب" و"احجز" و"أمن" و"امتلك"، فهي تثير العواطف على نحو أكبر. لا تخف من رش القليل من اللغة السلبية عندما يكون ذلك مناسبًا، فهي تؤكد على حقيقة أنك تقدم حلًا لمشكلة معينة مثل عبارات "توقف عن المحاولات التي لا تجدي"، "أنهي معاناتك مع الشعر الضعيف" ، وما إلى ذلك من عبارات. يمكنك أيضًا استخدام كلمات وصفية، مثل "سهل" و"بسيط" و"سريع" و"رشيق" و"مُثبَت" و"مجاني" و"مضمون"، كما يمكنك أيضًا زيادة جرعة الإلحال عبر استخدام كلمات، مثل "فقط" و"لا تفوت" و"خسارة" و"استسلم" (كما في عبارة لا تفوت فرصتك لشراء). أي استخدم أساليبًا مدفوعةً بالعاطفة أكثر من المنطق، لتضخ جرعةً من العاطفة في عبارات الدعوة CTA. 10. تأكد من أن عبارات الدعوة متجاوبة من المهم أن تبدو عبارات الدعوة رائعةً على جميع الأجهزة، سواءً كانت أجهزةً مكتبيةً، أو أجهزةً لوحيةً وهواتف. وإلا فإنك لن تصل إلى جزء كبير من جمهورك. خذ وقتًا كافيًا لتتحقق من تصميمك عبر استخدام أداة مثل LambdaTest، والتي تعاين موقعك على الأجهزة والمتصفحات من جميع الأنواع. تأكد من عدم وجود قطع في عملية العرض، وأن الأزرار سهلة النقر، وأن النماذج سهلة الاستخدام، وأن كل شيء يبدو رائعًا لجميع المستخدمين. حول العملاء المحتملين إلى عملاء دائمين من المؤكد أنك عملت بجد لإنشاء منتج أو خدمة رائعة وعملت أيضًا بنفس القدر من الجهد لتزيد من عدد الزيارات إلى موقعك. شجع هؤلاء الزوار على اتخاذ الخطوات التي تريدها، من خلال تقديم عبارات واضحة ومحفزة وملهمة تدعو المستخدم لاتخاذ الإجراء الذي ترغب به. تأكد من أن كل عبارة تدعو المستخدم على اتخاذ إجراء محدد، ولا يمكن أن تفوته رؤيتها، وتخلق ضرورةً ملحةً تدعوه للإسراع في استغلالها. بعد ذلك، وكما هو حال كل شيء في عالم التسويق، استمر في التجربة لمعرفة ما هو الأفضل والمناسب لجمهورك. ويجدر القول في نهاية هذا المقال أنك في حال كنت تبحث عن دفعة لتدفع بمسير عملك إلى الأمام، فقد يكون كل ما تحتاجه هو قضاء بعض الوقت في إتقان العبارات التي تدعو المستخدم لاتخاذ إجراء. ترجمة وبتصرّف للمقال Marketing 101: Top Ten Tips for an Effective Call-to-Action لصاحبه Dan Magill. اقرأ أيضًا تجميعة من 10 تنسيقات CSS لأزرار «الدعوة إلى إجراء» (Call to action) أمور يجب أن تأخذها في الحسبان لضمان نجاح "الدعوة إلى الإجراء (Call to action)" أبرز الحيل والإرشادات في تصميم أزرار "دعوة الإجراء" (Call To Action) كيف تصمم أزرار Call To Action تزيد من معدلات التحويل
    1 نقطة
  39. يدخل المتصفح في وضع المراوغات (Quirks Mode), هذا يعني أنه سوف يكون هناك العديد من الأخطاء التي كانت موجودة في المتصفحات القديمة. لذا ستحصل على نتائج مختلفة بشكل كبير. الغرض من DOCTYPE هو إخبار المتصفح بنوع HTML الذي تكتبه. لا يجوز حذف DOCTYPE.اذا لم يتم كتابتها سيحاول المستعرض فقط تحليل HTML بأفضل ما في وسعه. ولكن لن يتم عرض جميع العناصر بشكل صحيح. DOCTYPE هو جزء مطلوب من جميع مستندات HTML, إنها إرشادات لمتصفح الويب حول إصدار HTML الذي تمت كتابة الصفحة به, تركها من الممكن أن يؤدي الى عدم توافق المتصفح مع الكود وقد يتجاهل الكثير من العناصر ,على سبيل المثال: الميزات والعلامات الجديدة في HTML5 مثل <article> ، <footer> ، <header> ، <nav> ، <section> قد لا تكون مدعومة إذا لم يتم التصريح عن <! DOCTYPE>.
    1 نقطة
×
×
  • أضف...