لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 08/28/22 in أجوبة
-
لنفترض أن لدي كائن بسيط بالشكل التالي: const myObj = { a: 1, b: 2, c: 3 }; هل توجد حلقة مثل foreach للمرور على كل مفتاح key وقيمة value في الكائن السابق، لطباعتهما معًا؟ أريد أن تكون النتيجة بالشكل التالي: a 1 b 2 c 32 نقاط
-
أريد أن أقوم بإرسال بعض الطلبات من خلال مكتبة requests، وأريد أن أوقف أي طلب يتم إرساله بعد وقت محدد من إرساله (في حالة لم ينتهي الطلب بالفعل)، على سبيل المثال بعد 3 ثوانٍ من بدء الطلب يتم إيقافه في حالة تأخر الخادم في الرد. بعد ذلك يجب أن أقوم بإعادة إرسال نفس الطلب مرة أخرى. هل توفر مكتبة requests وسيلة لتحديد timeout للطلب؟1 نقطة
-
ما هي الطريقة الموصى بها لملء قيمة رقمية بأصفار صفرية في JavaScript؟ على سبيل المثال إن كان لدي الرقم 43 فأريد أن يتم إضافة صفرين إلى اليسار ليصبح 0043 هل توجد دالة مخصصة لتركيب الأصفار على قيمة رقمية؟ أم يجب كتابة دالة تقوم بهذا الأمر؟1 نقطة
-
أرغب فى تحرير تعليق بداخل الصفحة باستخدام اجاكس؛ يتم التعديل فى قاعدة البيانات بنجاح ولكن القيمة الراجعه عند استخدام $(this).parents('.inputEditTex').nextAll('.p-comment-homepage').html(data); لا تظهر الا بعد اعادة تحميل الصفحة فى حين عند استخدامها بدونها هكذا $/*(this).parents('.inputEditTex').nextAll*/('.p-comment-homepage').html(data); تظهر فى الحال ولكن على كل الحقول المشابهة.... كيف أظهر القيمة فى مكان النقر فقط: هذا هو الكود: <div class="div-comm-2"> <div class="result dotted"> <div id="inputEditText"> <input type="text" class="text" value="<?php echo $com['c_text']?>"> <input type="hidden" class="comID" value="<?php echo $com['c_id']?>"> <button class="sendEdit">send</button> </div> <p class="p-comment-homepage"><span><?php echo $com['c_text']?></span></p> </div> </div> ==================== $(".sendEdit").on("click", function(){ var ComEdit=$(this).prevAll('.comID').val(); var Text=$(this).prevAll('.text').val(); $.ajax({ url:"thumb.php", data:{ed:ComEdit,text:Text}, success:function(data){ $(this).parents('.inputEditTex').nextAll('.p-comment-homepage').html(data); } }); }); =================== if (isset($_GET['ed']) && isset($_GET['text'])) { $comNum=$_GET['ed']; $text=$_GET['text']; $stmt=$conn->prepare(" UPDATE comments set c_text=? where c_id=? "); $stmt->execute(array($text,$comNum)); if ($stmt) { $stmt=$conn->prepare(" SELECT * from comments where c_id=? "); $stmt->execute(array($comNum)); $com=$stmt->fetch(); if (!empty($com)) { ?> <span><?php echo $com['c_text'] ?></span> <?php } } }1 نقطة
-
السلام عليكم بعد تهيئة مشروع بواسطة npm npm init كيف يمكن دمج كل من vitejs و tailwind شكرا1 نقطة
-
أنا طالبة في الصف الثاني الإعدادي ، عمري ثلاثة عشر عاما ، و اريد بشدة تعلم البرمجة ، هل يمكنني ذلك ؟ ، لأنه و بناء على ما قرأت فإن الطلبة الجامعيين في مجال البرمجة هم القادرون على دراستها ... فهمت أن لغة البرمجة تحتاج لفراغ لدراستها و تركيز عالي ، و طبعا أملك هذه المقومات ، ففي ظل الجائحة السابقة صارت الدراسة لمدة أربع ساعات في اليوم و الوقت الباقي كافي لأتعلم البرمجة ولو فقط الأساسيات ،1 نقطة
-
لا علاقة بالسن في هذا المجال، ويمكن لأي شخص أن يبدأ بتعلم البرمجة وليس هناك أي متطلبات للبدء سوى الحصول على حاسوب بمواصفات متوسطة وإتصال بالإنترنت، ويمكن البدء في تعلم البرمجة على الفور، ومع ذلك يجب تحديد الهدف من تعلم البرمجة وذلك بسبب وجود الكثير من التفرعات والتخصصات في البرمجة ويصعب على شخص واحد أن يتعلم أكثر من مجال في وقت واحد. من ضمن مجالات البرمجة المعروفة يوجد: تطوير تطبيقات الجوال Android / iOS تطوير واجهات المستخدم Frontend تطوير الواجهات الخلفية Backend تطوير الألعاب Games Development تطوير الأنظمة المدمجة Embedded Systems تطوير تطبيقات سطح المكتب Desktop Apps في هذه المقالة يوجد شرح لأشهر التخصصات البرمجة وأشهر التقنيات ولغات البرمجة المستعملة في كل مجال، وكيفية اختيار لغة البرمجة التي تناسبك، مع بعض المصادر لتبدأ في التعلم:1 نقطة
-
السلام عليكم, لتطبيق قائمة جانبية تتوسع بالضغط على زر معيين وتعود بالضغط عليه مرة أخرى قمت بالتالي : const toggleBtn = document.getElementById("toggle"); const navMenu = document.querySelector('aside'); const container = document.getElementById('container'); function toggleOn(){ if(toggleBtn.classList.contains('toggle-on')){ toggleBtn.classList.remove('toggle-on'); toggleBtn.classList.add('toggle-off'); navMenu.classList.remove('w-[75px]'); navMenu.classList.remove('rounded-[40px]'); navMenu.classList.add('w-[250px]'); navMenu.classList.add('rounded-[20px]'); container.classList.remove('left-[70px]'); container.classList.add('left-[250px]'); }else{ toggleBtn.classList.remove('toggle-off'); toggleBtn.classList.add('toggle-on'); navMenu.classList.remove('w-[250px]'); navMenu.classList.add('w-[75px]'); navMenu.classList.remove('rounded-[20px]'); navMenu.classList.add('rounded-[40px]'); container.classList.remove('left-[250px]'); container.classList.add('left-[70px]'); } لاحظوا أنني أكثرت الإستعلامات هل هاذا يؤدي إلى بطئ الموقع وهل هناك فكرة أخرى بديلة لتطبيقها ولاحظوا أيضا أنني قمت بغيير عرض الحاوية من left-[70px] عندما تكون القائمة الجانبية غير موسعة أي تبدأ الحاوية من 70px يسار أما عندما تتوسع القائمة الجانبية وتاخد 250px جعلتها جعلت الحاوية تبدأ من اليسار ب250px left-[250] container.classList.remove('left-[70px]'); container.classList.add('left-[250px]');1 نقطة
-
بداية، يمكنك اختصار الشيفرات التالية: function toggleOn(){ if(toggleBtn.classList.contains('toggle-on')){ toggleBtn.classList.remove('toggle-on'); toggleBtn.classList.add('toggle-off'); navMenu.classList.remove('w-[75px]'); navMenu.classList.remove('rounded-[40px]'); navMenu.classList.add('w-[250px]'); navMenu.classList.add('rounded-[20px]'); container.classList.remove('left-[70px]'); container.classList.add('left-[250px]'); }else{ toggleBtn.classList.remove('toggle-off'); toggleBtn.classList.add('toggle-on'); navMenu.classList.remove('w-[250px]'); navMenu.classList.add('w-[75px]'); navMenu.classList.remove('rounded-[20px]'); navMenu.classList.add('rounded-[40px]'); container.classList.remove('left-[250px]'); container.classList.add('left-[70px]'); } لتصبح: function toggleOn(){ if(toggleBtn.classList.contains('toggle-on')){ toggleBtn.classList.remove('toggle-on'); toggleBtn.classList.add('toggle-off'); navMenu.classList.remove('w-[75px]' ,'rounded-[40px]'); navMenu.classList.add('w-[250px]' ,'rounded-[20px]'); container.classList.remove('left-[70px]'); container.classList.add('left-[250px]'); }else{ toggleBtn.classList.remove('toggle-off'); toggleBtn.classList.add('toggle-on'); navMenu.classList.remove('w-[250px]' ,'rounded-[20px]'); navMenu.classList.add('w-[75px]' ,'rounded-[40px]'); container.classList.remove('left-[250px]'); container.classList.add('left-[70px]'); } ثم ما الحاجة من كل هاته التلاعبات بشجرة الوثيقة؟ لما لا يكفي تغيير صنف واحد وليكن هو حاوي قائمة التصفح. قم بتبديل صنف واحد مثلا وليكن is-enabled function toggleOn(){ if(toggleBtn.classList.contains('toggle-on')){ navMenu.classList.add('is-enabled') }else{ navMenu.classList.remove('is-enabled') } أو حتى: function toggleOn(){ navMenu.classList.toggle('is-enabled') ثم تعامل مع الباقي عن طريق الـ css و tailwindCSS: .nav-menu { // اي تنسيقات } .nav-menu .toggle-btn{ // اي تنسيقات } .nav-menu .container{ // اي تنسيقات } .nav-menu.is-enabled { // اي تنسيقات } .nav-menu.is-enabled .toggle-btn{ // اي تنسيقات } .nav-menu.is-enabled .container{ // اي تنسيقات } او عن طريق sass: .nav-menu { // اي تنسيقات .toggle-btn{ // اي تنسيقات } .container{ // اي تنسيقات } &.is-enabled { // اي تنسيقات .toggle-btn{ // اي تنسيقات } .container{ // اي تنسيقات } } } يوجد قاعدة تسعى لتحسين تجربة الاستخدام تسمى Less Javascript, more HTML and CSS أي "اقل جافاسكربت ، اكثر HTML و CSS". حاول التقليل من الاعتماد على جافاسكربت كليا في اشياء يمكن القيام بها عن طريق css (رغم انها قادرة).1 نقطة
-
بحسب الموقع الرسمي فإن هذه الخاصية غير مدعومة حتى الآن و لكن يتم دراسة إمكانية إضافتها في المستقبل، بدلاً عن ذلك يمكنك تحديد ميزانية معينة بحيث يتم تنبيهك عند الوصول إلى حد الميزانية الذي قمت بتحديده. يمكنك الوصول إلى ذلك من قسم الدفع Billing و من ثم القيام بإضافة ميزانية جديدة (في حال لم يكن لديك واحدة مسبقاً) و يمكنك من الخيارات تحديد حد معين عن الوصول إليه سيتم تنبيهك. بحسب الموقع فإن بعض المناطق يحدث فيها تأخر في إرسال التنبيه قد يصل إلى بضعة أيام.1 نقطة
-
لدي مشكلة في معرفة العلامات التي اوضع للكود يعني قصدي اني لا استطيع حفظ متي تضع مثلا(,)او(:)مع اني فاهم الكود ولاكن في اغلب الاوقات يكون الخطأ من هذا فهل هذا عادي ام هناك خطأ في طريقة المذاكرة1 نقطة
-
1 نقطة
-
لا يتم الطباعة الى الconsole لعدم تحقق شرط المساواة ايضا بما انك تريد مقارنة متغيرين يحملان نفس نوع البيانات ( في هذه الحالة string ) لذا يفضل استعمال "===" بدل "==" بعد فحص الكود تبين ان المتغير pshirt يحتوي على مسافة بالاضافة الى القيمة المستحصلة عن طريق .innerText مثال: "Blue T-shirt" === " Blue T-shirt" هنا تكون نتيجة الشرط الذي وضعته false بالتالي لا يتم تنفيذ السطر 87 لحل المشكلة استعمل trim للتخلص من اي مسافات ملتصقة بالنص , فيكون كالتالي if( pshirt.trim() === ite ){ console.log("eee"); }1 نقطة
-
تحيه طيبه للجميع هل يمكن تحديد سقف ميزانية الفايربيز من هلال برمجة تطبيقات flutter بحيث لو وصل السقف الفلاني يتم وقف النت عن التطبيق او شي من هذا القبيل؟في الخطه المدفوعه وهل الفاير بيز يعتبر خيار جيد لتطبيقات مثل تطبيق مستعمل واولكس والسوق المفتوح ؟1 نقطة
-
كيفية نسخ عنصر div عند الضغط عليه يتحول الى نسخه اخرى وباالوان عشوائية وتتغير الخليفة عند الضغط عليه اريد فهم وتوضيج هذه الجزء1 نقطة
-
بداية تحتاج كتابة كل الأشياء التي تتعلق بإستفسارك، ضع محاولتك، ضع شيء في السؤال يُمكن لأي مدرب أو من سيُجيب على سؤالك البدأ منه. يُمكن تقسيم سؤالك إلى 3 أجزاء: كتابة دالة تقوم بجلب سلسلة نصية تُمثل لون عشوائي، من خلال البحث في النت يمكن الوصول لهذه الدالة: function randColor() { return "#" + Math.floor(Math.random()*16777215).toString(16).padStart(6, '0').toUpperCase(); } console.log(randColor()) // #AF4229 كل مرة يتم إستدعاء الدالة تقوم بإرجاع لون جديد. بناء نقطة البدأ من تجهيز عُنصر div و إعطائه بعض التنسيقات المبدئية، تحديد العُنصر من خلال جافاسكربت و التسمع لحدث click لمُعالجته: Html: <div class="original"> </div> Css: div.original{ background-color: pink; height: 50px; border: 1px solid #333; margin-bottom: 10px; } JS: var originalDiv = document.getElementsByClassName('original')[0]; // تحديد العُنصر الاصلي originalDiv.addEventListener("click", cloneDiv); // التسمع لحدث الضغط على العُنصر /* دالة مُعالجة الحدث */ function cloneDiv() { console.log('cloned'); } الآن إذا ضغطت على العُنصر في كل مرة ستجد في القنصل عبارة cloned، المفروض هذا الجزء أنت من يقوم به، و ترفقه مع السؤال. كتابة منطق الدالة cloneDiv لمُعالجة حدث الضغط على الdiv الأصلي، سنستخدم التابع cloneNode لنسخ العُنصر، و الدالة randColor التي أنشأناها في الخطوة الأولى لتغيير اللون، و في الأخير نضيف العُنصر المنسوخ إلى ال body بإستخدام التابع appendChild : function cloneDiv() { let clonedDiv = originalDiv.cloneNode(true); // نسخ العُنصر الأصلي و الإحتفاظ به في متغير محلي clonedDiv.style.backgroundColor = randColor(); // تغيير لون الخلفية للعُنصر المنسوخ document.body.appendChild(clonedDiv); // إضافته لجسم الصفحة } يُمكنك تجربة المثال من خلال codepen على الرابط التالي:1 نقطة
-
لا أتوقع أنه يوجد مثل ما تريد في فيربيز يمكنك الإطلاع على صفحة الأسعار للفيربيز من هنا1 نقطة
-
في كل مرة تقوم باستدعاء باني الصفحة Page1 سيتم تهيئتها ببيانات جديدة، أي لايوجد ربط بين ما تم تمريره مسبقاً وما تقوم به الآن، الحل هو حفظ PID في Shared Preference وجلبه في الدخول الثاني للصفحة في حال تمرير اسم، وتعديله لكل مرة يتم الدخول ل PID أي تحديث القيمة القديمة1 نقطة
-
في حال إمتلك المهارات التي تؤهلك لدخول سوق العمل جيداً ولديك احترافية عالية في المهارات ، بالطبع يمكنك البدء في البحث عن مشاريع والعمل عليها ، لكن كنصيحة لك لا تتسرع في دخول سوف العمل كون المنافسين كثر لذلك حاول بناء معرض أعمال جيد لك يساعدك في إيجاد عمل بشكل أسرع وليأخذ العميل فكرة جيدة عنك . أما بخصوص اللغة حسب طبيعة اللعمل هل يتطلب لغة إنجليزية أو لا ، لكن بكل الاحول يجب أن تكون لديك معلومات كافية اللغة الإنجليزية لتساعدك على التواصل وفهم العميل جيداً . هذه المقالات سوف تساعدك على فهم سوق العمل جيداً :-1 نقطة
-
استخدام الخاصية loading قد يكون حلا كافيا في بعض المتصفحات الحديثة ولكن رغم هذا الا انه يفضل عمل مقاربة تشمل كامل المتصفحات. يمكنك تخزين الرابط المصدري للصورة في خاصية مخصصة ولتكن data-source ثم عن طريق الجافاسكربت تحديد كامل عناصر الصور في الوثيقة وحقن القيمة المخزنة بـ source داخل src حتى يتم تفسيرها من المتصفح بشكل عادي. وبالطبع فان هذا يكون بعد عرضها في الوثيقة او بالاستماع لحدث ما. <img src="" data-source="./path/to/img.png" alt="image title" /> يتم الاستعانة بمفهوم مراقبات التقاطع Intersection observers لخدمة هذا الغرض في الغالب. يمكنك بها التعرف ما ان كانت الصورة معروضة او لم يتم الانزلاق اليها بعد. يمكنك كطريقة تنظيمية انشاء اكثر من ملف نعم، ولكن يفضل استعمال محددات عناصر سليلة للتعرف على تلك الخاصة باللغة العربية وتلك الخاصة بلغات اخرى. مثال: @tailwind base; @tailwind components; @tailwind utilities; body { // تنسيقات عامة } body.rtl { // تنسيقات مخصصة عربية }1 نقطة
-
لكي يتم إضافة التدوينات في الأقسام المحددة، تحتاج إلى تعديل الدالة lastPosts و الدالة createLastPosts وكذلك تحتاج إلى إنشاء مصفوفة عامة global بالشكل التالي: var IDs = []; function lastPosts(json) { var ID = IDs.shift(); // للحصول على أول عنصر في المصفوفة وحذفه من المصفوفة الأصلية // ... var printall = document.getElementById(ID); printall.innerHTML += printArticle; } function createLastPosts(url, count, printId) { IDs.push(printId); // لإضافة عنصر جديد إلى المصفوفة // ... } الآن يمكنك أن تقوم بتشغيل الدالة createLastPosts أكثر من مرة وسوف يتم إضافة التدوينات في الأماكن المحددة: <div class="container"> <div class="wrapper"> <div class="content"> <div id="demo1" class="show-sidebar grid grid-3"></div> <div id="demo2" class="show-sidebar grid grid-3"></div> <div id="demo3" class="show-sidebar grid grid-3"></div> </div> </div> </div> <script> createLastPosts('https://mo-222.blogspot.com', '1', 'demo1'); createLastPosts('https://mo-222.blogspot.com', '2', 'demo2'); createLastPosts('https://mo-222.blogspot.com', '3', 'demo3'); </script> طريقة أفضل لكن الطريقة السابقة متوقفة على ترتيب تنفيذ السكريبتات في المتصفح ولا يمكننا أن نضمن أن يتم تنفيذهم بالترتيب (قد يقوم المتصفح بتنفيذ السكريبتات حسب سرعة تحميل كل سكريبت) وبالتالي يمكن أن نجد أن التدوينات يتم إضافتها في أماكن عشوائية، ولحل هذه المشكلة يمكن أن تقوم بتجربة طريقة مختلفة عن إستخدام مصفوفة عامة، حيث نقوم بإضافة خاصية باسم data-position في كل عنصر script وتحمل id الخاص بالعنصر الذي سيتم إضافة التدوينات فيه، بالشكل التالي: function lastPosts(json) { // للحصول على الخاصية data-position من السكريبت الحالي (الذي قام بإستدعاء هذه الدالة) var ID = document.currentScript.getAttribute('data-position') // ... var printall = document.getElementById(ID); printall.innerHTML += printArticle; } } function createLastPosts(url, count, printId) { // ... ثم يتم إستدعاء الدالة createLastPosts بنفس الطريقة: <div class="container"> <div class="wrapper"> <div class="content"> <div id="demo1" class="show-sidebar grid grid-3"></div> <div id="demo2" class="show-sidebar grid grid-3"></div> <div id="demo3" class="show-sidebar grid grid-3"></div> </div> </div> </div> <script> createLastPosts('https://mo-222.blogspot.com', '1', 'demo1'); createLastPosts('https://mo-222.blogspot.com', '2', 'demo2'); createLastPosts('https://mo-222.blogspot.com', '3', 'demo3'); </script> الملف بعد تعديله: last-post.html1 نقطة
-
يمكنك أن تستعمل الحزمة django-settings-export، حيث تمكنك من إستخدام متغيرات معينه من ملف settings.py داخل أي قالب template بشكل سهل للغاية. اولًا عليك تثبيت الحزمة من خلال الأمر التالي: pip install django-settings-export بعد ذلك يجب أن تقوم بإعداد ملف settings.py ليشمل الكود التالي: # هنا تخبر Django بأن يقوم بتشغيل هذه الحزمة في القوالب TEMPLATES = [ { 'OPTIONS': { 'context_processors': [ 'django_settings_export.settings_export', ], }, }, ] # هذا مثال لمتغير وسوف نستخدمه في القوالب MY_TEST_DATA = 'any content goes here'; # في هذا الجزء تقوم بكتابة المتغيرات التي تريد إستخدامها في القوالب # لاحظ ان المتغيرات تكتب بشكل نص SETTINGS_EXPORT = [ 'MY_TEST_DATA', ] بعد ذلك يمكنك ان تستخدم المتغير MY_TEST_DATA، كالتالي: <script>var customVar = '{{ settings.MY_TEST_DATA }}';</script> ويمكنك تغير كلمة settings لأي شيء آخر (في حالة حدوث تعارض مع حزمة أخرى)، من خلال عمل متغير SETTINGS_EXPORT_VARIABLE_NAME في ملف settings.py، كالتالي: # نقوم بإعطاء المتغير أي قيمة نصية # يجب ألا تحتوي على مسافات، فقط حروف لاتينية وعلامة _ SETTINGS_EXPORT_VARIABLE_NAME = 'my_config' # في القالب {{ my_config.MY_TEST_DATA }} في حالة كنت تستخدم Django بإصدار اقدم من 1.8 فيجب أن تستخدم الكود التالي لإعداد الحزمة: TEMPLATE_CONTEXT_PROCESSORS = [ 'django_settings_export.settings_export', ]1 نقطة
-
يوجد مجموعة من الكتب الإنجليزية لتعلم بايثون ومنها: كتاب Think Python: كتاب مجاني ومناسب للمبتدئين، هو عبارة عن مقدمة لبرمجة Python للمبتدئين. يبدأ بالمفاهيم الأساسية للبرمجة، وهو مصمم بعناية لتحديد جميع المصطلحات عند استخدامها لأول مرة ولتطوير كل مفهوم جديد في تقدم منطقي. يتم تقسيم الأجزاء الأكبر حجمًا، مثل البرمجة الموجهة والكائنات العودية recursion إلى سلسلة من الخطوات الأصغر ويتم تقديمها على مدار عدة فصول. كتاب How to Code in Python: كتاب مجاني أيضًا، كتاب مقدم من شركة DigitalOcean (شركة مختصة في الإستضافة والتخزين السحابي)، تم تصميم هذا الكتاب ليتم استخدامه بطريقة منطقية بالنسبة للمبتدئ. بمجرد أن تتعرف على المفاهيم الأساسية المشروحة في الكتاب، يمكنك الاستمرار في استخدام الكتاب كمصدر مرجعي. كتاب Python for Everybody: الهدف من هذا الكتاب المجاني هو تقديم مقدمة في البرمجة. في هذا الكتاب يتم التركيز بشكل أكبر على استخدام Python لحل مشكلات تحليل البيانات الشائعة في عالم المعلوماتية. ملاحظة: تحتوي الأكاديمة على كتاب البرمجة بلغة بايثون، وهو كتاب مترجم إلى العربية مبني على كتاب «How to code in Python» ويأتي شارحًا المفاهيم البرمجية الأساسية بلغة بايثون، رُبط هذا الكتاب مع توثيق لغة بايثون في موسوعة حسوب لتسهيل عملية الاطلاع على أي جزء من اللغة مباشرة وقراءة التفاصيل باللغة العربية. كما يوجد مجموعة ضخمة من المقالات في Python يمكنك الإطلاع عليها من هنا (مقالات بايثون).1 نقطة
-
يمكنك أن تقوم بعمل تجميع aggregation من خلال التابع count كالتالي: # يجب إستدعاؤ التابع أولًا # في حالة تم إستدعاء models مسبقًا فيمكنك أن تستخدمه أيضًا from django.db.models import Count result = (User.objects .values('role') .annotate(dcount=Count('role')).order_by() ) الكود السابق يقوم بتنفيذ جملة SQL التالية: SELECT role, COUNT(role) AS dcount FROM users GROUP BY role وسوف تكون النتيجة كالتالي: [{'role': 'Admin', 'dcount': 2}, {'role': 'User', 'dcount': 2}] إن أردت أن تحتوي النتيجة على أكثر من حقل، فيجب أن تقوم بإضافتهم إلى values كالتالي: .values('role', 'name', 'age') وهناك دائمًا حل آخر بديل وهو أن تقوم بتنفيذ جملة SQL فقط كالتالي: result = User.objects.raw('''SELECT * FROM users GROUP BY role''') لكن لا ينصح إستخدام هذا الحل، لأن جمل SQL المباشرة قد تؤدي إلى حدوث مشاكل أمنية وأخطاء غير متوقعه في كثير من الأحيان.1 نقطة
-
في البداية يجب التفريق بين تحيليل البيانات Data analysis وعلم البيانات Data science، والواضح هو أن علم البيانات أشمل وأعم، ويمكن تعريف كل منهما كالتالي: علم البيانات Data science: هو التعامل مع البيانات الغير المنظمة، فهو مزيج من الإحصاءات، والرياضيات، والبرمجة، وحل المشكلات، وجمع البيانات بطرق مختلفة (مثل سحب البيانات web scraping أو الإقتراعات polls .. إلخ)، أي أنّه علم يضم جميع التقنيات التي تقوم بإستخلاص كل المعلومات من البيانات، وهو مفهوم يستخدم للتعامل مع البيانات الكبيرة Big Data، يغطي هذا المفهوم جوانب إعداد البيانات وتنظيفها وتحليلها. تحليل البيانات Data analysis: هو عملية فحص للبيانات الموجودة بهدف إستخلاص معلومات مفيدة، يمكن أن تكون لمعرفة أسباب أو تفسير لشيء من الماضي من أجل أهداف حاضرة أو مستقبلية، ويستلزم تحليل البيانات الخروج بإحصائيات للوصول إلى نتيجة معينة، يحتاج محلل البيانات لمعرفة كيفية العمل مع الأرقام، يُنظر إلى تحليلات البيانات على أنها أهم فرع في علوم البيانات. البيانات الضخمة Big Data: تُعتبَر البيانات الضخمة أنها كميات هائلة جدًا من البيانات تتزايد وتكبر بإستمرار، وليس من الممكن معالجة هذه البيانات أو حتى التعامل معها، وجمعها استنادًا على الطرق التقليدية بسبب كبر حجمها، حيث يتطلب هذا النوع من البيانات أساليب مُبتكرة لمعالجتها. وفي العادة يتم إستعمال هياكل البيانات Data Structure والخوارزميات Algorithms للتعامل معها. يجب أن يكون عالم البيانات على دراية بالأمور التالية: الرياضيات المتقدمة، مثل الجبر الخطي، والمصفوفات، والإحصاء. لغات البرمجة: بالطبع سيحتاج عالم البيانات أن يكون على دراية واسعة بأحد لغات البرمجة مثل Python و matlab أو R أو C++ إدارة البيانات: يجب أن يكون بإمكان كل عالم بيانات أن يدير البيانات وينظمها أو حتى أن يقوم بتجميعها من خلال العديد من الطرق، مثل سحب البيانات web scraping أو عمل إستطلاعات/إقتراعات Polls، حيث لن يكون تجميع البيانات بشكل يدوي وفردي عملي على الإطلاق. الخوارزميات وهياكل البيانات: من الضروري تعلم الخوارزميات وكيفية عملها وأشهرها مثل خوارزميات البحث والترتيب، وكذلك هياكل البيانات، لأن بدونها سيكون التعامل مع البيانات الضخمة Big Data أمرًا بطيئًا للغاية وغير عملي بالمرة. يتم تدريس الأمور السابقة في شكل مواد متعددة وتختلف تسمية وعدد المواد من جامعة إلى أخرى. إن لم يكن لديك معرفة مسبقة في البرمجة، فأنصحك بأن تبدأ بأحد الدورات التي تهيء لك الأمر في البداية، ويوجد العديد من الدورات التي تقدم هذا المحتوى منها المجاني والمدفوع، مثل دورة CS50 (دورة مجانية، تعد بداية جيدة لمن لا يتقن أي لغة برمجة) أو دورة علوم الحاسوب مقدمة من حسوب (دورة مدفوعة، تحتوي على أغلب التقنيات السابقة، مثل أساسيات البرمجة ولغة JavaScript و Python والخوارزميات وهياكل البيانات وغيرها). بعد ذلك يجب أن تتعمق أكثر في لغة برمجة مثل Python (الأكثر إستعمالًا في الوقت الحالي في علوم البيانات)، كما يجب أن تتقن الرياضيات مثل الجبر الخطي والإحصاء والتعامل مع المصفوفات (يوجد مجموعة المكتبات التي تساعدك في هذا الأمر مثل Numpy لبايثون). يمكنك أيضًا أن تبحث عن مشاريع مفتوحة المصدر على GitHub لقراءة الكود المصدر Source Code لمشاريع عديدة وكبيرة، مما يعطيك فكرة ممتازة عن كيفية عمل مشاريع من الصفر وكيف يتم تطويرها، كما قد تحصل على بعض أفكار لمشاريع مستقبلية من هذه الخطوة.1 نقطة
-
لكي يعمل Django مع MySQL يجب تثبيت حزمة إضافةي وهي mysqlclient (لـ بايثون 3) أو mysql-python (لـ بايثون 2)، ويمكنك أن تقوم بتثبيتها من خلال الأمر التالي: pip install mysql-python # (python 2) pip install mysqlclient # (python 3) وإن كنت تستعمل نظام التشغيل لينكس (مبني على توزيعة Debian مثل Ubuntu أو Mint) فيمكنك أن تستخدم الأمر التالي: apt-get install python-mysqldb كما يجب عليك تعديل إعدادات المشروع لكي يستخدم MySQL من خلال ملف settings.py، كالتالي: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # تخبر Django بأن يستعمل محرك MySQL 'NAME': 'django', 'HOST': '', # نص فارغ يعني localhost 'PORT': '3306', 'USER': 'root', 'PASSWORD': '', } } ملاحظة: يمكنك حفظ معلومات المستخدم الخاص بقاعدة البيانات في ملف my.cnf على سبيل المثال، كالتالي: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'OPTIONS': { 'read_default_file': '/path/to/my.cnf', }, } }1 نقطة
-
لتعلم برمجة تطبيقات الهواتف الذكية يجب عليك تحديد نظام التشغيل الذي ستقوم بإنشاء التطبيقات له (أندرويد أم iOS أم كلاهما معًا)، ولكل من الإختيارات الثلاثة السابقة لها لغات وتقنيات خاصة بها، كالتالي: أندرويد: ستحتاج إلى تعلم لغة مثل Java أو Kotlin لإنشاء تطبيقات أندرويد، وكذلك ستحتاج حساب مطور في متجر جوجل للتطبيقات (إن كنت تريد نشر تطبيقاتك في متجر Play) والذي يكلف 25$ تدفع مرة واحدة. iOS: اللغة الأكثر إستعمالًا لعمل تطبيقات iOS هي Swift ويمكنك أن تستعمل لغة object-c أيضًا، ولرفع تطبيقك على apple store ستحتاج إلى إنشاء حساب مطور بتكلفة 99$ سنويًا. Cross Platform: تطبيقات متعددة المنصات، أي أنه يمكنك أن تقوم بإنشاء تطبيق بلغة معينة وإطار عمل معين ومن ثم إستخدام التطبيق على كلا المنصتين (Android و iOS) وهذا الأمر يقلل تكلفة إنشاء التطبيقات، لأنك سوف تكتب كود واحد فقط، وسوف يعمل على كلا النظامين. تتزايد شعبية Flutter وReact Native حاليًا في إنشاء تطبيقات cross platform كما يمكنك أن تقوم بإنشاء تطبيقات هجينة عبر تقنيات الويب من خلال إستخدام لغات مثل HTML, CSS, Javascript وهي نوع من أنواع cross platform أي أنك تكتب كود واحد ويعمل على أكثر من نظام تشغيل، ويستخدم إطار العمل Cordova كثيرًا في هذا المجال. يمكنك التعرف أكثر حول الفرق بين أنواع التطبيقات من خلال هذا الفيديو: كما تحتوي الأكاديمية على الكثير من المقالات في كل مجال من المجالات السابقة، مثل مقالات حول لغة Java، ولغة kotlin، وبرمجة الأندرويد بشكل عام. أما بالنسبة للأمن السيبراني cyber security فسوف تحتاج إلى تعلم كل أساسيات البرمجة وكيفية إستخدام لغات مثل Python لإنشاء الأداوات المناسبة التي سوف تساعدك في إختبار الإختراق، كما أنه عليك تحديد المجال الذي تريد التخصص فيه (إختبار إختراق المواقع، أو أنظمة التشغيل أم إختبار إختراق شبكات .. إلخ)، بعد ذلك عليك دراسة كيف تعمل الأهداف التي تحاول حمايتها (مواقع، برامج، تطبيقات، ألعاب .. إلخ) حسب المجال الذي حددته. عليك أيضًا تعلم كيفية إستخدام نظام التشغيل Linux حيث أنه النظام الأكثر إستعمالًا في إختبار الإختراق، وأغلب خوادم الويب والشركات الكبيرة في العالم تستخدمه. تحتوي الأكاديمية على بعض الكتب التي قد تساعدك كثيرًا في مرحلة التعلم، مثل كتاب "البرمجة بلغة بايثون" و كتاب "دليل إدارة خواديم أوبنتو" (في حالة أردت أن تتخصص في مجال الويب)، بالإضافة إلى كثير من المواضيع المتقدمة في شكل مقالات في لغة Python.1 نقطة
-
يمكن تطبيق البحث الثنائي في بايثون كالتالي: نقوم بعمل دالة search ونمرر لها القائمة ومن أين يبدء البحث وأين ينتهي وكذلك العنصر الذي نبحث عنه def search (lst, l, r, x): # نتحقق من القيمة الأولية # المتغير r يجب أن يكون أكبر من l if r >= l: # نستعمل علامة القسمة المزدوجة لجلب القيمة الصحيحة فقط mid = l + (r - l)//2 # نادرًا ما يكون العنصر في وسط القائمة لكن إن وجد نقوم بإرجاعه مباشرة if lst[mid] == x: return mid # إن كان العنصر المعطى أصغر من العنصر الموجود في وسط القائمة # فإنه سيكون موجودًا في الجزء الأيسر من القائمة elif lst[mid] > x: return search(lst, l, mid-1, x) else: # العنصر موجود في الجزء الأيمن return search(lst, mid + 1, r, x) else: # إن لم يكن العنصر موجود في القائمة من البداية نقوم بإرجاع -1 return -1 myList = [ 1, 2, 3, 4, 5, 6, 7, 8 ] x = 6 result = search(myList, 0, len(myList)-1, x) if result != -1: print (f"The Element is at {result}") else: print ("The List doesn't contain the element") لاحظي أن القائمة التي نقوم بتمريرها إلى دالة search يجب أن تكون مرتبة تصاعديًا لكي تعمل الدالة بشكل سليم، ويمكن ترتيب أي قائمة من خلال التابع sort كالتالي: cars = ['Ford', 'BMW', 'Volvo'] cars.sort() print(cars) # Output: ['BMW', 'Ford', 'Volvo']1 نقطة
-
سيكون عليك تعلم جافاسكربت في البداية، ففهم المبادئ فيها أمر أساسي جدا. المرحلة الثانية هي تقدير كم من الوقت تملك وماهي قدرتك على التعلم. حاليا يوجد العديد من المصادر لـ AngularJS وهي أكثر بكثير من مصادر ReactJS هذا لأنه قبل سنة لم يكترث الكثير من الناس إلى ReactJS أما الآن فمطوروا ReactJS المحترفيين هم عملة نادرة. إن لم تكن تملك مشكلة في مصادر التعلم، بمعنى طالما لا تمانع قراءة الكتب وتوثيق اللغات لتعلم لغة ما فأنت للآن في مكان جيد لاختيار ReactJS لكن سيكون عليك لاحقا التضحية بالشعبية الحالية لـ angularJS مقابل الشعبية المتزاية لإطار ReactJS في وقت كتابة هذا الجواب، Angular تملك 42 ألف نجمة في github أما بالنسبة لReact فهي 28 ألف لكن شعبية React في تزايد مع الوقت، ومع وقت انتهائك من التعلم سيكونان في نفس المرتبة، لذا لا مشكلة هنا، الفرق سيكون كما قلنا من مصادر التعلم والإضافات. نقطة أخرى وهي، إن كانت لك خبرة في أيّ مكتبات أخرى مثل backbone أو ember أو knockout فتعلم React سيكون سهلا، والعكس صحيح، فهي شبيهة لهذه المكتبات، على عكس Angular التي تختلف عنهم في الكثير من الأمور، لذا الانتقال صعب في تلك الحالة. نقطة أخيرة أحب التنويه لها هي أنّ react تشكل جزء view فحسب من mvc بمعنى أنه إذا أردت التعامل مع بيانات خارجية فيجب عليك الاستعانة بمكتبات خارجية، مثل Flux. لكن React في حالة تقدم ممتاز مؤخرا، فـ facebook قدمت مؤخرا React Developer Tools وهي أداة رائعة لمساعدة التطوير ب React عبر المتصفح. ملاحظة أخيرة وهي أن react تكتب بواسطة JSX وهي نسخة مطورة قليلا من JS وسيكون عليك الاستعانة بمترجم لاستخدامها من المتصفح مباشرة. لا أحب أن يكون ردي حياديا، فالحيادية ليست مفيدة دوما، أنا أقترح عليك تعلم React ولكن أنصحك بقوة بإلقاء نظرة على كل من الإطارين وتجربة بناء شيء بسيط بهما (todo list) حتى تعرف أي واحد منهم سيساعدك أكثر1 نقطة