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

Wael Aljamal

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

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

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

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

    218

إجابات الأسئلة

  1. إجابة Wael Aljamal سؤال في جعل اثنين Divs بنفس الطول html كانت الإجابة المقبولة   
    يمكنك تحديد ارتفاع الحاوية div بكتابة تننسيق للخاصية height:
    أو أضفها لوسم style لديك..
    /* css */ .yourClass{ height: 80px } ويمكن وضع حد أقل للطول مثل min-height هذا يسمح للحاوية بأن تكون أطول منه(حد أدنى)، و max-height وهو طول أعظمي لا يمكن أكبر منه(حد أعلى).
  2. إجابة Wael Aljamal سؤال في أريد رفع تطبيق ريأكت ناتيف اكسبو الى جوجل ستور ماذا أختار من هذين الاختيارين bundle ام apk كانت الإجابة المقبولة   
    الخيار الأول، التصدير ك APK يسمح برفع الملف بنفسه للمتجر و يمكنك تثبيته لهذا الملف على أي جهاز أندرويد مهما كانت معمارية المعالج/نظام التشغيل فيه ARM-v7 , ARM -v8 , X64.
    أما apk bundle يحوي هذا على على معماريات مختلفة أيضا، حيث يقوم google play ببناء 3 تطبيقات APK مختلفة منه كل منها لمعمارية محددة، وهذا يسمح بجعل التطبيق أصغر حجما، ولكنك لن تستطيع نقل التطبيق بين عدة هواتف أندريد مختلفة المعمارية وتثبيت التطبيق عليه، هنا بعد تحميل التطبيق من المتجر سيتم تحميل أحد المعماريات المناسبة للجهاز الذي حمل التطبيق..
    يمكنك الاستفادة من الإجابة هنا، هي خاصة ب Flutter ولكن نفس الفكرة.
    حاول بناء الملفين و قم بتجربتهم و تعلم من خلال التجربة والأخطاء فهي أفضل طريقة.
    ---------
    APK مناسب للتجريب الشخصي و إرساله للأصدقاء app-bundle مناسب للرفع على المتجر
  3. إجابة Wael Aljamal سؤال في برنامج ++c يكون مخرجاته كالتالي 1و 23 و 345 و 4567 كانت الإجابة المقبولة   
    لنحاول تبسيط المشكلة، نلاحظ أن لكل سطر بداية و نهاية أي مثل مجال start - end حيث أن بداية كل مجال تزيد ب1 عن سابقه والنهائية تزيد ب2، يمكن عمل عدادين بشكل متزايد ضمن حلقة و كل مرة نطبع المجال بيتنهما..
    // تهئية int start = 1; int finish = 1; // شرط التوقف اختياري while (start <= 4) { // طباعة المجال for (int i=start; i<= finish; i++) { cout << i; } // سطر جديد cout << endl; // زيادة العدادت start += 1; finish += 2; }  
  4. إجابة Wael Aljamal سؤال في شيفرة بايثون لا تتصل مع MySQL ويظهر الخطأ .connector.errors.InterfaceError: 2003: Can't connect to MySQL server كانت الإجابة المقبولة   
    أرجو التأكد من تشغيل خادم MySQL حيث كما هو واضح من الخطأ، يتعذر الاتصال بالمخدم.
     
  5. إجابة Wael Aljamal سؤال في مشكلة عند اعداد NetBeans IDE والخطأ Could not find or load main class Test كانت الإجابة المقبولة   
    لاحظت الصورة الأولى أنه عمل بشكل صحيح، 
     
     
  6. إجابة Wael Aljamal سؤال في إظهار نسبة التحميل عند رفع الملفات باستخدام multer في node.js كانت الإجابة المقبولة   
    يمكن استخدام الحزمة progress-stream وتتطلب تعديل طفيف بالشيفرة لتصبح كاالتالي:
    var p = progress() var upload = multer().single('file') req.pipe(p) p.headers = req.headers p.on('progress', _) upload(p, res, _) حيث يتم ربط progress مع مع الملف المراد رفعه.
    _________
    إن كان العرض مطلوب لدى المستخدم، يمكن عمل متتبع ضمن Front End:
    // تجهيز البيانات و الملف للإرسال var formData = new FormData(); var file = document.getElementById('myFile').files[0]; formData.append('myFile', file); var xhr = new XMLHttpRequest(); // تجهيز رابط رفع الملف xhr.open('post', '/urluploadhere', true); xhr.upload.onprogress = function(e) { if (e.lengthComputable) { // تحريك المؤشر كلما تم الإنتهاء من جزء من الملف بطول ذلك الجزء var percentage = (e.loaded / e.total) * 100; console.log(percentage + "%"); } }; // معالجة خطأ xhr.onerror = function(e) { console.log('Error'); console.log(e); }; // ربط التحميل مع الدالة xhr.onload = function() { console.log(this.statusText); }; // الإرسال xhr.send(formData);  
  7. إجابة Wael Aljamal سؤال في ما الفرق بين res.send و res.end في node.js؟ كانت الإجابة المقبولة   
    res.send تستخدم لإرسال الرد للمستخدم /العميل /المتصفح على شكل HTTP  res.end تستخدم لإنهاء الإتصال مع إرسال بيانات للمرة الأخيرة )إرسال البيانات اختياري) // الرد بالبيانات res.send([body]) res.end(); res.status(404).end(); send تحدد content type حسب البيانات الممررة مثل html/json حيث يتم التعرف على نمط النص الممرر مكان body في المثال
    end ممكن أن ترسل على شكل نص فقط ولكن تستعمل فقط لإنهاء الطلبية.
  8. إجابة Wael Aljamal سؤال في إنشاء كائن ordered set في بايثون كانت الإجابة المقبولة   
    يوجد مكتبة تدعى  ordered-set يمكن تثبيتها:
    pip install ordered-set ثم استخدامها بشكل طبيعي ..
    مثال من التوثيق:
    #تضمين المكتبة from ordered_set import OrderedSet # بناء غرض letters = OrderedSet('abracadabra') # عرض العناصر letters OrderedSet(['a', 'b', 'r', 'c', 'd']) # فحص وجود عنصر >>> 'r' in letters True التوثيق: pypi/ordered-set
    حلول أخرى: setlist - sortedcontainers
  9. إجابة Wael Aljamal سؤال في ماهي الطريقة الصحيحة لتحديث node.js من خلال nvm كانت الإجابة المقبولة   
    يمكن استعمال الأوامر البسيط التالية:
    nvm update --lts node nvm update node nvm update npm لا أعتقد أنك بحاجة للاختفاظ بالكاش فهو يخرب بسرعة و حتى بعمل تعديل لمكتبات نفس المشروع، مابالك بتغيير إصدار node.
    nvm install node --reinstall-packages-from=node  
  10. إجابة Wael Aljamal سؤال في حذف وتحديث node.js في نظام ويندوز كانت الإجابة المقبولة   
    عندما نفتح CMD يتم تحميل بيئة العمل ومتغيرات بيئة النظام في تلك اللحظة system environment ويتم تثبيت الإصدارات للبرامج، فإذا قمت بأي تعديل وكان CMD قيد التشغيل سيتم عرض البيانات القديمة. أي عليك إغلاق كافة نوافذ cmd قبل تجريب التعديلات.
    بالنسبة لإدارة إصدارات node يوجد برمجية NVM = node version manager يمكنك تثبيتها لمختلف أنظمة التشغيل ومنها windows وتسمح لك بتثبيت عدة إصدارات لـ node والتنقل بينهم.
    يمكنك تحميل البرمجية من هذا الرباط: nvm/releases.
    واتباع التوثيق من هنا: nvm-windows
  11. إجابة Wael Aljamal سؤال في ظهور الخطأ ENOSPC في node.js كانت الإجابة المقبولة   
    الخطأ ENOSPC يظهر عندما لا تتوفر مساحة على القرص.
    حاول التنفيذعن طريق هذا الأمر:
    echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p ثم:
    // في حال Arch Linux أضف السطر التالي to /etc/sysctl.d/99-sysctl.conf: fs.inotify.max_user_watches=524288 // التنفيذ sysctl --system حاول حذف الملفات المؤقتة مثل temp كما يمكن حذف كاش npm:
    npm cache clear  
  12. إجابة Wael Aljamal سؤال في الإشارة إلى مستند آخر referencing في mongodb كانت الإجابة المقبولة   
    يمكن الإشارة للمؤلف بتعريف الحقل writtenBy أن يكون له مرجعية بهذه الطريقة populate:
    var bookSchema = new Schema({ title: String, writtenBy: {type: mongoose.Schema.Types.ObjectId, ref: 'Author'}, }); طريقة أخرى بإدراج authorSchema مباشرة في الحقل (نفس المستند) المطلوب باتباع مفهوم  Subdocuments:
    var bookSchema = new Schema({ title: String, writtenBy: authorSchema , });  
  13. إجابة Wael Aljamal سؤال في ظهور الخطأ ObjectId is not JSON serializable في mongo ضمن python كانت الإجابة المقبولة   
    المشكلة هنا تكمن في أن نمط البيانات ObjectId المعرف في mongo غير معرفه عليه عملية التسلسل serialization لذلك عليك تعريف طريقة التحويل الخاصة بك واستخدامها:
    from bson import ObjectId import json class JSONEncoder(json.JSONEncoder): def default(self, o): if isinstance(o, ObjectId): return str(o) return json.JSONEncoder.default(self, o) res = json.dumps(DBResultMessage, cls=JSONEncoder) حيث أن هذه الدالة ستتعامل بشكل خاص مع النمط ObjectId وتحوله لسلسلة نصية قبل ترميزه على هيئة JSON
  14. إجابة Wael Aljamal سؤال في أفضل خوارزمية بحث للـ Worst case كانت الإجابة المقبولة   
    إن هذه المسألة تصنف مع مسائل Egg Dropping Puzzle | DP (مسألة إسقاط البيضة) حيث يكون لديك عدد من البيوض (عدد محاولات السقوط) و عدد الطوابق التي تختبر منها أعلى طابق يمكن للبيضة تحمل هذا السقوط.
    أي غن حل المسألة هذه ليست بالبحث الثاني، بل البرمجة الديناميكية. أرجو تعلم هذه التقنية وإعادة محاولة حل المسألة.
    شرح مبسط للمشكلة:
    # k بيضة # N طابق # إرجاع أفضل نتيجة في هذه الحالة def dp(K,N): res = 10000 for i in range(1,N+1): res = min(res,رمي البيض على الطابق الأول هذه المرة) return res ولكل رمي، إما أن تنكسر البيضة أو تبقى سليمة:
    res = min(res,max(dp(K-1,i-1),# كسر عدد البيض -1 dp(K,N-i)# لم ينكسر ) + 1 )  
    في هذه الحالة يتم حساب جميع الإحتمالات اللممكنة لكل طابق، ثم يكون الجواب بالقيمة الأقل لعدد المحاولات.
  15. إجابة Wael Aljamal سؤال في تمرير المتغيرات من محرر الأوامر إلى node.js كانت الإجابة المقبولة   
    عند تشغيل مخدم node كما هو الحال لبقية البرامج يتم تمرير البيانات للعملية process المسؤولة عن تشغيل البرنامج.
    يتم تخزين البيانات في مصفوفة ضمن:
    process.argv حيث عند كتابة الأمر البيانات الممرة تكون على شكل مصفوفة:
    $ node argv.js one two three four five =>>> [ 'node', '/home/avian/argvdemo/argv.js', 'one', 'two', 'three', 'four', 'five' ] للحفاظ على المتغيرات فقط يمكن تنفيذ slice:
    var myArgs = process.argv.slice(2); console.log('myArgs: ', myArgs); ==>> myArgs: [ 'one', 'two', 'three', 'four', 'five' ] بعدها يمكن الوصول للوسيط الأول ب 
    myArgs[0] myArgs[1] // الثاني  
  16. إجابة Wael Aljamal سؤال في كيف نصمم قاموس بلغة ++C بخوارزمية بادئة كانت الإجابة المقبولة   
    يوجد خوارزمية باستخدام شجرة Trie وهي شجرة متعددة الأولاد و لكل مستوى لها سلف مطابق أي كل عقدة مشتركة بين سلسلتين نصيتين تمثل حرف مشترك بينهما مثلا:
    aaa aab السلسلتين السابقتين يتم تخزينهم في 4 عقد وهي الجذر a ثم أول ولد a وله ولدين a - b إذا شجرة من 3 مستويات و4 عقد.
    يمكن تعلمها من موسوعة حسوب: Algorithms/tries - شجرة البادئات
    وهي أفضل تمثيل للقاموس.
    root / \ \ t a b | | | h n y | | \ | e s y e / | | i r w | | | r e e | r ويمكن البحث عن  Pattern Searching using a Trie of all Suffixes

  17. إجابة Wael Aljamal سؤال في كيف أستطيع إيجاد المستندات التي تحوي قيم مكررة (duplicate) في mongodb كانت الإجابة المقبولة   
    يمكن ذلك من خلال تطبيق aggregate:
    db.collection.aggregate([ {"$group" : { "_id": "$username", "count": { "$sum": 1 } } }, {"$match": {"_id" :{ "$ne" : null } , "count" : {"$gt": 1} } }, {"$project": {"username" : "$_id", "_id" : 0} } ]); سيتم من خلال الاستدعاء السابق جلب جميع المستندات التي تعداد تجميع الخاصية username لها أكبر من 1
  18. إجابة Wael Aljamal سؤال في ظهور خطأ Unable to locate package mongodb-org عند تحميل mongodb، نظام التشغيل ubuntu كانت الإجابة المقبولة   
    حل ممكن للمشكلة هو التثبيت بدون كلمة org أي: (يعمل على 32-ubuntu)
    sudo apt-get install -y mongodb والمشكلة الممكنة لك هو تجريب تنزيل الإصدار 3 على نظام 32 بت وهو غيرمتاح له، حاول تنزيل الإصدار 2.
  19. إجابة Wael Aljamal سؤال في ظهور تحذير deprecated عند تهيئة mongodb على نظام ماك Mac OS كانت الإجابة المقبولة   
    تأكد من إنشاء مجلد قاعة البيانات ل mongo:
    mkdir -p /data/db ثم إعطاء صلاحية:
    sudo chown -R `id -un` /data/db ثم أعد التجريب.
    ربما عليك تشغيل الخدمة باستخدام:
    brew services start mongodb ثم للدخول ل mongo shell:
    mongo وطريقة أخرى:
    mongod --dbpath ~/data/db  
  20. إجابة Wael Aljamal سؤال في تقسيم نص لعدد معين من الحروف في بايثون كانت الإجابة المقبولة   
    كما يمكن استخدام التعابير المنتظمة regular expression :
    import re num_str = '123456' chunks = re.findall('\d{2}',num_str) # بحث عن أي سلسلة جزئية من أرقام طول رقمين print(chunks) حيث d تعبر عن digit أي رقم 0-9
  21. إجابة Wael Aljamal سؤال في تحميل الملفات الضخمة من الإنترنت عبر بايثون ورسم مؤشر تتبع تقدم التحميل كانت الإجابة المقبولة   
    يمكن استخدام المكتبة request وعمل قناة اتصال منها، وتحديد أجزاء صغير من الملف chunks ومن ثم تحميلها وتجميعها في ملف ثم كتابته على القرص المحلي:
    حيث أن هذه الطريقة المستخدمة لتحميل الملفات الكبيرة عن طريق تقسيمها..
    def download_file(url): # جلب اسم الملف من الرابط local_filename = url.split('/')[-1] # تفعيل عمل قناة الاتصال stream=True with requests.get(url, stream=True) as r: r.raise_for_status() # رفع استثناء إن حصل أي مشكلة في الاتصال # تجهيز ملف محلي لتخزين البيانات with open(local_filename, 'wb') as f: # تحديد حجم جزء الملف for chunk in r.iter_content(chunk_size=8192): if chunk: # تحقق من تحميل الجزء # كابة الجزء المحمل من خلال قناة الاتصال f.write(chunk) return local_filename  
    ولعمل مسار تقدم التحميل يمكن استخدام مكتبة "تقدم" tqdm وهي الأصل في التسمية لعمل progress bar:
    from tqdm import * import requests url = "https://path/to/file.mp4" name = "video" with requests.get(url, stream=True) as r: r.raise_for_status() # رفع استثناء إن حصل أي مشكلة في الاتصال with open(name, 'wb') as f: pbar = tqdm(total=int(r.headers['Content-Length']))#تهيئة عمودالتحميل بطول البيانات = حجم الملف for chunk in r.iter_content(chunk_size=8192): if chunk: # تحقق من تحميل الجزء f.write(chunk) pbar.update(len(chunk)) # تحديث التقدم في عمود التحميل كلما تم تحميل جزء من الملف، يتم حساب طول هذه الجزء من طول الملف الأصلي وتحرك المؤشر في عمود التقدم ليملأ فراغ بنفس الحجم.
  22. إجابة Wael Aljamal سؤال في مشكلة في تضمين الملفات php بطريقة المسار النسبي بعد اختلاف مكان الاستدعاء كانت الإجابة المقبولة   
    القصد هو عمل ملف منفصل، يقوم هو باستيراد الملفات:
    <?php $path1 = "path\to\file1.php"; $path2 = "path\to\file2.php"; $path3 = "path\to\file2.png"; public function my_include($fileName) { if ($fileName == "file1") { include($path1); } elif ($fileName == "file2") { include($path2); } elif ($fileName == "file3") { return $path3; } } ?> حاول هذه الطريقة.
    توضيح:
    ضع الملف المساعد في المسار الجذر للمشروع و تكون المسارات نسبية لهذا الملف.
    ثم قم بتضمين الملف في بداية كل صفحة لديك، و استدعي الدالة في المكان المناسب.
    يمكنك جعل الدالة تعيد المسار فقط أو تقوم بتضمين الملف اختر الطريقة المناسبة لك حسب نوع الملف.
    لاحظ التضمين الثالث.
    '<a href=' <?= my_include("file3")?> '>'  
  23. إجابة Wael Aljamal سؤال في استخدام أكثر من مدخل في مكتبة multiprocessing في بايثون كانت الإجابة المقبولة   
    يمكن تمرير أكثر من وسيط للدالة map ونضع بينهم فاصلة كالتالي:
    pool.map(test, x, y) في حالات أخرى، يمكن تمرير قائمة تحوي على tuple وبالمرور على القائمة يتم استدعاء دالة الجمع لكل عنصر tuple منها كالتالي:
    def multi_run_wrapper(args): return add(*args) # تمرير عناصر الوسيط كمتغيرات منفصلة def add(x,y): return x+y if __name__ == "__main__": from multiprocessing import Pool pool = Pool(4) # استدعاء دالة تقوم باستخلاص العناصر من القائمة results = pool.map(multi_run_wrapper,[(1,2),(2,3),(3,4)]) print results output:: [3, 5, 7]  
  24. إجابة Wael Aljamal سؤال في كيف تحدد ترميز النص في بايثون؟ كانت الإجابة المقبولة   
    يمكن استخدام المكتبة: chardet التي تسمح لنا بمعرفة ماهو نمط الترميز الذي كتب فيه ملف ما.
    التثبيت:
    pip install chardet الاستخدام:
    # تضمين المكتبة import chardet # قراءة البيانات الخام بدون تحديد ترميز rawdata = open(file, "r").read() # معرفة الترميز من خلال استخدام المكتبة و الدالة detect result = chardet.detect(rawdata) # تخزين التركميز في متغير لاستخدامه لاحقا charenc = result['encoding'] ثم نقوم بتمرير نوع الترميز كوسيط لدالة قراءة الملف open:
    myfile = open('results.txt', 'r', encoding=charenc) ^^^^^^^^^^^^^^^^ بالعلم تدعم هذه المكتيبة العديد من أنواع الترميز:
    ASCII, UTF-8, UTF-16 (2 variants), UTF-32 (4 variants) Big5, GB2312, EUC-TW, HZ-GB-2312, ISO-2022-CN (Traditional and Simplified Chinese) EUC-JP, SHIFT_JIS, CP932, ISO-2022-JP (Japanese) EUC-KR, ISO-2022-KR (Korean) KOI8-R, MacCyrillic, IBM855, IBM866, ISO-8859-5, windows-1251 (Cyrillic) ISO-8859-2, windows-1250 (Hungarian) ISO-8859-5, windows-1251 (Bulgarian) windows-1252 (English) ISO-8859-7, windows-1253 (Greek) ISO-8859-8, windows-1255 (Visual and Logical Hebrew) TIS-620 (Thai)  
  25. إجابة Wael Aljamal سؤال في تغيير ال port في nextjs كانت الإجابة المقبولة   
    يمكن تحديد المنفذ port الذي يعمل بع التطبيق بطريقتين:
    في ملف package.json في قسم Scripts نحدد المنفذ كالتالي: "dev": "next dev -p 3005"  
    ويمكن عن طريق الأمر مباشرة: npm run dev -- -p 3005  
    الشكل العام لقسم Scripts كالتالي:
    "scripts": { "dev": "next dev -p 8080", // for dev خاص بالتطوير "start": "next start -p 8080" // for prod خاص بالإنتاج },  
    إن كنت تستخدم yarn تصبح كالتالي:
    yarn dev -p PORT_YOU_LIKE  
×
×
  • أضف...