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

لوحة المتصدرين

  1. سمير عبود

    سمير عبود

    الأعضاء


    • نقاط

      4

    • المساهمات

      3474


  2. Sam Ahw

    Sam Ahw

    الأعضاء


    • نقاط

      3

    • المساهمات

      1388


  3. معاذ الغامدي2

    معاذ الغامدي2

    الأعضاء


    • نقاط

      2

    • المساهمات

      2


  4. بلال زيادة

    بلال زيادة

    الأعضاء


    • نقاط

      2

    • المساهمات

      4376


المحتوى الأكثر حصولًا على سمعة جيدة

المحتوى الأعلى تقييمًا في 02/21/21 في كل الموقع

  1. هل لما ادرس من اكادمية حسوب يجب ان اكون ممتاز في الانجليزي مع العلم ان مستواي في الانجليزي ضعيف
    2 نقاط
  2. هناك عدة طرق مستخدمة. ممكن تحفظ القيمة عن طريق SharedPrefrence وتجلب قيمة المفتاح. يمكن عن طريق LocalStorage و أيضا يمكن جلب القيمة من المفتاح المخزن. أو عن طريق تنفيذ Setter , Getter ويمكن عن طريق الكود التالي. يمكن تعريف getter int get coinsValue { return coins; } أو بشكل مختصر int get coinsValue => coins; ويمكن أن يكون الكود الخاص بك هكذا import 'package:firebase_admob/firebase_admob.dart'; import 'helper.dart'; //const String testDevice = 'YOUR_DEVICE_ID'; class AdsRewardedVideoAd { static bool _loaded = false; static int coins = 0; int get coinsValue => coins; static RewardedVideoAd videoAd = RewardedVideoAd.instance; static void initialize() { FirebaseAdMob.instance.initialize(appId: AdManager.appId); } static MobileAdTargetingInfo targetingInfo = MobileAdTargetingInfo( keywords: <String>['flutterio', 'beautiful apps'], testDevices: <String>[], // Android emulators are considered test devices ); static RewardedVideoAd createRewardedVideoAd() { videoAd.load(adUnitId: AdManager.rewardedAdUnitId, targetingInfo: targetingInfo); RewardedVideoAd.instance.listener = (RewardedVideoAdEvent event, {String rewardType, int rewardAmount}) { if(event == RewardedVideoAdEvent.rewarded) { coins+=rewardAmount; print('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx $coins'); } }; } static void showRewardedVideoAd() { if (videoAd == null) videoAd = createRewardedVideoAd(); videoAd .show().catchError((e) => print("error in showing ad: ${e.toString()}")); } } ويمكن جلبها عن طريق الكلاس AdsRewardedVideoAd.coinsValue بحيث getter => coinsValue يأخذ قيمة coins عندما تتحدث في أي وقت. لقد أجبتك امس هنا, هل قمت بتجربتها. ارجوا إضافة ملفات المشروع هنا كاملاً للمساعدة في حل المشكلة.
    2 نقاط
  3. إطار العمل لارافيل مُجهز بشكل جيد للقيام بالإختبارات بشتى أنواعها يُمكنك إستخدام قاعدة بيانات ثانية للقيام بالإختبارات عليها لكن أي مشروع تقوم بإنشائه ستجده مُجهز مُسبقاً للقيام بالإختبارات على قاعدة بيانات من نوع sqlite في الذاكرة أي لست بحاجة لإنشاء قاعدة بيانات بالأساس فكما تعلم أن التعامل مع الذاكرة يكون أسرع من التعامل مع ملف في القرص الصلب لذلك تحتاج فقط للذهاب إلى ملف phpunit.xml حيث ستجد السطرين التاليين: <!-- <server name="DB_CONNECTION" value="sqlite"/> --> <!-- <server name="DB_DATABASE" value=":memory:"/> --> مٌعلقين فقط قم بإزالة التعليق: <server name="DB_CONNECTION" value="sqlite"/> <server name="DB_DATABASE" value=":memory:"/> لكن قبل أن تُفكر في قاعدة البيانات يجب عليك كتابة الخطوات التي تريد أن تسير عليها و تُنفذ أمر phpunit و كل مرة يظهر لك خطأ تُحاول تصليحه إلى أن تصل إلى نجاح الإختبار مثلا لنكتب إختبار خاصية إضافة كتاب: class BookTest extends TestCase { /** @test */ public function a_book_can_be_added_to_the_library() { } } ماهي خطوات إضافة كتاب؟ أليست كالتالي إرسال بيانات الكتاب إلى مسار مُعين ثم التأكد من أن الكتاب أضيف لقاعدة البيانات إذا لنكتب هذه الخطوات داخل التابع الذي أنشأناه: <?php $this->post('/books', [ 'title' => 'Book one', 'author' => 'Kamel', ]); $this->assertCount(1, Book::all()); إذا قمنا بذلك ثم نفذنا أمر phpunit سيفشل الإختبار بالطبع لكنه سيفشل في الخطوة الثانية و نحن ننتظر منه أن يفشل في الخطوة الأولى، لماذا؟ لان لارافيل إفتراضياً تقوم بمُعالجة الإستثناءات التي تُرمى لذلك يجب أن نُخبرها بأن لا تُعالج الإستثناء و بأن تقوم بعرضه و لحسن الحظ هي توفر دالة للقيام بذلك إسمها withoutExceptionHandling و دالة أخرى إسمها withExceptionHandling و هي ما يتم تنفيذه لذلك لابد من تعديلها حتى نرى فشل الإختبار: class BookTest extends TestCase { /** @test */ public function a_book_can_be_added_to_the_library() { $this->withoutExceptionHandling(); $this->post('/books', [ 'title' => 'Book one', 'author' => 'Kamel', ]); $this->assertCount(1, Book::all()); } } الآن لو قمنا بتنفيذ أمر phpunit سيفشل و سيُعطينا السبب: NotFoundHttpException: POST http://localhost/books هذا الإستثناء يعني أن المسار الذي نُحاول الوصول له غير موجود و بالتالي نفتح ملف web.php ثم نضيف المسار: Route::post('/books', [BookController::class, 'store']); بعد أن أنشأنا المسار نُعيد تجربة الإختبار و في هذه المرة سيظهر الخطأ التالي: BindingResolutionException: Target class [BookController] does not exist. ما يعني أن المُتحكم الذي أنشأناه غير موجود. فلنقم بإنشائه: php artisan make:controller BookController ثم نقوم بإستدعائه داخل ملف web.php: <?php use App\Http\Controllers\BookController; بعد ذلك نُعيد تجربة الإختبار عن طريق الأمر phpunit و في هذه الحالة سيفشل الإختبار بالسبب التالي: BadMethodCallException: Method App\Http\Controllers\BookController::store does not exist. يعني أن التابع store غير موجود في المُتحكم BookController دعنا نضيفه: <?php namespace App\Http\Controllers; use Illuminate\Http\Request; class BookController extends Controller { public function store() { } } مرة أخرى نُجرب الأمر phpunit و سيفشل الإختبار لكن في هذه المرة سيفشل في الخطوة الثانية و سيُعطي السبب التالي: Class 'Tests\Feature\Book' not found أي أن الصنف Book غير موجود دعنا نقوم بإضافة النموذج و ملف التهجير الخاص به و نستدعيه في كلاس الإختبار فوق: php artisan make:model Book -m وفي الكلاس BookTest نقوم بإستدعائه: use App\Models\Book; مرة أخرى نُجرب الأمر phpunit و بطبيعة الحال سيفشل أيضا و سيُعطي السبب التالي: QueryException: SQLSTATE[HY000]: General error: 1 no such table: books (SQL: select * from "books") هذا معناه أنه يُحاول جلب كل الكتب لكن نحن لغاية الآن لم نقم بتهجير قاعدة البيانات و نرجع لأول ما أخبرتك به أن إستعمال قاعدة بيانات ثانية من أجل الإختبارات لذلك نقوم بإلغاء التعليق من السطرين في ملف phpunit.xml، ثم نضيف ال trait الذي إسمه RefreshDatabase داخل صنف الإختبار ستجد أنه قد تم إستدعاؤه لكنه غير مستخدم دعنا نستخدمه: use Illuminate\Foundation\Testing\RefreshDatabase; class BookTest extends TestCase { use RefreshDatabase; } و هذا ال trait الهدف منه هو تنفيذ أمر التهجير عند تنفيذ الإختبار و عند إنتهاء الإختبار يقوم بعمل reset. بعد ذلك نقوم مرة أخرى بتنفيذ الأمر phpunit و بطبيعة الحال سيفشل أيضا و سيُعطي السبب التالي: Failed asserting that actual size 0 matches expected size 1. هذا الخطأ يعني أنه لم يتم إضافة الكتاب فهو جلب كل الكتب لكن وجد أن عددها 0 لكن نحن توقعنا 1 و هذا لأن الدالة store لا تقوم بشيء لغاية الآن، دعنا نضيف أكواد إضافة كتاب: use App\Models\Book; class BookController extends Controller { public function store() { Book::create([ 'title' => request('title'), 'author' => request('author') ]); } } بعد ذلك نقوم مرة أخرى بتنفيذ الأمر phpunit و بطبيعة الحال سيفشل لكن هذه المرة سيُعطي الخطأ التالي: MassAssignmentException: Add [title] to fillable property to allow mass assignment و هذا لأن لارافيل تُحاول حمايتك يُمكننا في هذه الحالة إخبار لارافيل أننا سنقوم بحماية أنفسنا و لا داعي أن تتدخل في هذا الأمر بعمل set للخاصية guarded في النموذج Book و جعلها فارغة: class Book extends Model { use HasFactory; protected $guarded = []; } بعد ذلك نقوم مرة أخرى بتنفيذ الأمر phpunit و بطبيعة الحال سيفشل أيضاً بسبب أن ملف التهجير الخاص بالكتب لا يوجد به الأعمدة title و author: QueryException: SQLSTATE[HY000]: General error: 1 table books has no column named title نقوم بإضافتها في ملف التهجير: $table->string('title'); $table->string('author'); ثم نعيد تجربة الإختبار عن طريق الأمر phpunit و أخيراً هذه المرة سينجح الإختبار. بسبب أن خاصية إضافة كتاب تم إضافتها بنجاح. و هكذا تقوم بإتباع نفس الآلية في بقية الإختبارات، نحن لم نختبر ال validation و لم نختبر إعادة توجيه المُستخدم مثلاً ، يُمكنك إختبار الخصائص بنفس الطريقة
    2 نقاط
  4. البرمجة الموجهة بالإختبار هي البرمجة عن طريق البدء بكتابة إختبارات لكل وظيفة بالتطبيق، وكل إختبار يجب أن يقوم بتحديد وشرح الكيفية التي سيتم التعامل بها مع الكود وما هو الناتج الذي من المفترض أن يقوم بإرجاعه في حال تم تنفيذ كل شيء بنجاح، وتقوم هذه الاختبارات بإرجاع إما حالة نجاح والتي تعني أن الكود يعمل بالطريقة الصحيحة التي يجب أن يقوم بها، أو حالة فشل في حال أن الكود به أخطاء وأنه لا يقوم بإرجاع الناتج الصحيح الذي يجب أن يقوم بإرجاعه لحالة الاختبار تلك. لذلك إن كنت تريد إنشاء تطبيق أو مشروع يعمل بشكل جيد و مُختبر من عدة نواحي، و تنتقل بمستواك في تطوير البرمجيات إلى مُستوى أعلى فعليك النظر في هذا الموضوع. هذه بعض الفوائد: تحدد لك الطريق للبدء بكتابة الكود فعوض أن تكون متردد في كتابة خصائص التطبيق وقلق بشأن إذا ما كان الكود الذي تكتبه سيعمل بشكل صحيح فالإختبارات ستقوم بقيادتك تقليل الأخطاء في المشروع يعطيك الثقة بالنفس تسهيل عملية إعادة بناء التعليمات البرمجية أو ما يُسمى بال refactoring دون القلق على عمل الخصائص إضافة خصائص و العمل على طلبات العميل بشكل سليم و بدون أية قلق هناك بعض القواعد التي يجب أن تنتبه لها عند إنشائك لأصناف الإختبار في laravel ف phpunit تبحث عن الملفات التي تنتهي ب Test.php لذلك على كل من الملف و الكلاس أن ينتهيان ب Test. و عند إنشائك لملف Test جديد عن طريق أمر Artisan عليك أن تُحدد ذلك: php artisan make:test JustExampleTest أيضاً أسماء التوابع يجب أن تبدأ بالكلمة test كما يلي: public function test_method_to_assert_something() { $result = 2 * 5; $this->assertEquals(50, $result); } الآن إذا قمت بتنفيذ أمر phpunit سيفشل الإختبار و هو ما نتوقعه ان يحدث. وسيُعطيك النتيجة التالية: Failed asserting that 10 matches expected 50. إذا أردنا تسمية التوابع بأسماء أخرى غير التي تبدأ ب test يُمكننا ذلك لكن يجب أن نُحدد ال annotation لكل تابع على أنه test بهذا الشكل مثلا: class JustExampleTest extends TestCase { /** @test */ public function it_just_a_simple_test() { $result = 2 * 5; $this->assertEquals(50, $result); } } بعض هذه الإعدادات يُمكن تعديلها من خلال ملف phpunit.xml لكن لا داعي لذلك، فقط إحترم تسمية الملفات و ضع ال annotation.
    2 نقاط
  5. الإصدار 1.0.0

    100686 تنزيل

    سطع نجم لغة البرمجة بايثون في الآونة الأخيرة حتى بدأت تزاحم أقوى لغات البرمجة في الصدارة وذاك لمزايا هذه اللغة التي لا تنحصر أولها سهولة كتابة وقراءة شيفراتها حتى أصبحت الخيار الأول بين يدي المؤسسات الأكاديمية والتدريبية لتدريسها للطلاب الجدد الراغبين في الدخول إلى مجال علوم الحاسوب والبرمجة. أضف إلى ذلك أن بايثون لغةً متعدَّدة الأغراض والاستخدامات، لذا فهي دومًا الخيار الأول في شتى مجالات علوم الحاسوب الصاعدة مثل الذكاء الصنعي وتعلم الآلة وعلوم البيانات وغيرها، كما أنَّها مطلوبة بشدة في سوق العمل وتعتمدها كبرى الشركات التقنية. دورة تطوير التطبيقات باستخدام لغة Python احترف تطوير التطبيقات مع أكاديمية حسوب والتحق بسوق العمل فور انتهائك من الدورة اشترك الآن بني هذا العمل على كتاب «How to code in Python» لصاحبته ليزا تاغليفيري (Lisa Tagliaferri) وترجمه إلى العربية محمد بغات وعبد اللطيف ايمش، وحرره جميل بيلوني، ويأتي شارحًا المفاهيم البرمجية الأساسية بلغة بايثون، ونأمل في أكاديمية حسوب أن يكون إضافةً نافعةً للمكتبة العربيَّة وأن يفيد القارئ العربي في أن يكون منطلقًا للدخول إلى عالم البرمجة من أوسع أبوابه. رُبط هذا الكتاب مع توثيق لغة بايثون في موسوعة حسوب لتسهيل عملية الاطلاع على أي جزء من اللغة مباشرة وقراءة التفاصيل باللغة العربية. هذا الكتاب مرخص بموجب رخصة المشاع الإبداعي Creative Commons «نسب المُصنَّف - غير تجاري - الترخيص بالمثل 4.0». يمكنك قراءة فصول الكتاب على شكل مقالات من هذه الصفحة، «المرجع الشامل إلى تعلم لغة بايثون»، أو مباشرةً من الآتي: المقال الأول: دليل تعلم بايثون اعتبارات عملية للاختيار ما بين بايثون 2 و بايثون 3 المقال الثاني: تثبيت بايثون 3 وإعداد بيئتها البرمجية المقال الثالث: كيف تكتب أول برنامج لك المقال الرابع: كيفية استخدام سطر أوامر بايثون التفاعلي المقال الخامس: كيفية كتابة التعليقات المقال السادس: فهم أنواع البيانات المقال السابع: مدخل إلى التعامل مع السلاسل النصية المقال الثامن: كيفية تنسيق النصوص المقال التاسع: مقدمة إلى دوال التعامل مع السلاسل النصية المقال العاشر: آلية فهرسة السلاسل النصية وطريقة تقسيمها المقال الحادي عشر: كيفية التحويل بين أنواع البيانات المقال الثاني عشر: كيفية استخدام المتغيرات المقال الثالث عشر: كيفية استخدام آلية تنسيق السلاسل النصية المقال الرابع عشر: كيفية إجراء العمليات الحسابية المقال الخامس عشر: الدوال الرياضية المضمنة المقال السادس عشر: فهم العمليات المنطقية المقال السابع عشر: مدخل إلى القوائم المقال الثامن عشر: كيفية استخدام توابع القوائم المقال التاسع عشر: فهم كيفية استعمال List Comprehensions المقال العشرون: فهم نوع البيانات Tuples المقال الحادي والعشرين: فهم القواميس المقال الثاني والعشرين: كيفية استيراد الوحدات المقال الثالث والعشرين: كيفية كتابة الوحدات المقال الرابع والعشرين: كيفية كتابة التعليمات الشرطية المقال الخامس والعشرين: كيفية إنشاء حلقات تكرار while المقال السادس والعشرين: كيفية إنشاء حلقات تكرار for المقال السابع والعشرين: كيفية استخدام تعابير break وcontinue وpass عند التعامل مع حلقات التكرار المقال الثامن والعشرين: كيفية تعريف الدوال المقال التاسع والعشرين: كيفية استخدام *args و**kwargs المقال الثلاثين: كيفية إنشاء الأصناف وتعريف الكائنات المقال الحادي والثلاثين: فهم متغيرات الأصناف والنسخ المقال الثاني والثلاثين: وراثة الأصناف المقال الثالث والثلاثين: كيفية تطبيق التعددية الشكلية (Polymorphism) على الأصناف المقال الرابع والثلاثين: كيف تستخدم منقح بايثون المقال الخامس والثلاثين: كيفية تنقيح شيفرات بايثون من سطر الأوامر التفاعلي المقال السادس والثلاثين: كيف تستخدم التسجيل Logging المقال السابع والثلاثين: كيفية ترحيل شيفرة بايثون 2 إلى بايثون 3
    1 نقطة
  6. مرحبا ما هي افضل طريقة لسحب رصيد من مستقل الى سوريا علما ان paypal محظور. ارجو نصيحة من لديه تجربة
    1 نقطة
  7. السلام عليكم ما الفرق بين html و html5؟ هل هما منفصلتان عن بعضهما؟
    1 نقطة
  8. لقد قمت بإنشاء رتل queue لإرسال كمية كبيرة من الرسائل الالكترونية للمستخدمين وقمت بتشغيل التطبيق على استضافة مشتركة عن طريق cron بالأمر التالي: php artisan queue:work يتم تنفيذ الأمر وإرسال الرسائل ولكن بعدها أحصل على هذا الخطأ وتتوقف العملية عن التكرار: [ErrorException] Invalid argument supplied for foreach() وعند مراقبة السجل ألاحظ وجود هذا الخطأ: [2015-04-12 18:59:01] production.ERROR: exception 'ErrorException' with message 'Invalid argument supplied for foreach()' in /home/a109/vendor/symfony/console/Symfony/Component/Console/Input/ArgvInput.php:287 Stack trace: #0 /home/a109/vendor/symfony/console/Symfony/Component/Console/Input/ArgvInput.php(287): كيف أستطيع تفعيل الرتل لإجراء العملية بشكل متكرر على الاستضافة المشتركة دون تكرار الخطأ؟
    1 نقطة
  9. يحدث هذا الخطأ عندما تمرر قيمة null إلى الحلقة، أي بمعنى آخر عند عدم وجود أعمال للقيام بها. وبالتالي يتم التوقف عن إرسال العمليات إلى الرتل ويعطي رسالة الخطأ لعدم وجود أي بيانات لإجراء حلقة التكرار عليها. يوجد أمر آخر لمنع حدوث ذلك أثناء تشغيل الرتل هو: php artisan queue:work --stop-when-empty ويقوم بدوره بإيقاف العمل عند عدم وجود أي عمليات ضمن الرتل. ولكن هذه الطريقة متبعة فقط للأعمال الصغيرة والتي لا تتطلب الكثير من الوقت. فبفرض تراكم عدد من الأعمال أكبر من 20 مثلاً وسيتم تكراره كل دقيقة، فذلك أيضاً سيسبب خطأ آخر أو تضارب في المعلومات لأن العملية السابقة لم تكن قد انتهت قبل البدء بالعملية التالية وهكذا. الأسلوب المتبع لحل هذه المشاكل وخاصة عند وجود كمية أكبر من العمليات هو كالتالي: أولاً نقوم بإنشاء أمر جديد لإرسال الرسائل: php artisan make:command SendContactEmails ضمن الملف SendContactEmails.php نقوم بالتغيير التالي: protected $signature = 'emails:work'; وضمن التابع handle: return $this->call('queue:work', [ '--queue' => 'emails', '--stop-when-empty' => null, ]); ثم ضمن app/Console/Kernal.php نضيف الأمر السابق: protected $commands = [ \App\Console\Commands\SendContactEmails::class ]; وأخيراً يتم جدولة الأمر السابق كل دقيقة بالشكل التالي: protected function schedule(Schedule $schedule) { $schedule->command('emails:work')->everyMinute()->withoutOverlapping(); } حيث سيسمح استخدام withoutOverlapping من تضارب العمليات وانتهاء العملية السابقة قبل البدء بالعملية التي تليها ويتم بعدها تشغيل cron بالأمر التالي: * * * * * /usr/local/bin/php /home/username/project/artisan schedule:run > /dev/null 2>&1
    1 نقطة
  10. مرحبا معاذ لا تطلب الدراسة في أكاديمية حسوب اللغة الانجليزية فجميع الدورات باللغة العربية شكرا لك
    1 نقطة
  11. انا اتعلم برمجة الويب بالتحديد الفرونت اند ولدي لابتوب امكاناته ضعيفة نوعا ما اريد تسطيب نسخة Windows 10 LTSC لانها خفيفة ولا تستهلك امكانيات الجهاز مع انها لا تحدث باستمارار سؤالي : هل الاكواد تشتغل بكفاءة على متصفح كروم و vs code وشكرا
    1 نقطة
  12. ليست سيئة ابدًا ولكن إن كان بإمكانك زيادة سعة الرام سيزيد ذلك بالطبع من سرعة الجهاز لديك وإن كان لديك القدرة لإضافة ssd ويسمح الجهاز بإضافة ssd ستتغير سرعة الجهاز بفرق كبير جداً
    1 نقطة
  13. أحاول ضمان عمل التطبيق في لارافيل في حال فشل أحد المكونات التي أقوم باستخدامها ضمنه. وأقوم حالياً باستخدام قاعدة بيانات لتخزين البيانات الأساسية (المستخدمين، المنتجات،...). بالإضافة لذلك أقوم باستخدام redis لحفظ الجلسات والبيانات الثانوية ضمن التطبيق. الذي أحاول القيام به الآن تحديداً هو أنه في حال فشل خادم redis لسبب ما، أريد العودة تلقائياً وتخزين البيانات ضمن قاعدة البيانات بدلاً من ال cache وبذلك أضمن عدم ضياع البيانات لأي سبب كان. مع العلم أنني أقوم بتخزين بيانات ال الكاش على خادم، وبيانات الجلسات على خادم آخر 'redis' => array( 'cluster' => false, 'default' => array( 'host' => '192.168.56.101', 'port' => 6379, 'database' => 0, ), 'session' => array( 'host' => '192.168.56.102', 'port' => 6379, 'database' => 1, ), ),
    1 نقطة
  14. السلام عليكم اثناء تنسيق div فى الصفحة واعطاء العرض والطول قيمة مطلقة مثلا 70% للعرض والطول 100% فان العرض يأخذ بالفعل 70% من مساحة عرض الصفحة لكن المشكلة ان الطول لا يأخذ سوى مساحة المحتوى فقط اريد كيف اجعل ال div يأخذ المساحة الكلية لطول الصفحة حتى ان لم يكن به اي محتوى <style type="text/css"> <!-- .div_main{ width:70%; height:100%; } وسوف تبدوا الصفحة هكذا
    1 نقطة
  15. وحدة القياس المئوية تعمل بشكل نسبي مع حجم الحاوي الأولي فاذا تغير حجم الحاوي الاولي فالقياس للعناصر الداخلية يتغير ايضا وهذا مثال للتبسيط <div id="one" style="height:50px"> <p>100% طول</p> </div> <div id="two" style="height:50px"> <p>100vh طول</p> </div> p { display:block; background:#eee; } #one > p { height:100%; } #two > p { height:100vh; } في المثال تلاحظ أن هناك نسختين تقريبا متطابقتين الاختلاف الوحيد هو أن p في div الاول لديها طول 100% وفي div الثاني لديها 100vh . ال p الdiv الاول اخذت طول 50px فقط لانه هو الطول النسبي لل div يعني هنا 100%=50px. ال p الdiv الثاني اخذت طول 100% من طول الbody
    1 نقطة
  16. وعليكم السلام ورحمة الله وبركاته مرحباً حمادة: يمكنك ذلك عن طريق أن تعطي ال div تنسيق .div_main { height: 100vh; // أي 100 من طول الشاشة المتاح أي الطول كله } سبب أنها لم تعمل مع height: 100% هو أن النسبة المئوية ليست طول حقيقي وإنما هي طول نسبى بمعنى أنه سيأخذ طوله نسبة لطول العنصر الحاوي له ( فلو كان العنصر الحاوي له 100px وكان العنصر 100% سيأخذ أيضاً 100px ولكن لو كان العنصر ليس له أي طول ثابت وفقط يتمدد حسب طول عناصره فلن يأخذ العنصر أي طول لأنه لا توجد قيمة يتم حساب الطول بناءاً عليها ) وكمثال لو العنصر الخاص بك عنصر مباشر داخل ال body فلن يكون له طول إلا إذا أعطيت ال body طول ثابت جرب أن تعطي ال body طول 100vh أو 1000px وسترى النتيجة
    1 نقطة
  17. إن إنشاء أكثر من اتصال واحد يمكن أن يتم عن طريق استخدام عنقود من redis. بحيث يتم أولاً تعريف الاتصالات ضمن .env QUEUE_DRIVER=redis BROADCAST_DRIVER=redis CACHE_CONNECTION=redis REDIS_CLUSTER=true REDIS_HOST=localhost REDIS_DEFAULT_PORT=7000 REDIS_SHARD_1_HOST=localhost REDIS_SHARD_2_HOST=localhost REDIS_SHARD_3_HOST=localhost REDIS_SHARD_1_PORT=7000 REDIS_SHARD_2_PORT=7001 REDIS_SHARD_3_PORT=7002 ثم ضمن config/database.php يتم إنشاء عنقود فيه الاتصالات باستخدام predis ويتم تحديد نفس المنفذ port لكل مجموعة أو عنقود، ويمكن إنشاء عدة اتصالات مع عدة عناقيد باستخدام منفذ مختلف لكل عنقود، مع تعريف منافذ مختلفة أيضاً ضمن env 'redis' => [ 'clustered' => [ 'client' => 'predis', 'cluster' => true, 'options' => [ 'cluster' => 'redis' ], 'clusters' => [ [ 'host' => env('REDIS_SHARD_1_HOST', '127.0.01'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_SHARD_1_PORT', 6379), 'database' => 0, ], [ 'host' => env('REDIS_SHARD_2_HOST', '127.0.01'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_SHARD_2_PORT', 6379), 'database' => 0, ], [ 'host' => env('REDIS_SHARD_3_HOST', '127.0.01'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_SHARD_3_PORT', 6379), 'database' => 0, ], ], ], 'default' => [ 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => 6379, 'database' => 0, 'cluster' => false, ], ]
    1 نقطة
  18. في نسخ لارافيل الأحدث من 5.4 أصبح يجب تغيير الكود الموجود ضمن resources/assets/js/bootstrap.js إلى الشكل التالي: window.Echo = new Echo({ broadcaster: 'pusher', key: 'المفتاح الخاص', cluster: ' المستخدم cluster', encrypted: true, auth: { headers: { Authorization: 'Bearer ' + YourTokenLogin }, }, }); حيث يتم تعريف token المستخدم ضمن الترويسة header. وأيضاً يجب التأكد من تغيير app/Providers/BroadcastServiceProvider.php إلى: Broadcast::routes() إلى Broadcast::routes(['middleware' => ['auth:api']]); ليتم إجبار أي وصول إلى القناة أن يتم التحقق منه، أو يمكن التحقق عن طريق JWT (Json Web Token) في حال يتم استخدامه، كالتالي: بدلاً من Broadcast::routes() إلى Broadcast::routes(['middleware' => ['jwt.auth']]);
    1 نقطة
  19. 1 نقطة
  20. مرحبًا ياسر.. هذه قائمة بأشهر البرامج في مجال الجرافيك ديزاين : 1 - Adobe Photoshop 2 - Adobe InDesign 3 - CorelDraw Graphics Suite 4 - Inkscape 5 - Sketch 6 - Adobe Illustrator 7 - Affinity Designer. 8 - GIMP 9 - Xara Designer Pro X 10 - Gravit Designer
    1 نقطة
  21. من وجهة نظري أن الفكرة الغير تقليدية هي التي تقدم إفادة حقيقية لشريحة معينة ، وبإمكانك الوصول إلى الأفكار التي تخدم الناس بالتعرف على مشاكلهم ثم تقدم لهذه المشاكل حلول ، أو تقدم ميزة إضافية تجعلك سابق بخطوة عن المنافس. ومن ضمن الأفكار التي أود أن أجد لها شركة عربية هي خدمة النشرة البريدية (موقع مثل getresponse أو aweber أو Mailchimp ولكن باللغة العربية ويكون بأسعار أقل ، كنت أتمنى أن يكون معي المال لتنفيذ هذه الفكرة ولكن إن كان بإمكانك أنت تنفيذها فأنت لها.
    1 نقطة
×
×
  • أضف...