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

محمد أيت لعرايك

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

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

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

كل منشورات العضو محمد أيت لعرايك

  1. يحتوي Ant Media Server على حزم SDK محمولة أصلية (IOS و Android) لـ WebRTC. يمكنك استخدام مرافق WebRTC في نظام Android الأساسي بمساعدة Ant Media Server's Native Android WebRTC SDK. يمكن تنزيل WebRTC لنظامي التشغيل iOS و Android SDK مجانًا. يمكنك الوصول إليهم من خلال هذا الرابط. بعد تنزيل SDK ، يمكنك فقط فك ضغط الملف. يمكنك أيضًا الحصول على نسخة تجريبية من Ant Media Server Enterprise Edition من هنا عند الإنتهاء من التطبيق يمكنك رفعه على متجر google play أو متجر appstore التطبيق لا يتم رفعه في إستضافة المواقع . أما بخصوص إدارة الإتصالات فإن Ant Media Server يتكلف بذلك من خلال sdk مجاني أو مدفوع حسب الحاجة.
  2. لغة javascript تفرق بين الكتابة بالحروف الصغيرة والكبيرة فمثلا pic.addEventListner('click',changeCounter); // و pic.addEventListner('click',changecounter); كل مستمع يقوم بالنداء على دالة مختلفة عند النقر على الصورة الدالة changeCounter ليست هي الدالة changecounter يجب عليك دائما النتباه للكيفية كتابة الدوال و المتغيرات في javascript
  3. لإعداد نطاق مخصص في laravel ، تحتاج إلى تهيئة مضيف apache . ولكي تقوم بذلك فأنت تحتاج إلى تحرير ملف “httpd-vhosts.conf” الموجود بالمسار C:\wamp\bin\apache\apache2.4.23\conf\extra\httpd-vhosts.conf إدا كنت تستخدم wamp أو C:\xampp\apache\conf\extra\httpd-vhosts.conf إدا كنت تستخدم xamp . إفتح الملف وضع الشيفرة التالية: <VirtualHost *:80> DocumentRoot “C:/xampp/htdocs/project-name/public” ServerName blog.test </VirtualHost> أيضًا ، نحتاج إلى تعديل ملف "hosts". الخاص بنظام التشغل , إفتح الملف C:\Windows\System32\drivers\etc\hosts ثم ضع هذا السطر في نهايته ثم إحفظه 127.0.0.1 blog.test الآن ، افتح WAMP (XAMPP) وأعد تشغيل خادم Apache. في متصفحك ، انتقل إلى blog.test هذه هي الطريقة التي يمكنك بها إعداد مضيف افتراضي في خادم xampp أو wamp لـ laravel.
  4. في حالة تريدين عمل LiveReload للسكريت الخاص بك دون إعادة تحديث المتصفح أنصحك بإستخدام هذه الإضافة فهذه الإضافة تمكنك من : - تحميل صفحات الويب عند إنشاء أي ملف أو إزالته أو تعديله. - تطبيق التغييرات بدون إعادة التحميل عند تغيير أي CSS أو صورة. - تعمل مع امتداد LiveReload.
  5. لإستخدام Zoom API. أولاً ، عليك إنشاء تطبيق في Zoom marketplace. اذهب إلى هذا الرابط إذا لم يكن لديك أي حساب في zoom، فيجب عليك إنشاء حساب في zoom. من هنا بعد ذلك أنشئ تطبيق OAuth يجب الحصول على id العميل و كلمة السر لتطبيقك. و تعيين النطاقات للتطبيق. ما النطاقات التي يجب عليك تحديدها لتطبيقك. النطاقات تعني نوع بيانات المستخدمة التي يمكنها الوصول إلى تطبيقك. كلما قام مستخدم بتسجيل الدخول في تطبيقك ، يمكنه رؤية هذه النطاقات أو الوصول إلى بيانات هذا التطبيق. بعد ذلك يمكنك إستخدام مكتبة guzzlehttp/guzzle في حالة تستخدم لغة php composer require guzzlehttp/guzzle سنقوم بتخزين رمز الوصول في قاعدة البيانات لاستخدامه لاحقًا. رمز الوصول صالح لفترة قصيرة من الزمن. في الكود الخاص بنا ، سنقوم بإعادة إنشاء رمز الوصول في الخلفية بحيث لا يحتاج المستخدم إلى إجراء عملية التفويض مرة أخرى. قم بتشغيل استعلام SQL أدناه لإنشاء جدول قاعدة بيانات يحتوي على رمز الوصول. CREATE TABLE `token` ( `id` int(11) NOT NULL AUTO_INCREMENT, `access_token` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; كما قلت سابقًا في Zoom APIs ، هناك الكثير من الخيارات التي يمكنك دمجها في تطبيقك. يمكنك التحقق من توثيق Zoom APIs هنا
  6. الدالة هي كتلة من التعليمات البرمجية مصممة لأداء وظيفة معينة و نستعملها عندما نقوم بالنداء عليها بإسمها مثال : function getSum(number1, number2) { // number2 و number1 تقوم بأخد رقمين getSum إسم الدالة return number1 + number1; // بعد ذلك تقوم بجمع العديدن وإسترجاع القيمة } // النداء على الدالة getSum(1,3) // النتيجة > 4
  7. ببساطة يمكنك عرض جميع المكتبات بإستخدام npm ls في المكون الخاص بك أكتب مايلي. const dependancies = []; require('child_process').exec('npm ls --json', function(err, stdout, stderr) { if (err) return cb(err) dependancies.push(JSON.parse(stdout)) }); عرض المصفوفة dependencies console.log(dependencies); // النتيجة /* [ { name: 'aws-amplify', version: '^5.10.2' }, { name: 'classnames', version: '^2.2.6' }, { name: 'lodash', version: '^4.17.15' } ] */
  8. يمكن إستعمال عدت طرق للعمل delete في بيانات الخادم , وينصح بإستخدام الطريقة الأخيرة فهي أكثر إحترافية و أمان deleteRequest: function (id, index) { axios.post('/admin/posts/' + id, { _method: 'DELETE' }) .then((response) => { }).catch((error) => { }); // يعادل deleteRequest: function (id, index) { axios.delete('/admin/posts/' + id) .then((response) => { }).catch((error) => { }); // ويمكن كتابة الكود السابق على الشكل التالي // لإرسال البيانات للطلب body التي نستعمل PUT و POST عكس data في الكائن parameter مع إرسال const res = await axios.delete('/admin/posts',{ data: { id: 42 } }); res.status; // 200 في post و put نرسل البيانات عبر body وفي delete نرسلها عبر data
  9. يمكن إنشاء دالتين, واحدة تقوم بالتحقق من النصوص , وواحدة تتحقق من الصور دالة التحقق من النصوص: function validation_input($data) { // للنص و العنوان validation لعمل $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); if(!empty($data){ // هنا يمكن عمل تحقق من عدد الحروف إن أردت ذلك return true; } } دالة التحقق من الصور: function validation_image($image) { $errors= array(); $file_name = $image['name']; $file_size = $image['size']; $file_tmp = $image['tmp_name']; $file_type = $image['type']; $file_ext=strtolower(end(explode('.',$image['name']))); $expensions= array("jpeg","jpg","png"); // نتحقق من الصيغ المسموح بها if(in_array($file_ext,$expensions)=== false){ $errors[]="extension not allowed, please choose a JPEG or PNG file."; } if($file_size > 2097152) { // نتحقق من حجم الصورة $errors[]='File size must be excately 2 MB'; } if(empty($errors)==true) { return true; } }
  10. يمكن أيضا عمل custom validation rule إذا كانت checkbox تحتاج إلى تحقق متطور. قم بإنشاء قاعدة مخصصة داخل app / Providers / AppServiceProvider.php في الدالة boot أضف مايلي : use Illuminate\Support\Facades\Validator; ... public function boot() { Validator::extend('validate_checkboxes', function ($attribute, $values, $parameters, $validator) { foreach( $values as $value ) { if (!in_array($value, [0, 1])) { return false; } return true; } }); } في المتحكم الخاص بك أكتب مايلي: $this->validate($request, [ 'record_checkbox' => 'validate_checkboxes', ]);
  11. وللإضافة ينصح دائما بإستخدام الإتصال عن طريق PDO استخدام PDO أسهل من mysqli. PDO يستخدم طرقًا أقل لتنفيذ استعلام مقارنةً بـ mysqli. بالإضافة إلى ذلك ، أثناء الاستعلامات المعدة ، فإنه يعطي إمكانية تسمية المعلمات وهو أمر عملي لسهولة القراءة ولتجنب أخطاء تحديد موضع المعلمات. parametres ويكون الإتصال عن طريق PDO كالتالي: <?php $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); ?> بعد ذلك يمكنك إنشاء الإستعلام على النحو التالي: <?php try { $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); foreach($dbh->query('SELECT * from FOO') as $row) { print_r($row); } $dbh = null; } catch (PDOException $e) { print "Erreur !: " . $e->getMessage() . "<br/>"; die(); } ?> إذا لم يلتقط التطبيق الخاص بك الاستثناءات التي تم إلقاؤها من مُنشئ PDO ، فإن الإجراء الافتراضي لمحرك zend هو إنهاء البرنامج النصي وعرض التتبع. يجب أن يكشف هذا التتبع عن التفاصيل الكاملة لاتصال قاعدة البيانات ، بما في ذلك اسم المستخدم وكلمة المرور. لذلك ، تقع على عاتقك مسؤولية التقاط هذا الاستثناء عبر تعليمة catch try
  12. في حالة العناوين الديناميكية (h1 ، h2 ...) ، يمكن للمكون إرجاع React.createElement على هذا النحو. const Heading = ({level, children, ...props}) => { return React.createElement(`h${level}`, props , children) } ويمكن تمرير كل من الدعائم والأطفال. <div> <Heading level={1}>Heading 1</Heading> <Heading level={2}>Heading 2</Heading> <Heading level={3}>Heading 3</Heading> </div> النتيجة Heading 1 <!-- بخط كبير --> Heading 2 <!-- بخط متوسط--> Heading 3 <!-- بخط صغر -->
  13. لكي تنتقل من مرحلة نقل الكود الى انشاء الكود من الصفر في تصميم واجهات المستخدم ينصح بالتعلم المستمر وهذا ماذكرته في جوابي .
  14. يتم حل تمثيل العلاقات في قواعد البيانات غير العلائقية أو noSQL ، بشكل عام ، إما من خلال تضمين المستندات (صيغة noSQL للصفوف) أو من خلال مراجع المستندات (document references) يحتوي موقع MongoDB على بعض المقالات اللائقة التي تنطبق في الغالب على جميع قواعد البيانات غير العلائقية بما في ذلك نموذج العلاقات الفردية مع مراجع المستندات ، والتي أعتقد أنها الأكثر صلة بمشكلتك فيما يتعلق بالمفتاح المرجعي ، من الأفضل عادةً استخدام المعرفات التي تم إنشاؤها حيث يمكنك التأكد من أنها فريدة.
  15. تتيح لك سمات الألوان تعديل الألوان في واجهة مستخدم Visual Studio Code لتناسب تفضيلاتك وبيئة العمل. لإختيار theme إتبع الخطوات التالية: 1- في VS Code ، افتح Color Theme Picker باستخدام ملف> تفضيلات> سمة اللون. 2- يمكنك أيضًا استخدام اختصار لوحة المفاتيح Ctrl + K Ctrl + T لعرض themes. 3- استخدم مفاتيح المؤشرات لمعاينة الأوان و theme اللذي تريده. 4- عندما تستقر على الtheme الذي تريده اضغط على Enter. بعد ذلك يمكنك العمل ب theme الجديد.
  16. عندما ينسخ أحد المطورين جزءًا من التعليمات البرمجية التي لا يفهمونها ويستخدمونها على أمل إصلاح بعض المشكلات ، فإنهم يبرمجون بطريقة خاطئة .و هذا يزيد من مخاطر الآثار الجانبية غير المقصودة في التطبيقات الخاصة بهم. و عندما يقرأ أحد المطورين جزءًا من التعليمات البرمجية والتي لا يفهمونها ولا يزالون يعبثون بالأكواد على أمل إصلاح بعض المشكلات ، فإنهم يبرمجون بطريقة خاطئة أيضا. المشكلة ، في هذه الحالة ، ليست أن المطور ينسخ شيئًا ما. يمكن لأي شخص نسخ مقتطف من التعليمات البرمجية ، وفهمها ، والتعلم منها ، واستخدامها ، لكن المشكلة الحقيقية هي أن المبرمج لا يتعلم شيئا مادام لا يفهم ما يقوم به, فلا عيب في نسخ و لصق الأكواد ما دمت تعلم جيدا ماللذي تفعله ولتصل إلى درجة المبرمج المحترف فليس لديك حل سوى التعلم ثم التعلم ثم التعلم. ولكي تتعلم يجب عليك بناء مواقع و تطبيقات و صغيرة ومتوسطة الحجم و تمرن نفسك يوميا وتحسن من مهاراتك ومع الوقت ستتمكن من كتابة الأكواد مباشرة دون الحاجة للنسخ واللصق
  17. سيكون عليك إنشاء مفتاح للتوقيع على apk. استخدمي الأمر أدناه لإنشاء مفتاحك: keytool -genkey -v -keystore my-app-key.keystore -alias my-app-alias -keyalg RSA -keysize 2048 -validity 10000 بمجرد إنشاء المفتاح ، استخدميه لإنشاء البنية القابلة للتثبيت: react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/ إنشاء البناء باستخدام Gradle cd android && ./gradlew assembleRelease بعد ذلك قومي بتحميل APK على هاتفك. ستحل العلامة -r محل التطبيق الحالي (إن وجد) adb install -r ./app/build/outputs/apk/app-release-unsigned.apk وستجدين أيضا ملف APK الخاص بالتطبيق في مجلد /android/app/build/outputs/apk/release يمكنك بعد ذلك إرساله إلى إلى شخصٍ ما ليتمكن من اختباره،
  18. إذا كانت هذه أسئلة إمتحان أو تمارين فحاولي أن تبدلي جهد للإجابة عنها بعد ذلك إن واجهتك أي مشكلة او خطأ برمجي إطرحي السؤال هنا, وليس أن تبحثي عن الأجوبة مباشرة, هكذا لن تستفيدي شيءا
  19. الكود المبين أعلاه سوف يعطيك النتيجة التالية ["a", "b", "c"] و هكذا قد أزلنا العناصر المكررة من List
  20. يمكن عمل ذلك بهذه الطريقة: mylist = ["a", "b", "a", "c", "c","b","b"] # بهذه الطريقة list إنشاء mylist = list(dict.fromkeys(mylist)) # أخرى بعناصر غير مكررة list بهذه الدالة نقوم بإنشاء print(mylist) # list بعد ذلك نطبع تجدين المزيد من التفاصيل حول الموضوع في هذا الرابط
  21. و للإضافة فالدالة Auth() لا تعمل إلا إذا كانت داخل middleware web يعني في ملف routes الخاصة بك يكفي إضافة الكود التالي: Route::group(['middleware' => 'web'], function () { // routes هنا تكتب جميع // ستقوم بإرجاع المستخدم اللذي سجل دخوله Auth::user() أي متحكم يكتب هنا الدالة });
  22. قومي بتعيين تركيز emailInput الثاني ، عند تشغيل passwordInput السابق للدالةـ onSubmitEditing أولا قومي بإضافة Ref للحقل الثاني <TextInput ref={(input) => { this.passwordInput = input; }} style = {styles.passwordInput} maxLength = {10} placeholder = "كلمة المرور" /> بعد ذلك إستخدمي الدالة onSubmitEditing للتنصت على حدث الضغط على next في الحقل الأول: <TextInput placeholder = "البريد الالكتروني" returnKeyType="next" onSubmitEditing={() => { this.passwordInput.focus(); }} blurOnSubmit={false} style = {styles.emailInput} autoFocus = {true} />
  23. لنفترض أن لديك متغير var$ تم إرساله من طرف controller إلى view و تريد إظهار في الصفحة الخاصة بك $var = "<h1> أكادمية حسوب </h1>" ; إذا تمت كتابة {{ var$ }} في ال view فسوف تكون النتيجة على الشكل التالي: <h1> أكادمية حسوب </h1> <!-- ستظر النتيجة كماهي دون إي تغيير --> أما إذا تمت كتابة {!!var$ !!} في ال view فسوف تكون النتيجة : أكادمية حسوب <!-- h1 ستظهر النتيحة كعنوان كبير وسيقرأ المتصفح عنصر ---> دائما ينصح بإستعمال {{ }} هذه الطرقة لإظهار المتغيرات لتجنب إختراقات XSS, ولمزيد من التفاصيل حول الموضوع يمكنك زيارة الموقع الرسمي ل Laravel من هنا
  24. لديك عنصرين أساسيين في القالب template الخاص بك. <template> <div class="form-group"> <label for="avatar" class="control-label">Avatar</label> <input type="file" v-on:change="fileChange" id="avatar"> <div class="help-block"> Help block here updated 4 🍸 ... </div> </div> <div class="col-md-6"> <input type="hidden" name="avatar_id"> <img class="avatar" title="Current avatar"> </div> </template> و هدا خطا القالب template يجب أن يكون عنصر واحد, ولحل هذه المشكلة يكفي وضع <div> يحتوي جميع العناصر , على الشكل التالي: <template> <div> <!--إضافة عنصر جديد هنا --> <div class="form-group"> <label for="avatar" class="control-label">Avatar</label> <input type="file" v-on:change="fileChange" id="avatar"> <div class="help-block"> Help block here updated 4 🍸 ... </div> </div> <div class="col-md-6"> <input type="hidden" name="avatar_id"> <img class="avatar" title="Current avatar"> </div> </div> </template>
  25. بإمكانك إنشاء تابع جديد في النموذج User بهذا الشكل: public function commentsSorted() { return $this->hasMany('Comment')->orderBy('post_id'); } و عند عرض التعليقات تقوم بالتالي: foreach($post->user->ommentsSorted as $comment) { echo "<li>" . $comment->title . " (" . $comment->post->id . ")</li>"; } أو تعرض المعلومات بالطريقة التالية: @foreach($comments as $comment) <li>{{ $comment->title }} ({{ $comment->post_id }})</li> @endforeach
×
×
  • أضف...