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

عبدالله عبدالرحمن11

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

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

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

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

  1. إجابة عبدالله عبدالرحمن11 سؤال في ظهور التحذير transparent_hugepage/defrag في mongodb نظام linux كانت الإجابة المقبولة   
    في توثيق MongoDB الرسمي يوجد العديد من الحلول لهذه المشكلة. يمكنك أيضًا تجربة هذا الحل:
    ملاحظة: جرب توجيهات التوثيق الرسمي إذا كان إصدار MongoDB أكبر من 3.0
    افتح ملف /etc/init.d/mongod (إذا لم يكن هناك سيكون هنا /etc/init.d/mongod أو  /etc/init/mongod.conf أضف الأسطر أدناه مباشرة بعد chown $DAEMONUSER /var/run/mongodb.pid وقبل
    end script أعد تشغيل mongod
    service mongod restart فيما يلي الأسطر التي يجب إضافتها إلى /etc/init.d/mongod:
    if test -f /sys/kernel/mm/transparent_hugepage/enabled; then echo never > /sys/kernel/mm/transparent_hugepage/enabled fi if test -f /sys/kernel/mm/transparent_hugepage/defrag; then echo never > /sys/kernel/mm/transparent_hugepage/defrag fi  
  2. إجابة عبدالله عبدالرحمن11 سؤال في حذف جميع قواعد البيانات في mongodb كانت الإجابة المقبولة   
    يمكنك إنشاء حلقة جافا سكريبت تقوم بالمهمة ثم تنفيذها في mongo console
    var dbs = db.getMongo().getDBNames() for(var i in dbs){ db = db.getMongo().getDB( dbs[i] ); print( "dropping db " + db.getName() ); db.dropDatabase(); } احفظه في dropall.js ثم نفّذه:
    mongo dropall.js  
  3. إجابة عبدالله عبدالرحمن11 سؤال في حفظ القيم الغير معرّفة مسبقاً ضمن schema في mongoose كانت الإجابة المقبولة   
    السبب هو أن الخيار strict يكون true بشكل افتراضي ، وبذلك سيتم منع إضافة حقول لم تكن موجودة في schema
    ولحل هذه المشكلة هي تغيير قيمة strict من true الى false كالآتي
    var thingSchema = new Schema({..}, { strict: false }); أو يمكنك تعديل strict من خلال الإستعلام كالآتي
    Model.findOneAndUpdate( query, // فلتر update, // البيانات المراد تحديثها { //الخيارا returnNewDocument: true, new: true, strict: false } )  
  4. إجابة عبدالله عبدالرحمن11 سؤال في كيف أقوم بتغيير نوع البيانات في حقل ما ضمن mongodb كانت الإجابة المقبولة   
    يمكنك إستخدام الآتي
    db.MYCOLLECTION.find({ phone: { $type: 2 } }).forEach(function(obj){ try {// تحويل من سلسلة نصية الى رقم obj.phone = parseInt(obj.phone); // حفظ القيم الجديدة db.MYCOLLECTION.save(obj); } catch(e) { // تنفيذ كود عند حدوث خطأ } }); حيث
    phone: { $type: 2 } يُخبر mongo لتحميل كل phone التي قيمها من نوع string سلسلة نصية
  5. إجابة عبدالله عبدالرحمن11 سؤال في كيف يتم تخزين الصور والفيديو ضمن قاعدة بيانات mongodb؟ كانت الإجابة المقبولة   
    عندما نقوم بالتخزين فهناك نوعين للتخزين وهما تخزين البيانات ،وتخزين الملفات وطرق تخزين كلاً منهما تختلف عن الآخرى ويفضل عدم استخدام الملفات في قواعد البيانات لأن هذا ليس عملي 
    يمكنك تخزين ملفات أو صور في mongodb ويسمى بمستند BSON لكن الحد الأقصى لحجم الملف هو 16 ميجا أي إذا كان حجم الملف أكبر فيجب عليك تقسيمه لأجزاء بحجم 16 ميجا لكي تستطيع حفظه في mongodb ويمكنك حفظها كنوع BinData أي بيانات ثنائية ، ويمكنك إستخدام GridFs لتخزين الملفات الذي حجمها يتجاوز 16 ميجا
    String newFileName = "my-image"; // إنشاء ملف صورة File imageFile = new File("/users/victor/images/image.png"); /* إنشاء GridFS بإسم صورة */ GridFS gfsPhoto = new GridFS(db, "photo"); GridFSInputFile gfsFile = gfsPhoto.createFile(imageFile); gfsFile.setFilename(newFileName); // حفظ الملف gfsFile.save();  
  6. إجابة عبدالله عبدالرحمن11 سؤال في مشكلة عدم تطابق التاريخ أثناء الاستعلام في mongodb كانت الإجابة المقبولة   
    على الرغم من $date جزء من MongoDB Extended JSON وهذا ما تحصل عليه بشكل افتراضي مع mongoexport لا أعتقد أنه يمكنك حقًا استخدامه كجزء من الاستعلام. مثال على ذلك
    db.foo.find({dt: {"$date": "2012-01-01T15:00:00.000Z"}}) ستحصل على هذا الخطأ
    error: { "$err" : "invalid operator: $date", "code" : 10068 } ولكن يمكنك الإستعلام بهذه الطريقة
    db.mycollection.find({ "dt" : {"$gte": new Date("2013-10-01T00:00:00.000Z")} }) أو بهذه
    db.mycollection.find({ "dt" : {"$gte": ISODate("2013-10-01T00:00:00.000Z")} })  
  7. إجابة عبدالله عبدالرحمن11 سؤال في مشكلة أثناء مقارنة حقل الرقم الفريد id_ في mongodb كانت الإجابة المقبولة   
    السبب عند مقارنة الرقم الفريد id_ مع id_ آخر يقوم بإظهار false دائماً حتى إذا كانا متشابهين ، لأن المقارنة في mongoose تتم بين عنوان أو مرجع الكائن Object Reference ولا يتم مقارنة سلسلة نص id_ ، ولكي يتم مقارنة سلسلة نص id_ فيمكنك إستخدام دالة ()toString لكي يتم مقارنة سلسلة نص id_ وليس مقارنة عناوين الكائن Object reference
    أويمكنك إستخدام دالة ()equals. لمقارنة سلاسل نصوص id_ كما هو موضح في الكود الأسفل
    results.userId.equals(AnotherMongoDocument._id) الآن لديك ثلاثة طرق لعمل مقارنة صحيحة
    //بإستخدام دالة toString() AnotherMongoDocument._id.toString() // بإستخدام دالة JSON.stringify() JSON.stringify(AnotherMongoDocument._id) // بإستخدام دالة equals() results.userId.equals(AnotherMongoDocument._id)  
  8. إجابة عبدالله عبدالرحمن11 سؤال في التحكّم بمتغيرات البيئة بين بيئة التطوير وبيئة النشر في node.js كانت الإجابة المقبولة   
    أولاً يجب عليك إضافة متغير بيئة environment variable بإسم Node_ENV وتعيين قيمته بناءً على البيئة الذي يتم تشغيله منها
    فإذا كان في بيئة التطوير فقم بتعيينه الى development
    اما إذا كان في بيئة النشر فقم بتعيينه الى production
    أو يمكنك إضافة هذا السكريبت لكي يتم تشغيل الخادم وإضافة متغير البيئة
    { ... "scripts": { "start": "NODE_ENV=production node ./app" } ... } ومن ثم في الكود يمكنك اختيار متغيرات البيئة بناءً على البيئة الذي يتم تشغيله منها كالآتي
    if (process.env.NODE_ENV ==='development'){ // تعيين المتغيرات الخاصة ببئة التطوير }else if (process.env.NODE_ENV ==='production'){ // تعيين المتغيرات الخاصة ببئة النشر }  
  9. إجابة عبدالله عبدالرحمن11 سؤال في تثبيت mongodb على نظام ماك Mac OS Homebrew كانت الإجابة المقبولة   
    الحل الأول : إذا قمت بتثبيت إصدار سابق من الصيغة، قد تواجه مشكلة ChecksumMisMatchError ولإصلاحه
    قم بحذف بأرشيف tgz. الذي تم تنزيله كالآتي
    brew untap mongodb/brew && brew tap mongodb/brew إعادة إتصال الصيغة
    brew install mongodb-community@4.4 الحل الثاني : إذا لم تقم بتثبيت أي إصدار سابق من الصيغة
    قم بتثبيت أدوات موجه أوامر Xcode و Homebrew من https://brew.sh/#install
    xcode-select --install عمل tab ل Mongodb ب Homebrew tab
    brew tap mongodb/brew تحقق من متطلبات التثبيت في موجه أوامر macOS
    brew tap | grep mongodb قم بتثبيت MongoDB
    brew install mongodb-community@4.4 وأخيراً قم بتشغيل MongoDB
    brew services start mongodb-community@4.4  
  10. إجابة عبدالله عبدالرحمن11 سؤال في خطأ RuntimeError: fails to pass a sanity check في بايثون كانت الإجابة المقبولة   
    السبب أن هناك مشكلة وعند إستخدام NumPy إصدار 1.19.4 ستظهر لك هذه المشكلة
    والحل كان عبر إزالة تثبيت هذه النسخة وتثبيت النسخة 1.19.3
    pip install numpy==1.19.3 ولكن من الخامس يناير 2021 نسخة NumPy إصدار 1.19.5 قد تم نشرها ويبدو أنها قد حلت هذه المشكلة ويمكنك تثبيت آخر نسخة
  11. إجابة عبدالله عبدالرحمن11 سؤال في تحويل DataFrame إلى مصفوفة numpy كانت الإجابة المقبولة   
    من DataFrame الى مصفوفة NumPy
    في المثال الآتي نقوم بتحويل DataFrame الى مصفوفة NumPy
    import pandas as pd #تهيئة #DataFrame df = pd.DataFrame( [[21, 72, 67], [23, 78, 69], [32, 74, 56], [52, 54, 76]], columns=['a', 'b', 'c']) print('DataFrame\n----------\n', df) #التحويل arr = df.to_numpy() print('\nNumpy Array\n----------\n', arr) وللتحويل من DataFrame الى مصفوفة NumPy عندما يكون لدى DataFrame أنواع بيانات مختلفة
    import pandas as pd import numpy as np #تهيئة # dataframe df = pd.DataFrame( [[21, 72, 67.1], [23, 78, 69.5], [32, 74, 56.6], [52, 54, 76.2]], columns=['a', 'b', 'c']) print('DataFrame\n----------\n', df) print('\nDataFrame datatypes :\n', df.dtypes) #التحويل arr = df.to_numpy() print('\nNumpy Array\n----------\n', arr) print('\nNumpy Array Datatype :', arr.dtype)  
  12. إجابة عبدالله عبدالرحمن11 سؤال في إستدعاء كود C/C++ من خلال بايثون كانت الإجابة المقبولة   
    من أجل الإستفادة من قوة اللغتين ، المطورين يستخدمون مايسمى بروابط بايثون python bindings والذي يتيح لك إستدعاء مكتبات ++C/C من بايثون
    ولكن لماذا هناك الحاجة للقيام بذلك؟
    كما نعلم لغة C لديها سرعة تنفيذ أسرع ، وللتغلب على قفل المسفر العالمي Global Interpreter Lock في بايثون ، فإن روابط بايثون مفيدة يوجد لدينا مكتبات كبيرة ومستقرة وتم إختبارها في ++C/C ، ويمكننا الإستفادة منها لإجراء اختبار واسع للأنظمة بإستخدام أدوات اختبار python لنرى كود C الذي نريد إستدعائه في بايثون
    #include <iostream> class Geek{ public: void myFunction(){ std::cout << "Hello World!!!" << std::endl; } }; int main() { // إنشاء كائن Geek t; // إستدعاء الدالة t.myFunction(); return 0; } وايضا يجب منح تصريحات cpp declarations ك "extern "C لان ctypes يستطيع التفاعل مع دوال C فقط
    extern "C" { Geek* Geek_new(){ return new Geek(); } void Geek_myFunction(Geek* geek){ geek -> myFunction(); } } الآن لنقم بترجمة compile الكود الى المكتبة المشتركة shared library
    g++ -c -fPIC geek.cpp -o geek.o g++ -shared -Wl, -soname,libkgeek.so -o libgeek.so geek.o وآخيراً كتابة كود بايثون 
    # إستدعاء الوحدة from ctypes import cdll # تحميل المكتبة lib = cdll.LoadLibrary('./libgeek.so') # إنشاء كائن class Geek(object): # دالة البناء def __init__(self): # الصفة self.obj = lib.Geek_new() # تعريف الدالة def myFunction(self): lib.Geek_myFunction(self.obj) # إنشاء كائن f = Geek() # إستدعاء الدالة f.myFunction() والنتيجة كالآتي
    Hello World!!!  
  13. إجابة عبدالله عبدالرحمن11 سؤال في window غير معرفة في next js كانت الإجابة المقبولة   
    يجب عليك تحريك الكود من ()componentWillMount الى ()componentDidMount كالآتي
    componentDidMount() { console.log('window.innerHeight', window.innerHeight); } في Next.js ، الدالة ()componentDidMount يتم تنفيذها فقط عند العميل client حيث window و APIs المتصفح تكون متاحة.
    على نفس المنوال دالة ()componentWillMount سيتم إزالته من React إصدار 17 ، لذلك من المحتمل أن يكون غير آمن للإستخدام في المستقبل القريب جداً
  14. إجابة عبدالله عبدالرحمن11 سؤال في نشر تطبيق expo على app store كانت الإجابة المقبولة   
    إذا كنت تطور بإستخدام Expo فلن تحتاج الى Xcode أو Android Studio ، كلما عليك فعله هو كتابة أكواد JavaScript بإستخدام أي محرر أكواد انت مرتاح بإستخدامه مثل Atom أو VSCode أو أي محرر آخر
    وبعد الانتهاء من تطوير التطبيق يمكنك بنائه لل iOS بإستخدام الأمر التالي
    expo build:ios ومن ثم ستحصل على رابط سيتيح لك تنزيل ملف ipa. بعدما يتنهي من بنائه على خادم expo
    والآن تقوم بفتح حاسوب Mac الخاص بك أو فتح حاسوب ماك من MacInCloud وتنزيل تطبيق ipa. من الرابط الذي حصلت عليه ومن ثم يجب عليك رفعه الى AppStore بإستخدام بإستخدام تطبيق Transporter
  15. إجابة عبدالله عبدالرحمن11 سؤال في كيفية متابعة التغيرات التي تحدث على ملف نصي باستخدام بايثون؟ كانت الإجابة المقبولة   
    يمكنك تثبيت pynotify وإستخدامها
    pip install pyinotify ويمكنك إستخدامها كالآتي
    import pyinotify,subprocess # الدالة الذي يتم إستدعائها عند تغير الملف def onChange(): print(changed) wm = pyinotify.WatchManager() wm.add_watch('log.txt', pyinotify.IN_MODIFY, onChange) notifier = pyinotify.Notifier(wm) notifier.loop()  
  16. إجابة عبدالله عبدالرحمن11 سؤال في كيف أحمي كود Python من أن يقرأه المستخدمون؟ كانت الإجابة المقبولة   
    أفضل حل لهذه المشكلة الأمنية هو تشفير كود بايثون والتي تهدف الى تخزين شفرة المصدر الأصلية الى شكل غير قابل للقراءة بالنسبة للبشر
    يمكنك إستخدام Cython وهو مترجم يأخذ وحدات py ويترجمها الى ملفات C عالية الأداء وهي تدعم بايثون 2 و 3 ولا توجد طريقة لعكس الكود المترجم الى المصدر ببايثون
    وهناك عدة طرق أخرى
    تعتيم الكود Obfuscate لتقليل قابلية قراءة الكود المصدري ترجم compile ملفات py الى ملف pyc ثنائي إستخدام Pyinstaller لتحويل الكود المصدري الى ملف ثنائي قابل للتنفيذ إستخادم PyArmor لتشفير الكود إستخدام نظام التشفير المتقدم AES لتشفير ملفات py و pyc الى ملفات pye تحويل ملفات py الى ملفات c وترجمتها الى ملف مكتبة ارتباط ديناميكي dynamic link library
  17. إجابة عبدالله عبدالرحمن11 سؤال في ssl الرجاء الرد ضروري لمن لديه خبره كانت الإجابة المقبولة   
    شهادة SSL تستخدم للخادم الخاص بك فقط وفي حالتك خادم Ubuntu لكي يكون الاتصال بين الخادم الخاص بك والعميل إتصال HTTPS أي يكون الاتصال مشفر والبيانات التي يتم تبدالها بين الخادم والعميل تكون مشفرة ولايمكن لأي مخترق فك تشفير البيانات ، لذلك الشهادة هي للخادم فقط
    اما اسم النطاق فلا تحتاج لذلك لان عمله الوحيد هو تحويل المستخدمين من العنوان السهل القراءة والحفظ وتحويله الى عنوان الخادم الرقمي الصعب القراءة والحفظ
    على سبيل المثال عندما تقوم بكتابة facebook.com سيتم تحويلك مباشرة الى عنوان الخادم الرئيسي 157.240.195.35
    فكما ترى اسم النطاق يقوم بالتحويل فقط
  18. إجابة عبدالله عبدالرحمن11 سؤال في react native expo camera not defined كانت الإجابة المقبولة   
    يبدو أنك لم تقم بثبيت حزمة react native expo camera أو لم تقم بإستدعائها بشكل صحيح
    بدايةً يجب عليك تثبيتها كالآتي
    expo install expo-camera وهذا مثال لكيفية إستدعاء الحزمة وإستخدامها
    import React, { useState, useEffect } from 'react'; import { StyleSheet, Text, View, TouchableOpacity } from 'react-native'; import { Camera } from 'expo-camera'; // إستدعاء الحزمة بشكل صحيح export default function App() { const [hasPermission, setHasPermission] = useState(null); const [type, setType] = useState(Camera.Constants.Type.back); useEffect(() => { (async () => { const { status } = await Camera.requestPermissionsAsync();// طلب الحصول على الإذن setHasPermission(status === 'granted');// تعيين المتغير "لديه الإذن" بصائب أو خاطئ بناء على الطلب السابق })(); }, []); if (hasPermission === null) { // إذا كان المتغير لديه الإذن يساوي لايوجد نقوم بإرجاع منظر return <View />; } if (hasPermission === false) { // إذا كان المتغير لديه الإذن خاطئ نقوم بإرجاع نص لايوجد لديه وصول return <Text>No access to camera</Text>; } return ( // إذا كان الإذن صائب سنقوم بإعادة هذا المنظر للوصول الى الكامير <View style={styles.container}> <Camera style={styles.camera} type={type}> <View style={styles.buttonContainer}> <TouchableOpacity style={styles.button} onPress={() => { setType( type === Camera.Constants.Type.back ? Camera.Constants.Type.front : Camera.Constants.Type.back ); }}> <Text style={styles.text}> Flip </Text> </TouchableOpacity> </View> </Camera> </View> ); }  
  19. إجابة عبدالله عبدالرحمن11 سؤال في خطا عند استعمال react-native-qrcode version 0.2.7 كانت الإجابة المقبولة   
    المشكلة هي أنك تقوم بإستخدام Webview وقد تم إزالته من React Native وأصبحت حزمة منفصلة ويجب عليك تثبيت هذه الحزمة المنفصلة كالآتي
    npm i react-native-webview ومن ثم إستدعاء الحزمة كالآتي
    import { WebView } from 'react-native-webview'; وإستخدامها كالآتي
    class MyWebComponent extends Component { render() { return <WebView source={{ uri: 'https://reactnative.dev/' }} />; } }  
  20. إجابة عبدالله عبدالرحمن11 سؤال في تخزين الصور في السيرفر المحلي أو في سيرفر خارجي كانت الإجابة المقبولة   
    هناك حلول عدة تختلف بحسب إحتياجتك وعدة عوامل أخرى أهمها حجم التطبيق أي حجم المستخدمين الخاص بالتطبيق
    فإذا كان التطبيق صغير فليس هناك مشكلة من تخزين البيانات في نفس السيرفر
    أما إذا كان هناك عدد كبير من المستخدمين وبذلك عدد كبير من الملفات فيمكن وضع التطبيق الموقع في سيرفر ووضع قاعدة البيانات في سيرفر آخر ووضع سيرفر ثالث خاص بالملفات ويمكنك في سيرفر الملفات إنشاء API بحيث يمكنك من سيرفر التطبيق أو من عند العميل طلب الملفات للأشخاص المرخّصين للوصول الى هذه الملفات
    أو يمكنك إستخدام API من خدمات تخزين الملفات مثل firestore وغيرها
  21. إجابة عبدالله عبدالرحمن11 سؤال في لماذا نستخدم الاقواس المجعدة في سويفت { } كانت الإجابة المقبولة   
    لأنها تقوم بحصر الكود في مجموعة تسمى بالكتلة Block بحيث يكون الكود الذي داخل الأقواس المجعدة ينتمي لما خلفه
    فعلى سبيل المثال هذا الكود
    for item in list { print(item) } فالكود الذي داخل الأقواس المجعدة 
    print(item) ينتمي الى ماقبلها أي
    for item in list مثال آخر في كتلة دالة function block
    func sayHello(){ print("Hello") } فالكود الذي داخل الأقواس
    print("Hello") ينتمي الى تعريف الدالة الذي قبله
    func sayHello()  
  22. إجابة عبدالله عبدالرحمن11 سؤال في قراءة الملفات الكبيرة عبر chunks في بايثون كانت الإجابة المقبولة   
    يمكنك إستخدام هذا الكود
    url="https://raw.githubusercontent.com/selva86/datasets/master/BostonHousing.csv" # رابط الملف response = requests.get(url, stream = True) text_file = open("data.txt","wb") # إنشاء الملف المحلي for chunk in response.iter_content(chunk_size=1024): text_file.write(chunk) #كتابة جزء في الملف حتى إكمال الملف text_file.close() # إغلاق الملف  
  23. إجابة عبدالله عبدالرحمن11 سؤال في كيفية إستخراج الكلمات فقط من النص في بايثون؟ كانت الإجابة المقبولة   
    يمكنك إستخدام عدة طرق للحصول على النتيجة المرغوبة ، يمكنك إستخدام حلقة لتقسيم الكلمات من النص والتأكد بإستخدام ()isalpha وإضافتها الى قائمة كالآتي
    s = """Bound methods have been "bound" (how descriptive) to an instance, what about that?!""" x = [] for i in s.split(): if i.isalpha(): x.append(i) print(x) أو هذا إستخدام دالة findall من حزمة re
    import re x = """Bound methods have been "bound" (how descriptive) to an instance, what about that?!""" print(re.findall('[a-z]+', x, flags=re.IGNORECASE)) أو هذا الكود
    import re s = """Bound methods have been "bound" (how descriptive) to an instance, what about that?!""" print(re.findall(r'(?<!\S)[A-Za-z]+(?!\S)', s))  
  24. إجابة عبدالله عبدالرحمن11 سؤال في كيفية إعادة استدعاء مكتبة في بايثون؟ كانت الإجابة المقبولة   
    في بايثون لا يمكنك إستدعاء حزمة أكثر من مرة من أجل أداء البرنامج ، لانه مهما كان عدد مرات إستدعاء أي حزمة فإنه في الخلفية سيتم إستدعائها مرة واحدة مثل
    import myScript if cond: import myScript # سيتم إستدعاء الحزمة مرة واحدة فقط لهذا يجب عليك إستدعاء الحزمة خارج الحلقة ، وفي داخل الحلقة يمكنك تشغيل الدالة المراد إستخدامها كالآتي
    import myScript for i in range(5): myScript.func() print('imported')  
     
  25. إجابة عبدالله عبدالرحمن11 سؤال في كيفية عمل break لحلقات متداخلة في بايثون؟ كانت الإجابة المقبولة   
    هناك العديد من الطرق لعمل ذلك مثل
    وضع شرط كعلم flag 
    flag = False for i in range(5): if flag:break for n in range(5): if i == 4 and n ==5: flag = true print(i, n) إرسال إستثناء
    try: for i in range(5): for n in range(5): if i == 5: raise StopIteration print(i, n) except StopIteration: pass تفحص نفس الحالة مرةً أخرى
    for i in range(5): for n in range(5): if n == 5: break print(i, n) if n == 5: break إستخدام صيغة for و else
    for i in range(5): for n in range(5): if n == 5: break print(i, n) else: continue break وضعها في دالة
    def check_sth(): for i in range(5): for n in range(5): if n == 5: return print(i, n) check_sth() # تشغيل عند الحاجة  
×
×
  • أضف...