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

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

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

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

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

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

  1. يمكنك إستعمال مكتبة multer Multer عبارة عن برمجية وسيطة node.js للتعامل مع بيانات متعددة الأجزاء / النموذج ، والتي تُستخدم أساسًا لتحميل الملفات. إنه مكتوب فوق busboy لتحقيق أقصى قدر من الكفاءة. var express = require(‘express’); var fs = require(‘fs’); var mongoose = require(‘mongoose’); var Schema = mongoose.Schema; var multer = require('multer'); // multer تضمين مكتبة // الإتصال بالخادم mongoose.connect(‘url_here’); // تحديد مخطط قاعدة البيانات var Item = new ItemSchema({ img: { data: Buffer, contentType: String } } ); var Item = mongoose.model('Books',ItemSchema); // middleware Multer باستخدام //لتحميل الصورة على جانب الخادم . app.use(multer({ dest: ‘./uploads/’, rename: function (fieldname, filename) { return filename; }, })); // إرسال الطلب للخادم وحفظ الصورة app.post(‘/api/photo’,function(req,res){ var newItem = new Item(); newItem.img.data = fs.readFileSync(req.files.userPhoto.path) newItem.img.contentType = ‘image/png’; newItem.save(); });
  2. في PHP ، يمكن تشفير نص ما وفك تشفيره باستخدام أحد امتدادات التشفير التي تسمى OpenSSL للتشفير وفك التشفير. الدالة ()openssl_encrypt تستخدم لتشفير البيانات <?php string openssl_encrypt( string $data, string $method, string $key, $options = 0, string $iv, string $tag= NULL, string $aad, int $tag_length = 16 ) عوامل الدالة الوظيفية ()openssl_encrypt data$: تحتوي على السلسلة أو البيانات التي يجب تشفيرها. method$: تم اعتماد طريقة التشفير باستخدام وظيفة ()openssl_get_cipher_methods. key$: يحتوي على مفتاح التشفير. options$: يحتوي على فصل أحادي للعلامتين OPENSSL_RAW_DATA و OPENSSL_ZERO_PADDING. iv$: يحتوي على متجه التهيئة . $tag : يحمل علامة المصادقة التي يتم تمريرها من خلال المرجع عند استخدام وضع تشفير AEAD (GCM أو CCM). $ aad: يحتوي على بيانات المصادقة الإضافية. $ tag_length: وهي تحمل طول علامة المصادقة. يتراوح طول علامة المصادقة بين 4 إلى 16 في وضع GCM تقوم الدالة بإرجاع السلسلة المشفرة عند النجاح أو FALSE عند الفشل. مثال <?php // قم بتخزين نص في المتغير الذي // تحتاج إلى أن تكون مشفرة $simple_string = "Welcome to hsoub academy\n"; // اعرض النص الأصلي echo "Original String: " . $simple_string; // تخزين طريقة التشفير $ciphering = "AES-128-CTR"; // OpenSSl استخدم طريقة تشفير $iv_length = openssl_cipher_iv_length($ciphering); $options = 0; // ناقل تهيئة غير فارغ للتشفير // يمكنك إختيار أي مفتاح تريد $encryption_iv = '1234567891011121'; // قم بتخزين مفتاح التشفير $encryption_key = "1234azoe567890apz34p"; // استخدم وظيفة openssl_encrypt () لتشفير البيانات $encryption = openssl_encrypt($simple_string, $ciphering, $encryption_key, $options, $encryption_iv); // اعرض النص المشفر echo "Encrypted String: " . $encryption . "\n"; //ناقل تهيئة غير فارغ لفك التشفير $decryption_iv = '1234567891011121'; // قم بتخزين مفتاح لفك التشفير // يجب إستعمال نفس المفتاح لفك التشفير $decryption_key = "1234azoe567890apz34p"; // openssl_decrypt لفك تشفير البيانات نستخدم $decryption=openssl_decrypt ($encryption, $ciphering, $decryption_key, $options, $decryption_iv); //اعرض النص التي تم فك تشفيره echo "Decrypted String: " . $decryption; ?>
  3. يمكنك إستعمال مكتبة minimist لتمرير قيم معيّنة كمتغيرات ومعالجتها ضمن كود الجافاسكريبت، فيما يلي مثال على كيفية استخدامه مأخوذ من التوثيق الرسمي للمكتبة: // parse.js ملف var argv = require('minimist')(process.argv.slice(2)); console.dir(argv); عند ننفيذ الأمر $ node example/parse.js -a beep -b boop تظهر النتائج كالتالي: { _: [], a: 'beep', b: 'boop' }
  4. مادام تم حل المشكلة الأولى المرجوا طرح الإستفسار الثاني كسؤال جديد لكي يتمكن باقي الأعضاء من الإجابت عليه.
  5. البطاقات مسبقة الدفع غير مقبولة ,للدفع بها لفتح حساب مطور, يمكنك التأكد من المعلومة من الموقع الرسمي طرق الدفع الخاصة بتسجيل حساب المطور هي كتالي: يمكنك الدفع مقابل تسجيل حساب مطور Google الخاص بك بواسطة بطاقات الإتئتمان التي تحمل الشعارات التالية: Mastercard Visa American Express Discover (United States only) Visa Electron (outside of the United States) الحل هو أن تطلب من البنك الخاص بك تزويدك ببطاقة صالحة للدفع و الشراء عبر الأنترنت بشعار visa أو Mastercard تأكد أنها ليست من نوع Prepaid cards
  6. هناك عدة قواعد يجب إحترامها عند كتابة أكواد HTML CSS و Sass أولا لنبدء ب HTML, لكتابة كود HTML نظيف يجب عليك : 1- كتابة الكود بجدية : أهم شيء تحتاجه لكتابة كود جيد هو رغبتك في فعل الأشياء بشكل صحيح. تعد كتابة كود HTML نظيفًا أمرًا سهلاً ، ولكن عليك أن تهتم وتولي الكثير من الاهتمام. وعدم التسرع في كتابة الشيفرات 2- إحترام مسافة البداية Indent : الكود ذي المسافة البادئة أسهل في القراءة ، وأسهل في الفهم ، وأسهل في التعديل ، وأسهل في الصيانة. ما عليك سوى إلقاء نظرة على مدى صعوبة فهم العلاقات بين الأب والطفل بين العناصر عندما لا يتم وضع مسافة بادئة للشفرة بشكل صحيح. 3- عدم المبالغة في إستخدام عناصر DIV: Divitis هو اسم مضحك لمشكلة شائعة في HTML. غالبًا ما نفرط في استخدام divs ، ويرجع ذلك أساسًا إلى أننا نريد التفاف واستهداف جميع عناصر التصميم في CSS. ثم ينتهي بنا الأمر بالحصول على قائمة أبدية من divs غير الضرورية تمامًا 4- تجنب التعليقات: HTML ليست لغة برمجة ، والتعليقات ليست ضرورية لأن ترميز HTML لا يحتاج إلى شرح. إذا وجدت نفسك تعلق على HTML كثيرًا ، فيجب عليك مراجعة مرجع عناصر HTML 5- كتابة أسماء الأقسام classes بشكل واضح: استخدم أسماء ذات معنى لمعرفاتك وفئاتك. يجب أن تكون قصيرة ووصفية وتمثل مفهومًا واحدًا فقط. سيجعل HTML الخاص بك أكثر وضوحًا وعملية التصميم أسهل أما بالنسبة ل CSS: 1- تسمية العناصر بذكاء يجب أن يكون اسم المحدد وصفيًا ذاتيًا وقابل للقراءة هناك العديد من اصطلاحات التسمية التي يمكنك استخدامها في مشروعك . 2- "لا تكرر نفسك" يرمز DRY إلى "لا تكرر نفسك". كما يمكننا أن نفهم من اسمها ، تهدف DRY إلى تجنب التكرار قدر الإمكان , يعني إدا كنت تحتاج نفس الكود في مناطق مختلفة في المشروع يمكنك وضعه على شكل قسم وإستعماله متى أردت ذلك 3- تجنب إستعمال important ! تتميز العلامة important! بأعلى درجة خصوصية لجميع محددات CSS. إذا كنت بحاجة إلى تجاوز علامة important! ، فعليك استخدام علامة important! أخرى. وهذا يجعلك تستخدم المزيد والمزيد من العلامات important! . مما يجعل صيانة شفرة CSS الخاصة بك أكثر صعوبة. 4- لا تستخدم الأنماط المضمنة وفقًا لمبدأ فصل الاهتمامات ، يجب فصل CSS و HTML لأسباب مثل سهولة القراءة والصيانة. 5- كن متسقا لا تتعلق كتابة كود HTML النظيف دائمًا باختيار الممارسات الجيدة وتجنب الممارسات السيئة. في كثير من الأحيان يمكنك استخدام طرق مختلفة لكتابة نفس سطر التعليمات البرمجية أما فيما يتعلق ب scss فيجب عليك 1- إنشاء المكونات تحدد بنية الملف واستراتيجية عملية التطوير المستقبلية ، خاصةً إذا كان تطبيقك ينمو وكنت تعمل مع فريق فكتابة المكونات سيسهل عليك المهمة 2- استخدم المتغيرات و mixins المحلية المتغيرات والخلطات عالمية في Sass. إذا قمت بتعريف $primary-color مرة واحدة ، يمكنك استخدام القيمة في أي مكان. هذا ليس بالشيء الجيد دائمًا. على سبيل المثال: لديك قيمة ثابتة (مثل الارتفاع الثابت) ، ولا تستخدمها إلا للمكون والعناصر التابعة له. سيكون الخيار الأول (وليس الخيار الفعال) هو ترميز القيمة عدة مرات ، بالإضافة إلى خيار آخر ، لإنشاء متغير عام. قد يؤدي هذا الأسلوب لاحقًا إلى تضخيم قائمة المتغيرات العامة الخاصة بك برمز محدد للغاية. 3- استخدم maps أو القوائم maps هي متغيرات Sass تشبه الكائنات. نستخدمها لقيم التخطيط العالمية ، ، وقيم التكوين العالمية الأخرى. قد تسأل ، "لماذا maps وليس المتغيرات العادية؟" على الرغم من أن استخدام متغير أسهل بكثير من جلب قيمة من map ، فإن النقطة الأساسية هي سهولة القراءة. maps عبارة عن كائن بمظهر JSON مع إمكانية تداخل القيم. بدلاً من قائمة طويلة من المتغيرات العامة (التي ليس من السهل قراءتها) 4- حلقة الأشياء المتكررة باستخدام for and @each@ ، يمكنك تحقيق رمز نظيف للغاية ويمكن صيانته بسهولة.
  7. للحصول على تفاصيل مثل البلد والقارة والمدينة و كل المعلومات الخاصة بالزائر ، تحتاج أولاً إلى الحصول على IP الخاص بالزائر. يمكن الحصول على عنوان IP بمساعدة superglobal $ _SERVER في PHP. بعد ذلك باستخدام API geoPlugin ، يمكننا الحصول على معلومات حول عنوان IP الخاص بالزائر. <?php // الخاص بالزائر IP هذا الدالة تقوم بإسترجاع function getVisIpAddr() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) { return $_SERVER['HTTP_CLIENT_IP']; } else if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { return $_SERVER['HTTP_X_FORWARDED_FOR']; } else { return $_SERVER['REMOTE_ADDR']; } } // في متغير IP تخزين $vis_ip = getVisIPAddr(); // IP طباعة echo $vis_ip; ?> المرحلة التالية هي استخدم واجهة برمجة التطبيقات للحصول على تفاصيل عنوان IP للزائر: هنا ، سنستخدم واجهة برمجة تطبيقات geoplugin للحصول على تفاصيل الزائر. ستقدم واجهة برمجة التطبيقات كائن json ، والذي يمكن تحويله إلى متغير PHP. <?php // كود PHP للحصول على البلد ، المدينة ، // IP القارة ، إلخ باستخدام عنوان $ip = '52.25.109.230'; // استخدم سلسلة JSON المشفرة وتحويلها // PHP إلى متغير $ipdat = @json_decode(file_get_contents( "http://www.geoplugin.net/json.gp?ip=" . $ip)); echo 'Country Name: ' . $ipdat->geoplugin_countryName . "\n"; echo 'City Name: ' . $ipdat->geoplugin_city . "\n"; echo 'Continent Name: ' . $ipdat->geoplugin_continentName . "\n"; echo 'Latitude: ' . $ipdat->geoplugin_latitude . "\n"; echo 'Longitude: ' . $ipdat->geoplugin_longitude . "\n"; echo 'Currency Symbol: ' . $ipdat->geoplugin_currencySymbol . "\n"; echo 'Currency Code: ' . $ipdat->geoplugin_currencyCode . "\n"; echo 'Timezone: ' . $ipdat->geoplugin_timezone; ?> سنحصل على النتيجة التالية : Country Name: United States City Name: Boardman Continent Name: North America Latitude: 45.8491 Longitude: -119.7143 Currency Symbol: $ Currency Code: USD Timezone: America/Los_Angeles
  8. هناك عدة طرق لكسب المال باستخدام مدونتك الخاصة. يوجد العديد من نماذج الأعمال التجارية المختلفة عبر الإنترنت والاستراتيجيات الشائعة لتوليد الدخل من خلال مدونتك أشهرها: - الإعلانات : يمكن أن يوفر لك الإعلان في موقعك مصدر دخل جيد من المحتوى الخاص بك على الإنترنت. المعلنون على استعداد للدفع لضمان ظهور إعلاناتهم لجمهورك. بنفس الطريقة التي يمكن أن تكون بها الصحيفة ذات الشهرة الكبيرة الكبيرة أكثر تكلفة للمعلنين ، فكلما زادت شعبية موقعك ومحتواك ، زادت الإيرادات التي يمكنك تحقيقها. - التسويق بالعمولة : ويوجد أيضا مايسما بالتسويق بالعمولة, يتضمن التسويق بالعمولة إرفاق المحتوى الخاص بك برابط لمنتج أو خدمة يبعها موقع آخر. عندما ينقر شخص ما على الرابط المتاح في صفحتك ، ويذهب إلى موقع الشركة التابعة ، ويشتري المنتج الذي أوصيت به ، فإنك تحصل على عمولة على البيع. - عروض المنتجات المادية أو الرقمية : لتحقيق الدخل من مدونتهم ، يقوم العديد من المدونين بتأسيس وجودهم على منصة التجارة الإلكترونية ، وإنشاء متجر على الإنترنت ، والبدء في بيع المنتجات ، سواء كانت مادية أو رقمية. على سبيل المثال ، في مدونة سفر ، يمكنك بيع قمصان عليها شعارك أو أدلة سفر رقمية إلى وجهات متعديدة. - الاشتراكات : إذا كان لدى مدونتك مجتمع يتوق لمعرفة المزيد حول الموضوع الذي تناقشه ، فإن نظام الاشتراك المدفوع هو طريقة أخرى لتوليد دخل طويل الأجل من المحتوى المفيد الخاص بك. - التدريب : إذا كانت مدونتك تقدم خدمات تدريبية ، فيمكنك كسب المال من خلال تقديم دورات عبر الإنترنت أو برامج تدريب مدفوعة الأجر.
  9. يمكنك إستخدام Booking Calendar يمكنك بسهولة إاستخدام تقويم الحجز ، يمكن لزوار موقعك تصفح مدى توفر التقويم وإجراء حجوزات لأيام وفترات زمنية محددة ، أو البحث عن العقارات والخدمات المتاحة لتواريخ وأوقات محددة. يمكنهم أيضًا الدفع عبر الإنترنت مقابل حجوزاتهم بمجرد تنشيط وتهيئة عمليات الدمج مع بوابات الدفع الشائعة. يمكنك بسهولة إدارة مواعيدك في لوحة تحكم المسؤول. يوفر تقويم الحجز لمسؤولي الموقع خيارات للموافقة على المواعيد أو رفضها يدويًا ، وإعداد إشعارات البريد الإلكتروني للمواعيد الجديدة ، وتصفية الحجوزات وفرزها باستخدام معلمات مختلفة. تم إنشاؤه في عام 2009 ، ويعتبر Booking Calendar هو المكون الإضافي الأصلي لنظام الحجز في الوردبرس
  10. إدا كنت تستعمل إصدار laravel أحدث من 5.5 فيمكنك ببساطة إستخدام الطريقة التالية return Storage::response($path_to_file); أو إدا كان الملف تم تخزينه محليًا ، يمكنك أيضًا استخدام الطريقة التالية: return response()->file($path_to_file);
  11. الطريقة المستعملة في تحديث جزء من الصفحة دون تحديث الصفحة كاملة هي ما يسمى ب ajax requests calls يمكن الحصول على معلومات من الخادم دون الحاج إلى تحديث الكامل لصفحة بواسطة javascript عن طريق المكون XMLHttpRequest // XMLHttpRequest إنشائ الكائن var xhttp = new XMLHttpRequest(); // XMLHttpRequest تحدد خاصية وظيفة يتم تنفيذها في كل مرة تتغير فيها حالة كائن onreadystatechange : xhttp.onreadystatechange = function() { // هي 200 readyState عندما تكون الخاصية هي 4 وخاصية status ، تكون الاستجابة جاهزة if (this.readyState == 4 && this.status == 200) { // تقوم الخاصية responseText بإرجاع استجابة الخادم كسلسلة نصية. // يمكن استخدام السلسلة النصية لتحديث صفحة الويب: document.getElementById("demo").innerHTML = xhttp.responseText; } }; // data.php سيتم الحصول على المعلمات من ملف xhttp.open("GET", "data.php", true); // إنهاء الإتصال xhttp.send() يمكنك قراءة المزيد حول XMLHttpRequest من هنا
  12. المشكلة ليست في إصدارات الحزم . // jquery هذا الكود يعمل في جميع إصدارات $(function () { $('.add-to-cart-btn').on("click", function () { alert('أضيف المُنتج إلى السلة'); }); }); المشكلة في في كيفية تضمينك ل jquery في webpack لكي تقوم بضمين jquery في webpack توجد العديد من الطرق أسهلها: في ملف webpack.config.js الخاص بك في المكون plugins ضع الكود التالي: plugins: [ new webpack.ProvidePlugin({ $: "jquery", jQuery: "jquery" }) ] هذا يعني أنه يمكن الوصول إلى jquery من داخل شفرة مصدر JavaScript عبر المراجع العالمية $ و jQuery. بالطبع ، تحتاج أيضًا إلى تثبيت jquery عبر npm: $ npm i jquery --save
  13. أولا لقد نسيت وضع قيمة action في ال form وهو ضروري لعمل post request و onsubmit event يعمل فقط عندما يتم عمل submit ل form و يمكن عمل ذلك بطريقتين: الأولى هي بواسطة زر submit <form action="https://your-domain.com/add-author" id="add-author-form" method="post" autocomplete="off"> <div class="row"> <div class="col-sm-6 col-12 mb-3 mb-sm-0"> <label for="name_ar" class="form-label">إسم الكاتب - عربي</label> <input required type="text" name="name_ar" id="name_ar" placeholder="إسم الكاتب باللغة العربية" class="form-control"> <small class="form-text text-danger name_ar"></small> </div> <div class="col-sm-6 col-12 mb-3 mb-sm-0"> <label for="name_en" class="form-label">إسم الكاتب - إنجليزي</label> <input type="text" name="name_en" id="name_en" placeholder="إسم الكاتب باللغة الإنجليزية" class="form-control"> <small class="form-text text-danger name_en"></small> </div> </div> <input type="submit" /> <!-- يجب ضافة زر هنا---> </form> الطريقة الثانية هي تاقائيا عن طريق javascript (مكتبنة jquery) مثلا $(document).ready(function(){ // للفورم submit هذه الدالة تقوم بعمل // يمكنك إستعمالها كيفما تريد var submitForm = function(e){ $('#add-author-form').submit(); } });
  14. نظرًا لأن ()Auth::user يعيد نموذج المستخدم الخاطئ ،App\User ، يجب عليك التحقق من مكون المصادقة auth configuration . في مصفوفة الموفرين providers غير النمودج App\User إلى App\Models\User 'providers' => [ 'users' => [ 'driver' => 'eloquent', // 'model' => App\User::class, 'model' => App\Models\User::class, ], ... ],
  15. يعد تعلم WordPress أمرًا سهلاً طالما أنك على استعداد للالتزام بضع ساعات كل يوم لمدة أسبوع. ستحتاج إلى بعض مهارات البحث الأساسية جدًا (مثل معرفة كيفية استخدام محركات البحث مثل Google) والقدرة على اتباع التعليمات لا يتطلب تعلم WordPress الكثير من الوقت أو المال. يمكنك القيام بذلك بنفسك ، بالسرعة التي تناسبك لست بحاجة إلى معرفة HTML أو لغات البرمجة الأخرى لبناء موقع ويب. سيكون من المفيد تعلمهم في المستقبل ، لكنك لست بحاجة إليهم لإنشاء موقع ويب باستخدام WordPress كمبتدئ. لا يمتلك غالبية مستخدمي WordPress مهارات البرمجة أو البرمجة ، وهم يستخدمون WordPress منذ سنوات. وبالمثل ، بدأ العديد من مطوري WordPress الناجحين مثلك تمامًا ، وهم الآن يصنعون مواقع الويب كمطورين ويب بدوام كامل. وأفضل المواقع اللتعلم كمبتدئ هي : 1- wpbeginner. 2- codex.wordpress.org 3- lynda (يوجد دورات مدفوعة للمستويات المتقدمة)
  16. تعتبر API Headers مصدرًا إضافيًا للمعلومات لكل استدعاء لواجهة برمجية وتتمثل مهمتهم في تمثيل البيانات الوصفية المرتبطة بطلب واجهة برمجة ا. إذا واجهت مشكلات في أحد واجهات البرمجية (API) ، فإن المكان الأول الذي يجب أن تبحث فيه هو headers ، حيث يمكنها مساعدتك في تعقب أي مشكلات محتملة. لتعيين headers في HTTP مع طلب Axios GET ، يجب أن تمرر كائنًا بخاصية headers كمتغير ثانٍ. const axios = require('axios'); const res = await axios.get('https://my-domain.com/get', { headers: { 'Test-Header': 'test-value' } }); ولإضافة headers التي ذكرت يمكنك كتابتها على الشكل التالي: const axios = require('axios'); const res = await axios.get('https://my-dmain.com/get', { headers: { 'Accept': 'application/json' 'Content-Type': 'application/json', 'Authorization': 'Bearer {token}' // token بقيمة {token} يجب إستبدال } });
  17. "this" يشير إلى كائن عام بشكل افتراضي ، يكون سياق التنفيذ سياقا عامًا - مما يعني أنه إذا تم تنفيذ كود كجزء من استدعاء دالة فهذا يشير إلى كائن عام. ولتوضيح هذه الفكرة أكثر لنقارن nodejs مع المتصفح , في المتصفح يوجد كائن window و هو الكائن العام في حالة المتصفح. وفي بيئة NodeJS ، ستكون قيمة الكائن العام هي قيمة كائن خاص يسمى global مثال في المتصفح this تمثل قيمة الكائن window function foo () { console.log("Simple function call"); console.log(this === window); } foo(); //prints true on console console.log(this === window) //Prints true on console. وأيضا يمكن استخدام الكلمة this داخل كائن واللتي ستدل على الكائن الحالي . person function Person(fn, ln) { this.first_name = fn; this.last_name = ln; this.displayName = function() { console.log(`Name: ${this.first_name} ${this.last_name}`); } }
  18. يمكنك إستخدام متغيرات البيئة دون تثبيث أي مكتبة جديدة, فقط بإستعمال الوحدات الأساسية ل Nodejs توفر الوحدة الأساسية في Node.js الخاصية env التي تستضيف جميع متغيرات البيئة التي تم تعيينها في ملف env فيما يلي مثال يصل إلى متغير البيئة PORT ، والذي تم تعيينه ملف .env افتراضيًا. process.env.PORT // "3000"
  19. منذ Node.js v0.12 واعتبارًا من Node.js v4.0.0 ، هناك وحدة أساسية مستقرة للقراءة. إليك أسهل طريقة لقراءة الأسطر من ملف ، بدون تثبيث إي مكتبات خارجية, مثال: const fs = require('fs'); const readline = require('readline'); async function processLineByLine() { // إستدعاء الملف المراد فراءته const fileStream = fs.createReadStream('input.txt'); // إستدعاء الواجهة و الربط مع الملف اللازم للقراءة const rl = readline.createInterface({ input: fileStream, crlfDelay: Infinity }); for await (const line of rl) { // قراءة سطر بسطر console.log(`Line from file: ${line}`); } } // إستدعاء الدالة لبدء القراءة processLineByLine(); يمكنك الإطلاع على المزيد من المعلومات حول الوحدة readline في nodejs في موقع التوثيق الرسمي ل nodejs من هنا
  20. في حالة كنت ترسل البيانات عن طريق ajax request من frontend إلى backend و تود معالجة هده البيانات بواسطة expressJS فعليك أولا إرسال البيانات كالتالي: var xhr = new XMLHttpRequest(); xhr.open("POST", '/create', true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.onreadystatechange = function() { // استدعاء الدالة عندما تتغير الحالة. if (this.readyState === XMLHttpRequest.DONE && this.status === 200) { // انتهى الطلب ، والمعالجة هنا. } } // إرسال الطلب xhr.send("foo=bar&lorem=ipsum"); ثم على جانب الخادم ، تحتاج إلى إضافة برمجية وسيطة تمكنك من إستقبال ومعالجة البيانات var express=require("express"); var bodyParser=require("body-parser"); var app=express(); app.use(bodyParser.urlencoded({extended: true})) app.use(bodyParser.json()); app.post('/create', function(req, res){ // هنا سيتم إستقبال البيانات اللتي تم إرسالها // ويمكنك معالجتها بالكيفية اللتي تريد console.log(req.body); });
  21. يشير مصطلح "شبكة توصيل المحتوى" (CDN) إلى مجموعة من الخوادم الموزعة جغرافيًا والتي تعمل معًا لتقديم محتوى الإنترنت بسرعة. تتيح شبكة CDN النقل السريع للموارد اللازمة لتحميل محتوى الإنترنت ، بما في ذلك صفحات HTML وملفات JavaScript وأوراق الأنماط والصور ومقاطع الفيديو. تستمر شعبية خدمات CDN في النمو ، واليوم يتم توجيه غالبية حركة مرور الويب عبر هذا النوع من الشبكات ، بما في ذلك حركة المرور من المواقع الرئيسية ، مثل Facebook و Netflix و Amazon. ما هي مزايا شبكة CDN؟ تختلف فوائد استخدام CDN اعتمادًا على حجم واحتياجات خاصية الإنترنت المعينة ، ولكن يمكن تقسيم الفوائد الرئيسية لمعظم المستخدمين إلى جوانب مختلفة: - تحسين مرات تحميل الموقع : من خلال تقريب المحتوى من زوار الموقع باستخدام خادم CDN قريب (من بين التحسينات الأخرى) ، يمكن لزوار الموقع الاستفادة من أوقات التحميل الأسرع على مستوى الصفحة. نظرًا لأنه من المرجح أن يتجنب الزوار المواقع البطيئة ، فإن استخدام CDN يمكن أن يساعد في تقليل معدل الارتداد وزيادة الوقت الذي يقضونه على الموقع. بمعنى آخر ، يؤدي موقع الويب الأسرع إلى زيادة عدد الزوار ومدة الزيارة. - انخفاض تكاليف النطاق الترددي : استهلاك النطاق الترددي للاستضافة هو عنصر نفقات رئيسي لمواقع الويب. من خلال التخزين المؤقت والتحسينات الأخرى ، تمكنت شبكات CDN من تقليل كمية البيانات التي يتعين على الخادم الأصلي تقديمها ، وبالتالي تقليل تكاليف الاستضافة لمالكي مواقع الويب. زيادة توافر المحتوى : قد تؤدي زيادة عدد الزيارات أو حدوث أعطال في الأجهزة إلى تعطيل الأداء الطبيعي لموقع الويب. نظرًا لطبيعتها الموزعة ، يمكن لـ CDN التعامل مع المزيد من حركة و الضغط على الخادم الرئيسي, ما هي عيوب شبكة CDN؟ - جميع الملفات تتواجد في خادم أخر و بالتالي أي عطل أو عطب في الخادم المضيف فسيؤثر على التطبيق أو الموقع الخاص بك. بإختصار شديد شبكة CDN لا يمكن الإستغناء عنها فهي توفر لك مزايا لا يمكن لخادمك الخاص أن يوفرها لك و ستجعل موقعك أو تطبيقك أكثر سرعة وأمان,
  22. بداية يجب عليك تحديد ما إذا كنت ترغبين بتعلم المجال لغاية إنشاء تطبيقات مدعمة بالذكاء الإصطناعي أو أنك ترغبين بفهم أدق التفاصيل بهذا المجال والرغبة في المساهمة بتطويره من خلال البحث في مختلف مجالاته ودعمها بأفكار جديدة تساهم بتطويره وحل مشكلات جديدة, وأنا من تجربتي الخاصة أعتقد أنه من الأفضل لك التخصص في مجال واحد وإتقانه, كما ذكرت أنك على وشك الدخول إلى الجامعة في تخصص الطب البشري فإن المجالين سواء الطب أو علم الذكاء الصطناعي مجالان كبيران جدا وسيصعب عليك الجمع بينهما, ولكي أوضح لك مدى شساعة المجال يمكن القول أنه مجال بتفرعات كثيرة لدرجة أن كل فرع هو مجال بحد ذاته، بما ان الـAI له تطبيقات في كثير من الفروع العلمية ولنفرض الطبية فالـAI للمختص بالطب يختلف عن مفهوم الـAI للمختص بالفيزياء لان كل شخص له فكرة عن الـAI وعلاقتة باختصاصة، لذلك يجب ان تدرسي احد الفروع في مجال الـAI فمن غير الممكن دراسة نظريات الـAI والتخصص به بشكل عام. اي حددي المجال الذي تنوين دراسة الذكاء الاصطناعي فيه، مثلا إذا كنت تودين دراسة الذكاء الإصطناعي في علوم الحاسوب فيجب ان تدرسي احد فروع الذكاء الاصطناعي فيه مثلا بناء روبوتات(Robotics) او تعليم الاله(Machine Learning) او Neural Networks او Evolutionary Computation او Vision, او Expert Systems او Speech Processing او Planning او Natural Language Processing بإختصار شديد أنا أنصحك بإكتشاف المجال قليلا والقراءة عنه بحيث تكتشفي مدى قدرتك على التخصص فيه, فإن وجدت نفسك قادرة على التعمق في المجال فيمكنك بعد ذلك تعلمه بشكل أكاديمي في الجامعة عوض الطب البشري, أما إذا كنت تودين التخصص في الطب فإجمعي كل تركيزك على الطب فهو أصلا مجال صعب ولن يتبقى لك وقت لدراسة أي مجال اخر.
  23. في ملف .gitignore يمكنك تجاهل المجلدات بأكملها ، فقط من خلال تضمين مساراتها ووضع / في نهايتها node_modules/ logs/ إذا تركت الشرطة المائلة في النهاية ، فستتطابق مع كل من الملفات و المجلدات بهذا الاسم. يمكنك استخدام بادئة ! لنفي تجاهل ملفات معينة *.log !example.log في هذا المثال ، لا يتم تجاهل example.log ، على الرغم من تجاهل كافة الملفات الأخرى التي تنتهي بـ .log. وهناك العديد من الطرق الأخر لتجاهل الملفات و المجلدات في .gitignore يمكنك الإطلاع عليها في التوثيق الرسمي
  24. عند حدوث أي خطأ في Laravel يتم تخزين المعلومات الخاصة بذلك الخطأ في ملف إسمه laravel.log تجده في المسار storege/logs/laravel.log يمكنك الإطلاع عليه ستجد الخطأ في آخر سطر بالتوفيق
  25. وأيضا يمكنك إستخدام UseEffect اللذي هو بمتابة hook React المكافئ لـ componentDidMount. يمكن كتابة الكود على الشكل التالي. import { useEffect } from 'react'; import { navigate } from 'gatsby'; export default () => { useEffect(() => { navigate('/posts/'); }, []); return null; }; و سيتم تحويل المستخدم إلى الصفحة posts/
×
×
  • أضف...