-
المساهمات
526 -
تاريخ الانضمام
-
تاريخ آخر زيارة
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
أجوبة بواسطة عبدالله عبدالرحمن11
-
-
يمكنك إستيراد OrderedDict من وحدة collections وإستخدام دالة ()fromkeys كما هو موضح في الكود للحصول على Ordered set أو قائمة مرتبة بدون قيم مكررة
from collections import OrderedDict list(OrderedDict.fromkeys('abracadabra')) # ['a', 'b', 'r', 'c', 'd']
- 1
-
لقد تلقيت هذا الخطأ لأن المؤشر تنتهي مهلته على الخادم (بعد 10 دقائق من عدم النشاط).
من توثيق pymongo
اقتباسيمكن أن تنتهي مهلة المؤشرات في MongoDB على الخادم إذا كانت مفتوحة لفترة طويلة دون إجراء أي عمليات عليها. يمكن أن يؤدي هذا إلى ظهور استثناء CursorNotFound عند محاولة تكرار المؤشر.
عندما تستدعي دالة collection.find ، فإنه يستعلم مجموعة collection ويعيد المؤشر إلى المستندات.
للحصول على المستندات ، تقوم بتكرار المؤشر. عندما تقوم بالتكرار عللا المؤشر ، يقوم التعريف driver بالفعل بتقديم طلبات إلى خادم MongoDB لجلب المزيد من البيانات من الخادم.
يتم تحديد مقدار البيانات التي يتم إرجاعها في كل طلب بواسطة دالة ()batch_size .
من توثيق mongo بخصوص دالة ()batch_size
اقتباسيحد من عدد المستندات التي تم إرجاعها دفعة واحدة. تتطلب كل دفعة رحلة ذهابًا وإيابًا إلى الخادم. يمكن تعديله لتحسين الأداء والحد من نقل البيانات.
سيساعدك تعيين حجم الدفعة إلى قيمة أقل في أخطاء انتهاء المهلة ، ولكنه سيزيد من عدد المرات التي ستتمكن فيها من الوصول إلى خادم MongoDB للحصول على جميع المستندات.
حجم الدفعة الافتراضي batch size :
اقتباسبالنسبة لمعظم الاستعلامات ، تقوم الدفعة الأولى بإرجاع 101 مستند أو مستندات كافية فقط لتتجاوز 1 ميغا بايت. لن يتجاوز حجم الدفعة الحد الأقصى لحجم مستند BSON (16 ميجابايت).
لا يوجد حجم دفعة قياسي "صحيح".
لهذا يجب عليك الاختبار بقيم مختلفة ومعرفة القيمة المناسبة لحالة الاستخدام الخاصة بك ، أي عدد المستندات التي يمكنك معالجتها في إطار 10 دقائق.
سيكون الملاذ الأخير هو تعيين no_cursor_timeout=True.
لكن عليك التأكد من إغلاق المؤشر بعد الانتهاء من معالجة البيانات.
كيفية تجنبها بدون try/except :
cursor = collection.find( {"x": 1}, no_cursor_timeout=True ) for doc in cursor: # do something with doc cursor.close()
-
يمكنك إصلاح هذه المشكلة عن طريق حذف ملف mongodb-27017.sock.
ثم قم بتشغيل الخدمة بعد حذف هذا الملف ، والتي ستعمل بشكل جيد.
ومُخرج الأمرls - lat /tmp/mongodb-27017.sock
الآن يكون مثل هذا
srwx------ 1 mongodb nogroup 0 Apr 23 06:24 /tmp/mongodb-27017.sock
وهناك حل آخر للمشكلة عبر تغيير صلاحيات ملف sock. الى المستخدم الحالي كالآتي
sudo chown `whoami` /tmp/mongodb-27017.sock
-
يمكنك إستخدام prefix عند تنفيذ أمر التثبيت من NPM كما في المثال
npm install react --prefix ./vendor/node_modules
حيث سيتم تثبيت react في هذا المسار
./vendor/node_modules
وايضاً يمكنك إضافة متغير البيئة NODE_PATH لإضافة المسار الجديد كما في المثال
export NODE_PATH='yourdir'/node_modules
-
يمكنك إنشاء دالة بسيطة لإيجاد النص المكرر في نص معين بكل سهولة بدون الحاجة الى التعابير الإعتيادية regular expression أو إستيراد دالة خارجية ، وهذا كود الدالة ، حيث ستحصل على فهرس أماكن الكلمة الذي تبحث عنها
def find_all(a_str, sub): start = 0 while True: start = a_str.find(sub, start) if start == -1: return yield start start += len(sub) list(find_all("hello, world! Hi! hello!", "hello")) # [0, 18]
أويمكنك استخدام دالة finditer من وحدة re لإيجاد النص المكرر
import re [m.start() for m in re.finditer('test', 'test test test test')]
- 1
-
هناك عدة طرق لربط السلاسل النصية string مع الأرقام int
في الإصدارات القديمة من بايثون 2 يمكنك إستخدام الرمزين `` backsticks كما في المثال
string = 'string' for i in range(11): string +=`i` print string
ولكن هذه الطريقة تم إزالتها من إصدرارات بايثون الحديثة ومن بايثون 3 ولهذا يجب عليك إستخدام الدالة ()str بدلاً من الطريقة القديمة كما في المثال
string = 'string' for i in range(11): string +=str(i) print string
أو كما في الكود الخاص بك ، يمكنك إضافة دالة ()str كالآتي
age= 18 print("I have " + str(age) + " years old")
-
سنقوم بشرح سلوك اثنين من العوامل المنطقية and و or. وفقاً للتوثيق الرسمي لبايثون
العامل المنطقي and سيقوم بإرجاع القيمة الخاطئة الأولى إذا وُجدت ، وإلا سيقوم بإرجاع القيمة الآخيرة في التعبير expression
العامل المنطقي or سيقوم بإرجاع القيمة الصائبة الأولى إذا وُجدت ، وإلا سيقوم بإرجاع القيمة الآخيرة في التعبير expression
العامل الوحيد الذي يقوم بإرجاع قيمة منطقية بغض النظر عن قيم معاملاته هو العامل المنطقي not
-
تستخدم with للتعامل مع الموارد مثل الوصول الى الملفات وجعل الكود قابل للقراءة بشكل أفضل ، فعلى سبيل إذا أردت فتح ملف وتعديله بالطريقة التقليدية
file = open('file_path', 'w') try: file.write('hello world') finally: file.close()
أما إذا إستخدمت with مع as ومعناها "ك" أي فتح ملف معين ك file (اسم متغير) كما في المثال التوضيحي
with open('file_path', 'w') as file: file.write('hello world !')
فكما ترى في المثال الأول قمنا بإستدعاء ()close بينما في المثال الثاني لم نقم بذلك لأن with ستقوم بإغلاق الموارد تلقائياً
-
نعم انه من الممكن تعطيل SSR كما في التوثيق الرسمي
import dynamic from 'next/dynamic' const DynamicComponentWithNoSSR = dynamic( () => import('../components/hello3'), { ssr: false }// تعطيل SSR في الصفحة الرئيسية ) function Home() { return ( <div> <Header /> <DynamicComponentWithNoSSR /> <p> الصفحة الرئيسسة </p> </div> ) } export default Home
لكن هذا ليس ما تم تصميمه من أجله وستجد صعوبة في الاحتفاظ به كتطبيق صفحة واحدة SPA.
توجيه Next routing والتكوينات المضمنة الأخرى مخصصة خصيصًا لـ SSR إنشاء موقع ثابت.
create-react-app وأشياء مثل React Router تم تصميمها خصيصًا لـ SPA (على الرغم من أنها تتجه نحو SSR بشكلٍ أفضل).
لذلك قم بإختيار الأداة المناسبة للعمل ، فإذا كنت تريد تطبيق الصفحة الواحدة SPA فعليك إستخدام create-react-app
اما إذا أردت SSR فعليك إستخدام Nextjs ، اما إذا أردت SSG توليد الصفحات الثابتة بإستخدام React فعليك إستخدام Next أو Gatsby
-
يستخدم Next.js المكون App لتهيئة الصفحات. يمكنك إبطاله والتحكم في تهيئة الصفحة.
على الرغم من أن هذا المثال التوضيحي خاص بـ next.js ، إلا أنه يجب أن يعمل مع nextjs-starter.
قم بتثبيت next-redux-wrapper:
npm install --save next-redux-wrapper
أضف ملف _app.js إلى مسار pages/. :
// pages/_app.js import React from "react"; import {createStore} from "redux"; import {Provider} from "react-redux"; import App, {Container} from "next/app"; import withRedux from "next-redux-wrapper"; const reducer = (state = {foo: ''}, action) => { switch (action.type) { case 'FOO': return {...state, foo: action.payload}; default: return state } }; const makeStore = (initialState, options) => { return createStore(reducer, initialState); }; class MyApp extends App { static async getInitialProps({Component, ctx}) { /* * يمكننا عمل * dispatch * من هنا */ ctx.store.dispatch({type: 'FOO', payload: 'foo'}); const pageProps = Component.getInitialProps ? await Component.getInitialProps(ctx) : {}; return {pageProps}; } render() { const {Component, pageProps, store} = this.props; return ( <Container> <Provider store={store}> <Component {...pageProps} /> </Provider> </Container> ); } } export default withRedux(makeStore)(MyApp);
وبعد ذلك ، يمكن توصيل مكونات الصفحة الفعلية ببساطة: هذا العرض التوضيحي حول كيفية اتصال index.js بالصفحات.
import Link from "next/link"; import React from "react"; import { Container, Row, Col, Button, Jumbotron, ListGroup, ListGroupItem } from "reactstrap"; import Page from "../components/page"; import Layout from "../components/layout"; import { connect } from "react-redux"; class Default extends Page { static getInitialProps({ store, isServer, pathname, query }) { store.dispatch({ type: "FOO", payload: "foo" }); // المكون سيتمكن من قراءة حالة المخزن عند تصييره return { custom: "custom" }; // يمكننا تمرير بعض الخيارات المُخصصة من هنا } render() { return ( <Layout>content...</Layout> ); } } export default connect()(Default);
راجع التوثيق الرسمي للحصول على مزيد من المعلومات: next-redux-wrapper
-
يمكنك تعريف حقل _id يدويًا أثناء مرحلة المخطط Schema ، مثل:
const DocumentSchema = new Schema({ _id: String // أو رقم أو دالة زيادة تدريجياً ... })
لتجاوز _idحقل أو تعريفه يدويًا في المخطط ، استخدم هذا المثال:
/** * extends Document * هو عبارة عن * Mongoose Document * من * 'mongoose' */ @Schema() export class Key extends Document { @Prop() _id: string; @Prop({ required: true }) secret: string; }
-
ستحتاج إلى إنشاء خادم مخصص ، ومع ذلك ، لا يمكنك النشر في vercel ، وستحصل على تطبيق nodejs عادي. يمكنك استخدام موفري السحابة cloud providers للتعامل مع المقابس sockets نيابة عنك ، أو مثلما انت قلت ، يمكنك تقسيم تطبيقك إلى تطبيق next.js عادي ونشر تطبيق المقبس socket الخاص بك بشكل منفصل.
مثال لخادم مخصص من التوثيق الرسمي
// server.js const { createServer } = require('http') const { parse } = require('url') const next = require('next') const dev = process.env.NODE_ENV !== 'production' const app = next({ dev }) const handle = app.getRequestHandler() app.prepare().then(() => { createServer((req, res) => { /* تأكد من تمرير true كمُدخل ثاني الى parse(req.url, true) هذا يُخبر الدالة لقراءة جزء ال query من URL */ const parsedUrl = parse(req.url, true) const { pathname, query } = parsedUrl if (pathname === '/a') { app.render(req, res, '/a', query) } else if (pathname === '/b') { app.render(req, res, '/b', query) } else { handle(req, res, parsedUrl) } }).listen(3000, (err) => { if (err) throw err console.log('> Ready on http://localhost:3000') }) })
-
في بايثون الإصدار 2 هذا ليس مضمونا كما أنه من الممكن ل True و False أن يعاد تعيينهما ومع ذلك ، حتى في حالة حدوث ذلك ، لا يزال يتم إرجاع الصحيح المنطقي والخطأ منطقي بشكل صحيح لإجراء مقارنات.
في بايثون 3 ، True و False هما كلمتان محجوزتان، وسيكونا دائما يساوين 1 و 0.
الكائن False من نوع bool هو صنف فرعي من int:
object | int | bool
هذا هو السبب الوحيد الذي يجعل ['hello', 'world'][False] في مثالك يعمل.
لذلك يتم اعتبار القيم المنطقية كأعداد صحيحة int في بايثون 2 و 3.
- 2
-
دالة التنظيف clean هي دالة تقوم بوضعها في إرجاع دالة useEffect لكي تقوم بإزالة بيانات سابقة أو أحداث سابقة كما في هذا المثال
useEffect(() => { API.subscribe() return function cleanup() { API.unsubscribe() } },[])
وهذا مثال آخر يوضح ذلك
const Loading = () => { const [loadingStatus, setLoadingStatus] = useState("."); useEffect(() => {// إنشاء فترة وحفظ رقمها const intervalId = setInterval(() => { setLoadingStatus(ls => ls + "."); }, 1000); return () => clearInterval(intervalId);// إزالة الفترة التي أنشئناها من خلال دالة التنظيف }, []); return <p>{`Loading ${loadingStatus}`}</p>; };
-
يمكنك تفحص إذا كان كائن الطلب موجود فإذن انت في جانب الخادم server-side اما إذا لم يكن موجود فانت في جانب العميل client-side كما هو موضح في الكود
async getInitialProps (appContext) { if (appContext.ctx.req) // server? { // جانب الخادم } else { // جانب العميل } }
-
يجب عليك وضع dynamic خارج المكون ، وسيعمل بشكلٍ جيد
const getDynamicComponent = (c) => dynamic(() => import(`../components/${c}`), { ssr: false, loading: () => <p>Loading...</p>, }); const Test = () => { const router = useRouter(); const { component } = router.query; const DynamicComponent = getDynamicComponent(component); return <DynamicComponent /> }
-
استخدم أداة تحميل Next.js CSS المدمجة بدلاً من أداة التحميل @zeit/next-sass.
- استبدل حزمة @zeit/next-sass بـ sass.
- أزل next.config.js. أو لا تغير تحميل CSS فيه.
- انقل CSS العام global كما هو مقترح في رسالة الخطأ.
/pages/_app.js
import '../global-styles/main.scss' export default function MyApp({ Component, pageProps }) { return <Component {...pageProps} /> }
لم يكن لديك هذا الخطأ من قبل لأن Next.js أسقط دعم CSS العام global في ملفات غير /pages/_app.js فقط في الإصدارات الأخيرة
لإضافة التنسيقات إلى مكون أو صفحة معينة فقط ، يمكنك استخدام الدعم المدمج لوحدات CSS . التوثيق الرسمي لدعم CSS المُدمج
على سبيل المثال ، إذا كان لديك مكون ، Button.js فيمكنك إنشاء ملف Sass button.module.scss وإدراجه في المكون.
-
كما يوضح الخطأ ، سيتعين عليك استخدام عنوان URL مطلق absolute من أجل fetch الذي تقوم بإستخدامه.
يبدوا أن المشكلة له علاقة بالبيئات المختلفة (العميل والخادم) التي يمكن تنفيذ التعليمات البرمجية الخاصة بك عليها. عناوين URL النسبية relative ليست واضحة وموثوقة بدرجة كافية في هذه الحالة.
تتمثل إحدى طرق حل هذه المشكلة في كتابة عنوان الخادم يدوياً في طلب fetch .
وطريقة أخرى عبر إعداد وحدة config والتي تتفاعل مع بيئتك:
/config/index.js
const dev = process.env.NODE_ENV !== 'production'; export const server = dev ? 'http://localhost:3000' : 'https://your_deployment.server.com';
وفي الكود الخاص بك
import { server } from '../config'; // ... Products.getInitialProps = async function() { const res = await fetch(`${server}/api/psts`) const data = await res.json() return { products: data } }
-
للتحويل من بايثون datatime الى datetime64 و Timestamp
>>> dt = datetime.datetime(year=2017, month=10, day=24, hour=4, minute=3, second=10, microsecond=7199) >>> np.datetime64(dt) numpy.datetime64('2017-10-24T04:03:10.007199') >>> pd.Timestamp(dt) # أو pd.to_datetime(dt) Timestamp('2017-10-24 04:03:10.007199')
للتحويل من numpy datetime64 الى datetime و Timestamp
>>> dt64 = np.datetime64('2017-10-24 05:34:20.123456') >>> unix_epoch = np.datetime64(0, 's') >>> one_second = np.timedelta64(1, 's') >>> seconds_since_epoch = (dt64 - unix_epoch) / one_second >>> seconds_since_epoch 1508823260.123456 >>> datetime.datetime.utcfromtimestamp(seconds_since_epoch) >>> datetime.datetime(2017, 10, 24, 5, 34, 20, 123456)
تحويل الى Timestamp
>>> pd.Timestamp(dt64) Timestamp('2017-10-24 05:34:20.123456')
تحويل من Timestamp الى datetime و datetime64
>>> ts = pd.Timestamp('2017-10-24 04:24:33.654321') >>> ts.to_pydatetime() # بايثون Datetime datetime.datetime(2017, 10, 24, 4, 24, 33, 654321) >>> ts.to_datetime64() numpy.datetime64('2017-10-24T04:24:33.654321000')
- 1
-
بتاريخ 4 ساعات قال علي العبسي:
الانتنه شغال تمام عند اضافة الماك ادرس يدويا اضيف العدد الذي بدي اياه وكل شي تمام الصورة رقم 1يقول ان هناك خطاء
الخطأ الذي يظهر لا يدل على أن هناك خطأ في الكود
ولكن الخطأ يقوم أنه حدث خطأ ما عند 172.16.0.210
-
يمكنك إستخدام دالة np.where لإيجاد الفهرس مثلما في الكود
x = np.array([[0, 1], # 0 [2, 3], # 1 [4, 5], # 2 [6, 7], # 3 [8, 9]]) # 4 # البحث عن فهرس القيم الذي تساوي 1 np.where(x == 1)
- 1
-
يمكنك إستخدام دالة lambda كما في الكود
import numpy as np x = np.array([1, 2, 3, 4, 5]) f = lambda x: x ** 2 squares = f(x)
أو إستخدام هذا الكود
import numpy as np x = np.array([1, 2, 3, 4, 5]) squarer = lambda t: t ** 2 vfunc = np.vectorize(squarer) vfunc(x)
- 1
-
حل سريع لذلك هو عبر إستخدام دالة ()str كالآتي
ObjectId = str(ObjectId('5f4351948e86c20b1d1c0d3c'))
اما إذا كنت تستخدم Flask فيمكنك إستخدام دالة jsonify
@app.route('/') def home(): docs = [] for doc in db.person.find(): doc.pop('_id') docs.append(doc) return jsonify(docs)
أو يمكنك التحويل من BSOM الى JSON كالآتي
from bson import json_util import json @app.route('/') def index(): for _ in "collection_name".find(): return json.dumps(i, indent=4, default=json_util.default)
-
npm prune
سيقوم بإزالة المكتبات الغير مدرجة في package.json وليس غير المُستخدمة
فإذا أردت حذف المكتبات الغير المستخدمة فيمكنك تثبيت حزمة depcheck فهي تقوم بتحليل المكتبات أو التبعيات dependecies وكيف يتم إستخدام كل واحدة منهن وأيٌ منهن غير ضروري و أيٌ منهن مفقود في package.json
يمكنك تثبيتها هكذا
npm install -g depcheck
أو هكذا
npx depcheck
ويمكنك إستخدامها كالآتي
depcheck [directory] [arguments]
حيث تستبدل [directory] بجذر مسار المشروع والذي يكون فيه الملف package.json فإذا لم تقم بتحديد المسار فسيتم تحديد المسار الحالي بشكل افتراضي
و [arguments] هي عبارة عن المُدخلات وهي اختيارية
كيف أقوم بإيقاف النسخ قيد التشغيل في node.js ضمن نظام التشغيل ويندوز
في علوم الحاسوب
نشر
في نظام وندوز
يمكنك تنفيذ الأمر التالي لإنهاء جميع عمليات node التي تكون قيد التشغيل
اما إذا بقي هناك بعض العمليات قيد التشغيل فيمكنك إضافة f لإجبار الإغلاق كالآتي
taskkill /f /im node.exe
في نظام ماك
العملية مشابهة للسابقة حيث يمكنك إنهاء جميع عمليات Node التي تكون قيد التشغيل عبر تنفيذ هذا الأمر
أو يمكنك إستخدام lsof للعثور على PID الخاص بالعمليات التي تستمع الى منفذ معين كما في المثال
والآن يمكنك إنهاء العملية 1073 الخاصة ب node كالآتي
اما إذا العملية رفضت الإغلاق فيمكنك إضافة 9- لفرض الإغلاق
في نظام لينكس
وهنا ايضاً العملية مشابهة للسابقة ، لإنهاء جميع عمليات Node
killall node
أو يمكنك إستخدام netstat للبحث عن العملية التي تستمع الى منفذ معين
$ netstat -nlp | grep :8080 tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1073/node
ومن ثم إنهائها كالآتي
$ kill 1073
اما إذا رفضت الإغلاق ، فيمكنك فرض الإغلاق هكذا
$ kill -9 1073