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

Hassan Hedr

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

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

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

  • عدد الأيام التي تصدر بها

    38

أجوبة بواسطة Hassan Hedr

  1. لغة البرمجة هي لغة بينك وبين جهاز الحاسوب، تعبر بها عما تريده أن يفعل، سواء بتنفيذ بعض الخطوات، أو التعبير عن ذلك بلغة قريبة من اللغة المحكية، ويوجد الكثير من لغات البرمجة، بدءًا من اللغات منخفضة المستوى مثل C و ++C وصولًا إلى عالية المستوى مثل Python و Java و PHP وغيرها الكثير، وستجد اللغات العالية المستوى أسهل لتعلم البرمجة، يمكنك أن تبدأ بإحدى تلك اللغات، وليس من المهم عدد لغات البرمجة التي تعرفها بل ما يهم هو غرضك الأساسي منها، هل تريد تطوير مواقع إلكتروني أم تطبيقات جوال أم سطح مكتب أم فقط تريد تعلم البرمجة، أنصحك بقراءة المقالين التاليين فهما يشرحان ما هي البرمجة وكيف تبدأ وكيف تختار أول لغة البرمجة لتتعلمها، وما هي مجالات كل لغة برمجة:

     

    • أعجبني 1
  2. يمكنك التواصل مع مركز المساعدة وشرح مشكلتك وما تريد معرفته ووسائل الدفع المتاحة لديك، وسيساعدونك في عملية الشراء والتوجيه لكي تشترك بالدورة، فقط أرسل رسالة توضح بها ما تريد بالتفصيل وسيتم التواصل معك بأقرب وقت،

    بالتوفيق لك

    • أعجبني 1
  3. بتاريخ 2 ساعات قال Hayitham Fathy:

    شكرا لاهتمامك ولاكن انا عامل الكود ده

    
    Route::resource('classification', 'App\Http\Controllers\ClassificationController');

     

    تأكد إذًا من وجود الدالة update ضمن المتحكم ClassificationController كالتالي:

    class ClassificationController extends Controller
    {
        ..
        public function update($id)
        {
           	..
        }
    }

     

    • أعجبني 1
  4. المشكلة في حالة عدم وجود استعلام ضمن search_query أن السطر ضمن else يجلب كل البيانات ورسالة الخطأ تخبرك بعدم وجود الدالة orderBy ضمن مجموعة المنتجات التي تم جلبها، يمكنك حل المشكلة بإنشاء استعلام query بداية ثم تطبيق الشروط عليه فقط في حال كان هناك داعٍ لذلك، وبعدها وفقط في آخر سطر تنفذ الاستعلام باستخدام get لتكون الشيفرة كما يلي:

    $query = Product::query();
    
    if ($search_query) {
        $query->where('name', 'LIKE', "%$search_query%");
    }
    
    $products = $query->orderBy('created_at', 'desc')->with('tags')->get();

     

  5. يوجد حوالي 48 كلمة محجوزة في جافاسكربت، والعدد سيختلف من إصدار لآخر بحسب المزايا التي يدعمها، بعضها لتعريف الجمل الشرطية، وبعضها للحلقات التكرارية بأنواعها، وأخرى لتعريف الأصناف والواجهات مع ميزاتها، وأخرى تعبر عن قيم كالقيم المنطقية و null، وأخرى للتعامل مع الوحدات البرمجية من تصدير واستيراد، التالي قائمة بتلك الكلمات:

    await
    break
    case
    catch
    class
    const
    continue
    debugger
    default
    delete
    do
    else
    enum
    export
    extends
    false
    finally
    for
    function
    if
    import
    in
    instanceof
    let
    new
    null
    return
    super
    switch
    this
    throw
    true
    try
    typeof
    var
    void
    while
    with
    arguments
    eval
    implements
    interface
    package
    private
    protected
    public
    static
    yield

     

    • أعجبني 1
  6. تأكد من السماح للطريقة PATCH ضمن ملف التوجيه web.php الخاص بك على المسار Classification/update كالتالي:

    Route::patch('Classification/update', '...');
           ^^^^^

    سبب المشكلة هو عدم تعريف هذه الطريقة لذلك المسار فلا يمكنك إرسال طلب النموذج إليه 

    • أعجبني 1
  7. عملية التقطيع أو Hashing هي عملية تحويل قيمة إلى أخرى بنفس الطريقة دومًا، لكن دون إمكانية الرجوع من النتيجة إلى القيمة الأصل، لذا نصفها بأنها باتجاه واحد فقط، يفيد ذلك في التحقق من المساواة بين القيم دون الحاجة لتخزين القيمة الأصلية، فقط تخزين القيمة المقطّعة، ولاحقًا يمكنك التأكد من مطابقة قيمة ما مع القيمة المخزنة لديك بتمريرها على نفس خوارزمية التقطيع ومقارنة تساوي النتيجتين،

    في حالتك عادة لا نخزن كلمات السر كما هي في قاعدة البيانات لأغراض أمنية، بل نخزن قيمة Hash لها، وعندما يحاول المستخدم تسجيل الدخول نتأكد من صحة كلمة المرور التي أدخلها بتمريرها على نفس خوارزمية التقطيع، وإذا تطابقت النتيجتين فالكلمة صحيحة، أي لا نقارن كلمات السر مباشرة، بل نطابق قيم Hash لها

    password-hashing-unsalted.png

    يمكنك الاستفادة من قراءة المقالات التالية:

     

    • أعجبني 1
  8. يمكنك إضافة مسار المجلد الحاوي على ملفات PHP التي تريد إضافتها ضمن ملف الإعداد config\view.php تحديدًا ضمن القيمة paths كالتالي: 

    'paths' => [
      ..
      public_path('php/scripts')
    ],

    بعدها يمكن استخدام include@ ضمن ملفات العرض لديك وذكر مسار الملف النسبي بدءًا من المجلد scripts كالتالي:

    @include('helpers')

     

  9. إذا كانت الهدف من التعلم الاستفادة بأكبر قدر ممكن من تخصصك في علوم الحاسب، فلغة ++C تعتبر أقرب لعمل الحاسب وتعلمها يقوي الفهم حول طريقة عمل الحاسب من معالجة وإدارة للذاكرة والقدرة على بناء البرامج منخفضة المستوى كالتعريفات Drivers مثلًا، أما إذا كان الهدف هو تعلم المفاهيم البرمجية فتعتبر لغة جافا أبسط وأعلى مستوى ما يتيح التركيز على المفاهيم البرمجية عالية المستوى مقارنة بالقرب من العتاد Hardware في لغة مثل ++C،  

    أنصحك بقراءة المقال التالي وخصوصًا فقرة "كيفية اختيار لغة البرمجة التي تناسبك" ومشاهدة الفيديو المرفق ضمنها:

     

  10. للتواصل مع الخادم يجب أن تمتلك معلومات حساب على لك ذلك الخادم، وهي اسم المستخدم الخاص بك وكلمة المرور لذلك الحساب، ويجب أن تملك عنوان IP للخادم ورقم المنفذ لبروتوكول FTP على ذلك الخادم، بعد جمع تلك المعلومات يمكنك إدخالها كالتالي وتهيئة عملية الاتصال للمباشرة بنقل الملفات من وإلى الخادم:

    • Host عنوان الخادم، إما اسم نطاق Domain name أو عنوان IP
    • Username اسم المستخدم لحسابك على الخادم
    • Password كلمة السر للحساب
    • Port رقم منفذ بروتوكول FTP على الخادم عادة يكون المنفذ رقم 21

    يمكنك الاستفادة من قراءة المقالات التالية:

     

    • أعجبني 1
  11. بتاريخ 3 ساعات قال Bahaa Ahmedd:

    كلام محترم (انا بكالريوس متقلقشي مش مهم اني اعرف انا محتاج ايه ) اللي يهمني اني عاوز اتعلم نوع البرمجه اللي احضرتكم تستطيعو تخلوني اشتغل فيها و بعد كده هاخود قرصات في بقيه الحاجات لاني حابب اتعلم ال c وحاجات كتير بس عاوز الاول اتعلم شئ امسك منو فلوس .

    راجع المقالات السابقة ففيها شرح وافِ عن كل المجالات المتوفرة كدورات في الأكاديمية، بعد إتمامك لأي دورة سيتم مساعدتك في عرض مهاراتك وإعطائك نصائح لتزيد من فرص حصولك على عمل، يمكنك مراجعة ميزات دورات الأكاديمية وقراءة التفاصيل 

  12. في حال كنت مبتدئًا في مجال البرمجة والحاسوب بشكل عام فدورة علوم الحاسوب هي أفضل اختيار لك، ستعرفك بشكل شامل على كافة المجالات والمصطلحات لتصبح بعدها مُلمًا بما يتعلق بهذا المجال وقادر على فهمه،

    وفي حال كنت تريد الدخول في أحد اختصاصات تطوير الويب سواء أنظمة خلفية أو واجهات أمامية أنصحك وبشدة مراجعة هذا المقال الذي يشرح لك بالتفصيل خريطة مجالات تعلم تطوير الويب والدورات المتوفرة في الأكاديمية لكل من تلك المجالات مع شرح عنها:

    أيضًا أنصحك بقراءة المقال التالي فكثير من قبلك سألوا نفس السؤال "من أين أبدأ" هذا المقال سيجيبك على كل تساؤلاتك مع الشرح:

    مسيرة تعلم البرمجة ستعتمد أغلبها فيها على نفسك، القراءة والبحث والفهم هي مهارات أساسية في هذا المجال، لا تتوقع أن يرسل لك أحد التفاصيل التي تريدها جاهزة، ابحث واقرأ بنفسك وقرر ما هو الأفضل لك،

    بالتوفيق في تعلمك

  13. حاول استخدام الدالة المساعدة request للوصول إلى كائن الطلب الحالي ومنه استدعي التابع header مع تمرير اسم الترويسة التي ترغب بالحصول عليها كالتالي:

    request()->header('Authorization');

    وللحصول على مصفوفة تحوي جميع الترويسات المرسلة لمعاينتها يمكنك الاستفادة من الخاصية headers على نفس الكائن كالتالي:

    request()->headers->all(); // جميع الترويسات

     

  14. يمكنك إضافة مسار مخصص عند الوصول إليه سيتم تنفيذ أمر 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

     

  15. بتاريخ 16 دقائق مضت قال محمد الحربي24:

    أقوم بتعريف handleError ؟

    كيف؟

    التابع handleError غير موجود أبدًا ضمن الملف وهو سبب المشكلة، إما أن تعرفه كالتالي:

    function handleError(err) {
     // معالجة الخطأ
    }

    أو إذا كان موجودًا ضمن ملف آخر نستورده بشكل سليم كالتالي مع تبديل النقط بمسار الملف أو اسم الوحدة الموجود فيها التابع:

    const { handleError } = require('...');

     

  16. يحدث خطأ عند إنشاء مستخدم جديد لكن هذا الخطأ يعالج ضمن تابع رد النداء Callback الممرر للتابع create ولا يرسل رد للمستخدم يوضح له المشكلة بل يكون قد أرسل سابقًا الر "تم إضافة المستخدم بنجاح"، أنصحك بالاطلاع أكثر على البرمجة اللامتزامنة في Node.js وفهم طريقة تعامل نود مع التوابع اللامتزامنة يمكنك الاستفادة من المقال التالي:

    وكما تشير رسالة الخطأ التابع "handleError" المستخدم في السطر 85 لمعالجة الخطأ غير معرف، تأكد من استيراده أو تعريفه بشكل سليم لحل المشكلة

  17. عدد الصفحات ضمن تطبيقك وطريقة عمل التطبيق تندرج تحت مزايا التطبيق ومتطلباته، يجب دومًا التفكير بالمزايا المطلوبة والمنتج النهائي بمعزل عن طريقة تضمينه، لأنه وتقريبًا لكل مشكلة حل مهما كانت خصوصًا للتطبيقات البسيطة، فكر أولًا ما الأفضل لك من ناحية المزايا والاستخدام، هل صفحة مخصصة لكل عملية حسابية للتبسيط على المستخدم والتركيز، هل صفحة مخصصة لكل لغة للتبسيط على المستخدم، هنا ستفضل صفحات منفصلة تركز كل منها على بعض المزايا، أم هل يحتاج المستخدم للتبديل كثيرًا بين اللغات والعمليات، هنا ستفضل صفحة واحدة يمكن التبديل بين اللغات والعمليات الحسابية فيها،

    بعد تحديد المطلوب والمزايا المرغوب بها، الآن فكر بطريقة بتضمينها بطريقة واضحة وبسيطة، مهما كانت الميزة التي تعمل على تضمينها يمكنك مراعاة قواعد تحسين الشيفرة المكتوبة لإخراجها بوضوح وبساطة، حتى التطبيقات المعقدة يجب التركيز على فصل الوحدات البرمجية داخلها وتركيبها من مكونات أبسط، لرفع وضوح وبساطة الشيفرة والقدرة على تعديلها لاحقًا،

    أي حدد المزايا والمطلوب أولًا، ثم فكر بتضمينها دون التضحية ببساطة الشيفرة، وزيادة عدد الصفحات وكلفتها بحسب حجز الاستضافة الذي تملكه، في حال كان متاح عرض حزمة Bandwidth لا محدود، ومساحة كافية نسبيًا لن يؤثر ذلك على الكلفة،

    يمكنك الاستفادة من قراءة المقالات التالية للتعرف على أشهر المبادئ التي تساعدك في بناء شيفرة بسيطة:

     

    • أعجبني 1
    • Node.js هي بيئة تشغيل للغة جافاسكربت، أي دورها هو تنفيذ شيفرات جافاسكربت باستخدام محركها الداخلي
    • Vue.js هي مكتبة تساعد في تطوير الواجهات الأمامية لصفحات الويب، مكتوبة بلغة جافاسكربت

    يمكن للنظم الخلفية أن تستخدم أي لغة تريدين سوا جافاسكربت وتشغيلها ضمن Node.js، أو لغة PHP، أو لغة بايثون واستخدام إطار عمل مثل Django، كل تلك الخيارات متاحة لتطوير وتشغيل النظام الخلفي، لا يمكن المقارنة بين Node.js (بيئة لتشغيل جافاسكربت) ومكتبة Vue.js (مكتبة لتطوير الواجهات الأمامية) فكل منهما مختلف عن الآخر،

    يمكنك الاستفادة من قراءة المقالات التالية للتعرف عليهما:

     

    • أعجبني 1
  18. استضافات ووردبرس هي كالاستضافات عادية يتم تخصيص مساحة وبعض الموارد لموقعك وعنوان IP للوصول إليه عبر شبكة الإنترنت، الفرق في هذه الإستضافات هو توفير أدوات تحكم خاصة تتعامل مع ووردبرس لتساعدك في إدارة موقعك، كالتعامل مع قاعدة البيانات أو تحديث الإضافات المثبتة وإضافتها أو إلغاءها وتحديد القالب المستخدم، وبحسب نوع موقعك إذا كان مبني ضمن وورد برس من الاسهل اختيار استضافة فيها أدوات ووردبرس، ونقل القالب الخاص بموقعك واللإضافات والمحتوى إلى نسخة الموقع على الاستضافة، وبكل الأحوال يمكنك اختيار الاستضافة العادية طالما كنت تملك خبرة في إعداد بيئة موقعك وتثبيته ونشره ضمن الاستضافة،

    يمكنك الاستفادة من قراءة المقالات التالية:

     

    • أعجبني 1
  19. يمكن الاستفادة من التابع withCount وتمرير اسم العلاقة التي تحاول عد السجلات فيها ليصبح الاستعلام عن التصنيفات كالتالي:

    $categories = Category::with("users")->withCount("users")->get();

    سيضيف ذلك خاصية جديدة بالاسم users_count لكل نموذج من النتيجة يشير إلى عدد المستخدمين المرتبط بهذا النموذج:

    foreach($categories as $category) {
     echo $category->users_count; // عدد المستخدمين في هذا التصنيف
    }

     

    • أعجبني 1
  20. يمكن الاستعانة بالواجهة Blade والاستفادة من التابع render ضمنها لترجمة نص من صيغة blade، ويمكن تمرير النص كمعامل أول ثم مصفوفة المتغيرات المستخدمة ضمن النص كمعامل ثاني، ليصبح المثال لديك كالتالي:

    use Illuminate\Support\Facades\Blade;
     
    echo Blade::render('<h2>Hello, {{ $name }}</h2>', ['name' => 'Emad Saif']);
    
    // <h2>Hello, Emad Saif</h2>

     

    • أعجبني 1
  21. يمكنك تعيين اسم النطاق namespace الكامل للنموذج لتحديد مكانه، وفي حالتك لوضع النموذج داخل المجلد mainModels يمكنك تنفيذ الأمر كالتالي:

    php artisan make:model App\\mainModels\\User

    أما في حال كنت تريد إنشاء النموذج خارج مجلد التطبيق app، فيمكنك تمرير المسار النسبي انطلاقًا من مجلد التطبيق app، مثلًا لو كان لديك مجلد Models بجانب المجلد app وتريد إنشاء نموذج مستخدم User في ذلك المجلد كالتالي:

    app/
    ├─ ...
    Models/
    ├─ User.php
    

    يمكنك تمرير المسار النسبي لذلك المجلد لأمر التوليد كالتالي:

    php artisan make:model ../Models/User

     

  22. يمكن تنفيذ تعليمات خلال مراحل معينة من دورة حياة النموذج Model، يمكنك تسجيلها ضمن التابع booted ضمن صنف النموذج، التوابع التي ستستخدمها لحالتك هي:

    • saving يتم تنفيذه قبل حفظ النموذج
    • saved يتم تنفيذه بعد حفظ النموذج

    ويمكنك داخلها الوصول لكائن النموذج الذي تتم عملية الحفظ عليه من خلال المعامل post$ الممرر للتابع الذي تسجله لكل حدث من تلك الأحداث بالشكل التالي:

    class Post extends Model
    {
        protected static function booted()
        {
            static::saving(function ($post) {
                // قبل الحفظ
            });
    
            static::saved(function ($post) {
                // بعد الحفظ
            });
        }
    }

     

    • أعجبني 1
  23. يمكن تعيين متغيرات بيئة مختلفة مخصصة لبيئة الاختبار ضمن ملف phpunit.xml الموجود في جذر مجلد المشروع، ضمن الوسم php يمكن إضافة الوسوم server وتعيين الخاصية name باسم متغير البيئة، والخاصية value بالقيمة لذلك المتغير، بهذا يمكنك تعديل القيم التي تريدها مختلفة فقط عن ملف env. وليس كل القيم بشكل مشابعه للتالي:

    <phpunit ...>
      ...
      <php>
        <server name="DB_DATABASE" value="testing_db"/> <!-- تعيين قاعدة البيانات للاختبارات -->
      </php>
    </phpunit>

    يمكنك الاستفادة من الاجابة التالية:

     

  24. رتب أولوياتك لا يجب أن تقبل كل عمل يعرض عليك، بل عليك اختيار أفضلها وما يناسبك من ناحية الربح والوقت والجهد اللازم لإتمامه دون التضحية بالجودة أو بالالتزام بوقت التسليم، في حال تكرار بعض الأعمال الروتينية التي يمكنك تفويضها حددها أولًا وابحث عن أشخاص يمكنهم إنجازها بشكل دوري كي تتفرغ للاهتمام بباقي الأعمال بأكبر كفاءة ممكنة، تذكر أن نتائج التعهيد مسؤوليتك، لذا يجب الاهتمام بمن تعهد وبالمتابعة الدائمة مع المستقل، يمكنك الاستفادة من قراءة المقالات التالية:  

     

    • أعجبني 1
×
×
  • أضف...