-
المساهمات
2593 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
26
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Kais Hasan
-
ما الذي قمت بتجريبه و لم ينجح؟ لا يجب علينا إعطاءك الحل مباشرة فعندها لن تتحسن في اللغة. في حالك حدث خطأ و لم تستطع معرفة لماذا يمكنك السؤال عنه، و لكن عليك المحاولة.
-
يمكنك حل المشكلة عن طريق تحديد حجم الذاكرة المسموح باستعماله، مثلاً كما يلي: ini_set('memory_limit', '64M'); حيث نقوم بذلك في بداية الكود.
-
مرحباً يوسف، هل هذا السؤال يخص إحدى الدروس من الدورات؟
- 3 اجابة
-
- 1
-
-
يمكن استعمال الإضافة uglifyjs-webpack-plugin و التي يمكن استعمالها بالشكل التالي: const webpack = require("webpack"); const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); module.exports = { // ... optimization: { minimize: true, minimizer: [new UglifyJsPlugin({ include: /\.min\.js$/ })] } }; حيث هنا قمنا بتضمين الإضافة الخاصة بالعملية التي نريدها، ثم قمنا بإضافة خيارات التحسين و التي هي هنا أننا نريد عمل minimize و ذلك باستعمال الإضافة التي قمنا بتضمينها. من أجل ال css يمكن استعمال شيء مشابه كما يلي: const CssMinimizerPlugin = require("css-minimizer-webpack-plugin"); module.exports = { module: { ... }, optimization: { minimizer: [ new CssMinimizerPlugin(), ], }, }; و يمكن دمج الطريقتين كما يلي: const webpack = require("webpack"); const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); const CssMinimizerPlugin = require("css-minimizer-webpack-plugin"); module.exports = { // ... optimization: { minimize: true, minimizer: [ new UglifyJsPlugin({ include: /\.min\.js$/}), new CssMinimizerPlugin() ] } };
-
إن الخاصية value تمثل القيمة التي سيتم إرسالها عند القيام ب submit، أي سيتلقاها السيرفر و يعالجها بالطريقة المناسبة، هذا هو الأمر في ال radio-button و ال checkbox. بينما في الأزرار العادية فهي تعرف النص الموجود على الزر، أما في الإدخال النصي فهي تعرف القيمة الأولية الافتراضية للدخل. أما ال name فهي مجرد اسم لهذه القيمة، أي يمكن استعماله لجلب القيمة في السيرفر مثلاً. كأنك تعرفين متحول له name و قيمته هي value.
- 2 اجابة
-
- 1
-
-
هناك عدة أنماط من الموصلات أشهرها: نقطة لنقطة و الذي كما يوحيه الاسم، يعبر عن اتصال مباشر بين طرفيتين. البث، و الذي يعبر عن ربط بين نقطتين أو أكثر مع السماح لنقطة بالإرسال إلى جميع النقاط. متعدد النقاط، يشبه البث من ناحية أنه يربط عدة نقاط مع بعضها البعض، و لكن هنا لا توجد طريقة لإرسال إلى الجميع، حيث يتوجب إرسال الرسالة إلى كل نقطة على حدا. فيما يخص الشبكات، أيضاً يوجد العديد من الأنواع أشهرها: شبكة المنطقة الشخصية PAN و هي تعتبر شبكة ضيقة النطاق جداً لتشمل محيط العمل الخاص بشخص ما، مثلاً عندما تريد ربط الموبايل باللابتوب أو عند ربط الموبايل بجهاز تكبير صوت عن طريق البلوتوث. شبكة المنطقة المحلية LAN و هي تعتبر ضيقة النطاق أيضاً و لكن أوسع من الشبكة السابقة، يمكن ربط عدة أجهزة عن طريقها و التقنيات الأساسية المستعملة هي ال WiFi و ال Ethernet، يمكنك رؤية هكذا شبكات في الشركات الصغيرة، حيث يمكن ربط أجهزة العمل عبرها. شبكة المنطقة الواسعة WAN و هي شبكة واسعة النطاق بشكل كبير لتشمل مناطق جغرافية متباعدة جداً، أهم مثال على هذه الشبكة هو الانترنيت.
-
إن المقارنة بينهم غير ممكنة، حيث أن الاختصاصات التي يختص بها كل من الذي ذكرته يختلف بعض الشيء عن الآخر، سأقوم بشرح مبسط عن كل واحدة حتى يمكنك فهم الموضوع بشكل أفضل: bootstrap هو فريم وورك مفتوحة المصدر لل css موجهة للعمل من أجل المواقع التي تؤمن واجهة مستخدم تفاعلية و مصممة للعمل على أجهزة الموبايل. jquery هي مكتبة جافا سكربت صممت لتسهل التعامل و الوصول إلى العناصر في ال html dom بالإضافة إلى معالجة الأحداث و التحريك باستعمال ال css و ال ajax. sass هي عبارة عن لغة scripting تقوم بالمعالجة المسبقة لإنشاء ملفات css . gulp هو مجموعة أدوات في الجافا سكربت و التي تستعمل للقيام بعمليات بناء المشروع بمختلف مراحلها في تطبيقات واجهة المستخدم. react هي مكتبة لتطوير واجهة المستخدم مبنية بالجافا سكربت و هي مفتوحة المصدر تعتمد على مكونات واجهة المستخدم في عملها. angular هي فريم وورك تعتمد على ال TypeScript مفتوحة المصدر و تستعمل لتطوير واجهة التطبيقات. vue هي فريم وورك مبنية بالجافا سكربت و تعتمد على نموذج model–view–viewmodel و تستعمل لتطوير تطبيقات واجهة المستخدم و هي مفتوحة المصدر.
-
يمكنك مثلاً عند عملية الحذف أن تقوم بتصغير الذي يحوي على المهمة التي يتم حذفها و ذلك تدريجياً، فيظهر لك إحساس بأنها ترتفع بشكل تدريجي و ليس بشكل مباشر. أي أنك في عملية الحذف يتم استدعاء تابع يقوم بالحذف مع ال animation الذي يظهر في الفيديو الخاص بك، في نفس هذا التابع يمكنك بدل ان تحذف المكون بشكل مباشر ( و الذي سيؤدي إلى ارتفاع مباشر للمهمة التي في الأسفل) أن تقوم بتصغير حجم المكون الذي يحويه بشكل تدريجي مما سيؤدي إلى المطلوب. يوجد طرق عديدة أخرى و لكن الطريقة التي تحدثت عنها عامة بغض النظر عما تقوم باستعماله.
-
توجد الحزمة django-subdomains، حيث يمكنها القيام بما تريد. لتنزيل هذه الحزمة نقوم بتنفيذ التعليمة: pip install django-subdomains لجعل هذه المكتبة تعمل يجب ضبط بعض الإعدادات كما يلي: إضافة الطبقة الوسطية middleware الخاصة بهذه المكتبة ضمن الملف settings في القائمة الخاصة بالطبقات الوسطية، و ذلك بالاسم التالي: subdomains.middleware.SubdomainURLRoutingMiddleware و يجب أن تأتي هذه الطبقة قبل طبقة ال CommonMiddleware في حال وجدت. ضبط إعدادات SUBDOMAIN_URLCONFS في ملف ال settings. التأكد من أن SITE_ID قد تم تعريفه و أن الخاصية Site.domain لذلك الموقع تتعلق باسم الدومين الذي سيقوم المستخدمون بالوصول للموقع من خلاله. إذا أردت استعمال ذلك في ال template مع التاغ {% url %} فيجب وضع subdomains في قائمة التطبيقات في ال settings. مثال على إعدادات لذلك: ROOT_URLCONF = 'myproject.urls.account' # في هذا القاموس إن المفتاح يمثل الدومين الفرعي SUBDOMAIN_URLCONFS = { None: 'myproject.urls.frontend', # هنا لا يوجد دومين فرعي 'www': 'myproject.urls.frontend', 'api': 'myproject.urls.api', }
- 2 اجابة
-
- 1
-
-
يمكنك استعمال الخاصية border-radius للقيام بتغيير شكل الصندوق، عند قيمة معينة لهذه الخاصية سيصبح الشكل دائري، يمكنك تجريب القيم حتى الحصول على الشكل المطلوب، حيث أنه بتغيير القيمة تصبح الحواف أنعم و عند قيمة معينة سيصبح الشكل دائري. يمكنك استعمال الخاصية accent-color لتغيير اللون، كمثال على ذلك: #cb1 { accent-color: #ffffff; } يوجد أيضاً الكثير من الأشكال الجاهزة التي يمكنك استعمالها و التي قام مطورون آخرون بتطويرها، و يمكنك إيجادهم هنا.
- 6 اجابة
-
- 1
-
-
ما الذي تحاولين تثبيته من خلال الأمر التالي: pip install virtualenv ؟ إن هذا الأمر يقوم بتثبيت أداة تسمح لك بإنشاء بيئات افتراضية و لكن المشكلة هنا أنه لا يرى ال django، هل كنتي تستعملين بيئة افتراضية من قبل؟ و هل يمكنك مشاركة الكود الخاص بالمشروع أو على أقل تقدير الملف الخاص بالبيئة في حال وجوده؟
- 3 اجابة
-
- 1
-
-
في حال وجدت طريقة للقيام بإيجاد روابط المواقع فإن ذلك يعني أنك استطعت الحصول على عدد من المقاطع المشفرة و ما يقابلها من المقاطع بعد فك تشفيرها، و هذا سيجعل هناك نقطة ضعف في التشفير. فبالتالي من غير المنطقي وجود هكذا أمر، في حال كان الكود يخصك و تمتلك مفتاح فك التشفير فإن ذلك ممكن، حتى من دون فك التشفير بشكل مباشر، حيث أن فك التشفير و تخزين الكود بشكل غير مشفر قد يسبب مشاكل أمنية، هناك طرق تقوم بالتعامل مع الكود المشفر بشكل مباشر و لكنها طرق معقدة و قد لا تنجح مع جميع خوارزميات التشفير و جميع المعدات الحاسوبية.
- 1 جواب
-
- 1
-
-
من أفضل المواقع التي تعتبر جيدة للبداية حيث أنها سهلة نسبياً هي: HackerRank HackerEarth أنصحك بقضاء بعض الوقت عليهما و لكن الانتقال بعدها إلى مواقع أفضل، حالياً أفضل موقعين في هذا المجال هما: CodeForces AtCoder في هذين الموقعين يمكنك ترتيب المسائل حسب الصعوبة كما يمكنك فرز المسائل حسب نمط المسألة، و هناك الكثير من الأنماط مثل graph theory, greedy, dynamic programming, math و الكثير من المواضيع الأخرى، كما يوفر موقع codeforces الكثير من المحتوى التعليمي في قسم Edu ضمن الموقع، حيث أنه يعطيك بعض المعلومات عن طريق فيديوهات ثم يعطيك مجموعة من المسائل مرتبطة بالمحتوى المقدم. كما أن كل مسألة في codeforces لها شرح مرافق لحلها في حال لم تستطع حلها بمفردك.
-
إن المعرفة الجيدة بأنظمة التشغيل هو شيء ضروري ﻷي مطور محترف خاصة ال backend، حيث أنك ستحتاج إلى معرفة كيفية التعامل مع السيرفر و الذي في الغالب يكون linux و ستستعمل سطر الأوامر لذلك، بالإضافة إلى المشاكل التي ستواجهك و التي لها علاقة مثلاً بإعدادات الأمان و ما إلى هنالك. سأعطيك مثال عن ذلك من تجربة شخصية لي لكي تتوضح أهمية هذه الأمور، لقد قمت من فترة ببناء موقع و أردت رفعه على أمازون، إن كافة العمليات التي ستقوم بها ستكون عبر سطر الأوامر من عمليات الرفع إلى عمليات التشغيل و ما إلى هنالك، بالإضافة إذا أردت جدولة مهمة ما أيضاً. بالإضافة عند تعاملك مع الملفات على سبيل المثال، قد تحدث الكثير من الأخطاء التي لها علاقة بأنظمة التشغيل و التي بدون معرفة بذلك سيكون من الصعب حلها. أضف إلى ما سبق أنه في حال أردت التعامل مع توابع يتم تنفيذها على التفرع فإن هذه المعرفة أيضاً ستساعدك.
- 2 اجابة
-
- 1
-
-
في لغة جافا يتم التمرير دائماً بالقيمة، أي أن نسخة من البيانات هي التي يتم تمريرها، لكن ما الذي يتم تمريره هو الذي يجعل فكرة التعديل ممكنة. حيث أنه في جافا عند التعامل مع متحول يحتوي على كائن فإننا فعلياً نتعامل مع ما يسمى object-handler و هو مثل مرجع للغرض، أي أن المتحول بحد ذاته يحمل قيمة مرجع للغرض، و بالتالي عند تمريره بالقيمة سنمرر قيمته و التي هي بحد ذاتها مرجع للغرض. و هذا ما يسمح لنا بالتعديل على الغرض في تابع ما، و لكن لا يمكننا إعادة إسناد المتحول مثل التمرير العادي بالمرجع، حيث أن إعادة الإسناد سوف تعطي قيمة أخرى للمرجع و بالتالي سنصبح نتعامل مع كائن آخر. باختصار يمكنك تغيير القيمة باستعمال توابع الكائن، و لكن لا يمكنك تغيير ما يؤشر إليه الكائن الذي قمت بتمريره، أي أنه سيبقى يحوي على نفس الكائن و لكن يمكن تغيير خصائصه.
-
يمكنك حماية الفيديوهات من السرقة (عن طريق تنزيل الفيديو أو نسخه أو تسجيل فيديو للشاشة) عن طريق استعمال إحدى إضافات ال wordpress و هي CopySafe Video Protection بعض ميزات هذه الإضافة هي: سهلة التنزيل و الاستخدام. يمكنك تضمين الفيديوهات بشكل ديناميكي باستعمال الجافاسكريبت. يمكنك تشفير الفيديوهات. تمنع حفظ أو عرض الفيديو في مكان آخر غير موقعك. تمنع تسجيل لقطات للشاشة عند عرض الفيديو (حيث أنه بإمكان أحدهم أن يقوم بتشغيل الفيديو و تسجيل الشاشة الخاصة به، و لكن هذه الإضافة تحميك من ذلك). يمكنك إضافة علامة مائية على الفيديوهات الخاصة بك.
-
بعض الميزات التي توضح الفرق بين الطريقتين: من أجل fetch: لا يوجد بها طريقة مضمنة للتعامل مع الوثائق. لا توجد طريقة لكي نضع مؤقت. لا يمكن تعديل نوع المحتوى في ترويسة الاستجابة. إذا كان طول المحتوى متوافر و لكن مخفي فإنه من غير الممكن معرفة طول جسم الاستجابة. سوف تقوم باستدعاء ال handler المسؤول عن إجهاض الإشارة حتى لو أن الطلب قد تم بنجاح. لا يوجد مؤشر للتقدم في عملية رفع الملفات. من أجل XHR: لا يوجد طريقة لعدم إرسال ال cookies بشكل قياسي. لا يمكنها أن تعيد أغراض من FormData. لا تحتوي على مكافئ لنمط no-cors الموجود في fetch. دائماً تتبع إعادة التوجيه redirect.
- 3 اجابة
-
- 1
-
-
يمكنك إضافة خاصية إلى الغرض الذي تريده فيها الوقت الذي تم إنشاءه، و من ثم يمكن القيام بكتابة مهمة دورية تقوم بالتحقق فيما إذا كان هنالك غرض قد تجاوز المدة أم لا. مثلاُ في حالتك نضع للغرض الذي يمثل الستوري وقت الإنشاء و نقوم بكتابة مهمة دورية مثلاً كل 10 دقائق أو حسب الرغبة تقوم بالمرور على الستوريات لل users و تحذفها في حال تجاوزت الوقت المحدد. يمكن القيام بذلك عن طريق مكتبة تسمى cron و هي مشابهة في العمل لل cron في نظام linux يمكن كتابتها بالشكل التالي: var cronJob = require("cron").CronJob; // هذه المهمة ستقوم بالتنفيذ كل 10 دقائق new cronJob("* /10 * * * *", function() { // نقوم بوضع الكود الذي نريد تنفيذه هنا }, null, true); يمكنك الإطلاع على تفاصيل هذه المكتبة هنا.
- 4 اجابة
-
- 1
-
-
يمكننا استعمال التابع setInterval و هو أحد توابع ال javascript يقوم هذا التابع باستدعاء تابع معين بعد وقت محدد. هذا التابع يقوم بتنفيذ التابع الذي نريده بشكل دوري، أي مثلاً في حال وضعنا له ثانيتين فسيقوم بتنفيذ التابع الذي نعطيه له كل ثانيتين. في حال أردنا التنفيذ مرة واحدة فيمكننا استعمال التابع setTimeout و هو مشابه للتابع السابق ما عدا أنه يقوم بالاستدعاء مرة واحدة فقط. يمكن كتابة التوابع السابقة بالشكل التالي: setInterval( function(){ alert("Hello") }, 3000 ); setTimeout( function(){ alert("Hello") }, 3000 ); في حال أردنا حذف تابع من غرض فيمكننا تزويد هذه التوابع بتابع يقوم بذلك و هي ستقوم باستدعاءه.
- 4 اجابة
-
- 1
-
-
في حال كنت على علم بإحدى لغات البرمجة و تقوم بالإنتقال لتعلم لغة جديدة و تريد معرفة أهم المكتبات، فإنه من المفترض أنك كتبت برامج في تلك اللغة و احتجت إلى وظائف معينة تؤديها لك تلك اللغة، على سبيل المثال التعامل مع الملفات على القرص الصلب، و بالتالي تقوم بالبحث عن ما يؤدي تلك المهمة في تلك اللغة. في حال لم تكن على علم بأي لغة فإنه من المفيد أن تقوم بأخذ دورة تتعلق بتلك اللغة، حيث أن الدورات بشكل عام تحتوي على أهم المكتبات الضرورية للعمل باللغة، يمكنك مثلاً الإطلاع على دورات حسوب من هنا. كما يمكنك أن تقوم بالبحث في مواقع الأسئلة و فلترة النتائج حسب اللغة التي تريدها و بالتالي يمكنك أن ترى ما الذي يقوم المبرمجون الآخرون بالسؤال عنه و بالتالي معرفة بعض المكتبات المهمة.
-
بما أنه لدينا إشعارات و مستخدمين، و هناك إشعارات تصل إلى عدة عملاء و عملاء يتلقون أكثر من إشعار، فإنه لدينا هنا علاقة متعدد لمتعدد. بالتالي أفضل طريقة للقيام بذلك هو إنشاء جدول لهذه العلاقة بحيث تحوي على المفتاح الرئيسي الذي يمثل العميل (أي المفتاح الرئيسي لجدول العملاء) بالإضافة للمفتاح الرئيسي لجدول الإشعارات، و بالتالي يمكننا في هذا الجدول تخزين هذه المعلومات. يمكن مثلاً في حال رأى مستخدم إشعاراً ما أن تضيف البيانات المطلوبة إلى هذا الجدول، أي المفتاح الرئيسي لهذا المستخدم بالإضافة إلى المفتاح الرئيسي للإشعار. بذلك عندما تريد تنبيه أي مستخدم يمكن في البداية البحث في هذا الجدول و استثناء أي إشعارات مرتبطة بهذا المستخدم في هذا الجدول. طريقة أخرى أن تخزن في هذا الجدول كافة الإشعارات، و عندما يرى مستخدم إشعار ما، تقوم بحذف السطر الذي يوافق المفتاح الرئيسي للمستخدم و المفتاح الرئيسي للإشعار. في كلتا الطريقتين الجدول الذي ستقوم بإنشاءه سيكون المفتاح الرئيسي له مركب من العمود الذي يمثل المفتاح الرئيسي للمستخدم و العمود الذي يمثل المفتاح الرئيسي للإشعار.
- 3 اجابة
-
- 1
-