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

علي عبد محسن

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

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

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

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

    4

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

  1. يمكنك بناء هذا النظام من خلال العمل على عدة مواضع , الأول إنشاء الجداول ذات الصلة في قاعدة البيانات بحيث يرتبط جدول المنشورات posts مع جدول المستخدمين users من خلال معرف المستخدم وليكن ui الذي ستستعمله أيضاً للربط مع جدول الإشعارات notifications كما في المثال أدناه. قد تستعمل قاعداة بيانات من نوع sql مثل mysql أو non-sql مثل mongo والمثال يعطيك لمحة عن المفهوم العام للربط. users: id // معرف المستخدم username password email firstname lastname ... posts id ui // معرف المستخدم صاحب العلاقة title content ... notifications id uid // معرف المستخدم صاحب العلاقة message // نص الإشعار ... أيضا قد تحتاج تقنية لدفع الإشعارات من الواجهة الخلفية backend الى الأمامية frontend وقد يكون socket-io خياراً مناسباً ويمكنك الإطلاع هنا. في النهاية كل هذا رهن بما تستعمله من أدوات برمجية فقد تكون nodejs وإطار express حلاً مناسباً وكذلك إستعمال react.js على سبيل المثال لا الحصر.
  2. بعد فحص الكود يتبين وجود مشكلات عديدة: أولاً: هناك خطأ في التكويد حيث أن أحد الأقواس curly braces لم يتم أغلاقه مما يتسبب syntax error. ثانياً: أستيراد أدوات google في نهاية الملف أمر سيء لأن الكود يعمل مباشرة بعد التحميل وأنتي تضعين الأكواد في سكربت قبل سكربت تحميل google. أيضا لا حاجة لوضع async لنفس السبب. ثالثاً: المتغير mylocation يجب تعريفه مسبقاً ومن ثم تعديل قيمته في initMap ومن ثم الوصول الى قيمته عند إنشاء المتغير map في أخر سطر من السكربت وإلا سيظهر خطأ reference error رابعاً: الأفضل إزالة هذا الجزء &callback=initMap من رابط التحميل للمكتبة كونه يسبب error exception مرفق لك الكود بعد التعديل <!DOCTYPE html> <html> <head> <meta charset='utf-8'> <meta http-equiv='X-UA-Compatible' content='IE=edge'> <title>Map</title> <!-- <script src="jquery-3.6.1.js"></script> --> <script src="https://code.jquery.com/jquery-3.6.1.js" integrity="sha256-3zlB5s2uwoUzrXK3BT7AX3FyvojsraNFxCc2vC/7pNI=" crossorigin="anonymous"></script> <script src="https://maps.googleapis.com/maps/api/js?key=AIzV-URjeXR4q7AAG__6rf5nqkxQOED5W4"></script> <meta name='viewport' content='width=device-width, initial-scale=1'> <style> #map { height: 100%; } html, body { height: 100%; margin: 0; padding: 0; } </style> </head> <body> <div id="map"></div> <script> var map; var marker; var mylocation; var options = { enableHighAccuracy: true, timeout: 5000, maximumAge: 0 }; function error(err) { console.warn(`ERROR(${err.code}): ${err.message}`); } function success(position) { var { latitude, longitude } = position.coords; console.log (latitude) console.log (longitude); } navigator.geolocation.getCurrentPosition(success, error, options); function initMap(){ var mylocation={ zoom:10, center:{lat:success,lng:longitude}, } } var map= new google.maps.Map(document.getElementById('map'),mylocation); </script> </body> </html>
  3. إذا كان هذا الكود هو نفسه الذي تستعمله فهو ينقصه بعض الأشياء لكي يعمل بشكل صحيح. أولاً: الدالة map تقوم بعمل loop على مصفوفة ما وتعيد لك مصفوفة أخرى يمكنك تصميمها كما تريد من خلال تضمين البيانات داخل html tags طالما أننا نعمل داخل React. حيث يمكنك تهيئة عناصر المصفوفة الخارجة مثلاً لتكون block من عناصر html قبل أن تعمل render لها. ثانياً: يجب أن تحتوي الحاوية الرئيسية للعناصر الراجعة من كل دورة من دورات map على attribute تسمى key تسند له قيمة فريدة من نوعها مثلاً index العنصر داخل المصفوفة أو المعرف الخاص به id حتى تتمكن react من تعقبه في DOM.
  4. إذا كانت innerHTML تسبب مشاكل أمنية فهذا لا يعني بالضرورة أن علينا أن نستغني عنها ولكن نتعلم كيف نستعملها بشكل أمن, وإن إستعمال textContent كبديل هو أمر مناسب إذا كان الهدف هو فقط إضافة وتعديل النص. الخطر يكمن في حقن أكواد HTML أي markup injection وهذا ما تفعله innerHTML. ولكن الأمر يعتمد على ما تريد فعله لأن innerHTML بحد ذاتها هي أداة يمكن إستعمالها بشكل أمن طالما أن الصفحة أو التطبيق الذي تقوم بإنشاءه لا يتضمن مدخلات من قبل المستخدم خارج سيطرتك. بمعنى أخر إذا كنت لا تقوم بالتحقق أمنياً من مدخلات المستخدم وفي نفس الوقت كنت بحاجة لإضافة اكواد html ديناميكياً الى الصفحة قيد المعالجة فإنك بهذه الحالة قد تكون عرضة لهجمات XSS. التحقق من المدخلات ومنع إضافة أكواد بعينها لتنجب الخطر يكون من خلال كتابة حلك البرمجي الخاص المفصل على مقاس مشروعك, ولكن يمكنك بصورة عامة يمكنك إستعمال المكتبة DOMPurify لهذه المهمة حيث تقوم بتنقية المدخلات من أية أكواد خطيرة ويمكنك الإطلاع أكثر على الrepo الخاص بها هنا.
  5. بإستخدام css تستطيع تحقيق ذلك. مثلاً يكون position بالقيمة absolute وتكون opacity بالقيمة 0.5
  6. السبب في الخطأ هو أنك تحاول الوصول الى ملف غير موجود أو أنك تكتب مساره بطريقة خاطئة. قم بإظهار تركيب ملفات المشروع ثم قم بأخذ صورة للشاشة حتى نساعدك في كتابة مسار الملف بشكله الصحيح إو قم بمشاركة ملف المشروع مضغوطاً للإطلاع عليه.
  7. يمكنك إستعمال ImageBackground لتحميل خلفية للشاشة المعروضة ومن إسناد رابط الصورة في مشروعك (مثلاً مجلد assets) وبإستعمال require في الprop المسماة source وكما في المثال التالي import { ImageBackground, StyleSheet, View, Text } from 'react-native' export default function App() { let imageUrl= '../assets/background_image.png' // رابط الصورة في المشروع return ( <ImageBackground source={require(imageUrl)} resizeMode="repeat" style={styles.background} > <View> <Text> repeat أي محتوى تريد هنا. لاحظ أن الصورة في وضع react native أي سيتم تكرارها لملء الشاشة ويمكنك التعرف على باقي خواص هذا المكون في الموقع الرسمي ل </Text> </View> </ImageBackground> ) } const styles = StyleSheet.create({ // تعريف تنسيق الخلفية background: { flex: 1, width: '100%' } })
  8. أنت لم تشارك كود HTML وبالتالي تبقى الإجابة في إطار التكهن. ويبدو لي أن المشكلة تكمن في جزئين أولهما تركيب HTML والثاني الدالة showError . فإذا كان كل input مرتبط به small خاص به فعليك الوصول الى الأخير من خلال input أو من خلال المعرف id وليس من form كما تفعل, حتى تتمكن من تعديل النص في العنصر الصحيح, وإلا فمن الكود في الدالة showError نفهم أن لديك tag واحد من النوع small وأن النص فيه سيتم تعديله في كل مرة تستدعي فيها validation معين وينتهي الأمر برسالة الخطأ لأخر validation يتم تشغيله. إذا لم تعرف كيف تسقط هذا الحل على مشكلتك بتصرف, يرجى مشاركة كود HTML كاملاً مع JavaScript حتى نعطيك الحل بدقة أكبر.
  9. لحل هذه المشكلة تستطيع زيادة عٌرض h6 ليحتوي النص بنفس السطر دون الحاجه للنزول الى السطر التالي ومن خلال إسناد القيمة المناسبة للخاصية width في CSS. لاحظ الإضافة التالية على الكود الخاص بك ... #feature .fe-box h6 { display: inline-block; padding: 9px 8px 6px 8px; /* line-height: 1; */ border-radius: 4px; color: #088178; background-color: #fddde4; /* هنا نجعل العنصر يأخذ أقصى عرض يحتوي النص الذي بداخله */ width: max-content; } ... يمكنك أيضاً إسناد قيمة ثابتة لل width مثلاً 100px أو ما شابه ذلك للحصول على نفس النتيجة لكن قد تحتاج عندها الى العمل على media query لجعل التصميم أكثر إستجابة على شاشات أصغر حجماً
  10. يمكنك إنشاء حقل إختيار التأريخ الخاص بك بسهولة من خلال إستغلال المميزات التي يتيحها لك إطار العمل React في التحكم والتلاعب بحالة البيانات من خلال تفاعل المستخدم مع الواجهة الأمامية ولايختلف الكلام كثيراً عند الحديث عن React Native مع الأخذ بنظر الإعتبار إستعمال الـ widgets بدلاً من عناصر HTML في هذه الحالة. كما يمكنك إستعمال حلولاً جاهزة 3rd party solutions ومثال ذلك المكتبة react-native-community/datetimepicker وهي توفر بالضبط ماتريد في سؤالك, ويمكنك تثبيتها من خلال تنفيذ الأمر التالي npm install @react-native-community/datetimepicker --save بعد التثبيت تستطيع إستيراد الأداة وإستعمالها كمال في المثال التوضيحي التالي ... import DateTimePicker from '@react-native-community/datetimepicker'; export const App = () => { const [date, setDate] = useState(new Date(1598051730000)); // إنشاء الهوك الخاص بحفظ قيمة التأريخ const onChange = (event, selectedDate) => { // إنشاء دالة الإنصات الى المدخلات من قبل المستخدم const currentDate = selectedDate; setDate(currentDate); }; const showMode = (currentMode) => { // خيارات ظهور حقل إدخال التأريخ DateTimePickerAndroid.open({ value: date, onChange, mode: currentMode, is24Hour: true, }); }; const showDatepicker = () => { // عرض التأريخ showMode('date'); }; const showTimepicker = () => { // عرض الوقت showMode('time'); }; return ( <View> <Button onPress={showDatepicker} title="أختيار التأريخ" /> <Button onPress={showTimepicker} title="إختيار الوقت" /> <Text>المدخلات: {date.toLocaleString()}</Text> {/* عرض ما تم إختياره */} </View> ); }; ...
  11. يمكنك بسهولة إنشاء radio button في إطار العمل react native من خلال إستعمال widgets المتوفرة في الإطار المذكور بمعية التنسيق المناسب وبمساعدة JavaScript . لاحظ المثال التالي حيث نقوم بإنشاء الزر المطلوب من الصفر وإستعماله. import React, { useState } from "react"; import { StyleSheet, Text, View, TouchableOpacity } from "react-native"; const RadioButton = ({ onPress, selected, children }) => { // props في كل مرة نريد إستعمال المكون نقوم بإستيراده وتعويض قيم return ( <View style={styles.radioButtonContainer}> {/* ننشئ الحافظة الرئيسية */} <TouchableOpacity onPress={onPress} style={styles.radioButton}> {/* نفعل قابلية الضغط على أيقونة العنصر*/} {selected ? <View style={styles.radioButtonIcon} /> : null} </TouchableOpacity> <TouchableOpacity onPress={onPress}> {/* نفعل قابلية الضغط على العنصر*/} <Text style={styles.radioButtonText}>{children}</Text> {/* children أي محتوى نضعه داخل الزر */} {/* أي محتوى نضعه داخل الزر يكون قابل للضغط */} </TouchableOpacity> </View> ); }; const App = () => { // لنفرض أن لديك مجموعة من الأزراز يمثل كل منها أختياراً وتريد من المستخدم أن يختار واحد منها const [isLiked, setIsLiked] = useState([ { id: 1, value: true, name: "صنعاء", selected: false }, { id: 2, value: false, name: "تعز", selected: false }, { id: 3, value: false, name: "اليمن", selected: false } ]); const onRadioBtnClick = (item) => { // عندما يختار المستخدم أحد الأزرار يتم تحديث حالته فيصبح شكله مميزاً بحالة الإختيار بينما يتم إزالة الشكل المميز من باقي الأزرار let updatedState = isLiked.map((isLikedItem) => isLikedItem.id === item.id ? { ...isLikedItem, selected: true } : { ...isLikedItem, selected: false } ); setIsLiked(updatedState); }; return ( <View style={styles.app}> {isLiked.map((item) => ( //لها render لاحظ أننا نقوم بالمرور على جميع البيانات المعرفة للأزرار لغرض عمل <RadioButton onPress={() => onRadioBtnClick(item)} {/* ربط الضغط على الزر بدالة مسبقة التعريف لغرض تحديث حالة الزر */} selected={item.selected} key={item.id} > {item.name} {/* لاحظ أن المحتوى هنا هو أسم العنصر ولكن يمكن وضع أي شئ مثلاُ أيقونة أو نص */} </RadioButton> ))} </View> ); }; //HTML في Radio Button ليصبح شبيهاً الى حد ما بالزر التقليدي Radio Button هنا نصمم شكل ال const styles = StyleSheet.create({ app: { marginHorizontal: "auto", maxWidth: 500 }, header: { padding: 20 }, title: { fontWeight: "bold", fontSize: "1.5rem", marginVertical: "1em", textAlign: "center" }, radioButtonContainer: { flexDirection: "row", alignItems: "center", marginBottom: 5 }, radioButton: { height: 20, width: 20, backgroundColor: "#F8F8F8", borderRadius: 10, borderWidth: 1, borderColor: "#E6E6E6", alignItems: "center", justifyContent: "center" }, radioButtonIcon: { height: 14, width: 14, borderRadius: 7, backgroundColor: "#98CFB6" }, radioButtonText: { fontSize: 16, marginLeft: 16 }, text: { lineHeight: 30, fontSize: 20, marginVertical: 5 } }); export default App;
  12. هل أنت متأكد من وجود جدول بإسم tab1 في قاعدة البيانات؟ أيضا هل أنت متأكد من أنك تتصل بقاعدة البيانات الصحيحة(من خلال تضمين إسمها)؟ نسأل هذه الأسئلة لأن رسالة الخطأ تخبرك أنك تحاول البحث في جدول غير موجود.
  13. إذا كنت تريدهم على نفس الخط وبنفس الوقت متجاوب responsive تحتاج أولاً إعطاء الحافظة feature عرض كامل الشاشة %100 وتحديد خاصية flex-wrap بالقيمة wrap أي أن العناصر ستقوم بالنزول الى سطر جديد عندما لا يتسع عرض الشاشة لها جميعاً. يمكنك أيضاً إستعمال media query للتحكم أكثر بتجاوبية التصميم من خلال تعديل خواص flex box. #feature { width: 100%; /* تعديل عرض الحافظة */ display: flex; align-items: center; justify-content: space-between; /*flex-start الأفضل يكون */ flex-wrap: wrap; /* تعديل طريقة ملء الحافظة بالعناصر */ gap: 20px; }
  14. المشكلة في الكود أعلاه هو جزء HTML وليس javaScript. لاحظ أنك تحاول الإستماع الى form بواسطة submit ولكن في المقابل لايوجد input من نوع submit داخل ال form المستهدف. حيث أنك تضع input من نوع button ولحل المشكلة قم بإجراء التغيير التالي ... <input type="submit" value="Sign In" class="register-btn"> ...
  15. لا يُفهم الكثير من وصفك للمشكلة سوى أن الأمر لم يعمل لديك. حتى نشخص المشكلة نحتاج معرفة ما هي رسالة (أو رسائل) الخطأ التي تظهر لديك, أيضاً هل المشكلة في فشل عمل build للمشروع أم فقط أثناء التشغيل؟ يمكن أن يكون ألأمر عدم توافق إصدارات مثلاً , خصوصاً أن الفديو مضى عليه سنتين. يرجى مشاركة الرسائل التي تظهر في android studio عند عمل build إذا يحصل لديك فشل في هذه المرحلة.
  16. من خلال الصورة المرفقة نفهم أنك تريد إنشاء java command line based app أي تطبيق بلغة الجافا وطبيعة التحكم فيه تكون من خلال الأوامر command lines. أيضاً نلاحظ أن المستخدم يقوم بإنشاء بيانات معينة له القدرة على حذفها والبحث عنها بدلالات معينة ومنه يتضح ضرورة إستعمال قاعدة بيانات لغرض الإحتفاظ بالبيانات والبحث فيها. بالنسبة لقاعدة البيانات إذا كان التطبيق يعمل محلياً local فيمكنك مثلاً إستعمال SQLITE لهذا الغرض أما بالنسبة لإطار برمجة التطبيق فيمكنك مثلاً إستعمال picocli library. أيضا قد تحتاج الى عمل validation أي تحقق من المدخلات التي يقوم المستخدم بعملها مثلاً في حالة الأمر add book أنت تحتاج الى التأكد من كون المستخدم قد أدخل قيم معرفة تطابق المعايير المطلوبة في الجدول صاحب العلاقة في قاعدة البيانات. يمكنك البحث أكثر عن الأدوات التي ذكرناها لك في هذه الإجابة في محرك البحث google أو هنا و هنا
  17. عندما تعجبك template ما وتقرر إستعمالها في مشروعك فإنك غالباً ستحتفظ بالجزء المتعلق ب CSS كما هو والشيء نفسه يمكن أن يقال عن HTML لكن بطريقة مختلفة. والسبب في ذلك هو أن هناك جزء ثابت static ومثاله العناوين الرئيسية في الواجهة UI وجزء أخر ديناميكي dynamic مثل القوائم menus and lists التي تقوم بإضافته كنتيجة لactions من خلال تفاعل المستخدم مع الواجهة أو كنتيجة لجلب البيانات من الواجهة الخلفية backend. الجزء المتغير من الواجهة تحكمه JavaScript سواء كنت تستعمل جافاسكربت الأساسية أو لغات و مكتبات مبنية عليها مثل jQuery و أطر عمل freamworks مثل React.js , حيث ستعمل غالبية تعديلاتك في هذا الجزء.
  18. تتألف خاصية الإشعارات من عدة مستلزمات يجب توفرها في الواجهتين الأمامية والخلفية. ففي الواجهة الخلفية backend تحتاج إنشاء ألية لتوليد الإشعارات وحفظها وتعديل حالتها في قاعدة البيانات بالإضافة الى إرسالها الى المستخدمين المعنيين بها في الواجهة الأمامية ويمكنك على سبيل المثال لا الحصر إستعمال مكتبة socket.io للقيام بهذه المهمة. وفي الواجهة الامامية frontend تحتاج تصميم زر الإشعارات بواسطة HTML+CSS وبرمجة JavaScript لعمل التواصل مع الخدمة في backend ونفس سياق حديثنا عن socket.io نقوم بإستعمال الجزء المخصص للواجهة الامامية من هذه المكتبة. بطبيعة الحال لا نعلم ماذا تستعمل من أدوات برمجية في الواجهتين ولكن من خلال المفاتيح التي قدمناها لك هنا تستطيع البحث وأختيار ما يناسبك. يمكنك الإستعانة بالمثال التالي كطريقة عمل لبناء الميزة المطلوبة في frontend ... /* CSS */ .notification { /* تنسيق زر الإشعارات */ background-color: #555; color: white; text-decoration: none; padding: 15px 26px; position: relative; display: inline-block; border-radius: 2px; } .notification:hover { background: red; } .notification .badge { /* تنسيق عدد الإشعارات */ position: absolute; top: -10px; right: -10px; padding: 5px 10px; border-radius: 50%; background-color: red; color: white; } #list{ display:none; position:absolute; background-color:#ccc} /* الإشعارات لا تعرض حتى يضغط المستخدم على الزر*/ #container{ /* تنسيق الحافظة التي تجمع الزر والقائمة */ position:relative; } ... <!-- HTML --> ... <a onclick="showList()" href="#" class="notification"> <!-- العنصر الذي يقوم بدور الزر--> <span>إشعارات</span> <span id="count" class="badge">3</span> <!-- هنا نقوم بتعديل عدد الإشعارات من خلال جافاسكربت --> </a> <ul id="list"> <!-- قائمة الإشعارات --> <li>إشعار تم تحميله مسبقاً</li> </ul> ... <script> function showList(){ // تعريف دالة التحكم بعرض وإخفاء القائمة let list= document.getElementById("list"); list.style.display==="none" ? list.style.display="block" : list.style.display="none" } const socket = io(); // تعريف السوكت socket.on('notification', ({message}) => { // في كل مرة يصل فيها إشعار جديد تعمل هذه الدالة تلقائياً لإضافة الإشعار الجديد الى القائمة let list= document.getElementById("list"); let count= document.getElementById("count"); let item= document.createElement("li") // إنشاء عنصر جديد وإضافة الإشعار له item.textContent=message list.appendChild(item) // إضافة الإشعار الى القائمة count.textContent= parseInt(count.textContent) + 1 // زيادة عدد الإشعارات }); </script> ...
  19. يظهر scroll bar في الصفحة عمودياً إذا كان المحتوي أكبر من إرتفاع العنصر الحاوي له طولاً. والشيء نفسه يحصل إذا كان المحتوى عرضاً أكبر من عرض الحافظة ولكن يظهر ال bar أفقياً هذه المرة على شرط أن تكون الحاوية من نوع block-level. يمكنك التحكم بإظهار وإخفاء scroll bar من خلال خاصية css المسماة overflow ويمكنك إستعمال overflow-x للتحكم بحالته أفقياً ولجعله يظهر عندما يكون المحتوى أعرض من الحاوية المستهدفة المحيطة به , كما يمكن تطبيق هذا الكلام على الصفحة بأكملها. يمكنك إسناد القيمة scroll كما في المثال div { overflow: scroll; } لمزيد من المعلومات يمكنك الإطلاع هنا
  20. يمكنك إستخدام flex box لعمل الـ layout الرئيسية والحافظات containers التي تعلب صفحة ما, حيث تمكنك خصائص flex من جعل الصفحات تستجيب بشكل تلقائي على أحجام شاشات مختلفة بأقل جهد ويمكنك الإطلاع أكثر هنا. هذا بشكل عام ولكن ربما تحتاج إستعمال media queries لتغيير أحجام الخطوط ومسافات البعد بين أطار عنصر وأخر margins طبقاً للتصميم المطلوب ودرجة تعقيده. كلما زادت تفاصيل التصميم كلما أحتجت المزيد من التحكم ويمكنك ذلك بإستخدام media@.
  21. من المعلوم أن كود php سيتم تنفيذه في الخادم وطالما كان الخادم في domain خاص به فإذا كان الكود الخاص بك مصمم لعمل أي request من داخل الخادم فسيتم من الdomain الخاص بالخادم server, ولكن لكي تتمكن من عمل request على أي domain من جانب الcleint أو الزائر كما تسميه فتحتاج إرسال الdomain المراد الوصول إليه من الكود في مثالك الى متصفح الزائر مثلاً وعندها عن طريق javascript مثلاً أو ببساطة بواسطة html ( هذا يعتمد على تفصيل ماتريد أن تحققه) وهناك يتم عمل الrequest من ip الزائر. أي بكلام أخر كود php يتم تنفيذه في الخادم لتوليد عناصر html تظهر في متصفح الزائر عندما يفتح الصفحة ومنها يستطيع مثلاً فتح رابط domain معين بالنقر عليه أو ما شابه ذلك. <!DOCTYPE html> <html> <body> <?php $filesarray = array( // المصفوفة في سؤالك مكتوبة بشكل خاطيء وتم إصلاح الخطأ 'http://domain1.com', // , يجب إضافة الفاصلة بعد كل عنصر 'http://domain2.com', 'http://domain3.com', ); foreach($filesarray as $file){ if( strpos(file_get_contents($file),'class="vid-brahim"') !== false) { // أفترض أنك تحتاج هذا الشرط فوضعته مع الكود ولكن إذا لم يتحقق لن يظهر رابط الدومين $link= '<a href="'.$file.'"'.' >'.$file.'</a>'; // بناء الرابط ليظهر للمستخدم في المتصفح echo $link; // إظهار الرابط break; } } ?> </body> </html>
  22. لتعريف متغير في pyhton يجب أن يبدأ إسمه برمز مسموح به وأن لا يكون الإسم reserved أي مستخدم من قبل python. والمحارف المسموحة هي الإبجدية الإنجليزية a-z و الرمز _ أي underscore . print هو أسم دالة method وهي built-in تستخدم للطباعة في console. أيضا لا يمكنك أن تعرف متغير بدايته رقم مثل 3CPO ويتسبب هذا بsyntax error. ومن المهم الإنتباه أن .This is okay يحتوي على مسافات ونقطة ولايمكن إستعماله كأسم متغير variable. ولمزيد من الفهم جربهم جميعاً في python IDLE مثلاً أو ما يتوفر لديك.
  23. المشروع المسمى evaluate-news-nlp تنقصه بعض الحزم ليعمل بشكل صحيح بعد تثبيتها سيعمل معك الخادم سواء بإستخدام npm run build-dev أو npm run start. في ملف package.json أضيفي الحزم التالية (cors, node-fetch, dotenv) في قسم ال dependencies ثم إحفظي التغييرات ثم npm install في terminal ... "dependencies": { ... "cors": "^2.8.5", "dotenv": "^16.0.3", "node-fetch": "^2.6.6", ... } ... بعد إضافة الحزم أعلاه بنجاح سيعمل الخادم بشكل صحيح ومما يجدر الإنتباه إليه يجب تثبيت الإصدار 2.6.6 من node-fech وليس الأحدث حتى لا تحصل مشاكل في التشغيل.
  24. يرجى التفضل بإدراج المشروع مضغوطاً الى zip او rar بواسطة winrar او مايتوفر لديك كي نتمكن من تشخيص المشكلة. إذا تواجه مشكلة في ضغط الملفات يمكننا شرح ذلك في حال تعذر عليك.
  25. هل هناك أي رسالة خطأ تظهر لك طالما أنك تستعمل android studio هل جربت بواسطة emulator أم جهاز حقيقي؟ يفترض أنك لا تواجه مشاكل في تشغيل جملة sql المذكورة لكن أيضا يرجى الإنتباه لطريقة الكتابة syntax. حاول تجربة الكود التالي كما هو ... Cursor res = db.rawQuery("select col1 from tab1 where col1 regexp '(^|[[:space:]])m([![:space:]]|$)'", null); ...
×
×
  • أضف...