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

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

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

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

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

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

  1. في نظام وندوز يمكنك تنفيذ الأمر التالي لإنهاء جميع عمليات node التي تكون قيد التشغيل taskkill /im node.exe اما إذا بقي هناك بعض العمليات قيد التشغيل فيمكنك إضافة f لإجبار الإغلاق كالآتي taskkill /f /im node.exe في نظام ماك العملية مشابهة للسابقة حيث يمكنك إنهاء جميع عمليات Node التي تكون قيد التشغيل عبر تنفيذ هذا الأمر killall node أو يمكنك إستخدام lsof للعثور على PID الخاص بالعمليات التي تستمع الى منفذ معين كما في المثال $ lsof -Pi :8080 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME node 1073 urname 22u IPv6 bunchanumbershere 0t0 TCP *:8080 (LISTEN) والآن يمكنك إنهاء العملية 1073 الخاصة ب node كالآتي $ kill 1073 اما إذا العملية رفضت الإغلاق فيمكنك إضافة 9- لفرض الإغلاق $ kill -9 1073 في نظام لينكس وهنا ايضاً العملية مشابهة للسابقة ، لإنهاء جميع عمليات 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
  2. يمكنك إستيراد OrderedDict من وحدة collections وإستخدام دالة ()fromkeys كما هو موضح في الكود للحصول على Ordered set أو قائمة مرتبة بدون قيم مكررة from collections import OrderedDict list(OrderedDict.fromkeys('abracadabra')) # ['a', 'b', 'r', 'c', 'd']
  3. لقد تلقيت هذا الخطأ لأن المؤشر تنتهي مهلته على الخادم (بعد 10 دقائق من عدم النشاط). من توثيق pymongo عندما تستدعي دالة collection.find ، فإنه يستعلم مجموعة collection ويعيد المؤشر إلى المستندات. للحصول على المستندات ، تقوم بتكرار المؤشر. عندما تقوم بالتكرار عللا المؤشر ، يقوم التعريف driver بالفعل بتقديم طلبات إلى خادم MongoDB لجلب المزيد من البيانات من الخادم. يتم تحديد مقدار البيانات التي يتم إرجاعها في كل طلب بواسطة دالة ()batch_size . من توثيق mongo بخصوص دالة ()batch_size سيساعدك تعيين حجم الدفعة إلى قيمة أقل في أخطاء انتهاء المهلة ، ولكنه سيزيد من عدد المرات التي ستتمكن فيها من الوصول إلى خادم MongoDB للحصول على جميع المستندات. حجم الدفعة الافتراضي batch size : لا يوجد حجم دفعة قياسي "صحيح". لهذا يجب عليك الاختبار بقيم مختلفة ومعرفة القيمة المناسبة لحالة الاستخدام الخاصة بك ، أي عدد المستندات التي يمكنك معالجتها في إطار 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()
  4. يمكنك إصلاح هذه المشكلة عن طريق حذف ملف 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
  5. يمكنك إستخدام prefix عند تنفيذ أمر التثبيت من NPM كما في المثال npm install react --prefix ./vendor/node_modules حيث سيتم تثبيت react في هذا المسار ./vendor/node_modules وايضاً يمكنك إضافة متغير البيئة NODE_PATH لإضافة المسار الجديد كما في المثال export NODE_PATH='yourdir'/node_modules
  6. يمكنك إنشاء دالة بسيطة لإيجاد النص المكرر في نص معين بكل سهولة بدون الحاجة الى التعابير الإعتيادية 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')]
  7. هناك عدة طرق لربط السلاسل النصية 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")
  8. سنقوم بشرح سلوك اثنين من العوامل المنطقية and و or. وفقاً للتوثيق الرسمي لبايثون العامل المنطقي and سيقوم بإرجاع القيمة الخاطئة الأولى إذا وُجدت ، وإلا سيقوم بإرجاع القيمة الآخيرة في التعبير expression العامل المنطقي or سيقوم بإرجاع القيمة الصائبة الأولى إذا وُجدت ، وإلا سيقوم بإرجاع القيمة الآخيرة في التعبير expression العامل الوحيد الذي يقوم بإرجاع قيمة منطقية بغض النظر عن قيم معاملاته هو العامل المنطقي not
  9. تستخدم 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 ستقوم بإغلاق الموارد تلقائياً
  10. نعم انه من الممكن تعطيل 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
  11. يستخدم 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
  12. يمكنك تعريف حقل _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; }
  13. ستحتاج إلى إنشاء خادم مخصص ، ومع ذلك ، لا يمكنك النشر في 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') }) })
  14. في بايثون الإصدار 2 هذا ليس مضمونا كما أنه من الممكن ل True و False أن يعاد تعيينهما ومع ذلك ، حتى في حالة حدوث ذلك ، لا يزال يتم إرجاع الصحيح المنطقي والخطأ منطقي بشكل صحيح لإجراء مقارنات. في بايثون 3 ، True و False هما كلمتان محجوزتان، وسيكونا دائما يساوين 1 و 0. الكائن False من نوع bool هو صنف فرعي من int: object | int | bool هذا هو السبب الوحيد الذي يجعل ['hello', 'world'][False] في مثالك يعمل. لذلك يتم اعتبار القيم المنطقية كأعداد صحيحة int في بايثون 2 و 3.
  15. دالة التنظيف 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>; };
  16. يمكنك تفحص إذا كان كائن الطلب موجود فإذن انت في جانب الخادم server-side اما إذا لم يكن موجود فانت في جانب العميل client-side كما هو موضح في الكود async getInitialProps (appContext) { if (appContext.ctx.req) // server? { // جانب الخادم } else { // جانب العميل } }
  17. يجب عليك وضع 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 /> }
  18. استخدم أداة تحميل 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 وإدراجه في المكون.
  19. كما يوضح الخطأ ، سيتعين عليك استخدام عنوان 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 } }
  20. للتحويل من بايثون 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')
  21. الخطأ الذي يظهر لا يدل على أن هناك خطأ في الكود ولكن الخطأ يقوم أنه حدث خطأ ما عند 172.16.0.210
  22. يمكنك إستخدام دالة 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)
  23. يمكنك إستخدام دالة 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)
  24. حل سريع لذلك هو عبر إستخدام دالة ()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)
  25. npm prune سيقوم بإزالة المكتبات الغير مدرجة في package.json وليس غير المُستخدمة فإذا أردت حذف المكتبات الغير المستخدمة فيمكنك تثبيت حزمة depcheck فهي تقوم بتحليل المكتبات أو التبعيات dependecies وكيف يتم إستخدام كل واحدة منهن وأيٌ منهن غير ضروري و أيٌ منهن مفقود في package.json يمكنك تثبيتها هكذا npm install -g depcheck أو هكذا npx depcheck ويمكنك إستخدامها كالآتي depcheck [directory] [arguments] حيث تستبدل [directory] بجذر مسار المشروع والذي يكون فيه الملف package.json فإذا لم تقم بتحديد المسار فسيتم تحديد المسار الحالي بشكل افتراضي و [arguments] هي عبارة عن المُدخلات وهي اختيارية
×
×
  • أضف...