لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 09/02/24 في كل الموقع
-
السلام عليكم اي هو الcommad line زاي اقدر استفيد منو ؟3 نقاط
-
يعطيكم العافية مشكلتي في السطر 44 و 50 ما عم يشتغل معي الكود وحاولت اعرف وين المشكلة بس للاسف بتمنى مساعدتكم <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> *{ margin: 0; padding: 0; box-sizing: border-box; } img{ width: 100%; border-radius: 10px 100px; } h1{ text-align: center; font-size: 25px; } nav{ background-color: #0f1922; opacity: 0.9; padding: 30px 0 ; margin: 30px 0; border-radius: 10px 100px; position: sticky; top: 0; text-align: center; } p{ margin: 40px 20px; font-size: 20px; } a{ color: white; padding:15px 30px ; text-decoration: none; font-size: 20px; } a:hover{ background-color: #16446c; border-radius: 10px 100px; transition: all 0.7s; } h1 :hover , p :hover{ background-color: hotpink; padding: 20px 0; transition: all 0,9s ; border-radius: 15px; } </style> </head> <body> <img src="img/pexels-agneselunecka-25857969.jpg" alt="asaa"> <nav> <a href="www.google.com"> Most Popular</a> <a href="www.google.com"> Top Rated</a> <a href="www.google.com">Coming soon</a> <a href="www.google.com">News</a> </nav> <h1 class="asaa">Main Title of the page</h1> <p> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Exercitationem explicabo assumenda, ex dolorem earum adipisci nihil impedit aliquam atque quae?</p> <p> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Exercitationem explicabo assumenda, ex dolorem earum adipisci nihil impedit aliquam atque quae?</p> <p> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Exercitationem explicabo assumenda, ex dolorem earum adipisci nihil impedit aliquam atque quae?</p> <p> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Exercitationem explicabo assumenda, ex dolorem earum adipisci nihil impedit aliquam atque quae?</p> <p> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Exercitationem explicabo assumenda, ex dolorem earum adipisci nihil impedit aliquam atque quae?</p> <p> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Exercitationem explicabo assumenda, ex dolorem earum adipisci nihil impedit aliquam atque quae?</p> <p> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Exercitationem explicabo assumenda, ex dolorem earum adipisci nihil impedit aliquam atque quae?</p> <p> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Exercitationem explicabo assumenda, ex dolorem earum adipisci nihil impedit aliquam atque quae?</p> <p> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Exercitationem explicabo assumenda, ex dolorem earum adipisci nihil impedit aliquam atque quae?</p> <p> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Exercitationem explicabo assumenda, ex dolorem earum adipisci nihil impedit aliquam atque quae?</p> <p> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Exercitationem explicabo assumenda, ex dolorem earum adipisci nihil impedit aliquam atque quae?</p> <p> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Exercitationem explicabo assumenda, ex dolorem earum adipisci nihil impedit aliquam atque quae?</p> <p> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Exercitationem explicabo assumenda, ex dolorem earum adipisci nihil impedit aliquam atque quae?</p> <p> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Exercitationem explicabo assumenda, ex dolorem earum adipisci nihil impedit aliquam atque quae?</p> <p> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Exercitationem explicabo assumenda, ex dolorem earum adipisci nihil impedit aliquam atque quae?</p> <p> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Exercitationem explicabo assumenda, ex dolorem earum adipisci nihil impedit aliquam atque quae?</p> <p> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Exercitationem explicabo assumenda, ex dolorem earum adipisci nihil impedit aliquam atque quae?</p> <p> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Exercitationem explicabo assumenda, ex dolorem earum adipisci nihil impedit aliquam atque quae?</p> <p> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Exercitationem explicabo assumenda, ex dolorem earum adipisci nihil impedit aliquam atque quae?</p> <p> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Exercitationem explicabo assumenda, ex dolorem earum adipisci nihil impedit aliquam atque quae?</p> <p> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Exercitationem explicabo assumenda, ex dolorem earum adipisci nihil impedit aliquam atque quae?</p> </body> </html>3 نقاط
-
2 نقاط
-
.ممكن اعرف ايه الفرق بين ب Attribute Global و Attribute مع توضيح التفاصيل؟1 نقطة
-
مرحبا, ما رأيكم في اللعبة و كيف يمكن تحسينها؟ you need pygame: pip install pygame and to run the game py main.py my_number_guess.rar1 نقطة
-
دعك من اللعبة حاليًا، مستواك تطور منذ أخر مرة وذلك جيد جدًا، وسيتحسن باستمرار طالما أنك توظف ما تعلمته من خلال مشاريع عملية، لكن عليك تحديد وجهتك والتخصص الذي تريده لكي تلتزم بخريطة طريق roadmap في خلال فترة زمنية محددة وقياس تقدمك خلال تلك الفترة. بخصوص اللعبة فأحسنت حقًا، والجزء الخاص بشريط التقدم الذي يوضح مدى قربك من الرقم المنطق الخاص بها شائع في أغلب البرامج ومن الجيد أنك تعلمته ويعمل بشكل سليم، ومن الأفضل لو تم تغيير لونه حسب مدى القرب مثلاً أحمر - برتقالي - أخضر. وهناك مشكلة بسيطة بخصوص زر الإدخال Enter، فعند الضغط عليه من لوحة الأرقام يتم إدخال مسافة فارغة، لكن عند الضغط عليه من الزر الرئيسي Enter يعمل بدون مشكلة، حاول اكتشاف الخطأ. وبعض الدوال طويلة جدًا، حاول تقسيمها إلى دوال أصغر وأكثر تركيزًا، مثل تقسيم دالة draw_gradient_background إلى دالتين واحدة لحساب ألوان التدرج وأخرى لرسم الخطوط. وعلى ذكر التقسيم والتنظيم، فلما تستخدم نمط التصميم game state machine وهو نمط مفيد للألعاب، ومفاده هو حالة اللعبة Game State) في أي لحظة أثناء تشغيل اللعبة، تكون اللعبة في حالة معينة، وفي لعبة تخمين الأرقام، تشمل الحالات: Playing يقوم اللاعب بإدخال التخمينات. Game Over) خمن اللاعب الرقم بشكل صحيح أو نفدت محاولاته. High Score Display يتم عرض أفضل نتيجة بعد انتهاء اللعبة. أي كالتالي: class GameStateMachine: def __init__(self): self.states = { 'playing': PlayingState(), 'game_over': GameOverState(), 'high_score': HighScoreState() } self.current_state = 'playing' def update(self): self.states[self.current_state].update() def change_state(self, new_state): self.current_state = new_state class PlayingState: def __init__(self): def update(self): class GameOverState: def __init__(self): def update(self): class HighScoreState: def __init__(self): def update(self): وبدلاً من كتابة قيم الألوان وأحجام الخطوط مباشرةً، ضع في اعتبارك تعريف الثوابت في أعلى الكود، من أجل تسهيل تغيير مظهر اللعبة دون البحث عن قيم فردية. أيضًا استخدم دالة pygame.event.get() من Pygame للتعامل مع أحداث متعددة في وقت واحد، مما يقلل من عدد عبارات if في شفرة معالجة الأحداث. وأنت ترسم كل زر على حدة، فلما لا تعتمد على حلقة لرسم جميع الأزرار مرة واحدة، لتحسين الأداء وتقليل تكرار الكود. ولجعل اللعبة أكثر متعة حاول إضافة Timer ثم إنقاصه بمعدل معين مع كل خطأ مثلاً، وإضافة بعض الأصوات اللطيفة. أو تقديم مستويات صعوبة مختلفة، مثل وضع صع مع نطاق أكبر من الأرقام أو وضع سهل مع نطاق أصغر.1 نقطة
-
في 44 line: كتابة قيمة transition في الخاصية :hover. هناك فاصلة بدلًا من النقطة في القيمة 0,9s. يجب أن تكون القيمة مكتوبة هكذا: 0.9s. اما في 50 line: الكود يحتوي على مسافة غير صحيحة بين وسم h1 والخاصية :hover. يجب أن تكون كتابة الخاصية :hover بدون مسافة بينها وبين الوسم. و هذا هو الحل: h1:hover, p:hover { background-color: hotpink; padding: 20px 0; transition: all 0.9s; border-radius: 15px; } و يجب ان يكون اللينكات تبدأ ب http او https مثل هكذا: <a href="https://www.google.com"> Most Popular</a> و الكود النهائى يكون: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } img { width: 100%; border-radius: 10px 100px; } h1 { text-align: center; font-size: 25px; } nav { background-color: #0f1922; opacity: 0.9; padding: 30px 0; margin: 30px 0; border-radius: 10px 100px; position: sticky; top: 0; text-align: center; } p { margin: 40px 20px; font-size: 20px; } a { color: white; padding: 15px 30px; text-decoration: none; font-size: 20px; } a:hover { background-color: #16446c; border-radius: 10px 100px; transition: all 0.7s; } h1:hover, p:hover { background-color: hotpink; padding: 20px 0; transition: all 0.9s; border-radius: 15px; } </style> </head> <body> <img src="img/pexels-agneselunecka-25857969.jpg" alt="asaa"> <nav> <a href="www.google.com"> Most Popular</a> <a href="www.google.com"> Top Rated</a> <a href="www.google.com">Coming soon</a> <a href="www.google.com">News</a> </nav> <h1 class="asaa">Main Title of the page</h1> <p> Lorem ipsum dolor, sit amet consectetur adipisicing elit. Exercitationem explicabo assumenda, ex dolorem earum adipisci nihil impedit aliquam atque quae?</p> <!-- باقي الفقرات... --> </body> </html>1 نقطة
-
بسبب كتابة الأكواد دون تنسيق هنا فلقد إختلفت ترتيب الأسطر عما لديك . إذا كنت تقصد عدم تطبيق تنسيقات العناصر عند ال hover عليها فهذا بسبب أنك قد وضعت مسافة فاصلة بين العنصر وبين الصنف الزائف حيث لا يجب وضع مسافة تفصل بينهم وهذا هو الكود الصحيح : h1:hover, p:hover { background-color: hotpink; padding: 20px 0; transition: all 0, 9s; border-radius: 15px; } ويمكنك قراءة الدرس التالي لكيفية إستخدام الأصناف و العناصر الزائفة :1 نقطة
-
تقصدين مشكلة عدم تغير الخلفية عند عمل hover على العنصر H1 و p؟ ذلك بسبب أنك وضعتي مسافة بين العنصر (المحدد) وبين الصنف الزائف :hover لذا الصحيح هو التالي: h1:hover, p:hover { background-color: hotpink; padding: 20px 0; transition: all 0, 9s; border-radius: 15px; } لاحظي عدم وجود مسافة عند كتابة الصنف الزائف pseudo class .1 نقطة
-
1 نقطة
-
1 نقطة
-
متعلمه جزاء بسيط من بلي رايت وواجهة بعض المشاكل احتاج مساعدة شخص يفيدني بخبرته ويساعدني في اكمال كتابة الكود1 نقطة
-
1 نقطة
-
تلك ممارسة جيدة بالطبع، فقواعد البيانات مصممة للتخزين والاسترجاع الفعال للبيانات، وليست لمعالجة البيانات وتحويلها، حيث تساعد المعالجة المسبقة في تحديد وتصحيح الأخطاء في البيانات، مثل القيم المفقودة أو غير الصحيحة مما يقلل من حجم الـ dataset، قبل إدخالها في قاعدة البيانات. فتنفيذ المعالجة المسبقة باستخدام Pandas يكون أسرع وأكثر كفاءة في كثير من الأحيان، ولديك أدوات أخرى مثل OpenRefine.1 نقطة
-
لماذا تظهر ايقونات وسائل الدفع في موقع خمسات بصورة غير فعالة اي لون باهت لانني اريد شحن رصيدي في موقع خمسات علمل انني من العراق1 نقطة
-
اه يعني يفضل الاول ان اعمل معالجة قبل ما احول البيانات ال csv الي قاعد بيانات ؟1 نقطة
-
1 نقطة
-
يمكنك تصفح موسوعة حسوب التي تحتوي على توثيق شامل للغة بايثون، حيث تجد المصطلحات الإنجليزية مرفقة بجانب الترجمة العربية. عن طريق هذا المسار. كما يوجد كتاب خاص بلغة بايثون تابع للأكاديمية، يقدم شرحاً وافياً للغة ومدعوماً بالمصطلحات الإنجليزية بجانب العربية. يمكنك تحميل الكتاب من هذه الصفحة: البرمجة بلغة بايثون. إذا واجهتك صعوبة فستجد أسفل الدرس صندوق للتعليقات كما هنا، او هنا يمكنك السؤال عن اى سؤال و سوف يتم الرد عليها سريعا. .1 نقطة
-
ستجد ما تريده في موسوعة حسوب: https://wiki.hsoub.com/Python وإن لم يتضح لك أمر أرجو السؤال عنه أسفل الدرس وسيتم توضيحه لك. وعامًة إليك بعض المصطلحات البرمجية العامة: متغير - Variable: مكان في الذاكرة لتخزين البيانات. نوع البيانات - Data Type: يحدد نوع البيانات التي يمكن تخزينها في المتغير (مثل: نص، عدد صحيح، عدد عشري). عامل - Operator: رمز أو كلمة تستخدم لتنفيذ عملية على البيانات (مثل: + للجمع، - للطرح). تعبير - Expression: مجموعة من المتغيرات والعوامل التي تُرجع قيمة. شرط - Condition: تعبير منطقي يُرجع إما صحيح أو خطأ. جملة - Statement: سطر من التعليمات البرمجية التي تُنفذ مهمة محددة. كتلة - Block: مجموعة من الجمل التي تُنفذ معًا. دالة - Function: مجموعة من التعليمات البرمجية التي تُنفذ مهمة محددة وتُعيد قيمة. معامل - Parameter: قيمة تُمرر إلى دالة عند استدعائها. مصفوفة - Array: مجموعة من البيانات من نفس النوع مخزنة في مكان واحد. حلقة - Loop: تُستخدم لتكرار مجموعة من التعليمات البرمجية عدة مرات. مصفوفة ترابطية - Associative Array / Dictionary: مجموعة من البيانات مخزنة كأزواج من المفتاح والقيمة. كائن - Object: كيان يجمع بين البيانات والوظائف التي تعمل على هذه البيانات. فئة - Class: قالب لإنشاء الكائنات. وراثة - Inheritance: آلية تسمح لفئة ما بوراثة خصائص وصفات فئة أخرى. تعدد الأشكال - Polymorphism: القدرة على استخدام نفس الاسم لوظائف مختلفة في سياقات مختلفة. ملف - File: مجموعة من البيانات المخزنة على وسيط تخزين دائم. استثناء - Exception: حدث غير طبيعي يحدث أثناء تنفيذ البرنامج. معالجة الاستثناءات - Exception Handling: آلية للتعامل مع الاستثناءات ومنع تعطل البرنامج. وبالنسبة للمصطلحات الخاصة ببايثون: وحدة - Module: ملف يحتوي على تعليمات برمجية بايثون يمكن استخدامه في برامج أخرى. حزمة - Package: مجموعة من الوحدات النمطية. قائمة - List: مجموعة مرتبة من العناصر قابلة للتغيير. مجموعة - Tuple: مجموعة مرتبة من العناصر غير قابلة للتغيير. مجموعة - Set: مجموعة غير مرتبة من العناصر الفريدة. قاموس - Dictionary: مجموعة غير مرتبة من أزواج المفتاح والقيمة. تعليمة استيراد - Import Statement: تُستخدم لاستيراد وحدات أو حزم في البرنامج. ديكوريتور - Decorator: دالة تُعدل سلوك دالة أخرى. مولد - Generator: دالة تُعيد سلسلة من القيم. استدعاء ذاتي - Recursion: عندما تستدعي الدالة نفسها داخل تعريفها. تعبير لامبدا - Lambda Expression: دالة مجهولة تُعرّف وتُستخدم في سطر واحد. استيعاب القائمة - List Comprehension: طريقة لإنشاء قائمة جديدة من قائمة موجودة في سطر واحد. استيعاب المجموعة - Set Comprehension: طريقة لإنشاء مجموعة جديدة من مجموعة موجودة في سطر واحد. استيعاب القاموس - Dictionary Comprehension: طريقة لإنشاء قاموس جديد من قاموس موجود في سطر واحد. إدارة الحزم - Package Management: عملية تثبيت وتحديث وإزالة الحزم. بيئة افتراضية - Virtual Environment: بيئة معزولة لتشغيل مشروع بايثون بتبعياته الخاصة.1 نقطة
-
يمكنك تصفح موسوعة حسوب حيث يوجد بها توثيق للغة بايثون والمصطلحات الإنجليزية موجودة بجانب اللغة العربية يمكنك الدخول لها من هنا. أيضا يوجد كتاب خاص للغة بايثون تابع للأكاديمية يوجد به شرح جيد لبايثون ومدعم بكافة المصطلحات الإنجليزية بجانب العربية يمكنك تحميله من هذه الصفحة البرمجة بلغة بايثون. وهذه قائمة مختصرة بالمصطلحات الشائعة في بايثون مع ترجمتها إلى العربية Variables - المتغيرات Data Types - أنواع البيانات Functions - الدوال Loops - الحلقات التكرارية Conditionals - الشروط Lists - القوائم Dictionaries - القواميس Tuples - الصفوف Sets - المجموعات Modules - الوحدات البرمجية Classes - الفئات Objects - الكائنات Exceptions - الاستثناءات Lambda Functions - الدوال المجهولة Decorators - الزخارف (Decorators) Generators - المولّدات Iterators - الكائنات المتكررة List Comprehensions - توليد القوائم Dictionary Comprehensions - توليد القواميس String Formatting - تنسيق النصوص Import Statements - عبارات الاستيراد Slicing - تقطيع السلاسل Mutable vs Immutable - المتغيرات القابلة للتغيير مقابل غير القابلة للتغيير Global and Local Variables - المتغيرات العامة والمحلية Docstrings - التعليقات النصية (Docstrings) Recursion - الاستدعاء الذاتي Context Managers - مديري السياق File I/O - إدخال/إخراج الملفات Packages - الحزم البرمجية Regular Expressions - التعبيرات النمطية Virtual Environments - البيئات الافتراضية إذا صعُب عليك فهم أي مصطلح أثناء الدراسة يمكنك السؤال عنه وسيتم توضيحه من قبل المدربين.1 نقطة
-
حسب الصورة فالصفحة التي تحاول الوصول إليها غير موجودة فقد تكون إعدادات النشر (Publish Directory) غير صحيحة لذا يجب التأكد من أن إعداد "مجلد النشر" في إعدادات Netlify يتوافق مع مجلد بناء المشروع الخاص بك يجب أن يكون "مجلد النشر" هو build لذا تحقق من الإعدادات وتأكد من تعيين المجلد بشكل صحيح. كما أنه من المحتمل عدم وجود ملف index.html في المجلد الصحيح لذا تأكد من أن هناك ملف index.html في مجلد النشر المحدد، لأنه إذا كان الملف الرئيسي للموقع غير موجود في المجلد الذي تم تحديده للنشر فلن يتم عرض الموقع وسيظهر خطأ 404.1 نقطة
-
أنصحك باستخدام Pandas لتحويل البيانات لأنه سيوفر لك الكثير من الوقت والجهد في معالجة البيانات، لأنه يوفر واجهة سهلة للتعامل مع البيانات، مما يجعل من السهل قراءة ملفات CSV وتحويلها كما يمكنك إجراء معالجة مسبقة للبيانات (مثل التنظيف، التحويل، والتصفية) باستخدام وظائف pandas قبل تخزينها في قاعدة البيانات. كما أن المكتبة متكاملة مع SQL يمكن استخدامها مع مكتبات مثل SQLAlchemy أو SQLite لكتابة البيانات إلى قواعد البيانات بسهولة.1 نقطة
-
و عليكم السلام يمكن استخدام الاتنين pandas او sql على حسب المهمة التى تقوم بها. فهذا على حسب حجم البيانات وطبيعة العمل و لكن فى مسار تعلم الالة يفضل استخدام pandas لعمليات مثل ال cleaning و غيرها قبل إدخالها إلى قاعدة البيانات.1 نقطة
-
تأكد من قيامك برفع الملفات الصحيحة للإستضافة وعملية الإعدادت للإستضافة تكون صحيحة حيث هذه الرسالة تشير إلى أن ملفات المشروع غير موجودة بالأساس حيث يجب عليك رفع الملفات الناتجة من عملية البناء فقط، أي الملفات بداخل مجلد الـ build أو dist النهائي فقط، وهو المجلد الذي يتم به تجميع الكود النهائي للمشروع ليصبح جاهز للنشر.1 نقطة
-
نعم، يمكنك استخدام منصات مثل Glide أو AppSheet أو Power Apps لتحويل ملف بصيغة Excel يحتوي على معادلات إلى تطبيق موبايل يعمل على نظام أندرويد. لتحويل ملفك باستخدام Glide، قم بتحويل ملف Excel إلى Google Sheets برفعه على Google Drive، ثم الذهاب إلى موقع Glide وإنشاء مشروع جديد بربطه بملف Google Sheets. لاستخدام Glide يمكنك التوجه للموقع موقع GLIDE والتسجيل باستخدام حساب Google ثم: الضغط على "New Project" لإنشاء مشروع جديد. اختيار "Google Sheets" كمصدر البيانات، ثم اختيار جدول البيانات الذي قمت بإنشائه سابقا. بعد ربط جدول البيانات، سيتم توجيهك إلى واجهة تصميم التطبيق في Glide. يمكنك تخصيص شاشات التطبيق، الأزرار، النماذج، والعناصر الأخرى حسب احتياجاتك. والتأكد من أن جميع البيانات والمعادلات تظهر وتعمل بشكل صحيح داخل التطبيق. بعد الانتهاء من تخصيص التطبيق، اختبره جيدا للتأكد من أن كل شيء يعمل كما هو متوقع فإذا كان كل شيء صحيحا، اضغط على "Publish" لنشر التطبيق وستتمكن من مشاركة رابط التطبيق أو رمز الاستجابة السريعة (QR code) للوصول إليه على جهاز أندرويد.1 نقطة
-
هناك اكثر من طريقة تستطيع عمل ذلك بها اولا يمكنك الدخول الى موقع Microsoft الرسمي حيث ان هناك توثيق لعمل ذلك بالتفصيل خطوة بخطوة https://learn.microsoft.com/ar-sa/power-apps/maker/canvas-apps/get-started-create-from-data كما ان هناك العديد من المواقع الاخرى يمكنها تحقيق ذلك ساترك لك روابطها يمكنك اختيار ما يناسبك appsheet Convertigo glide kodular appgyver وبالتوفيق ان شاء الله1 نقطة
-
.loader { border: 16px solid #f3f3f3; border-top: 16px solid #3498db; border-radius: 50%; width: 120px; height: 120px; animation: spin 2s linear infinite; } @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } السبب هو أنك قمت بنسخ تنسيق CSS الخاص بالـ Loader السابق حيث أنني وفرت لك تنسيق للـ Loader بسيط يقوم بالدوران، أما إذا أردت استخدام الصورة فعليك باستخدام تنسيق مختلف أي قم بإزالة التنسيق الذي نسخته أنت. وعليك بتنسيق كلاس .loader بالشكل الذي تراه مناسبًا. وكنصيحة عزيزي، لا تقم أبدًا بنسخ الكود دون أن تقرأه وتعرف ما الذي يضيفه لمشروعك أو ماذا يفعل، تجنبًا لحدوث مشاكل في الكود الخاص بك.1 نقطة
-
يبدو نوع البيانات tuple في بايثون كما يلي: coral = ('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral') tuple (صف وتُجمَع إلى صفوف) هي بنية بيانات تُمثِّل سلسلة مرتبة من العناصر غير القابلة للتبديل، وبالتالي لا يمكن تعديل القيم الموجودة فيها. يستعمل نوع البيانات tuple لتجميع البيانات، فكل عنصر أو قيمة داخل tuple تُشكِّل جزءًا منه. توضع القيم داخل نوع البيانات tuple بين قوسين ( ) ويُفصَل بينها بفاصلة ,، وتبدو القيم الفارغة كما يلي coral = ()، لكن إذا احتوى نوع البيانات tuple على قيم –حتى لو كانت قيمةً واحدةً فقط– فيجب وضع فاصلة فيه مثل coral = ('blue coral',). إذا استخدمنا الدالة print() على tuple، فسنحصل على الناتج الآتي الذي يُبيّن أنَّ القيمة الناتجة ستوضع بين قوسين: print(coral) ('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral') عند التفكير بنوع tuple وغيره من بنى البيانات التي تُعبَر من أنوع «المجموعات» (collections)، فمن المفيد أن تضع ببالك مختلف المجموعات الموجودة في حاسوبك: تشكيلة الملفات الموجودة عندك، وقوائم التشغيل للموسيقى، والمفضلة الموجودة في متصفحك، ورسائل بريدك الإلكتروني، ومجموعة مقاطع الفيديو التي تستطيع الوصول إليها من التلفاز، والكثير. نوع tuple شبيه بالقوائم (lists)، لكن القيم الموجودة فيه لا يمكن تعديلها، وبسبب ذلك، فأنت تخبر الآخرين أنَّك لا تريد إجراء أيّة تعديلات على هذه السلسلة من القيم عندما تستعمل tuple في شيفرتك. إضافةً إلى ما سبق، ولعدم القدرة على تعديل القيم، فسيكون أداء برنامجك أفضل، حيث ستُنفَّذ الشيفرة بشكل أسرع إذا استعملتَ tuple بدلًا من القوائم (lists). فهرسة نوع البيانات tuple يمكن الوصول إلى كل عنصر من عناصر tuple بمفرده لأنَّه سلسلة مرتبة من العناصر، وذلك عبر الفهرسة. وكل عنصر يرتبط برقم فهرس، الذي هو عدد صحيح يبدأ من الفهرس 0. لمثال coral السابق، ستبدو الفهارس والقيم المرتبطة بها كالآتي: ‘blue coral’ ‘staghorn coral’ ‘pillar coral’ ‘elkhorn coral’ 0 1 2 3 العنصر الأول الذي يُمثِّل السلسلة النصية 'blue coral' تبدأ بالفهرس 0، وتنتهي القائمة بالفهرس رقم 3 المرتبط بالقيمة 'elkhorn coral'. ولأن كل عنصر من عناصر tuple له رقم فهرس مرتبط به، فسنتمكن من الوصول إلى عناصره فرادى. يمكننا الآن الوصول إلى عنصر معيّن في tuple عبر استخدام رقم الفهرس المرتبط به. print(coral[2]) pillar coral تتراوح قيم الفهارس في المتغير coral من 0 إلى 3 كما هو ظاهر في الجدول السابق، لذا يمكننا استدعاء العناصر الموجودة فيه فرادى كما يلي: coral[0] coral[1] coral[2] coral[3] إذا حاولنا استدعاء المتغير coral مع رقم فهرس أكبر من 3، فستظهر رسالة خطأ تشير إلى أنَّ الفهرس خارج المجال: print(coral[22]) IndexError: tuple index out of range إضافةً إلى أرقام الفهارس الموجبة، يمكننا أيضًا الوصول إلى الفهارس باستخدام رقم فهرس سالب، وذلك بالعد بدءًا من نهاية قائمة العناصر وسيرتبط آخر عنصر بالفهرس -1، وهذا مفيدٌ جدًا إذا كان لديك متغير من النوع tuple وكان يحتوي عناصر كثيرة وأردتَ الوصول إلى أحد عناصره انطلاقًا من النهاية. ففي مثالنا السابق عن coral، إذا أردنا استخدام الفهارس السالبة فالناتج كالآتي: ‘elkhorn coral’ ‘pillar coral’ ‘staghorn coral’ ‘blue coral’ -1 -2 -3 -4 إذا أردنا طباعة العنصر 'blue coral' باستخدام الفهارس السالبة، فستبدو التعليمة كما يلي: print(coral[-4]) blue coral يمكننا إضافة العناصر النصية الموجودة في tuple إلى السلاسل النصية الأخرى باستخدام المعامل +: print('This reef is made up of ' + coral[1]) This reef is made up of staghorn coral استطعنا في المثال السابق إضافة عنصر موجود في الفهرس 1 مع السلسلة النصية 'This reef is made up of '، ويمكننا أيضًا استخدام المعامل + لإضافة بنيتَي tuple معًا. الخلاصة: يمكننا الوصول إلى كل عنصر من عناصر tuple على حدة باستخدام أرقام الفهارس (الموجبة أو السالبة) المرتبطة بها. تقطيع قيم tuple يمكننا استخدام الفهارس للوصول إلى عدِّة عناصر من tuple، أما التقطيع فيسمح لنا بالوصول إلى عدِّة قيم عبر إنشاء مجال من أرقام الفهارس المفصولة بنقطتين رأسيتين [x:y]. لنقل أننا نريد عرض العناصر الموجودة في وسط المتغير coral، يمكننا فعل ذلك بإنشاء قطعة جديدة: print(coral[1:3]) ('staghorn coral', 'pillar coral') عند إنشاء قطعة جديدة –كما في المثال السابق– فيمثِّل أوّل رقم مكان بدأ القطعة (متضمنةً هذا الفهرس)، ورقم الفهرس الثاني هو مكان نهاية القطعة (دون تضمين هذا الفهرس بالقطعة)، وهذا هو السبب وراء عرض المثال السابق للقيم المرتبطة بالعناصر الموجودة في الفهرسين 1 و 2. إذا أردتَ تضمين إحدى نهايتَي القائمة، فيمكنك حذف أحد الأرقام في التعبير tuple[x:y]، فمثلًا، لنقل أننا نريد عرض أوّل ثلاثة عناصر من coral، والتي هي 'blue coral' و 'staghorn coral' و 'pillar coral'، فيمكننا فعل ذلك كالآتي: print(coral[:3]) ('blue coral', 'staghorn coral', 'pillar coral') المثال السابق عرض العناصر من بداية القائمة وتوقف قبل العنصر ذي الفهرس 3. لتضمين كل العناصر الموجودة في نهاية tuple، فيمكننا عكس التعبير السابق: print(coral[1:]) ('staghorn coral', 'pillar coral', 'elkhorn coral') يمكننا استخدام الفهارس السالبة أيضًا عند التقطيع، كما فعلنا مع أرقام الفهارس الموجبة: print(coral[-3:-1]) print(coral[-2:]) ('staghorn coral', 'pillar coral') ('pillar coral', 'elkhorn coral') هنالك معاملٌ إضافيٌ يمكننا استعماله ويسمى «الخطوة»، ويُشير إلى عدد العناصر التي يجب تجاوزها بعد الحصول على أوّل عنصر من القائمة. حذفنا في جميع أمثلتنا السابقة معامل الخطوة، حيث القيمة الافتراضية له في بايثون هي 1، لذا سنحصل على جميع العناصر الموجودة بين الفهرسَين المذكورين. شكل هذا التعبير العام هو tuple[x:y:z]، إذ يُشير المعامل z إلى الخطوة. لنُنشِئ قائمةً أكبر، ثم نقسِّمها، ونعطيها القيمة 2 كخطوة: numbers = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) print(numbers[1:11:2]) (1, 3, 5, 7, 9) التعبير numbers[1:11:2] سيطبع القيم الموجودة بين رقمين الفهرسين 1 (بما في ذلك العنصر المرتبط بالفهرس 1) و 11 (دون تضمين ذلك العنصر)، ومن ثم ستخبر قيمةُ الخطوة 2 البرنامجَ أنَّ يتخطى عنصرًا بين كل عنصرين. يمكننا حذف أوّل معاملين واستخدام معامل الخطوة بمفرده بتعبيرٍ برمجيٍ من الشكل tuple[::z]: print(numbers[::3]) (0, 3, 6, 9, 12) طبعنا في المثال السابق عناصر numbers بعد ضبط قيمة الخطوة إلى 3، وبالتالي سيتم تخطي عنصرين. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 الخلاصة: تقطيع tuples باستخدام أرقام الفهارس الموجبة والسالبة واستعمال معامل الخطوة يسمح لنا بالتحكم بالناتج الذي نريد عرضه. إضافة بنى tuple إلى بعضها يمكن أن نُضيف بنى tuple إلى بعضها أو أن «نضربها» (multiply)، تتم عملية الإضافة باستخدام المعامل +، أما عملية الضرب فباستخدام المعامل *. يمكن أن يُستخدَم المعامل + لإضافة بنيتَي tuple أو أكثر إلى بعضها بعضًا. يمكننا إسناد القيم الموجودة في بنيتَي tuple إلى بنية جديدة: coral = ('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral') kelp = ('wakame', 'alaria', 'deep-sea tangle', 'macrocystis') coral_kelp = (coral + kelp) print(coral_kelp) الناتج: ('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral', 'wakame', 'alaria', 'deep-sea tangle', 'macrocystis') وصحيحٌ أنَّ المعامل + يمكنه إضافة بنى tuple إلى بعضها، لكن يمكن أن يستعمل لإنشاء بنية tuple جديدة ناتجة عن جمع بنى أخرى، لكن لا يمكنه تعديل بنية tuple موجودة مسبقًا. أما المعامل * فيمكن استخدامه لضرب بنى tuple، فربما تريد إنشاء نسخ من الملفات الموجودة في أحد المجلدات إلى الخادوم أو مشاركة قائمة بالمقطوعات الموسيقية التي تحبها مع أصدقائك، ففي هذه الحالات سترغب بمضاعفة مجموعات من البيانات (أو «ضربها»). لنضرب البنية coral بالرقم 2 والبنية kelp بالرقم 3، ثم نسندها إلى بنى tuple جديدة: multiplied_coral = coral * 2 multiplied_kelp = kelp * 3 print(multiplied_coral) print(multiplied_kelp) الناتج: ('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral', 'blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral') ('wakame', 'alaria', 'deep-sea tangle', 'macrocystis', 'wakame', 'alaria', 'deep-sea tangle', 'macrocystis', 'wakame', 'alaria', 'deep-sea tangle', 'macrocystis') يمكننا باستخدام المعامل * أن نُكرِّر (أو نُضاعِف) بنى tuple بأي عدد من المرات نشاء، مما سينُشِئ بنى tuple جديدة اعتمادًا على محتوى البنى الأصلية. الخلاصة هي أنَّ بنى tuple يمكن إضافتها إلى بعضها أو ضربها لتشكيل بنى tuple جديدة عبر استخدام المعاملَين + و *. دوال التعامل مع tuple هنالك دوال مُضمَّنة في لغة بايثون للتعامل مع بنى tuple، لننظر إلى بعضها. len() وكما في السلاسل النصية والقوائم، يمكننا حساب طول (أو عدد عناصر) بنية tuple باستخدام الدالة len() حيث نُمرِّر إليها بنية tuple كمعامل (parameter)، كما يلي: len(coral) هذه الدالة مفيدة إذا أردنا أن نَضمَن أنَّ لبنية tuple عدد عناصر معيّن، فمثلًا يمكننا الاستفادة من ذلك بمقارنة بنيتين مع بعضهما. إذا أردنا طباعة عدد عناصر kelp و numbers، فسيظهر الناتج الآتي: print(len(kelp)) print(len(numbers)) الناتج: 4 13 الناتج أعلاه يشير إلى أنَّ للبنية kelp أربعة عناصر: kelp = ('wakame', 'alaria', 'deep-sea tangle', 'macrocystis') أما البنية numbers فتملك ثلاثة عشر عنصرًا: numbers = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12) وصحيحٌ أنَّ هذه الأمثلة عناصرها قليلة نسبيًا، إلا أنَّ الدالة len() تستطيع أن تخبرنا بعدد عناصر بنى tuple الكبيرة. الدالتان max() و min() عندما نتعامل مع بنى tuple مكوَّنة من عناصر رقمية (بما فيها الأعداد الصحيحة والأرقام ذات الفاصلة العشرية)، فيمكننا استخدام الدالتين max() و min() للعثور على أكبر وأصغر قيمة موجودة في بنية tuple معيّنة. تسمح لنا هاتان الدالتان باستخراج معلومات تخص البيانات القابلة للإحصاء، مثل نتائج الامتحانات أو درجات الحرارة أو أسعار المنتجات …إلخ. لننظر إلى بنية tuple مكونة من أعداد عشرية: more_numbers = (11.13, 34.87, 95.59, 82.49, 42.73, 11.12, 95.57) للحصول على القيمة العظمى من بين القيم الآتية فعلينا تمرير بنية tuple إلى الدالة max() كما في max(more_numbers)، وسنستخدم الدالة print() لعرض الناتج: print(max(more_numbers)) 95.59 أعادت الدالة max() أعلى قيمة في بنية more_numbers. وبشكلٍ شبيهٍ بما سبق نستخدم الدالة min(): print(min(more_numbers)) 11.12 أُعيدَ هنا أصغر رقم عشري موجودة في البنية. يمكن الاستفادة من الدالتين max() و min() كثيرًا للتعامل مع بنى tuple التي تحتوي الكثير من القيم. كيف تختلف بنى tuple عن القوائم (list) الفرق الرئيسي بين tuple و list هو عدم القدرة على تعديلها، وهذا يعني أنَّنا لا نستطيع إضافة أو حذف أو استبدال العناصر داخل بنية tuple. لكن يمكننا إضافة بنيتَي tuple أو أكثر إلى بعضها بعضًا لتشكيل بنية جديدة كما رأينا في أحد الأقسام السابقة. لتكن لدينا البنية coral الآتية: coral = ('blue coral', 'staghorn coral', 'pillar coral', 'elkhorn coral') لنقل أننا نريد استبدال العنصر 'blue coral' ووضع العنصر 'black coral' بدلًا منه. فلو حاولنا تغيير بنية tuple بنفس الطريقة التي نُعدِّل فيها القوائم بكتابة: coral[0] = 'black coral' فستظهر رسالة خطأ كالآتية: TypeError: 'tuple' object does not support item assignment وذلك بسبب عدم إمكانية تعديل بنى tuple. إذا أنشأنا بنية tuple ثم قررنا أنَّ ما نحتاج له هو بنية list، فيمكننا تحويلها إلى قائمة list، وذلك بالدالة list(): list(coral) أصبحت بنية coral قائمةً الآن: coral = ['blue coral', 'staghorn coral', 'pillar coral'] يمكننا أن نلاحظ أنَّ بنية tuple تحوَّلتَ إلى قائمة list لأنَّ الأقواس المحيطة بالقيم أصبح مربعة الشكل. وبشكلٍ شبيهٍ بما سبق، نستطيع تحويل القوائم من النوع list إلى tuple باستخدام الدالة tuple(). الخلاصة نوع البيانات tuple هو مجموعةٌ من البيانات المتسلسلة التي لا يمكن تعديلها، ويوفِّر تحسينًا في أداء برامجك لأنه أسرع معالجةً من القوائم في بايثون. وعندما يراجع الآخرون شيفرتك فسيعلمون من استخدامك لبنى tuple أنك لا تريد تعديل هذه القيم. شرحنا في هذا الدرس الميزات الأساسية لبنى tuple بما في ذلك الفهارس وتقطيعها وتجميعها، وعرضنا بعض الدوال المُضمَّنة المتوافرة لهذا النوع من البيانات. هذه المقالة جزء من سلسة مقالات حول تعلم البرمجة في بايثون 3. ترجمة –وبتصرّف– للمقال Understanding Tuples in Python 3 لصاحبته Lisa Tagliaferri اقرأ أيضًا المقالة التالية: فهم القواميس في بايثون 3 المقالة السابقة: فهم كيفية استعمال List Comprehensions في بايثون 3 المرجع الشامل إلى تعلم لغة بايثون كتاب البرمجة بلغة بايثون دليلك الشامل إلى أنواع البيانات1 نقطة
-
تُعد أسماء النطاقات جزءًا مفتاحيًا من أجزاء البنية التحتية للإنترنت، فهي التي تزوّد المستخدم بعناوين مقروءة لأي خادم ويب موجود على الإنترنت. يمكن الوصول إلى أي حاسوب متصل بالإنترنت من خلال عنوان آي بي IP Address سواء بنسخته الرابعة IPv4 (مثل 173.194.121.32) أو السادسة IPv6 (مثل 2027:0da8:8b73:0000:0000:8a2e:0370:1337 ). يمكن أن تتعامل الحواسيب مع هذه العناوين بسهولة، ولكن الأمر صعب بالنسبة للمستخدم الذي يحاول إيجاد من يدير الخادم أو ما هي الخدمات التي يقدمها موقع ويب، فعناوين آي بي صعبة التذكر ويمكن أن تتغير مع الوقت. لحل هذه الإشكالات نستخدم عناوين سهلة على المستخدمين ومقروءة تدعى أسماء النطاقات. إذًا، نهدف في هذا المقال إلى التعرف على مفهوم اسم النطاق Domain Name وكيف يعمل وأهميته في تقانة الويب. ننصحك قبل الشروع في قراءة المقال أن تطلع على مقال كيف تعمل شبكات الإنترنت؟، وأن تكون تفاصيل عنوان URL واضحة بالنسبة لك. بنية أسماء النطاقات يتكون اسم النطاق من بنية بسيطة مكونة من عدة أجزاء، ويمكن تتكون من جزء واحد فقط أو اثنين أو ثلاثة …إلخ، وتفصل بينها نقاط وتقرأ من اليمين إلى اليسار: يزودنا كل جزء من هذه الأجزاء بمعلومات محددة عن اسم النطاق عمومًا. نطاق المستوى الأعلى TLD توضح نطاقات المستويات الأعلى Top-Level Domain واختصارًا TLD الغاية من الخدمة التي يقدمها النطاق عمومًا. لا تتطلب أكثر النطاقات العليا شيوعًا (com. وorg. وnet.) أية خدمات ويب لتحقق معايير محددة، بالمقابل تطبق بعض النطاقات العليا الأخرى سياسات أكثر صرامة، وبالتالي ستكون الغاية من استخدام هذه النطاقات واضحة أكثر. يمكن أن تفرض النطاقات العليا المحلية (الخاصة بالدول) مثل us. أو fr. أو se. أن تكون الخدمات أو الموارد بلغة محددة، أو مُستاضفة في بلد محدد، بينما لا يُسمح باستخدام النطاقات العليا gov. إلّا للمنظمات الحكومية، وكذلك الأمر بالنسبة للنطاقات التي تتضمن edu، فهي مسموحة للاستخدام مع المؤسسات التعليمية والأكاديمية فقط. تتكون أسماء النطاقات العليا من 36 محرفًا كحد أقصى علمًا أن معظمها مكون من محرفين أو ثلاثة، كما يمكن أن تضم محارفًا خاصة مثل الأحرف اللاتينية. يمكنك الاطلاع على القائمة الكاملة بأسماء النطاقات العليا على موقع ICANN. العنوان (أو المكون) تأتي العناوين بعد أسماء النطاقات العليا مباشرة على شكل سلسلة من المحارف غير الحساسة لحالة الأحرف والتي يمكن أن يتراوح عددها بين محرف وحتى 63 محرفًا. تتضمن هذه المحارف الحروف الأبجدية اللاتينية من A حتى Z والأرقام من 0 حتى 9 والمحرف - الذي لا يجوز أن يتواجد في بداية أو نهاية سلسلة المحارف. يمكن أن يكون العنوان على سبيل المثال a أو 97 أو hello-strange-person-16-how-are-you. يُدعى العنوان الأقرب إلى النطاق الأعلى بنطاق المستوى الثاني Secondary Level Name واختصارًا SLD، ويمكن لاسم النطاق أن يضم عدة عناوين (أو مكونات). ليس من الضروري إطلاقًا أن يتكون اسم النطاق من ثلاثة عناوين، فاسم النطاق www.inf.ed.ac.uk هو اسم صحيح، كما أن اسم النطاق hsoub.com صحيح أيضًا. وتجدر الإشارة إلى إمكانية إنشاء نطاقات فرعية Subdomains وهي مواقع ويب لها محتوياتها الخاصة ضمن الموقع ذاته باستخدام العناوين كالتالي: Academy.hsoub.com أو accounts.hasoub.com. شراء اسم نطاق بعد أن تعرفنا على هيكلية أسماء النطاقات لنتعرف كيف يمكننا شراء نطاق معين. من يمتلك أسماء النطاقات؟ يمكن شراء أي اسم نطاق غير محجوز وفي حال كان اسم نطاق مستخدم بالفعل فلا يمكنك شراءه حتى يتخلى صاحبه عنه، بالاضافة إلى ذلك لا يمكننا شراء النطاق إلى الأبد لأن ذلك سيؤدي لامتلاء الويب بأسماء غير مستخدمة ومغلقة لا يمكن استخدامها مجددًا. بدلًا من شراء أسماء النطاقات للأبد يمكنك دفع مبلغ معين مقابل حصولك على حق استخدام اسم النطاق الذي تريده لمدة زمنية محددة (عام أو أكثر)، كما يمكنك تجديد حق الاستخدام والذي سيمنح الأولوية لطلبك على طلبات الآخرين، ولكن تذكر بأنك لا تملك اسم النطاق هذا للأبد. تستخدم بعض الشركات التي تُدعى "مُسجِّلات Registrar" سجلات أسماء النطاقات لتتبع المعلومات التقنية والإدارية التي تربطك باسم النطاق الذي تحجزه. العثور على اسم نطاق لتتأكد أن اسم النطاق الذي تختاره متاح للاستخدام أم محجوز اتبع الخطوات التالية: ادخل على موقع شركة مسجّلة فهي تقدم خدمة تدعى “whois” أو "هو إز" تخبرك عن توفر اسم نطاق معين أم لا. إن كنت تستخدم نظام تشغيل مزوّد بمفسّر أوامر Shell، افتح المفسر واكتب الأمر whois يتبعه اسم النطاق ثم اضغط الزر "Enter". إليك مثالًا عمليًا وليكن اسم النطاق الذي نريد البحث عنه هو hsoub.com سيكون الأمر والنتيجة على الشكل التالي: $ whois Hsoub.com Domain Name: HSOUB.COM Registry Domain ID: 1623716742_DOMAIN_COM-VRSN Updated Date: 2019-09-29T14:11:16Z Creation Date: 2010-11-03T21:39:38Z Registrar Registration Expiration Date: 2028-11-03T21:39:38Z Registrar: Name.com, Inc. Registrar IANA ID: 625 Reseller: Domain Status: clientTransferProhibited Registry Registrant ID: Not Available From Registry Registrant Name: Whois Agent Registrant Organization: Domain Protection Services, Inc. Registrant Street: PO Box 1769 Registrant City: Denver Registrant State/Province: CO Registrant Postal Code: 80201 Registrant Country: US Registrant Phone: +1.7208009072 Registrant Fax: +1.7209758725 Registrant Email: https://www.name.com/contact-domain-whois/hsoub.com كما ترى، لا يمكن تسجيل اسم النطاق لأن شركة "حسوب Hsoub" حجزته بالفعل. لنرى إن كان بالإمكان تسجيل اسم النطاق afunkydomainname.org: $ whois afunkydomainname.org NOT FOUND كما ترى لا وجود لاسم النطاق هذا في قاعدة بيانات whois (حتى لحظة الكتابة) وبالتالي يمكنك الاستعلام عنه وحجزه! الحصول على اسم نطاق العملية مباشرة وفق الخطوات التالي: افتح موقع ويب إحدى الشركات المسجِّلة. ستجد عادة زر أو رابط دائمًا بعنوان "احصل على اسم نطاق Get a domain name". إملأ الاستمارة التي تظهر بالمعلومات المطلوبة، وتأكد من أنك لم تخطئ كتابة اسم النطاق الذي ترغب بحجزه، فبمجرد أن تدفع لن تتمكن من التراجع! ستعلمك الشركة المسجّلة متى أصبح اسم النطاق الذي حجزته مسجّلًا وجاهزًا للاستخدام. خلال عدة ساعات ستتعرف كل خوادم أسماء النطاقات Domain Name System اختصارًا DNS على معلومات اسم النطاق الذي حجزته. تحديث خوادم أسماء النطاقات تُخزن قواعد بيانات دي إن إس في جميع خوادم أسماء النطاقات في العالم وترتبط هذه الخوادم جميعها بعدة خوادم خاصة تدعى "خوادم أسماء النطاقات الموثقة Authoritative Name Servers" أو "خوادم دي إن إس المستوى الأعلى Top-Level DNS Servers" وهذه الخوادم بمثابة المدراء للمنظومة ككل. عندما تسجل أي شركة مسجّلة اسم نطاق أو تحدث اسمًا موجودًا فلا بدّ من تحديث المعلومات في قواعد البيانات لجميع خوادم أسماء النطاقات. فعندما يعرف خادم أسماء النطاقات بوجود اسم نطاق ما فسيخزنُ معلوماته لبعض الوقت قبل أن يتأكد من سلامتها ثم يحدّثها (يستعلم خادم أسماء النطاقات من خادم أسماء النطاقات الموثوقة عن اسم النطاق ويحضر المعلومات المحدثة منه). لهذا تستغرق العملية بعض الوقت ليحصل خادم أسماء النطاقات على المعلومات المحدثة لاسم نطاق مسجل لديه (يعلم بوجوده). آلية عمل استعلام دي إن إس DNS كما رأينا سابقًا من السهل أن تكتب اسم النطاق في شريط عنوان المتصفح عندما تريد الوصول إلى صفحة ويب بدلًا من عنوان آي بي لها. لنلق نظرة على العملية: اكتب مثلًا Hsoub.com في شريط عنوان متصفحك. يسأل المتصفح حاسوبك إن كان على دراية بعنوان آي بي الذي يحدده اسم النطاق الذي كتبته (من خلال البحث في ذاكرة دي إن إس مؤقتة على الحاسوب). إن وجدت المعلومات يترجم المتصفح اسم النطاق إلى عنوان آي بي الموجود في الذاكرة المؤقتة ثم يحضر المتصفح المحتوى المطلوب من الخادم المحدد بعنوان آي بي. إن لم يتعرف حاسوبك على عنوان آي بي المرتبط باسم النطاق الذي كتبته سيتوجه المتصفح إلى خادم أسماء النطاقات لسؤاله، لأن عمله بالتحديد هو معرفة عنوان آي بي لكل اسم نطاق مسجل لديه. يعرف حاسوبك الآن عنوان آي بي المطلوب وبالتالي سيتمكن المتصفح من إحضار المحتوى المطلوب من خادم ويب الصحيح. ترجمة -وبتصرف- للمقال What is a Domain Name. اقرأ أيضًا الفرق بين صفحة الويب وموقع الويب وخادم الويب ومحرك البحث. ما هي الأدوات المستخدمة في بناء مواقع ويب؟ ما التكلفة المادية الكاملة لبناء موقع ويب؟ ما هي أدوات مطوري الويب المدمجة في المتصفحات؟1 نقطة
-
هذا المقال هو الجزء الأول من جزأين يشرحان موضوع الحوسبة السحابيّة. يناقش هذا المقال المتطلبات المسبقة وما تحتاج إلى معرفته قبل بدء رحلتك في الحوسبة السحابية. ويناقش كذلك بعض الافتراضات الخاطئة المتعلقة بالحوسبة السحابية، ويعمل على تصحيح المفاهيم المتعلقة بها، كما ويوضح مفهومي الأجهزة الافتراضيّة (الأجهزة الظاهريّة)، والحوسبة السحابيّة العامّة والخاصّة. ومن ثمّ يناقش أحد المفاهيم المتعلّقة بالحوسبة السحابية والتي تتردّد كثيرًا، وهو مفهوم "مهندس حوسبة سحابية" (Cloud Architect)؛ سنناقش في هذا المقال ما يقوم به مهندس الحوسبة السحابية، وسنحلّل المهارات والشهادات اللازمة لتصبح مهندس حوسبة سحابيّة. وسنذكر كذلك بعض أنواع الوظائف المتاحة إذا قرّرت جعل هذا المجال حرفتك. المتطلبات المسبقة لتعلم الحوسبة السحابية يسأل العديد من المهتمين: "ما المتطلبات والمعرفة المسبقة اللازمة لبدء تعلم الحوسبة السحابية؟" سنعطي - في هذا المقال - المعلومات اللازمة للإجابة على هذا السؤال، لتكون جاهزًا لبدء تعلم الحوسبة السحابية دون قلق. يشير مفهوم الحوسبة السحابية إلى مجال واسع من تقنية المعلومات تشمل: البنية التحتية العتادية، والبنية التحتية البرمجية، ومنشآت مراكز البيانات (data centers)، وتقنيات الأجهزة الافتراضية (أو الأجهزة الظاهرية - Virtualization)، ومفاهيم هندسة البرمجيات. كلّ هذه المجالات متصلة ببعضها وتوفر لك معرفة أولية جيدة تسهّل عليك رحلتك في استكشاف وتعلّم استخدام منصات الحوسبة السحابية والعمل فيها؛ ولكننا سنركّز في هذا المقال على مزودي خدمة البنية التحتية السحابية (Infrastructure as a Service - IaaS)، مثل خدمات أمازون (Amazon Web Services - AWS)، و Microsoft Azure، و Google Compute Engine و Rackspace Cloud، وكذلك على مزودي خدمة المنصة السحابية (Platform as a Service - PaaS)، مثل Salesforce.com، و Microsoft Azure، و Google App Engine. يمكننا البدء بافتراض أنّك لن تحتاج شهادة جامعية في أحد مجالات الحاسوب لتعلم الحوسبة السحابية. يمكنك بدء تعلم الحوسبة السحابية من الصفر حتى وإن كانت مهاراتك في تقنية المعلومات بسيطة جدًّا. افتراضات مغلوطة عن الحوسبة السحابية 1. لتعلم الحوسبة السحابية يجب أن تجيد البرمجة يمكنك أن تبدأ تعلم الحوسبة السحابية باستخدام خدمة حوسبة سحابية - عامّة أو خاصّة - حتّى وإن لم تكن مطوّر برمجيات. 2. يجب أن تكون لديك خبرة سابقة في عالم تقنية المعلومات الحوسبة السحابية تقنية مستخدمة في كل المجالات وحول العالم، ومن شأن فهمها أن يساعد الجميع، وليس فقط ذوي الاهتمامات التقنيّة؛ بل غالب الظنّ أنك تعمل في مؤسّسة تستخدم الحوسبة السحابية بالفعل. 3. الحوسبة السحابية فقط للتقنيين ومطوري البرمجيات إنّ الحوسبة السحابيّة تغيّر طريقة بناء الشركات لأنظمة المعلومات لديها، وكيفية استخدامها لها، بما في ذلك كلّ برمجياتها، ويجب على المدراء، والمسوّقين، ومدراء الأنظمة، والمطورين تعلّمها؛ ولكن - بالطبع- بتوجّهات مختلفة، مركّزين على الجوانب المتعلّقة بأدوارهم ومسؤوليّاتهم. أنظمة التشغيل والأجهزة الافتراضيّة والشبكة بما أنّ الحوسبة السحابية مجالها واسع، لكي تتعلّم الحوسبة السحابية تحتاج لبعض المهارات تتعلق بالمفاهيم الأساسيّة لأنظمة التشغيل وكيف تعمل (دون الخوض في تفاصيلها الدقيقة)، مثل Windows ولينُكس ومفاهيم بسيطة تتعلّق بهما. إذا كانت معرفتك جيدة في هذه الأمور، فأنت تعرف أنّ التقنيات المتعلّقة باستخدام الأجهزة الافتراضيّة (أو الأجهزة الظاهريّة Virtualization) لها دورً مهمّ عندما نتحدّث عن الحوسبة السحابيّة. لا توجد تجربة تضاهي تشغيل جهاز افتراضيّ بنفسك (يمكنك فعل ذلك باستخدام VirtualBox) لتفهم كيف تعمل بيئة الأجهزة الافتراضيّة. تمكّنك هذه التقنيّات من إنشاء بيئة ظاهريّة تحدّد فيها عدد وسرعة المعالجات المركزية (CPU) والذاكرة الرئيسيّة (RAM) ومساحة التخزين، وكذلك نظام التشغيل الذي يعمل عليها مثل Windows أو Linux. تتشارك الأجهزة الافتراضيّة في العتاد الحقيقيّ وأجهزة الشبكة ولكنّها منفصلة عن بعضها. من أوائل الشركات الرائدة في هذا المجال شركة تُدعى VMWare. لقد كانت الحوسبة الظاهريّة (أو الأجهزة الافتراضيّة) معروفة جيّدًا قبل VMWare، ولكنّ هذه الشركة غيّرت السوق المتعلّق بها، حيث حوّلت هذه التقنيّة إلى حزمة برمجيّة جاهزة للاستخدام ممّا جعلها شائعة في الشركات صغيرة كانت أم كبيرة. لقد قدّمت هذه التقنيّة مفهومًا اقتصاديًّا واستراتيجيًّا جديدًا، وهو Consolidation، ويعني حرفيًّا الدمج أو الجَمع، ويشير إلى جمع أكثر من خدمة وأكثر من جهاز افتراضيّ على جهاز حقيقيّ واحد. ويعني هذا أن الشركات حول العالم لم يعد واجبًا عليها توفير خادم حقيقيّ لكل نوع من التطبيقات أو الأحمال التي يشغّلونها، بل صار بإمكانهم مشاركة الموارد وتقسيمها بين عدد من الأجهزة الافتراضيّة. مفاهيم أساسيّة عليك معرفتها عن الأجهزة الافتراضيّة Hypervisor: هو قلب نظام الأجهزة الافتراضيّة والذي يشغّل كلّ الأجهزة الافتراضيّة. ومن الأمثلة عليه VMWare وKVM وXen و OpenVZ. تستخدم كلّ بيئات الحوسبة السحابيّة hypervisor معدّل. أمازون مثلًا تستخدم Xen. الجهاز الافتراضيّ (أو الجهاز الظاهريّ، وبالإنجليزيّة: Virtual Machine): وهو العنصر الأساسيّ في هذه التقنيّة. اعلَم أنّ للجهاز الافتراضيّ نظام تشغيل ومعالج وذاكرة وقرص تخزين والعديد من الإعدادات المتعلّقة بالشبكة. مزايا استخدام الأجهزة الافتراضيّة: الجَمع (جمع أكثر من جهاز على عتاد واحد)، وإمكانيّة نقل الأجهزة الافتراضيّة بين الخوادم الحقيقيّة (والتي تسمّى أيضًا بالعُقَد physical nodes)، والمرونة في إضافة موارد جديدة إلى جهاز افتراضيّ موجود. ما إن تصبِح ملمًّا بأساسيّات تقنيّات الحوسبة الظاهريّة (الأجهزة الافتراضيّة) وأنظمة التشغيل، فعليك بأخذ مساق مقدمة في الشبكات، ومن ثمّ ستتعلّم الحوسبة السحابية بسهولة. يمكن أن يكون مجال الشبكات صعبًا، وسيحتاج حتّى ذوو المهارات العالية بعض الوقت لفهمه بالكامل. راجع القسم المتعلّق بالشبكات في هذا المقال لفهم المتطلبات اللازمة للخوض في هذا المجال. وفي النهاية، نريد تكوين فكرة واضحة عن معنى كلّ من الحوسبة السحابيّة العامّة والخاصّة. السحابة العامّة: تشير إلى البنية التحتية التي من الممكن للعموم الوصول إليها وتخزين بيانات وأجهزة افتراضيّة وأيّ نوع من الموارد السحابيّة. يمكنك استخدامها بنفسك، ولست بحاجة إلى الاستثمار في العتاد والبنية التحتيّة من أجل ذلك. يمكنك استخدام السحابات العامّة والدفع حسب الاستخدام. وهذا يشبه استئجار السيّارة لمدّة معينة من الوقت بدلًا من شرائها وامتلاكها. السحابة الخاصّة: تحتاج الشركات إلى كلّ المرونة والمزايا التي تقدمها الحوسبة السحابيّة، ولكن قد تكون لديها بنيتها التحتيّة ومركز البيانات (data center) الخاصّ بها. في هذه الحالة، تكون الشركة مسؤولة عن إدارة كلّ شيء فيها. ما هي هندسة الحوسبة السحابيّة يشير مفهوم معمارية الحوسبة السحابيّة (أو هندسة الحوسبة السحابيّة) إلى المكوّنات الرئيسيّة والفرعيّة التي تحتاجها الحوسبة السحابيّة. وتتكون هذه المكوّنات عادة من منصّة الواجهة، والمنصّة الخلفيّة، ونظام التوصيل السحابيّ للمحتوى (cloud-based delivery) والشبكة. وتشكّل هذه المكوّنات مجتمعة معماريّة الحوسبة السحابيّة. ويعتمد تصميم حلول الحوسبة السحابيّة على أساليب وإجراءات هندسيّة تمّ تطويرها على مدى العقدين الماضيين. مهندس الحوسبة السحابية مسؤول عن تحويل المتطلبات التقنيّة للمشروع إلى معماريّة وتصميم يوجّهان سير العمل للوصول إلى المنتج النهائيّ. وغالبًا يكون مهندس الحوسبة السحابية مسؤولًا أيضًا عن رأبِ الصدعِ بين المشكلات المركّبة المتعلّقة بالأعمال وبين الحلول المعتمدة على الحوسبة السحابيّة. ويعمل الأعضاء الآخرون في الفريق التقنيّ - بما فيهم مهندس دعم المطورين DevOps والمطورون - مع مهندس الحوسبة السحابيّة للتأكد من بناء الحلّ أو الحلول التقنيّة المناسبة. ما المهارات المطلوبة في البداية؟ إذا كنت تفكر بأن تغدو مهندس حوسبة سحابية، فيفترض بأن لديك بالفعل معرفة مسبقة قويّة في الحوسبة السحابيّة أو مجال تقنيّ مشابه. إذا كنت ترى المفاهيم التالية مفهومة بالنسبة لك، أو على الأقل بعضها، فغالبًا أنت على الطريق الصحيح. أمّا إذا لم تكن كذلك، فأنصحك أوّلًا بدراسة أو العمل في مجال قريب قبل أن تسعى إلى أن تغدو مهندس حوسبة سحابيّة. معرفة جيّدة في واحد من أنظمة التشغيل على الأقل: لينُكس، يونكس، سولاريس، أو ويندوز. ما أنصحك به هو نظام التشغيل لينُكس بأيّ من توزيعاته (سواء بتوزيعة دبيانيّة أو ردهاتيّة أو غيرها). وجود خبرة مسبقة كمدير نظام أو مهندس نظم لأيّ من أنظمة التشغيل المعروفة قد يفيدك أيضًا. فهم جيّد في الشبكات: TCP/IP و HTTP و DNS. أقترح أن تتعرف على المفاهيم المتعلقة بها قبل السعي لأن تصبح مهندس حوسبة سحابية. لغة برمجة: ستحتاج على الأقل إلى فهم بسيط للغة برمجة مفسّرة (scripting language). غالبًا هذا ليس إلزاميًّا، ولكنه بكل تأكيد سيفيدك. الأمن: أمن المعلومات مهم في الحوسبة السحابيّة، ولهذا، يجب أن يكون لديك فهم جيّد للمفاهيم الأساسيّة في مجال أمن المعلومات، كجدران الحماية مثلًا. إن القائمة المذكورة أعلاه ليست كاملة أبدًا. إن العبرة من ذكرها هو ضرورة أن تكون لديك معرفة تقنيّة قويّة إذا كنت تفكّر بدخول مجال هندسة الحوسبة السحابيّة. يقدّم موقع Could Roster قائمة محدّثة بالمهارات التقنيّة الدارجة، ويشرح ما تقوم به هندسة الحوسبة السحابيّة، ويوضّح الخصائص والتوقّعات اليوميّة، ويعرض قائمة بالمهارات التي يحتاجها السوق. يتم تحديث القائمة شهريًّا، لذا تأكّد من مراجعتها قُبَيلَ بدئك في السعي نحو الحصول على شهادة في المجال. [001-Cloud-Roster-Features.gif] ما الخطوة التالية؟ لنفترض بأنّك تحقّق بعض المتطلّبات المذكورة أعلاه؛ ماذا تفعل الآن لتغدو مهندس حوسبة سحابيّة مؤهّلًا؟ يعتمد هذا على المنصّة التي تفضّلها: خدمات أمازون السحابيّة - AWS مهندس معتمد لحلول خدمات أمازون السحابيّة (AWS Certified Solutions Architect – Associate) - تحقِّق هذه الشهادة الخبرات التقنيّة في تصميم ونشر نظام قابل للتوسعة، ومتاح دائمًا، ومقاوم للأخطاء على منصّة AWS التابعة لأمازون. يوضّح هذا المقال كيفيّة التحضير للاختبار بالتفصيل، ويتعمّق أكثر فيما يتعلّق بالمصادر المتاحة على Cloud Academy التي من شأنها مساعدتك على النجاح في الاختبار. Microsoft Azure مهندس حلول حوسبة سحابية لمنصّة Microsoft Azure (بالإنجليزيّة Microsoft Azure Solutions Architect - إنّ منصّة Microsoft Azure رياديّةٌ في هذا السوق الصاعِد، وتتطلّب شهادتها خبرة في الحوسبة، والشبكات، والتخزين، والأمن، وذلك من أجل تصميم حلول تعمل على Azure. للحصول على شهادة مهندس حلول Azure، ستحتاج إلى النجاح في اختبارين، وهما: AZ-300 و AZ-301. لا تحتاج إلى اجتياز أيّ امتحانات أقلّ درجة من أجل التقدم إلى هذين الامتحانين. يركّز اختبار AZ-300 على تقنيات Azure، بينما يركّز اختبار AZ-301 على التصميم. خدمات Google السحابيّة - Google Cloud Platform مهندس مختصّ في الحوسبة السحابيّ: يمكّن المهندسُ المختصّ في الحوسبة السحابيّة (Profestional Cloud Architect) المؤسساتِ من الاستفادة من التقنيات التي تتيحها خدمات Google السحابية. يمكن لهذا المهندس - بفهمه العميق لمعمارية الحوسبة السحابية ومنصّة Google للخدمات السحابيّة - أن يصمّم ويطوّر ويدير حلول تقنيّة متينة وآمنة وقابلة للتوسعة ومتاحة دائمًا ومرنة وذلك لتحقيق أهداف المؤسسة. لقد غدوتُ مهندس حوسبة سحابية مؤهَّلًا - ماذا أفعل الآن؟ ما إن تتخطى اختبار التأهيل، ستُفتَح أمامك العديد من فُرَص العمل التي ربما لم تفكِّر فيها حتّى. إنّ بعض الشركات الأكثر ابتكارًا في مجال البيانات الضخمة (big data) ليس بوسعها تحقيق أيّ شيء دون مهندس حوسبة سحابيّة مؤهّل لإحدى منصّات الحوسبة السحابية المذكورة. تُقدِّم AWS المرونة وإمكانيّة التوسعة والرزانة المطلوبة لأكثر من مليون زبون. من الشركات التي تستفيد من خدمات AWS في مجال البيانات الضخمة كلّ من General Motors، وIBM، وSplunk، وWeather Company. قد تجد نفسك يومًا ما تعمل لدى شركة طبيّة لبناء نظام لتحليل الحمض النووي (الجينات) لتوقع الأمراض من خلالها. إذا كنت تحب السّفر، فقد تعمل في يوم ما لدى شركة Expedia، التي تستخدم AWS لاستضافة خدمتها (Expedia Service)، وهي خدمة متخصّصة بتقديم الاقتراحات المتعلّقة بالسياحة. ولكي لا ننسى أحد أكبر زبائن AWS، وهي Netflix، تستخدم منصة AWS في نظام توصيل محتوى متاح دائمًا ومقاوم للأخطاء لخدمة بثّ الأفلام والبرامج التلفازيّة التي تقدّمها. تعتمد Netflix على إمكانات البنية التحتيّة لأمازون في التوسّع السريع والخوادم وتخزين البيانات، وذلك بسبب الكمّ الهائل ونمط الاستخدام المتأرجح لزبائنها. لا يسعنا إلا أن نتخيّل أنّهم يوظّفون مئات إن لم يكن آلاف مهندسي حلول الحوسبة السحابيّة لمنصّة AWS. إنّ منصّة Microsoft Azure أسرع مزوّدي الخدمات السحابيّة نموًّا لبناء واختبار ونشر وإدارة التطبيقات والخدمات عبر مراكز بيانات تديرها Microsoft. من الشركات التي تستخدم Azure كلّ من Adobe، وApple، وiCloud، وEbay، وTravelocity، وSamsung، وXerox، وNFL، وNBC. ما إن تصبح مهندس حوسبة سحابيّة مؤهًلًا لمنصّة Microsoft Azure، فسيكون باستطاعتك التقدّم لأيّ من آلاف الشواغر المتاحة لـمهندسي الحوسبة السحابيّة لمنصّة Azure. إنّ منصّة Google للحوسبة السحابيّة هي حقيبة كاملة من خدمات الحوسبة السحابيّة التي تعمل على نفس البنية التحتيّة التي تستخدمها Google من أجل خدماتها التي تقدّمها للمستخدمين الأفراد، وتستخدمها كذلك كلّ من Target، وPayPal، و20th Century Fox، وTwitter. إذا صرت مؤهلًا في هندسة الحوسبة السحابية لمنصة Google، فبإمكانك التقدّم للوظائف ذات العلاقة. إنّ مهندس الحوسبة السحابيّة لَذو دور هامّ، وهناك حاجة ماسّة في السوق لهذا التخصّص، والإمكانات فيه غير محدودة. وتشير التوقعات أيضًا إلى نموّ هائل في هذا المجال في السنوات القليلة القادمة، ولهذا نعتقد بأنّ الحصول على مؤهّل في هندسة الحوسبة السحابية خطوة في الاتجاه الصحيح، سواء للعمل في المجال، أو للتعرف على أيّ تقنيات حديثة ومذهلة تنشأ في حلبة الحوسبة السحابيّة. ترجمة -وبتصرف- للمقالين: What Exactly Is a Cloud Architect and How Do You Become One? لصاحبه Michael Sheehy Prerequisites to Learn Cloud Computing – Introduction لصاحبه Stefano Bellasio1 نقطة