-
المساهمات
1690 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
2
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو شرف الدين حفني
-
المعذرة, قم بتغيير خاصية الoverlow لتصبح scroll بدلاً من hidden , وستﻻحظ بعدها ظهور مؤشر يمكنك من عرض الأجزاء المخفية
-
قم بوضع تلك التنسيقات وستختفي المساحة البيضاء أيا كان مقاس الشاشة html, body { width: 100%; height: 100%; margin: 0; padding: 0; overflow-x: hidden; }
-
هذا الفراغ الأبيض يحدث بسبب أن خصاصية الoverflow قيمتها الإفتراضية للعناصر visible مما يسبب في حالتك عند الشاشات الصغيرة هذا الفراغ الأبيض , قم بوضع قيمة الoverflow للclass المُسمى intro_container ب auto كما في الشفرة التالية .intro_container{ overflow:auto; } وستجد الموقع يعمل دون مشاكل
-
ﻻ يمكنك تحقيق ذلك مباشرةً من خﻻل الدالة Array.toString ولكن يمكنك تحقيق ذلك عن طريق الدالة join وتقوم دالة join بضم العناصر بداخل المصفوفة وتحويلهم إلى سلسلة نصية , وتعريف الدالة كالتالي join() join(separator) من الواضح كما ترى أن يمكن إعطاء مُعامل إلى الدالة أو إستدعائها بدون معاملات, المعامل هنا هو الفاصل بين العناصر seperator, بشكل إفتراضي تكون قيمة الفاصل بفاصلة const arr=["a","b","c"]; const str=arr.join(); console.log(str);////a,b,c ومن الممكن إعطاء قيمة للفاصل حتى يتغير سلوك الدالة const arr=["a","b","c"]; const str=arr.join("+"); console.log(str);////a+b+c وفي حالة كنت تريد طباعة العناصر بجانب بعضها البعض دون أي فواصل يمكنك وضع عﻻمتي تنصيص فارغتين const arr=["a","b","c"]; const str=arr.join(""); console.log(str);////abc
-
عند إستخدام table.class_name فأنت تقوم بإختيار أي جدول لديه نفس الclass وتطبق عليه التنسيق أما إن قمت بإستخدام table .class_name فأنت تقوم بتطبيق التنسيق على العناصر التي لديها نفس ال class وفي داخدل جدول <table class="testtbl"> <div class="testtbl"> <!-- elements--> </div> </table> <style> table.testtbl{ //style } </style> هذا التنسيق سيتم تطبيقه على الجدول نفسه ولكن لا يتم تطبيقه على الdiv بداخله بينما: <table class="testtbl"> <div class="testtbl"> <!-- elements--> </div> </table> <style> table .testtbl{ //style } </style> سيتم تطبيقه على الdiv وليس على الجدول نفسه
- 3 اجابة
-
- 1
-
صحيح لا حاجة لإستخدام ال_dirname في هذا السيناريو, ولكن في مواقف أخرى ستحتاجها, حيث أن ال_dirname تقوم بإرجاع مسار ملف الجافاسكريبت الموجود فيه الشفرة البرمجية, بينما path.resolve() ستقوم بإرجاع مسار المجلد الحالي , في موقفك هنا فإن كﻻ المسارين يعطيان نفس العنوان ولكن في مواقف أخرى قد يختلف كل مسار عن الثاني, فمثلاً من الممكن أن يتم تغيير مسار المجلد الحالي , مثلاً إن قمت بتنفيذ الشفرة processs.chdir(./example في برنامجك ستجد أن المجلد الحالي تغير مساره وبالتالي ستحتاج إلى _dirname
-
هذا لأنك تقوم بكتابة الصيغة بشكل خاطئ, حيث من المفترض أن تتم كتابة الصيغة على النحو التالي async redirects() { return [ { source, has, destination, permanent, }, ] } بينما قمت انت بكتابتها على النحو التالي async redirects() { { source:, has, permanent: destination, }, } فأولاً أنت لم تقم بوضع كلمة return لتحدد القيمة التي يتم إرجاعها من تلك الدالة, ثانياً لم تقم بتغليف الكائن في مصفوفة, فيجب عليك إعادة كتابتها لتصبح مﻻئمة , مثلاً تكن هكذا async redirects() { return[ { source: '/shop', has: [ { type: 'query', key: 'q', value: '(<sef>)', }, ], permanent: false, destination: '/shop/:sef', }, ] }
-
كيف علمت أنها ﻻ تعمل؟ قم بفتح نافذة الinspect وتصوير الheaders
-
تلك الرسالة تظهر بسبب تغيير الصﻻحيات الخاصة بملف ال config.inc.php أو المجلد الحامل لهذا الملف, من الممكن أن تكون قد قمت بتنفيذ أمرٍ ما لتغيير الصﻻحيات مثل sudo chmod -R 777 /opt/lampp/ أو قمت بتغييره بطريقة أخرى , ولكن بوجهٍ عام فإن الطريقة الصحيحة لتغيير الصﻻحيات هي أن تقوم بتغيير صﻻحيات مجلد المشروع وليس مجلد البرنامج كلهُ , وتقوم بتغيير صﻻحيات مجلد المشروع عبر تنفيذ نفس الأمر السابق ولكن تضع مسار مجلد المشروع بدلاً من مسار البرنامج الأب sudo chmod -R 777 /opt/lampp/php_project/ وبالنسبة لحل المشكلة التي تواجهك يمكنك تغيير الصﻻحيات من أجل حل المشكلة عن طريق الأمر التالي sudo chmod 755 /opt/lampp/phpmyadmin/config.inc.php وفي ذلك السؤال المرفق ستجد إجابة أستاذ وائل بها شرح كافي ووافي لكيفية تغيير الصﻻحيات بطريقة صحيحة
- 1 جواب
-
- 1
-
يمكنك البحث عبر اليوتيوب على قنوات تقوم ببناء موقع ومن ثم تقوم بتقليد ذلك الموقع دون النظر إلى الشفرة البرمجية, وعند الإنتهاء تقوم بالنظر إلى الشفرة البرمجية ومقارنتها بالشفرة خاصتك
- 3 اجابة
-
- 1
-
جملة over(partition) تقوم بتوزيع ناتج دالة الaggregate طبقاً للحقل الموضوع بعد كلمة by على سبيل المثال إن كان لدينا البيانات التالية { name:sharaf, age:21 } { name:ashraf, age: 49 } { name: mohamed, age:21 } { name:ahmed, age:25 } { name:saad, age:49 } إن قمت بتنفيذ الجملة select * , count(*) over(partition by st_age ) from table_name سيقوم بإرجاع البيانات , وسيقوم بحساب عدد العناصر حسب العمر فسنجد ناتج الجملة كالتالي name age count sharaf 21 2 ashraf 49 1 mohamed 49 2 ahmed 25 1 saad 21 2 ستﻻحظ جلب البيانات وبجانبها الحقل count الذي يحدد كم عدد البيانات المنتمية لنفس الage, حيث أن في العادي إن إستخدمت الaggregate functions تقوم بتحويل عدد من الصفوف إلى صف واحد, ولكن صيغة ال over partition والتي يتم أيضاً تسميتها بالwindow functions تقوم بإرجاع مجموعة الصفوف إلى مجموعة صفوف أيضاً وليس صف واحد
-
مضمون الرسالة أن منذ تاريخ الثالث عشر من أغسطس سنة 2021 تم إلغاء إمكانية الوصول إلى حساب الgithub عبر كلمة المرور بغرض زيادة الأمان, الطريقة المتاحة الأن أن تقوم بالوصول عبر رمز الوصول الشخصي (personal access token) والذي يمكن الحصول عليه عبر الخطوات التالية قم بالدخول إلى حسابك على موقع github قم بالدخول إلى قائمة الإعدادات settings قم بإختيار خيارات المطورين developers settings من القائمة الجانبية بالأسفل قم بالضغط على generate token ستحصل على رمز مُشفر, ستقوم بنسخه ومن ثم محاولة رفع الملفات مرة أُخرى تلك المرة عند سؤالك عن كلمة مرورك ﻻ تقم بإدخالها, وإنما قم بلصق الرمز الذي حصلت عليه من github
-
البيانات تأتي لك في صورة كائن وليس مصفوفة, لديك أحد الحلين, إنا أن تقوم بإستقبال البيانات من خاصية #my-carousel .carousel-indicators في جافاسكريبت على النحو التالي data["#my-carousel .carousel-indicators"].map أو أن تقوم بتحويل الكائن كله إلى مصفوفة على هيئة مفتاح وقيمة (key & value) Object.keys(data).map((key, index) => ( console.log(data[key]) ))
-
هل يمكنك طباعة المتغير data وارسال ناتج الطباعة؟
-
تُستخدم الfor await من أجل إتاحة صيغة الfor each ولكن للمُكررات(iterators) التي تقوم بإرجاع promise فمثلاً في الطبيعي إن كان لدينا مُكرر كما بالشكل التالي function* colorIterator() { yield "blue"; yield "red"; } يمكننا بكل سهولة أن نقوم بالمرور عبره بإستخدام forEach بالشكل التالي const iterat = colorIterator(); for (const color of iterat) { console.log(color); } ولكن ماذا إن كان لدينا مُكرر يحتوي على promises ? في تلك الحالة لن تفيدنا كثيراً صيغة الfor each حيث أنها ستقوم بإرجاع promise وليس قيمة , أي أنها ستقوم بإرجاع كائن كما هو بهذا الشكل Promise {<pending>} [[Prototype]]: Promise [[PromiseState]]: "pending" [[PromiseResult]]: undefined وﻻ نستطيع إستخراج بيانات مفيدة من كائن بهذا الشكل, في الطبيعي كنا نقوم بإستخدام صيغة .then للتعامل مع الpromises كما بهذه الشفرة my_promise.then(response=>///code) ولكن ﻻ يمكننا تنفيذ صيغة كتلك في الforeach , الحل أن نقوم إذا بإستخدام صيغة الfor await , فإن كان لدينا مُكرر كالتالي const asyncIterable = { [Symbol.asyncIterator]() { return { i: 0, next() { if (this.i < 3) { return Promise.resolve({ value: this.i++, done: false }); } return Promise.resolve({ done: true }); } }; } والذي ببساطة يحتوي على مجموعة من الpromises تقوم بإرجاع 1, 2, 3 فﻻ نستطيع إستخدام الfor each التقليدية لأننا لن نحصل إلى على promises لم تُعالج بعد, ففي تلك النقطة يجب إستخدام الfor await of كما في الشفرة البرمجية التالية (async function() { for await (let num of asyncGenerator()) { console.log(num); } وكما تﻻحظ عزيزي فإن الدالة التي تحتوي على الfor await هي من النوع async حيث ﻻ يمكننا إستخدام تلك الصيغة إلا على الدوال من النوع async
- 2 اجابة
-
- 1
-
نقوم أولا بالتعبير عن نمط البحث بإستخدام التعبيرات الإعتيادية (regular expression) حيث أننا نريد حذف رقم صفر فنقوم بكتابة 0 داخل قوس في التعبير, وبما أننا نريد حذف الأصفار المتتالية نقوم بكتابة عﻻمة التتالي وهي رمز + إن كنا نريد أن نحذف الأصفار الموجودة في بداية النص نقوم بكتابة رمز ^ قبل التعبير إن كنا نريد حذف الأصفار الموجودة في نهاية النص نقوم بوضع عﻻمة ال$ في نهاية التعبير في النهاية يُصبح التعبير كما بالشكل التالي "[0]+" /// لمطابقة جميع الأصفار المتتالية سواء في بداية أو نهاية أو منتصف النص "^[0]+" ///لمطابقة الأصفار المتتالية في بداية النص "[0]+$" //لمطابقة الأصفار المتتالية في نهاية النص وبالنسبة لتطبيق ذلك في لغة c++ يجب أوﻻً أن نقوم بإنشاء متغير من نوع regex ليقوم بحفظ التعبير الذي قمنا بتصميمه regex re("^[0]+") ومن ثم نقوم بإستخدام الدالة regex_replace التي تأخذ في أول مُعطى النص الذي نريد تنفيذ التعبير عليه, وفي ثاني معطى التعبير الذي قمنا بإنشاؤه , وفي ثالث مُعطى رقم التعبير إن كنا نمتلك مجموعة مختلفة من التعبيرات regex re("^[0]+"); string s="000sharaf"; cout<<regex_replace(s,re,"");////sharaf
- 1 جواب
-
- 1
-
يمكنك تحقيق ذلك عن طريق إستخدام المكتبة math في لغة جافا وتحديداً الدالة pow حيث تقوم الدالة math.pow بأخذ معطيان a, b وتقوم بإرجاع ناتج رفع العددa للقوى b فمثلاً math.pow(5,2) سيقوم برفع العدد 5 للقوى 2 مما يعطينا ناتج 25 ويمكن عمل برنامج بسيط من أجل ذلك بالجافا عن طريق الشفرة البرمجية التالية public void main(){ Scanner scan = new Scanner(System.in); int x = scan.nextInt(); int y = scan.nextInt(); System.out.println(math.pow(x,y)); }
- 2 اجابة
-
- 1
-
أجل يمكنك عمل ذلك في لغة php عن طريق إستخدام الدوال المجهولة (Anonymous functions ) وهي دوال يتم إنشاؤها دون إسم محدد ويمكن إنشاؤها ديناميكياً في وقت التنفيذ (run time) كما هو مُوضح في الشفرة البرمجية بالأدنى $arr_functions = [ 'getName' => function ($name) { echo $name; } ]; ويتم مناداتها بالشكل التالي $arr_functions['getName']("sharaf") ////prints sharaf وإن كانت الدالة بالفعل موجودة ولكن تريد ربطها بالمصفوفة يمكنك تحقيق ذلك الغرض عبر الصيغة الموضحة في الشفرة البرمجية function getName($name) { echo $name; } $functions = [ 'getName' => 'getName' ]; ولكن يجب مﻻحظة أنك إن كنت تستخدم php إصدار ما قبل 5.3 يجب إستخدام دالة create_function حتى تتمكن من تحقيق ذلك الغرض $arr_functions = array( 'getName' => create_function('$name', 'echo $nam;') ); كما تﻻحظ فإن الparameter يتم وضعه أولاً قبل شفرة الدالة
-
أرفق ملفات المشروع
-
من فضلك قم بطباعة الكائن post حتى يمكننا تحديد المشكلة بشكل أكبر
-
أجل يجب أن تتعلم الأساسيات قبل الخوض في الجافاسكريبت, وتلك الأساسيات هي الHTML, CSS حتى تقوم بفهم الأساسيات يجب أن تقضي فيها وقتاً وترى بعض الأمثلة حتى تتأكد تماماً من فهمك لها وتقوم بالتطبيق على تلك الأساسيات بنفسك حتى تترسخ تلك المفاهيم في عقلك
- 3 اجابة
-
- 1
-
ﻻ يوجد قانون لحساب العدد الاولي ولكن يوجد طرق أكثر فاعلية من المرور من الرقم 2 حتى الرقم س , ولكن دعنا نضع الإثبات الرياضي التالي أولاً حتى نستوعب الطريقة بشكلٍ أفضل دعنا نرمز للرقم المُراد معرفة إن كان أولي بالرمز س دعنا نفترض عددين أ, و ب إن كان أ>جذر س و ب > جذر س إذاً أ*ب > س مما سبق نستنتج أن ﻻ يمكن أن يكون أ و ب أكبر من س الإستنتاج السابق يُبت لنا أن ﻻ يمكن أن يكون للعدد أعداد يقبل القسمة عليها أكبر من جذرهِ التربيعي بالتالي يمكننا تحسين الخوارزمية بدلاً من المرور بدءاً من الرقم 2 حتى العدد س , أن نقوم بالمرور بدءاً من العدد 2 حتى الجذر التربيعي للعدد س وبالتالي يتم تقليل التعقيد الوقتي(time complexity) للخوارزمية لتتحول من O(n) إلى O(sqrt(n)) ويمكنك معرفة المقصود بالتعقيد الوقتي بشكل أكبر من خﻻل المقالة المرفقة
-
انت تقوم بإستخدام دالة array_merge والتي تقوم بأخذ مصفوفتين كمعطيات ومن ثم تقوم بدمجهم سوياً , فمثلاً إن كان لدينا المصفوفتين كما بالشكل التالي: $array1 = array("name" => "sharaf-eldeen", "age"=>21, 195,200); $array2 = array("besmellah", "test", "lastname" => "ashraf"); $big_array = array_merge($array1, $array2); print_r($result); سنجد ناتج الطباعة على النحو التالي Array ( [name] => sharaf-eldeen [age] => 21 [1] => 195 [2] => 200 [3] => besmellah [4] => test [lastname] =>ashraf ) وكما تﻻحظ أن كلاً من المعطيان الذان تأخذهما الدالة يجب أن يكونا على هيئة مصفوفات, وليس كائنات بينما تقوم الدالة json_decode بشكل إفتراضي بقراءة البيانات على هيئة كائن بدلاً من مصفوفة , ولتعديل ذلك السلوك يجب تمرير معطى ثاني قيمته boolean, تقوم بكتابة الدالة على النحو التالي لقراءة البيانات كمصفوفة $json = json_decode($json,true);