لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 08/21/23 في كل الموقع
-
السلام عليكم ورحمة الله وبركاته, ما الفرق بين NPM و Yarn و أيهمها أفضل ؟ وشكرًا لكم1 نقطة
-
السلام عليكم ، أنا قد اشتريت دورة علوم الحاسوب منكم و أنا محتار هل أتعلم سكراتش أم أبدأ مباشرة في لغة جافا سكربت مع العلم أني أخذت كورس cs50 من قبل1 نقطة
-
السلام عليكم ، أريد فقط أن أعرف كيف يقوم الحاسوب بفهم الحروف المدخلة من لوحة المفاتيح1 نقطة
-
السلام عليكم عملت regular expression تقبل الاحرف العربية والانجليزية والارقام لكن بها عيب /^(?=.{2,30}$)[\u0600-\u065F\u066A-\u06EF\u06FA-\u06FFa-zA-Z 1-9 .,]+(?:\s[\u0600-\u065F\u066A-\u06EF\u06FA-\u06FFa-zA-Z 1-9 .,]+)?$/ العيب هو انها لا تقبل الايموجي مثلا .. 👋😃 وانا اريدها ان تقبله .. كيف احل هذه المشكلة ؟ بعد البحث وجدت هذه (\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]) لكن لا اعلم كيف اضيفها1 نقطة
-
السلام عليكم . مع بداية الدراسة الجامعية ستصبح هناك كثير من الالتزامات و ضغوطات الاكاديمية . كيف أستطيع توفيق بين الدورة و الدراسة الجامعية . هل يكفي انذاك تخصيص 3 ساعات من الاجازة الاسبوعية. جزاكم الله خيرا.1 نقطة
-
تلك المواد مناسبة لمجالات Data Science وAI Engineering أو Computer Science، إلمامك بمفاهيم الاحتمالات والإحصاء والحساب التفاضلي العشوائي سيكون أساسيًا في فهم عمل الخوارزميات والنماذج في مجالات الذكاء الاصطناعي، كذلك، فهم نظريات الرسوم البيانية والبحث التشغيلي سيساعد في تطوير رؤية شاملة لحل المشاكل المعقدة. أيضًا موضوع أمان المعلومات مهم جدًا في عالم تكنولوجيا المعلومات، فهمك للأمان وكيفية حماية البيانات والأنظمة سيكون له تأثير كبير على تقديمك لحلول آمنة وموثوقة. أما قواعد البيانات العلائقية هي أحد أساسيات مجالاتك المستقبلية، فهمك لكيفية تنظيم وتخزين البيانات سيكون ضروريًا للتعامل مع الكميات الكبيرة من المعلومات التي ستتعامل معها في مجالات Data Science وAI. بالنسبة للإدارة واللغة والاتصال، فهى كما ذكرت مواد خاصة بالإدارة والإقتصاد. لذلك بعد السنة الأولى عليك تحديد المسار البرمجي الذي تريده من وستتضح لك الرؤية والمواد الهامة، لكن بالطبع عليك التخرج بتقدير جيد على الأقل فتلك إشارة جيدة.1 نقطة
-
شكرا جزيلا انا حاليا مقبل ان شاء الله على data science and AI engineering او C.S في حالة لم تتح المدرسة التخصص الاول. ففي غالب ظني ان اهم المواد هي : probability, statistics, stochastic calculus. graph theory and operational research . information security . relational data bases. أعتقد أن management (مادة اقتصاد) و language and communication ليسو باهمية المواد أعلاه. مارأي حضرتك مع العلم اني لن اتخصص في الشبكات . وشكرا1 نقطة
-
لا مشكلة تستطيع دراسة مسار قواعد البيانات ثم العودة لدراسة ما الدورة من البداية، حيث أن محتواها مرتب بناءًا على ما سبق، لكن قواعد البيانات تستطيع تعلمها بشكل منفصل. وبخصوص الوقت، عليك بتخصيص كل وقت فراغك لتعلم البرمجة إذا أردت التخصص في أحد مجالات البرمجة، حيث أن نصف ساعة يوميًا غير كافية إطلاقًا، بل 3 ساعات على الأقل أو ساعتين إن كان الوقت ضيق جدًا. أما إن كان ليس لديك سوى نصف ساعة فقط ولا أظن ذلك، فلا مشكلة قليل دائم أفضل من كثير متقطع. وكنصيحة لا تركز بشكل كبير على الدراسة الأكاديمية، اجتهد فقط في المواد التي لها فائدة لمسارك البرمجي وتقليل المجهود للمواد الغير مفيدة وستستطيع التفرقة بعد السنة الأولى وبعد دراسة دورة علوم الحاسب والتعمق في مجال البرمجة.1 نقطة
-
1 نقطة
-
تحقيق التوازن بين الدراسة الأكاديمية والدورات التدريبية أمرٌ هام لتحقيق النجاح في مجال التعليم وتطوير المهارات. إليك بعض النصائح التي يمكن أن تساعدك في ذلك: 1. **تخطيط جيد:** قم بإعداد جدول زمني يتضمن أوقات الدراسة وأوقات الدورات التدريبية. يساعد هذا في تنظيم وقتك بشكل فعّال وتجنب التداخلات. 2. **الأهمية النسبية:** حدد الأولويات واتخذ قرارات استراتيجية حول الدورات التي ترغب في اجتيازها والتي تتناسب مع أهدافك الشخصية والمهنية. 3. **تنسيق المحتوى:** حاول اختيار الدورات التي تكمل محتوى الدراسة الأكاديمية وتساهم في تطوير المهارات المطلوبة في مجالك. 4. **مرونة الجدول:** اختر دورات تدريبية تتيح لك مرونة في الجدول الزمني، مثل الدورات عبر الإنترنت التي يمكنك حضورها في أوقات مناسبة لك. 5. **استغلال الإجازات والعطل:** في حال كان لديك عطلة أو إجازة، يمكنك خصص جزء منها لمتابعة دورات تدريبية دون أن تتداخل مع الدراسة الأكاديمية. 6. **التقنيات الفعالة:** استخدم تقنيات إدارة الوقت والتنظيم مثل إنشاء قوائم مهام واستخدام التقويم لتتبع الأوقات المخصصة للدراسة والدورات. 7. **تواصل مع المدربين والأساتذة:** إذا كنت تتعامل مع مدربين أو أساتذة في الدورات التدريبية، فحاول التنسيق معهم بشأن الجدول الزمني والتحديات التي قد تواجهك. 8. **مراجعة دورات الدراسة:** تحقق من متطلبات الدورات التدريبية المختارة وتأكد من أنها لا تتعارض مع أوقات الامتحانات أو المشروعات الأكاديمية الهامة. 9. **الاستفادة القصوى:** حاول استفادة قصوى من الدورات التدريبية من خلال المشاركة الفعّالة وطلب المساعدة عند الحاجة. 10. **الراحة والاستراحة:** لا تنسَ أهمية الراحة والاستراحة. تجنب التحميل الزائد وتأكد من أن لديك وقت للاستجمام واستعادة النشاط. التوازن بين الدراسة الأكاديمية والدورات التدريبية يتطلب تنسيقًا جيدًا وتحقيق توافق بين الأهداف والتزاماتك المختلفة. تذكر أن الهدف هو تحقيق التطور الشخصي والمهني بشكل متوازن ومستدام.1 نقطة
-
شكرا جزيلا . لي سؤال اخر لو سمحت . لدينا في الجامعة مادة اسمها قواعد البيانات العلاقية (base de données rellationnelles). هل يمكنني ان اقفز مباشرة الى مسار قواعد البيانات واكماله ثم العودة الى المسار الحالي . ام يجب التسلسل حتى الوصول اليه. هل تخصيص نصف ساعة يوميا جيد ? و شكرا.1 نقطة
-
التوفيق بين الدورة والدراسة الجامعية يمكن أن يكون صعباً ، ولكن هناك بعض الاستراتيجيات التي يمكن أن تساعدك في إدارة الالتزامات الأكاديمية ومتابعة الدورة قم بتخطيط الوقت: قم بإنشاء جدول زمني دقيق يشمل ساعات الدراسة والمهام الأكاديمية وتوفير وقت لمتابعة الدورة. الاستفادة من الأوقات الفاصلة: استخدم الفترات الفاصلة بين المحاضرات أو بعد انتهاء اليوم الدراسي للعمل على متابعة الدورة. قد تجد أنه يمكنك الاستفادة من هذه الأوقات لإنجاز بعض المهام أو مشاهدة محتوى الدورة. حاول تخصيص وقت محدد في كل أسبوع للالتزام بالدورة. يمكنك تحديد مثلاً ثلاث ساعات في الأسبوع للتركيز على الدورة ومشاهدة المحتوى وإكمال المهام المطلوبة. تخصيص 3 ساعات من الاجازة الأسبوعية للدورة قد يكون مفيدًا، ولكن يجب عليك متابعة الدورة يومياً ولو لمدة تقل عن ساعة وهو ما يجب التركيز عليه1 نقطة
-
يمكن استخدام كل من NPM و Yarn في مشاريع تطوير JavaScript و Node.js. ومع ذلك، هناك بعض الحالات التي يمكن أن تؤثر في اختيار أداة التحكم في الحزم المناسبة. إليك بعض المعايير التي يمكن أن تساعدك في اتخاذ القرار: سرعة التنزيل: إذا كانت سرعة التنزيل تعد أمرًا مهمًا بالنسبة لك، فقد يكون Yarn الخيار الأفضل. يتميز Yarn بأداء أسرع في عملية تنزيل الحزم والمكتبات، وذلك بفضل استخدامه لآلية التخزين المؤقت والشبكة بشكل أكثر كفاءة. إدارة التبعيات: إذا كنت تعمل على مشروع كبير أو معقد يحتوي على العديد من التبعيات (dependencies)، فقد يكون Yarn الخيار الأفضل. يتمتع Yarn بقدرة أفضل على إدارة التبعيات وتحسين توافق الحزم المثبتة. الاستقرار والأداء: إذا كنت تبحث عن مستوى أعلى من الاستقرار والأداء، فقد يكون Yarn الخيار المناسب. Yarn قد يكون أكثر استقرارًا وأداءً في بعض الحالات، وخاصةً في المشاريع الكبيرة والمعقدة. التوافق مع البنية البيئية: يجب أيضًا أن تأخذ في الاعتبار التوافق مع البنية البيئية والأدوات الأخرى التي تستخدمها. إذا استخدمت بالفعل NPM بشكل واسع في مشروعك وتعمل بشكل جيد معه، فقد يكون من الأفضل الاستمرار في استخدامه بدلاً من إجراء تغييرات كبيرة. كما يوجد pnpm و هي أداة إدارة حزم JavaScript أخرى، وهي تهدف إلى حل بعض التحديات التي تواجهها NPM و Yarn. تعتبر PNPM فريدة من نوعها بسبب نهجها في توفير مساحة التخزين وإدارة التبعيات. إليك بعض النقاط التي يتميز بها PNPM: مشاركة التخزين: بدلاً من تنزيل الحزم وتخزينها بشكل منفصل لكل مشروع، يقوم PNPM بمشاركة التخزين المؤقت بين المشاريع. هذا يؤدي إلى توفير مساحة التخزين والوقت المستغرق في تنزيل الحزم. توفير مساحة القرص: PNPM يستخدم نهجًا يسمى "Hardlinking" لتوفير مساحة القرص، حيث يمكنه مشاركة نسخ مشابهة من الحزم بدلاً من تكرارها. هذا يقلل من استهلاك مساحة القرص ويوفر مزيدًا من الكفاءة. سرعة التثبيت: بفضل مشاركة التخزين واستخدام Hardlinking، يتم تسريع عملية تثبيت الحزم في PNPM. قد تكون عملية التنزيل والتحميل أسرع بشكل عام مقارنةً بـ NPM و Yarn.1 نقطة
-
1 نقطة
-
1 نقطة
-
1 نقطة
-
NPM (Node Package Manager) و Yarn هما كليهما أدوات لإدارة وتنزيل حزم البرامج والمكتبات في مشاريع Node.js وJavaScript. NPM (Node Package Manager) NPM هو مدير الحزم الأصلي لبيئة Node.js وهو مدمج مع تثبيت Node.js , يوفر واجهة سطر أوامر سهلة الاستخدام لتثبيت وتحديث الحزم , وتطورت أدوات إصدارات NPM مع الزمن لدعم أمور مثل إدارة الإصدارات وحلول تباين الإصدارات. Yarn Yarn هو منافس لـ NPM تم تطويره بواسطة Facebook وشركاءها. يهدف إلى تحسين أداء عملية التنزيل وإدارة الحزم و يقدم أداء أسرع من NPM بشكل عام بفضل تخزين الحزم المحلي وتوزيع موازي للتنزيل و يتيح للمطورين تثبيت الحزم بشكل متزامن، مما يزيد من كفاءة التثبيت والتحديث و يوفر واجهة أمر سطر أوامر مشابهة لـ NPM ولكن مع بعض الإضافات والخيارات.1 نقطة
-
NPM (Node Package Manager) و Yarn عبارة عن أدوات لإدارة حزم (Packages) وتعتبران جزءًا من بنية تطوير تطبيقات الويب باستخدام JavaScript. تهدف هذه الأدوات إلى تسهيل عملية تنزيل وتثبيت الحزم المكتوبة بلغة JavaScript والمستخدمة في تطوير التطبيقات. الفرق بين NPM و Yarn يكمن في بعض الجوانب التقنية وسهولة الاستخدام. إليك بعض الفروق الرئيسية بينهما: 1- الأداء: Yarn كان يعتبر في بادئ الأمر أسرع من NPM في عملية تنزيل وتثبيت الحزم. ومع ذلك، تم تحسين أداء NPM في الإصدارات الأحدث، لذا الفرق في الأداء قد تقلص. التحميل الموازي: Yarn يستخدم تحميلًا موازيًا لتحميل الحزم، مما يمكنه من تحسين سرعة التنزيل. بينما في الإصدارات السابقة من NPM، كان هناك مشكلة في تحميل موازي تم حلها في الإصدارات الأحدث. الذاكرة المؤقتة (Caching): Yarn يستخدم ذاكرة مؤقتة محلية (Local caching) لتسريع عملية التنزيل بشكل عام. بينما في NPM، تحدث الذاكرة المؤقتة بشكل افتراضي على مستوى النظام وقد يحدث تضارب في الإصدارات المحفوظة في الذاكرة المؤقتة. التوافق والدعم: NPM هو منشأة أساسية لعالم Node.js وJavaScript، ولذا فهو يتمتع بالتوافق مع العديد من الأدوات والبيئات. Yarn كان في البداية مخصصًا لحل مشكلات معينة في NPM ولكنه أصبح لاحقًا أداة قوية بنفسها. واجهة المستخدم: Yarn يقدم واجهة مستخدم أكثر وضوحًا وتفصيلاً عندما يتعلق الأمر بعمليات الإدارة والإصدارات. NPM يقدم واجهة مستخدم أبسط. بالنسبة لأيهما أفضل، فإن اختيارك يعتمد على احتياجات مشروعك.1 نقطة
-
إليك بعض النصائح لبناء تطبيق التواصل الاجتماعي: يمكنك استخدام React Native لبناء التطبيقات على Android وiOS أو Flutter كما في التعليق السابق. للواجهة الخلفية Backend ، يمكن استخدام Node.js مع Express أو Django بلغة Python أو Laravel بـ PHP. بالنسبة لقاعدة البيانات يمكنك MongoDB أو MySQL . احرص على استخدام WebSocket بدلاً من REST API للتفاعلات الفورية مثل الدردشة والإعجابات. راجع أمن التطبيق جيدًا وقم بالتشفير الصحيح لتخزين كلمات المرور والبيانات الحساسة. استخدم خادم قواعد بيانات منفصل لتخزين البيانات وخادم تطبيقات منفصل للمنطق البرمجي للفصل بينهما. راجع أداء التطبيق باستمرار وقم بالتحسين ، مثل الكاش والتخزين المؤقت للبيانات وتحسين استجابة الخادم. لا تنسى إمكانية توسيع النظام بسهولة مستقبلاً مع زيادة عدد المستخدمين. أتمنى أن تكون هذه النقاط مفيدة كبداية1 نقطة
-
إليك بعض الطرق الجيدة لتتبع التغييرات والإجراءات التي يقوم بها المستخدمون في موقع لارافل: استخدم ميزة التدقيق والمراجعة (Auditing) في لارافل حيث يقوم تلقائياً بتسجيل أي تعديلات أو إضافات أو حذف في قاعدة البيانات. استخدم Laravel Telescope لتسجيل كافة طلبات الويب والأحداث والاستثناءات والأخطاء والـqueries لتتبع كل شيء. بعض المكتبات المفيدة في Laravel لتتبع التغييرات والإجراءات: Spatie Activity Log: مكتبة رائعة لتسجيل نشاط المستخدم بسهولة، تقوم بتسجيل أي إضافة أو تعديل أو حذف تلقائياً. Owen It Activity Log: مكتبة بديلة لـ Spatie وتوفر نفس الميزات تقريباً. بهذه الطرق يمكنك تتبع ومراقبة جميع التفاعلات في الموقع بسهولة.1 نقطة
-
هناك العديد من المكتبات المتاحة، ولكن إحدى أفضل المكتبات هي Laravel Audit Trail، وهي مكتبة مجانية ومفتوحة المصدر تسمح لك بمراقبة جميع الأنشطة التي يقوم بها المستخدمون على موقعك. وبإمكانك استخدامها لمراقبة الطلبات التي يقوم بها المستخدمون، والملفات التي يقومون بتنزيلها، والصفحات التي يشاهدونها. لإعداد Laravel Audit Trail، تحتاج إلى إضافة الحزمة إلى مشروعك، باستخدام Composer: composer require laravel/audit-trail بمجرد إضافة الحزمة، تحتاج إلى تكوينها، عن طريق نشر ملف التكوين الخاص بالمكتبة باستخدام الأمر: php artisan vendor:publish --provider "OwenIt\Auditing\AuditingServiceProvider" --tag="config" ثم، قم بتكوين الملف في المسار config/audit.php وفقًا لاحتياجاتك، وتستطيع تعيين النموذج الذي ترغب في تتبع الأنشطة عليه وتحديد التفاصيل التي ترغب في تسجيلها. وبالطبع عليك تجهيز النموذج الذي تريد تتبع الأنشطة عليه بواجهة Auditable، من خلال إضافة الاستخدام التالي إلى نموذجك: use OwenIt\Auditing\Contracts\Auditable; class YourModel extends Model implements Auditable { use \OwenIt\Auditing\Auditable; // ... } بمجرد تجهيز نموذجك للمراقبة، ستبدأ المكتبة بتسجيل الأنشطة تلقائيًا، وبإمكاتك استدعاء دالة audit() على النموذج لتسجيل أنشطة إضافية بشكل يدوي. ومتاح لك استخدام واجهة المستخدم التي تقدمها المكتبة أو استعراض السجلات مباشرة من قاعدة البيانات، باستخدام النموذج Audit المقدم من المكتبة للاستعلام عن السجلات وتحليلها. وستجد شرح مفصل في المستند الرسمي: https://laravel-auditing.com/guide/installation.html1 نقطة
-
بشكل إفتراضي وضع الأخطاء في دوال mysqli مُعرف على النحو التالي: mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); MYSQLI_REPORT_ERROR: يرمي رسالة تحذير كلما حدث خطأ. PHP لا يوقف تنفيذ التعليمات البرمجية ، فقط يرسل الرسالة. MYSQLI_REPORT_STRICT: يحول رسائل التحذير هذه إلى mysqli_sql_exception. توقف PHP تمامًا عن تنفيذ التعليمات البرمجية. يُمكنك إستخدام try ... catch لإلتقاط الإستثناء و عمل شيء ما يناسب ما تريد: try { $con = mysqli_connect("localhost","user","password","my_db"); } catch(Exception $e) { echo "Error " . $e->getMessage(); } أو تغيير وضع الأخطاء إلى MYSQLI_REPORT_OFF، بمعنى لا تقم بعمل تقرير للأخطاء بالشكل التالي: mysqli_report(MYSQLI_REPORT_OFF); $con = @mysqli_connect("localhost","user","password","my_db"); if ($con) { echo 'connected'; } else { echo 'not connected ' . mysqli_connect_error(); } @ قبل إسم الدالة لمنع التحذيرات من الظهور، حاول عدم إستخدامها و سيظهر تحذير في المتصفح لكن البرنامج لن يتوقف سيواصل التنفيذ.1 نقطة
-
رسالة الخطأ تخبرك أنه لم يتم التعرف على قاعدة البيانات Unknown database 'stdz'، قم بالتأكد من قاعدة البيانات موجودة بالفعل وإن لم تجدها عليك إنشائها، وأظن أنها كانت لديك باسم std وليس stdz. وأتفهم ما تريد الوصول إليه، لكن لن يتم عرض الرسالة not connected والصحيح هو استخدام الكود التالي لعرض رسالة Database 'hsubgram' does not exist في حالة لم يتم إيجاد قاعدة بيانات بذلك الاسم : <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <?php if(isset($_POST["con"])){ $servername = 'localhost:3306'; // Hostname only $username = 'root'; $password = ''; $database = 'hsubgram'; // Connect to the server $conn = mysqli_connect($servername, $username, $password); if (!$conn){ die("Connection failed: " . mysqli_connect_error()); } // Check if the selected database exists $db_check_query = "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = '$database'"; $db_check_result = mysqli_query($conn, $db_check_query); if (!$db_check_result) { die("Database check failed: " . mysqli_error($conn)); } if (mysqli_num_rows($db_check_result) == 0) { die("Database '$database' does not exist."); } mysqli_close($conn); echo "Connected to database: $database"; } ?> <form method="POST"> <center> <input type="submit" value="connect" name="con"> </center> </form> </body> </html>1 نقطة
-
نماذج اللغة الكبيرة (أو Large Language Models) هي نوع من نماذج الذكاء الاصطناعي التي تُدرّب على كمية كبيرة من النصوص لتستطيع بذلك توليد نصوص مشابهة لها، وهنا يأتي ChatGPT وهو نموذج لغة كبير دُرّب على محتوى كبير جدًا من الانترنت، بحيث أصبح لديه اطلاع على الكثير من المعلومات واللغات وأساليب الكتابة، وطوّر باستخدام بعض التقنيات أهمها تقنية التعلم الموجه من قبل البشر RLHF (أو Reinforcement learning from human feedback) ليتّبع في توليده للنصوص اسلوب الحوار بين المستخدم والنموذج، مما يبسط طريقة التعامل معه وتوجيهه لتوليد النصوص التي نحتاحها، وفي هذا المقال سنتعامل مع ذلك النموذج لتوليد نصائح وحكم مفيدة للمستخدم بحسب ما يطلب أو يشعر، وذلك عبر واجهة سطر الأوامر نطورها ضمن بيئة نود (Node.js) حيث يُدخل المستخدم موضوع النصيحة أو الهدف منها ويولد ChatGPT ذلك، وستحتاج لاتباع المقال معرفة بلغة جافاسكربت وبيئة نود ومدير الحزم npm. إنشاء برنامج سطر أوامر باستخدام npm كي نتمكن من تنفيذ التطبيق بسهولة من سطر الأوامر كأي برنامج آخر مثبت على الجهاز وبدلًا من تشغيله كل مرة باستخدام نود Node.js والإشارة إلى مسار ملف جافاسكربت الرئيسي للبرنامج يمكننا الاستفادة من ميزة في npm تمكننا من تحديد ملف جافاسكربت من حزمة ما كالمشروع الذي سنطوره ونشره ضمن الجهاز كبرنامج ضمن سطر الأوامر، حيث يُستخدم مدير الحزم npm عادة لتعريف البرامج في نود كحزم يمكن استخدامها ضمن المشاريع الأخرى، ولنبدأ أولًا بإنشاء مجلد جديد لملفات المشروع وليكن بالاسم inspire-cli ونعرفه كحزمة نود بتنفيذ الأمر التالي ضمن المجلد: npm init -y سينشئ عن تنفيذ ذلك الأمر ملف تعريف الحزمة package.json ضمن المجلد، وباستخدام الخيار y- ستُملئ القيم الافتراضية ضمنه دون الحاجة لإدخالها يدويًا، والآن نُنشئ ملف البرنامج الرئيسي index.js والذي سيحتوي شيفرة البرنامج، ولتعريفه كبرنامج سطر أوامر يمكن بداخل ملف تعريف الحزمة package.json وضمن المفتاح bin تعريف كائن مفاتيحه هي أسماء برامج سطر الأوامر التي توفرها هذه الحزمة، وقيمها هي مسار الملفات التي ستُنفذ باستخدام نود عند تنفيذ البرنامج، لتطبيقنا سنعرف برنامج بالاسم ألهمني ومسار ملف البرنامج له هو الملف الرئيسي index.js كالتالي: "bin": { "ألهمني": "index.js" } وضمن ملف جافاسكربت الرئيسي لذلك البرنامج index.js نضيف السطر التالي لاختبار نجاح التنفيذ، ونلاحظ سطر البداية وهو سطر يدل مدير الحزم npm على الطريقة الصحيحة لإنشاء الملف التنفيذي لبرنامج سطر الأوامر المقابل لهذا الملف لتحديد بيئة تشغيله وهي نود: #!/usr/bin/env node console.log('مرحبًا') وبذلك يمكن لأي مستخدم بعد تثبيت هذا المشروع كحزمة على جهازه تنفيذ الأمر باستخدام اسم البرنامج المُعرف ضمن الكائن bin ليُنفذ البرنامج index.js في بيئة نود ويظهر له النتيجة، ولاختباره أثناء التطوير يمكن الاستفادة من أمر الربط link من مدير الحزم npm والذي يربط الحزمة ضمن البيئة العامة للجهاز لنتمكن من استخدامها من أي مكان، لذا ننفذ الأمر التالي ضمن مجلد المشروع: npm link . تدل النقطة على المشروع الذي نرغب بربطه وتعني المشروع في المسار الحالي، وبعد تنفيذ هذا الأمر أصبح الوصول لبرنامج سطر الأوامر ممكنًا من أي مكان لنختبر ذلك بتنفيذ الأمر التالي ضمن أي طرفية terminal لنلاحظ خرج البرنامج كالتالي: أصبح برنامج سطر الأوامر جاهزًا وسنبدأ في الفقرة التالية بتطويره ليستقبل الدخل من المستخدم عبر معاملات سطر الأوامر المُمررة له. دورة تطوير التطبيقات باستخدام لغة JavaScript تعلم البرمجة بلغة جافا سكريبت انطلاقًا من أبسط المفاهيم وحتى بناء تطبيقات حقيقية. اشترك الآن استقبال الدخل من المستخدم نحتاج أن يدخل المستخدم موضوع النصيحة أو الحكمة التي يرغب بها، ويمكن استقبال ذلك عبر معاملات سطر الأوامر التي يمررها المستخدم عند تنفيذ البرنامج، ويمكن الوصول إليها في نود عبر المتغير العام process.argv وهو مصفوفة من القيم أول قيمة منه هي مسار البرنامج التنفيذي لبيئة نود التي ستُنفذ البرنامج، والقيمة الثانية هي مسار ملف البرنامج الحالي الذي سيُنفذ، والقيم الباقية هي ما تُهمنا وهي جميع المعاملات المُمررة للبرنامج من قبل المستخدم عند تنفيذه، حيث سنجمعها معًا لنكون منها الجملة التي أدخلها المستخدم لتحضيرها قبل إرسالها، لذا نعدل ملف البرنامج index.js ليصبح كالتالي: #!/usr/bin/env node const args = process.argv.slice(2) const input = args.join(' ') حيث باستخدام التابع slice على مصفوفة المعاملات المُمررة للبرنامج يمكننا تجاهل أول عنصرين منها واستخراج المعاملات المُمررة فقط، وباستخدام التابع join نجمع تلك الكلمات ونفصل بينها بفراغات لتكون قيمة الثابت input هي جملة الدخل من المستخدم، وفي الفقرة التالية سنُرسل تلك الجملة إلى نموذج ChatGPT لتوليد النصيحة المطلوبة. إرسال الدخل إلى ChatGPT وتوليد النصيحة لنتمكن من التعامل مع نموذج ChatGPT عبر الواجهة البرمجية API له يجب إنشاء حساب جديد ضمن المنصة المالكة له OpenAI وإعداد الحساب كحساب مدفوع وإدخال وسيلة الدفع، بعد ذلك يمكن توليد مفتاح للتعامل مع الواجهة البرمجية نتأكد من نسخه والاحتفاظ به، وننفذ الأمر التالي مع تبديل قيمة المفتاح لتخزينه ضمن متغيرات البيئة لجلبه ضمن البرنامج لاحقًا: set OPENAI_API_KEY=<قيمة المفتاح> وضمن نظام ماك أو لينكس يمكن تنفيذ الأمر التالي: export OPENAI_API_KEY=<قيمة المفتاح> وبذلك عند تنفيذ البرنامج من نفس هذه الطرفية سيتمكن البرنامج من الوصول لقيمة ذلك المفتاح دون الحاجة لكتابته ضمن الشيفرة المصدرية، والآن لنرسل دخل المستخدم ونطلب من نموذج ChatGPT الرد المناسب ويمكن ذلك بحسب التوثيق الرسمي لواجهة النموذج البرمجية بإرسال طلب HTTP من نوع POST إلى مسار الواجهة البرمجية https://api.openai.com/v1/chat/completions ونضع مفتاح الواجهة ضمن الترويسة Authorization وقيمتها الكلمة Bearer ثم مسافة ثم قيمة المفتاح، وضمن جسم الطلب نحدد كقيمة للمفتاح model اسم النموذج الذي نرغب بالتعامل معه وهو gpt-3.5-turbo وهو الاسم التقني لنموذج ChatGPT بالإصدار الثالث، ونضيف كقيمة للمفتاح messages مصفوفة من الكائنات المُعبرة عن الرسائل المُرسلة للنموذج نرسل ضمنها رسالة المستخدم وهو الدخل المُمرر للبرنامج، ويمكننا توجيه النموذج لشكل الخرج الذي نريده عبر تشكيل رسالة المستخدم لتصبح بالشكل التالي: const message = `ألهمني بعبارة مختصرة عن الموضوع التالي: ${input}` وبذلك نرشد النموذج داخل البرنامج لطبيعة الرد الذي نريده منه دون أن يحتاج المستخدم سوى لإدخال الموضوع الذي يريده للبرنامج، وباستخدام fetch يمكننا إرسال طلب HTTP للواجهة البرمجية للنموذج كالتالي: fetch('https://api.openai.com/v1/chat/completions', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${proccess.env.OPENAI_API_KEY}`, }, body: JSON.stringify({ "model": "gpt-3.5-turbo", "messages": [{ "role": "user", "content": message }] }), }) حيث يعيد التابع fetch وعدًا (أو Promise) يمكننا استخدام التابع then للحصول على الرد، ونحول الرد القادم إلى صيغة json ثم نستخرج منها محتوى جواب النموذج على الرسالة المرسلة من قبل المستخدم وهي ضمن القيمة json.choices[0].message.content من رد json المرسل ونعرضها له على الشاشة كالتالي: fetch(...) .then(r => r.json()) .then(json => json.choices[0].message.content) .then(gpt_response => console.log(gpt_response)) وبذلك يصبح البرنامج جاهزًا لنختبره في الفقرة التالية لتوليد بعض النصائح المفيدة. اختبار البرنامج ضمن سطر الأوامر وبما أننا عرفنا اسم البرنامج بالاسم ألهمني يصبح تنفيذ البرنامج أشبه بكتابة جملة معبرة باللغة العربية، وفي كل مرة سيُولد النموذج نصيحة مختلفة بحسب الموضوع المحدد، فمثلًا لنرى ما لديه من نصائح حول النجاح بتنفيذ الأمر ألهمني عن النجاح: النجاح هو النتيجة الإيجابية للجهود المستمرة والتفاني في العمل لتحقيق الأهداف. لنرى ما سينصح به شخص يشعر بالتعب بتنفيذ الأمر ألهمني أشعر بالتعب: استرح قليلاً، واشرب ماء بكميات كافية، ومارس التمارين الرياضية بانتظام. نصيحة تقليدية لكن يجب الاهتمام بها، وعند تنفيذ نفس الأمر مرة أخرى حصلنا على نصيحة مختلفة: لا تستسلم للتعب، النجاح يتطلب الجهد والإصرار. لاحظ سهولة التعامل مع هذه النماذج باستخدام اللغة الطبيعية، مما يفتح الاحتمالات الواسعة لتطوير العديد من التطبيقات المفيدة والأفكار الرائعة التي تضيف للمستخدم قيمة مفيدة أو توفر الوقت والجهد في بعض الأحيان، حيث يمكن التطوير على التطبيق الذي طورناه في هذا المقال بالتعديل على التعليمة المرسلة للنموذج لتغيير النتيجة التي يولدها أو اللهجة التي يتكلم بها أو حتى أن يرد بلغة مختلفة أو أي أفكار أخرى تخطر في ذهنك يمكنك مشاركتها في التعليقات ومشاركة النتائج التي حصلت عليها بعد تجربتك تطبيقها. دورة الذكاء الاصطناعي احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة. اشترك الآن اقرأ أيضًا برمجة تطبيق 'لخصلي' لتلخيص المقالات باستخدام ChatGPT ولارافل تطوير تطبيق 'وصفة' لاقتراح الوجبات باستخدام ChatGPT و DALL-E في PHP تطوير تطبيق 'اختبرني' باستخدام ChatGPT ولغة جافاسكربت مع Node.js1 نقطة