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

Mustafa Suleiman

الأعضاء
  • المساهمات

    13202
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    365

كل منشورات العضو Mustafa Suleiman

  1. تلك مجموعة من الشهادات المهنية في مجال تكنولوجيا المعلومات، تُمنح من قبل معهد CompTIA (Computing Technology Industry Association)، ومعترف بها عالميًا وتُغطي مجموعة واسعة من المجالات، من أساسيات تكنولوجيا المعلومات إلى مجالات متخصصة مثل الأمن السيبراني. وتقدم شهادات للمبتدئين والمتوسطين والمتخصصين، ويتم تحديثها بانتظام لتتناسب مع التطورات في مجال تكنولوجيا المعلومات. ومن أشهرها: A+: شهادة أساسية تُغطي أساسيات دعم تكنولوجيا المعلومات، وهي نقطة انطلاق ممتازة للمهنة. Network+: شهادة تُغطي أساسيات الشبكات الحاسوبية. Security+: شهادة تُغطي أساسيات الأمن السيبراني. Cloud+: شهادة تُغطي أساسيات الحوسبة السحابية. Linux+: شهادة تُغطي أساسيات نظام التشغيل Linux. Project+: شهادة تُغطي إدارة المشاريع في مجال تكنولوجيا المعلومات. Cybersecurity Analyst (CySA+): شهادة متقدمة في مجال الأمن السيبراني. PenTest+: شهادة متقدمة في مجال اختبار الاختراق.
  2. خطأ غير مقصود، وأرجو طرح المشاكل التي تواجهك أسفل الدرس وسيتم المتابعة معك، شكرًا لتفهمك
  3. اعتذر لك نجاة، الأسئلة يتم قبولها ربما حدث خطأ غير مقصود، في حال واجهتي مشكلة في أي درس أرجو طرحها أسفله حفاظا على وقتك
  4. عذرا، لا استطيع تحديد المكتبات والمطلوب تنفيذه، أرجو طرح السؤال أسفل الدرس الذي تواجهين به مشكلة لمساعدتك بشكل أفضل.
  5. أرجو توفير صورة لفهم المشكلة وما يحدث والمقصود بالمكتبات هل هي الإضافات plugins؟
  6. مختلفة تمامًا عما هي عليه اليوم، فلم تكن هناك لغات برمجة عالية المستوى مثل Python أو Java أو C++، بل كانت البرمجة تتم باستخدام لغات منخفضة المستوى جدًا، أو حتى مباشرة مع الأجهزة. في البداية، كان البرمجة تتم مباشرة باستخدام لغة الآلة، وهي عبارة عن سلسلة من الأرقام الثنائية (0 و 1) التي تفهمها المعالجات مباشرة، وكانت تلك العملية شاقة للغاية ومعرضة للخطأ، حيث كان على المبرمجين تذكر كل تعليمة وعنوانها في الذاكرة. حيث كانت وسيلة الإدخال الرئيسية للبرامج هي البطاقات المثقبة - Punch Cards، بمعنى كان المبرمجون يثقبون ثقوبًا في البطاقات وفقًا لتعليمات البرنامج، ثم يتم قراءة تلك البطاقات بواسطة قارئ خاص لإدخال الكود إلى الحاسوب، وتلك العملية بطيئة ومعرضة للخطأ، ويمكن أن يؤدي ثقب خاطئ إلى تعطل البرنامج بالكامل. وفي بعض الأحيان، كان المبرمجون يكتبون الكود يدويًا على ورق، ثم يقومون بترجمته إلى بطاقات مثقبة، وكانت مساحة الذاكرة في الحواسيب القديمة محدودة للغاية، مما أجبر المبرمجين على كتابة كود فعال للغاية ومضغوط. وعملية تصحيح الأخطاء debugging كانت صعبة للغاية، حيث لم تكن هناك أدوات متقدمة لمساعدة المبرمجين، وكان عليهم الاعتماد على تقنيات بدائية مثل طباعة قيم المتغيرات أو فحص محتوى الذاكرة يدويًا. ثم تطور الأمر، وأصبح هناك ما يسمى لغة التجميع Assembly Language لتسهيل عملية البرمجة، فبدلاً من الأرقام الثنائية Binary، استخدمت لغة التجميع رموزًا مختصرة mnemonics تمثل تعليمات المعالج. لكنها كانت لا تزال تعتمد على بنية المعالج بشكل كبير، مما يعني أن كود مكتوب بلغة تجميع لمعالج معين لا يعمل على معالج آخر، وكان يتم استخدام برامج تسمى المجمعات assemblers لتحويل كود التجميع إلى لغة الآلة.
  7. ستحتاج مكتبة QPrinter من PyQt6 لطباعة محتوى QWidget، ولا يمكنك طباعة QWidget مباشرةً، بل عليك رسم محتوى QWidget على QPainter المرتبط بـ QPrinter. قم بالاستيراد كالتالي: from PyQt6.QtGui import QPixmap, QPainter, QPrinter وإنشاء دالة باسم paint_invoice: def paint_invoice(self, painter): header_rect = QRect(0, 0, painter.device().width(), 150) painter.drawRect(header_rect) painter.drawText(header_rect, Qt.AlignmentFlag.AlignCenter, "فاتورة مبيعات مبسطة") company_info_rect = QRect(10, 20, painter.device().width() - 20, 100) painter.drawText(company_info_rect, Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignTop, "اسم الشركة: شركة مثال\nالعنوان: شارع 123، المدينة\nاسم العميل: العميل الافتراضي") table_rect = QRect(10, 170, painter.device().width() - 20, 200) painter.drawRect(table_rect) self.paint_table(painter, self.table_details, table_rect) totals_rect = QRect(10, 380, painter.device().width() - 20, 100) painter.drawRect(totals_rect) self.paint_totals(painter, totals_rect) barcode_rect = QRect(painter.device().width() - 170, 380, 150, 100) if self.barcode_label.pixmap(): painter.drawPixmap(barcode_rect, self.barcode_label.pixmap()) ثم إضافة الزر: def __init__(self): super().__init__() # ... (أضف التالي) ... self.print_button = QPushButton("طباعة الفاتورة") self.print_button.clicked.connect(self.print_invoice) main_layout.addWidget(self.print_button)
  8. ستجد على اليوتيوب شرح بخصوص ذلك، ابحث عن "شرح system design" وستجد قوائم عن system analysis and design وستجد شرح لـ System Design fundamentals في قناة أحمد الإمام وذلك كافي بالنسبة لك كمطور فما تحتاجه هو الأساسيات وفهم مراحل SDLC أو System Development Life Cycle. لكن مثل تلك المفاهيم ستجدها في المحتوى الأجبني بشكل أفضل، لكونها مفاهيم متقدمة.
  9. ما تعلمته هو الأساسيات وهو كافي في البداية، بعد فترة من التعلم والوصول لمستوى متوسط وتنفيذ أكثرم ن مشروع، عليك تعلم Stacks وQueues وGraphs وTrees وHeaps وLinked Lists. أيضًا تعلم Big-O notation وهو تدوين رياضي يصف تعقيد الخوارزميات، وهو أمر ضروري لفهم أداء الكود الذي كتبته. وتقنيات تصميم الخوارزميات لفهم كيفية معالجة حل المشكلات، مثل تقسيم المشكلة إلى مشاكل أصغر، والبرمجة الديناميكية، والخوارزميات الجشعة greedy algorithms. ومن الخوارزميات الأساسية، خوارزميات البحث (مثل: linear search, binary search) والفرز (مثل: bubble sort, merge sort, quick sort) وهي ضرورية لفهم كيفية معالجة البيانات بكفاءة داخل هياكل البيانات.
  10. يوجد عرض في بداية العطلة الصيفية وقد انتهى، وأحيانًا يوجد عرض في فترة الجمعة البيضاء، وفي رمضان أيضًا وفي بداية العام كذلك. يمكنك التحدث لمركز المساعدة والسؤال عن توافر كوبونات خصم في الوقت الحالي.
  11. ستحتاج إلى بناء معرض أعمال يثبت مهاراتك فكتابة تلك المهارات في الـ CV لا يعني أي شيء، يجب وجود مشاريع ذات جودة جيدة تثبت أنك قادر على تنفيذ المطلوب وأنك متمكن من المهارات والأدوات التي كتبتها في الـ CV. ولا أقصد بالمشاريع النماذج البسيطة التي تتدرب عليها أثناء التعلم، بل مشاريع كاملة قريبة من الواقع العملي. بعد ذلك تستطيع كتابة الـ CV، وستجد تفصيل هنا:
  12. ذلك متاح فقط لجامعات أمريكا وليس لجميع الدول وأيضًا أن تكون في الثانية الأولى أو الثانية بجامعة لها علاقة بمجال البرمجة أو علوم الحاسوب، ستجد تفصيل هنا: https://buildyourfuture.withgoogle.com/#eligibility-requirements
  13. الطريقة اليدوية مناسبة في حال لديك مجموعة بيانات صغيرة وسهلة الفهم، وتسمح لك بفهم كل خطوة بشكل دقيق جداً في كيفية معالجة البيانات المفقودة أو تشفير المتغيرات التصنيفية (مثلاً، استخدام متوسط بدلاً من الوسيط، أو طريقة تشفير معينة). أيضًا في البداية عندما تتعلم كيفية معالجة البيانات، فكتابة الكود يدوياً يساعدك على فهم العملية بشكل أفضل. ومع زيادة حجم البيانات وتعقيدها، تصبح مكتبات مثل scikit-learn ضرورية، حيث توفر وظائف فعالة وقوية لمعالجة البيانات بكفاءة عالية، وتسهل إعادة استخدام الكود، من خلال إنشاء خطوط أنابيب (Pipelines) قابلة لإعادة الاستخدام في مشاريع أخرى، فالوظائف في scikit-learn مُحسّنة للأداء، خاصةً مع البيانات الكبيرة. وبخصوص تقسيم البيانات، فالأفضل تقسيمها إلى مجموعات تدريب واختبار قبل المعالجة المسبقة في معظم الحالات، وذلك لتجنب تسريب المعلومات من مجموعة الاختبار إلى مجموعة التدريب، ولو قمت بمعالجة البيانات كاملةً ثم قمت بالتقسيم، فقد تستخدم معلومات من مجموعة الاختبار لحساب الإحصائيات (مثل الوسيط أو القيمة الأكثر شيوعاً) المستخدمة في معالجة البيانات المفقودة، الأمر الذي يؤدي إلى تقدير غير دقيق لأداء النموذج على بيانات جديدة. وباستطاعتك معالجة البيانات كاملًة في حال البيانات قليلة جداً بحيث لا يكون تقسيمها منطقياً او في المراحل الأولية من تحليل البيانات، لفهم خصائصها العامة. لكن النتائج التي تحصل عليها في تلك الحالة أحيانًا تكون غير دقيقة. وبعض أنواع المعالجة المسبقة، مثل تحويل البيانات إلى قيم z-score، يمكن تطبيقها على كامل البيانات دون مشكلة تسريب المعلومات.
  14. ستجد أسفل فيديو الدرس في نهاية الصفحة صندوق تعليقات كما هنا، أرجو طرح الأسئلة أسفل الدرس وليس هنا في قسم الأسئلة البرمجة حيث نطرح الأسئلة العامة الغير متعلقة بمحتوى الدورة أو الدرس، وذلك لمساعدتك بشكل أفضل.
  15. فهم تعدد المهام Concurrency يتطلب استيعاب لبعض المفاهيم الأساسية، وصعوبة كتابة الكود تأتي من عدم وضوح الهدف المراد تحقيقه، فتعدد المهام ليس أداة واحدة، بل مجموعة من التقنيات، واختيار التقنية المناسبة يعتمد على ما تريد تحقيقه. أولاً الـ Processes أو العمليات هي عملية مستقلة تمامًا عن باقي العمليات، لها مساحة ذاكرة خاصة بها، وإنشاء عملية جديدة يعني إنشاء برنامج جديد تمامًا. وذلك مناسب للمهام التي تتطلب عزلًا تامًا أو استخدام موارد كبيرة، والمكتبة المستخدمة هي multiprocessing. للتوضيح بمثال بسيط لحساب مربع الأعداد من 1 إلى 5 في عمليات منفصلة: import multiprocessing def square(n): return n * n if __name__ == '__main__': with multiprocessing.Pool(processes=5) as pool: results = pool.map(square, range(1, 6)) print(results) # Output: [1, 4, 9, 16, 25] المفهوم الثاني هو الخيوط Threads وهي خيوط متعددة تعمل ضمن نفس العملية، وتشارك نفس مساحة الذاكرة، وإنشاء خيط أسرع من إنشاء عملية، لكنها تشارك الموارد. وهي مناسبة للمهام التي تتطلب سرعة عالية وتشارك البيانات، لكن يجب الانتباه إلى مشاكل التزامن (Race Conditions). والمكتبة المستخدمة هي threading. وإليك مثال بسيط لطباعة رسائل من خيوط مختلفة: import threading import time def print_message(message): for i in range(5): print(f"Thread {threading.current_thread().name}: {message}") time.sleep(1) if __name__ == '__main__': thread1 = threading.Thread(target=print_message, args=("Hello",)) thread2 = threading.Thread(target=print_message, args=("World",)) thread1.start() thread2.start() thread1.join() thread2.join() المفهوم الثالث هو المهام المتزامنة Coroutine/Asyncio ولا تنشئ عمليات أو خيوط جديدة، بل تنتقل بين المهام بشكل غير متزامن باستخدام الكلمات المفتاحية async و await، ومناسب للمهام التي تتضمن انتظارًا (مثل طلبات الشبكة) أي عمليات I/O كثيفة (مثل الشبكات، قواعد البيانات)، حيث لا يتم حجب الخيط أثناء الانتظار. والمكتبة المستخدمة هي asyncio، وكمثال بسيط لطباعة رسائل مع تأخير باستخدام Asyncio: import asyncio async def print_message(message, delay): await asyncio.sleep(delay) print(f"Message: {message}") async def main(): await asyncio.gather( print_message("Hello", 2), print_message("World", 1) ) asyncio.run(main()) بالتالي عليك تحديد ما الذي تريد تحقيقه بتعدد المهام؟ هل تريد تسريع عملية حسابية؟ هل تريد التعامل مع طلبات متعددة من الشبكة؟ فالعمليات مناسبة للمهام المستقلة، الخيوط للمهام التي تشارك البيانات، والمهام المتزامنة للمهام التي تتضمن انتظارًا. ولا تحاول كتابة برنامج معقد من البداية، ابدأ بمثال بسيط وفهم كيفية عمله قبل إضافة تعقيدات.
  16. عذرًا على ذلك، أرجو الإنتظار لبعض الوقت وسيتم الرد عليكي، لا تقلقي بخصوص الرد، أحيانًا يوجد ضغط على مركز المساعدة أو خارج ساعات العمل.
  17. الأمور المالية يتم مناقشتها من خلال مركز المساعدة أرجو التحدث إليهم وإرسال تلك الرسالة، وتستطيعي استبدال الدورة بدورة أخرى تناسبك.
  18. ما يحدث عندما تسترجع البيانات من قاعدة البيانات باستخدام PHP، يتم جلب البيانات كـ Strings بشكل افتراضي، بغض النظر عن نوع البيانات في قاعدة البيانات، ذلك لأن PHP لغة برمجة ذات كتابة ديناميكية، ولا تُلزم بكتابة صارمة للبيانات. بإمكانك تحويل النص إلى عدد صحيح مباشرًة باستخدام الـ Casting $id = (int) $row['id']; أو استخدام دوال PHP المُدمجة، مثل intval() أو filter_var(), لتحويل النص إلى عدد صحيح: $id = intval($row['id']); أو تهيئة PHPMyAdmin لإرجاع القيم الصحيحة كأعداد صحيحة بدلاً من نصوص، بالإنتقال إلى إعدادات PHPMyAdmin، وفي علامة التبويب SQL، قم بتعيين Use integer for integer columns إلى yes.
  19. المطلوب هو كتابة دالة جافاسكريبت تُسمى getPathwayProjectDe تستقبل عدة مدخلات تصف مشروعًا رياضيًا، ثم تُعيد كائنًا مُنسقًا يحتوي على هذه المعلومات. المدخلات هي: name: اسم المشروع (مثلًا، "المسار الرياضي"). goals : مصفوفة من السلاسل النصية تصف أهداف المشروع. activities: مصفوفة من السلاسل النصية تُدرج الأنشطة المُقدمة. geographical_details: كائن يحتوي على تفاصيل الموقع الجغرافي للمشروع (من المحتمل أن يحتوي على خصائص مثل start و end). related_initiatives: مصفوفة من السلاسل النصية تُسمي المبادرات ذات الصلة (مثلًا، "رؤية 2030"). يجب أن تُعيد الدالة كائنًا واحدًا يُنظم كل تلك المعلومات بشكل مُرتب، والمثال المُقدم يُظهر كيف يُستخدم المدخل description (الذي ليس مدخلًا مباشرًا ولكنه مُشتق من المدخلات الأخرى) لإنشاء المخرجات. حاول التفكير في الأمر وتقسيم المشكلة إلى أجزاء والعمل على حلها، وأخبرني إن واجهت صعوبة والكود الذي توصلت إليه
  20. في البرمجة بشكل عام هي دالة داخل كائن أو كلاس ونستدعيها من خلال النقطة . بعد اسم الكلاس أو الكائن. في بايثون، الـ method هي دالة function مرتبطة بـ مُثيل instance (نسخة من الكلاس) من class، أي تعيش داخل كلاس وتعمل على بيانات ذلك المُثيل، ونستخدمها للتفاعل مع خصائص attributesومُثيلات الكلاس. الفرق الرئيسي بين الدالة العادية والميثود هو أن الميثود تستقبل مُثيل الفئة كمعامل ضمني (implicit argument) يُسمى بشكل شائع باسم self وهو يُشير إلى المُثيل الذي تُستدعى عليه الميثود. class Dog: def __init__(self, name, breed): self.name = name self.breed = breed def bark(self): print("Woof! My name is", self.name) def describe(self): print(f"I am a {self.breed} named {self.name}") my_dog = Dog("Buddy", "Golden Retriever") my_dog.bark() my_dog.describe() __init__ هو مُنشئ constructor وهي ميثود خاصة لتهيئة مُثيلات الكلاس عند إنشائها. bark و describe هما ميثودان تُنفذان على مُثيل my_dog، لاحظ كيف يستخدمان self للوصول إلى خصائص المُثيل (self.name, self.breed).
  21. ما كتبته غير صحيح، فما يظهر هو كلاس أي كالتالي عند حل المسألة: class Solution(object): def twoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ و twosum هي ميثود بداخل الكلاس لحل المسألة مباشرًة تفقد المسألة هنا: https://leetcode.com/problems/two-sum/
  22. لن تحتاج إلى دفع أي شيء سوى اشتراك الدورة فقط. بخصوص مجال تخصص مدير المنتج أو product manager، فستتعلم بالدورة أساسيات إدارة تطوير المنتجات، حيث ستتعرف على المنتجات الرقمية ومنهجيات إدارتها، وكيفية دراسة السوق وتحليل المنافسين ومتطلبات العملاء، وستأخذ فكرة عامة عن مراحل التصميم والتطوير والإطلاق. وستتعلم كيفية توظيف فريق من المصممين لتصميم الهوية البصرية والواجهات الأمامية، وفريق من المبرمجين لبرمجة الواجهات الأمامية frontend والخلفية backend والجوال؛ بتطبيق عملي على مشاريع حقيقية نبنيها. وكتابة ملف المواصفات التقنية للمنتج، وميزاته وتحديد الأولويات، وكيفية كتابة حالات الاستخدام Use cases وقصص المستخدمين User stories. وسنعمق في المفاهيم التي بنيت عليها أجايل، وسنتعرف على إطار العمل سكرام ونطبق عمليًا. وستجد تفصيل هنا بخصوص ذلك التخصص: عليك البحث على مواقع التوظيف الخاصة بسوق العمل الذي تريد العمل به، باسم الوظيفة وهو product manager ثم تفقد المهارات المطلوبة واعمل على تعلمها
  23. عليكِ استخدام ترميز UTF-8 لنقم بتجربة الحلول التالية بالترتيب: في بداية ملف to_excell.php، أضيفي السطر التالي: header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8'); فذلك يحدد ترميز UTF-8 لملف Excel. 2- بدلاً من setCellValueByColumnAndRow, استخدمي setCellValueExplicit مع تحديد نوع البيانات كـ DataType::TYPE_STRING وذلك لضمان كتابة النصوص العربية بشكل صحيح، ويجب أيضاً تحديد الترميز صراحةً: use PhpOffice\PhpSpreadsheet\Cell\DataType; // داخل الحلقة while $sheet->setCellValueExplicit($col, $rowNumber, $value, DataType::TYPE_STRING); 3- تأكدي من أن ملف to_excell.php نفسه مُحفظ باستخدام ترميز UTF-8 بدون BOM (Byte Order Mark). تستطيعي تفقد ذلك باستخدام محرر نصوص يدعم ترميز الأحرف مثل Notepad++ أو Sublime Text. 4- تحويل النصوص العربية إلى UTF-8 قبل كتابتها في ملف Excel باستخدام دالة mb_convert_encoding: $value = mb_convert_encoding($value, 'UTF-8', 'auto'); $sheet->setCellValueExplicit($col, $rowNumber, $value, DataType::TYPE_STRING); 5- حفظ ملف Excel بترميز UTF-8 $writer->save('php://output', 'UTF-8');
  24. حاليًا عليك إعادة تشغيل الحاسوب فأحيانًا هناك ملفات مؤقتة تسبب المشكلة أو مشاكل في الذاكرة العشوائية، إن لم يتم حل المشكلة عليك إعادة تثبيت البرنامج.
  25. توقع فترة تتراوح ما بين أسبوع إلى شهر للمراجعة، لذا لا حاجة للاستعجال طالما قمت بمراجعة التطبيق بنفسك وتفقدت شروط منصة جوجل بلاي وطبقتها في تطبيقك. https://play.google/developer-content-policy/ https://support.google.com/googleplay/android-developer/answer/15225428?hl=en
×
×
  • أضف...