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

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

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

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

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

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

    11

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

  1. كما تم الشرح في التعليق السابق فإنه يمكنك حفظ هذه  المتغيرات في ال disk وذلك لحفظها عند إغلاق اللعبة وفي هذه الحالة يمكنك استخدام الحزمة shelve ويمكنك قراءة المزيد من المعلومات عنها من خلال الرابط السابق 

    وذلك مثال على طريقة عملها

    import shelve
    d = shelve.open('score.txt') 
    d['score'] = score            # الأن تم حفظ المتغير على ال disk
    d.close()

    ولقراءة البيانات من ال ملف نستخدم الكود التالي

    import shelve
    d = shelve.open('score.txt')
    score = d['score'] 
    d.close()

    وإذا كنت لا تريد استخدام أي حزم يمكنك استخدام python فقط المثال التالي مبسط ويمكنك إضافة البينات أو الدوال التي تريدها وبالطبع يمكنك استخدام أي مكتبة لتوفر لك العديد من المميزات

    حفظ البيانات 

    with open('readme.txt', 'w') as f:
        f.write('readme')

    ثم قرائتها

    with open(path_to_file) as f:
        contents = f.read()

     

  2. يمكنك أيضاً استخدام ال loop لتنفيذ المطلوب وهذه الطريقة هي أسرع من استخدام apply مع axis 1 كما في المثال التالي

    import pandas as pd
    
    df = pd.DataFrame({'ID':['1','2','3'], 'col_1': [0,2,3], 'col_2':[1,4,5]})
    mylist = ['a','b','c','d','e','f']
    
    def get_sublist(sta,end):
        return mylist[sta:end+1]
    
    df['col_3'] = list(map(get_sublist,df['col_1'],df['col_2']))

    ملاحظة 

    في الإصدار Python 2 لا تحتاج لاستخدام ال list للتحويل

  3. تعتبر الدالة render من ال life-cycle في react وتعتبر من ال life-cycle المهمة ويتم استدعائها من خلال react عند عمل إنشاء المكون وأثناء التحديثات بدون تدخل منك

    والوظيفة الأساسية لهذه الدالة هو تقديم كود ال JSX  إلى ال DOM ولكن بعد القيام بعدة عمليات معالجة للكود

    حيث أن كود ال JSX لا يتم تقديمه كما هو لل DOM إنما يتم تحويله لكود مشابه للتالي

    React.createElement(tag, props, children)

    حتى يتم تقديمه لل DOM

  4. بالطبع يمكنك استخدام django أو أي لغة أو تقنية backend أخرى مثل php laravel حيث أن يعتبر react native إطار عمل frontend لذلك ليس له علاقة بلغة ال backend فيمكنك استخدام نفس الكود أو تطبيق ال backend مع مثلاً تطبيق أندرويد أو تطبيق ويب بواسطة react 

    أما بالنسبة لأيهما أفضل فلا تصلح المقارنة حيث أن django إطار عمل ل python أما nodejs بيئة عمل ل javascript فلذلك ينبغي عليك إختيار التقنية المفضلة بالنسبة لك وأيضاً على حسب إذا كنت تتقن لغة javascript أو لغة python 

    كما أن لكل تقنية تتمتع ببعض المميزات مثل nodejs تتميز بسرعة وقوة بناء تطبيقات ال realtime وسهولة العمل مع قواعد البيانات non relational

    أما django أو python فيتمjع بسهولة تعلمه والعمل به

    • أعجبني 1
  5. كما شرح شرف الدين أنه المشكلة أن الكائن window متوفر فقط في المتصفح لذلك ينبغي عليك استخدامه في ال  الدالة componentDidMount او في الuseEffect hook أو ببساطة يمكنك استخدلم ال dynamic import مع ظبط الخسار srr ل false  فقط وتستخدم نفس الكود بدون تغيير أو الحاجة للدالة componentDidMount او  الuseEffect hook كما في المثال التالي

    // components/Scroll.js
    
    function onScroll() {
      console.log("scroll!");
    }
    
    window.addEventListener("scroll", onScroll);
    
    export default function Scroll() {
      return null;
    }
    // pages/index.js
    
    import dynamic from "next/dynamic";
    
    const Scroll = dynamic(
      () => {
        return import("../components/Scroll");
      },
      { ssr: false }
    );
    
    export default function Home() {
      return (
        <div style={{ minHeight: "1000px" }}>
          <h1>Home</h1>
          <Scroll />
        </div>
      );
    }

     

  6. ببساطة لكل loader مهمة مختلفة حيث أن

    • CSS Loader يقوم بمعالجة ملفات css فقط في حالة وجود ()url أو imports
    • أما ال style-loader فهو المسئول عن إضافة التنسيقات إلى صفحات الويب وتطبيقها من خلال الوسم styel كما في المثال التالي 
      <style type="text/css">
        body {
          background: yellow;
        }
      </style>
        

    لذلك كما ترى لكل منهما وظيفة مختلفة وينبغي عليك استخدامهما معاً

  7. يمكنك استخدام ال hook التالي " useRouter " كما في المثال التالي

    import Link from "next/link";
    import { useRouter } from "next/router";
    
    
    export const MyNav = () => {
    
      const router = useRouter();
    
      return (
        <ul>
          <li className={router.pathname == "/" ? "active" : ""}>
            <Link href="/">home</Link>
          </li>
          <li className={router.pathname == "/about" ? "active" : ""}>
            <Link href="/about">about</Link>
          </li>
        </ul>
      );
    };

     

  8. كما في التعليقات السابقة فإنه المشكلة في ال encoding وفي حالة أنك لم تستطع معرفته يمكنك استخدام الكود التالي لمعرفته 

    with open('filename.csv') as f:
       print(f)

    ثم بعد ذلك قم بتحديد ال encoding الذي وجدته 

    data=pd.read_csv('filename.csv', encoding="encoding you found ")

    كما أن إذا كنت تريد حل واحد لهذه المشكلة قم باستخدام ال Script التالي حيث يجرب الكثير من ال encoding واستخدام الصحيح

    import pandas as pd
    
    encoding_list = ['ascii', 'big5', 'big5hkscs', 'cp037', 'cp273', 'cp424', 'cp437', 'cp500', 'cp720', 'cp737'
                     , 'cp775', 'cp850', 'cp852', 'cp855', 'cp856', 'cp857', 'cp858', 'cp860', 'cp861', 'cp862'
                     , 'cp863', 'cp864', 'cp865', 'cp866', 'cp869', 'cp874', 'cp875', 'cp932', 'cp949', 'cp950'
                     , 'cp1006', 'cp1026', 'cp1125', 'cp1140', 'cp1250', 'cp1251', 'cp1252', 'cp1253', 'cp1254'
                     , 'cp1255', 'cp1256', 'cp1257', 'cp1258', 'euc_jp', 'euc_jis_2004', 'euc_jisx0213', 'euc_kr'
                     , 'gb2312', 'gbk', 'gb18030', 'hz', 'iso2022_jp', 'iso2022_jp_1', 'iso2022_jp_2'
                     , 'iso2022_jp_2004', 'iso2022_jp_3', 'iso2022_jp_ext', 'iso2022_kr', 'latin_1', 'iso8859_2'
                     , 'iso8859_3', 'iso8859_4', 'iso8859_5', 'iso8859_6', 'iso8859_7', 'iso8859_8', 'iso8859_9'
                     , 'iso8859_10', 'iso8859_11', 'iso8859_13', 'iso8859_14', 'iso8859_15', 'iso8859_16', 'johab'
                     , 'koi8_r', 'koi8_t', 'koi8_u', 'kz1048', 'mac_cyrillic', 'mac_greek', 'mac_iceland', 'mac_latin2'
                     , 'mac_roman', 'mac_turkish', 'ptcp154', 'shift_jis', 'shift_jis_2004', 'shift_jisx0213', 'utf_32'
                     , 'utf_32_be', 'utf_32_le', 'utf_16', 'utf_16_be', 'utf_16_le', 'utf_7', 'utf_8', 'utf_8_sig']
    
    for encoding in encoding_list:
        worked = True
        try:
            df = pd.read_csv(path, encoding=encoding, nrows=5)
        except:
            worked = False
        if worked:
            print(encoding, ':\n', df.head())

     

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

    df = df.drop(df.columns[[0, 1, 3]], axis=1)  # df.columns تعتبر zero-based 

    كما يمكنك استخدام الدالة pop كالتالي

    df.pop('column-name')

    لاحظ المثال التالي

    df = DataFrame.from_items([('A', [1, 2, 3]), ('B', [4, 5, 6]), ('C', [7,8, 9])], orient='index', columns=['one', 'two', 'three']) print df
    
       one  two  three
    A    1    2      3
    B    4    5      6
    C    7    8      9
    df.drop(df.columns[[0]], axis=1, inplace=True) print df
    
       two  three
    A    2      3
    B    5      6
    C    8      9
    
    three = df.pop('three') print df
    
       two
    A    2
    B    5
    C    8
    

     

    • أعجبني 1
  10. يمكنك استخدام الحل التالي

    • نقوم بحذف العناصر المتشابه من df2
    • ثم نقوم بعمل merge لل df1 مع df2 كما في المثال التالي
    df1 = pd.DataFrame(data = {'col1' : [1, 2, 3, 4, 5, 3], 
                               'col2' : [10, 11, 12, 13, 14, 10]}) 
    df2 = pd.DataFrame(data = {'col1' : [1, 2, 3],
                               'col2' : [10, 11, 12]})
    
    df_all = df1.merge(df2.drop_duplicates(), on=['col1','col2'], 
                       how='left', indicator=True)

    الناتج يكون كالتالي

    df_all
    
       col1  col2     _merge
    0     1    10       both
    1     2    11       both
    2     3    12       both
    3     4    13  left_only
    4     5    14  left_only
    5     3    10  left_only

    العناصر الغير مشتركة تكون كما في الناتج ليست both

  11. لا يمكن لأحد الإجابة على مثل هذه الأسئلة إلا إذا أكملت السؤال ب " من حيث "

    • فرص العمل 
    • سهولة التعلم
    • المجتمع
    • االأداء

    وما إلى ذلك

    وإليك مقارنة بينهما

    • يعتبر ال react مكتبة على عكس angular إطار عمل والفرق بينهم أن angular يوفر لك المكتبات والأدوات الكاملة التي تحتاجها لتطوير التطبيقات أما react في مكتبة تتيح لك إختيار الحزم أو المكتبات الأخرى لتعمل بها مع react 
    • يعتبر تعلم react أسهل نسبياً من angular حيث إذا كنت تعلم javascript جيداً فلن يكون هناك صعوبة في تعلمه بينما مع angular نظراً لأنه إطار عمل فستجد الأمر أكثر تعقيداً نسبياً
    • يعتبر عالمياً ال react أكثر طلباُ ولكن أيضاً angular مطلوب و كما هو الحال في مصر
    • يعتبر تطبيقات ال react أقل حجماً من تطبيقات ال react وأسرع بفرق بسيط عن ال angular حيث يعتمد على ال virtual Dom

    كما أن مع react يتوفر لك react native وهي تقنية قوية لتطوير تطبيقات الهاتف وهي ميزة قوية

    لذلك يمكنك الإختيار المكتبة المفضلة لك كما يمكنك قراءة الإجابات على هذه الأسئلة

     

    • أعجبني 2
  12.  لا تتوفر متغيرات البيئة التي يتم تحميلها من خلال .env.local إلا في بيئة Node.js ، مما يعني أنها لن تتوفر للمتصفح. من أجل عرض متغير على المتصفح أو في المكون ، عليك أن تسبق المتغير بـ NEXT_PUBLIC لذلك قم بتسميته 

    
    NEXT_PUBLIC_API = ...

    بدلاً من 

    API = ...

     

  13. إذا كنت لا تعلم المقاسات width أو height يمكنك استخدام ال layout=fill حتى تأخذ الصورة نفس مقاس ال container كما في المثال التالي

    <div style={{ position: "relative", width: "100%", paddingBottom: "20%" }} >
      <Image
        alt="Image Alt"
        src="/image.jpg"
        layout="fill"
        objectFit="contain" //container تأخذ أقل حجم ليتناسب مع ال 
      />
    </div>

     

  14. أحياناً عند  التعامل مع proxies يعيدون أحياناً ip متعددة  في HTTP_X_FORWARDED_FOR ولذلك للحصول على ال ip الحقيقي سيكون آخر ip في ال list لذلك سينستخدم إجابة سامح مع تعديل بسيط كالتالي 

    def get_client_ip(request):
        x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
        if x_forwarded_for:
            ip = x_forwarded_for.split(',')[-1].strip()
        else:
            ip = request.META.get('REMOTE_ADDR')
        return ip

     

    • أعجبني 1
  15. هناك بعض الإختلافات البسيطة بينهم كالتالي

    • Express-handlebars تعتبر هذه الحزمة هي الأشهر والأكثر إستخداماً فهي كما أن لديها توثيق جيد لكل الخصائص الموجودة بها كما أن أحد الاختلافات مقارنة بالحزم الأخرى هو القدرة على استخدام Hooks

    • hbs يعتبر من أسهل حزمة إدارة القوالب في الموقع كما تعطيك تقريباً نفس الخصائص الموجودة ب Express-handlebars  ، ولكن النشاط الأخير كان قبل 4 أشهر. أي لم تعد تحدث كما في Express-handlebars

    •   express-hbs  يمكن أن تستخدم مع كل من الإصدارات express 3/4. والميزة في هذه الحزمة أنها تدعم i18 n لذلك إذا كنت تحتاج لذلك سيكو ن خيار جيد ، بالرغم أنه من السهل دمج i18 n في الحزم الأخرى  لذلك لا تعتبر ميزة تختار من أجلها هذه الحزمة

  16. يمكنك الإبقاء على نفس ال style الخاص بال angular والتغيير فقط في أسلوب الكتابة في الtemplate Handlebars عن طريق إنشاء raw helper كالتالي

    Handlebars.registerHelper('raw-helper', function(options) {
        return options.fn();
    });

    ثم يمكنك استخدامه عن طريق أربع أقواس {{{{ كما في المثال التالي

    {{{{raw-helper}}}}
    <div class="container" ng-controller="AppCtrl">
        Total Members: {{members.length}}
    </div>
    {{{{/raw-helper}}}}

     

  17. يمكنك استخدام التابع pd.MultiIndex.from_product ك index في dataframe جديد ثم عمل   reset لل index كما في المثال التالي

    a = [1, 2, 3]
    b = ["a", "b", "c"]
    
    index = pd.MultiIndex.from_product([a, b], names = ["a", "b"])
    
    pd.DataFrame(index = index).reset_index()

    الناتج يكون كالتالي

       a  b
    0  1  a
    1  1  b
    2  1  c
    3  2  a
    4  2  b
    5  2  c
    6  3  a
    7  3  b
    8  3  c

     

    • أعجبني 1
  18. بداية  من نسخة panda 0.24.0 ، يمكنك استخدام الدالة .to_flat_index والتي تقوم بتنفيذ المطلوب كما في المثال التالي

    dat = df.loc[:,['name','workshop_period','class_size']].groupby(['name','workshop_period']).describe()
    print(dat.columns)
    # MultiIndex(levels=[['class_size'], ['count', 'mean', 'std', 'min', '25%', '50%', '75%', 'max']],
    #            codes=[[0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 2, 3, 4, 5, 6, 7]])
    
    dat.columns = dat.columns.to_flat_index()
    print(dat.columns)
    # Index([('class_size', 'count'),  ('class_size', 'mean'),
    #     ('class_size', 'std'),   ('class_size', 'min'),
    #     ('class_size', '25%'),   ('class_size', '50%'),
    #     ('class_size', '75%'),   ('class_size', 'max')],
    #  dtype='object')

    وللفصل بين اسماء الأعمدة يمكنك استخدام الحل التالي 

    dat.columns = ["_".join(a) for a in dat.columns.to_flat_index()]

     

    • أعجبني 1
  19.  

    بتاريخ 6 دقائق مضت قال Omar Montage:

    انا اقصد انا عندي كلاسين في الكلاس الثاني أريد أن أنشيْ دالة تنشيْ object من الكلاس الأول وأستطيع بعد ذلك أن أتصفح ال object والدخول علي خصائصه

    ربما تقصد الوراثة في اللغة لاحظ المثال التالي

    class Person {
      constructor(first, last, age, gender, interests) {
        this.name = {
          first,
          last
        };
        this.age = age;
        this.gender = gender;
        this.interests = interests;
      }
    
    }

    وللوراثة من هذا الكلاس نقوم باستخدام المعامل extends كالتالي

    class Teacher extends Person {
      constructor(first, last, age, gender, interests, subject, grade) {
        super(first, last, age, gender, interests);
    
        // subject و grade  Personخاصة بالكلاس
        this.subject = subject;
        this.grade = grade;
      }
    }
  20. كما وضح عبود فإنه يمكنك إنشاء دالة تقوم بإنشاء كائنات بواسطة المعامل new 

    ولكن هناك طريقة أحدث وهي استخدام ال class وهي تعمل مع الإصدار ecmascript 6 لاحظ الكود التالي

    class Person {
    
      constructor(name) {
        this.name = name;
      }
    
      introduce() {
        console.log(`Hello, my name is ${this.name}`);
      }
    
    }
    
    const ahmed = new Person('Ahmed');
    
    ahmed.introduce();

    وتعتبر هذه الطريقة تغيير في كتابة الكود فقط أي في ال syntax ولكن طريقة العمل واحدة في اللغة ولقراءة الموضوع بشكل أكثر تعمقاً يمكنك قراءة هذه المقالة

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

    قم بتثبيتها كالتالي

    pip install fuzzymatcher
    

    لاحظ المثال التالي

    from fuzzymatcher import link_table, fuzzy_left_join
    
    left_on = ["fname", "mname", "lname",  "dob"]
    
    right_on = ["name", "middlename", "surname", "date"]
    
    fuzzymatcher.link_table(df_left, df_right, left_on, right_on)

     

  22. كما شرح سامح في التعليق السابق أنه يمكنك أن تقوم بتنفيذ المطلوب من خلال delete سواء باستخدام get أو filter 

    SomeModel.objects.get(pk=1).delete()
    # أو
    SomeModel.objects.filter(pk=1).delete()
    
    # SQL المكافئ ل
    # delete from table_name where id = 1;

    ولكن إذا أردت تحديد عدة قيم لحذفها يمكنك استخدام التابع __in كما في المثال التالي

    SomeModel.objects.fitler(pk__in=[1,2,3,4,5,...]).delete()
    
    # SQL المكافئ ل
    # delete from table_name where id in (1,2,4,5,...);

     

    • أعجبني 1
  23. أولاً عند دراسة مسار معين أو محاولة فهم درس من مسار ما بطريقة سريعة أو ( لآخذ فكرة شمولية ) فالطبيعي أن تكون هناك بعض المفاهيم الغير مفهومة وذلك طبيعي بسبب طريقة الدراسة 

    أما بانسبة لمسار ال databases فهو ليس مرتبط بالمسارات السابقة بشكل مباشر إنما عند دراسة المسارات السابقة تساعدك بشكل كبير في فهم المسار أسرع وأفضل والحظ أن هذه المسارات تم ترتيبها بشكل دقيق فلا يجوز التنقل بين المسارات بشكل عشوائي

    يتم فتح المسار الأول من كل دورة مباشرة

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

     

×
×
  • أضف...