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

Wael Aljamal

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

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

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

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

    218

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

  1. أي نوع من البرمجة تقصد؟ برمجة تخصصية في مجال الميكانيك أو شيئ آخر.
  2. المختصر: توقيع التطبيق بناء التطبيق عن طريق flutter build appbundle ________ توقيع التطبيق: قبل رفع التطبيق على متجر play store يجب توقيع التطبيق وهي خطوة إجباية. التوثيق لعملية التوقيع الرقمي: signing-flutter-app أو من هنا: generate-key-android تتجلى بعمل مفتاح خاص بالتطبيق، حيث تكون الخطوات هي إدخال بيانات كإجابة على بعض الأسئلة.. بعد بتنفيذ التعليمة التالية (MacOS) تشبهها الخاصى بنظام ويندوز. keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key ثم يجب فتح Gradle و تشغيل Task الخاصة بتوقيع التطبيق حسب التوثيق.. في حال وجود مشاكل أو تفاصيل لا تعرفها يوجد العديد من الشروحات و الموضوع بسيط. بالنسبة لبناء التطبيق: توثيق تصدير نسخة إنتاجية معدة للرفع على المتجر : flutter/deployment/android ليقبل المتجر رفع نسخة من التطبيق يجب أن تكون من النوع release (building-app-for-release) أي تمرير هذا المعامل مع أمر البناء كما ذكرت. ولكن التوثيق ذكر أيضا أن app Bundle هو أفضل (مفضل) للمتجر. app Bundle والتي تعطي ملف لاحقته aab. يعتبر النسخة الأحدث لتصدير تطبيقات أندرويد و يكون التطبيق بحجم أصغر. توثيق بناء app Bundle من هنا : app Bundle. ماذا يحوي app Bundle؟ Dart code Flutter runtime compiled for: armeabi-v7a (ARM 32-bit). arm64-v8a (ARM 64-bit). x86-64 (x86 64-bit). نصائح و إرشادات رفع تطبيق app Bindle من هنا: upload-bundle والتي تبني كل ما تريد بتعليمة واحدة: flutter build appbundle في حال أردت بناء التطبيق عن طريق APK و إصدار 3 نسخ (كل نسخة موجهة لمعمارية مختلفة مثل القائمة السابقة) يجب إستخدام shrink (لكنها مفعلة تلقائيا عند استخدام Android Gradle plugin 3.4.0 or higher) أي يتوجب عليك فقط بناء التطبيق للنشر: flutter build apk --release * تعتبر R8 خاصية تجزئة التطبيقات مفعلة تلقائيا لكل من APK - AAB ولا داعِ لتمرير معامل خاص بالتقسم عند البناء لا تنسى تعديل اسم التطبيق و bundle (الاسم البرمجي android:name = com.company.app) في كل من androidMainfest & Gradle التوثيق : android/manifest
  3. الأسئلة سهلة و متدرجة الصعوبة أين تعترضك مشكلة في الحل؟ يمكننا مساعدتك بعد أن تقومي بمحاولتك ز مشاركة البرنامج معنا لتصليح الأخطاء
  4. أولا يمكننا ترتيب المصفوفة ومن ثم حساب مجموع مجال محدد ضمنها، كما الشيفرة التالية: def Max3Sum(arr): arr_sorted = sorted(arr) # [1, 2, 3, 4, 5] return sum(arr_sorted[-3:]) # -3 لنجمع آخر العناصر و التي تكون قيمتها الأكبر بعد الترتيب التصاعدي print(Max3Sum([5,2,4,3,1])) نعمل نسخة مرتة من المصفوفة و نجمع آخر X عنصر (يمكن تمرير وسيط لتحديد عدد الأعداد التي نريد جمعها لتصبح الدالة ديناميكية أكثر) def MaXSum(arr, X): arr_sorted = sorted(arr) # [1, 2, 3, 4, 5] return sum(arr_sorted[-X:]) # -X لنجمع آخر العناصر و التي تكون قيمتها الأكبر بعد الترتيب التصاعدي print(MaxXSum([5,2,4,3,1], X))
  5. لمعرفة فيما إذا كان الموقع يستخدم word press theme يمكنك استخدام الخدمة WordPress Theme Detector يتوجب عليك فقط وضع رابط الموقع و الانتظار بضع ثواني حالما يتم فحصه. موقع بوابة الحقيقة يستخدم وورد بريس و اسم الثيمة هو Zmord-v2 تكلفة إنشاء الموقع متغيرة حسب قوة الاستضافة و مساحة التخزين و تختلف كلفة البرمجة من شخص لآخر، يمكنك عرض المشروع في مستقل، وبعد تلقِ العروض سيكون لك فكرة عن التكلفة.
  6. سأحاول تبسيط الأمر و تشبيهه مع وسائط التواصل الاجتماعي مثلا فيسبوم / تويتر (إجابة غير متخصصة) مثل منشور من حساب على الفيسبوك، هو مجموعة من البيانات نقوم بتعريفها بإعطائها رقم خاص مثل المعرف id ولها مالك وهو الشخص الذي قام بالنشر و له سماحية الوصول للبيانات و تعديلها و حذفها .. يمكن أن تحوي على صورة أو مجموعة صور. هي خاصية تتبع للمنشور و تحدد نوعه / الفصيلة التي ينتمي لها ويوفر ووردبريس مجموعة من التصنيفات. لهذا الوسم العديد من الوظائف، أكثر من أن تُعد، فهو شهير باستخدامه لوصف الصفحات مما يسهل عمل محركات البحث كما في المثال التالي: <meta name="description" content="A general guide on the use of meta tags in html pages"> كما يُمكّنك من وضع اسم الكاتب في الصفحة كما في المثال التالي: <meta name="author" content="Shaumik Daityari"> كما أن هذا الوسم شهير مع سمة charset لتحديد ترميز الصفحة، حيث يستخدم في أغلب المواقع العربية: <meta charset="UTF-8"> كما يسمح لك هذا الوسم بالتحكم في رؤوس HTTP كما في المثال التالي: <meta http-equiv="refresh" content="5;url=http://www.sitepoint.com/"> تستخدم بعض المواقع سمة keywords مع هذا الوسم، على الرغم من أن محرك بحث جوجل لا ينظر إلى هذا السطر: <meta name="keywords" content="web,design,html,css,html5,development"> في النهاية فإن بعض مواقع التواصل الإجتماعي تستخدم هذا الوسم كما هي الحال مع فيس بوك وتويتر لوصف البيانات التي تظهر على شبكتها. مقالات للمطالعة: شرح العنصر meta من موسوعة حسوب مقالة من أكاديمية حسوب : استخدام التصنيفات والوسوم بفعالية في ووردبريس مقالة من أكاديمية حسوب : أهمية صفحة إعدادات القراءة في ووردبريس وكيفية ضبطها مقالة من أكاديمية حسوب : الاستخدام الأمثل للفئات والوسوم والتصنيفات في ووردبريس
  7. اختبار إذا كانت السلسلة فارغة اختبار طول السلسلة زوجي / فردي حساب نصف الطول مقارنة كل عنصر مع ما يقابله أرجو منك تجريب كتابة الحل أولا و الاعتماد علي نفسك ثم يمكنك الاستعانة بالشيفرة التالية public static bool IsGood(string text) { if (text == null) return false; // فارغة if (text.length() % 2 == 1) return false; // طول فردي int shift = text.length() / 2; // طول نصف السلسلة for (int i=0;i< shift; i++) { if (text[i] != text[i+shift]) { // نقارن العنصر مع العنصر المقابل من النصف الآخر return false; } } return true; // اجتازت جميع اختبارات الفشل }
  8. مع كل إصدار من جافا يصدر تعديلات على كيفية ترجمة الشيفرات البرمجية و تحويل الملفات التي تحوي الأصناف أي ملفات java إلى Byte code. الإصدار الأقدم لا يستطيع تشغيل الأحدث. لمحة عن الإصدارارت المختلفة: ClassVersion => java jdk 50 = Java 6 51 = Java 7 52 = Java 8 53 = Java 9 54 = Java 10 55 = Java 11 56 = Java 12 سبب المشكلة: تحاول تشغيل برنامج جافا عن طريق JRE أو java run time environment بإصدار أقدم من إصدار JDK الذي قام بترجمة الشيفرة البرمجية. في حال كنت تستخدم أي بيئة للتنفيذ IDE / NetBeans / eclipse فإنها لا تأخذ الإصدار من مسار ال Environment Variables إنما عليك التعديل من إعدادت المشروع، يوجد ملف و إعدادت افتراضية. للتأكد من إصدار جافا لديك و عمل المسار يمكنك تنفيذ التعليمات التالية في CMD محرر الأوامر echo %JAVA_HOME% java -version javac -version لتنفيذ المشروع/البرنامج من خلال JDK 15 يمكنك عمل التالي من cmd بتنفيذه مباشرة.. C:\Program Files\Java\jdk-15.0.2\bin\java path\toyour\project\Main.java لعمل ترجمة نستخدم javac C:\Program Files\Java\jdk-15.0.2\bin\javac path\toyour\project\Main.java ----------- عندما تريد إصدار مشروع بلغة جافا و لتضمن عمله على إصدارات أقدم قم بتنفيذ التعليمة التالية: javac --release 8 project_path/MajorMinorApp.java بهذه الطريقة أي المعامل release مع تمرير رقم الإصدار يصدر برنامج متوافق مع الإصدارات الأقدم.
  9. هل يمكنك مشاركة ملف pod file للاطلاع عليه، شكرا لك
  10. هذه هي قدرة الجهاز لديك، السبب هو أن سرعة الذاكرة RAM كبير جدا مقارنة مع القرص الصلب Hard Disk وعندما لا يجد البرنامج ذاكرة RAM كافية، يقوم بالتخزين على القرص الصلب (لتعويض نقص RAM) بعد إعطائه السماحية كم فعلت أنت. إذا كنت ترغب بالاطلاع على تفاصيل أكثر للمشكلة يمكنك تصفح Virtual Memory وهي آلية نظام التشغيل في حل مشكلة نقص الذاكرة. بالتوفيق
  11. يخبرك البرنامج بوجود مشكلة في حجم الذاكرة الرئيسية RAM وهي غير كافية لمعالجة الصورة حيث أن أبعادها كبيرة أي أن حجمها كبير.. مما سيسبب بطئاً في المعالجة. يقترح عليك زيادة حجم الRAM. يقترح تفعيل خيار Disk Cache من قائمة Media & Disk Cache Panel اختر الصندوق الأول Enable Disk Cache للتفعيل و الخيارين الآخرين لحذف التخزين المؤقت.ستكون المعالجة بطيئة بعض الشيئ.
  12. يجب أن يكون الحقلين متطابقين من حيث البنية ( الأنماط - عدد المحارف (طول المتغير و عدد الأحرف) ) و الخصائص أيضا .. ولحل مشكلة وجود مفاتح أساسية و ثانوية قم بإزالة جميع هذه المفاتيح و أعد تشكيلها (أي فك الربط بين الجداول مؤقتا) .. drop foreign key .. drop primary key .. ثم create primary key .. create foreign key ..
  13. لربما المثال مختلف، فإن PHP لا تسمح بتحميل جزء من الملف.
  14. هل يمكنك عرض ماذا يظهر في المتصفح لديك و الشيفرة البرمجية الموافقة له
  15. يمكن عمل استبدال لأي قيمة في ملف Excle بعد الضغط على ctrl + H تظهر نافذة نضع فيها النص القديم المطلوب تعديله و النص الجديد الذي سيتم استبداله به. أما بالنسبة لدالة الاستبدال يوجد دالة Replace والتي شكلها العام كالتالي: = REPLACE(old_text, start_num, num_chars, new_text) Old_text : النص القديم أو مرجع لخلية ما Start_num : موقع أول محرف من النص القديم الذي تريد تبديله Num_chars : عدد الأحرف التي تود تبديلها New_text : النص الجديد يوجد مقالة باسم excel-replace-substitute-functions يمكنك البحث فيها
  16. يمكنك تثبيت برنامج share it على كل من الجهازين ثم يتم نقل الملفات عن طريق اتصال wifi. طبعا نفس البرنامج يتوفر لعدد كبير من المنصات, تطبيق الهاتف يختلف عن تطبيق الحاسوب و مثله تطبيق zapya. فائدة هذه التطبيقات هي نقل الملفات بين مختلف أنظمة التشغيل للهواتف و الحواسيب وغير محصورة بشئ محدد.
  17. سبب المشكلة هو محتوى خاطئ لملف XML وربما هو ملف فارغ أو ليس Valid. أو تمت كتابته بترميز مختلف عن النمط الافتراضي الذي يعمل به FileReader لتعديل ترميز قناة الاتصال إلى UTF-8 قبل قراءة الملف نستدعي: is.setEncoding("UTF-8");
  18. يبدو أن Eclipse لا يتعرف على مسار الصنف الرئيسي و عليك تحديده يدويا.. انتقل مثل القائمة التالية: حيث نقوم بتحديد الصنف الذي يحوي الالة Main ليعمل البرنامج بدءاً منه . أو عند التوجه للدالة Main الرئيسية لديك اختر Run as Java Program ليتعبرها الدالة الافتراضية
  19. أعتقد أن هذا هو بالضبط ما تقوم به هذه الإعدادات، هل تعاني من أي مشكلة فيها؟
  20. نعم ما قصده المدرب محمد هو عمل مصفوفة بطول orders من الكائنات promesies وتمريرها للتابع Promise.all أي أولا يجب تهيئة المصفوفات ثم استدعائهم ومن ثم انتظار النتائج
  21. عليك تقسم الكود إلى تابعين الأول يمر على orders والثاني ينفذ التعليمات الخاصة بكل order. التابع الذي يقوم بتنفيذ التعليمات ضمن حلقة for يجب استدعائه عن طريق await. عند الحاجة لانتظار أكثر من حدث للانتهاء عليك استخدام promise all.
  22. بالإضافة لما وضحه المدرب سمير، أريد إضافة مايلي، عند العمل مع مطورين آخرين أو فريق عمل، ألا نحتاج لطريقة في بنية المشروع تكون مفهومة من الجميع و الكل منهم يعرف هرمية المشروع و كيفية توزيع الملفات و له خبرة في أسماء الدوال و الأوامر و ... حيث إن استخدام إطار العمل مفيد جداً في توحيد طريقة التعامل و برمجة المشروع و يسهل عملية البحث عن سبب المشاكل و إصلاحها، فهو يسرع عملية الإنتاج و يقلل الأخطاء الناتجة. و يقلل الكلفة بحيث تكون معظم الأمور مبرمجة مسبقا ولا يحتاج المبرمج لكثير من المجهود بإعادة اختراع العجلة و كتابة نفس الأصناف و الدوال والتي من الممكن إعادة استخدامها..
  23. مشكلة تتعلق بالاتصال بالانترنت من MainThread (هي مسلك مسؤول عن الواجهة الرسومية ولا يجب الاعتماد عليه بتنفيذ أي شيى آخر ليكون الأداء جيد ولا يحدث توقف في عمل البرنامج) أولا يجب التأكد من إعطاء سماحية الوصول للانترنت في AndroidMainfest: <uses-permission android:name="android.permission.INTERNET"/> وضمن MainActivity.java يجب إضافة التالي للدالة OnCreate : ليتم تنفيذ المهمة التي سوف نكتبها الحقا: new RetrieveFeedTask().execute(urlToRssFeed); سنقوم بتنفيذ المهمة في مسلك منفضل / سوف نعمل على التوازي/ كالتالي: حيث قمنا بتعريف RetrieveFeedTask كـ AsyncTask. class RetrieveFeedTask extends AsyncTask<String, Void, RSSFeed> { private Exception exception; protected RSSFeed doInBackground(String... urls) { try { URL url = new URL(urls[0]); SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); XMLReader xmlreader = parser.getXMLReader(); RssHandler theRSSHandler = new RssHandler(); xmlreader.setContentHandler(theRSSHandler); InputSource is = new InputSource(url.openStream()); xmlreader.parse(is); return theRSSHandler.getFeed(); } catch (Exception e) { this.exception = e; return null; } finally { is.close(); } } protected void onPostExecute(RSSFeed feed) { // TODO: check this.exception // TODO: do something with the feed } } في Android الإصدار API 30 تم التخلي عن AsyncTask فعلينا عندها استخدام تعريف المسلك Threads كالتلي: Thread thread = new Thread(new Runnable() { @Override public void run() { try { //Your code goes here // هنا نكتب الدالة السابقة } catch (Exception e) { e.printStackTrace(); } } }); thread.start();
  24. المطلوب تعريف صنف Employee و إعطائه خواص و طرق كما هو موضح ، مثل الراتب و طريق get - set للتعامل مع البيانات داخله ثم إنشاء غرض منه Programmer .. الصنف Employee .. عليك إكمال باقِ الوظائف.. public class Employee{ private double salary; private double bounce; //setters public void setSalary(double salary){ this.salary=salary; } public void setBounce(double bounce){ this.bounce=bounce; } //TODO //getters public double getSalary(){ return salary; } public double getBounce(){ return bounce; } public void getYearlySalary(){ return salary*12; } //TODO } الدالة الرئيسية: import java.util.Scanner; public class Company{ // اسم الصنف الأساسي/ البرنامج public staic void main(String[] args){ Scanner sc = new Scanner(System.in); Employee emp = new Employee(); // تعريف موظف جديد يمكنك تسميته programmer System.out.println("Enter salary: "+ setSalary(sc.nextDouble())); // TODO استدعاء الدوال } } عليك الاعتماد على نفسك، إن الأمور المتبقية هي مكررة مما سبق عليك الفهم و محاولة إعادة التطبيق
  25. يتم ذلك عن طريق استقبال المعاملات من خلال الوسيط args حيث نقوم بتمرير مصفوفة من نوع String تأخذ كل منها جزء من البيانات الممررة بالترتيب. سيتم حفظ أول وسيط ممرر بالدليل الأول للمصفوفة [0]args و ثاني وسيط في الدليل الثاني[1]args و هكذا .. public static void main(String[] args) { if (args[0].equals("stop")) { stopCommand(); } else if (args[0].equals("search")) { searchCommand(); } } أما تنفيذ البرنامج سيكون بالشكل التالي: java MyProgram stop __ الأمر | اسم البرنامج
×
×
  • أضف...