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

Mustafa Suleiman

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

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

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

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

    367

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

  1. مكتبة nunit.framework يتم الإشارة إليها من قبل مكتبة Unity.InputSystem.TestFramework، ولكن لا يمكن تضمينها أو لم يتم العثور عليها. حاولي تجربة إصدار 1.4 input system بدلاً من 1.5 لأن نسخة 2019 من محرر unity تدعم ذلك الإصدار أو أقل منه. إن استمرت المشكلة افتحي نافذة "Package Manager" في Unity (Window > Package Manager)، وابحثي عن حزمة Unity.InputSystem.TestFramework أو أي حزمة مشابهة تتضمن مكتبات الاختبار، في حال الحزمة غير ضرورية للتطبيق، قومي بإزالتها.
  2. عليك تنزيل Netcat من مواقع موثوقة أو استخدام بدائل مثل Ncat التي تأتي مع حزمة Nmap. أي عليك تثبيت ما أخبرك به حمزة في التعليق السابق، ثم أعد تشغيل منفذ الأوامر وتجربة الأمر مرة أخرى.
  3. بغض النظر عن النسبة، فالأمر صحيح فلكل لغة مدير حزم رسمي خاص بها لإدارة تلك الحزم، وبايثون لديها pip. لكن بالطبع تتوفر بدائل، فلديك conda وهو مدير حزم وبيئات يستخدم بشكل واسع مع توزيعات Anaconda وMiniconda. أيضًا يوجد Poetry مدير حزم حديث يهدف إلى تبسيط عملية إدارة الحزم والمشاريع. بالإضافة إلى Hatch. يمكنك تجربة Poetry وتفقد هل أنت بحاجة إلى ميزاته أم لا، أبقي الأمور بسيطة دائمًا طالما لا تحتاج إلى تعقيدها.
  4. لديك دورات PHP وإطار لارافل الخاص بها، ولديك جافاسكريبت وبيئة Node.js، ولديك Ruby وإطار Ruby on rails، ولديك بايثون وإطاري Flask و Django. لذا ليس الأمر بالدورات المتاحة، لكن بما اخترته أنت بما يتناسب مع سوق العمل الذي تستهدفه، هل هو موقع عمل حر مثل مستقل وخمسات؟ إذن عليك بتعلم PHP ولارافل. هل هي شركة في بلدك؟ إذن عليك بالبحث عن الوظائف في مواقع مثل Linked و Indeed بمستوى Junior في مجال الـ back-end وتفقد ما هي اللغات والمهارات المطلوبة ثم تعلم ذلك. وبما أنك تعلمت الواجهة الأمامية إذن تستطيع أن تصبح مطور Full-Stack، وذلك سيفيدك في البداية بلا شك. عليك بتحديد وجهتك ثم تعلم المطلوب وليس العكس.
  5. لا تحتاج إلى استخدام not لأنك تتحقق بالفعل مما إن كان الاسم موجودًا باستخدام in. فـ in نستخدمها للتحقق من عنصر معين وهو name لتفقد إن كان موجودًا في تسلسل معين (مثل قائمة employees)، وإن وجد العنصر، تعود العبارة بقيمة صحيحة True. أما not in فهي لتفقد مما إن كان عنصر معين غير موجود في تسلسل معين، وإن لم يوجد تعود العبارة بقيمة صحيحة True. لذا بما أنك تريد التحقق من الاسم هل موجود في قائمة الموظفين، فإن استخدام in هو الصحيح، ولو تريد التحقق مما إن كان الاسم غير موجود، فنستخدم not in. if name not in employees: print(f"The name is not: {name}") else: print("The name is: " + name)
  6. بخصوص تبديل الدورة، تستطيع ذلك من خلال التحدث لمركز المساعدة وسيتم مساعدتك، لكن تحدث إليهم من الحساب المُشترك بالدورة مع ذكر وقت الإشتراك وسبب تبديل الدورة.
  7. إما أنك لم تقم بحفظ الكود ثم تحديث الصفحة لتظهر التحديثات، أو هناك مشكلة في الكود مثل عدم توافق أسماء الكلاسات مع هيكل HTML لديك. إليك كود متوافق مع التنسيقات التي لديك مع بعض التحسينات: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Enhanced NavBar</title> <style> header .navbar nav { display: flex; justify-content: space-between; align-items: center; max-width: 1100px; margin: auto; padding: 10px; background-color: #f8f9fa; border-bottom: 1px solid #ddd; } header .navbar nav ul { display: flex; justify-content: center; align-items: center; list-style: none; padding: 0; margin: 0; } header .navbar nav ul li { margin: 0 15px; } header .navbar nav ul li a { text-decoration: none; color: #333; font-weight: bold; } header .navbar .logo { font-size: 1.5em; font-weight: bold; color: #333; } header .navbar .search-bar { display: flex; align-items: center; } header .navbar .search-bar input[type="text"] { padding: 5px; border: 1px solid #ccc; border-radius: 3px; } header .navbar .search-bar button { padding: 5px 10px; border: none; background-color: #007bff; color: white; border-radius: 3px; margin-left: 5px; } </style> </head> <body> <header> <div class="navbar"> <nav> <div class="logo">MyLogo</div> <ul> <li><a href="#">Home</a></li> <li><a href="#">About</a></li> <li><a href="#">Services</a></li> <li><a href="#">Contact</a></li> </ul> <div class="search-bar"> <input type="text" placeholder="Search..."> <button type="button">Search</button> </div> </nav> </div> </header> </body> </html>
  8. ستحتاج إلى مكتبات بايثون المتخصصة في معالجة الصور ومطابقتها، وواحدة من المكتبات الشائعة والمناسبة للغرض هي مكتبة OpenCV ومكتبة scikit-image. بعد تثبيت المكتبات: pip install opencv-python pip install scikit-image عليك كتابة سكريبت يقوم بتحميل الصور من مجموعة البيانات dataset، واستخدام تقنيات مثل استخراج الميزات (feature extraction) لمقارنة الصور. للتوضيح بمثال بسيط حول كيفية مقارنة الصور باستخدام OpenCV: import cv2 import os import numpy as np from sklearn.metrics.pairwise import cosine_similarity def load_images_from_folder(folder): images = [] for filename in os.listdir(folder): img = cv2.imread(os.path.join(folder, filename)) if img is not None: images.append((filename, img)) return images def extract_features(image): gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) sift = cv2.SIFT_create() keypoints, descriptors = sift.detectAndCompute(gray, None) return descriptors def find_similar_images(image_path, dataset_folder, top_n=5): input_image = cv2.imread(image_path) input_features = extract_features(input_image) dataset_images = load_images_from_folder(dataset_folder) similarities = [] for filename, dataset_image in dataset_images: dataset_features = extract_features(dataset_image) if dataset_features is not None and input_features is not None: similarity = cosine_similarity(input_features, dataset_features) similarities.append((filename, np.mean(similarity))) similarities.sort(key=lambda x: x[1], reverse=True) return similarities[:top_n] if __name__ == "__main__": dataset_folder = 'path/to/dataset' input_image_path = 'path/to/input/image.jpg' similar_images = find_similar_images(input_image_path, dataset_folder) print("Similar Images:") for filename, similarity in similar_images: print(f"Filename: {filename}, Similarity: {similarity}") بعد ذلك تأتي خطوة دمج بايثون مع PHP، مثلاً من خلال استخدام shell_exec لتنفيذ سكريبت بايثون وإرجاع النتائج أو من خلال API بايثون أو subprocess في PHP اختر ما تريد، وللتوضيح ساستخدم shell_exec كالتالي: <?php $input_image_path = 'path/to/input/image.jpg'; $output = shell_exec("python3 path/to/your/script.py $input_image_path"); echo "<pre>$output</pre>"; ?> بعد أن تحصل على قائمة الصور المشابهة من سكريبت بايثون، تستطيع عرض الصور باستخدام PHP، كالتالي: <?php $similar_images = json_decode($output, true); echo "<h1>Similar Images:</h1>"; foreach ($similar_images as $image) { echo "<div>"; echo "<img src='path/to/dataset/{$image['filename']}' alt='{$image['filename']}'>"; echo "<p>Similarity: {$image['similarity']}</p>"; echo "</div>"; } ?>
  9. للتحقق من المستخدم، هناك عدة استراتيجيات، منها JWT عبارة عن معيار مفتوح يستخدم لنقل البيانات بين الأطراف ككائن JSON مضغوط وآمن، بحيث تستخدم JWT لتأمين API ةيحصل المستخدم على رمز JWT بعد تسجيل الدخول، ويجب عليه إرسال هذا الرمز مع كل طلب لاحق. بعد ذلك يوجد الكوكيز هي ملفات صغيرة تُخزن على جهاز المستخدم وتُستخدم لتخزين معلومات الجلسة، وعند تسجيل الدخول، يمكن تخزين معرف الجلسة في الكوكيز، ويتم إرسال الكوكيز مع كل طلب إلى الخادم للتحقق من الجلسة. ويتوفر UUID هو معرف فريد يمكن استخدامه لتعريف المستخدمين بشكل آمن وفريد، وتُخزن UUID في قاعدة البيانات ويُستخدم لتعريف المستخدمين في التطبيقات. أما CSRF هو نوع من الهجمات التي تُجبر المستخدم على تنفيذ إجراءات غير مرغوب فيها على موقع ويب آخر يتمتع فيه المستخدم بالتصديق، والإعتماد على CSRF tokens هو آلية شائعة لمنع تلك الهجمات. وDevise هو حل كامل لمصادقة المستخدمين في تطبيقات Rails، بحيث يوفر Devise العديد من الميزات الجاهزة مثل التسجيل، تسجيل الدخول، استعادة كلمة المرور، تأكيد الحساب، وغيرها، تستطيع تثبيته كالتالي: إضافته إلى ملف gem: gem 'devise' ثم تثبيت Devise: rails generate devise:install بعد التثبيت، ستحتاج إلى اتباع التعليمات التي تظهر على الشاشة لتكوين Devise وإعداد البريد الإلكتروني لإرسال روابط تأكيد الحساب واستعادة كلمة المرور. وفي حال تقوم بإنشاء تطبيق جديد، فتستطيع إنشاء نموذج المستخدم باستخدام Devise: rails generate devise User ثم ترحيل قاعدة البيانات: rails db:migrate بعد ذلك إضافة مصادقة إلى عناصر التحكم من خلال before_action لحماية مساراتك: class ApplicationController < ActionController::Base before_action :authenticate_user! end و Rails يوفر حماية مدمجة ضد هجمات CSRF، لأنه يتم تضمين CSRF tokens تلقائيًا في النماذج والطلبات AJAX. ولو تحتاج استخدام JWT مع Devise، فهناك gem مثل devise-jwt ستوفر لك JWT مع Devise.
  10. في بدايات تعلمك، لا أنصحك بنسخ الكود لتوفير الوقت والمجهود، بل ما أنتِ بحاجة إليه هو العكس، فكتابة الكود بيديكِ هو تمرين مطلوب للتعود على الطريقة الصحيحة ومعرفة الفرق بين كتابة بعض الأمور والتي لن تلاحظيها في حال قمتي بنسخ الكود. الأمر أشبه بتعلم الكتابة لكن نتعلم البرمجة في تلك الحالة.
  11. ربما استخدمت let أو const في تعريف اسم المتغير، فلهما نطاق كتلة block scope أي أنهما يكونان مرئيين فقط داخل الكتلة التي تم تعريفهما فيها. بينما تعريف متغير باستخدام var خارج أي كتلة كود { } يتم اعتباره متغيرًا عالميًا global، بمعنى يمكن الوصول إليه من أي مكان في الكود (سواء داخل دوال أو خارجها) ويصبح جزءًا من كائن window في المتصفحات window.name والمشكلة أنه يوجد خاصية باسم name في الكائن العالمي window ولم يعد يتم دعمها في المتصفحات حاليًا. على العكس بتعريف متغير باستخدام const أو let في النطاق العالمي، فإنه لا يصبح جزءًا من كائن window، ويتم تعريفه في نطاق الكتلة block scope الخاص بالوحدة النمطية module scope أو النص البرمجي script scope.
  12. تفهمت ما تقصد، المشكلة في استخدامك لاسم المتغير name حيث يتم الخلط بينه وبين خاصية name في الكائن العالمي window ما يسبب طباعة التكرار على الأسماء في المصفوفة بالشكل التالي : Y a r o b , K h a l e d , O m e r لذا لو قمت بتغيير اسم المتغير إلى names مثلاً سيتم حل المشكلة ويتم طباعة yes أو قم باستخدام const بدلاً من var <body> <div style="text-align: center;"> <input class="input-btn" type="text"> <button class="submit-btn">submit</button> <h3 class="result-one"></h3> <h3 class="result-two"></h3> </div> </body> <script> var names = ["Yarob", "Khaled", "Omer"] document.getElementsByClassName("result-one")[0].innerHTML = names document.getElementsByClassName("submit-btn")[0].addEventListener("click", function(){ var school = document.getElementsByClassName("input-btn")[0].value for(var student of names){ console.log(student) if(student === school){ document.getElementsByClassName("result-two")[0].innerHTML = `${school} yas` break } document.getElementsByClassName("result-two")[0].innerHTML = `${school} no` } }) </script>
  13. الكود الذي ارفقته لك يعمل بشكل سليم، لم ألحظ في الصورة الأولى لديك أنك كتبت كود جافاسكريبت خارج وسم body فعليك كتابة جافاسكريبت في عنصر script ونضعه في body أو head
  14. الكود يعمل بدون مشكلة ما الخطأ الذي يظهر لك ؟ غالبًا أنت نسيت حفظ الكود عليك الضغط على CTRL + S ثم إعادة تحديث الصفحة في المتصفح. <body> <div style="text-align: center;"> <input class="input-btn" type="text"> <button class="submit-btn">submit</button> <h3 class="result-one"></h3> <h3 class="result-two"></h3> </div> <script> var name = ["Yarob", "Khaled", "Omer"] document.getElementsByClassName("result-one")[0].innerHTML = name document.getElementsByClassName("submit-btn")[0].addEventListener("click", function(){ var school = document.getElementsByClassName("input-btn")[0].value for(var student of name){ if(student == school){ document.getElementsByClassName("result-two")[0].innerHTML = `${school} yas` break } document.getElementsByClassName("result-two")[0].innerHTML = `${school} no` } }) </script> </body>
  15. يجب وجود collection في قاعدة البيانات لحفظ رقم الهاتف وكود التأكيد وحالة التأكيد أي الحقول كالتالي: phone لتخزين رقم هاتف المستخدم ويجب أن يكون الحقل فريدًا لكل مستخدم. verificationCode لتخزين رمز التحقق الذي يتم إرساله إلى المستخدم عبر SMS. verified لتحديد هل رقم الهاتف قد تم التحقق منه أم لا، وتستطيع جعل الحقل عبارة عن قيمة منطقية (true أو false). ثم ستحتاج إلى منطق خاص لتنفيذ ذلك، من خلال إنشاء api وليكن /send-code لإرسال كود التحقق لرقم الهاتف ولديك خدمات مثل Twilio و auth0 و Firebase لفعل ذلك. بالطبع ستقوم بحفظ الـ OTP أو الكود في قاعدة البيانات لكي تتمكن من التحقق منه، وهناك طرق مختلفة لتوليده أحدها توليده باستخدام دالة random كالتالي: const verificationCode = Math.floor(100000 + Math.random() * 900000).toString(); للتوضيح إليك مثال باستخدام Twilio: app.post('/send-code', async (req, res) => { const { phone } = req.body; const verificationCode = Math.floor(100000 + Math.random() * 900000).toString(); let user = await User.findOne({ phone }); if (!user) { user = new User({ phone, verificationCode, verified: false }); } else { user.verificationCode = verificationCode; } await user.save(); client.messages.create({ body: `Your verification code is ${verificationCode}`, to: phone, from: 'رقمك على Twilio ', }).then((message) => { console.log(message.sid); res.send('Verification code sent.'); }).catch((error) => { console.error(error); res.status(500).send('Failed to send verification code.'); }); }); بعد إرسال الكود لرقم الهاتف سيقوم هو بإدخاله عليك إذن إنشاء api آخر باسم /verify-code لاستقبال الطلب ومعالجته والتأكد من صحة الرقم. app.post('/verify-code', async (req, res) => { const { phone, code } = req.body; const user = await User.findOne({ phone, verificationCode: code }); if (!user) { return res.status(400).send('Invalid verification code.'); } user.verified = true; await user.save(); res.send('Phone number verified successfully.'); });
  16. عليك تثبيت puppeteer بشكل عالمي وليس محلي كالتالي: npm install puppeteer -g
  17. المشكلة في ميثود __str__ حيث لم تقم باستخدام دالة join لربط النص بشكل صحيح ولا تحدث القيمة board_str بشكل صحيح. أولاً عليك تحويل الصف إلى سلسلة نصية مع وضع مسافة بين الأرقام، واستبدال الأصفار بالنجوم، ثم إضافة السلسلة النصية للصف إلى السلسلة النهائية مع إضافة سطر جديد n\ كالتالي: def __str__(self): board_str = '' for row in self.board: row_str = [str(i) if i else '*' for i in row] board_str += ' '.join(row_str) + '\n' return board_str
  18. عليك غلق قاعدة البيانات الحالية من أجل تطبيق التغييرات ثم إعادة فتحها.
  19. غلق المتصفح يعني وجود مشكلة بالذاكرة العشوائية، هل تتملىء الذاكرة العشوائية لديك؟ وما علاقة تثبيت ويندوز جديد بالأمر؟ هل قمت بتجربة تشغيل إضافة live server بمفردها وهل تعمل بشكل سليم؟
  20. ما الخطأ الذي يظهر لك الآن عند فتح الملف ؟
  21. اضغط على ok في الرسالة التي تظهر لك ثم اضغط على الرابط الذي يظهر في التحذير: ثم من info اضغط على trust center: ثم من macro settings قم بتفعيل enable all macros
  22. قم بحذف أية متغيرات بيئة قمت بإضافتها، ثم إعادة تثبيت GIT من خلال تحميله من الرابط التالي: https://github.com/git-for-windows/git/releases/download/v2.45.1.windows.1/Git-2.45.1-64-bit.exe بعد التثبيت أغلق منفذ الأوامر (التيرمنال) ثم حاول التجربة مرة أخرى.
  23. هل عند كتابة الأمر التالي يظهر لك رقم الإصدار لـ GIT ؟ git -v
  24. تلك قائمة من القواميس (dictionaries)، لا تستطيع الوصول إلى عنصر بشكله مباشرة باستخدام مفتاح كما فعلت، بل تحتاج إلى تحديد العنصر في القائمة أولاً ثم الوصول إلى القيمة باستخدام المفتاح المناسب. arr = [ {'4': 'bog'}, {'2': 'took'}, {'3': 'his'}, {'-2': 'Vatsan'}, {'5': 'for'}, {'6': 'a'}, {'12': 'spin'} ] for dictionary in arr: if '2' in dictionary: print(dictionary['2']) break لاحظ البحث عن القاموس الذي يحتوي على المفتاح '2' ثم طبع القيمة المرتبطة به، وفي حال أنك متأكد أن المفتاح موجود في القاموس الثاني، فنصل إليه مباشرة هكذا: print(arr[1]['2'])
  25. أولاً ستحتاج إلى شراء رخصة للمحتوى غير ذلك يعتبر أمر غير قانوني. وستحتاج إلى مناقشة التكلفة مع مبرمج لديه معرض أعمال جيد وتجنب من لديه معرض أعمال ضعيف، عامًة لو احتسبنا الأمر على سعر ساعة 10 دولار، والتطبيق يحتاج تطويره كتقدير مبدئي لمدة 3-6 أشهر، أي 600 ساعة في 10 يصبح السعر 6000 دولار. لكن عامًة تستطيع الحصول على سعر جيد في حال قمت بعرض مشروعك على موقع العمل الحر مثل مستقل، وستستقبل العروض ويمكنك الإختيار من بينها بناءًا على السعر وجودة معرض الأعمال، مثل تكلفة 1500 إلى 3000 دولار.
×
×
  • أضف...