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

كل الأنشطة

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

  1. الساعة الماضية
  2. شرحنا في المقال السابق طريقة استخدام واجهات برمجة التطبيقات التي تعيد الوعود promises، وسنتحدث في هذا المقال عن تعريف الواجهات البرمجية التي تعيد وعودًا في لغة البرمجة جافا سكريبت، ونلقي نظرة على كيفية إنجاز هذه الواجهات البرمجية بأنفسنا، وعلى الرغم من أن مهمة كهذه ليست شائعة الاستخدام كثيرًا لكن من المفيد لك معرفتها. ملاحظة: عند تنفيذ واجهة برمجة تطبيقات معتمدة على الوعود promise-based API ستحتاج لأن نغلّف عملية غير متزامنة (مثل اﻷحداث events، أو دوال رد النداء callbacks، أو نموذج يعمل على تمرير الرسائل message-passing model) وسيكون عليك هيكلة كائن Promise للتعامل مع حالات نجاح تنفيذ هذه العملية resolve أو إخفاقها reject. تنفيذ الواجهة البرمجية ()alarm ما سنفعله في هذا المثال هو إنجاز واجهة برمجية لمنبّه تُدعى ()alarm. تقبل هذه الواجهة وسيطًا هو اسم الشخص الذي ستوقظه كما تأخذ وسيطًا آخر هي الفترة الزمنية التي ينتظرها المنبه بالميلي ثانية قبل إيقاظ الشخص. بعد ذلك تُرسل الدالة الرسالة "Wake up" (أي استيقظ) يليها اسم الشخص. تغليف الدالة ()setTimeout نستخدم الواجهة ()setTimeout في إنجاز واجهتنا ()alarm، وتأخذ هذه الواجهة وسيطين: دالة تستدعيها عند بلوغ زمن التنبيه، واﻵخر زمن التنبيه بالميلي ثانية. وعندما تُستدعى الواجهة ()setTimeout، تبدأ بالعد وصولًا إلى زمن التنبيه وتستدعي عندها الدالة التي مررناها إليها. نستدعي في مثالنا التالي الدالة ()setTimeout مع وسيطيها دالة رد النداء وزمن التنبيه الذي سيكون 1000 ميلي ثانية. إليك شيفرة HTML: <button id="set-alarm">Set alarm</button> <div id="output"></div> ثم شيفرة جافا سكريبت: const output = document.querySelector("#output"); const button = document.querySelector("#set-alarm"); function setAlarm() { setTimeout(() => { output.textContent = "Wake up!"; }, 1000); } button.addEventListener("click", setAlarm); إليك نتيجة التنفيذ: See the Pen promise-based API1 by Hsoub Academy (@HsoubAcademy) on CodePen. الدالة البانية ()Promise تُعيد الدالة وعدًا Promise يُنجز عندما ينقضي الوقت المخصص للمنبّه، ويمرر الرسالة إلى معالج ()then بينما يُرفض الوعد إن كان زمن التنبيه سالبًا. إن المفتاح الرئيسي للعمل هنا هي الدالة البانية ()Promise التي تأخذ دالة استدعاء كوسيط لها وندعوها دالة منفّذة executer وعليك كتابة شيفرة هذه الدالة عند إنشاء وعد جديد. وتأخذ الدالة المنفذة دالتين كوسيط لها تُدعيان تقليديًا الدالة resolve والدالة reject. تستدعي الدالة المنفذة الدالة غير المتزامنة فإن أنجز الوعد ستُستدعى الدالة resolve وإن أخفق تُستدعى الدالة reject. إما إذا رمت الدالة المنفذة خطأً، ستُستدعى reject تلقائيًا. باﻹمكان تمرير أية قيم إلى الدالتين resolve و reject. لذا بإمكانك كتابة شيفرة الواجهة ()alarm كالتالي: function alarm(person, delay) { return new Promise((resolve, reject) => { if (delay < 0) { throw new Error("Alarm delay must not be negative"); } setTimeout(() => { resolve(`Wake up, ${person}!`); }, delay); }); } تُنشئ الدالة السابقة وعدًا Promise وتعيده، وضمن الدالة المنفذة: نتحقق من قيمة زمن التنبيه delay حتى لا تكون سالبة. نستدعي الدالة ()setTimeout ونمرر لها القيمة delay، ومن ثم تُستدعى دالة رد النداء الموجودة ضمن الدالة السابقة عند انقضاء الوقت المحدد ومن ثم تٌستدعى الدالة resolve بعد أن نمرر لها الرسالة "!Wake up". استخدام الواجهة البرمجية ()alarm من المفترض أن تكون الشيفرة التالية مألوفة من المقال السابق. إذ نستطيع استدعاء الواجهة ()alarm ومن ثم نستدعي ()then و ()catch لكائن الوعد الذي تعيده للتعامل مع حالتي إنجاز الوعد أو رفضه: const name = document.querySelector("#name"); const delay = document.querySelector("#delay"); const button = document.querySelector("#set-alarm"); const output = document.querySelector("#output"); function alarm(person, delay) { return new Promise((resolve, reject) => { if (delay < 0) { throw new Error("Alarm delay must not be negative"); } setTimeout(() => { resolve(`Wake up, ${person}!`); }, delay); }); } button.addEventListener("click", () => { alarm(name.value, delay.value) .then((message) => (output.textContent = message)) .catch((error) => (output.textContent = `Couldn't set alarm: ${error}`)); }); إليك نتيجة التنفيذ: See the Pen promise-based API2 by Hsoub Academy (@HsoubAcademy) on CodePen. جرب تحديد قيم مختلفة لكل من person و delay وحاول تمرير قيم delay سالبة وراقب الخرج الناتج. استخدام التعليمين async و await مع الواجهة البرمجية alarm()‎ طالما أن الواجهة ()alarmتعيد وعدًا، نستطيع أن نطبق عليه ما يُطبق على أي وعد آخر، مثل ربطه ضمن سلسلة وعود promise-chain أو استخدام ()all. وكذلك wait/async. const name = document.querySelector("#name"); const delay = document.querySelector("#delay"); const button = document.querySelector("#set-alarm"); const output = document.querySelector("#output"); function alarm(person, delay) { return new Promise((resolve, reject) => { if (delay < 0) { throw new Error("Alarm delay must not be negative"); } setTimeout(() => { resolve(`Wake up, ${person}!`); }, delay); }); } button.addEventListener("click", async () => { try { const message = await alarm(name.value, delay.value); output.textContent = message; } catch (error) { output.textContent = `Couldn't set alarm: ${error}`; } }); إليك نتيجة التنفيذ: See the Pen promise-based API3 by Hsoub Academy (@HsoubAcademy) on CodePen. الخلاصة تعرفنا في هذا المقال على كيفية استخدام الواجهات البرمجية التي تعيد وعودًا promises، وألقينا نظرة على كيفية إنجاز الواجهات البرمجية التي تعيد الوعود من خلال مثال تطبيقي ينجز واجهة منبه للمستخدم بعد انقضاء وقت معين. ترجمة -وبتصرف- للمقال: How to implement a promise-based API اقرأ أيضًا: المقال السابق: استخدام الوعود Promises في جافا سكريبت اللاتزامن والانتظار async/await في جافاسكربت مدخل إلى جافا سكريبت غير المتزامنة البرمجة غير المتزامنة في جافاسكريبت الوعود Promise في جافاسكربت
  3. اليوم
  4. تلك العملية تتم من جهة قاعدة البيانات، فالأمر عبارة عن تخزين بيانات ثم مقارنتها والتحقق منها والسماح أو المنع بعد ذلك حسب النتيجة. فأولاً، تحتاج إلى إنشاء جداول قاعدة البيانات لتخزين المستخدمين والسيريالات. CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL ); CREATE TABLE serials ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT NOT NULL, serial_key VARCHAR(50) NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, used TINYINT(1) DEFAULT 0 ); ثم عند شراء المستخدم للسكربت، يتم توليد السيريال وتخزينه في قاعدة البيانات. function generateSerial($userId) { $randomPart = bin2hex(random_bytes(15)); $datePart = date('Ymd'); $serial = $userId . '-' . $randomPart . '-' . $datePart; return $serial; } function storeSerial($userId, $serial) { $pdo = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password'); $stmt = $pdo->prepare("INSERT INTO serials (user_id, serial_key) VALUES (:user_id, :serial_key)"); $stmt->execute(['user_id' => $userId, 'serial_key' => $serial]); } // افتراض أن المستخدم قد اشترى السكربت وتم تمرير معرف المستخدم $userId = 1; $serial = generateSerial($userId); storeSerial($userId, $serial); وفي صفحة التحقق من السيريال، تقوم بالبحث عن المستخدم ثم التحقق من السريال ثم تحديث حالة السيريال على أنه أصبح مستخدم ثم متابعة التثبيت، وإن لم يحدث ذلك يعني أنّ التحقق فشل ولا يتم المتابعة. function verifySerial($username, $serial) { $pdo = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password'); $stmt = $pdo->prepare("SELECT id FROM users WHERE username = :username"); $stmt->execute(['username' => $username]); $user = $stmt->fetch(PDO::FETCH_ASSOC); if ($user) { $userId = $user['id']; $stmt = $pdo->prepare("SELECT * FROM serials WHERE user_id = :user_id AND serial_key = :serial_key AND used = 0"); $stmt->execute(['user_id' => $userId, 'serial_key' => $serial]); $serialData = $stmt->fetch(PDO::FETCH_ASSOC); if ($serialData) { $stmt = $pdo->prepare("UPDATE serials SET used = 1 WHERE id = :id"); $stmt->execute(['id' => $serialData['id']]); return true; } } return false; } if ($_SERVER['REQUEST_METHOD'] === 'POST') { $username = $_POST['username']; $serial = $_POST['serial']; if (verifySerial($username, $serial)) { } else { unlink('install.php'); echo "بيانات خاطئة أو السيريال مستخدم سابقاً."; } } وبخصوص التحقق من أن كود الحماية لم يُزال، يمكنك استخدام تقنيات مثل Obfuscation (إخفاء الكود) أو تضمين كود التحقق في أماكن متعددة في السكربت. function checkIntegrity() { if (!file_exists('install.php')) { header('Location: رابط موقعك'); exit(); } } checkIntegrity(); حيث تقوم بتضمين الدالة السابقة في جميع الملفات المهمة للتأكد من أن ملف install.php لم يُحذف.
  5. الفرق ليس في نوع البيانات المستعمل و إنما في نوع المهمة حيث أن التصنيف مهمة مختلفة عن ال clustering. قد تبدو لك عملية التصنيف هي نفسها عملية تقسيم البيانات إلى أصناف و لكن الأمر ليس نفسه. في مهمة التصنيف يكون لديك علم مسبق بالأصناف التي تريد للنموذج التعرف عليها، بينما في مهمة ال clustering لا تكون لديك هذه المعلومة. بالتالي في حال كان المقصود بقولك "نوع البيانات" هو المسميات labels الخاصة بالبيانات فهذا صحيح. كما النماذج المستعملة لكل مهمة ستختلف قليلًا حيث أن النماذج التي تقوم بعملية ال clustering لا تقوم بتوقع أصناف و إنما بتعلم ميزات من البيانات بحيث يتم استعمال هذه الميزات لاحقًا لفصل البيانات إلى أصناف، بينما في مهمة التصنيف يتم توقع الأصناف بشكل مباشر. اختلاف النماذج أيضًا يؤدي إلى اختلاف طريقة التدريب، مهام التصنيف بشكل عام تتبع التعلم الموجه Supervised learning بينما مهام ال clustering فهناك الكثير من أنماط التدريب الخاص بها منها التعليم غير موجه Unsupervised learning أو التعليم ذاتي التوجيه Self-supervised learning و غيرها الكثير من الأنماط الأخرى.
  6. خوارزمية k-means تعد الأشهر لسهولة استعمالها و فهمها، حيث يمكنك فهم آلية عملها حتى لو لم تكن لديك معلومات جيدة في الرياضيات. بالطبع هي ليست الأفضل، و حاليًا يتم التوجه إلى استعمال نماذج الذكاء الاصطناعي في عملية ال clustering بدلًا من الاعتماد على خوارزميات غير قابلة للتعلم، حيث أن خوارزمية مثل خوارزمية ال k-means لا تتعلم بناء على البيانات، كما أن استعمال هذه الخوارزمية يتطلب وجود طريقة معينة يمكن من خلالها إسناد كل غرض إلى نقطة في فضاء الإحداثيات. لذلك قد تجد بعض الطرق تستعمل نماذج الذكاء الاصطناعي لإسناد كل غرض (مثلاً صورة) إلى نقطة في فضاء الإحداثيات و من ثم يتم استعمال ال k-means. أو هناك بعض الطرق التي تعتمد بشكل كلي على نماذج الذكاء الاصطناعي للقيام بذلك عن طريق تدريب النموذج بشكل ذاتي التوجيه self-supervised بحيث يقوم بتعلم الأصناف لوحده. نصيحتي لك هي أن تقوم بتطبيق أبسط تقنية في البداية و أن تنتقل لتقنية معقدة أكثر فقط في حال كان هناك مشاكل معينة تواجهك في الطريقة البسيطة. هذا سيوفر عليك الوقت و الجهد.
  7. ليس هناك إستفادة مرتبطة بمجال تطوير البرمجيات من تطبيق Excel ولكن بالتأكيد في وقت ما ستحتاج لاستخدامه في بعض المهام المختلفه وفي بعض المشاريع المختلفه مثل استخدام Excel لتحليل البيانات واستخلاص الأنماط والاتجاهات منها. و يمكن استخدامه لإدارة البيانات الخاصة بمشاريع البرمجة. حيث يمكنك إنشاء قوائم لتتبع المهام والمواعيد النهائية وتوزيع الموارد. إنشاء تقارير ومخططات بيانية لعرض البيانات البرمجية بشكل بصري.يمكنك استخدام الرسوم البيانية والمخططات لتوضيح النتائج وتقديمها بشكل مرئي وسهل الفهم. إدارة مشاريع البرمجة وتتبع التقدم والمهام المفتوحة والموارد المستخدمة. لذلك يعتبر تعلم إكسل هو استثمار قيم لكل من يتعامل مع الحاسوب بشكل مستمر.
  8. شكرا لك لكن هل Mediavine توفر فلترة للاعلانات و هل Adsterra توفر ذلك ايضا و هل يوجد طرق بدل ذلك مثل بيع مساحة اعلانية في موقع لكن لا اعلم الكثير عنها فقط سمعت عنها
  9. بالطبع هناك العديد من البدائل التي يمكن استخدامها بدلاً من Firebase، وبالإضافة للإقتراحات في التعليق السابق يمكنك الإطلاع على AWS Amplify تقدم مجموعة متكاملة من الأدوات والخدمات ، بما في ذلك قواعد البيانات، المصادقة، التخزين، والوظائف بدون خادم. وأعتقد أنها متاحه في معظم الدول، بما في ذلك الدول العربية. ويوجد أيضاً Back4App وهي توفر واجهة سهلة الاستخدام وتبسيط تطوير الجزء الخلفي للتطبيقات، مما يجعلها مناسبة للمطورين الذين يفضلون حلول low-code أو no-code .
  10. بالطبع أنت ستعتمد على محرك البحث لتحصل على زيارات، إذن عليك أولاً ضبط الـ SEO لموقعك، من خلال تحسين جودة الموقع وتصمميه وسرعة تحميله أي تحسين تجربة المستخدم فهي العامل الأهم حاليًا. ومن ضمن تلك الأمور هو شراء دومين ولا يشترط .com تستطيع شراء دومين بأي لاحقة مختلفة وبسعر زهيد. وإذا لا تريد شراء دومين فحاول التقدم لمنصة Adsterra فهي تقبل ذلك. بعد ذلك ستحتاج إلى كتابة مقالات في موقعك لتسويقه من خلال المحتوى ويظهر على كلمات محددة في جوجل. أيضًا إنشاء روابط باك لينكس backlinks لتحسين ظهور الموقع في جوجل ومدى موثوقيته. وستحتاج 10 آلاف زائر كحد أدنى لتتمكن من التقدم لأحد مقدمي الإعلانات، مثل ezoic. لديك أيضًا Mediavine لكن يتطلب 25,000 زائر شهريًا على الأقل. ألقي نظرة على popads أيضًا.
  11. اريد موقع بديل ادسنس يقبل المواقع ذات النطاق المجاني و تكون اعلانات (حلال)
  12. لم يتم ذكر ما نوع المشروع والبيانات الخاصة به؟ عامًة لا مشكلة في استخدام أكثر من قاعدة بيانات مع Django، تفقد التالي: https://docs.djangoproject.com/en/5.0/topics/db/multi-db/ وهو يقصد الجداول الداخلية التالية: django_content_type (content types for models) django_migrations (migration history) django_session (session data) auth_permission (permissions) auth_group (groups) بسبب ذلك، عليك تخصيص قاعدة بيانات مركزية تحتوي على الجداول التي يستخدمها Django داخليًا. ثم استخدم موجهات قواعد البيانات Database Routers لتحديد الجداول التي يجب أن تكون في قاعدة البيانات المركزية والجداول التي يمكن أن تكون في قواعد البيانات الأخرى.
  13. تحتاج أيضاً للعمل على محرك Roblox Studioتعلم البرمجة حيث يكون مفيدًا إذا كنت ترغب في العمل على محرك Roblox Studio بفعالية أكبر. و إليك بعض الأسباب الرئيسية التي تجعل تعلم البرمجة ضروريًا: البرمجة تسمح لك بتخصيص تجربة اللعبة والتحكم في جميع جوانبها. يمكنك إنشاء ميزات معقدة وسلوكيات ديناميكية تتجاوز الإمكانيات الأساسية التي يوفرها المحرك. باستخدام البرمجة، يمكنك تنفيذ أفكار جديدة ومبتكرة. فيجب تعلم أساسيات البرمجة وذلك إذا كنت تريد تطوير ألعاب بشكل أكثر احترافية وكفاءة. وبالنسبة للمصادر إذا كنت تستطيع التعلم من المصادر الأجنبية فيمكنك إختيار دورة مناسبة لك من اليوتيوب أو الوثائق الموجودة بموقع Roblox Studio من خلال هذا الرابط
  14. شكرا لك اخي على الافادة والتوضيح
  15. بالطبع يجب أن تواجهك هذه المشكلة حيث أنك تحتاج لفهم الدرس والمفاهيم التي يشرحها المدرب بشكل جيد ثم يكون الجزء الآخر من التعلم هو الحفظ ولكن يمكنك الحفظ بشكل مباشر أو الدراسة بدون التطبيق العملي بشكل كاف الحفظ عن طريق التطبيق العملي بشكل مستمر بالنسبة للطريقة الأولى ستجعلك تواجه الكثير من المشكلات ولكن الطريقة الثانية تجعلك تحفظ الأجزاء المهمة بشكل عملي وهي الطريقة الصحيحة حيث يجب عليك فهم الدرس جيداً ثم التطبيق وراء المدرب ومحاولة التطبيق أيضاً مع نفسك وبالتأكيد يوجد تطبيقات عملية في نهاية كل مسار أو قسم من المسار ولكن حاول التطبيق بشكل جيد على كل درس أو عدة دروس إذا كانت بسيطة ويمكنك الإطلاع على المصدار في التعليق السابق للفهم بشكل أكبر
  16. أكاديمية حسوب لا تقدم برنامج ماجستير عن طريق الدورات الأونلاين وحدها بينما الشهادة التي تقدمها أكاديمية حسوب هي عبارة عن اعتراف من قبل المنصة بخبرتك في مجال محدد وذلك يساعدك في زيادة فرص توظيفك ولكن الأهم من الشهادة التي تحصل عليها هي المهارات التي تتعلمها من خلال الأكاديمية حيث في مجال علوم الحاسوب تعتبر الخبرة والمهارات التي لديك هي العامل الأول لحصولك على الوظيفة ولكن في بعض الأحيان تكون الشهادة مطلوبة ويفضل الإطلاع على الإجابات التالية لتفهم ما الفرق بين الشهادة في أكاديمية حسوب والشهادة الجامعية
  17. نعم، يُفضَّل أن تكون لديك معرفة أساسية بـ HTML و CSS قبل تعلم JavaScript، خاصة إذا كنت تخطط لاستخدام JavaScript لتطوير واجهات المستخدم على الويب.وذلك هو ما تقوم الدورة المشترك بها بشرحه بجانب ال backend بالطبع وكما أخبرك مصطفى في التعليق السابق فإنه يمكنك الوصول للمسار الأول من كل دورة موجودة في الأكاديمية بدون الإشتراك بها ولكن في دورة تطوير التطبيقات باستخدام لغة JavaScript لن تحتاج إلى تعلم html أو css لأنه سيتم توفير أكواد html و css لك مما يعني أنه يمكنك تعلم HTML و CSS بالتزامن مع الدورة ويجب عليك أن تعرف أنه لتطوير الوجهات الأمامية تحتاج لإتقان HTML و CSS ويفضل الإطلاع على المقالة التالية للتوضيح بشكل أكثر تفصيلاً
  18. لم تذكر ما الداعي لفعل ذلك، حيث أنّ IIS يعمل على نظام ويندوز فقط لكونه من تطوير مايكروسوفت. عامًة، لا مشكلة في استخدام IIS بدلاً من XAMPP لتشغيل تطبيقات PHP، فكل من IIS و XAMPP خادمان ويب يمكنهما تشغيل تطبيقات PHP. لكن XAMPP هو حزمة خادم ويب مجانية ومفتوحة المصدر تحتوي على Apache و MySQL و PHP و Perl و متاحة لأنظمة Windows و macOS و Linux. والعمل على IIS ليس بالسهل وستحتاج إلى خبرة ودراية به على عكس XAMPP. وربما تحتاج إلى إجراء بعض التعديلات على كود PHP لديك في حال كنت تستخدم ميزات أو امتدادات خاصة بالخادم والتي قد لا تكون متوفرة على كلا الخادمين، بمعنى لو تستخدم وحدات أو دوال خاصة بـ Apache، فستحتاج إلى تعديل كودك لاستخدام بدائل متوافقة مع IIS. أيضًا ملفات .htaccess في Apache، ستحتاج إلى تحويلها إلى قواعد URL Rewrite في IIS.
  19. الحل صحيح، تستطيع تحسينه بتجنب طباعة فاصلة زائدة في النهاية، الفكرة هي التأكد من أن الفاصلة تُطبع فقط بين الأرقام وليس بعد آخر رقم في السلسلة. for (int i = 1; i <= 100; i++) { if (i % 5 != 0) { if (i > 1 && (i - 1) % 5 != 0) { Console.Write(","); } Console.Write(i); } } استخدمت شرطًا إضافيًا داخل الحلقة للتحقق في حال كان الرقم الحالي ليس الأول في السلسلة (i > 1) وأن الرقم السابق لم يكن مضاعفًا للـ 5 ((i - 1) % 5 != 0). بالتالي طباعة الفاصلة فقط بين الأرقام التي ليست مضاعفات للـ 5، وتجنب الفاصلة الزائدة في النهاية. وللعلم يوجد حل آخر باستخدام قائمة لتخزين النتائج، فبدلاً من التحقق داخل الحلقة، باستطاعتك استخدام قائمة لتخزين الأرقام ومن ثم طباعة الأرقام مرة واحدة بفاصلة بين كل رقم: using System; using System.Collections.Generic; class Program { static void Main() { List<int> numbers = new List<int>(); for (int i = 1; i <= 100; i++) { if (i % 5 != 0) { numbers.Add(i); } } Console.WriteLine(string.Join(",", numbers)); } }
  20. السلام عليكم، هل بالإمكان إستخدام IIS بدلاً من XAMPP؟ وهل نستطيع إستخدام نفس البرمجيات على كلا الخادمين بدون تغيير بالمبرمجيات على صفحات PHP؟ ولكم جزيل الشكر،
  21. السؤال غير واضح، ما المقصود؟ هل تقصد إلغاء خاصية منع نسخ النص من موقع معين؟ هناك إضافات للمتصفح تسمح لك بذلك. عامًة لو تقصد إزالة حماية النسخ (مثل تعطيل النقر بزر الماوس الأيمن ومنع سحب الصور) وتريد فعل ذلك بنفسك، فستحتاج إلى كود JavaScript لتعطيل بعض وظائف المتصفح التي تقوم بحماية المحتوى، ولكن يرجى ملاحظة أن تلك الممارسات غير قانونية أو غير أخلاقية إن كنت تحاول تجاوز حقوق الطبع والنشر أو الحماية التي وضعها مالك الموقع.
  22. في الأكاديمية لا يتوفر ذلك،. وعامًة MQL5 (MetaQuotes Language 5) عبارة عن لغة برمجة مخصصة لتطوير الأدوات والبرامج المستخدمة في منصة التداول MetaTrader 5 (MT5) كما ذكرت. والتي تُستخدم بشكل واسع في أسواق المال لتداول العملات الأجنبية (فوركس)، الأسهم، العقود الآجلة، وعقود الفروقات (CFDs). ستجد على اليوتيوب شرح للنسخة Mql4 بالعربية، لكن MQL5 ستجد شرح بالإنجليزية.
  23. جيد جدًا، نقوم أيضًا استخدام TryParse بدلاً من Parse لتجنب حدوث استثناءات في حالة إدخال قيم غير صحيحة. using System; class Program { static void Main() { Console.WriteLine("Please enter a positive integer:"); if (!int.TryParse(Console.ReadLine(), out int n) || n <= 0) { Console.WriteLine("Invalid input. Please enter a positive integer greater than 0."); return; } CalculateAndPrintFactorial(n); } static void CalculateAndPrintFactorial(int n) { int sum = 1; for (int i = 1; i <= n; i++) { sum *= i; Console.WriteLine(sum); } } } إن أدخل المستخدم قيمة أقل من أو تساوي 0، يتم عرض رسالة "n must be > 0" ويتم إنهاء التطبيق باستخدام return. و int.TryParse يحاول تحويل الإدخال إلى عدد صحيح، وفي حال فشل التحويل، يعود false ويتجنب حدوث استثناء. إن كانت القيمة المدخلة أكبر من 0، يتم تنفيذ الحلقة التكرارية لحساب وعرض القيم المتتابعة للمتغير sum.
  24. ستجد أسفل فيديو الدرس في نهاية الصفحة صندوق تعليقات كما هنا، أرجو طرح الأسئلة أسفل الدرس وليس هنا في قسم الأسئلة البرمجة حيث نطرح الأسئلة العامة الغير متعلقة بمحتوى الدورة أو الدرس لمساعدتك بشكل أفضل. مع إرفاق مجلد المشروع بعد ضغطه لتفقده.
  25. قمت بالتأكد من أن كل المسارات صحيحه وأن ملف الtemplates صح ولكن بدون جدوى
  26. السلام عليكم ورحمة الله و بركاته لوسمحتم محتاج طريقة عمل نظام حماية سكربت ممبرمج بلغة php ب نظام السريالات بحيث بعد المستخدم يقوم ب التسجيل في الموقع الرسمى للسكربت و ثما يقوم بالذهاب إلى صفحة شراء السكربت و يقوم بالشراء و بعد الشراء يظهر له خيار تحميل السكربت و خيار تفعيل السكربت بحيث في صفحة تفعيل السكربت يكون فيها رقم سريال مخصص للعميل فقط بحيث يتكون من id العميل في الموقع-ارقام و حروف عشوائية-تاريخ السيريال بدون / بحيث يتكون السيريال من 50 حرف و يتم تخزينة في قاعدة اليبانات و في معالج تثبيت السكربت يقوم المستخدم ب إدخال إسم المستخدم اللذي سجل بة في الموقع الرسمى للسكربت و السيريال ويضغط على متابعة و يتم مطابقة اسم المستخدم و السريال و إذا كانت بيانات خاطئة يتم حذف ملف install و إذا كانت صحيحة يتم المتابعة في تثبيت السكربت و إذا كان قد استخدم السيريال من قبل في اي موقع اخر يتم إضهار رسالة انه تم الحصول على هذا السكربت بطريقة غير قانونية و كيف يمكن عمل كود يقوم بالتحقق من إذا تم إزالة الكود الخاص بالحماية بحيث إذا تم إزالة كود الحماية يتم إعادة التوجية إلى الموقع الرسمى للسكربت
  1. عرض المزيد
×
×
  • أضف...