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

محمد أيت لعرايك

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

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

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

كل منشورات العضو محمد أيت لعرايك

  1. مادام الموقع سريع في الإستضافى المحلية فالسبب رقم #1 لموقعك البطيء هو استضافة المواقع البطيئة قد يكون لديك موقع بطيء لأنك مستضاف على استضافة مجانية. أنت في خدمة استضافة منخفضة الجودة مع دعم ضعيف. أو يحتاج موقعك إلى حساب استضافة ذات مواصفات أعلى مع المزيد من الموارد مثل VPS. أو يمكن أن يكون سبب بطء الموقع الخاص بك مرتبط بقاعدة البيانات ، فكلما زادت المعلومات المحفوظة في قاعدة البيانات الخاصة بك وكلما زاد تعقيد موقعك ، زاد احتمال عدم تشغيل قاعدة البيانات بنفس الفعالية التي كانت عليها عند تشغيل الموقع لأول مرة. يمكن أن يكون امتلاك موقع ويب سرعته ضعيفة بمثابة كابوس إجمالي لأنه يمكن أن يؤثر على نجاحك كمالك أو مدون تجاري ، لذلك يجب أن تهدف إلى التعامل مع كل ما يسبب المشكلة في أسرع وقت ممكن. ولايمكن بأي حال من الأحوال أن تكون البرمجة هي سبب البطء مادام أنه يعمل بكفائة في الإستضافة المحلية.
  2. إذا كنت تستخدم مكتبة Jquery يمكنك إستخدام الطريقة التالية: function saveData(){ $("#button").prop('disabled', true); // عند الضغط على الزر لأول مرة نقوم بتعطيل الزر $.ajax({ type: "post", url: "{{ url('route_name') }}", dataType: "json", data: $('#ajax').serialize(), success: function(data){ $("#button").prop('disabled', false); // ثم نقوم بتفعيل الزر مجددا عند الحصول على الإجابة }, error: function(data){ alert("Error") } }); }); }
  3. يمكنك إستخدام orderBy سواء من الأكبر إلى الأصغر أو العكس مثال ترتيب الأشخاص من الأكبر إلى الأصغر حسب الpriority <?php $users = User::orderBy('priority', 'DESC')->get(); ولترتيب الأشخاص من الأصغر إلى الأكبر حسب الpriority نستعمل asc <?php $users = User::orderBy('priority', 'ASC')->get();
  4. يمكنك إختبار الكود الخاص بك باستخدام Postman ، لاختبار إجراءات نشر HTTP مع حمولة بيانات JSON الأولية ، حدد الخيار الأولي واضبط معلمات الرأس التالية: Content-Type: application/json تأكد أيضًا من التفاف أي strings مستخدمة كمفاتيح / قيم في حمولة JSON في علامتي اقتباس كهذه " ". هكذا ستقوم حزمة body-parser بتحليل حمولات JSON الخام متعددة الأسطر بشكل جيد. { "foo": "bar" } بعد ذلك بجب تكوين التطبيق لاستخدام ()bodyParser var express = require('express'); var app = express(); var bodyParser = require('body-parser'); // bodyParser() إستخدام app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json()); // ... أكتب الموجهات الأخرى منا
  5. يمكنك تمرير المتغيرات بين الوسطاء باستخدام كائن res.locals ، حيث تكون المتغيرات صالحة فقط طوال عمر الطلب. const express = require('express'); const app = express(); app.get('/clients', middleware1, middleware2, (req, res) => { res.send('clients page'); }) function logger1(req, res, next) { //تمرير المتغيرات res.locals.client = "gowtham"; res.locals.id = "3434"; next(); } function logger2(req, res, next) { // الوصول إلى المتغيرات const client = res.locals.user; const id = res.locals.id; console.log(client, id); next(); } app.listen(4300, () => console.log(`App is running`)); ملاحظة: لا يمكنك تمرير المتغيرات من خلال الدالة ()next لأنها تستخدم لتشغيل وظيفة البرامج الوسيطة التالية في التطبيق.
  6. في حالة تريد إستدعاء دالة في عدة سطور يمكنك إستخدام الأقواس على الشكل التالي: a = some_function( 1 + 2 + 3 - 4 ) أما إذا كنت تريد كتابة سطر برمجي عادي فيمكنك إستخدام الأقواس: a = 1 \ - 2 \ + 3 \ - 4 # االنتيجة 3
  7. إبتداءا من الإصدار 2.7 يمكنك إستعمال الدالة format بالشكل التالي: my_number = 12678940 my_string = '{:0,.2f}'.format(my_number) # النتيجة : # 12,678,940
  8. Destructor هي وظيفة يتم استدعاؤها تلقائيًا عندما يتم مسح كائن ما من الذاكرة. يعني أن أداة المسح من الذاكرة هي الوظيفة الأخيرة التي سيتم استدعاؤها قبل مسح الكائن. يمكن تعريفه مرة واحدة فقط في class. مثل المنشئات ، يتم استدعاؤها تلقائيًا. يتم تعريف Destructor مثل المنشئ. يجب أن يكون له نفس اسم class. لكنها مسبوقة بعلامة التلدة (~). مثال: #include <iostream> using namespace std; class Employee { public: Employee() // دالة المنشئ { cout<<"تم إنشاء كائن موظف"<<endl; } ~Employee() // دالة المدمر { cout<<"تم تدمير كائن الموظف"<<endl; } }; int main(void) { Employee e1; //بناء كائن الموظف return 0; } /** النتيجة : تم إنشاء كائن موظف تم تدمير كائن الموظف */ في C++ المدمر لا يمكن أن يحتوي على معلمات و يتم إستدعاء المدمر تلقائيا عند نهاية البرنامح لتفريخ الذاكرة من المعلومات,
  9. إذا كنت تريد كتابة إستعلام واحد و الحصول على الإسم الأكثر تكرارا يمكنك إستخدام الإستعلام التالي: SELECT `name` FROM `users` GROUP BY `name` ORDER BY COUNT(*) DESC LIMIT 1;
  10. كما ذكرت لك في الإجابة الأولى اولا يجب ان تأتي بجميع الاسماء على شكل مصفوفة من قاعدة الببانات. <?php $query = "SELECT name from users"; $result = mysqli_query($db, $query); if ($result) { $names = mysqli_fetch_assoc($result); // $names قم بتفيذ الأوامر التي ذكرت في الجواب الأول هنا بإستعمال المصفوفة } ستحصل على مصفوفة بها جمبع الأسماء, بعد ذلك قم بتطبيق الحل الذي اقترحت عليك في الجواب السابق لمعرفة الاسم الاكثر تكرارا عن طريق الدالة array_count_values,
  11. لفهم كيفية حساب العناصر المتكررة في مصفوفة هناك دالة ()array_count_values و هي دالة مضمنة في PHP تُستخدم لحساب جميع القيم الموجودة داخل المصفوفة. بعبارة أخرى ، يمكننا القول أن الدالة ()array_count_values تُستخدم لحساب تكرار جميع عناصر المصفوفة. وتستخدم كالتالي : array array_count_values( $array ) المعلمات: تقبل هذه الدالة مصفوفة واحد كمعامل. هذه المعلمة هي المصفوفة التي نحتاج إلى حساب عدد القيم الموجودة فيها. إرجاع القيمة: تقوم هذه الدالة بإرجاع مصفوفة ارتباطية بأزواج مفتاح-قيمة حيث تكون المفاتيح هي عناصر المصفوفة التي تم تمريرها كمعامل والقيم هي تكرار هذه العناصر في المصفوفة. مثال: <?php $output = array_count_values(["Geeks", "hsoub", "Geeks", "Geeks", "Welcome", "hsoub"]); /* النتيجة : Array ( [Geeks] => 3 [hsoub] => 2 [Welcome] => 1 ) */ $output = array_count_values([1, 1, 2, 3 , 1 , 2 , 4, 5]); /* النتيجة : Array ( [1] => 3 [2] => 2 [3] => 1 [4] => 1 [5] => 1 ) */ ثم بعد ذلك نقوم بإستخدام الدالة array_search على المصفوفة التي حصلنا عليها في المثال السابق لإيجاد الإسم الأكثر تكرارا <?php $array = array_count_values(["Geeks", "hsoub", "Geeks", "Geeks", "Welcome", "hsoub"]); echo array_search(max($array), $array); /** النتيجة: Geeks */ $array = array_count_values([1, 1, 2, 3 , 1 , 2 , 4, 5]); echo array_search(max($array), $array); /** النتيجة: 1 */
  12. أو يمكنك كتابة الدلة في الموجه admins على الشكل التالي: app.get('/admins', (req, res, next) => { role(req, res, next, req.user.role); }, (req,res) => { // admins أوامر الموجه }); بعد ذلك تكتب role middleware على الشكل التالي: const role = (req, res, next, role_name) => { if(role_name != 'admin'){ // هنا مثلا يمكنك التخقق من دور المستخدم ثم إجراء التحوبل إلى صفحة أخرى } next(); };
  13. تعدد الأشكال أو ما يسمى ب polymorphism في Java هو قدرة الكائن على اتخاذ أشكال عديدة. ببساطة ، يتيح لنا تعدد الأشكال في جافا أداء نفس الإجراء بعدة طرق مختلفة. و يعد تعدد الأشكال أحد أهم ميزات البرمجة الشيئية. في الحياة العملية يمكن فهم polymorphism بالشكل التالي مثلا : يمكن للفرد أن يكون لديه علاقات مختلفة مع أشخاص مختلفين. يمكن للمرأة أن تكون أماً ، أو ابنة ، أو أختًا ، أو صديقة ، وكل ذلك في نفس الوقت ، أي أنها تؤدي سلوكيات أخرى في مواقف مختلفة. وهذا ينطبق تماما على الكائنات في البرمجة الشيئية وهذا مثال عملي على كيفية عمل polymorphism في java // الفئة الأم (الأشكال) class Shapes { public void area() { System.out.println("The formula for area of "); } } // فئة المثلثات class Triangle extends Shapes { public void area() { System.out.println("Triangle is ½ * base * height "); } } // فئة الدوائر class Circle extends Shapes { public void area() { System.out.println("Circle is 3.14 * radius * radius "); } } class Main { public static void main(String[] args) { Shapes myShape = new Shapes(); // إنشاء كائن الأشكال Shapes myTriangle = new Triangle(); // إنشاء كائن المثلثات Shapes myCircle = new Circle(); // إنشاء كائن الدوائر myShape.area(); myTriangle.area(); myShape.area(); myCircle.area(); } نلاحظ أنه في كل كائن نستعمل الدالة ()area بشكل مختلف حسب طبيعة الكائن و هذا ما يسمى ب polymorphism يمكنك الإطلاع على المزيد حول هذا الموضوع في مقالة حسوب على الرابط التالي
  14. تقول Google إن عملية المراجعة قد تستغرق ما يصل إلى 7 أيام أو حتى أكثر من ذلك. ولكن عادةً ما يستغرق الأمر ما يصل إلى يومين. وللتوصل بجميع الإشعارات حول تطبيقك, قم بالدخول إلى حساب المطور الخاص بك ثم فعل الإشعارات كالتالي: الإعدادات -> التفضيلات -> الإشعارات من Play Console -> تحديثات التطبيق ثم قم بتفعيل الإشعارات, هكذا سوف تتوصل بجميع الإشعارات حوال التطبيق بما فيها قبول التطبيق وظهوره على المتجر.
  15. تسمح لك الدالة ()sort بترتيب عناصر المصفوفة في مكانها. بالإضافة إلى إعادة المصفوفة التي تم ترتيبها ، الدالة ()sort أيضا تغير مواضع العناصر في المصفوفة الأصلية. بشكل افتراضي ، تقوم الدالة ()sort بفرز عناصر المصفوفة بترتيب تصاعدي من الأصغر إلى الأكبر. في حالة إستعمال الدالة بشكل إفتراضي: let numbers = [0, 1 , 2, 3, 10, 20, 30 ]; numbers.sort(); console.log(numbers); // النتيجة // [ 0, 1, 10, 2, 20, 3, 30 ] في حالة تم تمرير دالة المقارنة الخاصة بطريقة الفرز التي تقبل عاملين وترجع قيمة تحدد ترتيب الفرز. فالنتيجة تكون على حسب طريقة الفرز في الدالة الممررة. يوضح ما يلي كيفية إستعمال دالة المقارنة: let numbers = [0, 1 , 2, 3, 10, 20, 30 ]; numbers.sort( function( a , b){ if(a > b) return 1; // نرجع عدد موجب if(a < b) return -1; // نرجع عدد سالب return 0; // نرجع 0 }); عند كل دورة تقوم الدالة ()sort بمقارنة زوجين من المصفوفة 0 و 1 ثم 1 و 2 ثم 2 و 3 و هذا ... في حالة تم إسترجاع عدد موجب من دالة المقارنة تضع العدد b في رتبة أقل من a وفي حالة تم إسترجاع عدد سالب فإن دالة المقارنة تضع العدد b في رتبة أكبر من a أما في حالة إسترجاع 0 فتعتبر a يساوي b وتترك مواقعها دون تغيير. بإختصار عند كل دورة تأخد الدالة عددين من المصفوفة, العدد الأول مع العدد اللذي بجانيه وتقارن بينهما ثم تغير مركزهما حسب الأمر الموجود في الدالة.
  16. في سياق MongoDB: يقوم النسخ المتماثل replication بإنشاء نسخ إضافية من البيانات ويسمح بتجاوز الفشل التلقائي لعقدة أخرى. قد يساعد النسخ المتماثل في القياس الأفقي للقراءات إذا كنت موافقًا على قراءة البيانات التي من المحتمل ألا تكون الأحدث تسمح sharding التجزئة بالتحجيم الأفقي للبيانات المكتوبة عن طريق تقسيم البيانات عبر خوادم متعددة باستخدام مفتاح جزء shard key . من المهم اختيار مفتاح جيد. على سبيل المثال ، قد يؤدي الاختيار السيئ للمفتاح إلى ظهور "نقاط فعالة" للبيانات تتم كتابتها على جزء واحد فقط تضيف البيئة المُقسمة مزيدًا من التعقيد لأن على MongoDB و عادةً ما يتم الجمع بين النسخ المتماثل replication والتجزئة sharding لإنشاء مجموعة مجزأة حيث يتم دعم كل جزء بواسطة مجموعة نسخ متماثلة. من وجهة نظر تطبيق العميل ، لديك أيضًا بعض التحكم فيما يتعلق بتفاعل النسخ / التجزئة ، على وجه الخصوص بإختصار Sharding يساعدك على حفظ الملفات الخاصة بك في مجلدات مختلفة و النسخ المتماثل Replication يعمل على مزامنة مجموعتك مع أقراص أخرى
  17. يمكنك ببساطة استخدام برمجية وسيطة لتتبع تقدم تحميل الملف. نحن نستخدم هذه البرمجيات الوسيطة قبل multer's middleware. من خلال هذه البرامج الوسيطة ، قمنا بتعيين مستمع حدث لكائن req لتتبع تقدم التحميل. ثم ندعو next لاستدعاء البرمجيّة الوسيطة التالية (Multer). مثال: const multer = require('multer'); const upload = multer({dest:'./tmp',limits: {fileSize: 4*1024*1024}}); function progress_middleware(req, res, next){ let progress = 0; const file_size = req.headers["content-length"]; // تعيين مستمع الحدث req.on("data", (chunk) => { progress += chunk.length; const percentage = (progress / file_size) * 100; // other code ... }); // استدعاء البرمجيات الوسيطة التالية next(); } // إنتظار طلب تحميل الملف router.post('/upload', progress_middleware, upload.single('upload'), (req,res) => { console.log(req.file); });
  18. في الموقع الخاص بك يمكنك إنشاء صفحة نموذج HTML يسمح للمستخدمين باختيار ملف الصورة الذي يريدون تحميله و هدا كود مبسط لكيفية فعل ذلك: 1- ملف HTML <!DOCTYPE html> <html> <body> <form action="upload.php" method="post" enctype="multipart/form-data"> إختر صورة <input type="file" name="fileToUpload" id="fileToUpload"> <input type="submit" value="Upload Image" name="submit"> </form> </body> </html> 2 - ملف upload.php <?php $target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); $uploadOk = 1; $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION)); // تحقق مما إذا كان ملف الصورة صورة فعلية أم صورة مزيفة if(isset($_POST["submit"])) { $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); if($check !== false) { echo "الملف عبارة عن صورة - " . $check["mime"] . "."; $uploadOk = 1; } else { echo "الملف ليس صورة."; $uploadOk = 0; } } ?> $target_dir - يحدد الدليل حيث سيتم وضع الملف يحدد ملف target_file$ مسار الملف المراد تحميله يحتفظ $imageFileType بامتداد الملف (بأحرف صغيرة) بعد ذلك ، تحقق مما إذا كان ملف الصورة صورة فعلية أم صورة مزيفة
  19. عند تحويل كائن من نوع bool إلى عدد صحيح ، تكون قيمة العدد الصحيح دائمًا 0 أو 1 ، ولكن عند تحويل int إلى كائن من نوع bool ، تكون القيمة المنطقية true لجميع الأعداد الصحيحة باستثناء 0. مثلا: >>> int(False) 0 >>> int(True) 1 >>> bool(5) True >>> bool(-5) True >>> bool(0) False
  20. استجد في الرابط التالي مجموعة من الدورات باللغة العربية التي تشرح GIT و Github من الصفر إلى الإحتراف. وتوجد أيضا منصة codecademy التي أنصح بها بشدة لتعم GIT وغيرها, فهي تتميز بكونها تعتمد على طريقة تعليم تفاعلية وغير تقليدية , و بلغة إنجليزية بسيطة وسهلة الفهم.
  21. يتم إستعمال كلمة dynamic في nextjs على الشكل الموضح في المثال أسفله: في المثال التالي ، سيتم تحميل الوحدة ../components/hello ديناميكيًا بواسطة الصفحة import dynamic from 'next/dynamic' const DynamicComponent = dynamic(() => import('../components/hello')) function Home() { return ( <div> <Header /> <DynamicComponent /> <p>HOME PAGE is here!</p> </div> ) } export default Home سيكون DynamicComponent هو المكون الافتراضي الذي يتم إرجاعه بواسطة ../components/hello. إنه يعمل مثل مكون React العادي ، ويمكنك تمرير الدعائم إليه كما تفعل عادةً. يمكنك تطبيق نفس الطريقة في الشيفرة الخاصة بك.
  22. أحرف اللغة العربية غير موجودة في مجموعة أحرف ASCII (0-127 ، على سبيل المثال 0x0 إلى 0x7F). حاول تغيير جزء فئة الحرف من التعبير العادي إلى [\ p {L} \ p {N} \ p {Pd} _] \ p {L} يتطابق مع أي شيء يونيكود يؤهل ليكون حرفًا ولكن ليس شرطة سفلية \ p {N} يتطابق مع أي شيء يشبه الرقم \ p {Pd} هي شرطة ترقيم تتضمن شرطة. انظر هنا لمعرفة المزيد عن تعبيرات Unicode الخاصة ياللغة العربية
  23. في الواقع ، هناك أمر لنقل مجموعة من قاعدة بيانات إلى أخرى. لنسخ مجموعة ، يمكنك استنساخها على نفس قاعدة البيانات ، ثم نقل المجموعة المستنسخة إلى قاعدة البيانات الجديدة لنسخ مجموعة نستعمل الشيفرة البرمجية التالية: > use db1 switched to db db1 > db.source_collection.find().forEach( function(x){ db.collection_copy.insert(x) } ); بعد ذلك ننقل المجموعة المستنسخة إلى قاعدة البيانات الجديدة: > use admin switched to db admin > db.runCommand( { renameCollection: 'db1.source_collection', to : 'db2.target_collection' } ); بمكنك إستعمال نفس الطريقة لنسخ ونقل المجموعات الأخرى
  24. في الواقع هناك العديد من الطرق لتسريع تحميل الصورة و الأيقونات أهمها: تغيير حجم الصور قبل استخدامها ضغط الصور لتوفير حجم أكبر استخدم CDN لتضمين صورك ومحتوياتك الأخرى تفعيل التخزين المؤقت في المتصفح الخاصبك إذا طبقت كل هذا ومازال تحميل الصور و الأيقونات فأنصحك تغببر الإستضافة وإختيار إستضافة أسرع إذا كان لديك مضيف ويب بأوقات استجابة بطيئة ، فهذه النصائح لن تفيدك في شيء, أي أن سرعة موقعك ستتأثر دائمًا بأداء مضيفك. لذلك ، إذا كنت قد نفذت كل شيء أعلاه وما زلت تشعر بخيبة أمل بسبب أوقات تحميل الموقع مع الصور والأيقونات، فقد يكون الوقت قد حان للتغلب على المشكلة والتحول إلى مزود استضافة متميز. أو إذا كنت تبحث عن خيارات أرخص لكنها لا تزال فعالة ، فأنا من أشد المعجبين بـ SiteGround.
  25. قبل التعامل مع التواريخ في mongodb يجب عليك معرفة مايلي: يجب عليك تمرير كائن Javascript Date. يجب أن يكون صديقًا لـ ISODate تحتاج إلى معالجة التاريخ حتى ISO عادة ما يكون العمل مع التواريخ عملية شاقة دائمًا ، mongodb ليس استثناءً فيما يلي مقتطف عمل من التعليمات البرمجية ، حيث نقوم بتمرير تاريخ للإستعلام و هنا أستخدم وحدة mongoose وأريد نتائج للصفوف التي تكون سمة التاريخ فيها أكبر من أي (بعد) التاريخ المحدد var inputDate = new Date(myDate.toISOString()); MyModel.find({ 'date': { $gte: inputDate } })
×
×
  • أضف...