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

El Sayed El Tohamy

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

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

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

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

    1

آخر يوم ربح فيه El Sayed El Tohamy هو فبراير 1

El Sayed El Tohamy حاصل على أكثر محتوى إعجابًا!

2 متابعين

المعلومات الشخصية

  • النبذة الشخصية
    استشاري التطبيقات البرمجية
    مدرب البرمجيات بوزارة الاتصالات المصرية والسعودية

آخر الزوار

448 زيارة للملف الشخصي

إنجازات El Sayed El Tohamy

عضو نشيط

عضو نشيط (3/3)

123

السمعة بالموقع

5

إجابات الأسئلة

  1. في البداية أحب أن أوضح شيئًا، وهو أنه لا مانع من تكرار الفيديو فلو لاحظت معظم المواقع أو حتى أنظمة التشغيل عندما تريد عرض صور عشوائية ربما يحدث تكرار لهذه الصور، فتجد صورة تظهر كثيرًا وربما تظهر مرتين متتاليتين وبعض الصور تكون نادرة الظهور، كل هذا تابع للرقم العشوائي الذي يتم توليده. أما إذا تريد عدم تكرار أي فيديو حتى يتم الانتهاء من القائمة كلها، سأذكر لك طريقة التفكير وأترك لك تطبيقها بالشيفرات حتى تنمي مهاراتك. الفكرة تعتمد على: كل فيديو يتم عرضه نقوم بإزالته من القائمة الأساسية (التي هي في حالتنا المتغير الذي توعه مصفوفة array واسمه videos)، ثم حفظه في مصفوفة أخرى جانبية، وعندما يتم عرض جميع العناصر (أي تفريغ المصفوفة الأساسية)، نقوم بملئها مرة أخرى من المصفوفة الفرعية وتفريغ المصفوفة الفرعية $(document).ready(function() { var videos = [ "video1.mp4", "video2.mp4", "video3.mp4" ]; // مصفوفة فرعية var displayedVideos = []; $("#playRandomButton").click(function() { // في هذا المكان مطلوب اختبار المصفوفة الأساسية إذا فارغة نملأها من المصفوفة الفرعية ونفرغ الفرعية var randomIndex = Math.floor(Math.random() * videos.length); var videoUrl = videos[randomIndex]; // في هذا المكان مطلوب حذف العنصر الذي تم اختياره عشوائيًا من المصفوفة الأاساسية وإضافته للفرعية $("#videoPlayer").attr("src", videoUrl); $("#videoPlayer")[0].play(); }); });
  2. وعليكم السلام ورحمة الله وبركاته، إذا كنت تقصد الشيفرات التي تجعل الكرة تعكس اتجاهاها عندما تصل إلى إحدى حواف الشاشة فإليك الشيفرات import pygame from pygame.locals import * # تهيئة محرك Pygame pygame.init() # إعداد النافذة screen_width, screen_height = 800, 600 screen = pygame.display.set_mode((screen_width, screen_height)) pygame.display.set_caption("لعبة الكرة") # متغيرات الكرة ball_radius = 20 ball_x, ball_y = screen_width // 2, screen_height // 2 ball_speed_x, ball_speed_y = 5, 5 # دورة اللعبة while True: for event in pygame.event.get(): if event.type == QUIT: pygame.quit() exit() # تحديث موقع الكرة ball_x += ball_speed_x ball_y += ball_speed_y # ارتداد الكرة عند الحواف # عندما يكون الإحداثي السيني صفرًا أو أكبر من عرض الشاشة if ball_x < 0 or ball_x > screen_width - ball_radius: # نضرب سرعة الكرة في -1 حتى نعكس اتجاه الكرة ball_speed_x *= -1 # نفس الأسلوب مع الإحداثي الصادي if ball_y < 0 or ball_y > screen_height - ball_radius: ball_speed_y *= -1 # رسم الكرة screen.fill((0, 0, 0)) # مسح الشاشة pygame.draw.circle(screen, (255, 255, 255), (ball_x, ball_y), ball_radius) pygame.display.update() # تحديث الشاشة
  3. في البداية يجب توضيح أنه لا يوجد أي شيء هو الأفضل بشكل مطلق، لأن ما تفضله أنت ربما لا يفضله غيرك. لذلك السؤال يجب أن يكون "ما الأنسب لحالتي؟" فكل منتج بشكل عام يناسب حالة معينة، إليك التوضيح.. إذا كنت مبتدئًا في عالم برمجة الألعاب فالأنسب أن تبدأ باستخدام جودو Godot كذلك إذا كنت لا تريد تكلف الأموال فالأنسب هو محرك جودو Godot لأنه مفتوح المصدر ولا يتطلب دفع رسوم. أما إذا كنت تريد الحصول على منتج ذي تنافسية عالية وتصميم ثلاثي الأبعاد معقد 3D، فالأنسب استخدام محرك يونيتي Unity، ولكن يجب الوضع في الاعتبار أنه ربما لا يناسب المبرمج المبتدئ لذلك يحتاج بعض الخبرة، كذلك تكلفته تكون أعلى (الخلاصة يناسب المحترفين أكثر من المبتدئين).
  4. في البداية يجب الاتفاق على شيء هام، ألا وهو وجود الثقة بينك وبين المبرمج لأنه بالتأكيد سيجمع منك بيانات لأداء عمله وربما يطلع على بعض البيانات شديدة السرية، لذلك ينصح باختيار المبرمج ذي الدين والأمانة. أما بخصوص البيانات، أعتقد أن المقصود بعد استلام التطبيق من المبرمج والبدء في استخدامه وتخزين البيانات عليه، كيف أخفي البيانات من المبرمج؟ في الحقيقة طالما أن البرنامج مثبت على جهازك فلا أحد يستطيع الوصول لهذه البيانات إلا من خلال العمل على هذا الجهاز، (بفرض أنك لن تحول الجهاز لخادم يمكن الوصول إليه). لذلك عندما يتم التعديل أو التحديث على البرنامج فالمبرمج هو الذي يرسل لك نسخة جديدة تستبدلها بالنسخة القديمة الموجودة على جهازك، لا يحتاج منك أن تمده بأي بيانات مخزنة إلا في حالة وجود مشكلة تتطلب الاطلاع على البيانات نفسها، وهذه تكون حالات نادرة تضطر فيها لإعطاء المبرمج نسخة من قواعد البيانات (طالما المبرمج محترف، أما في حالة المبتديء فإن مشاكل البرنامج تكون كثيرة ويحتاج معاينة قواعد البيانات). لذلك، نعود لموضوع الثقة، يجب اختيار المبرمج المشهود له بالأخلاق والأمانة.
  5. هذا السؤال يتكرر كثيرًا، فدائمًا العملاء يسألوننا ما الأفضل برنامج سطح مكتب Desktop أم تطبيق ويب Web application الإجابة: لا يوجد شيء هو الأفضل على الإطلاق، ولكن هناك الأنسب لحالتك. ألخص لك الأمور ببساطة: إذا كان الهدف هو تسجيل البيانات واسترجاعها والتقارير فقط دون الحاجة للإعلان على شبكة الإنترنت، ففي هذه الحالة يكون الأنسب سطح مكتب، ويمكنك ربط عدة أجهزة عن طريق قواعد بيانات سحابية رغم أن التطبيق نفسه سطح مكتب. وتكلفة تطبيق سطح المكتب تكون أقل من تطبيق الويب بالتأكيد، ولابد أن يدعم حفظ نسخ احتياطية من قواعد البيانات واسترجاعها، وإذا كان عدد من المستخدمين يجب يكون لكل مستخدم صلاحيات، ويجب أن يكون هناك نظام تتبع لحركات المستخدمين بحيث نعلم من أدخل البيانات ومن آخر شخص قام بالتعديل ومن قام بحذف البيانات. أما إذا كنت تريد لعملائك أن يطلعوا على قضاياهم فيمكن ذلك عن طريق تطبيق الويب. وبالتأكيد لا نتجاهل تطبيقات الهاتف المحمول التي قد تناسب العملاء، فيمكن عمل تطبيق سطح مكتب أو ويب ومعه تطبيق هاتف محمول للعملاء ليطلعوا على المستجدات. الاختيارات واسعة ومتعددة، لذلك، الأفضل هو توضيح احتياجاتك لاختيار الأسلوب الأنسب.
  6. في البداية أحييك على اجتهادك ومحاولاتك لتنمية مهاراتك البرمجية. الشيفرات التي كتبتها تعمل بشكل صحيح، وبالتأكيد قد اكتسبت مهارة التفكير المنطقي وهذه مهارة مطلوبة وهامة جدًا، ولكن بجانب ذلك لابد من تنمية مهارة استخدام الأدوات المساعدة والمتقدمة. الفوائد: هذه الأدوات تم اختبارها وخالية من الأخطاء هذه الأدوات تستخدم خوارزميات أفضل في عملية البحث والاستبدال تكون أسهل في الكتابة ومختصرة وأوضح في قراءة الشيفرات ومعالجة الأخطاء من ضمن هذه الأدوات هي "التعابير النمطية" Regular Expressions فيمكن تنفيذ نفس المهمة بالشكل التالي import re def replace(st): newText = re.sub("[aeiouAEIOU]", "!", st) return newText print(replace('aeioun')) كما يتضح، تم استخدام وظيفة sub التابعة لمكتبة re، وكما نرى سهولة قراءة الشيفرات وبالتالي سهولة الصيانة ومعالجة الأخطاء. إضافة إلى أن هذه الوظيفة تم اختبارها جيدًا ومضمونة بشكل أكبر. إضافة إلى سرعة الأداء نتيجة استخدام خورازميات بحث واستبدال متقدمة مما يساعد في تحسين الأداء والذاكرة. يمكنك مشاهدة هذا المقال الهام الذي به العديد من المشاريع التي تنمي مهاراتك بشكل كبير
  7. ليس المقصود من تعلم الجبر الخطي Linear Algebra أن تكون عالمًا متخصصًا فيه. ولكن باختصار، لابد من وجود أساسيات الجبر الخطي مثل المصفوفات والعمليات على المصفوفات ولابد أن تعرف قواعد كل عملية، لأنه بالتأكيد لا يمكن الحصول على قيمة المتغير c في المثال الذي أعطيته دون أن تعرف كيف يتم حسابها، كذلك معرفة بالمعادلات الرياضية من الدرجات المختلفة وكذلك التمثيل البياني وفهم المصطلحات الخاصة به، والمتجهات والانحدار يجب دراسة هذه المواضيع حتى تفهم ما يدور خلف الكواليس وتستطيع تحسين النتائج فيما بعد. إضافة إلى الجبر الخطي: التفاضل والتكامل حساب المثلثات الإحصاء الوصفية
  8. بداية هذه الشيفرات تعمل بشكل صحيح. ولكن ربما تحتاج لتصحيح بسيط وهو استبدال علامات == بعلامة =< حتى يعطينا True في حالة أرسلت قيمة أقل من 10 def fillable(stcok , merch , n): print(stcok[merch]) # if stcok[merch] == n: if stcok[merch] >= n: return True else: return False dic = { "iphone": 10, "mac": 5, "Apple Vision": 10, } print(fillable(dic , "iphone" , 9)) # True print(fillable(dic , "iphone" , 10)) # True print(fillable(dic , "iphone" , 11)) # False لاحظ أن القيمة 9 كانت ستعطي False أي غير ممتليء لو استخدمت الشيفرات القديمة، وهذا يعتبر خطأ.
  9. هل حاولت استخدام رمز السطر الجديد vbCrLf لإنشاء سطر جديد؟ كما بالمثال التالي Dim messageText As String = "سطر 1" & vbCrLf & "سطر 2" & vbCrLf & "سطر 3"
  10. وعليكم السلام ورحمة الله وبركاته، بالتأكيد السلامة المهنية من أهم النقاط التي يجب أن يحرص عليها كل إنسان مهما كانت مهنته، وبالنسبة لمستخدمي الحاسب الآلي يقضون أوقاتًا طويلةً جدًا أمام الجهاز مما يتسبب في العديد من المشاكل الصحية إن لم نتبع الأساليب الصحية. وإليك بعض النصائح للحفاظ على الصحة العامة وليس العينين فقط، لأن الضرر قد يلحق بفقرات العنق، وبالمفاصل وبالدورة الدموية. ضبط وضعية الشاشة: يجب التأكد من أن شاشة الكمبيوتر أو اللاب توب تكون على مسافة ذراع من عينيك (حوالي 60 سم). يفضل أن تكون الحافة العلوية للشاشة على مستوى عينيك أو أسفلها قليلاً، بحيث تكون الرقبة على مستوى مضبوط ليست مائلة للأسفل أو للأعلى ضبط وضعية الكرسي: اختر كرسيًا يكون مريحًا ويدعم منطقة الظهر، وتأكد من أن الكرسي يكون قابلًا للتعديل لتناسب ارتفاع مكتب العمل. يجب أن يكون ظهرك مستقيمًا، والركبتان بزاوية قريبة من 90 درجة تنويع وضعية الكرسي حتى لا يتم إجهاد عضلات معينة وكسل عضلات أخرى الرمش بانتظام: قم بالرمش بانتظام لزيادة ترطيب العين، حيث أن الرمش يعمل كاستراحة للعين ويساعد في تجنب الجفاف. استراحة كل ساعة: كلما مرت ساعة من العمل أمام الشاشة، خذ استراحة لمدة 5 دقائق على الأقل. نظر إلى مسافة بعيدة أو قم بتحريك العينين لتجنب التركيز المستمر. تحكم في سطوع الشاشة: ضبط سطوع الشاشة ليكون مريحًا لعينيك، ومتناسبًا مع الإضاءة المحيطية، وتجنب الإضاءة الزائدة والانعكاسات على الشاشة. تناول الأطعمة الصحية: تناول الخضروات والفواكه التي تحتوي على فيتامينات مفيدة لصحة العينين مثل فيتامين أ الموجود في الألبان والجبن الطبيعية والجزر والخضروات. الرياضة وزيارة الأطباء في حالة حدوث بوادر شكوى: رياضة المشي من أهم الرياضات ويكفي ممارستها لمدة 20 دقيقة (يمكن النزول قبل مكان العمل بحوالي 700 مترًا) زيارة طبيب الرمد أو العظام أو القلب في حالة ظهور أي أعراض غير طبيعية.
  11. وعليكم السلام ورحمة الله، المشكلة أنه توجد بعض المكتبات تتعامل مع إصدارات مختلفة عن الإصدار الحالي لمكتبة رياكت، فإذا كنت متأكدًا أن هذه المكتبات ليس بها أي مشاكل، حاول تجاهل الإصدارات التي تحتاجها هذه المكتبات وقم بالتثبث باستخدام npm i --legacy-peer-deps
  12. مهارة حل المشاكل Problem Solving من أهم المهارات التي يجب على المبرمج (بل كل شخص في الحياة عامة) أن يتقنها، والموضوع ليس صعبًا ولكن يتطلب عزيمة وصبرًا، لأنه يحتاج للتجربة أكثر من مرة فربما يصاب الإنسان باليأس. في البداية، يجب معرفة أن حل المشاكل البرمجية مثلها مثل أي مشكلة أو مهمة تواجههنا في حياتنا اليومية، نعم، كلها تتشابه في أنهم جميعًا يحتاجون إلى خطوات معروفة ومرتبة حتى يتم حل هذه المهمة. على سبيل المثال: كلنا نذهب إلى العمل، هل تعلمون أن هذه إحدى المشاكل (المهام) التي تتطلب خطوات حل (خوارزميات)؟ ولكن نظرًا لأننا اعتدنا على هذه المهمة اليومية فأصبحنا نطبقها بشكل تلقائي وسهل، ولكن تذكر أول مرة تذهب فيها إلى العمل، كانت مهمة صعبة جدًا لأنك تتعرض لها لأول مرة. نفس الشيء مع كل المشاكل (المهام) التي ستواجهها في البرمجة، ستكون صعبة جدًا في البداية، ولكن مع قراءة المشكلة مرة ثانية ثم تطبيق مهارات حل المشاكل ستبدأ بالوضوح شيئًا فشيئًا. الآن وبعد أن عرفنا أنه يجب الصبر والعزيمة، ما هي مهارات حل المشاكل؟ 1- اتقان مهارات لغة البرمجة المتعددة: كلما تعرفنا على مهارات ومكتبات اللغة كلما وفرنا على أنفسنا جهدًا كبيرًا، لأنه ربما تضيع يومًا كاملاً ثم تكتشف أن هناك وظيفة تقوم بمثل ما كتبته أنت، وبالتالي هام جدًا التعرف على أنواع البيانات وهياكل البيانات data structure مثل القوائم والمصفوفات والقواميس list, dictionary, array والوظائف المدمجة built-in functions وما إلى ذلك لأنه سيجعلنا نتعرف على إمكانيات اللغة الرائعة. 2-تحليل المشكلة: من الأمور الهامة جدًا فهم المشكلة والسؤال عن أي جزئية غير واضحة، وبعد ذلك يتم تحليل المشكلة وتقسيمها إلى مهام أصغر فأصغر وبالتالي يمكن التركيز على كل مهمة بشكل منفصل، ولا ننتقل أبدًا إلى المهمة التالية إلا بعد الانتهاء واختبار المهمة الحالية. 3- حل المشكلات بالورق: قبل البدء في البرمجة، حاول حل المشكلة على ورق، اكتب الخطوات اللازمة لحل المشكلة وتحليلها (كتابة عادية وليست برمجة)، ويمكن استخدام مخططات التدفق flow chart 4- حل تحديات البرمجة: قم بحل تحديات البرمجة والمشكلات باستمرار، يمكنك البدء بتحديات بسيطة وتدريجيًا الانتقال إلى مستوى أعلى. مواقع مثل https://www.hackerrank.com/ و https://pynative.com/ توفر تمارين وتحديات متنوعة لتحسين مهاراتك في البرمجة. 5- تحسين القراءة والكتابة البرمجية: هذه المهارة تتم عن طريق الاستعانة بخبرات الآخرين عن طريق قراءة الأكواد المكتوبة من قبل مطورين آخرين، سؤالهم عن كيفية حل المشكلة، طلب تقييم الشيفرات وطريقة الحل التي قمت أنت بها الخلاصة: هذه المهارة تتطلب محاولات متكررة وعزيمة وصبر وعدم يأس، وتطبيق النقاط السابقة. بعض المقالات المفيدة في هذا المجال https://academy.hsoub.com/programming/general/تعلم-البرمجة-r662/ https://academy.hsoub.com/programming/general/المبرمج-المحترف/
  13. وعليكم السلام ورحمة الله، مكتبة packaging لها العديد من الفوائد: 1- تساعد في إنشاء حزم بايثون قابلة للتثبيت: فبعدما قمت بتطوير برنامجك، بالتأكيد تريد أن تذهب به إلى العميل وتقوم بتثبيته على جهازه، لذلك يتوجب عمل حزمة (أي ملفات تثبيت) ومن خلالها نستطيع تشغيل البرنامج عند العميل، وبهذا يمكن لعملائك تثبيت برنامجك بسهولة، ودون الحاجة لتثبيت لغة البرمجة بايثون. 2- قابلية التوسع: تعني أن مكتبة packaging توفر واجهة برمجة تطبيقات (API) تسهل إنشاء حزم بايثون متقدمة. يمكن للمطورين توسيع هذه المكتبة باستخدام أدوات خارجية مثل setuptools و Poetry. مثال: يمكنك استخدامها لإنشاء حزمة تثبيت تحتوي على مكتبات مخصصة للتعامل مع قواعد البيانات، أو الواجهات الرسومية، أو أي مجال آخر. 3- تطوير حزم بايثون متطورة ومشاركتها: عندما نتحدث عن تطوير حزم بايثون، نقصد إنشاء مكتبات أو أدوات قابلة للتوزيع والاستخدام بواسطة المطورين الآخرين. ما الفائدة من عمل هذا؟ الفائدة أنك تقوم بمشاركة برنامجك مع المبرمجين الآخرين فيتمكنوا من تطوير برنامجك معك (فيصبح مفتوح المصدر). كيف يتم ذلك؟ بعد إنشاء الحزمة، يمكنك مشاركتها مع المجتمع البرمجي عبر منصات مثل PyPI (Python Package Index). بهذا أنت قمت بإنشاء برنامج وشاركته مع المبرمجين الآخرين، مما يساهم في تطوير وتبادل الخبرات بين المطورين. أمثلة لبرامج مفتوحة المصدر تستخدم هذا الأسلوب: هناك العديد من المشاريع المفتوحة المصدر التي تستخدم حزم بايثون متطورة. إليك بعض الأمثلة: Django: إطار عمل بايثون لتطوير تطبيقات الويب. Flask: إطار عمل خفيف لتطبيقات الويب. Pandas: مكتبة لتحليل ومعالجة البيانات. Requests: مكتبة لإجراء طلبات HTTP بسهولة. Matplotlib: مكتبة لرسم الرسوم البيانية والرسوم البيانية. هذه المشاريع تعتبر مفتوحة المصدر، ويمكن للمطورين المساهمة في تطويرها وتحسينها فكما رأينا أن هذه المكتبة مفيدة جدًا في العديد من المواقف.
  14. خاصية "use server" يتم استخدامها لتمكين ملفات العميل client side من استدعاء وظائف مكتوبة في ملف الخادم server.js. وبناء عليه لتتمكن من استخدامها يجب أن يكون لديك ملفات تعمل كخادم (في حالتنا server.js) ويُكتب فيه الشيفرات التي تقوم بحفظ البيانات إلى قواعد البيانات، والتي في الغالب تكون على هيئة واجهات برمجية api، ويتم اختيار وظيفة أو عدة وظائف وإضافة هذه الخاصية إليهم "use server" فيمكنك استدعاء هذه الوظائف من جهة العميل (الذي هو يعتبر المتصفح). // server.js async function addToCart(data) { 'use server'; // اكتب الكود الذي يضيف إلى السلة هنا } ومن جهة العميل // client.js import { addToCart } from './server'; // استبدل 'server' بمسار ملف الخادم الفعلي // استدعاء الدالة من الجانب العميل const someData = { /* بيانات معينة */ }; addToCart(someData); وبهذا الشكل يتمكن المستخدمون من استدعاء وظائف مكتوبة على الخادم.
  15. وعليكم السلام ورحمة الله وبركاته، من المستحيل بالتأكيد أن يلم شخصٌ بكل شيء، فالتطور حرفيًا صاروخي، لذلك نجد بعض المصطلحات تختفي وتظهر مكانها مصطلحات أكثر تخصصية مثل اختفاء full stack developer وظهور front-end developer and back-end developer إلا إذا كان الموقع بسيطًا جدًا. إذن ما العمل؟ الحل هو أن نتعلم المفهوم، مثلما يتعلم شخص قيادة السيارة هو يتعلم مفهوم القيادة ثم يطبقه على أي نوع من أنواع السيارات، لذلك يجب على المبرمج أن ينمي مهارات التعلم الذاتي، وبالتالي عندما يحتاج أن يتعامل مع خوارزمية أومكتبة أو إطار عمل جديد، فلديه القدرة على تعليم نفسه بنفسه. الخلاصة: تنمية مهارات التعلم الذاتي، وبالتالي عندما نتعرض لأي جديد يكون لدينا القدرة على تعلمه لا نعتمد على أحد.
×
×
  • أضف...