سامح أشرف
الأعضاء-
المساهمات
2934 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
56
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو سامح أشرف
-
يبدو أن لديك مصفوفة تحتوي على عناصر undefined وبالتأكيد هذه العناصر لا تحتوي على urls ، لذلك يجب أن تقوم بفتلرة هذه المصفوفة والتأكد من أن كل عنصر ليس من نوع undefined، ويمكنك فعل ذلك من خلال التابع filter بهذا الشكل: arr.filter(Boolean) هنا الكود الصحيح لملف Mainboard.js: function Mainboard({ pins }) { return ( <Wrapper> <Container> {pins.filter(Boolean).map((pin, index) => { const {urls} = pin; return <Pin key={index} urls={urls}/> })} </Container> </Wrapper> ); } بهذا الشكل سيتم إستخدام عناصر المصفوفة pins التي ليست من نوع undefined وليست false أيضًا.
- 1 جواب
-
- 2
-
بالتأكيد يمكنك ذلك، فكل الدورات تظل متاحة مدى الحياة ويمكنك أن تقوم بمراجعتها وقتما تشاء، كما ستحصل على كل التحديثات الخاصة بالدورة أيضُا، وأنا اقتبس هنا من صفحة الدورات: بالتوفيق
- 1 جواب
-
- 1
-
هذا كود مختصر للعنصر Fragment return <React.Fragment> <Post/> <Post/> </React.Fragment> // هذا كود مختصر للسطر السابق return <> <Post/> <Post/> </> يعتمد React على بناء هيكل الصفحة يشبه الشجرة ويستخدم العنصر Fragment عند إرجاع مكونات متعددة، فإن افتراض أن هذه الشجرة من العناصر سيكون لها عنصر جذر واحد (عنصر رئيسي) فإنه سيكون من الصعب معالجة هذه الشجرة من المكونات. لذلك يجب أن يتم إرجاع عنصر واحد فقط ولحل هذه المشكلة يتم إستخدام العنصر React.Fragment لإحتواء كل العناصر الأخرى المرجعة، وهكذا يتم إرجاع عنصر واحد فقط. لاحظ أنه من الإصدار 16.2 في React يمكن إرجاع مصفوفة Array من العناصر بدلًا من إستخدام العنصر React.Fragment بهذا الشكل: return[ <div> Div 1</div>, <div> Div 2</div>, <div> Div 3</div>, <div> Div 4</div> ];
- 4 اجابة
-
- 2
-
على حسب المشروع، قد يكون المشروع عبارة عن تحويل ملف فوتوشوب إلى HTML & CSS، حينها يتم تسليم ملفات HTML و CSS والصور والخطوط المستخدمه في الموقع، أو قد يكون المشروع عبارة عن عمل لوحة تحكم لموقع موجود مسبقًا، حينها يعطيك العميل ملفات HTML و CSS وتصميم لوحة التحكم التي يريدها، فتقوم بعمل لوحة التحكم حسب المطلوب، وترسل ملفات لوحة التحكم بكل محتوياتها. وربما يريد العميل إصلاح مشكلات تواجهة في موقعه (مثلاً، القائمة الجانبية لا تعمل على الهواتف بسبب مشكلة CSS)، فيعطيك العميل ملفات الصفحة التي بها المشكلة لتقوم بإصلاحها وتعيد إرسال هذه الملفات إليه. وليس دائماً يعرف العميل كيف يتعامل مع ملفات المشروع النهائية، فعليك دائماً أن تتفق معه على صيغة الملفات النهائية، وما إن كان سيتطيع التعامل معها بنفسه أم أن لديه شخص آخر ذو خبرة سيقوم بتركيب هذه الملفات في الموقع (مدير خوادم على سبيل المثال).
- 6 اجابة
-
- 4
-
أجعل متغير الحلقة i بدلًا من N (في السطر 10) لأننا سنستعمل المتغير N في تخزين الرقم الذي أدخله المستخدم (في السطر 8) نبدأ الحلقة من الرقم n وليس من 1 (في السطر 10) كما أننا لا نضيف 1 على متغير الحلقة بدل نزيد عليه قيمة N في كل مرة، لذلك إجعل N++ تصبح i=i+N ، بهذه الطريقة سيتم زيادة قيمة i بمقدار N أضف جملة cout داخل حلقة التكرار (السطر 12)
- 4 اجابة
-
- 1
-
سأقوم بشرح دالة لكي تنفذ هذه المسألة بلغة جافاسكريبت وعليك أن تقوم بكتابة كود c++ لنفسك. أول شيء نقوم بعمل دالة تستقبل العدد N كـ argument، ولابد من أن تبدأ الحلقة من الرقم n، ولأننا نريد مضاعفة الرقم n فنقوم بزيادة المتغير i بقيمة n كل مرة، ونضع أيضًا شرط لإستمرار حلقة التكرار وهو ألا تزيد قيمة المتغير i عن 500 function multiplier(n) { // نبدأ الحلقة من الرقم n // ونضع شرط لإستمرار الحلقة وهو أن يكون المتغير i أصغر من أو يساوي 500 // نزيد قيمة المتغير i بقيمة n for(var i = n; i<=500; i+=n) { console.log(i) } } // طباعة كل مضاعفات الرقم 50 multiplier(50) بالتوفيق
- 4 اجابة
-
- 1
-
يبدو أن هناك خطأ في بنية السؤال نفسه، فأنت لست في حاجة إلى تمرير props من مكون ابن إلى المكون الأب، ولذلك لأن المكون الأب لديه بالفعل هذه الـ props في المقام الأول، ولا يجب أن يكون المكون الأبن أكثر تعقيدًا من هذا: var Child = React.createClass({ render: function () { return <button onClick={this.props.onClick}>{this.props.text}</button>; }, }); في حين أن المكون الأب لديه بالفعل هذه الـ props: var Parent = React.createClass({ getInitialState: function() { return {childText: "Click me! (parent prop)"}; }, render: function () { return ( <Child onClick={this.handleChildClick} text={this.state.childText}/> ); }, handleChildClick: function(event) { // يمكن الوصول إلى كل الـ props مباشرة من هنا alert("The Child button text is: " + this.state.childText); alert("The Child HTML is: " + event.target.outerHTML); } }); وهنا نفس الأمثلة السابقة لكن بإستخدام ES6 التي تسهل عليك كتابة الكود وتوضحه أكثر. المكون الأبن: const Child = ({onClick, text}) => ( <button onClick={onClick}>{text}</button> ) المكون الأب: const Parent = ({childrenData}) => ( <div> {childrenData.map(child => ( <Child key={child.childNumber} text={child.childText} onClick={e => { alert("The Child button data is: " + child.childText + " - " + child.childNumber); alert("The Child HTML is: " + e.target.outerHTML); }} /> ))} </div> ) كما أن الحدث event يحتوي على العنصر نفسه من خلال إستخدام e.target وهكذا تستطيع الوصول إلى كل أجزاء العنصر من داخل المكون الأب، لذلك لست في حاجة إلى تمرير أي props من المكون الأبن إلى المكون الأب. وهنا إقتباس من موقع react الرسمي يوضح أن الـ props هي الطريقة الوحيدة الني يستطيع المكون الأب التفاعل مع المكون الابن (خلال تدفق البيانات العادي dataflow) المصدر: Refs and the DOM
- 4 اجابة
-
- 2
-
عليك فقط أن تقوم بالتطبيق على مشاريع حقيقية في البداية لكي تختبر قدراتك في العمل وتستطيع أن تقدر الوقت والتكلفة اللازمة لإنهاء المشروع، ويمكنك أن تقوم بذلك من خلال تصفح المشاريع المطلوب في مواقع العمل الحر مثل مستقل وتقوم بعمل بعض من هذه المشاريع دون أن تقوم بالتقديم عليها، فالهدف من هذه الخطوة هو التأكد من قدراتك في عمل مشاريع حقيقية ومطلوبة في السوق. خلال هذه الخطوة يمكنك أن تقيس مقدار الوقت الوقت اللازم لعمل مشروع معين ومقدار المجهود المبذول وبالتالي تستطيع أن تقدر سعر ساعة العمل الخاص بك. هنا خطوات تحديد وإختيار المشروع المناسب لك: تصفح المشاريع الموجود الخاصة بالبرمجة وتصميم المواقع من هنا أقرأ عنوان ووصف كل مشروع يمكنك القيام به، أقرأ وصف المشروع جيدًا وتأكد من فهمك لكل المطلوب تنفيذه. قدر ثمن مجهودك والوقت اللازم لتنفيذ المشروع وقارنه مع الميزانية والمدةالمقترحة لتنفيذ المشروع (موجودة على اليسار في بطاقة المشروع). قدم عرضك وأكتب كل التفاصيل التي تستطيع القيام بها والوقت اللازم لك لكي تنهي المشروع. إنتظر رسالة من صاحب المشروع للتواصل، سوف يسألك عن بعض التفاصيل الإضافية على الأغلب وسيقارن بينك وبين كل المستقلين الذي قدموا على نفس المشروع أيضُا عند الإتفاق مع العميل وإختياره لك والموافقة على عرضك سوف تصلك رسالة تخبرك بأن صاحب المشروع قد بدأ صفقة معك، وحينها يمكنك أن تتواصل معه من خلال صفحة المناقشة (ستظهر لك بعد الموافقة على عرضك). أنجز المشروع بأسرع ما يمكن وبأعلى جودة ممكنة. أخبر صاحب المشروع بكل جديد من تغيرات وإنجازات في صفحة المناقشة لا تتواصل أبدًا خارج المنصة للحفاظ على حقوقك حتى إن طلب منك العميل، وفي حالة تواصلك معه خارج موقع مستقل أكتب كل التفاصيل على الموقع أيضًا. سلم كل ملفات المشروع حسب المتفق عليه في صفحة نقاش المشروع، ولا تخشى أن يتم سرقة مجهودك فموقع مستقل تضمن لك كل حقوقك. بعد أن يراجع صاحب المشروع كل الملفات المطلوبة، سيقوم بقبول المشروع وسيتم تحويل تكلفة المشروع إلى حسابك (بعد خصم نسبة موقع مستقل) في خانة الرصيد المعلق لمدة 14 يوم ثم سيمكنك سحبها بأي وسيلة سحب مدعومة في الموقع. أبدأ من خطوة رقم 1 مرة أخرى. لا تنسى أن تتابع مدونة مستقل للحصول على معلومات ونصائح أكثر.
- 6 اجابة
-
- 3
-
يمكنك أن تضيف أكثر من حساب لمشروع Firebase من خلال الضغط على الإعدادات داخل المشروع وإختيار users and permissions ثم قم بالضغط على Add member وأكتب البريد الإلكتروني الآخر الذي تريد أن تضيفه وإختر owner في خاصية Role ليكون للحساب كل الصلاحيات.
- 3 اجابة
-
- 1
-
يمكنك عمل else في الكود الثاني ليتم تنفيذ الكود الموجود بداخلها إن كان $stmt->num_rows يساوي صفرًا if ($stmt->num_rows > 0) { echo 'Username exists, please choose another!'; } else { $sql = "INSERT INTO accounts (username, password, email) VALUES (?, ?, ?)"; if($stmt = mysqli_prepare($db, $sql)) { mysqli_stmt_bind_param($stmt, "sss", $username, $password, $email); $username = $_REQUEST['username']; $password = password_hash($_POST['password'], PASSWORD_DEFAULT); $email = $_REQUEST['email']; if(mysqli_stmt_execute($stmt)) { echo "Records inserted successfully."; } } } بهذا الشكل سيتم عمل حساب جديد إن لم يكن موجود في قاعدة البيانات
- 2 اجابة
-
- 4
-
من خلال البحث في محرك جوجل عن أي كلمة مفتاحية مثل "تصميم لوجو خمسات" ستجد العديد من نتائج البحث كما في الصورة الموضحة ستجد أن عنوان الخدمة ظاهر بالكامل (يفضل ألا يكون العنوان طويل حتى يظهر بالكامل) وجزء من الوصف حسب الكلمة المفتاحية المستخدمه في البحث.
- 4 اجابة
-
- 1
-
هل يمكنك أن توضح أي نظام تقصد؟ هل تقصد موقع أو برنامج وتريد أن تشغله محليًا؟
-
لا شك أن اللغة الإنجليزية ستفيدك كثيرًا وستسهل الكثير من الأمور خصوصًا أن كل التقنيات والمكتبات التي ستسعملها ستكون موثقة باللغة الإنجليزية في مواقعها الرسيمية، لكن ذلك لا يعني أن إتقان اللغة الإنجليزية شرط أساسي للتعلم، وستجد أن كل الدورات والمقالات وتوثيق اللغات والمكتبات والأسئلة المطروحة والإجابات الخاصة بها في أكاديمية حسوب متوفرة باللغة العربية الفصحى لتسهيل الأمر أكثر على الطلاب ولجعل عملية التعلم أكثر مرونة وسرعة. كما يمكنك أن تتعلم اللغة الإنجليزية بشكل متزامن مع تعلمك للتقنيات واللغات البرمجية دون أن تؤثر أحداهن على الأخرى، عليك فقط أن تنظم وقتك بشكل سليم وتضع لنفسك أهداف عملية وحقيقية قابلة للتنفيذ في الوقت المحدد لها.
-
شهادة A+ وهي إحدى شهادات CompTIA التي تقدم العديد من الشهادات العلمية لكل من يهتم بالعمل في المجال التقني وخصوصًا مهنة الدعم الفني IT Support، وللحصول عليها يجب أولاً أن تجتاز امتحانين CompTIA A+ 220-901 و CompTIA A+ 220-902 يركز الامتحان الأول على فهم المصطلحات والتعديل على عتاد الحسوب hardware، واستكشاف الأخطاء وإصلاحها، ويحتوي على الفصول الآتية: العتاد Hardware الشبكات Networking الأجهزة المحمولة Mobile Devices استكشاف الأخطاء وإصلاحها Troubleshooting يعتمد الامتحان الثاني على الامتحان الأول، ويركز على التعامل مع مختلف أنظمة التشغيل وتثبيتها وضبط إعداداتها، ويحتوي على الفصول الآتية: نظام التشغيل ويندوز أنظمة تشغيل وتقنيات أخرى الأمن والحماية Security استكشاف الأخطاء وإصلاحها Troubleshooting إجراءات عمليات السلامة Operational Procedures يجب أن تحضر نفسك جيدًا قبل أن تخوض الامتحان وتركز جيدًا على مراجعة الكتب الإلكترونية وحل النماذج الامتحانية (يمكنك أن تحصل عليها عند التسجيل للامتحان مقابل مبلغ إضافي)، وتبلغ التكلفة 205 دولار أمريكي لكل امتحان أي تبلغ تكلفة الشهادة 410 دولار أمريكي، ويتوفر الامتحان بأكثر من لغة (ليس من بينها العربية)، عدد الأسئلة هو 90 سؤالا ومدَّة الاختبار 90 دقيقة، ويجب أن تحصل على 675 من 900 ودرجة في الامتحان الأول و700 من 900 درجة في الامتحان الثاني. يمكنك أن تقرأ أكثر حول هذه الشهادة وتفاصيلها وكيفية الحجز من هذه المقالة: مدخل إلى شهادة +CompTIA A، كما ستساعدك سلسلة الدروس الموجودة في الأكاديمية لفهم الأساسيات
- 1 جواب
-
- 1
-
يمكنك أن تبدأ في أي دورة من الدورات الحالية الموجودة في أكاديمية حسوب في أي وقت من هنا، ولا يوجد وقت محدد لبدء أي دورة منهم. الأمر متوقف عليك ومتى تريد أن تبدأ.
- 1 جواب
-
- 1
-
إن كانت هذه الدالة homepage بداخل class فلا توجد في الكود مشكلة. إن الكود يعمل ولا يظهر مشكلة أو خطأ فهو كود سليم وليس بحاجة إلى تعديل، لكن يفضل أن يكون الكود منظم ومرتب ويحتوي على تعليقات لشرح كل الخطوات. مثال لنفس الكود بداخل class: namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Slide; use App\About; class HomeController extends Controller { public function homepage(){ $slides = Slide::all(); $about = About::whereIn('id', [1,2])->get(); return view ('front.homepage', compact('slides','about')); } }
- 23 اجابة
-
- 1
-
يمكن إستخدام التابع whereIn والذي يقبل اسم عمود ومصفوفة من القيم $users = User::whereIn('id', [6, 7, 9])->get(); في الكود أعلاه سيتم جلب السجلات التي تحمل معرف 6 و 7 و 9 فقط. هنا مثال آخر لجلب كل السجلات الخاصة بالمستخدمين الذين لديهم عمر أكبر من 18 ووضع حد لعدد السجلات التي يتم جلبها وهو 100 سجل فقط $users = User::where('age', '>=', 18)->limit(100)->get();
- 23 اجابة
-
- 1
-
التابع first() يقوم بجلب أول سجل يجده فقط، بينما التابع get() يجلب صنف collection، ويمكن تخيل هذا الصنف على أنه مصفوفة array من السجلات يمكن إستخدامها في حلقات التكرار مثل for loop أو while loop. بالنسبة لجلب عدد محدد من السجلات فيمكن إستخدام التابع limit(num) والذي يقبل عدد يتم تمريره إليه يعبر عن عدد السجلات المراد جلبها. $user = User::limit(2)->get(); بالنسبة لجلب السجلات بطريقة عشوائية in random order فيمكن إستخدام التابع ()inRandomOrder ليجلب كل السجلات في ترتيب عشوائي. $users = User::inRandomOrder()->get();
- 23 اجابة
-
- 3
-
لا يتم حذف الأسئلة من الأكاديمية حتى يستفيد كل الجميع منها (بإستثناء الأسئلة المخالفة والمكررة)، يمكنك التأكد من ذلك من خلال تصفح الأسئلة القديمة التي تعود إلى عام 2015، هنا صفحة رقم 200 في أسئلة البرمجة.
-
وضع عنصر input بداخل عنصر label سيسمح لك بتحديد عنصر input (أي يصبح في وضع focus جاهز للكتابة) عند الضغط على عنصر label، هذه الطريقة تسمى implicit labels، وبذلك لن تكون في حاجة لإضافة الخاصيتين for و id في كل من العنصرين label و input على التوالي وهذه الطريقة تسمى explicit labels. لاحظ أن هذه الطريقة تعمل فقط في المتصفحات الحديثة (المتصفح IE6 وما قبله لا يدعم هذه الميزة). وهذا إقتباس من موقع w3.org يوضح أن الطريقتين صحيحتين ولكن من الأفضل إستعمال الطريقة الثانية (وهي إضافة الخاصيتين for و id) لأن في بعض الحالات قد قد تحدث مشكلات في طريقة العمل.
-
لإيقاف الجافاسكريبت أدخل إلى الإعدادات من هذه الصفحة، ثم في قسم content ستجد الجافاشكريبت، اضغط عليها وقم بتعطيلها.
-
هل يمكنك أن توقف عمل الجافاسكريبت في المتصفح ختى تتأكد من أنها ليست المشكلة؟
- 17 اجابة
-
- 1
-
مشكلة مثل هذه قد يتسبب بها عدد من الأمور: قد تكون هذه مشكلة في ملفات cache الخاصة بالمتصفح، لذلك حاول أن تجرب الموقع في متصفح مختلف تماماً أو قم بحذف الملفات المؤقتة وملفات الارتباط cookies من المتصفح. وقد تكون المشكلة تنبع من كود جافا سكريبت يقوم بتغير عرض العنصر، فقم بإيقاف الجافا سكريبت من المتصفح وجرب مرة ثانية. بما أن قوالب بلوجر تكون بالكامل في ملف واحد، فربما تقوم بتغير العرض لعنصر مختلف تماماً، وليس العنصر الذي تقصده، لذلك تأكد من أنك تقوم بتعديل العنصر الصحيح.
- 17 اجابة
-
- 2
-
يمكنك تحسين جودة الصوت الصوت في أغلب الملفات الصوتية من خلال إستخدام برامج مثل audacity و adobe audition فهذه البرامج مختصة في تعديل وتنقية وإصلاح ملفات الصوت بعشرات الطرق. لاحظ أن هذه البرامج تحتاج خبرة ومعرفة مسبقة لتستطيع التعامل معها، وسيكون من الأسهل والأسرع تعيين مختص في إزالة التشويش وتعديل ملفات الصوت من على أي منصة للعمل الحر مثل مستقل. لاحظ أيضًا أن هناك بعض الملفات لا يمكن تحسين جودة الصوت الخاص بها بدرجة عالية نظرًا لبنية الملف الداخلية (الأمر يختلف من صيغة لأخرى). يمكن أيضًا أضافة تأثيرات معينة على الصوت مثل صدى صوت بسيط أو تفخيم الصوت وغيرها من محسنات الصوت.
- 6 اجابة
-
- 3