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

كل الأنشطة

تحدث تلقائيًا

  1. الساعة الماضية
  2. اليوم
  3. أرجو إذن التحدث لمركز المساعدة وسيتم حل المشكلة لا تقلق.
  4. للاسف ليس هناك دوراتي في شريط التنقل فوق
  5. ستجد الدورات التي اشتركت بها في تبويب دوراتي عند الضغط عليه ستجد الدورة اضغط عليها وسيتم عرض محتواها، بالشكل التالي: إن لم يظهر لك ذلك، أرجو التحدث لمركز المساعدة وسيتم حل المشكلة لك.
  6. انا اشتريت الدورة دي و تم الخصم مني لكن م اقدر اصل الي الدورة
  7. البارحة
  8. لنتأكد أولاً من تثبيت الحزم بشكل صحيح من خلال الأمر: npm install ثم: npm install -D vite laravel-vite-plugin ثم تفقد ملف vite.config.js هل تم إعداده بشكل صحيح، فيجب أن يحتوي على المسارات الصحيحة للملفات كالتالي: import { defineConfig } from 'vite'; import laravel from 'laravel-vite-plugin'; export default defineConfig({ plugins: [ laravel({ input: ['resources/css/app.css', 'resources/js/app.js'], refresh: true, }), ], }); ثم ستحتاج إلى تحديث ملف العرض الرئيسي الخاص بك وهو app.blade.php الموجود في المسار resources/views/layouts/ لإضافة استدعاءات Vite: <head> <!-- Scripts --> @vite(['resources/css/app.css', 'resources/js/app.js']) </head>
  9. لماذا تظهر بهاذا الشكل لقد قمت بتنزل لارافيل ومعه jetstream عند تشغيل المشورع باستخدام npm run dev تظهر لي ملفات ال css في ال network انها غير موجودة وفي نفس الوقت عندنا استعمل php artisan serve كل شي يعمل بشكل طبيعي
  10. موضوع التعلم وطريقة التعلم المناسبة لك بالإضافة لمتابعة الدروس و كم الوقت الذي تحتاجه في اليوم للتعلم يعتمد عليك وحدك و على الطريقة التي ترتاح لها فكل شخص و طبيعته البعض يحب تدوين المعلومات المهمة التي يشرحها المدرب أو المحاضر في الدروس بدفتر و يُنظمها بشكل يُسهل عليه فيما بعد مراجعة تلك المعلومات بسرعة يُمكنك إتباعها إن كنت ترتاح لها. ستجد في المساهمة التالية بعض النصائح ستساعدك في هذا الأمر: لكن أهم شيء هو فهم الدروس أولاً والتطبيق عليها ثانياً، سواء مع المدرب أو وحدك كتطبيق تمارين لزيادة وترسيخ الفهم في المسارات النظرية، أما المسارات التطبيقية فهي مسارات لبناء منتج متكامل والتطبيق عليها يتم بإستمرار مع المدرب ويجب الإحتفاظ بالملفات لتقديمها عند طلب الإمتحان: شروط التقدم للامتحان، أيضا أكاديمية حسوب توفر مجموعة من المدربين للإجابة على إستفسارات الطلاب ومساعدتهم فحاول قدر المستطاع الإستفادة من هذا الأمر، من خلال قسم الأسئلة و الأجوبة العام بطرح أسئلة لا تتعلق بمحتوى الدورة، أو من خلال صندوق التعليقات أسفل الدروس بطرح أسئلة تتعلق بالدروس لطلب شرح جزئية معينة أو مساعدة في تجاوز مشكلة ما.
  11. لو أردت نصيحة واحدة، فالتزم بالأساسيات ولا تتسرع في تعلمها واستوعبها جيدًا ولا تكتفي بما يتم شرحه لك تستطيع التعلم من مصادر مختلفة لا مشكلة، المهم هو استيعاب الأمر بشكل كامل، ثم التطبيق على الأساسيات من خلال أكثر من مشروع وليس مشروع واحد فقط، وستجد مشاريع على اليوتيوب أيضًا. فالغالبية تُهمل الأساسيات ظنًا منها أنها أن تعلم التقنية (المكتبات والإطارات) هو الأهم، والعكس هو الصحيح. وستجد تفصيل هنا بخصوص الطريقة المناسبة لدراسة الدورة:
  12. اجابة هذا السؤال تختلف باختلاف طبيعة الطالب و الظروف المحيطة به ولكن اليك بعض النصائح العامة التي ستساعدك في اكتشاف الطريقة الافضل لك : 1- تنظيم الوقت بشكل فعال تنظيم الوقت يعد مفتاح النجاح في أي مجال، وخاصة في تعلم البرمجة. من الضروري تحديد جدول زمني ثابت للدراسة. خصص ساعات محددة يوميًا أو أسبوعيًا لمتابعة الدروس، والتأكد من الالتزام بها بانتظام. هذا سيساعدك في تجنب التأجيل وضمان تقدم مستمر في تعلمك. 2- الاستمرارية في التعلم الاستمرارية في التعلم مهمة جدًا. حتى إذا كنت تستطيع تخصيص وقت قصير يوميًا للدورة، فهذا أفضل بكثير من الانقطاع لفترات طويلة. الانتظام في الدراسة يساعد في تعزيز المفاهيم الجديدة ويمنع نسيان المعلومات التي تعلمتها مسبقًا. 3- الاحتفاظ بالأكواد المكتوبة الاحتفاظ بالأكواد التي تكتبها خلال الدورة أمر بالغ الأهمية. وفي سياق الدورة سيتم شرح كيفية القيام بإنشاء مستودع على GitHub أو استخدام أدوات التحكم في الإصدار مثل Git لتخزين الأكواد. هذا سيسمح لك بالرجوع إليها لاحقًا واستخدامها كمراجع عند مواجهة مشكلات مشابهة أو عند العمل على مشاريع جديدة. 4- كتابة ملخصات شخصية نظرًا لأن الدورة قد لا تحتوي على ملخصات، فمن المفيد جدًا كتابة ملخصاتك الخاصة. قم بتدوين النقاط الرئيسية والمفاهيم المهمة لكل درس. هذا سيساعدك على مراجعة المادة بسرعة ويعزز من فهمك واستيعابك للمحتوى. 5- الاستفادة من قسم التعليقات أكاديمية حسوب توفر ميزة التعليق أسفل الدروس، لذا لا تتردد في طرح الأسئلة وطلب التوضيحات عند الحاجة. الاستفسار والمشاركة في المناقشات يمكن أن يوفر لك إجابات سريعة ومفيدة من المدربين والزملاء. 6- التطبيق العملي المستمر: البرمجة هي مهارة تحتاج إلى تطبيق عملي مستمر. 7- البحث عن موارد إضافية: لا تقتصر على المواد الدراسية للدورة فقط. ابحث عن كتب، مقالات، وفيديوهات تعليمية لتعميق معرفتك بالمجالات التي تدرسها. 8- تطبيق المفاهيم في مشاريع شخصية.
  13. السلام عليكم اريد معرفه الطريقه الصحيحه للمذاكره في هذا الكورس والاستفاده اكبر قدر ممكن وشكرا
  14. المشروع بسيط وليس معقد هل استخدم هذا الخطوات في تحديث webpack https://webpack.js.org/migrate/5/
  15. أتفهم أنّ الأمور تكون غير واضحة في البداية وبحاجة إلى التوضيح من خلال المزيد من التفصيل، وفي الدورة يتم تبسيط الأمور قدر الإمكان، لذا بعض التفاصيل لا يتم ذكرها، لذا تستطيع السؤال عما تريد أسفل كل درس وسيتم توضيح الأمر لك بشكل شامل. وفي المشاريع العملية يتم التطرق إلى ما تم شرحه بالمزيد من التفصيل والأمثلة العملية. وكنصيحة لا تتخطى أي درس بدون استيعابه والتطبيق عليه، ثم الجمع ما بين عدّة دروس والتطبيق عليهم وتوظيف ما تعلمته في تطبيق واحد.
  16. هذا يعتمد على مدي حجم المشروع والمكتبات التي يتم إستخدامها . حيث إذا كان حجم المشروع كبيرا فستجد أنه بمجرد تحديث حزمة ستحدث مشاكل كثيرة لديك بسبب تداخل إصدارات الحزم وإعتمادها علي بعضها البعض ولذلك يفضل في تلك الحالة تحميل إصدار nodejs يتوافق مع جميع تلك الحزم . أو محاولة تحديث جميع الحزم لديك ولكنك يتوجب عليك التغير كثيرا في الكود . لذلك إذا كان المشروع صغيرا في الحجم فيفضل تحديث مكتبة webpack و حل أى مشكلة تظهر لك بسبب الإعدادت القديمة وإستبدالها بالجديدة و لكن إذا كان المشروع كبيرا فيفضل تحميل نسخة nodejs قديمة تتوافق معه
  17. بحل المشكلة من جذورها وليس الإلتفاف بتغيير إصدار node.js نفسه، فكما ذكرت لك مكتبة Webpack غير متوافقة مع الإصدار الحديث لديك وهو 20، عليك تحديث كل من webpack و webpack CLI لأحدث إصدار، وتعديل الإعدادات فيwebpack.config بما يتناسب مع الإصدار الحديث.
  18. نعم سوال عام ماهي أفضل طريقة يتم التعامل بها مع إختلاف الاصدار لل nodejs
  19. هل السؤال خاص بدرس معين في الدورة ؟ أم أنه غير خاص بالدورات؟ في حال كان خاص بالدورات أرجو التعليق أسفل الدرس لمساعدتك بشكل أفضل. عامًة يجب إصلاح المشكلة المسؤولة عن ذلك وهي نسخة webpack لديك قديمة وغير متوافقة مع إصدار node.js الحديث، عليك تحديثها.
  20. نعم هذه مشكلة تحدث بسبب إصدار nodejs يمكنك التغير إلى إصدار 16 وسيتم حل المشكلة أو تحديث إصدار webpack لديك. أو يمكنك فقط تنفيذ الأمر التالي في cmd قبل تشغيل السيرفر: set NODE_OPTIONS=--openssl-legacy-provider وهذا الأمر سيحل تلك المشكلة إن شاء الله
  21. هل يجب تغيير إصدار ال node لكي تتوافق مع المشروع أم العكس
  22. ستجد أسفل فيديو الدرس في نهاية الصفحة صندوق تعليقات كما هنا، أرجو طرح الأسئلة أسفل الدرس وليس هنا في قسم الأسئلة البرمجة حيث نطرح الأسئلة العامة الغير متعلقة بمحتوى الدورة أو الدرس، وذلك لمساعدتك بشكل أفضل.
  23. عند عمل الامر npm run build لمشروع html scss js كأن الاصدار من ال node لايتوافق ويظهر هذا الخطاء > company@1.0.0 build > webpack serve --mode production (node:22464) [DEP0111] DeprecationWarning: Access to process.binding('http_parse r') is deprecated. (Use `node --trace-deprecation ...` to show where the warning was created) i 「wds」: Project is running at http://localhost:9000/ i 「wds」: webpack output is served from undefined i 「wds」: Content not from webpack is served from C:\Users\Mohsen\ALaravel\compan y-website\build node:internal/crypto/hash:69 this[kHandle] = new _Hash(algorithm, xofLen); ^ Error: error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:69:19) at Object.createHash (node:crypto:138:10) at BulkUpdateDecorator.hashFactory (C:\Users\Mohsen\ALaravel\company-website \node_modules\webpack\lib\util\createHash.js:138:18) at BulkUpdateDecorator.update (C:\Users\Mohsen\ALaravel\company-website\node _modules\webpack\lib\util\createHash.js:44:50) at RawSource.updateHash (C:\Users\Mohsen\ALaravel\company-website\node_modul es\webpack-sources\lib\RawSource.js:64:8) at NormalModule._initBuildHash (C:\Users\Mohsen\ALaravel\company-website\nod e_modules\webpack\lib\NormalModule.js:736:17) at handleParseResult (C:\Users\Mohsen\ALaravel\company-website\node_modules\ webpack\lib\NormalModule.js:800:10) at C:\Users\Mohsen\ALaravel\company-website\node_modules\webpack\lib\NormalM odule.js:853:4 at processResult (C:\Users\Mohsen\ALaravel\company-website\node_modules\webp ack\lib\NormalModule.js:624:11) at C:\Users\Mohsen\ALaravel\company-website\node_modules\webpack\lib\NormalM odule.js:675:5 { opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ], library: 'digital envelope routines', reason: 'unsupported', code: 'ERR_OSSL_EVP_UNSUPPORTED' } Node.js v20.5.1 كيف العمل مع هذه المشكلة
  24. نتحدث في مقالنا عن عمّال جافا سكريبت workers وهي تقنية تساعدك في تنفيذ المهام ضمن خيوط معالجة threads منفصلة. ولقد أشرنا في مقالات سابقة إلى ما يحدث عندما تنفّذ عملية متزامنة طويلة في برنامجك، فقد يصبح البرنامج غير متجاوب بالكامل. ويعود السبب أساسًا إلى أن البرنامج يعمل على خيط معالجة واحد single-threaded. يُعرّف خيط المعالجة بأنه سلسلة من التعليمات المتلاحقة التي يتبعها البرنامج. فإن كان البرنامج وحيد الخيط سيُنفَّذ تعليمة تلو اﻷخرى، وسينتظر البرنامج انتهاء أي عملية متزامنة طويلة التنفيذ حتى يتابع ولا يمكنه أثناء ذلك تنفيذ أي شيء. لهذا السبب ظهرت تقنية العمال workers لتمنحك القدرة على إنجاز بعض المهام ضمن خيوط معالجة مختلفة، إذ تبدأ حينها مهمة معينة ثم تنتقل (وهي لا تزال قيد المعالجة) لتعمل على أخرى (كأن تعالج مدخلات المستخدم). لكن ما يجب الانتباه إليه هو قدرة العمال على الوصول إلى البيانات المشتركة وتغييرها بشكل مستقل وغير متوقع أحيانًا وهذا ما يسبب بعض الثغرات التي يصعب إيجادها. لهذا ولكي نتفادى هذا النوع من المشاكل وخاصة في تطبيقات الويب، لا ينبغي لشيفرة العمال وللشيفرة اﻷساسية الوصول إلى متغيرات اﻷخرى، وقد يشتركا ببعض البيانات في حالات خاصة جدًا. تُنفذ الشيفرة اﻷساسية وشيفرة العمال في عالمين منفصلين تمامًا، وتتواصلان مع بعضهما من خلال تبادل رسائل. ويعني ذلك تحديدًا عدم قدرة العمال على الوصول إلى شجرة DOM (مثل النوافذ أو المستند أو عناصر صفحة الويب). وهناك ثلاث أنواع مختلفة من العمال: عمال مختصون Dedicated workers. عمال مشتركون Shared workers. عمال خدمة Service workers. سنتعرف على النوع الأول من خلال مثال تطبيقي، ثم نناقش النوعين اﻵخرين باختصار. استخدام عمال ويب هل تتذكر تلك الصفحة التي توّلد أعدادًا أولية في مقال سابق؟ سنعود إليها ونستخدم عاملًا لتنفيذ الحسابات حتى تبقى الصفحة متجاوبة مع ما يفعله المستخدم. مولّد اﻷعداد اﻷولية المتزامن لنلق نظرة في البداية إلى شيفرة جافا سكريبت الموافقة: function generatePrimes(quota) { function isPrime(n) { for (let c = 2; c <= Math.sqrt(n); ++c) { if (n % c === 0) { return false; } } return true; } const primes = []; const maximum = 1000000; while (primes.length < quota) { const candidate = Math.floor(Math.random() * (maximum + 1)); if (isPrime(candidate)) { primes.push(candidate); } } return primes; } document.querySelector("#generate").addEventListener("click", () => { const quota = document.querySelector("#quota").value; const primes = generatePrimes(quota); document.querySelector("#output").textContent = `Finished generating ${quota} primes!`; }); document.querySelector("#reload").addEventListener("click", () => { document.querySelector("#user-input").value = 'Try typing in here immediately after pressing "Generate primes"'; document.location.reload(); }); ستتوقف استجابة البرنامج يعد أن نستدعي الدالة ()generatePrimes. مولّد أرقام أولية باستخدام عامل ويب Web worker عليك أولًا قبل أن تشرع العمل معنا تنزيل نسخة من ملفات البرنامج، وهي أربعة ملفات: index.html style.css main.js generate.js ستجد أن الملفين "index.html" و "style.css" مكتملان. إليك أولًا ملف HTML: <!doctype html> <html lang="en-US"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <title>Prime numbers</title> <script src="main.js" defer></script> <link href="style.css" rel="stylesheet" /> </head> <body> <label for="quota">Number of primes:</label> <input type="text" id="quota" name="quota" value="1000000" /> <button id="generate">Generate primes</button> <button id="reload">Reload</button> <textarea id="user-input" rows="5" cols="62"> Try typing in here immediately after pressing "Generate primes" </textarea> <div id="output"></div> </body> </html> وهذا محتوى ملف CSS: textarea { display: block; margin: 1rem 0; } كما ستجد الملفين "main.js" و "generate.js" فارغين وسنضع الشيفرة الرئيسية في الملف "main.js " وشيفرة العامل ضمن الملف "generate.js". إذا ما نلاحظه أولًا كيفية فصل شيفرة العامل عن الشيفرة الرئيسية، كما سترى أننا أضفنا فقط الشيفرة اﻷساسية إلى صفحة الويب "index.html" ضمن العنصر <script>. انسخ اﻵن الشيفرة التالية إلى الملف "main.js": //"generate.js" أنشئ عاملًا جديدًا، ونسند إليه الشيفرة الموجودة في الملف const worker = new Worker("./generate.js"); //أرسل رسالة إلى العامل "Generate primes" عندما ينقر المستخدم //"quota" وتضم أيضًا القيمة "generate" اﻷمر الموجود في الرسالة هو //وهي عدد اﻷرقام اﻷولية التي نولّدها document.querySelector("#generate").addEventListener("click", () => { const quota = document.querySelector("#quota").value; worker.postMessage({ command: "generate", quota, }); }); //عندما يعيد العامل ارسال إلى خيط المعالجة الرئيسي //حدّث صندوق الخرج برسال إلى المستخدم تتضمن عدد اﻷعداد الأولية التي ولدناها // والمأخوذة من بيانات الرسالة اﻷصلية worker.addEventListener("message", (message) => { document.querySelector("#output").textContent = `Finished generating ${message.data} primes!`; }); document.querySelector("#reload").addEventListener("click", () => { document.querySelector("#user-input").value = 'Try typing in here immediately after pressing "Generate primes"'; document.location.reload(); }); ننشئ بداية عاملًا باستخدام البانية ()Worker، ونمرر إليها عنوان URL يشير إلى سكريبت العامل.تُنفَّذ شيفرة العامل بمجرد إنشاءه. وكما هو الحال في النسخة المتزامنة من التطبيق نضيف معالجًا للحدث click خاصًا بالزر "Generate primes". لكن وبدلًا من استدعاء الدالة ()generatePrimes، نرسل رسالة إلى العامل باستخدام التابع ()worker.postMessage الذي يأخذ وسيطًا واحدًا. لهذا نمرر له كائن JSON يضم خاصيتين: command: وتضم قيمة نصية تخبر العامل ما عليه فعله (في حال كان باستطاعته تنفيذ أكثر من شيء). quota: عدد اﻷعداد اﻷولية التي يولّدها. نضيف تاليًا معالج الحدث message إلى العامل، لكي يبلغنا العامل من انتهاء عمله ويعيد أية نتائج نريدها. يأخذ معالج الحدث بياناته من الخاصية data العائدة للرسالة ويطبعها ضمن عنصر الخرج (البيانات هنا هي نفسها قيمة الخاصية quota، لذا لا حاجة لها عمليًا ووضعناها لعرض مبدأ العمل فقط). أضفنا اخيرة شيفرة معالج حدث النقر click للزر "Reload"، وهي مشابهة تمامًا لشيفرة النسخة المتزامنة. انقل اﻵن الشيفرة التالية إلى الملف "generate.js": // Listen for messages from the main thread. // If the message command is "generate", call `generatePrimes()` addEventListener("message", (message) => { if (message.data.command === "generate") { generatePrimes(message.data.quota); } }); // Generate primes (very inefficiently) function generatePrimes(quota) { function isPrime(n) { for (let c = 2; c <= Math.sqrt(n); ++c) { if (n % c === 0) { return false; } } return true; } const primes = []; const maximum = 1000000; while (primes.length < quota) { const candidate = Math.floor(Math.random() * (maximum + 1)); if (isPrime(candidate)) { primes.push(candidate); } } // When we have finished, send a message to the main thread, // including the number of primes we generated. postMessage(primes.length); } وتذكّر أن هذه الشيفرة ستُنفَّذ بمجرد إنشاء عامل جديد. يترصّد العامل بداية الرسائل التي ترسلها الشيفرة الرئيسية من خلال الدالة ()addEventListener وهي دالة عامة في العامل. وتضم الخاصية data الموجودة ضمن معالج حدث الرسالة message نسخة من الوسيط الذي تمرره الشيفرة الرئيسية. فإذا مررت الشيفرة الرئيسية اﻷمر generate، نستدعي حينها الدالة ()generatePrimes ونمرر لها القيمة quota من الحدث message. تشبه الدالة ()generatePrimes مقابلتها في النسخة المتزامنة من التمرين ما عدا أننا نرسل رسالة إلى السكريبت الرئيسي عند الانتهاء بدلًا من إعادة قيمة. ونستخدم في هذه الحالة التابع ()postMessage والذي يشبه الدالة ()addEventListener بأنه عام في شيفرة العامل أيضًا. وكما رأينا، يستمع السكريبت الرئيسي إلى الرسالة ويُحدّث شجرة DOM عند استقبال الرسالة. ملاحظة: لتشغيل هذا الموقع، عليك تشغيل خادم محلي على حاسوبك،إذ لا يُسمح بتحميل شيفرة العامل من الوجهة. وإن صادفتك أي مشاكل في إنشاء نسختك من التمرين` بإمكانك الاطلاع على النسخة المكتملة) منه على جت-هب أو تجربته مباشرة. أنواع أخرى من العمال workers يُدعى العامل الذي أنشأناه في المثال السابق بالعامل المخصص dedicated worker. ويعني ذلك أنه استخدم من قبل سكريبت واحد. وهنالك نوعين آخرين هما: العمال المشتركون shared workers: ويمكن مشاركتهم بين أكثر من سكريبت أثناء تنفيذها في نوافذ مختلفة للمتصفح. عمّال الخدمة service workers: ويعملون كخوادم وكيلة proxy servers أو لتخزين الموارد مؤقتًا كي تعمل صفحة ويب عندما لا يكون المتصفح متصلا بالشبكة، فهي مكوّن أساسي من مكوّنات تطبيقات الويب المتقدمة Progressive Web Apps الخلاصة تعرّفنا في هذا المقال على عمال ويب web workers، وهي تقنية تمكّن تطبيق ويب من نقل المهام إلى خيط معالجة آخر. ورأينا أن خيط المعالجة اﻷساسي وخيط العمال لا يتشاركان المتغيرات، بل يتواصلان من خلال إرسال الرسائل التي يتلقاها الطرف اﻵخر على شكل أحداث للكائن message. يمكن أن تقدم هذه التقنية طريقة فعالة ﻹبقاء التطبيق اﻷساسي متجاوبًا، على الرغم من عدم قدرة العمال على الوصول إلى كل الواجهات البرمجية التي يصلها التطبيق اﻷساسي وخصوصًا عناصر شجرة DOM. ترجمة -وبتصرف- للمقال: Introducing workers اقرأ أيضًا: المقال السابق: إنجاز واجهة برمجية في جافا سكريبت تعتمد على الوعود معالجة الأحداث في جافا سكريبت مدخل إلى جافا سكريبت غير المتزامنة المزخرفات decorators والتمرير forwarding في جافاسكربت
  25. سؤالك ليس واضحا . هل تقصد تطبيقات الهاتف التي تستخدم في السيارات أم تقصد تطبيقات للسيارات ذاتية القيادة أم ماذا ؟ أما بالنسبة لتطبيقات الهاتف . فنعم يمكن لمطور الويب أن ينشئ تطبيقات ولكنه سيتوجب عليه إستخدام تقنيات أخري مثل react native و electron.js و Kotlin و Java . أما بالنسبة إلى التطبيقات الخاص بالسيارات ذاتية القيادة أو التفاعل مع السيارات عموما فمن الصعب على مطور الويب أن ينشئ تلك التطبيقات دون دراسة مثل embeded systems و لغات مثل C و C++ واللغات التي تستطيع التعامل والتحكم فى النظم المدمجة .
  26. بالطبع لا فالأمر مختلف، فأنت لا تقوم بتطوير تطبيق لسيارة من خلال لغة جافاسكريبت فهي غير مناسبة لذلك. فأنت بحاجة إلى لغة منخفضة المستوى مثل C وC++ وأحيانًا assembly، وذلك للتطبيقات الخاصة بنظام السيارة. بالطبع يتوفر نظام مثل Android Auto الذي يُتيح لك تطوير تطبيقات للسيارة من خلال لغة مثل كوتلين، لكن ستظل بحاجة إلى أساسيات C++ على الأقل.
  1. عرض المزيد
×
×
  • أضف...