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

ياسر مسكين

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

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

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

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

    2

كل منشورات العضو ياسر مسكين

  1. الخطأ في عملية القسمة بالباقي (%) يكمن في الطريقة التي تقوم فيها بتحديث الباقي (remainder) في كل مرة، لهذا يجب استخدام الباقي من العملية السابقة بدلا من قيمة الثواني الأصلية (Seconds). ففي هذا الكود يجب تحديث الباقي بناء على القيمة المحسوبة في الخطوة السابقة، وليس القيمة الأصلية للثواني بهذا الشكل: #include <iostream> #include <cmath> // لاستخدام floor using namespace std; int main() { float Seconds; float remender; cout << "Enter Number Seconds: \n"; cin >> Seconds; int secperD = 24 * 60 * 60; int secperH = 60 * 60; int secperM = 60; int NumOfD = floor(Seconds / secperD); remender = fmod(Seconds, secperD); int NumOfH = floor(remender / secperH); remender = fmod(remender, secperH); int NumOfM = floor(remender / secperM); remender = fmod(remender, secperM); int NumOfS = remender; cout << "Days: " << NumOfD << endl; cout << "Hours: " << NumOfH << endl; cout << "Minutes: " << NumOfM << endl; cout << "Seconds: " << NumOfS << endl; return 0; } هنا قمت باستخدام دالة `fmod` بدلاً من عامل `%` للقسمة بالباقي، إن لم تتضح يمكنني التفصيل أكثر في شرح المثال.
  2. يمكنك القيام بذلك باستخدام إطار عمل مثل Django أو Flask، فهذان الإطاران سيسمحان لك ببناء واجهات برمجة تطبيقات (APIs) بسهولة وفعالية من خلال استخدام الأدوات المناسبة، يمكنك تحويل المشروع البرمجي إلى API دون التأثير على أدائه. فمثلا لو أردت استخدام دجانغو "Django REST Framework" فأنصح باستخدامه في المشاريع الكبيرة والمعقدة التي تحتاج إلى هيكلية قوية وميزات متقدمة، لامتلاكه بنية قوية ومتكاملة لبناء APIs، لما يوفر العديد من الميزات مثل التسلسل والتصحيح والمصادقة والتوثيق التلقائي للمساعدة في تطوير ال APIs بسرعة. أما لو فضلت استخدام فلاسك فالمعروف عنه أنه إطار عمل خفيف الوزن ومرن يسمح ببناء تطبيقات ويب بسرعة وسهولة، لهذا يمكن استخدام Flask لبناء APIs بسهولة لكن مع إضافة بعض المكتبات الإضافية مثل Flask-RESTful أو Flask-RESTPlus، ويعتبر مناسبا للمشاريع الصغيرة إلى المتوسطة أو للمشاريع التي تتطلب مرونة أكبر في الاختيارات التكنولوجية، لهذا إن كان مشروعك كذلك ففلاسك هو الأنسب.
  3. يمكن بدء عملية حل المشكلة الخاصة بك عن طريق تقسيمها إلى خطوات صغيرة، سأعطيك خطوات من شأنها أن تساعدك في إنشاء البرنامج: أولا، يمكنك البدء بتحديد المتغيرات اللازمة، فكري في المتغيرات التي ستحتاجينها لتخزين معلومات الطلاب، مثل أسمائهم وعلاماتهم. وفي هذه الحالة، سنحتاج إلى متغيرين على الأقل: واحد لتخزين اسم الطالب والآخر لتخزين علامته. يمكننا تخزين هذه المعلومات في قاموس واحد حيث يكون اسم الطالب مفتاحا وعلامته قيمة. ثانيا، نقوم بالتحقق من الإدخال، ونتأكد من تحقق البرنامج من صحة الإدخالات، مثل التأكد من أن العلامات المدخلة تقع ضمن النطاق المسموح به (مثلا بين 0 و100). يمكنك استخدام دالة مثل `()input` للحصول على إدخال المستخدم وبعد ذلك التحقق من صحته. بهذا الشكل: score = float(input("Enter the student's score: ")) if score < 0 or score > 100: print("Invalid score! Score should be between 0 and 100.") بعد ذلك نقوم بحساب العلامات، وهنا أترك المهمة من خلال كتابة الكود اللازم لحساب العلامة النهائية لكل طالب بناء على العلامات التي تم إدخالها. عادة نحن هنا في الأكاديمية لا نقوم بالإجابة على الأسئلة الامتحانية للطلاب مباشرة، لكن يمكننا مساعدتك على الفهم الجيد للمشكلة، ونقدك لك المصادر التي نراها مفيدة للتعلم وحل المشاكل التي قد تواجهينها، مثلا يمكنك تصفح هذه العناوين:
  4. بالطبع فتعلم تطوير المواقع أمر ذو أهمية كبيرة في وقتنا هذا، حيث يمكن لهذه المهارة أن تفتح لك أبوابا كثيرة لفرص العمل وتحقيق النجاح المهني. على سبيل المثال، عند اكتسابك لمهارات تطوير المواقع، يمكنك بناء تطبيقات ومواقع ويب مثل متجر إلكتروني، منصة تعليمية أو حتى شبكة اجتماعية. كما يمكنك العمل كمطور ويب في شركات تكنولوجية معينة أو بدء مشروعك الخاص كمطور ويب مستقل. مهارة تطوير المواقع ستبقى مطلوبة في المستقبل نظرا للتطور المستمر في تكنولوجيا المعلومات وزيادة الطلب على الحلول الرقمية. فمثلاً، بناء تطبيقات الويب والمواقع الذكية يظل ضروريا لأي نشاط تجاري يسعى لتوسيع نطاق عمله عبر الإنترنت وتحسين تجربة المستخدم. أما بالنسبة لفرص العمل بعد تعلم تطوير المواقع فهي تتنوع بشكل كبير، حيث يمكنك العمل كمطور ويب في الشركات التكنولوجية، أو كمطور مستقل حيث يمكنك بناء مواقع وتطبيقات مخصصة للعملاء، أو حتى بدء مشروعك الخاص كموقع أو تطبيق يحل مشكلة معينة في المجتمع. بالنسبة لسؤالك الآخر، فالذكاء الاصطناعي يمكن أن يساعد في حل مشاكل معقدة وتطوير تطبيقات متقدمة. على سبيل المثال، يمكن استخدام الذكاء الاصطناعي في تطوير تطبيقات الذكاء الصناعي مثل مساعدات الصوت مثل Siri و Alexa، أو في تحليل البيانات الضخمة في المجالات الطبية والمالية وتتنوع مجالات استخداماته بشكل كبير. يمكن تعلم الذكاء الاصطناعي دون الحاجة لمعرفة عميقة بالرياضيات، حيث يمكنك البدء بتعلم لغات البرمجة المستخدمة في تطوير الذكاء الاصطناعي مثل Python و TensorFlow. بعد ذلك، يمكنك استخدام الموارد المتاحة عبر الإنترنت لتعلم المفاهيم الأساسية وتطبيقها في مشاريع عملية مثل بناء نماذج التعلم الآلي لتصنيف الصور أو تحليل النصوص. وأنصحك بهذه المصادر القيمة للتعلم: https://academy.hsoub.com/programming/artificial-intelligence/
  5. المشكلة قد تكمن في كيفية استخدامك للمتغير `variant` في الكلاس الخاص بال CSS، قفي Tailwind CSS، لا يمكن استخدام المتغيرات داخل السلاسل كما فعلت، ولكن يمكنك استخدام القوسين الدائريين `{}` لتضمين القيمة المتغيرة داخل السلسلة، وعند استخدام المكون Message في تطبيق React وتمرير خاصية variant، يجب أن ننشئ فئات مثل text-red-700 و bg-red-100 إذا كانت قيمة variant تساوي "red"، كمثال: import React from 'react'; function Message({ variant, children }) { // تحقق من قيمة variant في الكونسول للتأكد من صحتها console.log(variant); // تأكد من وجود القوسين الدائريين {} حول variant في الكلاس لتفادي المشاكل return ( <div className={`m-4 rounded-lg py-5 px-6 mb-4 text-base text-${variant}-700 bg-${variant}-100`} > {children} </div> ); } export default Message; كذلك من الأفضل التحقق من وجود القوسين الدائريين حول `variant` في كل مكان يظهر فيه. هذا سيساعد React على فهم أن هذا هو متغير وليس جزءًا من النص الثابت. <Message variant='red'>حصل خطأ ما</Message> <Message variant='red'>حصل خطأ ما</Message> هنا عند استخدام مكون Message بهذه الطريقة، يجب التأكد من وجود الأنماط المناسبة (`text-red-700` و `bg-red-100`) في ملفات النمط (CSS) المعتمدة في المشروه فإذا لم تكن هذه الأنماط موجودة، يجب عليك إضافتها لضمان عمل الأنماط بشكل صحيح عند استخدام المكون في التطبيق. وفي حالة لم تعمل، أرجو إرفاق ملفات المشروع المصدرية، لأتفقد المشكلة ونجد الحل بإذن الله.
  6. المشكلة الرئيسية هي أن السكربت يبدو أنه لا يتحقق من حجم الملفات قبل محاولة رفعها، وبالتالي لا يتم التحقق من تجاوز حدود الحجم المسموح بها، ولحل هذه المشكلة، يجب عليك إضافة التحقق من حجم الملفات قبل محاولة رفعها. يمكنك القيام بذلك باستخدام الميزة المدمجة في PHP لفحص حجم الملف المُحمَّل قبل محاولة حفظه على السيرفر. بداية يمكنك التحقق من حجم الملف باستخدام الدالة: ثم مقارنة حجم الملف الذي تم تحميله مع الحد الأقصى المسموح به، فإذا كان حجم الملف يتجاوز الحد الأقصى المسموح به، فسوف يتم عرض رسالة خطأ ولا تقم بحفظ الملف على السيرفر.وهذا تعديل للسكريبت الخاص بك ليتماشى مع ما ذكرته: if(isset($_POST['submit'])){ $file_proj = date("Ymdhis") . $_FILES['file']['name']; $file_type = $_FILES['file']['type']; $file_tmp = $_FILES['file']['tmp_name']; $file_size = $_FILES['file']['size']; // Get the size of the file $file_dir = '../uploads/'; $id_pro = $_GET['id']; // Check if file size exceeds the maximum allowed size (in bytes) $max_file_size_allowed = 1048576; // 1 MB, you can change this as per your requirement if ($file_size <= $max_file_size_allowed) { if(in_array($file_type,array("application/pdf","application/vnd.ms-powerpoint","application/msword","application/vnd.ms-word.document.macroenabled.12"))){ move_uploaded_file($file_tmp,$file_dir.$file_proj); $sql = "INSERT INTO `file_project`(`id_p`, `path_file`) VALUES ($id_pro ,'$file_proj')"; $query = mysqli_query($con,$sql); echo '<div class="col-md-12"><div class="alert alert-success" role="alert"> تم اضافة الملف بنجاح </div></div>'; } else { echo '<div class="col-md-12"><div class="alert alert-danger text-center" role="alert">خطأ في رفع الملف الرجاء التحقق من نوع الملف<div /> </div>'; } } else { echo '<div class="col-md-12"><div class="alert alert-danger text-center" role="alert">حجم الملف يتجاوز الحد المسموح به<div /> </div>'; } }
  7. سأشرح لك ذلك، ال `window.onload` هو حدث في JavaScript يتم تنشيطه عندما يكتمل تحميل الصفحة بالكامل. يعني هذا أن أي كود تريد تنفيذه بعد أن تكون جميع المحتويات (مثل النصوص والصور والأشكال والملفات الأخرى) قد تم تحميلها بالكامل على الصفحة، يمكنك وضعه داخل دالة `window.onload`. وفي السكريبت المذكور سنقوم باستخدام `window.onload` لتحويل المستخدم تلقائيًا إلى رابط عشوائي بعد تحميل الصفحة بالكامل بهذا الشكل: <script type="text/javascript"> function showLucky(e) { var t = e.feed; var n = t.entry || []; var r = t.entry[0]; for (var i = 0; i < r.link.length; ++i) { if (r.link[i].rel == "alternate") { var href = r.link[i].href; href += "?khatar3"; window.location.href = href; } } } function fetchLuck(e) { script = document.createElement("script"); script.src = "/feeds/posts/summary?start-index=" + e + "&max-results=1&alt=json-in-script&callback=showLucky"; script.type = "text/javascript"; document.getElementsByTagName("head")[0].appendChild(script); } function feelingLucky(e) { var t = e.feed; var n = parseInt(t.openSearch$totalResults.$t, 10); var r = Math.floor(Math.random() * n); r++; fetchLuck(r); } // هنا نستخدم window.onload لتنفيذ تابع feelingLucky بعد تحميل الصفحة window.onload = function() { var script = document.createElement("script"); script.src = "/feeds/posts/summary?max-results=0&alt=json-in-script&callback=feelingLucky"; script.type = "text/javascript"; document.getElementsByTagName("head")[0].appendChild(script); }; </script>
  8. نعم قد يكون ذلك هو السبب، يمكنك اتباع هذه الخطوات للتأكد: فتح لوحة التحكم: من خلال فتح قائمة "ابدأ" والبحث عن "لوحة التحكم" ثم النقر على النتائج لفتحها. البحث عن الإعدادات الإقليمية واللغة: عبر البحث عن الإعدادات الخاصة باللغة أو الإعدادات الإقليمية في لوحة التحكم. تغيير الترميز: ابحث عن الخيار الذي يسمح لك بتغيير الترميز أو اللغة المستخدمة في النظام، وحدد UTF-8 إذا كان متاحًا كخيار. إعادة تشغيل النظام: بعد تحديد الترميز الجديد، قد يُطلب منك إعادة تشغيل النظام لتطبيق التغييرات. خلاف ذلك ممكن أن يكون السبب وراء ذلك عدم تحديد ترميز النصوص في برنامج إدارة قاعدة البيانات ففي بعض الحالات، يجب تعيين الترميز بشكل صحيح في البرنامج نفسه. يمكنك تجربة استخدام أمر SET NAMES: قبل استيراد البيانات إلى قاعدة البيانات، جرب استخدام أمر SET NAMES لتعيين الترميز المناسب، من خلال هذا الأمر: SET NAMES 'utf8mb4'; استخدام أمر CHARSET في الاستيراد فعند استيراد الملف إلى قاعدة البيانات، جرب استخدام أمر CHARSET مع تعيين الترميز المطلوب، من خلال: LOAD DATA INFILE 'file.csv' INTO TABLE table_name CHARACTER SET utf8mb4 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS; هكذا سيتمكن نظام التشغيل الخاص بك من عرض البيانات بشكل صحيح بعد التحويل إلى UTF-8.
  9. يمكن فهم كيفية عمل الحارس (Guard) وكيفية تنفيذه في قاعدة البيانات من خلال هذا المثال أين أشرح فيه الكود: مفهوم الحرّاس (Guards): في Laravel، يُعتبر الحارس جزءًا من نظام المصادقة ويُستخدم لتحديد كيفية مصادقة المستخدمين. فمثلا في الكود الذي قدمته، لديك حارسين: 'web': يستخدم لمستخدمي الويب العاديين. 'admin': يستخدم لمستخدمي الإدارة. كل حارس يحتوي على موفر لعملية المصادقة بحيث يُستخدم موفر المصادقة لاسترجاع بيانات المستخدم من قاعدة البيانات والتحقق من هويته. في الكود الخاص بك، تم تعريف الحارسين 'web' و 'admin' مع موفرات المصادقة الخاصة بهما. بحيث يُحدد driver كيفية المصادقة أين يتم استخدام 'session' driver لكلتا الحارسين. أما بخصوص هذا الكود في قاعدة البيانات: 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'admin' => 'session', 'provider' => 'admins', ], يفترض أن لديك جدولين في قاعدة البيانات: جدول 'users' للمستخدمين العاديين وجدول 'admins' للمستخدمين الإداريين. يتم تخزين بيانات المستخدمين في الجدولين بشكل منفصل، حيث يحتوي كل منهما على الحقول اللازمة مثل الاسم، البريد الإلكتروني، كلمة المرور، إلخ. لنأتي إلى مفهوم موفرات المصادقة، 'provider' هنا تعني اسم الموفر الذي يقوم بإحضار بيانات المستخدمين من قاعدة البيانات، ويتم تحديد 'users' كموفر للمستخدمين العاديين و 'admins' كموفر للمستخدمين الإداريين. عندما يحاول المستخدم تسجيل الدخول، يتم تحقق من بياناته مقابل الحارس المناسب وموفره. إذا كانت المصادقة ناجحة، يتم تسجيل دخول المستخدم وتخزين بياناته في الجلسة أو غيرها من وسائل التخزين التي تم تعيينها في driver. وباختصار، يتيح لك Laravel تحديد سلوك مختلف لعملية المصادقة لأنواع مختلفة من المستخدمين (على سبيل المثال: المستخدمين العاديين والمستخدمين الإداريين) من خلال استخدام الحراس وموفرات المصادقة المختلفة. حارس الويب (Web Guard) مثلا هنا يستخدم session driver لحفظ بيانات المصادقة. يستخدم موفر المستخدمين 'users'، مما يعني أنه سيبحث عن المستخدمين في جدول 'users' في قاعدة البيانات. 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], حارس الإدارة (Admin Guard) يستخدم session driver لحفظ بيانات المصادقة. ويستخدم موفر المستخدمين 'admins'، مما يعني أنه سيبحث عن المستخدمين في جدول 'admins' في قاعدة البيانات. 'admin' => [ 'driver' => 'session', 'provider' => 'admins', ], حارس رؤساء الأقسام (Head of Department Guard) يستخدم session driver لحفظ بيانات المصادقة. ويستخدم موفر المستخدمين 'head_of_department'. 'head_of_department' => [ 'driver' => 'session', 'provider' => 'head_of_department', ], أما حارس طلاب الثانوية العامة (HSC Guard)، يستخدم session driver لحفظ بيانات المصادقة. ويستخدم موفر المستخدمين 'hscs'. 'hsc' => [ 'driver' => 'session', 'provider' => 'hscs', ], حارس عمداء الكليات (Dean Guard) يستخدم hscs driver لحفظ بيانات المصادقة. هنا لا يوجد موفر محدد، ولكن يمكن تخصيصه ليبحث عن بيانات المستخدمين في الجدول المناسب. 'dean' => [ 'driver' => 'hscs', ], وفي الأخير حارس طلاب الكليات الأخرى (Stuff Student Guard) ويستخدم session driver لحفظ بيانات المصادقة، كما يستخدم موفر المستخدمين 'stuff_student'. 'stuff_student' => [ 'driver' => 'session', 'provider' => 'stuff_student', ], ], هذه التكوينات تحدد كيفية تخزين بيانات المصادقة وكيفية البحث عن المستخدمين في قاعدة البيانات بناءً على نوع المستخدم والسياق الذي يتم فيه تسجيل الدخول.
  10. للتحقق من ترميز الملف باستخدام Notepad++، يمكنك البدء من خلال: فتح الملف في Notepad++: انقر بزر الماوس الأيمن على الملف. اختر "افتح باستخدام" (Open with). اختر Notepad++ من القائمة. مثلما هو موضح في الصورة: ثم التأكد من ترميز الحروف: انتقل إلى قائمة "تشفير" (Encoding) في شريط القوائم. ستظهر لك قائمة بخيارات الترميز المتاحة. اختر الخيار الذي تشتبه فيه، مثل "UTF-8" أو "UTF-8 without BOM" لملفات UTF-8. بعد اختيار الترميز المناسب، يمكنك التحقق من النصوص في الملف.
  11. في لغة البايثون يمكنك ضرب مصفوفتين باستخدام المكتبة NumPy. وهذا مثال: import numpy as np # قم بتعريف المصفوفتين matrix1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) matrix2 = np.array([[9, 8, 7], [6, 5, 4], [3, 2, 1]]) # قم بضرب المصفوفتين result_matrix = np.dot(matrix1, matrix2) # طباعة المصفوفة الناتجة print(result_matrix) هذا الكود ينشئ مصفوفتين (`matrix1` و `matrix2`) ثم يستخدم دالة `()np.dot` من NumPy لضربهما. والناتج سيتم طباعته في `result_matrix`. لكن تأكد من تثبيت مكتبة NumPy إذا لم تكن مثبتة بالفعل باستخدام هذا الأمر: `pip install numpy`.
  12. عند استيراد ملف CSV إلى جدول في قاعدة بيانات MySQL، تظهر البيانات النصية باللغة العربية عادةً على أنها علامات استفهام بدلاً من النص الصحيح باللغة العربية، يجب أولا التحقق من ترميز الحروف في ملف CSV لهذا يجب عليك أن تقوم: بفتح الملف CSV باستخدام برنامج نصي مثل Notepad++ والتأكد من أن ترميز الحروف يتوافق مع اللغة العربية، ويفضل استخدام UTF-8. لكن عند استيراد الملف CSV إلى MySQL، تأكد من تحديد الترميز المناسب. يمكنك استخدام الأمر التالي: LOAD DATA INFILE 'file.csv' INTO TABLE table_name CHARACTER SET utf8 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS; يجب عليك التأكد من أن ترميز الحروف للجدول في قاعدة البيانات MySQL معين بشكل صحيح. ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; وقبل استيراد الملف CSV، استخدم أمر SET NAMES لتعيين الترميز المناسب. SET NAMES 'utf8'; وهذا مثال لأشرح لك بشكل مبسط أكثر، لنفترض أن لدينا ملف CSV يُدعى `data.csv` ويحتوي على البيانات التالية: "اسم","عمر" "ياسر",25 "مسكين",30 ونريد استيراده إلى جدول يُدعى `users` في قاعدة البيانات نستخدم هذه الأوامر: SET NAMES 'utf8'; LOAD DATA INFILE 'data.csv' INTO TABLE users CHARACTER SET utf8 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS; ALTER TABLE users CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; بهذا، يجب أن يتم استيراد البيانات العربية بشكل صحيح دون أي مشاكل في الترميز.
  13. نعم لقد فهمت ما تريد أن تصل له، ولتعديل الروابط الخاصة بالمدونة يمكنك اتباع الأكواد التي قمنا بإرفاقها لك في الإجابة السابقة.
  14. هذه المشكلة كانت تواجه العديد من المستخدمين خاصة من كانوا يستخدمون محاكيات لتشغيل ال ios 14 فواجهوا مشكلة في سرعة عملية التجميع والتشغيل في Xcode على نظام macOS، بينما لا يواجه نفس المشكلة عند استخدامه لتطوير تطبيقات Flutter على نظام Windows. لحل هذه المشكلة، يمكن بدايةً القيام بحذف المجلدات داخل هذا الإجراء يهدف إلى تخفيض أي تأثير سلبي قد يكون لهذه المجلدات على سرعة عملية التجميع، لكن في حال لم يعمل معك يمكنك تجربة هذه الخطوات: يمكن القيام بعملية إلغاء الإقتران مع الجهاز في حالة استخدام جهاز فعلي يعمل بنظام iOS 14، ومن ثم إعادة الإقتران مع Xcode. هذا الإجراء يمكن أن يساعد في تحسين التوصيل وزيادة سرعة العمل. يمكن أيضًا التحقق من إعدادات Xcode وتحسينها، والتأكد من توافق إصدار Xcode المستخدم مع إصدار Flutter، وتحسين الكود لتجنب العمليات الزائدة التي قد تؤثر على سرعة التجميع والتشغيل.
  15. العفو، هذا مثال عن كود ملف htaccess: مثلا ووردبريس افتراضيا لا يأتي مصحوب بملف .htaccess ولا يقوم بإنشائه مباشرة بعد التثبيت، بل يتم إنشائه تلقائيا داخل المجلد الرئيسي للموقع عند تغيير او تحديث للروابط الدائمة، الكود ويكون الملف افتراضيا يحتوي على هذه الأوامر. # BEGIN WordPress RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] # END WordPress بحيث يمكنك إضاقة أي كود تريده بعد # END WordPress أز قبل # BEGIN WordPress وذلك لتفادي خلط الاوامر المخصصة مع الاوامر التي يكتبها ووردبريس افتراضيا على ملف .htaccess. RewriteEngine On # إعادة توجيه من /old-page إلى /new-page Redirect 301 /old-page /new-page # إعادة توجيه من HTTP إلى HTTPS RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # منع الوصول إلى ملفات .htaccess <Files .htaccess> Require all denied </Files> # منع الوصول إلى ملفات php.ini <Files php.ini> Require all denied </Files> # منع تصفح المجلدات Options All -Indexes
  16. لتعديل الروابط يمكن استخدام ملف .htaccess لتحويل لتحويل الرابط "page.php?id= الاستعلام" إلى "page-الاستعلام.html" يمكن أولا، البدء بتفعيل محرك الإعادة الكتابة (Rewrite Engine) من خلال هذا الأمر: RewriteEngine On بعدها يمكنك كتابة القاعدة لإعادة الكتابة (Rewrite Rule)من خلال هذين الأمرين: RewriteCond %{QUERY_STRING} id=(.*) RewriteRule ^page.php$ /page-%1.html? [R=301,L] وهذه القاعدة تحدد أنه إذا كانت السلسلة الاستعلامية تحتوي على متغير "id"، ستتم إعادة الكتابة لتكون بتنسيق "page-الاستعلام.html" بواسطة الرابط "page.php". بعدها مباشرة تقوم بتوجيه الزوار إلى الرابط الجديد، فهنا يتم استخدام `R=301` لإعادة توجيه الزوار إلى الرابط الجديد بواسطة إعادة توجيه دائمة (301 Redirect)، و `L` تحدد أن هذه هي آخر قاعدة إعادة كتابة ستتم تطبيقها. وهذا مثال عملي لأشرح الطريقة، ففرضا لدينا الرابط التالي: http://example.com/page.php?id=الاستعلام باستخدام القواعد التي ذكرتها لك سيتم تحويله إلى: http://example.com/page-الاستعلام.html وبهذا، يتم تحقيق الهدف المطلوب في تعديل الرابط.
  17. يمثل "type=text/css" في عنصر HTML `<link>` توضيحًا لنوع الملف الذي يتم ربطه بالصفحة، في سياق وربط ملف CSS، يُعرف هذا النوع بأنه وسائط نصية (text) للنوع (type) لغة التنسيق (CSS). لكن في الإصدارات الحديثة من HTML (مثل HTML5)، يُعتبر تحديد "type=text/css" اختياريًا بالنسبة لملفات CSS. هذا يعني أنه يمكنك حذفها دون تأثير على أداء ملف CSS الخاص بك. يتم فهم ملفات CSS تلقائيًا كملفات CSS من قِبل المستعرضات الحديثة، حتى بدون تحديد نوع الملف بشكل صريح. لذا، يُمكنك كتابة العنصر `<link>` ببساطة كما يلي: <link href="style.css" rel="stylesheet"> لذا يمكن ربط وكتابة عنصر الربط وبهذه الطريقة، يتم توضيح أن الملف المرتبط هو ملف CSS بدون الحاجة إلى تحديد نوع الملف بشكل صريح. هذا يجعل الشيفرة أقل تعقيدًا وأكثر وضوحًا.
  18. فهمتك، ستحتاج إلى تطوير الدوال والتكرارات اللازمة في ملفات القوالب لعرض المحتوى بطريقة ديناميكية باتباع هذه الخطوات: هيكلة ملفات القوالب، من خلال إنشاء مجلد يحتوي على ملفات القوالب الخاصة بموقعك، مثل: - `index.php`: لعرض الصفحة الرئيسية. - `header.php`: لعرض الهيدر. - `footer.php`: لعرض الفوتر. - `single.php`: لعرض صفحة التدوينة الفردية. - `post.php`: لعرض التدوينات الفردية. تطوير الدوال والتكرارات، ففي كل ملف قالب، يمكنك القيام بتطوير الدوال والتكرارات اللازمة لعرض المحتوى بشكل ديناميكي. على سبيل المثال، في ملف `index.php`، يمكنك استخدام حلقة تكرارية لعرض مقالات المدونة واستدعاء دالة لعرض العنوان والصورة والمحتوى لكل مقالة. بعدها يمكنك تطوير صفحة التدوينة الفردية (`single.php`) ففي هذا الملف، يمكنك استخدام دوال لعرض تفاصيل التدوينة الفردية مثل العنوان، المحتوى، التصنيفات، التعليقات، إلخ. بعدها في تطوير صفحة التدوينة (`post.php`) يمكنك استخدام هذه الصفحة لعرض التدوينات الفردية بعد النقر عليها من الصفحة الرئيسية أو الصفحة الفردية. ويجب أن تحرص على تنظيم الربط بين الصفحات في ملفات القوالب لضمان التنقل السلس بين الصفحات.
  19. لإضافة نظام تحكم بالقوالب والستايلات إلى المدونة يمكنك أولا، إنشاء هيكل قاعدة البيانات مثلا بهذا الشكل: بحيث تقوم بإنشاء جدول في قاعدة البيانات يحتوي على الحقول التالية: - template_id (معرف القالب) - template_name (اسم القالب) - template_file_path (مسار الملف) - template_preview_image (صورة المعاينة) - is_active (تفعيل/تعطيل) CREATE TABLE templates ( template_id INT AUTO_INCREMENT PRIMARY KEY, template_name VARCHAR(255) NOT NULL, template_file_path VARCHAR(255) NOT NULL, template_preview_image VARCHAR(255), is_active TINYINT(1) DEFAULT 0 ); ثم تطوير واجهة المستخدم للوحة التحكم، بحيث تقوم بإنشاء صفحة في لوحة التحكم تعرض القوالب المتاحة وتوفر خيارات لتحميل قوالب جديدة وتفعيلها أو تعطيلها. تقوم بإضافة خيار لتحميل ملفات القوالب من لوحة التحكم وعندما يتم تحميل ملف القالب، تفك الضغط عنه وتحفظه في مجلد مخصص على الخادم. وبعد تحميل القالب، تضيف خيارًا لتفعيله ليصبح قابلًا للاستخدام على الموقع، مع إضافة خيار لتحميل ملفات الستايلات لتخصيص المظهر. يمكن حفظ هذه الملفات في مجلد مخصص أيضًا.
  20. الفرق بينهما متباين للغاية، فالمترجم مثلا (Compiler) هو برنامج يقوم بتحويل الشفرة المصدرية للبرنامج (مثل الشفرة المكتوبة بلغة C++ أو Java) إلى رمز ثنائي (ملف تنفيذي) يمكن تشغيله مباشرة من قبل الحاسوب. ويتم استخدامه لكونه يحمل: أداءً عاليا: حيث يتم تحويل الشفرة المصدرية إلى رمز ثنائي مباشرة، وبالتالي تكون البرامج التي تم إنشاؤها باستخدام المترجم عادةً أكثر كفاءة من حيث الأداء. تحسينات في الأمان: فبمجرد تحويل الشفرة المصدرية إلى رمز ثنائي، يصعب بشكل عام على المستخدمين الآخرين رؤية أو تعديل الشفرة المصدرية. هذا يجعل من الصعب استغلال الثغرات الأمنية في البرامج. الانتشار الواسع: بحيث يمكن تشغيل البرامج التي تم تحويلها باستخدام المترجم على أنظمة متعددة دون الحاجة إلى ترجمتها مرة أخرى، مما يجعلها ملائمة للتوزيع. أما ال (Interpreter) فهو برنامج يقوم بتنفيذ الشفرة المصدرية للبرنامج مباشرة دون الحاجة إلى تحويلها إلى رمز ثنائي. ويتم استخدامه عادة لوجود هذه الميزات: التطوير والاختبار السريع: بحيث يمكن تطوير واختبار البرامج باستخدام المترجم بشكل أسرع من المترجم، حيث يمكن للمطورين رؤية نتائج تنفيذ الشفرة المصدرية على الفور دون الحاجة إلى تحويلها أولاً. التفاعلية: هو مفيد في بناء الأنظمة التفاعلية مثل الواجهات الرسومية، حيث يمكن للمستخدمين التفاعل مباشرة مع البرنامج ورؤية النتائج على الفور. التوزيع السهل: بحيث يمكن توزيع البرامج التي تستخدم المترجم بسهولة أكبر، حيث لا يلزم إعادة تحويل الشفرة المصدرية إلى رمز ثنائي قبل تشغيلها على الأنظمة الأخرى. ومن هنا يمكنك أن تستفيد أكثر لفهمهما بشكل جيد:
  21. بالطبع، ففهم أنظمة التشغيل من المواد النظرية في مجال علوم الحاسوب ويعتبر ذلك أمراً مهماً. فأنظمة التشغيل تعتبر جزءاً أساسياً في هذا المجال، وهي تهتم بكيفية تنظيم وإدارة الموارد في الحاسوب مثل المعالج، الذاكرة، والتخزين، بالإضافة إلى توفير واجهة بين المستخدم والجهاز الحاسوبي. بالنسبة للشقّ الثاني من سؤالك، فالمواد النظرية تشمل مجموعة واسعة من المواضيع التي تركز على الأسس والمبادئ الرئيسية التي تقوم عليها تطبيقات الحاسوب والبرمجيات. من بين المواد النظرية الشائعة في علوم الحاسوب: هياكل البيانات والخوارزميات**: دراسة تنظيم وتخزين البيانات بشكل فعال وفعالية الخوارزميات في معالجتها. تشمل هذه المواد النظرية دراسة القوائم المتسلسلة، الأشجار، الجرافات، وأساليب البحث والفرز نظرية الحوسبة**: وتشمل المواد مثل نظرية الأتمتة، والحساب المعقد، والحوسبة التوزيعية، ونظرية اللغات والآلات. نظرية قواعد البيانات: وتشمل دراسة هياكل البيانات القاعدية، والاستعلامات، والمعالجة المتعددة المستوى. الشبكات وأمن المعلومات: ويغطي هذا المجال البروتوكولات الشبكية، وأمان المعلومات، وإدارة الشبكات. نظرية اللغات البرمجية: وتشمل دراسة النماذج اللغوية، وتحليل وتصميم اللغات، وتحويل اللغات. نظرية النظم: وتركز على تحليل وتصميم النظم الكبيرة والمعقدة، وتضمن تكامل مكونات النظام وتحديد متطلبات النظام وتصميم الهياكل المناسبة. بالنسبة للسؤال الآخر، فإن فهم أنظمة التشغيل والمواد النظرية في علوم الحاسوب يمكن أن يفرق بين مبرمج جيد ومبرمج ممتاز، لكنه ليس العامل الوحيد. البرمجة مثلا بلغات مثل C و C++ تتطلب فهماً عميقاً للمفاهيم البرمجية والقدرة على كتابة الشيفرة بشكل فعال ومنظم. ومع ذلك، فهم كيفية تفاعل البرامج مع النظام التشغيل وكيفية استخدام الموارد بشكل فعال يمكن أن يجعل فارقاً في أداء المبرمج وفي جودة البرمجيات التي يقوم بتطويرها. وهذه بعض المصادر التي يمكن أن تفيدك لفهم أنظمة التشغيل:
  22. في حالة ما كنت تقصد بالموقع أكاديمية حسوب، فهي بالفعل تتضمن مقالات في هذا السياق والمجال، هذه بعض المصادر التي يمكنك الاطلاع عليها: كما يوجد مقال شامل على مدونة مستقل أتمنى أن يفيدك: https://blog.mostaql.com/content-writing-skills/
  23. من أجل جلب بيانات مستخدم محدد من Firebase في Flutter، يمكنك استخدام Firebase Realtime Database أو Firebase Firestore باستخدام حزمتي `firebase_database` أو `cloud_firestore`. مثلا باستخدام باستخدام Firebase Firestore سيكون بهذا الشكل: import 'package:flutter/material.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; class UserScreen extends StatelessWidget { final String userId; UserScreen({required this.userId}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('User Data'), ), body: FutureBuilder<DocumentSnapshot>( future: FirebaseFirestore.instance.collection('users').doc(userId).get(), builder: (context, AsyncSnapshot<DocumentSnapshot> snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return Center(child: CircularProgressIndicator()); } if (snapshot.hasError) { return Center(child: Text('Error: ${snapshot.error}')); } if (!snapshot.hasData || !snapshot.data!.exists) { return Center(child: Text('User not found!')); } var userData = snapshot.data!.data() as Map<String, dynamic>; return ListView( children: [ ListTile( title: Text('Name: ${userData['name']}'), ), ListTile( title: Text('Email: ${userData['email']}'), ), // يمكنك عرض المزيد من البيانات هنا ], ); }, ), ); } } ففي هذا المثال، يتم تحميل بيانات المستخدم المحدد (باستخدام `userId`) من مجموعة المستخدمين في Firebase Firestore، ثم يتم عرضها في واجهة المستخدم باستخدام `ListView`. يرجى استبدال `users` بمسار مجموعة المستخدمين الخاصة بك في Firebase Firestore، لكن يجب على المستخدم الذي تحاول جلب بياناته أن يكون لديه إذن الوصول إلى البيانات في قاعدة البيانات وإلا فلن يتم الأمر.
  24. يبدو أنك نسيت إرفاق السؤال بشكل جيد، من فضلك أرفق السؤال كاملا كي أتمكن من فهمك ومساعدتك.
  25. في بعض الأحيان قد لا يعمل معك التطبيق وانت تستخدم خدمات Firebase وذلك لان المده المسموح بها قد انتهت ولتفادي هذة المشكلة يمكنك الانتقال الى حسابك في الfirebase ومنها اختيار cloud firebase ( يمكنك الوصول اليه من الشريط العلوي ) ومن rules سوف تشاهد المدة الخاصه بالتطبيق يمكنك رفعها. العديد من المشاكل قد تكون السبب وهذا عادي، يمكنك التحقق من إعدادات التوجيه Domain Verification بحيث يجب أن تقوم بإضافة نطاق تطبيقك إلى إعدادات التوجيه في Firebase. هذا يتطلب التحقق من ملكية النطاق وتفعيله. ويساعد هذا الإجراء كثيرا في ضمان توافق خدمات Firebase مع تطبيقك عندما يتم نشره. الخطوة التالية هي إضافة مفتاح SHA-1 الخاص بتطبيقك على Google Play إلى إعدادات مشروعك في Firebase. وهذا مهم لتمكين التواصل الآمن بين تطبيقك وخدمات Firebase على Google Play. قد تحتاج أيضا إلى ضبط بعض القواعد في لوحة التحكم في Firebase للسماح بالوصول من تطبيقك. هذا يشمل إعداد قواعد الأمان والوصول بحسب احتياجات تطبيقك لضمان استخدامها بطريقة آمنة وفعالة. كما يجب أن تتأكد من أن جميع مفاتيح الواجهة البرمجية المستخدمة في تطبيقك مفعلة وصحيحة. قد تكون هذه المفاتيح مطلوبة لتمكين بعض الخدمات في Firebase مثل التحليلات وتخزين البيانات.
×
×
  • أضف...