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

Wael Aljamal

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

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

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

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

    218

كل منشورات العضو Wael Aljamal

  1. حاول تحديث جميع المكتبات والبرنامج IDE أي محررات الأكواد التي تعمل بها، ثم حاول إنشاء مشروع جديد.
  2. كلاً من الدورتين تعمل على تقنيات مختلقة ولكن لغة جافاسكربت مشتركة بينهما، تطوير تطبيقات الجوال باستخدام تقنيات الويب: برمجة تطبيقات هاتف تعمل باستخدام تقنية cordova (كوردوفا) وهي طريقة لتجميع موقع الكتروني على شكل تطبيق حاتف يعمل بواسطة webView حيث يكون مكون من صفحات HTML - CSS - JS دورة تطوير التطبيقات باستخدام لغة Js: يتم فيها تعليم كل مايتعلق بلغة جافاسكربت ومكتباتها React لبرمجة المواقع، node لبرمجة المخدم، و React Native لبرمجة تطبيقات الهواتف يمكنك قراءة الإجابة التالية فيها المزيد من التفاصيل:
  3. تأكد هل البيئة المحلية لديك فيها نفس إصدار لغة البرمجة؟
  4. يوجد رابط يشرح الفروقات بين مختلف قواعد البيانات، إن اعتمد مشروعك على عمل علاقات بين جداول قاعدة البيانات يمكنك اتباع SQL. غير ذلك mongoDB
  5. طالما ذكرت أنه يوجد realtime أي مثل رسائل الدردشة والإشعارات فالأفضل أن تختار NodeJs لأنها تدعم ذلك مع web sockets و socket.io وتقدم سرعة استجابة عالية. كذلك هنا مجموعة إجابات لنفس السؤال، حيث وضع كل مدرب رأيه. NodeJs تعتمد على لغة جافاسكربت، فإن كنت تعرف أساسيات جافاسكربت فهذا جيد، ولكن بشكل عام يمكن تطبيق جميع المفاهيم البرمجية المطلوبة باستخدام أي لغة برمجة وأي قواعد بيانات، يفضل أن تختار ما تعلمته مسبقاً إن لم يكن لديك متسع من الوقت في تعلم تقنيات جديدة.
  6. تمام هذه المشكلة مه xamarin على الأغلب أنت تستخدم visual studio ابحث عن xamarin + visual studio + msb6006 java.exe exited with code 3 **** ربما يجب تفعيلMulti-Dex من Build > Android Build and check Enable Multi-Dex وإن كان proGard سبب المشكلة أوقفه مؤقتاً
  7. أهلا سلطان، لديك إصدار جافا حديث، ما هي البيئة التي تبني التطبيق فيها؟ فلاتر أو xamarin أو غيرها؟ إن كنت تستعمل proguard (طريقة تشفير وحماية للتطبيق) ربما هي نسخة قديمة ******** الملف proguard-android.txt *********** المسارفي /(Path to your Android SDK Folder)/tools/proguard ********* ضع فيه -keep public class com.google.android.gms.* { public *; } -dontwarn com.google.android.gms.** # This is a configuration file for ProGuard. # http://proguard.sourceforge.net/index.html#manual/usage.html -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -verbose # Optimization is turned off by default. Dex does not like code run # through the ProGuard optimize and preverify steps (and performs some # of these optimizations on its own). -dontoptimize -dontpreverify # Note that if you want to enable optimization, you cannot just # include optimization flags in your own project configuration file; # instead you will need to point to the # "proguard-android-optimize.txt" file instead of this one from your # project.properties file. -keepattributes *Annotation* -keep public class com.google.vending.licensing.ILicensingService -keep public class com.android.vending.licensing.ILicensingService # For native methods, see http://proguard.sourceforge.net/manual/examples.html#native -keepclasseswithmembernames class * { native <methods>; } # keep setters in Views so that animations can still work. # see http://proguard.sourceforge.net/manual/examples.html#beans -keepclassmembers public class * extends android.view.View { void set*(***); *** get*(); } # We want to keep methods in Activity that could be used in the XML attribute onClick -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } # For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keepclassmembers class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator CREATOR; } -keepclassmembers class **.R$* { public static <fields>; } # The support library contains references to newer platform versions. # Don't warn about those in case this app is linking against an older # platform version. We know about them, and they are safe. -dontwarn android.support.** # Understand the @Keep support annotation. -keep class android.support.annotation.Keep -keep @android.support.annotation.Keep class * {*;} -keepclasseswithmembers class * { @android.support.annotation.Keep <methods>; } -keepclasseswithmembers class * { @android.support.annotation.Keep <fields>; } -keepclasseswithmembers class * { @android.support.annotation.Keep <init>(...); } لتحميل proGard: proguard/files وربما الخطأ بسبب عدم تضمين ndk حاول حسب التالي:
  8. لدعم استعمال الصور في مشروع يوجد عدة خطوات للقيام بها، هذا الموضوع متغير حسب نوع مدير قواعد البيانات ولغات البرمجية المستخدمة .. يمكن الاعتماد على الأفكار التالية: لا يتم تخزين الصور في قاعدة البيانات نضع في قاعدة البيانات اسم الصورة فقط ليكون حجم قاعدة البيانات أقل وبالتالي أخف عبئ على مدير قواعد البيانات يتم رفع ملف الصورة بشكل منفصل كملف يتم تمريره على المخدم نربط بين ملف الصورة وقاعدة البيانات عن طريق إما مسار الصورة أو اسمها يتم تخزين الصورة على المخدم كملف ضمن نظام إداة الملفات File Sytem مثلما ترى الصور ضمن مجلدات لديك.. إن كنت تستخدم مكتبة تعتمد أسلوب/هيكلية النماذج نضيف خاصية الصورة كسلسلة نصية لاحظ حقل avatar في بنية وثيقة المستخدم const ModelSchema = new mongoose.Schema({ name: { type: String, required: true, maxlength: 20 }, username: { type: String, required: true, unique: true, maxlength: 20 }, password: { type: String, required: true }, about: { type: String, maxlength: 100 }, avatar: String, }); ثم يصبح له حقل في قاعدة البيانات، وباقي الأمور هي عملية رفع الصورة، ممكن نستخدم مكتبة multer في قسم back end const multer = require('multer'); /** * Handel multipart/form-data. الوصول للتخزين */ const storage = multer.diskStorage({ destination: 'public/uploads/', filename: function (req, file, cb) { cb(null, Date.now() + path.extname(file.originalname)) } }); /** * User profile middleware. رفع الصورة */ const upload = multer({ limits: { fileSize: 1024 * 1024 }, storage: storage , fileFilter: (req, file, cb) => { let fileTypes = /jpeg|jpg|png/; let mimeType = fileTypes.test(file.mimetype); let extname = fileTypes.test(path.extname(file.originalname).toLowerCase()); if (mimeType && extname) return cb(null, true); cb(new Error('غبر مسموح رفع هذا الملف')); }, }); أما في Front end نستخدم form data + axios يحدد المستخدم رابط ملف الصورة نضيف مسار الصورة لحالة التطبيق يتم تقسيم الملف لأجزاء صغيرة وإرفاقه مع الطلبية onImageChange = e => { if (e.target.files && e.target.files[0]) { this.setState({ image: URL.createObjectURL(e.target.files[0]), avatar: e.target.files[0] }); } }; /** * Change form handler * @param e */ onChange = e => this.setState({[e.target.name]: e.target.value, error: null}); /** * Form submit handler. * @param e */ onSubmit = e => { e.preventDefault(); const data = new FormData(); data.append('name', this.state.name); data.append('about', this.state.about); if (this.state.avatar) data.append('avatar', this.state.avatar, this.state.avatar.name); axios.post('/api/account', data) .then(this.props.toggle) .catch(err => this.setState({ error: err.response.data.message })); }; يمكنك الاستفادة من السؤال: أي بيانات غير نصية نخزنها خارج قاعدة البيانات. يوجد أكثر من طريقة برفع الملف مثل multer وغيرها من المكتبات
  9. تقوم شركة حسوب بطرح المشاريع خاصتها للمستقلين على موقع مستقل. تم شرح آلية المشاركة في الأكاديمية لكتابة المقالات من خلال صفحة: اكتب معنا، حيث يتم التوظيف على موقع مستقل. يوجد أيضاً موقع بعيد للتوظيف عن بُعد.
  10. ما هو إصدار جافا الذي تستعملينه؟ يمكنك تنفيذ الأمر التالي: java -version مثال: C:\Users\TEC-GATE>java -version java version "1.8.0_281" Java(TM) SE Runtime Environment (build 1.8.0_281-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode) والأمر javac -version javac 1.8.0_281 لدي الإصدار 1.8 مالذي يظهر لديك
  11. لدينا تعليمتين برمجيتين هما الحلقة و الطباعة for x in range(a, b, c): print(x) حيث أن range تأخذ الوسطاء بالترتيب: a بداية المجال b نهاية المجال c الخطوة (القفزة) step حالات خاصة: في حال تمرير a فقط، سيتم العد من 0 حتى a-1 أي مثلا range 6 سيعطي 0,1,2,3,4,5 في حال تمرير a,b ستكون قيمة الخطوة الافتراضية 1
  12. ربما المشكلة في مسار الصور الممررة للدالة unlink أي المسار يتم استدعائه من سياق مختلف.. وربما ليس لديك صلاحية لحذف الملف.. لعمل تغيير الصلاحية نستخدم chown $path = '.path/image.png'; chown($path, 666); // تعديل الصلاحية if (unlink($path)) { echo 'success'; } else { echo 'fail'; } وإن ظهر خطأ مثل Warning: unlink() expects parameter 1 to be a valid path, resource Resource id #3 cannot be deleted due to an error حاول تجهيز مؤشر على الملف كالتالي: $file_pointer = fopen('abcd.txt', 'w+'); if (!unlink($file_pointer)) { echo ("$file_pointer خطأ لم يتم الحذف"); } else { echo ("$file_pointer تم الحذف); } كما يمكنك الاستفادة من سؤالين لنفس المشكلة: يمكنك التأكد من أن الملف موجود قبل الحذف لمعرفة هل المسار سليم أم لا: $Path = './path/image.png'; if (file_exists($Path)){ if (unlink($Path)) { echo "تم الحذف"; } else { echo "فشل حذف"; } } else { echo "مسار خطأ"; }
  13. كمثل، لنفرض استعلام من قاعدة البيانات يعيد عدد المنتجات مع بياناتهم، ثم نريد حلقة تكرارية لطباعة بياناتهم.. $data = "select count(1) as cnt , * from products where cutomer_id = 5"; $count = $data["cnt"]; for ( $i = 0 ; $i < $count ; $i++ ) { ..... }
  14. أرجو إضافة شرح لكيفية تمريرك لمسار الصورة في JSON.. وكمثال بسيط لتمرير اسم الصورة: { "imageUrl": "img.jpg", .... } إن كنت تستخدم مخدم express: يمكن تخديم الملفات الساكنة مثل الصور وتحديد مجلد لها، مثلا ضع الصور العامة في المسار: public/images ثم: تنصيب الحزمة npm install express تشغيل المخدم node server.js *********************************** // تضمين الوحدة const express = require('express'); // إنشاء المخدم const app = express(); // تحديد المنفذ const PORT = 3000; // تخديم الملفات الساكنة // تحديد مجلد تخديم الصور app.use(express.static('public')); app.use('/images', express.static('images')); // ربط المخدم مع المنفذ app.listen(PORT, () => { console.log(`Running server on PORT ${PORT}...`); }) في المثال الأول، أصبح طلب روابط الصور مباشر وعام أي متاح للجميع. مثلاً طلب صورة بالشكل: http://localhost:3000/images/hsoub.png سيتم عرضها مباشرة. لجعل المخدم يعيد صورة عند طلب مسار معين، كمثال: var filepath = '~/path/to/image.png' app.get('/path/image', function (req, res) { res.sendFile(filepath); }) إن كان رابط الصورة تريده بشكل كامل، عليك كتابة البروتوكول و الدومين وكامل المسار .. ثم طلبه من الواجهات الأمامية.
  15. regex أو regexp هي طريقة لمطابقة السلاسل النصية بشكل كامل أو جزئي بالاعتماد على خليط من المحارف والأرقام و رموز الاستبدال والتكرار التي تمثل مجتمعة هيكلية لعمل نمط تطابق مع نصوص لاستخراج الكلمات المتشابهة التي تنتمي لنفس نمط البحث. يطلق عليها باللغة العربية التعابير النمطية أو التعابير المنتظمة أو أحرف البدل. في حال التعامل معها للبحث في نص باللغة الإنكليزية نستخدم محارف جدول ASCII أي الحروف الإنكليزية abcd ... a-z ABCD ... A-Z 123 0-9 !@#$%^&*() .. أما في حال البحث في لغات أخرى، تختلف قيم المحارف حسب اللغات الطبيعية فمثلاً للبحث في نص باللغة العربية نستخدم مجال محارف Unicode وغيره حسب اللغة. محارف التحكم الأساسية: محرف (أو) بشكل محرف العمود ( "|" ) المنطقي Boolean ويُستخدم لإيجاد ناتج بحث من أحد خيارين ويكثر استخدامه في الكلمات التي يمكن أن تُكتب بشكلين أو أكثر مثل الكلمة الإنكليزية للون الرمادي gray | grey فوجود هذا التعبير، يعمل على البحث عن أحد الشكلين للكلمة. التجميع Grouping باستخدام ( ) الأقواس المدورة / الدائرية حيث نقوم بالتعبير عن مجموعة بحث جزئية مثلاً وضع gr(a|e)y هنا سيتم عمل مطابقة لأول حرفين g - r ثم مجموعة اختيارية من a - e ثم y محددات الكميات / التكرارات: إشارة الاستفهام ? وهي محرف تحكم، نكتبها بعد النمط الجزئي أو الحرف مثلاً وهي تقبل ظهور محرف أو عدم ظهوره ضمن سلسلة نصية (أي يكون لدينا محرف اختياري) أي يمكن للمحرف أن يتواجد 0 أو 1 مرة ليتم قبول النمط مثل كلمة اللون باللغة الإنكليزية colou?r حيث يمكن كتابتها بشكلين مع أو بدون حرف u وكلاً من ناتجي البحث مقبول النجمة * تقبل وجود النمط / المحرف بعدد تكرارات من 0 أي يمكن ألا يظهر، إلى اللانهاية (أي بدون تحديد عدد أعظمي لتكرار النمط الجزئي) مثلا النمط ab*c ووجود النجمة بعد حرف b أي يمكن أن يتكرر b من 0 إلى عدد غير محدد من المرات حيث يقبل السلاسل التالية مثلًا ac, abc, abbc, abbbc عدد مرات ظهور b غير محدد. إشارة الجمع أو زائد + تقبل وجود النمط / المحرف بعدد تكرارات من 1 أي يمكن أن يظهر المحرف مرة واحدة على الأقل، إلى اللانهاية (أي بدون تحديد عدد أعظمي لتكرار النمط الجزئي) مثلا النمط ab+c ووجود زائد بعد حرف b أي يمكن أن تم تكرار b من 1 إلى عدد غير محدد من المرات حيث يقبل السلاسل التالية مثلًا abc, abbc, abbbc عدد مرات ظهور b مرة على الأقل، أي على عكس النجمة الحد الأدنى هو تكرار واحد على الأقل. مجال تكرار محدد، يمكن استعمال الأقواس المجعدة curly brackets { } مع وضع رقمين بينهما فاصلة يمثلان الحد الأدنى والأعلى للتكرار المسموع به للمجموعة الجزئية أو المحرف {n} تكرار بالضبط n مطابقة {min,} تحديد الحد الأدنى {,max} تحديد الحد الأعلى {min,max} تحديد مجال بين حد أدنى و حد أعلى مثلاً للبحث عن hello يمكن كتابة hel{2}o => hello ^^ سيتم البحث عن تطابق للنمط مع حرفين L النقطة "." وتعبر عن محرف وحيد غير محدد أي محرف ممكن أن يظهر مثلا a.c يمكن أن يظهر بين a و b أي محرف آخر مثل aac abc acc aec adc aoc ^ متغير قبول محرف من عدة محارف باستخدام الأقواس المربعة [ ] مثلا في حال كتابة [abc] => سيتم قبول أحد الرموز التالية a أو b أو c تحديد مجال من المحارف المتتالية أبجدياً أو رقميا المطابقة لأحد الأحرف <= المجال a-c => a b c b-e => b c d e A-D => A B C D A-Z => جميع الأحرف بشكل كبير capital a-z => جميع الأحرف بشكل صغير small 0-9 => أي رقم . عدم انتماء لمجال، لا نريد للحرف الحالي أن يكون abc نكتب [^abc] يختلف تطبيقه من لغة برمجة لأخرى بشكل بيسط وحسب المكتبة التي تريد استعمالها لكل منها يمثل المحرف ^ بداية النمط ويمثل $ نهايته مثال لاختبار هل النص التالي يمثل بريد الكتروني "^ [a-zA-Z0-9_.+-]+ @ [a-zA-Z0-9-]+ \. [a-zA-Z0-9-.]+ $" ^ ^^^^^^^^^^^^^^^^ ^ ^^^^^^^^^^^^^ ^^ ^^^^^^^^^^^^^^ ^ 1 2 3 4 5 6 7 حيث نلاحظ محرف بداية ^ مجال من أحرف ومحارف مكرر على الأقل مرة واحدة (كل حرف إما يتبع لمجال أو يكون _ + - .) محرف @ مجال مثل 2 النقطة نفسها مع محرف هروب مجال محارف آخر محرف النهاية $
  16. مكتبة kivy متوافقة كحد أدنى مع openGL الإصدار 2. هل أنت متأكد من تثبيت openGL بطريقة صحيحة؟ لاحظ أنها مرتبطة بنوعية كرت الشاشة: opengl#Windows يمكنك تثبيت برنامج OpenGL Extensions Viewer لمعرفة معلومات أكثر عن الإصدار الذي تستخدمه
  17. العناصر التي نريد منهم ان يتم وضعهم بنفس المستوى، اي نفس السطر، نجعل خاصية العرض لهم display تساوي inline-block لتسمح بتجاول العناصر سوية، لأن block لوحدها تضع كل عنصر لوحدة في سطر منفصل. حاولي ذلك, خاصية العرض display في css أرجو منك تبديل الصور بالشيفرات البرمجية في وصف المشكلة
  18. لنحاول تبسيط البرنامج، سيكون لدينا 3 أسطر، الاول و الثالث فيه عدد من النجوم، والسطر الثاني يبدأ وينتهي بنجمعة، وفيه كلمة في المنتصف. نستخدم المحرف n\ للانتقال لسطر جديد اثناء الطباعة في console يمكنك استخدام حلقة for لطباعة عدد محدد من النجوم لكل سطر شارك معنا الشيفرة البرمجية لمساعدتك في إصلاح الأخطاء، عليك البدء بنفسك ومن ثم نساعدك،
  19. تم شرح آلية المشاركة في الأكاديمية لكتابة المقالات من خلال صفحة: اكتب معنا، حيث يتم التوظيف على موقع مستقل.
  20. أحيانا اختيار توافقية مع نظام تشغيل قديم، كما في المشكلة السابقة، تحديد ios ليتوافق مع الإصدار 10 يتطلب عمليات أكثر عند بناء المشروع، لذلك حدد إصدار ادنى متوافق مع هاتفك + المحاكي. ويمكنك تجريب تعديل السطر التالي في pubspec.yaml في الخاصية environment: نحدد sdk: '>=2.12.0 <3.0.0'
  21. نعم تم حل المشكلة، يمكنك إعادة اللغة للعربية بمجرد تشغيل المحاكي بشكل صحيح.
  22. بصراحة درجة إتقان الشخص لمهارة معينة يعتمد على هذا الشخص نفسه، كيف يتدرب و يتعلم ويتحمل ظهور المشاكل البرمجية و الصبر والبحث عن حلول والتجريب. محتوى الدورة كافي ويمكنك من تطبيق ماتشاء، كما يتم التديب على استعمال مكونات خارجية و فهمها و استعمالها، وهذا فعليا مهارة للمطورين في استعمال قوالب و مكتبات جاهزة توفر عليهم الوقت و الجهد وتزيد الإنتاجية.
  23. أنت تقصد الخطأ غير مرفق مع السؤال. لأن هذا المتغير يحمل البيانات المرفقة مع الطلب وبنيتها غير ملائمة للخدمة. يمكنك وضع تعليق توضيحي إن أردت، شكرا لك
×
×
  • أضف...