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

عبدالباسط ابراهيم

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

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

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

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

    11

أجوبة بواسطة عبدالباسط ابراهيم

  1. بالإضافة لسرعة تنفيذ العمليات المختلفة والكفاءة العالية في التخزين ل numby عن القوائم في python فإن ال numby توفر عليك بعض الأعمال التي ربما تحتاج لمزيد من العمل لتنفيذها من خلال قوائم python مثل

    • الجمع على طول المحور المطلوب
      numpy.sum(arr, axis, dtype, out)

        

    • تحويل البيانات من الملفات إلى مصفوفة مباشرة

      x = numpy.fromfile(file=open("data"), dtype=float).reshape((100, 100, 100))

        

    وهناك أيضاً العديد من المكتبات التي تعمل مع أو تعتمد على ال numby مثل مكتبات ال visualization 

    • أعجبني 1
  2. تعتبر ال "use strict" من الإضافات القوية للغة حيث تمنع المطورين من الوقوع في الأخطاء وتعمل أيضاً بكشف الأخطاء ال silent التي لا يمكن إكتشافها فتقوم بمنع الأخطاء التالية

    • تمنع تكرار ال keys في الكائنات
      var zombie = {
          eyeLeft : 0,
          eyeRight: 1,
      }

       

    • تمنع تعريف المتغير بدون var وما إلى ذلك
      Y = 5;

       

    • تمنع تكرار ال arguments
      function run(fromWhom, fromWhom){}

       

    أيضاً يقوم الوضع strict بتحسين الأداء الخاص بالبرنامج أو الكود مثلاً عن طريق عمل throw لل silent errors أيضاً يقوم بإصلاح بعض الأخطاء التي تمنع محرك v8 من عمل optimization 

  3. يجب أن تعرف أولاً أن res.send  تتكون من 

    • res.write
    • res.setHeaders 
    • res.end

    وتقوم send تحدد content type تلقائياً على حسب البيانات المرسلة بينما end لن تقوم بتحديد content type

    وأيضاً send تقوم بتحديد ال ETag وهو معرف لل http response ويساعد في ال cache وحفظ ال bandwidth

    هناك بعض الإستخدامات التي يفضل استخدام write ,end معاً بدلاً من send في حالة أن مثلاً البيانات المرسلة كبيرة أو عند محاولة تكرار عملية send فلن تنجح بينما ستنجح من خلال write ,end معاً

    • أعجبني 1
  4. بالإضافة للحلول السابقة فإذا كنت تريد تمرير عدة متغيرات يمكنك وضع هذه المتغيرات في ملف آخر منفصل ويكون خاص بالمتغيرات مثلاً ثم إستدعائه قبل الملف الرئيسي

    • ننشأ ملف مثلاً var.js يحتوي على المتغيرات التي نريدها في الملف الرئيسي 
    • ثم نقوم بتنفيذ ال scripts كالتالي
      $ mongo variables.js main.js

       

  5. يمكنك عمل ذلك من خلال العديد من الطرق ولكل طريقة أولوية فمثلاً استخدام ال prefix يكون لها الأولوية الأعلى ولكن ربما تريد وضع إعدادت من خلال متغيرات البيئة كالتالي

    NPM_CONFIG_PREFIX=your/path

    أو من خلال ملف npmrc من خلال هذا المسار path/to/npm/itself/npmrc 

    ويمكنك الـاكد من الإعدادات لديك من خلال الأمر

    npm config list 

  6. كما تم الشرح في التعليقات السابقة فإنه المعاملان or و and لا يقوما بإرجاع القيمة ل true أو false إنما يتم إرجاع القيمة من ال expression التي يجب تنفيذها كما تم الشرح بالأعلى وذلك يكون مفيداً في حالات مثل إرجاع قيمة إفتراضية 

    ولكن في حالة أنك تريد تنفيذ المطلوب من برنامجك يمكنك استخدام ()bool كالتالي

    return bool(len(args) and max(args)-min(args))

     

  7. توجد عدة طرق غير ال str ولكن في حالة أنك تستخدم Python 3.6 أو أعلى يمكنك استخدام ال f-strings كالتالي

    age= 18
    print(f'I have {age} years old')

    ويعتبر ال f-strings من الإضافات القوية حيث يمكنك تنفيذ أي كود بداخل الأقواس كالتالي

    age= 18
    print(f'I have {age + 5} years old')

    يمكنك أيضاً استدعاء دالة من داخل الأقواس

    def add(x, y):
        return x + y
    
    
    print(f'Sum(10,20) = {add(10, 20)}')

     

  8. أعتقد أنك تريد تغيير عنوان الرابط الأول عند الضغط على زر آخر ويمكنك عمل ذلك من خلال تغيير ال href بواسطة javascript كالتالي

    var button = document.getElementById("button"); //الزر  يقوم بتغيير الرابط
    var link = document.getElementById("mylink");//الرابط  
    
    button.addEventListener("click", function(){
              link.setAttribute('href', "http://الرابط الذي تريده");
    })

     

  9. أولاً يجب أن تعرف أنه لا يوجد وجه مقارنة بين ال master وال origin وهذه المصطلحات ليست مفاهيم في ال git أو github إنما 

    • origin هى إختصار لرابط المستودع البعيد و أعتقد أنك ترى العديد من الشروحات التي تستخدم الأمر 
      git push origin master

      ولكن هنا origin تستخدم كإختصار

    • بالنسبة ل master فهو اسم الفرع أو ال branch حيث أن يمكن أن يكون للrepo أكثر من branch  وهو ليس بالضرورة أن يكون master إنما يمكن أن يكون main أو أي اسم آخر

    إذا أردت البحث عن المزيد من المعلومات يمكنك البحث عن git branch و ال origin

    • أعجبني 1
  10. بالطبع يفضل الإلتزام بالترتيب حيث توجد بعض الدروس التي تعتمد على الدروس السابقة فمثلاً عند دراسة المسار " قواعد البيانات " يجب عليك على الأقل دراسة المسار " أساسيات البرمجة " لذلك معظم الدروس مرتبطة ببعضها وبرما تكون هناك دروس غير مرتبطة بما قبلها ولكن حتى لا تفوت عليك بعض المعلومات يجب عليك الإلتزام بالترتيب إلا في حالة أنك على علم بأحد المسارات وقد درسته دراسة وافية وأيضاً لا يفضل ذلك

    • أعجبني 1
    • يمكنك استخدام with في ال error handling و ال management resources غالباً في بث الملفات حيث تستخدم في عدة عمليات مرتبطة ومترتبة على بعضها ويمكنك استخدامها كالتالي
     with open('file.txt', 'w') as f:
         f.write('hello')

    في هذه الحالة لا تحتاج لاستخدام f.close فهي تقوم بذلك بدلاً عنك

    • بالطبع لا مشكلة في استخدام with بل اعد الأفضل في بعض الإستخدامات يمكنك بالطبع استخدام try  except بدلاً منها ولكن with توفر عليك بعض المهام وإختصار للكود
    • حتى تستطيع استخدام with يجب توفير الدعم لها من خلال إنشاء Context Manager على هيئة كائن حتى يتواجد الدوال __enter__ و __exit__  لتستطيع العمل ب with هناك العديد من الدوال والمكتبات التي بدأت توفير الدعم للعمل ب with 
    • أعجبني 2
  11. كما وضح عبدالمجيد أن الكود الذي يتم تنفيذه في المتصفح أي في ال client side يجب وضعه في ال lifecyle componentDidMount والبديل عن هذه ال lifecyle في ال function component ال useEffect ويتم تنفيذ المطلوب كالتالي

    import React, {useEffect } from 'react';
    
    function Index() {
    
      //componentDidMount and componentDidUpdate مشابه ل 
      useEffect(() => {
          console.log('window.innerHeight', window.innerHeight);
      },[]);

     

  12. ذلك بسبب أن ال export default من خصائص ال es6 وتعتبر هذه النسخة من JavaScript غير مدعومه حالياً لذلك ينبغي عليك عند استخدام التصدير بالشكل التالي

    export default Social

    استخدام transpiler مثل babel لتقوم بتحويل ال es6والإصدارات اللاحقة إلى كود مدعوم من جميع المنصات والمتصفحات

  13. ليس هناك وجه مقارنة بين getStaticPaths و getStaticProps حيث 

    • getStaticProps تقوم بجلب البيانات
    • getStaticPaths تقوم بإنشاء paths بناء على هذه البيانات من ال getStaticProps

    في السطر التالي نقوم يإنشاء ال paths من خلال البيانات حيث من خلال ال post.id التي تصلنا  يمكننا إنشاء ال paths

    const paths = posts.map((post) => ({
        params: { id: post.id },
      }))

     

  14. يمكنك استخدام الإضافة next-seoحيث توفر لك مميزات كثيرة فيمكنك إضافة meta لصفحة معينة أو إضافة meta إفتراضية لجميع الصفحات أو الموقع كالتالي

    • إنشاء custom App يسمى app.js_ 
    • ثم يمكنك استدعاء DefaultSeo من next-seo ثم إضافة الإعدادات التي تريدها

    import App, { Container } from 'next/app';
    import { DefaultSeo } from 'next-seo';
    
    // import your default seo configuration
    import SEO from '../next-seo.config';
    
    export default class MyApp extends App {
      render() {
        const { Component, pageProps } = this.props;
        return (
          <Container>
            <DefaultSeo // Component يجب أن تكون في البداية قبل ال 
              openGraph={{
                type: 'website',
                locale: 'en_IE',
                url: 'https://www.url.ie/',
                site_name: 'SiteName',
              }}
              twitter={{
                handle: '@handle',
                site: '@site',
                cardType: 'summary_large_image',
              }}
            />
            <Component {...pageProps} />
          </Container>
        );
      }
    }
  15. نعم يعتبر استخدامهما متماثل ولكن هناك اختلاف في الحالات اليت يجب استخدام أياً من هما حيث تعتبر في كثير من الحالات التي ستستخدم فيها ال getStaticProps مثل

    • البيانات المطلوبة لجعل الصفحة متاحة في وقت البناء جاهزة

    • في حالة أنك تقوم بجلب البيانات من  headless CMS.

    • في حالة أنك تهتم كثيراً بال SEO

    والحالة التي يمكنك استخدام getServerSideProps  فيها هي

    •  في حالة أنه يتم جلب البيانات عند كل request من المستخدم لبناء الصفحة  
  16. كما وضح وائل في التعليق السابق أنه يمكنك تنفيذ ما تريده من خلال طريقتين سواء ال referencing أو ال subdocument  يفضل استخدام الطريقة الثانية لأنها تقوم بإدراج ال authorSchema مباشرة في ال bookSchema فالميزة هنا أنها تحفظ البيانات كاملة في مكان واحد فيساعد على زيادة الأداء وتقليل زمن ال query لأنها لن تبحث في عدة أماكن لذلك يكون من الأفضل استخدام الطريقة الثانية في حالة 

    • أن البينات في ال  subdocument ليست كبيرة 
    • في حالة أن البيانات لا يحدث لها تغيير كثيراً

    وأيضاً هناك استخدامات تجعل من ال referencing أفضل

    • أعجبني 1
  17. توجد دالة في لغة بايثون تقوم بالفكرة التي تريد تنفيذها وهي wrap من textwrap ويمكنك استخدامها كالتالي 

    from textwrap import wrap #لاتنسى استدعائها أولاً
    s = '1234567890'
    wrap(s, 2) # نمرر أولاً النص ثم نمرر العرض أو عدد الحروف التي تريدها
    
    #الناتج
    # ['12', '34', '56', '78', '90']
    
    
    • أعجبني 1
  18. من الطبيعي والإفتراضي أن تأخذ العناصر مكانها في الموقع على حسب وجودها في الكود أو شيفرة html فمثلًا العنصر الموجود في الكود أولاً يكون موجود في الموقع أولاً 

    ولكن عند إضافة الخاصية position تقوم هذه الخاصية بتغيير مكان العنصر الإفتراضي والطبيعي والفرق بين ال relative و ال absolute 

    • Relative تمكننا من تحريك العنصر من مكانه الطبيعي أي يبقى العنصر في مكانه في حالة عدم تحديد خصائص left right top or bottom 
    • أما بالنسبة ل absolute تمكننا من تحريك العنصر ولكن ليس من كانه الطبيعي، بل، من أقرب عنصر له خاصية position relative أو إن لم تكن موجودة يكون من ال body

    ويتم توضيح الشرح من خلال الصورة التالية60d088579cfc6_gz265(1).thumb.png.2de8e8b30bccb57f8bd48c6fb00588d0.png

    يمكنك قراءة المزيد من المعلومات من هنا

×
×
  • أضف...