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

Wael Aljamal

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

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

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

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

    218

كل منشورات العضو Wael Aljamal

  1. نعم صحيح، ربما أصبح إذن الإشعارات افتراضيا ومتاح من قبل خدمة أخرى ولا يحتاج لإذن المستخدم. وبقي يحتاج لإذن في IOS: void registerNotification() async { // 1. Initialize the Firebase app await Firebase.initializeApp(); // 2. Instantiate Firebase Messaging _messaging = FirebaseMessaging.instance; // 3. On iOS, this helps to take the user permissions NotificationSettings settings = await _messaging.requestPermission( alert: true, badge: true, provisional: false, sound: true, ); if (settings.authorizationStatus == AuthorizationStatus.authorized) { print('User granted permission'); // TODO: handle the received notifications } else { print('User declined or has not accepted permission'); } } مثال من التوثيق، لايوجد طلب صلاحية إلا من IOS.
  2. هل قمت بإلغاء تثبيت التطبيق وفتحه و عملت FCM بدون طلب إذن المستخدم؟ لقد تم استبدال بعض الدوال من المكتبة و أصبحت deprecated يمكنك التأكد من الرابط: firebase.messaging.Messaging#requestpermission الصلاحيات: messaging/permissions
  3. Serialization: التسلسل هو عملية ترجمة بنية بيانات أو حالة كائن إلى تنسيق يمكن تخزينه أو نقله وإعادة بنائه لاحقًا. في جافا يمكننا تحويل أي بنية معطيات لسلسلة من البايتات، ممت يمكننا من لإرسال البيانات ضمن قنوات الاتصال عبر الشبكة أو تخزين ونقل المعطيات، ونرسلها لحاسوب آخر ثم نقوم بعكس العملية للحصول على البيانات الأصلية. يستعمل التسلسل عادة مع الأغراض لنقل بياناتها. طريقة البرمجة، على صنف الغرض الذي نريد عمل Serialization له أن يحقق الواجهة Serializable: class Muclass implements Serializable { ... } وتضمين المكتبة: import java.io.Serializable; والمكتبتبني التاليتين مثلا في حال أردنا كتابة الغرض في ملف: import java.io.ObjectInputStream; import java.io.ObjectOutputStream; ومثال على دالة تقوم بعمل Serialization وتكتب البيانات في ملف: private static void writeObject(Serializable shoe) throws IOException { ObjectOutputStream oos = new ObjectOutputStream( new FileOutputStream(new File("obj.ser"))); oos.writeObject(shoe); oos.close(); } ولقراءة الغرض: private static Object readObject() throws IOException, ClassNotFoundException { ObjectInputStream ois = new ObjectInputStream( new FileInputStream(new File("obj.ser"))); Object obj = ois.readObject(); return obj; } مثال كامل من توثيق w3resources: w3resource.com/java-serialization. ليكن لدينا صنف عامل يحقق الواجهة:Serializable public class Employee implements java.io.Serializable { public String name; public String address; public transient int SSN; public int number; public void mailCheck() { System.out.println("Mailing a check to " + name + " " + address); } } ولدينا الصنف التالي الذي قوم باختبار عمل السلسلة للكائن من الصنف السابق: import java.io.*; public class MySerialize { public static void main(String [] args) { Employee e = new Employee(); e.name = "my name"; e.address = "syria, damascus"; e.SSN = 1; e.number = 100; try { FileOutputStream fileOut = new FileOutputStream("/serilas/employee.ser"); ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject(e); out.close(); fileOut.close(); System.out.printf("Serialized data is saved in serilas/employee.ser"); } catch (IOException i) { i.printStackTrace(); } } } ولإعادة البيانات من الملف نعمل De-serialize: import java.io.*; public class MyDeserialize { public static void main(String [] args) { Employee e = null; try { FileInputStream fileIn = new FileInputStream("/serilas/employee.ser"); ObjectInputStream in = new ObjectInputStream(fileIn); e = (Employee) in.readObject(); in.close(); fileIn.close(); } catch (IOException i) { i.printStackTrace(); return; } catch (ClassNotFoundException c) { System.out.println("Employee class not found"); c.printStackTrace(); return; } System.out.println("Deserialized Employee..."); System.out.println("Name: " + e.name); System.out.println("Address: " + e.address); System.out.println("SSN: " + e.SSN); System.out.println("Number: " + e.number); } }
  4. يمكنك إضافة المهارات التي تملكها ويمكنك العمل بها بدقة. حاول جعل معرض أعمالك مميزا، في حال كانت التصاميم جميلة ضعها وإلا اكتب شرحا عما قمت به إن كان مثلا برمجة bach-end قدم عروضك على المشاريع المناسبة لك، وإقرأ متطلبات المشروع بدقة وتجنب المشاريع المبهمة.. اكتب عرضا مميزا، قم بالترحيب بصاحب المشروع ثم اذكر مهاراتك ثم حاول إقناعه بتوظيفك بطريقتك الخاصة مهتما للتفاصيل التي هو ذكرها في شرح تفاصيل المشروع إن كنت مبتدءاً حدد سعرا مناسبا ومنافساً على الأقل حتى تكتسب بعض التقييم عندها ضع عرضا يناسب خبراتك و متطلبات المشروع. وآخر جزء مهم قبل التوظيف هو نقاس المشروع، حاول التواجد متصلا بالانترنت وتابع الموقع باستمرار و حاول الرد على صاحب المشروع بأقرب فرصة.
  5. بما أن الرقم الوطني له خصائصص يمكننا بناء التعبير المنتظم وفقها مثلا: مثال للبحث عن نص ثابت و محدد: expr = '056' ثم وضعها هكذا: import re text = 'Hello my Jawwal number is 056' expr = '056' match = re.findall(expr, text) print(match) # => ['056'] الآن حاولي تعديل الشيفرة، حيث سنعمل على جعل القسم الآخر من الرقم الوطني عبارة عن أرقام بعدد محدد: [0-9]* # عدد لانهائي من الأرقام وممكن 0 [0-9]+ # عدد لانهائي من الأرقام ولكن على الأقل رقم واحد [0-9]X # X عدد لانهائي من الأرقام وعددهم [0-9]2 [0-9]7 [0-9]X... حاولي دمج القسم الثابت و يتبعه القسم المتغير والمحاولة. علما أن: [0-9] # ستعطي رقم واحد ضمن المجال
  6. كلا ليس عليك أن تكون مصمم بمعنى الكلمة، لكن الواجهات الأمامية هي واجهة الموقع و يجب أن تلبي حاجة المستخدم و تحقق معايير جمالية مقبولة. أرى أن الاختلاف كبير بين الصورة التي طلبها و التصميم الذي قدمته له، كان يمكنك عمل مجهود أكبر و محاولة الوصول لتصميم يكون مشابه لما طلبه على أقل تقدير. يتم ذلك من خلال تصفح العديد من المواقع المختلفة، ومحاولة فهم تقسيم الصفحة و كيفية تشكيل المكونات و تناسق الألوان.. هذا ما يطلق عليه اسم التغذية البصرية، أي بعد أن تنظر للموقع تعمل بمخيلتك على فهم التنسيقات و تحليل الموقع و التفكير كيف يمكنك الاستفادة مما رأيته في عملك الجديد. نعم يوجد ابحث عن free psd websites templates - كما يمكنك بالطبع تقليد مواقع أخرى. حاول اختيار نماذج أعمال أصعب قليلا من مستواك الحقيقي و تحوي تعقيدات أكبر وسوف تتطور بالتأكيد.
  7. تحدث مشكلة circular import عندما تتضارب الاعتماديات، أي وجود ملف لدينا في مشروعنا بنفس اسم المكتبة لذلك لحل المشكلة أرجو تغيير اسم الملف requests لديك. يمكنك التأكد من الملف المضمن بتنفيذ الشيفرة: print dir(requests) في حال أن الاستدعاء يعمل مع المكتبة requests وليس الملف الخاص بمشروعك، سيظهر التالي: ['ConnectionError', 'HTTPError', 'Request', 'RequestException', 'Response', 'Session', 'Timeout', 'TooManyRedirects', 'URLRequired', '__author__', '__build__', '__builtins__', '__copyright__', '__doc__', '__file__', '__license__', '__name__', '__package__', '__path__', '__title__', '__version__', '_oauth', 'api', 'auth', 'certs', 'codes', 'compat', 'cookies', 'defaults', 'delete', 'exceptions', 'get', 'head', 'hooks', 'models', 'options', 'packages', 'patch', 'post', 'put', 'request', 'safe_mode', 'session', 'sessions', 'status_codes', 'structures', 'utils'] جميع دوال المكتبة. ___________________ عند التضمين باستخدام: import requests نستعمل requests.get أما: from requests import * نستعمل get لأنه تم تضمين جميع فضاء العيبنة في الطريقة الثانية فيمكن استخدام get مباشرة.
  8. سبب هذا أن is تتأكد أن طرفي المقارنة يشيران لنفس الغرض في الذاكرة وإن بايثون لتحسين الأداء تقوم بعمل caches integer objects للأعداد الصحيحة الصغيرة: -5 .. 256 معتمدةً على نموذج التصميم singleton أي جميع الأعداد الصحيحة ضمن ذلك المجال التي لها نفس القيمة ستشير لنفس الغرص فيكون نتيجة تقييم is تعطي true أما في الأعداد الكبيرة ستقوم بايثون بتوليد غرض مستقل لكل متغير/قيمة.
  9. إن تعريف المتغيرات/الخواص في الصنف مباشرة يجعل هذه الخاصية مشاركة بين جميع الأغراض من هذا الصنف أي shared لتجنب المشاكل، نقوم بإسناد الخواص من خلال دالة البناءـ حيث يتم إسنادها عن طريف الكلمة المفتاحية self التي ترتبط بالغرض الفريد المنشأ من الصنف و ليس بالصنف نفسه: class MyClass: def __init__(self): self.list = [] ليصبح المثال: class MyClass: def __init__(self): self.lst = [] student = MyClass() teacher = MyClass() student.lst.append(1) student.lst.append(2) teacher.lst.append(3) teacher.lst.append(4) print(student.lst) # Output: [1, 2] print(teacher.lst) # Output: [3, 4]
  10. نعم صحيحة. يجب جلب مسار التخزين بطريقة مناسبة (مكان حفظ الملف - كتابة الملف) يمكنك تثبيت المكتبة: npm i react-native-fs ويمكن استخدامها كالتالي: var RNFS = require('react-native-fs'); var path = RNFS.DocumentDirectoryPath + '/test.txt'; // write the file RNFS.writeFile(path, 'data', 'utf8') .then((success) => { console.log('FILE WRITTEN!'); }) .catch((err) => { console.log(err.message); }); حيث أن RNFS.DocumentDirectoryPath تجلب مسار التخزين الخارجي حيث مسموح الكتابة، أرجو تجريب الطريقة مع الانتباه لتغيير اسم الملف. أو استخدم طريقة مختلفة لإنشاء الملفات في React Native رابط توثيق المكتبة: github.com/react-native-fs
  11. الخطأ يقول أنك تحاول إنشاء ملف وحفظه في الذاكرة وهذا يحتاج لصلاحية. توجه إلى android mainfest وأضف الصلاحية: الصلاحية الأولى الكتابة تكفي: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  12. يبدو أن حزمة المصادقة غير مثبتة في مشروعك، أرجو تنفيذ التعليمات التالية في CMD: composer require laravel/ui php artisan ui vue --auth php artisan migrate npm install && npm run dev لكي نقوم بتثبيت الحوزم اللازمة، تهجير نماذج المصادقة و تسجيل الدخول ثم تحميل مكتبات الواجهات.
  13. يمكننا عمل slice للقائمة الأولى ما يعمل على نسخ القيم لعناصرها بدون أخدهم بالمرجع: old_list = [1,2,3] new_list = old_list[:] new_list[0] = 0 print (new_list) # [0, 2, 3] print (old_list) # [1, 2, 3] ستعيد هذه الطريقة قائمة جديدة غير مرتبطة بالأولى
  14. يمكننا المرور على القوائم بالطريقة التراجعية وهي خوارزيمة تقوم على استدعاء نفسها عدة مرات، حيث لكل عنصر سوف نختبر هل هو عنصر وحيد؟ إن كان عنصر وحيد نضيفه للقائمة النهائية (خرج الخوارزمية) وإن كان قائمة نقوم باستدعاء عودي/تراجعي لهذه القامة الفرعية: def flatten(nested_list): if len(nested_list) == 0: return nested_list if isinstance(nested_list[0], list): return flatten(nested_list[0]) + flatten(nested_list[1:]) return nested_list[:1] + flatten(nested_list[1:]) print(flatten([[1, 2, 3, 4], [5, 6, 7], [8, 9], 10])) #[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] isinstance يختبر هل الوسيط الأول من النوع المساوي للوسيط الثاني وعليه نحدد هل العنصر الحالي هو قائمة أو لا.
  15. أستطيع مساعدتك بكتابة الشيفرة بلغة ++C وعليك تحويل الأفكار والشيفرة للغة C علينا استخدام مكتبة للتعامل مع الملفات. تعريف مصفوفة بطول 26 من نوع int لنقوم بعد تكرار الأحرف فيها استخدام الحلقات والتحويل بين المحارف (القصر) إن المحرف الذي يستخدم لرسم مربع أبيض مصمت هو 254u سوف نزيد تكرار الحرف الأبجدي حسب ترتيبه في اللغة و بالاعتماد على قيمته الرقمية في جدول ASCII: hist [ myText[i] - 'a' ] ++; حيث بعد ناتج طرح محرفين، إن كان محرف النص a سوف يكون ناتج الطرح 0 فنزيد 1 بالخانة الأولى من المصفوفة وأما b سيكون 1 و نزيد في الخانة الثانية وهكذا... أرجو محاولة كتابة الشيفرة البرمجية قبل رؤية الحل: . . #include <iostream> #include <fstream> using namespace std; int hist[26]; int main() { string myText; ifstream MyReadFile("story.txt"); while (getline (MyReadFile, myText)) { for (int i=0; i<myText.length(); i++) { hist [ myText[i] - 'a' ] ++; } } MyReadFile.close(); cout << "Histogram of Alphabet count\n"; for (int i = 0; i < 26; i++) { cout << char('a' + i) << "| "; int c = hist[i]; for (int j = 0; j < c; j++) { cout << (char)254u; } cout << "\n"; } }
  16. سوف نعتمد على مكتبة math الخاصة باللغة لحساب الجذر و الأس. نقوم بتعريف X , Y على أنهم أعداد عشرية، فاصلة عائمة double. نستخدم الدالتين sqrt - pow للقوة و الجذر. أرجو محاولة حل السؤال لأنه بسيط قبل رؤية الإجابة. . . سوف نسمح للمستخدم بإدخال قيمة X عن طريق cin من مكتبة iostream #include <iostream> #include <math.h> using namespace std; int main() { double x, y; cin >> x; y = sqrt(x + 5) / pow(x,8); cout << y; }
  17. أرجو مراجعة درس الأصناف في بايثون، فالسؤال بسيط و ليس معقد و يجب عليك حله بسهولة. علينا تعريف صنف، ثم في أول جزء نقوم بتعريف الخصائص لهذا الصنف attributes: . . الحل: class Person: per_id = 0 per_age = 0 per_name = '' per_address = '' def __init__(self): self.per_id = 0 per_age = 0 per_name = '' per_address = '' أو من خلال دالة التهيئة init (نكتفي بالجزء الأول إن لم نريد استخدام دالة بناء) بعد بناء الغرض ستكون فيم الخصائص فارغة: p = person() print(x.per_name) لاشيئ وأرجو الانتباه أنه لا يمكننا وضع إشارة الطرح "-" ضمن اسم خاصية أو متغير برمجي لأنه سيعتبرها عملية طرح بل نستبدلها بالإشارة "_" underscore وهي مقبولة في أسماء المتغيرات و الخواص...
  18. إن كان لدينا سلسلة نصية فيها بعض الأسعار بالدولار الأمريكي، ستكون مثلا رقم مع إشارة الدولار: $123,456.789 لاستخلاص مثل هذه القيم علينا استخدام التعابير المنتظمة لأنها تسهل الموضوع. في بايثون سوف نستخدم regular expression الذس هي re والدالة search: سوف نخزن التطابق في متغير match: match = re.search(expr, price) #expr هو التعبير الذي نبحث عنه #price هي سلسلة نصية نبحث ضمنها مثال: price = 'Apple price is: $2.250' expr = '\$([0-9,]*\.[0-9]*)' طباعة النتيجة: match = re.search(expr, price) print(match.group(0)) لإرجاع جميع التطابقات نستخدم الدالة findall: (تعيد قائمة) import re price = 'Apple price is: $2.251 $2.252 $2.253' expr = '\$([0-9,]*\.[0-9]*)' match = re.findall(expr, price) print(match) والنتيجة: ['2.251', '2.252', '2.253']
  19. لغة الprotofolio يفضل أن تكون بنفس لغة الزبائن لسهولة الاطلاع على العمل و فهم بعض الكلمات الموجودة ولكن برأيي لامشكلة من وجوده باللغة العربية، يمكنك بسهولة عكس التصميم و كتابة النص بالانكليزية ومن ثم رفع العملين سويا.
  20. في حالة عدم تغيير البيانات الموجودة في قطاع محدد على القرص Sector حيث أن عملية الحذف العادية لا تغير البيانات الفعلية (تبقى قابلة للقراءة) بل تحددها كمنطقة فارغة هذا ما يسمح بكتابة بيانات فوقها أي تغييرها وهذا ما يمحي البيانات القديمة فعليا.
  21. يمكن ذلك من خلال الدالة vars: a = 'spam' vars()[a] = 123 print(spam) # 123 أو global: globals()['somevar'] = 'someval' في المثال الأول يتم تعويض اسم المتحول a كنص ويتم بناء متغير بهذا الاسم و اسناد القيمة له أي نفس المثال الثاني باستخدام global.
  22. إن السبب في هذه النتيجة أن عملية الضرب بعد تشكيل المصفوفة تقوم بتكرار القيمة لنفس الكائن (المصفوفة المكونة من 5 أصفار) وتأخذه بالمرجع بآلية shallow lists. حيث: في القائمة الأولى لا تُنشئ بايثون 5 كائنات أعداد صحيحة ولكنها تنشئ فقط كائنًا صحيحًا واحدًا وكل مؤشرات المصفوفة تشير إلى كائن int نفسه كما هو موضح في الرسم المرفق و النتيجة في المثال. بعد تغيير قيمة أحد هذه الأغراض سوف يتم إنشاء غرض منفصل له فقط، وبما أنه كل غرض من الأغراض الخمسة مكرر في 3 قوائم بالمرجع/بالعنوان، سوف يتم تغيير نفس القيمة للعنصر المقابل في جميعهم. والحل هو إنشاء كل سطر في المصفوفة على حدى: arr = [[0 for i in range(5)] for j in range(3)] [0][0] = 1 print(arr) [[1, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] صورة توضيحية: في الحالة الأولى عند طباعة عناوين الذاكرة لكل مصفوفة ستكون تشير لنفس العنوان: Arr = [[0] * 5] * 3 Arr[0][0] = 1 print(Arr) print (id(Arr[0])) print (id(Arr[1])) print (id(Arr[2])) #1221247140608 #1221247140608 #1221247140608
  23. يمكننا عمل هذه الطريقة: if 0 in {x, y, z}: ستقوم بعمل set للمتغيرات <class 'set'> الحل بشكل عملي هو تعريف دالة تقوم بإرجاع مجموعة من المتغيرات خلال عمل البرنامج (أي تقرأ القيم الحديثة للمتغيرات) وبهذا تصبح تعيد مجموعة ديناميكية أي تصلح حتى مع تغيير قيم المتغيرات مع عمل البرنامج لسبب بنائها عند الحاجة. x = 1 y = 2 z = 0 def w(): return {x, y, z} if 0 in w(): # trur print('hi0') z = 5 if 0 in w(): # false print('hi1') كما يمكننا ببساطة عمل دالة تحوي على الشرط السابق واستدعائها def at_least_one_zero(): If x==0 or y == 0 or z == 0: print('hello, world')
  24. يتوقف دعم SSH على الاستضافة نفسها و الخصائص و الميزات التي تقدمها، أرجو مراجعة معلومات الاستضافة التي قمت بالتسجيل بها أو البحث عن استضافات مجانية تدعم SSH بالبحث كالتالي Free hosting support ssh مثلا. بالنسبة لفيديو يشرح SSH أرجو البحث عن التالي: How to setup ssh. ملاحظة، بعد الاشتراك مع استضافة تدعم SSH على الأغلب ستجدين فيديوهات شرح لنفس هذه الاستضافة ولكن الأمور متشابه وضبط الإعدادات بسيط. أشجعك على التجريب بنفسك وعند حدوث مشاكل يمكنك طرح الأسئلة.
  25. ماهو هدفك من تثبيت أندرويد استديو على الاستضافة؟ عادة لا يتم تثبيت هذا البرنامج عليها. على كل حال يجب أن توفر الاستضافة واجهة رسومية و نظام تشغيل مناسب لكي يتم تشغيل أندرويد استديو عليها ووجود نسخة من اندرويد استديو موافقة (لينكس، ويندوز...) وبالطبع علينا الاتصال بالاستضافة بطريقة مشاركة الشاشة أو سطح المكتب البعيد، أي تقنية تستعرض واجهة نظام التشغيل الذي يعمل في الاستضافة.
×
×
  • أضف...