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

سمير عبود

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

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

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

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

    34

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

  1. نعم يوجد بعض الإستضافات المجانية لكن مشكلتها أنها تكون محدودة الموارد و غالباً لا يتم إستعمالها في مرحلة الإنتاج، بل فقط لإختبار ميزات التطبيق او المشروع من طرف العميل أو في مرحلة التطوير او المشاريع الشخصية و ليس التجارية، إن أردت البحث عن بعضها يُمكنك ذلك من خلال محرك البحث و سيُرشح لك بعضها من خلال بعض المقالات، عُموما أنا أستعمل منصة هيروكو (Heroku) فهي تتيح لك نشر 5 تطبيقات على ما أعتقد في الخطة المجانية. وقد تم نشر درس لعملية ال deploy على هذه المنصة في أحد المسارات التطبيقية لدورة php.
  2. إسمه معامل الشرط الثلاثي او ternary operator و هو موجود في معظم لغات البرمجة على ما أعتقد، في المثال الذي أرفقته فإننا نفحص حالة المشروع إن كانت تساوي واحد فإننا نعرض كلمة مكتمل أما في الحالة المعاكسة فإننا لا نعرض شيء. و هذا شرحه في موسوعة حسوب الخاص بلغة جافاسكربت و نفس الشيء في لغة php: المعامل الشرطي في JavaScript كما أنه يوجد له شرح في أحد دروس دورة php في مسار الأساسيات: العامل الثلاثي Ternary Operator
  3. يُمكنك التوجه إلى مركز المساعدة و شرح المشكلة لهم و سيوجهونك إلى الدورة التي ترغب الإشتراك فيها.
  4. بالطبع بإمكانك ذلك لأنه يوجد علاقة بين النموذج Role و النموذج Permission فمثلاً إذا كان لديك: $admin = Role::where('name', 'admin')->first(); يُمكنك الحصول على الصلاحيات المُتاحة لهذا الدور عن طريق العلاقة permissions: $admin = Role::where('name', 'admin')->first(); $adminPermissions = $admin->permissions; dd($adminPermissions); و بما أنه توجد علاقة فيُمكنك عمل أي شيء تريده مثلاً إذا أردت جلب كل الأدوار و تحميل الصلاحيات بشكل حثيث يُمكنك ذلك من خلال: $roles = Role::whereRoleNot(['super_admin', 'admin', 'user']) ->whenSearch(\request('search')) ->with(['permissions']) ->withCount('users') ->paginate(5); و في صفحة العرض و أنت تقوم بعرض الأدوار يُمكنك عمل حلقة لصلاحيات الدور: @foreach($roles as $role) ... @foreach($role->permissions as $permission) ... @endforeach @endforeach
  5. بإمكانك تخصيص تطبيق الطبقات الوسيطة (middlewares) في المتحكم و ذلك في الباني الخاص به مثال: <?php class DiscountController extends Controller { public function __construct() { $this->middleware('permission:read discount codes')->only('index'); $this->middleware('permission:add discount code')->only(['create', 'store']); $this->middleware('permission:edit discount code')->only(['edit', 'update']); $this->middleware('permission:delete discount code')->only('destroy'); } } مثلاً أنت تريد تطبيق الmiddleware auth على index فقط فتقوم بالتالي: $this->middleware('auth')->only('index'); و إن كنت تريد تطبيق أكثر من middleware على نفس التابع يُمكنك تمريرها على شكل مصفوفة: $this->middleware(['auth', 'middl2'])->only('index'); بطريقة عكسية للتابع only هناك تابع آخر يُسمى except و هو يعمل بعكس only.
  6. هل تقصد دروس و مقالات مكتوبة أم دروس دورة أم ماذا ؟ هناك عدة مقالات في الأكاديمية تشرح عن خاصية الصندوق المرن او flex box منها: تعرف على CSS Flexbox وأساسيات استعماله لهيكلة صفحات الويب أساسيات Flexbox في CSS مع أمثلة عملية أمثلة نموذجية لاستخدام flexbox في CSS3 و بإمكانك الوصول لعدة مقالات أخرى بمجرد البحث من خلال نموذج البحث، الرجاء التوضيح أكثر حتى نستطيع مساعدتك.
  7. React Native هو عبارة عن اطار عمل لبرمجة تطبيقات أصيلة عن طريق الجافاسكربت وذلك باعادة استعمال المكونات الطبيعية للمنصة. هذا الاطار يمكن من انشاء تجربة المستخدم دات مستوى عالي عن طريق ادوات برمجية تعتمد على javascript و مكتبة React و هو مدعوم من طرف فيسبوك. الهدف من استخدام React Native هو تسهيل عمل المطورين عبر جميع منصات الهواتف بشعار —  تعلم مرة واحدة واكتب في كل مكان. فتعلمك لهذه التقنية سيمكنك من برمجة تطبيقات لكل من أندرويد و iOS، يُمكنه التعامل مع firebase، التعامل مع الواجهات البرمجية ( APIs ) و خدمات الويب. قبل تعلم React Native تعلم أسس البرمجة بلغة جافاسكربت ثم تعلم مكتبة React لأنها ستُساعدك كثيراً في تعلم React Native.
  8. اعتقد أن المشكلة تكمن في تفعيل حسابك باي بال لأنه بعد ربط الحساب ببطاقة إئتمانية سيقوم باي بال بالتأكد من ملكيتك للبطاقة من خلال استقطاع مبلغ 1.95 $ من بطاقتك الائتمانية، يجب توفير 2 $ كحد أدنى في بطاقتك، ولا تقلق سيعاد لك المبلغ لاحقا بعد انتهاء عملية التأكيد. بعد إتمام عملية استقطاع المبلغ عليك الذهاب لموقع البنك الخاص بك والتأكد من كشف الحساب لبطاقتك الائتمانية والحصول على رمز التأكيد المكون من أربع أرقام والذي سيكون مكتوب في بيانات عملية الشراء. بعد الحصول على رمز التفعيل تعود لحسابك في باي بال وتضغط على المحفظة في القائمة، ثم تختار بطاقتك الائتمانية المراد تأكيدها، وادخل الرمز المكون من 4 أرقام وانقر على تأكيد. بعد تأكيد البطاقة سيفعل حسابك بشكل كامل. تذكر انه يُمكنك دائما التواصل مع الدعم الفني في كل من باي بال و مستقل لحل المشكلة.
  9. مرحباً معتز، يوجد لديك خطأ في تعريف المتحكم: class UserConroller extends Controller // الصواب class UserController extends Controller في صفحة العرض profile يوجد خطأ أيضاً: <img src="{{asser(images/avatar).$user->avatar}}" class="w3-cercle" style="size: 255px"> {{-- الصواب --}} <img src='{{asset("images/avatar/$user->avatar")}}' class="w3-cercle" style="size: 255px"> كما أنك في حالة إنشاء مستخدم جديد سيأخذ الصورة default.png لكن إسم الصورة لديك في المجلد هو avatar.png يجب تغييرها لنفس الإسم حتى تظهر الصورة الإفتراضية في حالة عدم وضع صورة. ملاحظة: هذا القسم هو للأسئلة العامة و ليس لأسئلة الدورات فإن واجهتك أي مشكلة أو إستفسار يُستحسن طرحه أسفل الدرس و سيُتابع معك المدربين هناك. بخصوص الإصدارات الخاصة بلارافيل فلا يوجد فرق كبير بينها و من الأفضل لك التعرف على عدة طرق لعمل شيء ما. كما أن الأكاديمية تقوم بتحديث و إضافة مسارات جديدة في العديد من الأوقات. و من المؤكد أنهم سيأخذون ملاحظاتك كلها بعين الإعتبار في تحديثاتهم المستقبلية. كما أن معالجة الأخطاء شيء مهم و هي ما ستزيد في خبرتك و تطوير مستواك. بالتوفيق.
  10. ليس هناك شيء مميز في الأمر فكل من vs code و android studio أدوات يستخدمها المطورون و ما دمت مرتاح مع أحدها في التطوير فيكفيك ذلك، هناك شيء و هو أن برنامج android studio به الكثير من الخصائص و يستهلك موارد الجهاز بشكل كبير من ذاكرة عشوائية و ما إلى ذلك فالتطوير على اندرويد ستوديو يتطلب جهاز بمواصفات أعلى بعكس vs code الذي حتى لو كان جهازك متوسط نسبيا تستطيع التطوير من خلاله.
  11. بعد تثبيت البرنامج قومي بتسجيل الدخول الى حسابك ثم من خلال قائمة file اختاري add local repository بعد ذلك حددي مجلد المشروع الخاص بك لفتحه على البرنامج ثم ستتمكنين من رفع ملفاتك
  12. يُمكنك إستخدام برنامج GitHub Desktop
  13. هذه هي الطرق المُستعملة في حل هذه المُشكلة، نحن لحد الآن لا نعلم إن كنت تُطبقين الخطوات بشكل سليم أم لا، الرجاء رفع صور لما تقومين به، حتى نعلم كيف نُساعدك.
  14. هناك عدة لغات أخرى على غرار لغة دارت ليس لها تصنيف في قسم البرمجة و السبب أننا لم نقم لحد الساعة بنشر مقالات في هذه اللغة إذا ما قررت الأكاديمية في المستقبل نشر مقالات متخصصة في هذه اللغة فستجد لها تصنيف حيث يُمكنك الوصول إلى مقالاتها من خلاله.
  15. يُمكنك إنشاء قاموس بقيم إبتدائية بهذا الشكل: my_dict = {"foo": 1, "bar": 34} print(my_dict) # {'foo': 1, 'bar': 34} أما إن أردت إنشاء قاموس بالإعتماد على قاموس آخر لنفترض أنه لديك هذا القاموس: my_dict = {"foo": 1, "bar": 34, "baz": 15} و تريد إنشاء قاموس ثاني من القاموس الأول يحتوي فقط على القيم الفردية يُمكنك ذلك من خلال: my_dict = {"foo": 1, "bar": 34, "baz": 15} new_dict = {k: v for (k, v) in my_dict.items() if v % 2 != 0 } print(new_dict) و هذا هو الخرج: {'foo': 1, 'baz': 15}
  16. لنفترض أنه لديك اسم الملف على شكل سلسلة نصية بهذا الشكل: example.jpeg للحصول على اللاحقة نقوم بتحويل السلسلة إلى مصفوفة بإستعمال الدالة split و تمرير مُحدد الفصل المحرف "." حتى يتم الفصل على أساسه. و بالتالي يُصبح لدينا مصفوفة مكونة من عنصرين example و jpeg. ['example', 'jpeg'] و لإستخراج اللاحقة من هذه المصفوفة نجلب آخر عنصر أي الموجود في الفهرس -1 بهذا الشكل: filename = "example.jpeg" extension = filename.split(".")[-1] print(extension) #jpeg
  17. إذا كنت تقوم بتحديث composer إنطلاقاً من الإصدار الأول فسيظهر لك تنبيه أن هناك إصدار أعلى مُتاح و هو الإصدار الثاني يُمكنك الترقية إلى هذا الإصدار عن طريق الأمر: composer self-update --2 كما يُمكنك معرفة رقم الإصدار عن طريق الأمر: composer -V للرجوع إلى إصدار سابق يُمكنك تنفيذ الأمر: composer self-update --rollback
  18. لا أعتقد أن هناك إمكانية لحذف عرض قمت بتقديمه على مشروع فبمجرد إضافة عرض لن تستطيع حذفه و سيتم إنقاص عدد العروض المتاحة لك ب 1 و سيتم رفع عدد العروض لك بعد قبول أحد العُروض المقدمة على المشروع او إغلاق ذلك المشروع على ما أعتقد أن مدة إغلاق مشروع ما هي 14 يوم إذا لم يتم قبول أي عرض. بإمكانك أيضاً التعديل على عرض قدمته خلال 15 دقيقة من إضافته، وأيضا إذا قام صاحب المشروع بالتواصل معك عبر الرسائل قبل توظيفك على ذلك المشروع. هناك عدة معلومات أخرى بإمكانك الإطلاع عليها من صفحة: الأسئلة الشائعة
  19. كل الدورات التدريبية المقدمة من أكاديمية حسوب عبارة عن دروس مرئية مقسمة على مسارات و كل مسار يحتوي على عدة فصول و كل فصل به عدة دروس مثلا دورة تطوير التطبيقات باستخدام JavaScript تنقسم إلى هذه المسارات أساسيات لغة JavaScript أساسيات React.js أساسيات Node.js تطوير تطبيق جوال باستخدام React Native تطبيق دردشة يشبه WhatsApp و تكون الدروس عبارة عن مقاطع فيديو يُمكنك مُشاهدتها و التطبيق مع المُدرب و إذا واجهتك مشاكل أثناء تطبيقك للدروس توفر الأكاديمية فريق من المدربين يُساعدك في حل مشاكلك و تقديم الدعم لك طيلة تعلمك في الدورة.
  20. نعم توثيق الهوية مهم لك و يوفر لك خصائص إضافية حيث أن صاحب العمل سيعرف أن المستقل الذي يتعامل معه حقيقي و يعطيه أريحية أكثر، و أيضاً سيُوفر لك 12 عرض بدل 10 عروض في العادة. صورة السلفي مع الهوية لن تظهر في الحساب الخاص بك و إنما تستخدمها الإدارة للتحقق من أنك مالك لتلك الهوية و ليست لشخص آخر. أظن أنه بإمكانك العمل دون توثيق الهوية لكن لا يُمكنك سحب رصيدك على ما أعتقد حتى توثق حسابك.
  21. الدالة toFixed ليست موجهة لعمل تدوير للأعداد و إنما تقوم بعمل format بطريقة fixed point notation و هي تعيد سلسلة نصية و ليس عدد. يُمكنك إستخدام التالي للوصول إلى ما تريد: Number.prototype.round = function(places) { return +(Math.round(this + "e+" + places) + "e-" + places); } // الإستخدام 1.35.round(1); // 1.4 6.35.round(1); // 6.4 52.7785.round(3); // 52.779
  22. هناك عدة طرق للوصول إلى ما تريد: إنشاء دالة تقوم بذلك بهذا الشكل: def del_all(mapping, to_remove): for key in to_remove: del mapping[key] ثم نستخدمها: sampleDict = { "name": "kelly", "age": 25, "salary": 80000, "city" : "New yourk" } keysToRemove = ['name' , 'salary'] def del_all(mapping, to_remove): for key in to_remove: del mapping[key] del_all(sampleDict, keysToRemove) print(sampleDict) إستعمال: all(sampleDict.pop(k) for k in keysToRemove) بهذا الشكل: sampleDict = { "name": "kelly", "age": 25, "salary": 80000, "city" : "New yourk" } keysToRemove = ['name' , 'salary'] all(sampleDict.pop(k) for k in keysToRemove) print(sampleDict) إستعمال: all(map(sampleDict.pop, keysToRemove)) بهذا الشكل: sampleDict = { "name": "kelly", "age": 25, "salary": 80000, "city" : "New yourk" } keysToRemove = ['name' , 'salary'] all(map(sampleDict.pop, keysToRemove)) print(sampleDict) إستعمال: list(map(sampleDict.pop, keysToRemove)) بهذا الشكل: sampleDict = { "name": "kelly", "age": 25, "salary": 80000, "city" : "New yourk" } keysToRemove = ['name' , 'salary'] list(map(sampleDict.pop, keysToRemove)) print(sampleDict) إستعمال Dict Comprehensions: finalDict = {key: sampleDict[key] for key in sampleDict if key not in keysToRemove} بهذا الشكل: sampleDict = { "name": "kelly", "age": 25, "salary": 80000, "city" : "New yourk" } keysToRemove = ['name' , 'salary'] finalDict = {key: sampleDict[key] for key in sampleDict if key not in keysToRemove} print(finalDict) و كلها تعطي نفس الخرج.
  23. منذ الإصدار 3.6 من بايثون أصبح بالإمكان إستخدام f-string هذا مثال عن إستخدامها: name = 'Samir Abboud' print(f"Hello, My name is {name}.") # Hello, My name is Samir Abboud. و في حالتك أيضاً بالإمكان إستخدامها بهذا الشكل: x=[2,45,38,18,12] for i, item in enumerate(x, start=1): print(f"item #{{{i}}}={item}") و هذا هو الخرج:
  24. يجب تعريف القاموس بشكل صحيح بهذا الشكل مثلاً: Data = { "Class": "A", "Name": "Manil Isawi", "Mark": { "Physics": 70, "History": 80 } } بعد ذلك بإمكانك الوصول لأي قيمة تريدين فمثلاً إن أردت الوصول للإسم يُمكنك ذلك من خلال: print(Data["Name"]) # Manil Isawi أما إن اردت الوصول لعلامة مادة التاريخ فيُمكنك ذلك من خلال: print(Data["Mark"]["History"]) # 80 بهذا الشكل ككل: Data = { "Class": "A", "Name": "Manil Isawi", "Mark": { "Physics": 70, "History": 80 } } print(Data["Name"]) # Manil Isawi print(Data["Mark"]["History"]) # 80
×
×
  • أضف...