-
المساهمات
2852 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
38
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Hassan Hedr
-
حاول تنفيذ الأمر التالي sudo nano /etc/apache2/sites-available/default يجب أن يظهر لك محتويات ملف الإعدادات ويمكنك تعديل إعدادات AllowOverrides، إذا ظهر لك خطأ أو خرج آخر يرجى إرفاقه
-
ما الذي تستخدمه لتخديم ملفات موقعك، هل تستعمل WAMP أم برنامج آخر
-
إذا كنت تريد استخدام مكتبات ضمن شيفرة المشروع بطرف العميل نعم ستحتاج لتنفيذ الأمر npm init وذلك لإنشاء ملف package.json يتضمن فيه على الأقل المكاتب المستخدمة والنسخ المراد تثبيتها ضمن مشروعك سيمكنك ذلك من تثبيت الاعتماديات التي يعتمد عليها مشروعك ويمكن لأي شخص آخر استخدام مشروعك للتطوير عليه وتثبيت الاعتماديات لديه محليًا يمكنك مراجعة الفيديو التالي لمعرفة كيفية استخدام مدير الحزم npm:
-
ضمن مجلد مخدم Apache ستجده في أحد المسارات التالية، افتح الملف وطبق الاعدادات السابقة المذكورة: conf/httpd.conf sites-available/default
-
حاول الوصول لملف الإعدادات للموقع لديك، عادة يكون في المسار etc/apache2/sites-available/default/ ابحث عن الوسم <Directory /var/www> وعدل الخاصية AllowOverride إلى All <Directory /var/www> AllowOverride All ... ^^^ <Directory> ثم قم بإعادة تشغيل الخدمة، إذا كنت تستخدم لينكس يمكنك تنفيذ التالي sudo systemctl apache2 restart
-
يجب أن تحدد ما تحاول القيام به، برنامجك قد يحتاج لجلب بعض البيانات من خادم ما أو لجلب ملفات (صور - فيديو - نصوص)، بحسب لغة البرمجة التي تعمل عليها والمشكلة التي تحاول حلها قد تجد شيفرات جاهزة أو شبيهة تستطيع إعادة استخدامها ضمن مشروعك
- 2 اجابة
-
- 1
-
-
لكتابة برنامج ما ستحتاج للغة برمجة عالية المستوى، أي تشبه إلى حد ما اللغات المحكية، أغلب لغات البرمجة تكون باللغة الانكليزية لأنها الأوسع انتشارا، هناك عدة لغات برمجة عربية تستخدم مفردات عربية ضمنها: لغة ألف لغة جيم لغة الأسس البرمجية لغة إبداع لغة عموريا حاليًا إذا رغبت الدخول في مجال البرمجة فالطلب يكون على لغات البرمجة الإنكليزية لانتشارها وانتشار الدعم الواسع لها من مكتبات وتوثيقات
- 1 جواب
-
- 1
-
-
هل يمكنك شرح ما تحاول تحقيقه من تلك القواعد، هل تريد فقط الوصول إلى ملفات html عن طريق روابط لا تنتهي باللاحقة html.
-
حاول تعديل القواعد لتصبح على الشكل التالي: RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^([^\.]+)$ $1.html [NC,L] ErrorDocument 404 "This page is not allowed" قد تكون المشكلة في طريقة إعادة كتابة الرابط من جديد ليدل على الملف
-
بما أنك عينت الحقل user_id كمفتاح للربط مع الجدول users يجب أن يتواجد هذا الحقل ضمن الجدول blogs، قم بإزالة التعليق من سطر تعريف هذا الحقل وتغيير نوعه إلى unsignedBigInteger // $table->unsignedinteger("user_id"); ^^ $table->unsignedBigInteger("user_id"); ^^^^^^^^^^^^^^^^^^ ثم أعد تنفيذ عملية التهجير في حال كانت لا يوجد بيانات في قاعدة البيانات لديك كالتالي php artisan migrate:fresh
-
المكتبات Libraries تاريخ تسمية المكتبات بذلك بدأ قديما على الحواسيب القديمة حيث كان المبرمجون يخزنون البرامج على أقراص ذاكرة، ولإضافة برنامج أو وظيفة ما يقومون بتركيب أحد تلك الأقراص التي تحوي على البرنامج ضمن الحاسوب ليقوم بتحميلها والعمل عليها. حاول المبرمجون لسهولة العمل تقسيم الوظائف التي تستخدم بكثرة ضمن أقراص منفصلة يمكن إعادة استخدامها ضمن أكثر من برنامج، ورتبو تلك الأقراص ضمن مكتبة مقسمة لفرز الأقراص بحسب وظيفتها البرمجية. من هنا أتت كلمة مكتبة، أي مكتبة وظائف يمكن استخدامها والاستعانة بها ضمن أكثر من برنامج بدلًا من إعادة كتابتها كل مرة، المكتبة تقدم لك توابع ووظائف تقوم باستدعائها تفيد في تطوير برنامجك أطر العمل Frameworks إطار العمل في الناحية الأخرى هو أيضًا مجموعة من الوظائف التي تساعدك في تطوير برنامجك، لكن الفرق هو أن إطار العمل هو من يستدعي أقسام من برنامجك وليس العكس، يكون إطار العمل عادة محدد بطريقة عمل معينة عليك الالتزام بها ليساعدك بشكل صحيح. يفيد إطار العمل بسرعة الإنجاز حيث بنية برنامجك تكون محددة مسبقًا وعليك فقط إضافة أقسام من برنامجك ضمن أماكن محددة وبطريقة محددة مسبقًا، وتوفر عنك خطوة التفكير في بنية المشروع وتنفيذها
- 2 اجابة
-
- 2
-
-
-
البرمجة الوظيفية Functional Programming العنصر الأساسي فيها هو التابع، يستقبل البيانات ويعالجا وقد يعيد قيمة ما نتيجة المعالجة العنصر الثاني فيها هو البيانات، فهي تنتقل من تابع إلى آخر بحسب واجهة متفق عليها بين التوابع (مثلا نص، مصفوفة، أعداد، بنية معطيات محددة) تمتلك التوابع خصائص معينة، مثل التركيب بينها لإنشاء تابع جديد، التوابع العليا وهي التي تولد توابع تعمل بطرق مختلفة للقراءة أكثر راجع المقال التالي: البرمجة كائنية التوجه Object Oriented Programming العنصر الأساسي فيها هو الكائن، وظيفته تغليف حالة ما وتوفير واجهة للتعامل مع تلك الحالة العنصر الثاني فيها هو الرسائل التي ترسل بين الكائنات، فكل كائن يمكنه استدعاء تابع من كائن آخر، فتتولد شبكة من الكائنات المرتبطة ببعضها ويمكنها العمل معًا لغرض ما يتم توليد الكائنات من خلال الصنف Class، فهو يعد معمل لتلك لكائنات للأصناف خصائص مثل الوراثة وهي إعادة تعريف بعض التوابع والمتغيرات من صنف ضمن صنف آخر الخصائص الثلاثة الرئيسية لهذا النوع من البرمجة هي : التغليف Encapsulation: يمكن للكائن تغليف حالة ما داخله، أي لا يمكن الوصول إليها ولا التعامل معها إلا عن طريق الكائن تعدد الأشكال Polymorphism: يمكن للكائن أن يعامل بأكثر من شكل، حيث يمكنه تضمين أكثر من حزمة من التوابع، ويمرر للكائنات الأخرى التي تحتاج لحزمة ما من تلك التوابع الوراثة Inheritence: يمكن للصنف وراثة توصيف وتضمين صنف آخر، أي إعادة تعريف توابع بتضميناتها (أو فقط شكلها) ضمنه يمكنك القراءة أكثر في المقال التالي:
-
الفصل بينهما ليس مطلق، قد يضطر مبرمج النظم الخلفية للتطرق لبناء صفحة أو مكون ويب باستخدام HTML و CSS، لكن أغلب تركيزه وعمله يكون في تطوير النظم الخلفية التي تعمل على الخوادم فقط يتميز مطور الواجهات الأمامية بخبرته الأوسع في بناء واجهات المواقع، حيث يستطيع بناء قوالب الويب بشكل كامل وحتى تطبيق منفصل كامل يعمل بطرف العميل (باستخدام مكتبات مثل React و Vue)، وقد يضطر أحيانا للتعامل مع الواجهات البرمجية للنظم الخلفية، كالحاجة لإرسال طلبات HTTP لطلب البيانات من الخادم ليس هناك مطور نظم خلفية فقط ومطور واجهات أمامية فقط، سيحتاج أحدهما في وقت ما ولو بشكل بسيط للتعامل مع مجال عمل الآخر، المطور الكامل Full-Stack هو المطور الذي يملك كلا الخبرتين ويستطيع العمل على الواجهات الأمامية والنظم الخلفية معًا. الدورة تركز بشكل أساسي على النظم الخلفية، لكن الحاجة لبناء مشروع كامل تضطرك لبناء صفحات الويب.
- 1 جواب
-
- 1
-
-
طالما أن كل الطرق التي ذكرتها تنتج المطلوب فلا مشكلة لديك في استخدام أي منها أنت حر في ذلك، لكن مع كثرة تطبيقك للمشاريع ومرورك بحالات مشابهة قد تجد أن بعض هذه الطرق يجب تفضيلها بحسب حالة المشروع أيضًا يمكنك الاستعانة بخواص display لديها العديد من الخيارات قد تساعدك، يمكنك قراءة المقالات التالية أيضًا من الأنظمة الحديثة نسبيًا في ضبط نسق العناصر هو نظام flex، فهو يتيه لك الكثير من الامكانات، يمكنك القراءة عنه أكثر في المقال التالي لا مشكلة في معرفتك لعدة حلول لحل المشكلة ذاتها، هذا أمر جيد لكن مع زيادة خبرتك ستفضل حل عن آخر بعد النظر في نواحي المشروع كافة
-
يمكن إرسال تفاصيل التحويل إلى الواجهة البرمجية الخاصة ببايبال عبر طلب POST إلى المسار التالي: /v1/payments/payouts الترويسات الواجب إرسالها هي نوع المحتوى Content-Type لوصف نوع المحتوى المرسل، وتروسية التوثيق Authorization كالتالي (مع تبديل المفتاح بالمفتاح الخاص بحسابك): Content-Type: application/json Authorization: Bearer <المفتاح الخاص بحسابك> جسم الطلب هو غرض JSON يتضمن مفتاحين رئيسيين : sender_batch_header: وفيه معلومات عن الحوالة الحالية من معرّف خاص تضع فيه أي قيمة تريد، وعنوان ومحتوى البريد الالكتروني المرسل للحساب الوجهة عند استلامه للحوالة "sender_batch_header": { "sender_batch_id": "1234", "email_subject": "تم إرسال أرباحك", "email_message": "المبلغ المرسل هو أرباحك خلال المدة الماضية، شكرًا لك" } items: وهي مصفوفة تضم أكثر من حوالة وتفاصيل عم الوجهة يمكنك إرسالها معًا، تتضمن التفاصيل التالية: recipient_type: وهو نوع حساب الوجهة إما لديك عنوان بريده أو رقم هاتفه أو معرّف بايبال الخاص به تكون إحدى القيم التالية (EMAIL - PHONE - PAYPAL_ID) receiver: وهو عنوان الحساب الوجهة قيمته بحسب نوع العنوان في الحقل السابق amount: يتضمن العملة والقيمة المرسلة: value: القيمة currency: العملة "items": [ { "recipient_type": "EMAIL", "receiver": "receiver@example.com", "amount": { "value": "9.87", "currency": "USD" }, } ] بحسب لغة البرمجة أو إطار العمل المستخدم تقوم ببناء الطلب على الشكل السابق وإرساله
- 1 جواب
-
- 1
-
-
الأساس في العملية هو قسمان: إنشاء معرّف للمستخدم: وهي العملية الأسهل حيث تقوم بعد أن تتأكد من صحة بيانات الدخول من إنشاء قيمة تحوي داخلها دليل على هوية المستخدم، قد تضع فيها المعرف الخاص بالمستخدم، أو رقم الجلسة بعد إنشاءها للمستخدم، أو صلاحيات المستخدم، هذه القيمة ستعتبر تصريح دخول في المرات القادمة يجب على كل طلب أن يبرزها بدل إعادة إبراز بيانات تسجيل الدخول حماية المعرّف: يمكن لأي مستخدم أن يقوم بكتابة قيمة مشابهة لطريقة توليدك للمعرفات وإرسالها ضمن طلباته وسيستطيع انتحال شخصية أي مستخدم والحصول على أي صلاحيات، لذا يجب علينا التأكد من تأمين تلك القيمة إما بتشفيرها أو بإضافة توقيع عليها يمكننا التحقق منه للتأكد بأننا من أصدر تلك القيمة حصرًا التقنيات والمكتبات التي ذكرتها تتقاطع في عملها ولا يمكن المقارنة بينها: bcrypt: عملية لتشفير البيانات، يمكن أن تفيدك في تشفير كلمة سر المستخدم قبل تخزينها في قاعدة البيانات، وذلك كنوع من الحماية من تسريب كلمات السر. JWT Authentication: هي طريقة لتوليد Token آمنة ووضع البيانات داخلها والتوقيع عليها للتأكد من مصدرها لاحقًا API token: هو مفهوم عام ويعني إصدار Token مخصصة للاستخدام مع الواجهة البرمجية لموقعك، قد تكون تستخدم طريقة JWT أو غيرها Passport: هي مكتبة تساعدك في عملية التوثيق وإصدار ال Token للمستخدمين، لكن يمكنك إعدادها لاستخدام التقنيات التي تفضلها مثل JWT أو غيرها الأمر يعتمد على مشروعك ومتطلباته وخبرتك البرمجية في التعامل مع المفاهيم السابقة وسهولة تضمين المكتبة أو الطريقة ضمن مشروعك يمكنك الاطلاع على المقالات التالية المتعلقة بالموضوع:
- 1 جواب
-
- 2
-
-
حاولي حل المشكلة بنفسك، وعندما تواجهين مشكلة ضمن شيفرة ما أو لديك استفسار يرجى إرفاق الشيفرة وتوضيح استفسارك عنها لنتمكن من مساعدتك، أحد الحلول يكون بتحديد نوع الملف عن طريق الللاحقة له: $filename = ... // اسم الملف المرفوع $ext = end((explode(".", $name))); // اللاحقة هي القسم الأخير بعد النقطة ... // نضع الملف في مساره المحدد بحسب اللاحقة حاولي انجاز المطلوب على خطوات ليصبح المشروع اسهل: رفع الملفات بنجاح وضع الملفات المرفوعة بمجلد معين معرفة نوع الملف المرفوع فرز الملفات بحسب نوعها ونقلها لمسارها الخاص
- 1 جواب
-
- 1
-
-
لكل مشروع متطلباته وظروفه، اختر الانسب بحسب مشروعك: استخدم مقبس الويب Web Socket عندما: بحاجة لإظهار الإشعار بالوقت الحقيقي بلا تأخير كبير لديك كمية كبيرة من الإشعارات خادم استضافة الموقع يدعم فتح منفذ خاص لاستقبال بروتوكول wss استخدم الاستعلام عن طريق طلبات HTTP عندما: لست مضطرًا لسرعة وصول الإشعارات (يمكنك التأخير لدقيقة مثلًا) كمية الإشعارات متوسطة إلى قليلة لا يمكنك التحكم بخادم الاستضافة وليس متاح لك سوى منفذ لبروتوكول HTTP (أو HTTPS) تريد طريقة تضمين الاشعارات بشكل بسيط (يكفي معرفة بسيطة بجافاسكريبت وكيفية إرسال طلبات AJAX) أغلب المواقع تعتمد على إرسال طلبات HTTP من الصفحة بتردد زمني معين
- 2 اجابة
-
- 1
-
-
حدد أولًا بوابة الدفع التي تريد ربطها، ثم اتبع ارشادات التوثيق الرسمي لها، كل بوابة دفع لديها طريقة مختلفة في التعامل وتأكيد المدفوعات
- 3 اجابة
-
- 1
-
-
الأمر يعتمد على بوابة الدفع التي تريد ربطها، لكل بوابة تعليمات الربط الخاصة بها، وأيضًا سيعتمد الأمر على ما إذا كنت تستخدم إطار عمل أو تعمل بدونه (فقط PHP)، لتأخذ مثال عن عملية ربط بوابة دفع كيف يتم ذلك، يمكنك الاستفادة من الإجابة التالية التي تشرح كيفية ربط بوابة دفع Paypal ضمن إطار عمل لارافل المقال التالي يعرفك على أشهر وسائل الدفع الإلكترونية في العالم العربي ويوضح طريقة ربطها مع متجر ووكومرس في حال كنت تريد استخدام ووردبرس في حال خلال تطبيقك لعملية الربط واجهتك مشكلة أو لديك استفسار ما يمكنك إرفاق القسم من الشيفرة الذي تريد الاستفسار عنه مع توضيح المشكلة وسيقوم الزوار بمساعدتك. إذا كنت تعمل على مشروع ما وتريد من شخص لديه الخبرة من مساعدتك بمقابل مادي مدفوع يمكنك البحث عن أحد يقدم نفس الخدمة التي تريدها على خمسات، أو يمكنك وضع عرضك على مستقل واختيار مستقل مناسب للعمل بعد الاتفاق وتوضيح العمل المراد.
- 3 اجابة
-
- 1
-
-
Delegate هي الأصناف التي تمثل الإشارة إلى تابع آخر ما، يندرج ضمن هذه العائلة الثلاثة أصناف التالية: Action: يشير إلى تابع لا يعيد قيمة أي يعيد void، كما التابع التالي: static void say(string message) { Console.WriteLine(message); } Action<string> sayAction = new Action<string>(say); // مؤشر للتابع السابق sayAction.Invoke("Hello World!"); // استدعاء المؤشر Func: يشير إلى تابع ما ويمكننا عبره تحديد نوع كل من المعاملات والنوع الذي يعيده ذلك التابع، مثال: static int sum(int x, int y) { return x + y; } Func<int, int, int> sumFunc = new Func<int, int, int>(sum); // مؤشر للتابع السابق int result = sumFunc(1, 5); // استدعاء المؤشر Predicate: يشير إلى تابع دومًا يعين قيمة بوليانية bool، ويمكننا تحديد نوع معاملات ذلك التابع أيضًا، مثال static bool IsEven(int number) { return number % 2 == 0; } Predicate<int> isEvenPredicate = new Predicate<int>(IsEven); // مؤشر للتابع السابق isEvenPredicate(11); // استدعاء المؤشر يمكنك القراءة عن ذلك أكثر ضمن المقال التالي
- 1 جواب
-
- 1
-
-
الوسم meta في HTML هدفه تقديم معلومات وصفية عن مستند الصفحة الحالية، مثل: اسم الكاتب - عنوان المستند - دعم المستند لمزايا ما. الخاصية http-equiv قيمتها تحدد خواص ممكن أن تؤثر على عمل الخادم، والقيم الممكنة هي إحدى ترويسات طلبات HTTP، الترويسة X-UA-Compatible تحدد مستوى الدعم للمتصفحات بحسب قيمتها، هنا القيمة لها هي IE=edge مما يعني أن محتوى المستند الحالي يتوافق مع مزايا متصفح Edge وما فوق <meta name="viewport" content="width = device-width,initial-scale=1.0"> أيضًا هنا الوسم meta يقدم معلومات حول المستند الحالي ويتم تحديد اسم الخاصية عبر قيمة name، وقيمتها ضمن الخاصية content القيمة viewport لاسم الخاصية تحدد حجم إطار العرض المبدئي للصفحة، القيمة width تحدد قياس العرض لذلك الإطار بأن يساوي عرض الشاشة الحالية، يناسب هذا الخيار تطوير الصفحات لتناسب أحجام الشاشات الصغيرة. وبدلًا من تحديد قياس الارتفاع، يمكن تحديد النسبة بين العرض والارتفاع ليتم ملائمة طول الشاشة مهما كان هنا تم تعيينها ب 1، وهي قيم مناسبة جدًا للشاشات الصغيرة
- 1 جواب
-
- 2
-
-
وجود تطبيق جوال لأي مشروع هدفه الوصول لشريحة مستخدمين كبيرة من مستخدمي ومفضلي الهواتف الذكية، التطبيق إذا بني بشكل سليم وجميل سيعطي المستخدم تجربة مميزة سريعة وسهلة الاستخدام نعم يمكن للتطبيق أن يتضمن محتوى سواء نصي أو مرئي (صورة - فيديو)، لذلك مساوء ومحاسن: سيكون الوصول للمحتوى سريع لا حاجة للاتصال بالانترنت ولا لسرعة جيدة للوصول للمحتوى لا حاجة لحجز استضافة لوضع مخدم واجهة خلفية للمحتوى لديك، أي توفير في التكلفة المادية وتكلفة التشغيل سيزيد ذلك من حجم التطبيق بحسب حجم المحتوى كل تحديث للتطبيق او المحتوى سيجبر المستخدم على تحميل نسخة جديدة من التطبيق الأمر عائد للهدف من المشروع وشكل المحتوى وحتى طبيعة المستخدمين
- 1 جواب
-
- 1
-
-
راجع المقال التالي فهو يحوي على الكثير من الأدوات كمواقع ويب، تمكنك من اختيار الألوان وأخذ قيمها
- 3 اجابة
-
- 1
-