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

سامح أشرف

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

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

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

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

    56

أجوبة بواسطة سامح أشرف

  1. يمكنك إستعمال React.js في الوجهة الأمامية frontend مع إستخدام Django في الواجهة الخلفية backend، ويتم الربط بينهما من خلال عمل API، وليس من المفترض أن تستخدم جانغو Django مع Node.js في نفس الوقت حيث يؤدي كلًا منهما نفس الغرض وهو توفير واجهة خلفية backend.

    أما إن كنت تريد أن تستخدم Node.js في الواجهة الخلفية backend في كل الموقع مع إستعمال Django في أجزاء معينة فقط فيمكنك القيام بذلك من خلال عمل API بجانغو Django ورفعه على خادم ما server واستخدام هذا ال API من داخل Node.js

    يمكنك قراءة الاجابات هنا لمعرفة ما هو api

     

     

     

    • أعجبني 1
  2. يمكنك عمل مكون باسم 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>
      );
    }

     

    • أعجبني 1
  3. بتاريخ 1 ساعة قال Samer Alashqar:

    يعطيك العافية.. 

    الهدف من الاعلان لموقعي هو زيادة الزوار للموقع لكن من دون Google Ads كيف استطيع ان اجعل موقعي يظهر على الأقل في نتائج البحث اذا لم استطع استخدام Google ads بسبب محتوى الموقع ؟

    إعلانات جوجل لا تقوم بزيادة زوار الموقع، ولكن عليك الإهتمام بتحسين محركات البحث SEO للموقع الخاص بك لزيادة الزوار من محركات البحث وليظهر الموقع الخاص بك في نتائج أعلى.

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

  4. وعليكم السلام ورحمة الله وبركاته

    فايروسات الفيدية Ransomware عبارة عن برنامج يقوم بتشفير كل الملفات (أو بعضها) الموجودة على الجهاز، ولا يمكن إسترجاع الملفات المشفرة إلا عبر كلمة مرور معينة قام المخترق (مبرمج الفيروس) بتحديدها وفي الغالب تكون كلمة مرور عشوائية لكل جهاز، ويكون التشفير عبر طريقة من الطرق التالية:

    • تشفير الملفات بإستخدام كلمات مرور عشوائية لكل ملف، وفي هذا النوع يكون الغرض الأساسي هو تدمير الملفات وعدم السماح لك بالوصول إليها مرة أخرى، حيث يتم تشفيل كل ملف بكلمة مرور مختلفة تمامًا وعشوائية، وللآسف لا توجد أي طريقة عملية (حتى الآن) لإسترجاع هذه الملفات.
    • تشفير الملفات بإستخدام مفتاح تشفير: في هذه الطريقة يقوم المخترق بإستخدام مفتاح تشفير معين لكل الملفات لديك، ويمكن من خلال كلمة مرور معينة إسترجاع هذه الملفات، ولكن لن تتمكن من معرفة كلمة المرور هذه إلا إذا أعطاها لك المخترق بنفسه، وفي الغالب يكون ثمن هذا الأمر هو الفيدية التي يطلبها المخترق، مع العلم أنه لا يوجد أي ضمان للتأكد من إمكانية إسترجاع الملفات حتى وإن دفعت الفيدية بالفعل.
    • تشفير الملفات عبر خوارزمية تشفير ضعيفة: بعض فيروسات الفيدية تكون ضعيفة البنية وتستخدم خوارزمية تشفير سهلة الكسر، وهذا النوع قد تجد له حل وإمكانية إسترجاع الملفات كبيرة وذلك من خلال برامج خاصة تصدرها شركات الحماية مثل Avast و Kasper Sky، ويتطلب هذا الأمر برنامج خاص لكل نوع من فيروسات الفيدية (حسب الخوارزمية المتبعة في التشفير)، ولكن بسبب عدد فيروسات الفيدية الكبير قد لا تجد حل لنوع الفيروس الموجود لديك بالتحديد.

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

    حاول البحث عن برنامج من شركات الحماية المعروفة لفك تشفير الملفات التي تغيرت صيغتها extension لديك، أبحث عن xxx ransomware decryptor مع تغير الأحرف xxx باسم الصيغة الموجودة لديك، وربما تجد برنامج لفك تشفير هذه الملفات. من ضمن البرامج المعروفة لفك تشفير الملفات teslacrypt_tool حاول إستخدامه فد يساعدك في إسترجاع الملفات المصابة.

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

    كيف تحمي ملفاتك من التشفير

    يوجد عدد من الخطوات التي ستحميك من ضياع ملفاتك، وعدم الإصابة بفيروسات الفيدية من الأساس، ومنها:

    • لا تقم بتحميل برمجيات مسروقة أو مكركة أو أي patches أو keygen من أي نوع، فبغض النظر عن أن إستخدام مثل هذه البرمجيات غير قانوني، إلا أن هذه البرمجيات هي السبب الرئيسي في الإصابة بالفيروسات بشكل عام وفيروسات الفيدية بالتحديد بشكل خاص.
    • لا تقم بإستخدام نسخ مقرصنة من نظام التشغيل، يمكنك إستخدام الويندوز بدون شرائه أو تفعليه بطرق غير قانونية، حيث أن كل نسخ الويندوز الحالية غير المفعلة مجانية الإستخدام ولن تضطر للدفع مقابل إستخدام الويندوز، بشرط أن علامة مائية ستظهر على الشاشة تخبرك بأن الويندوز غير مفعل (Activate Windows) ولن تتمكن من تخصيص شكل النظام وألوانه عبر الإعدادات، وبالتالي لن تضطر إلى تحميل إصدارات معدلة من الويندوز أو تحميل برمجيات غير قانونية لتفعيله.
    • لا تقم بتحميل أي ملفات أو فتح أي روابط من مصادر مجهولة، إن وصلتك رسالة من أحد الأشخاص الذين لا تعرفهم، فلا تقم بتحميل أي ملفات أو أي فتح أي روابط منهم.
    • تأكد من أخذ نسخة إحتياطية من الملفات المهمة لديك، ويمكنك حفظ النسخ الإحتياطية على أحد وسائل التخزين السحابي مثل Google Drive أو OneDrive، أيضًا يمكنك تخصيص قرص تخزين خارجي لهذا الأمر إلا أن التخزين السحاب آمن أكثر.
    • قم بتفعيل ميزة الحماية ضد فيروسات الفيدية في الويندوز، يوفر الويندوز ميزة الحماية ضد فيروسات الفيدية، حيث تسمح لك بالتحكم في البرامج التي تريد الوصول إلى ملفات الموجودة لديك، ويمكنك السماح لبرامج معينة بذلك، ولن يتم أي فيروس أو برنامج آخر من الوصول إلى الملفات الخاصة بك، ولتفعيل هذه الميزة أبحث عن "windows security" في قائمة أبدأ Start وشغل مدير حماية الويندوز ثم Virus & threat protection ثم في قسم Ransomware protection أضغط على Manage ransomware protection ثم protected folders، ويمكنك إضافة أي مجلدات لا ترغب في السماح بالوصول إليها (إلا لبعض البرامج التي تحددها بنفسك).

     

  5. جوجل تتبع سياسة صارمة في ما يخص المواقع والتطبيقات التي تسمح بتحميل ونشر المحتوى بدون إذن صاحبها الرسمي وكذلك المواقع والتطبيقات التي تسمح للمستخدمين بتحميل ومشاركة المحتوى بدون إتصال (مثل مواقع تحميل الفيديوهات أو البرامج المسروقة أو أي منتجات رقمية لم يسمح صاحبها بإستعمالها بشكل رسمي).

    يمكنك ملاحظة هذا الأمر من خلال تصفح تطبيقات الفيديوهات في متجر Play على سبيل المثال، ولن تجد أي منها يسمح لك بتحميل الفيديوهات من اليوتيوب، وذلك بسبب سياسة جوجل في منع تداول المحتوى بشكل غير قانوني، ويمكنك الإطلاع على هذه السياسة وغير من القوانين المتبعة في إعلانات جوجل من خلال هذه الصفحة Copyright policy. (يوجد ترجمة للصفحة باللغة العربية).

    لذلك ستواجهة العديد من المشاكل في ما يخص الموقع الخاص بك بما أنه يسمح للمستخدمين بتحميل فيديدوهات اليوتيوب، وأفضل حل لهذه المشكلة هو الإعتماد على بديل لإعلانات جوجل (Google AdSense)

    ملاحظة: بالرغم من سياسة جوجل الصارمة حول تحميل الفيديوهات من اليوتيوب، إلا أنها قد تتغاضى عن المواقع والتطبيقات التي تسمح للمستخدمين بتحميل الفيديوهات والصور من مواقع أخرى مثل Instagram و Facebook وغيرها، ويوجد بالفعل العديد من المواقع التي تعرض إعلانات جوجل وهي مواقع تحميل فيديوهات وصور من مواقع التواصل الإجتماعي.

    • أعجبني 2
  6. التابع file.write يستقبل نص فقط كمدخل ليتم كتابته في الملف، ولا يمكنك تمرير قائمة list إليه بشكل مباشر، لذلك عليك تحويل قائمة المستخدمين إلى نص string أولًا قبل الكتابة في الملف، هنا مثال لكيفية تحقيق هذا الأمر:

    users_str = ""	# سنقوم هنا بتخزين الأسماء معًا في شكل نص
    Name_User = ["zeina", "mary", "majd", "mario", "elias"]
    
    # نضع كل اسم في المتغير السابق ونضيف مسافة للتفريق بين الأسماء
    for user in Name_User:
        users_str += user
        users_str += " "
    
    # شكل محتوى المتغير users_str
    print(users_str)  # zeina mary majd mario elias
    
    filee = open("D:\IT3\Project.txt", "w")
    filee.write(users_str)

    تم ذكر عملية التحويل هذه في توثيق التابع write في موسوعة حسوب.

    • أعجبني 1
  7. لكي تقوم بتحميل مشروع لارافيل 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/ في المتصفح وستجد أن المشروع يعمل بشكل سليم.
    • أعجبني 1
  8. يمكنك أن تستعمل التابع 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>

     

    • أعجبني 2
  9. لاحظ أنك قمت بإضافة الصنف disabled إلى زر تسجيل الدخول، وبالتالي لن يمكنك الضغط على الزر لأنه معطل disabled عليك أن تقوم بإزالة هذا الصنف وحفظ الملف وإعادة تحديث الصفحة مرة أخرى، وعند الضغط على الزر سوف يظهر لك النموذج model 

    <a class="nav-link disabled" href="#" aria-disabled="true" data-toggle="modal" data-target="#exampleModal">تسجيل الدخول</a>
    <!--               ^^^^^^^^-->

    ملاحظة: أرجو إرفاق الكود بشكل مباشر ضمن السؤال وليس في شكل ملف منفصل، أيضًا إن كنت مشترك في إحدى الدورات الخاصة بالأكاديمية فيمكنك طرح الأسئلة أسفل الدرس في التعليقات مباشرة وسوف يقوم أحد المدربين بمساعدك على الفور.

  10. وعليكم السلام ورحمه الله وبركاته

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

    أيضاً لا يوجد فائدة من نسخ الأكواد فقط وعليك أن تحاول تطبيق نفس الفكرة بطريقة مختلفة، على سبيل المثال، إن تعلمت كيفية عمل شريط تنقل navbar، فحاول عمل footer بنفسك (في الغالب سوف تستعمل نفس التقنيات) وبالتالي ستكون طبقت على الفكرة وقمت بكتابة كود مختلف تمامًا.

    • أعجبني 1
  11. إذا إشتركت في أي دورة من دورات أكاديمية حسوب، فستظل كل الدروس متاحة لك مدى الحياة كما ستتوصل أيضًا باي تحديثات جديدة أو مسارات يتم إضافتها في المستقبل. أيضًا يمكن الإطلاع على أي مسارات قديمة تم أرشفتها أو تحديثها بدون مشكلة.

    حتى ولو أتيت بعد سنوات من شراء الدورة فسوف تظل متاحة لكل بالكامل بما في ذلك التحديثات المستقبلية.

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

    يمكنك الإطلاع على هذه المساهمة هنا لمعرفة كيفية إستخدام موسوعة حسوب بشكل صحيح.

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

    قم بالإطلاع على السلاسل السابقة وستجد أنك تعلمت الكثير من الأمور المفيدة في اللغة والتي سوف تساعدك على تعلم أشياء متقدمة أكثر وأكثر وسيكون قراءة المقالات الموجودة في موسوعة حسوب -أو أي مسوعة أخرى- سهل للغاية.

    ملاحظة: السلاسل السابقة مُرتبة من السهل الذي يهتم بتعليم الأساسيات وكيفية إستخدام اللغة إلى السلاسل المتقدمة التي تحتاج أن تكون على دراية بأساسيات اللغة لتتمكن من مفهم محتوى المقالات.

    • أعجبني 1
  13. لبناء مشروع Electro.js لنظام ويندوز يجب أن يكون لديك المتطلبات التالية:

    • Windows 10 أو Server 2012 R2 أو أحدث

    • Visual Studio 2017 15.7.2 أو أحدث

    • بالتأكيد يجب أن يكون لديك Node.js و Git مثبيتين على جهازك

    يمكنك الإطلاع على تفاصيل كل هذه المتطلبات وكيفية تحميلها وتثبيتها من خلال التوثيق الرسمي من هنا.

    أما بالنسبة لنظام MacOS:

    • فيجب أن يكون لديك macOS بإصدار 11.6.0 أو أحدث
    • برنامج Xcode
    • Python بإصدار 3.7 أو أحدث
    • بالإضافة إلى Node.js و Git

    يمكنك الإطلاع على تفاصيل كل هذه المتطلبات وكيفية تحميلها وتثبيتها من خلال التوثيق الرسمي من هنا.

    بعد ذلك عليك أن تقوم بإستخدام Electron Build Tools لبناء مشروع Electron.js من خلال تثبيت الحزمة عبر الأمر التالي:

    npm i -g @electron/build-tools

    ثم تشغيل الأمر التالي:

    e init --root=~/electron --bootstrap testing

    ملاحظة: قد يُظهر هذا الأمر بعض التحذيرات Warning وعليك أن تضغط y ليتم إصلاح أي مشاكل بشكل تلقائي.

    الآن يجب أن تنفذ أمر أخير وهو:

    e build

     

    • أعجبني 1
  14. وعليكم السلام ورحمه الله وبركاته

    العنصر div.slides بسبب وجود بعض الأخطاء الإملائية بين الأصناف classes في ملف index.html والمحدد .slids .img-slider  ضمن الملف style.css

    حاول أن تقوم بتصحيح كلمة slide وجعلها slids في المحدد .slids .img-slider في الملف style.css لتكون مثل الصنف المستخدم في ملف index.html تمامًا، بعد ذلك قم بحفظ الملفات واعد تحديث الصفحة في المتصفح وستجد أن العنصر أصبح يظهر في الصفحة.

  15. وعليكم السلام ورحمه الله وبركاته

    في الواقع لا يوجد أي فرق عملي بينهما، فكلاهما مجرد ملفات CSS عادية يتم إستدعائها في مشروعك، ويمكن أن يتم إستعمال أحدهما دونًا عن الآخر بدون مشكلة، كما أنه ليس شرطًا أن يكونا بهذه الأسماء حيث يمكنك إعادة تسميتهم إلى أي شيء ترغب به.

    الغرض من هذين الملفين هو أن يتم وضع أكواد CSS العامة التي تنطبق على المشروع ككل، فمن المتعارف عليه أن يتم إستعمال الملف index.css على سبيل المثال في كتابة خصائص CSS العامة واستدعاء المكتبات في داخله مثل أكواد tailwindcss على سبيل المثال، أيضًا أي أكواد خاصة بإعادة ضبط أكواد CSS في كل المتصفحات (مثل ما تقوم به مكتبة rest CSS و normalize.css) يتم وضعهم في هذا الملف.

    أما الملف app.css فيحتوي أيضًا على أكواد CSS العامة الخاصة بالمشروع ولكن الفرق هو أن الملف app.css يحتوي على أكواد خاصة بالمشروع بشكل مباشر مثل ألوان المشروع الرئيسية والخطوط المستخدمه فيه والخلفيات الرئيسية .. إلخ بينما الملف index.css فهو خاص أكثر بضبط خصائص المشروع واستدعاء المكتبات الأخرى.

    • أعجبني 1
  16. عليك أن تكتب بيانات قاعدة البيانات داخل علامات الإقتباس بالشكل التالي:

    <?php
    
    define('DATABASE_USERNAME', 'root');
    define('DATABASE_PASSWORD', '123456789');
    // ...

    يجب أن يكون لديك عنوان الخادم Server الخاص بقاعدة البيانات واسمها وكلمة المرور واسم المستخدم الخاص بها.

  17. دورة تطوير واجهات المستخدم دورة متكاملة، أي أنك لن تحتاج إلى مشاهدة أجزاء من دورات أخرى لكي تستطيع أن تكملها، حيث يتم شرح كل الأساسيات خلال المسارات الاولى ويتم تعليمك المزيد من الأمور خلال المسارات اللاحقة.

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

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

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

    إيضًا لتفهم كيف تعمل المكتبة التي سوف تستعملها أو إطار العمل الذي ستعمل به يجب أن تقوم بالاطلاع على بعض الاكواد المصدرية source code له ولكي تتمكن من فهم الكود بشكل جيد يجب أن تكون لديك معرفة جيدة بلغة البرمجة التي تستعملها.

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

  19. إمكانية أن تجد بوابة دفع توفر مميزاته وخدماتها لك بدون الحصول على سجل تجاري قليلة للغاية مقارنة بإمكانية إستخدام بوابة دفع مع سجل تجاري، وسيكون من الصعب العثور على بوابات مثل هذه هذه، ولكن بالرغم من ذلك يوجد بوابة PayFort العربية (تم شرائها من قِبل Amazon وأصبحت amazon payment services) وهي تدعم دول الخليج ومصر والأردن ولبنان، كما أن الدفع بإستخدام بطاقات محلية مثل  بطاقة ميزة Meza في مصر يكون عليه رسوم أقل. كما توجد منصة paytabs المصرية ومنصة 2checkout التي تتتطلب فقط هوية حكومية بدون الحاجة إلى سجل تجاري.

    أما عالميًا فيمكنك إستخدام skrill وهو بنك بريطاني ويوفر خدماته بشكل إلكتروني، كما أن رسوم خدماته منخفضة للغاية مقارنة بباقي البنوك العالمية. يمكنك كذلك إستخدام Paypal حيث يوفر لك إمكانية إستقبال وإرسال الأموال بدون الحاجة إلى سجل تجاري.

    ملاحظة: بعض البلدان تفرض على أصحاب المشاريع والمواقع التجارية إنشاء سجل تجاري حتى وإن كانت أرباج الموقع قليلة (أقل من حد إحتساب الضرائب) مثل مصر، ولذلك عليك أن تبحث في الأمر إن كنت تحاول إنشاء موقع تجاري خاص بك لكي لا تتعرض للمساءلة القانونية في بلدك. حاول كذلك التواصل مع أي منصة تنوي أن تشترك فيها لكي تسألهم عن طلبهم للسجل التجاري، لأن الكثير من المواقع تغير من سياساتها من حين لآخر.

    • أعجبني 1
  20. يمكنك إستعمال مكتبة 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'));

     

    • أعجبني 2
  21. يوجد العديد من المكتبات الخاصة بتطوير الواجهة الأمامية بإستخدام React ربما يكون أشهرها Materia UI و chakra وreact bootstrap. كل هذه المكتبات وغيرها تؤدي وظيفة واحدة وهي تسهيل وتسريع عملية تطوير الواجهة على المبرمج من خلال إستخدام مجموعة من المكونات الجاهزة. ولكي تختار المناسب لك عليك أن تقوم بتجربتهم واختيار الاسهل من وجهة نظرك أو الذي يوفر لك مجموعة أكبر من المكونات للاختيار من بينها.

    بالنسبة للفرق بين React Bootstrap و Bootstrap هو أن الأخيرة عبارة عن ملف CSS وملف JavaScript فقط وبإضافة هذه الملفات إلى أي مشروع ستتمكن من إستخدام أصناف Bootstrap الجاهزة وإستعمال أي مكونات من التوثيق الرسمي للمكتبة (مع تغير بعض أكواد HTML لتناسب JSX في React)، أما react Bootstrap فهي تحتوي على نفس مكونات bootstrap العادية ولكن في شكل مكونات جاهزة يمكنك إستدعائها في أي جزء من مشروعك بسهولة دون الحاجة لكتابة كود المكون بالكامل.

    حاول الاطلاع على توثيق react Bootstrap وتوثيق مكتبة bootstrap ولاحظ الفرق في طريقة كتابة المكونات في كلاهما.

    • أعجبني 3
  22. يجب أن تكون الحزم مكتوبة في الملف package.json ، والملف package-lock.json لا يجب التعديل عليه يدويًا حيث يتم كتابة تفاصيل حزم المشروع وما تعتمد عليه هذه الحزم من مكتبات وحزم أخرى.

    بعد التأكد من أن الحزم مكتوبة بشكل صحيح في الملف package.json وان إصداراتها صحيحة، يجب تنفيذ الأمر npm install لتثبيت كل الحزم المطلوبة.

    أيضًا يجب التأكد من أن كود إستدعاء الحزم صحيح.

    • أعجبني 2
  23. بتاريخ منذ ساعة مضت قال احمد عمر11:

    الف مليون شكر لحضرتك جزاك الله كل الخير الكود اشتغل تمام 

    ممكن اتعب حضرتك اخى العزيز وصديقى الجديد كود التعديل مش شغال ممكن اعرف من حضرتك الحل اكون شاكر جدا جعله الله فى ميزان حسناتك اللهم امين

    
        <?php
    
    
    $FF=$_POST{'E'};
    
    $image=addslashes(file_get_contents($_FILES['image']['tmp_name']));
    $id_up=$_POST{id_up};
    include('db.php');
    $sql = "update estshara set E='$FF', image='$image' where id='$id_up'";
    if($conn->query($sql) === true ){
        
        echo "yes";
       
    }
     else {
      echo "no" ;  
         
         
     }
    
    
        ?> 

     

    أكيد، يوجد لديك فقط بعض المشاكل في كتابة الكود نفسه، في البداية حاول أل تستعمل الأقواس المعقوفة { } عند إستخدام المصفوفات أو النصوص، لأنها أصبحت مهملة deprecated بداية من PHP 7.4 وسيتم إزالتها بالكامل في إصدارات PHP 8 المستقبلة، ويمكنك أن تستعمل الأقواس المربعة [ ] بدلًا منها، وحاول كذلك إستخدام أسماء مفهومة وواضحة للمتغيرات والقيم بدلًا من FF و E فهذه الأسماء لا تعبر عن مضمونها وتصعب من إصلاح ومراجعة الأكواد:

    <?php
    
    $FF = $_POST['E'];

    أيضًا في المتغير image$ أنت تحاول الحصول على اسم الصورة وليس محتاوها، لذلك ليس عليك أن تستعمل الدالة file_get_contents:

    <?php
    
    $image = addslashes($_FILES['image']['tmp_name']);

    وعندما تحاول الوصول إلى قيمة ما من خلال المصفوفة POST_$ فإستخدم النصوص string لكي لا يظهر خطأ:

    <?php
    
    $id_up = $_POST["id_up"];

    أخيرًا حاول أن تجعل الكلمات الدلالية في SQL بحروف كبيرة Capital لكي تكون واضحة أكثر:

    <?php
    
    $sql = "UPDATE estshara SET E='$FF', image='$image' WHERE id='$id_up'";

     

  24. حاول أن تقوم بتنظيم الكود قليلًا لكي تتمكن من معرفة مكان الخطأ بالتحديد، أيضًا حاول إستخدام الأقواس عند إستعمال الشروط conditions على النحو التالي:

    <?php
    
    // delete.php
    
    if (isset($a)) {
      $sql = "DELETE FROM estshara WHERE id=$a";
    
      if ($conn->query($sql) === true) {
        echo "تم الحذف بنجاح";
      } else {
        echo "لم يتم الحذف";
      }
    }

    بهذه الطريقة تكون قراءة الكود أسهل بكثير، ولا تحدث أخطاء بسبب عدم وجود الأقواس.

    الأمر الآخر هو أنك تقوم بإرسال قيمة المتغير a$ ضمن عنوان URL من خلال السطر التالي:

    <td><?php echo "[<a href='delete.php?a=$row[id]'onclick='return confermdelete()'>delete </a>]" ?></td>

    أتوقغ أن السطر السابق سيقوم بعرض كلمة [delete] في شكل رابط والذي سيكون بالشكل التالي على سبيل المثال:

    delete.php?a=123

    إذا يجب أن تقوم في الملف delete.php بمحالة الوصول إلى قيمة a وذلك من خلال إستخدام المصفوفة GET_$ وليس المتغير a$ نفسه، كما يلي:

    <?php
    
    if (isset($_GET['a'])) {
      $sql = "DELETE FROM estshara WHERE id=" . $_GET['a'];
        
      if ($conn->query($sql) === true) {
        echo "تم الحذف بنجاح";
      } else {
        echo "لم يتم الحذف";
      }
    }
    
    ?>

    لاحظ كيف أستخدمت القيمة GET['a']_$ بدلًا من المتغير a$

    بهذا الشكل سوف يكون شكل جملة SQL على النحو التالي:

    DELETE FROM estshara WHERE id=123

     

  25. يمكنك إستخدام المكتبة 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:
    	# ...

     

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