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

علي عبد محسن

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

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

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

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

    4

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

  1. إجابة علي عبد محسن سؤال في معالجة مشكل في event في الجافاسكريبت كانت الإجابة المقبولة   
    المشكلة في الكود أعلاه هو جزء HTML وليس javaScript. لاحظ أنك تحاول الإستماع الى form بواسطة submit ولكن في المقابل لايوجد input من نوع submit داخل ال form المستهدف. حيث أنك تضع input من نوع button ولحل المشكلة قم بإجراء التغيير التالي 
    ... <input type="submit" value="Sign In" class="register-btn"> ...
  2. إجابة علي عبد محسن سؤال في كيف ابحث عن كلمة كاملة وليس بجزء منها؟ بالـ SQL كانت الإجابة المقبولة   
    يمكنك تجربة الكود بعد تعديله ليتضمن الكلمات التي تنتهي ب ؟ و ! 
    SELECT col1 FROM tab1 WHERE col1 regexp '(^|[[:space:]])مجد([\?!])?([[:space:]]|$)';  
  3. إجابة علي عبد محسن سؤال في كيفية استيراد ملف ارشيف SQL تم انشاءه في phpmyadmin باستخدام الـ command line كانت الإجابة المقبولة   
    بما أن الحل المطلوب يجب أن يكون بلغة php يمكنك إستعمال الكود التالي لتحقيق المطلوب شرط أن تكون صيغة الملف الذي تم تصديره من قاعدة البيانات الأصلية هي sql.
    يمكنك تغيير ما يلزم تغييره وفقاً لمتطلباتك مع الحفاظ على نفس طريقة العمل وكما يلي
    <?php   // مسار الملف $filename = 'name.sql'; // MySQL host $mysql_host = 'localhost';  // عنوان المضيف // MySQL username $mysql_username = 'root'; // اسم المستخدم // MySQL password $mysql_password = ''; // كلمة المرور // Database name $mysql_database = 'database_name'; // قاعدة البيانات التي تريد إستيراد الملف لها   // Connect to MySQL server mysql_connect($mysql_host, $mysql_username, $mysql_password) or die('Error connecting to MySQL server: ' . mysql_error()); // الإتصال بقاعدة البيانات واختيارها mysql_select_db($mysql_database) or die('Error selecting MySQL database: ' . mysql_error());   // ننشئ متغير لخزن الجملة المراد تنفيذها $templine = ''; // Read in entire file $lines = file($filename); // sql نقرأ // Loop through each line foreach ($lines as $line) // نقوم بعمل حلقة تكرار للمرور على جميع السطور {   if (substr($line, 0, 2) == '--' || $line == '') // نتجاهل التعليقات     continue;   $templine .= $line; // نسند السطر قيد المعالجة الى المتغير المنشأ مسبقاً   if (substr(trim($line), -1, 1) == ';') // نحدد فيما إذا كانت نهاية سطر من خلال الفاصلة المنقوطة {     // نقوم بتنفيذ السطر     mysql_query($templine) or print('Error performing query \'<strong>' . $templine . '\': ' . mysql_error() . '<br /><br />');     // بعد غنتهاء التنفيذ نعيد قيمة المتغير الى حالته الأصلية ليكون جاهزاً للسطر القادم     $templine = ''; } }  echo "Tables imported successfully"; ?>
  4. إجابة علي عبد محسن سؤال في تشفير قاعدة بيانات SQLite محليه بالـ android studio كانت الإجابة المقبولة   
    بداية من الضروري فهم أن SQLiteAssetHelper  غير قادر على فتح قاعدة بيانات مشفرة من النوع sqlite ولكن فقط يستطيع التعامل مع قاعدة البيانات المفتوحة من خلال الدالتين getReadableDatabase و getWritableDatabase. ما تستطيع فعله بهذا الخصوص هو إستعمال الأداة  SQLCipher for Android مع SQLiteAssetHelper لحل المشكلة ولكن بطريقة نوعاً ما يشوبها التعقيد.
    أولاً - نستعمل SQLCipher لإنشاء قاعدة بيانات فارغة مشفرة.
    ثانياً - نستعمل SQLiteAssetHelper لقراءة قاعدة البيانات المفتوحة لديك ومن ثم نسخ بياناتها الى المشفرة سابقة ألإنشاء.
    ثالثاً - نحذف قاعدة البيانات المفتوحة بعد إغلاقها.
    تستطيع الإطلاع أكثر على SQLCipher هنا
  5. إجابة علي عبد محسن سؤال في الفرق بين عنصر u وعنصر ins من الناحية الهيكلية كانت الإجابة المقبولة   
    عذراً على الخطأ نعم كنت مستعجلاً. لاحظي أن الصواب هو أن ins تستعمل للدلالة على أن النص تم وضعه لاحقاً كتحديث على النص الأصلي وغالباً ما يتم وضعه برفقة الوسم del الذي يدل على أن جزء من النص تم إستبداله أو التعديل عليه  أو إلغاءه من خلال خط يظهر على النص.
    أما الوسم u فهو لا معنى له سوى وضع خط تحت النص لغرض تمييزه.
  6. إجابة علي عبد محسن سؤال في المقارنة بين قيم مختلفة في flutter كانت الإجابة المقبولة   
    يمكنك إستعمال الدوال isAfter, isBefore,  isAtSameMomentAs المرتبطة بالنوع DateTime لمقارنة الوقت و ترجع كل من هذا الدوال true أو false وكما يلي
    snapshot.data[index]['LastDate'].isAfter(DateFormat('dd-MM-yyy').format(DateTime.now())) snapshot.data[index]['LastDate'].isBefore(DateFormat('dd-MM-yyy').format(DateTime.now())) snapshot.data[index]['LastDate'].isAtSameMomentAs(DateFormat('dd-MM-yyy').format(DateTime.now())) //compareTo كما يمكنك إستخدام // لكن هذه الدالة ترجع لك 1 أو 0 أو -1 بنفس الدلالة السابقة snapshot.data[index]['LastDate'].compareTo(DateFormat('dd-MM-yyy').format(DateTime.now())) // DateTime ‌لاحظ أننا نقارن النوع //String إذا الوقت لديك من النوع //كما يلي DateTime يمكنك تحويله الى dt= DateTime.parse('2020-01-02T07:12:50+07:00') // مثال // ثم تجري المقارنة كما سبق الحل المطروح هنا يحل الإشكالية الموجودة في المثال في سؤالك أي المقارنة بين قيم الوقت كما يفهم من الكود الذي تطرحه. إذا كنت تريد مقارنة قيم أخرى فلا بد من تحديد نوع هذه القيم لتحديد طريق المقارنة ذات العلاقة.
  7. إجابة علي عبد محسن سؤال في معالجة مشكل في responsive design كانت الإجابة المقبولة   
    غالباً المشكلة في cache المتصفح. ربما كنت تعمل على نسخة قديمة من الكود ومازالت عالقة. لحل المشكلة قم بعمل clear
    settings > privacy and security > clear browser data >
  8. إجابة علي عبد محسن سؤال في تغير حجم الاعمده واصطفاف العناصر تلقائيا كانت الإجابة المقبولة   
  9. إجابة علي عبد محسن سؤال في how to remove an array element using splice in javascript كانت الإجابة المقبولة   
    إذا كان الهدف هو تنقية عناصر المصفوفة من الأرقام بدون إستخدام filter فإنك بهذه الحالة لا تحتاج إستخدام splice وإنما يمكنك إستخدام forEach مثلا (أو for) للمرور على جميع عناصر المصفوفة ومن خلال تحقيق شرط نوع العنصر تستطيع دفع جميع العناصر التي لا يكون نوعها number إلى مصفوفة جديدة وكما يلي 

    ... let filtered= [] // ننشيء مصفوفة فارغة mix.forEach((el, i)=>{ // المرور على جميع عناصر المصفوفة       if(typeof el !=="number"){ // نتحقق من نوع العنصر         filtered.push(el) // نضعه في المصفوفة سابقة التعريف     } })   console.log(filtered)
  10. إجابة علي عبد محسن سؤال في كيفية خلط عناصر مصفوفة في بايثون Python؟ كانت الإجابة المقبولة   
    تستطيع ذلك من خلال random.shuffle
    import random # إستيراد l = list(range(5)) # نولد مصفوفة من أرقام مثلا print(l) # [0, 1, 2, 3, 4] random.shuffle(l) # خلط العناصر عشوائياً print(l) # [1, 0, 4, 3, 2] لاحظ أنك بهذه الطريقة تعدل على المصفوفة الأصلية. هناك دالة أخرى تدعى sample  تقوم بنفس الغرض ولكن بمعايير وطريقة مختلفة. تابع المثال التالي:
    l = list(range(5)) # مصفوفة جديدة print(l) # [0, 1, 2, 3, 4] length= len(l) lr = random.sample(l, length) # في الموقع الاول تأخذ المصفوفة وفي الثاني طول تلك المصفوفة print(lr) # [0, 3, 1, 4, 2] # لاحظ أنها تعيد مصفوفة جديدة ولا  تعدل على الأصلية print(l) # [0, 1, 2, 3, 4]
  11. إجابة علي عبد محسن سؤال في كيفية المقارنة بين تاريخين في جافاسكريبت JavaScript؟ كانت الإجابة المقبولة   
    يمكنك التحقق من الزمن بإستخدام جملة شرطية بسيطة في جافاسكربت من خلال مقارنة الزمن في اللحظة الحالية مع الزمن الذي تريد التحقق من أقدميته. لن تكون بحاجة إلى البحث عن دوال معقدة لإنجاز المهمة. تابع المثال التالي
    ... <script> function checkDate(){ // تعريف الدالة var date = moment("2021-10-13T08:35:47.510Z")// الزمن المطلوب var now = moment(); // اللحظة الحالية if (now > date) { // مقارنة الزمن المطلوب التحقق منه مع الزمن في اللحظة الحالية // date is past console.log("الزمن في الماضي") // الزمن الحالي أحدث من المطلوب التحقق منه } else { // date is future console.log("الزمن في المستقبل") // المطلوب التحقق منه لم يأتي بعد } } </script> ... <button onclick="checkDate()"> تحقق من الزمن</button> ... ملاحظة: يرجى الإنتباه الى صيغة الزمن التي تتحقق منها. قيمة الزمن التي في سؤالك "2022-10-01T00:12:10:19Z" ليست قيمة ISO_8601 معرفة. يتضح ذلك من خلال فحصها بالجملة البرمجية التالية

    moment("2022-10-01T00:12:10:19Z", moment.ISO_8601).isValid()  // الناتج يكون false
  12. إجابة علي عبد محسن سؤال في كيفية الحصول على التاريخ بصيغة YYYYMMDD في جافاسكريبت JavaScript؟ كانت الإجابة المقبولة   
    إستخدامك للدوال مسبقة التعريف هو الأمر الطبيعي في حال كنت ترمي لصنع برمجيات لا تعتمد بشكل كبير على أدوات خارجية third-party . من جهة أخرى توفر هذه الأدوات عليك الجهد والوقت وتعطيك الفرصة لتركز أكثر على صناعة حلول برمجية للمشكلات قيد الحل أو المشروع الذي تعمل عليه.
    للأجابة على سؤالك لابد أولا من تحديد فيما إذا كنت تستعمل javascript في المتصفح أم node.js. لكن لحسن الحظ يمكنك إستعمال مكتبة moment لأتمام المهمة في كلا الحالتين ولكن بطريقتي عمل مختلفتين جزئياً.
    في المثال التالي سنوضح كيفية تثبيت(أو إستيراد) المكتبة المذكورة في كل حالة وكما يلي:
    ... <!--في ملف HTML  --> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment.min.js" ></script> <!-- إستيراد المكتبة من المصدر --> ... <script> function formateDate(){ let date= new Date(Date.now()) // تأريخ اليوم console.log("date now", date)      let formatted =moment(date).format('DD-MM-yyyy hh:mm:ss')  // تحويل الوقت/التأريخ الى الصيغة المطلوبة console.log("formated datetime", formatted) // => 02-09-2022 09:41:30 } </script> في حالة nodejs  نقوم أولا بتثبيت المكتبة من خلال cmd أو terminal في المسار الرئيسي للمشروع حيث يوجد ملف package.json. نقوم بتنفيذ أحد الأمرين التاليين بحسب ما تستخدمه.
    /* $ yarn add moment إو $ npm install moment */   // الأن نقوم بألإستيراد const moment= require("moment") // //أو في حالة es6 //import moment from "moment" // نستدعي الدالة كما تم شرحه سابقاً let date= new Date("02-Sep-2022 09:41:30") let formatted =moment(date).format('DD-MM-yyyy') console.log("formated datetime", formatted) // => 02-09-2022
  13. إجابة علي عبد محسن سؤال في ما هو الفرق بين useCallback و useMemo و useEffect في React؟ كانت الإجابة المقبولة   
    يتم استخدام UseCallback لتحسين سلوك عرض مكوناتfunction components في React ، بينما يُستخدم useMemo لتذكر الدوال وتجنب الإضطرار إلى إستدعائها في كلrender  . كإنشاء قياسي لل hooks ، فإن هذين الحلين ليسا مختلفين تمامًا. كما هو الحال مع useEffect ،ال hook الذي يدير الآثار الجانبية في functional components ، يأتي callback أولاً ثم مصفوفة من dependencies.
    بخصوص useEffect فأنه واحد من اهم ال hooks شيوعاً في الإستخدام بجانب useState. نستعمله عندما نريد إجراء تعديل على حالة ال component بعد ال render أي بعد التشغيل والإرجاع return المساوي ل render في حالة class component حيث تقوم بنفس عمل componentDidMount و أيضا تعوض عن componentDidUpdate
    const myComp= ( props ) => {     const [name, setName]= useState('غير محدد')     const displayMyName = () => {          setTimeout(()=>setName("Ali"), 5000) // نصب مؤقت لتعديل قيمة الاسم بعد مرور 5 ثواني على ال rendering     }  // عرض الأسم بعد 5 ثواني     useEffect(()=>displayMyName())  // استدعاءها يحصل مباشرة بعد ال rendering          return( // عند التشغيل سيظهر الإسم غير محدد ثم يتم تعديله تلقائياً       <div>My name is {name}</div>     ) }
    المثال أعلاه يمثل نموذج لإستعمال useEffect بمعية useState إلا إنه لا يحصر كل ما يتعلق بالإثنين.

    فيما يلي مثال ومقارنة أساسية بين useCallback و useMemo:

    useCallback تستدعى من قبل المطور نفسه بينما React تقوم بإستدعاء useMemo كما في المثال:
    function memoUseFunc() {   const x  = useMemo(() => {     return <div>الجو حار</div>   })   return x } function callbackUseFunc() {   const x  = useCallback((name) => {     return <div>مرحبا {name}</div>   })   return x() } يحتوي متغير useMemo على نتيجة الإرجاع فقط ، مما يعني تجاهل كل شيء في جسم دالة الوسيطةcallback. بينما يحتوي متغير useCallback على function. إنه يستخدم ببساطةstring  ، تُعرف أيضًا ب return statement اي الراجع من الإستدعاء.
     هذا يعني أن هذين الأسلوبين يقدمان نفس النتائج. 
    من الجدير بالذكر ان useMemo ليس لها parameters بعكس useCallback التي تأخذ أي عدد من الparameters وفي مثالنا أعلاه لدينا name.
    يمكنك قراءة المزيد عن الموضوع في الموقع الرسمي ل React
     
  14. إجابة علي عبد محسن سؤال في كيفية الحصول على القيم من طلب من نوع POST في express.js؟ كانت الإجابة المقبولة   
    قبل كل شيء تأكد من وجود مكتبة body-parser  في ملف package.json  في root المشروع. يجب أن يحتوي هذا الملف على تعريف المكتبة آنفة الذكر وكما يلي:
      ... "dependencies": {     ...     "body-parser": "^1.18.3",     ...      } ... إذا لم تكون موجودة قم بإضافتها ثم نفذ الأمر yarn  أو npm install بحسب ما تستخدمه. بعد إنتهاءك من تنفيذ الأمر بنجاح قم بأضافة الأسطر التالية إلى  الملف الرئيسي الذي تستورد فيه express .  هذه المكتبة مسؤولة عن تحليل هيئات (body)الطلبات الواردة في برمجية وسيطة قبل التعامل معها
    ... const bodyParser = require('body-parser'); // إستيراد ... app.use(bodyParser.urlencoded({extended: false})); // إستقبال طلبات url المشفرة app.use(bodyParser.json()); // إستقبال طلبات Content-Type: application/json ... بعد هذا يمكنك الوصول الى محتويات body من خلال req.body
×
×
  • أضف...