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

Nuhla Almasri

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

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

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

كل منشورات العضو Nuhla Almasri

  1. يمكنك أستخدام subprocess الذي يتيح لك فتح تيرمنل و تمرير الأوامر اليها هناك طريقة قديمة و لكن تعتبر هذه المكتبة أفضل للأستخدام و هنا مثال يوضح كيفية الأستخدام #هنا نقوم بإدرجاج المكتبة import subprocess #هنا نقوم بـأجراء الأمر و ناحذ القيمة الراجعه list_files = subprocess.run(["ls", "-l"]) #نطبع القيمة الراجعه من تنفيذ الأمر print("The exit code was: %d" % list_files.returncode)
  2. نعم لا يوجد هناك switch بلغة البايثون و الطريقة الاستبدالها هو خلق دالة تحتوي على dic أسم الحالة هو مفتاح الحالة و قيمتها هي ما يراد عملة أو ارجاعه كالتالي : #هنا نقوم بتعريف الدالة def numbers_to_strings(argument): # هنا نعرف القاموس او الاوبجكت الذي حتوي جميع الحالات switcher = { 0: "zero", 1: "one", 2: "two", } #هنا نقوم بإرجاع القيمة حسب قيمة ال Parameter # أن لم توجد هذه القيمة فسوف نقوم بأرجاع قيمة nothing return switcher.get(argument, "nothing") if __name__ == "__main__": argument=0 print (numbers_to_strings(argument))
  3. كثرة الطباعة لا تؤثر لكن كثرة إستدعاء الدالة التي تجلب المعلومات تؤثر فأن جلب بيانات كبيرة الحجم من ال API يستهلك وقتا و قد يؤخر أو قد يدخل بحلقة مفرغة أن كان هناك تعديلات كثيرة على المعلومات التي يتم جلبها في كل مرة تخيل أنك في دائرة هناك من يقوم بتعديل البيانات و هناك من يقوم بتقفي اثر هذه المعلومات و جلبها في كل مره يتم تغييرها
  4. أنت تقوم بطباعة البيانات خارج ال useEffect أي أنه سيتم الطباعة بأي تحديث لاي شيئ , لكن إن كانت الطباعة داخل ال useEffect فلن يتم الطباعة إلا بحالة تغيرت قيمة الحالة booksData تسلسل الأحداث تكون كالتالي : onMount => يتم تغيير الحالة booksData الى الحالة الفارغة أو بلا قيمة الراجعه من الستيت للريدكس initial state هنا ستتغير قيمة الحالة فيتم عمل Render و هنا يقوم بالطباعة ثم يقوم بدخول الuseEffect بما أنه يعمل على تتبع هذه الحالة و يقوم بأستدعاء الدالة لل ال dispatch تقوم هذه الدالة بتغيير قيمة الحالة الى القيمة الجديدة fبالريدكس و تغيير ال props أيضا و هنا أيضا يقوم بالطباعة ثم يدخل ال useEffect مرة أخرى فيقوم بمنادلة الدالة مرة أخرى و يقووم بتغيير الحالة الى المعلومات الجديدة و هنا يقوم بالطباعة و لكن في حال أن كانت الحالتين متطابقتين فلن يقوم بدخول الuseEffect مرة أخرى أما بحالة أختلفت الحالتين بأي قيمة فسيقوم بدخول الuseEffect مرة أخرى لاحظ أنه هنا يقوم بالطباعة سواء أختلفت قيمة الحالة أو لا فإنه يقوم بالطباعة لانها ليست داخل ال useEffect و ذلك لأن إعطاء قيمة جديدة للحالة يقوم بعمل Render أي يرسمه مرة أخرى و الحالة هنا نقصد ب ال props لأن إستدعاء الريدكس يغير ال props مباشرة مما يؤدي الى عملية الRender و ليس الstate يمكنك القيام بالتالي حتى لا يتم أستدعاء دالة الdispatch بطريقة عشوائية export default function MainScreen() { const booksData = useSelector(state => state.booksData); const dispatch = useDispatch(); //- هنا نطلب أيتم تطبيق الدالة لل dispatch // فقط خلال onMount // بهذه الطريقة سيتم ‘ستدعاء الدالة مرة واحدة فقط عند تحميل المكون أول مرة // و عند الضغط على الزر فقط useEffect(() => { dispatch(getBooks()); console.log(booksData); }, []); return ( <View> <Text>MainScreen</Text> {booksData?.length !== 0 ? <Text>{booksData[3]?.name}</Text> : null} <Button title="test" onPress={() => dispatch(getBooks())} /> </View> ); }
  5. #تعريف الصنف class Circle(): #تعريف الدالة التي تقوم بخلق جزيئ من الصنف def __init__(self, r): self.radius = r # تعريف دالة تقوم بحسابة مساحة الدائرة def getArea(self): return self.radius**2*3.14 و بنفس الطريقة يمكنك أن تقوم بكتابة باقي الدوال داخل الصنف
  6. يبدو أن الأسم لا يصل الى السيرفر ليتم حفظها بعد ذلك في قاعدة البيانات هل تستطيع ان تقوم بأرسال الراوت المسؤول عن استلام هذه المعلومات و قبل ذلك هل يمكنك طباعة البيانات الواصلة الهذا الراوت و معرفة ما يحتويه و إرفاق صورة لقيمة الكونسول . مثلا عليك كتابة console.log(res.body)
  7. هذه سؤال عام طبعا يمكن عمل أمور كثيرة بلغات كثيرة و لا يوجد شيئ محدد
  8. حسنا هنا دالة تقوم بخلق الformdata بشكل صحيح و إرجاع المعلومات الى طلب الaxios // دالة لخلق الformdata // نرسل لها قيمة الصورة - و قيمة باقي المعلومات في المحتوي body const createFormData = (photo, body = {}) => { // هنا نخلق ال Formdata const data = new FormData(); // نقوم بوضع المعلومات الخاصة بالصورة فيها data.append('photo', { name: photo.fileName, type: photo.type, uri: Platform.OS === 'ios' ? photo.uri.replace('file://', '') : photo.uri, }); // هنا نقوم بوضع جميع المحتويات داخل المحتوي Body Object.keys(body).forEach((key) => { data.append(key, body[key]); }); // و نعيد البيانات من هنا return data; }; و هنا نقوم بأرسال جميع القيم بال axios const postData = () => { fetch(`${SERVER_URL}/api/upload`, { method: 'POST', // هنا نستخدم الدالة و نقوم بإعطائها المعلومات المرادة body: createFormData(photo, { userId: '123' }), }) .then((response) => response.json()) .then((response) => { console.log('response', response); }) .catch((error) => { console.log('error', error); }); }; بالطبع يمكنك إستبدال الfetch ب ال axios
  9. هل قمت بأرسال باقي المعلومات كال id و الأسم و جميع هذه الأمور التي تحتاجها لحفظ الملف من جهة السيرفر ؟
  10. حسنا ستحتاج لمعرفة الآن ما الخطأ الذي سيطبعه من الطلب
  11. طبعا ستحتاج then و catch بغض النظر عن الطريقة المكتوبة بها الطلب لل Axios لكن ما عليك فعله هو إرسال الصورة بخلق formdata
  12. انت ترسل نوع multipart لذلك عليك حفظ قيمة الصورة بفورم داتا FormData أنا لا أرى أي مكان تقوم فيه بأنشاء أوبجكت من نوع FormData const postData = () => { // أضف هذه هنا مثلا let formdata = new FormData(); formdata.append("image", {uri: image.uri}) axios({ url: 'http://10.0.2.2:3000/posts', method: 'POST', data: formdata, headers: { 'Content-Type' : 'multipart/form-data', } }) }
  13. الحد الأقصى لأبعاد جدول بيانات Excel هو 1،048،576 صفًا بـ 16،384 عمودًا. الحل البديل هو إستخدام تنسيق برنامج مثل .csv (أو .txt مباشرة) الcsv يتعبر جدا قريب لملفات ال excel لذلك لن يكون هنالك اختلافات كبيرة بين الإثنين, أي يمكنك أن تحفظها بصيغة csv بدون مشاكل
  14. هو فقط مصطلح يعبر عن أنه ممكن أن يكون كمية أستخدام مثلا التطبيق أكبر من قدرة التطبيق على الأستيعاب فيؤدي الى هبوط مثلا الخادم أو التطبيق هي بإعتبار أنه لو كان هناك مصنع و كمية الطلب على البضاعة أكبر من قدرة العاملين في هذا المصنع قد يؤدي الى مشاكل بموضوع تلبية حاجات العملاء بطريقة صحيحة و هنا يصبح لدينا تقصير في العملية و هذا الأمر خطير من ناحية التطبيقات بحث مثلا بAWS لتجنب هذه العملية تقوم بعض الشركات بعمل نسخ أحتاطية لدعم النسخة الأساسية و ذلك حتى ذا كان هناك الكثير من الطلبات فسيقوم aws بتوزيع هذه الطلبات على مجمل النسخ لتحفيف الحمل على الخادم و التطبيق و حتى لا يتم ما يسمونه Crashing هذا مثال بسيط يمكن أن تعتمده لفهم أساسيات هذا المصطلح
  15. حسنا الNodejs من لغات الخادمات الخلفية الواسعة الأنتشار في مجال الويب و يعتمد على لغة ال جافا سكربت التي هي أساس ايضا الويب في الواجهة الأمامية للتعامل مع الHTML و CSS كما أن النود أقدم و يتوفر له مكتبات و تعريفات كثيرة تسهل العمل به غير أن التوثيق لكيفية التعامل مع النود متوفر بكثرة و سلس جدا بما أنه أصلا متواجد منذ فترة أطول من الروبي لكن بكل الأحوال هنا سأقوم بعرض بعض الفروقات بين الأثنين : السرعه و الأداء: معروف أن ال Nodejs يعتمد موضوع التزامن بحيث انه يعمل على Thread واحد من السيرفير او الجهاز فهو لا ينتظر نتيجة الطلب حتى تنتهي العملية بل يقوم بأخذ الطلب و بيانتاته و من ثم يقوم بوضع هذا الطلب في ساحة الأنتظار لياخذ بيانات غيره حتى تنتهي عملية المعالجة لهذا الطلب و من ثم يقوم بأستدعاء من ساحة الأنتظار حالما تصله النتيجة و يرسلها مرة أخرى. من هنا فعليا هذه العملية تؤدي الى سرعة بالإداء من ناحية الخادم الخلفي و أيضا تخفيف الجهد المنطلب من الخادم أو السيرفير بما أنه يستخدم Thread واحد, أما بالنسبة لروبي فهو يعد أقل أداءا بالسرعة من هذه الناحية و هنا يفوز النود بجدارة - لكن يجدر الأشارة أن العمليات التي تحتاج الى معالجة كبيرة على CPU بالنسبة للنود تكون بطيئة مثلا كمعالجة 3D أو صور أو فيدو على سبيل المثال و هنا يتفوق روبي على النود. بالنسبة لسرعة التعلم : النود يعتمد على Javascript و هي scribting Language برمجة نصية مفهومة من قبل أغلب المتصفحات و هي أقدم نشوئا من الروبي و يوجد عليها موارد و توثيقات كثيرة تساعد في فهمها بسرعه و هي سهلة التعلم , أما بالنسبة لروبي فقد تكون بالبداية سهلة التعلم و لكن في المراحل المتقدمة من العمل أو الأستعمال فهي ليست سهلة التعلم. بالنسبة للمرونة و الأداء : روبي تعتمد على تقليل التعريفات المبدأية لكل لشيئ بطريقة كتابتها مكتبات متطورة نوعا ما تخفي ما بين السطور طريقة التعريف التي تحتاج الى كثير من السطور البرمجية لذلك تغيير أي شيئ في أي تطبيق لن يأخذ جهدا عالية بحيث أن بضعة سطور من البرمجة ممكن أن تتغير و تؤدي العمل بشكل فعال أما بالنسبة للNodejs قأستخدامها يحتاج الى تعريف الأمور بشكل دقيق و يحتاج الى كتابة سطور برمجية دقيقة لكل شئ مما يعني أنه بالنسبة للتطبيقات الكبيرة أختلاف خاصية معينة قد يكلف تغيير مئات و أحيانا ألآف من السطور البرمجية لتتغير هذه الجزئية.
  16. نعم يوجد طريقة و هي كالتالي : import sys import trace import threading #هنا نعرف صنف من نوع Thread class KThread(threading.Thread): """هنا يرث الصنف Thread""" def __init__(self, *args, **keywords): threading.Thread.__init__(self, *args, **keywords) self.killed = False def start(self): """ دالة لتعريق بدأ thread """ self.__run_backup = self.run self.run = self.__run # Force the Thread to install our trace. threading.Thread.start(self) def __run(self): """دالة لتشغيل التعقب لهذا ال thread.""" sys.settrace(self.globaltrace) self.__run_backup() self.run = self.__run_backup def globaltrace(self, frame, why, arg): if why == 'call': return self.localtrace else: return None def localtrace(self, frame, why, arg): if self.killed: if why == 'line': raise SystemExit() return self.localtrace # هنا الدالة التي تقوم بقتله def kill(self): self.killed = True ------------------------------------------------------------------------ #طريقة الإستعمال ------------------------------------------------------------------------ #إن كما في ملف آحر علينا إستيراد الملف الذي قمنا بخلقه from KThread import * #نعرف دالة جديدة وخذخ الدالة ستقوم بعمل دوران بشكل طبيعي def func(): print 'Function started' for i in xrange(1000000): pass print 'Function finished' #هنا نعرف متغير من الصنف الذي خلقناه للتحكم بال thread # نعطيقه الدالة ليقوم بتعقب الthread #الخاص بها A = KThread(target=func) # نقوم بتشغيل الدالة عن طريق Start A.start() #هنا فقط لتاخير نهاية البرنامج for i in xrange(1000000): pass #ثم هنا نقوم بقتله A.kill() print 'End of main program' Output: Function started
  17. هل يمكنك أن ترسل لي شاشة الكونسل بعد أمر dart pub outdated --mode=null-safety
  18. تمام الموضوع ما زال متعلق بال NULL ارجو القيام بفحص قيمة lang قبل ارسالها الى الدالة sharedPreferences.setInt فتمرير قيمة NULL الى اي دالة قد يؤدي الى نفس المشكلة في حال لم تقم بتعريف قيمة مبدأية لها init value هنا: Future<bool> commit() async { _sharedPreferences ??= await SharedPreferences.getInstance(); // عليك فحص اي قيمة يتم ارسالها الى أي دالة بالنسخة الجديدة حتى يتم اعتبار ان البرنامج لن يحتوي اي قيمة // null await _sharedPreferences.setInt(LANG, lang); }
  19. نعم الشيرد بريفيرنسز ان لم يكن هناك اي شيئ مخزن بالذاكرة سيكون قيمتها null و انت تستخدم flutter 2 اي نسخة null safty مما يعني انك يجب ان تضمن عدم وجود اي قيمة داخل برنامجك يحتوي قيمة null لتفادي هذه الأخطاء يوجد أداه لتقوم بإصلاح أصدار برنامجك قبل النسحة الجديدة , و ذلك بعمل تحديث لجميع المكتبات لضمان انها ستحتوي على هذه الخاصية يمكنك ان تقوم بعمل dart pub outdated --mode=null-safety dart pub upgrade --null-safety flutter pub get flutter analyze dart migrate و عندما تقوم بعمل ال migration ينبغي ان يقوم بتحديث جميع المكتبات يحيث أن القيمة الراجعه لاي شئ لن يحتوي على null ممكن Zero او مصفوفة فارغة
  20. في التوثيق مكتوب أنه عليك إرسال أوبجت يحتوي على uri و قيمته كالتالي هل بإمكانك ان تستبدل السطر التالي : const { sound } = await Audio.Sound.createAsync( URL( "https://katateeb-test.roqay.solutions/public/uploads/chats/1/1610544623katateeb_record.mp4" ) // require("https://katateeb-test.roqay.solutions/public/uploads/chats/1/1610544623katateeb_record.mp4") ); بهذه الطريقة const { sound } = await Audio.Sound.createAsync( { uri: 'https://katateeb-test.roqay.solutions/public/uploads/chats/1/1610544623katateeb_record.mp4' }, { shouldPlay: true } ); و أن واجهتك نفس المشكلة الرجاء إخباري
  21. في حال أنك لم تقم بوضع تعريف الجافا سكربت cdn قبل المحتوى فلن يتم التعرف على هذه المكتبة و إستخدتامها لذى عليك التحقق من ترتيب المكتبات و أين يتم وضع تعريفها في الصفحة بحيث أن ال popper مكتبة تقوم فعليا على إستخدام الجافا سكربت فعليك وضعها قبل المحتوي كالتالي و قبل الjquery أيضا كالتالي : <title>PAGE</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script> <body></body>
  22. هل onStartPlay معرفة كدالة داخل البرنامج لا ارى لها تعريف ؟؟؟
  23. إن التعامل مع الريئاكت نيتف (React-Native) تقريبا مطابق للتعامل مع ال React للويب و عند إستخدام أي API يتم التعامل معها بشكل طبيعي عن طريق http Request او ال axios و غيرها لذلك لا تختلف طريقة جلب البيانات من ويب أو موبايل إلا بحالات معينة كجوجل و فيربيز و لكن بكل الأحوال يوجد مكتبات كثيرة تقدم بعض المؤثرات الصوتية بالمجان عن طريق الأ بي أي (API) و بعضها غير مجاني هنا سأذكر بعضها و يمكنك ان تستخدم ما تشاء حسب رغبتك منها كالتالي : Pizzicato.js SoundJS Tone.js Tuna XSound
  24. إستعمال أي مكتبة يعتمد على نوعية البرنامج المراد و أيضا اللغة المرادة هنا يظهر أن هذه المكتبة تستخدم التايب سكربت TypeScript كما أنه فعليا كمية التحميل على npm يظهر لك مدى فعالية المكتبة بحيث ان اي مكتبة عليها قدرة تحميل كبيرة تكون أكثر المكتبات شيوعا و أستخداما و أيضا أكثرها متابعة أخطاء من قبل مطوريها و كما قلنا سابقا فأن إستعمال أي مكتبة يعتمد على كيفية أستخدامها بالبرنامج المراد لذلك يمكنك أن تذهب الى صفحة ال github الخاصة بهذه المكتبة و ترى نسبة الأخطاء و نسبة التعامل مع هذه الأخطاء من هناك لتضمن أنك لن تقع في أخطاء تصدرها هذه المكتبة و أيضا إستعمالها بشكل فعال أكثر من خلال التعليمات
  25. ان كنت تتعلم الphp لتطوير الويب فعليك فعلينا أن تبدأ بتعلم ال HTML و ال CSS قبل اللغة بحيث أن أي لغة للويب تقوم فقط ببناء او التلاعب بخصائص ال HTML و ال CSS و عليه فيجب أن يكون عندك دراية كافية بكيفية خلق محتوى أما بالنسبة لل javascript فهي من أهم وأكثر اللغات المستخدمة للويب تعلمها يعد شيئ ممتاز جدا و لكن يمكن أن تتمكن من ال php و تستخدمها بدلا عنها في أغلب الأمور
×
×
  • أضف...