-
المساهمات
2852 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
38
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Hassan Hedr
-
تأكد من السماح للطريقة PATCH ضمن ملف التوجيه web.php الخاص بك على المسار Classification/update كالتالي: Route::patch('Classification/update', '...'); ^^^^^ سبب المشكلة هو عدم تعريف هذه الطريقة لذلك المسار فلا يمكنك إرسال طلب النموذج إليه
- 4 اجابة
-
- 1
-
-
عملية التقطيع أو Hashing هي عملية تحويل قيمة إلى أخرى بنفس الطريقة دومًا، لكن دون إمكانية الرجوع من النتيجة إلى القيمة الأصل، لذا نصفها بأنها باتجاه واحد فقط، يفيد ذلك في التحقق من المساواة بين القيم دون الحاجة لتخزين القيمة الأصلية، فقط تخزين القيمة المقطّعة، ولاحقًا يمكنك التأكد من مطابقة قيمة ما مع القيمة المخزنة لديك بتمريرها على نفس خوارزمية التقطيع ومقارنة تساوي النتيجتين، في حالتك عادة لا نخزن كلمات السر كما هي في قاعدة البيانات لأغراض أمنية، بل نخزن قيمة Hash لها، وعندما يحاول المستخدم تسجيل الدخول نتأكد من صحة كلمة المرور التي أدخلها بتمريرها على نفس خوارزمية التقطيع، وإذا تطابقت النتيجتين فالكلمة صحيحة، أي لا نقارن كلمات السر مباشرة، بل نطابق قيم Hash لها يمكنك الاستفادة من قراءة المقالات التالية:
- 2 اجابة
-
- 1
-
-
إذا كانت الهدف من التعلم الاستفادة بأكبر قدر ممكن من تخصصك في علوم الحاسب، فلغة ++C تعتبر أقرب لعمل الحاسب وتعلمها يقوي الفهم حول طريقة عمل الحاسب من معالجة وإدارة للذاكرة والقدرة على بناء البرامج منخفضة المستوى كالتعريفات Drivers مثلًا، أما إذا كان الهدف هو تعلم المفاهيم البرمجية فتعتبر لغة جافا أبسط وأعلى مستوى ما يتيح التركيز على المفاهيم البرمجية عالية المستوى مقارنة بالقرب من العتاد Hardware في لغة مثل ++C، أنصحك بقراءة المقال التالي وخصوصًا فقرة "كيفية اختيار لغة البرمجة التي تناسبك" ومشاهدة الفيديو المرفق ضمنها:
-
للتواصل مع الخادم يجب أن تمتلك معلومات حساب على لك ذلك الخادم، وهي اسم المستخدم الخاص بك وكلمة المرور لذلك الحساب، ويجب أن تملك عنوان IP للخادم ورقم المنفذ لبروتوكول FTP على ذلك الخادم، بعد جمع تلك المعلومات يمكنك إدخالها كالتالي وتهيئة عملية الاتصال للمباشرة بنقل الملفات من وإلى الخادم: Host عنوان الخادم، إما اسم نطاق Domain name أو عنوان IP Username اسم المستخدم لحسابك على الخادم Password كلمة السر للحساب Port رقم منفذ بروتوكول FTP على الخادم عادة يكون المنفذ رقم 21 يمكنك الاستفادة من قراءة المقالات التالية:
- 3 اجابة
-
- 1
-
-
في حال كنت مبتدئًا في مجال البرمجة والحاسوب بشكل عام فدورة علوم الحاسوب هي أفضل اختيار لك، ستعرفك بشكل شامل على كافة المجالات والمصطلحات لتصبح بعدها مُلمًا بما يتعلق بهذا المجال وقادر على فهمه، وفي حال كنت تريد الدخول في أحد اختصاصات تطوير الويب سواء أنظمة خلفية أو واجهات أمامية أنصحك وبشدة مراجعة هذا المقال الذي يشرح لك بالتفصيل خريطة مجالات تعلم تطوير الويب والدورات المتوفرة في الأكاديمية لكل من تلك المجالات مع شرح عنها: أيضًا أنصحك بقراءة المقال التالي فكثير من قبلك سألوا نفس السؤال "من أين أبدأ" هذا المقال سيجيبك على كل تساؤلاتك مع الشرح: مسيرة تعلم البرمجة ستعتمد أغلبها فيها على نفسك، القراءة والبحث والفهم هي مهارات أساسية في هذا المجال، لا تتوقع أن يرسل لك أحد التفاصيل التي تريدها جاهزة، ابحث واقرأ بنفسك وقرر ما هو الأفضل لك، بالتوفيق في تعلمك
-
حاول استخدام الدالة المساعدة request للوصول إلى كائن الطلب الحالي ومنه استدعي التابع header مع تمرير اسم الترويسة التي ترغب بالحصول عليها كالتالي: request()->header('Authorization'); وللحصول على مصفوفة تحوي جميع الترويسات المرسلة لمعاينتها يمكنك الاستفادة من الخاصية headers على نفس الكائن كالتالي: request()->headers->all(); // جميع الترويسات
-
يمكنك إضافة مسار مخصص عند الوصول إليه سيتم تنفيذ أمر Artisan لتغيير حالة وضع الإصلاح، وحماية هذا المسار بطريقة ما بحسب تطبيقك للوصول إليه فقط من المستخدم صاحب الصلاحية لذلك مثلًا كالتالي: // حماية الوصول للمسارات Route::middleware('auth')->group(function(){ // تنشيط وضع الإصلاح Route::get('/app-down', function(){ Artisan::call('down'); }); // إيقاف وضع الإصلاح Route::get('/app-up', function(){ Artisan::call('up'); }); }); بعد ذلك وبعد تسجيل الدخول كمستخدم لديه صلاحية الوصول لتلك المسارات يمكنك الاتصال بالمسار التالي لتنشيط وضع الإصلاح (مع تبديل اسم النطاق بحسب تطبيقك): http://domain.com/app-down والمسار التالي لإيقاف ذلك الوضع وتشغيل التطبيق مجددًا http://domain.com/app-up
-
يحدث خطأ عند إنشاء مستخدم جديد لكن هذا الخطأ يعالج ضمن تابع رد النداء Callback الممرر للتابع create ولا يرسل رد للمستخدم يوضح له المشكلة بل يكون قد أرسل سابقًا الر "تم إضافة المستخدم بنجاح"، أنصحك بالاطلاع أكثر على البرمجة اللامتزامنة في Node.js وفهم طريقة تعامل نود مع التوابع اللامتزامنة يمكنك الاستفادة من المقال التالي: وكما تشير رسالة الخطأ التابع "handleError" المستخدم في السطر 85 لمعالجة الخطأ غير معرف، تأكد من استيراده أو تعريفه بشكل سليم لحل المشكلة
-
عدد الصفحات ضمن تطبيقك وطريقة عمل التطبيق تندرج تحت مزايا التطبيق ومتطلباته، يجب دومًا التفكير بالمزايا المطلوبة والمنتج النهائي بمعزل عن طريقة تضمينه، لأنه وتقريبًا لكل مشكلة حل مهما كانت خصوصًا للتطبيقات البسيطة، فكر أولًا ما الأفضل لك من ناحية المزايا والاستخدام، هل صفحة مخصصة لكل عملية حسابية للتبسيط على المستخدم والتركيز، هل صفحة مخصصة لكل لغة للتبسيط على المستخدم، هنا ستفضل صفحات منفصلة تركز كل منها على بعض المزايا، أم هل يحتاج المستخدم للتبديل كثيرًا بين اللغات والعمليات، هنا ستفضل صفحة واحدة يمكن التبديل بين اللغات والعمليات الحسابية فيها، بعد تحديد المطلوب والمزايا المرغوب بها، الآن فكر بطريقة بتضمينها بطريقة واضحة وبسيطة، مهما كانت الميزة التي تعمل على تضمينها يمكنك مراعاة قواعد تحسين الشيفرة المكتوبة لإخراجها بوضوح وبساطة، حتى التطبيقات المعقدة يجب التركيز على فصل الوحدات البرمجية داخلها وتركيبها من مكونات أبسط، لرفع وضوح وبساطة الشيفرة والقدرة على تعديلها لاحقًا، أي حدد المزايا والمطلوب أولًا، ثم فكر بتضمينها دون التضحية ببساطة الشيفرة، وزيادة عدد الصفحات وكلفتها بحسب حجز الاستضافة الذي تملكه، في حال كان متاح عرض حزمة Bandwidth لا محدود، ومساحة كافية نسبيًا لن يؤثر ذلك على الكلفة، يمكنك الاستفادة من قراءة المقالات التالية للتعرف على أشهر المبادئ التي تساعدك في بناء شيفرة بسيطة:
- 3 اجابة
-
- 1
-
-
Node.js هي بيئة تشغيل للغة جافاسكربت، أي دورها هو تنفيذ شيفرات جافاسكربت باستخدام محركها الداخلي Vue.js هي مكتبة تساعد في تطوير الواجهات الأمامية لصفحات الويب، مكتوبة بلغة جافاسكربت يمكن للنظم الخلفية أن تستخدم أي لغة تريدين سوا جافاسكربت وتشغيلها ضمن Node.js، أو لغة PHP، أو لغة بايثون واستخدام إطار عمل مثل Django، كل تلك الخيارات متاحة لتطوير وتشغيل النظام الخلفي، لا يمكن المقارنة بين Node.js (بيئة لتشغيل جافاسكربت) ومكتبة Vue.js (مكتبة لتطوير الواجهات الأمامية) فكل منهما مختلف عن الآخر، يمكنك الاستفادة من قراءة المقالات التالية للتعرف عليهما:
- 2 اجابة
-
- 1
-
-
استضافات ووردبرس هي كالاستضافات عادية يتم تخصيص مساحة وبعض الموارد لموقعك وعنوان IP للوصول إليه عبر شبكة الإنترنت، الفرق في هذه الإستضافات هو توفير أدوات تحكم خاصة تتعامل مع ووردبرس لتساعدك في إدارة موقعك، كالتعامل مع قاعدة البيانات أو تحديث الإضافات المثبتة وإضافتها أو إلغاءها وتحديد القالب المستخدم، وبحسب نوع موقعك إذا كان مبني ضمن وورد برس من الاسهل اختيار استضافة فيها أدوات ووردبرس، ونقل القالب الخاص بموقعك واللإضافات والمحتوى إلى نسخة الموقع على الاستضافة، وبكل الأحوال يمكنك اختيار الاستضافة العادية طالما كنت تملك خبرة في إعداد بيئة موقعك وتثبيته ونشره ضمن الاستضافة، يمكنك الاستفادة من قراءة المقالات التالية:
- 2 اجابة
-
- 1
-
-
يمكن الاستفادة من التابع withCount وتمرير اسم العلاقة التي تحاول عد السجلات فيها ليصبح الاستعلام عن التصنيفات كالتالي: $categories = Category::with("users")->withCount("users")->get(); سيضيف ذلك خاصية جديدة بالاسم users_count لكل نموذج من النتيجة يشير إلى عدد المستخدمين المرتبط بهذا النموذج: foreach($categories as $category) { echo $category->users_count; // عدد المستخدمين في هذا التصنيف }
- 1 جواب
-
- 1
-
-
يمكن الاستعانة بالواجهة Blade والاستفادة من التابع render ضمنها لترجمة نص من صيغة blade، ويمكن تمرير النص كمعامل أول ثم مصفوفة المتغيرات المستخدمة ضمن النص كمعامل ثاني، ليصبح المثال لديك كالتالي: use Illuminate\Support\Facades\Blade; echo Blade::render('<h2>Hello, {{ $name }}</h2>', ['name' => 'Emad Saif']); // <h2>Hello, Emad Saif</h2>
- 1 جواب
-
- 1
-
-
يمكنك تعيين اسم النطاق namespace الكامل للنموذج لتحديد مكانه، وفي حالتك لوضع النموذج داخل المجلد mainModels يمكنك تنفيذ الأمر كالتالي: php artisan make:model App\\mainModels\\User أما في حال كنت تريد إنشاء النموذج خارج مجلد التطبيق app، فيمكنك تمرير المسار النسبي انطلاقًا من مجلد التطبيق app، مثلًا لو كان لديك مجلد Models بجانب المجلد app وتريد إنشاء نموذج مستخدم User في ذلك المجلد كالتالي: app/ ├─ ... Models/ ├─ User.php يمكنك تمرير المسار النسبي لذلك المجلد لأمر التوليد كالتالي: php artisan make:model ../Models/User
-
يمكن تنفيذ تعليمات خلال مراحل معينة من دورة حياة النموذج Model، يمكنك تسجيلها ضمن التابع booted ضمن صنف النموذج، التوابع التي ستستخدمها لحالتك هي: saving يتم تنفيذه قبل حفظ النموذج saved يتم تنفيذه بعد حفظ النموذج ويمكنك داخلها الوصول لكائن النموذج الذي تتم عملية الحفظ عليه من خلال المعامل post$ الممرر للتابع الذي تسجله لكل حدث من تلك الأحداث بالشكل التالي: class Post extends Model { protected static function booted() { static::saving(function ($post) { // قبل الحفظ }); static::saved(function ($post) { // بعد الحفظ }); } }
- 2 اجابة
-
- 1
-
-
يمكن تعيين متغيرات بيئة مختلفة مخصصة لبيئة الاختبار ضمن ملف phpunit.xml الموجود في جذر مجلد المشروع، ضمن الوسم php يمكن إضافة الوسوم server وتعيين الخاصية name باسم متغير البيئة، والخاصية value بالقيمة لذلك المتغير، بهذا يمكنك تعديل القيم التي تريدها مختلفة فقط عن ملف env. وليس كل القيم بشكل مشابعه للتالي: <phpunit ...> ... <php> <server name="DB_DATABASE" value="testing_db"/> <!-- تعيين قاعدة البيانات للاختبارات --> </php> </phpunit> يمكنك الاستفادة من الاجابة التالية:
-
رتب أولوياتك لا يجب أن تقبل كل عمل يعرض عليك، بل عليك اختيار أفضلها وما يناسبك من ناحية الربح والوقت والجهد اللازم لإتمامه دون التضحية بالجودة أو بالالتزام بوقت التسليم، في حال تكرار بعض الأعمال الروتينية التي يمكنك تفويضها حددها أولًا وابحث عن أشخاص يمكنهم إنجازها بشكل دوري كي تتفرغ للاهتمام بباقي الأعمال بأكبر كفاءة ممكنة، تذكر أن نتائج التعهيد مسؤوليتك، لذا يجب الاهتمام بمن تعهد وبالمتابعة الدائمة مع المستقل، يمكنك الاستفادة من قراءة المقالات التالية:
- 1 جواب
-
- 1
-
-
يحب أولًا التأكد من تثبيت الإضافات sqlsrv و pdo_sqlsrv في PHP على بيئة الخادم، بعدها ضمن ملف متغيرات البيئة env. للتطبيق أو حسب الطريقة التي يمكن تعيين متغيرات البيئة للتطبيق على الخادم يجب تعيين القيم التي تبدأ ب "_DB" بقيمها الصحيحة لتعيين عنوان ومنفذ قاعدة البيانات، واسم المستخدم وكلمة المرور له للتواصل معها، وأهم متغير هو نوع قاعدة البيانات المستخدمة كالتالي: DB_CONNECTION=sqlsrv DB_HOST=127.0.0.1 # عنوان قاعدة البيانات DB_PORT=1433 # منفذ قاعدة البيانات DB_DATABASE=database_name # اسم قاعدة البيانات للتطبيق DB_USERNAME=user # اسم المستخدم لقاعدة البيانات DB_PASSWORD=password # كلمة السر لحساب المستخدم يمكن بعدها تشغيل التطبيق وسيتواصل مع قاعدة البيانات المشار إليها ضمن تلك المتغيرات والتعامل معها بشكل طبيعي
-
يوجد عدة طرق للتواصل مع التطبيق أي القناة التي تمر عبرها بيانات الدخل وتصل بيانات الخرج إلى المستخدم، حيث نُعرّف داخل الملفات ضمن مجلد routes الطرق بأنواعها العديدة المؤدية إلى التطبيق وكيفية توجيه الطلبات القادمة عبر أي نوع من القنوات والملفات لتلك القنوات هي: ملف web.php للتواصل عبر الويب وطلبات HTTP عن طريق المتصفح. ملف api.php للتواصل عبر الواجهة البرمجية للتطبيق بطلبات مثل AJAX لطلب صيغ مثل JSON. ملف console.php للتواصل عبر الطرفية وسطر الأوامر باستخدام artisan. ملف channels.php للتواصل عبر قنوات الاتصال الحية مثل مقابس الويب WebSockets. استخدم كل ملف منها لتعريف التوجيه لكل نوع من أنواع التواصل مع تطبيقك التي ترغب بها، ومن الشائع عند تطوير الويب تعريف التوجيه ضمن مسارات web.php وإذا دعت الحاجة لتعريف بعض المسارات للواجهة البرمجية للتطبيق API ضمن ملف api.php وذلك لدعم بعض الواجهات التي تُصيّر Renders بطرف العميل
-
قيمة أقدم تاريخ تسجيل يجب أن تكون أول يوم من السنة الحالية، ما تمرره هو تاريخ اليوم الحالي لذا يجب استخدام التابع startOfYear لتمرير قيمة أول يوم من السنة الحالية كالتالي: $users = User::select('email')->whereDate('created_at', '>', now()->startOfYear())->count(); أو يمكن الاستفادة مباشرة من تابع الاستعلام whereYear وتمرير السنة التي نريد الاستعلام عنها لتصبح الشيفرة أوضح عند قراءتها كالتالي: $users = User::select('email')->whereYear('created_at', '=', now()->year)->count();
- 1 جواب
-
- 1
-
-
عند استدعاء Date كتابع فإن الناتج من تلك العملية سيكون سلسلة نصية تعبر عن التاريخ الحالي، كلمة new تفيد في بناء كائنات من صنف أو تابع يعامل معاملة التابع الباني، وعند استدعاء نفس التابع مسبوقًا بكلمة new، سيُنشئ جافاسكربت كائن فارغ جديد object ويربطه bind بعملية تنفيذ ثم يربط ال prototype لذلك التابع بهذا الكائن ويعيد ذلك الكائن كناتج من تلك العملية، الفائدة من ذلك أن كل التوابع المعرفة ضمن prototype التابع الباني سيتم تعيينها ضمن الكائن الجديد، وأن أي متغيرات يتم تعيينها ضمن التابع على الكلمة this سيتم تعيينها ضمن الكائن أيضًا، أي الهدف من الكلمة new هي إنشاء نسخة كائن جديدة تحمل صفات التابع الباني، أو ما يشبه في لغات البرمجة كائنية التوجة الأخرى عملية إنشاء كائن جديد من صنف class، يمكنك الاستفادة من قراءة المقالات التالية:
-
حاول الرجوع إلى مسار الأساسيات وتدرب عليها وادرسها أكثر، التقدم إلى الدروس اللاحقة دون تمكين الأساسيات كلها أو إهمال بعضها سيعرضك لمشاكل في فهم الدروس اللاحقة وتشعر أنك لا تستطيع التطبيق أو فهم الدروس، ركز على التطبيق العملي لتلك الأساسيات وطور برامج بسيطة تستخدم فيها ما تعلمت، من ضمنها التمارين ضمن مسار الأساسيات ولا تتجاوز أي فكرة لا تفهمها، يمكنك الاستفادة من قراءة المقال التالي:
- 1 جواب
-
- 1
-