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

سمير عبود

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

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

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

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

    34

كل منشورات العضو سمير عبود

  1. إن تعلم البرمجة شيء سهل و بسيط لكنه يحتاج بذل الكثير من الجهد و الوقت خصوصاً في البدايات لأن الإنسان بطبيعته يستصعب دائما تعلم الأشياء الجديدة، المصطلحات و التقنيات الموجودة في المجال عديدة لذلك قد يتوه كثيراً، قد يدخل مجال البرمجة و بسبب تعلمه العشوائي رُبما يترك المجال أو يُعيد التعلم من البداية، لذلك الأصح أخذ طريق واضح المعالم من البداية، لهذا السبب نجد جميع المختصين في المجال ينصحون المبتدئين بوضع هدف مُعين لدخولهم مجال البرمجة: هل أريد أن أكون مطور ألعاب؟ هل أريد أن أصبح مطور تطبيقات سطح مكتب؟ هل أريد أن أصبح مطور تطبيقات هواتف ذكية؟ هل أريد أن أصبح مطور مواقع ؟ هل ... طرح هذا السؤال سيُساعدك في اختيار المجال الذي ترغب أن تتعلمه و تبرز فيه كمبرمج و لعل أفضل المقالات التي ستضعك على الطريق هي: تعلم البرمجة بعد قراءة المقال ستأخذ نظرة عامة حول معظم المجالات، و التي ستُساعدك في البحث عن دورات في المجال الذي اخترته سواء مجانية أو مدفوعة. يُمكنك حينها أيضاً إستخدام محرك البحث لمعرفة التقنيات التي إذا تعلمتها ستُصبح مبرمج محترف على سبيل المثال لنفترض أنك تريد أن تُصبح مطور تطبيقات أندرويد إبحث عن: android development roadmap github سيُرشح لك بعض النتائج أدخل على إحداها مثلاً: android-developer-roadmap ستجد خريطة لمُعظم التقنيات و الأساليب التي يجب عليك تعلمها لتكون محترف في مجالك من خلالها يُمكنك أخذ الطريق خُطوة بخُطوة. و هكذا تفعل إذا اخترت مجال مغاير.
  2. الفكرة تُشبه لما يلي: <?php $account = AccountModel::where('store_id', $store_id)->first(); if ($account === null) { $newCode = 1; } else { $newCode = $account->account_code + 1; }
  3. ماذا تقصد بهذا ؟ أليس id يبدأ من 1 ثم السجل الذي يليه سيكون 2 و هكذا و ما فائدة account_code في هذه الحالة.
  4. إذا لاحظت أنه حتى تُحدد العُنصر الحاوي للزر لتلك المنشورات التي تحتوي على صور فقط هناك شيء إضافي و هو صنف has-post-thumbnail الذي يتواجد في وسم article الذي يحتوي على صورة و لا يتواجد في غيره، من خلاله يُمكنك تحديد العناصر المطلوبة التي تريد أن يكون تنسيقها مختلف: article.has-post-thumbnail .page-box .box-content .readmore-btn{ } لاحظ لا يوجد فراغ بين article و has-post-thumbnail. في المحدد لاننا نريد العُنصر article و في نفس الوقت يملك الصنف has-post-thumbnail
  5. غير واضحة هيكلية العناصر، من الصور التي أرفقتها وجدت أن الزر بداخل وسم div الذي يملك الصنف readmore-btn، يُمكنك إستخدام خصائص الصندوق المرن flexbox بإعطاء التنسيقات التالية له: .readmore-btn{ display: flex; justify-content: end; } لاحظ أنني أعطيت العُنصر الحاوي للزر الخاصية flex حتى يُصبح صندوقاً مرنا لنستطيع التحكم في توزيع العناصر داخله بسهولة، و بما أننا نريد أن يظهر الزر في الأخير استخدمت الخاصية justify-content التي تُساعد في تموضع العناصر على المحور x و بالتالي أعطيتها القيمة end. يُمكنك الإطلاع على المثال على codepen فهو يُشبه وضعيتك:
  6. إن كنت تريد مُبرمج في مشروع بمُقابل مادي يُمكنك طرح مشروعك على منصات العمل الحر مثل مُستقل او خمسات و سيقوم المستقلون بعرض خدماتهم عليك لتختار من تلك العروض ما يُناسبك. مستقل خمسات
  7. بالعكس تماما فدورة تطوير التطبيقات بإستعمال لغة php و إطار Laravel من بين أفضل الدورات و ذلك لأنها تحتوي على عدة مسارات تطبيقية التي ستُكسبك خبرة في التعامل مع المشاريع ستتعلم من خلال هذه المشاريع كيفية التحليل و البدأ في مراحل إنشاء المشروع و هذا الأمر سيُساعدك في الدخول إلى سوق العمل. و الشيء الجيد أنك ستحصل على متابعة من طرف مختصين لتحسين سيرتك الذاتية و حسابك الشخصي على مواقع العمل الحر. من الأفضل لك تحديد و تسطير الأهداف التي تريد أن تصل إليها و البدأ في مشوارك التعليمي و إذا واجهتك مُشكلة ما إبحث و استفسر عنها لأن ذلك هو السبيل في التطور، دع عنك التخوف و التردد لأنك ستبقى دائما في نفس النُقطة إذا لم تتخلص من مخاوفك فمسيرة الألف ميل تبدأ بخطوة، أنا متأكد تماما لو أنك إغتنمت الثمانية أشهر الماضية لكنت اليوم في مستوى آخر. تأكد أيضاً أن المجال واسع جدا و دائماً هناك أشياء جديدة فيجب على المطور دائما أن يواكب هذا التطور. @اسماعيل صدوقي يُمكن أن يُضيف بعض النصائح لك فهو متخرج من نفس الدورة.
  8. مرحباً خليل، في مثل هكذا حالات يُمكن التواصل مع فريق الدعم من مركز المساعدة و إطلاعهم على مُشكلتك بالتفصيل و سيعملون على حلها و مساعدتك في أقرب وقت.
  9. و عليكم السلام و رحمة الله و بركاته، لا لن تحتاج إلى مشاهدة و متابعة المسارات الأقدم إذا لم تكن قد بدأت بها. لا أعتقد أن المسارات الأقدم تدخل في حسبة الوقت فقط المسارات الجديدة. الفرق بينهما هو أن المسارات القديمة تستعمل مكتبات و تقنيات بإصدارات أقدم و الطلاب تواجههم فيها بعض المشاكل بسبب عدم التوافق في الإصدارات و ما إلى ذلك، المسارات الجديدة تحتوي على شرح أفضل، إصدارات أحدث من المكتبات و أطر العمل المُستخدمة، تقنيات أشهر و أفضل على سبيل المثال لا الحصر مسار تطوير واجهات متجر إلكتروني في المسار القديم كان الشرح يعتمد على تقنية gulp في أتمتة المهام أما المسار الجديد فيعتمد على webpack، حتى أن هذا المسار تم تحديثه مرة أخرى بإستعمال إصدارات حديثة من مكتبة webpack. مسار بناء خمس صفحات هبوط يعتمد على بوتستراب الإصدار الرابع في المسار القديم أما الجديد يعتمد على الإصدار الخامس و هو آخر إصدار. و هكذا في بقية المسارات و الدورات يتم تحديثها بإستمرار. المسارات الجديدة قد تكون تحديث لمسار موجود او إضافة مسار جديد.
  10. يُمكنك من خلال التابع eloquent تكوين الإستعلام الذي تُريد و تمريره له <?php public function dataTable($query) { $query = User::query()->where(function ($q) { if (request()->has('level')) { return $q->where('level', request('level')); } }); return datatables() ->eloquent($query) ... } أو يُمكنك القيام بذلك في الميثود query من صنف Datatable لأنه تم توفيرها لإنشاء و التحكم في الإستعلام كما تشاء: <?php public function query() { return User::query()->where(function ($q) { if (request()->has('level')) { return $q->where('level', request('level')); } }); }
  11. سبب المُشكلة أن الدالة update يجب أن تٌمرر لها 3 معاملات هي request و guest و id حيث أنها تلقت معاملين فقط و هما request و guest أي أن المُعامل الذي لم يتم تمريره هو id عند التنفيذ. أي أنه عند وضعك لمسار الدالة الموافق لها يجب تمرير كل من المُعاملين id و guest حيث أن المعامل request يتم حقنه من طرف لارافل تلقائياً. هذا ما يعنيه الخطأ أي أنك إن واجهت نفس الخطأ مرة ثانية يجب أن تُفكر بهذا المنطق. الآن سأسألك سؤال لماذا أضفت المُعامل id للدالة update و أنت بالفعل تملك بيانات الزائر مُسبقاً في المُعامل guest ؟ في نظري لست بحاجة لتمرير المُعامل id و لست بحاجة لوضعه كمعامل للدالة update كما لست بحاجة لجلب بيانات الزائر (guest) عن طريق: $guest= Guest::find($id); لارافل تقوم بذلك تلقائياً عن طريق ما يُسمى بربط النموذج بالمسار (Route model binding) بالتالي كل ما تحتاج له هو مسح المُعامل id من الدالة update و مسح السطر السابق.
  12. كما ذكر الأخ وائل، برنامج Laragon متوفر فقط لأنظمة ويندوز، و على نظام ماك او اس يوجد بدائل أخرى ك Mamp و Xampp. لكن إن كنت تريد توفير بيئة تطوير لإطار لارافل فأحد الخيارات المتاحة البسيطة و السريعة هي valet يُمكنك إتباع صفحة valet على توثيق لارافل لتثبيت و التعامل معها لخدمة مشاريعك على جهازك. قبل تثبيت valet يجب تثبيت: Homebrew الذي يُعتبر مدير حزم خاص بنظام ماك او اس ثم تقوم بتحديث Homebrew عن طريق الأمر: brew update ثم يجب إستخدام Homebrew لتثبيت PHP: brew install php بعد ذلك يجب تثبيت composer الذي سنستخدمه لتثبيت valet: composer global require laravel/valet أخيراً يجب تنفيذ: valet install الذي سيقوم بإعداد valet على جهازك. بعد تثبيت valet و إعدادها ستُصبح جاهز لبدء خدمة تطبيقات Laravel الخاصة بك. يوفر Valet أمرين لمساعدتك في خدمة تطبيقاتك: park and link. بعد تنفيذ الأمر: valet park بداخل أحد المسارات التي تريدها. كل التطبيقات التي تضعها بداخل ذلك المسار ستكون مُخدمة عن طريق رابط خاص بها سيكون الرابط من الشكل http://<directory-name>.test حيث directory-name هو إسم المجلد الذي يحوي ملفات ذلك التطبيق على سبيل المثال إن قمت بإنشاء تطبيق لارافل بالإسم tasks فيُمكنك الوصول إلى التطبيق من خلال المتصفح عن طريق http://tasks.test.
  13. يبدو أنه لديك خطأ ما في ملف style.css لا يُمكننا معرفة سبب الخطأ إذا لم يكن لدينا الملفات التي تعملين عليها. إن كنت مُشتركة في أحد دورات الأكاديمية و ظهرت لديك هذه المُشكلة بعد متابعتك لدرس ما يُفضل طرح إستفسارك في صفحة ذلك الدرس و سنتابع معك هناك.
  14. لديك مُشكلة في المُتغير form حيث إستخدمت الإسم form في تعريفك للمُتغير في الأعلى: const form = document.querySelector("form"); إستخدمت هنا الكلمة المحجوزة const لتعريف المتغير فأصبح ثابت لا يُمكن إستخدام نفس الإسم لتعريف مُتغير بنفس الإسم لذلك عند تعريفك للمُتغير مرة أخرى: var form = document.getElementById("feed-back"); أعطى خطأ وسبب المُشكلة. لحل المُشكلة قم بتغيير إسم المتغير في الأسفل إلى إسم آخر: var feedForm = document.getElementById("feed-back"); و إستعمال نفس الإسم: var feedForm = document.getElementById("feed-back"); async function handleSubmit(event) { event.preventDefault(); var status = document.getElementById("status"); var data = new FormData(event.target); fetch(event.target.action, { method: feedForm.method, body: data, headers: { 'Accept': 'application/json' } }).then(response => { status.classList.add('success'); status.innerHTML = "Thanks We will respond as soon as possible!"; feedForm.reset() }).catch(error => { status.classList.add('error'); status.innerHTML = "Oops! There was a problem submitting your form" }); } feedForm.addEventListener("submit", handleSubmit) أيضاً أنصحك بوضع الأكواد مع بعضهم في الأسفل و نضعهم بداخل: document.addEventListener("DOMContentLoaded", function (event) { }); الملف بعد التعديل: FeedBack.html
  15. هل بإمكانك توضيح الشيفرات التي ترى أنها تُسبب المُشكلة، يُمكنك رفع الملف الذي تُحاول تشغيله، حتى نستطيع مُساعدتك بشكل جيد
  16. أنا أيضاً لم أفهم النظام بشكل كامل، لكن كما ذكر الأخ وائل هيكلية الجداول هي من ستُسهل عليك العملية، و الهيكلية المناسبة هي جدول لبيانات الطباعة و جدول لبيانات الألوان و العلاقة هي أن كل سجل من جدول الطباعة يُمكن أن يكون له عدة سجلات من جدول الألوان أي تضع حقل print_id في جدول الألوان كمفتاح أجنبي على جدول بيانات الطباعة. عملية الإنشاء تكون كالتالي: - إستعلام لإنشاء سجل الطباعة - إستعلام آخر لإنشاء سجلات الألوان المُرتبطة بسجل الطباعة نفسه. أعتقد أنك قد قمت بها. أما عملية التعديل ستكون كالتالي: - إستعلام لتعديل بيانات سجل الطباعة - إستعلام لحذف بيانات سجلات الألوان المُرتبطة (السجلات القديمة) - إستعلام آخر لإضافة بيانات سجلات الألوان المُرتبطة (الجديدة). طريقة تطبيق الفكرة تعتمد عليك و على الخصائص التي تريد توفيرها في صفحة التعديل مثلا إن كانت عدد حقول الألوان ستبقى ثابتة في مرحلة التعديل فالأمر بسيط أما إن كان الأمر مُتغير أي يُمكن للمُستخدم تغيير عدد الحقول فتحتاج إلى وضع آلية لحذف عناصر الألوان و إضافتها (مثلاً توفير زر أمام كل حقل عند الضغط عليه يحذف العُنصر نفسه من الصفحة و زر آخر عند الضغط عليه يُضيف عُنصر جديد ) خُذ الأمر مرحلة بمرحلة حاول تطبيق أساس الفكرة و بعد ذلك إن اردت التطوير يُمكنك ذلك.
  17. إن الدروس 17 كافية لتعلم الأساسيات التي تحتاجها في تعلمك لمجال تطوير الواجهات الأمامية، الهدف من الدورة ليس إحترافك للغة جافاسكربت في حد ذاتها و إنما الدخول في مجال تطوير الواجهات الأمامية و إستخدام التقنيات و اللغات الأساسية في تطوير الويب مع بعضها في مشاريع حقيقية و فعلية و هذا ما يُميز دورات أكاديمية حسوب عن بعضها: الجانب التطبيقي و الجانب التوجيهي هو أكثر شيء مفيد لك في أكاديمية حسوب. ليس الهدف من الدورات هو شرح كل الخاصيات الموجودة في لغة ما و إنما الهدف هو شرح المفاهيم الأساسية التي ستحتاج لها في مجال الدورة و في مُعظم المشاريع أي المفاهيم الأساسية و هذا الجزء سيتم شرحه في مسار الأساسيات و مفاهيم أخرى ستتعلمها في الجانب التطبيقي. ليست الدورة هي من ستُعلمك كل شيء الأكيد أنها ستكون جزء من تعلمك و دافع و حافز لك، لكن الجزء الأكبر الذي سيزيد من مستواك و يُطورك هو أنت، حبك للمجال، إرادتك و شغفك في التعلم. نصيحة ستفيدك في طريقك: أي شيء يمر عليك و لا تعرفه أو تجد فيه لُبس ما إبحث عنه و أقرأ عنه، إجعل مُحرك البحث صديقك الدائم، بالتوفيق.
  18. حتى تظهر الصورة في ImageView نستخدم الخاصية src و نضع مسار الصورة التي نريد عرضها أنت لا تستخدمها حاول تعديل: tools:srcCompat="@drawable/ic_launcher_background" إلى android:src="@drawable/ic_launcher_background" ثم قم بعمل build مرة أخرى.
  19. بإمكانك إستخدام خواص الصندوق المرن (Flex Box) للوصول إلى ما تريد و هذا مثال عن ما تريد بالضبط على codepen: كما يُمكنك الإطلاع على بعض المقالات على الأكاديمية للتعرف على خواص الflex box منها: تعرف على CSS Flexbox وأساسيات استعماله لهيكلة صفحات الويب أساسيات Flexbox في CSS مع أمثلة عملية
  20. هناك صعوبة في جذب أول عميل لك على المنصة بسبب المنافسة الكبيرة بين المستقلين لكن هذا لا يمنع أبدا من حصولك على أول فرصة لذلك هناك بعض النقاط عليك الإهتمام بها منها معرض أعمالك يجب أن يكون واضح و يخدم المجال الذي تعمل فيه، العرض الذي تُقدمه، السعر الذي تعرضه، وقت تقديم العرض، كلها نقاط إن اهتممت بها ستُسرع في قبولك على أحد المشاريع، هناك بعض المساهمات تم طرحها من قبل الأعضاء ستكون مفيدة لك أنصحك بالإطلاع عليها: كما يُمكنك الإطلاع على: دليل المستقلين يوجد هنالك عدة مقالات مفيدة لك، كما بإمكانك الإطلاع على بعض الكتب و المقالات أيضاً التي نشرتها الأكاديمية هنا على المنصة: مقالات العمل الحر كتب العمل الحر
  21. تواصل مع فريق الدعم من خلال مركز مساعدة أكاديمية حسوب و سيُرشدونك للطريقة إن كانت موجودة و يقدمون لك المساعدة في أقرب وقت.
  22. هل بإمكانك تنفيذ الأمر: php --version إذا لم تحصلي على إصدار الphp المثبت فتحتاجين إلى إضافة مسار php إلى متغيرات البيئة إبحثي عن edit the system environment variables من خلال شريط البحث ثم من خلال system variables حددي متغيري path و أضيفي مسار جديد الذي سيكون مسار الملف التنفيذي ل php سيكون بهذا الشكل: C:\xampp\php
  23. الخطأ لديك في جلب الرقم الأوسط حيث أنك تقوم بحساب باقي قسمة 324 على 100 و الباقي سيكون 24 بالتالي يجب عليك أخذ حاصل قسمة الناتج على 10 للحصول على 2 بهذا الشكل: num = 324 d1 = (int) (num / 100) d2 = int((num % 100) / 10) d3 = num % 10 print(f"The reverse number of: {num} is: {d3}{d2}{d1}") # The reverse number of: 324 is: 423 لكن الطريقة ليست الأفضل و ليست عامة لكل الحالات، لذلك قدم المدربين في التعليقات أعلاه حلول أفضل.
  24. مفهوم Redis: Redis هو عبارة عن مخزن مفتوح المصدر يُستعمل لتخزين البيانات على شكل أزواج من مفتاح-قيمة Key-Value في الذاكرة الرئيسية In-Memory، حيث Key-Value storage عبارة عن نظام تخزين يتم فيه تخزين البيانات على شكل أزواج من المفاتيح والقيم ، تخزّن هذه الأزواج في الذاكرة الرئيسية RAM وهذا ما نقصده بـ In-Memory وبهذا يمكننا القول أن تقنية Redis تخزن البيانات في الذاكرة الرئيسية على شكل أزواج من المفاتيح والقيم. يكون المفتاح في هذه التقنية عبارة عن سلسلة نصية String، أما القيمة فيمكن أن تكون سلسلة محارف String أو قائمة List أو مزيج منهما. يُمكن استخدام Redis إمّا كخادوم قاعدة بيانات لوحده أو مرتبطًا مع قاعدة بيانات أخرى مثل MySQL. خطوات تثبيت Redis على أوبنتو: إعداد بيئة ومتطلبات Redis نقوم في البداية بتحديث جميع حزم apt-get: sudo apt-get update بعد ذلك نقوم بتحميل مُترجم (compiler) باستخدام الحزمة build-essential، والّتي من شأنها المساعدة في تنصيب Redis من المصدر: sudo apt-get install build-essential سنقوم بعدها بتحميل الأداة tcl الّتي يَعتمد عليها Redis: sudo apt-get install tcl8.5 تنصيب Redis: بعد أنّ تمّ تنصيب المُتطلّبات الأساسيّة، فمن المُمكن الآن الشروع وتنصيب redis، ويُمكن تحديد الإصدار المطلوب أو تحميل الإصدار الأخير والذي سيحمل دائمًا الاسم redis-stable: wget http://download.redis.io/redis-stable.tar.gz يجب بعد ذلك فك ضغط الملفّ والانتقال إليه: tar xvzf redis-stable.tar.gz cd redis-stable ثم المتابعة بتنفيذ الامر: make make ولتنصيب Redis على كامل النّظام، فيُمكن إما نسخ ملفاته من المصدر: sudo cp src/redis-server /usr/local/bin/ sudo cp src/redis-cli /usr/local/bin/ أو تنفيذ الأمر التّالي: sudo make install بعد انتهاء عمليّة التنصيب، من المُستحسن تشغيل Redis كحارس (daemon) في خلفيّة النّظام، ولعمل ذلك يأتي Redis بملفّ برمجي (سكريبت) لهذه المُهمّة. يجب الانتقال إلى المسار utils للوصول إلى هذا الملفّ: cd utils ومن ثم تشغيل الملفّ الخاص بتوزيعات Ubuntu/Debian: sudo ./install_server.sh سيَعرض السكريبت بعض الأسئلة لإتمام عمليّة التهيئة، ولكن يُمكن الاعتماد على الإعداد الافتراضي والاكتفاء بالضغط على Enter، وبعد انتهاء عملية التهيئة سيكون خادم Redis يعمل في الخلفيّة (background). يُمكن تنفيذ الأمر التّالي للوصول إلى قاعدة البيانات Redis: redis-cli يُمكن اختبار Redis كالتّالي: λ redis-cli 127.0.0.1:6379> ping PONG 127.0.0.1:6379> set name hsoub OK 127.0.0.1:6379> get name "hsoub" 127.0.0.1:6379> بإمكانك المتابعة مع المقال التالي: الذي يشرح كيفية التثبيت بشكل مفصل و الإطلاع على بقية أوامر Redis.
  25. Nginx عبارة عن مشروع مفتوح المصدر، له استخدامات مُختلفة قد يكون أهمها هو استخدامه كخادوم ويب. تنصيب NGINX بعد الدخول إلى السيرفر نفذ الأمريين التاليين لتثبيت وتشغيل برنامج Nginx على السيرفر: sudo apt-get update sudo apt-get install -y nginx بعد التثبيت يمكنك زيادة السيرفر من المتصفح عبر وضع عنوان السيرفر (Ip Address) في شريط العنوان في المتصفح، وسوف تظهر لك الصفحة الافتراضية لـNginx. تابع هذا الدرس لمعرفة كيفية التثبيت و ضبط خادم Nginx على توزيعة اوبنتو بالإضافة إلى مثال بسيط لتخديم صفحات html : و أيضا هناك عدة مقالات تم نشرها على الأكاديمية تشرح عن Nginx و كيفية التعامل معه بإمكانك الوصول لها من خلال: مقالات Nginx
×
×
  • أضف...