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

Khaled Osama3

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

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

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

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

    1

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

  1. بالنسبة لشغل مطور الواجهات الخلفية للمواقع، صعب نحدد أفضل لغة بينهم لأن كل لغة لها ميزاتها وكلهم بيشتغلوا في نفس الجزء. الأحسن تختار اللغة اللي تميل ليها واللي تحس إنك مرتاح تكتب أكوادها وتفهمها أكتر. خليني أديك نبذة بسيطة عن كل لغة عشان تساعدك في الاختيار: JavaScript دي لغة برمجة تستخدم بشكل رئيسي في تطوير تطبيقات الويب. تعتبر متعددة الأغراض وتُستخدم كمان في تطوير تطبيقات سطح المكتب والموبايل والواجهات الأمامية. المكتبات وأطر العمل React.js، Angular، وVue.js اللي بتستخدم لبناء واجهات المستخدم الديناميكية. أما في الخوادم، بيتم استخدام Node.js كبيئة تشغيل لتنفيذ JavaScript على الخادم. Python دي لغة برمجة متعددة الاستخدامات مشهورة بسهولة قراءة الكود وتعلمه، وبيستخدموها كتير في الذكاء الصناعي وتعلم الآلة. المكتبات وأطر العمل Django، Flask، وPyramid. PHP دي لغة برمجة مصممة خصيصًا لتطوير مواقع الويب الديناميكية. من مميزاتها سهولة التعلم والاستخدام، وقوة في تطوير مواقع الويب، وتوافر مجموعة واسعة من المكتبات والإطارات. المكتبات وأطر العمل Laravel، اللي هو الأهم والأوسع استخداما. دلوقتي بعد ما اديتك نبذة عن كل لغة، ممكن
  2. الخطأ هنا بسيط جدا. المشكلة في استخدامك لـ print من غير أقواس، ودي كانت الطريقة في Python 2. بس أنت بتستخدم Python 3، اللي بيحتاج الأقواس بالشكل ده: print("saber") بعد ما تعدل الكود، احفظ الملف وشغله تاني، وهتلاقي إن المشكلة اتحلت باذن الله.
  3. يجب اولا تحديد الخلايا التي تحتوي على الأرقام التي تريد تنسيقها ثم انقر بزر الماوس الأيمن على الخلايا المحددة واختر "تنسيق الخلايا" (Format Cells) في النافذة التي تظهر، انتقل إلى علامة التبويب "الرقم" (Number) اختر "رقم" (Number) من القائمة الجانبية 5. تأكد من وجود علامة صح بجانب خيار "استخدام فاصل الألوف" (Use 1000 Separator (,)). 6. اختر عدد المنازل العشرية التي ترغب في عرضها (إذا لزم الأمر). 7. انقر على "موافق" (OK) لتطبيق التنسيق. بعد اتباع هذه الخطوات، ستلاحظ أن الأرقام سيتم تنسيقها تلقائيا بفواصل الألوف، بحيث يظهر الرقم 10000 على شكل 10,000(اذا اخترت عدد المنازل العشرية = 0 اذا تركتها كما هي = 2 ستصبح كما في الصوره ).
  4. ذلك نتيجة استخدام طريقة GET لإرسال البيانات أو عند استخدام إعادة التوجيه مع تضمين البيانات في الرابط. هذا هو السبب في ظهور الـ id في الرابط لحل هذه المشكله يمكنك استخدام طريقة أخرى لتوجيه المستخدم بعد إتمام عملية الإرسال. يمكن استخدام جلسات (Sessions) أو الحقول المخفية (Hidden Fields) بدلا من تمرير المعلومات عبر الرابط. الخطوه الاولي يجب تفعيل الجلسات في أعلى ملف PHP: <?php session_start(); ?> ثم تحديث الكود لإرسال البيانات عبر الجلسة بدلاً من الرابط: if (isset($_POST['submit'])) { // افترض أن هناك عملية لإدخال البيانات في قاعدة البيانات هنا $last_id = mysqli_insert_id($conn); $_SESSION['last_id'] = $last_id; header("Location: index.php"); exit(); } وبعد ذلك يجب عرض رسالة التأكيد في صفحة الاستقبال (index.php): <?php session_start(); if (isset($_SESSION['last_id'])) { echo "تم الإرسال رقم الكود المدخل هو " . $_SESSION['last_id']; unset($_SESSION['last_id']); // حذف قيمة الجلسة بعد العرض } ?> بهذه الطريقة، تم تخزين الـ id في الجلسة بدلا من تمريره عبر الرابط، وعرضه على الصفحة عند إعادة التوجيه. سيساعد ذلك في منع ظهور الـ id في شريط العنوان الخاص بالمتصفح.
  5. فالاول يجب فهم الService Container يمكن أن يكون Service Container معقد بعض الشيء، Service Container في Laravel هو أداة قوية لإدارة التبعية (Dependency Injection) وتحديد مكونات التطبيق. يُعتبر Service Container قلب Laravel حيث يساعد في ربط المكونات المختلفة معًا بشكل مرن وسهل. مفهوم التبعية (Dependency) عندما يعتمد كائن ما على كائن آخر لكي يعمل، يُقال أن لديه "تبعية". على سبيل المثال، لنفترض أن لدينا كائنًا من نوع RegisterController والذي يعتمد على كائن من نوع RegisterService. هنا، RegisterController يعتمد على RegisterService ليعمل بشكل صحيح. Service Container يعمل كصندوق أسود، يتم فيه تسجيل جميع الخدمات التي يحتاجها التطبيق، وعند الحاجة إلى أي خدمة، يتم استدعاؤها من خلال هذا الصندوق بطريقة بسيطة ومنظمة. كيفية استخدام Service Container: 1. تسجيل الخدمات (Binding): يمكن تسجيل الخدمات في Service Container باستخدام طرق مثل bind و singleton. يتم تسجيل أغلب الخدمات في ال Service Provider in register() function داخل ال service provider يمكننا الوصول إلى ال Service Container عن طريق هذه الخاصية $this->app الفرق بين bind و singleton: bind: يتم استخدام bind لتسجيل خدمة يتم إنشاؤها في كل مرة يتم فيها طلبها من الـ Service Container. بمعنى آخر، يتم إنشاء كائن جديد في كل مرة تستدعي فيها الخدمة. singleton: يتم استخدام singleton لتسجيل خدمة يتم إنشاؤها مرة واحدة فقط عند أول طلب، وتُعاد نفس النسخة في كل مرة يتم فيها طلبها بعد ذلك. هذا يضمن أن نفس الكائن يُستخدم في جميع أنحاء التطبيق. 2. استدعاء الخدمات (Resolving): يوجد طريقتين لإستدعاء الخدمات التي تم تسجيلها الاستدعاء التلقائي: لحسن الحظ، العديد من الكلاسات التي سيتم كتابتها عند بناء تطبيق Laravel تستقبل تلقائيًا تبعياتها عبر الـ Container، بما في ذلك: Controllers - Event Listeners - Middleware الاستدعاء اليدوي: يمكنك أيضا استدعاء الخدمات يدويا باستخدام طريقة make من الـ Service Container فوائد استخدام Service Container: إدارة التبعيات بفعالية: يساعد Service Container في إدارة التبعيات بين المكونات المختلفة في التطبيق بطريقة مركزية ومرنة. سهولة الاختبار: من خلال حقن التبعيات، يصبح من السهل اختبار المكونات بشكل منعزل باستخدام أدوات الاختبار (Mocking). تنظيم الكود: يساهم Service Container في تنظيم الكود بشكل أفضل من خلال تجميع التسجيلات في مكان واحد. فلنرجع لفهم الService Provider فهو أساس عملية التحميل في Laravel. فهو المسؤول عن ربط جميع الخدمات الرئيسية في التطبيق، بما في ذلك الخدمات التي يحتاجها التطبيق للعمل بشكل صحيح. تستخدم Service Providers لتهيئة تطبيق Laravel وإعداده. تقريبا كل خدمة في Laravel يتم تهيئتها عبر Service Providers، سواء كانت خدمة داخلية أو خدمة يتم استخدامها من حزم خارجية. كل Service Provider يسجل في الملف config/app.php داخل المصفوفة providers. لإنشاء Service Provider: يمكنك إنشاء Service Provider جديد باستخدام الأمر artisan التالي: php artisan make:provider AdminServiceProvider سينتج عن هذا إنشاء ملف جديد داخل مجلد app/Providers. بعد إنشاء Service Provider، يجب تسجيله داخل الملف config/app.php في المصفوفة providers. لإعداد Service Provider يتضمن كل Service Provider two function: register and boot. register: يتم استخدام هذه function لتسجيل الخدمات في الحاوية (Container). هنا يمكن ربط الكلاسات عن طريق dependency injection كما قمت بشرحه في البوست السابق. boot: يتم استدعاء هذه function بعد تنفيذ كل ال register() function لجميع ال service providers. يمكننا استخدامها لتنفيذ أي إجراءات تتطلب الخدمات المسجلة، مثل تسجيل routes or command. أهمية استخدام boot: في Service Provider يتم استدعاؤها بعد تسجيل جميع الخدمات، مما يعني أنه يصبح لدينا وصولا إلى جميع الخدمات الأخرى التي تم تسجيلها بواسطة داخل ال register function. هذا مفيد بشكل خاص عندما تحتاج إلى تسجيل View Composers أهمية Service Providers: تنظيم الكود: تساهم Service Providers في تنظيم الكود بشكل أفضل من خلال تجميع عمليات التهيئة في مكان واحد. تسهيل الاختبار: باستخدام Service Providers، يمكننا بسهولة إعداد بيئة الاختبار الخاصة بنا عن طريق تسجيل الخدمات والتهيئة اللازمة. مقدمو الخدمات (Service Providers) في Laravel
  6. في Laravel 11، تم تغيير بنية الملفات وتبسيط إدارة الـ middleware بحيث تم إزالة ملف Kernel.php، وقد تكون عملية إدارة الـ middleware مختلفة بعض الشيء. للعثور على الـ middleware الأساسية مثل auth وguest وتعديلها فهم لم ينشأوا بشكل تلقائي لذلك اذا كنت تريد التعديل عليهم يجب انشائهم يدويا php artisan make:middleware Authenticate php artisan make:middleware RedirectIfAuthenticated ثم يجب تسجيل الـ Middleware في ملف bootstrap/app.php لكي يتمكن Laravel من التعرف على الـ middleware الجديدة، يجب تسجيلها في ملف bootstrap/app.php. أضف التالي: ->withMiddleware(function (Middleware $middleware) { $middleware->alias([ 'auth' => \App\Http\Middleware\Authenticate::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, ]); }) ويمكنك التعديل علي الملفات التي تم إنشاؤه في مجلد app/Http/Middleware وقم بتعديلها. على سبيل المثال، لملف Authenticate.php: namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Auth; class Authenticate { public function handle($request, Closure $next) { if (Auth::guest()) { return redirect('/login'); } return $next($request); } } بعد تسجيل الـ middleware، يمكنك استخدامها في المسارات الخاصة بك: use Illuminate\Support\Facades\Route; Route::middleware('auth')->group(function () { Route::get('/dashboard', function () { // محتوى الصفحة المحمية }); }); Route::middleware('guest')->group(function () { Route::get('/login', function () { // محتوى صفحة تسجيل الدخول }); });
  7. حسنا في هذه الحاله ارجو ارسال الفورم التي لديك في صفحه ال HTML وايضا ان تسخدم ال var_dump في ملف ال php لطباعة القيم المدخلة للتحقق من عدم وجود أي رموز غير متوقعة // طباعة القيم للتحقق منها var_dump($option1); var_dump($option2);
  8. لن يوثر علي نتيجه المشروع ولكن قد يؤدي ذلك إلى تعقيدات إذا لم يتم التعامل مع كل سكربت بشكل مستقل ومنظم وهذا يخالف أنماط تصميم البرمجيات (software design patterns) لتجنب أي تأثير سلبي على نتيجة المشروع، يجب اتباع بعض الممارسات الجيدة في كتابة الكود وإدارته. يجب استخدام أسماء متغيرات فريدة فلكل نموذج (form) وسكربت، استخدم أسماء متغيرات وأسماء حقول فريدة. هذا يمنع التداخل بين السكربتات المختلفة. والتحقق من القيم المدخلة يجب التحقق من القيم المدخلة في كل مرة وعدم استخدام نفس المتغيرات لمعالجة قيم مختلفة. وايضا إعادة استخدام الأكواد بحذر فإذا كان يجب عليك إعادة استخدام أجزاء من الكود، يمكنك وضع هذه الأجزاء في دوال (Functions) بحيث يمكن استدعاؤها بسهولة دون تداخل. إليك مثال على كيفية إعادة تنظيم الكود الخاص بك باستخدام دوال مستقلة لكل خيار: function uploadImage($fileInputName, $maxFileSize) { $targetDir = "img/"; $targetFile = $targetDir . basename($_FILES[$fileInputName]["name"]); $imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION)); $uploadOk = 1; if ($_FILES[$fileInputName]["size"] > $maxFileSize) { echo "عذراً، حجم الملف كبير جداً."; $uploadOk = 0; } $check = getimagesize($_FILES[$fileInputName]["tmp_name"]); if ($check === false) { echo "الملف ليس صورة."; $uploadOk = 0; } if ($uploadOk == 1) { if (move_uploaded_file($_FILES[$fileInputName]["tmp_name"], $targetFile)) { echo "تم رفع الملف بنجاح."; } else { echo "حدث خطأ أثناء رفع الملف."; } } } if ($_SERVER["REQUEST_METHOD"] == "POST") { $option1 = $_POST["SHU1"]; $option2 = $_POST["SHU2"]; if ($option1 == "الصورة الاولى" && isset($_FILES["file1"])) { uploadImage("file1", 20000); } if ($option2 == "الصورة الثانية" && isset($_FILES["file2"])) { uploadImage("file2", 10000); } } وبالنسبة للنموذج (form) في HTML، تأكد من أن لديك أسماء حقول فريدة لكل خيار: <form method="post" enctype="multipart/form-data"> <select name="SHU1"> <option value="الصورة الاولى">الصورة الأولى</option> </select> <input type="file" name="file1" id="file1"> <select name="SHU2"> <option value="الصورة الثانية">الصورة الثانية</option> </select> <input type="file" name="file2" id="file2"> <input type="submit" value="رفع الملف"> </form> بهذه الطريقة، كل نموذج وسكربت يعمل بشكل مستقل ولن يكون هناك تداخل بين القيم أو المعالجة. إذا كانت هناك المزيد من السكربتات أو الخيارات، يمكنك اتباع نفس النهج لضمان عدم وجود تعارضات أو مشاكل.
  9. وعليكم السلام ورحمة الله وبركاته، المشكلة هنا قد تكون ناتجة عن عدم تنقية المدخلات (inputs) بشكل صحيح ففي حالة وجود أي رموز غير متوقعة مثل "$" من المهم التأكد من أن المدخلات لا تحتوي على أي رموز قد تؤثر على النتيجة. if ($_SERVER["REQUEST_METHOD"] == "POST") { // تنقية المدخلات من أي رموز غير متوقعة $option = htmlspecialchars($_POST["SHU"], ENT_QUOTES, 'UTF-8'); $targetDir = "img/"; $uploadOk = 1; if ($option == "الصورة الاولى" && isset($_FILES["file"])) { $targetFile = $targetDir . basename($_FILES["file"]["name"]); $imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION)); if ($_FILES["file"]["size"] > 20000) { echo "عذراً، حجم الملف كبير جداً."; $uploadOk = 0; } $check = getimagesize($_FILES["file"]["tmp_name"]); if ($check === false) { echo "الملف ليس صورة."; $uploadOk = 0; } if ($uploadOk == 1) { if (move_uploaded_file($_FILES["file"]["tmp_name"], $targetFile)) { echo "تم رفع الملف "; } } } elseif ($option == "الصورة الثانية" && isset($_FILES["file2"])) { $targetFile = $targetDir . basename($_FILES["file2"]["name"]); $imageFileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION)); if ($_FILES["file2"]["size"] > 10000) { echo "عذراً، حجم الملف كبير جداً."; $uploadOk = 0; } $check = getimagesize($_FILES["file2"]["tmp_name"]); if ($check === false) { echo "الملف ليس صورة."; $uploadOk = 0; } if ($uploadOk == 1) { if (move_uploaded_file($_FILES["file2"]["tmp_name"], $targetFile)) { echo "تم رفع الملف "; } } } } في هذا الكود، استخدمنا دالة htmlspecialchars وهي تستخدم لتنقية المدخلات من أي رموز غير متوقعة مثل "$". هذا يساعد على تجنب أي مشاكل ناتجة عن وجود رموز غير مرغوب فيها في المدخلات. ويجب التأكد أيضا من أن جزء النموذج (form) في HTML لا يحتوي على أي أحرف خاصة غير متوقعة في value: <form method="post" enctype="multipart/form-data"> <select name="SHU"> <option value="الصورة الاولى">الصورة الأولى</option> <option value="الصورة الثانية">الصورة الثانية</option> </select> <input type="file" name="file" id="file"> <input type="file" name="file2" id="file2"> <input type="submit" value="رفع الملف"> </form>
  10. يجب أولا فهم الفرق بين المبرمج والذكاء الإصطناعي. المبرمج هو الشخص المسؤول عن كتابة البرامج والتطبيقات، وهو الذي يحدد الأوامر والتعليمات التي يتبعها الحاسوب لتنفيذ المهمة المطلوبة. بينما الذكاء الإصطناعي هو نظام حاسوبي يتعلم ويتطور من خلال تحليل البيانات والخوارزميات، ويمكنه اتخاذ القرارات بنفسه بناء على البيانات التي يتلقاها. وبالرغم من أن الذكاء الإصطناعي يمكنه القيام بمهام برمجية متقدمة، إلا أنه لا يمكنه تطوير نفسه بنفسه، بل يحتاج إلى المبرمج لكتابة الأوامر والتعليمات التي يجب على الحاسوب اتباعها لتنفيذ المهمة المطلوبة. بالإضافة إلى ذلك، فإن المبرمج يلعب دوراً مهماً في تصميم وتحديد أهداف النظام الذكي، وتحليل البيانات التي يتلقاها، وضبط الخوارزميات التي يستخدمها. وبالتالي، فإن الإجابة على سؤال هل يستطيع الذكاء الإصطناعي استبدال المبرمجين؟ تعتمد على الفهم الصحيح للدور الذي يلعبه كل منهما. ويجب التنبيه على أنه من الممكن استبدال أدوات الذكاء الإصطناعي فعلا عندما يتعلق الأمر بالمهام البسيطة أو المتوسطة لكنه يصعب الإعتماد عليها عندما يتعلق الأمر بالمهام المعقدة. لذلك فالشركات الآن قد تتوجه لاستبدال أدوات الذكاء الإصطناعي بالمبرمجين فى المهام البيسطة خصوصاً عندما يتعلق الأمر بتوفير بعض المال ومضاعفة الأرباح. فحتى الان، الذكاء الاصطناعي (AI) لا يمكنه استبدال المبرمجين بالكامل. الذكاء الاصطناعي يمكنه مساعدتهم وتسريع بعض المهام، لكنه لا يمكنه القيام بكل شيء. البرمجة تتطلب إبداعا وتفكيرا نقديا، وهذين الشيئين لا يمكن للذكاء الاصطناعي القيام بهما كما يفعل الإنسان. وبالنسبه للتخصصات التي استبدلها الذكاء الاصطناعي بالفعل نعم، هناك بعض المهام التي كان يقوم بها البشر وتمكن الذكاء الاصطناعي من القيام بها بكفاءة. على سبيل المثال: التعرف على الصور: كان يتطلب الأمر الكثير من العمل اليدوي لتصنيف الصور، والان يمكن للذكاء الاصطناعي القيام بذلك بشكل أسرع ودقيق. التنبؤ بالنص: مثل النص التلقائي في الهواتف، يمكن للذكاء الاصطناعي التنبؤ بما ستكتبه بعد ذلك. لكن بشكل عام، الذكاء الاصطناعي يساعد البشر أكثر مما يستبدلهم تماما.
  11. لحل هذه المشكلة، يجب أن تفهم الفرق بين حالات الرابط المختلفة في CSS. هناك أربع حالات رئيسية للرابط: 1. a:link - الحالة العادية للرابط الذي لم يتم زيارته بعد. 2. a:visited - الحالة للرابط الذي تم زيارته من قبل. 3. a:hover - الحالة عندما يمرر المستخدم المؤشر فوق الرابط. 4. a:active - الحالة عندما يتم النقر على الرابط. اللون يظهر بالبنفسجي لأن الرابط قد تم زيارته مسبقا، لذا يتم تطبيق أسلوب a:visited وليس a:link. إذا كنت ترغب في التأكد من أن الروابط غير المزارة فقط هي التي تظهر باللون الأحمر، تأكد من تنظيف تاريخ التصفح أو استخدم وضع التصفح المتخفي في المتصفح.
  12. يعتمد تحديد افضل استضافة على متطلبات المشروع حيث اغلب الاستضافات تكون مجانية بقيود مثل الزمن او المساحة PythonAnywhere هو خدمة استضافة سحابية تدعم بايثون بالكامل وتوفر بيئة تطويرية متكاملة ويمكن تشغيل السكربتات وويب التطبيقات. يدعم Django و Flask. ويوجد ايضا render يعطيك 1G من التخزين المجاني وذلك لمدة 90 يوم فقط وبعدها اما تسجل في حساب اخر او تدفع اشتراك ويوجد ايضا Repl.it هي منصة تطوير متكاملة تدعم العديد من لغات البرمجة بما في ذلك بايثون وتوفر بيئة تطويرية متكاملة عبر المتصفح ويمكنك تشغيل وتعديل الكود مباشرة. ويوجد مدفوع مثل Digital Ocean و aws وHostinger
  13. بنستخدم خوارزميات مختلفة مثل شجرة القرار (Decision Tree) أو الانحدار الخطي (Linear Regression) لحل مشاكل معينة. ولكن هذه الخوارزميات قد تكون غير فعالة في معالجة البيانات المعقدة مثل الصور أو النصوص الطويلة. أما في التعلم العميق، تعتمد النماذج بشكل كبير على الشبكات العصبية (Neural Networks) لأنها قادرة على التعلم من البيانات المعقدة والمتنوعة بفضل بنيتها العميقة المكونة من طبقات متعددة. هذا يسمح لها بالتعرف على الأنماط والميزات المخفية في البيانات بشكل أكثر فعالية مقارنة بالخوارزميات التقليدية.
  14. نعم يمكنهم ذلك ولكن المطورين الويب يمكنهم الانتقال إلى تطوير تطبيقات السيارات، ولكن قد يتطلب ذلك تعلم تقنيات جديدة. ففي تطوير الويب، يتم استخدام لغات وتقنيات مثل HTML، CSS، JavaScript، وأطر العمل مثل React.js و Angular. اما في تطوير تطبيقات السيارات، قد تحتاج إلى تعلم لغات وتقنيات مختلفة. على سبيل المثال: لغة C++: تستخدم بشكل واسع في برمجة أنظمة السيارات نظرا لأدائها العالي. لغة Python: تُستخدم في تحليل البيانات وتطوير الذكاء الاصطناعي والأنظمة المدمجة. أنظمة تشغيل مدمجة: مثل نظام تشغيل السيارات QNX أو نظام التشغيل المدمج Linux. وتوجد مكتبات وأدوات لتطوير تطبيقات السيارات اشهرها: AUTOSAR: هو معيار مفتوح لتطوير البرمجيات المدمجة في السيارات. ROS (Robot Operating System): يُستخدم في تطوير الأنظمة الروبوتية ويمكن استخدامه في السيارات ذاتية القيادة. المطورين الويب الذين يرغبون في الانتقال إلى تطوير تطبيقات السيارات يحتاجون إلى تعلم الأساسيات في الهندسة المدمجة وبرمجة الأنظمة ذات الزمن الحقيقي. بشكل عام، المهارات الأساسية في البرمجة والتفكير المنطقي التي يمتلكها المطورون الويب يمكن أن تساعدهم بشكل كبير في تعلم التقنيات الجديدة المطلوبة لتطوير تطبيقات السيارات
  15. الشبكة العصبية هي نموذج مستوحى من طريقة عمل الدماغ البشري. تتكون من طبقات من العقد (neurons) المتصلة ببعضها. بنستخدم هذه الشبكات العصبية البسيطة لحل مشاكل محددة مثل التصنيف أو التنبؤ. على سبيل المثال، يمكن استخدام شبكة عصبية بسيطة لتصنيف البريد الإلكتروني إلى بريد عادي أو بريد غير مرغوب فيه. - الشبكات العصبية في التعلم الآلي neural network in machine learning عادة ما تحتوي على عدد قليل من الطبقات (قد تكون طبقة أو اثنتين فقط). التعلم العميق Deep learning هو جزء من التعلم الآلي، ولكنه يستخدم شبكات عصبية ذات بنية أكثر تعقيدا وتحتوي على العديد من الطبقات (من هنا جاءت كلمة "عميق" لأنها تعني العديد من الطبقات). تستخدم الشبكات العصبية العميقة لحل مشاكل أكثر تعقيدا مثل التعرف على الصور، الترجمة الآلية، والسيارات ذاتية القيادة. بسبب العمق والتعقيد، يمكن لهذه الشبكات التعلم من كميات كبيرة من البيانات وتحليلها بشكل أكثر دقة على سبيل المثال، يمكن استخدام شبكة عصبية عميقة للتعرف على الوجوه في الصور أو حتى للفهم التلقائي للغة الطبيعية.
  16. يجب استخدام خاصية display لتغيير طريقة عرض العنصر a وتطبيق التوسيط باستخدام خصائص Flexbox على الحاوية التي تحتوي عليه. قم بتعديل الكود الخاص بك كالتالي: 1. أضف خصائص Flexbox إلى الحاوية (div.content) لجعل جميع العناصر بداخلها تتمركز. 2. استخدم خصائص Flexbox داخل الحاوية لتوسيط الرابط. إليك الكود المعدل: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Delightful Bakery</title> <style> h1 { color: purple; text-decoration: underline; text-align: center; text-transform: uppercase; direction: ltr; } .content { background-color: cyan; height: 1330px; width: 1330px; display: flex; flex-direction: column; justify-content: center; align-items: center; } p { color: black; text-align: center; text-transform: uppercase; direction: ltr; font-weight: bold; } a:link { color: orangered; text-decoration: underline; } a:visited { color: purple; text-decoration: underline; } a:hover { color: palegoldenrod; text-decoration: underline; } a:active { color: coral; } </style> </head> <body> <div class="content"> <h1>The Start</h1> <p>The Dark Future</p> <a href="https://www.youtube.com/">Go To Youtube</a> </div> </body> </html> في هذا الكود، استخدمنا خصائص Flexbox على الحاوية .content بحيث يتم توسيط جميع العناصر بداخلها عموديا وأفقيا. هذا سيجعل الرابط يتمركز في وسط الصفحة بشكل صحيح.
  17. الكمبيوتر هو اللي بيتعلم، لكن لما بنقول "الآلة بتتعلم"، بنقصد الكمبيوتر اللي بنستخدمه لتطبيقات التعلم الآلي (Machine Learning). الكمبيوتر نفسه ما عندوش عقل زي الإنسان، لكنه بيقدر يتعلم من البيانات اللي بندخلهاله باستخدام خوارزميات (Algorithms) معينة. بنجمع البيانات وننظفها ونستخدمها لتدريب النموذج (Model). النموذج ده بيكون عبارة عن برنامج بيقدر يتعرف على الأنماط في البيانات. بعد ما النموذج يتدرب على البيانات، بيقدر يتنبأ أو ياخد قرارات بناء على البيانات الجديدة اللي بنمده بيها. طيب، هل أي آلة هي عبارة عن كمبيوتر؟ مش كل آلة هي كمبيوتر، لكن الكمبيوتر جزء أساسي من الآلات اللي بتستخدم في تطبيقات التعلم الآلي. مثلاً: السيارات الذاتية القيادة (Self-driving cars) تعتبر آلات معقدة، جواها كمبيوترات بتستخدم خوارزميات تعلم آلي علشان تتعرف على الطريق والعوائق وتاخد قرارات في القيادة. الفرق بين الآلة والكمبيوتر الكمبيوتر هو الجهاز اللي بنستخدمه لتنفيذ البرمجيات (Software) وعمليات الحساب والتخزين. اما الآلة ممكن تكون جهاز ميكانيكي أو إلكتروني بيأدي وظيفة معينة، والكمبيوتر جواه بيكون جزء من النظام الكبير.
  18. ستجد أسفل فيديو الدرس في نهاية الصفحة صندوق تعليقات كما هنا، أرجو طرح الأسئلة أسفل الدرس وليس هنا في قسم الأسئلة البرمجة حيث نطرح الأسئلة العامة الغير متعلقة بمحتوى الدورة أو الدرس، وذلك لمساعدتك بشكل أفضل
  19. الخطأ هنا يتعلق بأنك تحاول استخدام دالة union مع كائن من نوع tuple. ولكن، tuple لا يحتوي على دالة union. دالة union متوفرة فقط في الكائنات من نوع set. إليك الطريقة الصحيحة لاستخدام union مع مجموعتين: f = {'t', 'y', 'iii', 'r'} d = {'s', 'f', 'k'} result = f.union(d) print(result) لاحظ أننا قمنا بتحويل المتغيرين f و d إلى مجموعات باستخدام {} بدلا من (). إذا كنت تحتاج إلى استخدام tuples، لا يمكنك استخدام union مباشرة. يمكنك بدلا من ذلك تحويلها إلى مجموعات: f = ('t', 'y', 'iii', 'r') d = ('s', 'f', 'k') result = set(f).union(d) print(result) بذلك، ستتمكن من دمج القيمتين بدون مشاكل.
  20. أول شيء، لازم نضبط إعدادات البريد في Laravel. ستحتاج تعدل في ملف .env عشان تضيف بيانات خادم البريد (SMTP). الخطوة 1: تعديل ملف البيئة .env ملف .env هو المكان الذي تحفظ فيه إعدادات البيئة الخاصة بمشروعك، مثل إعدادات قاعدة البيانات والبريد الإلكتروني. تحتاج لإعداد بيانات SMTP الخاصة بخادم البريد الذي ستستخدمه لإرسال الرسائل. افتح ملف .env الموجود في جذر مشروعك وأضف الإعدادات التالية (استبدل بالقيم المناسبة): MAIL_MAILER=smtp MAIL_HOST=smtp.example.com # عنوان خادم البريد (مثل smtp.gmail.com إذا كنت تستخدم Gmail) MAIL_PORT=587 # المنفذ المستخدم (587 لـ TLS، 465 لـ SSL) MAIL_USERNAME=your_email@example.com # بريدك الإلكتروني MAIL_PASSWORD=your_email_password # كلمة المرور لبريدك الإلكتروني MAIL_ENCRYPTION=tls # نوع التشفير (tls أو ssl) MAIL_FROM_ADDRESS=your_email@example.com # عنوان البريد الذي سترسل منه الرسائل MAIL_FROM_NAME="${APP_NAME}" # اسم المرسل الذي سيظهر في البريد الإلكتروني الخطوة 2: إنشاء بريد إلكتروني جديد Mailable هو كلاس مخصص في Laravel لتسهيل عملية إرسال البريد الإلكتروني. لإنشاء Mailable جديد، افتح التيرمنال في جذر مشروعك واستخدم الأمر التالي: php artisan make:mail ExampleMail هذا الأمر سينشئ ملفًا جديدًا في app/Mail/ExampleMail.php. هذا الملف سيحتوي على القالب الأساسي للرسالة التي سترسلها. الخطوة 3: تخصيص البريد الان، نفتح الملف ExampleMail.php ونخصصه عشان نضيف التفاصيل اللي نريدها في البريد: <?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class ExampleMail extends Mailable { use Queueable, SerializesModels; public $details; // متغير لتخزين تفاصيل الرسالة /** * Create a new message instance. * * @return void */ public function __construct($details) { $this->details = $details; // تخزين التفاصيل الممررة للرسالة } /** * Build the message. * * @return $this */ public function build() { return $this->subject('Test Email') // موضوع البريد الإلكتروني ->view('emails.example'); // عرض القالب } } الخطوة 4: إنشاء قالب البريد الإلكتروني القالب هو الملف الذي يحدد شكل ومحتوى البريد الإلكتروني. لنقم بإنشاء قالب بسيط. افتح مجلد resources/views وأنشئ مجلد جديد باسم emails، ثم أنشئ ملف جديد باسم example.blade.php وضع فيه المحتوى التالي: <!DOCTYPE html> <html> <head> <title>Test Email</title> </head> <body> <h1>{{ $details['title'] }}</h1> <p>{{ $details['body'] }}</p> </body> </html> في هذا القالب، نستخدم متغيرات title و body التي سنمررها عند إرسال البريد الإلكتروني. الخطوة 5: كتابة كود الإرسال الآن، نحتاج لكود يقوم بإرسال البريد الإلكتروني. يمكننا وضع هذا الكود في أي مكان نريد، سواء في Controller أو مباشرة في Route. لنبسط الأمور، سنضعه في Route. افتح ملف routes/web.php وأضف الكود التالي: use Illuminate\Support\Facades\Route; use App\Mail\ExampleMail; use Illuminate\Support\Facades\Mail; Route::get('/send-email', function () { // تفاصيل الرسالة $details = [ 'title' => 'Mail from Laravel Application', 'body' => 'This is a test email sent from Laravel.' ]; // إرسال البريد الإلكتروني Mail::to('recipient@example.com')->send(new ExampleMail($details)); // رسالة تأكيد الإرسال return 'Email sent successfully!'; }); في هذا الكود: قمنا بإنشاء Route جديدة باسم /send-email. داخل هذا Route، قمنا بتعريف تفاصيل الرسالة مثل title و body. استخدمنا Mail::to لتحديد مستقبل الرسالة وأرسلنا الرسالة باستخدام ExampleMail. الان لتشغيل التطبيق واختبار البريد الإلكتروني افتح متصفحك واذهب إلى http://your-domain/send-email (استبدل your-domain بالعنوان الفعلي لتطبيقك). إذا كانت الإعدادات صحيحة، سترى رسالة "Email sent successfully!" والبريد الإلكتروني سيتم إرساله إلى العنوان المحدد.
  21. عادة ما يستخدم التعلم غير الخاضع للإشراف (Unsupervised Learning) مع بيانات غير مسماة (Unlabeled Data). يعني ذلك أن البيانات لا تحتوي على تسميات أو نتائج معروفة مسبقا، ويقوم النموذج بمحاولة اكتشاف الأنماط أو العلاقات داخل البيانات دون معرفة مسبقة بالتسميات. ولكن، من الممكن استخدام البيانات المسماة في التعلم غير الخاضع للإشراف في بعض الحالات المحددة. على سبيل المثال: 1. استخدام جزء من البيانات: يمكن استخدام جزء من البيانات المسماة دون النظر إلى التسميات نفسها. يمكن للنموذج محاولة اكتشاف الأنماط فقط بناء على الميزات (Features) الموجودة في البيانات. 2. التحقق من صحة النتائج: بعد أن يقوم النموذج باكتشاف الأنماط أو المجموعات (Clusters) في البيانات، يمكن استخدام التسميات للتحقق من صحة النتائج ومعرفة ما إذا كانت الأنماط المكتشفة تتوافق مع الفئات الفعلية. بشكل عام، الهدف الرئيسي من التعلم غير الخاضع للإشراف هو التعامل مع البيانات غير المسماة، ولكن يمكن استخدام البيانات المُسماة بشكل غير مباشر كما تم توضيحه. ولكن للتوضيح اكثر دعنا نأخذ مثالا عمليا لتوضيح كيف يمكن استخدام البيانات المسماة في سياق التعلم غير الخاضع للإشراف. تجميع الصور باستخدام التعلم غير الخاضع للإشراف لنفترض أن لدينا مجموعة كبيرة من الصور للفاكهة (مثل التفاح، البرتقال، والموز). لدينا بعض الصور مسماة (أي نعرف ما هي الفاكهة في كل صورة)، ولكن نريد استخدام التعلم غير الخاضع للإشراف لتجميع الصور حسب النوع. الخطوات: 1. تحضير البيانات: - لدينا مجموعة من الصور المسماة (مثلاً 100 صورة لكل نوع من الفاكهة). 2. استخدام التعلم غير الخاضع للإشراف (مثل K-means): - نقوم بتحويل الصور إلى تمثيلات رقمية باستخدام تقنيات مثل تحليل المكونات الرئيسية (PCA) أو الشبكات العصبية التلافيفية (CNN). - نستخدم خوارزمية K-means لتجميع الصور إلى 3 مجموعات (clusters)، حيث نعرف مسبقاً أننا نتوقع ثلاث مجموعات مختلفة بناءً على نوع الفاكهة. 3. التحقق من النتائج باستخدام البيانات المُسماة: - بعد تشغيل خوارزمية K-means، نحصل على 3 مجموعات من الصور. - الآن، نستخدم التسميات الموجودة لدينا للتحقق من مدى دقة التجميع. نقوم بفحص كل مجموعة لمعرفة ما إذا كانت الصور في كل مجموعة تتطابق مع نوع فاكهة محدد. إذا كانت المجموعة الأولى تحتوي بشكل أساسي على صور التفاح، والمجموعة الثانية تحتوي على صور البرتقال، والمجموعة الثالثة تحتوي على صور الموز، فهذا يعني أن التجميع كان ناجحاً. اما إذا كانت هناك صور غير مصنفة بشكل صحيح، يمكننا معرفة الأخطاء وتحليلها لتحسين النموذج. في النهايه فباستخدام هذه الطريقة، نحن نستخدم التعلم غير الخاضع للإشراف لاكتشاف الأنماط والتجميع في البيانات، ثم نستخدم البيانات المُسماة للتحقق من دقة النتائج وتحسين النموذج إذا لزم الأمر. هذه العملية مفيدة خاصة عندما يكون لدينا بيانات كبيرة جداً وليس لدينا تسميات لجميع البيانات، حيث يمكننا استخدام جزء صغير من البيانات المسماة كمرجع لتحسين وتقييم النموذج.
  22. يمكنك التكلم مع إدارة حسوب من خلال مركز الدعم من هنا.
  23. نعم، يمكنك ولكن استخدامه يختلف عن استخدام هذه النماذج, النماذج مثل LinearRegression وRandomForestClassifier هي نماذج تعلم إشرافي تستخدم لتنبؤ القيم أو تصنيف البيانات بناء على مجموعة محددة من الميزات. هذه النماذج تتطلب مجموعة بيانات محددة للتدريب والتقييم. أما نموذج ChatGPT فهو نموذج يعتمد على التعلم العميق ومعالجة اللغة الطبيعية (NLP) ويُستخدم لإنشاء النصوص والإجابة على الأسئلة وفهم اللغة الطبيعية. لذا، يمكن استخدامه في تطبيقات تتعلق بفهم وتوليد اللغة مثل بناء أنظمة محادثة ذكية، ملخصات النصوص، والترجمة الآلية. لتوضيح الفرق بشكل أبسط: إذا كنت تريد بناء نموذج يتنبأ بقيمة معينة مثل أسعار المنازل بناء على ميزات معينة (مثل المساحة وعدد الغرف)، فإنك ستستخدم نماذج مثل LinearRegression. إذا كنت تريد بناء نموذج يتعامل مع النصوص ويفهم الأسئلة ويقدم إجابات مثل ما يفعله ChatGPT، فإنك ستستخدم نموذج مثل ChatGPT. لا يمكنك تغيير أو تعديل النموذج نفسه بسبب امتلاك شركة أنثرو بايل لحقوقه. فإذا كان الهدف هو إجراء محادثة بسيطة، يمكن استخدام ChatGPT. أما لتطبيقات أوسع نطاقا فلا بد من تطوير نموذج خاص.
  24. وعليكم السلام لنبدأ أولا بالتكلم عن فهم المعادلات المقصود هنا هو أنك تفهم كيف تعمل المعادلات المستخدمة في النماذج، مثل معادلات الانحدار الخطي أو الشبكات العصبية. هذا الفهم يساعدك على استخدام هذه النماذج بفعالية وتحديد متى يكون النموذج مناسبا للمشكلة التي تعمل عليها. فهمك للمعادلات يساعدك أيضًا في تحسين النماذج واكتشاف الأخطاء. ثم تطوير المعادلات هذا يتطلب مستوى أعلى من الفهم والابتكار. يعني أنك تقوم بابتكار وتطوير معادلات جديدة أو تحسين المعادلات الحالية بشكل مبتكر. هذا يتطلب معرفة عميقة بالرياضيات والخوارزميات. فالخطوة الأولى هي فهم كيف تعمل الأشياء الموجودة، ثم بعد ذلك يمكنك محاولة تطوير أشياء جديدة.
  25. في الكود الأول، يقوم الشرط if (loading) بفحص حالة التحميل، ولكن لا يقوم بإرجاع أي مكون React ليتم عرضه في واجهة المستخدم. هذا يعني أن Oval لا يتم عرضه فعليًا. في الكود الثاني، يتم استخدام التعبير الشرطي loading ? ... : ... داخل return لإرجاع الـOval مباشرة عندما تكون حالة التحميل true. وبالتالي، يتم عرض الـLoader Component بشكل صحيح عند تحميل البيانات. يمعني اخر الكود الثاني يعمل بشكل صحيح لأن الشرط الذي يتحقق من حالة التحميل (loading) يوجد داخل التعبير الشرطي في دالة return، مما يسمح بعرض الـLoader Component مباشرة. بينما في الكود الأول، الشرط if (loading) لا يعيد أي مكون للواجهة، وبالتالي لا يتم عرض الـLoader Component.
×
×
  • أضف...