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

Mustafa Suleiman

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

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

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

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

    472

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

  1. معنى الرسالة أن هناك خطأ في ملف pubspec.yaml الخاص بمشروعك، والرسالة تشير إلى خطأ في السطر 61 في عمود 4، و يفترض أن يكون لديك مفتاح صحيح في هذا السطر وفقًا لصيغة YAML، لذلك حاول اتبع الخطوات التالية: قم بفتح ملف pubspec.yaml في محرر النصوص الخاص بك. انتقل إلى السطر 61 وتحقق من وجود أي أخطاء في النحو أو التنسيق. تأكد من أن المفتاح الموجود في هذا السطر صحيح ومكتوب بشكل صحيح وأنه ليس هناك أخطاء في التنسيق مثل تقديمه بطريقة صحيحة. بعد إجراء التعديلات المطلوبة، يجب أن تتمكن من تنفيذ flutter pub get بنجاح دون وجود أخطاء. وسأشرح لك الأمر بمثال عن كيفية حدوث خطأ مشابه في ملف pubspec.yaml: ... 60 dependencies: 61 assets: 62 - assets/images/ 63 - assets/fonts/ ... الخطأ في المثال هو أن العنصر "assets" يفتقد رمز النقطة الرأسية (colon) بعد كلمة "assets"، ويجب أن يكون الملف pubspec.yaml بهذا الشكل الصحيح: ... 60 dependencies: 61 assets: 62 - assets/images/ 63 - assets/fonts/ ... تأكد من إضافة النقطة الرأسية بعد "assets" وترتيب الهمزة والساكنة بشكل صحيح للمفتاح والقيمة الموجودة في القائمة، بعد ذلك، يجب أن تتمكن من تنفيذ flutter pub get بنجاح.
  2. سأوضح لك الخطوات التي أشار إليك بها عدنان: 1- إنشاء ملف XML لتصميم إشعارك، باستخدام عنصر RelativeLayout أو LinearLayout لتحديد تخطيط الإشعار الخاص بك وتضمين العناصر المختلفة مثل الصورة والنص. مثال: <!-- notification.xml --> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:id="@+id/notification_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/notification_icon" /> <TextView android:id="@+id/notification_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/notification_icon" android:text="عنوان الإشعار" /> <TextView android:id="@+id/notification_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/notification_title" android:layout_toRightOf="@id/notification_icon" android:text="رسالة الإشعار" /> </RelativeLayout> 2- في فئة النشاط (Activity) أو الخدمة (Service) التي ترغب في استخدام الإشعار، أنشئ كائنًا من فئة NotificationCompat.Builder لبناء الإشعار. مثال: // في الأعلى من الفئة، قم بإضافة استيرادات التالية: // import androidx.core.app.NotificationCompat; // import androidx.core.app.NotificationManagerCompat; public class MyActivity extends AppCompatActivity { // ... private static final String CHANNEL_ID = "my_channel_id"; // قم بتعيين قيمة فريدة لهذا المعرف private void showNotification() { // بناء الإشعار NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID) .setSmallIcon(R.drawable.notification_icon) .setContentTitle("عنوان الإشعار") .setContentText("رسالة الإشعار") .setPriority(NotificationCompat.PRIORITY_DEFAULT); // قم بإنشاء النقرة النائبة (PendingIntent) للتعامل مع نقرة المستخدم على الإشعار (اختياري) Intent intent = new Intent(this, MyActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); builder.setContentIntent(pendingIntent); // إنشاء الإشعار NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this); notificationManager.notify(notificationId, builder.build()); } // ... } 3- إنشاء قناة الإشعار (Notification Channel) في طراز الأندرويد الذي يدعم قنوات الإشعارات (Android 8.0 أو أعلى). مثال: public class MyApplication extends Application { private static final String CHANNEL_ID = "my_channel_id"; // يجب أن يتطابق مع القيمة المستخدمة في الخطوة السابقة @Override public void onCreate() { super.onCreate(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // إنشاء قناة الإشعار CharSequence name = "اسم القناة"; String description = "وصف القناة"; int importance = NotificationManager.IMPORTANCE_DEFAULT; NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance); channel.setDescription(description); // تهيئة إعدادات قناة الإشعار NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel); } } } 4. تنفيذ دالة showNotification() عند الحاجة لعرض الإشعار. بمجرد تنفيذ دالة showNotification()، ستقوم ببناء الإشعار وعرضه للمستخدم، وتستطيع استدعاء هذه الدالة من أي مكان في تطبيقك وفي أي سياق مناسب. مثلاً استدعاء showNotification() عندما يتم اكتشاف حدث جديد في التطبيق، مثل وصول رسالة جديدة أو تحديث مهم، أيضًا استدعائها من داخل خدمة (Service) لعرض إشعارات دورية أو قائمة بالتحديثات الجديدة. مثال على استدعاء showNotification(): public class MyActivity extends AppCompatActivity { // ... private void checkForNewMessages() { // افحص على وجود رسائل جديدة // إذا تم العثور على رسالة جديدة، عرض إشعار if (hasNewMessages()) { showNotification(); } } // ... } تأكد من تعيين القيم المناسبة لكائن NotificationCompat.Builder في دالة showNotification() واستخدم الأساليب المناسبة لتخصيص الإشعار حسب احتياجات تطبيقك. من الهام جدًا أن تتذكر أنه بدءًا من Android 8.0 (API level 26)، يجب عليك إنشاء قناة إشعارات (Notification Channel) وتعيينها لكائن NotificationCompat.Builder حتى يتم عرض الإشعار بنجاح. وتأكد من استدعاء الدالة createNotificationChannel() في الوقت المناسب، كما تم شرحه في الخطوة 3 في الإجابة السابقة.
  3. رسالة الخطأ في الملف App.js تعني أن هناك مشكلة في تعريف المتغير 'Text'، حيث أنه غير معرف. وعليك أولاً بكتابة المكون بشكل صحيح، عن طريق تمرير props كمعامل في المكون كالتالي: import React from 'react'; function Text(props) { return <p>{props.text}</p>; } export default Text; ثم يمكنك استيراد المكون "Text" في ملف App.js واستخدامه كما تريد: import React from 'react'; import Text from './Text'; function App() { return ( <div> <Text text="مرحبًا بك" /> </div> ); } export default App; ولاحظ أنني قمت بتمرير text كـ prop بقيمة مرحبًا بك للمكون Text. ,تأكد من وضع ملف "Text.js" في نفس المجلد الذي يحتوي على ملف "App.js"، أو قم بتعديل المسار المناسب في حالة وجودهما في مجلدين منفصلين، أي استورده بشكل صحيح.
  4. في مجال البرمجة لا غنى عن مستوى مقبول من اللغة الإنجليزية، ففي العمل اليومي ستتعرض للغة الإنجليزية بلا شك، سواء عند البحث عن مشكلة تريد حل لها على المواقع الأجنبية، أو قراءة المستندات الخاصة بالمكتبات وإطار العمل الذي تستخدمه من أجل معرفة كيفية استخدام ميزة معينة في المشروع أو من أجل حل مشكلة تواجهك. وأيضًا في الإيميلات والتراسلات بين فريق العمل قد يتم استخدام اللغة الإنجليزية بها، لذلك أنت بحاجة إلى مستوى مقبول من حيث القراءة والاستماع والكتابة وقد يتم التغاضي عن التحدث. أي يجب إمتلاك ما تستطيع به تسيير أمور عملك اليومي بدون مشاكل، وإلا سيتم إختيار شخص آخر يمتلك مهارات تواصل جيدة فبيئة العمل لا تعني كتابة الكود فقط. وربما تجد شركات تستخدم لا تحتاج إلى لغة إنجليزية في بيئة العمل، لكن ذلك أمر نادر تلك الأيام حيث يجب إمتلاك مستوى مقبول كما ذكرت، وتستطيع دراسة اللغة الإنجليزية من قناة طليق أو ذي أمريكان إنجليش على اليوتيوب أو من خلال تطبيق الهاتف. وقد تم التطرق إلى سؤالك بالتفصيل في النقاش التالي:
  5. بالنسبة لسؤالك الأول: فتطبيقات تسجيل المكالمات المتوفرة على Google Play تعمل بطرق مختلفة وتختلف في سياساتها وقدراتها، وأغلبها يقوم بتنفيذ العملية على جهازك الخاص، وليس على خوادم المطور الخارجية. وغالبًا ما يتم تخزين ملفات تسجيل المكالمات على جهازك أو في سحابة التخزين الشخصية التي تحددها (مثل Google Drive أو Dropbox)، وليس عند مطور التطبيق. بالتالي، فإن الأرقام والتفاصيل الشخصية المتعلقة بالمكالمة تكون محفوظة فقط على جهازك وليست متاحة للمطور. ومع ذلك، يجب أن تتأكد من قراءة سياسة الخصوصية وشروط الاستخدام لكل تطبيق تسجيل المكالمات قبل استخدامه. قد توجد بعض التطبيقات التي تجمع وتخزن المكالمات على خوادم المطور، ولذا يجب أن تتأكد من الإعدادات والسياسات الخاصة بالتطبيق لمعرفة كيفية معاملة بياناتك الشخصية. وبالنسبة لسؤالك الثاني: في حالة كان هناك خاصية التخزين السحابي ومزامنة التسجيلات الخاصة بك، فتستطيع تحميل التطبيق والدخول بحسابك وستجد المكالمات التي تم تسجيلها سابقًا. أما إذا كان يتم التخزين على حسابك في Google Drive فعليك بتفقد المجلد هناك وستجد المكالمات المسجلة. أما إذا كان يتم التخزين على جهازك وحذفت التطبيق، فهناك إحتمالان، الأول أن مجلد المكالمات المسجلة قد تم حذفه ولن تستطيع استرجاعه حيث أن ذلك حدث منذ فترة بناءًا على كلامك. والإحتمال الثاني أن مجلد المكالمات المسجلة مازال موجود وعليك بتفقد الملفات الصوتية لديك للتأكد من ذلك.
  6. المشكلة تحدث عندما تحاول تحويل قيمة من نوع int إلى نوع String في السطر التالي: controller.itemsId.toString() ويتوقع البرنامج أن يكون itemsId من نوع String وليس int. لذلك عليك بتحويل itemsId إلى String قبل تمريره إلى paniercontroller، وتستطيع استخدام الدالة toString() لتحقيق ذلك. وهناك عدة طرق لفعل ذلك، ومنها: controller.paniercontroller.add(controller.itemsId.toString()); من المهم أيضًا التحقق مما إذا كانت القيمة controller.itemsId صحيحة وغير فارغة، فقم بالتحقق من صحة القيمة قبل تحويلها إلى سلسلة نصية باستخدام شرط مثل هذا: IconButton( onPressed: () { if (controller.itemsId != null) { controller.paniercontroller.add( controller.itemsId.toString() ); } }, icon: Icon(Icons.add) ),
  7. كلاهما مطلوبان في سوق العمل، لكن لكل سوق عمل متطلباته فربما لديك المطلوب بكثرة هي لغة جافاسكريبت وإطارات العمل والمكتبات الخاصة بها مثل React و Node.js. لذلك لإتخاذ القرار بشكل سليم وليس بناءًا على تفضيلات شخصية أو إحصائيات عالمية، حدد ماذا تريد أنت بالضبط هل تريد العمل في السوق المحلي؟ إذًا توجه لمواقع التوظيف الشهيرة في بلدك مثل LinkedIn وغيرها أنت أدرى بهم، وتفقد هل هناك وظائف متاحة لمطور واجهات خلفية بلغة بايثون وإطار دجانغو قم بالبحث بأكثر من كلمة مفتاحية مثل backend developer أو Django developer أو python developer. فإن وجدت طلب على تلك المهارات فأنت في الطريق السليم، وإن لم تجد عليك بسؤال شخص له خبرة سواء من خلال جروب على فيسبوك يجمع مبرمجي بلدك أو شخص تعرفه يعمل في السوق المحلي لديك. وفي حال لم تكن مطلوبة، عليك باستكمال تعلم أساسيات بايثون فستحقق استفادة منها لا شك، بعد ذلك انتقل لتعلم جافاسكريبت والإطارات والمكتبات الخاصة بها، أو لغة PHP وإطار لارافيل ومنصة وورد بريس. وقبل أن تتعلم أي لغة سواء جافاسكريبت أو PHP عليك بالبحث والتأكد من أنها مطلوبة في سوق العمل لديك وليس التعلم لمجرد أنك تحب لغة معينة ضع شغفك جانبًا لحين الحصول على وظيفة. وإذا كنت تريد العمل على مواقع العمل الحر مثل خمسات ومستقل، عليك بتفقد المشاريع والمهارات الخاصة بها لتنفيذها، والأغلبية بحاجة إلى مبرمجين PHP وإطار لارافيل ومنصة وورد بريس وذلك على مواقع العمل الحر العربية. لا تستمتع لأحد ليس لديه خبرة، وتفقد أنت الوظائف وقرر بعد ذلك، وابحث بكلمات مختلفة مثل react developer أو node.js developer أو php developer أو laravel developer أو WordPress developer وطالما أنك تريد الواجهة الخلفية فقم بالبحث عن backend developer وتفقد ما هي اللغات وإطار العمل الأكثر طلبًا بالنسبة لمستوى Junior أو Entry level أو خبرة سنة.
  8. أرجو منك طرح السؤال أسفل فيديو الدورة وتوضيح الرسالة والأفضل نسخها ولصقها في السؤال، وذلك لنتمكن من مساعدتك بشكل أفضل. وجرب إغلاق المتصفح بالكامل ومحرر الأكواد لديك ثم تشغيل المشروع من جديد، وأخبرني بالنتيجة. شكرًا لك.
  9. المشكلة تتعلق بأخطاء في عملية البناء لتطبيق Flutter على نظام Windows، حيث يوجد خطأ في ملف "image_provider.dart" في السطر 998، يفتقد علامة ";" بعد النقطة في نهاية السطر، وأيضًا يوجد خطأ يشير إلى عدم إمكانية تعيين قيمة من نوع "Type" إلى متغير من نوع "int". بالإضافة إلى خطأ آخر يشير إلى فشل عملية البناء الخاصة بـ CMake و MSBuild، وقد يكون هناك مشكلة في ملفات المشروع أو إعدادات بناء البرنامج. حاول تجربة الحلول التالية: تأكد من تحديث Flutter وجميع المكتبات والأدوات ذات الصلة إلى أحدث الإصدارات المتاحة. التحقق من الملف "image_provider.dart" وتأكد من وجود العلامة ";" بشكل صحيح في السطر 998 وأنه لا يوجد أخطاء أخرى في الملف. تأكد من أنك تستخدم إصدارًا متوافقًا من CMake و MSBuild، من خلال التحقق من تثبيتهما بشكل صحيح وتكوينهما بشكل صحيح في البيئة الخاصة بالتطوير. تحديث بيئة التطوير الخاصة بك (مثل Visual Studio) إلى أحدث إصدار، حيث قد يكون هناك تحديثات أو إصلاحات لمشاكل معروفة. تنفيذ الأمر flutter clean إعادة تشغيل النظام الخاص بك وتنفيذ عملية بناء التطبيق مرة أخرى للتحقق مما إذا كانت المشكلة قد تم حلها.
  10. الخطأ "Network Error" يشير إلى حدوث خطأ في الشبكة أثناء إجراء الاستدعاء، وطالما أنك لا تواجه مشكلة في الخادم من جانب العميل وتستطيع رؤية البيانات، حاول تجربة التالي لحل المشكلة: 1- في بعض الأحيان، يمكن أن يتسبب تعطيل سياسات الأمان (CORS) في حدوث أخطاء شبكة، لذلك عليك تمكين CORS على الخادم الخاص بك للسماح بالطلبات القادمة من المستعرض. من خلال إضافة رأس (header) إلى استجابة الخادم للسماح بجميع المصادر. مثال: const express = require('express'); const app = express(); app.get('/users', (req, res) => { // رمز لاسترداد بيانات المستخدمين const users = [{ name: 'User 1' }, { name: 'User 2' }]; res.setHeader('Access-Control-Allow-Origin', '*'); res.json(users); }); app.listen(5000, () => { console.log('Server is running on port 5000'); }); 2- قد يكون هناك خطأ آخر في الجزء الخادم من التطبيق، تأكد من أن الخادم يعمل بشكل صحيح وأنه لا يوجد أخطاء في رمز الخادم الخاص بك. 3- تصحيح الكود الخاص بك للتأكد من استخدام Axios بشكل صحيح، حاول استخدام كود مشابه للتالي: import axios from 'axios'; import { useEffect, useState } from 'react'; const MyComponent = () => { const [users, setUsers] = useState([]); useEffect(() => { const fetchData = async () => { try { const response = await axios.get('http://localhost:5000/users'); setUsers(response.data); } catch (error) { console.error('Error fetching data:', error); } }; fetchData(); }, []); return ( // تقوم بعرض البيانات هنا ); }; export default MyComponent; تأكد من تغيير "Axios" إلى "axios" بالحرف الصغير في استيرادها حيث أنك تستوردها بالحرف الكبير.
  11. بجانب حزمة accesscontrol يوجد حزم أخرى تؤدي نفس الغرض. 1- حزمة "express-session" أدوار: تمنح المستخدمين أو العملاء دورًا معينًا مثل "مستخدم عادي" أو "مشرف". أذونات: يمكن تعيين الأذونات لكل دور بناءً على احتياجات التطبيق، مثل الوصول إلى صفحات معينة أو القدرة على إجراء إجراءات معينة. 2- حزمة "passport" أدوار: تتيح للمستخدمين تسجيل الدخول باستخدام مقدمي الخدمة المعتمدين مثل Google أو Facebook أو Twitter. أذونات: تعيين الأذونات لكل مستخدم معتمد بناءً على معلوماته والتحقق من صحته. 3- حزمة "jsonwebtoken" أدوار: إنشاء رموز مصادقة (tokens) للمستخدمين الموثوق بهم للوصول إلى موارد محددة. أذونات: تضمين الأذونات داخل الرموز المصادقة لتحديد الصلاحيات والوصول المسموح به. 4- حزمة "acl" أدوار: إنشاء مجموعات أدوار مخصصة وتعيين أذونات محددة لكل دور. أذونات: تعيين الأذونات على المسارات والإجراءات والموارد الأخرى في التطبيق. 5- حزمة "connect-roles" أدوار: إنشاء أدوار مخصصة وتعيينها للمستخدمين لتحديد صلاحياتهم. أذونات: تعيين الأذونات لكل دور مثل الوصول إلى صفحات معينة أو القدرة على إجراء إجراءات معينة. وإليك مثال مفصل على كيفية استخدام حزمة "express-session" لإدارة أدوار المستخدمين: 1- تثبيت حزمة "express-session" باستخدام npm عبر الأمر التالي. npm install express-session 2- استيراد الحزمة وتكوينها. عليك إضافة التالي في ملف التهيئة الخاص بتطبيقك (مثل app.js أو server.js): const session = require('express-session'); app.use(session({ secret: 'secret-key', resave: false, saveUninitialized: true })); هنا، يتم استيراد حزمة "express-session" وتكوينها لاستخدامها في تطبيق Express، وتحديد المفتاح السري (secret-key) الذي يستخدم لتوقيع وتشفير معلومات الجلسة. 3- تعيين دور المستخدم. عند تسجيل الدخول للمستخدم، تستطيعي تعيين دوره بناءً على المعلومات الخاصة به. app.post('/login', (req, res) => { // تحقق من صحة بيانات المستخدم وتنفيذ العمليات اللازمة // عند التحقق من صحة بيانات المستخدم، قم بتعيين دور المستخدم req.session.role = 'مستخدم عادي'; res.send('تم تسجيل الدخول بنجاح'); }); 4- التحقق من دور المستخدم وإعدادات الأذونات. تستطيعي التحقق من دور المستخدم وتعيين الأذونات المناسبة في مسارات التطبيق المناسبة. app.get('/admin', (req, res) => { if (req.session.role === 'مشرف') { // يتمكن المشرف من الوصول إلى هذه الصفحة res.send('مرحبًا بك، مشرف'); } else { // الوصول مرفوض للمستخدمين العاديين res.status(403).send('عذرًا، ليس لديك الصلاحية للوصول إلى هذه الصفحة'); } });
  12. الخطأ في الصورة يتعلق بإصدار تضمين Android الذي يستخدمه التطبيق، والرسالة التحذيرية تعني أن الإصدار الذي تستخدمه قد تم إهماله (deprecated) ويجب ترقية التطبيق إلى الإصدار الجديد (v2 embedding) لتفادي حدوث أخطاء غير متوقعة أثناء التشغيل أو حدوث أخطاء في المستقبل أثناء عملية البناء. المشكلة الثانية تتعلق بأخطاء في نظام CMake الذي يستخدم في عملية البناء، وهناك خطأين ويشير الخطأ الأول إلى أن مجلد CMakeCache.txt الحالي الذي يقع في المسار "C:/food/build/windows/CMakeCache.txt" مختلف عن المجلد الذي تم إنشاءه فيه "d:/cL.i<s/food/build/windows"، وهذا قد يؤدي إلى إنشاء الملفات الثنائية في مكان غير صحيح. والخطأ الثاني يشير إلى أن المصدر "C:/food/windows/CMakeLists.txt" لا يتطابق مع المصدر "D:/oL.i<./food/windows/CMakeLists.txt" المستخدم لإنشاء ذاكرة التخزين المؤقت (cache)، ويوصى بإعادة تشغيل CMake مع مجلد المصدر الصحيح. ولحل المشكلة عليك بترقية التطبيق إلى الإصدار الجديد من تضمين Android (v2 embedding) وفقًا للوثائق المشار إليها في الرسالة، وهي: https://github.com/flutter/flutter/wiki/Upgrading-pre-1.12-Android-projects وتستطيع البحث على يوتيوب عن Fix app to be migrated to the android embedding v2 in flutter وستجد شرح يوضح خطوات الحل. بعد ذلك، يجب التأكد من تصحيح إعدادات نظام CMake والمجلدات المستخدمة للمصدر وذاكرة التخزين المؤقت للتأكد من تطابقها وتحديدها بشكل صحيح. أيضًا التأكد من تحديث Flutter وجميع المكتبات والأدوات ذات الصلة إلى أحدث الإصدارات المتاحة، حيث قد يساعد ذلك في حل بعض المشاكل المتعلقة بالتوافق والتحديثات الضرورية للمشروع.
  13. الأسئلة الإمتحانية لا يتم الإجابة عليها بشكل مباشر، ولكن يمكن إرشادك لطريقة الحل، وإذا قمت بتوفير الكود يمكن مساعدتك في حل المشكلة التي تواجهك. الخطوات بشكل عام: 1- استيراد المكتبات اللازمة للعمل مع إدخال وإخراج البيانات، مثل <stdio.h> و <stdlib.h>. 2- إنشاء دالة رئيسية (main function) تحتوي على التعليمات الأساسية لتنفيذ البرنامج. 3- طرح السؤال الأول باستخدام دالة printf() لطرح سؤال للمستخدم للتحقق من ما إذا كان هو طالب أم دكتور، كمثال: printf("Are you a student or a doctor?\n"); printf("Enter 1 for student, 2 for doctor: "); 4- استخدام دالة scanf() لاستلام إجابة المستخدم وتخزينها في متغير مناسب. 5- تحقق من الاختيار الأولمن خلال التحكم في التدفق (if-else) لفحص القيمة التي أدخلها المستخدم واتخاذ إجراءات مناسبة بناءً على ذلك. إذا كان المستخدم طالبًا، يتم الانتقال إلى خطوة 6. إذا كان الاختيار 2، يتم الانتقال إلى خطوة 9. 6- طرح سؤال للطلاب الحاليين عن طريق رسالة ترحيبية باستخدام دالة printf(). 7- طرح سؤال للمستخدم لإدخال اسم المستخدم وكلمة المرور واستخدام دالة scanf() لاستلام الإدخال، مثال: char username[20]; char password[20]; printf("Enter your username: "); scanf("%s", username); printf("Enter your password: "); scanf("%s", password); 8- التحقق من القيمة المدخلة لاسم المستخدم وكلمة المرور باستخدام التحكم في التدفق (if-else). إذا كانت القيمة صحيحة، يمكن طباعة رسالة ترحيبية، وإذا كانت القيمة خاطئة، يمكن طباعة رسالة خطأ. يمكن استخدام دالة strcmp() لمقارنة السلاسل. 9- التحقق من الاختيار الثاني فإذا كان الاختيار 1، يتم الانتقال إلى خطوة 10، وإذا كان الاختيار 2، يتم الانتقال إلى خطوة 11. 10- طلب بيانات الطالب الجديد بطرح سؤال للمستخدم لإدخال بياناته الشخصية، مثل الاسم والدرجة في الثانوية والجنس وتاريخ الميلاد. يتم استخدام دالة scanf() لاستلام الإدخال وتخزينها في المتغيرات المناسبة. 11- طلب نوع الشعبة للطالب الجديد بطرح سؤال للمستخدم لإدخال نوع الشعبة (علمي علوم أم رياضة) باستخدام دالة printf(). يتم استخدام دالة scanf() لاستلام الإدخال وتخزينها في المتغير المناسب. 12- التحقق من نوع الشعبة باستخدام التحكم في التدفق (if-else)، يتم التحقق من نوع الشعبة المدخلة. إذا كانت الشعبة علمي رياضة، يتم طباعة رسالة بالقبول. إذا كانت الشعبة علمي علوم، يتم طباعة رسالة بالرفض. يمكن استخدام دالة strcmp() لمقارنة السلاسل. مثال: if (strcmp(branch, "علمي علوم") == 0) { printf("Sorry, your application is rejected.\n"); } else if (strcmp(branch, "علمي رياضة") == 0) { printf("Congratulations, you are accepted!\n"); } else { printf("Invalid branch.\n"); } 13- حفظ بيانات الطالب الجديد في ملف باسم "student.txt". يمكن استخدام دالة fprintf() للكتابة في الملف. وتستطيع تفقد جميع الدروس الخاصة بلغة C في القسم الخاص بها بأكاديمية حسوب.
  14. بالطبع فهو موجه للواجهة الخلفية وبالتالي يجب التعامل مع قواعد البيانات، وستتعلم التالي: التعريف بقواعد البيانات إنشاء قاعدة البيانات باستخدام PhpMyAdmin 12 الاتصال مع قواعد البيانات عبر PDO الاستعلام SELECT هيكلة الشفرة الاستعلام INSERT الاستعلام UPDATE الاستعلام DELETE ومن خلال إطار عمل لارافيل ستتعلم التالي: تهجير قواعد البيانات التعامل مع البيانات بواسطة باني الاستعلامات Query Builder التعامل مع البيانات بواسطة Eloquent البيانات الاختبارية Factories and seeding العلاقات بين البيانات وأثناء العمل على المشاريع سيتم الشرح والتطبيق بشكل عملي.
  15. حاول استخدام الكود التالي: #include <iostream> using namespace std; void isPrime(int num) { if (num < 2) { cout << "Number is not Prime." << endl; return; } for (int i = 2; i < num; i++) { if (num % i == 0) { cout << "Number is not Prime." << endl; return; } } cout << "Number is Prime." << endl; } int main() { int n; cout << "Enter the Number to check Prime: "; cin >> n; isPrime(n); return 0; } وما تم تعديله هو: 1- الدالة isPrime كانت لا تقوم بالتحقق إذا كان الرقم 2 عددًا أوليًا بشكل صحيح، وتم إصلاح ذلك عن طريق إضافة شرط خاص للتحقق من القيمة 2 وإرجاع نتيجة مناسبة. 2- نقل جملة "Number is Prime." خارج الحلقة التكرارية، لعرض هذه الجملة عندما لا يتم العثور على عامل يقسم الرقم num بدون بقية (وهذا يعني أن الرقم هو عدد أولي)، فإذا تم وضع الجملة داخل الحلقة، فسيتم عرضها بعد أن يتم العثور على أي عامل آخر غير 2. والآن عند المحاكاة ستجد النتيجة كالتالي: Enter the Number to check Prime: 2 Number is Prime.
  16. الجدول الذي تحاول إنشاؤه بالفعل موجود في قاعدة البيانات، والسبب الأكثر شيوعًا لحدوث هذا الخطأ هو أنك تحاول إنشاء جدول يحمل نفس الاسم الذي تم استخدامه بالفعل لجدول آخر. هناك بعض الحلول التي يمكنك محاولتها لحل المشكلة: 1- تأكد من أن الجدول الذي تحاول إنشاؤه ليس بالفعل موجودًا في قاعدة البيانات، من خلال فحص ذلك بإجراء استعلام لعرض الجداول الموجودة في قاعدة البيانات، والتأكد من عدم وجود جدول يحمل نفس الاسم. 2- إذا كنت متأكدًا من أن الجدول الحالي غير مهم ويمكن حذفه، فتستطيع تغيير اسم الجدول الذي تحاول إنشاؤه، من خلال بتغيير اسم الجدول في الاستعلام الذي تستخدمه في عملية الإنشاء. 3- بدلاً من محاولة إنشاء الجدول من الصفر، هناك ميزة التحديث (migration) في نظام إدارة قاعدة البيانات الخاص بك، وتلك الميزة تسمح بإجراء تعديلات على البنية الحالية لقاعدة البيانات دون الحاجة إلى حذف الجداول الحالية، وتستطيع إنشاء تكوين جديد للجدول الذي تحاول إنشاؤه كجزء من ملف التحديث، وسيقوم النظام بتنفيذ التغييرات اللازمة للبنية. وفي حالة كنت تعمل على مشروع بإطار لارافيل فقم بتنفيذ الأمر التالي لإعادة إنشاء قاعدة البيانات وتشغيل عملية التهجير (migration) وإدخال بيانات افتراضية (seeding) في قواعد البيانات: php artisan migrate:fresh --seed
  17. دالة exit() في لغة البرمجة بايثون تُستخدم لإنهاء تنفيذ البرنامج فورًا، وعند استدعاءها، يتم إيقاف تنفيذ البرنامج وإغلاق جميع الموارد المستخدمة في العملية، وتستخدم exit() للخروج من برنامج بايثون في حالات معينة، مثل الخطأ الحاسوبي أو شرط محدد. def divide_numbers(a, b): if b == 0: print("لا يمكن قسم عدد على الصفر!") exit() result = a / b print("النتيجة هي:", result) # استدعاء الدالة divide_numbers(10, 2) divide_numbers(5, 0) في المثال لدينا دالة تقسيم الأعداد divide_numbers() التي تأخذ اثنين من المدخلات، وإذا كان المدخل الثاني (b) يساوي صفر، فنقوم بطباعة رسالة تعليمية ومن ثم نستدعي exit() لإنهاء تنفيذ البرنامج. هذا يحدث لأنه من غير الممكن قسمة عدد على الصفر. إذا تم تنفيذ هذا البرنامج، ستحصل على النتائج التالية: النتيجة هي: 5.0 لا يمكن قسم عدد على الصفر! ولاحظ exit() تنهي البرنامج بشكل فوري دون أن تقوم بأي معالجة إضافية أو تنظيف، وإذا كنت بحاجة إلى إجراء عمليات إضافية قبل الخروج، تستطيع استخدام دوال أخرى مثل sys.exit() التي توفر مزيدًا من المرونة في إدارة الخروج. هل توجد دالة exit() في لغات برمجة أخرى؟ في لغة C، تستخدم لإنهاء تنفيذ البرنامج وإرجاع قيمة الخروج. في لغة C++، تستخدم بنفس الطريقة كدالة C لإنهاء البرنامج وإرجاع قيمة الخروج. ومع ذلك، في C++ بالإمكان استخدام الكلمة المفتاحية return في دالة main() للخروج من البرنامج. في لغة Java، تستخدم دالة System.exit() لإنهاء تنفيذ البرنامج. يمكن تمرير قيمة للدالة System.exit() لتحديد حالة الخروج. في لغة JavaScript، تستخدم في بعض بيئات التنفيذ مثل Node.js لإنهاء تنفيذ البرنامج. في لغة Ruby، يمكن استخدام الأسلوب exit() أو exit!() لإنهاء تنفيذ البرنامج. في لغة PHP، تستخدم دالة exit() أو die() لإنهاء تنفيذ البرنامج. في لغة Swift، تستخدم دالة exit() لإنهاء تنفيذ البرنامج.
  18. بشكل مختصر سأذكر لك الفروقات: 1- الاستضافة وإدارة البنية التحتية في MongoDB، يتم تنصيب قاعدة البيانات على الخادم الخاص بك أو في بيئة سحابية تختارها، أما في MongoDB Atlas، فهي خدمة مستضافة في السحابة تديرها شركة MongoDB بنفسها. وتقوم MongoDB Atlas بإدارة جوانب مثل التكوين والتشغيل والتوفير التلقائي للنسخ الاحتياطي والأمان، وبالتالي يقدم تجربة أكثر بساطة للمطورين. 2- الإدارة والتشغيل مع MongoDB، يتوجب عليك القيام بإعداد وإدارة وصيانة الخوادم الخاصة بك، بما في ذلك الإصدارات والتحديثات والتوزيع وتكوين التحميل والتوازن. أما MongoDB Atlas، فتتحمل عنك تلك الجوانب الإدارية ويهتم بإدارة الخوادم والنسخ الاحتياطي والتوازن التلقائي للحمولة والتوافق مع الأمان. 3- التوفر والمقياسية MongoDB Atlas تقدم خيارات أكثر لتوفير التوفر والمقياسية. يوفر نموذج تجزئة أفقي يتيح لك زيادة سعة التخزين والأداء بشكل مرن وسلس، كما توفر خيارات التوفر العالي مثل الاستدامة المنطقية والمستوى الأعلى من النسخ الاحتياطي. 4- الأدوات والخدمات المساعدة MongoDB Atlas تقدم العديد من الأدوات والخدمات المساعدة للمطورين، بما في ذلك واجهة برمجة تطبيقات (API) وواجهة سطر الأوامر والتحليلات وأدوات الرصد والإعلام والنسخ الاحتياطي والاستعادة والتحليل الأمني. متى تستخدم كل منهم؟ استخدام MongoDB مناسب عندما تحتاج إلى مرونة كاملة في تكوين وإدارة قاعدة البيانات الخاصة بك وتفضل السيطرة الكاملة على البنية التحتية والتكامل مع البنية الخاصة بك. أما MongoDB Atlas عندما ترغب في تجنب تعقيدات الإعداد والتكوين والصيانة وترغب في تجربة بسيطة ومحسّنة، أيضًا عندما تحتاج إلى التوفر العالي والتوسع الأفقي بشكل مرن وعندما تهتم بالأمان والنسخ الاحتياطي والتحليلات المدمجة والتحكم في التكاليف. أي أن MongoDB مناسبة إذا كنت ترغب في السيطرة الكاملة والمرونة التامة، وMongoDB Atlas إذا كنت تفضل البساطة والتوفر العالي والتكامل المباشر مع الخدمات السحابية. وإذا كان مشروعك متوسط الحجم وليس لديك الحاجة الماسة للسيطرة الكاملة على البنية التحتية وتكوين متقدم، فإن استخدام MongoDB Atlas خيار جيد. ودائمًا خذها قاعدة، عند الحيرة بين أمرين في البرمجة قم بتجربة كل منهم واختر ما يناسبك، فالوقت الذي ستقضيه في البحث والقراءة الأفضل تقضيته في التجربة والتعلم، صحيح؟ ولكن لماذا تتعلم في الدورة استخدام MongoDB وليس MongoDB Atlas؟ في البداية الهدف الأساسي من الدورة هو فهم كيفية استخدام MongoDB كنظام قاعدة بيانات وتطوير المهارات الأساسية في البرمجة باستخدام MongoDB. حيث ستتعلم كيفية تثبيته وتكوينه واستخدامه في تطوير التطبيقات، مما يمنحك فهمًا أفضل لأساسيات MongoDB. ومن المفيد البدء بتعلم MongoDB الأساسي قبل الانتقال إلى MongoDB Atlas، فستحتاج إلى فهم أساسيات MongoDB قبل أن تتمكن من الاستفادة الكاملة من خدمات إدارة السحابة مثل MongoDB Atlas.
  19. أرجو منك قراءة النقاشات التالية وستجد بها إجابة على سؤالك:
  20. كان متاح ذلك بالفعل في شهر رمضان، لكن العرض إنتهى حاليًا، بإمكانك المتابعة حيث يتم توفير كوبونات وعروض كل فترة وقد تم الحدث عن ذلك بالتفصيل في النقاش التالي: وتستطيعي التحدث لمركز المساعدة والتأكد من توافر كوبونات أو عروض حاليًا أم لا.
  21. لا أنصحك بالاستمرار فيما تفعله، ضع شغفك جانبًا وتعلم المهارات المطلوبة في سوق العمل المحلي لديك أو مواقع العمل الحر، وتلك نصيحة دائمًا أرددها، حيث أن الكثير يقع في ذلك الفخ، وهو السعي وراء تعلم ما يريده أو اللغة والإطار الأشهر، وفي النهاية يصبح غير قادر على الحصول على وظيفة بسبب عدم إمتلاك المهارات المطلوبة. أنت في الطريق الصحيح، حيث أن مجال الويب ستتعلم منه الكثير وسيفتح لك مجالات أخرى بسبب سهولة تعلمه نسبيًا وبه مجال الواجهة الأمامية والواجهة الخلفية وتصميم واجهات المستخدم، وسيسهل عليك تعلم المجالات الأخرى مثل تطوير تطبيقات الهاتف. بإختصار اختر مسار تعليمي يؤهلك إلى إمتلاك المهارات اللازمة للحصول على وظيفة أو تأهيلك لتنفيذ مشاريع حقيقية للعمل على مواقع العمل الحر، بعد ذلك تعلم ما تشاء في أوقات فراغك. وإليك بعض النقاشات التي قد تفيدك: عندي حب للبرمجة ولكنني لا أستمر في تعلمها .. ماهو الحل ؟
  22. سأكون صريحًا معك، مجرد تعلم التقنيات التالية HTML, CSS, JS, JQuery سيمكنك من تقديم عروض تتطلب تلك المهارات، لكن ستجد منافسة كبيرة، لأن الغالبية تتعلم تلك المهارات في البداية وقليل ما يمتلك المهارة اللازمة فعلاً لتنفيذ مشروع من خلال إطار عمل مثل React وVue. وأيضًا ستضطر للعمل بمبلغ زهيد بسبب المنافسة الشديدة على مثل تلك المشاريع، فغالبية المبرمجين قد تعلموا المهارات المذكورة، وأيضًا البعض يمتلك مهارات أخرى مثل فوتوشوب. والجميع رزقه مكتوب ولا خلاف في ذلك، لكن عليك بالسعي والأخذ بالأسباب، أولاً تفقد ما هي المشاريع التي تطلب بكثرة وتعلم المهارات اللازمة لتنفيذ تلك المشاريع. وما تعلمته هي الأساسيات وعليك بتعلم إطار عمل كما أخبرتك، ولكن أغلب المشاريع على مستقل ستجد أنها تتطلب معرفة بلغة PHP وإطار لارافيل وورد بريس، لذلك أنت بحاجة إلى تعلم تلك المهارات من أجل تمتلك مهارات مطلوبة في سوق العمل وستجد منافسة أقل. ويجب أن تمتلك في معرض أعمالك مشاريع قمت بتنفيذها قبل التقديم على أي عرض، فبدون معرض أعمال جيد لن يتم قبولك، حيث يجب أن تثبت أنك محترف في طريقة حديثك وتعاملك وأيضًا من خلال معرض أعمالك وجودة المشاريع. وتستطيع رؤية المشاريع المطلوبة وتنفيذ مثلها ووضعها في معرض أعمالك، في حال لم تكن تمتلك معرض أعمال. وأغلب المشاريع على مواقع العمل الحر تتطلب منك أن تكون مبرمج Full stack وأنت بالفعل لديك مهارات الواجهة الأمامية، وينقصك فقط تعلم مهارات الواجهة الخلفية التي ذكرتها لك من خلال لغة PHP. ولا تستعجل بل تعلم الأساسيات وقم بتنفيذ مشريع حقيقية وضعها في معرض أعمالك لكن ليس مجرد مشاريع صغيرة بل مشروع حقيقي مثل متجر إلكتروني كامل أو لوحة تحكم أو موقع لشركة وهكذا. وإذا أردت العمل بالمهارات التي لديك فقط، فعليك هنا التخصص في تصميم الواجهات الأمامية من خلال تعلم فوتوشوب وكيفية تصميم الواجهات من خلال Figma.
  23. جميع الدورات في أكاديمية حسوب متاحة لك مدى الحياة، وأيضًا متاح لك دراسة القسم الأول من جميع الدورات الأخرى، فمثلاً لو اخترت دورة PHP تستطيع دراسة أساسيات HTML وCSS من دورة تطوير واجهات المستخدم، وجافاسكريبت من دورة تطوير التطبيقات باستخدام لغة JavaScript. وتستطيع التقدم للإختبار في أي وقت، وتلك هي شروط التقدم الإختبار وكيفية رفع المشاريع: وبإمكانك التقدم للإمتحان أكثر من مرة، لكن يفضل الاستعداد للإختبار جيدًا لإجتيازه من المرة الأولى.، وتستطيع التقدم مرة أخرى لحين النجاح في الإختبار. وأيضًا ستحصل على التحديثات التي تطرأ على الدورات كل 3 أو 6 أشهر في حال وجود تحديثات طرأت على اللغات، المكتبات والإطارات التي يتم استخدامها في الدورة.
  24. Jupyter هي بيئة عمل تفاعلية ومفتوحة المصدر تُستخدم لتطوير وتشغيل ومشاركة الأكواد والوثائق التفاعلية، وسبب التسمية بـJupyter هو نسبةً إلى ثلاثة لغات برمجة رئيسية هي Julia وPython وR. وتعتمد Jupyter على فكرة "Notebook"، حيث يمكن إنشاء مستند يجمع بين الشفرة البرمجية والنص القابل للتنسيق والرسومات التوضيحية والرسومات البيانية والجداول والصوت والفيديو، وبإمكان المستخدمين تنفيذ الشفرة التفاعلية وعرض نتائج التحليل بشكل فوري في نفس الوثيقة، مما يجعلها بيئة ممتازة للتجربة والاستكشاف والتوثيق. وتعمل على مبدأ الخادم (server-client)، من خلال تشغيل خادم Jupyter في الخلفية ويتم الوصول إليه عبر متصفح الويب، وتستطيع الكتابة وتنفيذ الكود في خلايا قابلة للتحرير داخل المستند ومشاهدة النتائج بشكل فوري. تدعم العديد من لغات البرمجة المختلفة بالإضافة إلى Julia وPython وR، مثل Java وScala وC++ وغيرها، ويمكنك تنزيل Jupyter كحزمة Python أو استخدام توزيعة مثل Anaconda التي تأتي مع Jupyter مثبتًا مسبقًا. وهي تُستخدم في مجموعة متنوعة من المجالات مثل علوم البيانات والتعلم الآلي والبحث العلمي وتحليل البيانات وتطوير البرمجيات وتعليم البرمجة، وأداة قوية ومرنة تمكنك من تجربة الأكواد وتصور البيانات وتوثيق النتائج بشكل سهل وفعال. هل أنت بحاجة إليها لتعلم بايثون؟ لا، حيث أن بيئة Jupyter هي أداة مفيدة وقوية لتشغيل وتنفيذ الشفرة التفاعلية وتوثيق العمل، ولكنها ليست ضرورية لتعلم Python. بدلاً من ذلك، تستطيع الإعتماد على محرر نصوص بسيط مثل Blocnotes في نظام التشغيل Windows أو TextEdit في نظام التشغيل macOS للكتابة وتشغيل برامج Python. يمكنك أيضًا استخدام بيئات تطوير متكاملة (IDEs) مثل PyCharm أو Visual Studio Code أو IDLE لتعلم Python بشكل مريح. وإذا كنت ترغب في استخدام بيئة تفاعلية لتعلم Python، فهناك بيئة تفاعلية عبر الويب مثل Repl.it أو Google Colab أو PythonAnywhere. تلك البيئات توفر محرر نصوص مع إمكانية تشغيل الشفرة وعرض النتائج مباشرة في المستعرض، مما يوفر تجربة تفاعلية شبيهة بـ Jupyter.
  25. دعك من المواصفات واجتهد بما تملك حاليًا، فكثيرين تعلموا البرمجة وكانت لديهم حواسيب بمواصفات منخفضة بل أن البعض كان لديه هارد ديسك به عطل وكان جهازه يتعطل من وقت لآخر أثناء عمله على مشروع. بالإمكان سرد المواصفات المناسبة، والتي تم ذكرها بالفعل، لكن هل سيغير ذلك من الأمر شيئًا؟ اجهتد بما تملك حاليًا وتعلم البرمجة، وكل ما ستحتاجه هو رامات بحجم 8 جيجا ومعالج مقبول فقط وأنت تمتلك ذلك بالفعل، وتستطيع توفير بعض المال ورفع كفاءة الحاسوب لديك بشراء هارد SSD.
×
×
  • أضف...