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

Mustafa Suleiman

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

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

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

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

    296

كل منشورات العضو Mustafa Suleiman

  1. ما يحدث أن Firebase تعمل على عرض التحقق عندما تقوم بإرسال رسالة تحقق SMS لرقم هاتف محمول في نظام Android. ويهدف هذا الإجراء إلى تحقق من أن المستخدم الذي يقوم بإدخال رقم الهاتف هو شخص حقيقي وليس روبوت. وإذا كنت ترغب في إزالة التحقق، تستطيع تعطيل خاصية التحقق في Firebase Console، من خلال الخطوات التالية: قم بتسجيل الدخول إلى Firebase Console. حدد مشروع Firebase الخاص بك. انتقل إلى "Authentication" في القائمة الجانبية اليسرى. حدد "Sign-in method" في القائمة الرئيسية. ابحث عن "Phone" وانقر على الزر "Configure". حدد "Invisible" في الخيار "Visibility" لتعطيل التحقق البصري. حفظ التغييرات. بعد تعطيل التحقق، لن يتم عرض التحقق بعد الآن وستتمكن من إدخال رمز التحقق مباشرةً في تطبيق Flutter الخاص بك. ولكن يجب مراعاة أن ذلك قد يؤثر على مستوى الأمان لتطبيقك. أي أن تعطيل التحقق البصري لا يؤثر على عملية إرسال رمز التحقق OTP، بل سيتم ما زال يتم إرسال رمز التحقق OTP إلى الرقم المحمول الذي تم إدخاله، ويتعين على المستخدم إدخال رمز التحقق لإتمام عملية تسجيل الدخول، ولكن الآن يتم إزالة الخطوة الإضافية للتحقق البصري بمتصفح Chrome.
  2. المشكلة التي تواجهها هي نتيجة تغيير مفتاح الاستضافة البعيد (remote host key) لموقع GitHub، حيث يستخدم هذا المفتاح في SSH للتحقق من أنك تتصل بالموقع الصحيح وللحماية من هجمات الوسيط الذي يمكن أن يحدث خللاً في تشفير البيانات التي تتم إرسالها بين العميل والخادم. حاول القيام بالتالي: 1- حذف المفتاح القديم من ملف known_hosts باستخدام الأمر التالي: ssh-keygen -R github.com 2- إعادة إنشاء المفتاح الخاص الجديد بالاتصال بموقع GitHub مرة أخرى باستخدام الأمر التالي: ssh -T git@github.com 3- اتبع التعليمات التي تظهر على الشاشة لإضافة المفتاح الجديد إلى ملف known_hosts. بعد ذلك، يجب أن تتمكن من تنفيذ الأمر التالي بنجاح: git push -u origin main والجدير بالذكر أنه إذا كنت لا تزال تواجه مشاكل في SSH مع GitHub، تستطيع التحقق من ملف التسجيل (log file) للـ SSH عن طريق إضافة -v إلى الأمر ssh. أي تنفيذ الأمر كالتالي: ssh -vT git@github.com لتشغيل SSH في وضع التفاصيل (verbose mode) وعرض السجلات التفصيلية للاتصال. وستعطيك هذه السجلات معلومات أكثر تفصيلاً عن الأخطاء التي قد تواجهها في SSH وسبل حلها.
  3. الخطأ الأول يشير إلى وجود خطأ في تنسيق ملف manifest.json المستخدم في تطبيق الويب، حيث يتم استخدام ملف manifest.json لتحديد بعض المعلومات حول التطبيق مثل الاسم واللون والرمز الخاص به. الخطأ الثاني يشير إلى وجود خطأ في استخدام المكونات المرتبطة بـ React، حيث أن هناك مشكلة في القيمة الممنوحة لحقل النموذج (form field) ، وإذا كان الحقل غير قابل للتغيير يجب تعيين خاصية "readOnly" لهذا الحقل، وإذا كان الحقل قابل للتغيير فعليك تحديد خاصية "onChange" للسماح للمستخدمين بتغيير الحقل. وتستطيع استخدام خاصية "defaultValue" إذا كنت تريد جعل الحقل قابلًا للتغيير ولكن دون الحاجة إلى إعادة تعيين القيمة الموجودة. مثال عن كيفية استخدام الخاصية "onChange" في مكون React لحقل نموذج: import React, { useState } from 'react'; function ExampleForm() { const [value, setValue] = useState(''); const handleChange = (event) => { setValue(event.target.value); }; return ( <div> <label htmlFor="exampleInput">Example Input:</label> <input type="text" id="exampleInput" value={value} onChange={handleChange} /> </div> ); } أيضًا تستطيع استخدام الخاصية "defaultValue" في حالة تحديد القيمة الافتراضية للحقل، كما يلي: import React from 'react'; function ExampleForm() { return ( <div> <label htmlFor="exampleInput">Example Input:</label> <input type="text" id="exampleInput" defaultValue="Example Value" /> </div> ); } export default ExampleForm; في الكود السابق، تم استخدام الخاصية "defaultValue" لتحديد القيمة الافتراضية لحقل النموذج بـ "Example Value". ولكن يجب ملاحظة أن هذا الحقل سيظل قابلاً للتعديل ويمكن للمستخدمين تغيير القيمة الموجودة. إذا كنت ترغب في جعل الحقل غير قابل للتعديل، فيجب استخدام خاصية "readOnly" كما يلي: import React from 'react'; function ExampleForm() { return ( <div> <label htmlFor="exampleInput">Example Input:</label> <input type="text" id="exampleInput" value="Example Value" readOnly /> </div> ); } export default ExampleForm; وهنا، تم استخدام الخاصية "readOnly" لجعل الحقل غير قابل للتعديل ومنع المستخدمين من تغيير القيمة الموجودة.
  4. الأمر يتوقف على الوقت المتاح لك وعلى مستواك في البرمجة والدراية بمفاهيم مجال الحاسوب والويب. لذلك إذا كان لديك الوقت الكافي، فعليك بتعلم مسار علوم الحاسوب بالكامل، فالأمر يستحق فعلاً وقد تم شرح السبب في النقاشات التالية: وإذا كان ليس لديك وقتٍ كاف أو تريد الحصول على وظيفة في اقرب وقت، فتستطيع دراسة أساسيات جافاسكريبت فقط مع تنفيذ مشروع للتطبيق على ما تعلمته، وبدون تطبيق ما تعلمته على مشروع فأنت لم تتعلم شيئًا بكل صراحة. لكن قبل تعلم جافاسكريبت أنت بحاجة إلى تعلم أساسيات HTML وCSS وأنت بحاجة إلى تعلمها بلا شك سواء كنت مطور واجهات أمامية أو خلفية. لذلك في رأي الإنتقال مباشرًة الباك إند بدون نظرة واسعة حول مفهوم الويب وبناء مشروع في الواجهة الأمامية وتعلم الأساسيات فقط به، سيصعب عملية التعلم كثيرًا عليك. الأمر الذي يعود بنا إلى ضرورة تعلم الأساسيات وهو ما توفره دورة علوم الحاسوب، أردت فقط توضيح أنك ستسير في دائرة مفرغة في حالة تخطي الأساسيات. ودائمًا ستعود لتعلمها، فلما لا تبدأ بداية صحيحة والدورة ليست كبيرة، وبعد الإنتهاء منها ستسطيع تعلم PHP ولارافيل بسهولة أكبر حيث أنك ستكون قد تجهزت وعقلك استوعب المفاهيم البرمجية وامتلكت نظرة شاملة عن الويب وأنظمة التشغيل والتفكير المنطقي الصحيح. فمسارات دورة علوم الحاسب هي: أساسيات البرمجة أنظمة التشغيل ونظام لينكس قواعد البيانات إلى عالم الويب البرمجة كائنية التوجه الخوارزميات وبنى المعطيات أنماط التصميم أساسيات هندسة البرمجيات ومسارات دورة PHP هي: أساسيات إطار العمل Laravel بناء شبكة تواصل اجتماعي تشبه إنستغرام إنشاء RESTful API باستخدام Laravel متجر إلكتروني لبيع الكتب تطوير نظام إدارة محتوى تطبيق لتقييم الأماكن على الخرائط تطبيق مشاركة فيدوهات تطوير موقع إعلانات مبوبة تطوير قوالب ووردبريس تطوير قالب ووردبريس أخباري تطوير متجر إلكتروني في ووردبريس عبر ووكومرس وكما ترى بدخولك مباشرًة إلى دورة PHP أنت تتخطى الكثير من الأساسيات وستحتاج إلى العودة لتعلمها أو ستواجه بطيء في عملية التعلم في حال عدم العودة.
  5. لا يوجد أي وسيلة سوى استخدام الـ API الخاص بالواتساب، مع الإلتزام بعدد الرسائل المسموح به وهو 80 رسالة في الثانية وتشمل الرسائل الواردة والمرسلة والوسائط أيضًا، وبحد أقصى 500 رسالة في الثانية الواحدة. أما البرامج التي لا تستخدم الـ API فهى تعتمد على الإرسال من رقم هاتف عادي لديه حساب واتساب تجاري، ولكن إذا تم التبليغ عن الرقم أنه مزعج فسيتم حظر الحساب بلا شك. لذلك يجب إرسال محتوى قيم وغير مزعج وعلى فترات متباعدة، واستهداف الفئة الصحيحة المهتمة. حدود الرسائل بالنسبة لرقم هاتف تجاري بإمكان الأرقام التي لم تقم بتقديم تحقيق لهويتها، إرسال 250 جهة اتصال فريدة خلال فترة 24 ساعة متتالية، وبمجرد التحقق من Facebook Business Manager الخاص بك، يمكنك تحقيق إحدى فئات حدود الرسائل أدناه: إرسال رسائل إلى 1,000 جهة اتصال فريدة في فترة 24 ساعة متتالية. إرسال رسائل إلى 10,000 جهة اتصال فريدة في فترة 24 ساعة متتالية. إرسال رسائل إلى 100,000 جهة اتصال فريدة في فترة 24 ساعة متتالية. إرسال رسائل إلى جهات اتصال فريدة غير محدودة في فترة 24 ساعة متتالية. يرجى ملاحظة أن حدود الرسائل تنطبق فقط على الرسائل التي تبدأها الأعمال وتسمى قوالب الرسائل (message templates). تقييم جودة رقم الهاتف وحالته: تشير تقييم جودة رقم الهاتف وحالته إلى رضا العملاء عن جودة المحادثات التي تجريها الأرقام التجارية، ويمكنك العثور على هذه البيانات في Facebook Business Manager. ويتم تحديد تقييم الجودة بواسطة مجموعة من العوامل، وتشمل عدد الحجب من العملاء، وتكرار الرسائل الصادرة مثل الإشعارات أو الرسائل الترويجية ووقت الاستجابة.، وهناك ثلاثة تقييمات جودة: عالي (أخضر) متوسط (أصفر) منخفض (أحمر) للحصول على تقييم جودة جيد، يجب تجنب حجب رقم هاتفك عن طريق إرسال رسائل عالية الجودة فقط والتي تتعلق بمخاطبيك. عند حجب رقم هاتفك، سينخفض تقييم جودته من عالي إلى متوسط أو منخفض. يمكن أن يؤثر التغيير في تقييم الجودة على حالة رقم هاتفك، وهناك خمس حالات في المجموع: قيد الانتظار: الحالة التي تسبق فحص سياسة التجارة (Commerce Policy). غير متصل: الحالة التي يفشل فيها صاحب العمل التجاري في إجتياز فحص سياسة التجارة أو قام بإلغاء حساب API الخاص بواتساب. متصل: الحالة الافتراضية. تحذير flagged: الحالة التي يصل تقييم الجودة فيها إلى منخفض، إذا تحسنت في غضون 7 أيام إلى متوسط أو عالي، فسيعود الحال إلى "متصل". وإذا لم يحدث ذلك، سيقوم واتساب بإعادة حالة رقم الهاتف إلى "متصل" ولكن بحدود رسائل أقل على الرقم. مقيد: الحالة التي يصل فيها الرقم إلى حدود الرسائل بينما يكون التقييم ضعيف. وتلك الشركات التي توفر خدمات إرسال الرسائل، فهي تستخدم الـ API الخاص بواتساب فلا سبيل غير ذلك، حيث أن فيسبوك هي المالكة لواتساب وتتيح API من خلالها فقط. وتستطيع معرفة المزيد عن WhatsApp Business و WhatsApp API من خلال الموقع الرسمي.
  6. للوصول إلى وظائف الأجهزة المختلفة في لغة بايثون، فعادة ما يتم استخدام مكتبات معينة توفر واجهات برمجية التطبيقات (APIs) لتفاعل مع تلك الوظائف. مثلاً، تستطيع استخدام مكتبة OpenCV للتفاعل مع كاميرا الهاتف، أو استخدام مكتبة pyautogui لتشغيل وظائف لوحة المفاتيح والماوس، وهكذا. وفيما يلي بعض الأمثلة على كيفية بناء بعض هذه الدوال: 1- إغلاق البرامج في الخلفية والبرامج غير المستخدمة: سنستخدم مكتبة psutil للوصول إلى معلومات حول العمليات الجارية في النظام، ثم استخدام دالة kill() لإغلاق تلك العمليات. import psutil # get all running processes for proc in psutil.process_iter(['pid', 'name']): try: # get process details as a named tuple process_info = proc.as_dict(attrs=['pid', 'name']) # check if the process is not being used if process_info['name'] not in ['process1', 'process2']: # kill the process process = psutil.Process(process_info['pid']) process.kill() except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): pass 2- إيقاف تشغيل الجهاز بعد انتهاء تثبيت برنامج معين: بإمكانك الإعتماد على دالة os.system() لتشغيل أوامر النظام الأساسية، وذلك عن طريق تمرير سلسلة نصية تحتوي على الأمر الذي يجب تشغيله. لإيقاف تشغيل الجهاز، تستطيع استخدام الأمر "shutdown /s /t 1"، والذي يغلق النظام بعد ثانية واحدة. يمكن استخدام دالة subprocess.call() لتشغيل الأمر. import subprocess # install the program subprocess.call(['python', 'setup.py', 'install']) # shutdown the system subprocess.call(['shutdown', '/s', '/t', '1']) 3- تنزيل برنامج فقط بواسطة الرابط من الممكن تنفيذ ذلك من خلال مكتبة requests لإرسال طلب HTTP GET للرابط المحدد وتنزيل الملف المرتبط به. مثلاً استخدم الكود التالي لتنزيل برنامج VLC Media Player من موقعه الرسمي باستخدام الرابط المباشر: import requests url = "https://get.videolan.org/vlc/3.0.16/win64/vlc-3.0.16-win64.exe" r = requests.get(url) with open("vlc.exe", "wb") as f: f.write(r.content) حيث أن الكود يرسل طلب GET للرابط المحدد ويقوم بتخزين المحتوى الذي يتم تلقيه كملف "vlc.exe" في الدليل الحالي، وتستطيع استخدام هذا الكود لتنزيل أي برنامج آخر عن طريق استبدال الرابط المحدد برابط الملف المراد تنزيله. 4- تشغيل الكاميرا والمايك في اللابتوب: هناك مكتبة OpenCV لتشغيل الكاميرا في اللابتوب ولقطات الفيديو والصور، ومن خلال الأمر cv2.VideoCapture(0) تستطيع فتح الكاميرا وبعدها يتم التقاط الفيديو والصور باستخدام دالة cap.read(). أما بالنسبة لتشغيل المايك في اللابتوب، فهناك مكتبة PyAudio، ويتم ذلك باستخدام الدالة pyaudio.PyAudio() لفتح معدات التسجيل و pyaudio.Stream() لتسجيل الصوت. أي بإمكانك استخدام العديد من المكتبات المدمجة في Python للوصول إلى وظائف الأجهزة والبرامج.
  7. السؤال غير مفهوم بعض الشيء، ولكن إذا فهمته بشكل صحيح فربما تحتاج إلى نسخ ملف الصفحة بشكل صحيح إلى الجهاز الذي تريد تشغيله عليه. هناك حلان: الأول هو نسخ مجلد المشروع بالكامل أي نسخ ملفات HTML و CSS ووضعها على فلاشة مثلاً أو رفعها على جوجل درايف أو أي موقع ثم تحميلها على الجهاز الآخر. بعد ذلك عليك بتشغيل المشروع على الجهاز الآخر عبر محرر الأكواد VScode أو تشغيل ملف HTML مباشرًة إذا أردت ولكن يجب أن يكون ملف CSS في نفس المكان معه أو عليك بالإشارة إلى مسار ملف CSS بشكل صحيح داخل ملف HTML. وقد يفيدك أيضًا استخدام إضافة Live server لرؤية التعديلات التي تجريها على الموقع دون الحاجة إلى إعادة تحديث الصفحة. الثاني هو رفع المشروع على استضافة ثم نسخ الرابط لتصفح المشروع على جهاز آخر، وتستطيع فعل ذلك عبر استضافة مجانية مثل netlify، وكل ما عليك فعله هو تسجيل الدخول للاستضافة من خلال إنشاء حساب ثم رفع مجلد المشروع وستحصل على رابط لتصفح موقعك. وقم بقراءة التعليقات في النقاش التالي:
  8. إذا قمت برفع المشروع بشكل يدوي على Netlify أي من خلال رفع مجلد المشروع نفسه وليس من خلال مستودع GitHub، فستحتاج إلى إعادة رفع المشروع من جديد في كل مرة تقوم بتغيير الكود الخاص بالمشروع. ولذلك الحل هو رفع المشروع عن طريق مستودع GitHub: بعد تسجيل الدخول، يجب عليك النقر على الزر "New site from Git" لإنشاء موقع جديد. ستحتاج إلى السماح لـ Netlify بالوصول إلى حساب GitHub الخاص بك. حدد مستودعك (repository) في القائمة المنسدلة. بعد ذلك، يمكنك النقر على الزر "Deploy site" لنشر مشروعك. بعد الانتهاء من النشر، سيتم توفير رابط URL لمشروعك على Netlify. يمكنك النقر عليه لعرض التطبيق الخاص بك. والآن عند عمل أي تغييرات على الكود ونشرها على المستودع من خلال الأمر push سيتم عمل redeploy أي إعادة نشر للموقع بالتغييرات الجديدة دون تدخل منك. وأيضًا تستطيع ربط المشروع الحالي بمستودع GitHub من خلال الضغط على Site settings في Netlify ثم إختيار Build & deploy ثم إختيار Link repository. بخصوص الظهور على محركات البحث و تحسين الـ SEO أولاً عليك بإنشاء حساب على Google search console ثم إضافة موقعك لكي يظهر على جوجل بشكل سريع وتراقب الترافيك والبيانات الخاص به، وستظهر بترتيب أعلى في جوجل. ومن الأفضل أيضًا توفير sitemap.xml على الموقع حتى يتمكن Google من العثور على جميع الصفحات والتحديثات. وبمجرد التسجيل وإضافة رابط موقعك وتأكيد أنك مالك الموقع، سيظهر لك نافذة البيانات كالتالي، وعليك بإرسال طلب بأرشفة موقعك من خلال الضغط على URL Inspection ثم وضع رابط موقعك ثم إختيار Request indexing. وانتظر فترة 48 ساعة وسيظهر موقعك وتستطيع البحث عنه باسم الموقع في جوجل أو الرابط.
  9. أنا لا أعرف ما هو مستواك الحالي، لكن الغالبية يقعوا في فخ خطير وهو الولع بتعلم التقنيات والإنتقال السريع من تقنية إلى أخرى دون تنفيذ مشاريع كبيرة وحقيقية بواسطة تلك التقنيات. وأنا هنا لا أقصد مشروع واحد فقط، فصدقني ستكتشف أنك بحاجة إلى تنفيذ المشروع مرة أخرى في بدايات تعلمك حتى تصبح قادر فعلاً على قول أنا قمت بتنفيذ هذا المشروع واستفدت منه حقًا. وما أقصده إذا كنت تقوم بتنفيذ المشاريع من خلال رؤية شروحات سواء فيديو أو مقالات، فعليك بتنفيذ المشروع مرة أخرى بمفردك، وستحقق استفادة بنسبة 50% فقط إذا لم تقم بإعادة المشروع بمفردك. وما أنت بحاجة إلى التركيز عليه حقًا في الوقت الحالي هو بناء المشاريع، فلن تحصل على وظيفة بدون بناء مشاريع حقيقية واكتساب الخبرة خاصًة أنك تستخدم React التي تتطلب القيام بثلاثة مشاريع على الأقل بحجم متوسط مثلاً واستخدام Redux toolkit و Authentication & Authorization واستخدام API لتصبح قادر على القيام بمهامك الوظيفية في البداية. ويا حبذا لو تعلمت الأنيميشن للواجهة من خلال إطار GSAP. والمشاريع التي أنت بحاجة إلي بنائها، هي متجر إلكتروني كامل وبواجهة مستخدم جيدة، وأيضًا لوحة تحكم للمتجر وهي مشروع مستقل بذاتها. ومشروع آخر لتطبيق شات بالصوت والفيديو أو موقع تواصل إجتماعي لكن بفكرة جديدة مثلاً ويشمل تسجيل الدخول والخروج وإظهار الحالة وإرسال الرسائل. فكرة مشروع آخر هي إنشاء تطبيق ويب يسمح للمستخدمين بإدارة الفواتير والمدفوعات والمشتريات، ويمكن أن يشمل هذا التطبيق ميزات مثل الفواتير الشهرية وإشعارات التحصيل والتقارير المالية. فكرة مشروع آخر هي إنشاء نظام محاسبي ERP. وتحتاج إلى التأكد من تعلم المواضيع والتقنيات التالية بشكل جيد جدًا: State management Authentication &Authorization في React Lazy loading Server side rendering وذلك من خلال تعلم Next.js Continuous integration باستخدام Jenkins بعد ذلك عليك بتعلم التقنيات المتقدمة Node.js: Security best practices Logging & Auditing Authentication & Authorization Socket.io Swagger Mocha testing Error handling User management Saving files in database or file system (Multer) Data export & Visualization Payment integration with PayPal تعلم GraphQL بعد ذلك تستطيع زيادة مهاراتك بالقراءة والتعلم عن تصميم واجهات جيدة للمستخدم UI/UX ومباديء التصميم والألوان وخلافه، وتستطيع تعلم قواعد البيانات الأخرى التي تختلف عن MongoDB مثل PostgreSQL أو MySQL. وأيضًا تعلم تقنية Docker لإدارة الأجزاء المختلفة من التطبيقات وتحسين استجابية التطبيقات وتشغيل العديد من الخوادم في وقت واحد. بالإضافة إلى تعلم تقنيات التحسين الأخرى لتحسين أداء التطبيقات، مثل تقنية caching وتقنيات تحسين أوقات الاستجابة. لكن ركز أولاً على ما هو مطلوب منك في الوظيفة أي الأساسيات فقط وقم ببناء المشاريع، ثم قم بزيادة مهاراتك مع الوقت.
  10. إذا كان السؤال متعلق بدورة بايثون فأرجو منك طرحه أسفل فيديو الدورة، وإذا كان غير ذلك، فإليك الشرح: سأفترض أنك تستخدم SQLite كقاعدة بيانات وتستخدم Flask-WTF لإنشاء النماذج. خطوة 1: إنشاء نموذج HTML ستحتاج إلى إنشاء نموذج HTML لإدخال البريد الإلكتروني وكلمة المرور الجديدة. وهنا مثال بسيط لنموذج إعادة تعيين كلمة المرور: <!-- reset_password.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Reset Password</title> </head> <body> <h1>Reset Password</h1> <form method="POST"> {{ form.hidden_tag() }} <p> {{ form.email.label }}<br> {{ form.email(size=30) }} </p> <p> {{ form.new_password.label }}<br> {{ form.new_password(size=30) }} </p> <p> {{ form.confirm_password.label }}<br> {{ form.confirm_password(size=30) }} </p> <p>{{ form.submit() }}</p> </form> </body> </html> خطوة 2: إضافة مسار جديد إلى التطبيق Flask يجب أن تقوم بإنشاء مسار جديد لإعادة تعيين كلمة المرور، وتستطيع ذلك باستخدام الديكوريتور @app.route كما يلي: # app.py from flask import Flask, render_template, request, flash, redirect, url_for from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, SubmitField from wtforms.validators import DataRequired, Email, EqualTo from werkzeug.security import generate_password_hash, check_password_hash import sqlite3 app = Flask(__name__) app.secret_key = 'secret' # Define a FlaskForm for password reset class PasswordResetForm(FlaskForm): email = StringField('Email', validators=[DataRequired(), Email()]) new_password = PasswordField('New Password', validators=[DataRequired()]) confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('new_password')]) submit = SubmitField('Reset Password') @app.route('/reset_password', methods=['GET', 'POST']) def reset_password(): form = PasswordResetForm() if form.validate_on_submit(): # Check if the email address exists in the database conn = sqlite3.connect('database.db') cursor = conn.cursor() cursor.execute('SELECT * FROM users WHERE email = ?', (form.email.data,)) user = cursor.fetchone() conn.close() if user: # Update the user's password hash in the database conn = sqlite3.connect('database.db') cursor = conn.cursor() password_hash = generate_password_hash(form.new_password.data) cursor.execute('UPDATE users SET password_hash = ? WHERE email = ?', (password_hash, form.email.data)) conn.commit() conn.close() flash('Password reset successful', 'success') return redirect(url_for('login')) else: flash('Email address not found', 'error') return render_template('reset_password.html', form=form) خطوة 3: إضافة رابط HTML الخاص بإعادة تعيين كلمة المرور عليك أن تقوم بإنشاء رابط HTML الخاص بإعادة تعيين كلمة المرور وإضافته إلى واجهة المستخدم الخاصة بنا. مثال بسيط لإضافة الرابط: <!-- login.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Login</title> </head> <body> <h1>Login</h1> {% with messages = get_flashed_messages() %} {% if messages %} <ul class="flashes"> {% for message in messages %} <li>{{ message }}</li> {% endfor %} </ul> {% endif %} {% endwith %} <form method="POST"> {{ form.hidden_tag() }} <p> {{ form.email.label }}<br> {{ form.email(size=30) }} </p> <p> {{ form.password.label }}<br> {{ form.password(size=30) }} </p> <p>{{ form.submit() }} <a href="{{ url_for('reset_password') }}">Forgot password?</a></p> </form> </body> </html> هنا نضيف رابطًا جديدًا باستخدام url_for('reset_password')، وهذا سيقوم بتوليد رابط URL لمسار إعادة تعيين كلمة المرور الذي قمنا بإنشائه في الخطوة 2. خطوة 4: إضافة قالب HTML لصفحة إعادة تعيين كلمة المرور نحتاج أيضًا إلى إنشاء قالب HTML جديد لصفحة إعادة تعيين كلمة المرور، ويجب أن يحتوي هذا القالب على نموذج يسمح للمستخدم بإدخال بريده الإلكتروني وكلمة المرور الجديدة. إليك مثال بسيط على كيفية إنشاء قالب HTML لصفحة إعادة تعيين كلمة المرور: <!-- reset_password.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Reset Password</title> </head> <body> <h1>Reset Password</h1> {% with messages = get_flashed_messages() %} {% if messages %} <ul class="flashes"> {% for message in messages %} <li>{{ message }}</li> {% endfor %} </ul> {% endif %} {% endwith %} <form method="POST"> {{ form.hidden_tag() }} <p> {{ form.email.label }}<br> {{ form.email(size=30) }} </p> <p> {{ form.new_password.label }}<br> {{ form.new_password(size=30) }} </p> <p>{{ form.submit() }}</p> </form> </body> </html> في الكود السابق، يتم استخدام نموذج FlaskForm الذي تم إنشاؤه في الخطوة 3 لإنشاء حقول البريد الإلكتروني وكلمة المرور الجديدة، وعند الضغط على الزر "إرسال" ، سيتم إرسال النموذج إلى مسار Flask الذي قمنا بإنشائه في الخطوة 2.
  11. يمكنك الرجوع في أي خطوة قمتي بها إذا حدث أي مشكلة، ونحن هنا نحاول إيجاد حلول للمشكلة التي تواجهنا في الوقت الحالي.
  12. الرسالة التالية: 2 files found with path 'androidsupportmultidexversion.txt'. Adding a packagingOptions block may help, please refer to تعني أن هناك ملفين يحملان نفس الاسم "androidsupportmultidexversion.txt" وموجودان في مجلدات مختلفة في مشروع تطبيق Android. وقد يكون هذا الخطأ سببًا في فشل عملية بناء التطبيق، أيضًا قد يحدث إذا كان هناك اعتمادات (dependencies) متعددة تحمل نفس الاسم في مشروع التطبيق، والتي تحتوي على ملفات بنفس الاسم. حاولي إضافة كود إلى ملف الإعدادات الرئيسي للتطبيق (build.gradle)، وذلك باستخدام بلوك "packagingOptions"، حيث يتم تحديد الأسماء المستخدمة للملفات المتعددة وتحديد كيفية التعامل معها. فمثلاً، تستطيعي إضافة الكود التالي إلى build.gradle: android { // ... packagingOptions { pickFirst 'androidsupportmultidexversion.txt' } } يتم استخدام "pickFirst" هنا لتحديد أن يتم اختيار النسخة الأولى من هذا الملف المكرر وتجاهل النسخة الثانية، والتي يتم تحميلها من مكتبات أخرى أو تعتمد عليها. بعد إضافة هذا الكود، يجب تشغيل عملية بناء جديدة للتطبيق للتأكد من أن المشكلة تم حلها.
  13. Redux هي إطار عمل (framework) لإدارة الحالة (state management) في تطبيقات React JS. وظيفة Redux هي تخزين الحالة العامة للتطبيق (global state) في مكان واحد وتمكين مكونات التطبيق من الوصول إلى هذه الحالة وتعديلها بسهولة. وتساعد Redux في حل مشكلة إدارة الحالة في تطبيقات React JS، حيث تزداد صعوبة إدارة الحالة بزيادة حجم التطبيق وتعقيداته، من خلال تخزين الحالة في Redux في مخزن واحد يسمى "store"، ويمكن لأي مكون في التطبيق الوصول إلى الحالة وتعديلها باستخدام "actions" و "reducers"، مما يجعل إدارة الحالة في التطبيق أكثر سهولة وتنظيمًا. وتستطيع استخدام Redux في تطبيقات React JS لتنظيم الحالة العامة للتطبيق وتبسيط عملية إدارتها وتعديلها، وأيضًا في تطبيقات React Native، Angular، Vue.js وغيرها من الإطارات الأخرى. مثال بسيط يوضح الفكرة لك: لنفترض أن لدينا تطبيق React JS لعرض مجموعة من الكتب، حيث يمكن للمستخدمين عرض الكتب المتاحة وإضافة كتاب جديد إلى المكتبة، نستطيع هنا استخدام Redux في هذا التطبيق لإدارة حالة الكتب وتحديثها. في البداية، يتم إنشاء مخزن Redux (store) الذي يحتوي على الحالة العامة للتطبيق، وهي عبارة عن قائمة من الكتب. ثم إنشاء "actions" للتفاعل مع الحالة، مثل إضافة كتاب جديد، وتحديث حالة الكتب المتاحة. بعد ذلك ننشيء"reducers" للتحكم في تغيير الحالة، مثل إضافة كتاب جديد إلى القائمة، واستخدام هذه العمليات في المكونات المختلفة في التطبيق، وذلك باستخدام مكتبة "react-redux" التي تمكن المكونات من الوصول إلى الحالة وتعديلها. ويجب عليك تعلم الإصدار الحديث من Redux المعروف باسم Redux toolkit. وأنصحك بقراءة النقاشات التالية فهي ستوف تجيب على سؤالك بشكل واسع:
  14. المشكلة التي تشيري إليها في الصورة هي: ‘ Cannot fit requested classes in a single dex file (# methods: 137997 > 65536) و تحدث عندما يتم تجاوز الحد الأقصى لعدد الطرق المسموح به في تطبيق Android، حيث يستخدم Android Dalvik Executable (DEX) تنسيقًا مخصصًا لتشغيل التطبيقات على منصة Android، ويحتوي على قاعدة بيانات لجميع الطرق المستخدمة في التطبيق. ويتم فصل التطبيقات إلى عدة ملفات DEX عندما يتم بلوغ الحد الأقصى لعدد الطرق في ملف DEX الواحد، ولكن في بعض الأحيان قد تكون عدد الطرق أكبر من الحد الأقصى المسموح به لملف DEX الواحد، ومن ثم يظهر رسالة الخطأ السابقة. ولتفعيل تجزئة الأساسيات، يجب إضافة مكتبة Multidex إلى ملف build.gradle للتطبيق باستخدام الكود التالي: implementation 'com.android.support:multidex:1.0.3' ثم عليك بتفعيل تجزئة الأساسيات في defaultConfig بإضافة السطر التالي: multiDexEnabled true مثال: defaultConfig { ... multiDexEnabled true } وإذا استمرت المشكلة أي بعد تجربة الحلول السابقة، حاولي إضافة الكود التالي إلى ملف الإعدادات الرئيسي للتطبيق: <application android:name=".MyApplication" ... > ... </application> وعندما يتم تشغيل التطبيق، سيقوم نظام Android بتشغيل MyApplication بدلاً من التطبيق الافتراضي، مما يسمح بزيادة حدود الطرق المسموح بها وتفادي مشكلة "Cannot fit requested classes in a single dex file (# methods: 137997 > 65536)".
  15. برمجة نواة التشغيل من الصفر هو عملية تتطلب مهارات برمجية عالية وخبرة واسعة في مجال نظم التشغيل، مما يعني أنه يجب عليك الاستعداد لدراسة الكثير من المفاهيم والتقنيات المتعلقة بنظم التشغيل وعمليات التشغيل. في البداية، يجب عليك دراسة لغة البرمجة التي ستستخدمها في برمجة نواة التشغيل، مثل لغة C أو C++، ومن ثم، تستطيع البدء في برمجة النواة بالاعتماد على مكتبات النظم التشغيل المختلفة المتاحة، مثل POSIX، ومكتبات مايكروسوفت Windows API، ومكتبات BSD. وتشمل عملية برمجة نواة التشغيل عدة مراحل، منها: مرحلة التشغيل الأولي في هذه المرحلة، يتم تهيئة بيئة النظام وتحميل النواة في الذاكرة الرئيسية. مرحلة التهيئة تهتم المرحلة بإعداد النظام للعمل مع الأجهزة المختلفة المتصلة به، مثل المعالج والذاكرة ووحدات التخزين والشبكات. مرحلة الجدول الزمني يتم تحديد كيفية توزيع الوقت والموارد بين العمليات المختلفة المشغلة على النظام. مرحلة النظام الملفات هذه المرحلة يتم إدارة وتنظيم البيانات المخزنة في وحدات التخزين المختلفة على النظام. وبخصوص المصادر العربية، فلن تجد عزيزي ولا تتعب نفسك بالبحث، فضالتك ستجدها فقط في المحتوى الأجنبي لكون الأمر متخصص وبحاجة إلى خبرة كبيرة.
  16. الخطأ بسبب تاريخ غير صالح يتم استخدامه في التطبيق الذي تحاولي تشغيله، وتحديدًا التاريخ المستخدم في التطبيق ليس قابلاً للتحليل بسبب وجود علامات غير صالحة أو أخطاء في تنسيق التاريخ. عليك بالتحقق من التاريخ المستخدم في التطبيق والتأكد من أنه مكتوب بشكل صحيح وفقًا لتنسيق التاريخ الصحيح. وتستطيعي استخدام الأدوات المتاحة في أندرويد ستوديو للتحقق من صحة التاريخ وتنسيقه، وأيضًا استخدام مكتبات Java التي تتضمن الدوال الخاصة بالتحويل بين التواريخ. وقد يكون السبب أن لغة النظام لديكِ باللغة العربية، لذلك حاولي أولاً تغيير لغة التاريخ إلى الإنجليزية في الويندوز وضبط المنطقة الزمنية، وإذا استمرت المشكلة حاولي تغيير لغة النظام إلى الإنجليزية وإعادة تشغيل أندرويد استوديو بعد أي تعديل مما سبق. وأرجو قراءة النقاش التالي، فهو يتعلق بنفس المشكلة الخاصة بك:
  17. الخطأ الذي يظهر لك هو: An error occurred while resolving packages: Project has invalid dependencies: com.unity.render-pipelines.universal: Package [com.unity.render-pipelines.universal@14.0.7) cannot be found وتستطيع هذا الخطأ في برنامج Unity عن طريق إجراء الخطوات التالية: التأكد من أن الإصدار المذكور بالخطأ "com.unity.render-pipelines.universal@14.0.7" مثبت بشكل صحيح في مشروع Unity الخاص بك، وتحقق من ذلك عن طريق التنقل إلى قائمة الـ Package Manager في Unity. إذا كان الإصدار المذكور في الخطأ غير مثبت، يتم تثبيته عن طريق النقر فوق زر "Add package" في Package Manager، ثم البحث عن الإصدار المطلوب وتثبيته. إذا لم يتم حل المشكلة بعد ذلك، تستطيع محاولة حذف مجلد "Packages" في مشروع Unity الخاص بك وإعادة تشغيل Unity، ثم إعادة تثبيت الإصدار المذكور في الخطأ من Package Manager. في حالة عدم حل المشكلة بعد محاولة الخطوات السابقة، عليك بمحاولة تحديث إصدار Unity الذي تستخدمه إلى الإصدار الأحدث المتاح وتثبيت الإصدار المذكور في الخطأ من Package Manager.
  18. بالطبع لن تحتاج إلى أكثر من المسارات المتواجدة على أكاديمية حسوب، فالبداية من مسار علوم الحاسب لتعلم الأساسيات. ثم إختيار المسار الذي تريده سواء دورة تطوير التطبيقات باستخدام لغة JavaScript أو دورة تطوير تطبيقات الويب باستخدام لغة PHP. والتي أنصحك قبلها بإتمام دورة تطوير واجهات المستخدم، وإذا كانت التكلفة مرتفعة بالنسبة لك، فيمكنك التنازل عن دورة علوم الحاسوب والتركيز على المسار البرمجي الذي تريده. وستجد مساندة من كافة المدربين في حالة واجهتك أية مشكلة، وأنصحك بقراءة النقاشات التالية و النقاشات التي تم الإشارة إليها بداخلها أيضًا بتمعن وستجد كافة الإجابات على أسئلتك.
  19. الطريقة الصحيحة لدراسة الدورة هي من خلال المشاهدة والتطبيق والفهم، وهنا لا أقصد التطبيق فقط بالكتابة سطر بسطر وراء المدرب، ذلك جيد في البداية لا مشكلة. لكن ما عليه فعله هو إعادة بناء المشروع بمفردك من البداية، دونّ أن تسير وراء شخص يملي عليك الخطوات، ويا حبذا لو قمت بتغييرات في المشروع لخلق تحدي لنفسك، أو تستطيع إنشاء مشروع آخر من خلال تنفيذ تصميم يعجبك، وتستطيع رؤية مصادر لتصاميم رائعة هنا: أو تستطيع تنفيذ التحديات على موقع مثل frontend mentor وقد تم شرح الأمر هنا ورؤية مواقع أخرى توفر تحديات مثله: والبعض يكره أن يقضي أسبوع في بناء مشروع مثل تنفيذ تصميم من المواقع التي ذكرتها لك، ولكن أليس تلك هي مرحلة التعلم؟ إن لم يخصص الوقت والجهد الآن فمتى إذن؟ والغريب أنه سوف يعود لتلك النقطة مرة أخرى، لكونه لا يمتلك الثقة الكافية لبناء مشروع بمفرده أو لا يعرف ما السبيل، رغم أنه كان باستطاعته الإبطاء قليلاً والتعلم والتدرب ثم الإنطلاق بثقة على أساس صحيح. وقد يفيدك الإطلاع على النقاش التالي أيضًا: وبخصوص مسارك بعد الإنتهاء من الدورة فأرجو منك قراءة النقاشات التالية وستجيب على أسئلتك:
  20. تستطيع الإعتماد على الطريقة التالية بالإَضافة للطرق السابقة: من خلال دالة reduce() في JavaScript لتحقيق ذلك بطريقة أخرى. حيث نستخدم reduce() للحفاظ على المصفوفة الأصلية وإعادة مصفوفة جديدة تحتوي على العناصر غير المكررة. مع استخدام Map() لتخزين اسماء الـ HTML tag الفريدة، وتحديث ال Map() مع كل عنصر في المصفوفة الأصلية. في النهاية ، تستطيع تحويل Map() إلى مصفوفة باستخدام الدالة Array.from(). const arr = [ 'a:href,title', 'a:href,title,accesskey', 'div:class', 'div:class,role,id', 'h3:', 'li:id', 'ul:']; const uniqueArr = Array.from(arr.reduce((map, current) => { const tagName = current.match(/\w+(?=\:)/)[0]; return map.has(tagName) ? map : map.set(tagName, current); }, new Map()).values()); console.log(uniqueArr); // Output: [ 'a:href,title,accesskey', 'div:class,role,id', 'h3:', 'li:id', 'ul:' ]
  21. في جامعة القاهرة، لم يكن هناك قسم خاص بالذكاء الإصطناعي، ولكن تم الموافقة على تغيير اسم الكلية إلى الحاسبات والذكاء الاصطناعي وتم إنشاء قسم لمجال الـ Ai في الكلية. وكل ما أنت بحاجة إليه لدخول ذلك القسم، هو الحصول على المجموع المناسب للكلية في سنة التنسيق الخاصة بك، ويجب أن تكون من شعبة علمي رياضة أو علوم ولكن مجموع الكلية يختلف وهو أقل بالنسبة لعلمي رياضة. ويمكنك التخصص في الذكاء الاصطناعي بدءًا من السنة الثالثة وأغلب المواد في الكلية هي باللغة الإنجليزية حيث أنها لغة البرمجة بالأساس. وجامعة الحاسبات والذكاء الاصطناعي شبه مجانية ولن تحتاج سوى دفع مصاريف الكلية فقط ويجب الإنتباه إلى أن نظام الكلية يعتمد على الساعات المعتمدة وبمجرد دخولك للجامعة ستفهم النظام ولا تشغل بالك به حاليًا لكنه يتطلب الإجتهاد حتى لا تدفع مصاريف أنت في غنى عنها بسبب الرسوب في بعض المواد. والمصاريف هي 8000 آلاف جنيه مصري سنويًا. أي حوال 750 جنيه للساعة المعتمدة الواحدة، وستدرس حلاص 4 سنوات 141 ساعة. والجدير بالذكر أن هناك كلية منفردة غير حاسبات وهي باسم الذكاء الاصطناعي وبداخلها 4 أقسام رئيسية «برمجة الآلة واسترجاع المعلومات، تكنولوجيا أنظمة الشبكات المدمجة، الروبوتات والآلات الذكية، علوم البيانات». وتعمل بنظام الساعات المعتمدة أيضًا وبنفس المصاريف تقريبًا، ولكن هناك قسم خاص بتكلفة 20 ألف جنيه مصري. والأسعار قد تتغير لذلك عليك بالسؤال من داخل الجامعة للتأكد. وتتواجد كلية الذكاء الاصطناعي في عدة جامعات حكومية وهي: جامعة القاهرة جامعة طنطا جامعة حلوان جامعة الزقازيق جامعة كفر الشيخ جامعة بنها جامعة المنوفية جامعة دمنهور جامعة الأقصر وأنصحك بالبحث بالتالي " كلية الحاسبات و الذكاء الاصطناعي" على اليوتيوب وستجد شرح للكلية ونصائح.
  22. تتم عملية نقل الصوت والفيديو في تطبيقات المحادثة مثل الواتساب عبر استخدام تقنية Protocol (IP)، وتتضمن هذه التقنية تحويل الصوت والفيديو إلى تنسيق رقمي يمكن نقله عبر الانترنت، وذلك باستخدام تقنيات الضغط والتشفير لتحسين جودة الصوت والفيديو وتأمينه. وعندما يرسل أحد المستخدمين مقطع فيديو أو صوت عبر التطبيق، يتم تحويله إلى تنسيق رقمي و تقسيمه إلى عدة حزم صغيرة، و إرسال هذه الحزم عبر الانترنت إلى المستلم. وبعد ذلك، جمع هذه الحزم مرة أخرى وتحويلها إلى مقطع فيديو أو صوت وعرضها أو تشغيلها على جهاز المستلم. ويستخدم كل من Protocol (IP) و WebRTC في تطبيقات المحادثة ونقل الصوت والفيديو. Protocol (IP) كبروتوكول رئيسي لنقل البيانات عبر الإنترنت بشكل عام، ويعتمد على تجزئة البيانات إلى حزم ونقلها من خلال الشبكة. ويستخدم في تطبيقات المحادثة كأساس لنقل الصوت والفيديو من جهاز المرسل إلى جهاز المستقبل. أما WebRTC فهو تقنية حديثة ومفتوحة المصدر تم تطويرها خصيصاً لنقل الصوت والفيديو والبيانات الحية في الوقت الحقيقي عبر الإنترنت. ويتضمن WebRTC بروتوكولات مخصصة للصوت والفيديو والشات وتقنيات الضغط والتشفير وغيرها لتحسين جودة الاتصال وتأمينه. ويستخدم WebRTC في العديد من تطبيقات المحادثة عبر الإنترنت والتطبيقات الأخرى التي تحتاج إلى نقل الصوت والفيديو عبر الإنترنت بشكل سريع وآمن. وتستطيع إنشاء تطبيق محادثة صوتية باستخدام بايثون باستخدام بعض المكتبات المتاحة، مثل: PyAudio: مكتبة بايثون للعمل مع الصوت، وتتيح لك إمكانية تسجيل وتشغيل الصوت على نظام التشغيل الخاص بك. Socket: مكتبة بايثون للتواصل بين العملاء والخوادم باستخدام TCP/IP. PyQT: مكتبة بايثون لإنشاء واجهات المستخدم الرسومية (GUI)، والتي يمكن استخدامها لإنشاء واجهة المستخدم لتطبيق المحادثة الصوتية. ومن الخطوات التي يمكن اتباعها لإنشاء تطبيق محادثة صوتية باستخدام بايثون: تسجيل الصوت باستخدام مكتبة PyAudio. إنشاء واجهة المستخدم باستخدام مكتبة PyQT. التواصل بين العميل والخادم باستخدام مكتبة Socket. نقل بيانات الصوت بين العميل والخادم عبر الاتصال الشبكي باستخدام بروتوكولات الإنترنت مثل TCP/IP أو UDP. تشفير وفك تشفير الصوت باستخدام تقنيات التشفير المناسبة. تشغيل الصوت على العميل باستخدام مكتبة PyAudio. إنشاء موقع يتضمن مقاطع فيديو أو صوت تستطيع استخدام لغة البايثون في إنشاء موقع مثل هذا، بالإضافة إلى العديد من التقنيات الأخرى مثل HTML وCSS وJavaScript و Django framework لإدارة الموقع. وإليك مثال، أنت قمت بإنشاء مشروع دجانغو، عليك بفعل التالي: تحديد نموذج Django الذي سيستخدم لتمثيل الفيديو أو الصوت. يمكن إنشاء نموذج بسيط كالتالي: from django.db import models class Video(models.Model): title = models.CharField(max_length=200) video_file = models.FileField(upload_to='videos/') حيث تم تحديد نموذج Video الذي يحتوي على اسم الفيديو وملف الفيديو. بعد تحديد نموذج الفيديو، يجب إنشاء عرض (View) Django الذي يعرض الفيديو. وتستطيع إنشاء عرض بسيط باستخدام الكود التالي: from django.shortcuts import render def video(request, video_id): video = Video.objects.get(id=video_id) return render(request, 'video.html', {'video': video}) يتم تحديد العرض "video" الذي يستخدم نموذج Video ويسترد الفيديو الذي يحمل نفس معرف video_id. ويجب إنشاء قالب (Template) Django الذي يستخدم لعرض الفيديو. حيث تستطيع إنشاء قالب بسيط باستخدام HTML و Django Template Language، و استخدام HTML5 Video Tag لعرض الفيديو. <html> <head> <title>{{ video.title }}</title> </head> <body> <h1>{{ video.title }}</h1> <video controls> <source src="{{ video.video_file.url }}" type="video/mp4"> </video> </body> </html وهناك العديد من المكتبات التي يمكن استخدامها مع Django لإضافة الوسائط مثل الفيديو والصوت والصور. بالنسبة للفيديو والصوت، تستطيع استخدام مكتبات مثل Django-ffmpeg و Django-Video-Encoder لمعالجة وتشفير الوسائط المتحركة. أيضًا يمكن استخدام مكتبات مثل Pillow و Django-imagekit لمعالجة الصور. وهناك مكتبات JavaScript مثل Plyr و Video.js و WaveSurfer.js لتشغيل الفيديو والصوت وتحريرهم في صفحات الويب.
  23. للإجابة على ذلك يجب ذكر مثال لوصف وظيفة خاصة بمطور بايثون حيث ستجد وصف مشابه له على مواقع التوظيف مثل LinkedIn: خبير في لغة البرمجة بايثون، بالإضافة إلى معرفة على الأقل بإطار عمل بايثون الويب {{مثل Django، Flask، وما إلى ذلك، اعتمادًا على تكنولوجيا الشركة}}. معرفة ببعض مكتبات ORM (Object Relational Mapper). القدرة على دمج مصادر البيانات وقواعد البيانات المتعددة في نظام واحد. فهم قيود المتعددات المتزامنة في بايثون وهندستها المتعددة العمليات. فهم جيد للغات النمذجة الخاصة بالخادم {{مثل Jinja 2، Mako، وما إلى ذلك، اعتمادًا على تكنولوجيا الشركة}}. فهم أساسيات تقنيات الواجهة الأمامية، مثل JavaScript و HTML5 و CSS3. فهم للامتثال للوصول والأمان {{اعتمادًا على المشروع المحدد}}. المعرفة بالمصادقة والتفويض للمستخدمين بين أنظمة وخوادم وبيئات متعددة. فهم المبادئ التصميمية الأساسية لتطبيق مقياسي. المعرفة ببرمجة المحفزات الحدثية في بايثون. فهم الاختلافات بين منصات التسليم المتعددة، مثل الجوال مقابل سطح المكتب، وتحسين الإخراج ليتناسب مع المنصة المحددة. القدرة على إنشاء مخططات قواعد البيانات التي تمثل وتدعم العمليات التجارية. مهارات قوية في اختبار الوحدات وتصحيح الأخطاء. فهم متقن لأدوات إصدار الرمز {{مثل Git، Mercurial أو SVN}}. ونظرًا إلى ما سبق أنت ستتعلم في الدورة التالي: الأسس البرمجية السليمة عبر لغة Python التعامل مع مختلف صيغ الملفات مثل إكسل Excel وورد Word وخدمات المستندات السحابية استخراج البيانات من صفحات الويب Web Scraping وتحليلها أساسيات التعامل مع قواعد البيانات عبر بايثون، والتعامل مع البريد الإلكتروني لإرسال الرسائل أساسيات إطار العمل جانغو Django بناء تطبيق إدارة المهام باستخدام إطار العمل جانغو Django تطوير متجر إلكتروني متكامل باستخدام إطار العمل جانغو Django وربطه مع وسائل الدفع باي بال PayPal وسترايب Stripe أساسيات إطار العمل فلاسك Flask، وبناء مدونة بسيطة تطوير تطبيقات أودو Odoo تطوير واجهة برمجية API اعتمادًا على نمط RESTful لمعالجة الصور وبالتالي أنت قد ألممت بجزء كبير من وصف الوظيفة، وتحتاج فقط إلى تعلم أساسيات تقنيات الواجهة الأمامية، مثل JavaScript و HTML5 و CSS3. وبالنسبة لطريقة التعلم المناسبة فأرجو منك قراءة النقاش التالي وقراءة النقاشات التي إرفاقها بداخله:
  24. في البرمجة لن يفيدك الحفظ في شيء، ولا يوجد مبرمج محترف يتذكر كافة ما تعلمه بل يعلم كيف يقوم ببناء المشروع باستخدام الأداة المناسبة، أي يعلم أن اللغة تلك تمتلك الأدوات اللازمة وذلك الإطار هو المناسب للمشروع الخاص بي، وبالطبع هو يحفظ الأساسيات لكونه قام بمشاريع بتلك اللغات والأدوات من قبل. ثم يتذكر ما يريده من خلال البحث وقراءة المستندات، مثلاً يتذكر أنه يمكنه تنفيذ ما يريد من خلال دالة معينة لكنه لا يتذكر طريقة استخدامها أو كتابتها، وبالتالي يقوم بالبحث والقراءة ومع الوقت ستتذكر كل ما يخص عملك اليومي. والباقي عليك بالبحث عنه والقراءة، أو البحث باسم how to تنفيذ شيء معين وهكذا. أي عليك بفهم الأساسيات وفهم الكود جيدًا، فذلك ما سيمكنك من تعلم كل ما تريد، والبعض يمل من بطيء عملية التعلم في البداية، ولكن لا يعلم أنه بذلك سيصعب من عملية تعلمه أي شيء جديد مستقبلاً وسيخاف من أي شيء جديد يظهر أمامه لم يراه من قبل. وبخصوص طريقة التعلم المناسبة قد تم التطرق إلى ذلك بالتفصيل في النقاش التالي:
  25. في البداية حزمة "phpdotenv" هي حزمة تساعد على تحميل متغيرات البيئة في تطبيق PHP. وما يقصد بهذا هو أن الحزمة تسمح لك بتخزين متغيرات التكوين والبيانات الحساسة مثل المفاتيح وكلمات المرور ومعلومات الاتصال بقاعدة البيانات وغيرها، داخل ملف نصي محلي يسمى ".env" بدلاً من تضمينها مباشرةً في رمز البرنامج. وهذا يعني أنك لن تحتاج إلى مشاركة هذه المعلومات في الكود ولا يتعين عليك التعامل مع المشاكل المحتملة في الأمان الذي يمكن أن ينشأ عند نشر البرنامج. فيما يلي بعض الفوائد الرئيسية لاستخدام حزمة "phpdotenv": 1- تحسين أمان التطبيق عند استخدام متغيرات البيئة لتخزين المعلومات الحساسة، يتم حمايتها من الوصول غير المصرح به والاحتفاظ بها بشكل آمن خارج رمز التطبيق. 2- التبسيط يمكن للحزمة تبسيط عملية إعداد التطبيق وتحديد المتغيرات المطلوبة في ملف واحد، بدلاً من تعيينها بشكل منفصل في رمز التطبيق. 3- المرونة تستطيع استخدام متغيرات البيئة لتكوين العديد من جوانب التطبيق المختلفة، مثل إعدادات البريد الإلكتروني وإعدادات قاعدة البيانات وتكوينات مزود الخدمة وغيرها. 4- الإدارة يمكن للمطورين تغيير قيم متغيرات البيئة دون الحاجة إلى تعديل رمز التطبيق بشكل مباشر، مما يجعل الإدارة والتحكم أسهل. لتوضيح كيفية استخدام حزمة "phpdotenv"، إليك مثال بسيط لتكوين متغيرات البيئة لتطبيق PHP. حيث سنقوم بتخزين المعلومات الحساسة المتعلقة بقاعدة البيانات، مثل اسم المستخدم وكلمة المرور واسم قاعدة البيانات، في ملف .env الموجود في الجذر الرئيسي لتطبيق PHP. ثم استخدام الحزمة لتحميل هذه المتغيرات واستخدامها في الرمز الخاص بالتطبيق. 1- عليك بتثبيت حزمة "phpdotenv" باستخدام مدير حزم Composer: composer require vlucas/phpdotenv 2- إنشاء ملف .env وتحديد المتغيرات المطلوبة وقيمها، مثال لملف .env: DB_HOST=localhost DB_DATABASE=mydatabase DB_USERNAME=myuser DB_PASSWORD=mypassword 3- استخدام الحزمة في الكود: require __DIR__ . '/vendor/autoload.php'; $dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv->load(); $host = $_ENV['DB_HOST']; $database = $_ENV['DB_DATABASE']; $username = $_ENV['DB_USERNAME']; $password = $_ENV['DB_PASSWORD']; // استخدم المتغيرات للإتصال بقاعدة البيانات تعمل الحزمة على تحميل قيم متغيرات البيئة من ملف .env وإضافتها كمتغيرات PHP للتطبيق، وتستطيع استخدام هذه المتغيرات في الكود.
×
×
  • أضف...