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

سامح أشرف

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

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

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

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

    56

كل منشورات العضو سامح أشرف

  1. يجب أن يتم إضافة كود JavaScript كاملًا حتى يعمل.
  2. يتم عمل مثل هذا الكود من خلال لغة JavaScript حيث يتم التحقق من وجود الخاصية href في عنصر معين وفي حالة عدم وجود رابط الموقع في الخاصية href أو لم يكن الرابط موجودًا من الأساس فيتم توجيه الصفحة إلى رابط معد مسبقًا، كالتالي: <a href="https://myblog.com" id="copyright">جميع الحقوق محفوظة لموقع myBlog</a> // نقوم بتحديد عنصر copyright من خلال الخاصية id var copyright = document.getElementById('copyright'); var redirect = false; if (!copyright) { // في حالة عدم وجود العنصر في الصفحة redirect = true; } else { // في حالة وجود العنصر في الصفحة ولكن الخاصية href لا تحتوي على الرابط الصحيح if (copyright.getAttribute('href').toLowerCase() != 'https://myBlog.com'.toLowerCase()) { redirect = true; } } // في حالة تحقق أي من الشروط السابقة يتم إعادة توجية المستخدم إلى صفحة معينة if (redirect) { window.location = "http://myBloc.com/copyright"; } بالطبع في حالة لم تكن الجافاسكريبت تعمل في متصفح المستخدم، فلن نتمكن من التحقق من وجود الرابط الصحيح في حقوق الموقع.
  3. سبب المشكلة هو وجود خاصية margin-right بقيمة كبير () ويمكنك أن تقوم بحل هذه المشكلة من خلال تغير هذه القيمة إلى auto في الشاشات الصغير كالتالي: @media screen and (max-width: 900px) .treexil-wrapper #treexil-right, .treexil-wrapper #treexil-left { margin: auto; } } يمكنك أن تقوم بإضافة الكود السابق في عنصر style وتضيف هذا الأخير قبل نهاية العنصر head
  4. لا ليس عليكِ ذلك، يمكنك أن تستعملي التعليقات أسفل كل درس في حالة كان لديكِ سؤال ما متعلق بالدرس أو مشكلة ما ولم تستطيعي حلها بنفسك، بينما إن كان لديكِ سؤال عام وليس متعلق بأحد الدروس، فيمكنكِ طرحه هنا في قسم الأسئلة العامة. أنصحك بالإطلاع على هذه الصفحة (إرشادات طرح الأسئلة) قبل نشر الأسئلة العامة للحصول على المساعدة الصحيحة في أسرع وقت.
  5. تعلم البرمجة أمر سهل ولكن يتطلب بذل الكثير من المجهود والوقت خصوصًا في بداية التعلم حيث يكون الأمر أكثر صعوبة بسبب تعلم مصطلحات وتقنيات جديد كليًا، ومن الطبيعي للغاية أن أي درس مدته ساعتين على سبيل المثال يستغرق منك أكثر من ساعتين لإتمامه، وذلك لأن التطبيق العملي يأخذ الكثير من الوقت أيضًا. عليك أيضًا أن تحاول التعلم والمتابعة بشكل متواصل لأن التعلم المتقطع لن يفيدك كثيرًا ويعد مضيعة للوقت، لأنك ستتعلم تقنية معينة ولغة برمجة معينة ولكن عدم إستخدامك لها لفترة طويلة سيؤدي إلى نسيانك لما تعملته وبالتالي سيكون الوقت الذي استغرفته في تعلم هذه التقنية في البداية مضيعة للوقت لأنك ستعيد تعلمها من البداية. والحل هو التطبيق العملي كل فترة لكي لا تنسى ما كنت تتعلمه وتبدأ من الصفر في كل مرة. بالنسبة إلى الكلية أو الجامعة التي تدرس فيها، فهي ليس ذات أهمية، في الواقع يمكن لأي شخص لجيه إتصال بالإنترنت وحسوب أن يتعلم البرمجة بدون مشكلة، وأريد أن أشير إلى أن دورة CS50 والتي يقوم بشرحها ديفيد مالان، تعد بداية جيدة لبدأ التعلم، كما أن ديفيد مالان نفسه لم يكن يدرس في كلية تكنولوجية في البداية، بل كان يدرس في كلية الحقوق، لذلك لا تطعي بالًا لأمر إختلاف الكلية التي تخرجت منها. أنصحك أيضًا أن تقرأ هذه المقالة "دليلك الشامل لتعلم البرمجة" والتي سوف تساعدك كثيرًا في تحديد مسار معين لتتبعه وتسهل عليك الكثير من الأمر.
  6. يمكنك أن تستعمل الحسوب في أي وقت من اليوم، حتى في فترة الظهر والحر الشديد على ألا تزيد حرارة المعالج CPU عن درجة الحرارة القصوى التي ينصح بها، وكذلك بالنسبة إلى وحدة المعالجة الرسومية GPU، وتستطيع معرفة درجة الحرارة الحالية لكلٍ منهما من خلال برامج مثل Open Hardware Monitor والتي يمكنك من معرفة درجة الحرارة الحالية بالإضافة إلى درجة الحرارة القصوى التي ينصح بألا يتم تخطيها. عند تشغيل البرنامج ستجد في كلٍ من وحدة المعالجة المركزية CPU ووحدة المعالجة الرسومية GPU حقل temperature وفيه عمودين: Value (درجة الحرارة الحالية)، و Max (درجة الحرارة القصوى). لاحظ أنه يمكنك أن تتخطى درجة الحرارة القصوى في حالة كانت لديك وحدة تبريد جيدة (هوائية أو مائية) مثل وحدات التبريد الخاصة بـ Cooler Master. هناك برامج أخرى مثل IO bit Advanced SystemCare يمكنك من معرفة درجة الحرارة الحالية وإدارات التطبيقات التي تعمل في الخلفية وإزالتها ما يقلل الضغط على المعالج والذاكرة العشوائية Ram. أيضًا لا ينصح بعمل كسر للسرعة لأي قطعة من الحسوب (CPU، GPU ، RAM .. إلخ) في موجات الحر الشديد إلا إن كان لديك وحدة تبريد مائية فقط، لأن كسر سرعة أي قطعة يعني عملها بشكل أعلى من المتوقع وبالتالي زيادة حرارتها بشكل كبير. ملاحظة: في حالة كانت وحدة المعالجة الرسومية GPU مدمجة في المعالج (مثل أغلب معالجات AMD) فستكون درجة الحرارة واحدة لكلٍ منها.
  7. هل يمكنك تنفيذ الأمر التالي: npm run watch يقوم هذا الأمر بمتابعة كل ملفات CSS و JS إن تم تعديلها ويعيد بناء كل من app.css و app.js عند إنتهاء الأمر من بناء الملفات فسيظهر لديك نتيجة مشابهةة للتالي: بعد ذلك يمكنك أن تعيد تحديث الصفحة وإعادة المحاولة.
  8. يمكنك التحقق من أن تنسيقات Tailwind CSS تعمل بشكل سليم أم لا من خلال أدوات المدورين DevTools، وفحص العناصر، فربما يكون هناك تنسيقات أخرى تغير شكل الأزرار. إن كنت تستعمل PostCSS فيجب عليك إعادة بناء ملف CSS من خلال الأمر التالي: npm run dev ولا تنسى أن تضيف ملف CSS الصحيح إلى ملف layout: <link rel="stylesheet" href="{{ mix('css/app.css') }}"> كما أنه قد تكون هناك مشكلة بسبب الملفات المؤقتة في المتصفح، أرجو منك أن تقوم بتجربة متصفح آخر أو حذف الملفات المؤقتة من متصفح الويب الخاص بك من خلال الضغط على Ctrl + Shift + del وتحديد كلٍ من cookies and other site data و cached images and files. كما أرجو منك تجربة ألوان أخرى غير teal لأن هذا اللون ليس من الألوان الأساسية في الإصدار 2 من Tailwind CSS، في حالة ظهرت الألوان الأخرى بدون مشكلة فيمكنك أن تضيف كل الألوان الخاصة بـ Tailwind CSS من خلال عمل ملف tailwind.config.js عبر الأمر التالي (في حالة لم يكن لديك الملف مسبقًا): npx tailwindcss init بعد ذلك يمكنك تعديل الملف ليصبح بالشكل التالي: // tailwind.config.js // نستورد كل الألوان الخاصة بـ Tailwind const colors = require('tailwindcss/colors') module.exports = { // ... theme: { colors: colors // نخبر tailwind بأننا نريد إستعمال كل الألوان } // ... }
  9. البرمجة كانت تعد فرع من فروع الرياضيات ولكن الآن هي فرع قائم بذاته، لكن بالرغم من ذلك إلا أنه مازالت هناك علاقة بين البرمجة والرياضيات في البرامج الضخمة التي تستعمل الذكاء الاصطناعي مثلًا أو برامج المحاسبة التي تقوم بالكثير من المعادلات والحسابات أو الألعاب التي تعتمد على النظام ثلاثي الأبعاد أو ما يعرف بالجيوميتري geometry .. إلخ، لكن بالرغم من ذلك إلا أن طالب علوم الحسوب يدرس الرياضيات ليتعلم طريقة التفكير, والتحليل المنطقي, وبناء الخوارزميات. أما المعادلات الرياضية المعقدة لن تستخدمها بشكل مباشر في البرمجة، إلا لأهداف معينة، مثلا برمجة الالعاب تتطلب نوع معين من الرياضيات وهو الحيوميتري,والبرامج المحاسبية تتطلب معادلات المحاسبة، طبعًا سوف يتم إستخدام ما يعرف ب arithmetic operations وهي الرياضيات البسيطة مثل عمليات الجمع والطرح والضرب .. إلخ. أنصحكِ بالإطلاع على هذه المقالة "دليلك الشامل لتعلم البرمجة" وبالأخص قسم "ما عليك معرفته لتصبح مبرمجًا". لذلك ليس عليكِ التعمق في دراسة أمور فرعية قبل تعلم البرمجة، بل البدء على الفور في تعلم أساسيات البرمجة ذاتها.
  10. كل المواضيع الموجودة في دورة علوم حسوب يتم شرحها من البداية، لذلك لن تحتاج إلى دراسة أي مواضيع سابقة، تركز الدورة على تعليم الطالب أساسيات الحاسوب والتفكير المنطقي والخوارزميات، ثم تنتقل الدورة إلى عمل تطبيقات عملية على أساسيات التفكير المنطقي من خلال سكراتش Scratch، بعد ذلك تتطرق الدورة إلى لغة البرمجة JavaScript ، بالإضافة إلى لغة SQL وقواعد بيانات NoSQL، بعد ذلك يتم شرح كل المفاهيم الأساسية التي تبنى بها صفحات الويب والخوادم. وتم مؤخرًا إضافة مسارين جديدين إلى الدورة يتم فيهما شرح البرمجة كائنية التوجه بأستخدام لغة البرمجة Python وأنماط التصميم البرمجية، كيف يتم تصميم هيكلية البرمجيات الكبيرة. وأقتبس من صفحة الدورة الرسمية:
  11. لتحسين ترتيب نتائج المدونة تحتاج إلى أن تتعلم أكثر عن تحسين محركات البحث Search Engine Optimization أو ما يعرف بـ SEO، حيث أن هناك الكثير من العوامل التي تقوم محركات البحث بالإعتماد عليها لترتيب نتائج البحث، ومن هذه العوامل: عنوان المقالات: يجب ان يكون جيد ومعبر عن المقالة وليس طويل لكي يظهر بشكل كامل في نتائج البحث. الكلمات المفتاحية: يجب أن تختار الكلمات التي يبحث عنها الزوار وتحددهم بنائًا على الأهمية، يمكنك أن تستعمل أدوات لمساعدك في البحث عن هذه الكلمات مثل Semrush أو ahrefs. وسوم Metatag: يجب أن تحتوي المدونة على وسوم Meta Tags معدة بشكل جيد حتى تتمكن محركات البحث من تصنيف صفحات مدونتك. الصور: يمكن أن تؤثر الصور التي أستخدمها على SEO المدونة وعلى الزوار أيضًا، الروابط: تحتاج إلى عمل روابط خلفية backlinks تشير إلى مدونتك لكي تحصل على زيارات أكثر من مواقع ومنتديات مختلفة. السرعة: سرعة المدونة عامل مهم في ترتيب نتائج المدونة في محركات البحث المدة التي يستغرقها الزوار في تصفح مدونتك وعوامل أخرى كثيرة، يمكنك أن تتعلم وتقرأ أكثر حول تحسين محركات البحث من خلال قسم تهيئة محركات البحث SEO في أكاديمية حسوب من هنا. كما أن عليك أن تهتم بالمحتوى كثيرًا، فهو ما يريده الزائر ولن تهتم لك محركات البحث إن لم تهتم أنت بزوارك.
  12. منصة بلوجر لا توفر طريقة مباشرة لعمل كود تفعيل لقوالب بلوجر، لكن يمكنك عمل كود للتأكد من أن الشخص الذي يستعمل القالب قد قام بشراءه بشكل سليم، وذلك من خلال JavaScript حيث يتم تجهيز Widget أثناء برمجة القالب، وتكون عبارة عن حقل إدخال ليقوم العميل (من أشترى القالب) بوضع كود معين (نص عبارة عن رموز وأرقام مثل: ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad) ومن خلال لغة JavaScript يتم إحضار هذا الكود وإرساله إلى خادم معين (تم إعداده من قبل مبرمج القالب نفسه)، ليتم التأكد من أن هذا الكود مسجل في قاعدة البيانات، وأن المدونة التي تحمل الرابط example.blogspot.com قد أشترت القالب بالفعل. في حالة لم يتم إيجاد الكود في قاعدة البيانات أو أن نطاق domain المدونة غير مسجل في قاعدة البيانات، فيتم عمل إعادة توجيه من المدونة لصفحة شراء القالب على سبيل المثال. بالطبع هذه الطريقة ليس آمنة 100% لأن أي شخص يمكنكه أن يبحث عن كود JavaScript الذي يقوم بعمل تحقق من الكود، ويقوم بحذفه أو إيقافه بأي شكل، لذلك لا يوجد حل واضح لهذه المشكلة غير تشويش/تعميم Obfuscation كود JavaScript من خلال أداوات مثل Javascript Obfuscato (أي جعل الكود غير قابل للقراءة)، وبالتالي لن يستطيع أحد عمليًا من إيجاد الكود الذي يقوم بعملية التحقق، يمكنك الإطلاع على هذه الإجابة لمعلومات أكثر حول تشويش كود JavaScript. أيضًا إن لم يكن القالب يعتمد على JavaScript بشكل أساسي، فيمكن أن يقوم أي أحد بحذف كل أكواد JavaScript وحينها سيعمل القالب بشكل سليم (لأنه لا يحتاج JavaScript لأن يعمل من الأساس).
  13. صيغة PSDهي صيغة خاصة ببرنامج Adobe Photoshop وهي إختصار لـ Adobe Photoshop Document وفي الغالب لا يمكن تعديل ملف PSD بسهولة خارج برامج Adobe، لكن يوجد مجموعة من الخيارات التي يمكمنك أن تقوم بها لفتح هذه الملف (عرضها فقط أو تحويلها إلى صور)، وفي بعض الأحيان يمكنك التعديل أيضًا على الطبقات Layers في هذه الملفات. الحل الأسهل هو تثبيت برنامج Adobe Photoshop من خلال برنامج Wine أو برنامج آخر مشابهة أو حتى عمل نظام وهمي من خلال VirtualBox وتثبيت ويندوز و Adobe Photoshop عليه، وحينها سيمكنك تعديل وإستخراج الصور من كل ملفات PSD بسهولة. الطريقة الأخرى هي إستخدام برنامج GIMP المجاني ومفتوح المصدر لتشغيل ملفات PSD، لكن هذا الحل لن يعمل مع جميع الملف بسبب إختلاف الـ Color Mode بين Adobe Photoshop و GIMP وقد يظهر لك الخطأ "Error loading PSD file: Unsupported color mode: CMYK"، لتشغيل ملف PSD في برنامج GIMP أضغط على قائمة File ثم Open ومنها أختر ملف PSD الذي تريد فتحه، ثم ستظهر لديك هذه النافذة الصغيرة: أجعل كل الإعدادات كما في الصورة ثم إضغط على Convert، ستجد أن الملف قد تم تشغيله بنجاح، لكن في كثير من الأحيان ستلاحظ وجود أخطاء في طريقة عرض الطبقات layers بسبب إختلاف الطريقة التي يعمل بها كلًا من Adobe Photoshop و GIMP. يمكنك أن تستعمل موقع photopea الذي يوفر لك فتح ملفات PSD وتعديلها أيضًا من خلال المتصفح مباشرة، وهذا أسهل حل حيث لن تضظر لتثبيت أو تحميل أي برامج أخرى، هذه الطريقة لا تحتاج إلى إنترنت إلا لتحميل الموقع فقط، بعد ذلك يمكنك أن تقوم بإغلاف إتصال الإنترنت إن أردت وسيستمر الموقع في العمل بدون مشكلة. بعد الإنتهاء من عمل التعديلات يمكنك أن تقوم بإستخراج الصورة من خلال الضغط على قائمة File ثم Export as وإختيار صيغة الصورة، أو يمكنك حفظ الملف بصيغة PSD من خلال الخيار Save as PSD كما في الصورة: إن أرد عرض الملفات فقط، فيمكنك أن تستخدم خدمة Google Drive حيث توفر لك عرض ملفات PSD وكأنها صور، كما في الصورة التالية، لكن لهذه الطريقة العيب وهو أنك يجب أن تقوم برفع الملفات إلى حساب Google Drive الخاص بك.
  14. بالتأكيد يمكن ذلك، فلا يتم إنشاء جزء الـ Backend إلا عند الحاجة إليه في أوقات معينة مثل الحاجة لعمل نظام لإدار المستخدمين أو لتخزين البيانات .. إلخ، وتوجد الكثير من التطبيقات التي لا تحتاج إلى Backend لأنها تعمل في الأساس بدون إتصال بالإنترنت، في الغالب تكون هذه التطبيقات بسيطة للغاية، كما توجد طرق أخرى لعمل تطبيقات بدون Backend من خلال إستخدام خدمات مثل Firebase والتي يتم إسعمالها بكثرة لتخزين البيانات أو عمل نظام إستيثاق Authentication دون الحاجة إلى خادم ويب أو عمل تطبيق Backend. توجد العديد من التقنيات التي يتم إسخدامها لعمل تطبيقات الجوال من خلال لغات الويب HTML, CSS, JavaScript مثل Cordova و React Native يمكنك الإطلاع على هذه المقالة لتتعرف أكثر على React Native "مدخل إلى React Native"، كما يوجد الكثير من المقالات العربية التي تشرح Cordova: إطار العمل أباتشي كوردوفا ApacheCordova نظرة عامة عن تطوير تطبيقات الأجهزة المحمولة عبر كوردوفا أنشئ تطبيقك الأول في Cordova
  15. يمكنك تثبيت لارافيل من خلال الأوامر التالية: pkg install x11-repo pkg install composer الآن تم تثبيت مدير الحزم Composer والذي من خلاله سوف نقوم بتثبيت Laravel Installer كالتالي: composer global require laravel/installer بعد ذلك يجب أن يتم إضافة مسار حزم composer إلى بيئة التشغيل من خلال الأوامر التالية: echo 'export PATH="$PATH:$HOME/.composer/vendor/bin"' >> ~/.bashsrc source ~/.bashsrc الآن أصبح بإمكانك عمل مشاريع Laravel من خلال الأمر التالي: laravel new blog ولتشغيل المشروع يجب الدخول إلى مجلد المشروع وتشغيله كالتالي: cd blog php artisan serve
  16. في Termux يمكنك تثبيت الحزم من خلال الأمر التالي: pkg install <اسم الحزمة> لكن لاحظ أن Termux لا يدعم كل حزم وبرامج لينكس، لذلك عليك تجربة الأمر أولًا. يمكنك تثبيت خادم محلي كامل مع مدير قواعد البيانات MySQL من خلال تطبيقات موجودة في متجر Google Play، مثل: تطبيق Web Server PHP/MyAdmin/MySQL تطبيق KSWEB: server + PHP + MySQL وإن أردت تثبيت PHP و سيرفر Apache يدويًا، فيمكنك القيام بذلك من خلال الأوامر التالية: apt install php-apache apt install nano # محرر بسيط ولتعديل إعدادات Apache يمكنك أن تقوم بإستخدام ملف httpd.conf من خلال الأمر التالي: nano /data/data/com.termux/files/usr/etc/apache2/ لعمل ملفات PHP يمكنك أن تقوم بذلك في المسار /data/data/com.termux/files/usr/share/apache2/default-site/htdocs كالتالي: cd /data/data/com.termux/files/usr/share/apache2/default-site/htdocs nano index.php بعد عمل ملف php وحفظ التغيرات يمكنك أن تقوم بتشغيل سيرفر Apache من خلال الأمر التالي: apachectl start في النهاية يمكنك تشغيل الملف من خلال الرابط localhost:8080/index.php قد تبدو الطريقة طويلة بعض الشيء وقد تحدث مشاكل أثناء التثبيت، لذلك يفضل دائمًا أن تستعمل تطبيق جاهز مثل أحد التطبيقات التي ذكرتها بالأعلى.
  17. يمكنك أن تستخدم حزمة joshrainwater/active-users حيث تقوم بمعرفة المستخدمين الحالين (الذي قد سجلوا الدخول والضيوف أيضًا)، ويمكنك أن تحصل منها على إجمالي عدد المستخدمين أيضًا أولًا عليك تثبيت الحزمة من خلال الأوامر التالية: composer require joshrainwater/active-users ثم قم بإضافة السطر التالي إلى ملف .env : SESSION_DRIVER=database في النهاية يجب تهجير بيانات الحزمة من خلال الأوامر التالية: php artisan session:table php artisan migrate في النهاية يجب تعديل ملف config/app.php وإضافة provider و alias كالتالي: // .... 'providers' => [ //Laravel Framework Service Providers... //Package Service Providers... Rainwater\Active\ActiveServiceProvider::class, ], 'aliases' => [ // .... 'Active' => Rainwater\Active\ActiveFacade::class ], الآن يمكنك أن تستخدم الحزمة كالتالي: // Import at the top use Rainwater\Active\Active; // الحصول على كل المستخدمين الحاليين $users = Active::users()->get(); // طباعة اسم كل مستخدم foreach ($users as $activity) { echo $activity->user->name . '<br>'; } // الحصول على إجمالي عدد المستخدمين الحاليين $numberOfUsers = Active::users()->count(); كما يمكن إستخدام الحزمة في حساب عدد الضيوف بنفس الطريقة: // الحصول على هدد الضيوف الحاليين $numberOfGuests = Active::guests()->count();
  18. عملية بيع موقع إلكتروني تمر بعدد من المراحل كالتالي: تحديد فئة العملاء المحتملين: عندما تريد أن تقوم ببيع موقع إلكتروني، يجب عليك أن تجيب على السؤال "من الذي يريد شراء هذا الموقع؟" وإجابة هذا السؤال ستحدد لك فئة من الناس يمكنك أن يستفيدو من موقعك، مثلًا إن كان موقعك عبارة عن مدونة، فيمكنك أن تبحث عن الكتاب في نفس مجال المدونة أو منشئي المحتوى بشكل عام مثل اليوتيوبرز مثلًا، بعد تحديد العملاء المحتملين ننتقل إلى الخطوة التالية. البدء في الإعلان عن بيع الموقع: لن تستطيع بيع أي شيء إن لم يعرف أحد أنك تبيعه من الأساس، عليك أن تنشر عن بيع موقع، وتعرض مميزاته وما الذي قد يستفيده المشتري من شراء موقعك، وبما أن موقعك مقبول في جوجل أدسنس فهذا أمر جيد للغاية، وسوف يزيد من قيمة موقعك. يمكنك عمل إعلانات من خلال منصات التواصل، وأيضًا ميكنك الإعلان على موقع نفسه، فربما يريد أن يشتريه أحد زوار الموقع. قد تكون الإعلانات عبارة عن منشورات في المجموعات على فيسبوك على سبيل المثال، أو إعلانات مدفوعة أيضًا. تحديد سعر الموقع: عندما تعلن عن بيع موقع إلكتروني يجب أن تحدد مميزات وعيوب الموقع بشكل كامل، وذلك سيساعدك على تحديد سعر الموقع بشكل سليم، ويمكنك أن تحدد السعر من خلال عملية بسيطة وهي (تكلفة إنشاء الموقع + إجمالي أرباح الموقع في آخر 6 أشهر)، بالطبع قد يحدث بعض التغيرات على المعادلة السابقة، وقد لا تستعملها من الأساس، عليك أيضًا أن تقوم بتصفح مواقع بيع المواقع لتعرف متوسط سعر السوق لمواقع مشابهة لما لديك. ضمان الحقوق: لتضمن حقوقك وليضمن المشتري حقوقه، عليك أن تستعين بوسيط (شخص أو موقع متخصص) وبالتالي تحصل على الأموال بشكل آمن ويحصل المشتري على الموقع بشكل صحيح، يجب عليك أيضًا أن توضح للمشتري أنك تبيع الموقع فقط، وليس الأرباح التي سيحصل عليها، والأمر متوقف على مجهوده المبذول في الموقع وكيفية إدارته، وذلك لأن بعض المشترين يقومون بشراء مواقع كانت تحصل على أرباح وبعد عملية الشراء لا يستطيع إدارة الموقع بشكل صحيح ولا يحصل على نفس الأرباح التي كان الموقع يحصل عليها قبل عملية البيع، فيعتقد أن البائع قد قام بالإحتيال عليه، لذلك يجب أن توضح له هذا الأمر. يجب أن تذكر أيضًا كل التفاصيل الخاصة بصفحات الموقع على وسائل التواصل الإجتماعي (صفحات فيسبوك، تويتر، مجموعات على فيسبوك، حساب على LinkedIn .. إلخ) مثل عدد المتابعين، نسبة التفاعل، متوسط وقت النشر .. إلخ. يمكنك أن تستعين بمواقع البيع مثل Flippa أو empireflippers لمعرفة متوسط سعر مواقع مشابهة أو حتى لبيع موقعك أيضًا.
  19. عند عمل متغير من نوع const أو let تكون تابعةً للمجال الكتلي (block scope) أي لا يمكن إستخدامها خارج كتلة معينة block of code كالتالي: if (true) { const x = 5 // يمكن إستخدام let أيضًا console.log(x) // Output: 5 } console.log(x) // Uncaught ReferenceError: x is not defined وبالتالي يمكن عمل دوال صغيرة تعمل في كتلة معينة block دونًا عن غيرها، ويمكن عمل أكثر من دالة تحمل نفس الاسم ولكن في كتل مختلفة دون مشكلة مما يترك للمبرمج مجال واسع لتسميه الدوال. يمكنك معرفة المزيد حول المتغيرات في JavaScript من خلال هذه المقالة، كما يمكنك أن تتعرف أكثر حول الميزات الجديدة في ES6 من هنا. وبما أن الدوال لا يتم تغيرها في الغالب، فنستخدم const بدلًا من let حيث أن قيمة const لا يمكن أن تتغير في نفس الكتلة. const x = 5; console.log(x) x = 6 // Uncaught TypeError: Assignment to constant variable. يمكنك الإطلاع أكثر حول الثوابت في JavaScript من خلال موسوعة حسوب من هنا.
  20. حاليًا لا يوجد دورة مخصصة لـ Flutter أو Dart ولكن تحتوي الأكاديمية على دورة لتطوير تطبيقات الهواتف الذكية عبر تقنيات الويب من خلال لغات مثل HTML, CSS, JavaScript، يمكنك الإطلاع على هذه الدورة من هذه الصفحة "تطوير تطبيقات الجوال باستخدام تقنيات الويب". في حالة أردت الإستفسار حول أي دورة من دورات حسوب أو كان لديك أي سؤال متعلق بهذه الأمور، يمكنك أن تستخدم مركز المساعدة من هنا.
  21. نعم، يجب أن تقوم بوضع النموذج الخاص بك في جسم الـ modal، وبالبطع يمكنك أن تقوم بتعديل باقي أكواد الـ modal حسب الحاجة. قد تحتاج أيضًا أن تستعمل Ajax لعمل طلب إلى السيرفر عندما يقوم المستخدم بملئ بياناته لكي لا يتم تحديث الصفحة أو إعادة توجيه المستخدم لصفحة أخرى. يمكنك الإطلاع أكثر حول ajax من خلال هذه المقالة (مُقدّمة إلى AJAX والكائنات المُؤجّلة (Deferred Objects) على jQuery - jQuery - أكاديمية حسوب (hsoub.com)) أو من خلال موسوعة حسوب من هنا
  22. يمكنك أن تقوم بملئ الفراغات في المصفوفة من خلال دالة zip_longest من مكتبة itertools كالتالي: import itertools np.array(list(itertools.zip_longest(*v, fillvalue=0))).T """ Output: array([[1, 0], [1, 2]]) """ بهذه الطريقة يمكنك أن تقوم بمليء المصفوفة بقيمة إفتراضية (صفر في هذه الحالة) في الأجزاء الناقصة. ملاحظة: إن كنت تستعمل Python الإصدار 2 فسيكون اسم الدالة هو izip_longest وليس zip_longest
  23. يمكن أن تستخدمي التابع orderBy و orderByDesc كالتالي: $users = User::where('active', 1) ->orderBy('name') ->take(10) ->get(); يمكنك الإطلاع أكثر حول العلاقات و eloquent في Laravel من خلال موسوعة حسوب من هنا
  24. لم يعمل الكود الذي قمت بإضافته بسبب وجود جزئ ناقص فيه وهو الكود التالي: document.getElementsByClassName('needs-validation-create-table')[0].addEventListener('submit', () => { felids = document.querySelectorAll('td.color-sizes-count') felids.forEach((felid) => { felid.addEventListener('change', calcTotal) }) }) بالنسبة لتغير عدد الحقول فيجب أن تقوم بالكثير من التغيرات في الدوال السابقة، على سبيل المثال يجب أن تعديل الدالة addTotalRows لكي تقبل مصفوفة تحتوي على المقاسات لتقوم بتوليد كل الخانات في صف الإجمالي ويجب أن يتم إستعمال أسماء المقاسات كأصناف classes في الخانات حتى يمكنك أن تقوم بتعديل قيم هذه الخانات مع كل تغير يتم في الجدول، كالتالي: sizes = ['size_m', 'size_l', 'size_xl', 'size_xxl']; addTotalRows = (sizes) => { row_html = `<tr class="total-row"> <th scope="row" style="border: 1px solid #373838;background-color: #bec1c3;"> الإجمالي </th>` sizes.forEach((size)=>{ row_html += `<td scope="row" class="${size}" style="border: 1px solid #373838;"> </td>` }) row_html += `</tr>` tbody = document.querySelector('tbody') tbody.innerHTML = tbody.innerHTML + row_html } document.getElementsByClassName('needs-validation-create-table')[0].addEventListener('submit', ()=>addTotalRows(sizes)) وبنفس الطريقة يجب أن تقوم بتعديل كل الدوال الأخرى.
  25. بإمكانك أن تقوم بإضافة صف جديد للإجمالي من خلال كود جافاسكريبت عند الضغط على زر "البدء بتعبئة الطلب" من خلال الكود التالي: addTotalRows = () => { row_html = `<tr class="total-row"> <th scope="row" style="border: 1px solid #373838;background-color: #bec1c3;"> الإجمالي </th> <td scope="row" class="total" style="border: 1px solid #373838;"> </td> <td scope="row" class="size-m" style="border: 1px solid #373838;"> </td> <td scope="row" class="size-l" style="border: 1px solid #373838;"> </td> <td scope="row" class="size-xl" style="border: 1px solid #373838;"> </td> <td scope="row" class="size-xxl" style="border: 1px solid #373838;"> </td> </tr>` tbody = document.querySelector('tbody') tbody.innerHTML = tbody.innerHTML + row_html } تقوم الدالة السابقة بإضافة صف يحتوي على بعض الخانات إلى جسم الجدول tbody ونقوم بتنفيذ هذه الدالة عند الضغط على زر "البدء بتعبئة الطلب" من خلال حدث submit لنموذج البيانات .needs-validation-create-table كالتالي: document.getElementsByClassName('needs-validation-create-table')[0].addEventListener('submit', addTotalRows) بعد ذلك يجب عمل دالة لتغير قيم هذا الخلايا في الصف الذي قمنا بإنشائه للتو، كالتالي: calcTotal = () => { rows = document.querySelectorAll('tbody tr:not(.sizes-names):not(.total-row)') total = 0 size_m = 0 size_l = 0 size_xl = 0 size_xxl = 0 rows.forEach((row)=>{ inputs = row.querySelectorAll('td input') total += isNaN(parseInt(inputs[0].value)) ? 0 : parseInt(inputs[0].value) size_m += isNaN(parseInt(inputs[1].value)) ? 0 : parseInt(inputs[1].value) size_l += isNaN(parseInt(inputs[2].value)) ? 0 : parseInt(inputs[2].value) size_xl += isNaN(parseInt(inputs[3].value)) ? 0 : parseInt(inputs[3].value) size_xxl += isNaN(parseInt(inputs[4].value)) ? 0 : parseInt(inputs[4].value) }) changeTotal(total, size_m, size_l, size_xl, size_xxl) } changeTotal = (total, size_m, size_l, size_xl, size_xxl) => { document.querySelector('.total').innerText = total document.querySelector('.size-m').innerText = size_m document.querySelector('.size-l').innerText = size_l document.querySelector('.size-xl').innerText = size_xl document.querySelector('.size-xxl').innerText = size_xxl } تقوم دالة calcTotal بأخذ القيم من الحقول من الجدول وجمع قيمة كل عمود على حدى ثم تخزين هذه القيم في المتغيرات total, size_m, size_l, size_xl, size_xxl وفي النهاية تقوم بتمرير هذه المتغيرات إلى الدالة changeTotal المسئولة عن إضافة الأرقام إلى صف الإجمالي الذي قمنا بإنشائه في الخطوة الأولى، لكن هذه الدوال يجب أن تعمل بعد إضافة الألوان إلى الجدول وذلك من خلال إضافة حدث submit آخر إلى النموذج .needs-validation-create-table كالتالي: document.getElementsByClassName('needs-validation-create-table')[0].addEventListener('submit', () => { felids = document.querySelectorAll('td.color-sizes-count') felids.forEach((felid) => { felid.addEventListener('change', calcTotal) }) }) يقوم الكود السابق بإنتظار الضغط على زر "البدء بتعبئة الطلب" ثم يقوم بإضافة حدث change على كل حقل إدخال موجود في الجدول ليتم تنفيذ الدالة calcTotal عند حدوث أي تغير في قيم الحقول في الجدول وبهذا سيتم تغير القيم في صف الإجمالي كما في الصورة: وهنا الكود الكامل: addTotalRows = () => { row_html = `<tr class="total-row"> <th scope="row" style="border: 1px solid #373838;background-color: #bec1c3;"> الإجمالي </th> <td scope="row" class="total" style="border: 1px solid #373838;"> </td> <td scope="row" class="size-m" style="border: 1px solid #373838;"> </td> <td scope="row" class="size-l" style="border: 1px solid #373838;"> </td> <td scope="row" class="size-xl" style="border: 1px solid #373838;"> </td> <td scope="row" class="size-xxl" style="border: 1px solid #373838;"> </td> </tr>` tbody = document.querySelector('tbody') tbody.innerHTML = tbody.innerHTML + row_html } document.getElementsByClassName('needs-validation-create-table')[0].addEventListener('submit', addTotalRows) calcTotal = () => { rows = document.querySelectorAll('tbody tr:not(.sizes-names):not(.total-row)') total = 0 size_m = 0 size_l = 0 size_xl = 0 size_xxl = 0 rows.forEach((row)=>{ inputs = row.querySelectorAll('td input') total += isNaN(parseInt(inputs[0].value)) ? 0 : parseInt(inputs[0].value) size_m += isNaN(parseInt(inputs[1].value)) ? 0 : parseInt(inputs[1].value) size_l += isNaN(parseInt(inputs[2].value)) ? 0 : parseInt(inputs[2].value) size_xl += isNaN(parseInt(inputs[3].value)) ? 0 : parseInt(inputs[3].value) size_xxl += isNaN(parseInt(inputs[4].value)) ? 0 : parseInt(inputs[4].value) }) changeTotal(total, size_m, size_l, size_xl, size_xxl) } changeTotal = (total, size_m, size_l, size_xl, size_xxl) => { document.querySelector('.total').innerText = total document.querySelector('.size-m').innerText = size_m document.querySelector('.size-l').innerText = size_l document.querySelector('.size-xl').innerText = size_xl document.querySelector('.size-xxl').innerText = size_xxl } document.getElementsByClassName('needs-validation-create-table')[0].addEventListener('submit', () => { felids = document.querySelectorAll('td.color-sizes-count') felids.forEach((felid) => { felid.addEventListener('change', calcTotal) }) })
×
×
  • أضف...