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

شرف الدين حفني

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

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

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

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

    2

كل منشورات العضو شرف الدين حفني

  1. من الممكن اجل لان الكلاس a يحمل فى خصائصه متغير من نوع الكلاس b من الممكن انشاء كائن من الكلاس a وتعريف كائن من الكلاس b من خلاله ومن ثم استدعاء دواله كما فى المثال الاتي: a=new A(); a.b=new B(); a.b.setNum(2); System.out.println(a.b.getNum()); ومن الممكن تعديل الكود ليصبح قابل للقراءة ومنظم بشكل اكثر كما فى الشكل التالي a=new A(); a.b=new B(); B b=a.b; b.setNum(2); System.out.println(b.getNum()); ومن الممكن اضافة دوال الgetters و الsetters كما بالشكل الاتي ليصبح الكود منظم اكثر و تقم بعملية encapsulation لدوال الكلاس b بداخل الكلاس a Public class B{ int num; public setNum(int n){ num=n; } public int getNum(){ return num; } } Public class A{ public B b; public A(B b){ this.b=b; } public B getNum(){ return this.b.getNum(); } public void setNum(int num){ this.b.setNum(num); } } وتقم باستدعائهم على النحو الاتي B b =new B(); A a=new A(b); a.setNum(2); System.out.println(a.getNum()); وتلك مقالة بها فى اول جزأ شرح مبسط لمفهوم الencapsulation يمكنك أن تقرأه لتفهم أكثر
  2. في react عندما تنشئ function وتمررها الى child component , ففى كل مرة تتغير حالة الparent component ويحدث re-render نجد أن الجافاسكريبت تتعامل وقتها مع الcallback function ع أنها دالة جديدة فيحدث re-render للchild component ,هنا حدثت عملية render اضافية بلا فائدة مما يؤثر سلبا على الاداء,إذا ما الحل؟ الحل أن نقم بعملية memoization للدالة الممررة للchild component حتى تتعامل معها الجافاسكريبت كل مرة ع أنها نفس الدالة مالم يحدث لها تغيير وبهذا نكون عالجنا مشكلة الrender الاضافي مما يحسن الأداء مثال: function Parent({ ... }) { const [a, setA] = useState(0); const onPureChange = useCallback(() => {doSomething();}, []); ... return ( ... <Pure onChange={onPureChange} /> ); } في هذا المثال عندما تتغير قيمة a يحدث render لل parent component وال Child component بينما إذا قمنا باستخدام الuseCallback على هذا الوجه في المثال الادنى: const [a, setA] = useState(0); const onPureChange = useCallback(() => {doSomething();} لا يحدث render لل child component عند تغيير قيمة الa اما بالنسبة لل useMemo فإنها تقم ايضا بعملية memoization ولكن ليس للدالة نفسها وانما للناتج , ويستخدم عندما يكون لدينا دالة تقم بعمليات حسابية طويلة وتستهلك موارد وأداء وفى نفس الوقت لا يتغير ناتج الدالة كثيرا, في هذه الحالة يكن الحل الامثل ان نخزن الناتج فى useMemo hook حتى لا يحدث render اضافى عند تمرير الدالة وفى نفس الوقت لا نحتاج لنداء نفس الدالة كل مرة يحتاجها الchild component لأن ببساطة ناتج الدالة مخزن بالفعل فلو قمنا باستخدام useMemo عوضا عن useCallback فى المثال السابق,فاننا لسنا فقط نخزن الreference الخاص بالدالة انما ايضا نقم بتخزين ناتج الدالة فلا نحتاج لاستدعائها
  3. هذا يعتمد, هل الاقسام لها وظائف (methods) ام فقط لها خصائص؟ لو كان لها وظائف تختلف باختلاف نوع القسم ,اذا من الافضل ان تقم بانشاء واجهة (interface) وكل نوع قسم يقم بعمل implementation لهذه الinterface اما فى حالة ثبوت الوظائف نسبيا مع اختلاف نوع القسم او عدم وجود وظائف فى الاساس, من الافضل ان يكن كلاس واحد لجميع الاقسام وتستطيع تمييز كل قسم عن الاخر عن طريق خاصية نادرة مثل الاسم بالنسبة لسؤالك "و الخصائص هل يتم كتابتها على الكلاس الرئيسي ام في كلاس اخر" لم افهمه جيدا, ولكن بوجه عام الخصائص تكن بلا قيمة فى الكلاس الرئيسي, او تكن بقيمة أفتراضية , وتقم بتغيير قيمتها لكل كائن عن طريق الsetters و الgetters مثال على ذلك class department{ private name; private courses; public String getName(){ return name; } public String getCourses(){ return courses; } public void setName(String name){ this.name=name; } public void setCourses(String courses){ this.courses=courses } } public void main(){ department dep=new department(); dep.setName("sharaf"); System.out.println(dep.getName()); } كما هو موضح في المثال السابق تجد الخصائص لدى الكائن ولكن محظور الوصول أليها مباشرة بدون استخدام دوال الgetters وال setters
  4. يمكنك تحقيق ذلك من خلال ان تجعل قيمة الخاصية strip = false , لانها by default تكون true كما فى المثال الاتى class YourForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(YourForm, self).__init__(*args, **kwargs) self.fields['myfield'].strip = False class Meta: model = YourModel fields = "__all__ كما ترى فى المثال سابق انشأنا فورم وجعلنا قيمة الحقل المسمى myfield يحمل خاصية strip بقيمة False ومن ثم يمكنك استخدام الفورم فى صفحة الادمن عن طريق تحديد الخاصية form=YourForm فى ملف admin.py
  5. يمكن استخدام الدالة getsource بغرض الحصول على الكود المصدرى لكائن ما , ويتم كتابتها بالصيغة الاتية: inspect.getsource(object) ويكون استخدامها كما فى المثال الاتي: #baz.py import inspect class foo: def bar(): print 'Hello' print(inspect.getsource(foo)) ////////output////////// C:/Users/TutorialsPoint1/~.py class foo: def bar(): print 'Hello' بالاضافة لذلك, بما ان المكتبة مثبتة على الحاسوب خاصتك, يمكن فتح الملف المراد الحصول على الكود المصدرى الخاص به وقراءة الكود مباشرة من اجل الحصول على موقع الملف على جهازك نستخدم الخاصية ._file_ كما موضح فى المثال الاتي import numpy.random print(numpy.random.__file__) فى المثال السابق قمنا باستدعاء الmodule المسمى numpy.random وقمنا بالحصول على موقعه , من ثم يمكنك فتحه بشكل مباشر وقراءة الكود باستخدام محرر الاكواد او الide المفضل لديك
  6. يمكنك انشاء مستخدم جديد عن طريق هذا الأمر python manage.py createsuperuser ويمكنك العثور أيضا على المستخدم المفقود عن طريق الخطوات الاتية: أدخال الامر الاتى فى الconsole من أجل فتح صدفية البايثون python manage.py shell من ثم قم بكتابة الScript الأتى فى الصدفية from django.contrib.auth.models import User User.objects.filter(is_superuser=True) من خلال هذا الأمر سيتم طباعة جميع المستخدمين اللذى فى حالة مسؤول يمكنك بعدها ان تعثر على اسم المستخدم اللذى نسيته وتقم بتعيين كلمة مرور جديدة عن طريق الامر الأتي usr = User.objects.get(username='your username') usr.set_password('raw password') usr.save() او من الممكن ان تكتب الامر الأتي بدلا منه فى الconsole python manage.py changepassword <user_name> وتستبدل حقل <user_name> بأسم المستخدم اللذي عثرت عليه من الكود المدمج فى خطوة رقم 4
  7. يمكنك عمل ذلك عن طريق التهجير الى ملف التهجير السابق للاخير مثال اذا اعتبرنا وجود ملفان تهجير 0010_previous_migration 0011_migration_to_revert يمكنك إذا تنفيذ الامر التالى migrate my_app 0010_previous_migration ومن ثم بامكانك ان تمسح اخر ملف تهجير الغير مرغوب فيه 0011_migration_to_revert
  8. هذا الخطأ يظهر بسبب انك تستخدم tensorflow2 واللتى لها طريقة مختلفة عن tensorflow1 فى انشاء الsession غير السطر اللذى يحمل الخطأ الى التالى: sess=tf.compat.v1.Session()
  9. هذا يعتمد بشكل ما على أصدار الtensorflow اللذى تستخدمه, فاذا كنت تستخدم tensorflow1 يمكنك الاختبار من خلال الكود التالى print("Num GPUs Available: ", len(tf.config.list_physical_devices('GPU'))) ناتج طباعة الكود السابق سيكون اسامى الgpu devices اللتى تستخدمها الTensorflow اما فى حالة انك كنت تستخدم tensorflow2 يمكنك اذا الاختبار من خلال الكود الاتى sess = tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(log_device_placement=True)) وسيكون ناتج طباعة هذا الكود هو الDevices اللتى يتم استخدامها بواسطة الtensorflow
  10. جافا oop ليس برنامج, فأن جافا هى لغة برمجة والoop هو مفهوم فى البرمجة " البرمجة كائنية التوجه" والjavafx هى تقنية لانشاء تطبيقات سطح المكتب والمتصفح ,وتعد بديلا لتقنيات مثل flash و java applets اما بالنسبة لسؤالك عن كيفية استخدامها فلا يمكن الاجابة على هذا السؤال فى اجابة واحدة, عليك ان تأخذ دورة تدريبية حتى تتمكن من استخدامها, فهى تقنية كاملة تحتاج للدراسة والتطبيق
  11. ال slug هو طريقة لانشاء url له معنى وصالح فى نفس الوقت, كمثال اذا كان لدينا صفحة html تعبر عن مقالة كالشكل التالى <title> The 46 Year Old Virgin </title> <content> A silly comedy movie </content> <slug> the-46-year-old-virgin </slug> وانشأنا لها django model بالشكل الاتى: class Article(models.Model): title = models.CharField(max_length=100) content = models.TextField(max_length=1000) slug = models.SlugField(max_length=40) ماهى افضل طريقة لانشاء url يشير لهذا الموديل؟ اولا من الممكن ان نصل له عن طريق الid فيصبح الurl كالشكل التالى www.example.com/article/23 او من الممكن ان نصل له عن طريق attribute الslug كما بالشكل التالى www.example.com/article/The 46 Year Old Virgin ولكن تلك الطريقة فيها مشكلة لان المسافات غير مسموح بها فى الurl فبالتالى يتغير شكل الurl ليصبح كالاتى: www.example.com/article/The%2046%20Year%20Old%20Virgin ومن الواضح اخى الفاضل ان كلا الطريقتين اعلى ليسو جيدين , فاول طريقة ستجد ان الurl لا يعطى وصفا عما يتضمنه فانت لا تستطيع ان تعرف عما تتكلم المقالة بمجرد معرفة الid اللذى هو 23 والطريقة الثانية ليست جيدة ايضا لانها صعبة القراءة وتؤذى العين,وهنا يأتى دور الslug فنجعل عنوان الurl مثل حقل الslug فيكون كالتالى www.example.com/article/the-46-year-old-virgin
  12. اكتب رسالة الخطأ اللتى تظهر لك
  13. يجب الاول معرفة ماهى الnull وما هو الblank حسنا فان الblank هو قيمة فارغة ("") ,ولكنه قيمة ,اليس كذلك؟ انها قيمة فارغة ولكن فى النهاية تزال قيمة, مثل الصفر, هو قيمة وفى النهاية يتم تخزينه فى الذاكرة المؤقتة اما الnull فتعنى انه لا يوجد قيمة لهذا العنصر, انه ليس فارغ,انه ليس بصفر, انه فقط لا قيمة له ولا يتم تخزينه فى الذاكرة المؤقته, ببساطة لانك لا تستطيع ان تخزن قيمة شئ ليس له قيمة
  14. ال Headers تحتوى على معلومات اضافية للطلب, مثلا لو افترضنا انك ارسلت طلبا من المتصفح لسيرفر الفيسبوك لتسجيل الدخول فيكون شكل بيانات الطلب مثلا على النحو الاتى {username:"ahmed_ibrahim@gmail.com,password:"xxxx"} ولكن ماذا عن معلومات الكاشينج؟ معلومات الauthentication ,معلومات حول صيغة البيانات المرسلة Content-type كل تلك المعلومات الاضافية اللتى هى معلومات عن الطلب ذات نفسه وليست عن طلبك انت تحديدا يتم وضعها فى الheaders فمثلا لو شرحنا الheaders اللتى وضعتها حضرتك خطوة خطوة: 'Content-Type': 'application/x-www-form-urlencoded' تعنى ان بيانات الطلب مرسلة من form ولا تحتوى على ملفات او بيانات binary ,اى كلها نصية 'x-requested-api': 'ocapi', 'x-requested-with': 'XMLHttpRequest', معلومات لضمان حماية الموقع من الcsrf attack Accept: 'application/json' تعنى ان العميل يفهم الداتا بصيغة json فيجب على الخادم ان يرسل الداتا بنفس الصيغة
  15. لا علاقة بالخوارزميات اللتى تتعلمها بلغة البرمجة او المكتبة اللتى تستخدمها,ذلك لان الخوارزمية هى الخطوات الممنهجة لحل المشكلة ,لغة البرمجة فقط تعد اداة من اجل تنفيذ تلك الخطوات "الخوارزمية" وبالنسبة لسؤالك عن الخوارزميات اللتى يجب ان تتعلمها, فعليك اولا ان تتعلم تقنيات حل المشكلة مثل greedy algorithm, dynamic programming, divide and conquer,..etc ثم تفهم الخوارزميات المشهورة للبحث والترتيب مثل الmerge sort, binary search,..etc والتدريب على حل المشاكل من مواقع مثل hacker rank فهذا يزيد من مهارة حل المشكلات لديك ويمكنك من كتابة خوارزميات بشكل افضل, لكن لا يوجد خوارزميات بعينها يجب عليك تعلمها , فقط طور من مهارة حل المشكلات
×
×
  • أضف...