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

لوحة المتصدرين

  1. Omar Haddad2

    Omar Haddad2

    الأعضاء


    • نقاط

      5

    • المساهمات

      292


  2. ياسين عناية

    ياسين عناية

    الأعضاء


    • نقاط

      4

    • المساهمات

      140


  3. Yomna Raouf

    Yomna Raouf

    الأعضاء


    • نقاط

      2

    • المساهمات

      2193


  4. ayoubridouani

    ayoubridouani

    الأعضاء


    • نقاط

      2

    • المساهمات

      248


المحتوى الأكثر حصولًا على سمعة جيدة

المحتوى الأعلى تقييمًا في 09/29/20 في كل الموقع

  1. مرحبًا بك في هذه السلسلة الجديدة التي سنتعلّم من خلالها كيف سنتعامل مع إطار العمل Vue.js. هذا الإطار الواعد الذي يُسهّل العمل في تطوير الواجهة الأمامية للتطبيقات Frontend Applications إلى حدّ بعيد. سنتدرّج في هذه السلسلة بشكل سلس، حيث سنتناول موضوعات بسيطة في البداية، ثم ومع تقدّمنا في الدروس سنغطي موضوعات أوسع وأشمل. ستلاحظ وجود تطبيقات بسيطة في كل درس، نشرح من خلالها فكرة أو أفكار محدّدة. ولكن في نهاية السلسلة سنختم بتطبيقين عمليين، يوضّحان معظم الأفكار التي تمّت تغطيتها مسبقًا. هذه السلسلة هي سلسلة تعليمية، الهدف منها هو أن تنطلق مع Vue.js بسهولة ويُسر، وبالتالي فهي ليست سلسلة مرجعيّة شاملة لإطار العمل Vue.js. سأفترض أنّه لديك معرفة جيدة بلغة JavaScript و بـ HTML أيضًا، كما ويُفضّل أن تمتلك معرفة أساسيّة بـ CSS. سنتطرق في هذا المقال إلى النقاط التالية: ماهو إطار العمل framework في JavaScript؟ تطبيقك الأوّل مع Vue.js. إضافة مزايا جديدة لتطبيقنا الأوّل. العمل على حاسوب محلّي. ماهو إطار العمل framework في JavaScript؟ ببساطة و بمعزل عن أي تفاصيل تقنية، يساعدنا إطار العمل عمومًا في إنشاء تطبيقات عصرية حديثة، حيث يحتوي على الأدوات اللازمة لتسهيل حياة المبرمجين في إنشاء تطبيقات معقّدة بزمن قياسي، فلا يحتاج المبرمج أن يستخدم الأسلوب التقليدي القديم في التعامل مع نموذج كائنات المستند DOM باستخدام JavaScript، حيث يمكن باستخدام إطار العمل التعامل مع العناصر في DOM بشكل قياسي ومجرّد وسهل إلى حدّ بعيد. بدأ العمل مع JavaScript بتطوير مكتبات شهيرة مثل jQuery و Mootools، حيث سهّلت مثل هذه المكتبات العمل مع JavaScript على نحو كبير، وقلّلت مشاكل التوافقية بين المتصفحات المختلفة التي لم تكن تتبع معيارًا موحدًّا. تطوّرت الأمور بعد ذلك لتبدأ أُطر عمل متكاملة في الظهور يمكن أن نقسّمها إلى مرحلتين أساسيتين. المرحلة الأولى كانت مع ظهور أُطر عمل مثل Backbone و Ember و Knockout و AngularJS. أمّا المرحلة الثانية وهي المرحلة الحالية فكانت مع أطر عمل مثل React و Angular و Vue. تٌعدّ Vue.js من أحدث أُطر العمل في JavaScript، وهي إطار عمل واعد، يجمع بين السهولة والمرونة والقوة، بالإضافة إلى صغر حجم الملف الخاص بها (فقط 26 كيلو بايت) مما يجعل تحميل صفحات الويب سهلة إلى حد بعيد. سنهتم بالإصدار Vue.js 2 مع التاكيد بأنّ ما سنأخذه هنا يمكن تطبيقه بسهولة في إصدارات لاحقة. تطبيقك الأول مع Vue.js قبل البدء باستخدام Vue.js علينا أن نحصل على الملف الخاص به. لدينا عدّة خيارات لذلك، سأختار أحد أسهل الخيارات وهو الحصول على الملف الخاص بإطار العمل عن طريق شبكة تسليم محتوى CDN، ثم نتحدّث عن الخيارات الأخرى فيما بعد. يمكنك استخدام رابط CDN التالي للحصول على Vue.js؛ الرابط هو unpkg.com/vue@2.6.11/dist/vue.js سنحتاج حاليًا إلى الرابط فقط. انتقل الآن إلى الموقع jsfiddle.net الذي يوفّر بيئة تطوير بسيطة وممتازة لتجريب Vue.js دون تحميل أي شيء على حاسوبك. ستحصل على شكل شبيه بما يلي: انقر على الرابط URL الذي يظهر في القسم الأيسر في الأعلى من النافذة السابقة، بجوار كلمة Resources: بعد نقر الرابط السابق ستحصل على مربّع نص، انسخ فيه رابط CDN السابق، ثم انقر الزر المجاور الذي يظهر على شكل إشارة زائد: نكون بذلك قد أخبرنا بيئة التطوير المصغّرة أنّنا بصدد استخدام الملف الخاص بإطار العمل Vue.js. انسخ الآن شيفرة HTML التالي إلى القسم الخاص بأكواد HTML من الصفحة الرئيسية لموقع jsfiddle: <div id="app"> {{ message }} </div> ثم انسخ شيفرة JavaScript التالية والصقها ضمن القسم الخاص بشيفرات JavaScript في الصفحة الرئيسية الموقع: var app = new Vue({ el: '#app', data: { message: 'Hello Vue!' } }) انقر الآن زر التشغيل Run الموجود في الزاوية اليسرى العليا من الصفحة. إذا نفذت الخطوات السابقة بدقة، ستلاحظ ظهور العبارة Hello Vue! في القسم الأيمن الأسفل من الصفحة. مبارك! لقد بنيت تطبيق Vue.js الأول لك. دعنا الآن نحلّل ما قمنا به حتى الآن. أتوقّع أنّ رُماز HTML الذي استخدمناه سهل وواضح، حيث أنشأنا عنصر div وأسندنا له المعرّف app، ووضعنا ضمن وسمي الفتح والإغلاق له التعبير التالي: {{ message }} هذا التعبير هو الأساس في Vue.js، سنتحدّث عنه بعد قليل. الآن لاحظ معي شيفرة JavaScript التالية: var app = new Vue({ el: '#app', data: { message: 'Hello Vue!' } }) أعتقد أنّ بداية هذه الشيفرة مألوفة، حيث أنّنا نعمل على إنشاء كائن من النوع Vue باستخدام الكلمة المفتاحية new. لاحظ معي ماذا نمرّر إلى النوع Vue: { el: '#app', data: { message: 'Hello Vue!' } } المقطع السابق عبارة عن كائن آخر يُسمى بكائن الخيارات (options instance) يحوي الإعدادات التي نريد أن تكون ضمن كائن Vue.js الجديد. ففي الحقل el (يمثّل أول حرفين من كلمة element أي العنصر) نُسند القيمة '‎#app' والتي تمثّل معرّف عنصر HTML المُستَهدف (في حالتنا هذه هو عنصر div الذي أنشأناه قبل قليل)، أمّا الحقل data فيتم إسناد كائن آخر إليه يحتوي على حقل واحد وهو message وقيمته 'Hello Vue!'. لاحظ أنّ الكلمة 'message' هي نفسها الموجودة ضمن رُماز HTML السابق الموضوعة بحاضنة مزدوجة {{ message }}. وهكذا فعند تنفيذ البرنامج السابق سيعمل Vue على استبدال التعبير {{ message }} ضمن عنصر HTML الذي يحمل المعرّف app بالنص 'Hello Vue!‎' وهذا كلّ شيء. ملاحظة: رغم وجود من يميّز بين الكائن object والنسخة instance، إلّا أنني لا أفرّق بينهما من الناحية العمليّة. لذلك تراني أستخدم الترجمة "كائن" دومًا. حاول الآن إجراء بعض التغييرات على النص السابق، وأعد التنفيذ باستخدام الزر Run لتشاهد التغييرات الجديدة على الخرج. في الحقيقة إنّ ما جرى في هذا المثال يتعدّى عن كونه مجرّد عملية استبدال تعبير برسالة مجهزّة مسبقًا، إن ما يجري من وراء الكواليس هو عملية ربط كامل بين الحقل message الموجود ضمن شيفرة JavaScript وبين التعبير {{ message }} الموجود ضمن رُماز HTML وسنرى كيف ذلك في الفقرة التالية. إضافة مزايا جديدة لتطبيقنا الأول حان الوقت لإجراء بعض التحسينات على تطبيقنا الأول. انتقل إلى قسم HTML وأضف عنصر إدخال نصّي input على النحو التالي: <div id="app"> <input type='text' v-on:input="updateInfo"/> {{ message }} </div> لقد وضعت عنصر الإدخال فوق التعبير {{ message }} مباشرة. الشيء الجديد هنا هي السمة v-on:input وهي بحد ذاتها مكوّنة من قسمين الموجّه directive وهو: v-on والوسيط input المراد تمريره إلى الموجّه. يلعب الموجّه v-on دور مُنصِت حدث event listener. وفي حالتنا هذه فإنّنا نرغب بالإنصات لحدث الإدخال input (معامل [parameter]) لعنصر الإدخال النصي. لاحظ القيمة المُسندة الموجّه: updateInfo وهي بكل بساطة اسم التابع الذي سيتم استدعاؤه في حال تمّ إجراء أي إدخال ضمن عنصر الإدخال النصي من قِبَل المستخدم. سنعرّف هذا التابع الآن. استبدل الشيفرة القديمة الموجودة بالقسم المخصّص لشيفرات JavaScript في الصفحة الرئيسية للموقع بالشيفرة التالية: var app = new Vue({ el: '#app', data: { message: 'Hello Vue!' }, methods:{ updateInfo:function(event){ this.message = event.target.value; } } }) الفرق الوحيد بين المقطعين الجديد والقديم، أنّنا أضفنا القسم methods الذي يتم فيه تعريف جميع التوابع (methods) التي نرغب باستخدامها. واضح أنّنا سنعرّف التابع updateInfo الذي تحدثنا عنه قبل قليل. عرّفنا هذا التابع على أنّه function ومرّرنا إليه الكائن event وهو كائن يحتوي على بيانات الحدث الذي تمّ توليده تلقائيّا بسبب كتابة المستخدم ضمن مربّع النص. العبارة البرمجية الوحيدة الموجودة في هذا التابع هي: this.message = event.target.value; على نحو غريب قليلًا، ترمز الكلمة this هنا إلى الحقل data (المعرّف ضمن نفس كائن Vue.js) والذي يحتوي بدوره على الحقل message. سنوضّح سبب ذلك في درس لاحق. القسم الثاني من العبارة بسيط، وفيه نستخلص البيانات التي أدخلها المستخدم من خلال التعبير event.target.value. جرّب تنفيذ البرنامج الآن بنقر زر Run، ثم حاول كتابة أي شيء ضمن مربع النص، ستلاحظ أنّه سيتم تحديث الرسالة بشكل فوري بالنص الذي تكتبه! العمل على حاسوب محلي إذا لم ترغب أن تعمل على jsfiddle.net يمكنك العمل بالتأكيد في وضع عدم اتصال محليًّا على حاسوبك الشخصي. علينا أوّلًا تنزيل Vue.js عن طريق الرابط https://Vue.js.org/js/vue.js (من الممكن أن يظهر محتوى الملف كاملًا ضمن صفحة عادية في المتصفح، انسخ محتويات الصفحة واحفظها ضمن جديد، سمّه: vue.js). في الحقيقة يمكنك استخدام هذه النسخة لأغراض التطوير البرمجية فقط، أمّا عندما يصبح التطبيق قيد الاستخدام العملي فيُنصح باستخدام النسخة التالية: https://Vue.js.org/js/vue.min.js حصلت على النسختين السابقتين من الموقع الرسمي لإطار العمل Vue.js من الصفحة التالية: https://Vue.js.org/v2/guide/installation.html أنشئ مجلّدًا وسمّه Vue.js-first-app، ثم انسخ ضمن هذا المجلّد ملف vue.js الذي نزّلته قبل قليل. باستخدام محرّر HTML المناسب لك، أنشئ ملف جديد واختر له مثلا الاسم index.html. ثم احفظه في نفس المجلّد السابق بجوار الملف vue.js، وبعد ذلك أضف إليه المحتوى التالي الذي قمت بتجميعه من محتويات التطبيق المحسّن الذي تناولناه في الفقرة السابقة: <!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title>Vue.js</title> <script src="vue.js"></script> </head> <body> <div id="app"> <input type='text' v-on:input="updateInfo"/> {{ message }} </div> <script type="text/javascript"> var app = new Vue({ el: '#app', data: { message: 'Hello Vue!' }, methods:{ updateInfo:function(event){ this.message = event.target.value; } } }) </script> </body> </html> لاحظ معي أنّنا قد أضفنا مرجعًا لملف vue.js المحلّي عن طريق وسم script ضمن القسم head من المستند، وأضفنا شيفرة JavaScript المسؤولة عن تحديث خرج التطبيق ضمن القسم body من المستند. يمكنك متابعة كتابة تطبيقاتك على هذا النحو، ولو أنّني أفضّل استخدام منصّات مثل jsfiddle.net و codepen.io على الأقل في هذه المرحلة التي نسبر بها أغوار Vue.js. ختامًا تناولنا في هذا الدرس مقدّمة سريعة إلى إطار العمل الواعد Vue.js حيث تعلّمنا كيف نبدأ مع Vue.js وكيف نكتب تطبيقات بسيطة توضّح لنا مدى السهولة والمرونة التي يتمتّع بها إطار العمل هذا. سنتابع عملنا في الدروس اللاحقة لنسبر أغوار Vue.js بشكل سهل ومتدرّج. تمارين داعمة سأزودك في التمرينين التاليين بمسألتين بسيطتين للتدرّب على المفاهيم الموجودة في هذا الدرس. يوجد بعد كل تمرين حل مقترح، حاول ألّا تنظر إلى الحلول المقترحة قبل تقديم حلولك. تمرين 1 استخدم الوسيط click بدلًا من الوسيط input مع الموجّه v-on لكي يستجيب التطبيق عندما ينقر المستخدم على عنصر الإدخال بدًلا من الكتابة داخله وذلك في التطبيق المحسّن الذي تحدثنا عنه قبل قليل. اجعل التطبيق يعرض الرسالة "Clicked!" عندما ينقر المستخدم. .anntional__paragraph { border: 3px solid #f5f5f5; margin: 20px 0 14px; position: relative; display: block; padding: 25px 30px; } الحل المقترح الحل في هذا التمرين بسيط. استبدل الوسيط input بالوسيط clicked ضمن رُماز HTML ثم وفي القسم المخصّص لشيفرة JavaScript، استبدل بالسطر التالي: this.message = event.target.value; السطر: this.message = 'Clicked!'; تمرين 2 في هذا التمرين ستُنشئ تطبيق آلة حاسبة بسيط يقوم بعملية حسابية واحدة وهي جمع عددين. أقترح الواجهة البسيطة التالية: الميزة في هذا التطبيق أنّه إذا بدأ المستخدم بالكتابة في أي مربّع، يجب أن يقوم التطبيق بإيجاد المجموع بشكل فوري أثناء إدخاله الأرقام. لن نقوم في هذا التمرين بالتحقّق من صحة إدخال المستخدم. الحل المقترح طريقة التنفيذ مشابهة جدّا للتطبيقات التي تناولناها في هذا الدرس. سأضيف حقلين إضافيين فقط لتخزين قيمتي المعاملين الأيمن والأيسر لعملية الجمع. شيفرة HTML المقترحة هي: <div id="app"> <input type='text' v-on:input="updateLeftOper"/> <label>+</label> <input type='text' v-on:input="updateRightOper"/> <label>=</label> <label>{{result}}</label> </div> أما شيفرة JavaScript المقترحة فهي على الشكل التالي: var app = new Vue({ el: '#app', data: { result: 0, leftOper: 0, rightOper: 0 }, methods:{ updateLeftOper: function(event){ this.leftOper = parseFloat(event.target.value) this.result = this.leftOper + this.rightOper; }, updateRightOper: function(event){ this.rightOper = parseFloat(event.target.value) this.result = this.leftOper + this.rightOper; } } }) إذا لم تستطع استيعاب الشيفرة السابقة تمامًا فلا بأس، سنتكلم المزيد عن هذه الأمور لاحقًا. اقرأ أيضًا المقال التالي: استخدام Vue.js للتعامل مع DOM النسخة الكاملة لكتاب أساسيات إطار العمل Vue.js
    1 نقطة
  2. السلام عليكم هدفي التمكن من تطوير تطبيقات الويب علما اني متمرس على لغة الجافا و انشأت من خلالها تطبيقات سطح المكتب بال javafx و عملت تطبيقات على الاندرويد ستديو ولدي اطلاع على تصميم الواجهات بال css و الxml لدي القدرة على تحليل النظم و انشاء قواعد البيانات بال mysql اردت تعلم الويب بعد الاطلاع على ايجابيات الدورات في الاكادمية قررت ان التحق باحدى الدورات لكني وجدت نفسي حائر بين ال php او الروبي او الجافا سكربت
    1 نقطة
  3. يمكنك استخدام وظيفة MROUND الموجودة في Analysis ToolPak. ستحتاج إلى التأكد من تثبيتها: (أدوات -> الوظائف الإضافية ... -> تحقق "حزمة أدوات التحليل" -> موافق) مثال: = MROUND (A1،250) أو بالطريقة الأسهل =250*ROUND(A1/250,0)
    1 نقطة
  4. مرحبًا@Ahmed Sawy في الحقيقة الإجابة لا. الهيدر الخاص ب navigation لا يغني عن <SaveAreaView>. كما أنه لاستخدام <SaveAreaView> نقوم بتغليف ال Top level view بال <SaveAreaView> و ليس كل view بمفرده حتى تضمن ظهور المحتويات داخل المساحة الآمنة للجهاز. أيضًا هذه الخاصية تعمل على أجهزة ios النسخة 11 أو النسخ الأحدث فقط. يمكنك قراءة المزيد من هنا. يمكنك القراءة هنا أيضًا عن كيفية التعامل مع safeAreaView + React Navigation
    1 نقطة
  5. مرحبا @صالح السوفي أنصحك بأن تلتحق بدورة جافاسكريبت حيث ستتعلم بناء تطبيقات full-stack أي برمجة client-side و server-side و تطوير تطبيقات هواتف باستخدام react Native و ستتعلم مكتبة react "مكتبة تستخدم لبناء واجهات الويب" كذلك و هي المكتبة الأكثر شهرة و الأكثر طلبا الآن في سوق العمل. كما أن لغة جافاسكريبت لغة مطلوبة بشكل كبير في سوق العمل و عدد مطورين جافاسكريبت قليل جدا مما يعني أنه يمكنك الحصول على وظيفة بسهولة. بالتوفيق.
    1 نقطة
  6. أولاً عليك تحديد المسار من خلال التعرف على مميزات كل لغة ومدى إستخدامها ثم حدد الدورة المناسبة . الجافا سكربت مهمة جداً ويعتمد عليها الكثير من إطارات العمل ويمكن العمل في مجالين : يمكن العمل بها ك(front end developer): أي أن تقوم بإستخدامها في تطوير واجهات الموقع , فيمكن إستخدام إطارات العمل المهمة وهي الvue.js و Angularو react . ويمكن العمل بها ك (back end developer): أي أن تقوم بإستخدامها في تطوير الخلفية والتعامل مع السيرفر وإنشاء قاعدة البيانات ويمكن القيام بذلك من خلال إطار العمل node.js. ال php مهمة أيضاً ولكن يتم إستخدمها فقط ك( back end) وتضمن إطار العمل Laravel وهي مطلوبة بشكل واسع. الruby لغة يتم إستخدامها لبرمجة الخلفية (back end) من خلال إطار العمل Rail هي لغة مميزة وقوية حيث يوجد العديد من المواقع المشهورة تم برمجتها بها مثل : جميع منصات حسوب موقع CodePen موقع Envato و Themeforest مصادر إضافية للمقارنة بين لغة php و ruby من هنا مقال حول لغة الruby من هنا مقال حول أهم مميزات لغة الجافا سكربت والتعرف أكثر حول إطارات العمل الخاصة بها, هنا
    1 نقطة
  7. بارك الله فيك اخي شكرا جزيلا اخي انت على حق محتوى عربي منعدم..على العموم اخوتي ما قصرتم شكرا
    1 نقطة
  8. ينبغي أن تعرف بعض المصطلحات الهامة بخصوص المصطلح المطروح فهمه، دعني أوضح لك ما معنى الأحداث و ماذا تعني معالجة الأحداث. الأحداث (event) : هي الإجراءات التي تحدث في المتصفّح والتي يبدأها المستخدم أو المتصفّح. فيما يلي عدّة أمثلة عن الأحداث الشائعة التي يمكن أن تحدث على موقع الويب: نقر المستخدم على زر تحويم المستخدم سهم الفأرة فوق قائمة منسدلة إرسال المستخدم بياناته ضغط المستخدم على أحد مفاتيح لوحة مفاتيحه. معالج الأحداث (event handler) : هو دالَة جافاسكربت تعمل عند وقوع حدثٍ ما. يقوم مستمع الحدث (event listener) بإرفاق واجهة استجابة لعنصر، ممَّا يسمح لهذا العنصر بالانتظار لإطلاق الحدث المحدّد أو ويكأنه يتنصَّت ويستمع إلى صوت إطلاق ذلك الحدث المتمثِّل بعيار ناري. هناك ثلاث طرق لإسناد الأحداث إلى العناصر: مُعَالِجَات الأحداث المضمّنة (Inline event handlers). خاصيات معالج الحدث (Event handler properties). مستمعو الأحداث (Event listeners). و الآن سأوضح لك مثال يشرح لك الـ Eventlistener، و سيكون الحدث هو ( القيام بالضغط على أي زر من لوحة المفاتيح ) و معالجة الحدث ستكون ( بأن يتم الإستماع لهذا الحدث و تنفيذ أمر يطبع الزر الذي تم النقر عليه ) : document.addEventListener('keydown', event => { console.log('key: ' + event.key); }); الـ Output سيتم بمجرد النقر على أي زر على لوحة المفاتيح ( لنضغط مثلا على x )، الـ output : أتمنى لك التوفيق.
    1 نقطة
  9. هي دالة يتم تنفيذها عند الإستماع لحدث معين . توضيح : في الكود تم إستدعاء الدالة لdocument أي أن الدالة ستستمع للأي حدث داخل الصفحة وتم إضافة بارميترين إثنين الأول : وهو نوع الحدث وفي الكود تم تحديد click . الثاني : الدالة التي تحتوي على ما سيتم تنفيذه بعد الحدث . عملية تنفيذ الكود : الحدث في الكود الحدث سيكون على الdocument وهذا الحدث الذي تنتظر الدالة حدوثه هو click على الصفحة , كما في الدالة بعد النقر (أي بعد تنفيذ الحدث) سيتم تنفيذ ما بداخل الدالة وهو إضافة عبارة( Hello World!) داخل وسم الdemo <!DOCTYPE html> <html> <body> <p>This example uses the addEventListener() method to attach a click event to the document.</p> <p>Click anywhere in the document.</p> <p><strong>Note:</strong> The addEventListener() method is not supported in Internet Explorer 8 and earlier versions.</p> <p id="demo"></p> <script> document.addEventListener("click", function(){ document.getElementById("demo").innerHTML = "Hello World!"; }); </script> </body> </html>
    1 نقطة
  10. يختلف الجواب من مبرمج لأخر فلا يمكن الجزم من أسهل فريم ورك ,لكن يمكن تحديد من أكثر شيوعاًوحسب إحصائية stack oveflow لعام 2019 الأكثر شيوعاً هم react, vue . يوجد هذا الفيديو من قناة الزيرو يوضح ألية المقارنة بينهم , للإطلاع عليه من هنا إحصائية stack oveflow :
    1 نقطة
  11. دالة ال mysqli_query تأخذ براميتر خاص بالquery وبراميتر للconnection الخطأ: $user_info = mysqli_query("SELECT * FROM users WHERE username = '".$username."'"); الحل: $user_info = mysqli_query($conn,"SELECT * FROM users WHERE username = '".$username."'");
    1 نقطة
  12. ما تطلبه يا صديقي يتطلب خبرة في البرمجة. ستجد أن المحتوى العربي منعدم في تحدثه عنها. عموما مصطلح profiling (computer programming) هو شكل من أشكال تحليل البرنامج الديناميكي الذي يقيس المساحة (الذاكرة) أو الوقت (تعقيد البرنامج)، استخدام تعليمات معينة، أو تكرار الاتصال بالوظائف ومدتها. في أغلب الأحيان ، يتم استخدام معلومات profiling لتسهيل تحسين البرنامج. وما قمت بذكره من memory leak و User ,SYS و expensive loops هم مجرد مصطلحات ومفاهيم في مجال profiling, بعد تحميلك و قراءة الكتاب التالي ستفهم أهم هذه المصطلحات والأدوات التي تستعمل في Profiling وبعض النصائح في Optimization أيضا هذا الكتاب مهم اضغط هنا للحصول عليه.
    1 نقطة
  13. بالطبع يمكنك، الآن و في أي وقت تريد، طريق البرمجة هو الحاضر الآن و المستقبل وليس مقتصر على مجال معين بل في مختلف المجالات، ويمكنك التعرف على المجالات في البرمجة من هنا ، و يمكنك الإطلاع على أبرز لغات البرمجة المستخدمة والتي لها مجالات مطلوبة في سوق العمل من هنا. سأقدم لك بعض النصائح و الإرشادات التي سوف تمكنك من اختيار مجال أقرب لذهنك و تفضله عن غيره، بحيث تكون قادر على العطاء فيه ولا تمل منه. في بداية الأمر يجب عليك تحديد المسار و التخصص الذي تريد الخوض فيه .. على سبيل المثال مطور تطبيقات الهاتف. أول ما عليك فعله هو أن تبدأ بالقراءة عن هذا التخصص و الإطلاع فقط، بدون أي ممارسة عملية .. الهدف هنا هو معرفة التخصص بشكل عام و هل سيناسب قدراتنا أم لا. بعد ذلك تبدأ بالبحث عن مصدر يشرح لنا عن هذا التخصص ( و أنصحك بالبحث في أكاديمية حسوب، توفر لك الكثير من الدورات المميزة ) من البداية و هنا يجب التركيز جيدا و التطبيق العملي، حيث أن هذه الفترة جدًا مهمة في تأسيسك لما هو قادم من تحديات و ممارسة على مستوى أكبر من ذلك. بعد الإنتهاء من المصدر الأول في التعلم ( سواء كان كتاب أو دورة تدريبية مصورة ) يجب عليك البدء بتطبيق ما تعملته على شكل أعمال بسيطة تجمع جميع ما تعلمته، الهدف هنا هو التدرب على بناء المشاريع بشكل متكامل بالإضافة إلى أنه يومًا ما ستكون هذه الأعمال سبب في حصولك على أعمال. بعد أن نكون قد تعلمنا الأساسيات في هذا التخصص، نبدأ بتطوير أنفسنا و البحث عن دورات و مصادر لشرح ذلك التخصص بشكل أعمق و أكثر إحترافية، من ثم التطبيق من ثم بناء الأعمال بشكل أكثر إحترافية. هكذا نكون قد تعملنا بطريقة صحيحة و حافظنا على المتابعة و الممارسة للغة بشكل دوري مع بناء الأعمال الخاصة فينا، و سنجد أنفسنا أننا قادرين على التقديم على أعمال لإنجازها. بالتوفيق.
    1 نقطة
  14. أحياناً يوجد بعض الأخطاء في كتابة أكواد البرنامج ولكنة يعمل بشكل صحيح ولكن يؤثر ذلك على الذاكرة العشوائية قد يكون إستهلاك البرنامج للذاكرة العشوائية (RAM) كبير جدًا ويمكن تجنب هذا الأمر عن طريق تحسين دوال معينة في الكود وأحياناً قد يستغرق البرنامج وقت كبير فى تفيذ أمر معين وذلك بسبب مشاكل بعض أسطر الأكواد حتى تتمكن من معرفة هذه المشاكل، هناك أدوات تسمى بالـ Profiling Tools أو أدوات الـ Code Profiling ، والتي تساعدك عن طريق فحص الكود و اكتشاف هذه المشاكل. وبالطبع يوجد أدوات Code Profiling توضح لك الوقت المستخدم لكل دالة بالبرنامج. لكي تعرف أثر ذلك على Memory Leak او على CPU Profilers . مقالات سوف تفيدك كثيراً فى Profiling ومعرفة كيفية إستخدام Profiling Tools : من هنا . وهذا الكتاب سوف يفيدك كثيراً ايضاً هنا .
    1 نقطة
  15. هو مصطلح يدل على مدى التعقيد الزمني الذي يتطلبه تنفيذ الحلقة Time Complexity مثال بسيط" if statements are usually of O(1) complexity => فإن تنفيذ الشرط يتطلب فقط وحدة زمنية / One Time Unit أما تنفيذ الحلقة فهو مرتبط بعدد تكراراتها وبشكل عام for/while statements are usually of O(n) complexity => فإن تنفيذ الشرط يتطلب N وحدة زمنية / N Time unit طبعا هي مدة زمنية غير ثابتة إنما بالخوارزمييات نتعامل مع زمن التنفيذ بطريقة التعقيد الزمني أي عدد مرات تنفيذ Block of code معين حتى تزيد كفائة استخدام حلقة مثلا تخلص من العمليات الحسابية التي تعطي قيم ثابتة دوما, مثال: for (int k = 0; k < length - 1; k++) { //نحسب دليل آخر عنصر عدة مرات by lengthMinusOne = length - 1; for (int k = 0; k < lengthMinusOne; k++) { // قيمة ثابتة في علوم الكمبيوتر ، يعد تسرب الذاكرة (خسارة جزء منها) نوعًا من تسرب الموارد الذي يحدث عندما يدير برنامج كمبيوتر بشكل غير صحيح تخصيصات الذاكرة بطريقة لا يتم تحرير الذاكرة التي لم تعد هناك حاجة إليها. قد يحدث تسرب للذاكرة أيضًا عند تخزين كائن Object في الذاكرة ولكن لا يمكن الوصول إليه عن طريق التعليمات البرمجية قيد التشغيل. بشكل بسيط: عدم تحرير الذاكرة بعد استخدامها (برنامج يحجز 200 ميغا بايت من الذاكرة RAM وينهي عمله و لا يحرر منطقة الذاكرة التي استخدمها)
    1 نقطة
  16. نعم يمكن تعلم البرمجة من الصفر وبسهولة فالمصادر متوفرة على الإنترنت وعلى قنوات اليوتيوب , أنصحك بالبدء بتعلم أساسيات البرمجة من خلال تعلم لغة معينة مثل الجافا أو السي شارب أو أي لغة تدعم البرمجة الكائنية و البرمجة الشيئية والهدف من ذلك هو إتقان الأساس البرمجي الذي يعتمد عليه معظم اللغات ,وبعدها حدد مسارك في تعلم اللغات التي وظائفها أكثر إنتشاراً مثل : برمجة تطبيقات الهاتف : وينقسم إلى قسمين القسم الأول :وهو برمجة التطبيقات التي تعمل على نظام الأندرويد ويتم ذلك بإستخدام لغة الجافا الخاصة بنظام الأندرويد ,لإطلاع على تفاصيل أكثر من هنا القسم الثاني :وهو برمجة التطبيقات التي تعمل على نظام ال ios وهو النظام الخاص بهواتف أبل ,للإطلاع على تفاصيل أكثر حول المجال من خلال زيارة المقالة الخاصة فى برمجة تطبيقات ال ios في مدونة مستقل برمجة مواقع الويب : وينقسم لقسمين القسم الأول: هو برمجة واجهات مواقع من خلال تعلم لغة html وcss وjavascript والمسمى الوظيفى هنا للمبرمج هو (front end developer) , للإطلاع على تفاصيل أكثر حول المجال من هنا القسم الثاني: هو برمجة الخلفية إي البرمجة التي تعمل من خلال السيرفر وومن أمثلتها لغة الphp والمسمى الوظيفى هنا للمبرمج back end developer , للإطلاع على تفاصيل أكثر حول المجال من هنا برمجة تطبيقات سطح المكتب :هو برمجة التطبيقات التي تعمل على جهاز الحاسوب ويمكن ذلك بإستخدام لغة الجافا او السي شارب أو السي أو البايثون أو غيرها , للإطلاع على اللغات المستخدمة في هذا المجال من هنا برمجة الألعاب : القيام ببرمجة الألعاب التي تعمل على الموبايل أو على جهاز الحاسوب للإطلاع على تفاصيل حول المجال من هنا
    1 نقطة
  17. $result = mysql_query("select * from phone"); احذف الأقواس حول الـ phone لديك. بالتوفيق.
    1 نقطة
  18. 1. create queue list //declare a Queue Queue<Integer> q = new LinkedList<>(); 2. display the list //print the Queue System.out.println("The Queue contents:" + q); 3. count the nodes in queue System.out.println("Size of the Queue: " + q.size()); 4. insert new node q.add("new element"); 5. remove node int removedele = q.remove(); System.out.println("removed element-" + removedele); System.out.println(q); 6. last method Queue q = new Queue(4); q.enqueue(5); q.enqueue(6); q.enqueue(7); q.enqueue(9); اتمنى لك التوفيق.
    1 نقطة
  19. ملاحظة مهمة: هذه الشرح لميزات اللغة المتقدمة، إذ تتناول هذه المقالة موضوعًا متقدمًا، لفهم بعض الحالات الهامشية بطريقة أفضل. مع العلم أنها ليست مهمة. والعديد من المطورين ذوي الخبرة الجيدة ينفذون مشاريعهم بدون معرفتها. ولكن إذا أردت معرفة كيفية عمل الأشياء تحت الطاولة فتابع القراءة. إن استدعاء التابع المقيم ديناميكيًا يمكن أن يفقد قيمة this. فمثلًا: let user = { name: "John", hi() { alert(this.name); }, bye() { alert("Bye"); } }; user.hi(); // works // لنستدعي الآن ‫user.hi أو user.bye بحسب الاسم _(user.name == "John" ? user.hi : user.bye)(); // خطأ يوجد في السطر الأخير معامل شرطي يختار إما user.hi أو user.bye. في هذه الحالة تكون النتيجة user.hi. ثم تستدعى الدالّة ذات الأقواس () على الفور لكنها لن تعمل بطريقة صحيحة! كما تلاحظ، نتج عن الاستدعاء بالطريقة السابقة خطأ، وذلك لأن قيمة this داخل الاستدعاء تصبح غير معرفة undefined. نلاحظ هنا أن هذه الطريقة تعمل بصورة صحيحة (اسم الكائن ثم نقطة ثم اسم الدالّة): user.hi(); أما هذه الطريقة فلن تعمل (طريقة تقييم الدالّة): (user.name == "John" ? user.hi : user.bye)(); // Error! لماذا حدث ذلك؟ إذا أردنا أن نفهم سبب حدوث ذلك، فلنتعرف أولًا على كيفية عمل الاستدعاء obj.method()‎. شرح النوع المرجعي بالنظر عن كثب، قد نلاحظ عمليتين في العبارة obj.method()‎: أولًا، تسترجع النقطة '.' الخاصية obj.method. ثم تأتي الأقواس () لتنفّذها. إذًا كيف تنتقل المعلومات الخاصة بقيمة this من الجزء الأول إلى الجزء الثاني؟ إذا وضعنا هذه العمليات في سطور منفصلة، فسنفقدُ قيمة this بكل تأكيد: let user = { name: "John", hi() { alert(this.name); } } // جزّء استدعاء التوابع على سطرين let hi = user.hi; hi(); // خطأ لأنها غير معرّفة إن التعليمة hi = user.hi تضع الدالّة في المتغير، ثم الاستدعاء في السطر الأخير يكون مستقلًا تمامًا، وبالتالي لا يوجد قيمة لـ this. لجعل استدعاءات user.hi()‎ تعمل بصورة صحيحة، تستخدم لغة جافاسكربت خدعة - بأن لا تُرجع النقطة '.' دالة، وإنما قيمة من نوع مرجعي. إن القيمة من نوع مرجعي هو "نوع من المواصفات". لا يمكننا استخدامها بطريقة مباشرة، ولكن تستخدم داخليًا بواسطة اللغة. إن القيمة من نوع مرجعي هي مجموعة من ثلاث قيم (base, name, strict)، ويشير كلُّ منها إلى: base: وهو الكائن. name وهو اسم الخاصية. strict تكون قيمتها true إذا كان الوضع الصارم مفعلًا. إن نتيجة وصول الخاصية user.hi ليست دالة، ولكنها قيمة من نوع مرجعي. بالنسبة إلى user.hi في الوضع الصارم، تكون هكذا: // قيمة من نوع مرجعي (user, "hi", true) عندما تستدعى الأقواس () في النوع المرجعي، فإنها تتلقى المعلومات الكاملة حول الكائن ودواله، ويمكنهم تعيين قيمة this (ستكون user في حالتنا). النوع المرجعي هو نوع داخلي خاص "وسيط"، بهدف تمرير المعلومات من النقطة . إلى أقواس الاستدعاء (). أي عملية أخرى مثل الإسناد hi = user.hi تتجاهل نوع المرجع ككلّ، وتأخذ قيمة user.hi (كدالّة) وتمررها. لذا فإن أي عملية أخرى تفقد قيمة this. لذلك وكنتيجة لما سبق، تُمرر قيمة this بالطريقة الصحيحة فقط إذا استدعيت الدالّة مباشرة باستخدام نقطة obj.method()‎ أو الأقواس المربعة obj['method']()‎ (الصياغتين تؤديان الشيء نفسه). لاحقًا في هذا السلسلة التعليمية، سنتعلم طرقًا مختلفة لحل هذه المشكلة مثل الدالّة func.bind()‎. الخلاصة النوع المرجعي هو نوع داخلي في لغة جافاسكربت. فقراءة خاصية ما، مثل النقطة . فيobj.method()‎ لا تُرجع قيمة الخاصية فحسب، بل تُرجع قيمة من "نوع مرجعي" خاص والّتي تخزن فيها قيمة الخاصية والكائن المأخوذة منه. هذه طريقة لاستدعاء الدالة اللاحقة () للحصول على الكائن وتعيين قيمة this إليه. بالنسبة لجميع العمليات الأخرى، يصبح قيمة النوع المرجعي تلقائيًا قيمة الخاصية (الدالّة في حالتنا). جميع هذه الآليات مخفية عن أعيننا. ولا تهمنا إلا في الحالات الدقيقة، مثل عندما نريد الحصول على تابع ديناميكيًا من الكائن ما، باستخدام تعبير معيّن. المهام التحقق من الصياغة الأهمية: 2 ما هي نتيجة هذه الشيفرة البرمجية؟ let user = { name: "John", go: function() { alert(this.name) } } (user.go)() انتبه. هنالك فخ .anntional__paragraph { border: 3px solid #f5f5f5; margin: 20px 0 14px; position: relative; display: block; padding: 25px 30px; } الحل سينتج عن تنفيذ الشيفرة السابقة خطأ! جربها بنفسك: let user = { name: "John", go: function() { alert(this.name) } } (user.go)() // error! لا تعطينا رسالة الخطأ في معظم المتصفحات فكرة عن الخطأ الّذي حدث. يظهر الخطأ بسبب فقدان فاصلة منقوطة بعد user = {...}‎. إذ لا تُدرج لغة جافاسكربت تلقائيًا فاصلة منقوطة قبل قوس ‎(user.go)()‎، لذلك تُقرأ الشيفرة البرمجية هكذا: let user = { go:... }(user.go)() ثم يمكننا أن نرى أيضًا أن مثل هذا التعبير المشترك هو من الناحية التركيبية استدعاء للكائن ‎{ go: ... }‎ كدالة مع الوسيط (user.go). ويحدث ذلك أيضًا على نفس السطر مع let user، لذلك إن الكائن user لم يُعرّف حتى الآن، ومن هنا ظهر الخطأ. إذا أدخلنا الفاصلة المنقوطة، فسيكون كل شيء على ما يرام: let user = { name: "John", go: function() { alert(this.name) } }; (user.go)() // John يرجى ملاحظة أن الأقواس حول (user.go) لا تفعل شيئًا مميزًا هنا. وهي عادةً تعيد ترتيب العمليات، ولكن هنا تعمل النقطة . أولًا على أي حال، لذلك ليس هناك أي تأثير لها. الشيء الوحيد المهم هو الفاصلة المنقوطة. اشرح قيمة this الأهمية: 3 في الشيفرة أدناه، نعتزم استدعاء التابع obj.go()‎ لأربع مرات على متتالية. ولكن لماذا الندائين (1) و(2) يعملان بطريقة مختلفة عن الندائين (3) و(4)؟ let obj, method; obj = { go: function() { alert(this); } }; obj.go(); // (1) [object Object] (obj.go)(); // (2) [object Object] (method = obj.go)(); // (3) undefined (obj.go || obj.stop)(); // (4) undefined الحل إليك تفسير ما حدث. هذا هو الطريقة العادية لاستدعاء تابع الكائن. نفس الأمر يتكرر هنا، الأقواس لا تغير ترتيب العمليات هنا، النقطة هي الأولى على أي حال. هنا لدينا استدعاء أكثر تعقيدًا ‎(expression).method()‎. يعمل الاستدعاء كما لو كانت مقسمة على سطرين: f = obj.go; // يحسب نتيجة التعبير f(); // يستدعي ما لدينا هنا تُنفذ f()‎ كدالة، بدون this. مثل ما حدث مع الحالة (3) على يسار النقطة . لدينا تعبير. لشرح سلوك (3) و(4) نحتاج إلى أن نتذكر أن توابع الوصول (accessors) للخاصيات (النقطة أو الأقواس المربعة) تُعيد قيمة النوع المرجعي. أي عملية نطبقها عليها باستثناء استدعاء التابع (مثل عملية الإسناد = أو ||) تحولها إلى قيمة عادية، والّتي لا تحمل المعلومات التي تسمح لها بتعيين قيمة this. ترجمة -وبتصرف- للفصل Reference Type من كتاب The JavaScript language
    1 نقطة
  20. صحيح أن PayPal أفضل طريقة دفع و إستقبال الأموال في العالم و تقريبا يستعملها الكثير ، لكن و للأسف يوجد عدة دول عربية لا تسمح لمواطنيها بفتح حساب منها تونس ، لذلك أطلب من إدارة موقع مستقل الرائع إضافة طرق أخرى مثل كاش يو ، بايونيير أو حتى التحويلات البنكية .
    1 نقطة
  21. بعد إتحية والسلام قد يكون سؤالي ليس في المكان الصحيح لكني لم اجد قسم افضل من هذا القسم لطرحه ممكن حل حتى اتحصل على كارت ماستر- كارت أو فيزا كارت عالمية واستقبلها في تونس وتكون مطبقة مع البايبل أو أي كارت عالمية أخرى ممكن اتحصل عليها من الخارج وتاتني التونس وممكن أفعل بها البايبل شكراً اتمنى اني أجد حل الهذه المشكلة
    1 نقطة
×
×
  • أضف...