لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 11/28/21 في كل الموقع
-
كلا لن تحتاج لمشاهدة المسارات القديمة، لأن التحديثات ضمن الدورات تعمل على إصدارات المكتبات الجديدة والأدوات الحديثة أيضاً، أما في المسارات المؤرشفة بعضها يستعمل تقنيات لم تعد مستخدمة أو أصبح هنالك فوارق كبيرة بين الإصدار المستخدم و الإصدار الحديث. يوجد ملاحظة من إدارة الأكاديمية: وبشكل عام، بعض المسارات هي نفسها مثل (تصميم موقع ما ضمن الدروة) لكن بالإصدارات الأحدث للمكتبات و التقنيات.4 نقاط
-
لايمكن وضع طلبيتين post داخل بعضهم، انت تريد تنفيذ منطق app.post.notfs مرتين، مرة بشكل منفصل لنحفظ الإشعار في قاعدة البيانات، ومرة أخرى لنرسل الإشعار.. قم بعمل function منفصل يحوي المنطق المشترك، ثم قم باستدعائه مرتين، في fcm و في app.ppst.notfs4 نقاط
-
يمكن تحديد موعد آخر للاختبار ويتم إعطاءك ملاحظات حول نتيجتك، لا تقلق، للمزيد من التفاصيل ارجو فتح تذكرة مع الدعم الفني من مركز مساعدة حسوب واذكر الاستفسار لهم، شكرا لك3 نقاط
-
تكمن المشكلة في نوع تخطيط الواجهة، حيث يوجد عدة أنماط ولكل منهم طريقة لترتيب عناصر العرض في الواجهة الرسومية GUI. حاولي استخدام Absolute Layout فهي تمكن من التحكم بالعناصر بشكل مطلق من حيث إحداثيات لموقع x,y والامتداد (طول - عرض) width - height. يمكن تعديلها بالضغط بالزر الأيمن على الواجهة ثم اختيار التخطيط... يمكنك تعلم المزيد من تصميم واجهات JAVA GUI من مقالات أكاديمية حسوب: academy hsoub / java مشاكل تتعلق بنفس الموضوع:3 نقاط
-
رموز الاستجابة التي تبدأ ب 5xx تعطي معلومات عن أخطاء جانب الخادم Server Error. 500 Internal Server Error حدث خطأ غير متوقع في الخادم مما منعه من معالجة الطلبية. 501 Not Implemented إن HTTP method التي تمت الطلبية بها غير مدعومة من الخادم. 502 Bad Gateway حصل الخادم على رد غير صالح كان يحتاجه خلال عمله كبوابة لمعالجة الطلبية. 503 Service Unavailable المخدم غير جاهز لمعالجة الطلبية. 504 Gateway Timeout تأخر وصول الرد للطلبية خلال عمل الخادم كبوابة. 505 HTTP Version Not Supported (Experimental) إصدار البروتوكول غير مدعوم من قبل المخدم. 506 Variant Also Negotiates (Experimental) خطأ داخلي في إعداد المخدم 507 Insufficient Storage (WebDAV) لم يتمكن المخدم من تنفيذ HTTP method على المورد لأنه غير قادر على تخزين الحالة المطلوبة لإتمام معالجة الطلبية بنجاح. 508 Loop Detected (WebDAV) تم ملاحظة حلقة مفرغة (غير منتهية) أثناء معالجة الطلبية. 510 Not Extended يوجد إضافات extensions أخرى مطلوبة لإتمام معالجة الطلبية. 511 Network Authentication Required على المستخدم / العميل الحصول على تصريح ليتمكن من الوصول للشبكة.3 نقاط
-
رموز الاستجابة التي تبدأ ب 1xx تعطي معلومات عن حالة منخفضة في بروتوكول النقل transfer protocol-level information. 100 Continue استكمال: تم استقبال طلبية العميل ولم يتم رفضها، وعلى العميل أن يكمل الطلبية ويرسل باقي البيانات وإن كانت الطلبية مكتملة يتم تجاهل هذه الرسالة/ هذا الرد ومن ثم يقوم المخدم بإرسال رد نهائي. 101 Switching Protocol تبديل البروتوكول: يطلب المخدم من العميل ترقية إصدار الطلبية لديه مثلا HTTP 1.1 => HTTP 2.0 HTTP => HTTPS 102 Processing (WebDAV) يتم معالجة الطلبية: المخدم استقبل الطلبية ويقوم بمعالجتها ولايوجد رد مكتمل حتى اللحظة. 103 Early Hints - preloading الجلب المسبق: يسمح المخدم للعميل بالقيام بتحميل المصادر بشكل مسبق حتى يكتمل الرد3 نقاط
-
2 نقاط
-
أنا أيضاً لم أفهم النظام بشكل كامل، لكن كما ذكر الأخ وائل هيكلية الجداول هي من ستُسهل عليك العملية، و الهيكلية المناسبة هي جدول لبيانات الطباعة و جدول لبيانات الألوان و العلاقة هي أن كل سجل من جدول الطباعة يُمكن أن يكون له عدة سجلات من جدول الألوان أي تضع حقل print_id في جدول الألوان كمفتاح أجنبي على جدول بيانات الطباعة. عملية الإنشاء تكون كالتالي: - إستعلام لإنشاء سجل الطباعة - إستعلام آخر لإنشاء سجلات الألوان المُرتبطة بسجل الطباعة نفسه. أعتقد أنك قد قمت بها. أما عملية التعديل ستكون كالتالي: - إستعلام لتعديل بيانات سجل الطباعة - إستعلام لحذف بيانات سجلات الألوان المُرتبطة (السجلات القديمة) - إستعلام آخر لإضافة بيانات سجلات الألوان المُرتبطة (الجديدة). طريقة تطبيق الفكرة تعتمد عليك و على الخصائص التي تريد توفيرها في صفحة التعديل مثلا إن كانت عدد حقول الألوان ستبقى ثابتة في مرحلة التعديل فالأمر بسيط أما إن كان الأمر مُتغير أي يُمكن للمُستخدم تغيير عدد الحقول فتحتاج إلى وضع آلية لحذف عناصر الألوان و إضافتها (مثلاً توفير زر أمام كل حقل عند الضغط عليه يحذف العُنصر نفسه من الصفحة و زر آخر عند الضغط عليه يُضيف عُنصر جديد ) خُذ الأمر مرحلة بمرحلة حاول تطبيق أساس الفكرة و بعد ذلك إن اردت التطوير يُمكنك ذلك.2 نقاط
-
رموز الاستجابة التي تبدأ ب 4xx تعطي معلومات عن أخطاء جانب العميل Client Error 400 Bad Request طلبية سيئة حيث لم يفهما المخدم لخطأ في صياغتها، وعلى العميل إعادة الطلب بدون تعديل. 401 Unauthorized غير مصرح بك، الطبية تطلب بيانات تصريح من المستخدم وعلى المستخدم إعادة الطلبية مع إرفاق بيانات الترويسة المطلوبة. (هوية مستخدم غير معروفة) 402 Payment Required (Experimental) غير مستخدمة - تفيد في الدفع الاكتروني. 403 Forbidden ممنوع الوصول: طلبية غير مصرح بها وليس للمستخدم الحق في الوصول إلى المحتوى (تختلف عن 401 بأن هوية مستخدم معروفة و ممنوعة من الوصول) 404 Not Found غير متوفر: المخدم لم يجد الموارد المطلوبة. 405 Method Not Allowed الطريقة غير مسموحة: عند استخدام HTTP method غير مفعلة لهذا المورد. 406 Not Acceptable غير مقبول: لم يعثر الخادم على أي محتوى يتوافق مع المعايير التي قدمها عميل المستخدم في ترويسة الطلبية. 407 Proxy Authentication Required يتوجب على العميل عمل تصريح باستخدام الوكيل proxy. 408 Request Timeout تأخر استلام الطلبية ولم يستلمها المخدم لسبب استنفاذ وقت الانتظار. 409 Conflict لم يتمكن المخدم من إعادة رد للطلبية لسبب تضارب حصل مع حالة المورد 410 Gone المورد غير متوفر. 411 Length Required رفض المخدم قبول الطلبية لعدم تعريف طول المحتوى Content- Length في الترويسة (يعود العميل لإرسالها بشكل سليم) 412 Precondition Failed لم يحقق المخدم اشتراطات العميل التي وضعها في بيانات الترويسة. 413 Request Entity Too Large حجم الطلبية كبير، أكبر من الحد المعرف لدى المخدم. 414 Request-URI Too Long طول URI أكبر من قدرة المخدم على استيعابه 415 Unsupported Media Type نمط الوسائط المتعددة الممرر في Content-type غير مدعوم من المخدم. 416 Requested Range Not Satisfiable جزء البيانات المطلوب غير مرضي/ غير متاح / لا يمكن توفيره. 417 Expectation Failed لم يتمكن المخدم من معالجة الاستثناء الحاصل في الطلبية 420 Enhance Your Calm (Twitter) تم تقييد المستخدم من طلب API في البحث في تويتر 422 Unprocessable Entity (WebDAV) لم يستطع المخدم معالجة الطلبية بالرغم من فهمه لمحتواها 423 Locked (WebDAV) المورد مقفول وغير متاح. 424 Failed Dependency (WebDAV) فشل الطلبية الحالية متعلق بفشل الطلبية السابقة لها. 425 Too Early (WebDAV) يشير إلى أن الخادم غير راغب في المخاطرة بمعالجة طلب قد يتم إعادة تشغيله. 426 Upgrade Required رفض المخدم الطلبية وطلب من العميل ترقية إصدار البروتوكول لديه. 428 Precondition Required يوجد شروط و متطلبات من الخادم قبول الطلبية. 429 Too Many Requests قام العميل / المستخدم بإرسال العديد من الطلبيات ضمن وقت قصير (محدد) 431 Request Header Fields Too Large لا يرغب الخادم في معالجة الطلب لأن حقول الترويسة كبيرة جدًا. 444 No Response (Nginx) مخدم إنجن أكس لا يعيد أي بيانات للمستخدم ويغلق الإتصال 449 Retry With (Microsoft) يجب إعادة الطلبية بعد تنفيذ متطلباتها 450 Blocked by Windows Parental Controls (Microsoft) خدمة تحكم الأهل بالمحتوى Windows Parental Controls منعت الوصول للمورد. 451 Unavailable For Legal Reasons طلب المستخدم محتوى غير قانوني 499 Client Closed Request (Nginx) تم إغلاق الاتصال من العميل بينما كان مخدم HTTP يعالج طلبيته، مما منع المخدم من إعادة رد للطلبية.2 نقاط
-
رموز الاستجابة التي تبدأ ب 3xx تعطي معلومات عن إعادة التوجيه Redirection أي على العميل إعادة إرسال الطلبية إلى وجهة أخرى. 300 Multiple Choices عدة خيارات: يمكن للعميل اختيار الرد المناسب الذي يريده من مجموعة الردود. 301 Moved Permanently تم نقل العنوان URL بشكل دائم ويتم إرسال العنوان الجديد في الحقل Location header ضمن الطلبية، يمكن تخزين العنوان الجديد بالكاش (تخزين مؤقتاً إن لم يذكر العكس) 302 Found تم تغيير الرابط URL بشكل مؤقت يمكن تخزين العنوان الجديد ب cache (تخزين مؤقتاً إن لم يذكر العكس) Cache-Control or Expires header field 303 See Other المحتوى المطلوب غير موجود عليك استخدام URI آخر باستخدام GET للمصدر المطلوب. 304 Not Modified لم يتم تعديل الرابط فيمكن استخدام الرابط المخزن في cache التخزين المؤقت 305 Use Proxy (Deprecated) يجب استخدام وكيل للسماح بالوصول لهذا المورد (غير مستخدمة) 307 Temporary Redirect يمكن إعادة استخدام نفس HTTP method للوصول للموارد من رابط مختلف وتشبه 302 308 Permanent Redirect (experimental) تم النقل بشكل دائم، تشبه 301 إلا أن الموادر يجب طلبها بنفس HTTP method والرابط موجود ضمن Location header2 نقاط
-
رموز الاستجابة التي تبدأ ب 2xx تؤكد على نجاح الطلبية التي أرسلها العميل (متصفح - تطبيق). 200 ok نجاح / مقبول: الطلبية ناجحة بدون أي مشكلة. 201 Created تم الإنشاء: تؤكد على إضافة بيانات جديد في قواعد البيانات مثلاً (إضافة موارد). 202 Accepted مقبولة: الطلبية تم قبولها ولكنها غير مكتملة بعد، تستخدم في حالات المعالجة طويلة الأمد أي التي تأخذ وقتاً. 203 Non-Authoritative Information لستً مخولاً: تم إرسال بيانات توصيف metainformation ليست مطابقة لما لدى المخدم. 204 No Content لا يوجد محتوى / إجابة: تم الاستجابة للطلبية ولكن لا يوجد بيانات ليتم إعادتها، ربما يتم إعادة بيانات التوصيف metainformation مع تحديثها، هنا لا يوجد جسم للطلبية response body. 205 Reset Content يطلب من العميل إعادة ضبط الوثيقة التي أرسلت الطلبية. 206 Partial Content ترسل عند إعادة محتوى جزئي من مجال رد المخدم (يوجد بيانات أخرى سيتم إرسالها) 207 Multi-Status (WebDAV) قام العميل بعدد من العمليات وناتج كل منها موجود في جسم الرد. 208 Already Reported (WebDAV) تم الرد عليها مسبقاً.2 نقاط
-
يمكنك استعمال أمر من نوع CMD وحيد في ملف Dockerfile وهو الأمر الذي تريد تنفيذه خلال تشغيل الحاوية launch container (بناء الصورة) building the image لذلك نستخدم الأمر RUN بدل CMD RUN chmod 777 -R /src/main/* RUN chmod 777 -R /app/main/*2 نقاط
-
يمكننا حفظ الحاوية الحالية عن طريق commit ثم إعادة تشغيلها مع تمرير مسار حجم دوكر الجديد الشكل العام لتشغيل الحاوية مع تحديد حجم docker run -ti -v DataVolume:/data_volume_X image_name الخطوات: حفظ الحاوية الحالية في صورة جديدة $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5a8f89adeead ubuntu:14.04 "/bin/bash" About a minute ago Exited (0) About a minute ago agitated_newton ************ CONTAINER ID : 5a8f89adeead ************ $ docker commit 5a8f89adeead new_image_name تشغيل الحاوية الجديد مع الحجم الجديد $ docker run -ti -v "$PWD/DataVolume":/DataVolume new_image_name /bin/bash .2 نقاط
-
صراحة لم أفهم هذه الألوان تعود لأي مكون؟ هل هو فاتورة أم شيء آخر للمستخدم، على كل حال، نقوم بإنشاء جدول جديد وسيط بين جدول الطباعة و الألوان، مع ما يربط هذه المجموعة مع النظام (مستخدم - فاتروة - طلبية..) print_id - use_id | order_id - - - - - - جدول من حقلين يفي بالغرض. ليس لي فهم كامل للنظام لذلك لا أستطيع تحديد مايلزم بدقة.2 نقاط
-
السلام عليكم ورحمة الله وبركاته, أنا حاليا أعمل على تطبيق أدمن لتطبيقي الاخر على الـFireBase. وفي هذا التطبيق لدي عدة أنواع من الـ Edit Texts, ومن ضمنها Edit Text لكتابة المقالات وأظهارها في String موجود في الفايربيس وايضا أظهارها في Text view موجودة تحت نفس الـEdit Text. أنا أريد أن أضيف خاصية hyperlink لأي كلمه أريدها من هذا الـEdit Text واربط معها رابط كل ما يضغط المستخدم عليها يوجهه الى متصفح الانترنت مع الرابط الموجود بالكلمة في text view.. أنا الأن أعرف كيف اجل الكلمات تأخذ خاصية الـ Bold لكن لا أعرف كيف أربطها مع Hyperlink.. مع العلم انا جربت هذه "المكتبة" لكن لا تعطيني الذي انا اريدة.. My Fragment class MainFragment : Fragment() { var num = 1 var string = "" override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_main, container, false) } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val article = view.findViewById<EditText>(R.id.article_edit) val boldBtn = view.findViewById<ImageView>(R.id.bold_button) val linkBtn = view.findViewById<ImageView>(R.id.linkBtn) val text = view.findViewById<TextView>(R.id.text) val linkString = view.findViewById<TextView>(R.id.link_string) val linkUrl = view.findViewById<TextView>(R.id.LinkUrl) val savelinkBtn = view.findViewById<Button>(R.id.saveLinkBtn) linkString.visibility = View.GONE linkUrl.visibility = View.GONE savelinkBtn.visibility = View.GONE boldBtn.setOnClickListener { val spannableString = SpannableString(article.text) spannableString.setSpan( StyleSpan(Typeface.BOLD), article.selectionStart, article.selectionEnd, 0 ) article.setText(spannableString) text.text = article.text string = article.text.toString() } linkBtn.setOnClickListener { if (num == 1) { linkString.visibility = View.VISIBLE linkUrl.visibility = View.VISIBLE savelinkBtn.visibility = View.VISIBLE num = 0 } else { linkString.visibility = View.GONE linkUrl.visibility = View.GONE savelinkBtn.visibility = View.GONE num = 1 } savelinkBtn.setOnClickListener { text.text = string linksToText(string) } } } fun linksToText(link: String) { var Link = Link(link) .setOnClickListener { Toast.makeText(context, "clicked", Toast.LENGTH_SHORT).show() } val article = requireView().findViewById<EditText>(R.id.article_edit) val text = requireView().findViewById<TextView>(R.id.text) article.applyLinks(Link) text.applyLinks(Link) }1 نقطة
-
إلامَ ترمز قيمة رمز استجابة HTTP التي من الشكل 5xx أي ضمن المجال 5001 نقطة
-
انا لا اعرف وسيله الدفع بالبي بال او الفيزا لازم حد يتواصل معي يعرفني طريقه الدفع اريد التواصل للاستفسار عن الخدمه التي ساشتريها1 نقطة
-
أحاول أن أقوم بعمل برنامج يطبع عمر المستخدم بأكثر من نظام رقمي مثل النظام العشري decimal و الثماني octal والست عشري Hex decimal والثنائي binary: std::cout << "Enter your age: "; int age{}; std::cin >> age; std::cout << "Your age in decimal is " << std::dec << age << '\n'; std::cout << "Your age in HEX is " << std::hex << age << '\n'; std::cout << "Your age in OCT is " << std::oct << age << '\n'; المشكلة هي أنه لا يوجد معالج إخراج output manipulator لتحويل الرقم إلى نظام ثنائي، قمت بتجربة std::bin ولكن لم ينجح هذا الأمر. كيف أقوم بطباعة الرقم إلى النظام الثنائي؟1 نقطة
-
1 نقطة
-
يمكنك التواصل مع مركز مساعدة حسوب لإطلاعك على الطريقة الأنسب في الدفع في حالتك. سؤال ممكن أن يفيدك:1 نقطة
-
ماذا يحصل لو أفشل في إجتياز اإختبار النهائي. هل هناك فرصة أخرى. شكرا لكم1 نقطة
-
السلام عليكم. أنا مهتم بدوة تطوير التطبيقات باستخدام لغة JavaScript. هل يمكنني متابعة الدورة بواسطة الدفع بالتقسيط. و هل هناك تخفيظات في الأيام المقبلة. شكرا لكم.1 نقطة
-
يمكنك مراسلة مركز المساعدة من هنا ، ثم تفتح تذكرة تخبرهم بما تريد وسيعملون على حل مشكلتك بـ أسرع وقت ممكن .1 نقطة
-
تعلمت أن كل الثوابت من نوع constexpr يتم تهيئتها وخزين قيمتها أثناء وقت التصريف compile time، لذلك لما لا نقوم بإستعمال define# بدلًا من ذلك، حيث أن أستعمالها أسهل ولا نحتاج إلى تعريف نوع type للثابت؟ #define MAX_STUDENTS_PER_CLASS 30 int max_students { numClassrooms * MAX_STUDENTS_PER_CLASS }; ما الفرق بين define# و constexpr؟1 نقطة
-
1 نقطة
-
سؤالي هل احتاج لدراسة ارشيف المسارات القديمه ؟1 نقطة
-
أجد في كثير من الأحيان يتم إستعمال كلمة const لتحديد قيمة ثابت وأيضًَا أجد أنه يتم إستعمال constexpr في نفس الكود بدون معرفة الفرق بينهما، لذلك أريد أن أعرف الفرق بين النوعين ومتى أستخدم كل واحد منهما؟1 نقطة
-
أنا قمت بعمل تطبيق لعمل push notifications ونجحت فى ارسال الاشعارات .. لكنى عندى مشكلة وهى اننى اريد ان احفظ اى اشعار اقوم بارساله فى الداتا بيز الخاصة بى .. هذا هو الكود var FCM = require("fcm-node"); const express = require("express"); const mongoose = require("mongoose"); require("dotenv/config"); const app = express(); app.use(express.json()); const notificationSchema = mongoose.Schema({ name: String, }); const NotificationModel = mongoose.model("Notification", notificationSchema); app.post("/fcm", async (req, res, next) => { try { let fcm = new FCM(process.env.SERVER_KEY); let message = { to: req.body.token, notification: { title: req.body.title, body: req.body.body, }, }; fcm.send(message, function (err, response) { if (err) { next(err); } else { // res.json(response); // res.send(message.notification.body); app.post("/notfs", async (req, res) => { let newNotf = new NotificationModel({ name: message.notification.body, }); newNotf = await newNotf.save(); res.send(newNotf); }); } }); } catch (error) { next(error); } }); app.get("/notfs", async (req, res) => { const notfs = await NotificationModel.find(); res.send(notfs); }); mongoose .connect(process.env.CONNECTION_STRING) .then(() => { console.log("connected"); }) .catch((err) => { console.log(err); }); app.listen(3000, () => { console.log("listened"); }); لماذا لايقوم بحفظ الاشعارات فى الداتا بيز رجاءا لو هناك طريقة افضل من تلك أرجو تركها وشكرا1 نقطة
-
إلامَ ترمز قيمة رمز استجابة HTTP التي من الشكل 4xx أي ضمن المجال 4001 نقطة
-
سبب المشكلة هو أن التابع std::cin يقةم بتقسيم المدخلات بالمسافات ويقوم بإستخدام أول جزء فقط (الكلمة "Mohssen") ويخزن الجزء الباقي، وعندما تستخدم std::cin مرة ثانية فإنه يجد الجزء الثاني (الكلمة "Ahmed") موجودة بالفعل، فيقوم بإستخدامها مباشرة دون إنتظار المستخدم لإدخال كلمات أخرى. لحل هذه المشكلة يمكنك أن تقوم بإدخال القيمة من خلال التابع std::getline حيث يقوم هذا التابع بإستقبال سطر كامل (إي إلى أن يصل إلى n\) ويمكنك تستخدمه كالتالي: std::cout << "Enter your full name: "; std::string name{}; std::getline(std::cin >> std::ws, name); // قراءة سطر كامل إلى المتغير name std::cout << "Enter your age: "; std::string age{}; std::getline(std::cin >> std::ws, age); // قراءة سطر كامل إلى المتغير age std::cout << "Your name is " << name << " and your age is " << age << '\n'; وستكون المدخلات كالتالي: Enter your full name: Mohssen Ahmed Enter your age: 23 Your name is Mohssen Ahmed and your age is 23 ما هو std::ws؟ الكائن std::ws هو معالج الدخل input manipulator، أي أنه يقوم بتعديل المدخلات قبل أن يتم تخزينها، والهدف منه هو أن يجعل التابع std::getline يتجاهل أي محارف فارغة في بداية النص، فعلى سبيل المثال إذا لم نقم بإستخدامه في الكود التالي: std::cout << "choose 1 or 2: "; int choice{}; std::cin >> choice; std::cout << "Enter your name: "; std::string name{}; std::getline(std::cin, name); // لاحظ أننا لم نستعمل std::ws هنا std::cout << "Hello, " << name << ", you picked " << choice << '\n'; ونتيجة الكود السابق سوف تكون: Choose 1 or 2: 2 Enter your name: Hello, , you picked 2 عندما تقوم بإدخال رقم 2 ثم تضغط على Enter (أي أنك تقوم بإدخال n\ إلى نهاية النص)، يقوم التابع std::getline بأخذ القيمة الرقمية فقط وهي 2 ويترك n\ مخزنة، وعندما تقوم بإستخدام التابع std::getline مرة أخرى فإنه يجد القيمة n\ موجودة بالفعل ويقوم بتخزينها في المتغير name، لهذا يجب أن تستخدم معالج الدخل std::ws لكي يتم تجاهل أي محارف فارغة (المسافة n\ أو t\ .. إلخ) من بداية المدخل، فيتم تجاهل وجود n\ وينتظر حتى يقوم المستخدم بإدخال اسمه. يمكنك أن تقرأ أكثر حول معالج الدخل من خلال هذه المقالة:1 نقطة
-
هيروكو لاتسمح برفع الصور أو غيرها من الملفات على file system .. أي نظام ملفات المخدم. أقترح عليك استخدام خدمة S3 المقدمة من أمازون للتخزين السحابي1 نقطة
-
بالتأكيد قواعد البيانات مهمة للغاية ولا يوجد تطبيق ويب كامل إلا وستجد أنه يستعمل أحد أنواع قواعد البيانات مثل MySQL أو PostgreSQL أو SQLite .. إلخ، وسوف تتأكد من هذا الأمر عندما تقوم ببناء مشاريع كاملة مثل عمل مدونة أو متجر إلكتروني أو حتى سكريبت إختصار روابط. قواعد البيانات بكل بساطة عبارة عن مجموعة من الجداول يتم فيها تخزين وترتيب البيانات بطريقة معينة في هذه الجداول بحيث يتم جلب وتخزين وتعديل وحذف هذه البيانات من خلال إستخدام لغة SQL. في كثير من الأحيان يجب تخزين بعض البيانات في مكان دائم، حيث أن تخزين هذه البيانات في متغيرات سوف يؤدي إلى حذفها بمجرد إغلاق التطبيق أو إنتهاء الطلب request .. إلخ، لذلك سوف تحتاج إلى الإحتفاظ بهذه البيانات في مكان دائم، وقد تتسأل لماذا لا أستعمل الملفات كوسيلة للتخزين فقط، حيث تقوم بالكاتابة في ملف معين، حيث يمكن عمل ملف لتخزين بيانات المقالات أو المستخدمين أو المنتجات إلخ في ملف معين، ولكن عندما تقوم بهذا الأمر سوف تواجة مشاكل في الأداء حيث لجلب تفاصيل مقالة معينة أو مستخدم معين من ملف كهذا سيتوجد عليك قراءة الملف كاملًا (أو سطر وراء سطر على الأقل)، وهذا الأمر لن يكون عمليًا على الإطلاق وسيكون بطيئًا وسيجعل من عملية ربط البيانات بين بعضها البعض أمرًا صعبًا للغاية. والحل هو إستخدام أي نوع من قواعد البيانات مثل MySQL أو PostgreSQL أو SQLite .. إلخ. لإيضاح الأمر أكثر حاول أن تقوم بعمل مشروع كامل، وهنا بعض الأمثلة: إنشاء مدونة صغيرة عمل متجر إلكتروني تقليد موقع مثل يوتيوب محاولة بناء شبكة إجتماعية بسيطة للغاية بناء لوحة تحكم لأي مشروع صغير عند محاولة تنفيذ أي مثال من الأمثلة السابقة سوف تجد أنه لا مفر من إستخدام قواعد البيانات، وسوف يتحتم عليك تعلمها، لأنه لا يوجد موقع تقريبًا إلا ويستعمل أحد قواعد البيانات، حتى سؤالك هذا (والتعليق الذي تقرأه الآن) يتم تخزينه في قاعدة بيانات ليتم جلبه عند الحاجة (عند عرض هذه الصفحة مثلًا). أيضًا أعتقد أنك تقوم بمقارنة كلمة المرور في سكريبت PHP فطريقة مشابهة للتالي: if ($user_password == '123456789') { // الدخول إلى الموقع } else { echo "كلمة السر غير صحيحة"; } وهذا الأمر ربما يعمل في الوقت الحالي ولكن له عيوب ومخاطر أمنية (حتى وإن قمت بتشفير كلمة المرور من خلال خوارزميات مثل MD5 أو SHA256) ولن يكون مفيدًا إن كان هناك أكثر من مستخدم بأكثر من حساب وكلمة مرور يستخدمون الموقع. ويمكنك تعلم أساسيات قواعد البيانات من خلال هذه المقالة، وهي مدخل ممتاز لفهم ماهيه قواعد البيانات وكيف تعمل: كما يمكنك تعلم لغة SQL (اللغة المستخدمة في التعامل مع قواعد البيانات) من خلال موسوعة حسوب (SQL - موسوعة حسوب). وإن أخترت قواعد بيانات PostgreSQL فيما بعد فأنصحك بالإطلاع على هذا الكتاب (الدليل العملي إلى قواعد بيانات PostgreSQL 1.0.0) والذي سيرشدك في تعلم الأساسيات بالإضافة إلى أمور متقدمة أكثر عن هذا النوع من قواعد البيانات.1 نقطة
-
يمكنك أن بإنشاء دالة invalidate_cache ويتم إستخدامها عندما يقوم شخص ما بتحديث منشور في المدونة، وتقوم هذه الدالة بإنشاء المفتاح المستخدم في ذاكرة التخزين المؤقت وإستخدام هذا المفتاح في حذف الذاكرة المؤقتة. from django.core.cache import cache from django.http import HttpRequest from django.utils.cache import get_cache_key def invalidate_cache(path=''): request = HttpRequest() request.META = {'SERVER_NAME':'localhost','SERVER_PORT':8000} request.LANGUAGE_CODE = 'en-us' request.path = path try: cache_key = get_cache_key(request) if cache_key : if cache.has_key(cache_key): cache.delete(cache_key) return (True, 'تم حذف الذاكرة بنجاح') else: return (False, 'المفتاح المستخدم غير موجود في ذاكرة التخزين المؤقت') else: raise ValueError('فشل في إنشاء مفتاح ذاكرة التخزين المؤقت') except (ValueError, Exception) as error: return (False, error) ويمكنك إستخدام هذه الدالة على النحو التالي في المكان الذي ترغب به: status, message = invalidate_cache(path='/path/to/blog/route/')1 نقطة
-
لا يمكنك الوصول إلى مستخدم الطلب مباشرة. تحتاج إلى الوصول إلى كائن الطلب ، ثم إحضار سمة المستخدم. user = self.context['request'].user والطريقة الأكثر أمانًا (لا يظهر خطأ KeyError أو خطأ AttributeError) كالتالي: user = None request = self.context.get("request") if request and hasattr(request, "user"): user = request.user كما يوفر Django-Rest-Framework طريقة أسهل للوصول إلى المستخدم الحالي من خلال إستخدام التابع CurrentUserDefault كالتالي: from rest_framework.fields import CurrentUserDefault class PostSerializer(serializers.ModelSerializer): class Meta: model = Post def save(self): user = CurrentUserDefault() # الحصول على المستخدم الحالي1 نقطة
-
هذا لأن المفتاح الفعلي للبيانات المؤقتة ليس "posts"، بل هو مفتاح يتم إنشاؤه ديناميكيًا بواسطة جانغو Django باستخدام كلمة posts مع خوارزمية md5، لذلك يوفر جانغو Django التابع make_template_fragment_key لكي تقوم بحذف البيانات المؤقتة. يقبل التابع make_template_fragment_key مدخلين، الأول هو اسم fragment_name هو المفتاح المعطى كاسم لهذه البيانات، وفي هذه الحالة يكون posts، بينما المعامل الثاني هو vary_on وهو قائمة بكل المعطيات التي يتم تمريرها إلى الوسم tag، ولحذف البيانات المؤقتة تقوم بعمل التالي: from django.core.cache import cache from django.core.cache.utils import make_template_fragment_key # cache key for {% cache 5000 posts %} key = make_template_fragment_key('posts') cache.delete(key) وإن كان لديك معطيات للوسم، فيمكنك تمريرها على النحو التالي: # cache key for {% cache 5000 posts data %} key = make_template_fragment_key('posts', [data])1 نقطة
-
مرحبًا @Mossad Ashraf عليك أولًا أن تأخذ الرقم من المستخدم من خلال الدالة input ثم تحويل هذا الرقم من نص '34' على سبيل المثال إلى رقم عن طريق الدالة int والتي ستحول النص المدخل إلى رقم بعد ذلك عمل حلقة for تبدأ من واحد وتنتهي إلى الرقم المدخل من قِبل المستخدم بهذا الشكل # تم تخزين الرقم المدخل في المتغير x for i in range(1, x): print(i) عليك أن تتأكد أيضًا من أن المستخدم قد أدخل رقم صحيح وليس أي حروف أو رموز أخرى من خلال جملة try except كالتالي: try: x = int(x) except ValueError: print('برجاء إدخال رقم صحيح')1 نقطة
-
مرحبًا @عبد الواحد الحدادي تطوير المواقع متعددة اللغات أصبح أسهل عن ذي قبل خصوصًا مع زيادة الدعم للغات RTLـ وسأخذ بوتستراب 5 على سبيل المثال، فقد أصبح يدعم اللغة العربية بكفأة الآن، لذلك كل ما ستحتاج تغيره هو فقط رابط ملف css الخاص ببوتستراب <!-- LTR languages --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet"> <!-- RTL language --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.rtl.min.css" rel="stylesheet"> مع إضافة الخاصية dir واللغة في وسم html <html lang="ar" dir="rtl"> وستجد أن الواجهة تحولت بالكامل إلى الإتجاه الصحيح. إن كنت تستخدم الإصدار 4 من بوتستراب فيمكنك الإطلاع على نسخة RTL من هنا. هذا بالنسبة لواجهة المستخدم أم بالنسبة إلى الـ Backend ففي Laravel توجد مكتبة mcamara التي ستسهل عليك عملية تطوير موقع متتعد اللغات. عند تثبيت هذه المكتبة بشكل صحيح، سيتم وضع اللغة في أول كل رابط داخل الموقع بالشكل التالي: // صفحة التواصل باللغة الإنجليزية http://example.com/en/contact // صفحة التواصل باللغة العربية http://example.com/ar/contact كما إن هذه المكتبة ستوجه المستخدم إلى الرابط الصحيح في حالة لم يتم تحديد اللغة في مسار الموقع URI، فإذا زار المستخدم الموقع من خلال الرابط https://example.com/ فسيتم توجيهه تلقائيُا إلى الرابط التالي علي سبيل المثال: https://example.com/ar ويمكن أيضًا تغير النصوص الخاصة بالصفحة حسب اللغة من خلال ملفات lang التي يقدمها laravel، ستجد في المجلد resources/lang مجلد بإسم en خاص باللغة الإنجليزية ويمكنك أن تصنع مثل هذا المجلد لأي لغة تريد بنفس الطريقة (مجلد ar في حالة اللغة العربية) وداخل هذا المجلد توجد ملفات الترجمة نفسها، كل ملف من هذه الملفات عبارة عن مصفوفة تحتوي على مفتاح وقيمة، كملف auth على سبيل المثال: <?php return [ 'failed' => 'بيانات الاعتماد هذه غير متطابقة مع البيانات المسجلة لدينا.', 'password' => 'كلمة المرور المستخدمة غير صحيحة.', 'throttle' => 'عدد كبير جدا من محاولات الدخول. يرجى المحاولة مرة أخرى بعد :seconds ثانية.', ]; ولكي تظهر المحتوى الخاص بلغة معينه عليك إستخدام دالة الترجمة __() وتمرير اسم الملف والمفتاح (بينهما نقطة dot فقط) كالتالي: <!-- filename.key --> <a href="#">{{ __('auth.failed') }}</a> بهذه الطريقة ستظهر جملة 'بيانات الاعتماد هذه غير متطابقة مع البيانات المسجلة لدينا.' في الصفحة العربية وجملة 'These credentials do not match our records.' في الصفحة الإنجليزية. ليس بالضرورة تصميم الموقع بكل اللغات المطلوبة يكفي تصميمه باللغة الرئيسية فقط، لأن الواجهة لن يتغير فيها شيء بإستثناء الإتجاه وربما بعض الصور والخطوط، في النهاية الموضوع متوقف على طبيعة العمل وطبيعة الموقع نفسه.1 نقطة
-
مرحبًا Haya يمكنكي طباعة الأرقام التي تقبل القسمة على 6 (أو أي رقم آخر) بإحدى الطرق التالية: المرور على كل الأرقام، والتحقق من ناتج عملية باقي القسمة num%6 والذي يجب أن يكون صفرًا في هذه الحالة. الطريقة الأسرع هي تغيير جملة الزيادة في حلقة for لتضيف لمتغير الحلقة num قيمة +6، كالتالي: for(num=6; num>=100; num=num+6) // أو هكذا for(num=6; num>=100; num+=6) بإحدى هذه الطرق ستكون سيتم طباعة الأرقام القابلة للقسمة على 6 فقط لاحظي أن الطريقة الثانية أفضل وأسرع من الطريقة الأولى لأننا لن نضطر للمرور على كل الأرقام، فعلى سبيل المثال: لطباعة كل الأرقام التي تقبل القسمة على 49 في الأرقام من 1 إلى 10000، بإستخدام الطريقة الأولى سنضطر إلى التأكد من كل رقم من 1 إلى 10000 بينما الطريقة الثانية ستقفز من رقم إلى الذي يليه مباشرة.1 نقطة
-
مرحبًا أكرم يمكنك الحصول على عمل من خلال منصة مستقل بالخطوات التالية: تصفح المشاريع الموجود الخاصة بالبرمجة وتصميم المواقع من هنا أقرأ عنوان ووصف كل مشروع يمكنك القيام به، أقرأ وصف المشروع جيدًا وتأكد من فهمك لكل المطلوب تنفيذه. قدر ثمن مجهودك والوقت اللازم لتنفيذ المشروع وقارنه مع الميزانية والمدةالمقترحة لتنفيذ المشروع (موجودة على اليسار في بطاقة المشروع). قدم عرضك وأكتب كل التفاصيل التي تستطيع القيام بها والوقت اللازم لك لكي تنهي المشروع. إنتظر رسالة من صاحب المشروع للتواصل، سوف يسألك عن بعض التفاصيل الإضافية على الأغلب وسيقارن بينك وبين كل المستقلين الذي قدموا على نفس المشروع أيضُا عند الإتفاق مع العميل وإختياره لك والموافقة على عرضك سوف تصلك رسالة تخبرك بأن صاحب المشروع قد بدأ صفقة معك، وحينها يمكنك أن تتواصل معه من خلال صفحة المناقشة (ستظهر لك بعد الموافقة على عرضك). أنجز المشروع بأسرع ما يمكن وبأعلى جودة ممكنة. أخبر صاحب المشروع بكل جديد من تغيرات وإنجازات في صفحة المناقشة لا تتواصل أبدًا خارج المنصة للحفاظ على حقوقك حتى إن طلب منك العميل، وفي حالة تواصلك معه خارج موقع مستقل أكتب كل التفاصيل على الموقع أيضًا. سلم كل ملفات المشروع حسب المتفق عليه بعد أن يراجع صاحب المشروع كل الملفات المطلوبة، سيقوم بقبول المشروع وسيتم تحويل تكلفة المشروع إلى حسابك (بعد خصم نسبة موقع مستقل) في خانة الرصيد المعلق لمدة 14 يوم ثم سيمكنك سحبها بأي وسيلة سحب مدعومة في الموقع. أبدأ من خطوة رقم 1 مرة أخرى. لا تنسى أن تقرأ مدونة مستقل للحصول على معلومات ونصائح أكثر1 نقطة