-
المساهمات
19962 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
479
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Mustafa Suleiman
-
ليست الفكرة في حل المسائل فالحلول متوفرة في كل مكان، بل في تنمية مهارة التفكير المنطقي لديك وتحسين مستواك في أساسيات البرمجة بشكل عام واللغة البرمجية التي تستخدمها بشكل خاص. قم بذلك بالتوازي أثناء دراسة الدورة، وابدء بحل مسائل صغيرة فور تعلم أي مفهوم جديد مثل مسائل حسابية بسيطة، أي الجمع بين التعلم النظري والتطبيق عبر التمارين مثل منصات HackerRank أو Edabit أو Codewars للمبتدئين، حيث تبدأ بالتدرج من خلال منصة سهلة نسبيًا مثل Codewars وحل الأسئلة السهلة ثم المتوسطة ثم الصعبة، ثم الإنتقال لمنصة leetcode وحل المسائل التي بها بدءًا من مستوى متوسط فما فوق. لكن قبل حل المسائل البرمجية، عليك تعلم أساسيات هياكل البيانات والخوارزميات أي مفاهيم بسيطة من الـ DSA مثل: Arrays وطرق التعامل معها. Strings والخوارزميات الأساسية عليها مثل عكس النصوص، البحث عن عنصر. Time Complexity بشكل بسيط مثل فهم الفرق بين O(n) و O(n^2). بعد حل أي مسألة، اقرأ حلول الآخرين لتعلم تقنيات جديدة وخصص وقتًا يوميًا للحل حتى لو 30 دقيقة، وتستطيع التعمق في DSA عند الانتقال للمسائل المتوسطة، حيث ستتعلم هياكل البيانات الأساسية Linked Lists, Stacks, Queues, Hash Tables, Trees. والخوارزميات أساسية: البحث الخطي والثنائي Linear/Binary Search. الفرز السريع والدمج Quick Sort, Merge Sort. الاجتياز Traversal للأشجار مثل BFS, DFS. ثم تعلم المفاهيم المتقدمة من DSA قبل المسائل الصعبة Hard، وستتعلم Dynamic Programming وGraph Algorithms (مثل Dijkstra, Kruskal)، بالإضافة إلى Advanced Trees (مثل AVL Trees, Trie)، وركّز على الفهم العميق للنظريات كالفرق بين Greedy و Dynamic Programming. ولا تتعلم DSA نظريًّا دون تطبيق والعكس صحيح، أيضًا لا تُهمل المشاريع العملية، أي عليك الجمع بين حل المسائل وبناء مشاريع صغيرة مثل تطبيق لإدارة المهام بلغة بايثون وخلافه لتعزيز الفهم.
-
رابط تحميل الإصدار Ubuntu 24.04.3 LTS ها هو: https://ubuntu.com/download/desktop/thank-you?version=24.04.3&architecture=amd64<s=true في حال تفعيل WSL فلا حاجة لتحميل النسخة من الرابط السابق، كل ما عليكِ هو تنفيذ الأمر التالي في منفذ الأوامر CMD تستطيعي البحث عنه في شريط البحث بالأسفل في الويندوز: wsl --install وسيقوم ويندوز بتحميل الملفات اللازمة وتثبيت توزيعة Ubuntu وبعد انتهاء العملية، سيطلب منك إعادة تشغيل الكمبيوتر فقومي بذلك. بعد إعادة التشغيل، ستفتح نافذة سوداء تلقائيًا لتكملة التثبيت وسيطلب منك إنشاء اسم مستخدم Username و كلمة مرور Password لنظام Linux وتذكريهم جيدًا لأنك ستحتاجينهم عند استخدام أوامر sudo. في حال لم تفتح النافذة فقومي بتشغيل CMD وكتابة الأمر: ubuntu
-
يتم تحديث محتوى الدورة بشكل دوري على مدار العام، لذا مثل تلك المفاهيم يتم إضافتها بشكل تدريجي. وبالفعل النص العربي أصعب، فالحروف متصلة وتتغير أشكالها، الحركات الصغيرة صعبة الاكتشاف، الإتجاه من اليمين لليسار وكذلك الخطوط العربية متنوعة جدًا. لذا حاليًا، اعتمدي على الـ Pipeline التالية في المشاريع القادمة عند الحاجة إلى OCR: 1- المعالجة المسبقة للصور Pre-processing وهي أهم خطوة، فالنموذج الجيد مع صورة سيئة سيعطي نتائج سيئة، بتنفيذ التالي بواسطة cv2: تحويل الألوان Grayscale و Binarization لتحويل الصورة إلى تدرج رمادي ثم إلى أبيض وأسود فقط باستخدام تقنيات مثل Otsu’s Thresholding لإزالة الخلفيات الملونة. إزالة الضوضاء Denoising باستخدام فلاتر مثل Gaussian Blur لإزالة النقاط الصغيرة التي قد يفسرها النموذج على أنها نقاط حروف عربية. تصحيح الميل Deskewing فالنصوص المائلة تدمر دقة الـ OCR، استخدمي خوارزميات لتدوير الصورة بحيث يكون النص أفقيًا. زيادة الدقة Upscaling وSuper Resolution بحيث لو الصورة منخفضة الجودة، استخدمي نماذج AI لرفع دقتها قبل إدخالها للـ OCR. 2- تجربة النموذج المناسب للنص، أي لا تعتمدي على نموذج واحد لكل شيء، والنماذج التالية هي الأفضل للغة العربية حاليًا: PaddleOCR أثبت تفوق كبير على Tesseract في العربية. EasyOCR أبطأ قليلاً من PaddleOCR. Tesseract جيد فقط في حال ستقومين بعمل Fine-tuning على الخطوط التي تستخدميها، فالنسخة الخام منه للعربية ليست الأفضل مع الخطوط المعقدة. 3- التعامل مع تقطيع النصوص Segmentation لأنّ مشكلة اللغة العربية الكبرى هي تداخل الأسطر والحروف. في PaddleOCR، يوجد موديل خاص لاكتشاف أماكن النصوص أي Detector وموديل للقراءة Recognizer، ويجب استخدام كليهما. 4- بعد المعالجة السابقة البعدية تأتي مرحلة التصحيح فالـ OCR لن يكون دقيق 100% أبدًا، لذا ستحتاجين لتنظيف المخرجات: استخدام النماذج اللغوية الكبيرة LLM بتمريره إلى نموذج جيد في اللغة العربية مثل Llama مع Prompt يطلب منه "صحح الأخطاء الإملائية والسياقية في النص التالي الناتج من OCR دون تغيير المعنى". فالنماذج اللغوية تفهم السياق، فلو قرأ الـ OCR كلمة الذهاء الاصطناعي، سيعرف الـ LLM أن المقصود هو الذكاء الاصطناعي. في حال أردتي القيام بالأمر بنفسك، فعليكِ بالتالي: اعتمدي على Regex لاستبدال الأخطاء المتكررة مثلاً الـ OCR يخلط بين الرقم 0 والنقطة . أو الرقم 5 والحرف هـ توحيد الياء والألف المقصورة ي / ى والهاء والتاء المربوطة ه / ة في حال السياق يسمح. التصحيح الإملائي بواسطة مكتبات مثل PyEnchant مع قواميس عربية، أو مكتبة Hunspell.
-
كل شخص له أسلوب يُناسبه في الدراسة، لكن المهم هو تجنب المشاهدة السلبية وتخصيص وقت أكبر للتطبيق العملي، فالبرمجة عبارة عن تفكير منطقي لحل مشكلة ثم تنفيذ ذلك من خلال كتابة الكود. بالنسبة لطريقة الدراسة البعض يُفضل كتابة مُلخصات لكل شيء، لكن لا أنصحك بذلك، اكتفي فقط بكتابة ملاحظات ومُلخصات ورسومات للأمور النظرية أو معلومة معينة تريد الإحتفاظ بها للعودة إليها للمراجعة. بينما البرمجة نفسها اكتفي بالتطبيق العملي فهو الأهم وبدونه فلا معنى للمُلخصات النظرية مهما كتبت، ببساطة لن تستطيع قيادة سيارة بمشاهدة فيديو صحيح؟ وحاول تجنب الإنقطاعات المتكررة خاصًة في البداية، حاول الدراسة بإنتظام بحد أدنى ساعتين يوميًا أو شبه يومي. ستجد تفصيل هنا:
-
المشكلة في كلمة المرور الخاصة بقاعدة البيانات، حيث فشل المصادقة مع خادم قاعدة البيانات، عليك تعديل كلمة arwa12345678 بكلمة المرور الصحيحة وذلك ف ملف .env أي عليك تعديل كلمة المرور في المتغير DATABASE_URL التالي: DATABASE_URL="postgresql://arwaacademy:arwa12345678@localhost:5432/arwaschool?schema=public" لكن لاحظ في الرابط لديك اسم المستخدم الخاص بقاعدة البيانات هو arwaacademy فهل لديك مستخدم بذلك الاسم في postgres؟ في حال قمت بتحميل المشروع من مستودع فقم بتعديل الرابط لاسم المستخدم الإفتراضي وهو postgres مع تعديل كلمة المرور لكلمة المرور الخاصة بك أي استبدل كلمة password هنا، ثم أنشيء قاعدة بيانات باسم arwaschool DATABASE_URL="postgresql://postgres:PASSWORD@localhost:5432/arwaschool?schema=public"
-
في الإصدار 7 من Prisma أنت بحاجة إلى إضافة driver adapter إلى الباني الخاص بـ إلى Prisma Client وستجد هنا شرح لما عليك ففعله. Driver adapters and client instantiation الحل الأبسط حاليًا هو استخدم الإصدار 6: npm i prisma@6 @prisma/client@6 ثم تنفيذ التالي لإعادة توليد Prisma Client: npx prisma generate
-
ما تعلمته هو الأساسيات وأنت بحاجة إلى التعمق أكثر، فلا تنتقل إلى Flask الآن. أي بدلاً من تشتيت نفسك بين إطار عمل وآخر، الأفضل مهنيًا هو الوصول لمرحلة الإتقان في جانغو، والانتقال الآن لـ Flask سيجعلك تعرف القليل عن كل شيء، لكن سوق العمل يبحث عن متخصص يعرف كل شيء عن شيء واحد. أيضًا ما زالت المعلومات حاضرة في ذهنك حول جانغو، لو انتقلت لإطار آخر ثم عدت بعد فترة ستحتاج إلى مراجعة ما تعلمته لاسترجاع المعلومات. في الدورة تعلمنا Django MVT حيث يقوم جانغو بإرسال ملفات HTML للقارئ أي تطوير موقع كامل بما في ذلك الواجهة الأمامية عن طريق محرك القوالب الخاص بجانغو. لكن في سوق العمل يستخدم جانغو فقط كـ Backend أي واجهة برمجة تطبيقات API ويرسل البيانات بصيغة JSON ليتعامل معها تطبيق موبايل أو موقع مبني بـ React أوVue. لذا عليك تعلم كيفية بناء APIs، التعامل مع Serializers، الـ Token Authentication (JWT)، وكيف توثق الـ API الخاص بك من خلال Swagger. ولا تقلق تعلمت بالفعل أساسيات الجزء الخاص بالواجهة الخلفية Backend في الدورة لأننا قمنا بتطوير الواجهة الأمامية والخلفية معًا، تحتاج إلى التعمق فقط. ثم بناء مشروع بنفسك وليكن نظام حجز طبي أو نظام إدارة مكتبة أو مدونة متطورة، وقم ببنائه من الصفر، واستخدم Google والوثائق الرسمية فقط عند الحاجة، وستعاني قليلاً وذلك طبيعي لكن ستتعلم الكثير.
- 3 اجابة
-
- 1
-
-
المجالات مختلفة تمامًا عن بعضها البعض، قم بدراسة دورة كاملة عن أساسيات علوم الحاسوب كالتي موجودة في أكاديمية حسوب هنا، ثم قم بالبحث عن كل مجال لتحصل على نظرة عامة حول كل منهم، واختر المجال الذي تراه مناسب أو لديك حافز نحوه، ثم حاول تعلمه. عامًة في حال لديك الوقت الكافي لمدة سنتين على الأقل لتعلم مجال الذكاء الاصطناعي فاختر ذلك التخصص فهو الأفضل بينهم كمستقبل بلا شك، في المرتبة الثانية مجال الأمن السيبراني وبعده الواجهة الأمامية. بخصوص المطلوب أكثر في الوقت الحالي هما مجالي الذكاء الاصطناعي ومجال الأمن السيبراني، لكون مجال الواجهة الأمامية مُتشبع بالفعل. عامًة لا تستمع لأحد قم بإجراء بحثك وتفقد الوظائف المطلوبة في الدول التي تستهدفها.
-
بالطبع يوجد في دورة المشاريع التالية للتطبيق على ما تعلمته بخصوص تحليل البيانات: تحليل أداء الطلاب في إحدى المدارس تحليل بيانات متجر إلكتروني لتحسين استراتيجية المبيعات تحليل سلوك العملاء تحليل بيانات الحملات التسويقية لتحسين استراتيجيتها تحليل بيانات حملة تسويقية لبنك للتنبؤ باشتراك العملاء تحليل مبيعات السيارات إضافة الذكاء الاصطناعي لمتجر إلكتروني إضافة الذكاء الاصطناعي لمطعم إضافة الذكاء الاصطناعي لفندق إضافة الذكاء الاصطناعي لمركز خدمات تحليل بيانات المتجر الإلكتروني بالإعتماد على قاعدة بيانات. وبالطبع البيانات ليست ضخمة فذلك سيستغرق وقت كبير، لكن الآلية هي نفسها أي تستطيع تطبيق ما تعلمته على بيانات ضخمة لا مشكلة. وللعلم تخصص الدورة هو الذكاء الاصطناعي وليس تحليل البيانات، فما ذكرته يخص جانب تحليل البيانات أكثر. ويوجد مسارات ومشاريع أخرى تتعلق بالمفاهيم الأخرى في مجال الذكاء الاصطناعي، ستجد تفصيل عنها في صفحة الدورة.
-
تعديل واجهة المستخدم على سلة لا يحتاج منك سوى خبرة في HTML و CSS، حيث يتم تخصيص الواجهة من خلالهم، وبالطبع هناك حدود للتخصيص حيث لا يوجد إمكانية لتخصيص كامل بل التعديل على التصميم الموجود فقط. ولو أردت تطوير قالب كامل، فالأمر يتم من خلال PHP ومحرك القوالب Twig بينما شوبيفاي ستحتاج منك تعلم لغة Liquid الخاصة بمحرك القوالب لديها، وكذلك لغات الويب HTML, CSS, JS
-
تابع المسار كما أنت وقم بإنهائه لا تشتت نفسك، ثم قم بدراسة المسار الجديد وهو "أطر عمل CSS" حيث تم استبدال مسار "بناء واجهة مستخدم تشبه موقع يوتيوب" بذلك المسار. والتحديث يشمل 33 درسًا بمدة 5 ساعات ونصف، ويهدف المسار إلى تدريب الطالب على استخدام أطر عمل CSS لبناء واجهات ويب احترافية وحديثة، مع التركيز على إطار Bootstrap بإصدار الحديث وهو 5، باعتباره واحدًا من أشهر وأكثر الأُطر استخدامًا في عالم تطوير الواجهات، ويبدأ المسار بمدخل شامل يوضح لماذا نحتاج أصلًا إلى أطر العمل، وكيف تسهّل عملية التطوير وتسرّع إنتاج واجهات متناسقة ومتجاوبة دون الحاجة إلى كتابة كل شيء من الصفر. خلال المسار، سيتدرّب الطالب على فهم أنظمة الشبكات، والمكوّنات الجاهزة، والأدوات المساعدة التي توفّر له مرونة كبيرة في بناء صفحات حقيقية. كما سيعمل على مشروع عملي متكامل يطبّق فيه كل المفاهيم التي يتعلمها خطوة بخطوة، مما يساعده على الانتقال من الجانب النظري إلى التطبيق الاحترافي بسهولة. ثم الإنتقال لتنفيذ مشاريع مختلفة من خلال بوتستراب وCSS في المسارات التالية.
-
يوجد في الموقع فلاتر لتصفية القوالب بناءًا عليها، بمعنى لإختيار قالب HTML, CSS فقط، قم بتحديد فلتر HTML: ونفس الأمر لو أردت قالب مُطور من خلال بوتستراب، فقم بالضغط على فلتر Boostrap وستحصل على HTML, CSS, JS, Boostrap ثم اختر القالب الذي تريده وانزل لأسفل الصفحة وستجد زر التحميل، ولو أردت المعاينة قبل التحميل اضغط على Live view
-
لن تتعلم استخدام المنصة من خلال قراءة تعليقات هنا، بل يجب التعلم من خلال المشاهدة من شخص خبير ومحاولة التقليد، أنصحك بتعلم الأساسيات من القنوات التالية، اختر الشرح المناسب لك: وركز على تعلم كيفية استخدام منصة Figma وأساسيات التصميم من خلالها. بعد ذلك قم بمشاهدة شرح يوضح لك كيف تستلم ملف التصميم من مُصمم واجهات المستخدم UI/UX وكيف تقوم بتحويله إلى كود، ابحث على اليوتيوب عن Figma File to Code. The Designer to Developer Handoff
-
تقصد مجال GraphRAG وللتوضيح هو مجال حديث ظهر بقوة في أخر عام، ولذلك المصادر التعليمية الممنهجة له قليلة، ومعظمها عبارة عن أوراق بحثية أو مقالات تقنية متناثرة. في البداية تحتاج إلى استيعاب أساسيات Graph Database وهي فهم يتم تخزين البيانات في الـ Graph أصلاً، وهو يتكون من شيئين فقط: Nodes العقد، وهي الكيانات مثل يزيد، شركة جوجل، كتاب. Relationships و Edges أي العلاقات وهي الروابط بين العقد مثل يزيد يعمل في جوجل. ويوجد Properties وهي خصائص داخل العقدة أو العلاقة. ومثلما يوجد SQL لقواعد البيانات العادية، فيوجد لغة تسمى Cypher لقواعد بيانات الـ Graph وتحديداً Neo4j، وهي لغة سهلة تشبه الرسم. أنصحك بالتعلم من خلال المصدر الرسمي المجاني وهو: https://graphacademy.neo4j.com/categories/beginners ثم الإنتقال للمستوى المتوسط لتتعلم كيف تعمل على نص غير مهيكل وتحوله إلى Nodes و Relationships وذلك من خلال بايثون: https://graphacademy.neo4j.com/categories/intermediate/ ثم الإنتقال للمستوى المتقدم: https://graphacademy.neo4j.com/categories/advanced/
- 4 اجابة
-
- 1
-
-
في حال ستقوم بنشر المشروع على استضافة Vercel فلن تستطيع استخدام WebSockets في صورتها العادية مثل socket.io مدمج داخل API Routes لأن Vercel تعتمد على Serverless Functions، وتلك الدوال تعمل لثوانٍ معدودة لرد الطلب ثم تموت أي Stateless، بينما الـ WebSocket يحتاج اتصال دائم ومفتوح Stateful. لذا ستحتاج إلى خدمة خارجية لإدارة الاتصال مثل Pusher أو Ably أو إنشاء سيرفر منفصل للـ Sockets. وعلى الاستضافات الأخرى لا مشكلة، بدمج Express مع Next.js في نفس التطبيق واستخدام socket.io ولكن الأمر سيصبح معقد وستفقد بعض ميزات Next.js. الأفضل تشغيل سيرفر Next.js بشكل طبيعي، وإنشاء سيرفر Express صغير منفصل مسؤول فقط عن الـ WebSockets. والأسهل هو الإعتماد على خدمة سحابية مثل Pusher، حيث لن تحتاج لسيرفر Express وسيقوم Next.js بإرسال حدث إلى Pusher عند وصول طلب جديد، وPusher يتولى إرسال التنبيه للوحة التحكم فورًا. المشكلة في الباقة المجانية المحدودة وعند استنفاذها ثم تصبح مدفوعة أي تحتاج لترقية الإشتراك والدفع في Pusher. في حال أردت عدم الإشتراك، فقم بإنشاء تطبيق Next.js بشكل عادي، ثم تنشئ سيرفر Node.js بسيط من خلال Express.js وظيفته فقط استقبال وإرسال التنبيهات.
-
يجب أن تتعلم الأساسيات أولاً، وهي دراسة أساسيات علوم الحاسوب وأظن أنك قمت بدراسة دورة علوم الحاسوب هنا في الأكاديمية وما بها يكفي. وستحتاج إلى تعلم نظام لينكس وذلك تم شرحه بالفعل في الدورة أيضًا، وكذلك أساسيات البرمجة وذلك تم شرحه من خلال لغة بايثون وجافاسكريبت. ثم دراسة أساسيات الشبكات Networking. ودراسة لغات الويب HTML وJavaScript في حال تريد اختراق المواقع Web Penetration Testing، بحيث يجب أن تفهم كيف يُبنى الموقع لتعرف كيف تخترقه، وأيضًا يجب تعلم لغة SQL لأنها لغة قواعد البيانات. وبعد استيعاب كيف يعمل الحاسوب والشبكات والمواقع، عليك تعلم مثلث الأمن CIA Triad، التشفير Cryptography، وجدران الحماية وFirewalls. وتعلم الأدوات الأساسية التي ستحتاجهاللإختبار: Nmap: لفحص الشبكات واكتشاف الأجهزة المفتوحة. Wireshark: لتحليل حزم البيانات في الشبكة. Burp Suite: الأداة رقم 1 لاختراق تطبيقات الويب. Metasploit: إطار عمل لاستغلال الثغرات. وادرس قائمة OWASP Top 10 والتي بها أخطر 10 ثغرات تصيب المواقع. وبالطبع ما سبق هو نظريات فقط ووحدها لا تكفي وستحتاج إلى دورة تغطي ما سبق، وبعد ذلك تبدأ التطبيق العملي من خلال المنصات التالية: TryHackMe بها دروسا متدرجة من الصفر مع تطبيق عملي. Hack The Box والتي توفر أجهزة حقيقية لتخترقها. وقم بتثبيت برنامج VirtualBox أو VMware على جهازك، ونصب عليه Kali Linux وجهاز آخر Metasploitable وهو نظام مصمم ليكون مليئ بالثغرات لتتدرب عليه. وأنصحك بالإطلاع على: https://github.com/Hacking-Notes/Hacker-Roadmap
- 2 اجابة
-
- 1
-
-
الكتب المتوفرة بالأكاديمية مجانية تمامًا وهي متوفرة بشكل رقمي فقط في شكل ملف PDF وليس ورقي، تستطيع تحميلها وقراءتها كما تريد، توجه إلى صفحة الكتابة ثم اضغط على زر تنزيل لتحميله: وباقي كتب البرمجة ستجدها هنا: https://academy.hsoub.com/files/c5-كتب-برمجة/ وتستطيع تحميله على هاتفك وقراءته في أي وقت أيضًا.
- 4 اجابة
-
- 1
-
-
لا حاجة إلى ذلك، نظام التوثيق في جانغو يعتمد على موديل مستخدم واحد AUTH_USER_MODEL، ولو قمت بإنشاء 3 جداول منفصلة (جدول للمرضى، وجدول للأطباء، وجدول للممرضين) وكل واحد منهم لا يرث من الآخر، ستواجه مشاكل معقدة جداً في تسجيل الدخول، إدارة الجلسات، التصاريح والعلاقات الخارجية مع الجداول الأخرى، فمثلاً من صاحب التعليق؟ هل هو طبيب أم مريض؟ وما قمت بفعله يسمى نمط Profile Pattern، بحيث تحتفظ بالبيانات المشتركة وهي الاسم، الايميل وكلمة المرور في CustomUser، والبيانات الخاصة في جداول مرتبطة. لكن، لكي تكتمل الصورة وتعمل معك في الـ Admin بشكل احترافي كما طلبت، تحتاج إلى ترتيب ملف admin.py واستخدام الـ Signals لضمان إنشاء البروفايل. لذا عندما يقوم المدير بإضافة مستخدم وتحديد دوره كطبيب، نريد أن يتم إنشاء DoctorProfile فارغ تلقائيًا حتى لا يحدث خطأ، أي في ملف signals.py أو أسفل models.py أضف التالي: from django.db.models.signals import post_save from django.dispatch import receiver from .models import CustomUser, UserRole, DoctorProfile, NurseProfile, City @receiver(post_save, sender=CustomUser) def create_user_profile(sender, instance, created, **kwargs): if created: if instance.user_role == UserRole.DOCTOR: DoctorProfile.objects.create(user=instance, license_number="TBD", specialization="General") elif instance.user_role == UserRole.NURSE: NurseProfile.objects.create(user=instance, license_number="TBD") وذكرت أن المدير سيضيفهم بنفسه، وتريد فصلهم وصلاحيات مختلفة، لذا سنستخدم تقنية Proxy Models أي موديل وكيل من خلال إنشاء كلاس وهمي في اسمه DoctorUser وهو ليس بجدول جديد في قاعدة البيانات، بل قناع لجدول CustomUser. مع Inlines في ملف admin.py لدمج الحقول في صفحة واحدة وهي طريقة في Django Admin تسمح بوضع نموذج داخل نموذج آخر في نفس الصفحة. ليصبح في القائمة الجانبية للأدمن Doctors, Nurses, Patients بشكل منفصل، وعند الدخول لإضافة طبيب، ستظهر حقول المستخدم و حقول الطبيب (السعر، التخصص) في نفس الصفحة. from django.contrib import admin from django.contrib.auth.admin import UserAdmin from .models import CustomUser, DoctorProfile, NurseProfile, UserRole class DoctorProfileInline(admin.StackedInline): model = DoctorProfile can_delete = False verbose_name_plural = 'Doctor Profile' class NurseProfileInline(admin.StackedInline): model = NurseProfile can_delete = False verbose_name_plural = 'Nurse Profile' class CustomUserAdmin(UserAdmin): model = CustomUser list_display = ['username', 'email', 'user_role', 'is_staff'] fieldsets = UserAdmin.fieldsets + ( ('Extra Fields', {'fields': ('user_role', 'city', 'phone', 'date_of_birth', 'image')}), ) add_fieldsets = UserAdmin.add_fieldsets + ( ('Extra Fields', {'fields': ('user_role', 'city', 'phone', 'date_of_birth', 'image')}), ) class DoctorUser(CustomUser): class Meta: proxy = True verbose_name = 'Doctor' verbose_name_plural = 'Doctors' class NurseUser(CustomUser): class Meta: proxy = True verbose_name = 'Nurse' verbose_name_plural = 'Nurses' class DoctorUserAdmin(CustomUserAdmin): inlines = [DoctorProfileInline] def get_queryset(self, request): return super().get_queryset(request).filter(user_role=UserRole.DOCTOR) def save_model(self, request, obj, form, change): obj.user_role = UserRole.DOCTOR super().save_model(request, obj, form, change) class NurseUserAdmin(CustomUserAdmin): inlines = [NurseProfileInline] def get_queryset(self, request): return super().get_queryset(request).filter(user_role=UserRole.NURSE) def save_model(self, request, obj, form, change): obj.user_role = UserRole.NURSE super().save_model(request, obj, form, change) admin.site.register(CustomUser, CustomUserAdmin) admin.site.register(DoctorUser, DoctorUserAdmin) admin.site.register(NurseUser, NurseUserAdmin)
- 1 جواب
-
- 1
-
-
تم إزالة jQuery بالفعل في التحديث الذي تم على الدورة في شهر سبتمبر الماضي، حيث حدثنا وحدة إنشاء مشروع شخصي في مسار أساسيات تطوير الويب في دورة تطوير واجهات المستخدم ليواكب أحدث الإصدارات والتقنيات. يشمل التحديث 10 دروس موزعة على ساعتين وربع. حدثنا الشرح ليكون أكثر سلاسة وسهولة، وحللنا جميع المشاكل التي كان الطلاب يقعون فيها سابقًا، مما جعل التجربة التعليمية أوضح وأكثر فاعلية. كما استبدلنا مكتبة jQuery بجافا سكريبت الخالصة، وذلك لأن جافا سكريبت الحديثة أصبحت توفر نفس المزايا وأكثر دون الحاجة إلى تحميل مكتبات إضافية، وهو ما يجعل الكود أخف وأسرع، ويمنح الطلاب فرصة لبناء أساس قوي في لغة أساسية يحتاجونها في كل مشروع احترافي. وبخصوص react وعدم تضمينها في دورة تطوير واجهات المستخدم، السبب هو أن الدورة موجهة لتعلم أساسيات الواجهة الأمامية من خلال تعلم اللغات الأساسية التي يعتمد عليها أي مكتبة أو إطار للواجهة الأمامية وهو HTML, CSS, JS. وتعلم تلك اللغات في البداية واجب وضروري، وبدونها ستعاني في فهم ما يدور في الكود الخاص بك عند تعلم تلك المكتبات والإطارات، وأيضًا ستواجه صعوبة في حل المشكلات التي تواجهك وأيضًا تخصيص مشروعك بالشكل الذي ترغب به. ولتعلم React.js الأمر يحتاج إلى فرد مساحة في دورة مختلفة تمامًا، والدورة لن تكون للمبتدئين في الواجهة الأمامية، فأنت بحاجة إلى تعلم اللغات الأساسية كما ذكرت لتفهم ما يحدث وما فائدة ما تتعلمه وتكتبته. ولذلك ستجد أنه تم تخصيص دورة تطوير التطبيقات باستخدام لغة JavaScript من أجل تعلم مكتبة React وإطارات جافاسكريبت الأخرى مثل React Native لتطوير تطبيقات الهاتف وأيضًا Ionic ثم ستتعلم Electron.js لتطوير برامج سطح المكتب. وأيضًا يوجد شرح لإطار Next.js وهو هام جدًا بعد تعلم React من أجل التصيير من جهة الخادم Server-side Rendering. وجميع المسارات الأولى من الدورات الأخرى متاحة لك، وتستطيع الإطلاع عليها فمثلاً في دورة تطوير التطبيقات باستخدام لغة JavaScript المسار الأول هو أساسيات لغة JavaScript وأنصحك بالإطلاع عليه لتعلم المزيد عن جافاسكريبت بجانب ما درسته في دورة تطوير واجهة المستخدم.
- 6 اجابة
-
- 1
-
-
ما تقصدينه هو وظيفة Software Business Analyst وهي تتطلب الإحاطة بمجموعة متكاملة من المعارف التقنية والإدارية، حيث يبدأ المسار بدراسة Software Development Life Cycle (SDLC) لفهم المراحل التي يمر بها المنتج الرقمي من التخطيط حتى الإطلاق، وهو ما يستلزم التعمق في منهجيات العمل المختلفة مثل Agile و Scrum التي تعتمد على التطوير التكراري والمرونة في التعامل مع المتغيرات، ودراسة Requirement Engineering التي هي أساس العمل، حيث ستتعلمين كيفية استنباط المتطلبات من أصحاب العمل، ومن ثم تحليل تلك المتطلبات وتوثيقها بدقة. كذلك إتقان أدوات النمذجة المرئية، وهي Unified Modeling Language (UML) والتي تعتبر لغة أساسية لرسم المخططات الهيكلية والسلوكية للنظام مثل Use Case Diagrams، بالإضافة إلى تعلم Business Process Model and Notation (BPMN) لتخطيط سير العمليات التجارية بوضوح. ودراسة أساسيات قواعد البيانات ولغة SQL وفهم كيفية عمل الـ APIs لتمتلكي القدرة على التحدث بلغة مشتركة مع المبرمجين وفهم القيود التقنية، وهو ما يجب أن يقترن بمهارات التوثيق التقني لكتابة مستندات مثل Software Requirement Specification (SRS) و Business Requirement Document (BRD) التي تُعد المرجع الرئيسي للمشروع. وفي الواقع العملي تتم عملية التحليل الفعلي عبر خطوات منهجية تبدأ بفهم عميق لنشاط العمل Business Domain والمشكلة المراد حلها، حيث ستقومين بعقد جلسات وورش عمل مع المستخدمين والعملاء لجمع المعلومات في صورتها الخام، ثم فلترتها وتحويلها من مجرد رغبات إلى متطلبات تقنية محددة Functional Requirements ومتطلبات غير وظيفية Non-Functional Requirements تتعلق بالأداء والأمان. ومن ثم يتم تحويل تلك المتطلبات إلى نماذج مرئية ومخططات توضح رحلة المستخدم User Journey وتدفق البيانات، لتتم صياغتها في النهاية على شكل User Stories داخل سجل مهام المنتج Product Backlog في حال اتباع منهجية Agile، بحيث تكون تلك القصص جاهزة للتطوير والاختبار، ومتابعة التنفيذ للتأكد من أن الحل البرمجي يطابق احتياجات العمل من خلال User Acceptance Testing (UAT).
-
student_id هو PRIMARY KEY، بالتالي غير مسموح بتكرار الرقم، ولو حاولت إضافة طالب برقم 1 وكان هناك طالب سابق بنفس الرقم، ستتوقف قاعدة البيانات عن العمل ويظهر خطأ IntegrityError. الأفضل هو جعل قاعدة البيانات تقوم بترقيم الطلاب تلقائيًا من خلال تفعيل AUTOINCREMENT بدلاً من إدخال الرقم بنفسك، ولو أردت كتاتبه بشكل يدوي فيجب معالجة الخطأ من خلال try except لإظهار أنّ الرقم مُكرر. عامًة إليك الكود بالإعتماد على تفعيل AUTOINCREMENT في قاعدة البيانات ويجب عليك حذف ملف قاعدة البيانات القديم school.db من جهازك أولاً، ثم شغل الكود الجديد ليقوم بإنشاء الجدول بالطريقة الصحيحة. import sqlite3 conn = sqlite3.connect('school.db') cursor = conn.cursor() cursor.execute(""" CREATE TABLE IF NOT EXISTS students( student_id INTEGER PRIMARY KEY AUTOINCREMENT, first_name TEXT, last_name TEXT, age INTEGER, grade TEXT, registration_date TEXT ) """) cursor.execute(""" CREATE TABLE IF NOT EXISTS lessons( student_id INTEGER, lesson_name TEXT, FOREIGN KEY(student_id) REFERENCES students(student_id) ) """) print("""To add a student, choose a.\n To update, choose u.\n To delete, choose d.\n To show, choose s. """) def Add_student(a): if a == 'a': first_name = str(input('Enter student first name: ')) last_name = str(input('Enter student last name: ')) student_age = int(input('Enter student age: ')) student_grade = str(input('Enter student grade: ')) registration_date = str(input('Enter registration date: ')) student_data = (first_name, last_name, student_age, student_grade, registration_date) try: cursor.execute(""" INSERT INTO students (first_name, last_name, age, grade, registration_date) VALUES (?,?,?,?,?) """, student_data) conn.commit() print(f"Student added successfully! The new Student ID is: {cursor.lastrowid}") except Exception as e: print(f"Error: {e}") choice = input("Enter your choice: ") Add_student(choice) conn.close()
-
الصحيح هو إجابة مباشرة في خطوات بدون تفصيل وفي حال سألك عن نقطة معينة فصلها له، وهي تحديد مكان المشكلة لمعرفة هل في الـ Network، الـ Client-side، الـ App Server، أو الـ Database. ثم اذكر له نقاط بسيطة عن كل خطوة، مثلاً في الـ Network و Client من خلال أدوات DevTools في المتصفح سأتفقد هل الـ TTFB مرتفع، في حال ذلك فالمشكلة في الـ Server، أما لو التحميل بطيئ بعد الاستجابة، فالمشكلة في حجم البيانات أو الـ Rendering. وفي الـ App Server لو المشكلة كانت في السيرفر، أراقب الـ Logs وأدوات الـ Profiling لمعرفة هل التأخير بسبب عمليات حسابية ثقيلة أم انتظار خارجي. ولو في الـ Database أراجع الـ Slow Query Logs وهنا أتأكد من أمرين هل الـ Query مكتوب بشكل جيد؟ وهل الجداول تملك الـ Indexing المناسب لمنع المسح الكامل للجدول؟ وفي حال الكود والـ Database بحالة جيدة، أفكر في حلول مثل الـ Caching أو تحويل العملية لـ Background Job.
-
سؤالك غير صحيح، ما يجب أن تسأل عنه هو هل ما قمت به صحيح أم لا؟ لا تحاول أبدًا ذكر أشياء لم تقم بها أو ليس لديك الخبرة الكافية بها، فذلك له تأثير معاكس تمامًا لما تريده، ما يجب إظهاره هو أنك تعلم أمور معينة بقدر معين وقادر على تعلم أمور جديدة بشكل مرن عند الحاجة. الصحيح هو أنك حاولت القيام بدور الـ Interviewer قدر الإمكان وأجريت بحث وتعلمت قدر الإمكان قبل القيام بذلك، وحاولت اختيار اختيار المُبرمج المناسب بناءًا على خبرتك الحالية ومن خلال منهجية واضحة بناءًا على بحثك وما تعلمته وليس بشكل عشوائي، بالطبع ليست كافية لكن حاولت تنفيذ المطلوب منك قدر المُستطاع. ولا تقم بذكر إجابات طويلة أبدًا، بل بشكل مباشر وواضح قدر الإمكان. ببساطة ليس شرطًا معرفة عميقة بالتقنيات بالتفصيل ولكن المهم هو وجود أساس برمجي قوي وفهم عميق للمفاهيم الأساسية اللازمة في المجال والتي سيحتاجها في عمله. أيضًا وجود خبرة ومعرفة تتناسب مع متطلبات الوظيفة، فلا يصح اختيار شخص بخبرة بسيطة وأساس قوي لمنصب Senior، حيث الخبرة العملية جراء سنوات العمل لذلك المنصب لازمة. كذلك طريقة التفكير والتحليل والمهارات الغير تقنية Soft Skills.
- 2 اجابة
-
- 1
-
-
هل المقصود بالصفحة حسابك الشخصي profile أم صفحة page؟ عامًة طالما التطبيق في وضع التطوير فالمنشورات تظهر فقط لمديري التطبيق، ويجب تحويله إلى Live Mode، بالتوجه إلى: https://developers.facebook.com/apps/ ثم أنشئ تطبيق جديد أو استخدم الموجود واختر نوع None طالما ليس تجاري. ثم أضف الصلاحيات التالية بالتوجه إلى App Review في لوحة التحكم ثم Permissions and Features: pages_show_list pages_read_engagement pages_manage_posts ثم تحويل التطبيق إلى Live Mode من Settings واختر Basic وأضف Privacy Policy URL أي سياسة الخصوصية للتطبيق، وشعار للتطبيق وفي أعلى الصفحة حول من Development إلى Live. ولاستخراج الـ Page Access Token عبر Graph API Explorer فتوجه إلىhttps://developers.facebook.com/tools/explorer ثم في الأعلى اختر تطبيقك من القائمة واضغط Generate Access Token. واختر نفس الصلاحيات السابقة، ثم بعد الموافقة، من القائمة المنسدلة User or Page اختر صفحتك حيث سيظهر اسمها.
