-
المساهمات
20325 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
494
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Mustafa Suleiman
-
لغة موجو Mojo هي لغة برمجة للأغراض العامة تم تطويرها بواسطة كريس لاتنر وModular Inc، وكريس لانتر هو مبتكر LLVM، وهي موجهة بشكل خاص لمجال تعلم الآلة، ولكن تستطيع استخدامها أيضًا لمجموعة واسعة من المهام الأخرى، مثل معالجة البيانات وتحويل البيانات. أما لغة بايثون هي اللغة الأكثر استخدامًا في مجال تحليل البيانات وتعلم الآلة، وهي معروفة بسهولة تعلمها واستخدامها، مما يجعلها خيارًا جيدًا للمبتدئين. بالإضافة إلى أنه يوجد لها العديد من الدورات والموارد التعليمية في كل مكان، بينما Mojo الموارد المتاحة لها قليلة لكون اللغة جديدة نسبيًا والموارد باللغة الإنجليزية فقط. والخلاصة هي: السرعة (Speed) لغة Mojo أسرع من Python. سهولة الاستخدام (Ease of Use) Python أسهل للتعلم ويمتلك منحنى تعلم أقل صعوبة. دعم المجتمع (Community Support) لغة Python لديها مجتمع أكبر وأوسع من دعم المجتمع بالمقارنة مع لغة Mojo. الوظيفية (Functionality) Python يحتوي على المزيد من المكتبات من طرف ثالث بالمقارنة مع لغة Mojo. التصميم (Designed for) لغة Mojo مصممة خصيصًا لتطبيقات تعلم الآلة والذكاء الاصطناعي، بينما تعتبر Python لغة عامة متعددة الاستخدامات. الأفضل لـ (Best for) لغة Mojo: تناسب المشاريع الصغيرة التي تتطلب أداءً عاليًا، والمطورين الذين يرغبون في تعلم لغة جديدة، والتطبيقات التي تعتمد على تحليل البيانات وتعلم الآلة والذكاء الاصطناعي. Python: تناسب المشاريع الكبيرة التي لا تحتاج إلى أداء عالي، وفريق العمل المعتاد على Python، والبرمجة متعددة الاستخدامات.
-
من الأسهل لك أن تعتمد على مكتبة جافاسكريبت لترجمة الموقع، وأشهرها مكتبة i18next وتلك المكتبة توفر دعمًا شاملاً للترجمة وتحكم في النصوص والتنقل بين اللغات، ويمكن استخدامها في مشروع HTML/CSS/JS لديك وتتضمن خيارات مثل تحميل الملفات من الملقم أو استخدام خدمات الترجمة الآلية. يوجد أيضًا مكتبة Polyglot.js وهي مكتبة JavaScript صغيرة وخفيفة الوزن للترجمة، في حال كنت تبحث عن حلاً بسيطًا وغير معقد، فستجد Polyglot.js خيارًا جيدًا، وتم تطوير تلك المكتبة بواسطة Airbnb. وبالطبع ستحتاج إلى استخدم bundler (محزم) من أجل تجميع ملفات المشروع مثل Vite أو Webpack وفي حال أردت تسهيل الأمر تستطيع استيراد مكتبة مثل i18next عن طريق CDN من الرابط التالي: <script src="https://cdnjs.cloudflare.com/ajax/libs/i18next/23.4.0/i18next.min.js" integrity="sha512-M4iruTNlnwfFL71Q+5fMOLe6gY3k6hq795GafcfVovObnhvz9h+DtaVdaP92Bjaai808vO8Iq5XPn9eW3VwVWw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> ثم قم بإنشاء ملفات الترجمة في مجلد اللغة العربية (ar.json): { "greeting": "مرحبًا بالعالم" } في مجلد اللغة الإنجليزية (en.json): { "greeting": "Hello, world" } HTML: <!DOCTYPE html> <html> <head> <title>مثال باستخدام i18next</title> </head> <body> <h1 id="greeting"></h1> <script src="https://cdnjs.cloudflare.com/ajax/libs/i18next/23.4.0/i18next.min.js" integrity="sha512-M4iruTNlnwfFL71Q+5fMOLe6gY3k6hq795GafcfVovObnhvz9h+DtaVdaP92Bjaai808vO8Iq5XPn9eW3VwVWw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script> i18next.init({ lng: 'en', // يمكن تغييرها إلى 'ar' للعربية resources: { en: { translation: { "greeting": "Hello, world" } }, ar: { translation: { "greeting": "مرحبًا بالعالم" } } } }, function(err, t) { // تحميل النصوص بعد التهيئة updateContent(); }); function updateContent() { // تحديث النصوص في الصفحة باستخدام i18next document.getElementById('greeting').innerText = i18next.t('greeting'); } </script> </body> </html> ونفس الأمر بالنسبة <script src="https://cdnjs.cloudflare.com/ajax/libs/polyglot.js/2.2.2/polyglot.min.js"></script> HTML: <!DOCTYPE html> <html> <head> <title>مثال باستخدام Polyglot.js</title> </head> <body> <h1 id="greeting"></h1> <script src="https://cdnjs.cloudflare.com/ajax/libs/polyglot.js/2.2.2/polyglot.min.js"></script> <script> const phrases = { en: { "greeting": "Hello, world" }, ar: { "greeting": "مرحبًا بالعالم" } }; // يمكن تغيير 'en' إلى 'ar' للعربية const currentLanguage = 'en'; const polyglot = new Polyglot({ phrases: phrases[currentLanguage] }); function updateContent() { // تحديث النصوص في الصفحة باستخدام Polyglot.js document.getElementById('greeting').innerText = polyglot.t('greeting'); } // استدعاء الدالة للتحديث الأولي updateContent(); </script> </body> </html>
-
تلك المشغلات أو المعاملات (== و =+) توجد في العديد من لغات البرمجة, وإليك قائمة ببعض اللغات التي تستخدم تلك المشغلات operators: معامل "==": Python Java C++ C# JavaScript Ruby PHP Swift Kotlin Rust وغيرها... معامل "=+": Python C++ C# JavaScript Ruby PHP Swift Kotlin Rust وغيرها... المشغل "==" يستخدم للمقارنة بين قيمتين للتحقق مما إذا كانت متساويتين أم لا، وفي حال كانت القيمتان متساويتين، فإن النتيجة تكون "صحيحة" أو "True"، وإلا فإن النتيجة تكون "خاطئة" أو "False"، ويستخدم في عمليات المقارنة في الشروط والتحكم في التدفق. مثال في لغة Python: x = 5 y = 10 if x == y: print("x is equal to y") else: print("x is not equal to y") والنتيجة هي "x is not equal to y" لأن قيمة x (5) ليست مساوية لقيمة y (10). ولكن انتبه في لغة مثل جافاسكريبت وPHP تحدث عملية تسمى Type coercion، أي تحويل القيمة إلى نوع آخر من أجل مقارنتها، أي عند مقارنة نص ورقم سيتم تحويل النص إلى رقم من أجل مقارنته كالتالي في جافاسكريبت: const x = 5; const y = "5"; console.log(x == y); سيتم طباعة True وهناك أمر هام آخر أيضًا يجب أن تنتبه إليه وهو أن هناك مشغل مشابه بالشكل التالي "===" موجود في بعض لغات البرمجة ويختلف عن مشغل "==" الذي ذكرته للمقارنة بين القيم. حيث أن "===" هو مشغل المقارنة الصارمة (Strict Equality Operator)، ويُستخدم للتحقق من تطابق القيمتين بالإضافة إلى نوع القيمتين، أي في حال كانت القيمتين متطابقتين من حيث القيمة والنوع، يعطي النتيجة "صحيحة" أو "True"، وإلا فإن النتيجة تكون "خاطئة" أو "False". مثلاً في JavaScript، المشغل "===" يُستخدم للمقارنة الصارمة. const x = 5; const y = "5"; console.log(x === y); // سيعطي "false" لأن x و y يحتويان على نفس القيمة (5) ولكن ليس نفس النوع. في PHP، المشغل "===" يستخدم أيضًا للمقارنة الصارمة. $x = 10; $y = "10"; var_dump($x === $y); // سيعطي "bool(false)" لأن $x و $y يحتويان على نفس القيمة (10) ولكن ليس نفس النوع. وفي لغة Python، لا يوجد مشغل "===" لأنها تختلف عن لغات أخرى مثل JavaScript و PHP التي تستخدم "===" للمقارنة الصارمة، لأن في Python، يستخدم مشغل "==" للمقارنة بين القيم فقط دون الاهتمام بنوع القيم. كالتالي: x = 5 y = "5" print(x == y) سيتم طباعة False أي لا يحدث Type coercion. أما بخصوص المشغل "=+" يستخدم لعملية إضافة قيمة إلى متغير موجود بدلاً من إعادة تعيينه بقيمة جديدة، أي أنك ترغب في إضافة قيمة إلى القيمة الحالية للمتغير. مثال في لغة C++: int x = 5; x += 3; // تعني x = x + 3 // الآن x ستكون تساوي 8 وهناك مشغلات أخرى مثل =! يستخدم للتحقق مما إذا كانت قيمتين غير متساويتين.
-
عليك بتحميل برنامج WinRAR فهو برنامج أساسي لضغط وفك ضغط الملفات والمجلدات، وستجدي هنا رابط التحميل للنسخة العربية لإصدار ويندوز 32 و 64: 64 لغة عربية https://www.win-rar.com/fileadmin/winrar-versions/winrar-x64-622ar.exe 32 لغة عربية https://www.win-rar.com/fileadmin/winrar-versions/winrar-x32-622ar.exe وإليك روابط اللغة الإنجليزية: 64 لغة إنجليزية: https://www.win-rar.com/fileadmin/winrar-versions/winrar/winrar-x64-622.exe 32 لغة إنجليزية: https://www.win-rar.com/fileadmin/winrar-versions/winrar/winrar-x32-622.exe وبعد تثبيته تستطيعي ضغط المجلد كما أشار إليك عمر. وبالنسبة للتصميم الذي تريدينه، فمن الأفضل استخدام Flexbox من أجل تنفيذه، كالتالي: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>تنسيق الصور والنص بشكل مربع وبعرض 100%</title> <style> body { margin: 0; padding: 0; font-family: Arial, sans-serif; } .container { display: flex; flex-wrap: wrap; justify-content: flex-start; gap: 10px; align-items: flex-start; padding: 20px; } .box { display: flex; align-items: center; width: 100vw; border: 2px solid #000; border-radius: 10px; overflow: hidden; } .box img { max-width: 200px; } .box p { padding: 10px; } </style> </head> <body> <div class="container"> <div class="box"> <img src="https://placehold.co/600x400/orange/white" alt="صورة 1"> <p>نص جهة اليمين 1</p> </div> <div class="box"> <img src="https://placehold.co/600x400/orange/white" alt="صورة 2"> <p>نص جهة اليمين 2</p> </div> <div class="box"> <img src="https://placehold.co/600x400/orange/white" alt="صورة 3"> <p>نص جهة اليمين 3</p> </div> <!-- يمكنك إضافة المزيد من الأزواج الصور والنصوص هنا --> </div> </body> </html> ولاحظي أنني استخدمت خاصية flex-wrap: wrap من أجل عرض الحاويات أسفل بعضها، فبدونه ستظهر بجانب بعضها وليس أسفل بعضها.
- 7 اجابة
-
- 1
-
-
عليك باستخدام مكتبة للتعامل مع الفيديو وتغيير جودته، مثل مكتبة "FFmpegMediaMetadataRetriever". وأولاً قم بإضافة مستودع "FFmpegMediaMetadataRetriever" إلى ملف gradle الخاص بتطبيقك: repositories { maven { url "https://github.com/wseemann/FFmpegMediaMetadataRetriever" } } ثم أضف تبعية المكتبة إلى نفس الملف gradle: dependencies { implementation 'com.github.wseemann:FFmpegMediaMetadataRetriever:1.0.19' } والآن، استخدم المكتبة لتحميل الفيديو وتغيير جودته إلى 360 بكسل وحفظه بشكل مستقل، ومن ثم استعراضه. import android.os.Bundle; import android.os.Environment; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import wseemann.media.FFmpegMediaMetadataRetriever; import java.io.File; public class VideoProcessingActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_video_processing); String originalVideoPath = "path/to/original_video.mp4"; String newVideoPath = Environment.getExternalStorageDirectory().getPath() + "/new_video.mp4"; int targetWidth = 360; // العرض المستهدف بالبكسل FFmpegMediaMetadataRetriever retriever = new FFmpegMediaMetadataRetriever(); try { retriever.setDataSource(originalVideoPath); String videoWidthStr = retriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH); String videoHeightStr = retriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT); int videoWidth = Integer.parseInt(videoWidthStr); int videoHeight = Integer.parseInt(videoHeightStr); if (videoWidth > targetWidth) { // حساب النسبة المئوية لتغيير الحجم float scaleRatio = (float) targetWidth / (float) videoWidth; int newHeight = Math.round(videoHeight * scaleRatio); // تغيير جودة الفيديو وحفظه retriever.release(); FFmpegMediaMetadataRetriever newRetriever = new FFmpegMediaMetadataRetriever(); newRetriever.setDataSource(originalVideoPath); File newFile = new File(newVideoPath); newRetriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH); newRetriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT); newRetriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_ALBUM); newRetriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_ARTIST); newRetriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_GENRE); newRetriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_TITLE); newRetriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_YEAR); newRetriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_DURATION); newRetriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_MIMETYPE); newRetriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_ALBUM_ARTIST); newRetriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_DISC_NUMBER); newRetriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_NUM_TRACKS); newRetriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_WRITER); newRetriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_COMPILATION); newRetriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_HAS_AUDIO); newRetriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_HAS_VIDEO); newRetriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_HAS_IMAGE); newRetriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_HAS_BINARY); // إعداد نسبة تغيير الحجم newRetriever.setOption("vf", "scale=" + targetWidth + ":" + newHeight); newRetriever.setOption("override_ffmpeg_path", getApplicationInfo().dataDir + "/lib"); // حفظ الفيديو بالجودة المغيرة newRetriever.save(newFile.getAbsolutePath()); newRetriever.release(); // الآن يمكنك تشغيل الفيديو الجديد // يمكنك استخدام مكتبة مشغل الفيديو المفضل لديك // مثال: // VideoView videoView = findViewById(R.id.videoView); // videoView.setVideoPath(newVideoPath); // videoView.start(); } else { Toast.makeText(this, "جودة الفيديو أصغر من 360 بكسل", Toast.LENGTH_SHORT).show(); } } catch (NumberFormatException e) { e.printStackTrace(); Toast.makeText(this, "خطأ في تحميل الفيديو", Toast.LENGTH_SHORT).show(); } catch (Exception e) { e.printStackTrace(); Toast.makeText(this, "حدث خطأ ما", Toast.LENGTH_SHORT).show(); } finally { retriever.release(); } } } وبالطبع التعديلات الأخيرة تم تنفيذها على فرض أن لديك الإذن المناسب للوصول إلى ذاكرة التخزين الخارجية (READ_EXTERNAL_STORAGE و WRITE_EXTERNAL_STORAGE)، ولا تنس تجهيز الإذن في ملف AndroidManifest.xml أيضًا.
- 5 اجابة
-
- 1
-
-
في البداية، الكود يقوم بإنشاء مثيل من MediaMetadataRetriever للحصول على الدقة (العرض) للفيديو. ولكنه لا يقوم بتحرير مصدر البيانات (data source) في المثيل الأول، بينما يقوم بذلك في المثيل الثاني. وذلك ليس منطقيًا وقد يؤدي إلى خطأ في تشغيل الفيديو. حاول إصلاح الجزء الأول من الكود ليصبح كالتالي: public void convert() throws IOException { String videoPath = "/sdcard/input.mp4"; // Get the video resolution MediaMetadataRetriever retriever = new MediaMetadataRetriever(); retriever.setDataSource(videoPath); // قم بتحديد مصدر البيانات للمثيل int videoResolution = Integer.parseInt(retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH)); retriever.release(); // قم بإطلاق المثيل بعد الانتهاء من الاستخدام // بقية الكود كما هو... } والجزء الذي يعيد حجم الصورة المصغرة (thumbnail) للفيديو ليس دقيقًا، ففي حالة إعادة تحجيم الصورة، من الأفضل استخدام طرق معينة للحفاظ على نسبة الأبعاد الصحيحة، وهناك أيضًا بعض الأخطاء في تسجيل الفيديو والصوت في الملتقط (muxer). ولحل تلك المشكلة وتحسين عملية تسجيل الفيديو والصوت، من الأفضل استخدام مكتبة مثل FFmpeg لتنفيذ تلك الوظائف بطريقة أكثر دقة وفاعلية، وتستطيع تضمين مكتبة FFmpeg في تطبيق Android الخاص بك واستخدامها لإجراء تحويلات وإعادة تحجيم الفيديو وتسجيله بأكثر دقة. ولاحظ أن استخدام FFmpeg يتطلب بعض الوقت والمجهود للتعامل مع الـ API الخاص بها، وفي حال كنت ترغب في الاستمرار باستخدام الأسلوب الحالي، فمن الأفضل التحقق من مثال كامل لتحويل وتغيير حجم الفيديو باستخدام MediaCodec وMediaMuxer وSurface وغيرها من الأدوات المتوفرة في Android SDK. وعامًة للحفاظ على نسبة الأبعاد الصحيحة عند إعادة تحجيم الصورة المصغرة، استخدم دالة Bitmap.createScaledBitmap() بطريقة تحسب الارتفاع الجديد بناءًا على النسبة بين العرض الجديد والعرض الأصلي: // Calculate the new dimensions while maintaining the aspect ratio int newWidth = 360; int newHeight = (int) (videoResolution * 1.0 / bmp.getWidth() * newWidth); // Resize the bitmap Bitmap resizedBmp = Bitmap.createScaledBitmap(bmp, newWidth, newHeight, true); ولتسجيل الفيديو والصوت بشكل صحيح، استخدم MediaCodec لتشفير الإطارات الفعلية من الفيديو والصوت ومن ثم تسجيلها باستخدام MediaMuxer. وتحتاج إلى استخدام MediaCodec للحصول على الإطارات (frames) من الفيديو وترميزها إلى تنسيق مثل H.264، ثم استخدام MediaMuxer لدمج البيانات المشفرة مع تنسيق صوتي مناسب (مثل AAC) لإنشاء ملف فيديو نهائي. وكما ذكرت هناك مكتبات جاهزة تساعدك في تحويل وتعديل الفيديو بشكل أسهل، مثل FFmpeg وغيرها.
-
ستحتاجين إلى التوجه إلى الرابط التالي: https://accounts.hsoub.com/settings ثم إدخال رقم الهاتف في خانة رقم الجوال* مع إختيار الكود الخاص بالدولة، ولاحظي أنه في حالة مصر مثلاً الكود هو +20 وبالتالي نكتب رقم الهاتف بدون 0 في البداية. ثم اضغطي على حفظ التعديلات وسيظهر لك خيار تفعيل بجانب الرقم ومن المفترض أن يتم إرسال رقم تفعيل إلى هاتفك، وفي حال لم يصل حاول إضافة رقم هاتف لشبكة أخرى، وإليك شرح لطريقة التفعيل من قناة حسوب: وفي حال لم تتمكني من التفعيل تستطيعي مراسلة مركز المساعدة الخاص بموقع مستقل.
-
المشاكل المعروفة هي كالآتي: فشل المعاملة لأسباب مختلفة ، مثل عدم وجود رصيد كافٍ في بطاقة الائتمان أو انتهاء صلاحية البطاقة أو إدخال بيانات غير صحيحة. استخدام بوابات الدفع لعمليات الاحتيال ، مثل سرقة بطاقات الائتمان أو استخدام بيانات بطاقة الائتمان المسروقة لإجراء عمليات شراء غير مصرح بها. اختراق بوابات الدفع ، مما يعرض بيانات بطاقات الائتمان للخطر. وعند إتمام عملية الدفع بنجاح، ستحصل عادة على استجابة (response) من بوابة الدفع، تتضمن: حالة الدفع: مثل "ناجح" أو "فشل". رقم المعاملة: وهو رقم مرجعي فريد للمعاملة. الرد من البنك: رسالة من بوابة الدفع أو البنك تحتوي على تفاصيل الدفع الناجح أو الفشل. رمز الاستجابة: يوحد رموز للردود تشير إلى نتيجة الدفع (مثل رمز 200 للنجاح). بعد الحصول على تلك البيانات، تستطيع تسجيل بعض المعلومات الأساسية في قاعدة البيانات للتفريق بين الدفعات الناجحة والفاشلة وتتبع حالة الطلبات، ومنها: رقم المعاملة. حالة الدفع (مثل "ناجح" أو "فشل"). المبلغ المدفوع. تاريخ ووقت الدفع. أخر 4 أرقام من البطاقة أو الحساب البنكي. معلومات المستخدم (اختياري، يعتمد على احتياجات موقعك). وإليك مثال للاستجابة من خلال بوابة دفع stripe: { "id": "ch_1234567890", "object": "charge", "created": 1582950736, "livemode": false, "currency": "usd", "amount": 1000, "description": "A test charge", "source": { "id": "src_1234567890", "object": "source", "type": "card", "last4": "1234", "exp_month": 12, "exp_year": 2023, "name": "John Doe", "address_line1": "123 Main Street", "address_line2": null, "city": "Anytown", "state": "CA", "country": "US", "zip": "91234", "cvc": "123" }, "destination": { "id": "cus_1234567890", "object": "customer" }, "status": "succeeded", "failure_message": null, "failure_code": null, "charge_back_id": null, "refunds": [ { "id": "re_1234567890", "object": "refund", "created": 1582950736, "amount": 1000, "currency": "usd", "reason": "customer_requested", "balance_transaction": "bal_1234567890" } ], "balance_transaction": { "id": "bal_1234567890", "object": "balance_transaction", "created": 1582950736, "amount": 1000, "currency": "usd", "description": "Charge succeeded", "type": "charge", "balance_delta": 1000, "available_on": 1582950736, "net_received": 1000, "fee": 0, "transfer_group": null }, "metadata": { "foo": "bar" } } وبالطبع تستطيع إجراء إختبارات على بوابة الدفع للتأكد من عملها بشكل سليم قبل نشر الموقع. وأيضًا لمعلوماتك علميات الاسترجاع للأموال يتم معالجتها من قبل بوابة الدفع.
- 2 اجابة
-
- 1
-
-
الذكاء الاصطناعي (AI) هو مجال من مجالات علوم الكمبيوتر يركز على إنشاء آلات ذكية، أي آلات قادرة على التفكير والتعلم والتصرف بشكل مستقل، وأحد أقوى أدوات الذكاء الاصطناعي هو التعلم الآلي (ML)، وهو فرع من الذكاء الاصطناعي يركز على تطوير الخوارزميات التي يمكنها تعلم من البيانات دون أن يتم برمجتها بشكل صريح. أحد أكثر أنواع التعلم الآلي شيوعًا هو التعلم الخاضع للإشراف، والذي يتضمن تدريب الخوارزمية على مجموعة بيانات من المدخلات والمخرجات، أي تدريب الخوارزمية على مجموعة بيانات من الصور والعلامات المقابلة لها، مثل "قطة" أو "كلب". بعد التدريب، يمكن استخدام الخوارزمية لتحديد الأنواع الموجودة في الصور الجديدة. وهناك نوع آخر من التعلم الآلي يسمى التعلم غير الخاضع للإشراف، والذي لا يتضمن مجموعة بيانات من العلامات. بدلاً من ذلك، يتم تدريب الخوارزمية على مجموعة بيانات من المدخلات فقط، مثل تدريب الخوارزمية على مجموعة بيانات من الصور، دون أن يتم تزويدها بالعلامات، وبعد التدريب، يمكن استخدام الخوارزمية لاكتشاف الأنماط في الصور، مثل مجموعات الألوان أو الأشكال. والذكاء الاصطناعي ليس مجرد كود. فقط بل هو مجال معقد يتضمن مجالات علمية وهندسية وفلسفية مختلفة، وكما أشرت التعلم الآلي هو أحد أقوى الأدوات التي تم تطويرها في مجال الذكاء الاصطناعي، وهو أداة لها القدرة على إحداث ثورة في العديد من الصناعات. وبخصوص الرياضيات ستجد هنا شرح مفصل لتلك النقطة:
-
الذكاء الاصطناعي (AI) هو فرع من علوم الكمبيوتر يتعامل مع إنشاء الذكاء الاصطناعي، وهو قدرة الآلات على التعلم والتفكير والتصرف بشكل مستقل أي يتعامل مع إنشاء نماذج رياضية يمكنها التعلم من البيانات دون أن يتم برمجة ذلك بشكل صريح، أما أمن المعلومات هو مجال يتعامل مع حماية المعلومات من الوصول غير المصرح به أو الاستخدام أو التعديل أو الإفشاء أو التدمير. وبالطبع نستطيع استخدام الذكاء الاصطناعي لأغراض أمن المعلومات في العديد من المجالات، بما في ذلك: تحليل البيانات وتحديد الأنماط التي قد تشير إلى هجوم إلكتروني. تقييم المخاطر الأمنية وتحديد أفضل الطرق لتقليلها. تحسين البنية التحتية الأمنية من خلال أتمتة المهام وتحسين الرؤية. وبالتالي يؤدي تعلم مجال تعلم الآلة إلى تطوير مهارات الهاكرز الأخلاقيين، وفهم أفضل للتهديدات الأمنية وكيفية مواجهتها، كما يمكنهم استخدام تعلم الآلة لإنشاء أدوات وتقنيات جديدة يمكن استخدامها لأمن المعلومات. وبشكل مفصل إليك ما يمكن فعله، وأول الأمر تحليل نشاط المستخدمين: الهاكرز الأخلاقيين يقومون بإرسال رسائل احتيالية عبر البريد الإلكتروني لجميع الموظفين بهدف اختبار وعيهم وانتباههم، وتستخدم رسائل الاحتيال تلك بشكل شائع من قبل الهاكرز للحصول على معلومات حساسة أو الوصول غير المصرح به إلى نظام ما، وتتضمن رسالة الاحتيال وعودًا أو تهديدات لإغراء المستخدمين للنقر على رابط أو زيارة صفحة ويب، بعد ذلك، يتم تثبيت وتنفيذ برامج ضارة أو طلب معلومات سرية. ثم تحليل استجابات المستخدمين بعد حملة التوعية يتم دراستها، وتعديل السياسات والإجراءات حسب الحاجة، ويمكن للهاكرز الأخلاقيين تحديد خصائص المستخدمين الذين يحتمل أن يصبحوا ضحايا للتصيّد الاحتيالي، وبالتالي يمثلون مخاطر عالية للمنظمة باستخدام تعلم الآلة، على وجه الخصوص الأشجار القرارية. تحديد أنماط الهجمات الجديدة: تحتوي جميع أدوات إدارة شبكات الحواسيب حاليًا على آلية تسجيل، وتُعتبر ملفات السجل مصادر بيانات غنية تسجل وتعرض أنشطة المستخدمين ومحاولات الوصول إلى الشبكة ومشاكل النظام والتطبيقات وما إلى ذلك. عند حدوث هجوم ناجح واكتشافه في وقت لاحق، يتم تسجيل خصائصه، مثل المصدر والوقت ونوع الأجهزة وما إلى ذلك، في ملفات السجل، وبإمكان للهاكرز الأخلاقيين تحديد ومعالجة الثغرات الناجمة عن تلك الهجمات باستخدام تحليل تلك الهجمات باستخدام أشجار القرار، وهي نوع من تعلم الآلة. زيادة دقة الدفاع السيبراني: من المعروف أن أي دفاع سيبراني ليس مؤثرًا بشكل كامل، وسيكون هناك دائمًا حالات تصنف فيها الوصول الشرعي على أنه اختراق ويتم حظره؛ ما يعرف بالإيجابيات الكاذبة، وسيتم السماح للتسللات الحقيقية، أو ما يُعرف بالسلبيات الكاذبة. تتراكم تلك الحوادث مع مرور الوقت، ويوجد مكتبة منها في المنظمة، وبالتالي يُمكن بناء وتدريب نموذج Ai للتسلل باستخدام شبكات الأعصاب، وهي نوع من تعلم الآلةk بعد ذلك، ستحدد شبكة الأعصاب تلقائيًا ما إذا كان الوصول إلى الشبكة شرعيًا أم لا، مما يعزز الدقة العامة لأنشطة الهاكرز الأخلاقيين.
-
عليك بالبحث أولاً واستخدم الكلمات الرئيسية المناسبة مثل "دورات تقوية للطب البشري"، "تحضير للدراسات الصحية"، "كورسات هندسة مجانية"، إلخ، ونفس الأمر باللغة الإنجليزية لتفقد المتاح على جوجل ويوتيوب. ولديك أيضًا Coursera وedX وهما يقدمان العديد من الدورات التعليمية في مجموعة متنوعة من التخصصات، بما في ذلك التخصصات الصحية والهندسية. يمكنك البحث عن المواضيع التي تهمك والاشتراك في الدورات المتوفرة من جامعات مرموقة حول العالم. أيضًا Udemy هي منصة تعليمية تقدم دورات عبر الإنترنت في مجموعة واسعة من الموضوعات، بما في ذلك العلوم والهندسة والطب. بالإضافة إلى Skillshare وهي منصة تعليمية تقدم دورات عبر الإنترنت في مجموعة واسعة من الموضوعات.
- 3 اجابة
-
- 1
-
-
بالطبع فهى تعتمد على الـ API's المتوفرة في المتصفح، فمثلا مكتبة react-media-recorder تعتمد على MediaRecorder API.
- 3 اجابة
-
- 1
-
-
من الأفضل استخدام إطار الإختبار PHPUnit المتاح للغة PHP، وستجد شرح هنا في الموقع الرسمي بناءًا على إصدار PHP الذي تستخدمه: https://phpunit.de/getting-started-with-phpunit.html مثلاً لإصدار PHP 8.1 واعلى سنقوم بتثبيت الإطار من خلال الأمر التالي: composer require --dev phpunit/phpunit ^10 ثم قم بإنشاء مجلد للاختبارات في مجلد مشروعك، وتسميته tests مثلاً، ثم داخل مجلد الاختبارات، أنشئ ملفًا جديدًا للاختبار، ويجب أن يكون اسم الملف ينتهي بـ Test.php، وليكن اسم الملف مثلاً ProductUploaderTest.php. ثم قم بتحديد الاعتمادات اللازمة في ملف الاختبار، بإضافة استيراد PHPUnit\Framework\TestCase واستيراد الكلاس الذي ترغب في اختباره، وفي حالتك، نحن نريد اختبار ProductUploader لذا يجب أن يكون الملف على النحو التالي: <?php // tests/ProductUploaderTest.php use PHPUnit\Framework\TestCase; // استيراد الكلاس الذي نرغب في اختباره include('ProductUploader.php'); class ProductUploaderTest extends TestCase { // هنا يمكنك إنشاء الاختبارات الخاصة بك } وعليك بإضافة دوال الاختبارات التي ترغب في إنشائها داخل الكلاس ProductUploaderTest، ويجب أن يبدأ اسم كل دالة اختبار بكلمة test، وليكن مثلاً إنشاء اختبار بسيط لدالة uploadProduct: <?php // tests/ProductUploaderTest.php use PHPUnit\Framework\TestCase; // استيراد الكلاس الذي نرغب في اختباره include('ProductUploader.php'); class ProductUploaderTest extends TestCase { // اختبار دالة uploadProduct public function testUploadProduct() { // الاستعداد للاختبار $dbMock = $this->createMock(mysqli::class); $dbMock->method('query')->willReturn(true); $uploader = new ProductUploader($dbMock); // القيام بالاختبار $result = $uploader->uploadProduct('Product Name', 'Product Description', 50, [ 'tmp_name' => '/path/to/temp/file', 'name' => 'product.jpg' ]); // التحقق من النتائج المتوقعة $this->assertTrue($result); } } وفي النهاية تشغيل الاختبارات باستخدام PHPUnit من سطر الأوامر، وعليك بالتأكد من وجود في مسار مجلد المشروع الرئيسي: ./vendor/bin/phpunit tests ولاحظ أن مجلد الإختبارات باسم tests. وستجد هنا توضيح مفصل: وأيضًا قد يفيدك على الإطلاع على Codeception بدلاً من PHPUnit:
-
الأمر ممكن ولا مشكلة في ذلك، لكن في حال كنت مبتدأ في البرمجة فستحتاج إلى فترة 3 أشهر على الأقل، ودورة بايثون مكونة من 67 ساعة وبشكل منطقي ستحتاج إلى المزيد من الوقت للاستيعاب والمراجعة والبحث والتطبيق، أي على الأقل من 4 إلى 5 أضعاف وقت الدورة، لتصبح 67 *5 تساوي 335 ساعة وفي حال قمت بالدراسة بشكل يومي لدة 6 ساعات مثلاً فستحتاج إلى 55 يوم أي شهرين تقريبًا. وتلك فترة تقريبية، والأمر يعتمد على مدى استيعابك وخبراتك السابقة ومقدار الوقت المخصص يوميًا للدراسة والتطبيق، ولا تنسى التطبيق فهو أهم نقطة، ولا تكتفي بالمشاهدة السلبية والكتابة وراء المدرب فقط، بل عليك بتنفيذ ما تعلمته بمفردك مرة أخرى حيث ستقع في أخطاء وستفهم الأمر بشكل مختلف لكون تركيزك منصب على ما تفعله ،وأيضًا حاول التغيير في الكود لتفهم طبيعة عمله ولماذا استخدمنا ذلك وليس ذلك وهكذا.
- 3 اجابة
-
- 1
-
-
لإتخاذ قرارك بشكل سليم، هل تلك هي الخطوة الأولى في عالم البرمجة؟ أي لم تقم بكتابة أي كود من قبل ولا تعرف ما هي قاعدة البيانات ولا تعرف معنى API؟ هل تعرف معنى حلقة تكرار؟ أو جملة شرطية؟ هل قررت ما هو المجال الذي تنوي التخصص به في البرمجة، سواء ويب كمطور واجهاة أمامية أو Full-stack أو تطوير تطبيقات الهاتف أو مطور واجهة خلفية فقط باستخدام node.js أو PHP أو بايثون؟ إذا كانت الإجابة هي لا، فهنا أنت بحاجة إلى دراسة الأساسية والتعرف على مجال البرمجة بشكل عام أي معرفة عامة من الأعلى لترى الأمر بشكل واضح، ثم إختيار مجال للتخصص به بناءًا على وعي ودراية. وفي دورة علوم الحاسب ستتعلم التالي: أساسيات الحاسوب وعلومه والتفكير المنطقي وما هي الخوارزميات وكيف تفيد في البرمجة تطبيقات عملية على أساسيات التفكير المنطقي باستخدام بيئة سكراتش Scratch التفاعلية أساسيات لغة البرمجة JavaScript وتطبيق المفاهيم التي تم شرحها باستخدامها، والتوسع في شرح التطبيقات العملية للغات البرمجة، أيضًا أساسيا بايثون. أساسيات أنظمة التشغيل المختلفة وكيفية تثبيت البرمجيات اللازمة للبرمجة عليها أساسيات سطر الأوامر في نظام لينكس، وشرح الأسس التي بني عليها النظام مع تطبيقها عمليًا أنظمة قواعد البيانات المختلفة، مع شرح تفصيلي للغة SQL للتعامل معها مبادئ أساسية في أنظمة قواعد البيانات NoSQL المفاهيم الأساسية التي تبنى فيها صفحات الويب مفاهيم أساسية في الشبكات والخوادم، وكيف يتم استقبال الطلبيات إلى الخادم والرد عليها مبادئ الحماية والأمان في الويب وحاليًا يوجد عرض العطلة الصيفية، الذي يوفر لك الحصول على دورتين بسعر دورة واحدة. وبخصوص الدورة الأخرى أنصحك بالإطلاع على التالي:
-
تسجيل شاشة الهاتف أثناء الاختبار هناك مكتبة تُدعى react-screen-recorder تستطيع الإعتماد عليها لتسجيل الشاشة أثناء الاختبار، وتلك المكتبة تعمل مع React وتُتيح للمستخدمين تسجيل شاشة هاتفهم أثناء استخدام التطبيق، ولتثبيتها استخدم الأمر التالي: npm install react-screen-recorder وستجد طريقة الاستخدام في المستودع الرسمي للمكتبة: https://github.com/DeltaCircuit/react-media-recorder وإليك مثال: import React, { useState } from 'react'; import { ScreenRecorder } from 'react-screen-recorder'; const ScreenRecorderComponent = () => { const [isRecording, setIsRecording] = useState(false); const handleRecording = (blob) => { // يمكنك إرسال الـ blob إلى المنصة الخاصة بك للمراجعة هنا console.log(blob); }; return ( <div> <h1>تسجيل شاشة الهاتف</h1> <ScreenRecorder onRecordingComplete={handleRecording} isRecording={isRecording}> {({ startRecording, stopRecording }) => ( <> {isRecording ? ( <button onClick={stopRecording}>إيقاف التسجيل</button> ) : ( <button onClick={startRecording}>بدء التسجيل</button> )} </> )} </ScreenRecorder> </div> ); }; export default ScreenRecorderComponent; ضع المكون في التطبيق وسيظهر زرًا يمكن للمستخدم النقر عليه لبدء تسجيل شاشة هاتفه، وبمجرد أن ينتهي المستخدم من تسجيل الشاشة، ستُستدعى وظيفة handleRecording وستُمرر لها blob الخاص بتسجيل الفيديو، هنا تستطيع إرسال الـ blob للواجهة الخلفية للمراجعة. تسجيل فيديو من الكاميرا الأمامية أثناء الاختبار وبالنسبة لتسجيل الفيديو من الكاميرا الأمامية، باستطاعتك استخدام تقنية التسجيل بواسطة MediaRecorder، والوصول إلى الكاميرا الأمامية باستخدام API "getUserMedia"، وهي API's متاحة من قبل المتصفح. وإليك مثال: async function startRecording() { const stream = await navigator.mediaDevices.getUserMedia({ video: { facingMode: 'user' }, audio: false }); const mediaRecorder = new MediaRecorder(stream); const chunks = []; mediaRecorder.ondataavailable = (e) => { if (e.data.size > 0) { chunks.push(e.data); } }; mediaRecorder.onstop = () => { const videoBlob = new Blob(chunks, { type: 'video/mp4' }); // قم بإرسال الـ videoBlob للمراجعة على المنصة الخاصة بك هنا }; mediaRecorder.start(); } function stopRecording() { mediaRecorder.stop(); } وعليك باستدعاء startRecording() عند بدء الاختبار و stopRecording() عند انتهائه. تحميل الفيديوهات للمراجعة وبمجرد انتهاء الاختبار، تستطيع إرسال الفيديوهات (شاشة الهاتف والكاميرا الأمامية) إلى المنصة الخاصة بك للمراجعة، باستخدام Node.js والمكتبات المناسبة لاستقبال الفيديوهات وتخزينها في الخادم أو قاعدة البيانات. وبالطبع نستخدم Express.js كإطار عمل لبناء نظام السيرفر واستقبال طلبات الفيديوهات، والإعتماد على مكتبات أخرى مثل Multer لتحميل الفيديوهات على الخادم. مثال: const express = require('express'); const multer = require('multer'); const app = express(); const upload = multer({ dest: 'uploads/' }); app.post('/upload', upload.single('video'), (req, res) => { // يتم تخزين الفيديو هنا في قاعدة البيانات أو أي مكان آخر تفضله console.log(req.file); res.send('تم تحميل الفيديو بنجاح!'); }); app.listen(3000, () => { console.log('السيرفر يعمل على منفذ 3000'); }); وبإمكانك استدعاء API نقطة النهاية /upload عند انتهاء الاختبار لتحميل الفيديوهات.
- 3 اجابة
-
- 1
-
-
السؤال عام جدًا، وعليك بذكر ما هي اللغات والتقنيات التي تم تطوير الموقع بها، فمثلاً لو كنت تستخدم نظام إدارة محتوى مثل WordPress و Joomla و Drupal فستتمكن من استخدام اللغة العربية والإنجليزية بسهولة من خلال إضافة للموقع. وبالطبع يجب استخدام قاعدة بيانات تدعم النصوص متعددة اللغات وقدرات الترجمة، بإختيار صيغة التحويل الموحد في قاعدة البيانات وهي UTF-8. وبالطبع هناك مكتبات جافاسكريبت لبناء واجهة مستخدم متعدد اللغات ومنها: i18next: مكتبة لترجمة تطبيقات الويب، تدعم i18next تحميل الملفات الترجمة بصيغ مختلفة مثل JSON و PO وغيرها، وتستطيع استخدامها في تطبيقات React و Angular و Vue.js وغيرها. Polyglot.js: مكتبة صغيرة وخفيفة الوزن لدعم الترجمة في تطبيقات الويب، تسمح Polyglot.js بإضافة النصوص المترجمة عبر المفاتيح. كيف يمكن بناء واجهة مستخدم متعدد اللغات ويمكن تنفيذ الأمر من خلال React مثلاً باستخدام كائن لكل لغة وبها الترجمة وهنا شرح لذلك:
-
الأسئلة الإختبارية لا يتم الإجابة عليها بشكل مباشر، لكن يمكنك إرشادك لخطوات الحل وإذا وفرت الكود يمكن حل المشكلة التي تواجهك. وإليك خطوات الحل: أولاً تحقق مما إذا كان المقام (denominator) يساوي الصفر، وإذا كان الصفر، يجب أن تعيد الدالة 0 بدلاً من محاولة القسمة لأنه لا يمكن القسمة على الصفر. وفي حالة أن المقام (denominator) ليس يساوي الصفر، عليك بالعثور على الكسر العشري بقسمة البسط (numerator) على المقام (denominator) واستخراج الجزء العشري فقط من النتيجة (وكمساعدة ستحتاج إلى استخرج الجزء العشري أولاً من خلال استخدام modulo ثم قسمته على المقام denominator). والأمر بسيط كما ترى، وأنصحك بقراءة التالي:
-
تلك مشكلة شائعة والأغلب يعاني منها في البداية، وأنصحك بالعودة إلى بداية أساسيات JS ثم فهم واستيعاب الشرح بدلاً من التركيز على الكتابة مع المدرب، ثم في نهاية الفيديو تحاول التطبيق بناءًا على ما فهمك للشرح ولا مشكلة إذا واجهت صعوبة حاول وتستطيع مشاهدة الفيديو للمراجعة أو لتذكر أمرًا ما ثم المحاولة مرة أخرى. وفي حال كان الدرس طويل، فتستطيع تقسيمه إلى أجزاء واستيعابها ثم التطبيق عليها سواء بكتابة نفس الكود الذي كتبه المدرب ومحاولة التغيير فيه لفهم آلية عمل الكود ولا تخف من التجربة والخطأ فستتعلم من أخطائك أكثر من أي شيء، أو من البحث على اليوتيوب عن نفس الدرس مثلاً ورؤية تمارين مختلفة أو طلب تمارين أسفل الدرس أو توضيح لأمرًا ما لكن عليك بالبحث أولاً. ومن الطبيعي أن تجد صعوبة في لغة البرمجة الأولى لك وهي جافاسكريبت، لذلك أنت بحاجة إلى الوقت والصبر وكتابة الكود بشكل يومي. وأنصحك بعد تعلم الأساسيات أن تبحث على اليوتيوب عن "مشاريع جافاسكريبت للمبتدئين" وستجد مشاريع بأفكار مختلفة للتطبيق على ما تعلمته، وستجد بها أشياء جديدة يتم شرحها فتعلمها ولا تقلق من ذلك، والبحث هو صديقك دائمًا لكن عليك بالتفكير أولاً قبل البحث لتنمية مهارة التفكير المنطقي لديك وإجبار عقلك على الاسترجاع والربط بين ما تعلمته. وستجد في المسار الأول من دورة تطوير التطبيقات باستخدام لغة JavaScript شرح لأساسيات جافاسكريبت أيضًا أنصحك بدراسته بجانب الموجودة في دورة تطوير واجهات المستخدم.
-
سبب المشكلة غير واضح، فربما الخادم غير قيد التشغيل فتأكد من تشغيل خادم Apache Tomcat قبل محاولة الوصول إليه من خلال الأمر service tomcat status أو systemctl status tomcat. وهل الخادم متاح على المنفذ الصحيح؟ فالمنفذ الافتراضي لخادم Apache Tomcat هو 8080. وحاول تعطيل جدار الحماية لديك فقد يمنع الوصول إلى خادم Apache Tomcat، تأكد من السماح بالوصول إلى المنفذ الذي يعمل عليه الخادم من خلال جدار الحماية، وايضًا تحقق من عنوان الـ IP الذي تحاول الإتصال به. وقد يفيدك إعادة تشغيل الحاسوب والراوتر للتأكد من عدم وجود مشاكل من تلك الجهة. وتفقد تكوين ملف الإعداد الخاص بخادم Tomcat (server.xml) وأن المنافذ المستخدمة للاستماع صحيحة، وأن المنفذ الذي يستخدمه Tomcat غير محجوز من قبل تطبيقات أخرى.
-
بالإضافة إلى مكتبة Laravel Nova يوجد العديد من المكتبات الأخرى ومنها: Backpack for Laravel حلاً ممتازًا لإنشاء لوحة تحكم مخصصة بسهولة، وتتضمن العديد من الوظائف المساعدة والتجهيزات الجاهزة للعمل مع قواعد البيانات والصلاحيات والبحث والتصفية والإعدادات والمزيد. Voyager لوحة تحكم قوية وسهلة الاستخدام تعمل على Laravel وتسمح لك بإدارة المحتوى والصور والملفات والبيانات والمستخدمين بسهولة. October CMS يعتمد على لارافيل كإطار عمل ويوفر تجربة إدارة مرنة وقوية. PyroCMS نظام إدارة محتوى قائم على Laravel مع واجهة سهلة الاستخدام ومرونة في التخصيص.
-
عليك بإضافة زر "تواصل مع المندوب" إلى صفحتك في HTML، وسنستخدم ذلك الزر للتحكم في عملية نسخ الصورة وإرسالها للواتساب. <div id="image"> <img src="image.png" alt="Image"> </div> <button onclick="sendToWhatsApp()">تواصل مع المندوب</button> وفي الجزء البرمجي الخاص بجافاسكريبت، أضف حدثًا للزر "تواصل مع المندوب" باستخدام JavaScript للتعامل مع النقرة عليه، وفي ذلك الحدث، ستقوم بنسخ الصورة إلى الحافظة وتوجيه المستخدم إلى رابط واتساب مع الصورة المرفقة. function sendToWhatsApp() { const imageURL = document.getElementById("image").src; const text = "This is the text to send to WhatsApp"; // Copy the image to the clipboard navigator.clipboard.writeText(imageURL); // Open WhatsApp with the text and image const whatsappURL = "whatsapp://send?text=" + encodeURIComponent(text) + "&image=" + encodeURIComponent(imageURL); window.open(whatsappURL); }
- 3 اجابة
-
- 1
-
-
أرجو منك تعديل روابط مكتبة bootstrap في ملف index.html باستبدال الجزء الأول من الرابط لتحويله من cdn.jsdelivr.net إلى fastly.jsdelivr.net أي تصبح الروابط كالتالي: <link rel="stylesheet" href="https://fastly.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.rtl.min.css" integrity="sha384-+qdLaIRZfNu4cVPK/PxJJEy0B0f3Ugv8i482AKY7gwXwhaCroABd086ybrVKTa0q" crossorigin="anonymous"> <script src="https://fastly.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script> والسبب هو أنه على الأغلب تم حجب الجزء الخاص بالـ Cloudflare network المعتمد عليه موقع jsdelivr ، وقد حدث ذلك في مصر.
- 1 جواب
-
- 2
-
-
أولاً لا تخجل أبدًا من المشاريع التي تقوم بها في البداية، فكل المطلوب منك هو محاولة تنفيذ المطلوب منك والتطبيق على ما تعلمته من أجل تثبيت المعلومات وتحسين مهاراتك البرمجية، وتستطيع الحصول على تصاميم من خلال المواقع التالية: ومع الوقت ستجد أن مستواك قد تحسن وتصميماتك أصبحت أفضل، وللعلم أنت كمطور واجهات أمامية ليس مطلوب منك تصميم الواجهة بل تطويرها، لكن مطلوب منك أيضًا الإلمام بأساسيات التصميم الجيد وستجد هنا توضيح لتلك النقطة بشكل مفصل: لا أنصحك بالإنتقال لتعلم جافاسكريبت، حتى تتمكن من تنفيذ مشروع HTML, CSS بتصميم جيد وبدون أخطاء تقريبًا، اختر تصميم ينال إعجابك من المواقع التي ذكرتها سابقًا، ثم اعمل عليه ولا تقلق إذا واجهتك تحديات فذلك هو المطلوب، فكر في كيفية التنفيذ وفي حال لم تتمكن ابحث عن كيفية تنفيذ ما تريده ثم أخيرًا تستطيع السؤال. وبعد أن تشعر بالأريحية في استخدام HTML وCSS، تستطيع الإنتقال إلى تعلم جافاسكريبت. ما فعلته أنا عندما كنت أتعلم البرمجة، هو أنه كان يوجد مشروع في نهاية الدورة الخاصة بـ HTML, CSS، فقم بمشاهدة المشروع وهو عبارة موقع خاص بشركة توصيل طعام، وقمت بالتطبيق مع المدرب من خلال المشاهدة ثم التوقف ومحاولة التطبيق بمفردي. وبعد الإنتهاء بحثت عن تصميم من المواقع التي ذكرتها لك، ووجدت تصميم أعجبني فقمت بالعمل عليه لمدة أسبوع تقريبًا بمعدل 7 إلى 10 ساعات يوميًا، حتى إنتهيت منه وأيضًا أضفت له بعض الخواص الغير موجودة بالتصميم وتعلمت الكثير جراء ذلك. وأنصحك أيضًا بالتمرن على تطوير النماذج Forms فهى أمر هام جدًا بالنسبة لمطور الواجهة الأمامية، حاول تنفيذ مشروع جانبي مخصص لتطوير نموذج وستجد على اليوتيوب مشاريع ابحث عن "إنشاء فورم html css".
- 5 اجابة
-
- 1
-
