-
المساهمات
6975 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
218
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Wael Aljamal
-
للطباعة على القماش يتم تصدير الملفات بالطريقة CMYK، أما RGB يستخدم فقط للإعلانات التي تعرض على الشاشات. في حال كان اللون الأسود باهت يكون بسبب نوع الحبر أو عدم مناسبته لنوع القماش. قم بالبحث عن اسم المواد القماشية و أنواع الأحبار المستخدمة، أعتقد وجود دليل استخدام مع كل نوعية وهذا يضمن لك نتيجة أفضل.
- 3 اجابة
-
- 1
-
النموذج form ليس عنصر ذاتي الإغلاق. أعتقد أنك تقصد حقل الإدخال input إن العناصر ذاتية الإغلاق هي عناصر لا تقبل وضع عناصر أخرى دتخلها مثل : <area /> <base /> <br /> <col /> <embed /> <hr /> <img /> <input /> <link /> <meta /> <param /> <source /> <track /> <wbr /> عدم وضع الشرطة المائلة لايسبب خطأ بسبب أن مترجم أكواد HTML غير صاروم في قواعد كتابة اللغة و سوف يترجمها المتصفح بالطريقة الصحيحة. في حال استخدام إضافات Extention لمحرر أكواد VS code سيقوم بوضعهم تلقائيا مثل إضافة auto losing HTML tags وغيرها.
-
توفر أكاديمية حسوب أسلوب فرز و تصنيف للأسئلة و المشاركات لكل شخص ضمن صفحته، بعد الدخول لصفحتك، انقر فوق تصفح المحتوى (الزر موجود في الجزء اليساري للصفحة الشخصية) بعدها ستعرض لك التصنيفات على الجزء الأيمن من الصفحة. في الأسفل من هذه القائمة يوجد فئة الأسئلة و الأجوبة اختر منها الأسئلة و ستظهر الصفحة التالية التي فيها جميع أسئلتك. سيكون عنوان القسم : أسئلة بواسطة Ahmed Gamal
-
إن العنصر lable (دليل) منفصل عن العنصر input (حقل إدخال) أي أنهما لا يوضعان ضمن بعضهما البعض، إنما نكتب عنصر lable و نحدد الخاصية for و نعطيها قيمة id العنصر input المرتبط معه. مثال: <form > <label for="male">Male</label> <input type="radio" name="gender" id="male" value="male"> <br> <label for="female">Female</label> <input type="radio" name="gender" id="female" value="female"> <br> <label for="other">Other</label> <input type="radio" name="gender" id="other" value="other"> <br><br> <input type="submit" value="Submit"> </form> والنتيجة ستكون: قبل إضافة الوسم lable كنا نضع نص عادي للدلالة على محتوى حقل الإدخال، ومع lable أصبح الموضوع أفضل (يوجد جزء محدد لزضع النص و تنسيقه. - نلاحظ أن كلا من lable + input هي عناصر inline تتوضع جانب بعضها البعض. يمكنك إعطاؤ تنسيقات CSS لأي عنصر lable مثل أي عنصر آخر.
-
مرحبا أحمد، لقد استخدم المدرب الأقواس المجعدة { } وليس الدائرية ( ). واستخدام المحرف المائل ` (حرف ذ) في لوحة المفاتيح، حيث يستخدم هذا الرمز للإحاطة بالسلسلة النصية التي تحوي على تعابير يمكن تفسيرها أي أنها ليست نصوص. لتصبح: alert(`Your total is ${total}`); إن لغات البرمجة تهتم بالرموز و إن لكل منها معنى و استخدام مختلف، ارجو الانتباه لاستخدامات كل منها. - أرجو إرفاق أسئلة الدروس في القسم الخاص لهم تحت الفيديو. بالتوفيق
-
ادخل لوحة التحكم وابحث عن حذف الملفات المؤقتة أو إعادة بناء القالب. التعديلات على الملف الأصلي يمكن أن لا يؤخذ بها مباشرة بسبب وجود كاش لدى السيفر الخاص ببلغور وليس مشكلة متصفح. قم بنسخ تنسيق css لنلف منفصل و اختبره و في حال تأكدك أنه يعمل، ستكون المشكلة كما ذكرت سابقا. الكاش الخاص ب بلوغر يتخزن بذاكرة المخدم لتحقيق سرعة في نقل الملفات وعدم قراءة الملف من القرص الصلب في كل مرة يطلب الملف.
-
يتأثر أداء قاعدة البيانات العادية التي تكون على الحواسيب الشخصية مع عدد سجلات يقارب المليون سجل. إن حجم قاعدة البينانات نفسها لايؤثر لوجود خوارزميات بحث سريعة نوعا ما في MySQL، تأكد عند حجز الإضافة من أن يكون القرص الصلب من نوع سريع مثل SSD وأن يكون الرام كبير أيضا وهذا يتم حسابه بالاعتماد على عدد الزبائن ومعدل الطلبيات. كيف تحسن من أداء قاعدة البيانات: يجب أن يكون تصميم الجداول أمثلي قدر الإمكان (شخص له خبرة كافيه لعمل بنية الجداول و العلاقات بينهم و أنواع البيانات المختارة لكل حقل وتقليل عدد الحقول قدر الإمكان) العمل على تحسين علاقات الربط join الفهرسة بالاعتماد على ‘where’, ‘order by’, and ‘group by’ استخدام Full-Text Searches عند البحث في الحقول النصية ضبط حجم الذاكرة المؤقتة وإعدادتها بشكل أمثل حسب قدرات المخدم وطبيعة الاستعلامات MySQL Query Caching
- 4 اجابة
-
- 1
-
يوجد طريقتين: الأولى عن طريق الصنف faker المعرف مسبقا في لارافيل: <?php /* @var $factory \Illuminate\Database\Eloquent\Factory */ use App\Product; use Faker\Generator as Faker; $factory->define(Product::class, function (Faker $faker) { return [ 'name' => $faker->word, 'short_description' => $faker->sentence, 'description' => $faker->paragraph, 'category_id' => function () { return factory(App\Category::class)->create()->id; }, 'amount' => $faker->randomFloat(2, 0, 10000), 'image' => $faker->image('public/storage/images',640,480, null, false), ]; }); حيث كما نلاحظ أن السطر التالي هو الذي قام بتشكل الصور: 'image' => $faker->image('public/storage/images',640,480, null, false), أو: $factory->define(Post::class, function (Faker $faker) { return [ 'image'=>'https://source.unsplash.com/random', ]; }); لإضافة أبعاد محددة للصور نضيف القيمة التالية للمسار 600*800/random/~ الطريقة الثانية عن طريق استخدام الموقع lorempixel: <img src="http://lorempixel.com/400/200/sports/" /> هنا يمكنك عمل كود php بسيط يشكل أرقام عشوائية أو تسلسلية وحشر الروباط في قاعدة البيانات.
-
ربما تكمن المشكلة في أولوية التنسيقات، في حال كتابة محدد وصول عن طريق class في الجزء السفلي للملف و وجود تنسيق يعتمد على id في الجزء العلوي، فإن تنسيق id سيعطي تأثيره لأن له أولوية. احتمال آخر، هو تضمين عدة ملفات css و تضارب اسماء الصفوف و التنسيقات، في حال كان لديك عنصر تطبق عليه تنسيق يمكنك إضافة الكلمة المفتاحية important! ضمن نفس سطر الخاصية التي لا تظهر فيعطيها معالج css أولوية. مثال: <!DOCTYPE html> <html> <head> <style> #myid { background-color: blue; } .myclass { background-color: gray; } p { background-color: red !important; } </style> </head> <body> <p>This is some text in a paragraph.</p> <p class="myclass">This is some text in a paragraph.</p> <p id="myid">This is some text in a paragraph.</p> </body> </html> لاحظ النتيجة: بالرفم من أن محدد الوصول خلال الوسم p هو الأقل أهمية لكن إضافة important جلعت تنسيقه يطبق.
-
هل يمكنك استبدال \ ب / ضمن المسارات؟
-
ماهو نوع الملفات؟ أرجو ذكر أي تفاصيل مفيدة.
- 6 اجابة
-
- 1
-
إن أكاديمية حسوب تقدم دورات لجميع الطلاب المشتركين و الذين يرغبون بالتسجيل بدون أي شرط للعمر. يمكنك الإطلاع على المعلومات العامة لدورات حسوب من الأسئلة الشائعة, و لمعلومات الدورات من هنا: دورات تعليمية
-
إن تشغيل نظام macOs عن طريق محاكي على نظام ويندوز هو أمر ممكن، مثلا تثبيته عن طريق VirtualBox لأنه اقل بيئة لاستهلاك الموارد (يوجد vm ware workstation)، وتكمن التوافقية في حال وجود معالج إنتل له معمارية 64x بت, لاحظت ذلك من عدة شروحات ولكن اعتقد يمكن ان يعمل بغير معالجات. بطبيعة الحال، ستتأثر سرعة النظام و المعالجة بالطبع مقارنة مع نظام ماك مثبت مباشرة على الجهاز، هذا يعتمد على جيل المعالج، حيث يفضل ان يكون حديث i7 و جيل 8 مثلا. ولكن الأهم هو الذاكرة RAM والتي يجب أن تكون كبيرة نسبيا حتى 16 غيغابايت ليعمل بكفائة ولا تتعرض لبطئ في التشغيل. يعتمد هذا على مواصفات جهازك وعليك تجريب الأمر لتحكم بنفسك. سيكون مناسبا للتعلم و برمجة التطبيقات
-
عليك مراجعة دروس دوال البناء في #C. حيث انها التوابع المعرفة في الأصناف المسؤولة عن بناء الأغراض.
-
أرجو الإنتباه لرسالة الخطأ البرمجية التي تكتب في محرر الأكواد، حيث بعد تجريب البرنامج، تبين أن الخطا يقول أنك لم تفم بتعريف دالة بناء Constructer تستقبل 3 وسطاء. حيث أن الدالة البانية لها نفس اسم الصنف أي car و تعمل set للقيم الممرة، مثل الدالة information لديك لكن باسم الصنف نفسه car، أرجو تعديل البرنامج و إضافة الدالة البانية، و قراءة رسالة الخطأ بتمعن فهي تدل على المشكلة.
-
أرجو شرح المشكلة مع وضع صورة للخطأ
- 6 اجابة
-
- 1
-
خطوات مساعدة: تشكيل العقدة، ضع فيها البيانات التي ذكرتها: class Node { public: int data; Node* next; }; حيث تمثل كل عقدة شخص، يمكنك تسميتها person .. كيفية الطباعة: void printList(Node* n) { while (n != NULL) { cout << n->data << " "; n = n->next; } } نمرر لتابع الطباعة العقدة الأولى، ثم يقوم بنفسه بالانتقال للعُقد المجاورة عن طريق المؤشر next .. وفي كل تكرار للحلقة يتم استبدال العقدة الحالية بالعقدة التالية. بناء العقد: int main() { Node* head = NULL; Node* second = NULL; Node* third = NULL; // allocate 3 nodes in the heap head = new Node(); second = new Node(); third = new Node(); head->data = 1; // assign data in first node head->next = second; // Link first node with second second->data = 2; // assign data to second node second->next = third; third->data = 3; // assign data to third node third->next = NULL; printList(head); return 0; } لاحظ تم تعريف 3 مؤشرات في الذاكرة من نوع Node ثم تم بنائهم بالدالة البانية ()new Node . دالة الإضافة: تعمل مثل دالة الطباعة، بحيث عليك تمرير وسيط للدالة على رقم العقدة التي تريد حشر العقدة الجديدة مكانها، وعندما تصل لها، تقوم ببناء العقدة و ربطها مع العقدة السابقة (الحالة) و تجعلها تشير للعقدة التالية (هي العقدة next للعقدة الحالية). دالة الحذف: أيضا تعمل مثل دالة الطباعة، بحيث عليك تمرير وسيط للدالة على رقم العقدة التي تريد حذفها أو أي بيانات أخرى مثل الرقم. عندما تصل للعقدة الهدف تجعل العقدة السابقة لها تدل على العقدة التالية لها (أي تربط السابق باللاحق) وهكذا تصبح العقدة الحالية خارج السلسلة. لتحرير سجل من الذاكرة نستخدم: delete Node_name;
-
أرجو منك التجريب و كتابة شيفرة برمجية تحل المشكلة و بعدها يمكن أن نساعدك بتصليح الأخطاء.
-
يعمل android.location.PROVIDERS_CHANGED كمستمع لأحداث تغير حالة مقدم خدمة الموقع، وتكون عادة خدمة GPS. عند تغيير حالة GPS بين تشغيل و إطفاء on / off فهذا يرسل Broadcast للخدمات Services التي تستقبل هذا الحدث. في حال لم يم إعطاء إذن الوصول لخدمة الموقع ربما يظهر رسائل خطأ. Manifest.XML <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ender.projects.receivertest"> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> حتى تعرف من هو التطبيق الذي يظهرها عليك ب Long press on the notification ضغطة طويلة على الإشعار ثم معلومات التطبيق. في حال يظهر لك رسالة خطأ فهذا ربما بسبب debug message من مطور أحد التطبيقات ونسي حذف هذه الجزئية من البرنامج ربما ظهرت من تطبيق قديم تم تحديثه أو بعد تثبيت تطبيق آخر (لإي حال أنت لست مطور إنما مستخدم عادي) مثال: نضيف مستمع لتغير الموقع: <receiver android:name=".GpsLocationReceiver"> <intent-filter> <action android:name="android.location.PROVIDERS_CHANGED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> و مستمع الأحداث: public class GpsLocationReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().matches("android.location.PROVIDERS_CHANGED")) { Toast.makeText(context, "in android.location.PROVIDERS_CHANGED", Toast.LENGTH_SHORT).show(); Intent pushIntent = new Intent(context, LocalService.class); context.startService(pushIntent); } } } لمعلومات أكثر : LocationManager و الشيفرة من : GitHub، توثيق مفصل من هنا: Broadcast receiver for GPS on android
-
إن إكتشاف الثغرات في المواقع هو مهارات عالية المستوى يعمل بها خبراء و مبرمجين ماهرين، هؤلاء قضوا وقتا طويلا في تعلم جميع التقنيات من فهم الاساسيات لاحتراف لغات البرمجة و التدرب بشكل يومي، ومتابعة شروحات و دروس مخصصة في مجال الاختراق. لكن جميعهم بداو التعلم خطوة خطوة و مع مرور الوقت اكتسبوا هذه المهارات و من خلال التدريب الكثيف اصبحوا مخترقين.. يجب فهم آلية بناء مواقع الويب و كيف تعمل و آلية الاتصال و الشبكات و امور أخرى متقدمة. في حال تسجيلك لدورة علوم الحاسب، والتي هي دورة للأساسيات في مختلف مجالات البرمجة، تعطيك فكرة اوضح و شاملة أكثر و هي تحوي أساسيات جافاسكربت و مبادئ الخوارزميات والتي هي معارات إلزانية في بناء برمجيات بطريقة متسلسلة ومنطقية و معالجة جميع الحالات التي ممكن ان تسلكها البرمجيات. بشكل عام باقِ الدورات أكثر تخصصاً و تعمل على تدريب الطلاب على برمجة الويب و تصميم الصفحات باختلاف لغات البرمجة و أطر العمل لبناء مشاريع سليمة و تعمل بكفائة مع أحدت التقنيات المساعدة. ويت التدريب على استخدام مكتبات للحماية في بعض الدروس عند اللزوم وحسب دعم المنصات لها. إن تعلم الاختراق هو مجال جميل جدا و ممتع ولكنه يتطلب الكثير من التعلم و الجهد.
-
مرحبا أحمد، حاليا لا يوجد نظام إشعارات في حال نشر محتوى جديد للدروس، في حال لاحظت، يوجد دائرة رمادية بالمحتوى غير المقروء، بجانب كل درس في القوائم، اي توفر الأكاديمية سجل مشاهدة لكل طالب. بشكل عام تنشر الأكاديمية عن طريق منصاتها أخبار بشكل دوري و تعلن التحديثات على الدورات، عليك المتابعة بشكل دوري، و بما أنك تتابع التقنية التي تعلمتها فإن أي تحديثات تطرأ عليها، ستقوم الأكاديمية بعد فترة بتعديل الدروس و طرح المستجدات. أي انك تتوقع من تلقاء نفسك تحديث الدورات بفترات دورية، مثلا بعد طرح إصدار Laravel 8 بمدة قصيرة قامت الأكاديمية بتحديث المسار. أتمنى لك التوفيق
- 1 جواب
-
- 1
-
هل بدأت بكتابة البرنامج؟ في حال وجود أخطاء نستطيع تقديم المساعدة ولكن لن نكتب لك البرنامج أو نحل الوظيفة.
- 2 اجابة
-
- 1
-
أعتقد أن لديك خطأ بسيط إما في كتابة الكلمة المفتاحية أو مكان كتابتها (هل لديك وسم form و جميع العناصر input بداخله؟) أرجو مشاركة ملفات المشروع لنتمكن من مساعدتك بشكل أفضل.
- 3 اجابة
-
- 1
-
الشيفرتين البرمجيتين متطابقتين و لهما نفس الغرض و نفس الأداء، الاختلاف هو: عدد مرات استدعاء الدالة count لتحسب عدد عناصر المصفوفة. في الحلقة الأولى: for($i = 0; $i < count($salaries); $i++) تم اسدعاء الدالة count بعدد مرات اختبار الشرط (عدد عناصر المصفوفة) و إن كل منهم يلأخذ وحدة زمنية فقط لحساب عدد العناصر (1)O (وحدة زمنية واحدة) أي أن تكرار استدعاء الدالة لن يؤثر على أداء الحلقة. في الحلقة الثانية: for( $i = 0, $count = count($salaries) ; $i < $count; $i++) $i = 0, $count = count($salaries) نلاحظ أن الجزء الأول من حلقة for تم فيه تعريف متغيرين معاً، عداد الحلقة i و متغير يحوي عدد العناصر count.(وهذا مسموح) قبل الفاصلة المنقوطة التي تشير لبداية جزء الشرط من الحلقة. حيث تم تنفيذ استدعاء الدالة count مرة واحد هنا، أما في باقِ تكرارات الحلقة اعتمدنا على الشرط الموضح في الكود $i < $count - ملاحظة عامة: في بعض لغات البرمجة و عند استدعاء الدالة count تقوم هذه الدالة بالمرور على جميع عناصر المصفوفة و تقوم بعدهم أي أنها ستأخذ وقتا بعدد العناصر وهم عادة N عنصر (غير محدد) حيث نلاحظ أن تكرار الاستدعاء سيؤدي في هذه الحالة لزيادة في عدد العمليات الحسابية و بطئ في البرنامج. في PHP الدالة count تأخذ واحدة زمنية أي تنفيذها سريع و تكرار استدعائها لا يؤثر على البرنامج.
- 1 جواب
-
- 1