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

عمر قره محمد

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

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

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

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

    40

كل منشورات العضو عمر قره محمد

  1. المشكلة انك تضع الإشارة ; بعد العبارة الشرطية : // الخطأ هوا كتابة الشرط بالشكل if(something);{doSomething} // والصحيح هو أن تكتبه بالشكل التالي if(something){doSomething} // بدون إستخدام الـ ; بين عبارة الشرط والوظيفة
  2. بالنسبة للملف الخاص بك عليك تعديل ال $emailMessage.To.Add // استبدل السطر التالي $emailMessage.To.Add("tttttt@gmail.com") // بالسطر التالي $emailMessage.To.Add($args[0]) وسطر الاستدعاء الخاص بك يجب ان يصبح بالشكل powershell.exe -ExecutionPolicy Bypass -Command "c:\sndemail.ps1" tttttt@gmail.com حيث تضيف الإيميل في نهاية السطر بعد الـ path.
  3. هنالك نوعين من المواقع : المواقع التي هي عبارة عن frontend فقط وهذه يستحيل حمياتها، فسيتمكن المستخدم دائما من الوصول للبيانات لأنها ترسل ملفات الـ html و css و js للمتصفح عند كل زيارة، وهذا النوع من المواقع تحتاج لإستخدام طرق عرض لا تعتمد على لأكواد، مثل أن تقوم بعرض الموقع عبر اتصال google meet أو ترسل الصفحات ك pdf أو كصور. ويمكنك تصعيب سحب البيانات عبر عمل تجميع للصفحة أو استخدام تقنيات تحزيم البيانات ورغم ذلك هذه الطرق لن تحمي البيانات. المواقع الـ Full-Stack أو الـ APIs، في هذه المواقع لن يتمكن العميل من الوصول للبيانات الخاصة بالموقع وكل ما يستطيع الوصول له هو الـ frontend فقط وهذه المواقع ويمكن رفعها على استضافة مجانية أو على تحت دومين في استضافتك الخاصة. و انا عملت على أكثر من مشروع عبر مستقل ولم اتعرض لأي حادثة سحب بيانات رغم انني كنت ارفع الموقع على استضافة مجانية لعرضها للعميل، و المواقع التي كنت اعمل عليها كلها كانت Full-Stack، ولا انصحك بعمل نفس الشيء مع مواقع ال frontend.
  4. يمكنك فعل ذلك من خلال الكود التالي وليكن اسم الملف example.ps1 $firstName=$args[0] $lastName=$args[1] write-host "my name is $firstName $lastName" نستدعيه بالشكل : .\example.ps1 omar km هذا سيطبع النص : my name is omar km
  5. هنالك العديد من الشركات التي تقدم خدمة الاستضافة ولا يمكنك الحكم عليها بشكل مطلق لأن كل منها لديه ميزاته خاصة به، فالأمر يعتمد على نوع الموقع الخاص بك والفئة المستهدفة و كون الاستضافة تدعم التقنيات التي تحتاجها لاسيما إن كانت الاستضافة مشتركة وكذلك الامر يعتمد على مواصفات الاستضافة مقارنة بالسعر من حيث : المساحة والمعالج والرام. وعدد المواقع التي تسمح لك باستضافتهم. وعدد الايميلات وتحت الدومينات. وإن كانت تدعم شبكة توزيع المحتوى CDN أم لا. تدعم cpanel أم لا. تدعم اتصال ssh و SFTP. والميزات الاضافية التي تقدمها. كذلك فالامر يعتمد على العروض التي تقدمها الشركة على الاشتراك. هاهي مقارنة بين أشيع 10 شركات استضافة : وهذه مقالة تساعدك أيضا في اختيار الاستضافة ملاحظة : إن كنت تبحث عن الاستضافات الارخص سعراً فيجب عليك البحث عن موزعي الاستضافة المحليين في بلدك فهم الارخص على الارجح. في حال كان مشروعك مبين بالـ node js اقرأ أيضاً :
  6. حتى تسطيع عرض الـ pdf في iframe يجب أن تقوم بإنشاء صفحة تعرض الـ pdf مباشرة، وفي الصفحة الاساسية تجلب هذه الصفحة في iframe. أنا ليس لدي خبرة كافية بـ django ولكن رئيت أنه تستطيع عرض الـ pdf بهذه الطريقة. from django.http import FileResponse import os def show_pdf(request): filepath = os.path.join('static', 'sample.pdf') return FileResponse(open(filepath, 'rb'), content_type='application/pdf') ومن ثم تستدعي الـ url الخاص بهذه الصفحة داخل الـ iframe في الصفحة الرئيسية.
  7. يمكنك فعل ذلك من خلال العبارة instanceof وكمثال : <?php class MyClass {} class AnotherClass extends MyClass{} $obj = new AnotherClass(); // سوف يحقق الشرط if($obj instanceof AnotherClass) { echo "The object is AnotherClass"; } // وكذلك يحقق الشرط if($obj instanceof MyClass) { echo "The object is MyClass<br>"; } ?> اقرأ أيضاً فيما يتعلق بالـ instanceof : https://wiki.hsoub.com/PHP/type_operators
  8. نعم بالفعل يوجد مثل هذه المكتبة وهي : country-region-dropdown-menu. وهذه مكتبة مجانية بالكامل تدعم اللغة العربية وجميع الدول والمناطق، ويمكن استخدامها بسهولة. كما انها تدعم ظهور الاعلام عند تحديد العنصر وعدة اشكال من الـ selectpicker. يمكنك مطالعة المثال التالي المبني بهذه المكتبة : example.zip ملاحطة : يجب تشغيل المثال على liveServer.
  9. الجافا سكريبت لا تدعم الـ function overloading أي أنه لا يمكن تعريف أكثر من وظيفة بنفس الاسم ولكن بـ parameters مختلفة وهذا يتضمن الـ constructor كذلك. ولكن يمكنك التغلب على هذه المشكلة بعدة طرق منها إنشاء وظائف static لبناء العناصر مثل التالي: class MyClass { constructor(a,b,c,d){ this.a = a this.b = b this.c = c this.d = d } static BAndCInstance(b,c){ return new MyClass(null,b,c) } static BAndDInstance(b,d){ return new MyClass(null,b, null,d) } } //Instance that has just a const myclass=new MyClass(a) //Instance that has b and c params const instanceWithBAndC = MyClass.BAndCInstance(b,c) //Instance that has b and d const instanceWithBAndD = MyClass.BAndDInstance(b,d) أو يمكنت التحقق من ال parameters من داخل الـ constructor و تعديل البيانات تبعاً لذلك: class MyClass { constructor(a,b){ if (a===undefined) a= 'how are you'; if (typeof(b)==='string') this._constructInSomeWay(a, b); } _constructInSomeWay(a,b){ console.log({a,b}) // do some thing } } ويمكن هنا إضافة العدد الذي تريده من الـ constructor حسب نوع المعلومات القادمة. اقرأ أيضاً :
  10. عندما يقوم المستخدم بتسجيل الدخول فأنت تقوم بالتحقق من كونه مسجلاً بعدة طرق أشهرها هي طلب الاسم وكلمة السر والتحقق من كونها صحيحة من طرف الـ backend بعد ذلك نقوم بإرسال إشارة لطرف المستخدم الـ fronted لإخباره بكون المستخدم قام بالدخول بنجاح وأشهر هذه الطرق هو ما يسمى بالـ token : وهو عبارة عن كود مشفر يقوم المستخدم بإرساله لتنفيذ أي عملية تحتاج تسجيل دخول. ففي حال نجاح تسجيل الدخول نخزن في المتصفح معلومات معينة تدل على كون المستخدم مسجل ونقوم بعرض الواجه الخاصة بالمستخدمين المسجلين، أو نتحقق عبر إرسال طلب للسيرفر من كونه مسجلاً وحسب الاستجابه نقوم بعرض الصفحة. على سبيل المثال يمكنك إضافة عنصر معين لل localStorage عند نجاح تسجيل الدخول على سبيل المثال العنصر userName : // بعد تلقي الاشارة من السيرفر بنجاح تسجيل الدخول localStorage.setItem('userName', "الاسم الخاص بالمستخدم"); وفي صفحات المستخدم تتحقق من وجود هذا العنصر ونعدل واجهة السمتخدم الـ frontend وفقاً لذلك، أما في حال لم تكن موجودة نعود لصفحة تسجيل الدخول أو نقوم بعرض الصفحة دون التعديلات الخاصة بالمستخدمين (مثلا بدون لوحة الازرار) : if(const cat = localStorage.getItem('userName')){ // قم بتعديل واجه المستخدم مثل إضافة لوحة أزرار أو فقرات إضافية // مثلاً إضافة لوحة الازرار للصفحة }else { window.location.replace("https://www.example.com/login") } اقرأ أيضاً :
  11. لحل مشكلة التاريخ لديك خيارين، الأول هو استخدام ال Date المبني بشكل افضراضي في js واستخدام الفورمات المخلتفة التي يقدمها للتواريخ لإظهاره بالشكل التي تريده، مثال : const d = new Date("التاريخ القادم من قاعدة البيانات"); let text = d.toLocaleDateString(); console.log(text); // 12/12/2012 حيث الوظيفة السابقة تعرض التاريخ بالشهر واليوم والسنة، وهنالك الـ ()toLocaleTimeString لعرض الوقت بالساعات والدقائق والثواني، وكذلك ()toLocaleString لعرض التاريخ مع الوقت. أو بإمكانك استخدام مكتبة جاهزة تتيح العديد من الوظائف الخاصة بعرض الوقت وهي : momentjs وتقوم بتنزيلها بالشكل : npm install moment --save ومن ثم استدعائها بالشكل : import moment from 'moment'; واستخدامها : moment().format('MMMM Do YYYY, h:mm:ss a'); // June 6th 2022, 9:49:49 am moment().format('dddd'); // Monday moment().format("MMM Do YY"); // Jun 6th 22 moment().format('YYYY [escaped] YYYY'); // 2022 escaped 2022 moment().format(); // 2022-06-06T09:50:06+03:00 بالنسبة للسؤال الثاني فالمشكلة هي من استدعاء البيانات من قاعدة البيانات فيجب إضافة شرط أن يكون اسم المستخدم يساوي اسم المستخدم التي تريد البيانات الخاصة به.
  12. هذا عبارة عن datetime وليس date عادي، كما أن اللغة المستخدمة والترتيب كلاهما يعتمد على لغة المتصفح الذي تقوم بفتح الموقع منه. وعلى ما يبدو أنك تقوم بفتح الموقع من خلال متصفح موضوع على اللغة الانجليزية، جرب تغيير لغة المتصفح ولاحظ الفرق. كما يمكنك كذلك بناء الـ Input التي تحتاجها من الصفر إذا كنت تريد تخصيصها بشكل أكبر باستخدام html و css و js,
  13. للتحريك من الاسفل للأعلى يجب استخدام ال transform : div { margin: 30px auto; background-color: #5fd068; width: 40%; height: 30px; border-radius: 10px; font-size: 40px; /* height: 0; */ transition: transform 2s; transform-origin: bottom center; } div:hover { transform: scaleY(2); } حيث لا تستطيع التحكم باتجاه الحركة عند استخدام ال height لذلك نذهب لـ transform: scaleY(2) بدلاً عنها لأنها تمكننا من التحكم بال transform-origin، وبالتالي التحكم باتجاه الحركة. إن كنت مهتم بالتحريك يمكنك قراءة هذا المقال عن ال animations :
  14. ربما يمكنك استخدام الـ AsyncStorage import { AsyncStorage } from 'react-native'; لإضافة عنصر _storeData = async () => { try { await AsyncStorage.setItem( '@MySuperStore:key', 'I like to save it.' ); } catch (error) { // Error saving data } }; لإحضار العنصر _retrieveData = async () => { try { const value = await AsyncStorage.getItem('TASKS'); if (value !== null) { // We have data!! console.log(value); } } catch (error) { // Error retrieving data } لحذف العنصر _retrieveData = async () => { try { const value = await AsyncStorage.removeItem('TASKS'); console.log("item has removed"); } catch (error) { // Error retrieving data }
  15. تستطيع عمل ذلك من خلال ال localStorage. حيث تقوم بإضافة البيانات لل localStorage بالطريقة التالية : localStorage.setItem("userData" , JSON.stringify(userData)) ونقوم بعمل ال : JSON.stringify(userData) إذا كانت البيانات ليست string أو number لكن إذا كانت string فليس هنالك داع لإضافة هذه العملية. هذه البيانات التي خزنتها باستخدام ال localStorage بإمكانك الوصول إليها من اي صفحة من الموقع حتى وإن اغلق المستخدم الصفحة ومدى الحياة، ويمكنك الوصول إليها من خلال الكود : JSON.parse(localStorage.getItem("userData")) وقمنا بعمل ال : JSON.parse() لأننا قمنا بعمل stringify عند إضافة العنصر وكما ذكرت ليست ضرورية إذا كانت البيانات المستخدمة هي string أو number. بعد قول هذا يجب ان تعلم ان بيانات ال localStorage لن تحذف ابدا مالم تقم انت بحذفها او قام المتستخدم بحذف بيانات المتصفح، وتستطيع حذف البيانات التي أدخلناها باستخدام الكود : localStorage.removeItem("userData") هنالك طريقة اخرى كذلك لتخزين البيانات على المتصفح وهي باستخدام ال sessionStorage وهي تختلف عن ال localStorage بأنه يكون لديك وصول للبيانات عند عمل اعادة تحميل والتنقل بين الصفحات ولكن البيانات المخزنة فيها تحذف بمجرد إغلاق الصفحة. ونستخدمها بنفس طريقة ال localStorage : sessionStorage.setItem("key" , value) sessionStorage.getItem("key") sessionStorage.removeItem("key")
  16. نعم بالفعل يوجد مثل هذه الأدوات وهي على نوعين : 1- إضافات للمتصفح مثل tempermonky وهي تسمح بعمل سكريبت ثم تركيبه على المتصفح حتى يقوم بالتعديل على واجهة بعض المواقع أو عمل automation. 2- متصفحات يتم تشغيلها على السيرفر مثل Puppeteer وهذه تقوم بالوصول للموقع وعمل automation أو web scraping.
  17. في الكود الخاص بك سيتم تحديث الـ <QRCode value={this.formData.QRCode} size={250} bgColor='#000' fgColor='#fff' /> عند اي تغيير في قيمة الـ this.formData.QRCode إذا كنت لا تريد ان يتم التحديث بشكل تلقائي يجب إضافة متغير جديد وتحديث الـ </ QRcode> فقط عند الضغط على الزر ثم عمل refresh للصفحة : // نضيف العنصر التالي let _QRcode = ""; function AddRoom() { const [formData, setFormData] = useState({ NameOfroom: "", NumberOfroom: "", date: "", QrCode: "", }); const changeFormValue = (key, value) => { setFormData({ ...formData, [key]: value }); }; // نقوم بعمل الوظيفة الخاصة بالتحديث const [refresh, setRefresh] = useState(0); // لا بأس من استخدام هذه الطريقة حيث انها ليست من تسبب المشكلة const { NameOfroom, NumberOfroom, date, QrCode } = formData; return ( <ScrollView contentContainerStyle={{ paddingVertical: 20 }}> <View style={styles.container}> <View style={styles.titlescreen}> <ScreenTitle title='أضف حصة '></ScreenTitle> <Entypo name='add-to-list' size={70} color='black' style={styles.icontitle} /> </View> </View> <KeyboardAvoidingView behavior='padding' enabled> <View style={styles.styInbut}> <Inbut placeholder='إسم الحصة ' value={NameOfroom} onChangeText={(text) => changeFormValue("NameOfroom", text)} /> <Inbut placeholder='رقم الحصة ' value={NumberOfroom} onChangeText={(text) => changeFormValue("NumberOfroom", text)} /> <Inbut placeholder='تاريخ الحصة ' value={date} onChangeText={(text) => changeFormValue("date", text)} /> <View style={styles.Qrcodestyl}> <TextInput style={styles.TextInputStyle} value={QrCode} onChangeText={(text) => changeFormValue("Qrcode", text)} underlineColorAndroid='transparent' placeholder='Enter URL to Generate QR Code' /> <TouchableOpacity // نقوم بتغير قيمت المتغيير الذي عرفناه في الاعلى ثم تحديث الصفحة onPress={() => { _QRcode = QrCode; setRefresh(refresh + 1); }} activeOpacity={0.7} style={styles.button} > <Text style={styles.TextStyle}> Click Here To Generate QR Code </Text> </TouchableOpacity> {/*QRCode نقوم بوضع المتغير الذي عرفناه كقيمة للـ */} <QRCode value={_QRcode} size={250} bgColor='#000' fgColor='#fff' /> </View> </View> </KeyboardAvoidingView> </ScrollView> ); }
  18. لعمل هذه الدالة تحتاج لتنفيذ الخطوات التالية : إنشاء وظيفة لتوليد الرقم العشوائي : let numb; numb = Math.floor(Math.random() * 100); إن شاء وظيفة للتاكد من أنه يقبل القسمة على خمسه و إعادة ان شاء رقم جديد في حال انه لا يقبل القسمى على خمسه let numb; function generateRandomNumber() { numb = Math.floor(Math.random() * 100); checkIfIs5Multiple(); } function checkIfIs5Multiple() { if (numb / 5 === Math.floor(numb / 5) && numb !== 0) { // إلى هنا نكون وصلنا لرقم عشوائي ويقبل القسمة على 5 } else { generateRandomNumber(); } } وظيفة لحساب المضاعفات واخرى للتاكد من ان الرقم تحت ال 1000 : let Multiples = []; function checkIfUnder1000(number) { if (number + numb > 1000) { return; } else { doubling(number); } } function doubling(number) { Multiples.push(number + numb); checkIfUnder1000(number + numb); } ثم نربط الجميع مع بعضهم البعض ونقوم بطباعة المضاعفات : let numb; let Multiples = []; function generateRandomNumber() { numb = Math.floor(Math.random() * 100); checkIfIs5Multiple(); } function checkIfIs5Multiple() { if (numb / 5 === Math.floor(numb / 5) && numb !== 0) { checkIfUnder1000(numb); } else { generateRandomNumber(); } } function checkIfUnder1000(number) { if (number + numb > 1000) { return; } else { doubling(number); } } function doubling(number) { Multiples.push(number + numb); checkIfUnder1000(number + numb); } generateRandomNumber(); console.log(Multiples); اقرأ أيضاً :
  19. يبدو لي ان المشكلة هي انك تقوم بتعريف المتغير QRCode في الموضع : بعد ان كان معرف بالفعل من قبل : كما اظن انك لست بحاجة للسطر const { NameOfroom, NumberOfroom, date,QrCode}=formData; حيث يمكن الوصول لهذه المتغيرات من خلال الـ formData.QRCode formData.NameOfroom formData.NumberOfroom formData.date كما ان العنصر QRcode يحتاج ل value : <QRCode value="hey" />
  20. نعم بالفعل يوجد اضافة لفعل ذلك وتسمى copy anything to clipboard. بإمكانك تنزيلها واستخدامها بالشكل التالي : 1- قم بإضافة shortcode block : 2- قم بإضافة الكود التالي ضمن ال shortcode block : [copy text="Click Me" content="This is the content that will be copied"] حيث تضع بدل ال Click Me النصل الذي تريد أن يظهر على الصفحة. وتضع بدل ال This is the content that will be copied الكلام الذي تريده ان ينسخ.
  21. نعم يمكنك ذلك بإضافة الرمز # أثناء تعريف الـ properties والـ methods في الـ class : class Something { // Private properties إضافة #property; constructor(){ this.#property = "test"; } // Private methods إضافة #privateMethod() { return 'hello world'; } getPrivateMessage() { return this.#property; } } const instance = new Something(); console.log(instance.property); //=> undefined console.log(instance.privateMethod); //=> undefined console.log(instance.getPrivateMessage()); //=> test console.log(instance.#property); //=> Syntax error لاحظ انه لا يمكن الوصول للكل من الـ private properties و الـ private methods إلا من داخل class.
  22. Buffer هو مخزن مؤقت للبيانات التي في طريقها للعرض او للتخزين والتي يمكن تعديلها بشكل غير متسلسل قبل ان تقرأ بشكل متسلسل. يمكن عمل Buffer بالشكل التالي : char* buffer = new char[length]; ويمكنك حذفه بالشكل التالي : delete[ ] buffer; بينما الفرق بين الـ الفرق بين n\ و endl فهو ان الاولى (n\) تقوم بتخزين البيانات بشكل Buffer حتى الانتهاء منها ثم تقوم بعرضها (اي عمل الـ flushing وهي المسؤولة عن ظهور البيانات على الشاشة او حفظها بالملف) بينما الثانية (endl) تقوم بعمل flushing لكل عنصر على حدى وهذا يجعل من الاولى (n\) افضل من الثانية (endl) ولذلك ينصح دائماً باستخدامها. اقرا ايضا :
  23. إن crest react app تستخدم بالفعل ال webpack وتقوم بإعدادها لك بشكل افتراضي، وكذلك الأمر لست بحاجة لإعداد ال babble من الصفر حيث تقوم creat react app بالتكفل بها أيضا. لكنك تستطيع الوصول لل config الخاص بال webpack وكذلك ال Start Script و ال Build Script وال Test Script من خلال ملفات ال node_modules ضمن ملف ال react-scripts. يمكنك كذلك اعداد ال webpack من خلال عمل eject للـ crest react app من خلال الامر التالي : npm run eject واحذر ان هذه الخطوط تكون باتجاه واحد حيث لا يمكن التراجع عنها. بالاضافة الا انه يمكن اعداد ال webpack مع ال react و babble من الصفر إلا أنه معقد، والفكرة من crest react app هي ان لا تطر لفعل ذلك.
  24. لن استطيع مساعدتك اذا لم تكن تملك الملفات القابلة للتعديل الخاصة باللعبة. اذا كان الملف الخاص بالاعلانات الذي تحدثت عنه قابل للقراءة والتعديل ربما يمكنك تعديله بحيث تلغي ظهور الإعلانات.
  25. اخي قمت بفحص اللعبة ووجدت هذه مشكلة في ال console : YYGGames is not defined كما لاحظتُ ان اللعبة على السيرفر معمول لها build أي انها نسخة production لأن الاكواد صعبة القراءة من قبل المطورين. هل تعمل اللعبة بشكل جيد عندك على الحاسوب؟ أقصد نسخة ال production التي رفعتها على الاستضافة. إذا كانت لا تعمل على حاسوبك اصلا فالمشكلة الحاصلة عندك هي حين الانتقال من نسخة المطور لنسخة ال production أي عند عمل ال build للمشروع. للتاكد من ذلك قم بعمل build للمشروع و جرب تشغيل نسخة ال production على حاسبك، ثم اخبرني بالنتيجة.
×
×
  • أضف...