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

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

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

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

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

كل منشورات العضو عبدالله عبدالرحمن11

  1. قم بعمل console.log لكي تعرف مكان الخطأ يجب عليك عمل console.log لل item لكي تتأكد أنك حصلت على هذه البيانات بنجاح
  2. يجب علينا أولاً ذكر الفروقات المهمة لتحديد ذلك ++C تُدير الذاكرة يدوياً بإستخدام المؤشرات بينما في JS لا ، لذلك ++C أسرع وأفضل في إدارة الموارد ++C يجب عليك تحديد نوع المتغيرات Static type بينما في JS لا تحدد نوع المتغيرات لهذا ليست جيدة في إدارة موارد الذاكرة ++C تعتبر لغة Compiled يجب تحويلها قبل تشغيلها بينما JS تعتبر لغة interpreted بحيث يتم قراءة الكود وتحويله وتشغيله في نفس الوقت وهذا يجعلها أبطئ بكثير من لغة ++C ++C تعتبر multi-threaded بحيث تستطيع إستعمال عدة تعليمات أو threads في نفس الوقت بينما JS تعتبر single-threaded بحيث يتم تشغيل الكود أو التعليمات واحد بعد واحد ولا يتم تشغيل الآخر قبل الإنتهاء من السابق ويمكنك تغيير ذلك بالبرمجة المتزامنة لغة C و ++C تعتبر أم اللغات الحديثة ولغة JS من اللغات الناشئة منها فيمكنك تعلم أساسيات البرمجة من JS فقط ولكن كما ترى هناك العديد من المواضيع المهمة في لغة ++C وايضاً بناءً على المجال الذي تريد الدخول فيه تختار اللغة الذي تبداء بها فإذا أردت برمجة البرامجة الثقيلة وبرمجة الأنظمة فعليك البدء ب ++C ومن بعدها يمكنك تعلم أي لغة حديثة أخرى بكل سرعة وسهولة أما إذا أردت الذهاب الى برمجة الويب فقط فيمكنك الذهاب الى JS مباشرةً
  3. شهادة SSL تستخدم للخادم الخاص بك فقط وفي حالتك خادم Ubuntu لكي يكون الاتصال بين الخادم الخاص بك والعميل إتصال HTTPS أي يكون الاتصال مشفر والبيانات التي يتم تبدالها بين الخادم والعميل تكون مشفرة ولايمكن لأي مخترق فك تشفير البيانات ، لذلك الشهادة هي للخادم فقط اما اسم النطاق فلا تحتاج لذلك لان عمله الوحيد هو تحويل المستخدمين من العنوان السهل القراءة والحفظ وتحويله الى عنوان الخادم الرقمي الصعب القراءة والحفظ على سبيل المثال عندما تقوم بكتابة facebook.com سيتم تحويلك مباشرة الى عنوان الخادم الرئيسي 157.240.195.35 فكما ترى اسم النطاق يقوم بالتحويل فقط
  4. إذن يجب عليك الذهاب للدرس الخاص بهذا السؤال ودراسته من جديد
  5. قُم بحل السؤال وإذا واجتهك مشاكل لم تستطع حلها أو العثور على حلول سابقة سنقوم بمساعدتك وقتها
  6. يجب عليك طرح السؤال في الدرس الذي واجتهك المشكلة فيه لكي يتم حل مشكلتك
  7. يبدو أنك لم تقم بثبيت حزمة 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> ); }
  8. المشكلة هي أنك تقوم بإستخدام 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/' }} />; } }
  9. هناك خطوتين يجب عليك القيام بهما لإنشاء مشروع على github pages : أولاً يجب أن يكون لديك ملف بإسم index.html ويجب أن يكون في الجذر root يعني في المجلد الرئيسي وليس داخل مجلدات داخل المشروع في المستودع repository ثانياً يجب عليك الذهاب الى إعدادات المستودع repository والذهاب الى الإعدادات الخاصة ب github pages وهذه الاعدادات موجودة في أسفل القائمة الذي في الجزء الأيسر من الصفحة ومن ثم تحديد الفرع الذي يوجد في الصفحة وغالباً مايكون في الفرع master وايضاً اختر المجلد root الآن يجب عليك الانتظار قليلاً لتحميل الصفحة وايضاً تذكر عند كتابة المسارات في مشروعك يجب عليك كتابتها كالمثال الآتي <img src="./images/cat.jpg"> وليس هكذا <img src="images/cat.jpg">
  10. يمكنك تثبيت حزمة local-ip npm install local-ip وإستخدام هذا الكود var iface = 'wlan0'; // اختيار اسم جهاز الاتصال var localip = require('local-ip')(interface); // إستدعاء الواجهة من الحزمة console.log('My local ip address on ' + iface + ' is ' + localip); // طباعة عنوان الايبي الخاص بجهاز اللاسلكي وهذه طريقة آخرى var interfaces = require(‘os’).networkInterfaces();// إستدعاء واجهات الشبكة const results = {}; for (const name of Object.keys(nets)) { for (const interfaces of nets[name]) { // تخطي العناوين التي ليست من الإصدار 4 وايضا العناوين المحلية if (net.family === 'IPv4' && !net.internal) { if (!results[name]) { results[name] = []; } results[name].push(net.address); } } }
  11. هناك حلول عدة تختلف بحسب إحتياجتك وعدة عوامل أخرى أهمها حجم التطبيق أي حجم المستخدمين الخاص بالتطبيق فإذا كان التطبيق صغير فليس هناك مشكلة من تخزين البيانات في نفس السيرفر أما إذا كان هناك عدد كبير من المستخدمين وبذلك عدد كبير من الملفات فيمكن وضع التطبيق الموقع في سيرفر ووضع قاعدة البيانات في سيرفر آخر ووضع سيرفر ثالث خاص بالملفات ويمكنك في سيرفر الملفات إنشاء API بحيث يمكنك من سيرفر التطبيق أو من عند العميل طلب الملفات للأشخاص المرخّصين للوصول الى هذه الملفات أو يمكنك إستخدام API من خدمات تخزين الملفات مثل firestore وغيرها
  12. لأنها تقوم بحصر الكود في مجموعة تسمى بالكتلة Block بحيث يكون الكود الذي داخل الأقواس المجعدة ينتمي لما خلفه فعلى سبيل المثال هذا الكود for item in list { print(item) } فالكود الذي داخل الأقواس المجعدة print(item) ينتمي الى ماقبلها أي for item in list مثال آخر في كتلة دالة function block func sayHello(){ print("Hello") } فالكود الذي داخل الأقواس print("Hello") ينتمي الى تعريف الدالة الذي قبله func sayHello()
  13. أسهل وأفضل وايضا أسرع طريقة هي عبر تعلم الضروريات الذي ستستخدمها كثيراً من أوراق غش شاملة comprehensive cheat sheet وايضاً يمكنك تعلم من فيديو واحد مساق سريع crash course وهذا يكون في ساعات قليلة شاملة للمواضيع المهمة والأساسيات مع الأمثلة أما طريقة أخرى وتكون طويلة بعض الشيء وهي عبر أخذ مساق كامل في هذه اللغة وهذه الدورات تختلف بطولها بعضها تكون أقل من 20 ساعة وبعضها أكثر من 30 أو 40 ساعة ويختلف أسلوب المدرس لذلك اختر المدرس الذي يكون شرحه جيداً وتستطيع الفهم منه أما إذا أردت التعلم بنفسك من دون أخذ مسار كامل فيمكنك البدء بهذه المواضيع أنواع المتغيرات Variables وكيفية إستخدامها وتعريفها مسار التشغيل control flow الدوال functions البرمجة الكائنية الموجهة Object Oriented Programming
  14. يمكنك إستخدام هذا الكود 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() # إغلاق الملف
  15. يمكنك إستخدام عدة طرق للحصول على النتيجة المرغوبة ، يمكنك إستخدام حلقة لتقسيم الكلمات من النص والتأكد بإستخدام ()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))
  16. في بايثون لا يمكنك إستدعاء حزمة أكثر من مرة من أجل أداء البرنامج ، لانه مهما كان عدد مرات إستدعاء أي حزمة فإنه في الخلفية سيتم إستدعائها مرة واحدة مثل import myScript if cond: import myScript # سيتم إستدعاء الحزمة مرة واحدة فقط لهذا يجب عليك إستدعاء الحزمة خارج الحلقة ، وفي داخل الحلقة يمكنك تشغيل الدالة المراد إستخدامها كالآتي import myScript for i in range(5): myScript.func() print('imported')
  17. هناك العديد من الطرق لعمل ذلك مثل وضع شرط كعلم 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() # تشغيل عند الحاجة
  18. هناك عدة لطرق لعمل ذلك ، مثل كتابة الأقواس المعكوفة مرتين x = "{{Age}}{0} ".format(23) print(x) أو يمكنك عمل ذلك بصيغة % x = " {Age}%s" print (x%(23)) أو إستخدام قوالب السلاسل النصية template string from string import Template x = Template("$open Age $close") x = x.substitute(open='{',close='}') print('{} {}'.format(x,23))
  19. لايوجد زر submit أو input نوع submit وايضاً لا يوجد كود javascript
  20. يمكنك إستخدام الحزمة colorama وهي تعتبر متعددة المنصات cross-platform لكي تقوم بطباعة نصوص ملونة على أي منصة أولاً قم بتثبيتها عن طريق إستخدام pip pip install colorama ومن ثم يمكنك طباعة النصوص الملونة كما هو موضح في الكود from colorama import Fore, Back, Style print(Fore.RED + 'نص أحمر') print(Back.GREEN + 'نص بخلفية خضراء') print(Style.DIM + 'نص خافت') # لكن لا يحصل أي شيء في وندوز لانه لايدعمه print(Style.RESET_ALL) # إعادة النص الى الافتراضي print('نص عادي')
  21. هناك دائماً عدة طرق لعمل أي شيء في البرمجة ، وهناك طرق سهلة وأخرى صعبة يمكنك إستخدام zip و dict أو zip_longest أو بكل بساطة يمكنك إنشاء دالة بنفسك لعمل ذلك كالآتي #تحويل قائميتن الى قاموس #بإستخدام حلقة # تعريف القوائم test_keys = ["Rash", "Kil", "Varsha"] test_values = [1, 4, 5] # طباعة القائمتين المفاتيح والقيم print ("قائمة المفاتيح : " + str(test_keys)) print ("قائمة القيم: " + str(test_values)) # إستخدام حلقة لتحويل القوائم الى قاموس res = {} for key in test_keys: for value in test_values: res[key] = value test_values.remove(value) break # Printing resultant dictionary print ("القاموس الجديد : " + str(res))
  22. في البرمجة عند القيام بإستدعاء دالة أو إيقاف دالة بناءً على وقت محدد لدالة سابقة يسمى بإنتهاء المهلة TimeOut أي عند إنتهاء المهلة المحددة لدالةً ما سواءً انتهت من عملها أم لم تنتهي سيتم إستدعاء دالة أخرى أو إيقاف هذه الدالة في بايثون هناك عدة طرق لعمل ذلك ، مثل إستخدام subprocess كالآتي import subprocess r = subprocess.run(['echo', 'hello timeout'], timeout=5) # اسم البرنامج ثم كتابة خيار إذا وجد وثم الوقت المحدد print( f'''type(r)={type(r)}, r.args={r.args}, r.returncode={r.returncode}, r.stdout={r.stdout}, r.stderr={r.stderr}''' ) # نقوم بتجربة اتصال لموقع قوقل خلال 5 ثواني # فإذا انتهت الفترة نقوم بطابعة ان مهلة الوقت قد انتهت try: r = subprocess.run(['ping', 'www.google.com'], timeout=5) except subprocess.TimeoutExpired as e: print(e)
  23. يمكنك إستخدام الطرق المذكورة مسبقاً ، ولكن هناك طريقة أسهل لعمل ذلك وهي كالآتي virtualenv venv --python=python2.7 ولكن هذه الطريقة تعمل إذا كنت مثبت ل python2.7 في مستوى النظام ، أي أن يكون المسار كالآتي /usr/bin/python2.7 أما إذا استخدمت homebrew لتثبيت بايثون أو إستخدمت أي طريقة أخرى لتثبيت بايثون ويكون المسار مختلف عن المذكور في الأعلى ، فيجب عليك تحديد المسار كالآتي virtualenv venv --python=المسار virtualenv venv --python=/usr/local/bin/python يمكنك معرفة مسار بايثون بإستخدام الأمر التالي which python أو إذا كنت تريد بايثون 3 كالآتي which python3
  24. نعم يمكنك ذلك ،لكن في برمجة الالعاب أفضل الخيارات المتاحة هي unity 3d بلغة #C و Unreal Engine بلغة ++C وهذين الخيارين يمكنك تطوير العاب قوية وسريعة ولجميع المنصات المتاحة ، بينما إذا برمجة الالعاب بلغة بايثون فأدائها وجودتها أقل بكثير من الخيارين السابقين ، وللمنصات الذي تدعم بايثون فقط وهي windows , linux, macos فقط ، لكن يمكنك البدء فيها كبداية ومن ثم الانتقال الى أحد الخيارين السابقين وايضاً يمكنك تطوير التطبيقات بلغة بايثون مثل تطبيقات سطح المكتب و الويب والذكاء الإصطناعي وغيرها يمكنك إستخدام الهاتف للضرورة فقط من أجل تعلم الأساسيات ، ولكن دائماً يُفضل إستخدام الحاسوب يختلف عند كل شخص فعلى سبيل المثال إذا كنت مبرمج وفاهم للأساسيات الذي تشترك بها أغلب لغات البرمجة فيمكنك تعلمها في ساعة اما إذا لم تكن تعرف مفاهيم البرمجة فسيأخذ وقت يختلف بإختلاف الشخص، ربما أسبوع على أقل تقدير لتعلم الأساسيات والمفاهيم البرمجية المهمة ولا يمكنك تعلم كل شيء عن لغة ، بل تعلم ماتحتاجه في المجال الذي تنوي الدخول إليه بحسب ظروفك ولكن يُفضل عدم الانقطاع الطويل لانه سيؤدي للنسيان في بداية تعلمك للبرمجة وعدم الممارسة الكافية
  25. بإختصار البحث الثنائي سريع جداً مقارنة بالبحث الخطي ، لأن البحث الخطي سيمُر على جميع العناصر من البداية الى النهاية ولكن في البحث الثنائي يقوم دائماً بتقسيم العناصر الى قسمين ففي كل مرة يبحث يقوم بتقسيم العناصر الى جزئين ويختار جزء واحد فقط للمواصلة البحث وهذا الجزء يتم عليه نفس العملية بحيث يتم تقسيمه الى جزئين لكن إذا كان لديك قائمة طويلة من العناصر فيمكنك مباشرةً إستخدام البحث الخطي ولكن في البحث الثنائي يجب عليك فرز العناصر بالترتيب اولاً إذا لم تكن العناصر مرتبة من قبل وهذا الكود يبين كيفية ذلك a=[3,2,3,5,6,4,7] # فرز العناصر بالترتيب اولاً a = sorted(a) # تعريف دالة البحث الثنائي def binarySearch(arr, l, r, x): while l <= r: mid = l + (r - l) // 2; # التأكد إذا كان العنصر المراد البحث عنه موجود في الوسط if arr[mid] == x: return mid # التأكد إذا كان العنصر المراد البحث عنه أكبر ، ويتم تجاهل النصف الأيسر elif arr[mid] < x: l = mid + 1 # التأكد إذا كان العنصر المراد البحث عنه أكبر ، ويتم تجاهل النصف الأيمن else: r = mid - 1 # إذا وصلنا الى هنا فهذا يعني ان العنصر غير موجود return -1 # العدد الذي تبحث عنه x = 4 # إستدعاء دالة البحث result = binarySearch(arr, 0, len(arr)-1, x) if result != -1: print ("العنصر موجود في الفهرس رقم % d" % result) else: print ("العنصر غير موجود في القائمة")
×
×
  • أضف...