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

Mustafa Suleiman

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

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

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

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

    365

كل منشورات العضو Mustafa Suleiman

  1. أولاً عليك تفهم أنك تريد نسخ الملف الأول path1 إلى المجلد الموجود في path2، لذلك: عليك التحقق من أن الملف الذي تحاول نسخه موجود في المسار path1، فإن كان الملف غير موجود، ستحصل على خطأ. تأكد من أن المجلد الذي تحاول نسخ الملف إليه موجود في المسار path2، فلو كان المجلد غير موجود، ستحصل على خطأ. تأكد من أن لديك أذونات كافية لقراءة الملف الموجود في path1 ولكتابة الملف في path2. تأكد من أن المسارات التي تم إدخالها في path1 و path2 تحتوي على اسم الملف الذي ترغب في نسخه، فلو كنت تحاول نسخ ملف يسمى "file.txt"، يجب أن تكون المسارات تحتوي على اسم الملف، مثل "/path/to/source/file.txt" و "/path/to/destination/file.txt". تستطيع أيضًا استخدام الأمر try وexcept للتعامل مع الأخطاء المحتملة، كالتالي: from shutil import copyfile path1 = input("Please enter the source file you want to copy: ") path2 = input("Please enter the destination path where you want to copy the file: ") try: copyfile(path1, path2) print("File copied successfully.") except FileNotFoundError: print("Source file not found.") except IsADirectoryError: print("Destination is a directory. Please provide a full destination path including the file name.") except PermissionError: print("Permission denied. Make sure you have the necessary permissions.") except Exception as e: print(f"An error occurred: {e}") ويمكن تحسين التحقق من وجود الملف والمجلد بطرق أفضل باستخدام الوحدة os في Python، كالتالي: from shutil import copyfile import os path1 = input("Please enter the first track you want to copy to your device : ") path2 = input("Please enter the directory you want to copy the track to : ") # Check if the first track exists if not os.path.isfile(path1): print("The first track does not exist. Please enter a valid file path.") return # Check if the directory exists if not os.path.isdir(path2): print("The directory does not exist. Please enter a valid directory path.") return # Copy the first track to the directory copyfile(path1, os.path.join(path2, os.path.basename(path1))) والفكرة من السطر التالي: copyfile(path1, os.path.join(path2, os.path.basename(path1))) هو أنه يتم تحديد مسار الملف المصدر ببساطة باسم الملف المدخل من المستخدم، وتحديد مسار الملف الوجهة باستخدام دالة os.path.join()، حيث أن دالة os.path.join() تأخذ عدة مسارات كمدخلات وتعيد مسارًا واحدًا يتضمن جميع المسارات المدخلة. بمعنى أنه تم استخدام الدالة os.path.join() لإنشاء مسار ملف يتضمن مسار المجلد path2 واسم الملف path1، فلو كان path1 هو "track1.mp3" وpath2 هو "/home/user/music"، فإن الدالة os.path.join() ستعيد المسار "/home/user/music/track1.mp3".
  2. باختصار، الدالة callback هي دالة يتم تمريرها كوسيطة إلى دالة أخرى، ويتم استدعاؤها من قبل الدالة الخارجية بعد اكتمال المهمة التي تم تعيينها لها، والدالة نفسها ليس غير متزامنة بل هي دالة متزامنة، لكن الدالة الخارجية المسؤولة عن استدعاء الدالة أي عمل callback لها هي الدالة الغير متزامنة. وفي جافاسكريبت، يتم تنفيذ الدوال بشكل متزامن بشكل افتراضي، مما يعني أن الدالة يتم تنفيذها من البداية إلى النهاية قبل الانتقال إلى الدالة التالية، ولكن هناك بعض المهام التي قد تستغرق وقتًا طويلاً للتنفيذ، مثل تحميل ملف أو الاتصال بقاعدة بيانات، وفي تلك الحالات Asynchronous Execution، لا نريد أن تتوقف البرامج الأخرى عن العمل حتى تكتمل تلك المهام. وبالتالي تُستخدم الدوال callback لحل تك بدلاً من انتظار انتهاء المهمة، نقوم بتمرير الدالة callback إلى الدالة الخارجية، وبعد اكتمال المهمة تقوم الدالة الخارجية باستدعاء الدالة callback، والتي يمكنها بعد ذلك التعامل مع النتيجة. مثال بسيط لنفترض أننا نريد تحميل ملف من الإنترنت، يمكننا استخدام الدالة fetch() للقيام بذلك، ولكن تلك الدالة ترجع قيمة غير معرفة حتى يكتمل تحميل الملف، أي أنها دالة غير متزامنة. const file = fetch("http://example.com/quran"); بدلاً من ذلك، يمكننا استخدام الدالة fetch() مع دالة callback، بحيث سيتم استدعاء الدالة callback بعد اكتمال تحميل الملف، وسيكون لها الوصول إلى نتيجة fetch()، كالتالي: fetch('http://example.com/quran') .then(response => response.json()) .then(data => console.log(data)) .catch(err => console.error(err)); بمعنى أن then(response => response.json()) هو callback function يتم تمرير الوعد (Promise) المُرجع من fetch إليها ويتم تنفيذها عندما يتم حل الوعد بنجاح، وهي تقوم بتحويل الاستجابة إلى شكل JSON، ونفس الأمر بالنسبة لباقي الدوال. أمثلة أخرى: استخدام setTimeout: function sayHello() { console.log("Hello!"); } setTimeout(sayHello, 2000); // سيتم استدعاء الدالة sayHello بعد 2 ثانية تمرير دالة كمعامل لدالة أخرى: let numbers = [1, 2, 3, 4, 5]; function printNumber(num) { console.log(num); } numbers.forEach(printNumber); // سيتم استدعاء الدالة printNumber لكل عنصر في المصفوفة كدوال مستجيبة للأحداث (Event Handlers): // تعريف دالة callback function handleClick() { console.log("Button Clicked!"); } // تعيين الدالة callback كمعالج لحدث النقر const buttonElement = document.getElementById("myButton"); buttonElement.addEventListener("click", handleClick); وبخصوص: صحيح، فنحن نريد استخدامها لتنفيذ أمرًا ما في وقت معين وليس استدعائها على الفور، ولكن يجب العلم أنها دوال مستقلة أي نقوم بتعريفها كما بالمثال السابق ثم نقوم بتمريرها بدون كتابة القوسين () الخاصين بتنفيذ الدالة حتى يتم استدعائها من قبل الدالة الخارجية. وستجد هنا تفاصيل أخرى:
  3. المشكلة في الكود هي أنك لم تقم بتحويل النص العربي إلى صيغة bidi قبل عرضه في عنصر Text وإحدى الطرق لفعل ذلك هو استخدام مكتبة PyArabic كالتالي: from tkinter import * import pyarabic.araby as araby # Create Object root = Tk() frame2 = Frame() frame2.pack(pady=10) address = Text(frame2, width=37, height=10) address.pack() # Convert Arabic text to bidi text = "مرحبا بكم في موقعنا" bidi_text = araby.to_bidi(text) # Display bidi text address.insert(END, bidi_text) add_bidi_support(address) #address root.mainloop() أو من الممكن الإعتماد على مكتبة أخرى مثل arabic_reshaper كالتالي: from tkinter import * import arabic_reshaper # Create Object root = Tk() frame2 = Frame() frame2.pack(pady=10) address = Text(frame2, width=37, height=10) address.pack() # Convert Arabic text to bidi text = "مرحبا بكم في موقعنا" bidi_text = arabic_reshaper.reshape(text) # Display bidi text address.insert(END, bidi_text) add_bidi_support(address) #address root.mainloop()
  4. من الممكن الإعتماد على JavaServer Pages (JSP) أو Servlets لبناء واجهة المستخدم والتفاعل مع مشروع Java، وسأوضح لك الأمر من خلال JSP . قم بإنشاء مشروع Java في محرر الأكواد مثل Eclipse أو IntelliJ IDEA. إنشاء صفحة JSP جديدة في مشروعك، من خلال إنشاء ملف بامتداد ".jsp" في مجلد ويب الخاص بمشروعك. في صفحة JSP ، تستطيع كتابة HTML واستخدام عناصر مثل <form> و <input> لإنشاء واجهة المستخدم، كالتالي: <!DOCTYPE html> <html> <head> <title>إدخال بيانات العميل</title> </head> <body> <form action="AddCustomerServlet" method="post"> <label for="name">الاسم:</label> <input type="text" id="name" name="name" required><br> <label for="email">البريد الإلكتروني:</label> <input type="email" id="email" name="email" required><br> <input type="submit" value="إضافة"> <input type="reset" value="مسح"> </form> </body> </html> 4- بعد ذلك قم بإنشاء Servlet لمعالجة البيانات المدخلة من الصفحة HTML، ويجب أن يتم تطابق قيمة action في عنصر <form> مع اسم Servlet الخاص بك، كالتالي: import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; public class AddCustomerServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // استخراج بيانات العميل من الطلب String name = request.getParameter("name"); String email = request.getParameter("email"); // هنا يمكنك تنفيذ الكود الخاص بإضافة البيانات إلى قاعدة البيانات أو القائمة الخاصة بك // إعادة توجيه المستخدم إلى صفحة HTML أخرى بعد إكمال الإضافة response.sendRedirect("confirmation.jsp"); } } 5- عليك تكوين ملف "web.xml" لربط Servlet بمسار الـ URL الذي ترغب في استخدامه، ويجب تحديد اسم الـ Servlet والمسار النهائي. مثال: <servlet> <servlet-name>AddCustomerServlet</servlet-name> <servlet-class>com.example.AddCustomerServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>AddCustomerServlet</servlet-name> <url-pattern>/AddCustomerServlet</url-pattern> </servlet-mapping> الآن تستطيع تشغيل تطبيقك على خادم ويب مثل Apache Tomcat، وعندما تقوم بزيارة صفحة JSP في متصفح الويب وتملأ النموذج وتقوم بالإرسال، سيتم معالجة البيانات بواسطة الـ Servlet ويمكنك تنفيذ الإجراءات اللازمة مثل إضافة البيانات إلى قاعدة البيانات.
  5. الأسئلة الإختبارية لا يتم حلها بشكل مباشر، ولكن يمكن إرشادك لخطوات الحل: 1- قم ببداية البرنامج بتضمين المكتبات اللازمة للإدخال والإخراج وللتعامل مع الأخطاء، وعليك استخدام #include لتضمين المكتبات iostream و stdexcept، والمكتبة iostream تمكننا من استخدام الإدخال والإخراج، بينما المكتبة stdexcept تساعدنا في التعامل مع الأخطاء. #include <iostream> #include <stdexcept> // للتعامل مع الأخطاء using namespace std; 2- إنشاء دوال للعمليات الرياضية المختلفة التي يمكن تنفيذها (الجمع، الطرح، الضرب، القسمة)، بحيث كل دالة تستقبل عددين وتقوم بإجراء العملية المطلوبة. 3- إنشاء الدالة الرئيسية main التي ستقوم بالتفاعل مع المستخدم واستدعاء الدوال المناسبة. 4- في الدالة divide، نقوم برمي استثناء من نوع runtime_error إذا تم محاولة القسمة على الصفر، ثم في الدالة الرئيسية main، نستخدم تعبير try-catch للتعامل مع هذا الاستثناء وعرض رسالة الخطأ إذا حدث. 5- تنفيذ البرنامج واتباع التعليمات لإدخال الأرقام ونوع العملية، والبرنامج سيقوم بإجراء العملية وعرض الناتج أو رسالة الخطأ إذا كانت هناك أخطاء.
  6. كان هناك العرض الصيفي حيث تحصل على دورتين بسعر دورة واحدة ولكن لم يعد متاح حاليًا، ولكن للتأكد من توافر أي عرض أو كوبون عليك التحدث لمركز المساعدة للتأكد من توافر ذلك (غير متوفرة دائماً) . ويتم توفير عروض في المناسبات مثل رمضان وأحيانًا في فترة الإجازات الصيفية وأحيانًا في فترة التخفيضات السنوية الخاصة بالجمعة البيضاء، وفي بعض الأحيان يتم توفير كوبونات.
  7. هناك عدّة مجالات يمكنك العمل بها الآن وهم: مطور Full-stack لبناء مواقع الويب والمتاجر الإلكترونية أي قادر على تطوير الواجهة الأمامية والخلفية أيضًا من خلال Django و Flask. مطور واجهة خلفية Back-End فقط. مجال تعلم الآلة ولكن هنا أنت بحاجة إلى تعلم المزيد وعدم الإكتفاء بالدورة والأمر بحاجة إلى وقت أكثر من أي مجال آخر. محلل بيانات (Data Analyst )، حيث ستتمكن من استخدام مهارات البرمجة الخاصة بك للتحليل واستخراج البيانات من مصادر متنوعة، ومعالجة البيانات، وإجراء التحليلات الإحصائية والتعلم الآلي باستخدام مكتبات Python مثل pandas و NumPy و scikit-learn. مطور odoo وستجد شرح مفصل أكثر هنا:
  8. الفكرة هي في أن الشرط غير صحيح، هنا: elif num == num + 1 or num == num - 1: فأنت تقوم بمقارنة قيمة num بـ num + 1 و num - 1، أي إذا كانت قيمة num تساوي 7، فسيكون num + 1 يساوي 8 و num - 1 يساوي 6. وبما أن num ليست تساوي 8 أو 6 في بداية البرنامج، فإن الشرط سيكون غير صحيح، وبالتالي لن يتم طباعة 'close'. لذلك عليك أنت تحديد الرقم، كالتالي: elif num == 7 - 1 or num == 7 + 1: ويمكن كتابة الكود بشكل أفضل كالتالي: num = int(input('Please enter a number: ')) if num == 7: print('You won!') elif num in (6, 8): print('Very close') else: print('You lost')
  9. الأسئلة الإختبارية لا يتم حلها بشكل مباشر، ولكن يمكن مساعدتك بإرشادك لخطوات الحل: والمطلوب هو تصميم نظام التحكم بالحالة والمراقب باستخدام MATLAB وSimulink، ويتم الأمر كالتالي: 1- إثبات التكافؤ في MATLAB تبدأ بتعريف الدالة الانتقالية في MATLAB وتحويلها إلى تمثيل حالة المساحة الحالية. تتحقق مما إذا كان تمثيل حالة المساحة يتطابق مع الشكل المعطى في السؤال. 2- محاكاة النظام في Simulink تقوم بإنشاء نموذج Simulink باستخدام تمثيل حالة المساحة للنظام. تعين الظروف الابتدائية على [0.5، 0، 0]. تشغل المحاكاة وتراقب استجابة النظام. 3- فحص إمكانية التحكم في MATLAB تستخدم دالة "ctrb" في MATLAB لفحص إمكانية التحكم في النظام. 4- حساب أقطب الحلقة المغلقة المرغوبة تقوم بحساب أقطب الحلقة المغلقة المرغوبة بناءً على وقت الاستقرار المرغوب وزيادة الانفراج المسموح بها. يمكنك استخدام الصيغة المعروفة للأنظمة من الدرجة الثانية لحساب مواقع أقطب الحلقة المغلقة. 5- تصميم مراقب الحالة في MATLAB تستخدم دالة "place" أو "acker" في MATLAB لحساب المكاسب المراقبة لوضع أقطب الحلقة المغلقة كما هو مرغوب. 6- محاكاة النظام المتحكم فيه في Simulink تقوم بتعديل نموذج Simulink ليتضمن التحكم بالحالة. تستخدم إشارة الخطوة وتشغل المحاكاة. 7- فحص إمكانية المراقبة في MATLAB تستخدم دالة "obsv" في MATLAB لفحص إمكانية المراقبة للنظام. 8- اختيار أقطب المراقب المرغوبة تختار مواقع أقطب المراقب المرغوبة، ويجب أن تكون مختلفة عن أقطب الحلقة المغلقة. 9- تصميم المراقب في MATLAB تستخدم دالة "place" أو "acker" في MATLAB لحساب المكاسب المراقبة لوضع أقطب المراقب كما هو مرغوب. 10- محاكاة المراقب في Simulink تضيف مراقبًا إلى نموذج Simulink وتشغله. تربط الإشارة المقدرة من إخراج المراقب وتحاكي النظام. 11- بناء النظام الموسع مع التحكم التكاملي في MATLAB تعدل تمثيل حالة المساحة للنظام ليتضمن مصطلح التحكم التكاملي. 12- فحص إمكانية النظام الموسع في MATLAB تستخدم دالة "ctrb" لفحص إمكانية النظام الموسع. 13- اختيار مواقع أقطب الحلقة المغلقة للنظام الموسع تقوم بحساب مواقع أقطب الحلقة المغلقة للنظام الموسع. 14- تصميم المكاسب للنظام الموسع في MATLAB تستخدم الدوال المناسبة لحساب المكاسب التي تضع مواقع أقطب الحلقة المغلقة للنظام الموسع كما هو مرغوب. 15- محاكاة النظام الموسع في Simulink تعدل نموذج Simulink ليتضمن التحكم التكاملي والمراقب، وتشغل النظام الموسع. عليك واستخدام دوال MATLAB ومكونات Simulink المناسبة لكل مهمة وتحقق من النتائج في كل مرحلة.
  10. من الأسهل استخدام venv بدلاً من pipenv، وvenv هي أداة أساسية لإنشاء بيئات افتراضية في Python، وهي أسهل في الاستخدام وخفيفة الوزن، ولكنها تفتقر إلى بعض الميزات المتقدمة التي توفرها pipenv. بينما pipenv هي أداة أكثر حداثة وتقدمًا لإنشاء بيئات افتراضية في Python، وتوفر ميزات مثل إدارة الحزم الآلية وتكامل أطر العمل، مما يجعله خيارًا جيدًا للمشاريع الأكبر والأكثر تعقيدًا. وستجد شرح مفصل عن الفرق بين venv و pipenv والاستخدامات هنا:
  11. الأسئلة الإختبارية لا يتم الإجابة عليها بشكل مباشر من أجل أن تحققي استفادة من التطبيق، ويمكن مساعدتك في حال تم توفير الكود، وإليك خطوات الحل: قومي بتهيئة متغير لتخزين المجموع النهائي. استخدمي حلقة for للتكرار عبر الأرقام من 1 إلى 10. في كل تكرار للحلقة، افحصي إذا كان العدد في النطاق المطلوب (من 1 إلى 10). إذا كان العدد محصورًا بين 1 و 10، قومي بإضافته إلى المجموع. استمري في تكرار العملية حتى ننهي الحلقة. بعد الانتهاء من الحلقة، سيكون لديك مجموع الأرقام المحصورة بين 1 و 10 في المتغير الذي أنشأناه. وفي النهاية اطبعي قيمة المجموع.
  12. شروط التقدم للإختبار ما يلي: إتمام أربعة مسارات تعليمية على الأقل (مع معرفتك بباقي المسارات حيث يتم الإختبار في كامل الدورة) التطبيق العملي مع المدرب، والاحتفاظ بالمشاريع العملية الناتجة لإرسالها للمراجعة رفع المشاريع على حسابك على GitHub أولًا بأول لمشاركتها معنا. ويمكنك إعادة الإمتحان أكثر من مرة لحين إجتيازه، لكن من الأفضل المراجعة والاستعداد من أجل عدم إهدار وقتك. بعد ذلك عليك التحدث لمركز المساعدة بأنك تريد التقدم للإختبار. وما سيحدث هو: سنحدد لك موعد لاجراء محادثة صوتية لمدة 30 دقيقة يطرح المدرب فيها أسئلة متعلقة بالدورة ويناقش معك ما نفذته خلالها. سيحدد لك المدرب مشروعًا مرتبطًا بما تعلمته أثناء الدورة لتنفيذه خلال فترة محددة تتراوح بين أسبوع الى أسبوعين. سيراجع المدرب المشروع الذي أنجزته، وإن سارت جميع الخطوات السابقة بشكل صحيح، ستتخرج وتحصل على الشهادة أو يرشدك المدرّب لأماكن القصور ويطلب منك تداركها ثم التواصل معنا من جديد. ويجب الإنتباه إلى أن جميع الشهادات التي تصدرها أكاديميّة حسوب تصدر فقط بعد اجتياز الامتحان بنجاح. هذه ليست "شهادات إكمال" أو "شهادات حضور"، ولا يمكن الحصول عليها بالانضمام للدورة فقط، بل يجب على الطالب التطبيق عمليًا أثناء الدورة، إجراء المقابلة وإثبات قدراته. وجميع شهادات أكاديمية حسوب متاحة برابط مباشر على موقع الأكاديمية مما يتيح التحقق من صحتها بأي وقت.
  13. يمكنك تشغيل الكود بدون السطر package Firstproject
  14. أولاً لا تكتفي بالأساسيات، بل عليك التعمق في لغة البرمجة الأولى لك من خلال دراسة المفاهيم المتقدمة Advanced بعد فترة، ولا أقصد المفاهيم المعقدة جدًا بل الأمور التي لا يتم شرحها في الأساسيات في الدورات الموجهة للمبتدئين، مثلاً عليك تفهم ما معنى scope وHoisting في جافاسكريبت وهكذا، ففي مقابلات العمل لن يتم سؤالك عن الأساسيات البديهية التي يمكن لأي شخص الإجابة عليها، بل التي تعني فهمك للغة بالفعل. وبخصوص دراسة البرمجة ستجد هنا شرح مفصل: وبالطبع بعد تنفيذ المشاريع وتكوين معرض أعمال مكون من مشاريع حقيقية وتعلم المهارات اللازمة للوظيفة التي تنوي التقدم لها، عليك تنمية مهارة الـ Problem solving لديك ويمكنك البدء بموقع Codwars ثم بعد ذلك عليك حل المسائل من خلال leetcode. وعليك البحث عن الـ technical questions الخاصة باللغة والإطار، فمثلاُ ابحث عن javascript interview questions ونفس الأمر بالنسبة لمكتبة React مثلاً، ثم قم بدراسة تلك الأسئلة والتعلم منها. أيضًا عليك تعلم كيفية إجتياز الجزء الخاص بالـ Soft skills في المقابلة، ابحث عن Behavioral Interview questions أو soft skills interview questions.
  15. حاول تعديل اسم الملف لديك ليصبح: Firstproject.FirstProject.java
  16. حاول تعديل الاسم ليناسب اسم الملف لديك ليصبح كالتالي وتفقد هل تم حل المشكلة أم لا: package Firstproject public class FirstProject { public static void main(String[] args) { System.out.println("Hello World"); } }
  17. من المفرض أن الكود التالي سيعمل معك بشكل سليم، فمعنى رسالة الخطأ أنه لا يتم العثور على الميثود الرئيسي main: public class FirstProject { public static void main(String[] args) { System.out.println("Hello World"); } } لاحظ أن المشكلة هي بسبب سطر package firstproject.
  18. أمامك خياران لمشاركة ملف مشروع سكراتش، الأول هو تحميل ملف المشروع إلى حاسوبك ثم مشاركة الملف، وتستطيع تحميل الملف من خلال الضغط على File (ملف) ثم اختر حفظ إلى حاسوبك (save to your computer) كالتالي: والطريقة الثانية هي الضغط على زر share (مشاركة) لتفعيل إمكانية مشاركة المشروع، ثم قم بنسخ الرابط من شريط العنوان في المتصفح ومشاركته مع من تريد.
  19. أرجو منك التعليق أسفل فيديو الدرس المتعلق بالسؤال لمساعدتك بشكل أفضل، وطرح الأسئلة العامة هنا. وعامًة حاول تعديل ملف setup.py بالشكل التالي: entry_points={ 'console_scripts': [ 'taskaty = taskaty.app:main', ], وفي حال استمرت المشكلة تابع أسفل فيديو الدرس في التعليقات.
  20. هل تعمل على مشروع ويب، تقصد الكونسول في المتصفح؟ عامًة عليك ربط ملف الكود الخاص بجافاسكريبت بملف HTML من خلال عنصر script، كالتالي: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>أساسيات البرمجة</title> <script defer src="index.js"></script> </head> <body> <h1>أساسيات البرمجة</h1> </body> </html> ثم إنشاء ملف الجافاسكريبت باسم index.js ووضع به الكود الذي ترغب به وليكن: let myName; myName = 'Omar'; let age = 16; console.log(myName); console.log(age); ولا تنسى حفظ أي تعديلات من خلال CTRL + S ثم فتح ملف index.html في المتصفح وفتح الكونسول وسترى الاسم والعمر.
  21. تحتاج إلى استخدام الدالة التالية: =MID(A2,MATCH(1,0+(MID(A2,MMULT(ROW($1:$99),1),1)>="ء"),0),SUM(AGGREGATE({14,15},6,ROW($1:$99)/(0+(MID(A2,ROW($1:$99),1)>="ء")=1),1)*{1,-1})+1) وهي تستخدم للبحث عن نص معين داخل الخلية A2 في برنامج Excel، حيث أن البحث يتم في العمود A2 نفسه، وتعتمد الدالة على الدوال MID وMATCH وMMULT وROW وAGGREGATE لتنفيذ البحث. وتُستخدم الدالة MID لاستخراج مجموعة من الأحرف من النص الموجود في الخلية A2، أما الدالة MATCH تستخدم للبحث عن القيمة 1 في مصفوفة تتكون من القيم البولية الناتجة عن التعبيرات الشرطية، مما يعني أن البحث يتم في النص الموجود في الخلية A2.
  22. سأقوم بإخبار فريق إعداد الدورات في أكاديمية حسوب بذلك، وعامًة يتم تحديث أي جزء قديم في الدورات كل فترة ولكن هناك أولويات يتم العمل عليها، وفي حال وجود جزء لم يعد صالحًا في أحد الدورات ومر عليه فترة يتم تحديثه أو شرح كيفية التعامل مع المستجدات الجديدة من أجل تحقيق استفادة من الشرح. وفي حال واجهت مشكلة في أحد الدروس، يمكنك التعليق أسفل الدرس وسيتم مساعدتك وتوجيهك وتوفير مصادر أيضًا. وتستطيع تفقد التحديثات التي تتم كل فترة في الأكاديمية من خلال صفحة آخر التحديثات.
  23. لربط الدوال معًا في PHP، عليك الإعتماد على المفهوم الأساسي لبرمجة الكائنات وهو التغليف (Encapsulation)، بحيث تقوم بإنشاء دوال إضافية في نفس الكائن واستدعاءها بعد استدعاء الدالة الأصلية، وأنت ترغب في إنشاء دالة تقوم بحذف السجل بناءً على النتيجة التي تم استرجاعها من الدالة find، مثلما تم في Laravel، وإليك مثال: class Task extends DBConnection { public $id; public $description; public $completed; public static function find($id) { $pdo = parent::make(); $query = $pdo->prepare("SELECT * FROM tasks where id = $id"); $query->execute(); return $query->fetch(PDO::FETCH_OBJ) ?: "DATA NOT FOUND"; } public function delete() { if ($this->id) { $pdo = parent::make(); $query = $pdo->prepare("DELETE FROM tasks where id = ?"); $query->execute([$this->id]); return "Record deleted successfully"; } else { return "Cannot delete - no valid ID"; } } } الآن، بعد استدعاء find للعثور على السجل المطلوب، نقوم باستدعاء delete مباشرة على الكائن Task: $task = Task::find(1); if ($task !== "DATA NOT FOUND") { $result = $task->delete(); echo $result; } else { echo "Record not found."; } من أجل البحث عن السجل الذي تريد حذفه باستخدام الدالة find ثم سيقوم بحذفه باستخدام الدالة delete المرتبطة بالكائن Task.
  24. من الأفضل توفير مثال لما تريده من خلاص صورة مثلاً، وهل تريد فصل النصوص بحيث تصبح في أعمدة مختلفة؟
  25. يفضل استعمال Cloudinary: كنت بحاجة إلى تخزين الصور ومقاطع الفيديو وإدارتها بكفاءة دون الحاجة إلى بناء بنية تخزين خاصة بك، واستخدام Cloudinary لتخزين هذه الوسائط وإدارتها بسهولة. تساعد Cloudinary على تحسين أداء موقع الويب من خلال تقديم الصور بأحجام وجودات مختلفة تلائم الأجهزة وسرعة الاتصال بالإنترنت للمستخدمين، أي تحتاج إلى ميزات متقدمة لمعالجة الصور وتحسينها، مثل التحويل إلى أحجام مختلفة أو إضافة مؤثرات. تعمل على توفير توصيل سريع للوسائط من خوادم موزعة على مستوى العالم، مما يقلل من وقت تحميل الوسائط ويحسن تجربة المستخدم. تحسين تجربة المستخدم من خلال تقديم صور محسنة ومقاطع فيديو بجودة عالية وبسرعة. يمكنك توفير التكاليف المرتبطة بتخزين وتسليم الوسائط الرقمية عبر الإنترنت بشكل مستقل. بينما يكون استعمال Cloudinary عبء على المشروع في حال: لديك مشروع صغير ولا يتضمن الكثير من الوسائط، وبالتالي استخدام Cloudinary زيادة غير ضرورية. لا تحتاج إلى ميزات متقدمة لمعالجة الصور. لديك ميزانية محدودة وعندها تعتبر تكلفة استخدام Cloudinary باهظة بالنسبة لمشروعك. السيطرة الكاملة على تخزين وتوصيل الوسائط الخاصة بك دون الاعتماد على خدمة خارجية، وهنا لا يعتبر Cloudinary الخيار المناسب.
×
×
  • أضف...