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

عبدالباسط ابراهيم

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

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

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

  • عدد الأيام التي تصدر بها

    11

كل منشورات العضو عبدالباسط ابراهيم

  1. كما وضح التعليق السابق فإنه يمكنك تضمين البوتستراب بعدة طرق منها الموجودة في التعليق السابق ومنها ال React-Bootstrap أو ال Reactstrap وهما يستخدمان ال components بنفس الطريقة وهي كالتالي تنزيل ال bootstrap عن طريق npm npm install react-bootstrap bootstrap --save نقوم بتضمين الملف في ملف ال javascript import "bootstrap/dist/css/bootstrap.css"; الأن يمكنك استخدام ال bootstrap مكونات (component) كالتالي import { Button } from 'react-bootstrap'; <Button variant="primary" size="lg" active> I am a Button </Button>
  2. ال queue هو نوع من أنواع هياكل البيانات حيث يعمل بنظام first in first out أي أن البيانات التي تدخل في الطابور (queue) أولاً تخرج أولاً ﻻ يجب أن يتم إختيار البيانات بشكل عشوائي بل يجب أن تمشي بذلك الترتيب يمكنك الرجوع لإجابة هذا السؤال حيث يجيب عن سؤالك بشكل مفصل وللمزيد من التفاصيل حول ال queue أو لغة بايثون بشكل عام يمكنكي الذهاب لموسوعة حسوب فإنها مرجع كامل للغات البرمجة من خلال هذا الرابط
  3. تم شرح طريقة رفع التطبيق على ال app store في التعليق السابق ويمكنك إتباع الخطوات التالية للرفع على ال google play هذه الخطوات مكتوبة بالتفصيل في أكاديمية حسوب من خلال هذه الرابط لرفع تطبيق ال Android لمتجر Google Play، ستحتاج إلى إنشاء إصدار APK من التطبيق مرفق معه مفتاح إصدار (release key) والذي يجب بعدها استخدامه لجميع التحديثات مستقبلاً ويمكنك عمل ذلك تلقائياً من خلال هذه الأداه إعداد متغيرات Gradle إضافة إعداد التوقيع إلى إعداد Gradle في تطبيقك توليد الإصدار AAB اختبار بناء الإصدار الخاص بتطبيقك النشر إلى المتاجر الأخرى تمكين Proguard لتقليل حجم ملف APK (اختياري) تهجير تطبيقات React Native القديمة لاستخدام ميزة توقيع التطبيقات من Google Play
  4. كما في التعليقات السابقة تم شرح الكثير عن لغة javascript حيث أنها لغة برمجة مُفسَّرة interpreted والكثير تم شرحه سابقاً ولكن يفضل تعلم لغة javascript ؟ يفضل تعلم javascript للأسباب التالية ولكن في الأخير ينبغي عليك تعلم اللغة التي تفيدك في مجال عملك الراتب المربح والطلب المرتفع : يكسب مطورو JavaScript متوسط راتب مرتفع ولكن على حسب خبرة المبرمج ومكان العمل. كما أن مطوري JavaScript مطلوبون بشكل كبير. إذا كنت تبحث في مواقع التوظيف الشهيرة مثل إنديد ولينكد إن ، فستجد الآلاف من الوظائف التي تتطلب هذه المهارة سهولة التعلم : JavaScript هي لغة برمجة صديقة للمبتدئين ، مما يجعلها مثالية للمبرمجين المبتدئين. ، بل يسهل العمل باللغة مباشرة وبسهولة . حيث يحتوي كل متصفح ويب على محرك JavaScript مثبت مسبقًا عليه ، لذلك لا تحتاج إلى تثبيت أي برامج إضافية لبدء استخدام JavaScript. متنوع القدرات : JavaScript هي لغة برمجة مرنة للغاية. بمجرد إتقان JavaScript ، فإن فرص العمل لا حدود لها. يمكنك الترميز من خلال عدة طرق مثل Angular على جانب العميل أو Node.js على جانب الخادم. يمكنك أيضًا استخدام React Native و React و Electron لإنشاء تطبيقات للهاتف المحمول والويب وسطح المكتب. فرص عمل : سيتمكن مبرمجو JavaScript من التقدم لشغل مجموعة متنوعة من الوظائف ، من العمل المستقل عن بُعد إلى العمل بدوام كامل. يبحث العديد من عمالقة التكنولوجيا مثل Amazon و Google و Netflix و PayPal دائمًا عن مهندسي جافا سكريبت المهرة. يتزايد الطلب على مطوري JavaScript طوال الوقت ، وإذا كنت تعرف كيفية البرمجة بهذه اللغة ، فيمكنك العثور على عمل في مجموعة متنوعة من المجالات. يمكن أن تفتح معرفة JavaScript أيضًا فرصًا وظيفية في تطوير الألعاب ، والتطوير الكامل للمكدس ، وأمن المعلومات ، وهندسة البرمجيات ، والذكاء الاصطناعي ، والتعلم الآلي ، والمزيد. إذا كنت متخصصًا في React.js أو React Native أو Vue أو Node.js ، فقد تجد نفسك في ارتفاع كبير في الطلب. مجتمع المطورين عبر الإنترنت الضخم : كلغة شائعة ، تمتلك JavaScript واحدًا من أكبر المجتمعات على الإنترنت. يمكنك بسهولة العثور على هذه المجتمعات على منصات مثل Slack و Discord. مجتمع المطورين هو المفتاح إذا كنت تريد طرح أسئلة حول JavaScript ، أو التعاون في المشاريع ، أو تطوير مهاراتك.
  5. أعتقد أن الحل لهذه المشكلة هو استخدام ال absolute path كما يظهر في المثال التالي @font-face { font-family:"poppins EL" ; src: local("poppins EL") url("/src/assets/fonts/Poppins-ExtraLight.ttf") format("ttf"); /* لاحظ تغيير المسار */ } $font-family-base: "poppins EL";
  6. هناك فرق بين المبرمج ومهندس البرمجيات سواء في الطبيعة العمل والمسؤليات المطلوبة وإحدى الطرق البسيطة لفهم الفرق بين مهندس البرمجيات والمبرمج هي التفكير في نطاق عملهم. بينما يركز المبرمج على مهمة أو جانب معين من المشروع (البرمجة) ، غالبًا ما يشرف مهندس البرمجيات على تطوير المشروع من البداية إلى النهاية. تشمل بعض الاختلافات الرئيسية ما يلي: مستوى التعليم. عادة ما تتضمن متطلبات التعليم لمهندس البرمجيات درجة في هندسة البرمجيات . المبرمجون غير مطالبين بالحصول على درجة علمية للحصول على وظيفة. نطاق المسؤوليات. عادة ما يكون مهندسو البرمجيات مسؤولين عن المشاريع من البداية إلى النهاية. وهذا يشمل التواصل مع العملاء وأعضاء الفريق الآخرين. يتعاون المبرمجون مع أعضاء الفريق ، لكنهم يؤدون الجزء الأكبر من عملهم بمفردهم. ببساطة متطلبات وظيفة المبرمج النموذجية القدرة على البرمجة باستخدام أنواع مختلفة من لغات البرمجة. وببساطة مهندس البرمجيات هو متخصص في التكنولوجيا يستخدم المفاهيم العلمية لتصميم البرامج. فهي تجمع بين مبادئ الهندسة وتطوير البرامج لإنشاء تطبيقات البرامج واستكشاف الأخطاء وإصلاحها وتحسينها. قد تشمل المهام المحددة لمهندس البرمجيات ما يلي: تحليل احتياجات المستخدم وتحديد كيفية تلبية البرنامج لتلك الاحتياجات التواصل مع العملاء والأطراف المعنية الأخرى لحل المخاوف وإطلاعهم على تقدم المشروع استخدام ميزانية الشركة وسياساتها كإطار عمل لإنشاء البرامج وصيانتها إرشاد المبرمجين إلى نوع الكود المطلوب استخدامه والوظائف التي يجب تضمينها في البرنامج اختبار البرنامج بحثًا عن الأخطاء للتأكد من كفاءة البرنامج وموثوقيته حل أي مشاكل مع البرنامج وتوفير الصيانة حسب الحاجة وكما في التعليق السابق فإن دورة علوم الحاسوب الموجودة في الأكاديمية تعد مدخل لهندسة البرمجيات ومنها يمكنك تطوير المهارات المطلوبة لتصبح مهندس برمجيات
  7. الموقع الخاص بك جيد وإحترافي لكن ينقصك بعض الملاحظات التي تجذب العميل للعمل معك وبعض التفاصيل تساعد على بناء سمعة جيده لك مثل إضافة ال Testimonials أو آراء العملاء السابقة حيث هذا القسم من الموقع يساعد العميل على الإطمئنان لك وزيادة الثقة إضافة صوره لك في الموقع حيث أن العملاء تطمئن لل brand أو لصورة الشخص حاول التحدث بشكل عملي أكثر في قسم ال about قم بزيادة المعلومات التي تخص مجال عميلك حاول إضافة قسم تشرح فيه خطوات تنفيذ وبناء الموقع بشكل مختصر يساعد على زيادة ثقة العميل يجب عليك إضافة قسم في الموقع يجب عن السؤال (لماذا اقوم بتوظيفك) هذه التفاصيل مهمة جداً أكثر من جمالية الموقع (مع أن جمالية الموقع مهمة جداً) حاول تعلم بعض الشئ عن التسويق للقيام بما يجب أن يقوم به ال portfolio من مهام لجذب العميل
  8. حتى تستطيع التغيير في حجم الصورة svg من خلال ال css يجب عليك حذف ال width و height كالتالي قم بتعديل الوسم من <svg width="12px" height="20px" viewBox="0 0 12 20" ... إلى <svg viewBox="0 0 12 20" ... أو يمكنك تغيير الحجم من خلال الخاصية transform scale كالتالي transform: scale(2);
  9. كما وضح شرف الدين في التعليق السابق أن ال microservices تقوم على تقسيم المشروع إلى وحدات أصغر غير مرتبطة ببعضها ويمكنك الفهم أكثر من خلال الصورة التالية ولكن ما المفيد من هذه التقنية السرعة Agility: حيث أن من خلال ال microservices يعمل الفريق بشكل مستقل وبتركيز أكثر على خدمة واحدة بدون الإرتباط ببقية المشروع مما يفيد ذلك في زيادة سرعة التطوير سهولة التمدد: حيث يمكن لكل microservice من التمدد حتى تلائم متطلبات المشروع دون الإرتباط microservices الأخرى سهولة النشر Easy Deployment : بالإضافة لسهولة استخدام ال CI و ال CD كما أن يمكنك لمطوري ال microservice استخدام الأدوات والتقنيات التي يفضلونها دون الإرتباط بال microservices الأخرى ومن أكثر مميزات هذه التقنية هو إمكانية استخدام نفس الكود لل microservice في مشروع آخر أي يمكنك استخدام خدمة في عدة مشاريع مختلفة
  10. يمكنك أيضاً استخدام الحزمة tabulate كما في المثال التالي أولاً نقوم بثبيتها pip install tabulate ثم يمكنك استخدامها import pandas as pd from io import StringIO from tabulate import tabulate c = """Chromosome Start End chr1 3 6 chr1 5 7 chr1 8 9""" df = pd.read_table(StringIO(c), sep="\s+", header=0) print(tabulate(df, headers='keys', tablefmt='psql')) +----+--------------+---------+-------+ | | Chromosome | Start | End | |----+--------------+---------+-------| | 0 | chr1 | 3 | 6 | | 1 | chr1 | 5 | 7 | | 2 | chr1 | 8 | 9 | +----+--------------+---------+-------+ وإذا كنت تريد الطباعة على هيئة markdown يمكنك استخدام الدالة DataFrame.to_markdown أو Series.to_markdown وإذا كنت تريد الطباعة على هيئة html يمكنك استخدام الدالة DataFrame.to_html أو Series.to_html.
  11. يمكنك استخدام الحزمة querystring لتنفيذ المطلوب كما في المثال التالي var querystring = require("querystring"); var result = querystring.stringify({query: "SELECT name FROM user WHERE uid = me()"}); console.log(result); #prints 'query=SELECT%20name%20FROM%20user%20WHERE%20uid%20%3D%20me()' أما في حالة كنت تريد ترميز ال query فقط يمكنك استخدام الحزمة uri-js var URI = require("uri-js"); undefined > URI.serialize(URI.parse("http://example.org/rose?rose=rose"))
  12. يمكنك استخدام طريقة أحدث مثل استخدام ال ES6 module و async/await كما في المثال التالي لاحظ أنه عملية القراءة ستكون asynchronous import { readFile } from 'fs/promises'; let data = JSON.parse(await readFile("filename.json", "utf8")); ويمكنك إضافة ال try ,catch كما في المثال التالي import { readFile } from 'fs/promises'; try { const controller = new AbortController(); const { signal } = controller; const promise = readFile(fileName, { signal }); controller.abort(); await promise; } catch (err) { console.error(err); }
  13. كما تم الشرح في التعليقات السابقة فإنه كلاهما يقومان تمكن من فتح جلسة اتصال تفاعلية ثنائية الاتجاه بين متصفح المستخدم والخادم. ، يمكنك إرسال رسائل إلى خادم وتلقي ردود مدفوعة بالأحداث دون الحاجة إلى إرسال الطلب من المتصفح وتعتبر socketIo مكتبة تم بناؤها على ال Websockets ويمكنك ملاحظة الفروقات بينهما في المقارنة التالية socketIo لديه اتصال ذاتي auto connection لديه غرف rooms لديه بروتوكول اتصال مصمم مسبقا لديه دعم جيد لتسجيل الدخول لديه دعم للمتصفحات القديمة في حالة لا تدعم Websockets لديها مجتمع كبير لأنها مكتبة (لا يمكن أن يكون لديك مجتمع لـ HTTP أو Webockets هي مجرد بروتوكولات) وبالطبع لأنها مكتبة لا تحتاج لتصميم وتنفيذ جميع المهما بنفسك فبالتأكيد توفر لك هذه المهما الأساسية أما بالنسبة ل Websockets لديك التحكم الكامل ، من خلال البناء من الصفر ، هذا يمكن أن يكون جيداً أو سيئاً. عليك تصميم البنية الخاصة بك ليس لديك اتصال ذاتي auto connection ، يمكنك تنفيذها بنفسك إذا كنت تريد ذلك. ليس لديه دعم احتياطي fallback للمتصفحات القديمة
  14. كما وضح أحمد أنه المشكلة في عدم وجود ال header وكما في التوثيق الخاص بpandas لذلك لحل المشكلة سوف يكون الكود كالتالي df = pandas.read_csv(filepath, sep='delimiter', header=None) أو يمكنك حل هذه المشكلة من خلال تعريف أسماء الأعمدة في الخاصية names كما في المثال التالي col_names = ["col1", "col2", "col3", ...] df = pd.read_csv(filename, names=col_names) وليس شرطاً أن تكون بنفس أسماء الأعمدة بل يجب أن تكون placeholder فقط بعدد الأعمدة لذلك يمكنك استخدام الحل التالي df = pd.read_csv(filename, names = list(range(0,N))) حيث يعبر N عن عدد الأعمدة
  15. من المفترض أنه يتم تفعيل الدورة وبدأ التعلم بعد إكمال عملية الدفع لذلك قم بالخطوات الموجودة في هذا الرابط وإن لم تجد الحل قم بالتواصل مع مركز المساعدة وسيقوم أحدهم بحل المشكلة لديك قم بالتواصل معهم من هنا
  16. هل تقصد أنك تريد إزالة ال Query Params عند الضغط على الزر ؟ إذا كان كذلك يمكنك استخدام الدالة router.replace كالتالي const router = useRouter(); router.replace("/about", undefined, { shallow: true }); الرابط سوف يكون كالتالي فقط /about لاحظ أن ال shallow: true تسمح لك تحديث الرابط بدون تنفيذ دوال ال data fetching يمكنك القراءة أكثر عن الموضوع من خلال موقع next تحت عنوان Shallow Routing
  17. سبب هذا الإختلاف أه تم تغيير ال node إلى nodejs لذلك يمكنك عمل symlink لتفادي هذه المشكلة كالتالي sudo ln -s `which nodejs` /usr/bin/node بحيث يتم إرجاع أي كان النسخة التي لديك إلى node أو يمكنك استخدام update-alternatives كالتالي sudo update-alternatives --install /usr/bin/node node /usr/bin/nodejs 10
  18. كما تم الشرح في التعليق السابق فإنه يمكنك حفظ هذه المتغيرات في ال disk وذلك لحفظها عند إغلاق اللعبة وفي هذه الحالة يمكنك استخدام الحزمة shelve ويمكنك قراءة المزيد من المعلومات عنها من خلال الرابط السابق وذلك مثال على طريقة عملها import shelve d = shelve.open('score.txt') d['score'] = score # الأن تم حفظ المتغير على ال disk d.close() ولقراءة البيانات من ال ملف نستخدم الكود التالي import shelve d = shelve.open('score.txt') score = d['score'] d.close() وإذا كنت لا تريد استخدام أي حزم يمكنك استخدام python فقط المثال التالي مبسط ويمكنك إضافة البينات أو الدوال التي تريدها وبالطبع يمكنك استخدام أي مكتبة لتوفر لك العديد من المميزات حفظ البيانات with open('readme.txt', 'w') as f: f.write('readme') ثم قرائتها with open(path_to_file) as f: contents = f.read()
  19. يمكنك أيضاً استخدام ال loop لتنفيذ المطلوب وهذه الطريقة هي أسرع من استخدام apply مع axis 1 كما في المثال التالي import pandas as pd df = pd.DataFrame({'ID':['1','2','3'], 'col_1': [0,2,3], 'col_2':[1,4,5]}) mylist = ['a','b','c','d','e','f'] def get_sublist(sta,end): return mylist[sta:end+1] df['col_3'] = list(map(get_sublist,df['col_1'],df['col_2'])) ملاحظة في الإصدار Python 2 لا تحتاج لاستخدام ال list للتحويل
  20. تعتبر الدالة render من ال life-cycle في react وتعتبر من ال life-cycle المهمة ويتم استدعائها من خلال react عند عمل إنشاء المكون وأثناء التحديثات بدون تدخل منك والوظيفة الأساسية لهذه الدالة هو تقديم كود ال JSX إلى ال DOM ولكن بعد القيام بعدة عمليات معالجة للكود حيث أن كود ال JSX لا يتم تقديمه كما هو لل DOM إنما يتم تحويله لكود مشابه للتالي React.createElement(tag, props, children) حتى يتم تقديمه لل DOM
  21. بالطبع يمكنك استخدام django أو أي لغة أو تقنية backend أخرى مثل php laravel حيث أن يعتبر react native إطار عمل frontend لذلك ليس له علاقة بلغة ال backend فيمكنك استخدام نفس الكود أو تطبيق ال backend مع مثلاً تطبيق أندرويد أو تطبيق ويب بواسطة react أما بالنسبة لأيهما أفضل فلا تصلح المقارنة حيث أن django إطار عمل ل python أما nodejs بيئة عمل ل javascript فلذلك ينبغي عليك إختيار التقنية المفضلة بالنسبة لك وأيضاً على حسب إذا كنت تتقن لغة javascript أو لغة python كما أن لكل تقنية تتمتع ببعض المميزات مثل nodejs تتميز بسرعة وقوة بناء تطبيقات ال realtime وسهولة العمل مع قواعد البيانات non relational أما django أو python فيتمjع بسهولة تعلمه والعمل به
  22. كما شرح شرف الدين أنه المشكلة أن الكائن window متوفر فقط في المتصفح لذلك ينبغي عليك استخدامه في ال الدالة componentDidMount او في الuseEffect hook أو ببساطة يمكنك استخدلم ال dynamic import مع ظبط الخسار srr ل false فقط وتستخدم نفس الكود بدون تغيير أو الحاجة للدالة componentDidMount او الuseEffect hook كما في المثال التالي // components/Scroll.js function onScroll() { console.log("scroll!"); } window.addEventListener("scroll", onScroll); export default function Scroll() { return null; } // pages/index.js import dynamic from "next/dynamic"; const Scroll = dynamic( () => { return import("../components/Scroll"); }, { ssr: false } ); export default function Home() { return ( <div style={{ minHeight: "1000px" }}> <h1>Home</h1> <Scroll /> </div> ); }
  23. ببساطة لكل loader مهمة مختلفة حيث أن CSS Loader يقوم بمعالجة ملفات css فقط في حالة وجود ()url أو imports أما ال style-loader فهو المسئول عن إضافة التنسيقات إلى صفحات الويب وتطبيقها من خلال الوسم styel كما في المثال التالي <style type="text/css"> body { background: yellow; } </style> لذلك كما ترى لكل منهما وظيفة مختلفة وينبغي عليك استخدامهما معاً
  24. يمكنك استخدام ال hook التالي " useRouter " كما في المثال التالي import Link from "next/link"; import { useRouter } from "next/router"; export const MyNav = () => { const router = useRouter(); return ( <ul> <li className={router.pathname == "/" ? "active" : ""}> <Link href="/">home</Link> </li> <li className={router.pathname == "/about" ? "active" : ""}> <Link href="/about">about</Link> </li> </ul> ); };
  25. كما في التعليقات السابقة فإنه المشكلة في ال encoding وفي حالة أنك لم تستطع معرفته يمكنك استخدام الكود التالي لمعرفته with open('filename.csv') as f: print(f) ثم بعد ذلك قم بتحديد ال encoding الذي وجدته data=pd.read_csv('filename.csv', encoding="encoding you found ") كما أن إذا كنت تريد حل واحد لهذه المشكلة قم باستخدام ال Script التالي حيث يجرب الكثير من ال encoding واستخدام الصحيح import pandas as pd encoding_list = ['ascii', 'big5', 'big5hkscs', 'cp037', 'cp273', 'cp424', 'cp437', 'cp500', 'cp720', 'cp737' , 'cp775', 'cp850', 'cp852', 'cp855', 'cp856', 'cp857', 'cp858', 'cp860', 'cp861', 'cp862' , 'cp863', 'cp864', 'cp865', 'cp866', 'cp869', 'cp874', 'cp875', 'cp932', 'cp949', 'cp950' , 'cp1006', 'cp1026', 'cp1125', 'cp1140', 'cp1250', 'cp1251', 'cp1252', 'cp1253', 'cp1254' , 'cp1255', 'cp1256', 'cp1257', 'cp1258', 'euc_jp', 'euc_jis_2004', 'euc_jisx0213', 'euc_kr' , 'gb2312', 'gbk', 'gb18030', 'hz', 'iso2022_jp', 'iso2022_jp_1', 'iso2022_jp_2' , 'iso2022_jp_2004', 'iso2022_jp_3', 'iso2022_jp_ext', 'iso2022_kr', 'latin_1', 'iso8859_2' , 'iso8859_3', 'iso8859_4', 'iso8859_5', 'iso8859_6', 'iso8859_7', 'iso8859_8', 'iso8859_9' , 'iso8859_10', 'iso8859_11', 'iso8859_13', 'iso8859_14', 'iso8859_15', 'iso8859_16', 'johab' , 'koi8_r', 'koi8_t', 'koi8_u', 'kz1048', 'mac_cyrillic', 'mac_greek', 'mac_iceland', 'mac_latin2' , 'mac_roman', 'mac_turkish', 'ptcp154', 'shift_jis', 'shift_jis_2004', 'shift_jisx0213', 'utf_32' , 'utf_32_be', 'utf_32_le', 'utf_16', 'utf_16_be', 'utf_16_le', 'utf_7', 'utf_8', 'utf_8_sig'] for encoding in encoding_list: worked = True try: df = pd.read_csv(path, encoding=encoding, nrows=5) except: worked = False if worked: print(encoding, ':\n', df.head())
×
×
  • أضف...