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

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

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

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

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

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

  1. يقوم المتصفح بإظهار عناصر HTML بالترتيب كما هي مكتوبة في الكود ويكون مكان position العناصر الإفتراضي ثابت static خاصية position بمعنى مكان تقوم بتحديد نوع مكان العنصر والقيمة الإفتراضية تكون static بمعنى ثابت قيم الخاصية position هي static ثابت وهي القيمة الافتراضية وتظهر العناصر بالترتيب وفقاً لمجرى أو مسار المستند relative نسبي ويكون مكان العنصر نسبي بالنسبة الى مكانه الأصلي ، فإذا قمنا بكتابة left:20px فسيتم إضافة 20px الى اليسار من مكانه الأصلي fixed ثابت بالنسبة لنافذة المتصفح absolute مطلق ويكون ثابت في مكانه الأصلي والعناصر الأخرى تتجاهل أنه في هذا المكان فتكون خلفه sticky ملتصق ويكون مكان العنصر بناءً على تحرك التمرير scroll
  2. يمكنك تثبيت مكتبة cchardet السريعة في تحديد الترميز ، يمكنك تثبيتها pip install cchardet وإستخدامها كالآتي """قراءة الملفات النصية الغير معروف ترميزها""" from pathlib import Path import sys import cchardet as chardet def read_confidently(filename): """Detect encoding and return decoded text, encoding, and confidence level.""" """كشف الترميز وإرجاع النص والترميز""" filepath = Path(filename) # يجب علينا قراءة الملف بشكل ثنائي لأننا لانعرف ترميزه بعد blob = filepath.read_bytes() detection = chardet.detect(blob) encoding = detection["encoding"] confidence = detection["confidence"] text = blob.decode(encoding) return text, encoding, confidence def main(): """Command runner.""" filename = sys.argv[1] # نفترض أن المُدخل الأول هو اسم الملف text, encoding, confidence = read_confidently(filename) print(text) print(f"Encoding was detected as {encoding}.") if confidence < 0.6: print(f"Warning: confidence was only {confidence}!") print("Please double-check output for accuracy.") if __name__ == "__main__": main()
  3. يمكنك تثبيت حزمة node-php وإستخدامها كالآتي var php = require('nodephp'); php.nodephp({ fcgi: { port: '/tmp/php-fpm.sock', host: null, }, server: { port: 9998 } }); وإذا أردت التعامل مع الملفات الثابتة static files var php = require('nodephp'); php.nodephp({ fcgi: { port: 9001, host: 'localhost', }, server: { port: 9111 } }, { "\.(js|css|png|jpg|jpeg|gif|txt|less)$": php.NODEPHP_TYPE_STATIC, "\.php$": php.NODEPHP_TYPE_FCGI, "index": "index.php" }); ويمكنك ايضاً إستخدام حزمة أخرى تسمى sphp npm install sphp وفي تطبيق node var express = require('express'); var sphp = require('sphp'); var app = express(); var server = app.listen(8080); app.use(sphp.express('public/')); app.use(express.static('public/'));
  4. قم بتشغيل هذا الأمر لحل المشكلة npm config set strict-ssl false أو يجب عليك ترقية npm // إيقاف الشهادة مؤقتاً من أجل عمل ترقية npm config set ca "" // sudo يجب التحديث بصلاحية مسؤول أوبد الأمر ب sudo npm install npm -g // إلغاء تغيير // config // السابق npm config delete ca // لأنظمة Ubuntu/Debian-sid/Mint // حزمة node تم إعادة تسميتها الى nodejs // و npm لن يجده ، ولإصلاح المشكلة قم بالتالي sudo ln -s /usr/bin/nodejs /usr/bin/node اما إذا كنت تستخدم MacOS فقم بإزالة npm brew uninstall npm وتثبيته من جديد brew install npm وربما ستحتاج لتفيذ هذا الأمر ايضاً brew update
  5. أولاً يجب عليك إضافة متغير بيئة environment variable بإسم Node_ENV وتعيين قيمته بناءً على البيئة الذي يتم تشغيله منها فإذا كان في بيئة التطوير فقم بتعيينه الى development اما إذا كان في بيئة النشر فقم بتعيينه الى production أو يمكنك إضافة هذا السكريبت لكي يتم تشغيل الخادم وإضافة متغير البيئة { ... "scripts": { "start": "NODE_ENV=production node ./app" } ... } ومن ثم في الكود يمكنك اختيار متغيرات البيئة بناءً على البيئة الذي يتم تشغيله منها كالآتي if (process.env.NODE_ENV ==='development'){ // تعيين المتغيرات الخاصة ببئة التطوير }else if (process.env.NODE_ENV ==='production'){ // تعيين المتغيرات الخاصة ببئة النشر }
  6. قم بتنفيذ npm cache clean --force قم بإزالة التثبيت من لوحة التحكم من إزالة البرامج والميزات قم بإعادة تشغيل الجهاز أو من مدير المهام قم بإنهاء جميع المهام المتعلقة بnode ابحث عن هذه المجلدات وقم بحذفها إذا مازالت موجودة (المسارات تختلف بحسب نسخة النظام 64بت أو 32بت) C:\Program Files (x86)\Nodejs C:\Program Files\Nodejs C:\Users\{User}\AppData\Roaming\npm (أو %appdata%\npm) C:\Users\{User}\AppData\Roaming\npm-cache (أو %appdata%\npm-cache) C:\Users\{User}\.npmrc (أو ربما بدون نقط مسبوقة) C:\Users\{User}\AppData\Local\Temp\npm-* تفحص متغيرات البيئة %PATH% لكي تتأكد من عدم وجود أي مراجع الى Nodejs أو npm إذا لم يتم إزالة تثبيه ، فقم بكتابة where node في موجه الأوامر واذهب الى المسار المكتوب وقم بحذف المجلد يدوياً إعادة تشغيل الجهاز ، ومن ثم يمكنك تثبيته بشكلٍ طبيعي
  7. إذا كان لديك رمز @ أو غيرها من الرموز فيجب عليك ترميزها أي إستبدالها بالأرقام الخاص بها ويمكنك تحويل كلمة السر من هنا ومن ثم إستبدال الرموز ووضع الأرقام الخاصة بها اما إذا كنت تستخدم MongoClient MongoClient = require('mongodb').MongoClient; let options = { useNewUrlParser: true, auth: { user: 'usr', password: 'p@sswrod' } }; MongoClient.connect(url, options, callback); وايضاً يمكنك إستخدام حزمة mongodb-uri كالآتي const mongoose = require('mongoose') const mongodbUri = require('mongodb-uri') let mongooseUri = mongodbUri.formatMongoose(config.mongo.uri) mongoose.connect(mongooseUri, config.mongo.options) وهذه هي الرموز الذي يجب عليك ترميزها : / ? # [ ] @
  8. يمكنك إستخدام التالي من موجه الأوامر mongo 127.0.0.1/db --eval "var c = db.collection.find(); while(c.hasNext()) {printjson(c.next())}" >> test.txt بإفتراض أن قاعدة البيانات لديك تسمى db وتعمل على المُضيف المحلي localhost ومجموعة تسمى collection ، هذا سيقوم بتصدير نتائج الإستعلام الى ملف test.txt إذا كان لديك script أطول وتريد تنفيذه فيمكنك إنشاء ملف script.js وإستخدام mongo 127.0.0.1/db script.js >> test.txt وهذه طريقة أخرى mongoexport --db products --collection clicks --query '{"createdInt":{$gte:20190101}, "clientId":"123", "country":"ES"}' --out clicks-2019.json
  9. الحل الأول : إذا قمت بتثبيت إصدار سابق من الصيغة، قد تواجه مشكلة ChecksumMisMatchError ولإصلاحه قم بحذف بأرشيف tgz. الذي تم تنزيله كالآتي brew untap mongodb/brew && brew tap mongodb/brew إعادة إتصال الصيغة brew install mongodb-community@4.4 الحل الثاني : إذا لم تقم بتثبيت أي إصدار سابق من الصيغة قم بتثبيت أدوات موجه أوامر Xcode و Homebrew من https://brew.sh/#install xcode-select --install عمل tab ل Mongodb ب Homebrew tab brew tap mongodb/brew تحقق من متطلبات التثبيت في موجه أوامر macOS brew tap | grep mongodb قم بتثبيت MongoDB brew install mongodb-community@4.4 وأخيراً قم بتشغيل MongoDB brew services start mongodb-community@4.4
  10. يمكنك عمل ذلك كالآتي from datetime import timedelta, date class DateIterable: def __init__(self, start_date, end_date): # تهيئة بداية ونهاية التواريخ self.start_date = start_date self.end_date = end_date self._present_day = start_date def __iter__(self): # إعادة الكائن # __iter__ return self def __next__(self): # مقارنة التاريخ الحاضر مع التاريخ الأخير # إذا كان التاريخ الحاضر أكبر من التاريخ الأخير فسيتوقف التكرار if self._present_day >= self.end_date: raise StopIteration today = self._present_day self._present_day += timedelta(days=1) return today if __name__ == '__main__': for day in DateIterable(date(2020, 1, 1), date(2020, 1, 6)): print(day) أو يمكنك إضافة هذا الكود في الكائن def __iter__(self): for x in self.iterable: yield x كما يلي class someClass: def __init__(self,list): self.list = list def __iter__(self): for x in self.list: yield x var = someClass([1,2,3,4,5]) for num in var: print(num)
  11. ENOSPC يعني أنه لايوجد مساحة على القرص يمكنك تنفيذ الأمر الآتي لحل المشكلة npm cache clear npm أو العملية التي تتحكم تقوم بمراقبة العديد من الملفات ، فتحديث max_user_watches سيقوم بحل المشكلة نهائياً، لنظام debian قم بتنفيذ هذا الأمر echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p اما إذا أردت تغيير الحد مؤقتاً sudo sysctl fs.inotify.max_user_watches=524288 sudo sysctl -p وهذا حل آخر ، بتنفيذ الأمر التالي npm dedupe
  12. يمكنك تجربة هذه الحلول لحل مشكلتك تحتاج يدوياً الى تثبيت الوحدات العالية المستوى، التي تحتوي على التبعيات الغير مستوفاة npm install findup-sync@0.1.2 أعد هيكلة package.json ضع كل الوحدات العالية المستوى في الأسفل قم بإعادة تشغيل هذا الأمر npm install المشكلة قد تكون بسبب فشل في تنزيل حزم npm لإنتهاء مهلة الوقت أو لأي سببٍ آخر ملاحظة : يمكنك تثبيت الحزم الذي فشلت يدوياً كما في npm install findup-sync@0.1.2 قبل تنفيذ npm install ، قم بتنفيذ الخطوات التالية الذي قد تساعد قم بحذف node_modules بإستخدام /rm -rf node_modules قم بتشغيل npm cache clean في بعض الأحيان يجب عليك حذف node_modules لأنه عندما يفشل تثبيت حزمة متداخلة فإن الأمر npm install لن يكتشف التبعيات المتداخلة المفقودة وهذا حل آخر ، قم بتفيذ هذه الأوامر $ rm -rf node_modules/ $ sudo npm update -g npm $ npm install
  13. يمكنك إستخدام المكون المُدمج Head لإضافة عناصر الى العنصر head في الصفحة كالآتي import Head from 'next/head' function IndexPage() { return ( <div> <Head> <title>عنوان الصفحة</title> <meta name="viewport" content="initial-scale=1.0, width=device-width" /> </Head> <p>فقرة</p> </div> ) } export default IndexPage
  14. عمل الدالتين دالة getStaticProps تستخدم لجلب البيانات في وقت البناء ودالة getServerSideProps تستخدم لجلب البيانات عند كل طلب متى ولماذا يجب عليك إستعمال أحد الدالتين تستخدم دالة getServerSideProps عندما تريد تجهيز التطبيق عند كل طلب بالبيانات الذي تم جلبها ، و يتم إستدعائها في كل مرة تريد تحميل الصفحة ولكن سيتم تنفيذ الكود في السيرفر فقط وهذا يكون أكثر سرعة وحماية اما دالة getStaticProps فتستخدمها عندما يمكن جلب البيانات مرة واحدة عند وقت البناء ويمكن إستخدامها عند كل طلب بدون تحديث هذه البيانات
  15. لم يتم تكرار العملية فدالة ()getStaticPaths ودالة ()getStaticProps مختلفتين ولكلً منهما عمل مختلف فدالة ()getStaticProps في التوليد الثابت Static Generation تقوم بجلب البيانات في وقت البناء build time ودالة ()getStaticPaths في التوليد الثابت Static Generation تقوم بتحديد المسارات routes الديناميكية للصفحات المُعدة مسبقاً بناءً على البيانات فعلى سبيل المثال عندما تستخدم صفحة ديناميكية ، والمسار يعتمد على بيانات خارجية ، في هذه الحالة نستطيع إستخدام دالة getStaticPaths لتحديد المسارات الديناميكية التي سيتم إضافتها للصفحة كما هو موضح في الكود الآتي export async const getStaticProps = ({ params }) => { const res = await fetch(`https://jsonplaceholder.typicode.com/posts/${params.id}`); const post = await res.json(); return { props: { post }, }; } export async function getStaticPaths() { const res = await fetch("https://jsonplaceholder.typicode.com/posts"); const posts = await res.json(); const paths = posts.map(({ id }) => ({ params: { id: `${id}` } })); return { paths, fallback: false, }; }
  16. يمكنك إستخدام هذه الطريقة الذي في المثال لإضافة عمود جديد بناءً على قيم عمود موجود import pandas as pd # إنشاء ال # DataFrame df = pd.DataFrame({'Date':['10/2/2011', '11/2/2011', '12/2/2011','13/2/2011'],'Event'['Music','Poetry','Theatre', 'Comedy'],'Cost':[10000, 5000, 15000, 2000]}) # إنشاء عمود جديدأسعار التخفيضات بعد تطبيق تخفيض 10% على الأسعار الموجودة # إنشاء عمود جديد df['Discounted_Price'] = df['Cost'] - (0.1 * df['Cost']) # طباعة ال # DataFrame # إضافة العمود الجديد print(df)
  17. هناك العديد من الطرق لعمل ذلك def cartesian_product(*arrays): la = len(arrays) dtype = numpy.result_type(*arrays) arr = numpy.empty([len(a) for a in arrays] + [la], dtype=dtype) for i, a in enumerate(numpy.ix_(*arrays)): arr[...,i] = a return arr.reshape(-1, la) أو def cartesian_product_transpose(*arrays): broadcastable = numpy.ix_(*arrays) broadcasted = numpy.broadcast_arrays(*broadcastable) rows, cols = numpy.prod(broadcasted[0].shape), len(broadcasted) dtype = numpy.result_type(*arrays) out = numpy.empty(rows * cols, dtype=dtype) start, end = 0, rows for a in broadcasted: out[start:end] = a.reshape(-1) start, end = end, end + rows return out.reshape(cols, rows).T أو def cartesian_product_simple_transpose(arrays): la = len(arrays) dtype = numpy.result_type(*arrays) arr = numpy.empty([la] + [len(a) for a in arrays], dtype=dtype) for i, a in enumerate(numpy.ix_(*arrays)): arr[i, ...] = a return arr.reshape(la, -1).T أو من أكتوبر 2017 في NumPy أصبح لديها دالة np.stack عامة والتي تأخذ محور كمُدخل، بإستخدامها نستطيع الحصول على ناتج ديكارتي عام بإستخدام تقنية dstack و meshgrid كالآتي import numpy as np def cartesian_product(*arrays): ndim = len(arrays) return np.stack(np.meshgrid(*arrays), axis=-1).reshape(-1, ndim)
  18. السبب أن هناك مشكلة وعند إستخدام NumPy إصدار 1.19.4 ستظهر لك هذه المشكلة والحل كان عبر إزالة تثبيت هذه النسخة وتثبيت النسخة 1.19.3 pip install numpy==1.19.3 ولكن من الخامس يناير 2021 نسخة NumPy إصدار 1.19.5 قد تم نشرها ويبدو أنها قد حلت هذه المشكلة ويمكنك تثبيت آخر نسخة
  19. تم تصميم JavaScript لكي نستطيع إضافة التفاعلية في صفحات الويب ولم يكن هناك حاجة لإستيراد وتصدير أكواد ولكن مع تطور تطبيقات JavaScript وأصبحت الأكواد كثيرة جداً ومن الصعب تطوير تطبيقات JavaScript ذات الحجم الكبير في ملف واحد، وايضاً ظهور Nodejs لتشغيل JavaScript خارج المتصفح ظهرت الحاجة لتصدير وإستيراد أكواد JavaScript فتم إنشاء CommonJS في Nodejs لتصدير وإستيراد الأكواد عبر module.exports و ()require اما التصدير عبر export والإستيراد عبر import فهو جديد في إصدار ES6 وnodejs كان لايدعمه سابقاً أما الآن فيدعم هذه الطريقة ، ولكن لإستخدام لديك طريقتين لإستخدام طريقة ES6 عبر تسمية ملفات الأكواد الذي تصدر وتستورد الأكواد بصيغة mjs. بدلاً من js. إذا لم تُرد عمل السابق فيمكنك إضافة هذا العلم في package.json --input-type=module
  20. في بايثون الكلمة المحجوزة with تستخدم عند التعامل مع الموارد غير المُدارة مثل file streams إنه يسمح لك بالتأكد من أن المَورد تم تنظيفه عندما يكون الكود الذي استخدمه انتهى من عمله حتى إذا ظهرت إستثناءات exceptions فيمكنك إستخدام try/finally لمعالجة الإستثناء وايضاً with تتأكد من أن عملية file stream لا تقوم بحظر العمليات الأخرى إذا ظهر إستثناء إذا أردت فتح وقراءة ملف ستستخدم الكود التالي file = open('file-path', 'w') try: file.write('Lorem ipsum') finally: file.close() لكن مع with ستحصل على كود أكثر نظافة كالآتي with open('file-path', 'w') as file: file.write('Lorem ipsum') كما في الكود السابق ، مع with تم تبسيط الكود الى سطرين فقط يمكنك إستخدام with مع عمليات الطلب من قواعد البيانات ايضاً كما يلي def get_all_users(): with sqlite3.connect('db/users.db') as connection: cursor = connection.cursor() cursor.execute("SELECT * FROM users ORDER BY id desc") all_users = cursor.fetchall() return all_users
  21. يمكنك إستخدام __repr__ و __str__ كما في إجابة @عبود سمير اما إذا أردت إستخدم طريقة أسرع فيمكنك إستخدام دالة objprint والذي تقوم بطباعة محتوى أي صنف على شكل قابل للقراءة يمكنك تثبيت الحزمة pip install objprint واستخدامها لطباعة أي كائن كالمثال الآتي from objprint import objprint class Position: def __init__(self, x, y): self.x = x self.y = y class Player: def __init__(self): self.name = "Alice" self.age = 18 self.items = ["axe", "armor"] self.coins = {"gold": 1, "silver": 33, "bronze": 57} self.position = Position(3, 5) objprint(Player())
  22. من DataFrame الى مصفوفة NumPy في المثال الآتي نقوم بتحويل DataFrame الى مصفوفة NumPy import pandas as pd #تهيئة #DataFrame df = pd.DataFrame( [[21, 72, 67], [23, 78, 69], [32, 74, 56], [52, 54, 76]], columns=['a', 'b', 'c']) print('DataFrame\n----------\n', df) #التحويل arr = df.to_numpy() print('\nNumpy Array\n----------\n', arr) وللتحويل من DataFrame الى مصفوفة NumPy عندما يكون لدى DataFrame أنواع بيانات مختلفة import pandas as pd import numpy as np #تهيئة # dataframe df = pd.DataFrame( [[21, 72, 67.1], [23, 78, 69.5], [32, 74, 56.6], [52, 54, 76.2]], columns=['a', 'b', 'c']) print('DataFrame\n----------\n', df) print('\nDataFrame datatypes :\n', df.dtypes) #التحويل arr = df.to_numpy() print('\nNumpy Array\n----------\n', arr) print('\nNumpy Array Datatype :', arr.dtype)
  23. من أجل الإستفادة من قوة اللغتين ، المطورين يستخدمون مايسمى بروابط بايثون python bindings والذي يتيح لك إستدعاء مكتبات ++C/C من بايثون ولكن لماذا هناك الحاجة للقيام بذلك؟ كما نعلم لغة C لديها سرعة تنفيذ أسرع ، وللتغلب على قفل المسفر العالمي Global Interpreter Lock في بايثون ، فإن روابط بايثون مفيدة يوجد لدينا مكتبات كبيرة ومستقرة وتم إختبارها في ++C/C ، ويمكننا الإستفادة منها لإجراء اختبار واسع للأنظمة بإستخدام أدوات اختبار python لنرى كود C الذي نريد إستدعائه في بايثون #include <iostream> class Geek{ public: void myFunction(){ std::cout << "Hello World!!!" << std::endl; } }; int main() { // إنشاء كائن Geek t; // إستدعاء الدالة t.myFunction(); return 0; } وايضا يجب منح تصريحات cpp declarations ك "extern "C لان ctypes يستطيع التفاعل مع دوال C فقط extern "C" { Geek* Geek_new(){ return new Geek(); } void Geek_myFunction(Geek* geek){ geek -> myFunction(); } } الآن لنقم بترجمة compile الكود الى المكتبة المشتركة shared library g++ -c -fPIC geek.cpp -o geek.o g++ -shared -Wl, -soname,libkgeek.so -o libgeek.so geek.o وآخيراً كتابة كود بايثون # إستدعاء الوحدة from ctypes import cdll # تحميل المكتبة lib = cdll.LoadLibrary('./libgeek.so') # إنشاء كائن class Geek(object): # دالة البناء def __init__(self): # الصفة self.obj = lib.Geek_new() # تعريف الدالة def myFunction(self): lib.Geek_myFunction(self.obj) # إنشاء كائن f = Geek() # إستدعاء الدالة f.myFunction() والنتيجة كالآتي Hello World!!!
  24. يمكنك فعل ذلك كالآتي const app = next({ dev: process.env.NODE_ENV === 'development' }); app.prepare().then(() => { const server = express(); // إنشاء خادم اكسبرس server.get('/post/:id', (req, res) => { /* إنشاء كائن وإضافة params و query إليه */ const queryParams = Object.assign({}, req.params, req.query); /* نفترض أن المسار /pages/posts حيث يوجد كود الواجهة */ app.render(req, res, '/posts', queryParams); }); });
  25. يجب عليك تحريك الكود من ()componentWillMount الى ()componentDidMount كالآتي componentDidMount() { console.log('window.innerHeight', window.innerHeight); } في Next.js ، الدالة ()componentDidMount يتم تنفيذها فقط عند العميل client حيث window و APIs المتصفح تكون متاحة. على نفس المنوال دالة ()componentWillMount سيتم إزالته من React إصدار 17 ، لذلك من المحتمل أن يكون غير آمن للإستخدام في المستقبل القريب جداً
×
×
  • أضف...