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

عبدالله عبدالرحمن11

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

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

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

كل منشورات العضو عبدالله عبدالرحمن11

  1. بدون استخدام مكتبات خارجية يمكنك تحويل القائمة الى set وتبقى العناصر كما هي مرتبة كالآتي def unique(sequence): # إنشاء سيت فارغة seen = set() # إضافة العناصر بالترتيب بدون تكرار return [x for x in sequence if not (x in seen or seen.add(x))] أو كالآتي def dedupe(items): # إنشاء سيت فارغة seen = set() # حلقة لإضافة العناصر بالترتيب وبدون تكرار for item in items: if item not in seen: yield item seen.add(item)
  2. بدءًا من الإصدار 2.4.2 من مكتبة request ، يمكنك استخدام المُدخل json= (الذي يأخذ قاموسًا) بدلاً من data=(الذي يأخذ سلسلة) في استدعاء الطلب: import requests # طلب POST r = requests.post('http://httpbin.org/post', json={"key": "value"}) # حالة الطلب r.status_code # بيانات JSON r.json() وايضاً يمكنك استخدام دالة json.dumps ولكن تذكر بإضافة الرأس الذي يحتوي نوع البيانات content-type url = "http://localhost:8080" # بيانات JSON data = {'key': 'value'} # رأس نوع البيانات headers = {'Content-type': 'application/json', 'Accept': 'text/plain'} # طلب POST r = requests.post(url, data=json.dumps(data), headers=headers)
  3. يمكنك ببساطة إستخدام هذا الكود البسيط للقيام بالمطلوب لأنظمة وندوز ولينوكس وماك import os os.system('cls||clear') أو استخدام الآتي import subprocess, platform if platform.system()=="Windows": subprocess.Popen("cls", shell=True).communicate() # لوندوز else: # لليونكس وماك print("\033c", end="")
  4. بدايةً يجب عليك تعلم أساسيات البرمجة وبما أنك تريد مجال تطبيقات الأندرويد فلديك لغتين للبدء بأحدهما Java Kotlin ويُفضل أن تبداء بلغة Java وتبداء تعلم أساسيات البرمجة من: ماهي المتغيرات وانواعها وكيفية تعريفها واستخدامها مجرى التنفيذ control flow كيفية التحكم بمجرى تنفيذ التطبيق البرمجة الكائنية الموجهة Object Oriented Programming ومن ثم بناء برامج والتعامل مع المكتبات وبعد ذلك تتعلم برمجة تطبيقات الاندرويد و android studio
  5. لفهم decorators مع المُدخلات انظر للمثال الآتي @decorator def foo(*args, **kwargs): pass يترجم إلى التالي foo = decorator(foo) لذلك إذا كان للdecorator مُدخلات @decorator_with_args(arg) def foo(*args, **kwargs): pass يترجم إلى الآتي foo = decorator_with_args(arg)(foo) decorator_with_args هي دالة تقبل مُدخلات مخصصة وتقوم بإرجاع decorator الفعلي (الذي سيتم تطبيقه على دالة decorator). حيلة بسيطة لتسهيل استخدام decorator from functools import partial # إنشاء # decorator # مزيف def _pseudo_decor(fun, argument): def ret_fun(*args, **kwargs): # اعمل أي شيء هنا ، على سبيل المثال print ("decorator arg is %s" % str(argument)) return fun(*args, **kwargs) return ret_fun real_decorator = partial(_pseudo_decor, argument=arg) # decorator # الحقيقي @real_decorator def foo(*args, **kwargs): pass
  6. التاريخ أو timestamp يكون محفوظ في الأربعة بايت الأولى من id_ الخاص ب mongodb ويمكنك الحصول عليه كالآتي /* هذه الدالة تُرجع * ObjectId * مُضمن مع التاريخ */ // الدالة تقبل كائن التاريخ أو مُدخل سلسلة نصية function objectIdWithTimestamp(timestamp) { // تحويل التاريخ النصي الى كائن تاريخ والا سيكون كائن تاريخ على أية حال if (typeof(timestamp) == 'string') { timestamp = new Date(timestamp); } // تحويل الكائن التاريخ الى ثواني سداسية عشر Hexadecimal var hexSeconds = Math.floor(timestamp/1000).toString(16); /* إنشاء * ObjectId * مع التاريخ السداسي عشر */ var constructedObjectId = ObjectId(hexSeconds + "0000000000000000"); return constructedObjectId } // مثال // ابحث عن كل المستندات التي تم إنشائها بعد هذا التاريخ db.mycollection.find({ _id: { $gt: objectIdWithTimestamp('1980/05/25') } }); كما يمكنك استخراج التاريخ من أي ObjectId عبر هذا الموقع
  7. الدالة range في بايثون تستخدم مع الأعداد الصحيحة فقط integers وليس مع الأعداد العشرية decimals أو float فإذا أردت عدم استدعاء دالة من numpy أو أي دالة خارجية فيمكنك بناء دالة للقيام بالمطلوب # المُدخل الأول هو عدد البداية # المُدخل الثاني هو عدد النهاية # المُدخل الثالث هو درجة الفرق def drange(start, stop, step): r = start while r < stop: yield r r += step dec =drange(0.0, 1.0, 0.1) print(["%g" % x for x in dec])
  8. في إصدار 3.4 من بايثون يوجد وحدة جديدة تسمى tracemalloc ، حيث تقوم بتوفير إحصاءات مفصلة عن أي جزء من الكود يقوم بإستخدام أكبر قدر من الذاكرة ، وهذا مثال لكيفية إستخدمها import tracemalloc tracemalloc.start() # ... قم بتشغيل تطبيقك ... snapshot = tracemalloc.take_snapshot() top_stats = snapshot.statistics('lineno') print("[ أكبر 10 مستهلكين للذاكرة]") for stat in top_stats[:10]: print(stat)
  9. إذا لم تقم بإضافة أي شيء فسيتم الفرز بالطريقة الإفتراضية الذي شرحتها مسبقاً. أما إذا قمت بإضافة دالة حيث شكل الدالة ليس عشوائياً حيث أن دالة sort تتوقع أن تكون الدالة بهذا الشكل كما في التوثيق الرسمي /* الدالة تتوقع أن تكون الدالة بهذا الشكل بحث تحتوي على مُدخلين * وإرجاع قيمة إما أكبر من الصفر أو أصغر من أو يساوي الصفر */ (x,y) => { // ضع الكود الذي تريد ومن ثم قم بإعادة قيمة } حيث أنها تتوقع أن يكون للدالة مُدخلين وضع لهما أي اسم فليس هناك مشكلة وهنا وضعنا x و y ولا مشكلة بتغييرهما حيث أن دالة sort تتوقع أن تكون الدالة الذي ستمررها لها يجب أي يكون لها مُدخلين. ومن ثم دالة sort عند الفرز تقوم بتحديد العنصر الأول من المصفوفة والعنصر المجاور من المصفوفة ومن ثم تقوم بتمرير هذين العنصرين مكان x و y حيث مكان x سيوضع فيه قيمة العنصر الأول ومكان y سيوضع فيه مكان العنصر المجاور ومن ثم هذه الدالة التي مررناها ستقوم بإرجاع قيمة معينة حيث إذا كانت القيمة المُرجعة أكبر من الصفر فسيتم فرز y قبل x اما إذا كانت القيمة المُرجعة أصغر من أو يساوي الصفر فسيبقى العنصرين x و y كما هما حيث في دالة المقارنة التي وضعناها قمنا بكتابة y - x حيث على سبيل المثال يكون العنصر y يساوي 4 والعنصر x يساوي 2 إذن ستكون 2 - 4 والناتج سيكون 2 وهو أكبر من الصفر ، إذن سيتم فرز y أي 2 قبل x أي 4 وهكذا لبقية العناصر
  10. لإنشاء أصناف classes في JavaScript فيجب عليك كما في بقية اللغات المشهورة إستخدام الكلمة المحجوزة class كالآتي // إنشاء الصنف class Player{ constructor(name, age){ this.name = name; this.age = age } } // إنشاء نسخة من الصنف let p = new Player('Ali', 14) اما كيفية الإستيراد والتصدير في NodeJS فلديك طريقتين إما عبر CommonJS بإستخدام module.export كالآتي // من ملف Player.js // إنشاء الصنف class Player{ constructor(name, age){ this.name = name; this.age = age } } module.exports = Player; // من ملف آخر const Player = require('./Player') أو بإستخدام الطريقة الجديدة ل ES6 عبر إستخدام export و import كالآتي // ملف Player.js // إنشاء الصنف export default class Player{ constructor(name, age){ this.name = name; this.age = age } } // ملف آخر import Player from './Player.mjs'
  11. من MongoDB 3.2 والإصدارات الأحدث ، يمكنك استخدامه $isArray للتحقق مما إذا كان الحقل عبارة عن مصفوفة جنبًا إلى جنب مع $cond عامل التشغيل لإرجاع الحقل عند التقييم باستخدام $isArray: { "$project": { "people": 1, "myFieldArrayCount": { "$size": { "$cond": [ { "$isArray": "$myFieldArray" }, "$myFieldArray", [] ] } } }}
  12. نعم تستطيع بناء وسيط middleware لعمل ذلك ، ويمكنك بناء الدالة على هذا الشكل function Role(role) { return function(req, res, next) { if (role !== req.user.role) res.redirect(...); else next(); } } ويمكنك إستخدام هذا الكود للتأكد من أنك لا تقوم بعمل نسخ متعددة من نفس الدالة: function Role(role) { return Role[role] || (Role[role] = function(req, res, next) { if (role !== req.user.role) res.redirect(...); else next(); }) }
  13. تقوم دالة sort() بفرز عناصر المصفوفة في مكانها وإرجاع المصفوفة التي تم فرزها. ترتيب الفرز الافتراضي تصاعدي ، مبني على تحويل العناصر إلى سلاسل ، ثم مقارنة تسلسل قيم وحدات رمز UTF-16. حيث أي عنصر في المصفوفة يتم تحويله الى نص ، على سبيل المثال إذا كان العنصر رقم فيتم تحويله الى سلسلة نصية string ومن ثم يتم مقارنة السلاسل النصية وفقاً لقيمها في نظام UTF-16 . هذه هي الحالة الإفتراضية لدالة sort أي إذا لم تقم بتمرير دالة مقارنة إليها ، على سبيل المثال let arr = [4,30,100,1] arr.sort() // [1, 100, 30, 4] /* * تم ترتيب العناصر على أنها سلاسل نصية ووفقاً لقيمها في نظام * UTF-16 */ أما إذا قمت بتمرير دالة مقارنة إليها فيتم ترتيب العناصر بناءً على دالة المقارنة ولايتم الترتيب الافتراضي بتحويل العناصر الى سلاسل نصية string ، كما في الكود الخاص بك let numbers =[2, 14, 1, 2, 5]; /* دالة المقارنة تقوم بمقارنة عنصرين متجاورين حيث المتغير * x * هو المتغير الأول والمتغير * y * هو المتغير التالي المجاور للمتغير * x * ويتم إرجاع المتغير الأكبر */ number.sort((x,y) => y - x);
  14. إذا كان لديك دالة غير معلوم أو غير محدد عدد المُدخلات فيمكنك إستخدام رمز * لقبول عدد متغير من المُدخلات الى الدالة وايضاً يمكنك تمرير قائمة من المدخلات مرةً واحدة بإستخدام رمز * مجدداً وستحصل في داخل الدالة على قائمة من المُدخلات وهذا الكود يبين كيفية ذلك # تعريف دالة بعدد مُدخلات غير معلوم def func(*nums): # حلقة تكرار حول قائمة المتغيرات for num in nums: print(num) # تعريف قائمة من المُدخلات lst = [1,2,3,4,5] # تمرير قائمة المُدخلات الى الدالة func(*lst)
  15. Memoization هي طريقة تستخدم لتخزين نتائج استدعاءات الدوال functions السابقة لتسريع العمليات الحسابية المستقبلية. إذا تم إجراء استدعاءات دالة متكررة باستخدام نفس المُدخلات ، فيمكننا تخزين القيم السابقة بدلاً من تكرار العمليات الحسابية غير الضرورية. يمكنك التفكير به ك cache لنتائج الدوال ولهذا فائدة كبيرة جداً حيث ينتج عن هذا تسريع كبير في العمليات الحسابية. وهناك عدة حالات لإستخدام Memoization فعلى سبيل المثال لتسريع دالة المعامل كما هو مبين في الكود factorial_memo = {} def factorial(k): if k < 2: return 1 if k not in factorial_memo: factorial_memo[k] = k * factorial(k-1) return factorial_memo[k]
  16. هناك عدة طرق لإستدعاء ملف من المجلد الأب ، فيمكنك إضافة المسار الأب الى المسارات التي بايثون سيقوم بالبحث فيها بإستخدام دالة path كالآتي import sys sys.path.append("..") import helpers كما يمكنك إضافة المسار الأب أو أي مسار تريد إستيراد الوحدات modules منه كالآتي # إستدعاء دالة sys import sys # إضافة المسار الى الرقم 1 لأن 0 هو المسار الحالي sys.path.insert(1, '/path/to/application/app/folder') # إستيراد الوحدة من المسار المختلف import file
  17. وعليكم السلام احتمال أن المترجم تم حذفه لهذا يجب عليك إزالة تثبيت codeblock وإعادة تثبيته من جديد
  18. الطريقة الأولى والتي تعتبر أكثر كفائة بإستخدام NumPy strides كالآتي def strided_app(a, L, S ): nrows = ((a.size-L)//S)+1 n = a.strides[0] return np.lib.stride_tricks.as_strided(a, shape=(nrows,L), strides=(S*n,n)) والطريقة الأخرى عبر إستخدام broadcasting def broadcasting_app(a, L, S ): nrows = ((a.size-L)//S)+1 return a[S*np.arange(nrows)[:,None] + np.arange(L)]
  19. هذا تحذير بأنك تستخدم componentWillMount والتي سيتم إزالتها بعد التحديث الكبير major التالي. لذلك يجب عليك إستخدام componentDidMount بدلاً من componentWillMount ، وكحل مؤقت قم بإعادة تسمية UNSAFE_componentWillMount وهذا غير موصى به وايضاً يجب عليك تحديث المكونات التي تحتوي componentWillMount وهي Container, Text, TouchableOpacity, Transitioner, View وكما يوصى بإستخدام دالة البناء constructor عوضاً عن componentWillMount
  20. ليس هناك فرق بين نوع عمل الدالتين فهما الاثنتين يقومان بالطباعة على موجه الأوامر CMD. وايضاً هناك اختلاف في الإستخدام فعلى سبيل المثال طريقة إدراج متغير تختلف في الدالتين ففي دالة cout تكون كالآتي #include <iostream> using namespace std; int main () { // تعريف متغير int i = 4; // إدراج المتغير لطباعته cout << "The number is " << i; return 0; } اما في دالة printf #include <stdio.h> int main() { // تعريف المتغير int num = 4; // إدراج المتغير لطباعته printf("Hello world %d", num); return 0; } والإختلاف المهم هو أن دالة cout يتم إستخدامها في ++C ويتم إستيرادها من مكتبة iostream اما دالة printf فيتم إستخدامها في C ويتم إستيرادها من مكتبة stdio.h ويُفضل إستخدام iostream بدلاً من cstdio لأن iostream أكثر أمانًا من ناحية النوع : مع <iostream> نوع الكائن الذي يتم إدخاله / إخراجه معروف بشكل ثابت بواسطة المترجم. في المقابل ، <cstdio>يستخدم الحقول "٪" لاكتشاف الأنواع ديناميكيًا. أقل عرضة للخطأ: مع <iostream>، لا توجد رموز "٪" زائدة يجب أن تكون متسقة مع الكائنات الفعلية التي يتم إدخالها / إخراجها قابل للتوسيع:تسمح آلية <iostream> بأنواع جديدة معرّفة من قبل المستخدم لتكون قابلة للإدخال / إخراج دون كسر الكود الحالي. تخيل الفوضى إذا قام الجميع في نفس الوقت بإضافة حقول "٪" جديدة غير متوافقة إلى printf() و scanf()؟! قابل للوراثة:آلية <iostream> مبنية من فئات حقيقية مثل std::ostream و std::istream. على عكس <cstdio> .
  21. يمكنك تثبيت الحزمة mv لكي تقوم بنقل الملفات بكل سهولة npm i mv ويمكنك إستخدامها كالآتي // إستدعاء الحزمة var mv = require('mv'); /* قم بإستبدال * source/file * بالمسار الكامل للملف الذي تريد نقله * واستبدل * dest/file * بالمسار الكامل للوجهة الذي تريد نقل الملف إليها مع اسم الملف */ mv('source/file', 'dest/file', function(err) { // كتابة كود عند وقوع مشكلة هنا }); اما إذا أردت نقل الملفات بدون تثبيت حزم فيمكنك إستخدام هذا الكود var fs = require('fs'); // تحديد الملف المراد نقله var source = fs.createReadStream('source_file'); // تحديد الوجهة المراد النقل إليها var dest = fs.createWriteStream('destination_file'); // نسخ الى المسار الجديد source.pipe(dest); // فك الربط بعد الإنتهاء source.on('end',function() { fs.unlinkSync('source_file'); });
  22. في الواقع يمكن أن يكون سبب المشكلة متعلق باتصال الشبكة في جانب الخادم ، لهذا قم بفحص الشبكة إذا كان فيها مشاكل أو قم بتجربة vpn وهناك حلول أخرى للمشكلة بإختلاف أسبابها لهذا يمكنك تجربة هذه الحلول إضافة proxy الى npmrc. في مسار ~ كالآتي: proxy=http://localhost:8123 https-proxy=http://localhost:8123 حاول مرةً أخرى لأنه قد يكون سرعة الانترنت البطيئة سبب هذه المشكلة أو ابحث عن الحزم القديمة وقم بتحديثها npm outdated -g sudo npm i -g اسم_الحزمة_القديمة قم بترقية npm الى أحدث نسخة sudo npm i -g npm احذف ملف package.json احذف مسار cacache_ في npm./~ npm cache verify إذا مازلت تحصل على هذا الخطاء فقم بمسح npm's cache npm cache clean --force أو يمكنك تنفيذ هذا الأمر لتنظيف cache والتحديث npm cache clear --force && npm install --no-shrinkwrap --update-binary
  23. في الإصدار الأحدث من numpy 1.8.x ،لديك دالة numpy.meshgrid والتي توفر تنفيذًا أسرع بكثير: دالة numpy.meshgrid() كانت تستخدم لتكون ثنائية الأبعاد فقط ، والآن أصبحت قادرة على ND. في هذا المثال ، ثلاثي الأبعاد: In [115]: %timeit np.array(np.meshgrid([1, 2, 3], [4, 5], [6, 7])).T.reshape(-1,3) 10000 loops, best of 3: 74.1 µs per loop In [116]: np.array(np.meshgrid([1, 2, 3], [4, 5], [6, 7])).T.reshape(-1,3) Out[116]: array([[1, 4, 6], [1, 5, 6], [2, 4, 6], [2, 5, 6], [3, 4, 6], [3, 5, 6], [1, 4, 7], [1, 5, 7], [2, 4, 7], [2, 5, 7], [3, 4, 7], [3, 5, 7]])
  24. وعليكم السلام الأول ts وهذا يعني أنك تستخدم type script في مشروعك فقط اما tsx فهذا يعني أنك تستخدم type script و JSX الخاص ب React في مشروعك لا يوجد واحد أفضل من الآخر لان كلاً منهما عمل مختلف فقط وهو JSX في ملفات tsx فقط لأن المكتبات التي لا تحتوي على مكونات component لن تحتاج الى JSX في ملفاتها لهذا ستكون ts فقط نعم ستفيدك بشكلٍ كبير في أي مشاريع JavaScript وخاصةً المشاريع الكبيرة. لأنه في JavaScript لا يمكنك تحديد نوع المتغيرات اما في typescript فيمكنك ذلك وهذا هو الهدف الرئيسي من typescript لكي تتجنب الوقوع في المشاكل البرمجية bug وهذا سيوفر عليك الكثير من الوقت الذي كنت ستقضيه في إصلاح هذه المشاكل debugging
  25. لديك خيارين لحل هذه المشكلة الخيار الأول عبر إنشاء بيئة وهمية وتفعيلها ومن ثم التثبيت كالآتي virtualenv .venv source .venv/bin/activate pip install -r requirements.txt الخيار الثاني يمكنك التثبيت في مسار home كالآتي pip install --user -r requirements.txt توصيتي باستخدام الخيار الآمن أي الخيار الأول ، بحيث لا تتداخل متطلبات هذا المشروع مع متطلبات المشاريع الأخرى.
×
×
  • أضف...