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

Sherif Aboghazala

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

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

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

كل منشورات العضو Sherif Aboghazala

  1. وعليكم السلام ورحمة الله وبركاته. نعم، يمكن القول إن بعض مجالات البرمجة، خصوصًا مثل Front-end، أصبحت مزدحمة نسبيًا، لكن كلمة “مشبع” ليست دقيقة بالكامل. السوق لم يمتلئ بالمبرمجين الجيدين، بل امتلأ بالمبتدئين أو بمن يملكون معرفة سطحية فقط. لذلك نرى فجوة واضحة بين عدد المتقدمين للوظائف وعدد من يتم توظيفهم فعليًا. المشكلة ليست في كثرة من تعلموا HTML وCSS وJavaScript، بل في أن كثيرًا منهم توقف عند هذا الحد أو اعتمد على تقليد المشاريع دون فهم عميق. الشركات اليوم لا تبحث عن شخص يعرف الإطار أو الأداة فقط، بل عن شخص يفهم كيف يبني منتجًا حقيقيًا، يحل مشاكل، ويتعامل مع الأداء، والأمان، وتجربة المستخدم. الخروج من المنافسة لا يكون بتعلم لغة جديدة كل فترة، بل بالتميّز داخل المجال نفسه. مثلًا في Front-end، من يتقن أساسيات الويب جيدًا، ويفهم الأداء، وإمكانية الوصول، واستهلاك الـ APIs، وكتابة كود نظيف وقابل للصيانة، سيكون مختلفًا تمامًا عن الأغلبية. إضافة القدرة على فهم الباك إند أو العمل مع فرق متعددة يزيد من فرصك كثيرًا. أما عن المجالات التي فيها فرص أكثر ومنافسة أقل نسبيًا، فهي غالبًا المجالات التي تحتاج صبرًا وتعلّمًا أعمق، ولا تعطي نتائج سريعة. مثل مجال الباك إند المتقدم، الأمن السيبراني، تحليل البيانات، هندسة البيانات، الأتمتة، DevOps، وعمليات المراقبة والدعم التقني المتقدم مثل SOC. هذه المجالات لا يندفع لها الجميع لأنها تتطلب فهمًا تقنيًا أوسع ومسؤولية أكبر، ولذلك الطلب عليها مستمر. كذلك التخصص في مجال معين داخل البرمجة يعطيك ميزة قوية. بدل أن تكون “مبرمج ويب عام”، تصبح مطور نظم مالية، أو مطور أنظمة حجوزات، أو مطور منصات تعليمية، أو تعمل في حلول الأعمال والأنظمة الداخلية. هذا النوع من التخصص يقلل المنافسة بشكل كبير لأنك تنافس على خبرة، لا على لغة فقط.
  2. وعليكم السلام ورحمة الله وبركاته. سؤالك في مكانه، وهذه نقطة تصميم مهمة في قواعد البيانات. الأفضل في أغلب التطبيقات الحديثة أن تجعل الـ id المتسلسل رقمًا داخليًا فقط، وتضيف بجانبه حقل UUID مستقل، ثم تستخدم الـ UUID في الروابط وواجهات الـ API، ولا تعتمد على الـ id المتسلسل خارجيًا. بهذه الطريقة تجمع بين الأداء الجيد والأمان. السبب أن الـ id المتسلسل ممتاز من ناحية الأداء، خصوصًا مع قواعد البيانات العلائقية، لأنه صغير الحجم، سريع في الفهرسة، ويسهّل العلاقات بين الجداول. لكنه غير مناسب للاستخدام في الروابط أو الواجهات العامة، لأن من السهل تخمينه أو التلاعب به، مثل تجربة أرقام متتالية للوصول إلى بيانات لا يجب الوصول إليها. أما الـ UUID فهو ممتاز للاستخدام الخارجي، لأنه عشوائي وصعب التخمين، وبالتالي أكثر أمانًا عند استخدامه في الروابط أو عند التعامل مع الـ API. لكنه أبطأ نسبيًا من الـ id الرقمي، ويستهلك مساحة أكبر في الفهارس، لذلك لا يُفضل غالبًا كمفتاح أساسي وحيد في قواعد البيانات الكبيرة. لهذا، الحل العملي الشائع هو أن يكون المفتاح الأساسي Primary Key رقمًا متسلسلًا، مع وجود حقل UUID عليه فهرس فريد، وتستخدم الـ UUID في كل ما هو ظاهر للمستخدم أو للتكامل مع الأنظمة الأخرى، بينما تبقى العلاقات الداخلية مبنية على الرقم المتسلسل. استخدام الـ UUID كمفتاح أساسي مباشرة يكون مناسبًا في حالات معينة، مثل الأنظمة الموزعة أو عند توليد البيانات من أكثر من مصدر بدون تعارض، أو إذا كنت تعمل على Microservices وتحتاج معرفًا فريدًا عالميًا دون الرجوع لقاعدة البيانات. لكن في التطبيقات التقليدية أغلب الوقت لا تحتاج ذلك.
  3. وعليكم السلام ورحمة الله وبركاته. مسمّى SOC Analyst هو اختصار لـ Security Operations Center Analyst، وهو الشخص المسؤول عن مراقبة الأنظمة والشبكات بشكل مستمر لاكتشاف أي نشاط مشبوه أو هجمات سيبرانية، وتحليلها، ثم اتخاذ الإجراء المناسب أو تصعيدها حسب خطورتها. هذا الدور يُعد من أكثر الأدوار شيوعًا للدخول إلى مجال الأمن السيبراني، خصوصًا في المستوى المبتدئ. عمل محلل SOC يتمحور حول المراقبة والتحليل أكثر من الاختراق. يومه العملي غالبًا يكون داخل مركز عمليات أمنية، يتعامل مع تنبيهات صادرة من أنظمة حماية مختلفة مثل أنظمة كشف التسلل، الجدران النارية، وأنظمة SIEM. عندما يظهر تنبيه، يبدأ بتحليله ليفهم هل هو هجوم حقيقي أم إنذار كاذب، وإن كان هجومًا يحدد نوعه، مصدره، ومدى تأثيره، ثم يتخذ الإجراء المناسب أو يرفع الحالة إلى مستوى أعلى. حتى تكون مهيأ لهذا الدور، تحتاج أولًا إلى أساس قوي في الشبكات، لأن أغلب الهجمات تعتمد على فهم البروتوكولات مثل TCP/IP وDNS وHTTP، ومعرفة كيف تتواصل الأجهزة مع بعضها. بعد ذلك يجب فهم أنظمة التشغيل، خصوصًا لينكس وويندوز، من ناحية إدارة النظام، الصلاحيات، السجلات، وكيف تظهر الأنشطة غير الطبيعية داخل النظام. بعدها تنتقل إلى أساسيات الأمن السيبراني مثل أنواع الهجمات الشائعة، البرمجيات الخبيثة، التصيد، هجمات حجب الخدمة، وكيف تعمل أدوات الحماية. جزء مهم جدًا في هذا المسار هو التعامل مع أنظمة SIEM مثل Splunk أو ELK، لأنها الأداة الأساسية التي يستخدمها محلل SOC لمتابعة السجلات وتحليل الأحداث الأمنية. كما يفيدك تعلم أساسيات تحليل السجلات، قراءة الـ logs، وربط الأحداث ببعضها لاكتشاف نمط هجوم كامل وليس مجرد حدث منفصل. معرفة بسيطة بالبرمجة أو السكربتات مثل Python أو Bash تعتبر ميزة قوية لكنها ليست شرطًا في البداية. بالنسبة للمستوى الوظيفي، أغلب من يبدأون في هذا المجال يدخلون كـ SOC Analyst Tier 1، وهو مستوى تركيزه على المراقبة والتحليل الأولي. مع الخبرة، يمكن التدرج إلى Tier 2 ثم Tier 3، حيث يصبح الدور أكثر عمقًا في التحليل والاستجابة للحوادث. من حيث التعلم، توجد مصادر قوية جدًا باللغة الإنجليزية. من أفضل القنوات التعليمية على يوتيوب قناة NetworkChuck وقناة John Hammond، فهما يشرحان الأمن السيبراني بشكل عملي ومفهوم. كذلك قناة TryHackMe مفيدة جدًا لأنها تجمع بين الشرح والتطبيق العملي داخل بيئة محاكاة، وهي ممتازة لمن يريد دخول مجال SOC تحديدًا. منصة Blue Team Labs Online أيضًا متخصصة في الجانب الدفاعي وتحليل الحوادث. أما الدورات، فهناك مسارات جيدة على منصات مثل Coursera وUdemy تتحدث عن Cybersecurity Fundamentals وSOC Operations، بالإضافة إلى مسار SOC Analyst الموجود داخل TryHackMe، وهو من أفضل الخيارات للمبتدئين لأنه يربط المفاهيم بالواقع العملي مباشرة.
  4. وعليكم السلام ورحمة الله وبركاته، مساء الخير. يمكنك البدء في تعلّم الباك إند مباشرة دون الحاجة لإتقان الفرونت إند أولًا، لكن من المهم أن يكون لديك فهم عام لما يفعله الفرونت إند وكيف يتواصل مع الخادم. لا يُشترط أن تكون قادرًا على بناء واجهات كاملة، لكن فهم أساسيات مثل HTTP، الطلبات والاستجابات، النماذج، وواجهات API سيساعدك كثيرًا على استيعاب دورك كـ Backend Developer والعمل بسلاسة مع بقية الفريق. الطريق الثابت لاحتراف الباك إند يبدأ بفهم البرمجة نفسها بشكل جيد، أي إتقان لغة واحدة على الأقل ومفاهيم مثل المتغيرات، الشروط، الحلقات، والدوال. بعد ذلك تنتقل لفهم كيفية عمل الويب، مثل بروتوكول HTTP، أنواع الطلبات، الأكواد الخاصة بالاستجابات، والجلسات وملفات الكوكيز. بعدها تأتي خطوة تعلم إطار عمل Backend حقيقي، لأن العمل الفعلي لا يتم باللغات الخام، بل عبر أطر تسهّل بناء التطبيقات وتنظيمها. بالتوازي مع ذلك يجب تعلّم قواعد البيانات، سواء كانت علائقية مثل PostgreSQL وMySQL أو غير علائقية مثل MongoDB، مع فهم جيد لكيفية تصميم الجداول والعلاقات والاستعلامات. بعد هذه المرحلة يصبح من الضروري التعمق في مواضيع الأمان، التحقق من المستخدمين، الصلاحيات، حماية الـ APIs، ثم الانتقال إلى مفاهيم أكثر تقدمًا مثل تحسين الأداء، التخزين المؤقت، واختبار التطبيقات ونشرها على الخوادم. نعم، يمكنك باستخدام لغة بايثون أن تحترف مجال الباك إند بشكل كامل وقوي جدًا. بايثون تُستخدم على نطاق واسع في هذا المجال، ولها أطر عمل قوية مثل Django وFlask وFastAPI. إطار Django مناسب لبناء أنظمة كبيرة بسرعة وبهيكل واضح، بينما Flask وFastAPI أخف وأقرب لفلسفة الـ APIs الحديثة. كثير من الشركات والمشاريع الكبيرة تعتمد على بايثون في الباك إند، لذلك اختيارك لها خيار صحيح ومستقبلي.
  5. أفضل المصادر لتعلم n8n Automation بأسلوب عملي: 1. الموقع الرسمي والـ Docs الموقع الرسمي يملك توثيق مفصل يشرح: تثبيت n8n وتشغيله محليًا الواجهة إنشاء الـ Workflows Nodes وربط الخدمات المختلفة المواضيع فيه منتظمة ومن البداية حتى المتقدم، ويستحق أن تبدأ منه مباشرة. 2. قناة YouTube الرسمية قناة n8n على يوتيوب فيها فيديوهات قصيرة تشرح: الربط مع خدمات مثل Google Sheets، Discord، Slack إنشاء سيناريوهات عملية مقابلات وأمثلة واقعية الفيديوهات مفيدة لأنها تظهر لك الفعل وليس النظرية فقط. 3. قناة n8n على GitHub لو كنت تريد أن ترى: الافكار المتقدمة أمثلة على Workflows مفتوحة ملفات إعداد وأمثلة جاهزة فـ GitHub مفيد جدًا كمصدر تعلم تطبيقي وليس نظري فقط. 4. دورات عمليّة على منصات تعليمية قد لا تجد الكثير من الدورات العربية، لكن هناك دورات جيدة بالإنجليزية على منصات مثل: Udemy Coursera LinkedIn Learning ابحث عن: n8n Automation أو Workflow Automation with n8n الدورات هناك غالبًا تبدأ من الصفر وتشرح: المفاهيم الأساسية الربط مع API تشغيل التقارير التعامل مع الأخطاء 5. مجتمع n8n n8n لها مجتمع نشط في: Discord Reddit منتديات خاصة التواجد هناك مفيد جدًا لأنه يمكنك: طرح الأسئلة مشاركة Workflows رؤية حلول وأفكار الآخرين التعلم من المجتمع أسرع بكثير لأنك ترى تطبيقات واقعية. 6. مصادر تطبيقية ومشاريع جاهزة يوجد مواقع مثل: n8n.io/workflows StackOverflow يمكنك أن تأخذ Workflows جاهزة وتفككها لتعرف لماذا وكيف تعمل. هذا مهم جدًا لأن n8n تعتمد على: المنطق الربط بين الأحداث تحويل البيانات وهذه المهارات تُكتسب فقط بالتطبيق العملي. أفضل طريقة لتعلم n8n عمليًا ابدأ بمشروع صغير جدًا مثلاً: ربط Google Sheets مع Discord بحيث عند إضافة سطر جديد في الـ Sheet يُرسل رسالة في القناة. ثبّت n8n محليًا واعمل Demo بسيط. ابدأ بإضافة Node بعد Node وتعلم كيف تنتقل البيانات من خطوة لأخرى. جرّب سيناريوهات حقيقية مثل: إشعارات عند وصول طلب دمج CRM مع البريد A/B testing للـ Workflows راجع الأخطاء وكرر التعلم التكرار هنا يصنع الفهم الحقيقي.
  6. السبب الأساسي للنسيان هنا ليس أنك “لم تفهم”، بل لأن مسار الـ LLM يعتمد على مفاهيم مترابطة لا تترسخ بالحفظ أو بالمشاهدة فقط، بل بالاستخدام المتكرر في سياق حقيقي. لذلك إعادة الدراسة دون تطبيق عملي غالبًا تعطيك إحساسًا زائفًا بالفهم ثم يتبخر سريعًا. سؤالك: هل تدخل المسار التالي أم لا؟ الإجابة المختصرة: نعم، ادخل المسار التالي، ولكن بطريقة مختلفة عمّا فعلته سابقًا. ما الذي أنصحك به عمليًا؟ لا تعِد دراسة المسار كاملًا مرة ثالثة. هذا غالبًا لن يغيّر النتيجة. بدل ذلك: أولًا، حدّد ما المطلوب منك فعليًا من مسار الـ LLM أنت لا تحتاج أن تتذكر كل التفاصيل النظرية. المطلوب عادة أن تكون قادرًا على: فهم الفكرة العامة للنماذج اللغوية وكيف تعمل استخدام API لنموذج لغوي بناء تطبيق بسيط يعتمد على LLM فهم مفاهيم مثل prompt، context، embeddings، وRAG بشكل عملي إن كنت تستطيع تنفيذ هذه الأشياء بالرجوع للمراجع، فأنت بخير حتى لو “نسيت” التفاصيل. ثانيًا، طبّق فورًا أثناء الانتقال للمسار التالي وأنت في المسار القادم: ابنِ مشروعًا صغيرًا جدًا باستخدام LLM حتى لو كان: بوت أسئلة وأجوبة تلخيص ملفات مساعد بسيط لبياناتك كلما احتجت فكرة نسيتها، ارجع لها فقط في تلك اللحظة بهذه الطريقة تتحول المعلومة من “ذاكرة مؤقتة” إلى مهارة. ثالثًا، اعتمد على المراجعة الذكية لا الحفظ لا تحاول أن تتذكر كل شيء من رأسك. الطريقة الصحيحة هي: أن تعرف أين تجد المعلومة وأن تفهم متى ولماذا تستخدمها حتى المحترفون يرجعون للتوثيق باستمرار، وهذا طبيعي. رابعًا، تقبّل أن النسيان جزء من التعلم خصوصًا في الذكاء الاصطناعي، التعلّم تراكمي. اليوم لا ترى الصورة كاملة، بعد 3 أو 4 مشاريع، ستتفاجأ أن الأمور “ثبتت” وحدها دون حفظ متعمد.
  7. وعليكم السلام ورحمة الله وبركاته من الصورة يظهر أن المشكلة ليست في XAMPP نفسه، بل في Apache تحديدًا. الخطأ الأساسي هو: Port 80 in use Apache WILL NOT start without the configured ports free أي أن المنفذ 80 مستخدم من برنامج آخر، لذلك Apache يفشل في التشغيل. سبب المشكلة غالبًا أحد الأمور التالية: وجود برنامج آخر يعمل على المنفذ 80 مثل: IIS (خدمة الويب الخاصة بويندوز) Skype VMware Docker أي سيرفر محلي آخر أو أن Apache يعمل مسبقًا في الخلفية أو أن الخدمة محجوزة من النظام الحل الأول (الأسهل): تغيير منفذ Apache افتح XAMPP اضغط Config بجانب Apache اختر Apache (httpd.conf) ابحث عن السطر: Listen 80 وغيّره إلى: Listen 8080 ثم ابحث عن: ServerName localhost:80 وغيّره إلى: ServerName localhost:8080 احفظ الملف وأعد تشغيل XAMPP ثم شغّل Apache بعدها افتح المتصفح واكتب: http://localhost:8080 الحل الثاني: إيقاف البرنامج الذي يستخدم المنفذ 80 اضغط Win + R اكتب services.msc ابحث عن: World Wide Web Publishing Service إن وجدته، أوقفه واجعل Startup type = Disabled أعد تشغيل XAMPP وجرب تشغيل Apache. الحل الثالث: معرفة من يستخدم المنفذ افتح CMD كمسؤول واكتب: netstat -ano | findstr :80 سيظهر رقم PID بعدها افتح Task Manager وابحث عن نفس PID لمعرفة البرنامج.
  8. يمكنك الحصول على Redis بشكل عالمي ومجاني (أو بخطة مجانية قوية) من عدة منصات موثوقة، وهذه أشهرها للمبتدئين: أولًا: Redis Cloud (الرسمي) تقدمه شركة Redis نفسها. يوفر خطة مجانية بحجم صغير مناسبة للتجربة والتعلم، مع اتصال عالمي ومستقر. مميز لأنه رسمي، لكن السعة محدودة. ثانيًا: Upstash من أفضل الخيارات حاليًا. يوفر Redis عالمي (Serverless) مع خطة مجانية جيدة جدًا. سهل الربط مع Web و Node.js و Python و Cloud Functions. مناسب للمشاريع الصغيرة وReal-Time. ثالثًا: Railway يمكنك تشغيل Redis بنقرة واحدة. الخطة المجانية تعتمد على الرصيد الشهري، وغالبًا تكفي للتجارب. جيد إذا كنت تستخدم Railway لبقية المشروع. رابعًا: Render يدعم Redis ضمن خدماته. الخطة المجانية محدودة لكنها كافية للتعلم. مناسب إذا كنت تستضيف الـ Backend على Render. خامسًا: تشغيل Redis محليًا (للتعلم فقط) على جهازك باستخدام Docker أو WSL. ليس عالميًا، لكنه ممتاز للتجارب والتطوير. ملاحظة مهمة: لا يوجد Redis “غير محدود 100% مجاني” للإنتاج الحقيقي، لكن Upstash هو الأقرب لفكرة المجاني العالمي للمبتدئين والمشاريع الصغيرة.
  9. وعليكم السلام ورحمة الله وبركاته، سؤالك مهم جداً، لأن اختيار المسار الصحيح في البداية يوفّر عليك وقتاً وجهداً كبيرين. نعم، هناك وظائف تقنية أخرى مناسبة للمبتدئين غير Web Developer و SOC Analyst Tier 1، وبعضها أسهل دخولاً وأسرع من حيث فرص العمل. من أفضل الخيارات للمبتدئين حالياً: Web Developer (Front-end أو Back-end أو Full-stack) من أكثر المسارات طلباً. يمكن البدء بـ HTML و CSS و JavaScript ثم إطار عمل واحد مثل React أو Laravel. مناسب للعمل الحر والوظائف التقليدية. SOC Analyst Tier 1 مناسب لمن يميل للأمن السيبراني. لا يحتاج برمجة قوية في البداية، بل فهم الشبكات، أنظمة التشغيل، SIEM، ومفاهيم الهجمات. غالباً متاح للمبتدئين في الشركات الكبيرة. IT Support / Help Desk مدخل ممتاز للمجال التقني. يعلّمك أنظمة التشغيل، الشبكات، حل المشاكل، والتعامل مع المستخدمين. كثير من المحترفين بدأوا منه ثم انتقلوا لمسارات أقوى. QA / Software Tester اختبار البرمجيات يركز على التفكير المنطقي وتحليل السلوك وليس البرمجة العميقة في البداية. يمكن البدء بالاختبار اليدوي ثم الانتقال إلى Automation لاحقاً. Junior Data Analyst مناسب لمن يحب الأرقام. يتطلب Excel، SQL، وأساسيات Python أو Power BI. أسهل من الذكاء الاصطناعي وأسرع دخولاً لسوق العمل. No-Code / Low-Code Developer مثل استخدام أدوات Bubble، Webflow، n8n، Zapier. مطلوب حالياً في الشركات الصغيرة والناشئة، ولا يحتاج برمجة عميقة. Cloud Support Associate مبتدئ في مجال السحابة (AWS / Azure / GCP). يركز على الإعدادات، المراقبة، والدعم الفني، وليس التصميم المعقد. WordPress Developer ليس مجرد تركيب قوالب فقط، بل تخصيص مواقع، متاجر، وتحسين الأداء. مناسب للعمل الحر والدخول السريع للسوق. نصيحة مهمة: اختر المسار بناءً على ميولك، وليس فقط على “ما هو الرائج”. لو تحب البرمجة اختر Web أو Back-end، لو تحب التحليل اختر Data أو SOC، ولو تحب الحلول السريعة اختر No-Code أو QA.
  10. إذا أردت مشاريع أقل تعقيدًا من Social Media Developers Hub ولكن ما زالت تحدّي حقيقي وتعمل بالزمن الحقيقي (Real-Time) فهذه أمثلة مناسبة جدًا للتدرّب وبناء خبرة فعلية، دون أن تكون سطحية أو “لعب أطفال”: أولًا: نظام دردشة بسيط لغرفة واحدة تطبيق محادثة حيّة (Chat Room) يسمح لعدة مستخدمين بالدخول والتحدث في نفس الغرفة. ستتدرّب فيه على: التعامل مع WebSocket أو Firebase Realtime / Firestore إدارة المستخدمين المتصلين تحديث الواجهة فورًا بدون إعادة تحميل التعامل مع الرسائل والوقت (timestamps) هذا المشروع أساس ممتاز قبل أي منصة اجتماعية كبيرة. ثانيًا: نظام تتبع الطلبات (Order Tracking System) مثل نظام مطعم أو توصيل. المستخدم يطلب، والإدارة تغيّر حالة الطلب، والمستخدم يرى التحديث لحظيًا. تحدّيه الحقيقي: Real-time updates لحالة الطلب فصل الصلاحيات (مستخدم / مشرف) لوحة تحكم بسيطة هذا قريب جدًا من تطبيقات حقيقية في السوق. ثالثًا: لوحة إعلانات حيّة (Live Notice Board) تطبيق يسمح بنشر إعلانات أو تنبيهات تظهر فورًا لجميع المستخدمين. تتعلّم فيه: Real-time broadcasting إدارة المحتوى تحديث الواجهة لجميع المستخدمين بنفس اللحظة مفيد جدًا لفهم كيف تعمل الأنظمة الجماعية. رابعًا: نظام حجز مواعيد مع تحديث لحظي مثل حجز طبيب أو صالون. المواعيد المحجوزة تختفي فورًا من باقي المستخدمين. التحدي هنا: منع التعارض (Race Conditions) التحديث الفوري التعامل مع الوقت والتاريخ هذا مشروع قوي ومحبوب في المقابلات. خامسًا: نظام أسئلة وأجوبة مباشر (Mini Q&A Platform) المستخدم يطرح سؤال، الآخرون يجيبون، والتصويت يحدث لحظيًا. ستتدرّب على: Real-time voting ترتيب المحتوى ديناميكيًا التعامل مع البيانات المتغيرة باستمرار نسخة مصغّرة جدًا من StackOverflow. سادسًا: لوحة مهام جماعية (Real-Time Task Board) مثل Trello لكن بشكل مبسّط. عدة مستخدمين يضيفون ويعدّلون المهام وتظهر التغييرات فورًا. تحدياته: التزامن إدارة الحالة التعامل مع تعدد المستخدمين مشروع ممتاز لفهم التطبيقات التعاونية. لماذا هذه المشاريع أفضل لك الآن؟ لأنها: أصغر من منصة اجتماعية كاملة لكن تحتوي مشاكل حقيقية من الواقع وتجعلك تفهم Real-Time بعمق وتبني عقلية مهندس وليس مجرد كاتب كود
  11. استعمال Bootstrap أو أي إطار عمل آخر لا يُضعف مستوى المبرمج بحد ذاته، لكن طريقة الاستعمال هي التي قد تؤثر سلبًا أو إيجابًا. إطارات العمل وُجدت لتسريع العمل، وتنظيم الواجهات، وتوحيد الأسلوب، خاصة في المشاريع الحقيقية التي يُهم فيها الوقت والجودة أكثر من إعادة اختراع كل شيء من الصفر. المبرمج المحترف في الواقع العملي يستخدم الأطر باستمرار، ولا يُنظر إلى ذلك على أنه ضعف أبدًا. المشكلة تظهر فقط في حالة واحدة، وهي أن يعتمد المتعلم على الإطار دون أن يفهم الأساسيات التي يقوم عليها. فإذا كان الشخص لا يفهم كيف يعمل flexbox أو grid، ولا يعرف أساسيات CSS مثل box model أو positioning، ثم يستخدم Bootstrap فقط عن طريق نسخ الأصناف الجاهزة، هنا فعلاً سيتكوّن اعتماد زائد، وسيشعر بالعجز عند العمل بدون إطار. أما إذا تعلم الأساسيات أولًا، وفهم HTML وCSS جيدًا، ثم استخدم Bootstrap كأداة لتوفير الوقت، فلن يفقد قدرته أبدًا على كتابة كود يدويًا. بل العكس، سيصبح قادرًا على تخصيص الإطار، وتعديل سلوكه، بل وحتى الاستغناء عنه عند الحاجة. بمعنى آخر، Bootstrap لا يُعلّمك، لكنه أيضًا لا يمنعك من التعلّم. أنت من يحدد كيف تستخدمه. من العلامات الجيدة أنك ما زلت على المسار الصحيح: أن تستطيع بناء صفحة بسيطة بدون أي إطار. أن تفهم ماذا يفعل كل class تستخدمه، ولو بشكل عام. أن تعرف كيف تحقق نفس النتيجة بـ CSS خام حتى لو لم تفعلها دائمًا. وفي الحياة العملية، كثير من المطورين الأكفاء جدًا يستخدمون Bootstrap أو Tailwind أو غيرها يوميًا، ومع ذلك يستطيعون كتابة كود نظيف بدون أي إطار عند الحاجة.
  12. وعليكم السلام ورحمة الله وبركاته، قبل الدخول في تعلّم الذكاء الاصطناعي، من المهم أن تكون لديك قاعدة رياضية متينة، لأن معظم خوارزميات الذكاء الاصطناعي وتعلّم الآلة مبنية أساسًا على مفاهيم رياضية واضحة. لا يشترط أن تكون خبيرًا رياضيًا، لكن الفهم الجيد أهم بكثير من الحفظ. أول ما يجب التركيز عليه هو الجبر. تحتاج إلى فهم المتغيرات والمعادلات، حل المعادلات الخطية، التعامل مع الدوال، وفهم فكرة المتجهات والمصفوفات بشكل مبدئي. هذه المفاهيم تُستخدم مباشرة في تمثيل البيانات وفي كيفية تعلّم النماذج من القيم الرقمية. بعد ذلك تأتي المصفوفات والجبر الخطي، وهو من أهم الأساسيات في الذكاء الاصطناعي. يجب أن تفهم ما هي المصفوفة، كيفية جمعها وضربها، معنى المتجه، والفرق بين الضرب العادي والضرب المصفوفي. كذلك من المهم فهم مفهوم التحويلات الخطية، لأن الشبكات العصبية في جوهرها عمليات جبر خطي متتالية. ثالثًا، التفاضل والتكامل، وبالأخص التفاضل. لا تحتاج إلى الغوص العميق في التكامل المعقّد، لكن يجب أن تفهم معنى المشتقة، ولماذا تُستخدم، وكيف تساعد في معرفة اتجاه التغيّر. هذا المفهوم هو الأساس في خوارزميات التدريب مثل الانحدار التدريجي، حيث يتم تحسين النموذج خطوة بخطوة. رابعًا، الاحتمالات والإحصاء. هذا الجزء مهم لفهم كيفية التعامل مع البيانات وعدم اليقين. يجب أن تفهم معنى الاحتمال، التوزيعات الاحتمالية، المتوسط الحسابي، الوسيط، الانحراف المعياري، والتباين. هذه المفاهيم تُستخدم في تحليل البيانات، تقييم النماذج، وفهم نتائج التنبؤ. خامسًا، أساسيات التحليل العددي والمنطق الرياضي بشكل عام. مثل فهم التقريب، الأخطاء العددية، ولماذا لا تكون النتائج دائمًا دقيقة بنسبة مئة بالمئة. هذا يساعدك على فهم سلوك النماذج في الواقع العملي. لو أردنا تحويل ذلك إلى مسار تعلّم عملي، فيمكنك البدء بالجبر الأساسي، ثم الجبر الخطي، بعدها التفاضل، ثم الاحتمالات والإحصاء، وكل ذلك مع تطبيقات بسيطة باستخدام البرمجة، وخصوصًا بلغة بايثون، لأن التطبيق العملي يرسّخ المفاهيم أكثر من الدراسة النظرية وحدها.
  13. اولًا يجب أن تفهم طبيعة العمل أنت لا تكتب بيانات جاهزة فقط، بل ستقوم بجرد فعلي للمتجر. هذا يعني أنك ستتعامل مع عدد كبير من الأصناف، وستحسب الكميات، وتدوّن الأسعار، وربما تصحّح أخطاء أو تسأل عن منتجات متشابهة. هذا عمل يتطلب وقتًا وتركيزًا ومسؤولية. ثانيًا ما الذي يحدد السعر؟ السعر لا يُحسب هكذا مباشرة، بل يعتمد على عدة أمور، أهمها عدد المنتجات، حجم المتجر، هل الأسعار واضحة أم تحتاج سؤال صاحب المتجر، وهل ستعمل في مكان المتجر أم ستأخذ البيانات وتعمل عليها لاحقًا. لكن أبسط طريقة عادلة للتسعير هي الاعتماد على الوقت، لأنك لا تعرف مسبقًا كم صنف بالضبط. ثالثًا تسعير تقريبي عملي في العادة، إدخال بيانات منتج واحد في إكسل مع الكمية والسعر قد يأخذ من نصف دقيقة إلى دقيقة إذا كان كل شيء واضحًا. لو افترضنا أن المتجر فيه 500 منتج، فهذا يعني من 6 إلى 8 ساعات عمل تقريبًا، وربما أكثر إذا كان العمل مرهقًا. تسعير منطقي في هذه الحالة يكون بالأجر اليومي أو بالساعة، وليس بالمشروع ككل. كم تطلب؟ إن كنت في بلد عربي، فطلب أجر يوم عمل كامل يتراوح عادة بين 20 إلى 40 دولارًا حسب بلدك ومستوى الخبرة. إن حسبتها بالساعة، فبين 3 إلى 7 دولارات للساعة يعد رقمًا مقبولًا لهذا النوع من العمل. لو كان المتجر كبيرًا جدًا (ألف صنف أو أكثر)، من حقك أن تطلب أكثر أو تقسّم العمل على أيام. رابعًا كيف تتفق معه بذكاء؟ قبل أن تبدأ، قل له بوضوح إن السعر يعتمد على عدد الأصناف والوقت، واقترح أحد حلّين: إما أجر بالساعة أو أجر يومي محدد ولا تبدأ العمل قبل الاتفاق حتى لا تجد نفسك تعمل ساعات طويلة بأجر قليل. خامسًا نصيحة مهمة لا تُقلّل من قيمة عملك، فصاحب المتجر سيبني قراراته التجارية لاحقًا على هذه البيانات، وهي أساس إدارة المخزون والمحاسبة. عملك ليس مجرد كتابة، بل تنظيم معلومات مهمة.
  14. وعليكم السلام ورحمة الله وبركاته فكرة التطبيق ممتازة ومناسبة جدًا لطبيعة الخدمات المحلية، ووجود غرف دردشة لكل قرية سيزيد التفاعل ويجعل التطبيق حيًّا فعليًا. بما أنك تستخدم Firebase فاختيارك موفق، لأنه مناسب جدًا لهذا النوع من التطبيقات. سأشرح لك الفكرة بشكل متكامل من ناحية التصميم، قاعدة البيانات، وآلية العمل، دون الدخول في تعقيد غير ضروري. أولًا: الفكرة العامة للنظام أنت لا تحتاج إلى “غرفة دردشة” بالمعنى المعقد، بل نظام رسائل بسيط مرتبط بكل قرية. كل قرية يكون لها Chat خاص بها، وأي مستخدم يدخل القرية يستطيع القراءة والكتابة ضمن هذا الشات حسب الصلاحيات. ثانيًا: أي خدمة من Firebase تختار؟ Firebase يوفر حلّين مناسبين: Cloud Firestore و Realtime Database للتطبيقات التي تعتمد على الدردشة، Realtime Database أبسط وأسرع في التنفيذ، بينما Firestore أنظم وأفضل للتوسع مستقبلاً. إن كنت في البداية، أنصحك بـ Firestore لأنه أكثر مرونة وأسهل في التحكم بالصلاحيات. ثالثًا: تصميم قاعدة البيانات (Firestore) فكرة التصميم تكون هكذا منطقيًا: collection اسمها villages داخلها documents تمثل القرى كل document يحتوي معلومات القرية (الاسم، المعرف، إلخ) داخل كل قرية، collection اسمها chatMessages كل رسالة تكون document مستقل محتوى الرسالة عادة يكون: معرّف المستخدم اسم المستخدم نص الرسالة تاريخ الإرسال (Timestamp) اختياري: نوع الرسالة (نص، صورة لاحقًا) بهذا الشكل، كل قرية لها سجل دردشة منفصل وواضح. رابعًا: ربط المستخدمين بالدردشة أي مستخدم مسجّل دخول (باستخدام Firebase Authentication) يستطيع: الدخول إلى صفحة القرية تحميل آخر الرسائل إرسال رسالة جديدة من المهم أن تعتمد دائمًا على userId القادم من Firebase Auth، ولا تسمح للمستخدم بتمرير اسمه أو هويته يدويًا حتى لا يتم التلاعب. خامسًا: عرض الرسائل في الواجهة تستخدم Listener من Firestore للاستماع للتغييرات اللحظية. عند إضافة رسالة جديدة: تظهر فورًا لكل المستخدمين داخل نفس القرية دون تحديث الصفحة. تقوم بترتيب الرسائل حسب التاريخ من الأقدم إلى الأحدث، أو العكس حسب التصميم الذي تريده. سادسًا: الحماية ومنع الفوضى هذه نقطة مهمة جدًا. يجب ضبط Firebase Security Rules بحيث: لا يسمح بالقراءة والكتابة إلا للمستخدمين المسجلين لا يسمح بتعديل أو حذف الرسائل يسمح فقط بإضافة رسالة جديدة يتم التحقق أن userId في الرسالة يساوي المستخدم الحالي بهذا تحمي النظام من التخريب أو التلاعب. سابعًا: التبليغ والإشراف بما أن الشات مفتوح للعامة، من الأفضل: إضافة زر “إبلاغ عن رسالة” تخزين البلاغات في collection منفصل أو على الأقل تسجيل الرسائل المسيئة لمراجعتها لاحقًا ويمكنك لاحقًا إضافة مشرف لكل قرية. ثامنًا: الأداء وعدد الرسائل حتى لا يبطئ التطبيق: لا تحمل كل الرسائل دفعة واحدة حمّل آخر 50 أو 100 رسالة فقط وعند التمرير للأعلى، حمّل رسائل أقدم Firebase يدعم هذا الأسلوب بسهولة. تاسعًا: التوسّع مستقبلاً بعد نجاح النظام، يمكنك إضافة: إرسال صور رد على رسالة إشعارات عند وصول رسالة جديدة غرف دردشة حسب نوع الخدمة (نقل، كهرباء، مياه، إلخ) لكن في البداية ركّز على النص فقط.
  15. وعليكم السلام ورحمة الله وبركاته، مساء النور. عدم ظهور خيار Auto Save في قائمة File لا يعني وجود مشكلة لديك بالضرورة، وغالبًا لا يتعلق بخلل في برنامج VS Code. في بعض الإصدارات أو حسب اللغة المختارة للواجهة، قد لا يظهر خيار الحفظ التلقائي بشكل واضح داخل قائمة File، لكنه يكون موجودًا ويمكن التحكم به من الإعدادات مباشرة. يمكنك التأكد من تفعيل الحفظ التلقائي بطريقتين بسيطتين: الأولى عبر الإعدادات، حيث تفتح Settings ثم تكتب في خانة البحث Auto Save، وستجد خيارًا باسم Files: Auto Save، ومن هناك تستطيع تفعيله واختيار متى يتم الحفظ، مثل عند فقدان التركيز أو بعد تأخير زمني بسيط. الطريقة الثانية باستخدام لوحة الأوامر، وذلك بالضغط على Ctrl + Shift + P ثم كتابة Auto Save، وستظهر لك أوامر تفعيل أو تعطيل الحفظ التلقائي مباشرة. أما بخصوص التحديث، فليس من الضروري أن يكون السبب هو إصدار قديم، لأن ميزة Auto Save موجودة منذ فترة طويلة في VS Code. لكن يفضل دائمًا استخدام إصدار حديث لتفادي أي اختلافات في الواجهة أو الإعدادات. باختصار، الميزة موجودة لديك على الأغلب، لكنها مخفية داخل الإعدادات أو لوحة الأوامر وليست مشكلة تحديث.
  16. ما قمتَ به في الصورة صحيح من حيث المبدأ، وطريقتك في التفكير سليمة تمامًا. عند كتابة: name = "Mohamad Amin" فقد قمتَ بتخزين نص (سلسلة نصية) داخل متغير. عند استخدام: name[0] فهذا يعني الوصول إلى أول حرف في السلسلة، وهو الحرف M. لكن يجب كتابة القوس بالشكل الصحيح [ ]، لأن استخدام } يؤدي إلى خطأ نحوي (SyntaxError)، وهذا ما حدث لديك في أحد الأسطر. عند كتابة: name[-3] فأنت تطلب من بايثون إرجاع ثالث حرف من نهاية الكلمة، وكانت النتيجة صحيحة. أما بخصوص تغيير حرف أو جزء من الكلمة، فهنا نقطة مهمة: السلاسل النصية في بايثون غير قابلة للتعديل مباشرة، أي لا يمكنك تغيير حرف داخل النص نفسه. لذلك الحل الصحيح هو إنشاء نص جديد باستخدام القص (slicing). عندما كتبت: name[:-3] فهذا يعني: خذ النص من البداية وحتى قبل آخر ثلاثة أحرف. وعند دمجها مع: name[:-3] + "min" فأنت أنشأت سلسلة جديدة، وكانت النتيجة: "Mohamad Armin" وهذا هو الأسلوب الصحيح لتغيير جزء من الكلمة في بايثون.
  17. بشكل عام، الفرق بين هذه الرموز مرتبط بالغرض البرمجي منها وليس بشكلها. الأقواس الدائرية () تُستخدم غالبًا عند استدعاء الدوال أو تعريفها، وكذلك في الشروط والعمليات الحسابية لتحديد أولوية التنفيذ. عندما ترى أقواسًا دائرية فهذا يعني عادةً “نفّذ شيئًا” أو “قيّم تعبيرًا”. مثلًا عند استدعاء دالة، أو عند كتابة شرط if، أو عند تجميع عملية حسابية. الأقواس المربعة [] تُستخدم غالبًا مع البيانات المتسلسلة. ستجدها عند التعامل مع المصفوفات أو القوائم أو عند الوصول إلى عنصر معيّن باستخدام الفهرس. في بعض اللغات تُستخدم أيضًا لتعريف مصفوفة أو للوصول إلى قيمة داخل كائن باستخدام مفتاح. وجودها غالبًا يدل على “عنصر داخل مجموعة”. الأقواس المعقوفة {} لها استخدامات أوسع وتختلف قليلًا حسب اللغة، لكنها غالبًا تعبّر عن كتلة من الكود أو بنية بيانات. تُستخدم لتعريف جسم الدالة أو الشرط أو الحلقة، وتُستخدم أيضًا لتعريف الكائنات أو القواميس. عندما ترى {} فهذا يعني أنك أمام مجموعة تعليمات أو مجموعة قيم مرتبطة ببعضها. الفكرة الأساسية التي تساعدك على التمييز هي أن: () مرتبطة بالتنفيذ والتقييم [] مرتبطة بالوصول إلى عناصر {} مرتبطة ببنية أو كتلة أو تجميع منطقي مع الوقت وكثرة التطبيق سيصبح استخدام هذه الرموز بديهيًا ولن تحتاج للتفكير فيها. ملاحظة: لو كان السؤال متعلقًا بمحتوى درس معيّن أو كود داخل دورة، فنحن لا نجيب عليه هنا بهذه الطريقة. في هذه الحالة ستجد أسفل فيديو الدرس صندوق التعليقات كما هنا، ويُرجى طرح سؤالك أسفل الدرس نفسه، وليس في قسم الأسئلة العامة، وذلك حتى نعرف الدرس الذي توجد به مشكلتك ونستطيع مساعدتك بدقة
  18. فكرتك منطقية جدًا، ولا أحد يعيد كتابة هذا العدد من الأسئلة يدويًا إذا كان هناك حل عملي. الطريقة المثلى في حالتك تعتمد على خطوة أساسية وهي تحويل الصور إلى نص أولًا، ثم تنظيم هذا النص وتحويله إلى JSON. لا توجد طريقة مباشرة تقفز من صورة إلى JSON بدون المرور بمرحلة استخراج النص. أول ما تحتاجه هو استخدام تقنية OCR، وهي المسؤولة عن قراءة النص الموجود داخل الصور. هذه التقنية تقوم بتحويل الصورة إلى نص عادي يمكنك التعامل معه برمجيًا. جودة النتيجة تعتمد كثيرًا على وضوح الصور، نوع الخط، وهل النص عربي أم إنجليزي. إذا كانت الصور واضحة والأسئلة مكتوبة بخط مطبوع فالناتج غالبًا سيكون جيدًا. بعد أن تحصل على النص، ستجد أن الأسئلة والأجوبة أصبحت مجرد نص متتابع. هنا يأتي دورك في تنظيمه. غالبًا الأسئلة تكون بنمط متكرر مثل: سؤال ثم عدة اختيارات أو إجابة صحيحة. يمكنك كتابة سكربت بسيط بلغة مثل Python يقرأ النص ويقسمه بناءً على هذا النمط، ثم يحوله إلى كائنات JSON تحتوي على السؤال، الاختيارات، والإجابة الصحيحة. مثلًا، كل سؤال يصبح عنصرًا واحدًا داخل مصفوفة، وداخله نص السؤال، قائمة الإجابات، وتحديد الإجابة الصحيحة. هذه المرحلة تحتاج بعض التعديل اليدوي في البداية، لكن بعد ضبط القواعد، يمكن معالجة مئات الأسئلة دفعة واحدة. لو أردت تقليل الجهد أكثر، يمكنك استخدام أدوات OCR تدعم العربية بشكل جيد، ثم تمرير النص الناتج إلى سكربت يعيد ترتيبه. بعض الناس يراجعون النتائج سريعًا بعد التحويل بدل الكتابة من الصفر، وهذا يوفر وقتًا كبيرًا. الخلاصة أن الحل الأفضل ليس تحويل الصور مباشرة إلى JSON، بل بناء مسار منطقي: صورة ثم نص، ثم تنظيم النص، ثم JSON. في البداية ستأخذ منك بعض الوقت لضبط العملية، لكن بعد ذلك ستوفر عليك ساعات طويلة من العمل اليدوي.
  19. وعليكم السلام ورحمة الله استضافة dzsecurity هي استضافة تقليدية (Shared Hosting)، وهذا النوع من الاستضافات لا يشغّل React مباشرة لأنه لا يدعم Node.js لتشغيل السيرفر، لكن يمكن رفع موقع React عليها بعد تحويله إلى ملفات ثابتة. الفكرة ببساطة أن React أثناء التطوير يعمل كسيرفر، أما عند النشر فنحن لا نرفع المشروع كاملًا، بل نرفع الناتج النهائي فقط. أول خطوة على جهازك هي بناء نسخة الإنتاج من المشروع. تدخل إلى مجلد مشروع React وتنفّذ أمر البناء. هذا الأمر يقوم بتحويل المشروع إلى HTML وCSS وJavaScript جاهزة للتشغيل على أي استضافة عادية. بعد الانتهاء سيظهر لديك مجلد جديد غالبًا اسمه build أو dist حسب الأداة المستخدمة. بعد ذلك تدخل إلى لوحة التحكم في استضافة dzsecurity، وغالبًا ستكون cPanel. من هناك تفتح مدير الملفات وتدخل إلى مجلد public_html، لأن هذا هو المجلد الذي تُعرض منه الملفات على المتصفح. إذا كان داخله ملفات قديمة يمكنك حذفها أو نقلها. الآن تقوم برفع محتويات مجلد build نفسه إلى داخل public_html، وليس المجلد كاملًا. المهم أن يكون ملف index.html موجودًا مباشرة داخل public_html. بعد رفع الملفات، افتح موقعك من المتصفح. في أغلب الحالات سيعمل مباشرة. إذا وجدت أن التنقل بين الصفحات لا يعمل ويظهر لك خطأ 404 عند تحديث الصفحة، فهذا بسبب أن React يعتمد على routing داخلي، والاستضافة لا تعرف ذلك. لحل هذه المشكلة تحتاج إلى إضافة ملف بسيط اسمه .htaccess داخل public_html. هذا الملف يخبر السيرفر أن أي رابط غير معروف يجب أن يعود إلى index.html، وبهذا يعمل الموقع بشكل طبيعي. أيضًا انتبه قبل البناء أن تضبط المسار الصحيح للموقع. إذا كان الموقع على الدومين الرئيسي فالأمر طبيعي، أما إذا كان داخل مجلد فرعي فيجب تعديل إعدادات React قبل البناء حتى لا تتكسر المسارات. باختصار، React لا يُرفع ككود تشغيل، بل يُرفع كناتج جاهز. طالما حصلت على ملفات HTML وJS النهائية، فهذه الاستضافة كافية تمامًا. إذا أردت لاحقًا موقع React مع Backend أو API، فستحتاج إما إلى استضافة تدعم Node.js أو فصل الواجهة الأمامية عن الخلفية كل واحد على استضافة مختلفة.
  20. العملية تتكون من 3 خطوات رئيسية داخل ملف الـ HTML الأساسي (الذي يحتوي على وسم <head>): 1. تعديل وسم الصفحة (HTML Tag) أول سطر في ملف القالب يجب أن يخبر المتصفح أن الاتجاه من اليمين لليسار. ابحث عن: <html lang="en"> واستبدله بـ: <html lang="ar" dir="rtl"> 2. استبدال ملفات CSS (الخطوة الأهم) في AdminLTE، لا يكفي مجرد تغيير الاتجاه، بل يجب استدعاء ملفات التصميم المخصصة للعربية. داخل وسم <head>، احذف أو عطل الروابط الخاصة بـ adminlte.min.css العادي، وضع بدلاً منها الروابط التالية بالترتيب: <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Cairo:400,600&display=swap"> <link rel="stylesheet" href="{% static 'plugins/fontawesome-free/css/all.min.css' %}"> <link rel="stylesheet" href="https://cdn.rtlcss.com/bootstrap/v4.2.1/css/bootstrap.min.css"> <link rel="stylesheet" href="{% static 'dist/css/adminlte.rtl.min.css' %}"> ملاحظة: إذا لم تجد ملف adminlte.rtl.min.css في مجلدات مشروعك، يمكنك استخدام رابط الـ CDN المباشر مؤقتاً للتجربة: <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/admin-lte@3.1/dist/css/adminlte.rtl.min.css"> 3. ضبط الخط (Font) لجعل النصوص تظهر بخط "القاهرة" (Cairo) الذي أضفناه، أضف هذا التنسيق البسيط في الـ <head> أو في ملف الـ CSS الخاص بك: <style> body, h1, h2, h3, h4, h5, h6, .btn, .sidebar { font-family: 'Cairo', sans-serif !important; } </style> ملخص التغييرات في ملف base.html: بعد التعديل، يجب أن يبدو الجزء العلوي من ملفك بهذا الشكل تقريباً: {% load static %} <!DOCTYPE html> <html lang="ar" dir="rtl"> <head> <meta charset="utf-8"> <title>لوحة التحكم</title> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Cairo:400,600&display=swap"> <link rel="stylesheet" href="https://cdn.rtlcss.com/bootstrap/v4.2.1/css/bootstrap.min.css"> <link rel="stylesheet" href="{% static 'dist/css/adminlte.rtl.min.css' %}"> <style> body { font-family: 'Cairo', sans-serif !important; } </style> </head> <body class="hold-transition sidebar-mini"> ... طبق هذه الخطوات واعمل Refresh للصفحة (يفضل مسح الكاش بـ Ctrl + F5)، وستجد القائمة الجانبية انتقلت لليمين والنصوص تظهر بشكل عربي سليم.
  21. المشكلة التي تواجهها طبيعية جداً وتحدث معنا جميعاً عند الانتقال من بيئة التطوير (Development) إلى الإنتاج (Production) أو عند تجربة DEBUG = False. الخطأ (500) يعني أن "الكود الخاص بصفحة 404 نفسه فيه مشكلة" أو أن جانغو لا يستطيع الوصول إليه بشكل صحيح. إليك الحل من واقع خبرتي في هذه النقطة تحديداً: 1. مكان handler404 (السبب الأرجح) أنت ذكرت أنك وضعت الكود في main_app/urls.py. جانغو يبحث عن handler404 في ملف urls.py الرئيسي للمشروع (Project Level) وليس داخل التطبيقات الفرعية (App Level). الملف الذي يحتوي عادةً على path('admin/', admin.site.urls). الحل: انقل سطر handler404 = 'main_app.views.error404' إلى ملف urls.py الرئيسي للمشروع. 2. مشكلة الملفات الثابتة (Static Files) عندما تضبط DEBUG = False، جانغو يتوقف فوراً عن تقديم الملفات الثابتة (CSS, JS, Images). هو مصمم هكذا لأنه يفترض أنك الآن تستخدم خادم مثل Nginx أو Apache للقيام بهذه المهمة. لهذا السبب لا تظهر التنسيقات، وربما هذا هو سبب الخطأ 500 إذا كان قالب 404.html يحاول استدعاء ملفات غير موجودة بطريقة خاطئة. الحل المؤقت للمعاينة: لكي ترى الصفحة وتتأكد أن كل شيء يعمل وأنت على جهازك (Localhost) مع DEBUG = False، شغل السيرفر بهذا الأمر: python manage.py runserver --insecure هذا الأمر يجبر جانغو على تقديم الملفات الثابتة حتى لو كان الديبرج مغلقاً. 3. التحقق من الخطأ الحقيقي الخطأ 500 هو خطأ عام يخفي المشكلة الحقيقية. بما أن DEBUG = False، أنت لا ترى "Log" الخطأ في المتصفح. الحل: انظر إلى التيرمينال (شاشة الأوامر) التي يعمل فيها السيرفر، ستجد سبب الـ 500 مكتوباً هناك (غالباً سيكون TemplateSyntaxError أو مشكلة في الاستيراد Import Error بسبب نقل الـ Handler).
  22. بصفتي مبرمج مررت بهذه المرحلة، سأعطيك الخلاصة لتبدأ بشكل صحيح ولا تتشتت في بحر المصادر: 1. الأساس ليس اللغة، بل التفكير (Logic) الخطأ الذي يقع فيه الكثيرون هو البدء بحفظ الأكواد فوراً. البرمجة هي "حل المشكلات" (Problem Solving). عليك أولاً فهم كيف يفكر الحاسوب. تعلم الخوارزميات (Algorithms): وهي الخطوات المنطقية لحل أي مشكلة. هياكل البيانات (Data Structures): كيف ترتب البيانات داخل الذاكرة. هذه المفاهيم ثابتة سواء برمجت بلغة بايثون، جافا، أو غيرها. 2. اختر مسارك (مجالك) عالم البرمجة واسع جداً، حدد هدفك ليسهل عليك اختيار اللغة: تطوير المواقع (Web Development): ابدأ بـ HTML, CSS, JavaScript. تطوير تطبيقات الموبايل: ابدأ بـ Flutter أو Kotlin/Swift. الذكاء الاصطناعي وتحليل البيانات: (وهو مجالي المفضل) اللغة الأساسية هنا هي Python لسهولتها وقوتها. 3. التطبيق ثم التطبيق لا تكتفِ بمشاهدة الفيديوهات. الكود الذي لا تكتبه بيدك ستنساه. ابدأ بمشاريع صغيرة جداً (آلة حاسبة، صفحة هبوط بسيطة، لعبة تخمين أرقام).
  23. 1. أين اختفى شريط القوائم؟ في نظام Windows، كل نافذة برنامج تحمل قوائمها الخاصة (File, Edit, Run) ملتصقة بها من الأعلى مباشرة. أما في نظام macOS الذي تستخدمه، فلسفة التصميم مختلفة؛ شريط القوائم واحد فقط ومشترك لكل البرامج، وهو الشريط الثابت الموجود في أقصى أعلى الشاشة (بجانب شعار التفاحة ، والبطارية، والساعة). هذا الشريط يتغير محتواه بحسب البرنامج الذي تعمل عليه حالياً. الخطوة العملية: اضغط بالفأرة نقرة واحدة داخل نافذة البايثون البيضاء (لتصبح هي النافذة النشطة)، ثم ارفع عينك وانظر للشريط العلوي الثابت في الشاشة وستجد الخيارات File, Edit, Run قد ظهرت هناك. 2. الفرق بين النافذة التفاعلية (Shell) والمحرر (Editor) النافذة التي أرفقت صورتها تسمى IDLE Shell (التي تحتوي على علامات >>>). هذه النافذة تنفذ الأوامر سطراً بسطر. لكي تجد خيار Run Module وتطبق ما في الفيديوهات، غالباً تحتاج لإنشاء ملف جديد: من الشريط العلوي (الذي وجدناه في الخطوة الأولى) اختر File ثم New File. ستظهر نافذة جديدة فارغة تماماً، اكتب فيها الكود، ومن هذه النافذة الجديدة ستتمكن من اختيار Run ثم Run Module. 3. اختصار لوحة المفاتيح (الحل السريع) بدلاً من البحث عن القائمة في كل مرة، يمكنك استخدام اختصار لوحة المفاتيح الموحد في بايثون لتشغيل الكود: اضغط على زر F5 (أو Fn + F5 حسب إعدادات اللابتوب لديك) وسيقوم البرنامج بتشغيل الكود مباشرة دون الحاجة لفتح القوائم. هذا الاختلاف شكلي فقط ولن يؤثر على تعلمك للغة البرمجة نفسها، فالأكواد تعمل بنفس الطريقة تماماً.
  24. المشكلة التي تواجهها لا تتعلق بكود HTML أو CSS الذي أرفقته، فالكود سليم ولا توجد أي خاصية background-color: white مطبقة على الشعار أو العنصر الحاوي له (.logo) في ملف التنسيقات. السبب يكمن في ملف الصورة نفسه. كون الصورة بصيغة PNG لا يعني بالضرورة أنها شفافة (Transparent). الكثير من الصور يتم حفظها بصيغة PNG ولكن تكون طبقة الخلفية فيها بيضاء مصمتة وليست مفرغة. لحل المشكلة، يجب عليك معالجة الصورة نفسها وليس الكود، وذلك عبر إحدى الطريقتين: استخدام أدوات تعديل الصور: قم بفتح الصورة في برنامج مثل Photoshop أو أي أداة مجانية لإزالة الخلفية (مثل remove.bg)، وقم بحذف اللون الأبيض ثم أعد حفظ الصورة بصيغة PNG مع التأكد من تفعيل خيار الشفافية (Transparency). البحث عن أيقونة مفرغة: عند البحث عن صور أو شعارات، تأكد أن الصورة تظهر بخلفية "مربعات رمادية وبيضاء" في المعاينة قبل التحميل، فهذا دليل على أنها مفرغة فعليًا. بمجرد استبدال الملف الحالي بالملف المفرغ، سيظهر الشعار بشكل صحيح فوق خلفية الموقع.
  25. طرحك في محلّه فعلًا، ومجال الأمن السيبراني واختبار الاختراق من أهم المجالات التقنية في الوقت الحالي، خصوصًا مع ازدياد الاعتماد على الأنظمة الرقمية وارتفاع الهجمات الإلكترونية. بالنسبة لسبب عدم وجود دورة في الأمن السيبراني حاليًا في أكاديمية حسوب، يمكن فهم الأمر من عدة زوايا: أولًا: طبيعة المجال نفسه الأمن السيبراني مجال واسع جدًا وحسّاس، ويعتمد على: أنظمة تشغيل وشبكات وبروتوكولات برمجة متقدمة فهم عميق للبنية التحتية قوانين وأخلاقيات صارمة وهذا يجعله أصعب في التحويل إلى دورة عربية منظمة تستهدف جمهورًا عامًا، مقارنة بمجالات مثل الويب أو البرمجة العامة. ثانيًا: المسؤولية القانونية والأخلاقية تدريس اختبار الاختراق (Penetration Testing) تحديدًا يحتاج: إطارًا قانونيًا واضحًا تركيزًا قويًا على الأخلاقيات منع إساءة الاستخدام وهذا يتطلب محتوى مدروسًا بدقة عالية حتى لا يُساء استخدام المعرفة، خاصة مع جمهور واسع ومتنوع. ثالثًا: فلسفة أكاديمية حسوب الأكاديمية تركّز غالبًا على: المجالات ذات الطلب العالي في سوق العمل العربي المسارات التي يمكن تحويلها إلى فرص عمل واضحة (عمل حر، وظائف، مشاريع) حاليًا، سوق الأمن السيبراني العربي لا يزال محدودًا مقارنة بالويب أو البرمجة العامة، ويحتاج غالبًا إلى شهادات دولية ومسارات احترافية طويلة. لكن مع ذلك، طرحك مهم جدًا تعزيز الوعي العربي بالأمن السيبراني حاجة حقيقية، حتى على مستوى: أساسيات الحماية التفكير الأمني فهم الثغرات الشائعة حماية التطبيقات والمواقع وربما يكون البدء بدورات: أساسيات الأمن السيبراني أمن تطبيقات الويب مبادئ التفكير الأمني للمبرمجين خطوة ممتازة قبل الدخول في اختبار الاختراق المتقدم. اقتراحك يستحق أن يُطرح رسميًا أنصحك بطرحه كاقتراح عبر: قسم الأسئلة أو النقاشات في الأكاديمية أو مراسلة فريق حسوب مباشرة خصوصًا إذا كان الطرح يركّز على “التوعية وبناء الأساس” وليس فقط الاختراق. الخلاصة نعم، المجال مهم جدًا، ووجود محتوى عربي منظم فيه ضرورة حقيقية. عدم وجود دورة حاليًا لا يعني عدم أهميته، بل يعكس صعوبة تقديمه بشكل مسؤول ومنهجي. ومع ازدياد الوعي والطلب، من المتوقع أن نرى اهتمامًا أكبر به مستقبلًا. طرحك في الاتجاه الصحيح، واستمر بالمطالبة بالمحتوى العربي المتخصص.
×
×
  • أضف...