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

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

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

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

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

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

    11

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

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

    
    NEXT_PUBLIC_API = ...

    بدلاً من 

    API = ...

     

  2. إذا كنت لا تعلم المقاسات 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>

     

  3. أحياناً عند  التعامل مع 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
  4. هناك بعض الإختلافات البسيطة بينهم كالتالي

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

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

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

  5. يمكنك الإبقاء على نفس ال 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}}}}

     

  6. يمكنك استخدام التابع 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
  7. بداية  من نسخة 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
  8.  

    بتاريخ 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;
      }
    }
  9. كما وضح عبود فإنه يمكنك إنشاء دالة تقوم بإنشاء كائنات بواسطة المعامل 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 ولكن طريقة العمل واحدة في اللغة ولقراءة الموضوع بشكل أكثر تعمقاً يمكنك قراءة هذه المقالة

  10. يوجد عدة طرق لتنفيذ المطلوب كما شرح أحمد في التعليق السابق ولكن في بعض الأحيان تحتاج لمكتبة لتسهيل الأمر وإضافة بعض المميزات ويمكنك استخدام المكتبة 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)

     

  11. كما شرح سامح في التعليق السابق أنه يمكنك أن تقوم بتنفيذ المطلوب من خلال 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
  12. أولاً عند دراسة مسار معين أو محاولة فهم درس من مسار ما بطريقة سريعة أو ( لآخذ فكرة شمولية ) فالطبيعي أن تكون هناك بعض المفاهيم الغير مفهومة وذلك طبيعي بسبب طريقة الدراسة 

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

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

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

     

  13. كما شرح أحمد أنه تحتاج لإستخدام المكتبة openpyxl في حفظ البيانات من pandas 

    لذلك مع openpyxl إصدار  2.4.0 و إصدار 0.19.2 pandas ، يمكنك استخدام حل ابسط كالتالي

    import pandas
    from openpyxl import load_workbook
    
    with pandas.ExcelWriter('Masterfile.xlsx', engine='openpyxl') as writer:
        writer.book = load_workbook('Masterfile.xlsx')
        data_filtered.to_excel(writer, "Main", cols=['Diff1', 'Diff2'])

    وجرب أيضاً استخدام المعامل keep_date_col بالقيمة True 

    writer = pd.ExcelWriter('prueba1.xlsx'engine='openpyxl',keep_date_col=True)

     

    • أعجبني 1
  14. أفترض أن عمود DOB الخاص بك بالفعل من النوع datetime64  حيث أن بالفعل قمت بتحويله ولكن تحتاج لتعديل ال format فقط من خلال style.format كالمثال التالي

     df
      
              DOB
    0  2019-07-03
    1  2019-08-03
    2  2019-09-03
    3  2019-10-03

    لاحظ ال format قبل التعديل

    df.style.format({"DOB": lambda t: t.strftime("%m/%d/%Y")})

    ستصبح mm/dd/yyyy

    df.style.format({"DOB": lambda t: t.strftime("%d-%m-%Y")}) 

    ستصبح dd-mm-yyyy

    • أعجبني 1
  15. يمكنك استخدام ال operator.or من خلال المكتبة operator لاحظ المثال التالي

    filter_kwargs = {
        'field_a': 123,
        'field_b__in': (3, 4, 5, ),
    }
    list_of_Q = [Q(**{key: val}) for key, val in filter_kwargs.items()]
    Item.objects.filter(reduce(operator.or_, list_of_Q))

    في Python3 ، لم تعد الدالة reducer موجودة built in في بايثون بعد الآن ، يمكنك استخدامها من خلال

    from functools import reduce

     

    • أعجبني 1
  16. نعم الnode  تعتبر single-threaded مع أن هناك بعض الإضافات التي تضيف ال multi threading لل nodejs

    ولكن تقوم بمعاملة ال concurrent requests أو الطلبات المتزامنة بواسطة ال Singlethreaded event loop حيث تعتبر ال nodejs غير متزامنة وذلك يتيح لها معاملة الطلبات بدون عمل block لغيرها لاحظ الشرح التالي لتفهم الفكرة

    request ──> ينتج thread
                  └──> إنتظار قاعدة البيانات
                         └──> الرد
    request ──> ينتج thread
                  └──> إنتظار قاعدة البيانات
                         └──> الرد
    request ──> ينتج thread
                  └──> إنتظار قاعدة البيانات
                         └──> الرد

    لاحظ الشكل السابق كيف يعالج الطلبات بواسطة ال multi threading 

    request ──> معالجة الأمر في قاعدة البيانات
    request ──> معالجة الأمر في قاعدة البيانات
    request ──> معالجة الأمر في قاعدة البيانات
    database request complete ──> الرد
    database request complete ──> الرد
    database request complete ──> الرد

    لاحظ الفرق بين طريقة المعالجة

    لذلك يتم تنفيذ ال multi threading بشكل مختلف ولكن قاعدة البيانات التي تفرق في السرعة

    قم بقراءة الإجابات على السؤال التالي للفهم أكثر

     

  17. هل تقصد كورس  اطار العمل دجانغو لتطوير تطبيقات الويب في أكاديمية حسوب بالتحديد ؟

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

    تطوير تطبيقات الويب بواسطة

    • php
    • ruby

    أما إذا كنت تقصد كورس تطوير تطبيقات الويب بواسطة  اطار العمل دجانغو عموماً ليس في الأكاديمية بالتحديد فبالطبع يوجد الكثير من الكورسات سواء المجانية أو المدفوعة

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

  18. توجد العديد من المكتبات سواء المختصة بال react أو بال javascript عموماً ولكن المكتبات الأفضل بالنسبة ل react يمكنك الحث عنها وستجد العديد من المكتبات مثل

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

  19. بالإضافة لما شرحه بلال فإنه يمكنك إرسال ال mail بواسطة الدالة mail  ولكن في بعض الأحيان لا تكون هذه الدالة كافية أو لا تلائم إحتياجاتك مثل الأمان والتشفير أو المرفقات لذلك تحتاج لاستخدام مكتبة لتنفيذ المطلوب مثل PHPMailer

    لتثبيت المكتبة بواسطة composer

    composer require phpmailer/phpmailer

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

    <?php
    
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\SMTP;
    use PHPMailer\PHPMailer\Exception;
    
    require 'vendor/autoload.php';
    
    $mail = new PHPMailer(true);
    
    try {
        //إعدادات الخادم
        $mail->SMTPDebug = SMTP::DEBUG_SERVER;                     
        $mail->isSMTP();                                            //استخدام SMTP
        $mail->Host       = 'smtp.example.com';                     
        $mail->SMTPAuth   = true;                                   
        $mail->Username   = 'user@example.com';                     // username
        $mail->Password   = 'secret';                               // password
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;            
        $mail->Port       = 465;     
      
        //Recipients
        $mail->setFrom('from@example.com', 'Mailer');
        $mail->addAddress('joe@example.net', 'Joe User');     //Add a recipient
        $mail->addAddress('ellen@example.com');               //Name is optional
        $mail->addReplyTo('info@example.com', 'Information');
        $mail->addCC('cc@example.com');
        $mail->addBCC('bcc@example.com');
    
      
        $mail->addAttachment('/var/tmp/file.tar.gz');         //المرفقات
        $mail->addAttachment('/tmp/image.jpg', 'new.jpg');    //Optional name
    
        //المحتوى
        $mail->isHTML(true);                                  //محتوى html
        $mail->Subject = 'Here is the subject';
        $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
        $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
    
        $mail->send();
        echo 'Message has been sent';
    } catch (Exception $e) {
        echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
    }

    يمكنك القراءة حول المكتبة أكثر من الرابط بالأعلى

  20. بالإضافة لما تم شرحه في التعليق السابق يمكنك استخدام مكتبة مثل APScheduler حيث تسهل عليك عمل مثل هذه المهام لاحظ المثال التالي

    from apscheduler.schedulers.background import BackgroundScheduler
    
    scheduler = BackgroundScheduler()
    job = None
    
    def tick():
        print('One tick!')\
    
    def start_job():
        global job
        job = scheduler.add_job(tick, 'interval', seconds=3600)
        try:
            scheduler.start()
        except:
            pass

     

    • أعجبني 1
  21. يعتبر الموضوع بسيط حيث يمكنك التحكم في ال scroll من خلال الخاصية scrollTop بواسطة javascript لاحظ الكود التالي من خلال jquery

    var div = $('#div1');
    div.scrollTop(div.prop("scrollHeight"));

    و إذا كنت تريد التحرك ب animation يمكنك استخدام الكود التالي

    $("#div1").animate({ scrollTop: $('#div1').prop("scrollHeight")}, 1000);

    الكود السابق يقوم بتحريك الصفحة لأسفل ال div المحدد يمكنك استخدام هذا الكود ضمن موقعك كما تريد 

    • أعجبني 2
  22. بتاريخ On 8/22/2021 at 01:19 قال Abdulali Elbr:

    1- وأنا حابب أدخل الإثنين بس كل وحدة طويلة ومنفصلة ، من أين أبدأ ، ما الأسهل علي ؟ رجاءً أفيدوني . 

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

    بتاريخ On 8/22/2021 at 01:19 قال Abdulali Elbr:

    2- وهل أخذ هذا المجالين مع بعض فيه ربح أكثر ؟ أو التركيز على مجال واحد فيه ربح أكثر ؟ 

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

    بتاريخ On 8/22/2021 at 01:19 قال Abdulali Elbr:

    3- وهل لو دخلت لدورة وأنهيتها سيسهل علي إنهاء الدورة الأخرى بوقت أقل ؟ 

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

    بتاريخ On 8/22/2021 at 01:19 قال Abdulali Elbr:

    4- سؤال مهم جداً : هل الشخص إلي مايحب التصميم يجب ألا يدخل في برمجة وتطوير التطبيقات؟ وأيضاً هل نستطيع نبرمج التطبيق وشراء قالب تصميم ؟ ولا لازم أصمم من نفسي؟

    بالنسبة لأنك لا تحب التصميم يمكنك التخصص في جزء ال backend فليس مطلوب منك الإهتمام بالواجهة كما أن جزء ال frontend غير مسئول عن التصميم إنما يقوم بتحويل التصميم (الذي يقوم المصمم بتجهيزه لك) إلى كود frontend

  23. بالإضافة للطرق المقترحة في التعليق السابق يمكنك أيضاً من خلال pip ( إذا كان لديك pip ) بواسطة الأمر التالي

    pip freeze

    سيظهر لك قائمة لإصدارات الحزم المستخدمة ولكن إذا أردت Django  فقط يمكنك استخدام الأمر 

    pip freeze | grep Django

     

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