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

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

  1. سامح أشرف

    سامح أشرف

    الأعضاء


    • نقاط

      4

    • المساهمات

      2934


  2. إياد أحمد

    إياد أحمد

    الأعضاء


    • نقاط

      3

    • المساهمات

      92


  3. Adnane Kadri

    Adnane Kadri

    الأعضاء


    • نقاط

      3

    • المساهمات

      5196


  4. Hassan Hedr

    Hassan Hedr

    الأعضاء


    • نقاط

      2

    • المساهمات

      2851


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

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

  1. كدالة مضمنة في جافاسكربت، يمكنك الإستعانة بالدالة typeof التي تقوم بتحديد نوع البيانات الممرر إليها مباشرة، تقوم بإعادة أحد النتائج: typeof {name:'Hsoub', type:'academy'} => Object typeof new Date() => Date typeof [1,2] => Array typeof "string" => String typeof 1.21 => Number typeof true => Boolean typeof null => null typeof x => undefined أما ولخدمة غرضك بالضبط فستحتاجين بعض التخصيص. يمكنك عمل ذلك وفق المنطق التالي : نقوم بعمل دالة تقوم بـ: تحويل أي سلسلة نصية تمرر إليها إلى رقم Number. في كل ما هو ليس رقم أو معبر به عن رقم يتم إرجاع NaN. في حالة المعامل الممرر رقم : يتم التحقق ما ان كان هذا الرقم double أو integer. في حالة لم يكن المعامل الممرر رقم : يتم التحقق من نوعه عن طريق typeof. مثال عملي: function getType(data){ var n = Number(data); if(! Number.isNaN(n)){ if(n === +n && n !== (n|0)) return 'double'; if(n === +n && n === (n|0)) return 'integer'; } else{ return typeof data; } } getType(1); // integer getType("1"); // integer getType(1.5); // double getType("1.5"); // double getType("sara"); // string getType([2,4,42]); // array كتابة أكثر اختصارا: function getType(data){ var n = Number(data); return (n === +n && n !== (n|0)) ? 'double' : (n === +n && n === (n|0)) ? 'integer' : typeof data; } تعرف أكثر عن الأعداد (numbers) في جافاسكربت.
    2 نقاط
  2. تتشارك أغلب لغات البرمجة في العديد من المزايا. من أفضل الطرق لتعلم لغة برمجة جديدة هي كتابة برنامج مألوف. في هذا المقال، سنتعلم كيف ننشئ لعبة "احزر الرقم" باستخدام لغة البرمجة Awk لنشرح من خلالها مفاهيم مألوفة. عند تعلم البرمجة بلغة برمجة جديدة، من المهم التركيز على أكثر المفاهيم التي تشترك بها لغات البرمجة: المتغيرات: مكان يُخزن فيه المعلومات. التعابير: طرق لحساب الأشياء. الصياغات: طرق التعبير عن تغير الحالة داخل البرنامج. هذه المفاهيم هي أساس معظم لغات البرمجة. حالما تستوعب جيدا تلك المفاهيم، ستكون قادرًا على استيعاب البقية منها. مثلا أغلب لغات البرمجة تمتلك "طريقة لفعل الأشياء" مدعومة بطريقة تصميم اللغة، وهذه الطرق تختلف من برنامج لآخر. هذه الطرق تتضمن إنشاء الوحدات (تجميع العمليات المتقاربة مع بعضها)، الصيغة التصريحية وصيغة الأمر، والتوجه الغرضي، والمزايا النحوية عالية ومنخفضة المستوى، وما إلى ذلك. مثال يألفه العديد من المبرمجين وهو "المراسم" ويعني كمية التحضيرات اللازمة قبل البدء بحل المشكلة. لغة جافا تتطلب كمية مراسم كبيرة، متجذرة في تصميمها، والذي يتطلب أن تكون كل الشيفرات معرفة ضمن أصناف. بالرجوع إلى الأساسيات. لغات البرمجة تتشارك بعدة تشابهات. حالما تتعرف على لغة برمجة واحدة، ابدأ بتعلم أساسيات لغة برمجة أخرى وستجد نفسك تقدّر الاختلافات في تلك اللغة الجديدة. طريقة جيدة للبدء تكون في إنشاء برنامج اختبار بسيط. أحد تلك البرامج قد يكون برنامج "احزر الرقم". يقوم الحاسب باختيار رقم بين واحد ومئة ويسألك أن تحزر ذلك الرقم. يعيد البرنامج الكرّة إلى أن تحزر الرقم. برنامج "احزر الرقم" سيُدربك على عدة مفاهيم في لغات البرمجة: المتغيرات. الدخل. الخرج. التقييم الشرطي. الحلقات التكرارية. هذا مثال عملي تجريبي رائع لتعلم لغة برمجة جديدة. احزر الرقم باستخدام awk لنبدأ بكتابة لعبة "احزر الرقم" كبرنامج في Awk. Awk لغة برمجة نصية ديناميكية النوع موجهة لتحويل البيانات، ولديها دعم جيد من ناحية الاستخدام التفاعلي. Awk موجودة منذ عام 1970، بدأت كقسم من نظام يونكس. إذا كنت لا تعلم عن Awk ولكنك تحب جداول البيانات فهذه فأنت في المكان الصحيح للتعرف عليها. يمكنك بدء الاستكشاف عبر كتابة نسخة من لعبة "احزر الرقم". التالي تضمين للعبة (مع ترقيم الأسطر حتى نتمكن من الإشارة إليها لاحقًا): 1 BEGIN { 2 srand(42) 3 randomNumber = int(rand() * 100) + 1 4 print "random number is",randomNumber 5 printf "guess a number between 1 and 100\n" 6 } 7 { 8 guess = int($0) 9 if (guess < randomNumber) { 10 printf "too low, try again:" 11 } else if (guess > randomNumber) { 12 printf "too high, try again:" 13 } else { 14 printf "that's right\n" 15 exit 16 } 17 } يمكن الملاحظة مباشرة التشابه بين بنى التحكم في Awk ومثيلاتها في لغات أخرى مثل سي C وجافا JAVA، ولا تشبه تلك التي في بايثون. في التعابير مثل if-then-else أو while، يمكن أن تأخذ تعبيرًا واحدًا أو مجموعة من التعابير محاطة بقوسين معقوصين { و }. ومع ذلك يوجد فرق واحد كبير في Awk يجب فهمه منذ البداية: ماذا يعني ذلك؟ معظم برامج Awk هي مقاطع من الشيفرات التي تتلقى دخل، تقوم بعمل ما على البيانات، ثم تكتبها إلى الخرج. لغة Awk توفر افتراضيًا كل احتياجات التحويل والتوصيل لذلك. لنستكشف ذلك معا من خلال البرنامج السابق ونسأل السؤال التالي: أين بنية "القراءة من الطرفية"؟ الجواب أنها مبنية في داخل اللغة نفسها. تحديدا في الأسطر 7 - 17 نخبر Awk ماذا يفعل بكل سطر من الدخل. سيصبح واضحا أن الأسطر 1 - 6 تنفذ قبل أن يتم قراءة أي شيء. تحديدا الكلمة المفتاحية BEGIN في السطر الأول هي نمط مكرر، في حالتنا هذه فإنها تخبر Awk قبل قراءة أي شيء أن ينفذ ما بين القوسين {...}. ومثلها الكلمة المفتاحية END، لم نستخدمها هنا لكنها تدل Awk على التعليمات التي يجب أن ينفذها بعد أن يتم قراءة كل شيء. بالعودة للأسطر 7 - 17، فهي تمثل كتلة واحدة ستنفذ معًا، لكن لا يوجد قبلها كلمة مفتاحية. لذا يقوم Awk بتنفيذ هذه الأسطر على كل سطر يتم تلقيه من الدخل وفي حالتنا هذه هي محاولات المستخدم لحزر الرقم. لنلق الآن نظرة على الشيفرة التي تنفذ، بدايةً هناك المقدمة التي تنفذ قبل كل قراءة للدخل. في السطر 2، نعرّف رقما عشوائيا من واحد إلى 42. السطر 3 يقوم بحساب رقم بين 1 و 100، السطر 4 يطبع هذه الرقم لنا فقط للتأكد من وجود أي خطأ. السطر 5 يسأل المستخدم أن يحزر رقمًا. لاحظ هنا استخدمنا التابع printf وليس print فهو مثل التابع الموجود في C، ويأخذ أول معامل ويكون قالب نصي يستخدم لتنسيق الخرج. الآن بعد أن تم سؤال المستخدم البرنامج ينتظر الإدخال، بعد أن يدخل المستخدم تخمينه، يمرر Awk ذلك الادخال الى الاسطر 7 - 17، كما ذكرنا سابقًا. السطر 1 يحول الدخل الى نوع عدد صحيح؛ 0$ تعني سجل الدخل كاملًا، بينما 1$ تعني أول حقل من سجل الدخل 2$ تعني الحقل الثاني، وهكذا. يقوم Awk بتقسيم الدخل إلى حقول تلقائيا مستخدمًا الفاصل المحدد مسبقًا، والذي تكون قيمته الافتراضية المساحة الفارغة. الأسطر 9 - 15 تقارن جواب المستخدم مع العدد العشوائي المخزن سابقًا، ويطبع الجواب المناسب. إذا كان الجواب صحيحًا، السطر 15 سيخرج من البرنامج وينهي سلسلة معالجة الدخل، بهذه البساطة. بالأخذ بالحسبان بنية Awk الغريبة التي يتميز بها، فهو يتكون من مقاطع برمجية تتجاوب مع أسطر دخل بإعدادات معينة وتقوم بفعل الأشياء بها، لننظر الآن إلى بنية مختلفة لنرى كيف يعمل قسم التصفية: 1 BEGIN { 2 srand(42) 3 randomNumber = int(rand() * 100) + 1 4 print "random number is",randomNumber 5 printf "guess a number between 1 and 100\n" 6 } 7 int($0) < randomNumber { 8 printf "too low, try again: " 9 } 10 int($0) > randomNumber { 11 printf "too high, try again: " 12 } 13 int($0) == randomNumber { 14 printf "that's right\n" 15 exit 16 } الأسطر 1 - 6 لم تتغير عن البرنامج السابق لكن نلاحظ أن الشيفرة في الأسطر 7 - 9 ستنفذ في حال كان جواب المستخدم أقل من الرقم العشوائي الذي يحاول تخمينه، والأسطر 10 - 12 كذلك ستنفذ في حال كان جواب المستخدم أكبر من الرقم العشوائي الذي يحاول المستخدم تخمينه، والشيفرة في الأسطر 13 - 16 ستنفذ في حال كان جواب المستخدم مساويًا لذلك الرقم. قد يبدو ذلك غريبًا، لماذا نقوم بتكرار حساب int($0)‎ عند كل تحقق؟ فهي طريقة غريبة لحل المشكلة. لكن هذه الأنماط هي طريقة رائعة لفصل معالجة التحقق من الإجابة حيث يمكن توظيف استخدام التعابير النظامية أو أي بنية مدعومة من قبل Awk عند كل كتلة من كتل التحقق تلك بشكل منفصل. يمكننا أيضا استخراج الحسابات المتكررة وفصلها بمكان واحد، عن أماكن التحقق منها للحالات المختلفة، التالي نسخة ثالثة من البرنامج توضح ذلك: 1 BEGIN { 2 srand(42) 3 randomNumber = int(rand() * 100) + 1 4 print "random number is",randomNumber 5 printf "guess a number between 1 and 100\n" 6 } 7 { 8 guess = int($0) 9 } 10 guess < randomNumber { 11 printf "too low, try again: " 12 } 13 guess > randomNumber { 14 printf "too high, try again: " 15 } 16 guess == randomNumber { 17 printf "that's right\n" 18 exit 19 } لاحظ أنه مهما كانت القيمة المدخلة من قبل المستخدم، يجب تحويلها إلى عدد صحيح، تم إضافة الأسطر 7 - 9 لفعل ذلك. الآن الثلاث مجموعات من الأسطر 10 - 12، 13 - 15 و 16 - 19، تشير إلى متغير معرّف مسبقًا باسم guess بدلًا من تحويل الدخل عندها في كل مرة. لنقم بمراجعة لما كنا قد نوينا تعلمه سابقًا: المتغيرات: Awk يحتوي عليها؛ يمكننا الملاحظة أن بيانات الدخل تأتي إلى البرنامج على شكل نص ولكن يمكننا تحويلها إلى قيمة عددية عند الحاجة. الدخل: يقوم Awk بإرسال الدخل عبر طريقته "سلسلة معالجة البيانات" لقراءة الدخل. الخرج: قمنا باستخدام توابع Awk الإجرائية التالية print و printf لكتابة الأشياء إلى الخرج. التقييم الشرطي: تعلمنا عن كتلة if-then-else في Awk وتصفية الدخل التي تتجاوب مع إعدادات مختلفة لأسطر الدخل. الحلقات: لم نحتج إلى الحلقات في مثالنا هذا، لكن بفضل طريقة Awk في معالجة البيانات عبر "سلسلة معالجة البيانات" فإن الحلقات موجودة من طبيعة تصميم اللغة نفسها. لكن يمكن للمستخدم الخروج من تلك السلسلة في أي وقت عبر إرسال إشارة "نهاية الملف" إلى Awk (بالضغط على Ctrl+D عند استعمال طرفية لينكس). من المهم ملاحظة عدم حاجتنا للحلقات لمعالجة الدخل. أحد أهم الأسباب التي جعلت Awk يبقى طويلًا هي أن برامجه تكون عادةً قصيرة، وأحد أسباب كونها قصيرة هي أنه لا يوجد شيفرة متداولة مكررة كثيرا وضرورية للقراءة من الطرفية أو من ملف مثلًا. لننفذ البرنامج: $ awk -f guess.awk random number is 25 guess a number between 1 and 100: 50 too high, try again: 30 too high, try again: 10 too low, try again: 25 that's right $ من الأشياء التي لم نذكرها هي التعليقات. التعليق في Awk يبدأ بمحرف المربع (#) وينتهي عند نهاية سطر التعليق. الختام Awk لغة قوية ومثالنا السابق "لعبة احزر الرقم" هو بداية جيدة لبدء تعلم البرمجة بتلك اللغة. وهي البداية وليست نهاية طريق تعلمك لها، يمكنك أيضا القراءة عن تاريخ لغة Awk و Gawk (إصدار awk لجنو)، وهي إصدار موسع من Awk وعلى الأغلب هو الإصدار المتواجد على حاسبك إذا كنت تعمل على نظام لينكس، أو يمكنك. ترجمة -وبتصرف- للمقال Learn awk by coding a "guess the number" game لصاحبه Chris Hermansen. اقرأ أيضًا أفضل 5 لغات برمجة لـ DevOps تعرف على أشهر لغات برمجة الألعاب كيف تتعلم البرمجة ما هي البرمجة ومتطلبات تعلمها؟
    1 نقطة
  3. أرى في كثير من الأحيان بعض المبرمجين يستعملون الدالة printf لطباعة القيم والنصوص، بينما أستخدم أنا cout للقيام بهذه المهمة. لذلك أتسأل ما الفرق بين الطريقتين؟ ومتى أستعمل كل طريقة منهم؟
    1 نقطة
  4. عندي إستفسار بسيط هل من الافضل بعد استخدام إطار Express.js وتعرف علية وتطبيق علية مشاريع، إن استمر في تعلم فيه إو يجب تركة واهتمام بالتقنيات ذات إداء افضل لبناء تطبيقات وهو Next.js
    1 نقطة
  5. الكود التالي يستخدم في تعدد الصفحات لكنه يظهر نتائج الموضوعات من الاقدم للأحدث كيف يمكن تعديلة ليعرض النتائج من الأحدث للأقدم <?php if (isset($_GET['page_memper_news'])) { $page_memper_news = $_GET['page_memper_news']; } else { $page_memper_news = 1; } $no_of_records_per_page = 21; $offset = ($page_memper_news-1) * $no_of_records_per_page; $total_pages_sql = "SELECT COUNT(*) FROM news"; $result = mysqli_query($db,$total_pages_sql); $total_rows = mysqli_fetch_array($result)[0]; $total_pages = ceil($total_rows / $no_of_records_per_page); $admin_type = "memper" ; $sql = "SELECT n.*, a.* FROM `news` as n inner join accounts as a WHERE a.id = n.writer_id AND a.admin_type ='".$admin_type."' LIMIT $offset, $no_of_records_per_page"; $res_data = mysqli_query($db,$sql); while($row = mysqli_fetch_array($res_data)) { echo ''.$row['news_date'].''; } mysqli_close($db); ?> <ul class="pagination"> <li><a href="?page_memper_news=1">بداية</a></li> <li class="<?php if($page_memper_news <= 1){ echo 'disabled'; } ?>"> <a href="<?php if($page_memper_news <= 1){ echo '#'; } else { echo "?page_memper_news=".($page_memper_news - 1); } ?>">سابق</a> </li> <li class="<?php if($page_memper_news >= $total_pages){ echo 'disabled'; } ?>"> <a href="<?php if($page_memper_news >= $total_pages){ echo '#'; } else { echo "?page_memper_news=".($page_memper_news + 1); } ?>">تالي</a> </li> <li><a href="?page_memper_news=<?php echo $total_pages; ?>">نهاية</a></li> </ul> <?php
    1 نقطة
  6. عند البحث في الصفحات عن عنصر ما فقد لا يكون موجود وبالتالي سيتم رفع الاستثناء NoSuchElementException. ما أريده هو التقاط هذا الاستثناء لكي لا يتسبب بإيقاف البرنامج. وقد حاولت استخدام الكود التالي: el = driver.find_element_by_css_selector('.val') try: text = el.find_element_by_css_selector('#A').text + el.find_elements_by_css_selector('#B')[1].text except NoSuchElementException: text = el.find_element_by_css_selector('#C').text item.set_description(text) لكنه لم يتعرف على الاستثناء! و يعطيني خطأ: NameError: name 'NoSuchElementException' is not defined
    1 نقطة
  7. كيف يمكنني الحصول على أب العنصر input ثم أخيراً تحديد الخيار selected؟ <tr> <td> <select> <option value=0, selected='selected'> A </option> <option value=1, > B</option> <option value=2,> C</option> <option value=2,> D</option> </select> </td> <td> 'abcd' <input name='i1'> </input> <td> <tr>
    1 نقطة
  8. كيف يمكننا الحصول على attribute لعنصر ما، على سبيل المثال أريد الواصفة src هنا:
    1 نقطة
  9. كيف اقوم بتشغيل المشروع ناحية العميل حيث قمت بتشغيل مشروع موقع لشركة أنشئته بــ webpack فإكتشفت انه لم يقوم بجمع الملفات كلها ولم يظهر تنسيقات او اى شئ ملف build وهو المفترض الملف الذى يحتوى على المشروع فى شكله النهائى فلماذا لم يظهر التنسيقات بشكل صحيح
    1 نقطة
  10. السلام عليكم .. كيف يمكن طباعة تقارير باستخدام laravel وهل سيتم التطرق لها في احد المسارات؟ وشكرا
    1 نقطة
  11. تماثل الكتابة هاته: (n === +n && n !== (n|0)) ? نفس الكتابة: if(n === +n && n !== (n|0)){ } أما عن المعاملين + و | ف: المعامل | في n|0 يستعمل بنفس غرض OR أو || ولكنه يستهدف الأعداد الصحيحة integers، فهاته الكتابة n|0 تعني قم بإعادة 0 في حالة لم يكن العدد n صحيحا integer. المعامل + في n+ فهو ليس إلا إشارة موجبة للتحقق من أن نوع n يماثل نوع n موجبا، فهاته الكتابة n+ تعني موجب n. لنقم بتجزئة الشرط حتى نقوم بفهمه جيدا: if(n === +n && n !== (n|0)) return 'double'; /*//////////////////// لشطر الأول*/ n === +n التحقق من ما ان كانت قيمة n تساوي القيمة الموجبة لـ n. فيما يعني ، أنه ان كان قيمة عددية فسيتم إعادة خطأ وإلا فإن الشرط محقق وصحيح. /*//////////////////// لشطر الثاني*/ n !== (n|0) التحقق من ما ان كان نوع n مساويا لناتج n|0 (يكون الناتج n في حالة كون n عددا صحيحا أو صفرا فيما غير ذلك). إستنتاجات: n مساو لقيمته الموجبة ===> n عدد. (مثال : 5 مساو لـ 5+ و 2.1 أيضا مساو 2.1+) n غير مساو لقيمته الموجبة ===> n ليس عددا. ("hsoub" ليس مساويا لـناتج "hsoub"+ والتي هي NaN). نوع n مساو لناتج n|0 (تذكر: n أو صفر) ===> n عدد صحيح integer. (مثال: 5 مساو لـ ناتج 0|5 والذي هو 5 لأن هذا الأخير صحيح). نوع n غير مساو لناتج n|0 (تذكر: n أو صفر) ===> n عدد عشري double. (مثال: 2.1 غير مساو لناتج 0|2.1 والذي هو 0 لأن هذا الأخير عشري).
    1 نقطة
  12. فهمت الكود شكرا لكن ممكنتوضح معنى هذا السطر (n === +n && n !== (n|0) ? ما معنى ان نضع + أمام المتغير n ؟ وما معنى (n|0) وشكرا
    1 نقطة
  13. طلب منى عميل موقع لشركة ويريد الموقع بالسيرفر والدومين فهل اقوم بإعلامه بكل شئ بالتفصيل يعنى سعر السيرفر والدومين وهامش الربح ام اخبره بإجمالى المبلغ وغذا طلب معرفة الاسعار للعروض وغيره فهل اكون صريح معه واعرفه هامش الربح لى ام لا وشكرا
    1 نقطة
  14. يختلف الأمر من عميل لآخر , بعض العملاء يكون بالفعل قد اشترى دومين واستضافة ويطلب منك كود المشروع فقط دون رفعه على الاستضافة , بعضهم يطلب منك رفعه أيضا , هناك بعض العملاء يطلبون منك شراء الدومين والاستضافة ورفع المشروع عليها, يجب أن تكون واضح تماما معهم , تخبرهم بكل شيء مثل سعر الدومين والاستضافة , سعرهم يكون خارج اطار اجرك, يجب أن يكون الاتفاق واضحا بينكما بحيث لا يحدث أي مشكلة , هناك عملاء لا يعلمون ماذا يعني دومين واستضافة وأنت يجب أن توضح لهم كل شيء وتخبرهم بجميع هذه التفاصيل , أي خدمات تحتاج لشرائها خلال بناء المشروع يجب أن يكون العميل هو مسؤول عن سعرها , في النهاية , يجب أن تكون واضحا مع العميل بشكل كامل , وتخبره بجميع التفاصيل لكي لا يؤثر عليك الموضوع بشكل سلبي
    1 نقطة
  15. حاول تغيير إعدادات مدير الشبكة باتباع الخطوات التالية قد ينجح الأمر: نفذ الأمر التالي لتحرير الإعدادات: sudo gedit /etc/NetworkManager/NetworkManager.conf قم بنسخ الأسطر التالية لنهاية الملف وقم بحفظه: [device] wifi.scan-rand-mac-address=no أعد تشغيل خدمة مدير الشبكة بتنفيذ الأمر التالي: sudo systemctl restart NetworkManager
    1 نقطة
  16. كيف أجعل الموجة route يقوم بالتوجية الي datatarget مثلا لدي صفحة عرض تحتوي علي 2 card كل واحده منهم توجة الي موديل معين باستخدام datatarget لنفس المتحكم لكن صفحات العرض مختلفة https://getbootstrap.com/docs/4.0/components/modal/ قصدي هنا ان الموجة بدلا من توجية الي صفحة العرض يتم توجيه الي model بنفس المحتوي <div class="col-lg-6 mb-4 "> <div class="card bg-info text-white shadow"> <a href="{{ route('create_sms')}}" data-target=".bd-example-modal-lg" > <div class="card-body text-center"> أرسال الرسائل <div class="text-white-50 small"> <i class="far fa-comment-alt fa-5x"></i> </div> </div> </a> </div> </div> <div class="col-lg-6 mb-4"> <div class="card bg-success text-white shadow"> <a href="#"> <div class="card-body text-center"> رسائل التنبية <div class="text-white-50 small"> <a href="#"><i class="far fa-comments fa-5x "></i></a> </div> </div> </a> </div> </div>
    1 نقطة
  17. يوجد في بوتستراب المكون modal ,وهذا الكود الخاص به <!-- Button trigger modal --> <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal"> Launch demo modal </button> <!-- Modal --> <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="exampleModalLabel">Modal title</h5> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">&times;</span> </button> </div> <div class="modal-body"> ... </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button> <button type="button" class="btn btn-primary">Save changes</button> </div> </div> </div> </div> تستطيع استبدال العنصر button بالعنصر a واستخدام الخاصية href وتكون قيمتها # , بهذا الشكل <a href="#" type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal"> ^^^^^^^^ Launch demo modal </a> <!-- Modal --> <div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="exampleModalLabel">Modal title</h5> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div class="modal-body"> ... </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button> <button type="button" class="btn btn-primary">Save changes</button> </div> </div> </div> </div> تستطيع أن تستخدم اثنين من المكون modal وتتحكم في محتوى كل منهم كالتالي <a href="#" type="button" class="btn btn-primary" data-toggle="modal" data-target="#modal1"> ^^^^^^^^ modal 1 </a> <a href="#" type="button" class="btn btn-primary" data-toggle="modal" data-target="#modal2"> ^^^^^^^^ modal 2 </a> لدينا زرين , كل زر مرتبط ب modal معين باستخدام الخاصية data-target , الآن نقوم بإنشاء مكونين modal كل مكون لديه id بنفس اسم data-target الخاص بالزرين , الكود بشكل مختصر كالتالي <div class="modal fade" id="modal1" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria- ^^^^^^^^^^^ hidden="true"> <div class="modal fade" id="modal2" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria- ^^^^^^^^^^^ hidden="true"> لاحظ مكونين modal , الأول لديه معرف modal1 والثاني modal2 , عند الضغط على الزر الذي اسمه modal 1 سوف يظهر المكون modal المرتبط به , يمكنك عرض البيانات التي تريدها بداخل المكون modal وذلك بكتابة الكود بداخل جسم المكون modal كما هو واضح في الكود التالي <div class="modal fade" id="modal2" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="exampleModalLabel">Modal 2</h5> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">&times;</span> </button> </div> <div class="modal-body"> يمكنك كتابة الأكواد التي تريدها هنا وتستخدم أي بيانات قمت بجلبها من المتحكم أو عمل فورم </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button> <button type="button" class="btn btn-primary">Save changes</button> </div> </div> </div> </div>
    1 نقطة
  18. يمكنك تحقيق ذلك عن طريق الأتي يوجد بلغة sql كلمة order by التي تقوم بتحديد ترتيب البيانات في الشفرة خاصتك يتم ترتيب السجلات تصاعديًا بناءًا على قيمة الid يمكننا عكس ذلك عبر إضافة تلك الشفرة في نهاية الsql حتى يتم ترتيب العناصر بالشكل المعاكس order by id desc لتصبح في النهاية شفرة الsql كالتالي SELECT n.*, a.* FROM `news` as n inner join accounts as a WHERE a.id = n.writer_id AND a.admin_type ='".$admin_type."' order by id desc LIMIT $offset, $no_of_records_per_page
    1 نقطة
  19. السلام عليكم ورحمة الله وبركاته.. قمت بإنشاء حساب على GitHub ولكن لا يوجد local repo للـbranch كي أستطيع أن أعمل push للـlocal repo إلى الـremote repo.. يوجد فقط branch من غير local repo.. (صورة مرفقة توضح السؤال)
    1 نقطة
  20. عليك أن تستعمل المعامل scope resolution operator ( :: ) والذي يقوم بتحديد مجال الدالة التي تريد إستدعائها، فعندما تستعدي الدالة execute تقوم بتنفيذ الأمر كالتالي: int main() { // namespcae::function() user::execute(); return 0; } أي أن الجزء الموجود على اليمين هو اسم الدالة والجزء الموجود على يسار المعامل هو اسم المجال namespace، وفي حالة لم يتم تحديد اسم namespace سوف يتم البحث عن الدالة في المجال العام global scope، كالتالي: void print() { std::cout << "hello, world!"; } int main() { ::print(); return 0; } بالطبع إستخدام المعامل scope resolution في الكود السابق غير ضروري ولكن في الكود الخاص بك، عليك أن تستخدمه لتشير إلى الدالة الموجودة في النطاق العام global scope: std::string user_details() { return "global"; } namespace user { std::string user_details() { return "local"; } void execute() { std::cout << ::user_details(); // global } } عند تنفيذ الدالة execute في الكود السابق سوف يتم تنفيذ الدالة الموجودة في المجال العام وسيتم طباعة كلمة global
    1 نقطة
  21. الإصدار 1.0.0

    10334 تنزيل

    تُعد أنظمة التشغيل موضوعًا متقدمًا في العديد من برامج علوم الحاسوب، حيث يتعرف المتعلم على كيفية البرمجة بلغة C بحلول الوقت الذي يتعرف فيه على أنظمة التشغيل، وربما يأخذ المتعلم فصلًا دراسيًا في معمارية الحاسوب Computer Architecture قبل ذلك، فيصبح الهدف من تقديم هذا الموضوع عادةً هو عرض تصميم وتنفيذ أنظمة التشغيل للطلاب مع افتراض ضمني أن بعضهم سيجري بحثًا في هذا المجال، أو يكتب جزءًا من نظام تشغيل. هذا الكتاب مترجم عن الكتاب Think OS لكاتبه آلن داوني Allen B. Downey والذي يعد مسودة أولية لم تكتمل بصورة نهائية بعد إذ طُوّر لفصلٍ دراسي في كلية أولين Olin College يدعى أنظمة البرمجيات Software Systems. لا يفترض هذا الكتاب أنك قد درست معمارية الحاسوب، فيجب أن يمنحك فهمًا أفضل أثناء قراءته عن الحاسوب ومعماريته وكيف يعمل المعالج والذاكرة فيه وكيف تُدار العمليات وتُخزَّن الملفات وما يحدث عند تشغيل البرامج، وما يمكنك القيام به لجعل البرامج تعمل بصورة أفضل وأسرع بوصفك مبرمجًا. يشرح الفصل الأول بعض الاختلافات بين اللغات المُصرَّفة compiled واللغات المُفسَّرة interpreted، مع بعض الأفكار حول كيفية عمل المصرِّفات compilers، ويشرح الفصل الثاني كيف يستخدم نظام التشغيل العمليات لحماية البرامج قيد التشغيل من التداخل مع بعضها البعض. ويشرح الفصل الثالث الذاكرة الوهمية virtual memory وترجمة العناوين، ويتحدث الفصل الرابع عن أنظمة الملفات ومجرى البيانات، ويصف الفصل الخامس كيفية تشفير الأرقام والأحرف والقيم الأخرى، ويشرح أيضًا العامِلات الثنائية bitwise operators. أما الفصل السادس، فيشرح كيفية استخدام إدارة الذاكرة الديناميكية وكيفية عملها، ويدور الفصل السابع حول التخبئة caching وهرمية الذاكرة. ويشرح الفصل الثامن تعدد المهام multitasking والجدولة scheduling. ويدور الفصل التاسع حول خيوط POSIX وكائنات المزامنة mutexes، ويشرح الفصل العاشر المتغيرات الشرطية POSIX ومشكلة المنتج / المستهلك، ويدور الفصل الحادي عشر حول استخدام متغيرات تقييد الوصول POSIX وتطبيقها في لغة C. هذا الكتاب مرخص بموجب رخصة المشاع الإبداعي Creative Commons «نسب المُصنَّف - غير تجاري - الترخيص بالمثل 4.0». يمكنك قراءة فصول الكتاب على شكل مقالات من هذه الصفحة، «مدخل إلى أنظمة التشغيل»، أو تجدها مسردة بالترتيب التالي: الفصل الأول: مفهوم التصريف Compilation في لغات البرمجة الفصل الثاني: العمليات Processes في أنظمة التشغيل الفصل الثالث: الذاكرة الوهمية Virtual memory في نظام التشغيل الفصل الرابع: فهم الملفات Files وأنظمة الملفات file systems الفصل الخامس: تمثيل الأعداد والنصوص بالبتات وإجراء العمليات على مستوى البت الفصل السادس: إدارة الذاكرة Memory management في لغة C الفصل السابع: فهم عملية التخبئة Caching في معمارية الحاسوب الفصل الثامن: تعدد المهام Multitasking في الحواسيب الفصل التاسع: مفهوم الخيوط Threads في عملية المعالجة الفصل العاشر: المتغيرات الشرطية وحلها مشاكل التزامن بين العمليات في لغة C الفصل الحادي عشر: متغيرات تقييد الوصول Semaphores في لغة البرمجة سي C
    1 نقطة
  22. هل يمكنك تنفيذ الأمر التالي للتأكد إن كان قد تم تثبيت المكتبة: pip freeze من المفترض أن تعطي نتيجة كالتالي: إن لم تكن المكتبة مثبتة فيمكنك محاولة تثبيتها من خلال الأمر التالي: python -m pip install pytube
    1 نقطة
  23. يمكنك أن تستعمل مكتبة react-icons لإضافة كل أيقونات font awesome بالإضافة إلى مجموعة كبيرة جدًا من الأيقونات الأخرى، يمكنك تثبيت محتبة react-icons من خلال الأمر: npm install react-icons --save ثم قم بإستخدامها كالتالي (مثال من موقع المكتبة الرسمي): import { FaBeer } from 'react-icons/fa'; class Question extends React.Component { render() { return <h3> Lets go for a <FaBeer />? </h3> } }
    1 نقطة
  24. سأحاول أن أشرح لك خطوات عمل هذه الدالة في بايثون. أولًا في نظام Semester GPA يتم الرمز إلى الدرجات 4 و 3 و 2 و 1 و 0 بالأحرف A و B و C و D و F على الترتيب، لذلك سنقوم بعمل دالة تقوم بتحويل هذه الأحرف إلى أرقام كالتالي: def convert(letter): # index: 0 1 2 3 4 grads = ['f', 'd', 'c', 'b', 'a'] return grads.index(letter.lower()) كما تلاحظ أن كل حرف موجود في القائمة grads له index يساوي القيمة التي نريد إرجاعها، واستخدمت التابع index لمعرفة قيمة index الخاصة بالحرف، كما قمت بتحويل الحرف نفسه إلى lower case لكي تعمل الدالة من الأحرف الصغير والكبيرة a - A لأن نقوم بعمل دالة أخرى لحساب قيمة الـ GPA بمساعدة الدالة convert التي قمنا بعملها في الخطوة السابقة: def calc_GPA(x, y, z): x, y, z = convert(x), convert(y), convert(z) return (x + y + z) / 3 هذه الدالة تأخذ 3 قيم x, y, z ونقوم بتحويل هذه القيم إلى أرقام بمساعدة دالة convert التي قمنا بعملها سابقًا، ثم نقوم بجمع هذه القيم الثلاثة معًا وقسمتها على 3، وهنا طريقة إستخدام هذه الدالة: >>> calc_GPA('a', 'a', 'd') 3.0 >>> calc_GPA('a', 'a', 'a') 4.0 >>> calc_GPA('a', 'F', 'F') 1.3333333333333333 >>> بالتوفيق.
    1 نقطة
  25. لفهم الفرق بين أنواع الـwidgets علينا أولاً فهم ماهيتها ومكوناتها. كل عنصر يظهر للمستخدم هو عبارة عن widget مثل نص، صورة، حقل إدخال...الخ. حيث يصف الـwidget سلوك وشكل العنصر في الشاشة، على سبيل المثال عند إضافة نص ومحاذاته في المنتصف نستخدم الـtext widget و الـcenter widget كالتالي: Center(// widget1 child: Text('hello',style:TextStyle(color:Colors.black)), // widget2 ) لاحظ أن الـ widget هو object يصف ويحدد شكل العنصر في الشاشة. بعد فهم ماهية الـwidget سنفرق بين الـstateless widget والـstateful widget. stateful widget: هو عبارة عن عنصر يحتوي على حالة أي يمكن حفظ بيانات فيه ويمكنه تغييرها وإعادة بناء/رسم نفسه أثناء التشغيل عن طريق الدالة setState. مثال عليه: class FavoriteWidget extends StatefulWidget { //القسم الأول الخاص بالعنصر @override _FavoriteWidgetState createState() => _FavoriteWidgetState(); } class _FavoriteWidgetState extends State<FavoriteWidget> { // القسم الثاني الخاص بحالة العنصر String msg = “hello”; // يمكن تعريف متغيرات وتغيير قيمتها أثناء تشغيل التطبيق @override Widget build(BuildContext context) { // الدالة الخاصة ببناء شكل العنصر return Text(‘$msg’); // نرجع نصاً يحمل قيمة المتغير المعرف مسبقاً } } stateless widget: هو عنصر ليس لديه حالة ولا يمكن تغيير بياناته أثناء تشغيل التطبيق إلا عن طريق إعادة تعريفه مرة أُخرى ببيانات مختلفة. مثال عليه: class MyWidget extends StatelessWidget { // يتكون من قسم واحد فقط خاص بالعنصر وليس له حالة final String msg = “hello”; // لاحظ تعريف المتغير يجب أن يكون نهائي ولا يمكن تغييره أثناء التشغيل @override Widget build(BuildContext context) { // دالة بناء شكل العنصر return Text(‘$msg’); } } إذاً نستخدم stateful مع العناصر التي تعتمد على بيانات متغيرة وتحتاج لإعادة رسم نفسها على الشاشة أثناء التشغيل. ونستخدم stateless في العناصر الثابتة التي لا نحتاج لتغييرها أو التعديل عليها أثناء التشغيل.
    1 نقطة
  26. هل يوجد دورات مجانى
    1 نقطة
  27. يُعتبر إطار العمل دوت نت NET Framework. من شركة مايكروسوفت من أُطر العمل المشهورة جدًّا، فمنذ الإصدار التجريبي الأوّل أواخر عام 2000 وحتى الإصدار 4.6 حاليًّا شهد تحسينات كبيرة جعلت من لغات البرمجة التي تعمل بالاعتماد عليه لغات برمجة غنيّة ومعاصرة. يُعتبر إطار العمل دوت نت الكيان الأساسيّ التي تعتمد عليه التطبيقات في تنفيذ المهام المطلوبة منها. فهو يوفّر الوسائل اللازمة لوصول مثل هذه التطبيقات إلى الملفات والتعامل مع HTTP والوصول والتعامل مع قواعد البيانات وغيرها من المهام الأساسيّة التي قد يحتاجها أيّ تطبيق حاسوبيّ. صُمّم إطار العمل دوت نت منذ البداية لكي يعمل على أيّ نظام تشغيل أو أيّ عتاد صلب متاح، وعلى الرغم من أنّ مايكروسوفت لم تدعم تشغيل إطار العمل هذا سوى على أنظمة تشغيل ويندوز، إلّا أنّه جرت محاولات مستقلة لنقله إلى لينكس عن طريق مشروع mono مفتوح المصدر. وقد نجحت هذه المحاولة بصورة لا بأس بها واستمر المشروع لعدّة سنوات، ثمّ توّج بنقله إلى أنظمة تشغيل الأجهزة الذكيّة وهذا ما قامت به شركة Xamarin التي استحوذت عليها شركة مايكروسوفت قبل أقل من شهر من الآن، حيث تمكّنت Xamarin من ذلك بالاعتماد على مشروع mono مفتوح المصدر. تُعتبر لغة سي شارب #C لغة البرمجة الأساسيّة ضمن إطار العمل دوت نت، وقد واكبْتُ تطوّرها منذ الإصدار الأوّل وحتى اليوم. ومما لا شكّ فيه أنّها قد شهدت تحسينات كبيرة ومزايا مفيدة تجمع بين القوّة والمرونة لتطوير طيف واسع من التطبيقات البرمجيّة تشمل تطبيقات سطح المكتب Desktop Applications وتطبيقات ويب باستخدام ASP.NET وتطبيقات خدمات ويب مثل WCF (اختصار لـ Windows Communication Foundation) وحتى تطبيقات الأجهزة الذكيّة التي تعمل على نظام تشغيل Windows Phone أو التي تعمل على باقي الأنظمة مثل Android و iOS من خلال منصّة Xamarin. لن ندخل في التفاصيل الدقيقة لمعمارية إطار العمل دوت نت، وذلك لجعل هذه السلسلة مبسّطة قدر المستطاع. يكفيك أن تعلم أنّ إطار العمل هذا يتكوّن من قسمين رئيسيّين: بيئة التنفيذ المشتركة Common Language Runtime وتُدعى اختصارًا CLR. مكتبة أصناف إطار العمل Framework Class Library وتُدعى اختصارًا FCL. حول هذه السلسلة سنتعلّم في هذه السلسلة كتابة تطبيقات باستخدام لغة سي شارب #C بأسلوب مبسّط وسلس وذلك من خلال تطبيقات موجّه الأوامر Console Applications، وسبب تفضيلي لهذه التطبيقات عن سواها، هو أنّه تسمح لك بالتركيز على تعلّم اللغة نفسها دون تشتيت الانتباه إلى العديد من الجوانب التي تتطلّبها أنواع التطبيقات الأخرى كتطبيقات سطح المكتب لويندوز على سبيل المثال، رغم أنّنا سنتحدّث القليل عنها في الدرس الأخير. ما الذي أحتاجه لكي أستفيد من هذه السلسلة؟ تفترض هذه السلسلة أنّك تمتلك معرفة عامّة بأساسيّات البرمجة. ستحتاج أيضًا إلى حاسوب ذو نظام تشغيل ويندوز 7.1 أو أعلى. بالإضافة إلى تحميل وتنصيب بيئة التطوير Visual Studio 2015 Community المجّانيّة. كما يمكنك تجريب معظم البرامج الموجودة في هذه السلسلة حتى ولو لم يكن لديك نظام تشغيل ويندوز أصلًا عن طريق موقع NET Fiddle. ولكن لن تستفيد بهذه الطريقة من المزايا الهامّة التي يوفّرها لك Visual Studio. الأقسام الأساسية لإطار العمل دوت نت سنتحدّث قليلًا عن القسمين الأساسيّين لإطار العمل دوت نت بالإضافة إلى مترجم سي شارب C# Compiler، لكي تتكوّن لدينا الصورة الواضحة لآليّة عمل تطبيقات دوت نت. بيئة التنفيذ المشتركة CLR هي البيئة التي تنفّذ البرامج المكتوبة بلغات دوت نت، وتشكّل حاضنةً لهذه البرامج من خلال عزلها عن العتاد الصلب hardware للجهاز التي تعمل عليه. تستطيع تشبيهها بالآلة الافتراضيّة Virtual Machine الخاصّة بلغة Java. وهي مسؤولة عن إدارة المصادر التي يحتاجها البرنامج في عمله، وفي مقدّمتها الذاكرة. حيث تعمل هذه البيئة على إدارة عمليّات إنشاء الكائنات التي يحتاجها البرنامج، ومن ثمّ التخلّص منها عند انتفاء الحاجة إليها. تتوفّر CLR بشكل افتراضيّ على معظم أنظمة تشغيل ويندوز (مع الاختلاف بالإصدارات) مثل Windows XP و Windows 7 و Windows 8 و Windows 10 و Windows Phone و Windows Server (بمعظم إصداراته). مكتبة أصناف إطار العمل FCL تحتوي هذه المكتبة الضخمة على آلاف الأصناف classes التي تسمح لنا بإنجاز أيّ مهمّة تخطر ببالنا. فمن التعامل مع النصوص والتعابير النظاميّة regular expressions إلى التعامل مع الاتصالات الشبكيّة network communications والتعامل مع بروتوكولات الانترنت الشهيرة مثل HTTP وFTP وغيرها، والوصول إلى قواعد البيانات والتعامل معها. تتكوّن FCL بدورها من عدّة مكتبات فرعيّة، فهناك مكتبة تساعدنا على تطوير وبرمجة تطبيقات سطح المكتب لويندوز، وأخرى تسمح لنا بتطوير تطبيقات ويب باستخدام تقنيّة ASP.NET، ومكتبة تسمح بإنشاء تطبيقات WCF وهكذا. بمعنى أنّه لن تحتاج إلى التعامل مع كامل مكتبة FCL بل ستنتقي منها ما تحتاجه بحسب متطلّبات عملك، فإذا كنت مطوّر ويب مثلًا فستهتم بالمكتبة الفرعيّة التي تسمح بإنشاء تطبيقات ويب باستخدام ASP.NET. ومن الجدير ذكره أنّ مكتبة FCL تحتوي أيضًا على مكتبة فرعيّة اسمها مكتبة الأصناف الأساسيّة Base Class Library أو اختصارًا BCL، تحتوي هذه المكتبة على الأصناف الأساسيّة التي تعمل مع جميع التطبيقات المنشأة باستخدام المكتبات الأخرى بصرف النظر عن نوعها. مترجم سي شارب C# Compiler لكي نتمكّن من تنفيذ البرامج التي نكتبها باستخدام سي شارب، نحتاج إلى مترجم سي شارب C# Compiler. يكون هذا المترجم مضمّنًا بشكل افتراضيّ مع إطار العمل دون نت. يعمل المترجم على تحويل التعليمات البرمجيّة الموجودة في الشيفرة والمكتوبة بلغة سي شارب إلى تعليمات برمجيّة مكتوبة بلغة تُعرف بلغة مايكروسوفت الوسيطيّة Microsoft Intermediate Language أو اختصارًا MSIL. تُعتبر هذه اللغة الوسيطيّة منخفضة المستوى، وهي شبيهة بلغة Assembly الشهيرة. في الواقع ستعمل بيئة التنفيذ المشتركة CLR على تنفيذ التعليمات المكتوبة بلغة MSIL. فبيئة CLR لا تحتاج أن تعرف لغة البرمجة التي كُتب بها البرنامج أصلًا وهي الميزة الأساسيّة التي تسمح للمبرمج الكتابة بأي لغة برمجة تدعم الدوت نت. فطالما أنّ لغة البرمجة تمتلك مترجمًا متوافقًا مع MSIL فلا مشكلة. وهذا ما جرى مع لغات برمجة أخرى مثل Visual Basic.NET ولغة #F وحتى لغة البايثون Python من خلال IronPython. انظر الشكل التوضيحي التالي: كيف ينفذ البرنامج باستخدام CLR؟ توضع الشيفرة البرمجيّة المكتوبة بلغة سي شارب عادةً في ملفات منفصلة لكلٍّ منها الامتداد cs، يعمل المترجم بعد ذلك على قراءة هذه الملفات التي تسمّى بملفّات النص المصدريّ source code files وتحويل التعليمات البرمجيّة المكتوبة بسي شارب إلى لغة MSIL وجعلها ضمن ملف تنفيذي (الملف MyApp.exe في الشكل السابق). عند تنفيذ البرنامج تقرأ CLR التعليمات البرمجيّة الموجودة ضمن الملف التنفيذي والتي تكون بلغة MSIL وتعمل على تنفيذها عن طريق تحويلها إلى تعليمات برمجيّة أصليّة native code مخصّصة لمعالج الحاسوب الذي يعمل عليه البرنامج حاليًّا. يجري كلّ هذا العمل بسرعة كبيرة جدًّا فعملية التحويل إلى native code لا تجري سوى أوّل مرّة فقط، وبعد ذلك يستفيد البرنامج من السرعة الكبيرة التي توفّرها هذه التعليمات الأصليّة عند التنفيذ. يُفسّر السيناريو السابق سبب قابليّة عمل برامج دوت نت على أيّ نظام تشغيل أو عتاد حاسوبي. فعمليّة كتابة الشيفرة البرمجيّة بأي لغة دوت نت ومن ثمّ تحويلها إلى لغة مايكروسوفت الوسيطيّة MSIL منفصلة تمامًا عن نظام التشغيل وعن العتاد الحاسوبي الذي سيعمل عليه البرنامج. ولعلّ من أبرز الأمثلة على ذلك البرامج المكتوبة بلغة سي شارب والموجّهة إلى أنظمة تشغيل الأجهزة الذكيّة عن طريق منصة Xamarin التي ذكرناها قبل قليل. فالعمل الأساسي الذي قامت به هذه الشركة هو انتاج بيئة CLR منفصلة لكلّ نظام تشغيل مثل Android و iOS مما يسمح للبرامج المكتوبة بلغة سي شارب الخروج من "قمقم" ويندوز إن صحّ التعبير. وأكثر من ذلك، فقد أنتجت مايكروسوفت مؤخّرًا نسخة خاصّة وخفيفة من نظام التشغيل Windows 10 أسمته Windows 10 IoT وهو مخصّص لإنترنت الأشياء. يمكن تنصيب نظام التشغيل هذا بكلّ سلاسة ويُسر على جهاز Raspberry Pi المشهور والموجّه لتطبيقات إنترنت الأشياء، وهذا يعني فتح المجال أمام التطبيقات المكتوبة باستخدام لغة سي شارب للعمل على هذا الجهاز وبالتالي الدخول في هذا المجال المهم والواعد. الخلاصة لغة سي شارب هي لغة عصريّة ولها مستقبل واعد في قطاع الأعمال. فهي اللغة الأساسيّة المستخدمة لكتابة مختلف أنواع التطبيقات الحاسوبيّة ضمن إطار العمل دوت نت. بالإضافة إلى أنّها سلسة وذات بنية مألوفة، ولكن تحتاج إلى قليل من الصبر في تعلّمها. سنتناول في الدروس اللّاحقة كيفيّة كتابة برامج بسيطة ولكن متدرّجة في الصعوبة حتى تكون ملمًّا بأساسيّات هذه اللغة الرائعة.
    1 نقطة
×
×
  • أضف...