-
المساهمات
13209 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
365
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Mustafa Suleiman
-
نستخدم الاتصال الآمن (HTTPS) بدلاً من الاتصال غير الآمن (HTTP) لضمان أمان نقل البيانات بين المستخدم والخادم، حيث أن HTTPS يوفر تشفير الاتصال، مما يعني أن البيانات التي يتم نقلها بين المتصفح والخادم تكون مشفرة وأكثر أمانًا من الهجمات مثل الاعتراض على الاتصال. وبالتالي عند استخدام تسجيل الدخول بواسطة فيسبوك، يوجد سياسة تستدعي استخدام HTTPS للحفاظ على أمان البيانات الحساسة التي يتم تبادلها، أيضًا الطلبات الصادرة من الصفحات التي تستخدم تسجيل الدخول بواسطة فيسبوك ملزمة بالاتصال عبر HTTPS.
- 5 اجابة
-
- 1
-
المطلوب هو التالي: 1- عرض صندوق الوارد الخاص بمستخدم (أحد أعضاء المجموعة)، ويجب أن يشمل ذلك كل من رسائل البريد الإلكتروني المباشرة ورسائل البريد الإلكتروني إلى مجموعاته. ولعرض صندوق الوارد الخاص بمستخدم، ستحتاج إلى استعلام جدول Email وتصفية النتائج حسب عمود ReceiverID لتطابق معرف المستخدم، وستحتاج أيضًا إلى الانضمام إلى جدول UserGroup لتحديد المجموعات التي يكون المستخدم عضوًا فيها، ويمكن اعتبار أي رسائل بريد إلكتروني يتم إرسالها إلى مجموعة يكون المستخدم عضوًا فيها جزءًا من صندوق بريدهم. 2- عرض جميع رسائل البريد الإلكتروني المرسلة بواسطة مستخدم (أحد أعضاء المجموعة) مرتبة حسب تاريخ البريد الإلكتروني. و ستحتاج إلى استعلام جدول Email وتصفية النتائج حسب عمود SenderID لتطابق معرف المستخدم، وتستطيع بعد ذلك فرز النتائج حسب عمود emailDate لترتيبها حسب التاريخ. 3- عرض جميع رسائل البريد الإلكتروني في مجموعة المستخدمين استخدم هنا استعلام جدول Email والانضمام إلى جدول UserGroup لتحديد رسائل البريد الإلكتروني التي تم إرسالها إلى المجموعة، ثم تصفية النتائج حسب عمود GroupID لتطابق معرف المجموعة. 4- إضافة مستخدم إلى مجموعة هنا عليك إدراج صف جديد في جدول UsersinGroup مع معرف المستخدم ومعرف المجموعة.
-
حاول أولاً إعادة تشغيل المتصفح، وإن استمرت المشكلة، قم بالضغط على أيقونة القفل بجانب اسم الموقع ثم اختر cookies and site data: ثم اختر manage cookies and site data وستظهر لك نافذة قم بحذف أي ملفات مؤقتة بالضغط على أيقونة سلة المهملات، ثم اضغط على done، والآن أعد تحديث الصفحة وتسجيل الدخول وتفقد هل تم حل المشكلة أم لا.
-
فرضاً أن لديك جدولين posts و comments، وتحتاج إلى عرض البيانات من كل جدول في صفحة واحدة. ففي المتحكم PostController، نكتب التالي: public function showPage() { $posts = Post::all(); $comments = Comment::all(); return view('page.show', compact('posts', 'comments')); } في صفحة العرض (resources/views/page/show.blade.php): <!-- عرض البيانات من جدول posts --> <h2>Posts</h2> @foreach ($posts as $post) <p>{{ $post->title }}</p> <p>{{ $post->content }}</p> @endforeach <!-- عرض البيانات من جدول comments --> <h2>Comments</h2> @foreach ($comments as $comment) <p>{{ $comment->text }}</p> @endforeach و لاحظ أنك تستطيع استخدام أي نوع من العمليات البرمجية للتحكم في كيفية عرض البيانات، مثل إضافة شروط if أو القيام بعمليات تحويل البيانات قبل عرضها.
- 2 اجابة
-
- 1
-
لتسهيل الأمر سنستخدم قاعدة بيانات SQLite، وإليك مثال بسيط باستخدام بايثون ومكتبة SQLite: 1- إنشاء قاعدة بيانات وجدول import sqlite3 # اتصال بقاعدة البيانات (ستقوم بإنشاء ملف بنفس موقع السكربت) conn = sqlite3.connect('database.db') cursor = conn.cursor() # إنشاء جدول لتخزين المستخدمين ومنشوراتهم cursor.execute(''' CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL ) ''') cursor.execute(''' CREATE TABLE IF NOT EXISTS posts ( id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, content TEXT NOT NULL, timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) ) ''') # حفظ التغييرات وإغلاق الاتصال conn.commit() conn.close() 2- إضافة مستخدم ومنشورات له def add_user_and_posts(name, posts): conn = sqlite3.connect('database.db') cursor = conn.cursor() # إضافة المستخدم cursor.execute('INSERT INTO users (name) VALUES (?)', (name,)) user_id = cursor.lastrowid # استخراج معرف المستخدم الجديد # إضافة المنشورات for post in posts: cursor.execute('INSERT INTO posts (user_id, content) VALUES (?, ?)', (user_id, post)) # حفظ التغييرات وإغلاق الاتصال conn.commit() conn.close() # مثال على إضافة مستخدم ومنشورات add_user_and_posts('John Doe', ['منشور 1', 'منشور 2', 'منشور 3']) 3- استرجاع أحدث منشور وعرضه def get_latest_post(user_id): conn = sqlite3.connect('database.db') cursor = conn.cursor() # الحصول على أحدث منشور للمستخدم cursor.execute('SELECT content, timestamp FROM posts WHERE user_id = ? ORDER BY timestamp DESC LIMIT 1', (user_id,)) result = cursor.fetchone() # إغلاق الاتصال conn.close() return result # مثال على استرجاع أحدث منشور latest_post = get_latest_post(1) # حيث 1 هو معرف المستخدم if latest_post: content, timestamp = latest_post print(f'أحدث منشور: "{content}" في {timestamp}') else: print('لم يتم العثور على منشورات')
- 3 اجابة
-
- 1
-
هل تقصد أنك تريد معرفة الدورة المناسبة لك في الأكاديمية؟
-
الدالة sort تستخدم خوارزميات فعالة للفرز تعتمد على الأداء، مثل Timsort. و Timsort هي خوارزمية مركبة تجمع بين خصائص خوارزميات الفرز الدمجي (Merge Sort) والفرز الإدراجي (Insertion Sort)، مما يجعلها فعالة في معالجة مجموعات البيانات المختلفة. بالمقابل، خوارزميات الفرز مثل Bubble Sort وSelection Sort تعتبر أبسط ولكنها أقل فعالية من حيث الأداء، خاصة عند التعامل مع مجموعات بيانات كبيرة. لذا، عندما تحتاج إلى فرز مجموعة صغيرة من البيانات أو عامل الوقت (الأداء) أمرًا ثانويًا، بإمكانك استخدام أيِ من Bubble Sort أو Selection Sort. ولكن في معظم الحالات، يُفضل استخدام الدالة sort في Python التي تستند إلى Timsort، خاصةً عند التعامل مع مجموعات بيانات كبيرة. حيث تشترك خوارزميات bubble sort و selection sort في نفس تعقيد الوقت في أسوأ الحالات، وهو O(n^2)، مما يعني أن عدد العمليات التي يتعين القيام بها لفرز المصفوفة يتناسب مع مربع حجم المصفوفة. بينما، تتمتع الدالة sort بأداء أفضل بكثير، حيث تعتمد على خوارزمية أكثر تعقيدًا، ولكنها أكثر فعالية، وتعقيد الوقت في أسوأ الحالات للدالة sort هو O(n log n)، أي أن عدد العمليات التي يتعين القيام بها لفرز المصفوفة يتناسب مع حاصل ضرب حجم المصفوفة وسجل حجم المصفوفة.
- 7 اجابة
-
- 1
-
من الأفضل إرفاق مجلد المشروع بعد ضغطه لتفقد الكود وتوفير حل مناسب. وعامًة من الأفضل استخدام flexbox لتنسيق العناصر، وعرضها من اليمين إلى اليسار فأنتي حاليًا تقومي بعرض النص جهة اليسار بجانب الحقول وذلك غير مناسب كتجربة مستخدم.
- 4 اجابة
-
- 1
-
سأوضح لك الأمر من خلال جافاسكريبت وتسطيع تنفيذ ذلك في React.js بكل سهولة. سنتعمد على ميثود startsWith وendsWith التابعين للسلاسل النصية في جافاسكريبت، وإليك مثال: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style> .highlighted-word { color: red; /* أو أي خصائص أخرى ترغب في تطبيقها */ font-weight: bold; } </style> <title>Highlight Word Example</title> </head> <body> <p id="dynamicText">مرحبا بكم يا أصدقائي</p> <script> const highlightWord = (startChar, endChar, className) => { // الحصول على عنصر النص في الصفحة const paragraph = document.getElementById('dynamicText'); // التأكد من أن النص موجود if (paragraph) { // تحويل نص الفقرة إلى مصفوفة من الكلمات const words = paragraph.textContent.split(' '); // حلق عبر الكلمات للبحث عن الكلمة المناسبة for (let i = 0; i < words.length; i++) { const word = words[i]; // التحقق مما إذا كانت الكلمة تبدأ بالحرف المحدد وتنتهي بالحرف المحدد if (word.startsWith(startChar) && word.endsWith(endChar)) { // إضافة الكلاس المحدد للكلمة words[i] = `<span class="${className}">${word}</span>`; } } // إعادة بناء نص الفقرة مع التأكيد على الكلاس المحدد paragraph.innerHTML = words.join(' '); } }; // استدعاء الدالة مع المعلمات المحددة highlightWord('أ', 'ي', 'highlighted-word'); </script> </body> </html>
- 3 اجابة
-
- 1
-
أرجو منك حذف المستودع من على GitHub وستجد شرح لذلك هنا: بعد ذلك قم بحذف مجلد .git في المجلد الذي به المشاريع وتراه مخفي لديك كما بالصورة فقم بحذفه. بعد ذلك قم بإنشاء مستودع جديد على GitHub، ثم توجه افتح منفذ الأوامر في مسار المجلد الذي به المشاريع ونفذ الأوامر التالية بالترتيب: git init // ثم git add . // ثم git commit -m "first commit" // ثم git branch -M main // ثم git remote add origin https://github.com/ اسم المستخدم/repoName.git // ثم git push -u origin main
-
بالفعل لا يوجد أية مشاريع في فرع main، والسبب أنك لم تقم بعمل push للتغييرات التي قمت بها في المستودع لاحظ الجزء التالي يخبرك بذلك: قم بالضغط على contribute ثم رفع تلك التغييرات أو من خلال المجلد لديك على حاسوبك الذي به تلك المشاريع قم بتنفيذ الأوامر: git add . // ثم git commit -m "first commit" // ثم git branch -M main // ثم git remote add origin https://github.com/ اسم المستخدم/repoName.git // ثم git push -u origin main وسيتم دفع تلك التغييرات لذلك الفرع. لكن لا حاجة إلى ذلك، فقد قمت أنت برفع المشاريع في فرع master وليس main، وذلك هو رابط الفرع: https://github.com/RADHWAN44/Hsoub-CS/tree/master
-
حاول تنفيذ الأمر التالي: flutter clean حيث يقوم بالتالي: حذف مجلدات البناء مثل "build" التي تحتوي على ملفات البناء الفعلية لتطبيقك. يزيل الملفات المؤقتة التي تم إنشاؤها خلال عمليات البناء والتشغيل. يساعد في تصحيح أي مشاكل تتعلق بالتعديلات التي تم إجراؤها على مشروعك. إعادة تحميل الاعتماديات (dependencies) وتحديثها. ثم: flutter pub get من أجل أمر تحميل وتحديث الاعتماديات (dependencies) المعرفة في ملف pubspec.yaml الخاص بتطبيق Flutter لديك. فعندما تعمل على مشروع Flutter، يحتوي ملف pubspec.yaml على قائمة بالاعتماديات التي يحتاج التطبيق إلى تحميلها لاستخدامها.
-
ستجد على اليوتيوب مصادر عربية وأجنبية، ابحث فقط عن "دورة odoo" أو odoo course أيضًا يوجد في أكاديمية حسوب شرح شامل لـ odoo في دورة بايثون: ويوجد دروس ومقالات عن odoo في الأكاديمية: تطبيقات أودو odoo
-
وعليكم السلام ورحمة الله، عليك أولاً تثبيت بايثون على الويندوز من خلال الرابط التالي: https://www.python.org/ftp/python/3.10.8/python-3.10.8-amd64.exe ولا تنسى إختيار add python to PATH أثناء التثبيت. بعد ذلك تثبيت الإضافة التالية في vscode: https://marketplace.visualstudio.com/items?itemName=ms-python.python والآن قم بإنشاء ملف وضع في نهايته صيغة .py وليكن مثلاً app.py وقم بكتابة كود بايثون به وتستطيع تشغيله من خلال علامة run أعلى اليمين كالتالي: وفي حال واجهت مشكلة أثناء ذلك، فتأكد من إختيار المترجم الخاص بترجمة كود بايثون في vscode حيث سنختار إصدار مترجم بايثون الذي قمت بتحميله وتثبيته وفي الرابط بالأعلى وفرت لك إصدار 3.10 لذلك سنضغط على التالي في vscode ثم نختار المترجم الذي بجانبه recommended:
-
ستحتاجين إلى استخدام Spring Boot وهو إطار عمل خاص بجافا لتسهيل الأمر عليكِ. أولاً قومي بتحميل وتثبيت JDK على جهاز الكمبيوتر وهو اختصار لـ Java Development Kit، وتستطيعي العثور على JDK على موقع Oracle أو OpenJDK. استخدمي IDE مثل IntelliJ IDEA أو Eclipse أو محرر أكواد مثل vscode لتطوير تطبيقك وكتابة الكود. إنشاء مشروع جديد في الـ IDE أو المحرر الذي اخترتيه. تعريف نقاط النهاية (Endpoints) التي ستقوم بتعامل معها الـAPI، وتستطيعي استخدام الأنواع المختلفة للطلبات مثل GET و POST. كتابة controllers التي تدير نقاط النهاية وتنفذ العمليات المطلوبة. في حال كنتي بحاجة إلى التفاعل مع قاعدة البيانات، تتوفر JDBC للتواصل مع قاعدة البيانات. وإليك مثال بسيط باستخدام Spring Boot: // Main Application class @SpringBootApplication public class MyApiApplication { public static void main(String[] args) { SpringApplication.run(MyApiApplication.class, args); } } // Controller class @RestController public class MyController { @GetMapping("/hello") public String getHello() { return "Hello, World!"; } }
-
إذا كان السؤال متعلق بأحد الدورات في الأكاديمية أرجو التعليق أسفل فيديو الدرس في التعليقات لمساعدتك بشكل أفضل، وتوضيح ما لم تفهمه لشرح الأمر لك.
-
نقوم بتثبيت المكتبات اللازمة: expo install expo-notifications expo-permissions بعد ذلك عليك إنشاء ملف لإدارة الإشعارات (مثلاً: NotificationManager.js) وضعي به الكود التالي: import * as Notifications from 'expo-notifications'; import * as Permissions from 'expo-permissions'; export async function registerForPushNotificationsAsync() { const { status: existingStatus } = await Permissions.getAsync(Permissions.NOTIFICATIONS); let finalStatus = existingStatus; if (existingStatus !== 'granted') { const { status } = await Permissions.askAsync(Permissions.NOTIFICATIONS); finalStatus = status; } if (finalStatus !== 'granted') { console.log('Permission to receive push notifications denied'); return; } const tokenData = await Notifications.getExpoPushTokenAsync(); const token = tokenData.data; return token; } export async function sendNotification(title, body) { const token = await registerForPushNotificationsAsync(); await Notifications.scheduleNotificationAsync({ content: { title: title, body: body, data: { data: 'goes here' }, }, trigger: null, to: token, }); } الآن تستطيعي استخدام ذلك الملف في مكان آخر في تطبيقك لإرسال الإشعارات، وتحديث مكون Picker ليستدعي وظيفة sendNotification عندما يتم اختيار قيمة جديدة، كالتالي: import React, { useState } from 'react'; import { Picker, View } from 'react-native'; import { sendNotification } from './NotificationManager'; export default function MyComponent() { const [selectedValue, setSelectedValue] = useState("option1"); const handlePickerChange = (itemValue, itemIndex) => { setSelectedValue(itemValue); sendNotification('Picker Selected', `You selected: ${itemValue}`); }; return ( <View> <Picker selectedValue={selectedValue} onValueChange={handlePickerChange} > <Picker.Item label="Option 1" value="option1" /> <Picker.Item label="Option 2" value="option2" /> <Picker.Item label="Option 3" value="option3" /> </Picker> </View> ); }
- 1 جواب
-
- 1
-
يمكنك محاولة تنفيذ ذلك بمفردك من خلال إتباع التالي: نقوم بتعريف دالة باسم sort_words_by_length. تستقبل الدالة قائمة من الكلمات (words) كمدخل. نستخدم دالة sorted لفرز الكلمات. نستخدم key=len لتحديد أن الفرز سيتم بناءً على طول الكلمات. نستخدم reverse=True لتحديد أن الفرز سيكون من الأطول إلى الأقصر. النتيجة المرتقبة هي قائمة (sorted_words) تحتوي على الكلمات مرتبة حسب الطول. نستخدم حلقة for للمرور عبر الكلمات في القائمة المرتبة. نطبع كل كلمة في سطر منفصل. نقوم بتعريف قائمة من الكلمات words_list التي نرغب في فرزها. نستدعي الدالة sort_words_by_length ونمرر إليها قائمة الكلمات. الدالة sorted() في بايثون
- 1 جواب
-
- 1
-
الوسيط validateObjectId يقوم بفحص قيمة المُعامل req.params.id للتحقق من قيمة ObjectId وإن لم تكن القيمة صالحة، فسيُرجع الوسيط استجابة HTTP 400 مع رسالة خطأ Invalid Id. حاول تفقد أين تقع المشكلة، من خلال عرض المزيد من المعلومات كالتالي: module.exports = (req, res, next) => { if (!mongoose.Types.ObjectId.isValid(req.params.id)) { return res.status(400).json({ message: "Invalid Id", invalidId: req.params.id }); } next(); }; أيضًأ هنا: const getPostCountCtrl = asyncHandler(async (req, res) => { console.log("Request params:", req.params); const countPosts = await Post.count(); console.log("Count posts:", countPosts); res.status(200).json(countPosts); });
- 2 اجابة
-
- 1