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

محمد ربيع زليول

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

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

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

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

    18

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

  1. تحتاج ملفات PHP لخادم ويب ( أباتشي Apache) لفتح الملفات وتشغيلها، عكس ملفات HTML التي تقوم بفتحها مباشرة على المتصفح بالضغط عليها مرتين مثلاً. إذن، عليك أولاً تثبيت برنامج يحتوي على خادم ويب كبرنامجي XAMPP أو WAMP. ثم ستقوم بإضافة ملفات PHP الخاصة بك على مجلد محدد من طرف البرنامج، مثلاً في برنامج XAMPP عادةً ما يكون مسار المجلد كالتالي: “C:/xampp/htdocs”. مثال: إن كنت تستعمل برنامج XAMPP وكان لديك ملف إسمه page.php. ستذهب إلى مسار “C:/xampp/htdocs”، لأنه المسار الإفتراضي للبرنامج. ثم تقوم بوضع ملفك في هذا المجلد. ثم ستذهب للمتصفح وتكتب هذا الرابط http://localhost/page.php. فيفتح الملف الخاص بك ويشتغل الكود الذي به. يمكنك الإطلاع على الروابط التالية: تمهيد إلى لغة PHP أو
  2. مرحبا، أحتاج معرفة مسار الملف، وكيف تقوم بفتحه.
  3. لإضافة animation قم بتضمين مكتبة animate: <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-animate/1.7.9/angular-animate.min.js"></script> ثم قم بإضافة وحدة ngAnimate للوحدة الرئيسية: var app = angular.module("myApp", ["ngRoute", "ngAnimate"]); ثم قم بكتابة Animation عن طريق CSS Animations. ثم ضعها بملف CSS الخاص بك، مثلا قمت بإنشاء slideInRight و slideOutLeft كالتالي: @keyframes slideInRight { from { transform:translateX(100%); } to { transform: translateX(0); } } @keyframes slideOutLeft { to { transform: translateX(-100%); } } الآن تتبقى خطوة واحدة فقط وهي إضافة محددات لصنفي ng-enter و ng-leave. المحدد الأول يأتي لتعريف Animation عند الإنتقال لل view. المحدد الثاني لتعريف Animation عند مغادرة View. .ng-enter{ animation: slideOutLeft 0.5s both ease-in; z-index: 8888; } .ng-leave{ animation: slideInRight 0.5s both ease-in; z-index: 9999; } ليصبح الكود الكامل كالتالي: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.9/angular.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-route/1.7.9/angular-route.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-animate/1.7.9/angular-animate.min.js"></script> <style> body { text-align: center; } @keyframes slideInRight { from { transform: translateX(100%); } to { transform: translateX(0); } } @keyframes slideOutLeft { to { transform: translateX(-100%); } } .ng-enter { animation: slideOutLeft 0.5s both ease-in; z-index: 8888; } .ng-leave { animation: slideInRight 0.5s both ease-in; z-index: 9999; } </style> </head> <body ng-app="myApp"> <div ng-view></div> <a href="#/!">Main page</a> <a href="#!page1">Page 1</a> <a href="#!page2">Page 2</a> <a href="#!page3">Page 3</a> <script> var app = angular.module("myApp", ["ngRoute", "ngAnimate"]); app.config(function ($routeProvider) { $routeProvider .when("/", { template: "<h1>Main page</h1><p>This is the main page</p>", }) .when("/page1", { template: "<h1>Page 1</h1><p>This is the first page</p>", }) .when("/page2", { template: "<h1>Page 2</h1><p>This is the second page</p>", }) .when("/page3", { template: "<h1>Page 3</h1><p>This is the third page</p>", }); }); </script> </body> </html> عدلت الملف السابق وأضفت له Animation يمكنك الإطلاع عليه من هنا. وهذا مشروع يحتوي على بعض التفاصيل إن أحببت الإطلاع عليه من هنا.
  4. ما تعاني منه هو أمر طبيعي عند البدايات، حتى أمهر المبرمجين يعانون عند الإنتقال لتعلم أشياء جديدة مثلاً، والكل يعاني عند تعلم شيء جديد، لكن بعد فترة تبدأ بإكتساب المفاهيم، وفهم الأساسيات التي تساعدك فيما بعد على الفهم الشامل للغة البرمجية التي تتعلمها أو المفهوم الجديد الذي تريد إكتسابه. نصيحتي لك، هي إعادة الدرس أكثر من مرة، محاولة تطبيقه، والتفكير في الغاية من بعض الأسطر البرمجية المكتوبة، وإن لم تفهم الفكرة إنتقل للدرس التالي وعد لاحقاً، يمكنك دائما العودة وتعلم الأشياء السابقة، وستحس أنك تفهمها في كل مرة بشكل أكبر. أريد مشاركة طريقة أقوم بها عندما أريد تعلم شيء جديد، أدرسه مرتين في اليوم الأول، وأعود لدراسته مرة أخرى اليوم الموالي، وأحس بعدها بأنني قد ضبطت المفهوم بشكل جيد، إعادة الدروس على فترات يساعد في فهمها وترسيخها، هذه الطريقة يمكنك إستخدمها في جميع المجالات، وليس البرمجة فقط. أتمنى لك التوفيق في مسيرتك، لا تتوقف، فقط إستمر وثابر وحافظ على حماستك ستصل بإذن الله لمبتغاك.
  5. لعمل Routing بين صفحات AngularJs. عليك اولاً إضافة ملف مكتبة التنقل إلى صفحتك، هكذا مثلا: <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-route/1.7.9/angular-route.min.js"></script> ثم قم بإضافة وحدة (module) التنقل ngRoute للوحدة الرئيسية. var app = angular.module("myApp", ["ngRoute"]); تقوم وحدة ngRoute بالتوجيه إلى صفحات مختلفة دون إعادة تحميل التطبيق بالكامل، بعد إضافتك لها يمكن الوصول إلى وحدة التوجيه ، عن طريق متغير $routeProvider. الآن يجب إستخدم $routeProvider لتكوين مسارات مختلفة في تطبيقك. مثال: $routeProvider .when("/", { template: "<h1>Main page</h1><p>This is the main page</p>", }) .when("/page1", { template: "<h1>Page 1</h1><p>This is the first page</p>", }) .when("/page2", { template: "<h1>Page 2</h1><p>This is the second page</p>", }) .when("/page3", { template: "<h1>Page 3</h1><p>This is the third page</p>", }); يجب عليك وضع إسم المسار في المعامل (Parameter) الأول لدالة when، وتقوم بإرسال كائن (object) في المعامل الثاني. يحتوي الكائن على عدد من الخائص، أهمها: template والتي بإمكانك أن تمرر لها كود HTML، templateUrl التي يمكنك أن تمرر لها رابط صفحة HTML. مثال: when("/page3", { template : "<h1>Page 3</h1><p>This is the third page</p>" // templateUrl: page3.html }); الآن في كود HTML يجب إضافة حاوية لوضع المحتوى الذي توفره وحدة التوجيه. هذه الحاوية ng-view. هناك أكثر من طريقة لتضمين توجيه ng-view في تطبيقك من بينها: <div ng-view></div> أو <ng-view></ng-view> وهذا مثال كامل: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.9/angular.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-route/1.7.9/angular-route.min.js"></script> </head> <body ng-app="myApp"> <div ng-view></div> <a href="#/!">Main page</a> <a href="#!page1">Page 1</a> <a href="#!page2">Page 2</a> <a href="#!page3">Page 3</a> <script> var app = angular.module("myApp", ["ngRoute"]); app.config(function ($routeProvider) { $routeProvider .when("/", { template: "<h1>Main page</h1><p>This is the main page</p>", }) .when("/page1", { template: "<h1>Page 1</h1><p>This is the first page</p>", }) .when("/page2", { template: "<h1>Page 2</h1><p>This is the second page</p>", }) .when("/page3", { template: "<h1>Page 3</h1><p>This is the third page</p>", }); }); </script> </body> </html> يمكنك تجربة الكود من هنا
  6. أحتاج معرفة الطريقة التي قمت من خلالها بإستدعاء كود الدالة أعلاه.
  7. هناك خطأ بالسطر الثالث، نسيت كتابة فاصلة في آخر السطر: كود السطر الحالي: SELECT WORKON.EMPNO AS 'EMPLOYEE_NO' بعد إضافة الفاصلة يصبح كود السطر كالتالي: SELECT WORKON.EMPNO AS 'EMPLOYEE_NO',
  8. هذا البرنامج يقوم بعمل المطلوب: نطلب من المستخدم إدخال رقم الشهر. نقوم بتسجيل رقم الشهر في متغير month. ثم نقوم بإنشاء جمل شرطية بإستخدام switch، حيث تقوم switch بمقارنة المتغير month مع القيم الموجودة في case. في حالة كان رقم الشهر مطابقاً لإحدى الحالات نقوم بطباعة إسم الشهر. أما في حالة كان رقم الشهر المدخل من طرف المستخدم لا يمثل أي حالة من الحالات ( مثلا قام المستخدم بإدخال قيمة 13 ) نقوم بطباعة رسالة لنخبر المستخدم أن الرقم الذي قام بإدخاله لا يمثل رقم من أرقام الأشهر. #include <iostream> using namespace std; int main() { int month; // نطلب من المستخدم إدخال رقم الشهر cout <<"قم بإدخال رقم الشهر: "; // قراءة رقم الشهر وتسجيله في متغير cin >> month; // جملة شرطية تقوم بمقارنة المتغير بالقيم في كل سطر switch(month) { case 1: cout << "يناير"; break; case 2: cout << "فبراير"; break; case 3: cout << "مارس"; break; case 4: cout << "أبريل"; break; case 5: cout << "ماي"; break; case 6: cout << "يونيو"; break; case 7: cout << "يوليوز"; break; case 8: cout << "غشت"; break; case 9: cout << "سبتمبر"; break; case 10: cout << "اكتوبر"; break; case 11: cout << "نوفمبر"; break; case 12: cout << "ديسمبر"; break; // في حالة كان الرقم الذي قام المستخدم بإدخاله يخالف أرقام الأشهر نطبع هاته الرسالة default: cout << "الرقم الذي قمت بإدخاله ليس رقماً لشهر"; } return 0; }
  9. أولاً كود HTML: هنا لدينا قائمة بأسماء المدن، لكل عنصر من عناصر القائمة إسم وقيمة. <!-- قائمة المدن --> <div> <div> <input type="checkbox" id="algiers" name="city" value="Algiers" /> <label for="algiers">Algiers</label> </div> <div> <input type="checkbox" id="cairo" name="city" value="Cairo" /> <label for="cairo">Cairo</label> </div> <div> <input type="checkbox" id="djibouti" name="city" value="Djibouti" /> <label for="djibouti">Djibouti</label> </div> <div> <input type="checkbox" id="rabat" name="city" value="Rabat" /> <label for="rabat">Rabat</label> </div> <div> <input type="checkbox" id="tunis" name="city" value="Tunis" /> <label for="tunis">Tunis</label> </div> </div> وفي جانب الجافاسكربت: قمنا بعمل قائمة بالمدن المختارة من طرف المستخدم. أضفنا مستمع حدث (EventListener) لكل checkbox. نقرأ قيمة checkbox الذي تم الضغط عليه ونضعه في متغير "إسم المدينة". في حالة كانت المدينة التي ضغط عليها المستخدم موجودة مسبقا بالقائمة نقوم بحذفها. في حالة كان عدد المدن بقائمة المدن المختارة يساوي 3 نقوم بإلغاء الحدث. أما في حالة كانت المدينة غير متواجد بالقائمة وكانت القائمة تحتوي على أقل من 3 عناصر نقوم بإضافة المدينة إلى القائمة. <script> // متغير للإحتفاظ بالمدن المختارة const selectedCities = []; // قائمة بجميع checkboxs const checkboxs = document.querySelectorAll("input[name=city]"); for (const checkbox of checkboxs) { // نضيف مستمع حدث لكل checkbox checkbox.addEventListener("click", (e) => { // متغير للإحتفاظ بإسم المدينة const cityName = checkbox.getAttribute("value"); // في حالة تواجد العنصر في قائمة المدن المختارة نقوم بحذفه if (selectedCities.indexOf(cityName) !== -1) { selectedCities.splice(selectedCities.indexOf(cityName), 1); return; } // في حالة تواجد أكثر من 3 مدن بالقائمة نقوم بإلغاء الأكشن if (selectedCities.length === 3) { e.preventDefault(); return; } // في حالة كانت العنصر غير متواجد بالقائمة وكانت القائمة تحتوي على أقل من 3 عناصر نضيف العنصر إلى القائمة selectedCities.push(cityName); }); } </script> لتجربة الكود إضغط هنا.
  10. هناك مشكلة في السطر السابع tx.executeSql('CREAT TABLE IF NOT EXISTS DemoTable (id, name, score)'); كلمة CREAT مكتوبة بشكل خاطئ، يجب أن تكتب هكذا CREATE ليصبح الكود الخاص بك كالتالي: tx.executeSql('CREATE TABLE IF NOT EXISTS DemoTable (id, name, score)');
  11. توفر منصات بناء التطبيقات أدوات لإنشاء التطبيقات للمبتدئين أو الأشخاص الذين لا يملكون خبرة في البرمجة، فهي تمكنك من إنشاء تطبيق بمجرد النقر على مجموعة من الأزرار وملئ بعض الفورم وسحب وإفلات مجموعة من الخيارات. ولكن مشكلة هاته المنصات أنها محدودة جداٌ، لا تستطيع عن طريقها عمل تطبيقات متوسطة أو عالية التعقيد، كما أن أغلبها لا يدعم التواصل مع الخادم مثلاً، ولا يمكنك من إضافة مكتبات أو أكواد أخرى للتطبيق.
  12. Github، هي منصة تقدم العديد من الخدمات للمطورين لكن الخدمة الأساسية للمنصة هي إستضافة المشاريع ومشاركتها. لفهم الخدمة الأساسية لل GitHub، يجب أن نفهم أولاً ما هو Git؟ وما هي أدوات التحكم بالنسخ؟ Git ببساطة هو قاعـدة بيانـات أو نظـام ملفـات يقـوم بتخزيـن العمليـات التـي تقـوم بهـا أنت وأي شخص من فريقك على ملـف أو مجموعـة من ملفـات، بحيـث يمكنـك من العـودة لتلـك التعديلات في أي وقـت. Git هو ليس الأداة الوحيدة للتحكم بالنسخ بل هنالك العديد من الأدوات ك VSC و Mercurial، لكن يبقى Git الأداة الأشهر. إذن عندما ينشئ المطورون شيئًا ما (تطبيق هاتف أو موقع على سبيل المثال) ، يُجرون تغييرات مستمرة على الشفرة، ويطلقون إصدارات جديدة في كل مرة. تمكن أنظمة التحكم من حفظ وتخزين التعديلات في مستودع مركزي، يتيح هذا المستودع للمطورين: إمكانية الرجوع لأي من النسخ السابقة. مراجعة أي من العمليات التي جرت على إحدى الملفات ( إضافة، تعديل، حذف أي سطر برمجي). مشاركة الشفرة مع مطورين أخرين. بالنسبة للشق الثاني من السؤال، فلا توجد حاليا أي طريقة للربح من منصة Github.
  13. نصيحتي لك، أن تقومي بالتعامل مع صاحب المشروع فقط من خلال إحدى منصات المشاريع ( مستقل أو خمسات أو غيرها...). ولا تتعاملي معه بشكل مباشر لأنه لن يكون لديك أية ضمانات حينها للتوصل بمستحقاتك بعد إنجاز العمل. إن لم تتمكني من التعامل من خلال إحدى المنصات لسبب ما: حاولي الحصول على ضمانة ( جزء من المبلغ ) قبل بدئك بالإنجاز، والحصول على جزء آخر بعد تسليمك لنصف المشروع. في حالة كنت تعملين في مجال التصميم، يمكنك تقديم لوجو أو العمل مثلا مرفوقا بعلامة مائية حتى التوصل بالمبلغ الكامل. بعد قراءة ردك، أود إخبارك أنه في منصة مستقل، تسليم صاحب المشروع مشروعا للمستقل يسبقه أداء صاحب المشروع المبلغ الازم للمنصة، إذن يمكنك بدأ العمل مباشرة بعد تسلمك للمشروع.
  14. إضافة بسيطة: الموقع الذي قمت بإرساله يشتغل ب Wordpress وهو نظام إدارة محتوى الكتروني مبني بإستعمال لغة PHP في جانب الخادم، وقاعدة بيانات هذا الموقع MySQL، أما جانب العميل فهو مبني عن طريق لغات HTML وCSS وجافاسكربت بسيطة ( دون أي إيطارات عمل )، كما أنه يشتغل بمكتبات ك Boostrap و Jquery.
  15. عادةً ما تستخدم أكثر من لغة لإنشاء مواقع ويب. أي موقع ويب يحتوي غالباً على جزئين وهما: جزء العميل Frontend: واجهة المستخدم بكل وظائفها جزء الخادم Backend: الخادم يعالج الطلبات ويتواصل مع قواعد البيانات ... في كل جزء من الأجزاء هناك العديد من الإختيارات الممكنة. فمثلا لإنشاء الواجهة الأمامية للموقع ( جزء العميل )، نعتمد أساساً على HTML ( للبنية ) و CSS (للتنسيق) وجافا سكربت ( للتفاعل الديناميكي)، لكن في أيامنا الحالية نادراً ما يتم إستخدام الجافاسكربت البسيطة، ويتم التوجه إلى العمل بإيطارات عمل جافاسكربت لإنشاء المواقع وتطبيقات الويب مثل (Angular ، React ، Vue ، ... إلخ). أما بالنسبة للخادم، فهناك العديد من الخيارات مثل (.net ، java ، ruby ، python ،PHP ، JavaScript. ). إذن في رحلتك لعمل موقع ما، لديك خيارات كجافاسكربت البسيطة أو إحدى إطارات عملها لعمل جزء العميل، ولديك العديد من الخيارات الممكنة لعمل جزء الخادم أيضاً، لا نستطيع القول بأن هذا الخيار هو أفضل من غيره لأنها تبقى أدوات فقط، وغالباً يختار المبرمج الأدوات التي تناسبه والتي يملك خبرة أكبر بإستعمالها. نقطة إضافية: يفضل إستخدام لغات و إيطارات العمل المشهورة والأكثر إستخداما.
  16. تعلم البرمجة عموماً يتطلب معرفة بأساسيات اللغة الإنجليزية، وليس من الضروري إتقانها، هناك العديد من مصادر التعلم العربية، لكن يبقى المحتوى الإنجليزي أغنى وأكثر إفادة، لذلك أعتقد أنه يلزم على المطورين والمبرمجين أن يكونوا قادرين على البحث باللغة الإنجليزية، وفهم الكلمات التي يتم سماعها، وهذا ما يجعل المبرمج قادر على قراءة كتب و وثائق اللغات البرمجية، بالإضافة للحلول المشاكل التي يكون جلها باللغة الإنجليزية، وأيضاَ القدرة على فهم الفيديوهات التعليمية. إذن أعتقد أن على المبرمج أن يكون قادراً على قراءة والإستماع للغة الإنجليزية، أما مهارات الكتابة والتحدث فهي ليست أساسية للتعلم، لكن من الممكن أن يحتاج هاته المهارات أثناء التقدم لوظيفة أو العمل على منصات أجنبية أو في حالة طرح بعض الأسئلة أو التواصل مع العملاء.
  17. Dreamweaver CS5 هو أحد إصدارات برنامج Dreamweaver الذي أنشئته شركة Macromedia. وقد قامت شركة Adobe بشراء شركة Macromedia، وإشتمل عقد الشراء على الحصول على حقوق برنامج الدريم ويفر، لتواصل بعد ذلك شركة Adobe تطوير إصدارات البرنامج. نسخة CS5 تم إصدارها سنة 2010 وهي تعتبر قديمة، ولا ينصح بإستعمالها حاليا، ﻷنه أولا هناك العديد من البدائل الأفضل ( Atom, vscode, sublime ) وإن كنت تفضل إستخدام برنامج دريم ويفر فإنه يفضل إستعمال الإصدارات الحديثة منه. يوفر لك البرنامج وبالأخص في إصداراته الجديدة واجهة بسيطة وسهلة الإستخدام، لتصميم صفحات الويب، كما أنه يوفر الوقت والمرونة للمصممين والمطورين، ويعتبر أداة جيدة لمساعدة المبتدئين في مجال التطوير وإنشاء المواقع. من بين أهم المميزات في البرنامج: الإكمال التلقائي للأكواد والتدقيق الإملائي والتصحيح. العرض المرئي المباشر للنتائج الأكواد الخاصة بك. تواجد العديد من القوالب الجاهزة التي يمكنك التعديل عليها. تواجد شريط للأدوات الذي يمكنك من إضافة مجموعة من العناصر الجاهزة لموقعك. أما عن المساوئ فأذكر هنا: التكلفة العالية. كما أنه الإعتماد الكامل على البرنامج يجعل المطور ينسى التعليمات البرمجية، ولا يساعده على التطور أكثر.
  18. مرحبا، في رأيي أن أفضل خيار للتعلم هو تواجد دورة متكاملة، تشرح برمجة الواجهات من الصفر إلى الإحتراف، دورة مبنية بشكل جيد من شخص أو أشخاص ذوي خبرة بالمجال، تواجد أسئلة أو تطبيقات بالدورة أمر جدا لأنه يزيد تفاعلك وفهمك لمحتوى الدورة، وفي حالة حصولك على دعم ومساعدة في حالة واجهتك مشكلة سيكون أمرا رائعا جدا وأفضل لتعلمك. إن توفر هذا الخيار على أي منصة سواءا اليوتيوب بأي قناة بها، أو بإلتحاقك بأكادمية حسوب أو أي دورة مدفوعة او مجانية هو الخيار الأفضل للتعلم. ما يجعل دورة حسوب دورة مدفوعة، هو أنها صيغة على يد خبراء في المجال، والدورة تحاول أخدك بتسلسل من الصفر إلى الإحتراف، كما أنها تعتمد على التطبيق العملي وبناء مشاريع حقيقية، كما أن تواجد خبراء لمساعدتك في حال واجهت أي مشكلة أمر سياعدك في مشوارك كثيرا.
  19. مرحبا لعمل تطبيقات للهواتف، هناك 3 مسارات مختلفة - المسار الأول: تطبيقات Native ولعمل التطبيقات Native يجب إستخدام لغات برمجة ك Java أو Kotlin لمنصة Android، أو إستخدام Objective C أو Swift لمنصة IOS. ولعمل تطبيق يعمل على المنصتين يجب عليك كتابة كودين برمجين الأول لمنصة Android والثاني لمنصة IOS. لكن أداء تطبيقك سيكون جيدا جدا، لأنه مكتوب بالطريقة الأصيلة. - المسار الثاني: تطبيقات hybrid عن طريق إستخدام : عن طريق اللغات HTML و CSS و JavaScriptبالإضافة إلى Cordova يمكن عمل تطبيقات هواتف تعمل على مختلف المنصات، تكتب كود واحد يشتغل بكلا المنصتين Android وIOS، وتعتمد هذه الطريقة على تشغيل ملفات HTML عن طريق WebView ودوره عرض الكود الخاص بك، كما أن Cordova تسمح لك بإستخدام مجموعة من أدوات الهاتف كالوصول لجهات الإتصال أو الكاميرا أو الصور ... لكن الأداء في هذه التطبيقات ليس جيدا جدا، وهو بعيد شيء ما عن الأداء في التطبيقات الأصيلة Native. - المسار الثالث: تطبيقات React Native عن طريق إستخدام JavaScript يمكن عمل تطبيقات بمكتبة React native، المميز في هذه التطبيقات هي أنك تقوم بكتابة كود Javascript ليتم تحويله فيما بعض إلى كودين Native، أحدهما لمنصة Android والأخر لمنصة IOS، وهذا ما يعطيك أداء مشابه لأداء التطبيقات Native عن طريق كتابة كود واحد فقط. إذن من خلال المعلومات السابقة يمكنك إختيار المسار الذي تفضله. بالنسبة للسؤال الإضافي حول PHP، أود إخبارك بأنك معرفتك لل PHP يمكن أن تكون مفيدة في عمل Backend الخاص بالتطبيقات، فتطبيقك لا يستطيع الإتصال مثلا مباشرة بقاعدة البيانات إذن ستحتاج إلى Backend ليدير عملية التواصل ما بين تطبيقك وقاعدة البيانات، إذن معرفة بال PHP هي شيء جيد ويساعدك في عمل تطبيقات قادرة على الإتصال بقاعدة البيانات أو إستخدام أكواد خارجية.
  20. مرحباً، تواجد الدورة على Youtube أو على Udemy لا يحدد جودة المحتوى، فلا نستطيع مقارنة أي كورسين إلا بالإطلاع على المحتوى الخاص بهما أو على الأقل متابعة التعليقات والتقيمات. يجدر بالإشارة أن هناك العديد من الدورات على منصة Udemy لا تقدم محتوى جيد يستحق سعرها، كما أن بها دورات جيدة ومفيدة جداً، وفي نفس الوقت هناك الكثير من الدورات والشروحات على Youtube ذات جودة عالية رغم مجانيتها. أود فقط إضافة شيء بسيط حول منصة Udemy، في منصة Udemy يستطيع أي مستخدم التسجيل ورفع الفديوهات الخاصة به وهذا يجعنا نتحقق قبل شراء أي دورة من قدرة صاحب الدورة على الشرح وإلمامه بالمجال الذي يشرحه، عكس بعض المنصات الأخرى المعروفة بجودة محتواها وأن الأشخاص الذين يقومون بوضع المحتوى بها هم أشخاص ذوي خبرة.
×
×
  • أضف...