سامح أشرف
-
المساهمات
2934 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
56
إجابات الأسئلة
-
إجابة سامح أشرف سؤال في خطأ في جملة sqlite عند اعطى اكثر من شرط كانت الإجابة المقبولة
كلمة case هي كلمة محجوزة مثل SELECT و FROM لذلك لا يمكن إستعمالها بشكل مباشر كاسم عمود أو جدول، ولكن يجب أن تقوم باستخدام اسم العمود بين علامتي ` ` ، على النحو التالي:
SELECT * FROM word WHERE class >= 25 AND `case` != 65000; يمكنك كتابة العلامة ` (تسمى backtick) من خلال الضغط على حرف ذ في لوحة المفاتيح الإنجليزية.
تستطيع أيضًا استعمال علامات الاقتباس المفردة والمزدوجة بدون مشكلة (قد لا تعمل في أنواع أخرى من قواعد البيانات):
SELECT * FROM word WHERE class >= 25 AND 'case' != 65000; SELECT * FROM word WHERE class >= 25 AND "case" != 65000; -
إجابة سامح أشرف سؤال في كيفية عمل التحكم بمحتوى الواجهة الأمامية من خلال لوحة المدير؟ كانت الإجابة المقبولة
خدمة GitHub Pages لا توفر سوى إستضافة الملفات الساكنة Static Files أي ملفات HTML و CSS و JS وبعض الصور والفيديوهات .. إلخ، ولا يمكنك أن تقوم بتشغيل كود Backend عليها، لذلك إن أردت عمل لوحة تحكم Dashboard لتغير بعض المعلومات في الموقع الخاص بك، فستحتاج إلى إستضافة لتقوم بتشغيل كود مكتوب بـ Node.js (JavaScript) أو PHP أو Python أي لغة تطوير واجهات خلفية أخرى وعمل API، وفي الموقع الخاص بك تقوم بجلب اليبانات المطلوبة من الـ API وعرض هذه البيانات بالطريقة التي تريدها.
البيانات التي يتم جلبها من الـ API تكون مخزنة في قاعدة بيانات مثل SQLite أو MYSQL أو MongoDB ... إلخ، ويتم جلب هذه البيانات من قاعدة البيانات عند طلبها.
الهدف من كل ما سبق، هو تخزين البيانات في قاعدة البيانات، بحيث يمكنك عمل لوحة تحكم تقوم بإستعمال الـ API الخاص بك لتعديل البيانات المخزنة في قاعدة البيانات:
ما يحدث في قاعدة البيانات، هو أنك تقوم بملء إستمارة form بها اسم الموقع الشخصي الخاص بك ولون خلفية الموقع على سبيل المثال، وعند الضغط على "حفظ" يتم إرسال طلب إلى الخادم عبر API تقوم أنت بإنشائه، ويتم حفظ هذه البيانات في قاعدة البيانات، وعند زيارة الموقع الشخص الخاص بك، سيتم إرسال طلب إلى الخادم عبر API تقوم بتحديده ليتم جلب البيانات المخزنة في قاعدة البيانات وعرضها بالشكل الذي تريده بإستعمال JavaScript
-
إجابة سامح أشرف سؤال في كيفية الوصول الى البيانات القادمة من الخادم وطباعتها في console؟ كانت الإجابة المقبولة
المشكلة لديك في الكود هي أنك تقوم بإستدعاء الدالة showusername في حدث onClick ولكنك لا تقوم بتمرير أي شيء لها، حاول تعديل الكود الخاص بك ليبدو بالشكل التالي:
for (user of users) { let content = ` <div id="user" onClick="userClicked(${user.id}, this); showusername('${user.name}')"> <!-- ^^^ ^^^^^^^^^^^^^^^^^ --> <h3>${user.name}</h3> <h3>${user.email}</h3> </div> ` document.getElementById("users").innerHTML += content } لاحظ وضع علامة الفاصلة المنقوطة semicolon ; بين إستدعاء الدالتين showusername و userClicked وكذلك وضع user.name داخل علامات إقتباس ' '
الآن تحتاج إلى تعديل الدالة showusername لتقوم بطباعة الاسم الممرر لها:
function showusername(name) { console.log(name); } بهذا الشكل عند الضغط على أي مستخدم، سيتم طباعة اسمه في الـ console
أما إن أردت تمرير كائن user بالكامل إلى الدالة showusername وليس مجرد الاسم، فستحتاج إلى تحويل user إلى نص من خلال التابع JSON.stringify، مثال:
for (user of users) { let content = ` <div id="user" onClick="userClicked(${user.id}, this); showusername(${JSON.stringify(user).split('"').join(""")})"> <h3>${user.name}</h3> <h3>${user.email}</h3> </div> ` document.getElementById("users").innerHTML += content } function showusername(user) { console.log(user); } بهذه الطريقة سوف يتم طباعة كلئن user بالكامل عند الضغط على أحد المستخدمين.
-
إجابة سامح أشرف سؤال في ما هي "رفع الدوال Hoisting" في جافاسكريبت؟ كانت الإجابة المقبولة
في العادة يتم تعريف الدوال (إنشائها) قبل إستدعائها:
function hello() { console.log('hello, world!'); } hello(); أما رفع الدوال أو Hoisting تعني إستدعاء الدالة قبل تعريفها، على سبيل المثال إن قمنا بإستدعاء دالة قبل إنشائها، فمن الطبيعي أن يظهر لنا خطأ:
myFuntion(); // Uncaught ReferenceError: myFuntion is not defined هنا قمت بإستدعاء دالة myFunction ولكن هذه الدالة غير موجودة، وبالتالي يظهر خطأ يخبرني بذلك، وهذا الأمر طبيعي في أغلب لغات البرمجة، ولكن بالنسبة للغة JavaScript (وبعض اللغات الأخرى) يمكن إستدعاء دالة ما قبل تعريفها، على النحو التالي:
hello(); // hello, world! function hello() { console.log('hello, world!'); } في المثال السابق قمت بإستدعاء الدالة hello قبل حتى أن أقوم بإنشائها (الإستدعاء يسبق إنشاء الدالة بحسب ترتيب الأسطر)، ويمكن عمل هذا الأمر كذلك للمتغيرات التي يتم إنشائها عبر الكلمة المفتاحية var بدون مشكلة:
console.log(x); // undefined var x; x = 5; الكود السابق لن يسبب خطأ Error ولكن ستكون قيمة x هي undefined (غير معرف) إلى أن يتم تغير قيمتها لاحقًا
جدير بالذكر أن عملية الرفع Hoisting لا تعمل في كل مكان، فلن تتمكن من إستعمالها في بيئة تفاعلية مثل الـ Console في أدوات المطورين Dev Tools في المتصفح، وكذلك إن بدأ ملف JavaScript بجملة "use strict" فلن تتكمن من إستخدام هذه الميزة:
"use strict" console.log(x); // Uncaught ReferenceError: x is not defined var x; x = 5;
-
إجابة سامح أشرف سؤال في كيفية توليد قيمة منطقية Boolean عشوائية في بايثون python؟ كانت الإجابة المقبولة
يمكنك إستعمال التابع getrandbits للحصول على bit (صفر أو 1) وتحويله إلى قيمة منطقية Boolean من خلال الدالة bool:
import random # Generate Random Boolean value = bool(random.getrandbits(1)) print(value) هذه الطريقة أسرع بكثير من أغلب الطرق الأخرى، ومن الأفضل إستعمالها إن كنت تريد توليد الكثير من القيم العشوائية، بدلًا من إستعمال random.choice([True, False]) في كل مرة.
-
إجابة سامح أشرف سؤال في من الأفضل في صناعة الألعاب Unreal Engine 5 او Unity؟ كانت الإجابة المقبولة
كل المحركين قوي للغاية، وكلاهما معروفة وتم إستعماله في صناعة ألعاب ضخمة، ولكن يكمن الفرق الأساسي بينهما في اللغة المستعملة في تطوير الألعاب في كلاهما، فمحرك Unity يستعمل لغة #C بشكل أساسي للتطوير، بينما محرك Unreal يسعمل لغة ++C، لذلك إن كنت تتقن أحد هذه اللغات بالفعل فيُفضل أن تبدأ بالمحرك الذي يستعمل اللغة التي تتقنها.
من المعروف في هذا المجال كذلك أن Unity أسهل في التعامل من Unreal خصوصًا إن كان هذا هو أول تعامل لك مع محركات الألعاب، حيث أن Unity يوفر واجهة سهلة وبسيطة على عكس Unreal الذي يتطلب أن يكون لديك معرفة كبيرة لتتمكن من إستخدام كل المميزات التي يقدمها.
كما يتوفر عدد كبير من الشروحات باللغة العربية لمحرك Unity وستجد أن مجتمعه أكبر نوعًا ما عن محرك Unreal، نظرًا لأن Unity أسهل فإن توجه الكثير من الأشخاص لتعلمه يجعل عدد مستخدمين Unity أكبر، كما أن موقع Unity نفسه يوفر بعض الشروحات التي تساعدك في البدء في إستخدامه.
أيضًا إن كنت ستقوم بتطوير ألعاب من نوع VR أو أي ألعاب تعتمد على تقنيات مثل augmented reality أو virtual reality أو mixed reality، فسيكون Unreal أفضل في ذلك بما أنه يوفر ما يسمى بـ full XR Support والتي تساعد المطور على إنشاء ألعاب VR بسهولة مقارنة بـ Unity، على الجانب الآخر يوفر Unity دعم لإنشاء ألعاب الجوال بسهولة على عكس Unreal التي تكون ألعابه لأنظمة تشغيل الحاسوب، والسبب في ذلك هو حجم اللعبة الناتج في النهاية، حيث أن Unity يكون حجم ألعابه (مساحة اللعبة بالميجابايت) أصغر بكثير مقارنة بحجم ألعاب Unreal.
إن أردت أن تبدأ بصناعة الألعاب فأنصحك بهذه السلسلة (سلسلة تعلم Unity 3D) لتبدأ بها.
-
إجابة سامح أشرف سؤال في متى يمكنني أن أبدا في الأمتحان كانت الإجابة المقبولة
يمكنك أن تبدأ الامتحان في أي وقت بشرط أن تكون قد أتمت أربع مسارات من الدورة على الاقل وقمت برفع المشاريع على GitHub، وكل ما عليك فعله هو إرسال رسالة إلى الدعم الفني وسوف يحددون موعد الامتحان لك.
كل دورة لها امتحان خاص بها منفصل عن باقي الدورات. ويمكنك الحصول على مزيد من المعلومات عن الامتحانات والشهادة من خلال مركز المساعدة من هنا.
-
إجابة سامح أشرف سؤال في كيفية اختيار عنصر عشوائى من مصفوفة في java script؟ كانت الإجابة المقبولة
يمكن إختيار رقم عشوائي من خلال التابع random الموجود في الكائن Math:
Math.random(); // 0.3777513264733918 في كل مرة يتم إستدعاء هذا التابع سوف يتم توليد رقم عشوائي بين 0 و 1، ويمكننا أن نحصل على أي رقم عشوائي بين 0 و 5 على سبيل المثال من خلال ضرب الرقم الناتج في 5، مثال:
Math.random() * 5; // 2.9096869293887995 أما للحصول على عنصر من مصفوفة معينة علينا ضرب ناتج التابع random في طول المصفوفة ثم تحويل الرقم الناتج إلى رقم صحيح integer من خلال التابع floor
const arr = ['one', 'two', 'three'] const index = Math.floor(Math.random() * arr.length); // 2 const result = arr[index]; // three يمكن قراءة المزيد عن الكائن Math من خلال موسوعة حسوب من هنا
-
إجابة سامح أشرف سؤال في العمر المطلوب لتعلم البرمجة والحصول على الشهادة كانت الإجابة المقبولة
بالتأكيد، لا مشكلة بالنسبة للعمر، عليك فقط أن تنهي مسارات الدورة (أربع مسارات على الأقل) وتقوم بإتمام المشاريع الخاصة بها ورفعها على GitHub لمراجعتها وبعد ذلك يجب أن تخضع لأداء الإمتحان وفي حالة إجتيازه بنجاح ستحصل على شهادة بإسمك على الفور.
يمكنك معرفة هذه الأمور وأكثر من خلال مركز المساعدة الخاص بالأكاديمية من هنا.
-
إجابة سامح أشرف سؤال في حل مشكلة اختصارات vscode لا تعمل كانت الإجابة المقبولة
قد تكون هذه مشكلة في VS Code، حاول إعادة تشغيله وإنتظر بعض الوقت ريثما يتم تحميل الإضافات بالكامل، وحاول الضغط على CTRL + . (نقطة) أو CTRL + Space لعرض الإختصارات.
أيضًا لاحظ أن التابع getElementsByClassName يُعيد مجموعة من العناصر وليس عنصر واحد فقط، حيث يُعيد كائن يشبه المصفوفة array-like object ، لذلك لن تجد أن التوابع التي تعميل على العناصر موجودة، ويمكنك العمل على كل عنصر على حدى من خلال تحديد index:
console.log(take_element[0]);
-
إجابة سامح أشرف سؤال في كيف انشئ نظام مدمج كانت الإجابة المقبولة
هذه الأنظمة تسمى بالأنظمة المدمجة Embedded systems ويتم برمجتها من خلال لغة برمجة مثل C أو ++C أو Python، وتتكون هذه الأنظمة من جزئين Hardware و Software وفي كثير من الأحيان يتم إستعمال لوحات جاهزة مثل راسبيري باي أو أردينو في عمل هذه الأنظمة ويتم التحكم في هذه اللوحات من خلال لغات البرمجة التي أشرت إليها سابقًا.
أنواع الأنظمة المدمجة:
الأنظمة المدمجة المحمولة: أنظمة صغيرة الحجم كالكميرات الرقمية الأنظمة المدمجة المتصلة بالشبكة (Networked Embedded Systems): وهي انظمة تتصل بشبكة الانترنت لارسال او استقبال معلومات معينة كالهواتف المحمولة واجهزة الأمن المنزلي. الأنظمة المدمجة المستقلة (Standalone Embedded Systems): هذا النوع من الأنظمة المدمجة لا يعتمد على الشبكة, حيث يقوم بأداء مهامه بشكل مستقل كالالة الحاسبة. أنظمة الوقت الحقيقي: وهي الأنظمة المسؤولة عن انجاز مهام معينة خلال مدة زمنية محددة, غالبا ما تستخدم في المجالات الطبية والعسكرية وقطاع السيارات وخصوصا السيارات ذاتية القيادة, وفي الغالب يتم إستخدام لغات برمجة مثل C أو ++C في برمجة مثل هذه الأنظمة أيضًا ليس عليك أن تقوم ببرمجة نظام تشغيل كامل من البداية حيث يوجد الكثير من اللوحات الجاهزة والتي تحتوي على أنظمة تشغيل جاهزة للعمل وعليك أن تقوم ببرمجتها فقط لتحقق ما تريد فعله وستجد هنا مجموعة كبيرة من المقالات التي يمكنها مساعدتك في فهم الأنظمة المدمجة وكيفية إستعمال لوحات راسبيري باي.
-
إجابة سامح أشرف سؤال في هل اقدر اربط ReactJs and NodeJs and Django كانت الإجابة المقبولة
يمكنك إستعمال React.js في الوجهة الأمامية frontend مع إستخدام Django في الواجهة الخلفية backend، ويتم الربط بينهما من خلال عمل API، وليس من المفترض أن تستخدم جانغو Django مع Node.js في نفس الوقت حيث يؤدي كلًا منهما نفس الغرض وهو توفير واجهة خلفية backend.
أما إن كنت تريد أن تستخدم Node.js في الواجهة الخلفية backend في كل الموقع مع إستعمال Django في أجزاء معينة فقط فيمكنك القيام بذلك من خلال عمل API بجانغو Django ورفعه على خادم ما server واستخدام هذا ال API من داخل Node.js
يمكنك قراءة الاجابات هنا لمعرفة ما هو api
-
إجابة سامح أشرف سؤال في كيفية عرض محتوى ملف JSON في React.js؟ كانت الإجابة المقبولة
يمكنك عمل مكون باسم Children على سبيل المثال وإستخدامه لعرض أبناء كل شخص:
const Children = ({ person }: any) => { if (person.children) { return ( <details style={{ marginLeft: '24px' }}> <summary>{person.name}</summary> {person.children && person.children.map((child: any) => <Children person={child} />)} </details> ); } return <div style={{ marginLeft: '24px' }}>{person.name}</div>; }; ما يقوم به المكون السابق هو عرض اسم الشخص والتحقق مما إذا كان لديه الخاصية children، وفي حالة وجود هذه الخاصية سوف يتم إضافة عنصر details (العنصر المسئول عن السهم الأسود لإغلاق وفتح العنصر)، وفي داخله نقوم بعرض مكون children لكل ابن كذلك
أيضًا ستحتاج إلى المرور على كل شخص في المصفوفة persons وعرض المعلومات في جدول:
const app = () => { return ( <div> <table border="2"> <tbody> <tr> <th>column 1</th> <th>column 2</th> <th>column 3</th> </tr> <tr> {persons.map((item, i) => ( <td key={i}> <Children person={item} /> </td> ))} </tr> </tbody> </table> </div> ); }
-
إجابة سامح أشرف سؤال في تم ايقاف حسابي في Google Ads كانت الإجابة المقبولة
جوجل تتبع سياسة صارمة في ما يخص المواقع والتطبيقات التي تسمح بتحميل ونشر المحتوى بدون إذن صاحبها الرسمي وكذلك المواقع والتطبيقات التي تسمح للمستخدمين بتحميل ومشاركة المحتوى بدون إتصال (مثل مواقع تحميل الفيديوهات أو البرامج المسروقة أو أي منتجات رقمية لم يسمح صاحبها بإستعمالها بشكل رسمي).
يمكنك ملاحظة هذا الأمر من خلال تصفح تطبيقات الفيديوهات في متجر Play على سبيل المثال، ولن تجد أي منها يسمح لك بتحميل الفيديوهات من اليوتيوب، وذلك بسبب سياسة جوجل في منع تداول المحتوى بشكل غير قانوني، ويمكنك الإطلاع على هذه السياسة وغير من القوانين المتبعة في إعلانات جوجل من خلال هذه الصفحة Copyright policy. (يوجد ترجمة للصفحة باللغة العربية).
لذلك ستواجهة العديد من المشاكل في ما يخص الموقع الخاص بك بما أنه يسمح للمستخدمين بتحميل فيديدوهات اليوتيوب، وأفضل حل لهذه المشكلة هو الإعتماد على بديل لإعلانات جوجل (Google AdSense)
ملاحظة: بالرغم من سياسة جوجل الصارمة حول تحميل الفيديوهات من اليوتيوب، إلا أنها قد تتغاضى عن المواقع والتطبيقات التي تسمح للمستخدمين بتحميل الفيديوهات والصور من مواقع أخرى مثل Instagram و Facebook وغيرها، ويوجد بالفعل العديد من المواقع التي تعرض إعلانات جوجل وهي مواقع تحميل فيديوهات وصور من مواقع التواصل الإجتماعي.
-
إجابة سامح أشرف سؤال في كيفية عمل clone لمشروع لارافيل Laravel مفتوح المصدر بشكل صحيح؟ كانت الإجابة المقبولة
لكي تقوم بتحميل مشروع لارافيل Laravel من GitHub وتشغيله بشكل سليم، عليك إتباع الخطوات الآتية بالترتيب:
قم بعمل clone للمشروع من خلال الأمر التالي: git clone <رابط المشروع>
بعد الإنتهاء من تحميل المشروع، قم بالدخول إليه من خلال الأمر cd: cd project-name
الآن يجب تثبيت حزم PHP الخاصة بالمشروع، لذلك قم بتنفيذ الأمر التالي: composer install
ضمن ملفات المشروع ستجد ملف باسم env.example. وعليك أن تُعيد تسميته ليصبح env. أو يمكنك أن تقوم بتنفيذ الأمر التالي لإتمام هذه المهمة: composer run post-root-package-install الآن قم بفتح الملف env. هذا وأكتب إعدادات الإتصال بقاعدة البيانات (اسم قاعدة البيانات واسم المستخدم وكلمة المرور .. إلخ). بعد ذلك قم بتنفيذ الأمر التالي لعمل مفتاح key للمشروع والذي يستعمل في التأكد من أن كل بيانات المشروع المهمة محمية جيدًا php artisan key:generate
ولعمل الجداول في قاعدة البيانات وإضافة البيانات إليها: php artisan migrate --seed
بعد عمل كل الخطوات السابقة، يمكنك الآن تشغيل المشروع: php artisan serve
ثم فتح الرابط http://localhost:8000/ في المتصفح وستجد أن المشروع يعمل بشكل سليم. -
إجابة سامح أشرف سؤال في كيفية معرفة الرابط الحالي في لارافيل Laravel؟ كانت الإجابة المقبولة
يمكنك أن تستعمل التابع request()->is على النحو التالي:
<li class="{{ request()->is('posts') ? 'active' : '' }}"> <a href="{{ url('posts.index') }}" > {{ $config->website_name }} </a> </li> بهذا الشكل سوف يتم إضافة الصنف active إذا قمت بزيارة الصفحة posts/
أيضًا إن كنت تستعمل named routes فيمكنك أن تستعمل التابع routeIs الذي يوفره الكائن Request على النحو التالي:
<li class="{{ Request::routeIs('posts.index') ? 'active' : '' }}"> <a href="{{ url('posts.index') }}" > {{ $config->website_name }} </a> </li> وإن أردت أن تقوم بإضافة الصنف active لكل الصفحات الفرعية من posts/ فيمكنك أن تستعمل ما يسمى بـ wildcards وتُضيف نجمة إلى نهاية الاسم:
<li class="{{ request()->is('posts/*') ? 'active' : '' }}"> <a href="{{ url('posts.index') }}" > {{ $config->website_name }} </a> </li> // أو <li class="{{ Request::routeIs('posts.*') ? 'active' : '' }}"> <a href="{{ url('posts.index') }}" > {{ $config->website_name }} </a> </li>
-
إجابة سامح أشرف سؤال في الفرق بين app.css و index.css في react كانت الإجابة المقبولة
وعليكم السلام ورحمه الله وبركاته
في الواقع لا يوجد أي فرق عملي بينهما، فكلاهما مجرد ملفات CSS عادية يتم إستدعائها في مشروعك، ويمكن أن يتم إستعمال أحدهما دونًا عن الآخر بدون مشكلة، كما أنه ليس شرطًا أن يكونا بهذه الأسماء حيث يمكنك إعادة تسميتهم إلى أي شيء ترغب به.
الغرض من هذين الملفين هو أن يتم وضع أكواد CSS العامة التي تنطبق على المشروع ككل، فمن المتعارف عليه أن يتم إستعمال الملف index.css على سبيل المثال في كتابة خصائص CSS العامة واستدعاء المكتبات في داخله مثل أكواد tailwindcss على سبيل المثال، أيضًا أي أكواد خاصة بإعادة ضبط أكواد CSS في كل المتصفحات (مثل ما تقوم به مكتبة rest CSS و normalize.css) يتم وضعهم في هذا الملف.
أما الملف app.css فيحتوي أيضًا على أكواد CSS العامة الخاصة بالمشروع ولكن الفرق هو أن الملف app.css يحتوي على أكواد خاصة بالمشروع بشكل مباشر مثل ألوان المشروع الرئيسية والخطوط المستخدمه فيه والخلفيات الرئيسية .. إلخ بينما الملف index.css فهو خاص أكثر بضبط خصائص المشروع واستدعاء المكتبات الأخرى.
-
إجابة سامح أشرف سؤال في كيف استطيع تحميل المقاطع من اليوتيوب عن طريق الرابط ؟ باستخدام Node js كانت الإجابة المقبولة
يمكنك إستعمال مكتبة ytdl-core والتي توفر لك إمكانية تحميل فيديوهات من اليوتيوب بأي جودة تختارها:
عليك في البداية تثبيت الحزمة من خلال الأمر التالي:
npm i ytdl-core@latest # أو إذا كنت تستعمل yarn yarn add ytdl-core@latest بعد ذلك يمكنك أن تقوم بإستخدامها بالشكل التالي:
const fs = require('fs'); const ytdl = require('ytdl-core'); ytdl('https://www.youtube.com/watch?v=KKfAuQrwzTY') .pipe(fs.createWriteStream('video-file-name.mp4')); يمكن حتى إستعمالها لتحميل فيديوهات Shorts بنفس الطريقة:
ytdl('https://www.youtube.com/shorts/h_ZoMlNjANY') .pipe(fs.createWriteStream('video-file-name-2.mp4')); يمكنك كذلك التحكم في جودة الفيديو الذي سيتم تحميله:
const fs = require('fs'); const ytdl = require('ytdl-core'); ytdl('https://www.youtube.com/shorts/h_ZoMlNjANY', { quality: 'highest' }) .pipe(fs.createWriteStream('video.mp4'));
-
إجابة سامح أشرف سؤال في ماهي أفضل مكتبة عمل للواجهات الأمامية في تطبيقات ريأكت كانت الإجابة المقبولة
يوجد العديد من المكتبات الخاصة بتطوير الواجهة الأمامية بإستخدام React ربما يكون أشهرها Materia UI و chakra وreact bootstrap. كل هذه المكتبات وغيرها تؤدي وظيفة واحدة وهي تسهيل وتسريع عملية تطوير الواجهة على المبرمج من خلال إستخدام مجموعة من المكونات الجاهزة. ولكي تختار المناسب لك عليك أن تقوم بتجربتهم واختيار الاسهل من وجهة نظرك أو الذي يوفر لك مجموعة أكبر من المكونات للاختيار من بينها.
بالنسبة للفرق بين React Bootstrap و Bootstrap هو أن الأخيرة عبارة عن ملف CSS وملف JavaScript فقط وبإضافة هذه الملفات إلى أي مشروع ستتمكن من إستخدام أصناف Bootstrap الجاهزة وإستعمال أي مكونات من التوثيق الرسمي للمكتبة (مع تغير بعض أكواد HTML لتناسب JSX في React)، أما react Bootstrap فهي تحتوي على نفس مكونات bootstrap العادية ولكن في شكل مكونات جاهزة يمكنك إستدعائها في أي جزء من مشروعك بسهولة دون الحاجة لكتابة كود المكون بالكامل.
حاول الاطلاع على توثيق react Bootstrap وتوثيق مكتبة bootstrap ولاحظ الفرق في طريقة كتابة المكونات في كلاهما.
-
إجابة سامح أشرف سؤال في كيفية التأكد من أن ملف العرض view يتم إستدعائه في وضع الإختبار Test Mode في جانغو Django؟ كانت الإجابة المقبولة
يمكنك إستخدام المكتبة sys لمعرفة إن تم تمرير كلمة test ضمن أمر تشغيل المشروع أم لا:
# settings.py import sys TEST_ENVIRONMENT = len(sys.argv) > 1 and sys.argv[1] == 'test' بعد ذلك يمكنك الوصول إلى المتغير TEST_ENVIRONMENT في أي مكان في المشروع بالشكل التالي:
from django.conf import settings if settings.TEST_ENVIRONMENT: # ...
-
إجابة سامح أشرف سؤال في كيفية توليد مستخدمين بإستخدام fixtures في جانغو Django؟ كانت الإجابة المقبولة
يمكنك أن تقوم بهذا الأمر بشكل سهل إن كان لديك عدد صغير من المستخدمين تريد توليدهم، وذلك من خلال إستخدام لوحة admin وعمل بعض المستخدمين المزيفين (بما في ذلك كلمات المرور)، ثم تفريغ هؤلاء المستخدمين في ملف التركيبات fixtures باستخدام Dumpdata على النحو التالي:
django-admin dumpdata auth.User --indent 4 > users.json الجزء indent 4-- هو لتنسيق شكل الملف الناتج فقط وهو أمر إختياري، وفي النهاية ستجد اسم الملف users.json ويمكنك تغير إلى أي شيء تريده.
بعد ذلك يمكنك أن تقوم بإستدعاء هذا الملف وتحميل محتوياته من خلال الأمر loaddata كما يلي:
django-admin loaddata fixture users.json ملاحظة: يمكنك أن تقوم بإنشاء حساب مزيف واحد واستخدام Hashes في باقي fixtures الموجودة لديك إذا كنت بحاجة إلى الكثير من المستخدمين للاختبار
-
إجابة سامح أشرف سؤال في كيفية الحصول على عنوان MAC الخاص بالعميل في Laravel كانت الإجابة المقبولة
للآسف لا يمكن الوصول إلى عنوان Mac Address الخاص بالمستخدم، حيث لا يتم إرساله مع الطلبات requests من الأساس وذلك لأسباب أمنية، أما الدوال مثل exec و shell_exec فهي تقوم بجلب عنوان Mac Address الخاص بالخادم نفسه وليس عنوان Mac الخاص بالمستخدم، يمكنك الإطلاع على هذه الإجابة هنا حيث تحتوي على شرح وافي عن هذه الدوال وكيف يتم إستخدامها في جلب عنوان Mac الخاص بالخادم Server فقط:
إن كنت تحاول أن تقوم بالتميز بين المستخدمين وإعطاء كل مستخدم مُعرف خاص به id فيمكنك الإطلاع على هذه الإجابة لمعرفة كيف يتم هذا الأمر وكيف تقوم مواقع الإعلانات مثل Google AdSense من تتبع المستخدم ومعرفة أن نفس المستخدم هو الذي يزور عدة مواقع معينة بدون تثبيت برامج أو خدمات على حاسوب المستخدم نفسه:
يجدر بالذكر أن هناك موقع deviceinfo.me والذي يقوم بعرض كل المعلومات التي يمكن الحصول عليها من الطلب المرسل Request ولكن لن تجد ضمن هذه المعلومات أي شيء له علاقة بعنوان Mac
-
إجابة سامح أشرف سؤال في كيفية جعل قيمة settings.SECRET_KEY عشوائية في كل مرة يتم تثبيت جانغو Django؟ كانت الإجابة المقبولة
بداية من الإصدار 1.10 في جانغو Django ، أصبح بإمكنك إستعمال الدالة get_random_secret_key كذلك التي توفر لك توليد SECRET_KEY في كل مرة تستدعيها، ويمكنك إستعمالها بالشكل التالي:
from django.core.management.utils import get_random_secret_key SECRET_KEY = get_random_secret_key() # '+eyek9npq1xv1b5xt!dbx01pr72kf5ebq@f^@)8@$r@99(&e62' يمكنك الإطلاع على الكود الخاص بهذه الدالة في كود جانغو Django نفسه في مستودع المشروع.
ملاحظة: هذه الطريقة تقوم بتوليد مفتاح جديد في كل مرة تشغل فيها المشروع، وحتى وإن قمت بتشغيل أكثر من نسخة من نفس المشروع فسيعمل كلُ منها بمفتاح مختلف عن الآخر، وعليك أن تُشير في المشروع الخاص بك عن كيفية تغير قيمة SECRET_KEY ليتمكن المستخدمون بعد ذلك من تعديل المشروع وإستعماله بشكل سليم.
-
إجابة سامح أشرف سؤال في كيفية إضافة حقل field في نموذج Models يحمل قيمة حقلين آخرين في جانغو Django؟ كانت الإجابة المقبولة
يمكنك إضافة تابع method باسم full_name وإضافة المزخرف property@ حتى يمكن إستخدامه كخاصية عادية:
class Clients(models.Model): first_name = models.CharField(max_length=199) last_name = models.CharField(max_length=199) @property def full_name(self): return f'{self.first_name} {self.last_name}' كما ترى، يُعيد هذا التابع الاسم الأول والاسم الأخير بسهولة.
-
إجابة سامح أشرف سؤال في كيفية معرفة نوع الملف المرفوع في جانغو Django؟ كانت الإجابة المقبولة
جانغو Django يوفر إمكانية معرفة نوع الملف المرفوع بسهولة مثل معرفة اسم الملف:
file = request.FILES['filename'] file.name # اسم الملف file.content_type # نوع الملف text/html Image/png image/jpeg ... يُفضل إستخدام هذه الطريقة لأن الملفات المرفوعة غير آمنة وقد يتم تغير صيغة الملف المرفوع من svg إلى إلى png على سبيل المثال وفي هذه الحالة سوف يقوم المتصفح بعرض ملف SVG والذي قد يحتوي على أكواد JavaScript مما يُعرض الموقع إلى ثغرة XSS