-
المساهمات
5650 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
11
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو عبدالباسط ابراهيم
-
عند تحريك عنصر مسار (path) في SVG يفضل استخدام JavaScript بدلاً من CSS. يمكن استخدام مكتبة JavaScript مثل GreenSock (GSAP) أو anime.js لتحقيق ذلك بسهولة. فيما يلي مثال يوضح كيفية تحريك عنصر مسار (path) في SVG باستخدام GreenSock: HTML: <svg width="200" height="200"> <path id="myPath" d="M10 10 H 90 V 90 H 10 L 10 10" stroke="black" stroke-width="2" fill="none" /> </svg> JavaScript: // تحديد العنصر path الذي يراد تحريكه const myPath = document.querySelector('#myPath'); // تحديد مسار الحركة الذي يراد تطبيقه على العنصر path const motionPath = MorphSVGPlugin.pathDataToBezier(myPath.getAttribute('d'), {align: myPath}); // تحديد مدة وتأخير الحركة const tl = gsap.timeline({repeat: -1, yoyo: true, delay: 1}); tl.to('#myCircle', { duration: 2, motionPath: { path: motionPath, align: myPath, autoRotate: true } }); تتضمن هذه الحركة تحريك دائرة (circle) على طول مسار الـ path. يتم استخدام `MorphSVGPlugin` من GSAP لتحويل مسار الـ path المحدد إلى مسار منحنى يمكن استخدامه في تحريك الدائرة. يتم تطبيق الحركة باستخدام `motionPath` من GSAP، حيث يتم تحديد المسار الذي يجب على الدائرة اتباعه. يمكن تعديل قيم `duration` و `delay` و `repeat` و `yoyo` و `autoRotate` حسب الحركة التي تريدها. إذا كنت تريد استخدام العديد من ال animation يفضل استخدام مكتبة GSAP حيث توفر هذه المكتبة العديد من مميزات الرائعة وتسهل عليك تنفيذ ال animation بشكل كبير
- 3 اجابة
-
- 1
-
-
هناك العديد من خدمات API المجانية المتاحة لقواعد بيانات الأفلام، ومن بينها: The Movie Database (TMDb) API: يوفر هذا الAPI مجموعة كبيرة من البيانات المتعلقة بالأفلام، بما في ذلك أسماء الأفلام والممثلين والإخراج والتقييمات والملصقات الخاصة بها. OMDB API: يتيح هذا الAPI الوصول إلى بيانات الأفلام من مصادر متعددة، بما في ذلك IMDB وRotten Tomatoes وغيرها. The Open Movie Database (TOMDB) API: يوفر هذا الAPI بيانات مفصلة حول الأفلام، مثل الأسماء والممثلين والإخراج والتقييمات والملصقات الخاصة بها. MovieLens API: يوفر هذا الAPI بيانات مفصلة حول الأفلام، بما في ذلك التقييمات والتصنيفات والمزيد. IMDB API: يتيح هذا الAPI الوصول إلى بيانات IMDB، بما في ذلك الأسماء والممثلين والإخراج والتقييمات والملصقات الخاصة بالأفلام. ولكن الأفضل API The Movie Database (TMDb) و The Open Movie Database (TOMDB) كليهما يوفران بيانات شاملة حول تقييمات الأفلام. يستخدم TMDb نظام تقييم يعتمد على تصويت المستخدمين، حيث تتراوح النتائج بين 0 و 10. بالمقابل، يوفر TOMDB تقييمات من مصادر متعددة، بما في ذلك Rotten Tomatoes و IMDB و Metacritic. كلا الAPI يوفران مجموعة واسعة من البيانات حول تقييمات الأفلام، بما في ذلك المعدلات المتوسطة وتقييمات المستخدمين وتقييمات النقاد. يوفر TMDb أيضًا بيانات إضافية حول شعبية الأفلام والأفلام الموصى بها والأفلام الرائجة. في النهاية، تعتمد الخيار بين هذين الAPI على الاحتياجات الخاصة بك والميزات التي تحتاجها لتطبيقك. من الجيد مراجعة الوثائق لكل API لتحديد أيهما يلبي احتياجاتك بشكل أفضل.
- 3 اجابة
-
- 1
-
-
يجب أن تعرف أولاً الفرق بين المتغيرات والمعاملات حتى تستطيع الإجابة بنفسك المتغيرات هي عبارة عن مساحات في الذاكرة يتم تخصيصها لتخزين القيم والبيانات التي يمكن استخدامها في البرنامج. يمكن تعريف المتغيرات باستخدام var أو let أو const، ويمكن تخزين قيم مختلفة في المتغيرات خلال تشغيل البرنامج. ويمكن الوصول إلى المتغيرات في أي مكان في نطاق البرنامج، حيث يمكن تغييرها أو استخدامها في العمليات الحسابية أو أي عملية أخرى. مثال: let x = 5; let y = 10; let z = x + y; console.log(z); // سيظهر في النتيجة القيمة 15 في هذا المثال، تم تعريف المتغيرات "x" و "y" و "z" باستخدام let، وتم تخزين القيم 5 و 10 في المتغيرات "x" و "y" على التوالي. ثم تم إجراء عملية الجمع بين "x" و "y" وتخزين النتيجة في المتغير "z". وأخيراً تم استخدام دالة console.log() لإظهار قيمة المتغير "z" في النتيجة. أما المعاملات، فهي قيم تمرر إلى دالة أثناء استدعائها، ولا يمكن تغييرها داخل الدالة. يتم تعريف المعاملات بوضعها بين قوسين في تعريف الدالة، ويتم استخدامها داخل الدالة لإجراء العمليات الحسابية أو الإجراءات الأخرى التي تحتاج إلى تلك القيم. عند استدعاء الدالة، يتم تمرير المعاملات اللازمة لتلك الدالة بين القوسين. مثال: function multiply(num1, num2) { return num1 * num2; } let result = multiply(5, 10); console.log(result); // سيظهر في النتيجة القيمة 50 في هذا المثال، تم تعريف الدالة "multiply" التي تأخذ معاملين "num1" و "num2" وتقوم بإجراء عملية الضرب بينهما وإرجاع النتيجة. ثم تم استدعاء الدالة "multiply" وتمرير القيم 5 و 10 كمعاملات لها، وتم تخزين النتيجة في المتغير "result". وأخيراً تم استخدام دالة console.log() لإظهار قيمة المتغير "result" في النتيجة. في النهاية، تستخدم المتغيرات لتخزين القيم والبيانات التي يمكن تغييرها أثناء تشغيل البرنامج، بينما تستخدم المعاملات لتمرير القيم للدوال أثناء استدعائها، ولا يمكن تغييرها داخل الدالة.
-
يمكنك الإعلان في دول أخرى بالطبع و:ثر من ذلك حيث أن سناب شات توفر خيارات متعددة للاستهداف المستندة إلى البيانات الديموغرافية والسلوكية والموقعية والاهتمامات والسلوك الشرائي والعديد من العوامل الأخرى. فيما يلي بعض الخيارات المتاحة للاستهداف على سناب شات: الاستهداف الديموغرافي: يمكنك استهداف الفئات العمرية والجنسية والموقعية واللغوية والتعليمية والاجتماعية والاقتصادية والعديد من العوامل الأخرى الديموغرافية. الاستهداف السلوكي: يمكنك استخدام البيانات السلوكية مثل الاهتمامات والعادات الشرائية والسلوك الاستهلاكي والتصفح على الإنترنت والعديد من العوامل الأخرى لاستهداف الجمهور المناسب. الاستهداف الموقعي: يمكنك استخدام البيانات الموقعية لاستهداف الجمهور في مناطق معينة أو دول معينة أو حتى حول متاجرك أو مواقعك أو مكاتبك. الاستهداف بناءً على الجمهور المشابه: يمكنك استخدام البيانات الخاصة بالجمهور المشابه لجمهورك الحالي لاستهداف المستخدمين الذين يتمتعون بصفات مماثلة لجمهورك الحالي. الاستهداف بناءً على العلاقات الاجتماعية: يمكنك الاستهداف بناءً على العلاقات الاجتماعية، مثل الأصدقاء المشتركين أو المتابعين لحسابات معينة أو الأشخاص الذين تتفاعل معهم في التطبيق. علاوة على ذلك، يمكنك استخدام أدوات الإعلان على سناب شات مثل Snap Pixel وLookalike Audiences و Snapchat Measurement لتحسين استهداف الجمهور وقياس أداء حملتك الإعلانية. يمكنك الإطلاع على المزيد من المعلومات من خلال موقع snapchat من هذا الرابط
-
يمكن استخدام الصور في React بطريقة مختلفة عن الأسلوب المذكور في السؤال. يمكن استخدام import لاستيراد الصورة وإضافتها كعنصر img . مثال: import MyImage from '../images/image.png'; function App() { return ( <div> <img src={MyImage} /> </div> ); } إذا واجهت مشكلة "the request of a dependency is an expression" عند استخدام require يمكن حل المشكلة عن طريق استخدام require خارج JSX وتخزين النتيجة في متغير واستخدامه في العنصر img. مثال: import MyImage from '../images/image.png'; function App() { const imagePath = require('../images/image.png').default; return ( <div> <img src={imagePath} /> </div> ); } ملاحظة: يجب استخدام .default مع require لاستخراج المسار الصحيح للصورة.
-
التعديلات التي يجب تنفيذها نتيجة الإصدار الأحدث react-router-dom v6.10 هي كالتالي استخدام العنصر element بدلاً من component في Route: في react-router-dom v6، استخدمت العناصر element بدلاً من component في Route. لذلك، يجب تعديل الكود ليستخدم العنصر element على النحو التالي: <Route path="/" element={<App />} /> <Route path="/btn_test" element={<BtnTest />} /> يفضل تعديل اسم الملف: تم استخدام اسم ملف btn_test لمكون BtnTest. ومن المفترض أن يتبع معايير تسمية الملفات في React والتي تفرض أن يتم استخدام CamelCase لتسمية الملفات. لذلك، يجب تغيير اسم الملف إلى BtnTest. استخدام Navigate بدلاً من Redirect: في react-router-dom v6، يجب استخدام Navigate بدلاً من Redirect. لذلك، يجب تعديل الكود ليستخدم Navigate على النحو التالي: <Route path="*" element={<Navigate to="/" replace />} /> في react-router-dom v6، تم إلغاء Switch واستبداله بـ Routes، والذي يعمل بطريقة مشابهة لكنه يستخدم بنية أكثر تركيزًا على العناصر الفرعية والتحكم في المسارات.
- 3 اجابة
-
- 1
-
-
يمكنك تنفيذ المطلوب بالعديد من الوسائل والطرق ولكن الأسهل والأفضل هو استخدام إطار عمل لل javascript مثلاً react والتالي هو مثال عند الضغط على زر "Add Item"، يجب أن تقوم بقراءة القيم الحالية لحقول الإدخال (اسم المنتج، الكمية، السعر) وإضافتها إلى قائمة العناصر items باستخدام دالة setItems. بعد ذلك، يمكنك استدعاء دالة handleTotal لإعادة حساب المجموع الإجمالي بناءً على العناصر الجديدة التي تمت إضافتها. لتحقيق ذلك، يمكنك استخدام الدالة handleAddItem كما يلي: const handleAddItem = () => { const itemName = document.getElementById('new-item').value; const quantity = document.getElementById('quantity').value; const price = document.getElementById('price').value; const newItem = { name: itemName, quantity: parseInt(quantity), price: parseFloat(price) }; setItems([...items, newItem]); handleTotal(); }; بالتأكيد لا تنسى تعريف المتغيرات اللازمة للتطبيق كما أن الدالة handleTotal ستكون مثل تلك الأكواد const handleTotal = () => { let sum = 0; for (let i = 0; i < items.length; i++) { sum += parseFloat(items[i].price) * items[i].quantity; } setTotal(sum); }; ثانياً إضافة حقول الإدخال والزر الخاص بإضافة المنتج، كما يلي: <div> <label htmlFor="new-item">New Item: </label> <input type="text" id="new-item" /> <label htmlFor="quantity">Quantity: </label> <input type="number" id="quantity" /> <label htmlFor="price">Price: </label> <input type="number" id="price" step="0.01" /> <button onClick={handleAddItem}>Add Item</button> </div> تقوم هذه الأكواد بإنشاء حقول الإدخال لإضافة اسم المنتج والكمية والسعر، وزر "Add Item" الذي يقوم بتشغيل الدالة handleAddItem عند النقر عليه. المثال السابق يوضح الخطوات ولكن سيتم التعديل على الأكواد حتى تتناسب مع التطبيق الخاص بك كما أن يفضل الإطلاع على المشاريع الموجودة ب github ويمكن البحث عن invoice generator + اللغة المناسبة كما في هذا المشروع
-
العنوان هو نص يصف محتوى الإعلان الذي تحاول نشره على سناب شات. يتم استخدام العنوان لجذب انتباه المستخدمين وجعلهم يرغبون في النقر على الإعلان والتفاعل معه. يجب أن يكون العنوان واضحًا وموجزًا، ويحتوي على المعلومات الأساسية حول المنتج أو الخدمة التي تروج لها. كما ينبغي تجنب استخدام الرموز والأحرف الغير صالحة في العنوان، والتأكد من أن العنوان يتوافق مع متطلبات سناب شات المحددة. على سبيل المثال، يمكن أن يكون عنوان إعلان عن منتجات الأزياء "تخفيضات الربيع: تسوق الآن واحصل على خصم 50٪" وعند كتابة العنوان يجب عليك إتباع صيغة مع الشروط التي ذكرها مصطفى في التعليق السابق
-
لربط نموذج تسجيل الدخول في Angular بقاعدة البيانات في Laravel: إنشاء API في Laravel: يمكن استخدام Laravel Passport لإنشاء API موثوق بها في Laravel. يجب تثبيته باستخدام Composer وتكوينه وفقًا للتوثيق الرسمي. بعد ذلك، يمكن إنشاء وظيفة في Laravel لإرجاع بيانات تسجيل الدخول باستخدام Passport. إنشاء ملف خدمة (service) في Angular: يمكن استخدام مكتبة HttpClient من Angular لإجراء مكالمات API. يمكن إنشاء ملف خدمة في Angular للاتصال بـ API الخاص بـ Laravel باستخدام HttpClient. استخدام نموذج تسجيل الدخول في Angular:يمكن استخدام نموذج تسجيل الدخول في Angular للحصول على بيانات تسجيل الدخول من المستخدم باستخدام توجيه وظيفة إرسال النموذج. إنشاء وظيفة في Angular لإرسال بيانات تسجيل الدخول إلى API الخاص بـ Laravel: باستخدام HttpClient. يجب تضمين بيانات تسجيل الدخول بشكل صحيح في الجسم الذي يتم إرساله إلى API. كتابة وظيفة في Laravel للتحقق من صحة بيانات تسجيل الدخول: المرسلة من Angular. يجب التحقق من صحة اسم المستخدم وكلمة المرور باستخدام وظيفة التحقق المدمجة في Laravel. استخدام البيانات المسترجعة من API الخاص بـ Laravel: بعد التحقق من صحة بيانات تسجيل الدخول في Laravel، يمكن استخدام البيانات المسترجعة من API لتسجيل الدخول في التطبيق الخاص بك. هذه الخطوات الرئيسية لتنفيذ المطلوب يمكنك الإطلاع على المصادر التالية للمزيد من المعلومات 1 و 2 و 3
-
بالإضافة للشرح السابق يمكنك ل f-strings في Python توفر عدة مزايا أخرى، من بينها: الدعم الكامل للتعابير الرياضية والتعابير الشرطية والدوال الرياضية وغيرها من التعابير المعقدة. إمكانية استخدام f-strings في أي سياق في Python، بما في ذلك دوال الطباعة (print) ورسائل التنبيه (assert) والأوامر الشرطية (if-else) وغيرها. إمكانية استخدام f-strings لتكوين أسماء المتغيرات والدوال والكائنات الأخرى باستخدام تعابير Python. إمكانية استخدام f-strings لإنشاء نصوص ديناميكية ومتغيرة تعتمد على البيانات التي تم إدخالها في الوقت الحالي. وللمزيد من التفاصيل يمكنك قراءة إجابة هذا السؤال حيث يوضح الشرح بالأمثلة
-
سأقدم لك حلاً بإزالة الجزء المتعلق بـ @foreach؛ سنستخدم طريقة أخرى للتبديل بين اللغتين. إنشاء دالة JavaScript للتحكم في تبديل اللغة وإعادة توجيه المستخدم إلى الرابط المقابل للغة المطلوبة. الكود الجديد: //head @if (App::getLocale() == 'en') <link href="{{ asset('css1/rtl.css') }}" rel="stylesheet"> @else <link href="{{ asset('css1/ltr.css') }}" rel="stylesheet"> @endif //body <a id="toggleLanguage" href="#" class="language_icon"> <i class="fa fa-language" style="font-size: 48px"></i> </a> <script> document.getElementById('toggleLanguage').addEventListener('click', function(e) { e.preventDefault(); let currentLocale = '{{ App::getLocale() }}'; let newLocale = currentLocale === 'en' ? 'ar' : 'en'; let newUrl = '{{ LaravelLocalization::getLocalizedURL(newLocale, null, [], true) }}'; window.location.href = newUrl; }); </script> في هذا الكود، قمنا بإضافة معرف id للرابط الخاص بالأيقونة وإزالة السمة hreflang والسمة href، حيث سنقوم بتعيين الرابط من دالة JavaScript. ثم قمنا بإنشاء دالة تستمع لحدث النقر على الرابط. عند النقر، تقوم بتحديد اللغة الجديدة التي نريد التبديل إليها بناءً على اللغة الحالية، وتعيين الرابط المقابل للغة الجديدة، وأخيراً إعادة توجيه المستخدم إلى هذا الرابط. بهذا الحل، يمكن للمستخدمين تبديل اللغة بالضغط على الأيقونة نفسها.
-
هناك العديد من الدوال المتاحة في لغة C التي يمكن استخدامها لتحقيق نفس الغرض. هناك أيضًا طرق مختلفة لتنفيذ نفس الحلقة، الأمر يتوقف على الأسلوب الذي يفضله المبرمج. طريقة أخرى وهي تنفيذ المطلوب بدون استخدام الدالة strlen() والدالة isupper() كما يلي تبدأ الطريقة بتعريف مصفوفة sentence من نوع char بحيث تكون الحجم يساوي 51، وذلك لتمكين إدخال جملة تصل إلى 50 حرفًا، بالإضافة إلى الحرف النهائي الذي يعرف بـ null character والذي يتم إضافته تلقائيًا في نهاية الجملة. ثم يتم تعريف متغير capital_count من نوع int ويتم تعيينه إلى القيمة الصفرية بدايةً. ثم يقوم البرنامج بطباعة رسالة إلى المستخدم تطلب منه إدخال جملة للفحص، وذلك باستخدام الدالة printf(). ثم يتم تحديد المدخلات التي يقوم المستخدم بإدخالها باستخدام الدالة scanf()، والتي تقوم بقراءة المدخلات من المستخدم حتى يصل إلى حرف السطر الجديد \n أو الحد الأقصى للطول الذي يساوي 50 باستخدام التحكم في النسق %50[^\n]، وتخزين الجملة المدخلة في المصفوفة sentence. ثم يتم تكرار جميع الحروف في الجملة باستخدام حلقة for، والتي تستمر حتى يتم الوصول إلى الحرف النهائي null character. وفي كل تكرار للحلقة، يتم فحص الحرف الحالي إذا كان حرفًا كبيرًا أم لا باستخدام المقارنة بين الحرف وحروف الأبجدية الكبيرة، وذلك باستخدام العبارة if(sentence[i] >= 'A' && sentence[i] <= 'Z')، وفي حال كان الحرف كبيرًا يتم زيادة قيمة متغير capital_count بمقدار 1. وفي النهاية، يتم طباعة عدد الأحرف الكبيرة الموجودة في الجملة باستخدام الدالة printf() والتي تقوم بعرض قيمة متغير capital_count باستخدام النسق %d، وذلك باستخدام العبارة printf("Number of capital letters: %d\n", capital_count);، ويتم إرجاع القيمة 0 في نهاية البرنامج باستخدام العبارة return 0;.
-
الحل الوحيد هو ان العميل يقوم بمراسلتك حتى يصبح جاري التنفيذ حتى الدعم الفني لا يقدر ان يساعدك حيث أن مؤخراً لا يقوم الدعم الفني باستلام الخدمة بدلاً من المشتري كما كان سابقاً لذلك ليس هناك حل آخر غير تحويل الخدمة من حالة بانتظار التعليمات وذلك برد العميل برسالة أنصحك مستقبلاً بإرسال رسالة للعميل في صفحة طلب الخدمة ، الطلب منه كتابة أي رسالة في طلب الخدمة حتى تتحول حالة الطلب من بانتظار التعليمات إلى جاري التنفيذ و تتمكن من إرسال طلب استلام له كما أن يجب عليك عدم تنفيد الخدمة إلا بعد تفعيل المشتري لجميع الطلبات التي اشتراها
-
لاحظت أنك قمت بإضافة علامة + قبل قيمة userInput.value في السطر الأخير من الدالة myFunction()، وهذا السبب في ظهور قيمة 0 عند تقديم النموذج بدون قيمة في حقل الإدخال. يمكنك حل هذه المشكلة عن طريق إضافة شرط يتحقق من أن حقل الإدخال ليس فارغًا قبل تعيين قيمته إلى العنصر innerHTML. وبالإضافة إلى ذلك، يمكنك إزالة السطر الذي يحتوي على الدالة myFunction() من زر الإرسال (submit) لأنها لن تحل المشكلة التي واجهتك. ولحل هذه المشكلة يمكنك استخدام الكود التالي: <article> <form id="form" action="/" method="get"> <h1>Hello, write your name</h1> <br> <div class="inputBox"> <input id="userInput" name="Name" type="text" required> <span>Last Name</span> <br> <br> <button type="submit" required>Submit</button> <h1 id="printName"></h1> </div> </form> </article> <script> const form = document.querySelector("#form"); const userInput = document.querySelector("#userInput"); const printName = document.querySelector("#printName"); form.addEventListener("submit", function(event) { event.preventDefault(); if (userInput.value.trim() !== "") { printName.innerHTML = userInput.value; } else { printName.innerHTML = ""; userInput.setCustomValidity("Please enter your name"); userInput.reportValidity(); userInput.focus(); } }); </script> في هذا الكود، قمت بإضافة مستمع حدث submit إلى النموذج (form) باستخدام الدالة addEventListener()، والتي تتيح لك تنفيذ دالة عند حدوث الحدث. ثم، وضعت الشرط الذي يتحقق من أن حقل الإدخال ليس فارغًا باستخدام الدالة trim() التي تزيل الفراغات العائمة من النص. إذا كان حقل الإدخال غير فارغٍ، ستعيد الدالة قيمة الإدخال إلى العنصر innerHTML، وإذا كان فارغًا، يتم إزالة النص من العنصر innerHTML وتعيين رسالة الخطأ المخصصة (setCustomValidity()) إلى "Please enter your name". ثم يتم استدعاء الدالة reportValidity() ليتم عرض رسالة الخطأ المخصصة، ويتم وضع التركيز على حقل الإدخال باستخدام الدالة focus().
-
في البرمجة، تشير كلمة "الكائن" (Object) إلى أي شيء يمكن التلاعب به في البرنامج. ويمكن تقسيم الكائنات في البرمجة إلى قسمين رئيسيين: الكائنات القابلة للتكرار (Mutable Objects) والكائنات غير القابلة للتكرار (Immutable Objects). الكائنات القابلة للتكرار (Mutable Objects): هي الكائنات التي يمكن تغييرها أو تعديلها بعد إنشائها. وهذا يعني أن البرنامج يمكنه تغيير قيم الكائنات القابلة للتكرار خلال تنفيذه. وبعض أمثلة الكائنات القابلة للتكرار تشمل: القوائم (Lists)، والمصفوفات (Arrays)، والمجموعات (Sets)، وقواعد البيانات (Databases). الكائنات غير القابلة للتكرار (Immutable Objects): هي الكائنات التي لا يمكن تغييرها بعد إنشائها. وهذا يعني أن البرنامج لا يمكنه تعديل قيم الكائنات غير القابلة للتكرار. وبعض أمثلة الكائنات غير القابلة للتكرار تشمل: الأعداد (Numbers)، والسلاسل (Strings)، والتفاصيل (Tuples)، والقواميس (Dictionaries). ويمكن للمبرمج استخدام الكائنات القابلة للتكرار في العديد من الأماكن، مثل عمليات الإضافة أو الحذف في البيانات، بينما يمكن استخدام الكائنات غير القابلة للتكرار في المواقف التي يحتاج فيها البرنامج إلى تمثيل كائن فريد من نوعه، مثل الإسم أو العمر أو الوظيفة. هنا بعض الأمثلة على الكائنات القابلة للتكرار والغير القابلة للتكرار في Python: الكائنات القابلة للتكرار: القوائم (Lists) يمكن إنشاء قائمة جديدة واضافة عنصر جديد إليها باستخدام الدالة append(): my_list = [1, 2, 3, 4] my_list.append(5) print(my_list) # [1, 2, 3, 4, 5] المصفوفات (Arrays) يمكن إنشاء مصفوفة جديدة والتعامل معها باستخدام المكتبة numpy: import numpy as np my_array = np.array([1, 2, 3, 4, 5]) print(my_array) # [1, 2, 3, 4, 5] الكائنات غير القابلة للتكرار: الأعداد (Numbers) يمكن إنشاء متغير جديد وتعيينه بقيمة رقمية: my_number = 10 print(my_number) # 10 السلاسل (Strings) يمكن إنشاء سلسلة جديدة والتلاعب بها باستخدام العديد من العمليات المتاحة للسلاسل، مثل الجمع والتكرار: my_string = "Hello" print(my_string + " World") # Hello World print(my_string * 3) # HelloHelloHello
-
يمكن استخدام إطار العمل ASP.NET MVC لإنشاء صفحة واحدة تحتوي على تفاصيل كل منتج، والتي يمكن الوصول إليها باستخدام معرف فريد لكل منتج. يمكن استخدام الإطار Entity Framework لإنشاء موديل لكل منتج وحفظه في قاعدة البيانات، ومن ثم استخدام عرض (View) واحد لعرض تفاصيل المنتجات. يمكن استخدام رابط ديناميكي (Dynamic Link) يحتوي على معرف المنتج في عنوان URL للوصول إلى الصفحة الخاصة بتفاصيل المنتج. لنفترض أن لديك تطبيق ASP.NET MVC للإعلانات على الإنترنت وتريد إنشاء صفحة تفاصيل المنتجات التي يتم الوصول إليها عند النقر على إعلان منتج. سنفترض أيضًا أن لديك قاعدة بيانات تحتوي على جدول يسمى Products يحتوي على معلومات المنتجات. يتم إنشاء موديل (Model) باستخدام Entity Framework ويحتوي على جميع المعلومات المتعلقة بالمنتج، مثل الاسم والوصف والصور والسعر وغيرها. يمكن إنشاء موديل بالشكل التالي: public class Product { public int Id { get; set; } public string Name { get; set; } public string Description { get; set; } public decimal Price { get; set; } public string ImageUrl { get; set; } } يتم إنشاء قاعدة بيانات باستخدام Entity Framework وإضافة جدول يحتوي على بيانات المنتجات. يمكن إنشاء قاعدة بيانات باستخدام أدوات إدارة قاعدة البيانات مثل Microsoft SQL Server أو MySQL أو PostgreSQL أو Oracle. يمكن إنشاء قاعدة بيانات بالشكل التالي: CREATE TABLE Products ( Id INT PRIMARY KEY IDENTITY, Name NVARCHAR(50) NOT NULL, Description NVARCHAR(MAX), Price DECIMAL(18, 2) NOT NULL, ImageUrl NVARCHAR(MAX) ) يتم إنشاء عرض (View) واحد لعرض تفاصيل المنتجات. يمكن استخدام أدوات ASP.NET MVC مثل Razor View Engine لإنشاء العرض. يمكن إنشاء العرض بالشكل التالي: @model Product <h2>@Model.Name</h2> <p>@Model.Description</p> <p>Price: @Model.Price</p> <img src="@Model.ImageUrl" alt="@Model.Name" /> يتم إنشاء إجراء تحكم (Controller Action) لاسترداد بيانات المنتجات من قاعدة البيانات وعرضها في العرض (View). يمكن استخدام أدوات ASP.NET MVC لإنشاء الإجراء. يمكن إنشاء الإجراء بالشكل التالي: public class ProductController : Controller { private readonly ApplicationDbContext _db; public ProductController(ApplicationDbContext db) { _db = db; } public IActionResult Details(int id) { var product = _db.Products.Find(id); if (product == null) { return NotFound(); } return View(product); } } إضافة رابط ديناميكي (Dynamic Link) يحتوي على معرف المنتج في عنوان URL لكل إعلان على الموقع <a href="@Url.Action("Details", "Product", new { id = product.Id })">@product.Name</a>
-
في الشرط الأخير في الكود، المتعلق بـ "Awesome Rows and Columns"، تم استخدام الشرط الخاص بـ "Awesome Diagonals" بشكل خاطئ، حيث تم إدراجه كجزء من شرط الصفوف والأعمدة والقطرين. بالتحديد، كان الخطأ في هذه الجملة: else if (row1 == col1 || row1 == col2 || row1 == col3 || row1 == diag1 || row1 == diag2 || row2 == col1 || row2 == col2 || row2 == col3 || row2 == diag1 || row2 == diag2 || row3 == col1 || row3 == col2 || row3 == col3 || row3 == diag1 || row3 == diag2) { printf("Awesome Rows and Columns"); } حيث تم وضع "diag1" و "diag2" كجزء من شرط الصفوف والأعمدة والقطرين. وبالتالي، لم يتم تمييز الحالة المراد الإشارة إليها بشكل صحيح. لحل هذه المشكلة، يجب تحريك الشرط الخاص بـ "Awesome Diagonals" إلى موضعه الصحيح، كما هو موضح في الكود التالي: if (row1 == row2 && row2 == row3 && row3 == col1 && col1 == col2 && col2 == col3 && col3 == diag1 && diag1 == diag2) { printf("Awesome Numbers"); } else if (row1 == row2 || row1 == row3 || row2 == row3) { printf("Awesome Rows"); } else if (col1 == col2 || col1 == col3 || col2 == col3) { printf("Awesome Columns"); } else if (diag1 == diag2) { printf("Awesome Diagonals"); } else if (row1 == col1 || row1 == col2 || row1 == col3 || row2 == col1 || row2 == col2 || row2 == col3 || row3 == col1 || row3 == col2 || row3 == col3) { printf("Awesome Rows and Columns"); } else if (col1 == diag1 || col2 == diag2) { printf("Awesome Columns and Diagonal"); } بعد هذا التعديل، يجب أن يتم طباعة الرسالة النهائية بشكل صحيح وفقًا لشروط الكود.
-
إذا كنت قد قمت بتثبيت مفسر لغة Ruby مسبقاً والمشكلة كما هي تحتاج إلى إضافة مسار تنفيذ Ruby إلى متغير بيئة النظام PATH باتباع هذه الخطوات: قم بفتح قائمة "بدء" وابحث عن "Environment Variables" وانقر فوق "Edit the system environment variables". انقر فوق "Environment Variables". في قسم System variables، انتقل إلى الأسفل وابحث عن المتغير "Path"، ثم انقر على "Edit". انقر على "New" وأدخل مسار تنفيذ Ruby. على سبيل المثال، إذا كان Ruby مثبتًا في المسار الافتراضي، يمكنك إضافة المسار التالي:``C:\Ruby27-x64\bin` ملاحظة: استبدل C:\Ruby27-x64 بالمسار الفعلي إلى مجلد تثبيت Ruby. انقر فوق "OK" لإغلاق جميع النوافذ. افتح نافذة جديدة من سطر الأوامر أو PowerShell وحاول تشغيل أمر Ruby مرة أخرى.
-
يمكن استخدام أي لغة برمجة لشرح المفاهيم الكائنية، بما في ذلك Java و Python وغيرها من اللغات. ومع ذلك، يتم استخدام Python لشرح المفاهيم الكائنية لعدة أسباب، منها: سهولة اللغة: Python تعتبر لغة برمجة سهلة التعلم والاستخدام وتتميز بقوة في التعبير وبساطة الكتابة. شيوعية الاستخدام: يستخدم Python على نطاق واسع في الصناعة والأكاديمية، ولذلك فإن استخدامه في شرح المفاهيم الكائنية يسهل على الطلاب تطبيق هذه المفاهيم في المستقبل. مرونة اللغة: تتيح Python للمستخدمين حرية الاختيار بين البرمجة الكائنية والبرمجة الإجرائية والبرمجة الوظيفية والبرمجة التوجيهية والعديد من الأساليب الأخرى، مما يجعلها لغة مرنة ومتعددة الاستخدامات. كما أن هناك دورة كاملة خاصة بال python في الأكاديمية فلذلك يعتبر استخدام python مفيد لمن يريد التكملة باستخدام هذه اللغة بشكل عام، يتم اختيار لغة البرمجة المستخدمة في دورة تعليمية بناءً على الأهداف التعليمية ومستوى الطلاب والأدوات المتاحة. حتى لو كانت Java هي اللغة المستخدمة في الدورة، فمن الممكن تطبيق المفاهيم الكائنية باستخدام Python أو أي لغة أخرى. المهم هو فهم المفاهيم بشكل صحيح وتطبيقها في الأمثلة العملية.
- 3 اجابة
-
- 1
-
-
بمجردك حصولك على أياً من دورات حسوب يتم فتح المسار الأول من بقية الدورات الموجودة بأكاديمية حسوب لذلك إذا كنت مهتماً بتعلم تطوير الواجهات الأمامية بجاني تعلم ال php فذلك يتيح لك تعلم أساسيات HTML و CSS و JavaScript و jQuery وهذه المهارات هي الأساسيات المطلوبة في مجال ال frontend كما أن هناك عرض موجود حالياً طوال شهر رمضام يسمح لك بالحصول على دورة مجانية أي دورتين بسعر دورة واحدة فيمكنك الحصول على دورة تطوير واجهات المستخدم + تطوير تطبيقات الويب بواسطة php بسعر دورة واحدة بالطبع تمكنك من تطوير واجهات أمامية بدون أي مشكلة ولكن هناك بعض المفاهيم التي يجب عليك تعلمها لم يتم شرحها في المسار الأول ولكن كلغات فيمكنك تطوير أي واجهة أمامية بال HTML و CSS و JavaScript كما أن حتى تصبح frontend محترف يجب عليك تعلم بعض المهارات المتقدمة والفيديو التالي يشرح بالتفصيل هذه المهارات
-
ربما تكون المشكلة في اسم ال class الخاص بالأيقونات حيث أن الإصدار السادس وهو الأحدث مختلف عن الإصدارات القديمة فمثلاً إذا كنت تستخدم الإصدار السادس فسيكون الكود مشابه للشكل التالي <i class="fa-solid fa-user"></i> أما إذا كنت تستخدم إصدار قديم فسيكون كما بالشكل التالي <i class="fas fa-user"></i> لاحظ الفرق بين الكود الأول والثاني كما أن هناك بعض الأيقونات الغير مجانية فمثلاً التنسيقات Regular و Light و Duotone غير مجانية فإذا كنت تستخدم التسيقات التالية فلن تظهر fa-regular fa-light fa-thin fa-duotone fa-sharp
-
تتبع جوجل أدسنس مجموعة من المعايير للحفاظ على الجودة والمصداقية والموثوقية في الإعلانات التي يتم عرضها، وتشمل هذه المعايير: محتوى عالي الجودة: يجب أن يكون المحتوى الذي يتم عرض الإعلانات فيه ذو جودة عالية ومتنوع، ويجب أن يكون محتوى مفيد للقراء ولا يخالف سياسات جوجل. الصفحات المستهدفة: يجب أن تتماشى الصفحات التي تعرض فيها الإعلانات مع سياسات جوجل ولا تحتوي على محتوى مخالف، مثل المحتوى الغير قانوني أو الخادش للحياء. المصداقية والشفافية: يجب على الناشرين أن يكونوا شفافين فيما يتعلق بأساليبهم لجذب المرور إلى مواقعهم وعرض الإعلانات. ولا يجوز لهم استخدام أساليب غير مشروعة مثل النقر العشوائي أو الشراء الغير شرعي للنقرات. الإعلانات المقصودة: يجب أن تتوافق الإعلانات التي يتم عرضها مع سياق الموقع ومحتواه، ولا يجوز عرض إعلانات غير ملائمة أو غير متناسبة مع المحتوى. الأمان والخصوصية: يجب أن يتم حماية بيانات المستخدمين والمعلومات الشخصية، ولا يجوز جمع أي معلومات بشكل غير مشروع أو استخدامها بطريقة لا تتوافق مع سياسات جوجل والقوانين المعمول بها. الأداء: يجب على الناشرين توفير تجربة استخدام مريحة للمستخدمين وتحسين أداء الإعلانات على الموقع، مثل تحسين سرعة التحميل والاستجابة والتوافق مع مختلف الأجهزة. والمدونة ليست بها أي محتوى حالياً لذلك قم بإضافة بعض المقالات التي تتبع المعايير السابقة كما أخبرك مصطفى في التعليق السابق ولكن بالنسبة لشكل لواجهة المدونة فهي جيدة وتعتبر متجاوبة مع الشاشات الصغيرة ويتصبح أفضل إذا قمت باستخدام نوع خط مختلف مع الموجود حالياً
- 2 اجابة
-
- 1
-
-
تعتمد على الظروف الخاصة بالمدونة. بعض الآثار المحتملة لترك المدونة دون الاهتمام بها تشمل: انخفاض في حركة المرور: بدون محتوى جديد وتحديثات، قد تبدأ المدونة في فقدان جمهورها ويمكن أن ينخفض حجم الزيارات التي تتلقاها مع مرور الوقت. تراجع في تصنيفات محركات البحث: تميل محركات البحث إلى تفضيل المحتوى الجديد والمحدث، لذلك إذا لم يتم تحديث المدونة بانتظام، فقد تتراجع تصنيفاتها في محركات البحث، مما يجعل من الصعب على القراء المحتملين العثور عليها. معلومات قديمة: إذا أصبح محتوى المدونة قديمًا، فقد تفقد جدواها ومصداقيتها، مما يجعل القراء يفقدون الاهتمام ويبحثون في مكان آخر للحصول على المعلومات. ولذلك يعتمد على المدونة الخاصة بك وإذا كانت كما قلت ليس بها أي محتوى حالياً فالأفضل هو عند البدأ في التدوين هو بناء مدونة أخرى وذلك في حالة أنك لن تقوم بإضافة أي محتوى لفترة كبيرة
- 2 اجابة
-
- 1
-
-
كلا استخدام CDN وتنزيل المكتبة محليًا لهما مزايا وعيوبهما الخاصة، ويعتمد الاختيار على الاحتياجات والظروف الخاصة بك. يمكن أن يكون استخدام شبكة توزيع المحتوى (CDN) للمكتبات الشائعة مثل jQuery وBootstrap وFont Awesome مفيدًا لأنه يوفر العديد من الفوائد، مثل: تحميل الصفحة بشكل أسرع: تمتلك شبكات CDN خوادم موزعة على نطاق العالم ، مما يمكن أن يقلل من وقت تحميل موقع الويب الخاص بك للزوار الذين يبعدون بعيدًا عن خادمك. تقليل استخدام النطاق الترددي bandwidth : عند استخدام CDN ، يتم تقديم ملفات المكتبة من خوادم CDN بدلاً من خادمك الخاص ، مما يقلل من كمية عرض النطاق الترددي الذي يحتاج إليه خادمك. زيادة التوفر: توفر شبكات CDN توافرًا عاليًا وإعادة توجيهًا ، مما يمكن أن يساعد على ضمان بقاء موقع الويب الخاص بك يعمل حتى خلال فترات الارتفاع المروري أو انقطاع الخادم. من ناحية أخرى ، يمكن أيضًا أن يكون تنزيل المكتبة محليًا له بعض المزايا ، مثل: الاستخدام دون اتصال: إذا كنت بحاجة إلى العمل على موقع الويب الخاص بك بدون اتصال بالإنترنت ، فقد يكون تنزيل ملفات المكتبة محليًا مفيدًا. مزيد من التحكم: تملك السيطرة الكاملة على إصدار المكتبة التي تستخدمها ، وهو ما يمكن أن يكون مهمًا إذا كنت ترغب في الحفاظ على الاتساق عبر مشاريع متعددة أو تجنب مشاكل التوافق. الأمان: إذا كان لديك مخاوف بشأن الاعتماد على شبكة CDN من جهة ثالثة لرمز موقع الويب الخاص بك ، فقد يساعد تنزيل المكتبة محليًا على ضمان أمان رمز موقع الويب الخاص بك. بشكل عام، يعتمد الاختيار بين استخدام CDN أو تنزيل المكتبة محليًا على الاحتياجات والظروف الخاصة بك.
- 3 اجابة
-
- 1
-
-
لغة البرمجة Ruby هي لغة برمجة للأغراض العامة. يتم استخدامه في مجموعة واسعة من المجالات ، ولكن اشتهرت كلغة لتطبيقات الويب ، بسبب إطار عمل Ruby on Rails.تجعل طبيعة الغرض العام من Ruby مناسبة لمجموعة واسعة من مهام البرمجة ، تمامًا مثل Perl و Python واللغات الأخرى ذات الأغراض العامة. تركز الميزات الرئيسية لـ Ruby على "سعادة" المطور وسهولة الاستخدام ، مما يجعلها لغة جيدة لأولئك الذين يتعلمون البرمجة فقط ولأولئك الذين يرغبون في إنجاز المزيد باستخدام كود أقل. إنها ميزات منتشرة وموجهة للكائنات تجعلها بديهية للغاية. يمكن لمهندسي DevOps استخدام Ruby في البرمجة النصية من جانب الخادم وإدارة التكوين. على سبيل المثال ، Puppet هو برنامج مفتوح المصدر شائع مكتوب بلغة Ruby لإدارة تكوين الخادم. يمكن لمطوري الأجهزة المحمولة استخدام RubyMotion لإنشاء تطبيقات أصلية لنظامي التشغيل iOS و Android باستخدام لغة Ruby ، بدلاً من استخدام لغة مختلفة لكل نظام أساسي (Objective-C / Swift for iOS و Java لنظام Android). بالنسبة لتطبيقات سطح المكتب ، يمكن أيضًا استخدام RubyMotion لتطوير تطبيقات OSX. كما توجد الكثير من التطبيقات الأخرى لهذه اللغة ولكن السؤال الأهم هل يستحق تعلم لغة Ruby في عام 2023 ؟ الشعبية كانت روبي وريلز تحظى بشعبية كبيرة في أوائل العقد الأول من القرن الحادي والعشرين. منذ شعبية Node.js ، انتقل العديد من المطورين من Ruby . هذا لا يعني أن اللغة قد ماتت. في الواقع ، إنها بعيدة كل البعد عن ذلك. لقد نضجت على مدار كل هذه السنوات وما زالت واحدة من أفضل التقنيات المستخدمة في تطوير الويب. يبسط منطق الأعمال لدى Ruby بنية جميلة وأنيقة تجعل تنفيذ منطق الأعمال المعقد أكثر بساطة. علاوة على هيكل إطار عمل Ruby on Rails، تجعل التطوير منظمًا وسهل الكتابة وقراءة التعليمات البرمجية. مجموعة كبيرة جدًا من الالمكتبات هناك مكتبة لكل ما يخطر ببالك. لقد ابتكر مجتمع المطورين الكثير من المكتبات ، والتي يمكن أن تخفف من مشكلتك.يمكنك العثور على مكتبة لتفويض واجهة برمجة التطبيقات ، لتنفيذ وظائف الخلفية ، لكل وصول إلى مخزن البيانات ، إلخ. ويعتبر لغة Ruby منتشرة بسبب إطار عمل Ruby on Rails لذلك تلخيصاً لا يزال Ruby on Rails مناسبة في عام 2023 وستظل مناسبة لبضع سنوات قادمة. إنها منصة بسيطة وفعالة لبناء نماذج أولية سريعة و MVP وأي نوع من تطبيقات / خدمات الويب.إنه يقلل من وقت التطوير ويساعدك على الوصول إلى السوق في وقت قصير حقًا.