-
المساهمات
12715 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
355
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Mustafa Suleiman
-
المقصود هو طباعة الرابط أو العنوان الذي تقوم بتمريره إلى src، أي من خلال console.log مع حذف مُشغل ? الخاص بـ optional chaining من العنوان. وبتفقد الكائن العائد من الطلب في الصورة، ستجد أن data هي مصفوفة بينما انت تحاول استخدامها ككائن من خلال النقطة . والصحيح هو استخدام القوسين [] لاستخراج العنصر الذي نريده وهو العنصر 0 أي [0] وذلك العنصر هو كائن بينما data هي مصفوفة بها كائنات.
-
لا تسمح ويكيبيديا بنشر السير الذاتية بشكل عام، فهي تهدف إلى توفير محتوى موسوعي، وليس للترويج الذاتي. لكن يتم قبول السير الذاتية العلمية فقط في حالات استثنائية، مثل أن يكون الشخص الذي تنوي كتابة سيرة ذاتية له قد حقق إنجازات علمية بارزة وذات تأثير كبير في مجاله، ويجب أن تستوفي السيرة الذاتية معايير ويكيبيديا الصارمة للمحتوى. ستجد تفصيل هنا بخصوص معايير ويكيبيديا للسير الذاتية العلمية: https://ar.wikipedia.org/wiki/ويكيبيديا:السير_الذاتية وإن لم يكن الشخص مؤهلاً، فلا تحاول إنشاء سيرة ذاتية له على ويكيبيديا. وإن كان مؤهلاً عليك بالتالي: اكتب مسودة للسيرة الذاتية تتضمن جميع المعلومات ذات الصلة عن الشخص وإنجازاته. تأكد من استخدام لغة محايدة وموضوعية. استشهد بمصادر موثوقة لدعم جميع المعلومات التي تقدمها. قم بتنسيق السيرة الذاتية بشكل واضح وسهل القراءة. ثم إنشاء حساب ويكيبيديا (إذا لم يكن لديك حساب): انتقل إلى الرابط هنا انقر فوق "إنشاء حساب". اتبع التعليمات لإنشاء حسابك. ثم قم بتسجيل الدخول. بعد ذلك عليك إنشاء صفحة جديدة للسيرة الذاتية، انقر فوق "إنشاء" في شريط القائمة العلوي، ثم اكتب عنوان الصفحة باسم الشخص الذي تنوي كتابة سيرة ذاتية له، وانقر فوق "إنشاء صفحة". ثم رفع المسودة وتحريرها وتنسيقها واستخدام الصور ومقاطع الفيديو إن لزم الأمر والمصادر ذات الصلة والتأكد من أنها خالية من الأخطاء اللغوية، ثم قم بطلب مراجعة السير من قبل محرر ويكيبيديا (انقر فوق "طلب مراجعة" في شريط الأدوات الموجود أعلى الصفحة). سيقوم محررو ويكيبيديا بمراجعة الصفحة وتقديم ملاحظاتهم، قم بإجراء أي تعديلات ضرورية بناءً على ملاحظاتهم، وبمجرد موافقة المحررين على الصفحة، سيتم نشرها على ويكيبيديا. دليل المبتدئين في إنشاء صفحة ويكيبيديا: https://ar.wikipedia.org/wiki/ويكيبيديا:إنشاء_سيرة_شخصية
-
في جميع دورات الأكاديمية تم مراعاة أنها موجهة لمتحدثي اللغة العربية، لذا لا يوجد شرط خاص باللغة الإنجليزية، حيث يتم شرح كل شيء بالعربية مع ذكر المصطلحات الإنجليزية أحيانًا للمعرفة. لكن في مجال البرمجة نفسه، فستحتاج بالطبع إلى الوصول لمستوى جيد في القراءة والاستماع لأن المصادر باللغة الإنجليزية والمستندات والشروحات الخاصة بالمكتبات وإطارات العمل واللغة البرمجية ستجدها كلها بالإنجليزية. لذا كبداية تستطيع البدء بدون مشكلة بالعربية لكن ضع في إعتبارك ما ذكرته وهو ضرورة تطوير مهارة القراءة والاستماع بالإنجليزية.
-
ستجد أسفل فيديو الدرس في نهاية الصفحة صندوق تعليقات كما هنا، أرجو طرح الأسئلة أسفل الدرس وليس هنا في قسم الأسئلة البرمجة حيث نطرح الأسئلة العامة الغير متعلقة بمحتوى الدورة أو الدرس، وذلك لمساعدتك بشكل أفضل.
-
لا داعي لذكر مدة زمنية محددة وإلزام نفسك بها، بل اطرح ما تستطيع فعله وذكر المهارات التي تمتلكها وما الفائدة التي ستعود على العميل من تلك المهارات فهو لا يدري ما معنى Full-Stack. ويجب أن تظهر بمظهر إحترافي ومنظم وعدم الإنجراف وراء ما يطرحه الآخرين. مع ذكر شرط أنه يتم تحديد مدة المشروع بناءًا على المتطلبات ومدى تعقيد المشروع، وعند إعطاء مدة زمنية للعميل قم بمضاعفتها ففي البداية لن تكون لديك خبرة بتحديد المدة اللازمة، وفي حال قمت بإنجاز المشروع في أقل من ذلك فستكون تلك نقطة جيدة لصالحك وليس العكس. يمكنك ذكر مثلاً أن تطبيق بسيط مكون من 5 صفحات يستغرق مدة زمنية تساوي كذا
- 4 اجابة
-
- 1
-
قم بتثبيت مديز الحزم snap من خلال تنفيذ الأوامر التالية بالترتيب: sudo mv /etc/apt/preferences.d/nosnap.pref ~/Documents/nosnap.backup sudo apt update sudo apt install snapd ثم قم بتسجيل الخروج من حسابك وتسجيل الدخول مجددًا في النظام أو أعد تشغيل النظام. ثم تثبيت البرنامج من خلال: sudo snap install gabutdm
-
لا حاجة إلى ذلك، في حال لديك البيانات الخاصة بالحساب وتتذكريها جيدًا، تستطيعي استرجاع الحساب من خلال مراسلة الدعم، توجهي للصفحة التالية من خلال هاتفك: https://www.instagram.com/hacked/ ثم اختاري my account was hacked ثم اضغطي على next، بعد ذلك عليك إدخال اسم المستخدم أو رقم الهاتف أو البريد للبحث عن حسابك ثم اضغطي على next. وسيتم سؤالك عن رفع صور للتعرف عليك وإثبات أنك صاحبة الحساب عليك الضغط على yes i have photos ثم سيطلب منك بريد إلكتروني أدخليه للتواصل معك وإرسال رابط إليه. بعد ذلك سيطلب منك تصوير نفسك بالكاميرا الأمامية للتعرف عليك وإتباع تعليمات التصوير مثل تدوير الوجه وخلافه. والآن انتظري يوم إلى يومين وسيتم إرسال بريد على الإيميل الذي أدخلتيه به رابط لاسترجاع الحساب.
-
أولاً لديك خطأ في حساب متوسط التقييمات في السطر الذي يحسب فيه المتوسط النهائي finalRate. فالمتغير rate ربما يتم إرساله كقيمة غير صحيحة مثل قيمة نصية من الواجهة الأمامية، لذا لنتأكد من أن rate يتم تحويله إلى رقم صحيح قبل استخدامه في الحساب، وأيضًا التأكد من صحة قيم التقييم المرسلة من الواجهة الأمامية. أيضًا بعد إضافة المراجعة إلى قاعدة البيانات، عليك إعادة بيانات الكتاب المحدثة إلى الواجهة الأمامية، بما في ذلك التقييم الجديد، وبعد تلقي بيانات الكتاب المحدثة من الخادم، يجب تحديث حالة الكتاب في الواجهة الأمامية لتعكس التقييم الجديد. ثم استخدام البيانات المحدثة للكتاب في المكون لعرض التقييم الجديد. إليك التعديلات مع تعليقات لتوضيح أماكن التعديل. تعديل في bookController.js: const addReview = asyncHandler(async(req, res) => { const { id } = req.params const { comment, rate } = req.body const book = await Book.findById(id) const user = await User.findById(req.userId) // التحقق من وجود الكتاب if (!book) { return res.status(404).json({ message: "Book Not Found" }) } // التحقق من أن المستخدم لم يقيم الكتاب مسبقاً const isRated = book.reviews.findIndex(m => m.user == req.userId) if (isRated > -1){ return res.status(403).send({ message: "Review Is Already Added" }); } // تحويل تقييم المستخدم إلى رقم صحيح والتحقق من صحته const numericRate = parseInt(rate, 10); if (isNaN(numericRate) || numericRate < 1 || numericRate > 5) { return res.status(400).send({ message: "Invalid rating value" }); } // حساب التقييم النهائي const totalRate = book.reviews.reduce((sum, review) => sum + review.rate ,0) const finalRate = (totalRate + numericRate) / (book.reviews.length + 1) // تحديث بيانات الكتاب بإضافة المراجعة الجديدة وتحديث التقييم await Book.updateOne( { _id: id }, { $push: { reviews: { user: req.userId, username: user.name, comment, rate: numericRate } }, $set: { rate: finalRate } } ) // إعادة بيانات الكتاب المحدثة بعد الإضافة const updatedBook = await Book.findById(id); res.status(201).json(updatedBook) }) تحديث الدالة postReview في apiCall: export function postReview(bookId, review) { return async (dispatch, getState) => { try { dispatch(bookActions.setLoading()) const {data} = await axios.post(`${BOOK_URL}/${bookId}/reviews`, review, { headers: { "authorization": getState().auth.user.accessToken } }); // عرض رسالة نجاح باستخدام toast toast.success(data?.message) // تحديث بيانات الكتاب المحدثة في الحالة dispatch(bookActions.updateBook(data)); dispatch(bookActions.clearLoading()); } catch (error) { // عرض رسالة خطأ باستخدام toast toast.error(error?.response?.data.message); dispatch(bookActions.clearLoading()); } }; } تعديل في الواجهة الأمامية Modal.js const Modal = ({ showModal, handleClose, book }) => { const [rate, setRating] = useState(0); const [comment, setComment] = useState(""); const dispatch = useDispatch(); const navigate = useNavigate(); const submitReview = (e) => { e.preventDefault(); if (comment === "") { // التحقق من وجود تعليق وعرض رسالة خطأ في حال عدم وجوده return toast.error("Comment is required") } // تحويل تقييم المستخدم إلى رقم صحيح والتحقق من صحته const numericRate = parseInt(rate, 10); if (isNaN(numericRate) || numericRate < 1 || numericRate > 5) { return toast.error("Invalid rating value"); } // إرسال المراجعة باستخدام الدالة postReview dispatch(postReview(book._id, { rate: numericRate, comment })) }; return ( <div className={`modal ${showModal ? "show" : ""}`}> <div className="modal-content"> <span className="close" onClick={handleClose}>×</span> <h2>Submit Your Review</h2> <form onSubmit={submitReview}> <div className="rating-input"> <label>Rating:</label> <select value={rate} onChange={(e) => setRating(e.target.value)} required> <option value="" disabled>Select a rating</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> <option value="4">4</option> <option value="5">5</option> </select> </div> <div className="comment"> <label>Comment:</label> <textarea value={comment} onChange={(e) => setComment(e.target.value)} required /> </div> <button className='modal-btn' type="submit">Submit</button> </form> </div> </div> ); }; export default Modal; تحديث bookSlice لتضمين الدالة updateBook: const bookSlice = createSlice({ name: "book", initialState: { books: [], error: false, loading: false, }, reducers: { getBooks(state, action) { state.books = action.payload; }, findBook(state, action) { state.books = action.payload; }, addReviews(state, action) { state.books = action.payload; }, updateBook(state, action) { // البحث عن الكتاب المحدث وتحديثه const updatedBook = action.payload; const index = state.books.findIndex(book => book._id === updatedBook._id); if (index !== -1) { state.books[index] = updatedBook; } }, setLoading(state) { state.loading = true; }, clearLoading(state) { state.loading = false; }, setError(state) { state.error = true; }, clearError(state) { state.error = false; }, } }); export const bookActions = bookSlice.actions; export default bookSlice.reducer;
- 1 جواب
-
- 1
-
في البداية بدون دراية برمجية لن تتمكن من التعديل والتطوير، يجب الإلمام بلغة PHP لفعل ذلك بجانب لغات الويب HTML, CSS, JS. أولاً، عليك تثبيت Smarty: composer require smarty/smarty ثم قم بتهيئة Smarty في ملف PHP الرئيسي، ولنفترض أن ملفك الرئيسي هو index.php. <?php require_once 'vendor/autoload.php'; $smarty = new Smarty(); $smarty->setTemplateDir(__DIR__ . '/template'); $smarty->setCompileDir(__DIR__ . '/template_c'); $smarty->setCacheDir(__DIR__ . '/cache'); $smarty->setConfigDir(__DIR__ . '/configs'); ثم لنقم بكتابة كود PHP لقراءة القوالب المتاحة في مجلد القوالب. <?php // تابع للخطوة 2 $templateDir = __DIR__ . '/template'; $templateFolders = array_filter(glob($templateDir . '/*'), 'is_dir'); $templates = []; foreach ($templateFolders as $folder) { $templateName = basename($folder); $templates[] = $templateName; } $smarty->assign('templates', $templates); $smarty->display('admin.tpl'); بعد ذلك إنشاء ملف قالب Smarty يسمى admin.tpl لعرض القوالب في جدول. <!-- admin.tpl --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Admin Panel - Templates</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"> </head> <body> <div class="container"> <h1>Available Templates</h1> <table class="table table-bordered"> <thead> <tr> <th>Template Name</th> <th>Action</th> </tr> </thead> <tbody> {foreach from=$templates item=template} <tr> <td>{$template}</td> <td> <form method="post" action="install_template.php"> <input type="hidden" name="template_name" value="{$template}"> <button type="submit" class="btn btn-primary">Install Template</button> </form> </td> </tr> {/foreach} </tbody> </table> </div> </body> </html> ثم إنشاء ملف PHP يسمى install_template.php لتنفيذ عملية تركيب القالب. <?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { $templateName = $_POST['template_name']; // نفذ عملية تركيب القالب هنا // تستطيع نسخ الملفات إلى مجلد آخر أو تحديث إعدادات قاعدة البيانات echo "Template '{$templateName}' has been installed!"; } else { echo "Invalid request."; } بذلك ستتمكن من عرض القوالب المتاحة في مجلد template على شكل جدول في صفحة لوحة التحكم، مع زر لتركيب كل قالب، وعند النقر على زر "تركيب القالب"، سيتم إرسال طلب POST إلى install_template.php لتنفيذ عملية التركيب، تستطيع تعديل عملية التركيب حسب متطلباتك.
-
في البداية ستحتاج بالطبع إلى إنشاء حساب مطور على Google Cloud Vision API أو Amazon Rekognition. ثم ضبط إعدادات متغيرات البيئة في المشروع في ملف .env وأهما مفاتيح الـ API، عليك إضافة إعدادات Google Cloud Vision API أو Amazon Rekognition فقط، وإليك كلاهما: GOOGLE_CLOUD_VISION_API_KEY=google_api_key AWS_ACCESS_KEY_ID=aws_access_key AWS_SECRET_ACCESS_KEY=aws_secret_key AWS_REGION=aws_region ثم أنشئ نموذج وقاعدة بيانات لتخزين بيانات الصور: php artisan make:model Image -m في ملف التهجير: Schema::create('images', function (Blueprint $table) { $table->id(); $table->string('image_path'); $table->json('features'); // لتخزين بيانات الميزات (features) $table->timestamps(); }); أيضًا اعتمد على مكتبة مثل intervention/image لمعالجة الصور وضغط حجمها قبل إرسالها. ثم استخدام مكتبة google/cloud-vision أو aws/aws-sdk-php للتواصل مع المنصة. وإليك مثال لكلاهما اختر ما تريد: // ImageController.php use Illuminate\Http\Request; use Intervention\Image\Facades\Image; use Google\Cloud\Vision\V1\ImageAnnotatorClient; // or Aws\Rekognition\RekognitionClient; public function uploadImage(Request $request) { $image = $request->file('image'); // Process and resize the image $image->resize(300, 300); // Analyze the image using Google Cloud Vision API or Amazon Rekognition $visionClient = new ImageAnnotatorClient(); // or $rekognitionClient = new RekognitionClient(); $response = $visionClient->annotateImage(file_get_contents($image->getPathname()), ['LABEL_DETECTION']); // or $rekognitionClient->detectLabels(['Image' => ['Bytes' => file_get_contents($image->getPathname())]]); $features = $response->getLabelAnnotations(); // or $response->getLabels(); // Store the features in the database $imageFeatures = new ImageFeatures(); $imageFeatures->features = json_encode($features); $imageFeatures->save(); return response()->json(['message' => 'Image uploaded and analyzed successfully']); } بعد ذلك اعتمد على مكتبة doctrine/dbal للتفاعل مع قاعدة البيانات، حيث تتوفر cosine similarity أو Euclidean distance لقياس التشابه بين ميزات الصور. use App\ImageFeatures; use Illuminate\Http\Request; public function searchByImage(Request $request) { $searchImage = $request->file('image'); $searchFeatures = $this->analyzeImage($searchImage); // Query the database to find similar images $similarImages = ImageFeatures::all()->filter(function ($imageFeature) use ($searchFeatures) { $storedFeatures = json_decode($imageFeature->features, true); return $this->cosineSimilarity($searchFeatures, $storedFeatures) > 0.5; }); return response()->json(['similar_images' => $similarImages]); } private function analyzeImage($image) { // هنا يجب أن تضع الكود الخاص بتحليل الصورة والحصول على الميزات // سأضع مثال بسيط لتحليل الصورة return [/* array of features */]; } private function cosineSimilarity($features1, $features2) { $dotProduct = 0; $magnitude1 = 0; $magnitude2 = 0; foreach ($features1 as $index => $feature1) { $dotProduct += $feature1 * $features2[$index]; $magnitude1 += $feature1 * $feature1; $magnitude2 += $features2[$index] * $features2[$index]; } $magnitude1 = sqrt($magnitude1); $magnitude2 = sqrt($magnitude2); if ($magnitude1 * $magnitude2 == 0) { return 0; } return $dotProduct / ($magnitude1 * $magnitude2); } لتحسين الأداء، باستطاعتك استخدام تقنيات مثل الفهرسة المكانية أو مكتبات متخصصة في البحث عن الصور مثل Elasticsearch.
-
افتحي مشروع Unity الذي تريدين تصديره كمكتبة، وانتقلي إلى File > Build Settings، وفي نافذة Build Settings، اختاري المنصة المستهدفة (Android أو iOS). وفي حال تستهدفي Android، اختاري Android من القائمة. ثم اضغطي على Player Settings في الزاوية السفلية اليسرى من نافذة Build Settings، وضبط الإعدادات اللازمة مثل اسم الحزمة (Package Name) وغيرها. وفي نافذة Build Settings، تأكدي من اختيار المنصة الصحيحة ثم اضغطي على Export في الزاوية اليمنى السفلى. وعندما تظهر نافذة التصدير، عليك تحديد خيار Export as a Library (أو خيار مشابه يعبر عن تصدير كمكتبة)، ثم اختيار مكان حفظ المجلد الذي سيحتوي على مكتبة Unity والضغط على Export لبدء عملية التصدير. بعد اكتمال التصدير، ستجدي مجلد يحتوي على مكتبة Unity في المسار الذي اخترتيه، باستطاعتك الآن دمج تلك المكتبة في مشروع Flutter كما هو موضح في الخطوات التي شرحها سابقًا.
-
بالطبع لا، قد أديت ما عليك، هناك أخطاء بحاجة إلى خبرة مكتسبة تتأتى من التعلم من الأخطاء بمرور الوقت وتطور المستوى من خلال تنفيذ المشاريع والممارسة العملية والتعرض لأفكار وأخطاء مختلفة، لذا في البداية أنت بحاجة إلى من يرشدك لتوفير الوقت عليك وتوجيهك للطريق الصحيح. ليس المطلوب منك حل جميع المشاكل، بل المطلوب هو بذل جهدك ومحاولة اكتشاف ما المشكلة وفهم السبب، وإن تعذر ذلك عليك بالسؤال فمن لا يسأل لا يصل وتلك خصلة ليست جيدة فالسؤال بعد أن إتمام جانبك من المجهود هو الصحيح. المقال التالي سيفيدك:
- 3 اجابة
-
- 1
-
تعلم الآلة يعد مجالًا واسعًا ومعقدًا، ولكنه بالطبع أكثر سهولة عند البدء بالمفاهيم الأساسية وتتقدم بشكل تدريجي، وبما أنك تدرس حاليًا الـ Regression الانحدار، فتلك نقطة جيدة للبدء. وتتوفر العديد من المكتبات والأدوات مثل Scikit-Learn، TensorFlow، و PyTorch التي تسهل عملية بناء نماذج تعلم الآلة، فتلك المكتبات توفر واجهات برمجية سهلة الاستخدام وأدوات جاهزة للانحدار، التصنيف، التجميع، وغيرها. المجال الذي اخترته ليس بالسهل فهو بحاجة إلى وقت أطول وصبر كذلك، لذا عليك البدء بالأساسيات ثم التدرج ولا تنتظر نتائج سريعة، لذا مفتاح النجاح هو الاستمرار والصبر. فلا تنظر للأمر بصورته الكلية فتحبط، بل حاول تخطي جزء جزء لتصل، فمع تقدمك في تعلم الآلة ومحاولتك لحل مشكلات أكثر تعقيدًا، فإن تعقيد الكود يزيد بشكل كبير، وسيتطلب منك ذلك القيام بالعديد من المهام الإضافية، مثل: معالجة البيانات Preprocessing وتشمل تنظيف البيانات، معالجة القيم الناقصة، تحويل البيانات النصية إلى رقمية، وغيرها، وذلك أمرًا مرهقًا ويستغرق وقتًا طويلًا. هندسة الميزات Feature Engineering من خلال إنشاء ميزات جديدة من البيانات الحالية بشكل إبداعي لزيادة دقة النموذج، وتلك العملية تتطلب تفكيرًا إبداعيًا وفهمًا عميقًا للبيانات.
- 4 اجابة
-
- 1
-
هل إصدار Gradle المستخدم في مشروعك متوافق مع إصدار Android Gradle Plugin (AGP) المذكور في الخطأ (7.3.0)، عليك العثور على ملف gradle-wrapper.properties وتحققي من تعيين إصدار Gradle بشكل صحيح. distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.0-all.zip أيضًا هل مشروع Unity تم تصديره بشكل صحيح كـ Android Library، عليك القيام بذلك من خلال الذهاب إلى File > Build Settings وتحديد Android كمنصة الهدف، ثم التأكد من تمكين خيار Export Project إذا كان موجودًا. وفي مشروع Flutter، تأكدي من أن لديك إعدادات Gradle الصحيحة لاستيراد مشروع Unity، من خلال فتح ملف settings.gradle في مشروع Flutter وتأكد من إضافة مشروع Unity بشكل صحيح. include ':app' include ':unityLibrary' project(':unityLibrary').projectDir = new File('../UnityExport/unityLibrary') ثم افتحي ملف build.gradle لمشروع Flutter وإضافة تبعية مشروع Unity بشكل صحيح. dependencies { implementation project(':unityLibrary') } ثم تفقد هل إعدادات Kotlin متوافقة مع إصدارات الأدوات الأخرى، توجهي إلى ملف build.gradle وتفقدي هل تم إضافة الإعدادات الصحيحة. buildscript { ext.kotlin_version = '1.5.31' repositories { google() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:7.3.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } بعد تطبيق جميع التعديلات، قومي بإعادة مزامنة المشروع من خلال Android Studio أو استخدام أمر flutter pub get لإعادة جلب الحزم والتبعيات.
-
الفارق الأساسي هو كيفية التعامل مع حالة التحميل loading state. tفي الكود الأول، تقوم بالتحقق من حالة التحميل loading ولكنك لم تقم بإرجاع الـLoader كجزء من الـJSX، أي الكود داخل الشرط if (loading) لا يعتبر جزءًا من النتيجة المرجعة من الدالة Books. بينما في الكود الثاني، تقوم باستخدام تعبير ثلاثي للتحقق من حالة التحميل loading، وإن كانت الحالة loading، يتم إرجاع الـLoader كجزء من الـJSX، وإذا لم تكن الحالة loading يتم عرض الكتب. لذا الكود الثاني يعيد الـLoader كجزء من النتيجة المرجعة من الدالة Books، بينما الكود الأول لا يعيد أي شيء في حالة التحميل، مما يعني أن العنصر Oval لن يتم عرضه. إذن في الكود الأول عليك تعديل الجزء الخاص بحالة التحميل ليعيد الـLoader كجزء من النتيجة المرجعة من الدالة Books: if (loading) { return ( <Oval height={120} width={120} color="rgb(247, 96, 14)" wrapperStyle={{ height: "70vh", display: "flex", alignItems: "center", justifyContent: "center", }} wrapperClass="" visible={true} ariaLabel="oval-loading" secondaryColor="#E2E2E2" strokeWidth={3} strokeWidthSecondary={3} /> ); } من أجل عرض الـLoader عندما تكون الحالة loading هي true.
- 2 اجابة
-
- 1
-
أضف عمودًا جديدًا في جدول الإعدادات ( في حال لديك جدول للإعدادات العامة للموقع) ليخزن خيار شكل الرابط. ALTER TABLE settings ADD COLUMN link_format VARCHAR(255) DEFAULT 'category'; ثم إضافة خيار في لوحة التحكم للسماح للمستخدم بتحديد شكل الرابط، كإضافة قائمة منسدلة dropdown في لوحة التحكم لاختيار شكل الرابط. وعند اختيار المستخدم شكل الرابط من لوحة التحكم، قم بتحديث قيمة إعدادات الرابط في قاعدة البيانات. وللتوضيح إليك مثال على كود PHP لتحديث الإعداد: // افترض أن لديك اتصال بقاعدة البيانات بالفعل if ($_SERVER['REQUEST_METHOD'] === 'POST') { $link_format = $_POST['link_format']; // احصل على القيمة من نموذج لوحة التحكم $stmt = $conn->prepare("UPDATE settings SET link_format = ?"); $stmt->bind_param("s", $link_format); $stmt->execute(); $stmt->close(); } وتستطيع إنشاء أو تعديل ملف .htaccess ديناميكيًا بناءً على الإعداد المحدد من لوحة التحكم. // احصل على إعداد الرابط الحالي من قاعدة البيانات $stmt = $conn->prepare("SELECT link_format FROM settings"); $stmt->execute(); $stmt->bind_result($link_format); $stmt->fetch(); $stmt->close(); // إعداد محتوى ملف .htaccess بناءً على اختيار المستخدم $htaccessContent = "RewriteEngine On\n"; if ($link_format === 'category') { $htaccessContent .= "RewriteRule ^category/c-([0-9]+)\.html$ /cat.php?c=$1 [L,QSA]\n"; } else { $htaccessContent .= "RewriteRule ^c-([0-9]+)\.html$ /cat.php?c=$1 [L,QSA]\n"; } // كتابة المحتوى إلى ملف .htaccess file_put_contents('.htaccess', $htaccessContent); و إليك مثال على نموذج HTML لإضافة الخيار في لوحة التحكم: <form method="POST" action="path_to_your_php_script.php"> <label for="link_format">اختر شكل الرابط:</label> <select id="link_format" name="link_format"> <option value="category">www.example.com/category/c-رقم التصنيف.html</option> <option value="short">www.example.com/c-رقم التصنيف.html</option> </select> <input type="submit" value="حفظ"> </form> وتحقق من أن الملف .htaccess لديه الأذونات الصحيحة ليتم تعديله بواسطة سكريبت PHP، ثم اختبار جميع الروابط بعد التعديل للتأكد من أن كل شيء يعمل بشكل صحيح. ومن الأفضل إضافة بعض التحقق والتدقيق للتأكد من أن القيم المدخلة صحيحة وتجنب أي أخطاء محتملة.
- 7 اجابة
-
- 1
-
ذلك تخوف طبيعي، ومع ما نشهده من تطورات، فكتابة الكود وحدها لا تكفي، عليك فهم ما تقوم به، فالبعض يقوم بالنسخ واللصق أو كتابة الأكواد بدون فهم لما يحدث في الخلفية أي ليس متعمق في اللغة والأساسيات، بالتالي ما الفرق بينه وبين نموذج تعلم آلي قادر على كتابة الكود؟ لكن حاليًا هو ليس قادر على إتمام مشاريع بمفرده، لكن مجرد أداة مساعدة للمبرمج، لكن أيضًا مع التطورات قد يصل إلى إتمام مشاريع ليس معقدة تمامًا لكن مشاريع كاملة، فهنا تأتي أهمية أن يكون هناك فرق بينك وبينه أن تكون متفهم للغة والأساسيات ومتعمق بها وبمستوى متقدم مع القدرة على تنفيذ مشاريع معقدة وذلك ستكتسبه تدريجيًا، قادر على حل المشكلات وإتخاذ قرارات لأنك متفهم ومتعمق للغة البرمجية والأساسيات وما يحدث في الخلفية. أي في الوقت الحالي أصبح الجميع بحاجة إلى بذل جهد إضافي للتعلم والوصول لمستوى متقدم وليس الإكتفاء بكتابة الكود فقط.
- 3 اجابة
-
- 1
-
مجال جيد ولكن ليس من السهل تعلمه فهو بحاجة إلى وقت ومجهود أطول مقارنًة بتخصصات أخرى، في حال لا يوجد لديكِ دراية بأساسيات البرمجة وعلوم الحاسوب، فستحاجين إلى دراسة ذلك من خلال دورة علوم الحاسوب بالأكاديمية. حيث ستتعلمين بها التالي: أساسيات الحاسوب وعلومه والتفكير المنطقي وما هي الخوارزميات وكيف تفيد في البرمجة تطبيقات عملية على أساسيات التفكير المنطقي باستخدام بيئة سكراتش Scratch التفاعلية أساسيات لغة البرمجة JavaScript وتطبيق المفاهيم التي تم شرحها باستخدامها، والتوسع في شرح التطبيقات العملية للغات البرمجة أساسيات أنظمة التشغيل المختلفة وكيفية تثبيت البرمجيات اللازمة للبرمجة عليها أساسيات سطر الأوامر في نظام لينكس، وشرح الأسس التي بني عليها النظام مع تطبيقها عمليًا أنظمة قواعد البيانات المختلفة، مع شرح تفصيلي للغة SQL للتعامل معها مبادئ أساسية في أنظمة قواعد البيانات NoSQL المفاهيم الأساسية التي تبنى فيها صفحات الويب مفاهيم أساسية في الشبكات والخوادم، وكيف يتم استقبال الطلبيات إلى الخادم والرد عليها مبادئ الحماية والأمان في الويب بعد ذلك ستحتاجين إلى دورة متخصصة في الـ blockchain حيث لا يوجد دورة مخصصة لذلك بالأكاديمية.
-
عبارة عن نوعان من مهام التعلم الآلي التي تستخدم لبناء نماذج تنبؤية، والفرق الرئيسي بينهما يكمن في طبيعة المتغير الهدف Target Variable الذي نحاول التنبؤ به. فالتصنيف Classification الهدف منه هو التنبؤ بفئة أو مجموعة معينة ينتمي إليها المتغير الهدف، وذلك لتصنيف البيانات إلى فئات محددة. تكون المخرجات عادة فئات غير مرتبة Categorical, مثل "نعم" أو "لا"، "سبام" أو "غير سبام"، أنواع الحيوانات، إلخ. وكأمثلة على الخوارزميات المستخدمة، فمنها الشبكات العصبية Neural Networks ودعم آلات المتجهات Support Vector Machines. بينما الانحدار Regression الهدف منه هو التنبؤ بقيمة مستمرة للمتغير الهدف، أي نحاول تقدير كمية معينة. والمخرجات عبارة عن قيم رقمية مستمرة، مثل الأسعار، الكميات، درجات الحرارة، إلخ.. مثل لتنبؤ بسعر المنزل بناءًا على المواصفات. وكأمثلة على الخوارزميات المستخدمة، فمنها الانحدار الخطي Linear Regression والانحدار المتعدد Multiple Regression.
- 4 اجابة
-
- 1
-
تلك ،المفاهيم مهمة، لكنها متقدمة قليلاً في البداية، من الأفضل البدء بالأساسيات ثم التقدم تدريجياً إلى المواضيع الأكثر تخصصًا. فبعض تعلم الأساسيات تعتبر المرحلة الثالثة هي ما تشمل تعلم تلك الخوارزميات بالترتيب التالي: دراسة التقسيم الهرمي وتطبيقه على مجموعات البيانات، لتجميعها في مجموعات بناءًا على التشابه بينها، للمساعدة في فهم العلاقات بين البيانات المعقدة. فهم تطبيقات خوارزميات الأبريوري في تحليل قواعد الترابط، للعثور على الأنماط والقواعد المترابطة في بيانات كبيرة، مثل اكتشاف العلاقات بين المنتجات في سلة المشتريات. دراسة LDA واستخدامه في تقليل الأبعاد وتحسين التصنيف، لتصنيف البيانات إلى فئات مختلفة، وهو مهم في تطبيقات مثل تعرف الوجه وتصنيف النصوص. التعرف على MDA وتطبيقه على البيانات متعددة الأبعاد، وهو مفيد في التعامل مع البيانات التي تحتوي على العديد من المتغيرات، مما يساعد في تصنيف البيانات وتمييز الفئات بشكل أكثر دقة. فهم كيفية بناء الشبكات العصبية العميقة باستخدام طبقات متعددة، وسيساعدك ذلك في تطوير نماذج قادرة على فهم الأنماط المعقدة في البيانات. تعلم تحليل السلاسل الزمنية وتطبيقها في التنبؤ، للتنبؤ بالاتجاهات المستقبلية بناءً على البيانات التاريخية، مما يفيد في مجالات مثل التنبؤ بالأسواق المالية والتنبؤ بالطقس.
- 2 اجابة
-
- 1