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

Khaled Osama3

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

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

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

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

    1

كل منشورات العضو Khaled Osama3

  1. نعم هكذا ستصبح العلاقات ولكن يوجد تعديل صغير في العلاقه بين القسم والمشرف يجب عكس العلاقه حتي تصبح هكذا
  2. 1- لو كل طالب ليه مشروع واحد بس: هنا هتكون علاقة "واحد لواحد" بين الطالب والمشروع. في الـ ERD هنرسمها كده: الطالب (1) --- يملك --- (1) المشروع 2- كل مشرف بيتبع قسم واحد بس: دي علاقة "واحد لعديد" من ناحية القسم للمشرفين، يعني كل مشرف ليه قسم واحد بس، بس القسم الواحد ممكن يكون فيه مشرفين كتير. هنرسمها: المشرف (M) --- يتبع --- (1) القسم 3,4- مشرف واحد بيشرف على طلاب كتير: دي علاقة "واحد لعديد" من المشرف للطلاب، يعني مشرف واحد ممكن يشرف على عدة طلاب. هنرسمها: المشرف (1) --- يشرف --- (M) الطلاب كده بقينا واضحين على شكل العلاقات: - الطالب والمشروع: (1 -> 1) - المشرف والقسم: (1 <- M) - المشرف والطلاب: (1 -> M)
  3. 1- العلاقة بين الطالب والمشاريع هنا قلت "الطالب M --- يضيف --- 1 المشاريع"، يعني كل طالب ممكن يضيف مشروع واحد أو أكتر، بس كل مشروع بيتم إضافته من طالب واحد بس. لو مشروع واحد ممكن أكتر من طالب يشارك فيه، يبقى هنا لازم نغير العلاقة لتبقى M -> M (عديد لعديد). 2- العلاقة بين المشرف والقسم "المشرف M --- يتبع --- 1 القسم"، يعني ان قسم واحد ممكن يكون فيه مشرفين كتير، بس كل مشرف بيتبع قسم واحد بس. وده منطقي لو الأقسام فيها مشرفين أكتر من واحد. 3- العلاقة بين الطالب والقسم هنا لازم يكون فيه علاقة "يتبع" بين الطالب والقسم، لأن كل طالب لازم يكون متبع لقسم واحد. فلو كل قسم فيه طلاب كتير، يبقى العلاقة هتكون "الطالب M --- يتبع --- 1 القسم". عشان نحقق العلاقات الصح بين الكيانات دي، لازم نعمل بعض التعديلات على تخطيط الـ ERD عشان يعكس الحالة بشكل مظبوط: العلاقة بين الطالب والقسم دي هتكون علاقة "واحد لعديد" (1->M)، لأن كل طالب بيتبع قسم واحد بس، بس القسم الواحد ممكن يكون فيه طلاب كتير. يعني هنرسمها: الطالب (M) --- يتبع --- (1) القسم
  4. الخطأ 405 "Method Not Allowed" بيحصل لما البرنامج مش بيدعم الطريقة HTTP اللي انت بتستخدمها في الطلب. بتحاول ترفع صورة عن طريق PUT request، وده فيه مشكلتين: 1- النماذج في HTML مش بتدعم PUT ولا DELETE، بتدعم بس GET و POST. 2- لما بترفع ملف (زي الصورة دي)، لازم تغير content type بتاع الطلب ل multipart/form-data مش application/json، علشان البرنامج يفهم انك بترفع ملف مش بيانات عادية. عشان تصلح المشكلة دي، ممكن تعمل كده: في البَاك اِند (PHP/Laravel): تأكد ان مسار ال PUT صحيح وبيدعم رفع الصور، وان ProfileController بيتعامل مع الطلبات دي صح. في الفرونت إند: 1- تقدر تستخدم النموذج بطريقة POST وتضيف input مخفي اسمه _method بقيمة put، كده Laravel هتفهم ان الطلب الحقيقي هو PUT: <form action="http://localhost:8000/api/users/image/${EMAIL}" method="post" enctype="multipart/form-data"> <input type='hidden' name='_method' value='put'> <input id='image' type='file' name='image' /> <input type="submit" id='sub' /> </form> 2- لو هتستخدم fetch، لازم تستخدم FormData عشان ترفع الملف صح: let handleImage = () => { let formData = new FormData(); formData.append("image", document.getElementById('image').files[0]); fetch(`http://localhost:8000/api/users/image/adham111mahfoud@gmail.com`, { method: "PUT", body: formData }) .then(res => res.json()) .then(data => console.log(data)) .catch(error => console.error('Error:', error)); } وماتنساش تشيل "Content-Type": "application/json" من headers لأن ال fetch هيضبط content type لوحده لما تستخدم FormData. بتطبيق هذه التعديلات، يجب أن يتم حل مشكلة الخطأ 405 وتكون قادرا على رفع الصور بشكل صحيح.
  5. في مجال برمجة الأجهزة زي الآيفون والآيبود، البايثون مش الخيار الأول عادة. لغات زي Swift والObjective-C هي الأنسب لبرمجة تطبيقات الآيفون لأنها بتدعم مميزات الios أحسن وبتديك أداء أعلى. بس ممكن تلاقي حلول بديلة زي Kivy أو BeeWare اللي بتخليك تكتب تطبيقات ios بالبايثون، بس مش هتبقى كفاءتها وأدائها زي التطبيقات المكتوبة بلغات البرمجة الأصلية. لو كنا بنتكلم عن برمجة تطبيقات الماك، البايثون بيبقى خيار كويس، وبتقدر تستخدمها لعمل واجهات مستخدم رسومية بمكتبات زي PyQt أو Tkinter. وكمان بتستعمل كتير في أتمتة المهام وإدارة الملفات على الماك. أما لو كنا بنتكلم عن الآيبود، برمجة تطبيقات جديدة ليه مش بتحصل كتير خصوصا للأجيال القديمة، ومش فيه طرق معروفة تخليك تستخدم البايثون لبرمجة الآيبود على طول. فالبايثون ممكن تستخدمها مع أجهزة الآيفون والماك لكن مع وجود قيود وبتبقى لغات تانية أنسب في كتير من الحالات.
  6. هنا استخدام الإكسيل ممكن يكون أقل لزوم مقارنة بآلات ولُغات البرمجة الأكتر تخصص زي البايثون والآر أو حتى الماتلاب اللي بتوفرلك مكتبات ووظايف مباشرة للتعامل مع خوارزميات تعلم المكنة المعقدة. بس ممكن لسه يفضل الإكسيل في حاجات زي دي ممكن تستعمل الإكسيل عشان تستكشف البيانات بسرعة وتعمل ملخصات أو رسومات بيانية فاهمة توزيع البيانات أو تحدد القيم الشاذة أو المفقودة قبل تنقلها لآلات أكتر متقدمة. الإكسيل بيساعدك تقدم البيانات بطريقة مفهومة لغير المختصين من خلال العروض أو التقارير. ممكن تاخد البيانات للآخرين من غير ما يستخدموا آلات متقدمة في شغلهم. أحيانا ممكن تستخدم الإكسيل تنقل البيانات بين المنظومات أو تنسقها قبل استخدامها في النماذج. فالإكسيل مش أساسي زي البايثون أو التينسورفلو بس معرفتها ممكن تديك مرونة أكتر في مهام محددة وتساعدك تشتغل بشكل تعاوني أحسن مع أقسام تانية.
  7. تعلم Excel لتحليل البيانات فيه لزمة كبيرة، وده حتى لو كنت بتستخدم لغات برمجة زي Python أو تقنيات SQL في مجال تحليل البيانات. وده لان Excel بيتعامل معاه في كل مكان في الشركات والمؤسسات في الدنيا. تعرف تستخدم Excel يعني إنك تقدر تتعامل مع البيانات في كل الأوضاع وتتواصل مع الناس اللي ممكن يكونوا مش مبرمجين ويفضلوا الأدوات الجرافيكية على البرمجة. وهو ايضا عنده واجهة مستخدم سهلة جدا بتساعدك تعمل تحليلات بسيطة وسريعة من غير ما تحتاج تكتب أكواد معقدة. ده بيخليه مثالي للمهام السريعة أو لما تحتاج تغييرات بسيطة على البيانات. و يمكنك من فهم تنسيقات بيانات مختلفة قبل نقلها لبايثون أو قواعد البيانات. قد تحتاج إلى التعامل مع أنظمة إدارية تخزن البيانات في Excel. فيه كتير من الأدوات القوية للتحليل الإحصائي والمالي، زي Pivot Tables، والدوال الإحصائية، والرسوم البيانية. Excel ممكن يكون نقطة انطلاق ممتازة لفهم الأساسيات قبل ما تتعلم أدوات أكثر تعقيدا زي Python وSQL. بالطبع، Python وSQL قويين جدا وبيتعاملوا مع بيانات أكبر وتحليلات أعقد. Python مفيد خصوصا في التحليل الإحصائي المتقدم والتعلم الآلي، وSQL ممتاز للتعامل مع الاستفسارات المعقدة على قواعد البيانات. بس استخدام Excel لسه مهم لأسباب كتير، وبيكمل مهاراتك في Python وSQL بتقديم حلول سريعة وفعالة في مواقف مختلفة. فهو لا يحل محل بايثون وSQL بالتأكيد، لكن معرفته تساعد خاصة في بداية العمل مع البيانات.
  8. االمشكله اللي بتواجهها دي غلطة شائعة بتحصل لما بتكون فيه مشكلة في تكوين قيود الـ Foreign Key في قواعد بيانات MySQL مع Laravel. النوع ده من الاخطاء بيظهر لما خصائص العمود اللي عايز تربطه بـ Foreign Key مش متطابقة مع خصائص العمود المرجعي في الجدول التاني. فيه أسباب محتملة كتير للغلطة دي اولهم ان نوع البيانات مش متطابق لازم نوع البيانات للعمود id_client في جدول evaluers يكون نفس نوع البيانات للعمود id في جدول clients. وبعد كدا لازم ان تتأكد من خصائص العمود لو العمود id في جدول clients بيستخدم خصائص زي UNSIGNED، لازم العمود id_client في جدول evaluers يكون معرف بنفس الطريقة. و لازم الترميز والترتيب للجداول المرتبطة يكون متطابق. علشان تحل الغلطة دي، ممكن تتأكد من النقط دي يجب ان تتأكد من تطابق نوع البيانات وخصائصه: Schema::create('clients', function (Blueprint $table) { $table->increments('id'); // لو كان بيستخدم increments مثلًا }); Schema::create('evaluers', function (Blueprint $table) { $table->unsignedInteger('id_client'); $table->foreign('id_client')->references('id')->on('clients'); }); لو الجدول بيستخدم ترميز معين، تأكد ان الجدول التاني بيستخدم نفس الترميز والترتيب. شغل عملية التهجير من جديد بعد ما تتأكد من صحة التعريفات: php artisan migrate:fresh دي هتحذف كل الجداول وتعيد إنشائها من جديد. تأكد من أنك لا تفقد بيانات مهمة قبل تنفيذ هذا الأمر. ما ينفعش خالص تتجاهل النوع ده من الغلطات، لأنه هيأثر على سلامة البيانات والعلاقات في قاعدة البيانات، واللي ممكن يسبب مشاكل في استرجاع البيانات أو تكامل البيانات في المستقبل. الأفضل دايمًا تصلح الغلطات دي على طول.
  9. الحدود بالصور border-image-slice في CSS تستخدم لتحديد كيفية تقسيم وتوزيع صورة الحدود حول العنصر. الفكرة إن خاصية border-image-slice دي بتقسم الصورة الخاصه بك اللي انت محددها كحدود للعنصر، إلى شبكة 3 في 3، يعني 9 أجزاء. 4 زوايا، و4 أطراف، وواحد في النص. المهم لما تحدد قيمة border-image-slice ، إنت بتقول للبراوزر يقطع الصورة من حوافها بالمسافات اللي انت محددها. يعني لو قلت border-image-slice: 1 ، معناها هيقطع من كل ناحية وحدة واحدة من الصورة. طيب لو الصورة بتاعتك مثلا تدرج لوني زي المثال، يبقى لما تقول border-image-slice: 1 ، ده معناه إنه هياخد وحدة واحدة من طرف الصورة ويطبقها كحدود للعنصر. فلو العنصر عندك input، وانت عاملها border-bottom بقيمة 5 بكسل، وبعدين حددت صورة التدرج ده في border-image-source ، فسيظهر الحد السفلي للinput فيه نفس ألوان التدرج اللوني ده بناء على القيمة اللي انت حددتها في border-image-slice. ده بيديلك شكل حلو خالص وبيخلي الواجهة بتاعتك أكتر جمال وجاذبية، خصوصا في النماذج والمدخلات اللي انت عايز تلفت النظر ليها شوية. فعشان كده المهندسين بيلجأوا لاستخدام الصور في الحدود علشان يضيفوا لمسات أنيقة وفنية على التصميم، بدل ما يستخدموا حدود عادية سوليد لونها واحد. كل ده بفضل الخاصايا الرهيبة دي في CSS. يمكنك معرفه المزيد من هنا
  10. جزاك الله خيرًا على كلماتك الطيبة. لإضافة خطوط فاصلة بين الصفوف والأعمدة يمكنك اضافه للجدول كلاس table-bordered حيث يضيف للحدود على كافة جوانب الجدول والخلايا. ام بالنسبه لعرض نص مختار من قائمة select عند الطباعة، يمكنك استخدام جافا سكريبت لقراءة القيمة المختارة وطباعتها في عنصر يمكن طباعته. سأضيف كود جافا سكريبت لهذه الوظيفة ستضيف سكربت جافاسكربت للصفحة: <script> function printPage() { // نقرأ القيمة المختارة من السيلكت var selectedText = document.getElementById('options-select').options[document.getElementById('options-select').selectedIndex].text; // نعرض القيمة دي في عنصر عشان نطبعها document.getElementById('selected-value').innerText = "القيمة المختارة: " + selectedText; // ونطبع window.print(); } </script> ونضيف عنصر فاضي عشان نحط فيه القيمة المختارة قبل ما نطبع، ونديله كلاس printable علشان يتطبع: <div id="selected-value" class="printable"></div> 3. ونغير الزر بتاع الطباعة عشان يستدعي الفنكشن printPage() دي: <button onclick="printPage()">اطبع الجدول والخيار المختار</button> كده لما المستخدم يدوس على الزر، هيقرأ القيمة المختارة من السيلكت، ويعرضها في الديف اللي عملناه، وبعدين يطبع الجدول والقيمة المختارة مع بعض. نظام تمام كده يا معلم؟ فهمت الفكرة؟
  11. لا مشكله يمكنك رويه هذا الملف لكي توضح اليك الامور اكثر index.html print.css
  12. لا شكر على واجب، يمكنك استخدام ميزة ورقة أنماط CSS مخصصة للطباعة. ورقة الأنماط هذه تمكنك من تحديد العناصر التي تريد طباعتها والعناصر التي تريد إخفاءها عند الطباعة. يجب انشاء ملف css مخصص للطباعة، ونضعه في راس الصفحة كده: <link rel="stylesheet" href="print.css" media="print"> في ملف print.css هنكتب الأنماط اللي عايزين نطبقها على العناصر اللي هتتطبع بس، زي مثلا: body, html { visibility: hidden; /* نخفي كل حاجة الأول */ } .printable, .printable * { visibility: visible; /* ونظهر بس اللي فيها كلاس printable */ } .printable { position: absolute; left: 0; top: 0; } بعدين في الجدول اللي عايز نطبعه نضيف كلاس printable عليه: <table class="table table-striped table-responsive printable"> <!-- كود الجدول هنا --> </table> وآخر خطوة نضيف زر للطباعة بيستخدم window.print(): <button onclick="window.print()">اطبع الجدول</button> عندما المستخدم يدوس على الزر ده، هيطبع الجدول بس لأن الأنماط في print.css خصصت إن اللي هيبان هو العناصر اللي فيها كلاس printable بس. وممكن كمان تضيف الكلاس ده على أي عنصر تاني عايز يتطبع زي select مثلا. وهكذا استطعنا التحكم في ايه اللي هيتطبع وايه اللي لأ عن طريق إضافة الكلاس printable عليه.
  13. في الاول يجب توضيح انه في عالم تطبيقات الويب، الجلسات والكوكيز هما طريقتين أساسيتين لحفظ معلومات المستخدمين وإدارة الجلسات بتاعتهم على المواقع. الجلسات (Sessions) الجلسة بتخزن المعلومات على السيرفر، يعني مش على جهاز المستخدم. ده بيساعد في حماية البيانات لأن محدش غير السيرفر يقدر يوصل لها. بتستخدم في حاجات زي تسجيل الدخول وحفظ محتويات سلة التسوق. والحاجة الحلوة فيها أنها بتنتهي لما تقفل المتصفح. الكوكيز (Cookies) الكوكيز دي ملفات صغيرة بتتخزن على جهاز المستخدم، وبتحتفظ بمعلومات يمكن استخدامها في زيارات لاحقة للموقع. بتستخدم في حاجات زي حفظ تفضيلات المستخدم أو حالة تسجيل الدخول حتى لو قفلت المتصفح وفتحته تاني. الفروق الأساسية بين الجلسات والكوكيز 1. مكان التخزين: الجلسات: على السيرفر. الكوكيز: على جهاز المستخدم. 2. الأمان: الجلسات: أأمن لأن البيانات مخزنة على السيرفر. الكوكيز: أقل أمان لأنها مخزنة في المتصفح وممكن تتسرب. 3. مدة الصلاحية: الجلسات: بتنتهي لما تقفل المتصفح. الكوكيز: يمكن تحديد مدتها لفترة معينة أو تنتهي لما تقفل المتصفح. وبالنسبة لسؤالك عن كيفية عمل تسجيل خروج تلقائي لما يغلق المستخدم الموقع، يمكنك استخدام الكوكيز بدلاً من الجلسات لأنها بتسمح لك تحدد مدة الصلاحية على إنها تنتهي بمجرد إغلاق الصفحة. ده يخلي الكوكيز تنتهي صلاحيتها لما المستخدم يقفل الصفحة، وكده لما يرجع تاني للموقع هيحتاج يعمل تسجيل دخول من جديد. لما المستخدم يعمل login، هنعمل كوكي نحط فيها معلوماته زي اليوزر أيدي أو الوقت. في كل صفحة من صفحات الموقع، هنتأكد لو الكوكي دي موجودة ولا لأ. لو مالقيناهاش يبقى المستخدم قفل الصفحة وراجع تاني، فهنرجعه على صفحة اللوجن. مثلا كده: لما المستخدم يعمل لوجن: if (isset($_POST['login'])) { // Check user credentials $expire = 0; // Expire cookie when browser closes setcookie("user_id", $user_id, $expire, "/"); setcookie("session_active", true, $expire, "/"); header("Location: index.php"); } وفي أول كل صفحة: if (!isset($_COOKIE['session_active'])) { header("Location: login.php"); } وعشان نعمل لوج أوت: setcookie("user_id", "", time() - 3600, "/"); setcookie("session_active", "", time() - 3600, "/"); header("Location: login.php"); كده هنضمن ان لما المستخدم يقفل الصفحة ويرجع تاني، الكوكي هتبقى مش موجودة وهنرجعه على صفحة اللوجن تلقائي من غير ما يقفل المتصفح خالص.
  14. لما بتعمل if favorites in counts: بايثون بتشوف لو المفتاح favorites موجود في القاموس counts ولا لأ. مش بتشوف على القيم خالص، بس بتدور على المفاتيح. يعني في القاموس counts عندما يرن if favorites in counts: بيشوف لو المفتاح 'python' موجود في القاموس counts ولا لأ، وبما انه موجود فعلاً، يبقى هيدخل على الجزء الأول ويزود القيمة البتاعته بواحد counts[favorites] += 1. لكن لو كان المفتاح مش موجود، يبقى هيدخل على else ويعمل مفتاح جديد في القاموس بقيمة 1. فلخصنا، لما بتستخدم in مع قاموس في بايثون، بتبقى بتدور على المفاتيح بس، مش على القيم. لكن لو اردت ان تدور على قيمة معينة جوه قاموس في بايثون، مينفعش نستخدم in عادي لأنها بتدور على المفاتيح بس مش القيم. لازم نستخدم طرق تانية، زي: 1. ندور على القيم من خلال دالة values()، زي: counts = {'python': 1, 'c': 0, 'c++': 0} value_to_find = 1 if value_to_find in counts.values(): print("القيمة موجودة في القاموس.") else: print("القيمة مش موجودة.") 2. ندور على القيمة من خلال حلقة تكرار، زي: counts = {'python': 1, 'c': 0, 'c++': 0} value_to_find = 1 found = False for key, value in counts.items(): if value == value_to_find: print(f"القيمة موجودة تحت المفتاح '{key}'.") found = True break if not found: print("القيمة مش موجودة.") 3. نستخدم list comprehension عشان نطلع قايمة بالمفاتيح اللي بتحوي القيمة دي، زي: counts = {'python': 1, 'c': 0, 'c++': 1} value_to_find = 1 keys_with_value = [key for key, value in counts.items() if value == value_to_find] if keys_with_value: print(f"القيمة موجودة تحت المفاتيح: {keys_with_value}") else: print("القيمة مش موجودة.") فالطرق دي بتساعدنا ندور على القيم في القواميس بطرق مختلفة، على حسب احتياجاتنا ايه بالظبط.
  15. دعنا نجرب ازالة البرنامج وإعادة تثبيته.
  16. نعم ، وضعهم فى مكان أخر غير هذا المجلد.
  17. يمكننا تجربة هذا الحل : 1-تأكد من إيقاف خادم Xampp بالكامل قبل المتابعة. 2- قبل القيام بأي تغييرات، من الجيد عمل نسخ احتياطية لملف ib_logfile في حال حدوث أي مشكلة. يمكنك العثور على هذا الملف في دليل بيانات MySQL (عادة ما يقع في C:\xampp\mysql\data). 3-حذف ملف ib_logfile: بمجرد أخذ نسخة احتياطية من الملف، جرب إزالة ملف ib_logfile من دليل بيانات MySQL. 4-بعد إزالة ملف ib_logfile، قم بإعادة تشغيل خادم Xampp وتحقق مما إذا كانت MySQL تبدأ بدون مشاكل.
  18. اخرج من خادم Xampp انتقل إلى دليل C:\xampp\mysql\data الخاص بك احذف ملف ibdata1 أعد تشغيل خادم xampp يجب أن يعمل. مهم: حذف هذا الملف قد يجعل أي بيانات MySQL موجودة غير قابلة للاستخدام. استخدم بحذر.
  19. اريد صور لل Error الذى يظهر.
  20. تبدو المشكلة لديك انك تحاول استخدام Port مستخدم من قبل. قم بإرسال ما يظهر فى ال Logs .
  21. المشاريع المفتوحة المصدر زي بايثون اللي بتبقى شفرتها مفتوحة للكل يراجعها ويغيرها ويوزعها. الموضوع ده فيه فوايد وتحديات من ناحية الأمان. لما بيبقى الكود مفتوح، يبقى في مجتمع كبير من المبرمجين بيراجعوه وبيحللوه، فساعتها بيبقى فيه احتمالية أكبر انهم يلاقوا أي ثغرات أو أخطاء ويصلحوها بسرعة. كمان المساهمات من المجتمع بتعني تحديثات أمنية على طول وتحسينات في الأداء والميزات. المشاريع المفتوحة المصدر اللي بقت شهيرة بتبقى خاضعة لمراجعات أمنية دقيقة، فابتبقى موثوقة للاستخدام في بيئات الإنتاج. طبعا لما بيبقى الكود متاح للكل، يبقى المهاجمين كمان ممكن يراجعوه ويدوروا على ثغرات. بس ده مش بيبقى في صالح المهاجمين بس، لأن الكل بيقدر يشوفه فا بيساعد كمان في الدفاع. استخدام مكتبات أو أكواد من مصادر مش موثوقة من غير مراجعة كويسة، ده ممكن يسبب مشاكل أمنية. نظريا، ممكن المساهمات تشمل أكواد ضارة. بس في المشاريع الكبيرة بتبقى فيه مراجعات للكود ونظام طلبات السحب، فا دي بتشتغل زي حواجز أمان لمنع حصول كده. في الآخر، لو انت بتشوف ان الكود المفتوح ممكن يكون مصدر قلق أمني، بس الشفافية والتعاون اللي بتيجي من المشاريع المفتوحة المصدر بتساعد في تعزيز الأمان في الواقع. والأهم من كل ده، هو استخدام التكنولوجيا بطريقة واعية ومسئولة، متابعة التحديثات الأمنية، والمشاركة في المجتمعات عشان تحسن الأمان لينا كلنا.
  22. الشريحة السوداء مصممة لأداء وظائف محددة كما هو مطلوب في الجهاز. في حالة الآلة الحاسبة، هذه الشريحة تحوي البرمجة اللازمة لأداء العمليات الحسابية. وهي تحتوي على برمجة ثابتة تُعرف بـ "firmware". أما بخصوص التعديل على هذه الرقاقة، فعادة ما تكون الرقاقات المستخدمة في الأجهزة الإستهلاكية مثل الآلات الحاسبة وألعاب الأطفال مبرمجة من قبل الشركة المصنعة ولا يسمح بتعديلها من قبل المستخدم النهائي. هذا لأنها تكون مبرمجة في المصنع بواسطة آلات خاصة وبرمجيات معقدة. الرقاقات القابلة للبرمجة كما في الألعاب أو الأجهزة الإلكترونية الأخرى، تكون عادة من نوع EEPROM أو Flash ويمكن برمجتها باستخدام أجهزة خاصة وبرمجيات معينة. إذا كنت ترغب في التعديل على البرمجة الخاصة بهذه الشريحة، سيكون ذلك صعبا بدون الأدوات المناسبة والمعرفة التقنية. قد تحتاج إلى معرفة الشركة المصنعة للرقاقة والحصول على الأدوات والبرمجيات المخصصة لهذه العملية، والتي غالبا ما تكون محفوظة للمطورين والمصنعين.
  23. الرقاقة الدائرية الشكل السوداء التي وجدتها داخل الحاسبة ربما تكون ذاكرة روم ROM (Read Only Memory). الروم هي ذاكرة دائمة غير قابلة للمسح أو الكتابة، تخزن البرمجيات والتعليمات الأساسية لتشغيل الجهاز. أما التعديل على برمجتها فيتطلب خبرة فنية عالية ومعدات متخصصة. عادة، البرمجة الموجودة على هذه الشرائح تكون ثابتة (فيرموير) ولا يمكن تغييرها بسهولة. إذا كنت ترغب في استبدالها أو التعديل عليها، فستحتاج إلى: تحديد النوع الدقيق للشريحة: هذا قد يكون صعبًا نظرًا لأن معظم الشرائح من نوع COB لا تحتوي على تسميات واضحة. الحصول على المعدات اللازمة للقيام بالبرمجة مثل مبرمجات الشرائح (Chip Programmer) والمعرفة الفنية لاستخدامها. إذا كانت الشريحة قابلة للبرمجة ولديك القدرة على برمجتها، فستحتاج إلى البرمجة الصحيحة أو الكود المصدري للقيام بالتعديلات اللازمة. إذا كنت جديدا في هذا المجال، فقد يكون من الأفضل طلب المساعدة من مختص أو البحث عن دورات تدريبية متخصصة في هذا المجال. لذا أنصح بعدم محاولة فتح أو تعديل محتوى الروم، لئلا تتلف أو تضر الجهاز. يمكن لاحقا الاطلاع على محتوى الروم من خلال برمجيات خاصة دون تعديلها. تقبل تحياتي.
  24. السلام عليكم سبب استخدام return فقط هو أن الدوال هي وحدات برمجية تنفذ عملية ما وربما تعيد نتيجة. بالتالي يمكن استخدام return لتحديد القيمة التي ستعاد من الدالة عند اكتمال تنفيذها. أما خارج الدوال، فلا داعي للعودة بقيمة معينة، لذا لا يمكن استخدام return. وبالنسبة للدوال لامبدا، دالات Lambda تُعرّف بأنها تحتوي على تعبير واحد فقط يُقيم ويُرجع قيمته تلقائيًا دون الحاجة إلى استخدام الكلمة الأساسية return. بمعنى آخر، دالة Lambda تُرجع النتيجة المُقيمة لتعبيرها الوحيد بشكل تلقائي. فمثلا: # دالة Lambda التي تقوم بجمع رقمين add = lambda x, y: x + y # استدعاء الدالة وطباعة النتيجة print(add(5, 3)) # يُطبع: 8 في المثال أعلاه، lambda x, y: x + y هي دالة Lambda تأخذ رقمين كمدخلات وتُرجع مجموعهما. لاحظ أننا لم نستخدم الكلمة return لأن قيمة التعبير x + y تُرجع تلقائيًا. في النهاية return تستخدم فقط داخل الدوال لتحديد القيمة المرجعية.
  25. وعليكم السلام، لتعلم إطار عمل مثل Node.js بنجاح، من المهم تحديد المستوى الذي أنت عليه حاليا والمهارات الأساسية التي قد تحتاج إلى تطويرها قبل الغوص في التعلم. إليك بعض العلامات التي تدل على أنك مستعد لبدء تعلم إطار عمل معين فيجب أن تكون لديك فهم جيد لأساسيات البرمجة، مثل المتغيرات، الدوال، الحلقات، والشروط. قبل الدخول في تعلم إطار عمل مثل Node.js، يجب أن تكون لديك خبرة جيدة بلغة JavaScript، لأن Node.js يعتمد عليها بشكل أساسي. وفهم البرمجة الكائنية، والوعود (Promises)، والتعامل مع البيانات بشكل غير متزامن (Async/Await)، لأن هذه المفاهيم شائعة جدًا في تطوير الباك إند. القدرة على التفكير بشكل منطقي وحل المشكلات هي مهارة أساسية يجب أن تكون لديك قبل البدء في تعلم إطار عمل. فهم كيفية عمل الويب، مثل طلبات HTTP، الـREST APIs، وقواعد البيانات. إذا وجدت نفسك تحتاج إلى تطوير في أحد هذه المجالات، فقد يكون من الحكمة التركيز على تحسين هذه المهارات قبل التوجه نحو تعلم إطار العمل. شراء دورة في علوم الحاسوب قد يكون خطوة جيدة لبناء فهم أعمق لهذه المفاهيم والمهارات. لا تشعر بالإحباط من التجربة السابقة مع Node.js. التعلم من الفشل وتحديد المجالات التي تحتاج إلى تحسينها هي جزء من عملية التعلم. قد تجد أن الدورة التي اشتريتها تساعدك في بناء أساس قوي يسمح لك بالنجاح في المحاولات المستقبلية.
×
×
  • أضف...