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

Wael Aljamal

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

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

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

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

    218

إجابات الأسئلة

  1. إجابة Wael Aljamal سؤال في مشكلة تشغيل workmanager على ios flutter كانت الإجابة المقبولة   
    يوجد بعض الخطوات في توثيق المكتبة خاصة بعملها على IOS يمكنك مراجعتها
    جلبت الخطوات الرئيسية :
    تأكد أن platform :ios,10.0 على الأقل تفعيل Enabling Background Fetch في ملف Info.plist أضف UIBackgroundModes بالطريقة التالية  <key>UIBackgroundModes</key> <array> <string>fetch</string> </array>  
    تعديل في ملف project.pbxproj  SystemCapabilities = { com.apple.BackgroundModes = { enabled = 1; }; };  
    ضمن didFinishLaunchingWithOptions, حدد minimumBackgroundFetchInterval  class AppDelegate:UIResponder,UIApplicationDelegate{ func application(_ application:UIApplication,didFinishLaunchingWithOptions launchOptions:[UIApplicationLaunchOptionsKey:Any]?)->Bool{ // Other intialization code… UIApplication.shared.setMinimumBackgroundFetchInterval(TimeInterval(60*15)) return true } } بالتوفيق
  2. إجابة Wael Aljamal سؤال في شرح كود c++ كانت الإجابة المقبولة   
    مرحبا أسماء،
    console تغيير اللون في الواجهة الخاصة بمحرر الأوامر void color(int color) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color); } الانتقال لموقع معين في منفذ الأوامر x,y تمثل الإحداثيات void gotox(int x,int y) { COORD c; // سجل معرف مسبقا يمثل إحداثيات نافذة محرر الأوامر c.X=x; c.Y=y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c); } المصفوفة التي تخزن قيم الألوان int set[]={7,7,7} متحول يمثل المفتاح المضغوط في لوحة المفاتيح char key; هذا التابع يقرأ قيمة المفتاح الذي نضغطه في لوحة المفاتيح key=getch(); k = 72 يمثل الحرف H k = 80 يمثل الحرف P هو برنامج تفاعلي بين المستخدم و البرنامج يغير اللون و أماكن الطباعة تبعا للمتغيرات المدخلة و اعدادات 
    و يقوم بعرض نصوص تعبر عن القوائم 
    عليك تجريب البرنامج لرؤية ما يحدث فله مجال كبير من القيم المختلفة
    بالتوفيق
  3. إجابة Wael Aljamal سؤال في كيفية استعمال اكبر من واصغر من او يساوي في flutter كانت الإجابة المقبولة   
    مرحبا,
    أظن أن الخطأ بسبب نمط المتحول user_name بعد فك ترميز JSON 
    أي مقارنة نمط رقمي مع سلسلة نصية
    استعمل الدالة التالية int.parse() للتحويل من نمط String إلى الى النمط int حيث تستطيع مقارنة الأرقام
    أولا قم بتضمين المكتبة التالية 
    import 'dart:convert'; ثم
    Future<String> getLogin() async { var response = await http.get( Uri.encodeFull("http://xxxxxxxxxxx/ApplicationP.php"),); setState(() { var convertDataToJson = json.decode(response.body); data = convertDataToJson['result']; if (data != null) { user_name = data[0]['id']; // هل هذا المعرف ؟ //أفضل تسميته user_id var user_id = int.parse(data[0]['id']); var my_pre_id = int.parse(_myPreferences.id); if (my_pre_id < user_id) { // أظن تعمل بقصر تلقائي _myPreferences.id = user_id; _myPreferences.commit(); } } }); } يمكنك التأكد من نمط البيانات عن طريق 
    print(x.runtimeType); حيث X يمثل اسم المتحول
    بالتوفيق
  4. إجابة Wael Aljamal سؤال في نقل تطبيق c# على جهاز آخر كانت الإجابة المقبولة   
    عليك التأكد من ان الإعدادات متوافقة مع نسخة .NET المثبتة على الجهاز (ممكن اختلاف السنة و اعتماد أحدهما على .NET 3.5)
    و ربما نظام التشغيل الثاني WINDOWS 7 ينقصه حزمة service pack 1
    حاول تشغيل التطبيق من خلال command line  
    او من خلال 
    dotnet yourapp.exe 
    لأنها تعطيك log أكثر دقة 
    و في حال استمرار الخطأ أرجو تزويدنا بمعلومات إضافية
  5. إجابة Wael Aljamal سؤال في ماهي UML ؟ كانت الإجابة المقبولة   
    UML : Unified Modeling Language لغة النمذجة الموحدة 
    هي لغة نمذجة رسومية تقدم صيغة لوصف العناصر الرئيسية للنظم البرمجية تتجه بطبيعتها للتعامل مع كائنات العالم بشكل كائني التوجه (الزبون - البائع - نظام حاسوبي طرفي .. )
    تستخدم هذه اللغة لعمل رسوم تخطيطية لوصف برامج الكمبيوتر من حيث العناصر المكونة لها أو خط سير العمليات الذي يقوم به البرنامج.
    مثل عمل مخطط لترتاتبية الأحداث التي ممكن أن تحدث ضمن النظام البرمجي أو مرتبطة به و تتأثر به.
    وهي تحوي عدة أنواع و بنى مختلفة لتوصيف المخططات للتعامل مع المشاريع بعدة مستويات و توصيفات بنيوية مختلفة 
    أوّل ما يتم ملاحظته عن UML هو أنه يوجد العديد من المخطّطات المختلفة (نماذج). السبب في هذا التنوّع يعود إلى أن تطوير البرمجيات يشترك فيه عدد من الأفراد، وكل واحد له دور، مثلا:
    المحلّلون المصمّمون المبرمجون القائمون بالاختبار مراقبو الجودة المستفيدون الكتّاب التقنيون لغة (UML) توفر وسيلة لتصور النظام في رسم تخطيطي، بما في ذلك بعض العناصر مثل:
    أنشطة (وظائف) المكونات الفردية للنظام التفاعل مع مكونات البرامج الأخرى. تشغيل النظام تفاعل الكيانات مع الآخرين (مكونات واجهات) واجهة المستخدم الخارجية من المهم أن نميز بين نموذج UML ومجموعة من الرسوم البيانية للنظام. مخططات UML تمثل وجهات النظر المختلفة للنظام وتنقسم إلى قسمين:
    (Static/structure) : تركز على البنية الثابتة للنظام باستخدام ( relationships ، operations ، attributes ، objects ) (Dynamic/behavior) : يركز على السلوك الديناميكي للنظام أي تغيراته مع الزمن ويشمل sequence diagrams ، activity diagrams ، state diagram هي تفيد مصممي النظم البرمجة و المهندسين بشكل كبير حيث يعتمد عليها مع المشاريع الكبيرة ومن ثم يتقاسم العمل على المشروع بحيث كل شخص يعلم الشكل العالم للمشروع و ماهو جزئه في العمل.
    كورس لدراستها: 
    بالتوفيق
  6. إجابة Wael Aljamal سؤال في تعريب قوالب الووردبريس كانت الإجابة المقبولة   
    بعد مراجعة عدة مقالات أسهل طريقة هي باستخدام برنامج poedit رابط التحميل من هنا
    حيث تقوم بتحمل القالب و من ثم قتح ملفات الترجمة تعديل الترجمات و من ثم إعادة رفع القالب ..
    رابط المقالة من هنا
  7. إجابة Wael Aljamal سؤال في Linter pylint لايتثبت كانت الإجابة المقبولة   
    يبدو أن الحزمة wheel غير مثبتة لديك أرجو تثبيتها من خلال التعليمة التالية :
    pip install wheel ثم أعد المحاولة تثبيت Linter pylint
    في حال استمرت المشكلة قم بالتعليمات التالية :
    mkdir wheelhouse // عرف مجلد لتخزين الحزم البرمجة الناقصة التي نريد تثبيتها // مسار افتراضي مناسب لديك pip download --dest wheelhouse requests ثم pip install requests --no-index --find-links wheelhouse/ // wheelhouse/ يعبر عن مسار التثبيت استبدله بالمجلد الذي قمت بإنشائه مسبقا # التعليمة التالية تعرض ماعليك تثبيته (ملفات و مكتبات ناقصة لديك) :
    python -m pip show requests // الخرج سيكون بالشكل التالي Requires: urllib3, chardet, idna, certifi  
  8. إجابة Wael Aljamal سؤال في كيفية ارسال قيم مربع النص الى الصفحة التالية flutter كانت الإجابة المقبولة   
    توثيق فلاتر لتمرير البارامترات من هنا
    قم بتعريف صف خاص يحوي البيانات التي تريد إرسالها بين ال Screens و مرره كمتحول وحيد يحمل البيانات التي تحتاجها ..
    ثم قم باستخلاص البيانات مرة أخرى لاستعمالها في ال Screen2
  9. إجابة Wael Aljamal سؤال في المتابعه من طرف المختصين و الأساتذة المشرفين على دورات أكاديمية حسوب كانت الإجابة المقبولة   
    الإجابة تكون من أساتذة و مدربين لديهم خبرات مناسبة للدورة التي تقوم بالتسجيل فيها وليس من الطلاب
  10. إجابة Wael Aljamal سؤال في استفسار حول oop كانت الإجابة المقبولة   
    هي طريقة غير مستخدمة كثيرا في تعريف خاصية تابعة لغرض معين (بطريقة برمجية أي يمكنك تسمية الخاصية بوضع متحول و ستأخد الخاصية قيمته)
    (فقط وضعت المثال لتعلم أنه يمكننا فعل ذلك) تبسيط المثال :
    <?php $obj = new stdClass; // بناء صف $obj->Property1 = " value1"; $obj->Property2 = "value2 "; $newObj = new stdClass; foreach($obj as $prop => $val) { $newObj->$prop = trim($val); //نطبق الدالة على الخاصية } $obj = $newObj; unset($newObj); var_dump($obj); تطبيق trim على user:
    if (isset($_POST['signup'])){ /* User_Info */ class userInfo{ private $ufame; private $uname; private $umail; private $upass; private $uyear; private $udays; private $umonth; public function users(){ $this->ufame = $_POST['ufame']; $this->uname = $_POST['uname']; $this->umail = $_POST['umail']; $this->upass = $_POST['upass']; $this->uyear = $_POST['uyear']; $this->udays = $_POST['udays']; $this->umonth= $_POST['umonth']; foreach($this as $prop => $val) { $this->$prop = trim($val); // نطبق الدالة على الخاصية } } $user = new userInfo(); $user->users(); print_r($user); }  
  11. إجابة Wael Aljamal سؤال في برنامج بلغة c++ كانت الإجابة المقبولة   
    مرحبا,
    لقد اطلعت على الملفات, يبدو أنها تحتاج الكثير من الوقت و شخص لديخ خبرة جيدة في المجال لذلك أنصحك بالتوجه مثلا إلى منصة مستقل و توظيف مبرمج أو شخص مناسب ليساعدك في الحل رابط منصة مستقل
  12. إجابة Wael Aljamal سؤال في برامج في لغة c++ كانت الإجابة المقبولة   
    الأسئلة ليست صعبة
    حاول أن تقوم بحلهم بمجهودك ثم قم بتصحيح الأخطاء حسب شرحي لك..
    الأول:
    #include <iostream> #include<string> using namespace std; int main() { int x ,y; // int تعريف متحولين لتخزين أرقام من نوع cout << "enter tow values .. x and y .." << endl; // الطلب من المستخدم إدخال القيم cin >> x >> y; // إدخال اقيم من قبل المستخدم cout << "adding .. " << x + y << endl; // الجمع cout << "multiplying .. " << x * y << endl; // الضرب // endl نستخدمها للنزول إلى سطر جديد return 0; } الثاني :
    #include <iostream> #include<string> using namespace std; int main() { int myTall , myFriendsTall; // int تعريف متحولين لتخزين أرقام من نوع cout << "enter tow values .. x and y .." << endl; // الطلب من المستخدم إدخال القيم cin >> x >> y; // إدخال اقيم من قبل المستخدم if (myTall > myFriendsTall) { cout << "my Tall is .. " << myTall << " the average is .. " << (myTall + myFriendsTall) /2; } else { cout << "my Friend Tall is .. " << myFriendsTall << " twice his tall is .. " << 2 * myFriendsTall << " half his tall is " << myFriendsTall/2 ; } // endl نستخدمها للنزول إلى سطر جديد return 0; } الثالث :
    #include <iostream> using namespace std; int main() { int myArray[10]; // تعريف مصفوفة for int i=0;i<10;i++){ // حلقة ب 10 تكرارات cin >> myArray[i]; // إدخال العناصر واحد تلو الآخر } for int i=0;i<10;i++){// حلقة ب 10 تكرارات if(myArray[i]>5){ // اختبار اذا كان العنصر أكبر من 5 cout << myArray[i] << " is at index .. " << i << endl; // طباعة هذا العنصر } } return 0; } الرابع :
    #include <iostream> using namespace std; // تعريف سجل لنتمكن من تخزين قيم مختلفة في نفس المتحول // هو فعليا تعريف نمط بيانات جديد struct person { char name[40]; char address[40]; int age; float salary; }; int main() { person p1 ,p2; // تعريف متحولين من نمط السجل يحوي كل منهما خصائصه // إدخال القيم cout << "enter person's 1 data .. " << endl; cout << "Name .. address .. age .. salary .. "<< endl; cin >> p1.name >> p1.address >> p1.age >> p1.salary; cout << "enter person's 2 data .. " << endl; cout << "Name .. address .. age .. salary .. "<< endl; cin >> p2.name >> p2.address >> p2.age >> p2.salary; // طباعة النتائج cout << "printing values .. "<< endl; cout << "printing person's 1 data .. " << endl; cout << "Name .. " << p1.name << endl << "address .. " << p1.address << endl << " age .. " << p1.age << endl << "salary .. "<< p1.salary << endl; cout << "printing person's 2 data .. " << endl; cout << "Name .. " << p2.name << endl << "address .. " << p2.address << endl << " age .. " << p2.age << endl << "salary .. "<< p2.salary << endl; return 0; } الخامس:
    #include <iostream> #include<string> using namespace std; int sum (int a, int b) { // a,b تعريف دالة من نوع رقم تستقبل المتحولات الممررة في int s = a + b; // متحول محلي يخزن مجموع القيمتين return s; // إعادة المجموع لمكان استدعاء الدالة } int main() { int x ,y; // int تعريف متحولين لتخزين أرقام من نوع cout << "enter tow values .. x and y .." << endl; // الطلب من المستخدم إدخال القيم cin >> x >> y; // إدخال اقيم من قبل المستخدم cout << "the sum of x and y is .. " << sum(x,y); // استدعاء الدالة // endl نستخدمها للنزول إلى سطر جديد return 0; }  
  13. إجابة Wael Aljamal سؤال في مامعنى رمز lrwx في اذونات لينكس كانت الإجابة المقبولة   
    بعض الاختصارات للتعامل مع أوامر نظام لينكس الخاصة بالملفات و المجلدات:
    l = Link to another file d = a directory - = file r = read permission - Read the file w = write permission - Write or edit the file x = execute permission He can execute the file - = no permission Number Permission Type `Symbol` 0 No Permission `---` 1 Execute `--x` 2 Write `-w-` 3 Execute + Write `-wx` 4 Read `r--` 5 Read + Execute `r-x` 6 Read + Write `rw-` 7 Read + Write + Execute `rwx` شرح عن أوامر لينوكس و مثال عن استخدامها
    مثال1 , مثال2
    symlink: في الحوسبة ، الرابط الرمزي (أيضًا ارتباط رمزي أو رابط لين) هو مصطلح لأي ملف يحتوي على مرجع إلى ملف أو دليل آخر في شكل مسار مطلق أو نسبي ويؤثر على دقة اسم المسار.
    تستخدم في حالة أردنا نقل ملفات مرتبطة ببعضها للحفاظ على مسار (path) بينها للتأكيد على ترابط البيانات.


  14. إجابة Wael Aljamal سؤال في اريد حل كود برنامج ماتلاب كانت الإجابة المقبولة   
    // أطوال القطرين d1 = 2 d2 = 4 // حساب المساحة و المحيط area = (d1 * d2) / 2; perimeter = 2 * sqrt(pow(d1, 2) + pow(d2, 2)); // الطباعة fprintf('The area is %.2f\n', area); fprintf('The perimeter is %.2f\n', perimeter);  
  15. إجابة Wael Aljamal سؤال في انا اتعلم رياكت ناتيف فرونت اند .. واريد ان اعرف اى هذه الدروس متعلقة ب فرونت اند وايها متعلق بالباك اند ؟ كانت الإجابة المقبولة   
    عليك تعلم كل ماسبق 
    ال api مرتبط بال frontend و ال backend
    و حتى لو اختصيت في frontend يجب ان يكون لك معرفة جيدة في كيفية عمل ال api عند ال backend
    تستطيع حاليا تجاهل (4,13)
  16. إجابة Wael Aljamal سؤال في احتاج تفعيل ملحق CURL PHP في السيرفر كانت الإجابة المقبولة   
    في ملف PHP.ini الخاص بالسيرفر لديك 
    قم بالبحث عن التالي :  extension=php_curl.dll; وقم بإزالة الفاصلة المنقوطة التي قبلها (مثل إزالة التعليق)
    يمكن أن تجدها باسم extension=curl; احفظ الملف و قم بإعادة تشغيل السيرفر
  17. إجابة Wael Aljamal سؤال في من يشرح بايثون كودين كانت الإجابة المقبولة   
    ملاحظات عامة: البرمجة المتوازية هي تشغيل عدة برامج في نفس الوقت (Process or threads) ,وبدرجة أعلى تشغيل نفس البرنامج بشكل متواز و تقسيم العمل على عدة مسالك برمجية
    في أنظمة التشغيل كل برنامج يقوم بإنشاء Process خاصة به للقيام بالعمليات البرمجية. نستخدم عدة Processes في النظام الحاسوبي لكي نستطيع تقسيم الوقت و الموارد بين البرامج المختلفة بشكل مناسب. كل Process يمكن أن يكون لديها sub process أي عملية ابن لها يتحكم الأب فيه عن طريق إشارت تحكم (ويرسل الابن اشارات تحكم أيضا) Pool: يوزع المجمع المهام على المعالجات المتاحة باستخدام جدولة FIFO (نظام الرتل). إنه يعمل مثل بنية map-reduce. يقوم بتعيين المدخلات إلى المعالجات المختلفة ويجمع المخرجات من جميع المعالجات (تنسيق عملية البرمجة المتوازية بين عدة Processes). العملية Process  هي مثال على البرنامج (مثل دفتر Notepad، مترجم Python). تنشيئ العمليات المسالك (threads)(العمليات الفرعية) للتعامل مع المهام الفرعية مثل قراءة ضغطات المفاتيح ، وتحميل صفحات HTML ، وحفظ الملفات. المسالك تعيش داخل العمليات وتشترك في نفس مساحة الذاكرة. #!/usr/bin/env python3 from multiprocessing import Pool // تضمين المكتبة الخاصة بالبرمجة المتعددة أي المتوازية def run(task): # Do something with task here print("Handling {}".format(task)) // Handling task1 طباعة اسم العملية مثل if __name__ == "__main__": tasks = ['task1', 'task2', 'task3'] // تهيئة البرامج للتشغيل مع اسما افتراضية # Create a pool of specific number of CPUs p = Pool(len(tasks)) // إنشاء عدة معالجات بعدد العمليات المطلوبة # Start each task within the pool p.map(run, tasks) // لكل واحدة من هذه المهمات لكي يقوم بتنفيذهم (process handler) معالج الطلبات run إسناد التابع # الجزء الثاني:
    walk() في بيثون؟  walk() قم بإنشاء أسماء الملفات في شجرة الدليل عن طريق السير في الشجرة إما من أعلى إلى أسفل أو من أسفل إلى أعلى. لكل دليل في الشجرة جذر Root في أعلى الدليل (بما في ذلك الجزء العلوي نفسه) ، فإنه ينتج 3 متغيرات (المسارات و أسماء المجلدات و أسماء الملفات)  (dirpath ، dirnames ، filenames). الجذر: يطبع الدلائل فقط مما حددته. الكود الثاني يقوم بإنشاء دليل للملفات و المجلدات التي جذرها هو src  لنسخ الملفات من المصدر src إلى الوجهة dest  بطريقة متوازية ( متزامنة عودية لكي لا يحدث خطأ في المسارات rsync) rsync: remote sync (المزامنة عن بُعد) هي أداة مساعدة لنقل ومزامنة الملفات بكفاءة بين الكمبيوتر ووحدة تخزين خارجية
  18. إجابة Wael Aljamal سؤال في هل يحتاج متعلم ريأكت ناتيف فرونت اند ان يدرس redux و react Dom ام لا يلزمه هذا ؟؟ كانت الإجابة المقبولة   
    الفرق باستخدام DOM بين React و React Native:
    لكل من React و React Native طرقهما الخاصة في تصميم المكونات (component) والواجهات (Views).
    نظرًا لأن React يعرض عناصر HTML إلى DOM افتراضي ، يتم إجراء التصميم غالبًا باستخدام نفس معيار الويب: CSS.
    يتطابق ناتج React مع مخرجات صفحة ويب HTML التقليدية ، مما يسمح لك باستخدام الأساليب القياسية للتصميم عندما يتعلق الأمر بإضافة تنسيقات خارجية (تنسيق الموقع بالستخدام CSS).
    مع React Native ، لا تتمتع بنفس الحرية. نظرًا لأن React Native تُخرج تطبيقًا أصليًا (Native app)، فلا يوجد DOM مع عناصر HTML يمكن تصميمها باستخدام الطرق المعتادة مثل CSS.
    يتم التعامل مع الأنماط في React Native بدلاً من ذلك باستخدام كائنات Javascript التي تعدل خصائص المكونات الأصلية الأساسية. لا يستخدم CSS ، على الرغم من أن العديد من الخصائص تشبهها.
    مثال لتنسيق مكون:
    import React from 'react'; import { View, Text } from 'react-native'; export default class App extends Component { render () { return ( <View style={styles.appContainer}> <Text style={styles.appText}>Hello world</Text> <View /> ) } const styles = { appContainer: { flex: 1 }, appText: { fontSize: 18, color: 'white', textAlign: 'center' } } مصدر
  19. إجابة Wael Aljamal سؤال في الإستضافة لا تدعم php كانت الإجابة المقبولة   
    نعم يوجد العديد من الطرق لتشغيل سكربتات PHP عن طريق مكتبات Node.Js (أنا لم أقم بتجريب أيِّ منها)
    SPHP:        يمكنك تشغيل PHP كما هو الحال مع أي خادم ويب ، باستخدام SPHP وهي Module في Node.Js.
           كما أنه يدعم طلبات Websockets على منفذ HTTP.
           إنه يميل للسرعة تحت حمولة صغيرة ، بدلاً من توفير الموارد.
           طريقة التثبيت شرح على موقع github
    أو أحد الطرق التالية:
    DNode node-php-fpm node-php
  20. إجابة Wael Aljamal سؤال في خارطه التحكم في قاعدة بيانات على شبكه بال java (تطبيق سطح المكتب)) كانت الإجابة المقبولة   
    يوجد مثال تطبيقي من ORACLE ومثال آخر من stackoverflow 
    كحد أدنى ، تحتاج إلى ثلاث صفوف classes: صف لتمثيل بياناتك ، وواحدة لواجهة المستخدم الخاصة بك ، وواحدة لإدارة اتصال قاعدة البيانات.
    فيديو يوتيوب يشرح ربط JAVAFX ب MYSQL : الفيديو
  21. إجابة Wael Aljamal سؤال في ماهي CI/CD كانت الإجابة المقبولة   
    CI و CD هما اختصاران يتم ذكرهما غالبًا عندما يتحدث الناس عن تقنيات التطوير الحديثة في هندسة البرمجيات.
    CI = continuous integration = التكامل المستمر CD = continuous deployment = النشر المستمر يعتمد مفهوم CD على تطبيق CI.
     CI التكامل المستمر ، وهي ممارسة تركز على جعل إعداد الإصدار أسهل (وهو المستوى المنخض). لكن CD يمكن أن يعني التسليم المستمر أو النشر المستمر(وهو المستوى الأعلى). CI:  يقوم المطورون الذين يمارسون التكامل المستمر بدمج تغييراتهم بشكل مستمر إلى الفرع الرئيسي بقدر الإمكان. يتم التحقق من صحة تغييرات المطور من خلال إنشاء بناء (Application Build) وتشغيل اختبارات آلية مقابل الإصدار. من خلال القيام بذلك ، تتجنب بذلك مشاكل التكامل الذي يحدث عادةً عندما ينتظر الأشخاص يوم الإصدار لدمج تغييراتهم في فرع الإصدار.
    يركز التكامل المستمر بشكل كبير على اختبار الأتمتة للتحقق من عدم تعطل التطبيق كلما تم دمج التزامات جديدة في الفرع الرئيسي.
    CD:
    يذهب النشر المستمر خطوة أبعد من التكتمل المستمر. من خلال هذه الممارسة ، يتم تحرير كل تغيير يمر بجميع مراحل خط الإنتاج للعملاء. لا يوجد تدخل بشري ، وفقط اختبار فاشل سيمنع تطبيق تغيير جديد على الإنتاج.
    يعد النشر المستمر طريقة ممتازة لتسريع حلقة التعليقات مع عملائك وإزالة الضغط على الفريق حيث لم يعد هناك يوم إصدار بعد الآن. يمكن للمطورين التركيز على إنشاء البرامج ، ويرون أن عملهم يتم تشغيله بعد دقائق من انتهائهم من العمل عليه.
     
    التكامل المستمر ماذا تحتاج (التكلفة)            سيحتاج فريقك إلى كتابة اختبارات آلية لكل ميزة جديدة أو تحسين أو إصلاح للأخطاء.           أنت بحاجة إلى خادم تكامل مستمر يمكنه مراقبة المستودع الرئيسي وتشغيل الاختبارات تلقائيًا لكل التزامات جديدة يتم دفعها.           يحتاج المطورون إلى دمج تغييراتهم قدر الإمكان ، مرة واحدة على الأقل يوميًا.     2. ما تكسبه
              يتم شحن عدد أقل من الأخطاء إلى الإنتاج حيث يتم تسجيل الانحدار مبكرًا بواسطة الاختبارات الآلية.           يعد إنشاء الإصدار أمرًا سهلاً حيث تم حل جميع مشكلات التكامل مبكرًا.           تبديل سياق أقل حيث يتم تنبيه المطورين بمجرد كسر البناء ويمكنهم العمل على إصلاحه قبل الانتقال إلى مهمة أخرى.           يتم تقليل تكاليف الاختبار بشكل كبير - يمكن لخادم CI إجراء مئات الاختبارات في غضون ثوانٍ.           يقضي فريق ضمان الجودة وقتًا أقل في الاختبار ويمكنه التركيز على التحسينات المهمة في ثقافة الجودة.  
    التسليم المستمر ماذا تحتاج (التكلفة) يجب أن تكون ثقافة الاختبار الخاصة بك في أفضل حالاتها. ستحدد جودة مجموعة الاختبار جودة إصداراتك. ستحتاج عملية التوثيق الخاصة بك إلى مواكبة وتيرة عمليات النشر. تصبح علامات الميزات جزءًا لا يتجزأ من عملية إصدار تغييرات مهمة للتأكد من أنه يمكنك التنسيق مع الأقسام الأخرى (الدعم والتسويق والعلاقات العامة ...).  
         2. ما تكسبه
    يمكنك التطوير بشكل أسرع حيث لا داعي لإيقاف التطوير للإصدارات. يتم تشغيل خطوط أنابيب عمليات النشر تلقائيًا لكل تغيير. تعتبر الإصدارات أقل خطورة وأسهل في الإصلاح في حالة حدوث مشكلة أثناء نشر مجموعات صغيرة من التغييرات. يرى العملاء دفقا مستمرًا من التحسينات ، وتتزايد الجودة كل يوم ، بدلاً من كل شهر أو ربع أو سنة. المصدر
    رسومات توضيحية:
     



  22. إجابة Wael Aljamal سؤال في Could not start AVD أندرويد ستوديو كانت الإجابة المقبولة   
    إن المحاكي يحتاج لذاكرة RAM بحجم كبير نسبيا (على الأقل بحدود 800 ميغابايت) فهو يشغل نظام أندرويد.
    أنصحك بترقية حاسوبك و زيادة حجم الذاكرة RAM حتى 6 غيغا بايت على الأقل (الأفضل 8 غيغا بايت). يمكنك تشغيل البرنامج الخاص بك على هاتفك الأندرويد عن طريق وصله ب USB وقم بتفيل USB Debugging من خيارات المطور على الهاتف.  
  23. إجابة Wael Aljamal سؤال في اللغة العربية تظهر بشكلٍ معكوس Android Studio كانت الإجابة المقبولة   
    يمكنك حل المشكلة عن طريق عمل ملف strings.xml خاص باللغة العربية و ربطها بلغة الجهاز.
    يمكنك متابعة هذا الشرح وهو مشروح بالتفصيل لكيفية إضافة نصوص عربية و انكليزية و التبديل بينها.
    مميزات ملف الـ strings.xml:
    1- تخزين جميع النصوص المستخدمة داخل التطبيق واستخدام الملف كمكتبة يتم استيراد النصوص منها بشكل مباشر (فصل النصوص بملفات خارجية أي خارج ال text Views).
    2- تغيير النص داخل ملف الـ strings كفيل بتغيير كافة الـ text Views التي تستخدم هذا النص على سبيل المثال(ربطها عن طريق متحولات).
    3- تخزين جميع اللغات التي ترغب أن يدعمها التطبيق الخاص بك. حيث سيتم عرض النصوص بحسب اللغة المستخدمة داخل الجهاز.
    لنتعرف معاً كيف يتم التعامل مع هذا الملف.

  24. إجابة Wael Aljamal سؤال في برمجة البايثون كانت الإجابة المقبولة   
    اذا أردتِ من أحد المدربين متابعتك بشكل يومي و شرح المواضيع العالقة و مساعدتك, اقترح أن تقومي بتوظيف أحد المبرمجين من على منصة مستقل لأن المدة التي تحتاجين فيها لمدرب هي أسبوعين وهو وقت طويل للالتزام.
  25. إجابة Wael Aljamal سؤال في كيف أصل لمصفوفة الـ API هذه عن طريق JavaScript كانت الإجابة المقبولة   
    يوجد خطأ في نوع البيانات, إن البيانات المسترجعة في هذه الحالة هي من نوع Array of Objects (مصفوفة من الكائنات, JSON Array) [{},{},{}] وتحوي عنصر وحيد (غرض وحيد)  في حالتنا هذه ونصل له عن طريق الدليل رقم 0 من المتحول data وهو المتحول الذي يعبر عن البيانات.
    - يجب أن نصل لعناصر المصفوفة أولا (أي الأغراض) مثال: [data[0, بعد ذلك نصل الى خصائص الغرض مثل (phonetics, word, meanings) .
    الكود صحيح لكن الكلام في الشرح معكوس.
×
×
  • أضف...