-
المساهمات
1359 -
تاريخ الانضمام
-
تاريخ آخر زيارة
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو عبد الوهاب بومعراف
-
في الكود الذي أرسلته، الدالة `finder` تستخدم معاملين، الأول هو `iterable` وهو عبارة عن قائمة أو مجموعة تحتوي على عناصر يمكن تكرارها. في هذا المثال، `iterable` هو قائمة `words` التي تحتوي على لغات البرمجة (مثل "python" و "php" و "java" و "ruby") فهذا المعامل هو ما نبحث فيه عن العناصر المطابقة. أما `text` هو النص الذي نريد البحث عنه في بداية كل عنصر من عناصر `iterable` وفي هذا المثال، `text` هو الحرف "p" وهذا المعامل يحدد الشرط الذي نبحث عنه في العناصر. بالنسبة ل`finder` تأخذ `iterable` و `text`. وداخل `finder`، هناك دالة `find` التي تتحقق مما إذا كان أي عنصر في `iterable` يبدأ بالنص `text` أما `filter` يستخدم `find` لتصفية العناصر في `iterable` بناءً على الشرط المحدد والنتيجة النهائية هي قائمة بالعناصر التي تبدأ بالنص `text`.وهذا هو الكود بعد التصحيح: words = ["python", "php", "java", "ruby"] def finder(iterable, text): def find(item): return str(item).startswith(text) return list(filter(find, iterable)) result = finder(words, "p") print(result) والنتيجة النهائية ستكون: ['python', 'php'] وبهذا الشكل، الكود يقوم بإرجاع جميع العناصر في `words` التي تبدأ بالحرف "p".
- 3 اجابة
-
- 1
-
-
يمكنك تصميم قاعدة بيانات تحتوي على جداول لكل قسم مثل المطاعم والماركت والأقسام الأخرى، ثم تقوم بإنشاء واجهة مستخدم ديناميكية باستخدام تقنيات مثل React أو Angular أو Vue.js لعرض الأقسام المختلفة بناء على البيانات المستلمة من الواجهة الخلفية (Backend). في الواجهة الخلفية، يمكنك إنشاء واجهة برمجة تطبيقات (API) باستخدام Node.js أو Django للتواصل مع قاعدة البيانات وتحديد القسم المناسب لعرضه عند فتح التطبيق. للبحث عن مصادر باللغة الإنجليزية، يمكنك استخدام الكلمات المفتاحية مثل "Dynamic Section Rendering in Mobile Apps" و "Conditional Component Rendering in React/Angular/Vue.js" و "Backend API Design for Dynamic Content" و "User Preference Based Content Display in Mobile Applications" لكني أنصح بمراجعة التوثيقات الرسمية فهي تغنيك عن البحث الكثير.
- 2 اجابة
-
- 1
-
-
دالة Series في مكتبة Pandas تشبه القاموس في بايثون لكنها تحتوي على بعض المميزات الخاصة بها، وتتميز بأنها تتيح فهرسة كل عنصر بفهرس يمكن أن يكون رقميا أو نصيا، وجميع العناصر فيها تكون من نفس النوع. يمكن إجراء العمليات الرياضية والإحصائية بسهولة كما تتكامل بشكل ممتاز مع مكتبات تحليل البيانات الأخرى مثل Numpy. Pandas عامة و Series خاصة مصممة للتعامل مع مجموعات بيانات كبيرة وعمليات تحليل معقدة بشكل فعال. الفروقات بين Series والقاموس تكمن في أن Series تتيح إجراء العمليات الرياضية والإحصائية بسهولة ويمكن فهرستها بأي نوع من القيم، في حين أن القاموس يمكن أن يحتوي على أنواع بيانات مختلفة ولكنه لا يدعم العمليات الرياضية بشكل مباشر.فلإنشاء Series من قائمة بيانات: import pandas as pd data = [1, 2, 3, 4, 5] s = pd.Series(data) print(s) كما يمكنك إجراء عملية جمع على جميع العناصر هكذا: print(s + 10) يمكن الوصول إلى عنصر معين: print(s[2]) يمكنك التوسع في الموضوع من هنا:
- 3 اجابة
-
- 1
-
-
يمكنك التحقق من توثيق المكتبة أو محاولة استخدام الكود مباشرة ومعرفة ما إذا كان يظهر خطأ. import pandas as pd print(pd.__version__) أو من خلال زيارة الموقع الرسمي للتوثيق `pandas` [pandas documentation](https://pandas.pydata.org/pandas-docs/stable/) والبحث عن توثيق `pd.Index` ومراجعة العمليات المدعومة عليه.لكن يوجد بديل آخر، بحيث يمكنك استخدام دالة `union` كطريقة مؤكدة: import pandas as pd arr0 = pd.Index([0, 1, 2, 3, 4]) arr1 = pd.Index([0, 1, 2]) print(arr0.union(arr1)) فدالة `union` تعتبر الخيار الأكثر أمانا للعمل مع إصدارات مختلفة من `pandas`.
- 8 اجابة
-
- 1
-
-
العفو، بالنسبة للعامل `|` يمكن استخدامه لعمل اتحاد بين كائنات `pd.Index` في مكتبة `pandas`. ففي حالة ما إذا كانت تواجهنا مشاكل مع استخدام العامل `&` للتقاطع، يمكن استخدام `|` للاتحاد بهذه الطريقة: import pandas as pd arr0 = pd.Index([0,1,2,3,4]) arr1 = pd.Index([0,1,2]) print(arr0 | arr1) فهذه الطريقة ستعطينا اتحاد المؤشرين، مما يعني دمج جميع العناصر مع إزالة التكرارات كما أن كلتا الطريقتين ستعطيك نفس النتيجة، وهي اتحاد العناصر في المؤشرين.
- 8 اجابة
-
- 1
-
-
صحيح، التقاطع (`&`) بين كائنات `pd.Index` كان مدعوما في إصدارات أقدم من مكتبة `pandas`. ومع التحديثات الجديدة، قد تكون هذه العملية لم تعد مدعومة بنفس الطريقة. ولضمان التوافق مع الإصدارات الأحدث من المكتبة، يفضل استخدام الدوال المخصصة مثل `intersection`.
- 8 اجابة
-
- 1
-
-
الخطأ الذي يظهر عند تشغيل هذا الكود يرجع إلى أن عملية التقاطع (`&`) غير مدعومة مباشرة بين كائنات `pd.Index` في مكتبة `pandas`. لاستخدام عملية التقاطع بين مجموعتين من المؤشرات، يجب استخدام الدالة `intersection` بدلا من ذلك. إليك الكود المعدل: import pandas as pd arr0 = pd.Index([0,1,2,3,4]) arr1 = pd.Index([0,1,2]) print(arr0.intersection(arr1)) فهذا الكود سيعطيك التقاطع الصحيح بين المؤشرين `arr0` و `arr1`.
- 8 اجابة
-
- 1
-
-
أول خطوة هي من خلال إعدادات البريد الإلكتروني في ملف `settings.py` في مشروع جانغو الذي تعمل عليه فنقوم بإضافة إعدادات البريد الإلكتروني إلى الملف مع ضبط إعدادات SMTP الخاصة بـ Gmail. عادة يكون الملف هكذا: EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.gmail.com' EMAIL_PORT = 587 EMAIL_USE_TLS = True EMAIL_HOST_USER = 'your_email@gmail.com' # عنوان بريدك الإلكتروني EMAIL_HOST_PASSWORD = 'your_email_password' # كلمة مرور بريدك الإلكتروني بعدها يجب أن تقوم بتمكين الوصول الأقل أمانا لحساب Gmailمن خلال الذهاب إلى [رابط إعدادات الأمان لحسابك في Google](https://myaccount.google.com/security) والتأكد من تمكين الوصول الأقل أمانا. قم تقوم بإنشاء وظيفة في ملف views.py لإرسال البريد الإلكتروني وهذا هو الملف: from django.core.mail import send_mail from django.http import HttpResponse def send_test_email(request): subject = 'Test Email' message = 'This is a test email sent from Django.' email_from = 'your_email@gmail.com' recipient_list = ['recipient_email@example.com'] # البريد الإلكتروني للمستلم send_mail(subject, message, email_from, recipient_list) return HttpResponse('Email sent successfully') ثم أضف مسارا إلى ملف `urls.py` لاستدعاء دالة إرسال البريد الإلكتروني. from django.urls import path from .views import send_test_email urlpatterns = [ path('send-email/', send_test_email, name='send_email'), ]
-
لا توجد لغة بعينها لبرمجة تطبيقات الوينداوز، لكن هنالك عدة لغات برمجة شائعة لتطوير تطبيقات Windows، كلغة سي شارب التي تستخدم مع .NET Framework أو .NET Core وهي تعتبر مثالية لتطوير تطبيقات بواجهة مستخدم رسومية باستخدام Windows Forms أو WPF. لغة C++ هي الأخرى تستخدم لتطوير تطبيقات ذات أداء عالي والمميز فيها أنها تعمل بشكل مباشر مع Windows API وتستخدم مكتبات مثل MFC. أما VB.NET فهي لغة برمجة مع .NET، سهلة التعلم وتستخدم في التطبيقات البسيطة والمتوسطة وحتى لغة بايثون يمكن استخدامها لتطوير تطبيقات Windows باستخدام مكتبات مثل PyQt أو Tkinter. حتى JavaScript/TypeScript تستخدمان مع تقنيات مثل Electron لتطوير تطبيقات سطح المكتب باستخدام تقنيات الويب. فكل لغة برمجة لها مميزاتها وتناسب أنواعا مختلفة من التطبيقات، والاختيار يعتمد على متطلبات المشروع وخبرة المطور أيضا. يمكنك التوسع أكثر من هنا:
- 3 اجابة
-
- 1
-
-
العامل الذي يمكن أن نحدد من خلاله الأفضل، هو ما إذا كان تطبيق الويب الذي نود إنشاءه يتعامل مع بيانات غير متجانسة ويحتاج إلى مرونة في بنية البيانات، فإن MongoDB سيكون مناسبا كما أنه يمكن استخدام خطة MongoDB Atlas المجانية للاستضافة. أما إذا كانت البيانات تحتاج إلى علاقات معقدة وبنية صارمة، فإن MySQL هو الخيار الأفضل ويمكنك استخدام استضافة GoDaddy التي تقدم MySQL مجانا. فمن مميزات MongoDB أنها تشمل تخزين البيانات بشكل مرن باستخدام الوثائق (documents) في صيغة JSON-like، مما يجعلها مناسبة للبيانات غير المتجانسة أو المتغيرة بسرعة، فهي تتصف بأن لها مرونة عالية في التوسع الأفقي أو ما يعرف ب (horizontal scaling) وعدم الحاجة إلى تحديد بنية البيانات مسبقا، مما يتيح تعديل البيانات بسهولة. كما يوفر أداءً جيدًا في العمليات التي تتطلب قراءة وكتابة بيانات كبيرة بشكل سريع. من العيوب أنها ليست مثالية للعلاقات المعقدة بين البيانات مثل العلاقات الموجودة في قواعد البيانات العلائقية. أما الأخرى فهي قاعد بيانات علائقية (Relational Database) مثالية للعلاقات المعقدة بين البيانات باستخدام الجداول والروابط، وتوفر معاملات ACID لضمان النزاهة والاتساق في البيانات. تمتلك نظامًا بيئيًا ناضجًا مع دعم واسع وأدوات متعددة، وتوفر أداءً جيدًا في التعامل مع البيانات العلائقية والطلبات المعقدة. من العيوب أنها تتطلب تحديد بنية البيانات مسبقا، مما قد يكون مقيدا إذا كانت البيانات تتغير بشكل مستمر، كما أن التوسع الرأسي أسهل من التوسع الأفقي. يمكنك التوسع في الموضوع من هنا:
- 6 اجابة
-
- 1
-
-
كمبرمجين، لا بدّ وأننا تعرضنا لهذه المشكلة، ولا مناص منها، فلا داعي للقلق، ففي الأساس الأصل ليس في حفظ الأكواد البرمجية إنما في فهمها والمداومة على العمل، وعندما تتعلم لغة برمجة جديدة مثل Python، خصوصا في البداية فمن البديهي أن تنسى، فالبرمجة تتطلب ممارسة مستمرة وتعرضا دوريا للمفاهيم لترسيخها بشكل جيد في الذاكرة. كنصائح يمكن تقديمها، هو أن لا يكون هدفك الأساسي هو حفظ ما تتعلمه، فالمراجع والتوثيقات ما أنشئت إلا لهذا الأمر، لنرجع إليها في وقت الحاجة، ولا يمكن استظهارها عن ظهر قلب، فالتحديثات التقنية والبرمجية لا حصر لها فكيف يحصي المرء كل شاردة وواردة. ما ساعدني شخصيا على الفهم والترسيخ هو استخدام طريقة التعليم العكسي، أي أن تحاول أن تشرح ما تعلمته لشخص آخر فالتعليم يعزز الفهم ويساعد في ترسيخ المعلومات في الذهن بشكل جيد. يمكنك الاستفادة أكثر من هنا ومن الإجابات على هذا السؤال:
- 3 اجابة
-
- 1
-
-
الخدمات المصغرة هي نمط من الهندسة البرمجية يقسم التطبيقات إلى مجموعة صغيرة من الخدمات المستقلة، كل منها تعمل في عملية مستقلة وتتواصل مع بعضها البعض باستخدام واجهات برمجة التطبيقات الخفيفة والموحدة (APIs) بحيث كل خدمة تركز على تنفيذ مهمة محددة وتمتلك قاعدة بياناتها الخاصة بها، مما يتيح لها أن تكون مستقلة في التطوير، النشر، والتشغيل. لا توجد برامج بعينها تقدم هذه الخدمة، لكن توجد برامج وأدوات تدعم التطوير بهذه التقنية ك: Docker: يوفر حاويات خفيفة لتشغيل الخدمات المصغرة بشكل معزول ومستقل. Kubernetes: نظام لأتمتة نشر، توسيع نطاق، وإدارة تطبيقات الحاويات، مثالي لإدارة تطبيقات الخدمات المصغرة على نطاق واسع. Istio: خدمة ليست مفتوحة المصدر توفر طريقة سهلة لإدارة الشبكات المعقدة للخدمات المصغرة مع توفير المصادقة، الرصد، والسياسات المركزية. Spring Boot: إطار عمل شهير لتطوير الخدمات المصغرة باستخدام Java. العديد من الفوائد يمكن استخلاصها من التطوير بالخدمات المصغرة كالتوسع والمرونة حيث يمكن توسيع كل خدمة بشكل مستقل دون الحاجة إلى توسيع التطبيق بأكمله، مما يسهل التعامل مع الأحمال المتزايدة بكفاءة، كما أن كل فريق يمكن أن يعمل على خدمة مختلفة باستخدام الأدوات واللغات التي تناسب تلك الخدمة بشكل أفضل، مما يزيد من سرعة التطوير وجودته، فالخدمات المصغرة حقيقة تسهل عملية الصيانة والتحديثات المستمرة لأن التغييرات في خدمة واحدة لا تؤثر على الخدمات الأخرى وفشل خدمة واحدة لا يؤدي بالضرورة إلى تعطل النظام بأكمله، مما يعزز من استقرار النظام وكنتيجة فنظرا لاستقلالية الخدمات، يمكن نشر كل خدمة بشكل مستقل مما يسهل عمليات التسليم والنشر المستمر (CI/CD). يمكنك الاطلاع أكثر من هنا:
-
معدل الوصول أو "Rate Limiter" في تطبيقات الويب يستخدم للحد من معدل الطلبات التي يمكن أن يرسلها المستخدم أو النظام خلال فترة زمنية محددة، هذا الأمر يساعد في الحماية ضد الهجمات التي تحاول إغراق النظام بالطلبات (مثل هجمات DDoS) ويضمن توزيع الموارد بشكل عادل بين المستخدمين. ففي الشيفرة المقدمة في الصورة الأولى تظهر تعريف الحد الأقصى العالمي للطلبات حيث لا يمكن لأي مستخدم إرسال أكثر من 1000 طلب في الدقيقة الواحدة. use Illuminate\Support\Facades\RateLimiter; use Illuminate\Http\Request; /** * Bootstrap any application services. */ protected function boot(): void { RateLimiter::for('global', function (Request $request) { return Limit::perMinute(1000); }); } فهذا الجزء RateLimiter::for('global', ...) يعرف حدّا للطلبات ينطبق على جميع المستخدمين بينما هنا function (Request $request) { return Limit::perMinute(1000); } تحدد هذه الوظيفة أنه يمكن إجراء ما يصل إلى 1000 طلب في الدقيقة من أي مستخدم أو IP. في الصورة الثانية، يتم تحديد الحد الأقصى للطلبات على مستوى واجهة برمجة التطبيقات (API)، حيث يتم السماح بـ 60 طلب في الدقيقة الواحدة لكل مستخدم لكنه هنا يعتمد على وجود المستخدم المسجل فذا كان الطلب يأتي من مستخدم مسجل (أي لديه معرف)، فسيستخدم المعرف كمفتاح لمعدل الطلبات؛ وإذا كان الطلب غير مرتبط بمستخدم مسجل، يستخدم عنوان IP للمستخدم كمفتاح. RateLimiter::for('api', ...) يعرف حدا للطلبات خاص بواجهة برمجة التطبيقات. function (Request $request) { ... } تحدد هذه الوظيفة الحد الأقصى للطلبات لكل مستخدم. $request->user()?->id ?: $request->ip() هذا التعبير يقرر مفتاح الحد للطلبات: إذا كان هناك مستخدم مسجل ($request->user()?->id)، يستخدم عرف المستخدم كمفتاح. إذا لم يكن هناك مستخدم مسجل، يستخدم عنوان IP للمستخدم كمفتاح. ?: هو مشغل ثلاثي يعود بالقيمة الأولى إذا كانت غير null، وإلا يعود بالقيمة الثانية.
- 1 جواب
-
- 1
-
-
للوصول لتلك النتيجة يجب عليك تعديل كود JavaScript ليقوم بتحديث العداد تلقائيا لكل واجب منزلي وفقا للتاريخ المخزن في الحقل deadline تحتاج إلى إضافة عنصر معرّف فريد لكل عداد تنازلي داخل الحلقة لكل واجب، انتقل إلى ملف show.blade.php وهناك ستستخدم ذلك المعرّف لربط كل عداد تنازلي بتاريخ الانتهاء الخاص به. هذا هو الكود الخاص به: <tbody> @foreach ($homeworks as $homework) <tr> <td>{{ $homework->id }}</td> <td>{{ $homework->title }}</td> <td> <div class="counter wow animate__animated animate__fadeInDown"> <div id="countdown{{ $homework->id }}"></div> </div> </td> </tr> @endforeach </tbody> وذلك غير كاف بعد، لأنه يتوجب عليك تعديل شيفرة الجافا سكريبت ليأخذ التاريخ من كل عنصر div يتم إنشاؤه ويحوله إلى تاريخ يمكن استخدامه بواسطة المكتبة jquery.countdown وبعد التعديل يصبح: <script src="assest/JavaScript/jquery-3.1.1.min.js"></script> <script src="assest/bootstrap/js/bootstrap.min.js"></script> <script src="assest/jquery.countdown/js/jquery.plugin.min.js"></script> <script src="assest/jquery.countdown/js/jquery.countdown.min.js"></script> <script src="assest/jquery.countdown/js/jquery.countdown-ar.js"></script> <script> $(function() { @foreach ($homeworks as $homework) var deadline = new Date('{{ $homework->deadline }}'); $('#countdown{{ $homework->id }}').countdown({ until: deadline, format: 'odHMS' }); @endforeach }); </script> قد تواجهك مشكلة أخرى، لهذا تأكد من أن تنسيق تاريخ ووقت deadline في قاعدة البيانات متوافق مع JavaScript. يجب أن يكون تنسيق الوقت ISO 8601 ليتم تفسيره بشكل صحيح بواسطة الدالة new Date().
-
قد تكون المشكلة بسبب مشكلة في التحديثات، لهذا تأكد من أنك تستخدم أحدث إصدار من VSCode، حيث يمكن أن تحل التحديثات مشاكل أداء سابقة وحتى الإضافات قد يكون لها يد في تباطؤ الطباعة، لذا يمكن أن تجرب تعطيل الإضافات غير الضرورية أو فتح البرنامج في وضع تعطيل الإضافات أو "Disabled Extensions Mode" أو "Safe Mode" لتحديد إما إذا كانت هذه هي السبب وفي حالة ما إذا كنت تعمل على ملف كبير جدا، حاول فتح ملف أصغر لمعرفة إذا يتحسن الأداء. ومن أن جهازك لا يعاني من استهلاك مرتفع للموارد بسبب عمليات أخرى قيد التشغيل. يمكنك تعديل إعدادات VSCode أيضا لتحسين الأداء مثل تعطيل الميزات البصرية المتقدمة فقد تكون هي السبب أيضا، عادة لا يوجد حل مباشر لهذه المشكلة لأن السبب غير واضح لهذا حاول تجربة هذه الحلول الواحد تلو الآخر لمعرفة السبب.
-
وعليكم السلام. لندرس المثال جيدا، انظر عندما تفتح رابطا مختصرا من موقع مثل abdo.com ويتم تحويلك أولا إلى رابط يحتوي على google.com قبل أن يتم توجيهك إلى موقع الهبوط النهائي، فهذا غالبا يكون جزءا من تقنية لجعل الزيارة تظهر كأنها من Google. هذا يمكن أن يتم بطرق مختلفة مثل استخدام إطارات iframe التي تضمن رابط Google في صفحة وسيطة، أو بتغيير قيمة الـ HTTP referrer باستخدام جافا سكريبت لكن أحيانا تستخدم تقنية meta refresh لتحويل الزائر من خلال صفحة تحتوي على الرابط المطلوب بطريقة تغير مصدر الزيارة فهذه الطرق قد تكون فعالة لتحويل مصدر الزيارات لكن يجب استخدامها بحذر لتجنب المشاكل القانونية أو الانتهاكات لسياسات الخصوصية. يمكنك الاطلاع أكثر من خلال هذه المقالة:
-
في الحقيقة، عندما نمنح تطبيقا أو موقع ويب إذنا للوصول إلى الصور أو الميكروفون أو الكاميرا على الجهاز، فيجب أن يستخدم هذه الإمكانيات فقط أثناء استخدامنا للتطبيق أو الموقع. أما بعد إغلاق التطبيق أو الموقع، فلا ينبغي لهم أن يكونوا قادرين على الوصول إلى هذه الوظائف ما لم نكن قد منحناهم صلاحيات التشغيل في الخلفية. فتلك الصلاحيات لا تقتصر فقط على الشركات الكبيرة؛ لأنه يمكن لأي مطور برمجيات أن يطلب هذه الصلاحيات ضمن تطبيقه إذا كان ذلك ضروريا لوظائف التطبيق فلا بد من استخدام هذه الصلاحيات وفقا لسياسات الخصوصية التي يعلن عنها المطورون والتي يجب أن تحترم قوانين حماية البيانات المعمول بها في البلدان التي يتم فيها تقديم الخدمة. عادة يمكنك تفادي الأذونات غير المرغوب فيها ببساطة من خلال اتخاذ الخطوات التالية: قراءة وفهم الأذونات المطلوبة قبل تحميل التطبيق أو الدخول إلى الموقع. استخدام إعدادات الخصوصية والأمان في جهازك للتحكم في الصلاحيات التي يمكن للتطبيقات الوصول إليها. تحديث البرامج وأنظمة التشغيل لديك للاستفادة من أحدث إجراءات الأمان. استخدام تطبيقات الأمان التي توفر حماية إضافية وتتيح لك مراقبة الأذونات التي تستخدمها التطبيقات.
-
الخطأ الذي ظهر في الصورة التي قدمتها يعود إلى أن الدالة `range(len(students))` تولد قيم من 0 إلى عدد الطلاب الذي يزيد عن عدد الأوقات المتاحة في قائمة `appointment_times`. بما أن عدد الأوقات هو 4 فقط، ولكنك تحاول الوصول إلى فهرس في القائمة يتجاوز هذا العدد، فإنه ينتج عن ذلك خطأ `IndexError: list index out of range`. هذا الخطأ يحدث عندما يكون عدد الطلاب أكبر من عدد الأوقات المتوفرة في `appointment_times` وتحاول الوصول إلى فهرس غير موجود في قائمة الأوقات. لنحل هذه المشكلة، يجب التأكد من عدم تجاوز الدورة لعدد الأوقات المتاحة، أو كما في المثال التالي الذي يضمن توزيع الطلاب بطريقة تضمن عدم حدوث هذا التجاوز: students = ['جاسم', 'خلف', 'عبدالله', 'زيد', 'ممدوح'] appointment_times = ['9:00', '9:30', '10:00', '10:30'] # طباعة المواعيد لأول ثلاث طلاب for i in range(min(3, len(students))): # يضمن هذا عدم تجاوز القائمة إذا كان عدد الطلاب أقل من 3 print(f"{students[i]} بالساعة {appointment_times[i]}") # توزيع الطلاب الباقين على الموعد الأخير for i in range(3, len(students)): print(f"{students[i]} بالساعة {appointment_times[-1]}") هذا الكود سيضمن توزيع الطلاب الثلاثة الأوائل على المواعيد الثلاثة الأولى، والطلاب الباقين جميعا على الموعد الأخير (10:30)، وهذه الطريقة تعمل حتى لو كان عدد الطلاب أقل من ثلاثة.
- 3 اجابة
-
- 1
-
-
توجد عدة خطوات يجب أن تحترمها للوصول لرفع المشروع بالشكل الذي ترغب به الشركة، أول خطوة هي أن تقوم بتحضير السيرفر على لينيكس من خلال تثبيت Python والمتطلبات الأساسية: sudo apt update sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx curl خاصة بما أنك تعمل على قاعدة بيانات PostgreSQL فالأمر يوضح ذلك. ثاني خطوة هي تثبيت البيئة الافتراضية، يمكنك ذلك من خلال فتح الطرفية وتنفيذ الأمر: sudo pip3 install virtualenv mkdir ~/myproject cd ~/myproject virtualenv myprojectenv source myprojectenv/bin/activate ثم ثم بتثبيت Django و Gunicorn و psycopg2: pip install django gunicorn psycopg2 تهيئة Postgres ضرورية في هذه الحالة: `sudo -u postgres psql` `CREATE DATABASE myproject;` `CREATE USER myuser WITH PASSWORD 'password';` `ALTER ROLE myuser SET client_encoding TO 'utf8';` `ALTER ROLE myuser SET default_transaction_isolation TO 'read committed';` `ALTER ROLE myuser SET timezone TO 'UTC';` `GRANT ALL PRIVILEGES ON DATABASE myproject TO myuser;` `\q` يمكنك متابعة الخطوات والشروحات من خلال هذه المقالة:
-
تعاملنا كمستقلين مع مختلف أصحاب المشاريع حتما سيختلف من عميل إلى آخر، شخصيا مررت بالعديد من التجارب مع مختلف العملاء داخل منصات العمل الحر وخارجها، لهذا أنصحك أولا عند التفاوض على المشروع، أرسل عرضا خطيا يتضمن نطاق العمل، والمواعيد النهائية، والميزانية، وشروط الدفع (ستستغني عن هذه المرحلة في حالة تعاملك داخل منصة للعمل الحر كمستقل مثلا، وبهذا الشكل يكون هناك دليل واضح على ما تم الاتفاق عليه وكأنك قمت بتوثيق كل شيء من البداية. في الغالب يكون العمل بمبدأ سكرام واعتماد منهجية أجايل لإدارة المشاريع وتسليم المقررات أمرا يعتمده بعض العملاء من غيرهم، لهذا في حالة لم تجد أمرا مشابها في طريقة العمل يمكنك أن تقترح عقد اجتماعات منتظمة لمراجعة التقدم المحرز مع التوثيق داخل نقاش المشروع. ففي المشاريع الكبيرة مثلا، من الأفضل استخدام عقد رسمي يحدد بوضوح المسؤوليات والتوقعات لكلا الطرفين. العديد من الأمور قد تحدث فنحن المستقلون لا نستطيع أن نفرض على العملاء توظيفنا مباشرة من أول نقاش، لهذا يجب أن نردّ بسرعة عند أول استفسار ورسالة منه، وإذا بدأ صاحب المشروع بتغيير المتطلبات أو التراجع عن الاتفاقيات فيمكنك التصرف معه باحترام. ومناقشة أي قضايا وطلب شروحات بوضوح، فعليك أن تكسب العميل وتعرف كيف تتفاوض معه من أول رسالة يرسلها لك، لأن إرسال الاستفسار والرد عليه بشكل مناسب هو نصف التفاوض. يمكنك مراجعة هذه المقالة للاستفادة أكثر: نصائح للتواصل مع العملاء قبل التوظيف ومشاهدة هذا الفيديو التوضيحي:
- 4 اجابة
-
- 1
-
-
أكيد فلغة البرمجة بايثون بأطر عملها ومكتباتها لا حصر لاستخداماتها التقنية والبرمجية اليوم، لكن تبقى لغات البرمجة لها نقاط القوة والضعف في مختلف المجالات وعلى حسب احتياجاتنا كمبرمجين لها في كل مشروع محدد نهمّ بإنجازه. فبايثون، متفوقة بشكل كبير في المجالات العلمية والحوسبة. لهذا قد تسمع كثيرا بأنها اللغة المفضلة لدى العلماء والباحثين والمهندسين بسبب سهولة استخدامها وقراءتها، بالإضافة إلى توفر العديد من المكتبات والأدوات المتخصصة في مختلف المجالات. فتكملة لما ذكر في التعليق الذي سبقني، فمكتبة NumPy مثلا نجدها رائدة للحسابات العددية والجبرية وتحليل البيانات وهذه قائمة بأهم المكتبات وما المجالات المخصص لها: SciPy: مكتبة شاملة تغطي العديد من المجالات العلمية مثل الرياضيات، العلوم الفيزيائية، المعالجة الإحصائية وغيرها. Pandas: تحليل البيانات وإدارتها بطريقة فعالة. Matplotlib: مكتبة رسومية متعددة الاستخدامات لإنشاء الرسوم البيانية ثنائية وثلاثية الأبعاد. Scikit-learn: مكتبة شهيرة للتعلم الآلي أين تقدم العديد من الخوارزميات والأدوات لبناء نماذج التعلم الآلي. TensorFlow و PyTorch: مكتبات رائدة للتعلم العميق والشبكات العصبية الاصطناعية. OpenCV: مكتبة متخصصة في معالجة الصور ورؤية الحاسوب. Requests: مكتبة لإجراء طلبات الويب واستجابات الشبكة. كما أن هنالك العديد من المكتبات الأخرى المتخصصة في مجالات مثل الفيزياء، الكيمياء، البيولوجيا، الهندسة، الأمن السيبراني لهذا قلنا بأنه لا حصر لها.
- 3 اجابة
-
- 1
-
-
يتعلق الأمر بالعديد من العوامل، فمثلا لو كنت تعمل على مشروع لك وكنت في مرحلة متقدمة فيجب أن تحلل ما إذا كانت التحديثات الجديدة ضرورية أو تحمل أي إصلاحات أمنية مهمة، فقد يكون من الأفضل الاستمرار في استخدام الإصدار الحالي الذي تعمل عليه لتجنب إعادة العمل أو إحداث اضطرابات كبيرة في المشروع. وأما إذا كانت التحديثات الجديدة تحمل ميزات أو تحسينات مهمة،وكانت هنالك ثغرات أمنية في الإصدار القديم، فهنا التحديث أمر مطلوب وستجد في المستندات الرسمية كل ما تحتاجه إليه في هذا السياق، وقد يتطلب هذا إعادة اختبار المشروع بشكل شامل والتحقق من عدم وجود أي مشكلات تنشأ بسبب ذلك التحديث.
- 4 اجابة
-
- 1
-
-
لعمل ذلك أرى أنه سيتوجب عليك القيام بتعديل جدول المستخدمين لديك (users) من خلال إضافة حقل جديد لرقم الهاتف مثلا (phone_number) هذا إذا لم يكن موجودا بالفعل وجعل حقل البريد الإلكتروني مميزا أو غير مكرر لتفادي التكرار نفس الأمر بالنسبة لحقل رقم الهاتف. الأمر بسيط فهو يتطلب التعديل على منطق تسجيل الدخول ليقبل إما البريد الإلكتروني أو رقم الهاتف عن طريق البحث في جدول المستخدمين باستخدام القيمة المقدمة فواجهة تسجيل الدخول في هذه الحالة يجب أن تتضمن حقلين منفصلين للبريد الإلكتروني ورقم الهاتف. وعند تسجيل مستخدم جديد، سيطلب النظام منه إدخال البريد الإلكتروني ورقم الهاتف وسيحفظهما في جدول المستخدمين.
-
وفيك بارك الله، بالطبع! يمكننا استخدام كلاس يسمى User لتمثيل المستخدمين في قاعدة البيانات فهناك عدة طرق لتنفيذ التحقق من وجود المستخدم في قاعدة البيانات باستخدام Python، ومن بينها استخدام ما يطلق عليه ORM (Object-Relational Mapping) مثل SQLAlchemy.
-
عادة ما يفضل وضع كل فئة في ملف منفصل إذا كانت الفئة كبيرة بما يكفي أو إذا كان لها استخدام مستقل لكن يبقى ذلك ليس ضروريا، ويمكنك تجميع عدة فئات في ملف واحد خاصة إذا كانت تعتمد على بعضها البعض بشكل كبير أو إذا كانت صغيرة بما يكفي. ففي حالة ما كانت الفئات لها نفس الهدف يمكن وضعها في ملف واحد إذا كان المشروع كبيرا، لتفادي العدد الكبير من الملفات من أجل التنظيم والتنسيق.
- 3 اجابة
-
- 2
-