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

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

  1. Khaled Osama3

    Khaled Osama3

    الأعضاء


    • نقاط

      8

    • المساهمات

      1580


  2. كمال صالح2

    كمال صالح2

    الأعضاء


    • نقاط

      7

    • المساهمات

      117


  3. زياد احمد محمود

    • نقاط

      3

    • المساهمات

      3


  4. Ammar Ghamdi

    Ammar Ghamdi

    الأعضاء


    • نقاط

      2

    • المساهمات

      6


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

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

  1. السلام عليكم اي الفرق بين == و العامل in في python وهل العامل in زي for loop
    2 نقاط
  2. المشكلة هي : Fatal error: Uncaught Error: Call to undefined function mysql_fetch_assoc() in C:\xampp\htdocs\home.php:54 Stack trace: #0 {main} thrown in C:\xampp\htdocs\home.php on line 54 كود الملف كامل : <!DOCTYPE html> <html lang="ar"> <head> <link rel="icon" href="https://c0.klipartz.com/pngpicture/573/614/gratis-png-ng%C5%A9-hanh-s%C6%A1n-distrito-casa-apartamento-inmobiliaria-volta-redonda-venta-de-logotipos-de-bienes-raices.png" /> <title>موقع العقارات</title> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Tajawal:wght@300&display=swap" rel="stylesheet"> <meta charset="utf-8" /> <link rel="stylesheet" type="text/css" media="screen" href="home.css"> </head> <body> <header> <div> <img src="a.png" alt="نظام العقارات من كمال تجريبي"> </div> <center> <div> <button>نقاط البيع&#127979;</button> <button>أدارة المخزون</button> <button>الإراضي&#128176;</button> <button>&#9917;الشيكات</button> <button>الأستاذ العام&#926;</button> <button>إدارة النظام</button> </div> </center> </header> <?php $server = 'DESKTOP-PJDLJNR'; $database = 'Legacy'; $username = ''; $password = ''; $connection = new PDO("sqlsrv:Server=$server;Database=$database", $username, $password); if (!$connection) { die(print_r(sqlsrv_errors(), true)); } $sql_query = 'select * from Problemss;'; $result = $connection->query($sql_query); ?> <table border="1" width="100%"> <tr> <th>&#127979;تم</th> <th>الحلول</th> <th>المشكلة</th> <th>م</th> <th>الرقم</th> </tr> <?php while ($row = mysql_fetch_assoc($result)) { ?> <tr> <td><?php echo $row['تم']?></td> <td><?php echo $row['الحلول']?></td> <td><?php echo $row['المشكلة']?></td> <td><?php echo $row['م']?></td> <td><?php echo $row['الرقم']?></td> </tr> <?php } $connection = null; // close the connection ?> </table> </body> </html>
    2 نقاط
  3. كيف اخلي الكلام العربي يظهر بصورته الأصلية وليس مُقَطْعًا بلغة ال C++
    2 نقاط
  4. ما هي افضل طريقه او الجوانب التي اراعيها في موقعي حتي يصبح افضل واسرع
    2 نقاط
  5. عند محاوله عمل نشر للتطبيق الخاص بي ب render ياتي لي هذا الخطئ بحثت عنه ولم اجد له حل ==> Cloning from https://github.com/bandarAhmed/photogram-server ==> Checking out commit d50e539aa39216e03981d849ff177835bb59d337 in branch main ==> Using Node version 18.14.2 via environment variable NODE_VERSION ==> Docs on specifying a Node version: https://render.com/docs/node-version ==> Running build command 'npm install'... up to date, audited 301 packages in 973ms 24 packages are looking for funding run `npm fund` for details found 0 vulnerabilities ==> Uploading build... ==> Build uploaded in 8s ==> Build successful 🎉 ==> Deploying... ==> Using Node version 18.14.2 via environment variable NODE_VERSION ==> Docs on specifying a Node version: https://render.com/docs/node-version ==> Running 'nodemon start' bash: /opt/render/project/src/node_modules/.bin/nodemon: Permission denied ==> Common ways to troubleshoot your deploy: https://docs.render.com/troubleshooting-deploys المشكله من هذا الامر يقول لا يوجد اذن, اذن ماذا Desktop 2024.02.04 - 22.25.13.01.mp4
    1 نقطة
  6. شكرآ استاذي العزيز لقد اشتغل الكود استاذي يوجد مشكلة في العمود المسماء :المشكلة وهي:Warning: Undefined array key "المشكلة" in C:\xampp\htdocs\home.php on line 57 خلاص شكرآ استاذي لقد تم اصلاح الخطاء
    1 نقطة
  7. 1 نقطة
  8. لقد ارفقت لك اسم السيرفار واسم قاعدة البيانات واسم الجدول واسم الحقول ارجاء تطبيق الكود ليتم الاتصال بقاعدة البيانات
    1 نقطة
  9. اذا كنت تقصد تعديل الكود فهذا هو الكود كامل : <!DOCTYPE html> <html lang="ar"> <head> <link rel="icon" href="https://c0.klipartz.com/pngpicture/573/614/gratis-png-ng%C5%A9-hanh-s%C6%A1n-distrito-casa-apartamento-inmobiliaria-volta-redonda-venta-de-logotipos-de-bienes-raices.png" /> <title>موقع العقارات</title> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Tajawal:wght@300&display=swap" rel="stylesheet"> <meta charset="utf-8" /> <link rel="stylesheet" type="text/css" media="screen" href="home.css"> </head> <body> <header> <div> <img src="a.png" alt="نظام العقارات من كمال تجريبي"> </div> <center> <div> <button>نقاط البيع&#127979;</button> <button>أدارة المخزون</button> <button>الإراضي&#128176;</button> <button>&#9917;الشيكات</button> <button>الأستاذ العام&#926;</button> <button>إدارة النظام</button> </div> </center> </header> <?php $server = 'DESKTOP-PJDLJNR'; $database = 'Legacy'; $username = ''; $password = ''; $connection = new PDO("sqlsrv:Server=$server;Database=$database", $username, $password); if (!$connection) { die(print_r(sqlsrv_errors(), true)); } $sql_query = 'select * from Problemss;'; $result = $connection->query($sql_query); ?> <table border="1" width="100%"> <tr> <th>&#127979;تم</th> <th>الحلول</th> <th>المشكلة</th> <th>م</th> <th>الرقم</th> </tr> <?php while ($row = $result->fetch(PDO::FETCH_ASSOC)) { ?> <tr> <td><?php echo $row['تم']?></td> <td><?php echo $row['الحلول']?></td> <td><?php echo $row['المشكلة']?></td> <td><?php echo $row['م']?></td> <td><?php echo $row['الرقم']?></td> </tr> <?php } ?> </table> </body> </html>
    1 نقطة
  10. جرب استخدام الدالة mysqli_fetch_assoc بدلا عن mysql_fetch_assoc لتصبح الشيفرة الخاصة بك كالتالي: <?php while ($row = mysqli_fetch_assoc($result)) { ?> <tr> <td><?php echo $row['تم']?></td> <td><?php echo $row['الحلول']?></td> <td><?php echo $row['المشكلة']?></td> <td><?php echo $row['م']?></td> <td><?php echo $row['الرقم']?></td> </tr>
    1 نقطة
  11. Fatal error: Uncaught PDOException: SQLSTATE[IMSSP]: This extension requires the Microsoft ODBC Driver for SQL Server to communicate with SQL Server. Access the following URL to download the ODBC Driver for SQL Server for x64: https://go.microsoft.com/fwlink/?LinkId=163712 in C:\xampp\htdocs\home.php:35 Stack trace: #0 C:\xampp\htdocs\home.php(35): PDO->__construct('sqlsrv:Server=D...', '', Object(SensitiveParameterValue)) #1 {main} thrown in C:\xampp\htdocs\home.php on line 35
    1 نقطة
  12. هذا الخطأ يرجع الى بسبب استخدام الدالة القديمة فى محالة جلب البيانات يجب عليك استخدام الدالة الجديدة وهذا مثال كامل يوضح لك الفرق. <?php // قم بإنشاء اتصال بقاعدة البيانات $mysqli = new mysqli("localhost", "اسم_المستخدم", "كلمة_المرور", "اسم_قاعدة_البيانات"); // تحقق من الاتصال if ($mysqli->connect_error) { die("فشل الاتصال: " . $mysqli->connect_error); } // قم بتنفيذ استعلام $result = $mysqli->query("SELECT * FROM اسم_الجدول"); // .جلب البيانات while ($row = $result->fetch_assoc()) { // قم بمعالجة كل صف من البيانات echo $row['اسم_العمود'] . "<br>"; } // أغلق الاتصال $mysqli->close(); ?>
    1 نقطة
  13. بخصوص هذا الخطأ الذي ظهر لك، فهو بسبب استخدام دالة ()mysql_fetch_assoc التي لا تزال تستخدم للتعامل مع قاعدة بيانات MySQL، لحل هذا المشكل يمكن البدء بتغيير دوال الاتصال فبدلا من الدوال التي تستخدم لقواعد البيانات MySQL يمكنك استخدام دالة ()fetch بدلا من ()mysql_fetch_assoc لهذا في ملف home.php يمكنك تحديث الجزء المتعلق باستعلام الدالة: while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { // استخدام البيانات المستردة }
    1 نقطة
  14. تم التثبيت بنجاح وتم ضهور رسالة خطاء: Fatal error: Uncaught Error: Call to undefined function mysql_fetch_assoc() in C:\xampp\htdocs\home.php:54 Stack trace: #0 {main} thrown in C:\xampp\htdocs\home.php on line 54 تم التثبيت بنجاح وتم ضهور رسالة خطاء: Fatal error: Uncaught Error: Call to undefined function mysql_fetch_assoc() in C:\xampp\htdocs\home.php:54 Stack trace: #0 {main} thrown in C:\xampp\htdocs\home.php on line 54
    1 نقطة
  15. ماهو دور هاذا البرنامج
    1 نقطة
  16. رسالة الخطأ تشير إلى أن امتداد PDO غير قادر على التواصل مع خادم SQL Server لعدم وجود تثبيت صحيح لبرنامج Microsoft ODBC Driver for SQL Server، فحسب الرسالة هنالك خطأ في ملف home.php في السطر 35 عند محاولة إنشاء اتصال PDO مع قاعدة بيانات SQL Server يحدث خطأ لأن امتداد PDO يحتاج إلى تثبيت Microsoft ODBC Driver for SQL Server للتواصل مع الخادم. ولحل هذه المشكلة، يجب عليك: تحميل وتثبيت Microsoft ODBC Driver for SQL Server للنسخة x64. التأكد من أن تثبيت البرنامج تم بنجاح وإعادة تشغيل الخادم. التحقق من صحة معلومات الاتصال في بناء PDO في ملف home.php، والتأكد من أن السلسلة الاتصال وبيانات الاعتماد صحيحة.
    1 نقطة
  17. انت تحتاج الى تنزيل ODBC على جهازك ، يمكنك تحميله من الموقع الرسمى لشركة microsoft : https://www.microsoft.com/en-us/download/details.aspx?id=36434
    1 نقطة
  18. في مشروع تحليل المشاعر في النصوص العربية الموجود في كتاب عشرة مشاريع عملية في الذكاء الاصطناعي الخاص بالأكاديمة وفي إحدى خلايا المشروع ظهرت لي مشكلة التالية : وهذا هو الكود : from keras.preprocessing.text import Tokenizer from keras.preprocessing.sequence import pad_sequences # نركيب جمل التغريدات من المفردات المعالجة sentences = tweets['tweet_preprocessed'].apply(toSentence) print(sentences.values[25]) max_words = 5000 max_len = 50 # التصريح عن المجزئ # مع تحديد عدد الكلمات التي ستبقى # بالاعتماد على تواترها tokenizer = Tokenizer(num_words = max_words ) # ملائمة المجزئ لنصوص التغريدات tokenizer.fit_on_texts(sentences.values) # تحويل النص إلى قائمة من الأرقام S = tokenizer.texts_to_sequences(sentences.values) print(S[0]) # توحيد أطوال الأشعة X = pad_sequences(S, maxlen=max_len) print(X[0]) X.shape مع العلم أني قمت بتثبيت ال keras ولا أدري لماذا يظهر ان المكتبة ليست موجودة
    1 نقطة
  19. يوم حطيت امر فلاتر دوكتر اعاطاني كذا وانا مثبت ال VS code و مثبت لغة c++ C:\Users\ammar>flutter doctor Doctor summary (to see all details, run flutter doctor -v): [√] Flutter (Channel stable, 3.16.9, on Microsoft Windows [Version 10.0.22621.3007], locale en-US) [√] Windows Version (Installed version of Windows is version 10 or higher) [!] Android toolchain - develop for Android devices (Android SDK version 34.0.0) ! Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses [√] Chrome - develop for the web [X] Visual Studio - develop Windows apps X Visual Studio not installed; this is necessary to develop Windows apps. Download at https://visualstudio.microsoft.com/downloads/. Please install the "Desktop development with C++" workload, including all of its default components [√] Android Studio (version 2023.1) [√] VS Code (version 1.86.0) [√] Connected device (3 available) [√] Network resources ! Doctor found issues in 2 categories.
    1 نقطة
  20. المشكلة الأولى خاصة بأنك لم تقبل بعض تراخيص Android SDK المطلوبة، وعليك تنفيذ الأمر التالي في منفذ الأوامر: flutter doctor --android-licenses ثم اضغط على y للقبول عند الطلب. ستحتاج إلى القيام بذلك لكل التراخيص غير المقبولة. المشكلة الثانية هي أنه عليك تحميل مجموعة العمل "Desktop development with C++" من خلال الرابط التالي: https://visualstudio.microsoft.com/downloads/ واختر إصدار Community، ثم أثناء التثبيت اختر خيار Desktop development with C++:
    1 نقطة
  21. هناك فرق كبير بين العامل == والعامل in في بايثون: العامل == يقوم بالمقارنة ويرجع قيمة بوليان True أو False حسب نتيجة المقارنة. مثلا: a == b أما العامل in فهو يفحص إذا كان عنصر أو قيمة موجودة ضمن مجموعة أو متتالية أو قائمة dictionary ويرجع True أو False. a in list ليس للعامل in علاقة بدوال التكرار زي for loop، حيث أنه يقوم بفحص وجود عنصر وليس تكرار عملية. مثلا يمكنك استخدام in داخل شرط if بدلا من for لفحص وجود عنصر: if a in list: print("item exists") لكن لو أردنا فحص وجود عنصر باستخدام for بدلا من in، يمكن كتابة الكود كالتالي: found = False for item in list: if item == a: found = True break if found: print("item exists") إذاً in يستخدم لفحص وجود عنصر في مجموعة، بينما == للمقارنة والمطابقة.
    1 نقطة
  22. == تستخدم لمقارنة القيم ببعضها وترجع true او false x = 5 y = 5 result = x == y #الناتج true اما العامل in يستخدم للتحقق من وجود قيمة معينة في تسلسل ما list مثلا، وترجع أيضا true او false، لذا يمكن ان نقول انه يشبه for loop ولكنه لا يقوم بتكرار حقيقي list = [1,2,3,4] result = 3 in list # الناتج true
    1 نقطة
  23. مع اقتراب الربع الأول من القرن الواحد والعشرين من نهايته، تتضح أهمية تعلم لغات البرمجة والتقنيات عمومًا لمختلف الأفراد أكثر فأكثر. فعالمُنا يزداد اعتمادًا على الحواسيب والروبوتات والأجهزة الذكية ويستخدمها في شتّى المجالات والقطاعات، من البحث العلمي والأكاديمي إلى الصناعة والترفيه والصحة وغيرها. وبالتالي أصبح تعلم لغات البرمجة ضرورة ملحة لكلّ إنسان يرغب في مواكبة مقتضيات العصر الرقمي ويرغب بأن يعزز موقعه الوظيفي ويزيد من مهاراته في حل المشكلات. فإذا كنت مهتمًا بتعلم لغات البرمجة لكنك لا تعرف من أين تبدأ، إليك هذا المقال! ما هي لغات البرمجة؟ بدايةً، لنتعرّف على معنى لغة البرمجة، ولماذا سُمّيت لغة أصلًا؟ تُعَدّ لغات البرمجة أدوات يُخاطب بها المبرمج جهاز الحاسوب أو أي جهاز قابل للبرمجة، ويوجهه إلى إجراء عمليات معينة. وتتميز كل لغة برمجة بقواعد تحكم صياغتها شأنها شأن الغات البشرية الطبيعية، فإذا خرج المبرمج عن هذه القواعد، سيتعذّر على الحاسوب فهم البرنامج أو تنفيذه على النحو المطلوب. وقد نشأت لغات البرمجة الأولى في أواسط القرن العشرين وكانت أول لغة برمجة متاحة تجاريًا هي لغة فورتران FORTRAN، وكانت لغات البرمجة في بداية عهدها صعبة ومقعدة وأقرَب إلى لغة الآلة وعتاد الحاسوب منها إلى اللغات البشرية. لكن مع تطوّر مستويات لغات البرمجة عبر العقود، نشأت لغات البرمجة عالية المستوى، وهي أسهل فهمًا وأقرب إلى اللغات الطبيعية. وسهّل انتشار هذه اللغات تعلّم البرمجة على غير المختصين في الحواسيب. لكن، لماذا قد يتعلّم المرء البرمجة أصلًا؟ فوائد تعلم لغات البرمجة قبل الشروع في أسماء وأنواع لغات البرمجة واستخدامات كل منها، يحسُن بنا ذكر فوائد تعلم لغات البرمجة. فإذا كان الإنسان مديرًا أو موظفًا أو مالك متجر، فهل يمكن أن ينفعه تعلم البرمجة؟ وحتّى إن كان مصمم مواقع ويب أو صانع ألعاب إلكترونية مثلًا، ألا يمكنه الاعتماد على الأدوات الجاهزة الميسَّرة التي تمكنه من إنجاز عمله دون الحاجة إلى تعلم لغات البرمجة؟ في الواقع إن علمك بلغات البرمجة وتعلمك لها ورقة رابحة في يدك وسيعود عليك بالعديد من الفوائد، سواءٌ أكنت مبرمجًا أم غير ذلك، ومن أبرز هذه الفوائد ما يلي: تسهّل لغات البرمجة أتمتة الأعمال وتوفر الوقت. تتيح لك البرمجة بناء أشياء قيّمة تزيد من دخلك. تعزز معرفة لغات البرمجة فرص توظيفك. تمكنك لغات البرمجة من محو أميتك الرقمية والتآلف مع التطور التقني. لنناقش كل نقطة من النقاط الواردة أعلاه بمزيد من التفصيل. 1. تسهّل لغات البرمجة أتمتة الأعمال وتوفر الوقت تخيّل أن تستطيع أتمتة عمل 10 ساعات في ساعة واحدة! يدور جزء كبير من علوم الحاسوب على الخوارزميات التي تساعد على تحقيق أكبر قدر من العمل بأقل قدر من الوقت والجهد. تساعدك هذه الخوارزميات (حتى وإن لم تكن مبرمجًا) على حل كثيرٍ من مشكلاتك على نحو أمثلي. 2. تتيح لك البرمجة بناء أشياء قيّمة تزيد من دخلك لا يكاد يخلو مشروعٌ من المشاريع الصغيرة أو الكبيرة من الحاجة إلى برنامج محلي، أو موقع إلكتروني على الويب، أو تطبيق جوال يسهّل العمل أو يزيد شهرة المشروع أو يعزّز تجربة المستخدم. إن قدرتك على بناء حلول تعزز مشروعك الخاص أو مشاريع من هم حولك قد تكون فرصة لك وللمشروع للانطلاق إلى مستقبل باهر. 3. تعزز معرفة لغات البرمجة فرص توظيفك حسب موقع جِتنُكس إن أكثر من 58% من فرص العمل في الصناعات الرقمية يتطلب وجود مهارة في البرمجة لدى المتقدمين. كما أن الطلب على وظائف البرمجة قد ازداد بمعدل أسرع بـ50% من ازدياد الطلب على الوظائف الأخرى بالعموم في العقد الماضي ولعل هذه النسب المرتفعة تكفي لوحدها لإقناعك بأن مستقبل الوظائف المختلفة سترجح لكفة من يهتم بتعلم لغات البرمجة ويوليها الاهتمام الكافي. 4. تمكنك لغات البرمجة من محو أميتك الرقمية والتآلف مع التطور التقني ففي عصرنا الحالي لم تعد الأمية هي أمية القراءة والكتابة والحساب، بل يعد أي شخص غير قادر على التعامل مع التقنيات الرقمية والحواسيب والهواتف الذكية ومنصات الإنترنت أميًّا، ومن هنا تبرز أهمية تعلم لغات البرمجة فهي توسع مداركك وتعزز قدرتك على التخاطب مع الأجهزة الذكية والمختلفة واستخدامها بكفاءة. كيف أختار لغة البرمجة المناسبة لي؟ إن تعلّم لغات البرمجة بالترتيب (من الأسهل إلى الأصعب، أو من الأقرَب إلى منطق الحاسوب إلى الأبعد عنه) هو الطريقة المثالية للبدء إذا لم يكن لديك هدف محدد لتعلم البرمجة وكنت تود فقط تعزيز مهاراتك في التفكير وحل المشكلات. لكن من الأفضل أن يعرف المرء أولًا لماذا يتعلّم لغات البرمجة؟ وما نوع التطبيقات التي ينوي تطويرها من التعلم إذ تختلف أهداف الناس عندما يقررون تعلم لغات البرمجة وتتنوع بين: برمجة المواقع الإلكترونية. برمجة تطبيقات الجوال. تعلم الذكاء الصنعي وتحليل البيانات. برمجة الألعاب. فلنتعرّف على لغات البرمجة المناسبة لكل مجال من هذه المجالات. برمجة المواقع الإلكترونية إذا كان شغفك في بناء المواقع الإلكترونية، فلا بدّ لك من البدء بتقنيات الويب. أهم لغات البرمجة المناسبة لتطوير المواقع الإلكترونية: HTML: وهي اللغة التي تُعنى بمحتوى صفحات الويب من نصوص وصور وروابط. CSS: وهي اللغة المعنية بتنسيق صفحات الويب تلوينًا وتحريكًا وتحجيمًا… إلخ. JavaScript: وهي اللغة المعنية بإضافة التفاعلية والديناميكية إلى صفحات الويب. من أهم مزايا تقنيات الويب هي ميزة تعدّد المنصّات cross-platform، أي إمكانية استخدامها لبناء تطبيقات في مختلف المنصّات. وباستخدام أطر عمل تطوير الويب الحديثة، يستطيع مبرمج الويب بناء مختلف أنواع التطبيقات سواء برمجة مواقع وتطبيقات الويب، أو تطبيقات سطح المكتب أو تطبيقات لأجهزة الجوال (أندرويد وآيفون) برمجة تطبيقات الجوال لقد أصبحت برمجة تطبيقات الجوال مجالًا من أهم مجالات تقانة المعلومات. تتنوع منهجيات برمجة تطبيقات الجوال بين الأصيل والهجين ومتعدد المنصات والتقدمي. إليك أهم لغات البرمجة في مجال تطبيقات الجوال: لغة Kotlin لتطبيقات الأندرويد الأصيلة. لغة Swift لتطبيقات iOS الأصيلة. تقنيات الويب للتطبيقات الهجينة والتقدمية. إطار Flutter أو React Native، أو NativeScript للتطبيقات متعددة المنصات. تعلم الذكاء الصنعي وتحليل البيانات مع صعود نجم الذكاء الصنعي، وازدياد الحاجة إلى تحليل البيانات الضخمة، برزت أهمية لغة بايثون Python في هذا المجال. لذا يعدّ تعلم لغة البرمجة بايثون من أول الخيارات التي ستتبادر للذهن عند الرغبة في تعلم لغات البرمجة من أجل التخصص في تطوير تطبيقات الذكاء الاصطناعي. إذ تمتاز لغة بايثون بسهولة قواعدها وسهولة فهم أكوادها، وهي في الوقت نفسه مدعومة بكثير من المكتبات التي توسّع إمكاناتها إلى مختلف المجالات. وقد أثبتت بايثون قدرتها العالية كلغة لبرمجة الذكاء الصنعي وتحليل البيانات، دون أن تنقص من قيمتها في مجالات أخرى، مثل تطوير الواجهات الخلفية لتطبيقات الويب، أو حتى بناء بوتات تلغرام أو غير ذلك. تعد سهولة تعلم لغة البرمجة بايثون، إلى جانب توفر كثير من المكتبات التي تسهّل بناء مختلف التطبيقات باستخدامها، من أهم مزاياها التي تشجّع المبتدئين على اختيارها. فإذا كنت مهتمًّا بالذكاء الصنعي وتحليل البيانات، فلغة البرمجة بايثون هي خيارك الأول. دورة الذكاء الاصطناعي احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة. اشترك الآن برمجة الألعاب يتجه كثير من الراغبين في تعلم البرمجة إلى تعلم صناعة الألعاب الإلكترونية فهو مجال مربح وممتع بذات الوقت. تتنوع الخيارات أمام عشاق برمجة الألعاب، إذ تتوفر العديد من لغات برمجة الألعاب ومحركات الألعاب التي تسهل عمل مبرمجي الألعاب. لكن الخيار الأول إذا أردت تعلم برمجة الألعاب ثلاثية الأبعاد هو لغة ++C، إذ تعد هذه اللغة البداية التقليدية في رحلة تعلم البرمجة، كما تُدرّسها كثير من الجامعات في السنوات الأولى. ومن أشهر محركات الألعاب التي تستخدم لغة ++C نذكر: محرك الألعاب Unity. محرك الألعاب Unreal Engine. أما إذا أردت بناء ألعاب أقرب إلى البساطة، فلك أن تبدأ تعلم لغات البرمجة الآتية: لغة #C أو GDScript (محرك الألعاب Godot) جافاسكريبت (إطار Phaser). بايثون (إطار Pyxel). كيفية تعلم لغة البرمجة التي اخترتها بعد أن تختار لغة البرمجة المناسبة لك، لا شكّ أنك تتساءل عن طرف الخيط. كيف تبدأ تعلم لغة البرمجة التي اخترتها؟قد تختلف طرائق تعلم لغات البرمجة في تفاصيلها، ولكنها تتبع بالعموم قواعد معينة: تعلم الخوارزميات وأسس التفكير المنطقي وحل المشكلات. تعلم مبادئ وأساسيات لغات البرمجة. لا تشتت نفسك بمصادر منوعة لتعلم لغات البرمجة واكتفَ بمصادر حديثة وموثوقة. انضم للمجتمعات البرمجية مثل مجتمع حسوب io وشارك تجاربك مع خبراء في لغات البرمجة المختلفة. ابدأ بتطوير مشاريع برمجية بسيطة تناسب المبتدئين، ثم تقدم شيئًا فشيئًا. احرص على بناء معرض أعمال قوي يعكس خبراتك في لغات البرمجة التي تعلمتها. ابحث عن فرصة عمل في الشركات ومواقع العمل الحر فالمشاريع الفعلية كفيلة بتعزيز تعلمك للغات البرمجة والوصول للاحتراف. لا تتوقف عن التعلم وتطوير نفسك فالبرمجة تتطور وتتغير باستمرار وعليك الاطلاع على كل جديد كي تبقى في الصدارة. أهم مصادر تعلم لغات البرمجة بالعربية إن كنت قلقًا من إمكانية تعلم لغة البرمجة بالعربية، فلا عليك. لقد تطور المحتوى التعليمي البرمجي العربي في السنوات الأخيرة تطورًا ملحوظًا، وصار من السهولة بمكان تعلم أي لغة برمجة باللغة العربية. ويعود هذا الفضل إلى جهود كثير من منشئي المحتوى على اليوتيوب، إلى جانب المؤسسات التعليمية مثل أكاديمية حسوب التي تعد اليوم أكبر منصة تعليمية لتعلم البرمجة في الوطن العربي، والتي تقدم الكثير من دروس البرمجة عالية الجودة بأسلوب شيق وعملي. حيث توفر أكاديمية حسوب عدة كتب برمجة عربية ومقالات برمجة مجانية لتعلم لغات البرمجة المختلفة.ومن الكتب المناسبة للمبتدئين كتاب تعلم البرمجة للمبتدئين الذي يُطلع القارئ على أنواع البيانات الأساسية وأنواع لغات البرمجة ومكونات التدفق المنطقي، ثم ينتقل إلى بناء تطبيقات للتعامل مع قواعد البيانات، وبناء الواجهات الرسومية وغير ذلك من المهام البرمجية التي تنفع في بناء شتى أنواع التطبيقات، ومن الكتب الأخرى المناسبة للمبتدئين كتاب البرمجة بلغة بايثون الذي يعدّ منطلقًا إلى عالم البرمجة بهذه اللغة القوية التي تعد واحدة من أقوى لغات البرمجة والتي تصلح للعديد من المجالات. كما تقدم أكاديمية حسوب أيضًا عدة دورات مدفوعة للمبتدئين في عالم لغات البرمجة، منها دورة علوم الحاسوب وهي مدخل مناسب إلى الحاسوب وعلومه والخوارزميات وأنظمة التشغيل وقواعد البيانات وغير ذلك. أما الدورات المتخصصة بلغة برمجة بعينها فمنها: دورة تطوير التطبيقات باستخدام لغة Python دورة تطوير التطبيقات باستخدام لغة JavaScript دورة تطوير تطبيقات الويب باستخدام لغة PHP دورة تطوير تطبيقات الويب باستخدام لغة Ruby خاتمة إن تعلم لغات البرمجة رحلة وممتعة، فإذا كنت قد عزمت البدء فيها، فأتمنى لك التوفيق، وأرجو أن يكون هذا المقال دليلًا صغيرًا ينفعك في أول محطات رحلتك. وإذا واجهتك عقبة في رحلة تعلم أي لغة برمجة، فلا تيأس، جرّب وحاول حتى تتعلّم. وإذا وجدت صعوبة في اختيار لغة البرمجة المناسبة لك أو كيفية تعلمها، فلك أن تطرح مشكلتك في قسم التعليقات أسفل المقال. اقرأ أيضًا أسهل لغات البرمجة دليلك إلى أنواع لغات البرمجة لغات برمجة الذكاء الاصطناعي الدليل الشامل لتعلم البرمجة خطوات برمجة تطبيق للمبتدئين برمجة الذكاء الاصطناعي تعرف على وظائف البرمجة الأكثر طلبًا
    1 نقطة
  24. FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':gradle:compileGroovy'. > Could not resolve all files for configuration ':gradle:detachedConfiguration1'. > Could not find org.codehaus.groovy:groovy:?.?.??. Searched in the following locations: - https://dl.google.com/dl/android/maven2/org/codehaus/groovy/groovy/?.?.??/groovy-?.?.??.pom - https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy/?.?.??/groovy-?.?.??.pom Required by: project :gradle > Could not find org.codehaus.groovy:groovy-ant:?.?.??. Searched in the following locations: - https://dl.google.com/dl/android/maven2/org/codehaus/groovy/groovy-ant/?.?.??/groovy-ant-?.?.??.pom - https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-ant/?.?.??/groovy-ant-?.?.??.pom Required by: project :gradle > Could not find org.codehaus.groovy:groovy-astbuilder:?.?.??. Searched in the following locations: - https://dl.google.com/dl/android/maven2/org/codehaus/groovy/groovy-astbuilder/?.?.??/groovy-astbuilder-?.?.??.pom - https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-astbuilder/?.?.??/groovy-astbuilder-?.?.??.pom Required by: project :gradle > Could not find org.codehaus.groovy:groovy-console:?.?.??. Searched in the following locations: - https://dl.google.com/dl/android/maven2/org/codehaus/groovy/groovy-console/?.?.??/groovy-console-?.?.??.pom - https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-console/?.?.??/groovy-console-?.?.??.pom Required by: project :gradle > Could not find org.codehaus.groovy:groovy-datetime:?.?.??. Searched in the following locations: - https://dl.google.com/dl/android/maven2/org/codehaus/groovy/groovy-datetime/?.?.??/groovy-datetime-?.?.??.pom - https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-datetime/?.?.??/groovy-datetime-?.?.??.pom Required by: project :gradle > Could not find org.codehaus.groovy:groovy-dateutil:?.?.??. Searched in the following locations: - https://dl.google.com/dl/android/maven2/org/codehaus/groovy/groovy-dateutil/?.?.??/groovy-dateutil-?.?.??.pom - https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-dateutil/?.?.??/groovy-dateutil-?.?.??.pom Required by: project :gradle > Could not find org.codehaus.groovy:groovy-nio:?.?.??. Searched in the following locations: - https://dl.google.com/dl/android/maven2/org/codehaus/groovy/groovy-nio/?.?.??/groovy-nio-?.?.??.pom - https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-nio/?.?.??/groovy-nio-?.?.??.pom Required by: project :gradle > Could not find org.codehaus.groovy:groovy-sql:?.?.??. Searched in the following locations: - https://dl.google.com/dl/android/maven2/org/codehaus/groovy/groovy-sql/?.?.??/groovy-sql-?.?.??.pom - https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-sql/?.?.??/groovy-sql-?.?.??.pom Required by: project :gradle > Could not find org.codehaus.groovy:groovy-test:?.?.??. Searched in the following locations: - https://dl.google.com/dl/android/maven2/org/codehaus/groovy/groovy-test/?.?.??/groovy-test-?.?.??.pom - https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-test/?.?.??/groovy-test-?.?.??.pom Required by: project :gradle > Could not find org.codehaus.groovy:groovy-templates:?.?.??. Searched in the following locations: - https://dl.google.com/dl/android/maven2/org/codehaus/groovy/groovy-templates/?.?.??/groovy-templates-?.?.??.pom - https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-templates/?.?.??/groovy-templates-?.?.??.pom Required by: project :gradle > Could not find org.codehaus.groovy:groovy-json:?.?.??. Searched in the following locations: - https://dl.google.com/dl/android/maven2/org/codehaus/groovy/groovy-json/?.?.??/groovy-json-?.?.??.pom - https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-json/?.?.??/groovy-json-?.?.??.pom Required by: project :gradle > Could not find org.codehaus.groovy:groovy-xml:?.?.??. Searched in the following locations: - https://dl.google.com/dl/android/maven2/org/codehaus/groovy/groovy-xml/?.?.??/groovy-xml-?.?.??.pom - https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-xml/?.?.??/groovy-xml-?.?.??.pom Required by: project :gradle > Could not find org.codehaus.groovy:groovy-groovydoc:?.?.??. Searched in the following locations: - https://dl.google.com/dl/android/maven2/org/codehaus/groovy/groovy-groovydoc/?.?.??/groovy-groovydoc-?.?.??.pom - https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-groovydoc/?.?.??/groovy-groovydoc-?.?.??.pom Required by: project :gradle * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to get full insights. * Get more help at https://help.gradle.org BUILD FAILED in 5m 42s Exception: Gradle task assembleDebug failed with exit code 1
    1 نقطة
  25. اريد عند فتح الصفحه تلقائيا يتم تنفيذ شئ معين مثل داله طباعه او داله انا اكتب المنطق الخاص بها
    1 نقطة
  26. السلام عليكم اللاب عندي يفصل عند توصيل الشاحن مروحه التبريد بتشتغل ويسخن وينطفى ما الحل ؟
    1 نقطة
  27. الحاجات دي هتساعدك ترفع الperformance وaccessibility وseo 1- أولًا، لا يجب أن يحتوي الكود الخاص بـ HTML لديك على أخطاء؛ يجب أن يكون صحيحًا بالكامل (Valid). يمكنك زيارة هذا الموقع وإدخال الكود لحل المشكلات https://validator.w3.org/ 2- يجب كتابة البادئات (prefixes) الخاصة بـ CSS لدعم المتصفحات. يمكنك وضع الكود الخاص بك هنا بعد الانتهاء، وهذا الموقع سيقوم بتعديله لك https://autoprefixer.github.io/ 3- سأوضح هنا بعض الجوانب المتعلقة بالصور، مثل جودتها وحجمها، والبديل (alt attribute)، وتقنية التحميل الكسول (Lazy Load)، وتغيير حجم الصور، وتأثيرها على الأداء. يمكنك تحسين جودة صورك باستخدام العديد من المواقع التي توفر صوراً بجودة عالية مجاناً. فيما يتعلق بحجم الصور، إذا كان كبيراً، يجب تقليله دون التأثير على جودتها، وهناك العديد من المواقع التي تقدم خدمة ضغط الصور. بالنسبة لتقنية التحميل الكسول، عند فتح موقع، يُفترض أن جميع الصور تُحمّل دفعة واحدة، وهو ما يؤثر على الأداء بالطبع. هذه التقنية تجعل فقط الصور التي يراها المستخدم تبدأ بالتحميل، وكلما تم التنقل داخل الموقع، تُحمّل الصور واحدة تلو الأخرى. يمكنك استخدام هذه التقنية بإضافة السمة loading="lazy" إلى علامة img. يمكنك أيضاً التأكد من ملاءمة أحجام الصور لمختلف أحجام الشاشات باستخدام استعلامات الوسائط (media queries)، بتغيير حجم الصور عند تصغير الشاشة ووضع صور مناسبة للتابلت والموبايل، أو تثبيت حجم الصورة، لأن تغيير حجم الصور قد يقلل من الأداء. يمكن القيام بذلك باستخدام علامة HTML picture. بالنسبة للبديل (alt attribute)، لا يجب أن تكون فارغة، فهذا خطأ يؤثر على تحسين محركات البحث (SEO) وإمكانية الوصول، ويجب أن تحتوي على كلمات تصف الصورة. 4-من الضروري قبل رفع الموقع أن تقوم بتصغير حجم (minify) كود الـ CSS والـ JS لأن هذا سيخفض حجم ملف الكود إلى النصف تقريبًا، مما سيحسن الأداء بشكل ملحوظ ويقلل من عدد الطلبات الـ HTTP. كل ملف (CSS، JavaScript، صورة) يحتاج إلى طلب HTTP خاص به ليتم تحميله. يُنصح بدمج الملفات معًا قدر الإمكان لتقليل الطلبات. يمكنك القيام بذلك من خلال استخدام بعض المواقع الإلكترونية المتخصصة في هذا المجال. 5-يمكنك استخدم ال light house ستجدها ف dev tools يمكنك فتحها بالضغط علي f12 يمكنك من خلالها ان تقيس الperformance وaccessibility وseo وستعطيك تعليمات لاجل تحسينهم وستظهر من خلالها المشاكل التي لديك ويمكنك حلها 6- تاج meta description هذا يوضع في الhead وهذا سيفرق في الSeo لدرجه كبيره جدا بمقارنه انه بسيط جدا. 7-يمكنك استخدم Bundlers ستفيدك في المشاريع الكبيره وستسهل عليك الكثير من الاشياء مثل Webpack او gulp او غيره. 8- استخدام الكاش (Cache) تخزين الكاش يساعد في تسريع التحميل للزوار العائدين لموقعك. يتم تخزين بعض البيانات مؤقتًا لتجنب إعادة تحميلها في كل مرة. 9. استخدام شبكة توصيل المحتوى (CDN) هي شبكات توزع المحتوى من موقعك على خوادم حول العالم، مما يقرب المحتوى من المستخدم ويسرع التحميل. 10. تقليل استخدام الإضافات (Plugins) كلما زادت الإضافات، زاد الوقت اللازم لتحميل الصفحة. استخدم فقط الإضافات الضرورية. بتطبيق هذه النصائح، يمكن تحسين أداء موقع الويب بشكل كبير، مما يؤدي إلى تجربة مستخدم أفضل وتحميل أسرع للصفحات.
    1 نقطة
  28. هناك العديد من الأمور الممكن تنفيذها حتى يصبح الموقع أسرع وأفضل، وهذه هي أبرزها: الانتباه لحجم ملفات ال HTML, CSS, JS والصور ونوع الخطوط ومحاولة تقليل حجمها لتسهل تحميلها، وذلك عن طريق استخدام كود نظيف بدون مساحات فارغة كثيرة، وعن طريق استخدام أدوات لتقليل حجم الصور مثل ImageOptim, TinyPNG. استخدام ما يدعى ال cache في الموقع، مما يتيح تخزين بعض البيانات في متصفح المستخدم، مثل بعض المحتوى أو الصور أو الملفات التي لاتحتاج الى تحديث طوال الوقت، والذي يمنع التحميل المتكرر وبالتالي سرعة أكبر للموقع. استخدام التوابع غير المتزامنة (async) في جافا سكريبت، والذي يسمح لهذه التوابع بالعمل في الخلفية وعدم انتظار المتصفح لانتهاء تحميلها قبل تحميل الصفحة بالكامل. استخدام مايعرف ب Server Side Rendering و Static Side Generation لتحميل صفحات الويب على السيرفر وارسالها الى المستخدم، عوضا عن تحميلها على متصفح المستخدم لتوفير الوقت وضمان السرعة.
    1 نقطة
  29. يعتبر تنفيذ شيء معين عند فتح صفحة الويب من الأمور الشائعة في تطوير الويب. يمكن استخدام هذه الوظيفة لتحقيق مجموعة متنوعة من الأهداف، مثل تحميل بيانات من قاعدة البيانات، أو تشغيل تأثيرات رسومية، أو عرض رسالة ترحيب 1. تضمين الجافاسكريبت في صفحة الويب لنبدأ بتضمين الجافاسكريبت في صفحة الويب. يمكنك القيام بذلك باستخدام الوسم <script> في الجزء السفلي من صفحة HTML. <!DOCTYPE html> <html> <head> <title>صفحة الويب الرئيسية</title> </head> <body> <!-- محتوى الصفحة --> <script> // هنا يمكنك كتابة الجافاسكريبت لتنفيذ شيء معين عند فتح الصفحة. </script> </body> </html> 2. كتابة كود الجافاسكريبت هذه مثال علي كتابة الكود اللذي سيتم تنفيذه عند فتح الصفحه علي سبيل المثال سنبدأ بعرض رسالة ترحيب. <script> // عند تحميل الصفحة، سيتم تنفيذ هذا الكود window.onload = function() { alert("مرحبًا بك في صفحتنا الرئيسية!"); }; </script> عند فتح الصفحة، سيظهر نافذة تنبيه تحتوي على رسالة ترحيب. 3. تنفيذ الأمور الشائعة الآن، دعونا نركز على تنفيذ بعض الأمور الشائعة عند فتح الصفحة . مثال للكود خاص باستدعاء endpoint من مصدر خارجي <script> window.onload = function() { // استخدم fetch لاسترجاع بيانات من مصدر خارجي fetch('https://api.example.com/data') .then(response => response.json()) .then(data => { // اعرض البيانات في الصفحة document.getElementById('data-container').innerText = JSON.stringify(data); }); }; </script>
    1 نقطة
  30. يمكنك استخدام الدالة window.onload أو استخدام الحدث DOMContentLoaded الذي ينتظر تحميل DOM الصفحة بالكامل قبل تنفيذ الكود. إليك مثال بسيط على كيفية استخدام window.onload: window.onload = function() { // كود JavaScript الذي تريد تنفيذه عند تحميل الصفحة console.log('تم تحميل الصفحة بنجاح!'); // يمكنك استدعاء أي دالة هنا myFunction(); }; function myFunction() { // منطق الدالة الذي تريد تنفيذه console.log('تم تنفيذ دالة myFunction.'); } وهذا مثال آخر باستخدام DOMContentLoaded: document.addEventListener('DOMContentLoaded', function() { // كود JavaScript الذي تريد تنفيذه عندما يكون DOM جاهزًا console.log('DOM جاهز الآن للتفاعل معه!'); // يمكنك استدعاء أي دالة هنا myFunction(); }); function myFunction() { // منطق الدالة الذي تريد تنفيذه console.log('تم تنفيذ دالة myFunction.'); } الفرق بين الاثنين هو أن window.onload ينتظر تحميل كل شيء بما في ذلك الصور وأوراق الأنماط، بينما DOMContentLoaded ينتظر فقط تحميل HTML وبناء DOM. يمكنك اختيار الطريقة التي تناسبك أكثر حسب ما تريد أن تفعله الدالة عند تحميل الصفحة.
    1 نقطة
  31. بناءًا على ما ذكرته، فأنا لا أنصحك تمامًا بإكمال الدراسة في الجامعة التي ذكرتها، فالشهادة مهمة نعم لكن ليس بذلك القدر في مجال البرمجة فهي تعطيك أفضلية وتجعلك تحتك بالأساسيات أكثر وتجعلك مميز عن شخص لما يحصل على شهادة في علوم الحاسوب. فإن لم تتحصل على ما سبق فما فائدة الدراسة لمدة 4 إلى 6 سنوات إذن، في حال كانت الشهادة مدعومة وبتكلفة منخفضة أي جامعة حكومية فلا مشكلة الشهادة الجامعية مهمة بالطبع في عالمنا العربي. لكن التكلفة مرتفعة والعائد ضعيف من حيث تحصيل المعلومات واكتساب المهارات، إذن استثمار غير جيد. فكر في التعليم على أنه استثمار في نفسك، وستتغير نظرتك تجاهه، يمكنك الدراسة في أكاديمية حسوب وإتباع مسار برمجي محدد مثل مسار الواجهة الأمامية أو الخلفية وخلافه وتحديد وقت يتراوح من 6 أشهر إلى سنة للإنتهاء من ذلك المسار. ويوجد بديل مجاني لما تدرسه بالجامعة السورية، وهو المحتوى الخاص بـ OSSU: https://github.com/ossu/computer-science
    1 نقطة
  32. لقد انتقل الذكاء الاصطناعي التوليدي Generative AI من مجرد كلمة طنانة في الصناعة إلى واقع ملموس يسود كافة مجالات الحياة ويتقدّم بوتيرة سريعة. يُقدم هذا المقال نظرة عامة على الذكاء الاصطناعي التوليدي الذي يشكل مفهومًا أساسيًا لفهم التقنيات الحديثة وتطبيقاتها، ويستكشف التطور الحاصل للذكاء الاصطناعي وقدراته الحالية والاعتبارات الأخلاقية المرتبطة به. ويُختتم المقال بتقديم رؤى حول مستقبل الذكاء الاصطناعي التوليدي ومناقشة تأثيره المحتمل على حياتنا اليومية. التطوّر التاريخي للذكاء الاصطناعي تساعدك معرفة التطور التاريخي للذكاء الاصطناعي على فهم الذكاء الاصطناعي التوليدي بصورة أفضل ومعرفه دوره ومساهمته في مسيرة تطور علم الذكاء الاصطناعي بشكل عام. تعود أصول الذكاء الاصطناعي Artificial Intelligence أو اختصارًا AI إلى الفلاسفة والرياضيين القدامى الذين سعوا إلى تنفيذ الاستدلال أو المنطق من خلال الآلة. لكن وضع أساسيات ومبادئ الذكاء الاصطناعي الحديث بدأ في القرنين التاسع عشر والعشرين، وتجسد في الجبر البولي لجورج بول George Boole ومفهوم آلات التفكير Thinking machines التي وضعها آلان تورينج Alan Turing. وفي عام 1943، قدم وارن ماكولوخ Warren McCullouch ووالتر بيتس Walter Pitts أول خلية عصبية اصطناعية AI neuron، التي تعد تمثيلًا رياضيًا للخلية الحية. وقد كان هذا بدايةً لمفهوم الشبكات العصبية Neural networks، التي أصبحت اليوم جوهر الذكاء الاصطناعي الحديث. في عام 1950، قدم آلان تورنج ورقة بحثية بعنوان "آلات الحوسبة والذكاء Computing Machinery and Intelligence"، حيث اقترح اختبارًا لذكاء الآلة. وهذا الاختبار لتورنج لا يزال يُستخدم اليوم كوسيلة للتفكير في تقييم أنظمة الذكاء الاصطناعي. وقد ظهر مصطلح الذكاء الاصطناعي لأول مرة في عام 1956 خلال مشروع بحثي في دارتموث حول الذكاء الاصطناعي Dartmouth Summer Research Project، ومن هنا كانت بداية أبحاث الذكاء الاصطناعي، فقد شهدت هذه الفترة الزمنية العديد من الاكتشافات التي أدت إلى انتعاش في مجال الذكاء الاصطناعي في الستينيات، ودعمتها تمويلات من وزارة الدفاع الأمريكية من أجل استثمارها في التطبيقات العسكرية. وتوقعت شخصيات بارزة حينها مثل هربرت سايمون Herbert Simon ومارفن مينسكي Marvin Minsky أن الآلات الذكية ستتمكن من الوصول لمستوى الذكاء البشري في غضون جيل واحد. ومع ذلك، ثبت أن تعقيدات الذكاء الاصطناعي كانت أكبر من المتوقع، مما أدى إلى تقليل التمويل والبحث، مما أدى إلى ما يعرف باسم "شتاء الذكاء الاصطناعي AI winter". لاحقًا شهدت فترة الثمانينات عودة الاهتمام بأبحاث الذكاء الاصطناعي بفضل النجاح التجاري الذي حققته الأنظمة الخبيرة Expert Systems أحد أشهر تطبيقات الذكاء الاصطناعي والتي تعد عبارة عن أنظمة مبنية على قواعد تُقلد الاستدلال البشري. ووجدت هذه الأنظمة النور في قطاعات متنوعة، بما في ذلك الرعاية الصحية والتمويل. ومع ذلك كانت هذه النهضة مؤقتة، حيث بدأ "شتاء الذكاء الاصطناعي" الآخر عام 1987. خلال التسعينيات والعقد الأول من القرن الحادي والعشرين، أصبحت تقنيات تعلم الآلة Machine Learning سائدة في مجال الذكاء الاصطناعي. فقد أتيحت كمية كبيرة من البيانات الضخمة وشكلت شُعلةً لبداية ازدهار التعلم الآلي. فبخلاف الأنظمة التقليدية المبنية على قواعد محددة لتعمل، تُميّز خوارزميات التعلم الآلي الأنماط التي تتضمّنها البيانات من تلقاء نفسها، وهذا ما أدى إلى تطوير مجموعة من التطبيقات مثل مُرشحات البريد الإلكتروني المزعج Email spam filters وأنظمة التوصية المستخدمة في مواقع مشهورة مثل Netflix وأنظمة التنبؤ المالي وتوقع أسواق الأسهم. وقد حوّلت تقنية التعلم الآلي تركيز الذكاء الاصطناعي من الأنظمة المبنية على القواعد إلى الأنظمة المبنية على البيانات. مع حلول عام 2012 طرأ تحول كبير على الذكاء الاصطناعي فقد تحسنت قدرات الحواسيب وتطورت المعالجات CPU ووحدات معالجة الرسومات GPUs من جهة، كما توفرت البيانات وتطورت خوارزميات الشبكات العصبية، وهذه العوامل مجتمعة أدت إلى ظهور التعلم العميق Deep Learning كفرع من التعلم الآلي. وقد تفوق التعلم العميق بسرعة على تقنيات التعلم الآلي الأخرى، مما أدى إلى نهضة في أبحاث الذكاء الاصطناعي وتطبيقاته وزيادة في التمويل الممنوح له فمع حلول عام 2022، وقد بلغت الاستثمارات العالمية في الذكاء الاصطناعي حوالي 91 مليار دولار، وزاد الطلب على مختصي الذكاء الاصطناعي في سوق العمل. وقد بلغت تطبيقات الذكاء الاصطناعي المعتمدة على التعلم الآلي ذروتها في الوقت الحالي وطبقت في مختلف المهام بدءًا من المهام البسيطة كترشيح الرسائل المزعجة إلى المهام المعقدة كالمركبات ذاتية القيادة وأدوات التشخيص الطبي، كما ظهر تخصص فرعي للتعلم الآلي عرف باسم الذكاء الاصطناعي التوليدي Generative AI وأثبت كفاءته في العديد من التطبيقات وأبرزها كتابة المحتوى النصي وتوليد الصور ومقاطع الفيديو والأصوات، وفي فقراتنا التالية سنشرح المزيد حول هذا الفرع الحديث وآلية عمله. ما هو الذكاء الاصطناعي التوليدي؟ يستخدم المُهندسون أدوات وتقنيات متنوعة لتدريب خوارزميات التعلّم الآلة والذكاء الاصطناعي على البيانات للحصول على نماذج Models يمكنها إجراء توقعات أو تصنيفات. على سبيل المثال، يمكن لنموذج مُدرّب على مجموعة بيانات تحتوي على صور للقطط والكلاب التفريق بينهما بناءً على أنماط تعلمتها الخوارزمية خلال التدريب. تَخدم نماذج التعلم الآلي تطبيقات متنوعة بما في ذلك أنظمة الأمان التي تراقب تسجيلات الفيديو التي تسجلها الكاميرات وتكتشف وجود محاولات اقتحام محتملة من خلال تحليل بيانات الفيديو، كما يُمكن للمساعدين الصوتيين مثل سيري Siri وأليكسا Alexa معالجة الكلام والرد على استفسارات المستخدمين، وتعمل المركبات ذاتية القيادة على تتبع واكتشاف الكائنات واتخاذ القرارات أثناء القيادة، وفي قطاع الرعاية الصحية تُستخدم نماذج الذكاء الاصطناعي لاكتشاف التشوهات في الصور الطبية، بالإضافة إلى العديد من الاستخدامات الأخرى. دعونا نُطلق على هذا المجال اسم "الذكاء الاصطناعي التقليدي" أو "تعلم الآلة التقليدي" وذلك نظرًا لاستخدامه الشائع فهذا النوع من الذكاء الاصطناعي يمكنه تصنيف أو توقّع المحتوى، حيث يأخذ دخلًا وينتج خرجًا. مثلًا يمكنه تحديد ما إذا كانت الصورة (دخل) تحتوي على قطة أو كلب (أي قرار يُمثل الخرج) أو تحديد أفضل مسار إلى الوجهة (كما في تطبيقات الخرائط) أو تقدير احتمالية وجود ورم في صورة الأشعة السينية. أما الذكاء الاصطناعي التوليدي -والذي يُعتبر فرع من فروع تعلّم الآلة- فهو يستخدم الشبكات العصبية لإنشاء محتوى جديد كليًا. إذ تُدرّب هذه النماذج على مجموعات بيانات كبيرة مثل الصور ومقاطع الفيديو والصوت أو النصوص، وتكتشف الأنماط التي تُشكّل هذه الأشياء وتتعلّم منها، بالتالي يمكن لهذه النماذج بعد التدريب إنشاء محتوى جديد استنادًا إلى ما تعلمته خلال مرحلة التدريب. وتفيد نماذج الذكاء الاصطناعي التوليدي في مجالات عديدة مثل نماذج إنشاء الصور مثل DALL-E التابعة لشركة OpenAI والذي تعتمد على مجموعات ضخمة من الصور لتوليد صور جديدة، ونماذج إنشاء النصوص مثل ChatGPT التابعة لنفس الشركة الذي يولد نصوصًا جديدة بالاعتماد على مجموعات هائلة من النصوص التي دُرّب عليها. يمكن للذكاء الاصطناعي التوليدي صياغة مجموعة واسعة من أنواع المحتوى، حيث يمكن لنماذج توليد الصور إنشاء صور متنوعة أو حتى إنشاء لوحات فنية تُحاكي لوحات فنانين أو حركات فنية محددة، وبالمثل يمكن لنماذج النصوص تقليد كُتّاب معينين أو أنواع معينة من الكتابة، وهذا ما ينتج عنه نصوص فنيّة وإبداعيّة أو حتى إنشاء شيفرات برمجية في لغات برمجة متنوعة كما يفعل نموذج CodeLlama. قد يبدو الاطلاع على نماذج الذكاء الاصطناعي التوليدي لأول مرة أمرًا ساحرًا، إذ يبدو وكأنها تُخرج المحتوى المطلوب من اللاشيء. يمكن أن تطلب من نموذج توليد النصوص كتابة قصيدة أو قصة، أو من نموذج توليد الصور إنشاء لوحة فنية أو صورة، تجربة خيالية أليس كذلك؟ خذ الأمثلة التالية: أُنشئِت الصور التالية باستخدام DALL-E، وهو نموذج لتوليد الصور. طُلب من النموذج "إنشاء صورة لمدينة مزدحمة من عصر النهضة تسكنها حيوانات مجسمة". لاحظ التفاصيل المعقدة مثل الهندسة المعمارية المزخرفة والأنواع المختلفة من الحيوانات وفي أقل من دقيقة، أنتج النموذج صورتين فريدتين، لكل منهما أسلوب مميز. إن نماذج إنشاء النص لا تقل دهشة عن نماذج إنشاء الصور فقد أُنشئ النص التالي بواسطة بوت المحادثة ChatGPT، وهو نموذج لتوليد النص. طُلب من النموذج "إنشاء فقرة واحدة عن قطة منزلية تعيش في عالم ما بعد نهاية العالم" وهذا ما أنتجته: كيف تعمل نماذج الذكاء الاصطناعي التوليدي؟ ظن البشر لفترة طويلة أنهم هم وحدهم مصدر الإبداع الفني وأن كتابة القصص أو تأليف الموسيقى أو غيرها من الأعمال الإبداعية سمات إنسانيّة فريدة يصعب تكرارها أو محاكاتها. لكن أظهر الذكاء الاصطناعي التوليدي في يومنا هذا خلاف ذلك فقد تمكنت هذه النماذج من إنشاء محتوى لا يُمكن تمييزه عن المحتوى في كثير من الأحيان عن المحتوى الذي ينتجه الإنسان، وهذا يطرح سؤالًا: كيف تعمل هذه النماذج؟ إليك شرحًا مفصلًا يوضح لك آلية عملها: تُدرّب نماذج الذكاء الاصطناعي التوليدي على مجموعات بيانات كبيرة وتتعلم منها الأنماط والعلاقات بين البيانات، مثلًا يتعلم نموذج توليد النصوص العلاقات السياقية والدلالية للكلمات، بينما يتعلم نموذج توليد الصور العلاقات البصرية بين البكسلات وبعدها تستخدم النماذج هذه الأنماط التي تعلمتها لإنشاء محتوى جديد. إليك تشبيهًا مبسطًا يوضح كيف ينتقل نموذج توليد النصوص من المرحلة التدريبية إلى مرحلة الإنتاج. تخيل متدربًا يتعلم الطهي عن طريق دراسة وصفات الطهي، ولذلك يُطلب منه دراسة كتاب طهي يحتوي على مجموعة متنوعة من الوصفات التي تتدرّج في المستوى من البسيطة إلى الصعبة. يتعلّم المُتدرّب أثناء دراسته للوصفات العلاقات بين المكونات وتعليمات الطهي وكلما درس المزيد من الوصفات زادت الأنماط التي تعلّمها. وهنا يبدأ في بناء نموذج عقلي لعملية الطهي. لقد لاحظ أن ذكر "الشوكولاتة" و"السكر" غالبًا ما يتبعه عملية الخبز. ولاحظ أيضًا أن مصطلحات مثل "الغليان" غالبًا ما يتبعها مكونات مثل "الماء" أو "المعكرونة". كما يساعده معلمه أيضًا على التعلّم من خلال مطالبته بتوقّع ما سيأتي بعد ذلك في الوصفة ويتحقق المُعلّم من توقعاته ويعاقبه على الخطأ في الوصفات ويكافئه على جودتها. تعمل هذه العملية التكرارية للتوقّع والتصحيح ولعدد كبير جدًا من الوصفات، على تحسين فهمه وزيادة دقة تنبؤاته. وأخيرًا وبعد كل هذا التدريب يطرح المُعلّم تحدّيًا أخيرًا: "اصنع وصفة جديدة لكعكة الشوكولاتة". يستلهم المُتدرب من جميع الوصفات التي درسها، ومن فهمه الدقيق لعملية الطهي، لإنشاء وصفة جديدة. قد تكون الوصفة الناتجة حديثًا مستوحاة من الوصفات السابقة، ولكنها تمثل إبداعًا فريدًا من نوعه. تُدرّب نماذج الذكاء الاصطناعي التوليدية بطريقة مماثلة، وتُمنح إمكانية الوصول إلى مجموعات بيانات كبيرة مثل الصور أو مقاطع الفيديو أو الصوت أو النص، وتتعلّم الأنماط والعلاقات بين البيانات وتستخدم هذه المعرفة لإنشاء محتوى جديد. هذا بالطبع شرح مبسط بمفردات مفهومة ليساعدك على فهم كيفية عمل نماذج الذكاء الاصطناعي التوليدية، لكن العملية الفعلية أكثر تعقيدًا بالطبع وتتضمن حسابات وخوارزميات رياضيّة معقدة. ومع ذلك، يظل المبدأ الأساسي كما هو: تتعلم هذه النماذج أنماطًا من البيانات، وتستخدم هذه المعرفة لإنشاء محتوى جديد. دورة الذكاء الاصطناعي احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة. اشترك الآن المفاهيم الخاطئة حول الذكاء الاصطناعي التوليدي تظهر قدرات النماذج التوليديّة للذكاء الاصطناعي بوضوح في المحتوى الذي تنتجه، وهذا ما يؤدي في كثير من الأحيان إلى تصوّرات خاطئة حول تصميمها وقدراتها. دعونا نتناول بعض هذه الافتراضات الخاطئة. هل أصبحت نماذج الذكاء الاصطناعي التوليدية مُدركة أو واعية؟ بالطبع لا. هذه النماذج لا تُفكر ولا تشعُر وتفتقر إلى فهم للمحتوى الذي تُنتجه أو البيئة المحيط بها. إنها ليست مُدركة لذاتها أو لبيئتها المحيطة فهي تشبه آلة إنتاج الخبز ولاتتضمّن أي ترتيب هندسي أو معماري مُشابه للوعي الذاتي. وبالرغم من أن هذه النماذج تُنتج محتوى يبدو ناتجًا عن إدراك للذات إذا توفّرت له الإرشادات والمعايير الصحيحة، ولكن هذا مجرد انعكاس للبيانات التي تدرّبت عليها -بعبارة أخرى، إنها تحاكي ما تتعلمه لكنها لا تعيه ولا تدركه. هل نماذج الذكاء الاصطناعي التوليديّة خالية من التحيّز؟ لا قطعًا. تُدرّب هذه النماذج على كميات هائلة من البيانات التي أنشأها البشر. يأتي الكثير من هذه البيانات من الإنترنت، وكما نعلم فشبكة الإنترنت تتضمّن الكثير المعلومات الخاطئة والسلبية. وبما أن هذه النماذج تُدرّب على هذه البيانات، فإنها بلاشك تعكس محتواها سواءًا أكان إيجابيًّا أم سلبيًّا. وبالتالي فإن الاعتماد الكامل على هذه النماذج يشبه الثقة بالأشخاص المجهولين على الإنترنت. قد تكون المعلومات التي يقدمونها صحيحة، ولكن من الحكمة أن تكون متحفظًا على ما تستقيه منهم من معلومات. ملاحظة: يشير مصطلح التحيّز Bias في سياق الحديث عن المعلومات التي تولّدها أو تنتجها نماذج الذكاء الاصطناعي إلى فكرة ميل إجاباتها لأفكار أو منطق أو اتجاهات معينة. مثلًا، قد تُنتج النماذج المُدرّبة على نصوص تتضمّن تحيزات عنصرية أو عرقية (مثل التمييز بين البيض والسود)، إجابات عنصرية. هل نماذج الذكاء الاصطناعي التوليديّة دقيقة؟ الإجابة هي نعم ولا، ففي بعض الحالات قد تكون إجاباتها دقيقة ومحكمة، وفي بعض الأحيان قد تكون إجاباتها مُضللة وخاطئة. في الواقع هذه النماذج مُصابة بما يُسميّه الباحثون "الهلوسة"، أي أن هذه النماذج من الممكن أن تُعطيك إجابات من وحي الخيال وربما خاطئة تمامًا، لكن تُقدّمها بطريقة مُقنعة للغاية. هذا درس تعلمه بعض الأشخاص بطريقة صعبة. وبالنتيجة يجب عليك دائمًا أن تتحقق من المعلومات التي تنتجها نماذج الذكاء الاططناعي التوليدية من مصادر موثوقة. هل سيحل الذكاء الاصطناعي مكان عملي؟ في الواقع الجواب قد يكون نعم للأسف! فهذا يعتمد على مهنتك ودورك في العمل. فكما فقد الأشخاص الذين كانوا يعملون في إضاءة الشوارع وإشعال الفوانيس عند الغسق وإطفائها عند الفجر في القرن السادس عشر عملهم عند اختراع الكهرباء والمصباح الكهربائي، وكما ألغت السيارات وجود العربات التي تجرُّها الخيول، قد تلغي نماذج الذكاء الاصطناعي بعد فترة وجيزة كثيرًا من المهن الحالية لكنها بكل تأكيد ستحمل معها وظائف جديدة في ذات الوقت. قد يُقلل الذكاء الاصطناعي من حجم العمالة في بعض المهام، مما يسمح لعدد أقل من الأشخاص بإنجاز المزيد. إذًا ومما لا شك فيه سينتج الذكاء الصناعي أيضًا وظائف جديدة تتطلب مهارات جديدة، مثل مجال هندسة النصوص المُدخَلة Prompt engineering الناشئ. فقد أظهر التاريخ دائمًا أن التغيير هو الثابت الوحيد والتكيّف مع هذا التغيير المستمر هو المفتاح لمواصلة النجاح. لقد تناول هذا القسم مجرد معلومات سطحيّة فيما يتعلق بالاعتقادات الخاطئة السائدة حول الذكاء الاصطناعي التوليديّ، وسنناقش في الفقرات التالية أبرز المخاوف والتحديات المرتبطة بهذا العلم الحديث. ما هي المخاوف الأخلاقية المرتبطة بالذكاء الاصطناعي التوليدي؟ تُضخّم تقنية الذكاء الاصطناعي التوليدي لإنتاج المحتوى المعضلات الأخلاقية الحالية وتُدخل أخرى جديدة. دعونا نستكشف بعض هذه المخاوف بشكل أكبر. الأمن السيبراني يمكن استخدام نماذج الذكاء الاصطناعي التوليدي لتجاوز الاختبارات الآلية CAPTCHA وتدابير الأمان الأخرى، مما قد يؤدي في نهاية المطاف إلى زيادة في هجمات الأمن السيبراني. كما يمكن أيضًا استخدامها لإنشاء مابُسمّى بالتزييف العميق deepfakes، وهي وسائط اصطناعية (صور، فيديوهات، أصوات) تظهر وكأنها حقيقية وغير مُزيّفة، وذلك باستخدام تقنيات التعلم العميّق. قد يؤدي ذلك إلى نشر المعلومات الخاطئة وقد تُستخدم قدرة هذه النماذج على إنشاء شيفرات برمجية في مجموعة واسعة من لغات البرمجة لأداء عمليات الاختراق تلقائيًا بمساعدة الذكاء الاصطناعي. التحيّز والتمييّز ستؤدي نماذج الذكاء الاصطناعي التوليدي إلى تبني التحيزات الاجتماعية الموجودة في بيانات التدريب، مما يؤدي إلى إنتاج نتائج غير عادلة أو تمييزية، بالتالي سيؤدي إلى حلقة راجعة إن لم يُعالج، حيث تُستخدم النتائج المُتحيّزة كبيانات تدريب للنماذج المستقبلية مما يُعزز التحيّز أكثر. وبالتالي فإن استخدام الذكاء الاصطناعي التوليدي في اتخاذ قرارات تؤثر في حياة الناس، مثل السياسات العامة والتوظيف أو العدالة الجنائية، يمكن أن يؤدي إلى نتائج غير عادلة أو تمييّزية. المعلومات الخاطئة والأخبار الزائفة يمكن استخدام نماذج الذكاء الاصطناعي التوليدي لإنشاء أخبار زائفة أو دعاية أو أشكال أخرى من المعلومات على نطاق غير مسبوق. يمكن استخدام ذلك للتأثير على الرأي العام أو لتوجيه الانتخابات أو حتى لحث العنف. تتزايد هذه المخاوف عند الجمع بينها وبين التزييف العميق الذي تحدثنا عنه منذ قليل. الخصوصية يمكن تدريب النماذج المُقدمة من البائع على أي من البيانات العامة أو الخاصة أو كليهما، وقد يؤدي استخدام البيانات الخاصة في تدريب النماذج -مثل السجلات الطبية- إلى كشف هذه النماذج عن غير قصد عن معلومات حسّاسة. من ناحية أخرى يمكن استخدام البيانات العامة -مثل منشورات وسائل التواصل الاجتماعي- لاستنتاج معلومات خاصة عن الأفراد، وبالتالي انتهاك الخصوصية أو حتى الابتزاز. الملكية الفكرية يتجاوز الذكاء الاصطناعي التوليدي النظام القانوني ولايتقيّد به، وهذا ما يُثير تساؤلات حول الملكية الفكرية وحقوق المحتوى الذي يُنتجه الذكاء الاصطناعي. يُشكل ذلك قلقًا خاصًا بالنسبة لمُنشئي المحتوى الإبداعي، مثل الفنانين، والموسيقيين، والكتّاب الذين يعتمدون على إبداعاتهم الفريدة. فقدان الطابع الإنساني يُستخدم الذكاء الاصطناعي التوليدي في وقتنا الحالي بكثرة، ويستمر في استبدال بعض الوظائف التي تتضمّن تفاعلات بشرية. تحل روبوتات الدردشة الآلية حاليًا محل مُمثلي خدمة العملاء، ومن المرجح أن تستمر هذه الاتجاهات في مجالات أخرى. يمكن أن يؤدي ذلك إلى فقدان الطابع الإنساني في التفاعلات البشرية، مما قد يؤدي إلى تقليل التعاطف والشفقة. السلامة والموثوقية يثير استخدام الذكاء الاصطناعي التوليدي في التطبيقات الحيوية، مثل المركبات ذاتية القيادة وتشخيص الأمراض الطبية والتطبيقات العسكرية مخاوف حول السلامة والموثوقية. إذ يمكن أن تؤدي النتائج غير المتوقعة إلى وقوع حوادث أو إصابات أو حتى خسائر في الأرواح. لهذا يتطلب استخدام الذكاء الاصطناعي التوليدي في التطبيقات المهمة دراسة متأنية واختبارات مكثّفة لضمان سلامة مستخدميه. الشفافيّة والمساءلة غالبًا ما تكون نماذج الذكاء الاصطناعي صناديق سوداء، مما يصعب فهم كيفية عملها أو لماذا تتخذ قرارات معينة. كما تنتج هذه النماذج نتائج مختلفة لنفس المُدخلات، مما يجعل من الصعب توقّع سلوكها. وهذا يطرح تساؤلًا مهمًا من المسؤول عندما يرتكب نموذج الذكاء الاصطناعي التوليدي خطأً ما؟ وكيف يمكننا ضمان استخدام هذه النماذج بطريقة مسؤولة؟ هذه أسئلة تحتاج إلى دراسة وبحث متأنيين. هذا القسم يُلامس فقط بعض الأمور السطحية المتعلّقة بالمخاوف الأخلاقية المحيطة بالذكاء الاصطناعي التوليدي. وإدراك هذه المخاوف أمر بالغ الأهمية لفهم تأثير التقنية على حياتنا. حالات استخدام الذكاء الاصطناعي التوليدي لنستكشف بعض الصناعات وحالات الاستخدام المختلفة حيث يُطبّق الذكاء الاصطناعي التوليدي أو لديه الإمكانية للتطبيق. القطاع التقني أصبح الذكاء الاصطناعي التوليدي إضافة لا غنى عنها لسير العمل في تطوير البرمجيات. يُستخدم في إنشاء وشرح الشيفرات البرمجية والاختبارات التلقائية وتوثيقات الشيفرات البرمجية وتحديث الأنظمة القديمة. كما يُستخدم أيضًا في مجموعة من تطبيقات الأمان السيبراني مثل القرصنة الآلية واكتشاف البرامج الضارة واكتشاف التسلل واكتشاف الثغرات الأمنية. القطاع المالي يكتسب الذكاء الاصطناعي التوليدي قوته من كميات كبيرة من البيانات، مما يجعل القطاع المالي الغني بالبيانات مكانًا طبيعيًا لتطبيق الذكاء الاصطناعي التوليدي. يمكن استخدامه لأتمتة التحليل المالي وتقليل المخاطر وتحسين العمليات. يمكن أيضًا استخدامه لإنشاء محتوى مثل الملخصات وتحويل النص إلى رسوم بيانية. التجارة الإلكترونية يُستخدم الذكاء الاصطناعي التوليدي لتحسين مشاركة العملاء وكفاءة العمليات في مجال التجارة الإلكترونية. حيث يمكنه توفير معلومات فورية وحديثة حول سلوك العملاء وتفضيلاتهم، ثم استخدام هذه المعلومات لتعزيز وتحسين تجربة التسوّق الشاملة للعملاء. كذلك نستطيع استخدام تقنيات الذكاء الاصطناعي التوليدي لإنشاء روبوتات الدردشة والوكلاء الافتراضيين الذين يعملون كمُمثلين لخدمة العملاء يعملون على مدار الساعة طوال أيام الأسبوع. يمكن للذكاء الصناعي أيضًا إنتاج وتحديث أوصاف المنتج والمحتوى التسويقي. الرعاية الصحية يُطبق الذكاء الاصطناعي التوليدي على مجموعة واسعة من حالات استخدام الرعاية الصحية، بما في ذلك التصوير الطبي واكتشاف الأدوية ورعاية المرضى والتنبؤ بتطور الأمراض. يُستخدم لتحليل الصور الطبية واكتشاف الشذوذ وتوقّع تقدم الأمراض. يُستخدم أيضًا لاكتشاف أدوية وعلاجات جديدة وتحسين رعاية المرضى. التعليم يُستخدم الذكاء الاصطناعي التوليدي لأتمتة عمليات اكتشاف الانتحال وإنشاء مشاكل للتدرّب على حلّها وتقديم تغذية راجعة أو تعليقات لهم. يمكن أن يُستخدم أيضًا لإنشاء تجارب تعليميّة مُخصصة مثل المعلمين الافتراضيين وإنشاء محتوى تعليمي. هذا يؤدي إلى إمكانية حدوث تحوّل كبير في الطريقة التي يتعلم بها الطلاب ويتفاعلون مع المحتوى. صناعة السيارات يُستخدم الذكاء الاصطناعي التوليدي لتحسين تصميم المركبات وعمليات الهندسة والتصنيع وتطوير المركبات ذاتية القيادة. تستفيد شركات مثل تويوتا ومرسيدس وبي إم دبليو من الذكاء الاصطناعي لتسريع سير العمل وتحسين الإنتاجية ودفع الابتكار. الترفيه ووسائل الإعلام يمكن للذكاء الاصطناعي التوليدي أن يُحدث تحوّلًا جذريًا في صناعة الترفيه إذ يمكن استخدامه في إنشاء المحتوى النصي والموسيقى والأفلام وألعاب الفيديو. يمكن أن يعزز أشكال الترفيه الحالية ويخلق أشكالًا جديدة. إلا أنّه يثير أيضًا مخاوف أخلاقية كبيرة، مثل سوء الاستخدام وقضايا حقوق الملكية الفكرية. المجال القانوني وجد الذكاء الاصطناعي التوليدي مجموعة من التطبيقات في القطاع القانوني كمراجعة العقود والبحث القانوني. يُمكن أن يُمكّن المحترفين القانونيين من التركيّز على المهام عالية المستوى، من خلال أتمتة المهام المستهلكة للوقت والمتكررة. بالرغم من أن الذكاء الاصطناعي التوليدي يوفّر الوقت والجهد إلا أن إمكانيته لإنتاج معلومات مزيفة تتطلب اعتبارًا ورصدًا دقيقين. التخطيط العمراني للذكاء الاصطناعي التوليدي مجموعة واسعة من حالات الاستخدام في التخطيط الحضري، بما في ذلك تحسين تدفق حركة المرور وتحسين الاستعداد للكوارث وتحسين النمو المستدام وتعزيز إمكانية الوصول والسلامة في الأماكن الحضرية. واليوم تقدم شركات مثل Digital Blue Foam أدوات تعتمد على الذكاء الاصطناعي للتخطيط الحضري. الزراعة يُظهر الذكاء الاصطناعي التوليدي الكثير من الأمل في العمل الزراعي وقطاع الزراعة. يمكن استخدامه لتحسين إنتاجية المحاصيل وتقليل استخدام المبيدات الحشرية ومنع الخسائر في المحاصيل وحتى تصميم البروتينات النباتية. هذا يمكن أن يساعد في ضمان الأمن الغذائي والحد من الأثر البيئي. العلوم البيئية يُستخدم الذكاء الاصطناعي التوليدي في العلوم البيئية كنمذجة تغيّر المناخ ومكافحة التلوّث. كما يُستخدم أيضًا لتحليل البيانات البيئية والتنبؤ بالتغيرات البيئية والمساهمة بالمعلومات التي يمكن استخدامها في صياغة وتطوير السياسات البيئية. من جانب آخر هناك جانب مظلم يُسقطه الذكاء الاصطناعي التوليدي خاصة عند تدريب النماذج الكبيرة، مثل النفايات الإلكترونية واستهلاك طاقة والموارد (إذا لم تكن هذه الطاقة مأخوذة من مصادر مستدامة، قد يكون لها تأثير سلبي على البيئة) ويعتبر ذلك مصدر قلق متزايد يجب معالجته من أجل ضمان أن يكون الذكاء الاصطناعي جزءًا من مستقبل مستدام. كيف يبدو مستقبل الذكاء الاصطناعي التوليدي؟ رغم أن مستقبل التقنية المتعلق بتطوّر الذكاء الاصطناعي التوليدي غير واضح تمامًا حتى اليوم، إلا أن تقدمه الملحوظ والمستمر بما يُقدّمه من نماذج وتطبيقات جديدة يشير إلى أهمية هذا المجال وديمومته. إذ يُظهر الواقع الراهن في هذا المجال أنه يمكننا استنتاج بعض الأفكار حول اتجاهات الذكاء الاصطناعي التوليدي في المستقبل. لذلك يمكننا أن نتأمل ونبني توقعاتنا حول المسار المستقبلي المحتمل للذكاء الاصطناعي التوليدي، ونتوقع أنه سيشهد المزيد من التحسينات على النتائج التي سيولدها، فقد تمكنت نماذج النصوص والصور والصوت والفيديو بالفعل من إنتاج محتوى يشبه إلى حد كبير ما يُنتجه الإبداع البشري ويتوقع أن تزداد جودة ودقة المحتوى في المستقبل القريب. لكن هناك بعض المعوقات التي تقف في وجه هذا التطوّر، مثل التكاليف المرتفعة والمتطلبات العتاديّة التي تحد من توفر هذه النماذج وتطورها. طبعًا يمكننا استخدام نماذج أصغر وأقل قوة يمكنها أن تعمل على أجهزة محمولة معينة إلا أن ذلك يؤثر على أداءها وقوتها وتبنيها، لذا يمكننا أن نتوقع وجود توجهات تعالج هذه القضايا كتصميم الأجهزة والنماذج بطريقة تجعل الوصول أكثر انتشارًا وأوسع نطاقًا. من ناحية أخرى يُرجّح أن يصبح الذكاء الاصطناعي التوليدي أكثر تفاعلية، وذلك من خلال استجابة النماذج لتعليقات المستخدمين والتكيّف مع تفضيلاتهم وحتى التعلّم من تفاعلاتهم معها. يتيح ذلك تجارب أكثر تخصيصًا ونماذج تلبي التفضيلات الشخصيّة كما يساهم في تغيير الطريقة التي نتفاعل بها مع البرامج والخدمات، حيث تصبح التفاعلات اللغوية هي القاعدة. تُنشأ حاليًا أنواع مختلفة من المحتوى (كالفيديو والنص) وكل منها تُنتج بسرعات متفاوتة، حيث يظهر النص كأحد أسرع الأشكال، بينما يتطلب الفيديو وقتًا أطول. وهذا يُشير إلى احتمالية ظهور تطبيقات جديدة وفريدة لاسيما عندما تكون نماذج الذكاء الاصطناعي التوليدي قادرة على إنشاء محتوى في الزمن الحقيقي. يُعتبر دمج الذكاء الاصطناعي التوليدي من ناحية أخرى في محركات ألعاب الفيديو فكرة رائعة لتعزيز الانغماس والتفاعل مع الألعاب. يمكن لبيئات اللعبة أن تولّد عوالمًا كاملةً ديناميكيًا مع إمكانيّة تعديلها بناءً على سلوك اللاعب، كما يمكن لشخصيات الألعاب الافتراضية التي تشبه الأفراد الحقيقيين لحدٍ ما، أن تُقدم للاعبين تفاعلات فريدة من نوعها وهذا الخروج عن الأساليب التقليديّة يمكن أن يحوّل صناعة الألعاب ويجعلها أكثر تميّزًا. ومن ناحية التعليّم والتعلّم، قد تظهر أساليب جديدة ومبتكرة تتضمن تفاعل الطلاب مع معلمين رقمييّن يلبون أساليب التعلّم المُخصصة والقابلة للتكيّف مع حاجات الطلاب. هناك إمكانية للطلاب لإجراء محادثات مع تجسيدات افتراضية لشخصيات تاريخية، كما ستتاح إمكانية توفير المعلومات بتنسيقات متنوعة، مثل النص أو الصوت أو الفيديو، وذلك اعتمادًا على التفضيلات الشخصية وبهذا يمكن للطالب اختيار طريقة التعلم التي تناسبه. ستوفر التطورات في الواقع المعزز Augmented reality والواقع الافتراضي Virtual reality طرقًا جديدة للذكاء الاصطناعي التوليدي، حيث من المرجّح أن يصبح كل من الواقع المعزز والواقع الافتراضي أكثر واقعية وانتشارًا، وذلك بفضل قدرات نماذج الذكاء الاصطناعي التوليدي على إنشاء محتوى في الزمن الحقيقي ويؤدي إلى توفير أشكال جديدة من الترفيه والفنون، مثل الأفلام التفاعلية. وفي الختام يمكننا القول أن جودة بيانات التدريب قد تكون العامل المُميّز بين النماذج. قد يتحوّل دور مُنشئي المحتوى التقليدي نحو إنشاء بيانات التدريب وتنظيمها والحفاظ عليها فالحفاظ على بيانات التدريب حديثة وذات صلة بالمجال المُحدّد يمكن أن يضمن بقاء المحتوى المُنشأ ديناميكيًا ودقيقًا وحديثًا. ومن المرجح أن تصبح بيانات التدريب عالية الجودة هي الميزة التنافسية بين نماذج الذكاء الاصطناعي التوليدي المختلفة. خاتمة تعرفت في مقال اليوم على الذكاء الاصطناعي التوليدي أحد أكثر مجالات الذكاء الاصطناعي السائدة في يومنا هذا والآخذة بالتطور المستمر، والتي بدأت تغير الطريقة التي نتفاعل بها مع البرامج والخدمات. بالطبع لا تزال هذه التقنية في مهدها ولازال هناك العديد من الأسئلة والمخاوف الأخلاقية المرتبطة بها والتي لم توضع لها أجوبة نهائية، لكن هناك شيء واحد يمكننا القول أنه مؤكد وهو أن الذكاء الاصطناعي موجود ليبقى ويُرجّح أن يصبح أكثر انتشارًا في حياتنا اليومية ومن الواجب علينا أن نعي تأثيرات صعود الذكاء الاصطناعي التوليدي ونفهم هذه التقنية وقدراتها ونستغلها بطريقة نافعة. ترجمة -وبتصرُّف- للمقال Introduction to Generative AI لصاحبه Ben Lambert. اقرأ أيضًا أنواع الذكاء الاصطناعي دليل استخدام ChatGPT API لتحسين خدماتك عبر الإنترنت دليلك لربط واجهة OpenAI API مع Node.js برمجة الذكاء الاصطناعي: بناء مستقبل الآلات الذكية
    1 نقطة
  33. مرحبا! توجد مشكلتان رئيسيتان في الكود الذي كتبته: في الحلقة الداخلية، المتغيّر j يتقدم بـ4 كل مرّة، وهذا يجعله يقفز فوق العديد من الأسماء بدون أن يتم اختبارها أساسا. عمليّة المقارنة في الاختبار الموجود في الحقلة الداخليّة تقارن أسماء المدراء بالموظفين مباشرة ولا تقارن الحروف الأولى. لذلك فالمقارنة ستكون دائما خاطئة إلا في حالة ما كان اسم الموظف مطابقا لاسم المدير (وهذا ما ليس موجودا في المثال). لمقارنة الحرف الأول بين الاسمين ما عليك إلا استخدام .charAt(0) على كل واحد منهما ومقارنة تطابقهما كما تفعل. باختصار، الكود بعد التصحيح هو هذا (أضفت بعض التصحيحات الخفيفة الأخرى): let myAdmins = ["Ahmed", "Osama", "Sayed", "Stop", "Samera"]; let myEmployees = ["Amgad", "Samah", "Ameer", "Omar", "Othman", "Amany", "Samia", "Anwar"]; let admins3 =3; document.write(`<div>We Have ${admins3} Admins</div>`); document.write("<div>"); for (let i = 0; i < myAdmins.length ; i++){ document.write(`<p>${"_".repeat(25)}<p/>`) if(myAdmins[i] === 'Stop'){ break; } document.write(`<p>The Admin For Team ${i + 1} is ${myAdmins[i]}</p>`) document.write("<h3>Team Members :</h3>") for (let j = 0; j < myEmployees.length; j++ ) { if (myAdmins[i].charAt(0) === myEmployees[j].charAt(0)) { document.write(`<p>${j + 1} - ${myEmployees[j]}</p>`) } } } document.write("</div>") النتيجة:
    1 نقطة
  34. اللغات المصرفة (Compiled) واللغات المفسرة (Interpreted) تندرج لغات البرمجة تحت صنفين اثنين: إما مُصرَّفة (compiled) أو مُفسَّرة (interpreted)، فيعني المصطلح لغة مُصرَّفة (compiled) ترجمة البرامج إلى لغة الآلة (machine language) لينفذها العتاد (hardware)، أما مصطلح لغة مُفسَّرة (interpreted) فيعني وجود برنامج يدعى «المفسِّر» (interpreter) يقرأ البرامج وينفذها مباشرةً وآنيًا . تُعَد لغة البرمجة C على سبيل المثال لغة مُصرَّفة (compiled) عادًة، بينما تُعَد لغة Python لغة مُفسَّرة (interpreted)، لكنّ التمييز بين المصطلحين غير واضح دائمًا حيث: أولًا يمكن للغات البرمجة المُفسَّرة أن تكون مُصرَّفة والعكس صحيح، فلغة C مثلًا هي لغة مصرَّفة ولكن يوجد مفسِرات لها تجعلها لغة مفسَّرةً أيضًا والأمر مماثل للغة Python المفسَّرة التي يمكن أن تكون مصرَّفة أيضًا. ثانيًا توجد لغات برمجة، جافا (Java) مثلًا، تستخدم نهجًا هجينًا (hybrid approach) يجمع بين التصريف والتفسير، حيث يبدأ هذا النهج بترجمة البرنامج إلى لغة وسيطة (intermediate language) عبر مصرِّف ثم تنفيذ البرنامج عبر مُفسِّر. تَستخدم لغة Java لغةً وسيطةً (intermediate language) تُدعى جافا بايتكود Java bytecode شبيهة بلغة الآلة، لكنها تُنفَّذ باستخدام مُفسِّر برمجيات يدعى بآلة جافا الافتراضية (Java virtual machine وتختصر إلى JVM). وسم لغة البرمجة بكونها لغة مفسَّرة أو مصرَّفة لا يكسبها خاصية جوهرية، على كل حال توجد اختلافات عامة بين اللغتين المُصرَّفة والمُفسَّرة. الأنواع الساكنة (Static Types) تدعم العديد من اللغات المُفسَّرة الأنواع الديناميكية (Dynamic Types)، وتقتصر اللغات المُصرَّفة على الأنواع الساكنة (Static Types). فيمكن في اللغات ساكنة النوع معرفة أنواع المتغيرات بمجرّد قراءة شيفرة البرنامج أي تكون أنواع المتغيرات محدَّدة قبل تنفيذ البرنامج، بينما تكون أنواع المتغيرات في اللغات التي توصف بأنها ديناميكية النوع غير معروفة قبل التنفيذ وتحدد وقت تنفيذ البرنامج. ويشير مصطلح ساكن (Static) إلى الأشياء التي تحدث في وقت التصريف (Compile time) (أي عند تصريف شيفرة البرنامج إلى شيفرة التنفيذ)، بينما يشير مصطلح Dynamic إلى الأشياء التي تحدث في وقت التشغيل (run time) (أي عندما يُشغَّل البرنامج). يمكن كتابة الدالة التالية في لغة Python على سبيل المثال: def add(x, y): return x + y لا يمكن معرفة نوع المتغيرين y وx بمجرد قراءة الشيفرة السابقة حيث لا يحدَّد نوعهما حتى وقت تنفيذ البرنامج، لذلك يمكن استدعاء هذه الدالة عدة مرات بتمرير قيمة بنوع مختلف إليها في كل مرة، وستعمل عملًا صحيحًا ما دام نوع القيمة المُمرَّرة إليها مناسبًا لتطبيق عملية الجمع عليها، وإلا سترمي الدالة اعتراضًا (exception) أو خطأً وقت التشغيل. يمكن كتابة نفس الدالة السابقة في لغة البرمجة C كما يلي: int add(int x, int y) { return x + y; } يتضمّن السطر الأول من الدالة تصريحًا واضحًا وصريحًا بنوعي القيمتين التي يجب تمريرهما إلى الدالة ونوع القيمة التي تعيدها الدالة أيضًا، حيث يُصرَّح عن y وx كأعداد صحيحة (integers)، وهذا يعني أنه يمكن التحقق في وقت التصريف (compiled time) فيما إذا كان مسموحًا استخدام عامل الجمع مع النوع integer أم لا (إنه مسموح حقًا)، ويُصرَّح عن القيمة المُعادة كعدد صحيح (integer) أيضًا. وعندما تُستدعى الدالة السابقة في مكان آخر من البرنامج يستطيع المصرِّف (compiler) باستخدام التصريحات أن يتحقق من صحة نوع الوسطاء (arguments) الممررة للدالة، ومن صحة نوع القيمة التي تعيدها الدالة أيضًا. يحدث التحقق في اللغات المصرَّفة قبل بدء تنفيذ البرنامج لذلك يمكن إيجاد الأخطاء باكرًا، ويمكن إيجاد الأخطاء أيضًا في أجزاء البرنامج التي لم تُشغَّل على الإطلاق وهو الشيء الأهم. علاوًة على ذلك لا يتوجب على هذا التحقق أن يحدث في وقت التشغيل (runtime)، وهذا هو أحد الأسباب التي تجعل تنفيذ اللغات المُصرَّفة أسرع من اللغات المُفسَّرة عمومًا. يحافظ التصريح عن الأنواع في وقت التصريف (compile time) على مساحة الذاكرة في اللغات ساكنة النوع أيضًا، بينما تُخزَّن أسماء المتغيرات في الذاكرة عند تنفيذ البرنامج في اللغات ديناميكية النوع التي لا تحوي تصريحات واضحة لأنواعها وتكون أسماء هذه المتغيرات قابلة للوصول من قبل البرنامج. توجد دالة مبنيّة مسبقًا في لغة Python هي locals، تعيد هذه الدالة قاموسًا (dictionary) يتضمن أسماء المتغيرات وقيمها. ستجد تاليًا مثالًا عن مفسِّر Python: >>> x = 5 >>> print locals() {'x': 5, '__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, '__package__': None} يبيّن المثال السابق أنه يُخزَّن اسم المتغير في الذاكرة عند تنفيذ البرنامج (مع بعض القيم الأخرى التي تُعَد جزءًا من بيئة وقت التشغيل الافتراضية). بينما تتواجد أسماء المتغيرات في اللغات المُصرَّفة في الذاكرة في وقت التصريف (compile time) ولا تتواجد في وقت التشغيل (runtime). حيث يختار المصرّف موقعًا في الذاكرة لكل متغير ويسجل هذه المواقع كجزء من البرنامج المُصرَّف (سنتطرّق إلى مزيد من التفاصيل عن ذلك لاحقًا). يدعى موقع المتغير في الذاكرة عنوانًا (address) حيث تُخزَّن قيمة كل متغير في عنوانه، ولا تُخزَّن أسماء المتغيرات في الذاكرة على الإطلاق في وقت التشغيل (ولكن هذا شيء اختياري للمصرف فيمكن أن يضيف المصرِّف (compiler) أسماء المتغيرات إلى الذاكرة في وقت التشغيل بهدف تنقيح الأخطاء (debugging)، أي لمعرفة أماكن تواجد الأخطاء في البرنامج). عملية التصريف (The compilation process) يجب أن يفهم المبرمج فهمًا تامًا ما يحدث خلال عملية التصريف (compilation)، فإذا فُهِمت هذه العملية جيدًا سيساعد ذلك في تفسير رسائل الخطأ وتنقيح الأخطاء في الشيفرة وأيضًا في تجنُّب الزلات الشائعة. للتصريف خطوات هي: المعالجة المسبقة (Preprocessing): تتضمن لغة البرمجة C موجِّهات معالجة مسبقة (preprocessing directives) والتي تدخل حيز التنفيذ قبل تصريف البرنامج، فمثلًا يسبّب الموجِّه ‎#include إدراج شيفرة مصدرية (source code) خارجية موضع استعماله. التحليل (Parsing): يقرأ المُصرِّف (compiler) أثناء هذه الخطوة الشيفرة المصدرية (source code) ويبني تمثيلًا داخليًّا internal) (representation للبرنامج يُدعى بشجرة الصيغة المجردة (abstract syntax tree). تُسمى عادًة الأخطاء المكتشفة خلال هذه الخطوة بأخطاء صياغية (syntax errors). التحقق الساكن (Static checking): يتحقق المصرِّف من صحة نوع المتغيرات والقيم وفيما إذا اُستدعيت الدوال بعدد ونوع وسطاء صحيحين وغير ذلك من التحققات. يُدعى اكتشاف الأخطاء في هذه الخطوة أحيانًا بالأخطاء الدلالية الساكنة (static semantic errors). توليد الشيفرة (Code generation): يقرأ المصرِّف التمثيل الداخلي (internal representation) للبرنامج ويولّد شيفرة الآلة (machine code) أو الشيفرة التنفيذية (byte code) للبرنامج. الربط (Linking): إذا استخدم البرنامج قيمًا ودوالًا مُعرَّفة في مكتبة، فيجب أن يجد المُصرِّف المكتبة المناسبة وأن يُضمِّن (include) الشيفرة المطلوبة المتعلقة بتلك المكتبة. التحسين (Optimization): يحسّن المصرف دومًا خلال عملية التصريف من الشيفرة ليصبح تنفيذها أسرع أو لجعلها تستهلك مساحةً أقل من الذاكرة. معظم هذه التحسينات هي تغييرات بسيطة توفر من الوقت والمساحة، ولكن تطبِّق بعض المُصرِّفات (compilers) تحسيناتٍ أعقد. ينفذ المصرف كل خطوات التصريف ويولّد ملفًا تنفيذيًا (executable file) عند تشغيل الأداة gcc. المثال التالي هو شيفرة بلغة C: #include <stdio.h> int main() { printf("Hello World\n"); } إذا حُفِظت الشيفرة السابقة في ملف اسمه hello.c فيمكن تصريفها ثم تشغيلها كما يلي: $ gcc hello.c $ ./a.out تخزّن الأداة gcc الشيفرة القابلة للتنفيذ (executable code) في ملف يدعى افتراضيًا a.out (والذي يعني في الأصل خرج مُجمَّع (assembler output)). ينفذ السطر الثاني الملف التنفيذي، حيث تخبر البادئة ‎./‎ الصدفة (shell) لتبحث عن الملف التنفيذي في المجلّد (directory) الحالي. من الأفضل استخدام الراية ‎-o لتوفير اسم أفضل للملف التنفيذي، حيث يُعطى الملف التنفيذي الناتج بعد عملية التصريف اسمًا افتراضيًا (a.out) بدون استخدام الراية ‎-o، ولكن يُعطى اسمًا محددًا باستخدام الراية ‎-o كما يلي: $ gcc hello.c -o hello $ ./hello التعليمات المُصرَّفة (Object code) تخبر الراية ‎-c الأداة gcc بأن تصرِّف البرنامج وتولّد شيفرة الآلة (machine code) فقط، بدون أن تربط (link) البرنامج أو تولّد الملف التنفيذي. $ gcc hello.c -c النتيجة هي توليد ملف يُدعى hello.o، حيث يرمز حرف o إلى object code وهو البرنامج المُصرّف. والتعليمات المُصرَّفة (object code) غير قابلة للتنفيذ لكن يمكن ربطها بملف تنفيذي. يقرأ الأمر nm في UNIX ملف التعليمات المُصرَّفة (object file) ويولّد معلومات عن الأسماء التي يُعرِّفها ويستخدمها الملف، فمثلًا: $ nm hello.o 0000000000000000 T main U puts يشير الخرج السابق إلى أن hello.o يحدد اسم التابع الرئيسي main ويستخدم دالة تدعى puts، والتي تشير إلى (put string). وتطّبق gcc تحسينًا (optimization) عن طريق استبدال printf (وهي دالة كبيرة ومعقدة) بالدالة puts البسيطة نسبيًا. يمكن التحكم بمقدار التحسين الذي تقوم به gcc مع الراية ‎-O، حيث تقوم gcc بإجراء تحسينات قليلة جدًا افتراضيًا مما يجعل تنقيح الأخطاء (debugging) أسهل. بينما يفعّل الخيار ‎-O1 التحسينات الأكثر شيوعًا وأمانًا، وإذا استخدمنا مستويات أعلى (أي O2 وما بعده) فستفعِّل تحسينات إضافية، ولكنها تستغرق وقت تصريف أكبر. لا ينبغي أن يغير التحسين من سلوك البرنامج من الناحية النظرية بخلاف تسريعه، ولكن إذا كان البرنامج يحتوي خللًا دقيقًا (subtle bug) فيمكن أن تحمي عملية التحسين أثره أو تزيل عملية التحسين هذا الخلل. إيقاف التحسين فكرة جيدة أثناء مرحلة التطوير عادةً، وبمجرد أن يعمل البرنامج ويجتاز الاختبارات المناسبة يمكن تفعيل التحسين والتأكد من أن الاختبارات ما زالت ناجحة. الشيفرة التجميعية (Assembly code) تتشابه الرايتان ‎-S و‎-c، حيث أن الراية ‎-S تخبر الأداة gcc بأن تصرف البرنامج وتولد الشيفرة التجميعية (assembly code), والتي هي بالأساس نموذج قابل للقراءة تستطيع شيفرة الآلة (machine code) قراءته. $ gcc hello.c -S ينتج ملف يدعى hello.s والذي يبدو كالتالي .file "hello.c" .section .rodata .LC0: .string "Hello World" .text .globl main .type main, @function main: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl $.LC0, %edi call puts movl $0, %eax popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size main, .-main .ident "GCC: (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3" .section .note.GNU-stack,"",@progbits تُضبَط gcc عادةً لتولد الشيفرة للآلة التي تعمل عليها، ففي حالتي، يقول المؤلف، وُلِّدت شيفرة لغة آلة لمعمارية x86 للمعالجات والتي يمكن تنفيذها على شريحة واسعة من معالجات Intel ومعالجات AMD وغيرهما وفي حال استهداف معمارية مختلفة، فستولد شيفرة أخرى مختلفة عن تلك التي تراها الآن. المعالجة المسبقة (Preprocessing) يمكن استخدام الراية ‎-E لتشغيل المعالج المُسبق (preprocessor) فقط بدون الخطوات الأخرى من عملية التصريف: $ gcc hello.c -E سينتج خرج من المعالج المسبق فقط. يحتوي المثال السابق تلقائيًا على الشيفرة المُضمَّنة (included code) المبنية مسبقًا والمتعلقة بالمكتبة stdio.h المذكورة في بداية البرنامج، وبالتالي يتضمن كل الملفات المُضمَّنة المتعلقة بتلك المكتبة، وكل الملفات الفرعية التابعة للملفات السابقة والملفات الموجودة في الملفات الفرعية أيضًا وهكذا. فعلى حاسوبي، يقول المؤلف، وصل العدد الإجمالي للشيفرة الإجمالية المضمنة إلى 800 سطر، ونظرًا أن كل برنامج C يتضمّن ملف الترويسات stdio.h تقريبًا، لذلك تُضمَّن تلك الأسطر في كل برنامج مكتوب بلغة C. وتتضمّن العديد من برامج C المكتبة stdlib.h أيضًا، وبالتالي ينتج أكثر من 1800 سطر إضافي من الشيفرة يجب تصريفها جميعًا. فهم الأخطاء (Understanding errors) أصبح فهم رسائل الخطأ أسهل بعد معرفة خطوات عملية التصريف، فمثلًا عند وجود خطأ في الموجّه ‎#include ستصل رسالة من المعالج المسبق هي: hello.c:1:20: fatal error: stdioo.h: No such file or directory compilation terminated. أما عند وجود خطأ صياغي (syntax error) متعلق بلغة البرمجة، ستصل رسالة من المُصرِّف (compiler) هي: hello.c: In function 'main': hello.c:6:1: error: expected ';' before '}' token عند استخدام دالة غير معرَّفة في المكتبات القياسية ستصل رسالة من الرابط (linker) هي: /tmp/cc7iAUbN.o: In function `main': hello.c:(.text+0xf): undefined reference to `printff' collect2: error: ld returned 1 exit status ld هو اسم رابط UNIX ويشير إلى تحميل (loading)، حيث أن التحميل هو خطوة أخرى من عملية التصريف ترتبط ارتباطًا وثيقًا بخطوة الربط (linking). تجري لغة C تحققًا سريعًا جدًا ضمن وقت التشغيل بمجرد بدء البرنامج، لذلك من المحتمل أن ترى بعضًا من أخطاء وقت التشغيل (runtime errors) فقط وليس جميعها، مثل خطأ القسمة على صفر (divide by zero)، أو تطبيق عملية عدد عشري غير مسموحة وبالتالي الحصول على اعتراض عدد عشري (Floating point exception)، أو الحصول على خطأ تجزئة (Segmentation fault) عند محاولة قراءة أو كتابة موقع غير صحيح في الذاكرة. ترجمة -وبتصرّف- للفصل Compilation من كتاب Think OS A Brief Introduction to Operating Systems
    1 نقطة
  35. أهلًا @عادل المالكي، بالنسبة لكلمة تصريف، فقد اخترناها ترجمةً للمصطلح الأجنبي compilation، ومصرِّف compiler، وبحسب قاموس صخر: والتصريف هو التبديل والتحويل، وبلغة البرمجة، هو التبديل والتحويل من لغة البرمجة عالية المستوى إلى لغة الآلة منخفضة المستوى وهذا ما يفعله المصرِّف تمامًا. بالنسبة لكلمة مفسَّرة ومفسِّر فهي الترجمة المقابلة للمصطلح الأجنبي interpreter المختلف عن سابقه بالطريقة والأسلوب والمتشابهة معه بالنتيجة أي تحويل لغة البرمجة عالية المستوى إلى لغة الآلة. وبحسب قاموس صخر أيضًا، فالتفسير هو كشف المعاني والتأويل وهو ما يفعله المفسر من تأويل للشيفرة وشرحها للآلة لكي تنفذها. لقد حاولنا اختيار الترجمة بدقة وأرجو أن نكون قد وُفقنا في ذلك. أشكرك،
    1 نقطة
×
×
  • أضف...