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

لوحة المتصدرين

  1. محمد الملواني

    محمد الملواني

    الأعضاء


    • نقاط

      7

    • المساهمات

      69


  2. Sam Ahw

    Sam Ahw

    الأعضاء


    • نقاط

      2

    • المساهمات

      1388


  3. ayoubridouani

    ayoubridouani

    الأعضاء


    • نقاط

      1

    • المساهمات

      248


  4. سمير عبود

    سمير عبود

    الأعضاء


    • نقاط

      1

    • المساهمات

      3471


المحتوى الأكثر حصولًا على سمعة جيدة

المحتوى الأعلى تقييمًا في 12/08/20 في كل الموقع

  1. يشير مصطلح مفتوح المصدر (open source) لأي شيء يمكن لأي شخص تعديله ومشاركته لأن تصميمه متاح للجميع. نشأ هذا المصطلح في سياق تطوير البرمجيات للدلالة على نهج خاص لإنشاء برامج للحاسوب. أما اليوم، فإن مصطلح "مفتوح المصدر" يشير لمجموعة أوسع من القيم - والّتي نسميها "الثقافة مفتوحة المصدر. تتبنى المشاريع، أو المنتجات، أو المبادرات مفتوحة المصدر مبادئ التبادل المفتوح والمشاركة التعاونية والنماذج الأولية السريعة والشفافية العالية والجدارة والتنمية الموجهة للمجتمع. ما هي البرمجية مفتوحة المصدر؟ البرمجيات مفتوحة المصدر: هي برمجيات يمكننا رؤية شيفرتها البرمجية وفحصها وتعديلها وتحسينها. "الشيفرة البرمجية" هي جزء من برمجية لا يراه معظم مستخدمي الحاسوب على الإطلاق، ويتلاعب مبرمجو الحاسوب بالشيفرة لتغيير طريقة عمل البرمجية - سواءً أكانت "برنامج" أو "تطبيق". يمكن للمبرمجين الّذين يستطيعون الوصول للشيفرة البرمجية لبرنامج الحاسوب تحسين هذا البرنامج من خلال إضافة ميزات إليه أو إصلاح الأجزاء الّتي لا تعمل دائمًا عملًا صحيحًا. ما الفرق بين البرمجيات مفتوحة المصدر والأنواع أخرى؟ هناك بعض البرمجيات الّتي لا تُملكُ شيفرتها أو يمكن التعديل عليها سوى الجهة الّتي أنشأتها سواءً أكانت ممثلة بشخص أو فريق أو مؤسسة وتحتفظ هذه الجهة بالسيطرة الحصرية عليها. ويطلق الناس على هذا النوع من البرمجيات "بالبرمجيات المحتكرة" (proprietary) أو "مغلقة المصدر" (closed source). يمكن لأصحاب البرمجيات المحتكرة وحدهم نسخ هذه البرمجيات، وفحصها وتغييرها بطريقة قانونية. ولاستخدام البرمجيات المحتكرة لابد أن يوافق مستخدمي الحاسوب (للتوقيع على الترخيص المعروض والّذي يعرض عادةً عند التشغيل للمرة الأولى للبرمجيات) والّتي تنص على أنهم لن يفعلوا أي شيء للبرمجية مخالف صراحةً لما يسمح به منشئي هذه البرمجية. ومن هذه البرمجيات نذكر Microsoft Office وAdobe Photoshop. تختلف البرمجيات مفتوحة المصدر عن نظيرتها المحتكرة. إذ يتيح منشئي البرمجيات المفتوحة المصدر عرض الشيفرة البرمجية، ونسخها، والتعلم منها، وتغييرها، ومشاركتها أيضًا. ومن هذه البرمجيات نذكر محرر النصوص ليبر أوفيس LibreOffice وبرنامج التلاعب بالصور Gimp. وكما هو الحال مع البرمجيات المحتكرة يجب على المستخدمين عند استخدامهم البرمجيات مفتوحة المصدر الموافقة على شروط الترخيص بيدَ أن هذه الشروط تختلف اختلافًا كبيرًا عن شروط البرمجيات المحتكرة. تحدّد تراخيص البرمجيات مفتوحة المصدر طريقة استخدام البرمجيات، وتعديلها، وتوزيعها. وعمومًا تَمنحُ هذه التراخيص إذنًا باستخدام البرمجيات لأي غرض يرغب به المستخدم. إلا أن البعض الأخر من التراخيص والّتي يسميها البعض "الحقوق المتروكة" تنص على وجوب عرض الشيفرة البرمجية الخاصة لكلّ نُسخة مُعدلة من هذه البرمجية علنيًا. علاوة على ذلك بعض التراخيص تُوجبُ على أي شخص يعدلّ البرمجية ويشاركها مع الآخرين أن يشارك أيضًا المصدر الأصلي للشيفرة بدون فرض رسوم الترخيص عليها. تعمدُ تراخيص البرمجيات مفتوحة المصدر على تعزيز روح التعاون والمشاركة لأنها تسمح للجميع بإجراء تعديلات على الشيفرات البرمجية، ودمج هذه التغييرات في مشاريعهم الخاصة. وهم بذلك يشجعون مبرمجي الحاسوب بالوصول إلى البرمجيات مفتوحة المصدر وعرضها وتعديلها بأي وقت يحلو لهم، طالما أنهم سمحوا للآخرين بفعل نفس الشيئ عندما يشاركون برمجياتهم. هل البرمجيات مفتوحة المصدر مهمة لمبرمجي الحاسوب فقط؟ بالتأكيد لا. بل إن التكنولوجيا مفتوحة المصدر والعقلية المنفتحة للمصادر المفتوحة عمومًا تفيد كلًا من المبرمجين وغير المبرمجين. لأن المخترعين الأوائل للإنترنت شيدوا جزءًا كبيرًا منه على تقنياتٍ مفتوحة المصدر - مثل: نظام التشغيل Linux وتطبيق خادم الوِب المحلي Apache - وبذلك أي شخص يستخدم الانترنت فهو في الحقيقة يستفيد من البرمجيات مفتوحة المصدر. عند كلّ عملية استعراض لصفحة وِب أو التحقق من البريد الإلكتروني، أو الدردشة مع الأصدقاء، أو استخدام منصات البث الموسيقي عبر الإنترنت، أو اللعب بألعاب فيديو متعددة اللاعبين فإن حاسوب المستخدم، أو هاتفه المحمول، أو طرفيات الألعاب ستتصل بشبكة عالمية من الحواسيب من خلال برمجيات مفتوحة المصدر من أجل توجيه ونقل البيانات إلى أجهزتهم "المحلية" الموجودة أمام أعينهم. عادةً ما تتواجد هذه الحواسيب الّتي تؤدي كلّ هذا العمل الهام في أماكن بعيدة عن أنظار المستخدمين أو لا يستطيعون الوصول إليها فعليًا - وهذا هو السبب في أن بعض الأشخاص يطلقون على هذه الحواسيب "بالحواسيب البعيدة". يعتمد الناس أكثر فأكثر على الحواسيب البعيدة عند أداء مهامهم بدلًا من أجهزتهم المحلية. فمثلًا، قد يستخدمون برمجيات معالجة الكلمات وإدارة البريد الإلكتروني وتحرير الصور وهي غير مثبتة على حواسيبهم الشخصية. وإنما، ببساطة يصلون لها عبر الحواسيب البعيدة من خلال متصفح الوِب أو تطبيق على الهاتف محمول. وعندما يفعلون ذلك، فهم ينخرطون في "الحوسبة عن بُعد". يطلق بعض الأشخاص على الحوسبة عن بُعد "بالحوسبة السحابية" وذلك لأنها تتضمن أنشطة (مثل: تخزين الملفات أو مشاركة الصور أو مشاهدة مقاطع الفيديو) والّتي لا تتضمن حواسيب محلية فقط وإنما شبكة عالمية من الحواسيب البعيدة أيضًا الّتي تشكل سحابة. تتوالى أهمية الحوسبة السحابية يومًا بعد يوم وخصيصًا في الحياة اليومية للأجهزة المتصلة بالإنترنت. ومن بعض تطبيقات الحوسبة السحابية المحتكرة Google Apps. أما بعض التطبيقات الأخرى مفتوحة المصدر نذكر: ownCloud وNextcloud. تعمل تطبيقات الحوسبة السحابية "على قمة" من البرمجيات الإضافية المساعدة لها لتعمل بسلاسة وكفاءة، لذلك غالبًا ما سيقول الناس أن البرمجيات الّتي تعمل "تحت" تطبيقات الحوسبة السحابية تعمل بمثابة "منصة" لتطبيقات الحوسبة السحابية، وتكون هذه المنصات إما مفتوحة المصدر أو مغلقة المصدر. فمثلًا المنصة OpenStack هي منصة مفتوحة المصدر. لماذا يفضل الناس استخدام برمجيات مفتوحة المصدر؟ يفضل الناس البرمجيات مفتوحة المصدر على حساب البرمجيات المحتكرة لعدد من الأسباب: زيادة السيطرة على البرمجية يفضل كثير من الناس البرمجيات مفتوحة المصدر لأنها تعطيهم مزيدًا من السيطرة والتحكم. إذ يمكنهم فحص الشيفرة البرمجية للتأكد من أنها ستؤدي نفس المهمة الّتي يريدونها، بل ويمكنهم حتى تغيير أي جزء منها لا يحبونه. كما يستفيد غير المبرمجين من هذه البرمجيات أيضًا، لأنهم يمكنهم استخدام هذه البرمجية لأي غرض يرغبون فيه - وبذلك لا تُفرض عليهم الطريقة الّتي يعتقد شخص ما -صاحب البرمجية مثلًا- بأنه يجب عليهم استخدام البرمجية وفقًا لها (كما يحدث في البرمجيات المحتكرة). التعلم والتدرب من هذه البرمجيات يحبُ البعض الآخر من الناس هذه البرمجيات لأنها تساعدهم ليصبحوا مبرمجين أفضل. نظرًا لأن الشيفرة البرمجية متاحة للجميع، وبذلك يمكن للطلاب دراستها بسهولة أثناء تعلمهم لإنشاء برمجية أفضل. يمكن للطلاب مشاركة عملهم مع الآخرين أيضًا، ودعوتهم للتعليق والنقد البناء، وبذلك يصقل الطلاب مهاراتهم. عندما يكتشف الأشخاص أخطاءً في الشيفرات البرمجية لبرامجهم، يمكنهم مشاركة هذه الأخطاء مع الآخرين لمساعدتهم على تجنب ارتكاب نفس هذه الأخطاء. الحماية والأمان يُفضل بعض الأشخاص هذه البرمجيات لأنهم يرونها أكثر أمانًا واستقرارًا من البرمجيات المحتكرة. نظرًا من كون الجميع يستطيع عرض وتعديل البرمجيات مفتوحة المصدر، فيمكن لأي شخص أن يكتشف خطأ غفِلَ عنه أصحاب البرمجية أنفسهم بل ويمكن أن يصحح أو يحذف هذا الخطأ. ولأن العديد من المبرمجين يمكنهم العمل على جزء معين من البرمجية بدون طلب إذن من أصحابها، فسيُسرّع ذلك من وتيرة إصلاح البرمجية وتحديثها وترقيتها أكثر من البرمجيات المحتكرة. الاستقرار والثبات يفضل العديد من المستخدمين البرمجيات مفتوحة المصدر على نظيرتها المحتكرة للمشاريع المهمة وطويلة الأمد. نظرًا لتوزيع المبرمجين الشيفرة البرمجية علنًا للبرمجيات مفتوحة المصدر، فيمكن للمستخدمين الّذين يعتمدون على هذه البرمجيات في المهام الحرجة التأكد من أن أدواتهم لن تختفي أو تتعطل إذا توقف أصحابها عن تطويرها -وذلك لأن لديها عدة مبرمجين آخرين مهتمين بها- علاوة عن ذلك، تميل البرمجيات مفتوحة المصدر للاندماج والعمل وفقًا للمعايير المفتوحة. المجتمع الداعم للبرمجية غالبًا ما تستقطب البرمجيات مفتوحة المصدر جمهورًا من المستخدمين والمطورين المحبين لها. وهذا ليس حكرًا على هذه البرمجيات بل العديد من التطبيقات الشعبية لها مجتمعات كبيرة ومواضيع يناقشونها في لقاءاتهم واجتماعاتهم. غير أن في البرمجيات مفتوحة المصدر يكون المجتمع ليس مجرد قاعدة جماهيرية تشتري (سواء عاطفيًا بالدعم أو ماليًا بسعر البرمجية) وتكوّن بذلك مجموعة مميزة من المستخدمين وحسب، وإنما مجموعة من الأشخاص الّذين ينتجون ويختبرون ويستخدمون ويروجون بل ويؤثرون تأثيرًا جوهريًا على البرمجية الّتي يحبونها. هل يعني مصطلح "مفتوح المصدر" بأنه مجاني؟ لا. هذا مفهوم خاطئ ومنتشر حول ما يعنيه مصطلح "مفتوح المصدر"، وممكن ألا يتعلق هذا المصطلح بالمال. يمكن لمبرمجي هذه البرمجيات أن يتقاضوا المال مقابل البرمجيات مفتوحة المصدر الّتي يصنعونها أو يساهمون فيها. ولكن في بعض الحالات، نظرًا لأن ترخيص المصدر المفتوح يتطلب منهم إصدار الشيفرة البرمجية علنًا عندما يبيعون هذه البرمجيات للآخرين، ولذلك يجدُ بعض المبرمجين أن فرض رسوم على المستخدمين مقابل الخدمات والدعم الفني للبرمجية (بدلًا من البرمجية بحد ذاتها) أكثر ربحًا. وبهذا تظل برمجياتهم مجانية، ويكسبون المال من مساعدة الآخرين في تثبيتها واستخدامها واستكشاف أخطائها وإصلاحها. على الرغم من كون بعض البرمجيات مفتوحة المصدر مجانية، إلا أن مهارة البرمجة واستكشاف الأخطاء وإصلاحها في البرمجيات مفتوحة المصدر يمكن أن تكون ذات قيمة كبيرة. يسعى الكثير من أرباب العمل لتوظيف مبرمجين لديهم خبرة سابقة بالعمل على برمجيات مفتوحة المصدر تحديدًا. ما هي الثقافة مفتوحة المصدر "أي أبعد من الشيفرة البرمجية"؟ إن التعامل مع جميع جوانب الحياة بثقافة مفتوحة المصدر يعني التعبير عن الرغبة في المشاركة والتعاون مع الآخرين بشفافية (ليتمكن الآخرين من المشاهدة أو حتى الانضمام أيضًا)، واحتضان الفشل كوسيلة للتطوّر، وتوقع -أو حتى تشجيع- الجميع ليشاركوا وينضموا إلى هذه الثقافة. ويعني الالتزام أيضًا بدور فعّال في تحسين العالم، وهو أمر ممكن في حال تمكن الجميع من الوصول للطريقة الّتي صُمّم بها هذا العالم. إن العالم مليء "بالشيفرات البرمجية" - المخططات والوصفات والقواعد - الّتي توجه طريقة تفكيرنا وتشكلها من أجل أن نتصرف على أساسها. نؤمن تمامًا بأن هذه الشيفرة الضمنية (مهما كان شكلها) يجب أن تكون مفتوحةً وقابلة للوصول والمشاركة من قِبل الجميع — ليتمكنوا من تغييرها للأفضل. ترجمة -وبتصرف- للمقال What is open source software?‎
    1 نقطة
  2. مرحباً بك، في الحقيقة تعليمة switch تعمل بشكل صحيح و ذلك لأن أي قيمة يتم إرجاعها في المتغير num عبارة عن سلسلة نصية (string) و بالتالي لم تُطابق أي حالة من الحالات الموجودة (cases) في تعليمة switch. إضافة إلى ذلك لا توجد تعليمة default فإذا لم تتحقق أي حالة من الحالات سيتم تنفيذها: default: message.innerHTML = "anything"; break; بإمكانك تحويل النوع من string إلى int بحيث مثلا: حالياً إذا أدخل المُستخدم 2 فإن القيمة التي ستُخزن في المُتغير num ستكون "2" لكن يُمكننا تحويلها إلى 2 عن طريق إستخدام الدالة parseInt كما هو موضح أدناه: var num = parseInt(document.getElementById("number").value); ليُصبح الكود في النهاية بهذا الشكل: function f1() { "use strict"; var num = parseInt(document.getElementById("number").value); var result = num * 600; var message = document.getElementById("m"); switch (num) { case 1 : message.innerHTML = "1/1/2020"; break; case 2 : message.innerHTML = "2/2/2020"; break; case 3 : message.innerHTML = "3/3/2020"; break; case 4 : message.innerHTML = "4/4/2020"; break; case 5 : message.innerHTML = "5/5/2020"; break; default: message.innerHTML = "anything"; break; } } بالتوفيق.
    1 نقطة
  3. <!DOCTYPE html> <html> <head> <title>Asma'a</title> <style> body { width:100%; height:100% ; } div { margin:70px auto ; width:23%; height:90% ; border: 2px solid lightseagreen; border-radius:10% ; background-color: cyan; padding:20px; } input[type="text"] { color: rgb(12, 106, 122); font-size: 20px; background-color: rgb(218, 248, 246); } ::placeholder { color: blueviolet; text-align: center; } textarea { border: 2px soild #ddd; resize: none; } </style> <script> function f1() {"use strict"; var num=document.getElementById( "number").value; var result=num*600; var message=document.getElementById("m"); switch(num){ case "1" : message.innerHTML="1/1/2020"; break; case "2" : message.innerHTML="2/2/2020"; break; case "3" : message.innerHTML="3/3/2020"; break; case "4" : message.innerHTML="4/4/2020"; break;case 1 : message.innerHTML="5/5/2020"; break; }} </script> </head> <body> <div> <input type="text" id="number" placeholder="Enter number" value="" required> <button onclick="f1()"> submit</button><br><br> <textarea cols="40" rows="2" id="m"></textarea> </div> </body> </html> case تحتاج البحث عن string وليس int function f1() {"use strict"; var num=document.getElementById( "number").value; var result=num*600; var message=document.getElementById("m"); switch(num){ /* تم تعديل الكود من رقم 1 الى القيمة النصية 1 في المثال الذي قمتي بإرساله كان يقوم بمقارنة الرقم واحد كنوع بيانات integer والصحيح ان القيمة الموجودة في num والتي يتم جلبها من الصندوق النصي تكون من نوع بيانات string */ case "1" : message.innerHTML="1/1/2020"; break; case "2" : message.innerHTML="2/2/2020"; break; case "3" : message.innerHTML="3/3/2020"; break; case "4" : message.innerHTML="4/4/2020"; break;case 1 : message.innerHTML="5/5/2020"; break; }}
    1 نقطة
  4. #include <iostream> using namespace std; int main() { unsigned int n; // اعطاء التطبيق امكانية ادخال عدد متغير من الطلاب std::cout << "Enter number of Students: "; // طلب ادخال عدد الطلاب std::cin >> n; // استقبال عدد الطلاب double** array_result = new double*[n]; // مصفوفة احادية لدرجات الطلاب string** array_names = new string*[n];// مصفوفة احادية لاسماء الطلاب int totalres = 0; // اضافة متغير لحساب اجمالي الدرجات int largest ; // متغير للحصول على اكبر درجة int largest_st ; // رقم الطالب صاحب اكبر درج int lowest ; // متغير للحصول على اصغر درج int lowest_st ; // رقم الطالب الحاصل على اصغر درجه int nine_st = 0 ; // متغير حساب الطلبه الحاصلين على درجة 90 int faild_st = 0; // متغير حساب عدد الطلبة الراسبين for (int i = 1; i <= n; ++i) // حلقة انشاء المصفوفات على حسب عدد الطلاب { array_names[i] = new string[1]; // انشاء مصفوفة الاسماء for (int j = 0; j < 1; ++j) { string name; std::cout << "Please Enter the name of Student : " ; // تم تعديل الرساله هنا لتناسب الشاشه الخاصه بك std::getline(std::cin >> std::ws, name); // getline تم اضافتها لتفادي اخطاء الاسماء مع المسافات مثل abd el rahman std::ws لتفادي المسافات array_names[i][j] = name; } array_result[i] = new double[1];// انشاء مصفوفة الدرجات for (int j = 0; j < 1; ++j) { int element; std::cout << "Please Enter the mark of Student " << array_names[i][0] << " : "; // تم تعديل الرساله هنا لتناسب الشاشه الخاصه std::cin >> element; array_result[i][j] = element; } } // ملحوظه المصفوفه تبدا برقم 1 // تحديد قيمة اعلى درجة باول درجة في المصفوفه largest = array_result[1][0]; // تحديد الطالب صاحب النتيحه largest_st = 1; // تحديد قيمة اقل درجة باول درجة في المصفوفه lowest = array_result[1][0]; // تحديد الطالب صاحب النتيحه lowest_st = 1; std::cout << "\n" << string(60, '='); // فاصل ديكوري =========== std::cout << "\n" << string(12, ' ') << " Student " << string(24, ' ') << " Marks " ; // راس جدول النتيجه for (int i = 1; i <= n; ++i) // الحصول على اجمالي الدرجات { //20 character for name formating 20 حرف لتجميل تساوي الاسماء int emptyspace = 20 - array_names[i][0].length(); std::cout << "\n" << string(emptyspace, ' ') << array_names[i][0] << string(28, ' ') << array_result[i][0] ; totalres = totalres + array_result[i][0] ; // جمع درجات الطلاب // مقارنة بين درجات الطلاب اذا وجدت درجه اكبر يتم حفظها في القيمة الاكبر if(largest < array_result[i][0]) { // تعيين اعلى نتيجه و رقم الطالب largest = array_result[i][0]; largest_st = i; } // عكس عملية المقارنة بالاصغر if(lowest > array_result[i][0]) { // تعين اقل درجة و تعين رقم الطالب الاقل lowest = array_result[i][0]; lowest_st = i; } // حساب عدد الحاصلين على 90 if (array_result[i][0] == 90){ nine_st ++; } // حساب عدد الراسبين if (array_result[i][0] < 50){ faild_st ++; } } std::cout << "\n" << string(60, '='); // فاصل ديكوري =========== // خارج حلقة الجمع نظهر نتيجة الاجماليات std::cout << "\n Sum = " << string(40, ' ') << totalres ; // حساب متوسط النتائج يكون عباره عن مجموع الدرجات مقسوم على عدد الطلاب std::cout << "\n Average = " << string(36, ' ') << totalres / n ; std::cout << "\n Max = " << string(41, ' ') << largest << string(10 , ' ') << " By Student " << array_names[largest_st][0] ; std::cout << "\n Min = " << string(41, ' ') << lowest << string(10 , ' ') << " By Student " << array_names[lowest_st][0] ; std::cout << "\n No. of Std. Have 90 " << string(27, ' ') << nine_st ; std::cout << "\n No. of Std. Who Fails "<< string(25, ' ') << faild_st ; return 0; } إذا كان هناك جزء في الكود غير واضح لا تتردد بالسْؤال
    1 نقطة
  5. 1 نقطة
  6. حسنا سأقوم بالتعديل المطلوب و شرح التعديلات و ارسلها مرة أخرى
    1 نقطة
  7. في الواقع لا يوجد عدد محدد، وإنما يجب عليك الانتباه للمساحة التخزينية على السيرفر وقدرات المعالج والذاكرة RAM بالنسبة للمواقع التي ستستضيفها
    1 نقطة
  8. أولاً يجب عليك وضع ملفات موقع الويب الخاص بك ضمن السيرفر في مكان ما داخل /var/www ولنفترض داخل /var/www/subdomain.test.com sudo nano /etc/nginx/sites-available/subdomain.test.com ثم يجب عليك ضبط إعدادات DNS للنطاق الأساسي الذي ترغب بإضافة نطاق فرعي له عن طريق إضافة سجل من نمط A وربطه مع النطاق الفرعي الجديد والآن يجب عليك ضبط إعدادات Nginx الخاص بك لاستقبال طلبات HTTP وتحويلها للمجلد الذي يحوي ملفات موقعك server { listen 80; root /var/www/subdomain.test.com; index index.html index.htm index.nginx-debian.html; server_name sub.test.com www.subdomain.test.com; location / { try_files $uri $uri/ =404; } } حيث يجب عليك تعديل root لتشير إلى ملفات الموقع وكذلك server_name باسم النطاق الجديد وأخيراً قم بإعادة تشغيل سيرفر الويب: service nginx restart
    1 نقطة
  9. مشكلة Rails framework ليست في MVC لانهم عبارة عن كود روبي في النهائية لكن لابد من معرفة ماذا يفعل كل جزء في الكود الخاص بك معرفة أشياء بشكل صحيح . مثلا في controller كلهم عبارة عن دوال مثل أي كود روبي class ArticlesController < ApplicationController def new end end و لكن يوجد بعض أشياء خاص ب controller وجاهزه تعرفه عندما تقوم بعمل شئ جديد أو عندم تقع في مشكلة مثلا تريد حماية API خاصة بك في rails يعطيك خيار يمكن اضافته في controller عن طريق class ApplicationController < ActionController::Base protect_from_forgery end class FooController < ApplicationController protect_from_forgery except: :index end ليس مطلوب منك في اول أسبوع أن تعرف ذلك ولكن مع مرور الوقت سوف تتعلم ذلك . مثلا في view يوجد العديد من الدوال المساعدة التي يجب عليكي معرفته جيد وكذلك model . في البداية يعتبر تعلم rails صعب لكنها في البداية فقط وتذكر دائما تعلم أي شئ في البداية صعب حتي اللعب بالكورة مثلا . نصحيتي لك لابد من أنك تعلم لغة Ruby بشكل جيد قبل دخول في Rails لكي لاتجد صعوبة في تعلم Rails . اذا وجدت بعض صعوبة في تعلم RAILS يمكنك تعلم Sinatra هو framework صغير مستخدم من قبل العديد لعمل ما يسمي بـ micro service باستخدام لغة روبي سوف يسعدك في تعلم أشياء قبل دخول في Rails . إذا تري أي جزء في الكود لم تعرفها أو صعب فهمه يمكن سؤال دائما و البحث بنفسك علي نت هذا سوف يحسنك دائما . هل طبيعي أن تجد صعوبة في تعلم شئ جديد ؟ نعم بكل تأكيد شئ جديد عليك وتعلمه يأخذ وقت بالتأكيد ولكن بممارسة و تصحيح الخطأ دائما سوف تجد الحل . تذكر دائما دائما اجعل جوجل صديقك المفضل
    1 نقطة
  10. مرحبا عبد ااواحد، إن هرمية MVC قائمة على توزيع المهام البرمجية إلى 3 أقسام، وهي MODEL أي نماذج قواعد البيانات، وما تحتويه من صفوف و بيانات و استعلامات، آليات الإضافة و التعديل وكل ما يتعلق بقواعد البيانات، مهمتها الأساسية في التطبيق هي تزويدنا بالمعلومات التي نطلبها. القسم الثاني، العرض VIEW، وهو كل ما يظهر للمستخدم على الشاشة، أساسه صفحات HTML و ماتتضمنه من تنسيقات و ايضا جافا سكربت وإطارات العمل خاصتها. القسم الثالث، المتحكم Controller وهو عنصر الربط بين ماسبق، حيث أنه يستلم طلبية الزبون/المستخدم و يطلب بعدها البيانات المتوافقة من MODEL و بعدها يوجه البيانات بالشكل الصحيح لواجهة العرض المناسبة VIEW. يوجد عدة إطارت عمل تحقق هرمية MVC منها ASP.NET MVC و Laravel .. تطوير المهارات في MVC، هو فقط فهم دور كل مكون منهم في التطبيق وتوزيع العمل بينهم، إن الاعتماد على MVC يمنع ظهور الحشو في التطبيق، حيث كانت الصفحة الواحدة تحوي على خليط من عدة لغات برمجة، من استعلام قواعد البيانات إلى حشوها في عناصر HTML.. ما يعطي شيفرة برمجية غير منسقة و صعبة الفهم و التعديل و التطوير، وهذا يخالف مفاهيم و مبادئ تطوير البرمجيات. بالتوفيق
    1 نقطة
  11. Enter number of Students: 10 Enter Student 1 Name : mohamed Enter mohamed Result : 30 Enter Student 2 Name : mahmoud Enter mahmoud Result : 55 Enter Student 3 Name : ali Enter ali Result : 40 Enter Student 4 Name : said Enter said Result : 90 Enter Student 5 Name : kamel Enter kamel Result : 87 Enter Student 6 Name : ayman Enter ayman Result : 60 Enter Student 7 Name : fouad Enter fouad Result : 44 Enter Student 8 Name : gamal Enter gamal Result : 70 Enter Student 9 Name : hossam Enter hossam Result : 30 Enter Student 10 Name : ragheb Enter ragheb Result : 80 Student mohamed Result 30 Student mahmoud Result 55 Student ali Result 40 Student said Result 90 Student kamel Result 87 Student ayman Result 60 Student fouad Result 44 Student gamal Result 70 Student hossam Result 30 Student ragheb Result 80 Total Result : 586 Total Result MID : 58 Highest Result : 90 By Student said Lowest Result : 30 By Student mohamed 90's Result Count : 1 Fails Student Count : 4 النتيجه النهائية للمشروع
    1 نقطة
  12. #include <iostream> using namespace std; int main() { unsigned int n; // اعطاء التطبيق امكانية ادخال عدد متغير من الطلاب std::cout << "Enter number of Students: "; // طلب ادخال عدد الطلاب std::cin >> n; // استقبال عدد الطلاب double** array_result = new double*[n]; // مصفوفة احادية لدرجات الطلاب string** array_names = new string*[n];// مصفوفة احادية لاسماء الطلاب int totalres = 0; // اضافة متغير لحساب اجمالي الدرجات int largest ; // متغير للحصول على اكبر درجة int largest_st ; // رقم الطالب صاحب اكبر درج int lowest ; // متغير للحصول على اصغر درج int lowest_st ; // رقم الطالب الحاصل على اصغر درجه for (int i = 1; i <= n; ++i) // حلقة انشاء المصفوفات على حسب عدد الطلاب { array_names[i] = new string[1]; // انشاء مصفوفة الاسماء for (int j = 0; j < 1; ++j) { string name; std::cout << "Enter Student " << i << " Name : "; std::cin >> name; array_names[i][j] = name; } array_result[i] = new double[1];// انشاء مصفوفة الدرجات for (int j = 0; j < 1; ++j) { int element; std::cout << "Enter " << array_names[i][0] << " Result : "; std::cin >> element; array_result[i][j] = element; } } // ملحوظه المصفوفه تبدا برقم 1 // تحديد قيمة اعلى درجة باول درجة في المصفوفه largest = array_result[1][0]; // تحديد الطالب صاحب النتيحه largest_st = 1; // تحديد قيمة اقل درجة باول درجة في المصفوفه lowest = array_result[1][0]; // تحديد الطالب صاحب النتيحه lowest_st = 1; for (int i = 1; i <= n; ++i) // الحصول على اجمالي الدرجات { std::cout << "\n" << "Student " << array_names[i][0] << " Result " << array_result[i][0] ; totalres = totalres + array_result[i][0] ; // جمع درجات الطلاب // مقارنة بين درجات الطلاب اذا وجدت درجه اكبر يتم حفظها في القيمة الاكبر if(largest < array_result[i][0]) { // تعيين اعلى نتيجه و رقم الطالب largest = array_result[i][0]; largest_st = i; } // عكس عملية المقارنة بالاصغر if(lowest > array_result[i][0]) { // تعين اقل درجة و تعين رقم الطالب الاقل lowest = array_result[i][0]; lowest_st = i; } } // خارج حلقة الجمع نظهر نتيجة الاجماليات std::cout << "\nTotal Result : " << totalres ; // حساب متوسط النتائج يكون عباره عن مجموع الدرجات مقسوم على عدد الطلاب std::cout << "\nTotal Result MID : " << totalres / n ; std::cout << "\nHighest Result : " << largest << " By Student " << array_names[largest_st][0] ; std::cout << "\nLowest Result : " << lowest << " By Student " << array_names[lowest_st][0] ; return 0; } يتبع #include <iostream> using namespace std; int main() { unsigned int n; // اعطاء التطبيق امكانية ادخال عدد متغير من الطلاب std::cout << "Enter number of Students: "; // طلب ادخال عدد الطلاب std::cin >> n; // استقبال عدد الطلاب double** array_result = new double*[n]; // مصفوفة احادية لدرجات الطلاب string** array_names = new string*[n];// مصفوفة احادية لاسماء الطلاب int totalres = 0; // اضافة متغير لحساب اجمالي الدرجات int largest ; // متغير للحصول على اكبر درجة int largest_st ; // رقم الطالب صاحب اكبر درج int lowest ; // متغير للحصول على اصغر درج int lowest_st ; // رقم الطالب الحاصل على اصغر درجه int nine_st = 0 ; // متغير حساب الطلبه الحاصلين على درجة 90 int faild_st = 0; // متغير حساب عدد الطلبة الراسبين for (int i = 1; i <= n; ++i) // حلقة انشاء المصفوفات على حسب عدد الطلاب { array_names[i] = new string[1]; // انشاء مصفوفة الاسماء for (int j = 0; j < 1; ++j) { string name; std::cout << "Enter Student " << i << " Name : "; std::cin >> name; array_names[i][j] = name; } array_result[i] = new double[1];// انشاء مصفوفة الدرجات for (int j = 0; j < 1; ++j) { int element; std::cout << "Enter " << array_names[i][0] << " Result : "; std::cin >> element; array_result[i][j] = element; } } // ملحوظه المصفوفه تبدا برقم 1 // تحديد قيمة اعلى درجة باول درجة في المصفوفه largest = array_result[1][0]; // تحديد الطالب صاحب النتيحه largest_st = 1; // تحديد قيمة اقل درجة باول درجة في المصفوفه lowest = array_result[1][0]; // تحديد الطالب صاحب النتيحه lowest_st = 1; for (int i = 1; i <= n; ++i) // الحصول على اجمالي الدرجات { std::cout << "\n" << "Student " << array_names[i][0] << " Result " << array_result[i][0] ; totalres = totalres + array_result[i][0] ; // جمع درجات الطلاب // مقارنة بين درجات الطلاب اذا وجدت درجه اكبر يتم حفظها في القيمة الاكبر if(largest < array_result[i][0]) { // تعيين اعلى نتيجه و رقم الطالب largest = array_result[i][0]; largest_st = i; } // عكس عملية المقارنة بالاصغر if(lowest > array_result[i][0]) { // تعين اقل درجة و تعين رقم الطالب الاقل lowest = array_result[i][0]; lowest_st = i; } // حساب عدد الحاصلين على 90 if (array_result[i][0] == 90){ nine_st ++; } // حساب عدد الراسبين if (array_result[i][0] < 50){ faild_st ++; } } // خارج حلقة الجمع نظهر نتيجة الاجماليات std::cout << "\nTotal Result : " << totalres ; // حساب متوسط النتائج يكون عباره عن مجموع الدرجات مقسوم على عدد الطلاب std::cout << "\nTotal Result MID : " << totalres / n ; std::cout << "\nHighest Result : " << largest << " By Student " << array_names[largest_st][0] ; std::cout << "\nLowest Result : " << lowest << " By Student " << array_names[lowest_st][0] ; std::cout << "\n90's Result Count : " << nine_st ; std::cout << "\nFails Student Count : " << faild_st ; return 0; } يتبع
    1 نقطة
  13. طلبك طويل جدا و اجابته ستكون على مراحل اول مرحله هي انشاء المصفوفات الخاصه بالاسماء و الدرجات #include <iostream> using namespace std; int main() { unsigned int n; // اعطاء التطبيق امكانية ادخال عدد متغير من الطلاب std::cout << "Enter number of Students: "; // طلب ادخال عدد الطلاب std::cin >> n; // استقبال عدد الطلاب double** array_result = new double*[n]; // مصفوفة احادية لدرجات الطلاب string** array_names = new string*[n];// مصفوفة احادية لاسماء الطلاب for (int i = 1; i <= n; ++i) // حلقة انشاء المصفوفات على حسب عدد الطلاب { array_names[i] = new string[1]; // انشاء مصفوفة الاسماء for (int j = 0; j < 1; ++j) { string name; std::cout << "Enter Student " << i << " Name : "; std::cin >> name; array_names[i][j] = name; } array_result[i] = new double[1];// انشاء مصفوفة الدرجات for (int j = 0; j < 1; ++j) { int element; std::cout << "Enter " << array_names[i][0] << " Result : "; std::cin >> element; array_result[i][j] = element; } } for (int i = 1; i <= n; ++i) // كود للتاكد من نتائج الاكواد السابقه بطباعه الاسم و الدرجه { std::cout << "\n" << "Student " << array_names[i][0] << " Result " << array_result[i][0] ; } return 0; } يتبع #include <iostream> using namespace std; int main() { unsigned int n; // اعطاء التطبيق امكانية ادخال عدد متغير من الطلاب std::cout << "Enter number of Students: "; // طلب ادخال عدد الطلاب std::cin >> n; // استقبال عدد الطلاب double** array_result = new double*[n]; // مصفوفة احادية لدرجات الطلاب string** array_names = new string*[n];// مصفوفة احادية لاسماء الطلاب int totalres = 0; // اضافة متغير لحساب اجمالي الدرجات for (int i = 1; i <= n; ++i) // حلقة انشاء المصفوفات على حسب عدد الطلاب { array_names[i] = new string[1]; // انشاء مصفوفة الاسماء for (int j = 0; j < 1; ++j) { string name; std::cout << "Enter Student " << i << " Name : "; std::cin >> name; array_names[i][j] = name; } array_result[i] = new double[1];// انشاء مصفوفة الدرجات for (int j = 0; j < 1; ++j) { int element; std::cout << "Enter " << array_names[i][0] << " Result : "; std::cin >> element; array_result[i][j] = element; } } for (int i = 1; i <= n; ++i) // الحصول على اجمالي الدرجات { std::cout << "\n" << "Student " << array_names[i][0] << " Result " << array_result[i][0] ; totalres = totalres + array_result[i][0] ; // جمع درجات الطلاب } // خارج حلقة الجمع نظهر نتيجة الاجماليات std::cout << "\nTotal Result : " << totalres ; // حساب متوسط النتائج يكون عباره عن مجموع الدرجات مقسوم على عدد الطلاب std::cout << "\nTotal Result MID : " << totalres / n ; return 0; } يتبع
    1 نقطة
    انصح جميع من يعامل مع قواعد البيانات ان يجعل هذا الكتاب مرجع أساسي له في عمله، شرح واضح ومعلومات مهمة. اشكر اكادمية حسوب على هذه النوعية الفريدة من الكتب المهمة للمحتوى البرمجي العربي.
    1 نقطة
  14. طيب لما لا تسوق لتطبيقك وتحصل على زيارات حقيقية من لاعبين في مختلف دول العالم ؟ أيضا فكرتك منطقية و admob ستعُدّ نقراتك ونسبة مشاهدة الإعلانات. لكن تكلفة النقرة الخاصة بك ستكون منخفضة للغاية لأن عرض الإعلانات سيكون ضعيفًا عندما تستخدم vpn ip ، وهذا يعني أن admob سيعرض إعلانات عشوائية بدلاً من الإعلانات المستهدفة ، لذلك سيكون معدل التحويل منخفضًا جدًا. والشيء الآخر هو أنه من ضمن بنوذ admob أنه إذا كان العديد من المستخدمين متصلين بخادم vpn نفسه ، فسيتم تعيين عنوان IP نفسه لهم بحيث يتم إجراء العديد من النقرات من نفس عنوان IP. لذلك هناك احتمال لتعليق حساب AdMob.
    1 نقطة
  15. أريد أن أقوم بتنصيب أداة pip لإدارة حزم ومكتبات لغة python البرمجية، فكيف ذلك؟
    1 نقطة
×
×
  • أضف...