-
المساهمات
364 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
2
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو معاذ قره محمد
-
sql هي قاعدة بيانات تقليدية تعتمد على الجداول في تخزين المعلومات وهذه الجداول ترتبط فيما بينها باستخدام العلاقات وتعتبر لغة فعالة في إدارة قواعد البيانات. nosql هي تقنية تعتمد في تخزينها للبيانات على documentation وليس على الجداول بطريقة Json او XML .ولها مزايا تختلف عن Sql وهي تعمل مع ال Big Data البيانات الضخمة بكفائة عالية وهي لاتتبع تصميم محدد في هيكليتها يعني تستطيع تخزين اي بيانات ايضآ ال NoSql لا تستخدم Sql في معالجة البيانات بل تستخدم Language خاص بها كما انها لاتهتم بتكرار البيانات اي ان التكرار ليست مشكلة في NoSql يمكنك رؤية المقارنة التالية بين النمطين: حيث تتفوق ال Nosql بالأداء وتخزين البيانات الكبيرة وقابلية التوسع (التضخم بالبيانات) وتتفوق sql بواقعية تخزين البيانات من خلال العلاقات والاتساق كما ويمكنك مراجعة المقال التالي من أكاديمية حسوب للمزيد من الاطلاع:
-
أرسل لنا الكود كاملا لنستطيع مساعدتك على الوجه الصحيح
- 7 اجابة
-
- 1
-
يمكنك لمعرفة حجم قاعدة البيانات بالكيلو بايت أن تكتب الكود التالي: SELECT table_schema "DB اسم ال", ROUND(SUM(data_length + index_length) / 1024, 1) "KB حجم قاعدة البيانات بال" FROM information_schema.tables ; ولكي تأتي بأسماء الجداول من قاعدة بيانات معينة يمكنك كتابة الاستعلام التالي: SELECT table_name FROM information_schema.tables WHERE table_schema = 'اسم قاعدة البيانات الخاص بك'; ولإعادة عدد الجداول يمكنك استعمال الاستعلام: SELECT count(table_name) FROM information_schema.tables WHERE table_schema = "company";
- 1 جواب
-
- 1
-
من أشهر المواقع التي تطرح المشكلات البرمجية هي: HackerEarth HackerRank Exercism SPOJ Programmr TopCoder Challenges CodeForces CodeWars ويمكنك الرجوع للسؤال
-
نضع اسم الكائن ضمن الدالة لكي يعرف المترجم طول البيانات وحجمها في الذاكرة. يعني مثلا عندما نقول للمترجم لدينا الغرض من النمط (Person) فهو يضع بحسبانه أن له صفات معينة مثل الاسم والوظيفة وغيرها (بفرض أننا قمنا بتعريف صف Person). أي أنّ وضع اسم الصف يكون ليعرف المترجم ما هو نمط الغرض الذي يمرّر له وصفاته. وبشكل عام إن كنت تكتب بلغة الجافا فأنت لا تستطيع تعريف طريقة تأخذ غرض من صف بدون اسم الصف void function(obj){...} // خطأ void function(className obj){...} // صواب لا بد من أن تضع نوع هذا الغرض. ويجب أن تنتبه أنك عندما تمرر غرض من صف ضمن طريقة ما تتم عملية قصر ضمني، مثلا لتكن الطريقة: void function(Person p){..} والآن إذا حاولت تمرير كائن من غير نمط ال Person لهذه الطريقة، سيشير لك لخطأ في الكود أنك تحاول تمرير كائن لا يتوافق مع النمط الذي تتطلبه الوظيفة: Car c = new Car(); function(c); // هنا سيشير لك لخطأ وإذا قمت بتنفيذ الكود سيخرج لك الخطأ عدم التوافق بين المعطيات.
-
بالطبع يحفظ الكائن من نمط صف ما في الذاكرة على شكل reference (مرجع). أي يقوم بحجز مكان في الذاكرة يناسب خصائص هذا الكائن، ومن خلال هذا المرجع يمكن الوصول إلى الوظائف. وبالتالي عند تمرير الكائن ضمن وظيفة يقوم بعمل نسخة من مرجع هذا الكائن وتمريرها للوظيفة -ربما يختلف هذا الأمر من لغة لأخرى-. فمثلا في لغة جافا يقوم بتمرير الصف كمرجع، وبالتالي إذا كان في الصف وظائف تستطيع التعديل على الكائن (باستخدام ما يسمى بال setter methods) فبإمكاننا التعديل على هذا الكائن.
-
ما تفعله أمر حسن جدّاً، لكن أنصحك بتلخيص محتوى الفيديوهات، فاكتب الأفكار الجديدة على دفتر بحيث يكون لك مرجعك الخاص وملاحظاتك المهمة حول الأشياء الجديدة التي تتعلمها. فإنّ كتابة كل جديد تتعلمه سيفيدك من ناحيتين، الأولى: أنك لن تمر على الأفكار القديمة التي كنت قد تعلمتها من قبل، ومن ناحية أخرى: ستستثمر وقتك، فسيكون وقت المراجعة قليلاً جدّاً مقارنة بمتابعة الفيديوهات مرة أخرى. ولا بدّ أن تعرف أنك لا تضيع الوقت بزيادة معارفك ولو عدت المعلومة عشرات المرات، فالمهم هو فهمك لهذه المعلومة وزيادة قيمك المعرفية.
- 1 جواب
-
- 1
-
إذا أرسل django رسالة الخطأ هذه ففي الغالب قد يكون لديك exception لم يتمّ التعامل معه، مما أدى إلى إيقاف السرفر، زوّدنا بصور الكود والخطأ لنستطيع مساعدتك بشكل أفضل.
- 2 اجابة
-
- 1
-
إن مواقع حل المشاكل تستوجب الكثير من التمرين، وتفريغ الوقت لحلها. وكل المبرمجين ابتدؤوا بحل المشاكل الصغيرة بل يوجد مبرمجين لم يستخدموا مواقع حل المشاكل ! ورغم ذلك لهم مشاريع رائعة في غالب الأحيان. لكن لا شك أن المهارات التي تكتسبها من ممارسة حل المشاكل مهارات ممتازة تحتاجها لتطوّر من نفسك. لحل المشاكل توصيات تسهّل عليك حلّها، منها: 1- ابدأ بقراءة المشكلة وفهم ماذا تحتاج من معطيات، وماذا ستخرج من نتائج 2- حاول أن تخطط حل المشكلة على الورق بداية وحدّد الخطوات التي ستتبعها للحل 3- ابدأ بكتابة الخوارزمية المناسبة لحل المشكلة إذا تعثّرت في حلّ بعض المشاكل لا تيأس، فالعلم يأتي بالتعلّم، وستجد إن بحثت عن اسم المشكلة كثيرا من الناس الذين شرحوا الحلّ، ومع الزمن ستجد أنّ تفكيرك في المشكلة سيتغيّر وأنّ تحليلك قد تطوّر وستجد سهولة في حل المشاكل. وإنّ مادة الخوارزميات من أكثر ما يعينك على فهم أنواع المشاكل وطرق حلّها فأنصحك بالتوجّه لتعلّمها لتحسّن من مهاراتك أيضاً. يمكنك الرجوع إيضا إلى التعليقات:
- 2 اجابة
-
- 1
-
إذا كان كل منكما يعمل على جزئيات من المشروع ولا يحتاج تعديلات الشخص الآخر، فالحل أن يعمل كل واحد منكما على برانش جزئي، ثم عند الانتهاء من المشروع قوما بدمج الملفات في github أو المنصة التي تعملون عليها إذا كانت التعديلات عند كل منكما مهمة للآخر، يجب أن تقوما بإنشاء برانش لكل منكما وعند نهاية كل يوم قوما بدمج الملفات، ثم قوما بعمل pull للبرنش الأساسي -مكان الدمج- وهكذا تحافظان على التعديلات بين كليكما.
- 2 اجابة
-
- 1
-
فكرتي أن تضع لمشروعك ثلاث طبقات، طبقة تكون تحت الصورة وهي العناصر الأساسية للمشروع، ثم تليها طبقة الصورة التي ستغطي كامل المحتوى، والطبقة الأخيرة عناصر غير مرئية تكون فوق الصورة بحيث يقابل كل عنصر منها العنصر الظاهر من الطبقة الأولى، كمثال على كلامي: <div> <!-- محتوى أسفل الصورة --> <button id="mainContent">انقر هنا</button> </div> <img id="up" src="url"/> <!-- ضع الستايل المناسب للصورة بحيث تعبّئ كامل الصفحة --> <div> <!-- محتوى فوق الصورة --> <button id="opacityNonContent" onclick="doSomeThing">انقر هنا</button> </div> الزر الأول سيكون ظاهر من أسفل الصورة لكن لا يمكنك ضغطه، الزر الثاني سيكون مخفي فوق الصورة لكن يمكنك ضغطه ووضعنا له الحدث onclick فعند النقر عليه سيقوم بتنفيذ الوظيفة doSomeThing وهكذا مع جميع المحتوى.
- 10 اجابة
-
- 1
-
يوجد حلّ كأن تضع عناصر مع opacity:0 (غير مرئيين) في الموضع الذي تريد النقر فيه وتضع الوظائف التي تريدها على هذه العناصر غير المرئية. فيصبح لكل عنصر مرئي تحت الصورة عنصر غير مرئي فوقه يقوم بوظائفه.
- 10 اجابة
-
- 1
-
أخي كل ما عليك حذف الأقواس عند دالة makeGrid داخل الaddEventListener: sub.addEventListener("click", makeGrid) في حال وضعت الأقواس ستنفذ الطريقة لمرة واحدة فقط عند بدء البرنامج. لأن وضع الأقواس يكون لاستدعاء الطريقة وتنفيذها، أما هنا نحن نريد مرجع الطريقة في الذاكرة دون تنفيذها لأن التنفيذ سيتم عند النقر فقط.
- 8 اجابة
-
- 1
-
الخطأ من العداد i أحيانا يخرج عن نطاق الarrayData، فيعيد قيمة خارج حدود المصفوفة، كل ما عليك هو جعله العداد الافتراضي للطريقة map : const read = () => { table ='' arrayData.map((Item,i) => { // ستزيد قيمته عند كل عنصر من دون أي تدخل منك حسب عدد عناصر المصفوفة iضعي ال table+=` <tr> <td>${i}</td> <td>${arrayData[i].title}</td> <td>${arrayData[i].price}</td> <td>${arrayData[i].taxes}</td> <td>${arrayData[i].ads}</td> <td>${arrayData[i].discount}</td> <td>${arrayData[i].total}</td> <td>${arrayData[i].category}</td> </tr> ` tbody.innerHTML=table }
-
وعليكم السلام جربت الكود الخاص بك، القيمة في الinput تتغير بشكل طبيعي، قم بإضاحة المشكلة بشكل أكبر لنستطيع مساعدتك
- 8 اجابة
-
- 1
-
__new__ هي أول خطوة يتم تنفيذها عند إنشاء غرض من هذا الصف وهي المسؤولة عن إرجاع غرض جديد من هذا الصف. __init__ هذه الدالة لا تعيد شيء، فقط تقوم بإسناد الخواص لهذا الكائن الذي سبق إنشاءه من الدالة __new__ أي أنّ __new__ تتنفذ أولاً وتعيد غرضاً جديداً من الصف، ثم تتنفّذ __init__ وتعرف خواص هذا الصف. وتكون new مسؤولة عن إنشاء الغرض من الصف، والinit عن تعريف صفات الغرض فمثلا الكود التالي: class A: def __new__(inctance, name): print("new") # A هنا هو inctanceنوع ال return object.__new__(inctance) # A إرجاع غرض جديد من الصف def __init__(self, name): self.name = name # تعريف خواص الغرض الجديد الناتج print("created with name: " + self.name) a = A("ahmed") سيكون خرجه: new created with name: ahmed والسبب كما ذكرت لك آنفا أن new تنفذ أولا ثم init فنفّذ أولا تعليمة الطباعة في new ثم في init
-
وعليكم السلام يمكنك استخدام أدوات مساعدة مثل clippy أو species-in-pieces أو يمكنك أن تختار من القيم الممكنة لهذه الخاصية. مثالاً هذا كود رسم مثلث clip-path: polygon(50% 0%, 0% 100%, 100% 100%); وهذا للمعين clip-path: polygon(50% 0%, 100% 50%, 50% 100%, 0% 50%); وهذا لشبه المنحرف clip-path: polygon(20% 0%, 80% 0%, 100% 100%, 0% 100%); ويمكنك التعديل على القيم أو إضافة قيم جديدة في الpolygon لتحديد عدد الزواية ودرجة الانحناء وغيرها. وكما يمكنك أن تشطب من الزوايا في كود مثل clip-path: polygon(20% 0%, 80% 0%, 100% 20%, 100% 80%, 80% 100%, 20% 100%, 0% 80%, 0% 20%); لكنني أفضّل لك أن تستخدم الأدوات الجاهزة لتقليل العبء وعدم هدر الوقت
-
لحل هذه المشكلة يمكنك فعل الآتي: - بداية قم بنقل boxRef إلى الApp function App() { const [active, setActive] = useState(true); const boxRef = useRef(null); ... ... } ومرّره إلى ال Box ك props: function App() { ... ... return ( <> <button onClick={handleToggle}> Toggle </button>{" "} <Box boxRef={boxRef} />{" "} </> ); } وعدّل على Box واجعله كالآتي: function Box({ boxRef }) { return ( <div className="box" ref={boxRef}> red box </div> ); } هكذا نكون قد حافظنا على مرجع العنصر box ضمن المكون App فيمكننا استخدامه قبل أن نقوم بتغيير قيمة الactive. كل ما عليك الآن إنشاء الطريقة handleToggle: const handleToggle = () => { // use boxRef to do something console.log(boxRef.current); setActive(!active); }; واستخدامها في الbutton : <button onClick={handleToggle}> Toggle </button> لاحظت أنك تحذف الbutton مع الbox عند الضغط على toggle للمرة الثانية، إذا كنت تريد الحفاظ على الbutton وحذف الbox فقط يجب عليك عوضا عن إرجاع الnull في حال الactive قيمته false أرجع الbutton: if (!active) return <button onClick={handleToggle}> Toggle </button>;
-
بما أنّ سهم ال select متعلق بها لماذا تضعه header::after هذا سيجعل كودك عشوائيّاً، حاول أن تعلّقه بالselect نفسها عن طريق جعل السهم absolute والselect اجعلها relative وعدل الستايل الخاص بالسهم ليصبح كما تريده أنت. بعدما فعلت ذلك يكفي أن تضع لل header خاصة text-align: center لتنصيفه.
-
يوجد في nextjs كما ذكرت أنت إعدادات فتراضية من ال webpack. أي أنه يعالج كثير من الحالات بشكل افتراضي من معالجة الصور والخطوط. فما عليك فعله هو التأكد مما إذا كان ال webpack يقوم بمعالجة حالتك افتراضيا أم لا. إن كان يعالجها فلا داعي لإضافة أي إعدادت للwebpack. وإذا كان لا يدعم حالتك يمكنك إضافة إعداداتك الجديدة إلى المجلد next.config.js الذي يكون منشأً افتراضيّا عند بدئك مشروع nextjs.
- 1 جواب
-
- 1
-
في python قد يظهر هذا الخطأ لأسباب مثل: - تنزيل cv2 بشكل global وليس ضمن مشروعك - أو ال IDE الخاص بك يعمل على نسخة أقدم من python لحل الخطأ ادخل على ال path الخاص بمشروعك من ال terminal واكتب الأمر: // نفذ الأمر التالي في البيئة التي تعمل عليها pip install opencv-python // python من أجل النسخة 3 من // python هذا معتمد على نسختك من pip3 install opencv-python
-
يمكنك حل المشكلة عن طريق الكود التالي، هذا مثال عن إضافة مستخدم ما لقاعدة البيانات: <?php // ربطنا قاعدة البيانات $link = mysql_connect("localhost", "username", "password"); mysql_select_db("database_name", $link); // قمنا بتحديد البيانات $result = mysql_query("SELECT * FROM TABLE_NAME", $link); // نأتي بعدد الأسطر $num_rows = mysql_num_rows($result); // $_SESSION["lastcount"] نختبر فيما إذا كنا قد عرفنا متحول الجلسة أم لا سنعرفه لاحقاً if(!isset($_SESSION["lastcount"])) { // $check إذا كنا لم نعرفه بعد نضع عدد الأسطر ضمنه وضمن المتحول // لمعرفة إن كان قد زاد عدد الأسطر $num_rows مع عدد الأسطر $check لأننا سنقارن لاحقا بالعدد // يحوي عدد الأسطر القديم $check فيكون المتحول $check = $_SESSION['lastcount'] = $num_rows; } else { // $check إذا كنا قد عرفناه نضع قيمته ضمن ال // هذا الرقم سيكون عدد الأسطر القديم $check = $_SESSION['lastcount']; } echo $num_rows; if($num_rows > $check ) { // إذا زادت الأسطر سيتحقق الشرط وينفذ الكود // الآن سنعيد إسناد قيمة عدد الأسطر الجديدة لكل من المتحولين $check = $_SESSION['lastcount'] = $num_rows; echo "تم زيادة عدد الأسطر وإضافة مستخدم"; } else { echo "لا يوجد زيادة في عدد الأسطر"; } ?>
-
هذه الأدوات التي تعرف أيضاً باسم (Debugger) تعينك على مراقبة تنفيذ الcode أمراً أمراً، بحيث لو كان هناك خطأ تعرف في أي خطوة حدث الخطأ وأيضاً لماذا. لحسن الحظ أغلب لبرامج المخصصة لكتابة الكود تتوفر على هذه الخاصية. لتتحكم بسير تنفيذ الأوامر يجب وضع نقطة توقف (Breakpoint) عند الأمر الذي تريد أن لا يتم تنفيذه إلّا بأمر منك و تستطيع وضع أكثر من نقطة توقف إذا أردت. كما أنه يفترض تشغيل البرنامج الذي تستخدمه لكتابة الكود بوضعية تصحيح الأخطاء (Debugging Mode) حتى يتوقف عند الوصول لأي نقطة توقف. عندها بمجرد أن يصل سهم تنفيذ الأوامر إلى هذه النقطة فإنه سينتظر منك أن تعطيه أمر حتى يتابع. مثلاً إذا كنت تستخدم VSCode كمحرر نصوص فإنه يدعم هذه الخاصية هذه النقطة الحمراء أنت تضعها بضغطة زر، ثم شغّل الأمر debug سيخرج لك شريط فيه أسهم للانتقال للأمر التالي أو السابق. إذا كنت لا تعمل على VSCode فاطمئنّ لأنّ أغلب ال debugger يعملون بنفس الطريقة.