-
المساهمات
1803 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
3
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو ياسر مسكين
-
تعلم الآلة هو مجال في علم الحاسوب يهتم بتطوير الأنظمة والبرامج التي تمكّن الحواسيب من تعلم الأنماط والاستدلال من البيانات بدون الحاجة إلى برمجة صريحة بحيث تعتمد تقنيات تعلم الآلة على استخدام البيانات لتدريب النماذج والخوارزميات لأداء مهام محددة أو تحقيق أهداف معينة، توجد العديد من المسائل الشائعة في تعلم الآلة: كالتصنيف، ويتعلق الأمر بتصنيف البيانات إلى فئات مختلفة، مثل التعرف على الأشياء في الصور أو التصنيف الآلي للبريد الإلكتروني إلى الرسائل المزعجة وغيرها. والتنبؤ، من خلال توقع القيم المستقبلية بناءً على البيانات السابقة، مثل توقع الطقس أو تحليل البيانات المالية لتوقع الاتجاهات في الأسواق المالية. توجد أيضا مسألة التجميع بحيث يتم تقسيم البيانات إلى مجموعات تشترك في سمات معينة، مثل تجميع العملاء حسب سلوكياتهم لتحسين استراتيجيات التسويق. مسألة التحسين، بحيث يتم تحسين وظائف معينة باستخدام البيانات، مثل تحسين أداء الأنظمة الذكية أو تحسين استراتيجيات الإنتاج في الصناعة. التكيف والتعلم المستمر، من خلال تطوير نماذج قادرة على التكيف مع التغييرات في البيانات واستمرارية التعلم من خلال التفاعل مع البيئة. ويمكنك الاطلاع على المزيد من المعلومات حول تعلم الآلة من خلال هذا الرابط:
- 5 اجابة
-
- 1
-
-
كتاب "أنظمة التشغيل للمبرمجين" الموجود في قسم الكتب في أكاديمية حسوب. أعتبره بمثابة كنز يضم مجموعة من المفاهيم الأساسية في علم أنظمة التشغيل، وهو موجه للمبرمجين الذين يرغبون في فهم كيفية عمل أنظمة التشغيل وكيفية التفاعل معها بصورة أفضل، يتمثل الهدف الأساسي للكتاب في توفير فهم عميق للطلاب حول مفاهيم مثل عمليات البرمجة، وإدارة الذاكرة، وأنظمة الملفات، وغيرها من الأساسيات التي تتعلق بأنظمة التشغيل. يبدأ الكتاب بشرح مفاهيم أساسية مثل التصريف (Compilation) والفرق بين اللغات المُصرفة والمُفسَّرة، مع التركيز على كيفية عمل المترجمات (Compilers) وأثرها على البرمجيات. ثم ينتقل الكتاب إلى شرح مفهوم العمليات (Processes) في أنظمة التشغيل، بما في ذلك كيفية إدارة وتنظيم العمليات وتخصيص الموارد لها، ويتناول العديد من النقاط والمفاهيم التي يمكن أن تتعرف عليها من خلال الرابط. للاستفادة من هذا الكتاب أنصح دوما بقراءة قراءة متأنية وتركيز جيد مع تطبيق الفصول العملية لأنه بمجرد قراءة فصل معين، يجب محاولة تطبيق ما تعلمته عمليا يمكن مثلا القيام بكتابة برامج صغيرة تستفيد من المفاهيم التي تعلمتها، مثلا، برنامج لإدارة عمليات متعددة أو للتعامل مع الذاكرة الوهمية. قد تستفيد من المناقشة والتبادل خاصة في قسم الأسئلة العامة، ويمكنك القيام ببحث إضافي لترسيخ المعلومات وتوطيدها في ذاكرتك. يمكنك المشاركة في المجتمعات البرمجية والانضمام إلى منتديات أو مجموعات على الإنترنت حيث يتم مناقشة مواضيع تتعلق بأنظمة التشغيل، والمشاركة في النقاش الاستفادة من تجارب الآخرين، لهذا فأفضل طريقة هي التطبيق والمشاركة.
- 6 اجابة
-
- 1
-
-
المشكلة في هذا الكود حسب تصفحي إياه هو أنه لا يقوم بجلب اسم الموقع المحدد على الخريطة وبدلا من ذلك يقوم فقط بجلب خطوط الطول والعرض أي الإحداثيات فقط. لهذا يجب استخدام خدمات Google Places API بدلا من مكتبة Google Maps JavaScript API. للقيام بذلك يمكنك أولا، استخدام Google Places API: من خلال تحميله والحصول على مفتاح API الخاص بك، ثم تحديد الموقع بواسطة الإحداثيات، فعند النقر على الخريطة، نقوم بتحديد الموقع باستخدام الإحداثيات واستخدامها لجلب معلومات الموقع. ثم من خلال استخدام طلب تفاصيل المكان من خلال الإحداثيات المحددة، نرسل طلبا للحصول على تفاصيل المكان باستخدام خدمات Google Places API. ولعرض اسم الموقع بمجرد الحصول على رد ناجح، نستخرج اسم الموقع من الرد ويتم عرضه في العنصر المناسب في واجهة المستخدم. وهذا تحديث للكود الخاص بك من خلال توضيح كيفية تحقيق الهدف وجلب اسم الموقع المحدد على الخريطة: let map; let placesService; function initMap() { map = new google.maps.Map(document.getElementById("map"), { center: { lat: -34.397, lng: 150.644 }, zoom: 8, scrollwheel: true, }); placesService = new google.maps.places.PlacesService(map); const marker = new google.maps.Marker({ position: { lat: -34.397, lng: 150.644 }, map: map, draggable: true }); google.maps.event.addListener(marker, 'position_changed', function () { let lat = marker.position.lat(); let lng = marker.position.lng(); $('#latitude').val(lat); $('#longitude').val(lng); document.getElementById('latitude').dispatchEvent(new Event('input')); document.getElementById('longitude').dispatchEvent(new Event('input')); // Get place details and update location input getPlaceName(marker.getPosition()); }); google.maps.event.addListener(map, 'click', function (event) { marker.setPosition(event.latLng); }); } function getPlaceName(location) { const request = { location: location, radius: '50', // Define the radius to search for places around the marker }; placesService.nearbySearch(request, function (results, status) { if (status === google.maps.places.PlacesServiceStatus.OK && results.length > 0) { const placeName = results[0].name; $('#location').val(placeName); document.getElementById('location').dispatchEvent(new Event('input')); } }); } فهذا الكود يقوم بتحديد الموقع على الخريطة وجلب اسم الموقع باستخدام Google Places API وعرضه في حقل الإدخال المخصص للعنوان.
-
لقد حملت المشروع وهو يعمل معي بشكل عادي، كما هو موضح في الصورة المرفقة. المشكلة تكمن في كونك لم تضبط إعدادات دجانغو ولم تهيّئ المشروع كما ينبغي يمكنك اتباع هذه الخطوات لتثبيت المشروع بشكل جيد: أولا، عليك بالتحقق من إعدادات Python Interpreter بما أنك تستخدم Pycharm يمكنك الذهاب إلى File > Settings ثم في نافذة الإعدادات، انتقل إلى Project: تجد اسم مشروعك myfirstproject ثم تجد Python Interpreter ثم اختر ال Interpreter المناسب عادة يكون نسخة البايثون التي قمت بتثبيتها على جهازك. بعد ذلك تنتقل إلى Languages and Framework ثم اختر دجانغو، وقم بإضافة المطلوب كما في الصورة الثانية المرفقة. ثم تأكد من أنك ثمت بإعدادات المشروع كي يتم تشغيله مباشرة عند النقر على Run من خلال تثبيتك لموديل دجانغو كما في الصورة الثالثة.
- 2 اجابة
-
- 1
-
-
هل يمكنك التوضيح لي أكثر بخصوص المشكلة التي واجهتك، كي يتسنى لي فهم المشكلة وتقديم الحل المناسب لها.
-
هنا يقوم بعملية الطرح n - 1، وفي هذه الحالة يكون n هو 6، لذلك ستكون العملية كالتالي: s = 6 - 1 وبالتالي، قيمة s تكون 5 وليس -1 كما ذكرت. لأنه عندما نقول s = n - 1، فإننا نخصم القيمة 1 من القيمة المخزنة في المتغير n، ولتصحيح الخطأ والحصول على النتيجة الصحيحة (التي يجب أن تكون 5 بدلا من -1)، يمكن استخدام القيمة المحسوبة بشكل ثابت بهذا الشكل: n = 6 s = n - 1 # هنا نقوم بطرح 1 من 6 print(s)
- 4 اجابة
-
- 1
-
-
أرى أن المشكلة تكمن في استخدام list-style-image لتعيين صورة كخلفية لعناصر القائمة ul (الغير مرتبة)، فقد يحدث أن الصورة تأخذ مساحة كبيرة جدا وتصبح غير مناسبة للتصميم المطلوب. لحل المشكلة، ولتغيير حجم الصورة وتنسيقها بشكل أفضل، يجب استخدام الخصائص الصحيحة في CSS. بدءا بإزالة التباعد الافتراضي للقائمة: ul { padding: 0; } ثم تعيين صورة القائمة وتحديد حجمها: ul { list-style-image: url(images/book.jpg); /* تعيين صورة القائمة */ background-size: 30px 30px; /* تحديد حجم الصورة */ background-repeat: no-repeat; /* تأكيد عدم تكرار الصورة */ } وتحديد التباعد بين الصورة والنص: ul li { padding-left: 40px; /* تعيين التباعد الأيسر لكل عنصر */ } ويمكنني تفسير الخطوات التي قمنا بها، فإزالة التباعد الافتراضي للقائمة ul نقوم به لتجنب أي تأثير غير مرغوب فيه على التصميم ونقوم بتعيين صورة القائمة وتحديد حجمها باستخدام background-size، مما يسمح لنا بتحكم دقيق في الحجم ومنع الصورة من التكبير أو التصغير بشكل غير مرغوب فيه. ونقوم بتحديد التباعد بين الصورة والنص لكل عنصر في القائمة، وذلك باستخدام padding-left لتجنب اختلاط النص بالصورة، أعتقد أن الإجابة مشروحة بشكل مفصل.
-
أفهم أنك تريد أن يتم عرض الخريطة من خلال إرسال قيم خط الطول والعرض عند النقر على زر فتح ال modal، لتحقيق ذلك، يمكنك تعديل ملف show_maps.js لتمرير قيم خط الطول والعرض عند النقر على زر "فتح ال modal" واستخدامها لعرض الخريطة داخل ال modal. بهذا الشكل: document.querySelectorAll(".show-map-modal").forEach((item) => { item.addEventListener("click", (e) => { var lat = parseFloat(item.dataset.latitude); // الحصول على قيمة خط العرض var long = parseFloat(item.dataset.longitude); // الحصول على قيمة خط الطول function showMap(lat, long){ var coord = { lat: lat, lng: long }; map = new google.maps.Map(document.getElementById("map"), { center: coord, zoom: 8, scrollwheel: true, }); } showMap(lat, long); // عرض الخريطة بالقيم المحددة $("#map_modal").modal("show"); }); }); ثم، في جدول العرض، يجب عليك تحديد قيم خط الطول والعرض لكل صف وتمريرها كقيم لزر "فتح ال modal". بهذه الطريقة المبينة: <td> <button type="button" class="show-map-modal dropdown-item" data-latitude="{{ $tent->latitude }}" data-longitude="{{ $tent->longitude }}"> <i class="fa fa-image text-secondary" style="font-size: 20px"></i> </button> </td> ويجب التأكد من أن $tent->latitude و $tent->longitude تحتوي على قيم خط الطول والعرض الصحيحة لكل صف ومع هذه التغييرات، سيتم تمرير القيم المحددة لخط الطول والعرض إلى وظيفة JavaScript، وستظهر الخريطة المتعلقة بتلك القيم داخل ال modal مباشرة.
- 2 اجابة
-
- 1
-
-
يبدو أن هنالك بضعة أخطاء في الكود الذي أرفقته، فيجب استخدام طريقة ()execute لتنفيذ استعلام SQL لإدخال القيم إلى الجدول، وعند استخدامها للإدخال يجب توفير قائمة من القيم التي تريد إدخالها، واستخدامها يكون مع إستعلام SQL لإنشاء الجدول. لقد قمت بتصحيحه وهذا هو الكود الصحيح: #استدعاء المكتبات from PyQt5 import QtCore, QtGui, QtWidgets import sys import sqlite3 #انشاء البرنامج app = QtWidgets.QApplication(sys.argv) #انشاء النافذة w = QtWidgets.QWidget() #حقول الادخال e1 = QtWidgets.QLineEdit(w) e1.move(200, 150) e1.resize(400, 40) e1.setStyleSheet("background-color: white ;font-size: 20px") #الازرار b1 = QtWidgets.QPushButton("اضافة", w) b1.move(40, 40) b1.resize(400, 50) b1.setStyleSheet("background-color: yellow ;font-size: 24px") # انشاء قاعدة بيانات والجدول db = sqlite3.connect("name.db") c = db.cursor() c.execute("CREATE TABLE IF NOT EXISTS names(name TEXT)") #الحصول على القيمة من حقول الادخال واضافتها الى الجدول def add(): a1 = e1.text() e1.clear() c.execute("INSERT INTO names(name) VALUES(?)", (a1,)) db.commit() b1.clicked.connect(add) db.close() w.show() app.exec_() بحيث قمت بتعديل الجزء الذي يضيف القيمة إلى الجدول بحيث يكون في الشكل الصحيح، كما قمت للتأكد من أن الجدول موجود بإضافة جملة: 'CREATE TABLE IF NOT EXISTS' أو يتم إنشاؤه إذا لم يكن موجودا بالفعل.
-
MySQL وSQLite3 يعتبران اثنين من أبرز أنظمة قواعد البيانات في عالم تطوير البرمجيات، وعلى الرغم من أن كلاهما يقدم وظائف مشابهة، إلا أنهما يختلفان في الاستخدامات والمميزات التي يقدمانها. فمثلا نجد أن MySQL تعتبر قاعدة بيانات متقدمة متعددة المستخدمين، مصممة للتطبيقات التي تحتاج إلى معالجة كميات كبيرة من البيانات والتعامل مع العمليات المتعددة بفعالية. ول MySQL إمكانية توزيع البيانات عبر عدة خوادم، مما يجعلها مثالية للتطبيقات ذات الحمولة العالية والتطبيقات التي تتطلب مرونة في التوسع. بالمقابل، SQLite3 تعتبر قاعدة بيانات خفيفة الوزن ومدمجة داخل التطبيق، مما يجعلها سهلة الاستخدام ومناسبة للتطبيقات الصغيرة والمحمولة. بفضل بساطتها وقابليتها للتضمين، تستخدم SQLite3 في تطوير التطبيقات البسيطة التي لا تتطلب مستويات عالية من التعقيد. من حيث الأداء، تتفوق MySQL في معالجة الحمولات الكبيرة والعمليات المتعددة، بينما تُعتبر SQLite3 أكثر فعالية في تخزين البيانات والتعامل مع الحمولات الصغيرة. في النهاية، الاختيار بين MySQL وSQLite3 يعتمد على احتياجات مشروعك ومتطلباته. فمثلا إذا كنت بحاجة إلى قاعدة بيانات متقدمة مع قدرات توزيع البيانات وتكامل متقدم، فإن MySQL هي الخيار الأمثل. أما إذا كنت تبحث عن حل بسيط ومدمج داخل التطبيق، فإن SQLite3 يمكن أن يكون الخيار المثالي والأنسب.
- 7 اجابة
-
- 1
-
-
يمكن شرح مبدأ عمل Virtual DOM على أنها تلعب دور حاجز بين تطبيق React والـ DOM الفعلي، مما يتيح للتطبيق التفاعل مع نسخة افتراضية من الواجهة بدلاً من التفاعل المباشر مع الـ DOM. وهذا ما يسهم في تحسين أداء التطبيق عند تحديث الواجهة. فعند تحديث الـ Virtual DOM، يتم إجراء عمليات مقارنة فعالة لتحديد الفروق بين النسخة الجديدة والنسخة السابقة. يعتمد هذا التحليل على خوارزميات فعالة مثل "خوارزمية الفرق الذكية"، مثلما يساعد في تقليل الوقت والموارد المستهلكة. يعمل تحديث الـ Virtual DOM بشكل ذكي، حيث يتم تحديث فقط العناصر التي تحتاج إلى تغيير دون الحاجة إلى إعادة رسم الواجهة بأكملها. هذا يحسن كفاءة التحديثات ويقلل من الأثر السلبي على أداء التطبيق. بفضل هذه التقنية، يصبح إعادة تقديم الواجهة أكثر فعالية، ويتيح الـ Virtual DOM لمطوري React الاستفادة من تحسينات الأداء دون الحاجة إلى التعامل مباشرة مع التفاصيل الداخلية للـ DOM الفعلي. ولتوضيح ذلك أكثر هذا مثال بسيط لشرح كيفية عملها: import React, { useState } from 'react'; const App = () => { const [items, setItems] = useState(['عنصر 1', 'عنصر 2', 'عنصر 3']); const addItem = () => { // نقوم بنسخ قائمة العناصر باستخدام ال spread operator const newItems = [...items, `عنصر ${items.length + 1}`]; setItems(newItems); }; return ( <div> <h1>قائمة العناصر</h1> <ul> {items.map((item, index) => ( <li key={index}>{item}</li> ))} </ul> <button onClick={addItem}>إضافة عنصر جديد</button> </div> ); }; export default App;
-
بخصوص هذا الخطأ الذي ظهر لك، فهو بسبب استخدام دالة ()mysql_fetch_assoc التي لا تزال تستخدم للتعامل مع قاعدة بيانات MySQL، لحل هذا المشكل يمكن البدء بتغيير دوال الاتصال فبدلا من الدوال التي تستخدم لقواعد البيانات MySQL يمكنك استخدام دالة ()fetch بدلا من ()mysql_fetch_assoc لهذا في ملف home.php يمكنك تحديث الجزء المتعلق باستعلام الدالة: while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { // استخدام البيانات المستردة }
- 8 اجابة
-
- 1
-
-
رسالة الخطأ تشير إلى أن امتداد PDO غير قادر على التواصل مع خادم SQL Server لعدم وجود تثبيت صحيح لبرنامج Microsoft ODBC Driver for SQL Server، فحسب الرسالة هنالك خطأ في ملف home.php في السطر 35 عند محاولة إنشاء اتصال PDO مع قاعدة بيانات SQL Server يحدث خطأ لأن امتداد PDO يحتاج إلى تثبيت Microsoft ODBC Driver for SQL Server للتواصل مع الخادم. ولحل هذه المشكلة، يجب عليك: تحميل وتثبيت Microsoft ODBC Driver for SQL Server للنسخة x64. التأكد من أن تثبيت البرنامج تم بنجاح وإعادة تشغيل الخادم. التحقق من صحة معلومات الاتصال في بناء PDO في ملف home.php، والتأكد من أن السلسلة الاتصال وبيانات الاعتماد صحيحة.
- 8 اجابة
-
- 1
-