-
المساهمات
1388 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
16
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Sam Ahw
-
صيغة PDF فقط للطباعة وهي ليست ثابتة، جميع هذه المكتبات المذكورة تتيح لك إمكانية إضافة البيانات بشكل ديناميكي على القالب الذي ستقوم بإضافته مباشرةً قبل الطباعة.
- 7 اجابة
-
- 1
-
يمكنك استعمال إحدى المكتبات التالية لتوليد الملفات بصيغة PDF لسهولة طباعتها: html2pdf , pdfkit, jsPDF وجميع هذه المكتبات يمكنك إيجادها ضمن npm ولها توثيق كامل لطريقة الاستخدام سواء ضمن المتصفح (من طرف المستخدم) أو حتى ضمن خادم الويب في حال كان تطبيقك يقوم بالتخاطب مع خادم ويب node.js. يمكنك أيضاً الاستفادة من المثال الموجود ضمن هذا السؤال:
- 7 اجابة
-
- 1
-
فقط استبدل اسم الصف: الشكل الحالي يشير إلى العنصر الحاوية const buttonNum= document.querySelectorAll(".buttonNum") نستبدله للإشارة إلى الزر const buttonNum= document.querySelectorAll(".number")
-
في الشيفرة لديك يتم تحديد جميع العناصر التي لها اسم الصف buttonNum : const buttonNum= document.querySelectorAll(".buttonNum") وبالنظر إلى صفحة html نجد أن العنصر ذو الصف: buttonNum وهو العنصر الحاوية div التي بداخلها الأزرار: <div class="buttonNum"> --> سيتغيّر لون الحاوية ... </div> لذلك يجب عليك إضافة اسم لصف محدد ضمن الزر فقط، وليكن .number ثم تعديل الشيفرة لتصبح كالتالي: const buttonNum= document.querySelectorAll(".number")
-
للحصول على إجابات أفضل لسؤالك يمكنك اتباع الإرشادات الموجودة من هنا لتوضيح السؤال والمشكلة التي واجهتها أثناء قيامك بالتعديلات بدقّة وتنسيق الشيفرة البرمجية حتى يسهل علينا قرائتها وتقديم إجابة أفضل لسؤالك. وبالنسبة للسؤال، إن الشيفرة البرمجية التي شاركتها لا تحوي أي أزرار أو معلومات عن الدخول لغرف الدردشة لديك، حيث يتم اختبار الصفحة في حال كانت chat أو lobby. لذا أعتقد أنه يجب عليك النظر إلى الملف الموجود ضمن المسار التالي: include('control/lobby.php');
-
يوجد العديد من البرامج المرادفة لبرنامج lumion ولكل منها ميزاته وخصائصه، من بعض الأمثلة التي يمكنك استخدامها: SketchUp Blender Cinema 4D V-Ray Enscape Twinmotion D5 Render Artlantis في حال كنت تبحث عن برنامج مجاني، يمكنك استخدام Blender كونه مفتوح المصدر.
- 2 اجابة
-
- 2
-
تدعم لارافل بشكل افتراضي نسخة إضافية من متغيرات البيئة خاصة بعمليات الاختبار، كما يتم نقل الجلسات sessions و الذاكرة المؤقتة cache لتصبح ضمن المصفوفات Arrays لتلبية حاجة الاختبارات دون التأثير على أماكن تخزين التطبيق الأساسية. تسمح لارافل باستخدام نسخة خاصة من متغيّرات البيئة من خلال إنشاء ملف ضمن جذر المشروع باسم .env.testing وعندها سيتم استخدام قيم المتغيّرات من هذا الملف عوضاً عن الملف .env عند تشغيل الاختبارات. ولتأكيد ذلك يمكنك تمرير الخيار التالي مع أوامر artisan: --env=testing يمكنك الاطلاع على صفحة الاختبار ضمن التوثيق الرسمي لمعرفة الخيارات المتاحة حسب الإصدار المستخدم في مشروعك.
-
يجب عليك ذكر لغة البرمجة أو إطار العمل الذي تستخدمه ضمن سؤالك لنستطيع مساعدتك بشكل أفضل، فالتطبيق يختلف تماماً من لغة لأخرى، وبفرض كنت تقصد أن تطبيقك يعمل على نظام Android، يمكنك طلب سماحية الوصول إلى جهات الاتصال من خلال إضافة سماحية الوصول التالية ضمن manifest: <uses-permission android:name="android.permission.READ_CONTACTS" /> أما فكرة الحل لاستدعاء بيانات جهات الاتصال يمكنك إنشاء نموذج model يحوي بداخله البيانات المطلوبة وبعد ذلك باستخدام ContentResolver يمكنك المرور على هذه البيانات وتطبيق النموذج عليها لاستخدامها فيما بعد أو نقلها إلى قاعدة البيانات. private void displayContacts() { ContentResolver cr = getContentResolver(); مؤشر للمرور على جهات الاتصال Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); if (cur.getCount() > 0) { while (cur.moveToNext()) { String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); if (Integer.parseInt(cur.getString( cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { Cursor pCur = cr.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{id}, null); while (pCur.moveToNext()) { String phoneNo = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); Toast.makeText(NativeContentProvider.this, "Name: " + name + ", Number: " + phoneNo, Toast.LENGTH_SHORT).show(); } pCur.close(); } } } } أما بالنسبة لنوع قاعدة البيانات، يمكنك استخدام أي نوع فلا مشكلة بذلك حسب خادم الويب لديك في حال كنت ترغب بمزامنة البيانات على الانترنت مع خادم الويب.
- 1 جواب
-
- 1
-
تخبرك رسالة الخطأ بعدم وجود مسار /user في خادم الويب لاستلام الطلب. تأكد من أنك قمت بتعريف المسار بشكل صحيح ضمن خادم الويب لاستقبال طلبات من نوع POST. ولمراقبة مثل هذه الأخطاء، يمكنك فتح نافذة network بدلاً من console ففيها المزيد من المعلومات حول request, response وأرقام رسائل الخطأ تظهر بشكل أوضح. الشيفرة الموجودة في الصور ناقصة ولكن أعتقد أنه لديك خطأ آخر في الحصول على بيانات حقول الإدخال، حاول طباعة المتغيّر FormName.value للتأكد من أنك تحصل على القيمة بالشكل الصحيح.
-
في حال كان قصدك تخزين الاستعلام كنص ضمن قاعدة البيانات، يمكنك ذلك من خلال إضافة خدمة إلى AppServiceProvider من خلال الاستماع إلى أي استعلام يجري على مستوى التطبيق: public function boot() { DB::listen(function($query) { //يمكنك استبدال عملية الطباعة إلى تخزين المتغيرات التي ترغب بها ضمن قاعدة البيانات Log::info( $query->sql, $query->bindings, $query->time ); }); } وفي بعض النسخ السابقة من لارافل يمكن الاستماع للحدث query من خلال الطريقة التالية: DB::listen(function($query) { \Log::info($query->sql); }); أو \Event::listen('illuminate.query', function($sql) { \Log::info($sql); }); ولكن عند الاستماع لأحداث قاعدة البيانات، يجب عليك إضافة متغيّر ما والتحقق منه قبل تخزين نتيجة الاستعلام في حال كان استعلام تحليلي أو استعلام عادي ضمن التطبيق لكي لا يتم تخزين الاستعلامات التحليلية (التي تنفّذ الحدث) ضمن قاعدة البيانات
- 2 اجابة
-
- 1
-
قد يظهر هذا الخطأ في لارافل نتيجة لعدّة أسباب ولكن غالباً مايكون السبب خطأ باستخدام العلاقات في قاعدة البيانات (مثل استخدام التابع with و whereHas)، لذلك تأكد من الشيفرة البرمجية التي تستخدمها في جلب البيانات في حال كان لديك جداول مرتبطة ببعضها بعلاقات. يمكنك مراجعة سجل الأخطاء في مشروعك لعلّه يساعدك في تتبع مكان وجود الخطأ ومعرفة المزيد من التفاصيل.
-
لايوجد قاعدة واحدة تطبق على جميع الشركات، يعود ذلك لقوانين العمل في البلد الذي تتواجد فيه الشركة أو قوانين الشركة نفسها، بعض الشركات قد تمنع العمل لمن هم دون السن القانونية، والبعض الآخر قد يسمح بذلك.
-
تسمح آلية التسلسل Serialization في جافا من تمثيل الكائنات بشكل سلسلة من البايت (Byte) والتي تحوي بيانات هذا الكائن ومعلومات عن أنواع البيانات المخزّنة فيه دون حفظ أي بيانات خاصة بالصف (Class) لسهولة تخزينه ضمن ملفات. أما استعادة هذه البيانات من الملفات تتم بعكس هذه العملية (Deserialization) حيث يتم تحويل هذه السلسلة إلى البيانات بشكلها الطبيعي مع إضافة بيانات الصفوف التي يشتق منها هذا الكائن. ولإجراء عملية التسلسل يتم استخدام الصفين: ObjectInputStream , ObjectOutputStream حيث يتيح كل منهما بعض التوابع لإجراء التسلسل وعكسه على الكائنات. مثال: import java.io.*; public class SerializeTest { public static void main(String [] args) { Student s = new Student(); s.name = "Anyname"; s.address = "any address"; s.SSN = 444; s.number = 11; try { FileOutputStream fileOut = new FileOutputStream("/storage/student.ser"); ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject(e); out.close(); fileOut.close(); System.out.printf("Serialized data is saved in /tmp/student.ser"); } catch (IOException i) { i.printStackTrace(); } } } ولاستعادة البيانات (عكس التسلسل Deserialization): import java.io.*; public class DeserializeTest { public static void main(String [] args) { Student s = null; try { FileInputStream fileIn = new FileInputStream("/storage/student.ser"); ObjectInputStream in = new ObjectInputStream(fileIn); s = (Student) in.readObject(); in.close(); fileIn.close(); } catch (IOException i) { i.printStackTrace(); return; } catch (ClassNotFoundException c) { System.out.println("Student class not found"); c.printStackTrace(); return; } //يتم الحصول على البيانات من الكائن s System.out.println("Deserialized Student:"); System.out.println("Name: " + s.name); System.out.println("Address: " + s.address); System.out.println("SSN: " + s.SSN); System.out.println("Number: " + s.number); } } يمكنك إيجاد المزيد من المعلومات من المصادر التالية:
-
تختلف طريقة تطبيق ذلك حسب المكتبات وأطر العمل التي تستخدمها والطريقة التي يتم فيها جلب البيانات من خادم الويب فهذه التفاصيل لم تذكرها في سؤالك. وفكرة الحل في حال كان يتم الاتصال بخادم الويب من خلال API: fetch("https://example/com").then( (res) => { return res.json(); } ).then( (data) => { let card = document.getElementById('order-card'); // للوصول إلى البطاقة المراد تغيير لون خلفيتها if(data.status === 'New'){ //اختبار حالة الطلب في حال كان جديد cart.style.backgroundColor = "green"; //تغيير لون خلفية العنصر أو البطاقة إلى اللون الأخضر }else if(data.status === 'Pending'){ cart.style.backgroundColor = "red"; } ..... } ) إذا كنت تحصل على مصفوفة من البيانات سيتوجب عليك أيضاً إضافة حلقة تكرارية للمرور على هذه البيانات، كما يوجد العديد من الطرق الأخرى وطرق أسهل في حال كنت تستخدم إطار عمل معيّن مثل React أو Vue أو حتى Jquery في طرف المستخدم.
- 1 جواب
-
- 1
-
نعم، عند تعلّم أي لغة برمجة يجب عليك أن تبدأ بأساسيات هذه اللغة، وإذا تخطيت الأساسيات ستواجه العديد من المشاكل أثناء تعلّمك ولن تستطع تحديد مكان المشكلة أو معرفة كيفية حلّها. يمكنك الاطلاع على المزيد من المعلومات التي قد تكون مشابهة لسؤالك:
- 1 جواب
-
- 1
-
حاول تطبيق الحل المذكور في التعليق السابق وسيتم امتداد طول العنصر ذو الصف tasks حسب طول العناصر الأبناء (المحتوى بداخله).
- 5 اجابة
-
- 1
-
لا أعتقد أنه يوجد تابع جاهز في جافا باسم readName وإنما getName (java.lang.Class.getName()) للحصول على اسم كائن (صف، واجهة، مصفوفة،..) بحيث يتم تمثيلها كصف Class مثال لطباعة اسماء الملفات: try { // إنشاء كائن من ملف File f = new File("f:\\program"); // الحصول على اسماء الملفات الموجودة ضمن مجلّد معيّن File[] files = f.listFiles(); // طباعة اسماء الملفات for (int i = 0; i < files.length; i++) { System.out.println(files[i].getName()); } } catch (Exception e) { System.err.println(e.getMessage()); }
- 1 جواب
-
- 1
-
السؤال غير واضح، هل يمكنك إرفاق صورة للنتيجة النهائية التي ترغب بتحقيقها؟ بشكل افتراضي خصائص الطول والعرض في CSS هي auto، ولذلك فإن السلوك الطبيعي هو ازدياد الطول والعرض للحاوية عند زيادة محتوى العناصر الأبناء، ولديك في الصف tasks قمت بتحديد الطول 50px، بإزالته أو بوضع القيمة التالية: .tasks { height: auto } سيعود للسلوك الطبيعي ولن يتم تحديد الطول بهذه القيمة.
- 5 اجابة
-
- 1
-
Django هو إطار عمل مفتوح المصدر لتطوير تطبيقات الويب من طرف الخادم Back-end بشكل أساسي، ويتيح أيضاً إنشاء وعرض قوالب واجهات المستخدم من طرف خادم الويب، ولكن مفهومه مختلف بعض الشيء عن أطر عمل واجهات المستخدم أو تطبيقات الصفحة الواحدة SPA. يمكنك مكاملة مشروعك المبني بواسطة Django باستخدام أي إطار عمل في واجهات المستخدم: React, vue, angular أو غيرها. فيتيح إطار العمل Django إمكانية التعامل مع أي إطار عمل في واجهات المستخدم.
- 2 اجابة
-
- 1
-
ينصح بتعلّم scratch عادةً لكي يتمكن الاشخاص العاديين و الذين لا يمتلكون اي خبرة برمجية من الدخول في عالم البرمجة وتعلّم الأساسيات وطرق كتابة التعليمات البرمجية، كما تتيح إنشاء مشاريع واقعية وعملية تسهّل فهم مبادئ البرمجة. ولكن لك حرية الاختيار في تخطيها في حال وجدت نفسك قادر على تعلّم البرمجة بطرق أخرى أو الدخول مباشرةً بلغات البرمجة الأكثر تعقيداً.
-
يمكنك الاطلاع على وسوم HTML من خلال موسوعة أكاديمية حسوب من خلال الرابط التالي: https://wiki.hsoub.com/HTML وبمجرّد قيامك بالبحث عن "وسوم HTML" على أي محرك بحث ستجد العديد من المصادر الأخرى
- 3 اجابة
-
- 1
-
لا يجب عليك حفظ الوسوم والرموز الخاصة في HTML، فهي كثيرة وإن كنت في بداية طريقك بتعلّمها ستجد صعوبة في حفظها. وهذا هو الحال بالنسبة لأي لغة برمجة أخرى أيضاً. يمكنك الاكتفاء الآن بفهمها ومعرفة طريقة عملها ومتى يتم استخدام كل منها ومع الوقت والتكرار في كتابتها ستجد نفسك حفظتها ويمكنك استخدامها مباشرةً دون العودة إلى المصادر.
- 3 اجابة
-
- 1
-
أهم تحديث يجب عليك القيام به في حال كنت تستخدم نسخة Laravel 9 هو تحديث اعتماديات composer ضمن الملف composer.json كالتالي: "laravel/framework": "^9.0" "nunomaduro/collision": "^6.1" وأيضاً إجراء التبديل التالي ضمن نفس الملف: facade/ignition نستبدله ب "spatie/laravel-ignition": "^1.0" وغالباً ستعمل هذه المشاريع دون أخطاء، وفي حال ظهور أي خطأ يمكنك العودة إلى التوثيق الرسمي وستجد كيفية معالجة هذا الخطأ من صفحة Upgrade Guide الموجودة في المقدّمة.
-
يمكنك رفع مشاريعك على github والاستفادة من خاصية github pages لعرض الواجهات والمواقع التي لديك، وفي حال لم ترغب باستخدام github يمكنك إنشاء موقعك الخاص وستحتاج لحجز اسم نطاق خاص بك في حال أردته أن يكون خاص (باسمك) واستضافة لرفع كافة مشاريعك ضمن هذا الموقع وهنا يمكنك البحث عن بعض الحلول المجانية أو المدفوعة التي تناسب حاجتك.