كل الأنشطة
- الساعة الماضية
-
Wajd Alharbi اشترك بالأكاديمية
-
Mahmoud Mohsen9 اشترك بالأكاديمية
-
مصطفى عبدالله7 اشترك بالأكاديمية
- اليوم
-
اسلام محمد24 اشترك بالأكاديمية
-
زياد مريان اشترك بالأكاديمية
-
Omnia Magdy2 اشترك بالأكاديمية
-
Jena Asim اشترك بالأكاديمية
-
عبدالجواد شعبان اشترك بالأكاديمية
-
Mohamad Emad اشترك بالأكاديمية
-
Kareem Marof اشترك بالأكاديمية
-
ممكن توضيح اكثر من حيث تعديل علي جدول مخزن
-
بداية أي حفلة ناجحة تبدأ من اختيار الثيم المناسب، ولهذا يقدّم بارتي اكسبرت مجموعة واسعة من الثيمات الأكثر رواجًا في السعودية ضمن تجربة تسوق سهلة وواضحة. سواء كنت تبحث عن ثيمات للأطفال، أو حفلات كشف جنس المولود، أو حفلات التخرج، أو أجواء الهالوين ورأس السنة، ستجد كل شيء مُنظّمًا لتصل إلى اختيارك المثالي في دقائق. ولا تقتصر التجربة على الديكور فقط، بل تمتد لتشمل عالمًا كاملًا من الأزياء التنكرية المتنوعة، مثل أزياء الأطفال، الأميرات، الأبطال الخارقين، وخيارات مميزة للنساء والرجال. إضافةً إلى ذلك، يوفر الموقع تشكيلة من الإكسسوارات التي تضيف لمسة نهائية مثالية، مثل المكياج، الباروكات، الأجنحة، القبعات، الجوارب، القفازات، وغيرها. ما يميّز بارتي اكسبرت حقًا هو أنه يوفّر لك تجربة متكاملة لكل مناسبة، حيث تجد المنتجات والديكورات والأقنعة والمستلزمات والمفرقعات والشموع في مكان واحد، بدون الحاجة للبحث في عدة متاجر. وإذا كنت ترغب في توفير وقتك والحصول على تنسيق متناسق يعكس ذوقك، فإن بارتي اكسبرت هو وجهتك الأولى لمستلزمات الحفلات في السعودية، لتكون دائمًا مستعدًا لأي احتفال بأسلوب أنيق وسهل
- البارحة
-
الاتصال ناجح لكن الاستعلامات تفشل بسبب timeout، ومتغير البيئة MONGO_URI في ملف .env به مشكلة. تفقد متغير MONGO_URI في ملف .env ويجب أن لا توجد مسافات قبل أو بعد = ولا توجد علامات اقتباس حول القيمة، كذلك اسم المتغير يجب أن يكون MONGO_URI كما في الكود: MONGO_URI=mongodb+srv://username:password@cluster0.mf8buxy.mongodb.net/dbname?retryWrites=true&w=majority
-
عبدالباسط ابراهيم بدأ بمتابعة ماذا أفعل بعد الإنتقطاع فترة كبيرة
-
إذا كان هناك الوقت لمراجعة الدروس السابقة سريعاً فيفضل ذلك حيث أنه كما قلتي لفترة كبيرة وبالتالي الكثير من المفاهيم والمعلومات التي ربما لا تتذكريها . أو بدلاً من إعادة مشاهدة ما سبق بالكامل يمكن الإكتفاء بمراجعة ملاحظاتك المدونة أو التوثيقات الرسمية من خلال موسوعة حسوب وأيضاً من اسرع الطرق قراءة الأكواد لمشاريعك السابقة ولا تعد للدرس إلا إذا واجهت جزئية غير مفهومة . وبعدها يمكن تنفيذ مشروع صغير جديد لترسيخ المفاهيم .
-
Nada عمير بدأ بمتابعة ماذا أفعل بعد الإنتقطاع فترة كبيرة
-
I stopped for a long time what should l do now
- 1 جواب
-
- 1
-
-
انا الان ادرس كورس js من عند الزيرو ويب سكول لأنه كامل واوشكت على الانتهاء منه هل انا قمت بخطوة افضل من دراسة js هنا
- 7 اجابة
-
- 1
-
-
بخصوص الدورة الثانية فالخيار الأفضل هو استبدال "دورة الجافا سكريبت" بـ "دورة تطوير التطبيقات باستخدام لغة Python". فالذكاء الاصطناعي يعتمد على لغة Python ومكتباتها مثل (TensorFlow, PyTorch, Scikit-learn). أما إذا كان هدفك أن تكون مطور مواقع (Full Stack) ، فالجافا سكريبت ستكون هي الإختيار المناسب . وأخيراً لديك دورة علوم الحاسوب بحيث إذا كنت تشعر أنك تفتقد للمفاهيم الأساسية (لا تعرف كيف يعمل الكمبيوتر، الذاكرة، البت والبايت، الشبكات) وتريد تأسيساً أكاديمياً قوياً بغض النظر عن لغة البرمجة.
-
نسمع العديد من المصطلحات التي يخلط فيما بينها ضمن مجال الذكاء الاصطناعي Artificial Intelligence منها مصطلح تعلم الآلة Machine learning والتعلم العميق Deep learning، واللذان يعدان أساسيان في هذا المجال. بشكل عام يهتم هذين المجالين بمعالجة البيانات لاستخراج المعلومات منها وأحدهما يشمل الآخر، لذا سنوضح في هذا المقال هذه المصطلحات وماذا يشمل كل منها وفي ماذا تستخدم حتى نفهم الفرق بينها، ويمكنك التعرف أكثر على المصطحات الأخرى في مجال الذكاء الاصطناعي من مقال المفاهيم الأساسية لتعلم الآلة. تعلم الآلة Machine learning فرع من مجال الذكاء الاصطناعي يستخدم خوارزميات محددة لاستخراج الأنماط patterns والتوقعات من البيانات، ويختلف النظام الذي يستخدم تعلم الآلة عن البرمجة العادية الثابتة بتطوير نموذج الخوارمية وتحسينها تدريجيًا عبر التدريب والاختبار المتكرر للنتائج أثناء معالجة بيانات دون تدخل بشري عبر التعلم من تلك البيانات مما يحسّن دقة النتائج مع الوقت. يستخدم خوارزميات التصنيف والتنبؤ والتي تحوي على معاملات parameters يمكن ضبطها تلقائيًا أثناء عملية التدريب لتحسين دقتها، فمثلًا عند استخدام خوارزمية شجرة القرار Decision Trees لتصنيف البيانات يعاير النظام بنيتها تلقائيًا، فكلما تدرب على بيانات أكبر وأكثر تنوعًا تحسّنت دقتها في معالجة بيانات جديدة. من مزايا هذا النوع من التعليم قدرته على التعلم من كمية بيانات صغيرة نسبيًا، ولكنه يعتمد على وجود مزايا مستخرجة مسبقًا من البيانات ولا يمكنه استخراجها بنفسه أي يحتاج لتدخل بشري في هذه المرحلة، وبعدها فقط يمكنه التعلم من تلك المزايا واتخاذ قرارات أفضل مع الوقت. تطبيقاته كثيرة ومنتشرة بشكل كبير منها أنظمة الاقتراحات في منصات المحتوى كاقتراح فيديوهات للمستخدم قد يرغب بمشاهدتها أو اقتراح المنشورات في وسائل التواصل الاجتماعي، وصولًا إلى تصنيف المحتوى كتصنيف رسائل البريد الالكتروني لاستبعاد السيء منها أو تصنيف المراجعات النصية على المنتجات كإيجابية أو سلبية. يصنف تعلم الآلة إلى ثلاثة أنواع رئيسية تختلف بحسب نوع المشكلة التي يحلها، وطريقة تعامل النظام مع البيانات وشكلها وطريقة التعلم منها أثناء التدريب، وسنشرحها في الفقرات التالية. التعلم الموجه Supervised Learning النوع الأساسي والأكثر استخداماً في تعلم الآلة، حيث يتدرب فيه النظام على البيانات والإجابات الصحيحة المقابلة لها، فيحللها ويستنتج تلقائيًا العلاقة بينها ليصبح قادرًا بعد التدريب على التنبؤ بإجابات بيانات جديدة لم يرها من قبل، وتقسم تلك بيانات وإجاباتها إلى قسمين قسم كبير عادةً يكون 80% منها لتدريب النظام والباقي 20% تستخدم لاختبار دقة وكفاءة النظام. تنقسم الخوارزميات المستخدمة في التعلم الموجه لنوعين أساسيين بحسب نوع التنبؤات المطلوبة وهي: التصنيف Classification لتقسيم البيانات إلى فئات كتصنيف رسائل البريد الإلكتروني إلى جيدة أو سيئة، ومن الخوارزميات المستخدمة فيه الانحدار اللوجستي Logistic Regression للتصنيف الثنائي، وأشجار القرار Decision Trees لتصنيف القرارات ونتائجها المحتملة الانحدار Regression للتنبؤ بقيم رقمية، كسعر منتج معين أو درجة حرارة الطقس ومن الخوارزميات التي يستخدمها الانحدار الخطي Linear Regression والانحدار متعدد الحدود Polynomial Regression لاكتشاف العلاقة بين البيانات وتتوقع منها القيم للبيانات الجديدة التعلم غير الموجه Unsupervised Learning يتعلم فيه النظام من البيانات فقط ليستكشف منها الأنماط والبنى المخفية فيها دون تدخل بشري وتنقسم الخوارزميات المستخدمة فيه لثلاث أنواع رئيسية: خوارزميات التجميع clustering وفيها يتم توزيع البيانات المتشابهة في مجموعات، كتصنيف زبائن متجر إلكتروني بحسب المشتريات او الاهتمامات، ومنها خوارزمية تجميع K-Means وخوارزمية التجميع الهيكلية Hierarchical Clustering قاعدة الارتباط Association rule تستكشف العلاقات في البيانات وتستنتج منها قواعد شرطية تُعبّر عن وجود بيانات في حال وجود أخرى تقليل الأبعاد Dimensionality Reduction تهدف لتقليل عدد المزايا أو المتغيرات في البيانات مع الحفاظ قدر الإمكان على المعلومات الموجودة في البيانات ومن خوارزمياتها تحليل مكون المبدأ Principal Component Analysis و التضمين المحلي الخطي Locally Linear Embedding التعلم المعزز Reinforcement Learning يركز على تعليم وكيل Agent كيف يتخذ قرارات عبر التجربة والخطأ ليحصل على أكبر قدر ممكن من المكافئات من البيئة التي يتفاعل معها ليحقق بالنهاية هدف معين، ومن تطبيقاته نماذج التحكم بالروبوتات العادية والصناعية، ونماذج لعب الألعاب التي تتجاوز مهارتها البشر. ويقسم إلى نوعين هما التعزيز الإيجابي Positive Reinforcement والذي يكافئ الأفعال التي تؤدي لحدث ما والتعزيز السلبي Negative Reinforcement والذي يكافئ الأفعال التي تسبب تجنب حدث ما. التعلم العميق Deep learning فرع متقدم من تعلم الآلة يعتمد على الشبكات العصبية Neural Networks متعددة الطبقات لاستخراج الأنماط والتوقعات من البيانات مباشرة، ويختلف عن تعلم الآلة التقليدي بقدرته على استخراج المزايا تلقائيًا عبر طبقات متتالية دون الحاجة لتدخل بشري، مع تحسين الأداء تدريجيًا عبر التدريب على كميات هائلة من البيانات. مثلًا عند استخدام شبكة عصبية التفافية Convolutional Neural Network للتعرف على الصور، تتعلم الطبقات الأولى كشف الحواف والأشكال البسيطة، ثم تتطور الطبقات العميقة لاكتشاف وجوه أو أجسام معقدة كلما زادت البيانات المعالجة، مما يحسن الدقة في التصنيف أو التنبؤ، أي يستطيع التعلم العميق استخراج المزايا بنفسه من أي نوع من البيانات. تُصنف طرق التعلم العميق ضمن الأنواع الثلاثة لتعلم الآلة التي ذكرناها سابقًا، ولكنها تتفوق بتنفيذها في التطبيقات المعقدة، مثل استخدامها لخوارزميات التصنيف Classification والانحدار Regression في التعلم الموجه، واستخدام التجميع Clustering في التعلم غير الموجه، وقدرته الممتازة في التفاعل ضمن البيئات الافتراضية في التعلم المعزز. من مزاياه قدرته على معالجة بيانات غير مهيكلة كالصور والنصوص بكفاءة عالية، ولكنه يتطلب كميات بيانات ضخمة وموارد معالجة قوية من كروت شاشة وذاكرة، وزمن تدريب طويل مما يجعله أقل كفاءة على بيانات صغيرة مقارنة بتعلم الآلة التقليدي. تشمل تطبيقاته التعرف على الوجوه والترجمة الآلية الفورية، وتشخيص الأمراض من الأشعة الطبية، والسيارات ذاتية القيادة، ومن التطبيقات التي شهرت هذا المجال وأبرزت قوته كان نموذج ألفا جو AlphaGo الذي استطاع بتطبيق التعلم المعزز التدرب على لعبة Go المعروفة بتعقيدها واستطاع هزيمة أبطال تلك اللعبة. الفرق بين تعلم الآلة والتعلم العميق التعلم العميق فرع ضمن مجال تعلم الآلة، وتكمن ميزة وفرق التعلم العميق في مرحلة استخراج المزايا Feature Extraction من البيانات قبل استخلاص النتائج المطلوبة منها، حيث يستطيع استخراج المزايا بنفسه ما يجعله أقوى في معالجة مجال أوسع من البيانات، بينما مجالات تعلم الآلة الأخرى تحتاج لمزايا مجهزة يدويًا مسبقًا بجانب البيانات لتتمكن من استخلاص النتائج المطلوبة منها. هذا الفرق يجعل طرق تعلم الآلة التقليدية خفيفة وسريعة ولا تحتاج لموارد معالجة قوية ولا حتى لكمية كبيرة من البيانات، على عكس التعلم العميق الذي يتطلب موارد معالجة وكميات بيانات كبيرة على حساب قدرته على معالجة بيانات معقدة والوصول لنتائج لا يمكن لتعلم الآلة التقليدي الوصول إليها، والجدول التالي يوضح أهم الفروقات بين المجالين: تعلم الآلة التعلم العميق البنية خوارزميات تتعلم من البيانات وتحسن أداءها مع الخبرة فرع من تعلم الآلة يعتمد على الشبكات العصبونية متعددة الطبقات كمية بيانات التدريب صغيرة إلى متوسطة بيانات ضخمة استخراج المزايا يدوي بتدخل بشري تلقائي يستخرجها مباشرة من البيانات وقت التدريب سريع بطيء قوة وكمية موارد المعالجة قليلة كبيرة الدقة تعتمد على جودة المزايا والخوارزمية المستخدمة عالية في حال وجود بيانات كافية خلاصة تعرفنا في هذا المقال عن مجالي تعلم الآلة والتعلم العميق والفرق بينهما إضافة لمتطلبات كل منها، هذا الفرق يوضح متى نختار كل منها للحصول على نتائج جيدة، وتذكر أن مجال تعلم الآلة أوسع ويشمل ضمنه مجال التعلم العميق. اقرأ أيضًا الذكاء الاصطناعي: دليلك الشامل كتاب مدخل إلى الذكاء الاصطناعي وتعلم الآلة المفاهيم الأساسية للذكاء الاصطناعي كل ما تود معرفته عن دراسة الذكاء الاصطناعي
- آخر أسبوع
-
بصراحة، صحيح أن خبرتي الرسمية سنة واحدة فقط، لكن خلال هذه السنة تجاوزت مستوى Mid، وهذا لم يأتِ بالصدفة. كنت أعمل وأتعلّم بشكل مكثف جدًا، بمعدل يصل إلى 14 ساعة يوميًا، وكنت دائمًا أبحث عن التحديات الأصعب. لهذا السبب طلبت تنفيذ مشروع أصعب من Social Media Platform، رغم أنني بالفعل نفذت منصة تواصل اجتماعي كاملة مع Real-Time Features باستخدام Bun.js – Nest.js – Next.js – Socket.IO. خلال هذا المشروع واجهت مشاكل معقدة، وتمكنت من حلها بنفسي دون الاعتماد على مساعدة خارجية، وهذا ما طوّر عندي مهارة حلّ المشاكل بشكل عملي، وليس نظري فقط. قد تبدو سنة الخبرة غير كافية للحكم بأنني وصلت لمستوى Senior (ولو بشكل جزئي)، لكن هذا الكلام مدعوم بمشاريع حقيقية مثبتة في الـ Portfolio الخاص بي، وليس مجرد ادّعاء. وبالنسبة لاقتراح تنفيذ مشروع E-commerce، فقد نفذته سابقًا بتقنيات Full-Stack منذ فترة. حاليًا أقوى مشروع لدي هو Social Media Developers Hub، ولهذا السبب أبحث عن مشاريع أكثر تعقيدًا، لأن لدي سرعة عالية في التعلّم والتنفيذ، وأحتاج تحديات أقوى تواكب مستواي الحالي. و بنسبة لتعامل مع Cloudinary + Multer فهاد موجود بكل مشروع انا مسوي يعني انا متعامل معهم بالفعل.
-
السلام عليكم، أنا مهتم جداً بكورس علوم الحاسوب وأحب أشتغل بعده SOC Analyst في مجال الأمن السيبراني. حابب أسأل: هل الكورس ده كفاية يبنيلي المهارات الأساسية المطلوبة لدخول وظيفة SOC، ولا محتاج أكمّل بشهادات أو كورسات إضافية؟ وهل فيه أمثلة لطلاب خلّصوا الكورس واشتغلوا في المجال ده؟ كمان، الدعم اللي بتقدموه للتوظيف بعد الكورس إيه بالضبط؟”
-
في كل عمليات إدخال تكون هكدا بالنسبة لتوليد رقم فاتورة
-
- 1 جواب
-
- 1
-
-
لن تجد مشروع حديث يتطلب تقنية JQuey ، فتلك تقنية من زمن قد ولى، ستجدها فقط في المشاريع القديمة Legacy والتي بها استخدام كبير لتلك المكتبة للدرجة التي يُصعب بها تحديث كامل المشروع لاستبدالها بجافاسكريبت، فالإحصائيات تشير إلى أن أكثر من 70% إلى 90% من مواقع الويب حول العالم لا تزال تستخدم jQuery وفقًا لموقع W3Techs. ومؤخرًا صدر الإصدار الرابع من JQuey على الرغم من أنّ المكتبة لا تُستخدم في مشاريع حديثة. والأمر يعود لمنصة ووردبريس التي تشغل 43% من الويب حيث تعتمد بشكل كبير على jQuery، وأي تحديث للمكتبة يعني تحسين أداء وأمان ملايين المواقع دفعة واحدة. والشركات الكبرى لديها أنظمة تعمل منذ سنوات تعتمد على jQuery، وإعادة كتابتها بتقنيات حديثة مكلفة جدًا، لذا هم بحاجة لنسخة أحدث وأسرع دون تغيير الكود بالكامل. تعلمها عند الحاجة فقط.
-
في الواقع العملي لا يتم استخدام المصطلحات العربية بالفعل، اللغة الإنجليزية هي لغة البرمجة، لكن الدارسين بالأكاديمية لغتهم الأولى هي العربية لذا المحتوى موجه لهم في المقام الأول، أي لا تنظر للأمر من جهتك أنت فقط، ويتم في معظم الدروس توضيح المصطلح بالإنجليزية أيضًا، وفي حال لم يتم ذكر ذلك، أرجو الاستعانة بموسوعة حسوب وابحث عن المصطلح وستجده بالعربية والإنجليزية. وفي حال واجهت صعوبة في استيعاب مصطلح ما، تستطيع الاستفسار أسفل الدروس وسيتم توضيحه لك، ويجب معرفة المصطلح بالعريبة والإنجليزية حتى تتمكن من البحث عنه بالرغم من أنّ الإنجليزية أهم بالطبع لكون المصادر أغلبها بالإنجليزية ولن تحتاج العربية إلا في حال شرح أمر ما لشخص آخر أو للفريق وحتى في تلك الحالة يتم استخدام المصطلحات الإنجليزية. وعامًة ستجد مصطلحات متكررة ومستخدمة في أغلب البرمجة ها هي: متغير - Variable: مكان في الذاكرة لتخزين البيانات. نوع البيانات - Data Type: يحدد نوع البيانات التي يمكن تخزينها في المتغير (مثل: نص، عدد صحيح، عدد عشري). عامل - Operator: رمز أو كلمة تستخدم لتنفيذ عملية على البيانات (مثل: + للجمع، - للطرح). تعبير - Expression: مجموعة من المتغيرات والعوامل التي تُرجع قيمة. شرط - Condition: تعبير منطقي يُرجع إما صحيح أو خطأ. جملة - Statement: سطر من التعليمات البرمجية التي تُنفذ مهمة محددة. كتلة - Block: مجموعة من الجمل التي تُنفذ معًا. دالة - Function: مجموعة من التعليمات البرمجية التي تُنفذ مهمة محددة وتُعيد قيمة. معامل - Parameter: قيمة تُمرر إلى دالة عند استدعائها. مصفوفة - Array: مجموعة من البيانات من نفس النوع مخزنة في مكان واحد. حلقة - Loop: تُستخدم لتكرار مجموعة من التعليمات البرمجية عدة مرات. مصفوفة ترابطية - Associative Array / Dictionary: مجموعة من البيانات مخزنة كأزواج من المفتاح والقيمة. كائن - Object: كيان يجمع بين البيانات والوظائف التي تعمل على هذه البيانات. فئة - Class: قالب لإنشاء الكائنات. وراثة - Inheritance: آلية تسمح لفئة ما بوراثة خصائص وصفات فئة أخرى. تعدد الأشكال - Polymorphism: القدرة على استخدام نفس الاسم لوظائف مختلفة في سياقات مختلفة. ملف - File: مجموعة من البيانات المخزنة على وسيط تخزين دائم. استثناء - Exception: حدث غير طبيعي يحدث أثناء تنفيذ البرنامج. معالجة الاستثناءات - Exception Handling: آلية للتعامل مع الاستثناءات ومنع تعطل البرنامج. وبالنسبة للمصطلحات الخاصة ببايثون: وحدة - Module: ملف يحتوي على تعليمات برمجية بايثون يمكن استخدامه في برامج أخرى. حزمة - Package: مجموعة من الوحدات النمطية. قائمة - List: مجموعة مرتبة من العناصر قابلة للتغيير. مجموعة - Tuple: مجموعة مرتبة من العناصر غير قابلة للتغيير. مجموعة - Set: مجموعة غير مرتبة من العناصر الفريدة. قاموس - Dictionary: مجموعة غير مرتبة من أزواج المفتاح والقيمة. تعليمة استيراد - Import Statement: تُستخدم لاستيراد وحدات أو حزم في البرنامج. ديكوريتور - Decorator: دالة تُعدل سلوك دالة أخرى. مولد - Generator: دالة تُعيد سلسلة من القيم. استدعاء ذاتي - Recursion: عندما تستدعي الدالة نفسها داخل تعريفها. تعبير لامبدا - Lambda Expression: دالة مجهولة تُعرّف وتُستخدم في سطر واحد. استيعاب القائمة - List Comprehension: طريقة لإنشاء قائمة جديدة من قائمة موجودة في سطر واحد. استيعاب المجموعة - Set Comprehension: طريقة لإنشاء مجموعة جديدة من مجموعة موجودة في سطر واحد. استيعاب القاموس - Dictionary Comprehension: طريقة لإنشاء قاموس جديد من قاموس موجود في سطر واحد. إدارة الحزم - Package Management: عملية تثبيت وتحديث وإزالة الحزم. بيئة افتراضية - Virtual Environment: بيئة معزولة لتشغيل مشروع بايثون بتبعياته الخاصة.
-
لا حاجة لسكراتش في حال لديك سابق دراية بالبرمجة، الفكرة من دراسة سكراتش هي تقديمك للمنطق البرمجي والمفاهيم الخاصة به مثل المتغيرات والجمل الشرطية وحلقات التكرار وكيفية الربط بينهم، وذلك بشكل بسيط دونّ استخدام أي كود. طالما لديك خبرة برمجية أو خلفية تقنية وقادر على تعلم البرمجة من خلال لغة برمجية مباشرًة، فلا مشكلة تستطيع تخطي ذلك المسار، وبقية المسارات مهمة لذا الأفضل دراستها لتحقيق استفادة. ودورة علوم الحاسوب تم إعدادها بشكل خاص لكي يتم تأهيلك لتعلم البرمجة، ففي البداية ستتعلم التفكير المنطقي في البرمجة وطريقة كتابة خوارزمية أو خطوات كتابة البرنامج قبل كتابة الكود أي التفكير أولاً، ثم تطبيق الأمر من خلال سكراتش لكون المنصة بسيطة وتوفر لك التعرف على المفاهيم البرمجية بطريقة ممتعة مثل حلقات التكرار والجمل الشرطية والمتغيرات وغيرها. أي لا نتعلم سكراتش بل المفاهيم البرمجية والمنطق البرمجي وكيفية التفكير قبل البدء في كتابة الكود، فتلك هي المرحلة الأهم وليس كتابة الكود. ثم الإنتقال لاستخدام لغة برمجية فعلية مثل بايثون وجافاسكريبت، ولو انتقلت إليهم مباشرًة، ستجد صعوبة في استيعاب المفاهيم البرمجية في حال لم يكن لديك أي خلفية تقنية أو برمجية سابقة. وهناك أمر هام يجب الإنتباه إليها، لا توجد طرق مختصرة لتعلم البرمجة، تسريع وتيرة عملية التعلم وتخطي الأساسيات يعني مستوى تعلم سطحي لن يصل بك بعيدًا، وفي الوقت الحالي الأساسيات هي الأهم أكثر من أي وقتٍ مضى.
-
وبالنسبة للرواتب المبتدئين في مجال تطوير التطبيقات بأستخدام الجافا السكربت في رينج كم وأنا باخد الراتب الي كتبته في الذكاء الأصطناعي مباشرة بعد الأنتهاء من الدورة يعني
-
منطق الكود الحالي غير مناسب للعمل في بيئة متعددة المستخدمين، فأنت تعتمد على توليد رقم الفاتورة وعرضه في TextBox قبل الحفظ، ولو فتح موظف ما شاشة البيع وحصل على رقم فاتورة 105، وفتح موظف آخر الشاشة في نفس اللحظة وحصل أيضاً على 105، فأول من يحفظ سينجح، والثاني سيحصل على خطأ Primary Key Violation أو سيقوم بتحديث فاتورة زميله حسب التصميم. لذا رقم الفاتورة يجب أن يولد لحظة الحفظ داخل قاعدة البيانات أو داخل الـ Transaction، ولا يؤخذ من الشاشة. كذلك استخدمت SqlDataAdapter لجلب كل الفواتير Select * ثم إضافة سطر واحد وحفظ الجدول بالكامل هو أسلوب يقتل سرعة البرنامج، فتخيل لو يوجد 100 ألف فاتورة، البرنامج سيقوم بتحميلها كلها للذاكرة فقط لإضافة فاتورة واحدة. الصحيح هو استخدام جملة INSERT INTO مباشرة عبر SqlCommand. وفي بيئة متعددة المستخدمين وحتى المستخدم الواحد، استخدام كائن اتصال static أو عام ومشارك، أمرخطير، فقد تتداخل الـ Transactions بين مستخدمين مختلفين إن لم يتم التعامل معها بحذر شديد. الصحيح هو إنشاء اتصال جديد new SqlConnection داخل جملة using لكل عملية حفظ. أيضًا قمت بالخصم من المخزون، لكن لو كانت الكمية المتبقية 5، وقام موظفان ببيع 3 قطع في نفس الثانية، فالكود الحالي سيسمح بذلك ويصبح الرصيد بالسالب (-1). وذكرت أنك تريد الاعتماد على حركة الصنف، لا مشكلة في ذلك، لكن من ناحية الأداء فلو أردت معرفة الرصيد الحالي، فلا يجب أن تقوم بجمع كل الحركات (مبيعات - مشتريات) من أول يوم للنظام في كل مرة تبيع فيها، لأن ذاك سيجعل النظام بطيئ مع الوقت. يجب أن تحتفظ بجدول Inventory به الرصيد الحالي لسرعة الاستعلام، وجدول ItemMovement لتسجيل التاريخ للتقارير والمراجعة، وقمت بذلك بالفعل لكن طريقة التنفيذ تحتاج تعديل، بحيث جدول Inventory يحتوي الرصيد الحالي اللحظي، ويتم التعديل عليه بالزيادة والنقصان لسرعة معرفة كم يوجد الآن؟ عند فتح فاتورة البيع. وجدول ItemDailyMovement هو سجل تاريخي لا يُحذف منه شيء، ولمعرفة رصيد الصنف بتاريخ قديم، أو مراجعة الحسابات، تقوم بجمع الحركات من ذلك الجدول. if (comboBox1.SelectedIndex == -1) { MessageBox.Show("الرجاء إدخال اسم زبون", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (dataGridView4.Rows.Count == 0) { MessageBox.Show("الرجاء إدخال أصناف في الفاتورة", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } decimal totalInvoice = 0; foreach (DataGridViewRow row in dataGridView4.Rows) { if (row.Cells[3].Value != null) totalInvoice += Convert.ToDecimal(row.Cells[3].Value); } textBox2.Text = totalInvoice.ToString("N2"); string totalAr = Class1.NumberToWords(Convert.ToDouble(textBox2.Text), "دينار ", "درهم"); using (SqlConnection con = new SqlConnection(Class1.sqlCon.ConnectionString)) { con.Open(); SqlTransaction trans = con.BeginTransaction(); try { string sqlInsertInvoice = @"INSERT INTO Invoices (invoice_date, customer_name, total_amount, total_ar) VALUES (@date, @cus, @total, @total_ar); SELECT SCOPE_IDENTITY();"; SqlCommand cmdInvoice = new SqlCommand(sqlInsertInvoice, con, trans); cmdInvoice.Parameters.AddWithValue("@date", dateTimePicker1.Value); cmdInvoice.Parameters.AddWithValue("@cus", comboBox1.Text); cmdInvoice.Parameters.AddWithValue("@total", totalInvoice); cmdInvoice.Parameters.AddWithValue("@total_ar", totalAr); object result = cmdInvoice.ExecuteScalar(); string newInvoiceID = result.ToString(); foreach (DataGridViewRow row in dataGridView4.Rows) { if (row.IsNewRow) continue; int itemId = Convert.ToInt32(row.Cells[5].Value); decimal qty = Convert.ToDecimal(row.Cells[1].Value); decimal price = Convert.ToDecimal(row.Cells[2].Value); decimal rowTotal = Convert.ToDecimal(row.Cells[3].Value); string itemName = row.Cells[0].Value.ToString(); string storeNum = row.Cells[4].Value.ToString(); string sqlDetails = @"INSERT INTO InvoiceDetails (invoice_number, item_name, item_id, inv_date, quantity, unit_price, total_price, store_number) VALUES (@invNo, @name, @id, @date, @qty, @price, @tot, @store)"; SqlCommand cmdDetails = new SqlCommand(sqlDetails, con, trans); cmdDetails.Parameters.AddWithValue("@invNo", newInvoiceID); cmdDetails.Parameters.AddWithValue("@name", itemName); cmdDetails.Parameters.AddWithValue("@id", itemId); cmdDetails.Parameters.AddWithValue("@date", dateTimePicker1.Value); cmdDetails.Parameters.AddWithValue("@qty", qty); cmdDetails.Parameters.AddWithValue("@price", price); cmdDetails.Parameters.AddWithValue("@tot", rowTotal); cmdDetails.Parameters.AddWithValue("@store", storeNum); cmdDetails.ExecuteNonQuery(); string sqlUpdateStock = @"UPDATE inventory SET quantity = quantity - @qty WHERE item_id = @id AND quantity >= @qty"; SqlCommand cmdStock = new SqlCommand(sqlUpdateStock, con, trans); cmdStock.Parameters.AddWithValue("@qty", qty); cmdStock.Parameters.AddWithValue("@id", itemId); int rowsAffected = cmdStock.ExecuteNonQuery(); if (rowsAffected == 0) { throw new Exception("الكمية غير متوفرة حالياً للصنف: " + itemName); } string dayName = dateTimePicker1.Value.ToString("dddd", new CultureInfo("ar-LY")); string sqlMove = @"INSERT INTO ItemDailyMovement (item_id, movement_date, day_name, quantity_sold, invoice_number, item_name, name_cus, type, invotry_num) VALUES (@id, @date, @day, @qty, @inv, @iname, @cus, 'مبيعات', @store)"; SqlCommand cmdMove = new SqlCommand(sqlMove, con, trans); cmdMove.Parameters.AddWithValue("@id", itemId); cmdMove.Parameters.AddWithValue("@date", dateTimePicker1.Value); cmdMove.Parameters.AddWithValue("@day", dayName); cmdMove.Parameters.AddWithValue("@qty", qty); cmdMove.Parameters.AddWithValue("@inv", newInvoiceID); cmdMove.Parameters.AddWithValue("@iname", itemName); cmdMove.Parameters.AddWithValue("@cus", comboBox1.Text); cmdMove.Parameters.AddWithValue("@store", storeNum); cmdMove.ExecuteNonQuery(); } Class1.OPER_CUSTOMERS(newInvoiceID, DateTime.Today, "مبيعات", totalInvoice, 0, comboBox1.Text, trans, label10.Text); trans.Commit(); MessageBox.Show("تم حفظ الفاتورة رقم " + newInvoiceID + " بنجاح", "تأكيد", MessageBoxButtons.OK, MessageBoxIcon.Information); fill_dgv3(); fill_dgv2_inv(); dataGridView4.Rows.Clear(); comboBox1.SelectedIndex = -1; textBox2.Clear(); label9.Text = ""; } catch (Exception ex) { trans.Rollback(); MessageBox.Show("فشل العملية: " + ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
- 3 اجابة
-
- 1
-
-
لعزل المشكلة، يجب التحقق من الخطوات التالية أولاً، في البداية تثبيت إصدار مستقر من Node.js https://nodejs.org/dist/v24.13.0/node-v24.13.0-win-x64.zip وبالطبع يجب حذف الإصدار الذي لديك بالكامل من خلال control panel ثم إعادة التشغيل وتثبيت الإصدار السابق. ثم تفقد Windows Defender Firewall فربما يمنع Node.js من الإتصال، بالخطوات التالية: افتح Windows Security اذهب إلى Firewall & network protection اضغط على Allow an app through firewall اضغط Change settings ابحث عن Node.js وتأكد أنه مفعل Private و Public وإن لم تجده، اضغط Allow another app وأضف مسار تثبيت Node على حاسوبك: C:\Program Files\nodejs\node.exe وفي ملف الاتصال بـ MongoDB أضف الخيارات التالية لاستخدام ipv4 const mongoose = require('mongoose'); mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true, serverSelectionTimeoutMS: 30000, socketTimeoutMS: 45000, family: 4 }) .then(() => console.log('MongoDB Connected')) .catch(err => console.log('Error:', err)); والتجربة. إن استمرت المشكلة، قم بتنفيذ التالي في CMD nslookup _mongodb._tcp.cluster0.mf8buxy.mongodb.net 8.8.8.8
-
وعليكم السلام ورحمة الله وبركاته. الأمر حقيقي ولكن المشكلة الحقيقية ليست في التشبع الكامل للسوق، بل في التشبع على مستوى المبتدئين الذين يمتلكون مهارات أساسية فقط. ولاحظ أن الأمر يزداد بسبب الذكاء الإصطناعي ولذلك أصبح عليك التعمق أكثر أو الجمع بين مهارات تقنية ومهارات أخرى: إذا جمعت بين البرمجة ومهارة أخرى مثل (UI/UX)، أو يمكنك توسيع مهاراتك بأن تصبح full stack . وملاحظة أخرى وهي الأهم أن تتخطى فكرة ال coder فالمستقبل لن يكون لمن يكتب الكود فقط، بل تحتاج لمعرفة كيفية تحسين أداء التطبيقات، كيفية بناء أنظمة قابلة للتوسع، كيفية كتابة كود نظيف وقابل للصيانة، هذه المهارات لا يتقنها الجميع، وبالتالي من يمتلكها يجد فرصاً أوسع بكثير.
-
السلام عليكم استفسار بخصوص حفظ فاتورة في حالة يعمل علي نظام أكثر من شخص بحيث يتم اصدار فاتورة أكثر من شخص في وقت واحد اعتماد رصيد صنف علي حركة صنف وليس تحديث مخزن بعد كل عملية بيع او تعديل فاتورة او فاتورة ترجيع هل كود صحيح بالنسبة للنظام يعمل عليه اكثر من شخص if (comboBox1.SelectedIndex == -1) { MessageBox.Show("الرجاء إدخال اسم زبون", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } if (dataGridView4.Rows.Count == 0) { MessageBox.Show("الرجاء إدخال أصناف في الفاتورة", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } string sql = ""; SqlDataAdapter adp; DataTable dt; SqlCommand sqlcmd; SqlCommandBuilder commandBuilder; if (Class1.sqlCon.State != ConnectionState.Open) { Class1.sqlCon.Open(); } SqlTransaction trans = Class1.sqlCon.BeginTransaction(); try { sql = "select *from Invoices "; sqlcmd = new SqlCommand(sql, Class1.sqlCon); sqlcmd.Transaction = trans; adp = new SqlDataAdapter(sqlcmd); dt = new DataTable(); adp.Fill(dt); DataRow dr = dt.NewRow(); dr["invoice_number"] = textBox1.Text; dr["invoice_date"] = dateTimePicker1.Value; dr["customer_name"] = comboBox1.Text; decimal total = 0; for (int i = 0; i <= dataGridView4.Rows.Count - 1; i++) { total += Convert.ToDecimal(dataGridView4.Rows[i].Cells[3].Value); } textBox2.Text = total.ToString("N2"); label9.Text = Class1.NumberToWords(Convert.ToDouble(textBox2.Text), "دينار ", "درهم"); dr["total_amount"] = textBox2.Text; dr["total_ar"] = label9.Text; dt.Rows.Add(dr); commandBuilder = new SqlCommandBuilder(adp); adp.Update(dt); //حركة زبون string des = " مبيعات "; Class1.OPER_CUSTOMERS(textBox1.Text, DateTime.Today, des, total, 0, comboBox1.Text, trans, label10.Text); /////حفظ تفاصيل فاتورة المبيعات sql = "select *from InvoiceDetails "; sqlcmd = new SqlCommand(sql, Class1.sqlCon); sqlcmd.Transaction = trans; adp = new SqlDataAdapter(sqlcmd); dt = new DataTable(); adp.Fill(dt); for (int i = 0; i <= dataGridView4.Rows.Count - 1; i++) { dr = dt.NewRow(); dr["invoice_number"] = textBox1.Text; dr["item_name"] = dataGridView4.Rows[i].Cells[0].Value; dr["item_id"] = dataGridView4.Rows[i].Cells[5].Value; // نفترض أن العمود السادس يحتوي على item_id dr["inv_date"] = dateTimePicker1.Value; dr["quantity"] = dataGridView4.Rows[i].Cells[1].Value; dr["unit_price"] = dataGridView4.Rows[i].Cells[2].Value; dr["total_price"] = textBox2.Text; dr["store_number"] = dataGridView4.Rows[i].Cells[4].Value; dt.Rows.Add(dr); commandBuilder = new SqlCommandBuilder(adp); adp.Update(dt); } for (int i = 0; i <= dataGridView4.Rows.Count - 1; i++) { int item_id = Convert.ToInt32(dataGridView4.Rows[i].Cells[5].Value); int quantitySold = Convert.ToInt32(dataGridView4.Rows[i].Cells[1].Value); DateTime movementDate = dateTimePicker1.Value; string dayName = movementDate.ToString("dddd", new CultureInfo("ar-LY")); // اسم اليوم بالعربية string invoiceNumber = textBox1.Text; string updateInventorySql = "UPDATE inventory SET quantity = quantity - @qty WHERE item_id = @item_id"; SqlCommand updateCmd = new SqlCommand(updateInventorySql, Class1.sqlCon, trans); updateCmd.Parameters.Add("@qty", quantitySold).Value = quantitySold; updateCmd.Parameters.Add("@item_id", item_id).Value = item_id; updateCmd.ExecuteNonQuery(); /// تسجيل حركة صنف يوميه string type = "مبيعات"; string insertMovementSql = @"INSERT INTO ItemDailyMovement (item_id, movement_date, day_name, quantity_sold, invoice_number,item_name,name_cus,type,invotry_num) VALUES (@item_id, @date, @day, @qty, @inv,@item_name,@name_cus,@type,@invotry_num)"; SqlCommand movementCmd = new SqlCommand(insertMovementSql, Class1.sqlCon, trans); movementCmd.Parameters.Add("@item_id", item_id).Value = item_id; movementCmd.Parameters.Add("@date", movementDate).Value = movementDate; movementCmd.Parameters.Add("@day", dayName).Value = dayName; movementCmd.Parameters.Add("@qty", quantitySold).Value = quantitySold; movementCmd.Parameters.Add("@inv", invoiceNumber).Value = invoiceNumber; movementCmd.Parameters.Add("@item_name", dataGridView4.Rows[i].Cells[0].Value.ToString()).Value = dataGridView4.Rows[i].Cells[0].Value.ToString(); movementCmd.Parameters.Add("@name_cus", comboBox1.Text).Value = comboBox1.Text; movementCmd.Parameters.Add("@type", type).Value = type; movementCmd.Parameters.Add("@invotry_num", dataGridView4.Rows[i].Cells[4].Value.ToString()).Value = dataGridView4.Rows[i].Cells[4].Value.ToString(); movementCmd.ExecuteNonQuery(); } trans.Commit(); MessageBox.Show("تم حفظ الفاتورة وتحديث كمية مخزن بنجاح", "تاكيد", MessageBoxButtons.OK, MessageBoxIcon.Information); fill_dgv3(); fill_dgv2_inv(); dataGridView4.Rows.Clear(); comboBox1.SelectedIndex = -1; textBox2.Clear(); textBox1.Text = "" + (Class1.CODE_GENE("Invoices", "invoice_id") + 1).ToString(""); label9.Text = ""; } catch (Exception ex) { trans.Rollback(); MessageBox.Show("فشل الاتصال بقاعدة البيانات: " + ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
- 3 اجابة
-
- 1
-
-
وبالنسبة للرواتب المبتدئين في مجال تطوير التطبيقات بأستخدام الجافا السكربت في رينج كم وأنا باخد الراتب الي كتبته في الذكاء الأصطناعي مباشرة بعد الأنتهاء من الدورة يعني
-
عدد الساعات ليس مقياس على الإطلاق لمدى جودة أي دورة أو محتوى، فالمدرب الخبير يستطيع شرح مفهوم في وقت أقل وبشكل أبسط مع عدم الإخلال بالمعلومات، لذا الأمر يعتمد على الكيف وليس الكم. لن يتم دراسة الواجهة الخلفية في تلك الدورة، بل تعريف بسيط عن Node.js وأداة إدارة الحزم الخاصة بها وهي NPM من أجل إدارة المكتبات التي نحتاج إلى تثبيتها للعمل على المشروع مثل Webpack. فأي تشغيل لكود جافاسكريبت خارج المتصفح يحتاج إلى تثبيت Node.js "للتبسيط لكن في الخلفية يتم العمل من خلال محرك جوجل كروم" فالإعدادات التي تكتبها في ملف webpack.config.js هو عبارة عن كود Node.js كل ما تحتاج معرفته عن Node.js في تلك الحالة هو طريقة الاستيراد والتصدير والفرق بين CommonJS و ESM وبخصوص ترتيب دراسة الدورات، فيجب دراسة دورة تطوير واجهات المستخدم أولاً، ثم دورة جافاسكريبت.
-
دورة بايثون هي الأنسب لك، تستطيع التواصل مع مركز المساعدة وإخبارهم بأنك تريد استبدال دورة جافاسكريبت بدورة بايثون وسيتم مساعدتك، ثم الإنتظار لبعض الوقت لحين الرد. فلغة بايثون هي اللغة الأساسية في مجال الذكاء الاصطناعي، وفي تلك الدورة سندرس ما يلي: رحلة شاملة في Python تبدأ من أبسط المفاهيم وتوصلك إلى إنشاء تطبيق عملي متكامل. التطبيقات العملية على بايثون، وتعلم التعامل مع مختلف الخدمات ستتمكن من إنشاء تطبيقات عملية متنوعة والتعامل مع خدمات متعددة، مثل قواعد البيانات، البريد الإلكتروني، ملفات Excel، واستخراج البيانات من الويب Web Scraping. ستتعرف على مفاهيم إطار العمل Django الأساسية والتطبيقية، وتطور مشروعًا عمليًا لإدارة المهام مع ربط التطبيق بالوظائف العملية المختلفة. ستتعلم أساسيات إطار العمل فلاسك Flask ثم ستتعرف على مفهوم الواجهات البرمجية APIs، وتطور واجهة برمجية. سنستخدم بوابة الدفع سترايب Stripe و PayPal في تطبيقاتنا، وسنتعلم مختلف طرق استعمالها. أساسيات تحليل البيانات وستتعلم مبادئ التعامل مع البيانات، ثم تتعمق في التحليل الإحصائي Statistical analysis والتصوير البياني Data visualization، ثم تطبق ما تعلمته عمليًا على أمثلة حقيقية. ستستكشف مبادئ تعلم الآلة Machine Learning وأنواعها الأساسية مثل الانحدار Regression، التصنيف Classification، والتجميع Clustering.
-
انا اشتركت في البكج تبع اول السنة عشان هيك اخدت دورة الذكاء الأصطناعي ودورة تطوير التطبيقات بأستخدام الجافا سكربت لكن لو في دورة افضل ممكن اخدها مع دورة الذكاء الأصطناعي تكون افضل كمهارة اضافية للذكاء الأصطناعي ياريت تدلوني
- 2 اجابة
-
- 1
-
