-
المساهمات
5256 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
52
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Adnane Kadri
-
أظن أن الاستعلام يحتوي جملة أخطاء هي: في INNER JOIN: يجب أن تكون الجداول المشاركة في الانضمام مفصولة بفراغ ويجب أن يكون هناك عبارة ON تحدد كيفية ربط الصفوف بين الجداول. UserGrop.Group: يبدو أن هناك خطأ في اسم الجدول. يجب أن يكون اسم الجدول هو UserGroup، وليس UserGrop. WHERE Email.EmailID: يجب عليك تحديد القيمة التي تريد البحث عنها في هذه العبارة. مثل Email.EmailID = 'some_value'. حل مقترح: SELECT Email.EmailID, Email.Email FROM Email INNER JOIN UserGroup ON Email.EmailID = UserGroup.EmailID WHERE Email.EmailID = 'some_value';
-
في هذا السياق، تستخدم علامة + كعامل للتحويل إلى النوع (Type Conversion). عندما تضع + قبل prompt(), يتم تحويل القيمة التي تم استرجاعها من دالة prompt() إلى نوع رقمي مهما كانت. فبون العلامة +، قيمة prompt() ستكون سلسلة نصية (String) حتى إذا قام المستخدم بإدخال رقم. ولكن باستخدام +، نقوم بتحويل القيمة إلى نوع رقمي مباشرة. يمكنك الاستزادة بالاطلاع على المقال:
- 4 اجابة
-
- 1
-
-
نعم، يُمكن لـ SQLite بطبيعة الحال التعامل مع اتصالات متعددة في الوقت نفسه. ولكن ينبغي أن يتم ذلك بحذر، لأن SQLite ليست قاعدة بيانات متكاملة متعددة المستخدمين بنفس الطريقة التي يمكن أن تكون فيها قواعد البيانات مثل MySQL أو PostgreSQL. في حالة SQLite، عندما يكون هناك اتصالين أو أكثر، يجب التأكد من التنسيق بينهم لتجنب التعارض.فـ SQLite يستخدم قفلا لحماية قاعد البيانات من الوصول المتعدد. في نفس الوقت، إذا كنت تحتاج إلى تطبيق ذي متطلبات أكثر تعقيدا للمستخدمين المتعددين، فقد تفضل النظر في استخدام نظام إدارة قواعد البيانات آخر مثل PostgreSQL أو MySQL.
- 3 اجابة
-
- 1
-
-
لا تزال تحتاج تحديث نهاية النطاق (end) عندما يكون العنصر الذي نبحث عنه أقل من العنصر في منتصف النطاق. وبنفس المنطق، تحديث بداية النطاق (start) عندما يكون العنصر الذي نبحث عنه أكبر من العنصر في منتصف النطاق. أيضا سوف تحتاج إضافة تحقق بعد الحلقة للتحقق مما إذا كان لم يتم العثور على العنصر. شيء آخر يجب عليك القيام به هو كسر الحلقة عند الحصول على العنصر. الناتج: arr = [2, 3, 4, 5, 6, 7, 8] start = 0 end = len(arr) - 1 n = int(input("Number: ")) while start <= end: mid = start + (end - start) // 2 if n == arr[mid]: print("Found") break # يجب إيقاف الحلقة بمجرد العثور على العنصر elif n < arr[mid]: end = mid - 1 # تحديث نهاية النطاق ليكون mid - 1 elif n > arr[mid]: start = mid + 1 # تحديث بداية النطاق ليكون mid + 1 if start > end: print("Not Found")
- 4 اجابة
-
- 1
-
-
بشكل أعم، هناك عدة حزم توفر واجهات لخدمات Google. ومن بين هذه الحزم، يمكن الإشارة إلى google-api-python-client و googlemaps كحزم مهمة تستخدم للتفاعل مع بعض خدمات Google. وهي مجموعة من المكتبات التي تتكامل مع باييثون للأغراض التي تستوفيها. فـ Google Maps Platform هي مجموعة من الخدمات التي تقدمها Google لتكامل خرائط Google ومعلومات الموقع في تطبيقات الويب والهواتف المحمولة والتطبيقات الأخرى. تقدم Google Maps Platform APIs للمطورين لديهم إمكانية إضافة ميزات مثل خرائط متقدمة، والتوجيه، والبحث عن الأماكن، والتشويق، والعديد من الخدمات الأخرى في تطبيقاتهم. وهو الأمر الذي يمكنك بوساطة هاته المكتبة القيام به في تطبيق بايثون.
- 2 اجابة
-
- 1
-
-
يمكنك مقاربة هاته الفكرة باضافة حقل يعنى بذلك في جدول المقالات، وليكن is_published ويحمل قيمة بوليانية تعبر عما ان كان المقال منشورا أو لا، أنشئ ملف تهجير جديد يضيف الحقل الى الجدول: php artisan make:migration add_is_published_to_articles_table --table=articles ثم ضع بداخل الملف المحتوى التالي: public function up() { Schema::table('articles', function($table) { $table->integer('is_published')->default(false); }); } الآن قم بتهجير الملف: php artisan migrate لاحقا، قم بعرض المقالات المنشورة فقط في الصفحات العامة التي يراها الزوار: $articles = Article::whereIsPublished(true)->get(); أنشئ ملف عرض لإدارة المقالات وأضف إليها محتوى مشابه: <form method="POST" action="/articles/{{ $article->id }}/update-status"> @method('PATCH') @csrf <input type="submit" value="تبديل الحالة" /> </form> أضف المسار الجديد الى ملف المسارات: Route::patch('/articles/{article}/update-status', function($article){ $article->update([ 'is_published' => !$article->is_published ]); }); هاته هي الفكرة بمجملها، يمكنك التوسع فيها أكثر عن طريق تنظيمها أو اضافة المزيد من الميزات أو لخدمة حالات استخدام اخرى.
-
ضف استعلاما جديدا تقوم فيه بطبيعة القيمة الملتقطة من الرسالة الأولى مضافا اليه كلمة welcome، مثال: masig = input("Enter your masig :") print('Welcome '+ masig) الناتج: weclome ahmed
-
تستخدم حصرا للحصول على قائمة تحتوي على الأسماء (المتغيرات والوحدات) المتاحة في النطاق الحالي. مثال: # مثال بسيط x = 10 y = "Hello, World!" # استخدام dir() للحصول على قائمة الأسماء names = dir() # طباعة الأسماء print(names) سيعرض هذا الكود قائمة بجميع الأسماء المتاحة في النطاق الحالي، والتي هي x و y. يمكنك أيضًا استخدام dir(object) للحصول على قائمة بالأسماء المرتبطة بكائن معين. على سبيل المثال: # مثال على استخدام dir() مع كائن my_list = [1, 2, 3] # استخدام dir() للحصول على قائمة الأسماء المرتبطة بالقائمة list_names = dir(my_list) # طباعة الأسماء print(list_names) هاته هي فكرتها باختصار.
- 3 اجابة
-
- 1
-
-
تأكد من أن لا تضع القيمة مباشرة بداخل الأقواس المعقوفة، النتيجة يجب أن تبدوا كـ: const binaryString = '0000011110000111111110000'; const decimalNumber = BigInt(`0b${binaryString}`); console.log(decimalNumber); او مباشرة: const decimalNumber = BigInt(`0b0000011110000111111110000`); console.log(decimalNumber);
-
إذا كنت تتعامل مع أرقام بت طويلة في JavaScript، يمكن أن يؤدي ذلك إلى فقدان الدقة في بعض الحالات بسبب تمثيل الأعداد في JavaScript باستخدام تنسيق 64 بت للأرقام الثنائية (double-precision floating-point format). لتجنب فقدان الدقة، يمكنك استخدام نوع BigInt على نحو: const binaryString = '0000011110000111111110000'; const decimalNumber = BigInt(`0b${binaryString}`); console.log(decimalNumber);
-
مرحبا عمر، نعم، يتوفر ذلك في الأكاديمية. يمكنك التواصل مع الإدارة من خلال مركز مساعدة أكاديمية حسوب.
-
جافاسكربت لا يمكنها القيام بالكتابة على الملفات، أفضل ما يمكن القيام به بهذا الخصوص هو قراءة محتويات الملف ثم التعديل عليها ككائن جافاسكربرت أو سلسلة نصية أو ما الى ذلك ، وأخيرا ارسالها الى الواجهة الخلفية وجزء الخادم ليتم توليد ملف أو استبدال محتويات الملف بالمحتويات الجديدة. قد يمكن أيضا استخدام NodeJS للقيام بالفكرة على نحو مباشر. مثال: const fs = require('fs'); // تخصيص اسيم الملف const filePath = 'example.txt'; // قراءة محتويات الملف fs.readFile(filePath, 'utf8', (err, data) => { if (err) { console.error(err); return; } // تعديل محتوى الملف const modifiedData = data.replace('oldText', 'newText'); // اعادة كتابة محتوى للملف fs.writeFile(filePath, modifiedData, 'utf8', (err) => { if (err) { console.error(err); return; } console.log('تم بنجاح.'); }); });
- 1 جواب
-
- 1
-
-
رغم أن الفكرة تبدوا غير ممكنة بعض الشيء، ولكن قد يمكن التوصل إلى موقع بسيط نسبيا في خلال هاته المدة الزمنية. وسيقتضي هذا تنظيما على مستوى عال من الدقة والالتزام. لنقل أنه يمكن توزيع المهام على النحو التالي: المجموعة A: ستنشغل بإدارة المشروع وتحليل متطلبات المشروع وبتوزيع المهام وتخطيط الصفحات بشكل رسومات وما نحو ذلك. غالبا ما ستكون مكونة من شخص واحد يجب أن يكون هو الأكثر اطلاعا على مجال الويب. المجموعة B: ستنشغل بتعلم وتطوير الواجهة الخلفية للموقع، بما في ذلك هندسة قواعد البيانات. المجموعة C : ستنشغل بتعلم وتطوير الواجهة الأمامية للموقع، وتحويل الهياكل والتخطيطات المقدمة من المجموعة A إلى هياكل ويب حقيقية وتنسيقها باستخدام CSS. وبما أن الوقت ضيق، يستوجب على كل مجموعة أن تقوم بالتدرب على ما تتعلمه على هذا المشروع بالفعل. قد تحتاجون بعض الوقت الآخر لتعلم تقنيات GIT لتسهيل العمل الجماعي بينكم.
- 7 اجابة
-
- 1
-
-
الإجابة الأبسط هي: استكمال مسارات الدورة الأخرى. بخصوص العمل المرفق، فهو عموما ممتاز اذ يظهر أنك قد قمت بفصل مكونات التطبيقات على نحو ممتاز بطريقة أشبه بالطريقة المتعرض لها في مسار أساسيات PHP من ذات الدورة. بنية المتحكمات لديك متماسكة وكذلك نماذج البيانات. يتم توصيف الكلاسات المجردة والواجهات على نحو صحيح يستوفي الغرض الأول منهما. ملفات العرض لديك تحتوي هياكل نظيفة وبنيات واضحة، عدى ملفات المكونات الفرعية، إذ يظهر أنها تحتوي على وسوم إغلاق تتعلق بمكونات أخرى، على سبيل المثال لا الحصر، مكون footer: <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script> </body> </html> هذا التوصيف لا يحترم مبدأ المسؤولية الواحدة، فملف المكون متوقف على ملف مكون آخر. وهو لن يكون صحيحا ما لم يتكامل مع مكون آخر. فكر بإصلاحها أو تضمين الوسوم بملف آخر. أيضا لا يبدوا أن المحتوى المحقون بهذا الملف يعبر عن تذييل footer، هل تقصد به تذييل الصفحة؟ أظن أن لا داعي منه ما لم يكن هنالك عنصر footer واضح ذي بنية واضحة تحتوي مثلا عبارة حقوق الملكية أو النشر. عدى ذلك، كل شيء ممتاز وقد أحسنت في العمل على ذلك.
- 2 اجابة
-
- 1
-
-
هاته ليست بمشكلة، فـ vs code لا يتوفر على دعم شامل لمحارف اللغة العربية، ولذلك تجدها تظهر بهذا الشكل، وينطبق ذلك على كل اللغات التي تستخدم محارف مثل اللغة العربية أو اتجاه كتابة RTL. عموما، هذا لن يؤثر على سير المشروع أو عمله. يمكنك التغاضي عن ذلك والاستمرار في العمل على مشروعك، ولكن ان شئت، قم بتغيير اسم مجلد المشروع الى لغة أجنبية -مثل الانجليزية- للتخلص من هاته المشكلة.
- 5 اجابة
-
- 1
-
-
أظن أن الأمر نفسه يخضع لعدة عوامل أخرى منها مثلا حجم المشروع، فبعض المشاريع تقتضي تنظيما وتخطيطا أكثر نظرا لكبرها وحجمها، في حين أن الأخرى لا تحتاج سوى ترسيم خطوط عريضة للبدء فيها. وعموما يتم الإعتماد على الخطوات التالية للتخطيط لبناء موقع: فهم المتطلبات التصميم الأولي للواجهة الأمامية تطوير الواجهة الأمامية تطوير النظم الخلفية الاختبار والتحسين التوسع أما بخصوص البدء بالعمل ما بين الواجهة الأمامية والخلفية، فانظر الأمر الذي تراه أسهل. ومن وجهة نظر شخصية، ارى أن العمل على الواجهة الأمامية أولى، نظرا لأنه يساعدك في تحليل مختلف حالات الاستخدام وتحديدها.
-
يمكنك التعامل مع فكرة التعميم عن طريق تمرير أكثر من وسيط إلى صنف الإشعار. مثال عملي: لنقل أننا نريد تخصيص عنوان الرسالة أو أي من معاملاتها، لنقم بتمرير العنوان نفسه كوسيط للباني: class TaskComplete extends Notification { use Queueable; private $details; private $task; private $title; /** * Create a new notification instance. */ public function __construct(Faculty $task, $title) { $this->task = $task; $this->title = $title; } الآن يمكنك استخدام هاته الخاصية من داخل الصنف: /** * Get the array representation of the notification. * * @return array<string, mixed> */ public function toDatabase($notifiable) { return [ 'id' => $this->task->Faculty_ID, 'title' => $this->title, 'User' => Auth::user()->name, 'state' => 0 ]; } الآن ما عليك إلا تخصيص قيمة لعنوان الإشعار بحسب المكان الذي تقوم فيه باستدعاء الشيفرة المعنية. نفس الشيء يمكنك عمله مع أي فكرة يمكنك انطلاقا منها التوسع في تخصيص هذا الصنف. مثل تخصيص المحتوى أو غيرهأ.
-
عندما تقوم بتثبيت مكتبة على النظام النشغيل (مثل باستخدام مدير حزم مثل Composer لـ PHP أو npm لـ Node.js)، فإنك تجعل المكتبة متاحة لجميع المشاريع على النظام. هذا يعني أنك تستفيد من المكتبة في مشاريع متعددة دون الحاجة لتكرار التثبيت. يمكن أن تكون هناك تبعات إذا تم تحديث المكتبة على مستوى النظام النشغيل وأثر ذلك على جميع المشاريع. أما عندما تقوم بتثبيت مكتبة داخل بيئة برمجية (مثل إنشاء بيئة افتراضية باستخدام virtualenv في Python)، فإنك تعزل المكتبة عن مشروعك وتجعلها متاحة فقط داخل هذه البيئة. الأمر الذي يساعد بطبيعة الحال في تجنب تعارض الإصدارات والتأكد من استدعاء الإصدار المحدد للمكتبة. يمكن أيضًا إعادة إنشاء بيئات برمجية مختلفة لمشاريع مختلفة تعتمد على إصدارات مختلفة من المكتبات.
- 2 اجابة
-
- 1
-
-
كفكرة، يمكنك حفظ التواريخ بالتاريخ الميلادي على مستوى طبقة البيانات وقواعد البيانات ثم عرضه بالتاريخ الهجري أو الميلادي على مستوى ملفات العروض. يمكنك الاستعانة بالمكتبات التي تهتم بالتحويل من وإلى التاريخ الهجري من مثل alkoumi/laravel-hijri-date في لارافيل. مثال عملي: ثم بتثبيت الحزمة: composer require alkoumi/laravel-hijri-date أضف موفر الخدمة إلى ملف app.php لمصفوفة providers: 'providers' => [ // ... Alkoumi\LaravelHijriDate\LaravelHijriDateServiceProvider::class, ]; قم باستعمالها في ملفات العروض على نحو: <p> {{ Hijri::FullDate($post->created_at) }} </p>
- 2 اجابة
-
- 1
-
-
جرب استعمال findByIdAndRemove بدلا عن remove للحذف، انتبه الى تمرير المعامل اللازم: await Image.findByIdAndRemove(req.params.photoId)
- 4 اجابة
-
- 1
-
-
المشكلة في الكود الخاص بك تكمن في السطر التالي: await post.remove; فبدلا من استخدام remove كخاصية سيجب عليك استعمالها كتابع: await post.remove(); احفظ الملف ثم انظر ما تم ذلك.
- 4 اجابة
-
- 1
-
-
الطريقة الأبسط لذلك هي عن طريق: فك ضغط الملف في مجلد htdocs الكائن بمجلد xampp في قرص C (انتبه إلى أن ذلك يقتضي أن يكون xampp مثبتا لديك). قم بفتح لوحة تحكم xampp وقم بتفعيل apache و mysql. الآن قم بالتصفح عبر المتصفح إلى: localhost/العالمي
-
بغض النظر عن المحتوى الداخلي للشريحة إلا أن فكرة عارض الشرائح غالبا ما تكون مماثلة لبعضها، وفيما يلي بعض الخطوات العامة لها: قم بإعداد هيكلة عارض الشرائح بشكل مناسب، بحيث يتموضع عدد من الشرائح داخل حاوية واحدة. قم بإضفاء التنسيقات المناسبة وأعط الحاوية وكل عنصر شريحة تنسيقا مناسبا، ونفس الشيء بطبيعة الحال بالنسبة لأزرار Next و Prev. قم بإضافة أحداث جافاسكربت اللازمة، فعند الضغط على Next يتم المرور الى الشريحة التالية بناءا على فهرس الشريحة وترتيبها. والأمر ذاته بالنسبة لزر Prev - طبعا فإنه يمكنك التحكم في طريقة المرور لهاته الشريحة، فقد يكون انزلاقا ببعض تنسيقات css أو الأبسط تماما: اظهار الشريحة المفعلة واخفاء كل ما هو دونها. مثال: <!DOCTYPE html> <html> <head> <style> .slide { display: none; } </style> </head> <body> <div class="slide">Slide 1 - Video 1</div> <div class="slide">Slide 2 - Video 2</div> <button id="prev">Previous</button> <button id="next">Next</button> <script> let currentSlide = 0; const slides = document.querySelectorAll('.slide'); function showSlide(n) { slides[currentSlide].style.display = 'none'; currentSlide = (n + slides.length) % slides.length; slides[currentSlide].style.display = 'block'; } document.getElementById('prev').addEventListener('click', () => showSlide(currentSlide - 1)); document.getElementById('next').addEventListener('click', () => showSlide(currentSlide + 1)); showSlide(currentSlide); </script> </body> </html>
-
وعليكم السلام، نعم، يمكنك بطبيعة الحال إنشاء موقع ووردبريس دون الحاجة إلى الإضافات المدفوعة أو برمجة مخصصة. اذ أن ووردبريس يأتي مع العديد من الميزات والقوالب المجانية التي يمكن تخصيصها واستخدامها لبناء معظم أنواع المواقع. هذا يتطلب فقط معرفة جيدة بإدارة المحتوى والتخصيص ومعرفة واسعة بالاضافات الجيدة والشائع استعمالها. بخصوص مصادر وكتب لاحتراف وتعلم ووردبريس نذكر مثلا: هنا بعض المصادر والكتب التي يمكن أن تساعدك في احتراف ووردبريس: الموقع الرسمي WordPress.org: يحتوي على مستندات وأدلة مفصلة حول كيفية استخدام وتخصيص ووردبريس. مدونة WPBeginner: توفر مقالات وشروحات مفصلة حول مواضيع متعددة في ووردبريس. الكورسات المنشورة على Udemy و Coursera: تحتوي على دورات عبر الإنترنت حول تطوير ووردبريس وتخصيصه. المقالات المنشورة على أكاديمية حسوب.
-
مرحبا أحمد، ليس بالضرورة، فالاختبار يكون بصورة أشمل ليتم اختبارك في مواد علمية مختلفة تم التطرق إليها في الدورة، وقد لا يكون ذلك بالضرورة عن لغة برمجية واحدة. يجب التأكد أولا من استيفاء الطالب لشروط الامتحان والحصول على الشهادة وهي: إتمام أربعة مسارات تعليمية على الأقل من الدورة التطبيق العملي مع المدرب، والاحتفاظ بالمشاريع العملية الناتجة لإرسالها للمراجعة رفع المشاريع على حسابك على GitHub بعد ذلك، يجب على الطالب مراسلة فريق الدعم وابداء نيته باجتياز الاختبار. أين سيتم تحديد موعد للطالب لإجراء محادثة صوتية لمدة 30 دقيقة يتم فيها مناقشة ما تم التعرض له خلال الدورة بجانب امتحانه وسؤاله أسئلة متفرقة عن الدورة. بعد هذا، سيتم تحديد مشروع تخرج مرتبط بما تعلمه يقوم به الطالب خلال فترة محددة. سيتم بعد تقديم المشروع، مراجعته وارشاد الطالب الى أماكن القصور أو تقديم الشهادة له والتخرج ببساطة. يمكنك الإطلاع أكثر على تفاصيل الامتحان والحصول على الشهادة من هنا.
- 1 جواب
-
- 1
-
