-
المساهمات
785 -
تاريخ الانضمام
-
تاريخ آخر زيارة
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو عبد الوهاب بومعراف
-
الخدمات المصغرة هي نمط من الهندسة البرمجية يقسم التطبيقات إلى مجموعة صغيرة من الخدمات المستقلة، كل منها تعمل في عملية مستقلة وتتواصل مع بعضها البعض باستخدام واجهات برمجة التطبيقات الخفيفة والموحدة (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
-
حسنا سأوضح لك الصورة، أولا القسم الذي يشمل لغة SQL أقصى اليسار، تشمل هذه الفئة أنظمة قواعد البيانات التي تستخدم لغة الاستعلام الهيكلية (SQL) لإدارة وتعديل قواعد البيانات الرابطية (العلائقية). الأمثلة في الصورة هي Microsoft SQL Server و MySQL و Oracle و SQLite. وتعرف هذه بأنظمة إدارة قواعد البيانات الرابطية (RDBMS). القسم الأوسط وهو لغة NoSQL تشمل هذه الفئة أنظمة قواعد البيانات التي لا تستخدم SQL وهي مصممة لمعالجة البيانات غير المنظمة أو شبه المنظمة بكفاءة أكبر، الأمثلة في الصورة هي Cassandra و MongoDB و Redis. وتعرف هذه بقواعد بيانات NoSQL. أما عن الفرق الرئيسي بين SQL و RDBMS ف SQL هي عبارة عن لغة استعلام هيكلية وهي لغة البرمجة المعيارية المستخدمة لإدارة التفاعل مع قواعد البيانات الرابطية. وهي تتيح لنا إنشاء وتعديل واستعلام البيانات المخزنة في قاعدة بيانات رابطية. أما RDBMS فهو نظام إدارة قواعد البيانات الرابطية ويشير إلى البرنامج أو النظام الذي يوفر طريقة لإنشاء وإدارة واستخدام قواعد البيانات الرابطية. ويستخدم RDBMS لغة SQL للتفاعل مع قاعدة البيانات. لذلك، SQL هي اللغة، بينما RDBMS هو البرنامج أو النظام الذي ينفذ ويستخدم SQL لإدارة قواعد البيانات الرابطية. تظهر الصورة أيضا "Program TO Run RDBMS" مع أمثلة مثل phpMyAdmin و HeidiSQL، وهي أدوات واجهة مستخدم رسومية تستخدم للتفاعل وإدارة RDBMS مثل MySQL بسهولة أكبر.
-
عنصر <div> نقوم باستخدامه لإنشاء قسم فارغ في صفحة الويب حيث يمكننا وضع أي عناصر HTML داخله، سواء نعمل مساحة داخله، أو لتجميع عناصر أخرى داخله، كما أنه يستخدم لتنظيم وتقسيم الصفحة إلى عدة أجزاء مثلا لغرض تنسيقها بلغة CSS، وهذا مثال بسيط يوضح الأمر: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>استخدام عنصر div</title> </head> <body> <div> <p>هذا نص داخل div.</p> </div> </body> </html> يمكنك الاطلاع أكثر من هنا: من خلال هذه المقالة في موسوعة حسوب: العنصر div و و
-
لا بأس فالجميع كان يجد صعوبة في التعلم والفهم في بداياته، سأحاول شرح الاستيثاق بشكل واضح ومبسط، ال Authentication هو عبارة عن عملية تحقق من هوية المستخدم أو التأكد من أن المستخدم الذي يحاول الوصول إلى نظام أو تطبيق ما هو مالك الحساب المسجّل نفسه، في Laravel مثلا يتم توفير ميزات قوية للتعامل مع الاستيثاق بطريقة سهلة وآمنة. لتجربته نقوم بتثبيت وننشئ مشروعا جديدا، وننتقل على الطرفية إلى المسار المتواجد فيه المشروع ونكتب هذا الأمر عليه: composer create-project --prefer-dist laravel/laravel project-name ولتكوين قاعدة البيانات نفتح ملف `.env` الموجود في جذر المشروع ونقوم بتعديل إعدادات قاعدة البيانات بحيث تتوافق مع البيئة التي نعمل عليها، الخطوة التالية هي الأسهل والأمتع، وهي إنشاء جدول المستخدمين في قاعدة البيانات، أو ما يعرف بعملية التهجير، فقط من خلال هذا الأمر: php artisan migrate كما قلت ف Laravel يأتي مع قوالب جاهزة للتسجيل والتحقق من هوية المستخدم. لتثبيتها، نكتب الأمر التالي: php artisan make:auth تلك القوالب ستسهل علينا أعباء كثيرة كإنشاء الملفات الجديدة الخاصة بصفحات التسجيل وتسجيل الدخول وحتى إعادة تعيين كلمة المرور، وغيرها، في النهاية نشغل الخادم من خلال الأمر: php artisan serve
- 8 اجابة
-
- 1
-
إضافة للتعليق الذي سيقني فإنه من أجل الخروج من البيئة الافتراضية (venv) في VS Code، يجب أن تفتح الطرفية وتكتب هذا الأمر: deactivate في حالة ما كنت تعمل على الوينداوز. وفي حالة نظام لينكس أو ماك، استخدم هذا الأمر: source deactivate في حالة عملها ستلاحظ أن كلمة (venv) اختفت من بداية سطر الأوامر في الطرفية. أما لتغيير المسار في VS Code، يمكنك اتباع أحد الطريقتين التاليتين: إما من خلال النقر على اسم المجلد الحالي في شريط العناوين (Title Bar) في VS Code، ثم انقر على "Open" (فتح) واختيار المجلد المطلوب. أو من خلال فتح الطرفية (Terminal) وكتابة الأمر `cd` متبوعا بمسار المجلد المطلوب، ثم الضغط على Enter.
- 2 اجابة
-
- 1
-
تقسيم النصوص باستخدام LangChain يمكن أن يتم من خلال عدة طرق سأحاول شرحها لك: يمكن أن نستخدم التقسيم الدلالي أو ما يعرف ب Semantic Segmentation وهذه العملية تتم من خلال تحسين تقسيم الملفات باستخدام تقسيم دلالي يعتمد على المعنى والسياق بدلا من القسمة العشوائية حيث في هذا السياق سيمكن تحديد نقاط محددة في النص تعبر عن بداية ونهاية كل فقرة بحيث يتم الاحتفاظ بالسياق الصحيح. كما يمكن اعتماد تقنيات تعلم الآلة مثل تعلم النصوص (NLP) للمساعدة في عملية تحديد الفقرات وتقسيم الملفات بناء على سياق النصوص. أو إن أردت فتوجد طريقة تعتمد استخدام وظائف التجزئة أو ما يعرف بال Chunking Functions التي تساعد في تقسيم النص إلى أجزاء أصغر بناء على عناصر محددة مثل الجمل أو الفقرات دون فقدان السياق. وآخر نقطة هي تقسيم النص بناء على العناصر الهيكلية فإذا كانت الملفات تحتوي على تنظيم هيكلي محدد مثل عناوين رئيسية وفرعية، يمكن استخدام هذه العناصر لتحديد نقاط التقسيم المناسبة.
- 6 اجابة
-
- 1
-
هنالك العديد من الطرق التي يمكننا استخدامها لإنشاء البوت باستخدام Python. إليك بعض الخيارات الممكنة للبدء في إنشاء بوت واتساب: فمثلا من الطرق الأشهر نجد Whapi.Cloud API أنه يعتبر خيارا جيدا، حيث يمكن استخدام Flask لإنشاء تطبيق ويب يستجيب لرسائل WhatsApp الواردة، وهذه الطريقة تتطلب امتلاكك لحساب على Twilio ورقم هاتف نشط مع تطبيق WhatsApp. توجد مقالة مستفيضة في هذا الموضوع على الأكاديمية يمكنك تصفحها من خلال الرابط التالي:
- 4 اجابة
-
- 1
-
مجال تشفير البيانات أصبح يتزايد الطلب عليه بشكل كبير في الآونة الأخيرة، بالنسبة لمارشال فهي أداة تستخدم لفك تشفير البيانات المشفرة باستخدام خوارزمية "مارشال"، ويعتمد عملها على نقاط ضعف خوازرمية التشفير، فمنها الأدوات القائمة على التحليل الثابت، الهجمات المعروفة، الهجمات العنيفة. بالنسبة لمرحلة التعلم، كمبتدئين فمن الطبيعي أن نبدأ بتعلم المفاهيم الأساسية للتشفير وهذه لمحة عنها: التشفير المتماثل والمتناظر. وظائف التجزئة. التوقيعات الرقمية. تحليل الشيفرة. بروتوكولات الاتصال الآمنة. والسر في التعلم والوصول لمستوى كبير واكتساب الخبرة يعتمد على الشغف والإرادة والالتزام بالتعلم المستمر وتحديث معلوماتك بشطل دوري ومتزامن مع التطورات الحاصلة في هذا المجال. يمكنك أن تطلع أكثر على هاته المقالات التي تتحدث حول التشفير:
- 1 جواب
-
- 1
-
لارافيل يوفر نظام مصادقة مدمجا مبنيا على كلاس Auth فهو يسهل عملية التحقق من صحة بيانات تسجيل الدخول للمستخدمين. توجد طريقتين يجب أن نقوم بتعريفهما في ملف routes/web.php، هما: GET /login: تعرض نموذج تسجيل الدخول. POST /login: تتحقق من بيانات تسجيل الدخول المرسلة وتعيد توجيه المستخدم بناء على صحتها. ثم نقوم باستخدام أمر artisan لإنشاء نموذج تسجيل الدخول من خلال: php artisan make:form Login أين سيقوم هذا الأمر بإنشاء ملف app/Http/Requests/LoginRequest.php، والذي يحتوي على قواعد التحقق من صحة بيانات تسجيل الدخول. في وحدة تحكم LoginController، نستخدم طريقة Auth::attempt للتحقق من صحة اسم المستخدم وكلمة المرور المدخلين ففي حال نجحت عملية التحقق، سيتم تسجيل دخول المستخدم تلقائيا. يمكنك قراءة هذه المقالات للتعمق أكثر: الاستيثاق في لارافل
-
الخطأ واضح في السطر رقم 72 في هذا السطر: if(isset($_POST['login'])){ فقد نسيت إغلاق القوس المنحني `}` لإنهاء الشرط `if` وهذا يعني أن كتلة الكود الخاصة بك ستظل مفتوحة بالكامل، مما يؤدي إلى حدوث خطأ التحليل. يجب أن تعدله بهذا النحو: <?php if(isset($_POST['login'])){ // ... الكود الخاص بك } // أضف القوس هنا ?> وأنصحك باستخدام مسافة بادئة متسقة. فهي تعزز قراءة الكود بشكل كبير وتجعل من السهل اكتشاف هذه الأنواع من الأخطاء، وهذه نسخة معدلة: <?php if (isset($_POST['login'])) { $conn = mysqli_connect("localhost", "root", "", "hospital"); if (mysqli_connect_errno()) { echo "Error! " . mysqli_connect_error(); } else { $ID = $_POST['ID']; $Pass = $_POST['Pass']; $query = "select * from user where ID='$ID' and Pass='Pass'"; $result = mysqli_query($con, $query); $row = mysqli_fetch_row($result); if ($row) { session_start(); $_SESSION[' ID'] = $row[0]; $_SESSION[' Fname' ] = $row[1]; $_SESSION[' Lname'] = $row[2]; $_SESSION[' Pass'] = $Pass; $_SESSION[' Email'] = $Email; header("location:profile.php"); } else { echo "incorrect ID or password, please enter a valid ID and password"; } } } // القوس المنحني الإغلاقي ?> يمكنك مراجعة هذه المقالة لإضافة التنسيق التلقائي في VSCode لعمل المسافات البادئة بشكل تلقائي:
-
المشكلة تبدو أنها تكمن في دالة `askStudentID` وبناء على الكود المقدم ووصف المشكلة فعندما يدخل المستخدم رقم تعريف الطالب، يتم استدعاء دالة `askStudentID` متكررا حتى يدخل رقم تعريف طالب صالح فبعد إدخال رقم تعريف طالب صالح، لا تستمر الدالة إلى الخطوة التالية من استرجاع معلومات الدرس وتسجيل الطالب. لحل هذه المشكلة، تحتاج إلى تعديل دالة `askStudentID` للتعامل مع حالة رقم تعريف الطالب الصالح والمتابعة مع الخطوات التالية وهذا هو الكود المعدل: function askStudentID(){ rl.question('ادخل رقم الطالب: ', student_id=>{ if(student_id.trim() == '' || isNaN(student_id)){ console.log('يرجى إدخال أرقام فقط'); askStudentID(); }else{ dataBase.get(`SELECT * FROM students WHERE student_id = ${student_id}`, (err, rowStudent)=>{ if(err){ rl.close(); dataBase.close(err=>{ if(err) return console.log(err.message); else return console.log('تم إغلاق قاعدة البيانات.'); }) return console.log(err.message); }else if(rowStudent){ // المتابعة إلى الخطوة التالية لاسترجاع معلومات الدرس وتسجيل الطالب console.log('تم العثور على رقم الطالب.'); // الجزء الباقي من الكود لاسترجاع معلومات الدرس وتسجيل الطالب }else{ console.log('رقم الطالب غير موجود.'); askStudentID(); } }) } }) } فهنا قد قم بإدخال رقم تعريف طالب صالح، سيحتوي متغير `rowStudent` على معلومات الطالب. يمكنك استخدام هذه المعلومات للمتابعة مع الخطوة التالية من استرجاع معلومات الدرس وتسجيل الطالب وهذا الإجراء يجب أن يمنع الكود من الخروج من دالة `askStudentID` مبكرا ويسمح له بالمتابعة مع بقية عملية التسجيل.
-
مشكلة اختفاء العناصر قد تكون بسبب تموضع العناصر، لهذا تأكد من أن جميع العناصر موضوعة داخل حدود التخطيط الصحيحة، مثل ConstraintLayout أو LinearLayout، ومن خصائص العرض مثل ال visibility و layout_width و layout_height فيجب أن تكون مضبوطة بشكل صحيح. لا يمكن تحديد المشكلة بالتحديد، لهذا إن لم يعمل معك فيمنك القيام بتنظيف ملفات ذاكرة التخزين المؤقت يمكن ذلك من خلال الانتقال إلى: File > Invalidate Caches / Restart. وفي بعض الأحيان، يمكن أن يؤدي إعادة تشغيل أندرويد ستوديو إلى حل المشكلة أو تحديثه. أما بالنسبة لمشكلة عدم كتابة التعليمات البرمجية التي واجهتك، تأكد من أن لوحة المفاتيح مضبوطة على اللغة الصحيحة وأن جميع الاختصارات تعمل بشكل صحيح. قد يكون بسبب مشكلة في التحديثات، لذا تأكد من أنك تستخدم أحدث إصدار من أندرويد ستوديو. انتقل إلى: File > Settings > Appearance & Behavior > System Settings > Updates للتحقق من وجود تحديثات، إذا لم تنجح الحلول الأخرى، فحاول إعادة تثبيت أندرويد ستوديو لكن تأكد من حذف جميع المجلدات والملفات المتعلقة بأندرويد ستوديو قبل إعادة التثبيت.