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

لوحة المتصدرين

  1. Mohamed Shaban18

    Mohamed Shaban18

    الأعضاء


    • نقاط

      2

    • المساهمات

      154


  2. أسامة زيادة

    أسامة زيادة

    الأعضاء


    • نقاط

      2

    • المساهمات

      2501


  3. عمر قره محمد

    عمر قره محمد

    الأعضاء


    • نقاط

      2

    • المساهمات

      4096


  4. Ayman Alrawy

    Ayman Alrawy

    الأعضاء


    • نقاط

      2

    • المساهمات

      147


المحتوى الأكثر حصولًا على سمعة جيدة

المحتوى الأعلى تقييمًا في 02/02/23 في كل الموقع

  1. اود ان اعمل خاصيه على الموقع بحيث ان العميل عند الانتها من عمليه الدفع ان تصل لى رساله بمضمون الطلبيه لكى استطيع تحضيرها الرساله تصل الى رقم واحد وهو الاداره وانا فى الحقيقه لا افهم كيف يتم عملها وهذا هو المشروع CompressFile.zip
    2 نقاط
  2. لقد بحثك كثيرا ولكن لم ينجح معي اي حل Connection could not be established with host "sandbox.smtp.mailtrap.io:2525": stream_socket_client(): Unable to connect to sandbox.smtp.mailtrap.io:2525 (Connection refused) MAIL_MAILER=smtp MAIL_HOST=sandbox.smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=e6a1d5be45be9f MAIL_PASSWORD=1179b52176ac31 MAIL_ENCRYPTION=tls
    1 نقطة
  3. ما هو الفرق بين M 5Tree,Decision Tree; M Tree
    1 نقطة
  4. مرحبًا، ما أرغب به هو سؤال المستخدم إن كان يرغب بإضافة اسم إلى جهات اتصال، أو البحث عن طريق الاسم أو الهاتف. مع التأكيد أن لا تقل الأرقام أو تزيد عن 10 . الكود يعمل بشكل صحيح، لكن هل طريقة كتابتي للكود صحيحة ؟ من خلال ترتيب الفقرات ؟ هي يمكن اختصاره وأنا قمت بإطالته ؟ phone_numbers = ["1111111111", "2222222222", "3333333333", "4444444444", "5555555555", "6666666666", "7777777777"] names = ["amal", "Mohammed", "Khadijah", "Abdullah", "Rawan", "Faisal", "Layla"] def search_by_phone_number(phone_number): while len(phone_number) != 10 and not int(phone_number): print("This is invalid number") search_by_phone_number(input("enter phone number: ")) if phone_number not in phone_numbers: print("Sorry, the number is not found") else: print(names[phone_numbers.index(phone_number)]) def search_by_name(name): if name not in names: print("Sorry, the name is not found") else: print(phone_numbers[names.index(name)]) def add_user(username, user_phone_number): phone_numbers.append(user_phone_number) names.append(username) print("if you want to search write \"s\"\n if you want to add write \"a\"") want = input("I want to: ") if want == "s": print("if you want to search by phone number write \"p\"\n if you want to search by name write \"n\"") want = input("I want to: ") if want == "p": search_by_phone_number(input("enter phone number: ")) elif want == "n": search_by_name(input("enter name: ")) else: print("write p or n \n please try again") elif want == "a": add_user(input("enter name: "), input("enter phone number: ")) else: print("write s or a \n please try again") شكرًا لكم.
    1 نقطة
  5. انا ادرس JavaScript في كورس علوم الحاسوب هل تنصحوني بقرائة كتاب JavaScript من اكادمية حاسوب مع الدورة ام اركز على الدورة واقرأ الكتاب بعد الدورة ام لا يوجد حاجة لقرائته
    1 نقطة
  6. مرحبا بالجميع انا اريد مواقع تعطي psd files مجانا لتطوير مهاراتي ولعمل portfolio احترافي
    1 نقطة
  7. بالإضافة للمواقع التي إقترحها أسامة يمكنك بدلاً من البحث عن ملفات psd يمكنك الإنتقال إلى موقع ويب يعجبك ، خذ لقطة شاشة. . يمكنك أيضًا تنزيل ال assetsمن موقع الويب ، بدلاً من استخراج الأصول من PSD. كما أن فحص كود مواقع الويب الحالية سيعلمك استخدام Firefox / Chrome Developer Tools ... مهارة أساسية. بديل عن تنفيذ هذه الخطوات يمكنك الذهاب لموقع frontend mentor يوفر لك الكثير من التطبيقات في مجال ال frontend حيث يوفر لك صور الموقع والخط المستخدم والألوان وكل شئ يتعلق بالتطبيق
    1 نقطة
  8. قم بالإطلاع على موقع free-psd-templates بحيث يوفر الموقع الكثير من النماذج بصيغة PSD ، كما أيضاً في موقع graphberry يوجد قسم خاص في ملفات PSD ، أيضاً من أشهر المواقع freepik التي توفر العديد من نماذج كثيرة التي يمكنك الإستفادة منها ،أيضاً قم بالبحث في محرك البحث جوجل حول ما تحتاجه فمثلاً لو قمت بالبحث PSD Website templates Free سوف تظهر لك عدة نتائج بحث يمكنك من خلالها الإطلاع على المواقع التي توفر العديد من الملفات وقم باختيار الملفات التي تناسبك .
    1 نقطة
  9. كيف يتم استخدام Bootstrap5 ضمن React بحيث أقوم باستدعاء RTl file عندما يكون الموقع باللغة العربية، وعندما يكون باللغة الانجليزية استخدم الملف العادي (LTR) الموقع الذي أعمل عليه يحتوي على بعض الصفحات باللغة العربية فقط وبعضها بالغة الانجليزية فقط لقد قمت باستدعاء كل ملف وحده ضمن ال Components الخاص بكل صفحة. اي أنني قمت باستدعاء import "bootstrap/dist/css/bootstrap.min.css في كل Component لصفحة لغتها انجليزية و ايضا import "bootstrap/dist/css/bootstrap.rtl.min.css"; في كل Component لصفحة لغتها عربية لكن يتم استدعاء كلا الملفين بجميع الصفحات.
    1 نقطة
  10. M5Tree و Decision Tree و M-Tree كلها خوارزميات التعلم الآلي المستخدمة في مهام التنبؤ والتصنيف. M5Tree: هو شكل من أشكال خوارزمية شجرة القرار ، والذي يستخدم نموذج الانحدار الخطي لعمل تنبؤات على أوراق الشجرة. تهدف خوارزمية M5Tree إلى تحسين دقة تنبؤات شجرة القرار. شجرة القرار (Decision Tree): هي خوارزمية بسيطة لكنها قوية تبني نموذجًا يشبه الشجرة من القرارات وعواقبها المحتملة. يمثل كل فرع من فروع الشجرة قرارًا محتملاً ، وتمثل كل عقدة ورقية النتيجة. يتم استخدام أشجار القرار لكل من مشاكل الانحدار والتصنيف. M-Tree: هو نوع من بنية بيانات الفهرسة المكانية المستخدمة للبحث الفعال عن أقرب الجيران في المساحات المترية عالية الأبعاد. يستخدم بشكل شائع في رؤية الكمبيوتر وأنظمة إدارة قواعد البيانات لتحسين أداء البحث. بخلاف M5Tree و Decision Tree .
    1 نقطة
  11. ارفقت مشروعا صغيرا يوضح نفس المشكلة npm install npm start http://localhost:3000 http://localhost:3000/ar المشكلة موجودة بالصفحتين لكن هي واضحة أكثر ب http://localhost:3000/ar ملف الصفحة التي باللغة الانجليزية CompanyEn.js أول سطر فيه import "bootstrap/dist/css/bootstrap.min.css ملف الصحفة التي باللغة العربية CompanyArOne.js أول سطر فيه import "bootstrap/dist/css/bootstrap.rtl.min.css عند تعليق أحد السطرين يستخدم الموقع السطر الآخر في كلا الصفحتين أما عند الابقاء على السطرين يصبح هناك تضارب في كلا الصفحتين test.zip شكرا لك نجحت الطريقة لكن عن طريق استدعاء الملفات المتعلقة ب ال Bootstrap ب ال CDN لكن: من خلال المسار الذي قمت أنت بكتابه href={`/path/to/bootstrap/css/${getBootstrapCss()}`} كيف أصل إلى مجلد node_modules أم أنه حصرا يتوجب علي إضافة الملفات بمجلد ال Public داخل مشروع ال React ؟ وشكرا جزيلا لك.
    1 نقطة
  12. حل هذه المشكلة يكون على عدة خطوتين: أولاً تعيين متغير يقوم بتحديد لغة العرض الحالية. ثانياً بانشاء دالة لاستداعاء الملف الصحيح استناداً إلى اللغة. // ينبغي تحديد اللغة، لنفرض أن القيمة الافتراضية لها العربية. let language = "ar"; function getBootstrapCss() { return language === "ar" ? "bootstrap.rtl.min.css" : "bootstrap.min.css"; } function App() { return ( <div> <link rel="stylesheet" href={`/path/to/bootstrap/css/${getBootstrapCss()}`} /> {/* Your components */} </div> ); } انتبه لتعديل مسار ملفات css في الكود في الأعلى.
    1 نقطة
  13. تعلم البرمجة من الكتب يمكن أن تكون مفيدة أو تكون مضيعة للوقت لذلك سأقوم بتوضيح بعض الأشياء التي يجب البحث عنها عند تحديد الكتب التي يجب قراءتها لتحسين معرفتك ومتى تقرأها. ابحث عن الكتب الأعلى جودة : قد يبدو هذا واضحًا ، لكن لا تضيع وقتك مع الكتب القديمة أو المكتوبة بشكل سيئ. أنت تريد أن تقرأ كتبًا من أشخاص يتمتعون بالمعرفة فيما يتحدثون عنه وأيضًا مكتوبون جيدًا ويقدمون قيمة حقيقية لك. اقرأ عن المفاهيم وليس التقنيات: لأن التقنيات تتغير بسرعة والكتب المتعلقة بها أصبحت قديمة.إذا كنت تريد تعلم React ، على سبيل المثال ، فمن الأفضل أن تتعلم من خلال قراءة الوثائق وإنشاء مشاريعك الخاصة. قد يستغرق تعلم React بضعة أشهر لكن عملية التعلم هذه تبدو مختلفة كثيرًا الآن عما كانت عليه قبل بضع سنوات.في حين أن المفاهيم في كتاب مثل Clean Code أو The Pragmatic Programmer هي أفكار خالدة. ببساطة لأنهم يعلمونك مهارات قابلة للتحويل يمكنك أن تحملها معك في مهنتك في البرمجة . استخدم الكتب كمواد تعليمية تكميلية وليست مواد تعليمية أولية لذلك يعتبر التركيز على الدروة التعليمية حالياً أفضل لك حيث أن الإستفادة الحالية لك من الدورات التعليمية أفضل بكثير من الكتب ربما لاحقاً تحتاج لبعض الكتب لزيادة المعلومات البرمجية لديك
    1 نقطة
  14. نعم ، يبدو أن الرمز صحيح. إنه برنامج بسيط يتيح لك البحث عن رقم هاتف أو اسم وإضافة مستخدمين جدد. ومع ذلك ، هناك بعض الأشياء التي يمكن تحسينها: في دالة search_by_phone_number ، الشرط أثناء while len(phone_number) != 10 and not int(phone_number) سيتم تقييمه دائمًا إلى True لأن عامل التشغيل يتطلب أن يكون كلا الشرطين صحيحًا not int(phone_number) سيكون دائمًا صحيحًا كما int(phone_number) إلى ValueError إذا لم يكن phone_number عددًا صحيحًا. لا يتعامل الرمز مع الأخطاء التي قد تحدث ، مثل إذا قام المستخدم بإدخال رقم هاتف غير صحيح في دالةsearch_by_phone_number. لا يتعامل الرمز مع التكرارات ، لذا فإن إضافة مستخدم برقم هاتف أو اسم موجود بالفعل سيؤدي إلى إضافة نفس رقم الهاتف أو الاسم عدة مرات.
    1 نقطة
  15. حسنا ولكن لا يوجد خيار للتعديل تظهر لا اعلم السبب علما ان التعليق كان من فتره
    1 نقطة
  16. علي العكس تماماً ف Chatgpt وغيرة من تطبيقات الذكاء الاصطناعي يساعد المطورين بشكل كبير فمثلا في مجال ال front-end يمكن ان يساعدك في امور كثيرة منها : كتابة كود فمثلاً قد يكون لديك بعض الأكواد التي تتكرر كثيراً فيمكنه كتابتة نيابة عنك حل المشاكل خاصة في مجال الفرونت اند يكون هناك الكثير من المشاكل الغريبة والتي قد تأخذ منك ساعات لحلها ويكون السبب بسيط يمكنه المساعدة في حل الأخطاء في اسرع وقت وبدون أي مجهود هذا مثال لحل ChatGpt لأحدي المشاكل في React.js // original code with error function List(props) { const items = props.items; // error: items is undefined return ( <ul> {items.map(item => ( <li key={item.id}>{item.name}</li> ))} </ul> ); } // fixed code with ChatGPT's suggestion function List(props) { const items = props.items || []; // fixed: items is now initialized return ( <ul> {items.map(item => ( <li key={item.id}>{item.name}</li> ))} </ul> ); } اختبار الكود ممكن ان يساعدك في اختبار الكود عن طريق اعطائة حالات تجريبة والنتائج المتوقعة //create a test for the case (your message) const testCases = [ {length: 2, width: 3, expected: 6}, {length: 4, width: 5, expected: 20}, {length: 6, width: 7, expected: 42}, ]; //ChatGPT's answer for (const testCase of testCases) { const {length, width, expected} = testCase; const result = calculateArea(length, width); const isCorrect = result === expected; console.log(`Test case (length=${length}, width=${width}): ${isCorrect ? "PASS" : "FAIL"}`); } يوجد الكثير من الطرق التي يمكنك الأستفاده منة ويمكنك البحث عن هذة الطرق او ابتكار طرق بنفسك وفي النهاية لا اعتقد ان أي من تطبيقات الذكاء الأصطناعي يمكنها استبدال المطورين , علي العكس اري انها ستسهل عملنا كثيراً وتفتح الأبواب الي مزيد من الإبتكارات في مجال الويب وغيرة من المجالات
    1 نقطة
  17. هل يمكنك مشاركة الكود الذي تتحدث عنه حتى استطيع مساعدتك. @عبدالرحمن العمودي
    1 نقطة
  18. هل يمكنك توضيح سؤالك أكثر. ولكن إذا كان سؤالك بمعني أنك قمت بتحويل الشيفرة البرمجية set header إلي تعليق, وتسال عن سبب عدم تأثير الشيفرة علي الكود. في هذه الحالة يجب أن تعرف ما هي التعليقات في البرمجة. التعليقات هي عبارات دخيلة على الشيفرات البرمجية وليست جزءًا منها، إذ تتجاهلها المصرّفات (compilers) والمترجمات (interpreters). يُسهِّل تضمين التعليقات في الشيفرات من قراءتها وفهمها ومعرفة وظيفة كل جزء من أجزائها، لأنها توفر معلومات وشروحات حول ما يفعله كل جزء من البرنامج. بناءً على الغرض من البرنامج، يمكن أن تكون التعليقات بمثابة مُذكَّرات لك، أو يمكنك كتابتها لمساعدة المبرمجين الآخرين على فهم الشيفرة. بمعني أخر هي لا تؤثر علي وظيفة الكود أي وجودها من عدمها لا يؤثر في عمل البرنامج.
    1 نقطة
  19. تُعد المحاسبة ونظام إدارة الحسابات Bookkeeping من أكثر الأمور التي يرتاب منها أيّ صاحب عمل تجاري، هذا بالإضافة إلى الضرائب والفواتير وجداول الرواتب وما إلى ذلك؛ الأمر الذي أدى إلى ظهور العديد من أنظمة إدارة الحسابات على الإنترنت على مر السنين، من نظام Wave إلى QuickBooks إلى Mint ووصولًا إلى ووردبريس. لم يعد نظام إدارة المحتوى مخصصًا للتدوين فقط، فإن كنت تدير عملك وموقعك الويب باستخدام ووردبريس، فلربما يكون من الجيد لك أن تأخذ في حسبانك فكرة تكامل نظامك لإدارة الحسابات مع واقع عملك والبرامج الأخرى التي تعتمد عليها باستمرار. إضافة WP ERP – Enterprise Resource Planning تتيح لك إضافة WP ERP (يشير مصطلح ERP إلى أنظمة تخطيط موارد المؤسسات) إعداد نظام إدارة الحسابات في موقعك ووردبريس والتعامل مع كل شيء تحتاجه في المحاسبة من فواتير وجداول رواتب وغيرها ومن دون مغادرة لوحة تحكم ووردبريس. بعد تنصيب إضافة WP ERP وتفعيلها، ستعرض الإضافة معالج إعداد بسيط ولكنه مهم لدرجة أننا نوصيك بشدة ألا تتركه. ففي حين أنه يمكن بالطبع ضبط كل إعداد لوحده لاحقًا، إلا أن هذه الإعدادات ضرورية لعمل الإضافة، وهي مجمّعة مع بعضها في مكانٍ واحد، لذا فإن تخصيص بعض الوقت لإتمام معالج الإعداد سيكون أمرًا مفيدًا جدًا لك. لبدء معالج الإعداد اضغط على زر "LET'S GO!" الظاهر في الصورة أعلاه. وعلى الأغلب، لن تواجه أيّة قرارات صعبة يجب عليك اتخاذها خلال مراحل معالج الإعداد. إذ ستجد في الصفحة الأولى الظاهرة في الصورة أدناه إعدادات تتعلق بنوع نشاطك التجاري، واسم شركتك، وبعض التواريخ المهمة، والعملة التي ستتعامل بها. ستتمكن أثناء التنقل بين مراحل معالج الإعداد من إضافة أقسام شركتك والمسميات الوظيفية لأعضاء فريق العمل. يمكنك مثلًا إضافة "قسم التسويق" كقسم من أقسام شركتك، وإضافة منصب "مدير التسويق" كأحد المناصب الموجودة في الشركة. وبما أنك أضفت أقسام شركتك ووظائف العاملين فيها، فستحتاج لاحقًا إلى ضبط صلاحيات كل موظف منهم. ولا تقلق، فكل هذه الإعدادات يمكن ضبطها لاحقًا في حال لم تضف شيئًا الآن. لوحة التحكم الخاصة بنظام إدارة الحسابات بعد الانتهاء من معالج الإعداد، سيظهر قسم جديد باسم "WP ERP" في أعلى القائمة الجانبية اليمنى من لوحة تحكم ووردبريس. سيؤدي النقر فوقه إلى نقلك إلى لوحة التحكم الخاصة بالإضافة، إذ سترى لمحات عامة مختلفة ستساعدك على الاستفادة من البرنامج بنجاح. ربما يكون أكثر الأقسام أهمية لإدارة الحسابات بين تلك الظاهرة أمامك الآن هو قسم "Accounting" في أسفل يمين الشاشة كما يظهر في الصورة أعلاه. لوحة التحكم الخاصة بالمحاسبة داخل لوحة التحكم الخاصة بالمحاسبة، سترى قوة الإضافة الحقيقية وكيفية إدارة حساباتك المالية من داخل موقعك ووردبريس. إذا كنت قد استخدمت أيّ نظام إدارة حسابات من قبل، فسيبدو هذا النظام بالتأكيد مألوفًا بالنسبة لك. إذ ستجد فيه قوائم منسدلة للمعاملات والحسابات والمنتجات المختلفة والضرائب وتقارير مختلفة يمكنك من خلالها معرفة كيفية التعامل مع الشق الاقتصادي من أعمالك. أول شيء نقترح القيام به هو إعداد حساباتك البنكية داخل لوحة التحكم وذلك عبر الانتقال إلى قسم "Chart of Accounts" الموجود في قائمة "Settings" في الأعلى، ومن ثم انقر على زر "Add New". إن إضافة حساب بنكي جديد هو أمر سهل جدًا؛ فقط حدد نوع الحساب الذي تريده من القائمة المنسدلة، وامنحه اسمًا، وأدخل أيّة سلسلة أرقام للتعبير عن الحساب ولتستطيع متابعته من خلالها لاحقًا. يجب التنويه إلى أن هذا البرنامج لا يتتبع تلقائيًا التحويلات المالية في حسابك عن طريق تسجيل الدخول إلى حسابك البنكي، لذلك لا يوجد داعٍ لتضمين رقم الحساب الكامل هنا لأغراضٍ أمنية. يمكنك بعد ذلك رؤية حسابك المُنشئ حديثًا من خلال الانتقال إلى قسم "Bank Accounts" الموجود ضمن قائمة "Settings". إن الحسابات المصنفة على أنها بنكية فقط ستظهر في القائمة الظاهرة في الصورة أعلاه. يمكنك التمييز بينها بحسب القسم الذي تظهر فيه مثل قسم المنتجات أو المبيعات وما إلى ذلك، وسيظهر كل واحد منها ضمن تبويب خاص به. للاطلاع على تقرير عام لجميع حساباتك، ما عليك سوى العودة إلى قسم "Chart of Accounts". إجراء المعاملات الحساسة إن الطريقة الأساسية التي ستتفاعل من خلالها مع نظام إدارة الحسابات هي باستخدام المعاملات البنكية، حيث إنه يوجد إجراءات مخصصة لكل نوع من أنواع المعاملات التي يمكنك فعلها. وعلى سبيل المثال، لا يسمح لك في قسم "Bank Accounts" إلا بإجراء التحويلات من حساب بنكي لآخر فقط. لا تنسى تنفيذ المعاملات البنكية في حسابك البنكي الحقيقي أيضًا، حيث إن هذه الإضافة ما هي إلا برنامج لإدارة الحسابات وليست برنامج بنكي يعمل عبر الإنترنت. وبدلًا من اضطرارك إلى التنقل بين كل حساب على حدة أثناء عملك في نظام إدارة الحسابات، يمكنك إنشاء أيّ نوع من أنواع المعاملات مباشرةً من شريط الأدوات أعلى لوحة التحكم الخاصة بموقعك ووردبريس. حيث ستجد قائمة منسدلة باسم "New Transaction" أعلى يسار الشاشة بجانب اسم المستخدم، وعند النقر عليها ستظهر لك قائمة بكل أنواع المعاملات التي قد ترغب في إجرائها مثل الفواتير وأوامر الشراء والضرائب. الأدوات تُعد أخطاء إدخال البيانات من أكثر الأخطاء شيوعًا التي تحصل عند إنشاء نظام إدارة محاسبة جديد لأول مرة، أو عند الانتقال من نظام قديم إلى آخر جديد، وهي أخطاء خطيرة وذات تأثير مخيف صراحةً. ولكن عالجت إضافة WP ERP ذلك من خلال توفير قائمة أدوات تحتوي خيارات للتخصيص؛ يمكنك الوصول إليها عبر الانتقال إلى تبويب "Tools" من القائمة الجانبية على يمين لوحة التحكم. ومن الخيارات المفضلة لدينا هنا هو ذلك المدرج تحت تبويب "General" الواضح في الصورة أعلاه، حيث يمكنك من خلاله إزالة أيّة أقسام موجودة في شريط الأدوات العلوي والقائمة الجانبية من لوحة تحكم ووردبريس. إذا كنت تريد أن يكون موقعك ووردبريس عبارة عن مجرد نظام ﻹدارة الحسابات فقط، فيمكنك إزالة قدرة مستخدمي الموقع في الوصول إلى ميزات ووردبريس الافتراضية؛ إذ ستختفي ميزات مثل المقالات والوسائط والصفحات والتعليقات والإضافات وغيرها إن أردت ذلك، وبالتالي لن تحتوي لوحة تحكم ووردبريس إلا على نظام إدارة الحسابات Bookkeeping. الفوترة باستخدام إضافة WP ERP إن أحد أهم جوانب أيّ نظام إدارة للحسابات عبر الإنترنت هو القدرة على إدارة الفواتير. ومن حسن الحظ أن إضافة WP ERP مهيئة لذلك، إذ تستطيع إرسال الفواتير إلى أيّ عميل من العملاء المضافين إلى قاعدة بيانات موقعك من خلال خدمة البريد الإلكتروني الافتراضية في ووردبريس، أو من خلال الخدمات الأخرى (باستخدام ملحقات الإضافة المدفوعة). لإرسال فاتورة ما عليك سوى الضغط على القائمة المنسدلة في شريط الأدوات العلوي واختيار "Invoice"، لتفتح بعدها نافذة تحتوي قالب فاتورة قياسي يمكنك من خلاله إضافة أيّ نوعٍ من المعلومات وإجراء التغييرات التي تحتاجها. اضغط على زر "Save" لإرسال الفاتورة إلى العميل (عبر البريد الإلكتروني المُدرج في ملفه الشخصي). من الغريب عدم وجود خيار حفظ وإرسال الفاتورة أو أيّ شيءٍ من هذا القبيل؛ لذا انتبه إن لم تكن مستعدًا لإرسال الفاتورة بعد وتريد حفظها فقط دون إرسالها، حيث يجب عليك اختيار "Save as Draft" من خلال الضغط على السهم للأسفل الموجود على يسار زر "Save". يمكنك الاطلاع على تفاصيل الفاتورة المرسلة وحالة إرسالها من خلال فتح قسم "Sales" من قائمة "Transactions" كما وضحنا سابقًا. الخاتمة تُعد إضافة WP ERP الخيار الأنسب للأشخاص الذين يرغبون في إدارة حساباتهم الاقتصادية والفواتير معًا. وكما هو الحال في أيّ نظام بيانات، تحتوي الإضافة خيارات سهلة غير معقدة لإدخال ومعالجة البيانات. وإن كنت بحاجة إلى ميزاتٍ إضافية أخرى، فيمكنك شراء الملحقات التي تجعل الإصدار المجاني القوي بالأساس أكثر قوة. كما توفر الإضافة خطط اشتراك سنوية مدفوعة تناسب أغلب الأشخاص بسبب إمكانية تحقيق أقصى استفادة منها مقابل السعر الاقتصادي. هل ترغب في امتلاك موقع ووردبريس سريع وآمن؟ احصل على موقع ووردبريس احترافي بالاستعانة بأفضل خدمات الووردبريس على خمسات أنشئ موقع ووردبريس الآن ترجمة -وبتصرّف- للمقال How to Create an Online Bookkeeping System with WordPress لصاحبه B.J. Keeton. اقرأ أيضًا شرح مفصل لصفحات الإدارة وكيفية التحكم الكامل بموقع ووردبريس طرق تثبيت إضافات ووردبريس كيفية تحديث إضافات ووردبريس بأمان 30 إضافة ووردبريس أساسية يجب عليك تثبيتها إذا لم تكن ثبتها بالفعل إدارة الإضافات في ووردبريس
    1 نقطة
  20. إذا كانت فكرة الانتقال إلى العمل الحر تجول في ذهنك؛ فمن المؤكد أنك فكرت في الفوائد العديدة التي ستصاحب هذا التحول، بدايةً من كونك لست مضطرًا للخروج من منزلك كل صباح لتعلق في زحمة المواصلات، وصولًا إلى التخلص من مديرك المستفز، ورغم أن كل تلك الميزات العديدة تساهم في عملية اتخاذ القرار، إلا أن ما سنتحدث عنه في هذا المقال هو المزايا الأخرى للعمل الحر. لقد جمعنا لك عشرة أسباب وجيهة -لم تفكر بها من قبل- ستدفعك للانتقال للعمل الحر، وذلك من أجل أن نساعدك في عملية اتخاذ قرار حاسم حيال هذا التحول المهني في حياتك. 1. توفير هائل في نفقاتك الشهرية لن تحتاج إلى شراء بدلة رسمية أو قيادة سيارتك إلى العمل أو شراء وجبة غداء جاهزة، وبالتالي ستصبح حياتك أرخص، فقد كان أحد الموظفين ينفق -في عمله المكتبي السابق- ما يتراوح من 20 إلى 30 دولارًا يوميًا على الطعام في العمل، إذ كان يعمل في المملكة العربية السعودية، وكان زملاؤه يحبون تجربة المطاعم السعودية، بينما ينفق اليوم أقل من 5 دولارات يوميًا مع حساب وجبته المسائية أيضًا. لذا اجلس مع نفسك وفكّر في الحد الأدنى للنفقات التي تحتاجها للعيش، وستتفاجأ بأنها أقل بكثير من دخلك الشهري، وإذا كان المستقلون يتقاضون أتعابًا أكثر من الموظفين، فلن تكون بحاجة إلى بذل الكثير من الجهد لتغطية تلك النفقات. 2. العمل بمرح عندما تصبح مستقلًا، لن تتمكن من العمل على المشاريع التي تفضلها فحسب، بل ستنجزها بمرح أيضًا، فلن يمنعك أحد من الغناء أثناء العمل، أو أخذ قسط من الراحة للعب كاندي كراش، أو رسم بعض الأفكار الجنونية لمجرد أنها خطرت على بالك، ولا يعني هذا بالطبع عدم الالتزام بمواعيد التسليم النهائية، لكن ما أقصده هو أنك لن تجبر نفسك على فعل أشياء لا تريد فعلها بعد الآن. 3. عدم الاضطرار إلى العمل 40 أو 60 ساعة في الأسبوع يمكنك العمل هذه المدة إن أردت ذلك، لكن لن يجبرك أحد إن لم ترغب بالعمل لفترات طويلة، وفي حال قررت العمل الحر بهدف استعادة بعض التوازن بين حياتك الشخصية والعمل، فستجد أنك ستحتاج إلى العمل من 10 إلى 15 ساعةً في الأسبوع فقط كي تغطي نفقاتك الأساسية، وسيكون أي شيء تفعله فوق ذلك اختياريًا، إذ يمكنك -بمجرد وصولك إلى هدفك الشهري المالي- أن تتوقف عن استلام مشاريع جديدة لتهتم بهواياتك بدلًا من ذلك. يُنصح دائمًا أن تتجاوز الحد الأدنى من احتياجاتك الشهرية، فهناك أشهر عجاف في العمل الحر قد لا يأتيك منها أي دخل على الإطلاق، لذا حاول أن تدخر بعض المال، وفي النهاية القرار يعود لك. 4. عدم الاضطرار إلى الالتزام بساعات العمل الاعتيادية يبدأ بعض المستقلين العمل في حوالي الساعة السادسة صباحًا، ثم يأخذون استراحة غداء طويلةً جدًا من الساعة 12 حتى 4، إذ يُفضل أخذ قيلولة بعد تناول وجبة الغداء، ثم يعودون إلى إكمال العمل مرةً أخرى في الساعة الرابعة مساءً. لا يهتم عملاؤك بمواعيد عملك، بل يهتمون فقط بالإنجاز، لكن يتعين عليك الالتزام بأي اجتماعات كنت قد وافقت على إجرائها، لذا ستمنحك فرصة إعادة ترتيب حياتك كما تريد تجربةً ممتعةً على نحو مدهش. 5. زيادة الإنتاجية يتعامل الموظفون في مكتب مع سلسلة لانهائية من المقاطعات، بينما يمكّنك العمل من المنزل من تفادي معظم المشتتات التي قد تعرقل عملك، لذا ستزداد إنتاجيتك على نحو ملحوظ قد يزيد عن مرتين بالموازنة مع العمل المكتبي، مما يعني ساعات عمل أقل والمزيد من الوقت لتنعم بالراحة إن أردت. 6. إمكانية التعلم أثناء العمل وتقاضي المال لقاء ذلك يدفع لك العملاء -في العمل الحر- أموالهم لقاء النتائج وليس الوقت الذي تقضيه في العمل، لذا ستتمكن من اكتساب مهارات جديدة أثناء العمل على مشاريعهم، فبدلًا من أن تضطر إلى التعلم في وقتك الخاص، سيدفع لك عملاؤك مقابل التعلم، وقد يتعين عليك خفض أسعار خدماتك قليلًا في تلك المشاريع لتلبية توقعات ميزانية العميل، لكن ما يهم حقًا هو أنك ستنال أجرك وتتعلم في الوقت نفسه. 7. اكتشاف آفاق جديدة والتركيز عليها إن كان جدول أعمالك غير مزدحم كليًا (كما هو حال الوظيفة التقليدية)، فستحصل على وقت لاستكشاف آفاق جديدة، وعندما تصادف مجالات جديدةً، فسيتوفر لك الوقت لتجربتها لترى ما إذا كانت ستعجبك أم لا، مما يمنحك حريةً تُعَد نعمةً حقيقيةً، ونادرًا ما تكون متوفرةً لك في بيئات الشركات، إذ لن يسمح لك معظم رؤساء العمل بالعبث أثناء دوامهم الرسمي، مما يقيد تطورك؛ أما عندما تعمل لحسابك الشخصي، فسيكون وقتك كله مخصصًا لك وحدك، وستتمكن من اختيار الطريقة التي تقضي بها ذلك الوقت وما تنفقه فيه. 8. الحصول على عطلة حسب رغباتك يمكنك حماية أوقات فراغك، فقد لا تكون عطلات نهاية الأسبوع هي الأيام التي تريد التفرغ بها، إذ تكون معظم المعالم السياحية في جميع بلدان العالم أشد ازدحامًا في عطلات نهاية الأسبوع، لذا قد تحب أن تفرغ وقتك في منتصف الأسبوع من أجل زيارة المعابد والمعارض والمتاحف التي تحبها. تُعَد القدرة على توفير وقت فراغ لنشاطاتك الشخصية، بدلًا من من محاولة إقحامه في جدول أعمالك المزدحم، أمرًا في غاية الروعة. 9. التحرر من قيود مدير الموارد البشرية يمكنك تحديد عدد الإجازات التي تحصل عليها كل عام واختيار شركة التأمين الصحي التي تفضلها، كما يمكنك أخذ إجازات مرضية بالقدر الذي ترغب به. تُعَد الوظيفة الحقيقية لمدير الموارد البشرية هي حماية الموظفين، لكن على أرض الواقع، غالبًا ما يأتي ذلك في المرتبة الثانية في جدول أعمال الشركة؛ أما في عالم العمل الحر، فأنت من تضع القواعد وأنت من تطبقها. 10. إمكانية اختيار المسمى الوظيفي الذي تفضله ليست المسميات الوظيفية مشكلةً كبيرةً، لكن على أرض الواقع غالبًا ما تكون كذلك، إذ يتوقع العملاء مسميات وظيفيةً معينةً، كما لا يمكنك النجاح -في بيئات عمل مثل الموجودة في الدول الآسيوية المعروفة بهيكلياتها الوظيفية الرسمية- إلا بامتلاك المسمى الوظيفي الصحيح، وذلك لكي يأخذك العملاء على محمل الجد. وغالبًا ما تكون الشركات أنانيةً عند منح المسميات الوظيفية، بل قد توزعها على الموظفين مثل الحلويات، بدلًا من الزيادات المالية؛ أما في عالم العمل الحر، فيستطيع المستقلون اختيار المسمى الوظيفي الذي يريدونه وقتما أرادوا، بدايةً من الرئيس التنفيذي إلى البواب، فالخيارات أمامك مفتوحة، ويمكنك إعادة اختيار المسمى الوظيفي متى شئت خلال 5 دقائق. ترجمة -وبتصرّف- للمقال 10 Great Reasons to Go Freelance (Things You Might Not Have Considered). اقرأ أيضًا 7 مميزات تدفعك للعمل كمستقل اليوم قبل غدًا نصائح المحترفين لتحقيق أقصى استفادة من العمل الحر مجموعة نصائح أساسية للمبتدئين في العمل الحر
    1 نقطة
  21. قد لا نحتاج إلى هذا المقال في أغلب التطبيقات التي نكتبها، إذ إنه موضوع متقدم في البرمجة (خصوصًا في مراحل تعلم البرمجة الأولى)، وسنعرضه هنا لمجرد الدراسة واحتمال احتياجه في مشروع ما، ولا تقلق إذا وجدت أن عناصره صعبة الفهم. سنشرح في هذا المقال ما يلي: تعريف التعاودية، وكيفية عملها. كيف تساعد التعاودية في تبسيط بعض المشاكل الصعبة. تعريف التعاودية رغم قولنا سابقًا إن الحلقات التكرارية loops هي إحدى ركائز البرمجة، إلا أنه يمكننا كتابة برامج كاملة دون استخدام صريح لهذه البنية، بل إن بعض اللغات مثل Scheme لا تحوي بنية حلقة تكرارية صريحةً مثل For وWhile وغيرهما، وإنما تستخدم تقنيةً تسمى التعاودية، وقد تبين أن هذه التقنية قوية للغاية في حل بعض أنواع المشاكل، وهي تعني تطبيق دالة كجزء من تعريف نفس الدالة، ولننظر مثالًا على ذلك أحد الاختصارات التعاودية المشهورة في الكلمات، وهو أحد أساليب التلاعب بالاختصارات يحتوي الاختصار نفسه على كلمة تطابق حروف الاختصار، مثل مشروع GNU مثلًا -وهو أحد أهم المشاريع في البرمجيات مفتوحة المصدر- والذي تشير حروف كلمته إلى "نظام GNU ليس يونكس" أو GNU's Not UNIX، فتكون اختصارًا تعاوديًا لأن كلمة GNU التي في الاختصار هي نفسها كلمة GNU المختصرة كلها، أما معنى الكلمة الحرفي فهو حيوان الثور الإفريقي. ويجب أن يوجد في الدالة شرط إنهاء، بحيث تتفرع الدالة إلى حل غير تعاودي عند نقطة ما، على عكس مثال GNU الذي ليس فيه هذا الشرط ويظل يتعاود إلى ما لا نهاية، وهو ما نطلق عليه الحلقة اللانهائية infinite loop. لننظر هنا في مثال بسيط، تُعرَّف فيه دالة المضروب الرياضي factorial function المشار إليها بعلامة التعجب بعد العدد n!‎، على أنها ناتج ضرب جميع الأعداد من الواحد حتى العدد المطلوب -بما في ذلك العدد نفسه-، ومضروب الصفر هو الواحد، فإذا أردنا التعبير عن هذا المثال بطريقة أخرى فسنقول إن مضروب N يساوي (N(N-1، وعليه سيكون: 1! = 1 2! = 1 x 2 = 2 3! = 1 x 2 x 3 = 2! x 3 = 6 N! = 1 x 2 x 3 x .... (N-2) x (N-1) x N = (N-1)! x N ويمكن التعبير عن ذلك في بايثون كما يلي: def factorial(n): if n == 0: return 1 else: return n * factorial(n-1) يجب أن تنتهي الدالة بما أننا نقلل قيمة N في كل مرة ونتحقق هل تساوي 1 أم لا، لكن ثمة مشكلة بسيطة في هذا التعريف، إذ سيدخل في حلقة لا نهائية إذا استدعيناه برقم سالب، ولحل هذا نضيف اختبارًا للتحقق من أن n أقل من صفر، ويعيد None إذا كان كذلك لأن مضروب العدد السالب غير معرَّف undefined. يظهر هذا مدى سهولة ارتكاب أخطاء في شروط الإنهاء، وهي أشهر حالة للزلات البرمجية bugs في الدوال التعاودية، إذ يجب أن نتأكد من اختبار جميع القيم حول حالة الإنتهاء لضمان التنفيذ الصحيح. لنرى الآن كيف يكون هذا عند تنفيذه، لاحظ أن تعليمة الإعادة تعيد * n (نتيجة استدعاء المضروب التالي)، فنحصل على ما يلي: factorial(4) = 4 * factorial(3) factorial(3) = 3 * factorial(2) factorial(2) = 2 * factorial(1) factorial(1) = 1 وتعود بايثون أدراجها لتستبدل القيم كما يلي: factorial(2) = 2 * 1 = 2 factorial(3) = 3 * 2 = 6 factorial(4) = 4 * 6 = 24 ليس من الصعب كتابة دالة مضروب دون استخدام التعاودية، ويمكنك تجريب هذا، إذ يجب أن تمر على جميع الأعداد حتى N؛ وتنفذ عمليات ضرب أثناء ذلك المرور التكراري، لكن قد يصعب كتابة بعض الدوال دون التعاودية، كما سنرى أدناه. التعاودية على القوائم إحدى الحالات التي تكون التعاودية مفيدةً فيها هي معالجة القوائم Lists، بشرط أن نستطيع التحقق من فراغ القائمة، وتوليد قائمة دون عنصرها الأول، ونفعل هذا في بايثون باستخدام تقنية تسمى التشريح Slicing، لكن كل ما يجب معرفته في هذا الفصل هو أن استخدام فهرس [‎1:‎] يعيد جميع العناصر من العنصر ذي الفهرس 1 حتى نهاية القائمة، لذا نكتب ما يلي لنصل إلى العنصر الأول من قائمة اسمها L: first = L[0] # استخدم الفهرسة العادية وللوصول إلى بقية القائمة: # استخدم التشريح للوصول إلى العناصر 1،2،3 وما بعدها butfirst = L[1:] لنجرب ذلك في محث بايثون، لنتأكد أنه يعمل: >>> L =[1,2,3,4,5] >>> print( L[0] ) 1 >>> print( L[1:] ) [2,3,4,5] نعود الآن إلى استخدام التعاودية لطبع القوائم، ولنفرض حالةً نطبع فيها كل عنصر من قائمة سلاسل نصية باستخدام الدالة printList: def printList(L): if L: print( L[0] ) printList(L[1:]) إذا تحققت L -أي كانت true ولم تكن فارغةً- فسنطبع العنصر الأول، ثم نعالج بقية القائمة كما يلي: # شيفرة وهمية ليست بايثون PrintList([1,2,3]) prints [1,2,3][0] => 1 runs printList([1,2,3][1:]) => printList([2,3]) => we're now in printList([2,3]) prints [2,3][0] => 2 runs printList([2,3][1:]) => printList([3]) => we are now in printList([3]) prints [3][0] => 3 runs printList([3][1:]) => printList([]) => we are now in printList([]) "if L" is false for an empty list, so we return None => we are back in printList([3]) it reaches the end of the function and returns None => we are back in printList([2,3]) it reaches the end of the function and returns None => we are back in printList([1,2,3]) it reaches the end of the function and returns None لاحظ أن الشرح أعلاه مأخوذ من شرح في نشرة تعليم بايثون البريدية بواسطة Zak Arnston بتاريخ يوليو 2003. يسهل تنفيذ هذا الأمر لقائمة بسيطة باستخدام حلقة for، لكن ماذا لو كانت القائمة معقدةً وتحتوي قوائم أخرى فيها، فإذا استطعنا التحقق من كون عنصر ما قائمةً باستخدام دالة type()‎ المضمنة وكان قائمة حقًا؛ فسنستدعي printList()‎ تعاوديًا، أما إن لم يكن قائمةً فنطبعه: def printList(L): # لا تفعل شيًا إن كانت فارغة if not L: return # على العنصر الأول printList إذا كانت قائمة فاستدع if type(L[0]) == list: printList(L[0]) else: # لا توجد قوائم لذا نطبع هنا print( L[0] ) # L نعالج بقية عناصر printList( L[1:] ) سيصعب تنفيذ ذلك باستخدام الحلقة التكرارية العادية، ويظهر الفرق مع استخدام التعاودية في تسهيل ذلك التنفيذ، لكن ثمة مشكلة هنا، فالتعاودية على بنى البيانات الكبيرة يستهلك الذاكرة كثيرًا، لذا عند وجود ذاكرة صغيرة أو بنى بيانات كبيرة لمعالجتها، فيجب تفضيل الشيفرة المعتادة للأمان، وبسبب مشكلة الذاكرة تلك واحتمال أن يتعطل المفسر interpreter بسببها فقد وضعت بايثون حدًا لعدد مستويات التعاودية التي تسمح بها، فإذا تجاوزنا ذلك الحد فسيُنهى برنامجنا مع خطأ RecusrionError، والذي نلتقطه باستخدام try/except: >>> def f(n): return f(n+1) نلاحظ أن سبب هذه الحالة هو عدم وجود شرط إنهاء، لكن يجب أن تكون مجموعةً كبيرةً من بيانات الدخل كافيةً لإطلاقها حتى في الدوال المكتوبة بإتقان، وهنا يكون الحل الوحيد هو إعادة الكتابة مرةً أخرى باستخدام الحلقات التكرارية المعتادة، وهذا ممكن دومًا مهما بدا صعبًا. جافاسكربت ولغة VBScript تدعم كل من لغة جافاسكربت ولغة VBScript التعاودية، لكن بما أننا ذكرنا كل شيء تقريبًا فسنتركك مع نسخة تعاودية من دالة المضروب للغتين: <script type="text/vbscript"> Function factorial(N) if N < 0 Then Factorial = -1 'a negative result is "impossible" if N = 0 Then Factorial = 1 Else Factorial = N * Factorial(N-1) End If End Function Document.Write "7! = " & CStr(Factorial(7)) </script> <script type="text/javascript"> function factorial(n){ if (n < 0) return NaN // NaN - Not a Number - يعني أنه غير صالح if (n == 0) return 1; else return n * factorial(n-1); }; document.write("6! = " + factorial(6)); </script> لننظر الآن في البرمجة الدالية Functional Programming (أو البرمجة الوظيفية) في الفصل التالي. خاتمة نأمل بنهاية هذا الفصل أن تكون تعلمت ما يلي: تستدعي الدوال التعاودية نفسها من داخل تعريفها. يجب أن تحتوي الدوال التعاودية على شرط إنهاء غير تعاودي نصل إليه في النهاية، وإلا فسنقع في حلقة لا نهائية من التكرار. التعاودية مستهلكة للذاكرة عادةً، لكن ليس في كل الحالات. ترجمة -بتصرف- للفصل العشرين: Recursion, or doing it to yourself، من كتاب Learn To Program لصاحبه Alan Gauld. اقرأ أيضًا المقال التالي: مقدمة إلى البرمجة الوظيفية Functional Programming المقال السابق: برمجة الواجهات الرسومية باستخدام Tkinter التعاود recursion والمكدس stack في جافاسكربت التعاود recursion في جافا مفهوم التعاود (Recursion) والكائنات القابلة للاستدعاء (Callable Objects) في Cpp
    1 نقطة
×
×
  • أضف...