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

Wael Aljamal

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

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

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

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

    218

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

  1. من فضلك إرفاق الشيفرات البرمجية كنص وليس كصورة أول شرط حسب فهمنا السؤال هو التوقف عند قراءة عدد -1 لذلك نضع هذا الأمر في شرط while while(n != -1) { //.. } طالما دخلنا للحلقة فإن قيمة قراءة n ليس -1 لذلك نختبر هل هو زوجي أم فردي while(n != -1) { if ( n % 2 == ...) { // زوجي مثلاً } if () { // فردي } } نطبع عبارة زوجي أو فردي ضمن الشرط و نعود لقراءة قيمة n الجديد في نهاية الحلقة ليتم اختباره من جديد في التكرار التالي.
  2. تستخدم حلقة for لعمل عدد محدد من التكرارات، مثل التكرار على مجال من الأرقام مثل 1 إلى 10 أي من نقطة بداية إلى نقطة نهاية محددة، أو بالمرور على مصفوفات لأن لها طول ثابت. تنقسم حلقة for ل 3 أجزاء رئيسية: أول جزء يتم تنفيذه مرة واحدة وفيه يتم تعريف متغير الحلقة ثاني جزء نضع فيه الشرط الذي نختبره لكل تكرار للتحقق هل مازال الشرط محقق فتستمر الحلقة لتكرار جديد ويتم اختبار الشرط قبل تنفيذ ما بداخل الحلقة الجزء الثالث يتم تنفيذه بعد إنتهاء تنفيذ جسم الحلقة لكل تكرار وفيه نزيد عداد الحلقة أي نجعله يتغير وينتقل على المجال بين البداية و النهاية، وفي حال التعامل مع مصفوفة سينقل للعنصر التالي أول تعليمة برمجية نكتبها بعد حلقة for يرتبط تنفيذها بتكرار الحلقة (لكل تكرار سيتم تنفيذ أبناء الحلقة) وفي حال كان لدينا أكثر من تعليمة برمجة تنفيذهم مرتبط بالحلقة نضعهم ضمن أقواس المجموعة { } لاحظ في الشيفرة، 1 تم فيه تعريف متغير الحلقة اسمه i مع قيمة ابتدائية 1 (start) الجزء 2 هو شرط تكرار الحلقة ويضمن تحرك (تغير قيمة i) ضمن المجال أصغر أو يساوي 5 الجزء 3 يضمن زيادة عداد الحلقة بقيمة 1 بعد الانتهاء من تنفيذ جسم الحلقة (في مثالنا تعليمة الطباعة) for (let i = 1; i <= 5; i++){ // 1 2 3 // تعليمة برمجة يرتبط تنفيذها بتكرار الحلقة console.log(i) } يمكن توسيع الحلقة لتبسيطها بالشكل التالي: let i = start loop: // بداية جسم الحلقة if (i <= 5) { // شرط الاستمرار console.log(i) // اطبع قيمة العداد الحالية i = i + 1 } else break // توقف end loop: نهاية جسم الحلقة يمكنك قراءة: for في JavaScript من موسوعة حسوب
  3. تمام، أرجو توضيح السؤال مالذي تريد فعله بالضبط؟
  4. مكتبة normalize التابعة لتقنية CSS هي مكتبة تستخدم في تطوير واجهات المستخدم Front End حسب تعريفها في الموقع الرسمي normalize.css هي تقوم بعمل CSS reset (إعادة إعداد - توحيد قيم خصائص التنسيقات) أي مثل تخلص المتصفحات من التنسيقات الافتراضية التي تقوم بتطبيقها تلقائياً على عناصر HTML مما يفيد في التأكد من أن الموقع الخاص بنا سيتم عرضه بنفس الطريقة بالضبط على مختلف المتصفحات. ويُستخدم عادةً لتسوية المتصفحات على سوية واحدة يمكنك الاطلاع على مقارنة بينها و بين مكتبة قديمة حلت محلها من خلال المقالة:
  5. أرجو تعديل الرابط لنرى التعديلات أو عمل ملف آخر للتجريب
  6. أعتقد من الأفضل تخزين سلسلة نصية فارغة userSchema.pre('save', function(next) { this.proPromoName = this.proPromoName ? this.proPromoName: ""; this.proDisPrice = this.proDisPrice ? this.proDisPrice: ""; this.proQuantity = this.proQuantity ? this.proQuantity: ""; next(); }) ولكن من الممكن حذف المفتاح بشكل نهائي لكي لا يستهلك أي موارد أبداً.. يمكن المرور على الكائن و حذف أي خاصية فيه قيمتها null مثلاً for(var key in myObject){ if(myObject.hasOwnProperty(key)){ if(myObject[key] == null) delete myObject[key]; } }
  7. يوجد أيضاً الأمر rm // , حذف الملف من الفهرسة المحلية والمستودع $ git rm <file> // تثبيت التعديل $ git commit -m "Deleted the file from the git repository" // رفع التعديلات $ git push ويمكن تصفح الملفات لأي فرع بالأمر $ git ls-tree -r <branche name> $ git ls-tree -r master للحذف من الفهرسة المحلية فقط نضيف cached-- git rm --cached <file-name>
  8. أرجو تضمين شيفرة بايثون لكي نعلم كيفية تضمين البيانات
  9. في لارافل 8 يوجد عدة طرق لوضع الطابع الزمني $table->timestamp('created_at')->useCurrent(); // للتعديل عند التحديث $table->timestamp('updated_at')->nullable()->useCurrentOnUpdate(); $table->timestamp('updated_at')->useCurrent()->useCurrentOnUpdate(); // طريقة أخرى $table->timestamps()->default('CURRENT_TIMESTAMP');
  10. من الأفضل السير بنفس ترتيب الدورة، والبدء مع react.js حيث أن بعد هذا المسار سوف يصبح لديك فكرة جيدة عن كيفية عمل react.js في المتصفح، أما مسار Node فيه مشروع عبارة عن مدونة وهذه كواجهات أمامية معمولة عن طريق react.js. غالباً نبدأ بالواجهات الأمامية لأنها أسهل و فيها رسوميات و عناصر تفاعلية تظهر في الشاشة فنحبذ دراستها أولاً ثم لاحقاً نقوم بتطوير منطق التحكم بتدفق البيانات فيها و باقي الأمور. بالتوفيق
  11. يمكنك استخدام التالي كعنصرين إدخال input: <div> <input type="button" value="button1" class="app-button" /> <input type="button" value="button2" /> </div> و التنسيق: div { padding: 10px; border: 1px solid black; } input { margin: 0; } .app-button:first-of-type { margin-right:15px; } آخر تنسيق لإبعاد الزرين عن بعضهما
  12. تأكد من تفعيل الخاصية حسب الإجابات السابقة، ولكن التعليمة التي تكتبها فيها خطأ و ينقصها إشارة المساوة = لتصبح: <?= echo "Hello, World!";?> ^^^ ولتفعيلها في نظام لينكس توجه للمسار /etc/php5/apache2/php.ini ثم حدد short_open_tag = on وإعادة تشغيل php-fpm sudo service php-fpm restart ولا تنسى إعادة تشغيل مخدم أباتشي service httpd restart و sudo service apache2 restart
  13. تدعى هذه الخاصية بالتسلسل الاختياري Optional chaining ولطن الخطأ لديك ليس بسببها على ما أظن، تأكد من بنية المتغيرات لديك هل هو كائن صحيح به الخاصيات أم كلا. الشكل العام للخاصية: obj.val?.prop obj.val?.[expr] obj.arr?.[index] obj.func?.(args) تعمل الخاصية على ضمان عدم ظهور خطأ عند طلبي خاصية فرعية من خاصية أخرى ضمن غرض برمجي يمكن لأحد القيم فيه أن تكون null فنتجنب حدوث خطأ. let user = {}; // تحدث للمستخدم ‫user في حالة كان ليس لديه عنوان alert(user.address.street); // خطأ!‫ // بعد القليل من المعالجة المنطقة تصبح: let user = {}; // إذا كان ‫user لا يملك عنوان alert( user && user.address && user.address.street ); // undefined (أي ليس خطأً) // ثم تم إضافة Optional chaining let user = {}; // إذا كان ‫user لا يملك عنوان alert( user?.address?.street ); // undefined (ليس خطأً) يمكنك قراءة المقالة:
  14. إن تضمين الوحدة باستخدام import module يقوم بتحميل كامل الملف و مجال التسمية الخاصة والتي تدعى name space يمكن استخدام الأسلوب التالي لتضمين دالة محددة من ضمن وحدة باستخدام: from module import func as myfunction myfunction() مع العلم، تضمين دالة محددة من الوحدة سيقوم بنفس العمل لتضمين الوحدة كاملة (نفس حجم المصادر التي يتم تحميلهم) لا يمكن تحميل الدالة لوحدها خلف الكواليس. ومن المهم استخدام اسم مستعار للدالة لكي لا نتعرف ل collision أي يصبح لدالتين نفس الاسم لأن تضمين الدالة للفضاء العام يزيد احتمالية تشابه الاسم مع دالة أخرى. >>> from math import cos as cosine >>> cosine(0) 1.0 أو وضع _ قبل الاسم >>> from math import sin >>> sin(0) 0.0 ######### >>> from math import sin as _sin >>> _sin(0) 0.0 ######### from math import pi print(pi) ربما هذه الطريقة أكثر قابلية للقراءة، كما أن الدالة التي تم تضمينها وحدها يمكننا الوصول لها.
  15. يوجد في PHP الدالة join وهي نفس implode بالضبط، مثل اسم مستعار آخر لها، وهي اسم دالة شائعة بين لغات البرمجة فتذكرها أسهل ويمكن استعمالها، لها نفس الكفائة ل implode. <?php $arr = array('Hello','From!','Hsoub','Academy','!'); echo join(" ",$arr); // Hello From Hsoub Academy ! ?> أول وسيط للدالة join هو معامل الفصل بين أجزاء السلسلة المدموجة.
  16. لكل طالب طريقة مذاكرة مختلفة، ويمكنه المذاكرة بالطريقة التي يفضلها. تأكد دوما من فهم جميع الأفكار ولا تتردد في طرح سؤال أو استفسار لأي موضوع في الدروس، و عليك التطبيق مع المدرس لكل درس، و يمكنك عمل مراجعة لكل مسار بعد الإنتهاء منه لتثبيت المعلومات، وفي حال وجدت عدة امور مارابطة و بحاجة لحفظ بعض التعليمات يمكنك كتابة ملاحظات جانبية لمراجعتهم بوقت لاحق. وخذ كامل وقتك في الفهم و التكبيق حتى تمام الفهم، ويمكنك عمل افكار جانبية و محاولة التكبيق من تلقاء نفسك و في حال احتجت للمساعدة لمواضيع خارج الدروس يمكنك نشرهم هنا في القسم العام. بالتوفيق
  17. إن أي ملف هو عبارة عن سلسلسة نصية من المحارف والأرقام، مع وجود ترويسة تعبر عن نوعية محتواه. بعد جلب محتوى وسم الصورة باستخدام جيكويري ستكون عبارة عن سللسة نصية نرسلها للمخدم على شكل formData var url = "url/action"; // جلب الصورة var image = $('#image-id').attr('src'); // توحيد تنسيق الصور var base64ImageContent = image.replace(/^data:image\/(png|jpg);base64,/, ""); var blob = base64ToBlob(base64ImageContent, 'image/png'); // لتقسم الملف على أجزاء var formData = new FormData(); // إسناد الصورة formData.append('picture', blob); // إرسال طلب أجاكس $.ajax({ url: url, type: "POST", cache: false, contentType: false, processData: false, data: formData }) .done(function(e){ alert('done!'); }); يمكنك الاستفادة أيضا من الشرح:
  18. ويوجد أيضاً خوارزميات بتعقيد زمني كبير مثل التعقيد الأسي 2^n وهذه الخوارزمية لها تعقيد كبير جداً و تأخذ وقتاً كبيراً لذلك من المهم إيجاد طرق تفكير و خوارزميات لتحل المشاكل البرمجية بكفائة أكبر. مثل خوارزمية فيبوناتشي، حيث في حال تطبيقها بالطريقة التعاودية recursion كل عنصر ليتم حسابه يتوجب جمع العنصرين الأصفر منه، int fib(int n) { if (n <= 1) return n; return fib(n-1) + fib(n-2); } لذلك لكل استدعاء دالة سيتم عمل استدعائين، فتكون علاقة عودية ذات تعقيد أسي Fn = Fn-1 + Fn-2 fib(5) / \ fib(4) fib(3) / \ / \ fib(3) fib(2) fib(2) fib(1) / \ / \ / \ fib(2) fib(1) fib(1) fib(0) fib(1) fib(0) / \ fib(1) fib(0) لاحظ تطبيق نفس فكرة الخوارزمية، لتصبح بتعقيد خطي (N)O بالاستفادة من المجموع التراكمي في مصفوفة حيث تمكننا من حساب حدود كبيرة (أكثر من التعاودية لحدود الوقت و الذاكرة) int fib[24]; fib[0] = 0; fib[1] = 1; for(int i = 2; i < 24; i++) fib[i] = fib[i-1] + fib[i-2]; يمكنك قراءة المقالة التالية: ودرس تحليل الخوارزميات من موسوعة حسوب
  19. في سؤالك نلاحظ أنك تطلب اسم النطاق domain حيث يمكن الوصول له من خلال المصفوفة العامة (متغير عام النطاق) SERVER_$ التي توفرها PHP $title = 'https://www.example.com'; echo $_SERVER['HTTP_HOST']; // => example.com حيث أن HTTP_HOST تعيد لنا اسم النطاق / الاستضافة يمكنك التعرف على خاصيات المصفوفة و ما يمكن أن تأخذه من مفاتيح من خلال المقالة:
  20. يوجد عنصرين مهمين في حالتنا، الزر button و شيفرة جافاسكربت التي ستنفذ عند حدث النقر على الزر onclick. لاحظ الشيفرة التالية، عند الضغط على الزر، نطلب تنفيذ الدالة myAlert والتي بدورها تقوم باستدعاء alert وهي دالة في جافاسكربت مسؤولة عن عرض مربع إخطار في المتصفح و تحمل نص معين يتم تحديده لها <!DOCTYPE html> <html> <body> <h2>JavaScript Alert عرض الإخطارات </h2> <button onclick="myAlert()">انقر هنا ليظهر الإخطار</button> <script> function myAlert() { myAlert("مرحبا بك في صندوق الإخطارات"); } </script> </body> </html>
  21. ملاحظة: تصميم عمود الأحجام يخالف نبادئ تصمي مقواعد البيانات، بحيث كل خلية يجب أن تحوي على قيمة واحدة، إما يكون لدينا 4 أعمدة كل منها من نوع منطقي bool مثلاً تدل على وجود هذا القياس أو مثلا عدد int تدل على كمية القياس نفسه، أو عمل دول فرعي خاص بالقياسات لكل منتج حيث أنه لكل منتج قياس أو أكثر فالعلاقة one to many أي يكون في جدول القياسات عمودين الأول رقم المنتج وهو مفتاح ثانوي، و العمود الثاني هو القياس.. في حالتك، يمكننا تجاهل خطأ التصميم، و قراءة السلسلة النصية ومن ثم تقسيمها حسب الفاصلة، و لكل قياس نقوم بإنشاء عنصر إدخال.. نجلب المنتجات باستعلام SQL حسب شرط معين .. نحتاج حلقة للمرور على المنتجات لكل منتج نستخلص سلسلة الأحجام المتاحة explode لتقسيم السلسلة النصية لعناصر مصفوفة حسب محرف ما مثل الفاصلة , لكل حجم نقوم بإنشاء عنصر input radio له مثلاً <?php // اتصال بقاعدة البيانات $conn = new mysqli($servername, $username, $password, $dbname); // تحقق من الاتصال if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // الاستعلام $sql = "SELECT size, name, * FROM products where id = 13213132"; $result = $conn->query($sql); if ($result->num_rows > 0) { // طباعة العناصر while($row = $result->fetch_assoc()) { // لكل منتج $productName = $row["name"]; // اسم المنتج $productSize = $row["size"]; // سللسة الأحجام // explode لتقسيم السلسلة النصية لعناصر مصفوفة حسب محرف $SizesArray = explode (",", $productSize); // مصفوفة كل عنصر يمثل حجم echo '<p> product: {$productName}, available sizes:</p>' foreach ($SizesArray as $itemSize) { echo '<input name="size" type="radio" value="{$itemSize}" />' } } } else { echo "0 results"; } $conn->close();
  22. ملاحظة: اسم اللغة التي تدرسها أنت في الدورة هو جافاسكربت و تختلف عن لغة جافا.
  23. كما شرحنا في أسئلة سابقة، يبقى تخزين الملفات في ملفات منفصلة خارج قاعدة البيانات هو الحل الأفضل، سوف تلاحظ تأثير حجم الملفات الكبير على سرعة و أداء قاعدة البيانات مع ازدياد حجمها. مع العلم يمكنك تخصيص مجلد واحد فقط، فيه عدة مجلدات.. لحفظ جميع الصور و الوثائق. بما أن الصورة هي بالأصل base64String يمكنك تخزينها نفسها في قاعدة البيانات لنموذج فيه الصورة عبارة عن string مع تحديده ك buffer لزيادة سرعة تبادل البيانات فيه. مثلاً نموذج ما فيه حقل للصورة: var imageSchema = new mongoose.Schema({ name: String, desc: String, img: { data: Buffer, contentType: String } }); وعند إنشاء كائن من النموذج نمرر البيانات و نحفظ بالدالة save exports.saveImageIntoMongoDatabase = (base64String, name, desc) => { var new_imageSchema = new imageSchema({ name: name, desc: desc, img: base64String }) new_imageSchema.save(function(err,result){ if (err){ console.log(err); } else{ console.log(result) } }) } إن كانت الصورة نموذج بحد ذاتها، أي يمكنك حفظ جميع صور المشروع بنفس الوثيقة و ربطها مع باقي النماذج تحتاج لتحديد نوع النموذج المربوطة به مثل type: user أو type: post مثلاً مع id للغرض المرتبطة معه. و إن وضعهتها كخاصية في نموذج ما، عاملها كسلسلة نصية مثل اسم المستخدم. imageSchema.find({ name: 'photo', desc .., }, function (err, image) { if (err){ console.log(err); } else{ console.log("حصلنا على الصورة ن من قاعدة البيانات : ", image); } }); يمكنك عرضها مباشرة ضمن وسم الصورة بالخاصية src <img src="data:image/jpeg;base64,iVBORw0fiowfiowohsMwEIbpIzDA6FaMMPYJkDKzVYU+QFeEGPIKfYU8AETkCYI6wANkZQwIKRNDB1hA0Jrf0rk6WXZ8BvWkb4kv99vn89kDrfVexBSYgVNwDA7AN+jAK3gEd+AlGMGIBFDufwiORK5CYII=">
  24. مانوع قاعدة البيانات المستخدمة في مشروعك؟
  25. هل قمت بتسجيل الدخول لحساب مايكروسوفت في الجهاز Microsoft profile؟ فأحد الأسباب هي عمل مزامنة دائمة و هي مسؤولة عن تحديد تفضيلات المستخدم مثل اللغة (الكيبورد) أو تنصيب تطبيقات من المتجر. على كل حال، حاول تعديل لغة العرض Windows display language مع لغة الجهاز و تحديد المنطقة الجغرافية بشكل يوافق اللغة Select Start > Settings > Time & Language > Language. وأضف اللغة المطلوبة للغات الجهاز من خلال التحميل من لوحة التحكم All Settings – Time and Language – Region and Language كما أن خيار لغة الأدمن Administrative language settings عليك تحديدها ادخل للقائمة التالية ثم تابع تحديد اللغة المضلة ثم:
×
×
  • أضف...