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

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

  1. Ali Ahmed55

    Ali Ahmed55

    الأعضاء


    • نقاط

      59

    • المساهمات

      1787


  2. محمد عاطف17

    محمد عاطف17

    الأعضاء


    • نقاط

      39

    • المساهمات

      5469


  3. Mustafa Suleiman

    Mustafa Suleiman

    الأعضاء


    • نقاط

      35

    • المساهمات

      15195


  4. Marwan Elatta

    Marwan Elatta

    الأعضاء


    • نقاط

      17

    • المساهمات

      21


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

عرض المحتوى الحاصل على سمعة أكبر منذ 03/12/25 في كل الموقع

  1. السلام عليكم هو ازي اقدر احديد نطاق معين من الاعمد مثل من x_1 الي x_10 بستخدم loc ؟
    4 نقاط
  2. السلام عليكم هو اي الفرق مابين pandas.drop() , pandas.dropna() ؟
    4 نقاط
  3. السلام عليكم هو عادي ان يكون الtrain_labels 5 اعمده فقط ولكن الvalidation_labels بيتكون من 123 عمود ؟
    4 نقاط
  4. السلام عليكم ورحمة الله وبركاته فيه استفسار مالقيت له جواب واضح ومقلقني صراحة، الان قاعدة البيانات mysql أو غيرها، أنا فرضا صلحت برنامج متجر ألكتروني وأبغى قاعدة البيانات تكون عندي على الجهاز يعني البيانات(كم اسماء المنتجات عددها اسعارها وكل عملية داخل التطبيق) تتخزن على الهاردسك حق اللاب توب حقي، كيف الطريقة وهل بالامكان كذا. الله يعطيكم العافية على جهودكم
    4 نقاط
  5. السلام عليكم هو مش الarray دي كده عبار عن Static Array في الباثيون ؟ دي array = [1,2,3,4,5]
    4 نقاط
  6. السلام عليكم هو اي الفرق مابين Face Recognition - Face Verification ؟
    4 نقاط
  7. السلام عليكم. بعد تصحيح الأخطاء ومراجعة التحذيرات تظهر الرسالة التالية . مرفق صور الجداول المذكورة SELECT * FROM _user_groups WHERE `ID` = ? ORDER BY ID ASC LIMIT 0, 1 SELECT * FROM _setting_admin WHERE `var` = ? LIMIT 0, 1
    3 نقاط
  8. with the rise of Deepseek and manus , it seems that it will replace every data scientist | AI including mine, sould I still keep going?
    3 نقاط
  9. السلام عليكم تضهر معي مشكلة عند رفع الملفات على منصة GitHup يضهر معي هذا الخطاء الخطاء يضهر ان الملفات تزيد عن 100ميجابايت بالرغم من استخدامي لملف .gitignore.txt ومحتوياته # Logs logs *.log npm-debug.log* yarn-debug.log* yarn-error.log* pnpm-debug.log* lerna-debug.log* node_modules/ node_modules dist dist/ dist-ssr *.local # Editor directories and files .vscode/* !.vscode/extensions.json .idea .DS_Store *.suo *.ntvs* *.njsproj *.sln *.sw?
    3 نقاط
  10. السلام عليكم هو اي الفرق مابين sns.shistplot و بين plt.hist من حيث التعامل مع القيمه الinf , -inf ؟
    3 نقاط
  11. السلام عليكم ورحمه الله وبركاته انا وصلت ل حد كورس الرؤية الحاسوبية هل بقدر ادرس حاليا كورس التعلم العميق وبعدين ارجع للترتيب؟ ولا لا لانو كلو معتمد ع بعضو لانو انا هاد الفصل بالجامعة منزلة مادة تعلم عميق ف بدي استفيد من كورس التعلم العميق
    3 نقاط
  12. السلام عليكم هل المشكلة في الصياغة أم هنالك ملف ناقص، لأن جميع الملفات تبدو مكتملة في ال directory Fatal error: Uncaught Error: Call to undefined function Illuminate\Filesystem\join_paths() in /home/vol17_1/infinityfree.com/if0_38415802/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:595 Stack trace: #0 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(393): Illuminate\Foundation\Application->joinPaths('$basePath', 'app') #1 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(367): Illuminate\Foundation\Application->basePath('app') #2 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(338): Illuminate\Foundation\Application->path() #3 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(326): Illuminate\Foundation\Application->bindPathsInContainer() #4 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(201): Illuminate\Foundation\Application->setBasePath('$basePath') #5 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/bootstrap/app.php(14): Illuminate\Foundation\Application->__construct('/home/vol17_1/i...') #6 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/public/index.php(38): require_once('/home/vol17_1/i...') #7 {main} thrown in /home/vol17_1/infinityfree.com/if0_38415802/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Application.php on line 595
    3 نقاط
  13. السلام عليكم هو انا ازي اقدر اي انفيذ الPriority Queues في Python ؟ وليه تنفذ هياكل البيانات اسهل في باثيون عني اي لغه برمجه تاني ؟
    3 نقاط
  14. أحتاج إلى مساعدة ممن لديه خبرة عندما ؤحاول تشغيل اللابتوب الخاص بي يعرض لي ھذھ الشاشة لا أدري ما السبب فى ذاك أرجو مساعدتكم وشكرا
    3 نقاط
  15. السلام عليكم هو اي الفرق مابين One-hot Encoding و Embedding Layer ؟
    3 نقاط
  16. السلام عليكم هو انا ازي اقدر اتعلم مكتبه بنفسي من مكتاب باثيون ؟
    2 نقاط
  17. السلام عليكم ورحمة الله وبركاته لدي جهاز msigf63 عندما يصل شحن 45% ينطفي لكن عندما يكون في شحن لا ينطفي غيريت بطارية لاب توب ونظفت مرواحه وغيرت معجون لازالت نفس مشكلة ما الحل للعلم لازال صوت مروحه مستمر
    2 نقاط
  18. انا مستخدم Safari لم اجد في اعدادات المتصفح خيارات أخرى
    2 نقاط
  19. ومع ذلك لم يتغير لون الكلام
    2 نقاط
  20. ليس هنالك خطأ. لكن الموقع لا يفتح وتظهر هذه الرسالة. الموضع الذي وجدت به ;echo $query في ملف class-db.php هو التالي، وعندما اقوم بحذفه يحذف الاستعلام ولكن تبقى الصفحة فارغة ولا تنتقل الى صفحة الموقع: public function prepare( $query, $generic = false ){ echo $query; $run = parent::prepare( $query ); $this->__log(array( "query" => $query, "__cf" => "prepare", "safe" => 1, "generic" => $generic ? 1 : 0, )); return $run; }
    2 نقاط
  21. السلام عليكم هو حفظ الصور بستخدم الداله دي cv2.imwrite() افضل من الداله دي plt.savefig() من حيث جود الصور والدقه ؟
    2 نقاط
  22. السلام عليكم كيف استطيع معرفة الـ ID المقصود Fatal error: Uncaught mysqli_sql_exception: Unknown column 'ID' in 'where clause' in /home/vol17_1/infinityfree.com/if0_38415802/htdocs/app/core/class_db.php:95 Stack trace: #0 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/app/core/class_db.php(95): mysqli->prepare('SELECT * FROM _...') #1 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/app/core/class_db.php(222): db->prepare('SELECT * FROM _...', true) #2 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/app/core/class_db.php(126): db->_query(Array) #3 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/app/core/class_user.php(693): db->_select(Array) #4 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/app/core/class_user.php(716): user->group_select(Array) #5 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/app/core/class_user.php(1090): user->get_group_data(5) #6 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/app/core/class_user.php(635): user->get_access(false) #7 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/app/core/class_user.php(443): user->get_data(Array) #8 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/app/core/class_visitor.php(30): user->data(Array) #9 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/app/core/class_visitor.php(38): visitor->user() #10 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/app/core/class_loader.php(143): visitor->set_access() #11 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/app/loader.php(24): loader->_check_user_request() #12 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/index.php(6): require_once('/home/vol17_1/i...') #13 {main} thrown in /home/vol17_1/infinityfree.com/if0_38415802/htdocs/app/core/class_db.php on line 95
    2 نقاط
  23. السلام عليكم لقد سمعت الكثير من الناس يقولون أنه يجب على كل شخص قبل البدء بتعلم Laravel أن يكون محترف بPHP وأن يكون قد نفذ العديد من المشاريع فيها ويعرف جميع المفاهيم فيها. وقسم آخر من الناس بقول انه لا يلزمك من الPHP سوى ال syntax والأساسيات والOOP وما تبقى الجهد الأكبر يكون في تنفيذ مشاريع Laravel. أريد معرفة أيهم الصحيح وهل علي احتراف php وتنفيذ بعض المشاريع فيها قبل البدء ب laravel أم يكفي معرفة اساسيات الphp مع oop والانتقال فورا لتعلم Laravel وتنفيذ مشاريع بال laravel؟ في الواقع لقد وجدت دورة على اليوتيوب مكونة من 280 فيديو بمجموع 50 ساعة لتعليم pure php وأنا متردد بأخذ الخطوة هل علي البدء بها وإعطائها كل هذا الوقت والجهد أم أنه لا داعي لذلك واترك الوقت والجهد لحين مشاريع laravel؟ علما ان الهدف من تعلم المسار كاملا هو للدخول في سوق العمل ولو بشكل مبدأي وليس الهدف القيام بمشروع جامعي او شغل مؤقت. شكرا لكم.
    2 نقاط
  24. السلام عليكم. لاحظت أن بعض مشاريع next.js تعتمد على express.js في بناء الواجهة الخلفية. ماجدوى هذا الخيار خاصة وأن next.js يوفر خادما. أو بالأحرى إن كان next.js يوفر خادما لماذا يتم اللجوء إلى خادم خارجي وهل ذلك يؤثر قوة التطبيق. أم من الأفضل إستخدام خادم خارجي مع رياكت خاصة بعد التحديثات التي حصلت مؤخرا. شكرا لكم.
    2 نقاط
  25. ماسبب ظهور هذه المشكلة عند محاولة تشغيل الخادم ؟
    2 نقاط
  26. السلام عليكم اواجه مشكلة في حل مسألة "Zero array transformation" من موقع "LeetCode" في الحقيقة انا اعددت الخوارزمية و طبقت الحل و الننائج كانت مطابقة و صحيحة , ولكن عند تمرير الكود لمحرر الأكواد الخاص بموقع "LeetCode" , فإنه يظهر لي خطأ من نوع "Time Limit Exceeded". - كيف استطيع تخطي هذه المشكلة ؟ - هل الكود الخاص بي جيد ووصلت الى الحل ؟ رابط المسألة للمراجعة : https://leetcode.com/problems/zero-array-transformation-ii/description/ مع الكود الخاص بي مرفقا في الملف. test.py
    2 نقاط
  27. السلام عليكم هو اي التحذير ده ؟
    2 نقاط
  28. التعلم العميق يأتي في الدورة بعد تعلم الآلة لأنه فرع متقدم منه ويستند إلى مفاهيمه الأساسية، ولا مشكلة في تخطي مسار تعلم الآلة لكن بشرط أن دراسة جزء منه لتكوين خلفية أساسية، فالتعلم العميق يعتمد على مفاهيم كالتدرج التنازلي Gradient Descent، دوال الخسارة Loss Functions، والشبكات العصبية Neural Networks، التصنيف Classification، الانحدار Regression، ويجب الإلمام بتلك المفاهيم، لتجنب صعوبة الاستيعاب في البداية. لذا تحتاجين دراسة غالب مسار تعلم الآلة حتى قسم "تقييم نماذج التصنيف Models Evaluation" وما بعده هو اختياري وتستطيعي تجاوزهم والإنتقال للتعلم العميق، لكن عليكِ العودة ودراستهم. وفي حال الوقت ضيق لديكِ، فركزي على دراسة الأقسام التالية فقط: الانحدار لفهم التدرج التنازلي ودوال الخسارة. الانحدار اللوجيستي لفهم التنبؤ ودوال التنشيط. NumPy لكونها أداة أساسية.
    2 نقاط
  29. الا والله ده الكود بتاعي import matplotlib.pyplot as plt import seaborn as sns # Assuming you have a DataFrame called 'data' # Set the figure size for better visualization plt.figure(figsize=(12, 6)) # Plotting the distribution of 'x_1' with Kernel Density Estimate (KDE) plt.subplot(1, 3, 1) sns.histplot(data['x_1'], kde=True) plt.title('Distribution of x_1') # Plotting the distribution of 'y_1' with KDE plt.subplot(1, 3, 2) sns.histplot(data['y_1'], kde=True) plt.title('Distribution of y_1') # Plotting the distribution of 'z_1' with KDE plt.subplot(1, 3, 3) sns.histplot(data['z_1'], kde=True) plt.title('Distribution of z_1') # Adjusts the layout to prevent overlapping of plots plt.tight_layout() # Display all plots plt.show()
    2 نقاط
  30. وعليكم السلام ورحمة الله وبركاته. نعم لابئس يمكنكِ مذاكرة مسار "التعلم العميق Deep Learning" مباشرة بعد مسار "تطبيقات عملية على نماذج الرؤية الحاسوبية" . ولكن يجب الإنتباه أن التعلم العميق هو أحد فروع تعلم الآلة ولذلك من المفيد أن يكون لديكِ خلفية في تعلم الآلة قبل التوجه نحو التعلم العميق. لكن ليس من الضروري أن يكون لديكِ خبرة كبيرة في تعلم الآلة قبل البدء في التعلم العميق. ويمكنكِ قراءة الإجابة التالية لمزيد من التفاصيل حول الفرق بين تعلم الآلة والتعلم العميق متطلبات كل منهما :
    2 نقاط
  31. السلام عليكم دي المساله You are given two arrays of integers, fruits and baskets, each of length n, where fruits[i] represents the quantity of the ith type of fruit, and baskets[j] represents the capacity of the jth basket. From left to right, place the fruits according to these rules: Each fruit type must be placed in the leftmost available basket with a capacity greater than or equal to the quantity of that fruit type. Each basket can hold only one type of fruit. If a fruit type cannot be placed in any basket, it remains unplaced. Return the number of fruit types that remain unplaced after all possible allocations are made. ودي الكود بتاعي فا انا عاوز اعرف اي المشكله في الكود وهل فيه افضل من كده class Solution(object): def numOfUnplacedFruits(self, fruits, baskets): """ :type fruits: List[int] :type baskets: List[int] :rtype: int """ fruits.sort() baskets.sort() f_index = 0 b_index = 0 while f_index < len(fruits) and b_index < len(baskets): if fruits[f_index] <= baskets[b_index]: f_index += 1 b_index += 1 return len(fruits) - f_index solution = Solution() print(solution.numOfUnplacedFruits([4, 2, 5], [3, 5, 4])) print(solution.numOfUnplacedFruits([3, 6, 1], [6, 4, 7]))
    2 نقاط
  32. السلام عليكم ورحمه الله وبركاته بعد انتهائي من دورة الذكاء الاصطناعي شو ممكن اشتغل(مجالات العمل) ؟ ولو بدي اتخصص ب مجال الروبوتات كيف ممكن تفيدني هذه الدورة وشو ممكن اشتغل (مجالات العمل)
    2 نقاط
  33. السلام عليكم هو انا اقدر عادي ان اعمل نموذج التعرف علي الوجه من علي Kaggle Notebook واقدر الشغل الكامير وكده والا اي ؟
    2 نقاط
  34. لدي شهادتين من حاسوب (و لاكني لم اعمل) 23 سنة انا متفرغ
    2 نقاط
  35. كيف استطيع الوصول الى المسارات الاساسية من الدوارات الاخرى على الاكاديمة ...؟
    2 نقاط
  36. السلام عليكم هو انا المفروض احل كام مسال من علي LeetCode في الاسبوع وهل الافضل ان اخصص وقت كل يوم ؟
    2 نقاط
  37. السلام عليكم ورحمة الله ارجو الافادة Uncaught mysqli_sql_exception: Table 'if0_38415802_sudaniana.users' doesn't exist in /home/vol17_1/infinityfree.com/if0_38415802/htdocs/includes/classes/Account.php:16 Stack trace: #0 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/includes/classes/Account.php(16): mysqli_query(Object(mysqli), 'SELECT * FROM u...') #1 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/includes/handlers/login-handler.php(7): Account->login('if0_38415802', '012e6a3b40f4f97...') #2 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/register.php(9): include('/home/vol17_1/i...') #3 {main} thrown in /home/vol17_1/infinityfree.com/if0_38415802/htdocs/includes/classes/Account.php on line 16 أعلاه خطأ في ادخال بيانات المستخدم، ارجو توضيح الصيغة الصحيحة لادخال البيانات حيث: 1/ السطر 16 في Account.php هو: ;query = mysqli_query($this->con, "SELECT * FROM users WHERE username='$un' AND password='$pw'")$ 2/ السطر 7 في login-handler.php هو: ;result = $account->login($username, $password)$ 3/ السطر 9 في register.php هو: ;include("includes/handlers/login-handler.php") ولكم الشكر سلفا.
    2 نقاط
  38. السلام عليكم. أرجو المساعدة في حل المشكلة. Fatal error: Uncaught mysqli_sql_exception: Access denied for user 'if0_38415802'@'192.168.0.20' (using password: NO) in /home/vol17_1/infinityfree.com/if0_38415802/htdocs/includes/config.php:7 Stack trace: #0 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/includes/config.php(7): mysqli_connect('sql108.infinity...', 'if0_38415802', Object(SensitiveParameterValue), 'm07071978') #1 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/includes/header.php(2): include('/home/vol17_1/i...') #2 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/includes/includedFiles.php(24): include('/home/vol17_1/i...') #3 /home/vol17_1/infinityfree.com/if0_38415802/htdocs/index.php(2): include('/home/vol17_1/i...') #4 {main} thrown in /home/vol17_1/infinityfree.com/if0_38415802/htdocs/includes/config.php on line 7
    2 نقاط
  39. السلام عليكم هي اي مكتبه Biopython ؟
    2 نقاط
  40. السلام عليكم، تعلمت بعض أساسيات django rest framework وطورت API بسيط لإدارة مخزن وإستعنت بالذكاء الإصطناعي أثناء عملية التطوير ولحل المشكلات، الشروع عبارة عن API يسمح للمستخدم بإضافة منتجات وتصنيفات كما انه يراقب حركة البيع والشراء ودخول وخروج المنتجات كما يمكن البحث عن المنتجات وإضافة شروط وتصفية البحث وترتيبه. هل يستطيع أحد مراجعة المشروع كي يرا ان كان مبني بشكل جيد وان كان بحاجة الى تحسين؟ وهل استخدام الذكاء الإصطناعي أثناء التعلم قد يؤثر علي سلباً؟ مع العلم اني أفهم جيداً كامل البرنامج النهائي وقمت بعدة مشاريع بسيطة من قبل وحدي. وأخيرا هل يجب إضافة الى settings هذا الكود لكي أحول API الى JSON ام ليس هناك داعي واستطيع استدام الAPI كما هو REST_FRAMEWORK = { 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'], 'DEFAULT_RENDERER_CLASSES': [ 'rest_framework.renderers.JSONRenderer', ], } يمكنك استخدام حساب admin مع كلمة سر admin ان لزم الامر api-inventory-ms.zip
    2 نقاط
  41. السلام عليكم ما الفائدة من استخدام switch
    2 نقاط
  42. علوم الحاسوب computer science (أو يطلق عليه علوم الكمبيوتر أو علوم الحاسبات بالعامية) هو روح العصر الحديث ويمثل مجال التقنية التي دخلت في كل مفاصل حياتنا، فهو يدخل في كل صغيرة وكبيرة من حولنا بدءًا من الهواتف المحمولة والحواسيب والآلات والمصانع وكل شيء بما لا يمكن حصره من المنتجات والخدمات حيث أسهم في نقلنا إلى مرحلة أعلى من الفعالية والجودة والفائدة. هذا المقال هو دليل شامل للتعرف على اختصاص علوم الحاسب وفوائده وتطبيقاته والمواد التي تدرس فيه والمجالات المتفرعة منه ثم سنناقش بعض الأسئلة المهمة المتعلقة بجدوى اختيار تخصص علوم الحاسوب ودراسته وما هي فرص العمل المتوفرة في مجال علوم الحاسوب وسنعرف أيضًا الفرق بين علم الحاسوب وهندسة الحاسوب وأخيرًا سنرشدك إلى كيفية البدء في دراسة اختصاص علوم الحاسب ذاتيًا وندلك على بداية الطريق لتنطلق إن أحببت المجال. هل أنت جاهز؟ لننطلق! فهرس المحتويات حرصًا على تنظيم المقالة ولتسهيل الوصول إلى القسم الذي تريده بسهولة، سنذكر هنا جدول المحتويات باختصار: ما هي علوم الحاسب؟ فوائد وتطبيقات علوم الحاسوب هل تعلم علوم الحاسوب مفيد؟ مواد علوم الحاسوب تخصصات علوم الحاسب كيف أختار التخصص المناسب لي من تخصصات علوم الحاسب؟ التوظيف وفرص العمل في مجال علوم الحاسوب ما الفرق بين علوم الحاسب وهندسة الحاسب؟ من أين أبدأ بتعلم علوم الحاسب؟ ما هي علوم الحاسب؟ تُعرَف علوم الحاسوب بأنها كل العلوم المتعلقة بالآلات الحسابية والمنطقية، حيث تعمل بدارات إلكترونية، وقد تكون علومًا نظريةً مثل نظرية المعلومات Information Theory أو تطبيقية مثل البرمجيات Software أو العتاد Hardware. والبرمجيات software هي الأنظمة غير الملموسة التي تُشغّل عتاد الحواسيب hardware وتقوم بمهام المستخدمين المطلوبة، بينما العتاد هو القطع الفيزيائية الملموسة التي تُكوّن النظام الحاسوبي مثل المعالِج والذاكرة العشوائية RAM والقرص الصلب …إلخ. وتتشعّب علوم الحاسوب وتترابط مع بعضها بعضًا، إذ لا يمكنك دراسة البرمجة دون دراسة الخوارزميات وهياكل البيانات، كما لا يمكنك دراسة علوم الذكاء الاصطناعي دون دراسة الجبر الخطّي والاحتمالات وعدد آخر من علوم الرياضيات. فوائد وتطبيقات علوم الحاسوب نَذكُر من فوائد وتطبيقات علم الحاسوب ما يلي: تعد شبكة الإنترنت واحدة من أفضل الاختراعات في التاريخ الإنساني، فهي شبكة حاسوبية تصل مناطق العالم ببعضها البعض. حواسيب سطح المكتب والحواسيب المحمولة التي نعمل عليها أو نرفّه خلالها عن أنفسنا …إلخ، جميعها قائمة على علوم الحاسوب وتخصصات الحاسب. الهواتف المحمولة وتطبيقات الهواتف الذكية التي نستعملها للتسوق أو طلب سيارة أجرةٍ أو طلب الطعام والدواء وغير ذلك فكلها تطبيقات حاسوبية. أجهزة إدارة المصانع والعمليات التصنيعية التي تُستعمل لتخطيط تصنيع المنتجات الغذائية وغير الغذائية، فهي مبنيّة بالأساس على برامج وخوارزميات ورياضيات حاسوبية، فلولاها لما تطورت أنظمة التصنيع التي لدينا إلى مرحلة تكفي احتياجات الجنس البشري. الأجهزة الطبية التي تُنقَذ بها حياة الناس في المستشفيات، وأجهزة الاستشعار والإدارة العسكرية، والأجهزة التي تساعد على إدارة الأسواق الاقتصاد والمال وغيرها، فكلها موجودة بفضل علوم الحاسوب. ولعلك تشاهد بعضًا من فوائد هذه العلوم بنفسك، فلا تحتاج من يخبرك عنها. دورة علوم الحاسوب دورة تدريبية متكاملة تضعك على بوابة الاحتراف في تعلم أساسيات البرمجة وعلوم الحاسوب اشترك الآن هل تعلم علوم الحاسب مفيد؟ قد تفكر في نفسك الآن وتقول هل من المجدي لي أن أتخصص في مجال علم الحاسوب وأتعلمها سواء للدراسة والبحث الأكاديمي أو للعمل والوظيفة مستقبلًا؟ والجواب هو نعم، فالأمر مُجدٍ وأنصح به بشدة، إذ يحصل متخصصو علوم الحاسوب على رواتب أعلى من العديد من نظرائهم المهندسين غير العاملين في المجال، كما تزداد الرواتب بازدياد الخبرة ونُدرة المجال الذي يتخصص فيه المرء؛ فمثلًا لا يتساوى مُطوّر واجهات الاستخدام بمهندس يجيد الذكاء الاصطناعي وتعلم الآلة، وكذلك لا يتساوى مع مهندسي البرمجيات ومهندسي العتاد. وبغض النظر عن عامل الوظيفة والراتب والمال، يساعدك تعلم علوم الحاسوب على بناء مشاريع حقيقيةٍ يمكنك أن تستفيد منها أو تغيّر بها العالم، مثلًا انظر كيف غير مارك زوكيبربيرغ طريقة تواصل المليارات من البشر وكامل التاريخ الإنساني بسبب تطويره لموقع إنترنتٍ، وانظر كذلك كيف تتحكم العملات الرقمية وتغير الاقتصاد العالمي في وقتنا الحالي. ويؤهلك تعلم علوم الحاسب لإنشاء خدمات ومواقع وبرمجيات وأنظمة حسبما تحتاج، ومن ثَم تستفيد منها سواءٌ لنفسك أو تبيعها للآخرين إما على شكل وظيفةٍ، أو خبرةٍ كما في مجال العمل الحُرّ. ولا يعني هذا بالطبع أنك ستكون مالك شركة مايكروسوفت المستقبلي، وكذلك لن تكون مارك الذي سيغيّر العالم، إلا أنك ستمتلك نفس الخبرات والأدوات التي امتلكوها عندما فعلوا ذلك، أما الباقي فيعتمد عليك وعلى اجتهادك ومثابرتك. مواد علوم الحاسب سنتحدث في هذا القِسم عن مواد تخصص علوم الحاسب وتفريعاتها المختلفة، وأبرز المواد التي تُدرّسها معظم الجامعات حول العالم لطلابها الراغبين بتَعلّم هذا التخصص، ومعظم هذه المواد مُستوحاةٌ من الفهرس الأكاديمي لجامعة ستانفورد لعلوم الحاسبات، هذا بالإضافة لعددٍ من الجامعات الأخرى. 1. أساسيات الهندسة وهندسة البرمجيات تعد من أول المواد التي يدرسها الطلاب وتهدف للإجابة على أسئلة متنوعة مثل ما هو تعريف الهندسة وما هي عمليات الإدخال والإخراج وكيف تصمم منتجًا أو برنامجًا أو مشروعًا وما هي الخطوات العملية لتصميم وهندسة نظام ما وغيرها. والهدف الرئيسي من هذه المادة هو نقل وتوصيل معنى الهندسة للطلاب، وذلك بإدراكهم أن عملية إنشاء الأنظمة هي خليطٌ مُتقنٌ من التخطيط والترتيب، فهي ليست عمليةً عشوائيةً بسيطةً، وعادةً لا تحتوي هذه المادة على مشاريع برمجية حقيقية، وقد تشتمل على مشاريع بسيطة في بعض الجامعات. ويَتعلّم الطالب في هذه المادة عددًا من التقنيات والأدوات الشائعة لتوصيف الأنظمة وتصميماتها، مثل لغة النمذجة الموحدة Unified Modeling Language واختصارًا UML وآلات الحالة State Machines وغيرها من التقنيات. 2. الرياضيات الأساسية مادة الرياضيات مادةٌ أساسيةٌ لدى جميع طلاب الهندسة عمومًا؛ لذلك من الضروري أن يُدرك الطالب أساسيات الرياضيات مثل العمليات الحسابية والتفاضل والتكامل والجبر وحسابات الأشكال الهندسية وغير ذلك من العمليات الرياضية البسيطة. ولا تُعلّم هذه المادة في الجامعات بهدف الرياضيات ذاتها؛ فبمجرد انتهائك من المادة ستنسى غالبًا تلك المعادلات الرياضية، ولكن الهدف هو تعويد الطالب على استخدام العقل لحساب ما لم يقدِر على حسابه من قبل، فمواجهة القليل من الصعوبة في التَعلّم تُفتّح الذهن وتُعوّده على تحمّل الأكثر صعوبةً من هذه الرياضيات البسيطة مستقبلًا. 3. الرياضيات الخطية ستتعلم في الرياضيات الخطية أو الجبر الخطي أساس حلّ المعادلات الرياضية، مثل معادلات الدرجة الأولى والثانية والثالثة، وبعض الأساليب والقوانين الرياضية لحلها بسهولة. كما ستتعلم بعض الأمور عن المصفوفات وطريقة التعامل معها وإجراء بعض الحسابات لها وطريقة الاستفادة منها مثل المصفوفات أولية وثنائية وثلاثية الأبعاد. 4. التفاضل والتكامل هنا ستتعمق في التفاضل والتكامل بعد اطلاعك عليها بصورة مبسطة بالفعل في إحدى المواد الرياضية السابقة، وستتعرف عليهما بالتفصيل، وكيف تستخدمها لحل بعض المشكلات الحقيقية في العالم، كما ستعرف بعض قواعد التفاضل والتكامل. وقد تكون هذه المادة متقدمة على بعض الطلاب مثل أغلب مواد الرياضيات، وذلك لأن الطالب يتعلم فيها المعادلات والقواعد والقوانين دون أن يُعلّم من أين جاءت ولا كيف ولماذا سيتعلمها ولا أين سيستخدمها في حياته المستقبلية. 5. تصميم المنطق الرقمي ستتعلم في مادة تصميم المنطق الرقمي Digital Logic Design أهم أركان التفكير المنطقي، وكيفية تمثيل الحجج والنقاشات والمعضلات في العالم الحقيقي على شكل معادلات رياضية ومنطقية وكذلك قد تتعلّم بعض الأمور عن المجموعات Sets في الرياضيات وطريقة استخدامها لتمثيل معلومة أو بيانات معينة. كما ستتعلم تصميم البوابات المنطقية Logic Gates مثل and و or و nor و xor و not وغيرها، وكذلك ستفهم الطريقة العامة لعمل المعالجات داخل الحواسيب والأجهزة الإلكترونية. وهذه المادة واحدةٌ من بين أكثر المواد إفادةً ضمن علم الحاسوب لأن طريقة التفكير المنطقية هذه ستنقلك من إنسان عشوائي التفكير قد لا يفكر بمنطقية في معظم أمور حياته إلى إنسان يفهم الحياة بصورة منطقية كما تفهمها الآلات ويَسهُل عليه تحديد ما هو منطقي وما هو غير منطقيٍ من الحجج والمعلومات التي حوله، كما ستفهم كيفية تحويل الأفكار إلى أنظمة فيزيائية وبرمجية داخل الحواسيب بحيث تُستعمَل لإكمال تصميم الحواسيب وتُجري العمليات الحسابية المطلوبة. أي الغرض من هذه المادة أن ترى كيف يعمل الحاسوب وكيف يفهم الأوامر وينفذها حتى تعرف كيف ستتعامل معه وتبرمجه وتتخاطب معه بسهولة. وفقًا لما سبق، من الأفضل التركيز عليها كونها واحدةٌ من أهم المواد في المجال، وقد تُدرّس هذه المادة على عدة مواد منفصلة، لذلك قد تجد موادًا شبيهةً مثل التفكير المنطقي Critical Thinking والرياضيات المتقطعة Discrete Mathematics، فكلّ على حسب الجامعة والتخصص. 6. الاحتمالات مادة الرياضيات الأخيرة التي ستتعلّمها هي مادة الاحتمالات Probabilties أو نظرية الاحتمالات Probability Theory، وهي مادةٌ تهدف إلى تعليمك أهم مبادئ هذا العلم بالإضافة لأنواع الاحتمالات المُمكنة حسب الأحداث Events وطريقة ارتباطها ببعضها البعض ليُستفاد منها في الحياة الواقعية إما في اتخاذ قرارات المؤسسات أو إجراءات أصغر من ذلك سواءٌ على مستوى الأفراد أو الأجهزة الرقمية. والاحتمالات علم عميق تقوم عليه الكثير من الرياضيات الحديثة، كما يقوم عليه علم التعمية Cryptography المُستخدم في تأمين وتشفير الاتصالات والشبكات، وستستفيد من هذه المادة كثيرًا في المستقبل متى أتقنتها. 7. البرمجة من البداهة أن توجد مادة مختصة بتعلم البرمجة في تخصص علوم الحاسب أو التخصصات المرتبطة به، وذلك لأن البرمجة هي لبّ علوم الحاسب في النهاية، فجميع الأجهزة والأنظمة التي حولنا ما هي إلا برمجيات وخوارزميات مختلفة صنعت لتعمل بطريقة معيّنة. كانت لغة جافا Java أبرز لغة برمجةٍ تُعلّم في الجامعات قبل عقد من الزمن، بينما تميل الكفة الآن إلى بايثون Python أو جافاسكربت في بعض الأحيان، ولكن بايثون هي الأكثر استعمالًا واعتمادًا في الجامعات لما لها من تطبيقات لاحقة في جميع المجالات الأكاديمية الأخرى. وفي كل الأحوال ستتعلّم في هذه المادة المتغيرات والخوارزميات وحلقات التكرار والجمل الشرطية والبرمجة كائنية التوجه وغيرها من المبادئ البرمجية، وذلك بِغَض النظر عن لغة البرمجة التي ستتعلّمها. كما قد تُعلّم القليل من استخدام بيئة ماتلاب Matlab وهي بيئة برمجية ولغة برمجة تُستخدَم لإنشاء الحسابات الرياضية وبرمجة برمجيات معينة، لذلك فهي منصة ولغة برمجة في آنٍ واحدٍ، ويستعمل ماتلاب طلاب أقسام الهندسة الأخرى لمحاكاة وحساب المعادلات والنماذج الرياضية. 8. الخوارزميات وهياكل البيانات الخوارزميات Algorithms وهي الإجراءات المنطقية المتسلسلة لحلّ مشكلة ما، وسنتعلّم الخوارزميات وأفضل الطرق لتصميمها من أجل حل مختلف المشكلات التي قد تظهر لنا في المستقبل، حيث سنحتاج إلى معرفة متى نستعمل خوارزمية بعينها من أجل حل مشكلة ما، ومتى سنلجأ لخوارزمية أخرى نعرف أنها ستعطينا أداءً أفضل، بمعنى أننا سنغوص في الموازنة بين مختلف الخوارزميات وأدائها مثل السرعة والوقت ومساحة التخزين، ومتى يجب استعمال كلّ واحدةٍ منها كما سنطّلع على مختلف تشعيبات الخوارزميات المتوفرة. هياكل البيانات Data Structures وهي طريقة تخزين البيانات واستعمالها بغرض تحقيق أهدافٍ مختلفةٍ حسبما يريد المُطوّر؛ فهناك هياكل بياناتٍ أسهل وأوضح للفهم العام، وهناك هياكل بيانات أسرع في الأداء، وهناك هياكل بيانات غير سريعة في الأداء لكنها تستهلك حجمًا أقل في تخزين البيانات وبالتالي قد تفضل على غيرها في بعض الأحيان. وستتعلم كل هذه الأمور في هذه المادة، وربما تقسم هذه المادة إلى مادتين على حسب الجامعة والاختصاص الذي تدرسه، كما ستطلع على أنماط التصميم Design Patterns إذا كنت ستدرس هندسة البرمجيات؛ وهي الأنماط الشهيرة لتصميم البرمجيات بحيث لا تحتاج لإعادة اختراع العجلة مرة أخرى من أجل كل مشكلة تواجهها. 9. مبادئ أنظمة التشغيل أنظمة التشغيل هي البرمجيات الأساسية التي تُدير الأجهزة الحاسوبية والهواتف والأنظمة المدمجة وغيرها، حيث توزع الموارد على البرمجيات وتدير تشغيلها وعملها ومراقبتها للمستخدم، وأبرز أنظمة التشغيل على سطح المكتب هي ويندوز Windows وماك Mac ولينكس Linux، أم فيما يتعلق بأنظمة تشغيل الهواتف الذكية، فلدينا نظام أندرويد Android الذي يعمل على مختلف الأجهزة ونظام iOS الذي يعمل على أجهزة آبل Apple فقط. وستتعلم في هذه المادة أساسيات عمل أنظمة التشغيل المختلفة، بالإضافة لأبرز المبادئ التي تعمل بها أنظمة التشغيل الحالية مثل العمليات وأجهزة الإدخال والإخراج Input/Output وإدارة الذاكرة والوصول للمعالِج ونظام الوصول والصلاحيات وإدارة المستخدمين وغير ذلك. وستضع عليك معظم الجامعات واجبات منزلية بلغة سي C في هذه المادة، لذلك سيكون عليك تَعلّمها إن أردت اجتياز هذه المادة بنجاح. 10. مبادئ الشبكات الشبكات هي كذلك من أبرز سمات العصر الحديث فشبكات الاتصال الخلوية وشبكة الإنترنت والشبكات المنزلية كلها غيّرت شكل العالم الحديث وساهمت في فوائد جمة لا تعد ولا تحصى فبدون علم الشبكات، لن تتمكن من قراءة هذا المقال الآن. وستتعلم في هذه المادة أساسيات الشبكات وطريقة عملها، وستطّلع على بروتوكولات التواصل أشهرها بروتوكول TCP وبروتوكول UDP، كما ستطّلع على بعض المفاهيم والأجهزة الأخرى مثل الموجه Router والخوادم Servers وأجهزة العملاء Clients والنظير للنظير Peer to Peer وغير ذلك من مبادئ الشبكات البسيطة. وسيطلب منك غالبًا برمجة برنامج محادثة بسيط بأي لغة برمجةٍ تريدها وذلك باستخدام أحد بروتوكولات التواصل، وهو ما سيوضح مدى فهمك وتعلمك لهذا المساق. 11. معمارية الحاسوب إلى هنا سيكون طالب علم الحاسوب قد فهم بالفعل معظم الأساسيات التي سيحتاج إليها، ولكن مادة معمارية الحاسوب أو بنية الحاسوب Computer Architecture ستتعمق في تفاصيل دقيقة حول مكونات الحاسوب الفيزيائية وكيفية تواصلها مع بعضها بعضًا مثل طريقة تواصل الذاكرة العشوائية مع المعالِج وقرص التخزين وطريقة إرسال أو جلب المعلومات منهما. كما سيطّلع على مفهوم المسجلات Registers، وهي وحدات الذاكرة الصغيرة للمعالجات الحديثة، وكيف يستعملها لتسريع عمليات المعالجة بدلًا من جلب البيانات من الذاكرة، وسيفهم كيف ستتحول الخوارزميات والبرمجيات التي يكتبها إلى عمليات مجزأة يمكن للمعالجات حسابها في أقل من لحظة من الزمن بفضل البوابات المنطقية التي تعرّف عليها مسبقًا. أي أن هذه المادة ستغوص في تفاصيل عمل أجهزة الحواسيب وبنيتها الداخلية وطريقة تواصل مكوناتها مع بعضها بعضًا. زيادةً على المواد الأساسية التي ذكرناها آنفًا، هناك مواد ومجالات وتخصصات اختيارية يختار الطالب غالبًا ما يحلو له منها ليمارس المجال الذي يحبه، ولا يتخرج مهندسو الحاسوب وهم يتقنون كل هذه التخصصات، فعادةً ما يختارون واحدًا أو اثنين منها على الأكثر، ثم يدرسونه بصورةٍ أعمق من السابق، لذا سننتقل تاليًا إلى شرح تخصصات الحاسب التي يمكن لمهندس الحاسوب أو دارس تخصص علم الحاسوب أن يعمل ويتخصص فيها. تخصصات علوم الحاسب لا يكون هناك تخصصات واضحة في الجامعة أحيانًا، بل يمكن للطالب ببساطة أن يختار مجال أحد المواد التي درسها وأحبها ويتخصص فيها إلى حين إتمام السنوات الدراسية. سنعرض أهم تخصصات الحاسب والمجالات التي يمكن العمل فيها بعد التخرج: 1. البرمجة وهندسة البرمجيات هندسة البرمجيات وهي العلم المَعني بصناعة البرمجيات بطريقة احترافية، فهي لا تختص بالبرمجة فقط وإنما تشمل فروعًا وعمليات أكثر من ذلك بكثير. صحيحٌ أن تطوير تطبيقات سطح المكتب وتطوير تطبيقات الهواتف المحمولة هي المجالات البرمجية الأكثر شيوعًا، لكن هناك مجالات برمجية أخرى أكثر تعقيدًا مثل: برمجة أنظمة إدارة الخوادم Servers مثل Kubernetes ودوكر Docker وأشباهها من أدوات إدارة العمليات DevOps. برمجة أدوات الأنظمة المالية والاقتصادية التي تدير اقتصادات الدول والبنوك حول العالم. برمجة أنظمة الشركات العملاقة مثل شركات الطيران وشركات النفط وشركات الكهرباء …إلخ، فهذه أنظمةٌ حساسةٌ لا تحتمل الفشل وإن احتملته فهي بحاجة للاسترجاع والإدارة الفورية. الكثير من الشركات العملاقة كانت تعمل قبل عِدّة عقودٍ من الزمن على أنظمة مبرمجة بلغات برمجية قديمة عفا عليها الزمن الآن ولم يعد يُبرمَج بها، ولكن ما زالت هذه الشركات تعمل بتلك الأنظمة لعِدّة أسبابٍ لوجستيةٍ وهنا يعد نقل البرمجيات من لغة برمجة معينة إلى لغة برمجة أخرى هو مجال تخصصي كبير في علوم الحاسبات وقسم هندسة البرمجيات، فمثلًا تدفع شركة IBM رواتب عملاقة لمن يجيد نقل برمجياتٍ مكتوبةٍ بلغة COBOL إلى لغة C. ويقوم مهندسو البرمجيات بالتخطيط لعملية بناء البرمجيات اللازمة لهذه المجالات، كما يخططون للموارد التي ستلزمهم والمميزات التي سيسلمونها بالإضافة إلى نمط التصميم الذي سيستعملونه في مختلف مراحل تطوير البرنامج، ولذلك هي عملية معقدة واحترافية تحتاج إلى فريق متكامل من المبرمجين وليست مُجرّد برمجة بسيطة ينجزها فرد واحد. 2. هندسة الشبكات الشبكات ليست برامج التواصل بين المستخدمين فقط، فهناك شبكات أعقد من ذلك بكثير. ويمكنك التخصص في مجال الشبكات لتفهم طريقة عمل الشبكات البسيطة وحتى العملاقة مثل شبكة الإنترنت، والبنية التحتية لها وطريقة ربط الدول لتلك البنية التحتية، كما يمكنك التعرف على بعض أنماط الشبكات البديلة مثل النظير للنظير Peer to Peer وكيفية عمل تطبيقات مفيدة بها في الحياة الواقعية. وكذلك قد تتطرق إلى الشبكات المركبية Vehicular Networks وهي الشبكات المرتبطة بالسيارات والمركبات، أو شبكات الاتصال الخلوي وطريقة صنعها وعملها، وطريقة التعامل مع مختلف أجهزة المودم Modems. وبشكلٍ أبسط من ذلك، فيمكن أن تعمل مدير شبكات في المؤسسات والشركات الصغيرة والكبيرة وحتى مراكز إدارة الخوادم Data Centers، فلا تخلو الآن مؤسسة أو شركة من شبكة داخلية تربط أقسامها مع بعضها وهي آنذاك بحاجة إلى مدير شبكة بالتأكيد هذا أقل القليل. 3. الذكاء الاصطناعي وتعلم الآلة زاد الاهتمام بالذكاء الاصطناعي زيادة كبيرة في العقد الأخير، وهذا أمرٌ طبيعيٌ بسبب زيادة الحاجة إليه، بالإضافة إلى تَوفُّر الموارد الحاسوبية الكافية لتشغيل خوارزمياته المختلفة على أجهزة المستخدمين الشخصية، فدخل الذكاء الاصطناعي في كل شيء حولنا من إدارة إشارات المرور وتنظيم السير وتصنيف الصور في هواتفنا والتعرف على الأشخاص والوجوه والترجمة الآلية وإدارة المركبات والآلات وكشف الجرائم وعمليات التتبع وتحليل البيانات والكثير الكثير غيرها حتى بات تقريبًا عصب التقدم والتطور الذي نشهده حاليًا، وهو الأمر الذي يفسر سبب الطلب الكبير على المتخصصين في هذا المجال كما أشرنا. وهناك فرق بين الذكاء الاصطناعي Artificial Intelligence وتعلم الآلة Machine Learning؛ فالأول هو اسم المجال العام المَعني بكل ما يتعلق بإنشاء ذكاء يشابه ذكاء الإنسان باستعمال الآلات بينما الثاني مجال فرعي يتعلق بتدريب الآلات على مجموعة بيانات معينة بهدف الخروج منها بتصنيفات يمكن أن تساعد الآلة على اتخاذ قرار مطلوب منها. وستتعلم في هذا التخصص فروع تعلم الآلة الثلاثة الأشهر وهم، التعلم الموجه Supervised Learning والتعلم غير الموجه Unsupervised Learning بالإضافة إلى التعلم المعزز Reinforcement Learning، وللمزيد من المعلومات عن المجال، يمكنك الاطّلاع على كتاب مدخل إلى الذكاء الاصطناعي وتعلم الآلة. 4. الحوسبة البيولوجية الطبية لا تأتي الأجهزة الطبية الموجودة بالمستشفيات من العدم، بل يصنعها المهندسون ويساهم فيها المبرمجون، وهناك مجموعة من المواد الجامعية في تخصصات الحاسب التي تعلم الحوسبة البيولوجية الطبية الحيوية Biomedical Computing، وقد تكون تخصصًا كاملًا منفصلًا في بعض الجامعات باسم هندسة طبية حيوية biomedical engineering أو هندسة الأجهزة الطبية أو الهندسة الطبية. ويمكن أن تتخصص في هذا المجال لتتعلم أهم المتطلبات البرمجية في المجال الطبي أو البيولوجي، وكيفية تطوير برمجيات أو قطع عتاد تحل مشاكل أو تقدم استخدامات حقيقية تفيد مجال الطب والعلاج أي تقريبًا هو تخصص في مجال تصنيع الأجهزة المتعلقة في المجال الطبي من تصميم وبرمجة واختبار وتنفيذ …إلخ. ولا تستفيد المستشفيات فقط من هذا التخصص بل تستفيد كذلك مختبرات التحليل والمختبرات الحيوية والمستوصفات والعيادات الطبية وغيرها، فتحتاج جميعها إلى برمجيات صادرة عن المتخصصين في هذا المجال. 5. الرسوميات لا تُعَد الرسوميات Graphics مجالًا واحدًا فقط، فهو مجال تطوير عريض جدًا، حيث تنضوي تحته مجموعة من المجالات المتفرعة، نذكر من بينها: أنظمة التشغيل، فلها مكتبات برمجية معينة تساعدها على عَرْض الخطوط والصور والواجهات الرسومية وغير ذلك للمستخدمين، وهذا مجال ضخم، فهو ضروري لتمكين المبرمجين الآخرين من تطوير التطبيقات والألعاب لأنظمة التشغيل هذه، أي أن الرسوميات هنا هي جزء من نظام التشغيل. محركات الرسوميات Graphics Engines، وهي أنظمة برمجية عملاقة تهدف لتمكين المبرمجين من برمجة مختلف الرسوميات التي يريدونها لمختلف أنظمة التشغيل، فمثلًا يستخدم محرك Unity 3D أو Source2 أو غيرهما لبرمجة الألعاب التي تعمل على مختلف أنظمة التشغيل مثل ويندوز وماك ولينكس وأندرويد. البرامج المتخصصة في الرسم ثنائي وثلاثي الأبعاد، فتعد برمجة هذه البرمجيات مجال منفصل ويتطلب بعض الخبرات والمهارات، بينما تعلم استخدامها سيحولك إلى مصمم، وتدخل فيها برامج النمذجة modeling مثل برامج الرسم والتصميم الهندسي CAD المفيدة في الكثير من التخصصات الهندسية. برامج تحرير ومونتاج الفيديوهات مجال فرعي آخر مشهور. وتدخل الكثير من التخصصات تحت تخصص الرسوميات كما ترى، إلا أنها قد تختلف جذريًا فيما بينها، فتطوير برامج الرسم ثنائية الأبعاد لا يشبه تطوير المحركات الرسومية فعملية تطوير المحركات الرسومية واحدة من أصعب العمليات البرمجية وأكثرها تعقيدًا، لأنها تحاكي فيزياء الكون وتتطلّب فهمًا عميقًا للرياضيات. 6. تحليل البيانات وإدارة قواعد البيانات مجال تحليل البيانات (أو يرقى حتى إلى قسم منفصل باسم هندسة تحليل البيانات data analysis engineering) واحد من أكثر المجالات طلبًا حاليًا، لما له من استخدامات مفيدة وجلية في تحليل البيانات والمعطيات واستعمالها في اتخاذ القرارات المُهمَّة لدى المؤسسات والشركات، حتى إن بعض الفرق الرياضية لكرة القدم مثل ليفربول تعتمد على تحليل البيانات لوضع خططها الرياضية في كل مباراة، فتطبيقات هذا المجال واسعةٌ جدًا. كما ستتعلم في هذا المجال طريقة معالجة مجموعات ضخمة من البيانات، وطريقة تنظيفها من الأخطاء والمشاكل، وتحويلها إلى بياناتٍ يمكن معالجتها من الأنظمة الحاسوبية، وستتعلم طريقة استخراج أهم المعلومات والأسرار المخفية في البيانات الخام التي لديك بمختلف المكتبات واللغات البرمجية. حتى تتقن فن التعامل مع البيانات، فيجب أن تتقن التعامل مع أنظمة قواعد البيانات التي تخزَّن فيها البيانات، لذا يتخصص هذا المجال في مفهوم قواعد البيانات Databases وأنظمة إدارة قواعد البيانات database management systems تختصر إلى DBMS بتعمق كبير فهي مدخل إلى التعامل مع البيانات والتلاعب بها وتطويها والغوص فيها لاستخراج المعلومات. قد يتفرد هذا المجال في تخصص بمفرده في الدراسات العليا أو حتى في سوق العمل، فقد تطلب بعض الشركات متخصص لإدارة قواعد بياناتها وله المسمى الوظيفي "مدير قواعد بيانات" Database Administrator. وتشمل مشاريع تحليل البيانات عادة: جمْع البيانات من مصادرها. تنظيف وتهيئة البيانات للمعالجة وإزالة القيم الشاذة. إدخال البيانات في الأنظمة الحاسوبية المطلوبة لاستخراج النتائج والمعلومات الأولية منها، ومن أين يُبدَأ في البحث عن روابط مفيدة بين أجزائها. تحليل أعمق للبيانات إما عبر أنظمة أكثر تقدمًا أو عبر تَعلّم الآلة، وقد تُستعمل أنظمة التعرف على الأنماط Pattern Recognition كذلك. تهيئة النتائج السابقة للعرض والمشاركة عبر بعض الأدوات الشهيرة. عرض النتائج والتقارير مع المخططات والتوصيات. وتعد بايثون أكثر لغات البرمجة طلبًا في هذا المجال، بالإضافة لمكتباتها الشهيرة مثل Pandas وNumpy وJupyter Notebook وMatplotlib وغيرها، وكذلك تستعمل لغة R في هذا المجال، ولكنها ليست بنفس شيوع بايثون، أما بالنسبة لقواعد البيانات، فيجب أن تقن لغة SQL وتتقن بعدها أنظمة التعامل مع قواعد البيانات. ولتَتعلّم أساسيات بايثون بسهولة، بإمكانك الاطّلاع على كتاب البرمجة بلغة بايثون كما يمكنك الاطلاع على كتاب ملاحظات للعاملين بلغة SQL وكتاب الدليل العملي إلى قواعد بيانات PostgreSQL. 7. أنظمة التشغيل والأنظمة المدمجة تحتاج جميع الحواسيب والهواتف الذكية والأجهزة الإلكترونية عمومًا إلى نظام تشغيل Operating System لتعمل وفق رغبات المستخدم، وهذه الأنظمة هي الأخرى لا تأتي من العدم بل هناك متخصصون لبرمجتها وجعلها أفضل من غيرها والحفاظ عليها مع الزمن. تطوير أنظمة تشغيل سطح المكتب مثل ويندوز وماك ولينكس، أو أنظمة الهواتف الذكية مثل نظام أندرويد ونظام iOS وغيرهما، هي مجالات برمجية متقدمة تعتمد على خبرات ومهارات متعددة، كما يعتمد هذا على العتاد Hardware الذي ترغب ببناء نظام تشغيل له، وقد تُستخدَم أكثر من لغة برمجية في الوقت نفسه لتطوير نظام تشغيل بسيط، فتطوير أنظمة التشغيل عملية عملاقة ومكلفة وتحتاج الكثير من المهندسين، كما ينفق عليها ملايين الدولارات من الاستثمار المستمر على امتداد عدة سنوات للخروج بنتائج مرضية، ولهذا ربما تجد أن هناك ملايين البرمجيات الصغيرة حول العالم، بينما يوجد ثلاث أنظمة شهيرة لسطح المكتب ونظامان للهواتف الذكية فقط، ورغم أنه هناك بالفعل العشرات غيرها إلا أنها محدودة وضعيفة المزايا موازنة بتلك الأكثر استخدامًا والأكبر دعمًا حاليًا؛ وذلك لأن مطوريها لا يمتلكون نفس موارد وإمكانات مطوري الأنظمة الشائعة ذات الدعم الكبير. أما الأنظمة المدمجة Embedded Systems فهي الأنظمة التي تعمل مع موارد عتاد Hardware Resources محدودة للغاية، فهي تُنفّذ مهامًا محدودةً وصغيرةً مثل أنظمة الإشارات والاستشعار والأقفال الإلكترونية وألعاب الأطفال وحتى أنظمة إدارة السدود المائية وأنظمة الأجهزة العسكرية …إلخ، كما أن برمجتها مجالٌ منفصلٌ لوحده، ويوجد به الكثير من التفرعات كذلك وهو علم ضخم ذاع صيته هذه الأيام وأهم مجال تفرع عنه هو مجال إنترنت الأشياء Internet of Things تختصر إلى IoT وهي برمجة العتاد مع ربطه بالإنترنت مثل أنظمة مراقبة المباني وأقفالها وأنظمة البيوت الذكية وغيرها. أصبحت هنالك برامج واختصاصات دراسات عليا وحتى درجات جامعية تُدرِّس هذا المجال. 8. الأمان الرقمي الأمان الرقمي مجال كبير تنضوي تحته عدة أمور، مثل أنظمة التشغيل والبرمجيات العادية والشبكات والتعمية وغيرها، فكلها أمور مترابطة تحتاج لتأمين واستخدام أفضل للتقنيات وذلك للتأكد من عدم وصول الأشخاص غير المخوّلين لها. وبينما هناك مجالاتٌ متعلقةٌ بالأمان الرقمي الشخصي للمستخدمين، هناك مجالاتٌ متعلقةٌ بالأمان الرقمي الجنائي أو العسكري بين المجرمين وأجهزة الشرطة وبين الدول وبعضها البعض، كما أن هناك مجالاتٌ متعلقةٌ بالشبكات وإدارة الخوادم وغير ذلك الكثير، وكلها أمورٌ يمكن أن تتخصص بها إذا رغبت بذلك. ولمعلومات مفيدة حول الأمان الرقمي الشخصي والخصوصية، اطلع على كتاب دليل الأمان الرقمي. 9. الحوسبة العلمية تعتمد العديد من الصناعات التي تراها حولك اعتمادًا أساسيًا على علم الحاسوب لإتمام مهامها بنجاحٍ، فأغلب ما تراه حولك قد عولج في الحاسوب بدءًا من البناء الذي تقطنه والذي قد صمم واختُبر باستعمال برامج حاسوبية صممت البناء ونمذجته واختبرته على الزلازل ومختلف العوامل للتأكد منه ومن تصميمه وحتى قطع وقطع البلاستيك وأجزاءها قد صممت أيضًا باستعمال برامج حاسوبية عملاقة وهكذا، وكل هذه البرامج تعمل بخوارزميات ضخمة تحتاج للكثير من العمليات الرياضية التي تحل معادلات مختلفة، وهي بدورها تعتمد على خوارزميات محددة لتبسيطها وحسابها وهذا ما يدخل ضمن مجال الحوسبة العلمية Scientific computing. كما توجد مجالات كثيرة أخرى مثل هذه لا مجال لحصرها الآن ولكن نذكر منها مجال الحوسبة التطورية Evolutionary Computation وهي العلم الذي يأخذ نظرية التطور والحالات المعقدة المتطورة ويحولها إلى نظام قابل لحل الكثير من المشاكل في الحياة الواقعية، فيمكن استخدام هيكلة ومبادئ نظرية التطور لتطوير خوارزمية تساعدنا على معرفة عدد المطارات والمدارج التي علينا وضعها في كل مدينة. 10. الحوسبة السحابية توفر الآن الكثير من الشركات خدمات سحابية Cloud Services للمستخدمين وفكرة الحوسبة السحابية Cloud computing ببساطة إلغاء العمل على نظام تشغيل سطح المكتب لتخزين وتشغيل وإدارة الخدمات والبرامج التي تريدها والاعتماد كليًا على خدمات بعيدة موجودة على حواسيب وخوادم مركزية عملاقة تستفيد من الإنترنت للوصول إليها لفعل نفس الأمور السابقة. فمثلًا بدلًا من تشغيل خادم قاعدة البيانات الخاص بك يمكنك الاعتماد على أحد الحلول الجاهزة من أمازون Amazon أو ديجيتال أوشين Digital ocean، كما يمكنك استعمال فيجوال ستوديو من مايكروسوفت عبر الإنترنت لأداء مهامك البرمجية بدلًا من استخدام مُحرر النصوص البرمجي الخاص بك على نظامك. ويمكنك كذلك أن تستأجر خوادم فيزيائية Dedicated Servers ثم تُقسّمها إلى خوادم افتراضيةٍ Virtual Servers وتُوزّعها على مستخدمين آخرين حسب الموارد، ثم تُوّفر لهم خدمات جاهزة Software-as-a-Service واختصارًا SaaS، وهذا هو مبدأ شركات الاستضافة الحديثة والمجال السائد فكل ما تراه أصبح مخزنًا وموجودًا على سحابة وتصل إليه أو تستعمله عبر الإنترنت لذلك زاد الطلب على متخصصين في هذا المجال وتكون المسميات الوظيفية باسمه عادة مهندس حوسبة سحابية Cloud Computing Engineer. 11. تخصصات أخرى هناك مجالات ضمن علم الحاسوب تبتعد عن العلوم التطبيقية البرمجية، وتبحث في المبادئ النظرية لما تقدمه علوم الحاسب للتخصصات والمجالات الأخرى في الحياة. نظرية المعلومات Information Theory وتتحدث عن المبادئ النظرية لنقل المعلومات الرقمية ومحتواها، وإلى أي مدى يمكن ضغطها وبأي سرعاتٍ يمكن الوصول إليها. نظرية الإشارات Signal Theory وتتحدث عن الإشارات التي تُصدِرها الكائنات الحية وكيف يمكن تحديد العلاقات بينها وكيفية نمذجتها في الأنظمة الرقمية بهدف دراستها وتحليلها. نظرية الفوضى Chaos Theory ورغم أنها نظريةٌ رياضيةٌ لا تنضوي تحت علوم الحاسوب بصورةٍ مباشرةٍ، إلا أن لها تطبيقاتٌ واضحةٌ في عِدّة مجالاتٍ مثل حالة الطقس والمناخ والأنظمة المصممة لتوقّعها والتبليغ عنها، فهي تعتمد على علوم حاسوبية مثل التعمية والروبوتات وغيرها. علم التعمية Cryptography وهو واحدٌ من أكثر العلوم أهمية في علوم الحاسب لأن تطبيقاته هي التي تسمح بتشفير البيانات، ويعتمد على المبادئ الرياضية بشدةٍ، كما أنه شديد التعقيد، حيث تقوم عليه أنظمة الأمان الرقمية حول العالم بما في ذلك الأنظمة الاقتصادية. والكثير من هذه العلوم هي علوم نظرية تعتمد على مجالات متداخلة Interdisciplinary مع علوم الحاسبات، إلا أن علوم الحاسبات مركزية وأساسية فيها. كيف أختار التخصص المناسب لي من تخصصات علوم الحاسب؟ ليست كل التخصصات السابقة الذكر متوفرة في مجالات علوم الحاسب بالطبع، فهناك غيرها ولكن ذكرنا الأشيع والأشهر منها، ويبرز هنا سؤال وهو كيف يمكن لداخل جديد إلى هذه العلوم أن يختار التخصص المناسب له والذي يحبه؟ وتكمن الإجابة في معرفة المرء بنفسه وأين يحب أن يعمل فإذا كنت تحب الرياضيات فربما تناسبك العلوم النظرية، وإذا كنت تحب العمل مع الخوارزميات وتطوير الجديد منها لتسريع حل مشكلات الجنس البشري وابتكار حلول أفضل فربما قد يكون هذا اختصاصك، أو ربما ببساطة تحب تطوير البرمجيات والتطبيقات وحينها لن تحتاج شيئًا أكثر من المعارف الأساسية في علوم الحاسب ثم التخصص في تعلم البرمجة. لذا عليك أن تنظر في هذه المجالات المختلفة، ثم تسأل نفسك في أي منها يمكن أن تعمل دون أن تشعر بالملل بعد فترة؟ وستجد بضع مجالات قد تعجبك وستستبعد بعض المجالات الأخرى، فمثلًا أنا أستبعد أن أعمل في المجالات الرياضية أو مجالات التشفير، ببساطة لأنني لا أحب تعقيدها، وبعدها حاول أن تصرف بعض الساعات من وقتك في هذه المجالات التي تبقّت معك لتتعرّف عليها وترى أبرز المشاريع الموجودة فيها، وهل أحسست براحة وانشراح للنفس أثناء دراستها والعمل فيها، أم أنك تريد غيرها؟ الخلاصة، جرب التخصص والقراءة الدراسة في كل تخصص فترة من الزمن وبعدها إما أن تكمل أن تنتقل إلى تخصص آخر وهكذا تعرف الاختصاص الصحيح المناسب لك، وبعد فترة ستجد مجالات واضحة معينة لن تحب العمل في غيرها، وتلك هي المجالات التي يمكنك البدء بدراستها والتخصص بها بعد أن تنتهي من دراسة علوم الحاسوب الأساسية. التوظيف وفرص العمل في مجال علوم الحاسب تقل أهمية الشهادة الجامعية تدريجيًا في التوظيف عندما يتعلق الأمر بعلوم الحاسوب فشركات مثل جوجل بدأت تهتم بالخبرة وتعمل على نشر شهاداتها الخاصة والتي تبلغ مدتها 6 أشهر في حال عدم وجود الشهادة الجامعية، كما أن كثيرًا من الشركات الأخرى تشترط وجود الخبرة ومعرض الأعمال بدلًا من الشهادة الجامعية للمتقدِّم. وتبلغ مدة أغلب الشهادات الجامعية في معظم البلدان 4 سنوات، وهي مدةٌ طويلةُ جدًا يذهب معظمها بالانتظار والفراغ بين الحصص الدراسية الأسبوعية وتعلم علوم ومواد قد لا يكون لها أهمية كبيرة وقد تنساها بعد التخرج هذا لم نتحدث عن قلة المقاعد الدراسية الحكومية المجانية والمنافسة الشديدة عليها أو غلاء الجامعات الخاصة مما يزيد من العوامل التي تعيق أصلًا دخول الجامعة أو اختيار التخصص الذي ترغب دراسته في الجامعة فقد تضطر من أجل الدخول للجامعة والحصول على درجة جامعية أن تدرس تخصصًا لا تحبه ولا يناسبك أصلًا وهنا الحديث يطول، على أي حال، وبما أن علوم الحاسوب مجال مرتبط بالحواسيب التي بين أيدينا فقد لجأت نسبة لا بأس بها ممن يرغبون التخصص في المجال بتعلم المعلومات المطلوبة من مصادر خارجية لا علاقة لها بالجامعات الأكاديمية، دون الحاجة للدراسة الجامعية التقليدية ودخلوا سوق العمل فعليًا. ولا نريد محو أهمية الشهادات الجامعية، وذلك لأنها ما تزال تطلبها الحكومات والدول رسميًا للعمل في الوظائف الحكومية، كما لا تزال لها سمعة في الأوساط الاجتماعية على عكس من يتعلم تلك العلوم بمفرده، ولكن إذا كانت المعرفة والعمل ما يهمك فقط فحينها لا مشكلة من الخوض في المجال بعيدًا عن الدراسة الجامعية، وبذلك تكسب سنوات من عمرك بالإضافة إلى توفير الكثير من المال الذي كنت ستصرفه على الشهادة الجامعية. فمثلًا، يمكنك خلال فترة تترواح من ستة أشهر إلى سنة أن تتعلم أساسيات علوم الحاسوب وأن تبدأ العمل فيها مثلًا أن تتخصص في البرمجة وتطوير المواقع وتدخل سوق العمل وأغلب الدورات الحرة التي تعلم الاختصاص تكون مدتها ستة أشهر وحتى السنة وهي كافية لوضع قدمك على الطريق ودخول وكسب فرصة عمل. فمؤسسي أكبر الشركات التقنية في العصر الحديث، مثل مارك زوكيربيرغ مؤسس فيسبوك، وجاك دورسي مؤسس تويتر، وستيف جوبز مؤسس آبل لم يتخرجوا من الجامعات، وكذلك فهناك غيرهم الكثير من مدراء ورؤساء الشركات التقنية، ولهذا لن تكون الشهادة الجامعية عائقًا أمامك في حال أردت سلوك نفس المسار العصامي. وهنالك الكثير من المبرمجين الماهرين اليوم الذين لم يدخلوا إلى الجامعة أو درسوا اختصاصًا مختلفًا وهم يعملون في شركات كبيرة منها شركة IBM وهو لا يملك درجة في أي تخصص من تخصصات الحاسب وحتى أنه يساهم في كتابة بحث مع من درس في أروقة الجامعات. أضف إلى ذلك أنه يمكنك العمل كعامل مستقل على حسب الاختصاص الذي تجيده من اختصاصات علوم الحاسوب؛ فلو كنت مطور ويب محترف فيمكنك تطوير المواقع الإلكترونية للعملاء عبر مواقع العمل الحر مثل مستقل، ففي العمل الحر لن يسألك أحد بتاتًا عن شهادتك الجامعية وكل ما سيسألونك عنه هو خبراتك ونماذج لأعمالك السابقة نفذتها لا أكثر. أما عن فرص العمل المتوفرة في الشركات فهي تختلف باختلاف البلدان والشركات التي تريد العمل فيها، ولكنها تنضوي جميعًا تحت قسم التخصصات الذي تحدثنا فيه بصورة موسعة عن تخصصات علوم الحاسوب التي يمكن للمرء الاختصاص فيها، فمثلًا يمكنك العمل بتخصص مهندس برمجيات أو يتخصص في مجال الذكاء الاصطناعي أو مطور أنظمة تشغيل …إلخ على حسب المسميات الوظيفية المتوفرة في الشركات. انظر مثلًا إلى موقع بعيد، حيث تجد فيه طلبات توظيف من شركات مختلفة حول العالم العربي، وستجد أن معظم الوظائف لا تشترط أي نوع من أنواع الشهادات، بل تشترط معرض أعمال وخبرة سابقة فقط. وتكون رواتب المتخصصين في علوم الحاسوب متعلقة بعدة عوامل منها التخصص والخبرة والأعمال المنجزة وكذلك باختلاف الشركات والأماكن والدول، لكن يمكننا القول بصورة عامة أن رواتبهم أعلى من المهندسين الآخرين، ويمكنك البحث عن المواقع التي تَعرِض لك متوسط الرواتب التي يتلقاها الموظفون حسب المهنة في بلدك ثم البحث فيها عن التخصصات السابقة لرؤية مُعدّل الرواتب في بلدك. ما الفرق بين علوم الحاسب وهندسة الحاسب؟ على عكس الشائع فلا يوجد فرق جوهري بين علوم الحاسب computer science وهندسة الحاسب computer engineering وذلك لأن الجامعات الموجودة في دول مختلفة حول العالم تتعامل مع المصطلحين بطريقة مختلفة، فتجد في بعض الجامعات وفي بعض البلدان أن التخصصين مجرد اسمين مختلفين لنفس المواد الجامعية، فمثلًا الجامعة التي تخرجت منها كان تخصصي فيها هو هندسة وعلوم الحاسوب، أي أنني درست الاثنين معًا، ولم يكن هناك فرق في المواد التي درسناها مع الجامعات الأخرى. أما في بعض البلدان الأخرى مثل الولايات المتحدة هناك فرق حيث تكون علوم الحاسب علومًا أقرب للأقسام النظرية والفهم العام لمختلف المجالات والتخصصات، بينما تركز هندسة الحاسوب بالتحديد على علوم البرمجيات Software وعلوم العتاد Hardware والعلاقات والمشاريع التي يمكن تنفيذها بالدمج بينهما، أي أن هندسة الحاسوب تخصص هندسي تقليدي أقرب للعلوم العملية من تخصص علوم الحاسوب الأقرب للعلوم النظرية المفاهيمية. ويُعَد مصطلح علوم الحاسوب مصطلحًا جديدًا نسبيًا إذ كان التركيز قديمًا على هندسة البرمجيات Software Engineering وهندسة الحاسوب Computer Engineering وشاع المصطلح بعد 2010م وصار يشمل كل هذه العلوم وأكثر. من أين أبدأ بتعلم علوم الحاسوب؟ إن كنت تفكر بالدراسة الجامعية الأكاديمية، فهي من سيرشدك للبدء ويوفر لك المواد المتسلسلة في سنوات الدراسة ويؤمن لك كل شيء خلال رحلتك في دراسة علوم الحاسب وتخصصاته أما إن كنت ممن يريد دراسة مجال علوم الحاسوب ذاتيًا والتخصص فيه دون اللجوء إلى الجامعة، فأنت في المكان الصحيح الذي سيرشدك إلى بداية الطريق. من الأفضل لك أن تبحث عن بعض الدورات المتكاملة للبدء في تعلم علوم الحاسب بدلًا من الدروس المتفرقة، فمن الصعب على طالب جديد لا يعرف شيئًا في المجال أن يدخل فيه مباشرةً ويتعلم ما يحتاج إليه من دروس في كل مادة وتخصص من تلك المواد والتخصصات، بينما الدورات المتكاملة تكون مجهزة وكاملة وفق خطة معينة من متخصصين. عملت أكاديمية حسوب على توفير دورة متكاملة عن أساسيات علوم الحاسب هي دورة علوم الحاسوب وهي دورة شاملة مدتها عشرات الساعات حول علوم الحاسوب بدءًا من أبسط الأساسيات وصولًا إلى الخوارزميات وهياكل البيانات والبرمجة وقواعد البيانات وتطوير الويب وإدارة الخوادم، كما أنها تحت التوسيع والتحديث المستمر، ومن أبرز ميزاتها أن هناك من يتابع سَيْرَك ويجيب على أسئلتك على امتداد الدورة وليست فقط مجرد فيديوهات. ستكون مؤهلًا بعد الدورة من التخصص والغوص في إحدى مجالات علوم الحاسب التي تحبها وتريد تعلمها وقد وفرت الأكاديمية بعد دورة علوم الحاسب دورات أخرى إن أحببت الاختصاص في مجال البرمجة وتطوير البرمجيات لإكمال طريقك وستكون جاهزًا لدخول سوق العمل وبدء الكسب مما تعلمت خلال فترة قصيرة لا تتجاوز السنة بناءً على همتك وعزيمتك. وإذا وصلت إلى مرحلة أنت جاهزٌ فيها لتَعلّم البرمجة، فيمكنك قراءة الدليل الشامل لتعلم البرمجة باستخدام المصادر العربية ففيه أبرز المصادر العربية المتوفرة في الشبكة لتعلم البرمجة. كما يمكنك البحث في الشبكة عن سلاسل فيديوهات أو كتب لتُعلّمك تخصص علوم الحاسب بأي لغةٍ تجيدها، وجوجل مليءٌ بالنتائج عن ذلك كما أن أكاديمية حسوب تعمل جاهدًا على توفير مراجع عالية الجودة لتساعدك في ذلك، فتابع دومًا قسم المقالات البرمجية وقسم الكتب البرمجية. خاتمة وصلنا إلى نهاية هذا المقال بعد أن اطلعنا على أبرز علوم الحاسب وماهية التخصصات الموجودة فيه، ولا تنسَ أن هذا المقال مجرد مقدمة وسيكون عليك صَرْف العديد من الساعات لتتعلّم هذا المجال وتغوص فيه بصورة أعمق. وصحيح أن تعلم علوم الحاسوب قد يكون صعبًا في البداية للوافدين الجدد عليه، ولكن النتيجة مثمرةٌ جدًا حيث يمكنك استخدام أحد أبرز العلوم في العصر الحديث وأهمها لأي غرض أو هدف تريده، سواء كان ذاك الهدف شخصيًا أو ماديًا بهدف الكسب والرزق. إن كان لديك أي سؤال أو استفسار، فلا تتردد بطرحه في التعليقات ونسعد بمشاركتنا تجربتك، أرجو لك التوفيق والسداد! اقرأ أيضًا دليلك الشامل لتعلم البرمجة دليل شامل عن تحليل تعقيد الخوارزمية المرجع الشامل إلى تعلم لغة بايثون ما هي فوائد تعلم البرمجة؟ مدخل إلى الذكاء الاصطناعي وتعلم الآلة
    1 نقطة
  43. السلام عليكم ورحمة الله وبركاته، أحد الطلاب في الأكاديمية، وأود أن أطلب مساعدتكم أو إرشادكم بخصوص مشروعي الأول. قمت ببناء منصة تعليمية خاصة بالهندسة الكيميائية باستخدام MERN Stack، والمنصة حالياً تحتوي على كورسات تعليمية عبارة عن فيديوهات. أود معرفة أفضل طريقة لرفع هذه الفيديوهات وعرضها على المنصة بحيث تكون: مناسبة لميزانيتي المحدودة. سهلة التنفيذ كمطور مبتدئ. قابلة للتطوير في المستقبل. هل يمكنكم تقديم نصيحة أو توجيهي إلى أفضل الحلول المناسبة لحالتي؟ أيضاً، إذا كانت لديكم أي موارد أو أدوات تعليمية إضافية يمكن أن تفيدني في هذا المشروع، سأكون ممتناً جداً لمساعدتكم.
    1 نقطة
  44. عمل رائع ومفيد للغاية 😍👏🏻 بالطبع سأجرب تلك الأداة
    1 نقطة
  45. تخطيط الشبكة Grid هو أسلوب تخطيط ثنائي الاتجاه يستخدم لترتيب عناصر صفحة الويب، إذ يسمح بتوضع المحتوى ضمن أسطر وأعمدة ويقدم ميزات عدة تسمح بتنفيذ التخطيطات المعقدة بأسلوب مباشر. وسنقدم لك في هذا المقال كل ما تحتاجه لتبدأ العمل على تخطيط الصفحات باستخدامه. قبل البدء في قراءة هذا المقال يتوجب عليك أن: تطلع على أساسيات HTML كما شرحناها في سلسلة مقالات مدخل إلى HTML. تتفهم أساسيات عمل CSS. ما هو تخطيط الشبكة Grid Layout؟ الشبكة هي مجموعة من الخطوط الأفقية والعمودية التي تشكل نموذجًا لترتيب العناصر ضمنه. يمكّننا هذا التخطيط من إنشاء تخطيطات لا تقفز فيها العناصر أو تغير اتساعها عند الانتقال من صفحة إلى أخرى مما يمنح موقع الويب تناسقًا أفضل. وتتكون الشبكة تقليديًا من أعمدة وصفوف، وفراغات بين كل سطر وكل عمود، وتُعرف هذه الفراغات بالأقنية gutters كما في الصورة التالية: إنشاء شبكة باستخدام CSS إن قررت أن تخطيط الشبكة هو ما يحتاجه تصميم صفحة الويب الخاصة بك، يمكنك استخدام لغة CSS لإنجاز الأمر. سنلقي نظرة على الميزات الأساسية لتخطيط الشبكة أولًا، ثم نستكشف كيفية إنشاء تخطيط شبكة بسيط لمشروعك. تحديد الشبكة بداية حمًل وافتح هذا الملف الذي سيكون نقطة الانطلاق للعمل ضمن محرر الكود وضمن المتصفح. يعرض هذا المثال حاوية تضم عدة عناصر أبناء لها تخطيط الانسياب الاعتيادي افتراضيًا، إذ تظهر تحت بعضها. سنتعامل مع هذا الملف في القسم الأول من مقالنا، ونطبق بعض التغييرات لاستيعاب سلوك تخطيط الشبكة. ولتعيين شبكة نستخدم القيمة grid للخاصية display. ستفعّل هذه القيمة تخطيط الشبكة، وستتحول جميع العناصر ضمن هذه الحاوية إلى عناصر شبكة grid item. لهذا ضع التصريح التالي ضمن الملف: .container { display: grid; } وعلى خلاف الصندوق المرن، لن تجد اختلافًا مباشرًا في توضع العناصر عند تطبيق القاعدة display: grid، لأن هذا التصريح سيضع العناصر ضمن شبكة من عمود واحد وستبقى فوق بعضها البعض كما هو الحال في الانسياب الاعتيادي. ولترى شيئًا أقرب إلى الشبكة، لا بد من إضافة أعمدة جديدة إليها. لهذا سنضع ثلاث أعمدة لكل منها اتسع مقداره 300 بكسل. يمكنك اختيار أي واحدة طول أو نسبة مئوية لضبط اتساع هذه الأعمدة. .container { display: grid; grid-template-columns: 200px 200px 200px; } أضف التصريح الثاني إلى قاعدة CSS ثم أعد تحميل الصفحة وسترى كيف رتبت العناصر نفسها ليحتل كل منها مكانًا في الشبكة. See the Pen grid1 by Hsoub Academy (@HsoubAcademy) on CodePen. الشبكات المرنة واستخدام الواحدة fr يمكنك تعيين الشبكات بوحدات fr إضافة إلى وحدات الطول والنسب المئوية. وتمثل هذه الوحدة جزءًا من المساحة المتاحة ضمن حاوية الشبكة وتتيح مرونة في تحجيم الأسطر والأعمدة. غيّر القاعدة السابقة كي ننشئ ثلاث أعمدة اتساع كل منها 1fr أي جزء من كل: .container { display: grid; grid-template-columns: 1fr 1fr 1fr; } تتميز الشبكة الآن بوجود مسارات مرنة، إذ توزع الوحدة fr المساحة المتوفرة بشكل تناسبي. وبإمكانك طبعًا استخدام أية قيم موجبة للمسارات في شبكتك كالتالي: .container { display: grid; grid-template-columns: 2fr 1fr 1fr; } إذ يأخذ المسار (عمود هنا) جزئين 2fr من أصل أربعة أجزاء كلية من المساحة المتوفرة بينما يأخذ كل من المسارين التاليين جزءًا واحدًا 1fr وبالتالي سيكون العمود الأول أكثر اتساعًا. وبإمكانك المزج بين الوحدة fr ووحدات الأطوال الثابتة، وفي هذه الحالة تحجز المساحة اللازمة للمسارات ثابتة الاتساع ثم يجري توزيع المساحة الباقية على المسارات التي تحمل قيمًا نسبية. See the Pen grid2 by Hsoub Academy (@HsoubAcademy) on CodePen. ملاحظة: تتوزع المساحات المتاحة فقط بين المسارات عند استخدام الوحدة fr وليس كامل المساحة، بمعنى أنه إذا شغل مسار مساحة أكبر لأن محتواه أكبر سيقل الفراغ الذي تتقاسمه المسارات. الأقنية بين المسارات لإنشاء فراغات بين المسارات، نستخدم الخاصيات التالية: column-gap: للفراغات (الأقنية) بين الأعمدة. row-gap: الفراغات بين الأسطر. gap: خاصية تختصر الخاصيتين السابقتين. .container { display: grid; grid-template-columns: 2fr 1fr 1fr; gap: 20px; } يمكن أن تُقدّر أبعاد الأقنية بأي وحدة قياس ثابتة أو نسبة مئوية ما عدا الوحدة التناسبية fr. See the Pen grid3 by Hsoub Academy (@HsoubAcademy) on CodePen. ملاحظة: سبُقت الخاصيات السابقة في المواصفات الأقدم بالبادئة -grid لكن المواصفات الجديدة ألغتها. مع ذلك يبقى استخدامها صحيحًا كاسم بديل. لهذا كي تبقى في مأمن من المشاكل وتُبقي شيفرتك منيعة استخدم كلتا النسختين من الخاصية: .container { display: grid; grid-template-columns: 2fr 1fr 1fr; grid-gap: 20px; gap: 20px; } تكرار المسارات الموجودة بإمكانك تكرار جميع مسارات الشبكة أو جزء منها باستخدام الدالة ()repeat التي تقدمها CSS. لترى ذلك، غير طريقة جدولة المسارات في التصريح السابق إلى الشكل التالي: .container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; } ستكون النتيجة ظهور ثلاثة أعمدة متناسبة 1fr من حيث الاتساع كما سبق. إذ يشير المعامل الأول من الدالة ()repeat إلى عدد مرات التكرار بينما يشير المعامل الثاني إلى عدد المسارات، فقد ترغب بتكرارها أكثر من مسار. الشبكات الصريحة والمضمنة لقد خصصنا في الشبكة أعمدةً فقط حتى اللحظة، بينما ظهرت الأسطر تلقائيًا لتناسب المحتوى وهذا مثال عن الشبكات الصريحة مقابل الشبكات الضمنية. وإليك الفرق: الشبكات الصريحة: تُنشأ باستخدام الخاصيتين grid-template-columns أو grid-template-rows. الشبكات الضمنية: توسّع الشبكة الصريحة عندما لا تستطيع الشبكة احتواء المحتوى كأن يظهر ضمن أسطر جديدة. تنشأ المسارات في الشبكات الضمنية بأبعاد تلقائية auto افتراضيًا، وهذا يعني عمومًا بأنه واسعة كفاية لتضم المحتوى. ولمنح الشبكات الضمنية مسارات بأبعاد مخصصة، بإمكانك استخدام الخاصيتين grid-auto-rows و grid-auto-columns. فإن خصصت القيمة 100px للخاصية grid-auto-rows سترى بأن ارتفاع الصفوف التي تنشأ هو 100 بكسل. .container { display: grid; grid-template-columns: repeat(3, 1fr); grid-auto-rows: 100px; gap: 20px; } See the Pen grid4 by Hsoub Academy (@HsoubAcademy) on CodePen. الدالة ()minmax لن يكون ارتفاع 100 بكسل كافيًا في حالتنا السابقة إن أردنا وضع محتوى أطول من 100 بكسل، وبالتالي يحدث عندها الطفحان overflow. لهذا من الأفضل أن يكون ارتفاع المسارات 100 بكسل على الأقل وتكون قادرة على التوسع أكثر عند إضافة محتوى أكبر. ومن المعروف عمومًا في تصميم الويب أنه من الصعب توقع ارتفاع أي عنصر وخاصة عند إضافة محتوى أو عند تغيير حجم الخط مما قد يسبب مشاكل في التصميمات التي تحاول أن تجعل التصميم مثاليًا من كل النواحي. تتيح لنا الدالة ()minmax تحديد الحجم الأدنى والأقصى للمسار، فالصيغة minmax(100px, auto) للدالة تحدد حجمًا أدنى للمسار مقداره 100 بكسل، بينما حددت قيمة الحجم الأقصى ليكون تلقائيًا auto وتعني أن العنصر سيتوسع حتى يستوعب المحتوى. جرّب ضبط قيمة الخاصية grid-auto-rows باستخدام هذه الدالة: .container { display: grid; grid-template-columns: repeat(3, 1fr); grid-auto-rows: minmax(100px, auto); gap: 20px; } فإن أضفت محتوى أكبر سترى كيف يتوسع المسار حتى يستوعب المحتوى الجديد. لاحظ كيف يحدث التوسع أفقيًا مع السطر. أعمدة بقدر ما تتسع له المساحة بإمكاننا تطبيق الأفكار التي تعلمناها سابقًا حول ترتيب المسارات والتكرار والدالة ()minmax لإنشاء نماذج مفيدة. فمن الجيد أحيانًا أن تكون الشبكة قادرة على إنشاء أعمدة بقدر ما تتسع لها الحاوية. ولإنجاز ذلك، نضبط قيمة الخاصية grid-template-columns باستخدام الدالة ()repeat لكن بدل أن نمرر لها المعامل الأول عددًا، نمرر لها القيمة auto-fill. كما نستخدم الدالة ()minmax كمعامل ثاني ونحدد فيها قيمة أصغر قياس نريده للأعمدة، ونجعل قيمة أكبر قياس هو 1fr. جرّب ذلك بكتابة الشيفرة التالية: .container { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); grid-auto-rows: minmax(100px, auto); gap: 20px; } See the Pen Untitled by Hsoub Academy (@HsoubAcademy) on CodePen. نجح الأمر لأن الشبكة ستنشئ أكبر عدد ممكن من الأعمدة التي اتساعها 200 بكسل يمكن للحاوية استيعابها ومن ثم تقسم المساحات الفارغة الباقية بين جميع الأعمدة من خلال القيمة 1fr التي رأينا أنها توزّع المساحة بالتساوي بين المسارات. توزيع المحتوى وفقًا للأسطر ننتقل الآن من إنشاء الشبكات إلى وضع المحتوى ضمنها، وقد رأينا أن للشبكة أسطر، وهذه الأسطر مرقمة ابتداءً من 1 وتتعلق بنمط الكتابة في الصفحة. إذ يُكتب السطر الأول من العمود في الإنكليزية (التي تُكتب من اليسار إلى اليمين) انطلاقًا من الناحية اليسرى للشبكة ويكون هذا السطر في الأعلى، أما في العربية التي تُكتب من اليمين إلى اليسار فستبدأ كتابة المحتوى في العمود من يمين الشبكة. بإمكاننا ترتيب الأشياء وفقًا لهذه لأسطر الكتابة بتحديد بداية ونهاية السطر من خلال الخاصيات التالية: grid-column-start grid-column-end grid-row-start grid-row-end يمكن لجميع الخاصيات أن تأخذ رقم السطر كقيمة لها، كما يمكن استخدام الخاصيات المختصرة التالية: grid-column grid-row التي تتيح لك تحديد بداية ونهاية السطر مباشرة وتفصل بين القيمتين الشرطة المائلة /. لتجريب الأمر، نزّل الملف الذي يضم شيفرة المثال التالي (يمكنك أيضًا الاطلاع على كيفية عملها مباشرة على جيت-هاب). ويضم الملف شبكة ومقال بسيط. لاحظ كيف توضِّع القيمة كل عنصر ضمن خلية مخصصة من الشبكة، ولترتيب جميع العناصر في الشبكة باستخدام أسطر الشبكة، أضف القواعد التالية غلى نهاية شيفرة CSS: header { grid-column: 1 / 3; grid-row: 1; } article { grid-column: 2; grid-row: 2; } aside { grid-column: 1; grid-row: 2; } footer { grid-column: 1 / 3; grid-row: 3; } See the Pen grid6 by Hsoub Academy (@HsoubAcademy) on CodePen. ملاحظة: بإمكانك أيضًا استخدام القيمة 1- كي تستهدف نهاية العمود أو السطر ثم اعدد ابتداءً من النهاية إلى البداية باستخدام القيم السالبة. وتذكر أن الأسطر تُعدّ دائمًا من حافة الشبكة الصريحة وليست الضمنية. ترتيب العناصر باستخدام الخاصية grid-template-areas توجد طريقة بديلة لترتيب العناصر في الشبكة باستخدام الخاصية grid-template-areas وإعطاء أسماء للعناصر المختلفة في التصميم. لتقف على الأمر، أزل شيفرة ترتيب العناصر وفق الأسطر في المثال السابق ثم أضف الشيفرة التالية بدلًا عنها: .container { display: grid; grid-template-areas: "header header" "sidebar content" "footer footer"; grid-template-columns: 1fr 3fr; gap: 20px; } header { grid-area: header; } article { grid-area: content; } aside { grid-area: sidebar; } footer { grid-area: footer; } أعد تحميل الصفحة وسترى أن العناصر قد رُتبّت بالطريقة السابقة نفسها دون أن تستخدم أية أرقام للأسطر. See the Pen grid7 by Hsoub Academy (@HsoubAcademy) on CodePen. إليك قواعد الخاصية grid-template-areas: عليك ملئ كل خلية من خلايا الشبكة. كرر الاسم لتضم خليتين في خلية واحدة. استخدم النقطة . لتترك الخلية فارغة. لا بد أن تكون مساحة الشبكة مربّعة. فلا يمكنك مثلًا تصميم شبكة على شكل حرف L. لا يمكن تكرار المساحات في أماكن مختلفة. بإمكانك تجريب عدة خيارات في تخطيط الشبكة بهذه الطريقة، حاول مثلًا وضع التذييل تحت المقالة فقط وأن تجعل الشريط الجانبي يمتد للأسفل. هذا الطريقة في تخطيط الشبكة جميلة جدًا لأنها واضحة، وبمجرد النظر إلى شيفرة CSS ستعرف تمامًا ما الذي سيحدث. إطارات العمل مع الشبكة في شبكات CSS تميل إطارات العمل مع الشبكات grid frameworks لتكون شبكات مكونة من 12-16 عمود. ولا حاجة بالطبع إلى أدوات أخرى سوى شبكة CSS لتنفيذ إطار العمل هذا، فهي موجودة فعلًا في المواصفات. نزّل الملف الذي يضم شيفرة المثال التالي وهي عبارة عن حاوية مكونة من شبكة تتكون من 12 عمودًا، وتبقى شيفرة HTML نفسها التي استخدمناها في المثال السابق. بإمكاننا الآن استخدام التوضع المبني على الأسطر لتوزيع المحتوى ضمن شبكتنا ذات 12 عمودًا: header { grid-column: 1 / 13; grid-row: 1; } article { grid-column: 4 / 13; grid-row: 2; } aside { grid-column: 1 / 4; grid-row: 2; } footer { grid-column: 1 / 13; grid-row: 3; } See the Pen grid8 by Hsoub Academy (@HsoubAcademy) on CodePen. إن استخدمت الأداة Firefox Grid Inspector لتوضح خطوط الشبكة في تصميمك، سترى كيف تعمل تمامًا شبكتنا ذات 12 عمودًا: الخلاصة تجولنا في مقالنا على الميزات التي يقدمها تخطيط الشبكة Grid Layout في لغة CSS، واستعرضنا أمثلة مختلفة على استخدامه في ترتيب عناصر صفحة الويب وتنفيذ التخطيطات المعقدة بسهولة كبيرة، ومن المفترض أن تصبح قادرًا الآن على استخدام الشبكات بفعالية ضمن تصميماتك. ترجمة -وبتصرف- للمقال: Grids اقرأ أيضًا المقال السابق: تخطيط الصندوق المرن Flexbox في صفحات الويب مدخل إلى تخطيط صفحات الويب باستخدام CSS تعرف على أساسيات CSS تقنيات كتابة شيفرات CSS احترافية وسهلة الصيانة التحكم في تموضع العناصر في CSS
    1 نقطة
  46. إذا كنت من محبي لغة البرمجة بايثون وترغب في تعلمها واحترافها وتبحث عن اكواد مشاريع بايثون فهذا المقال سيوفر لك مجموعة متنوعة من مشاريع بايثون للمبتدئين الذين أنهوا تعلم أساسيات لغة بايثون ويرغبون في تعزيز معرفتهم بالتطبيق العملي والتدرب على طريقة التفكير في حل مشكلات برمجية مختلفة والاستفادة من الوحدات والمكتبات العديدة التي توفرها لغة بايثون المناسبة التي تساعد على حلها بسلاسة وسرعة. سنوفر لك الأكواد البرمجية لهذه المشاريع، لكن الأفضل قبل أن تطلع على أكواد المشاريع أن تفكر في طريقة حل كل مشروع منها وتبحث عن المكتبات المساعدة لحله وطريقة استخدامها، كما يفضل أن تقوم بكتابة كافة الأكواد بنفسك وتعمل على تحسينها وإضافة أفكار جديدة لها والتدرب على تصحيح أي أخطاء تظهر لك خلال التنفيذ، فهذا يساعدك على تحقيق الهدف من المقال بشكل أفضل. أهمية تنفيذ مشاريع بايثون للمبتدئين لاشك أن تطبيق مشاريع عملية خطوة ضرورية لأي مبرمج أنهى تعلم أساسيات لغة البرمجة وفهم أهم مبادئ البرمجة بشكل نظري، فبعد أن تنهي تعلم أساسيات لغة بايثون يمكنك البدء بتنفيذ أفكار مشاريع بسيطة تطبق من خلالها ما تعلمته من مفاهيم نظرية وتصقل مهاراتك البرمجية من خلال التعلم من الأخطاء التي تواجهها وتعمل على تصحيحها، فمهما قرأت من دروس وكتب وشاهدت من مقاطع فيديو فلن تتقن ما تتعلمه إذا لم تطبق ما تتعلمه على مشاريع فعلية. ستجد في الفقرات التالية عدة أفكار لمشاريع بايثون مختلفة بعضها غاية في البساطة وبعدها أصعب قليلًا كي تتعلم من خلالها تنفيذ بعض العمليات الرياضية ومعالجة النصوص والتعامل مع عناصر الواجهة الرسومية واستخراج بيانات الويب، وهذه المشاريع هي: مشروع آلة حاسبة بلغة بايثون. مشروع بايثون لطباعة سلسلة أعداد فيبوناتشي. مشروع التحقق من قوة كلمة المرور. مشروع حساب عدد الأحرف الصوتية والفراغات والكلمات في نص. مشروع حاسبة الزكاة. مشروع حل معادلة درجة ثانية ورسم خطها البياني. مشروع ساعة رقمية. مشروع استخراج بيانات من موقع ويب. سنتناول في فقراتنا التالية كل مشروع من مشاريع بايثون المذكورة في هذه القائمة ونشرح الهدف منه ونوضح ما هي مدخلاته ومخرجاته وأهم خطوات تنفيذه برمجيًا. مشروع آلة حاسبة بلغة بايثون يعد مشروع تنفيذ الآلة الحاسبة من خلال واجهة سطر الأوامر أحد مشاريع بايثون البسيطة التي يمكنك من خلالها تطبيق العديد من المفاهيم مثل تعريف المتغيرات وتخزين القيم فيها، والتعامل مع أنواع البيانات المختلفة في بايثون مثل الأرقام الصحيحة والأرقام العشرية، وكيفية طلب البيانات من المستخدم وقراءتها وتحويلها لقيم عددية، وتعريف دوال لتنفيذ العمليات الحسابية واستخدام العبارات الشرطية لاستدعاء وتنفيذ الدالة الحسابية الصحيحة بناءً على شروط معينة وهذه المفاهيم على بساطتها تمكنك من كتابة مشاريع بايثون أكثر تعقيدًا فيما بعد. الدخل: رمز العملية الحسابية المطلوب إجراؤها والعددان المطلوب تنفيذ العملية عليهما (يجب أن يدخل المستخدم رمز صحيح وإلا يمكن أن تعرض له رسالة تطلب منه إدخال رمز صحيح أو تنهي البرنامج) الخرج: هو طباعة نتيجة العملية الحسابية. كود مشروع آلة حاسبة باستخدام بايثون: # calculator1.py # دالة جمع عددين def add(num1, num2): return num1 + num2 # دالة طرح عددين def subtract(num1, num2): return num1 - num2 # دالة جداء عددين def multiplnum2(num1, num2): return num1 * num2 # دالة قسمة عددين def divide(num1, num2): if num2 == 0: return "لا يمكنك القسمة على صفر" return num1 / num2 # استدعاء الدالة المناسبة print("اختر العملية الحسابيةالمطلوبة ") print("للجمع اختر 1 ") print("للطرح اختر 2 ") print("للجداء اختر 3 ") print("للقسمة اختر 4 ") print("اختر أي مفتاح آخر لأنهاء التنفيذ") while True: # إدخال قيمة العددين choice = input("حدد العملية المطلوبة (1/2/3/4): ") if choice in ("1", "2", "3", "4"): num1 = float(input("Enter first number: ")) num2 = float(input("Enter second number: ")) if choice == "1": print(num1, "+", num2, "=", add(num1, num2)) elif choice == "2": print(num1, "-", num2, "=", subtract(num1, num2)) elif choice == "3": print(num1, "*", num2, "=", multiplnum2(num1, num2)) elif choice == "4": print(num1, "/", num2, "=", divide(num1, num2)) else: print("إنهاء التنفيذ ") break عند تنفيذ المشروع سنحصل على خرج مشابه لما هو مبين في الصورة التالية: يمكنك إجراء بعض التحسينات على الكود السابق كأن تنشئ مكتبة أو وحدة خاصة بك لتعريف الدوال الحسابية وليكن اسمها math_operations.py ثم تستوردها في ملف البرنامج الرئيسي لتفهم الغرض من مكتبات باثيون فعندما تستورد مكتبة بايثون ستتمكن من الوصول لكافة وظائفها العامة وهذا ينظم كود مشروعك ويسهل فهمه وصيانته. لاحظ الكود التالي عرفنا في البداية ملف باسم math_operations.py يمثل المكتبة ويتضمن تعريف كافة العمليات الحسابية. # math_operations.py # استيراد المكتبة import math_op # استدعاء الدالة المناسبة print("اختر العملية الحسابيةالمطلوبة ") print("للجمع اختر 1 ") print("للطرح اختر 2 ") print("للجداء اختر 3 ") print("للقسمة اختر 4 ") print("اختر أي مفتاح آخر لأنهاء التنفيذ") while True: # إدخال قيمة العددين choice = input("حدد العملية المطلوبة (1/2/3/4): ") if choice in ("1", "2", "3", "4"): num1 = float(input("أدخل العدد الأول ")) num2 = float(input("أدخل العدد الثاني ")) if choice == "1": print(num1, "+", num2, "=", math_op.add(num1, num2)) elif choice == "2": print(num1, "-", num2, "=", math_op.subtract(num1, num2)) elif choice == "3": print(num1, "*", num2, "=", math_op.multiplnum2(num1, num2)) elif choice == "4": print(num1, "/", num2, "=", math_op.divide(num1, num2)) else: print("إنهاء التنفيذ ") break ثم عرفنا ملف المشروع الأساسي calculator2.py الذي يستورد المكتبة ويستخدم وظائفها كما يلي: # calculator2.py # استيراد المكتبة import math_op # استدعاء الدالة المناسبة print("اختر العملية الحسابيةالمطلوبة ") print("للجمع اختر 1 ") print("للطرح اختر 2 ") print("للجداء اختر 3 ") print("للقسمة اختر 4 ") print("اختر أي مفتاح آخر لأنهاء التنفيذ") while True: # إدخال قيمة العددين choice = input("حدد العملية المطلوبة (1/2/3/4): ") if choice in ("1", "2", "3", "4"): num1 = float(input("أدخل العدد الأول ")) num2 = float(input("أدخل العدد الثاني ")) if choice == "1": print(num1, "+", num2, "=", math_op.add(num1, num2)) elif choice == "2": print(num1, "-", num2, "=", math_op.subtract(num1, num2)) elif choice == "3": print(num1, "*", num2, "=", math_op.multiplnum2(num1, num2)) elif choice == "4": print(num1, "/", num2, "=", math_op.divide(num1, num2)) else: print("إنهاء التنفيذ ") break لتنفيذ هذا المشروع بشكل صحيح يجب أن تحفظ كل من ملف المشروع الرئيسي calculator2.py وملف المكتبة التي عرفتها math_op.py في نفس المجلد. توصيات حول المشروع: جرب أن تضيف المزيد من التحسينات على هذا المشروع بأن تعرف دوال رياضية مثل دالة حساب رفع عدد لأس، أو حساب الجذر التربيعي لعدد ما، وجرب كذلك أن تحوله إلى مشروع واجهة رسومية بالاعتماد على مكتبات بايثون المناسبة. دورة تطوير التطبيقات باستخدام لغة Python احترف تطوير التطبيقات مع أكاديمية حسوب والتحق بسوق العمل فور انتهائك من الدورة اشترك الآن مشروع بايثون لطباعة سلسلة أعداد فيبوناتشي يعد مشروع طباعة سلسلة أعداد فيبوناتشي Fibonacci series على بساطته من مشاريع بايثون الكلاسيكية للمبتدئين فهي تعلمه كيف يفكر منطقيًا في الخطوات اللازمة لحساب وطباعة سلسلة أعداد فيبوناتشي وكتابة دالة برمجية مناسبة تحقق له المطلوب. سلسلة فيبوناتشي هي عبارة عن سلسلة من الأعداد تبدأ بالعددين 0 و 1 والأعداد التالية ناتجة عن مجموع العددين السابقين، أي تكون أرقام السلسلة على النحو التالي: F(0) = 0 F(1) = 1 F(2) = 0+1=1 F(3) = 1+1=2 F(3) = 2+1=3 F(n) = F(n-1) + F(n-2) (n > 1) وهذه السلسلة لها تطبيقات واسعة في الرياضيات وعلوم الحاسوب والهندسة وغيرها من المجالات. الدخل: عدد عناصر السلسلة المطلوب حسابها وليكن num. الخرج: طباعة عناصر السلسلة. هناك طريقتان يمكنك من خلالهما تنفيذ هذا البرنامج، الأولى باستخدام حلقات التكرار (Loops) في بايثون والثانية باستخدام مفهوم التعاود (Recursion)، سنكتب الكود البرمجي لمشروع بايثون يعرض سلسلة أعداد فيبوناتشي بطريقة التعاود كما يلي: #fibonacci-series.py # سلسلة أعداد فيبوناتشي def fibonacci(n): if n == 1 or n == 0: return n; else: return fibonacci(n-2) + fibonacci(n - 1) num = int(input("أدخل عددًا صحيحًا موجبًا ")) if num < 0: print("العدد الذي أدخلته سالب") i = 0 print("سلسلة أعداد فيبوناتشي \n: ") for i in range(0, num+1): print("F(", i, "):", fibonacci(i)) عند تنفيذ المشروع نحصل على الخرج التالي: جرب تنفيذ المشروع باستخدام إحدى الحلقات التكرارية في بايثون ونفذه على قيم دخل كبيرة وقارن سرعة الحل بين طريقة حلقات التكرار وطريقة التعاود واستنتج أيهما أسرع وأكثر كفاءة. مشروع التحقق من قوة كلمة المرور ستحتاج في الكثير من مشاريع بايثون لا سيما في مواقع وتطبيقات الويب التي تحتاج لتسجيل دخول المستخدمين إلى التحقق من قوة كلمة المرور التي يدخلها المستخدم لضمان أمانه وحماية حسابه من الاختراق، وفي هذا المشروع سنكتب الكود البرمجي اللازم لفحص كلمة مرور المستخدم وتحديد فيما إذا كانت كلمة المرور قوية أم ضعيفة بناءً على مجموعة من الشروط وهي كالتالي: يجب أن تحتوي كلمة المرور على حروف صغيرة (a-z). يجب أن تحتوي كلمة المرور على حروف كبيرة (A-Z). يجب أن تحتوي كلمة المرور على محارف خاصة (!@#$^%). يجب أن تحتوي كلمة المرور على أرقام (0-9). يجب أن لا يقل طول الكلمة عن 8 محارف ولا يزيد على 20 محرف إذا توفرت جميع هذه الشروط في كلمة المرور التي أدخلها المستخدم سنعتبرها كلمة مرور قوية وإذا لم تتوفر جميع الشروط سنعتبرها كلمة ضعيفة ونطلب منه إدخال كلمة أخرى. أسهل طريقة لتحقيق هذا المشروع هي باستخدام مفهوم التعابير النمطية في البرمجة regular expression والمعروفة اختصارًا باسم Regex، فمن خلالها يمكن تعريف نمط بحث للتحقق من قوة كلمة المرور بالشكل التالي: ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*``#?&])[A-Za-z\d@$!#%*?&]{6,20}$ يفحص هذا التعبير النمطي قوة كلمة المرور حيث يبدأ بالرمز ^ الذي يعني أن الاختبار يجب أن يبدأ من بداية كلمة المرور وبعدها يليه (?=.*[a-z]) الذي يتحقق من وجود حرف صغير على الأقل في كلمة المرور ثم القسم (?=.*[A-Z]) الذي يتحقق من وجود حرف كبير على الأقل في كلمة المرور ثم (?=.*\d) الذي يتأكد من وجود رقم واحد على الأقل فيها والقسم (?=.*[@$!%*#?&]) للتأكد من وجود محرف خاص على الأقل في كلمة المرور والقسم [A-Za-z\d@$!#%*?&]{6,20} للتحقق من أن طول كلمة المرور بين 8 إلى 20 محرف وأنهينا التعبير النمطي بكتابة الرمز $ الذي يعني أن الاختبار يستمر حتى نهاية كلمة المرور. وللتحقق من مطابقة كلمة المرور لهذا النمط في مشروعنا سنعتمد على مكتبة بايثون المسماة re وهي مكتبة قياسية في بايثون تساعدك على تعريف التعابير النمطية والتحقق من مطابقة سلسلة ما لنمط معين. الدخل: كلمة المرور المطلوب فحصها. الخرج: طباعة رسالة تظهر فيما إذا كانت كلمة المرور قوية أم ضعيفة. مشروع بايثون للتحقق من قوة كلمة المرور: import re def is_strong_password(pwd): pattern = '^[a-z]+[A-Z]+[!@#$^%]+[0-9]+$' return bool(re.search(pattern, pwd)) while True: password = input("أدخل كلمة المرور: ") if is_strong_password(password): print("كلمة المرور قوية") break else: print("\nكلمة المرور ضعيفة، أدخل واحدة أخرى") عند تنفيذ الكود أعلاه سنحصل على خرج مشابه للصورة التالية: توصيات حول المشروع: قد تبدو كتابة التعابير النمطية صعبة قليلًا لكنها الطريقة المثلى لتنفيذ التحقق، فهي تختصر عليك الكثير من الوقت، جرب على سبيل المثال التحقق من قوة كلمة المرور وفق الشروط التي ذكرناها دون الاعتماد على التعابير النمطية ولاحظ كمية التعليمات الشرطية التي ستحتاجها لتنفيذ المشروع. وحاول فكرة تعديل المشروع لجعله يولد لك كلمة مرور قوية بشكل تلقائي بدل إنشائها يدويًا. مشروع حساب عدد الأحرف الصوتية والفراغات والكلمات في نص يحتاج أي مبتدئ إلى تنفيذ عدة مشاريع بايثون تعالج السلاسل النصية وتستخدم دوال النصوص المناسبة للحصول على النتائج المطلوبة، في هذا المشروع سنكتب كود بايثون يطلب من المستخدم إدخال نص معين باللغة الإنجليزية ونحسب عدد الأحرف الصوتية الواردة فيه وعدد فراغاته وعدد كلماته. بالنسبة للأحرف الصوتية فهي كما خمسة حروف a وe i و o و u ويجب أن تراعي وجود الأحرف الصغيرة والكبيرة أو يمكنك بشكل بديل تحويل النص المدخل من قبل المستخدم بالكامل إلى حروف صغيرة أو كبيرة لتسهيل عملية البحث. أما بالنسبة للفراغات فيمكن أن تتحقق من وجود فراغ في نص ما بسهولة باستخدام الدالة الجاهزة isspaceو ويمكن كذلك حساب عدد الكلمات بعدة طرق ومن أسهل هذه الطرق الاستعانة بالدالة split التي تقسم الجملة إلى كلمات باستخدام الفراغ كفاصل وتعيد قائمة List بكافة هذه الكلمات وبعدها نستخدم الدالة len التي تعيد لنا عدد عناصر هذه القائمة. الدخل: هو النص المطلوب البحث فيه الخرج: عدد الأحرف الصوتية والفراغات والكلمات في هذا النص. إليك كود بايثون لحساب الأحرف الصوتية والفراغات وعدد الكلمات في سلسلة نصية ويمكنك بالطبع تجربة طرق أخرى للحصول على النتائج المطلوبة. # حساب عدد الفراغات والكلمات والأحرف الصوتية في سلسلة نصية countv=0 countw=0 counts=0 input_sentence=input("أدخل النص هنا: ") # عدد الأحرف الصوتية والفراغات sentence=input_sentence.lower() vowles=["a","e","i","o","u"] for char in sentence: if char in vowles: countv=countv+1 if(char.isspace()): counts=counts+1 # عدد الكلمات countw = len(input_sentence.split()) # طباعة النتائج print(" عدد الأحرف الصوتية :", countv) print(" عدد الكلمات :", countw) print(" عدد الفراغات :", counts) عند تنفيذ البرنامج على السلسلة النصية "Learn PYTHON with Welcome to Hsoub Academy" نحصل على الخرج التالي: توصيات حول المشروع: فكر في طرق أخرى لاستخراج النتائج المطلوبة من سلسلة نصية، وحاول تحويل المشروع من مشروع سطر الأوامر إلى مشروع واجهة رسومية لسهولة الاستخدام. مشروع حاسبة الزكاة يعرض هذا المشروع واجهة رسومية لحساب زكاة المال حيث يطلب من المستخدم إدخال قيمة أمواله كي يحسب الزكاة المستحقة بناءً على القيمة المدخلة فإذا كانت قيمة المال الذي حال عليه الحول تفوق النصاب أي الحد الأدنى للثروة التي يجب عليها الزكاة وجل دفع زكاة مال تبلغ 2.5% من قيمة المال وإلا فلا يتوجب دفع الزكاة أي أن قيمة الزكاة تكون صفر، وقد افترضنا هنا أن قيمة النصاب هي 442 دولار بحسب هيئة الإغاثة الإسلامية العالمية. بالطبع قيمة النصاب المستخدمة هنا ليست ثابتة وهي تتغير بحسب سعر الذهب أو الفضة وحساب المبلغ الدقيق للزكاة يعتمد على العديد من العوامل التي يجب أخذها بالحسبان، لكن الهدف من مشروعنا البسيط هذا هي تعلم إنشاء مشاريع بايثون من خلال واجهة رسومية، وأسهل طريقة لبناء واجهة المستخدم الرسومية هو تعلم طريقة بناء واجهات مستخدم رسومية في بايثون باستخدام المكتبة Tkinter فهي مكتبة قياسية وسهلة الاستخدام وتتيح لك إنشاء نوافذ وأزرار وحقول إدخال وغيرها من عناصر واجهة المستخدم بسرعة ومرونة كبيرة. الدخل: قيمة المال المطلوب حساب زكاته، وفي حال أدخل المستخدم قيمة أموال غير صحيحة كأن يدخل نصًا بدلاً من رقم يجب أن تظهر له رسالة خطأ تطالبه بإدخال قيمة صحيحة. الخرج: عرض قيمة الزكاة المستحقة للمال إذا تجاوز النصاب. إليك مشروع بايثون لحساب مقدار زكاة المال: # مشروع بايثون لحساب زكاة المال from tkinter import * from tkinter import messagebox # إنشاء واجهة المستخدم window = Tk() window.geometry("600x350") window.resizable(0, 0) window.config(bg="lightblue") window.title("حاسبة زكاة المال") # نصاب الزكاة بالدولار nisab = 442 # إنشاء متغير لتخزين قيمة أموالك money = DoubleVar() # دالة حساب الزكاة def calculate_zakat(): try: money = float(money_entry.get()) zakat_amount = money * 0.025 if money > nisab else 0 result_label.config( text=f"قيمة الزكاة الواجبة عليك هي: {zakat_amount:.2f} دولار" ) except ValueError: messagebox.showerror("خطأ", "الرجاء إدخال قيمة صالحة.") Label( window, text="أدخل قيمة أموالك بالدولار", font="Tahoma 14", fg="gray", justify="right", ).place(x=200, y=20) money_entry = Entry(window, textvariable=money, font="tahomab 12") money_entry.place(x=200, y=70) # إنشاء زر الحساب calculate_button = Button( window, text="حساب الزكاة", font="tahoma 14 bold", bg="lightgreen", padx=2, command=calculate_zakat, justify="right", ) calculate_button.place(x=220, y=120) # إنشاء تسمية لعرض النتيجة result_label = Label( window, text="", font="tahoma 14 bold", bg="lightblue", justify="right" ) result_label.place(x=100, y=180) window.mainloop() عند تنفيذ الكود السابق سيظهر الخرج كما في الصورة التالية: توصيات حول المشروع: جرب أن تحسن مظهر الواجهة الرسومية للمشروع من خلال استخدام مكتبة أخرى غير tkinter لتصميم الواجهة الرسومية للمشروع فهناك مكتبات أكثر احترافية مثل مكتبة PyQt5 أو Kivy. دورة الذكاء الاصطناعي احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة. اشترك الآن مشروع ساعة رقمية يهدف هذا المشروع من مشاريع باثيون Python للمبتدئين إلى تعليم المبرمج المبتدئ لكيفية إنشاء تطبيق جهة رسومية يعرض لك التوقيت المحلي والتوقيت العالمي GMT بالاستفادة من مكتبات بايثون المساعدة كما وكيفية تحديث الواجهة الرسومية كل ثانية لتحديث الساعة وجعلها تظهر لنا الوقت الحالي بدقة. يمكن تحقيق المشروع المطلوب من خلال إنشاء واجهة رسومية بسيطو باستخدام المكتبة القياسية tkinter والمكتبة القياسية time للوصول إلى معلومات الوقت وتنسيقه بالشكل المناسب. الدخل: لا يحتاج المشروع للحصول على أي مدخلات من المستخدم الخرج: عرض الساعة بالتوقيت المحلي والعالمي وتنسيقها بالشكل المطلوب # مشروع بايثون لعرض التوقيت المحلي والعالمي # digital-clock.py # استيراد الوحدات المطلوبة from tkinter import * from time import strftime, gmtime,localtime # إنشاء نافذة رئيسية window = Tk() window.title("مشروع بايثون لعرض التوقيت المحلي والعالمي") window.configure(background="lavender") #إنشاء نافذة بأبعاد ثابتة window.geometry("510x250") window.resizable(False, False) # تعريف دالة تعيد لناالتوقيت المحلي والعالمي def get_time(): # توقيت GMT # %I نظام 12 ساعة # %M الدقائق # %S الثواني # %p تعرض AM / PM timeFormat1 = strftime("%I:%M:%S %p", gmtime()) clock_g.config(text="GMT: " + timeFormat1) # توقيت محلي بتنسيق 12 ساعة timeFormat2 = strftime("%I:%M:%S %p",localtime()) clock_l.config(text="LOC: " + timeFormat2) # جدولة تكرار استدعاء الدالة كل 1000 ميلي ثانية window.after(1000, get_time) clock_l = Label(window, font="Verdana 37 bold", pady=30, bg="lavender") clock_l.pack(side=TOP) clock_g = Label(window, font="Verdana 37 bold", pady=30, bg="pink") clock_g.pack(side=BOTTOM) # استدعاء دالة عرض الوقت get_time() # تشغيل النافذة الرئيسية mainloop() عند تنفيذ المشروع ستظهر لك الواجهة التالية التي تعرض الساعة بالتوقيت المحلي وبتوقيت غرينتش توصيات حول المشروع: جرب تطوير مشروع بايثون الحالي واعرض الوقت وكذلك التاريخ بتنسيقات مختلفة وجرب استخدام مكتبات بايثون أخرى للتعامل مع الوقت مثل الوحدة datetime وتعرف على الفرق بينها وبين الوحدة time. مشروع حل معادلة درجة ثانية ورسم خطها البياني في مشروع بايثون التالي سنقوم بإنشاء تطبيق واجهة مستخدم رسومية لحل معادلة رياضية من الدرجة الثانية أو ما يعرف بالمعادلة التربيعية بطريقة المميز delta ونرسم خطها البياني الذي يكون عادة على شكل قطع مكافئ، وسنستخدم كل من المكتبة Tkinter لبناء واجهة المستخدم الرسومية والمكتبة matplotlib لرسم الخط البياني. الدخل: معاملات المعادلة a و b و c الخرج: عرض حلول المعادلة x1 و x2 بحسب قيمة المميز ورسم خطها البياني. # quadratic-equation.py import tkinter as tk from tkinter import messagebox from matplotlib.figure import Figure from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg # تعريف دالة لحساب جذور المعادلة def solve_quadratic(a, b, c): try: a, b, c = float(a), float(b), float(c) delta = b**2 - 4 * a * c if delta > 0: x1 = (-b + delta**0.5) / (2 * a) x2 = (-b - delta**0.5) / (2 * a) x1_rounded = round(x1, 2) x2_rounded = round(x2, 2) return f"x1= {x1_rounded}, x2={x2_rounded}" elif delta == 0: x = -b / (2 * a) x_rounded = round(x, 2) return f"x= {x_rounded}" else: return "لا يوجد حلول حقيقة للمعادلة" except ValueError: return "أدخل قيم صحيحة للمعاملات" # تعريف دالة لرسم المعادلة def plot_quadratic(a, b, c): try: a, b, c = float(a), float(b), float(c) x = range(-10, 11) y = [a * x_val**2 + b * x_val + c for x_val in x] fig = Figure(figsize=(6, 4), dpi=100) ax = fig.add_subplot(111) ax.plot(x, y) canvas = FigureCanvasTkAgg(fig, master=window) canvas_widget = canvas.get_tk_widget() canvas_widget.grid(row=4, column=0, columnspan=3) except ValueError: messagebox.showerror("خطأ", "قيم خاطئة للمعاملات") def calculate(): a_val = a_entry.get() b_val = b_entry.get() c_val = c_entry.get() result = solve_quadratic(a_val, b_val, c_val) result_label.config(text=result) plot_quadratic(a_val, b_val, c_val) # إنشاء الواجهة الرسومية window = tk.Tk() window.title("حل معادلة درجة ثانية") window.geometry("800x600+100+50") a_label = tk.Label(window, text="a:", font=("tahoma", 12)) a_label.grid(row=0, column=0, padx=10, pady=10) a_entry = tk.Entry(window, font=("tahoma", 12)) a_entry.grid(row=0, column=1, padx=10, pady=10) b_label = tk.Label(window, text="b:", font=("tahoma", 12)) b_label.grid(row=1, column=0, padx=10, pady=10) b_entry = tk.Entry(window, font=("tahoma", 12)) b_entry.grid(row=1, column=1, padx=10, pady=10) c_label = tk.Label(window, text="c:", font=("tahoma", 12)) c_label.grid(row=2, column=0, padx=10, pady=10) c_entry = tk.Entry(window, font=("tahoma", 12)) c_entry.grid(row=2, column=1, padx=10, pady=10) calculate_button = tk.Button( window, text="Calculate", command=calculate, font=("tahoma", 12) ) calculate_button.grid(row=3, column=0, columnspan=2, padx=10, pady=10) result_label = tk.Label(window, text="", font=("tahoma", 14)) result_label.grid(row=3, column=2, padx=10, pady=10) plot_label = tk.Label(window, text="الرسم البياني", font=("tahoma", 14)) plot_label.grid(row=4, column=0, columnspan=3, padx=10, pady=10) window.mainloop() توضح الصورة التالية نتيجة تنفيذ المشروع لحل معادلة درجة ثانية ورسم خطها البياني توصيات حول المشروع: تأكد من تثبيت المكتبة matplotlib على نظامك قبل تنفيذ المشروع باستخدام التعليمة pip install matplotlib وجرب تطوير واجهة المشروع وتخصيص شكل الرسم البياني ليظهر أكثر احترافية ويظهر حلول المعادلة بيانيًا. مشروع استخراج بيانات من موقع ويب تعد مشاريع بايثون التي تقوم باستخراج البيانات من الويب Web Scraping من تطبيقات بايثون المفيدة والمطلوبة في سوق العمل فمن خلالها يمكنك جمع المعلومات المختلفة مثل أحدث الأخبار والمقالات، أو عناوين الكتب، أو المنشورات والتعليقات من مواقع التواصل، أو أسعار المنتجات من مواقع ويب بشكل تلقائي لسهولة تصفحها أو تنظيمها وتخزينها في ملفات قواعد بيانات ثم تحليلها ومقارنتها بدلاً من جلب هذه البيانات يدويًا من عدة أماكن. يمكنك بناء مشاريع بايثون Python لاستخراج بيانات الويب بسهولة بفضل ما توفره لغة بايثون من مكتبات مساعدة في هذا المجال مثل Beautiful Soup و Scrapy و Selenium لكن انتبه فبعض المواقع قد لا تسمح لك باستخراج البيانات منها وقد تحظر أي طلبات تقوم بها. لاستخراج البيانات من موقع ما عليك بداية تحديد البيانات التي تريد استخراجها كالنصوص أو الصور أو الروابط وفحص بنية HTML الخاصة بالموقع باستخدام أدوات مطور المتصفح لتحديد العناصر التي تحتاج إلى استهدافها بدقة بعدها سيكون عليك كتابة التعليمات البرمجية اللازمة لإجراء طلبات استرداد صفحات الويب المطلوبة من الموقع وتحليل محتوى HTML واستخراج البيانات التي تحتاجها والتعامل مع الحالات الخاصة التي قد لا تتمكن فيها من الحصول على البيانات المطلوبة، قد تحتاج بعد ذلك إلى تنسيق البيانات أو تخزينها أو تحليلها حسب الطلب. سنقوم بإنشاء مشروع بلغة بايثون يستخرج أحدث المقالات المنشورة في موقع ووردبريس بالعربية باستخدام المكتبة tkinter و BeautifulSoup وهي مكتبة بايثون مشهورة تستخدم لتحليل مستندات HTML وXML واستخراج بياناتها والمكتبة requests لتقديم طلب HTTP GET إلى عنوان URL لصفحة الويب التي تريد استخراج بياناتها. كود بايثون لاستخراج بيانات من موقع ويب: # مشروع استخلاص البيانات من موقع ووردبريس بالعربية import tkinter as tk from tkinter import ttk from tkinter import scrolledtext # لإضافة scrollbar للنتائج import requests from bs4 import BeautifulSoup # استخلاص عناوين المقالات المنشورة حديثًا def fetch_and_extract_labels(): url = url_entry.get() result_text.config(state=tk.NORMAL) result_text.delete(1.0, tk.END) result_text.config(state=tk.DISABLED) try: response = requests.get(url) response.raise_for_status() soup = BeautifulSoup(response.text, 'html.parser') labels = [link.get('aria-label') for link in soup.find_all('a', class_='p-flink')] result_text.config(state=tk.NORMAL) result_text.delete(1.0, tk.END) result_text.tag_configure("rtl", justify="right") for label in labels: result_text.insert(tk.END, f"{label}\n", "rtl") except requests.exceptions.RequestException as e: result_text.config(state=tk.NORMAL) result_text.delete(1.0, tk.END) result_text.insert(tk.END, "خطأ قي جلب البيانات-تحقق من العنوان") except Exception as e: result_text.config(state=tk.NORMAL) result_text.delete(1.0, tk.END) result_text.insert(tk.END, f"خطأ: {str(e)}") finally: result_text.config(state=tk.DISABLED) app = tk.Tk() app.title("استخلاص البيانات") button_style = ttk.Style() button_style.configure("TButton", font="tahoma", padding=5, background="#3498db") url_label = ttk.Label(app, text="عنوان الموقع", font="tahoma") url_label.pack(pady=5) default_url = "https://www.wpar.net/" url_entry = ttk.Entry(app, width=50 , font="tahoma") url_entry.insert(0, default_url) url_entry.pack(pady=5) scrape_button = ttk.Button(app, text="استخراج", style="TButton", command=fetch_and_extract_labels) scrape_button.pack(pady=10) result_text = scrolledtext.ScrolledText(app, wrap=tk.WORD, height=15, width=50,font="tahoma") result_text.pack(pady=5) result_text.config(state=tk.DISABLED) app.mainloop() عند تنفيذ المشروع والنقر على زر استخراج ستحصل على البيانات المطلوبة بالشكل التالي: توصيات حول المشروع: عليك تثبيت المكتبات المطلوبة من خلال التعليمة pip install module_name لتنفيذ الكود بشكل صحيح، كما يتوجب عليك التحقق باستمرار من الكود البرمجي الذي يستخلص البيانات من موقع معين لأن بعض المواقع قد تغير تصميمها، وبالتالي يتوجب عليك التأكد من أن الكود البرمجي الذي كتبته يجلب لك البيانات الصحيحة، وبعد تنفيذ هذا المشروع جرب جلب بيانات أخرى مثل صور المقالات أو روابطها أو اسم الكاتب واعرضها بالشكل المناسب. أفكار مشاريع بايثون أخرى للتدريب استعرضنا لك في الفقرات السابقة عدة مشاريع بايثون جاهزة للمبتدئين والتي يمكنك تجربتها كمبتدئ وهناك بالطبع الكثير من أفكار شاريع بايثون للتدريب يمكنك تطبيقها فمجالات وتطبيقات لغة بايثون كثيرة ومتنوعة وإذا كنت مهتمًا بأحد هذه المجالات فمن الأفضل أن تركز على تطوير مشاريع فيه. إليك قائمة ببعض الأفكار الأخرى لمشاريع عملية متنوعة تناسب المبتدئين يمكنك تنفيذها لغة البرمجة بايثون. مشروع يطلب من المستخدم إدخال تاريخ ميلاده ويحسب عمره بالأيام أو الأشهر أو السنوات. مشروع التحويل بين العملات. مشروع لعبة بسيطة مثل لعبة Tic-Tac-Toe أو لعبة مسابقات تطرح الأسئلة وتتحقق من الإجابات. مشروع توليد رمز QR للروابط. مشروع لتلخيص النصوص. مشروع فهرس أو قاموس بلغة بايثون. استخراج النص من مقطع فيديو. مشروع أتمتة مهام مثل مهمة التقاط الشاشة أو إرسال بريد إلكتروني. مشروع قواعد بيانات لحفظ أسماء جهات اتصالك وأرقامهم وعناوينهم. مشروع قائمة المهام. مشروع التحقق من صحة البريد الإلكتروني. مشروع استخراج أسماء وأسعار المنتجات من مواقع للتجارة الإلكترونية. مشاريع ذكاء اصطناعي بلغة البايثون مثل مشروع تصنيف الصور أو مشروع تصنيف رسائل البريد الإلكتروني. مشاريع بايثون للويب مثل تطبيق إدارة المهام To-do List أو صفحة ويب بسيطة تعرض أعمالك. قبل تنفيذ أي مشروع بايثون من هذه المشاريع حاول فهم المشكلة المطلوبة بشكل صحيح وتحديد المدخلات والمخرجات المطلوبة، وفكر في خوارزمية الحل الصحيحة التي تمكنك من معالجة المدخلات للحصول على النتائج الصحيحة، ثم ابحث عن وجود مكتبات مساعدة لتنفيذ المطلوب فلغة بايثون غنية بالمكتبات الجاهزة التي توفر عليك الوقت وتختصر كتابة الكثير من الأكواد. وفي حال رغبت بتنفيذ مشاريع بلغة بايثون أكثر تقدمًا واحترافية تساعدك على فهم لغة باثيون Python بعمق والتعرف على متطلبات سوق العمل أنصحك بمطالعة دورة تطوير التطبيقات باستخدام لغة Python التي توفرها أكاديمية حسوب فهي دورة متكاملة تمنحك الفرصة لبدء تعلم بايثون من الصفر وتطبيق العديد من مشاريع بايثون العملية المتكاملة التي تعزز معرض أعمالك وتساعدك في العثور على فرصة عمل مناسبة، كما توفر لك متابعة دورية مع مدربين أكفاء يجيبونك في حال وجود أي تساؤل أو استفسار بخصوص ما تطبقه وتتعلمه. الخلاصة اقترحنا في هذه المقالة لك العديد من الأفكار المتنوعة حول مشاريع بايثون يمكنك تنفيذها وتطويرها، ستساعدك هذه المشاريع على التمكن من أساسيات لغة بايثون وفهمها بشكل أفضل، وممارسة كتابة الأكواد وتصحيح الأخطاء. وتذكر دومًا أن الممارسة والتطبيق العملي هي المفتاح لتحسن مستواك في البرمجة وبمجرد الانتهاء من هذه المشاريع البسيطة يمكنك تجربة أفكار مشاريع أكثر تقدمًا. هل لديك أفكار مشاريع بايثون أخرى تود أن تقترحها أو تناقشها معنا وتجد أنها تناسب المبرمجين المبتدئين، نرحب بأي فكرة مشروع بايثون تكتبها في قسم التعليقات أسفل المقال. اقرأ أيضًا تعلم كتابة أكواد بايثون من خلال الأمثلة العملية مقدمة إلى دوال التعامل مع السلاسل النصية في بايثون 3 المرجع الشامل إلى تعلم لغة بايثون كتابة دوال فعالة في بايثون بناء لعبة نرد بسيطة بلغة بايثون
    1 نقطة
  47. الإصدار 1.0.0

    15010 تنزيل

    ما زال التسويق يمثل محور العمل في أي شركة، فهو يتعلق بتحديد حاجات الزبائن وإشباعها من خلال توفير منتجات قيّمة وتوضيح مزاياها لهم، ويمكن اعتماد ما سبق تعريفًا موجزًا للتسويق ويعرّف هذا الكتاب القارئ على استراتيجيات التسويق وأدواته التي يستخدمها المسوقون لتسويق منتجاتهم. لقد حرص المؤلف في هذا الكتاب على إبراز مجالات التسويق المختلفة وكيفية الدمج بينها لبناء إستراتيجية تسويق مترابطة، لذلك عمد في هذا الكتاب إلى تعريف كل مجال من مجالات التسويق وتوضيح نقاط الضعف والقوة فيه، ثم تطرق إلى كيفية الدمج بين أدوات التسويق لبناء خطة إستراتيجية متكاملة. ويبدأ الكتاب بنقاش حول التخطيط بشكل عام، ثم يتناول بالتفصيل الخطوات الأولى لبناء الخطة التسويقية، ثم ينتهي بأفضل الأساليب المتاحة للمسوّقين. ويهدف الكتاب إلى التعريف بكيفية تخطيط برنامج تسويقي فعّال وتنفيذه وتقييمه من الألف إلى الياء. يتناول فصل "مقدمة إلى التسويق" تأثير الأحداث العالمية على أساليب التسويق، فيما يتطرق فصل "التسويق في الأسواق العالمية" إلى تأثير التسويق على العالم، كذلك يتناول الكتاب في جميع أجزائه أمثلة مختلفة من السوق العالمي لشركات على أرض الواقع، إذ تساعد الأمثلة والقصص الواقعية القارئ على الربط بين استيعاب النظرية وتطبيقها، وتتسم هذه الأمثلة بكونها حيّة ومعاصرة ومتنوعة، فهي تتراوح بين قائمة فورتشن لأكبر 500 شركة أمريكية، إلى الشركات الصغيرة الخاصة كذلك يتناول الكتاب أمثلة لشركات دولية من جميع الأحجام. يناقش الكتاب أيضًا في مواضع مختلفة منه أهمية التكنولوجيا وتأثيراتها المختلفة إذ لا يخفى أثر التكنولوجيا على أساليب التسويق، كما تُعد شبكة الإنترنت وقواعد البيانات وأجهزة التعقب ومحاكيات السوق أمثلة جيّدة تعكس مدى تأثير التكنولوجيا في عالم التسويق. بني هذا الكتاب على كتاب Introducing Marketing لمؤلفه Prof. John Burnett (البروفيسور جون بورنِت) المرخص تحت رخصة CC BY والذي ألف وشارك في تأليف عشرين كتابًا وما يربو على 60 بحثًا أكاديميًا، وقد تقاعد مؤخرًا بعد 41 عامًا من العمل محاضرًا في مجال التسويق. ولقد انصبّ معظم تركيز البروفيسور خلال السنوات العشرين الماضية على التسويق لصالح المنظمات غير الربحية وقد كانت حصيلة مجهوداته إقامة العديد من ورش العمل، ووضع الكثير من الخطط التسويقية، بالإضافة إلى تأليف كتاب بعنوان "Nonprofit Marketing Best Practices" (أفضل أساليب التسويق للمنظمات غير الربحية). ساهم بالعمل على هذا الكتاب، علاء أيمن ترجمةً، والطبيب نادر حوري والبروفيسور علي اليعقوبي مراجعةً وتدقيقًا، وجميل بيلوني تحريرًا وإشرافًا، وأخرجه فنيًا فرج الشامي. نرجو أن نكون قد وفقنا في هذا العمل بتوفير مرجع أكاديمي نافع يثري المكتبة العربية. هذا الكتاب مرخص بموجب رخصة المشاع الإبداعي Creative Commons «نسب المُصنَّف - غير تجاري - الترخيص بالمثل 4.0». نشرنا فصول هذا الكتاب على شكل مقالات مبسَّطة على الويب تحت الوسم «مدخل إلى التسويق» لتسهيل قراءتها: الفصل الأول: مقدمة إلى التسويق مقدمة إلى علم التسويق أنواع التسويق الأساسية مكونات التسويق الاستراتيجية الفصل الثاني: فهم السوق والتعامل معه فهم السوق والتعامل معه تجزئة المستهلكين في العملية التسويقية تجزئة الشركات في العملية التسويقية الفصل الثالث: بحوث التسويق وصناعة القرار بحوث التسويق وصناعة القرار التسويقي تصميم خطة البحث التسويقي تنفيذ خطة البحث التسويقي الفصل الرابع: فهم سلوك المستهلكين فهم سلوك المستهلكين العوامل المؤثرة في سلوك المستهلكين سلوك الشراء لدى الشركات الفصل الخامس: أثر العوامل الخارجية على عملية التسويق أبرز العوامل السياسية والاقتصادية والقانونية المؤثرة على عملية التسويق أهم الاتجاهات الاجتماعية المؤثرة على عملية التسويق الفصل السادس: التسويق في الأسواق العالمية التسويق العالمي: الأهداف والأسباب والمعوقات والمراحل كيف تؤثر البيئة المحيطة على التسويق العالمي؟ الفصل السابع: طرح المنتج وإدارته تعريف المنتج وأنواعه التخطيط للمنتج واستراتيجيات الدخول إلى السوق تطوير منتج جديد خطوة بخطوة الفصل الثامن: التواصل مع الأسواق الاتصال التسويقي المتكامل: تعريفه وأهدافه وأنواعه أدوات الاتصال التسويقي المتكامل الفصل التاسع: تسعير المنتج أهداف تسعير المنتج، واستراتيجياته المختلفة كيف تختار السعر الملائم للمنتج؟ الفصل العاشر: قنوات توزيع المنتج قنوات توزيع المنتج: مهامها، وأبرز مؤسساتها كيف تدير قنوات توزيع المنتج؟
    1 نقطة
  48. تمنح نماذج الويب web forms مثل الحقول النصيّة السطرية text fields وصناديق إدخال النصوص text areas المستخدمين القدرة على إرسال البيانات إلى التطبيق، سواءً احتوت هذه النماذج على قوائم منسدلة، أو أزرار انتقاء radio button، فسيستخدمها التطبيق في تنفيذ أمر ما، أو حتّى لإرسال محتوًى نصي كبير، إذ يُمنح المستخدم مثلًا في تطبيقات التواصل الاجتماعي حيزًا حيث يمكنه إضافة محتوى جديد إلى صفحته الشخصية. يُعد فلاسك flask إطار عمل للويب مبني بلغة بايثون، ويتميز بكونه صغير الحجم وسهل المعالجة، ويوفّر أيضًا العديد من الأدوات والميزات التي من شأنها جعل إنشاء تطبيقات الويب في لغة بايثون أسهل، وبغية تصييّر نماذج الويب والتحقق من صحة مدخلاتها بأمانٍ ومرونة، سنستخدم إضافة فلاسك Flask-WTF التي تتيح لنا استخدام المكتبة WTForms المُتضمّنة نماذج الويب ذات واجهة المستخدم التفاعلية لاستخدامها في تطبيقات فلاسك. إذًا، إضافة WTForms هي مكتبة من مكاتب بايثون، توفّر تصييرًا مرنًا لنماذج الويب، فمن الممكن استخدامها في تصيير الحقول النصيّة السطرية وصناديق إدخال النصوص متعددة الأسطر وصناديق كلمات المرور وأزرار الانتقاء وغيرها، كما أنّها توفّر آلية فعّالة للتحقّق من صحة البيانات التي يدخلها المستخدم بالاعتماد على ميّزة المُصادِقين المختلفين الهادفة للتأكّد من كون هذه البيانات تُطابق صيغًا وقواعد ومعايير محدّدة، فمثلًا من الممكن التحقق من كون المُستخدم قد أدخل فعلًا البيانات اللازمة في أحد الحقول المطلوب ملؤها من قبله، أو أنّ المدخلات بطول معيّن. تستخدم مكتبة WTForms -إضافةً إلى مُساعدتنا على تأكيد البيانات وتقييدها بشروطٍ خاصّة- مفتاحًا مساعدًا لتحمينا من هجمات تزوير الطلب عبر المواقع Cross-site request forgery -أو اختصارًا CSRF- وهي نوع من الهجمات التي تُمكّن المخترق من تنفيذ أمور خطيرة غير مرغوبة في تطبيق الويب، متنكّرا على هيئة مُستخدم قد سجّل دخوله في التطبيق فعلًا، فقد تجبر الهجمات الناجحة المُستخدم الضحية على إرسال طلبات تغيير أساسية state-changing بغية تحويل أموال مثلًا إلى حساب المخترِق البنكي في أحد تطبيقات الصيرفة، أو تغيير عنوان البريد الإلكتروني الخاص بالمستخدم وهكذا دواليك، وفي حال كون الحساب الضحية حساب بصلاحيات مدير، فعندها ستكون هجمة تزوير الطلب CSRF قادرةً على اختراق كامل التطبيق. سننشئ في هذا المقال تطبيق ويب مُصغّر بغية توضيح كيفية تصيير نماذج الويب والتحقّق من صحة مدخلاتها باستخدام الإضافة Flask-WTF، إذ سيتضمّن التطبيق صفحةً لعرض الدورات التدريبيّة المُخزّنة أصلًا في قائمة بايثون، أما الصفحة الرئيسية فستتضمّن نموذجًا لإدخال عنوان الدورة التدريبية ووصفها وتكلفتها وكونها متاحة أم لا إضافةً إلى مستواها (مبتدئ، أو متوسط، أو متقدم). مستلزمات العمل قبل المتابعة في هذا المقال لا بُدّ من: توفُّر بيئة برمجة بايثون 3 محلية، مثبّتة على حاسوبك، وسنفترض في مقالنا أن اسم مجلد المشروع هو "flask_app". الفهم الجيد لأساسيات فلاسك، مثل مفهوم الوجهات ودوال العرض، وفي هذا الصدد يمكنك الاطلاع على المقالين كيفية بناء موقعك الإلكتروني الأول باستخدام إطار عمل فلاسك من لغة بايثون وكيفية استخدام القوالب في تطبيقات فلاسك Flask لفهم مبادئ فلاسك. فهم أساسيات لغة HTML. من المحبّذ أيضًا فهم أساسيات استخدام نماذج الويب في فلاسك، وهنا ننصحك بقراءة المقال كيفية استخدام نماذج الويب في تطبيقات فلاسك للاطلاع على هذه النقطة. الخطوة الأولى - تثبيت فلاسك والإضافة Flask-WTF سنعمل في هذه الخطوة على تثبيت كل من فلاسك والإضافة Flask-WTF والتي بدورها ستثبّت المكتبة WTForms تلقائيًا. لذلك، وبعد التأكّد من تفعيل البيئة الافتراضية، سنستخدم أمر تثبيت الحزم pip لتثبيت كل من فلاسك والإضافة Flask-WTF كما يلي: (env)user@localhost:$ pip install Flask Flask-WTF وبمجرّد انتهاء التثبيت بنجاح، سيظهر في السطر الأخير من الخرج ما يشبه التالي: Successfully installed Flask-2.0.2 Flask-WTF-1.0.0 Jinja2-3.0.3 MarkupSafe-2.0.1 WTForms-3.0.0 Werkzeug-2.0.2 click-8.0.3 itsdangerous-2.0.1 ومنه نلاحظ أنّ المكتبة WTForms قد ثُبتّت أيضًا كونها تتبع للحزمة Flask-WTF، أما باقي الحزم المُثبّتة فهي من تلك التابعة لفلاسك نفسه، ومع نهاية هذه الخطوة نكون قد ثبتنا ما يلزم من حزم بايثون، وأصبح من الممكن الانتقال إلى الخطوة التالية المُتمثّلة بإعداد نموذج ويب. الخطوة الثانية - إعداد النماذج سنعدّ في هذه الخطوة نموذج ويب باستخدام مُدقّقين validators وحقول مستوردة من مكتبة WTForms. إذ سنعدّ الحقول التالية: "Title": وهو صندوق إدخال نصي لإدخال عنوان الدورة التدريبية. "Description": وهو حقل نصي مُتعدّد الأسطر لإدخال توصيف الدورة التدريبية. "Price": وهو حقل مُخصّص لإدخال رقم صحيح يُمثّل تكلفة الدورة التدريبية. "Level": وهو حقل انتقاء بثلاث خيارات لتحديد مستوى الدورة التدريبية وهي: مبتدئ، متوسّط، متقدّم. "Available": وهو مربع اختيار يشير لكون الدورة التدريبية متوفرّة ومتاحة حاليًا أم لا. لذا، سننشئ بدايةً ضمن مجلد المشروع "flask_app" سننشئ ملفًا للنماذج باسم "forms.py"، ليتضمّن كافّة النماذج اللازمة للتطبيق: (env)user@localhost:$ nano forms.py إذ سيتضمّن هذا الملف صنفًا يمثّل نموذج الويب الذي نُعدّه، ولذلك سنضيف الاستيرادات التالية import إلى بداية الملف: from flask_wtf import FlaskForm from wtforms import (StringField, TextAreaField, IntegerField, BooleanField, RadioField) from wtforms.validators import InputRequired, Length الآن، ولبناء نموذج ويب، سننشئ صنفًا فرعيًا من الصنف الأساسي FlaskForm الذي استوردناه أصلًا من الحزمة flask_wtf، كما لا بُدّ من تحديد الحقول المراد استخدامها في النموذج والتي سنستوردها من المكتبة wtforms، وهي: StringField: وهو صندوق إدخال نصّي. TextAreaField: وهو حقل إدخال نصّي مُتعدّد الأسطر. IntegerField: وهو حقل مُخصّص لإدخال أعداد صحيحة. BooleanField: وهو مربع اختيار. RadioField: وهو حقل لإظهار أزرار الانتقاء ليتيح للمُستخدم اختيار إحداها. هذه الحقول هي المسؤولة عن تصيّير البيانات وتحويلها إلى النمط المطلوب، إضافةً إلى تفويض المُدققين بغية التحقق من صحة البيانات المُدخلة. استوردنا في السطر التالي من الشيفرة السابقة اثنين من المُدقّقين لنطبّقهما على الحقول الآنفة الذكر بما يضمن صحة مُدخلات المُستخدم: from wtforms.validators import InputRequired, Length إذ يُستخدم المُدقق InputRequired للتأكّد من كون المُستخدم قد أدخل فعلًا قيمًا في الحقول المطلوب ملؤها (الإجبارية)، والمُدقق Length يُستخدم للتأكّد من أن طول السلسلة النصية المُدخلة في حقل ما يُحقّق الحد الأدنى المطلوب من عدد المحارف، أو أنّه لم يتجاوز العدد الأعظمي المُتاح. أمّا الآن، فسنضيف الصنف التالي بعد تعليمة الاستيراد import مُباشرةً على النحو التالي: class CourseForm(FlaskForm): title = StringField('Title', validators=[InputRequired(), Length(min=10, max=100)]) description = TextAreaField('Course Description', validators=[InputRequired(), Length(max=200)]) price = IntegerField('Price', validators=[InputRequired()]) level = RadioField('Level', choices=['Beginner', 'Intermediate', 'Advanced'], validators=[InputRequired()]) available = BooleanField('Available', default='checked') نحفظ الملف ونغلقه. ورثنا في الصنف CourseForm أعلاه الشيفرات من الصنف الأساسي FlaskForm المُستورد أصلًا من حزمة فلاسك، كما عرّفنا مجموعةً من حقول النموذج مثل متغيرات لهذا الصنف باستخدام حقول النموذج نفسها المستوردة سابقًا من المكتبة WTForms، بحيث يكون عنوان الحقل هو الوسيط الأوّل لدى استنساخه. نعرّف المُدققين اللازمين لكل حقل بتمرير قائمة بأسماء المُدققين المُستوردين أصلًا من الوحدة wtforms.validators مثل وسيط لمتغير الصنف، فمثًلا بالنسبة للصندوق النصّي المُخصّص لعنوان الدورة التدريبية "title" في مثالنا، يكون وسيط العنوان فيه هو السلسلة النصية Title، مع تمرير مُدققين، هما: InputRequired: للدلالة على كون هذا الحقل مطلوب ملؤه من قبل المُستخدم ولا يجوز تركه فارغًا. Length: ويُمرّر له وسيطين، الأوّل هو min الذي يدل على الحد الأدنى المطلوب من عدد المحارف للسلسلة وهو في مثالنا "10"، أي لا ينبغي لطول سلسلة العنوان أن يقل عن عشرة محارف، أمّا الوسيط الثاني max فيشير إلى الحد الأعظمي المسموح فيه لعدد محارف السلسلة، وهو في حالتنا "100"، وبالتالي لا يجوز لطول العنوان المُدخل في الصندوق النصي أن يتجاوز مئة محرف. يتضمن الحقل النصي مُتعدّد الأسطر المُخصّص لوصف description الدورة التدريبية مُصادقين أيضًا، هما: InputRequired الذي يعني أنّ هذا الحقل مطلوب، والآخر Length جاعلًا قيمة الوسيط max تساوي "200"، دون وجود قيمة لوسيط الحد الأدنى min، ما يعني أنّ المطلوب فقط عدم تجاوز طول السلسلة المُدخلة لمئتي محرف. نعرّف بنفس الطريقة حقلًا مطلوبًا لإدخال قيمة عددية صحيحة تُمثّل تكلفة الدورة التدريبية باسم price؛ أما الحقل المُخصّص لمستوى الدورة level فهو زر انتقاء ذو عدّة خيارات، بحيث نعرّف هذه الخيارات ضمن قائمة بايثون ومن ثمّ نمررها قيمةً للوسيط choices من زر الانتقاء، ويُعرَّف هذا الحقل أيضًا على أنه مطلوب ملؤه باستخدام المُدقق InputRequired. أمّا عن الحقل available (وهو حقل مربع اختيار check box field) فهو يدل على أن الدورة مُتاحةٌ للتسجيل حاليًا، وقد عيّنا القيمة الافتراضية له ليكون مُفعلًا checked أي جرى اختياره عبر تمرير هذه القيمة إلى معامل الحالة الافتراضية default، ما يعني أنّ مُربّع الاختيار هذا سيكون مُفعّلًا افتراضيًا بمجرّد إضافة أي دورة جديدة للدلالة على أنها مُتاحة، إلّا في حال ألغى المُستخدم تفعيله يدويًا. ومع نهاية هذه الخطوة نكون قد أعددنا نموذج الويب المطلوب ضمن الملف المُسمّى "forms.py"، وسنعمل في الخطوة التالية على إنشاء تطبيق فلاسك، وسنستورد فيه هذا النموذج ونعرض حقوله ضمن صفحة التطبيق الرئيسية، كما سننشئ صفحةً أُخرى لعرض قائمة بالدورات التدريبية. يمكنك الاطلاع على صفحة دورة Crash في توثيق WTForms لمزيدٍ من المعلومات حول كيفية استخدام مكتبة WTForms، ومراجعة صفحة الحقول والمدققين للتأكد من صحة بيانات النموذج. الخطوة الثالثة - عرض نموذج الويب وقائمة الدورات التدريبية سنعمل في هذه الخطوة على إنشاء تطبيق فلاسك، بحيث سنعرض في صفحته الرئيسية نموذج الويب المُعدّ في الخطوة السابقة، كما سننشئ قائمةً لتتضمّن الدورات التدريبية مع صفحة مُخصّصة لعرض هذه القائمة. لذا، وبعد التأكّد من تفعيل البيئة البرمجية وتثبيت فلاسك، سننشئ ملفًا باسم "app.py" ضمن المجلد flask_app لنحرّره: (env)user@localhost:$ nano app.py سنستورد في هذا الملف الصنف والمُساعِدات اللازمة من فلاسك، كما سنستورد النموذج CourseForm من الملف "forms.py"، كما سنبني قائمةً بالدورات التدريبية، ومن ثمّ سنستنسخ instantiate النموذج ونمرّره إلى ملف ليكون قالبًا، ولإنجاز ذلك نكتب الشيفرات التالية ضمن الملف app.py: from flask import Flask, render_template, redirect, url_for from forms import CourseForm app = Flask(__name__) app.config['SECRET_KEY'] = 'your secret key' courses_list = [{ 'title': 'Python 101', 'description': 'Learn Python basics', 'price': 34, 'available': True, 'level': 'Beginner' }] @app.route('/', methods=('GET', 'POST')) def index(): form = CourseForm() return render_template('index.html', form=form) نحفظ الملف ونغلقه. استوردنا في الشيفرة السابقة من فلاسك ما يلي: الصنف Flask اللازم لإنشاء نسخة من تطبيق فلاسك. الدالة ()render_template اللازمة لتصيّير قالب الصفحة الرئيسية. الدالة ()redirect اللازمة لإعادة توجيه المُستخدم إلى الصفحة المُخصّصة بعرض الدورات التدريبية بمجرّد إضافة دورة جديدة. الدالة ()url_for اللازمة لبناء الروابط. استوردنا بدايةً الصنف ()CourseForm من الملف "forms.py"، ثمّ انشأنا النسخة الفعلية من تطبيق فلاسك باسم "app"؛ كما أعددنا الضبط اللازم لمفتاح الأمان الخاص بنماذج WTForms لاستخدامه لدى توليد المفتاح المساعد للحماية من هجمات CSRF، وهذا سيساعد بالنتيجة على تأمين نماذج الويب، مع الأخذ بالحسبان أنّ مفتاح الأمان يجب أن يكون سلسلةً نصيةً عشوائية بطول مناسب. أنشأنا بعد ذلك قائمةً من قواميس بايثون باسم courses_list، ولا تحتوي هذه المرحلة سوى على قاموس واحد يتضمّن دورة تجريبية بعنوان Python 101، بمعنى أنّنا نستخدم قائمة بايثون لتخزين البيانات وذلك كون مقالنا تعليمي ولسنا بصدد شرح طرق التخزين فيه، ولكن في التطبيقات العملية الواقعية نستخدم قاعدة بيانات لتُخزّن هذه البيانات بصورةٍ دائمة سامحةً لنا بتعديلها واسترجاعها بسهولة وفعالية، وللتعرّف على كيفية استخدام قاعدة بيانات لتخزين بيانات الدورات ننصحك بقراءة المقال [How To Use an SQLite Database in a Flask Application](أحد مقالات المجموعة الحالية 531039). أنشأنا الوجهة الرئيسية / باستخدام المزخرف ()app.route ضمن دالة العرض ()index، إذ تتعامل هذه الوجهة مع كلا نوعي طلبات HTTP وهما GET و POST من خلال المعامل methods، إذ تتخصّص الطلبات من النوع GET بجلب البيانات، أما الطلبات من النوع POST فهي مُتخصّصة بإرسال البيانات إلى الخادم عبر نموذج ويب مثلًا. بعد ذلك، استنسخنا الصنف ()CourseForm المُمثّل لنموذج الويب، وحفظنا هذه النسخة ضمن متغير باسم form، لتكون القيمة المعادة هي استدعاء للدالة ()render_template ممرين لها ملف قالب باسم "index.html" مع نسخة النموذج. بغية عرض نموذج الويب ضمن الصفحة الرئيسية للتطبيق، سننشئ بدايةً ملف قالب ليتضمّن كافة شيفرات HTML الأساسية اللازمة لترثها لاحقًا القوالب الأُخرى، وسيجنّبنا هذا تكرار الشيفرات، ومن ثمّ سننشئ ملف قالب الصفحة الرئيسية "index.html" المُصيّر أصلًا باستخدام الدالة ()index. الآن، سننشئ مجلدًا للقوالب باسم "templates"، إذ سيبحث فلاسك عن القوالب ضمن المجلد "flask_app"، وسننشئ ضمن مجلّد القوالب هذا ملف قالب باسم "base.html"، الذي سيمثّل القالب الأساسي لبقية القوالب على النحو التالي: (env)user@localhost:$ mkdir templates (env)user@localhost:$ nano templates/base.html وسنكتب فيه الشيفرات التالية لإنشاء القالب الرئيسي بحيث يتضمّن شريط تصفُّح وكتلة محتوى: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %} {% endblock %} - FlaskApp</title> <style> nav a { color: #d64161; font-size: 3em; margin-left: 50px; text-decoration: none; } </style> </head> <body> <nav> <a href="{{ url_for('index') }}">FlaskApp</a> <a href="#">About</a> </nav> <hr> <div class="content"> {% block content %} {% endblock %} </div> </body> </html> إذ يتضمّن القالب الأساسي كافّة الشيفرات المتداولة التي ستحتاجها في القوالب الأُخرى. ستُستبدل لاحقًا كتلة العنوان title بعنوان كل صفحة، وكتلة المحتوى content بمحتواها، أمّا عن شريط التصفح فسيتضمّن رابطين، الأوّل ينقل المُستخدم إلى الصفحة الرئيسية للتطبيق باستخدام الدالة المساعدة ()url_for لتحقيق الربط مع دالة العرض ()index، والآخر لصفحة المعلومات حول التطبيق في حال قررت تضمينها في تطبيقك. نحفظ الملف ونغلقه. الآن، سننشئ ملف قالب باسم "index.html" وهو الاسم الذي حددناه في الملف "app.py": (env)user@localhost:$ nano templates/index.html سيتضمّن هذا الملف نموذج الويب المُمرر إلى القالب "index.html" عن طريق المتغير form، وسنضيف ضمنه الشيفرات التالية: {% extends 'base.html' %} {% block content %} <h1>{% block title %} Add a New Course {% endblock %}</h1> <form method="POST" action="/"> {{ form.csrf_token }} <p> {{ form.title.label }} {{ form.title(size=20) }} </p> {% if form.title.errors %} <ul class="errors"> {% for error in form.title.errors %} <li>{{ error }}</li> {% endfor %} </ul> {% endif %} <p> {{ form.description.label }} </p> {{ form.description(rows=10, cols=50) }} {% if form.description.errors %} <ul class="errors"> {% for error in form.description.errors %} <li>{{ error }}</li> {% endfor %} </ul> {% endif %} <p> {{ form.price.label }} {{ form.price() }} </p> {% if form.price.errors %} <ul class="errors"> {% for error in form.price.errors %} <li>{{ error }}</li> {% endfor %} </ul> {% endif %} <p> {{ form.available() }} {{ form.available.label }} </p> {% if form.available.errors %} <ul class="errors"> {% for error in form.available.errors %} <li>{{ error }}</li> {% endfor %} </ul> {% endif %} <p> {{ form.level.label }} {{ form.level() }} </p> {% if form.level.errors %} <ul class="errors"> {% for error in form.level.errors %} <li>{{ error }}</li> {% endfor %} </ul> {% endif %} <p> <input type="submit" value="Add"> </p> </form> {% endblock %} نحفظ الملف ونغلقه. امتد القالب الرئيسي في بداية الشيفرة، وعيّنا عنوانًا للصفحة ضمن تنسيق عنوان من المستوى الأوّل باستخدام الوسم <h1>، ثمّ صيّرنا حقول نموذج الويب ضمن الوسم <form>، وضبطنا نوع طلبات HTTP الخاصّة به لتكون من النوع POST، والحدث المرتبط به ليكون الانتقال إلى الوجهة الرئيسية / المُتمثّلة بالصفحة الرئيسية للتطبيق. صيّرنا بدايةً المفتاح المساعد token الذي تستخدمه نماذج WTForms لحماية النموذج من هجمات CSRF باستخدام التعليمة {{ form.csrf_token }}، إذ يُرسل هذا المفتاح إلى الخادم مع بقية بيانات النموذج، ومن المهم جدًا تصيّير المفتاح المساعد لجعل النماذج آمنة. صيّرنا كل حقل من النموذج باستخدام الصيغة ()form.field، كما صيّرنا عنوان كل منها باستخدام الصيغة form.field.label، وهنا من الممكن تمرير وسطاء إلى كل حقل والتي من شأنها التحكّم بطريقة عرضه، فمثلًا عيّنا حجم الصندوق النصي الخاص بالعنوان بالشّكل {{ form.title(size=20) }}، كما عيّنا عدد الأسطر والأعمدة ضمن الحقل النصي مُتعدّد الأسطر والخاص بوصف الدورة بالشّكل من خلال المعاملين rows و cols وبنفس الطريقة التقليدية المُتبعة في لغة HTML، وبذلك من الممكن إضافة ما نشاء من سمات HTML إلى الحقول، مثل سمة class مثلًا بغية تعيّين صنفٍ لشيفرات CSS. استخدمنا الصيغة if form.field.errors للتحقّق من وجود أخطاء في المُصادقة، ففي حال وجود أخطاء في حقلٍ ما، سيجري المرور عليها باستخدام حلقة for تكرارية لتُعرض ضمن قائمة أسفل الحقل. الآن، ومع وجودنا ضمن المجلد "flask_app" ومع كون البيئة الافتراضية مُفعّلة، سنُعلم فلاسك بالتطبيق المراد تشغيله (وهو في حالتنا الملف app.py) باستخدام متغير البيئة FLASK_APP، ثم نضبط متغير البيئة FLASK_ENV لتشغيل التطبيق في وضع التطوير development، مع إمكانية الوصول إلى مُنقّح الأخطاء؛ ولمزيدٍ من المعلومات حول مُنقّح الأخطاء في فلاسك ننصحك بقراءة المقال كيفية التعامل مع الأخطاء في تطبيقات فلاسك، ولتنفيذ ما سبق سنشغّل الأوامر التالية (مع ملاحظة أنّنا نستخدم الأمر set في بيئة ويندوز عوضًا عن الأمر export? (env)user@localhost:$ export FLASK_APP=app (env)user@localhost:$ export FLASK_ENV=development والآن سنشغّل التطبيق باستخدام الأمر التالي: (env)user@localhost:$ flask run وبعد التأكد من كون خادم التطوير ما يزال قيد التشغيل، نذهب إلى الرابط التالي باستخدام المتصفح: http://127.0.0.1:5000/ فيظهر نموذج الويب ضمن الصفحة الرئيسية للتطبيق كما هو موضح في الشكل التالي: ولو جرّبنا إرسال النموذج مع ترك حقل العنوان فارغًا، ستظهر رسالة خطأ تعلمنا بأن العنوان مطلوب، وهنا من الجيد تجربة إرسال نماذج ببيانات لا تحقق الشروط بغية التعرّف على رسائل الخطأ المُختلفة، مثل إدخال عنوان بأقل من 10 محارف، أو وصف يتجاوز 200 محرف، أمّا إذا ملأنا النموذج ببيانات صحيحة وأرسلناه فلن يحدث شيء حاليًا، والسبب أنّنا لم نضف حتى الآن الشيفرة اللازمة للتعامل مع النماذج المُرسلة، الأمر الذي سنفعله لاحقًا. سنعمل الآن على إضافة صفحة لعرض الدورات الموجودة في القائمة، وسنضيف فيما بعد ما يلزم للتعامل مع البيانات الآتية من نموذج الويب، والتي ستضيف بالنتيجة دورة جديدة إلى القائمة، ليُعاد بعدها توجيه المُستخدم إلى صفحة عرض الدورات ليرى أنّ الدورة الجديدة قد أُضيفت فعلًا. لذلك، سنفتح نافذة أسطر أوامر جديدة مع بقاء خادم التطوير قيد التشغيل، ثمّ سنفتح الملف app.py لإضافة الوجهة الخاصّة بصفحة عرض الصفحات إليه: (env)user@localhost:$ nano app.py وسنضيف الوجهة التالية إلى نهاية الملف: # ... @app.route('/courses/') def courses(): return render_template('courses.html', courses_list=courses_list) نحفظ الملف ونغلقه. تُخرج الوجهة السابقة قالبًا باسم "courses.html" ممرّرة له قائمة الدورات courses_list. أمّا الآن فسننشئ القالب "courses.html" المسؤول عن عرض الدورات: (env)user@localhost:$ nano templates/courses.html ونكتب ضمنه الشيفرة التالية: {% extends 'base.html' %} {% block content %} <h1>{% block title %} Courses {% endblock %}</h1> <hr> {% for course in courses_list %} <h2> {{ course['title'] }} </h2> <h4> {{ course['description'] }} </h4> <p> {{ course['price'] }}$ </p> <p><i>({{ course['level'] }})</i></p> <p>Availability: {% if course['available'] %} Available {% else %} Not Available {% endif %}</p> <hr> {% endfor %} {% endblock %} نحفظ الملف ونغلقه. عيّنا في الشيفرة السابقة عنوانًا، ثمّ مررنا على كافّة عناصر القائمة courses_list، إذ سيُعرض العنوان ضمن تنسيق عنوان من المستوى الثاني باستخدام الوسم <h2>، والوصف ضمن تنسيق عنوان من المستوى الرابع <h4>، أمّا كل من السعر والمستوى فسيُعرضان ضمن تنسيق فقرة باستخدام الوسم <p>، ويجري التحقّق من كون الدورة مُتاحة باستخدام العبارة الشرطية ['if course['available، لتُعرض العبارة "Available"، والتي تعني أن الدورة مُتاحة في حال توفرها، والعبارة "Not Available" في حال عدم توفرها. وبالانتقال إلى صفحة الدورات باستخدام الرابط التالي في المتصفح: http://127.0.0.1:5000/courses/ ستظهر الصفحة مُتضمّنةً دورةً تدريبيةً واحدةً وهي تلك التي أضفناها يدويًا إلى قائمة بايثون سابقًا، كما هو موضح في الشّكل التالي: أمّا الآن، سنفتح ملف القالب الأساسي "base.html" لتعديله بغية إضافة رابط مباشر ينقلنا إلى صفحة عرض الدورات وذلك ضمن شريط التصفّح: (env)user@localhost:$ nano templates/base.html ونعدله ليبدو على النحو التالي: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %} {% endblock %} - FlaskApp</title> <style> nav a { color: #d64161; font-size: 3em; margin-left: 50px; text-decoration: none; } </style> </head> <body> <nav> <a href="{{ url_for('index') }}">FlaskApp</a> <a href="{{ url_for('courses') }}">Courses</a> <a href="#">About</a> </nav> <hr> <div class="content"> {% block content %} {% endblock %} </div> </body> </html> نحفظ الملف ونغلقه. الآن سيظهر رابط الانتقال إلى صفحة عرض الدورات ضمن شريط التصفّح عند تحديث الصفحة الرئيسية للتطبيق في المتصفّح. ومع نهاية هذه الخطوة نكون قد أنشأنا الصفحات اللازمة للتطبيق، وهي: الصفحة الرئيسية "index.html" المُتضمّنة نموذج ويب لإضافة دورات جديدة، وصفحة لعرض الدورات المُخزّنة ضمن قائمة الدورات "courses.html". لجعل التطبيق يعمل فعليًا، سنعالج في الخطوة التالية البيانات التي يرسلها المُستخدم عبر نموذج الويب من حيث التحقّق من صحتها وإضافتها إلى قائمة الدورات. الخطوة الرابعة - الوصول إلى بيانات النموذج سنعمل في هذه الخطوة على الوصول إلى البيانات التي أرسلها المُستخدم عبر النموذج للتأكّد من صحتها ومن ثمّ إضافتها إلى قائمة الدورات. لذلك، سنفتح الملف "app.py" لتعديله بإضافة الشيفرات اللازمة للتعامل مع بيانات نموذج الويب وذلك ضمن الدالة ()index: (env)user@localhost:$ nano app.py وسنعدّل الدالة ()index لتصبح كما يلي: # ... @app.route('/', methods=('GET', 'POST')) def index(): form = CourseForm() if form.validate_on_submit(): courses_list.append({'title': form.title.data, 'description': form.description.data, 'price': form.price.data, 'available': form.available.data, 'level': form.level.data }) return redirect(url_for('courses')) return render_template('index.html', form=form) نحفظ الملف ونغلقه. استدعينا في الشيفرة السابقة التابع ()validate_on_submit من الكائن form، إذ يتحقّق هذا التابع من كون طلب HTTP من النوع POST، ثمّ شغلنا المدققات التي أعددناها سابقًا لكل حقل من الحقول، فإذا أعاد أي منها خطأ ما لن يتحقق الشرط أي ستكون قيمته False، وسيظهر كل خطأ أسفل الحقل الذي تسبب بحدوثه. أمّا في حال كانت كافّة البيانات المُدخلة صحيحة، سيتحقق الشرط أي ستكون قيمته True وبالتالي سيُنفّذ جزء الشيفرة التالي لتعليمة if، وفيها نبني قاموس بايثون للدورة الجديدة ومن ثمّ نستخدم التابع append لإضافة هذه الدورة إلى قائمة الدورات courses_list، إذ استخدمنا الصيغة form.field.data للوصول إلى قيمة كل حقل في النموذج، ونهايةً وبعد إضافة الدورة الجديدة إلى قائمة الدورات، نعيد توجيه المُستخدم إلى صفحة عرض الدورات. الآن، سننتقل إلى الصفحة الرئيسية للتطبيق مع كون خادم التطوير قيد التشغيل، باستخدام الرابط: http://127.0.0.1:5000/ وبملء النموذج ببيانات صحيحة وإرساله، نلاحظ إضافة الدورة الجديدة فعلًا، وسنُوجّه تلقائيًا إلى صفحة عرض الدورات من التطبيق والتي ستظهر فيها الدورة الجديدة المُضافة. الخلاصة أنشأنا في هذه المقال تطبيق فلاسك ذا نموذج ويب مبني باستخدام الإضافة Flask-WTF والمكتبة WTForms، إذ ضمّنا في نموذج الويب هذا العديد من أنواع الحقول التي من شأنها استقبال البيانات من المُستخدم وتحقّقنا من صحتها بالاعتماد على المُدققين الخاصين بمكتبة WTForms، لنضيف هذه البيانات بالنتيجة إلى مخزن البيانات وهو قائمة بايثون في مثالنا. ترجمة -وبتصرف- للمقال How To Use and Validate Web Forms with Flask-WTF لصاحبه Abdelhadi Dyouri. اقرأ أيضًا كيفية استخدام نماذج الويب في تطبيقات فلاسك Flask مدخل إلى استخدام مكتبة WTForms للتعامل مع نماذج HTML في تطبيقات Flask إنشاء تطبيق ويب باستخدام إطار عمل فلاسك Flask من لغة بايثون
    1 نقطة
  49. تتطور علوم الحاسوب بطريقة سريعة ومتزايدة، ويركز الاختصاصيون اليوم على تقنيات التعلم الآلي والتعلم العميق التي تعتمد على برمجيات معينة مثل المكتبات المتطورة في لغة البرمجة بايثون. يسعى الطلاب والباحثون إلى تعلم هذه التقنيات وبناء المشاريع باستخدامها، وبالتالي فإنهم يحتاجون بيئةً برمجيةً متطورة ومواصفات متقدمة ليتمكن النظام من تحمّل عبء الذاكرة الكبيرة ومعالجة البيانات الضخمة. والمشكلة أنه من الصعب تأمين هذه المواصفات العالية في أجهزتهم. ولذلك أطلقت غوغل منصة Google Colab لمساعدة الطلاب والباحثين على التعلم والتغلب على العقبات. في هذا المقال، سنتحدث عن منصة جوجل كولاب Google Colab وأهم استخداماتها وميزاتها، ولماذا هي أداة مهمة للطلاب والمختصين بعلم البيانات. ما هو NoteBook؟ لغات البرمجة هي اللغات المستخدمة لتطوير البرامج والتطبيقات، وتُشكل الوسيط بين اللغة التي يفهمها الإنسان واللغة التي تفهمها الآلة. كل البرامج والتطبيقات التي تعمل على الحواسيب والهواتف المحمولة أُنشئت باستخدام إحدى لغات البرمجة، حيث يبني المطورون التطبيقات برمجيًا ليتمكن أي شخص من استخدامها. عندما يبرمج أحد المطورين نموذجًا لحل مشكلة معينة، سيكون عليه إرفاق النموذج بشرحٍ لطريقة عمله، ومن الصعب القيام بذلك من خلال التعليمات البرمجية فقط، لذلك سيضطر إلى إعداد عرض تقديمي منفصل. لتسهيل عمل المبرمجين صُمم برنامج دفتر الملاحظات NoteBook، الذي يتضمن سطورًا خاصةً بالتعليمات البرمجية، ومساحةً لكتابة النصوص والتعليقات وإضافة الصور والجداول والرسوم البيانية. وتساعد مستندات NoteBook على فهم الشيفرات البرمجية وطريقة عمل البرنامج. يعَد دفتر الملاحظات أو NoteBook مستندًا يمكن من خلاله كتابة التعليمات البرمجية مثل شيفرات لغة بايثون وكتابة النصوص وإضافة الصور، ويمكن تنفيذها وعرض النتائج. يُعد Google Colab نسخةً سحابيةً محسنةً من Jupyter Notebook المخصص لكتابة وتشغيل الشيفرات البرمجية ومستندات Notebook، وذلك من خلال بيئة برمجية متكاملة أو مستعرض ويب. يوفر Google Colab وصولًا مجانيًا إلى وحدات معالجة الرسومات GPU وTPU، والتي تستخدم لبناء نموذج التعلم الآلي أو التعلم العميق. ويُعد Google Colab خيارًا مثاليًا لملايين المستخدمين لأنه مجاني ولا يتطلب سوى امتلاك حساب غوغل، كما أنه لا يحتاج إلى سرعات اتصال عالية. ويأتي مع حزم مُثبتة مسبقًا وجاهزة للاستخدام، بالتالي لن يحتاج المستخدم إلى إعداد البيئة. دورة تطوير التطبيقات باستخدام لغة Python احترف تطوير التطبيقات مع أكاديمية حسوب والتحق بسوق العمل فور انتهائك من الدورة اشترك الآن كيفية استخدام Google Colab إذا كنت قد استخدمت منصة Jupyter Notebooks من قبل، فستلاحظ التشابه الكبير بينها وبين منصة Google Colab. تمكّنك منصة Google Colab من كتابة وتنفيذ التعليمات البرمجية المكتوبة بلغة بايثون من خلال متصفحك دون الحاجة إلى تثبيت أي محرر أو برنامج. ويمكن استخدام هذه المنصة بسهولة وربطها بحساب غوغل، وتوفر لك وصولًا مجانيًا إلى وحدات معالجة الرسومات GPU ووحدات المعالجة المركزية TPU. كانت تُستخدم منصة Google Colab في السابق كأداةٍ داخلية لتحليل بيانات غوغل. وأصبحت فيما بعد متاحةً للعامة ومُستخدمةً من قبل عدد كبير من الأشخاص. يستخدم الطلاب والباحثين منصة Google Colab لبناء المشاريع البرمجية التي تتضمن تقنيات التعلم الآلي أو التعلم العميق. وتؤمّن هذه المنصة الموارد اللازمة لتشغيل تجارب علوم البيانات وخاصةً لمن لا يمتلك وحدة معالجة رسومات متطورة في جهازه. تُعَد النسخة المجانية من Google Colab مناسبةً للطلاب وللمبتدئين في علم البيانات، ولكنها غير مناسبة للمشاريع الضخمة والتي تتطلب معالجة كميات كبيرة من البيانات والصور، لذلك أصدرت غوغل في أوائل عام 2020 النسخة المدفوعة Google Colab Pro، والتي تؤمّن نظام معالجة رسومات أكثر سرعةً وذاكرة وصول عشوائي إضافية. وقد قدّم Colab Pro حلًا للعديد من المشكلات التي تواجه مهندسي التعلم الآلي وعلماء البيانات. لا يزال Google Colab Pro حتى الآن (وقت كتابة المقال) غير متوافر في العديد من البلدان، ويقتصر على البلدان التالية: الولايات المتحدة وكندا واليابان والبرازيل وألمانيا وفرنسا والهند والمملكة المتحدة وتايلاند. ماذا يقدم لك Google Colab؟ يسمح Google Colab لملايين الأشخاص بالتعلم وتنفيذ المشاريع بلغة بايثون، واستخدام المكتبات المثبتة مسبقًا، ويقدم حلًا للكثير من التحديات التي تواجههم. من السهل البدء باستخدام Google Colab، ولن تحتاج إلى تثبيت أي أدوات أو برامج، كما أنه لا يتطلب جهاز حاسوب بمواصفات خارقة. وستحتاج فقط إلى متصفح وستظهر واجهة Google Colab بشكل مشابه لواجهة jupyter Notebook. يمكن استخدام وحدة معالجة الرسومات بنقرة واحدة، وتنفيذ الشيفرات البرمجية بسهولة؛ مما يجعله بيئةً مثاليةً لتنفيذ مشاريع التعلم الآلي والتعلم العميق وتحليل البيانات الضخمة. يدعم كولاب لغة البرمجة بايثون، ويسمح لك بتشغيل التعليمات البرمجية في كتل، ويمكنك عرض النتائج والمخرجات الرسومية بسهولة، ولكن تقتصر مدة الجلسة الواحدة على 12 ساعة من الاستخدام المتواصل، وبعد انتهاء الوقت ستنتهي الجلسة. تُحفظ مستندات Google Colab التي تُنشئها على منصة غوغل درايف، بالتالي سيكون من السهل مشاركتها مع عدة أشخاص، ويمكنهم جميعًا العمل على نفس الدفتر في نفس الوقت دون أية مشاكل. توفّر غوغل استخدام وحدة معالجة الرسومات NVIDIA Tesla K80 المجانية. وإذا قمت بوصل Colab بـ Google Drive، ستحصل على 15 غيغابايت من مساحة القرص لتخزين مجموعات البيانات. من سلبيات Google Colab صعوبة اكتشاف الأخطاء في التعليمات البرمجية قبل تشغيلها، ولكن لا تزال هي المنصة الأفضل للاستخدام بفضل الميزات العديدة الموجودة. أما فيما يلي، فسنذكر أهم الميزات المتوفرة في هذه المنصة: محرر لكتابة التعليمات البرمجية باستخدام لغة البرمجة بايثون. إنشاء ومشاركة مستندات Notebook. خدمة سحابية مجانية مع GPU وTPU. حفظ واستيراد المستندات من وإلى خدمة غوغل للتخزين السحابي Google Drive. إمكانية توثيق الشيفرات البرمجية وشرحها وتوضيحها. استيراد قواعد البيانات من مصادر خارجية مثل Kaggle. استيراد مستندات Notebook من GITS. تتواجد العديد من مكتبات علوم البيانات والتعلم الآلي ُمثبتة مسبقًا على منصة كولاب مثل مكتبة Pandas وNumPy وTensorflow وKeras وOpenCV. الفرق بين Jupyter وGoogle Colab؟ من بين أبرز الفروقات بين كل من Jupyter وGoogle Colab، نذكر الآتي: يعمل Jupyter على جهاز حاسوب محلي، أما كولاب فيعمل على خادم غوغل. عند استخدام Jupyter تُحفظ الملفات على القرص الثابت على جهاز الحاسوب، بالمقابل تخزّن الملفات في حساب غوغل درايف عند استخدام غولاب. يستهلك Jupyter ذاكرة الوصول العشوائي RAM ووحدة المعالجة المركزية وأقراص التخزين المثبتة على حاسوبك الشخصي؛ أما Google Colab، فيعتمد على التخزين السحابي، ويمنحك وصولًا إلى ذاكرة وصول عشوائي أعلى، و70 وحدة تخزين على القرص، وقدرة على استخدام وحدة معالجة الرسومات المجانية GPU. يعتمد تشغيل Jupyter على حد ذاكرة النظام على جهازك، أما Google Colab، فيحدد وقت التشغيل بمقدار 12/24 عند استخدام النسخة المجانية، ويمكن أن تحدث انقطاعات أثناء الجلسات. عند استخدام Google Colab لن تضطر إلى تثبيت أي مكتبة لأن معظم المكتبات مثبتة مسبقًا، بينما عند استخدام Jupyter، يجب عليك تثبيت جميع المكتبات المطلوبة حسب حاجتك. يُفضل استخدام Jupyter إذا كان عملك سريًا ويتطلب الخصوصية. وبالمقابل، يُعد Google Colab الخيار الأفضل إذا كان مشروعك يتطلب قدرات تخزين عالية ولا يمكنك شراء جهاز بالمواصفات المطلوبة. ما هو GPU ولماذا نحتاجه للذكاء الاصطناعي؟ صُممت وحدات معالجة الرسومات لتدريب نماذج الذكاء الاصطناعي والتعلم العميق. تضم هذه الوحدات عددًا كبيرًا من النوى التي تسمح بتنفيذ العديد من العمليات المتوازية. البرامج التي تستخدم تقنيات التعلم العميق تحتاج إلى التعامل مع كميات هائلة من البيانات، وتوفر وحدات GPU عرض نطاق ترددي مناسب. تتطلب معالجة البيانات الضخمة استخدام أجهزة متطورة وسريعة. وتكمن التحديات التي ترافق هذا النوع من البيانات في تخزينها ومعالجتها ومشاركتها ونقلها. ولأن البيانات الضخمة حجر الأساس للذكاء الاصطناعي، فإن التعامل معها يشكّل عائقًا للطلاب والباحثين، نتيجة صعوبة توافر الأجهزة ذات المواصفات العالية. الميزة الأساسية التي تقدّمها منصة غوغل كولاب هي توفير وحدات معالجة الرسومات GPU وTPU المجانية، والتي تمكّن المستخدمين من تدريب نماذج التعلم العميق المعقدة مع مجموعات البيانات الضخمة، وقد تستغرق هذه العملية عدة ساعات على الحواسيب العادية. وبالمقابل، هي تستغرق بضعة دقائق باستخدام وحدات معالجة الرسومات المتطورة. يفضل الباحثون استخدام وحدة معالجة الرسومات المدمجة في غوغل كولاب بسبب القوة السحابية المطلقة وسرعة التنفيذ التي تتمتع بها. دورة الذكاء الاصطناعي احترف برمجة الذكاء الاصطناعي AI وتحليل البيانات وتعلم كافة المعلومات التي تحتاجها لبناء نماذج ذكاء اصطناعي متخصصة. اشترك الآن خاتمة أدى التطور في العلم والاقتصاد وتكنولوجيا المعلومات إلى زيادة كمية البيانات الرقمية وأصبح من الصعب التعامل معها بالتقنيات العادية. وازدادت الحاجة إلى وجود أدوات تسمح لنا بتحليل البيانات لاستخدامها في الذكاء الاصطناعي وتطوير تطبيقات التعلم الآلي. إذا كنت ترغب بالدخول إلى عالم البيانات والذكاء الاصطناعي، يجب أن تكون على اطلاع ومعرفة بأهم الأدوات المتوافرة مثل غوغل كولاب، الذي يمنحك فرصةً مثاليةً للتعلم واكتساب الخبرات. اقرأ أيضًا دليل استخدام Google Colab كيفية التعامل مع البيانات في Google Colab
    1 نقطة
×
×
  • أضف...