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

Wael Aljamal

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

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

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

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

    218

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

  1. على الأغلب ملف env. لم يتم رفعه مع باقي ملفات المشروع، إن كنت تستعمل github ربما تجده في قائمة الاستثناءات gitignore. يمكنك عنل ملف في الاستضافة بنفس الاسم والمحتوى. وتأكد من حذف الكاش من المشروع php artisan config:cache
  2. كما أخبرتك تعيد لك مسار لتضع ملفك فيه، من اسمها توفير المسارات، حتى أنك تقوم بتخزين الملف يدوياً، لا يوجد مساعدة من المكتبة.. أفضل من shared preferencs نعم
  3. path provider ليست قاعدة بيانات، بل واجهة برمجية لكي نصل لمسارات نظام ملفات نظام التشغيل وبذلك نستطيع كتابة الملفات التي تعود لتطبيقنا بمكان محدد ونستطيع الوصول لها لاحقاً، أي تساعد على توفير مسار معروف لتخزين ملفات. sqlite هي قاعدة بيانات علائقية relational database تفيد في إنشاء جداول و الربط بينها وعمل استعلامات، هي نسخة مخففة من MySQL. ليس عليك استعمالها في حال لا يوجد علاقات بين الجداول وأن تعمل استعلامات ضمن التطبيق. hive هي قاعدة بيانات تشبه shared preference حيث أنها تخزن البيانات على شكل مفتاح-قيمة وهي سريعة ومناسبة للاستعلامات و حجم بيانات كبير نوعاً ما ليس من المنطقي نسخ جدول من قاعدة البيانات للتطبيق. حجم بيانات كبير سيكون مرهق لمعالج الهاتف + وحدة التخزين و الذاكرة فيه
  4. السطرين 60-61 هل ترسل البيانات لصفحة لم يتم إنشائها بعد ؟ اليس create window يجب أن تتم قبل
  5. هذا يعني أنك تحتاج لتأخير لكي تعمل الفكرة، أي أن الصفحة لم تكن جاهزة لاستقبال البيانات. حاول انتظار الحدث did-finish-load ثم مرر البيانات لها mainWindow.webContents.on('did-finish-load', ()=>{ mainWindow.webContents.send('display', __dirname+'\\'+file) })
  6. أرجو إرفاق كامل الملفات لأستطيع التجريب لدي اضغط مجلد المشروع ك rar او zip وارفقه في تعليق
  7. setInterval تستدعي نفسها كل مدة زمنية أي نفس الحلقة. جربت تنفيذ الفكرة على بيانات بسطية ثم توسيع اامنطق ليشمل الاتصال عن طريق api
  8. أرجو تعديل الملف للشكل: setInterval(function () { element.innerHTML += "Hello" }, 1000); أي: setInterval(function () { i++; console.log(i); if (i === page_number) { // check if index reached last page i=1 } fs.writeFile('saveindex.txt', i, (err2) => { if (err2) throw console.log(err2); }); let pageID = await fetch('https://api.jikan.moe/v4/anime?page='+i); // كل صفحه واحد تحتوي علي 25 مصفوف let getAnimes = await pageID.json() if (getAnimes.data) { getAnimes.data.forEach(async details => { let currentPage = details.title; const dataFile = fs.readFileSync('data.json', 'utf8') if (dataFile === '') { // check if file json empty try { obj.table.push({name: details.title}) let encodeJson = await JSON.stringify(obj); fs.writeFileSync("data.json", encodeJson) console.log('file is empty') } catch(err) { console.log(err); } } else { //read data with JSON from file try { let decodeJson = await JSON.parse(dataFile); decodeJson.table.push({name : 'test'}) console.log(decodeJson); // جربت هنا طبعت اذا بيطبع لي test 25 مره ولا بس مادري ليش طبع لي مره واحد //fs.writeFileSync('data.json', JSON.stringify(obj)) } catch (err) { console.log(err); } } }) } }, 1500);
  9. هل obj.table عبارة عن مصفوفة؟ هل يمكنك طباعة الكائن obj بالكامل لنعرف هيكليته. الشيفرة لا يوجد بها مشكلة، ولكن أين الحلقة؟ وتأكدي أين تضيفين البيانات في الملف ملاحظة: يمكنك فتح الملف في محرر الأكواد و تتبع تنفيذ البرنامج
  10. typescript هي لغة عامة أكثر من جافاسكربت فيها ميزات أو لنقل أشياء إضافية تقلل من الأخطاء عند كتابة الشيفرات البرمجية مثل تحديد أنماط المتغيرات ووسطاء الدوال و القيمة المرجعة وما إلى ذلك وأدخلت مقهوم الواجهات البرمجية interfaces ابحث عن مقارنة بين اللغتين لتعرف الفروقات، typescript تساعد في عمل هيكلية للمشروع وخاصة للمشاريع الكبيرة ما يمكن عمله بجافاسكربت يمكن عمله بتايب سكربت. من ميزات أكاديمية حسوب أن المسارات الأولى من باقي الدورات تكون مفتوحة للطالب الذي اشترك بأي دورة، وبذلك يمكنك دراسة جافاسكربتمن دورتها الخاصة دورات تعليمية دورة تطوير التطبيقات باستخدام JavaScript أساسيات لغة JavaScript: هنا للقراءة أكثر عن typescript توثيق موسوعة حسوب: TypeScript مقالات ودروس:
  11. المشكلة فقط في تفعيل تنفيذ السكربتات على powerShell للعملية للجهاز للمستخدم الحالي Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process أو Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine أو Set-ExecutionPolicy RemoteSigned -Scope CurrentUser أغلق هذا التيرمينال وافتح آخر جديد وأعد تنفيذ الأوامر فيه أنت تقوم بتنفيذ أوامر التثبيت مع فتح الواجهة التفاعلية ل node وليس سطر أوامر النظام، اعمل Ctrl+D ثم تابع
  12. نفس الفكرة، اعتمد على طابع زمني. ترسل زمن اخر تحديث للملف على التطبيق للخادم، إن كان زمنه قبل زمن اخر تعديل في قاعدة البيانات ترسل البيانات الجديدة وإلا ترسل أنه بيانات التطبيق حديثة
  13. إذا يكون سببها console.log في شيفرة جافاسكربت
  14. لا مانع من عمل استعلام مع قاعدة البيانات للتحقق من وجود تحديثات أو عدم وجودهم. كيف نعلم أن البيانات لدينا محدًثة؟ إما عن طريق timestamp أي وقت يحوي توقيت آخر تعديل حدث على المستخدمين في قاعدة البيانات و نمرره مع البيانات و نخزنه في التطبيق يعمل backend على التحقق منه أو طريقة أخرى مثلاً من خلال ID آخر مستخدم مضاف.. سوف يرسل التطبيق توقبت آخر تحديث للملف final _baseUrl = 'https://website.com/data.php?last_update=time...'; ^^^^^^^^^^^^^^^^^^^ تقوم بتخزين last_update في shared_preferencs يرسل الخادم البيانات على الشكل التالي مثلاً يوجد تحديث: نستخلص new_data ونخزنها في الملف { status: need_update, => تحديث الملف في التطبيق time_stamp: time => آخر تحديث في قاعدة البيانات new_data = [users] } لايوجد تحديث: نستعمل الملف المحلي { status: uptodate } توقيت آخر تعديل لجدول قواعد بيانات MySQL SELECT UPDATE_TIME FROM information_schema.tables WHERE TABLE_SCHEMA = 'dbname' AND TABLE_NAME = 'tabname'
  15. طيب، ممكن عرض التالي: print(snapshot.data[0]) print(snapshot.data[0]['title']) لنتأكد أي index يسبب المشكلة @مروان مروان3تأكد من هذه وهل يعطي index أكبر منها لأنها ربما سبب الخروج من المصفوفة
  16. ربما تخزين كامل البيانات تم على شكل مصفوفة، جرب التالي: snapshot.data[0][index]['title'].toString() ^^^^^ حاول طباعة المتغير الذي يسبب المشكلة لمعرفة هيكليته و خواصه print(json.encode(snapshot.data)); print(snapshot.data) print(variable.toString())
  17. المشكلة لديك في كتابة البيانات لأول مرة على التخزين المحلي في الملف، يجب كتابة البيانات بصيغة JSON أي بدل السطر التالي: file.writeAsStringSync(responsebody.toString(), flush: true, mode: FileMode.write); ^^^^^^^^^^^^^^^^^^^^^^ سوف يكون: file.writeAsStringSync(json.encode(responsebody), flush: true, mode: FileMode.write); ^^^^^^^^^^^^^^^^^^^^^^^^^ وللقراءة نعمل التعديل: data = await json.decode(await file.readAsString());
  18. عليك قراءة الملف لأول مرة و تخزينه ضمن Object يمكن عمل التعديلات عليه في الذاكرة و بعد كل تعديل على Object يمكن عمل witre له إلى التخزين في القرص كملف (نقرا الملف مرة واحدة و نخزنه بشكل عام للتطبيق أي نشارك Object global نعدل عليه في الذاكرة ونكتب التعديلات عندما تدعونا الحاجة له) وليس append لأنها تضيف نص لنهاية الملف ولا تتعامل مع هيكلية معينة. إن كان عدد التغييرات كبير فعليك التوجه لقواعد البيانات
  19. path_provider يمكنك تخزين ملف JSON مع صور وأي Documents sharedpreferences تعتبر بطيئة، أعلم أنها هيكلية XML وبذلك أبطأ من JSON في حال قمت بتخزين الملف مباشرة على التخزين
  20. يمكنك تحقيق المطوب باستبدال الطريقة writeFileSync ب appendFileSync. writeFileSync تكتب على الملف من جديد وتحذف القديم appendFileSync تبدأ بالكتابة من نهاية الملف الحالي في حال أن البيانات لديك غير نصية، مما رأيته في الشيفرة أنك تخزنين ملف JSON ربما من الأفضل قراءة الملف القديم، ثم تخزينه في هيكلية Object ثم تعديلها ضمن السيرفر ثم في النهاية كتابة الملف من جديد (البيانات القديمة + الجديدة) لايمكن عمل تعديلات سريعة على بنية الملف لأنه مكتوب على القرص الصلب، الحل الأمثل للمشكلة هو في استخدام قواعد بيانات
  21. إن path_provider مختلفة عن sharedpreferences path_provider هي plugin توفر واجهة برمجية تعطينا مسارات ضمن نظام الملفات الخاص بنظام التشغيل أي file system لإنشاء وتخزين ملفات / كبيرة الحجم نسبياً / نحتاجها بشكل متكرر في التطبيق و لكي نقلل وقت تحميلها من الشبكة لكل مرة نطلبها. (بدون عمل قاعدة بيانات محلية) بشكل رئيسي نستعملها عند الحاجة لحفظ ملفات في ذاكرة تخزين مؤقت كاش cache memory لتوفير الملفات محلياً بدل طلبها من السيرفر. sharedpreferences تستخدم لحفظ بيانات على شكل ثنائية (مفتاح / قيمة) وتكون البيانات حجمها صغير نسبياً مع إمكانية حفظ قائمة من السلاسل النصية List Of Strings وليس ملفات كبيرة، مثلاً نستعملها لحفظ تفضيلات المستخدم مثل theme التطبيق هل هو فاتح أو غامق light - dark أو بيانات المستخدم البسيطة مثل اسمه رقمه أي شيء متوسط إلى صغير. هي تخزين دائم لكن لانضع به بيانات خاصة و حرجة لأنها تحذف مع بيانات التطبيق مثلاً إن عملت clear data
  22. يخبروك أن البطاقة التعريفية يجب أن تكون بالانكليزية و مطابقة لمعلوماتك التي سجلت بها الحساب في غوغل، تأكد منها. أي اختلاف في الاسم سوف يسبب عدم مطابقة البيانات
  23. أي تفصد قراءة قيمة _limit ؟ تتعلق قيمتها بالمفتاح results ونجلبه في PHP حسب نوع الطلب ولديك http.get <?php $limit = $_GET['results']; include 'con.php'; .. اكتب url final String url = "*********************.php?results=$_limit";
×
×
  • أضف...