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

Mustafa Suleiman

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

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

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

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

    336

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

  1. ما يحدث في كل من الأسطر 12 و 15: في السطر 12، يتم تحميل ملف البيانات باستخدام الدالة pd.read_csv() من مكتبة pandas. تم تحديد المسار الذي يوجد به ملف البيانات في هذا السطر: "C:/Users/karee/OneDrive/Desktop/liver.csv". يتم قراءة الملف باستخدام المحدد delimiter الذي هو الفاصل المستخدم بين الحقول في الملف، وهو ؛ في هذه الحالة. يتم تحديد ترميز الملف باستخدام encoding ، وهو "ISO-8859-1" في هذه الحالة. تم تحديد عدد الصفوف التي يجب قراءتها في ملف البيانات باستخدام متغير nRowsRead. إذا تم تعيين nRowsRead إلى None، فسيتم قراءة جميع الصفوف. في السطر 15، يتم عرض المخططات الخاصة بالبيانات باستخدام الدالة plot() من dataprep.eda library. ويتم تمرير dataframe المحمل في السطر 12 إلى الدالة. ثم عرض المخططات التي تظهر توزيع البيانات والارتباطات بين الأعمدة في البيانات. يتم استدعاء هذه الدالة مرتين في السطر 15، مرة لعرض المخططات الخاصة بعام 2021 ومرة أخرى لعرض المخططات الخاصة بعام 1988. وطباعة هذه المخططات في الإخراج الناتج من البرنامج باستخدام دالة print().
  2. يمكن عرض بيانات جدول المستخدم في صفحة أخرى في Laravel باستخدام العديد من الأساليب، ولكن أحد الأساليب الشائعة هي استخدام العرض (View) والتحكم (Controller). في المثال التالي، سنفترض أن اسم الجدول المستخدم هو "users" وأننا نريد عرض بيانات المستخدمين في صفحة أخرى باستخدام العرض والتحكم. 1- ابدأ بإنشاء التحكم: يمكنك استخدام الأمر "php artisan make:controller" لإنشاء تحكم جديد. يمكن تسمية التحكم "UserController" ووضعه في المسار "app/Http/Controllers". php artisan make:controller UserController 2- قم بإضافة الدالة "index" إلى التحكم: في الدالة "index"، قم بجلب بيانات المستخدمين من جدول "users" باستخدام نموذج "User" وتمريرها إلى العرض "users". <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\User; class UserController extends Controller { public function index() { $users = User::all(); return view('users', compact('users')); } } 3- إنشاء العرض: قم بإنشاء عرض جديد باسم "users" ووضعه في المسار "resources/views". يمكن استخدام لغة العرض Blade للوصول إلى البيانات التي تم تمريرها من التحكم. <!-- resources/views/users.blade.php --> <!DOCTYPE html> <html> <head> <title>Users</title> </head> <body> <h1>Users</h1> <table> <thead> <tr> <th>Name</th> <th>Email</th> <th>Created At</th> <th>Updated At</th> </tr> </thead> <tbody> @foreach ($users as $user) <tr> <td>{{ $user->name }}</td> <td>{{ $user->email }}</td> <td>{{ $user->created_at }}</td> <td>{{ $user->updated_at }}</td> </tr> @endforeach </tbody> </table> </body> </html> 4- تعريف المسار: قم بتعريف المسار الذي سيتم استخدامه لعرض بيانات المستخدمين في ملف "web.php" في المسار "routes". <?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\UserController; Route::get('/users', [UserController::class, 'index']); 5- اختبار الصفحة: الآن يمكنك اختبار صفحة عرض المستخدمين بالانتقال إلى المسار "/users" في متصفح الويب. يجب عرض جميع بيانات المستخدمين في الجدول.
  3. أرجو منك توضيح السؤال، ما المقصود بمدة محددة، تقصد المدة المفروض الإنتهاء من الكورس فيها؟ بخصوص الدورات نفسها فلا يوجد فترة زمنية محددة للإنتهاء منها، بل الأمر يعود إليك أنت والأفضل وضع جدول زمني يترواح مداه ما بين 6 أشهر وحتى سنة، فما لا يمكن قياسه لا يمكن إدارته والتحكم فيه وتحسينه، لذلك قم بتحديد وقت وإلتزم به. ومنعًا للتكرار، أنصحك بقراءة الإجابات على الأسئلة التالية، فقد تم الإجابة فيها عن كثير من الأسئلة التي قد تدور في بالك: ولنفترض أنك خلال فترة 6 شهور مثلاً قمت بالإنتهاء من الدورة، يمكنك بعدها التقدم إلى الإختبار والحصول على الشهادة، والشروط هي: إتمام أربعة مسارات تعليمية على الأقل التطبيق العملي مع المدرب، والاحتفاظ بالمشاريع العملية الناتجة لإرسالها للمراجعة رفع المشاريع على حسابك على GitHub أولًا بأول لمشاركتها معنا وللمزيد يمكنك قراءة التفاصيل هنا: الامتحان والحصول على الشهادة وبخصوص تفاصيل الإختبار، ستجد ما تحتاجه في النقاش التالي:
  4. من الخطأ في الصورة يظهر أن Codeception لا يستطيع العثور على ملف Bootstrap المطلوب لتشغيل الاختبارات الخاصة بك. يرجى التحقق من وجود الملف _bootstrap.php في المسار C:\Users\shahi\tests\Unit_bootstrap.php ، وتأكدي من أنه لم يتم تغيير اسمه أو نقله إلى مكان آخر. إذا كنت قد قمت بإعادة تثبيت Codeception و Bootstrap من جديد، فتأكدي من توفر جميع الإعدادات والتهيئات اللازمة لتشغيل اختباراتك بشكل صحيح. يمكنك أيضًا المحاولة بإعادة تثبيت مكونات Composer من جديد باستخدام الأمر "composer install"، ثم تشغيل اختباراتك مرة أخرى. ويمكن اتباع الخطوات التالية لإعادة تثبيت Codeception وإعداده بشكل صحيح: 1- تأكدي من إلغاء تثبيت Codeception القديم باستخدام الأمر التالي في سطر الأوامر: composer global remove "codeception/codeception" 2- تثبيت Codeception مرة أخرى باستخدام Composer باستخدام الأمر التالي: composer global require "codeception/codeception" --dev 3- تأكد من أن المسار العام لـ Composer قد تم إضافته إلى PATH. لتحقق من ذلك، يمكنك إدخال الأمر التالي في سطر الأوامر: composer global config bin-dir --absolute سيظهر هذا المسار في السطر الأول من النتيجة. 4- إنشاء مشروع Codeception جديد باستخدام الأمر التالي: codecept bootstrap 5- إنشاء ملفات اختبار جديدة باستخدام الأمر التالي: codecept generate:test unit Example 6- تحرير الملفات التي تم إنشاؤها لإضافة اختبارات الوحدات الخاصة بك. 7- تشغيل الاختبارات باستخدام الأمر التالي: codecept run unit وسوف يتم تنفيذ جميع اختبارات الوحدات الخاصة بك في هذا المشروع. يرجى التأكد من أن جميع الإعدادات والتهيئات الخاصة بك قد تم تحديدها بشكل صحيح في ملفات الاختبار الخاصة بك.
  5. إذا فهمت سؤالك بشكل صحيح، فأنت تحتاج إلى استخدام خدمات Google Play لتوفير الوصول إلى التطبيقات الأخرى المرتبطة بتطبيقك. يمكن استخدام API Client Library for Java التي توفرها Google Play Services لتطوير التطبيقات المرتبطة بحساب Google الخاص بالمستخدم. يتم تثبيت تطبيقات Google Play Services بشكل افتراضي على معظم الأجهزة التي تعمل بنظام Android. للبدء في استخدام خدمات Google Play، يمكنك الاطلاع على المصادر التالية: الدليل الرسمي لخدمات Google Play لتطوير تطبيقات Android مستندات خدمات Google Play للمطورين ويمكنك استخدام Google Sign-In للسماح للمستخدمين بتسجيل الدخول باستخدام حساب Google الخاص بهم والحصول على إذن للوصول إلى بياناتهم. ويمكن استخدام Google Drive API للوصول إلى ملفات المستخدمين والتحكم فيها. ويمكن استخدام Gmail API للوصول إلى رسائل البريد الإلكتروني الخاصة بالمستخدمين. مثال: ، سنستخدم Google Drive API للوصول إلى ملفات المستخدمين. نحتاج إلى توفير مفتاح API الخاص بتطبيقنا وتضمين Google Play Services في ملف build.gradle. الخطوة 1: تحميل مكتبة Google Play Services يتم تضمين Google Play Services في ملف build.gradle كالتالي: dependencies { compile 'com.google.android.gms:play-services-drive:11.8.0' } الخطوة 2: تسجيل الدخول باستخدام حساب Google نحتاج إلى استخدام Google Sign-In للسماح للمستخدمين بتسجيل الدخول باستخدام حساب Google الخاص بهم. يمكن استخدام التالي لتسجيل الدخول: GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .requestScopes(Drive.SCOPE_FILE) .build(); GoogleSignInClient mGoogleSignInClient = GoogleSignIn.getClient(this, gso); mGoogleSignInClient.signOut(); startActivityForResult(mGoogleSignInClient.getSignInIntent(), RC_SIGN_IN); الخطوة 3: الحصول على إذن للوصول إلى ملفات المستخدم بعد تسجيل الدخول، يتم الحصول على إذن للوصول إلى ملفات المستخدم باستخدام Google Drive API: private void requestDriveScope() { GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this); if (account != null) { if (!GoogleSignIn.hasPermissions(account, Drive.SCOPE_FILE)) { GoogleSignIn.requestPermissions( this, RC_DRIVE_PERMS, account, Drive.SCOPE_FILE ); } else { // متابعة العمليات المرتبطة بالوصول إلى ملفات المستخدم accessDriveFiles(); } } } الخطوة 4: الوصول إلى ملفات المستخدم بعد الحصول على الإذن، يمكن الوصول إلى ملفات المستخدم باستخدام Google Drive API: private void accessDriveFiles() { DriveClient client = Drive.getDriveClient(this, GoogleSignIn.getLastSignedInAccount(this)); DriveResourceClient driveResourceClient = Drive.getDriveResourceClient(this, GoogleSignIn.getLastSignedInAccount(this)); Task<MetadataBuffer> queryTask = driveResourceClient.getRootFolder() .continueWithTask(task -> driveResourceClient.query ( new Query.Builder() .addFilter(Filters.eq(SearchableField.TITLE, "example_file.txt")) .build() )) .addOnSuccessListener(metadataBuffer -> { if (metadataBuffer.getCount() > 0) { Metadata metadata = metadataBuffer.get(0); DriveFile file = metadata.getDriveId().asDriveFile(); downloadFile(file, driveResourceClient); } else { Log.e(TAG, "File not found."); } }) .addOnFailureListener(e -> Log.e(TAG, "Error querying files.", e)); } private void downloadFile(DriveFile file, DriveResourceClient driveResourceClient) { driveResourceClient .openFile(file, DriveFile.MODE_READ_ONLY) .continueWithTask(task -> { DriveContents contents = task.getResult(); InputStream inputStream = contents.getInputStream(); // Use input stream to read the contents of the file contents.discard(driveResourceClient); return null; }) .addOnSuccessListener(aVoid -> Log.i(TAG, "File downloaded successfully.")) .addOnFailureListener(e -> Log.e(TAG, "Error downloading file.", e)); } الكود السابق يستخدم Google Drive API للوصول إلى ملفات المستخدم وتنزيلها. تبدأ الدالة بإنشاء عميل DriveClient وعميل DriveResourceClient باستخدام حساب Google الحالي. ثم تستخدم DriveResourceClient للبحث عن ملف محدد باستخدام اسم الملف. إذا تم العثور على الملف، يتم تنزيله باستخدام driveResourceClient.openFile. وأخيرا، يتم إعادة الدالة الرسومية discard لتنظيف المحتوى الذي تم تنزيله من الذاكرة. ربط التطبيق بتطبيق آخر أما إذا كنت تريد ربط تطبيقك بتطبيق آخر على نفس الجهاز الذي يعمل عليه تطبيقك، يمكنك استخدام Intent لإرسال الرسائل و IntentFilter لتلقيها. باستخدام هذه الطريقة ستتمكن من توجيه المستخدمين إلى تطبيق آخر يتطلبه تطبيقك للعمل، على سبيل المثال، يمكنك إنشاء زر في تطبيقك يقوم بتوجيه المستخدم إلى متجر التطبيقات الخاص بنظام التشغيل (مثل Google Play Store أو Apple App Store) لتثبيت التطبيق الآخر. في هذه الحالة، يجب عليك التحقق من وجود التطبيق الآخر على جهاز المستخدم قبل استخدامه. يمكنك استخدام مكتبات مثل PackageManager في Android أو UIApplication في iOS للتحقق من وجود التطبيق الآخر وتوجيه المستخدم إلى تحميله إذا لم يكن مثبتًا بعد.
  6. كما أشار لك Kais، الـ polling هي تقنية تستخدم عادة لتحديث الصفحة بشكل دوري من دون الحاجة لإعادة تحميلها بشكل كامل. بدلاً من ذلك، يتم استخدام الـ polling لإجراء طلبات متكررة للخادم للتحقق من وجود تحديثات جديدة. من خلال إرسال طلبات HTTP الخفية إلى الخادم باستخدام JavaScript. تتحقق الصفحة بانتظام للحصول على تحديثات جديدة، وإذا كان هناك تحديث جديد، يتم تحميله وعرضه على الصفحة دون الحاجة إلى تحديث الصفحة بالكامل. في Laravel، يمكنك استخدام تقنية الـ polling باستخدام Laravel Livewire وتحديد فترة زمنية محددة لتحديث مكون معين بشكل دوري. على سبيل المثال، إذا أردت تحديث عداد لعدد الدعوات الجديدة كل 5 ثوانٍ، يمكنك كتابة الكود التالي: في الـ view: <div wire:poll.5s> {{ $newInvitationsCount }} </div> في الكود السابق، تم استخدام دالة "wire:poll" في Laravel، والتي تعمل على تحديث جزء محدد من الصفحة بشكل دوري وفقًا للوقت المحدد. وبمجرد تحديد الوقت الذي يجب تحديثه، سيتم تحديث جزء من الصفحة بشكل مستمر بينما يواصل المستخدم التفاعل مع الصفحة. <div wire:poll.750ms> <p>يمكنك وضع أي محتوى تريده هنا، مثل عدد الإشعارات الجديدة، أيقونة الإشعارات، أو أي شيء آخر.</p> <p>مثال: تم تحديث الصفحة في {{ now() }}</p> </div> يتم تحديث الصفحة كل 750 ميلي ثانية باستخدام "wire:poll.750ms"، والتي تستخدم "Livewire"، وهي أداة في Laravel تتيح تحديث الصفحة بشكل فوري بدون إعادة تحميل الصفحة بالكامل. في الـ component: class NotificationsComponent extends Component { public $newInvitationsCount = 0; public function render() { $this->newInvitationsCount = // طلب لجلب عدد الدعوات الجديدة من الخادم return view('livewire.notifications-component'); } } هذا الكود سيقوم بتحديث قيمة $newInvitationsCount كل 5 ثوانٍ دون الحاجة إلى إعادة تحميل الصفحة بشكل كامل. يمكنك تعديل هذا الكود بحسب احتياجاتك ومتطلبات تطبيقك، على سبيل المثال، يمكنك تحديد فترة زمنية مختلفة لتحديث المكون، أو استخدام قيمة مختلفة للـ polling مثل 1000ms بدلاً من 5s.
  7. المدونة هي نوع من أنواع المواقع الإلكترونية التي تهدف إلى نشر المحتوى بشكل متكرر ومنتظم. وبشكل عام، يمكن اعتبار المدونة جزءًا من الموقع، حيث يمكن أن يحتوي الموقع على عدة صفحات بمحتوى مختلف وتحتوي إحدى تلك الصفحات على المدونة. يمكن إنشاء المدونة باستخدام خدمات مجانية مثل Blogger، والتي توفر مجموعة من الأدوات والخصائص لإدارة المدونة. و تعتبر الخدمات المجانية مثل Blogger أسهل وأسرع في الإعداد، ولكنها قد تقيّد بالتخصيص والتعديلات التي يمكن القيام بها على المدونة. بالنسبة لإخفاء اسم Blogger من رابط المدونة، يمكن القيام بذلك عن طريق شراء نطاق خاص للمدونة وربطه بالمدونة. سيكون العنوان الجديد للمدونة هو عنوان النطاق الجديد الذي تم شراؤه، ولن يظهر اسم Blogger في العنوان. ومن المهم الإشارة إلى أن شراء نطاق خاص يتطلب دفع تكلفة سنوية معينة. والأفضل هو إنشاء موقع باستخدام وورد بريس وشراء استضافة ودومين بتكلفة بسيطة إذا كان لديك بعض الخبرة، والبدء في كتابة المحتوى، ويتطلب الأمر فترة 6 شهور على الأقل أو سنة بمحتوى ذو جودة عالية لتظهر بعض النتائج لك. من ناحية السهولة في الاستخدام والإعداد، فإن Blogger يكون أكثر سهولة، حيث يمكن لأي شخص إنشاء مدونة في دقائق قليلة بدون أي معرفة فنية مسبقة. أما عن ووردبريس، فهو يتمتع بمرونة أكبر في التخصيص والتعديلات، حيث يوفر العديد من الإضافات والسمات والتصاميم الجاهزة التي تساعد على تحسين أداء الموقع. كما أن ووردبريس يتيح مزيدًا من السيطرة على محتوى الموقع وقدرته على الاستمرار في التوسع والتطور مع تطور احتياجات المستخدم. إذا كانت المدونة تحتاج إلى نشر المحتوى بشكل منتظم وبدون الحاجة إلى الكثير من التخصيص، فإن Blogger يكون الخيار الأمثل. وإذا كنت تبحث عن مزيد من المرونة والتخصيص وقدرة الموقع على التوسع في المستقبل، فإن ووردبريس يمكن أن يكون الخيار الأفضل.
  8. لتغيير الحالة الابتدائية للون، يمكنك إعطاء قيمة ابتدائية مختلفة للمتغير color عند تعريفه باستخدام الدالة useState. يمكنك أيضًا استخدام دالة useEffect لتحديث الحالة الابتدائية للون عندما يتم تغييره في القائمة. في الكود الخاص بك، يتم تحديد اللون الابتدائي للصفحة بواسطة الخاصية --main-color في CSS. لذلك، بدلاً من تغيير قيمة المتغير color فقط، يجب عليك أيضًا تغيير قيمة الخاصية --main-color في CSS. في الحالة الحالية، يتم تحديد قيمة الخاصية --main-color باستخدام المتغير color في الدالة handelColor. لتحديث قيمة الخاصية --main-color، يمكنك استخدام الكود التالي داخل الدالة handelColor: document.documentElement.style.setProperty('--main-color', colorr); يتم استخدام دالة setProperty لتحديث قيمة الخاصية --main-color إلى القيمة المحددة بواسطة المتغير colorr. بالنسبة لأفضل طريقة لتغيير الحالة الابتدائية للون، يمكنك تعريف قيمة ابتدائية للمتغير color عند تعريفه باستخدام useState. على سبيل المثال، يمكنك تحديد اللون الابتدائي للصفحة على النحو التالي: const [color, setDataColor] = useState('darkorange'); بهذه الطريقة، سيتم تعيين اللون الابتدائي إلى 'darkorange' عند تحميل الصفحة. يمكنك استخدام نفس الدالة handelColor لتحديث اللون عندما يتم تغييره في القائمة.
  9. لكون سؤال يتعلق بالإختبارات، سأرشدك لطريقة الحل فقط. يمكن حل هذا السؤال باستخدام الخطوات التالية: 1- تعريف المتغيرات: يجب تعريف المتغيرات التي تحتاج إليها الدالة والتي يتم استخدامها في المعادلة المذكورة في السؤال. في هذه الحالة، يجب تعريف AV, T, w, po. 2- إنشاء الدالة: يمكن إنشاء دالة في MATLAB تستخدم السلسلة الفورية لإنشاء الموجات المربعة. يجب تمرير الدالة بالعدد المناسب من الهارمونيات المراد رسمها. function y = square_wave(n) T = 2; w = 2*pi/T; po = pi/2; AV = 1; t = linspace(0,T,1000); y = 0; for i = 1:n y = y + AV/(2*i-1)*sin((2*i-1)*w*t + po); end end 3- إنشاء الرسوم البيانية: يمكن استخدام الأمر subplot في MATLAB لإنشاء الرسوم البيانية المطلوبة في نافذة واحدة. يجب استخدام الدالة المنشأة سابقاً لإنشاء الموجات المربعة وإضافتها إلى كل subplot بحيث تكون الرسوم البيانية المتعددة في نفس المخطط. وهنا توضيح لكل من الخطوات بشكل أكثر تفصيلاً: 1- تعريف المتغيرات: أول خطوة في الحل هي تعريف المتغيرات التي ستحتاج إليها الدالة التي ستنشئها. في هذه الحالة، يجب تعريف المتغيرات التالية: AV: القيمة القمية للجهد المربع الموجب. T: مدة الدورة للموجة المربعة. w: التردد الزاوي للموجة المربعة. po: المرحلة الزاوية للموجة المربعة. 2- إنشاء الدالة: بعد تعريف المتغيرات، يمكن إنشاء الدالة التي ستنشئ الموجات المربعة باستخدام السلسلة الفورية. يتم استخدام المعادلة المذكورة في السؤال لإنشاء الموجات المربعة، ويتم إضافة جميع الهارمونيات المطلوبة باستخدام حلقة for. في هذه الحالة، يمكن تسمية الدالة باسم "square_wave" وإعطائها المدخلات. بعد تحديد المتغيرات، يمكن كتابة الدالة التي ستقوم بإنشاء الموجات المربعة باستخدام السلسلة الفورية في MATLAB. يتم استخدام المعادلة المذكورة في السؤال لإنشاء الموجات المربعة، ويتم إضافة جميع الهارمونيات المطلوبة باستخدام حلقة for. في هذه الحالة، يمكن تسمية الدالة باسم "square_wave" وإعطائها المدخلات اللازمة لحساب الموجة المطلوبة. يمكن استخدام دالة subplot لإنشاء نافذة رسم واحدة مقسمة إلى 6 رسوم بيانية فرعية، حيث يمكن تخصيص كل رسم بياني فرعي لعرض الموجة المربعة المحسوبة لعدد مختلف من الهارمونيات. يمكن استخدام دالة plot لرسم الأمواج المربعة في كل رسم بياني فرعي.
  10. يمكن اختيار أي من المسارات التالية لتعلم البرمجة وتنفيذ تطبيقات سطح المكتب المتصلة بالإنترنت والتطبيقات التي تعمل على منصات المتصفح: تطوير تطبيقات الويب: يمكن تعلم لغات الويب الأساسية مثل HTML وCSS وJavaScript لبناء صفحات الويب الثابتة والمتحركة والتفاعلية واستخدام إطارات العمل مثل React أو Angular أو Vue.js لتطوير تطبيقات الويب المتقدمة. تطوير تطبيقات سطح المكتب: يمكن تعلم لغات البرمجة المتخصصة في تطوير تطبيقات سطح المكتب مثل C# وJava وPython واستخدام إطارات العمل المتاحة مثل .NET Framework أو JavaFX أو PyQt لتطوير تطبيقات سطح المكتب. تطوير تطبيقات الهجينة: يمكن تطوير تطبيقات الهجينة التي تعمل على كل من سطح المكتب والويب باستخدام الأدوات المتاحة مثل Electron وNW.js والتي تستخدم HTML وCSS وJavaScript لتطوير واجهة المستخدم والتواصل مع الخادم. وكما ذكر لك عدنان، الأفضل لك هي دورة تطوير التطبيقات باستخدام جافاسكربت ، فهى تفتح أمامك مجالات كثيرة منها تطوير مواقع الويب وتطبيقات الهواتف وبرامج سطح المكتب. فمن خلالها ستتعلم الآتي: الأسس البرمجية السليمة للغة JavaScript الإضافات الحديثة في نسخة ES6 من اللغة تطوير تطبيقات الخادم باستخدام بيئة Node.js أساسيات مكتبة React.js وبناء تطبيق ملاحظات باستخدامها أساسيات مكتبة React Native و Expo تطوير تطبيق جوال للوصل بين الأطباء والمرضى بالاعتماد على React Native التعرف على التطبيقات التي تتطلب اتصالًا مستمرًا بين المتصفح والخادم بناء تطبيق محادثة يشبه تطبيق WhatsApp إنشاء تطبيق أسئلة وأجوبة ونقاشات مع تصيير من جهة الخادم Server-side Rendering عبر إطار العمل Next.js بناء واجهات أمامية باستخدام React.js مع مكتبة Material-UI إنشاء تطبيقات سطح مكتب باستخدام JavaScript باستخدام إطار العمل Electron.js بناء تطبيق جوال لشبكة تواصل اجتماعي باستخدام إطار العمل Ionic ومكتبة React.js لمن هذه الدورة؟ لمن لا يمتلك خبرة مسبقة في مجال البرمجة ويريد الدخول في هذا المجال الشيق لمن يمتلك خبرة بسيطة في البرمجة ويرغب في تطوير مهاراته ليصل إلى الاحترافيّة لمن يرغب باكتساب مهارات برمجية جديدة تساعده على تحسين دخله لمن يرغب بتعلّم بيئة Node.js لبناء خدمات ويب حديثة وسريعة لمن يرغب تعلم تطوير تطبيقات ويب تفاعلية باستخدام مكتبة React.js لمن يرغب بتطوير تطبيقات جوال Android و iOS أصيلة باستخدام React Native لمن يرغب بتطوير تطبيقات جوال Android و iOS هجينة باستخدام Ionic و React.js لمن يرغب بتطوير تطبيقات تتطلب مزامنة فورية بين المتصفح والخادم مثل تطبيقات المحادثة لإنشاء تطبيقات سطح مكتب أساسية
  11. يمكنك رفع مشروع React الخاص بك إلى Netlify باتباع الخطوات التالية: تأكد من تنفيذ json server بنجاح و يتم استخدامه في المشروع. تحتاج إلى إنشاء ملف build من مشروع React الخاص بك. يمكنك القيام بذلك عن طريق تنفيذ الأمر "npm run build" في مشروعك. سينشئ هذا الأمر مجلدًا جديدًا يسمى "build" و يحتوي على جميع ملفات التطبيق النهائية. افتح حسابًا جديدًا في Netlify. يمكنك القيام بذلك عن طريق زيارة موقع Netlify و اختيار تسجيل الدخول ثم التسجيل للحصول على حساب جديد. بعد تسجيل الدخول، يجب عليك النقر على الزر "New site from Git" لإنشاء موقع جديد أو يمكنك رفع مجلد المشروع build مباشرًة بدون رفعه على GitHub ولكن ذلك أفضل. اختر موفر الخدمة الذي تستخدمه لإدارة مشروع React الخاص بك. ستظهر لك قائمة بالموفرين المدعومين. اختر الموفر الذي تريد استخدامه. تأكد من السماح لـ Netlify بالوصول إلى حسابك على موفر الخدمة. على سبيل المثال، إذا كنت تستخدم GitHub، فستحتاج إلى السماح لـ Netlify بالوصول إلى حساب GitHub الخاص بك. حدد مستودعك (repository) في القائمة المنسدلة. قم بتكوين إعدادات المشروع. يمكنك تحديد الفرع الذي تريد نشره وكذلك ملف البناء الذي أنشأته من خلال الأمر "npm run build" و هو ملف "build" في حالة استخدام create-react-app. بعد ذلك، يمكنك النقر على الزر "Deploy site" لنشر مشروع React الخاص بك على Netlify. بعد الانتهاء من النشر، سيتم توفير رابط URL لمشروعك على Netlify. يمكنك النقر عليه لعرض التطبيق الخاص بك.. كما يمكنك تخصيص اسم النطاق الخاص بتطبيقك على Netlify إذا كنت ترغب في ذلك. Continues Integration يمكنك أيضًا إدارة تطبيقك على Netlify باستخدام لوحة التحكم الخاصة بهم، حيث يمكنك عرض معلومات الاستخدام وإدارة تكوينات المشروع والتحكم في الإعدادات الأمنية. بالإضافة إلى ذلك، يمكنك تحديث التطبيق الخاص بك على Netlify عن طريق تحديث النسخة المرفوعة من التطبيق على GitHub. ولتحديث التطبيق الخاص بك على Netlify، يمكنك تحديث النسخة المرفوعة من التطبيق على GitHub. وفي حالة كان تطبيقك مرتبطًا بخدمة Continues Integration مثل Travis CI أو CircleCI، سيتم تنفيذ سلسلة من الأوامر الآلية لتحديث التطبيق بعد تحديث النسخة المرفوعة على GitHub. إذا كنت تستخدم Git كأداة لإدارة مشروعك، يمكنك استخدام أمر "git push" لتحديث النسخة المرفوعة على GitHub، ثم يتم تنفيذ عملية النشر الآلية على Netlify. بعد تحديث النسخة المرفوعة على GitHub، يمكنك الذهاب إلى لوحة التحكم الخاصة بتطبيقك على Netlify وتفحص عملية النشر للتأكد من نجاحها. وفي حالة وجود أي مشاكل، يمكنك العودة إلى النسخة السابقة من التطبيق المرفوع على GitHub.
  12. باستطاعتك استخدام خدمة Azure Backup من Microsoft Azure لتخزين نسخ احتياطية لقواعد البيانات SQL Server في السحابة. يمكنك تكوين Azure Backup للقيام بالنسخ الاحتياطي التلقائي لقواعد البيانات SQL Server وحفظها في خدمة تخزين Azure. علاوة على ذلك، يمكنك استخدام خاصية المزامنة Sync في خدمة التخزين Blob الخاصة بـ Azure لمزامنة النسخ الاحتياطية مع السيرفر المحلي. يمكنك استخدام Azure Blob Storage Sync لإنشاء مهمة مزامنة تلقائية بين حساب التخزين Blob الخاص بـ Azure والسيرفر المحلي، وبالتالي يتم مزامنة النسخ الاحتياطية تلقائيًا بعد أي تحديث على قاعدة البيانات في السيرفر المحلي. وتوفر Microsoft Azure خيارات متعددة للتخزين السحابي والنسخ الاحتياطي لقواعد البيانات، ويمكنك الاطلاع على المزيد من المعلومات والخدمات المتاحة على موقع Azure. خدمة Azure Backup من Microsoft Azure توفر تخزين النسخ الاحتياطية لقواعد البيانات SQL Server، ويمكن تكوينها لتلقيم قواعد البيانات بشكل تلقائي والنسخ الاحتياطي بشكل دوري. لتحقيق ذلك، يتعين عليك تنزيل وتثبيت Azure Backup Agent على الخادم الذي يستضيف قاعدة البيانات. بعد التثبيت، يمكنك تكوين الوكيل لتلقيم قواعد البيانات SQL Server والنسخ الاحتياطي بشكل دوري. تخزين Blob في Azure يمكن أن يستخدم كتخزين مرن للنسخ الاحتياطي. يمكنك إنشاء حساب تخزين Blob في Azure وتحميل نسخ النسخ الاحتياطية إلى حساب التخزين Blob هذا باستخدام أدوات التخزين المحلية أو أدوات النسخ الاحتياطي الخاصة بـ Azure. ولإنشاء مزامنة بين النسخ الاحتياطية المحلية والتخزين السحابي، يمكنك استخدام Azure Blob Storage Sync لإنشاء مهمة مزامنة تلقائية بين حساب تخزين Blob الخاص بـ Azure والسيرفر المحلي. يمكن لـ Azure Blob Storage Sync مزامنة النسخ الاحتياطية بشكل دوري، والتأكد من تحديث النسخ الاحتياطية المحلية والتخزين السحابي تلقائيًا. يمكن العثور على مزيد من المعلومات والتفاصيل حول خدمة Azure Backup وتخزين Blob في Azure، بالإضافة إلى تعليمات مفصلة حول كيفية تكوينها واستخدامها في مستندات Microsoft Azure. هناك منصات أخرى توفر خدمات تخزين سحابي للنسخ الاحتياطي لقواعد البيانات SQL Server، ومن بينها: Amazon Web Services (AWS): يوفر AWS خدمة Amazon S3 Glacier لتخزين النسخ الاحتياطية للبيانات، ويمكن استخدام خدمة Amazon Relational Database Service (RDS) لإدارة قواعد البيانات SQL Server. Google Cloud Platform: يوفر Google Cloud Storage لتخزين النسخ الاحتياطية للبيانات، ويمكن استخدام Google Cloud SQL لإدارة قواعد البيانات SQL Server. Backblaze: يوفر Backblaze B2 Cloud Storage لتخزين النسخ الاحتياطية للبيانات، ويمكن استخدامه مع أدوات النسخ الاحتياطي التي تدعم بروتوكول S3. DigitalOcean: يوفر DigitalOcean Spaces لتخزين النسخ الاحتياطية للبيانات، ويمكن استخدامه مع أدوات النسخ الاحتياطي التي تدعم بروتوكول S3. يتوفر لدى هذه الخدمات مزايا وخيارات مختلفة، ويجب اختيار الخدمة التي تناسب احتياجات العمل وميزانيته.
  13. أرجو منك توضيح المشكلة وتوفير صورة أو مجلد المشروع أو كود. علي أي حال، ربما تكون المشكلة أنك لم تقم باستيراد مكتبة Bootstrap في مشروعك. يمكنك استيراد مكتبة Bootstrap في مشروعك بالطريقة التالية: قم بتنزيل ملفات Bootstrap من الموقع الرسمي bootstrap.com. قم بفك الضغط عن الملفات التي تم تحميلها. قم بإنشاء مجلد في مشروعك واسمه "css" وضع ملف "bootstrap.min.css" داخل المجلد. قم بإنشاء مجلد آخر في مشروعك واسمه "js" وضع ملفات "jquery.min.js" و "bootstrap.min.js" داخل المجلد. قم بإضافة الرمز التالي في جزء الرأس (head) من ملف HTML الخاص بمشروعك: <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous"> <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script> بعد ذلك، يمكنك استخدام الأساليب والمكونات المختلفة في Bootstrap في مشروعك. يمكنك الرجوع إلى توثيق Bootstrap لمزيد من التفاصيل والأمثلة على كيفية استخدامه. وأرجو منك قراءة الدليل التالي.
  14. الكود يقوم بتحليل بيانات ملف "liver.csv" الموجود في المسار "C:/Users/karee/OneDrive/Desktop/" باستخدام مكتبات باندا Pandas و نامباي Numpy و dataprep.eda. ويتم استيراد المكتبات المذكورة أعلاه ثم يتم تحميل الملف "liver.csv" في DataFrame باستخدام الأمر pd.read_csv. يتم تعيين متغير nRowsRead إلى None ، وهو يعني أنه سيتم قراءة جميع الصفوف في الملف csv. يتم تخزين العدد الكلي للصفوف والأعمدة في المتغير nRow و nCol على التوالي. ثم يتم طباعة عدد الصفوف والأعمدة باستخدام print (). يليه عرض الصفوف الأولى من البيانات باستخدام df.head (). ثم الاستدلال على وجود القيم الناقصة في DataFrame باستخدام df.isnull ().sum () وتقوم الدالة بإعطاء مجموع القيم الناقصة في كل عمود. أخيرًا طباعة بعض التحليلات البيانية على DataFrame باستخدام الدالة plot () من مكتبة dataprep.eda. و يتم تمرير المتغير df إلى الدالة plot () ثم تمرير السنة (1988) و (2021) كمتغيرات لتنفيذ بعض التحليلات. ولا يوجد مخرج (Output) من هذا الكود ، لذلك لا يتم طباعة أي شيء في الإخراج.
  15. باستطاعتك تثبيت التحديثات لنظام التشغيل في ويندوز باستخدام الخطوات التالية: من خلال شريط البحث بالأسفل في ويندوز 10 أو 11 قم بالبحث عن check for updates وستجد أيقونة سهمين بشكل دائري قم بالضغط عليها ثم اضغط على check for updates. سيبحث نظام التشغيل عن التحديثات المتاحة وسيقوم بتنزيلها وتثبيتها تلقائيًا. إذا تم العثور على تحديثات جديدة ، سيتم تنبيهك وسيتم طلب موافقتك على تنزيلها وتثبيتها. بعد التثبيت ، قد تحتاج إلى إعادة تشغيل النظام لتفعيل التحديثات الجديدة.
  16. في البداية يجب الإهتمام بكيفية التقديم على العروض وكيفية جذب إهتمام العملاء، من خلال قراءة تفاصيل المشروع وتبيان أنك مناسب للعمل عن طريقة توضيح ذلك في العرض المقدم. سواء عن طريق خبرات سابقة في معرض أعمالك أو سنوات خبرة لديك يمكن إثباتها من خلال شرح الكيفية التي يمكن تنفيذ المشروع بها وإيضاح الخطوات التي سيتم إتباعها لتنفيذ العمل، بمعنى أدق يجب أن يرى العميل أن لديك الخبرة الكافية. وذلك لا يعني ضرورة الإلمام بجيمع جوانب المشروع، فيكفي أن تمتلك 70% من المعرفة اللازمة والباقي يمكنك تعلمه والبحث عنه لتنفيذ المشروع، طالما لديك المهارة والأساسيات. أيضًا هناك جانب هام وهو الإحترافية، حيث تجد أغلب المستقلين يتعاملون كما لو أنهم يتحدثون عبر الواتساب عند التقديم على المشاريع، بل يجب تبيان أنك شخص ذو خبرة ومصداقية فهما العامل الأول الذي يبحث عنه العملاء. لذلك إبحث جيدًا عن كيفية كتابة عرض تظهر فيه مهاراتك وبشكل مختصر أيضًا، بجانب ضرورة التعامل بشكل إحترافي كما لو أنك شركة، يعني الإلتزام أولاً ثم المهارة، فالغالبية لديهم المهارة لكن جانب الإلتزام وطريقة التعامل مع العملاء متدنية جدًا. أمر آخر وهو لا تظهر بشكل كما لو أنك تترجى العميل لقبول عرضك، بل تعامل بشكل طبيعي فالنتيجة عكسية وسيتم رفض عرضك إذا قمت بذلك. تلك كانت بعض النصائح وهناك المزيد، يمكنك البحث والقراءة عن المهارات اللازمة لتصبح مستقل محترف. بالنسبة لطريقة تسليم مللفات المشروع قبل استلام المشروع يتم الإتفاق على التفاصيل مع العميل، فصدقًا ستتجنب الكثير من المشاكل إذا قمت بالإتفاق على كافة التفاصيل قبل بدأ المشروع. يمكنك تحضير الأسئلة وإرسالها للعميل للإجابة عليها في ملف أو قم بالاستفسار عن كل سؤال بشكل منفصل، ومن ضمنها بالطبع كيف سيتم تسليم المشروع هل سيتم رفعه على استضافة مجانية؟ أم يتطلب نشر المشروع على استضافة مدفوعة وشراء دومين، وهل سيتم تصميم المشروع من قبلك أم هناك تصميمات جاهزة، وهل هناك محتوى أم سيتم إنشائه؟ ومدة تسليم المشروع فربما يريد العميل تنفيذه بسرعة وبالتأكيد ذلك يعني زيادة في تكلفة المشروع، فأي خدمة زيادة عن الكود لها تكلفتها، لكن رفع المشروع على استضافة وتسليمه يعمل بشكل سليم هو واجب عليك، طبعًا لن تدفع أنت إشتراك الاستضافة . وطريقة التسليم بسيطة، قم بالتخطيط والتنفيذ للمشروع ثم رفعه على الاستضافة المطلوبة وربطه بقاعدة البيانات وربط الدومين أيضًا ثم تفعيل شهادة SSL. بعد ذلك يتم تسليم ملفات المشروع للعميل منظمة وبها تعليقات على الكود لكي يسهل تطويره فيما بعد، مع كتابة إرشادات عن كيفية تشغيل المشروع إن لزم الأمر. وتكاليف كل ذلك على العميل، فكل ما عليك هو التخطيط وكتابة الكود، فقد تجد عملاء قاموا بشراء استضافة ودومين قبل البدء في المشروع أساسًا. وفي بعض الأحيان قد يتم إنشاء مستودع خاص على GitHub لتطوير المشروع عليه، وخاصًة إذا كان هناك فريق عمل. إذا كان لديك أسئلة أو استفسارات أخرى لا تتردد في السؤال. وأنصحك بقراءة المقالات التالية. دليلك الشامل إلى العمل الحر عبر الإنترنت تعرف على فن التعامل مع العملاء في مجالات العمل الحر المختلفة القسم الخاص بمقالات العمل الحر على منصة مستقل: https://blog.mostaql.com/tag/نصائح-للمستقلين/
  17. بخصوص حل المشروع بالكامل فلا يمكن مساعدتك في ذلك. أما بخصوص مساعدتك لإيجاد حلول لاستكمال المشروع، فالبتأكيد يمكن ذلك، أرجو منك طرح كافة الأسئلة التي تقف عائق أمامك، وسيتم توفير حلول لها. وإليك بعض المصادر بخصوص مشروعك.
  18. ربما المشكلة تتعلق ببقايا من إصدار Office 2010 السابق الذي حذفته. يجب عليك محاولة حذف جميع بقايا Office 2010 ومحاولة تثبيت Office 2016 مرة أخرى. يمكنك استخدام أداة إزالة Office من Microsoft للقيام بذلك. يمكنك تنزيل أداة إزالة Office من الرابط التالي: https://aka.ms/SaRA-officeUninstallFromPC بعد تنزيل الأداة، يمكنك تشغيلها واتباع الخطوات الموجودة لإزالة جميع بقايا Office 2010 من جهاز الكمبيوتر الخاص بك. أيضًا تأكد من حذف مجلد microsoft office في قرص الـ C في مجلد program files أو program files x86. أغلق برنامج الحماية لديك عن طريق عمل disable له من الإعدادات الخاصة به. قم بإعادة تشغيل الحاسوب. الآن يمكنك محاولة تثبيت Office 2016 مرة أخرى والتأكد من تشغيل عملية التثبيت كمسؤول أي الضغط بزر الفأرة الأيمن على ملف التثبيت ثم إختيار run as administrator. إذا لم تنجح محاولات التثبيت، يمكنك محاولة تنفيذ بعض الإجراءات المختلفة، مثل تثبيت جميع التحديثات الهامة لنظام التشغيل. إذا لم ينجح ذلك، فمن الممكن أن يكون لديك مشكلة في النظام أو القرص الصلب.
  19. الأسئلة الخاصة بالإختبارات لا يتم الإجابة عليها ولكن يمكن إرشادك لطريقة الحل. في البداية السؤال غير واضح حيث هناك معادلة لم يتم إضافتها كما ترى في سؤالك. على أي حال، يتطلب هذا السؤال منك كتابة برنامج في MATLAB لبناء موجات باستخدام سلسلة فورييه، وعرض هذه الموجات في شكل رسوم بيانية على نافذة واحدة تحتوي على 6 نوافذ صغيرة مرتبة في 3 صفوف و 2 أعمدة. للقيام بذلك، يمكن استخدام الدالة "fourierSeriesSquare" المتوفرة في MATLAB لحساب معاملات سلسلة فورييه الخاصة بالموجة الكهربائية المربعة. ثم يمكن استخدام هذه المعاملات لبناء موجات الهارمونيك المختلفة المطلوبة وعرضها باستخدام الدالة "plot" في نوافذ صغيرة منفصلة. يمكن البدء بكتابة الأكواد في M-file في MATLAB باستخدام الأوامر التالية: % تعريف المتغيرات اللازمة T = 1; % فترة الموجة f = 1/T; % التردد الأساسي n = [1, 2, 5, 10, 100, 1000]; % أعداد الهارمونيك المطلوبة % حساب معاملات سلسلة فورييه باستخدام دالة fourierSeriesSquare [a, b] = fourierSeriesSquare(T, n(end)); % بناء موجات الهارمونيك المختلفة باستخدام المعاملات for i = 1:length(n) t = linspace(0, T, 1000); x = zeros(size(t)); for j = 1:n(i) x = x + a(j)*cos(2*pi*j*f*t) + b(j)*sin(2*pi*j*f*t); end % عرض الموجة في نافذة منفصلة باستخدام subplot subplot(3, 2, i) plot(t, x) title(sprintf('%d Harmonics', n(i))) end % تعيين عنوان للنافذة الرئيسية sgtitle('Square Wave Harmonics') يمكن استخدام الكود المذكور أعلاه لإنشاء موجات الهارمونيك المختلفة للموجة الكهربائية المربعة وعرضها في نافذة واحدة تحتوي على 6 نوافذ صغيرة مرتبة في 3 صفوف و 2 أعمدة. ويمكن استخدام الأوامر التالية: إنشاء متغيرات تمثل قيم المعاملات في المعادلة المذكورة، بما في ذلك "n" و "T" و "A". إنشاء مصفوفة لتخزين قيم الترددات المختلفة للهارمونيات. استخدام الدالة "syms" لتعريف المتغير "t" على أنه متغير رمزي. استخدام الدالة "fourierSeries" لحساب سلسلة فورييه الخاصة بالموجة المربعة. استخدام الدالة "subs" لتعيين قيم المعاملات المختلفة في المعادلة. إنشاء دالة تسمى "plotFourierSeries" لرسم السلسلة الفورييه. استخدام الأمر "subplot" لإنشاء النوافذ الصغيرة. استخدام الأمر "title" لإضافة عناوين للنوافذ الصغيرة. استخدام الأمر "xlabel" و "ylabel" لإضافة تسميات المحاور إلى الرسوم البيانية. استخدام الأمر "grid" لإضافة شبكة على الرسوم البيانية. وهناك بعض الأوامر الإضافية التي يمكن استخدامها لتخصيص المخططات بشكل أفضل.
  20. وعليكم السلام ورحمة الله وبركاته، بالتأكيد يمكن ربط متجر إلكتروني يعمل بنظام ووردبريس بقاعدة بيانات خارجية.و يتم ذلك عادةً باستخدام الـ API الخاصة بالبرنامج الذي تتواجد به البيانات، والذي يتيح وصولًا محدودًا إلى البيانات اللازمة لتحديث المخزون أو المنتجات المعروضة في المتجر الإلكتروني. يمكن استخدام الـ API في إضافة المنتجات وتحديث المخزون وأيضًا في عرض البيانات على صفحات الموقع. ولكن يتطلب هذا الأمر مهارات في البرمجة وتطوير الويب، وإذا كنت لا تملك هذه المهارات، يمكنك البحث عن مطورين متخصصين في هذا المجال للمساعدة في تنفيذ المشروع. كما يمكنك الاطلاع على المصادر التالية.
  21. يتعلق الفرق بين innerText و innerHTML بطريقة تعاملهما مع نصوص HTML. الـ innerText هي خاصية تستخدم لجلب النص الذي يتم عرضه داخل عنصر HTML، بشكل نصي عادي، بدون العلامات الخاصة بالـ HTML. وبالتالي، فإن innerText يقوم بإرجاع النص فقط، بدون أي عناصر HTML، ولا يمكن استخدامه لإدخال عناصر HTML داخل الصفحة. أما الـ innerHTML، فهي خاصية تستخدم لجلب النص والعناصر الـ HTML الذي يتم عرضه داخل عنصر HTML. بشكل عام، يمكن استخدام innerHTML لجلب النص والعناصر الـ HTML الموجودة داخل العنصر وكذلك لإدخال عناصر HTML جديدة داخل الصفحة. ويمكن استخدام innerText إذا كنت تريد جلب النص العادي فقط، ولا تهتم بأي عناصر HTML في النص. وبالنسبة لاستخدام innerHTML فهى مناسبة إذا كنت تحتاج إلى جلب النص والعناصر الـ HTML الموجودة داخل العنصر، أو إذا كنت تريد إضافة عناصر HTML جديدة داخل الصفحة. ومن المهم التأكد دائمًا من تنظيف النصوص الخاصة بالمستخدم قبل إدخالها باستخدام innerHTML لتجنب ثغرات أمان الويب مثل cross-site scripting (XSS).
  22. مشكلة البحث: الخطأ في عرض البحث بحيث يعمل البحث فقط إذا تم إدخال الكلمة بالكامل. على سبيل المثال، عند الكتابة "p"، لا يعرض أي شيء. هذا الخطأ يحدث لأن استخدام الدالة setMeals() في الدالة getSearchedMeals() يعيد قائمة الوجبات إلى حالتها الأصلية، مما يعني أن العرض الحالي للوجبات سيتم إزالته. يجب استخدام حالة جديدة تتضمن النتائج المصفاة دون تغيير الحالة الأصلية لقائمة الوجبات. لإصلاح هذا الخطأ، يمكن تعديل الدالة getSearchedMeals() على النحو التالي: const getSearchedMeals = (e) => { e.preventDefault(); if (searchMeal !== "") { const searched = meals.filter(meal => meal.title.toLowerCase().includes(searchMeal.toLowerCase()) ); setShowMeals(true); setMeals(searched); } else { setShowMeals(false); } setSearchMeal(""); }; مشكلة تصفية النوع: تحدث هذه المشكلة لأنه في كل مرة تقوم فيها بتحديد الفئة، تقوم الدالة setMeals() بتعيين القائمة المفلترة إلى قائمة من الوجبات التي تحتوي فقط على النوع الذي تم تحديده. لحل هذه المشكلة، يمكنك استخدام مصفوفة أخرى لتخزين القائمة الأصلية من الوجبات وتقوم بتصفيتها بناءً على النوع وتعيين القائمة المعروضة إلى النتيجة. يمكنك تعديل الكود كالتالي: function App() { const [searchMeal, setSearchMeal] = useState(""); const [meals, setMeals] = useState([]); const [showMeals, setShowMeals] = useState(false); const [originalMeals, setOriginalMeals] = useState([]); // إضافة قائمة الوجبات الأصلية // Fetch Meals API const getMeals = async () => { const response = await fetch( "https://www.themealdb.com/api/json/v1/1/search.php?s" ); const data = await response.json(); const findMeals = data.meals.map((meal) => ({ id: meal.idMeal, title: meal.strMeal, image: meal.strMealThumb, rate: (Math.random() * 5).toFixed(2), category: meal.strCategory, description: meal.strYoutube, })); setMeals(findMeals); }; useEffect(() => { getMeals(); }, []); // Display Searched Meals const getSearchedMeals = (e) => { e.preventDefault(); if (searchMeal !== "") { const searched = meals.filter(meal => meal.title.toLowerCase().includes(searchMeal.toLowerCase()) ); setShowMeals(true); setMeals(searched); } else { setShowMeals(false); } setSearchMeal(""); }; // filter by category const [selected, setSelected] = useState([]); const categories = meals .map((meal) => meal.category) .reduce((acc, item) => (acc.includes(item) ? acc : [...acc, item]), []); const handleCheck = (e) => { const { value, checked } = e.target; if (checked === true) { setSelected((pre) => [...pre, value]); } else { setSelected((pre) => [...pre.filter((item) => item !== value)]); } }; useEffect(() => { const filtered = meals.filter((item) => selected.includes(item.category) ); setMeals(filtered); }, [selected]); // Filter By Rate return ( <div className="container"> <Search searchMeal={searchMeal} setSearchMeal={setSearchMeal} getSearchedMeals={getSearchedMeals} /> <div className="main"> {showMeals && ( <FilterMeal categories={categories} handleCheck={handleCheck} /> )} {showMeals && <Meals meals={meals} searchMeal={searchMeal} />} </div> </div> ); } export default App;
  23. يمكن تنفيذ التطبيق المذكور باستخدام تقنيات الويب المختلفة، على سبيل المثال: لإنشاء غرف الألعاب والصوت، يمكن استخدام تقنيات WebRTC أو WebSocket. يتم إنشاء غرف جديدة باستخدام قاعدة بيانات لتخزين بيانات اللاعبين ومعلومات الغرف وحالتها (مفتوحة أو مغلقة). لعملية الرهان، يمكن استخدام لغة الجافاسكريبت للتعامل مع الخوارزمية المستخدمة وتنفيذ عملية الرهان بشكل آمن ودقيق. يتم تخزين النتائج في قاعدة البيانات ويتم عرضها للمستخدمين بشكل ديناميكي. ويمكن استخدام مكتبات الجافاسكريبت الحديثة مثل React أو Angular لإنشاء واجهة المستخدم الجميلة والحديثة والتفاعلية. يجب توفير إجراءات أمان صارمة لضمان سلامة اللاعبين وحماية بياناتهم الشخصية والمالية. أيضًأ يمكن تنفيذ التطبيق على أجهزة سطح المكتب أو الهواتف المحمولة باستخدام تقنيات الويب المتعددة المنصات مثل HTML، CSS، و JavaScript من خلال إطاري عمل React-native و Electron.js. ولكن يجب التنبيه إلى ضرورة البحث عن مشروعية الرهان من ناحية الدين فالرهان من خلال الحظ لا يجوز. فكما ذكرت فعليًا تعتمد لعبة الرهان في النتائج على خوارزمية معينة وليس على مهارة اللاعبين، حيث تتم إدارة اللعبة والتحقق من صحة الرهانات وحساب الأرباح والخسائر من قبل السيرفر الخاص بالتطبيق، وذلك لتوفير تجربة لعب عادلة وعشوائية للاعبين وتجنب الغش والتلاعب في النتائج. وبالتالي، يتم تحديد نتيجة اللعبة بشكل عشوائي ولا يمكن لأي لاعب التنبؤ بالنتيجة بشكل دقيق ويعتمد الأمر في الغالب على الحظ. فيمكن أن تختلف الخوارزميات المستخدمة في لعبة الرهان تبعًا لنوع اللعبة والمتطلبات الخاصة بالتطبيق. وإليك مثال بالجافاسكريبت: // تعريف متغير لحساب نتيجة الرهانات let totalWinning = 0; // تعريف مصفوفة للاحتفاظ بأضعاف الرهانات const betMultipliers = [2, 3, 4, 5, 6, 7, 8, 9]; // تعريف مصفوفة للاحتفاظ بالقيم النسبية لكل رهان const bets = [0.5, 0.25, 1, 2, 5, 10, 50, 100]; // تعريف متغيرات لتمثيل حالة الرهان، true إذا كان الرهان صحيحًا وfalse إذا كان الرهان خاطئًا const betStatuses = [true, false, true, false, true, true, true, false]; // حساب الأضعاف والربح الإجمالي for (let i = 0; i < betStatuses.length; i++) { if (betStatuses[i]) { totalWinning += bets[i] * betMultipliers[i]; } } // عرض النتيجة console.log(`Total Winning: ${totalWinning}`); تم إنشاء متغير totalWinning لحساب إجمالي الربح، ومصفوفتي betMultipliers و bets للاحتفاظ بأضعاف الرهانات والقيم النسبية الخاصة بها على التوالي. يتم تمثيل حالة كل رهان باستخدام متغيرات betStatuses. يتم استخدام حلقة for لحساب إجمالي الربح. إذا كان الرهان صحيحًا، يتم ضرب قيمة الرهان النسبية بمضاعف الرهان وإضافته إلى المتغير totalWinning. في النهاية، سيتم عرض إجمالي الربح في وحدة التحكم باستخدام console.log.
  24. بشكل أكثر تفصيلاً، يمكن القول أن DOM في JavaScript يشير إلى مجموعة من الكائنات (Objects) التي تمثل مستند HTML الذي تتم إنشاؤه من قبل المستعرض (Browser)، وتتيح للمطورين التفاعل مع عناصر المستند بشكل ديناميكي عن طريق البرمجة. ويعد DOM بمثابة جسر بين المستند HTML وJavaScript، حيث يمكن الوصول إلى العناصر الموجودة في المستند والتلاعب بها باستخدام JavaScript. DOM يعمل على مبدأ التسلسل الهرمي (Hierarchical structure)، حيث يتم تمثيل المستند HTML كشجرة تحتوي على عناصر HTML وكل عنصر يحتوي على أطفال (Children) وأشقاء (Siblings). ويتم تمثيل العناصر باستخدام كائنات JavaScript يمكن الوصول إليها باستخدام مجموعة من الخصائص والأساليب. عندما يتم تحميل صفحة ويب، يقوم المستعرض بإنشاء DOM، ونستطيع الوصول إلى عناصر المستند HTML باستخدام الأساليب والخصائص المتاحة في جافاسكريبت مثل getElementById() و getElementsByClassName() وغيرها. الأساليب والخصائص المتاحة في DOM تختلف من عنصر إلى آخر، ولكن بشكل عام يمكن استخدام DOM لتعديل محتويات الصفحة والأحداث المرتبطة بها، وذلك باستخدام JavaScript. على سبيل المثال، يمكن استخدام DOM لتغيير نص عنصر HTML، عن طريق الوصول إلى العنصر باستخدام الأسلوب getElementById() ثم تعيين قيمة جديدة لخاصية innerHTML: <p id="myPara">Hello World!</p> const myPara = document.getElementById("myPara"); myPara.innerHTML = "Goodbye World!"; كما يمكن استخدام DOM لإضافة عناصر HTML جديدة إلى المستند، عن طريق إنشاء العنصر باستخدام createElement() ثم إضافته إلى المستند باستخدام append. على سبيل المثال، إذا كنت تريد إنشاء عنصر div جديد وإضافته إلى صفحتك، يمكنك استخدام الكود التالي: // إنشاء عنصر div جديد const newDiv = document.createElement("div"); // تعيين نص داخل العنصر const divText = document.createTextNode("Hello, World!"); // إضافة النص إلى العنصر newDiv.appendChild(divText); // تعيين بعض الخصائص للعنصر newDiv.style.backgroundColor = "blue"; newDiv.style.color = "white"; newDiv.style.padding = "10px"; // إضافة العنصر الجديد إلى الصفحة document.body.appendChild(newDiv); يمكن أيضًا استخدام DOM لإزالة عناصر HTML، عن طريق استخدام removeChild(). على سبيل المثال، إذا كنت تريد إزالة عنصر div بناءً على معرفه، يمكنك استخدام الكود التالي: // الحصول على العنصر المراد إزالته باستخدام معرفه const divToRemove = document.getElementById("myDiv"); // إزالة العنصر من المستند divToRemove.parentNode.removeChild(divToRemove); وباستخدام DOM ، يمكنك أيضًا تغيير خصائص عناصر HTML موجودة، مثل قيمة النص أو الخلفية أو الحجم والألوان والخطوط والأحداث وغيرها الكثير. على سبيل المثال، إذا كنت تريد تغيير خلفية عنصر div عند تحميل الصفحة، يمكنك استخدام الكود التالي: <div id="myDiv">Hello, World!</div> <script> // الحصول على العنصر المراد تعديله باستخدام معرفه const myDiv = document.getElementById("myDiv"); // تغيير خلفية العنصر myDiv.style.backgroundColor = "blue"; myDiv.style.color = "white"; myDiv.style.padding = "10px"; </script> في النهاية، تتيح لك DOM إمكانية التفاعل مع صفحات الويب وتغييرها بطريقة ديناميكية وباستخدام لغة JavaScript.
  25. Mustafa Suleiman

    laravel

    لتخزين الصور في Laravel ومن ثم تخزينها في قاعدة البيانات، ستحتاجين إلى اتباع الخطوات التالية: 1- إنشاء جدول في قاعدة البيانات لتخزين الصور: قم بإنشاء جدول جديد في قاعدة البيانات لتخزين الصور. يجب أن يتضمن هذا الجدول حقولًا مثل اسم الصورة ومسار الصورة وأي حقول إضافية تحتاج إليها لتتمكن من تخزين واسترداد الصور. Schema::create('photos', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('path'); $table->timestamps(); }); 2- إنشاء نموذج Model للصورة: يجب إنشاء نموذج Model للصورة لتتمكن من الوصول إلى جدول الصور في قاعدة البيانات. سيتم استخدام هذا النموذج لإنشاء سجلات صور جديدة وتحديثها وحذفها. namespace App\Models; use Illuminate\Database\Eloquent\Model; class Photo extends Model { protected $fillable = [ 'name', 'path' ]; } 3- إضافة حقل لتحميل الصور في النموذج: يجب إضافة حقل لتحميل الصور في النموذج. يمكن استخدام الحقل "file" لهذا الغرض. <input type="file" name="photo"> 4- تخزين الصورة في الخادم: قبل تخزين الصورة في قاعدة البيانات، يجب تخزينها في الخادم. يمكن استخدام وظيفة "store" للقيام بذلك. سيتم حفظ الصورة في المسار المحدد في الدالة "store". $path = $request->file('photo')->store('public/photos'); 5- إنشاء سجل الصورة في قاعدة البيانات: بعد حفظ الصورة في الخادم، يمكنك إنشاء سجل للصورة في قاعدة البيانات باستخدام النموذج Model. use App\Models\Photo; $photo = new Photo; $photo->name = $request->file('photo')->getClientOriginalName(); $photo->path = $path; $photo->save(); 6- استرداد الصورة من قاعدة البيانات: يمكنك استرداد الصورة من قاعدة البيانات باستخدام النموذج Model. يجب البحث عن سجل الصورة باستخدام معرف الصورة واسترداد المسار الذي تم تخزين الصورة به في الخادم. use App\Models\Photo; $photo = Photo::findOrFail($id); $path = $photo->path; 7- عرض الصورة في الواجهة: يمكنك عرض الصورة في الواجهة باستخدام العنوان URL للصورة. يمكن الحصول على العنوان URL باستخدام دالة "asset". <img src="{{ asset($photo->path) }}" alt="{{ $photo->name }}"> 8- حذف الصورة: يمكن حذف الصورة من الخادم وقاعدة البيانات باستخدام النموذج Model. use App\Models\Photo; $photo = Photo::findOrFail($id); Storage::delete($photo->path); $photo->delete(); بهذا الشكل، يمكنك تخزين الصور في Laravel ومن ثم تخزينها في قاعدة البيانات واستردادها وحذفها عند الحاجة.
×
×
  • أضف...